From 8e52c0e386de901c2051b095cb027435a0863be1 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Tue, 1 Mar 2016 13:52:54 +0000 Subject: [PATCH 01/20] increase the slowest sampling rate used to be 20 mins, now 5 mins this is more practical as study sessions are generally 20 mins to a few hours. --- www/resources/js/sampling.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/resources/js/sampling.js b/www/resources/js/sampling.js index 9b40fe4..7f87c03 100644 --- a/www/resources/js/sampling.js +++ b/www/resources/js/sampling.js @@ -1,7 +1,7 @@ //class to control sampling rates of sensors function increaseSampleRate(currentRate) { - if (currentRate > 30000) { + if (currentRate > 30000) { //highest sampling rate is 30 seconds var newRate = currentRate - 30000; return newRate; } else { @@ -11,7 +11,7 @@ function increaseSampleRate(currentRate) { } function decreaseSampleRate(currentRate) { - if (currentRate < 1200000) { + if (currentRate < 300000) { //slowest sampling rate is 5 minutes var newRate = currentRate + 30000; return newRate; } else { From 5d82b010874be8fc2ef2874d7d42598f0663fd07 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Tue, 1 Mar 2016 15:35:48 +0000 Subject: [PATCH 02/20] stop multiple break reminders popping up not tested yet. --- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 38458 -> 38458 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 393162 -> 393162 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 19862 -> 19862 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 54351 -> 54351 bytes .../android/assets/www/resources/js/mic.js | 2 +- .../android/assets/www/resources/js/motion.js | 2 +- www/resources/js/alerts.js | 20 +++++++++++------- 8 files changed, 14 insertions(+), 10 deletions(-) diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index c95e35761cf4c7b0fe26bee46c2e116dc5e79f96..fbbecfc933cd4eef4c81cff002732f4498d474eb 100644 GIT binary patch literal 17 VcmZQJKXqJVLI1Xo3}E2t0{}XV1z!LF literal 17 VcmZQJKXqJVLI1Xo3}E1~9RND@1<3#a diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index a37c96ca227403c525b99ce636cb9eb4293499b5..8b5c2eb2c1ad83b6acb155e733a4d9588c1d408a 100644 GIT binary patch delta 2896 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 F$A8&Z{;2=} diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin index 034cc285828337e25d18c7a80424682dff3c00de..f4954b72e8dc2a9b3fa0c11303b1c0d931526746 100644 GIT binary patch delta 994 zcmZvXe@s(X6vywm?>+<+y;G!AC~c#{9|nhlP{DyMhO|uM(@va2HZ|1 z=iGdwyZJ^}6L%O`E<)&;dJqCff_f!uod2oHOEj)oq4LWR@c+Tg=(z=2d#)7sxmqQA&c!c?5 z6=v68q~6pg#s|LZIxTVTNA|bg!YuQGw68g)p>tVlT_^zqpDrz6vYrVd@# zqEG@yRa7*Iuv`gM~)9es?zXJf5W~vnN=Y!B5i;Pd{*O_p3cx z-;*g!Nl>Wu*Y9rKYfj&xDXn9yJE7R?FdBhXn0Aqt9?vifnxaXplKxu=SorbfUMmd6 zcolHcO2sY|I|Lm3A1fZ$>(cJ|CsH3ZX4bpV>a%0@lTELdZA(1EAs2tk_4z=>T?Tve z#PLWR57gm$m{~EuaNjD!+WPUTDmyQ&g(jYv4bj9^T(pLpIkbwwLHH$ET)Kd7Of6uw zTWox#5u&;BF^S@POQDg}_1n96yA3vo>ruFE3H|?2ygCOL5KH-u1o1QnQ#>u8P8k5; z<9e|1-WI$d;);@%G3HM%eisYYL1Jvc^5tv1DBpGTPoKPEf79H_-Ad(JuY1&n#i&i1 zSsoUXfly3_u+ESIGw8Awr|*!b?0Lh+%jTy8y(_t|4}UL$&EUkM_cNS<=X`|z`}%Ig znWd}yh7LBROx!w~AK<=LC^%&TB5K-j74V{Ygov=A=rpq(2 z_+dSXSQ{2^Lnz+H%^rC~{F@~Ykq>(GgQzJYUtmFx;h!X0E%ofI{)Uw}Z$D{Q{zzFb z+E3uc@&~-R>Rl;1w@aO}P&c)L=-DN818M!MBa)j>;;rH91jH%1gD<*7k_Fp6{$Q~={DG~<|gW;=$-y!>b(mEd1@2ox{ zX^_0BWv6Bd@cFxz&Sa&&Tj5p(qhQe%Vq=8!p)jGHkJ}2i21wx9eBez>0u1=Im|-hl zZZ=V~3C1>(ZOL#*zOu_xqw#Ba4`fmW1~O3#3&VL!OZdpcP-Voly7;xKdr#%u2aS7= zZA<%LR@ZqQ{akgUr(;g*^l;TT5HK=jM3oFY{UE^MB$-EpNL+TRbMKob>A z)GEHvnG)umS$XDKPh#RnXK5=r8^>(NzO|P|=$AN#XGl~HOmdQ|V%)&caRaM3?x8D2 zNLNhFa=h7_z8c}4V!|<;k`~ywNI8A?lhb?B@Eo!OQ3!1-qA}rgmVJ_`)*FC~4Zq#*)k{Od!qcXKn!5;=)!R`~8n~&dWaL zslL-2T7TMTXF0nXXh#k!whsn{nD~#tm)00y_ds%-=mQ%VYoo!7~%)0sxF_3E}_% delta 26 hcmbO>n{nD~#tm)00*)oATWE|$##D@>Rf87FUueY#m|4V3v(B_rZt-Wg*C22N2R z<^^G9?*RL`=6;WTIcLRY_`i5?bq~m{&1-jEVcJ}}g@X-jS%T;)hRvOOkBI>Qm-1Hn delta 209 zcmX@Vg8BRk<_&R~n`^V|m;^t>Z)HmT!*hSFBg5kR%XuBPPJVbqesW*tdkzL5;M)BE z#^i=5v&}zqLWDQ}Y=~eK{4Muow`Z)#zVa^<&T>47Xxs$WAXiia)(~1P^>A}!({|O( zT5C+0C$Eovw%KI^gdy-F`zN1)bb|e~i`O4Y*By4>tgwQMMI2-eYpKGmGsX-IoT5O? x3&PBsE4Op72`=ZYtFg#6VJLMgl?f^oaohv4Z1dV(H<(ziJv}&QbLZY;VgNmjR;vI2 diff --git a/platforms/android/assets/www/resources/js/mic.js b/platforms/android/assets/www/resources/js/mic.js index b9093fd..7d684c3 100644 --- a/platforms/android/assets/www/resources/js/mic.js +++ b/platforms/android/assets/www/resources/js/mic.js @@ -74,7 +74,7 @@ function readMic(reading) { //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldMicIntervalNSBool") != null) { //console.log('running updateSampleR'); - updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); + //updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); } //This is so we can compare the values from this interval and the previous interval diff --git a/platforms/android/assets/www/resources/js/motion.js b/platforms/android/assets/www/resources/js/motion.js index 7f2b66e..d74d32f 100644 --- a/platforms/android/assets/www/resources/js/motion.js +++ b/platforms/android/assets/www/resources/js/motion.js @@ -56,7 +56,7 @@ function onSuccessAcc(acceleration) { //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldAccelIntervalNSBool") != null) { //console.log('running updateSampleR'); - updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); + //updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); } //This is so we can compare the values from this interval and the previous interval if (typeof(Storage) !== "undefined") { diff --git a/www/resources/js/alerts.js b/www/resources/js/alerts.js index c1e5b45..969c2e7 100644 --- a/www/resources/js/alerts.js +++ b/www/resources/js/alerts.js @@ -1,3 +1,5 @@ +var breakAlertUp = false; + //Alert the user they have successfully set a custom ambient noise level function customVolumeLevelSet() { navigator.notification.alert( @@ -161,17 +163,19 @@ function onConfirmReturn(buttonIndex) { function takeABreakAlert() { navigator.notification.beep(1); - - navigator.notification.confirm( - 'Seems like you\'ve been studying well for quite some time now. We recommend a 10 minute break for optimum brain functionality!', // message - onConfirmBreak, // callback - 'Sorry to interrupt, but...', // title - ['Continue Studying', 'Take a Break'] // button labels - ); - + if (breakAlertUp != true) { + breakAlertUp = true; + navigator.notification.confirm( + 'Seems like you\'ve been studying well for quite some time now. We recommend a 10 minute break for optimum brain functionality!', // message + onConfirmBreak, // callback + 'Sorry to interrupt, but...', // title + ['Continue Studying', 'Take a Break'] // button labels + ); + } } function onConfirmBreak(buttonIndex) { + breakAlertUp = false; if (buttonIndex == 1) { //continue monitoring (do nothing) } From 04f56f7dcd81e464c5055578885430ce5e5d622b Mon Sep 17 00:00:00 2001 From: Adam Don Date: Tue, 1 Mar 2016 16:27:37 +0000 Subject: [PATCH 03/20] custom message for running in background notification --- www/resources/js/study.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/www/resources/js/study.js b/www/resources/js/study.js index 3830f52..1c250d8 100644 --- a/www/resources/js/study.js +++ b/www/resources/js/study.js @@ -49,6 +49,12 @@ var app = { } }); + cordova.plugins.backgroundMode.setDefaults({ + title: String, + ticker: String, + text: String +}) + From ef759903fc8db25c874a6c3f51958ef5f952c8be Mon Sep 17 00:00:00 2001 From: Adam Don Date: Tue, 1 Mar 2016 17:23:08 +0000 Subject: [PATCH 04/20] better background running message --- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 38458 -> 38458 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 393162 -> 393162 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 19862 -> 19862 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 54351 -> 54351 bytes .../android/assets/www/resources/js/alerts.js | 20 +++++++++++------- .../android/assets/www/resources/js/mic.js | 2 +- .../android/assets/www/resources/js/motion.js | 2 +- .../assets/www/resources/js/sampling.js | 4 ++-- .../android/assets/www/resources/js/study.js | 5 +++++ www/resources/js/mic.js | 2 +- www/resources/js/motion.js | 2 +- www/resources/js/study.js | 7 +++--- 13 files changed, 26 insertions(+), 18 deletions(-) diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index fbbecfc933cd4eef4c81cff002732f4498d474eb..b1d65b8b5fc89b13cad20772d84f9e9d266fb70b 100644 GIT binary patch literal 17 VcmZQJKXqJVLI1Xo3}E2J1pqos1s(tZ literal 17 VcmZQJKXqJVLI1Xo3}E2t0{}XV1z!LF diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index 8b5c2eb2c1ad83b6acb155e733a4d9588c1d408a..57cefc63925ba6a1f176bdf22f471154e9d2dd27 100644 GIT binary patch delta 1946 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 delta 26 hcmbO>n{nD~#tm)00y_ds%-=mQ%VYoo!7~%)0sxF_3E}_% diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin index 383f6c5401e8288e817f36ec75bca89026cc67f1..835fff5d75484cf8808bef7d6f3c51c22349fcd4 100644 GIT binary patch delta 299 zcmX@Vg8BRk<_&R~f|J{iFPhGBb63sOPT}Ci+MZh{KRhBoxi9m*VDPS50o4K-p}@OW z?>05cD8Xem$7RYhaxefv{BuK#$qi9vn}6nn2n$v@9eV4yCx6P9uMrF`hr$&$fsK+Y zsu7eu&fNXz=+D=+{3)(%$}6A2WhVPJtO1)O5`FXC=E$b)ssgchG8FeZ@>XS^oUCwO zw>oXJ!U`@HfomyhJd+U&69WJ(%YDEA delta 304 zcmX@Vg8BRk<_&R~o9AT9GYVF1nQk_*FiVQ7x;7$SS9SN+$q$dnPwvZnFF0j;gXm1H zDbk&vK1Wp@FJgwva4-Ntw(*{OlN+MUHvh~C5uUuXagE@{Y_mnXMNc2%;9tA)an_}Y zo4_W?71am|ow{-ArZoHJmLv5V^Ah$QfXjeQYCIb_e{*EhcGb-;8>CnSv=Y0omqZJ$ zQ`xvGc-rCv8#XJfP+?|doV+3SsX+IdcQ@aL+rO9#KXKZ#taOc zqCm_G!pxg%cd;-Fu5{S3$#2W@^(r|_4{nlf_Syq-*XFgmt}qF@iMTYSJ~eRHf1lWt X`*NEMOzH*`OM>VshRvOOkBI>QGU 30000) { + if (currentRate > 30000) { //highest sampling rate is 30 seconds var newRate = currentRate - 30000; return newRate; } else { @@ -11,7 +11,7 @@ function increaseSampleRate(currentRate) { } function decreaseSampleRate(currentRate) { - if (currentRate < 1200000) { + if (currentRate < 300000) { //slowest sampling rate is 5 minutes var newRate = currentRate + 30000; return newRate; } else { diff --git a/platforms/android/assets/www/resources/js/study.js b/platforms/android/assets/www/resources/js/study.js index 3830f52..8609e3a 100644 --- a/platforms/android/assets/www/resources/js/study.js +++ b/platforms/android/assets/www/resources/js/study.js @@ -49,6 +49,11 @@ var app = { } }); + cordova.plugins.backgroundMode.setDefaults({ + title: "Session In Progress", + text: "StudyWell is running in the background." + }) + diff --git a/www/resources/js/mic.js b/www/resources/js/mic.js index 7d684c3..b9093fd 100644 --- a/www/resources/js/mic.js +++ b/www/resources/js/mic.js @@ -74,7 +74,7 @@ function readMic(reading) { //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldMicIntervalNSBool") != null) { //console.log('running updateSampleR'); - //updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); + updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); } //This is so we can compare the values from this interval and the previous interval diff --git a/www/resources/js/motion.js b/www/resources/js/motion.js index d74d32f..7f2b66e 100644 --- a/www/resources/js/motion.js +++ b/www/resources/js/motion.js @@ -56,7 +56,7 @@ function onSuccessAcc(acceleration) { //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldAccelIntervalNSBool") != null) { //console.log('running updateSampleR'); - //updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); + updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); } //This is so we can compare the values from this interval and the previous interval if (typeof(Storage) !== "undefined") { diff --git a/www/resources/js/study.js b/www/resources/js/study.js index 1c250d8..8609e3a 100644 --- a/www/resources/js/study.js +++ b/www/resources/js/study.js @@ -50,10 +50,9 @@ var app = { }); cordova.plugins.backgroundMode.setDefaults({ - title: String, - ticker: String, - text: String -}) + title: "Session In Progress", + text: "StudyWell is running in the background." + }) From 24e46060bdd06355aef8c8cceeb9111bcf3088f0 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Tue, 1 Mar 2016 18:02:28 +0000 Subject: [PATCH 05/20] Added local notifications in conjunction with normal reminders. --- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 38458 -> 46779 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 393162 -> 503888 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 19862 -> 20522 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 54351 -> 59187 bytes platforms/android/AndroidManifest.xml | 13 + .../org/apache/cordova/BuildConfig.java | 13 + .../bundles/release/AndroidManifest.xml | 27 + .../intermediates/bundles/release/classes.jar | Bin 0 -> 119362 bytes .../apache/cordova/AuthenticationToken.class | Bin 0 -> 776 bytes .../org/apache/cordova/BuildConfig.class | Bin 0 -> 567 bytes .../org/apache/cordova/CallbackContext.class | Bin 0 -> 3324 bytes .../release/org/apache/cordova/Config.class | Bin 0 -> 1841 bytes .../org/apache/cordova/ConfigXmlParser.class | Bin 0 -> 4919 bytes .../apache/cordova/CordovaActivity$1.class | Bin 0 -> 943 bytes .../apache/cordova/CordovaActivity$2.class | Bin 0 -> 1019 bytes .../apache/cordova/CordovaActivity$3.class | Bin 0 -> 1522 bytes .../apache/cordova/CordovaActivity$4$1.class | Bin 0 -> 1090 bytes .../apache/cordova/CordovaActivity$4.class | Bin 0 -> 2012 bytes .../org/apache/cordova/CordovaActivity.class | Bin 0 -> 11153 bytes .../org/apache/cordova/CordovaArgs.class | Bin 0 -> 2561 bytes .../org/apache/cordova/CordovaBridge.class | Bin 0 -> 5456 bytes .../cordova/CordovaClientCertRequest.class | Bin 0 -> 1426 bytes .../cordova/CordovaDialogsHelper$1.class | Bin 0 -> 1221 bytes .../cordova/CordovaDialogsHelper$2.class | Bin 0 -> 1201 bytes .../cordova/CordovaDialogsHelper$3.class | Bin 0 -> 1352 bytes .../cordova/CordovaDialogsHelper$4.class | Bin 0 -> 1223 bytes .../cordova/CordovaDialogsHelper$5.class | Bin 0 -> 1223 bytes .../cordova/CordovaDialogsHelper$6.class | Bin 0 -> 1203 bytes .../cordova/CordovaDialogsHelper$7.class | Bin 0 -> 1354 bytes .../cordova/CordovaDialogsHelper$8.class | Bin 0 -> 1506 bytes .../cordova/CordovaDialogsHelper$9.class | Bin 0 -> 1240 bytes .../cordova/CordovaDialogsHelper$Result.class | Bin 0 -> 277 bytes .../apache/cordova/CordovaDialogsHelper.class | Bin 0 -> 3796 bytes .../cordova/CordovaHttpAuthHandler.class | Bin 0 -> 821 bytes .../org/apache/cordova/CordovaInterface.class | Bin 0 -> 501 bytes ...vaInterfaceImpl$ActivityResultHolder.class | Bin 0 -> 1064 bytes .../apache/cordova/CordovaInterfaceImpl.class | Bin 0 -> 4634 bytes .../org/apache/cordova/CordovaPlugin.class | Bin 0 -> 6188 bytes .../apache/cordova/CordovaPreferences.class | Bin 0 -> 3223 bytes ...CordovaResourceApi$OpenForReadResult.class | Bin 0 -> 905 bytes .../apache/cordova/CordovaResourceApi.class | Bin 0 -> 12703 bytes .../org/apache/cordova/CordovaWebView.class | Bin 0 -> 2239 bytes .../cordova/CordovaWebViewEngine$Client.class | Bin 0 -> 549 bytes .../CordovaWebViewEngine$EngineView.class | Bin 0 -> 308 bytes .../apache/cordova/CordovaWebViewEngine.class | Bin 0 -> 993 bytes .../apache/cordova/CordovaWebViewImpl$1.class | Bin 0 -> 1660 bytes .../apache/cordova/CordovaWebViewImpl$2.class | Bin 0 -> 1560 bytes .../apache/cordova/CordovaWebViewImpl$3.class | Bin 0 -> 1468 bytes .../CordovaWebViewImpl$EngineClient$1$1.class | Bin 0 -> 1256 bytes .../CordovaWebViewImpl$EngineClient$1.class | Bin 0 -> 1482 bytes .../CordovaWebViewImpl$EngineClient.class | Bin 0 -> 4953 bytes .../apache/cordova/CordovaWebViewImpl.class | Bin 0 -> 16103 bytes .../org/apache/cordova/CoreAndroid$1.class | Bin 0 -> 1027 bytes .../org/apache/cordova/CoreAndroid$2.class | Bin 0 -> 748 bytes .../org/apache/cordova/CoreAndroid$3.class | Bin 0 -> 737 bytes .../org/apache/cordova/CoreAndroid$4.class | Bin 0 -> 748 bytes .../org/apache/cordova/CoreAndroid$5.class | Bin 0 -> 1988 bytes .../org/apache/cordova/CoreAndroid.class | Bin 0 -> 7767 bytes .../org/apache/cordova/ExposedJsApi.class | Bin 0 -> 442 bytes .../cordova/ICordovaClientCertRequest.class | Bin 0 -> 443 bytes .../cordova/ICordovaCookieManager.class | Bin 0 -> 345 bytes .../cordova/ICordovaHttpAuthHandler.class | Bin 0 -> 229 bytes .../release/org/apache/cordova/LOG.class | Bin 0 -> 3423 bytes .../NativeToJsMessageQueue$BridgeMode.class | Bin 0 -> 814 bytes .../NativeToJsMessageQueue$JsMessage.class | Bin 0 -> 4055 bytes ...ToJsMessageQueue$LoadUrlBridgeMode$1.class | Bin 0 -> 1594 bytes ...veToJsMessageQueue$LoadUrlBridgeMode.class | Bin 0 -> 1562 bytes ...ativeToJsMessageQueue$NoOpBridgeMode.class | Bin 0 -> 712 bytes ...essageQueue$OnlineEventsBridgeMode$1.class | Bin 0 -> 1407 bytes ...essageQueue$OnlineEventsBridgeMode$2.class | Bin 0 -> 1733 bytes ...eMode$OnlineEventsBridgeModeDelegate.class | Bin 0 -> 499 bytes ...sMessageQueue$OnlineEventsBridgeMode.class | Bin 0 -> 2619 bytes .../cordova/NativeToJsMessageQueue.class | Bin 0 -> 7364 bytes .../org/apache/cordova/PluginEntry.class | Bin 0 -> 1042 bytes .../org/apache/cordova/PluginManager.class | Bin 0 -> 11933 bytes .../apache/cordova/PluginResult$Status.class | Bin 0 -> 1651 bytes .../org/apache/cordova/PluginResult.class | Bin 0 -> 5908 bytes .../apache/cordova/Whitelist$URLPattern.class | Bin 0 -> 3129 bytes .../org/apache/cordova/Whitelist.class | Bin 0 -> 2952 bytes .../cordova/engine/SystemCookieManager.class | Bin 0 -> 1706 bytes .../cordova/engine/SystemExposedJsApi.class | Bin 0 -> 1433 bytes .../engine/SystemWebChromeClient$1.class | Bin 0 -> 1202 bytes .../engine/SystemWebChromeClient$2.class | Bin 0 -> 1204 bytes .../engine/SystemWebChromeClient$3.class | Bin 0 -> 1270 bytes .../engine/SystemWebChromeClient$4.class | Bin 0 -> 1702 bytes .../engine/SystemWebChromeClient$5.class | Bin 0 -> 1782 bytes .../engine/SystemWebChromeClient.class | Bin 0 -> 10527 bytes .../apache/cordova/engine/SystemWebView.class | Bin 0 -> 2658 bytes .../cordova/engine/SystemWebViewClient.class | Bin 0 -> 9561 bytes .../engine/SystemWebViewEngine$1.class | Bin 0 -> 1841 bytes .../engine/SystemWebViewEngine$2.class | Bin 0 -> 1050 bytes .../cordova/engine/SystemWebViewEngine.class | Bin 0 -> 11394 bytes .../incremental/aidl/release/dependency.store | Bin 0 -> 5 bytes .../mergeAssets/release/merger.xml | 2 + .../packageResources/release/merger.xml | 2 + .../build/outputs/aar/CordovaLib-release.aar | Bin 0 -> 109885 bytes .../build/tmp/packageReleaseJar/MANIFEST.MF | 2 + platforms/android/android.json | 77 +- .../android/assets/www/cordova_plugins.js | 31 +- .../www/local-notification-core.js | 509 +++++++++++++ .../www/local-notification-util.js | 315 ++++++++ .../www/local-notification.js | 378 +++++++++ .../android/assets/www/resources/js/alerts.js | 22 +- .../assets/www/resources/js/notifications.js | 14 + platforms/android/build.gradle | 1 + .../android/platform_www/cordova_plugins.js | 31 +- .../www/local-notification-core.js | 509 +++++++++++++ .../www/local-notification-util.js | 315 ++++++++ .../www/local-notification.js | 378 +++++++++ platforms/android/project.properties | 1 + platforms/android/res/xml/config.xml | 3 + .../localnotification/ClearReceiver.java | 48 ++ .../localnotification/ClickActivity.java | 69 ++ .../localnotification/LocalNotification.java | 622 +++++++++++++++ .../localnotification/RestoreReceiver.java | 67 ++ .../localnotification/TriggerReceiver.java | 70 ++ .../notification/AbstractClearReceiver.java | 75 ++ .../notification/AbstractClickActivity.java | 113 +++ .../notification/AbstractRestoreReceiver.java | 83 ++ .../notification/AbstractTriggerReceiver.java | 122 +++ .../plugin/notification/AssetUtil.java | 433 +++++++++++ .../cordova/plugin/notification/Builder.java | 196 +++++ .../plugin/notification/ClearReceiver.java | 44 ++ .../plugin/notification/ClickActivity.java | 61 ++ .../cordova/plugin/notification/Manager.java | 458 +++++++++++ .../plugin/notification/Notification.java | 344 +++++++++ .../cordova/plugin/notification/Options.java | 337 ++++++++ .../plugin/notification/TriggerReceiver.java | 59 ++ plugins/android.json | 6 + plugins/cordova-plugin-app-event/CHANGELOG.md | 13 + plugins/cordova-plugin-app-event/LICENSE | 202 +++++ plugins/cordova-plugin-app-event/README.md | 88 +++ plugins/cordova-plugin-app-event/package.json | 37 + plugins/cordova-plugin-app-event/plugin.xml | 54 ++ .../src/ios/APPAppEventDelegate.h | 29 + .../src/ios/AppDelegate+APPAppEvent.h | 30 + .../src/ios/AppDelegate+APPAppEvent.m | 115 +++ .../src/ios/CDVPlugin+APPAppEvent.h | 28 + .../src/ios/CDVPlugin+APPAppEvent.m | 115 +++ .../CHANGELOG.md | 100 +++ .../LICENSE | 202 +++++ .../README.md | 132 ++++ .../package.json | 52 ++ .../plugin.xml | 224 ++++++ .../src/android/ClearReceiver.java | 48 ++ .../src/android/ClickActivity.java | 69 ++ .../src/android/LocalNotification.java | 622 +++++++++++++++ .../src/android/RestoreReceiver.java | 67 ++ .../src/android/TriggerReceiver.java | 70 ++ .../notification/AbstractClearReceiver.java | 75 ++ .../notification/AbstractClickActivity.java | 113 +++ .../notification/AbstractRestoreReceiver.java | 83 ++ .../notification/AbstractTriggerReceiver.java | 122 +++ .../src/android/notification/AssetUtil.java | 433 +++++++++++ .../src/android/notification/Builder.java | 196 +++++ .../android/notification/ClearReceiver.java | 44 ++ .../android/notification/ClickActivity.java | 61 ++ .../src/android/notification/Manager.java | 458 +++++++++++ .../android/notification/Notification.java | 344 +++++++++ .../src/android/notification/Options.java | 337 ++++++++ .../android/notification/TriggerReceiver.java | 59 ++ .../src/ios/APPLocalNotification.h | 78 ++ .../src/ios/APPLocalNotification.m | 717 ++++++++++++++++++ .../src/ios/APPLocalNotificationOptions.h | 39 + .../src/ios/APPLocalNotificationOptions.m | 249 ++++++ .../ios/UIApplication+APPLocalNotification.h | 63 ++ .../ios/UIApplication+APPLocalNotification.m | 333 ++++++++ ...UILocalNotification+APPLocalNotification.h | 57 ++ ...UILocalNotification+APPLocalNotification.m | 247 ++++++ .../src/windows/LocalNotificationCore.js | 437 +++++++++++ .../src/windows/LocalNotificationProxy.js | 311 ++++++++ .../src/windows/LocalNotificationUtil.js | 443 +++++++++++ .../www/local-notification-core.js | 507 +++++++++++++ .../www/local-notification-util.js | 313 ++++++++ .../www/local-notification.js | 376 +++++++++ plugins/fetch.json | 17 + www/resources/js/alerts.js | 20 +- 178 files changed, 14673 insertions(+), 6 deletions(-) create mode 100644 platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java create mode 100644 platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml create mode 100644 platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/AuthenticationToken.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackContext.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$3.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaClientCertRequest.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$3.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$4.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$5.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPlugin.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$2.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$3.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaHttpAuthHandler.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginEntry.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginManager.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult$Status.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$4.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebView.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$1.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class create mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/aidl/release/dependency.store create mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/mergeAssets/release/merger.xml create mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/packageResources/release/merger.xml create mode 100644 platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar create mode 100644 platforms/android/CordovaLib/build/tmp/packageReleaseJar/MANIFEST.MF create mode 100644 platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js create mode 100644 platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js create mode 100644 platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js create mode 100644 platforms/android/assets/www/resources/js/notifications.js create mode 100644 platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js create mode 100644 platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js create mode 100644 platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js create mode 100644 platforms/android/src/de/appplant/cordova/plugin/localnotification/ClearReceiver.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/localnotification/ClickActivity.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/localnotification/LocalNotification.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/localnotification/RestoreReceiver.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/localnotification/TriggerReceiver.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/AbstractClearReceiver.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/AbstractClickActivity.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/AbstractRestoreReceiver.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/AbstractTriggerReceiver.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/AssetUtil.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/Builder.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/ClearReceiver.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/ClickActivity.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/Manager.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/Notification.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/Options.java create mode 100644 platforms/android/src/de/appplant/cordova/plugin/notification/TriggerReceiver.java create mode 100644 plugins/cordova-plugin-app-event/CHANGELOG.md create mode 100644 plugins/cordova-plugin-app-event/LICENSE create mode 100644 plugins/cordova-plugin-app-event/README.md create mode 100644 plugins/cordova-plugin-app-event/package.json create mode 100644 plugins/cordova-plugin-app-event/plugin.xml create mode 100644 plugins/cordova-plugin-app-event/src/ios/APPAppEventDelegate.h create mode 100644 plugins/cordova-plugin-app-event/src/ios/AppDelegate+APPAppEvent.h create mode 100644 plugins/cordova-plugin-app-event/src/ios/AppDelegate+APPAppEvent.m create mode 100644 plugins/cordova-plugin-app-event/src/ios/CDVPlugin+APPAppEvent.h create mode 100644 plugins/cordova-plugin-app-event/src/ios/CDVPlugin+APPAppEvent.m create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/CHANGELOG.md create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/LICENSE create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/README.md create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/package.json create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/plugin.xml create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/ClearReceiver.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/ClickActivity.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/LocalNotification.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/RestoreReceiver.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/TriggerReceiver.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractClearReceiver.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractClickActivity.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractRestoreReceiver.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractTriggerReceiver.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AssetUtil.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/ClearReceiver.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/ClickActivity.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Manager.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Notification.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Options.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/TriggerReceiver.java create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotification.h create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotification.m create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotificationOptions.h create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotificationOptions.m create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.h create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/ios/UILocalNotification+APPLocalNotification.h create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/ios/UILocalNotification+APPLocalNotification.m create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationCore.js create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationProxy.js create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationUtil.js create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js create mode 100644 plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index b1d65b8b5fc89b13cad20772d84f9e9d266fb70b..82eb6df01e1d7e41f9c4ed0ad23722e676888863 100644 GIT binary patch literal 17 VcmZQJKXqJVLI1Xo3}E213IICr1;79R literal 17 VcmZQJKXqJVLI1Xo3}E2J1pqos1s(tZ diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index 57cefc63925ba6a1f176bdf22f471154e9d2dd27..51dc1472afd93362bcc41cd331abc9ae11ccc947 100644 GIT binary patch delta 13692 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 Fe*hj4^k4u0 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin index 5c938bad2f61482ed25a9bda0a50d7f5be87dee0..7f50622b29164e85f1cae62c6a7d8c78082cc110 100644 GIT binary patch delta 23768 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 JRrGe-0RSV>Xhr}4 delta 114 zcmZ3rfN|Pv#trrojJlHxBs?ZxkdU0rC@DVKK+<4x1rQ&Q{4n{1l)+>HX@kiHK)geG z!sG-QkI6TH*g{rfat07@kWHBEAZIYSLym{V^wz5b8x7xzZ*;gVyg9(bj8$NhS%*^Y Oy7l%9K)}W5^cw&s%P4pN diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin index 835fff5d75484cf8808bef7d6f3c51c22349fcd4..678d2ad7ab2068293748da0ae0eb73497f19ec32 100644 GIT binary patch delta 2643 zcmY*b3p`Y58$a)vVO-l8g)vqx5kCfXZSd^r!L&BNnDs+EjMQdLZ+Svv-jxp56@`bkA6j64 z9bA>;J?=1%pv!EBKneAG`ZPC=IVSAX*guL<#pf245gO`yN_{G?u+pQBqV z+p_@kaG7V!Dn~T?o^(2f{r+<4^p3*D(Rw)CYzPlWOtLPQ*43rI88VSYRW>{}SzkD7 z(PvaJ8`>Lde@ief{4&~AW5%LFoKc2ZwqypJlw*zmu4p5~RsvXx;o3&+EdZvl8PP&}Ss&F<+drx}p++?Go@H(jg zSkTHx4F!X&d)ZkD`dRXK_EC`1|Rw8qRlAG*c=6Wx3H+drYP#_l;aqI6gK4z zL+el_`rCW17Fcck698>O>9A~tl`Z>OWg@&XfJOFeZidLqxcDPoSTZlVd)NY~B6Utfl+N^($Xa2|s^7d`s8% z`@ghiELKD&ce8t@ka&KCa)%urrY4?CNC;>%EEk#u$L#U+PksK*NGBB!*BLK}7u5{# zl4!P29ikJ)$l>6)2w}+PB#FR{FA|)aK$Kz;s+75Wi3Iw3nZl-M0~qP04^>J8aKP)| zbmh{g3t{f*Xc)J*kCnFn{m{L(!w0vDZiwI|UHd8`IxOeF0KiMqEY0=}?wWr)QVD zCBlrKIdGr<0LI1a0i67KK2x^tsqb#?4+)c*$fSX7nk5EK_@fwF)K4dG#Hjd!JM8Q{ z1P9BQY|w|Z?E_Ee(KcRPsr4yIFUoB!!*Zg5WIOH0fcm~V=nWL+Zws5Dns?j{PWT$Y zD%k>P@23rIPU#esh*XJthinR1eF{D*&cy;MFdFkH?=-sKr}&xKzZh{=PO+t!QKcH4 zIrg_vWUEPiv(fg7kD3$HwsQ2`oycE#%Rc|2F*JTVb9o=1M9J(%-^?JhtE!D4s(5#( zYSM}~z3h5$!RfVMrEGj&^*pymvPxAKdr(#)pZ)CzCx*Fuy_uRjSIc>h$=7G~#i9yz zZu7a%O}pn?hEk?}bdjIaU=>k8wFkKL5<(jQ4fo!%M?526q_}LfTRKQww(~7Q8g}%u z1A`>CEVg8T*ra|7mli^3CFb<=!7q%bMy#itKel<4WAJsS0d}mTiH7a@qn}|;SdtlRlv}iJ2uTkHDZfI1w9!1CJbP92ORaB{qEuV|{_@#=1 z)l`K5xZH0(78{@j00PqjIi_K*E=E*a((x}QodFEThLe(8O5ATrG$m>*FLRO~Jl3HH zs8MSOjoMVGIYA9%Lnyw*nmKD{*C1-TMi^&II7eD>X(9xiw<;|u9dw*_yxe>CZMQ7@ z93H$j6osn7H^D6Mk&FiC>`0Bg9YQ`nO{LsOehj`JL4wTxOeS2SmAJ?V0jcdlt(v!i z#+v;rIv<*4KCdGiGuMSp4rX2meLm&PIXWap91+45Ma@Qn+chY=Fe3Q>3^UPK2~>b- zc#b2NjOGf?;{qYzaV~FLvNO;1U}nRT-(33GR5Tno;^_qkLv`&HuDN^#{|o~w4bsUt z?qHMKNYXo5LtdrH)QteU Nl9~+YNef4h{tqUw8^Qnp delta 1204 zcmdmdj`{ow<_V&ioD5*lS_z~ML)iIK7#JAMAnd~X3=B+C5O(oTAiEjDZi-`IV3vlk ztJX3wurNc|z1={zEQDQF17sUQ*b5(RtUD;qC^OkXLSk}C4N+#Bf95P^l3-K-28IG-^dgSm+fP2K`4d~^ zyMp;`GF;2%Lj`J#;*mf_kxZXznA|5HIV%%Vz_ufG*}v{hV7JsZ)J*PZ-M~_^q{Mo% zVTbZ$g^4Y~i+HxMoG}K5XDJZpf-vLe*d+x_lPk)2Bv^!j0Vm94Guhz2g2}tOYi&-m z3QDTO*Mf}O+}m}NQSb$iQ0{4a-9M$A)t6q2aQ=iz-DRA-uu4?yEiiK4GV;W>9%cmp!%`57bG745X9eV4yCx6P9uMrF`hr$)$t`(F$&fNXz z=+D=+{3)(%$}68CWSY`1zYAfHoUp5CRY>EFLV381E->I2M51rLV<=0^WCQt(nHPvz zL6|Z2L4d&)%N4R0CH_8KeE0g-Jz$Tl-Br#g*qxY^>6V#Ol3G-}<}Cwj!JNs8JB24l z?Gf92ZJ9db#uQJJuqj_aNe8KTOeeMwaOU2ewUaoGCTABj)C2z0D?!li$x2-kdk*28*DG z&EtcIly9#*ec}MeO~3ff5MA@;*f4=p)Be<(na@)YE4Ww$uBE8)OtSfDdiURi81GgeD~RYkH4~+d&Ph8t zj*6O}(Ae@7ED8>WC*8M;LBYT&3dF$3;N)f2Iy=qe&qX8eMyaS+Bc_lJSVUZ5610lX zO1W@Sm~+!-L5}Q#gk?xl-U0S=&HWzxa?Xm)@PF~(DopAIlkoN2Z;c>3xb6b+RS;(0 zY;w?oUEpZsgNfD>X)d#^#RZMe^9W2{7^tx6XaTcueXFM^NC)>>AU+Dh%$xJi++Y{j eVwnCxp!Cy;tt*`FZ>#zD7M@zc!C0{RZ65$&T + + + + + + + + + + + + + diff --git a/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java b/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java new file mode 100644 index 0000000..d912600 --- /dev/null +++ b/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java @@ -0,0 +1,13 @@ +/** + * Automatically generated file. DO NOT MODIFY + */ +package org.apache.cordova; + +public final class BuildConfig { + public static final boolean DEBUG = false; + public static final String APPLICATION_ID = "org.apache.cordova"; + public static final String BUILD_TYPE = "release"; + public static final String FLAVOR = ""; + public static final int VERSION_CODE = 1; + public static final String VERSION_NAME = ""; +} diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml b/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml new file mode 100644 index 0000000..90863ed --- /dev/null +++ b/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar b/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar new file mode 100644 index 0000000000000000000000000000000000000000..c97370b1d979bec97d8bb5c5363c9e05efbddfba GIT binary patch literal 119362 zcma%ib8sealx{Gw?PQ`awmq?JPHfvV(HGn1mx*oLwrwYqiE-!d?%mqo-rcS3s_yDP z&f9NwpXcZ~r?(9Gp!Z+>QRfB@|x95$@oBKLaEf z82x{}MA*&M(#+n~%EZXk%E4aE!N$y<(Ztrs#U(m^U8esVD)94?rZ#%1{*P-uPQsGt zw;P$;pF8Tx!k6!y`g4_bD$X;@DoS6Ne8EU$vh*X9@r5Dk`4XQ$p8;N%uk&9$^ zB~hfI;#et&^aNT)%!yLL#~oC-#pgu+!`Y0F0>`w-pzF)|SHakV*RQrLn8-y;`=Y=K zeLLm@g&^$GF}Ksm-$l!qyBrSgjfy*W_CcX4he5`S_Tyo_RWSL-H-aAPeNLmCdEr#j z8`%Ez`o!Zs-N^PKiixs0VGdop=9kv^1~f0L>=vI_$|YlGcRnZ}JoCZwuW=YwGyA-X<0Ute^s#I}&45Tz&z-dSepG=Ex#XsuYfD3$8s z8p2AUeLXd{Yi*!Y#F8c?K&dzpXmpnP1eYF)cI#c{iO&Xkn{QrtwRXhD+CM9&@uLb5!hiLap#J62Z#mK1us|~!F4H^#4R(jZn`LrF zB++RIG3fembRY<2M-;Cdroi)7WmHrD$KvoyRZ z7|xX21i^g>cDu-CQRTvE3=8Ke+O!Q5I)8fUF|aGUJkfx39aXc4kcV#5^DE@05zWQw z{+64IbXFG_37Q(cRUC8NUrjG%3QGx+tPkN)*xXz)Ml=z)vJ?%d6+=>kS7vMF!&2X3 zC?>SW5*K$>b)gw%-9b$|e0`1LdF-)?w>7_@gZ;))+JK(e3X1qKB(A=kx`edN{p$i{ zS3G=nFa167nlj@@R9ko6_4FwrED`C~{j*`_#umI3lL2`Y69|;cN>9?z z)jw5PZgX6ZMmVp{dmt2$bpH^j;wS#|IEjdID%bDS+qu1Qy|wN4qv!g^=NrOL)hBk~ zGV{t$Z$vm&`jN1&g{(sbEj0TYh{}i(ER0WLn29U{w=qv?5xbmQSh@4jEkSsA*Bm>3 z8(0aexGaLGRO)d&!tjBZP_w~X0(igC4|Zz7-YFQZPR{hHx^)HH`w+vM?%LtGj?Cn zqS1RRGMz64N~oU31RwQ5_{~lq1eTVHN6vKwzsRc9RZDTF`tsxvwVY-pppN2+L$C8! zq&Ci;&1IP@l(|sKA6PO6&@3(tHd95dAn<0BJVHIrnc>-9=1)=>w=H(ZOK`7_in*U_ z*!$4RV{lGNEJPd^SsB#3=vpslT-=v?M1qndxn$Liqir-AP1&l7z8mVgWo0Fg{iujp zU^jl{F(JgqL%0B`Ghnhu#*;X{Gw4Y0@Nu(n@^UtpVCj+Ep>r&F71u9ohC1gK!;QbM zfAf)7^*h*Tc+rq{xLO&W455+e7^ z`3YEv#7kTNr)g%4XB!-JcvpIKfg?_`+6o;JPm)b|nUj>-qC7-VVJK}p5?W6J*IS8b z|FIfO{+>Fim;4$Y28Gx!&r)%*P+s&S7*M%CW!LM{W7dV>d^p9kOifm^H@zEGjAYQ; z-r8OhM#>{ru#n$JUPi?1`a6GFH0rS636bX>Qtex>mKB0QQpo{>&hngY6IW9OvEFZMtIhMcd~+V4~u zZ1Ds;Olf{vz-DG{Hky3#SY+c{@-PUxk6Fyt+<$p`TH($O@c!t7I&*}r-e+#ne1jK0 zLfM8pp7_&rkm1ry|pK%Pb$tq>4* zWv^fQLpRxHW%P>S9(p_BITh4C>X39+HOU1_+6n#+d5m6e2VP`VWA_~U$0kQ zZ&3f9yY#}u8_}asxqg9n+*HhoSLqRFYJ{7MV*gDDB13NoN(OaL89&bHR;8*u>&ONP;W{ro7x$)FHl7fi8EGz>7X#?{>xdH|w%ZTBEpI}LI7%y>{ z_loGHAJmyY$pW8PHk{byZzY%NZvs0(I$y0>Q2%6vdJDid+F`-?DanfI!;9HHD!mFU zj4M121p1Veb00ujJJnt?6mEC0yg&v-J0MuTndk_W&OQb73^hZsf3Ow!8x-C`1`OIF zP#@ulz27AdBBIHz94Nb0P<)J|g>JgseE+ATHLpQ1D*l_*u)u(Uk^DD~_CEy0Xf=IR zU2$B0Y>_VSJgXwLHS1&uKnWp(mTut6xBLRDNF=i|t|{lb;L1>ebb(BW4^oGY65hnA zlc-d;A(F$VtD~8l_?SuYhmQ8?SN`keE1}PiTb!Q+o>`LME_f5iEI(Tbr}o)i-R3|1 za)uc;rcA(-`LS=sv1Q#~$LX)M+O4Ax5j9v_#+h5RJBO7j1P-TLNSqh%&n09RE0__h z#b`P8(iw=G#Ief}PqCM4XAlz`rMUdI_Ij&sf~2^}oT=VoYz0>lxCkSt=OR_4>%~|> zci5uVl-97o-yEd_K@VF^Gnu}8m>NRxo-Koo4eoX6tnIAkEqC5DDpK0uz+08*a$t;U zP#i-yKJK$zMt_95yh|O~AoCK5X!;ToihswnZunhmF>?cG(u9aLDrM|_%tW|cM{+Fy z-qbGmvRJJ=0yPkViTJrO8u2|N3d!s6tgf`h$|fOQ2vX}J)h70#rcMl#Ttg<3C_eE4Q&E^qD?FY1_*n4?>A*# zyjH3vQ~FXBbr4y7AQnpM4QKzr=X7LfB<}ATpbxS6jS=*BFRkHaJm39% z;42>g%?&C6``=eT4!nMq=KHbZL?6}N-F+>)hze8RZq9Un!vMgm>uV~h9Q6-w3$?OU z!LLRF;;)YH?LMfY%{YQ$r+^zzYM0G zpDBGbA1qw^8IN)629Oj}&@* z23|ZWn-~p=^O*^Rn(r8rJzZ{J>o5V1AzdAeu$s5Xl{_7hHgLTdB5U>GLM%6%2#6ms z3l36~uFPVxFjg;Pu5p)Nmra<^nV7|C=P^ygUB`yi05`;!uIe#;dXBeXIAQk=h>s24 zMdY|epRw^n^y)hp1>l!85Vv~6rhP8!G+u<61-{n&OV&YnMwn|3ME@saER=8-w`C=YoeJZ*qrrQF(U_(H#NYKXF!Xm(n zz=le5M{#=l;Q!Z~@%9+tQO;1_FR!S*ve5k8jB5rDUsHuEV z)4eoPO#0ZqFn3`{d-H$pO1~!B=KHwrTpczL_{02j9P7!E!+zOOl4WU!i1zBfH*)>( zkP++pUU+cx?v7FWYWBu{^*Z@bpsqtRPn72yqmAQ!NyqLu z6!?8f4&RB;*nJG=H)#?@K~TZ>2gUKbbacHaQCh+Cevs$4!DC-fBI3CIS9ag6P^O(4 zpn;cA!EOl<8OaZyc;O}v7>yreC55xktpIy0?X;f+oX2+$zhWwTNR(U&PR>c%;`-5 zH2N7~MQs%;Ww?v!N%Yft@y-=eHM338`jr}U@w#i3RcX6LwyM1azWlPk^;-ph`D*q% zw@yY-R@StxO<1cmQ7a`DZ<>TWX(ZHwc#J8mq@DU|qAiE3zR-x@YEjq+Ki4coXiqsq z7qyuOK{&YZ%Q*c-otp<1$Xvx|^e zBH%2S3Lq%ab6#J1X8_Zy-{P{}x5F|e#Y zmTh0d4kyRV71~cV2a0x^=8as@&{@c365)NKq$1j>tU|xU$81U%mOc?fW}#_gA+$qK zO3ynDZaSuF#>O;`X5>8YxNcR2#?x!`i6i6V2cDM^xHR7oRMO>FZ z1whzYQ743SR}19Si5^+YLI_!X@jQ+oBg(8vH@v18PcURolRt^BV3>z{czA%W)LOa7 zT)z|}=QW76!JHt(Xme{Yt_%$KLZ$N%EG!v&U*1%bvnsC`CPme z$}(%mhr1|F!h%Ck`jt(h!fVi5&O0UiMi3wa#b(fcUFU+l)o#D;&US#vH>JVT86_k0#>9Sw=1?&T&lw;5R>mKafp@Hy7Oyu{%%*YcCg9l zlnNajTQ+Nxz==KW#X_$;g99TsniAqfkS;|BF*%|8s~G$4RA`&8>KO#vX+-|p+Tgx+*xf)MJr-<>T{nv-HY=0?yN%mkAq!!jLctg@SQPLNH`nvUdKNgPxo z`j#O9p-QgYzZymaD)7kk(l9t{qV>o_A|>IM57DNA83*c_C-|{FC1}%gmje}C%|cLS z?NA<*8?B-q6>nZ!73EA+@DHuz3^bg;)J3UP>nvWB^$v2qA?9Pg1na~P-LunD6cImO z;mx!dgpXzV z6{*$TBR*AT743=Cb;?bf(`xYz3(-ZdzB(!Q&}mhxzb#TJ?}L+W$5MsEZu@WW50f~i ztB9WNOA%5@QyLYZ9wEYCd00g)TtHI0KOMI( ztZht6I(gx1HXLfDdV-wKioNHxW@2TJo^aYA5=R|D<1-qM)b-jPgpttTO(Ce@4sJ5YPtK&hUtc4>Z?w@6leWG60KM+I>8s$4Dh`$zZ4YLrfE0-(GN$j z&lh^54Zv#j?N%evbrOPT%wgAvLLnA&VsP_-?sIbvW}`&I9At8s>fBeUxTHLt!= zwr6LS=ry|TB3d+O7iP=wv52x)KyI%}Xq&;-a^*sBYWE5A&&&>9pe}6wFRfYqw}7Ml z?~1p7VYG!!T&>)#T)ik*{w=ptUAMWwD~XJPj032OFexwt!WtM* z#Qi+n<@f4p$*Xn4yJ^vJ!eIn|!Vo`w9q=R&x04}7v6+sV=E=dE{&;%7J{LwNT_1-a&)_YJo|qdOkS z=*5XQ>{ti(Q*k1fEN1$9Cb33;u4!138rRUQ#$H`F=e<39r0I6cNG`O=)w}&@?}|OX zlC9fkp|Bj7URZNW{=zr5e_pMJ8(*If1)x_K(Ybq-1&79btMo1{5c@^ZM1JvYSlsrh zB{U-zB0^B6<=O;J^OVNo6uv(w(n#Md#A}#*mM8`t82yQ$vLyOpAom+j=g*Lk!Rdtf zLg=3taf~2Zq#OQ8)^atyUem)9x_m@y5^epvW6STBO@cuj&0S=VERYN{I$u$5Fa#?X zF>o1;&_?K~hFQx4=>`m|Vog?;gWWx=pW!MR|3JA6tCn>ulzL;Rql{~fP6<@(>7;Dv z4CxKKt^K~o*%~;!$TBD2-$D5&G>-HiE}{Rj-LL<9Xt4f2XxP|b2xAH)ZklGA+8Gnr z_&uWSyT7i?RY&CI8o$?<+i5=N^M&t&gnCFQw^qMENZ8^&2m;xT zb9^iwmaj>KzzGezVG&{*y$U9E;1IN!_DDI$R>U^@R1uI6rg7m#i5HllL_4ucbB19y zt`VkV)wuATt9c%(-^7s3?hbi^DsM$frTo;u`&G^ZF&KA@ruk%(5PgDaDE#o2A89;E zMbkS>pDrf)1#!%aw=^<)Z6);2^5+urJyQ+bgI{|10%l&wa$)SMil(SCiZ#ScJjpp6E}8CgmSoD1MTNqQ=e+3?{1+N`R#pOS zOwh~-DD7-F>XduSqU|oURvK$zVj0bdr4biTl@xe!`V>oUPnWFlf%`*T_Qm9_%AT~o zq@e{qCD-Y_PBG@gAJ>sJPlhuodl5#zh4$Ylc=5&R^}5jplww|IvCOW$V!bW7>yxLa zhkdNbAg|LhhEtBQv^;W-G2k7&!Etwh*l)V6JYq7Y zGbcws$Vy;7@$fVeyxP-==tY7ul6g-e)R%pMDbHUX^`A;e?z>$8{9h#9{iWppmyU+* z-_WFXuJ9L4A3%eqB=J0F^`r>(W^w90{Tm2a9h$tKxX)ahL`IIQo3_pB7==UKf&sBc z#w^x*kWVszA+~h@U_t7~MeC)<)br8A>ihHSItrMo=SGadL2{bfULd-vjGkNpO6nR* z%s5d?U^#vj>Drfj=FBIOzjy|n|u2fH(jixFq@gebhzksa(Hi-tL;ax5jbpd%^wL{i>s9oL1b z0@nc~nCgTqc)lW!}~+4PRAynZtYHksPIs@WVipHT(1yrbxr#Mt1rWtpNcdDkr&NFlaYK znsaWTTb7dX7hudQwWVjC37j~P_)4pbuF_XM0_RyCoj0XcgvnfBIt8HVk!En?w`_sS z&E3!%(ZH~Kt~DqMY-$kZOI*B#wK=F{Jk=V8wo{;kG&=dv^=oXPlhf&0*q+fDbULfY z6X+mB8g^R>rZH95Lb?MgTe=~!UwK($BL4bxNmmq;4mbfQ62TW_tdo`K`bjjcu)CGb zX={Yl(a%ce$Dne+N62N3zz!SZa((nR(JZu}m!-mPc!zP0SVE(VG@Gv0KbH>$+rJeG z)5TX_0OsyLPa#Exj5jx}AHn7t{PT;E5dVY&1xxoV3oU|Kt$v!?#gR~DPem{GIQMfj z91hup9RLeB#9Tyc@r_%V!hXQBNlFjVU|eu0ByN&u$dU)uf3qwlZiwNADV*JfG^T|_ zan7B6Ktm`Z%gy%_4@_aIjV*#N;_VXs@dA~7Aol1)u_zvRkyh6(eNjl2tb+C6q~;VJ ztfvx&p2{_|qKjDPL0$7m%G9}4+e;^l;`9^(0XpmpirVErrG5{las*aTP~HP2dr1E2 zpNCFlLI1ZKDe||W{oizyMgO%K{qLch{ojMP+UCF56f%Rp4t7b{k31E}-Z^U=)ISiS z#$^=p5qgF#H})$;YXN2{7xv{{p|{rza!Q3bfkX#0*)TC_%Z%?xS`6qZMsgQYiZbAS3qP+t4&%wK9#OS)tX_y{tiZl$b}ZP7H!`u*za6i2v3zoQqg$&6cc zCPLx~;J|=O7O&@11^S`U?B~M#1_F$@eJ!G;we#(v$M^vB>gyt}$|b%ZVpJ+rR~VFm zHS@+)yqGx~ws;ayLec2h&_@^&-`$g!DU~9bYg1vbJtebp5*aQ-I!6-M$GF)(XKV<= zyLSA977b8`WIWtW=aBpeJZ5W@`+}pT+38z2HRMf^&N;7)`uqF{P-b>o5tkuFR+F3| z^ZBl>dgJfW1NjUsrtFs*nSMkQqiu}e`@|=}O3h|G5n2Xp@KVgPO$0PQfrR<)(7d7_kN{Sj zdjxoB{?tH4^64E1>e4~#n=TmYn4g<~ zNx-Ruj8(5pKvNY5$v3dxSm@G8l?HZ@6m6~YLgpl;wwC+;l{`bWAm9FSIlSQWL=+qw z>wf*d&_U*YYbG^OO+PQ7zT4$$(`D*C+vU3T^)n;0Et3dfw|vP| z=d@3ua&-b&wl!<@oj^XnNZ;hQ9Q#ZKBKekE9m;PVS*sEZwZguQamx;dKkJu?(U)sP zaAac#XKD_t zy7^>#h}btgs(qF%|6y<%)zG8L{pzX`k}s#JH+~C2+tU_jS6ynPKa6F2k~Y{7bBxvT zv!B--lTg_abJ%r)^w%zJf2~E0M#}YB3$QFk9_l(E;d_`0^L~SK)u|^5$;lHcm#c3u z0V2!?2#i-yB4)}dsReOAmfV)z9xig~U|_%0Mt_;;;`*(=Us;jkGH?H;ov!P8R*=#B zbNH68L6QT{yzVm#W!weiNXbIlN-jIbLIm6T;bD^EuFAZ=Q5~V!-q$EbgR>h)NwaX2 z7r<7Okwus-ED&WYAQP;Yq)-f08hD&X*F1fjEus$941so|=hB<6tz5_A%hOZ;!R-V1 zqhyjZr!o~f@K{^VplqtWynt8BmNcjN?@quBg_PS=IYZ$#fmh}}J&>lK|F&y_s z|9s{N1UDs6Ot@<(3)6#sl$18*?`7d8*`hY&fQQ}KlYx_d$i za0`Gx==eJnqgeC-@lQAKp0Af$|FfU>(hrBSwWJ z4X#1V45mQE`eI6l8W;uqNkN~l?wjsKfdcrwNB>1nr_p-Tx{(pv5LP?-MSMO<6I?mWU2l z9vrMWvx+g3xV|6({(^{G1A&FeTcf+$h5r6dy&-bbBE8*s1N;drV&cQySp(vJ z6M>7w>wS1HenlnE1i6fg8_fK2YzYolmoh}f-_8sqfX#l8PjEvqPJE_?)T5NuWYREw ze&*$FAwR$5QqK9VR|tPDj^{I9hZ1olrU8BZIi|rLNQW^&vXeh$>}J-$V8}n+J1UBZ zZk$WX#*38e4t}?GPL|-AJ0ug+;1cB3A@O2kcE^j-JhJcy{s-5!F0~x*cH;E#`2Lp= zF4)y@1D&A^ejO}i&(eS()(Rib!isG`L9@>abufLVscC&wa1mC5Mrde%0l6ynWzue< zDfixPiL3EkxQ}O~Ya4%u`pbHeOI?G4@{?M+XGY1{E9)I(h~ncMfbs4I?@myaSSV>& z`|jD6lz&*%f$oi*N&Hz4+$X2+n9esKwe3kHM)>c;MKAqE0xCFj1r7)b@(s>Z=~-UBWn6EZ z`Cw?aIgN5R>j3voPD6=6K-l@kqfV!K*tZ`e1#RY^_&;36fyGDSCkvYMBWtEwzH|3!bF(aXnuvnv;E-Uf~_QS zbUv^F<;+Ec{Q(b)@u*7|h=c16o$2chv-)B)X?eNl$&EXA4F8!>(j<=Z(m$I9J;^ypf0oY^mT&HhWNT362Ivj@ zD!0X8PQ8^M>4n)v{2o^dbv|(;0SRC_Ss+sun4>by*I7o>u~H6@RPKSGpMv2DZ3r~d z9rzN+%VuhvUVv;@f8|LvUo`f?o_jQ4Re#oB1DMhL%TdWkVF5?sSFr_F$X1Ir#n@7Y zQ#2m7GL54J-3a8?9VHq*_*F6l|Nj zzE)(}3KKuEWuN`_P4W$HNs??&B{}(HYiPudxVcN6ze_1K{lQyYSO7l^7n{Fktptx$ zNms%>JVOAR;RSXvY+jgr4R5ZAr{eg)F(@EPi*qCvk7X4o6G|LyZD%~Uv%7?fJ=jl41yC_y@X~|A zl~$q<8`8#JzSiSqT(~O?p;|n}Fs4f7T`jLS z!Eh=kzc#&9GFNy|lAi{HPk_HEoOt+dTiLc^1D(m^_9YCnabS5yN7hY;$ie+eNr^e= z>5}CzI7(a*Hp}K3U9)9`3hB~^h}gaRfRPo~f)*R07m?Y={n%l4?BqmU3@Y$xM%z(V zp^AJP7Gi!HU;!YkF6qPXH%z-qtA+_(`aI$wrl(ZeP0AMgJOawz=1l#`ItI+G(!1)X zW!mkD<{k|^WD6M1WQW6bit^K1(5(_|yVi28N8e;mCd&~*5uLUYw3`|OxFPIIRER`cCCY zrw$BRdB&D{YvyBFL!^88J(xhrT=l7W$YZH*YSdfIm8uorrP3+!NzUW%P1^TB!wCB> z$wQxK58CbFN6|~!`)GWTYy5JN9^xgA7OK)WAAd0L3Q-jNj6RgIx4(4hn($%hlTk9s zuB6ceg?(g+yE4CJ8nS&d$^P)}Aq*3>ntx!f+B1#6&Y{JVcF1SRUG5W4a&9Q*8$@@> zoV+V&jOlh9zPn(~zfJd0^O+<0`|&WAKe@c0zC?|D>>^``v#YK$-kIu?yzMNa{x~u> zexs}fG-(qW=J=1JW;OrJZDA3eEbaZ0HynSQUh-BAU9odpE{M9t%IfReSK7~H63u7G zE&|FKVUK)F65370Zk#2OvNx^|*u#}xgpu&j@!(h^wKgoTtCbuXgG0q9DXtUg}QezvHB?-DMO=dtU*I=c%M)x%B_%DUm|wp0wBB7>XXvv zohB3_zkq8H=dQNEW5$t|ARJ#Ya{fbC!yA|*?zS>+OZzE_`9?{6Pbd%@m7E=3Awca` zIZc9`MudC2dN{(~QP~HjOkVPO^s4p|(Va5gt7sXiwy*jNk3MK_@va3}b!PL+Vj_SX;1&dFZ#V7e z)O5%Sw0)}C>qRdnSHYIP5&JFGivcOF-UEXbq% zl1wzeTgV-G0Q*1<56#zjud>PW)<*Zv+RiO)pB+dr(FBgLH>^xqHvA$2%_DiAT%%O; z(2$Wr*xtLnk_AmEos$CYZNZqtxYNa6)F`a_O#Ka?6{yR>bv7`R&gleH5FO?(tlf6JDE`2d#o6&)9i3iFH;p z0aS$$Pu18F=GmEvR6qYX-z;R4L1KaR`BH1!g#8-V9&H1D1H07s8vo)~?x#XXpCYv# zqWU7RZLuk3y_0382Ol3?^-u?m z*3hMr%aWT**5jcxur1!>D6=xx)`|T@ zI+cv0X30A=!&>EV)}SP1|NO$;2-wwCpacJ6VaeU$A^bCrft=(X_<&cYml2_VH7gwc)d2zzNeId?VTHOzc1)b zE!d2dk{-)w-90|8Vz4F7wr#gFww&KW)-QjvbWULkBD=kbxUnv5B~rjkx`~&d8is7e zZ=&Xd2{wKIM3S+0wD=H$7uvCDEl^;?m(@4MTG=g(ecHPo4S2wrCY(BSuvd}Ry)Mswe8|vG(oE=1g+Hjgpj1>3gfG9MaFA9u2wWg4GB%9k6Bb?4DI8>N z%LXDmllqhn5EH=%8o7^u2pZueW21EDM0_z^Rk$0a4Q+w@#8B%>jHv7iy&-uoJF~~v z4#|%YU@v7Dfu!je~>?^CTD~%0ibt8S67ZQpT*XZ($8C!usOwC z`}RwjAUhzw{*;~l*bRT10!>M{<-#HknA}oqWY~1o66J^^G=QR)ya;dr2fWNYOkd7ODV+jLcnosWhQ3ncg184B9z13B)&Iqq4v+_<*f&~rPXjI1I{p%4LZ zgud;koYTWBb|yI}L)m6e3g2SN&1|SS2u<2JwYFIa2X?6@LQhG3asOx%bXxiCnKL2Vk4dUS@AP+HJv*C7vP-=PSV z#m1ipz6Y!@q`Jn?v(%Z0|AxYgF!60V0{pc!9|TWo;`IQpcoc>C1B~4#By9h2ug!#n3@U+L z$5KYaaJf88=q`V)GgjkBIaVc9lv1oZPNbSl>~Au2k1b!+JkM{WV*OjbAXMcFJ{v1w zzn>tJW%hF8ig-Gg#H9n!Q^nCv}x z$_HwnznJLhH7s$ih;S~5SzQ<$y+9mGvKUX3^l_jgL-PMMnH#LwBfUyL;?7X&C@6B}B*w zDphJ%m_gjUr<^=)L86exc7+{VkPF^Q4A^?Sp)Pn+p%r_qv3c%ZXMgSOv3vRq88l>)@wgb@_uVBda-6^P~N2Jx&1b zsRCtRHT>q;^bHB48$9o&-6o`sI|_Jpb=O3L+HBgMLR&s0zM=}lE)#8bjD?g*XVSyp zWVA^;jF96 zh&dWFqjI=~v<&ZLM!X1-cGa=#X?+wT#B2Ba=e&EtmE@SnN{#~VD7{yA-P`&rp=q}i zGvj`8rUs)g1W*$x#L@6pqdsH@LRWstZfJrDZ!GkLO#U5yU=m%{%7G*=4=*1b5>UBB zhn#_rkS}(mdCCDZxg7^qBUA#ij#-beMU(K)N&KGk<0n9oVOr9E3mm3_Kd)k=Gq-?2 z{qXAU%|3#Xx+@W&hWW##62sRV8&+6TR-Fc)1J#I5s*cMT=Fo{M$rHUSkb3e+wIoLo zn>0*+zQCS{iOa#DN>4@oSNR)!*A65_Bj+HmJteKjDFS=-vb-&nckL zxYurW-Fy!va7@Mqy?3VjD)Q%2Df~WTv1F@jPIjPcL*-F^X+h}$rW(<& zs$^=PwMrU+HAj0uhy!@m`W(dB31-$T^M$0qhXL?tn8u%q`)$nU_O)wpI(yOv$MX`p zTEMDfOtoXo=l9DOyd%R7|G3O${hdaVj;qt4*od77gg2(k*z=VNCX zuP0GMWu=rBfRj*F*(sTs)xXzXHesPP=`Efs=c3!+N(rf14vKMzKft$R{y>wPC`y3R zG~(|1)kb1x4E+(Ga*IaaxaD`LEb)ax+Rm(WdZu;aEWr9P-#!vQpdwKulwJZq?7VvW zl5i1Dg<_iN#oXWEMF8}Lt=&+n&6hRsewAO%>O{7ErJ)$HBK$-I`{AyJ~B=`606_5hAEL0L9k)V*AfqV(GP0ldGU~VttQhi!}!Tl!izn8Ri<*8 zlap13^`peOF7D{qbPf06dT0N^rEk4#BM>4%zOWT+mJtuBkr;W1xhrz%90IBpIUsob zp87k6_Zs?GAd9Ll&HIa{GuGB`&*VQj)01~cw@+P}@c(&sh+}K!RN7(^t5-IO!_#&3iqNc2N1IjcFABStt zlAkNwE+t-fSzDVIdI5h^$`SP7DsnZH{}`!fOXTbJI-1J%dcC^-0p=T$5N@==?1)bX zu-{7=DI3WcK_P>RUndifcZ(+xzY5#HT19Q8a{g|rdJr(uk4T)(9a4$d#O7JySYW!G zJ(#DX$*q19WNqJk<e_|VozI?@)l7z^W9P4*UAPR zPp?3`+WyG5UZ(X%c|J$bHohE3PP?8xMbYZ3`*Uj|-K+56=js%L_;;28kgB^Sy|x=Z zyl7$hYG2i4UdE-m%Q;B@*M^}|?74at4!pH`Z^v!H#RZq%cDcn(u;0|gtN&!Jz#Qy~ z3Nv@p1s6FTq0SLDPs15UfglU^>m||HQ0rZ7>!}@-ggNFEVYu!31arfV&!S~~KwDgZ$wZyfpklv|)clPyshsbDAppWh*q%Ph=VWZhYZ-G^_f$fqtyq_!j z)C8A@d)7}HQ1&JNF^@qym2P|x|4?@8E>}=p{a!?BVrY!LOdvznpelmJjWYB!z1{#N zLg9!GZhuP%oSaUY$W&iyi*fBucatO5JhnN-6+!r`#$J{5hFf@Matlv*W@-zRDHgO{ zHTsi1<+5!{qh1b(-(|5+u?B0ZySvR&tC})o{*$lGo#B>H0yF^=vjkSJW@$#-V-j zbFUmL=xknp^YZ83I!@5pvPaHV}67Ws+Qb=pk zCS2%04cD&U{6epF-F}3A_X>VRIs14JyJJFpKb}M+exRvYxgXGUooTy((dWfdT%~y63rbX{aNgIJ)+K3gkNRASE>dJ?j zwYAr-#wFqh!Q78oL56p~ZCg$PE#eB4gV(KV&+W&@ob3zQProB=FpGT>TKgzND0ekd zVCH~hJ+3|6{u1mlO6YAoEanDwucVU?)>Th7+D1tG;FbWby96^)dtVDzRBU+VYhTOv ziFS2<)S)2S2Qg*@zJVJhT%W-=$1fzqTDZBe`|-@gSmlcF@~>+A*u8oeO1Gu3N8!)6 zV{|cuJY?AWA}1fPIX#I+{FFzKw0FjWxWaVE;k#BW{N!Rp8n>sgQ@xC&u_uBUy}Gv* z++GTU7UbODZT%UerV+ruqrOgu-ijM7BN*Qn{Coy6cUA0BLRmkysb{|OYS4taqnwg^ zXM!x|>^gHy%;zF8)tH*us(x8?M7q&gIA%9GTd~z^OrKcwD>FB*yU*EqYbYY)+exoW zuVU7A-6My{kvK2oSB)=*@Q6xTF%B;l`W%JLT2$var(ZMw1t2tVUF4rpjaN&zSEYLjVi?}hS9QF%}>6FhqLb5ZA zP*h)bl$fBv6Y-v7yNn8iwQGdFKUk_t3Z&hXJ_bfdNvf9n2wYVy*3UuGV{cs&%HwPI z4*!0NTetB{M1Gk3PM3{udvb;@h#d1|rOtO?&m6Xf%MuZv7uE)>`ltg=uI#P!pR;0% z&hvql*r1riRi&ocgE2fNcAFQP}Eq0!JNAzk_+_@(F8n26Luy>Vxa$b2 zD}=5b-e#fW`3F=qWE*YLVWHtshkK7OJkgu-0T2@H2_8%)S3pq=-cxt4i0kDM)iqFc z^R*6j<;p76*)9n~GO8&%NeMb%9jPsS`~Ott!=wQ1D;6EW+t@3H@C#VAl8~bDP`v(o@3eYH*)EP}G*KR1c5O(-mrLm|Ryk85lYs^odotM`xbY=b z1We2_iu~~knUfp~=247wIS1z2$=cCtD$&0BX8iONu_bqXm!7q&NWvusHX1X)X)aVa zRx#aJyqNIwVGV^FrWv@^Qi3 zrTR;J|Dfgckl~aN;P##eS*L&XE=u5Ytg#o`itgDM4mn#i8P_Yc9dU6h<|oygc0bsY zSeAPrzKPfupQWY>ca3*#{ExtHYvvk|BN?%j%o~BhvLQL0@uvqA5{4uzOjOdf`vc%8 z+|wGvKctCmj3W_t2?_C*G^g&63fqmPdHI}2^M3rBXt!lChiXLcjF*ahC|^Z!xSO4* z$>VJE3da$N&@vZp)deJxwyLn_NOl}11Jy6R$%@<;a17=H*^VRmhb`94v=kd{zV&!% zH}izL>p}dO-w|fgo_BbcF0Qv{8uO8$YtuYo!9=zRk>->8NEQC+)rxr1Ssm!7+A;VL z#q9sX**o@E-fhjoLB~nQR>!t&+qP}1ldRabZKvaoopfy5HlJJ@_wVfM#eL3xUaT+h zUp42bIYw0tgFo4j%gTr73iGviIIGf4``ojZr_CNpdHGBmu_1d}sSKi>wAbV?Pdii- zjEoj`u{@bI<-4ueGIgOzLK}396l_~)KL*KjaR%!ZF5k=-o{1gTFw1BSGq>IO><=1*vE$ z=g0kgx)D#0fj>0a;n<<}g}&3r9lF&%BH&MC;{+6!!{YQ(Qquy}c zcY$a#`7v+hJbyk-ECytmrS5gWpBUXc;CLiYR0*gF)WYQ)cBLFgU=o#U>RA-H30_DS z^ng)!?k7UQ=_~hHB}nj_Qcl2dLh7JOZV?M!D8%hl;zKNZ)p$W04+?x!MUaY$HZD50 z$9U+1^g0|m`u1UH2cA@zXnV zcB3M8u3bV!@$D zYVela-<}<%er+Aj1ow8iIzA+AMk4EV`4<>fSebKGNk`QPdP-pHH7L$zL0#OIZU!Pg z1EB0Qnr;{kthoIn6CV8qCHBKc4+L{|IDMHr8h6SUV=#7U9rCR)`IMIfjh+mbgO%nw zca1{g*4Cp&lLq4?yT^aP9#AJN^9A%ji($kelbJ-5 znH)utC!W`H{uQo&TQ+)^Mq(=Doq%Hbq^)5z4zBS#K?OTbqbX_GNWvuDuOe5vhu+`` zDH)wu8eLWOEEo$zDA#eOGM2kZs!*Cv9PuikbSn7;y&lZJ(->vc40n+G#oX6T$>}bV z8%x+PFWg5Y(ihLYG8M{ftlYakQ|v>d0%2R377_5~z!fjeE$i(wASgtqYv;EPd}p*hcuh9j)y^#e~| zjKj%*9#6l3Ga`!&0i^*89?*|t8xFRc*MbHAYtO;eOQqvP1W>?Y1UXnSxEh$Bl*JVs zD%VM)$t0U}*d&TBsbW*b!ZPOsX{U!_9uB4{zUQ!kVHvc-y#iKH2pt)rRS-eE%TdLm zLJ~PWp!^Zdoeaq$^4@bzp$VZ`aG5xsA)HfGCFQnrrpR$;71@@5XFb%rB^-yK&n-$Z zrv76$p{b!mo~zy(3A;=X(@eKN^(A9Duiu){s-{1yB_vCE+^fYGkFLS|5Ut)CUJq>x zdZP=vWY-ey56fO>vd$x?>Ct`U4qT!uQH4Il*ddx^N7%9tQ^JL+>7Y%bCzsnr?pfBH zBbn(4=tVmMA=3k1-!QU2A=%a>+z^DRNi06Fj)By}E zx=R3Y^Eq`vX=&!!V|DOTTioWFfzUl0luMe=;(-f}1_Qg+hH4Et3;eGnXs8?`l~x@OnuC{Yf9)~>CRSNU;A zN)+3uTe%I1&Tq=5&&rxIdg4newP$z?RY$Y2+gI4I^2J2h<8;UU-HX-WIj@fC;<&VQ zGIy_>FXc&(elMTA7;FWL+%KGs?Hzv3-dUN;RId3CzrE^jZb8;e{Z6Jb6(sLs*&MUh zw0c~7#!lRmZuR%L% zmR(`iA@|FLm38X?f)x21UfY19(q6t}?DJuU#R!QqVr+)qDOu&e8yWbK%*g3PJ&^GM z-sZ*mbVAL4qw4yx&E#OJ^j+J-ohtWrii7J602he9M?iFvh}Jm=gwgMl+~2G4kK85w zzIRFEoDBGdx<<^>SJj>M3ihARz11gDSG+IS4t!~Z>Hb&P3R@Uh+nG6un^@bMIR0BE zoTa>KJIjy2lTpYj3kwAXO_S0bt4L_-8_AX{(1?}C!clI zQYOq9&4g?NzAHn^v=m5;SdM?oj7lN&C&6;>2KgeS_r3^v577Q@=!bZ%9zCN*$ctF6 zfpCVTf+lLwFf^5pULhb?Ks=hw(BXC9l}fGAW%2ihb5m@j-5!v`1SITpg8fyQ%u z`xIIseyU_7lF~bs_F71$98Qtoi}Q?+$%+$0<{z)XUrLNDae%fBsyGL65wY$sI|}JY z)%P;)9vn1FeW26QwYvWjYX9;KWhv{}&C;Xr*h<#B z`X>Vi0UKd|OKvVG3*G_)0NMyh!AKbzA^IaSQdyO1$;fDa!-PTgfb#vs4{DKx5yDdB zGTdM3>Nop|uw8~oLU z!PMTZ2&FCMh8h`Dh)vlO;fe?kP6UAhw}JuQGr^Z@y9~>iPS}&Uk&VDzTKSoNq=Qz- zNw*T1N5VLs&&2)kPZVc`)dXm;qufA19vZ1)2bRwf%zN;o(hPMF<<2qiVpy77k_j@j zkk>_4GkGEyiI=u0p~=--?3j85F=^^}(0E|jJFU!}7hYH|1s821>?zYknd7TvA<;EA z!*|-xv4}|me5Y^+G10P7Bo23qo4jybW}U_8h_7l}#Rzil;D@azWcj5<;Nd-6Zi*6iFC+)6J8iq?IY-aREhlg16|(i5lfmA*uGRt_4{uD zesZrC&lX?k691~d|IJ1AFAvezMfO#FF+Pe*icIR7&=7=yt7brJQMpM(kQC`z(Iooq z1v=7fhg=QTdzNjW>~=xzjR+Y$w?Uue2mP8u!wku7>pu++KD$2Y6P`bIPuYN^+%tti z+?rZa0{l5ZgA5AgndKSfS!=svPaN240GlqLplCunD&|b7E`N~A4;(kqd4-AyR91H& z)-E8&lFLcF*2?ei+xm2tA97$G`AfZXawU}ohOTc>gLiV(;WQn%$<$5Ul`t?|mS@7b zVC&MYp@N+Kc6DJZ6iMtc6zA*0)EeKaLHhfAz}avClF#A*F1kHHok7PDRh!5^E#a?1rr%38OsS!roa@EFYc`1IG>_ekGpy&zyk%Vh{E z^!YtSq_lIvI)Q><#QTcjRksQvS{6(_>3q26n%jQ5*c5=#B-miSm77)8zOpraPw&!a zOwDua0qR2_OpD}Y_{ofm--(O(!qg(!u2FBfCnixMwU1mo^9Ds&^e5C87PKZ#TK>n? zH;#BC0`@3{dIZh%cv|8?hxf!Qp6LPc!{SKz;Y3~nBqKe97(!1RuHt+1;dD5o^3Yuh z)CS29&D6ZPp=^_31CRs*FpjlumhHh>2;X*}QG91;x`i6(?!s2%z*@5F!EB(jvpzRK^HkFtb9mzZ9n5)KG4hqPhf&>)4Gzfk6EV*c)Xh8u=(+T%v9-?UmE)BFpRipB9~< zD#C+W%j6*vb$3NkL>6o-*6fv1rbJQha*H_Ff;rKI9?z5!SXs8{pbKGc3E|$_V+tPo zXNpIm?H5T1%l`FAcRw1BLhunS#4KnXY-DR>6|B+1=8>sXR4aZu6Y5ztSo~9_g6ee5 z-PpV-1%LfgcSba?zJ#u+OAkK6v5pdNJX}YbsILKrGzDx`nw+OV(Gul_@XTj_t?HvY zjyVaa;6PcZk{iwji3q-fp0%5dqH3%LrfSI`(|A_U3_PZKN}GFb@Cv$Jp@i$T9%fU_ zbEr}$R~>$t@L-@$Trg$rv}3Km+4t(*;6N*T9OWt3tzKr^14qpA10c4Y>+bXWm>{{` zyUd;}MX@TjE+RS7J+ySj4r2?ws?M*g7X)KeqI8mzk~jVZU{G?QgW?ct*;e$KUgf=B zIp8n(Y1}CPX`i<8jYh5&zj7+Y%0C#Y)pGt0A~!2tM9(dH1G;>#Q$jK1uA`1w>rj6p z%4siMFYYrFY;xAp{HM-ZzKa1!R}>dNDW)VA>CIXe!UbX$fpfZEELE)?`JO|M>L`XM zxe=d{Hs;WWiL*U?#B$j8WP3iT3xQzYP_ahzTIp0q38_7bc-8uGJIl8vb+JCm5Agpi z!D}tTfd4;mWBFH?|9{}d@Skw2qclVg4@J=o<3|gf=+7oqT1&G$E8Gkc4$|-Wi|ui_ z=0^O*_RKC$Gh5v*n*2UqK0v#_yF#mXx9Q-a#SIl8L6>qa*8_b8A;|zYs zf_?rKHooPWh*XSwLym;l=c<;GHze1>hm>6-lS{T{Rq`q|BE%D^8*wF^YAIPOrF<=`-yPb&D)lGkb9WN@Hvk0DOB}k_W%w<^VA^5=N_P&n9u98_*R4(Rf%ZnTjMqwMP-FI=;H8 z{KCE@%%k`8H^#?sM8=K$b-OkEm$w`1zv1>jjIa4$j1OfYW?Gs13S@@_+fY$|CYTi1 z%K^D&B5^q(A$c>XAF$<*-yI{UT@pk9SB6{XXrs63R3^5I!lLFYtcadSKps}V zVh1MfW03FIE0hHqDC&)I&gs&4$!I=QP#)8xtQ^G`b^ zV5_){gYlWNULny!Y{-6!1DpZee=$D0GwEBTeu^p>8R0{f^$64?10Pu+ zArjp3n6CJcI$qNyOK>xTGn4e2J3X>dODqkn(z9P;_Xn@HbA#q4qQSM2kMrPxfr3@0 zl;7m#_Vc-Pa({cR2}#5AYDcoi#yK`yO@04r zxO5XHGm7tak;2#0GZ^J_hf-6LmXlhN9$?h#T%;sI!oLjzCSrY&$6!^7AOYpC+^{0U zwNr`ZCb!?+R(f3v9ZgbJ@A3RD9Q2xdQ+h8URZf7Zk(K8jdS^g{iuCl(8+X8T?;^K# zTJ37aidC15#TSaGFdSv*5NhBbetkV*fBA4yFc5q!SET#h(&_DJo z)G#jO!U9AMFy7(0`=&(uvpQKeIB1yL3E&fnblo*ExoR4pbvE|rTIRd2O^(2-SP+|v ztPFd4g{U=Kf-{3)gQ@qfLk*tRrqJ+qp=?Aq-;IY)yPN+6CUMWi@cOF~;Dw@SAdIdT&v z+OP7+C`4geAoQj~za|9|ziD=J(`5x;u2pvV|d@mtYG$EN?=tJvoCynx~`Z z9SCL%EgnH|k0G3nTjB^Yh)0mZidRJ{Xz_r4^52T@k3c>U+pEZlqhC@hgvA&dG2&!1 zoD;O}iwh7MX({}*13904sR1Ayq{lOp@28ROzm8~$;sP*X7Sw^nm9ei|tdV5*^CarW zG0U=P%z)3n6rK5irVe;>-opH?2q!;h7JQ+0=f6ZP``=JY)81Gqk61PUlP}V|U+*p^ z(4h<~Ly19<`qX?DeZEycduH1sR`5Z9+;j9-cE(@6>?hCHBDZtGb1|w1E$t&6tttm$$hm%Lc{Jj3WdLEaaXk(K=a-@^+oT8={K$=nC1#--^)w=7=-@uWt_?-{`(`ptf%bJ{X0p)#gy6)(N*&1b z7fWTk!jKaO#f1+g@Z)#(@CoE994~=gfXYfqPAFRt5zq19&x98#mL-D>uKSK`9&eyz z`x|=CG-75WH6+AGc#m%{jdfm=UG%z;#u2%~Jo#||Nr4!gVt%H{O^k87o1VXx2oPs8 ze6)!GKJhDrAbju&N-dz`PSHf5Pk=K=jS$$JEUTZ3A|$&Ru-zXY*D8URY;;1 zf40B}W67*SyYAu_OUj10p7)PbeixX0{>}cmSk2*1{)P9Y|B?l8{2TB8ZZZCgbpE5o zNa1jd4ZTD1Gt_t`JfD!@A1%g~4fFHDoS$2Ev84#ye?4;y7rx)+CB++#G&pgYnYk`} z+`kUV0ckB!8ho$NT%#!n^+HXQXR9^c>H?0)<32FZ33Epw1y6?^P%E3%f5;avwH@A7 z?}yEZRtC+0Z#{)sO&U!wvUO{?x9Aq)2-ORV4a9>`h~+kL zH=Bs$w6lov2^LiI49GkA7Po|l`w-+g@k-!vfO~vnpHsoVifktEt9L5hqeN^joS?uK zqXi#hfjUGiJKkTclpImP(CnCpan9=^TviTU{-Uoc4fZ}2#&T-(D zAHCgORpcC$_h9a_VHnN?M>sHr@Vdw>*TfJMUiwRbg^aGBUYc*y8;rL$e$F^|2ktst z;NLmRhd`@S5(4{>$a})IjL9J&ZID;mtCaolJUCX%OZ0P+=3#%jIzB`wptCMB0q+4x zBxH`G?-oCW#?C?mYk1Et3}#_Cd#5NK}4` z#A$riVz%iiMrEr*r1mZLjowVZM|?W?Qz#WNI_XwL3wU9Aap9^++$nOeP5vyv^p?ue z;{i8_TXt!bqK{1Zio-;E#PO3My~TgPSqxdKB@NAuN@Q~oR})5^R63}UBs_7L68+wf z$_uu#K!N)GZx8G66@!eHuYNY_S9BHgf6>=gG;wmV{?|k%D!LQ8mmdLO_AVizFQXlbF%KTZfCrix1a3 zrB1RZF$jTnoq_TjXI-x15iv?6y*|tQ7>7&n^mWwIZI7MI)6dlFn;_JHe2}~-i5iKr z-l|aQCIZ+l(NzH1f0moFpVH=yU!`X5I}i}f|NEEt=i#eTd;Lp|`H{?>Obr9cYwn$x zuORe8^qR(!N&yCI3IyqTo_3i)Lp{D_`DcvgYa^Xa)5EpfT_)Bf1<(65{)^HlftRP5 zD-`00#STSggWJVf7T2cRVMf-7-sjr~*-zfL{9Fih(9kU&Oe1J+jKdhIsMIai5&RSr z?Q3yea>i;3^In$?523+VXic0$P|WlI)}geW7!Mn+h$ zRePPm$N*VeGgRm6=XU*@P!3EDFs`_SIJMdgc$_ z4^anRW3V;)cqt65S}YeXprAI~WzCQ@kwufEP!5YzS*m5y=4P{piG(;H} zH7qK_6gfaNf9eDUq+k+jh>0(fwT?UQNmI6_Wy&kL<(Z|kG?3cL=h^pyr&38}6 zUDd}T<_mF!2}wg%};c!L;|sWd5E7q+DEwPB|4WJLyiVJkunY9jLi zlb_@m@O-(3crXCX4mAfD7)smS=*V`Y1sXC8I8=ueUZi%+5hymxWVqk^RzBmSI*@a0dxSx-2FtTo7=CP zH@MpoS1r-NVk+D{wSaY&??37)t&3rln5adx^yPfo%K~mG2W~pY&$jpNWc>DZqs^GD zBG;+wt;6r#7O&#W3zc_+Cw?h1vFu{OF=y3Sl6w~=!}{NJ#oE(o-;zDK@Y31-{x-b1lc0f>_}-Nj$B~$8VF4rXzh%(CAhg%x$e(d^-q!)4geLLM~4MXGcq?Tlu9r>IM0^i4*n zQ1WsnDOICH%6F-<8vs@($+nF|Y#RcBGe0aTHlJP=Sbzx2iN50&-_SU*`%xi`Mj+yu zowu!q=oOkxVfDY5K>-IQD#?Pb$zMQ7l{h(u%1$7HQ7 z@GFAepSFjxx4#ZsU}rTwM*K%r2sj}W~DJgq^))vv_bB&TK44mKUrtX?lG8&kw`O30XS0z=p6 z)GRVnC_`3BbvmQ3#BWq4af9Z7EM3!*l;vX+*Oaj{StS`9SGuFakR0pcfOQ7DDXJ%$ zys`6D-|@v)9RJ*!UjSSIyD2q6a?CqV_UqgfrcDk^sF(bRrGZu@^teqP%)DrNGJGgc zH4M*heLQysQ0n|l>!YkwMU^maM`jZ`nmt~H6EWgak74_uJI@Ff+(^`Noa$rLOeV>g ziq}wiW06~@c^ztCdUPhfDIX9L_d<7FP%|)h!|Y^A5+szzwOZj$g1!7y3L8(EuApg1 zZE6TyUfT>RXHZQ!(8A?R{UXf7hDB%~jD*QIAk*Ivtw60CTL0ZPQ5K%`;jvCt2o7fK&;Bfg>!z{_;+{(gTegj&*C^;KU*kmXB< z|G&>g#GRe(|JpDlZeVL{{XYTSiZXJm{0Ke?g%0!w1r`*WvEBZ$%1v8SFsMj^fAXro#0C&bnJ`TO z2aqq*pHEaZ_=qRo6r)=*yCs$#H$fDR7lxSyL-WAU9YDXH(dVpn3a&ybKuFnT8PU{5 zpjb>7TEV;a%)k7BwP^|@x*ecG6PL~4loM1aw({P}&NNrj|eEswHUq6cfweU-P zZMShWH8A>@m^&(VLK2h#CFoDpdtDWuOWu(t;CK*Nt@r1T0l_>&hkl>*u-UoTMCszA ziq=vd!)5*%89-v^1eyZ z+nnRZ)(}8~Y=lApxzM~Op;EZl+9WbnLDu7BW=(yj=(wHZYM7u!8?5+@`mm@F{#gqj z88I6m$o|3QVnTA~Yr8;SL; zq7LZLAL!SYyI5Ec-KflqyXP zHi9R+q)py}7#c<-%;mAnRBOL{#X$X>c*Mda!wXioiepi!)tj09MCv{AkxB5tD`;yO zZ*g>wELRP;G~U2KP1&-vd{OR99X^6ODV;$4M*GBea7CBZhVYSf8S$Dus<#OPYSc}wy*CJwev(HZx zwlNkyv2~!xA>IxCITqrI0b3t@7C3$In>m|9f`M0j4~C{F_o#apKF-g;^ zZvpLsxfFI|8!ZkKrbsmAtY>;!2gC|cCXrWmeWZQNo8S|iZVPt+c6H8w z%tR4vLvf!=(MxU|z9lrq91&~5TRRt?mC+|HO4@8lwD{L*`XI?nIhWX;%)Igw>O~1( z6&9MeQBhzUkXj^j9QsgvRzqBhy$fub&j(-H2c1^CUZ zCGu@tQnR|Z7y}y`_$@VUP72_g9*UYC-X(2jSuITRisyMJCH@?5&MCdNGWFGV2W0NT zuX#OgyuN$?-u(0E5c2tU+4%^J)AM`BJ~pNR&KAc4rMxvgr7vJjE3yDQ1=U;Nf}1LY z3c3qpDCJ5U_Rr9@iFOiO7onVPY+r;!;}!`=2X#n|WNghyU=7t%@R|onwAyugfZgDg zC+ueU?&?!?z~x{adJskz*&&;uJ5%uG*uK`y8-(KKD#IInH2(IG<5O5b4&_rC|7`3< z`fah-b7dUe-df1H_JaMlxkwYtNqgC`!>A7ay|pO{|Nh}f)|&f$W~*|$H5X|sOa5Hf zrRJMz(^h27YJJH5Mj-iI58;OTXdBbl#@5y@6_LcS_Sxt>lOby^vZ><&G;OBElGS8g zdz?PUS6ON-&z`0%hrTp67a_~^G1OvdE9Hhp3X9z=qGl!$bD11g@?&G0-pHhlJb4-2 z47U0%Cy>B>;ox@;qt;+2iP@;}Gi_Tx4o%3#%BofT1;T=#~~!t?@`QMQv`{h0Um>vB$O|gD;dx#&fF+p1fcWg^X!cf^+Ze z?V-EKmjmR*5N}jZ99{(hdgMdgB^@&z_g4NArxy2aR$En|HLO@+U1 zeTHCESq~2#Wi}q48d<55R>9a}&8dmHX{D4TW<{R>i>PYPb}H;457%5EyX*wI11MiI4TUmOq8-aY#=sTDM8_{(=|I7c)3CQiqYETPuv>> zQiJ)&@d~KF2QHPhQ&xC`yp-1>UX|bQ{N%62zGMJ06xW5}z;{qMuk7clocGZId}U8e z8>mMs1ZX}KzdP;LYU`;J_AGzPyg(&7pBL(dLnkYv)KO2>*EL6@OMjYh`;NLMq&FcJ zvTg14$Yg3vQ2DKaCB4w3iyttE=3x zYZ+jzuJI#A>8RNOebX7>yOKj28%#%Sv4S{*B<3q;7(uVL9;i|}Q6j8$TP^N}D4u3S z3odH5w%`gYG=_31Y(76;RsDUIO>IachU->1+Q`!!QZD7qdOJ%^F0;7I@`%stt*&q0 ze$Wvp_w!;LYik|J{(cDYdAD~+Wb;LW61}bN9$$FgdbPr!qh$QHcHIfzw_vVDb1TTD z-!v60C!+d1Cqo79#wiH5KNkMHr=HYWL46L#>3qK5Qqrbt7~4=lA3Y0)&ZY}41B*5- zH34pUXeDnSnb)sEF^h}Q7wGlLBs-WN-cTD?5Pvb`*-rp$1u+RO?X>i4WMe$}c;YO5 zWBlWE!a8|lTyRr_O0^$i*0jk8b|LkiifiaQ3z+)`YE5u8_$moRqs$LTmJ)7LfYF|`~F0tvp;Ys@kH#+?) ziAG`v>)K#;W2Rc{Rf(vdCFM@^Ew+Vke6Ad#t`J#Zqo|YGk#LHd9Kl4E_RVbHA}wBC z5+iWU=+6f+t%6Tcx|E4u4nKTgXwX-=zS9~#B4M>?Tn_1cu%J(4nI74A6HaFzsrO{x zI+kdBhpSQuXJpG?L_Ysj`?$kMM-s7g$b})b<^h)!*50Df|AC6bj^B#Mx$tKRh?FKH zFQFkaT!hTJxUmo5mbL|EI?vsp?|-dD+?RqGX?D$B4Jea~5d^9B9HHr$SJGB-r%HQ4 zJZTX;d66h8JjBTV98dsDfZ#P=P^Fv-l8@a7r$o7W-I)og$B=p?`rsAImNwuFJ^9fj z&ZBbtK+@0lkdJP$Ek)8(4sBBfZH;>8N7|j9m&Hh@^|q2Ap`astXfBsu@hfz0Fw#9J z=#jF0!s?qJkMt?$1@DA((ut;^3(auc7Cl>fYolOipMX@Agpv~CI_$Zq*v8hIX&4a; zfg>C!X&hDRmf`^>t3Jg*j3}Bf-Ok^w)<;+{-lLFTIlmbHH`}JXwTqd>zxKv{wfFo` z)KEVsO%o(o`-rf0324@5fDDk;HSXWKK+N+F7qe=5H(9Wv$oZ*N-+iuk%R9G|QfaZ!2Ad_d0QnF-H#BRuV!u6};h6Bs<( z^Q{P;Z`qC-R0kkMr6Zp|3vKrhj-hJH-(Ypb>@FZX3ni`ceDAD28}sg9h&%sX_%erl zsUG${b|2bI@DFs`w61+Wz#foP7kh~sq{LcpD4c@?9p9JYoX_k+m4oSo z+c%0VVHTrHOu1NFwWCl_8k0d-!rxk&yZ_Sw^FjbjrgQZVRVe%lhhe?tQfM89W1`%JDBP|5*=9=W2m>X*gyaO)FlZ zW&?|<_&W2D#G*jP&p$1%zns1uX+*;yZ5_>m%4XxVQF@VO1!Rl1DDWTMd|*lVl$mR# zB^VVDfkqeT70ve7rB#v-|4{zQ$5oPQ{e5Cukly$jl8sbmqTP$~?WlKsAg5!V9Amy& z_Oyu5OyW}HD^gK~QKxS{B1IxHKy{UqD4fKVJx=i(r||)r?lPF-K(lB+b4ZHF>Uw8i zTauGCkr?5=?jTn@!@S{>F?Mpk;*_bDn8>utS%ssIBua#5w(zA6Z=&cBT^O}Q*}5VE zQz@X|sjXsD!x<#ti)`@csj#k9RF+9VUY_G(Y04(KifL0I%GN+r2%#`VcbwP|M2X|K@G<>t}HEV2CY(R)DpQ zL<6{32P19FOgN2OMA<|o2MIL>bcNXPknyy$LL-O>R}dB7^>Pg5I%_(YlB~g=BkrBx zLZyas5z2CsTKqwQJ#IPAMD&y$pjr8DL%pPpT~ECYoBjq8%h;!opAzk{W0;azi9wFR z!!rI@kxEk1+N`!;WLbWW;nAweu)U;|m(VPj8eX7>&_Szf5~P6Eid?OQLEf6+Z#6bH zzp)Sf9xK<-eGO<#Mphvq(m|ygOVPcrJR?8)jZNX~H)HxX5j{0QF}f*&3n3F2;1j#C z!#~#WS&_`b-3hWs4Y}mumV#Q@KtpMQEZVg|ODlD-jo>zIZd7c+hwlm(6(BL5!#_VZCS@cd2SyfV(gc{$2SAEsMQ&>JY~XXLUNZ zhZb%%ZlM;Gi=_hwf(577c1P=ViheUZmxtw`8!x}t5CxAc%jmT@Eg0lQE+m79le z-gEj*MS0GoWF}4~bYv`VXm;i;6MdIgUT}Wh_$+Twc9!lie#O5UbpuOw=&(M*f0do6 z{r-j{YoHVoc{A*%;Z~ZbL;pBs9;#=&Uu3Smi9N46{7Z=r!72O<*F`suE3^4`IPXqc zWwD)$ja@`r1tmICIHAT*E`M_rsg}$fm#oq6sM;yn_bl0zG06a@`^F1-s$)lb9LrJ- zZCUYKcDj*+P6azlEd5% z>Jj|nIuTpj0U~BgJm80&EM_--{D;>RyZo>Rf1a8juDBz2G|Zhr4<7w=<9W}nZFXoh z#~&KZMQ-DQGHwHA)9DwR3IbYf0pDP(;(J*Ok_I8_lCNxttsfEF@Q`AQXLY_Au!Wia zXy-BDMbND?4cD%lWN0;{Vje*~#UBEu5YvzXC}aEVh3t`9s_;^i6m|6R$D1jMRHyny zKH))IFOfYGrQ*Ub+xe#n5`tSs`oYl9sp#NE({~BpyT_J3)eB%O;bq;L|DNK5u+igQ zUqmIlt!}}rl@u@Fmc4}#B0YmeIqg^21Z1&`R-|g<4z-T}K{alF3l<-jz?8kyA_azB z1W_LWQUwE2RRe7iY*0c6f~f$vhbCeH67>NhJEoe9Pe zLOmk=4ov8{TGHL&mnp}_aIh5xDF1H2p9h0XF2?!ysMe`Mi|3RFJOl^pz_+$J&w@7Ov+TJ16AI$= zK9+dc62fjb8_=u{1T|Y-#^J{6dOZiwc-f!`(i7-(Q-6Z3qQ zF6|ECxl65U!l`Lc8+Fr2KEL<<|cGT|J-;$_pjg? zc}Ejd6GszUBa?sU&!}1{A**5dCR;BdsP*9%)QKa)0!M0Ap~pIgL1X!|hJu}%NF>*` zT@+_Tt$10jrn$Zdy$oPllz^8^I=_s-zsqFFZaTTH_fG^!2RF1I`uw@&zO+g4`*^*j z10uT?LV;i)+m=L;X;}#X9j@QkggK}~5P?8T+ZKYt7nu%dg>*b?>rXzl)`*UOgmZml z&{9o(EC*yLcn4^WyK;qdwTz*WgtP1|E5_zZs-q*&YMgj#@QXcU-^fd-Smy)Hz3fHMq20p~%8O);5VF*9Yw6PF%sB|z3u=m7>uq+eRrIAyM45-%iw$_3^ zREZ2Qu?%X|kmVx1vBO)0oybN&ko-;qgJ3oeLJ?}hB9v9bt*%r>Vj@$L^-!6nc4sm$ zv-Gu_X9XLJ0DmG~m7yvz@hv!gGDEe8*nnx$rH(XYiF2&H^9Y?hmkTpDYQ#cS=bC_1 zTzF)?(0|B)9KPiQoC@46pT!+O{xT(BiJBU06 zWI;NUbyKP4DoH^6l%OtVLw&Jb!sxjCpo3#JSmwIUeSjp|L>ekpjqVJFhMbWVu92B> zM})7WSKk%Akb)>kh%t_64gd}l>tdt@US|+gUeN2Ua28dDuJ(zbPdJPwXS7y6nIS;o z!Mve}aF+lN%KSbj(n}rfYfHIg8$wg)lC)NRjCD_lGvDeMzV0pta;Oj*M z9ETA&bLrB8v}2Rn+)0|=o*3>U=$Uuia4=MH0P1n~4nZIUJ?g^uMRV=BAjLR_xycbrBqCAG~;3;H= z%C-q#b|#gwq#m&&W-WnDQ=}XEe zN!j&r5ViTq?pMB+#^Ul094mfLEcv}SyD3GcF2Y$C!X^+Z8%PiEa}Xy)@s}snk+?NB z@dzsl4x((+6+rR}!YG%pC+tvO>}QB!JW$l#a$q~pGUiC{ZH#ztz_$Hl-5y1;bwlOh zV+r;S+S4rpszS6f16 z(+jh?LB(6gS-v}N6;c01amJNc+Foc;B`eoEn{ahUEH0N$M!6$52Q2o-WTU0w6ZAht zCy76I>7Tx4Az@!rN1p%n0{)tM*ts|wnF!ch5X;${*oxXYDw-G=|DQUXtoVQEbca4m zblPk*`~!a8gOui;doCYEFkm4m3V~P<1Mm5?aan{|o3YJSg>ClH?Fbp|1mbt2U+N9H zo6_IN56W^ycUa-_-q=Joz|g>lYVu3phI)P{Zwv(UoUMpyakO@*ymvSK%wxe5LPkfF^Ojo4eHf1LsL_b=CA2?DsspS7&BgSe z5-bySe%lV`$N`HZNE>Ed6^-5;cn^gfXq|I5sRM*Oh@#7n_$6wvbD?tXu~MBGX+jk7 zLL68nU<6CEn(4BZiwB7%>*IGsaS`r6F#Cxyja(<0Q;dy}$Fj6-WLsrR6<_I7ljMwHu!AF!6i@qPh&Dy9~m*3MBYyW%=qxIaW)TvReYIel}2JbBxU- zWtu#XPSyjm8>o$fb{E$>uvfXU%(U9j8O_Rtg`%b^ zw9^?&sw%}O7|?LADzp?^*ZGx&>Sou?v&HZqo1YzzrtT7?!+&m^F4`}M zoVm|Th!l{n6!gz~}*`(=VskBq=N7cO|mqdP>%Hf1J>cJznKK)GXFwOzi zT&prBv&vP1Sqm#4f6SfOsSSXWd`2&NADe>p>i!ljGl`rGr%3hcNipj}aU{d1Gq|O^ zb4nb}yXd&}V`gOig_=Nril^`;cbp(0-ir0J_NGI5REMV0TO|EF=<-~Ygh2HLg23el zH(G#vCRW<1fHkgM5!D4{yYiN<{u3p?U0%wmVm#+g@sB{&tr=^#tZQc%(1o`e1c$U; zDy!RQ=nPbko0L;(?DdhC_q)eu;DegvjLK;jV1r@`!{?o>dwZngWdh(WdI-ttJ1ef; zsyNvozFz}lGZQub=IxAkor)%3`d&B;>Fo^4 zQU0DZtgrk+IKPs@PtwgAZ_U=9RV7v~kYWlDzHN=Kj15+%A{i=VZ>H7W)@z9x+iqp* zdJ)Z+zKZZB!;j2kgc^N>42Lo<%wcP7cYB%)ycXpRLy*I_?Q9IP zazEu&S5@Wdilte|*fw?-wRPpK;;Q#*+jchPRTUL9bqn#gWE`8)QUzrbRdw(BSZ-1gD#5xZKUnc^f)Sl$)kLqdnJ}R;A9^JWk-G6Dm0vN&Dy) zP;I{^SJBa6pREhiP08#p9nHr#Gc9f<21P)g&tea_>8fPeLXQk=iX~Wh8gXu=$%yb+ z5r@04g_T$(h?N&lGeKHKT-eoW5jSh5$l^3t`re?{sp(ht@L;=HCrh|42fg*jB`?95qTMzvu!9z7b&K^DDbuOCXw$A_@Vy8umFu`ha9 za%+jKfhG6En5D_TVMufLQrj_;S);ApLXjdi1UrAnWKbPLZfQLJGjZE~a;=InA?)#K zSol`Xh$blNfkHX_du=vr*V$c|(_~>GBL}_wJ!)Kk0EKa;LD-y=1r%gX+r+w63*iT%ZzuM_C4_X%(y^>Mx&=WiIy(13^ zVDDv&4j{s5*!Q=tQgWWJjIjN9?9Yz2}a8>8)KdtP;yf_}*T*jzMD|KNFIDP{=l0j(J zkP5g_6R5p-B##_5txA&CqZ;PB;bY?1f>qwS76Xm~k)aBVJ(=W!t_laW*(-YENg4x6 zmcqsvb~eC5=zz0-okE?^4#q2|)*~W2AWA;`4N)iervncRq!}1c&v#pDy;+Cyp@;nt?VA)#&5!7acq ztB2tYeQ{-bIU`K7;2t5Uy#o^X2S#$}3N@f@HIOdZuXJAeLAJGuPi`BD8rH_K19<`g$~x!ze8 zw2}Sn9cOrX`wmA2MO+Lr%TK%%bYlYNEal|g>l0~o1-cU5ZT3Yru(ng-Sm1`hVeQDi zo9tMK`z!pb@?QU2!Q)HyxaW4;93KmxtAWqNMGrm(1IxY$fB0q zHFXU|=OHpyikyep1+m4oc>x{SWa2W)pz4ROp+4vvkMJEh6j{PRB6=;b?Bi5akO&+a%zvSI{x($<*eV zxT|T5(0Zz)NQ{k9GV?hN;qPen4P)qlV7BsUhNQyf>;MAJuOuImB|UT7E=5VPXX9W+ zGV0{iCA$v`$&%y7g5}jRip3FWTeF(`Agd3$25Hq`NfzbIy6UEsCFkQ<A-nOBnI_23pp{vmgpI?5BZk>-fH83jRgKy;Nls@(DRPt%z}CHm(8O-Mn_EY{RYj0=Uw_ z?fW;co-4qo-rY(l$@OblbSU0sjiiJX`F9EO4K$G3dIv?6R6jAKnsoxWDVe6#@x7`~ zI1<+Xup`KG-sv2}5^xnsqLD1MN^HrVb5ZYi1_l%U;i}UIcouqNQeMbfvln8@7XzAg zFBGWh5f0g+D3GPY*hJ3NEQ^a!Rz(YnJRMTNQ6}(IduO40Axkt8erQ_UV|F(7pNLU! z8W(yYXQgON?6!(IS}cSa_9mW1iZZ#G^55QVWui$X+fWx3Nmm>EBz6`m_Y)pJT8ThL zfta!)9%%Q_{N)@xH8Gj##a;Yk(>b51Zb(8aJFN@MVS22Bx8`tB7}i)Q>2w06L2T=n z^$M!&vN6haF(Wgo?j-0>CK9^#ti2!2yYq+4mZM}M1L5nC@l2uLcxEx|Hg?C7e0A*N zC0W}Z?f)T$DrX(SFOl6>sZbX&hc?q8295uV4a#S&yP%b8Uk-Dwr6ai z{Gz$;C3_eg(=vX5%}T9yn386~Q=vJ&WY@KNGZV!u-$d=;5}~H_g!nHNVjmCUNQ6~o z3tv4&`CaJ3*Cbom%P8lQck9wj<4=ueYYHW)?n-SeV6;B!mu=hrhOGV9ANHSX7c=I6)kc^AQ-g>RU_ zC+;f|Ur15n3u!tWhoGU9T3n7Q4y`akWmfL3CB^2&Y{8VGfA%p*jU7S$p4r>T!5B8> zql*V=m$bCBXr#i8HrtNGGf2uXg_KP3cDP!xJ7*!Dt2P%ob7w@I0&$k~p!_P^zhoso zdi1rxzlKsB{fNx8$q!D78*}5QO#$uocFzTl-^P$#v=Jnp&tW&mj?T{rH>Z^?lm}D| zK2W`|Ap4|`pRhPZ(X}}UJt*e;=L#P>!Ti>U`R*?l<3owO&$-h8t@b3iBGk~&h5LW7+mU&=Wd3! z&@j^b^`>jJ#kK;vQj^BZVcY&DXlG}49aOd~2u z4d7bYm991i|7TYiHP5Ov(v^E*QFuFdpg8mV)MMUEuU8w%LfoQLis4mi<(P(c@aFrX z)P{pv$CIiMfs0LqPLa+C43&htB6nL9j5(h>YCP|I6i4FX;FQr%XHhC^6X*pwdPnz+ zXzP(1SEN=uT_@;8(C-o6ZsO2~uW zvW^&g;Ct;BP0FbKIn=_lyOT(`cmO$7_DB54@`YpUDmCNn7mqa`(CMaXECAJXdRAqw zFP%_N*C{*K|7RpQ&C_h>4hm~D(zcLuF-sM+oNu5hrOG+I6G5?3p4t&al@>yG&a}!A zRxNjjg>%(1{yqL4@P!_N@)iibE%5tBg7Q7_pGY7YBhN1zmRYi}x` zA{2iB451{5L^XuQ#*e#}9S=w#p+;5=`0Yr{4`5?gqeYNcqS7`&GrEs3Uu!8}Gr3T= zH8HO~FyWcgVDU2HBK4Gthcl#=_*069^s2Rap}}Yi9+4^pjq(l43KcSWHeHL0gvy;gHDGjfqUf}PwF7*o%5%tA+RBPyVW)-}LnQ;Z#SpgnlGd6Vs@~$-j z3SqO3BUW_;Rv{0W2_%GdqSB(qmm5xy*C~jNOqfb-Sld+4kR_n7B~WkJUU^s`0OZXI z1ndetYHNfZYqBa-_|gvRGt~!dM7Yq0KEYC09PC9NgtrFh5L;)^wtQT_LBZWMIOYmwF6`Uqs$zXTZ@ANE}Rv*66+X9sY zIez|U7eIO&nUD2aZZ08bERDti$3SeA)#da~sqXFsba-)4MiIF$rqwR7B_=SP_7V)H zp`?K~x>Ka;M^y7toyf=1PM;gruJ2P=mRM3_ddgYa zAT#=_Iv>1-vF8<`p@L3qORDM_({{V#C(JFEU&Y24Q%|`zRZUdCt?Q0SG;h~}P|&v5 zO)l?Q4}sXK`33PRp5}%=Rk7N^oYc(Br}(wJN@XkpN;8Xu3e{xgt<5If(`e=qhJbFN)7sggNR``KS2X@pkJXVNUqz z3n4X1KzT#5_v;>*-%io+#cS@}UujYS+Pndu6DAMvIbtL3)EEx_BloP?gY$FKJA^rX zPR}y@p=OR@G;L`W&&W}FBb^yHkFxG*kX&nE9d2lXDodX60nu!y7QG2lI4pW% zxLQ{FeVXP~?pebtG+Ti!Ux}Zh^z`{!D0Vu$;pKGIy-rj|n_~F+G03=B$o91v9AucUxIOipIW zJLD*j8n?`GoP8BLG0Mu8{!&4ZyE|1#%FcFA0RNf+_;sOf;R{K} z*#5Q1&A9V^ArjM%@HY4qZJ9#@2YL<#I))+`cPuvhFs-;S5raPb?om_^Bvi&!IinYW z6`fi?CYqDB_#qFO93&#wBh-2pE6ugB>P!=igqC+qS*6wJudU+1eaLubWUvRN7P80@B{fMODy+JSN^RSJhU1KMyk zsq?V#%5fYDaN_3pZU7JKUZnhmL7Y?MEfFg&u~a7p7bk)uPDyQtQJZ7m_7sl!$IfWm zBbrmSE%>kvv8Q}Lfmi)QyyE7!+%Bx#Gf?Mtq!pp1x%*s@@*PF;*2w|404%uR0S$aO z!dqf|QxHqrfe2gZ8%)6}NW{hgFbs#5P{$>&ABgV^^PBj44*rG{o6YgAnb;C6U8i`- z@dE^kZD3z*vYnLVE%zuy#xR%m!rFA_h~eeZ zReWea%{2>`N>)$8Tc-wyJNj~pB9ne%mc2VjxR3}QlBbWi%%;6VrBCIIi&_$8^(mXj zjxA`i7pS#|0<6o&m1BEZp&{$j_~8sd12!y6cc=@$LF0=Ox&pEL7KA71nR$4oV#K|k zH@1NBjcP7XZ(`XjcmdLsfeTl_OT&!>>g+q0`)=0GC4Kpxmt!(C`&e1^nivuSp-XyN z_E~95amJ~Izt}A-Zij70scOs|r=&`(Qdz{fNW6gGy307tir(Ep$9AMw^<(Rimn;^v zNQhRfSGQK>uN^(=dq2dqWbP5_-Oc;12q@?bwin8=T*MyyfN2nvAYaJ6$9-02-fwuYXB-HfVr%{ zNPN^OiG1hrXYz0HfS(d@K6iebEA-R`gr659nvZilr2MuTmtQOVudO8flhQE0=(o4H zNggW>WCtxZQhJQX(E6je4e=f!nrukXj(*X$I+u6b3x6?Xk;*S9J+yiYlgOcSL~|Go z1AtQs6v9(K1pdA4fV@MNQvTh=>iHh7r1)PuS?VUg)GSQg{@HTKQnhhI5k>8WAooVUr7gKi|uoL^ru;e7@wGuo4KY$Y`<&!{?FnLFF#KQdD$vD z(=qAHH!5qL_i1Y^$M5445^1v}iE<4lla;8D5x&d$T*{4i$;>d-D-U1;ZYMAxh+VB;7q?uW z8;%sOj!{>ZwbxkkLQ~xa>!DM@j+bs77Gq34w~@E~sovZ~T+&5(`lF33+E?4_o&Rw% zjI(zUJaVw6^Kw?R#dAlYZ9rD}h9s1}ZIL_Crb=Yp3p6^lyl+>hP~(jPFHa^}Q_ppz zjbB1pW=QPuoH2BmT*Bfndb%zF)B{RjvMn_UPE=Hatcrn!3MrH@a$WDK9S3QdWuahQbW_!D%T5(GW(__mPo zdnc)GvNZ*XrcgvFjcsyLMT7S ziew*RN;f^%IRxW8xA)Vx`_DwAGgNje)rU@BOOQFiN@7LZP-xo-n?~_7l8^PRC%s?7 zx=;GPQcTWVGzu}p{PFK}yPuyRSP^u(?N0q;y2e!ennW{ud|FNJIo*xV{@wM@aox?& zVcm7lbc?jrb8hGa^C*$q^X)@$8ziDR>^4K%f1ju}A=KiUq}H7)SYJ5)-QE41D}aT+ z8`ostz>@!+8}To97q$JKrZyq{C)E3&z8|fiC=DWnnaS26J!jv!7U4u()XPjMPUx-no^E^cg7KQ5#tvxO{^Zy85U{ZDm~=dC zD^&6F13+F9J4E>#%vPHG<3nY(p=Zl^eE{nlH0Xr&f+00DXp)+TwjzXphCncwxd1TE z#cJ;S`zNpb058_uxRo7MtNCfb*tjuHkz;=`sk6jiM9NU#%H%Pd<5_l-*0zej4Oxj) z8M=Yib!b-QE~JEbPmI#T7Iq5bDE5au>|wmtS#SH`p#6d}w+fYC;n+&bY-)Vm!k9C? z7A#&7Ne+WMBbk5((}!%tz8>wJQr4pamV{(G#yx3XP~Iorp(}GiFSFd|=_Mm0Y8+mP z`I{J0Z7UpwI0g?_io&$R)48tDA~p2N#5Hz0`ow7GnK@^X{J$THdrLt>?RV^D{XQ7Z z|0V|i>rnpr@qdGIv>YEypaG(9wah%Mr8Pr&5rz&<5#bN)z;yjfMo~TCsZVWTfm{MK z3wo|axTlRg=97Dvi++K!X+(fe}wz2%NF=4qJ)0k9{Uyc|Ej6IaG!-LAxKtSeh?Nt4ipq zH|Q((=hH)&0#U0pg7qhk7FW~ki!+{DI68GSurkMgG{6_Afu2Xd|AF1_+vtA>dHkDc z{?jIt6LtTGbr!N6-+qoBhX6cehuWWj$-djHzV@uBj0(=QYrDc%4VsZ=YT6RgGaM|? zE3hxXn4M+&GfY<5YtGEu$^)jO^T8xZet{dbHj#izV9e|oyES4r;h zu^X&;FN-Qh$Y9QEsx7~`wKwv1NpHWa_$Vk2MT|{-mD0sDdOU&Xnp8HrmXZ1G7fe7? zs~07FXF4kRb+?Bl;F9ZA83(I3k!}%A z7r}x_QXfm538!uHJZ1CgCI_XwamfWy;^co92cmQ=;NI3kKhw8L16h_wbpP6JhWGwW zYUrczUVI&yXOZ#{ar?5X1^ZjfrqhKG;NJ_kkn@t#OD6)<5Un}GHR-iA9C%Ee!kg+a z;sjoiZ8i03JK&}9)VX~FjPJ=`?sx1N`|*UbVN8EN59>AuO$;{4820%eXeIkmxJuP; zbMS`vFHPbf3&%|V3R9}vPAICVpSH*yr>;Z}R*?dT7!o$=1}K6^=HP6_m=f4B0N000 zS0~vPdM_3?w@AOR0+tv7F`t_>EGpQ^lMcTGgtInj++MIL;j7q&?U!k{X}+hUCjo+Y z=pEc+RO8jpj6sRtaD%Y}jw z+Bztxt5tj?SJnzV#4l{U_FVUuW|!&D^>#$nF_$8hU!x%PR!v72jP)50()9@0_rJGq zAD^ok8Wm0*{W56euf>O>(8mqf0tHLcX9g5zT}`;bgBuEYs`mVce<63wkWAOcwO)rZ zm+D+MbF6o~^+*5kEW~kmYCtC-?@P4Q%g1KD@(T2KjA*qAL%~U??9{B8bd}s&Kb8mI6pigS2I`M(&8!CHE-c2huvzJ z7mhyg9>j}f8my#rYE)Yr&OV@{A5?u85>HX4Qqje?+nNArqsc)`{0A_kRwpS(hs19Yd0$ItUehWkIN1vm!b&$l>o4wPyRL7 z&KqFlm{AhSBuOLN%b}J%=WF#P%iqs8v3@WXk6NzUzQj@7Re)j#kQKmp7m9@RCPY=_ z`3lX$hBv`%qU5*1qL)h>`vV2f7aaLej3-Q;vz!W?n`R5q^@r*eZ=~Yk5vs96u@VEMcTV;o=HS_1FjfI+2jOI;eainmYy(;3QimS!;gepwpH;JyiAza zY-VNH$C%*P-+eE}3==QRD@mA~FEhzu7SL~5S1 z4!|=g6-&y2lKZKQH)t_?Rt0H$o1`?nE#*r^IyRG zXccW`)Nl3@HiTG;kONtzKSor=)pU7e=^Pjv@vnMr!DPaeZng$IOgz(OPcxzy;1_~! zO%wW*RI+dcEwt^s9fUig*GHgyG7}rwDXvW)+wC^zucxobR3I^?`C$A^#)Cp4lW(Po zm2l;ds5Q>4fM^!1B>SZ}yLJcoW0q(1?N!VMhrVIafQ<;)dqdia7H3Wj+KSfr$%)!L zFcDFMUWt#8C2FZo`6Mt;b~=itm?ps-H~H#ON6LbsyD2f$v0#O0C}(nMAwB_O`^m`1 zUz$sWJ%!`Gl@&})6iY8QO^gJki{p-TtmGJhloIq%I`oa^%4OCVotz8?vV*GR4HGcL zY?~T-3ZB!WVD)+z6ZU#%y%!wtbf9XzWg_tal)TDiw3eYIg#+>ME?o{{KwvoCiNiCA zK{BPH7Kdecx!mVPg%K}5CP_SMUB#e~A>Kl1>y(WnO>)tY1ZXnWU9HOM-R)p}gE zlzBRBUm=FeDfyrw3$Bg8bit>5so@V&4X6Ztu)pXL*-_=(@a3#k$sA8Z|Zcz7jpl}Xkk@DsgCUaI|#e9O^3x<-)e=ac#Zxq0#Iq+w;BJsUlA zQ16^#l5364Jd(>!2C=5-9M7M>WJf!6oy2$aLJ;&y0n9f9#k((S?d#7kG9~=XEo<&g z5r}a*KobfG*q<>xLO7&z|d=tH)(i$leu}Bkq`2$zTCbtfb=z{K zJcSu@pa4qT)fP)&HYe0D^F3O`J`ilRVpjelRQyayZabS~Yt!8YD0$kkl#iRuM#hjB zZyi;o5VGM^S3gj@pu~3zvlciaB=OqfTi=>8c;+9x0#I>Ml!oOXHB{&ns=!AYH_@AF z$vQ){=Whf@u$Nq-40T2bmAL5*Bt}GG&oTQ-W1wWt-NVGO@z31@OR%#~NB7%eK-gJ3 zXK#_uS(D;?5Y;|6jw;T&8Ts04=ToN{aj1zO7lcjbZgrX_7}H-y29Y;dMZbTpCNZW> z=+NMosfc8-_lPX`Wg4O>Yg_xxI9#Bc&4^3cyA1hy)zTAf#yjqOsuHJO^^MS_0zTQ4yKV`ZPC1bT}XCMJR#LLFStnS?C|~ExXbTBKXsQ88gLcla-!9 z!cYc5H%q=vUSHL7M!VA5~|>nL!vOzSn4#Q*2v23dKl2*Tp_2;6MWM z!$-gm(@R<)CUGPyxMKZUS!|(bwugI1>z(v-{5GDmYv#Vx=YNotr?=(|D#J&0 zZQV>=kJ64^O`k?)?6!dy>M}&p-CRy6P2&f;XjAO)WIkHWC zivg4jC%rO-YzE(n7AAgb05sIv9!cyj*7tf9XDcxFTjZXxC~V&Vu3f$Hzhi!c>TUPJ zRbnyPFZ!1i(rG|gt}H2V+7Y*oIryxX~;sxWg9c$7bfo zPUCm)bsiJ$5-QD)$gfEGIT5;hHwx1ae@Kzs-n5aedPezB7N348Fd^B-@JFH0sOI-g zuOru@y)zE!35!E?B@O9id^N47%RP$5BMdSDNe*wc#hp;UNWj6*i(pk9NMgx6CeO0e z5)FoU6(mX(3Ih~U3JISfG8P-loOrJ6-7{#KxN|=o0;ZH@z5#{_E~<(;NSe%iRAzP48c|Rux0#ZxJdV3@IbwUZnsK z=zNmRFv5r?PEK%KAzT5y#0Iz!X$nb2zxbRqAhN2(_7LIy+XDJqWS0>B|pp7fHBOyQOi-H?cY=zDh|@Zu=Ci^e-sr} zm@4*~Be>AqFdynGHIGI=`3DoU}09}fE+tu;}eXaLn6_b?bx3x`Zsq~Gibvj zjO@KqJH91YnZ!W)Vej!oq%p$nQ`eIorXk|JT6}CfS9hWjGrq4=8y?wZL@PB!niq)q1BwVc!Ot7RR58L*q#bRxg0 ziQZUm%vEn-2aLVQgxKONCgLLka6)c6A1+|~?3y)qq}%+SgCQT&aRN08*X)f>%Aouf zZ>m5i{AL(4r&L>6bw`*jtP1Sgf7(Z8u@W|k#0>=W7%KTG)L4&UELj{S9wVGKBK`nE zAyx6oZ3c=Q`Att)rF4Qdh^U#!s+H$qFn6a+(07-Uha18_@DP)Lki;J~>t1>otf&Kz zCJ!@*xv9?R8hA*8>}diq>k@VKjHMpei9>PelNHf1I?3<$DM znuS;)4GOB5B@Hqa&ZPSWX5?wu%#!Ub*m^9@f0XOG5uwv6cMiyJq7H1< zYSOZ@YI-bHE$>oTCm1?=GIiyE(zO0D*=e-(=C}Ry^?AMWrr&j}2Q+b0A7l(1h?y`K zVTc9m<+DPu`^emh`F9sC-@5?84*773c`K?VOvsLIaQ((r(JM5{Z4aHGUF3y6Eq9A< zmyfwPa`hwMy9Qx7@=lEaf~-@1*t&B&l>d9V`6d7)@Y#UKb|BQ)8w(E#%p=#QveyeUnUY8x?39SwHsKzU2oa*=}i&5poO*rOlDQtz}h6bs9U{ zx~y_!3$`V39vNom-`wodN;8cG!y(ACg+JK%3upamyuaYeT&ir_WMLjp*X+GmO<4g+ zKy_XYH4* zw(y+zUa~f=9JW6YD7;GqX&aEVKoD{NQdN8 z1ft3_TC4{`EzK}aF>_Q1zxq>;TGZLlVK*=&C}Y#PX^*-8`GrnQlTlho_6vO=P;yMJ z4??FP7f&0_8)uuyl01fp27?<}=1fdvbncqmAPZkoJQo~wBl23wKo$CG;EB{*zYoD) zsSm+Hs^0=!0J+&W>Wz#ycZVYXR++cd0Hzt5oLow4Jz#bSB zGU1f?C`%-(71$y&)dN>DqcnIjA#F)_#`&az^t4I#pQK_fc{>E|YJE;1ZytkaorHP} zdzFEH5#4^f+pw}i1JKuV#ApG3k|j=vjPyl`vC22mN`e(s4NXmS47JgUO_s_-4B_T) zwyI-7purh-NeAksDcp1tbaWYMJ!Ek)@|l0{P5~c5r-vyF7}CX;>S*=6D#d`Wt#w+` z7N?P>uj$aZeq+rqXNz|ls-hlG1HwUZ<~@6QBV(rF8rw%V@^OzGuNTu+QkLhb+B^Yu zZ3dFs9B1upW;FQALT}kl6486hFz?ZcBQs34k@1B|HcGNu&4C3G%hLiru9BC-B1!y|m+FoWEwx4ylZGSp-0`a zCr74T2tio*GBKs|4bckL*_^i+MpLa03#%9{Y0yg}$db1qTf}A=?M2y$Cc?^e99joi zd&*+UNQlRsD3{%50f1y4BHC970l~RezzVEk2NU7+*SuG<#s2dLN!*SCdZUPV_`W znR0w@8v!+;E(T;|dvd}86{PMbwB0G597+{fnV-OpE>oL3i{kNa7)_kqCznM`2J%KI zi_)8lD^YU2Wl*fl#I}?cm8x<$l%@P2zOdOg1q$_lrl)&HvK@9%-3+i}@?bVC;#q%o2R9rMsNRx*MbERxM$?1S?KdXTjz@#P>VBKpk&Z zG&$Ns9TzoGt186}+KAK7&gsvLl6IQltCnxnCiKUC%}P6dR+HWE?*c>c!ct!0N~%|9 zjLj1F|G;3o5GXaN`GwWC(x0|($Ks(ReQP}ekF>}+^X8B>V1>A>3~Q_NJ%|)*T|Fq* z8KdM!@;D7bVSga4kQNkoF92IECNkb+O^;6mY7zcxR`Mh|CjW)zgsvzhX45uKgv0G1 zFYcVp>PP~T&;!0daarbaZ5=6-2c+kGH$nNvBPQ?4UdzWRChwCo#WAYz&En+L`eFi8 zBuDTTw>RsdiWf$i){=_0=STV&Hm}napbtCVgP@&I2zREugUfq{TY=&ph_UxB?g@6i%J0~`6YCBsc7t47ea2g-B3*%;EAsUl z!X6J{GA54FY`^cMM~E$!NpGE!c6ezAN4?^&Jt+C*wFeg)vrX&jE$(NGK*Kks{XC9$ zj_1wKWW!1peUm1CoLbAD$1^W~55LXi&AFm9-48b|7tZqTUGcDG^CnzteSh2J=;B$$ zIZ-&|bOK`dlppqlRJLx9wH*W9{X1bhmfROF{RK|sWSZ%1{%>VwOKdz#)pWvM8!O?i zwM%nBu%rf<$Gc%`!v!H;S9Rn;Ys;ZisV4U?W zDpVEI{1-OMn<^G9-8xo$id<`!uKl*W(mc{UpoDv3-|wzECN!_w%(@tO-*O-c$n(k0 zuo>9y56RrY4(G^X<9OQ-4c*;qhWYdWZOhUoxG60(tXm}xBK!QOqHHl9Z8TlrV-wr}RQM@ZssYcI46?^Ur#c0qU0$Fr-@ z2YvK5UF|gzt=s6`ljS>qw7^bLa{m?)0>R%K$l#^WgImLBfxX>W%XcP*s(m2@KbQryRh1u(ollL_>rRfAX<08fIi@v3PIqqsOvo{ zw1@VxLGKgVZ*f3B@$WfthTZ55$Kh=z;!Dc#jMp=G-=hse&&grxGf&Y2s-L?1N4CV_ z8}^srK7qx%QMBJ)QN>G%UVDTexpK{D#>;bCs2|ZKgJ^e8!bnZ<^7fCEZRpsZ`JIdiqB>>e;=}(Ku14UYd?^>WZdeUeH#%rk*TM^6Yc>&*U=^Qc?&Kzlb)m$l( zT{svD6iJ^-ZI=Z}V$Eg5&ZmJeDdwfciNx^0Tz0a|zSgff5oS!;D_AiI*oQX~(B4Ka zOt`<84#jOYb?)-QwE~!DY}h~R+}&U)o4J>PB7%(PCL+lMUOuylC_hI5A~{aL-T zEw(Tfs^$ujwsBygL^Mg!FSd|ktr4EE>VT~iwbP{b#faGv5wK)G42!{ya@SHce;5~i zI2hF+apV)l&uZ9fv%mnWBVSy%{GB-<03SDxa2+w)wWZC$g(Dw$i@vP8N6Cm50Ric- z??n_^ZtZLCpohTT#B}JMkYhMr>i(2SR;D?q_4*xN)fW&n*X7%TOMl(xD^eN~hQ@qq zg(X31|r^Y_D3-9 zLcTfF_DxVf6=|E^I=pQ7XW!_w0WYnOmjXd!uWW;9`p!xT7pW8;vQ-R1Py!R~we<+J zJtou7Bij%R13u78(vk8<$e&_85~KC<0lNXUT8K7NCA-h}ht9|M`{#trS% zgcQtf)}NK4``if%5mSA>D5+?nY;5>>7`|qzoY->JrsY-B+Gj9sKd;8NZY-j<3`Gs{ zi4Ovy-Gg|QA2k+O;AJTFQ?`{t#ae<K?ti>sU{gt*t}kD=I48E=$7X7cC=lX!vTvOHPTw z?a^;QHxz|$tq`)>((D1vd$;giI)ven{|ZD4mBlehPd93=GHn1P32X3<-UOD$TdyFc z)@mezE};IDfu=xc9!bC%q~q}k!awK8KS$WPDd-F1oDV~avg>af*@Ntp^kc-on7G^S zC!b#>5m!6BnqsOiI)`qBD1}z~DVt1UxVQjT=qY34@q6S*>HR_lvkN zP0p+*9DpJPDIPDsBw18u9W??WqOj!xft-xU3i+xB1&1=Uh9wu2XC^ymPK(6~n$EdB zS-SD*Vqm6HzHz;<}rR7_W!Z?B#TI`?A?7uQ#=B$U1VxSCxm66v`?3%3- zqYh4ckTz$OEhI&avW;TPK)+za(~HCnzOlJV>Hs2w&iMPgsLq^632L2AenytbrpKE5 zLr+EwmPK0JF30deT7!w|d@1u!NTK#$r2}z?+(-DQUmvFV3|TG^j%ApfHxRy?kMjl?@NdH#-~oTZsnZS2{a!OXBEx<_2PramUBl zpKYnj_vX^G5ALpf)1AKgIO`mbBKjQ`7tcTVLNO_G-Licm46F(zUZ*FFBS#|2y!gD7 ztIcvf#oPH;PN=={VRI-^&Ju|7_tofaFUK}3uylUK=1Yl{(>OD*3P$Venx0;mMB;$k zwp>9QtNcHty<>N#(Y7rb+qP}nwr$(V8&;BvE4FRhwpDRbv29eGn|;>W_qMg#-uLX& z&WHH}o<8Py=9pvl(R=-M5fZ1wgPB)%bJv!E!L?RirH(q}mU!~05?C0`qvoBEoRG9D)U3lZ+6RdBF3rO$Jla-GmQ z+WAwd!kQV4Nq~2>!P2R7hwN3YOC+a$cHzwQD07-byO!N^L02jx@}^ckbzOr>^#rb6 z`Ooaq@}&-)!sW9EOKxF3V{)61`;IEZTaYpv44VpR&FKp9gGPm8lbn*uM;mU{ zTF{2M-sx4|xSvhK^5Ib*ye-Wy%ETj~-N}TF#DjziuY=HnXV7x5iQS?8$>p1Xxt&j^ zSZ&j)C&Z`FLzn{6b0PxaG*4-1^6&X} z#$NT<7jb5`W?2OH)*2q?x(9M^2~D3x@tDilDl~Qg^8>wpT12A^hn>))eG@pM$V+9F zMWue+IccY5JLxn?1y;R{DIXOt`ewJ7=C^2`8-Tkj3nrrU#vaDQ@={7upQfnN!3=j| zXN`x^=y?e8w5aBZhOD)jcd8S0E~R_7ZI^Qr=F5m{4Hn~l1i0*{QIkWf+mdXpEe#!p zQ%K3vDNRAjX@%mCfsL$_6|`&YIGAN;oJ4mqRM3x)dM+C?L77A(KA%FvEJUZ#pOKnQ zg)^1TcN=1*ZVni4XQ{35UCO0`yU_&2qiz85*1U<+)F1kq&Y}DiW<^{M7N;FDFgri_ zo+hPxDBcK%a5X1Zf$KB5OCM1)L{NI4qptBK$Rtx%#7R;Br$IKxL%!kqR}h8uR#?rg zfM#0q6Q;n0B$Gkxa$WM`{%88&`wfO}J%^^rs#iAG^6sYBf-G|dp}&z=>81=qMBy?4 z6odmJMh^W@IHpS}0rlqf_{XeP2GBBrIsV4M!~J|1u>g-VZ}Rm(wqd4^0%_C7bl*!X z?bme7hW@K7Ih&&L%D57)g;MmIOf2$`380KN#;Gp_!RvF6_DidnVWlQX$xiaEAUFnN zGV7;JazaOGYoRExhbcxY-@tB5DCVk1*tI!j>p9 zMouEm`TkEoG9W5qMbigT6j7~IN^D$rovZDxt zG)gCuyhOX>wkdVkNB?hqZk@vc6Z;;CjX!5k)@Jkc0Y1Aq#X1cn6&9B#;tvRrvo^ zOCRZKnwaJfIwCVu0gb<+7$;g^2&Z*3W8!ZezU?3Ax_4DI^;mvjIA8jNQG+qHs%MqD zhb@B5P!{YXGX6y=0Uy+!Yd-ZHxqsP+Zpvzd^U`NyGG=gv<2|{vxD1{sya>S9@oN8R z*#tfuT#_UUJ|h-L{)lp{uJqUFk>_q264JckeonHQtJDhw74^3*`|)TC(%Nur~U% z8tN&h^*9pUv+76s0nU~>?=+Oc`;PGTHskpq={HX;?QhB~c->Yugw^Uwk@bT%4o~1% zH(-#G3(vk%)iCVK#8gbMFV-JSyb?1X613QSBWnPNz49Zt9IM$qKJl7TnZuljvL^vE(y|IU3_yaC~}uA{-HUpn&` zx0KCKJw-mmtqI7*rqRO?CHTjJ_CDn1QBGqVR;>A@=YVh4rd=D-=hCDade#=Ayz=;h zvTloA*Qx~*7QnL$Odm@tOGk8N+QzC{`{>V!7I|Pij{w{-UMF}|*m~;g8jykxv%!I* zmW-?h3J*G4KgiVGUMZH~=ME%)s+XcKN}-m=<$!Kkt3_GjN~~Lh*ynpSp*LdA%lwhp z9+FY$o5KIFChpTp?PxL0#%?@@p}dlZZ1ivpP2?GtEfEt zM4h0}+B0{HTZ}bESvcKtF31!Cb!( zP)V*L!v#mXKlVsHRTWT+Sw-4;tZ!t=`M0H33ZV%rdalgD-r=CG;yA7$z5dC z6gQEAfqm9xfzR?E7h&~b7mD4$^`((JGG0$CBIYRPe3DS=BFTc=x6!QnP}FtuX4gTI zTes(~<(&l`&kO>}oxQ!U5Ytfk7s`y@dr$kgTiQR6VL!!6FH{{kW<#yA02n&E$TW0F znee0)91>^w`sTc+Lb;#f!nET<;2J?!p{zn4q>H@47IW}y^T7|u)77jG!fjKwzC@8r^dC<84K-c7jVhaAd7lqZO<>M_dn3 zZw9DK{^nJ$49odZybsfX!SW^EU8Uy?KO!8d60O;eYXL2s>S-h)W)kVwRMGPyJKX+Te0SuV4#K4D&K_ zmPMM#7*&<59eAX5ShUtlPs%LHem4semT6%-n7)>?-C<245Vpa;*8!H-A&R{OrLLeq zo~xa`P} zm>F}|YOi?;#q1|&nCUoVj>Dd`OxtWvKaZmjOwueWq=!JA`oDZGgnz?5kD1jZ>6psT6{{4sUw z+s#E3kkM>jA$HQ+ELVF8Chp)6UnxGGM4qm#4WjJHXApOsSlvQ#Qm6w%eDLFI@<(~_ zV@Y!1Y1t1m!w{yhU6Z}sX$_imD%-~waPiPl>0Ar@5j5QzKE{Pc53&Z61IELcx#-EF zn3Bvl?Bc?w&f{`#AZXiakHV=I;Q&`Rwhzo>6hYYy z)7dT1xbOls3FgOVRG39uo?!V~Bu6^Z3xoc6tts?a1vmGQX?6PP3PUBi9hG1!d=x;r zkk0_lO<)kcx7+S5hj=Yx451e*o=$s#Yo3Ou(fp*-EC$?h4a{P-J56eigv^ULO6TLF zQfrgGiBT1|$wId+=8iQShLFP^d696p{A|Zrtz9~3m#%EKEn!tp&gngcj8Pve0YkaR z3pp#?`PaohSvf|!<$!}9GT2YeNvUge{GrTqy}uuLrNP~Q(!L^!+19ShxuHHuC)OtR>8ORkaYA7!B+ z2qzbpC#|Vz38bw(b8y48Yr(z5T(AlSc`j5s26HT(Ev74V25N;EO!A7YO$tCL;p^iQ>`^HD*Cc+_Tupfk= z9%~5KV9#Di?|gJ$(+MTFrfgw^rQq*HL8)hKj7!>GQy`3(Md-$nzQKnG2668Ge4-1K zGqK8(x2$xI&+JasIY;2bl|Fwe|Kr4AFe{ zZy4!{5JfT{NyVAD5;Um=vu1?!E~b9SNxiVjpFr9hvCdV3L1PB_I-l)9i5+wb6Z{)9 zx_43{W&PNZ$S48eeVBI~m^%fXcOX|nW0T+vQ?Yk3Y=?(xRx_t1J5Ol|xRJp8(WaEw zF2;F8f)MVcQpX^b??3qyEms|`_<8Rtmb(+D_qby{@Oa|z%8|(dM9Y+;2J= z=r@y*;=iSnnF~9Zxj0&z{U>KJMD-u$;_Ja&n5iWJDL$Dk)MV6)_Flp)6>8!{0SOq$ zNxypRvy%6X+zXpGQ)WeIh&*>dpQ(mc%h9L;R`0H6o~P2&8#@L4{N50Z5My1(_8bVf zHzs#EG+?yExg)=4T<%wehWkna-XI8=%mxB5)!eZrj4GVQJ0?qMGp-SHdQ^lU1 zN9d|ga92W9x%d${7={${cWW!CZgf7@Pq?(ciK-@|to-&^c| zu)Y2{!V#jfE<-Ae#Gf67%^E|o<=BbCZWFcht2Tm2Sol|GU8mShHR}Qyy=ki($_Ln7 zFEZL3q+nkxN+l(*uQTi5q8h$Jc8AjcGSqah%NYi;;5TDR9cDWUy8#u{r)$%4Q#KlF z%4|^I_!j+Xwg!7o2$M$+{v-Ap0f}xu6c7=WGRNTjw7YU- z+%P+`gXzojyG>D5Axf~)7SC}N5Mv+QFQ_4tCNrf=FTCrLD>96KMr+R#VKXF<5GWMioGuY5&yWW?FcT8S&3m#*!^Jpb3*Hs z=%@nuy(TxZPM*|H#Ggk7AgTA0uNIsV! zYl+K_c0$II2V?Zom7U2zE}k1kEaH3jM6D2acSNf70$u(V%qq8R0m6wz%)2x>X^bYt zS2=QmKj^7w8_UIETJ#R|^t0(6jxt1%pK-2@{EK1kq4Ofg0tXe^HNgfLA^QgIP8y?- zI^p==G^^42^Ix<7W4`i#7UF+S2!yEU%i<~{@pFc2H?A#Oy~e-BOGM`(Z_EqOh(Ob$ z&%?A7&2o089!z-GZfuIZYX=rLA$|b+Qe6_#%ydH!VP@*PyIXL%&P*}&ettYd@1VQO zX!W@gidUuFz}cEt6=$ESnOzHz7N!*)>HW zLi>;r7V-C zFtDJe)W$AZ_L%WHkr_|YX)FGr=xs)FtDrM;#(&VyP3U@dR2_kmEyMmy)Q}&;&jxB& zfMJAO4Ak@3Qg@jzPMcmT50kA^#R|G z8&)3IoZRQgNAl*T(;95v=amvY*BSUH>HPPwP_Zwpd*r(Z8kU7yPvNuZ@7@@ew4bF( zUVQFjlw{y&Cl2Rj9W)Z6ZN~`zdPFd$p1v3U&vTgVAMfuWDwi_2!f5=a^Hpnh?0!pr zHjB^b{q)2B5lSMmu-4$oP@kEb_z80W2@B4MSaPc3k2%N_(qBC?r`ghdpVp0&Tit)1 zuG$GV414|G!EO*L&H4Ia3CX+YOfhO{Jfk@Yj`*g0%9xYxYNpN{v2Ez>d58s%oi&5& zIl_B(j8$=O4ag-X%`)3~RmOj$8e7|Ad38@K*`0|oMYR^882VVoGllWVK&RWCrj^=% z#~0FQj$;7n$9E!IOfyV6)Re>dx5q5MPp#g}K7zX*>aQ`cjnGP#Zuf!=yW~_%Kt$It<{D<1V zWSP}S2y*=rv}>l(gFL7UTF_FPuKn%$KVx6XbOr~M5_IR8ZQM}Em4NGPmS*HrSwwPU zVe)~!I?;HG>YZVipF`tqN4;de6WIfc^vy1gGX}cPOCx%YH@rMxIVLioegu9M9%ftF zjLUoRK6`}!1yOG)wreVQy$-e?R>mx*Pg-QvDzN zs@eY;W_4W;obPE^1u0h0^r9pVYg77=Bnlx_tLEyZMJnq!jiMh9I9 z-}E{UxCJK-EC%sd&`}Pokp&HXrmQL45-NAXm09HyTJw|;hA7H|BMG)yABw=t7$*F{g?m`bmpI~MfepQGu(}r- zk2X2SFx4asPTcVbQ(TK66Dsdn*ujl>;9tapOH5h3G+2Xb!@IAAAda0Ov}G*MG#V?* z!x_ZkH`la`#H_?HtR-6wJW0~RT=JDQyP!(*{i&{nyXtzsk%mG8<>3);h;O;2CXwmq z9CVIS$IpaloDw;Mr;)CLP`YhU^gQ4u<*F=Yho>}(Gb${oY~c}akq5(L2J!QEO@9>Z zs@hpU!!cJ-ZB9}yIk0Bo1S93U)Of}+fa{6EcZBl%3bcoZXDf#ds`>>Xj-r?fB07jb zU~MHm`t~DvdAXr@-ZxNZeO-Q%WXu#geJkid;~pD_zK|gt9-mXjCmFHReWk@y{}{hi z&}b;;YsZagYRs4Uz!~u@d}1vFpC3leL6nO+RX3D%ZndmF6DiljE0SYC&MmiHZ5^2h z{z??0d7KxUyAzVg7ZHU;-q?Fmz{wcRN$p`F9dgN~V&$&d@4PGrneRx}%m`v|4{DpV z0GWP5Re7ChNR>w+X7%8%eGOEZW!F@A5tjzgy;R(ejo=#m3;*`$OKGw&Z2xEJc*~MA zOu<4v`QT+LCXdye@e;63nCiuLZE{c~k}vqo0%yR>hYM{Yo5U9p!#pz~iFL@b%6_Eb z3%2R4;m*t4aPX;sFjie-8l_iD*Z{d6gr2l_p`S5uB)=gY7~;tIlijJ}kJhHh+rA-& zq~m9I>b$FgH$216z*^5oO1X{{Cm~q5kBHM}*r@Kl@$H?`!h1EMy2yo0L8ELZ%h0y; z!L~I52AQ@-1_r4%*Dz;S6w33vHo)cpnz>Ivl<-u2B$V=zGsXyjBbF{QZ;D}oyY(kW zyMNZ*er{JBellY%hrx+63l=6sP28nYgO{d&CBqgh+o<5l21O zwQhxNt2oNg6=~Wvvqj3kfB)@g;hPC2V}$?&q)7k-ME1YEHvE%YuLbLgrwRCsbuY%Q z9!cr)UbUTkdPUZqpFp`?PcTfV8fq}tt~cj)-{UIWtZ#bq_Gm<0Q=o>Y2iB2V|1D%n z6cE=Z!i-cp^JkCZD<(@lRZdVxCe4236?Kx9#+$v*r{v-|d-h*X#D78+CmDl6_>vmR?C+5(2Zl=%z1Ghjh#Gt9_}fc2{D?R=1u@r^w}Ni(LeYYY zx4Aa&@sM93ob2zdkhY7(5I2G{H?aV|d;`CN{n9g)uSx^IlKl=G|Eqq+o0L$)id%EQ zjV6wR6-ZB{mCAu|X> zU{ZzL2D_SMa%mq!yh|i88KjUFrx^twnKivBA+TZV3bfVZ5%1D^eS!MMosctZ`sf!n zzTH-?OmJaPb)YtWy%meOgzAR{nf<8>rPE{cCPP|c1Bu2DDh&R{Ss0yNV_IUZWqS$H za4oJyyeM&14Ys9?oL}krdFgV|Nb!dki5e`{2s-$p6wTpKDITLJLDLo+a0uFb=}^OE z5@FckaB2Oh_z?@IXtT+72$F;4)oOV)J%&41ze4DQy*#*V9*Yzaw88~kiA>6Uh5{{$ zw&jACd>rPoabWI8J_8F(pev`9vrK4WLr|9)bV#t}g7?d3jJHIU^f}jfWFk>m(_lsm z0wX-h__1Q#m51xFp|=&&GXQ^JN>sBhsh$2TA9%80*l#uaJ1Xju80T1LhZCP6!Uppl zM_c~(;;|Y|rs)b?mxH@&P!AFNZPI^>=LPM}m8@W+GW+7^!%#+BBvoB0Wp*X#shUjx zioSIP?(I zy7hjG6IrnVru+n@zUhSv0+;EI;_c4>Mi+|8n>e6QHtEIyNg;@<1Eq^3V#h>X zc5VAH9Bo-Rg>2uHZJC}1g~Z2DySQk#0^-b~;W&*oyPcqCBvLvni6D)lb!Z$=MQZjO z4II1pY6ylMZP4S}sDMcuQ>;?3$kO)Cgm(GF%g`oi-fS(dYOMKyFtpQ{)7ttBhq@0w z4-%t43%gQdPi%iPUGfbrrAjwOkZjaYmodsY%}U*@8z$p6=ci3rsfpm$NclrAk_|+! z;(Xhknp}3R#{5oIDNb>rCx{_GLh<7KBtnTH4;5Yk1%9D;Dgk_!Zr%JC`!6SL>>&ff zw8lHo?U7X3JhfOZtuC|3?UIRwp&PVE4-k5+{Lpi5v;8f;{QCT@tzc7cJ5H-S zOI_r{z z@+WP?$=9}}GFXAdr0Xw7#oW0ePie{&NGSB<$n4zXW#i>H^4+}H@REQ3Ha`MzT<{R( zt_uJVDpI&EA|x4EY-BXd%Yh)`;`uR}dTi{1fAR*kn@w%!>?vGT$8sZHf}khmqF0$# z^szmau2gR`n8?P1iKwNw)y&y>r~`&gvc}L^Z9&x3(-&={A{mcMy1q_Swv|ZSC#b!| zeLNatwEh-POSy`#;OM(FpKSlNA*of)g=FUW0%ySX_&2&JvG$Yr=+t?FLMN)}F_aRjNH?H`bu zN7lRsMtjla;E2b~XSjvnVj!*^E~I6;u^pyhw|a!UZ51zgRJ7l1@YbL(=4#YT`?YlR z&CT%g^7y=UJUu~yur9BhPV84fG~HH+*uNDO>#5sh3ke2xQJ*}j*$pYH1HeDjRD~|D zx+}(%yOTq7wgR6RVlpU~D0SuaeRpem$V|i`RYl!vhf7+61+F_z!(gFlvW(7gqENc= zE#^C*sq6Ph7%c*=<6Z-{bD4q&z8uzX5*0uT;RdM~BKx@~F?NkU#QK;V% z3mJ_e8{8*wPAt<^atkl4nchbQ!u~Pa%ocB;$nX& zVev1=hG{+&@KJXdAAJjCPIoN=iuLQA?HGy7&{oprCRICA$luQ%+GVy7N*;%D0pp|diZ_zJ#rg(d=R z+z^Lyf&IO$hJs!s;Xd+>6Le>L%F4ySn|#?%MWVhsu1Y8E4OH52LU!4rcw-lky%>h* z%2pgC?yKF$#{=&TfOH9KP3VwP<^*FXuzF}3HQ4N9#kEIZM^KLm%IIFuP`=6Z5?_u| z9%7GQa^GsK&SU8f@rVzEI|$QTYI{0jb!u(v9;P1#c9h2WqwR^)@SC*_?Iz{V^*t^_ zpDVU`AT1Mu@>Ug{h2@Raw-e5_COcb4Lz$JEB{Le!xB0j z_krtM1fz*H#^lDaj?6`|rPHK%)lS4Y9=uXS?LL5Rl=eA>zr$`{y#D8`1C9kEwfF8Y ze(lMt9hIWX=}BTLiY@slh5U^bRtFHMzdLv+sXx%um^fJnwSL0jAn1$rt)~rF0QqlG2t3bU z_~KG(Z+Jsj>g(#CZ`M2xYu1G}+3L#R7!I({SJ}?#oj=-amYUapqPFcUQ~&}Cix)M| zHjUnVGzw!+Hrm*O!rEJ?BU2jF>}#8AJS=bA85{^&wX*v2_&4YGZoO)#?Fb&c8dlFX zQ-+@!%O1X~ZQq>ZzLl0B>?W?v%YDxE?CFphi?D8O=7zO=j_qREqmh}ASX1%Ae2mMN z&=5q6`oYrfIALvBY)QklRF<12t23L{xrg$C z4UEFX9F-bR&Xk)M;;KHv0)$u+p+)xH!YP8-eDqk>3&Bu=A6dVAK`7=tK@^#@eG|B; zM2CK4)V$JB&pIE%dO|4fdkORg2vRWQl9x2J&D?W3sq1+vxc$(!*!L5 zgV9TTe6D~GdOJNEb>d|ANCO`_p%RT7MEJ|wiOu*xadq{jnBPCA^%5S{0uAzGWYq|^{ z!MJpTE%7r{5Cs`NcgZQn%+VMev$A4Kq&;+YY1ts`nkT{$Y3Y^hbv9uC*dL)gv57%7Jw=cg@b#x2f#!M7pDs_z^O@HBtyt<$%Bdj1VUzc$v7VUb=aA}%ZR7+^ zbA08qgJD36ig?TMCY6rf@KR)3lBy%V2by}i@9E?TEy=|wx?SLp#UJKg_xdw$rnusj z-P{qw=6FV^^NiYfd|dsQd%_{#&#oMlqg7HL=WL@F0>z|~DTTc07YG2zE)R2Ok3n=i zWrm((Z9Krx2JOxPm1_yNgcAJjY!Q%t1+(svNl%qTVHNg%wK{h`j{~v8XRt}+Vy~m? zo?)RU=P1196KdFuvsxrWBFKvfhvF?}!V*|?o9`x6^h2P1!(`Fs64ufKr)wXHRfOx+Cm-M#Gi zUgZDvO;y~}$kDM0%G^%F0d@5$#D=sk-BFLMQo^J(4Gbt{;5> zQOU3yeBQoY#Pcm4mVr3|=i}8)AFdaOe?<~*Mb{eh8^zA=#qwVxDJ}XBo8W(FoQRsc zxT%;s1I%6B{sAi>Zc}EE2`hAaYVGXkJ==268PY`TM#$Sj7!M`_6`3z$&2pMbUcOP- zaT=7dFA}9!BYj5^;f~_Ki!h<9ySEF3OH6Rc;un2@P^F$KMI92n1NcDFdpdo$kRXnp z+@jpL++jJMm*pKB#tDm)!jinY5_KIu{MA>1&2%!LXAS|}`!Q#>iCS%>JKL+4j2|$f z>Ebu_*jLmJ7|I#YmS@A@3irEbJq*7_`BJlXG1$V#$D{0Gij`o+T&X>ex>&U4VaM+D z2nz?8@~TQ(Q2k~1k)Kti`S7d$mW^RZu26anFZvWa?8Ogwy!LPVkrww9@KXr(5o-M% z)e1B#5-J0(e(`{XN8Y`D-t0P3cNm9rZPFDM_upG9`+d}l-|%XG!_4r%f!Wc~*4kX& z*umJ++~pq-+sAY}3nKIpexMbXXrMFe|3Yb!71l8?oYgZt5; zj>W4Ny3d2GW|u;m#5k=|a7XQ$-1FU&U?68q*na}V$bS~bBi z#UUjY3$!IhH%_Xl32tkakkUp2NC61ssZWIvYRYP1F;lKH+(EEH{6m6I^G@ zg+Vipf{qSvc>V3+-JZ>U+v<9G%q8@PxIv*2&JryFw{Ocg(vjeR5@dm~c=k(_kD0bZ z>P}Ndg5JY8GN+^Bs?9SLR_o6T^g!P@iW29LwY#copFASS{JYvUD`D9<#o~nxjvWf- zC6Fy^VYz@(L=A0EUD>6+G`Zx}-DLkJ-(XBesY zK%%1{ojtoj*1H`mvsz=y#W_lqjakl7P>5kWQQ#DJ=ekiv-FfeFN4zb=}2U%?LFc z$slVR8$Lsq6c#R9d(FF%;BnvGW`d)4BnD%y;K-B0C^h@!GG7!0f+Nb-X_fvmsS|~2 zl_U~moqDP8R63Pr65^`7F$;DuR9j-QI)*~D0f>nQrTu9k`{;RgBoVxG;;2UH2I>0n z!M(I$9SlV+K4A;gzvN}!?Mn4iB6giNDJJf7XS*1`HI_L!qgkr=izPB;ptv2St9eCr zj|EGTE7W17Pog5iO(nOSQ~~CK3vgI}TOa3_^Bs5B8W=x&tEI;JBGlJ@mkW}@yWw22 zF~j=0LFDW=f|eo^D-PWMc-jHKoAr6e9KZhij5!wT{SJHw$^VI@<0(4dmT1x>I6g8K zIj6rDWP8J0B`s^qu(TK4c zw9yD@j!6Fo#ei3q14I}(=$0@l_0}NSjaj=kT>p9=^QtQO5wOhD7WVrXiUakC808Q2 zDB|iTI{n3S!{uM=ihbIa?V9G5AL8&(fcdB@YqK6n)Z{9_@87Devo)QVENhiY%p#F2 zGWE=_!Fy>VxU0kLvp#%zf7@jKB6pavRqi^qMH|>85tMbSCFt~r+w+6H!!&#mzxO!m zt5jbn5)5;cvXVaGur& zn9F2Ku=BFv#N=g&fJ7MT1iK|i>2+1R4W?os`~?Z_95kdELz9CxoD6#FAiP0xJ6#x2 zs&|Vm$yeq5>Y}3b^;1pYp)5@Q(W(0t+DE*W_bd`^Z;r1ygjG*WPd~W zH`^chU&|GmSp}w;|2RXx-!%Ulp)3VsH*0ruHAfj&d2?6S??Y4>U=A=R6LGONvox1? zG&BFlA2mBcRu)efY4odk=IYEW`rL*<00jDA2NVzK)q+v(3@(EQO%XLugFD)GrGvFU^4K7PL?XcX6KI_ht!4VfQ5IcY8~ z4QhR#rih+)`?4(UO*}Y_L*j>Y+Jjz#t%a_frAktM%H}^$6N7l|HcCW35z~rM#lR={ zvoYLN_>ql45LT64A;ON7r!z`oyzdVoW92QAM8*1xXHzxi@aB**F%YqA%y2&!=s*`) zH<1cOaj%j#HP4WQrYy4hg^Znq)M`FW+#~a9>8ql7CI(Wb` z?9m#~xcfh)znL701@_>EN_`;o^C0xiF{?Zo*8MEidqsvdw-vq{h|tE z{KxZdH{P}!M6@zu(%U^|+mCa6X1RN}yZ;_$fA!n~fC&4s5wC<(Q8x)ze;|P}+nlA8>azpg-oWL-Kf>uXY$%Qn2h*Usb2IhodKG{YKwCsJ{6e=!B@C&Gr`Pv;;Pr!EFN9_R4CM5dK6&qYA(**vBlN! zC|l~l!LPcK!HGXH!WRxdFYlLf>rRn6l^)o%XEv?ViLTrwuI9mGeKozPcOO7=AJ@kT zmq>W*ivM~-r{zGwo38hZj@!lvx4|#B_sy8Aemc$gMTDX87+ryk+`)b#g&>Xs_BTVU zGexQ_h_9$gtT1D)sxmxyq-1z4@JuN&9$&|UZoh@0xVY&qY9ioI=o)t|?f6S;rE`0B z)trM!wf}@zlfUyQvV~y4Xlx-zRpac0@xGK4c%Fd|4z{c$}k4i@m2SzvryXoOf z9fqQWi8A=%b6ubhb1rt?4l*0nGujh#E!qZS(#LA)&d)f4VPSB>K@{*XC$0X{;Z;+v z0cKjR2-5-|Jz><0Y)_GXODB>3M3Wg+5uR{WlL2dC7Sx0awigZTdV33k&lk9XcNyke zYX&uP+vLo)2pg7V%Re+wk@KISE&S-rtJKlXxf#E0Y>zb6$W5a|^RH}V;Nh%7-F`?_ zsVg53u?D|=#)6Lhz^*m5+^)k=*kUmgQKZTY^bYR4>cbrOEtz@{rk@_W(s$lkWfc%g zJFOjazdgLg(_mS!fX5c?NFnr;TBj zHE>RNSs9;>g+T(LyF9?=_@syKLVz*oZQe9@|6W@-8VMI(+EZ)U_s|gl|h_jDnr?7D>7R~lnzZ$Ve#rx-_ zRZdL#g(Is~Oof^R+9F)+SgJ)hpUOf7Z@3BHbv!P9iZyjoOobwml6uKSjstrEZgnKD zkHPe{3~mxSwQX#wtt>Qkd^fxlv~bK>uE@^l`W>?_ zwGl3Gm!R2LQQBB@;#eUr|0X>t@%2nYAQFo;NkbqJ4tqxDjuNdREF8T7!%tkQ*d;@~ zx#a(53dlZzc;`GwI<%^b<2NSm zB)h?JsUeE>$HVI+bu)mAGU-S^oX<*#BQ?X;-gBu-pG3l$ZIBWYrrar_R2HICmMB${ zFQwe+9vbM3dYPjttPYhNvEQ?YL}zk%N6>!m=@UiZ&_j&b_W^+PWYYOYhuDL*eryzM zD1fhyTN8?ZQg!i@a-rV1r_JB~FT&mvH=BDt8d( zl~3oCj_1V7Zb!zhgwX`n7aH`ze8>t6qI=A6jd2$!+jQUuc@%_ch|dE%wCvAHAK=EiKxos^dp?W#aN3yUyCkS_z6=l| z!jh$f@0pL>YYIaqPNXJiG=e@G*xK%kOxi2hMERaP5BOt;`B2wps^+Q(^(n03DaO82 ztbjp-S?^u2?qy>Ix{7J&nHM^}kQmF|JNIa!(awle+9~8Sl6(fUWLUpcy87m5?W??T z#cfaD%x8Dd?(v6riiLan9<1IFl2-&nX~)8d8Y6CB%*s=IxVgW13+i^I9`%VmvxFvs zeSRIGqz|Opjoz$-Q%e9fjfmdmyh3q}TA0lA`0B1}m#g(Q?luv5D@$t0WoJ-6aZc_) zh>q~njaXv}mqYp$;de+AWAIjH1CPBnc_@1imYacWY$^p8qP-J6*8DNV5@oFZOjIW% zfM8_T_%ATuM$ekVJ=!CO87hl687-v8r(_w6NpqLkah9gZQMd*!_GMNLl!s~N)N$t1 zt4v#o9mLm(1{|}rWi7?uoQ$mHQg;4-t0^sjhOB`^8~*hdpDq<2Ag>^(UEjGlszeZsgi5Hx7PXfb2n9Emv88Nf7(g zB%15YV&-zmb9}-)gWZe2XKn`V!w-M`Tg8%%EdJ2=&6VYW00I*IKdM;d9F5J?UF`n9 z^7KFH_{Hk~klQY)wxf=uM;8Xa6-nOGyT4aCZH}lum@@VQJ*3hsASZiQ}N{w!e2D_h21-U3boG7L$P!Eh$ zDkMJDURYz8na)JIA0C_&eZvIn(uwu9h5k<{Z>)tY zVQdm#0MBC|c~+E!vi=dvOZu{0jqovUh_7VK({q@*ld^TW= zl}KB2ghe0Aw|t`{4owTQte$lHE5^SJ-}o0kvtac#%yc0=cZT;?OVt%L9pX2mN|sX~ zRD1pGo)OSy?EZ2`IVK^PuQJL($xYv>-r&YVsiNt^NsUO6ST3B7w3{JO6K+yJ_8adi zwCGz^vhz|_xfXkGGju8MjmVMQu{pSy^&sJ+;WhbbJ_K(t=fg4#Ge&weFHOH5P8IaT zpwy;K?s|s{OMw(Aa-0sLtT?Hpl|{%LW}(SD#@ieRvOKzk_08z?LIC7c6io0r^thaW zShS9e;n`uHI|6$O#7|L#<<)RV5AlY-U%FE7l@tULN}Xk!S<&|iy0pjSV2L=%^BJfR zn+Eb1n4l>glr-kU=^hlaK8|rpz(m7X!@J>PI{^S|#VNeNtZgrLRq5z0H0(01&t!l1Rewu8asHk`t6UtA+YFQ94@suM7R^nvbCl`md|Xzis*X1 z(S4lN&dT|B<@#C>xN6T2#W#&Tekkkd=&k-|RDd|D^9GAEt~RI_DENTXIOdhGk}sO4 zgZ9;P4Vl)u%(zh{jSagtDOnMXPsDzE0%4N9Gf7rN6TYC+M@e0)&Qmd;z{A1YsPP$3 zzttBd-6v#o^%;vNIbO6B-%XOHztrlad-Vc3;3^Jj9flT{hS{d|_DKukZSVhK?HhwD z3)ghh>Daby+qS)9+vqsy*tTtSY#SZhw(aER+;eVC&8eANHC6LtRqdav_V=xq4_e0J zR7PDz9uz>bH=6@$JqGvs*tuq|!rPV--#+J7qbnCg0GF)B!lraO#Of>;71ApivOB6; zRO7g3=YR3h5PeH@gz~^~dQqbL<78?zNK`zg&lQyEaS>j6JPx6|5jk$dN}#h(E9>7i zS%N^Jf1(9D4EGTP!_a8e^ul1PbJ&@RGFM}0G}@zEfn6dl{^=3dIK%TsG}T=fseffe zZ!^~s@&zoi;~qYp;zJ^@XiHMCU-PEqkw0$nd#%}3Ki2U6+BGjxMga2<_9%wy_>dw9 zlE#=yzF%8a%^Q2X3s!2o5%$+!@<`qLk-T4qCMfj;;YqncXk9?yvx%sy+`+vYNwJpq zj!E>=M@iA`9DaO+;6WQW2$U`yc^Fp+3Zn#8fRkg>%Mi?h;Gr2TBo8gRj6W=*Wtt*x z9%#e$1v+CV6O12x6=F5U3scdHYJXC;=vbAnu$6w z#S;p56#>+{yavSd`lu*whhvvrt$*mK`R+1K z^@^P*p12Cxv zoRojm4U~qm?wcLXiNuH+kuoM1Poyc<120lyElb>sRwAK=VJ`d2wxJlT{Pp>_1f2L3 zWkdFTI=JtB>6Oy;J{x+=>{bge7?DQWe_5ZSPql%5)tOAM;owIWy)kxw=F}AXb zK9}yJV*N4L0BsMG4#Q4FYhuPMKx+>DUGx(OIqDeP_c#BTn{DrP5C*boMs~KR$K~C( zbLHIK-O>|2(CM&{O$&U%ftWn(X!bhtj3 zXlY_vBfVXrU~r&wnoui|t3loN7&G5QGJRrD!xP=>ucXx+qxDiVPCc=I9QVB9KpPya zx=Ue^x)5NvnkA;DBtO3(91FMSHXoBoNqF!u8o-IG4MCinl^&uS98K&hC7Sg;P4g$$>=dVqHvGp4$hK{ zSk>_cTKSGzE3YV*Z0+yZgQY>t&py%TvJONfpU>Flq>*FrKoMd}p!W%bmP7EV$u$Nd zwJ%eX?Nj(txW1fEFi zd49i|H?k*k`)|I98WpIn0pE9V@H_GSuiV9dG3XjqFXaA_|K=8}bvWoI zWp@4b?W1~w+yirH6uJ}4#O`w3QbZiJ#_!CWoV1kbt8Dr25H|6N-x9{zgOk!}F# z9|+%LgX$Qauu){dZN6-9H%NL@)3WBE?+Cx<*+lrGV*ibowfoljFEt1^(3f3JMmcDT z?P}iEdQAHTDJF!O2JORLk@rA+y zxg3BRo!^hK@$$)or0*Y@+#}}Um9eMf&jSv~pAg4CHclh;4!5Mt2%K5za#nme!^nM}`x+`APF$YPEFhwMl?U z;)D-pK9j*#ig#$O2*|+4phau>MEhu5gD3WaOV@21%ey>Ehp@4wI{ud77pLI%S z(*Ny1hri~a*XRzS2^3IJQNxue+(29BL}+vUDMW;We^FGJpu0B1^1U+dZ#?e?kRaug z`2g`JdYHBgM3Ls@Er+Br*E{)qIZb9?d^4z;z$7Nc5PEXaNln1C1@tK~4B1yd&rrr8 zTG%E?6S(N#1{xF>cqNc8iLzLvQW6gr)UPi(8uq&BPe6?CTHJ6@*X7r9JceF)HxdRz z^>g<2Bx71OG}xvZs#&kx$Si7>4ELv3uOu3lpUnrH=o(+ka=BDUPWP^y50x{ZKU)U> zIz<+XH$!VJ8*OYqsb6A^FxVZ)QzU#Zt_hsjzKC}Sg#Ezpaf`M}>#(Zyw(VPL}NLI;%hB0Vp|I7G10(?rW*VEPCEpi_IM}ddKxFWv4SYa3mjy>_ozSUWI zuS42X0=;|QdSnh*Ixd?RBw`mYFPoPhqJD?qFPO7}g>fpn!zgHX0dpcj-_DacX^U9~ zi}|Ci@QruiR6F!lwDMTLVTS;zXBb=4ZmIMB2fRvOb$A1pO0{~JVWy$?B`!RK6;aFgn4nXpEwKl3D zKK5rVke@0p1i~>;ME^9IVG-^?>cY7PJREnSq}7q!IfpEk`R=QN)ZF&`vREG(qyC`y zuC~qUp=AQg#7u)rdPA#B&%URfSUdCx8(FmJrsrMv*ZZf@1%2oHzA_M6L@O2^R4z6$ z79Z+wXk;IV_o(3hA8r>DTVo3)2d7sgy=ME5q44ll&(=T(sn$DnPItxIJ^J$uaa2a#JJqW~3WV z@s}@3UWj_}G3YE_0NvMc<9k)fS60bu7xzbaM;DRJcX9l#oqqn8>nX=4`rAEr@8{%T zJMbD5WTlBKkZYay3jD9&E70fXuJum=rLT5){=`VWi+m}%Rrsn_3Q`5{QepCv4 z3Akb?Ghn~ns73Y`Q#a)!EWh$DEhA4u+OSmCMW#gAjKyUrzq-r9q|u?u^JEPo@!Qr4 zaJ$P(%uCE;JnaSM4);=5{R#W25}N?kqSukNATlxwwzLZRJk$1#;eMiz-vSdnSHiyPNMpVHE3TyEgg zjMQi{q!UVg)$)_PNAESHX;85@Od2A|=59zVzzhLSF}0LwPiJD3N2~9@M7iBlqW8Vy z^B_gnx#v!neZ&JkS0?phru~nS=Es&xNvNa6&ypMp@YU0k(`?Y~7uc;4?OmyVp*lx1 z#$w|$&Sn@ALkb6Ta$-qahZV`Ty25R&=#X95c6jX|Vb{8KXgnM|s28`ZurnwPl=eC2 zZWu{E?2Z**pl~EcMO|LT6ya2{GS4w*k6j+6M8?so4eD%Bw^}CGF7aKT$32@=>C?_$ z=g`o|u$fYJ7sBeIl@_RrIfZE~E(;Kft853;?E9!s$_zv`K*>p(iV(bqlfcLeQ5BcOm&s9Y8bwj1 zfS)z9|NW-g;eLetU6Ul08RE|PJA{O7_=ZfQKQ_dvX1lIPTTjVptbz2?0<$tx?e z5pn*S8O^d-srGvEFIRqRv5(rzW+3wHX{RX>p}Q*?5_6xm%AdWeyqSiyF)3y`6QZnL zGr(W0JrzHxo5^4i+rJIAY)q{n@|tF_!i*C|bn4cf79sr$e@1_|5SStp!}!vF?A6CJ z&pvDf$DRJ_s{M(PTwdiKt4*1jv?BH^K)H4!k|D;6S{zyK0uqMQ=|s_}k#es7*RSA+ z!VO^9lq$by-0h(B6{@c2s+OR<%p$t8XQTJ9=&wHCGdJpBmq?@L=&#-g=aC@bnF|hbwzMQJ9g*mOQ|C-_ z0(*Gf!gQhIe32IC9W*>0x1gc>nV^_xL?1*14M)(L>012ev*o}ECIv~I#PHwI{Da)i zP)?(p@teNjeop!&7KrhVyd6soyQ7^Ep+&NX-!`l!XRe1dk9~!zTlOKuZi=fdv}VOo zuR+Y|g($CDhH5-nEPJ$N#{MnXTFW&O)nHYM1ziS%e#O{WY7(M+`FqIEg*}Z{@hhR; z%!Ws5#(&Z_P;2AkcF)V`2=wQwogM$2Gqh14AEcK~i<0V49vnDEMg&WvP!@ zI2@_vLAmJo1?uI)fvM?o21$RCN)I1wb-7(uc5sYxM55d_v0D`yt&k{B4qAGAyQEF% z5rzP{iao%}fjGKF7Aci;vP`KJ=@l6*I0(2UO?6p2iVcoowyY$Pj}i;|L7O3RL_p2Y zu$q>#Ir<3<6G-iVq(!*5pKjS(h9NmI?>q?nCkRhE`#4rH!Ms>tTQa#%Lu4P7+m{3e4d&{n#WzD5!Hke$ty->C}n zbaMZ5!uedjX^-JoEE!177$XjsaoprrQXo70d;s`+q)yp(iBOKi4cEJbk~Q#tXrXKC z#4aDQK^`+(M*~;aAK?2`(R|UQ)&>cpOqw?@g5ZL{Vg;FpLYPPz`iRU24w2)^g!hER z<2$MaKZ8EYj(B^#%{OSrX|13o8=r(WN;--h4Xe>>J2X1ielOPz-yD?rP^SO1dV0!=TEmonW=mt7L`zewK~vG&w<1sShM@G8m@*v7DBOWb2+oS*gWNkN zryB#fuN7^{?He;C(}`>h~UN=GpLBm`}o(87h?)oPpX1hL4(VRwGIP%RjWHz z*${8?6L9tqZ_T8kv-vlVQ_`)Hn@EqfmX$Du9M`y4oq>sV$q(J#Q|}hAtD`9Rd^~(1 z;!D$)){ujj{!0I+I>!&tnFqzbSEI<6Va)!34wq1J-ynI%4}{D9{=b7pZU{Mhmn`*U z)yAMB#6pr8d2vRa;n68iUY13SLh8yP6Fe2M~2ZzTOBbrHNnwH^{H*$=5asakG z1C~6ZAvt88av|TuwEQ0Q`w?j0GxqzVP4I{3Gm%eULdvxX;WhByv#MhBAH|42)Z3#% zGfCi^Ov#YgZph|})cAg#YCmH5*8no-NpgHorT(b9b{5!?2A{J{y)7~NUkp2kdBLuf z8XlB$!9`?@$||<-xu-am5R8gIdrIJusJOd4^^;a9hP_|C2mO4XIY+zxPR&kqlfC3W zywDVxI0L3J-JJEnpZs&H<5KCW&-Wea`F2%S@Kg^EDjk4f*RV>i4=LB(Zk}&tU(d8e z_oM-QgJY?$KP@|+DduKPUvTRZ!4_rXCXV`>oi#hCjy!gH9$ zeTRBJ{d?bvl$tlxNdDN;x4#aneq5PY!cC_JRa%G4|6Y#d3brS9cV*N^0>eYCRBExJ z;y&J!YU>dBtoS)Ri7XeOscVjO!15Hczdy_3t#U{td$w!|Pg_*(YOiS#zu}o{(U!KM zMJA0PooHmIa7Ef+B)PeHri%WGTIM6m>m!`uD?OHyDrEM2@uVR_K-WJmng_^kc4?hE zD}+t5&k+p;N^KvrxbSCv`GYH*t+??+gPzr7rj$373TqaC(rkXgIKO}=G+(=L$)WoA zo2$ZNwoxZAC2(2ufsQFGn+DZ3dQq2#fMkopizeBJ2Kk3G1nyZXCuqXrk*wyFft68j zp}Uzw7BjbGf|oTTbN!qu)d-G#MH`;*o+9fs8rUY;t+#-|yI|3ZVK)2qI8~n&>y}mN zo@STli|+7~N0+eIQ|p0m>Da5~XGe{ntPNBZX*+}19h5tqtM8Vp{%)(aG*4feh zpG|61{J8C$07~$eWM+ny#9Xp8EM?w05;+SnYAp~IK_X~4l&Un^24{3qo8!fp16A!_ zl15>Y#x)QR%5ILsJ{p!F`_Uoi*GsgS&*$ss&mQHLFEgqMcW!8g1(tNI4ynF)gEuGo6Mh+`oWc_Oct^_lUDf~&y2 z5r-{LB-c-zxpWm41@Qu)aRFr7pU@0N?$-Kn!G6@Ue+vw^sm6e*zjWho&0_K2z^jp= zQ9^8aI+q4L_SVtLN4}IkD+Y%9l4;*!TcmxR3#Ul6?C!4vucVKx<`v>TlNtY*a_v&r<8)eN3Du_~ z?^iB@xL0rq_G&JYQDjfB#FcnYNZOS?B=_KchPe)GsKA_sDUInD!zf2c_FvCF{&|=F6aT3Z@DJOs)~_z(clMw$YSp)7 z&6LNmi#5#%&DXDQJsD=mpODX<-N$K8Q@rC}Ul&KWvs*bH>7m7U{diE*W>_Di!WQ=c zG?(d|q8ECLPp$N?o7@*Y_c!0$XLR@X3YMJl<*m9C2=6#qy;=3ycb$R)w_y@kBfgSW z&W(P$$&q~R$waXPS6iAxnkZg8EYX}+PVDYVY37ms0Qb-#PC(|kJ08}saJ@SQ{1V5O zaKbYSe9Sg5{EJ(mHUHQ|!G>2`#_-5$t?lF3twY_f4w;7aDf@>+2QmokJ;hdS|Dk4D{Ak%^|e$O43=Hq++qd9O6!=qOzpo$%zN1#@_z% zXC4czA`2w22>`-?Bm19gd*~ecdi6H3b$Mh94BH8X}yJctF%EE&*6 zv>Ocq4P9&q8-}%HtQokDJ~@D_-(xIdgt$y`@ZLm*FHP{OePQSNG0QuyX)8aD1@xYG z(nGsU7LVPJU#=N>8pajCichTU&A+OWKjs%tK9|voCCPgfk;BvCT!Oa}SH#E}WH@@y z(du19d)6ac1Au4J6$sE6{QV;SvV}UKDj&WB1*0)w2K`(%63C6;S44#all7%RfSaJ! z?A#ALdWWlZyRJJBOXZNR$ln}_i5LB-uMliwh^~zhoBrMp7{JpC0 zOP?!~&I`1d75)1s+2go;l)UaeaBU;=4`aD8)I0F}zZIXpMO;8IL{FK&n42n_QN&Qt zaOL5;_ByZ-b~29{#Zgi4wuqP#@fqFU*04RS!!bW$uc?brqn4N^q&x3`iguC4L%>nT z`nS#hh7RmzEjCcxf|8|b$?(s$22tX?B#Q0lviJsCtluEArO&uAfOQGewA&zQPxwXE z2=jq+uw&1l+HW^WiK51p(&8~z(iu%cG~T_MbEx>pDGPf)pmncUoVmCmmmWx2rO3DGKC5pGG%0;PyS7SZeg zMfDunYUSL+J#UuQ30GFrv|85Vj8B$s;RV;5Mf;EqSKSOT&^5bM$nBwjcnht#^_Oy zsP3rrrp7WhybVMUdq{_x+MT=0t^AdS{DS-o}GnP?PSVz zkwokVITyeoZ7Ai;3skS{PSvYXPEe==hnhWmOjP#`c>nIv4>llU%(<=k8w4Xvxv3Fy zvSAJ)bWE_@Q_n6|;z8S@J3iGRA-35yc%V|aWZLM4*->6&UOu^X*fP1~ zkN)f>4#Q@mns?{og-9e6-Uqy@gLjL4^B9c*u^h1J5_c`8waK;7yS4D*5qs3Fw_JS67RK>+B3hwNYoIQ5}TH6y~$P+RE<10XK z;guoxXS#x`Q|`*bt9_EY4sV5PS2_FuGG} z`WUeQDcJt?9uMoMbIc%;EwdpVF4{YQUFY>LR?Yz4Uub4^x9Z#38 zn58qX?%1>49HLDXaiVEnOKgo!T9ZFR@W<~2`_lMx}K{LJYJU66~jwY0Y zq#ATlQ%etud?3q041y?~Ytn4Pph~jQeZslvl}fwRw6DBFpZ>kxtCBM zIt@zduas7;pJysAD{`7GtXRy5Gfp2j5+Lq?Y6llTeFZ+N9umm5QEo5z(FCz ziQ$#`&0tfi68YQ}LXj8C-On8h@rcJ~7r2SpR3GN?s2i1z-*96&(dFCiycqI)gwBoz zZSC%Q4-A4+*c|XlZAn*W+lo1y=#J6Qtw?J+0N7jc`_G-*KrS$HiPEDVNLd1<{LW>t zq?yf$CJKqtMN`JQ7B8JKb>s>?)PZ0tHj{c%iape47MAa@?p@wCRPSvfHMFY-mtBv! zuy34sMsZwkkP~NQ0qqMoy$NMQN99gc-s_L8i+o#y7`Bv;e0F>4H4BFLQ*c;-%uU&q z!HvSbl?B;=$_wx$9?5{TQ>mOnLK$vz4ld4bY>aKE1o5Ae^V06W}?K+3x~-(k##p^)@Gnq*dj;jZamF3Hm^St_0CtNvyCX$P-f%j z*MJD=`Vo(MW3ec6(vO`jg8_8%NOx}7=IQGT=g3#!poFy}Y6(b2Hes|w7Nn4ji%EQf zB^SAbgU`4#vY@m&iNyB%aqSky(n~Wbo-(#1i89VVL>hyOr!_G$e=xoh&a(xP<70F@ zBO``e(ALF;r3S~HNn?RfdP^p-v^_wah$pJ}2s8sy=aPlo0~qe?9Ux<$nV^{9W@seN zfuj8BBPY2#GlsS&Qf;x?b2@0j&DY0xS$yziuT6mK)M5dTB(gFk!*J7uNhVBnF=TH{ zPjiVYnu1~$eia1u8Bk^>1_XM{W}dgao~6g>T9>(Ll4dAtX8V%LRJazmyc;UX?5qyI z+{dpgvl8uoq>=&M`~L;*%$PjRKjE9e;#VHpz;La&iQ|(^OouTW#cx8 zd+Jec->!)1U(5FY@d@+!=v2Cgt}ycF=ABIChHWFXVomm*GEy}07kB=!GsNdF3^6h_ z%kmPVE4Woj{((Cz%_xb+q&j;!<_`=bymRvjC!?=CXYh@%qh<>Z4_C^5-gCDpgBOup zmY-lUK_zKeZKXBa6GxC0-e-CBG-s2}1kNpY|Ld6TfSv@FD zy1`ji4-7%#r%oDzuz1(=XNX@o&J|Z}Jo~O{ia^pA3>T+Q*Ud)M)jdK_2be35)?e#{ z6MNgovvb|SDYbk~+qRRB|89w!EhHuDSJyGVd`W8d%*&cpd`Jz7OSy968G>eW6LfJS zI$sL4bYp+o!+YK9f*iaZ!zkR%{JcH^w?Msc^uISRePHCiuKXp^yo#0;{o+ZG$wC^B zbdxp2VAHQp076pL;oMDo4>ELDe4p*+n0(p4+P)r=}MGrYD~7-7kr*+cMxywYUobu8b+twlGwv+=luf2AH{| zv&K502OwN zV|~UR&J5R-%cHDX2YfQZYxQaLd@Qx zN5@46$U;CXR!kY}IB7iVvresL?@IWF2R#QVvqy>!V}bQWr+kM^GbP0Kvc&qXU;`Xy zrKhClB$uMm>CAavqPRB10XQl`HCNn^8u~gyf#jdYttunJWq~22MP|)HWR`TYQd4l* zacJ4XC6Q(hP&~wbW+>N@VA+g4%#VdP9d2W8$%Q@4kZxo@r%<*jfwOlLhVJO^G^FGpTwbTmz?M%1;4$Wz-98 z@!J>B_|K_EkQ~+D4~-DK^ojcmF3KNrSi12`xm+HSn@r9s=2WBHe@fO$+uTXrWjE$K z5?IvHTW4KKgXr*?sBfSY?D8zU_$Ky~oYDT|2YLOVJz#aF!)}PyDhrTpi(OJofJwbJ3|A-QPU1B>KQYP;tVm;}?u>%^$?!6(i@4&=q4%nmJcEjel#9{=DRy#{+2$5wJlo<%O|~ z`Mp}8GT|v;XNSbvENs&vY!feBHJPWD62593vHBK$iZ@(8|6_r&OqQFmu{V5Gs=dXH zbChTSG}#wUYU=lFJ%wma0hCX6`7>xqPbyf26v8zZNI5R>LK%ciGsOF2V*PwM3g9%Q z=Y`4t_)lz+u4uBy1xY>1D8KHC8(sq_7rBW_&NOxTk)%p@PrQk#A9V5!-P44$9ne}v z&m)?BCoG^#*zDGmC1T5UUjsPO^LQ%>Cxna8H=1~u^B&)AO*}dQ#5MhWE+6-{{+!;J z`rA2H8cxY})AIM*kep-6c?qlkVmOyO-@3!1ZrjhLX4}_dh^7d#r2@P2yv2cw%^a`x zVb!jTRjGqqmi2MdZTgcvL|*}mcf!_Z;<1Am%ABv?GLPb10bhY6@04CU3=;=ar9ofk z&%dDo=RfB+Pf7v96%jQEx+e&_Wpql8ni1X^(q0O6YCfSa>=dA8KB6zDK2LFKz2X$; z>}%pfMw`Q>hw_Y)8Iv(7kEq|j-(+WfbNP#9W^G^Phi|8p8o?$ujB>z_D%W{z!!Ah#x z$f)Ik$NSW=?lk%EEe6%)0lv*;2|2PXu?uZYrJ;Ilf>ckztfHbV7hl_l*A~usNQ-*+ z_eq6@!MBL0-?~)8xa*H$*o$AdiK((^vb&aO^oo+cw1md5f^zP5Q(2+)leUe`IFJbl z;Xlf7>jlIy#*5ajn(j~F%`YS4-+F=}7sIwby}E{<3Xve?PW)Bx6k0gsV79j4~<(g`p;!p51#mi^DoGR z@r#h`K*%|G-U`>2D;LX49|7v{5i?)ER>JwD_e<{Yrm+dbv#j5{Fix)z8fvVi`hJxS{m$mL*`KbE0}>( zgR2_1)o}LGz{0spm-Nl#sYW?Ck17W>SZXh5HP-WOD^O=s=@RMc9V{GJ_UqQ*@s@If zXoGA6Kf?Z+k(z;;zp*AGJ5=6`{kSveb1+kt~c zR9?rGAy2f{)pNL6Mfm;8rs-=yp+`j7F>ZvrG6NBa^r9U&4s5$PPL{#s(rG3n*Nl9A zfvig3p@`%yHrr?)qc%rEas+uO=mPacuis<;3sY>s(oss+J#5Bk!r0Q+5lxVHKBQ}+FLX;p08$50^i!dI4%+#_`7krh(liyJQt7gN zt=U?>jm)<7;Z$Y(3#0Y2;kQ)#Qz`reIh~8WN@e+(S$87M46^(|7RCG+=}Be@`LFCx ztRV}~dU38M&6BdT1AXS(W8E=>C`v0QUmOKaJ7K%ShJHIy}NO)Dopa+Y1z zRr4qQ&-`vz5)G zm1|H;J>zaY!+uWw>_K<7w>o^iUUy8r2P3{oD!1qlpD0-LW&3Pcy{A3wXR^5$TFj|8 z#R&A&o5k2)|QD~q$vIkp5)EO~3nM<3y$`ZL}ql%@BG)@t80n$5Q9H-$*0s;nSCfW*@ zl9qQ9v0jFlcatZk75`dITWBz&uSc_3UvRZ8;pMv3yDY)N z)F9mVzA2L~Bct{GE^PGML)QhaVxogR!9++vrs)9%gAo#xbs4^9!_TE_HJ|56!M=IV7znM-norh-P4ocVH&^(B4P* zc-V?ura;F|sA;l}`!L8hlbo0(Q8|Z~Ht&W6z?DX0T1@a5glLP&2`$MM%j7{bdN(pV zWnkrvT>We=Z_2zJj72wgv093Z)>`S4t;AZY@_Kq~Xi&eJkzZnCLq)=yfaO74ezx8jfEf6I*XSODN8s zrs0)@WlWdW8Vc-M8o}Cs%y#AyPR5?^2be>tp&Ew@MkS2~>?c**I-G#p>fVqC8V63F zRm#w$NW_8`y(Vj<@y-2BEqar3B_d6y28j3G4l{8w=RIN5n4zJymuKZwwBS3Sb`SMa zi7^fZm#A9zs-fx}Cr>kkbgNp6HHX_A$K7C~b`KI$^;zF=8|qo=a+npyw^9C}+U&bp zxdvx@R~*VoJcYx|nmP^MZwm7oZ7(d14Qhf*YRh@~rp!y7+WBRP##gBa8zoDHZ04u-S5ME-R-bZI` zGbJt@m}dg}5X4IOt&UrTT7^>6He10%cb;!1TN;-u{q0iBl4!xw`X(`aO(!M$`EF6T zZpo84T10uf5T_!AzoZm}HB6c#a&8vTTmMJVj3BW+K=V{#D04a?ij!G%CkEyyrkwa> zPjgHn9*j(o&rmX(|KV|^TlDwOx14LT#m zDAlR+rg_%-juQ9M35HzE*-7wk?QuWgqw>6+fSE1~-sYP4%{A!PTI2#7?bBEigDqy_I*I;S8l+XToXR%4prInff zNHDT_;e_rSvo_Z=%R*jQp;pvrM4@Xl!Q2SDBT-Fq;H?0HdVoKVt{=&Smf{Ut+3iT~ z@CG5~Uaa{mn=qxd>hyfEmxcl#83p^_;`0NQlAWBs4u3uCrVD=?@LC=5uGR#MKlFxc z+ch@!%WMc*0Sye##0UKqbk|wHpSJ#60@v7(pV>^?F;LHmzrP4JOrO@w`rk0#sZ;U0 z{ZD)RE#@mzhx#l)w3n@stlL6m*=tuK8&$AC*)HHReuc<#lO0!2ka`uJDm(z>tAv7&(QAnOdu94;rFB`~2t**uElth6pk}%FJUdOIW@J{OC@& zzxKWJw;`NDrJ=0)D|jj`Eb4(O{%7}CRiBXj9uM84Y($b7A=5_f1CxUF7SzqErCoTl zq7)eoP5so?V8`3oAaUAA#gjNwa(eNc0g_9`-ybrgGsXJhI^D*IwH+tv1-MAPP^V!w zvQuawn*jB1s4@}TLw!`KqDTlpbIdbm+nfI;TA3YZ5b87-6n>Gr;|zE6p(90oTd+o4 z#iu0a*ZJiq!bK-Od5~T6G+g}*y0%=R6!9-0T_K8lrJR7Hy&JP{vJX784z3q$-8t!V zwyVm^^C5=15%Mh*E7C$tMvW4c*NAHBri~EC7;|tJItkAemp8$2^C?xbB2`URM6^~# z>sqt|5nfTuu1MS}S03BwmDG>b_gLX-<=DG~rlKYLj6kK};c%4~++h46@xb7kYbVyZ zns=;Z^=+3Cbm@lu&7JlKiZ3py=Takw+V*m(g-mCcrQz$;h??g4c;)K8`*hM~o*t*Z zM;EiMX2p~$1H=+j>{7Eki*-4EKQPZN?x>+2sdVKlYSLG8M75G05C64y2ZtkMoR0(! z+UXnwpL5gDlo=7ydm0rmCotWU{7z5si|l&IgFh;@mR4OOL#jc}rKHf9i-vt=MZ+Il z9&2_z%%Y0N-}u2OdBuQaH-ERCGMz)0qSr!UR=U#aF>Xs%&b%mh)2NFgG&Vbzr@t#i za1}Uk6(Hd3+a;Tr9I4>88Q9P3vcS~OEZJ!8jWO)X`c_e2s)4)NJ*yfWOw)J~ok&AygN)&nT2p7_O33MZ z$4#6xy;?P6aC)TUhZXg7fcd{(mh;XOR?unjhbSb@Ep2NyR&9B71}@HVeTCoVU_Q?R z)|6t{#A?yi4JEM3TY$9e*$duPl{g6s8&Cqs+z$&!ZnpyUt6*}EnjBWxGlJ%}pmKv>! zn@Nl@W#JshMjD)i#;J0{qpZ~ABzwxlFnd{ab&YD?Q4(5?OY^abv1&hdC?fPgYgrdzOG$g+P}n*nR`6txCY04pis58{`HrzalH*6tfYaI(AJ=m z=qVg2JYLt^ruq3u`9#2z#PJJmvTETCMVjgj2A=v2NHz(wB&z(51?u;3oY7Nm@XpQ8 zO?xmRRWYs)3sv1{BXgywS!ht&4KRqRL7Yb_=lN$_Rn7N4H@U@1b~oL4*Zy7M|8Vw> z(UnG9pKn!CVa2v>+qP}(*k+|-+qP|U$Ei3K+qQZ0o^yJPd(Q2?-Tm&d#(qBSvA@i@ z=CkIS|NoDvS#!|JT^9gsl^VjP+8CfjwcBQKQR1Jkjzv%>0{x4P~(Rm zac309lJZWqMaHOjN6Nbwd=6`i2%%X=%j3>9OxEOj=4+5DD&~CT+a8F*Z^th#=g^uz zsLiL-f=FN&k%aGzV%Dv$iDFZ8wbj_%P%1?E!IgZm;|K8tA?YCA7v*t#X6 ziiKNhv?}@g>r+iYoS7@wIbABNS=RPWq9>M({lZADD>K&MGg4(+H`&|{evPz$!O=b6 z#Mr`gZsoNa5Ey&uUE_N&I%7qYw`Gucfj$kCt(Q#~D*EODWnloRpGS(BB-1$fHR1cg1191=cB8M)+PL}8s27XJX; z3RX!Iqqng1reVMAUoxaeSQMgNTYtJgUW%eP<&>E=Me}pZ6;ZC8#^Uuw= z_7WJkP0Oy~NBW{w6q5e3akk11RjZxZ&U^9aNS>9cvvj*9z%O0P&-}vE-5Gq-RRR{V zR;KrH_)T(cNWRr`dh_~iaBWDxIXdbBPcZM0k1BS31`3>R>RX^|4*zISOy0py8jUy& zMad5#8JHYc%C#s!S}L;h#jX zw~?KVH-%;qAp=Uw@+}&oHpnhW2#PNw@9jUD65yS9DqvrwE%fKNZ$$r_()O=Tq1vev zvMS0at!({jZDPC-BWfN+3`tQGbT^1nE>C46*fA(2{5qL*J?S!R2R4O*0-k^AZ+LGM z++hggVa#rZf}*h_4q{^FUk+l=5N{Vfzn?lXnj2XdT;kgv*PNzq-6nY(dOlxwr@lmx z0tl=}i8H7JEY8WoL#|--5OtvIOs-T*MFwsNURUA%>H*W!#K|TIlt)I(6$G?_%+N5H zUC<9;ib0hO$;t*}wJ3XlGjy^u0-V;Jat2%odj%RFp|{vTgTvFUhsG;P0lbdj2pw5vtS!5lFRKDI*!!MFGr zI9ZdkN@eE-6xIy78L_J3WFd>RLXaFR3CIh~$-RG4TCDBn)*^rS>NV)Tz{CiTF3frA zd!u}VQmUT!sW_OerMH~%N&$}>8;mtiC|@Yzj1rRzI|Gjre~!(fSO@U-|H0+`OL?S8 zo1RurON`3y!Y-E_JBA%-@zC0tQC8EIEYap^^bEHzF1@57^zq4(5m~?#jacnkVL*N# z70jT;NVY~$SrM8iC!`wIt#*xph8Ty@r*e&@m%?xqN)lG`f$;@T0#>DGN@S)Fz?y#Vh!PV>Vgc<^i@*`S+SSN|f| zthJG&$zMgUiI}L55%0j(nG;u3?VxNZIAED+xS`tZRED=)v8_7MGpk?2O-jZlBp;uU zf$DIH5{Nc**y??A(HjIa9H7UTq_9MORq0=g!g?Gsxc8Z55Tm3bcPxY73Xyf377 z^i2UMUE^)2Uw@~oH=yD}$@2}25k<<8QJ{9E@>x3!N@~UQ(8j@eyd#Ae-uo~@Oi+tH zuXNLR^dOzEUPfAKvfkE7cxp^eR-iI09;X(gyL18gP>RE25IfqkRP67vW-z6%S6|W} znJUre`MUjyJmTK4-fws;v8jkfhhi6(jym`jWvO|HClW4tcQAB7Ny@8gFt)^jgrr>G z)*vFFJ7{=@uslc_m&KEhVq6JYPCPT4AT?<&m$5-k)_rW#Ks+J>glw)t^BAvxGrBNY&ucR2L{_A;K7}-&k;KfjBqh zAcp!yM1>|u`~C|39~l~iZ+hZ?qo>d831~u+tWuc+PtJ|c+K`t5N-?{jUN76qERFvd zZpxP~E2=H>MTXQciDUL`sq=`){9s#U$fyv$_@3{8;4~8g#vyd}8aAX@*~?hDo$Pb8rKOcS7jc;G-hktyqzP|q_-d_OQ zFZBa}9`rx1tW;R3hm^jqtjfPi5cB`3=+ z+a>SgS{M1~Bffsm_tx+d$-BP!nTT;oojz3y-8lzbc9yloY;MQ2xbaGzi!p#4-6PA| zB16sg_kaf}>#EfqRN>-*_3+DO)C3)FS987?Ia3Tz+NssLK_)j3)hC#eRpFlyQW6*)8ryO1Ele_PD#xB+LBqWJK^9~he2JY< zsgl=YVLI9XVO_C)HVj7-9Kk=AXQkzWa4*y*9FJCQT@K`90z((Q#a-`)356H=+$?_- zt84cnL`Wn>5jX(r=V@(P(3bqO1M{76Rc1 z36ofBZ2(pPK56_%04)Jr4e*z850ma=k><;jCPHJ~laeM~rWsVE4gu3v)t<6qsRo@PVc_hTgH!o$8i35}@d5c;^R)K#Us;dDO&2a47$|zK1`+s1;)V z2<{O6eaI=N&+%D4bibS611b#uNDAL8Lgj)O=`MowWO_r{0B6{OSCXMulf)j5D~dnL z!Gyt&QAsdZE|^FmGgpGbDpf+k%A}zfL$CwI1_M+)kOIm+^YG}0+lf7}9C zy^%@65cY^0{FgE^&U^94g_`6d93iG3(_U#3q@~umA0CwIaGYy6d){`k5OaPjI939@ z7O1i04CriB8!0hO0c$m{QWflh>m+VqPV1T;T^mGiLHF8S3`$M08G_nbPk?_8m?sP-*T<#oL|(S znubl+6jB2L!D(yvS8sFy%_o0Dd32Mjm#o<<`Zu>#Lu|pvvL~{1FUF6&9m|3sm<%ZN z25Hy098!}W1u4?4#A)dfnv`m1<5iN$q5~(c*vyi!Gi%}8PEASginR4#dNSVjse@Ho z)KLvziA)U80`MSvh;0Bz;gKXQ!pChe;At-9YkZBCFuZFuEgAi=qZM_oCJ|~spq*)s zG)zXUThEGfze1R4_#jA$S-f#0(y!ewckmm@CsxO#_5yEA^4+V zrMVo|P?>O7o#8E;1&0vJ?=Zb+Y~jFS6SLmTI(avg%T3KXBi#WGX-ZUfT<>vmZU8$G ztt&E3OyPMBAsDOgp{SWyTE84F82b)JBr3l~qo4$xvb{}mhRf&^*U z(w?9OGNof$xt}H2Ui&?VtPYVhWe7KXhiXiruD&RpL}h-4v63b!Oo=iYTy`?*8g~fuQ9j&DBFb1)Ix`{KMQN$5e);tr5WS38w4B)L z({IG1>Ryxo_o`=M5D%~Nl^FG3qCfWkgW9DIFcLO*w6g*HlM?nn>=Toe6~D3r;iH+B zSF5HmAMHEpJXMha`~Z7oSQ!>+Rk~W=RdZMMdB01_nJ(c6im%@kS$-J&$2Z?Z2U~3x zM2Ry}c5Y_w+jDm24t`&s&+l7&cqXw!6B=t{{e9;&Qmx1l9dOAwiMT2l^&vbIn22!x zp@z+qs>9~X*U=(g`eGYuOO4tYFvq3jz*#Jyr*1~|FnsGKa(0cZIKHENX|+nfl@BEG z%qHTw*3?mVDVP#P#+w2aCa;ls;_xJ2%G?c`aCtGeKcRlfTS~w$?Ns(o+*q^rY9Bmn zCt_o-J()pPhF1DSq++xy1{4$9Na?ahIZ{A7mu2*e8qMXxBL@IX$E8cnr0_(`Q;y@x z2XU6rI>pf6lehNE`kZ-B3-R$0`^{j0b#)eWH^PjG?O<|GG0L#?sbmb^S%Lu;@!om3 zuROx5w7vD)qA0i~I;T6_f=(sS>DbbpWvDK~l;Umwy}XP3ZKMxe_#UQk#omX=Be!GQ z2@wZUnae``MdW&DPe6CklG+;wQuw9grbj)Xzom#{g=c+}ndeZCI$fn6N8aur6Cu5# z=C7B62yWZ8F;!U$ZQHiXEOQ5@z#Ql5}8sd&UH`Osypwi|4$ z+oTS8!0So&%ewjakKMlq>La1IjpA3JHvTsQ^x}PVf zzI@K!A%4s9i~;+zRMu#Fhq^#4TXVu8*pjX1ZCEg%zo zL=VCkW5Lxb2g<)}lttdT3F~w1s;93Ld?lr^6}>j(aVma!X2Zgp=#0Ak513@73&Ozj zOlIM_Ec?&gL3sH#v=vW`=bbhgb|>^34QWG)XR|SQ7a0cHxI5>?q4Izb4JQV$VL?1F z2+>xy1zhW17jqUJ%iSeO=ETpNU+c#|`RnQiYhAy`vuou@;hhltBJ3AN{5v@Y$fCSR z#la|UTnXc?+88(Qy{i7Wv{&fOMj2i`r1tjPpY6-n1DslXn$kJsO}?0s(Bx3-2f|2y zYC_P=CN%ajgvqpJK0xFqrHf9n3Hu_>IcpJ36!;`BC>ihnsI2q!m)XUx&xtZlD-@0X zHjEmtimW39w)m}}D3-;uRnCmKm#>P_z~zHDJc@qATl4}Mn%IVDZ~|)$+L5G#1S}2; zQZStxO?<}pqSOeS9VUe8pHVtR$ZQjLC=0wrv&CKo5!Gj1!rb9~A*+i-rT)bJ_b3(1 zyRXLx=jl*gM*s?%vA7ruocd7X?*>E&~J~Y7pQj)ab73OdM^h^nZ_KKlI zl8Y{b33cF2<7#!-7HQ41Nm{9S%qurf>~*)D%wQS=hkPQE;PRm%g?R@fP2C$fX|nAR zA7XG>zbzm}IdMuASS9AC0xLWP*O5&w#1(kX6sfS@5xmN17F=gJ(6zvJ`PD)#Z^w4u ziHl@sCcn`L`-;|(v0E1jhE*cVllG|ifK?3#d${NT7ACl%trZQI+F%z5Z2Ph_Ve*OC z*YQ_P8+rG*C~g>Pa)KnUQ_xYLbx8c5J;eTRxjG914k3F2sxy`hU@%$zJ;*{I+)6ms zc=T6kG$ntqn;0}hSGgYb#VtEZ{#s!+Vv_wNhY#L&*oVq7yp9|Mf~;F$!xTvDIXWnR z*D3=#Un1W{8D@T%N>b19Nm@0xdPAzw;1Vgm1@EEnrV?Ak5nrJlO3I~e(U93AGHAg_ z-iAxQEP`6!e=jlPH|%^u4Vy(&%83j6OB^}SD+$WuhcfC$vZ=fU0rF%Hr+F0g$!U_l zAssxxLT4PjW%jkT#x;%Hh7)pyR1C4n&!EG&`iDMdE7BM)OMU(a8&o@KrBe9o{962V ze*N#f1AP6XwV{(!lFFvjoEXB#q#Et8V(6{_0gFP5Y=kibbZj$8o&rK1D~CW9Qt)tt z_Yy?-WRl#))#6>*+~H*6G(NM>neb=Em5g*$NGI2FlomM~A0=WZh&PuE8E;w*L z79wJlK%uh(^ATgR*?lQ0@vMC_bkeD8-3E`Oe^+pN`{ULn*#BbO-63sTNm`UQV#ikBP3gA%dASdG%Dep6{-=#&_E_kDWxnP?JpyYDfh0A7#=ocHgPr_ zDAW-{B$=VCo&Hik3PGuhoip=Yn<~uPK^*I)gn3!VdnhDRs}=F(Yw&bw6{WqV9nN+K zEx>DFgM%X)8ICH|g#jXF`w35u52Mu!x4~hx5B!25bELB0em2(;6z^e;78kKxI}E0s zhzQMQ`zI&L-x87XlgFfRQ5Bzg+bUID?`Zl+bFS71FE%YWHiyk2Pzd;IQrN3FyY#&D zxZS8bAVHqa$+}+$K@3*twDUUlw((LaF5g5|Kp-=ZY3L0r@nJoAVBZClPli?d^zw?* zP$bF`mdFyoe4go~XB*4S=Uw0}V3K+JRCqT+D@un2q=_AL;^&HRiaBO0t!P~2@2v4} z$={Roruq$G0UX8s*QJHnELNH*&5A|%Cou2EPW$y~+P_&~>#nESLlSbyC6mQZd5(`? zo>NBt(sznEm%k>}DhCh;Fod9B%Pc^b z$fEnTwUJ&xs2b_OnIswK9_BQ=hs05IIkK|0+3yye!TVQbdkO7hoct)ZU#9!%fub;OjQGKktfMmu6t%%ouj({SIdyG|8$Nt8 zLek$UjsT!j!_4vGO?;9O*Nw@NL%E|gxwnooEN(eyQ!hWbiC8IP^^6u&FL}vFbI!$$ zz99jVf@iV$HV+KNpYmpH{_b{%vYXJn-5-V_YRijIADK6i`b&f_X&h=ZB_CJ?H{FbE zh$C09U}g$5fdN$l{CUo7n*u+=T8QdVu&MSG6Ra#AK?{uG`?vn?YJ7=#C5g1@4P1AcqjP-JcsXKci{cW&2U%N}1k1Lo1vkE+8IMzSfE z;b?ar+bM$DB*U{&?ORFJ-SWfo44m@Qz!zziz4gb^s;AT8G15ex z$ll>elUtLpZ@6^G^#wu=7!kVg3Ke8LmdkP4!%lQWu*Ec2cQ8zM&n#0{=Az##%2>XfJ~qo?W6K@< zat?J{p`AwOV2cME2r^z&R`VEeQBu8)%tb8SbXy2eI#>1tpE3ic(D1d8{K48vt(wC~kV78@Dtmp+@HuN!V% z5c*vYf6%|56_s?hf^O39@U69c8(jL`gB;VNeg!}H^!;Nd0)GdLe$8DG<}<+`-$T(K zKO)Xo?TTJ6QH%bQ%Jg#}B4@`;?+xd(cx$t(big;%?z3#Ghv&%-{zJTvzVk`{Z8k!G zdy%vie=+DWFb3g^55h*lyg(?Uljg`Ys5$fjoUvOq&qi-85FNGrI$zg&P4CY+9A06S z(U2VcU(YoAEcdn2X*&4l&ZB%!_-D~o0=y_1W>(7iGg17e#A(}=-9e{D^*kRv7=;L- zSKj%PA~sJ=sC5x~_0shSMDI;u+_l*WJx?&)t6Az}wCfd0GCUMx-AWd&LIrlg^C%JL z2I|T|BhN?$m)4e^j?D=VQ1qlfJvcST&(Lz#}#5jkOzl1Q8C0h)X6hUt{nCr61pPMp_`sP04LLBlB=To6Dy1`ZL=#3=dln4A z&j#j+6%`g_%iAAHByKg%U29C=8F@(_UT}6^sD!G%4e!O+??{mAA0gwjHQ)iHj@cUt zBC^vo7hX?rog%m^C$OMgyRp%(1N~*nMMVrI&Qfwb@-1a~iqlqD?21=%u2)jKJSE^8 z;!T~cv}|6i5pRcBn@4DuBhU!&=L64EqUdY&w|4ZQjoD(Dh|9&{Li#-y6AcFfA*`nu zy)a9d=Cw0JgEf7{jT4T+PdTzGBL8HvVC#-ZdnN05IGtDp0yqqVx!^(rS#Z)L&94JT zPao-{=EHt}>$&6tIS512BFGir1>xJi8sp?vKG$PJGvksHh|rR92qAKCjl44%Bb0(^ zx*ID7QYO@ZbTh{`CF_@HCJMdtWU|#7lpNlaY!$gUX2r$=rNAwX)>-yS3z>T_(8H(T zFs^}OL`WzWEL8nyR+4Q7eTH|)GB>GcIpMUyik!)$GaE_5P8x}A=q0#p0q_FQxT@yA zUB*M8_%IMIw6fT6k88w$M1)m`Qe3<{@W+S9nfFjGoLi1$nx@utl}irqV4VH6#da%lo8=9lN>Na% zXY2d_W^&&~!XHq|SuvgTJ*2lA$jW*Snn#(Sg&9RAyc+Fc;_z2Mv<{>xSi~2jK$kfu zPnMw+TLckNiS~(JdB`dKTre5Xf+G{!HaItboVLH*>cw=}!aX=)IqmACThJp$DiP?j zHik~~7nd0ncGt*j4ey}Hn}y-Og49I-#+19m;Hw_XrK=tjb&2IImfvydC>`JT&rkXT zhYm;`8>HN}m7&+GX0ea(CU?i_(NH{z4b9~CXN|GK%!fqk2JLp3OeJTjy3#Hbk7=Fh zy%aun0wT`#(Xax?VC;E|$?~hE?1GACeeT%kT;FJap{86{x_gIJfFGU>-iN*CElW91 zXbB9Q9%Nr2Zglv?UHBmql5h*iE{If%-%A2BZSZ&&c&9yTd$fyM=H98ggn2e3FSUZk z&(JG3s;0eEJb&Y<9CzJKQF}zrakZoypxe)(vLu&M&AxX;_x>W035zD8ec7uH z)X5&GSn8S;rFs_&q!tj>i-nQ1XFNHTUQB(WnJj>ld4ceH3hiwYeXY08zL=sDq!E@H z2{qm{YfI&ZxBa8;$uK*(ah0b%bq5z&+hiht$mAB6CgGnzB&YuDIVajMj9W?gYE(IU zXfE>eQBTlAah7^2j(LbvueMK+xI}KWA^Xd9$*+t;=}`M*!-tX1rsslWV_9PXR`FQn z%Y2K-&S?*kw&V%%^!_QA@{ei*Q%OV;TRK_^^G{NtxEggig+>E=3PLypfDBPX>^0|_ z(*A(QOjGkGZyRBVSM$(X5Rykw8EW6dv=fJ=35M?d%=uAtk z6lI0dNE~5RVc+Q+NuyF$OT00+p4$Ep>c*HOM6)sI1wzZwQlPppsA1+NG{V*+!QK3; z*ayF#$(*2QMq$tYCs^1xM=n0Q9tCM!5gBrBa9IfrX0sbK{_MoEvJCNj}Bq?*Cg)cm8a zY*i%!FE@u8g@=nFYz)Hf>`rfK+HQbk;^Ecb)XTP%fyXHKgo#H?iZ{?krp^44y5_pF zl_U|-j*gXgoCOth)s6%WHz;h9O3OtaDol+ToCR`4Qa{w1^NgffsLuEUIbtYp(5on&Hn<7y+#43- z*Mg=y`^{}e#-dHHn$}pjpm)|cmt?*5>20IT3d8~=MQos;*p7~>{ z_Q#A%0RyaPJ7i)V`_RqIE8u?fo3%w2aNK+;N=`vK&xEdBF$}ZA3Nhp)Ns{SEc>Vy5!5B_#~rFNK3_^6TT%GC>YIN1e3V(g^qceU3cG~zTGwvK6xzm>PgWcZUeh$P{JYzv=s|z5_2^#?94NP z)kEOw+p14GoEffZb>xb{oTCjxS_wOvbT*MDm&Q*VH6-33Db{$y9?hxxWPkX>UV?`z zu1Z#e_8s&M)TWB#=%wT6jg9%pM^hM|Z{yz*DnTN=Ln7&Vu`=FNSrp)|>4gU`C3nhM zm&xQR2j!Ooe@(O_6r%!!qV)Urc+!Vx(kCPv{}{UYf_9u|dz|4?_o)4{fqRW%ORka3 zugYT#OPSa$j$Ee4PZjUrtt(hpJ*U$5!mNqS_RYYnpj?@J*+a=|-w?U2zp=Vlg;p$kd!utLo?e1)YQ@{OWg_O8MF|O_;rT7}`Hf?O%<(yN z109e#GJNeuI!wQe!#}zcE^C`1zNj&n$LSo=RmPDiG9_uNxkOA}#jwsD)6Ka3yG5;I zL9JO&v}YgfxbKPlOp||*>kTI3+G!(SzYq}FjI!{x*sv>(d^E+vkyvUCKln}!5q-76 zKlryc@ONU|t9w5|=3FBnE?z7pCOTRyz4xN9%@Y)D5K`^sTYhSaqv=8DS);va9I*fvM4^2 zhB`Ecf5kpH{I>n9a%a&{5F<`TV8-vXYACjz-h^&6hf76NqU`U+)TG@P68` zD%C;Tw2IWh+R6~w9^t@`+sEDNllgM>qs43a<5$M50r#QW4Bzl=_YRdQVi@$Z558)I z1J|gRPlomzEm54`&VO=)@lzz@NxtrcjK084{|oWWzs;X~U9+oM0Nno7!222wTNOj$ zwZev??*Cyfbo0ATFZ^~ek{J3D@s1(I&rFSsxN>pMx$;9|G2u% z#S@HJ-#r_w({N*Rt6`ho;5sYph4l&?d-#+U-{!{FzLK$Ev|vj!k6Q*ll1T^Q2sll+R zDE$nJnt)y5^_GgE&Py-Xwu@ULc(`dZr9c*4chKm-2x|sw5-%Aa^<^|B@bGR6UR_qV zei>LBNB$qdkt!V~s{>8_j#SwUnbi(GgP|}9;*_34jXboJG+dS*Lc={l?m%GK`HO_x}r?2t46|bwJFAZifof8d@pT6NU>6|K|1D78F zYKn%byfapQqcuNt1xi`v?*PNwdfk=_mYLN{dtrfluf||Rgk2k4+x50qPEVy&A!OaZ zZg782t=FE)*inxdRy%#B0-14fH-?%L*BlvW(*ANC$B+$*nyWv%N-;=&2ABze3&0?5 zn}*^q$FGFeww{e%&Q}C>1VUMoTew0fz6i~zq~rd6r}Dd0s2H_R|8Qe&l__ZW4x?_b z8eid#z8ESJODbFsAc_DtNdpzpBWDghYbVKoG#DNkFo!O)Kb4VqMb47iYAE}ImtS^= zXH=GQ^oku&#-Gb0i7&7&&L6ZRD1n@({5l=r9S}mMf;Os2|;z)A5 zOQyISTv{oElRzBT4q0p=1BHiOOrg7?uo33;WSIaC~Qn5pKYG3;mwv1Ji@B z8rf-XVv?!^#Y0q16ty_oR8-6q$=Zwr7@I+Zg4sb!qM{JyU+Te7b;vkyE4=G?(y14d zI5W1UaESlF(5Jrs&zpmgTqA!0gm2$8N&n9#QvbEx{Bx$~pPNpR7L@lFe(KYA#aM0J zJ`4yMNF4Bukc7lIvhGK7P^>{z?6e=l$fCJh>`{DNE-nd~faR|c6)0+~%ZnT2PY>xZ3bla?egv6AsdhR1E!<$KSi&*6vr zZq<}GTrb(PInL=-lafwwjn$JF4&mp1%-<{Wq9^6IWgKs0U%bOp{ehXl9u=Ve;Pv7Y z_Wivb>zgjl?Nt@W2i~Sy;pSH_QxM2MR0sK4nA}sL)?E_ptESUa^YBg(?c3Kw^@3jx z|A_{S*?Dq%`I`3(4s+Le9F32s3dUB&saMk!=ONhl39 z5mzg+gM=yz%P1?gYaZ)PSslxne&moweLJ80oK6!uDwItQK+!-eGpr+%p6^tFO+jd; znJeUpwz_Ugr8%Ubo>ve=saHynHomD&RT-M0N+|=X4+6d6_UC#Y*b?RMY9AcR*s@F)hesa6f#zSqbpdJ%hjsYgbT2!jAje@?2rRJ zGu)uYR_vI?qFx%~Fe@(|aH*M>NK#jg%p9xZ99|>uLMgxavc{%s3x9Hxwyk_R&S4g? zHHkS*7RYVL0SN)eK9!f8$xaj7pa%ju0K9wl*zL~5^>{W|vz8<$o5NHAxNCFjMW!8! zp=0Co=D3|@|G}Y9?g3J2i`L|<w^SGU*GYX)EXLnnm5Vw-1QShtRfZ&wnUS zceUM|cx|}8r-CRb)vUz!2r76GCZkx4sFe~$TNH+HcAPkZ`8{HqfIEj+dj_6tTA4%& zx*V0~R=tK>%opP=O5iP9nRKlJbf!%@3^-$7QSUmI;Ycq_(&n8Z#?2{(T)|SI}}0JpYUic;Yer z7#M8iik{H!wiSa5TVAm!E7N!u6hQLlq-0KUuB=odMV>MQN+me=IF{Cj-Fi75^8|Kl zt^%L3{mG+zr&4X-5q$Cmw!b5TXw4eJWZ*Whn#PzYRk@K&@X+waji$;;uZ--=r1$*= zQ|tVZ!lsggTfHehSKNNPpocnAM%l|<(qD*})?G@y@tqMhZuc+x&|p-0 z+yog@h>f5sf{znh#w2$~zUAy57MXXk#{z7+PQ|E8It%j*HE|47@`3s5oN!>S)545N zb8!O&0sJf&j?)qzD=6caQ%U&a8E|8^53`U~zFY_ID(nEMT%-1d?el}Sy3wKo8s`Fs6t&?S4cEh(+Qc3bLR}P@>Oj$a2x`M2>zG`V}XkF zX4T~^Wn9Q{*hIWS*F=Gk>WHx-6hP+Ylarh z@;41M1s!XZX=f9AxnY7}^W^WO$3z@Tf?b#)XN#1scIOej zFHYq$xh~fQ@ZJBO*~&=@jU43I^kd$kBG8B$~Zxc)iXva~C#E<)hE59YFmCR@m(;5W>-M&WQg@NGQ7DnROaK{YPQArc~ z3sy~bV^3b;BgJG{c~?9}!aVxG+BTMjY$4KhacO%Oa|Ic z5@b{1*AY=@zug3~wK3gy?E|1k_O^4x&kYVT z(@4_c_+r{w5S%>4?4*FHzx$_&f72B+QAsIq451s|lj~bq4&v3_pmjTOOljYL9Kq`& zRR+#RBT{E6sct!zcR3Q+kjJE!jrkcTiHFcE$~5#@RL<|)wuz^BB^7T_>x$M-;fx+d zReL}HWU$dlL(eX4Dpt#_ANX)?+)nSkM-v0KUN9erviwOT8bFl3zp2K-5l_UT~XzCB>L zvy?)P&j9A-T*0V!Y*@5-MzGt6K?0lleulKH93-3G8re!t*0I4~zN2T=25A$`YC0$i z1(p1CAeXW4r1RU3t;79GZVm~`3}14gxW~mEby_^VxuWKG;r=#&a?MV5O@P=jhXMm zQn2aF&V$cY+&t;U28)>@yR0WPilz+cV~A5_c+76Sj+!w?qmum8v}tSLXurTUIr=33 z7V1GxcRn=TGVu0rDOx*uK&yU-$hEm#8&nVmT4p90-nYohj{P!AWnt<#!<8}B8?C(K zNcF9%&UW!F+ZUXH+z@=$L;bZRLG@mf4VHFkJt4V>)ucn^qIoYuI$7WJ>rFc0rHRfU zYrXZbQWST!KP*THQcro{Axo>3=@KGD(gh^q<=Z|v$g`}?wYfpa+>n7>kT^FGz7p1- zhL!>{sGgW)Q;YXq4%F7;C4RA@^uuN>?y`}XrPP~nCymo(`%!h`xY4I^T3J+;KJME0 zHZ=(686>#VxSBWnO@q>KwGzfNUwc#mTZbjea0-K16Q~IIlP-WV*O8mL2<8!1MU@)> zwS-tSU~NIfCSxRDsMxo0tOF0$+|ytUZVZHJ?HaBh6Rd>VCU>zH<1!z+`FUtT>aD8{m%nq})k#M_cEQ;fq$EMvqDasuCTF2_6_jlnfF_9BvS#*hu z!wac?G;$7Y)uv1vkL78kC_Pe#2U%h=W#R!sFvZYaKu=9IskWFtG=~@1{P!`wDhA4? zR4sIbD)}*Q!*1Zq)Xf3XU( zWo79E@J-(^rUUv^)DjKKDfvY1`Czg-lXn;^hjv8;Dxm+dZi)-C@rYeQE9AFEdE)i= zJKBTAjnBtH9<9LBsdh>hE>XvNbn@%08GTQ|Vh5NP-c z*8cMTG3Aav6SM1adRYQXed^mAVVk$4h86q53uL!fY{A+sp~ELe)g#9M4h>!H1$pkj z?r#URy1}GStNTJ_5VAIJ+o5Rsl39~i+Y(>kD-1ZjOD(QCYWDhPbk1z+f}-fy$-bXnSC zZX1KW@k?wo)s1N&DYk=w{f zQ;7-xBtTM;Xzkfh|1_!|kcQFS;a$&qY);ZM_!+fYR}At#-bszGAii;_;vR0j#cG2q zyjx+;#mdPz(obZkslZ|9=N9fR|G0+?Oar-`Ita2!iYB^P9q9^iWOuhhzP#lnmFe^f z9jnID=U`p#0HdBOh6Z;XxSt|n@9G|rY2NJFaKC%4*p=8pfxq}+r&pLa;m4&Yp3B=5KhWQ#Tp5MJJPbhW!$q%-;TiYZV4cfiQUhkSVU{hr2?5^u&GLm;h>GYlj+&TLg>YDmZ z@0rTI-s*HushYWjiDvgmEsqU+*9aS~$lZkTg+%Vu)q#1#l6f~amZuqJxR`CW^8)3c zaLxp&lEM01A`QceJq1lZpA+1RDK{N)TD-92p8b5kMr3`Q&%Ez~Cs|Cd0#Cz&Q?uas zJ|!Lai>J~^kqMV--ea`SbPIZ}WVxLLT)aL340E44=$Pvb;RM9Qb`(H#STI9-cc~tzD1F8bEAIKcfm*6?bsad6 z)NnL&@xmJHo}9+6!_jr|NzP7-lfb%oZp>4!pgNrYl=)}F?axg{*|AoKn~d7NDJez8 zgA61jG_;xf$)=Ff(fc$*Uz9)ee(zc^Va*U7elg%OdKHN>YcIK! zs!Y{%8LmNhc_-!LwOcY4G6O7$e8pJThO&Dr@vP*Q8^{8vjn11c)uP)Q4Q8*fald35 z-B4NKLc3z7z_l?e|72z5oPWhD91Q5Ly;%&E@Z0`6H!X^dMpN}Sa1!0t$x3z$p*Iut zp9Mo}-;s6K+TtlM8P&ErWp$`6-;s10s-EhP{m8SSU;H-u@y5qcMps~Qd(7B$Gk-PP z?d0OvH1h-Im$%428JY&e5{q?63Tvx6O4O9Eq)}zlvW5jhmr7I4skX3PexPSZwWaL{ z(&_WtW1*SM@ReiXxTW5LLPjd0`^29KJFTGFzsoVmD#wrZ4&@hFuo?+9dKa#ZyTH=h zzT3CP+^y#Vtkz3i7qIo3`QegzFctYW!loJm=cw>{+Pn zmgiq0&G#iOcoUvM95?mUrp}CVHD|9;@Y3ym!XZOrk~xZlw8hq;xe*)er^YM`1uM5V z8*M{k=k96R>=~Q` z8b}50h7xt0PhjjCRQh1>+Ovqj`nlTUi(Q{KynrZ9EKSOH->A4*yBU5H*?W;6=c3_~ zJApzLap%Bi*VFr}Xtl(s@xAz7NqhnY6%RBe52-fHB&UmtCc!Xok7kSWF#QaCR0*Rs zi^1M!Gy|qZyw@xj&n%zui7`P_gU0L{#O+U{(-tsElY+>LiSs4-LT;*G1g~R-0=A4s)pVwqfWy1cDP7}wmP@pz1L^@oM9kZORvQfHOU*_)hF1ZN)qc1u zfsNwF!pGZ4puav0$43eLY;ej&hyPP${@w1>XFb40B5JJ!dMeR%^&u6i5c8vt-p`v2 z35m2pNz8X2_KH3YiKFD9Vl>7~4``Nn?}I-n9zDrK@Wxt);i0?=$&J13iTe&}DUZd) zy^u@%J`$-;g;E#CYe?6Ht6X2V9S8ZnxUde7!7_n|UI~n#(bFh^kem;jx()S3$o%Z zVv3;8(xWuDzeT&xkzR1Hhw24{bhke2;3Lo~crcF~Wv$CCAJOte6JK40L7?b94t z@MD7bdwcwSg17>hApR#Y|%Lt}5pC#5P6f4iR z3SVKdR1p{;@i_LGaiLY z(a*N-?t2Q(0f%r`rP&CZyRM{1i7QBl?SKNlzEV^Ewvx-Ui!aWep;pShTgL09G5^?8 zbKYj{vkUaAR>rrr0ft>uq60s%xWpd#PA>1ah(HBO3@KGqDOEiIEpUt4&hokzjrpFS z-vPGT+5np_WYu)!sti(&;(hv8yyCBBu0wOo*Kxb=Yt%QkZM)_)qK}A#;T-U$N4=Vz z-gXU8`}8EoHYS~{mq{!wB26vUEHZs=?HMesrv*DWQ9nr7P1M;;9|T7cgb4K~vV^0X1!Hb*0wWd*>9& zB$J|fJ^KB#pTHLqW^X~4VZ4Oma)OuAsRBAL1@P~=hNV}oF-lG1VBhG34+S&@8d3Mt z6Vf-vPUu#IUatB|=aFSh*xw{dTBI?CyQR&eQe4>>lSdO-JOJYMQy4LIEV>e*qRjXu zeq1YKYstqri|*!#B+hf$>NZ>|(jr4TjjYE_<1G3p@f9z4DK|+JzSO~ zq3LEy6Az=n@f?=`+$UbF4}*plDlfmAFqJKT6CU1nGw7P{-3NHLmC;S?UuheQSaT9h z7`8Qd&`}Z|@ElxbTqD#K;%G|AYYHDgi?V)8%q30eZhu=FA7;_JSJ#v_WFj53j-|(@ zN--}hXcLJl%+?u~i&3do&0)|8`Amm#E1v^pDdIU{MO_vDf^hE%B5Ft#W3Pq zBBgPR_4+OOrl3JRN5g~ChwXCq%xf{x^Gz`_CY4+-dnGmczseT!kPded7Deu?6Gfcv5#!GisgidVYUxK&E8vh34FAXEfz6$o8jL3JK^YW#n0W+16-Zx;MnC zL7R~#$?d0z0SRwR$T}m5{6c$}2uJRf80sPy{Ux??mh+XFcpyT-JjwDqw`w!_hN7e? zLM~P-xOTjqH~UDT-bk5O!*?_Jpl`I~fiR4|$5xhIHl38uGQ3znid=)IO(AbQi$Gji zj-8h}lPYatIo9uV=;X^f#< zHzpdPt&)hrv@cSH`(N{U`;z1uG{c*2I_gS5o+GD?3OUk2t zxHqoe$nAG>tW$j4x5RRzhdOK8m(mDwfNV%_�pg3 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 W2Z_#toDj(AA0TR>3Zxi}zWfQRn}!7d literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..335ed8cc8809300fc8a58f96c239b17aeca7c921 GIT binary patch literal 567 zcmaKpO;5r=5Qg6oD2OPC-{0s-J<#YCW5SoFNd+R}ZAS{+WcNhpau!J*`5zYo- zsn}?kM!DEB>b15}A!N;gcoDiI+@9VHeC75E2^sm%DpZy#iO-^hUlduT-d&nYqh{ zou#mXRl@%NGW_s&4E4@H+5y+aZ}JoC{M4Ed_oXAnkgb3-%<=F64O@sJ#^cqP<`8F2 zVE%`b%nLJ|VqTo#CFV3TKl#hd*+2I@7w>jXzMxcId#{+r>mZxw%>1NfB+NC!h3&nbMJTG7ytbC*WUn~!sk)EfosiZ z!iXSwK}H1`lQAB_bs0CJh~QcT6M|1hFcn1%?~9M=C~o2d@j26iTbPycVKZ*yj*#4q z65}KBQU#e4q##I95KZXalQAzr&W{h@of;UH5X&#B57bOaEzf5rZBsAL_ep5Y8fD8? z%l5Qds%jFV1+`R~Qw#TVMcOWFbJM!EEa7P0Fy}LBMJ+67nSx;!4I*V-e$!PVSmd5w z)~yANrqV45ZG{E;qMxY+Q&Wo;r8x;r=c#00lyD}oJ)j2MbWckNWsM?(ZOiLrZLGR9 zrK+2 zZB}Vit$0pa=QTT9Q@f5t_xAK8v|C!ac)e6*Stc~ATCy2e!Y{B|oj#GXQrTp6__aoC zKWB_XBV&QRw5o-IX0ZTht1+<3nDehC0te?snj}>QL^}G!fn2 zEuaIYsXlTrJ2oS^KS&5CW(S2~V0MuGOytCy)g}#VrfHaL#H3L*3)+w_8r!i}Tdz?k z#Vjl6!jOVE4k(uVSlgKRJ;RLWE}x4l(6LDLsN3QAvT6z8ee@_Op-0A&f-(#R6=Y<5 ztl(YH#aliR*A9UUOThyyi=-b4o73X;NRUqi`Bad{f;>_18Mw6V8|k<`mauC>#HBQr z-K}X-D;1_B;e=mzw~et^6|pNE`q8zKiP(mFR_IwR7fnMiW~#Pc%H$2+A&CKX`M_^O z@9XA~Xe025rd8IuF5$3Gc{U#)3B9l1Bp-JixlSMO+S(uEvfEYePSe^$$(75RnJuZ7 zrBNOjACd4{?;Z>b*Wa-2=IyE3)eDV7Y&6}w`(n*5HEu7evwjLTHk;GZSl#;ERZlmp z?_7ga!|Kk}xH2&@KEX54#6P$|7zgks4uN~cuK;BJ2Saby~6b8s*3Q1}Otz;|M@iW?Pre8iwQqumdm&0>}(l4JPGM0XM;&++_Q^NKa z>wBRhWJ4em)7{Wzd$0giBzmv)yrpIu- zRK%;7RuV*Ux)A;cy)w>>$T<5S1wnEd=O{sdPia_2-`{j05%_{vfvcjX)NN0`Ky2nm z>`JYoV+Ff6W+v+Vew8zks|lffJ%o0Kc!_8Nwf_~UdwfuD5Otz1s#pYpI`9hAy*{Y7 zh&o#r)g8d|$i4z~pATw*sKvUdm%Ui8)I&YEiv2#QC893XMeX!Zhdk5^PWQxud)->a z0UuC{i)}lg?jE+SkN$Ao#viQH_{R+JN!D9{1-(1vM#FI_+iv5=D|9} d{EDbw*F_b@3~>9ziO8W!9;M_qkD}eb|9=k)#7qDH literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class new file mode 100644 index 0000000000000000000000000000000000000000..173ea3dbf5e5948c3698a183a27eca86db593559 GIT binary patch literal 1841 zcmZ`(ZBtuC7(ELi3E@K1NU6~JhJb*|)q=GJ!~%tirY#oARKGaO%@Vd=?qxQc0{$Vt z_@U|yozWRT)){}4O|Wm(o9b62xL~%iW0a~)`@yhKiE}fTkghODV5Vm#yiqzXEzr!c3;;7uDza$3>ilt zFg#h7NyVhPLQ#j|a%A;0ZBG^)YgW=q6M>=5KFoB>%IL@Y^03L=S5=lv#y&Q&z~JOm zr}8+bHDglaor<(J<9bymYY7XeD7+aLc63d%QOik^TIq^Q6+>-BYQ-!BxQaIgMmq|8WnKbY!BBv8 z+zT*`4|Dh`zy`j~;hO+u+|S`bfQQ)R@a<9Od>Dq!mj57YHD$x2qoYtK6?HtbZx7-C z-(pN4uUw1jhV~ioxR@b2~o? zoNAV=Z8RG3J~f;~~2G$`M#LMxOYC zg762VI3byu(;2#~HF(?)NGGPWlbtKYrGy>i_@% literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class new file mode 100644 index 0000000000000000000000000000000000000000..62fa0b3dc1856015bdd6538ae7525d75a85ff763 GIT binary patch literal 4919 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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class new file mode 100644 index 0000000000000000000000000000000000000000..504125cd21708bafb829a65cb822381f370ec196 GIT binary patch literal 1090 zcma)5-A)rh6#fn^U0N2X75}J8!39gvE=AM}42h|dG%0d{;ljJ=?$8b_vt)Ov`X0u= zw=hACUibh$l<`a#z0iwxlb!Q3XTI~Db7p@2`u+pJIv(a>p;EvE7ACQXTX{^vG0Rc` z%eZZ!YGK7fjgU)vDs~zc?hx#j)-q}aB93KDSZ;?=*A*wi>q*xOBR}j5x0%YvUZVOc zdF^a$GR7mNRkB4`sg8DJWuK63hQ1`sw3U|6PLDe>dM-KvdrIxl6T!ZSl(Em9SwoXB z8otwDQdX#&f%1+BOVzf}eiSO7tI&zmiTgx}Andl-hz^7&H(Q2L&L4OQ3q#`x<1c&4 z>k+6$nA%H(ceEo;&dC<`!qdo;+sc$P`%lN}hoUdI?x)%d!dU6t9yTo8xA6dVp35j>aTBKO`-W%UAKSih0HpeGxeFm14H^;?D(LBRC`6EuQ=0aCQuO zz&AGTp~BB(0)#xMSTxP&*E7cdG-lXaWNnLW<0;fuKZ9ytG4^Q?bAi_!$AI3T#QNnl z3KucU7RL|JxCC6{y%bBc%90y)!bqqIflVz5l|2%Bg%+4fB^I56j4lH6d Gm;VhI#|IPu literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class new file mode 100644 index 0000000000000000000000000000000000000000..9ff56e1af2c2314860b4efaab62090532e872154 GIT binary patch literal 2012 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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class new file mode 100644 index 0000000000000000000000000000000000000000..18014a39430111e0fb4b716fcc9c6d93e0077ca0 GIT binary patch literal 2561 zcma)-eNz)x6vm&M#4NimFY+Rytx`|P{?QN657p^&HX-0G+vJa&z31+;zkBYv=brri&!2w*xQe2MQQR|e5=$1o!F@5y zVphaF5R(`4P)tG0s+e!ZJQDL*%$k@dV!jizF6MhNPYpb?FpLcY&kg*b&{K43?tECO zDGcX>u#(-W1%7sAZM85ThR)Bk3hCRP@73=pj7}US$gC@*7J{;?(4Y5wx6pW1bi*f3 zvC5gjd{A<#>rUv2->U59?_g#r?l;6OF>u;esZ!4&8Gy!rBhB6ShC{Q6-FkO zGx;5dqN?Lpva7`%w^XO-nCF+>Jq5L_VBOm*xw~~Q@M{Ksq|YyNK~QxapELqC6im)7 z28}2_nOfu)IkoI_4e^Pw>9OabMmu`FelRv{x%Ms#S$Ph8CT6 zuCcY{hD<59@jRzsxPFNzTb6@7$b36GYb|JmC3ne_qaHYPbTcBhaT=R8PGQWz3mc!} zyp0KDY)oRx#xyS3m_gRYWn8gY_}6S)#|;}dMfZj1z7*Xp(S0SlS<&4V-JIy|Afqtk z_~kJ0%GpNUt7da7<(t=Syo950Rt_w_x)|`mj`s6(@`FQe*AmZRLdtybgV#~USUY7` zaui*U17a&jl16;O%RI`_6NabtkD>#q385Q*HG4c z475jw-s&34I}`&oUu!v?>l(^C83VQSNawqT@{Y5xj;hn+I&|rOp-MVM49eEee5C`5 z{U!$0tJh?q1BzWM2GyrW^|%9yy)OpUujgvL1Bx9q1~s6gHaei#hhtDD^jh2OfMPd~ zK@I9r6+58#pAdr@($l`x0rfTRw(9;7pVEZ;TdmZ3IGy|hBL}fr6aZEB=T{MQyeV%t W)&5pfHIc?Va#SB~uM5%DT>KYk^;l;B literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class new file mode 100644 index 0000000000000000000000000000000000000000..3eff8ba2f88727264e466edb078ad25d980e5b04 GIT binary patch literal 5456 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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class new file mode 100644 index 0000000000000000000000000000000000000000..c7f3d4afc7d00e12b5e339c6d0b5a3d1ea41886d GIT binary patch literal 1201 zcma)6ZEw>s5Psa0WbFbi0}2DiHVCXQqp6DEOA!+4hL{wX#Lzw|3(0qCMr!X<1Pu~mkR?NyX;-@yY1o`XjW zA1L7Y-4geIVis&?Ku77e?T z(}AIsj?|ZziO?Ctemyu(;waNprCx59=dEt2v+72chALacQ>%Zt2yKium(&MabXsjN zI4D%Bh97`NB8yIRfxZf=w0f2P`ZTwUrrA0JYwn(*(EJYT>(p?Kq=5mR;2O!=-1$0g z(9FOXNJeiBH|KzR1ZTEzo8M5d*bfvfoTHVeYfrI?Xa69&SRlH%g>^!*aGNj+xP!Yi b7O{bQ~1}q){?Z zHn3n|i6PzLZb1qE*bNL=49VA_%wX0%PpGQPeP8$tD-Eey7C+*4TUfSKP1)gAwL3p^ zxGP)!3*jCKRpRMKe@ab6(2!0Iwq zCq=#Ewy4wx79B^NSmajgkX@y;M~pN>dKu;hMwh`b7>DAtTN$fU2127SObk3P!ZVES z1l&H{;zzwg(>wB5+2XmQshIp%f0qwA)Snm!DxKKvz|6t;B}8jerA3q=M0 zp)W_xpnossBRVjo{I)#VbcLc0)QXMY>F)%Jc&kJ{OuZYWk8QlD$5cxO{d~rYdw)Y~ zqnZCOgIRhP3@{8Mmd)yp0W?$l=|{yp*Z4ai8ES{L!;(G zn+k^Tl#fgc5Ph4ZF-Z&w1qv-6Z6T%kC~>KJ3*usmh?F)JMLi%c8+)5gaxb{@w|*8UQ|#*-NJ^2mlhff zctnxHo_l<`}JFOAGmSsmx8HIEqzuJQ##wJ$?)FgY6v{fQ3) zvMlzM$Ae?8rO{``f+>Zeo%yC+D#cQv8%Xaf!$zaeLtiWDQ|rQ5gt3$MtVfDI;hyOB zOj1QZ=_JGYjs6S^7h~y-8CZ{4JW>3z-I;VWfsouTN3sfY-(Y}bs%D2$A zv4vMQZsU%PTd-|Z(Xrvc5SNwnU51*uzzKLbat6aw;n6s~W^it(yFN&J)Rz&pMQFwM z#%cA2{$P#1+#+b0kgL@UKLD*n7Jc10daJ0>>0R2nr00#L)xHF4ZCxVQ`honn#Bq_N zfdTe$kL1!U_&y$xW?&2?4HKO_oBfgc5Ph4ZF-Z&w1qv-6Z6T%kD0QjSQxKO>L?qKn1ad%JHqJKQ;(DvKlm0Fw zDg+0906z*bYbWZVNU|PiO-3@pYiHKp(ReJ33bME=V@su8^DR;W*`bP3VjiYxW zI2XE}0(1x}_GMJxV`yfLH9@arDC5@*UmBUCvO3OFYYrF+T{RL6Rab`MXmU0b`Xe6( zWLb8V$Abaa(&#f|!IZ+#&V17Wm13!|8%Xaf!&bxP;YcevqSl462xBMhS&tNb!adRH znWT!Nq>~Jr3;h|EE_~_v46H{i_SHmt;;l3ltp1Od-BUj0RPSNv1uBx^_`QgIHL}pQ zv4a;jZsL}W8?bFuv1`MDAucQD2MjfHffMj>>>LkIg-7G`lEGO}cl|i+kt-u=i_nze zHOp?+Eas!ToiTu+68Y+)tHKkh&lnCH?o|=}SW}lenHisry`eGRFtRjO@jRoI#^>wM z#%X;)f3QJcZV@z0$kl3wAAnXOi@xq0y;aoc^fv9fr00#L)xHF4?OY<)`honn#BrIV zfdTrsLvm#nd>8jfGcX2{hKWw@&j61I&H&o2@5trZPZaXFLMtZ-pHRUdLEK1vF-NrV s0ISK3HrDVkN$wG$(JYq!0pYnsBme*a literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class new file mode 100644 index 0000000000000000000000000000000000000000..05530d9ef51e2110602d114251ca8fd0cf9a4cf4 GIT binary patch literal 1203 zcma)6-*3|}5dPehW^Ds40}2DiHYhA@M^o{zmm*%WAtnVTF*FI-i<@|Drp%t4wESI2 zOb8zM1Nfs5=l;-;hO{KgIX>TgzPs=2-+zAo0`LO8GOl6Gi1i9e*r=k6$2OkWXxezj zP?_+gsYNHYMd!P%2iXg}d;DpH1Cp!Cq=XFMDUFH|~G6Ylx5aVO@98m4bV zawc?h2GA#{Y!s)>9z!dyuW@=A%Q$<*aOCFp%4@g?t#!yy^i?DnYC$Z;yYcBj=ns65 zkY+hhAx{puj?H|oESgjpI=Oe+rc{=c^tlX0!q9XBE+ehth-xP@Av14Qv^|>WV;+jW z391xLE6K2Nr8zNopvF2BuVWMS%Kxb7p705$9Cu}ys5F+tw;~&<$VSUS8yyGNal^q9 z90xUQIe3mPk(HO{ZHBtpz)QFsdi#SD5mF0z)GAk`+T5SlC5Tfhh0p|aS=G%O$D(03 zb2>0o(~kH literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class new file mode 100644 index 0000000000000000000000000000000000000000..5cd2cb8cc692e181f10cad3bcfe50819a249b907 GIT binary patch literal 1354 zcma)6-A)rh6#k}Ly0k2|)&hbkpjF!Pvxq;vDDkFZY%G$9;er^G>F&@jEIYWnl<+n_ z05>KQqZdAa4`n>F{V}M--DGFZnK|b>=X`T!e*FCQ9l$!OX{2yp4G%KVv8baoh78I& zDms>QtT1G{+%5VdIB`QACPV5?Br_Nd&l7&#$m{g@OEX9sgrBX(u_ez{GY?PYZvwi8s7`Ylz~tv3{ykT%kT{2 zJ0Z6YxA<|t(9DiJ@h$PfQB+L->wH%ac$X7#o1W#$!13B!BJ4<8$C`nMST}GDSp#W| z8_3}i!^EKWOQ8)s#uMs{xJ^}M$f>}l%e}U_-8v8!_3KlHl>z(}oD{d!AvB$Uco#ku z{D;08H-o{wSd8hwFcx&=Xfb5VxLQe#>9!098BLb< z{)SdYbN}H6^Yk+4U>HRrms4j3&`bwNuSbIZ9In%Do}@bI8qL|t(gj#$`2vZ`7iga% z!y7cF$Pjps0*#ZAa~2aMsV^HrGP0P$%|74SxOU literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class new file mode 100644 index 0000000000000000000000000000000000000000..e57fded7469b1ad6db3356f1670c8f674e76f26c GIT binary patch literal 1506 zcma)6YflqF6g|@|U0PPCh}7Z((IRbmEWT0jSur%JV1!`ew`F&12bY~@cMEK`%@ zjDGM3_@j(>b}1NvxJ^29XZGGZ=bn3Je*OOO6Tl5T&7v1&HB{74%^{1)9Hua>teHOa z!_+aW$LFSS~j1rD^M9HqL^Xqzy1t8 zJ1t?i7+9U5w-ZnS)M|x))1scame({_Ltl7J)&5o4@ooNGs0xe6^>ao=5g&`5?aF|n zUhuFb9UXTJ+{K)ML7Xwr2gATAoHj6odphnLn8$*F2Y6`U5gwBUlFDa}A%6&TWn+`u zq|7G_W>>@~FjZQKS#5}bh~z$DKC&~D6h-$IOe72-CWDsTdFjioHgWyBe3a~Cb`mE4 zTb^23>7mf&;-3pm+M@d%_q$lG9Ec?(1w^-ANtfE*8_HM$3`690$oGLTvP~IwNf<7_ zIqITdjCNt1&=OpxmnsV)2UKRi}25 zs!s1htA0cJOXOXkF+<+K2b`mEct1lCBeYVvR9=!l&f~&<)+V$lYoYoTsXg@UA+t=T zmY)6&UBhAGesTmp64XzW_;YkXH4a7hfC4V!QUsuYQ7SPN6*h(|6szGX#ivlhIL&EX a!vykVjnJ2VS`B2>;~oEU^s3*=Wd8tx5tQQq literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class new file mode 100644 index 0000000000000000000000000000000000000000..628d4627f22de43e9dbb9486fd231494d54198d2 GIT binary patch literal 1240 zcma)6+iuf95IviuHc1Q#1qv;fwvf_XN?iI@1@RIY_wMi9O-0M}qpu zUD4_3pbRf%l3{(WJ;TC@AGkgP>roXCfU|Fc3ZNY{vT-KWJGF0^ecF3cFz283)F16ER276B4wfzZ4P7o6< zLQ#b0H0`WW%vyIdqXY34`|{+qlE=e@;a%N1%i$nVL{jGhO-Atln=N10)h!NWG7E93 z{{B3)Hd>uS7}n@28=&q&u3FUv18An|(RI(!UqO|2uhObZa$akity8e()+ut$AIN`8 z4Hs$DFu-SAqj72Kd>uDP(l8p5x{G#hP677_P6Jxa@5trZPZaVvLo1~SUr@%^6me~0 wiy5MYTUbs{w6KEPX>fN4Er+|fM{@zIlw6rsE96-usbuJPYx0@cM8hcl1LiGDEdT%j literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class new file mode 100644 index 0000000000000000000000000000000000000000..c4dd999765e42e72699a8e022739d08743f6f015 GIT binary patch literal 277 zcma)1Jr4mv6rAVd&K(k!L@z;O6Rna6i9|x8(5>^bPByo)d;Bm%F#(-)#f=o_nqJj!IxB6%ytFGu_HHTaO)EX&xAv~-Rgq4BM<*d93X h1v`Ic2LwXF4+W@1D5B(90p-^X5POWhf)FAKq6aYEOa1@= literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..fd8737660e496d33e795ba2ebf674b1ad01e1e54 GIT binary patch literal 3796 zcmbVPYgZFj6x~At1H%A<4;mk(Xw(phQGAQqDr!M_SU?b8?T`$~KuF?b0zPW()4sIT z+Q;wcS~aXyy86)%{nS5XSNENngn+O*X|mRwxp(e4ckgrdy?5rXe}4ZHKsSC-(22`+ z2;)5&qY8W&6PGKs7#DUzT&~Kv=9BzTWZY0tkDH?NmW=lmG&+qBWM~SSoyL@S91|hq zwa{fuD`>?{5dbn03bs1Kk}?bhJ8)CRjDj{{XBD)I`P-2aG3I2X73@YvMpnUI;WmQX zGE5mc8J2{a5j~er@kZ@Wr**S8rR8#ZPJ$fEq%Hjp9|Q)pbll7s@u=OEwxYexqaF#( z9B%dTc}kC;GqhADQ9fSFW}|0Px@kF&IKJkjkv6Q;61IodjoL9T!QY#S>k^sNZvo|b`3OiPVxrXkvHr{78%gxoQZF%wZOtHqK!v6}JByhg0Hbr9tG^i)+A!xND57=Q%*8`W#lEa6-B&G!o=`HD(103)V45G z+`)p1ySOLgzJv|M03$&HqefWK;!TG~;RO$fX+Bi(03TDYUcI_ie1gv_a5$*q3w)*G zYkZ^P0Ja453BgLB1%Up2!2#TYcct&1DQBwFXPAU5q5cy0;-TeiBKZmw9-a+Aq!!3EM*J>Vn(3DAJIg z(3XqD-G_Z*w->%;XYES0iW8LM#tofw99hOc&yJ|*^@K5Bfdq@nUA3wFFKyPu>{813 zSwgfJ*rWC&?DycYLMjp>|Lsy%-?9U69Z-B@4D&q}s6vZ4HSIf|9kkVu#OcWEVYV)C zL=~+PUW63xe1WQ8?XgFAZR9H_uoHglLLGuQ%GMTVG>+joTlBM|ON@2`J#NfDP(vSJ zYze-}@NcMEgnuZ~SwQtfq@|_+c_QL3pq33~3H6iVu0^N?G)zR6&}g@s3fLf8&33D$ zfQ=L3NCBH(VDmD%J;VgQ1gi*BcGIyM%KX#d#Zb*uhgmJ%*DUBMFQ+ zjkn23MIYY5Su&Q;TVnFJ%Ot)QlP#;5wAyIju$i<3max@sZ!2KC;IhMRz3DP*vs-Vi z%`D8Uf_PN)li5WwyF_LKWHv&qS22iNxQ-dbFk8khUSbz7v5S}3T`jRY$DBB|f5p#_ z8qSm~V|T(I@Y|JILc3eLohPchUZO5g-BrM@fIm=OKyV`9_lXh){Gx`tC&Pj2$RhR# z?(8D@y^~>fgar9;fYmP6&Ih5aef($w7SO=AvQ2y`YsWo)*4$?WA5fbgQA-cW@)3DH zMgmW4mZu%8C6>t&%Oq8N%GPDl=IdkJ>o#9MBfrakA64Ja8S5dvLZ^(2GE*usrGsuN zF477)G*PabUvf3j6wo2m<{);~!c%7K8P~;g8iz}skpbBN literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..c912f928ac45d1b2a2632ac6138003c40a993030 GIT binary patch literal 821 zcma))QBT`26ot=COH)iXpo|U11}!{L+KC7r_QHgOkPt`_dtl<-O{~@slFCitcOfy5 z_P`I|MP~J}?MVJnBqK=0b z9c6yWPRuj4APr@FDvh>!G+EAidO&Cgsp=CvS}}(YgpD_Ejxh5K^RsiN!i>-wV?P?tL0JCx|3rf?MFo6l z{MIZhUzie)1*W+5SRKIO2N110P^wZIC>sI#-d8u(aLV;VE8*q5gg zr|}7lGQV?A{H@x$fpd$}bE3%I>&(;4)4ZZ?lt%UdM;QUHZC4jIqy6m`<-b$5m}xst XsTY+mnC6+&5(s?Ci3tm=94tNosN{jse-b)o25gqe*4u7rVt6bprl#ftkh6Q`*mDVa>sS99S5_)ubI zs#8G(H#uUhj_VvS6ETRWj$G%6(?g%5<2OjO)8bikCFG5$n2`v<&Wbkhxk za2$lyMz&l=->zdq+vppSWh@nh%V4}<-m79dji$~@oyI>Zx3h)dE)IW}2)lmY{oD$c zOpH;4z;7&Bxs$3$$#ZLqpx4iW=g!!vuq(-hchH%d+;TCL%3C=6x>Iov`^dOBFDQi5 vzfW3?5_%i^YqL!Pq2@mhXw(T?r~_UbXqMW-cByT2O6_9DPx>_etzqvIFEy5H literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..73265968dbc2adf6abc0a3830cfa12be93e6f959 GIT binary patch literal 1064 zcmbtSU2D`p6g`uq**1-Kt*f@S)vBv*1Ddt3mO@z&1B-%6@pX1Gwo}riPO^*s6kq&$ z_Cdi#@WCJ8j}q@pTJT|ug?+hSx%ZqiH~06SpT7WX;?5jqux89PW3C7AvEIPV25vFT zYx#O8%c@tTl7S@*ftKYkJ1+PtuVh{^EcJPw>O!TlC~PTCtb54dZ>d~W+YD=+Bsr~Z zW0%3JNf!DlmrsU=1F2u|K}NKT{X+0;muqG6_YJu!!LIvJa=LbUjNRyv%5ueedYE;kT0$P+2 zlI3MKGR%&R47b~y#U;Y3nPc*%YbN>*_X`CM43%$-?<{m!H{gnars1WD!_L`;mvNQg d%$xsZW?%o$Ov+Yl*D5_4^y?X|;|3NH`~@FH@Us8_ literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..2007429268933a9c94f8cd25b3521b3409935f9f GIT binary patch literal 4634 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 LJI;&v3A+CSuZ?bN literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class new file mode 100644 index 0000000000000000000000000000000000000000..ed0b3da58fea604155d29b193bf4555f4444c204 GIT binary patch literal 3223 zcma)8Yje|95IyoEij5!-oCJeupuylc2?h$~5t`=V00xuL8bTAwL$QS;Fp?|FK;JEG zXWHox=@(|8onn|W)9EKZ^fz@n-Mvy|#daa%nJek;-aTh`&r1IL-#`8Ya0K5+u?smF z=c5SVLIgXJ=jCDq3s{U|J1()|0~sGi5kamS1-@S9T62x#WX%kbqL{Nw@Ea zJPh@oU@dCxFB>)DzFMi1kx<*LD|}d5>1@miW3IC?D~ws?Pw@HR%M>}})4hO&YLb}QI}y)xDm=(wZcE-DJ{feJd*s)X6PUMX?@P++3U z%O?sf)D(I&}TfrQ@H^D-VP_!QF$=5a>GX9_;Y7Ye?_S2Dg<@D09I@Ce^Y zNN#F&HXtmn-qDIQ4xyA#q=PL)CWe$sB+oCL&F2c|cy62JaI7?jTWm9LKG3W=wMNeS z-M;uDOm^%-uv#b74Q+I&_}@kDjz56AMWdlstC~@gFwsE@{u7R5+#V3&L~7-A=5E_u z7g=n5z%~jfL8WTbnm>N_b><+cxLGF=`E_YJ3KVYM#41(Qs%hTiwx(Y4rctKSl(eFF z_3nE^Y1o}A5~8Yj9}Xpd%()_wFejS$@d{pshB(k~HM?u|W1@EJnCigQU?`O^su zljk1nr#p^7CvX5Mx=I*D+Ko0vp6uI|9(#sxYlM9WBPk*bI$mxB^2Zo)qnA0)s~f9; zApL;8^zR6b{f4dv&P&j;Eu$wMTj6sr$I5Kf3RDoC=x}Pb}20o66?1oJtj3U@CtJ1 z7leXM3QmS+1f(P49uKm|h2-#I1h!6djb@z5(M@z4wGXdwP1 z^@JS#y|_%ou3!L5{9l{iDa$@$Nsn04BbFp$tfc`OSsutxvlk-{G5P?z#2&fzN^~H` z@(52n9cStJ`CKPHHz@6!RH$3TY1PLk;qgg$d=kWmUkfoh$9#O+*y->&O9%m+`wy)k BnyCN) literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class new file mode 100644 index 0000000000000000000000000000000000000000..15ab1f62eb90d6e90214c792bcde28f0c9762a43 GIT binary patch literal 905 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 GD*Io|pS&0V literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class new file mode 100644 index 0000000000000000000000000000000000000000..237f1031f45e8af060e92d1092f145d329c0f676 GIT binary patch literal 2239 zcmbVNYj+bx7=E{ugr-;N1rbH76%#I9iil_`+HMP^rnINgcuv1?CYvD{x|zwDou%S8 z|CS&80sbhD&&+O{?O}`Phvdo3yw~Tw+k4(QcWZlw2-~JN7I3lv0>7*S(NZg)bMCrNMSsBUTrGf^VyJveeQ=! zcNMgQ6dTfT{ep$Oo*GSzi2SCAP5muO`yQ3RJkug>Aa%ha@f+`YbfH>1^r+n9rY-ofM~l^3lgX}DqU*oHjc>2P z;cTQ>_h%h}6qQOYRo~?L(55^Y8#Qb~9PB#>mWGhYCu)<0M;=weh%+5n%29}_)2VFn zq2?hoHm0iwi8Nxs+aea7h;K-#3^M{n^k^yPbfkj-r<~QND38*w5kv>RMyEb9J*)hHB;Hq=x9S^svQaqZJ~U ziMj0Vpc~^*iy@>J3kXa3>Z{{lcxRvW;NeDr)Zt;S19#cbMb>-=!Sx(l**N5G_Btb4M(tKLkEU!(gn{fHSGodXs{mT1u5kdo^lVsXq-rpAcWQ5T)^ ze9SvX!uZHJ=xa6LK_pO$l{f9W$Y%PY%SUfu7Tt=1s6>Z+V<PYa@ zfNvLjZ)EPzNW(%27O+B41Lzg(>5B7!5&YGS;Ea z9u^Em&Q;d&dGFa3hPmY$>amEx>-<>;S8cQ&EuY_H8P%X^lvrvSy>)+eZFQ|oO^?=2 zcI!KjfJfKgu2b^JqcQw3VsX+18V6p)X^cv=JPxMl5^g5kO$Fyknj!*D(~QGensfLb zU3NI1y)R_v1zLoyCFm1f!KVak?>ot>nZyT~#x+P<%OBE54zFkDk2ASXGF;B^Q~K;2 z%PaKxY0NiZ@e6n;j-g7o&w056FU2~m^o_%BsqS!{ ozH|79zIXToZ8+RS9yafQw!qIAZM*NsbPHHP9yQvbo27|=0I7XzN&o-= literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class new file mode 100644 index 0000000000000000000000000000000000000000..deb6dfda96896cb9b474ef3391448dbfca1b954c GIT binary patch literal 549 zcma)3!A=4(6r3XN3W6wziFXs1#IT81PKuBai5fAOcq_XvOUcrbZdv26dGG`LC}Ve# zXaWZ>o!55eb>8&z>-_`3B~Dx%xj1I1D|sW51vkO;mfm_PNyBjA4Y>@p5}}_8diB>g zoz`&1Q|`xHM*g)@F>%>pXa=^>L&d`c6j*=f|LpBBFcj>E0#4E9jUr%i7fy~Y_Hrztoa6q_ XzJjV%6mXEQH8d=iZ71smb*JY literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class new file mode 100644 index 0000000000000000000000000000000000000000..1149bf247468320f70575ad89d005aebfee41a23 GIT binary patch literal 308 zcma)2!3u&<5S%sBG=n;JFRDuqympj=Am|X(`Du$O@(eZmw+?+k9~D_%@>G|dU1oM> z*~jyC2jHS-qGO^<7=&DSX?9FYd0>AZ@s%*1&NgWl3VD{niA7M;qA6Pt>|J`v0$xQ4 z6NXKCslrI{JeH+2;Sk)PhV{m%hWZfudvMlDapom5&p9Xb-_|0LDim8k=Aa-<{>(54 c1g-i5KsuoXz3McyKh=O;p6DO!ttd_pyXq7skqhxq zp!;0sO4FgDF9IE<6|;WELu2zqj%50olGNDDjAhbq@FN}9era{(Ew!vMD_ssfo0`qT-9}N-cA;6B%!0sm63*Ub|g#j%n{Is;IYhD6o`MdH#L^ zkK(NcGUhHPzSYbqjLbgR zLSQW(o=BcXA$6YYmsaV#cT`_t)|F;7WE!6c%*6Fsz{Xy+!oL5=c=%~S()Q~y^KSUy zm0}T#`&ueW#u>;C*^i??vw$9L-gobRsx-os_aWsYaKicSzAU<`xk EH_%ud{Qv*} literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class new file mode 100644 index 0000000000000000000000000000000000000000..4cf05bbe572b737d9766a6d7c9d4c7017d700111 GIT binary patch literal 1660 zcma)7-)|d55dPLSIp=b%&82bqQOXq@;@Bm2S}1K3TEIBq){a}-NmSl8=f$~jy|wo4 zQvMJG65@w|2c9d@v;qm<`IC4k%sQ6R)JC!;@9fUbd^7va?B3r`fBzG}C2Sk0%whqn zdbngFhs!1y-bv%#G_II<4_6IbGck+HX`v6J=Mbo+R7q zk=zlx+n#t(zd!J`%eohM(G7<6!jwMaftR-#QdQX#44H-(h|T!^u25aR>yyTANSFKD zTzPsuQl@mG3|2h|gsS>H3$lPgqJOx!=i;-SR_)$gE5>xsl4uV>&;qgtLxO-?N#vl1@aLP^bf;oCiE~;vkG&SA^l` zvA?1*?hwJlX3L!jSo_iyLr@EM(I$Rm&=#)n4n(h}Q!vo6(8U(D;ZzjmR~fR$-F#Fx z;^glgYHMQFl*!Fzs z5NCEC5-L6DxPli6Rp(QLN#oZr@C{DmTiX4O^xva^AIR<}viy;r{GU<7FVEz>G0HiI v3f{sJp%w^b9*KX+Az@(IAYf*o1PXJJwi0+7DAWz_)uVULx%YWk1&SnAWq~`o3DJ1!}Xp-UyA$wIB+T>jF0lUHVk3`z0^d1gzP( z&SDOEL8KO1>nlnx8(;!MUhK=TCUs!eJDZjPE8tY4Na@*7Hk*peVs|L=6=KioRzz7a zxdqcq?g3Vf5~X#kk*NCI=e}wrK^)O#U@4LQXY;a=g6PcVItM6_TZ&uSSGNKKdGz1i zx@daN^5!BxjGIBUI4B{;ZLq;6Nu!B)dI=G2hffKtU+Yg+B zkB#XZZaKJ(Pi#~j+`*?dJO}ew;7q$3X}%&bxSMHl<+1V;PGEPd!xw?WyPL~vI^NtK z)|syIun#*-W-+lLl)y+~&j6MZ%@$2ROo_261A?#$cg*TggC|Kkh-EE(HajPMUp1Tg zOH<^o+bt1`{AfC!72~Ed`{X2PycpdJI0Gf?q~6{(cBVC5tYMP3&Oxw&um%SW(Ew_4E!Cu3 zs>wp$SsDIEag^3$d|TkUhkD#CwISSNZDiczZDidss}0Nj0X;8LpK;1w`T$QbK{=Af z8OJf4;EMi+<2)BQNi^HBe@B)NFylV(es$fK$b7kl-qPzQI51y&ef}3}ue5~&JP|*l zk1G2WMz&YEpU}^Vzl5~~=LN%9EN+OwhM34`Q^Yv0)+{A(7JZao)9NW(@r-BRa{oD@ zenUXt;R3$rm)L#-eS(&6<5XJE%uW%f8DRoFe=&TrN9v6#k|yT`7Yga#hp{MM@FM#XE?X3fcsa&{`Azm|;7%3(IaZ-9?|qcQB#R zs=@z0l<~~AToMCxlRf9m%(4$NS- zgOumnX?d>$_wm5MLj#WtJZ2c!7k0vSMe&`o^VXhpeXk&FUox;PL$^Nl8rzw&G6!NVw1P%qUBiL62oS)MVsuYq>i&b zwbx8^Yofpq$+$(TziZWU5iX*tna zUWs|CCaipiXi~@S%z47xT@#h2_gK#Ll_^&&9e?2eW=!j0P_E04X}eYG^_uj`ZqdLK zjs+}o3}BF>3*8)7(8F;Ry&Qe$=NQ5W$5SjBc*gM@FATio$lw*nGFA+{=6Hie8cItu zNz4;gPH^#ddqTsOb!2EqSDxnyAb=o~vii(4RbGVliQwvRX~d%@B;%TgAkA zGoqkUeH5mK_UPFOAFI*iO47@h3EssG*QINaOinbi^*zfbI6J1VlytoG@@HxKo~v?F z?OQ>BM9`)S^yrGoz)}O@bR&*ByP)wCl@8r3QaP`<=4DzARH?v=XWUSw6q++ZoF17@ zFkD7kcelnDK%5{Ja6(zY31|T)5Yl@UqJIe2$m%*td0Iz_$5WFvu+(r3q103j;nYy1 zhDfTft%kPLH$=Y%mcvA&WC_%9gJ^%?EsmR%iT>gm=yc9-8zV$@gbKnW0kf$CguY;q z82b*Rj!O(AhwEq$X@MOeMl3>qTOA!?=#XLPkUfYH{RsoVXnjae>F*#sZ#Zs-9}V=` aFc~FC3}Fm+h)3wXP2v_wF;eHm>H7z4C3{H# literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class new file mode 100644 index 0000000000000000000000000000000000000000..dae76a5856020f74b5c9073e8f8bb6d2dbd7c3f5 GIT binary patch literal 1256 zcmbVMZEw<06n<_&3bk`s2h;h6${a9V0ddY?_629M2x^>RpD*PGx^%asE%SGo;7k1A z5Aa7B&!r^HxDSjb?LFtoInR0SJ*W5gpP#<~)UlUA2KNmZC}fbugA7*i(7+=U)7VVo zv4Jg=bd+^ebZj%EqM;iW>pGq=m$>9e;pxaLp64mnnpEYLE8S?H;bmz#igK4B+4B2>VYN*f-;Gau zBKX969wAoScevN(fvfx(m{c2M*juXJRCFR3ONK;A)i#d&ao~tIuBx~G|CV=7_!%c{ z2h#EU(3OLZh=zXO#4T)?Fmc_4rK}y;CaS3EsGE3(27?}sTy@U0zcBJgI-Z-@#S1#@ zWzM=-W5_Bkw#Vhbe&0J04z<#nLm$Ud#>ZB_d;x~W<&%`Ac+ALXEYS}&K+`d;GHflD zPbr%VDW%qO#}Q#ztX7Hs?Sk{!EMKJKgEyuhsKX^6h=3#%E|Bm~48zrtA4VOjPboC5 zrS`m2M^Qk7)I5j8?WEfCpc#Y${q_ck4=kHi14p-kMz4h%gszdbPrgEo%Jx^V%6DjA zrZGACrYHuQg*@5$I11~yNgl;d*%(F8EYG-JBcU>ouS~!uNKBCYfh$(Z(!U{nJm)nO tm$rtSmYZ^$an_7Gf!oBP;STQ7nxyOM9#+ZPAodlyvaU@r0_e%a%U?KtOpE{k literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class new file mode 100644 index 0000000000000000000000000000000000000000..31342aa0f2bd07bc1a8acedf9d2d82e70bd309f1 GIT binary patch literal 1482 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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class new file mode 100644 index 0000000000000000000000000000000000000000..f41cd506e0212dda2d36f1b5ecd0aa1e696a9147 GIT binary patch literal 1027 zcmah|U2hUW6g>mT^0BpuwtiRIq5{=!sV^p&CJoU<1FaDQv2VjNSr*qBGP|_(XPH!u zKKKLtQO3KwBv6CxCOfwZa;E{pH4C!F#`sE#lQcG#a;$v$8J~>_2UO>Y+%Pk9lK=M#eS9Rlt0XAd0aZyVSgm-fO?-n?MOUQ=lTn lE|U5{LPwFb884bjCvlVH6S#%j^i9#tzKiQoLPpI*&tGU40`C9- literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class new file mode 100644 index 0000000000000000000000000000000000000000..0ddfc323bb4483a29dd5b20cae87b29684810613 GIT binary patch literal 748 zcmah{ZA%+L5Pmkf=FEA~_)=f1jT$vc!IONg2oe+uu?3X~{kFMVl9h8;Hi`KOV*ia` zDfNRtz#k=@y#(}wjknyeGd%M=Gqdyb{O|~%itQ{uV9`ScOIgfgc^sdx;$qdsXBP#A zOt&pN#a)I%U7J?GuXxxNL8winuX#|@MjWWfXc>Ja?4DGzyU(yudJkM~FgP_G35LnK zRN{N@vMJ0NZ^jgvuIrG;4Q{0Mhe5{{!r*^XN|;*AI~_sp`a43!D%F)XJw>);MZHtq zGod(=Rw)0f{+$bc&8eD06~?+FRqI%E+d6Ww=3^Z*KE{ys;n~{;iY_*7c#GyTdMw2% z$yn+j=BgF^XkLi0OD(>HPI^iW`d%GPMa74);HGAufWhsHWF-4wbuxyOZG-ifedxWtW6P0_gd!(Jea8h{T^Ae6*NG3p}u{sBh8r?LP5 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class new file mode 100644 index 0000000000000000000000000000000000000000..b1011c40ee47ab9d6ac4724d24336096fa95ccd5 GIT binary patch literal 737 zcmah{T}$IY6g|_{#>S{!zrU?oK`U%T9~D80qEHo7>hm-i+L7#xOj5<4wV*7!5Bmdr z5dA~qowT42ek9~F=W^zpdvET;%fJ5sHn3bk4<=pYF;&1gru#612?w(d<{Zp3RE7QiEC{lj_QvwxYOVP2DryHi6ie z)~NWd{-2lpno~72d04=(hh7vsxc0P&B?o01$=4GpZ<2#m^&_sD z{z>Cf1POKbmO5=K)oFR|YbokGhy*tWGETI)WpHjpqb|h_&H9rG*#C3UA<+mHKGuIn zLWve350VBe7Hzk*9~t^w^ikHM(+=S@Q(3zQtNcOccgpFfXm0|K7@#=Ty*G#-gsg&9 zWAqMTxU035VxYfr2X=?-U*s6x5keV^k`<7ny`4ZYHDc66 G`n&?PM5s0Z literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class new file mode 100644 index 0000000000000000000000000000000000000000..330bfce8815507996941d3bf57967b7d6f01a0c4 GIT binary patch literal 748 zcmah{T}vB56g`uqS+iM9)P7jo+Nkj>g|3KiiXg$#Lad-Af^W0CLo&L~$m~Yx&nhTl zAN&FR38nrO@y;fo4^?;B%bd%ZbMC!+|J?q*2C#yK5?zp0JbRFTm#S|jedR5IOQm|c91ywqkWG<75x zDlMtR_ug?J%nu&Klo@O3kjHIqq{V||!4|^ceN#%9X3UdB5S)3&sJ=>d~UQvJTCo|a-L2RuCbDw9;3pA62K2-;Gd(Yzm-g8fJP zeG-jf`v39|NZF7MP@|P7f(*c_RogdhN{&7kWy*SV+8~@|8lNt}8kflZ$~eOm?M>h> zMku}>+^b-ekX5j1jNUPf546@Z42(3+!OoGtLV;obUeC=m{$Ut5nWjg4VxzB_$4f#v Tydp24Kr1|fYUaeKi|n}r86l}s literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class new file mode 100644 index 0000000000000000000000000000000000000000..644f6325c93d2cfb350a6e953720c559d3cdb845 GIT binary patch literal 1988 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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class new file mode 100644 index 0000000000000000000000000000000000000000..6e6752057948d69c7b9e1a0499d45efa10154c25 GIT binary patch literal 442 zcmbV|y-veG5QJwFCx-Bsq<|7ir@;~}Rgi*YizI~+1ro(^UYWBjpLJ&}KO03JfQLey zC6q*hithH?ncJQH{QB4cxWUxNsgE;)$1O|3OAtNeq7h*s$}CK3qsr{|e`NOCMi?zx z$yKd%X?=`+Ob8d2>y@Zg!;d<)cSfZdFLlaY0GJB=astdk`XSo$wE;H`NpBtCe<$PzKk&5onZZ%v#i~?&XikS zhHYI1|NOO1I@!G9(as?%F`#BlO|9df=*|qeJ+P9pLbXb-j*^aI{a{ K``9^pIQa(1vv*Jc literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..18ad39ecc082b2a95f340025cc21d070226af701 GIT binary patch literal 443 zcmZ{g%}N6?6opS}ozd3%TX*7m3SvZXA>COJi-KZB1XnS=jw!=rn#mOA)m-=hK9qQ8 zTB-}(P$zJsMNCtWz>OS$~!B7uoh z>xkRQoYh2Qfs1Hf=Qlr7p17C(qJ`y`Cg_Tg|~ z-Pq35ATgBsioK_4LAgJ!<`y`zE|w}&`i-QXqw-&m!1m9!ZeJ#(eIOvv;B^CGlQ)4T fz`BZ{)(~s8uA^0J8ymHD7ThMb*vYwkHn8&zI1hE^ literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class new file mode 100644 index 0000000000000000000000000000000000000000..142b69c954bc0811883a6e2c143312b1ccf03a5c GIT binary patch literal 345 zcmZvY&rZTX5XQg3mdZb^S06yj#ZA0=B#@Y3JdkkkHZ0>(+;qvd@Ngb{03XV*Eh-1N z%rBYwzR5T9{qy++;1Owps|44Cn^LNgb04{sCH^uLETdoM*ncI3TliUj7_Ic#|((U*l ze&K?R_=h?iA#>g+-mqSY(g&G3t0$z#b6yu~(N&v3XocqhaTFpT0s>>S8z#7H*g>~p MuV!%cLv3NO2fR*NeENwbi=#0Pa=?1FlXYNCm;6;2zV^A3{<>+J|%S0emPi#lbyqWp*1FvNlA)92rn5pG zYb6Pb)4|xn^gMH}-FL3axGt2mn_-NwHnwEE<)V^Ie1hyxgE0RJTyBjNE+P;D{{Rq# RUKt_a?--FMUVh-1ya7mPJv#sZ literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class new file mode 100644 index 0000000000000000000000000000000000000000..30f6c75b87ff671515bda43403376ea20cd95368 GIT binary patch literal 3423 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 Z8`hzLZ$G8G@Nv|$3HI~f>*Fm`{|}TYyIcSO literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class new file mode 100644 index 0000000000000000000000000000000000000000..3eb921fcf9e026b04cc8ae311d0833fbdfea1136 GIT binary patch literal 1594 zcmbtVTW=CU6#fRVOX*f9R;sqvOVM(N*1NP;iZ!u;8g0es+ps%5A<%^1Q{hrpRlyquU*x-{PLp5j*y# zTNSR$8{(N1E;5XHO~Z{B6x?Q*s@PnA;h5`=p*KX;)(K60Vp+l|o7{DU%dk2+czgg& z(ybVl;XPp3OPmO4bmd~Q#tn6Dut=JkjYuqv9zW*^GW5TdD zI?14~@g?%s@3bu%6Ve3VEKhR6}~)B3K^JPOItr{`_U>ZPT4 z0-k?ZdO>EGv#o(BmO9)pdwjWLRAaZGk|P^P=Ctfq$mWlj>kPksMYDA+Bk3 zJ>!K!fuVT}n+Bs@Ob)Bwa<3h{6!n@R-fdV7x)1VJ@>WY&Izu)wXx5;m{c<72plAPy z@Zyk&45MRE%wC&ehz+58ovh(9^}$InoQ5wFkyQ-POeIad(noI$Gjw{6R%P1zX%45- z`(UZeK76S|_&;<7&(kXh%w2NJbJDG2aJ#PjHeVoB9af0Rolu zcP!AFeZr})7<+XHB^o@yc$(e=g#4c|;fJL2L()YNAi5NSEDe=qkYTyMsIz_QAg4NAN!~}^Zm<59ZhL1x#?pD_pyASnWX(AFe z@dx;$jCZ;#V74I;`eA17%)RH_(|c!r|M~F?z!Dy$(1R%hDNL)?OfP1U)iGxvf!hY| zAg80CqevJm`@-1`YL5fgsmM*=kpy$Y^JK7I6ZN{R6Oz)axE}B4%YIO?#G$aO(z5-) z@ms=LZ_lsf!JaEWJPBP_2zuw7Fn3PWhS!k6Yhg={NIrBuxABOuojWJuf1Yz3PoeXB zg!p=>tiQ}cwwmt_WUwO+YOE<;_H9wy6M?Jj&Stz(by@go6#SNGxGlNkKdW!bdRtq6y#Y@?L8Rx7Ma!h}78?5#p~X5sCMTicq|GUYvy?Y@0L9mP#c;^%9&B znl94;+DGOyUi!_zmQP*vug9acExZveVZub8i2>X-aSi=C7ED-Rgw=?ii^l2BH@m11 z7j-O|xQAsO_X#Ukz#}YQJo@a7GR_*YoGRvQ1XAZNowP2Yw;~&BHg}xc_(T}Z<;%iz z0^fD`8Xj8zPPoc%uU6Pgbd*YdC@Kp=U(ocPd%NyVHITv~jO5CywpLAe73)RQ^Hk%9 zt(=cgA6->U^8=RRS4~4&^$4%hszZ2=fw;VbJf_*&XO9@q{e@#_h2jyYFn@&D7v9ov zoyRod08JxKGf2@au2B|4yg$_r!!R;zF+fN|;Ytx{OfZ7c4$T%np&FlM3SSZX&S3b7 z#D1Z8jN~`yr)-Auq8x^)6tZO6Q70@J+`t%Upa6kG=P?%2gFMu`pI}>kDYob1slUB(sCEDV literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class new file mode 100644 index 0000000000000000000000000000000000000000..c50880695f675c210c8b5eecf105b72743a661b9 GIT binary patch literal 712 zcmbV~QA+|r5Xb*}o?c$2Wu-~I1U+bh2T>3iK?y;jMkKzk=b{_et=)O|y?P3I=mYej zqS@02%NOflXLkNGzq#3EKfm5T034%YBZW;1+ZIX;nG5O5$t6RoTI(^GO*IezQaP_z>~ckBBiXnH&h1?A6MDi}I^ z%-xZ2Tonvd%$*LO$XImMUDy_3$cN$~5|KFg*{Z>?r~HM|tC&k~I#<2AeDj7rVfsb? zhvDcC9E1I+qQDh5Qs2ey!a&LF^(P+l989Dw>@b}D_s|R{%cJwxZqEm`rF&o>20aP= z8K5VCG}#PA4tYjCefS3UnxrkV87;ChR%oA_79dMI60wFnSq-1kGPL#^tR!G*nw)_e bEnuCjfsF(#VwHT6Vgp;SsV+snY-Ya!N-nnl literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class new file mode 100644 index 0000000000000000000000000000000000000000..04fe4ea3721322c667819ede1645f8f15765edbb GIT binary patch literal 1407 zcmb_cZEw<06n-vrbaYjaDbr0ird5II3hbk1(G3>20Lyg2gfHe&Zc1luOLheB}HKc+qkRZ zo(e<7eTGyta6+S^;vqx+)N>tAG)BUU!h^u++oI+71%rO)UMsmQt+>an?vDixCqh91eH%tL$S4+BdaIg)#0aa(pT z_=q!P8lL6)q2t*t5e@vljw04{Xt=5)BefFBI(DRZgk2S;jtZ(YfVllP2qY_WFkSB1 z=4tOjSP^w_7Hp+8V4e+EmAk$f!`WejDajIpGALn?teLk8sG)xq&OBts_bL1L#zrO16Bq$@4gs{tX60j1T|- literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class new file mode 100644 index 0000000000000000000000000000000000000000..cc3af3137dde609701ff4aebfecd4078c4712fc8 GIT binary patch literal 1733 zcmb_d?M@Rx6g|_{u3Z*esiFb`YAxM@v=qOKM1hiMC@3X0;g1=%V_8^s>+ZJ3SMk3O zU?PhC@Bw@%nr$&(4bK4f~qQyN=cnk}@Go+4( zl*DtUZTj;Jjm+ucdPgYgRffo7P*!|}s$FgFZ3%aSZ&_66z=~sVtIAzd&O3_{DG|d` z?<8HSP8F!`u-mlBW@H}y6`vcsW!~s8sTHT`8e-X$xeOnFX45;o#Tnuy+prwZwCiQz zZ#y*&Ipj55z<>q~{Th-ORxqPcL(OWqi+dXG6P{x{)gb~ zHW^fI7<83Vg?xcw`2@^eq%3agM^I<;d4|#BFVB*&M4kK8BA?EHRzH1P|36LY`M+At z$f`)@K=TZ-f?%2bXg>`saG*h?`IVZeF!BI^2Px)()FWv zc!>T7LSGU2h%xe5_yFf#OXmR5_Mm*n`4A*gn1DgKMTlq}DytyLHjrl3 wfK+S4bx22oc$TJ3*U1fG6k{|-D3@_uByWhG#Ob4yAPHhLmp`3W9zY5PcKRoQa9X2wDhM7D?lQtxfy{#pF<3zP7rtkioG;bh5EeQn2Vt;qPc;DQe;ZHOM> zS(_{puOgXqlxUM`?^&-oh*d5XUzDtzJvB1Tc&tHGzo-;e;d#U2rCExkE>`_8-zc74IPhtKew=n Lb>GQXx7qpz-D{Sp literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class new file mode 100644 index 0000000000000000000000000000000000000000..d537202a21cb02d22fee6996c233cbc0217163ed GIT binary patch literal 2619 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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class new file mode 100644 index 0000000000000000000000000000000000000000..db851963d7ee080ef019a96572302577ed5458b9 GIT binary patch literal 3129 zcma)8X>%J@7Cmh(Ew@{?Bd-DzJ41%ZvL%Hr2{Dt+5b#8flQ@aU;tXx6BXy9wMXMFU zHf&*EW`-FSvxcyUCG13Tkzy%6?=6i&#vTgE*B+^b*^_bIp^e;4=z3LeBm zV)?Kb9ubN;F*_;a(EuJ(Ff4p|98bu2QpQsf{Ka%mpVK9TlgG5Pkq)B1gu?;gj zc5rwpMjPW+hOTrZ4O8D)nw!<_z1nP^NGNHgwfug~HpIFHN@)qwI3I)01ht)E<3BkkhLo@f@9~nNfdh^JA68e6hqZ-R9l6Z#9s(2R9srU!}Nhabd z{)OjN{2Tufvlmpnh?j^*RlJOO6$z|WaXr>8nq7J;RJ?*$Ra}j=5?Z3P_ZnVj^+yhA zv3u6WZivTbqKD(dn^nAlH&r%_Yh|2L@fJ?2cpL9fC&9C>6UV%QcO?uqyk9mg5>~nr zg7Zl&f0RknGc4CS*G$1K-p--9QqdWj)rYhp)4f0<{P$#(RlJXvRD6IBWqhP!8fR2| zERatGE1!z!yBa<;nQg7-MaE|;KF1fl(U(e1(=8$)4VzQ5$MiJYM-x=NOstZKs84@h zH?yLLaLMcJPvL+tAbON;N?DI>>2juHcq+yjh~wJSJ*JmsS;RD@8}Monp!m zO#H@vO

YLptq4FT>VCSI$x;DL-fPU!;jaymcETBA<$B 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 E0zko8u>b%7 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/tmp/packageReleaseJar/MANIFEST.MF b/platforms/android/CordovaLib/build/tmp/packageReleaseJar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/platforms/android/CordovaLib/build/tmp/packageReleaseJar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/platforms/android/android.json b/platforms/android/android.json index 4c7bfdf..84bc17e 100644 --- a/platforms/android/android.json +++ b/platforms/android/android.json @@ -43,6 +43,10 @@ { "xml": "", "count": 1 + }, + { + "xml": "", + "count": 1 } ] } @@ -53,6 +57,14 @@ { "xml": "", "count": 1 + }, + { + "xml": "", + "count": 1 + }, + { + "xml": "", + "count": 1 } ], "/*": [ @@ -65,6 +77,34 @@ { "xml": "", "count": 1 + }, + { + "xml": "", + "count": 1 + }, + { + "xml": "", + "count": 1 + }, + { + "xml": "", + "count": 1 + }, + { + "xml": "", + "count": 1 + }, + { + "xml": "", + "count": 1 + }, + { + "xml": "", + "count": 1 + }, + { + "xml": "", + "count": 1 } ] } @@ -95,6 +135,12 @@ }, "at.gofg.sportscomputer.powermanagement": { "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-app-event": { + "PACKAGE_NAME": "com.adamdon.sw" + }, + "de.appplant.cordova.plugin.local-notification": { + "PACKAGE_NAME": "com.adamdon.sw" } }, "dependent_plugins": {}, @@ -177,6 +223,33 @@ "clobbers": [ "window.powerManagement" ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "clobbers": [ + "cordova.plugins.notification.local", + "plugin.notification.local" + ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Core", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "clobbers": [ + "cordova.plugins.notification.local.core", + "plugin.notification.local.core" + ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Util", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "merges": [ + "cordova.plugins.notification.local.core", + "plugin.notification.local.core" + ] } ], "plugin_metadata": { @@ -187,6 +260,8 @@ "cordova-plugin-dialogs": "1.2.0", "cordova-plugin-device": "1.1.1", "cordova-plugin-background-mode": "0.6.5", - "at.gofg.sportscomputer.powermanagement": "1.1.0" + "at.gofg.sportscomputer.powermanagement": "1.1.0", + "cordova-plugin-app-event": "1.2.0", + "de.appplant.cordova.plugin.local-notification": "0.8.4" } } \ No newline at end of file diff --git a/platforms/android/assets/www/cordova_plugins.js b/platforms/android/assets/www/cordova_plugins.js index 3d13c71..f4cde36 100644 --- a/platforms/android/assets/www/cordova_plugins.js +++ b/platforms/android/assets/www/cordova_plugins.js @@ -78,6 +78,33 @@ module.exports = [ "clobbers": [ "window.powerManagement" ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "clobbers": [ + "cordova.plugins.notification.local", + "plugin.notification.local" + ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Core", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "clobbers": [ + "cordova.plugins.notification.local.core", + "plugin.notification.local.core" + ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Util", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "merges": [ + "cordova.plugins.notification.local.core", + "plugin.notification.local.core" + ] } ]; module.exports.metadata = @@ -90,7 +117,9 @@ module.exports.metadata = "cordova-plugin-dialogs": "1.2.0", "cordova-plugin-device": "1.1.1", "cordova-plugin-background-mode": "0.6.5", - "at.gofg.sportscomputer.powermanagement": "1.1.0" + "at.gofg.sportscomputer.powermanagement": "1.1.0", + "cordova-plugin-app-event": "1.2.0", + "de.appplant.cordova.plugin.local-notification": "0.8.4" } // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js new file mode 100644 index 0000000..2ec6d3d --- /dev/null +++ b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js @@ -0,0 +1,509 @@ +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification.Core", function(require, exports, module) { /* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +var exec = require('cordova/exec'); + + +/******** + * CORE * + ********/ + +/** + * Returns the default settings. + * + * @return {Object} + */ +exports.getDefaults = function () { + return this._defaults; +}; + +/** + * Overwrite default settings. + * + * @param {Object} defaults + */ +exports.setDefaults = function (newDefaults) { + var defaults = this.getDefaults(); + + for (var key in defaults) { + if (newDefaults.hasOwnProperty(key)) { + defaults[key] = newDefaults[key]; + } + } +}; + +/** + * Schedule a new local notification. + * + * @param {Object} msgs + * The notification properties + * @param {Function} callback + * A function to be called after the notification has been canceled + * @param {Object?} scope + * The scope for the callback function + * @param {Object?} args + * skipPermission:true schedules the notifications immediatly without + * registering or checking for permission + */ +exports.schedule = function (msgs, callback, scope, args) { + var fn = function(granted) { + + if (!granted) return; + + var notifications = Array.isArray(msgs) ? msgs : [msgs]; + + for (var i = 0; i < notifications.length; i++) { + var notification = notifications[i]; + + this.mergeWithDefaults(notification); + this.convertProperties(notification); + } + + this.exec('schedule', notifications, callback, scope); + }; + + if (args && args.skipPermission) { + fn.call(this, true); + } else { + this.registerPermission(fn, this); + } +}; + +/** + * Update existing notifications specified by IDs in options. + * + * @param {Object} notifications + * The notification properties to update + * @param {Function} callback + * A function to be called after the notification has been updated + * @param {Object?} scope + * The scope for the callback function + * @param {Object?} args + * skipPermission:true schedules the notifications immediatly without + * registering or checking for permission + */ +exports.update = function (msgs, callback, scope, args) { + var fn = function(granted) { + + if (!granted) return; + + var notifications = Array.isArray(msgs) ? msgs : [msgs]; + + for (var i = 0; i < notifications.length; i++) { + var notification = notifications[i]; + + this.convertProperties(notification); + } + + this.exec('update', notifications, callback, scope); + }; + + if (args && args.skipPermission) { + fn.call(this, true); + } else { + this.registerPermission(fn, this); + } +}; + +/** + * Clear the specified notification. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A function to be called after the notification has been cleared + * @param {Object?} scope + * The scope for the callback function + */ +exports.clear = function (ids, callback, scope) { + ids = Array.isArray(ids) ? ids : [ids]; + ids = this.convertIds(ids); + + this.exec('clear', ids, callback, scope); +}; + +/** + * Clear all previously sheduled notifications. + * + * @param {Function} callback + * A function to be called after all notifications have been cleared + * @param {Object?} scope + * The scope for the callback function + */ +exports.clearAll = function (callback, scope) { + this.exec('clearAll', null, callback, scope); +}; + +/** + * Cancel the specified notifications. + * + * @param {String[]} ids + * The IDs of the notifications + * @param {Function} callback + * A function to be called after the notifications has been canceled + * @param {Object?} scope + * The scope for the callback function + */ +exports.cancel = function (ids, callback, scope) { + ids = Array.isArray(ids) ? ids : [ids]; + ids = this.convertIds(ids); + + this.exec('cancel', ids, callback, scope); +}; + +/** + * Remove all previously registered notifications. + * + * @param {Function} callback + * A function to be called after all notifications have been canceled + * @param {Object?} scope + * The scope for the callback function + */ +exports.cancelAll = function (callback, scope) { + this.exec('cancelAll', null, callback, scope); +}; + +/** + * Check if a notification with an ID is present. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isPresent = function (id, callback, scope) { + this.exec('isPresent', id || 0, callback, scope); +}; + +/** + * Check if a notification with an ID is scheduled. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isScheduled = function (id, callback, scope) { + this.exec('isScheduled', id || 0, callback, scope); +}; + +/** + * Check if a notification with an ID was triggered. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isTriggered = function (id, callback, scope) { + this.exec('isTriggered', id || 0, callback, scope); +}; + +/** + * List all local notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllIds = function (callback, scope) { + this.exec('getAllIds', null, callback, scope); +}; + +/** + * Alias for `getAllIds`. + */ +exports.getIds = function () { + this.getAllIds.apply(this, arguments); +}; + +/** + * List all scheduled notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getScheduledIds = function (callback, scope) { + this.exec('getScheduledIds', null, callback, scope); +}; + +/** + * List all triggered notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getTriggeredIds = function (callback, scope) { + this.exec('getTriggeredIds', null, callback, scope); +}; + +/** + * Property list for given local notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.get = function () { + var args = Array.apply(null, arguments); + + if (typeof args[0] == 'function') { + args.unshift([]); + } + + var ids = args[0], + callback = args[1], + scope = args[2]; + + if (!Array.isArray(ids)) { + this.exec('getSingle', Number(ids), callback, scope); + return; + } + + ids = this.convertIds(ids); + + this.exec('getAll', ids, callback, scope); +}; + +/** + * Property list for all local notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAll = function (callback, scope) { + this.exec('getAll', null, callback, scope); +}; + +/** + * Property list for given scheduled notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getScheduled = function () { + var args = Array.apply(null, arguments); + + if (typeof args[0] == 'function') { + args.unshift([]); + } + + var ids = args[0], + callback = args[1], + scope = args[2]; + + if (!Array.isArray(ids)) { + ids = [ids]; + } + + if (!Array.isArray(ids)) { + this.exec('getSingleScheduled', Number(ids), callback, scope); + return; + } + + ids = this.convertIds(ids); + + this.exec('getScheduled', ids, callback, scope); +}; + +/** + * Property list for all scheduled notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllScheduled = function (callback, scope) { + this.exec('getScheduled', null, callback, scope); +}; + +/** + * Property list for given triggered notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getTriggered = function () { + var args = Array.apply(null, arguments); + + if (typeof args[0] == 'function') { + args.unshift([]); + } + + var ids = args[0], + callback = args[1], + scope = args[2]; + + if (!Array.isArray(ids)) { + ids = [ids]; + } + + if (!Array.isArray(ids)) { + this.exec('getSingleTriggered', Number(ids), callback, scope); + return; + } + + ids = this.convertIds(ids); + + this.exec('getTriggered', ids, callback, scope); +}; + +/** + * Property list for all triggered notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllTriggered = function (callback, scope) { + this.exec('getTriggered', null, callback, scope); +}; + +/** + * Informs if the app has the permission to show notifications. + * + * @param {Function} callback + * The function to be exec as the callback + * @param {Object?} scope + * The callback function's scope + */ +exports.hasPermission = function (callback, scope) { + var fn = this.createCallbackFn(callback, scope); + + if (device.platform != 'iOS') { + fn(true); + return; + } + + exec(fn, null, 'LocalNotification', 'hasPermission', []); +}; + +/** + * Register permission to show notifications if not already granted. + * + * @param {Function} callback + * The function to be exec as the callback + * @param {Object?} scope + * The callback function's scope + */ +exports.registerPermission = function (callback, scope) { + + if (this._registered) { + return this.hasPermission(callback, scope); + } else { + this._registered = true; + } + + var fn = this.createCallbackFn(callback, scope); + + if (device.platform != 'iOS') { + fn(true); + return; + } + + exec(fn, null, 'LocalNotification', 'registerPermission', []); +}; + + +/********** + * EVENTS * + **********/ + +/** + * Register callback for given event. + * + * @param {String} event + * The event's name + * @param {Function} callback + * The function to be exec as callback + * @param {Object?} scope + * The callback function's scope + */ +exports.on = function (event, callback, scope) { + + if (typeof callback !== "function") + return; + + if (!this._listener[event]) { + this._listener[event] = []; + } + + var item = [callback, scope || window]; + + this._listener[event].push(item); +}; + +/** + * Unregister callback for given event. + * + * @param {String} event + * The event's name + * @param {Function} callback + * The function to be exec as callback + */ +exports.un = function (event, callback) { + var listener = this._listener[event]; + + if (!listener) + return; + + for (var i = 0; i < listener.length; i++) { + var fn = listener[i][0]; + + if (fn == callback) { + listener.splice(i, 1); + break; + } + } +}; + +}); diff --git a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js new file mode 100644 index 0000000..b6237c2 --- /dev/null +++ b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js @@ -0,0 +1,315 @@ +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification.Util", function(require, exports, module) { /* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +var exec = require('cordova/exec'), + channel = require('cordova/channel'); + + +/*********** + * MEMBERS * + ***********/ + +// Default values +exports._defaults = { + text: '', + title: '', + sound: 'res://platform_default', + badge: 0, + id: 0, + data: undefined, + every: undefined, + at: undefined +}; + +// listener +exports._listener = {}; + +// Registered permission flag +exports._registered = false; + + +/******** + * UTIL * + ********/ + +/** + * Merge platform specific properties into the default ones. + * + * @return {Object} + * The default properties for the platform + */ +exports.applyPlatformSpecificOptions = function () { + var defaults = this._defaults; + + switch (device.platform) { + case 'Android': + defaults.icon = 'res://ic_popup_reminder'; + defaults.smallIcon = undefined; + defaults.ongoing = false; + defaults.autoClear = true; + defaults.led = 'FF0000'; + defaults.color = undefined; + break; + } + + return defaults; +}; + +/** + * Merge custom properties with the default values. + * + * @param {Object} options + * Set of custom values + * + * @retrun {Object} + * The merged property list + */ +exports.mergeWithDefaults = function (options) { + var defaults = this.getDefaults(); + + options.at = this.getValueFor(options, 'at', 'firstAt', 'date'); + options.text = this.getValueFor(options, 'text', 'message'); + options.data = this.getValueFor(options, 'data', 'json'); + + if (defaults.hasOwnProperty('autoClear')) { + options.autoClear = this.getValueFor(options, 'autoClear', 'autoCancel'); + } + + if (options.autoClear !== true && options.ongoing) { + options.autoClear = false; + } + + if (options.at === undefined || options.at === null) { + options.at = new Date(); + } + + for (var key in defaults) { + if (options[key] === null || options[key] === undefined) { + if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) { + options[key] = undefined; + } else { + options[key] = defaults[key]; + } + } + } + + for (key in options) { + if (!defaults.hasOwnProperty(key)) { + delete options[key]; + console.warn('Unknown property: ' + key); + } + } + + return options; +}; + +/** + * Convert the passed values to their required type. + * + * @param {Object} options + * Set of custom values + * + * @retrun {Object} + * The converted property list + */ +exports.convertProperties = function (options) { + + if (options.id) { + if (isNaN(options.id)) { + options.id = this.getDefaults().id; + console.warn('Id is not a number: ' + options.id); + } else { + options.id = Number(options.id); + } + } + + if (options.title) { + options.title = options.title.toString(); + } + + if (options.text) { + options.text = options.text.toString(); + } + + if (options.badge) { + if (isNaN(options.badge)) { + options.badge = this.getDefaults().badge; + console.warn('Badge number is not a number: ' + options.id); + } else { + options.badge = Number(options.badge); + } + } + + if (options.at) { + if (typeof options.at == 'object') { + options.at = options.at.getTime(); + } + + options.at = Math.round(options.at/1000); + } + + if (typeof options.data == 'object') { + options.data = JSON.stringify(options.data); + } + + if (options.every) { + if (device.platform == 'iOS' && typeof options.every != 'string') { + options.every = this.getDefaults().every; + var warning = 'Every option is not a string: ' + options.id; + warning += '. Expects one of: second, minute, hour, day, week, '; + warning += 'month, year on iOS.'; + console.warn(warning); + } + } + + return options; +}; + +/** + * Create callback, which will be executed within a specific scope. + * + * @param {Function} callbackFn + * The callback function + * @param {Object} scope + * The scope for the function + * + * @return {Function} + * The new callback function + */ +exports.createCallbackFn = function (callbackFn, scope) { + + if (typeof callbackFn != 'function') + return; + + return function () { + callbackFn.apply(scope || this, arguments); + }; +}; + +/** + * Convert the IDs to numbers. + * + * @param {String/Number[]} ids + * + * @return Array of Numbers + */ +exports.convertIds = function (ids) { + var convertedIds = []; + + for (var i = 0; i < ids.length; i++) { + convertedIds.push(Number(ids[i])); + } + + return convertedIds; +}; + +/** + * First found value for the given keys. + * + * @param {Object} options + * Object with key-value properties + * @param {String[]} keys* + * Key list + */ +exports.getValueFor = function (options) { + var keys = Array.apply(null, arguments).slice(1); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (options.hasOwnProperty(key)) { + return options[key]; + } + } +}; + +/** + * Fire event with given arguments. + * + * @param {String} event + * The event's name + * @param {args*} + * The callback's arguments + */ +exports.fireEvent = function (event) { + var args = Array.apply(null, arguments).slice(1), + listener = this._listener[event]; + + if (!listener) + return; + + for (var i = 0; i < listener.length; i++) { + var fn = listener[i][0], + scope = listener[i][1]; + + fn.apply(scope, args); + } +}; + +/** + * Execute the native counterpart. + * + * @param {String} action + * The name of the action + * @param args[] + * Array of arguments + * @param {Function} callback + * The callback function + * @param {Object} scope + * The scope for the function + */ +exports.exec = function (action, args, callback, scope) { + var fn = this.createCallbackFn(callback, scope), + params = []; + + if (Array.isArray(args)) { + params = args; + } else if (args) { + params.push(args); + } + + exec(fn, null, 'LocalNotification', action, params); +}; + + +/********* + * HOOKS * + *********/ + +// Called after 'deviceready' event +channel.deviceready.subscribe(function () { + // Device is ready now, the listeners are registered + // and all queued events can be executed. + exec(null, null, 'LocalNotification', 'deviceready', []); +}); + +// Called before 'deviceready' event +channel.onCordovaReady.subscribe(function () { + // Device plugin is ready now + channel.onCordovaInfoReady.subscribe(function () { + // Merge platform specifics into defaults + exports.applyPlatformSpecificOptions(); + }); +}); + +}); diff --git a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js new file mode 100644 index 0000000..57ebf8a --- /dev/null +++ b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js @@ -0,0 +1,378 @@ +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification", function(require, exports, module) { /* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + + +/************* + * INTERFACE * + *************/ + +/** + * Returns the default settings. + * + * @return {Object} + */ +exports.getDefaults = function () { + return this.core.getDefaults(); +}; + +/** + * Overwrite default settings. + * + * @param {Object} defaults + */ +exports.setDefaults = function (defaults) { + this.core.setDefaults(defaults); +}; + +/** + * Schedule a new local notification. + * + * @param {Object} notifications + * The notification properties + * @param {Function} callback + * A function to be called after the notification has been canceled + * @param {Object?} scope + * The scope for the callback function + * @param {Object?} args + * skipPermission:true schedules the notifications immediatly without + * registering or checking for permission + */ +exports.schedule = function (notifications, callback, scope, args) { + this.core.schedule(notifications, callback, scope, args); +}; + +/** + * Update existing notifications specified by IDs in options. + * + * @param {Object} notifications + * The notification properties to update + * @param {Function} callback + * A function to be called after the notification has been updated + * @param {Object?} scope + * The scope for the callback function + * @param {Object?} args + * skipPermission:true schedules the notifications immediatly without + * registering or checking for permission + */ +exports.update = function (notifications, callback, scope, args) { + this.core.update(notifications, callback, scope, args); +}; + +/** + * Clear the specified notification. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A function to be called after the notification has been cleared + * @param {Object?} scope + * The scope for the callback function + */ +exports.clear = function (ids, callback, scope) { + this.core.clear(ids, callback, scope); +}; + +/** + * Clear all previously sheduled notifications. + * + * @param {Function} callback + * A function to be called after all notifications have been cleared + * @param {Object?} scope + * The scope for the callback function + */ +exports.clearAll = function (callback, scope) { + this.core.clearAll(callback, scope); +}; + +/** + * Cancel the specified notifications. + * + * @param {String[]} ids + * The IDs of the notifications + * @param {Function} callback + * A function to be called after the notifications has been canceled + * @param {Object?} scope + * The scope for the callback function + */ +exports.cancel = function (ids, callback, scope) { + this.core.cancel(ids, callback, scope); +}; + +/** + * Remove all previously registered notifications. + * + * @param {Function} callback + * A function to be called after all notifications have been canceled + * @param {Object?} scope + * The scope for the callback function + */ +exports.cancelAll = function (callback, scope) { + this.core.cancelAll(callback, scope); +}; + +/** + * Check if a notification with an ID is present. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isPresent = function (id, callback, scope) { + this.core.isPresent(id, callback, scope); +}; + +/** + * Check if a notification with an ID is scheduled. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isScheduled = function (id, callback, scope) { + this.core.isScheduled(id, callback, scope); +}; + +/** + * Check if a notification with an ID was triggered. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isTriggered = function (id, callback, scope) { + this.core.isTriggered(id, callback, scope); +}; + +/** + * List all local notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllIds = function (callback, scope) { + this.core.getAllIds(callback, scope); +}; + +/** + * Alias for `getAllIds`. + */ +exports.getIds = function () { + this.getAllIds.apply(this, arguments); +}; + +/** + * List all scheduled notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getScheduledIds = function (callback, scope) { + this.core.getScheduledIds(callback, scope); +}; + +/** + * List all triggered notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getTriggeredIds = function (callback, scope) { + this.core.getTriggeredIds(callback, scope); +}; + +/** + * Property list for given local notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.get = function () { + this.core.get.apply(this.core, arguments); +}; + +/** + * Property list for all local notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAll = function (callback, scope) { + this.core.getAll(callback, scope); +}; + +/** + * Property list for given scheduled notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getScheduled = function () { + this.core.getScheduled.apply(this.core, arguments); +}; + +/** + * Property list for all scheduled notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllScheduled = function (callback, scope) { + this.core.getAllScheduled(callback, scope); +}; + +/** + * Property list for given triggered notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getTriggered = function () { + this.core.getTriggered.apply(this.core, arguments); +}; + +/** + * Property list for all triggered notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllTriggered = function (callback, scope) { + this.core.getAllTriggered(callback, scope); +}; + +/** + * Informs if the app has the permission to show notifications. + * + * @param {Function} callback + * The function to be exec as the callback + * @param {Object?} scope + * The callback function's scope + */ +exports.hasPermission = function (callback, scope) { + this.core.hasPermission(callback, scope); +}; + +/** + * Register permission to show notifications if not already granted. + * + * @param {Function} callback + * The function to be exec as the callback + * @param {Object?} scope + * The callback function's scope + */ +exports.registerPermission = function (callback, scope) { + this.core.registerPermission(callback, scope); +}; + + +/**************** + * DEPRECATIONS * + ****************/ + +/** + * Schedule a new local notification. + */ +exports.add = function () { + console.warn('Depreated: Please use `notification.local.schedule` instead.'); + + this.schedule.apply(this, arguments); +}; + +/** + * Register permission to show notifications + * if not already granted. + */ +exports.promptForPermission = function () { + console.warn('Depreated: Please use `notification.local.registerPermission` instead.'); + + this.registerPermission.apply(this, arguments); +}; + + +/********** + * EVENTS * + **********/ + +/** + * Register callback for given event. + * + * @param {String} event + * The event's name + * @param {Function} callback + * The function to be exec as callback + * @param {Object?} scope + * The callback function's scope + */ +exports.on = function (event, callback, scope) { + this.core.on(event, callback, scope); +}; + +/** + * Unregister callback for given event. + * + * @param {String} event + * The event's name + * @param {Function} callback + * The function to be exec as callback + */ +exports.un = function (event, callback) { + this.core.un(event, callback, scope); +}; + +}); diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 969c2e7..906fba2 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -122,6 +122,7 @@ function checkDistractedReminder() { if (localStorage.getItem("score") > score) { if ((localStorage.getItem("score") - score) > 15) { returnToStudyAlert(); + returnToStudyNotif(); } } } @@ -155,6 +156,14 @@ function onConfirmReturn(buttonIndex) { //continue monitoring (do nothing) } } + +function returnToStudyNotif() { + cordova.plugins.notification.local.schedule({ + id: 20, + title: "Sorry to interrupt, but...", + text: "Seems like you may have become a little distracted. Have you finished your study session?" + }); +} //End of Alert the user that they've been distracted for a while------------------------------------------------- @@ -162,7 +171,7 @@ function onConfirmReturn(buttonIndex) { //Alert the user that they've been studying well for so much time and they might consider having a break---------- function takeABreakAlert() { - navigator.notification.beep(1); + navigator.notification.beep(2); if (breakAlertUp != true) { breakAlertUp = true; navigator.notification.confirm( @@ -191,12 +200,13 @@ function checkBreakReminder() { //check if user should consider having a break from studying - if (timeSinceBreak > getOptimalStudyPeriod()) { //if time since break is greater than 50 mins (3000000), 60000 1 min + if (timeSinceBreak > 30000) { //if time since break is greater than 50 mins (3000000), 60000 1 min var score = createStudyScore(micNotStudying, micIntervalCount, accelNotStudying, accelIntervalCount); if (localStorage.getItem("oldScore") != null) { if ((localStorage.getItem("oldScore") - 5) <= score) { if (score > 60) { //prompt break + takeABreakNotif(); takeABreakAlert(); timeResumed = new Date(); } @@ -205,6 +215,14 @@ function checkBreakReminder() { } } +function takeABreakNotif() { + cordova.plugins.notification.local.schedule({ + id: 10, + title: "Sorry to interrupt, but...", + text: "Seems like you've been studying well for quite some time now. We recommend a 10 minute break for optimum brain functionality!" + }); +} + function checkScore() { var score = createStudyScore(micNotStudying, micIntervalCount, accelNotStudying, accelIntervalCount);; localStorage.setItem("oldScore", score); diff --git a/platforms/android/assets/www/resources/js/notifications.js b/platforms/android/assets/www/resources/js/notifications.js new file mode 100644 index 0000000..79042eb --- /dev/null +++ b/platforms/android/assets/www/resources/js/notifications.js @@ -0,0 +1,14 @@ +function takeABreakNotif() { + cordova.plugins.notification.local.schedule({ + id: 10, + title: "Sorry to interrupt, but...", + text: "Seems like you've been studying well for quite some time now. We recommend a 10 minute break for optimum brain functionality!" + }); +} + + +cordova.plugins.notification.local.on("click", function(notification) { + if (notification.id == 10) { + takeABreakAlert(); + } +}); \ No newline at end of file diff --git a/platforms/android/build.gradle b/platforms/android/build.gradle index 337a198..3e75cfa 100644 --- a/platforms/android/build.gradle +++ b/platforms/android/build.gradle @@ -245,6 +245,7 @@ dependencies { // SUB-PROJECT DEPENDENCIES START debugCompile project(path: "CordovaLib", configuration: "debug") releaseCompile project(path: "CordovaLib", configuration: "release") + compile "com.android.support:support-v4:+" // SUB-PROJECT DEPENDENCIES END } diff --git a/platforms/android/platform_www/cordova_plugins.js b/platforms/android/platform_www/cordova_plugins.js index 3d13c71..f4cde36 100644 --- a/platforms/android/platform_www/cordova_plugins.js +++ b/platforms/android/platform_www/cordova_plugins.js @@ -78,6 +78,33 @@ module.exports = [ "clobbers": [ "window.powerManagement" ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "clobbers": [ + "cordova.plugins.notification.local", + "plugin.notification.local" + ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Core", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "clobbers": [ + "cordova.plugins.notification.local.core", + "plugin.notification.local.core" + ] + }, + { + "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js", + "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Util", + "pluginId": "de.appplant.cordova.plugin.local-notification", + "merges": [ + "cordova.plugins.notification.local.core", + "plugin.notification.local.core" + ] } ]; module.exports.metadata = @@ -90,7 +117,9 @@ module.exports.metadata = "cordova-plugin-dialogs": "1.2.0", "cordova-plugin-device": "1.1.1", "cordova-plugin-background-mode": "0.6.5", - "at.gofg.sportscomputer.powermanagement": "1.1.0" + "at.gofg.sportscomputer.powermanagement": "1.1.0", + "cordova-plugin-app-event": "1.2.0", + "de.appplant.cordova.plugin.local-notification": "0.8.4" } // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js b/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js new file mode 100644 index 0000000..2ec6d3d --- /dev/null +++ b/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js @@ -0,0 +1,509 @@ +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification.Core", function(require, exports, module) { /* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +var exec = require('cordova/exec'); + + +/******** + * CORE * + ********/ + +/** + * Returns the default settings. + * + * @return {Object} + */ +exports.getDefaults = function () { + return this._defaults; +}; + +/** + * Overwrite default settings. + * + * @param {Object} defaults + */ +exports.setDefaults = function (newDefaults) { + var defaults = this.getDefaults(); + + for (var key in defaults) { + if (newDefaults.hasOwnProperty(key)) { + defaults[key] = newDefaults[key]; + } + } +}; + +/** + * Schedule a new local notification. + * + * @param {Object} msgs + * The notification properties + * @param {Function} callback + * A function to be called after the notification has been canceled + * @param {Object?} scope + * The scope for the callback function + * @param {Object?} args + * skipPermission:true schedules the notifications immediatly without + * registering or checking for permission + */ +exports.schedule = function (msgs, callback, scope, args) { + var fn = function(granted) { + + if (!granted) return; + + var notifications = Array.isArray(msgs) ? msgs : [msgs]; + + for (var i = 0; i < notifications.length; i++) { + var notification = notifications[i]; + + this.mergeWithDefaults(notification); + this.convertProperties(notification); + } + + this.exec('schedule', notifications, callback, scope); + }; + + if (args && args.skipPermission) { + fn.call(this, true); + } else { + this.registerPermission(fn, this); + } +}; + +/** + * Update existing notifications specified by IDs in options. + * + * @param {Object} notifications + * The notification properties to update + * @param {Function} callback + * A function to be called after the notification has been updated + * @param {Object?} scope + * The scope for the callback function + * @param {Object?} args + * skipPermission:true schedules the notifications immediatly without + * registering or checking for permission + */ +exports.update = function (msgs, callback, scope, args) { + var fn = function(granted) { + + if (!granted) return; + + var notifications = Array.isArray(msgs) ? msgs : [msgs]; + + for (var i = 0; i < notifications.length; i++) { + var notification = notifications[i]; + + this.convertProperties(notification); + } + + this.exec('update', notifications, callback, scope); + }; + + if (args && args.skipPermission) { + fn.call(this, true); + } else { + this.registerPermission(fn, this); + } +}; + +/** + * Clear the specified notification. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A function to be called after the notification has been cleared + * @param {Object?} scope + * The scope for the callback function + */ +exports.clear = function (ids, callback, scope) { + ids = Array.isArray(ids) ? ids : [ids]; + ids = this.convertIds(ids); + + this.exec('clear', ids, callback, scope); +}; + +/** + * Clear all previously sheduled notifications. + * + * @param {Function} callback + * A function to be called after all notifications have been cleared + * @param {Object?} scope + * The scope for the callback function + */ +exports.clearAll = function (callback, scope) { + this.exec('clearAll', null, callback, scope); +}; + +/** + * Cancel the specified notifications. + * + * @param {String[]} ids + * The IDs of the notifications + * @param {Function} callback + * A function to be called after the notifications has been canceled + * @param {Object?} scope + * The scope for the callback function + */ +exports.cancel = function (ids, callback, scope) { + ids = Array.isArray(ids) ? ids : [ids]; + ids = this.convertIds(ids); + + this.exec('cancel', ids, callback, scope); +}; + +/** + * Remove all previously registered notifications. + * + * @param {Function} callback + * A function to be called after all notifications have been canceled + * @param {Object?} scope + * The scope for the callback function + */ +exports.cancelAll = function (callback, scope) { + this.exec('cancelAll', null, callback, scope); +}; + +/** + * Check if a notification with an ID is present. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isPresent = function (id, callback, scope) { + this.exec('isPresent', id || 0, callback, scope); +}; + +/** + * Check if a notification with an ID is scheduled. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isScheduled = function (id, callback, scope) { + this.exec('isScheduled', id || 0, callback, scope); +}; + +/** + * Check if a notification with an ID was triggered. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isTriggered = function (id, callback, scope) { + this.exec('isTriggered', id || 0, callback, scope); +}; + +/** + * List all local notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllIds = function (callback, scope) { + this.exec('getAllIds', null, callback, scope); +}; + +/** + * Alias for `getAllIds`. + */ +exports.getIds = function () { + this.getAllIds.apply(this, arguments); +}; + +/** + * List all scheduled notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getScheduledIds = function (callback, scope) { + this.exec('getScheduledIds', null, callback, scope); +}; + +/** + * List all triggered notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getTriggeredIds = function (callback, scope) { + this.exec('getTriggeredIds', null, callback, scope); +}; + +/** + * Property list for given local notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.get = function () { + var args = Array.apply(null, arguments); + + if (typeof args[0] == 'function') { + args.unshift([]); + } + + var ids = args[0], + callback = args[1], + scope = args[2]; + + if (!Array.isArray(ids)) { + this.exec('getSingle', Number(ids), callback, scope); + return; + } + + ids = this.convertIds(ids); + + this.exec('getAll', ids, callback, scope); +}; + +/** + * Property list for all local notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAll = function (callback, scope) { + this.exec('getAll', null, callback, scope); +}; + +/** + * Property list for given scheduled notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getScheduled = function () { + var args = Array.apply(null, arguments); + + if (typeof args[0] == 'function') { + args.unshift([]); + } + + var ids = args[0], + callback = args[1], + scope = args[2]; + + if (!Array.isArray(ids)) { + ids = [ids]; + } + + if (!Array.isArray(ids)) { + this.exec('getSingleScheduled', Number(ids), callback, scope); + return; + } + + ids = this.convertIds(ids); + + this.exec('getScheduled', ids, callback, scope); +}; + +/** + * Property list for all scheduled notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllScheduled = function (callback, scope) { + this.exec('getScheduled', null, callback, scope); +}; + +/** + * Property list for given triggered notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getTriggered = function () { + var args = Array.apply(null, arguments); + + if (typeof args[0] == 'function') { + args.unshift([]); + } + + var ids = args[0], + callback = args[1], + scope = args[2]; + + if (!Array.isArray(ids)) { + ids = [ids]; + } + + if (!Array.isArray(ids)) { + this.exec('getSingleTriggered', Number(ids), callback, scope); + return; + } + + ids = this.convertIds(ids); + + this.exec('getTriggered', ids, callback, scope); +}; + +/** + * Property list for all triggered notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllTriggered = function (callback, scope) { + this.exec('getTriggered', null, callback, scope); +}; + +/** + * Informs if the app has the permission to show notifications. + * + * @param {Function} callback + * The function to be exec as the callback + * @param {Object?} scope + * The callback function's scope + */ +exports.hasPermission = function (callback, scope) { + var fn = this.createCallbackFn(callback, scope); + + if (device.platform != 'iOS') { + fn(true); + return; + } + + exec(fn, null, 'LocalNotification', 'hasPermission', []); +}; + +/** + * Register permission to show notifications if not already granted. + * + * @param {Function} callback + * The function to be exec as the callback + * @param {Object?} scope + * The callback function's scope + */ +exports.registerPermission = function (callback, scope) { + + if (this._registered) { + return this.hasPermission(callback, scope); + } else { + this._registered = true; + } + + var fn = this.createCallbackFn(callback, scope); + + if (device.platform != 'iOS') { + fn(true); + return; + } + + exec(fn, null, 'LocalNotification', 'registerPermission', []); +}; + + +/********** + * EVENTS * + **********/ + +/** + * Register callback for given event. + * + * @param {String} event + * The event's name + * @param {Function} callback + * The function to be exec as callback + * @param {Object?} scope + * The callback function's scope + */ +exports.on = function (event, callback, scope) { + + if (typeof callback !== "function") + return; + + if (!this._listener[event]) { + this._listener[event] = []; + } + + var item = [callback, scope || window]; + + this._listener[event].push(item); +}; + +/** + * Unregister callback for given event. + * + * @param {String} event + * The event's name + * @param {Function} callback + * The function to be exec as callback + */ +exports.un = function (event, callback) { + var listener = this._listener[event]; + + if (!listener) + return; + + for (var i = 0; i < listener.length; i++) { + var fn = listener[i][0]; + + if (fn == callback) { + listener.splice(i, 1); + break; + } + } +}; + +}); diff --git a/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js b/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js new file mode 100644 index 0000000..b6237c2 --- /dev/null +++ b/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js @@ -0,0 +1,315 @@ +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification.Util", function(require, exports, module) { /* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +var exec = require('cordova/exec'), + channel = require('cordova/channel'); + + +/*********** + * MEMBERS * + ***********/ + +// Default values +exports._defaults = { + text: '', + title: '', + sound: 'res://platform_default', + badge: 0, + id: 0, + data: undefined, + every: undefined, + at: undefined +}; + +// listener +exports._listener = {}; + +// Registered permission flag +exports._registered = false; + + +/******** + * UTIL * + ********/ + +/** + * Merge platform specific properties into the default ones. + * + * @return {Object} + * The default properties for the platform + */ +exports.applyPlatformSpecificOptions = function () { + var defaults = this._defaults; + + switch (device.platform) { + case 'Android': + defaults.icon = 'res://ic_popup_reminder'; + defaults.smallIcon = undefined; + defaults.ongoing = false; + defaults.autoClear = true; + defaults.led = 'FF0000'; + defaults.color = undefined; + break; + } + + return defaults; +}; + +/** + * Merge custom properties with the default values. + * + * @param {Object} options + * Set of custom values + * + * @retrun {Object} + * The merged property list + */ +exports.mergeWithDefaults = function (options) { + var defaults = this.getDefaults(); + + options.at = this.getValueFor(options, 'at', 'firstAt', 'date'); + options.text = this.getValueFor(options, 'text', 'message'); + options.data = this.getValueFor(options, 'data', 'json'); + + if (defaults.hasOwnProperty('autoClear')) { + options.autoClear = this.getValueFor(options, 'autoClear', 'autoCancel'); + } + + if (options.autoClear !== true && options.ongoing) { + options.autoClear = false; + } + + if (options.at === undefined || options.at === null) { + options.at = new Date(); + } + + for (var key in defaults) { + if (options[key] === null || options[key] === undefined) { + if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) { + options[key] = undefined; + } else { + options[key] = defaults[key]; + } + } + } + + for (key in options) { + if (!defaults.hasOwnProperty(key)) { + delete options[key]; + console.warn('Unknown property: ' + key); + } + } + + return options; +}; + +/** + * Convert the passed values to their required type. + * + * @param {Object} options + * Set of custom values + * + * @retrun {Object} + * The converted property list + */ +exports.convertProperties = function (options) { + + if (options.id) { + if (isNaN(options.id)) { + options.id = this.getDefaults().id; + console.warn('Id is not a number: ' + options.id); + } else { + options.id = Number(options.id); + } + } + + if (options.title) { + options.title = options.title.toString(); + } + + if (options.text) { + options.text = options.text.toString(); + } + + if (options.badge) { + if (isNaN(options.badge)) { + options.badge = this.getDefaults().badge; + console.warn('Badge number is not a number: ' + options.id); + } else { + options.badge = Number(options.badge); + } + } + + if (options.at) { + if (typeof options.at == 'object') { + options.at = options.at.getTime(); + } + + options.at = Math.round(options.at/1000); + } + + if (typeof options.data == 'object') { + options.data = JSON.stringify(options.data); + } + + if (options.every) { + if (device.platform == 'iOS' && typeof options.every != 'string') { + options.every = this.getDefaults().every; + var warning = 'Every option is not a string: ' + options.id; + warning += '. Expects one of: second, minute, hour, day, week, '; + warning += 'month, year on iOS.'; + console.warn(warning); + } + } + + return options; +}; + +/** + * Create callback, which will be executed within a specific scope. + * + * @param {Function} callbackFn + * The callback function + * @param {Object} scope + * The scope for the function + * + * @return {Function} + * The new callback function + */ +exports.createCallbackFn = function (callbackFn, scope) { + + if (typeof callbackFn != 'function') + return; + + return function () { + callbackFn.apply(scope || this, arguments); + }; +}; + +/** + * Convert the IDs to numbers. + * + * @param {String/Number[]} ids + * + * @return Array of Numbers + */ +exports.convertIds = function (ids) { + var convertedIds = []; + + for (var i = 0; i < ids.length; i++) { + convertedIds.push(Number(ids[i])); + } + + return convertedIds; +}; + +/** + * First found value for the given keys. + * + * @param {Object} options + * Object with key-value properties + * @param {String[]} keys* + * Key list + */ +exports.getValueFor = function (options) { + var keys = Array.apply(null, arguments).slice(1); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (options.hasOwnProperty(key)) { + return options[key]; + } + } +}; + +/** + * Fire event with given arguments. + * + * @param {String} event + * The event's name + * @param {args*} + * The callback's arguments + */ +exports.fireEvent = function (event) { + var args = Array.apply(null, arguments).slice(1), + listener = this._listener[event]; + + if (!listener) + return; + + for (var i = 0; i < listener.length; i++) { + var fn = listener[i][0], + scope = listener[i][1]; + + fn.apply(scope, args); + } +}; + +/** + * Execute the native counterpart. + * + * @param {String} action + * The name of the action + * @param args[] + * Array of arguments + * @param {Function} callback + * The callback function + * @param {Object} scope + * The scope for the function + */ +exports.exec = function (action, args, callback, scope) { + var fn = this.createCallbackFn(callback, scope), + params = []; + + if (Array.isArray(args)) { + params = args; + } else if (args) { + params.push(args); + } + + exec(fn, null, 'LocalNotification', action, params); +}; + + +/********* + * HOOKS * + *********/ + +// Called after 'deviceready' event +channel.deviceready.subscribe(function () { + // Device is ready now, the listeners are registered + // and all queued events can be executed. + exec(null, null, 'LocalNotification', 'deviceready', []); +}); + +// Called before 'deviceready' event +channel.onCordovaReady.subscribe(function () { + // Device plugin is ready now + channel.onCordovaInfoReady.subscribe(function () { + // Merge platform specifics into defaults + exports.applyPlatformSpecificOptions(); + }); +}); + +}); diff --git a/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js b/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js new file mode 100644 index 0000000..57ebf8a --- /dev/null +++ b/platforms/android/platform_www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js @@ -0,0 +1,378 @@ +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification", function(require, exports, module) { /* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + + +/************* + * INTERFACE * + *************/ + +/** + * Returns the default settings. + * + * @return {Object} + */ +exports.getDefaults = function () { + return this.core.getDefaults(); +}; + +/** + * Overwrite default settings. + * + * @param {Object} defaults + */ +exports.setDefaults = function (defaults) { + this.core.setDefaults(defaults); +}; + +/** + * Schedule a new local notification. + * + * @param {Object} notifications + * The notification properties + * @param {Function} callback + * A function to be called after the notification has been canceled + * @param {Object?} scope + * The scope for the callback function + * @param {Object?} args + * skipPermission:true schedules the notifications immediatly without + * registering or checking for permission + */ +exports.schedule = function (notifications, callback, scope, args) { + this.core.schedule(notifications, callback, scope, args); +}; + +/** + * Update existing notifications specified by IDs in options. + * + * @param {Object} notifications + * The notification properties to update + * @param {Function} callback + * A function to be called after the notification has been updated + * @param {Object?} scope + * The scope for the callback function + * @param {Object?} args + * skipPermission:true schedules the notifications immediatly without + * registering or checking for permission + */ +exports.update = function (notifications, callback, scope, args) { + this.core.update(notifications, callback, scope, args); +}; + +/** + * Clear the specified notification. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A function to be called after the notification has been cleared + * @param {Object?} scope + * The scope for the callback function + */ +exports.clear = function (ids, callback, scope) { + this.core.clear(ids, callback, scope); +}; + +/** + * Clear all previously sheduled notifications. + * + * @param {Function} callback + * A function to be called after all notifications have been cleared + * @param {Object?} scope + * The scope for the callback function + */ +exports.clearAll = function (callback, scope) { + this.core.clearAll(callback, scope); +}; + +/** + * Cancel the specified notifications. + * + * @param {String[]} ids + * The IDs of the notifications + * @param {Function} callback + * A function to be called after the notifications has been canceled + * @param {Object?} scope + * The scope for the callback function + */ +exports.cancel = function (ids, callback, scope) { + this.core.cancel(ids, callback, scope); +}; + +/** + * Remove all previously registered notifications. + * + * @param {Function} callback + * A function to be called after all notifications have been canceled + * @param {Object?} scope + * The scope for the callback function + */ +exports.cancelAll = function (callback, scope) { + this.core.cancelAll(callback, scope); +}; + +/** + * Check if a notification with an ID is present. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isPresent = function (id, callback, scope) { + this.core.isPresent(id, callback, scope); +}; + +/** + * Check if a notification with an ID is scheduled. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isScheduled = function (id, callback, scope) { + this.core.isScheduled(id, callback, scope); +}; + +/** + * Check if a notification with an ID was triggered. + * + * @param {String} id + * The ID of the notification + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.isTriggered = function (id, callback, scope) { + this.core.isTriggered(id, callback, scope); +}; + +/** + * List all local notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllIds = function (callback, scope) { + this.core.getAllIds(callback, scope); +}; + +/** + * Alias for `getAllIds`. + */ +exports.getIds = function () { + this.getAllIds.apply(this, arguments); +}; + +/** + * List all scheduled notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getScheduledIds = function (callback, scope) { + this.core.getScheduledIds(callback, scope); +}; + +/** + * List all triggered notification IDs. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getTriggeredIds = function (callback, scope) { + this.core.getTriggeredIds(callback, scope); +}; + +/** + * Property list for given local notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.get = function () { + this.core.get.apply(this.core, arguments); +}; + +/** + * Property list for all local notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAll = function (callback, scope) { + this.core.getAll(callback, scope); +}; + +/** + * Property list for given scheduled notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getScheduled = function () { + this.core.getScheduled.apply(this.core, arguments); +}; + +/** + * Property list for all scheduled notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllScheduled = function (callback, scope) { + this.core.getAllScheduled(callback, scope); +}; + +/** + * Property list for given triggered notifications. + * If called without IDs, all notification will be returned. + * + * @param {Number[]?} ids + * Set of notification IDs + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getTriggered = function () { + this.core.getTriggered.apply(this.core, arguments); +}; + +/** + * Property list for all triggered notifications. + * + * @param {Function} callback + * A callback function to be called with the list + * @param {Object?} scope + * The scope for the callback function + */ +exports.getAllTriggered = function (callback, scope) { + this.core.getAllTriggered(callback, scope); +}; + +/** + * Informs if the app has the permission to show notifications. + * + * @param {Function} callback + * The function to be exec as the callback + * @param {Object?} scope + * The callback function's scope + */ +exports.hasPermission = function (callback, scope) { + this.core.hasPermission(callback, scope); +}; + +/** + * Register permission to show notifications if not already granted. + * + * @param {Function} callback + * The function to be exec as the callback + * @param {Object?} scope + * The callback function's scope + */ +exports.registerPermission = function (callback, scope) { + this.core.registerPermission(callback, scope); +}; + + +/**************** + * DEPRECATIONS * + ****************/ + +/** + * Schedule a new local notification. + */ +exports.add = function () { + console.warn('Depreated: Please use `notification.local.schedule` instead.'); + + this.schedule.apply(this, arguments); +}; + +/** + * Register permission to show notifications + * if not already granted. + */ +exports.promptForPermission = function () { + console.warn('Depreated: Please use `notification.local.registerPermission` instead.'); + + this.registerPermission.apply(this, arguments); +}; + + +/********** + * EVENTS * + **********/ + +/** + * Register callback for given event. + * + * @param {String} event + * The event's name + * @param {Function} callback + * The function to be exec as callback + * @param {Object?} scope + * The callback function's scope + */ +exports.on = function (event, callback, scope) { + this.core.on(event, callback, scope); +}; + +/** + * Unregister callback for given event. + * + * @param {String} event + * The event's name + * @param {Function} callback + * The function to be exec as callback + */ +exports.un = function (event, callback) { + this.core.un(event, callback, scope); +}; + +}); diff --git a/platforms/android/project.properties b/platforms/android/project.properties index b06f0fa..49045b0 100644 --- a/platforms/android/project.properties +++ b/platforms/android/project.properties @@ -12,3 +12,4 @@ # Project target. target=android-22 android.library.reference.1=CordovaLib +cordova.system.library.1=com.android.support:support-v4:+ \ No newline at end of file diff --git a/platforms/android/res/xml/config.xml b/platforms/android/res/xml/config.xml index 8931dbe..cd7484a 100644 --- a/platforms/android/res/xml/config.xml +++ b/platforms/android/res/xml/config.xml @@ -27,6 +27,9 @@ + + + StudyWell diff --git a/platforms/android/src/de/appplant/cordova/plugin/localnotification/ClearReceiver.java b/platforms/android/src/de/appplant/cordova/plugin/localnotification/ClearReceiver.java new file mode 100644 index 0000000..e0892e3 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/localnotification/ClearReceiver.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import de.appplant.cordova.plugin.notification.Notification; + + +/** + * The clear intent receiver is triggered when the user clears a + * notification manually. It un-persists the cleared notification from the + * shared preferences. + */ +public class ClearReceiver extends de.appplant.cordova.plugin.notification.ClearReceiver { + + /** + * Called when a local notification was cleared from outside of the app. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onClear (Notification notification) { + super.onClear(notification); + LocalNotification.fireEvent("clear", notification); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/localnotification/ClickActivity.java b/platforms/android/src/de/appplant/cordova/plugin/localnotification/ClickActivity.java new file mode 100644 index 0000000..85a5355 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/localnotification/ClickActivity.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import de.appplant.cordova.plugin.notification.Builder; +import de.appplant.cordova.plugin.notification.Notification; +import de.appplant.cordova.plugin.notification.TriggerReceiver; + +/** + * The receiver activity is triggered when a notification is clicked by a user. + * The activity calls the background callback and brings the launch intent + * up to foreground. + */ +public class ClickActivity extends de.appplant.cordova.plugin.notification.ClickActivity { + + /** + * Called when local notification was clicked by the user. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onClick(Notification notification) { + LocalNotification.fireEvent("click", notification); + + super.onClick(notification); + + if (notification.getOptions().isOngoing()) + return; + + String event = notification.isRepeating() ? "clear" : "cancel"; + LocalNotification.fireEvent(event, notification); + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + @Override + public Notification buildNotification (Builder builder) { + return builder + .setTriggerReceiver(TriggerReceiver.class) + .build(); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/localnotification/LocalNotification.java b/platforms/android/src/de/appplant/cordova/plugin/localnotification/LocalNotification.java new file mode 100644 index 0000000..b4be09f --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/localnotification/LocalNotification.java @@ -0,0 +1,622 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import android.app.Activity; + +import org.apache.cordova.CallbackContext; +import org.apache.cordova.CordovaInterface; +import org.apache.cordova.CordovaPlugin; +import org.apache.cordova.CordovaWebView; +import org.apache.cordova.PluginResult; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import de.appplant.cordova.plugin.notification.Manager; +import de.appplant.cordova.plugin.notification.Notification; + +/** + * This plugin utilizes the Android AlarmManager in combination with local + * notifications. When a local notification is scheduled the alarm manager takes + * care of firing the event. When the event is processed, a notification is put + * in the Android notification center and status bar. + */ +public class LocalNotification extends CordovaPlugin { + + // Reference to the web view for static access + private static CordovaWebView webView = null; + + // Indicates if the device is ready (to receive events) + private static Boolean deviceready = false; + + // To inform the user about the state of the app in callbacks + protected static Boolean isInBackground = true; + + // Queues all events before deviceready + private static ArrayList eventQueue = new ArrayList(); + + /** + * Called after plugin construction and fields have been initialized. + * Prefer to use pluginInitialize instead since there is no value in + * having parameters on the initialize() function. + * + * pluginInitialize is not available for cordova 3.0-3.5 ! + */ + @Override + public void initialize (CordovaInterface cordova, CordovaWebView webView) { + LocalNotification.webView = super.webView; + } + + /** + * Called when the system is about to start resuming a previous activity. + * + * @param multitasking + * Flag indicating if multitasking is turned on for app + */ + @Override + public void onPause(boolean multitasking) { + super.onPause(multitasking); + isInBackground = true; + } + + /** + * Called when the activity will start interacting with the user. + * + * @param multitasking + * Flag indicating if multitasking is turned on for app + */ + @Override + public void onResume(boolean multitasking) { + super.onResume(multitasking); + isInBackground = false; + deviceready(); + } + + /** + * The final call you receive before your activity is destroyed. + */ + @Override + public void onDestroy() { + deviceready = false; + isInBackground = true; + } + + /** + * Executes the request. + * + * This method is called from the WebView thread. To do a non-trivial + * amount of work, use: + * cordova.getThreadPool().execute(runnable); + * + * To run on the UI thread, use: + * cordova.getActivity().runOnUiThread(runnable); + * + * @param action + * The action to execute. + * @param args + * The exec() arguments in JSON form. + * @param command + * The callback context used when calling back into JavaScript. + * @return + * Whether the action was valid. + */ + @Override + public boolean execute (final String action, final JSONArray args, + final CallbackContext command) throws JSONException { + + Notification.setDefaultTriggerReceiver(TriggerReceiver.class); + + cordova.getThreadPool().execute(new Runnable() { + public void run() { + if (action.equals("schedule")) { + schedule(args); + command.success(); + } + else if (action.equals("update")) { + update(args); + command.success(); + } + else if (action.equals("cancel")) { + cancel(args); + command.success(); + } + else if (action.equals("cancelAll")) { + cancelAll(); + command.success(); + } + else if (action.equals("clear")) { + clear(args); + command.success(); + } + else if (action.equals("clearAll")) { + clearAll(); + command.success(); + } + else if (action.equals("isPresent")) { + isPresent(args.optInt(0), command); + } + else if (action.equals("isScheduled")) { + isScheduled(args.optInt(0), command); + } + else if (action.equals("isTriggered")) { + isTriggered(args.optInt(0), command); + } + else if (action.equals("getAllIds")) { + getAllIds(command); + } + else if (action.equals("getScheduledIds")) { + getScheduledIds(command); + } + else if (action.equals("getTriggeredIds")) { + getTriggeredIds(command); + } + else if (action.equals("getSingle")) { + getSingle(args, command); + } + else if (action.equals("getSingleScheduled")) { + getSingleScheduled(args, command); + } + else if (action.equals("getSingleTriggered")) { + getSingleTriggered(args, command); + } + else if (action.equals("getAll")) { + getAll(args, command); + } + else if (action.equals("getScheduled")) { + getScheduled(args, command); + } + else if (action.equals("getTriggered")) { + getTriggered(args, command); + } + else if (action.equals("deviceready")) { + deviceready(); + } + } + }); + + return true; + } + + /** + * Schedule multiple local notifications. + * + * @param notifications + * Properties for each local notification + */ + private void schedule (JSONArray notifications) { + for (int i = 0; i < notifications.length(); i++) { + JSONObject options = notifications.optJSONObject(i); + + Notification notification = + getNotificationMgr().schedule(options, TriggerReceiver.class); + + fireEvent("schedule", notification); + } + } + + /** + * Update multiple local notifications. + * + * @param updates + * Notification properties including their IDs + */ + private void update (JSONArray updates) { + for (int i = 0; i < updates.length(); i++) { + JSONObject update = updates.optJSONObject(i); + int id = update.optInt("id", 0); + + Notification notification = + getNotificationMgr().update(id, update, TriggerReceiver.class); + + if (notification == null) + continue; + + fireEvent("update", notification); + } + } + + /** + * Cancel multiple local notifications. + * + * @param ids + * Set of local notification IDs + */ + private void cancel (JSONArray ids) { + for (int i = 0; i < ids.length(); i++) { + int id = ids.optInt(i, 0); + + Notification notification = + getNotificationMgr().cancel(id); + + if (notification == null) + continue; + + fireEvent("cancel", notification); + } + } + + /** + * Cancel all scheduled notifications. + */ + private void cancelAll() { + getNotificationMgr().cancelAll(); + fireEvent("cancelall"); + } + + /** + * Clear multiple local notifications without canceling them. + * + * @param ids + * Set of local notification IDs + */ + private void clear(JSONArray ids){ + for (int i = 0; i < ids.length(); i++) { + int id = ids.optInt(i, 0); + + Notification notification = + getNotificationMgr().clear(id); + + if (notification == null) + continue; + + fireEvent("clear", notification); + } + } + + /** + * Clear all triggered notifications without canceling them. + */ + private void clearAll() { + getNotificationMgr().clearAll(); + fireEvent("clearall"); + } + + /** + * If a notification with an ID is present. + * + * @param id + * Notification ID + * @param command + * The callback context used when calling back into JavaScript. + */ + private void isPresent (int id, CallbackContext command) { + boolean exist = getNotificationMgr().exist(id); + + PluginResult result = new PluginResult( + PluginResult.Status.OK, exist); + + command.sendPluginResult(result); + } + + /** + * If a notification with an ID is scheduled. + * + * @param id + * Notification ID + * @param command + * The callback context used when calling back into JavaScript. + */ + private void isScheduled (int id, CallbackContext command) { + boolean exist = getNotificationMgr().exist( + id, Notification.Type.SCHEDULED); + + PluginResult result = new PluginResult( + PluginResult.Status.OK, exist); + + command.sendPluginResult(result); + } + + /** + * If a notification with an ID is triggered. + * + * @param id + * Notification ID + * @param command + * The callback context used when calling back into JavaScript. + */ + private void isTriggered (int id, CallbackContext command) { + boolean exist = getNotificationMgr().exist( + id, Notification.Type.TRIGGERED); + + PluginResult result = new PluginResult( + PluginResult.Status.OK, exist); + + command.sendPluginResult(result); + } + + /** + * Set of IDs from all existent notifications. + * + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getAllIds (CallbackContext command) { + List ids = getNotificationMgr().getIds(); + + command.success(new JSONArray(ids)); + } + + /** + * Set of IDs from all scheduled notifications. + * + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getScheduledIds (CallbackContext command) { + List ids = getNotificationMgr().getIdsByType( + Notification.Type.SCHEDULED); + + command.success(new JSONArray(ids)); + } + + /** + * Set of IDs from all triggered notifications. + * + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getTriggeredIds (CallbackContext command) { + List ids = getNotificationMgr().getIdsByType( + Notification.Type.TRIGGERED); + + command.success(new JSONArray(ids)); + } + + /** + * Options from local notification. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getSingle (JSONArray ids, CallbackContext command) { + getOptions(ids.optString(0), Notification.Type.ALL, command); + } + + /** + * Options from scheduled notification. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getSingleScheduled (JSONArray ids, CallbackContext command) { + getOptions(ids.optString(0), Notification.Type.SCHEDULED, command); + } + + /** + * Options from triggered notification. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getSingleTriggered (JSONArray ids, CallbackContext command) { + getOptions(ids.optString(0), Notification.Type.TRIGGERED, command); + } + + /** + * Set of options from local notification. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getAll (JSONArray ids, CallbackContext command) { + getOptions(ids, Notification.Type.ALL, command); + } + + /** + * Set of options from scheduled notifications. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getScheduled (JSONArray ids, CallbackContext command) { + getOptions(ids, Notification.Type.SCHEDULED, command); + } + + /** + * Set of options from triggered notifications. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getTriggered (JSONArray ids, CallbackContext command) { + getOptions(ids, Notification.Type.TRIGGERED, command); + } + + /** + * Options from local notification. + * + * @param id + * Set of local notification IDs + * @param type + * The local notification life cycle type + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getOptions (String id, Notification.Type type, + CallbackContext command) { + + JSONArray ids = new JSONArray().put(id); + PluginResult result; + + List options = + getNotificationMgr().getOptionsBy(type, toList(ids)); + + if (options.isEmpty()) { + // Status.NO_RESULT led to no callback invocation :( + // Status.OK led to no NPE and crash + result = new PluginResult(PluginResult.Status.NO_RESULT); + } else { + result = new PluginResult(PluginResult.Status.OK, options.get(0)); + } + + command.sendPluginResult(result); + } + + /** + * Set of options from local notifications. + * + * @param ids + * Set of local notification IDs + * @param type + * The local notification life cycle type + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getOptions (JSONArray ids, Notification.Type type, + CallbackContext command) { + + List options; + + if (ids.length() == 0) { + options = getNotificationMgr().getOptionsByType(type); + } else { + options = getNotificationMgr().getOptionsBy(type, toList(ids)); + } + + command.success(new JSONArray(options)); + } + + /** + * Call all pending callbacks after the deviceready event has been fired. + */ + private static synchronized void deviceready () { + isInBackground = false; + deviceready = true; + + for (String js : eventQueue) { + sendJavascript(js); + } + + eventQueue.clear(); + } + + /** + * Fire given event on JS side. Does inform all event listeners. + * + * @param event + * The event name + */ + private void fireEvent (String event) { + fireEvent(event, null); + } + + /** + * Fire given event on JS side. Does inform all event listeners. + * + * @param event + * The event name + * @param notification + * Optional local notification to pass the id and properties. + */ + static void fireEvent (String event, Notification notification) { + String state = getApplicationState(); + String params = "\"" + state + "\""; + + if (notification != null) { + params = notification.toString() + "," + params; + } + + String js = "cordova.plugins.notification.local.core.fireEvent(" + + "\"" + event + "\"," + params + ")"; + + sendJavascript(js); + } + + /** + * Use this instead of deprecated sendJavascript + * + * @param js + * JS code snippet as string + */ + private static synchronized void sendJavascript(final String js) { + + if (!deviceready) { + eventQueue.add(js); + return; + } + Runnable jsLoader = new Runnable() { + public void run() { + webView.loadUrl("javascript:" + js); + } + }; + try { + Method post = webView.getClass().getMethod("post",Runnable.class); + post.invoke(webView,jsLoader); + } catch(Exception e) { + + ((Activity)(webView.getContext())).runOnUiThread(jsLoader); + } + } + + /** + * Convert JSON array of integers to List. + * + * @param ary + * Array of integers + */ + private List toList (JSONArray ary) { + ArrayList list = new ArrayList(); + + for (int i = 0; i < ary.length(); i++) { + list.add(ary.optInt(i)); + } + + return list; + } + + /** + * Current application state. + * + * @return + * "background" or "foreground" + */ + static String getApplicationState () { + return isInBackground ? "background" : "foreground"; + } + + /** + * Notification manager instance. + */ + private Manager getNotificationMgr() { + return Manager.getInstance(cordova.getActivity()); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/localnotification/RestoreReceiver.java b/platforms/android/src/de/appplant/cordova/plugin/localnotification/RestoreReceiver.java new file mode 100644 index 0000000..675ea7c --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/localnotification/RestoreReceiver.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2014-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import de.appplant.cordova.plugin.notification.AbstractRestoreReceiver; +import de.appplant.cordova.plugin.notification.Builder; +import de.appplant.cordova.plugin.notification.Notification; + +/** + * This class is triggered upon reboot of the device. It needs to re-register + * the alarms with the AlarmManager since these alarms are lost in case of + * reboot. + */ +public class RestoreReceiver extends AbstractRestoreReceiver { + + /** + * Called when a local notification need to be restored. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onRestore (Notification notification) { + if (notification.isScheduled()) { + notification.schedule(); + } else { + notification.cancel(); + } + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + @Override + public Notification buildNotification (Builder builder) { + return builder + .setTriggerReceiver(TriggerReceiver.class) + .setClearReceiver(ClearReceiver.class) + .setClickActivity(ClickActivity.class) + .build(); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/localnotification/TriggerReceiver.java b/platforms/android/src/de/appplant/cordova/plugin/localnotification/TriggerReceiver.java new file mode 100644 index 0000000..3c423c0 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/localnotification/TriggerReceiver.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import de.appplant.cordova.plugin.notification.Builder; +import de.appplant.cordova.plugin.notification.Notification; + +/** + * The alarm receiver is triggered when a scheduled alarm is fired. This class + * reads the information in the intent and displays this information in the + * Android notification bar. The notification uses the default notification + * sound and it vibrates the phone. + */ +public class TriggerReceiver extends de.appplant.cordova.plugin.notification.TriggerReceiver { + + /** + * Called when a local notification was triggered. Does present the local + * notification, re-schedule the alarm if necessary and fire trigger event. + * + * @param notification + * Wrapper around the local notification + * @param updated + * If an update has triggered or the original + */ + @Override + public void onTrigger (Notification notification, boolean updated) { + super.onTrigger(notification, updated); + + if (!updated) { + LocalNotification.fireEvent("trigger", notification); + } + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + @Override + public Notification buildNotification (Builder builder) { + return builder + .setTriggerReceiver(TriggerReceiver.class) + .setClickActivity(ClickActivity.class) + .setClearReceiver(ClearReceiver.class) + .build(); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractClearReceiver.java b/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractClearReceiver.java new file mode 100644 index 0000000..94d2a19 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractClearReceiver.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Abstract delete receiver for local notifications. Creates the local + * notification and calls the event functions for further proceeding. + */ +abstract public class AbstractClearReceiver extends BroadcastReceiver { + + /** + * Called when the notification was cleared from the notification center. + * + * @param context + * Application context + * @param intent + * Received intent with content data + */ + @Override + public void onReceive(Context context, Intent intent) { + Bundle bundle = intent.getExtras(); + JSONObject options; + + try { + String data = bundle.getString(Options.EXTRA); + options = new JSONObject(data); + } catch (JSONException e) { + e.printStackTrace(); + return; + } + + Notification notification = + new Builder(context, options).build(); + + onClear(notification); + } + + /** + * Called when a local notification was cleared from outside of the app. + * + * @param notification + * Wrapper around the local notification + */ + abstract public void onClear (Notification notification); + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractClickActivity.java b/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractClickActivity.java new file mode 100644 index 0000000..5b70e14 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractClickActivity.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Abstract content receiver activity for local notifications. Creates the + * local notification and calls the event functions for further proceeding. + */ +abstract public class AbstractClickActivity extends Activity { + + /** + * Called when local notification was clicked to launch the main intent. + * + * @param state + * Saved instance state + */ + @Override + public void onCreate (Bundle state) { + super.onCreate(state); + + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + Context context = getApplicationContext(); + + try { + String data = bundle.getString(Options.EXTRA); + JSONObject options = new JSONObject(data); + + Builder builder = + new Builder(context, options); + + Notification notification = + buildNotification(builder); + + onClick(notification); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + /** + * Fixes "Unable to resume activity" error. + * Theme_NoDisplay: Activities finish themselves before being resumed. + */ + @Override + protected void onResume() { + super.onResume(); + finish(); + } + + /** + * Called when local notification was clicked by the user. + * + * @param notification + * Wrapper around the local notification + */ + abstract public void onClick (Notification notification); + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + abstract public Notification buildNotification (Builder builder); + + /** + * Launch main intent from package. + */ + public void launchApp() { + Context context = getApplicationContext(); + String pkgName = context.getPackageName(); + + Intent intent = context + .getPackageManager() + .getLaunchIntentForPackage(pkgName); + + intent.addFlags( + Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP); + + context.startActivity(intent); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractRestoreReceiver.java b/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractRestoreReceiver.java new file mode 100644 index 0000000..8a1f365 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractRestoreReceiver.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import org.json.JSONObject; + +import java.util.List; + +/** + * This class is triggered upon reboot of the device. It needs to re-register + * the alarms with the AlarmManager since these alarms are lost in case of + * reboot. + */ +abstract public class AbstractRestoreReceiver extends BroadcastReceiver { + + /** + * Called on device reboot. + * + * @param context + * Application context + * @param intent + * Received intent with content data + */ + @Override + public void onReceive (Context context, Intent intent) { + Manager notificationMgr = + Manager.getInstance(context); + + List options = + notificationMgr.getOptions(); + + for (JSONObject data : options) { + Builder builder = new Builder(context, data); + + Notification notification = + buildNotification(builder); + + onRestore(notification); + } + } + + /** + * Called when a local notification need to be restored. + * + * @param notification + * Wrapper around the local notification + */ + abstract public void onRestore (Notification notification); + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + abstract public Notification buildNotification (Builder builder); + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractTriggerReceiver.java b/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractTriggerReceiver.java new file mode 100644 index 0000000..459e6d8 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/AbstractTriggerReceiver.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Calendar; + +/** + * Abstract broadcast receiver for local notifications. Creates the + * notification options and calls the event functions for further proceeding. + */ +abstract public class AbstractTriggerReceiver extends BroadcastReceiver { + + /** + * Called when an alarm was triggered. + * + * @param context + * Application context + * @param intent + * Received intent with content data + */ + @Override + public void onReceive(Context context, Intent intent) { + Bundle bundle = intent.getExtras(); + Options options; + + try { + String data = bundle.getString(Options.EXTRA); + JSONObject dict = new JSONObject(data); + + options = new Options(context).parse(dict); + } catch (JSONException e) { + e.printStackTrace(); + return; + } + + if (options == null) + return; + + if (isFirstAlarmInFuture(options)) + return; + + Builder builder = new Builder(options); + Notification notification = buildNotification(builder); + boolean updated = notification.isUpdate(false); + + onTrigger(notification, updated); + } + + /** + * Called when a local notification was triggered. + * + * @param notification + * Wrapper around the local notification + * @param updated + * If an update has triggered or the original + */ + abstract public void onTrigger (Notification notification, boolean updated); + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + abstract public Notification buildNotification (Builder builder); + + /* + * If you set a repeating alarm at 11:00 in the morning and it + * should trigger every morning at 08:00 o'clock, it will + * immediately fire. E.g. Android tries to make up for the + * 'forgotten' reminder for that day. Therefore we ignore the event + * if Android tries to 'catch up'. + */ + private Boolean isFirstAlarmInFuture (Options options) { + Notification notification = new Builder(options).build(); + + if (!notification.isRepeating()) + return false; + + Calendar now = Calendar.getInstance(); + Calendar alarm = Calendar.getInstance(); + + alarm.setTime(notification.getOptions().getTriggerDate()); + + int alarmHour = alarm.get(Calendar.HOUR_OF_DAY); + int alarmMin = alarm.get(Calendar.MINUTE); + int currentHour = now.get(Calendar.HOUR_OF_DAY); + int currentMin = now.get(Calendar.MINUTE); + + return (currentHour != alarmHour && currentMin != alarmMin); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/AssetUtil.java b/platforms/android/src/de/appplant/cordova/plugin/notification/AssetUtil.java new file mode 100644 index 0000000..66662e5 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/AssetUtil.java @@ -0,0 +1,433 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.content.Context; +import android.content.res.AssetManager; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.StrictMode; +import android.util.Log; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.UUID; + +/** + * Util class to map unified asset URIs to native URIs. URIs like file:/// + * map to absolute paths while file:// point relatively to the www folder + * within the asset resources. And res:// means a resource from the native + * res folder. Remote assets are accessible via http:// for example. + */ +class AssetUtil { + + // Name of the storage folder + private static final String STORAGE_FOLDER = "/localnotification"; + + // Placeholder URI for default sound + private static final String DEFAULT_SOUND = "res://platform_default"; + + // Ref to the context passed through the constructor to access the + // resources and app directory. + private final Context context; + + /** + * Constructor + * + * @param context + * Application context + */ + private AssetUtil(Context context) { + this.context = context; + } + + /** + * Static method to retrieve class instance. + * + * @param context + * Application context + */ + static AssetUtil getInstance(Context context) { + return new AssetUtil(context); + } + + /** + * Parse path path to native URI. + * + * @param path + * Path to path file + */ + Uri parseSound (String path) { + + if (path == null || path.isEmpty()) + return Uri.EMPTY; + + if (path.equalsIgnoreCase(DEFAULT_SOUND)) { + return RingtoneManager.getDefaultUri(RingtoneManager + .TYPE_NOTIFICATION); + } + + return parse(path); + } + + /** + * The URI for a path. + * + * @param path + * The given path + */ + Uri parse (String path) { + + if (path.startsWith("res:")) { + return getUriForResourcePath(path); + } else if (path.startsWith("file:///")) { + return getUriFromPath(path); + } else if (path.startsWith("file://")) { + return getUriFromAsset(path); + } else if (path.startsWith("http")){ + return getUriFromRemote(path); + } + + return Uri.EMPTY; + } + + /** + * URI for a file. + * + * @param path + * Absolute path like file:///... + * + * @return + * URI pointing to the given path + */ + private Uri getUriFromPath(String path) { + String absPath = path.replaceFirst("file://", ""); + File file = new File(absPath); + + if (!file.exists()) { + Log.e("Asset", "File not found: " + file.getAbsolutePath()); + return Uri.EMPTY; + } + + return Uri.fromFile(file); + } + + /** + * URI for an asset. + * + * @param path + * Asset path like file://... + * + * @return + * URI pointing to the given path + */ + private Uri getUriFromAsset(String path) { + String resPath = path.replaceFirst("file:/", "www"); + String fileName = resPath.substring(resPath.lastIndexOf('/') + 1); + File file = getTmpFile(fileName); + + if (file == null) { + Log.e("Asset", "Missing external cache dir"); + return Uri.EMPTY; + } + + try { + AssetManager assets = context.getAssets(); + FileOutputStream outStream = new FileOutputStream(file); + InputStream inputStream = assets.open(resPath); + + copyFile(inputStream, outStream); + + outStream.flush(); + outStream.close(); + + return Uri.fromFile(file); + + } catch (Exception e) { + Log.e("Asset", "File not found: assets/" + resPath); + e.printStackTrace(); + } + + return Uri.EMPTY; + } + + /** + * The URI for a resource. + * + * @param path + * The given relative path + * + * @return + * URI pointing to the given path + */ + private Uri getUriForResourcePath(String path) { + String resPath = path.replaceFirst("res://", ""); + int resId = getResIdForDrawable(resPath); + File file = getTmpFile(); + + if (resId == 0) { + Log.e("Asset", "File not found: " + resPath); + return Uri.EMPTY; + } + + if (file == null) { + Log.e("Asset", "Missing external cache dir"); + return Uri.EMPTY; + } + + try { + Resources res = context.getResources(); + FileOutputStream outStream = new FileOutputStream(file); + InputStream inputStream = res.openRawResource(resId); + copyFile(inputStream, outStream); + + outStream.flush(); + outStream.close(); + + return Uri.fromFile(file); + + } catch (Exception e) { + e.printStackTrace(); + } + + return Uri.EMPTY; + } + + /** + * Uri from remote located content. + * + * @param path + * Remote address + * + * @return + * Uri of the downloaded file + */ + private Uri getUriFromRemote(String path) { + File file = getTmpFile(); + + if (file == null) { + Log.e("Asset", "Missing external cache dir"); + return Uri.EMPTY; + } + + try { + URL url = new URL(path); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + StrictMode.ThreadPolicy policy = + new StrictMode.ThreadPolicy.Builder().permitAll().build(); + + StrictMode.setThreadPolicy(policy); + + connection.setRequestProperty("Connection", "close"); + connection.setConnectTimeout(5000); + connection.connect(); + + InputStream input = connection.getInputStream(); + FileOutputStream outStream = new FileOutputStream(file); + + copyFile(input, outStream); + + outStream.flush(); + outStream.close(); + + return Uri.fromFile(file); + + } catch (MalformedURLException e) { + Log.e("Asset", "Incorrect URL"); + e.printStackTrace(); + } catch (FileNotFoundException e) { + Log.e("Asset", "Failed to create new File from HTTP Content"); + e.printStackTrace(); + } catch (IOException e) { + Log.e("Asset", "No Input can be created from http Stream"); + e.printStackTrace(); + } + + return Uri.EMPTY; + } + + /** + * Copy content from input stream into output stream. + * + * @param in + * The input stream + * @param out + * The output stream + */ + private void copyFile(InputStream in, OutputStream out) throws IOException { + byte[] buffer = new byte[1024]; + int read; + + while ((read = in.read(buffer)) != -1) { + out.write(buffer, 0, read); + } + } + + /** + * Resource ID for drawable. + * + * @param resPath + * Resource path as string + */ + int getResIdForDrawable(String resPath) { + int resId = getResIdForDrawable(getPkgName(), resPath); + + if (resId == 0) { + resId = getResIdForDrawable("android", resPath); + } + + return resId; + } + + /** + * Resource ID for drawable. + * + * @param clsName + * Relative package or global android name space + * @param resPath + * Resource path as string + */ + int getResIdForDrawable(String clsName, String resPath) { + String drawable = getBaseName(resPath); + int resId = 0; + + try { + Class cls = Class.forName(clsName + ".R$drawable"); + + resId = (Integer) cls.getDeclaredField(drawable).get(Integer.class); + } catch (Exception ignore) {} + + return resId; + } + + /** + * Convert drawable resource to bitmap. + * + * @param drawable + * Drawable resource name + */ + Bitmap getIconFromDrawable (String drawable) { + Resources res = context.getResources(); + int iconId; + + iconId = getResIdForDrawable(getPkgName(), drawable); + + if (iconId == 0) { + iconId = getResIdForDrawable("android", drawable); + } + + if (iconId == 0) { + iconId = android.R.drawable.screen_background_dark_transparent; + } + + return BitmapFactory.decodeResource(res, iconId); + } + + /** + * Convert URI to Bitmap. + * + * @param uri + * Internal image URI + */ + Bitmap getIconFromUri (Uri uri) throws IOException { + InputStream input = context.getContentResolver().openInputStream(uri); + + return BitmapFactory.decodeStream(input); + } + + /** + * Extract name of drawable resource from path. + * + * @param resPath + * Resource path as string + */ + private String getBaseName (String resPath) { + String drawable = resPath; + + if (drawable.contains("/")) { + drawable = drawable.substring(drawable.lastIndexOf('/') + 1); + } + + if (resPath.contains(".")) { + drawable = drawable.substring(0, drawable.lastIndexOf('.')); + } + + return drawable; + } + + /** + * Returns a file located under the external cache dir of that app. + * + * @return + * File with a random UUID name + */ + private File getTmpFile () { + // If random UUID is not be enough see + // https://github.com/LukePulverenti/cordova-plugin-local-notifications/blob/267170db14044cbeff6f4c3c62d9b766b7a1dd62/src/android/notification/AssetUtil.java#L255 + return getTmpFile(UUID.randomUUID().toString()); + } + + /** + * Returns a file located under the external cache dir of that app. + * + * @param name + * The name of the file + * @return + * File with the provided name + */ + private File getTmpFile (String name) { + File dir = context.getExternalCacheDir(); + + if (dir == null) { + Log.e("Asset", "Missing external cache dir"); + return null; + } + + String storage = dir.toString() + STORAGE_FOLDER; + + //noinspection ResultOfMethodCallIgnored + new File(storage).mkdir(); + + return new File(storage, name); + } + + /** + * Package name specified by context. + */ + private String getPkgName () { + return context.getPackageName(); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/Builder.java b/platforms/android/src/de/appplant/cordova/plugin/notification/Builder.java new file mode 100644 index 0000000..55eb1d3 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/Builder.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import org.json.JSONObject; + +import java.util.Random; + +/** + * Builder class for local notifications. Build fully configured local + * notification specified by JSON object passed from JS side. + */ +public class Builder { + + // Application context passed by constructor + private final Context context; + + // Notification options passed by JS + private final Options options; + + // Receiver to handle the trigger event + private Class triggerReceiver; + + // Receiver to handle the clear event + private Class clearReceiver = ClearReceiver.class; + + // Activity to handle the click event + private Class clickActivity = ClickActivity.class; + + /** + * Constructor + * + * @param context + * Application context + * @param options + * Notification options + */ + public Builder(Context context, JSONObject options) { + this.context = context; + this.options = new Options(context).parse(options); + } + + /** + * Constructor + * + * @param options + * Notification options + */ + public Builder(Options options) { + this.context = options.getContext(); + this.options = options; + } + + /** + * Set trigger receiver. + * + * @param receiver + * Broadcast receiver + */ + public Builder setTriggerReceiver(Class receiver) { + this.triggerReceiver = receiver; + return this; + } + + /** + * Set clear receiver. + * + * @param receiver + * Broadcast receiver + */ + public Builder setClearReceiver(Class receiver) { + this.clearReceiver = receiver; + return this; + } + + /** + * Set click activity. + * + * @param activity + * Activity + */ + public Builder setClickActivity(Class activity) { + this.clickActivity = activity; + return this; + } + + /** + * Creates the notification with all its options passed through JS. + */ + public Notification build() { + Uri sound = options.getSoundUri(); + int smallIcon = options.getSmallIcon(); + NotificationCompat.Builder builder; + + builder = new NotificationCompat.Builder(context) + .setDefaults(0) + .setContentTitle(options.getTitle()) + .setContentText(options.getText()) + .setNumber(options.getBadgeNumber()) + .setTicker(options.getText()) + .setAutoCancel(options.isAutoClear()) + .setOngoing(options.isOngoing()) + .setColor(options.getColor()) + .setLights(options.getLedColor(), 100, 100); + + if (sound != null) { + builder.setSound(sound); + } + + if (smallIcon == 0) { + builder.setSmallIcon(options.getIcon()); + } else { + builder.setSmallIcon(options.getSmallIcon()); + builder.setLargeIcon(options.getIconBitmap()); + } + + applyDeleteReceiver(builder); + applyContentReceiver(builder); + + return new Notification(context, options, builder, triggerReceiver); + } + + /** + * Set intent to handle the delete event. Will clean up some persisted + * preferences. + * + * @param builder + * Local notification builder instance + */ + private void applyDeleteReceiver(NotificationCompat.Builder builder) { + + if (clearReceiver == null) + return; + + Intent intent = new Intent(context, clearReceiver) + .setAction(options.getIdStr()) + .putExtra(Options.EXTRA, options.toString()); + + PendingIntent deleteIntent = PendingIntent.getBroadcast( + context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + + builder.setDeleteIntent(deleteIntent); + } + + /** + * Set intent to handle the click event. Will bring the app to + * foreground. + * + * @param builder + * Local notification builder instance + */ + private void applyContentReceiver(NotificationCompat.Builder builder) { + + if (clickActivity == null) + return; + + Intent intent = new Intent(context, clickActivity) + .putExtra(Options.EXTRA, options.toString()) + .setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + + int reqCode = new Random().nextInt(); + + PendingIntent contentIntent = PendingIntent.getActivity( + context, reqCode, intent, PendingIntent.FLAG_UPDATE_CURRENT); + + builder.setContentIntent(contentIntent); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/ClearReceiver.java b/platforms/android/src/de/appplant/cordova/plugin/notification/ClearReceiver.java new file mode 100644 index 0000000..761b6c5 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/ClearReceiver.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +/** + * The clear intent receiver is triggered when the user clears a + * notification manually. It un-persists the cleared notification from the + * shared preferences. + */ +public class ClearReceiver extends AbstractClearReceiver { + + /** + * Called when a local notification was cleared from outside of the app. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onClear (Notification notification) { + notification.clear(); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/ClickActivity.java b/platforms/android/src/de/appplant/cordova/plugin/notification/ClickActivity.java new file mode 100644 index 0000000..dcc0390 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/ClickActivity.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +/** + * The receiver activity is triggered when a notification is clicked by a user. + * The activity calls the background callback and brings the launch intent + * up to foreground. + */ +public class ClickActivity extends AbstractClickActivity { + + /** + * Called when local notification was clicked by the user. Will + * move the app to foreground. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onClick(Notification notification) { + launchApp(); + + if (notification.isRepeating()) { + notification.clear(); + } else { + notification.cancel(); + } + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + public Notification buildNotification (Builder builder) { + return builder.build(); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/Manager.java b/platforms/android/src/de/appplant/cordova/plugin/notification/Manager.java new file mode 100644 index 0000000..9af3c94 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/Manager.java @@ -0,0 +1,458 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.app.NotificationManager; +import android.content.Context; +import android.content.SharedPreferences; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static de.appplant.cordova.plugin.notification.Notification.PREF_KEY; + +/** + * Central way to access all or single local notifications set by specific + * state like triggered or scheduled. Offers shortcut ways to schedule, + * cancel or clear local notifications. + */ +public class Manager { + + // Context passed through constructor and used for notification builder. + private Context context; + + /** + * Constructor + * + * @param context + * Application context + */ + private Manager(Context context){ + this.context = context; + } + + /** + * Static method to retrieve class instance. + * + * @param context + * Application context + */ + public static Manager getInstance(Context context) { + return new Manager(context); + } + + /** + * Schedule local notification specified by JSON object. + * + * @param options + * JSON object with set of options + * @param receiver + * Receiver to handle the trigger event + */ + public Notification schedule (JSONObject options, Class receiver) { + return schedule(new Options(context).parse(options), receiver); + } + + /** + * Schedule local notification specified by options object. + * + * @param options + * Set of notification options + * @param receiver + * Receiver to handle the trigger event + */ + public Notification schedule (Options options, Class receiver) { + Notification notification = new Builder(options) + .setTriggerReceiver(receiver) + .build(); + + notification.schedule(); + + return notification; + } + + /** + * Clear local notification specified by ID. + * + * @param id + * The notification ID + * @param updates + * JSON object with notification options + * @param receiver + * Receiver to handle the trigger event + */ + public Notification update (int id, JSONObject updates, Class receiver) { + Notification notification = get(id); + + if (notification == null) + return null; + + notification.cancel(); + + JSONObject options = mergeJSONObjects( + notification.getOptions().getDict(), updates); + + try { + options.put("updated", true); + } catch (JSONException ignore) {} + + return schedule(options, receiver); + } + + /** + * Clear local notification specified by ID. + * + * @param id + * The notification ID + */ + public Notification clear (int id) { + Notification notification = get(id); + + if (notification != null) { + notification.clear(); + } + + return notification; + } + + /** + * Clear local notification specified by ID. + * + * @param id + * The notification ID + */ + public Notification cancel (int id) { + Notification notification = get(id); + + if (notification != null) { + notification.cancel(); + } + + return notification; + } + + /** + * Clear all local notifications. + */ + public void clearAll () { + List notifications = getAll(); + + for (Notification notification : notifications) { + notification.clear(); + } + + getNotMgr().cancelAll(); + } + + /** + * Cancel all local notifications. + */ + public void cancelAll () { + List notifications = getAll(); + + for (Notification notification : notifications) { + notification.cancel(); + } + + getNotMgr().cancelAll(); + } + + /** + * All local notifications IDs. + */ + public List getIds() { + Set keys = getPrefs().getAll().keySet(); + ArrayList ids = new ArrayList(); + + for (String key : keys) { + try { + ids.add(Integer.parseInt(key)); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + + return ids; + } + + /** + * All local notification IDs for given type. + * + * @param type + * The notification life cycle type + */ + public List getIdsByType(Notification.Type type) { + List notifications = getAll(); + ArrayList ids = new ArrayList(); + + for (Notification notification : notifications) { + if (notification.getType() == type) { + ids.add(notification.getId()); + } + } + + return ids; + } + + /** + * List of local notifications with matching ID. + * + * @param ids + * Set of notification IDs + */ + public List getByIds(List ids) { + ArrayList notifications = new ArrayList(); + + for (int id : ids) { + Notification notification = get(id); + + if (notification != null) { + notifications.add(notification); + } + } + + return notifications; + } + + /** + * List of all local notification. + */ + public List getAll() { + return getByIds(getIds()); + } + + /** + * List of local notifications from given type. + * + * @param type + * The notification life cycle type + */ + public List getByType(Notification.Type type) { + List notifications = getAll(); + ArrayList list = new ArrayList(); + + if (type == Notification.Type.ALL) + return notifications; + + for (Notification notification : notifications) { + if (notification.getType() == type) { + list.add(notification); + } + } + + return list; + } + + /** + * List of local notifications with matching ID from given type. + * + * @param type + * The notification life cycle type + * @param ids + * Set of notification IDs + */ + @SuppressWarnings("UnusedDeclaration") + public List getBy(Notification.Type type, List ids) { + ArrayList notifications = new ArrayList(); + + for (int id : ids) { + Notification notification = get(id); + + if (notification != null && notification.isScheduled()) { + notifications.add(notification); + } + } + + return notifications; + } + + /** + * If a notification with an ID exists. + * + * @param id + * Notification ID + */ + public boolean exist (int id) { + return get(id) != null; + } + + /** + * If a notification with an ID and type exists. + * + * @param id + * Notification ID + * @param type + * Notification type + */ + public boolean exist (int id, Notification.Type type) { + Notification notification = get(id); + + return notification != null && notification.getType() == type; + } + + /** + * List of properties from all local notifications. + */ + public List getOptions() { + return getOptionsById(getIds()); + } + + /** + * List of properties from local notifications with matching ID. + * + * @param ids + * Set of notification IDs + */ + public List getOptionsById(List ids) { + ArrayList options = new ArrayList(); + + for (int id : ids) { + Notification notification = get(id); + + if (notification != null) { + options.add(notification.getOptions().getDict()); + } + } + + return options; + } + + /** + * List of properties from all local notifications from given type. + * + * @param type + * The notification life cycle type + */ + public List getOptionsByType(Notification.Type type) { + ArrayList options = new ArrayList(); + List notifications = getByType(type); + + for (Notification notification : notifications) { + options.add(notification.getOptions().getDict()); + } + + return options; + } + + /** + * List of properties from local notifications with matching ID from + * given type. + * + * @param type + * The notification life cycle type + * @param ids + * Set of notification IDs + */ + public List getOptionsBy(Notification.Type type, + List ids) { + + if (type == Notification.Type.ALL) + return getOptionsById(ids); + + ArrayList options = new ArrayList(); + List notifications = getByIds(ids); + + for (Notification notification : notifications) { + if (notification.getType() == type) { + options.add(notification.getOptions().getDict()); + } + } + + return options; + } + + /** + * Get existent local notification. + * + * @param id + * Notification ID + */ + public Notification get(int id) { + Map alarms = getPrefs().getAll(); + String notId = Integer.toString(id); + JSONObject options; + + if (!alarms.containsKey(notId)) + return null; + + + try { + String json = alarms.get(notId).toString(); + options = new JSONObject(json); + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + + Builder builder = new Builder(context, options); + + return builder.build(); + } + + /** + * Merge two JSON objects. + * + * @param obj1 + * JSON object + * @param obj2 + * JSON object with new options + */ + private JSONObject mergeJSONObjects (JSONObject obj1, JSONObject obj2) { + Iterator it = obj2.keys(); + + while (it.hasNext()) { + try { + String key = (String)it.next(); + + obj1.put(key, obj2.opt(key)); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + return obj1; + } + + /** + * Shared private preferences for the application. + */ + private SharedPreferences getPrefs () { + return context.getSharedPreferences(PREF_KEY, Context.MODE_PRIVATE); + } + + /** + * Notification manager for the application. + */ + private NotificationManager getNotMgr () { + return (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/Notification.java b/platforms/android/src/de/appplant/cordova/plugin/notification/Notification.java new file mode 100644 index 0000000..ad36378 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/Notification.java @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + + +import android.app.AlarmManager; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Build; +import android.support.v4.app.NotificationCompat; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Date; + +/** + * Wrapper class around OS notification class. Handles basic operations + * like show, delete, cancel for a single local notification instance. + */ +public class Notification { + + // Used to differ notifications by their life cycle state + public enum Type { + ALL, SCHEDULED, TRIGGERED + } + + // Default receiver to handle the trigger event + private static Class defaultReceiver = TriggerReceiver.class; + + // Key for private preferences + static final String PREF_KEY = "LocalNotification"; + + // Application context passed by constructor + private final Context context; + + // Notification options passed by JS + private final Options options; + + // Builder with full configuration + private final NotificationCompat.Builder builder; + + // Receiver to handle the trigger event + private Class receiver = defaultReceiver; + + /** + * Constructor + * + * @param context + * Application context + * @param options + * Parsed notification options + * @param builder + * Pre-configured notification builder + */ + protected Notification (Context context, Options options, + NotificationCompat.Builder builder, Class receiver) { + + this.context = context; + this.options = options; + this.builder = builder; + + this.receiver = receiver != null ? receiver : defaultReceiver; + } + + /** + * Get application context. + */ + public Context getContext () { + return context; + } + + /** + * Get notification options. + */ + public Options getOptions () { + return options; + } + + /** + * Get notification ID. + */ + public int getId () { + return options.getId(); + } + + /** + * If it's a repeating notification. + */ + public boolean isRepeating () { + return getOptions().getRepeatInterval() > 0; + } + + /** + * If the notification was in the past. + */ + public boolean wasInThePast () { + return new Date().after(options.getTriggerDate()); + } + + /** + * If the notification is scheduled. + */ + public boolean isScheduled () { + return isRepeating() || !wasInThePast(); + } + + /** + * If the notification is triggered. + */ + public boolean isTriggered () { + return wasInThePast(); + } + + /** + * If the notification is an update. + * + * @param keepFlag + * Set to false to remove the flag from the option map + */ + protected boolean isUpdate (boolean keepFlag) { + boolean updated = options.getDict().optBoolean("updated", false); + + if (!keepFlag) { + options.getDict().remove("updated"); + } + + return updated; + } + + /** + * Notification type can be one of pending or scheduled. + */ + public Type getType () { + return isScheduled() ? Type.SCHEDULED : Type.TRIGGERED; + } + + /** + * Schedule the local notification. + */ + public void schedule() { + long triggerTime = options.getTriggerTime(); + + persist(); + + // Intent gets called when the Notification gets fired + Intent intent = new Intent(context, receiver) + .setAction(options.getIdStr()) + .putExtra(Options.EXTRA, options.toString()); + + PendingIntent pi = PendingIntent.getBroadcast( + context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); + + if (isRepeating()) { + getAlarmMgr().setRepeating(AlarmManager.RTC_WAKEUP, + triggerTime, options.getRepeatInterval(), pi); + } else { + getAlarmMgr().set(AlarmManager.RTC_WAKEUP, triggerTime, pi); + } + } + + /** + * Clear the local notification without canceling repeating alarms. + */ + public void clear () { + + if (!isRepeating() && wasInThePast()) + unpersist(); + + if (!isRepeating()) + getNotMgr().cancel(getId()); + } + + /** + * Cancel the local notification. + * + * Create an intent that looks similar, to the one that was registered + * using schedule. Making sure the notification id in the action is the + * same. Now we can search for such an intent using the 'getService' + * method and cancel it. + */ + public void cancel() { + Intent intent = new Intent(context, receiver) + .setAction(options.getIdStr()); + + PendingIntent pi = PendingIntent. + getBroadcast(context, 0, intent, 0); + + getAlarmMgr().cancel(pi); + getNotMgr().cancel(options.getId()); + + unpersist(); + } + + /** + * Present the local notification to user. + */ + public void show () { + // TODO Show dialog when in foreground + showNotification(); + } + + /** + * Show as local notification when in background. + */ + @SuppressWarnings("deprecation") + private void showNotification () { + int id = getOptions().getId(); + + if (Build.VERSION.SDK_INT <= 15) { + // Notification for HoneyComb to ICS + getNotMgr().notify(id, builder.getNotification()); + } else { + // Notification for Jellybean and above + getNotMgr().notify(id, builder.build()); + } + } + + /** + * Count of triggers since schedule. + */ + public int getTriggerCountSinceSchedule() { + long now = System.currentTimeMillis(); + long triggerTime = options.getTriggerTime(); + + if (!wasInThePast()) + return 0; + + if (!isRepeating()) + return 1; + + return (int) ((now - triggerTime) / options.getRepeatInterval()); + } + + /** + * Encode options to JSON. + */ + public String toString() { + JSONObject dict = options.getDict(); + JSONObject json = new JSONObject(); + + try { + json = new JSONObject(dict.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + + json.remove("firstAt"); + json.remove("updated"); + json.remove("soundUri"); + json.remove("iconUri"); + + return json.toString(); + } + + /** + * Persist the information of this notification to the Android Shared + * Preferences. This will allow the application to restore the notification + * upon device reboot, app restart, retrieve notifications, aso. + */ + private void persist () { + SharedPreferences.Editor editor = getPrefs().edit(); + + editor.putString(options.getIdStr(), options.toString()); + + if (Build.VERSION.SDK_INT < 9) { + editor.commit(); + } else { + editor.apply(); + } + } + + /** + * Remove the notification from the Android shared Preferences. + */ + private void unpersist () { + SharedPreferences.Editor editor = getPrefs().edit(); + + editor.remove(options.getIdStr()); + + if (Build.VERSION.SDK_INT < 9) { + editor.commit(); + } else { + editor.apply(); + } + } + + /** + * Shared private preferences for the application. + */ + private SharedPreferences getPrefs () { + return context.getSharedPreferences(PREF_KEY, Context.MODE_PRIVATE); + } + + /** + * Notification manager for the application. + */ + private NotificationManager getNotMgr () { + return (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + } + + /** + * Alarm manager for the application. + */ + private AlarmManager getAlarmMgr () { + return (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + } + + /** + * Set default receiver to handle the trigger event. + * + * @param receiver + * broadcast receiver + */ + public static void setDefaultTriggerReceiver (Class receiver) { + defaultReceiver = receiver; + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/Options.java b/platforms/android/src/de/appplant/cordova/plugin/notification/Options.java new file mode 100644 index 0000000..9d380d7 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/Options.java @@ -0,0 +1,337 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.app.AlarmManager; +import android.content.Context; +import android.graphics.Bitmap; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Date; + +/** + * Wrapper around the JSON object passed through JS which contains all + * possible option values. Class provides simple readers and more advanced + * methods to convert independent values into platform specific values. + */ +public class Options { + + // Key name for bundled extras + static final String EXTRA = "NOTIFICATION_OPTIONS"; + + // The original JSON object + private JSONObject options = new JSONObject(); + + // Repeat interval + private long interval = 0; + + // Application context + private final Context context; + + // Asset util instance + private final AssetUtil assets; + + + /** + * Constructor + * + * @param context + * Application context + */ + public Options(Context context){ + this.context = context; + this.assets = AssetUtil.getInstance(context); + } + + /** + * Parse given JSON properties. + * + * @param options + * JSON properties + */ + public Options parse (JSONObject options) { + this.options = options; + + parseInterval(); + parseAssets(); + + return this; + } + + /** + * Parse repeat interval. + */ + private void parseInterval() { + String every = options.optString("every").toLowerCase(); + + if (every.isEmpty()) { + interval = 0; + } else + if (every.equals("second")) { + interval = 1000; + } else + if (every.equals("minute")) { + interval = AlarmManager.INTERVAL_FIFTEEN_MINUTES / 15; + } else + if (every.equals("hour")) { + interval = AlarmManager.INTERVAL_HOUR; + } else + if (every.equals("day")) { + interval = AlarmManager.INTERVAL_DAY; + } else + if (every.equals("week")) { + interval = AlarmManager.INTERVAL_DAY * 7; + } else + if (every.equals("month")) { + interval = AlarmManager.INTERVAL_DAY * 31; + } else + if (every.equals("quarter")) { + interval = AlarmManager.INTERVAL_HOUR * 2190; + } else + if (every.equals("year")) { + interval = AlarmManager.INTERVAL_DAY * 365; + } else { + try { + interval = Integer.parseInt(every) * 60000; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * Parse asset URIs. + */ + private void parseAssets() { + + if (options.has("iconUri") && !options.optBoolean("updated")) + return; + + Uri iconUri = assets.parse(options.optString("icon", "icon")); + Uri soundUri = assets.parseSound(options.optString("sound", null)); + + try { + options.put("iconUri", iconUri.toString()); + options.put("soundUri", soundUri.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + /** + * Application context. + */ + public Context getContext () { + return context; + } + + /** + * Wrapped JSON object. + */ + JSONObject getDict () { + return options; + } + + /** + * Text for the local notification. + */ + public String getText() { + return options.optString("text", ""); + } + + /** + * Repeat interval (day, week, month, year, aso.) + */ + public long getRepeatInterval() { + return interval; + } + + /** + * Badge number for the local notification. + */ + public int getBadgeNumber() { + return options.optInt("badge", 0); + } + + /** + * ongoing flag for local notifications. + */ + public Boolean isOngoing() { + return options.optBoolean("ongoing", false); + } + + /** + * autoClear flag for local notifications. + */ + public Boolean isAutoClear() { + return options.optBoolean("autoClear", false); + } + + /** + * ID for the local notification as a number. + */ + public Integer getId() { + return options.optInt("id", 0); + } + + /** + * ID for the local notification as a string. + */ + public String getIdStr() { + return getId().toString(); + } + + /** + * Trigger date. + */ + public Date getTriggerDate() { + return new Date(getTriggerTime()); + } + + /** + * Trigger date in milliseconds. + */ + public long getTriggerTime() { + return options.optLong("at", 0) * 1000; + } + + /** + * Title for the local notification. + */ + public String getTitle() { + String title = options.optString("title", ""); + + if (title.isEmpty()) { + title = context.getApplicationInfo().loadLabel( + context.getPackageManager()).toString(); + } + + return title; + } + + /** + * @return + * The notification color for LED + */ + public int getLedColor() { + String hex = options.optString("led", null); + + if (hex == null) { + return NotificationCompat.DEFAULT_LIGHTS; + } + + int aRGB = Integer.parseInt(hex, 16); + + return aRGB + 0xFF000000; + } + + /** + * @return + * The notification background color for the small icon + * Returns null, if no color is given. + */ + public int getColor() { + String hex = options.optString("color", null); + + if (hex == null) { + return NotificationCompat.COLOR_DEFAULT; + } + + int aRGB = Integer.parseInt(hex, 16); + + return aRGB + 0xFF000000; + } + + /** + * Sound file path for the local notification. + */ + public Uri getSoundUri() { + Uri uri = null; + + try{ + uri = Uri.parse(options.optString("soundUri")); + } catch (Exception e){ + e.printStackTrace(); + } + + return uri; + } + + /** + * Icon bitmap for the local notification. + */ + public Bitmap getIconBitmap() { + Bitmap bmp; + + try { + Uri uri = Uri.parse(options.optString("iconUri")); + bmp = assets.getIconFromUri(uri); + } catch (Exception e){ + e.printStackTrace(); + bmp = assets.getIconFromDrawable("icon"); + } + + return bmp; + } + + /** + * Icon resource ID for the local notification. + */ + public int getIcon () { + String icon = options.optString("icon", ""); + + int resId = assets.getResIdForDrawable(icon); + + if (resId == 0) { + resId = getSmallIcon(); + } + + if (resId == 0) { + resId = android.R.drawable.ic_popup_reminder; + } + + return resId; + } + + /** + * Small icon resource ID for the local notification. + */ + public int getSmallIcon () { + String icon = options.optString("smallIcon", ""); + + return assets.getResIdForDrawable(icon); + } + + /** + * JSON object as string. + */ + public String toString() { + return options.toString(); + } + +} diff --git a/platforms/android/src/de/appplant/cordova/plugin/notification/TriggerReceiver.java b/platforms/android/src/de/appplant/cordova/plugin/notification/TriggerReceiver.java new file mode 100644 index 0000000..9427e31 --- /dev/null +++ b/platforms/android/src/de/appplant/cordova/plugin/notification/TriggerReceiver.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +/** + * The alarm receiver is triggered when a scheduled alarm is fired. This class + * reads the information in the intent and displays this information in the + * Android notification bar. The notification uses the default notification + * sound and it vibrates the phone. + */ +public class TriggerReceiver extends AbstractTriggerReceiver { + + /** + * Called when a local notification was triggered. Does present the local + * notification and re-schedule the alarm if necessary. + * + * @param notification + * Wrapper around the local notification + * @param updated + * If an update has triggered or the original + */ + @Override + public void onTrigger (Notification notification, boolean updated) { + notification.show(); + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + @Override + public Notification buildNotification (Builder builder) { + return builder.build(); + } + +} diff --git a/plugins/android.json b/plugins/android.json index 8e94e6c..b915bca 100644 --- a/plugins/android.json +++ b/plugins/android.json @@ -27,11 +27,17 @@ }, "at.gofg.sportscomputer.powermanagement": { "PACKAGE_NAME": "com.adamdon.sw" + }, + "de.appplant.cordova.plugin.local-notification": { + "PACKAGE_NAME": "com.adamdon.sw" } }, "dependent_plugins": { "cordova-plugin-device": { "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-app-event": { + "PACKAGE_NAME": "com.adamdon.sw" } } } \ No newline at end of file diff --git a/plugins/cordova-plugin-app-event/CHANGELOG.md b/plugins/cordova-plugin-app-event/CHANGELOG.md new file mode 100644 index 0000000..87e271a --- /dev/null +++ b/plugins/cordova-plugin-app-event/CHANGELOG.md @@ -0,0 +1,13 @@ +ChangeLog +--------- + +#### Version 1.2.0 (17.02.2016) +- White-list swizzling through APPAppEventDelegate protocol (#5) +- Finally fixed `EXC_BAD_ACCESS error` (#4) +- Removed usage of `nullable` to prevent build failures + +#### Version 1.1.0 (02.01.2016) +- Fixed `EXC_BAD_ACCESS error` + +#### Version 1.0.0 (01.01.2016) +- Initial version diff --git a/plugins/cordova-plugin-app-event/LICENSE b/plugins/cordova-plugin-app-event/LICENSE new file mode 100644 index 0000000..0d3f5ce --- /dev/null +++ b/plugins/cordova-plugin-app-event/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2013-2016 appPlant UG, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/plugins/cordova-plugin-app-event/README.md b/plugins/cordova-plugin-app-event/README.md new file mode 100644 index 0000000..6217360 --- /dev/null +++ b/plugins/cordova-plugin-app-event/README.md @@ -0,0 +1,88 @@ +[![npm version](https://badge.fury.io/js/cordova-plugin-app-event.svg)](http://badge.fury.io/js/cordova-plugin-app-event) + +Cordova App-Event Plugin +======================== + +The essential purpose of that plugin is to broadcast iOS-specific application events, so that 3rd party plugins can listen to them. + +Its mainly used as an internal dependency for the [LocalNotification][local_notification_plugin] and [Badge][badge_plugin] plugin. But can be used by any other plugin also. Feel free to submit an PR to broadcast additional events. + +As of right now its possible to add observers for these events: +- [didFinishLaunchingWithOptions][didFinishLaunchingWithOptions] +- [didRegisterUserNotificationSettings][didRegisterUserNotificationSettings] +- [didReceiveLocalNotification][didReceiveLocalNotification] + + +## Usage + +#### 1. Add and install the plugin as an dependency +Once you have added the plugin as an dependency you can add observers for them. + +```xml + + + +``` + +#### 2. Add the protocol to the plugin's interface +As first the plugin needs to indicate interest to receivce app events by adding the `APPAppEventDelegate` protocol. + +__Note:__ Required for version 1.2.0 or newer! + +```obj-c +// MyCordovaPlugin.h + +#import "APPAppEventDelegate.h" +#import + +@interface APPLocalNotification : CDVPlugin + +@implementation MyCordovaPlugin + +... + +@end +``` + +#### 3. Add implementations for the delegated events +To add an observer you need to implement the [UIApplicationDelegate Protocol][app_delegate_protocol]. Implementations from your _AppDelegate_ class don't get overwritten! + +For the `didReceiveLocalNotification` event you would need to add that method. + +```obj-c +// MyCordovaPlugin.m + +@implementation MyCordovaPlugin + +- (void) didReceiveLocalNotification:(NSNotification*)localNotification +{ + ... +} + +@end +``` + + +## Contributing + +1. Fork it +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Add some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create new Pull Request + + +## License + +This software is released under the [Apache 2.0 License][apache2_license]. + +© 2013-2016 appPlant UG, Inc. All rights reserved + + +[local_notification_plugin]: https://github.com/katzer/cordova-plugin-local-notifications +[badge_plugin]: https://github.com/katzer/cordova-plugin-badge +[didFinishLaunchingWithOptions]: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html?hl=ar#//apple_ref/occ/intfm/UIApplicationDelegate/application:didFinishLaunchingWithOptions: +[didRegisterUserNotificationSettings]: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html?hl=ar#//apple_ref/occ/intfm/UIApplicationDelegate/application:didRegisterUserNotificationSettings: +[didReceiveLocalNotification]: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html?hl=ar#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveLocalNotification: +[app_delegate_protocol]: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/ +[apache2_license]: http://opensource.org/licenses/Apache-2.0 diff --git a/plugins/cordova-plugin-app-event/package.json b/plugins/cordova-plugin-app-event/package.json new file mode 100644 index 0000000..2f5af6d --- /dev/null +++ b/plugins/cordova-plugin-app-event/package.json @@ -0,0 +1,37 @@ +{ + "name": "cordova-plugin-app-event", + "version": "1.2.0", + "description": "Broadcasts UIApplicationDelegate events", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/katzer/cordova-plugin-app-event.git" + }, + "keywords": [ + "appplant", + "UIApplicationDelegate", + "didRegisterUserNotificationSettings", + "didReceiveLocalNotification", + "didFinishLaunchingWithOptions", + "cordova", + "ecosystem:cordova" + ], + "platforms": [ + "ios" + ], + "engines": [ + { + "name": "cordova", + "version": ">=3.6.0" + } + ], + "author": "Sebastián Katzer", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/katzer/cordova-plugin-app-event/issues" + }, + "homepage": "https://github.com/katzer/cordova-plugin-app-event#readme" +} diff --git a/plugins/cordova-plugin-app-event/plugin.xml b/plugins/cordova-plugin-app-event/plugin.xml new file mode 100644 index 0000000..92cef92 --- /dev/null +++ b/plugins/cordova-plugin-app-event/plugin.xml @@ -0,0 +1,54 @@ + + + + + + + Application Events + Broadcasts various events to make them available for 3rd parties + appplant UIApplicationDelegate didRegisterUserNotificationSettings didReceiveLocalNotification didFinishLaunchingWithOptions + https://github.com/katzer/cordova-plugin-app-delegate.git + Apache 2.0 + Sebastián Katzer + + + + + + + + + + + + + + + + + + diff --git a/plugins/cordova-plugin-app-event/src/ios/APPAppEventDelegate.h b/plugins/cordova-plugin-app-event/src/ios/APPAppEventDelegate.h new file mode 100644 index 0000000..78e2f40 --- /dev/null +++ b/plugins/cordova-plugin-app-event/src/ios/APPAppEventDelegate.h @@ -0,0 +1,29 @@ +/* + Copyright 2013-2016 appPlant UG + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +@protocol APPAppEventDelegate + +/* + By implementing the interface the plugin indicates interest + to receive app events. + */ + +@end diff --git a/plugins/cordova-plugin-app-event/src/ios/AppDelegate+APPAppEvent.h b/plugins/cordova-plugin-app-event/src/ios/AppDelegate+APPAppEvent.h new file mode 100644 index 0000000..1158896 --- /dev/null +++ b/plugins/cordova-plugin-app-event/src/ios/AppDelegate+APPAppEvent.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2013-2016 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "AppDelegate.h" + +extern NSString* const UIApplicationRegisterUserNotificationSettings; + +@interface AppDelegate (APPAppEvent) + +@end diff --git a/plugins/cordova-plugin-app-event/src/ios/AppDelegate+APPAppEvent.m b/plugins/cordova-plugin-app-event/src/ios/AppDelegate+APPAppEvent.m new file mode 100644 index 0000000..e1b7cc3 --- /dev/null +++ b/plugins/cordova-plugin-app-event/src/ios/AppDelegate+APPAppEvent.m @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2013-2016 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "AppDelegate+APPAppEvent.h" +#import +#import + +NSString* const UIApplicationRegisterUserNotificationSettings = @"UIApplicationRegisterUserNotificationSettings"; + +@implementation AppDelegate (APPAppEvent) + +#pragma mark - +#pragma mark Life Cycle + +/** + * Its dangerous to override a method from within a category. + * Instead we will use method swizzling. + */ ++ (void) load +{ +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 + [self exchange_methods:@selector(application:didRegisterUserNotificationSettings:) + swizzled:@selector(swizzled_application:didRegisterUserNotificationSettings:)]; +#endif + +#if CORDOVA_VERSION_MIN_REQUIRED >= 40000 + [self exchange_methods:@selector(application:didReceiveLocalNotification:) + swizzled:@selector(swizzled_application:didReceiveLocalNotification:)]; +#endif +} + +#pragma mark - +#pragma mark Delegate + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 +/** + * Tells the delegate what types of notifications may be used + * to get the user’s attention. + */ +- (void) swizzled_application:(UIApplication*)application + didRegisterUserNotificationSettings:(UIUserNotificationSettings*)settings +{ + // re-post (broadcast) + [self postNotificationName:UIApplicationRegisterUserNotificationSettings object:settings]; + // This actually calls the original method over in AppDelegate + [self swizzled_application:application didRegisterUserNotificationSettings:settings]; +} +#endif + +#if CORDOVA_VERSION_MIN_REQUIRED >= 40000 +/** + * Repost all local notification using the default NSNotificationCenter so + * multiple plugins may respond. + */ +- (void) swizzled_application:(UIApplication*)application + didReceiveLocalNotification:(UILocalNotification*)notification +{ + // re-post (broadcast) + [self postNotificationName:CDVLocalNotification object:notification]; + // This actually calls the original method over in AppDelegate + [self swizzled_application:application didReceiveLocalNotification:notification]; +} +#endif + +#pragma mark - +#pragma mark Core + +/** + * Exchange the method implementations. + */ ++ (void) exchange_methods:(SEL)original swizzled:(SEL)swizzled +{ + class_addMethod(self, original, (IMP) defaultMethodIMP, "v@:"); + + Method original_method = class_getInstanceMethod(self, original); + Method swizzled_method = class_getInstanceMethod(self, swizzled); + + method_exchangeImplementations(original_method, swizzled_method); +} + +#pragma mark - +#pragma mark Helper + +void defaultMethodIMP (id self, SEL _cmd) { /* nothing to do here */ } + +/** + * Broadcasts the notification to all listeners. + */ +- (void) postNotificationName:(NSString*)aName object:(id)anObject +{ + [[NSNotificationCenter defaultCenter] postNotificationName:aName + object:anObject]; +} + +@end diff --git a/plugins/cordova-plugin-app-event/src/ios/CDVPlugin+APPAppEvent.h b/plugins/cordova-plugin-app-event/src/ios/CDVPlugin+APPAppEvent.h new file mode 100644 index 0000000..571f268 --- /dev/null +++ b/plugins/cordova-plugin-app-event/src/ios/CDVPlugin+APPAppEvent.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2013-2016 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "Cordova/CDVPlugin.h" + +@interface CDVPlugin (APPAppEvent) + +@end diff --git a/plugins/cordova-plugin-app-event/src/ios/CDVPlugin+APPAppEvent.m b/plugins/cordova-plugin-app-event/src/ios/CDVPlugin+APPAppEvent.m new file mode 100644 index 0000000..1a9c4de --- /dev/null +++ b/plugins/cordova-plugin-app-event/src/ios/CDVPlugin+APPAppEvent.m @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2013-2016 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "APPAppEventDelegate.h" +#import "CDVPlugin+APPAppEvent.h" +#import "AppDelegate+APPAppEvent.h" + +#import + +@implementation CDVPlugin (APPAppEvent) + +static IMP orig_pluginInitialize; + +#pragma mark - +#pragma mark Life Cycle + +/** + * Its dangerous to override a method from within a category. + * Instead we will use method swizzling. + */ ++ (void) initialize +{ + // To keep compatibility with local-notifiations v0.8.4 + if ([NSStringFromClass(self) isEqualToString:@"APPLocalNotification"] + || [self conformsToProtocol:@protocol(APPAppEventDelegate)]) { + + orig_pluginInitialize = [self exchange_init_methods]; + } +} + +#pragma mark - +#pragma mark Delegate + +/** + * Registers obervers after plugin was initialized. + */ +void swizzled_pluginInitialize(id self, SEL _cmd) +{ + if (orig_pluginInitialize != NULL) { + ((void(*)(id, SEL))orig_pluginInitialize)(self, _cmd); + orig_pluginInitialize = NULL; + } + + [self addObserver:NSSelectorFromString(@"didReceiveLocalNotification:") + name:CDVLocalNotification + object:NULL]; + + [self addObserver:NSSelectorFromString(@"didFinishLaunchingWithOptions:") + name:UIApplicationDidFinishLaunchingNotification + object:NULL]; + + [self addObserver:NSSelectorFromString(@"didRegisterUserNotificationSettings:") + name:UIApplicationRegisterUserNotificationSettings + object:NULL]; +} + +#pragma mark - +#pragma mark Core + +/** + * Exchange the method implementations for pluginInitialize + * and return the original implementation. + */ ++ (IMP) exchange_init_methods +{ + IMP swizzleImp = (IMP) swizzled_pluginInitialize; + Method origImp = class_getInstanceMethod(self, @selector(pluginInitialize)); + + if (method_getImplementation(origImp) != swizzleImp) { + return method_setImplementation(origImp, swizzleImp); + } + + return NULL; +} + +/** + * Register an observer if the caller responds to it. + */ +- (void) addObserver:(SEL)selector + name:(NSString*)event + object:(id)object +{ + if (![self respondsToSelector:selector]) + return; + + NSNotificationCenter* center = [NSNotificationCenter + defaultCenter]; + + [center addObserver:self + selector:selector + name:event + object:object]; +} + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/CHANGELOG.md b/plugins/de.appplant.cordova.plugin.local-notification/CHANGELOG.md new file mode 100644 index 0000000..8771655 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/CHANGELOG.md @@ -0,0 +1,100 @@ +ChangeLog +--------- + +Please also read the [Upgrade Guide](https://github.com/katzer/cordova-plugin-local-notifications/wiki/Upgrade-Guide) for more information. + +#### Version 0.8.4 (04.01.2016) +- Bug fixes + - SyntaxError: missing ) after argument list + +#### Version 0.8.3 (03.01.2016) +- Platform enhancements + - Support for the `Crosswalk Engine` + - Support for `cordova-ios@4` and the `WKWebView Engine` + - Support for `cordova-windows@4` and `Windows 10` without using hooks +- Enhancements + - New `color` attribute for Android (Thanks to @Eusebius1920) + - New `quarter` intervall for iOS & Android + - `smallIcon` is optional (Android) + - `update` checks for permission like _schedule_ + - Decreased time-frame for trigger event (iOS) + - Force `every:` to be a string on iOS +- Bug fixes + - Fixed #634 option to skip permission check + - Fixed #588 crash when basename & extension can't be extracted (Android) + - Fixed #732 loop between update and trigger (Android) + - Fixed #710 crash due to >500 notifications (Android) + - Fixed #682 crash while resuming app from notification (Android 6) + - Fixed #612 cannot update icon or sound (Android) + - Fixed crashing get(ID) if notification doesn't exist + - Fixed #569 getScheduled returns two items per notification + - Fixed #700 notifications appears on bootup + +#### Version 0.8.2 (08.11.2015) +- Submitted to npm +- Initial support for the `windows` platform +- Re-add autoCancel option on Android +- Warn about unknown properties +- Fix crash on iOS 9 +- Fixed webView-Problems with cordova-android 4.0 +- Fix get* with single id +- Fix issue when passing data in milliseconds +- Update device plugin id +- Several other fixes + +#### Version 0.8.1 (08.03.2015) + +- Fix incompatibility with cordova version 3.5-3.0 +- Fire `clear` instead of `cancel` event when clicked on repeating notifications +- Do not fire `clear` or `cancel` event when clicked on persistent notifications + +### Version 0.8.0 (05.03.2015) + +- Support for iOS 8, Android 2 (SDK >= 7) and Android 5 + - Windows Phone 8.1 will be added soon +- New interfaces to ask for / register permissions required to schedule local notifications + - `hasPermission()` and `registerPermission()` + - _schedule()_ will register the permission automatically and schedule the notification if granted. +- New interface to update already scheduled|triggered local notifications + - `update()` +- New interfaces to clear the notification center + - `clear()` and `clearAll()` +- New interfaces to query for local notifications, their properties, their IDs and their existence depend on their state + - `isPresent()`, `isScheduled()`, `isTriggered()` + - `getIds()`, `getAllIds()`, `getScheduledIds()`, `getTriggeredIds()` + - `get()`, `getAll()`, `getScheduled()`, `getTriggered()` +- Schedule multiple local notifications at once + - `schedule( [{...},{...}] )` +- Update multiple local notifications at once + - `update( [{...},{...}] )` +- Clear multiple local notifications at once + - `clear( [1, 2] )` +- Cancel multiple local notifications at once + - `cancel( [1, 2] )` +- New URI format to specify sound and image resources + - `http(s):` for remote resources _(Android)_ + - `file:` for local resources relative to the _www_ folder + - `res:` for native resources +- New events + - `schedule`, `update`, `clear`, `clearall` and `cancelall` +- Enhanced event informations + - Listener will get called with the local notification object instead of only the ID +- Multiple listener for one event + - `on(event, callback, scope)` +- Unregister event listener + - `un(event, callback)` +- New Android specific properties + - `led` properties + - `sound` and `image` accepts remote resources +- Callback function and scope for all interface methods + - `schedule( notification, callback, scope )` +- Renamed `add()` to `schedule()` +- `autoCancel` property has been removed + - Use `ongoing: true` for persistent local notifications on Android +- Renamed repeat intervals + - `second`, `minute`, `hour`, `day`, `week`, `month` and `year` +- Renamed some local notification properties + - `date`, `json`, `message` and `repeat` + - Scheduling local notifications with the deprecated properties is still possible +- [Kitchen Sink sample app](https://github.com/katzer/cordova-plugin-local-notifications/tree/example) +- [Wiki](https://github.com/katzer/cordova-plugin-local-notifications/wiki) diff --git a/plugins/de.appplant.cordova.plugin.local-notification/LICENSE b/plugins/de.appplant.cordova.plugin.local-notification/LICENSE new file mode 100644 index 0000000..28974b7 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2013-2015 appPlant UG, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/plugins/de.appplant.cordova.plugin.local-notification/README.md b/plugins/de.appplant.cordova.plugin.local-notification/README.md new file mode 100644 index 0000000..20f853d --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/README.md @@ -0,0 +1,132 @@ + +[![npm version](https://badge.fury.io/js/de.appplant.cordova.plugin.local-notification.svg)](http://badge.fury.io/js/de.appplant.cordova.plugin.local-notification) +[![PayPayl donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=L3HKQCD9UA35A "Donate once-off to this project using Paypal") + +Cordova Local-Notification Plugin +================================= + +The essential purpose of local notifications is to enable an application to inform its users that it has something for them — for example, a message or an upcoming appointment — when the application isn’t running in the foreground.
+They are scheduled by an application and delivered on the same device. + + + +### How they appear to the user +Users see notifications in the following ways: +- Displaying an alert or banner +- Badging the app’s icon +- Playing a sound + + +### Examples of Notification Usage +Local notifications are ideally suited for applications with time-based behaviors, such as calendar and to-do list applications. Applications that run in the background for the limited period allowed by iOS might also find local notifications useful.
+For example, applications that depend on servers for messages or data can poll their servers for incoming items while running in the background; if a message is ready to view or an update is ready to download, they can then present a local notification immediately to inform their users. + + +## Supported Platforms +The current 0.8 branch supports the following platforms: +- __iOS__ _(>= 8)_
+- __Android__ _(SDK >=7)_ +- __Windows 8.1__ _(added with v0.8.2)_ +- __Windows Phone 8.1__ _(added with v0.8.2)_ +- __Windows 10__ _(added with v0.8.3)_ + +Find out more informations [here][wiki_platforms] in our wiki. + + +## Installation +The plugin is installable from source and available on Cordova Plugin Registry and PhoneGap Build. + +Find out more informations [here][wiki_installation] in our wiki. + + +## I want to get a quick overview +All wiki pages contain samples, but for a quick overview the sample section may be the fastest way. + +Find out more informations [here][wiki_samples] in our wiki. + + +## I want to get a deep overview +The plugin supports scheduling local notifications in various ways with a single interface. It also allows you to update, clear or cancel them. There are different interfaces to query for local notifications and a complete set of events to hook into the life cycle of local notifications. + +Find out more about how to schedule single, multiple, delayed or repeating local notifications [here][wiki_schedule].
+Informations about events like _click_ or _trigger_ can be found [here][wiki_events]. + +To get a deep overview we recommend to read about all the topics in our [wiki][wiki] and try out the [Kitchen Sink App][wiki_kitchensink] + + +## I want to see the plugin in action +The plugin offers a kitchen sink sample app. Check out the cordova project and run the app directly from your command line or preferred IDE. + +Find out more informations [here][wiki_kitchensink] in our wiki. + + +## What's new +We are proud to announce our newest release version 0.8.x. Beside the hard work at the office and at the weekends it contains a lot of goodies, new features and easy to use APIs. + +Find out more informations [here][wiki_changelog] in our wiki. + + +## Sample +The sample demonstrates how to schedule a local notification which repeats every week. The listener will be called when the user has clicked on the local notification. + +```javascript +cordova.plugins.notification.local.schedule({ + id: 1, + title: "Production Jour fixe", + text: "Duration 1h", + firstAt: monday_9_am, + every: "week", + sound: "file://sounds/reminder.mp3", + icon: "http://icons.com/?cal_id=1", + data: { meetingId:"123#fg8" } +}); + +cordova.plugins.notification.local.on("click", function (notification) { + joinMeeting(notification.data.meetingId); +}); +``` + +Find out more informations [here][wiki_samples] in our wiki. + + +## I would like to propose new features +We appricate any feature proposal and support for their development. Please describe them [here][feature_proposal_issue]. + +Find out more informations [here][wiki_next] in our wiki. + +## Supporting +Your support is needed. If you use the plugin please send us a drop through the donation button. + +Thank you! + +[![PayPayl donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=L3HKQCD9UA35A "Donate once-off to this project using Paypal") + + +## Contributing + +1. Fork it +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Add some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create new Pull Request + + +## License + +This software is released under the [Apache 2.0 License][apache2_license]. + +© 2013-2016 appPlant UG, Inc. All rights reserved + + +[cordova]: https://cordova.apache.org +[wiki]: https://github.com/katzer/cordova-plugin-local-notifications/wiki +[wiki_platforms]: https://github.com/katzer/cordova-plugin-local-notifications/wiki/02.-Platforms +[wiki_installation]: https://github.com/katzer/cordova-plugin-local-notifications/wiki/03.-Installation +[wiki_kitchensink]: https://github.com/katzer/cordova-plugin-local-notifications/tree/example +[wiki_schedule]: https://github.com/katzer/cordova-plugin-local-notifications/wiki/04.-Scheduling +[wiki_events]: https://github.com/katzer/cordova-plugin-local-notifications/wiki/09.-Events +[wiki_samples]: https://github.com/katzer/cordova-plugin-local-notifications/wiki/11.-Samples +[wiki_changelog]: https://github.com/katzer/cordova-plugin-local-notifications/wiki/Upgrade-Guide +[wiki_next]: https://github.com/katzer/cordova-plugin-local-notifications/wiki/Feature-Requests +[feature_proposal_issue]: https://github.com/katzer/cordova-plugin-local-notifications/issues/451 +[apache2_license]: http://opensource.org/licenses/Apache-2.0 diff --git a/plugins/de.appplant.cordova.plugin.local-notification/package.json b/plugins/de.appplant.cordova.plugin.local-notification/package.json new file mode 100644 index 0000000..f4d685d --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/package.json @@ -0,0 +1,52 @@ +{ + "name": "de.appplant.cordova.plugin.local-notification", + "cordova_name": "Cordova LocalNotification Plugin", + "version": "0.8.4", + "description": "Schedules and queries for local notifications", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/katzer/cordova-plugin-local-notifications.git" + }, + "keywords": [ + "appplant", + "notification", + "local notification", + "cordova", + "ecosystem:cordova", + "cordova-android", + "cordova-ios", + "cordova-windows" + ], + "platforms": [ + "ios", + "android", + "windows" + ], + "engines": [ + { + "name": "cordova", + "version": ">=3.6.0" + }, + { + "name": "cordova-plugman", + "version": ">=4.3.0" + }, + { + "name": "cordova-windows", + "version": ">=4.2.0" + } + ], + "dependencies": { + "cordova-plugin-device": "*", + "cordova-plugin-app-event": ">=1.1.0" + }, + "author": "Sebastián Katzer", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/katzer/cordova-plugin-local-notifications/issues" + }, + "homepage": "https://github.com/katzer/cordova-plugin-local-notifications#readme" +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/plugin.xml b/plugins/de.appplant.cordova.plugin.local-notification/plugin.xml new file mode 100644 index 0000000..7536568 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/plugin.xml @@ -0,0 +1,224 @@ + + + + + LocalNotification + + The plugin supports scheduling local notifications in various ways with a single interface. It also allows you to update, clear or cancel them. There are different interfaces to query for local notifications and a complete set of events to hook into the life cycle of local notifications. To get a deep overview we recommend to read about all the topics in our wiki and try out the Kitchen Sink App + + https://github.com/katzer/cordova-plugin-local-notifications.git + + appplant, notification, local notification + + Apache 2.0 + + Sebastián Katzer + + + + + + + + + + + + + + + Your support is needed. If you use the local-notification plugin please support us in order to ensure further development. + https://github.com/katzer/cordova-plugin-local-notifications#supporting + + Thank you! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/ClearReceiver.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/ClearReceiver.java new file mode 100644 index 0000000..e0892e3 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/ClearReceiver.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import de.appplant.cordova.plugin.notification.Notification; + + +/** + * The clear intent receiver is triggered when the user clears a + * notification manually. It un-persists the cleared notification from the + * shared preferences. + */ +public class ClearReceiver extends de.appplant.cordova.plugin.notification.ClearReceiver { + + /** + * Called when a local notification was cleared from outside of the app. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onClear (Notification notification) { + super.onClear(notification); + LocalNotification.fireEvent("clear", notification); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/ClickActivity.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/ClickActivity.java new file mode 100644 index 0000000..85a5355 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/ClickActivity.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import de.appplant.cordova.plugin.notification.Builder; +import de.appplant.cordova.plugin.notification.Notification; +import de.appplant.cordova.plugin.notification.TriggerReceiver; + +/** + * The receiver activity is triggered when a notification is clicked by a user. + * The activity calls the background callback and brings the launch intent + * up to foreground. + */ +public class ClickActivity extends de.appplant.cordova.plugin.notification.ClickActivity { + + /** + * Called when local notification was clicked by the user. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onClick(Notification notification) { + LocalNotification.fireEvent("click", notification); + + super.onClick(notification); + + if (notification.getOptions().isOngoing()) + return; + + String event = notification.isRepeating() ? "clear" : "cancel"; + LocalNotification.fireEvent(event, notification); + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + @Override + public Notification buildNotification (Builder builder) { + return builder + .setTriggerReceiver(TriggerReceiver.class) + .build(); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/LocalNotification.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/LocalNotification.java new file mode 100644 index 0000000..b4be09f --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/LocalNotification.java @@ -0,0 +1,622 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import android.app.Activity; + +import org.apache.cordova.CallbackContext; +import org.apache.cordova.CordovaInterface; +import org.apache.cordova.CordovaPlugin; +import org.apache.cordova.CordovaWebView; +import org.apache.cordova.PluginResult; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import de.appplant.cordova.plugin.notification.Manager; +import de.appplant.cordova.plugin.notification.Notification; + +/** + * This plugin utilizes the Android AlarmManager in combination with local + * notifications. When a local notification is scheduled the alarm manager takes + * care of firing the event. When the event is processed, a notification is put + * in the Android notification center and status bar. + */ +public class LocalNotification extends CordovaPlugin { + + // Reference to the web view for static access + private static CordovaWebView webView = null; + + // Indicates if the device is ready (to receive events) + private static Boolean deviceready = false; + + // To inform the user about the state of the app in callbacks + protected static Boolean isInBackground = true; + + // Queues all events before deviceready + private static ArrayList eventQueue = new ArrayList(); + + /** + * Called after plugin construction and fields have been initialized. + * Prefer to use pluginInitialize instead since there is no value in + * having parameters on the initialize() function. + * + * pluginInitialize is not available for cordova 3.0-3.5 ! + */ + @Override + public void initialize (CordovaInterface cordova, CordovaWebView webView) { + LocalNotification.webView = super.webView; + } + + /** + * Called when the system is about to start resuming a previous activity. + * + * @param multitasking + * Flag indicating if multitasking is turned on for app + */ + @Override + public void onPause(boolean multitasking) { + super.onPause(multitasking); + isInBackground = true; + } + + /** + * Called when the activity will start interacting with the user. + * + * @param multitasking + * Flag indicating if multitasking is turned on for app + */ + @Override + public void onResume(boolean multitasking) { + super.onResume(multitasking); + isInBackground = false; + deviceready(); + } + + /** + * The final call you receive before your activity is destroyed. + */ + @Override + public void onDestroy() { + deviceready = false; + isInBackground = true; + } + + /** + * Executes the request. + * + * This method is called from the WebView thread. To do a non-trivial + * amount of work, use: + * cordova.getThreadPool().execute(runnable); + * + * To run on the UI thread, use: + * cordova.getActivity().runOnUiThread(runnable); + * + * @param action + * The action to execute. + * @param args + * The exec() arguments in JSON form. + * @param command + * The callback context used when calling back into JavaScript. + * @return + * Whether the action was valid. + */ + @Override + public boolean execute (final String action, final JSONArray args, + final CallbackContext command) throws JSONException { + + Notification.setDefaultTriggerReceiver(TriggerReceiver.class); + + cordova.getThreadPool().execute(new Runnable() { + public void run() { + if (action.equals("schedule")) { + schedule(args); + command.success(); + } + else if (action.equals("update")) { + update(args); + command.success(); + } + else if (action.equals("cancel")) { + cancel(args); + command.success(); + } + else if (action.equals("cancelAll")) { + cancelAll(); + command.success(); + } + else if (action.equals("clear")) { + clear(args); + command.success(); + } + else if (action.equals("clearAll")) { + clearAll(); + command.success(); + } + else if (action.equals("isPresent")) { + isPresent(args.optInt(0), command); + } + else if (action.equals("isScheduled")) { + isScheduled(args.optInt(0), command); + } + else if (action.equals("isTriggered")) { + isTriggered(args.optInt(0), command); + } + else if (action.equals("getAllIds")) { + getAllIds(command); + } + else if (action.equals("getScheduledIds")) { + getScheduledIds(command); + } + else if (action.equals("getTriggeredIds")) { + getTriggeredIds(command); + } + else if (action.equals("getSingle")) { + getSingle(args, command); + } + else if (action.equals("getSingleScheduled")) { + getSingleScheduled(args, command); + } + else if (action.equals("getSingleTriggered")) { + getSingleTriggered(args, command); + } + else if (action.equals("getAll")) { + getAll(args, command); + } + else if (action.equals("getScheduled")) { + getScheduled(args, command); + } + else if (action.equals("getTriggered")) { + getTriggered(args, command); + } + else if (action.equals("deviceready")) { + deviceready(); + } + } + }); + + return true; + } + + /** + * Schedule multiple local notifications. + * + * @param notifications + * Properties for each local notification + */ + private void schedule (JSONArray notifications) { + for (int i = 0; i < notifications.length(); i++) { + JSONObject options = notifications.optJSONObject(i); + + Notification notification = + getNotificationMgr().schedule(options, TriggerReceiver.class); + + fireEvent("schedule", notification); + } + } + + /** + * Update multiple local notifications. + * + * @param updates + * Notification properties including their IDs + */ + private void update (JSONArray updates) { + for (int i = 0; i < updates.length(); i++) { + JSONObject update = updates.optJSONObject(i); + int id = update.optInt("id", 0); + + Notification notification = + getNotificationMgr().update(id, update, TriggerReceiver.class); + + if (notification == null) + continue; + + fireEvent("update", notification); + } + } + + /** + * Cancel multiple local notifications. + * + * @param ids + * Set of local notification IDs + */ + private void cancel (JSONArray ids) { + for (int i = 0; i < ids.length(); i++) { + int id = ids.optInt(i, 0); + + Notification notification = + getNotificationMgr().cancel(id); + + if (notification == null) + continue; + + fireEvent("cancel", notification); + } + } + + /** + * Cancel all scheduled notifications. + */ + private void cancelAll() { + getNotificationMgr().cancelAll(); + fireEvent("cancelall"); + } + + /** + * Clear multiple local notifications without canceling them. + * + * @param ids + * Set of local notification IDs + */ + private void clear(JSONArray ids){ + for (int i = 0; i < ids.length(); i++) { + int id = ids.optInt(i, 0); + + Notification notification = + getNotificationMgr().clear(id); + + if (notification == null) + continue; + + fireEvent("clear", notification); + } + } + + /** + * Clear all triggered notifications without canceling them. + */ + private void clearAll() { + getNotificationMgr().clearAll(); + fireEvent("clearall"); + } + + /** + * If a notification with an ID is present. + * + * @param id + * Notification ID + * @param command + * The callback context used when calling back into JavaScript. + */ + private void isPresent (int id, CallbackContext command) { + boolean exist = getNotificationMgr().exist(id); + + PluginResult result = new PluginResult( + PluginResult.Status.OK, exist); + + command.sendPluginResult(result); + } + + /** + * If a notification with an ID is scheduled. + * + * @param id + * Notification ID + * @param command + * The callback context used when calling back into JavaScript. + */ + private void isScheduled (int id, CallbackContext command) { + boolean exist = getNotificationMgr().exist( + id, Notification.Type.SCHEDULED); + + PluginResult result = new PluginResult( + PluginResult.Status.OK, exist); + + command.sendPluginResult(result); + } + + /** + * If a notification with an ID is triggered. + * + * @param id + * Notification ID + * @param command + * The callback context used when calling back into JavaScript. + */ + private void isTriggered (int id, CallbackContext command) { + boolean exist = getNotificationMgr().exist( + id, Notification.Type.TRIGGERED); + + PluginResult result = new PluginResult( + PluginResult.Status.OK, exist); + + command.sendPluginResult(result); + } + + /** + * Set of IDs from all existent notifications. + * + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getAllIds (CallbackContext command) { + List ids = getNotificationMgr().getIds(); + + command.success(new JSONArray(ids)); + } + + /** + * Set of IDs from all scheduled notifications. + * + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getScheduledIds (CallbackContext command) { + List ids = getNotificationMgr().getIdsByType( + Notification.Type.SCHEDULED); + + command.success(new JSONArray(ids)); + } + + /** + * Set of IDs from all triggered notifications. + * + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getTriggeredIds (CallbackContext command) { + List ids = getNotificationMgr().getIdsByType( + Notification.Type.TRIGGERED); + + command.success(new JSONArray(ids)); + } + + /** + * Options from local notification. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getSingle (JSONArray ids, CallbackContext command) { + getOptions(ids.optString(0), Notification.Type.ALL, command); + } + + /** + * Options from scheduled notification. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getSingleScheduled (JSONArray ids, CallbackContext command) { + getOptions(ids.optString(0), Notification.Type.SCHEDULED, command); + } + + /** + * Options from triggered notification. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getSingleTriggered (JSONArray ids, CallbackContext command) { + getOptions(ids.optString(0), Notification.Type.TRIGGERED, command); + } + + /** + * Set of options from local notification. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getAll (JSONArray ids, CallbackContext command) { + getOptions(ids, Notification.Type.ALL, command); + } + + /** + * Set of options from scheduled notifications. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getScheduled (JSONArray ids, CallbackContext command) { + getOptions(ids, Notification.Type.SCHEDULED, command); + } + + /** + * Set of options from triggered notifications. + * + * @param ids + * Set of local notification IDs + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getTriggered (JSONArray ids, CallbackContext command) { + getOptions(ids, Notification.Type.TRIGGERED, command); + } + + /** + * Options from local notification. + * + * @param id + * Set of local notification IDs + * @param type + * The local notification life cycle type + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getOptions (String id, Notification.Type type, + CallbackContext command) { + + JSONArray ids = new JSONArray().put(id); + PluginResult result; + + List options = + getNotificationMgr().getOptionsBy(type, toList(ids)); + + if (options.isEmpty()) { + // Status.NO_RESULT led to no callback invocation :( + // Status.OK led to no NPE and crash + result = new PluginResult(PluginResult.Status.NO_RESULT); + } else { + result = new PluginResult(PluginResult.Status.OK, options.get(0)); + } + + command.sendPluginResult(result); + } + + /** + * Set of options from local notifications. + * + * @param ids + * Set of local notification IDs + * @param type + * The local notification life cycle type + * @param command + * The callback context used when calling back into JavaScript. + */ + private void getOptions (JSONArray ids, Notification.Type type, + CallbackContext command) { + + List options; + + if (ids.length() == 0) { + options = getNotificationMgr().getOptionsByType(type); + } else { + options = getNotificationMgr().getOptionsBy(type, toList(ids)); + } + + command.success(new JSONArray(options)); + } + + /** + * Call all pending callbacks after the deviceready event has been fired. + */ + private static synchronized void deviceready () { + isInBackground = false; + deviceready = true; + + for (String js : eventQueue) { + sendJavascript(js); + } + + eventQueue.clear(); + } + + /** + * Fire given event on JS side. Does inform all event listeners. + * + * @param event + * The event name + */ + private void fireEvent (String event) { + fireEvent(event, null); + } + + /** + * Fire given event on JS side. Does inform all event listeners. + * + * @param event + * The event name + * @param notification + * Optional local notification to pass the id and properties. + */ + static void fireEvent (String event, Notification notification) { + String state = getApplicationState(); + String params = "\"" + state + "\""; + + if (notification != null) { + params = notification.toString() + "," + params; + } + + String js = "cordova.plugins.notification.local.core.fireEvent(" + + "\"" + event + "\"," + params + ")"; + + sendJavascript(js); + } + + /** + * Use this instead of deprecated sendJavascript + * + * @param js + * JS code snippet as string + */ + private static synchronized void sendJavascript(final String js) { + + if (!deviceready) { + eventQueue.add(js); + return; + } + Runnable jsLoader = new Runnable() { + public void run() { + webView.loadUrl("javascript:" + js); + } + }; + try { + Method post = webView.getClass().getMethod("post",Runnable.class); + post.invoke(webView,jsLoader); + } catch(Exception e) { + + ((Activity)(webView.getContext())).runOnUiThread(jsLoader); + } + } + + /** + * Convert JSON array of integers to List. + * + * @param ary + * Array of integers + */ + private List toList (JSONArray ary) { + ArrayList list = new ArrayList(); + + for (int i = 0; i < ary.length(); i++) { + list.add(ary.optInt(i)); + } + + return list; + } + + /** + * Current application state. + * + * @return + * "background" or "foreground" + */ + static String getApplicationState () { + return isInBackground ? "background" : "foreground"; + } + + /** + * Notification manager instance. + */ + private Manager getNotificationMgr() { + return Manager.getInstance(cordova.getActivity()); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/RestoreReceiver.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/RestoreReceiver.java new file mode 100644 index 0000000..675ea7c --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/RestoreReceiver.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2014-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import de.appplant.cordova.plugin.notification.AbstractRestoreReceiver; +import de.appplant.cordova.plugin.notification.Builder; +import de.appplant.cordova.plugin.notification.Notification; + +/** + * This class is triggered upon reboot of the device. It needs to re-register + * the alarms with the AlarmManager since these alarms are lost in case of + * reboot. + */ +public class RestoreReceiver extends AbstractRestoreReceiver { + + /** + * Called when a local notification need to be restored. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onRestore (Notification notification) { + if (notification.isScheduled()) { + notification.schedule(); + } else { + notification.cancel(); + } + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + @Override + public Notification buildNotification (Builder builder) { + return builder + .setTriggerReceiver(TriggerReceiver.class) + .setClearReceiver(ClearReceiver.class) + .setClickActivity(ClickActivity.class) + .build(); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/TriggerReceiver.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/TriggerReceiver.java new file mode 100644 index 0000000..3c423c0 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/TriggerReceiver.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.localnotification; + +import de.appplant.cordova.plugin.notification.Builder; +import de.appplant.cordova.plugin.notification.Notification; + +/** + * The alarm receiver is triggered when a scheduled alarm is fired. This class + * reads the information in the intent and displays this information in the + * Android notification bar. The notification uses the default notification + * sound and it vibrates the phone. + */ +public class TriggerReceiver extends de.appplant.cordova.plugin.notification.TriggerReceiver { + + /** + * Called when a local notification was triggered. Does present the local + * notification, re-schedule the alarm if necessary and fire trigger event. + * + * @param notification + * Wrapper around the local notification + * @param updated + * If an update has triggered or the original + */ + @Override + public void onTrigger (Notification notification, boolean updated) { + super.onTrigger(notification, updated); + + if (!updated) { + LocalNotification.fireEvent("trigger", notification); + } + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + @Override + public Notification buildNotification (Builder builder) { + return builder + .setTriggerReceiver(TriggerReceiver.class) + .setClickActivity(ClickActivity.class) + .setClearReceiver(ClearReceiver.class) + .build(); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractClearReceiver.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractClearReceiver.java new file mode 100644 index 0000000..94d2a19 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractClearReceiver.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Abstract delete receiver for local notifications. Creates the local + * notification and calls the event functions for further proceeding. + */ +abstract public class AbstractClearReceiver extends BroadcastReceiver { + + /** + * Called when the notification was cleared from the notification center. + * + * @param context + * Application context + * @param intent + * Received intent with content data + */ + @Override + public void onReceive(Context context, Intent intent) { + Bundle bundle = intent.getExtras(); + JSONObject options; + + try { + String data = bundle.getString(Options.EXTRA); + options = new JSONObject(data); + } catch (JSONException e) { + e.printStackTrace(); + return; + } + + Notification notification = + new Builder(context, options).build(); + + onClear(notification); + } + + /** + * Called when a local notification was cleared from outside of the app. + * + * @param notification + * Wrapper around the local notification + */ + abstract public void onClear (Notification notification); + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractClickActivity.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractClickActivity.java new file mode 100644 index 0000000..5b70e14 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractClickActivity.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Abstract content receiver activity for local notifications. Creates the + * local notification and calls the event functions for further proceeding. + */ +abstract public class AbstractClickActivity extends Activity { + + /** + * Called when local notification was clicked to launch the main intent. + * + * @param state + * Saved instance state + */ + @Override + public void onCreate (Bundle state) { + super.onCreate(state); + + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + Context context = getApplicationContext(); + + try { + String data = bundle.getString(Options.EXTRA); + JSONObject options = new JSONObject(data); + + Builder builder = + new Builder(context, options); + + Notification notification = + buildNotification(builder); + + onClick(notification); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + /** + * Fixes "Unable to resume activity" error. + * Theme_NoDisplay: Activities finish themselves before being resumed. + */ + @Override + protected void onResume() { + super.onResume(); + finish(); + } + + /** + * Called when local notification was clicked by the user. + * + * @param notification + * Wrapper around the local notification + */ + abstract public void onClick (Notification notification); + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + abstract public Notification buildNotification (Builder builder); + + /** + * Launch main intent from package. + */ + public void launchApp() { + Context context = getApplicationContext(); + String pkgName = context.getPackageName(); + + Intent intent = context + .getPackageManager() + .getLaunchIntentForPackage(pkgName); + + intent.addFlags( + Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP); + + context.startActivity(intent); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractRestoreReceiver.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractRestoreReceiver.java new file mode 100644 index 0000000..8a1f365 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractRestoreReceiver.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import org.json.JSONObject; + +import java.util.List; + +/** + * This class is triggered upon reboot of the device. It needs to re-register + * the alarms with the AlarmManager since these alarms are lost in case of + * reboot. + */ +abstract public class AbstractRestoreReceiver extends BroadcastReceiver { + + /** + * Called on device reboot. + * + * @param context + * Application context + * @param intent + * Received intent with content data + */ + @Override + public void onReceive (Context context, Intent intent) { + Manager notificationMgr = + Manager.getInstance(context); + + List options = + notificationMgr.getOptions(); + + for (JSONObject data : options) { + Builder builder = new Builder(context, data); + + Notification notification = + buildNotification(builder); + + onRestore(notification); + } + } + + /** + * Called when a local notification need to be restored. + * + * @param notification + * Wrapper around the local notification + */ + abstract public void onRestore (Notification notification); + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + abstract public Notification buildNotification (Builder builder); + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractTriggerReceiver.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractTriggerReceiver.java new file mode 100644 index 0000000..459e6d8 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AbstractTriggerReceiver.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Calendar; + +/** + * Abstract broadcast receiver for local notifications. Creates the + * notification options and calls the event functions for further proceeding. + */ +abstract public class AbstractTriggerReceiver extends BroadcastReceiver { + + /** + * Called when an alarm was triggered. + * + * @param context + * Application context + * @param intent + * Received intent with content data + */ + @Override + public void onReceive(Context context, Intent intent) { + Bundle bundle = intent.getExtras(); + Options options; + + try { + String data = bundle.getString(Options.EXTRA); + JSONObject dict = new JSONObject(data); + + options = new Options(context).parse(dict); + } catch (JSONException e) { + e.printStackTrace(); + return; + } + + if (options == null) + return; + + if (isFirstAlarmInFuture(options)) + return; + + Builder builder = new Builder(options); + Notification notification = buildNotification(builder); + boolean updated = notification.isUpdate(false); + + onTrigger(notification, updated); + } + + /** + * Called when a local notification was triggered. + * + * @param notification + * Wrapper around the local notification + * @param updated + * If an update has triggered or the original + */ + abstract public void onTrigger (Notification notification, boolean updated); + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + abstract public Notification buildNotification (Builder builder); + + /* + * If you set a repeating alarm at 11:00 in the morning and it + * should trigger every morning at 08:00 o'clock, it will + * immediately fire. E.g. Android tries to make up for the + * 'forgotten' reminder for that day. Therefore we ignore the event + * if Android tries to 'catch up'. + */ + private Boolean isFirstAlarmInFuture (Options options) { + Notification notification = new Builder(options).build(); + + if (!notification.isRepeating()) + return false; + + Calendar now = Calendar.getInstance(); + Calendar alarm = Calendar.getInstance(); + + alarm.setTime(notification.getOptions().getTriggerDate()); + + int alarmHour = alarm.get(Calendar.HOUR_OF_DAY); + int alarmMin = alarm.get(Calendar.MINUTE); + int currentHour = now.get(Calendar.HOUR_OF_DAY); + int currentMin = now.get(Calendar.MINUTE); + + return (currentHour != alarmHour && currentMin != alarmMin); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AssetUtil.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AssetUtil.java new file mode 100644 index 0000000..66662e5 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/AssetUtil.java @@ -0,0 +1,433 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.content.Context; +import android.content.res.AssetManager; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.StrictMode; +import android.util.Log; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.UUID; + +/** + * Util class to map unified asset URIs to native URIs. URIs like file:/// + * map to absolute paths while file:// point relatively to the www folder + * within the asset resources. And res:// means a resource from the native + * res folder. Remote assets are accessible via http:// for example. + */ +class AssetUtil { + + // Name of the storage folder + private static final String STORAGE_FOLDER = "/localnotification"; + + // Placeholder URI for default sound + private static final String DEFAULT_SOUND = "res://platform_default"; + + // Ref to the context passed through the constructor to access the + // resources and app directory. + private final Context context; + + /** + * Constructor + * + * @param context + * Application context + */ + private AssetUtil(Context context) { + this.context = context; + } + + /** + * Static method to retrieve class instance. + * + * @param context + * Application context + */ + static AssetUtil getInstance(Context context) { + return new AssetUtil(context); + } + + /** + * Parse path path to native URI. + * + * @param path + * Path to path file + */ + Uri parseSound (String path) { + + if (path == null || path.isEmpty()) + return Uri.EMPTY; + + if (path.equalsIgnoreCase(DEFAULT_SOUND)) { + return RingtoneManager.getDefaultUri(RingtoneManager + .TYPE_NOTIFICATION); + } + + return parse(path); + } + + /** + * The URI for a path. + * + * @param path + * The given path + */ + Uri parse (String path) { + + if (path.startsWith("res:")) { + return getUriForResourcePath(path); + } else if (path.startsWith("file:///")) { + return getUriFromPath(path); + } else if (path.startsWith("file://")) { + return getUriFromAsset(path); + } else if (path.startsWith("http")){ + return getUriFromRemote(path); + } + + return Uri.EMPTY; + } + + /** + * URI for a file. + * + * @param path + * Absolute path like file:///... + * + * @return + * URI pointing to the given path + */ + private Uri getUriFromPath(String path) { + String absPath = path.replaceFirst("file://", ""); + File file = new File(absPath); + + if (!file.exists()) { + Log.e("Asset", "File not found: " + file.getAbsolutePath()); + return Uri.EMPTY; + } + + return Uri.fromFile(file); + } + + /** + * URI for an asset. + * + * @param path + * Asset path like file://... + * + * @return + * URI pointing to the given path + */ + private Uri getUriFromAsset(String path) { + String resPath = path.replaceFirst("file:/", "www"); + String fileName = resPath.substring(resPath.lastIndexOf('/') + 1); + File file = getTmpFile(fileName); + + if (file == null) { + Log.e("Asset", "Missing external cache dir"); + return Uri.EMPTY; + } + + try { + AssetManager assets = context.getAssets(); + FileOutputStream outStream = new FileOutputStream(file); + InputStream inputStream = assets.open(resPath); + + copyFile(inputStream, outStream); + + outStream.flush(); + outStream.close(); + + return Uri.fromFile(file); + + } catch (Exception e) { + Log.e("Asset", "File not found: assets/" + resPath); + e.printStackTrace(); + } + + return Uri.EMPTY; + } + + /** + * The URI for a resource. + * + * @param path + * The given relative path + * + * @return + * URI pointing to the given path + */ + private Uri getUriForResourcePath(String path) { + String resPath = path.replaceFirst("res://", ""); + int resId = getResIdForDrawable(resPath); + File file = getTmpFile(); + + if (resId == 0) { + Log.e("Asset", "File not found: " + resPath); + return Uri.EMPTY; + } + + if (file == null) { + Log.e("Asset", "Missing external cache dir"); + return Uri.EMPTY; + } + + try { + Resources res = context.getResources(); + FileOutputStream outStream = new FileOutputStream(file); + InputStream inputStream = res.openRawResource(resId); + copyFile(inputStream, outStream); + + outStream.flush(); + outStream.close(); + + return Uri.fromFile(file); + + } catch (Exception e) { + e.printStackTrace(); + } + + return Uri.EMPTY; + } + + /** + * Uri from remote located content. + * + * @param path + * Remote address + * + * @return + * Uri of the downloaded file + */ + private Uri getUriFromRemote(String path) { + File file = getTmpFile(); + + if (file == null) { + Log.e("Asset", "Missing external cache dir"); + return Uri.EMPTY; + } + + try { + URL url = new URL(path); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + StrictMode.ThreadPolicy policy = + new StrictMode.ThreadPolicy.Builder().permitAll().build(); + + StrictMode.setThreadPolicy(policy); + + connection.setRequestProperty("Connection", "close"); + connection.setConnectTimeout(5000); + connection.connect(); + + InputStream input = connection.getInputStream(); + FileOutputStream outStream = new FileOutputStream(file); + + copyFile(input, outStream); + + outStream.flush(); + outStream.close(); + + return Uri.fromFile(file); + + } catch (MalformedURLException e) { + Log.e("Asset", "Incorrect URL"); + e.printStackTrace(); + } catch (FileNotFoundException e) { + Log.e("Asset", "Failed to create new File from HTTP Content"); + e.printStackTrace(); + } catch (IOException e) { + Log.e("Asset", "No Input can be created from http Stream"); + e.printStackTrace(); + } + + return Uri.EMPTY; + } + + /** + * Copy content from input stream into output stream. + * + * @param in + * The input stream + * @param out + * The output stream + */ + private void copyFile(InputStream in, OutputStream out) throws IOException { + byte[] buffer = new byte[1024]; + int read; + + while ((read = in.read(buffer)) != -1) { + out.write(buffer, 0, read); + } + } + + /** + * Resource ID for drawable. + * + * @param resPath + * Resource path as string + */ + int getResIdForDrawable(String resPath) { + int resId = getResIdForDrawable(getPkgName(), resPath); + + if (resId == 0) { + resId = getResIdForDrawable("android", resPath); + } + + return resId; + } + + /** + * Resource ID for drawable. + * + * @param clsName + * Relative package or global android name space + * @param resPath + * Resource path as string + */ + int getResIdForDrawable(String clsName, String resPath) { + String drawable = getBaseName(resPath); + int resId = 0; + + try { + Class cls = Class.forName(clsName + ".R$drawable"); + + resId = (Integer) cls.getDeclaredField(drawable).get(Integer.class); + } catch (Exception ignore) {} + + return resId; + } + + /** + * Convert drawable resource to bitmap. + * + * @param drawable + * Drawable resource name + */ + Bitmap getIconFromDrawable (String drawable) { + Resources res = context.getResources(); + int iconId; + + iconId = getResIdForDrawable(getPkgName(), drawable); + + if (iconId == 0) { + iconId = getResIdForDrawable("android", drawable); + } + + if (iconId == 0) { + iconId = android.R.drawable.screen_background_dark_transparent; + } + + return BitmapFactory.decodeResource(res, iconId); + } + + /** + * Convert URI to Bitmap. + * + * @param uri + * Internal image URI + */ + Bitmap getIconFromUri (Uri uri) throws IOException { + InputStream input = context.getContentResolver().openInputStream(uri); + + return BitmapFactory.decodeStream(input); + } + + /** + * Extract name of drawable resource from path. + * + * @param resPath + * Resource path as string + */ + private String getBaseName (String resPath) { + String drawable = resPath; + + if (drawable.contains("/")) { + drawable = drawable.substring(drawable.lastIndexOf('/') + 1); + } + + if (resPath.contains(".")) { + drawable = drawable.substring(0, drawable.lastIndexOf('.')); + } + + return drawable; + } + + /** + * Returns a file located under the external cache dir of that app. + * + * @return + * File with a random UUID name + */ + private File getTmpFile () { + // If random UUID is not be enough see + // https://github.com/LukePulverenti/cordova-plugin-local-notifications/blob/267170db14044cbeff6f4c3c62d9b766b7a1dd62/src/android/notification/AssetUtil.java#L255 + return getTmpFile(UUID.randomUUID().toString()); + } + + /** + * Returns a file located under the external cache dir of that app. + * + * @param name + * The name of the file + * @return + * File with the provided name + */ + private File getTmpFile (String name) { + File dir = context.getExternalCacheDir(); + + if (dir == null) { + Log.e("Asset", "Missing external cache dir"); + return null; + } + + String storage = dir.toString() + STORAGE_FOLDER; + + //noinspection ResultOfMethodCallIgnored + new File(storage).mkdir(); + + return new File(storage, name); + } + + /** + * Package name specified by context. + */ + private String getPkgName () { + return context.getPackageName(); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java new file mode 100644 index 0000000..55eb1d3 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import org.json.JSONObject; + +import java.util.Random; + +/** + * Builder class for local notifications. Build fully configured local + * notification specified by JSON object passed from JS side. + */ +public class Builder { + + // Application context passed by constructor + private final Context context; + + // Notification options passed by JS + private final Options options; + + // Receiver to handle the trigger event + private Class triggerReceiver; + + // Receiver to handle the clear event + private Class clearReceiver = ClearReceiver.class; + + // Activity to handle the click event + private Class clickActivity = ClickActivity.class; + + /** + * Constructor + * + * @param context + * Application context + * @param options + * Notification options + */ + public Builder(Context context, JSONObject options) { + this.context = context; + this.options = new Options(context).parse(options); + } + + /** + * Constructor + * + * @param options + * Notification options + */ + public Builder(Options options) { + this.context = options.getContext(); + this.options = options; + } + + /** + * Set trigger receiver. + * + * @param receiver + * Broadcast receiver + */ + public Builder setTriggerReceiver(Class receiver) { + this.triggerReceiver = receiver; + return this; + } + + /** + * Set clear receiver. + * + * @param receiver + * Broadcast receiver + */ + public Builder setClearReceiver(Class receiver) { + this.clearReceiver = receiver; + return this; + } + + /** + * Set click activity. + * + * @param activity + * Activity + */ + public Builder setClickActivity(Class activity) { + this.clickActivity = activity; + return this; + } + + /** + * Creates the notification with all its options passed through JS. + */ + public Notification build() { + Uri sound = options.getSoundUri(); + int smallIcon = options.getSmallIcon(); + NotificationCompat.Builder builder; + + builder = new NotificationCompat.Builder(context) + .setDefaults(0) + .setContentTitle(options.getTitle()) + .setContentText(options.getText()) + .setNumber(options.getBadgeNumber()) + .setTicker(options.getText()) + .setAutoCancel(options.isAutoClear()) + .setOngoing(options.isOngoing()) + .setColor(options.getColor()) + .setLights(options.getLedColor(), 100, 100); + + if (sound != null) { + builder.setSound(sound); + } + + if (smallIcon == 0) { + builder.setSmallIcon(options.getIcon()); + } else { + builder.setSmallIcon(options.getSmallIcon()); + builder.setLargeIcon(options.getIconBitmap()); + } + + applyDeleteReceiver(builder); + applyContentReceiver(builder); + + return new Notification(context, options, builder, triggerReceiver); + } + + /** + * Set intent to handle the delete event. Will clean up some persisted + * preferences. + * + * @param builder + * Local notification builder instance + */ + private void applyDeleteReceiver(NotificationCompat.Builder builder) { + + if (clearReceiver == null) + return; + + Intent intent = new Intent(context, clearReceiver) + .setAction(options.getIdStr()) + .putExtra(Options.EXTRA, options.toString()); + + PendingIntent deleteIntent = PendingIntent.getBroadcast( + context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + + builder.setDeleteIntent(deleteIntent); + } + + /** + * Set intent to handle the click event. Will bring the app to + * foreground. + * + * @param builder + * Local notification builder instance + */ + private void applyContentReceiver(NotificationCompat.Builder builder) { + + if (clickActivity == null) + return; + + Intent intent = new Intent(context, clickActivity) + .putExtra(Options.EXTRA, options.toString()) + .setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + + int reqCode = new Random().nextInt(); + + PendingIntent contentIntent = PendingIntent.getActivity( + context, reqCode, intent, PendingIntent.FLAG_UPDATE_CURRENT); + + builder.setContentIntent(contentIntent); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/ClearReceiver.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/ClearReceiver.java new file mode 100644 index 0000000..761b6c5 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/ClearReceiver.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +/** + * The clear intent receiver is triggered when the user clears a + * notification manually. It un-persists the cleared notification from the + * shared preferences. + */ +public class ClearReceiver extends AbstractClearReceiver { + + /** + * Called when a local notification was cleared from outside of the app. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onClear (Notification notification) { + notification.clear(); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/ClickActivity.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/ClickActivity.java new file mode 100644 index 0000000..dcc0390 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/ClickActivity.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +/** + * The receiver activity is triggered when a notification is clicked by a user. + * The activity calls the background callback and brings the launch intent + * up to foreground. + */ +public class ClickActivity extends AbstractClickActivity { + + /** + * Called when local notification was clicked by the user. Will + * move the app to foreground. + * + * @param notification + * Wrapper around the local notification + */ + @Override + public void onClick(Notification notification) { + launchApp(); + + if (notification.isRepeating()) { + notification.clear(); + } else { + notification.cancel(); + } + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + public Notification buildNotification (Builder builder) { + return builder.build(); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Manager.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Manager.java new file mode 100644 index 0000000..9af3c94 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Manager.java @@ -0,0 +1,458 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.app.NotificationManager; +import android.content.Context; +import android.content.SharedPreferences; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static de.appplant.cordova.plugin.notification.Notification.PREF_KEY; + +/** + * Central way to access all or single local notifications set by specific + * state like triggered or scheduled. Offers shortcut ways to schedule, + * cancel or clear local notifications. + */ +public class Manager { + + // Context passed through constructor and used for notification builder. + private Context context; + + /** + * Constructor + * + * @param context + * Application context + */ + private Manager(Context context){ + this.context = context; + } + + /** + * Static method to retrieve class instance. + * + * @param context + * Application context + */ + public static Manager getInstance(Context context) { + return new Manager(context); + } + + /** + * Schedule local notification specified by JSON object. + * + * @param options + * JSON object with set of options + * @param receiver + * Receiver to handle the trigger event + */ + public Notification schedule (JSONObject options, Class receiver) { + return schedule(new Options(context).parse(options), receiver); + } + + /** + * Schedule local notification specified by options object. + * + * @param options + * Set of notification options + * @param receiver + * Receiver to handle the trigger event + */ + public Notification schedule (Options options, Class receiver) { + Notification notification = new Builder(options) + .setTriggerReceiver(receiver) + .build(); + + notification.schedule(); + + return notification; + } + + /** + * Clear local notification specified by ID. + * + * @param id + * The notification ID + * @param updates + * JSON object with notification options + * @param receiver + * Receiver to handle the trigger event + */ + public Notification update (int id, JSONObject updates, Class receiver) { + Notification notification = get(id); + + if (notification == null) + return null; + + notification.cancel(); + + JSONObject options = mergeJSONObjects( + notification.getOptions().getDict(), updates); + + try { + options.put("updated", true); + } catch (JSONException ignore) {} + + return schedule(options, receiver); + } + + /** + * Clear local notification specified by ID. + * + * @param id + * The notification ID + */ + public Notification clear (int id) { + Notification notification = get(id); + + if (notification != null) { + notification.clear(); + } + + return notification; + } + + /** + * Clear local notification specified by ID. + * + * @param id + * The notification ID + */ + public Notification cancel (int id) { + Notification notification = get(id); + + if (notification != null) { + notification.cancel(); + } + + return notification; + } + + /** + * Clear all local notifications. + */ + public void clearAll () { + List notifications = getAll(); + + for (Notification notification : notifications) { + notification.clear(); + } + + getNotMgr().cancelAll(); + } + + /** + * Cancel all local notifications. + */ + public void cancelAll () { + List notifications = getAll(); + + for (Notification notification : notifications) { + notification.cancel(); + } + + getNotMgr().cancelAll(); + } + + /** + * All local notifications IDs. + */ + public List getIds() { + Set keys = getPrefs().getAll().keySet(); + ArrayList ids = new ArrayList(); + + for (String key : keys) { + try { + ids.add(Integer.parseInt(key)); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + + return ids; + } + + /** + * All local notification IDs for given type. + * + * @param type + * The notification life cycle type + */ + public List getIdsByType(Notification.Type type) { + List notifications = getAll(); + ArrayList ids = new ArrayList(); + + for (Notification notification : notifications) { + if (notification.getType() == type) { + ids.add(notification.getId()); + } + } + + return ids; + } + + /** + * List of local notifications with matching ID. + * + * @param ids + * Set of notification IDs + */ + public List getByIds(List ids) { + ArrayList notifications = new ArrayList(); + + for (int id : ids) { + Notification notification = get(id); + + if (notification != null) { + notifications.add(notification); + } + } + + return notifications; + } + + /** + * List of all local notification. + */ + public List getAll() { + return getByIds(getIds()); + } + + /** + * List of local notifications from given type. + * + * @param type + * The notification life cycle type + */ + public List getByType(Notification.Type type) { + List notifications = getAll(); + ArrayList list = new ArrayList(); + + if (type == Notification.Type.ALL) + return notifications; + + for (Notification notification : notifications) { + if (notification.getType() == type) { + list.add(notification); + } + } + + return list; + } + + /** + * List of local notifications with matching ID from given type. + * + * @param type + * The notification life cycle type + * @param ids + * Set of notification IDs + */ + @SuppressWarnings("UnusedDeclaration") + public List getBy(Notification.Type type, List ids) { + ArrayList notifications = new ArrayList(); + + for (int id : ids) { + Notification notification = get(id); + + if (notification != null && notification.isScheduled()) { + notifications.add(notification); + } + } + + return notifications; + } + + /** + * If a notification with an ID exists. + * + * @param id + * Notification ID + */ + public boolean exist (int id) { + return get(id) != null; + } + + /** + * If a notification with an ID and type exists. + * + * @param id + * Notification ID + * @param type + * Notification type + */ + public boolean exist (int id, Notification.Type type) { + Notification notification = get(id); + + return notification != null && notification.getType() == type; + } + + /** + * List of properties from all local notifications. + */ + public List getOptions() { + return getOptionsById(getIds()); + } + + /** + * List of properties from local notifications with matching ID. + * + * @param ids + * Set of notification IDs + */ + public List getOptionsById(List ids) { + ArrayList options = new ArrayList(); + + for (int id : ids) { + Notification notification = get(id); + + if (notification != null) { + options.add(notification.getOptions().getDict()); + } + } + + return options; + } + + /** + * List of properties from all local notifications from given type. + * + * @param type + * The notification life cycle type + */ + public List getOptionsByType(Notification.Type type) { + ArrayList options = new ArrayList(); + List notifications = getByType(type); + + for (Notification notification : notifications) { + options.add(notification.getOptions().getDict()); + } + + return options; + } + + /** + * List of properties from local notifications with matching ID from + * given type. + * + * @param type + * The notification life cycle type + * @param ids + * Set of notification IDs + */ + public List getOptionsBy(Notification.Type type, + List ids) { + + if (type == Notification.Type.ALL) + return getOptionsById(ids); + + ArrayList options = new ArrayList(); + List notifications = getByIds(ids); + + for (Notification notification : notifications) { + if (notification.getType() == type) { + options.add(notification.getOptions().getDict()); + } + } + + return options; + } + + /** + * Get existent local notification. + * + * @param id + * Notification ID + */ + public Notification get(int id) { + Map alarms = getPrefs().getAll(); + String notId = Integer.toString(id); + JSONObject options; + + if (!alarms.containsKey(notId)) + return null; + + + try { + String json = alarms.get(notId).toString(); + options = new JSONObject(json); + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + + Builder builder = new Builder(context, options); + + return builder.build(); + } + + /** + * Merge two JSON objects. + * + * @param obj1 + * JSON object + * @param obj2 + * JSON object with new options + */ + private JSONObject mergeJSONObjects (JSONObject obj1, JSONObject obj2) { + Iterator it = obj2.keys(); + + while (it.hasNext()) { + try { + String key = (String)it.next(); + + obj1.put(key, obj2.opt(key)); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + return obj1; + } + + /** + * Shared private preferences for the application. + */ + private SharedPreferences getPrefs () { + return context.getSharedPreferences(PREF_KEY, Context.MODE_PRIVATE); + } + + /** + * Notification manager for the application. + */ + private NotificationManager getNotMgr () { + return (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Notification.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Notification.java new file mode 100644 index 0000000..ad36378 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Notification.java @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + + +import android.app.AlarmManager; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Build; +import android.support.v4.app.NotificationCompat; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Date; + +/** + * Wrapper class around OS notification class. Handles basic operations + * like show, delete, cancel for a single local notification instance. + */ +public class Notification { + + // Used to differ notifications by their life cycle state + public enum Type { + ALL, SCHEDULED, TRIGGERED + } + + // Default receiver to handle the trigger event + private static Class defaultReceiver = TriggerReceiver.class; + + // Key for private preferences + static final String PREF_KEY = "LocalNotification"; + + // Application context passed by constructor + private final Context context; + + // Notification options passed by JS + private final Options options; + + // Builder with full configuration + private final NotificationCompat.Builder builder; + + // Receiver to handle the trigger event + private Class receiver = defaultReceiver; + + /** + * Constructor + * + * @param context + * Application context + * @param options + * Parsed notification options + * @param builder + * Pre-configured notification builder + */ + protected Notification (Context context, Options options, + NotificationCompat.Builder builder, Class receiver) { + + this.context = context; + this.options = options; + this.builder = builder; + + this.receiver = receiver != null ? receiver : defaultReceiver; + } + + /** + * Get application context. + */ + public Context getContext () { + return context; + } + + /** + * Get notification options. + */ + public Options getOptions () { + return options; + } + + /** + * Get notification ID. + */ + public int getId () { + return options.getId(); + } + + /** + * If it's a repeating notification. + */ + public boolean isRepeating () { + return getOptions().getRepeatInterval() > 0; + } + + /** + * If the notification was in the past. + */ + public boolean wasInThePast () { + return new Date().after(options.getTriggerDate()); + } + + /** + * If the notification is scheduled. + */ + public boolean isScheduled () { + return isRepeating() || !wasInThePast(); + } + + /** + * If the notification is triggered. + */ + public boolean isTriggered () { + return wasInThePast(); + } + + /** + * If the notification is an update. + * + * @param keepFlag + * Set to false to remove the flag from the option map + */ + protected boolean isUpdate (boolean keepFlag) { + boolean updated = options.getDict().optBoolean("updated", false); + + if (!keepFlag) { + options.getDict().remove("updated"); + } + + return updated; + } + + /** + * Notification type can be one of pending or scheduled. + */ + public Type getType () { + return isScheduled() ? Type.SCHEDULED : Type.TRIGGERED; + } + + /** + * Schedule the local notification. + */ + public void schedule() { + long triggerTime = options.getTriggerTime(); + + persist(); + + // Intent gets called when the Notification gets fired + Intent intent = new Intent(context, receiver) + .setAction(options.getIdStr()) + .putExtra(Options.EXTRA, options.toString()); + + PendingIntent pi = PendingIntent.getBroadcast( + context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); + + if (isRepeating()) { + getAlarmMgr().setRepeating(AlarmManager.RTC_WAKEUP, + triggerTime, options.getRepeatInterval(), pi); + } else { + getAlarmMgr().set(AlarmManager.RTC_WAKEUP, triggerTime, pi); + } + } + + /** + * Clear the local notification without canceling repeating alarms. + */ + public void clear () { + + if (!isRepeating() && wasInThePast()) + unpersist(); + + if (!isRepeating()) + getNotMgr().cancel(getId()); + } + + /** + * Cancel the local notification. + * + * Create an intent that looks similar, to the one that was registered + * using schedule. Making sure the notification id in the action is the + * same. Now we can search for such an intent using the 'getService' + * method and cancel it. + */ + public void cancel() { + Intent intent = new Intent(context, receiver) + .setAction(options.getIdStr()); + + PendingIntent pi = PendingIntent. + getBroadcast(context, 0, intent, 0); + + getAlarmMgr().cancel(pi); + getNotMgr().cancel(options.getId()); + + unpersist(); + } + + /** + * Present the local notification to user. + */ + public void show () { + // TODO Show dialog when in foreground + showNotification(); + } + + /** + * Show as local notification when in background. + */ + @SuppressWarnings("deprecation") + private void showNotification () { + int id = getOptions().getId(); + + if (Build.VERSION.SDK_INT <= 15) { + // Notification for HoneyComb to ICS + getNotMgr().notify(id, builder.getNotification()); + } else { + // Notification for Jellybean and above + getNotMgr().notify(id, builder.build()); + } + } + + /** + * Count of triggers since schedule. + */ + public int getTriggerCountSinceSchedule() { + long now = System.currentTimeMillis(); + long triggerTime = options.getTriggerTime(); + + if (!wasInThePast()) + return 0; + + if (!isRepeating()) + return 1; + + return (int) ((now - triggerTime) / options.getRepeatInterval()); + } + + /** + * Encode options to JSON. + */ + public String toString() { + JSONObject dict = options.getDict(); + JSONObject json = new JSONObject(); + + try { + json = new JSONObject(dict.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + + json.remove("firstAt"); + json.remove("updated"); + json.remove("soundUri"); + json.remove("iconUri"); + + return json.toString(); + } + + /** + * Persist the information of this notification to the Android Shared + * Preferences. This will allow the application to restore the notification + * upon device reboot, app restart, retrieve notifications, aso. + */ + private void persist () { + SharedPreferences.Editor editor = getPrefs().edit(); + + editor.putString(options.getIdStr(), options.toString()); + + if (Build.VERSION.SDK_INT < 9) { + editor.commit(); + } else { + editor.apply(); + } + } + + /** + * Remove the notification from the Android shared Preferences. + */ + private void unpersist () { + SharedPreferences.Editor editor = getPrefs().edit(); + + editor.remove(options.getIdStr()); + + if (Build.VERSION.SDK_INT < 9) { + editor.commit(); + } else { + editor.apply(); + } + } + + /** + * Shared private preferences for the application. + */ + private SharedPreferences getPrefs () { + return context.getSharedPreferences(PREF_KEY, Context.MODE_PRIVATE); + } + + /** + * Notification manager for the application. + */ + private NotificationManager getNotMgr () { + return (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + } + + /** + * Alarm manager for the application. + */ + private AlarmManager getAlarmMgr () { + return (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + } + + /** + * Set default receiver to handle the trigger event. + * + * @param receiver + * broadcast receiver + */ + public static void setDefaultTriggerReceiver (Class receiver) { + defaultReceiver = receiver; + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Options.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Options.java new file mode 100644 index 0000000..9d380d7 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Options.java @@ -0,0 +1,337 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +import android.app.AlarmManager; +import android.content.Context; +import android.graphics.Bitmap; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Date; + +/** + * Wrapper around the JSON object passed through JS which contains all + * possible option values. Class provides simple readers and more advanced + * methods to convert independent values into platform specific values. + */ +public class Options { + + // Key name for bundled extras + static final String EXTRA = "NOTIFICATION_OPTIONS"; + + // The original JSON object + private JSONObject options = new JSONObject(); + + // Repeat interval + private long interval = 0; + + // Application context + private final Context context; + + // Asset util instance + private final AssetUtil assets; + + + /** + * Constructor + * + * @param context + * Application context + */ + public Options(Context context){ + this.context = context; + this.assets = AssetUtil.getInstance(context); + } + + /** + * Parse given JSON properties. + * + * @param options + * JSON properties + */ + public Options parse (JSONObject options) { + this.options = options; + + parseInterval(); + parseAssets(); + + return this; + } + + /** + * Parse repeat interval. + */ + private void parseInterval() { + String every = options.optString("every").toLowerCase(); + + if (every.isEmpty()) { + interval = 0; + } else + if (every.equals("second")) { + interval = 1000; + } else + if (every.equals("minute")) { + interval = AlarmManager.INTERVAL_FIFTEEN_MINUTES / 15; + } else + if (every.equals("hour")) { + interval = AlarmManager.INTERVAL_HOUR; + } else + if (every.equals("day")) { + interval = AlarmManager.INTERVAL_DAY; + } else + if (every.equals("week")) { + interval = AlarmManager.INTERVAL_DAY * 7; + } else + if (every.equals("month")) { + interval = AlarmManager.INTERVAL_DAY * 31; + } else + if (every.equals("quarter")) { + interval = AlarmManager.INTERVAL_HOUR * 2190; + } else + if (every.equals("year")) { + interval = AlarmManager.INTERVAL_DAY * 365; + } else { + try { + interval = Integer.parseInt(every) * 60000; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * Parse asset URIs. + */ + private void parseAssets() { + + if (options.has("iconUri") && !options.optBoolean("updated")) + return; + + Uri iconUri = assets.parse(options.optString("icon", "icon")); + Uri soundUri = assets.parseSound(options.optString("sound", null)); + + try { + options.put("iconUri", iconUri.toString()); + options.put("soundUri", soundUri.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + /** + * Application context. + */ + public Context getContext () { + return context; + } + + /** + * Wrapped JSON object. + */ + JSONObject getDict () { + return options; + } + + /** + * Text for the local notification. + */ + public String getText() { + return options.optString("text", ""); + } + + /** + * Repeat interval (day, week, month, year, aso.) + */ + public long getRepeatInterval() { + return interval; + } + + /** + * Badge number for the local notification. + */ + public int getBadgeNumber() { + return options.optInt("badge", 0); + } + + /** + * ongoing flag for local notifications. + */ + public Boolean isOngoing() { + return options.optBoolean("ongoing", false); + } + + /** + * autoClear flag for local notifications. + */ + public Boolean isAutoClear() { + return options.optBoolean("autoClear", false); + } + + /** + * ID for the local notification as a number. + */ + public Integer getId() { + return options.optInt("id", 0); + } + + /** + * ID for the local notification as a string. + */ + public String getIdStr() { + return getId().toString(); + } + + /** + * Trigger date. + */ + public Date getTriggerDate() { + return new Date(getTriggerTime()); + } + + /** + * Trigger date in milliseconds. + */ + public long getTriggerTime() { + return options.optLong("at", 0) * 1000; + } + + /** + * Title for the local notification. + */ + public String getTitle() { + String title = options.optString("title", ""); + + if (title.isEmpty()) { + title = context.getApplicationInfo().loadLabel( + context.getPackageManager()).toString(); + } + + return title; + } + + /** + * @return + * The notification color for LED + */ + public int getLedColor() { + String hex = options.optString("led", null); + + if (hex == null) { + return NotificationCompat.DEFAULT_LIGHTS; + } + + int aRGB = Integer.parseInt(hex, 16); + + return aRGB + 0xFF000000; + } + + /** + * @return + * The notification background color for the small icon + * Returns null, if no color is given. + */ + public int getColor() { + String hex = options.optString("color", null); + + if (hex == null) { + return NotificationCompat.COLOR_DEFAULT; + } + + int aRGB = Integer.parseInt(hex, 16); + + return aRGB + 0xFF000000; + } + + /** + * Sound file path for the local notification. + */ + public Uri getSoundUri() { + Uri uri = null; + + try{ + uri = Uri.parse(options.optString("soundUri")); + } catch (Exception e){ + e.printStackTrace(); + } + + return uri; + } + + /** + * Icon bitmap for the local notification. + */ + public Bitmap getIconBitmap() { + Bitmap bmp; + + try { + Uri uri = Uri.parse(options.optString("iconUri")); + bmp = assets.getIconFromUri(uri); + } catch (Exception e){ + e.printStackTrace(); + bmp = assets.getIconFromDrawable("icon"); + } + + return bmp; + } + + /** + * Icon resource ID for the local notification. + */ + public int getIcon () { + String icon = options.optString("icon", ""); + + int resId = assets.getResIdForDrawable(icon); + + if (resId == 0) { + resId = getSmallIcon(); + } + + if (resId == 0) { + resId = android.R.drawable.ic_popup_reminder; + } + + return resId; + } + + /** + * Small icon resource ID for the local notification. + */ + public int getSmallIcon () { + String icon = options.optString("smallIcon", ""); + + return assets.getResIdForDrawable(icon); + } + + /** + * JSON object as string. + */ + public String toString() { + return options.toString(); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/TriggerReceiver.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/TriggerReceiver.java new file mode 100644 index 0000000..9427e31 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/TriggerReceiver.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +package de.appplant.cordova.plugin.notification; + +/** + * The alarm receiver is triggered when a scheduled alarm is fired. This class + * reads the information in the intent and displays this information in the + * Android notification bar. The notification uses the default notification + * sound and it vibrates the phone. + */ +public class TriggerReceiver extends AbstractTriggerReceiver { + + /** + * Called when a local notification was triggered. Does present the local + * notification and re-schedule the alarm if necessary. + * + * @param notification + * Wrapper around the local notification + * @param updated + * If an update has triggered or the original + */ + @Override + public void onTrigger (Notification notification, boolean updated) { + notification.show(); + } + + /** + * Build notification specified by options. + * + * @param builder + * Notification builder + */ + @Override + public Notification buildNotification (Builder builder) { + return builder.build(); + } + +} diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotification.h b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotification.h new file mode 100644 index 0000000..f86bf49 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotification.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import +#import + +@interface APPLocalNotification : CDVPlugin + +// Execute all queued events +- (void) deviceready:(CDVInvokedUrlCommand*)command; + +// Inform if the app has the permission to show notifications +- (void) hasPermission:(CDVInvokedUrlCommand*)command; +// Register permission to show notifications +- (void) registerPermission:(CDVInvokedUrlCommand*)command; + +// Schedule set of notifications +- (void) schedule:(CDVInvokedUrlCommand*)command; +// Update set of notifications +- (void) update:(CDVInvokedUrlCommand*)command; +// Cancel set of notifications +- (void) cancel:(CDVInvokedUrlCommand*)command; +// Cancel all notifications +- (void) cancelAll:(CDVInvokedUrlCommand*)command; +// Clear set of notifications +- (void) clear:(CDVInvokedUrlCommand*)command; +// Clear all notifications +- (void) clearAll:(CDVInvokedUrlCommand*)command; + +// If a notification with an ID is present +- (void) isPresent:(CDVInvokedUrlCommand*)command; +// If a notification with an ID is scheduled +- (void) isScheduled:(CDVInvokedUrlCommand*)command; +// If a notification with an ID is triggered +- (void) isTriggered:(CDVInvokedUrlCommand*)command; + +// List all ids from all local notifications +- (void) getAllIds:(CDVInvokedUrlCommand*)command; +// List all ids from all pending notifications +- (void) getScheduledIds:(CDVInvokedUrlCommand*)command; +// List all ids from all triggered notifications +- (void) getTriggeredIds:(CDVInvokedUrlCommand*)command; + +// Propertys for given local notification +- (void) getSingle:(CDVInvokedUrlCommand*)command; +// Propertya for given scheduled notification +- (void) getSingleScheduled:(CDVInvokedUrlCommand*)command; +// Propertys for given triggered notification +- (void) getSingleTriggered:(CDVInvokedUrlCommand*)command; + +// Property list for given local notifications +- (void) getAll:(CDVInvokedUrlCommand*)command; +// Property list for given scheduled notifications +- (void) getScheduled:(CDVInvokedUrlCommand*)command; +// Property list for given triggered notifications +- (void) getTriggered:(CDVInvokedUrlCommand*)command; + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotification.m b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotification.m new file mode 100644 index 0000000..03a2d23 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotification.m @@ -0,0 +1,717 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "APPLocalNotification.h" +#import "APPLocalNotificationOptions.h" +#import "UIApplication+APPLocalNotification.h" +#import "UILocalNotification+APPLocalNotification.h" + +@interface APPLocalNotification () + +// Retrieves the application state +@property (readonly, getter=applicationState) NSString* applicationState; +// All events will be queued until deviceready has been fired +@property (readwrite, assign) BOOL deviceready; +// Event queue +@property (readonly, nonatomic, retain) NSMutableArray* eventQueue; +// Needed when calling `registerPermission` +@property (nonatomic, retain) CDVInvokedUrlCommand* command; + +@end + +@implementation APPLocalNotification + +@synthesize deviceready, eventQueue; + +#pragma mark - +#pragma mark Interface + +/** + * Execute all queued events. + */ +- (void) deviceready:(CDVInvokedUrlCommand*)command +{ + deviceready = YES; + + for (NSString* js in eventQueue) { + [self.commandDelegate evalJs:js]; + } + + [eventQueue removeAllObjects]; +} + +/** + * Schedule a set of notifications. + * + * @param properties + * A dict of properties for each notification + */ +- (void) schedule:(CDVInvokedUrlCommand*)command +{ + NSArray* notifications = command.arguments; + + [self.commandDelegate runInBackground:^{ + for (NSDictionary* options in notifications) { + UILocalNotification* notification; + + notification = [[UILocalNotification alloc] + initWithOptions:options]; + + [self scheduleLocalNotification:[notification copy]]; + [self fireEvent:@"schedule" notification:notification]; + + if (notifications.count > 1) { + [NSThread sleepForTimeInterval:0.01]; + } + } + + [self execCallback:command]; + }]; +} + +/** + * Update a set of notifications. + * + * @param properties + * A dict of properties for each notification + */ +- (void) update:(CDVInvokedUrlCommand*)command +{ + NSArray* notifications = command.arguments; + + [self.commandDelegate runInBackground:^{ + for (NSDictionary* options in notifications) { + NSNumber* id = [options objectForKey:@"id"]; + UILocalNotification* notification; + + notification = [self.app localNotificationWithId:id]; + + if (!notification) + continue; + + [self updateLocalNotification:[notification copy] + withOptions:options]; + + [self fireEvent:@"update" notification:notification]; + + if (notifications.count > 1) { + [NSThread sleepForTimeInterval:0.01]; + } + } + + [self execCallback:command]; + }]; +} + +/** + * Cancel a set of notifications. + * + * @param ids + * The IDs of the notifications + */ +- (void) cancel:(CDVInvokedUrlCommand*)command +{ + [self.commandDelegate runInBackground:^{ + for (NSNumber* id in command.arguments) { + UILocalNotification* notification; + + notification = [self.app localNotificationWithId:id]; + + if (!notification) + continue; + + [self.app cancelLocalNotification:notification]; + [self fireEvent:@"cancel" notification:notification]; + } + + [self execCallback:command]; + }]; +} + +/** + * Cancel all local notifications. + */ +- (void) cancelAll:(CDVInvokedUrlCommand*)command +{ + [self.commandDelegate runInBackground:^{ + [self cancelAllLocalNotifications]; + [self fireEvent:@"cancelall"]; + [self execCallback:command]; + }]; +} + +/** + * Clear a set of notifications. + * + * @param ids + * The IDs of the notifications + */ +- (void) clear:(CDVInvokedUrlCommand*)command +{ + [self.commandDelegate runInBackground:^{ + for (NSNumber* id in command.arguments) { + UILocalNotification* notification; + + notification = [self.app localNotificationWithId:id]; + + if (!notification) + continue; + + [self.app clearLocalNotification:notification]; + [self fireEvent:@"clear" notification:notification]; + } + + [self execCallback:command]; + }]; +} + +/** + * Clear all local notifications. + */ +- (void) clearAll:(CDVInvokedUrlCommand*)command +{ + [self.commandDelegate runInBackground:^{ + [self clearAllLocalNotifications]; + [self fireEvent:@"clearall"]; + [self execCallback:command]; + }]; +} + +/** + * If a notification by ID is present. + * + * @param id + * The ID of the notification + */ +- (void) isPresent:(CDVInvokedUrlCommand *)command +{ + [self isPresent:command type:NotifcationTypeAll]; +} + +/** + * If a notification by ID is scheduled. + * + * @param id + * The ID of the notification + */ +- (void) isScheduled:(CDVInvokedUrlCommand*)command +{ + [self isPresent:command type:NotifcationTypeScheduled]; +} + +/** + * Check if a notification with an ID is triggered. + * + * @param id + * The ID of the notification + */ +- (void) isTriggered:(CDVInvokedUrlCommand*)command +{ + [self isPresent:command type:NotifcationTypeTriggered]; +} + +/** + * Check if a notification with an ID exists. + * + * @param type + * The notification life cycle type + */ +- (void) isPresent:(CDVInvokedUrlCommand*)command + type:(APPLocalNotificationType)type; +{ + [self.commandDelegate runInBackground:^{ + NSNumber* id = [command argumentAtIndex:0]; + BOOL exist; + + CDVPluginResult* result; + + if (type == NotifcationTypeAll) { + exist = [self.app localNotificationExist:id]; + } else { + exist = [self.app localNotificationExist:id type:type]; + } + + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK + messageAsBool:exist]; + + [self.commandDelegate sendPluginResult:result + callbackId:command.callbackId]; + }]; +} + +/** + * List all ids from all local notifications. + */ +- (void) getAllIds:(CDVInvokedUrlCommand*)command +{ + [self getIds:command byType:NotifcationTypeAll]; +} + +/** + * List all ids from all pending notifications. + */ +- (void) getScheduledIds:(CDVInvokedUrlCommand*)command +{ + [self getIds:command byType:NotifcationTypeScheduled]; +} + +/** + * List all ids from all triggered notifications. + */ +- (void) getTriggeredIds:(CDVInvokedUrlCommand*)command +{ + [self getIds:command byType:NotifcationTypeTriggered]; +} + +/** + * List of ids for given local notifications. + * + * @param type + * Notification life cycle type + * @param ids + * The IDs of the notifications + */ +- (void) getIds:(CDVInvokedUrlCommand*)command + byType:(APPLocalNotificationType)type; +{ + [self.commandDelegate runInBackground:^{ + CDVPluginResult* result; + NSArray* ids; + + if (type == NotifcationTypeAll) { + ids = [self.app localNotificationIds]; + } else { + ids = [self.app localNotificationIdsByType:type]; + } + + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK + messageAsArray:ids]; + + [self.commandDelegate sendPluginResult:result + callbackId:command.callbackId]; + }]; +} + +/** + * Propertys for given local notification. + */ +- (void) getSingle:(CDVInvokedUrlCommand*)command +{ + [self getOption:command byType:NotifcationTypeAll]; +} + +/** + * Propertya for given scheduled notification. + */ +- (void) getSingleScheduled:(CDVInvokedUrlCommand*)command +{ + [self getOption:command byType:NotifcationTypeScheduled]; +} + +// Propertys for given triggered notification +- (void) getSingleTriggered:(CDVInvokedUrlCommand*)command +{ + [self getOption:command byType:NotifcationTypeTriggered]; +} + +/** + * Property list for given local notifications. + * + * @param ids + * The IDs of the notifications + */ +- (void) getAll:(CDVInvokedUrlCommand*)command +{ + [self getOptions:command byType:NotifcationTypeAll]; +} + +/** + * Property list for given scheduled notifications. + * + * @param ids + * The IDs of the notifications + */ +- (void) getScheduled:(CDVInvokedUrlCommand*)command +{ + [self getOptions:command byType:NotifcationTypeScheduled]; +} + +/** + * Property list for given triggered notifications. + * + * @param ids + * The IDs of the notifications + */ +- (void) getTriggered:(CDVInvokedUrlCommand *)command +{ + [self getOptions:command byType:NotifcationTypeTriggered]; +} + +/** + * Propertys for given triggered notification. + * + * @param type + * Notification life cycle type + * @param ids + * The ID of the notification + */ +- (void) getOption:(CDVInvokedUrlCommand*)command + byType:(APPLocalNotificationType)type; +{ + [self.commandDelegate runInBackground:^{ + NSArray* ids = command.arguments; + NSArray* notifications; + CDVPluginResult* result; + + if (type == NotifcationTypeAll) { + notifications = [self.app localNotificationOptionsById:ids]; + } + else { + notifications = [self.app localNotificationOptionsByType:type + andId:ids]; + } + + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK + messageAsDictionary:[notifications firstObject]]; + + [self.commandDelegate sendPluginResult:result + callbackId:command.callbackId]; + }]; +} + +/** + * Property list for given triggered notifications. + * + * @param type + * Notification life cycle type + * @param ids + * The IDs of the notifications + */ +- (void) getOptions:(CDVInvokedUrlCommand*)command + byType:(APPLocalNotificationType)type; +{ + [self.commandDelegate runInBackground:^{ + NSArray* ids = command.arguments; + NSArray* notifications; + CDVPluginResult* result; + + if (type == NotifcationTypeAll && ids.count == 0) { + notifications = [self.app localNotificationOptions]; + } + else if (type == NotifcationTypeAll) { + notifications = [self.app localNotificationOptionsById:ids]; + } + else if (ids.count == 0) { + notifications = [self.app localNotificationOptionsByType:type]; + } + else { + notifications = [self.app localNotificationOptionsByType:type + andId:ids]; + } + + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK + messageAsArray:notifications]; + + [self.commandDelegate sendPluginResult:result + callbackId:command.callbackId]; + }]; +} + +/** + * Inform if the app has the permission to show + * badges and local notifications. + */ +- (void) hasPermission:(CDVInvokedUrlCommand*)command +{ + [self.commandDelegate runInBackground:^{ + CDVPluginResult* result; + BOOL hasPermission; + + hasPermission = [self.app hasPermissionToScheduleLocalNotifications]; + + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK + messageAsBool:hasPermission]; + + [self.commandDelegate sendPluginResult:result + callbackId:command.callbackId]; + }]; +} + +/** + * Ask for permission to show badges. + */ +- (void) registerPermission:(CDVInvokedUrlCommand*)command +{ + if ([[UIApplication sharedApplication] + respondsToSelector:@selector(registerUserNotificationSettings:)]) + { + _command = command; + + [self.commandDelegate runInBackground:^{ + [self.app registerPermissionToScheduleLocalNotifications]; + }]; + } else { + [self hasPermission:command]; + } +} + +#pragma mark - +#pragma mark Core Logic + +/** + * Schedule the local notification. + */ +- (void) scheduleLocalNotification:(UILocalNotification*)notification +{ + [self cancelForerunnerLocalNotification:notification]; + [self.app scheduleLocalNotification:notification]; +} + +/** + * Update the local notification. + */ +- (void) updateLocalNotification:(UILocalNotification*)notification + withOptions:(NSDictionary*)newOptions +{ + NSMutableDictionary* options = [notification.userInfo mutableCopy]; + + [options addEntriesFromDictionary:newOptions]; + [options setObject:[NSDate date] forKey:@"updatedAt"]; + + notification = [[UILocalNotification alloc] + initWithOptions:options]; + + [self scheduleLocalNotification:notification]; +} + +/** + * Cancel all local notifications. + */ +- (void) cancelAllLocalNotifications +{ + [self.app cancelAllLocalNotifications]; + [self.app setApplicationIconBadgeNumber:0]; +} + +/** + * Clear all local notifications. + */ +- (void) clearAllLocalNotifications +{ + [self.app clearAllLocalNotifications]; + [self.app setApplicationIconBadgeNumber:0]; +} + +/** + * Cancel a maybe given forerunner with the same ID. + */ +- (void) cancelForerunnerLocalNotification:(UILocalNotification*)notification +{ + NSNumber* id = notification.options.id; + UILocalNotification* forerunner; + + forerunner = [self.app localNotificationWithId:id]; + + if (!forerunner) + return; + + [self.app cancelLocalNotification:forerunner]; +} + +/** + * Cancels all non-repeating local notification older then + * a specific amount of seconds + */ +- (void) cancelAllNotificationsWhichAreOlderThen:(float)seconds +{ + NSArray* notifications; + + notifications = [self.app localNotifications]; + + for (UILocalNotification* notification in notifications) + { + if (![notification isRepeating] + && notification.timeIntervalSinceFireDate > seconds) + { + [self.app cancelLocalNotification:notification]; + [self fireEvent:@"cancel" notification:notification]; + } + } +} + +#pragma mark - +#pragma mark Delegates + +/** + * Calls the cancel or trigger event after a local notification was received. + * Cancels the local notification if autoCancel was set to true. + */ +- (void) didReceiveLocalNotification:(NSNotification*)localNotification +{ + UILocalNotification* notification = [localNotification object]; + + if ([notification userInfo] == NULL || [notification wasUpdated]) + return; + + NSTimeInterval timeInterval = [notification timeIntervalSinceLastTrigger]; + NSString* event = timeInterval < 0.2 && deviceready ? @"trigger" : @"click"; + + [self fireEvent:event notification:notification]; + + if (![event isEqualToString:@"click"]) + return; + + if ([notification isRepeating]) { + [self fireEvent:@"clear" notification:notification]; + } else { + [self.app cancelLocalNotification:notification]; + [self fireEvent:@"cancel" notification:notification]; + } +} + +/** + * Called when app has started + * (by clicking on a local notification). + */ +- (void) didFinishLaunchingWithOptions:(NSNotification*)notification +{ + NSDictionary* launchOptions = [notification userInfo]; + + UILocalNotification* localNotification; + + localNotification = [launchOptions objectForKey: + UIApplicationLaunchOptionsLocalNotificationKey]; + + if (localNotification) { + [self didReceiveLocalNotification: + [NSNotification notificationWithName:CDVLocalNotification + object:localNotification]]; + } +} + +/** + * Called on otification settings registration is completed. + */ +- (void) didRegisterUserNotificationSettings:(UIUserNotificationSettings*)settings +{ + if (_command) { + [self hasPermission:_command]; + _command = NULL; + } +} + +#pragma mark - +#pragma mark Life Cycle + +/** + * Registers obervers after plugin was initialized. + */ +- (void) pluginInitialize +{ + eventQueue = [[NSMutableArray alloc] init]; +} + +/** + * Clears all single repeating notifications which are older then 5 days + * before the app terminates. + */ +- (void) onAppTerminate +{ + [self cancelAllNotificationsWhichAreOlderThen:432000]; +} + +#pragma mark - +#pragma mark Helper + +/** + * Retrieves the application state + * + * @return + * Either "background" or "foreground" + */ +- (NSString*) applicationState +{ + UIApplicationState state = [self.app applicationState]; + + bool isActive = state == UIApplicationStateActive; + + return isActive ? @"foreground" : @"background"; +} + +/** + * Simply invokes the callback without any parameter. + */ +- (void) execCallback:(CDVInvokedUrlCommand*)command +{ + CDVPluginResult *result = [CDVPluginResult + resultWithStatus:CDVCommandStatus_OK]; + + [self.commandDelegate sendPluginResult:result + callbackId:command.callbackId]; +} + +/** + * Short hand for shared application instance. + */ +- (UIApplication*) app +{ + return [UIApplication sharedApplication]; +} + +/** + * Fire general event. + */ +- (void) fireEvent:(NSString*)event +{ + [self fireEvent:event notification:NULL]; +} + +/** + * Fire event for local notification. + */ +- (void) fireEvent:(NSString*)event notification:(UILocalNotification*)notification +{ + NSString* js; + NSString* params = [NSString stringWithFormat: + @"\"%@\"", self.applicationState]; + + if (notification) { + NSString* args = [notification encodeToJSON]; + + params = [NSString stringWithFormat: + @"%@,'%@'", + args, self.applicationState]; + } + + js = [NSString stringWithFormat: + @"cordova.plugins.notification.local.core.fireEvent('%@', %@)", + event, params]; + + if (deviceready) { + [self.commandDelegate evalJs:js]; + } else { + [self.eventQueue addObject:js]; + } +} + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotificationOptions.h b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotificationOptions.h new file mode 100644 index 0000000..73c3ef7 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotificationOptions.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +@interface APPLocalNotificationOptions : NSObject + +- (id) initWithDict:(NSDictionary*)dict; + +@property (readonly, getter=id) NSNumber* id; +@property (readonly, getter=badgeNumber) NSInteger badgeNumber; +@property (readonly, getter=alertBody) NSString* alertBody; +@property (readonly, getter=soundName) NSString* soundName; +@property (readonly, getter=fireDate) NSDate* fireDate; +@property (readonly, getter=repeatInterval) NSCalendarUnit repeatInterval; +@property (readonly, getter=userInfo) NSDictionary* userInfo; + +// If it's a repeating notification +- (BOOL) isRepeating; + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotificationOptions.m b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotificationOptions.m new file mode 100644 index 0000000..6918919 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/APPLocalNotificationOptions.m @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "APPLocalNotificationOptions.h" + +// Default sound ressource path +NSString* const DEFAULT_SOUND = @"res://platform_default"; + +@interface APPLocalNotificationOptions () + +// The dictionary which contains all notification properties +@property(nonatomic, retain) NSDictionary* dict; + +@end + +@implementation APPLocalNotificationOptions + +@synthesize dict; + +#pragma mark - +#pragma mark Initialization + +/** + * Initialize the object with the given options when calling on JS side: + * notification.local.add(options) + */ +- (id) initWithDict:(NSDictionary*)dictionary +{ + self = [self init]; + + self.dict = dictionary; + + return self; +} + +#pragma mark - +#pragma mark Attributes + +/** + * The notification's ID. + */ +- (NSNumber*) id +{ + NSInteger id = [[dict objectForKey:@"id"] integerValue]; + + return [NSNumber numberWithInteger:id]; +} + +/** + * The notification's title. + */ +- (NSString*) title +{ + return [dict objectForKey:@"title"]; +} + +/** + * The notification's message. + */ +- (NSString*) text +{ + return [dict objectForKey:@"text"]; +} + +/** + * The notification's badge number. + */ +- (NSInteger) badgeNumber +{ + return [[dict objectForKey:@"badge"] intValue]; +} + +#pragma mark - +#pragma mark Complex Attributes + +/** + * The notification's alert body. + */ +- (NSString*) alertBody +{ + NSString* title = [self title]; + NSString* msg = [self text]; + + NSString* alertBody = msg; + + if (![self stringIsNullOrEmpty:title]) + { + alertBody = [NSString stringWithFormat:@"%@\n%@", + title, msg]; + } + + return alertBody; +} + +/** + * The notification's sound path. + */ +- (NSString*) soundName +{ + NSString* path = [dict objectForKey:@"sound"]; + + if ([self stringIsNullOrEmpty:path]) + return NULL; + + if ([path isEqualToString:DEFAULT_SOUND]) + return UILocalNotificationDefaultSoundName; + + if ([path hasPrefix:@"file:/"]) + return [self soundNameForAsset:path]; + + if ([path hasPrefix:@"res:"]) + return [self soundNameForResource:path]; + + return NULL; +} + +/** + * The notification's fire date. + */ +- (NSDate*) fireDate +{ + double timestamp = [[dict objectForKey:@"at"] + doubleValue]; + + return [NSDate dateWithTimeIntervalSince1970:timestamp]; +} + +/** + * The notification's repeat interval. + */ +- (NSCalendarUnit) repeatInterval +{ + NSString* interval = [dict objectForKey:@"every"]; + + if ([self stringIsNullOrEmpty:interval]) { + return NSCalendarUnitEra; + } + else if ([interval isEqualToString:@"second"]) { + return NSCalendarUnitSecond; + } + else if ([interval isEqualToString:@"minute"]) { + return NSCalendarUnitMinute; + } + else if ([interval isEqualToString:@"hour"]) { + return NSCalendarUnitHour; + } + else if ([interval isEqualToString:@"day"]) { + return NSCalendarUnitDay; + } + else if ([interval isEqualToString:@"week"]) { + return NSCalendarUnitWeekOfYear; + } + else if ([interval isEqualToString:@"month"]) { + return NSCalendarUnitMonth; + } + else if ([interval isEqualToString:@"quarter"]) { + return NSCalendarUnitQuarter; + } + else if ([interval isEqualToString:@"year"]) { + return NSCalendarUnitYear; + } + + return NSCalendarUnitEra; +} + +#pragma mark - +#pragma mark Methods + +/** + * The notification's user info dict. + */ +- (NSDictionary*) userInfo +{ + if ([dict objectForKey:@"updatedAt"]) { + NSMutableDictionary* data = [dict mutableCopy]; + + [data removeObjectForKey:@"updatedAt"]; + + return data; + } + + return dict; +} + +/** + * If it's a repeating notification. + */ +- (BOOL) isRepeating +{ + NSCalendarUnit interval = self.repeatInterval; + + return !(interval == NSCalendarUnitEra || interval == 0); +} + +#pragma mark - +#pragma mark Helpers + +/** + * Convert relative path to valid sound name attribute. + */ +- (NSString*) soundNameForAsset:(NSString*)path +{ + return [path stringByReplacingOccurrencesOfString:@"file:/" + withString:@"www"]; +} + +/** + * Convert resource path to valid sound name attribute. + */ +- (NSString*) soundNameForResource:(NSString*)path +{ + return [path pathComponents].lastObject; +} + +/** + * If the string is empty. + */ +- (BOOL) stringIsNullOrEmpty:(NSString*)str +{ + if (str == (NSString*)[NSNull null]) + return YES; + + if ([str isEqualToString:@""]) + return YES; + + return NO; +} + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.h b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.h new file mode 100644 index 0000000..a18568e --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "UILocalNotification+APPLocalNotification.h" + +@interface UIApplication (APPLocalNotification) + +@property (readonly, getter=localNotifications) NSArray* localNotifications; +@property (readonly, getter=localNotificationIds) NSArray* localNotificationIds; + +// If the app has the permission to schedule local notifications +- (BOOL) hasPermissionToScheduleLocalNotifications; +// Ask for permission to schedule local notifications +- (void) registerPermissionToScheduleLocalNotifications; + +// List of all local notification IDs from given type +- (NSArray*) localNotificationIdsByType:(APPLocalNotificationType)type; + +// If local notification with ID exists +- (BOOL) localNotificationExist:(NSNumber*)id; +// If local notification with ID and type exists +- (BOOL) localNotificationExist:(NSNumber*)id type:(APPLocalNotificationType)type; + +// Local notification by ID +- (UILocalNotification*) localNotificationWithId:(NSNumber*)id; +// Local notification by ID and type +- (UILocalNotification*) localNotificationWithId:(NSNumber*)id andType:(APPLocalNotificationType)type; + +// Property list from all local notifications +- (NSArray*) localNotificationOptions; +// Property list from given local notifications +- (NSArray*) localNotificationOptionsById:(NSArray*)ids; +// Property list from all local notifications with type constraint +- (NSArray*) localNotificationOptionsByType:(APPLocalNotificationType)type; +// Property list from given local notifications with type constraint +- (NSArray*) localNotificationOptionsByType:(APPLocalNotificationType)type andId:(NSArray*)ids; + +// Clear single local notfications +- (void) clearLocalNotification:(UILocalNotification*)notification; +// Clear all local notfications +- (void) clearAllLocalNotifications; + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m new file mode 100644 index 0000000..21fab31 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "UIApplication+APPLocalNotification.h" +#import "UILocalNotification+APPLocalNotification.h" + +@implementation UIApplication (APPLocalNotification) + +#pragma mark - +#pragma mark Permissions + +/** + * If the app has the permission to schedule local notifications. + */ +- (BOOL) hasPermissionToScheduleLocalNotifications +{ + if ([[UIApplication sharedApplication] + respondsToSelector:@selector(registerUserNotificationSettings:)]) + { + UIUserNotificationType types; + UIUserNotificationSettings *settings; + + settings = [[UIApplication sharedApplication] + currentUserNotificationSettings]; + + types = UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound; + + return (settings.types & types); + } else { + return YES; + } +} + +/** + * Ask for permission to schedule local notifications. + */ +- (void) registerPermissionToScheduleLocalNotifications +{ + if ([[UIApplication sharedApplication] + respondsToSelector:@selector(registerUserNotificationSettings:)]) + { + UIUserNotificationType types; + UIUserNotificationSettings *settings; + + settings = [[UIApplication sharedApplication] + currentUserNotificationSettings]; + + types = settings.types|UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound; + + settings = [UIUserNotificationSettings settingsForTypes:types + categories:nil]; + + [[UIApplication sharedApplication] + registerUserNotificationSettings:settings]; + } +} + +#pragma mark - +#pragma mark LocalNotifications + +/** + * List of all local notifications which have been added + * but not yet removed from the notification center. + */ +- (NSArray*) localNotifications +{ + NSArray* scheduledNotifications = self.scheduledLocalNotifications; + NSMutableArray* notifications = [[NSMutableArray alloc] init]; + + for (UILocalNotification* notification in scheduledNotifications) + { + if (notification) { + [notifications addObject:notification]; + } + } + + return notifications; +} + +/** + * List of all triggered local notifications which have been scheduled + * and not yet removed the notification center. + */ +- (NSArray*) triggeredLocalNotifications +{ + NSArray* notifications = self.localNotifications; + NSMutableArray* triggeredNotifications = [[NSMutableArray alloc] init]; + + for (UILocalNotification* notification in notifications) + { + if ([notification isTriggered]) { + [triggeredNotifications addObject:notification]; + } + } + + return triggeredNotifications; +} + +/** + * List of all local notifications IDs. + */ +- (NSArray*) localNotificationIds +{ + NSArray* notifications = self.localNotifications; + NSMutableArray* ids = [[NSMutableArray alloc] init]; + + for (UILocalNotification* notification in notifications) + { + [ids addObject:notification.options.id]; + } + + return ids; +} + +/** + * List of all local notifications IDs from given type. + * + * @param type + * Notification life cycle type + */ +- (NSArray*) localNotificationIdsByType:(APPLocalNotificationType)type +{ + NSArray* notifications = self.localNotifications; + NSMutableArray* ids = [[NSMutableArray alloc] init]; + + for (UILocalNotification* notification in notifications) + { + if (notification.type == type) { + [ids addObject:notification.options.id]; + } + } + + return ids; +} + +/* + * If local notification with ID exists. + * + * @param id + * Notification ID + */ +- (BOOL) localNotificationExist:(NSNumber*)id +{ + return [self localNotificationWithId:id] != NULL; +} + +/* If local notification with ID and type exists + * + * @param id + * Notification ID + * @param type + * Notification life cycle type + */ +- (BOOL) localNotificationExist:(NSNumber*)id type:(APPLocalNotificationType)type +{ + return [self localNotificationWithId:id andType:type] != NULL; +} + +/** + * Get local notification with ID. + * + * @param id + * Notification ID + */ +- (UILocalNotification*) localNotificationWithId:(NSNumber*)id +{ + NSArray* notifications = self.localNotifications; + + for (UILocalNotification* notification in notifications) + { + NSString* fid = [NSString stringWithFormat:@"%@", notification.options.id]; + + if ([fid isEqualToString:[id stringValue]]) { + return notification; + } + } + + return NULL; +} + +/* + * Get local notification with ID and type. + * + * @param id + * Notification ID + * @param type + * Notification life cycle type + */ +- (UILocalNotification*) localNotificationWithId:(NSNumber*)id andType:(APPLocalNotificationType)type +{ + UILocalNotification* notification = [self localNotificationWithId:id]; + + if (notification && notification.type == type) + return notification; + + return NULL; +} + +/** + * List of properties from all notifications. + */ +- (NSArray*) localNotificationOptions +{ + NSArray* notifications = self.localNotifications; + NSMutableArray* options = [[NSMutableArray alloc] init]; + + for (UILocalNotification* notification in notifications) + { + [options addObject:notification.options.userInfo]; + } + + return options; +} + +/** + * List of properties from all local notifications from given type. + * + * @param type + * Notification life cycle type + */ +- (NSArray*) localNotificationOptionsByType:(APPLocalNotificationType)type +{ + NSArray* notifications = self.localNotifications; + NSMutableArray* options = [[NSMutableArray alloc] init]; + + for (UILocalNotification* notification in notifications) + { + if (notification.type == type) { + [options addObject:notification.options.userInfo]; + } + } + + return options; +} + +/** + * List of properties from given local notifications. + * + * @param ids + * Notification IDs + */ +- (NSArray*) localNotificationOptionsById:(NSArray*)ids +{ + UILocalNotification* notification; + NSMutableArray* options = [[NSMutableArray alloc] init]; + + for (NSNumber* id in ids) + { + notification = [self localNotificationWithId:id]; + + if (notification) { + [options addObject:notification.options.userInfo]; + } + } + + return options; +} + +/** + * List of properties from given local notifications. + * + * @param type + * Notification life cycle type + * @param ids + * Notification IDs + */ +- (NSArray*) localNotificationOptionsByType:(APPLocalNotificationType)type andId:(NSArray*)ids +{ + UILocalNotification* notification; + NSMutableArray* options = [[NSMutableArray alloc] init]; + + for (NSNumber* id in ids) + { + notification = [self localNotificationWithId:id]; + + if (notification && notification.type == type) { + [options addObject:notification.options.userInfo]; + } + } + + return options; +} + +/* + * Clear all local notfications. + */ +- (void) clearAllLocalNotifications +{ + NSArray* notifications = self.triggeredLocalNotifications; + + for (UILocalNotification* notification in notifications) { + [self clearLocalNotification:notification]; + } +} + +/* + * Clear single local notfication. + * + * @param notification + * The local notification object + */ +- (void) clearLocalNotification:(UILocalNotification*)notification +{ + [self cancelLocalNotification:notification]; + + if ([notification isRepeating]) { + notification.fireDate = notification.options.fireDate; + + [self scheduleLocalNotification:notification]; + }; +} + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UILocalNotification+APPLocalNotification.h b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UILocalNotification+APPLocalNotification.h new file mode 100644 index 0000000..ac0fdc2 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UILocalNotification+APPLocalNotification.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "APPLocalNotificationOptions.h" + +typedef NS_ENUM(NSUInteger, APPLocalNotificationType) { + NotifcationTypeAll = 0, + NotifcationTypeScheduled = 1, + NotifcationTypeTriggered = 2 +}; + +@interface UILocalNotification (APPLocalNotification) + +// Initialize a new local notification +- (id) initWithOptions:(NSDictionary*)dict; +// The options provided by the plug-in +- (APPLocalNotificationOptions*) options; +// Timeinterval since last trigger date +- (double) timeIntervalSinceLastTrigger; +// Timeinterval since fire date +- (double) timeIntervalSinceFireDate; +// If the fire date was in the past +- (BOOL) wasInThePast; +// If the notification was already scheduled +- (BOOL) isScheduled; +// If the notification was already triggered +- (BOOL) isTriggered; +// If the notification was updated +- (BOOL) wasUpdated; +// If it's a repeating notification +- (BOOL) isRepeating; +// Notifciation type +- (APPLocalNotificationType) type; +// Encode the user info dict to JSON +- (NSString*) encodeToJSON; + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UILocalNotification+APPLocalNotification.m b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UILocalNotification+APPLocalNotification.m new file mode 100644 index 0000000..3837253 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UILocalNotification+APPLocalNotification.m @@ -0,0 +1,247 @@ +/* + * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. + * + * @APPPLANT_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apache License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://opensource.org/licenses/Apache-2.0/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPPLANT_LICENSE_HEADER_END@ + */ + +#import "UILocalNotification+APPLocalNotification.h" +#import "APPLocalNotificationOptions.h" +#import + +static char optionsKey; + +NSInteger const APPLocalNotificationTypeScheduled = 1; +NSInteger const APPLocalNotificationTypeTriggered = 2; + +@implementation UILocalNotification (APPLocalNotification) + +#pragma mark - +#pragma mark Init + +/** + * Initialize a local notification with the given options when calling on JS side: + * notification.local.add(options) + */ +- (id) initWithOptions:(NSDictionary*)dict +{ + self = [self init]; + + [self setUserInfo:dict]; + [self __init]; + + return self; +} + +/** + * Applies the given options when calling on JS side: + * notification.local.add(options) + + */ +- (void) __init +{ + APPLocalNotificationOptions* options = self.options; + + self.fireDate = options.fireDate; + self.timeZone = [NSTimeZone defaultTimeZone]; + self.applicationIconBadgeNumber = options.badgeNumber; + self.repeatInterval = options.repeatInterval; + self.alertBody = options.alertBody; + self.soundName = options.soundName; + + if ([self wasInThePast]) { + self.fireDate = [NSDate date]; + } +} + +#pragma mark - +#pragma mark Methods + +/** + * The options provided by the plug-in. + */ +- (APPLocalNotificationOptions*) options +{ + APPLocalNotificationOptions* options = [self getOptions]; + + if (!options) { + options = [[APPLocalNotificationOptions alloc] + initWithDict:[self userInfo]]; + + [self setOptions:options]; + } + + return options; +} + +/** + * Get associated option object + */ +- (APPLocalNotificationOptions*) getOptions +{ + return objc_getAssociatedObject(self, &optionsKey); +} + +/** + * Set associated option object + */ +- (void) setOptions:(APPLocalNotificationOptions*)options +{ + objc_setAssociatedObject(self, &optionsKey, + options, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +/** + * The repeating interval in seconds. + */ +- (int) repeatIntervalInSeconds +{ + switch (self.repeatInterval) { + case NSCalendarUnitMinute: + return 60; + + case NSCalendarUnitHour: + return 60000; + + case NSCalendarUnitDay: + case NSCalendarUnitWeekOfYear: + case NSCalendarUnitMonth: + case NSCalendarUnitYear: + return 86400; + + default: + return 1; + } +} + +/** + * Timeinterval since fire date. + */ +- (double) timeIntervalSinceFireDate +{ + NSDate* now = [NSDate date]; + NSDate* fireDate = self.fireDate; + + int timespan = [now timeIntervalSinceDate:fireDate]; + + return timespan; +} + +/** + * Timeinterval since last trigger date. + */ +- (double) timeIntervalSinceLastTrigger +{ + int timespan = [self timeIntervalSinceFireDate]; + + if ([self isRepeating]) { + timespan = timespan % [self repeatIntervalInSeconds]; + } + + return timespan; +} + +/** + * Encode the user info dict to JSON. + */ +- (NSString*) encodeToJSON +{ + NSString* json; + NSData* data; + NSMutableDictionary* obj = [self.userInfo mutableCopy]; + + [obj removeObjectForKey:@"updatedAt"]; + + if (obj == NULL || obj.count == 0) + return json; + + data = [NSJSONSerialization dataWithJSONObject:obj + options:NSJSONWritingPrettyPrinted + error:NULL]; + + json = [[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding]; + + return [json stringByReplacingOccurrencesOfString:@"\n" + withString:@""]; +} + +#pragma mark - +#pragma mark State + +/** + * If the fire date was in the past. + */ +- (BOOL) wasInThePast +{ + return [self timeIntervalSinceLastTrigger] > 0; +} + +// If the notification was already scheduled +- (BOOL) isScheduled +{ + return [self isRepeating] || ![self wasInThePast]; +} + +/** + * If the notification was already triggered. + */ +- (BOOL) isTriggered +{ + NSDate* now = [NSDate date]; + NSDate* fireDate = self.fireDate; + + bool isLaterThanFireDate = !([now compare:fireDate] == NSOrderedAscending); + + return isLaterThanFireDate; +} + +/** + * If the notification was updated. + */ +- (BOOL) wasUpdated +{ + NSDate* now = [NSDate date]; + NSDate* updatedAt = [self.userInfo objectForKey:@"updatedAt"]; + + if (updatedAt == NULL) + return NO; + + int timespan = [now timeIntervalSinceDate:updatedAt]; + + return timespan < 1; +} + +/** + * If it's a repeating notification. + */ +- (BOOL) isRepeating +{ + return [self.options isRepeating]; +} + +/** + * Process state type of the local notification. + */ +- (APPLocalNotificationType) type +{ + return [self isTriggered] ? NotifcationTypeTriggered : NotifcationTypeScheduled; +} + +@end diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationCore.js b/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationCore.js new file mode 100644 index 0000000..beb1814 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationCore.js @@ -0,0 +1,437 @@ +/* + Copyright 2013-2015 appPlant UG + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + + +var proxy = require('de.appplant.cordova.plugin.local-notification.LocalNotification.Proxy'); + +var Notifications = Windows.UI.Notifications; + + +proxy.core = { + + /** + * Executes all queued events. + */ + deviceready: function () { + var plugin = cordova.plugins.notification.local, + events = this.eventQueue; + + this.isReady = true; + + for (var i = 0; i < events.length; i++) { + plugin.fireEvent.apply(plugin, events[i]); + } + + this.eventQueue = []; + }, + + /** + * Schedules new local notifications. + * + * @param {Object[]} notifications + * Array of local notifications + * @param {String} event + * 'schedule' or 'update' + */ + schedule: function (notifications) { + var triggerFn = function (notification) { + this.updateBadge(notification.badge); + this.fireEvent('trigger', notification); + }; + + for (var i = 0; i < notifications.length; i++) { + var options = notifications[i], + notification = this.build(options); + + this.cancelLocalNotification(options.id); + this.scheduleLocalNotification(notification, options); + this.scheduleBackupNotification(notification, options); + this.fireEvent('schedule', options); + this.callOnTrigger(options, triggerFn); + } + }, + + /** + * Schedules a single local notification. + * + * @param {Windows.Data.Xml.Dom.XmlDocument} notification + * The local notification + * @param {Object} options + * Local notification properties + */ + scheduleLocalNotification: function (notification, options) { + var interval = this.getRepeatInterval(options.every), + triggerTime = new Date((options.at * 1000)), + now = new Date().getTime(), + toast; + + if (triggerTime <= now) { + triggerTime = new Date(now + 10); + } + + try { + if (interval !== 0 && interval < 360001 && interval > 59999) { + toast = new Notifications.ScheduledToastNotification( + notification, triggerTime, interval, 5); + } else { + toast = new Notifications.ScheduledToastNotification( + notification, triggerTime); + } + } catch (e) { + console.error(e); + return; + } + + toast.id = options.id; + toast.tag = 'Toast' + toast.id; + + this.getToastNotifier().addToSchedule(toast); + }, + + /** + * Schedules a backup local notification 10 years later. + * + * @param {Object} notification + * The local notification + */ + scheduleBackupNotification: function (notification, options) { + var properties = Object.create(options); + + properties.id = options.id + '-2'; + properties.at = options.at + 315360000; // 10 years later + + this.scheduleLocalNotification(notification, properties); + }, + + /** + * Updates the badge number of the active tile. + * + * @param {Number} badge + * The badge number. Zero will clean the badge. + */ + updateBadge: function (badge) { + var notifications = Windows.UI.Notifications, + type = notifications.BadgeTemplateType.badgeNumber, + xml = notifications.BadgeUpdateManager.getTemplateContent(type), + attrs = xml.getElementsByTagName('badge'), + notification = new notifications.BadgeNotification(xml); + + attrs[0].setAttribute('value', badge); + + notifications.BadgeUpdateManager.createBadgeUpdaterForApplication() + .update(notification); + }, + + /** + * Updates existing notifications specified by IDs in options. + * + * @param {Object[]} notifications + * Array of local notifications + */ + update: function (notifications) { + for (var i = 0; i < notifications.length; i++) { + var updates = notifications[i], + options = getAll(updates.id || '0')[0]; + + this.updateLocalNotification(options, updates); + this.fireEvent('update', options); + } + }, + + /** + * Updates a single local notification. + * + * @param {Object} notification + * The local notification + * @param {Object} updates + * Updated properties + */ + updateLocalNotification: function (notification, updates) { + for (var key in updates) { + notification[key] = updates[key]; + } + + this.cancelLocalNotification(notification.id); + this.scheduleLocalNotification(notification); + }, + + /** + * Clears the specified notifications. + * + * @param {int[]} ids + * List of local notification IDs + */ + clear: function (ids) { + for (var i = 0; i < ids.length; i++) { + var id = ids[i], + notification = this.getAll([id])[0]; + + this.clearLocalNotification(id); + this.fireEvent('clear', notification); + } + }, + + /** + * Clears the local notification with the given ID. + * + * @param {String} id + * Local notification ID + */ + clearLocalNotification: function (id) { + var notification = this.getAll([id])[0]; + + try { + this.getToastHistory().remove('Toast' + id); + } catch (e) {/*Only Phones support the NotificationHistory*/ } + + if (this.isRepeating(notification)) + return; + + if (this.isTriggered(id) && !this.isScheduled(id)) { + this.cancelLocalNotification(id); + } + }, + + /** + * Clears all notifications. + */ + clearAll: function () { + var ids = this.getTriggeredIds(); + + for (var i = 0; i < ids.length; i++) { + this.clearLocalNotification(ids[i]); + } + + try { + this.getToastHistory().clear(); + } catch (e) {/*Only Phones support the NotificationHistory*/ } + this.fireEvent('clearall'); + }, + + /** + * Cancels all specified notifications. + * + * @param {int[]} ids + * List of local notification IDs + */ + cancel: function (ids) { + for (var i = 0; i < ids.length; i++) { + var id = ids[i], + notification = this.getAll([id])[0]; + + this.cancelLocalNotification(ids[i]); + this.fireEvent('cancel', notification); + } + }, + + /** + * Cancels the local notification with the given ID. + * + * @param {String} id + * Local notification ID + */ + cancelLocalNotification: function (id) { + var notifier = this.getToastNotifier(), + history = this.getToastHistory(), + toasts = this.getScheduledToasts(); + + try { + history.remove('Toast' + id); + } catch (e) {/*Only Phones support the NotificationHistory*/ } + + for (var i = 0; i < toasts.length; i++) { + var toast = toasts[i]; + + if (toast.id == id || toast.id == id + '-2') { + notifier.removeFromSchedule(toast); + } + } + }, + + /** + * Cancels all notifications. + */ + cancelAll: function () { + var ids = this.getAllIds(); + + for (var i = 0; i < ids.length; i++) { + this.cancelLocalNotification(ids[i]); + } + + try { + this.getToastHistory().clear(); + } catch (e) {/*Only Phones support the NotificationHistory*/ } + this.fireEvent('cancelall'); + }, + + /** + * Checks if a notification with an ID is present. + * + * @param {int} id + * Local notification ID + */ + isPresent: function (id) { + return !!this.findToastById(id); + }, + + /** + * Checks if a notification with an ID was scheduled. + * + * @param {int} id + * Local notification ID + */ + isScheduled: function (id) { + var toast = this.findToastById(id); + + return toast && this.isToastScheduled(toast); + }, + + /** + * Checks if a notification with an ID was triggered. + * + * @param {int} id + * Local notification ID + */ + isTriggered: function (id) { + var toast = this.findToastById(id); + + return toast && this.isToastTriggered(toast); + }, + + /** + * Lists all local notification IDs. + */ + getAllIds: function () { + var toasts = this.getScheduledToasts(), + ids = []; + + for (var i = 0; i < toasts.length; i++) { + var toast = toasts[i], + toastId = this.getToastId(toast); + + if (ids.indexOf(toastId) == -1) { + ids.push(toastId); + } + } + + return ids; + }, + + /** + * Lists all scheduled notification IDs. + */ + getScheduledIds: function () { + var toasts = this.getScheduledToasts(), + ids = []; + + for (var i = 0; i < toasts.length; i++) { + var toast = toasts[i]; + + if (!this.isToastScheduled(toast)) + continue; + + ids.push(this.getToastId(toast)); + } + + return ids; + }, + + /** + * Lists all scheduled notification IDs. + */ + getTriggeredIds: function () { + var toasts = this.getScheduledToasts(), + ids = []; + + for (var i = 0; i < toasts.length; i++) { + var toast = toasts[i]; + + if (!this.isToastTriggered(toast)) + continue; + + ids.push(this.getToastId(toast)); + } + + return ids; + }, + + /** + * Property list for given notifications. + * If called without IDs, all notification will be returned. + * + * @param {int[]} ids + * List of local notification IDs. + * @param {String?} type + * Local notification life cycle type + */ + getAll: function (ids, type) { + var toasts = this.getScheduledToasts(), + notifications = []; + + if (!ids || ids.length === 0) { + ids = this.getAllIds(); + } + + for (var index = 0; index < ids.length; index++) { + var id = ids[index], + toast = this.findToastById(id); + + if (!toast || type && this.getToastType(toast) != type) + continue; + + var json = toast.content.lastChild.lastChild.innerText; + + notifications.push(JSON.parse(json)); + } + + return notifications; + }, + + /** + * Property list for given notifications. + * If called without IDs, all notification will be returned. + * + * @param {int[]} ids + * List of local notification IDs + */ + getScheduled: function (ids) { + if (!ids || ids.length === 0) { + ids = this.getAllIds(); + } + + return this.getAll(ids, 'scheduled'); + }, + + /** + * Property list for given notifications. + * If called without IDs, all notification will be returned. + * + * @param {int[]} ids + * List of local notification IDs + */ + getTriggered: function (ids) { + if (!ids || ids.length === 0) { + ids = this.getAllIds(); + } + + return this.getAll(ids, 'triggered'); + }, +}; diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationProxy.js b/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationProxy.js new file mode 100644 index 0000000..2f7ed3d --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationProxy.js @@ -0,0 +1,311 @@ +/* + Copyright 2013-2015 appPlant UG + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/** + * Executes all queued events. + */ +exports.deviceready = function () { + exports.core.deviceready(); +}; + +/** + * Schedule a new local notification. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {Object[]} notifications + * Array of local notifications + */ +exports.schedule = function (success, error, notifications) { + exports.core.schedule(notifications, 'schedule'); + + success(); +}; + +/** + * Update existing notifications specified by IDs in options. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {Object[]} notifications + * Array of local notifications + */ +exports.update = function (success, error, notifications) { + exports.core.update(notifications); + + success(); +}; + +/** + * Clear the specified notification. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int[]} ids + * List of local notification IDs + */ +exports.clear = function (success, error, ids) { + exports.core.clear(ids, true); + + success(); +}; + +/** + * Clear all previously sheduled notifications. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + */ +exports.clearAll = function (success, error) { + exports.core.clearAll(); + + success(); +}; + +/** + * Cancel the specified notifications. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int[]} ids + * List of local notification IDs + */ +exports.cancel = function (success, error, ids) { + exports.core.cancel(ids, true); + + success(); +}; + +/** + * Remove all previously registered notifications. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + */ +exports.cancelAll = function (success, error) { + exports.core.cancelAll(); + + success(); +}; + +/** + * Check if a notification with an ID is present. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int} id + * Local notification ID + */ +exports.isPresent = function (success, error, args) { + var found = exports.core.isPresent(args[0]); + + success(found); +}; + +/** + * Check if a notification with an ID is scheduled. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int} id + * Local notification ID + */ +exports.isScheduled = function (success, error, args) { + var found = exports.core.isScheduled(args[0]); + + success(found); +}; + +/** + * Check if a notification with an ID was triggered. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int} id + * Local notification ID + */ +exports.isTriggered = function (success, error, args) { + var found = exports.core.isTriggered(args[0]); + + success(found); +}; + +/** + * List all local notification IDs. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + */ +exports.getAllIds = function (success, error) { + var ids = exports.core.getAllIds(); + + success(ids); +}; + +/** + * List all scheduled notification IDs. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + */ +exports.getScheduledIds = function (success, error) { + var ids = exports.core.getScheduledIds(); + + success(ids); +}; + +/** + * List all triggered notification IDs. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + */ +exports.getTriggeredIds = function (success, error) { + var ids = exports.core.getTriggeredIds(); + + success(ids); +}; + +/** + * Propertys for given notification. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int[]} ids + * List of local notification IDs + */ +exports.getSingle = function (success, error, ids) { + var notification = exports.core.getAll(ids)[0]; + + success(notification); +}; + +/** + * Propertys for given scheduled notification. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int[]} ids + * List of local notification IDs + */ +exports.getSingleScheduled = function (success, error, ids) { + var notification = exports.core.getScheduled(ids)[0]; + + success(notification); +}; + +/** + * Propertys for given triggered notification. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int[]} ids + * List of local notification IDs + */ +exports.getSingleTriggered = function (success, error, ids) { + var notification = exports.core.getTriggered(ids)[0]; + + success(notification); +}; + +/** + * Property list for given notifications. + * If called without IDs, all notification will be returned. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int[]} ids + * List of local notification IDs + */ +exports.getAll = function (success, error, ids) { + var notifications = exports.core.getAll(ids); + + success(notifications); +}; + +/** + * Property list for given triggered notifications. + * If called without IDs, all notification will be returned. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int[]} ids + * List of local notification IDs + */ +exports.getScheduled = function (success, error, ids) { + var notifications = exports.core.getScheduled(ids); + + success(notifications); +}; + +/** + * Property list for given triggered notifications. + * If called without IDs, all notification will be returned. + * + * @param {Function} success + * Success callback + * @param {Function} error + * Error callback + * @param {int[]} ids + * List of local notification IDs + */ +exports.getTriggered = function (success, error, ids) { + var notifications = exports.core.getTriggered(ids); + + success(notifications); +}; + + +cordova.commandProxy.add('LocalNotification', exports); diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationUtil.js b/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationUtil.js new file mode 100644 index 0000000..5679254 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.local-notification/src/windows/LocalNotificationUtil.js @@ -0,0 +1,443 @@ +/* + Copyright 2013-2015 appPlant UG + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + + +exports = require('de.appplant.cordova.plugin.local-notification.LocalNotification.Proxy').core; + +var channel = require('cordova/channel'); + + +/*********** + * MEMBERS * + ***********/ + +// True if App is running, false if suspended +exports.isInBackground = true; + +// Indicates if the device is ready (to receive events) +exports.isReady = false; + +// Queues all events before deviceready +exports.eventQueue = []; + +/******** + * UTIL * + ********/ + +/** + * The repeating interval in milliseconds. + * + * @param {String} interval + * A number or a placeholder like `minute`. + * + * @return {Number} + * Interval in milliseconds + */ +exports.getRepeatInterval = function (every) { + + if (!every) + return 0; + + if (every == 'minute') + return 60000; + + if (every == 'hour') + return 360000; + + if (!NaN(every)) + return parseInt(every) * 60000; + + return 0; +}; + +/** + * If the notification is repeating. + * + * @param {Object} notification + * Local notification object + * + * @return Boolean + */ +exports.isRepeating = function (notification) { + return this.getRepeatInterval(notification.every) !== 0; +}; + +/** + * Parses sound file path. + * + * @param {String} path + * Relative path to sound resource + * + * @return {String} XML Tag for Sound-File + */ +exports.parseSound = function (path) { + if (!path.match(/^file/)) + return ''; + + var uri = this.parseUri(path), + audio = "

$jq11W0HB%KK%Be;@#_|Q$@zcqQK ztYLN~3nOE}6jsx2iqiL!Sp>Pzd`~cpUkSu$rU>6;j`lba`*HK*^U9Aj_`5EQns=8H z@3MzgC&4IK=}efxdm{k_E3-%n9dRKV0cp9UhD81*z>?YWSoaO#T)m%d)-IuOy?p(Ix2S0X6dG z^Sh`MrWb!{EH1Ct`B+08J%;w}$Lk5`kqnjy)`i&!Du_rDX3*k?0*iI3I|on zyY_zUrO|CpTk1dk)}Gt9XAgWODE@4*p3mmzTnI)<2l1~Zo$`P&vwfHce$AVd4XgU% z7oln(cNxu>aOIf)FZB~>M&{nb)nV0dM=cY7>)kbY9v}MK;8RjAQx0796xHo^j5#fE1)n0k0Q|8pah9*-<}*%)!nzIQ6j(VISi-#SlpT7K zPn$>>*IaM;Mdyq!$I9}W3j2jd=}jJ=4`dtz7*j5CTL5|j_{}~t;{Ak2NiI}(0I%iJ zS5aIwF99b*WW^p(-3kUHRSF@%;jl@BDc|A^hH;{Rbwywmx+4V@CX8_}fblZkC>WQ< z8;exEfs7_4vHkr}X*KRmp|r(>B_D-ElSN|K?=30RQAIQtnga_Kwbd_m?(*%~gvck; zuKe3LG{rty=}^6%SOPU+v>XK`5wCfCsCSSlUT#AkYJ}5?uc^ZaG!3;4%n675ShVkRxQFS;%b@ah^cA z0xH=A4K*dIKT7}7CFNh$E88>uXP9}J62V#CL=Dmmpia;zAMv6)_uzlI!EFAA{P;L` zIOx&nl@Qzn1EJ~!@pZ~soZ09#i$Y$rc#8x1J#JtaCoa0aHXX($kT(C|Qls8Wy}x&* z8HM3DQPMSD$z1fd4v4wlY&^+)n9-+`r+2=?=&DG1fhlz166`&m)cNAVBQp}SUP2dN zx*e_#qnG@XytR0b>F>eFf%tSNyG-#qxwF6bba>B#UAuQ&+%yZX3~}pgAF7 zCf0DTEg7mAYBSs#NbP{yFxr$4%DCCP3?pD^GBpJ@Ti|9;^F8PZ^LFxj!lAxks?e_R zZc$@=%};3>;rgE6KYLXJ{nL4~Ve?(!z)IVCLX96F$&k@SX-E@JM@vxw;(hV)^18E5 znUn#-q1=@qp*)9Fz{(0L#=NtR`B5^Tm%L?8*QT+kpf_m;pl?1Gv(Eli7}NTPbFUc{ zokQvk_*{UvapD=!5w*%v-{jDPOY}89qZ`5c5*XI!H=S@(s5*k1G4uar2G67tG03r& zXKN*7mSnz;(Z*W!?sKZP8`fuZ6jWyrTVULMq6$s4rC$Pc=s7Rd!fGx#a+%JcQwt~D zq{fLSj7;EWje24R>cXd=FpzHI<-(A|_#yBB`tP7(V6Y=FgKyh-e7MyfbVbjs=@xEI m_^T5kcVZf6qF@X76t?H#b5O`5Vmv?%cJvG(`D@~~JO2d}6dff1 delta 3613 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 delta 31 mcmZ3rfN|9V#tm)00$bJ|cyQK%gOdRWCQf0L*gVa53KIa(LJPA1 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin index 6023124711feb106b1ad299b2471480e1b9040cc..1da75fb82ae6be15425eeb1afba8dc2796132c9d 100644 GIT binary patch delta 720 zcmdmdj`_e1<_V&VEEB~v1Q-}{nHU(DCNTg(gkJTdjeZNHn4TMN{vhSU$l`LZxoG3W zUh$0!nngATcCA*}{vv;R@%Kgsqbw9+98im-$|BWw<_vG0O>Nw}vz$ zv0L}QB4j2kVSM*vzu(I+#U>R-@BX`R84i%8j#JB*O>T%X+x#;pL|AZ!59`qxx9;51 zQ<_@lFX33b32c6CLyh2rw6CFR+SkJ0KNU{OzooSbA+v4a-Nk#Ri|3vUE1P^JU288~ z25f%8mHWz@Bbz=k3--JU2t2SvcV39`dbXYB=eMi{nZ3EU>n7u7?=~Tp$p&dGEO*TL z4^Q5BL~gR}f$y7}drepbkG0ho6a+UIWlnw5cT#1!`VO$Jv;CJDH*cTF#xi-qL>89U zdv4fHZk#DKxg+N0WWCK^lh?<-n*4sIupp1i0)wyufyduNgIDy1@c=XxD*a)ye12_iVnk(2Pyso6*Z`lVzUeO1GBToo)<#wOL^W7mL7A z$IELDtew*lOY8~qkYG37FC{vhSU$g=**bncB4 zd&M^{XcpNV;K8RTsCi+jlgAsTq!gJ#sh$V#L$*$Sctn13U*>zkb+rbP50eC?q}&fS z3D(V+gOHi(&bw~0@}jQhD^8E^v$}e~WjH{VI(?L^ne6z|WO73<`{sW+{=$OQF9l|a z8y~x)7U$B^`8C#Y6WEU0h8jW1{-7%%n=e`vX8aRoHAvo#klANmvMRWHv)pYj*FU#f zYNO#YU^`CVc%-yBvgs4^=8z5{7Qv?_P2Dmgyk}G1oiWxnGiYB6vS4#>*Ih=I@Zbi6 z$s3QzO}0JoeRFfK3CrePli64VV{g28c#tDZe-+D@bDmdsG425CINN`nk)?gHU&Z9c znNpKGVs38M+ib!(`Tb1c&3SWfun1ZhCY)2|dAICv(B?zVD|fg;*?eoE8Jj@D1jCl8bB!*&PB6?!;4^L5tgwQMMW7(}PNcAL_ys|?TVcAJ-)sen zsxUJ$PTmmvR3OB0uY|q*X75e6UNd=BJWdA69cA47;HoI&WWCK^U_~!gzWuXbcgC23 zfm0NSc|n-@tj&f^kGl9GZu!bAxcih%V-MIfYj<5?65PPJT;R!JyZfG3T#x-X*;=KM1^*ad>>%H-J!;^qo|<~*Ikr&KvP;D-6;Qzw=(gF~k3 N+3JAJ{#Tv|0RR~UFC+i} diff --git a/platforms/android/AndroidManifest.xml b/platforms/android/AndroidManifest.xml index 890c0a1..a49ab8d 100644 --- a/platforms/android/AndroidManifest.xml +++ b/platforms/android/AndroidManifest.xml @@ -1,5 +1,5 @@ - + diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 3891b8b..03d8f95 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -125,7 +125,7 @@ function checkDistractedReminder() { if (cordova.plugins.backgroundMode.isActive()) { returnToStudyNotif(); } - + } } } @@ -178,7 +178,7 @@ function takeABreakAlert() { if (breakAlertUp != true) { breakAlertUp = true; navigator.notification.confirm( - 'Seems like you\'ve been studying well for quite some time now. We recommend a 10 minute break for optimum brain functionality!', // message + 'Seems like you\'ve been studying well for ' +((getOptimalStudyPeriod()/1000)/60) +' minutes now. We recommend a 10 minute break for optimum brain functionality!', // message onConfirmBreak, // callback 'Sorry to interrupt, but...', // title ['Continue Studying', 'Take a Break'] // button labels @@ -190,6 +190,8 @@ function onConfirmBreak(buttonIndex) { breakAlertUp = false; if (buttonIndex == 1) { //continue monitoring (do nothing) + timeResumed = new Date(); + } if (buttonIndex == 2) { //pause monitoring @@ -203,7 +205,7 @@ function checkBreakReminder() { //check if user should consider having a break from studying - if (timeSinceBreak > getOptimalStudyPeriod()) { //if time since break is greater than 50 mins (3000000), 60000 1 min + if (timeSinceBreak > 30000) { //if time since break is greater than 50 mins (3000000), 60000 1 min var score = createStudyScore(micNotStudying, micIntervalCount, accelNotStudying, accelIntervalCount); if (localStorage.getItem("oldScore") != null) { if ((localStorage.getItem("oldScore") - 5) <= score) { diff --git a/platforms/android/assets/www/resources/js/mic.js b/platforms/android/assets/www/resources/js/mic.js index b9093fd..944174c 100644 --- a/platforms/android/assets/www/resources/js/mic.js +++ b/platforms/android/assets/www/resources/js/mic.js @@ -49,44 +49,57 @@ function readMic(reading) { micOn(); } - micCount++; - micVolume.read(function(reading) { - console.log(reading.volume); - vol = reading.volume; - totalVol = totalVol + vol; - }, errorCallback); + micPulseCount++; - averageVol = totalVol / micCount; - if (averageVol > (getAmbientNoiseLevel() + 10) && micCount > 29) { - noisyBackground(); - noiseLevel = "vhigh"; - } else if (averageVol > (getAmbientNoiseLevel() + 5) && micCount > 29) { - noisyBackground(); - noiseLevel = "high"; - } else if (averageVol > getAmbientNoiseLevel() && micCount > 29) { - noisyBackground(); - noiseLevel = "medium"; - } else if (micCount > 29) { - noiseLevel = "low"; - micIntervalNSBool = "false"; //look to sampling method for more information on what this is for + //check how fast the phone can pulse mic (some phones limited) + if (localStorage.getItem("micPulseCount") == null) { + localStorage.setItem("micPulseCount", micPulseCount); + } else if (micPulseCount > localStorage.getItem("micPulseCount")) { + localStorage.setItem("micPulseCount", micPulseCount); } - - //As long as this isn't the first time this method is running, check if the sample rate needs updated. - if (localStorage.getItem("oldMicIntervalNSBool") != null) { - //console.log('running updateSampleR'); - updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); + //safety precausion to make sure micPulseCount does not go above 30 + if (localStorage.getItem("accelPulseCount") > 30) { + localStorage.setItem("accelPulseCount", 30); } + if (firstRunMic != true) { + + micVolume.read(function(reading) { + console.log("micPulseCount: " + micPulseCount + " vol: " + reading.volume); + vol = reading.volume; + totalVol = totalVol + vol; + }, errorCallback); + + averageVol = totalVol / micPulseCount; + if (averageVol > (getAmbientNoiseLevel() + 10) && micPulseCount > (localStorage.getItem("micPulseCount")-1)) { + noisyBackground(); + noiseLevel = "vhigh"; + } else if (averageVol > (getAmbientNoiseLevel() + 5) && micPulseCount > (localStorage.getItem("micPulseCount")-1)) { + noisyBackground(); + noiseLevel = "high"; + } else if (averageVol > getAmbientNoiseLevel() && micPulseCount > (localStorage.getItem("micPulseCount")-1)) { + noisyBackground(); + noiseLevel = "medium"; + } else if (micPulseCount > (localStorage.getItem("micPulseCount")-1)) { + noiseLevel = "low"; + micIntervalNSBool = "false"; //look to sampling method for more information on what this is for + } + + //As long as this isn't the first time this method is running, check if the sample rate needs updated. + if (localStorage.getItem("oldMicIntervalNSBool") != null) { + //console.log('running updateSampleR'); + updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); + } + + //This is so we can compare the values from this interval and the previous interval + if (typeof(Storage) !== "undefined") { + localStorage.setItem("oldMicIntervalNSBool", micIntervalNSBool); + + } else { + // Sorry! No Web Storage support.. + console.log("No web storage support - oh dear."); + } - //This is so we can compare the values from this interval and the previous interval - if (typeof(Storage) !== "undefined") { - localStorage.setItem("oldMicIntervalNSBool", micIntervalNSBool); - - } else { - // Sorry! No Web Storage support.. - console.log("No web storage support - oh dear."); } - - } //Loop the microphone sensor for 10 seconds (perform an interval) @@ -95,7 +108,7 @@ function micInterval() { micIntervalNSBool = false; //boolean to determine if the user is not studying during the current interval micIntervalCount++; - micCount = 0; //this is a count of how many pulses the microphones sensors has read (how many times readMic was called in this interval) + micPulseCount = 0; //this is a count of how many pulses the microphones sensors has read (how many times readMic was called in this interval) totalVol = 0; //for working out the average within readMic micSensor = setInterval(readMic, 333); //measure values every x milliseconds setTimeout(stopMicInterval, 10000); //stop reading after x milliseconds @@ -103,6 +116,7 @@ function micInterval() { //stop the mic sensing function stopMicInterval() { + firstRunMic = false; clearInterval(micSensor); clearTimeout(micSensor); clearTimeout(stopMicInterval); @@ -111,7 +125,7 @@ function stopMicInterval() { //If the surrounding noise level is above the threshold value, do these things. function noisyBackground() { - //console.log('It is noisy!'); + console.log('mic not studying count went up'); micIntervalNSBool = "true"; micNotStudying++; } @@ -124,14 +138,14 @@ function getAverageVolume() { //-------------------Recording ambient noise level within settings to set a custom threshold value----------- function recordAmbientNoiseLevel(reading) { - micCount++; + micPulseCount++; micVolume.read(function(reading) { console.log(reading.volume); vol = reading.volume; totalVol = totalVol + vol; }, errorCallback); - averageVol = totalVol / micCount; + averageVol = totalVol / micPulseCount; if (typeof(Storage) !== "undefined") { localStorage.setItem("ambientNoiseLevel", (averageVol + 1)); @@ -151,12 +165,13 @@ function startRecordingAmbientNoiseLevel(button) { micOff(); micOn(); button.disabled = true; //disable the button - micCount = 0; + micPulseCount = 0; totalVol = 0; recordLevel = setInterval(recordAmbientNoiseLevel, 200); setTimeout(killNoiseLevelRecording, 10000); setTimeout(function() { - button.disabled = false; } //enable the button again + button.disabled = false; + } //enable the button again , 10000) } diff --git a/platforms/android/assets/www/resources/js/motion.js b/platforms/android/assets/www/resources/js/motion.js index 7f2b66e..0c14952 100644 --- a/platforms/android/assets/www/resources/js/motion.js +++ b/platforms/android/assets/www/resources/js/motion.js @@ -22,7 +22,7 @@ function onSuccessAcc(acceleration) { localStorage.setItem("accelPulseCount", 9); } //if this is the first interval run then skip (we want to count the number of pulses per interval first) - if (firstRun != true) { + if (firstRunAccel != true) { //check if phone is in motion if (acceleration.x > 1 || acceleration.x < -1) { @@ -97,7 +97,7 @@ function accelInterval() { //finish the interval function stopAccelInterval() { - firstRun = false; + firstRunAccel = false; clearInterval(accelSensor); clearTimeout(accelSensor); clearTimeout(stopAccelInterval); diff --git a/platforms/android/assets/www/resources/js/study.js b/platforms/android/assets/www/resources/js/study.js index 1484798..f0eb677 100644 --- a/platforms/android/assets/www/resources/js/study.js +++ b/platforms/android/assets/www/resources/js/study.js @@ -229,7 +229,9 @@ function getUserNotes() { function initialiseMonitoring() { document.getElementById("studyPageScore").innerHTML = ""; //clear the previous score from the page. - firstRun = true; //var to check if the phone has to indentify the speed at which accel can be checked + firstRunAccel = true; //var to check if the phone has to indentify the speed at which accel can be checked + firstRunMic = true; //var to check if the phone has to indentify the speed at which accel can be checked + timeResumed = new Date(); //for checking if user should have break (used to get duration since last break) localStorage.setItem("accelPulseCount", 0); diff --git a/platforms/android/res/xml/config.xml b/platforms/android/res/xml/config.xml index cd7484a..e041a26 100644 --- a/platforms/android/res/xml/config.xml +++ b/platforms/android/res/xml/config.xml @@ -1,5 +1,5 @@ - + diff --git a/www/resources/js/alerts.js b/www/resources/js/alerts.js index 3891b8b..f37cbd4 100644 --- a/www/resources/js/alerts.js +++ b/www/resources/js/alerts.js @@ -125,7 +125,7 @@ function checkDistractedReminder() { if (cordova.plugins.backgroundMode.isActive()) { returnToStudyNotif(); } - + } } } @@ -138,7 +138,7 @@ function returnToStudyAlert() { navigator.notification.beep(1); navigator.notification.confirm( - 'Seems like you may have become a little distracted. Have you finished your study session?', // message + 'We think you may have become a little distracted. Have you finished your study session?', // message onConfirmReturn, // callback 'Sorry to interrupt, but...', // title ['Take a Break', 'Yes', 'No'] // button labels @@ -164,7 +164,7 @@ function returnToStudyNotif() { cordova.plugins.notification.local.schedule({ id: 20, title: "Sorry to interrupt, but...", - text: "Seems like you may have become a little distracted. Have you finished your study session?" + text: "We think you may have become a little distracted. Have you finished your study session?" }); } //End of Alert the user that they've been distracted for a while------------------------------------------------- @@ -178,7 +178,7 @@ function takeABreakAlert() { if (breakAlertUp != true) { breakAlertUp = true; navigator.notification.confirm( - 'Seems like you\'ve been studying well for quite some time now. We recommend a 10 minute break for optimum brain functionality!', // message + 'Seems like you\'ve been studying well for ' +((getOptimalStudyPeriod()/1000)/60) +' minutes now. We recommend a 5 to 10 minute break for optimum brain functionality!', // message onConfirmBreak, // callback 'Sorry to interrupt, but...', // title ['Continue Studying', 'Take a Break'] // button labels @@ -190,6 +190,8 @@ function onConfirmBreak(buttonIndex) { breakAlertUp = false; if (buttonIndex == 1) { //continue monitoring (do nothing) + timeResumed = new Date(); + } if (buttonIndex == 2) { //pause monitoring @@ -224,7 +226,7 @@ function takeABreakNotif() { cordova.plugins.notification.local.schedule({ id: 10, title: "Sorry to interrupt, but...", - text: "Seems like you've been studying well for quite some time now. We recommend a 10 minute break for optimum brain functionality!" + text: "Seems like you've been studying well for " +((getOptimalStudyPeriod()/1000)/60) + " minutes now. We recommend a 5 to 10 minute break for optimum brain functionality!" }); } diff --git a/www/resources/js/mic.js b/www/resources/js/mic.js index b9093fd..944174c 100644 --- a/www/resources/js/mic.js +++ b/www/resources/js/mic.js @@ -49,44 +49,57 @@ function readMic(reading) { micOn(); } - micCount++; - micVolume.read(function(reading) { - console.log(reading.volume); - vol = reading.volume; - totalVol = totalVol + vol; - }, errorCallback); + micPulseCount++; - averageVol = totalVol / micCount; - if (averageVol > (getAmbientNoiseLevel() + 10) && micCount > 29) { - noisyBackground(); - noiseLevel = "vhigh"; - } else if (averageVol > (getAmbientNoiseLevel() + 5) && micCount > 29) { - noisyBackground(); - noiseLevel = "high"; - } else if (averageVol > getAmbientNoiseLevel() && micCount > 29) { - noisyBackground(); - noiseLevel = "medium"; - } else if (micCount > 29) { - noiseLevel = "low"; - micIntervalNSBool = "false"; //look to sampling method for more information on what this is for + //check how fast the phone can pulse mic (some phones limited) + if (localStorage.getItem("micPulseCount") == null) { + localStorage.setItem("micPulseCount", micPulseCount); + } else if (micPulseCount > localStorage.getItem("micPulseCount")) { + localStorage.setItem("micPulseCount", micPulseCount); } - - //As long as this isn't the first time this method is running, check if the sample rate needs updated. - if (localStorage.getItem("oldMicIntervalNSBool") != null) { - //console.log('running updateSampleR'); - updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); + //safety precausion to make sure micPulseCount does not go above 30 + if (localStorage.getItem("accelPulseCount") > 30) { + localStorage.setItem("accelPulseCount", 30); } + if (firstRunMic != true) { + + micVolume.read(function(reading) { + console.log("micPulseCount: " + micPulseCount + " vol: " + reading.volume); + vol = reading.volume; + totalVol = totalVol + vol; + }, errorCallback); + + averageVol = totalVol / micPulseCount; + if (averageVol > (getAmbientNoiseLevel() + 10) && micPulseCount > (localStorage.getItem("micPulseCount")-1)) { + noisyBackground(); + noiseLevel = "vhigh"; + } else if (averageVol > (getAmbientNoiseLevel() + 5) && micPulseCount > (localStorage.getItem("micPulseCount")-1)) { + noisyBackground(); + noiseLevel = "high"; + } else if (averageVol > getAmbientNoiseLevel() && micPulseCount > (localStorage.getItem("micPulseCount")-1)) { + noisyBackground(); + noiseLevel = "medium"; + } else if (micPulseCount > (localStorage.getItem("micPulseCount")-1)) { + noiseLevel = "low"; + micIntervalNSBool = "false"; //look to sampling method for more information on what this is for + } + + //As long as this isn't the first time this method is running, check if the sample rate needs updated. + if (localStorage.getItem("oldMicIntervalNSBool") != null) { + //console.log('running updateSampleR'); + updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); + } + + //This is so we can compare the values from this interval and the previous interval + if (typeof(Storage) !== "undefined") { + localStorage.setItem("oldMicIntervalNSBool", micIntervalNSBool); + + } else { + // Sorry! No Web Storage support.. + console.log("No web storage support - oh dear."); + } - //This is so we can compare the values from this interval and the previous interval - if (typeof(Storage) !== "undefined") { - localStorage.setItem("oldMicIntervalNSBool", micIntervalNSBool); - - } else { - // Sorry! No Web Storage support.. - console.log("No web storage support - oh dear."); } - - } //Loop the microphone sensor for 10 seconds (perform an interval) @@ -95,7 +108,7 @@ function micInterval() { micIntervalNSBool = false; //boolean to determine if the user is not studying during the current interval micIntervalCount++; - micCount = 0; //this is a count of how many pulses the microphones sensors has read (how many times readMic was called in this interval) + micPulseCount = 0; //this is a count of how many pulses the microphones sensors has read (how many times readMic was called in this interval) totalVol = 0; //for working out the average within readMic micSensor = setInterval(readMic, 333); //measure values every x milliseconds setTimeout(stopMicInterval, 10000); //stop reading after x milliseconds @@ -103,6 +116,7 @@ function micInterval() { //stop the mic sensing function stopMicInterval() { + firstRunMic = false; clearInterval(micSensor); clearTimeout(micSensor); clearTimeout(stopMicInterval); @@ -111,7 +125,7 @@ function stopMicInterval() { //If the surrounding noise level is above the threshold value, do these things. function noisyBackground() { - //console.log('It is noisy!'); + console.log('mic not studying count went up'); micIntervalNSBool = "true"; micNotStudying++; } @@ -124,14 +138,14 @@ function getAverageVolume() { //-------------------Recording ambient noise level within settings to set a custom threshold value----------- function recordAmbientNoiseLevel(reading) { - micCount++; + micPulseCount++; micVolume.read(function(reading) { console.log(reading.volume); vol = reading.volume; totalVol = totalVol + vol; }, errorCallback); - averageVol = totalVol / micCount; + averageVol = totalVol / micPulseCount; if (typeof(Storage) !== "undefined") { localStorage.setItem("ambientNoiseLevel", (averageVol + 1)); @@ -151,12 +165,13 @@ function startRecordingAmbientNoiseLevel(button) { micOff(); micOn(); button.disabled = true; //disable the button - micCount = 0; + micPulseCount = 0; totalVol = 0; recordLevel = setInterval(recordAmbientNoiseLevel, 200); setTimeout(killNoiseLevelRecording, 10000); setTimeout(function() { - button.disabled = false; } //enable the button again + button.disabled = false; + } //enable the button again , 10000) } diff --git a/www/resources/js/motion.js b/www/resources/js/motion.js index 7f2b66e..0c14952 100644 --- a/www/resources/js/motion.js +++ b/www/resources/js/motion.js @@ -22,7 +22,7 @@ function onSuccessAcc(acceleration) { localStorage.setItem("accelPulseCount", 9); } //if this is the first interval run then skip (we want to count the number of pulses per interval first) - if (firstRun != true) { + if (firstRunAccel != true) { //check if phone is in motion if (acceleration.x > 1 || acceleration.x < -1) { @@ -97,7 +97,7 @@ function accelInterval() { //finish the interval function stopAccelInterval() { - firstRun = false; + firstRunAccel = false; clearInterval(accelSensor); clearTimeout(accelSensor); clearTimeout(stopAccelInterval); diff --git a/www/resources/js/study.js b/www/resources/js/study.js index 1484798..f0eb677 100644 --- a/www/resources/js/study.js +++ b/www/resources/js/study.js @@ -229,7 +229,9 @@ function getUserNotes() { function initialiseMonitoring() { document.getElementById("studyPageScore").innerHTML = ""; //clear the previous score from the page. - firstRun = true; //var to check if the phone has to indentify the speed at which accel can be checked + firstRunAccel = true; //var to check if the phone has to indentify the speed at which accel can be checked + firstRunMic = true; //var to check if the phone has to indentify the speed at which accel can be checked + timeResumed = new Date(); //for checking if user should have break (used to get duration since last break) localStorage.setItem("accelPulseCount", 0); From bc04ff7c68766e2678dec68ac260f83cf3e055d6 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Wed, 2 Mar 2016 17:56:09 +0000 Subject: [PATCH 09/20] message tweaks --- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 46779 -> 46779 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 535493 -> 535493 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 20522 -> 20522 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 60480 -> 60480 bytes .../android/assets/www/resources/js/alerts.js | 13 ++++++++----- www/resources/js/alerts.js | 5 ++++- 7 files changed, 12 insertions(+), 6 deletions(-) diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index d74b1849cc3470670d515946081cb175538ad689..4425da0cfbb60033acd67b21fd996f0d915cd451 100644 GIT binary patch literal 17 VcmZQJKXqJVLI1Xo3}6tv2>?3=1?3V1*HH0 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index 9c9f72b6401bf8346761da9f92fca6999a28a287..b692fc50ea375ad18a6ee4b4dcd96105af18b827 100644 GIT binary patch delta 1636 zcmZvcZA?>V6vr>Ow=J}S)K<+JSB19H5)&PCaT>%8W5j3>G%+RxR6vUem*OBee2HWm zZ{bqp2)=;TIYlif;MFK9M0_`~;-W!~PWC}DqI9~T!4c4&+tB;4tY2>P`=9ea_c`~R z=h6UuX@G9!($&q4Ybf9ED||>kXM6a=>GK2B&2<-ioH>urqLZwfAINYK!oQIyB+hGy z0oO*W#-E_fK)z|#g^C;C$unr?`W1N`Di4e$`H*BYh$ZAwuD`cnpQNcT61+yvZt7 zkPabdzNv4A#C);><3gb?C&><_EJY*Nl$O5qh(}uh)NgWLJ z1!R{Z>?lZUxAwzmR*l$KrUH4CnR9wzwAui-H}?{5;V4>il4Rg0BwD5IK_0&F#XLC8 zk_S?g!g44*ETHCGw=_&jnH6*LNx563l7 zZZq)hTcV_5DS8o#9n+f9_|d|C#xI0^5L%G<=6x7f+ow$bTv}Gm&ATDL*L-`u3%sU7tYRJa_NoRiD4>dyJzj1*!N* z@AI_4@{)Mdw~;*s`uYdifh)?L`pV8L{|UBX@DG+xd*O0PoxcavWTA7K{aKG7xQraO zAPXimr%^WkVCiGVyx@6$@wNtT?Ff6lWqYZ@?Xw@d3&Moa)Vp&B_28^DF7t1;=`Py5 zo86_m8}0prYls6G7W)5wW4-YC_uT88`#x92ZNts;EnLbL7Hf9?Qx6%j9M#dw2`y$G=mGF~{x{pq1k;go}@J7Fcp zXB0hr0bf@WK8kh7ha#?>hN@~JUNHgrcfG?iy{k%aq!bmm<66>K8_9?67Kr}2Mxk;$(Y>X`9^IMn5z5o|8$&>&9 delta 1636 zcmZvcZA_C_6vrR>3N1xCsz^6PDBVhZBftO=otcRuH3kJoA}?dSSj12Zmf#{IKr&#A zLdVgn7zAHf7!A^TH^u-bhG0hGaM>7R84A&bWF+kevk@x`TTh$zxh(6K+x-6L{LgdG zJ@<~VL4KB|OBlhBcm#{m-BfL`M zIy10iC-k4nk@>i|7`c5o;L0R8DxzgcK1KL0D%rNAQ*cZh%{mGB$al8XEQ?N|sA*BCpe2oPgAG3aS9#{Yg@_r4_Ez3H%$Fz{}*m0hV2%tH4q8 zPMnB?LemGE1n`MAntW3k$7e;(0Tg#P%k^ZfdYR`N;NZX9ElAllF-lfzxRf2Uj2XS> z)J~ArQsWqK33=me?{kt?E9a^jvVY({9hn|)cv!O|{L2y7Me)l_@?MYp_y6f0hae+0H`4c9*-V!Cz()AUn8)rz zdKmfqs}VEUjrlBRG{_UflrJE^jq(w?oBd}-+#r14M#T%P7~j*f&3H`(vOc{r z1q1C=-N54*zvw7gfp8P$BPu{%Ln_Ch%|ykE0+Ekt(i2=)mEuSl=HXJl5OkkWTriCM z&A$ap@Ra7_ROI5v6?$^CBb9oU#kWwH`EhBObb*B$>eo_G2r&QjG2~pLo*Stcd5|cp zi1?YgA?!Rd?86`W#k_#+X}o)uE=ZhvKwzb=$Cg=ia_rd_343X-a#xneUF#$U>mk9v DsN#!= diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin index b3f3a9c29e0831b213b9c213b16aa44a7c6d414d..109ba2fdbf52f9323d6d772f9d6060ebcfa2c422 100644 GIT binary patch delta 2214 zcmah}3sj7082-QiN@D(MXsT)Y$H*m`!lIBGkxOXWbCB9}*`+KhSw~6H?x9Fbeez8! zWL36u51*`CHgZ{)uoauj?y*>saZBrL?94x{(@y6w=lpZt^Srm`JnwV9GxfrmdO;_T z&h;b+U`LpKKsVa>_ezXOu7DuOhhj{;%Owb^QjEdUEd*ipQjEE*(*)6Hy%;m2073K% zGskO={1<0GZejPQown!GefrfM^Ia?x3rPQ`P%9Jo3?DWI1=ci(AeFci#u~wO-`+V? zsa!Wn1i|lb;7Xa6-*~Mm;p&dM6mxs&3V2SYlpGDXe;`PH$&3{h!&aFVMmp&D@{v(Z ze}=zaW={BnTt_edpk~#HfUEf#BF0FE!AM5|>K!BbDtSxI>b*OX#RO$N6dD}8pr6x3 z{>C)7VHqR##fk~A(F2}y68MHCZfbSum7hhB#XrJ(PDmNuKQkPdO_kvAMfL*}{wFhR-I#24_A0cTAQ;TI}$2 zbD^dg#wr9@sBnO_3Qx)W{VNvcPYM)sfSCeY6$0O-Sgv1NZa3XLWuF%Ick$wFY2R1c zie0NjkXAp2Aud{8_C~QHy8Q7qbNekHSm>gJH(gFi9+U@pR^~r7)Wwbs zo;`|wf2-|Q-d(ilGcpvpTx3{W_@4G>>28VkO?ZSepg!jw8FxPd0HrsQW07GaP+0-p zPGXAHXje%)=vPL%%A}1CPfMT9|IKC36swBrxf&B=U#IQIu}1>PQ`wBVt1k99Fmnj` z&-$R{DKgDTw5T^wp;icn^vnoz%MJKtsIlR>X_x8y|Gv9R0^A3nnpqw9`Qq6xrt6Xd z*@kO7hcC@rZ0sW9TI@z*_dFmQj|ZJ4ohZI>*Y214-(t#U2vsQPz=a^RC;MCZ(0{bXE6#>3p|mZ&yg zU(h9J%~sXA6Q@j!$+fO-sA(*@$!3ss^&EZu=&uAH$1jQ|jrp>JK=hvafELu`Pkw6? zp4@H81O4oSQPYUChc36A?pU?yPV4WuVH{Z(fkwuI=Q2ylP5a`io8>6D0Jx)s1dxT} zOGpO_dFL9dEhn3*CChA!a84Py*@;z12|^*o8f$8wgKcLAp

V0||qH0u|0+3UK8` zrWe5L*KnRBU6PcVhPOYWyUCZ zy%??R4miyFGDW0G-MzMGatX&{vM;rrWr7Jp6^yTDamkKGM&)a7Roc5eUe&k%R&CAg z;cn=8PcjZgY@!R1(bBePLtpAU9MO%Tz~NG^4@+Oz^+P@eT53=4c0QH|@4$!4zY*Ap z4^F1GDlB#B#Ns2mw0OPMq2TV!Bz)>HH6#gn$AcF#OBca`EayseAtsNpWN)vGVE3t?kq3&0n09nC@Qjm1`-q972%K|EP9DiM0`XA5q3dyF-Qr~ zv%o?F*pWt~5mFIR&cF%SXc9<>_{c*caxtRZX-R@oVAwNvK%MB#&dMDgxlC10{q_CR z|3Ck;?Yg$@y0*l7EsCTls$V!1MSpZmc=d`hVB;uC!8rH@e~QwkiZaYTPEk{;9CG>M z|H?BD{YPf^G*Q&lB>Oiig>%`TceGCC^V58sUDcM=;zh2g6`2)URH#s(CPfTVD3vn( zxgYwLy?Ij9LzggQRGMWK-Ks}X()4>GWCl=y@*rP*@9OS4=;k3Z`a~Wws3NAFS;@3I z&1jzPfRO`Fo<2mQ&ufZGbQ3wSgrIFIEq`|2&UBPnzRCgb451QLD&o}!{;L{iLwV8W zN>L#p)hI%3HnwLi>r4*CULs_+FCR1A5xs8xyo!sH99BwR8spa_Gg|J4uJ;x>9SKmm zT8rA%N|`zHuqOD*Cl1aXMz_@w$l$$3HgjleLh!r$9o+N)6?&H&d&B?u-Hk_Ts|dL| z^O*78EBRAfk_I=5oO--}jQ5rK`y?Ojm@9JDV-8aIM4(h3B|7L+jEouu|Cs9y`5kjE z#9?rD3^HqUvdpd4!@aRziHw=mhf*~!ptG9EysLl9)*`RZuZjxrUNE|?5q{M-29@|K zWzLH}%Ba?LISehHf+~D3*T16;2dG_Fg0}f7_|;_Z7fFFf1{}Bd8&IKNn(S2WT5E5X z%E7u`M)&;8d`8VXI^Fwdw*$U)1R3-?l%_YxmdxFpK*>8r&dvp>M6X4c^hz|M*E3Cu z>Cs5*@4-C$yzeJbm^O9jP`wFsd)1qP-nHHw!+b{8Y-i2`{$~sAd`HukH1e=AZ)MzM zPXZD+DPW|{;km>R&Xqgij8KLr&wUAQ0X*0);mJ469HIF$vqIJe>H_m;CfpgwWpl%E zVr;i+5$0Dchia2??-X0sdy4kmNF_lBfFeplcL?L#QD5=+ zQy}LT(wACT&)5P*&go=b?~B@}!S~x5Td+J01Yn~Kdf`zk;Bi(dIELR&p*@-8tCery z(xrmJ_y^#Q9}Lo3yse)0BK!UdvY}KX43fqT(0EM={Tebqb|Ee0FiweYA7JF@ncw_;+M{Z9?dU9CAiFG5(3&C;MaXDamzTK?G{gL!e zJRJcZj8_#W?OI2ESV(`L!j8+0+m(ymk)~;-Vs2&$xhV?k(hi8ZP6N5@j~JFsmd2*Oq?C?b|BS_$!xiO!Jj%GC5HrJZkkYLQQ} zMdkhD<1gfM+O?Ac`=ZVE+lR9gSA75B_3LYAk2p20+!SkP8&0&XCZ#9o_tm5}8>-=i zzOyIzICkZs2lLNUORBLhj1Iwd*MK*9w}D$A9p8m>VuXgY<#1_EOx^PhJ@}3S_~Vod zTmr6&lc&uBJNE{gdu5# zGyk_`lh; z4+$2AWIG=80&b)@0A7X+3OITfSANYZu#m_uoL|am@n|)xA~TQBKQaZD2$onPB&Iy+ zFhFeIEwsPexQ&FGUi4!{{ z^RYIF_9N}J@a2ii?pK2ikTCM$VGXW4&04YbW3GXO-jZlum%y781#c3Q3v`DQSI)S; zU%@mV{H?wp+rEvoxJ;fc6=!d?2>~r1zkQu5imQgHzs!)A;L22(ZJ(Bcr=^dr;&`%g p6=zFyj3*WvM%;N%M{MW;PUdr=4rlDm;kK~3f=$! diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin index 1da75fb82ae6be15425eeb1afba8dc2796132c9d..126c5d72588a227016bbecb071c030efef2bda20 100644 GIT binary patch delta 381 zcmX?bgZaP><_&R~f|e)NaEb)aYhq?w#?X5w!({8^hezZm_hr5pjGUbu!Xh~D+N`j? znTmz``VlfYrPkYCML+l^sc2N)8POaAm*HRl0=HwoZcTQ4X)?K?mwofU9DiX!i>%vs z@+OKjWb5ab@G!1T+XS|wwxLFF=Avi6r>{6@zv1&y4uSuU6A?1nfBd*FE8bwaDI{@h z!lT^Ja2c>2ccobjHb*vXR~6W|jrm2fWn|pFQ@qhLEEAhHE3DvR5qNo%=euuEP>)pg zOvk@BXV^eQ7w5hHdF0E9{d!y6Zie}s-2fKV0J+(bSIy;&F#`jqC=m04FthxxZ#^lQ zJDip!D+j;6$M|Cp$kChE?z+MxxXpN_idgl}cL~8Iy@3TQEs&%v+9qy2V7~5|SFK8K XTtM#znA8m>mebBI$2WKG-L3}!&>F72 delta 381 zcmX?bgZaP><_&R~f_seHMeiSEWVZ0)Zn(mEC1LC2hezZm_hr5pTp6ymh?w{-kUr3Zr1|UI diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 03d8f95..7e87f86 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -138,7 +138,7 @@ function returnToStudyAlert() { navigator.notification.beep(1); navigator.notification.confirm( - 'Seems like you may have become a little distracted. Have you finished your study session?', // message + 'We think you may have become a little distracted. Have you finished your study session?', // message onConfirmReturn, // callback 'Sorry to interrupt, but...', // title ['Take a Break', 'Yes', 'No'] // button labels @@ -164,7 +164,7 @@ function returnToStudyNotif() { cordova.plugins.notification.local.schedule({ id: 20, title: "Sorry to interrupt, but...", - text: "Seems like you may have become a little distracted. Have you finished your study session?" + text: "We think you may have become a little distracted. Have you finished your study session?" }); } //End of Alert the user that they've been distracted for a while------------------------------------------------- @@ -178,7 +178,7 @@ function takeABreakAlert() { if (breakAlertUp != true) { breakAlertUp = true; navigator.notification.confirm( - 'Seems like you\'ve been studying well for ' +((getOptimalStudyPeriod()/1000)/60) +' minutes now. We recommend a 10 minute break for optimum brain functionality!', // message + 'Seems like you\'ve been studying well for ' +((getOptimalStudyPeriod()/1000)/60) +' minutes now. We recommend a 5 to 10 minute break for optimum brain functionality!', // message onConfirmBreak, // callback 'Sorry to interrupt, but...', // title ['Continue Studying', 'Take a Break'] // button labels @@ -205,7 +205,7 @@ function checkBreakReminder() { //check if user should consider having a break from studying - if (timeSinceBreak > 30000) { //if time since break is greater than 50 mins (3000000), 60000 1 min + if (timeSinceBreak > getOptimalStudyPeriod()) { //if time since break is greater than 50 mins (3000000), 60000 1 min var score = createStudyScore(micNotStudying, micIntervalCount, accelNotStudying, accelIntervalCount); if (localStorage.getItem("oldScore") != null) { if ((localStorage.getItem("oldScore") - 5) <= score) { @@ -215,6 +215,9 @@ function checkBreakReminder() { takeABreakNotif(); } takeABreakAlert(); + console.log("break suggested at: " + currentT + "time since break: " +timeSinceBreak); + localStorage.setItem("breakSuggestedTime", currentT); + localStorage.setItem("timeSinceBreak", timeSinceBreak); timeResumed = new Date(); } } @@ -226,7 +229,7 @@ function takeABreakNotif() { cordova.plugins.notification.local.schedule({ id: 10, title: "Sorry to interrupt, but...", - text: "Seems like you've been studying well for quite some time now. We recommend a 10 minute break for optimum brain functionality!" + text: "Seems like you've been studying well for " +((getOptimalStudyPeriod()/1000)/60) + " minutes now. We recommend a 5 to 10 minute break for optimum brain functionality!" }); } diff --git a/www/resources/js/alerts.js b/www/resources/js/alerts.js index f37cbd4..04dfec2 100644 --- a/www/resources/js/alerts.js +++ b/www/resources/js/alerts.js @@ -105,7 +105,7 @@ function onConfirmStopMon(buttonIndex) { function pausedPrompt() { pauseMonitoring(); navigator.notification.alert( - 'Monitoring has been paused, click OK when you wish to resume!', // message + 'Monitoring has been paused, click OK when you wish to resume.', // message resumeMonitoring, // callback 'Monitoring Paused', // title 'OK' // buttonName @@ -215,6 +215,9 @@ function checkBreakReminder() { takeABreakNotif(); } takeABreakAlert(); + console.log("break suggested at: " + currentT + "time since break: " +timeSinceBreak); + localStorage.setItem("breakSuggestedTime", currentT); + localStorage.setItem("timeSinceBreak", timeSinceBreak); timeResumed = new Date(); } } From 8ce0c0493fc9b506d33fc771c01468a2428b6279 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Wed, 2 Mar 2016 18:23:57 +0000 Subject: [PATCH 10/20] message tweaks --- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 46779 -> 46779 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 535493 -> 535493 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 20522 -> 20522 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 60480 -> 60480 bytes .../android/assets/www/resources/js/alerts.js | 2 +- 6 files changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index 4425da0cfbb60033acd67b21fd996f0d915cd451..fd6246b2001fc12f85a1ccd62c4071709e4a81d8 100644 GIT binary patch literal 17 VcmZQJKXqJVLI1Xo3}6r<3IIB51v3Bu literal 17 VcmZQJKXqJVLI1Xo3}6tv2>?3=1_r$W4kN{U6H&N_v))2#u8M*P;orgRB&f*+0+9-YCqB3SgirHm zDcNrbI;Hs=h~Gj>iCo)yQDKwAL0&@CjETFV$yIQSm-y%?f>F977GxVU$l{_`2)bt) z4WyLNHH21#s`l|$P|b&Qglp1NUpU7D#eRhNyGQ)s>$G~9;gG&WNv|cFcn)Y!Mn9FEA#dUtcZLKboTKcK&?|v2T&;+X)IQ|KD_Au%hj%fvB*S=FQu~7uYAdmf=Pb-wgsb)E zx5D3*`0aRry@^mCuHDMLu8b0@*9b;q6H-o%9y!(4dB%{~&#NC(x*qQyQ}&0zs;V!e zLW7upw#l!jMno;vti96GcG}1J43PcAl;+_5t+%V+!r7{NZzq@#R|iY9-QR(%hE9ur z3?_OHSs!za)i;D{O(H0wD<`)1ypJ$VTIvVx`kt4>4A-nOO~u2|XbfNJeHEyCv5duD z(9k=_`Hyp349@3_!2hr3>4v-BeQQ%Z$m%l5euKVprWsrJIx}qJ!wQ7Bm@!y6;OWT6R30Kz(DYMb*Brhp$idt^&$1pO`w;tquKR%HbY@jx1n@OWST z2)BCo0y@mn!ze@l86I$rV5Kr)K8n5j(sa=7p>LxgDZ)r*@@r1ezy^~6WxT%-lUi?! pNr&gCFw>;H*9>ACeP*V)9y3W%bQgTV1GQ^;hi*H=mDrYvKLE#@qE!F@ delta 1680 zcmZvdeN0nV7{)J`+XAgc5YX7TDzudrO`KArY>0}{v1t@ES&V$>04*Y1i$ZYdjAWCq zP>Q^wQ?zb=V5lhIol!I;vbi}ED=r!~!-oE$7*VP&XmA8v-`f=4yR845=Kjv}yyv|4 zIpF5_6z#Jhxn>?TV7i9wPa zcPt(pTQ)?DOO)9Nw$8p%^)t8&bi^zm5y?G$Ss|pDwG_w@I5b@@s4xQoMm2)kPD=vJ z$)Q%NlL)wn`rjaaC$*A^%c}2C+rchT$i7F#zMB_=;haP<@eG0&w+v2DZQVeM%Z3ne za~s+rxscZ290>aIQ!G#}1?vz9w}x%dApz>62-2d0_rZ+ZI#PpcL(rBIrh5aOE}LKri*^fHF_bbKoU&_i^TuU*>I>d z>xA|lb7iC)y9}vw+PO?&wD=h}PD0*@tw?_Udb=>ZhozBb`cV`4wBb2~?xmXwsz<;k zhQAh)_Nx62CyXO?itZsd|6pSJq)ma(7{+hi*pg=}p5W}zoUUz9Rf;ygy)aG$evSJF zp|ccUwhyom5G?3Qw}9`Ch!mr$b!{KiLa~w=at{UfHj>c zn3V`FS`R*gj2cNA#g1EUeC-5R4OPfnQK8fDS0TYBQHYzlJ3XWa&fDm!Cagt8cFFz6 z@IfuLQfxvn6#df$sHvq2#RLQk9}ds-oL~y@F~cP8co_lw0Se^eb$l}C@*wm|fHEEx zw$$sH!s@z@X_%F#kaSGGpC=p#2PKm}LSkhz4?}7_y^KPY2&(K)3IxAHY#0eBGyZ{? s($pg-9gfwa=KYZ*Bgk9nnbC;HEVt!oEG&`$gIM0)7*in>wtgc27s{#9VgLXD diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin index 109ba2fdbf52f9323d6d772f9d6060ebcfa2c422..b46d640b1ec336738fd6c3c4e9a124d07b9f52c4 100644 GIT binary patch delta 859 zcmZvXdq`A47{%wCd+**2)b8eHyXkH>HSIy^_CiU@wU&&uwn+aF(n<^^!W1FHM=oXd zpjdaRu@@$}nuJ?%q$q;4^=^M<184Yg&Y78Sx?jlMFJx!f z4zd~{^wB4Tuz23L4XF(I79W4`vyg(2fma##L?R^Ts;ps`5sEzF@4Wee&>XkQTw$Y+ z8zwk;L%ejod~^mmY%oYintt^yx+fg+A8^HzYlaFX*%$}X4X>1~EjjzipEwhg;+ct{ z^oQC(8t%=AIes9!)*tP?Kn$k%sRPqfOFBv)sUEI(lWnHiQ#Zc)YV8UOP(3u}Qi@IU zfV7%FOJ;p$ zL+-~UFGArxMN4)OIa1HR*FWB)Le#YFHpL2qA&MO$0u_65kXLfoe9IrdQ)vr%k`WMm zI=6_yMo|mAD|1d8Jy!$0Y%PX;#gl5Zpc)!!pv39b+!T(bd3V{6Q>jVSOB|S!=)H?k|l}EjCJU*J{*ra zF=LIE&`n`Doyrz4vqY`%mg9Gi=Ab#Fl?A;Xp zEvEhLqQn-)axEN-S?QpWtqYJN_#jH;?gB*>0#eJvy*K;~n7bFaE ze8t18Y6?1`?{pWIs{%a&3-o9@2AO@SIR8Hb*QJU{bWau-sBd5+`)v~~8ve=|yqR?# S#hJjq^lMfDTh}0#R{jBBy(1q0 delta 658 zcmX?lUE%0;g$XiAlMEOb7=;-?fN_EikoW>-GqKNMU|@O@x9pwb6svsyDUFsMgE*qu9I?A}-3*f!RE5*KKQKZJ-wCZ z4}+!Hwy)ScLpp+SGKZ`o|D}r-Zc%&oK=d3_nd~8}xVceQfssFZV}0&SPj83~tUi-x z$o-hSLOx-#g+e0#v(^3vJ7>Oy$mJVuo}h4(iNCtFf8G9c0f^va=gA4mdsu3tojy!f zP!VBCJRSZ7%s8%h_T6Sj#=Byh0~nQgHwSp|?GR`RzrcKN*SP~t$7*zCx9pPK&gjq1 z!N~GS=!?Yk*)tf=Zg*#5tgOILHob5n++OjG`7$TV@Acwarwit=M^B%_%)FIFR>$nnbj6!YS=%Qx funMwG=Rd?G*v`9-bvy4mw!L?uR(LIAuWkhZ2dUlm diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin index be41bbc990bd17f4162e68746390623b4730752c..1519b1c35830b2f0841bff928278960d7ee0e064 100644 GIT binary patch delta 31 mcmZ3rfN|9V#tm)00{4y;xvp2bx{(10=FVPzZ1XhVDNF$0j}5H= delta 31 mcmZ3rfN|9V#tm)00+sGb6T{nHyD$JjZNgIC&C`6RFaZF?;tQkz diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin index 126c5d72588a227016bbecb071c030efef2bda20..e0df31cde013e64124b637abc82d67494e722933 100644 GIT binary patch delta 245 zcmX?bgZaP><_&R~f|opxX3TAzQE;G6tfcbGYSFEeA0CmP+?V-&b6ln!69)qjtXQ4Z zJlXN3$>fG!_Rart{DlQS>fKtQbVPyc^_6|ICYt%FZvtzoZK&Do+YrGB*0gGOVAkfy zrtPW%zJIEAvKVup{M|hNitME~3pOjPILf&B!BtVl&3c;+7&i;7Fkxn7oV+3S>1M4p zQ07aO)tZ&@XN(ybI7NY&7lfHN&OF?7BJhZ;oD=JRqwqf$_ke8OymnVRBjb$8hC78P h=k4SN(wdta_AoMTF5SYx26jn@!L((YJNIta0{}GfXR!bP delta 218 zcmX?bgZaP><_&R~n`^V|m;`f5t+&03e(+6F(WtsJqB&;kKVGqd0&1-kvU}8D#>~ef_ I=icpl08_JJhX4Qo diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 7e87f86..04dfec2 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -105,7 +105,7 @@ function onConfirmStopMon(buttonIndex) { function pausedPrompt() { pauseMonitoring(); navigator.notification.alert( - 'Monitoring has been paused, click OK when you wish to resume!', // message + 'Monitoring has been paused, click OK when you wish to resume.', // message resumeMonitoring, // callback 'Monitoring Paused', // title 'OK' // buttonName From 07538e7c1546c0a8d28870134ed5a1f1019f8a12 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Thu, 3 Mar 2016 18:36:52 +0000 Subject: [PATCH 11/20] updated cordova --- .../2.2.1/taskArtifacts/cache.properties | 2 +- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 46779 -> 45089 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 535493 -> 184203 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 20522 -> 20942 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 60480 -> 49329 bytes platforms/android/AndroidManifest.xml | 8 +- platforms/android/CordovaLib/build.gradle | 25 +- .../debug/org/apache/cordova/BuildConfig.java | 2 +- .../org/apache/cordova/BuildConfig.java | 2 +- .../bundles/debug/aapt/AndroidManifest.xml | 27 + .../intermediates/bundles/debug/classes.jar | Bin 119439 -> 124206 bytes .../bundles/release/aapt/AndroidManifest.xml | 27 + .../intermediates/bundles/release/classes.jar | Bin 119362 -> 124130 bytes .../org/apache/cordova/BuildConfig.class | Bin 702 -> 711 bytes .../org/apache/cordova/CallbackContext.class | Bin 3324 -> 3324 bytes .../apache/cordova/CordovaActivity$1.class | Bin 943 -> 943 bytes .../apache/cordova/CordovaActivity$2.class | Bin 1019 -> 1019 bytes .../apache/cordova/CordovaActivity$3.class | Bin 1522 -> 1522 bytes .../apache/cordova/CordovaActivity$4$1.class | Bin 1090 -> 1090 bytes .../apache/cordova/CordovaActivity$4.class | Bin 2012 -> 2012 bytes .../org/apache/cordova/CordovaActivity.class | Bin 11153 -> 11638 bytes .../org/apache/cordova/CordovaInterface.class | Bin 501 -> 725 bytes ...vaInterfaceImpl$ActivityResultHolder.class | Bin 1064 -> 1064 bytes .../apache/cordova/CordovaInterfaceImpl.class | Bin 4634 -> 7378 bytes .../org/apache/cordova/CordovaPlugin.class | Bin 6188 -> 6873 bytes .../org/apache/cordova/CordovaWebView.class | Bin 2239 -> 2239 bytes .../CordovaWebViewImpl$EngineClient$1$1.class | Bin 1256 -> 1256 bytes .../CordovaWebViewImpl$EngineClient$1.class | Bin 1482 -> 1482 bytes .../CordovaWebViewImpl$EngineClient.class | Bin 4953 -> 4953 bytes .../apache/cordova/CordovaWebViewImpl.class | Bin 16103 -> 16111 bytes .../org/apache/cordova/CoreAndroid$1.class | Bin 1027 -> 1027 bytes .../org/apache/cordova/CoreAndroid$2.class | Bin 748 -> 748 bytes .../org/apache/cordova/CoreAndroid$3.class | Bin 737 -> 737 bytes .../org/apache/cordova/CoreAndroid$4.class | Bin 748 -> 748 bytes .../org/apache/cordova/CoreAndroid$5.class | Bin 1988 -> 1988 bytes .../org/apache/cordova/CoreAndroid.class | Bin 7767 -> 8259 bytes .../org/apache/cordova/PluginManager.class | Bin 11933 -> 12391 bytes .../org/apache/cordova/ResumeCallback.class | Bin 0 -> 2995 bytes .../cordova/engine/SystemCookieManager.class | Bin 1706 -> 1791 bytes .../engine/SystemWebChromeClient$1.class | Bin 1202 -> 1202 bytes .../engine/SystemWebChromeClient$2.class | Bin 1204 -> 1204 bytes .../engine/SystemWebChromeClient$3.class | Bin 1270 -> 1270 bytes .../engine/SystemWebChromeClient$4.class | Bin 1702 -> 1702 bytes .../engine/SystemWebChromeClient$5.class | Bin 1782 -> 1782 bytes .../engine/SystemWebChromeClient.class | Bin 10527 -> 11016 bytes .../cordova/engine/SystemWebViewEngine.class | Bin 11394 -> 11406 bytes .../org/apache/cordova/BuildConfig.class | Bin 567 -> 576 bytes .../org/apache/cordova/CallbackContext.class | Bin 3324 -> 3324 bytes .../apache/cordova/CordovaActivity$1.class | Bin 943 -> 943 bytes .../apache/cordova/CordovaActivity$2.class | Bin 1019 -> 1019 bytes .../apache/cordova/CordovaActivity$3.class | Bin 1522 -> 1522 bytes .../apache/cordova/CordovaActivity$4$1.class | Bin 1090 -> 1090 bytes .../apache/cordova/CordovaActivity$4.class | Bin 2012 -> 2012 bytes .../org/apache/cordova/CordovaActivity.class | Bin 11153 -> 11638 bytes .../org/apache/cordova/CordovaInterface.class | Bin 501 -> 725 bytes ...vaInterfaceImpl$ActivityResultHolder.class | Bin 1064 -> 1064 bytes .../apache/cordova/CordovaInterfaceImpl.class | Bin 4634 -> 7378 bytes .../org/apache/cordova/CordovaPlugin.class | Bin 6188 -> 6873 bytes .../org/apache/cordova/CordovaWebView.class | Bin 2239 -> 2239 bytes .../CordovaWebViewImpl$EngineClient$1$1.class | Bin 1256 -> 1256 bytes .../CordovaWebViewImpl$EngineClient$1.class | Bin 1482 -> 1482 bytes .../CordovaWebViewImpl$EngineClient.class | Bin 4953 -> 4953 bytes .../apache/cordova/CordovaWebViewImpl.class | Bin 16103 -> 16111 bytes .../org/apache/cordova/CoreAndroid$1.class | Bin 1027 -> 1027 bytes .../org/apache/cordova/CoreAndroid$2.class | Bin 748 -> 748 bytes .../org/apache/cordova/CoreAndroid$3.class | Bin 737 -> 737 bytes .../org/apache/cordova/CoreAndroid$4.class | Bin 748 -> 748 bytes .../org/apache/cordova/CoreAndroid$5.class | Bin 1988 -> 1988 bytes .../org/apache/cordova/CoreAndroid.class | Bin 7767 -> 8259 bytes .../org/apache/cordova/PluginManager.class | Bin 11933 -> 12391 bytes .../org/apache/cordova/ResumeCallback.class | Bin 0 -> 2995 bytes .../cordova/engine/SystemCookieManager.class | Bin 1706 -> 1791 bytes .../engine/SystemWebChromeClient$1.class | Bin 1202 -> 1202 bytes .../engine/SystemWebChromeClient$2.class | Bin 1204 -> 1204 bytes .../engine/SystemWebChromeClient$3.class | Bin 1270 -> 1270 bytes .../engine/SystemWebChromeClient$4.class | Bin 1702 -> 1702 bytes .../engine/SystemWebChromeClient$5.class | Bin 1782 -> 1782 bytes .../engine/SystemWebChromeClient.class | Bin 10527 -> 11016 bytes .../cordova/engine/SystemWebViewEngine.class | Bin 11394 -> 11406 bytes .../dependency.store | Bin .../dependency.store | Bin .../debug => mergeDebugAssets}/merger.xml | 0 .../mergeDebugJniLibFolders/merger.xml | 2 + .../release => mergeReleaseAssets}/merger.xml | 0 .../mergeReleaseJniLibFolders/merger.xml | 2 + .../packageDebugResources/merger.xml | 2 + .../packageReleaseResources/merger.xml | 2 + .../packageResources/debug/merger.xml | 2 - .../packageResources/release/merger.xml | 2 - .../build/outputs/aar/CordovaLib-debug.aar | Bin 109961 -> 114750 bytes .../build/outputs/aar/CordovaLib-release.aar | Bin 109885 -> 114676 bytes .../build/tmp/packageDebugJar/MANIFEST.MF | 2 - .../build/tmp/packageReleaseJar/MANIFEST.MF | 2 - platforms/android/CordovaLib/cordova.gradle | 9 + .../android/CordovaLib/project.properties | 2 +- .../org/apache/cordova/CallbackContext.java | 2 +- .../org/apache/cordova/CordovaActivity.java | 91 +- .../org/apache/cordova/CordovaInterface.java | 16 + .../apache/cordova/CordovaInterfaceImpl.java | 83 +- .../src/org/apache/cordova/CordovaPlugin.java | 70 +- .../org/apache/cordova/CordovaWebView.java | 2 +- .../apache/cordova/CordovaWebViewEngine.java | 2 +- .../apache/cordova/CordovaWebViewImpl.java | 6 +- .../src/org/apache/cordova/CoreAndroid.java | 45 +- .../src/org/apache/cordova/PluginManager.java | 16 + .../org/apache/cordova/ResumeCallback.java | 76 + .../cordova/engine/SystemCookieManager.java | 3 + .../cordova/engine/SystemWebChromeClient.java | 14 +- .../cordova/engine/SystemWebViewEngine.java | 2 +- platforms/android/android.json | 121 +- .../assets/www/cordova-js-src/platform.js | 36 +- platforms/android/assets/www/cordova.js | 206 +- .../android/assets/www/cordova_plugins.js | 75 +- .../www/powermanagement.js | 3 +- .../com.lampa.startapp/www/startApp.js | 3 +- .../www/micVolume.js | 3 +- .../www/background-mode.js | 3 +- .../www/Acceleration.js | 3 +- .../www/accelerometer.js | 3 +- .../cordova-plugin-device/www/device.js | 3 +- .../www/android/notification.js | 3 +- .../www/notification.js | 3 +- .../cordova-plugin-whitelist/whitelist.js | 3 +- .../www/local-notification-core.js | 3 +- .../www/local-notification-util.js | 3 +- .../www/local-notification.js | 3 +- platforms/android/build.gradle | 28 +- platforms/android/cordova/.jshintrc | 10 + platforms/android/cordova/Api.js | 504 + platforms/android/cordova/build | 43 +- platforms/android/cordova/clean | 24 +- platforms/android/cordova/lib/Adb.js | 96 + .../android/cordova/lib/AndroidManifest.js | 161 + .../android/cordova/lib/AndroidProject.js | 184 + .../android/cordova/lib/ConsoleLogger.js | 75 + platforms/android/cordova/lib/appinfo.js | 41 - platforms/android/cordova/lib/build.js | 599 +- .../cordova/lib/builders/AntBuilder.js | 141 + .../cordova/lib/builders/GenericBuilder.js | 138 + .../cordova/lib/builders/GradleBuilder.js | 275 + .../android/cordova/lib/builders/builders.js | 47 + platforms/android/cordova/lib/check_reqs.js | 31 +- platforms/android/cordova/lib/device.js | 80 +- platforms/android/cordova/lib/emulator.js | 292 +- platforms/android/cordova/lib/exec.js | 68 - .../android/cordova/lib/pluginHandlers.js | 252 + platforms/android/cordova/lib/prepare.js | 379 + platforms/android/cordova/lib/retry.js | 6 +- platforms/android/cordova/lib/run.js | 96 +- platforms/android/cordova/lib/spawn.js | 50 - .../cordova/node_modules/abbrev/.npmignore | 4 + .../cordova/node_modules/abbrev/.travis.yml | 5 + .../node_modules/abbrev/CONTRIBUTING.md | 3 + .../cordova/node_modules/abbrev/LICENSE | 15 + .../cordova/node_modules/abbrev/README.md | 23 + .../{nopt/node_modules => }/abbrev/abbrev.js | 0 .../cordova/node_modules/abbrev/package.json | 74 + .../cordova/node_modules/abbrev/test.js | 47 + .../cordova/node_modules/ansi/.jshintrc | 4 + .../cordova/node_modules/ansi/.npmignore | 1 + .../cordova/node_modules/ansi/History.md | 23 + .../node_modules/{which => ansi}/LICENSE | 5 +- .../cordova/node_modules/ansi/README.md | 98 + .../node_modules/ansi/examples/beep/index.js | 16 + .../node_modules/ansi/examples/clear/index.js | 15 + .../ansi/examples/cursorPosition.js | 32 + .../ansi/examples/progress/index.js | 87 + .../cordova/node_modules/ansi/lib/ansi.js | 405 + .../cordova/node_modules/ansi/lib/newlines.js | 71 + .../cordova/node_modules/ansi/package.json | 85 + .../node_modules/balanced-match/.npmignore | 2 + .../node_modules/balanced-match/.travis.yml | 3 + .../node_modules/balanced-match/LICENSE.md | 21 + .../node_modules/balanced-match/Makefile | 6 + .../node_modules/balanced-match/README.md | 89 + .../node_modules/balanced-match/example.js | 5 + .../node_modules/balanced-match/index.js | 50 + .../node_modules/balanced-match/package.json | 98 + .../balanced-match/test/balanced.js | 84 + .../node_modules/base64-js/.travis.yml | 5 + .../node_modules/base64-js/LICENSE.MIT | 21 + .../cordova/node_modules/base64-js/README.md | 31 + .../node_modules/base64-js/bench/bench.js | 19 + .../cordova/node_modules/base64-js/lib/b64.js | 124 + .../node_modules/base64-js/package.json | 93 + .../node_modules/base64-js/test/convert.js | 51 + .../node_modules/base64-js/test/url-safe.js | 18 + .../node_modules/big-integer/BigInteger.js | 1189 ++ .../big-integer/BigInteger.min.js | 1 + .../node_modules/big-integer/README.md | 506 + .../node_modules/big-integer/package.json | 100 + .../node_modules/bplist-parser/.npmignore | 8 + .../node_modules/bplist-parser/README.md | 47 + .../bplist-parser/bplistParser.js | 357 + .../node_modules/bplist-parser/package.json | 81 + .../bplist-parser/test/airplay.bplist | Bin 0 -> 341 bytes .../bplist-parser/test/iTunes-small.bplist | Bin 0 -> 24433 bytes .../bplist-parser/test/int64.bplist | Bin 0 -> 84 bytes .../node_modules/bplist-parser/test/int64.xml | 10 + .../bplist-parser/test/parseTest.js | 159 + .../bplist-parser/test/sample1.bplist | Bin 0 -> 605 bytes .../bplist-parser/test/sample2.bplist | Bin 0 -> 384 bytes .../bplist-parser/test/uid.bplist | Bin 0 -> 365 bytes .../bplist-parser/test/utf16.bplist | Bin 0 -> 1273 bytes .../bplist-parser/test/utf16_chinese.plist | Bin 0 -> 2362 bytes .../node_modules/brace-expansion/.npmignore | 3 + .../node_modules/brace-expansion/README.md | 122 + .../node_modules/brace-expansion/example.js | 8 + .../node_modules/brace-expansion/index.js | 191 + .../node_modules/brace-expansion/package.json | 104 + .../node_modules/concat-map/.travis.yml | 4 + .../cordova/node_modules/concat-map/LICENSE | 18 + .../node_modules/concat-map/README.markdown | 62 + .../node_modules/concat-map/example/map.js | 6 + .../cordova/node_modules/concat-map/index.js | 13 + .../node_modules/concat-map/package.json | 109 + .../node_modules/concat-map/test/map.js | 39 + .../node_modules/cordova-common/.jscs.json | 24 + .../node_modules/cordova-common/.jshintignore | 1 + .../node_modules/cordova-common/.npmignore | 2 + .../node_modules/cordova-common/.ratignore | 2 + .../node_modules/cordova-common/README.md | 153 + .../cordova-common/RELEASENOTES.md | 42 + .../cordova-common/cordova-common.js | 43 + .../node_modules/cordova-common/package.json | 119 + .../node_modules/cordova-common/src/.jshintrc | 10 + .../cordova-common/src/ActionStack.js | 85 + .../src/ConfigChanges/ConfigChanges.js | 323 + .../src/ConfigChanges/ConfigFile.js | 208 + .../src/ConfigChanges/ConfigKeeper.js | 65 + .../src/ConfigChanges/munge-util.js | 160 + .../src/ConfigParser/ConfigParser.js | 499 + .../cordova-common/src/ConfigParser/README.md | 86 + .../src/CordovaError/CordovaError.js | 91 + .../CordovaExternalToolErrorContext.js | 48 + .../cordova-common/src/CordovaLogger.js | 203 + .../cordova-common/src/PlatformJson.js | 155 + .../src/PluginInfo/PluginInfo.js | 410 + .../src/PluginInfo/PluginInfoProvider.js | 82 + .../node_modules/cordova-common/src/events.js | 65 + .../cordova-common/src/superspawn.js | 184 + .../cordova-common/src/util/plist-helpers.js | 101 + .../cordova-common/src/util/xml-helpers.js | 266 + .../cordova-registry-mapper/.npmignore | 1 + .../cordova-registry-mapper/.travis.yml | 7 + .../cordova-registry-mapper/README.md | 14 + .../cordova-registry-mapper/index.js | 204 + .../cordova-registry-mapper/package.json | 77 + .../cordova-registry-mapper/tests/test.js | 11 + .../node_modules/elementtree/.npmignore | 1 + .../node_modules/elementtree/.travis.yml | 10 + .../node_modules/elementtree/CHANGES.md | 39 + .../node_modules/elementtree/LICENSE.txt | 203 + .../cordova/node_modules/elementtree/Makefile | 21 + .../cordova/node_modules/elementtree/NOTICE | 5 + .../node_modules/elementtree/README.md | 141 + .../node_modules/elementtree/lib/constants.js | 20 + .../elementtree/lib/elementpath.js | 343 + .../elementtree/lib/elementtree.js | 611 + .../node_modules/elementtree/lib/errors.js | 31 + .../node_modules/elementtree/lib/parser.js | 33 + .../elementtree/lib/parsers/index.js | 1 + .../elementtree/lib/parsers/sax.js | 56 + .../node_modules/elementtree/lib/sprintf.js | 86 + .../elementtree/lib/treebuilder.js | 60 + .../node_modules/elementtree/lib/utils.js | 72 + .../node_modules/elementtree/package.json | 101 + .../elementtree/tests/data/xml1.xml | 17 + .../elementtree/tests/data/xml2.xml | 14 + .../elementtree/tests/test-simple.js | 339 + .../android/cordova/node_modules/glob/LICENSE | 15 + .../cordova/node_modules/glob/README.md | 377 + .../cordova/node_modules/glob/common.js | 245 + .../android/cordova/node_modules/glob/glob.js | 752 + .../cordova/node_modules/glob/package.json | 98 + .../android/cordova/node_modules/glob/sync.js | 460 + .../cordova/node_modules/inflight/.eslintrc | 17 + .../cordova/node_modules/inflight/LICENSE | 15 + .../cordova/node_modules/inflight/README.md | 37 + .../cordova/node_modules/inflight/inflight.js | 44 + .../node_modules/inflight/package.json | 86 + .../cordova/node_modules/inflight/test.js | 97 + .../cordova/node_modules/inherits/LICENSE | 16 + .../cordova/node_modules/inherits/README.md | 42 + .../cordova/node_modules/inherits/inherits.js | 1 + .../node_modules/inherits/inherits_browser.js | 23 + .../node_modules/inherits/package.json | 77 + .../cordova/node_modules/inherits/test.js | 25 + .../cordova/node_modules/lodash/LICENSE | 22 + .../cordova/node_modules/lodash/README.md | 121 + .../cordova/node_modules/lodash/array.js | 44 + .../node_modules/lodash/array/chunk.js | 46 + .../node_modules/lodash/array/compact.js | 30 + .../node_modules/lodash/array/difference.js | 29 + .../cordova/node_modules/lodash/array/drop.js | 39 + .../node_modules/lodash/array/dropRight.js | 40 + .../lodash/array/dropRightWhile.js | 59 + .../node_modules/lodash/array/dropWhile.js | 59 + .../cordova/node_modules/lodash/array/fill.js | 44 + .../node_modules/lodash/array/findIndex.js | 53 + .../lodash/array/findLastIndex.js | 53 + .../node_modules/lodash/array/first.js | 22 + .../node_modules/lodash/array/flatten.js | 32 + .../node_modules/lodash/array/flattenDeep.js | 21 + .../cordova/node_modules/lodash/array/head.js | 1 + .../node_modules/lodash/array/indexOf.js | 53 + .../node_modules/lodash/array/initial.js | 20 + .../node_modules/lodash/array/intersection.js | 58 + .../cordova/node_modules/lodash/array/last.js | 19 + .../node_modules/lodash/array/lastIndexOf.js | 60 + .../node_modules/lodash/array/object.js | 1 + .../cordova/node_modules/lodash/array/pull.js | 52 + .../node_modules/lodash/array/pullAt.js | 40 + .../node_modules/lodash/array/remove.js | 64 + .../cordova/node_modules/lodash/array/rest.js | 21 + .../node_modules/lodash/array/slice.js | 30 + .../node_modules/lodash/array/sortedIndex.js | 53 + .../lodash/array/sortedLastIndex.js | 25 + .../cordova/node_modules/lodash/array/tail.js | 1 + .../cordova/node_modules/lodash/array/take.js | 39 + .../node_modules/lodash/array/takeRight.js | 40 + .../lodash/array/takeRightWhile.js | 59 + .../node_modules/lodash/array/takeWhile.js | 59 + .../node_modules/lodash/array/union.js | 24 + .../cordova/node_modules/lodash/array/uniq.js | 71 + .../node_modules/lodash/array/unique.js | 1 + .../node_modules/lodash/array/unzip.js | 47 + .../node_modules/lodash/array/unzipWith.js | 41 + .../node_modules/lodash/array/without.js | 27 + .../cordova/node_modules/lodash/array/xor.js | 35 + .../cordova/node_modules/lodash/array/zip.js | 21 + .../node_modules/lodash/array/zipObject.js | 43 + .../node_modules/lodash/array/zipWith.js | 36 + .../cordova/node_modules/lodash/chain.js | 16 + .../node_modules/lodash/chain/chain.js | 35 + .../node_modules/lodash/chain/commit.js | 1 + .../node_modules/lodash/chain/concat.js | 1 + .../node_modules/lodash/chain/lodash.js | 125 + .../node_modules/lodash/chain/plant.js | 1 + .../node_modules/lodash/chain/reverse.js | 1 + .../cordova/node_modules/lodash/chain/run.js | 1 + .../cordova/node_modules/lodash/chain/tap.js | 29 + .../cordova/node_modules/lodash/chain/thru.js | 26 + .../node_modules/lodash/chain/toJSON.js | 1 + .../node_modules/lodash/chain/toString.js | 1 + .../node_modules/lodash/chain/value.js | 1 + .../node_modules/lodash/chain/valueOf.js | 1 + .../node_modules/lodash/chain/wrapperChain.js | 32 + .../lodash/chain/wrapperCommit.js | 32 + .../lodash/chain/wrapperConcat.js | 34 + .../node_modules/lodash/chain/wrapperPlant.js | 45 + .../lodash/chain/wrapperReverse.js | 43 + .../lodash/chain/wrapperToString.js | 17 + .../node_modules/lodash/chain/wrapperValue.js | 20 + .../cordova/node_modules/lodash/collection.js | 44 + .../node_modules/lodash/collection/all.js | 1 + .../node_modules/lodash/collection/any.js | 1 + .../node_modules/lodash/collection/at.js | 29 + .../node_modules/lodash/collection/collect.js | 1 + .../lodash/collection/contains.js | 1 + .../node_modules/lodash/collection/countBy.js | 54 + .../node_modules/lodash/collection/detect.js | 1 + .../node_modules/lodash/collection/each.js | 1 + .../lodash/collection/eachRight.js | 1 + .../node_modules/lodash/collection/every.js | 66 + .../node_modules/lodash/collection/filter.js | 61 + .../node_modules/lodash/collection/find.js | 56 + .../lodash/collection/findLast.js | 25 + .../lodash/collection/findWhere.js | 37 + .../node_modules/lodash/collection/foldl.js | 1 + .../node_modules/lodash/collection/foldr.js | 1 + .../node_modules/lodash/collection/forEach.js | 37 + .../lodash/collection/forEachRight.js | 26 + .../node_modules/lodash/collection/groupBy.js | 59 + .../node_modules/lodash/collection/include.js | 1 + .../lodash/collection/includes.js | 57 + .../node_modules/lodash/collection/indexBy.js | 53 + .../node_modules/lodash/collection/inject.js | 1 + .../node_modules/lodash/collection/invoke.js | 42 + .../node_modules/lodash/collection/map.js | 68 + .../node_modules/lodash/collection/max.js | 1 + .../node_modules/lodash/collection/min.js | 1 + .../lodash/collection/partition.js | 66 + .../node_modules/lodash/collection/pluck.js | 31 + .../node_modules/lodash/collection/reduce.js | 44 + .../lodash/collection/reduceRight.js | 29 + .../node_modules/lodash/collection/reject.js | 50 + .../node_modules/lodash/collection/sample.js | 50 + .../node_modules/lodash/collection/select.js | 1 + .../node_modules/lodash/collection/shuffle.js | 24 + .../node_modules/lodash/collection/size.js | 30 + .../node_modules/lodash/collection/some.js | 67 + .../node_modules/lodash/collection/sortBy.js | 71 + .../lodash/collection/sortByAll.js | 52 + .../lodash/collection/sortByOrder.js | 55 + .../node_modules/lodash/collection/sum.js | 1 + .../node_modules/lodash/collection/where.js | 37 + .../cordova/node_modules/lodash/date.js | 3 + .../cordova/node_modules/lodash/date/now.js | 24 + .../cordova/node_modules/lodash/function.js | 28 + .../node_modules/lodash/function/after.js | 48 + .../node_modules/lodash/function/ary.js | 34 + .../node_modules/lodash/function/backflow.js | 1 + .../node_modules/lodash/function/before.js | 42 + .../node_modules/lodash/function/bind.js | 56 + .../node_modules/lodash/function/bindAll.js | 50 + .../node_modules/lodash/function/bindKey.js | 66 + .../node_modules/lodash/function/compose.js | 1 + .../node_modules/lodash/function/curry.js | 51 + .../lodash/function/curryRight.js | 48 + .../node_modules/lodash/function/debounce.js | 181 + .../node_modules/lodash/function/defer.js | 25 + .../node_modules/lodash/function/delay.js | 26 + .../node_modules/lodash/function/flow.js | 25 + .../node_modules/lodash/function/flowRight.js | 25 + .../node_modules/lodash/function/memoize.js | 80 + .../node_modules/lodash/function/modArgs.js | 58 + .../node_modules/lodash/function/negate.js | 32 + .../node_modules/lodash/function/once.js | 24 + .../node_modules/lodash/function/partial.js | 43 + .../lodash/function/partialRight.js | 42 + .../node_modules/lodash/function/rearg.js | 40 + .../node_modules/lodash/function/restParam.js | 58 + .../node_modules/lodash/function/spread.js | 44 + .../node_modules/lodash/function/throttle.js | 62 + .../node_modules/lodash/function/wrap.js | 33 + .../cordova/node_modules/lodash/index.js | 12351 ++++++++++++++++ .../lodash/internal/LazyWrapper.js | 26 + .../lodash/internal/LodashWrapper.js | 21 + .../node_modules/lodash/internal/MapCache.js | 24 + .../node_modules/lodash/internal/SetCache.js | 29 + .../lodash/internal/arrayConcat.js | 25 + .../node_modules/lodash/internal/arrayCopy.js | 20 + .../node_modules/lodash/internal/arrayEach.js | 22 + .../lodash/internal/arrayEachRight.js | 21 + .../lodash/internal/arrayEvery.js | 23 + .../lodash/internal/arrayExtremum.js | 30 + .../lodash/internal/arrayFilter.js | 25 + .../node_modules/lodash/internal/arrayMap.js | 21 + .../node_modules/lodash/internal/arrayPush.js | 20 + .../lodash/internal/arrayReduce.js | 26 + .../lodash/internal/arrayReduceRight.js | 24 + .../node_modules/lodash/internal/arraySome.js | 23 + .../node_modules/lodash/internal/arraySum.js | 20 + .../lodash/internal/assignDefaults.js | 13 + .../lodash/internal/assignOwnDefaults.js | 26 + .../lodash/internal/assignWith.js | 32 + .../lodash/internal/baseAssign.js | 19 + .../node_modules/lodash/internal/baseAt.js | 32 + .../lodash/internal/baseCallback.js | 35 + .../node_modules/lodash/internal/baseClone.js | 128 + .../lodash/internal/baseCompareAscending.js | 34 + .../node_modules/lodash/internal/baseCopy.js | 23 + .../lodash/internal/baseCreate.js | 23 + .../node_modules/lodash/internal/baseDelay.js | 21 + .../lodash/internal/baseDifference.js | 55 + .../node_modules/lodash/internal/baseEach.js | 15 + .../lodash/internal/baseEachRight.js | 15 + .../node_modules/lodash/internal/baseEvery.js | 22 + .../lodash/internal/baseExtremum.js | 29 + .../node_modules/lodash/internal/baseFill.js | 31 + .../lodash/internal/baseFilter.js | 22 + .../node_modules/lodash/internal/baseFind.js | 25 + .../lodash/internal/baseFindIndex.js | 23 + .../lodash/internal/baseFlatten.js | 41 + .../node_modules/lodash/internal/baseFor.js | 17 + .../node_modules/lodash/internal/baseForIn.js | 17 + .../lodash/internal/baseForOwn.js | 17 + .../lodash/internal/baseForOwnRight.js | 17 + .../lodash/internal/baseForRight.js | 15 + .../lodash/internal/baseFunctions.js | 27 + .../node_modules/lodash/internal/baseGet.js | 29 + .../lodash/internal/baseIndexOf.js | 27 + .../lodash/internal/baseIsEqual.js | 28 + .../lodash/internal/baseIsEqualDeep.js | 102 + .../lodash/internal/baseIsFunction.js | 15 + .../lodash/internal/baseIsMatch.js | 52 + .../lodash/internal/baseLodash.js | 10 + .../node_modules/lodash/internal/baseMap.js | 23 + .../lodash/internal/baseMatches.js | 30 + .../lodash/internal/baseMatchesProperty.js | 45 + .../node_modules/lodash/internal/baseMerge.js | 56 + .../lodash/internal/baseMergeDeep.js | 67 + .../lodash/internal/baseProperty.js | 14 + .../lodash/internal/basePropertyDeep.js | 19 + .../lodash/internal/basePullAt.js | 30 + .../lodash/internal/baseRandom.js | 18 + .../lodash/internal/baseReduce.js | 24 + .../lodash/internal/baseSetData.js | 17 + .../node_modules/lodash/internal/baseSlice.js | 32 + .../node_modules/lodash/internal/baseSome.js | 23 + .../lodash/internal/baseSortBy.js | 21 + .../lodash/internal/baseSortByOrder.js | 31 + .../node_modules/lodash/internal/baseSum.js | 20 + .../lodash/internal/baseToString.js | 13 + .../node_modules/lodash/internal/baseUniq.js | 60 + .../lodash/internal/baseValues.js | 22 + .../node_modules/lodash/internal/baseWhile.js | 24 + .../lodash/internal/baseWrapperValue.js | 29 + .../lodash/internal/binaryIndex.js | 39 + .../lodash/internal/binaryIndexBy.js | 57 + .../lodash/internal/bindCallback.js | 39 + .../lodash/internal/bufferClone.js | 20 + .../lodash/internal/cacheIndexOf.js | 19 + .../node_modules/lodash/internal/cachePush.js | 20 + .../lodash/internal/charsLeftIndex.js | 18 + .../lodash/internal/charsRightIndex.js | 17 + .../lodash/internal/compareAscending.js | 16 + .../lodash/internal/compareMultiple.js | 44 + .../lodash/internal/composeArgs.js | 34 + .../lodash/internal/composeArgsRight.js | 36 + .../lodash/internal/createAggregator.js | 35 + .../lodash/internal/createAssigner.js | 41 + .../lodash/internal/createBaseEach.js | 31 + .../lodash/internal/createBaseFor.js | 27 + .../lodash/internal/createBindWrapper.js | 22 + .../lodash/internal/createCache.js | 21 + .../lodash/internal/createCompounder.js | 26 + .../lodash/internal/createCtorWrapper.js | 37 + .../lodash/internal/createCurry.js | 23 + .../lodash/internal/createDefaults.js | 22 + .../lodash/internal/createExtremum.js | 33 + .../lodash/internal/createFind.js | 25 + .../lodash/internal/createFindIndex.js | 21 + .../lodash/internal/createFindKey.js | 18 + .../lodash/internal/createFlow.js | 74 + .../lodash/internal/createForEach.js | 20 + .../lodash/internal/createForIn.js | 20 + .../lodash/internal/createForOwn.js | 19 + .../lodash/internal/createHybridWrapper.js | 111 + .../lodash/internal/createObjectMapper.js | 26 + .../lodash/internal/createPadDir.js | 18 + .../lodash/internal/createPadding.js | 29 + .../lodash/internal/createPartial.js | 20 + .../lodash/internal/createPartialWrapper.js | 43 + .../lodash/internal/createReduce.js | 22 + .../lodash/internal/createRound.js | 23 + .../lodash/internal/createSortedIndex.js | 20 + .../lodash/internal/createWrapper.js | 86 + .../lodash/internal/deburrLetter.js | 33 + .../lodash/internal/equalArrays.js | 51 + .../lodash/internal/equalByTag.js | 48 + .../lodash/internal/equalObjects.js | 67 + .../lodash/internal/escapeHtmlChar.js | 22 + .../lodash/internal/escapeRegExpChar.js | 38 + .../lodash/internal/escapeStringChar.js | 22 + .../node_modules/lodash/internal/getData.js | 15 + .../lodash/internal/getFuncName.js | 25 + .../node_modules/lodash/internal/getLength.js | 15 + .../lodash/internal/getMatchData.js | 21 + .../node_modules/lodash/internal/getNative.js | 16 + .../node_modules/lodash/internal/getView.js | 33 + .../lodash/internal/indexOfNaN.js | 23 + .../lodash/internal/initCloneArray.js | 26 + .../lodash/internal/initCloneByTag.js | 63 + .../lodash/internal/initCloneObject.js | 16 + .../lodash/internal/invokePath.js | 26 + .../lodash/internal/isArrayLike.js | 15 + .../node_modules/lodash/internal/isIndex.js | 24 + .../lodash/internal/isIterateeCall.js | 28 + .../node_modules/lodash/internal/isKey.js | 28 + .../lodash/internal/isLaziable.js | 27 + .../node_modules/lodash/internal/isLength.js | 20 + .../lodash/internal/isObjectLike.js | 12 + .../node_modules/lodash/internal/isSpace.js | 14 + .../lodash/internal/isStrictComparable.js | 15 + .../node_modules/lodash/internal/lazyClone.js | 23 + .../lodash/internal/lazyReverse.js | 23 + .../node_modules/lodash/internal/lazyValue.js | 72 + .../node_modules/lodash/internal/mapDelete.js | 14 + .../node_modules/lodash/internal/mapGet.js | 14 + .../node_modules/lodash/internal/mapHas.js | 20 + .../node_modules/lodash/internal/mapSet.js | 18 + .../node_modules/lodash/internal/mergeData.js | 89 + .../lodash/internal/mergeDefaults.js | 15 + .../node_modules/lodash/internal/metaMap.js | 9 + .../lodash/internal/pickByArray.js | 28 + .../lodash/internal/pickByCallback.js | 22 + .../node_modules/lodash/internal/reEscape.js | 4 + .../lodash/internal/reEvaluate.js | 4 + .../lodash/internal/reInterpolate.js | 4 + .../node_modules/lodash/internal/realNames.js | 4 + .../node_modules/lodash/internal/reorder.js | 29 + .../lodash/internal/replaceHolders.js | 28 + .../node_modules/lodash/internal/setData.js | 41 + .../node_modules/lodash/internal/shimKeys.js | 41 + .../lodash/internal/sortedUniq.js | 29 + .../lodash/internal/toIterable.js | 22 + .../node_modules/lodash/internal/toObject.js | 14 + .../node_modules/lodash/internal/toPath.js | 28 + .../lodash/internal/trimmedLeftIndex.js | 19 + .../lodash/internal/trimmedRightIndex.js | 18 + .../lodash/internal/unescapeHtmlChar.js | 22 + .../lodash/internal/wrapperClone.js | 18 + .../cordova/node_modules/lodash/lang.js | 32 + .../cordova/node_modules/lodash/lang/clone.js | 70 + .../node_modules/lodash/lang/cloneDeep.js | 55 + .../cordova/node_modules/lodash/lang/eq.js | 1 + .../cordova/node_modules/lodash/lang/gt.js | 25 + .../cordova/node_modules/lodash/lang/gte.js | 25 + .../node_modules/lodash/lang/isArguments.js | 34 + .../node_modules/lodash/lang/isArray.js | 40 + .../node_modules/lodash/lang/isBoolean.js | 35 + .../node_modules/lodash/lang/isDate.js | 35 + .../node_modules/lodash/lang/isElement.js | 24 + .../node_modules/lodash/lang/isEmpty.js | 47 + .../node_modules/lodash/lang/isEqual.js | 54 + .../node_modules/lodash/lang/isError.js | 36 + .../node_modules/lodash/lang/isFinite.js | 35 + .../node_modules/lodash/lang/isFunction.js | 38 + .../node_modules/lodash/lang/isMatch.js | 49 + .../cordova/node_modules/lodash/lang/isNaN.js | 34 + .../node_modules/lodash/lang/isNative.js | 48 + .../node_modules/lodash/lang/isNull.js | 21 + .../node_modules/lodash/lang/isNumber.js | 41 + .../node_modules/lodash/lang/isObject.js | 28 + .../node_modules/lodash/lang/isPlainObject.js | 71 + .../node_modules/lodash/lang/isRegExp.js | 35 + .../node_modules/lodash/lang/isString.js | 35 + .../node_modules/lodash/lang/isTypedArray.js | 74 + .../node_modules/lodash/lang/isUndefined.js | 21 + .../cordova/node_modules/lodash/lang/lt.js | 25 + .../cordova/node_modules/lodash/lang/lte.js | 25 + .../node_modules/lodash/lang/toArray.js | 32 + .../node_modules/lodash/lang/toPlainObject.js | 31 + .../cordova/node_modules/lodash/math.js | 9 + .../cordova/node_modules/lodash/math/add.js | 19 + .../cordova/node_modules/lodash/math/ceil.js | 25 + .../cordova/node_modules/lodash/math/floor.js | 25 + .../cordova/node_modules/lodash/math/max.js | 56 + .../cordova/node_modules/lodash/math/min.js | 56 + .../cordova/node_modules/lodash/math/round.js | 25 + .../cordova/node_modules/lodash/math/sum.js | 50 + .../cordova/node_modules/lodash/number.js | 4 + .../node_modules/lodash/number/inRange.js | 47 + .../node_modules/lodash/number/random.js | 70 + .../cordova/node_modules/lodash/object.js | 31 + .../node_modules/lodash/object/assign.js | 43 + .../node_modules/lodash/object/create.js | 47 + .../node_modules/lodash/object/defaults.js | 25 + .../lodash/object/defaultsDeep.js | 25 + .../node_modules/lodash/object/extend.js | 1 + .../node_modules/lodash/object/findKey.js | 54 + .../node_modules/lodash/object/findLastKey.js | 54 + .../node_modules/lodash/object/forIn.js | 33 + .../node_modules/lodash/object/forInRight.js | 31 + .../node_modules/lodash/object/forOwn.js | 33 + .../node_modules/lodash/object/forOwnRight.js | 31 + .../node_modules/lodash/object/functions.js | 23 + .../cordova/node_modules/lodash/object/get.js | 33 + .../cordova/node_modules/lodash/object/has.js | 57 + .../node_modules/lodash/object/invert.js | 60 + .../node_modules/lodash/object/keys.js | 45 + .../node_modules/lodash/object/keysIn.js | 64 + .../node_modules/lodash/object/mapKeys.js | 25 + .../node_modules/lodash/object/mapValues.js | 46 + .../node_modules/lodash/object/merge.js | 54 + .../node_modules/lodash/object/methods.js | 1 + .../node_modules/lodash/object/omit.js | 47 + .../node_modules/lodash/object/pairs.js | 33 + .../node_modules/lodash/object/pick.js | 42 + .../node_modules/lodash/object/result.js | 49 + .../cordova/node_modules/lodash/object/set.js | 55 + .../node_modules/lodash/object/transform.js | 61 + .../node_modules/lodash/object/values.js | 33 + .../node_modules/lodash/object/valuesIn.js | 31 + .../cordova/node_modules/lodash/package.json | 121 + .../cordova/node_modules/lodash/string.js | 25 + .../node_modules/lodash/string/camelCase.js | 27 + .../node_modules/lodash/string/capitalize.js | 21 + .../node_modules/lodash/string/deburr.js | 29 + .../node_modules/lodash/string/endsWith.js | 40 + .../node_modules/lodash/string/escape.js | 48 + .../lodash/string/escapeRegExp.js | 32 + .../node_modules/lodash/string/kebabCase.js | 26 + .../cordova/node_modules/lodash/string/pad.js | 47 + .../node_modules/lodash/string/padLeft.js | 27 + .../node_modules/lodash/string/padRight.js | 27 + .../node_modules/lodash/string/parseInt.js | 46 + .../node_modules/lodash/string/repeat.js | 47 + .../node_modules/lodash/string/snakeCase.js | 26 + .../node_modules/lodash/string/startCase.js | 26 + .../node_modules/lodash/string/startsWith.js | 36 + .../node_modules/lodash/string/template.js | 226 + .../lodash/string/templateSettings.js | 67 + .../node_modules/lodash/string/trim.js | 42 + .../node_modules/lodash/string/trimLeft.js | 36 + .../node_modules/lodash/string/trimRight.js | 36 + .../node_modules/lodash/string/trunc.js | 105 + .../node_modules/lodash/string/unescape.js | 33 + .../node_modules/lodash/string/words.js | 38 + .../cordova/node_modules/lodash/support.js | 10 + .../cordova/node_modules/lodash/utility.js | 18 + .../node_modules/lodash/utility/attempt.js | 32 + .../node_modules/lodash/utility/callback.js | 53 + .../node_modules/lodash/utility/constant.js | 23 + .../node_modules/lodash/utility/identity.js | 20 + .../node_modules/lodash/utility/iteratee.js | 1 + .../node_modules/lodash/utility/matches.js | 33 + .../lodash/utility/matchesProperty.js | 32 + .../node_modules/lodash/utility/method.js | 33 + .../node_modules/lodash/utility/methodOf.js | 32 + .../node_modules/lodash/utility/mixin.js | 82 + .../node_modules/lodash/utility/noop.js | 19 + .../node_modules/lodash/utility/property.js | 31 + .../node_modules/lodash/utility/propertyOf.js | 30 + .../node_modules/lodash/utility/range.js | 66 + .../node_modules/lodash/utility/times.js | 60 + .../node_modules/lodash/utility/uniqueId.js | 27 + .../cordova/node_modules/minimatch/LICENSE | 15 + .../cordova/node_modules/minimatch/README.md | 216 + .../node_modules/minimatch/minimatch.js | 912 ++ .../node_modules/minimatch/package.json | 85 + .../cordova/node_modules/nopt/.npmignore | 1 + .../cordova/node_modules/nopt/.travis.yml | 9 + .../android/cordova/node_modules/nopt/LICENSE | 32 +- .../cordova/node_modules/nopt/README.md | 211 + .../cordova/node_modules/nopt/bin/nopt.js | 54 + .../node_modules/nopt/examples/my-program.js | 30 + .../cordova/node_modules/nopt/lib/nopt.js | 3 +- .../nopt/node_modules/abbrev/package.json | 31 - .../cordova/node_modules/nopt/package.json | 97 +- .../cordova/node_modules/nopt/test/basic.js | 273 + .../android/cordova/node_modules/once/LICENSE | 15 + .../cordova/node_modules/once/README.md | 51 + .../android/cordova/node_modules/once/once.js | 21 + .../cordova/node_modules/once/package.json | 89 + .../cordova/node_modules/os-homedir/index.js | 24 + .../cordova/node_modules/os-homedir/license | 21 + .../node_modules/os-homedir/package.json | 96 + .../cordova/node_modules/os-homedir/readme.md | 33 + .../cordova/node_modules/os-tmpdir/index.js | 25 + .../cordova/node_modules/os-tmpdir/license | 21 + .../node_modules/os-tmpdir/package.json | 96 + .../cordova/node_modules/os-tmpdir/readme.md | 36 + .../cordova/node_modules/osenv/.npmignore | 13 + .../cordova/node_modules/osenv/.travis.yml | 9 + .../cordova/node_modules/osenv/LICENSE | 15 + .../cordova/node_modules/osenv/README.md | 63 + .../cordova/node_modules/osenv/osenv.js | 72 + .../cordova/node_modules/osenv/package.json | 101 + .../cordova/node_modules/osenv/test/unix.js | 71 + .../node_modules/osenv/test/windows.js | 74 + .../android/cordova/node_modules/osenv/x.tap | 39 + .../node_modules/path-is-absolute/index.js | 20 + .../node_modules/path-is-absolute/license | 21 + .../path-is-absolute/package.json | 97 + .../node_modules/path-is-absolute/readme.md | 51 + .../cordova/node_modules/plist/.jshintrc | 4 + .../cordova/node_modules/plist/.travis.yml | 34 + .../cordova/node_modules/plist/History.md | 122 + .../cordova/node_modules/plist/LICENSE | 24 + .../cordova/node_modules/plist/Makefile | 76 + .../cordova/node_modules/plist/README.md | 113 + .../node_modules/plist/dist/plist-build.js | 3982 +++++ .../node_modules/plist/dist/plist-parse.js | 4055 +++++ .../cordova/node_modules/plist/dist/plist.js | 7987 ++++++++++ .../plist/examples/browser/index.html | 14 + .../cordova/node_modules/plist/lib/build.js | 138 + .../cordova/node_modules/plist/lib/node.js | 49 + .../cordova/node_modules/plist/lib/parse.js | 200 + .../cordova/node_modules/plist/lib/plist.js | 23 + .../cordova/node_modules/plist/package.json | 117 + .../properties-parser/README.markdown | 48 + .../node_modules/properties-parser/index.js | 354 + .../properties-parser/package.json | 73 + .../properties-parser/play-ground.js | 17 + .../test/ReadProperties.class | Bin 0 -> 2613 bytes .../test/ReadProperties.java | 61 + .../test/test-cases-copy.properties | 16 + .../test/test-cases.properties | 18 + .../properties-parser/test/test.js | 123 + .../android/cordova/node_modules/q/CHANGES.md | 786 + .../cordova/node_modules/q/CONTRIBUTING.md | 40 - .../android/cordova/node_modules/q/LICENSE | 3 +- .../android/cordova/node_modules/q/README.md | 88 +- .../q/benchmark/compare-with-callbacks.js | 71 - .../node_modules/q/benchmark/scenarios.js | 36 - .../cordova/node_modules/q/package.json | 161 +- platforms/android/cordova/node_modules/q/q.js | 361 +- .../android/cordova/node_modules/sax/AUTHORS | 9 + .../{nopt/node_modules/abbrev => sax}/LICENSE | 0 .../cordova/node_modules/sax/README.md | 213 + .../sax/examples/big-not-pretty.xml | 8002 ++++++++++ .../node_modules/sax/examples/example.js | 41 + .../node_modules/sax/examples/get-products.js | 58 + .../node_modules/sax/examples/hello-world.js | 4 + .../node_modules/sax/examples/not-pretty.xml | 8 + .../node_modules/sax/examples/pretty-print.js | 74 + .../node_modules/sax/examples/shopping.xml | 2 + .../node_modules/sax/examples/strict.dtd | 870 ++ .../node_modules/sax/examples/switch-bench.js | 45 + .../node_modules/sax/examples/test.html | 15 + .../node_modules/sax/examples/test.xml | 1254 ++ .../cordova/node_modules/sax/lib/sax.js | 1006 ++ .../cordova/node_modules/sax/package.json | 114 + .../node_modules/sax/test/buffer-overrun.js | 25 + .../node_modules/sax/test/cdata-chunked.js | 11 + .../node_modules/sax/test/cdata-end-split.js | 15 + .../node_modules/sax/test/cdata-fake-end.js | 28 + .../node_modules/sax/test/cdata-multiple.js | 15 + .../cordova/node_modules/sax/test/cdata.js | 10 + .../cordova/node_modules/sax/test/index.js | 86 + .../cordova/node_modules/sax/test/issue-23.js | 43 + .../cordova/node_modules/sax/test/issue-30.js | 24 + .../cordova/node_modules/sax/test/issue-35.js | 15 + .../cordova/node_modules/sax/test/issue-47.js | 13 + .../cordova/node_modules/sax/test/issue-49.js | 31 + .../node_modules/sax/test/parser-position.js | 28 + .../cordova/node_modules/sax/test/script.js | 12 + .../sax/test/self-closing-child-strict.js | 40 + .../sax/test/self-closing-child.js | 40 + .../node_modules/sax/test/self-closing-tag.js | 25 + .../node_modules/sax/test/stray-ending.js | 17 + .../sax/test/trailing-non-whitespace.js | 17 + .../cordova/node_modules/sax/test/unquoted.js | 17 + .../node_modules/sax/test/xmlns-issue-41.js | 67 + .../node_modules/sax/test/xmlns-rebinding.js | 59 + .../node_modules/sax/test/xmlns-strict.js | 71 + .../node_modules/sax/test/xmlns-unbound.js | 15 + .../xmlns-xml-default-prefix-attribute.js | 35 + .../sax/test/xmlns-xml-default-prefix.js | 20 + .../sax/test/xmlns-xml-default-redefine.js | 40 + .../cordova/node_modules/semver/.npmignore | 4 + .../cordova/node_modules/semver/.travis.yml | 5 + .../cordova/node_modules/semver/LICENSE | 15 + .../cordova/node_modules/semver/README.md | 327 + .../cordova/node_modules/semver/bin/semver | 133 + .../cordova/node_modules/semver/package.json | 77 + .../cordova/node_modules/semver/range.bnf | 16 + .../cordova/node_modules/semver/semver.js | 1188 ++ .../node_modules/semver/test/big-numbers.js | 31 + .../cordova/node_modules/semver/test/clean.js | 29 + .../cordova/node_modules/semver/test/gtr.js | 173 + .../cordova/node_modules/semver/test/index.js | 698 + .../cordova/node_modules/semver/test/ltr.js | 181 + .../semver/test/major-minor-patch.js | 72 + .../cordova/node_modules/shelljs/.travis.yml | 3 +- .../cordova/node_modules/shelljs/README.md | 47 +- .../cordova/node_modules/shelljs/RELEASE.md | 9 + .../cordova/node_modules/shelljs/make.js | 19 +- .../cordova/node_modules/shelljs/package.json | 103 +- .../cordova/node_modules/shelljs/shell.js | 12 +- .../node_modules/shelljs/src/common.js | 18 +- .../cordova/node_modules/shelljs/src/cp.js | 8 +- .../cordova/node_modules/shelljs/src/exec.js | 71 +- .../cordova/node_modules/shelljs/src/ln.js | 53 + .../cordova/node_modules/shelljs/src/rm.js | 20 +- .../cordova/node_modules/shelljs/src/sed.js | 6 +- .../cordova/node_modules/shelljs/src/which.js | 14 +- .../cordova/node_modules/underscore/LICENSE | 23 + .../cordova/node_modules/underscore/README.md | 22 + .../node_modules/underscore/package.json | 96 + .../node_modules/underscore/underscore-min.js | 6 + .../underscore/underscore-min.map | 1 + .../node_modules/underscore/underscore.js | 1548 ++ .../cordova/node_modules/unorm/LICENSE.md | 42 + .../cordova/node_modules/unorm/README.md | 118 + .../cordova/node_modules/unorm/lib/unorm.js | 442 + .../cordova/node_modules/unorm/package.json | 95 + .../node_modules/util-deprecate/History.md | 16 + .../node_modules/util-deprecate/LICENSE | 24 + .../node_modules/util-deprecate/README.md | 53 + .../node_modules/util-deprecate/browser.js | 67 + .../node_modules/util-deprecate/node.js | 6 + .../node_modules/util-deprecate/package.json | 81 + .../cordova/node_modules/which/README.md | 5 - .../cordova/node_modules/which/bin/which | 14 - .../cordova/node_modules/which/package.json | 31 - .../cordova/node_modules/which/which.js | 104 - .../cordova/node_modules/wrappy/LICENSE | 15 + .../cordova/node_modules/wrappy/README.md | 36 + .../cordova/node_modules/wrappy/package.json | 78 + .../cordova/node_modules/wrappy/test/basic.js | 51 + .../cordova/node_modules/wrappy/wrappy.js | 33 + .../node_modules/xmlbuilder/.npmignore | 5 + .../cordova/node_modules/xmlbuilder/LICENSE | 21 + .../cordova/node_modules/xmlbuilder/README.md | 86 + .../xmlbuilder/lib/XMLAttribute.js | 32 + .../node_modules/xmlbuilder/lib/XMLBuilder.js | 69 + .../node_modules/xmlbuilder/lib/XMLCData.js | 49 + .../node_modules/xmlbuilder/lib/XMLComment.js | 49 + .../xmlbuilder/lib/XMLDTDAttList.js | 68 + .../xmlbuilder/lib/XMLDTDElement.js | 46 + .../xmlbuilder/lib/XMLDTDEntity.js | 84 + .../xmlbuilder/lib/XMLDTDNotation.js | 56 + .../xmlbuilder/lib/XMLDeclaration.js | 65 + .../node_modules/xmlbuilder/lib/XMLDocType.js | 188 + .../node_modules/xmlbuilder/lib/XMLElement.js | 212 + .../node_modules/xmlbuilder/lib/XMLNode.js | 331 + .../lib/XMLProcessingInstruction.js | 51 + .../node_modules/xmlbuilder/lib/XMLRaw.js | 49 + .../xmlbuilder/lib/XMLStringifier.js | 165 + .../node_modules/xmlbuilder/lib/XMLText.js | 49 + .../node_modules/xmlbuilder/lib/index.js | 14 + .../node_modules/xmlbuilder/package.json | 89 + .../cordova/node_modules/xmldom/.npmignore | 5 + .../cordova/node_modules/xmldom/.travis.yml | 22 + .../cordova/node_modules/xmldom/LICENSE | 8 + .../node_modules/xmldom/__package__.js | 4 + .../cordova/node_modules/xmldom/changelog | 14 + .../node_modules/xmldom/component.json | 10 + .../cordova/node_modules/xmldom/dom-parser.js | 249 + .../cordova/node_modules/xmldom/dom.js | 1147 ++ .../cordova/node_modules/xmldom/package.json | 127 + .../cordova/node_modules/xmldom/readme.md | 219 + .../cordova/node_modules/xmldom/sax.js | 586 + platforms/android/cordova/run | 42 +- platforms/android/cordova/version | 8 +- .../platform_www/cordova-js-src/platform.js | 36 +- platforms/android/platform_www/cordova.js | 206 +- .../android/platform_www/cordova_plugins.js | 75 +- .../www/powermanagement.js | 3 +- .../com.lampa.startapp/www/startApp.js | 3 +- .../www/micVolume.js | 3 +- .../www/background-mode.js | 3 +- .../www/Acceleration.js | 3 +- .../www/accelerometer.js | 3 +- .../cordova-plugin-device/www/device.js | 3 +- .../www/android/notification.js | 3 +- .../www/notification.js | 3 +- .../cordova-plugin-whitelist/whitelist.js | 3 +- .../www/local-notification-core.js | 3 +- .../www/local-notification-util.js | 3 +- .../www/local-notification.js | 3 +- platforms/android/project.properties | 2 +- platforms/android/res/xml/config.xml | 24 +- platforms/platforms.json | 2 +- plugins/android.json | 25 +- 930 files changed, 88220 insertions(+), 1946 deletions(-) create mode 100644 platforms/android/CordovaLib/build/intermediates/bundles/debug/aapt/AndroidManifest.xml create mode 100644 platforms/android/CordovaLib/build/intermediates/bundles/release/aapt/AndroidManifest.xml create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class create mode 100644 platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class rename platforms/android/CordovaLib/build/intermediates/incremental/{aidl/debug => compileDebugAidl}/dependency.store (100%) rename platforms/android/CordovaLib/build/intermediates/incremental/{aidl/release => compileReleaseAidl}/dependency.store (100%) rename platforms/android/CordovaLib/build/intermediates/incremental/{mergeAssets/debug => mergeDebugAssets}/merger.xml (100%) create mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml rename platforms/android/CordovaLib/build/intermediates/incremental/{mergeAssets/release => mergeReleaseAssets}/merger.xml (100%) create mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml create mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml create mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/packageResources/debug/merger.xml delete mode 100644 platforms/android/CordovaLib/build/intermediates/incremental/packageResources/release/merger.xml delete mode 100644 platforms/android/CordovaLib/build/tmp/packageDebugJar/MANIFEST.MF delete mode 100644 platforms/android/CordovaLib/build/tmp/packageReleaseJar/MANIFEST.MF create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java create mode 100644 platforms/android/cordova/.jshintrc create mode 100644 platforms/android/cordova/Api.js create mode 100644 platforms/android/cordova/lib/Adb.js create mode 100644 platforms/android/cordova/lib/AndroidManifest.js create mode 100644 platforms/android/cordova/lib/AndroidProject.js create mode 100644 platforms/android/cordova/lib/ConsoleLogger.js delete mode 100644 platforms/android/cordova/lib/appinfo.js create mode 100644 platforms/android/cordova/lib/builders/AntBuilder.js create mode 100644 platforms/android/cordova/lib/builders/GenericBuilder.js create mode 100644 platforms/android/cordova/lib/builders/GradleBuilder.js create mode 100644 platforms/android/cordova/lib/builders/builders.js delete mode 100644 platforms/android/cordova/lib/exec.js create mode 100644 platforms/android/cordova/lib/pluginHandlers.js create mode 100644 platforms/android/cordova/lib/prepare.js delete mode 100644 platforms/android/cordova/lib/spawn.js create mode 100644 platforms/android/cordova/node_modules/abbrev/.npmignore create mode 100644 platforms/android/cordova/node_modules/abbrev/.travis.yml create mode 100644 platforms/android/cordova/node_modules/abbrev/CONTRIBUTING.md create mode 100644 platforms/android/cordova/node_modules/abbrev/LICENSE create mode 100644 platforms/android/cordova/node_modules/abbrev/README.md rename platforms/android/cordova/node_modules/{nopt/node_modules => }/abbrev/abbrev.js (100%) create mode 100644 platforms/android/cordova/node_modules/abbrev/package.json create mode 100644 platforms/android/cordova/node_modules/abbrev/test.js create mode 100644 platforms/android/cordova/node_modules/ansi/.jshintrc create mode 100644 platforms/android/cordova/node_modules/ansi/.npmignore create mode 100644 platforms/android/cordova/node_modules/ansi/History.md rename platforms/android/cordova/node_modules/{which => ansi}/LICENSE (92%) create mode 100644 platforms/android/cordova/node_modules/ansi/README.md create mode 100755 platforms/android/cordova/node_modules/ansi/examples/beep/index.js create mode 100755 platforms/android/cordova/node_modules/ansi/examples/clear/index.js create mode 100755 platforms/android/cordova/node_modules/ansi/examples/cursorPosition.js create mode 100644 platforms/android/cordova/node_modules/ansi/examples/progress/index.js create mode 100644 platforms/android/cordova/node_modules/ansi/lib/ansi.js create mode 100644 platforms/android/cordova/node_modules/ansi/lib/newlines.js create mode 100644 platforms/android/cordova/node_modules/ansi/package.json create mode 100644 platforms/android/cordova/node_modules/balanced-match/.npmignore create mode 100644 platforms/android/cordova/node_modules/balanced-match/.travis.yml create mode 100644 platforms/android/cordova/node_modules/balanced-match/LICENSE.md create mode 100644 platforms/android/cordova/node_modules/balanced-match/Makefile create mode 100644 platforms/android/cordova/node_modules/balanced-match/README.md create mode 100644 platforms/android/cordova/node_modules/balanced-match/example.js create mode 100644 platforms/android/cordova/node_modules/balanced-match/index.js create mode 100644 platforms/android/cordova/node_modules/balanced-match/package.json create mode 100644 platforms/android/cordova/node_modules/balanced-match/test/balanced.js create mode 100644 platforms/android/cordova/node_modules/base64-js/.travis.yml create mode 100644 platforms/android/cordova/node_modules/base64-js/LICENSE.MIT create mode 100644 platforms/android/cordova/node_modules/base64-js/README.md create mode 100644 platforms/android/cordova/node_modules/base64-js/bench/bench.js create mode 100644 platforms/android/cordova/node_modules/base64-js/lib/b64.js create mode 100644 platforms/android/cordova/node_modules/base64-js/package.json create mode 100644 platforms/android/cordova/node_modules/base64-js/test/convert.js create mode 100644 platforms/android/cordova/node_modules/base64-js/test/url-safe.js create mode 100644 platforms/android/cordova/node_modules/big-integer/BigInteger.js create mode 100644 platforms/android/cordova/node_modules/big-integer/BigInteger.min.js create mode 100644 platforms/android/cordova/node_modules/big-integer/README.md create mode 100644 platforms/android/cordova/node_modules/big-integer/package.json create mode 100644 platforms/android/cordova/node_modules/bplist-parser/.npmignore create mode 100644 platforms/android/cordova/node_modules/bplist-parser/README.md create mode 100644 platforms/android/cordova/node_modules/bplist-parser/bplistParser.js create mode 100644 platforms/android/cordova/node_modules/bplist-parser/package.json create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/airplay.bplist create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/iTunes-small.bplist create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/int64.bplist create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/int64.xml create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/parseTest.js create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/sample1.bplist create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/sample2.bplist create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/uid.bplist create mode 100644 platforms/android/cordova/node_modules/bplist-parser/test/utf16.bplist create mode 100755 platforms/android/cordova/node_modules/bplist-parser/test/utf16_chinese.plist create mode 100644 platforms/android/cordova/node_modules/brace-expansion/.npmignore create mode 100644 platforms/android/cordova/node_modules/brace-expansion/README.md create mode 100644 platforms/android/cordova/node_modules/brace-expansion/example.js create mode 100644 platforms/android/cordova/node_modules/brace-expansion/index.js create mode 100644 platforms/android/cordova/node_modules/brace-expansion/package.json create mode 100644 platforms/android/cordova/node_modules/concat-map/.travis.yml create mode 100644 platforms/android/cordova/node_modules/concat-map/LICENSE create mode 100644 platforms/android/cordova/node_modules/concat-map/README.markdown create mode 100644 platforms/android/cordova/node_modules/concat-map/example/map.js create mode 100644 platforms/android/cordova/node_modules/concat-map/index.js create mode 100644 platforms/android/cordova/node_modules/concat-map/package.json create mode 100644 platforms/android/cordova/node_modules/concat-map/test/map.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/.jscs.json create mode 100644 platforms/android/cordova/node_modules/cordova-common/.jshintignore create mode 100644 platforms/android/cordova/node_modules/cordova-common/.npmignore create mode 100644 platforms/android/cordova/node_modules/cordova-common/.ratignore create mode 100644 platforms/android/cordova/node_modules/cordova-common/README.md create mode 100644 platforms/android/cordova/node_modules/cordova-common/RELEASENOTES.md create mode 100644 platforms/android/cordova/node_modules/cordova-common/cordova-common.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/package.json create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/.jshintrc create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/ActionStack.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/munge-util.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/ConfigParser/ConfigParser.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/ConfigParser/README.md create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/CordovaError/CordovaError.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/CordovaLogger.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/PlatformJson.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/PluginInfo/PluginInfo.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/events.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/superspawn.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/util/plist-helpers.js create mode 100644 platforms/android/cordova/node_modules/cordova-common/src/util/xml-helpers.js create mode 100644 platforms/android/cordova/node_modules/cordova-registry-mapper/.npmignore create mode 100644 platforms/android/cordova/node_modules/cordova-registry-mapper/.travis.yml create mode 100644 platforms/android/cordova/node_modules/cordova-registry-mapper/README.md create mode 100644 platforms/android/cordova/node_modules/cordova-registry-mapper/index.js create mode 100644 platforms/android/cordova/node_modules/cordova-registry-mapper/package.json create mode 100644 platforms/android/cordova/node_modules/cordova-registry-mapper/tests/test.js create mode 100644 platforms/android/cordova/node_modules/elementtree/.npmignore create mode 100644 platforms/android/cordova/node_modules/elementtree/.travis.yml create mode 100644 platforms/android/cordova/node_modules/elementtree/CHANGES.md create mode 100644 platforms/android/cordova/node_modules/elementtree/LICENSE.txt create mode 100755 platforms/android/cordova/node_modules/elementtree/Makefile create mode 100644 platforms/android/cordova/node_modules/elementtree/NOTICE create mode 100644 platforms/android/cordova/node_modules/elementtree/README.md create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/constants.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/elementpath.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/elementtree.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/errors.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/parser.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/parsers/index.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/parsers/sax.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/sprintf.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/treebuilder.js create mode 100644 platforms/android/cordova/node_modules/elementtree/lib/utils.js create mode 100644 platforms/android/cordova/node_modules/elementtree/package.json create mode 100644 platforms/android/cordova/node_modules/elementtree/tests/data/xml1.xml create mode 100644 platforms/android/cordova/node_modules/elementtree/tests/data/xml2.xml create mode 100644 platforms/android/cordova/node_modules/elementtree/tests/test-simple.js create mode 100644 platforms/android/cordova/node_modules/glob/LICENSE create mode 100644 platforms/android/cordova/node_modules/glob/README.md create mode 100644 platforms/android/cordova/node_modules/glob/common.js create mode 100644 platforms/android/cordova/node_modules/glob/glob.js create mode 100644 platforms/android/cordova/node_modules/glob/package.json create mode 100644 platforms/android/cordova/node_modules/glob/sync.js create mode 100644 platforms/android/cordova/node_modules/inflight/.eslintrc create mode 100644 platforms/android/cordova/node_modules/inflight/LICENSE create mode 100644 platforms/android/cordova/node_modules/inflight/README.md create mode 100644 platforms/android/cordova/node_modules/inflight/inflight.js create mode 100644 platforms/android/cordova/node_modules/inflight/package.json create mode 100644 platforms/android/cordova/node_modules/inflight/test.js create mode 100644 platforms/android/cordova/node_modules/inherits/LICENSE create mode 100644 platforms/android/cordova/node_modules/inherits/README.md create mode 100644 platforms/android/cordova/node_modules/inherits/inherits.js create mode 100644 platforms/android/cordova/node_modules/inherits/inherits_browser.js create mode 100644 platforms/android/cordova/node_modules/inherits/package.json create mode 100644 platforms/android/cordova/node_modules/inherits/test.js create mode 100644 platforms/android/cordova/node_modules/lodash/LICENSE create mode 100644 platforms/android/cordova/node_modules/lodash/README.md create mode 100644 platforms/android/cordova/node_modules/lodash/array.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/chunk.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/compact.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/difference.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/drop.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/dropRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/dropRightWhile.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/dropWhile.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/fill.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/findIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/findLastIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/first.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/flatten.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/flattenDeep.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/head.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/indexOf.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/initial.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/intersection.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/last.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/lastIndexOf.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/object.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/pull.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/pullAt.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/remove.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/rest.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/slice.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/sortedIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/sortedLastIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/tail.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/take.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/takeRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/takeRightWhile.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/takeWhile.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/union.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/uniq.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/unique.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/unzip.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/unzipWith.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/without.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/xor.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/zip.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/zipObject.js create mode 100644 platforms/android/cordova/node_modules/lodash/array/zipWith.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/chain.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/commit.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/concat.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/lodash.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/plant.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/reverse.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/run.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/tap.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/thru.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/toJSON.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/toString.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/value.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/valueOf.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/wrapperChain.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/wrapperCommit.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/wrapperConcat.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/wrapperPlant.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/wrapperReverse.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/wrapperToString.js create mode 100644 platforms/android/cordova/node_modules/lodash/chain/wrapperValue.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/all.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/any.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/at.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/collect.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/contains.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/countBy.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/detect.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/each.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/eachRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/every.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/filter.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/find.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/findLast.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/findWhere.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/foldl.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/foldr.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/forEach.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/forEachRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/groupBy.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/include.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/includes.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/indexBy.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/inject.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/invoke.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/map.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/max.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/min.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/partition.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/pluck.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/reduce.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/reduceRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/reject.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/sample.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/select.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/shuffle.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/size.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/some.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/sortBy.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/sortByAll.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/sortByOrder.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/sum.js create mode 100644 platforms/android/cordova/node_modules/lodash/collection/where.js create mode 100644 platforms/android/cordova/node_modules/lodash/date.js create mode 100644 platforms/android/cordova/node_modules/lodash/date/now.js create mode 100644 platforms/android/cordova/node_modules/lodash/function.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/after.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/ary.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/backflow.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/before.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/bind.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/bindAll.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/bindKey.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/compose.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/curry.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/curryRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/debounce.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/defer.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/delay.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/flow.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/flowRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/memoize.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/modArgs.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/negate.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/once.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/partial.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/partialRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/rearg.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/restParam.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/spread.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/throttle.js create mode 100644 platforms/android/cordova/node_modules/lodash/function/wrap.js create mode 100644 platforms/android/cordova/node_modules/lodash/index.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/LazyWrapper.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/LodashWrapper.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/MapCache.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/SetCache.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayConcat.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayCopy.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayEach.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayEachRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayEvery.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayExtremum.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayFilter.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayMap.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayPush.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayReduce.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arrayReduceRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arraySome.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/arraySum.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/assignDefaults.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/assignOwnDefaults.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/assignWith.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseAssign.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseAt.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseCallback.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseClone.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseCompareAscending.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseCopy.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseCreate.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseDelay.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseDifference.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseEach.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseEachRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseEvery.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseExtremum.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseFill.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseFilter.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseFind.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseFindIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseFlatten.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseFor.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseForIn.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseForOwn.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseForOwnRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseForRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseFunctions.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseGet.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseIndexOf.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseIsEqual.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseIsEqualDeep.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseIsFunction.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseIsMatch.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseLodash.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseMap.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseMatches.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseMatchesProperty.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseMerge.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseMergeDeep.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseProperty.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/basePropertyDeep.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/basePullAt.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseRandom.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseReduce.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseSetData.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseSlice.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseSome.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseSortBy.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseSortByOrder.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseSum.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseToString.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseUniq.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseValues.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseWhile.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/baseWrapperValue.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/binaryIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/binaryIndexBy.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/bindCallback.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/bufferClone.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/cacheIndexOf.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/cachePush.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/charsLeftIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/charsRightIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/compareAscending.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/compareMultiple.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/composeArgs.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/composeArgsRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createAggregator.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createAssigner.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createBaseEach.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createBaseFor.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createBindWrapper.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createCache.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createCompounder.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createCtorWrapper.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createCurry.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createDefaults.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createExtremum.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createFind.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createFindIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createFindKey.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createFlow.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createForEach.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createForIn.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createForOwn.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createHybridWrapper.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createObjectMapper.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createPadDir.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createPadding.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createPartial.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createPartialWrapper.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createReduce.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createRound.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createSortedIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/createWrapper.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/deburrLetter.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/equalArrays.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/equalByTag.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/equalObjects.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/escapeHtmlChar.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/escapeRegExpChar.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/escapeStringChar.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/getData.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/getFuncName.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/getLength.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/getMatchData.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/getNative.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/getView.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/indexOfNaN.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/initCloneArray.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/initCloneByTag.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/initCloneObject.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/invokePath.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isArrayLike.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isIterateeCall.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isKey.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isLaziable.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isLength.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isObjectLike.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isSpace.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/isStrictComparable.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/lazyClone.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/lazyReverse.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/lazyValue.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/mapDelete.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/mapGet.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/mapHas.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/mapSet.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/mergeData.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/mergeDefaults.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/metaMap.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/pickByArray.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/pickByCallback.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/reEscape.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/reEvaluate.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/reInterpolate.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/realNames.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/reorder.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/replaceHolders.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/setData.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/shimKeys.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/sortedUniq.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/toIterable.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/toObject.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/toPath.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/trimmedLeftIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/trimmedRightIndex.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/unescapeHtmlChar.js create mode 100644 platforms/android/cordova/node_modules/lodash/internal/wrapperClone.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/clone.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/cloneDeep.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/eq.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/gt.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/gte.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isArguments.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isArray.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isBoolean.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isDate.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isElement.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isEmpty.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isEqual.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isError.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isFinite.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isFunction.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isMatch.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isNaN.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isNative.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isNull.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isNumber.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isObject.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isPlainObject.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isRegExp.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isString.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isTypedArray.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/isUndefined.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/lt.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/lte.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/toArray.js create mode 100644 platforms/android/cordova/node_modules/lodash/lang/toPlainObject.js create mode 100644 platforms/android/cordova/node_modules/lodash/math.js create mode 100644 platforms/android/cordova/node_modules/lodash/math/add.js create mode 100644 platforms/android/cordova/node_modules/lodash/math/ceil.js create mode 100644 platforms/android/cordova/node_modules/lodash/math/floor.js create mode 100644 platforms/android/cordova/node_modules/lodash/math/max.js create mode 100644 platforms/android/cordova/node_modules/lodash/math/min.js create mode 100644 platforms/android/cordova/node_modules/lodash/math/round.js create mode 100644 platforms/android/cordova/node_modules/lodash/math/sum.js create mode 100644 platforms/android/cordova/node_modules/lodash/number.js create mode 100644 platforms/android/cordova/node_modules/lodash/number/inRange.js create mode 100644 platforms/android/cordova/node_modules/lodash/number/random.js create mode 100644 platforms/android/cordova/node_modules/lodash/object.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/assign.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/create.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/defaults.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/defaultsDeep.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/extend.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/findKey.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/findLastKey.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/forIn.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/forInRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/forOwn.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/forOwnRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/functions.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/get.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/has.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/invert.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/keys.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/keysIn.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/mapKeys.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/mapValues.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/merge.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/methods.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/omit.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/pairs.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/pick.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/result.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/set.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/transform.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/values.js create mode 100644 platforms/android/cordova/node_modules/lodash/object/valuesIn.js create mode 100644 platforms/android/cordova/node_modules/lodash/package.json create mode 100644 platforms/android/cordova/node_modules/lodash/string.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/camelCase.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/capitalize.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/deburr.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/endsWith.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/escape.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/escapeRegExp.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/kebabCase.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/pad.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/padLeft.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/padRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/parseInt.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/repeat.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/snakeCase.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/startCase.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/startsWith.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/template.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/templateSettings.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/trim.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/trimLeft.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/trimRight.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/trunc.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/unescape.js create mode 100644 platforms/android/cordova/node_modules/lodash/string/words.js create mode 100644 platforms/android/cordova/node_modules/lodash/support.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/attempt.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/callback.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/constant.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/identity.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/iteratee.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/matches.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/matchesProperty.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/method.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/methodOf.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/mixin.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/noop.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/property.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/propertyOf.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/range.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/times.js create mode 100644 platforms/android/cordova/node_modules/lodash/utility/uniqueId.js create mode 100644 platforms/android/cordova/node_modules/minimatch/LICENSE create mode 100644 platforms/android/cordova/node_modules/minimatch/README.md create mode 100644 platforms/android/cordova/node_modules/minimatch/minimatch.js create mode 100644 platforms/android/cordova/node_modules/minimatch/package.json create mode 100644 platforms/android/cordova/node_modules/nopt/.npmignore create mode 100644 platforms/android/cordova/node_modules/nopt/.travis.yml create mode 100644 platforms/android/cordova/node_modules/nopt/README.md create mode 100755 platforms/android/cordova/node_modules/nopt/bin/nopt.js create mode 100755 platforms/android/cordova/node_modules/nopt/examples/my-program.js delete mode 100644 platforms/android/cordova/node_modules/nopt/node_modules/abbrev/package.json create mode 100644 platforms/android/cordova/node_modules/nopt/test/basic.js create mode 100644 platforms/android/cordova/node_modules/once/LICENSE create mode 100644 platforms/android/cordova/node_modules/once/README.md create mode 100644 platforms/android/cordova/node_modules/once/once.js create mode 100644 platforms/android/cordova/node_modules/once/package.json create mode 100644 platforms/android/cordova/node_modules/os-homedir/index.js create mode 100644 platforms/android/cordova/node_modules/os-homedir/license create mode 100644 platforms/android/cordova/node_modules/os-homedir/package.json create mode 100644 platforms/android/cordova/node_modules/os-homedir/readme.md create mode 100644 platforms/android/cordova/node_modules/os-tmpdir/index.js create mode 100644 platforms/android/cordova/node_modules/os-tmpdir/license create mode 100644 platforms/android/cordova/node_modules/os-tmpdir/package.json create mode 100644 platforms/android/cordova/node_modules/os-tmpdir/readme.md create mode 100644 platforms/android/cordova/node_modules/osenv/.npmignore create mode 100644 platforms/android/cordova/node_modules/osenv/.travis.yml create mode 100644 platforms/android/cordova/node_modules/osenv/LICENSE create mode 100644 platforms/android/cordova/node_modules/osenv/README.md create mode 100644 platforms/android/cordova/node_modules/osenv/osenv.js create mode 100644 platforms/android/cordova/node_modules/osenv/package.json create mode 100644 platforms/android/cordova/node_modules/osenv/test/unix.js create mode 100644 platforms/android/cordova/node_modules/osenv/test/windows.js create mode 100644 platforms/android/cordova/node_modules/osenv/x.tap create mode 100644 platforms/android/cordova/node_modules/path-is-absolute/index.js create mode 100644 platforms/android/cordova/node_modules/path-is-absolute/license create mode 100644 platforms/android/cordova/node_modules/path-is-absolute/package.json create mode 100644 platforms/android/cordova/node_modules/path-is-absolute/readme.md create mode 100644 platforms/android/cordova/node_modules/plist/.jshintrc create mode 100644 platforms/android/cordova/node_modules/plist/.travis.yml create mode 100644 platforms/android/cordova/node_modules/plist/History.md create mode 100644 platforms/android/cordova/node_modules/plist/LICENSE create mode 100644 platforms/android/cordova/node_modules/plist/Makefile create mode 100644 platforms/android/cordova/node_modules/plist/README.md create mode 100644 platforms/android/cordova/node_modules/plist/dist/plist-build.js create mode 100644 platforms/android/cordova/node_modules/plist/dist/plist-parse.js create mode 100644 platforms/android/cordova/node_modules/plist/dist/plist.js create mode 100644 platforms/android/cordova/node_modules/plist/examples/browser/index.html create mode 100644 platforms/android/cordova/node_modules/plist/lib/build.js create mode 100644 platforms/android/cordova/node_modules/plist/lib/node.js create mode 100644 platforms/android/cordova/node_modules/plist/lib/parse.js create mode 100644 platforms/android/cordova/node_modules/plist/lib/plist.js create mode 100644 platforms/android/cordova/node_modules/plist/package.json create mode 100644 platforms/android/cordova/node_modules/properties-parser/README.markdown create mode 100644 platforms/android/cordova/node_modules/properties-parser/index.js create mode 100644 platforms/android/cordova/node_modules/properties-parser/package.json create mode 100644 platforms/android/cordova/node_modules/properties-parser/play-ground.js create mode 100755 platforms/android/cordova/node_modules/properties-parser/test/ReadProperties.class create mode 100644 platforms/android/cordova/node_modules/properties-parser/test/ReadProperties.java create mode 100644 platforms/android/cordova/node_modules/properties-parser/test/test-cases-copy.properties create mode 100644 platforms/android/cordova/node_modules/properties-parser/test/test-cases.properties create mode 100644 platforms/android/cordova/node_modules/properties-parser/test/test.js create mode 100644 platforms/android/cordova/node_modules/q/CHANGES.md delete mode 100644 platforms/android/cordova/node_modules/q/CONTRIBUTING.md delete mode 100644 platforms/android/cordova/node_modules/q/benchmark/compare-with-callbacks.js delete mode 100644 platforms/android/cordova/node_modules/q/benchmark/scenarios.js create mode 100644 platforms/android/cordova/node_modules/sax/AUTHORS rename platforms/android/cordova/node_modules/{nopt/node_modules/abbrev => sax}/LICENSE (100%) create mode 100644 platforms/android/cordova/node_modules/sax/README.md create mode 100644 platforms/android/cordova/node_modules/sax/examples/big-not-pretty.xml create mode 100644 platforms/android/cordova/node_modules/sax/examples/example.js create mode 100644 platforms/android/cordova/node_modules/sax/examples/get-products.js create mode 100644 platforms/android/cordova/node_modules/sax/examples/hello-world.js create mode 100644 platforms/android/cordova/node_modules/sax/examples/not-pretty.xml create mode 100644 platforms/android/cordova/node_modules/sax/examples/pretty-print.js create mode 100644 platforms/android/cordova/node_modules/sax/examples/shopping.xml create mode 100644 platforms/android/cordova/node_modules/sax/examples/strict.dtd create mode 100755 platforms/android/cordova/node_modules/sax/examples/switch-bench.js create mode 100644 platforms/android/cordova/node_modules/sax/examples/test.html create mode 100644 platforms/android/cordova/node_modules/sax/examples/test.xml create mode 100644 platforms/android/cordova/node_modules/sax/lib/sax.js create mode 100644 platforms/android/cordova/node_modules/sax/package.json create mode 100644 platforms/android/cordova/node_modules/sax/test/buffer-overrun.js create mode 100644 platforms/android/cordova/node_modules/sax/test/cdata-chunked.js create mode 100644 platforms/android/cordova/node_modules/sax/test/cdata-end-split.js create mode 100644 platforms/android/cordova/node_modules/sax/test/cdata-fake-end.js create mode 100644 platforms/android/cordova/node_modules/sax/test/cdata-multiple.js create mode 100644 platforms/android/cordova/node_modules/sax/test/cdata.js create mode 100644 platforms/android/cordova/node_modules/sax/test/index.js create mode 100644 platforms/android/cordova/node_modules/sax/test/issue-23.js create mode 100644 platforms/android/cordova/node_modules/sax/test/issue-30.js create mode 100644 platforms/android/cordova/node_modules/sax/test/issue-35.js create mode 100644 platforms/android/cordova/node_modules/sax/test/issue-47.js create mode 100644 platforms/android/cordova/node_modules/sax/test/issue-49.js create mode 100644 platforms/android/cordova/node_modules/sax/test/parser-position.js create mode 100644 platforms/android/cordova/node_modules/sax/test/script.js create mode 100644 platforms/android/cordova/node_modules/sax/test/self-closing-child-strict.js create mode 100644 platforms/android/cordova/node_modules/sax/test/self-closing-child.js create mode 100644 platforms/android/cordova/node_modules/sax/test/self-closing-tag.js create mode 100644 platforms/android/cordova/node_modules/sax/test/stray-ending.js create mode 100644 platforms/android/cordova/node_modules/sax/test/trailing-non-whitespace.js create mode 100644 platforms/android/cordova/node_modules/sax/test/unquoted.js create mode 100644 platforms/android/cordova/node_modules/sax/test/xmlns-issue-41.js create mode 100644 platforms/android/cordova/node_modules/sax/test/xmlns-rebinding.js create mode 100644 platforms/android/cordova/node_modules/sax/test/xmlns-strict.js create mode 100644 platforms/android/cordova/node_modules/sax/test/xmlns-unbound.js create mode 100644 platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js create mode 100644 platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-prefix.js create mode 100644 platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-redefine.js create mode 100644 platforms/android/cordova/node_modules/semver/.npmignore create mode 100644 platforms/android/cordova/node_modules/semver/.travis.yml create mode 100644 platforms/android/cordova/node_modules/semver/LICENSE create mode 100644 platforms/android/cordova/node_modules/semver/README.md create mode 100755 platforms/android/cordova/node_modules/semver/bin/semver create mode 100644 platforms/android/cordova/node_modules/semver/package.json create mode 100644 platforms/android/cordova/node_modules/semver/range.bnf create mode 100644 platforms/android/cordova/node_modules/semver/semver.js create mode 100644 platforms/android/cordova/node_modules/semver/test/big-numbers.js create mode 100644 platforms/android/cordova/node_modules/semver/test/clean.js create mode 100644 platforms/android/cordova/node_modules/semver/test/gtr.js create mode 100644 platforms/android/cordova/node_modules/semver/test/index.js create mode 100644 platforms/android/cordova/node_modules/semver/test/ltr.js create mode 100644 platforms/android/cordova/node_modules/semver/test/major-minor-patch.js create mode 100644 platforms/android/cordova/node_modules/shelljs/RELEASE.md create mode 100644 platforms/android/cordova/node_modules/shelljs/src/ln.js create mode 100644 platforms/android/cordova/node_modules/underscore/LICENSE create mode 100644 platforms/android/cordova/node_modules/underscore/README.md create mode 100644 platforms/android/cordova/node_modules/underscore/package.json create mode 100644 platforms/android/cordova/node_modules/underscore/underscore-min.js create mode 100644 platforms/android/cordova/node_modules/underscore/underscore-min.map create mode 100644 platforms/android/cordova/node_modules/underscore/underscore.js create mode 100644 platforms/android/cordova/node_modules/unorm/LICENSE.md create mode 100644 platforms/android/cordova/node_modules/unorm/README.md create mode 100644 platforms/android/cordova/node_modules/unorm/lib/unorm.js create mode 100644 platforms/android/cordova/node_modules/unorm/package.json create mode 100644 platforms/android/cordova/node_modules/util-deprecate/History.md create mode 100644 platforms/android/cordova/node_modules/util-deprecate/LICENSE create mode 100644 platforms/android/cordova/node_modules/util-deprecate/README.md create mode 100644 platforms/android/cordova/node_modules/util-deprecate/browser.js create mode 100644 platforms/android/cordova/node_modules/util-deprecate/node.js create mode 100644 platforms/android/cordova/node_modules/util-deprecate/package.json delete mode 100644 platforms/android/cordova/node_modules/which/README.md delete mode 100755 platforms/android/cordova/node_modules/which/bin/which delete mode 100644 platforms/android/cordova/node_modules/which/package.json delete mode 100644 platforms/android/cordova/node_modules/which/which.js create mode 100644 platforms/android/cordova/node_modules/wrappy/LICENSE create mode 100644 platforms/android/cordova/node_modules/wrappy/README.md create mode 100644 platforms/android/cordova/node_modules/wrappy/package.json create mode 100644 platforms/android/cordova/node_modules/wrappy/test/basic.js create mode 100644 platforms/android/cordova/node_modules/wrappy/wrappy.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/.npmignore create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/LICENSE create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/README.md create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLAttribute.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLBuilder.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLCData.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLComment.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDAttList.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDElement.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDEntity.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDNotation.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDeclaration.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDocType.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLElement.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLNode.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLRaw.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLStringifier.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/XMLText.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/lib/index.js create mode 100644 platforms/android/cordova/node_modules/xmlbuilder/package.json create mode 100644 platforms/android/cordova/node_modules/xmldom/.npmignore create mode 100644 platforms/android/cordova/node_modules/xmldom/.travis.yml create mode 100644 platforms/android/cordova/node_modules/xmldom/LICENSE create mode 100644 platforms/android/cordova/node_modules/xmldom/__package__.js create mode 100644 platforms/android/cordova/node_modules/xmldom/changelog create mode 100644 platforms/android/cordova/node_modules/xmldom/component.json create mode 100644 platforms/android/cordova/node_modules/xmldom/dom-parser.js create mode 100644 platforms/android/cordova/node_modules/xmldom/dom.js create mode 100644 platforms/android/cordova/node_modules/xmldom/package.json create mode 100644 platforms/android/cordova/node_modules/xmldom/readme.md create mode 100644 platforms/android/cordova/node_modules/xmldom/sax.js diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties index 0dfb485..6a19f90 100644 --- a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties +++ b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties @@ -1 +1 @@ -#Thu Feb 25 13:02:02 GMT 2016 +#Thu Mar 03 14:28:25 GMT 2016 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index fd6246b2001fc12f85a1ccd62c4071709e4a81d8..ca063c64f0cb9afbf93fb79a6d5b7ac1284e7cad 100644 GIT binary patch literal 17 VcmZQBkvw$J`yw9~0~j!C0st!b19SiY literal 17 VcmZQJKXqJVLI1Xo3}6r<3IIB51v3Bu diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index 7a839b89cfd8893d07d69d1f53eaccb9525b95aa..920bed5252b7172b6fc6479cfbb7dbeadffb4b45 100644 GIT binary patch literal 45089 zcmeI5c{o*H`~Q!5j>wQClJG%@29!!l<~c*kkPKxkl9Hj2S*A=yQAkRmC}nC6g+@bU zC?d(MGJMZIYwzux<^1#gUcbM7S6$af&+~rn*Sgof*L1IYZ=a`LgFq1Ann(W-$o`}} zdO1S&U;q8be-Zc>fqxPB7lD5f_!ohH5%?E@e-Zc>fqxPB7lD5f_!ohH5%?E@e-Zc> zfqxPB7lD5f_!oiyPa;rnMtl%f@Gt@!X-WT~>jOhTy)S_v&rTrFbOzlxopI_%&2eCJ z7Jriv%-wfn#>qVd=$9w4Hw?kK&l{q`mcIwODHEojHFlKsHn*P!dJzY%o4$JGI1OA&wuE7pK$aj(36^Ry`b-{&L-w(K=+uz^pKQm-lzLE*8=@W0j_77B^)(&HUPTc z7_Prjk>B)WbS2O)8)15=i^$h+OCFX2J!%-&CtGWacS?N$x}H9!heaxeY;zTR2z0GW zm>$789I!V<{VC9o_29bcs~Zn_%SF+4_;B4laoz8v)-^ysu^HFBC6~vyT`>i^$s1fx zY3$GMT>Sv(7gl0=q|`B*!q=JTm=x0{)C*-@X0sYo{OpkY6n;`$twI1k~e&V{vA+c2{JG_9de-YCYj`{I< z7Km;Ex&tSsCmNbh-F|K-4)miJaNRa|rxUwtG0<-c;(FOfRj1h{)3Q>qjq}Tao`ui1q>uMx?e1s-nQ(RpxBum9aF_9Y z5%?eS&2WAE^58ljxnQ7sEyeWYpj*nEj=uMR9){1`5k#1 zaG+Z<#n`VXU2tF{^`%v_7EEW!j7BnMxgQa;&2& z!2a-ROwaO`uw81S^cm>aLNNXEM&*-6CtsucWFaG_U*S#K$i$@_3GD5KaQ$X9=iYBi z(t+-I7}K*AcD6X5oHqn|AimzSb!-#qjGBr2GV*Fm) z_c6o0nEmy=;$1hb-xmP;V>fWUr08jaqjeC_ZFF$`S7$VvN-N5;PqgKtGL-%Z&(+oyx-R(R0lW-#2cgO#O8e%C!LY7jgSSfpUwk%3=^)uI+rCF;Hv=i z@b8#@_q5f%1KLS9fbRbn*XKNzInf+11bWU(OutwA`Dg8^I3=KGCgXbl#-FL1^oCJ; z{2VN+C}M3-OL7Hz;y7kszOh#DbgjTPpgZ9E@O{p4dMm>#yMgZW0kgl~!Y3~B#11`A zowG3gL5+;#zEyfYz&@D;*GJYje6Z$v3Up^@T>m|G-F)`3D$pY>;omSb}DYmd!%{2Lv`0`On=CwPnTnMkr&we<9Wry)OGW9N3ziU z*2E6CuX&&Q<6KoVus?v$+efFgbCsi_&~en>h1pjoIK^0cDzgE5n=`nc&5$lFO*Yjs&0o}6|(`)ryg0>iXC<6T;9{<_``2;E69nwILn8WSA+z9xlxA7Fv z4R&Js(2?gqM_7vlTXvp>GtWwawLz^}^^ zteuxp4TGP*txN;DBR!_SI(}x^KCe@aKzG8=kvee`4xQeIXnuZ07PGHA^fu1BOwbb8 zn=RPqiY`^&7KM&`Jbo_MwU4##=yUD@_C~H)JN5KemnxoKQxEhrcz#tcU1YbGDSsEx z4f=8W!kfA+qfS47ehpv0^>0Tw1Up;;fgYWL**DBbN)vB3Xg{y7$Mn~Cgx@wzV`5Q?+q@-X*=*@sj$=9Yo6{y$2SenE8d0-thl9m7d=M;f^qvhMY55;KM$e( z!Sl}#YjPIXqF$tGsMxI6i zJzO1Yr~T}UV_~v~WPyI|A*O%kSt_zAH7f_`dyn9H_(Q2PY4bOMe*P4ucL)gY?pimB z?f+u9F1*Zd%xWH;Zz1@;(NW7;vFjDx7tl^Y5N6-0r5G5kFNWrCY50EIc_6R;kjAtX zu#d;*$rrt#v2>R&_CU9=!P@!aomjeaEdgCex%j@(wY&L2`H}aL!2XmkX5VEa{@cK% z%>(G#rMP~~%_Xi-c?#&(_`2xI`BYN#H0(amgN1PW(&4MYZ@KD#?i-Km@8h$>`7LRI z9*U1+*R=YQ3B3$74|K%$lkU*asYAS@OVM`l^S3*86_3+P2NR$tf5qDGuAMRzJG@p7 z=(--5-gBbnnT!l4n)l|WV|wq_tsIR#NpFFDv;?lJ?;6yb&_LTiaunA))=jEpMxghX zygp3-${Mu)m-bI|o;xexy4vb|ej6Edz8P2G`bc2u&TZ?GfZxouxIX>*Ih}7Vn*T@R z>+zc$Luy-36?$G@FvaY@-JBqJ&z(fi*{gUw`(0158*!GP^JK3gX5ath5$6(*;b7p` zbvdrrublq6%taFDC-L|U)KoO8UbBAy^t1Oc`+<%NV;4DA=>t6<&r1h6a-J^R>oWuN z-x_v2@Sl!0kIn!laejcXx*BHxOEtzZO1|tcXx~o{*G=o$z6m&?>*zRsZjPwD@6>xG z!UpV(u44A1bBy+HmVAl;de|dOALDnMvwi7~j{BY|To=tLJS(#A8n8dBiR)?=eXM%P8SA7(#Ucx__;fhN@Np(I=%)~f0|JBHT%44-296qm_^vx7>? zp#4x!OrJK`{W~Kkh6(68=P~`SkZQS}b)p*D&t_crk?0K7%0m0Ei`UI&Y)>@I{JM^g zOJo~nKU4Knt1?j)jb}C2%lcR>3YW|;k4PIhLLgT@-52ioF#+lS87C7bzy zzJCtW=f6yh3+}N+_erZtOecgh#5o!9qw_f<2GeP-INy6BG4lkp6BdT+Pi!Yc2A+oj z{UV;%(cXIVAuq26&BHI@>y%DuK3t!d1MUBf16VtB?FEi6MI6xiuVabn3~rCgrR=TH zdust+=V7D^yW#0Io(=q(-^c73ul}grEPBin=xH{%{@`mL{qpMHKu_qv^&k5(au^63 zfgX$JGc1B{6pqi)Uk7>+eqUo*`E2I*cta7;ZSnky#i4wF-7gN!SIxPx_F2lrMx@#$ z{ek_#kGMWp{k2G7hy&=}#+c4}%JClG>q4{tAKtKKVLW|<0amA zeYgU2FFdbXl0Wfn{T7AIK)0H}+F4SO!1Ubz5ev|-T*UR?T!yhb$7+Edi^r4Gp68M= zH|+?}(-|>)&Z>vbH2TW@K##=pQZCPB>UjhA(fX$?e%^6~R6S2fTgD9Rvo)}Gmezk? zryQ}S59r1rxc-MpEah`Ox}R9!`4YFz$}96JF6j9lfX@@|ebQk(dnA^FcD(U?nAf3fzFfMI??#3Yu+L+`bxC#3 z(O#>SKsQ@~>!DqK-Lc&0KJ0|+%e*JL*EUVI0Q+NGFneCjWc}=bzvw#Mn}h4+S8s2Y z<@^KeZ@k9!<~2EdCi@wI?!FV#`FISHN0e=U0zI1@*8^tgB4nrNfgXkDrF^*qJX*Q7 zXx+)-E^a^g=B;4E19xB_gXeF2Lp-J}M{ef=Jq=&K{5xH}E|mtO``(QUSUdcB_IHBz ztTYDpNAdpiw->b!hs-_%`r%iYy?}~G=*DCJq5IDnd_NR8TYs@X4a141D5D~NPLLtD_HxR zvb2jH1N&>bxNhhi!5yfD?$3oi3wr6CYF;6_UuEvcbu0b8-jVtch4G}TUUJUpJPhi^+FzgL8a8A&a0%F7c!KGQ>zPZZx2UfJ z`hIg<*Es$xSLn({pgZB~MbWGJCO7AOG~e(R#O*6x&6cM*o(1+1BABl9cj-5O_epeL zazBab8;pt@_Xa;02KEW~I@)k`wU*pDL3Ez$<8`);OEc?stG_e^_KAF0I~#|b`^`do zoq+C>iRqhLX9o6vzi$V03w%FUW@2|S=uLbHbej>(UODAjC0(Kwntul3=Yn!exv$%n z4RgTWFcz~{X=>yaDse&gG0S6^uF4%V9T4q=?pIgw`;O`@9_CL^GJ8NfG5ENs)`bjq zoqL3yvjxLgJ6pVBq}qcl(7J214X(fKxVz$QFnYh!cffQtwe5W`3SZm@?Z?*Oy7nyX zk=J`hfnGF#>Dx@ozP4pI&H(+SG^TH7UhT$r`8x;DUHox05u?5%XcJ45Xu}T2?fvcFVe*P}s51BLQK2UTD*Prbe zGjaTb_9wFe(|7hBXS+7~;Xlxh2R<&lWS89^(kiS5x|bGazw5rm#BXn!G@ys$>sOQM zN71`%$9F(C$LE7)F|)SsaT{)+JM6~V(fs2tB7cj{0_X;8n7)T8U!0xx3#z9m;rcR< zK%ZMo=sJpX!u5bR>&$%n(7MOI3|#-nC3`9*0$sm$H!)p{RYPRsjA%IU8}}a5wU@m* z+Y-#d4s>gLeQ6u6qYIgBLGzpf{Cw1&eEQYbt@IJFH&w&h(W%+{w6V>v5a@pR`qJsQ z+|m<;%vGI? zMrHK5^zb^2k?ogxf@u`GpJy>(?HiR>(5?PjgYIv))?vEwa<6KQ9V+NO$Q92wjO)Tn zu9Wto`sQ!EDHsD?3!mp^M>76X$kBKV^lQAhy&LW3 zO-J3)eEU3pk1&fZ7Nk{3K=Z38{GMf&clXg0dy*7r$37BkXYZkmhE-h7=sp~Uua~_w z+#8~KB+>K8{x@cC?m$0lb%Ynq)8g=R$Na99m0GTGF=*dd7q@R#eE;-KZ!6FP@O{Q2 zP*z`Xu~jz%x;efd?rV~kI#4_~3Uo)@@BW&pxu&N4c%Waug0*vi(Dw1X#ipO%?~7@C7tjwXVD@%wY=6=s8PGcX>16%!UXXyFr*;Ky!jn6$9Rc<#d9 z#KmH%VPvHgnkVd&!R%e0ve8GcXF<=+EIc1@J!)V1#8k@xwBsv=*}DecdF*PWk`DBU zI9#t>&a2Mpi1yPCA9vUH>Rks?n$i6yVH0lO>-{;L^|mHx#}UtmT?hZ>-y7!i0(ugj z&$w+9Nk}Mvh(513o)@`A%w`s|r|tmuUc*@XZubRf!hMv`b$Znk(>(&L{EGAU`vCh( z0k}R_ASv2W{uk(1@jTYEoRhuw&UG{&i<8IfJ?rTU4L9nr0(%cU-}Z{QT=RSC1ey=n z;`O4Vp}TW3>;=#`>rG(ocsKJ6N|gh&6Z{9)uXQ|Ket#OhuZ7}qJ0Yd_t@|8X1hCiU!0i2!S~Y(3$7cb3 zAAXMbPxKFK`YGN3dh80!{2bM~j}PR~#_=fGvgtGOvu$ z{P1Qqt~(}IpPiyt0_{iO;}zg>@q~iuYxMo&@g=zZ_g04U!q3rhydi<^~y18u@1_ zA)NJA-de^G%Tmd#11+~+5z`8Cj{6MJicqq7<_OG9ueq4vC!o5qyLZ;Km~I0x4JGH8 zN$JUo)V^MrEBGyTlI6qvTy9;|MnZACBPF+tbc`)|Az%zW-g2|RXv3ll(X9U*KFoq6Kkf;-!n^D2sE8JTKPV(cOacIH7u0Nl&GE+4%S`e||X zv@20+y zg2}#`>x3}P%hqR?rZ!n^%Fy-Qvo_nE65C43h>cDpRYKVAhkOb?oZaS~PVLiB%?sfP4tFNcWi|QaQFHjBFu%HGU*n_BQzP ze~(&s+p|6pqvW{75qFzT*w(|`%ZV*Hp0~&1+SX~NJg2X^Ldmh&A)NZ@hz~HACUv2N zHN)Wk`Jtr1R_ogpl$^?ibiwwd2QGd|&5_2ik^+k3~qvQlD-#2G*!{H(Yz z0lSM16^h&~)8Edh(-5r}Y%oH}F_6;Aqd()gU@nnql~?7qwjsx+LdSX?Cus1Poe_Vt zk>Ay!ZnDRz+3tT4AXBQPv471L8)6j5M}a;J!6I&Q=)mrhXaklBYfDsr-BW3#`0`XK zCC8A0a1I=@b1*lgOv5F4;=V)5Ufw${rO`2z93N@>lg{y62X*uKiQ7>!)?wNIU8>f& zEqQ4VC8m27aaWh07zVqWUeZ*)wBa*Llfc;f%{(E*WQ+XqSm+V%OME$)(qxk?wB`gGNv{{b{p~jeWjpwJn(MxLVl!9ZGlWco6JOx!M$j(OoQ>@@5Py^&h`{ zS#js5CQ6KrxX%y>SF`8;gD`%N(Uy0cXrOUATYtiL*9nd~`W{8A!DM}(<2n2c( zcC7TqOAyqaUohg#$rs*vad4t;SU0 zitNeSx*tR{a*T$!IT2U+;nY7+FXbNXGM1jvse7uz(WSLFiw45X5R6rf0Sp{jFRRxL ztn;2}Q@Jfx-Ow@p{Va*YlNEYW5|GSuy%c`Bi77$4mpeY3{#dBA&OyG1*njeF(%T~b zdRjI={eQ(h35@?GVA6iJx$a&0Wrs_LfWJ*#h#vxhjv4uRu|s&#gnrR+Yu6bLF9q6i zm%tx)z8nRd$~0n6AkdO(TVB4yJK%oiSjV$uE=!)vvtKTpmzmI*qew5ArN`Wt0UO;wP}hFW}z<5?OfHqKCkp!+{B7b;({ZO2~#_QwfF4X z4L{uApse@M@H0kw!BC&Z{ij7JIay+m2!zyOc6bQZGZQ{8(R!M4Sz1s(rg&!*z_1Z# zC9Ws};q_Lr8K{>lO`@{T7{!R*k&!QKDH_tH^u}w5UZ zUMrnza`b6H3~@Ukk0m{E!zK_I=T^Ul-F-aLASqeydEZ%Q>zwp{<9SMsVGqKYREG=0 z+^vah!!=vOPpt0t8GoK#-$%*Ola}4R-Hur>cT+d0`iS{!eF<+~!MLS6ovCp~GAaQu z*UA4Tvuq2`-s_U%m9;MfwnH50(+b{8B2h5cy5>4Jlj?dsLyJrN_Fu+{B_i^;FlZys zCtUpXFU-9h(~xL;*OprSrK85AG_D5Xx)F|0^rZ>rl1{GlDlzW3R~Gx)>aonlSxS!n z6N1^TiUxT***1M$XOlbQShw<>y}XCm4h}*KorV|Tx2CSAvD9Wf z{gdOqV#5z6xqHAJwuETkBb>mxbKhYuOjcLieDBJ0gsjVak1ntjP~vHZo4a`l zeMzCb;qQzZd?_*JDg<-dlmc%M`#bGctGC@6St7IBFkY3GxUk84Nh^+EE5>ifL*9hD z9%r1lD>-GTak<-M$`fSY_`}gCAz1W8cNv7)<*=KI7oP6+N$t%Y63x=5^hVc(V9g(! zTOe$6>HGJlH7i0^_Sf5m#dqfNElfttBlTxy6 zoP1=_zTS0u`s0j?sR^n-3qeuIbGRobEF?a_UF&Z?@P0dl zk=*_H@3E!Z=@Um}yf>f|JGZIUl>8q!P|*m?Cm z9F&>fgLzKRWFL?Bz8>sU2_W9Y$vMJTp+C*w%J z|N8lehZK1?If-LJAb8R0(L=#hjo=Im__#caQ8E1cd8VDElo%s1H6{>j%h#B|z3jFB z#^T16noe)t6xI92P8H$=5iVR?71RkAhTQPcix>X4mwMi3kN+c{#kjtxsOw+x^NZk`iMi zrHia{PeD>kHg+ST56f>!nj%EyT$KuNL849MGZA^vVzMS`R_l~Z9 z)!22D5@RI>i9k4{#IWcf?>--;UMb@(`^#;(S4!b6@s zLBD!!ySKuifk*rI(6k^*j`0}6jrhHXQ+>LqtSK7$@~F$t_%`!jt8Amh_=#Byf$--Z z^H`;9!{8<~c1lGmiCpS~iksJKjs2Grj!tN-mkenL_T=-LAP8H(A>wD+ z&O1+I9W}Oc4CaH95q{&PFGjGJ4(F5LUe>64mh2kkIhM=+X?FByt{3Ig(G!D29P{+_ zU64CwpS_=@!wEU9%Guddr>>_%7%?d$5cVou+z4T2)jE#%@0+`gXjCEUx1LwhuY#Y{`f%>C}Ny^%*Z6)Y%>BzL|C9p)f+Iy06R)!wevS+mQvVn)d3 z3Z*+~X2hMs^MriZ-FvRmN461ZVzsgM%69K2tSLEGdxXmq8w16Wg-yj?gjZLHq1xA3 z_3v@rOFM{%F!{zVPC7_b6`#Qgj!-z=D&x+`efMX7yDcR&K^Q2FEb&MUhkKdUdHke^ zlm5Xyj~lv#xH*U=A98o}q@A`^@1O+C-MuP$H-6@qPDx%$?@SIW@%BN^$;2X0w|D6( z@H$}O={V`UWv?-h?s#DGS*hx2@;C)X^Obb`{C8=o0qia|l|w@)&0C!#&(e2Ix8!jO zjzD9JxEoT*{Y2sx+-WzsRXdasR!<*}^E$He(E|#MrkeCo#5UKpi|XFg3vk#}p(nXx zt1|{OlWceRUvUfF{J%z}&>=HGY(rh^b59-qu-RZ%ipL|+6AN9$Wqw!39*!pU>M8bk zpn7`HSa*OA6V-yegoA|H>sCF zF$|PJdpsw=Y*~0Z>Sa(217%SEZHHIDy`)|S#ks#oRF0?mzJYp4y$p(BpbX0QsRUl> z)XSh42Fjpi?^{G5Z`8}67zWCqwOlJe)k^)e{NfikF`;tLMAo7Bso7zfIr`FGbw!yNT8C?#jmdD0E$sFy);j+8R8 zx!b0~9Q86N#(^>@VaK(8n4?|>#W_+LRM`45s8Nx{lX@8x<3JfS@JIckH~iGgpcn_r zp!3IH@sRqtFw3ZyK`{)JL6_xZ?SU}rWl#(QWl+&6yKFcr)XSjQrU}ZRu4-}xFh{)% ziunU&&<$^L7HwnH%b*ws%AjT{#_%>qy$p(BpbQ%MNI?{e3iUE5_H>{O`sdMi_yr~P zGAM?DGU!$L&_%(dUIxWDPzL?}l@JW|l6n~w!$297M`GI+2%}yG#bN@=pkDkIH4sL< z42of(4El|a75<8cdKnbMKpC`LNhJdEM!gJ*VW14!Q}@gl!l;))ag0<3C9IWjBw=KW zm3kQz<3JfyL%L8Ja!0)kieaD(dO6*Q7s9BQK`{)JK?5)D0KHsT;?&Ea7zWCqSAJ^u zK;EdAK`{)JK{u5u9fvULWl#*GCzU~U=!@7%7+EN(mq9TOltH5$r5Ek%)XShaM=FE9 zEoFkICG|2Wj*-fsy)7F};cikdgJK*ggZ9%gfzy@j@u-(UF%FbLLkVxeF}W~y)XSh4 z2FjojtG75ogFw9uienW>_GX-1Mhjuo%b+-BiC{sObwlBxP%ndG94LdHIb6AD%&C__ zF%FbLckAy{f&Ec0gJK*ggU&Oh4ndDcy$p(BpbWaA>lzsIg)yLB2E{N?24&q>PY3ss zdKnbwNSE{O>u*8nVZj~sGAM?DGU(YljzyPj>Sa)j17%P-x|ud8DAdcK7zWCqwku@| z;iscs2E{l~20a)z90R$dUIxW5PzL4vIAj64qh1EZI8X+?CgHRia!0)kik)?!3_AH_ zcRGYoFN0#^f-Z6in)6Pz(cQ(2psN=ipvaFN5M7sSG;g(z+LNN4*S+W2Cy|p4xVC2%}yG z#V}9?Z8Abj!(>B8y$p(TBzG?7*T7pJ^)e`ifikF^Qga0y6zXMAj00uR`;8^=`!woh zPz(cQQ1R+8IKiP_2E{N?8sWP5DFf~$^)e{NfimcmN--svqh1EZI8X-N({1w<8av6Z zW7_lq!{g5DwJv^t6t@o)#88Z;mvptO7mx#i{^q`(L? z4#?@c{pI;Z%P0MClnrej&DN@?mdeNccA-^Q%v}}nzZ1VUraS%@>g92pH?C)D`n@=r zUWnCCCcPuM`!Y@ZEQi%~pg(fh6YUBRk*>Ung9%CnkYv~{{rc9YH&;S?30 zgBQIEPq$H$U$k64AYFH?`A_-&P@)l1UBqI^Ws6`xXg%EFG59~aJHnLrJZirr+tF-0 z>q{H2#8A4U%}3l_lQ?e&yQ_G+d-HpNiu<|8O_lbgfD@B}T`CVEcZ)fL|QR)t~MkJTV$%YAtYo?9+THB}PjssuWAq zAA!6b+x)0Jfvq_E?5h(gr{4vIKp63rBZ06kT%ZHOIHL?tN_I4v8dUu}Q?_KAB8252 zn3weSH4r8gIkuzZdP(V;>&)%m@kw$N7?;Ii1aok9g}-mH@Sg7Xe*7^#Uv-bD{iDm2 zouuz0y+5t{y%U_sWIGu3@-;S5K>7Og<=PvhUXpRKgLgi$$K)KiKGpa_VaeB1pqpZ( zQ-}DmG4Trl0>O|)I0WWyt^IsW-NUDIGA3R1d%P4YiEHg3zAHigaAqPuKlYYRz+4Ic z(~G^ilKrmI^2Y@euUw|&Sc$L6h#x)roqP;MbAQ|3=NbXZ`NFxHe5SVD#4L|E!CJeB zulSKaB7DeC2DOF+*j=Wxv=NPV6#tVp zTGgLprsPgc=sg6Fi4jZ$Jv zaR|oiFz^Dx)OZhmJ->-l;Y`T3ixrP#p}Ded4#93E^TQV>{`rl4#c!p}X3q@K^Le^7 zQF>dm1HsC|$A7~?`TlarPoopXZso7l=Cs-D94NU}q?LCzeK}Y`3lB$sQGDL4{Y08J z2g4WD?(!f?jEVUDD)D!m#KKu%ch9um9^1mvAts+5AF}bT4fr4mUkS^IK_U>+pY>Eh zK~WiS_m+QMney?;sqFLz4$usfAbpuZ<5{@qRd2nk$$$PC$Kq>VwOgF?xPU4X-GH^Gqg!y``SQoQdM3#|z`)elR?{Xj76IMmLx%_%*Khxv#?OzrRcSmzmLTCUJQFKvRxzxx;Os7O*f1 zDnV^AS#Ko1-?vkEBd`&t4uP=IX6K@JG9}lGD(sEvHhd`O z;Fnjpu$z)&Qb)Mop_5x7cX|~?4c4q+aI#M_WdjOM~|cBI845$CM13pBA$%IA;*IvMJiZ4 zup_|5Q}91ucU;6@f&9!5CyaD9{PL1avxa4U@1=_8Jik$5 z45U4*O8D@iSdQP8`t_Y(>ZRwr`ii)WX5vQ&}Dj zett99uS{Sg&Up>Np1D|zLzwZD)^53#-L&KLb3d4D;)sD0`pY6TiIhWHjb4Y@Ovap&vQ)SUd|@oshMkKd}VO+N$&fIBgBoBJeZ24dz#zf6LOF{ zdk^V?wI`n5H@|IN`J2@roUQm&5&nSmQYKmV8|?0UR^wp8@gmyKJu+ci^GbkLRV_H3cl0zs0!MQoh8t&$IIk~#2sGj7C z_(|bkrX#l?j+9ZQ%JyD|x~X9G^z(~78y@KN484m!F8G5IqmM+~xmg{53}fnvg7U%3 zieApIjpf&1PNc*{NkQ4RPDCE=<@u^rO(A;fE>B+$OPn07BLb5RN(Mn&A3Z5M6>bn+R2nYrx+HPzp2=(p!r8 z$rEyCQ0LQC^=bJErijtQcZ$>?Z0TO4mvLS!R`An>1PRZ3hcPM5Ua0mFu}~s@SVZoQ zmAIgY1&F{X56GR1$8^kFt)Qv;ccOx3+ZnnjG2uf97MP|D*J^zy%oUgQmt5Xm7<1Ut zH5I+}VjDXx@yk5|L0MCs5%RW0ZR_2GU?H)iAfH+|TNOFa z$KMuTuP!sMdeew8l$iOFKO56s1S`tQgf|DR6^ExXg0-6(I6YTdrD&;9V(i8Urph9B z9}Z=_($|}u3>G__8A9yn1~&Ooa+383*BW=n9D2BY@#6(0md@d`mlFm)_e(sc#F$zT zOs?$27ua3HGuE_o5{=FFvz=RiG`YA?a%`ld{Mz5!i&krMa}DFgm)V*@TdTeG{)QD( za$xUMrZ@M4{nd%G|5j&S{aMrcz`V1&^$|*ru^j1V_>1S@dv>zj;ZN<8=ub7*Wtl^C z{AC%jFJ!SXXS|JYODcuOV1IY!{7os0X_$JFiFpG_=9YNEPRJYeBoo6xl1W#3c+tnr)RRn%14(ARdnZWy7G^Z{ zBooI-NoIA}N^hu_)RRmM14-uk$rg~(k_{d8BopI6k{K5%1y}W{Cz%)qlFSnu)j(-@ z;o+z!nHUC=%*ctIi(*MV$;3HQl9?4fxahQ_nq*=aNHWLHcyU3oq@HAA7)UZ7oU65m zFzQJrhJhq=Pkr|wgi%j2F$^S`mdq3HA&h#GiD4kglruCuN5aSkoO+UpaUjY3AQ^NQ z=BOu`7zdI}wla%F7gy>@CdPpz(`>T>{K|rQl8Ip;$(-yF2OrarJs$NW6XQUVDR!pw zB@|8SNhXGYB$HXv7o=ee^O<^*iD6))?UjkV4F{8Yl8JF3$+QSIs)Kq-J;}r{kYp|o zI0U{UAPWlhBopI6lDYC-F*qg3IO<6z#(^YLutRjw-HvLKiD4kg%r+l=14o5=l8JH1 zVL%}4SH8EX97a9K#5q!udGlF=9u!ULNhXGYB-7%K4V-c)P)#y13?!MXPg&l197)Ubj9BPBF71WbV z3Zm7~7zdKfVTaTb=;5d*nHUC=OhIcSde|NH zBopI6l6jshZP99_o@8Pi*!$Rr11`b-s3(~i2a?Q3Vm~cmj(U=bbEG6w)oc?#%zYJL z6uybG&taHL*s4*S5IDkN!}MzRc!`EZ>xSlz2}f>m=R5Cy2MCt?i=_c6UsprUf=qJgptK0ziY45^_{XBS~5?TW|WDKQE)VNq?pt-$^&;~+}n_!^BkuQ zzqo7nZvPAsuJgt}?ve6`PZf0NOHnC)(ETfF&57+#Da3?LYr=3qA5 z&AORSs}%0I7}}@)W-O80AW6xwBqQAI`HJN*m*71xKf%;8Pr&c()x4Wve>}=Po&c*G3IInV~Xrrv=Uylm8i+3#nUkEFjl*5 z_fwjZqY**4*+ajR;ciAbCVM)ptL-WJY#e)d-vs)r?N~PfC+U&~>JDV1P|Hy2lDOs` z_tWR$qv_Q~Xjz4ltLjw--(`?-ze@BO*z+|1R<^kdyuK%j7QS(gR3CZldW8e-=dib? z(7?3KuY+e!DG!J@bVAR^jXdA@?~UMH$HEHoU&}lrQygxvWQ+W&|F*2Hg)k8WOYl|% zX**drV;|%#(abkeyUKs;)Hiv#Qfl03A2)DyT5zXxP4!-=X5pkGedBdwj`(J3*s|uz zKhU6yxC(I1UFtpUrkc@u$&4iw!bm|0KKtb|gspj7(Qh*qArblX=AkchS_zaGVIFz7 zz_3|AIF^^59q~0U=&%WwdsJ4-BjN%${UF4iK&SH>`HORHIoKb_g7PXQmGx}Kb$^%c zp6y#h$HB_$LODXVI>L!+o>88L?C1}Fnoq$soZ!nMtF4g=&`LwK4g{^JObYK8Y1QdI_qNOuPdv@ z7S(Dec+MC|Jxts8`8CVYc6~$Qc7PO{)L$U>1j1#K+pBq%i(Z#G!|_uDJoyL=Wh48<`*<1^!oer2b58{wgln+lfMb)wW8rH zX`^(qG-0Mch9Vy=(FPcHP!hf)m{Qa9qWV1b-4Ely?iac&VHTcZL9abL9ol3?RVP}z zP9JXJ2mY|?58G12-{T}XNtk={P0QL#HQu#ILXIz$#hzG)M8b(}5A4+lcgUp{gk@pS zMQh*h3Sv6eLHNLX-i?k4eM^F2()$oB_SPwbzw|VV{W+bVzSIKJH5fpAswt zh22D4Mboy2z$PJcG`yw+-5%_j5ii8wnj{^t>{~?OoRRzaZr;EPEk9@##Z%U#zV4;y zB!PA-0$=-Oz6Oek)3bS7$=uCO1$Wq2u$LSd2N>p!hB(2A&vx{J2!xroiKngeqRop> za^LktiH4X#AtQie*$8%0JWBw=WSce9*>zT}3!BPWTk`nEdI%#GU3G40xI&ojgU<0+ z!n}-sOl^lWTK5z85DIU;h&P64HaQYTHgJy)2);czeRShM$lXl0-DlT8+#7`RjGP1Y z7&5N1NufGlXH)s)(fyertJMYpht12Sq#biozJJj&$ZFhmE{lyZ-s2nVAE~H&w_Z~5dxVR8N7DwxYE{qRWZ%$`*v z`NRZ~d>Jq-N3g^)F;H_Qd%RaAvZIE1%N{5DPCXssh=!&L9Wj|8{u?k^tHA33GA_GW zJ*1qAwPo*;Gbclq-!X&yAyb$zerrVx{CEj;XDn7JZI(P(UdwyNz21eA#Z0P*~Q_m5SHq{@s6W@Y?F!(s>C=jGhy5 zcXPV?ErhA(G4dphRcYE!j7GFZ@IR--xCIa__WKGQ2va+fc!g^~nPHm{OUp4KwYQWQ zog{*}G*7d^K{>1b)@*}n+Gq3PRZh*TG{NqGuOKE>gpw&7lTav%8eumXQvUR?BKH z$QyU3ioEzM;jiABi3f9A^uYxWKg($g5N~BN@r!;#WBzf;j;qOY*5`t(`^66yf2VXu zPfC%#e6LwFc#{mSNh@uC9{rYr!$ILP$TQY5XIh$McQ5^Cfj8kE7W)@#~24+#O0xh_u&U_OnujFbmp|55ZB_RA`tV z9`SfFOFWIqhg^WPXZFchr9qfSnwOB_==XQ$wphemsg5Hi&Eyy;nQxfg;SXV3!hL5H zwiS*FPmi|T7;4m_#5jrPCV^0&Y6ibK3UrXXDf!{;W8Nq+J8Qawn<+8cX9!l7?zRf@ z=2xTTD)@P~V}_-So+PatdTe3KZh13;skOZrfUu>J<~#T^X~ac7-=IBc_WUZPH%8(F zAl@t9#WRsGvQ?KAW7GELa7q2G@y8MR50U?eS@M`L5LX3(@M))A0nA;A9p|0oO4ULNU6#_8mC2tjx#r|wZ0k7 zn_g+a^5d~e_9IFTbaPXx=X1E5FFMjR+n-2E1g3K*(-#_fQseF$TW7&s&wSOPjt9#t z4}LnH`#VX;fEp*}$Jm|8VU-^}wY?uvE~_v_hmW|0i*IQbdy!6<4oh@O>=V zC|tc{UGe8KvxR*9j)FHdWo48cJLymkl6VFV^96UixKq>q?DA;~R9x9fcW}&~5@R9W z5{Ws-``3%!9gQ9d__%}9a?`YV-H074=P8Ighj0fDdcm*#c-co1>dek37AO|qPG?lI zgD{f2OG>Wb3plc;`xx5K;yTct`fyvg$REBv^OPJju`odVa!x!1ta38$Mws^7u*fh$ zpZb1JKH`U+lpLo6!ui=KEP8J-QdRyoR*s=&x$aO&@A?zau0oFt72$HcD*UcWLrsvO z?u_NR{DN}YVy2tuXIt3H122{@1o*vz#(cey;qx_~&s_#N44uAh$|jC6`Iv(j31>Wd z{opA!z{IufR_!+Si&yuJZi;JRr{tKDkY1izCIY7B!kF)H@8Kc-n~SBqzc$Kjx|vx| zi3znKn69BFc!9ToNzI5n$>BJb^0A?CiS5PRZx>>|j|cHeR-D3}u0<1#pz4#&)l_wQBRcQYAaXfO#hY6#{Pt#t>& zcDaktchTvbOrL68FR&x@EfF);39RKp%!$8ZaS-{b^!pWDR8i}mDDAD=pw>Fdsn09J zPHY|NWbhuuoS@{IgZ!nK*f+OWb1*qvr_jt^mO*YeRng51<}Q0ssI2 literal 46779 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 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin index b46d640b1ec336738fd6c3c4e9a124d07b9f52c4..35e01d9ac95a912273b5d1ac4aa73b3e36077176 100644 GIT binary patch delta 17672 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

dB*1mbIC_-W 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 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin index 1519b1c35830b2f0841bff928278960d7ee0e064..9d9fa943c5eed43bf765bf6d43b3ba10ee11be9e 100644 GIT binary patch literal 20942 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 literal 60480 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 f4bH@o&&dlKQ_RD5BS0>ZAj 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 o(2dn{S})DY - - - + @@ -24,9 +22,9 @@ - - + + diff --git a/platforms/android/CordovaLib/build.gradle b/platforms/android/CordovaLib/build.gradle index 2565633..f1c6682 100644 --- a/platforms/android/CordovaLib/build.gradle +++ b/platforms/android/CordovaLib/build.gradle @@ -23,27 +23,20 @@ buildscript { mavenCentral() } - // Switch the Android Gradle plugin version requirement depending on the - // installed version of Gradle. This dependency is documented at - // http://tools.android.com/tech-docs/new-build-system/version-compatibility - // and https://issues.apache.org/jira/browse/CB-8143 - if (gradle.gradleVersion >= "2.2") { - dependencies { - classpath 'com.android.tools.build:gradle:1.0.0+' - } - } else if (gradle.gradleVersion >= "2.1") { - dependencies { - classpath 'com.android.tools.build:gradle:0.14.0+' - } - } else { - dependencies { - classpath 'com.android.tools.build:gradle:0.12.0+' - } + dependencies { + classpath 'com.android.tools.build:gradle:1.5.0' } + } apply plugin: 'android-library' +ext { + apply from: 'cordova.gradle' + cdvCompileSdkVersion = privateHelpers.getProjectTarget() + cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools() +} + android { compileSdkVersion cdvCompileSdkVersion buildToolsVersion cdvBuildToolsVersion diff --git a/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java b/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java index cdff941..f2feb90 100644 --- a/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java +++ b/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java @@ -9,5 +9,5 @@ public final class BuildConfig { public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = ""; public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = ""; + public static final String VERSION_NAME = "1.0"; } diff --git a/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java b/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java index d912600..3e3c0cf 100644 --- a/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java +++ b/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java @@ -9,5 +9,5 @@ public final class BuildConfig { public static final String BUILD_TYPE = "release"; public static final String FLAVOR = ""; public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = ""; + public static final String VERSION_NAME = "1.0"; } diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/debug/aapt/AndroidManifest.xml b/platforms/android/CordovaLib/build/intermediates/bundles/debug/aapt/AndroidManifest.xml new file mode 100644 index 0000000..90863ed --- /dev/null +++ b/platforms/android/CordovaLib/build/intermediates/bundles/debug/aapt/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jar b/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jar index 6535a303e2a386f13cbe45eaade2cbf28e9466df..640e6ee6032b2ff810f21b7968e537499a4d4902 100644 GIT binary patch delta 59678 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�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 diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/release/aapt/AndroidManifest.xml b/platforms/android/CordovaLib/build/intermediates/bundles/release/aapt/AndroidManifest.xml new file mode 100644 index 0000000..90863ed --- /dev/null +++ b/platforms/android/CordovaLib/build/intermediates/bundles/release/aapt/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar b/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar index c97370b1d979bec97d8bb5c5363c9e05efbddfba..258a64dc7fff6cdd0ec921b30378445791a9347f 100644 GIT binary patch delta 59614 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

uBkMWCyz@nlFa6oHpsH{x+6{A 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 Q1^;BgAMkJ+SlMCz2fTJFtpET3 delta 54866 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 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.class index c7952f4b8affa98c6b7ceabdb0dc18423b9b048c..4c5619f629da9b6eaca3877bbdc2e3455f4e480b 100644 GIT binary patch delta 215 zcmdnTdYo11)W2Q(7#J9g81%Rp*ccQz7!8z#z>a1LScq$U-zv?q`w`MW|&5s*(fimj?jz+Z&+( delta 227 zcmX@kx{p=q)W2Q(7#J9g7<9N8*cjwF7!z-uAjKdJ n_z%?s^Wf&MZg_w3QFmGmH0U5xEWB@ymCkqr~Vvqv>KUW+6 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.class index c717cd01c65d129bcf7f5de6ef7c0cbcbcdf62f9..636789372ffc1c7c9c6ec48033a38f0e84703fec 100644 GIT binary patch delta 14 Vcmew(`A2fYVs=KB%}dxLSOG7|1w{Y= delta 14 Vcmew(`A2fYVs=KR%}dxLSOG7+1w#M; diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.class index 5a50300c1dab4613b4bd7e29f16b63984327d7b9..d4e30709ad4c8e7193ae8c26947dcd124fee2c0d 100644 GIT binary patch delta 19 bcmZ3_zMg#pA2Z{L$^6WrjAtgNGJ634J^2O$ delta 19 bcmZ3_zMg#pA2Z{*$^6WrjF%>-GJ634K3N72 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.class index 9285765b1ed68bdf2fa28773b1a7f97b5d4b98f9..fff3f96b98fbd01cd17a81749724f3025707852c 100644 GIT binary patch delta 23 ecmey({+oS67Bgesn1S@0tWJ%U;-bw~`#wrF0#%cyn#@fjnSsekBAP8vy delta 31 mcmeyw{fT>n1S@0BWJ%U;-Z}<$#(D+`#s&sY#-_;|SsekCZwP__ diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.class index 504125cd21708bafb829a65cb822381f370ec196..785cbf910e37c2d3231cdc8b134d31392611bc4d 100644 GIT binary patch delta 31 ncmX@aafo9>DKlgLDKq1g$z{wjywe!i7^gD`FwS6*Vw^SkK65evn*9ke diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.class index 9ff56e1af2c2314860b4efaab62090532e872154..e1fa4e8979c3882007e07b977e6fa2e58a171607 100644 GIT binary patch delta 59 zcmcb^e}{j=S~kY^$?MprXm&C1Fm^MDGWIaYG4?X3F!nK+GEQf(Vw}NX&p4aGiE$=_ PGvh1^kKmYmfY4;_|X6~EawDs^~ zPXXv}bh2?H<+!n&a;3>Lsgp&WZR$e#7Il@rz~*(2Y!+HnWK%aPmX+=%^{|mjJuND+ zsMIDe^|Gk9?Dug~8I_yVPlN`Tbb_2aNfZqd$&=k^T26y)8bU*5K1_}cm(kyn;i3^T z9Vw$x(u|gKr&u(`qOk)0cZ31C8ygsht4qRER%dThSJ$GpDWTe7WqZ?9FyiH9AT5mWWH<% zq*-9nLOE7zV;n7#CTLQ~MkUqB@?wj^f*+B~M=h#%^JN;6(d42=Sz02SOJuavqI1Pe z{}9ykWchqq{-;GvGPyt|7h3c$nOtPi#WMf5OfHepr6ye_f|rZ2u8@^0P5O_G1(aja zRnlKA%{9_o%iB$~Oio^B;cJr|8xgu*=-yz`a+7Yf(MUI$bhC}6w8FwqHr+zE3g~SX z_FDMO!fumRTKL??g><`xFQmW2!WO}})1

Tt;_W*dz0MMA5w>t(#Q>w#p-m_gQqm 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 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.class index f43409968919895ad4e460a1e2598e818360e48e..b20594388efbb73c224afa344360a6fbfc0122a1 100644 GIT binary patch delta 227 zcmey$e3ez;)W2Q(7#J9g7{u8bMA;d{HVSw%iVGH{7M7+Kmjt91I%~uja@Hq zMq)9tjiMS@)J08>WXxpbn0%N~Ly3ivftP`gfdNSKGYEibK?Wh9Zx|Vbfg}@y2msXU BKH&fW delta 46 zcmcc0`juJW)W2Q(7#J9g7zEiF_}Li*HVSw%PF7}0XJnn+&7{G_z{tQ0lxAY!0{|v0 B2{ix! diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class index 73265968dbc2adf6abc0a3830cfa12be93e6f959..8562638c1ce0e0cf801c84cddaf121cd8f1aa316 100644 GIT binary patch delta 51 zcmZ3%v4UfR7_;DE1{Q`R44e!{8Tc5EF$gmppRCRt#kg*IJQ-W5j@cg1l7?yl$6J#u)r9Nr@@PQ_uOWZ<+sIU|Sn8n`!(vv^+&?~h{;ACMIv zls6xe!-wPO#z*AvQ8|1}gnZn}xooPK&)Zq2Z}TxbRdjOsQ9D1KPT8Vq zDpQ zD`gK&PGvfMYb(P-am~JW?(;z_lNqy8N9HiblkD2W-AktI{A9XNNawP%_cx`pX~!4m z`K-`dt!|h7n4(>926N*Kv>Iae{P%mU!Y01S=Z@Rse6?R;fp*+gJ?dBvcQgh0$QAlF z7PI3S32WUoqIv_Bbp`LM^3}aZA?oUE98PEL9mUBpJHOi+%TQ)wIG3_Ad#rp~?!AXm z=TMrc=|10R(~4{7P=0>k5EGk;!o1_>ZA&g6B)#h)?C^3EcuoX50zW}R*6AM-$%=k< zRA7HsG3%r!?ajwh_LRe1(tIP8o17%t8P2rc$z;zZlc3C3CUPFrlRC29n$poDS1}a@ zJMd&SQZ7CZcf{(tDP0QGHc=Kvv%0zi!>ZD(P@l_gw+jVUm%`Ou6%KpFUh!mP?6943 z`n%74q)?M)7^35rV^vdzw}*vHgLYRiKo?EY%yJ$akjn<;nsyYzgW)FCBZ__r#u5#I z!-ZV7?}pKl9hIqzJ-|_4ShDLnb?Q@CT_x`q|Jo%aYE9> z^9f5t?PF=jR54X=s<`NT1ooKNiyKYVpiEQElf!(~$mMu}!qV`B_*FzC(mDT*;!U+c zEhH#pTTsDnfigVO0drX|PLsB&5~_*KplWdd5`{~`mCNi^KL!q(5LJT^Nen zZeKCf#im-JE>UPHgUGGvjm5M(MQ+@hbCOnewvd&{v7(dA`jV1ItpdeQqzlBd8`->_ zveVOcQef4kx)o}Z$8CpRs7p=Nqn4VgS2Q>J^ym#trdp|1nRvOZ>Qk#twMMNqaX@hV zYP^PYJlj$e$8g-l33ZvFE;rScc$A^8Vvc>hYlfsVoqIO#8XX$har5BFrp==)-l}_3 zU9HwJX8tap)u$%=cCxdxp9V8)g#|u>FA7P_>~ypDgsiG+bKy%oL4F5oo^7H#=Fnpu znYsEesjew&A03oQd%Uu9N4kW{I?64@cfE3addQB)?R9JzR)#vNDA4P`ngS1ULMT%dB(t>eUJZ4@JIJwH#U~{oT?&Jb`OOpntPgZf^X4rO(ylIc9PE@e^`o80*h5 zW(Y^Q`#5k$rivVY`a`x?G&4VjbIdlHBxij;4UcRk13k3ZbH_nqB6n0i0Q9i6Vot2O z%-1P{MUe@w^Dk;fwkd>0+;zBWAHBcsyw`@hE}(5Jkl|bc+$;pH(D^@wYVYPVeIDPq zqtYUOe9csS7%%i|Ef}-h)Vm*E>_j0!E|2EHCVG2S$jUH`xUs4ndza}CO&Q+wEXR+c z+2iQ?a_yE?h6(q(#Grg29pmWF7%uQ#)Wk8In;=1R_7C%{0+k+or2gtST{8^|t3q6? z{J5xUEDTA^$+?fH@hIcUYVhyRQ#;LHT=6MXcHWidXQ?a1u%NWdnz(|Wt%h%+GCcA+D)Xa0bHdYS4te^_Sy7+aYxS9fj6QRG)Mrkh z`pmh6=LM9V!Z?pM?*-e_NY^cw?;pBH`mru$3p6g zXwR1NGZDC!PY3vXGv92a{y{9kCbVOVw&QZXZKCg!$kI+~2rTMAj)7MC*%Th5qtbyq zgB?MEPYu*O+<;ThB^>rWLsJwYac-lH@fj?T6aN|_s)TtGqqu~}H7}tRZlj=KI=us} z%x5_PZGjDzo=B;ltpdU) z;TBI_rLA?dZGCj8txv{N+|8<&i4q7*OB5H<+r$i#J#s#SCik?+JuNPwdG85~@Gg2g zuGjGFox!!ei6tepeh4kwSI%I~S+wmtjrJX@5*-O*X(@NiUmr~@Ph8jW1L z<_y;El_y7EO{ z8we*bBy|i*0?#7so{dZJ9ER<=4Ds`@onG$cc|UID=l5+SyO)qLUdrIVjKO|6gZv6& z@0EB9?g+vSoD2ebQdhH7&q=(HbuEQ^5>o3C>U;xUM9EPd?rRWz0Q(KxdhvrS(^>|d zzZK!dd;tDnben;fJjiHQJ&(B0dE}dy(jvFyHc*S`sq1M!g@!U$x-9%AX6nt_R+okA z0$b}mTNV9!g(vHov{Q<+mzf~hNCM-`(e~a%KNEG07@Mi+s% zlYQ>TSjw zwa@(Ffj+;9sdAJ01TGP7Y8P%Ah`t|#QaO=Tqdg^TYK?Z3u(|BC+ZDgf4d3Ay@LiJX z_c#oEU)v;vKrw+$?H={ZGwD1M*mmN1gbEwDQ|ye=h!e!EYs$@hBVlROrilJk)#_b7 z|1lN)ghcVvicmBLY8wN!je*)mt&BmyTk$qe*>M^q09<+xwk&9Qz0O4~JIVDAi*&pW zM)U-tkvpU1f_78!OSaozGZnvKv;BkCFIZbhhu-eFxHPb2sdm=IS_2{vpiNz;{z;WJ pgsmLkK^6cmq|e>thhai#EAGd?NUHatQ?*>z%KypTudYD-e*u=+eh&Zu literal 4634 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 delta 1149 zcmah{M^hA05dM00VRna6mtA*fSx{I(#DpNCYp4>n%CaofDo-kk7!kz;m;;z27#hq0 z%wl#8h&jiDM?HD-WR?B_E&C0KUMw!(>+bh`-Tk`X=iJL#mG6EvKLXGn?+s+2#*K9B zQLtCXJ_F8{$bJ=J1+|7ioq_{84jPEVA>|y_al}AJ997OS1;=%q&~eg$4>c~-tFuAD zDFvqucyUO_Sz{ItoaAZ3Jrhl6HgO*#bUffa=9J`zcx2+Sf+u)t;u)Tsc!8HDUg0$%r8TLm zL+P^Ol0`b+n0SkK(X0;JwOE29qvsTE>XbuW`CF%6l+Ko?v`aSpGVzc!kcya?BON+^%NbhbDgpG%|phtJQY@jWP?Yvaep6vDuCp6v~@(_0X;RJ=0r7SLw? z=q;jZ&i0L@I>BUSUn(87)gQ!a5Gz9G<;LQ?&b{f1x^Wa>D#!W5beA&|ENhzdK=KfYls+Z$x%db8 zed91cxXmxk=8u4&OEpAg=#@ywK}JriwV@iU#jkpT@(`2Pratltu%ZsO)ybj47qP~D za~i>^D2?i&MZJX7M?^8w>L;r>GfJ?kq^%6v$`D5y=2#;XG)hrpTq?zt(p+nT8%=Vn zEO(mXUelB`!=q+-);up-psXAfE%K!$Q>SHeK+^L19)fFlv~E9a(56k=wMAUpq_o4h McJ2P2k delta 296 zcmWNL%`3xk0EeINC(By>W+;@fsf}%B_CjQ)EqRxA@Sa^<9Nb(u`2*A(e*cK_4>%|X z<)EmQ0rRSa-Vj*@VcB-=`{qcr>Kr=$UnHOPsEIMpy` z%5bhM7aHYKIm*g&tubyj!JQ^~(i9cVP}QvQXr4JBZPzzk1s3pX(Ro;+UCa2jLPD!# Ov_@9zPQPfo8w>xQxIc3M diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.class index 750aca726e9656ffa6a7ddde68199facdc20964a..510092847e09b45db549d35676b77e219af3fb47 100644 GIT binary patch delta 371 zcmXYq&nv@m7{}kw?2E}ar53a1$H}knN^0NlcjhuF2W3k+Eobtx*hN}gI7nHZIB?jB z)Wm8n#Q_H*i%b+H4l+*r19tIjc6dJT_w#z5=l#h>a*@Q4?zx2(WdJ6fae0A&l(kfy zqV-Y*b(D0tpuDID`!pIu7mdSD69~{0f;5ASOq>7n@Qti=l1v_?Kt-qH5*B=jFNalQ z)zB%-{l*|IaMT!~C7w0yoHyLc3aV(8-KL+`g!z>X*eEKlj?-p`vL)R%=gm=NN8E1l zYR;=sjAPyb+a4-tA2oEqId9k%m+laibOe=-VW$L~ltdGy&`u}3+%xYum5npmI7cmA zpnHdeBlkYqI$7RCleX)F$fg%wSi zJn||EjTBL2ic*U5m>tX6I)lacpYL({PW|8UY<#CnYe_?a6F}6Lk{1XI@>&tp2`c`l zH$Qn&i-ZC+fCd_bNka(JFxqJZ8A)sYdhm&?C~2f14nV(5LmCde2rqyVV2`d*j63xX z8sjCshbH(-52;fqrfCiuHqG*hQO*gYNlm~-^P+5ZLD(WY%|3Nm*b4WXHm!2f47=7) zNb4w}B@yMkY`$B-XqyKmW@-C(iti#jaoWKJza2_ z)$6{L^h(leX}sZaE8@Nt=T4k^aWdjman9=YKZyG%?vu1U!%MGn<4r#19nJKy7j2t! F`~c(#Q@H>D diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.class index f41cd506e0212dda2d36f1b5ecd0aa1e696a9147..4ae5090e5b32b4002e4b7f017deb3230102e8a1d 100644 GIT binary patch delta 23 ecmZqXXy({Z$jlfzxrjN8HJm|&A!71bW-|azNd`~= delta 23 ecmZqXXy({Z$jlf%xrjN8HIhMuA!_njW-|azg9cUr diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.class index 0ddfc323bb4483a29dd5b20cae87b29684810613..967a4d1b3dc1823776e9bd06ab722b12826308bd 100644 GIT binary patch delta 23 ecmaFE`i6BwA`@fx delta 23 ecmaFE`i6BwA`@f#EhP delta 23 fcmaFE`i6BwA`|1S$w^H9taliA8SYNr#$*NnY!(P( diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.class index 644f6325c93d2cfb350a6e953720c559d3cdb845..caf3782420cbcfbb000b06999a384bd36f9c6caa 100644 GIT binary patch delta 67 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 delta 4561 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 E17D^h8UO$Q diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class new file mode 100644 index 0000000000000000000000000000000000000000..fc6a4d131b35eba004b1627ef38a0e7f29bb33dd GIT binary patch literal 2995 zcma)8>sJ(I82`PnyR$5V;^2+SToe@+a0&AgsEMS8axp>h(rwrsU~rk)W@kYx)2z(y z7rR-0&W{~EftJVW<6)eLU=2>n&GQkwfEN|K6hS49h4HeS z^)QCYXpxX+$uNvChQk<9FdBv_9mW)#Dnkn6(!f$+M-auaa-{K!0w;`21TM1jDcu^0_qmQ~jkF0=bl6tL)h%~GPh|~(@{Hk3mpneJ|Z?RASIJ{X{WKp@az zCmDWemuVS2+3_L6>DPx+e4=&P2|YESJEq*{9tPY|Gb6CR81@k(lN~oY^i*m{Pn_cE zDl>+a^p7mxrCfp9x?-M%Hf{1yg7H^-mSY*)iXZIj?b&xaVWeHtwg{~HT;)M)9*8Lr zG$ss-2Usy5wRdRDNVtU53L*WctdQrF4-;~7NmTk=XI(QD?=myey-ZK1{VW8c#g5Zq zJ4U;ebZj$8^Of_tol58V-Le3BXECgKbnPZwMW0K?yY;kJB?VIo&Up9X6g5vl3q<KKW)octmbf zZgf)5v_@6DfeR|$#03R!sdyU~nYTROtf2BmUglT6Z|*Xxcn6neRYq>zY(~Yqcu&Rq z_<*-gPe>th;dqqE%gZzJmis4Qedk4*m99X`QA^$?dH955=&ljY?#OSc?MB9lz zVY*XZdMQ`M4te;sMaV4_f`SiKe1cCUk)JVFk7rM!?T({QNu4UVtm1QgA@Fz+umXir z`2{-#U#j>DUrXdGD!##XcBf(hIpwg;xyEVUwaU3#=gIbu<@Lq>QOBP2Tg{G#>|Qx7 z4jMxPrZMStitsQyU}n@vvT2-P`>m7hBgEUtf(SGf0j^)vDRUC!MT(3VZnu%iumuY& zuUl+No3Ly9Ej?G}1ueR(m;GN%3T!G8dr@dFhthPGY_|r9;dG?*OvYfKlHNlC4{Yl>81lF0p>2z% zD(kysPTW%0Ohr$!+A9hf%=1N2MDLs8?AKQE;%6;n_4a9BQ0klu{3YN+~C(Xu({lwKbrXYLDK+W4E#9_zgVXcoS<|1Gf<+W=(6bI#?a}5$j4YSRHKe z7X%M!wKLf8E7rG$szW))>flXmoWZ8+2=FhCR;Jd>WaZq7UEbV_GdPP!_+CuvIX+E`10=PVgqA%~@cl-HdBZ7aUS;2u$1<(G4z`sNaDB$j(f;`ajBwEz|%2 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.class index 48b17f5f7798b39f3de69ca010f4c6443b3a8f56..55051d09e108c485294b8df56541d8486c7040f6 100644 GIT binary patch delta 476 zcmX|;%Tg0T7=^zcG8raxykG%d6Tu(}mkfl90tzGw7)cb67Z{2ZHB~U7Ah6N5=qG>$ z3%Bf8uw-Fb<;EBB0R;a>%SE4a>hC`1KUMuTeVwj8@e~tGS~cbK zf|njMcJkW7oP~J{3l_>2Djsh<-g+z^*VU@XCB>ul!?+dgHmdPabP#RsG|F+@Y=y0; z86PMzwJ_e=Z$?`|_Zp|Dj2 z2E}VtuP8^fv@xe{UQJ0xPsiVT#Rx_7%N=+!gU9SmmcH?||I1RgyO~S|{+#Te=Qd@t ao6KZKCEH<)SHhj5l1z)={?{}s_jkq?-o;9SvXo&}GR+gWk4>SWEyx|6b# z4UbKaEssjQrV?Ve?W4L)>YIzJ>r2}eyBmlMY1%w?47*ef?R0qT84ft~II=IXO5ZUx z!wG|i5k?ImlZI0yI8D?@$Dfo^wvniG4v}COU#K)=bTiHU%Jj diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.class index 46185ee97a738144c0c48de5197c7f02eb24282b..95996f7cf41aed5db46f01873e2553af89ee0ed9 100644 GIT binary patch delta 31 ncmdnQxruYbM`p(0$)A|Rc|#dk7{VC%7$O)%8KNeKvBUrXn$id; delta 31 ncmdnQxruYbM`p%=$)A|Rd4m{O7=ju27(y9D8Nw%rvBUrXnh6LQ diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.class index 2c117c0b278f65e66957fbf18de6c4e87bfa9115..8c8da1b9681ee9e253b0d7fc727dc0f95aedb583 100644 GIT binary patch delta 31 ncmdnOxrKAXXJ*Ef$zPbmdD9tK7%~|67_t~d8FD5^u*3iWpiKyi delta 31 ncmdnOxrKAXXJ*F4$zPbmc~clz7*ZMd7}6O;88RnFu*3iWpM(f} diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.class index 290e6e442b4875bd866fc251129c87591990ad62..5a345dd52fd0db034a12f9217b62f22ececc2d3b 100644 GIT binary patch delta 31 mcmeyy`Hgdf2@7MxWK)(1-ev|Ch86~XhBgKOV diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.class index e2c77de94c13f248768a482f165017202c39b506..461dd7028b15c10287d32a60aa86c060a342c8cc 100644 GIT binary patch delta 31 mcmeyy`;B*l2pc2MWKp&}UVa94MgayzMnMK0Mxn_Q*wO%XPzEmm delta 31 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 lr^{!CvioG+FFXP1Yz8ys{s@*TKhKlDV zW?l8J3DH;29eDvjUpZ*tI=tuN815lJI&$&8ZvLe3=X894zZf`)QwH2Pt;K&;_|SkC zA8E7e_3%A-=Cq@#fWIIX16K&AfLDV=?13Z+1A?c$NH1~qrn zO?M?dJW^y}nDq2WNcUmg6qB`-C@D2CN_u&vxAZY^O!_J*GcZ$*RsH)eXPR6QJE>yz&v-s|$msfQ=6K1% z=Ss#X8LMP8sSsBE*^GYTtHVJPH)5uVn=nhzBep0zJGL=L#TI5}F7x)$^Q%m$mWZCW?`z665;0}6Oi^;JDc8yMN^UTvR;F6(%k=tb zrc9R^vGKk`1vi>9Q*Kf+%aqwN$CSA;Psw~!7NSP9S z(NHtok?>)tI6MiYH^4Y#X<5p)Ep){h&b)5bcSO^lZq ztNi9x$V*emOR-X)qCVMDJdlK5ij53ceX^x^kRu&HrP#!gc5ErtZ6;>X#U=@LEvaaN zq32NGQ@hcXkPB_dC4}3d5uGMRTwx706z))xKxYlpc68KlZQa2P+(oRr(GzKC7RHPY!Vn%IXovPATj^<`+R9Hl<(3eYUer4rN0(#h-U5n(uEfQzTVvG5 z#w9kq1iI_Yu)*0rJV4?HY3oS~S6f?Y3RiDDifuHU#1O)EZue5KgMT}#$V$lSF}501 zHCbub`a=Gl zt&L>rB#5JDxVQii!A*I=meX@K=%4uMpAzh z!qSR>t^FmK__3wjv==9p3;p<1QqfsBqgH$^q^9CmFtZsY5nE|#9K90gJvz+v?bD3D z5#KrAxdi%+DfVT=Q4ubVqkl67d~5YZW1CT#TsW}O8Fc!x8gPkK0S1Lj;ux$eZm~A? zEYT<9uL2pIyv{TJHG(*f0=&VqK7ro&4KwylR^7Mw5_ubw@jFJ{?|BQnL)W}(G1G-I zhzWQaKOmzJhT<7KOJ|KhSNh{QnwZ4LU_F?fw6QSh0UaqW$XAw!qYXS}J76bpy$)DU zDC{2+$IzA}u|0Z{7*APt?HKf=j?2R^X(WOs?zX+HB}XV}rX&r|bHuwjX=h3@25F~Q zqH$b$p`j0H=%ZF~@m)ju!hFH17vE>{N0!MKlO~@eVO>WmnlUWmzbt{v_3`+J#}OS- z!vX1ztkDO57*)*}6$ynCxFYDx3Y0ftw4EHS>+&Z|uuqYV&(NN4=yH6KIt`jgd8H!h z6)m&D>d{M9#qc7`=zLknUkd}hp~Y!GA%madXFL?0xTlEUtr;+m##A~}SjR>}OynzD zuc!+|-RJ_;b8!yRQ|u*OFIq1!K3-ikk}j0>30&H)Gf0_AP3!<5ygzW3L0!&J&4? z5w8$EuJDG!3B_<1h2Q#;A@k;ib?hxtc$+z3$LjQCtQPs(HDgjFfvf!0an!J+UfqZY zM{!)!h{-i!Es0~w1^1Hp(NVI|LjrdFu>-m&MX!j7_6Higpq6S3eC4s#M^eFFmmv=i z!-(VB78_Q+NG|_fYG?WJo1C!UN@@5bccn3huLtYg3OaZ!1^Q={-SKr}|FlW=-ekXk zkHv-VbZn53xR3oF8HK&<`!WcB$Xl_JSFP@kaosDr(%%+ diff --git a/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.class b/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.class index 62662fc490eedc7a4a6368270df5b7d256b5df39..b71c6d858d23089d31c2d34b82e5c2e7a282b6a9 100644 GIT binary patch delta 1448 zcmWlZd0bRg6vxkR2Doo7m%(vl#8D6=8CDlGmy*&XkW!&i!YFlwksv-817Wr}W@(E? z%WW@}vdz-AkxDHqGb>x&aTh_xr|FVwM!)xV!VY30++EkQ6dkQvpb(rz_v*a zDn_Be6Lh2fI~ZfrZ;7g>XB^xkKR2aK0@CSQxIh*F<^ZP18)rOuJ04%*Qm9nk03% zW3q^v8kj%f=Bn^0*#Ruj{Z$DT>7bf~yYwbCBxyaIk5ZR{#$yVPv-AXY2|TIr zG@em-7SDmadRV+y`<%(16$&e{N}(Cg3%sDPn#{4;+V4)%p@bN{%sD6iMZBc&GPMi5 zqVOu#2)w4S7VC6m?AX+h!W(!K)T`Rx=pS0+udN(fG^aXH-k|Un-WGUAA&m9mir8%! z(89^Q%Xp9RK4SwmDr~|=o$vAu`~V*cY*zS)+7&)#_b1q*@F}(`d}a<@?(!Avp%#U0 zZ2p`Ve8Kn<+ZDcI+t;jqL+v0}QDYz&tf~l1uMY$#R0e7r1in@H4&N*6z!rVhwb0sW zw$MsirR!pbyK}ggyA*a~kHB7qeblA5_AW%LcDkq7_hXHo=^jyb0OXuiJ}+1?uhBo% z-%!;UP&kM~iVkzE<0f(HFd5PblL&RPbdpXfI?Y)hW*lK0#W8_4h2y-Sn=S3=(B1BW z=o1`a13E!IogC*4m-bnUh?Ag1UE@jAsh$Nm6>j!qxjZg2ns%6HXBpY*X;(e%CL8V1 zM}142d)Zt_`^-Hu|AY>v1yT?2-J(JKqZp@`EILSs%!YNwYA0~8!*oQSOUsKpN=uDK zW@sIwHnRj=l`cuoH5n#k#Ot-`nK+?a)AP`2^oe#;pDxeHwVyWc)fuzwKbXEnW|q0y z%uWs;K{jWUk-K$W<_i3%W3&3IpAt;qGsbD7pLI@FN_HfKIdG(zTAAd)eP$ruALYPu XMB>2+Gw95ne`i>9SnjaFJ&mRVU=?z<>%gxW@?ZPq#cG2eH#d+s@B-aFM3=T5BLa&i3zBI=7K zML%l-{h}$Ae$~{UT3nWX6P#1@yCy~FMY$mOL(!j_qNpW`{-VFd@{i!6;9mwv08WSq zP6&@eD+Q$~29Booa5W;K6)K}N#lc8$w8Z)3L~B7CfnQS(v=szgv_pH5ViaN>bWrH% zA`X{m3Zj#Xcyw0i;-ITSH%+~$#X$l;ktpb{(E~{?g6OG`>>yPm4ZRe4>q<_MuF(gV zD)e=5nLOLTn>l z8i!E|S<>3IV!lo=S}>*+kDV%M9FeGF1=)geg6kdJpm8H^5@o!D2@Y;nxJA=sYEhWz zU=oYSk-6QfaGR!SxLt0{)tHPt2U9c+##9IS(s@W>nxY|Sd1kGb*NW($>3$GvNa~rmKbGg;=OjEZ%T((@T$R5YE)Qe@EVpYtT1>3E3L2f zz@!R;Rd^HBrYNsGFMWDmaY1_al%mkoGK1B4OW|#UcMuNW)p|2Jt&wWh3f>jGCwL$0 z4Ax_v&GrWqKEQ_x9~o?*MuU&V{RuW2e2UKuHen?w!A^1$vJCB{wFaMyZ?i;wA@~ws z8Eg^T*P?zyjUaz^d8o9sFh4YYMyNEiAXHqYu+`vOd}r`IHd;^H3TGQ1p(RvjGrA<% z`sk=YUzzH5gB{qZu*+aKHQTLiv#`g;2F7^zVmT!K4PoupHSnxu(?fiRk23ArW)u7 zhd_FW^#~gt4|(g>youSn>+|7SnFUjQ&K(L8^;XsH1TtFO0MSz9-luo$A5&+ z%O#N%;q$V5+Rjd0-2Ke|H;kgCw2Xb?R}@jG=xjV+_#>+k^phQ$me?y2UM{2`FR>JI f@d)q7N4+i{=N0)xB=0?50ncW1Fc*8RXa*Fc)8D!ZR-GJ634K3N72 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class index 9285765b1ed68bdf2fa28773b1a7f97b5d4b98f9..fff3f96b98fbd01cd17a81749724f3025707852c 100644 GIT binary patch delta 23 ecmey({+oS67Bgesn1S@0tWJ%U;-bw~`#wrF0#%cyn#@fjnSsekBAP8vy delta 31 mcmeyw{fT>n1S@0BWJ%U;-Z}<$#(D+`#s&sY#-_;|SsekCZwP__ diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class index 504125cd21708bafb829a65cb822381f370ec196..785cbf910e37c2d3231cdc8b134d31392611bc4d 100644 GIT binary patch delta 31 ncmX@aafo9>DKlgLDKq1g$z{wjywe!i7^gD`FwS6*Vw^SkK65evn*9ke diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class index 9ff56e1af2c2314860b4efaab62090532e872154..e1fa4e8979c3882007e07b977e6fa2e58a171607 100644 GIT binary patch delta 59 zcmcb^e}{j=S~kY^$?MprXm&C1Fm^MDGWIaYG4?X3F!nK+GEQf(Vw}NX&p4aGiE$=_ PGvh1^kKmYmfY4;_|X6~EawDs^~ zPXXv}bh2?H<+!n&a;3>Lsgp&WZR$e#7Il@rz~*(2Y!+HnWK%aPmX+=%^{|mjJuND+ zsMIDe^|Gk9?Dug~8I_yVPlN`Tbb_2aNfZqd$&=k^T26y)8bU*5K1_}cm(kyn;i3^T z9Vw$x(u|gKr&u(`qOk)0cZ31C8ygsht4qRER%dThSJ$GpDWTe7WqZ?9FyiH9AT5mWWH<% zq*-9nLOE7zV;n7#CTLQ~MkUqB@?wj^f*+B~M=h#%^JN;6(d42=Sz02SOJuavqI1Pe z{}9ykWchqq{-;GvGPyt|7h3c$nOtPi#WMf5OfHepr6ye_f|rZ2u8@^0P5O_G1(aja zRnlKA%{9_o%iB$~Oio^B;cJr|8xgu*=-yz`a+7Yf(MUI$bhC}6w8FwqHr+zE3g~SX z_FDMO!fumRTKL??g><`xFQmW2!WO}})1

Tt;_W*dz0MMA5w>t(#Q>w#p-m_gQqm zMGuHS9+c)GY5r?cvq`I49OFuZ*0dBP&M{8yJheU;4J`6k1RDa8z}dC_k-=an>Wc~H-+YpqTZULK zkhzwx!jv7;eztNQp;IV0)xWsjABj%!hZhAR5m7SLAE~d667otasw)@x8hquozTmv_ zY0+>XIB!UGMd=Jea^2DMgbvltob0SjH81Q7Mq9<1s!?6xY_a>LH)FNJow!TkW~|^F zI2lQuoU?LGr&qE!?}V~`W&J#Xh$j;Dg`=#%q=yx?(0V7BTrlzwtyg$LBZ@ZBqfDU9C=CIBWBJTLuqM=~=rMZSc|G}}Zciv2q9+OV*!tSq z$lS2sA5`=dJ#Er6ik<@- zutL$7^p#0pD?Ev(6n#VAD*BFgnDjlNr_(p5ljBZJqaU2S)RM`~d=L7Oep2)^{X$3^ z<(s>3UN}@AtQj4u4TTl`N_z<%+swxfteYR08!3s( z@$zQu1P9geClY0|SLe~8a80PeH?mDlD0m8ILO8Uvq*UQ8Mlq5E>TSH^Y)i{dHB2^y zVR3`)c;ERoZFpzHZP<#NWMwGv&d2zK8zUuV3su~oZDFJ;Bh5&6&P^Ye)NEwL_Oglx z%3h{P>y*&}2NZt7&(7iW+@>reThTV7qrz@{#?A?a=anyrgo5Scr%j$TX31QCozwzl z(3#^qj-UB8vm1@YUYCVaE(ZVy5{1y~vV*Z*YIX@nm+%ANLTBIX{EY$JE7Q>4u zPC`9Kpn=aU!Ava0SvVK-a2^_Q0WRjB%W(;o;Zody%lN`qXnh^E{*^I(;A?LLv&1IW zVj;;}&?QafGCNKbmnPEGH8e+v^k6FjSMi~%ne;Wt#kJ^z>oAPrE7;Pr*w$yTo#j%k zO3sWasX#U!WBau#al`0y5alKwXDwVtwUS8%6%$2C5yOMITFfhjeVxs&?#6Yx7rSEs z?&cfc(@w#lm;wuZrR*@0OUj={+*1&pbrkVIq_U^Fv3L5i{7{w~$Cf^gZ+7!vRRlbt%kj(sAR0bX7U=am$~j^*!|4< z_c$Do6K9x%*YG+^3LG=+$YNZtHPoS^;o}6VE9(J{@JAYF8X4$73CJQ71>{C=R(>=C z`?TZ6U|9^t1zm$()UEuK_;o3R!7>>vi@~xPEC>0N+YYGf@jzVnHPF6efC?DM!$3t0 z)Qy3!1SXa zgONx>kWNFH$!HYP7!BfK!)9?-yvtc3b*m_D{2~q^@oLQYg*@a3h!3rC&g@?36W~-9 z22Eggl}MwB8qlkKn;wTrkNFT>+&+jYN$1FXgk?X}7{oD3*jWvVU>8gCbEfIP+I`rm zqD4mw%|;$o!$YT|7oE{gQ}4K@-Wp%Rus1%9Y3i-Dv%BS0)2Oq1EYO*)1Bd1#ffh3N zS`j2iF)5`aNt2NrbAnt}0H5)-qCsFF1?DbXA-nEBICkn1Qdj z*t?L%h5Kt>OVmb8gX<6mnfNAyOQU-P#}{!beWzJX?^)W;qL(nMOOZn>HH+a|cWzvF zE+?PVT5yH_A*MSQKWg2wCTv~IB3rZI(k5@b*0QT-*{Gv_yB8*{VlDS;Ev*&3Et-IQ z{DNOuD(3zi9`237Oe*oVgK1`%)eN(?9ZX)FY~JxOzj4+}&6-q_?`$tgX$Q4|p*Awq z(Si-GV66|QjP`S#IEK+5IG~|=lvZh{>L-kzhnqI@-+3>xQ@5Zey@XQ!hAyM67)-BV zIK8Hs4rI5K^6#HG$mU9g2ZwN&%?5sP+fQKY$WK%O+OFx z3#<5@N$ur4+Q-E9bA>t(H*p%DZ#A*RR2#kgc&_GCI#*oDpM1)s4vgITco_UI2UqG8 zHd$6{P2>|NY6e^pGOuevLP851R|~FBY{3mu=1FsEeOo5;eWvsG%xSEB1`Mv_{F?Fu la+5QR2{4y=4hxj2$YHV4m8zgJyK@$Qq7O*0Fkaw8FO? zqswChJdWd3$oL>m?icCi@47nE;aSRfwmRz{deY|boFL{f!R5I+|5JzabU0tG z+jxOe{>#NKhyMWo{RT%UgqLS#aQleMGzPAau@IDex(Y!Lb>g*O2JlzTwbYhSgpfVI$Z7W8i&`m zU+G)o<8|#t@zZ_Y8_pJ9)4sxeoX+(kP=LJ|!H2oVTb@vvvJUGFuEDhimt!T7IFua2s9o}hp7gjsm z6|>i89vS@ z9A0PmB%d;Tn%fAkDk(GW8E*H^Ney{(lafb1%N>T#@p;1+xYOZ_hA;7D!&gKfzRK4O zZoo>z*ZGFSHx0Jne#5u;w&6S6?(kir$U8jL%X>K~+5aAq=PeH96&kD)Bl$i*Fxp`>(_!SWhGz9S+Z*(Av--p)}mXjRsHYdD{5e*5>f6?3UBQ*|jrU z>K4?sEGjqrn%@|Hi=75fW1GRVO4@xwxLJI75bbwrTQ?mO%uW|fI$zQ-uqHAr#tft1gSrrTF!V4=V%V7AkTK|g-cp0yF z52lO=@mKCMGW=$^UnB53-jIO@)ByCXslz zNO94nB&&C_35j-+!G5dA+N{Rusz{-D5%7d)nJB#+A*?_@@yc-VlP}EO@V*KR5pC4Dv zpfF1dv#^`<`i@rER5=5F5ncBQ>~Es={wN%f9@Q`%&tSW7s@p}w9>OM#&_eaiA5o)F zeZ*8SUcMl@$eZG#8v{sVBC?o_GN!~htzV380+uFV(kU(2ZTS^PM$KiqfQ1CCmw;sm zSSB*rCkCj`!9dbqEl^HDEKq>}6$(&a0V)=tQUNOae?WxvU<PzN7&mDU!hmTV(F!pBxCuWxa!+S=j0C8E_u zNaq@>#Rw}q6qOyqC$>f*9rn|R><~V)vh_^0^@|qWtrpUn^f|RsGK(KqkJB;*Qo?x-7qnz+7Bh5(9Imz_bg@rWlx>QDu7`46{cXhCW~y7iW%Z zE4>?MP4TZ6)8o*o+GfGrBA5^S56o}y?VnZq4&PhMaLF_qUHcaCDFpbm{PK84qPqh{ z+>T;Ci*i1PL-{;LaHoYIDDf$l|3BbI@mmtIu@^syI*_Nc(jOON_h;;ki+ z3I72U!7nkDkUH4sNaN~82m60P7oQO{`697;jW5kQq|>}tr8-_iB43X&FDWW3Nm5uJ zT=|lrekW}3ZYdoQld~U4(e9GU|40)@j^ZT{?I&!anyG@U4Guh zOGE6?T;ABkeMoggS64cuZ7{+%SP1oBYU-u!h>L5-Qhz%xi*JWl-0|_DHgt6A7F+-T diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class index f43409968919895ad4e460a1e2598e818360e48e..b20594388efbb73c224afa344360a6fbfc0122a1 100644 GIT binary patch delta 227 zcmey$e3ez;)W2Q(7#J9g7{u8bMA;d{HVSw%iVGH{7M7+Kmjt91I%~uja@Hq zMq)9tjiMS@)J08>WXxpbn0%N~Ly3ivftP`gfdNSKGYEibK?Wh9Zx|Vbfg}@y2msXU BKH&fW delta 46 zcmcc0`juJW)W2Q(7#J9g7zEiF_}Li*HVSw%PF7}0XJnn+&7{G_z{tQ0lxAY!0{|v0 B2{ix! diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class index 73265968dbc2adf6abc0a3830cfa12be93e6f959..8562638c1ce0e0cf801c84cddaf121cd8f1aa316 100644 GIT binary patch delta 51 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 literal 4634 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 delta 1149 zcmah{M^hA05dM00VRna6mtA*fSx{I(#DpNCYp4>n%CaofDo-kk7!kz;m;;z27#hq0 z%wl#8h&jiDM?HD-WR?B_E&C0KUMw!(>+bh`-Tk`X=iJL#mG6EvKLXGn?+s+2#*K9B zQLtCXJ_F8{$bJ=J1+|7ioq_{84jPEVA>|y_al}AJ997OS1;=%q&~eg$4>c~-tFuAD zDFvqucyUO_Sz{ItoaAZ3Jrhl6HgO*#bUffa=9J`zcx2+Sf+u)t;u)Tsc!8HDUg0$%r8TLm zL+P^Ol0`b+n0SkK(X0;JwOE29qvsTE>XbuW`CF%6l+Ko?v`aSpGVzc!kcya?BON+^%NbhbDgpG%|phtJQY@jWP?Yvaep6vDuCp6v~@(_0X;RJ=0r7SLw? z=q;jZ&i0L@I>BUSUn(87)gQ!a5Gz9G<;LQ?&b{f1x^Wa>D#!W5beA&|ENhzdK=KfYls+Z$x%db8 zed91cxXmxk=8u4&OEpAg=#@ywK}JriwV@iU#jkpT@(`2Pratltu%ZsO)ybj47qP~D za~i>^D2?i&MZJX7M?^8w>L;r>GfJ?kq^%6v$`D5y=2#;XG)hrpTq?zt(p+nT8%=Vn zEO(mXUelB`!=q+-);up-psXAfE%K!$Q>SHeK+^L19)fFlv~E9a(56k=wMAUpq_o4h McJ2P2k delta 296 zcmWNL%`3xk0EeINC(By>W+;@fsf}%B_CjQ)EqRxA@Sa^<9Nb(u`2*A(e*cK_4>%|X z<)EmQ0rRSa-Vj*@VcB-=`{qcr>Kr=$UnHOPsEIMpy` z%5bhM7aHYKIm*g&tubyj!JQ^~(i9cVP}QvQXr4JBZPzzk1s3pX(Ro;+UCa2jLPD!# Ov_@9zPQPfo8w>xQxIc3M diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class index 750aca726e9656ffa6a7ddde68199facdc20964a..510092847e09b45db549d35676b77e219af3fb47 100644 GIT binary patch delta 371 zcmXYq&nv@m7{}kw?2E}ar53a1$H}knN^0NlcjhuF2W3k+Eobtx*hN}gI7nHZIB?jB z)Wm8n#Q_H*i%b+H4l+*r19tIjc6dJT_w#z5=l#h>a*@Q4?zx2(WdJ6fae0A&l(kfy zqV-Y*b(D0tpuDID`!pIu7mdSD69~{0f;5ASOq>7n@Qti=l1v_?Kt-qH5*B=jFNalQ z)zB%-{l*|IaMT!~C7w0yoHyLc3aV(8-KL+`g!z>X*eEKlj?-p`vL)R%=gm=NN8E1l zYR;=sjAPyb+a4-tA2oEqId9k%m+laibOe=-VW$L~ltdGy&`u}3+%xYum5npmI7cmA zpnHdeBlkYqI$7RCleX)F$fg%wSi zJn||EjTBL2ic*U5m>tX6I)lacpYL({PW|8UY<#CnYe_?a6F}6Lk{1XI@>&tp2`c`l zH$Qn&i-ZC+fCd_bNka(JFxqJZ8A)sYdhm&?C~2f14nV(5LmCde2rqyVV2`d*j63xX z8sjCshbH(-52;fqrfCiuHqG*hQO*gYNlm~-^P+5ZLD(WY%|3Nm*b4WXHm!2f47=7) zNb4w}B@yMkY`$B-XqyKmW@-C(iti#jaoWKJza2_ z)$6{L^h(leX}sZaE8@Nt=T4k^aWdjman9=YKZyG%?vu1U!%MGn<4r#19nJKy7j2t! F`~c(#Q@H>D diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class index f41cd506e0212dda2d36f1b5ecd0aa1e696a9147..4ae5090e5b32b4002e4b7f017deb3230102e8a1d 100644 GIT binary patch delta 23 ecmZqXXy({Z$jlfzxrjN8HJm|&A!71bW-|azNd`~= delta 23 ecmZqXXy({Z$jlf%xrjN8HIhMuA!_njW-|azg9cUr diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class index 0ddfc323bb4483a29dd5b20cae87b29684810613..967a4d1b3dc1823776e9bd06ab722b12826308bd 100644 GIT binary patch delta 23 ecmaFE`i6BwA`@fx delta 23 ecmaFE`i6BwA`@f#EhP delta 23 fcmaFE`i6BwA`|1S$w^H9taliA8SYNr#$*NnY!(P( diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class index 644f6325c93d2cfb350a6e953720c559d3cdb845..caf3782420cbcfbb000b06999a384bd36f9c6caa 100644 GIT binary patch delta 67 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 delta 4561 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 E17D^h8UO$Q diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class new file mode 100644 index 0000000000000000000000000000000000000000..fc6a4d131b35eba004b1627ef38a0e7f29bb33dd GIT binary patch literal 2995 zcma)8>sJ(I82`PnyR$5V;^2+SToe@+a0&AgsEMS8axp>h(rwrsU~rk)W@kYx)2z(y z7rR-0&W{~EftJVW<6)eLU=2>n&GQkwfEN|K6hS49h4HeS z^)QCYXpxX+$uNvChQk<9FdBv_9mW)#Dnkn6(!f$+M-auaa-{K!0w;`21TM1jDcu^0_qmQ~jkF0=bl6tL)h%~GPh|~(@{Hk3mpneJ|Z?RASIJ{X{WKp@az zCmDWemuVS2+3_L6>DPx+e4=&P2|YESJEq*{9tPY|Gb6CR81@k(lN~oY^i*m{Pn_cE zDl>+a^p7mxrCfp9x?-M%Hf{1yg7H^-mSY*)iXZIj?b&xaVWeHtwg{~HT;)M)9*8Lr zG$ss-2Usy5wRdRDNVtU53L*WctdQrF4-;~7NmTk=XI(QD?=myey-ZK1{VW8c#g5Zq zJ4U;ebZj$8^Of_tol58V-Le3BXECgKbnPZwMW0K?yY;kJB?VIo&Up9X6g5vl3q<KKW)octmbf zZgf)5v_@6DfeR|$#03R!sdyU~nYTROtf2BmUglT6Z|*Xxcn6neRYq>zY(~Yqcu&Rq z_<*-gPe>th;dqqE%gZzJmis4Qedk4*m99X`QA^$?dH955=&ljY?#OSc?MB9lz zVY*XZdMQ`M4te;sMaV4_f`SiKe1cCUk)JVFk7rM!?T({QNu4UVtm1QgA@Fz+umXir z`2{-#U#j>DUrXdGD!##XcBf(hIpwg;xyEVUwaU3#=gIbu<@Lq>QOBP2Tg{G#>|Qx7 z4jMxPrZMStitsQyU}n@vvT2-P`>m7hBgEUtf(SGf0j^)vDRUC!MT(3VZnu%iumuY& zuUl+No3Ly9Ej?G}1ueR(m;GN%3T!G8dr@dFhthPGY_|r9;dG?*OvYfKlHNlC4{Yl>81lF0p>2z% zD(kysPTW%0Ohr$!+A9hf%=1N2MDLs8?AKQE;%6;n_4a9BQ0klu{3YN+~C(Xu({lwKbrXYLDK+W4E#9_zgVXcoS<|1Gf<+W=(6bI#?a}5$j4YSRHKe z7X%M!wKLf8E7rG$szW))>flXmoWZ8+2=FhCR;Jd>WaZq7UEbV_GdPP!_+CuvIX+E`10=PVgqA%~@cl-HdBZ7aUS;2u$1<(G4z`sNaDB$j(f;`ajBwEz|%2 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class index 48b17f5f7798b39f3de69ca010f4c6443b3a8f56..55051d09e108c485294b8df56541d8486c7040f6 100644 GIT binary patch delta 476 zcmX|;%Tg0T7=^zcG8raxykG%d6Tu(}mkfl90tzGw7)cb67Z{2ZHB~U7Ah6N5=qG>$ z3%Bf8uw-Fb<;EBB0R;a>%SE4a>hC`1KUMuTeVwj8@e~tGS~cbK zf|njMcJkW7oP~J{3l_>2Djsh<-g+z^*VU@XCB>ul!?+dgHmdPabP#RsG|F+@Y=y0; z86PMzwJ_e=Z$?`|_Zp|Dj2 z2E}VtuP8^fv@xe{UQJ0xPsiVT#Rx_7%N=+!gU9SmmcH?||I1RgyO~S|{+#Te=Qd@t ao6KZKCEH<)SHhj5l1z)={?{}s_jkq?-o;9SvXo&}GR+gWk4>SWEyx|6b# z4UbKaEssjQrV?Ve?W4L)>YIzJ>r2}eyBmlMY1%w?47*ef?R0qT84ft~II=IXO5ZUx z!wG|i5k?ImlZI0yI8D?@$Dfo^wvniG4v}COU#K)=bTiHU%Jj diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class index 46185ee97a738144c0c48de5197c7f02eb24282b..95996f7cf41aed5db46f01873e2553af89ee0ed9 100644 GIT binary patch delta 31 ncmdnQxruYbM`p(0$)A|Rc|#dk7{VC%7$O)%8KNeKvBUrXn$id; delta 31 ncmdnQxruYbM`p%=$)A|Rd4m{O7=ju27(y9D8Nw%rvBUrXnh6LQ diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class index 2c117c0b278f65e66957fbf18de6c4e87bfa9115..8c8da1b9681ee9e253b0d7fc727dc0f95aedb583 100644 GIT binary patch delta 31 ncmdnOxrKAXXJ*Ef$zPbmdD9tK7%~|67_t~d8FD5^u*3iWpiKyi delta 31 ncmdnOxrKAXXJ*F4$zPbmc~clz7*ZMd7}6O;88RnFu*3iWpM(f} diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class index 290e6e442b4875bd866fc251129c87591990ad62..5a345dd52fd0db034a12f9217b62f22ececc2d3b 100644 GIT binary patch delta 31 mcmeyy`Hgdf2@7MxWK)(1-ev|Ch86~XhBgKOV diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class index e2c77de94c13f248768a482f165017202c39b506..461dd7028b15c10287d32a60aa86c060a342c8cc 100644 GIT binary patch delta 31 mcmeyy`;B*l2pc2MWKp&}UVa94MgayzMnMK0Mxn_Q*wO%XPzEmm delta 31 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 lr^{!CvioG+FFXP1Yz8ys{s@*TKhKlDV zW?l8J3DH;29eDvjUpZ*tI=tuN815lJI&$&8ZvLe3=X894zZf`)QwH2Pt;K&;_|SkC zA8E7e_3%A-=Cq@#fWIIX16K&AfLDV=?13Z+1A?c$NH1~qrn zO?M?dJW^y}nDq2WNcUmg6qB`-C@D2CN_u&vxAZY^O!_J*GcZ$*RsH)eXPR6QJE>yz&v-s|$msfQ=6K1% z=Ss#X8LMP8sSsBE*^GYTtHVJPH)5uVn=nhzBep0zJGL=L#TI5}F7x)$^Q%m$mWZCW?`z665;0}6Oi^;JDc8yMN^UTvR;F6(%k=tb zrc9R^vGKk`1vi>9Q*Kf+%aqwN$CSA;Psw~!7NSP9S z(NHtok?>)tI6MiYH^4Y#X<5p)Ep){h&b)5bcSO^lZq ztNi9x$V*emOR-X)qCVMDJdlK5ij53ceX^x^kRu&HrP#!gc5ErtZ6;>X#U=@LEvaaN zq32NGQ@hcXkPB_dC4}3d5uGMRTwx706z))xKxYlpc68KlZQa2P+(oRr(GzKC7RHPY!Vn%IXovPATj^<`+R9Hl<(3eYUer4rN0(#h-U5n(uEfQzTVvG5 z#w9kq1iI_Yu)*0rJV4?HY3oS~S6f?Y3RiDDifuHU#1O)EZue5KgMT}#$V$lSF}501 zHCbub`a=Gl zt&L>rB#5JDxVQii!A*I=meX@K=%4uMpAzh z!qSR>t^FmK__3wjv==9p3;p<1QqfsBqgH$^q^9CmFtZsY5nE|#9K90gJvz+v?bD3D z5#KrAxdi%+DfVT=Q4ubVqkl67d~5YZW1CT#TsW}O8Fc!x8gPkK0S1Lj;ux$eZm~A? zEYT<9uL2pIyv{TJHG(*f0=&VqK7ro&4KwylR^7Mw5_ubw@jFJ{?|BQnL)W}(G1G-I zhzWQaKOmzJhT<7KOJ|KhSNh{QnwZ4LU_F?fw6QSh0UaqW$XAw!qYXS}J76bpy$)DU zDC{2+$IzA}u|0Z{7*APt?HKf=j?2R^X(WOs?zX+HB}XV}rX&r|bHuwjX=h3@25F~Q zqH$b$p`j0H=%ZF~@m)ju!hFH17vE>{N0!MKlO~@eVO>WmnlUWmzbt{v_3`+J#}OS- z!vX1ztkDO57*)*}6$ynCxFYDx3Y0ftw4EHS>+&Z|uuqYV&(NN4=yH6KIt`jgd8H!h z6)m&D>d{M9#qc7`=zLknUkd}hp~Y!GA%madXFL?0xTlEUtr;+m##A~}SjR>}OynzD zuc!+|-RJ_;b8!yRQ|u*OFIq1!K3-ikk}j0>30&H)Gf0_AP3!<5ygzW3L0!&J&4? z5w8$EuJDG!3B_<1h2Q#;A@k;ib?hxtc$+z3$LjQCtQPs(HDgjFfvf!0an!J+UfqZY zM{!)!h{-i!Es0~w1^1Hp(NVI|LjrdFu>-m&MX!j7_6Higpq6S3eC4s#M^eFFmmv=i z!-(VB78_Q+NG|_fYG?WJo1C!UN@@5bccn3huLtYg3OaZ!1^Q={-SKr}|FlW=-ekXk zkHv-VbZn53xR3oF8HK&<`!WcB$Xl_JSFP@kaosDr(%%+ diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class index 62662fc490eedc7a4a6368270df5b7d256b5df39..b71c6d858d23089d31c2d34b82e5c2e7a282b6a9 100644 GIT binary patch delta 1448 zcmWlZd0bRg6vxkR2Doo7m%(vl#8D6=8CDlGmy*&XkW!&i!YFlwksv-817Wr}W@(E? z%WW@}vdz-AkxDHqGb>x&aTh_xr|FVwM!)xV!VY30++EkQ6dkQvpb(rz_v*a zDn_Be6Lh2fI~ZfrZ;7g>XB^xkKR2aK0@CSQxIh*F<^ZP18)rOuJ04%*Qm9nk03% zW3q^v8kj%f=Bn^0*#Ruj{Z$DT>7bf~yYwbCBxyaIk5ZR{#$yVPv-AXY2|TIr zG@em-7SDmadRV+y`<%(16$&e{N}(Cg3%sDPn#{4;+V4)%p@bN{%sD6iMZBc&GPMi5 zqVOu#2)w4S7VC6m?AX+h!W(!K)T`Rx=pS0+udN(fG^aXH-k|Un-WGUAA&m9mir8%! z(89^Q%Xp9RK4SwmDr~|=o$vAu`~V*cY*zS)+7&)#_b1q*@F}(`d}a<@?(!Avp%#U0 zZ2p`Ve8Kn<+ZDcI+t;jqL+v0}QDYz&tf~l1uMY$#R0e7r1in@H4&N*6z!rVhwb0sW zw$MsirR!pbyK}ggyA*a~kHB7qeblA5_AW%LcDkq7_hXHo=^jyb0OXuiJ}+1?uhBo% z-%!;UP&kM~iVkzE<0f(HFd5PblL&RPbdpXfI?Y)hW*lK0#W8_4h2y-Sn=S3=(B1BW z=o1`a13E!IogC*4m-bnUh?Ag1UE@jAsh$Nm6>j!qxjZg2ns%6HXBpY*X;(e%CL8V1 zM}142d)Zt_`^-Hu|AY>v1yT?2-J(JKqZp@`EILSs%!YNwYA0~8!*oQSOUsKpN=uDK zW@sIwHnRj=l`cuoH5n#k#Ot-`nK+?a)AP`2^oe#;pDxeHwVyWc)fuzwKbXEnW|q0y z%uWs;K{jWUk-K$W<_i3%W3&3IpAt;qGsbD7pLI@FN_HfKIdG(zTAAd)eP$ruALYPu XMB>2+Gw95ne`i>9SnjaFJ&mRVU=?z<>%gxW@?ZPq#cG2eH#d+s@B-aFM3=T5BLa&i3zBI=7K zML%l-{h}$Ae$~{UT3nWX6P#1@yCy~FMY$mOL(!j_qNpW`{-VFd@{i!6;9mwv08WSq zP6&@eD+Q$~29Booa5W;K6)K}N#lc8$w8Z)3L~B7CfnQS(v=szgv_pH5ViaN>bWrH% zA`X{m3Zj#Xcyw0i;-ITSH%+~$#X$l;ktpb{(E~{?g6OG`>>yPm4ZRe4>q<_MuF(gV zD)e=5nLOLTn>l z8i!E|S<>3IV!lo=S}>*+kDV%M9FeGF1=)geg6kdJpm8H^5@o!D2@Y;nxJA=sYEhWz zU=oYSk-6QfaGR!SxLt0{)tHPt2U9c+##9IS(s@W>nxY|Sd1kGb*NW($>3$GvNa~rmKbGg;=OjEZ%T((@T$R5YE)Qe@EVpYtT1>3E3L2f zz@!R;Rd^HBrYNsGFMWDmaY1_al%mkoGK1B4OW|#UcMuNW)p|2Jt&wWh3f>jGCwL$0 z4Ax_v&GrWqKEQ_x9~o?*MuU&V{RuW2e2UKuHen?w!A^1$vJCB{wFaMyZ?i;wA@~ws z8Eg^T*P?zyjUaz^d8o9sFh4YYMyNEiAXHqYu+`vOd}r`IHd;^H3TGQ1p(RvjGrA<% z`sk=YUzzH5gB{qZu*+aKHQTLiv#`g;2F7^zVmT!K4PoupHSnxu(?fiRk23ArW)u7 zhd_FW^#~gt4|(g>youSn>+|7SnFUjQ&K(L8^;XsH1TtFO0MSz9-luo$A5&+ z%O#N%;q$V5+Rjd0-2Ke|H;kgCw2Xb?R}@jG=xjV+_#>+k^phQ$me?y2UM{2`FR>JI f@d)q7N4+i{=N0)xB=0?50ncW1 + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/mergeAssets/release/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml similarity index 100% rename from platforms/android/CordovaLib/build/intermediates/incremental/mergeAssets/release/merger.xml rename to platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml new file mode 100644 index 0000000..5e95dc6 --- /dev/null +++ b/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml new file mode 100644 index 0000000..74e440e --- /dev/null +++ b/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml new file mode 100644 index 0000000..132a434 --- /dev/null +++ b/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/debug/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/debug/merger.xml deleted file mode 100644 index 5fe2d18..0000000 --- a/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/debug/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/release/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/release/merger.xml deleted file mode 100644 index 031c9ac..0000000 --- a/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/release/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar b/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar index 309ce7e7030433927a29080d9da8a2b3168197d2..bf7a041c486e46cd2b21277e78e8158974551997 100644 GIT binary patch delta 114162 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 literal 109961 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ÐVSG_5_nUrasU-er3PPjH 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 W3KHr+AlR?t1{4J3@7Dkb$o~Tw*AU$R literal 109885 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

YLptq4FT>VCSI$x;DL-fPU!;jaymcETBA<$B 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 E0zko8u>b%7 diff --git a/platforms/android/CordovaLib/build/tmp/packageDebugJar/MANIFEST.MF b/platforms/android/CordovaLib/build/tmp/packageDebugJar/MANIFEST.MF deleted file mode 100644 index 58630c0..0000000 --- a/platforms/android/CordovaLib/build/tmp/packageDebugJar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/platforms/android/CordovaLib/build/tmp/packageReleaseJar/MANIFEST.MF b/platforms/android/CordovaLib/build/tmp/packageReleaseJar/MANIFEST.MF deleted file mode 100644 index 58630c0..0000000 --- a/platforms/android/CordovaLib/build/tmp/packageReleaseJar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/platforms/android/CordovaLib/cordova.gradle b/platforms/android/CordovaLib/cordova.gradle index 6e89c4c..7465266 100644 --- a/platforms/android/CordovaLib/cordova.gradle +++ b/platforms/android/CordovaLib/cordova.gradle @@ -128,6 +128,14 @@ def doExtractIntFromManifest(name) { return Integer.parseInt(matcher.group(1)) } +def doExtractStringFromManifest(name) { + def manifestFile = file(android.sourceSets.main.manifest.srcFile) + def pattern = Pattern.compile(name + "=\"(\\S+)\"") + def matcher = pattern.matcher(manifestFile.getText()) + matcher.find() + return matcher.group(1) +} + def doPromptForPassword(msg) { if (System.console() == null) { def ret = null @@ -179,6 +187,7 @@ ext { privateHelpers.getProjectTarget = { doGetProjectTarget() } privateHelpers.findLatestInstalledBuildTools = { doFindLatestInstalledBuildTools('19.1.0') } privateHelpers.extractIntFromManifest = { name -> doExtractIntFromManifest(name) } + privateHelpers.extractStringFromManifest = { name -> doExtractStringFromManifest(name) } privateHelpers.promptForPassword = { msg -> doPromptForPassword(msg) } privateHelpers.ensureValueExists = { filePath, props, key -> doEnsureValueExists(filePath, props, key) } diff --git a/platforms/android/CordovaLib/project.properties b/platforms/android/CordovaLib/project.properties index 40ae82c..2342a16 100644 --- a/platforms/android/CordovaLib/project.properties +++ b/platforms/android/CordovaLib/project.properties @@ -10,7 +10,7 @@ # Indicates whether an apk should be generated for each density. split.density=false # Project target. -target=android-22 +target=android-23 apk-configurations= renderscript.opt.level=O0 android.library=true diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java b/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java index 446c37d..4c0d7b9 100644 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java @@ -31,7 +31,7 @@ public class CallbackContext { private String callbackId; private CordovaWebView webView; - private boolean finished; + protected boolean finished; private int changingThreads; public CallbackContext(String callbackId, CordovaWebView webView) { diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java index 5c3bc50..868b243 100755 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java @@ -26,6 +26,7 @@ Licensed to the Apache Software Foundation (ASF) under one import android.app.Activity; import android.app.AlertDialog; +import android.annotation.SuppressLint; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; @@ -108,26 +109,20 @@ public void onCreate(Bundle savedInstanceState) { // need to activate preferences before super.onCreate to avoid "requestFeature() must be called before adding content" exception loadConfig(); - if(!preferences.getBoolean("ShowTitle", false)) - { + if (!preferences.getBoolean("ShowTitle", false)) { getWindow().requestFeature(Window.FEATURE_NO_TITLE); } - if(preferences.getBoolean("SetFullscreen", false)) - { + if (preferences.getBoolean("SetFullscreen", false)) { Log.d(TAG, "The SetFullscreen configuration is deprecated in favor of Fullscreen, and will be removed in a future version."); preferences.set("Fullscreen", true); } - if(preferences.getBoolean("Fullscreen", false)) - { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) - { + if (preferences.getBoolean("Fullscreen", false)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { immersiveMode = true; - } - else - { + } else { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); + WindowManager.LayoutParams.FLAG_FULLSCREEN); } } else { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, @@ -137,12 +132,11 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); cordovaInterface = makeCordovaInterface(); - if(savedInstanceState != null) - { + if (savedInstanceState != null) { cordovaInterface.restoreInstanceState(savedInstanceState); } } - + protected void init() { appView = makeWebView(); createViews(); @@ -191,7 +185,7 @@ protected void createViews() { /** * Construct the default web view object. - * + *

* Override this to customize the webview that is used. */ protected CordovaWebView makeWebView() { @@ -244,13 +238,13 @@ protected void onPause() { /** * Called when the activity receives a new intent - **/ + */ @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); //Forward to plugins if (this.appView != null) - this.appView.onNewIntent(intent); + this.appView.onNewIntent(intent); } /** @@ -260,7 +254,7 @@ protected void onNewIntent(Intent intent) { protected void onResume() { super.onResume(); LOG.d(TAG, "Resumed the activity."); - + if (this.appView == null) { return; } @@ -320,16 +314,17 @@ public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus && immersiveMode) { final int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_FULLSCREEN - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; getWindow().getDecorView().setSystemUiVisibility(uiOptions); } } + @SuppressLint("NewApi") @Override public void startActivityForResult(Intent intent, int requestCode, Bundle options) { // Capture requestCode here so that it is captured in the setActivityResultCallback() case. @@ -341,10 +336,10 @@ public void startActivityForResult(Intent intent, int requestCode, Bundle option * Called when an activity you launched exits, giving you the requestCode you started it with, * the resultCode it returned, and any additional data from it. * - * @param requestCode The request code originally supplied to startActivityForResult(), - * allowing you to identify who this result came from. - * @param resultCode The integer result code returned by the child activity through its setResult(). - * @param intent An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). + * @param requestCode The request code originally supplied to startActivityForResult(), + * allowing you to identify who this result came from. + * @param resultCode The integer result code returned by the child activity through its setResult(). + * @param intent An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { @@ -357,9 +352,9 @@ protected void onActivityResult(int requestCode, int resultCode, Intent intent) * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable). * The errorCode parameter corresponds to one of the ERROR_* constants. * - * @param errorCode The error code corresponding to an ERROR_* value. - * @param description A String describing the error. - * @param failingUrl The url that failed to load. + * @param errorCode The error code corresponding to an ERROR_* value. + * @param description A String describing the error. + * @param failingUrl The url that failed to load. */ public void onReceivedError(final int errorCode, final String description, final String failingUrl) { final CordovaActivity me = this; @@ -448,9 +443,9 @@ public boolean onOptionsItemSelected(MenuItem item) { /** * Called when a message is sent to plugin. * - * @param id The message id - * @param data The message data - * @return Object or null + * @param id The message id + * @param data The message data + * @return Object or null */ public Object onMessage(String id, Object data) { if ("onReceivedError".equals(id)) { @@ -466,8 +461,7 @@ public Object onMessage(String id, Object data) { return null; } - protected void onSaveInstanceState(Bundle outState) - { + protected void onSaveInstanceState(Bundle outState) { cordovaInterface.onSaveInstanceState(outState); super.onSaveInstanceState(outState); } @@ -475,7 +469,7 @@ protected void onSaveInstanceState(Bundle outState) /** * Called by the system when the device configuration changes while your activity is running. * - * @param newConfig The new device configuration + * @param newConfig The new device configuration */ @Override public void onConfigurationChanged(Configuration newConfig) { @@ -488,4 +482,27 @@ public void onConfigurationChanged(Configuration newConfig) { pm.onConfigurationChanged(newConfig); } } + + /** + * Called by the system when the user grants permissions + * + * @param requestCode + * @param permissions + * @param grantResults + */ + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], + int[] grantResults) { + try + { + cordovaInterface.onRequestPermissionResult(requestCode, permissions, grantResults); + } + catch (JSONException e) + { + LOG.d(TAG, "JSONException: Parameters fed into the method are not valid"); + e.printStackTrace(); + } + + } + } diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java index 59ed486..3b8468f 100755 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java @@ -69,4 +69,20 @@ public interface CordovaInterface { * Returns a shared thread pool that can be used for background tasks. */ public ExecutorService getThreadPool(); + + /** + * Sends a permission request to the activity for one permission. + */ + public void requestPermission(CordovaPlugin plugin, int requestCode, String permission); + + /** + * Sends a permission request to the activity for a group of permissions + */ + public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions); + + /** + * Check for a permission. Returns true if the permission is granted, false otherwise. + */ + public boolean hasPermission(String permission); + } diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java index e35a181..d1420b6 100644 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java @@ -21,9 +21,14 @@ Licensed to the Apache Software Foundation (ASF) under one import android.app.Activity; import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; import android.util.Log; +import org.json.JSONException; +import org.json.JSONObject; + import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -38,8 +43,11 @@ public class CordovaInterfaceImpl implements CordovaInterface { protected ActivityResultHolder savedResult; protected CordovaPlugin activityResultCallback; + protected CordovaPlugin permissionResultCallback; protected String initCallbackService; protected int activityResultRequestCode; + protected boolean activityWasDestroyed = false; + protected Bundle savedPluginState; public CordovaInterfaceImpl(Activity activity) { this(activity, Executors.newCachedThreadPool()); @@ -89,12 +97,31 @@ public ExecutorService getThreadPool() { } /** - * Dispatches any pending onActivityResult callbacks. + * Dispatches any pending onActivityResult callbacks and sends the resume event if the + * Activity was destroyed by the OS. */ public void onCordovaInit(PluginManager pluginManager) { this.pluginManager = pluginManager; if (savedResult != null) { onActivityResult(savedResult.requestCode, savedResult.resultCode, savedResult.intent); + } else if(activityWasDestroyed) { + // If there was no Activity result, we still need to send out the resume event if the + // Activity was destroyed by the OS + activityWasDestroyed = false; + if(pluginManager != null) + { + CoreAndroid appPlugin = (CoreAndroid) pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME); + if(appPlugin != null) { + JSONObject obj = new JSONObject(); + try { + obj.put("action", "resume"); + } catch (JSONException e) { + LOG.e(TAG, "Failed to create event message", e); + } + appPlugin.sendResumeEvent(new PluginResult(PluginResult.Status.OK, obj)); + } + } + } } @@ -109,6 +136,10 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent intent) savedResult = new ActivityResultHolder(requestCode, resultCode, intent); if (pluginManager != null) { callback = pluginManager.getPlugin(initCallbackService); + if(callback != null) { + callback.onRestoreStateForActivityResult(savedPluginState.getBundle(callback.getServiceName()), + new ResumeCallback(callback.getServiceName(), pluginManager)); + } } } activityResultCallback = null; @@ -120,7 +151,7 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent intent) callback.onActivityResult(requestCode, resultCode, intent); return true; } - Log.w(TAG, "Got an activity result, but no plugin was registered to receive it" + (savedResult != null ? " yet!": ".")); + Log.w(TAG, "Got an activity result, but no plugin was registered to receive it" + (savedResult != null ? " yet!" : ".")); return false; } @@ -141,6 +172,10 @@ public void onSaveInstanceState(Bundle outState) { String serviceName = activityResultCallback.getServiceName(); outState.putString("callbackService", serviceName); } + if(pluginManager != null){ + outState.putBundle("plugin", pluginManager.onSaveInstanceState()); + } + } /** @@ -148,6 +183,8 @@ public void onSaveInstanceState(Bundle outState) { */ public void restoreInstanceState(Bundle savedInstanceState) { initCallbackService = savedInstanceState.getString("callbackService"); + savedPluginState = savedInstanceState.getBundle("plugin"); + activityWasDestroyed = true; } private static class ActivityResultHolder { @@ -161,4 +198,46 @@ public ActivityResultHolder(int requestCode, int resultCode, Intent intent) { this.intent = intent; } } + + /** + * Called by the system when the user grants permissions + * + * @param requestCode + * @param permissions + * @param grantResults + */ + public void onRequestPermissionResult(int requestCode, String[] permissions, + int[] grantResults) throws JSONException { + if(permissionResultCallback != null) + { + permissionResultCallback.onRequestPermissionResult(requestCode, permissions, grantResults); + permissionResultCallback = null; + } + } + + public void requestPermission(CordovaPlugin plugin, int requestCode, String permission) { + permissionResultCallback = plugin; + String[] permissions = new String [1]; + permissions[0] = permission; + getActivity().requestPermissions(permissions, requestCode); + } + + public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions) + { + permissionResultCallback = plugin; + getActivity().requestPermissions(permissions, requestCode); + } + + public boolean hasPermission(String permission) + { + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + { + int result = activity.checkSelfPermission(permission); + return PackageManager.PERMISSION_GRANTED == result; + } + else + { + return true; + } + } } diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java index 7cf8528..41af1db 100644 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java @@ -26,8 +26,11 @@ Licensed to the Apache Software Foundation (ASF) under one import org.json.JSONException; import android.content.Intent; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.net.Uri; +import android.os.Build; +import android.os.Bundle; import java.io.FileNotFoundException; import java.io.IOException; @@ -75,7 +78,7 @@ protected void pluginInitialize() { public String getServiceName() { return serviceName; } - + /** * Executes the request. * @@ -172,6 +175,29 @@ public void onNewIntent(Intent intent) { public void onDestroy() { } + /** + * Called when the Activity is being destroyed (e.g. if a plugin calls out to an external + * Activity and the OS kills the CordovaActivity in the background). The plugin should save its + * state in this method only if it is awaiting the result of an external Activity and needs + * to preserve some information so as to handle that result; onRestoreStateForActivityResult() + * will only be called if the plugin is the recipient of an Activity result + * + * @return Bundle containing the state of the plugin or null if state does not need to be saved + */ + public Bundle onSaveInstanceState() { + return null; + } + + /** + * Called when a plugin is the recipient of an Activity result after the CordovaActivity has + * been destroyed. The Bundle will be the same as the one the plugin returned in + * onSaveInstanceState() + * + * @param state Bundle containing the state of the plugin + * @param callbackContext Replacement Context to return the plugin result to + */ + public void onRestoreStateForActivityResult(Bundle state, CallbackContext callbackContext) {} + /** * Called when a message is sent to plugin. * @@ -321,7 +347,7 @@ protected Uri fromPluginUri(Uri pluginUri) { */ public void onReset() { } - + /** * Called when the system received an HTTP authentication request. Plugin can use * the supplied HttpAuthHandler to process this auth challenge. @@ -330,14 +356,14 @@ public void onReset() { * @param handler The HttpAuthHandler used to set the WebView's response * @param host The host requiring authentication * @param realm The realm for which authentication is required - * + * * @return Returns True if plugin will resolve this auth challenge, otherwise False - * + * */ public boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordovaHttpAuthHandler handler, String host, String realm) { return false; } - + /** * Called when he system received an SSL client certificate request. Plugin can use * the supplied ClientCertRequest to process this certificate challenge. @@ -359,4 +385,38 @@ public boolean onReceivedClientCertRequest(CordovaWebView view, ICordovaClientCe */ public void onConfigurationChanged(Configuration newConfig) { } + + /** + * Called by the Plugin Manager when we need to actually request permissions + * + * @param requestCode Passed to the activity to track the request + * + * @return Returns the permission that was stored in the plugin + */ + + public void requestPermissions(int requestCode) { + } + + /* + * Called by the WebView implementation to check for geolocation permissions, can be used + * by other Java methods in the event that a plugin is using this as a dependency. + * + * @return Returns true if the plugin has all the permissions it needs to operate. + */ + + public boolean hasPermisssion() { + return true; + } + + /** + * Called by the system when the user grants permissions + * + * @param requestCode + * @param permissions + * @param grantResults + */ + public void onRequestPermissionResult(int requestCode, String[] permissions, + int[] grantResults) throws JSONException { + + } } diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java index ba58f9a..6b0abca 100644 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java @@ -31,7 +31,7 @@ Licensed to the Apache Software Foundation (ASF) under one * are not expected to implement it. */ public interface CordovaWebView { - public static final String CORDOVA_VERSION = "4.1.1"; + public static final String CORDOVA_VERSION = "5.1.1"; void init(CordovaInterface cordova, List pluginEntries, CordovaPreferences preferences); diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java index dd84ab1..f34c749 100644 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java @@ -22,7 +22,7 @@ Licensed to the Apache Software Foundation (ASF) under one import android.view.View; /** - * Interfcae for all Cordova engines. + * Interface for all Cordova engines. * No methods will be added to this class (in order to be compatible with existing engines). * Instead, we will create a new interface: e.g. CordovaWebViewEngineV2 */ diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java index 06da55e..f83e487 100644 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java @@ -354,6 +354,7 @@ public void setButtonPlumbedToJs(int keyCode, boolean override) { case KeyEvent.KEYCODE_VOLUME_DOWN: case KeyEvent.KEYCODE_VOLUME_UP: case KeyEvent.KEYCODE_BACK: + case KeyEvent.KEYCODE_MENU: // TODO: Why are search and menu buttons handled separately? if (override) { boundKeyCodes.add(keyCode); @@ -445,7 +446,10 @@ public void handleResume(boolean keepRunning) { // Resume JavaScript timers. This affects all webviews within the app! engine.setPaused(false); this.pluginManager.onResume(keepRunning); - // To be the same as other platforms, fire this event only when resumed after a "pause". + + // In order to match the behavior of the other platforms, we only send onResume after an + // onPause has occurred. The resume event might still be sent if the Activity was killed + // while waiting for the result of an external Activity once the result is obtained if (hasPausedEver) { sendJavascriptEvent("resume"); } diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java b/platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java index 000717a..0266336 100755 --- a/platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java @@ -19,10 +19,6 @@ Licensed to the Apache Software Foundation (ASF) under one package org.apache.cordova; -import org.apache.cordova.CallbackContext; -import org.apache.cordova.CordovaPlugin; -import org.apache.cordova.LOG; -import org.apache.cordova.PluginResult; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -45,6 +41,8 @@ class CoreAndroid extends CordovaPlugin { protected static final String TAG = "CordovaApp"; private BroadcastReceiver telephonyReceiver; private CallbackContext messageChannel; + private PluginResult pendingResume; + private final Object messageChannelLock = new Object(); /** * Send an event to be fired on the Javascript side. @@ -112,7 +110,13 @@ else if (action.equals("exitApp")) { this.exitApp(); } else if (action.equals("messageChannel")) { - messageChannel = callbackContext; + synchronized(messageChannelLock) { + messageChannel = callbackContext; + if (pendingResume != null) { + sendEventMessage(pendingResume); + pendingResume = null; + } + } return true; } @@ -248,6 +252,9 @@ public void overrideButton(String button, boolean override) { else if (button.equals("volumedown")) { webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_DOWN, override); } + else if (button.equals("menubutton")) { + webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_MENU, override); + } } /** @@ -313,10 +320,13 @@ private void sendEventMessage(String action) { } catch (JSONException e) { LOG.e(TAG, "Failed to create event message", e); } - PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, obj); - pluginResult.setKeepCallback(true); + sendEventMessage(new PluginResult(PluginResult.Status.OK, obj)); + } + + private void sendEventMessage(PluginResult payload) { + payload.setKeepCallback(true); if (messageChannel != null) { - messageChannel.sendPluginResult(pluginResult); + messageChannel.sendPluginResult(payload); } } @@ -328,4 +338,23 @@ public void onDestroy() { webView.getContext().unregisterReceiver(this.telephonyReceiver); } + + /** + * Used to send the resume event in the case that the Activity is destroyed by the OS + * + * @param resumeEvent PluginResult containing the payload for the resume event to be fired + */ + public void sendResumeEvent(PluginResult resumeEvent) { + // This operation must be synchronized because plugin results that trigger resume + // events can be processed asynchronously + synchronized(messageChannelLock) { + if (messageChannel != null) { + sendEventMessage(resumeEvent); + } else { + // Might get called before the page loads, so we need to store it until the + // messageChannel gets created + this.pendingResume = resumeEvent; + } + } + } } diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java b/platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java index a541e77..64147da 100755 --- a/platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java @@ -26,6 +26,7 @@ Licensed to the Apache Software Foundation (ASF) under one import android.content.Intent; import android.content.res.Configuration; import android.net.Uri; +import android.os.Bundle; import android.os.Debug; import android.util.Log; @@ -47,6 +48,8 @@ public class PluginManager { private final CordovaWebView app; private boolean isInitialized; + private CordovaPlugin permissionRequester; + public PluginManager(CordovaWebView cordovaWebView, CordovaInterface cordova, Collection pluginEntries) { this.ctx = cordova; this.app = cordovaWebView; @@ -508,4 +511,17 @@ public void onConfigurationChanged(Configuration newConfig) { } } } + + public Bundle onSaveInstanceState() { + Bundle state = new Bundle(); + for (CordovaPlugin plugin : this.pluginMap.values()) { + if (plugin != null) { + Bundle pluginState = plugin.onSaveInstanceState(); + if(pluginState != null) { + state.putBundle(plugin.getServiceName(), pluginState); + } + } + } + return state; + } } diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java b/platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java new file mode 100644 index 0000000..49a43b5 --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java @@ -0,0 +1,76 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ +package org.apache.cordova; + + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +public class ResumeCallback extends CallbackContext { + private final String TAG = "CordovaResumeCallback"; + private String serviceName; + private PluginManager pluginManager; + + public ResumeCallback(String serviceName, PluginManager pluginManager) { + super("resumecallback", null); + this.serviceName = serviceName; + this.pluginManager = pluginManager; + } + + @Override + public void sendPluginResult(PluginResult pluginResult) { + synchronized (this) { + if (finished) { + LOG.w(TAG, serviceName + " attempted to send a second callback to ResumeCallback\nResult was: " + pluginResult.getMessage()); + return; + } else { + finished = true; + } + } + + JSONObject event = new JSONObject(); + JSONObject pluginResultObject = new JSONObject(); + + try { + pluginResultObject.put("pluginServiceName", this.serviceName); + pluginResultObject.put("pluginStatus", PluginResult.StatusMessages[pluginResult.getStatus()]); + + event.put("action", "resume"); + event.put("pendingResult", pluginResultObject); + } catch (JSONException e) { + LOG.e(TAG, "Unable to create resume object for Activity Result"); + } + + PluginResult eventResult = new PluginResult(PluginResult.Status.OK, event); + + // We send a list of results to the js so that we don't have to decode + // the PluginResult passed to this CallbackContext into JSON twice. + // The results are combined into an event payload before the event is + // fired on the js side of things (see platform.js) + List result = new ArrayList(); + result.add(eventResult); + result.add(pluginResult); + + CoreAndroid appPlugin = (CoreAndroid) pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME); + appPlugin.sendResumeEvent(new PluginResult(PluginResult.Status.OK, result)); + } +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java b/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java index ae55dfe..b88909e 100644 --- a/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java @@ -19,6 +19,7 @@ Licensed to the Apache Software Foundation (ASF) under one package org.apache.cordova.engine; +import android.annotation.TargetApi; import android.os.Build; import android.webkit.CookieManager; import android.webkit.WebView; @@ -30,6 +31,8 @@ class SystemCookieManager implements ICordovaCookieManager { protected final WebView webView; private final CookieManager cookieManager; + //Added because lint can't see the conditional RIGHT ABOVE this + @TargetApi(Build.VERSION_CODES.LOLLIPOP) public SystemCookieManager(WebView webview) { webView = webview; cookieManager = CookieManager.getInstance(); diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java b/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java index 3b5866c..6a17e72 100755 --- a/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java @@ -21,6 +21,7 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.Arrays; import android.annotation.TargetApi; import android.app.Activity; +import android.content.Context; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; @@ -63,13 +64,15 @@ public class SystemWebChromeClient extends WebChromeClient { private View mVideoProgressView; private CordovaDialogsHelper dialogsHelper; + private Context appContext; private WebChromeClient.CustomViewCallback mCustomViewCallback; private View mCustomView; public SystemWebChromeClient(SystemWebViewEngine parentEngine) { this.parentEngine = parentEngine; - dialogsHelper = new CordovaDialogsHelper(parentEngine.webView.getContext()); + appContext = parentEngine.webView.getContext(); + dialogsHelper = new CordovaDialogsHelper(appContext); } /** @@ -174,12 +177,21 @@ public boolean onConsoleMessage(ConsoleMessage consoleMessage) /** * Instructs the client to show a prompt to ask the user to set the Geolocation permission state for the specified origin. * + * This also checks for the Geolocation Plugin and requests permission from the application to use Geolocation. + * * @param origin * @param callback */ public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) { super.onGeolocationPermissionsShowPrompt(origin, callback); callback.invoke(origin, true, false); + //Get the plugin, it should be loaded + CordovaPlugin geolocation = parentEngine.pluginManager.getPlugin("Geolocation"); + if(geolocation != null && !geolocation.hasPermisssion()) + { + geolocation.requestPermissions(0); + } + } // API level 7 is required for this, see if we could lower this using something else diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java b/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java index 221a884..5e6e4b6 100755 --- a/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java +++ b/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java @@ -135,7 +135,7 @@ public View getView() { return webView; } - @SuppressLint("SetJavaScriptEnabled") + @SuppressLint({"NewApi", "SetJavaScriptEnabled"}) @SuppressWarnings("deprecation") private void initWebViewSettings() { webView.setInitialScale(0); diff --git a/platforms/android/android.json b/platforms/android/android.json index 84bc17e..6056325 100644 --- a/platforms/android/android.json +++ b/platforms/android/android.json @@ -9,39 +9,39 @@ "parents": { "/*": [ { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { @@ -53,6 +53,12 @@ }, "AndroidManifest.xml": { "parents": { + "/*": [ + { + "xml": "", + "count": 1 + } + ], "/manifest": [ { "xml": "", @@ -67,12 +73,6 @@ "count": 1 } ], - "/*": [ - { - "xml": "", - "count": 1 - } - ], "/manifest/application": [ { "xml": "", @@ -112,19 +112,16 @@ } }, "installed_plugins": { - "com.lampa.startapp": { - "PACKAGE_NAME": "com.adamdon.sw" - }, - "com.shukriadams.micVolume": { + "at.gofg.sportscomputer.powermanagement": { "PACKAGE_NAME": "com.adamdon.sw" }, - "cordova-plugin-device-motion": { + "com.lampa.startapp": { "PACKAGE_NAME": "com.adamdon.sw" }, - "cordova-plugin-whitelist": { + "com.shukriadams.micVolume": { "PACKAGE_NAME": "com.adamdon.sw" }, - "cordova-plugin-dialogs": { + "cordova-plugin-app-event": { "PACKAGE_NAME": "com.adamdon.sw" }, "cordova-plugin-device": { @@ -133,10 +130,13 @@ "cordova-plugin-background-mode": { "PACKAGE_NAME": "com.adamdon.sw" }, - "at.gofg.sportscomputer.powermanagement": { + "cordova-plugin-device-motion": { "PACKAGE_NAME": "com.adamdon.sw" }, - "cordova-plugin-app-event": { + "cordova-plugin-dialogs": { + "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-whitelist": { "PACKAGE_NAME": "com.adamdon.sw" }, "de.appplant.cordova.plugin.local-notification": { @@ -145,10 +145,16 @@ }, "dependent_plugins": {}, "modules": [ + { + "file": "plugins/at.gofg.sportscomputer.powermanagement/www/powermanagement.js", + "id": "at.gofg.sportscomputer.powermanagement.device", + "clobbers": [ + "window.powerManagement" + ] + }, { "file": "plugins/com.lampa.startapp/www/startApp.js", "id": "com.lampa.startapp.startapp", - "pluginId": "com.lampa.startapp", "merges": [ "navigator.startApp" ] @@ -156,15 +162,28 @@ { "file": "plugins/com.shukriadams.micVolume/www/micVolume.js", "id": "com.shukriadams.micVolume.MicVolume", - "pluginId": "com.shukriadams.micVolume", "clobbers": [ "window.micVolume" ] }, + { + "file": "plugins/cordova-plugin-device/www/device.js", + "id": "cordova-plugin-device.device", + "clobbers": [ + "device" + ] + }, + { + "file": "plugins/cordova-plugin-background-mode/www/background-mode.js", + "id": "cordova-plugin-background-mode.BackgroundMode", + "clobbers": [ + "cordova.plugins.backgroundMode", + "plugin.backgroundMode" + ] + }, { "file": "plugins/cordova-plugin-device-motion/www/Acceleration.js", "id": "cordova-plugin-device-motion.Acceleration", - "pluginId": "cordova-plugin-device-motion", "clobbers": [ "Acceleration" ] @@ -172,21 +191,13 @@ { "file": "plugins/cordova-plugin-device-motion/www/accelerometer.js", "id": "cordova-plugin-device-motion.accelerometer", - "pluginId": "cordova-plugin-device-motion", "clobbers": [ "navigator.accelerometer" ] }, - { - "file": "plugins/cordova-plugin-whitelist/whitelist.js", - "id": "cordova-plugin-whitelist.whitelist", - "pluginId": "cordova-plugin-whitelist", - "runs": true - }, { "file": "plugins/cordova-plugin-dialogs/www/notification.js", "id": "cordova-plugin-dialogs.notification", - "pluginId": "cordova-plugin-dialogs", "merges": [ "navigator.notification" ] @@ -194,40 +205,18 @@ { "file": "plugins/cordova-plugin-dialogs/www/android/notification.js", "id": "cordova-plugin-dialogs.notification_android", - "pluginId": "cordova-plugin-dialogs", "merges": [ "navigator.notification" ] }, { - "file": "plugins/cordova-plugin-device/www/device.js", - "id": "cordova-plugin-device.device", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "file": "plugins/cordova-plugin-background-mode/www/background-mode.js", - "id": "cordova-plugin-background-mode.BackgroundMode", - "pluginId": "cordova-plugin-background-mode", - "clobbers": [ - "cordova.plugins.backgroundMode", - "plugin.backgroundMode" - ] - }, - { - "file": "plugins/at.gofg.sportscomputer.powermanagement/www/powermanagement.js", - "id": "at.gofg.sportscomputer.powermanagement.device", - "pluginId": "at.gofg.sportscomputer.powermanagement", - "clobbers": [ - "window.powerManagement" - ] + "file": "plugins/cordova-plugin-whitelist/whitelist.js", + "id": "cordova-plugin-whitelist.whitelist", + "runs": true }, { "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js", "id": "de.appplant.cordova.plugin.local-notification.LocalNotification", - "pluginId": "de.appplant.cordova.plugin.local-notification", "clobbers": [ "cordova.plugins.notification.local", "plugin.notification.local" @@ -236,7 +225,6 @@ { "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js", "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Core", - "pluginId": "de.appplant.cordova.plugin.local-notification", "clobbers": [ "cordova.plugins.notification.local.core", "plugin.notification.local.core" @@ -245,7 +233,6 @@ { "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js", "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Util", - "pluginId": "de.appplant.cordova.plugin.local-notification", "merges": [ "cordova.plugins.notification.local.core", "plugin.notification.local.core" @@ -253,15 +240,15 @@ } ], "plugin_metadata": { + "at.gofg.sportscomputer.powermanagement": "1.1.0", "com.lampa.startapp": "0.0.5", "com.shukriadams.micVolume": "0.1.0", - "cordova-plugin-device-motion": "1.2.0", - "cordova-plugin-whitelist": "1.2.1", - "cordova-plugin-dialogs": "1.2.0", + "cordova-plugin-app-event": "1.2.0", "cordova-plugin-device": "1.1.1", "cordova-plugin-background-mode": "0.6.5", - "at.gofg.sportscomputer.powermanagement": "1.1.0", - "cordova-plugin-app-event": "1.2.0", + "cordova-plugin-device-motion": "1.2.0", + "cordova-plugin-dialogs": "1.2.0", + "cordova-plugin-whitelist": "1.2.1", "de.appplant.cordova.plugin.local-notification": "0.8.4" } } \ No newline at end of file diff --git a/platforms/android/assets/www/cordova-js-src/platform.js b/platforms/android/assets/www/cordova-js-src/platform.js index bffc675..2bfd024 100644 --- a/platforms/android/assets/www/cordova-js-src/platform.js +++ b/platforms/android/assets/www/cordova-js-src/platform.js @@ -19,6 +19,9 @@ * */ +// The last resume event that was received that had the result of a plugin call. +var lastResumeEvent = null; + module.exports = { id: 'android', bootstrap: function() { @@ -58,6 +61,19 @@ module.exports = { bindButtonChannel('volumeup'); bindButtonChannel('volumedown'); + // The resume event is not "sticky", but it is possible that the event + // will contain the result of a plugin call. We need to ensure that the + // plugin result is delivered even after the event is fired (CB-10498) + var cordovaAddEventListener = document.addEventListener; + + document.addEventListener = function(evt, handler, capture) { + cordovaAddEventListener(evt, handler, capture); + + if (evt === 'resume' && lastResumeEvent) { + handler(lastResumeEvent); + } + }; + // Let native code know we are all done on the JS side. // Native code will then un-hide the WebView. channel.onCordovaReady.subscribe(function() { @@ -79,12 +95,30 @@ function onMessageFromNative(msg) { case 'searchbutton': // App life cycle events case 'pause': - case 'resume': // Volume events case 'volumedownbutton': case 'volumeupbutton': cordova.fireDocumentEvent(action); break; + case 'resume': + if(arguments.length > 1 && msg.pendingResult) { + if(arguments.length === 2) { + msg.pendingResult.result = arguments[1]; + } else { + // The plugin returned a multipart message + var res = []; + for(var i = 1; i < arguments.length; i++) { + res.push(arguments[i]); + } + msg.pendingResult.result = res; + } + + // Save the plugin result so that it can be delivered to the js + // even if they miss the initial firing of the event + lastResumeEvent = msg; + } + cordova.fireDocumentEvent(action, msg); + break; default: throw new Error('Unknown event action ' + action); } diff --git a/platforms/android/assets/www/cordova.js b/platforms/android/assets/www/cordova.js index 23f6e47..e94e0f7 100644 --- a/platforms/android/assets/www/cordova.js +++ b/platforms/android/assets/www/cordova.js @@ -1,5 +1,5 @@ // Platform: android -// 2c29e187e4206a6a77fba940ef6f77aef5c7eb8c +// c517ca811b4948b630e0b74dbae6c9637939da24 /* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file @@ -19,7 +19,7 @@ under the License. */ ;(function() { -var PLATFORM_VERSION_BUILD_LABEL = '4.1.1'; +var PLATFORM_VERSION_BUILD_LABEL = '5.1.1'; // file: src/scripts/require.js /*jshint -W079 */ @@ -101,7 +101,9 @@ if (typeof module === "object" && typeof require === "function") { // file: src/cordova.js define("cordova", function(require, exports, module) { -if(window.cordova){ +// Workaround for Windows 10 in hosted environment case +// http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object +if (window.cordova && !(window.cordova instanceof HTMLElement)) { throw new Error("cordova already defined"); } @@ -1291,10 +1293,12 @@ define("cordova/init_b", function(require, exports, module) { var channel = require('cordova/channel'); var cordova = require('cordova'); +var modulemapper = require('cordova/modulemapper'); var platform = require('cordova/platform'); +var pluginloader = require('cordova/pluginloader'); var utils = require('cordova/utils'); -var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady]; +var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady, channel.onPluginsReady]; // setting exec cordova.exec = require('cordova/exec'); @@ -1379,10 +1383,19 @@ if (window._nativeReady) { // Call the platform-specific initialization. platform.bootstrap && platform.bootstrap(); +// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js. +// The delay allows the attached modules to be defined before the plugin loader looks for them. +setTimeout(function() { + pluginloader.load(function() { + channel.onPluginsReady.fire(); + }); +}, 0); + /** * Create all cordova objects once native side is ready. */ channel.join(function() { + modulemapper.mapModules(window); platform.initialize && platform.initialize(); @@ -1499,11 +1512,111 @@ exports.getOriginalSymbol = function(context, symbolPath) { exports.reset(); +}); + +// file: src/common/modulemapper_b.js +define("cordova/modulemapper_b", function(require, exports, module) { + +var builder = require('cordova/builder'), + symbolList = [], + deprecationMap; + +exports.reset = function() { + symbolList = []; + deprecationMap = {}; +}; + +function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessage) { + symbolList.push(strategy, moduleName, symbolPath); + if (opt_deprecationMessage) { + deprecationMap[symbolPath] = opt_deprecationMessage; + } +} + +// Note: Android 2.3 does have Function.bind(). +exports.clobbers = function(moduleName, symbolPath, opt_deprecationMessage) { + addEntry('c', moduleName, symbolPath, opt_deprecationMessage); +}; + +exports.merges = function(moduleName, symbolPath, opt_deprecationMessage) { + addEntry('m', moduleName, symbolPath, opt_deprecationMessage); +}; + +exports.defaults = function(moduleName, symbolPath, opt_deprecationMessage) { + addEntry('d', moduleName, symbolPath, opt_deprecationMessage); +}; + +exports.runs = function(moduleName) { + addEntry('r', moduleName, null); +}; + +function prepareNamespace(symbolPath, context) { + if (!symbolPath) { + return context; + } + var parts = symbolPath.split('.'); + var cur = context; + for (var i = 0, part; part = parts[i]; ++i) { + cur = cur[part] = cur[part] || {}; + } + return cur; +} + +exports.mapModules = function(context) { + var origSymbols = {}; + context.CDV_origSymbols = origSymbols; + for (var i = 0, len = symbolList.length; i < len; i += 3) { + var strategy = symbolList[i]; + var moduleName = symbolList[i + 1]; + var module = require(moduleName); + // + if (strategy == 'r') { + continue; + } + var symbolPath = symbolList[i + 2]; + var lastDot = symbolPath.lastIndexOf('.'); + var namespace = symbolPath.substr(0, lastDot); + var lastName = symbolPath.substr(lastDot + 1); + + var deprecationMsg = symbolPath in deprecationMap ? 'Access made to deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null; + var parentObj = prepareNamespace(namespace, context); + var target = parentObj[lastName]; + + if (strategy == 'm' && target) { + builder.recursiveMerge(target, module); + } else if ((strategy == 'd' && !target) || (strategy != 'd')) { + if (!(symbolPath in origSymbols)) { + origSymbols[symbolPath] = target; + } + builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, deprecationMsg); + } + } +}; + +exports.getOriginalSymbol = function(context, symbolPath) { + var origSymbols = context.CDV_origSymbols; + if (origSymbols && (symbolPath in origSymbols)) { + return origSymbols[symbolPath]; + } + var parts = symbolPath.split('.'); + var obj = context; + for (var i = 0; i < parts.length; ++i) { + obj = obj && obj[parts[i]]; + } + return obj; +}; + +exports.reset(); + + }); // file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/platform.js define("cordova/platform", function(require, exports, module) { +// The last resume event that was received that had the result of a plugin call. +var lastResumeEvent = null; + module.exports = { id: 'android', bootstrap: function() { @@ -1543,6 +1656,19 @@ module.exports = { bindButtonChannel('volumeup'); bindButtonChannel('volumedown'); + // The resume event is not "sticky", but it is possible that the event + // will contain the result of a plugin call. We need to ensure that the + // plugin result is delivered even after the event is fired (CB-10498) + var cordovaAddEventListener = document.addEventListener; + + document.addEventListener = function(evt, handler, capture) { + cordovaAddEventListener(evt, handler, capture); + + if (evt === 'resume' && lastResumeEvent) { + handler(lastResumeEvent); + } + }; + // Let native code know we are all done on the JS side. // Native code will then un-hide the WebView. channel.onCordovaReady.subscribe(function() { @@ -1564,12 +1690,30 @@ function onMessageFromNative(msg) { case 'searchbutton': // App life cycle events case 'pause': - case 'resume': // Volume events case 'volumedownbutton': case 'volumeupbutton': cordova.fireDocumentEvent(action); break; + case 'resume': + if(arguments.length > 1 && msg.pendingResult) { + if(arguments.length === 2) { + msg.pendingResult.result = arguments[1]; + } else { + // The plugin returned a multipart message + var res = []; + for(var i = 1; i < arguments.length; i++) { + res.push(arguments[i]); + } + msg.pendingResult.result = res; + } + + // Save the plugin result so that it can be delivered to the js + // even if they miss the initial firing of the event + lastResumeEvent = msg; + } + cordova.fireDocumentEvent(action, msg); + break; default: throw new Error('Unknown event action ' + action); } @@ -1673,10 +1817,6 @@ module.exports = { // file: src/common/pluginloader.js define("cordova/pluginloader", function(require, exports, module) { -/* - NOTE: this file is NOT used when we use the browserify workflow -*/ - var modulemapper = require('cordova/modulemapper'); var urlutil = require('cordova/urlutil'); @@ -1784,6 +1924,54 @@ exports.load = function(callback) { }; +}); + +// file: src/common/pluginloader_b.js +define("cordova/pluginloader_b", function(require, exports, module) { + +var modulemapper = require('cordova/modulemapper'); + +// Handler for the cordova_plugins.js content. +// See plugman's plugin_loader.js for the details of this object. +function handlePluginsObject(moduleList) { + // if moduleList is not defined or empty, we've nothing to do + if (!moduleList || !moduleList.length) { + return; + } + + // Loop through all the modules and then through their clobbers and merges. + for (var i = 0, module; module = moduleList[i]; i++) { + if (module.clobbers && module.clobbers.length) { + for (var j = 0; j < module.clobbers.length; j++) { + modulemapper.clobbers(module.id, module.clobbers[j]); + } + } + + if (module.merges && module.merges.length) { + for (var k = 0; k < module.merges.length; k++) { + modulemapper.merges(module.id, module.merges[k]); + } + } + + // Finally, if runs is truthy we want to simply require() the module. + if (module.runs) { + modulemapper.runs(module.id); + } + } +} + +// Loads all plugins' js-modules. Plugin loading is syncronous in browserified bundle +// but the method accepts callback to be compatible with non-browserify flow. +// onDeviceReady is blocked on onPluginsReady. onPluginsReady is fired when there are +// no plugins to load, or they are all done. +exports.load = function(callback) { + var moduleList = require("cordova/plugin_list"); + handlePluginsObject(moduleList); + + callback(); +}; + + }); // file: src/common/urlutil.js diff --git a/platforms/android/assets/www/cordova_plugins.js b/platforms/android/assets/www/cordova_plugins.js index f4cde36..ad14214 100644 --- a/platforms/android/assets/www/cordova_plugins.js +++ b/platforms/android/assets/www/cordova_plugins.js @@ -1,9 +1,15 @@ cordova.define('cordova/plugin_list', function(require, exports, module) { module.exports = [ + { + "file": "plugins/at.gofg.sportscomputer.powermanagement/www/powermanagement.js", + "id": "at.gofg.sportscomputer.powermanagement.device", + "clobbers": [ + "window.powerManagement" + ] + }, { "file": "plugins/com.lampa.startapp/www/startApp.js", "id": "com.lampa.startapp.startapp", - "pluginId": "com.lampa.startapp", "merges": [ "navigator.startApp" ] @@ -11,15 +17,28 @@ module.exports = [ { "file": "plugins/com.shukriadams.micVolume/www/micVolume.js", "id": "com.shukriadams.micVolume.MicVolume", - "pluginId": "com.shukriadams.micVolume", "clobbers": [ "window.micVolume" ] }, + { + "file": "plugins/cordova-plugin-device/www/device.js", + "id": "cordova-plugin-device.device", + "clobbers": [ + "device" + ] + }, + { + "file": "plugins/cordova-plugin-background-mode/www/background-mode.js", + "id": "cordova-plugin-background-mode.BackgroundMode", + "clobbers": [ + "cordova.plugins.backgroundMode", + "plugin.backgroundMode" + ] + }, { "file": "plugins/cordova-plugin-device-motion/www/Acceleration.js", "id": "cordova-plugin-device-motion.Acceleration", - "pluginId": "cordova-plugin-device-motion", "clobbers": [ "Acceleration" ] @@ -27,21 +46,13 @@ module.exports = [ { "file": "plugins/cordova-plugin-device-motion/www/accelerometer.js", "id": "cordova-plugin-device-motion.accelerometer", - "pluginId": "cordova-plugin-device-motion", "clobbers": [ "navigator.accelerometer" ] }, - { - "file": "plugins/cordova-plugin-whitelist/whitelist.js", - "id": "cordova-plugin-whitelist.whitelist", - "pluginId": "cordova-plugin-whitelist", - "runs": true - }, { "file": "plugins/cordova-plugin-dialogs/www/notification.js", "id": "cordova-plugin-dialogs.notification", - "pluginId": "cordova-plugin-dialogs", "merges": [ "navigator.notification" ] @@ -49,40 +60,18 @@ module.exports = [ { "file": "plugins/cordova-plugin-dialogs/www/android/notification.js", "id": "cordova-plugin-dialogs.notification_android", - "pluginId": "cordova-plugin-dialogs", "merges": [ "navigator.notification" ] }, { - "file": "plugins/cordova-plugin-device/www/device.js", - "id": "cordova-plugin-device.device", - "pluginId": "cordova-plugin-device", - "clobbers": [ - "device" - ] - }, - { - "file": "plugins/cordova-plugin-background-mode/www/background-mode.js", - "id": "cordova-plugin-background-mode.BackgroundMode", - "pluginId": "cordova-plugin-background-mode", - "clobbers": [ - "cordova.plugins.backgroundMode", - "plugin.backgroundMode" - ] - }, - { - "file": "plugins/at.gofg.sportscomputer.powermanagement/www/powermanagement.js", - "id": "at.gofg.sportscomputer.powermanagement.device", - "pluginId": "at.gofg.sportscomputer.powermanagement", - "clobbers": [ - "window.powerManagement" - ] + "file": "plugins/cordova-plugin-whitelist/whitelist.js", + "id": "cordova-plugin-whitelist.whitelist", + "runs": true }, { "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js", "id": "de.appplant.cordova.plugin.local-notification.LocalNotification", - "pluginId": "de.appplant.cordova.plugin.local-notification", "clobbers": [ "cordova.plugins.notification.local", "plugin.notification.local" @@ -91,7 +80,6 @@ module.exports = [ { "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js", "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Core", - "pluginId": "de.appplant.cordova.plugin.local-notification", "clobbers": [ "cordova.plugins.notification.local.core", "plugin.notification.local.core" @@ -100,7 +88,6 @@ module.exports = [ { "file": "plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js", "id": "de.appplant.cordova.plugin.local-notification.LocalNotification.Util", - "pluginId": "de.appplant.cordova.plugin.local-notification", "merges": [ "cordova.plugins.notification.local.core", "plugin.notification.local.core" @@ -110,16 +97,16 @@ module.exports = [ module.exports.metadata = // TOP OF METADATA { + "at.gofg.sportscomputer.powermanagement": "1.1.0", "com.lampa.startapp": "0.0.5", "com.shukriadams.micVolume": "0.1.0", - "cordova-plugin-device-motion": "1.2.0", - "cordova-plugin-whitelist": "1.2.1", - "cordova-plugin-dialogs": "1.2.0", + "cordova-plugin-app-event": "1.2.0", "cordova-plugin-device": "1.1.1", "cordova-plugin-background-mode": "0.6.5", - "at.gofg.sportscomputer.powermanagement": "1.1.0", - "cordova-plugin-app-event": "1.2.0", + "cordova-plugin-device-motion": "1.2.0", + "cordova-plugin-dialogs": "1.2.0", + "cordova-plugin-whitelist": "1.2.1", "de.appplant.cordova.plugin.local-notification": "0.8.4" -} +}; // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/assets/www/plugins/at.gofg.sportscomputer.powermanagement/www/powermanagement.js b/platforms/android/assets/www/plugins/at.gofg.sportscomputer.powermanagement/www/powermanagement.js index a51c286..118dfad 100644 --- a/platforms/android/assets/www/plugins/at.gofg.sportscomputer.powermanagement/www/powermanagement.js +++ b/platforms/android/assets/www/plugins/at.gofg.sportscomputer.powermanagement/www/powermanagement.js @@ -1,4 +1,5 @@ -cordova.define("at.gofg.sportscomputer.powermanagement.device", function(require, exports, module) { /* +cordova.define("at.gofg.sportscomputer.powermanagement.device", function(require, exports, module) { +/* * Copyright 2013 Wolfgang Koller * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/platforms/android/assets/www/plugins/com.lampa.startapp/www/startApp.js b/platforms/android/assets/www/plugins/com.lampa.startapp/www/startApp.js index a1c89f2..2ff7912 100644 --- a/platforms/android/assets/www/plugins/com.lampa.startapp/www/startApp.js +++ b/platforms/android/assets/www/plugins/com.lampa.startapp/www/startApp.js @@ -1,4 +1,5 @@ -cordova.define("com.lampa.startapp.startapp", function(require, exports, module) { /** +cordova.define("com.lampa.startapp.startapp", function(require, exports, module) { +/** com.lampa.startapp https://github.com/lampaa/com.lampa.startapp diff --git a/platforms/android/assets/www/plugins/com.shukriadams.micVolume/www/micVolume.js b/platforms/android/assets/www/plugins/com.shukriadams.micVolume/www/micVolume.js index 7d95be1..3479043 100644 --- a/platforms/android/assets/www/plugins/com.shukriadams.micVolume/www/micVolume.js +++ b/platforms/android/assets/www/plugins/com.shukriadams.micVolume/www/micVolume.js @@ -1,4 +1,5 @@ -cordova.define("com.shukriadams.micVolume.MicVolume", function(require, exports, module) { var micVolume = { +cordova.define("com.shukriadams.micVolume.MicVolume", function(require, exports, module) { +var micVolume = { start: function(successCallback, errorCallback) { cordova.exec( successCallback, // success callback function diff --git a/platforms/android/assets/www/plugins/cordova-plugin-background-mode/www/background-mode.js b/platforms/android/assets/www/plugins/cordova-plugin-background-mode/www/background-mode.js index 86355df..98b3645 100644 --- a/platforms/android/assets/www/plugins/cordova-plugin-background-mode/www/background-mode.js +++ b/platforms/android/assets/www/plugins/cordova-plugin-background-mode/www/background-mode.js @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-background-mode.BackgroundMode", function(require, exports, module) { /* +cordova.define("cordova-plugin-background-mode.BackgroundMode", function(require, exports, module) { +/* Copyright 2013-2014 appPlant UG Licensed to the Apache Software Foundation (ASF) under one diff --git a/platforms/android/assets/www/plugins/cordova-plugin-device-motion/www/Acceleration.js b/platforms/android/assets/www/plugins/cordova-plugin-device-motion/www/Acceleration.js index fd4ea4e..794476b 100644 --- a/platforms/android/assets/www/plugins/cordova-plugin-device-motion/www/Acceleration.js +++ b/platforms/android/assets/www/plugins/cordova-plugin-device-motion/www/Acceleration.js @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-device-motion.Acceleration", function(require, exports, module) { /* +cordova.define("cordova-plugin-device-motion.Acceleration", function(require, exports, module) { +/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file diff --git a/platforms/android/assets/www/plugins/cordova-plugin-device-motion/www/accelerometer.js b/platforms/android/assets/www/plugins/cordova-plugin-device-motion/www/accelerometer.js index ddd7a57..01f533a 100644 --- a/platforms/android/assets/www/plugins/cordova-plugin-device-motion/www/accelerometer.js +++ b/platforms/android/assets/www/plugins/cordova-plugin-device-motion/www/accelerometer.js @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-device-motion.accelerometer", function(require, exports, module) { /* +cordova.define("cordova-plugin-device-motion.accelerometer", function(require, exports, module) { +/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file diff --git a/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js b/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js index ff0c5b4..977dfc0 100644 --- a/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js +++ b/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-device.device", function(require, exports, module) { /* +cordova.define("cordova-plugin-device.device", function(require, exports, module) { +/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file diff --git a/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js b/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js index 07b9237..69cb5a4 100644 --- a/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js +++ b/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-dialogs.notification_android", function(require, exports, module) { /* +cordova.define("cordova-plugin-dialogs.notification_android", function(require, exports, module) { +/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file diff --git a/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js b/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js index b7236a2..3787c0f 100644 --- a/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js +++ b/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-dialogs.notification", function(require, exports, module) { /* +cordova.define("cordova-plugin-dialogs.notification", function(require, exports, module) { +/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file diff --git a/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js b/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js index b83f579..a2ba8a3 100644 --- a/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js +++ b/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js @@ -1,4 +1,5 @@ -cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports, module) { /* +cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports, module) { +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information diff --git a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js index 2ec6d3d..d3807de 100644 --- a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js +++ b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-core.js @@ -1,4 +1,5 @@ -cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification.Core", function(require, exports, module) { /* +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification.Core", function(require, exports, module) { +/* * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. * * @APPPLANT_LICENSE_HEADER_START@ diff --git a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js index b6237c2..b206de9 100644 --- a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js +++ b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification-util.js @@ -1,4 +1,5 @@ -cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification.Util", function(require, exports, module) { /* +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification.Util", function(require, exports, module) { +/* * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. * * @APPPLANT_LICENSE_HEADER_START@ diff --git a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js index 57ebf8a..69b159b 100644 --- a/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js +++ b/platforms/android/assets/www/plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js @@ -1,4 +1,5 @@ -cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification", function(require, exports, module) { /* +cordova.define("de.appplant.cordova.plugin.local-notification.LocalNotification", function(require, exports, module) { +/* * Copyright (c) 2013-2015 by appPlant UG. All rights reserved. * * @APPPLANT_LICENSE_HEADER_START@ diff --git a/platforms/android/build.gradle b/platforms/android/build.gradle index 3e75cfa..d0b8b61 100644 --- a/platforms/android/build.gradle +++ b/platforms/android/build.gradle @@ -30,20 +30,10 @@ buildscript { // installed version of Gradle. This dependency is documented at // http://tools.android.com/tech-docs/new-build-system/version-compatibility // and https://issues.apache.org/jira/browse/CB-8143 - if (gradle.gradleVersion >= "2.2") { - dependencies { - classpath 'com.android.tools.build:gradle:1.0.0+' - } - } else if (gradle.gradleVersion >= "2.1") { - dependencies { - classpath 'com.android.tools.build:gradle:0.14.0+' - } - } else { - dependencies { - classpath 'com.android.tools.build:gradle:0.12.0+' - } + dependencies { + classpath 'com.android.tools.build:gradle:1.5.0' } -} + } // Allow plugins to declare Maven dependencies via build-extras.gradle. repositories { @@ -51,7 +41,7 @@ repositories { } task wrapper(type: Wrapper) { - gradleVersion = '2.2.1' + gradleVersion = '2.8' } // Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties. @@ -173,24 +163,30 @@ android { defaultConfig { versionCode cdvVersionCode ?: Integer.parseInt("" + privateHelpers.extractIntFromManifest("versionCode") + "0") + applicationId privateHelpers.extractStringFromManifest("package") + if (cdvMinSdkVersion != null) { minSdkVersion cdvMinSdkVersion } } + lintOptions { + abortOnError false; + } + compileSdkVersion cdvCompileSdkVersion buildToolsVersion cdvBuildToolsVersion if (Boolean.valueOf(cdvBuildMultipleApks)) { productFlavors { armv7 { - versionCode cdvVersionCode ?: defaultConfig.versionCode + 2 + versionCode defaultConfig.versionCode + 2 ndk { abiFilters "armeabi-v7a", "" } } x86 { - versionCode cdvVersionCode ?: defaultConfig.versionCode + 4 + versionCode defaultConfig.versionCode + 4 ndk { abiFilters "x86", "" } diff --git a/platforms/android/cordova/.jshintrc b/platforms/android/cordova/.jshintrc new file mode 100644 index 0000000..89a121c --- /dev/null +++ b/platforms/android/cordova/.jshintrc @@ -0,0 +1,10 @@ +{ + "node": true + , "bitwise": true + , "undef": true + , "trailing": true + , "quotmark": true + , "indent": 4 + , "unused": "vars" + , "latedef": "nofunc" +} diff --git a/platforms/android/cordova/Api.js b/platforms/android/cordova/Api.js new file mode 100644 index 0000000..ad6f71c --- /dev/null +++ b/platforms/android/cordova/Api.js @@ -0,0 +1,504 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var Q = require('q'); +var fs = require('fs'); +var path = require('path'); +var shell = require('shelljs'); + +var CordovaError = require('cordova-common').CordovaError; +var PlatformJson = require('cordova-common').PlatformJson; +var ActionStack = require('cordova-common').ActionStack; +var AndroidProject = require('./lib/AndroidProject'); +var PlatformMunger = require('cordova-common').ConfigChanges.PlatformMunger; +var PluginInfoProvider = require('cordova-common').PluginInfoProvider; + +var ConsoleLogger = require('./lib/ConsoleLogger'); +var pluginHandlers = require('./lib/pluginHandlers'); + +var PLATFORM = 'android'; + +/** + * Class, that acts as abstraction over particular platform. Encapsulates the + * platform's properties and methods. + * + * Platform that implements own PlatformApi instance _should implement all + * prototype methods_ of this class to be fully compatible with cordova-lib. + * + * The PlatformApi instance also should define the following field: + * + * * platform: String that defines a platform name. + */ +function Api(platform, platformRootDir, events) { + this.platform = PLATFORM; + this.root = path.resolve(__dirname, '..'); + this.events = events || ConsoleLogger.get(); + // NOTE: trick to share one EventEmitter instance across all js code + require('cordova-common').events = this.events; + + this._platformJson = PlatformJson.load(this.root, platform); + this._pluginInfoProvider = new PluginInfoProvider(); + this._munger = new PlatformMunger(this.platform, this.root, this._platformJson, this._pluginInfoProvider); + + var self = this; + + this.locations = { + root: self.root, + www: path.join(self.root, 'assets/www'), + platformWww: path.join(self.root, 'platform_www'), + configXml: path.join(self.root, 'res/xml/config.xml'), + defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'), + strings: path.join(self.root, 'res/values/strings.xml'), + manifest: path.join(self.root, 'AndroidManifest.xml'), + // NOTE: Due to platformApi spec we need to return relative paths here + cordovaJs: 'bin/templates/project/assets/www/cordova.js', + cordovaJsSrc: 'cordova-js-src' + }; +} + +/** + * Installs platform to specified directory and creates a platform project. + * + * @param {String} destination Destination directory, where insatll platform to + * @param {ConfigParser} [config] ConfgiParser instance, used to retrieve + * project creation options, such as package id and project name. + * @param {Object} [options] An options object. The most common options are: + * @param {String} [options.customTemplate] A path to custom template, that + * should override the default one from platform. + * @param {Boolean} [options.link] Flag that indicates that platform's + * sources will be linked to installed platform instead of copying. + * @param {EventEmitter} [events] An EventEmitter instance that will be used for + * logging purposes. If no EventEmitter provided, all events will be logged to + * console + * + * @return {Promise} Promise either fulfilled with PlatformApi + * instance or rejected with CordovaError. + */ +Api.createPlatform = function (destination, config, options, events) { + return require('../../lib/create') + .create(destination, config, options, events || ConsoleLogger.get()) + .then(function (destination) { + var PlatformApi = require(path.resolve(destination, 'cordova/Api')); + return new PlatformApi(PLATFORM, destination, events); + }); +}; + +/** + * Updates already installed platform. + * + * @param {String} destination Destination directory, where platform installed + * @param {Object} [options] An options object. The most common options are: + * @param {String} [options.customTemplate] A path to custom template, that + * should override the default one from platform. + * @param {Boolean} [options.link] Flag that indicates that platform's + * sources will be linked to installed platform instead of copying. + * @param {EventEmitter} [events] An EventEmitter instance that will be used for + * logging purposes. If no EventEmitter provided, all events will be logged to + * console + * + * @return {Promise} Promise either fulfilled with PlatformApi + * instance or rejected with CordovaError. + */ +Api.updatePlatform = function (destination, options, events) { + return require('../../lib/create') + .update(destination, options, events || ConsoleLogger.get()) + .then(function (destination) { + var PlatformApi = require(path.resolve(destination, 'cordova/Api')); + return new PlatformApi('android', destination, events); + }); +}; + +/** + * Gets a CordovaPlatform object, that represents the platform structure. + * + * @return {CordovaPlatform} A structure that contains the description of + * platform's file structure and other properties of platform. + */ +Api.prototype.getPlatformInfo = function () { + var result = {}; + result.locations = this.locations; + result.root = this.root; + result.name = this.platform; + result.version = require('./version'); + result.projectConfig = this._config; + + return result; +}; + +/** + * Updates installed platform with provided www assets and new app + * configuration. This method is required for CLI workflow and will be called + * each time before build, so the changes, made to app configuration and www + * code, will be applied to platform. + * + * @param {CordovaProject} cordovaProject A CordovaProject instance, that defines a + * project structure and configuration, that should be applied to platform + * (contains project's www location and ConfigParser instance for project's + * config). + * + * @return {Promise} Return a promise either fulfilled, or rejected with + * CordovaError instance. + */ +Api.prototype.prepare = function (cordovaProject) { + return require('./lib/prepare').prepare.call(this, cordovaProject); +}; + +/** + * Installs a new plugin into platform. This method only copies non-www files + * (sources, libs, etc.) to platform. It also doesn't resolves the + * dependencies of plugin. Both of handling of www files, such as assets and + * js-files and resolving dependencies are the responsibility of caller. + * + * @param {PluginInfo} plugin A PluginInfo instance that represents plugin + * that will be installed. + * @param {Object} installOptions An options object. Possible options below: + * @param {Boolean} installOptions.link: Flag that specifies that plugin + * sources will be symlinked to app's directory instead of copying (if + * possible). + * @param {Object} installOptions.variables An object that represents + * variables that will be used to install plugin. See more details on plugin + * variables in documentation: + * https://cordova.apache.org/docs/en/4.0.0/plugin_ref_spec.md.html + * + * @return {Promise} Return a promise either fulfilled, or rejected with + * CordovaError instance. + */ +Api.prototype.addPlugin = function (plugin, installOptions) { + + if (!plugin || plugin.constructor.name !== 'PluginInfo') + return Q.reject(new CordovaError('The parameter is incorrect. The first parameter to addPlugin should be a PluginInfo instance')); + + installOptions = installOptions || {}; + installOptions.variables = installOptions.variables || {}; + + var self = this; + var actions = new ActionStack(); + var project = AndroidProject.getProjectFile(this.root); + + // gather all files needs to be handled during install + plugin.getFilesAndFrameworks(this.platform) + .concat(plugin.getAssets(this.platform)) + .concat(plugin.getJsModules(this.platform)) + .forEach(function(item) { + actions.push(actions.createAction( + pluginHandlers.getInstaller(item.itemType), [item, plugin, project, installOptions], + pluginHandlers.getUninstaller(item.itemType), [item, plugin, project, installOptions])); + }); + + // run through the action stack + return actions.process(this.platform) + .then(function () { + if (project) { + project.write(); + } + + // Add PACKAGE_NAME variable into vars + if (!installOptions.variables.PACKAGE_NAME) { + installOptions.variables.PACKAGE_NAME = project.getPackageName(); + } + + self._munger + // Ignore passed `is_top_level` option since platform itself doesn't know + // anything about managing dependencies - it's responsibility of caller. + .add_plugin_changes(plugin, installOptions.variables, /*is_top_level=*/true, /*should_increment=*/true) + .save_all(); + + if (plugin.getFrameworks(self.platform).length > 0) { + self.events.emit('verbose', 'Updating build files since android plugin contained '); + require('./lib/builders/builders').getBuilder('gradle').prepBuildFiles(); + } + + var targetDir = installOptions.usePlatformWww ? + self.locations.platformWww : + self.locations.www; + + self._addModulesInfo(plugin, targetDir); + }); +}; + +/** + * Removes an installed plugin from platform. + * + * Since method accepts PluginInfo instance as input parameter instead of plugin + * id, caller shoud take care of managing/storing PluginInfo instances for + * future uninstalls. + * + * @param {PluginInfo} plugin A PluginInfo instance that represents plugin + * that will be installed. + * + * @return {Promise} Return a promise either fulfilled, or rejected with + * CordovaError instance. + */ +Api.prototype.removePlugin = function (plugin, uninstallOptions) { + + if (!plugin || plugin.constructor.name !== 'PluginInfo') + return Q.reject(new CordovaError('The parameter is incorrect. The first parameter to addPlugin should be a PluginInfo instance')); + + var self = this; + var actions = new ActionStack(); + var project = AndroidProject.getProjectFile(this.root); + + // queue up plugin files + plugin.getFilesAndFrameworks(this.platform) + .concat(plugin.getAssets(this.platform)) + .concat(plugin.getJsModules(this.platform)) + .forEach(function(item) { + actions.push(actions.createAction( + pluginHandlers.getUninstaller(item.itemType), [item, plugin, project, uninstallOptions], + pluginHandlers.getInstaller(item.itemType), [item, plugin, project, uninstallOptions])); + }); + + // run through the action stack + return actions.process(this.platform) + .then(function() { + if (project) { + project.write(); + } + + self._munger + // Ignore passed `is_top_level` option since platform itself doesn't know + // anything about managing dependencies - it's responsibility of caller. + .remove_plugin_changes(plugin, /*is_top_level=*/true) + .save_all(); + + if (plugin.getFrameworks(self.platform).length > 0) { + self.events.emit('verbose', 'Updating build files since android plugin contained '); + require('./lib/builders/builders').getBuilder('gradle').prepBuildFiles(); + } + + var targetDir = uninstallOptions.usePlatformWww ? + self.locations.platformWww : + self.locations.www; + + self._removeModulesInfo(plugin, targetDir); + }); +}; + +/** + * Builds an application package for current platform. + * + * @param {Object} buildOptions A build options. This object's structure is + * highly depends on platform's specific. The most common options are: + * @param {Boolean} buildOptions.debug Indicates that packages should be + * built with debug configuration. This is set to true by default unless the + * 'release' option is not specified. + * @param {Boolean} buildOptions.release Indicates that packages should be + * built with release configuration. If not set to true, debug configuration + * will be used. + * @param {Boolean} buildOptions.device Specifies that built app is intended + * to run on device + * @param {Boolean} buildOptions.emulator: Specifies that built app is + * intended to run on emulator + * @param {String} buildOptions.target Specifies the device id that will be + * used to run built application. + * @param {Boolean} buildOptions.nobuild Indicates that this should be a + * dry-run call, so no build artifacts will be produced. + * @param {String[]} buildOptions.archs Specifies chip architectures which + * app packages should be built for. List of valid architectures is depends on + * platform. + * @param {String} buildOptions.buildConfig The path to build configuration + * file. The format of this file is depends on platform. + * @param {String[]} buildOptions.argv Raw array of command-line arguments, + * passed to `build` command. The purpose of this property is to pass a + * platform-specific arguments, and eventually let platform define own + * arguments processing logic. + * + * @return {Promise} A promise either fulfilled with an array of build + * artifacts (application packages) if package was built successfully, + * or rejected with CordovaError. The resultant build artifact objects is not + * strictly typed and may conatin arbitrary set of fields as in sample below. + * + * { + * architecture: 'x86', + * buildType: 'debug', + * path: '/path/to/build', + * type: 'app' + * } + * + * The return value in most cases will contain only one item but in some cases + * there could be multiple items in output array, e.g. when multiple + * arhcitectures is specified. + */ +Api.prototype.build = function (buildOptions) { + var self = this; + return require('./lib/check_reqs').run() + .then(function () { + return require('./lib/build').run.call(self, buildOptions); + }) + .then(function (buildResults) { + // Cast build result to array of build artifacts + return buildResults.apkPaths.map(function (apkPath) { + return { + buildType: buildResults.buildType, + buildMethod: buildResults.buildMethod, + path: apkPath, + type: 'apk' + }; + }); + }); +}; + +/** + * Builds an application package for current platform and runs it on + * specified/default device. If no 'device'/'emulator'/'target' options are + * specified, then tries to run app on default device if connected, otherwise + * runs the app on emulator. + * + * @param {Object} runOptions An options object. The structure is the same + * as for build options. + * + * @return {Promise} A promise either fulfilled if package was built and ran + * successfully, or rejected with CordovaError. + */ +Api.prototype.run = function(runOptions) { + var self = this; + return require('./lib/check_reqs').run() + .then(function () { + return require('./lib/run').run.call(self, runOptions); + }); +}; + +/** + * Cleans out the build artifacts from platform's directory. + * + * @return {Promise} Return a promise either fulfilled, or rejected with + * CordovaError. + */ +Api.prototype.clean = function(cleanOptions) { + var self = this; + return require('./lib/check_reqs').run() + .then(function () { + return require('./lib/build').runClean.call(self, cleanOptions); + }); +}; + +/** + * Performs a requirements check for current platform. Each platform defines its + * own set of requirements, which should be resolved before platform can be + * built successfully. + * + * @return {Promise} Promise, resolved with set of Requirement + * objects for current platform. + */ +Api.prototype.requirements = function() { + return require('./lib/check_reqs').check_all(); +}; + +module.exports = Api; + +/** + * Removes the specified modules from list of installed modules and updates + * platform_json and cordova_plugins.js on disk. + * + * @param {PluginInfo} plugin PluginInfo instance for plugin, which modules + * needs to be added. + * @param {String} targetDir The directory, where updated cordova_plugins.js + * should be written to. + */ +Api.prototype._addModulesInfo = function(plugin, targetDir) { + var installedModules = this._platformJson.root.modules || []; + + var installedPaths = installedModules.map(function (installedModule) { + return installedModule.file; + }); + + var modulesToInstall = plugin.getJsModules(this.platform) + .filter(function (moduleToInstall) { + return installedPaths.indexOf(moduleToInstall.file) === -1; + }).map(function (moduleToInstall) { + var moduleName = plugin.id + '.' + ( moduleToInstall.name || moduleToInstall.src.match(/([^\/]+)\.js/)[1] ); + var obj = { + file: ['plugins', plugin.id, moduleToInstall.src].join('/'), + id: moduleName + }; + if (moduleToInstall.clobbers.length > 0) { + obj.clobbers = moduleToInstall.clobbers.map(function(o) { return o.target; }); + } + if (moduleToInstall.merges.length > 0) { + obj.merges = moduleToInstall.merges.map(function(o) { return o.target; }); + } + if (moduleToInstall.runs) { + obj.runs = true; + } + + return obj; + }); + + this._platformJson.root.modules = installedModules.concat(modulesToInstall); + if (!this._platformJson.root.plugin_metadata) { + this._platformJson.root.plugin_metadata = {}; + } + this._platformJson.root.plugin_metadata[plugin.id] = plugin.version; + + this._writePluginModules(targetDir); + this._platformJson.save(); +}; + +/** + * Removes the specified modules from list of installed modules and updates + * platform_json and cordova_plugins.js on disk. + * + * @param {PluginInfo} plugin PluginInfo instance for plugin, which modules + * needs to be removed. + * @param {String} targetDir The directory, where updated cordova_plugins.js + * should be written to. + */ +Api.prototype._removeModulesInfo = function(plugin, targetDir) { + var installedModules = this._platformJson.root.modules || []; + var modulesToRemove = plugin.getJsModules(this.platform) + .map(function (jsModule) { + return ['plugins', plugin.id, jsModule.src].join('/'); + }); + + var updatedModules = installedModules + .filter(function (installedModule) { + return (modulesToRemove.indexOf(installedModule.file) === -1); + }); + + this._platformJson.root.modules = updatedModules; + if (this._platformJson.root.plugin_metadata) { + delete this._platformJson.root.plugin_metadata[plugin.id]; + } + + this._writePluginModules(targetDir); + this._platformJson.save(); +}; + +/** + * Fetches all installed modules, generates cordova_plugins contents and writes + * it to file. + * + * @param {String} targetDir Directory, where write cordova_plugins.js to. + * Ususally it is either /www or /platform_www + * directories. + */ +Api.prototype._writePluginModules = function (targetDir) { + // Write out moduleObjects as JSON wrapped in a cordova module to cordova_plugins.js + var final_contents = 'cordova.define(\'cordova/plugin_list\', function(require, exports, module) {\n'; + final_contents += 'module.exports = ' + JSON.stringify(this._platformJson.root.modules, null, ' ') + ';\n'; + final_contents += 'module.exports.metadata = \n'; + final_contents += '// TOP OF METADATA\n'; + + final_contents += JSON.stringify(this._platformJson.root.plugin_metadata, null, 4) + ';\n'; + final_contents += '// BOTTOM OF METADATA\n'; + final_contents += '});'; // Close cordova.define. + + shell.mkdir('-p', targetDir); + fs.writeFileSync(path.join(targetDir, 'cordova_plugins.js'), final_contents, 'utf-8'); +}; diff --git a/platforms/android/cordova/build b/platforms/android/cordova/build index 3c3aee4..de86a36 100755 --- a/platforms/android/cordova/build +++ b/platforms/android/cordova/build @@ -19,23 +19,30 @@ under the License. */ -var build = require('./lib/build'), - reqs = require('./lib/check_reqs'), - args = process.argv; +var args = process.argv; +var Api = require('./Api'); +var nopt = require('nopt'); +var path = require('path'); // Support basic help commands -if(args[2] == '--help' || - args[2] == '/?' || - args[2] == '-h' || - args[2] == 'help' || - args[2] == '-help' || - args[2] == '/help') { - build.help(); -} else { - reqs.run().done(function() { - return build.run(args.slice(2)); - }, function(err) { - console.error(err); - process.exit(2); - }); -} +if(['--help', '/?', '-h', 'help', '-help', '/help'].indexOf(process.argv[2]) >= 0) + require('./lib/build').help(); + +// Do some basic argument parsing +var buildOpts = nopt({ + 'verbose' : Boolean, + 'silent' : Boolean, + 'debug' : Boolean, + 'release' : Boolean, + 'nobuild': Boolean, + 'buildConfig' : path +}, { 'd' : '--verbose' }); + +// Make buildOptions compatible with PlatformApi build method spec +buildOpts.argv = buildOpts.argv.original; + +new Api().build(buildOpts) +.catch(function(err) { + console.error(err.stack); + process.exit(2); +}); diff --git a/platforms/android/cordova/clean b/platforms/android/cordova/clean index d9a7d49..1f4a53d 100755 --- a/platforms/android/cordova/clean +++ b/platforms/android/cordova/clean @@ -19,26 +19,18 @@ under the License. */ -var build = require('./lib/build'), - reqs = require('./lib/check_reqs'), - args = process.argv; +var Api = require('./Api'); var path = require('path'); // Support basic help commands -if(args[2] == '--help' || - args[2] == '/?' || - args[2] == '-h' || - args[2] == 'help' || - args[2] == '-help' || - args[2] == '/help') { +if(['--help', '/?', '-h', 'help', '-help', '/help'].indexOf(process.argv[2]) >= 0) { console.log('Usage: ' + path.relative(process.cwd(), process.argv[1])); console.log('Cleans the project directory.'); process.exit(0); -} else { - reqs.run().done(function() { - return build.runClean(args.slice(2)); - }, function(err) { - console.error(err); - process.exit(2); - }); } + +new Api().clean({argv: process.argv.slice(2)}) +.catch(function(err) { + console.error(err.stack); + process.exit(2); +}); diff --git a/platforms/android/cordova/lib/Adb.js b/platforms/android/cordova/lib/Adb.js new file mode 100644 index 0000000..98cd990 --- /dev/null +++ b/platforms/android/cordova/lib/Adb.js @@ -0,0 +1,96 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var Q = require('q'); +var os = require('os'); +var events = require('cordova-common').events; +var spawn = require('cordova-common').superspawn.spawn; +var CordovaError = require('cordova-common').CordovaError; + +var Adb = {}; + +function isDevice(line) { + return line.match(/\w+\tdevice/) && !line.match(/emulator/); +} + +function isEmulator(line) { + return line.match(/device/) && line.match(/emulator/); +} + +/** + * Lists available/connected devices and emulators + * + * @param {Object} opts Various options + * @param {Boolean} opts.emulators Specifies whether this method returns + * emulators only + * + * @return {Promise} list of available/connected + * devices/emulators + */ +Adb.devices = function (opts) { + return spawn('adb', ['devices'], {cwd: os.tmpdir()}) + .then(function(output) { + return output.split('\n').filter(function (line) { + // Filter out either real devices or emulators, depending on options + return (line && opts && opts.emulators) ? isEmulator(line) : isDevice(line); + }).map(function (line) { + return line.replace(/\tdevice/, '').replace('\r', ''); + }); + }); +}; + +Adb.install = function (target, packagePath, opts) { + events.emit('verbose', 'Installing apk ' + packagePath + ' on ' + target + '...'); + var args = ['-s', target, 'install']; + if (opts && opts.replace) args.push('-r'); + return spawn('adb', args.concat(packagePath), {cwd: os.tmpdir()}) + .then(function(output) { + // 'adb install' seems to always returns no error, even if installation fails + // so we catching output to detect installation failure + if (output.match(/Failure/)) + return Q.reject(new CordovaError('Failed to install apk to device: ' + output)); + }); +}; + +Adb.uninstall = function (target, packageId) { + events.emit('verbose', 'Uninstalling ' + packageId + ' from ' + target + '...'); + return spawn('adb', ['-s', target, 'uninstall', packageId], {cwd: os.tmpdir()}); +}; + +Adb.shell = function (target, shellCommand) { + events.emit('verbose', 'Running command "' + shellCommand + '" on ' + target + '...'); + var args = ['-s', target, 'shell']; + shellCommand = shellCommand.split(/\s+/); + return spawn('adb', args.concat(shellCommand), {cwd: os.tmpdir()}) + .catch(function (output) { + return Q.reject(new CordovaError('Failed to execute shell command "' + + shellCommand + '"" on device: ' + output)); + }); +}; + +Adb.start = function (target, activityName) { + events.emit('verbose', 'Starting application "' + activityName + '" on ' + target + '...'); + return Adb.shell(target, 'am start -W -a android.intent.action.MAIN -n' + activityName) + .catch(function (output) { + return Q.reject(new CordovaError('Failed to start application "' + + activityName + '"" on device: ' + output)); + }); +}; + +module.exports = Adb; diff --git a/platforms/android/cordova/lib/AndroidManifest.js b/platforms/android/cordova/lib/AndroidManifest.js new file mode 100644 index 0000000..3654ada --- /dev/null +++ b/platforms/android/cordova/lib/AndroidManifest.js @@ -0,0 +1,161 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var fs = require('fs'); +var et = require('elementtree'); +var xml= require('cordova-common').xmlHelpers; + +var DEFAULT_ORIENTATION = 'default'; + +/** Wraps an AndroidManifest file */ +function AndroidManifest(path) { + this.path = path; + this.doc = xml.parseElementtreeSync(path); + if (this.doc.getroot().tag !== 'manifest') { + throw new Error(path + ' has incorrect root node name (expected "manifest")'); + } +} + +AndroidManifest.prototype.getVersionName = function() { + return this.doc.getroot().attrib['android:versionName']; +}; + +AndroidManifest.prototype.setVersionName = function(versionName) { + this.doc.getroot().attrib['android:versionName'] = versionName; + return this; +}; + +AndroidManifest.prototype.getVersionCode = function() { + return this.doc.getroot().attrib['android:versionCode']; +}; + +AndroidManifest.prototype.setVersionCode = function(versionCode) { + this.doc.getroot().attrib['android:versionCode'] = versionCode; + return this; +}; + +AndroidManifest.prototype.getPackageId = function() { + /*jshint -W069 */ + return this.doc.getroot().attrib['package']; + /*jshint +W069 */ +}; + +AndroidManifest.prototype.setPackageId = function(pkgId) { + /*jshint -W069 */ + this.doc.getroot().attrib['package'] = pkgId; + /*jshint +W069 */ + return this; +}; + +AndroidManifest.prototype.getActivity = function() { + var activity = this.doc.getroot().find('./application/activity'); + return { + getName: function () { + return activity.attrib['android:name']; + }, + setName: function (name) { + if (!name) { + delete activity.attrib['android:name']; + } else { + activity.attrib['android:name'] = name; + } + return this; + }, + getOrientation: function () { + return activity.attrib['android:screenOrientation']; + }, + setOrientation: function (orientation) { + if (!orientation || orientation.toLowerCase() === DEFAULT_ORIENTATION) { + delete activity.attrib['android:screenOrientation']; + } else { + activity.attrib['android:screenOrientation'] = orientation; + } + return this; + }, + getLaunchMode: function () { + return activity.attrib['android:launchMode']; + }, + setLaunchMode: function (launchMode) { + if (!launchMode) { + delete activity.attrib['android:launchMode']; + } else { + activity.attrib['android:launchMode'] = launchMode; + } + return this; + } + }; +}; + +['minSdkVersion', 'maxSdkVersion', 'targetSdkVersion'] +.forEach(function(sdkPrefName) { + // Copy variable reference to avoid closure issues + var prefName = sdkPrefName; + + AndroidManifest.prototype['get' + capitalize(prefName)] = function() { + var usesSdk = this.doc.getroot().find('./uses-sdk'); + return usesSdk && usesSdk.attrib['android:' + prefName]; + }; + + AndroidManifest.prototype['set' + capitalize(prefName)] = function(prefValue) { + var usesSdk = this.doc.getroot().find('./uses-sdk'); + + if (!usesSdk && prefValue) { // if there is no required uses-sdk element, we should create it first + usesSdk = new et.Element('uses-sdk'); + this.doc.getroot().append(usesSdk); + } + + if (prefValue) { + usesSdk.attrib['android:' + prefName] = prefValue; + } + + return this; + }; +}); + +AndroidManifest.prototype.getDebuggable = function() { + return this.doc.getroot().find('./application').attrib['android:debuggable'] === 'true'; +}; + +AndroidManifest.prototype.setDebuggable = function(value) { + var application = this.doc.getroot().find('./application'); + if (value) { + application.attrib['android:debuggable'] = 'true'; + } else { + // The default value is "false", so we can remove attribute at all. + delete application.attrib['android:debuggable']; + } + return this; +}; + +/** + * Writes manifest to disk syncronously. If filename is specified, then manifest + * will be written to that file + * + * @param {String} [destPath] File to write manifest to. If omitted, + * manifest will be written to file it has been read from. + */ +AndroidManifest.prototype.write = function(destPath) { + fs.writeFileSync(destPath || this.path, this.doc.write({indent: 4}), 'utf-8'); +}; + +module.exports = AndroidManifest; + +function capitalize (str) { + return str.charAt(0).toUpperCase() + str.slice(1); +} diff --git a/platforms/android/cordova/lib/AndroidProject.js b/platforms/android/cordova/lib/AndroidProject.js new file mode 100644 index 0000000..458b84e --- /dev/null +++ b/platforms/android/cordova/lib/AndroidProject.js @@ -0,0 +1,184 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var fs = require('fs'); +var path = require('path'); +var properties_parser = require('properties-parser'); +var AndroidManifest = require('./AndroidManifest'); + +var projectFileCache = {}; + +function addToPropertyList(projectProperties, key, value) { + var i = 1; + while (projectProperties.get(key + '.' + i)) + i++; + + projectProperties.set(key + '.' + i, value); + projectProperties.dirty = true; +} + +function removeFromPropertyList(projectProperties, key, value) { + var i = 1; + var currentValue; + while ((currentValue = projectProperties.get(key + '.' + i))) { + if (currentValue === value) { + while ((currentValue = projectProperties.get(key + '.' + (i + 1)))) { + projectProperties.set(key + '.' + i, currentValue); + i++; + } + projectProperties.set(key + '.' + i); + break; + } + i++; + } + projectProperties.dirty = true; +} + +function getRelativeLibraryPath (parentDir, subDir) { + var libraryPath = path.relative(parentDir, subDir); + return (path.sep == '\\') ? libraryPath.replace(/\\/g, '/') : libraryPath; +} + +function AndroidProject(projectDir) { + this._propertiesEditors = {}; + this._subProjectDirs = {}; + this._dirty = false; + this.projectDir = projectDir; + this.platformWww = path.join(this.projectDir, 'platform_www'); + this.www = path.join(this.projectDir, 'assets/www'); +} + +AndroidProject.getProjectFile = function (projectDir) { + if (!projectFileCache[projectDir]) { + projectFileCache[projectDir] = new AndroidProject(projectDir); + } + + return projectFileCache[projectDir]; +}; + +AndroidProject.purgeCache = function (projectDir) { + if (projectDir) { + delete projectFileCache[projectDir]; + } else { + projectFileCache = {}; + } +}; + +/** + * Reads the package name out of the Android Manifest file + * + * @param {String} projectDir The absolute path to the directory containing the project + * + * @return {String} The name of the package + */ +AndroidProject.prototype.getPackageName = function() { + return new AndroidManifest(path.join(this.projectDir, 'AndroidManifest.xml')).getPackageId(); +}; + +AndroidProject.prototype.getCustomSubprojectRelativeDir = function(plugin_id, src) { + // All custom subprojects are prefixed with the last portion of the package id. + // This is to avoid collisions when opening multiple projects in Eclipse that have subprojects with the same name. + var packageName = this.getPackageName(); + var lastDotIndex = packageName.lastIndexOf('.'); + var prefix = packageName.substring(lastDotIndex + 1); + var subRelativeDir = path.join(plugin_id, prefix + '-' + path.basename(src)); + return subRelativeDir; +}; + +AndroidProject.prototype.addSubProject = function(parentDir, subDir) { + var parentProjectFile = path.resolve(parentDir, 'project.properties'); + var subProjectFile = path.resolve(subDir, 'project.properties'); + var parentProperties = this._getPropertiesFile(parentProjectFile); + // TODO: Setting the target needs to happen only for pre-3.7.0 projects + if (fs.existsSync(subProjectFile)) { + var subProperties = this._getPropertiesFile(subProjectFile); + subProperties.set('target', parentProperties.get('target')); + subProperties.dirty = true; + this._subProjectDirs[subDir] = true; + } + addToPropertyList(parentProperties, 'android.library.reference', getRelativeLibraryPath(parentDir, subDir)); + + this._dirty = true; +}; + +AndroidProject.prototype.removeSubProject = function(parentDir, subDir) { + var parentProjectFile = path.resolve(parentDir, 'project.properties'); + var parentProperties = this._getPropertiesFile(parentProjectFile); + removeFromPropertyList(parentProperties, 'android.library.reference', getRelativeLibraryPath(parentDir, subDir)); + delete this._subProjectDirs[subDir]; + this._dirty = true; +}; + +AndroidProject.prototype.addGradleReference = function(parentDir, subDir) { + var parentProjectFile = path.resolve(parentDir, 'project.properties'); + var parentProperties = this._getPropertiesFile(parentProjectFile); + addToPropertyList(parentProperties, 'cordova.gradle.include', getRelativeLibraryPath(parentDir, subDir)); + this._dirty = true; +}; + +AndroidProject.prototype.removeGradleReference = function(parentDir, subDir) { + var parentProjectFile = path.resolve(parentDir, 'project.properties'); + var parentProperties = this._getPropertiesFile(parentProjectFile); + removeFromPropertyList(parentProperties, 'cordova.gradle.include', getRelativeLibraryPath(parentDir, subDir)); + this._dirty = true; +}; + +AndroidProject.prototype.addSystemLibrary = function(parentDir, value) { + var parentProjectFile = path.resolve(parentDir, 'project.properties'); + var parentProperties = this._getPropertiesFile(parentProjectFile); + addToPropertyList(parentProperties, 'cordova.system.library', value); + this._dirty = true; +}; + +AndroidProject.prototype.removeSystemLibrary = function(parentDir, value) { + var parentProjectFile = path.resolve(parentDir, 'project.properties'); + var parentProperties = this._getPropertiesFile(parentProjectFile); + removeFromPropertyList(parentProperties, 'cordova.system.library', value); + this._dirty = true; +}; + +AndroidProject.prototype.write = function() { + if (!this._dirty) { + return; + } + this._dirty = false; + + for (var filename in this._propertiesEditors) { + var editor = this._propertiesEditors[filename]; + if (editor.dirty) { + fs.writeFileSync(filename, editor.toString()); + editor.dirty = false; + } + } +}; + +AndroidProject.prototype._getPropertiesFile = function (filename) { + if (!this._propertiesEditors[filename]) { + if (fs.existsSync(filename)) { + this._propertiesEditors[filename] = properties_parser.createEditor(filename); + } else { + this._propertiesEditors[filename] = properties_parser.createEditor(); + } + } + + return this._propertiesEditors[filename]; +}; + + +module.exports = AndroidProject; diff --git a/platforms/android/cordova/lib/ConsoleLogger.js b/platforms/android/cordova/lib/ConsoleLogger.js new file mode 100644 index 0000000..cee2dc1 --- /dev/null +++ b/platforms/android/cordova/lib/ConsoleLogger.js @@ -0,0 +1,75 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var loggerInstance; +var util = require('util'); +var EventEmitter = require('events').EventEmitter; +var CordovaError = require('cordova-common').CordovaError; + +/** + * @class ConsoleLogger + * @extends EventEmitter + * + * Implementing basic logging for platform. Inherits regular NodeJS + * EventEmitter. All events, emitted on this class instance are immediately + * logged to console. + * + * Also attaches handler to process' uncaught exceptions, so these exceptions + * logged to console similar to regular error events. + */ +function ConsoleLogger() { + EventEmitter.call(this); + + var isVerbose = process.argv.indexOf('-d') >= 0 || process.argv.indexOf('--verbose') >= 0; + // For CordovaError print only the message without stack trace unless we + // are in a verbose mode. + process.on('uncaughtException', function(err){ + if ((err instanceof CordovaError) && isVerbose) { + console.error(err.stack); + } else { + console.error(err.message); + } + process.exit(1); + }); + + this.on('results', console.log); + this.on('verbose', function () { + if (isVerbose) + console.log.apply(console, arguments); + }); + this.on('info', console.log); + this.on('log', console.log); + this.on('warn', console.warn); +} +util.inherits(ConsoleLogger, EventEmitter); + +/** + * Returns already instantiated/newly created instance of ConsoleLogger class. + * This method should be used instead of creating ConsoleLogger directly, + * otherwise we'll get multiple handlers attached to process' + * uncaughtException + * + * @return {ConsoleLogger} New or already created instance of ConsoleLogger + */ +ConsoleLogger.get = function () { + loggerInstance = loggerInstance || new ConsoleLogger(); + return loggerInstance; +}; + +module.exports = ConsoleLogger; diff --git a/platforms/android/cordova/lib/appinfo.js b/platforms/android/cordova/lib/appinfo.js deleted file mode 100644 index 080c2ba..0000000 --- a/platforms/android/cordova/lib/appinfo.js +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env node - -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -var path = require('path'); -var fs = require('fs'); -var cachedAppInfo = null; - -function readAppInfoFromManifest() { - var manifestPath = path.join(__dirname, '..', '..', 'AndroidManifest.xml'); - var manifestData = fs.readFileSync(manifestPath, {encoding:'utf8'}); - var packageName = /\bpackage\s*=\s*"(.+?)"/.exec(manifestData); - if (!packageName) throw new Error('Could not find package name within ' + manifestPath); - var activityTag = //.exec(manifestData); - if (!activityTag) throw new Error('Could not find within ' + manifestPath); - var activityName = /\bandroid:name\s*=\s*"(.+?)"/.exec(activityTag); - if (!activityName) throw new Error('Could not find android:name within ' + manifestPath); - - return packageName[1] + '/.' + activityName[1]; -} - -exports.getActivityName = function() { - return (cachedAppInfo = cachedAppInfo || readAppInfoFromManifest()); -}; diff --git a/platforms/android/cordova/lib/build.js b/platforms/android/cordova/lib/build.js index aa9f3d0..e1263ef 100644 --- a/platforms/android/cordova/lib/build.js +++ b/platforms/android/cordova/lib/build.js @@ -19,477 +19,67 @@ under the License. */ -/* jshint sub:true */ - -var shell = require('shelljs'), - spawn = require('./spawn'), - Q = require('q'), +var Q = require('q'), path = require('path'), fs = require('fs'), - os = require('os'), - ROOT = path.join(__dirname, '..', '..'); -var check_reqs = require('./check_reqs'); -var exec = require('./exec'); - - -var SIGNING_PROPERTIES = '-signing.properties'; -var MARKER = 'YOUR CHANGES WILL BE ERASED!'; -var TEMPLATE = - '# This file is automatically generated.\n' + - '# Do not modify this file -- ' + MARKER + '\n'; - -function findApks(directory) { - var ret = []; - if (fs.existsSync(directory)) { - fs.readdirSync(directory).forEach(function(p) { - if (path.extname(p) == '.apk') { - ret.push(path.join(directory, p)); - } - }); - } - return ret; -} - -function sortFilesByDate(files) { - return files.map(function(p) { - return { p: p, t: fs.statSync(p).mtime }; - }).sort(function(a, b) { - var timeDiff = b.t - a.t; - return timeDiff === 0 ? a.p.length - b.p.length : timeDiff; - }).map(function(p) { return p.p; }); -} - -function isAutoGenerated(file) { - if(fs.existsSync(file)) { - var fileContents = fs.readFileSync(file, 'utf8'); - return fileContents.indexOf(MARKER) > 0; - } - return false; -} + nopt = require('nopt'); + +var Adb = require('./Adb'); + +var builders = require('./builders/builders'); +var events = require('cordova-common').events; +var spawn = require('cordova-common').superspawn.spawn; +var CordovaError = require('cordova-common').CordovaError; + +function parseOpts(options, resolvedTarget, projectRoot) { + options = options || {}; + options.argv = nopt({ + gradle: Boolean, + ant: Boolean, + prepenv: Boolean, + versionCode: String, + minSdkVersion: String, + gradleArg: String, + keystore: path, + alias: String, + storePassword: String, + password: String, + keystoreType: String + }, {}, options.argv, 0); -function findOutputApksHelper(dir, build_type, arch) { - var ret = findApks(dir).filter(function(candidate) { - // Need to choose between release and debug .apk. - if (build_type === 'debug') { - return /-debug/.exec(candidate) && !/-unaligned|-unsigned/.exec(candidate); - } - if (build_type === 'release') { - return /-release/.exec(candidate) && !/-unaligned/.exec(candidate); - } - return true; - }); - ret = sortFilesByDate(ret); - if (ret.length === 0) { - return ret; - } - // Assume arch-specific build if newest apk has -x86 or -arm. - var archSpecific = !!/-x86|-arm/.exec(ret[0]); - // And show only arch-specific ones (or non-arch-specific) - ret = ret.filter(function(p) { - /*jshint -W018 */ - return !!/-x86|-arm/.exec(p) == archSpecific; - /*jshint +W018 */ - }); - if (archSpecific && ret.length > 1) { - ret = ret.filter(function(p) { - return p.indexOf('-' + arch) != -1; - }); - } - - return ret; -} - -function hasCustomRules() { - return fs.existsSync(path.join(ROOT, 'custom_rules.xml')); -} - -function extractRealProjectNameFromManifest(projectPath) { - var manifestPath = path.join(projectPath, 'AndroidManifest.xml'); - var manifestData = fs.readFileSync(manifestPath, 'utf8'); - var m = / 0) { - throw new Error('Project contains at least one plugin that requires a system library. This is not supported with ANT. Please build using gradle.'); - } + if (options.nobuild) ret.buildMethod = 'none'; - var propertiesFile = opts.buildType + SIGNING_PROPERTIES; - var propertiesFilePath = path.join(ROOT, propertiesFile); - if (opts.packageInfo) { - fs.writeFileSync(propertiesFilePath, TEMPLATE + opts.packageInfo.toProperties()); - } else if(isAutoGenerated(propertiesFilePath)) { - shell.rm('-f', propertiesFilePath); - } - }); - }, + if (options.argv.versionCode) + ret.extraArgs.push('-PcdvVersionCode=' + options.argv.versionCode); - /* - * Builds the project with ant. - * Returns a promise. - */ - build: function(opts) { - // Without our custom_rules.xml, we need to clean before building. - var ret = Q(); - if (!hasCustomRules()) { - // clean will call check_ant() for us. - ret = this.clean(opts); - } + if (options.argv.minSdkVersion) + ret.extraArgs.push('-PcdvMinSdkVersion=' + options.argv.minSdkVersion); - var args = this.getArgs(opts.buildType == 'debug' ? 'debug' : 'release', opts); - return check_reqs.check_ant() - .then(function() { - console.log('Executing: ant ' + args.join(' ')); - return spawn('ant', args); - }); - }, - - clean: function(opts) { - var args = this.getArgs('clean', opts); - return check_reqs.check_ant() - .then(function() { - return spawn('ant', args); - }); - }, + if (options.argv.gradleArg) + ret.extraArgs.push(options.argv.gradleArg); - findOutputApks: function(build_type) { - var binDir = path.join(ROOT, hasCustomRules() ? 'ant-build' : 'bin'); - return findOutputApksHelper(binDir, build_type, null); - } - }, - gradle: { - getArgs: function(cmd, opts) { - if (cmd == 'release') { - cmd = 'cdvBuildRelease'; - } else if (cmd == 'debug') { - cmd = 'cdvBuildDebug'; - } - var args = [cmd, '-b', path.join(ROOT, 'build.gradle')]; - if (opts.arch) { - args.push('-PcdvBuildArch=' + opts.arch); - } - - // 10 seconds -> 6 seconds - args.push('-Dorg.gradle.daemon=true'); - args.push.apply(args, opts.extraArgs); - // Shaves another 100ms, but produces a "try at own risk" warning. Not worth it (yet): - // args.push('-Dorg.gradle.parallel=true'); - return args; - }, - - // Makes the project buildable, minus the gradle wrapper. - prepBuildFiles: function() { - var projectPath = ROOT; - // Update the version of build.gradle in each dependent library. - var pluginBuildGradle = path.join(projectPath, 'cordova', 'lib', 'plugin-build.gradle'); - var propertiesObj = readProjectProperties(); - var subProjects = propertiesObj.libs; - for (var i = 0; i < subProjects.length; ++i) { - if (subProjects[i] !== 'CordovaLib') { - shell.cp('-f', pluginBuildGradle, path.join(ROOT, subProjects[i], 'build.gradle')); - } - } - - var name = extractRealProjectNameFromManifest(ROOT); - //Remove the proj.id/name- prefix from projects: https://issues.apache.org/jira/browse/CB-9149 - var settingsGradlePaths = subProjects.map(function(p){ - var realDir=p.replace(/[/\\]/g, ':'); - var libName=realDir.replace(name+'-',''); - var str='include ":'+libName+'"\n'; - if(realDir.indexOf(name+'-')!==-1) - str+='project(":'+libName+'").projectDir = new File("'+p+'")\n'; - return str; - }); - - // Write the settings.gradle file. - fs.writeFileSync(path.join(projectPath, 'settings.gradle'), - '// GENERATED FILE - DO NOT EDIT\n' + - 'include ":"\n' + settingsGradlePaths.join('')); - // Update dependencies within build.gradle. - var buildGradle = fs.readFileSync(path.join(projectPath, 'build.gradle'), 'utf8'); - var depsList = ''; - subProjects.forEach(function(p) { - var libName=p.replace(/[/\\]/g, ':').replace(name+'-',''); - depsList += ' debugCompile project(path: "' + libName + '", configuration: "debug")\n'; - depsList += ' releaseCompile project(path: "' + libName + '", configuration: "release")\n'; - }); - // For why we do this mapping: https://issues.apache.org/jira/browse/CB-8390 - var SYSTEM_LIBRARY_MAPPINGS = [ - [/^\/?extras\/android\/support\/(.*)$/, 'com.android.support:support-$1:+'], - [/^\/?google\/google_play_services\/libproject\/google-play-services_lib\/?$/, 'com.google.android.gms:play-services:+'] - ]; - propertiesObj.systemLibs.forEach(function(p) { - var mavenRef; - // It's already in gradle form if it has two ':'s - if (/:.*:/.exec(p)) { - mavenRef = p; - } else { - for (var i = 0; i < SYSTEM_LIBRARY_MAPPINGS.length; ++i) { - var pair = SYSTEM_LIBRARY_MAPPINGS[i]; - if (pair[0].exec(p)) { - mavenRef = p.replace(pair[0], pair[1]); - break; - } - } - if (!mavenRef) { - throw new Error('Unsupported system library (does not work with gradle): ' + p); - } - } - depsList += ' compile "' + mavenRef + '"\n'; - }); - buildGradle = buildGradle.replace(/(SUB-PROJECT DEPENDENCIES START)[\s\S]*(\/\/ SUB-PROJECT DEPENDENCIES END)/, '$1\n' + depsList + ' $2'); - var includeList = ''; - propertiesObj.gradleIncludes.forEach(function(includePath) { - includeList += 'apply from: "' + includePath + '"\n'; - }); - buildGradle = buildGradle.replace(/(PLUGIN GRADLE EXTENSIONS START)[\s\S]*(\/\/ PLUGIN GRADLE EXTENSIONS END)/, '$1\n' + includeList + '$2'); - fs.writeFileSync(path.join(projectPath, 'build.gradle'), buildGradle); - }, - - prepEnv: function(opts) { - var self = this; - return check_reqs.check_gradle() - .then(function() { - return self.prepBuildFiles(); - }).then(function() { - // Copy the gradle wrapper on each build so that: - // A) we don't require the Android SDK at project creation time, and - // B) we always use the SDK's latest version of it. - var projectPath = ROOT; - // check_reqs ensures that this is set. - var sdkDir = process.env['ANDROID_HOME']; - var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper'); - if (process.platform == 'win32') { - shell.rm('-f', path.join(projectPath, 'gradlew.bat')); - shell.cp(path.join(wrapperDir, 'gradlew.bat'), projectPath); - } else { - shell.rm('-f', path.join(projectPath, 'gradlew')); - shell.cp(path.join(wrapperDir, 'gradlew'), projectPath); - } - shell.rm('-rf', path.join(projectPath, 'gradle', 'wrapper')); - shell.mkdir('-p', path.join(projectPath, 'gradle')); - shell.cp('-r', path.join(wrapperDir, 'gradle', 'wrapper'), path.join(projectPath, 'gradle')); - - // If the gradle distribution URL is set, make sure it points to version we want. - // If it's not set, do nothing, assuming that we're using a future version of gradle that we don't want to mess with. - // For some reason, using ^ and $ don't work. This does the job, though. - var distributionUrlRegex = /distributionUrl.*zip/; - var distributionUrl = 'distributionUrl=http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip'; - var gradleWrapperPropertiesPath = path.join(projectPath, 'gradle', 'wrapper', 'gradle-wrapper.properties'); - shell.chmod('u+w', gradleWrapperPropertiesPath); - shell.sed('-i', distributionUrlRegex, distributionUrl, gradleWrapperPropertiesPath); - - var propertiesFile = opts.buildType + SIGNING_PROPERTIES; - var propertiesFilePath = path.join(ROOT, propertiesFile); - if (opts.packageInfo) { - fs.writeFileSync(propertiesFilePath, TEMPLATE + opts.packageInfo.toProperties()); - } else if (isAutoGenerated(propertiesFilePath)) { - shell.rm('-f', propertiesFilePath); - } - }); - }, - - /* - * Builds the project with gradle. - * Returns a promise. - */ - build: function(opts) { - var wrapper = path.join(ROOT, 'gradlew'); - var args = this.getArgs(opts.buildType == 'debug' ? 'debug' : 'release', opts); - return Q().then(function() { - console.log('Running: ' + wrapper + ' ' + args.join(' ')); - return spawn(wrapper, args); - }); - }, - - clean: function(opts) { - var builder = this; - var wrapper = path.join(ROOT, 'gradlew'); - var args = builder.getArgs('clean', opts); - return Q().then(function() { - console.log('Running: ' + wrapper + ' ' + args.join(' ')); - return spawn(wrapper, args); - }); - }, - - findOutputApks: function(build_type, arch) { - var binDir = path.join(ROOT, 'build', 'outputs', 'apk'); - return findOutputApksHelper(binDir, build_type, arch); - } - }, - - none: { - prepEnv: function() { - return Q(); - }, - build: function() { - console.log('Skipping build...'); - return Q(null); - }, - clean: function() { - return Q(); - }, - findOutputApks: function(build_type, arch) { - return sortFilesByDate(builders.ant.findOutputApks(build_type, arch).concat(builders.gradle.findOutputApks(build_type, arch))); - } - } -}; + var packageArgs = {}; -module.exports.isBuildFlag = function(flag) { - return /^--(debug|release|ant|gradle|nobuild|versionCode=|minSdkVersion=|gradleArg=|keystore=|alias=|password=|storePassword=|keystoreType=|buildConfig=)/.exec(flag); -}; + if (options.argv.keystore) + packageArgs.keystore = path.relative(projectRoot, path.resolve(options.argv.keystore)); -function parseOpts(options, resolvedTarget) { - // Backwards-compatibility: Allow a single string argument - if (typeof options == 'string') options = [options]; + ['alias','storePassword','password','keystoreType'].forEach(function (flagName) { + if (options.argv[flagName]) + packageArgs[flagName] = options.argv[flagName]; + }); - var ret = { - buildType: 'debug', - buildMethod: process.env['ANDROID_BUILD'] || 'gradle', - arch: null, - extraArgs: [] - }; - - var multiValueArgs = { - 'versionCode': true, - 'minSdkVersion': true, - 'gradleArg': true, - 'keystore' : true, - 'alias' : true, - 'password' : true, - 'storePassword' : true, - 'keystoreType' : true, - 'buildConfig' : true - }; - var packageArgs = {}; - var buildConfig; - // Iterate through command line options - for (var i=0; options && (i < options.length); ++i) { - if (/^--/.exec(options[i])) { - var keyValue = options[i].substring(2).split('='); - var flagName = keyValue.shift(); - var flagValue = keyValue.join('='); - if (multiValueArgs[flagName] && !flagValue) { - flagValue = options[i + 1]; - ++i; - } - switch(flagName) { - case 'debug': - case 'release': - ret.buildType = flagName; - break; - case 'ant': - case 'gradle': - ret.buildMethod = flagName; - break; - case 'device': - case 'emulator': - // Don't need to do anything special to when building for device vs emulator. - // iOS uses this flag to switch on architecture. - break; - case 'prepenv' : - ret.prepEnv = true; - break; - case 'nobuild' : - ret.buildMethod = 'none'; - break; - case 'versionCode': - ret.extraArgs.push('-PcdvVersionCode=' + flagValue); - break; - case 'minSdkVersion': - ret.extraArgs.push('-PcdvMinSdkVersion=' + flagValue); - break; - case 'gradleArg': - ret.extraArgs.push(flagValue); - break; - case 'keystore': - packageArgs.keystore = path.relative(ROOT, path.resolve(flagValue)); - break; - case 'alias': - case 'storePassword': - case 'password': - case 'keystoreType': - packageArgs[flagName] = flagValue; - break; - case 'buildConfig': - buildConfig = flagValue; - break; - default : - console.warn('Build option --\'' + flagName + '\' not recognized (ignoring).'); - } - } else { - console.warn('Build option \'' + options[i] + '\' not recognized (ignoring).'); - } - } + var buildConfig = options.buildConfig; // If some values are not specified as command line arguments - use build config to supplement them. // Command line arguemnts have precedence over build config. @@ -497,16 +87,18 @@ function parseOpts(options, resolvedTarget) { if (!fs.existsSync(buildConfig)) { throw new Error('Specified build config file does not exist: ' + buildConfig); } - console.log('Reading build config file: '+ path.resolve(buildConfig)); - var config = JSON.parse(fs.readFileSync(buildConfig, 'utf8')); + events.emit('log', 'Reading build config file: '+ path.resolve(buildConfig)); + var buildjson = fs.readFileSync(buildConfig, 'utf8'); + //var config = JSON.parse(fs.readFileSync(buildConfig, 'utf8')); + var config = JSON.parse(buildjson); if (config.android && config.android[ret.buildType]) { var androidInfo = config.android[ret.buildType]; if(androidInfo.keystore && !packageArgs.keystore) { - if(path.isAbsolute(androidInfo.keystore)) { - packageArgs.keystore = androidInfo.keystore; - } else { - packageArgs.keystore = path.relative(ROOT, path.join(path.dirname(buildConfig), androidInfo.keystore)); + if(androidInfo.keystore.substr(0,1) === '~') { + androidInfo.keystore = process.env.HOME + androidInfo.keystore.substr(1); } + packageArgs.keystore = path.resolve(path.dirname(buildConfig), androidInfo.keystore); + events.emit('log', 'Reading the keystore from: ' + packageArgs.keystore); } ['alias', 'storePassword', 'password','keystoreType'].forEach(function (key){ @@ -514,6 +106,7 @@ function parseOpts(options, resolvedTarget) { }); } } + if (packageArgs.keystore && packageArgs.alias) { ret.packageInfo = new PackageInfo(packageArgs.keystore, packageArgs.alias, packageArgs.storePassword, packageArgs.password, packageArgs.keystoreType); @@ -521,10 +114,9 @@ function parseOpts(options, resolvedTarget) { if(!ret.packageInfo) { if(Object.keys(packageArgs).length > 0) { - console.warn('\'keystore\' and \'alias\' need to be specified to generate a signed archive.'); + events.emit('warn', '\'keystore\' and \'alias\' need to be specified to generate a signed archive.'); } } - ret.arch = resolvedTarget && resolvedTarget.arch; return ret; } @@ -534,41 +126,40 @@ function parseOpts(options, resolvedTarget) { * Returns a promise. */ module.exports.runClean = function(options) { - var opts = parseOpts(options); - var builder = builders[opts.buildMethod]; + var opts = parseOpts(options, null, this.root); + var builder = builders.getBuilder(opts.buildMethod); return builder.prepEnv(opts) .then(function() { return builder.clean(opts); - }).then(function() { - shell.rm('-rf', path.join(ROOT, 'out')); - - ['debug', 'release'].forEach(function(config) { - var propertiesFilePath = path.join(ROOT, config + SIGNING_PROPERTIES); - if(isAutoGenerated(propertiesFilePath)){ - shell.rm('-f', propertiesFilePath); - } - }); }); }; -/* - * Builds the project with the specifed options - * Returns a promise. +/** + * Builds the project with the specifed options. + * + * @param {BuildOptions} options A set of options. See PlatformApi.build + * method documentation for reference. + * @param {Object} optResolvedTarget A deployment target. Used to pass + * target architecture from upstream 'run' call. TODO: remove this option in + * favor of setting buildOptions.archs field. + * + * @return {Promise} Promise, resolved with built packages + * information. */ module.exports.run = function(options, optResolvedTarget) { - var opts = parseOpts(options, optResolvedTarget); - var builder = builders[opts.buildMethod]; + var opts = parseOpts(options, optResolvedTarget, this.root); + var builder = builders.getBuilder(opts.buildMethod); + var self = this; return builder.prepEnv(opts) .then(function() { if (opts.prepEnv) { - console.log('Build file successfully prepared.'); + self.events.emit('verbose', 'Build file successfully prepared.'); return; } return builder.build(opts) .then(function() { var apkPaths = builder.findOutputApks(opts.buildType, opts.arch); - console.log('Built the following apk(s):'); - console.log(' ' + apkPaths.join('\n ')); + self.events.emit('log', 'Built the following apk(s): \n\t' + apkPaths.join('\n\t')); return { apkPaths: apkPaths, buildType: opts.buildType, @@ -578,46 +169,38 @@ module.exports.run = function(options, optResolvedTarget) { }); }; -// Called by plugman after installing plugins, and by create script after creating project. -module.exports.prepBuildFiles = function() { - var builder = builders['gradle']; - return builder.prepBuildFiles(); -}; - /* * Detects the architecture of a device/emulator * Returns "arm" or "x86". */ module.exports.detectArchitecture = function(target) { function helper() { - return exec('adb -s ' + target + ' shell cat /proc/cpuinfo', os.tmpdir()) + return Adb.shell(target, 'cat /proc/cpuinfo') .then(function(output) { - if (/intel/i.exec(output)) { - return 'x86'; - } - return 'arm'; + return /intel/i.exec(output) ? 'x86' : 'arm'; }); } // It sometimes happens (at least on OS X), that this command will hang forever. // To fix it, either unplug & replug device, or restart adb server. - return helper().timeout(1000, 'Device communication timed out. Try unplugging & replugging the device.') + return helper() + .timeout(1000, new CordovaError('Device communication timed out. Try unplugging & replugging the device.')) .then(null, function(err) { if (/timed out/.exec('' + err)) { // adb kill-server doesn't seem to do the trick. // Could probably find a x-platform version of killall, but I'm not actually // sure that this scenario even happens on non-OSX machines. - return exec('killall adb') + return spawn('killall', ['adb']) .then(function() { - console.log('adb seems hung. retrying.'); + events.emit('verbose', 'adb seems hung. retrying.'); return helper() .then(null, function() { // The double kill is sadly often necessary, at least on mac. - console.log('Now device not found... restarting adb again.'); - return exec('killall adb') + events.emit('warn', 'Now device not found... restarting adb again.'); + return spawn('killall', ['adb']) .then(function() { return helper() .then(null, function() { - return Q.reject('USB is flakey. Try unplugging & replugging the device.'); + return Q.reject(new CordovaError('USB is flakey. Try unplugging & replugging the device.')); }); }); }); @@ -632,16 +215,18 @@ module.exports.detectArchitecture = function(target) { module.exports.findBestApkForArchitecture = function(buildResults, arch) { var paths = buildResults.apkPaths.filter(function(p) { + var apkName = path.basename(p); if (buildResults.buildType == 'debug') { - return /-debug/.exec(p); + return /-debug/.exec(apkName); } - return !/-debug/.exec(p); + return !/-debug/.exec(apkName); }); var archPattern = new RegExp('-' + arch); var hasArchPattern = /-x86|-arm/; for (var i = 0; i < paths.length; ++i) { - if (hasArchPattern.exec(paths[i])) { - if (archPattern.exec(paths[i])) { + var apkName = path.basename(paths[i]); + if (hasArchPattern.exec(apkName)) { + if (archPattern.exec(apkName)) { return paths[i]; } } else { @@ -695,7 +280,7 @@ PackageInfo.prototype = { }; module.exports.help = function() { - console.log('Usage: ' + path.relative(process.cwd(), path.join(ROOT, 'cordova', 'build')) + ' [flags] [Signed APK flags]'); + console.log('Usage: ' + path.relative(process.cwd(), path.join('../build')) + ' [flags] [Signed APK flags]'); console.log('Flags:'); console.log(' \'--debug\': will build project in debug mode (default)'); console.log(' \'--release\': will build project for release'); diff --git a/platforms/android/cordova/lib/builders/AntBuilder.js b/platforms/android/cordova/lib/builders/AntBuilder.js new file mode 100644 index 0000000..7094fe5 --- /dev/null +++ b/platforms/android/cordova/lib/builders/AntBuilder.js @@ -0,0 +1,141 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var Q = require('q'); +var fs = require('fs'); +var path = require('path'); +var util = require('util'); +var shell = require('shelljs'); +var spawn = require('cordova-common').superspawn.spawn; +var CordovaError = require('cordova-common').CordovaError; +var check_reqs = require('../check_reqs'); + +var SIGNING_PROPERTIES = '-signing.properties'; +var MARKER = 'YOUR CHANGES WILL BE ERASED!'; +var TEMPLATE = + '# This file is automatically generated.\n' + + '# Do not modify this file -- ' + MARKER + '\n'; + +var GenericBuilder = require('./GenericBuilder'); + +function AntBuilder (projectRoot) { + GenericBuilder.call(this, projectRoot); + + this.binDirs = {ant: this.binDirs.ant}; +} + +util.inherits(AntBuilder, GenericBuilder); + +AntBuilder.prototype.getArgs = function(cmd, opts) { + var args = [cmd, '-f', path.join(this.root, 'build.xml')]; + // custom_rules.xml is required for incremental builds. + if (hasCustomRules(this.root)) { + args.push('-Dout.dir=ant-build', '-Dgen.absolute.dir=ant-gen'); + } + if(opts.packageInfo) { + args.push('-propertyfile=' + path.join(this.root, opts.buildType + SIGNING_PROPERTIES)); + } + return args; +}; + +AntBuilder.prototype.prepEnv = function(opts) { + var self = this; + return check_reqs.check_ant() + .then(function() { + // Copy in build.xml on each build so that: + // A) we don't require the Android SDK at project creation time, and + // B) we always use the SDK's latest version of it. + /*jshint -W069 */ + var sdkDir = process.env['ANDROID_HOME']; + /*jshint +W069 */ + var buildTemplate = fs.readFileSync(path.join(sdkDir, 'tools', 'lib', 'build.template'), 'utf8'); + function writeBuildXml(projectPath) { + var newData = buildTemplate.replace('PROJECT_NAME', self.extractRealProjectNameFromManifest()); + fs.writeFileSync(path.join(projectPath, 'build.xml'), newData); + if (!fs.existsSync(path.join(projectPath, 'local.properties'))) { + fs.writeFileSync(path.join(projectPath, 'local.properties'), TEMPLATE); + } + } + writeBuildXml(self.root); + var propertiesObj = self.readProjectProperties(); + var subProjects = propertiesObj.libs; + for (var i = 0; i < subProjects.length; ++i) { + writeBuildXml(path.join(self.root, subProjects[i])); + } + if (propertiesObj.systemLibs.length > 0) { + throw new CordovaError('Project contains at least one plugin that requires a system library. This is not supported with ANT. Please build using gradle.'); + } + + var propertiesFile = opts.buildType + SIGNING_PROPERTIES; + var propertiesFilePath = path.join(self.root, propertiesFile); + if (opts.packageInfo) { + fs.writeFileSync(propertiesFilePath, TEMPLATE + opts.packageInfo.toProperties()); + } else if(isAutoGenerated(propertiesFilePath)) { + shell.rm('-f', propertiesFilePath); + } + }); +}; + +/* + * Builds the project with ant. + * Returns a promise. + */ +AntBuilder.prototype.build = function(opts) { + // Without our custom_rules.xml, we need to clean before building. + var ret = Q(); + if (!hasCustomRules(this.root)) { + // clean will call check_ant() for us. + ret = this.clean(opts); + } + + var args = this.getArgs(opts.buildType == 'debug' ? 'debug' : 'release', opts); + return check_reqs.check_ant() + .then(function() { + return spawn('ant', args, {stdio: 'inherit'}); + }); +}; + +AntBuilder.prototype.clean = function(opts) { + var args = this.getArgs('clean', opts); + var self = this; + return check_reqs.check_ant() + .then(function() { + return spawn('ant', args, {stdio: 'inherit'}); + }) + .then(function () { + shell.rm('-rf', path.join(self.root, 'out')); + + ['debug', 'release'].forEach(function(config) { + var propertiesFilePath = path.join(self.root, config + SIGNING_PROPERTIES); + if(isAutoGenerated(propertiesFilePath)){ + shell.rm('-f', propertiesFilePath); + } + }); + }); +}; + +module.exports = AntBuilder; + +function hasCustomRules(projectRoot) { + return fs.existsSync(path.join(projectRoot, 'custom_rules.xml')); +} + +function isAutoGenerated(file) { + return fs.existsSync(file) && fs.readFileSync(file, 'utf8').indexOf(MARKER) > 0; +} diff --git a/platforms/android/cordova/lib/builders/GenericBuilder.js b/platforms/android/cordova/lib/builders/GenericBuilder.js new file mode 100644 index 0000000..6363b29 --- /dev/null +++ b/platforms/android/cordova/lib/builders/GenericBuilder.js @@ -0,0 +1,138 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var Q = require('q'); +var fs = require('fs'); +var path = require('path'); +var shell = require('shelljs'); +var events = require('cordova-common').events; +var CordovaError = require('cordova-common').CordovaError; + +function GenericBuilder (projectDir) { + this.root = projectDir || path.resolve(__dirname, '../../..'); + this.binDirs = { + ant: path.join(this.root, hasCustomRules(this.root) ? 'ant-build' : 'bin'), + gradle: path.join(this.root, 'build', 'outputs', 'apk') + }; +} + +function hasCustomRules(projectRoot) { + return fs.existsSync(path.join(projectRoot, 'custom_rules.xml')); +} + +GenericBuilder.prototype.prepEnv = function() { + return Q(); +}; + +GenericBuilder.prototype.build = function() { + events.emit('log', 'Skipping build...'); + return Q(null); +}; + +GenericBuilder.prototype.clean = function() { + return Q(); +}; + +GenericBuilder.prototype.findOutputApks = function(build_type, arch) { + var self = this; + return Object.keys(this.binDirs) + .reduce(function (result, builderName) { + var binDir = self.binDirs[builderName]; + return result.concat(findOutputApksHelper(binDir, build_type, builderName === 'ant' ? null : arch)); + }, []) + .sort(apkSorter); +}; + +GenericBuilder.prototype.readProjectProperties = function () { + function findAllUniq(data, r) { + var s = {}; + var m; + while ((m = r.exec(data))) { + s[m[1]] = 1; + } + return Object.keys(s); + } + + var data = fs.readFileSync(path.join(this.root, 'project.properties'), 'utf8'); + return { + libs: findAllUniq(data, /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg), + gradleIncludes: findAllUniq(data, /^\s*cordova\.gradle\.include\.\d+=(.*)(?:\s|$)/mg), + systemLibs: findAllUniq(data, /^\s*cordova\.system\.library\.\d+=(.*)(?:\s|$)/mg) + }; +}; + +GenericBuilder.prototype.extractRealProjectNameFromManifest = function () { + var manifestPath = path.join(this.root, 'AndroidManifest.xml'); + var manifestData = fs.readFileSync(manifestPath, 'utf8'); + var m = / 1) { + ret = ret.filter(function(p) { + return path.basename(p).indexOf('-' + arch) != -1; + }); + } + + return ret; +} diff --git a/platforms/android/cordova/lib/builders/GradleBuilder.js b/platforms/android/cordova/lib/builders/GradleBuilder.js new file mode 100644 index 0000000..0593f9b --- /dev/null +++ b/platforms/android/cordova/lib/builders/GradleBuilder.js @@ -0,0 +1,275 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var Q = require('q'); +var fs = require('fs'); +var util = require('util'); +var path = require('path'); +var shell = require('shelljs'); +var child_process = require('child_process'); +var spawn = require('cordova-common').superspawn.spawn; +var CordovaError = require('cordova-common').CordovaError; +var check_reqs = require('../check_reqs'); + +var GenericBuilder = require('./GenericBuilder'); + +var MARKER = 'YOUR CHANGES WILL BE ERASED!'; +var SIGNING_PROPERTIES = '-signing.properties'; +var TEMPLATE = + '# This file is automatically generated.\n' + + '# Do not modify this file -- ' + MARKER + '\n'; + +function GradleBuilder (projectRoot) { + GenericBuilder.call(this, projectRoot); + + this.binDirs = {gradle: this.binDirs.gradle}; +} + +util.inherits(GradleBuilder, GenericBuilder); + +GradleBuilder.prototype.getArgs = function(cmd, opts) { + if (cmd == 'release') { + cmd = 'cdvBuildRelease'; + } else if (cmd == 'debug') { + cmd = 'cdvBuildDebug'; + } + var args = [cmd, '-b', path.join(this.root, 'build.gradle')]; + if (opts.arch) { + args.push('-PcdvBuildArch=' + opts.arch); + } + + // 10 seconds -> 6 seconds + args.push('-Dorg.gradle.daemon=true'); + // allow NDK to be used - required by Gradle 1.5 plugin + args.push('-Pandroid.useDeprecatedNdk=true'); + args.push.apply(args, opts.extraArgs); + // Shaves another 100ms, but produces a "try at own risk" warning. Not worth it (yet): + // args.push('-Dorg.gradle.parallel=true'); + return args; +}; + +// Makes the project buildable, minus the gradle wrapper. +GradleBuilder.prototype.prepBuildFiles = function() { + // Update the version of build.gradle in each dependent library. + var pluginBuildGradle = path.join(this.root, 'cordova', 'lib', 'plugin-build.gradle'); + var propertiesObj = this.readProjectProperties(); + var subProjects = propertiesObj.libs; + for (var i = 0; i < subProjects.length; ++i) { + if (subProjects[i] !== 'CordovaLib') { + shell.cp('-f', pluginBuildGradle, path.join(this.root, subProjects[i], 'build.gradle')); + } + } + + var name = this.extractRealProjectNameFromManifest(); + //Remove the proj.id/name- prefix from projects: https://issues.apache.org/jira/browse/CB-9149 + var settingsGradlePaths = subProjects.map(function(p){ + var realDir=p.replace(/[/\\]/g, ':'); + var libName=realDir.replace(name+'-',''); + var str='include ":'+libName+'"\n'; + if(realDir.indexOf(name+'-')!==-1) + str+='project(":'+libName+'").projectDir = new File("'+p+'")\n'; + return str; + }); + + // Write the settings.gradle file. + fs.writeFileSync(path.join(this.root, 'settings.gradle'), + '// GENERATED FILE - DO NOT EDIT\n' + + 'include ":"\n' + settingsGradlePaths.join('')); + // Update dependencies within build.gradle. + var buildGradle = fs.readFileSync(path.join(this.root, 'build.gradle'), 'utf8'); + var depsList = ''; + subProjects.forEach(function(p) { + var libName=p.replace(/[/\\]/g, ':').replace(name+'-',''); + depsList += ' debugCompile project(path: "' + libName + '", configuration: "debug")\n'; + depsList += ' releaseCompile project(path: "' + libName + '", configuration: "release")\n'; + }); + // For why we do this mapping: https://issues.apache.org/jira/browse/CB-8390 + var SYSTEM_LIBRARY_MAPPINGS = [ + [/^\/?extras\/android\/support\/(.*)$/, 'com.android.support:support-$1:+'], + [/^\/?google\/google_play_services\/libproject\/google-play-services_lib\/?$/, 'com.google.android.gms:play-services:+'] + ]; + propertiesObj.systemLibs.forEach(function(p) { + var mavenRef; + // It's already in gradle form if it has two ':'s + if (/:.*:/.exec(p)) { + mavenRef = p; + } else { + for (var i = 0; i < SYSTEM_LIBRARY_MAPPINGS.length; ++i) { + var pair = SYSTEM_LIBRARY_MAPPINGS[i]; + if (pair[0].exec(p)) { + mavenRef = p.replace(pair[0], pair[1]); + break; + } + } + if (!mavenRef) { + throw new CordovaError('Unsupported system library (does not work with gradle): ' + p); + } + } + depsList += ' compile "' + mavenRef + '"\n'; + }); + buildGradle = buildGradle.replace(/(SUB-PROJECT DEPENDENCIES START)[\s\S]*(\/\/ SUB-PROJECT DEPENDENCIES END)/, '$1\n' + depsList + ' $2'); + var includeList = ''; + propertiesObj.gradleIncludes.forEach(function(includePath) { + includeList += 'apply from: "' + includePath + '"\n'; + }); + buildGradle = buildGradle.replace(/(PLUGIN GRADLE EXTENSIONS START)[\s\S]*(\/\/ PLUGIN GRADLE EXTENSIONS END)/, '$1\n' + includeList + '$2'); + fs.writeFileSync(path.join(this.root, 'build.gradle'), buildGradle); +}; + +GradleBuilder.prototype.prepEnv = function(opts) { + var self = this; + return check_reqs.check_gradle() + .then(function() { + return self.prepBuildFiles(); + }).then(function() { + // Copy the gradle wrapper on each build so that: + // A) we don't require the Android SDK at project creation time, and + // B) we always use the SDK's latest version of it. + // check_reqs ensures that this is set. + /*jshint -W069 */ + var sdkDir = process.env['ANDROID_HOME']; + /*jshint +W069 */ + var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper'); + if (process.platform == 'win32') { + shell.rm('-f', path.join(self.root, 'gradlew.bat')); + shell.cp(path.join(wrapperDir, 'gradlew.bat'), self.root); + } else { + shell.rm('-f', path.join(self.root, 'gradlew')); + shell.cp(path.join(wrapperDir, 'gradlew'), self.root); + } + shell.rm('-rf', path.join(self.root, 'gradle', 'wrapper')); + shell.mkdir('-p', path.join(self.root, 'gradle')); + shell.cp('-r', path.join(wrapperDir, 'gradle', 'wrapper'), path.join(self.root, 'gradle')); + + // If the gradle distribution URL is set, make sure it points to version we want. + // If it's not set, do nothing, assuming that we're using a future version of gradle that we don't want to mess with. + // For some reason, using ^ and $ don't work. This does the job, though. + var distributionUrlRegex = /distributionUrl.*zip/; + /*jshint -W069 */ + var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip'; + /*jshint +W069 */ + var gradleWrapperPropertiesPath = path.join(self.root, 'gradle', 'wrapper', 'gradle-wrapper.properties'); + shell.chmod('u+w', gradleWrapperPropertiesPath); + shell.sed('-i', distributionUrlRegex, 'distributionUrl='+distributionUrl, gradleWrapperPropertiesPath); + + var propertiesFile = opts.buildType + SIGNING_PROPERTIES; + var propertiesFilePath = path.join(self.root, propertiesFile); + if (opts.packageInfo) { + fs.writeFileSync(propertiesFilePath, TEMPLATE + opts.packageInfo.toProperties()); + } else if (isAutoGenerated(propertiesFilePath)) { + shell.rm('-f', propertiesFilePath); + } + }); +}; + +/* + * Builds the project with gradle. + * Returns a promise. + */ +GradleBuilder.prototype.build = function(opts) { + var wrapper = path.join(this.root, 'gradlew'); + var args = this.getArgs(opts.buildType == 'debug' ? 'debug' : 'release', opts); + return spawnAndSuppressJavaOptions(wrapper, args); +}; + +GradleBuilder.prototype.clean = function(opts) { + var builder = this; + var wrapper = path.join(this.root, 'gradlew'); + var args = builder.getArgs('clean', opts); + return Q().then(function() { + return spawn(wrapper, args, {stdio: 'inherit'}); + }) + .then(function () { + shell.rm('-rf', path.join(builder.root, 'out')); + + ['debug', 'release'].forEach(function(config) { + var propertiesFilePath = path.join(builder.root, config + SIGNING_PROPERTIES); + if(isAutoGenerated(propertiesFilePath)){ + shell.rm('-f', propertiesFilePath); + } + }); + }); +}; + +module.exports = GradleBuilder; + +function isAutoGenerated(file) { + return fs.existsSync(file) && fs.readFileSync(file, 'utf8').indexOf(MARKER) > 0; +} + +/** + * A special superspawn-like implementation, required to workaround the issue + * with Java printing some unwanted information to stderr instead of stdout. + * This function suppresses 'Picked up _JAVA_OPTIONS' message from being + * printed to stderr. See https://issues.apache.org/jira/browse/CB-9971 for + * explanation. + * + * This function needed because superspawn does not provide a way to get and + * manage spawned process output streams. There is a CB-10052 which describes + * an improvements for superspawn, needed to get rid of this. + * TODO: Once this improvement added to cordova-common, we could remove this functionality. + * + * @param {String} cmd A command to spawn + * @param {String[]} args Command arguments. Note that on Windows arguments + * will be concatenated into string and passed to 'cmd.exe' along with '/s' + * and '/c' switches for proper space-in-path handling + * + * @return {Promise} A promise, rejected with error message if + * underlying command exits with nonzero exit code, fulfilled otherwise + */ +function spawnAndSuppressJavaOptions(cmd, args) { + var opts = { stdio: 'pipe' }; + + if (process.platform === 'win32') { + // Work around spawn not being able to find .bat files. + var joinedArgs = [cmd] + .concat(args) + .map(function(a){ + // Add quotes to arguments which contains whitespaces + if (/^[^"].* .*[^"]/.test(a)) return '"' + a + '"'; + return a; + }).join(' '); + + args = ['/s', '/c'].concat('"' + joinedArgs + '"'); + cmd = 'cmd'; + opts.windowsVerbatimArguments = true; + } + + return Q.Promise(function (resolve, reject) { + var proc = child_process.spawn(cmd, args, opts); + + proc.stdout.on('data', process.stdout.write.bind(process.stdout)); + proc.stderr.on('data', function (data) { + var suppressThisLine = /^Picked up _JAVA_OPTIONS: /i.test(data.toString()); + if (suppressThisLine) { + return; + } + + process.stderr.write(data); + }); + + proc.on('exit', function(code) { + if (code) { + reject('Error code ' + code + ' for command: ' + cmd + ' with args: ' + args); + } else { + resolve(); + } + }); + }); +} diff --git a/platforms/android/cordova/lib/builders/builders.js b/platforms/android/cordova/lib/builders/builders.js new file mode 100644 index 0000000..4921c49 --- /dev/null +++ b/platforms/android/cordova/lib/builders/builders.js @@ -0,0 +1,47 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var CordovaError = require('cordova-common').CordovaError; + +var knownBuilders = { + ant: 'AntBuilder', + gradle: 'GradleBuilder', + none: 'GenericBuilder' +}; + +/** + * Helper method that instantiates and returns a builder for specified build + * type. + * + * @param {String} builderType Builder name to construct and return. Must + * be one of 'ant', 'gradle' or 'none' + * + * @return {Builder} A builder instance for specified build type. + */ +module.exports.getBuilder = function (builderType, projectRoot) { + if (!knownBuilders[builderType]) + throw new CordovaError('Builder ' + builderType + ' is not supported.'); + + try { + var Builder = require('./' + knownBuilders[builderType]); + return new Builder(projectRoot); + } catch (err) { + throw new CordovaError('Failed to instantiate ' + knownBuilders[builderType] + ' builder: ' + err); + } +}; diff --git a/platforms/android/cordova/lib/check_reqs.js b/platforms/android/cordova/lib/check_reqs.js index 9d25159..73b2b99 100644 --- a/platforms/android/cordova/lib/check_reqs.js +++ b/platforms/android/cordova/lib/check_reqs.js @@ -26,15 +26,14 @@ var shelljs = require('shelljs'), Q = require('q'), path = require('path'), fs = require('fs'), - which = require('which'), ROOT = path.join(__dirname, '..', '..'); +var CordovaError = require('cordova-common').CordovaError; var isWindows = process.platform == 'win32'; function forgivingWhichSync(cmd) { try { - // TODO: Should use shelljs.which() here to have one less dependency. - return fs.realpathSync(which.sync(cmd)); + return fs.realpathSync(shelljs.which(cmd)); } catch (e) { return ''; } @@ -43,7 +42,7 @@ function forgivingWhichSync(cmd) { function tryCommand(cmd, errMsg, catchStderr) { var d = Q.defer(); child_process.exec(cmd, function(err, stdout, stderr) { - if (err) d.reject(new Error(errMsg)); + if (err) d.reject(new CordovaError(errMsg)); // Sometimes it is necessary to return an stderr instead of stdout in case of success, since // some commands prints theirs output to stderr instead of stdout. 'javac' is the example else d.resolve((catchStderr ? stderr : stdout).trim()); @@ -83,12 +82,12 @@ module.exports.check_ant = function() { module.exports.check_gradle = function() { var sdkDir = process.env['ANDROID_HOME']; if (!sdkDir) - return Q.reject('Could not find gradle wrapper within Android SDK. Could not find Android SDK directory.\n' + - 'Might need to install Android SDK or set up \'ANDROID_HOME\' env variable.'); + return Q.reject(new CordovaError('Could not find gradle wrapper within Android SDK. Could not find Android SDK directory.\n' + + 'Might need to install Android SDK or set up \'ANDROID_HOME\' env variable.')); var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper'); if (!fs.existsSync(wrapperDir)) { - return Q.reject(new Error('Could not find gradle wrapper within Android SDK. Might need to update your Android SDK.\n' + + return Q.reject(new CordovaError('Could not find gradle wrapper within Android SDK. Might need to update your Android SDK.\n' + 'Looked here: ' + wrapperDir)); } return Q.when(); @@ -120,7 +119,7 @@ module.exports.check_java = function() { if (fs.existsSync(path.join(maybeJavaHome, 'lib', 'tools.jar'))) { process.env['JAVA_HOME'] = maybeJavaHome; } else { - throw new Error(msg); + throw new CordovaError(msg); } } } else if (isWindows) { @@ -212,7 +211,7 @@ module.exports.check_android = function() { process.env['ANDROID_HOME'] = grandParentDir; hasAndroidHome = true; } else { - throw new Error('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' + + throw new CordovaError('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' + 'Detected \'android\' command at ' + parentDir + ' but no \'tools\' directory found near.\n' + 'Try reinstall Android SDK or update your PATH to include path to valid SDK directory.'); } @@ -221,18 +220,22 @@ module.exports.check_android = function() { process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'platform-tools'); } if (!process.env['ANDROID_HOME']) { - throw new Error('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' + + throw new CordovaError('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' + 'Failed to find \'android\' command in your \'PATH\'. Try update your \'PATH\' to include path to valid SDK directory.'); } if (!fs.existsSync(process.env['ANDROID_HOME'])) { - throw new Error('\'ANDROID_HOME\' environment variable is set to non-existent path: ' + process.env['ANDROID_HOME'] + + throw new CordovaError('\'ANDROID_HOME\' environment variable is set to non-existent path: ' + process.env['ANDROID_HOME'] + '\nTry update it manually to point to valid SDK directory.'); } }); }; -module.exports.getAbsoluteAndroidCmd = function() { - return forgivingWhichSync('android').replace(/(\s)/g, '\\$1'); +module.exports.getAbsoluteAndroidCmd = function () { + var cmd = forgivingWhichSync('android'); + if (process.platform === 'win32') { + return '"' + cmd + '"'; + } + return cmd.replace(/(\s)/g, '\\$1'); }; module.exports.check_android_target = function(valid_target) { @@ -251,7 +254,7 @@ module.exports.check_android_target = function(valid_target) { } var androidCmd = module.exports.getAbsoluteAndroidCmd(); - throw new Error('Please install Android target: "' + valid_target + '".\n\n' + + throw new CordovaError('Please install Android target: "' + valid_target + '".\n\n' + 'Hint: Open the SDK manager by running: ' + androidCmd + '\n' + 'You will require:\n' + '1. "SDK Platform" for ' + valid_target + '\n' + diff --git a/platforms/android/cordova/lib/device.js b/platforms/android/cordova/lib/device.js index c13fdc4..4f9acc8 100644 --- a/platforms/android/cordova/lib/device.js +++ b/platforms/android/cordova/lib/device.js @@ -19,40 +19,30 @@ under the License. */ -var exec = require('./exec'), - Q = require('q'), - os = require('os'), - build = require('./build'), - appinfo = require('./appinfo'); +var Q = require('q'), + build = require('./build'); +var path = require('path'); +var Adb = require('./Adb'); +var AndroidManifest = require('./AndroidManifest'); +var spawn = require('cordova-common').superspawn.spawn; +var CordovaError = require('cordova-common').CordovaError; +var events = require('cordova-common').events; /** * Returns a promise for the list of the device ID's found * @param lookHarder When true, try restarting adb if no devices are found. */ module.exports.list = function(lookHarder) { - function helper() { - return exec('adb devices', os.tmpdir()) - .then(function(output) { - var response = output.split('\n'); - var device_list = []; - for (var i = 1; i < response.length; i++) { - if (response[i].match(/\w+\tdevice/) && !response[i].match(/emulator/)) { - device_list.push(response[i].replace(/\tdevice/, '').replace('\r', '')); - } - } - return device_list; - }); - } - return helper() + return Adb.devices() .then(function(list) { if (list.length === 0 && lookHarder) { // adb kill-server doesn't seem to do the trick. // Could probably find a x-platform version of killall, but I'm not actually // sure that this scenario even happens on non-OSX machines. - return exec('killall adb') + return spawn('killall', ['adb']) .then(function() { - console.log('Restarting adb to see if more devices are detected.'); - return helper(); + events.emit('verbose', 'Restarting adb to see if more devices are detected.'); + return Adb.devices(); }, function() { // For non-killall OS's. return list; @@ -66,7 +56,7 @@ module.exports.resolveTarget = function(target) { return this.list(true) .then(function(device_list) { if (!device_list || !device_list.length) { - return Q.reject('ERROR: Failed to deploy to device, no devices found.'); + return Q.reject(new CordovaError('Failed to deploy to device, no devices found.')); } // default device target = target || device_list[0]; @@ -95,27 +85,35 @@ module.exports.install = function(target, buildResults) { return module.exports.resolveTarget(target); }).then(function(resolvedTarget) { var apk_path = build.findBestApkForArchitecture(buildResults, resolvedTarget.arch); - var launchName = appinfo.getActivityName(); - console.log('Using apk: ' + apk_path); - console.log('Installing app on device...'); - var cmd = 'adb -s ' + resolvedTarget.target + ' install -r "' + apk_path + '"'; - return exec(cmd, os.tmpdir()) - .then(function(output) { - if (output.match(/Failure/)) return Q.reject('ERROR: Failed to install apk to device: ' + output); + var manifest = new AndroidManifest(path.join(__dirname, '../../AndroidManifest.xml')); + var pkgName = manifest.getPackageId(); + var launchName = pkgName + '/.' + manifest.getActivity().getName(); + events.emit('log', 'Using apk: ' + apk_path); - //unlock screen - var cmd = 'adb -s ' + resolvedTarget.target + ' shell input keyevent 82'; - return exec(cmd, os.tmpdir()); - }, function(err) { return Q.reject('ERROR: Failed to install apk to device: ' + err); }) + return Adb.install(resolvedTarget.target, apk_path, {replace: true}) + .catch(function (error) { + // CB-9557 CB-10157 only uninstall and reinstall app if the one that + // is already installed on device was signed w/different certificate + if (!/INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES/.test(error.toString())) + throw error; + + events.emit('warn', 'Uninstalling app from device and reinstalling it again because the ' + + 'installed app already signed with different key'); + + // This promise is always resolved, even if 'adb uninstall' fails to uninstall app + // or the app doesn't installed at all, so no error catching needed. + return Adb.uninstall(resolvedTarget.target, pkgName) + .then(function() { + return Adb.install(resolvedTarget.target, apk_path, {replace: true}); + }); + }) .then(function() { - // launch the application - console.log('Launching application...'); - var cmd = 'adb -s ' + resolvedTarget.target + ' shell am start -W -a android.intent.action.MAIN -n ' + launchName; - return exec(cmd, os.tmpdir()); + //unlock screen + return Adb.shell(resolvedTarget.target, 'input keyevent 82'); + }).then(function() { + return Adb.start(resolvedTarget.target, launchName); }).then(function() { - console.log('LAUNCH SUCCESS'); - }, function(err) { - return Q.reject('ERROR: Failed to launch application on device: ' + err); + events.emit('log', 'LAUNCH SUCCESS'); }); }); }; diff --git a/platforms/android/cordova/lib/emulator.js b/platforms/android/cordova/lib/emulator.js index e81dd67..96bb5c9 100644 --- a/platforms/android/cordova/lib/emulator.js +++ b/platforms/android/cordova/lib/emulator.js @@ -21,11 +21,14 @@ /* jshint sub:true */ -var exec = require('./exec'); -var appinfo = require('./appinfo'); var retry = require('./retry'); var build = require('./build'); -var check_reqs = require('./check_reqs'); +var path = require('path'); +var Adb = require('./Adb'); +var AndroidManifest = require('./AndroidManifest'); +var events = require('cordova-common').events; +var spawn = require('cordova-common').superspawn.spawn; +var CordovaError = require('cordova-common').CordovaError; var Q = require('q'); var os = require('os'); @@ -33,8 +36,10 @@ var child_process = require('child_process'); // constants var ONE_SECOND = 1000; // in milliseconds -var INSTALL_COMMAND_TIMEOUT = 120 * ONE_SECOND; // in milliseconds +var ONE_MINUTE = 60 * ONE_SECOND; // in milliseconds +var INSTALL_COMMAND_TIMEOUT = 5 * ONE_MINUTE; // in milliseconds var NUM_INSTALL_RETRIES = 3; +var CHECK_BOOTED_INTERVAL = 3 * ONE_SECOND; // in milliseconds var EXEC_KILL_SIGNAL = 'SIGKILL'; /** @@ -48,7 +53,7 @@ var EXEC_KILL_SIGNAL = 'SIGKILL'; } */ module.exports.list_images = function() { - return exec('android list avds') + return spawn('android', ['list', 'avds']) .then(function(output) { var response = output.split('\n'); var emulator_list = []; @@ -92,11 +97,15 @@ module.exports.list_images = function() { * Returns a promise. */ module.exports.best_image = function() { - var project_target = check_reqs.get_target().replace('android-', ''); return this.list_images() .then(function(images) { + // Just return undefined if there is no images + if (images.length === 0) return; + var closest = 9999; var best = images[0]; + // Loading check_reqs at run-time to avoid test-time vs run-time directory structure difference issue + var project_target = require('./check_reqs').get_target().replace('android-', ''); for (var i in images) { var target = images[i].target; if(target) { @@ -115,22 +124,12 @@ module.exports.best_image = function() { // Returns a promise. module.exports.list_started = function() { - return exec('adb devices', os.tmpdir()) - .then(function(output) { - var response = output.split('\n'); - var started_emulator_list = []; - for (var i = 1; i < response.length; i++) { - if (response[i].match(/device/) && response[i].match(/emulator/)) { - started_emulator_list.push(response[i].replace(/\tdevice/, '').replace('\r', '')); - } - } - return started_emulator_list; - }); + return Adb.devices({emulators: true}); }; // Returns a promise. module.exports.list_targets = function() { - return exec('android list targets', os.tmpdir()) + return spawn('android', ['list', 'targets'], {cwd: os.tmpdir()}) .then(function(output) { var target_out = output.split('\n'); var targets = []; @@ -146,106 +145,117 @@ module.exports.list_targets = function() { /* * Starts an emulator with the given ID, * and returns the started ID of that emulator. - * If no ID is given it will used the first image available, + * If no ID is given it will use the first image available, * if no image is available it will error out (maybe create one?). + * If no boot timeout is given or the value is negative it will wait forever for + * the emulator to boot * * Returns a promise. */ -module.exports.start = function(emulator_ID) { +module.exports.start = function(emulator_ID, boot_timeout) { var self = this; - var emulator_id, num_started, started_emulators; - return self.list_started() - .then(function(list) { - started_emulators = list; - num_started = started_emulators.length; - if (!emulator_ID) { - return self.list_images() - .then(function(emulator_list) { - if (emulator_list.length > 0) { - return self.best_image() - .then(function(best) { - emulator_ID = best.name; - console.log('WARNING : no emulator specified, defaulting to ' + emulator_ID); - return emulator_ID; - }); - } else { - var androidCmd = check_reqs.getAbsoluteAndroidCmd(); - return Q.reject('ERROR : No emulator images (avds) found.\n' + - '1. Download desired System Image by running: ' + androidCmd + ' sdk\n' + - '2. Create an AVD by running: ' + androidCmd + ' avd\n' + - 'HINT: For a faster emulator, use an Intel System Image and install the HAXM device driver\n'); - } - }); - } else { - return Q(emulator_ID); - } - }).then(function() { - var cmd = 'emulator'; - var args = ['-avd', emulator_ID]; - var proc = child_process.spawn(cmd, args, { stdio: 'inherit', detached: true }); - proc.unref(); // Don't wait for it to finish, since the emulator will probably keep running for a long time. - }).then(function() { - // wait for emulator to start - console.log('Waiting for emulator...'); - return self.wait_for_emulator(num_started); - }).then(function(new_started) { - if (new_started.length > 1) { - for (var i in new_started) { - if (started_emulators.indexOf(new_started[i]) < 0) { - emulator_id = new_started[i]; - } + return Q().then(function() { + if (emulator_ID) return Q(emulator_ID); + + return self.best_image() + .then(function(best) { + if (best && best.name) { + events.emit('warn', 'No emulator specified, defaulting to ' + best.name); + return best.name; } - } else { - emulator_id = new_started[0]; - } - if (!emulator_id) return Q.reject('ERROR : Failed to start emulator, could not find new emulator'); + + // Loading check_reqs at run-time to avoid test-time vs run-time directory structure difference issue + var androidCmd = require('./check_reqs').getAbsoluteAndroidCmd(); + return Q.reject(new CordovaError('No emulator images (avds) found.\n' + + '1. Download desired System Image by running: ' + androidCmd + ' sdk\n' + + '2. Create an AVD by running: ' + androidCmd + ' avd\n' + + 'HINT: For a faster emulator, use an Intel System Image and install the HAXM device driver\n')); + }); + }).then(function(emulatorId) { + var uuid = 'cordova_emulator_' + new Date().getTime(); + var uuidProp = 'emu.uuid=' + uuid; + var args = ['-avd', emulatorId, '-prop', uuidProp]; + // Don't wait for it to finish, since the emulator will probably keep running for a long time. + child_process + .spawn('emulator', args, { stdio: 'inherit', detached: true }) + .unref(); + + // wait for emulator to start + events.emit('log', 'Waiting for emulator...'); + return self.wait_for_emulator(uuid); + }).then(function(emulatorId) { + if (!emulatorId) + return Q.reject(new CordovaError('Failed to start emulator')); //wait for emulator to boot up process.stdout.write('Booting up emulator (this may take a while)...'); - return self.wait_for_boot(emulator_id); - }).then(function() { - console.log('BOOT COMPLETE'); - - //unlock screen - return exec('adb -s ' + emulator_id + ' shell input keyevent 82', os.tmpdir()); - }).then(function() { - //return the new emulator id for the started emulators - return emulator_id; + return self.wait_for_boot(emulatorId, boot_timeout) + .then(function(success) { + if (success) { + events.emit('log','BOOT COMPLETE'); + //unlock screen + return Adb.shell(emulatorId, 'input keyevent 82') + .then(function() { + //return the new emulator id for the started emulators + return emulatorId; + }); + } else { + // We timed out waiting for the boot to happen + return null; + } + }); }); }; /* - * Waits for the new emulator to apear on the started-emulator list. - * Returns a promise with a list of newly started emulators' IDs. + * Waits for an emulator with given uuid to apear on the started-emulator list. + * Returns a promise with this emulator's ID. */ -module.exports.wait_for_emulator = function(num_running) { +module.exports.wait_for_emulator = function(uuid) { var self = this; return self.list_started() .then(function(new_started) { - if (new_started.length > num_running) { - return new_started; - } else { - return Q.delay(1000).then(function() { - return self.wait_for_emulator(num_running); - }); - } - }); + var emulator_id = null; + var promises = []; + + new_started.forEach(function (emulator) { + promises.push( + Adb.shell(emulator, 'getprop emu.uuid') + .then(function (output) { + if (output.indexOf(uuid) >= 0) { + emulator_id = emulator; + } + }) + ); + }); + + return Q.all(promises).then(function () { + return emulator_id || self.wait_for_emulator(uuid); + }); + }); }; /* - * Waits for the boot animation property of the emulator to switch to 'stopped' + * Waits for the core android process of the emulator to start. Returns a + * promise that resolves to a boolean indicating success. Not specifying a + * time_remaining or passing a negative value will cause it to wait forever */ -module.exports.wait_for_boot = function(emulator_id) { +module.exports.wait_for_boot = function(emulator_id, time_remaining) { var self = this; - return exec('adb -s ' + emulator_id + ' shell getprop init.svc.bootanim', os.tmpdir()) + return Adb.shell(emulator_id, 'ps') .then(function(output) { - if (output.match(/stopped/)) { - return; + if (output.match(/android\.process\.acore/)) { + return true; + } else if (time_remaining === 0) { + return false; } else { process.stdout.write('.'); - return Q.delay(3000).then(function() { - return self.wait_for_boot(emulator_id); + + // Check at regular intervals + return Q.delay(time_remaining < CHECK_BOOTED_INTERVAL ? time_remaining : CHECK_BOOTED_INTERVAL).then(function() { + var updated_time = time_remaining >= 0 ? Math.max(time_remaining - CHECK_BOOTED_INTERVAL, 0) : time_remaining; + return self.wait_for_boot(emulator_id, updated_time); }); } }); @@ -259,7 +269,7 @@ module.exports.wait_for_boot = function(emulator_id) { module.exports.create_image = function(name, target) { console.log('Creating avd named ' + name); if (target) { - return exec('android create avd --name ' + name + ' --target ' + target) + return spawn('android', ['create', 'avd', '--name', name, '--target', target]) .then(null, function(error) { console.error('ERROR : Failed to create emulator image : '); console.error(' Do you have the latest android targets including ' + target + '?'); @@ -267,7 +277,7 @@ module.exports.create_image = function(name, target) { }); } else { console.log('WARNING : Project target not found, creating avd with a different target but the project may fail to install.'); - return exec('android create avd --name ' + name + ' --target ' + this.list_targets()[0]) + return spawn('android', ['create', 'avd', '--name', name, '--target', this.list_targets()[0]]) .then(function() { // TODO: This seems like another error case, even though it always happens. console.error('ERROR : Unable to create an avd emulator, no targets found.'); @@ -309,6 +319,8 @@ module.exports.resolveTarget = function(target) { module.exports.install = function(givenTarget, buildResults) { var target; + var manifest = new AndroidManifest(path.join(__dirname, '../../AndroidManifest.xml')); + var pkgName = manifest.getPackageId(); // resolve the target emulator return Q().then(function () { @@ -324,49 +336,73 @@ module.exports.install = function(givenTarget, buildResults) { // install the app }).then(function () { + // This promise is always resolved, even if 'adb uninstall' fails to uninstall app + // or the app doesn't installed at all, so no error catching needed. + return Q.when() + .then(function() { - var apk_path = build.findBestApkForArchitecture(buildResults, target.arch); - var execOptions = { - timeout: INSTALL_COMMAND_TIMEOUT, // in milliseconds - killSignal: EXEC_KILL_SIGNAL - }; - - console.log('Installing app on emulator...'); - console.log('Using apk: ' + apk_path); - - var retriedInstall = retry.retryPromise( - NUM_INSTALL_RETRIES, - exec, 'adb -s ' + target.target + ' install -r -d "' + apk_path + '"', os.tmpdir(), execOptions - ); + var apk_path = build.findBestApkForArchitecture(buildResults, target.arch); + var execOptions = { + cwd: os.tmpdir(), + timeout: INSTALL_COMMAND_TIMEOUT, // in milliseconds + killSignal: EXEC_KILL_SIGNAL + }; + + events.emit('log', 'Using apk: ' + apk_path); + events.emit('verbose', 'Installing app on emulator...'); + + // A special function to call adb install in specific environment w/ specific options. + // Introduced as a part of fix for http://issues.apache.org/jira/browse/CB-9119 + // to workaround sporadic emulator hangs + function adbInstallWithOptions(target, apk, opts) { + events.emit('verbose', 'Installing apk ' + apk + ' on ' + target + '...'); + + var command = 'adb -s ' + target + ' install -r "' + apk + '"'; + return Q.promise(function (resolve, reject) { + child_process.exec(command, opts, function(err, stdout, stderr) { + if (err) reject(new CordovaError('Error executing "' + command + '": ' + stderr)); + // adb does not return an error code even if installation fails. Instead it puts a specific + // message to stdout, so we have to use RegExp matching to detect installation failure. + else if (/Failure/.test(stdout)) reject(new CordovaError('Failed to install apk to emulator: ' + stdout)); + else resolve(stdout); + }); + }); + } - return retriedInstall.then(function (output) { - if (output.match(/Failure/)) { - return Q.reject('Failed to install apk to emulator: ' + output); - } else { - console.log('INSTALL SUCCESS'); + function installPromise () { + return adbInstallWithOptions(target.target, apk_path, execOptions) + .catch(function (error) { + // CB-9557 CB-10157 only uninstall and reinstall app if the one that + // is already installed on device was signed w/different certificate + if (!/INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES/.test(error.toString())) + throw error; + + events.emit('warn', 'Uninstalling app from device and reinstalling it again because the ' + + 'installed app already signed with different key'); + + // This promise is always resolved, even if 'adb uninstall' fails to uninstall app + // or the app doesn't installed at all, so no error catching needed. + return Adb.uninstall(target.target, pkgName) + .then(function() { + return adbInstallWithOptions(target.target, apk_path, execOptions); + }); + }); } - }, function (err) { - return Q.reject('Failed to install apk to emulator: ' + err); - }); + return retry.retryPromise(NUM_INSTALL_RETRIES, installPromise) + .then(function (output) { + events.emit('log', 'INSTALL SUCCESS'); + }); + }); // unlock screen }).then(function () { - console.log('Unlocking screen...'); - return exec('adb -s ' + target.target + ' shell input keyevent 82', os.tmpdir()); - - // launch the application + events.emit('verbose', 'Unlocking screen...'); + return Adb.shell(target.target, 'input keyevent 82'); }).then(function () { - - console.log('Launching application...'); - var launchName = appinfo.getActivityName(); - var cmd = 'adb -s ' + target.target + ' shell am start -W -a android.intent.action.MAIN -n ' + launchName; - return exec(cmd, os.tmpdir()); - + Adb.start(target.target, pkgName + '/.' + manifest.getActivity().getName()); // report success or failure }).then(function (output) { - console.log('LAUNCH SUCCESS'); - }, function (err) { - return Q.reject('Failed to launch app on emulator: ' + err); + events.emit('log', 'LAUNCH SUCCESS'); }); }; diff --git a/platforms/android/cordova/lib/exec.js b/platforms/android/cordova/lib/exec.js deleted file mode 100644 index 798a93b..0000000 --- a/platforms/android/cordova/lib/exec.js +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env node - -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -var child_process = require("child_process"); -var Q = require("q"); - -// constants -var DEFAULT_MAX_BUFFER = 1024000; - -// Takes a command and optional current working directory. -// Returns a promise that either resolves with the stdout, or -// rejects with an error message and the stderr. -// -// WARNING: -// opt_cwd is an artifact of an old design, and must -// be removed in the future; the correct solution is -// to pass the options object the same way that -// child_process.exec expects -// -// NOTE: -// exec documented here - https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback -module.exports = function(cmd, opt_cwd, options) { - - var d = Q.defer(); - - if (typeof options === "undefined") { - options = {}; - } - - // override cwd to preserve old opt_cwd behavior - options.cwd = opt_cwd; - - // set maxBuffer - if (typeof options.maxBuffer === "undefined") { - options.maxBuffer = DEFAULT_MAX_BUFFER; - } - - try { - child_process.exec(cmd, options, function(err, stdout, stderr) { - if (err) d.reject("Error executing \"" + cmd + "\": " + stderr); - else d.resolve(stdout); - }); - } catch(e) { - console.error("error caught: " + e); - d.reject(e); - } - - return d.promise; -}; - diff --git a/platforms/android/cordova/lib/pluginHandlers.js b/platforms/android/cordova/lib/pluginHandlers.js new file mode 100644 index 0000000..381734d --- /dev/null +++ b/platforms/android/cordova/lib/pluginHandlers.js @@ -0,0 +1,252 @@ +/* + * + * Copyright 2013 Anis Kadri + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint unused: vars */ + +var fs = require('fs'); +var path = require('path'); +var shell = require('shelljs'); +var events = require('cordova-common').events; +var CordovaError = require('cordova-common').CordovaError; + +var handlers = { + 'source-file':{ + install:function(obj, plugin, project, options) { + if (!obj.src) throw new CordovaError(' element is missing "src" attribute for plugin: ' + plugin.id); + if (!obj.targetDir) throw new CordovaError(' element is missing "target-dir" attribute for plugin: ' + plugin.id); + var dest = path.join(obj.targetDir, path.basename(obj.src)); + copyNewFile(plugin.dir, obj.src, project.projectDir, dest, options && options.link); + }, + uninstall:function(obj, plugin, project, options) { + var dest = path.join(obj.targetDir, path.basename(obj.src)); + deleteJava(project.projectDir, dest); + } + }, + 'lib-file':{ + install:function(obj, plugin, project, options) { + var dest = path.join('libs', path.basename(obj.src)); + copyFile(plugin.dir, obj.src, project.projectDir, dest, options && options.link); + }, + uninstall:function(obj, plugin, project, options) { + var dest = path.join('libs', path.basename(obj.src)); + removeFile(project.projectDir, dest); + } + }, + 'resource-file':{ + install:function(obj, plugin, project, options) { + copyFile(plugin.dir, obj.src, project.projectDir, path.normalize(obj.target), options && options.link); + }, + uninstall:function(obj, plugin, project, options) { + removeFile(project.projectDir, path.normalize(obj.target)); + } + }, + 'framework': { + install:function(obj, plugin, project, options) { + var src = obj.src; + if (!src) throw new CordovaError('src not specified in for plugin: ' + plugin.id); + + events.emit('verbose', 'Installing Android library: ' + src); + var parentDir = obj.parent ? path.resolve(project.projectDir, obj.parent) : project.projectDir; + var subDir; + + if (obj.custom) { + var subRelativeDir = project.getCustomSubprojectRelativeDir(plugin.id, src); + copyNewFile(plugin.dir, src, project.projectDir, subRelativeDir, options && options.link); + subDir = path.resolve(project.projectDir, subRelativeDir); + } else { + obj.type = 'sys'; + subDir = src; + } + + if (obj.type == 'gradleReference') { + project.addGradleReference(parentDir, subDir); + } else if (obj.type == 'sys') { + project.addSystemLibrary(parentDir, subDir); + } else { + project.addSubProject(parentDir, subDir); + } + }, + uninstall:function(obj, plugin, project, options) { + var src = obj.src; + if (!src) throw new CordovaError('src not specified in for plugin: ' + plugin.id); + + events.emit('verbose', 'Uninstalling Android library: ' + src); + var parentDir = obj.parent ? path.resolve(project.projectDir, obj.parent) : project.projectDir; + var subDir; + + if (obj.custom) { + var subRelativeDir = project.getCustomSubprojectRelativeDir(plugin.id, src); + removeFile(project.projectDir, subRelativeDir); + subDir = path.resolve(project.projectDir, subRelativeDir); + // If it's the last framework in the plugin, remove the parent directory. + var parDir = path.dirname(subDir); + if (fs.readdirSync(parDir).length === 0) { + fs.rmdirSync(parDir); + } + } else { + obj.type = 'sys'; + subDir = src; + } + + if (obj.type == 'gradleReference') { + project.removeGradleReference(parentDir, subDir); + } else if (obj.type == 'sys') { + project.removeSystemLibrary(parentDir, subDir); + } else { + project.removeSubProject(parentDir, subDir); + } + } + }, + asset:{ + install:function(obj, plugin, project, options) { + if (!obj.src) { + throw new CordovaError(' tag without required "src" attribute. plugin=' + plugin.dir); + } + if (!obj.target) { + throw new CordovaError(' tag without required "target" attribute'); + } + + var www = options.usePlatformWww ? project.platformWww : project.www; + copyFile(plugin.dir, obj.src, www, obj.target); + }, + uninstall:function(obj, plugin, project, options) { + var target = obj.target || obj.src; + + if (!target) throw new CordovaError(' tag without required "target" attribute'); + + var www = options.usePlatformWww ? project.platformWww : project.www; + removeFile(www, target); + removeFileF(path.resolve(www, 'plugins', plugin.id)); + } + }, + 'js-module': { + install: function (obj, plugin, project, options) { + // Copy the plugin's files into the www directory. + var moduleSource = path.resolve(plugin.dir, obj.src); + var moduleName = plugin.id + '.' + (obj.name || path.parse(obj.src).name); + + // Read in the file, prepend the cordova.define, and write it back out. + var scriptContent = fs.readFileSync(moduleSource, 'utf-8').replace(/^\ufeff/, ''); // Window BOM + if (moduleSource.match(/.*\.json$/)) { + scriptContent = 'module.exports = ' + scriptContent; + } + scriptContent = 'cordova.define("' + moduleName + '", function(require, exports, module) {\n' + scriptContent + '\n});\n'; + + var www = options.usePlatformWww ? project.platformWww : project.www; + var moduleDestination = path.resolve(www, 'plugins', plugin.id, obj.src); + shell.mkdir('-p', path.dirname(moduleDestination)); + fs.writeFileSync(moduleDestination, scriptContent, 'utf-8'); + }, + uninstall: function (obj, plugin, project, options) { + var pluginRelativePath = path.join('plugins', plugin.id, obj.src); + var www = options.usePlatformWww ? project.platformWww : project.www; + removeFileAndParents(www, pluginRelativePath); + } + } +}; + +module.exports.getInstaller = function (type) { + if (handlers[type] && handlers[type].install) { + return handlers[type].install; + } + + events.emit('verbose', '<' + type + '> is not supported for android plugins'); +}; + +module.exports.getUninstaller = function(type) { + if (handlers[type] && handlers[type].uninstall) { + return handlers[type].uninstall; + } + + events.emit('verbose', '<' + type + '> is not supported for android plugins'); +}; + +function copyFile (plugin_dir, src, project_dir, dest, link) { + src = path.resolve(plugin_dir, src); + if (!fs.existsSync(src)) throw new CordovaError('"' + src + '" not found!'); + + // check that src path is inside plugin directory + var real_path = fs.realpathSync(src); + var real_plugin_path = fs.realpathSync(plugin_dir); + if (real_path.indexOf(real_plugin_path) !== 0) + throw new CordovaError('"' + src + '" not located within plugin!'); + + dest = path.resolve(project_dir, dest); + + // check that dest path is located in project directory + if (dest.indexOf(project_dir) !== 0) + throw new CordovaError('"' + dest + '" not located within project!'); + + shell.mkdir('-p', path.dirname(dest)); + + if (link) { + fs.symlinkSync(path.relative(path.dirname(dest), src), dest); + } else if (fs.statSync(src).isDirectory()) { + // XXX shelljs decides to create a directory when -R|-r is used which sucks. http://goo.gl/nbsjq + shell.cp('-Rf', src+'/*', dest); + } else { + shell.cp('-f', src, dest); + } +} + +// Same as copy file but throws error if target exists +function copyNewFile (plugin_dir, src, project_dir, dest, link) { + var target_path = path.resolve(project_dir, dest); + if (fs.existsSync(target_path)) + throw new CordovaError('"' + target_path + '" already exists!'); + + copyFile(plugin_dir, src, project_dir, dest, !!link); +} + +// checks if file exists and then deletes. Error if doesn't exist +function removeFile (project_dir, src) { + var file = path.resolve(project_dir, src); + shell.rm('-Rf', file); +} + +// deletes file/directory without checking +function removeFileF (file) { + shell.rm('-Rf', file); +} + +// Sometimes we want to remove some java, and prune any unnecessary empty directories +function deleteJava (project_dir, destFile) { + removeFileAndParents(project_dir, destFile, 'src'); +} + +function removeFileAndParents (baseDir, destFile, stopper) { + stopper = stopper || '.'; + var file = path.resolve(baseDir, destFile); + if (!fs.existsSync(file)) return; + + removeFileF(file); + + // check if directory is empty + var curDir = path.dirname(file); + + while(curDir !== path.resolve(baseDir, stopper)) { + if(fs.existsSync(curDir) && fs.readdirSync(curDir).length === 0) { + fs.rmdirSync(curDir); + curDir = path.resolve(curDir, '..'); + } else { + // directory not empty...do nothing + break; + } + } +} diff --git a/platforms/android/cordova/lib/prepare.js b/platforms/android/cordova/lib/prepare.js new file mode 100644 index 0000000..3fba9fd --- /dev/null +++ b/platforms/android/cordova/lib/prepare.js @@ -0,0 +1,379 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var Q = require('q'); +var fs = require('fs'); +var path = require('path'); +var shell = require('shelljs'); +var events = require('cordova-common').events; +var AndroidManifest = require('./AndroidManifest'); +var xmlHelpers = require('cordova-common').xmlHelpers; +var CordovaError = require('cordova-common').CordovaError; +var ConfigParser = require('cordova-common').ConfigParser; + +module.exports.prepare = function (cordovaProject) { + + var self = this; + + this._config = updateConfigFilesFrom(cordovaProject.projectConfig, + this._munger, this.locations); + + // Update own www dir with project's www assets and plugins' assets and js-files + return Q.when(updateWwwFrom(cordovaProject, this.locations)) + .then(function () { + // update project according to config.xml changes. + return updateProjectAccordingTo(self._config, self.locations); + }) + .then(function () { + handleIcons(cordovaProject.projectConfig, self.root); + handleSplashes(cordovaProject.projectConfig, self.root); + }) + .then(function () { + self.events.emit('verbose', 'updated project successfully'); + }); +}; + +/** + * Updates config files in project based on app's config.xml and config munge, + * generated by plugins. + * + * @param {ConfigParser} sourceConfig A project's configuration that will + * be merged into platform's config.xml + * @param {ConfigChanges} configMunger An initialized ConfigChanges instance + * for this platform. + * @param {Object} locations A map of locations for this platform + * + * @return {ConfigParser} An instance of ConfigParser, that + * represents current project's configuration. When returned, the + * configuration is already dumped to appropriate config.xml file. + */ +function updateConfigFilesFrom(sourceConfig, configMunger, locations) { + events.emit('verbose', 'Generating config.xml from defaults for platform "android"'); + + // First cleanup current config and merge project's one into own + // Overwrite platform config.xml with defaults.xml. + shell.cp('-f', locations.defaultConfigXml, locations.configXml); + + // Then apply config changes from global munge to all config files + // in project (including project's config) + configMunger.reapply_global_munge().save_all(); + + // Merge changes from app's config.xml into platform's one + var config = new ConfigParser(locations.configXml); + xmlHelpers.mergeXml(sourceConfig.doc.getroot(), + config.doc.getroot(), 'android', /*clobber=*/true); + + config.write(); + return config; +} + +/** + * Updates platform 'www' directory by replacing it with contents of + * 'platform_www' and app www. Also copies project's overrides' folder into + * the platform 'www' folder + * + * @param {Object} cordovaProject An object which describes cordova project. + * @param {Object} destinations An object that contains destination + * paths for www files. + */ +function updateWwwFrom(cordovaProject, destinations) { + shell.rm('-rf', destinations.www); + shell.mkdir('-p', destinations.www); + // Copy source files from project's www directory + shell.cp('-rf', path.join(cordovaProject.locations.www, '*'), destinations.www); + // Override www sources by files in 'platform_www' directory + shell.cp('-rf', path.join(destinations.platformWww, '*'), destinations.www); + + // If project contains 'merges' for our platform, use them as another overrides + var merges_path = path.join(cordovaProject.root, 'merges', 'android'); + if (fs.existsSync(merges_path)) { + events.emit('verbose', 'Found "merges" for android platform. Copying over existing "www" files.'); + var overrides = path.join(merges_path, '*'); + shell.cp('-rf', overrides, destinations.www); + } +} + +/** + * Updates project structure and AndroidManifest according to project's configuration. + * + * @param {ConfigParser} platformConfig A project's configuration that will + * be used to update project + * @param {Object} locations A map of locations for this platform + */ +function updateProjectAccordingTo(platformConfig, locations) { + // Update app name by editing res/values/strings.xml + var name = platformConfig.name(); + var strings = xmlHelpers.parseElementtreeSync(locations.strings); + strings.find('string[@name="app_name"]').text = name; + fs.writeFileSync(locations.strings, strings.write({indent: 4}), 'utf-8'); + events.emit('verbose', 'Wrote out Android application name to "' + name + '"'); + + // Java packages cannot support dashes + var pkg = (platformConfig.android_packageName() || platformConfig.packageName()).replace(/-/g, '_'); + + var manifest = new AndroidManifest(locations.manifest); + var orig_pkg = manifest.getPackageId(); + + manifest.getActivity() + .setOrientation(findOrientationValue(platformConfig)) + .setLaunchMode(findAndroidLaunchModePreference(platformConfig)); + + manifest.setVersionName(platformConfig.version()) + .setVersionCode(platformConfig.android_versionCode() || default_versionCode(platformConfig.version())) + .setPackageId(pkg) + .setMinSdkVersion(platformConfig.getPreference('android-minSdkVersion', 'android')) + .setMaxSdkVersion(platformConfig.getPreference('android-maxSdkVersion', 'android')) + .setTargetSdkVersion(platformConfig.getPreference('android-targetSdkVersion', 'android')) + .write(); + + var javaPattern = path.join(locations.root, 'src', orig_pkg.replace(/\./g, '/'), '*.java'); + var java_files = shell.ls(javaPattern).filter(function(f) { + return shell.grep(/extends\s+CordovaActivity/g, f); + }); + + if (java_files.length === 0) { + throw new CordovaError('No Java files found which extend CordovaActivity.'); + } else if(java_files.length > 1) { + events.emit('log', 'Multiple candidate Java files (.java files which extend CordovaActivity) found. Guessing at the first one, ' + java_files[0]); + } + + var destFile = path.join(locations.root, 'src', pkg.replace(/\./g, '/'), path.basename(java_files[0])); + shell.mkdir('-p', path.dirname(destFile)); + shell.sed(/package [\w\.]*;/, 'package ' + pkg + ';', java_files[0]).to(destFile); + events.emit('verbose', 'Wrote out Android package name to "' + pkg + '"'); + + if (orig_pkg !== pkg) { + // If package was name changed we need to remove old java with main activity + shell.rm('-Rf',java_files[0]); + // remove any empty directories + var currentDir = path.dirname(java_files[0]); + var sourcesRoot = path.resolve(locations.root, 'src'); + while(currentDir !== sourcesRoot) { + if(fs.existsSync(currentDir) && fs.readdirSync(currentDir).length === 0) { + fs.rmdirSync(currentDir); + currentDir = path.resolve(currentDir, '..'); + } else { + break; + } + } + } +} + +// Consturct the default value for versionCode as +// PATCH + MINOR * 100 + MAJOR * 10000 +// see http://developer.android.com/tools/publishing/versioning.html +function default_versionCode(version) { + var nums = version.split('-')[0].split('.'); + var versionCode = 0; + if (+nums[0]) { + versionCode += +nums[0] * 10000; + } + if (+nums[1]) { + versionCode += +nums[1] * 100; + } + if (+nums[2]) { + versionCode += +nums[2]; + } + return versionCode; +} + +function copyImage(src, resourcesDir, density, name) { + var destFolder = path.join(resourcesDir, (density ? 'drawable-': 'drawable') + density); + var isNinePatch = !!/\.9\.png$/.exec(src); + var ninePatchName = name.replace(/\.png$/, '.9.png'); + + // default template does not have default asset for this density + if (!fs.existsSync(destFolder)) { + fs.mkdirSync(destFolder); + } + + var destFilePath = path.join(destFolder, isNinePatch ? ninePatchName : name); + events.emit('verbose', 'copying image from ' + src + ' to ' + destFilePath); + shell.cp('-f', src, destFilePath); +} + +function handleSplashes(projectConfig, platformRoot) { + var resources = projectConfig.getSplashScreens('android'); + // if there are "splash" elements in config.xml + if (resources.length > 0) { + deleteDefaultResourceAt(platformRoot, 'screen.png'); + events.emit('verbose', 'splash screens: ' + JSON.stringify(resources)); + + // The source paths for icons and splashes are relative to + // project's config.xml location, so we use it as base path. + var projectRoot = path.dirname(projectConfig.path); + var destination = path.join(platformRoot, 'res'); + + var hadMdpi = false; + resources.forEach(function (resource) { + if (!resource.density) { + return; + } + if (resource.density == 'mdpi') { + hadMdpi = true; + } + copyImage(path.join(projectRoot, resource.src), destination, resource.density, 'screen.png'); + }); + // There's no "default" drawable, so assume default == mdpi. + if (!hadMdpi && resources.defaultResource) { + copyImage(path.join(projectRoot, resources.defaultResource.src), destination, 'mdpi', 'screen.png'); + } + } +} + +function handleIcons(projectConfig, platformRoot) { + var icons = projectConfig.getIcons('android'); + + // if there are icon elements in config.xml + if (icons.length === 0) { + events.emit('verbose', 'This app does not have launcher icons defined'); + return; + } + + deleteDefaultResourceAt(platformRoot, 'icon.png'); + + var android_icons = {}; + var default_icon; + // http://developer.android.com/design/style/iconography.html + var sizeToDensityMap = { + 36: 'ldpi', + 48: 'mdpi', + 72: 'hdpi', + 96: 'xhdpi', + 144: 'xxhdpi', + 192: 'xxxhdpi' + }; + // find the best matching icon for a given density or size + // @output android_icons + var parseIcon = function(icon, icon_size) { + // do I have a platform icon for that density already + var density = icon.density || sizeToDensityMap[icon_size]; + if (!density) { + // invalid icon defition ( or unsupported size) + return; + } + var previous = android_icons[density]; + if (previous && previous.platform) { + return; + } + android_icons[density] = icon; + }; + + // iterate over all icon elements to find the default icon and call parseIcon + for (var i=0; i= 0; + if (!valid) { + // Note: warn, but leave the launch mode as developer wanted, in case the list of options changes in the future + events.emit('warn', 'Unrecognized value for AndroidLaunchMode preference: ' + + launchMode + '. Expected values are: ' + expectedValues.join(', ')); + } + + return launchMode; +} + +/** + * Queries ConfigParser object for the orientation value. Warns if + * global preference value is not supported by platform. + * + * @param {Object} platformConfig ConfigParser object + * + * @return {String} Global/platform-specific orientation in lower-case + * (or empty string if both are undefined). + */ +function findOrientationValue(platformConfig) { + + var ORIENTATION_DEFAULT = 'default'; + + var orientation = platformConfig.getPreference('orientation'); + if (!orientation) { + return ORIENTATION_DEFAULT; + } + + var GLOBAL_ORIENTATIONS = ['default', 'portrait','landscape']; + function isSupported(orientation) { + return GLOBAL_ORIENTATIONS.indexOf(orientation.toLowerCase()) >= 0; + } + + // Check if the given global orientation is supported + if (orientation && isSupported(orientation)) { + return orientation; + } + + events.emit('warn', 'Unsupported global orientation: ' + orientation + + '. Defaulting to value: ' + ORIENTATION_DEFAULT); + return ORIENTATION_DEFAULT; +} diff --git a/platforms/android/cordova/lib/retry.js b/platforms/android/cordova/lib/retry.js index dc52a7d..3cb4927 100644 --- a/platforms/android/cordova/lib/retry.js +++ b/platforms/android/cordova/lib/retry.js @@ -21,7 +21,9 @@ /* jshint node: true */ -"use strict"; +'use strict'; + +var events = require('cordova-common').events; /* * Retry a promise-returning function a number of times, propagating its @@ -56,7 +58,7 @@ module.exports.retryPromise = function (attemts_left, promiseFunction) { throw error; } - console.log("A retried call failed. Retrying " + attemts_left + " more time(s)."); + events.emit('verbose', 'A retried call failed. Retrying ' + attemts_left + ' more time(s).'); // retry call self again with the same arguments, except attemts_left is now lower var fullArguments = [attemts_left, promiseFunction].concat(promiseFunctionArguments); diff --git a/platforms/android/cordova/lib/run.js b/platforms/android/cordova/lib/run.js index 7f15448..3cc5c0d 100644 --- a/platforms/android/cordova/lib/run.js +++ b/platforms/android/cordova/lib/run.js @@ -25,63 +25,35 @@ var path = require('path'), build = require('./build'), emulator = require('./emulator'), device = require('./device'), - shell = require('shelljs'), Q = require('q'); -/* - * Runs the application on a device if available. - * If no device is found, it will use a started emulator. - * If no started emulators are found it will attempt to start an avd. - * If no avds are found it will error out. - * Returns a promise. - */ - module.exports.run = function(args) { - var buildFlags = []; +function getInstallTarget(runOptions) { var install_target; - var list = false; - - for (var i=2; i 0) { - console.log('WARNING : No target specified, deploying to device \'' + device_list[0] + '\'.'); + self.events.emit('warn', 'No target specified, deploying to device \'' + device_list[0] + '\'.'); install_target = device_list[0]; } else { - console.log('WARNING : No target specified, deploying to emulator'); + self.events.emit('warn', 'No target specified, deploying to emulator'); install_target = '--emulator'; } }); @@ -137,17 +109,25 @@ var path = require('path'), }); }); }).then(function(resolvedTarget) { - return build.run(buildFlags, resolvedTarget).then(function(buildResults) { + // Better just call self.build, but we're doing some processing of + // build results (according to platformApi spec) so they are in different + // format than emulator.install expects. + // TODO: Update emulator/device.install to handle this change + return build.run.call(self, runOptions, resolvedTarget) + .then(function(buildResults) { if (resolvedTarget.isEmulator) { - return emulator.install(resolvedTarget, buildResults); + return emulator.wait_for_boot(resolvedTarget.target) + .then(function () { + return emulator.install(resolvedTarget, buildResults); + }); } return device.install(resolvedTarget, buildResults); }); }); }; -module.exports.help = function(args) { - console.log('Usage: ' + path.relative(process.cwd(), args[1]) + ' [options]'); +module.exports.help = function() { + console.log('Usage: ' + path.relative(process.cwd(), process.argv[1]) + ' [options]'); console.log('Build options :'); console.log(' --debug : Builds project in debug mode'); console.log(' --release : Builds project in release mode'); diff --git a/platforms/android/cordova/lib/spawn.js b/platforms/android/cordova/lib/spawn.js deleted file mode 100644 index 3e500a0..0000000 --- a/platforms/android/cordova/lib/spawn.js +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env node - -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -var child_process = require('child_process'), - Q = require('q'); -var isWindows = process.platform.slice(0, 3) == 'win'; - -// Takes a command and optional current working directory. -module.exports = function(cmd, args, opt_cwd) { - var d = Q.defer(); - var opts = { cwd: opt_cwd, stdio: 'inherit' }; - try { - // Work around spawn not being able to find .bat files. - if (isWindows) { - args = [['/s', '/c', '"' + [cmd].concat(args).map(function(a){if (/^[^"].* .*[^"]/.test(a)) return '"' + a + '"'; return a;}).join(' ')+'"'].join(' ')]; - cmd = 'cmd'; - opts.windowsVerbatimArguments = true; - } - var child = child_process.spawn(cmd, args, opts); - child.on('exit', function(code) { - if (code) { - d.reject('Error code ' + code + ' for command: ' + cmd + ' with args: ' + args); - } else { - d.resolve(); - } - }); - } catch(e) { - console.error('error caught: ' + e); - d.reject(e); - } - return d.promise; -}; diff --git a/platforms/android/cordova/node_modules/abbrev/.npmignore b/platforms/android/cordova/node_modules/abbrev/.npmignore new file mode 100644 index 0000000..9d6cd2f --- /dev/null +++ b/platforms/android/cordova/node_modules/abbrev/.npmignore @@ -0,0 +1,4 @@ +.nyc_output +nyc_output +node_modules +coverage diff --git a/platforms/android/cordova/node_modules/abbrev/.travis.yml b/platforms/android/cordova/node_modules/abbrev/.travis.yml new file mode 100644 index 0000000..991d04b --- /dev/null +++ b/platforms/android/cordova/node_modules/abbrev/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - '0.10' + - '0.12' + - 'iojs' diff --git a/platforms/android/cordova/node_modules/abbrev/CONTRIBUTING.md b/platforms/android/cordova/node_modules/abbrev/CONTRIBUTING.md new file mode 100644 index 0000000..2f30261 --- /dev/null +++ b/platforms/android/cordova/node_modules/abbrev/CONTRIBUTING.md @@ -0,0 +1,3 @@ + To get started, sign the + Contributor License Agreement. diff --git a/platforms/android/cordova/node_modules/abbrev/LICENSE b/platforms/android/cordova/node_modules/abbrev/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/platforms/android/cordova/node_modules/abbrev/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/cordova/node_modules/abbrev/README.md b/platforms/android/cordova/node_modules/abbrev/README.md new file mode 100644 index 0000000..99746fe --- /dev/null +++ b/platforms/android/cordova/node_modules/abbrev/README.md @@ -0,0 +1,23 @@ +# abbrev-js + +Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev). + +Usage: + + var abbrev = require("abbrev"); + abbrev("foo", "fool", "folding", "flop"); + + // returns: + { fl: 'flop' + , flo: 'flop' + , flop: 'flop' + , fol: 'folding' + , fold: 'folding' + , foldi: 'folding' + , foldin: 'folding' + , folding: 'folding' + , foo: 'foo' + , fool: 'fool' + } + +This is handy for command-line scripts, or other cases where you want to be able to accept shorthands. diff --git a/platforms/android/cordova/node_modules/nopt/node_modules/abbrev/abbrev.js b/platforms/android/cordova/node_modules/abbrev/abbrev.js similarity index 100% rename from platforms/android/cordova/node_modules/nopt/node_modules/abbrev/abbrev.js rename to platforms/android/cordova/node_modules/abbrev/abbrev.js diff --git a/platforms/android/cordova/node_modules/abbrev/package.json b/platforms/android/cordova/node_modules/abbrev/package.json new file mode 100644 index 0000000..700d159 --- /dev/null +++ b/platforms/android/cordova/node_modules/abbrev/package.json @@ -0,0 +1,74 @@ +{ + "_args": [ + [ + "abbrev@1", + "/Users/steveng/repo/cordova/cordova-android/node_modules/nopt" + ] + ], + "_from": "abbrev@>=1.0.0 <2.0.0", + "_id": "abbrev@1.0.7", + "_inCache": true, + "_installable": true, + "_location": "/abbrev", + "_nodeVersion": "2.0.1", + "_npmUser": { + "email": "isaacs@npmjs.com", + "name": "isaacs" + }, + "_npmVersion": "2.10.1", + "_phantomChildren": {}, + "_requested": { + "name": "abbrev", + "raw": "abbrev@1", + "rawSpec": "1", + "scope": null, + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/nopt" + ], + "_resolved": "http://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz", + "_shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843", + "_shrinkwrap": null, + "_spec": "abbrev@1", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/nopt", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter" + }, + "bugs": { + "url": "https://github.com/isaacs/abbrev-js/issues" + }, + "dependencies": {}, + "description": "Like ruby's abbrev module, but in js", + "devDependencies": { + "tap": "^1.2.0" + }, + "directories": {}, + "dist": { + "shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843", + "tarball": "http://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" + }, + "gitHead": "821d09ce7da33627f91bbd8ed631497ed6f760c2", + "homepage": "https://github.com/isaacs/abbrev-js#readme", + "license": "ISC", + "main": "abbrev.js", + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "name": "abbrev", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" + }, + "scripts": { + "test": "tap test.js --cov" + }, + "version": "1.0.7" +} diff --git a/platforms/android/cordova/node_modules/abbrev/test.js b/platforms/android/cordova/node_modules/abbrev/test.js new file mode 100644 index 0000000..eb30e42 --- /dev/null +++ b/platforms/android/cordova/node_modules/abbrev/test.js @@ -0,0 +1,47 @@ +var abbrev = require('./abbrev.js') +var assert = require("assert") +var util = require("util") + +console.log("TAP version 13") +var count = 0 + +function test (list, expect) { + count++ + var actual = abbrev(list) + assert.deepEqual(actual, expect, + "abbrev("+util.inspect(list)+") === " + util.inspect(expect) + "\n"+ + "actual: "+util.inspect(actual)) + actual = abbrev.apply(exports, list) + assert.deepEqual(abbrev.apply(exports, list), expect, + "abbrev("+list.map(JSON.stringify).join(",")+") === " + util.inspect(expect) + "\n"+ + "actual: "+util.inspect(actual)) + console.log('ok - ' + list.join(' ')) +} + +test([ "ruby", "ruby", "rules", "rules", "rules" ], +{ rub: 'ruby' +, ruby: 'ruby' +, rul: 'rules' +, rule: 'rules' +, rules: 'rules' +}) +test(["fool", "foom", "pool", "pope"], +{ fool: 'fool' +, foom: 'foom' +, poo: 'pool' +, pool: 'pool' +, pop: 'pope' +, pope: 'pope' +}) +test(["a", "ab", "abc", "abcd", "abcde", "acde"], +{ a: 'a' +, ab: 'ab' +, abc: 'abc' +, abcd: 'abcd' +, abcde: 'abcde' +, ac: 'acde' +, acd: 'acde' +, acde: 'acde' +}) + +console.log("1..%d", count) diff --git a/platforms/android/cordova/node_modules/ansi/.jshintrc b/platforms/android/cordova/node_modules/ansi/.jshintrc new file mode 100644 index 0000000..248c542 --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/.jshintrc @@ -0,0 +1,4 @@ +{ + "laxcomma": true, + "asi": true +} diff --git a/platforms/android/cordova/node_modules/ansi/.npmignore b/platforms/android/cordova/node_modules/ansi/.npmignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/platforms/android/cordova/node_modules/ansi/History.md b/platforms/android/cordova/node_modules/ansi/History.md new file mode 100644 index 0000000..aea8aaf --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/History.md @@ -0,0 +1,23 @@ + +0.3.1 / 2016-01-14 +================== + + * add MIT LICENSE file (#23, @kasicka) + * preserve chaining after redundant style-method calls (#19, @drewblaisdell) + * package: add "license" field (#16, @BenjaminTsai) + +0.3.0 / 2014-05-09 +================== + + * package: remove "test" script and "devDependencies" + * package: remove "engines" section + * pacakge: remove "bin" section + * package: beautify + * examples: remove `starwars` example (#15) + * Documented goto, horizontalAbsolute, and eraseLine methods in README.md (#12, @Jammerwoch) + * add `.jshintrc` file + +< 0.3.0 +======= + + * Prehistoric diff --git a/platforms/android/cordova/node_modules/which/LICENSE b/platforms/android/cordova/node_modules/ansi/LICENSE similarity index 92% rename from platforms/android/cordova/node_modules/which/LICENSE rename to platforms/android/cordova/node_modules/ansi/LICENSE index 05a4010..2ea4dc5 100644 --- a/platforms/android/cordova/node_modules/which/LICENSE +++ b/platforms/android/cordova/node_modules/ansi/LICENSE @@ -1,5 +1,6 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. +(The MIT License) + +Copyright (c) 2012 Nathan Rajlich Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/platforms/android/cordova/node_modules/ansi/README.md b/platforms/android/cordova/node_modules/ansi/README.md new file mode 100644 index 0000000..6ce1940 --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/README.md @@ -0,0 +1,98 @@ +ansi.js +========= +### Advanced ANSI formatting tool for Node.js + +`ansi.js` is a module for Node.js that provides an easy-to-use API for +writing ANSI escape codes to `Stream` instances. ANSI escape codes are used to do +fancy things in a terminal window, like render text in colors, delete characters, +lines, the entire window, or hide and show the cursor, and lots more! + +#### Features: + + * 256 color support for the terminal! + * Make a beep sound from your terminal! + * Works with *any* writable `Stream` instance. + * Allows you to move the cursor anywhere on the terminal window. + * Allows you to delete existing contents from the terminal window. + * Allows you to hide and show the cursor. + * Converts CSS color codes and RGB values into ANSI escape codes. + * Low-level; you are in control of when escape codes are used, it's not abstracted. + + +Installation +------------ + +Install with `npm`: + +``` bash +$ npm install ansi +``` + + +Example +------- + +``` js +var ansi = require('ansi') + , cursor = ansi(process.stdout) + +// You can chain your calls forever: +cursor + .red() // Set font color to red + .bg.grey() // Set background color to grey + .write('Hello World!') // Write 'Hello World!' to stdout + .bg.reset() // Reset the bgcolor before writing the trailing \n, + // to avoid Terminal glitches + .write('\n') // And a final \n to wrap things up + +// Rendering modes are persistent: +cursor.hex('#660000').bold().underline() + +// You can use the regular logging functions, text will be green: +console.log('This is blood red, bold text') + +// To reset just the foreground color: +cursor.fg.reset() + +console.log('This will still be bold') + +// to go to a location (x,y) on the console +// note: 1-indexed, not 0-indexed: +cursor.goto(10, 5).write('Five down, ten over') + +// to clear the current line: +cursor.horizontalAbsolute(0).eraseLine().write('Starting again') + +// to go to a different column on the current line: +cursor.horizontalAbsolute(5).write('column five') + +// Clean up after yourself! +cursor.reset() +``` + + +License +------- + +(The MIT License) + +Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/ansi/examples/beep/index.js b/platforms/android/cordova/node_modules/ansi/examples/beep/index.js new file mode 100755 index 0000000..c1ec929 --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/examples/beep/index.js @@ -0,0 +1,16 @@ +#!/usr/bin/env node + +/** + * Invokes the terminal "beep" sound once per second on every exact second. + */ + +process.title = 'beep' + +var cursor = require('../../')(process.stdout) + +function beep () { + cursor.beep() + setTimeout(beep, 1000 - (new Date()).getMilliseconds()) +} + +setTimeout(beep, 1000 - (new Date()).getMilliseconds()) diff --git a/platforms/android/cordova/node_modules/ansi/examples/clear/index.js b/platforms/android/cordova/node_modules/ansi/examples/clear/index.js new file mode 100755 index 0000000..6ac21ff --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/examples/clear/index.js @@ -0,0 +1,15 @@ +#!/usr/bin/env node + +/** + * Like GNU ncurses "clear" command. + * https://github.com/mscdex/node-ncurses/blob/master/deps/ncurses/progs/clear.c + */ + +process.title = 'clear' + +function lf () { return '\n' } + +require('../../')(process.stdout) + .write(Array.apply(null, Array(process.stdout.getWindowSize()[1])).map(lf).join('')) + .eraseData(2) + .goto(1, 1) diff --git a/platforms/android/cordova/node_modules/ansi/examples/cursorPosition.js b/platforms/android/cordova/node_modules/ansi/examples/cursorPosition.js new file mode 100755 index 0000000..50f9644 --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/examples/cursorPosition.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +var tty = require('tty') +var cursor = require('../')(process.stdout) + +// listen for the queryPosition report on stdin +process.stdin.resume() +raw(true) + +process.stdin.once('data', function (b) { + var match = /\[(\d+)\;(\d+)R$/.exec(b.toString()) + if (match) { + var xy = match.slice(1, 3).reverse().map(Number) + console.error(xy) + } + + // cleanup and close stdin + raw(false) + process.stdin.pause() +}) + + +// send the query position request code to stdout +cursor.queryPosition() + +function raw (mode) { + if (process.stdin.setRawMode) { + process.stdin.setRawMode(mode) + } else { + tty.setRawMode(mode) + } +} diff --git a/platforms/android/cordova/node_modules/ansi/examples/progress/index.js b/platforms/android/cordova/node_modules/ansi/examples/progress/index.js new file mode 100644 index 0000000..d28dbda --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/examples/progress/index.js @@ -0,0 +1,87 @@ +#!/usr/bin/env node + +var assert = require('assert') + , ansi = require('../../') + +function Progress (stream, width) { + this.cursor = ansi(stream) + this.delta = this.cursor.newlines + this.width = width | 0 || 10 + this.open = '[' + this.close = ']' + this.complete = '█' + this.incomplete = '_' + + // initial render + this.progress = 0 +} + +Object.defineProperty(Progress.prototype, 'progress', { + get: get + , set: set + , configurable: true + , enumerable: true +}) + +function get () { + return this._progress +} + +function set (v) { + this._progress = Math.max(0, Math.min(v, 100)) + + var w = this.width - this.complete.length - this.incomplete.length + , n = w * (this._progress / 100) | 0 + , i = w - n + , com = c(this.complete, n) + , inc = c(this.incomplete, i) + , delta = this.cursor.newlines - this.delta + + assert.equal(com.length + inc.length, w) + + if (delta > 0) { + this.cursor.up(delta) + this.delta = this.cursor.newlines + } + + this.cursor + .horizontalAbsolute(0) + .eraseLine(2) + .fg.white() + .write(this.open) + .fg.grey() + .bold() + .write(com) + .resetBold() + .write(inc) + .fg.white() + .write(this.close) + .fg.reset() + .write('\n') +} + +function c (char, length) { + return Array.apply(null, Array(length)).map(function () { + return char + }).join('') +} + + + + +// Usage +var width = parseInt(process.argv[2], 10) || process.stdout.getWindowSize()[0] / 2 + , p = new Progress(process.stdout, width) + +;(function tick () { + p.progress += Math.random() * 5 + p.cursor + .eraseLine(2) + .write('Progress: ') + .bold().write(p.progress.toFixed(2)) + .write('%') + .resetBold() + .write('\n') + if (p.progress < 100) + setTimeout(tick, 100) +})() diff --git a/platforms/android/cordova/node_modules/ansi/lib/ansi.js b/platforms/android/cordova/node_modules/ansi/lib/ansi.js new file mode 100644 index 0000000..b1714e3 --- /dev/null +++ b/platforms/android/cordova/node_modules/ansi/lib/ansi.js @@ -0,0 +1,405 @@ + +/** + * References: + * + * - http://en.wikipedia.org/wiki/ANSI_escape_code + * - http://www.termsys.demon.co.uk/vtansi.htm + * + */ + +/** + * Module dependencies. + */ + +var emitNewlineEvents = require('./newlines') + , prefix = '\x1b[' // For all escape codes + , suffix = 'm' // Only for color codes + +/** + * The ANSI escape sequences. + */ + +var codes = { + up: 'A' + , down: 'B' + , forward: 'C' + , back: 'D' + , nextLine: 'E' + , previousLine: 'F' + , horizontalAbsolute: 'G' + , eraseData: 'J' + , eraseLine: 'K' + , scrollUp: 'S' + , scrollDown: 'T' + , savePosition: 's' + , restorePosition: 'u' + , queryPosition: '6n' + , hide: '?25l' + , show: '?25h' +} + +/** + * Rendering ANSI codes. + */ + +var styles = { + bold: 1 + , italic: 3 + , underline: 4 + , inverse: 7 +} + +/** + * The negating ANSI code for the rendering modes. + */ + +var reset = { + bold: 22 + , italic: 23 + , underline: 24 + , inverse: 27 +} + +/** + * The standard, styleable ANSI colors. + */ + +var colors = { + white: 37 + , black: 30 + , blue: 34 + , cyan: 36 + , green: 32 + , magenta: 35 + , red: 31 + , yellow: 33 + , grey: 90 + , brightBlack: 90 + , brightRed: 91 + , brightGreen: 92 + , brightYellow: 93 + , brightBlue: 94 + , brightMagenta: 95 + , brightCyan: 96 + , brightWhite: 97 +} + + +/** + * Creates a Cursor instance based off the given `writable stream` instance. + */ + +function ansi (stream, options) { + if (stream._ansicursor) { + return stream._ansicursor + } else { + return stream._ansicursor = new Cursor(stream, options) + } +} +module.exports = exports = ansi + +/** + * The `Cursor` class. + */ + +function Cursor (stream, options) { + if (!(this instanceof Cursor)) { + return new Cursor(stream, options) + } + if (typeof stream != 'object' || typeof stream.write != 'function') { + throw new Error('a valid Stream instance must be passed in') + } + + // the stream to use + this.stream = stream + + // when 'enabled' is false then all the functions are no-ops except for write() + this.enabled = options && options.enabled + if (typeof this.enabled === 'undefined') { + this.enabled = stream.isTTY + } + this.enabled = !!this.enabled + + // then `buffering` is true, then `write()` calls are buffered in + // memory until `flush()` is invoked + this.buffering = !!(options && options.buffering) + this._buffer = [] + + // controls the foreground and background colors + this.fg = this.foreground = new Colorer(this, 0) + this.bg = this.background = new Colorer(this, 10) + + // defaults + this.Bold = false + this.Italic = false + this.Underline = false + this.Inverse = false + + // keep track of the number of "newlines" that get encountered + this.newlines = 0 + emitNewlineEvents(stream) + stream.on('newline', function () { + this.newlines++ + }.bind(this)) +} +exports.Cursor = Cursor + +/** + * Helper function that calls `write()` on the underlying Stream. + * Returns `this` instead of the write() return value to keep + * the chaining going. + */ + +Cursor.prototype.write = function (data) { + if (this.buffering) { + this._buffer.push(arguments) + } else { + this.stream.write.apply(this.stream, arguments) + } + return this +} + +/** + * Buffer `write()` calls into memory. + * + * @api public + */ + +Cursor.prototype.buffer = function () { + this.buffering = true + return this +} + +/** + * Write out the in-memory buffer. + * + * @api public + */ + +Cursor.prototype.flush = function () { + this.buffering = false + var str = this._buffer.map(function (args) { + if (args.length != 1) throw new Error('unexpected args length! ' + args.length); + return args[0]; + }).join(''); + this._buffer.splice(0); // empty + this.write(str); + return this +} + + +/** + * The `Colorer` class manages both the background and foreground colors. + */ + +function Colorer (cursor, base) { + this.current = null + this.cursor = cursor + this.base = base +} +exports.Colorer = Colorer + +/** + * Write an ANSI color code, ensuring that the same code doesn't get rewritten. + */ + +Colorer.prototype._setColorCode = function setColorCode (code) { + var c = String(code) + if (this.current === c) return + this.cursor.enabled && this.cursor.write(prefix + c + suffix) + this.current = c + return this +} + + +/** + * Set up the positional ANSI codes. + */ + +Object.keys(codes).forEach(function (name) { + var code = String(codes[name]) + Cursor.prototype[name] = function () { + var c = code + if (arguments.length > 0) { + c = toArray(arguments).map(Math.round).join(';') + code + } + this.enabled && this.write(prefix + c) + return this + } +}) + +/** + * Set up the functions for the rendering ANSI codes. + */ + +Object.keys(styles).forEach(function (style) { + var name = style[0].toUpperCase() + style.substring(1) + , c = styles[style] + , r = reset[style] + + Cursor.prototype[style] = function () { + if (this[name]) return this + this.enabled && this.write(prefix + c + suffix) + this[name] = true + return this + } + + Cursor.prototype['reset' + name] = function () { + if (!this[name]) return this + this.enabled && this.write(prefix + r + suffix) + this[name] = false + return this + } +}) + +/** + * Setup the functions for the standard colors. + */ + +Object.keys(colors).forEach(function (color) { + var code = colors[color] + + Colorer.prototype[color] = function () { + this._setColorCode(this.base + code) + return this.cursor + } + + Cursor.prototype[color] = function () { + return this.foreground[color]() + } +}) + +/** + * Makes a beep sound! + */ + +Cursor.prototype.beep = function () { + this.enabled && this.write('\x07') + return this +} + +/** + * Moves cursor to specific position + */ + +Cursor.prototype.goto = function (x, y) { + x = x | 0 + y = y | 0 + this.enabled && this.write(prefix + y + ';' + x + 'H') + return this +} + +/** + * Resets the color. + */ + +Colorer.prototype.reset = function () { + this._setColorCode(this.base + 39) + return this.cursor +} + +/** + * Resets all ANSI formatting on the stream. + */ + +Cursor.prototype.reset = function () { + this.enabled && this.write(prefix + '0' + suffix) + this.Bold = false + this.Italic = false + this.Underline = false + this.Inverse = false + this.foreground.current = null + this.background.current = null + return this +} + +/** + * Sets the foreground color with the given RGB values. + * The closest match out of the 216 colors is picked. + */ + +Colorer.prototype.rgb = function (r, g, b) { + var base = this.base + 38 + , code = rgb(r, g, b) + this._setColorCode(base + ';5;' + code) + return this.cursor +} + +/** + * Same as `cursor.fg.rgb(r, g, b)`. + */ + +Cursor.prototype.rgb = function (r, g, b) { + return this.foreground.rgb(r, g, b) +} + +/** + * Accepts CSS color codes for use with ANSI escape codes. + * For example: `#FF000` would be bright red. + */ + +Colorer.prototype.hex = function (color) { + return this.rgb.apply(this, hex(color)) +} + +/** + * Same as `cursor.fg.hex(color)`. + */ + +Cursor.prototype.hex = function (color) { + return this.foreground.hex(color) +} + + +// UTIL FUNCTIONS // + +/** + * Translates a 255 RGB value to a 0-5 ANSI RGV value, + * then returns the single ANSI color code to use. + */ + +function rgb (r, g, b) { + var red = r / 255 * 5 + , green = g / 255 * 5 + , blue = b / 255 * 5 + return rgb5(red, green, blue) +} + +/** + * Turns rgb 0-5 values into a single ANSI color code to use. + */ + +function rgb5 (r, g, b) { + var red = Math.round(r) + , green = Math.round(g) + , blue = Math.round(b) + return 16 + (red*36) + (green*6) + blue +} + +/** + * Accepts a hex CSS color code string (# is optional) and + * translates it into an Array of 3 RGB 0-255 values, which + * can then be used with rgb(). + */ + +function hex (color) { + var c = color[0] === '#' ? color.substring(1) : color + , r = c.substring(0, 2) + , g = c.substring(2, 4) + , b = c.substring(4, 6) + return [parseInt(r, 16), parseInt(g, 16), parseInt(b, 16)] +} + +/** + * Turns an array-like object into a real array. + */ + +function toArray (a) { + var i = 0 + , l = a.length + , rtn = [] + for (; i 0) { + var len = data.length + , i = 0 + // now try to calculate any deltas + if (typeof data == 'string') { + for (; i=0.3.1 <0.4.0", + "_id": "ansi@0.3.1", + "_inCache": true, + "_installable": true, + "_location": "/ansi", + "_nodeVersion": "5.3.0", + "_npmUser": { + "email": "nathan@tootallnate.net", + "name": "tootallnate" + }, + "_npmVersion": "3.3.12", + "_phantomChildren": {}, + "_requested": { + "name": "ansi", + "raw": "ansi@^0.3.1", + "rawSpec": "^0.3.1", + "scope": null, + "spec": ">=0.3.1 <0.4.0", + "type": "range" + }, + "_requiredBy": [ + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "_shasum": "0c42d4fb17160d5a9af1e484bace1c66922c1b21", + "_shrinkwrap": null, + "_spec": "ansi@^0.3.1", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common", + "author": { + "email": "nathan@tootallnate.net", + "name": "Nathan Rajlich", + "url": "http://tootallnate.net" + }, + "bugs": { + "url": "https://github.com/TooTallNate/ansi.js/issues" + }, + "dependencies": {}, + "description": "Advanced ANSI formatting tool for Node.js", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "0c42d4fb17160d5a9af1e484bace1c66922c1b21", + "tarball": "http://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz" + }, + "gitHead": "4d0d4af94e0bdaa648bd7262acd3bde4b98d5246", + "homepage": "https://github.com/TooTallNate/ansi.js#readme", + "keywords": [ + "256", + "ansi", + "color", + "cursor", + "formatting", + "rgb", + "stream", + "terminal" + ], + "license": "MIT", + "main": "./lib/ansi.js", + "maintainers": [ + { + "name": "TooTallNate", + "email": "nathan@tootallnate.net" + }, + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + } + ], + "name": "ansi", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/ansi.js.git" + }, + "scripts": {}, + "version": "0.3.1" +} diff --git a/platforms/android/cordova/node_modules/balanced-match/.npmignore b/platforms/android/cordova/node_modules/balanced-match/.npmignore new file mode 100644 index 0000000..fd4f2b0 --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/.npmignore @@ -0,0 +1,2 @@ +node_modules +.DS_Store diff --git a/platforms/android/cordova/node_modules/balanced-match/.travis.yml b/platforms/android/cordova/node_modules/balanced-match/.travis.yml new file mode 100644 index 0000000..6e5919d --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/platforms/android/cordova/node_modules/balanced-match/LICENSE.md b/platforms/android/cordova/node_modules/balanced-match/LICENSE.md new file mode 100644 index 0000000..2cdc8e4 --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platforms/android/cordova/node_modules/balanced-match/Makefile b/platforms/android/cordova/node_modules/balanced-match/Makefile new file mode 100644 index 0000000..fa5da71 --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/Makefile @@ -0,0 +1,6 @@ + +test: + @node_modules/.bin/tape test/*.js + +.PHONY: test + diff --git a/platforms/android/cordova/node_modules/balanced-match/README.md b/platforms/android/cordova/node_modules/balanced-match/README.md new file mode 100644 index 0000000..421f3aa --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/README.md @@ -0,0 +1,89 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platforms/android/cordova/node_modules/balanced-match/example.js b/platforms/android/cordova/node_modules/balanced-match/example.js new file mode 100644 index 0000000..c02ad34 --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/example.js @@ -0,0 +1,5 @@ +var balanced = require('./'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); + diff --git a/platforms/android/cordova/node_modules/balanced-match/index.js b/platforms/android/cordova/node_modules/balanced-match/index.js new file mode 100644 index 0000000..75f3d71 --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/index.js @@ -0,0 +1,50 @@ +module.exports = balanced; +function balanced(a, b, str) { + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i < str.length && i >= 0 && ! result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/platforms/android/cordova/node_modules/balanced-match/package.json b/platforms/android/cordova/node_modules/balanced-match/package.json new file mode 100644 index 0000000..044a171 --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + "balanced-match@^0.3.0", + "/Users/steveng/repo/cordova/cordova-android/node_modules/brace-expansion" + ] + ], + "_from": "balanced-match@>=0.3.0 <0.4.0", + "_id": "balanced-match@0.3.0", + "_inCache": true, + "_installable": true, + "_location": "/balanced-match", + "_nodeVersion": "4.2.1", + "_npmUser": { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "name": "balanced-match", + "raw": "balanced-match@^0.3.0", + "rawSpec": "^0.3.0", + "scope": null, + "spec": ">=0.3.0 <0.4.0", + "type": "range" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz", + "_shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756", + "_shrinkwrap": null, + "_spec": "balanced-match@^0.3.0", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/brace-expansion", + "author": { + "email": "mail@juliangruber.com", + "name": "Julian Gruber", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/balanced-match/issues" + }, + "dependencies": {}, + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "devDependencies": { + "tape": "~4.2.2" + }, + "directories": {}, + "dist": { + "shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756", + "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz" + }, + "gitHead": "a7114b0986554787e90b7ac595a043ca75ea77e5", + "homepage": "https://github.com/juliangruber/balanced-match", + "keywords": [ + "balanced", + "match", + "parse", + "regexp", + "test" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "juliangruber", + "email": "julian@juliangruber.com" + } + ], + "name": "balanced-match", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "scripts": { + "test": "make test" + }, + "testling": { + "browsers": [ + "android-browser/4.2..latest", + "chrome/25..latest", + "chrome/canary", + "firefox/20..latest", + "firefox/nightly", + "ie/8..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "opera/12..latest", + "opera/next", + "safari/5.1..latest" + ], + "files": "test/*.js" + }, + "version": "0.3.0" +} diff --git a/platforms/android/cordova/node_modules/balanced-match/test/balanced.js b/platforms/android/cordova/node_modules/balanced-match/test/balanced.js new file mode 100644 index 0000000..f5e98e3 --- /dev/null +++ b/platforms/android/cordova/node_modules/balanced-match/test/balanced.js @@ -0,0 +1,84 @@ +var test = require('tape'); +var balanced = require('..'); + +test('balanced', function(t) { + t.deepEqual(balanced('{', '}', 'pre{in{nest}}post'), { + start: 3, + end: 12, + pre: 'pre', + body: 'in{nest}', + post: 'post' + }); + t.deepEqual(balanced('{', '}', '{{{{{{{{{in}post'), { + start: 8, + end: 11, + pre: '{{{{{{{{', + body: 'in', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre{body{in}post'), { + start: 8, + end: 11, + pre: 'pre{body', + body: 'in', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre}{in{nest}}post'), { + start: 4, + end: 13, + pre: 'pre}', + body: 'in{nest}', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre{body}between{body2}post'), { + start: 3, + end: 8, + pre: 'pre', + body: 'body', + post: 'between{body2}post' + }); + t.notOk(balanced('{', '}', 'nope'), 'should be notOk'); + t.deepEqual(balanced('', '', 'preinnestpost'), { + start: 3, + end: 19, + pre: 'pre', + body: 'innest', + post: 'post' + }); + t.deepEqual(balanced('', '', 'preinnestpost'), { + start: 7, + end: 23, + pre: 'pre', + body: 'innest', + post: 'post' + }); + t.deepEqual(balanced('{{', '}}', 'pre{{{in}}}post'), { + start: 3, + end: 9, + pre: 'pre', + body: '{in}', + post: 'post' + }); + t.deepEqual(balanced('{{{', '}}', 'pre{{{in}}}post'), { + start: 3, + end: 8, + pre: 'pre', + body: 'in', + post: '}post' + }); + t.deepEqual(balanced('{', '}', 'pre{{first}in{second}post'), { + start: 4, + end: 10, + pre: 'pre{', + body: 'first', + post: 'in{second}post' + }); + t.deepEqual(balanced('', 'prepost'), { + start: 3, + end: 4, + pre: 'pre', + body: '', + post: 'post' + }); + t.end(); +}); diff --git a/platforms/android/cordova/node_modules/base64-js/.travis.yml b/platforms/android/cordova/node_modules/base64-js/.travis.yml new file mode 100644 index 0000000..939cb51 --- /dev/null +++ b/platforms/android/cordova/node_modules/base64-js/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.11" \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/base64-js/LICENSE.MIT b/platforms/android/cordova/node_modules/base64-js/LICENSE.MIT new file mode 100644 index 0000000..96d3f68 --- /dev/null +++ b/platforms/android/cordova/node_modules/base64-js/LICENSE.MIT @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/base64-js/README.md b/platforms/android/cordova/node_modules/base64-js/README.md new file mode 100644 index 0000000..ed31d1a --- /dev/null +++ b/platforms/android/cordova/node_modules/base64-js/README.md @@ -0,0 +1,31 @@ +base64-js +========= + +`base64-js` does basic base64 encoding/decoding in pure JS. + +[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js) + +[![testling badge](https://ci.testling.com/beatgammit/base64-js.png)](https://ci.testling.com/beatgammit/base64-js) + +Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data. + +Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does. + +## install + +With [npm](https://npmjs.org) do: + +`npm install base64-js` + +## methods + +`var base64 = require('base64-js')` + +`base64` has two exposed functions, `toByteArray` and `fromByteArray`, which both take a single argument. + +* `toByteArray` - Takes a base64 string and returns a byte array +* `fromByteArray` - Takes a byte array and returns a base64 string + +## license + +MIT \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/base64-js/bench/bench.js b/platforms/android/cordova/node_modules/base64-js/bench/bench.js new file mode 100644 index 0000000..0689e08 --- /dev/null +++ b/platforms/android/cordova/node_modules/base64-js/bench/bench.js @@ -0,0 +1,19 @@ +var random = require('crypto').pseudoRandomBytes + +var b64 = require('../') +var fs = require('fs') +var path = require('path') +var data = random(1e6).toString('base64') +//fs.readFileSync(path.join(__dirname, 'example.b64'), 'ascii').split('\n').join('') +var start = Date.now() +var raw = b64.toByteArray(data) +var middle = Date.now() +var data = b64.fromByteArray(raw) +var end = Date.now() + +console.log('decode ms, decode ops/ms, encode ms, encode ops/ms') +console.log( + middle - start, data.length / (middle - start), + end - middle, data.length / (end - middle)) +//console.log(data) + diff --git a/platforms/android/cordova/node_modules/base64-js/lib/b64.js b/platforms/android/cordova/node_modules/base64-js/lib/b64.js new file mode 100644 index 0000000..46001d2 --- /dev/null +++ b/platforms/android/cordova/node_modules/base64-js/lib/b64.js @@ -0,0 +1,124 @@ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS || + code === PLUS_URL_SAFE) + return 62 // '+' + if (code === SLASH || + code === SLASH_URL_SAFE) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) diff --git a/platforms/android/cordova/node_modules/base64-js/package.json b/platforms/android/cordova/node_modules/base64-js/package.json new file mode 100644 index 0000000..4b30e7d --- /dev/null +++ b/platforms/android/cordova/node_modules/base64-js/package.json @@ -0,0 +1,93 @@ +{ + "_args": [ + [ + "base64-js@0.0.8", + "/Users/steveng/repo/cordova/cordova-android/node_modules/plist" + ] + ], + "_from": "base64-js@0.0.8", + "_id": "base64-js@0.0.8", + "_inCache": true, + "_installable": true, + "_location": "/base64-js", + "_nodeVersion": "0.10.35", + "_npmUser": { + "email": "feross@feross.org", + "name": "feross" + }, + "_npmVersion": "2.1.16", + "_phantomChildren": {}, + "_requested": { + "name": "base64-js", + "raw": "base64-js@0.0.8", + "rawSpec": "0.0.8", + "scope": null, + "spec": "0.0.8", + "type": "version" + }, + "_requiredBy": [ + "/plist" + ], + "_resolved": "http://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "_shasum": "1101e9544f4a76b1bc3b26d452ca96d7a35e7978", + "_shrinkwrap": null, + "_spec": "base64-js@0.0.8", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/plist", + "author": { + "email": "t.jameson.little@gmail.com", + "name": "T. Jameson Little" + }, + "bugs": { + "url": "https://github.com/beatgammit/base64-js/issues" + }, + "dependencies": {}, + "description": "Base64 encoding/decoding in pure JS", + "devDependencies": { + "tape": "~2.3.2" + }, + "directories": {}, + "dist": { + "shasum": "1101e9544f4a76b1bc3b26d452ca96d7a35e7978", + "tarball": "http://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz" + }, + "engines": { + "node": ">= 0.4" + }, + "gitHead": "b4a8a5fa9b0caeddb5ad94dd1108253d8f2a315f", + "homepage": "https://github.com/beatgammit/base64-js", + "license": "MIT", + "main": "lib/b64.js", + "maintainers": [ + { + "name": "beatgammit", + "email": "t.jameson.little@gmail.com" + }, + { + "name": "feross", + "email": "feross@feross.org" + } + ], + "name": "base64-js", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/beatgammit/base64-js.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "browsers": [ + "chrome/4..latest", + "firefox/3..latest", + "ie/6..latest", + "ipad/6", + "iphone/6", + "opera/11.0..latest", + "safari/5.1..latest" + ], + "files": "test/*.js" + }, + "version": "0.0.8" +} diff --git a/platforms/android/cordova/node_modules/base64-js/test/convert.js b/platforms/android/cordova/node_modules/base64-js/test/convert.js new file mode 100644 index 0000000..60b09c0 --- /dev/null +++ b/platforms/android/cordova/node_modules/base64-js/test/convert.js @@ -0,0 +1,51 @@ +var test = require('tape'), + b64 = require('../lib/b64'), + checks = [ + 'a', + 'aa', + 'aaa', + 'hi', + 'hi!', + 'hi!!', + 'sup', + 'sup?', + 'sup?!' + ]; + +test('convert to base64 and back', function (t) { + t.plan(checks.length); + + for (var i = 0; i < checks.length; i++) { + var check = checks[i], + b64Str, + arr, + str; + + b64Str = b64.fromByteArray(map(check, function (char) { return char.charCodeAt(0); })); + + arr = b64.toByteArray(b64Str); + str = map(arr, function (byte) { return String.fromCharCode(byte); }).join(''); + + t.equal(check, str, 'Checked ' + check); + } + +}); + +function map (arr, callback) { + var res = [], + kValue, + mappedValue; + + for (var k = 0, len = arr.length; k < len; k++) { + if ((typeof arr === 'string' && !!arr.charAt(k))) { + kValue = arr.charAt(k); + mappedValue = callback(kValue, k, arr); + res[k] = mappedValue; + } else if (typeof arr !== 'string' && k in arr) { + kValue = arr[k]; + mappedValue = callback(kValue, k, arr); + res[k] = mappedValue; + } + } + return res; +} diff --git a/platforms/android/cordova/node_modules/base64-js/test/url-safe.js b/platforms/android/cordova/node_modules/base64-js/test/url-safe.js new file mode 100644 index 0000000..dc437e9 --- /dev/null +++ b/platforms/android/cordova/node_modules/base64-js/test/url-safe.js @@ -0,0 +1,18 @@ +var test = require('tape'), + b64 = require('../lib/b64'); + +test('decode url-safe style base64 strings', function (t) { + var expected = [0xff, 0xff, 0xbe, 0xff, 0xef, 0xbf, 0xfb, 0xef, 0xff]; + + var actual = b64.toByteArray('//++/++/++//'); + for (var i = 0; i < actual.length; i++) { + t.equal(actual[i], expected[i]) + } + + actual = b64.toByteArray('__--_--_--__'); + for (var i = 0; i < actual.length; i++) { + t.equal(actual[i], expected[i]) + } + + t.end(); +}); diff --git a/platforms/android/cordova/node_modules/big-integer/BigInteger.js b/platforms/android/cordova/node_modules/big-integer/BigInteger.js new file mode 100644 index 0000000..8c06143 --- /dev/null +++ b/platforms/android/cordova/node_modules/big-integer/BigInteger.js @@ -0,0 +1,1189 @@ +var bigInt = (function (undefined) { + "use strict"; + + var BASE = 1e7, + LOG_BASE = 7, + MAX_INT = 9007199254740992, + MAX_INT_ARR = smallToArray(MAX_INT), + LOG_MAX_INT = Math.log(MAX_INT); + + function BigInteger(value, sign) { + this.value = value; + this.sign = sign; + this.isSmall = false; + } + + function SmallInteger(value) { + this.value = value; + this.sign = value < 0; + this.isSmall = true; + } + + function isPrecise(n) { + return -MAX_INT < n && n < MAX_INT; + } + + function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes + if (n < 1e7) + return [n]; + if (n < 1e14) + return [n % 1e7, Math.floor(n / 1e7)]; + return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)]; + } + + function arrayToSmall(arr) { // If BASE changes this function may need to change + trim(arr); + var length = arr.length; + if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) { + switch (length) { + case 0: return 0; + case 1: return arr[0]; + case 2: return arr[0] + arr[1] * BASE; + default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE; + } + } + return arr; + } + + function trim(v) { + var i = v.length; + while (v[--i] === 0); + v.length = i + 1; + } + + function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger + var x = new Array(length); + var i = -1; + while (++i < length) { + x[i] = 0; + } + return x; + } + + function truncate(n) { + if (n > 0) return Math.floor(n); + return Math.ceil(n); + } + + function add(a, b) { // assumes a and b are arrays with a.length >= b.length + var l_a = a.length, + l_b = b.length, + r = new Array(l_a), + carry = 0, + base = BASE, + sum, i; + for (i = 0; i < l_b; i++) { + sum = a[i] + b[i] + carry; + carry = sum >= base ? 1 : 0; + r[i] = sum - carry * base; + } + while (i < l_a) { + sum = a[i] + carry; + carry = sum === base ? 1 : 0; + r[i++] = sum - carry * base; + } + if (carry > 0) r.push(carry); + return r; + } + + function addAny(a, b) { + if (a.length >= b.length) return add(a, b); + return add(b, a); + } + + function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT + var l = a.length, + r = new Array(l), + base = BASE, + sum, i; + for (i = 0; i < l; i++) { + sum = a[i] - base + carry; + carry = Math.floor(sum / base); + r[i] = sum - carry * base; + carry += 1; + } + while (carry > 0) { + r[i++] = carry % base; + carry = Math.floor(carry / base); + } + return r; + } + + BigInteger.prototype.add = function (v) { + var value, n = parseValue(v); + if (this.sign !== n.sign) { + return this.subtract(n.negate()); + } + var a = this.value, b = n.value; + if (n.isSmall) { + return new BigInteger(addSmall(a, Math.abs(b)), this.sign); + } + return new BigInteger(addAny(a, b), this.sign); + }; + BigInteger.prototype.plus = BigInteger.prototype.add; + + SmallInteger.prototype.add = function (v) { + var n = parseValue(v); + var a = this.value; + if (a < 0 !== n.sign) { + return this.subtract(n.negate()); + } + var b = n.value; + if (n.isSmall) { + if (isPrecise(a + b)) return new SmallInteger(a + b); + b = smallToArray(Math.abs(b)); + } + return new BigInteger(addSmall(b, Math.abs(a)), a < 0); + }; + SmallInteger.prototype.plus = SmallInteger.prototype.add; + + function subtract(a, b) { // assumes a and b are arrays with a >= b + var a_l = a.length, + b_l = b.length, + r = new Array(a_l), + borrow = 0, + base = BASE, + i, difference; + for (i = 0; i < b_l; i++) { + difference = a[i] - borrow - b[i]; + if (difference < 0) { + difference += base; + borrow = 1; + } else borrow = 0; + r[i] = difference; + } + for (i = b_l; i < a_l; i++) { + difference = a[i] - borrow; + if (difference < 0) difference += base; + else { + r[i++] = difference; + break; + } + r[i] = difference; + } + for (; i < a_l; i++) { + r[i] = a[i]; + } + trim(r); + return r; + } + + function subtractAny(a, b, sign) { + var value, isSmall; + if (compareAbs(a, b) >= 0) { + value = subtract(a,b); + } else { + value = subtract(b, a); + sign = !sign; + } + value = arrayToSmall(value); + if (typeof value === "number") { + if (sign) value = -value; + return new SmallInteger(value); + } + return new BigInteger(value, sign); + } + + function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT + var l = a.length, + r = new Array(l), + carry = -b, + base = BASE, + i, difference; + for (i = 0; i < l; i++) { + difference = a[i] + carry; + carry = Math.floor(difference / base); + difference %= base; + r[i] = difference < 0 ? difference + base : difference; + } + r = arrayToSmall(r); + if (typeof r === "number") { + if (sign) r = -r; + return new SmallInteger(r); + } return new BigInteger(r, sign); + } + + BigInteger.prototype.subtract = function (v) { + var n = parseValue(v); + if (this.sign !== n.sign) { + return this.add(n.negate()); + } + var a = this.value, b = n.value; + if (n.isSmall) + return subtractSmall(a, Math.abs(b), this.sign); + return subtractAny(a, b, this.sign); + }; + BigInteger.prototype.minus = BigInteger.prototype.subtract; + + SmallInteger.prototype.subtract = function (v) { + var n = parseValue(v); + var a = this.value; + if (a < 0 !== n.sign) { + return this.add(n.negate()); + } + var b = n.value; + if (n.isSmall) { + return new SmallInteger(a - b); + } + return subtractSmall(b, Math.abs(a), a >= 0); + }; + SmallInteger.prototype.minus = SmallInteger.prototype.subtract; + + BigInteger.prototype.negate = function () { + return new BigInteger(this.value, !this.sign); + }; + SmallInteger.prototype.negate = function () { + var sign = this.sign; + var small = new SmallInteger(-this.value); + small.sign = !sign; + return small; + }; + + BigInteger.prototype.abs = function () { + return new BigInteger(this.value, false); + }; + SmallInteger.prototype.abs = function () { + return new SmallInteger(Math.abs(this.value)); + }; + + function multiplyLong(a, b) { + var a_l = a.length, + b_l = b.length, + l = a_l + b_l, + r = createArray(l), + base = BASE, + product, carry, i, a_i, b_j; + for (i = 0; i < a_l; ++i) { + a_i = a[i]; + for (var j = 0; j < b_l; ++j) { + b_j = b[j]; + product = a_i * b_j + r[i + j]; + carry = Math.floor(product / base); + r[i + j] = product - carry * base; + r[i + j + 1] += carry; + } + } + trim(r); + return r; + } + + function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE + var l = a.length, + r = new Array(l), + base = BASE, + carry = 0, + product, i; + for (i = 0; i < l; i++) { + product = a[i] * b + carry; + carry = Math.floor(product / base); + r[i] = product - carry * base; + } + while (carry > 0) { + r[i++] = carry % base; + carry = Math.floor(carry / base); + } + return r; + } + + function shiftLeft(x, n) { + var r = []; + while (n-- > 0) r.push(0); + return r.concat(x); + } + + function multiplyKaratsuba(x, y) { + var n = Math.max(x.length, y.length); + + if (n <= 30) return multiplyLong(x, y); + n = Math.ceil(n / 2); + + var b = x.slice(n), + a = x.slice(0, n), + d = y.slice(n), + c = y.slice(0, n); + + var ac = multiplyKaratsuba(a, c), + bd = multiplyKaratsuba(b, d), + abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d)); + + var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n)); + trim(product); + return product; + } + + // The following function is derived from a surface fit of a graph plotting the performance difference + // between long multiplication and karatsuba multiplication versus the lengths of the two arrays. + function useKaratsuba(l1, l2) { + return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0; + } + + BigInteger.prototype.multiply = function (v) { + var value, n = parseValue(v), + a = this.value, b = n.value, + sign = this.sign !== n.sign, + abs; + if (n.isSmall) { + if (b === 0) return CACHE[0]; + if (b === 1) return this; + if (b === -1) return this.negate(); + abs = Math.abs(b); + if (abs < BASE) { + return new BigInteger(multiplySmall(a, abs), sign); + } + b = smallToArray(abs); + } + if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes + return new BigInteger(multiplyKaratsuba(a, b), sign); + return new BigInteger(multiplyLong(a, b), sign); + }; + + BigInteger.prototype.times = BigInteger.prototype.multiply; + + function multiplySmallAndArray(a, b, sign) { // a >= 0 + if (a < BASE) { + return new BigInteger(multiplySmall(b, a), sign); + } + return new BigInteger(multiplyLong(b, smallToArray(a)), sign); + } + SmallInteger.prototype["_multiplyBySmall"] = function (a) { + if (isPrecise(a.value * this.value)) { + return new SmallInteger(a.value * this.value); + } + return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign); + }; + BigInteger.prototype["_multiplyBySmall"] = function (a) { + if (a.value === 0) return CACHE[0]; + if (a.value === 1) return this; + if (a.value === -1) return this.negate(); + return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign); + }; + SmallInteger.prototype.multiply = function (v) { + return parseValue(v)["_multiplyBySmall"](this); + }; + SmallInteger.prototype.times = SmallInteger.prototype.multiply; + + function square(a) { + var l = a.length, + r = createArray(l + l), + base = BASE, + product, carry, i, a_i, a_j; + for (i = 0; i < l; i++) { + a_i = a[i]; + for (var j = 0; j < l; j++) { + a_j = a[j]; + product = a_i * a_j + r[i + j]; + carry = Math.floor(product / base); + r[i + j] = product - carry * base; + r[i + j + 1] += carry; + } + } + trim(r); + return r; + } + + BigInteger.prototype.square = function () { + return new BigInteger(square(this.value), false); + }; + + SmallInteger.prototype.square = function () { + var value = this.value * this.value; + if (isPrecise(value)) return new SmallInteger(value); + return new BigInteger(square(smallToArray(Math.abs(this.value))), false); + }; + + function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes. + var a_l = a.length, + b_l = b.length, + base = BASE, + result = createArray(b.length), + divisorMostSignificantDigit = b[b_l - 1], + // normalization + lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)), + remainder = multiplySmall(a, lambda), + divisor = multiplySmall(b, lambda), + quotientDigit, shift, carry, borrow, i, l, q; + if (remainder.length <= a_l) remainder.push(0); + divisor.push(0); + divisorMostSignificantDigit = divisor[b_l - 1]; + for (shift = a_l - b_l; shift >= 0; shift--) { + quotientDigit = base - 1; + if (remainder[shift + b_l] !== divisorMostSignificantDigit) { + quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit); + } + // quotientDigit <= base - 1 + carry = 0; + borrow = 0; + l = divisor.length; + for (i = 0; i < l; i++) { + carry += quotientDigit * divisor[i]; + q = Math.floor(carry / base); + borrow += remainder[shift + i] - (carry - q * base); + carry = q; + if (borrow < 0) { + remainder[shift + i] = borrow + base; + borrow = -1; + } else { + remainder[shift + i] = borrow; + borrow = 0; + } + } + while (borrow !== 0) { + quotientDigit -= 1; + carry = 0; + for (i = 0; i < l; i++) { + carry += remainder[shift + i] - base + divisor[i]; + if (carry < 0) { + remainder[shift + i] = carry + base; + carry = 0; + } else { + remainder[shift + i] = carry; + carry = 1; + } + } + borrow += carry; + } + result[shift] = quotientDigit; + } + // denormalization + remainder = divModSmall(remainder, lambda)[0]; + return [arrayToSmall(result), arrayToSmall(remainder)]; + } + + function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/ + // Performs faster than divMod1 on larger input sizes. + var a_l = a.length, + b_l = b.length, + result = [], + part = [], + base = BASE, + guess, xlen, highx, highy, check; + while (a_l) { + part.unshift(a[--a_l]); + if (compareAbs(part, b) < 0) { + result.push(0); + continue; + } + xlen = part.length; + highx = part[xlen - 1] * base + part[xlen - 2]; + highy = b[b_l - 1] * base + b[b_l - 2]; + if (xlen > b_l) { + highx = (highx + 1) * base; + } + guess = Math.ceil(highx / highy); + do { + check = multiplySmall(b, guess); + if (compareAbs(check, part) <= 0) break; + guess--; + } while (guess); + result.push(guess); + part = subtract(part, check); + } + result.reverse(); + return [arrayToSmall(result), arrayToSmall(part)]; + } + + function divModSmall(value, lambda) { + var length = value.length, + quotient = createArray(length), + base = BASE, + i, q, remainder, divisor; + remainder = 0; + for (i = length - 1; i >= 0; --i) { + divisor = remainder * base + value[i]; + q = truncate(divisor / lambda); + remainder = divisor - q * lambda; + quotient[i] = q | 0; + } + return [quotient, remainder | 0]; + } + + function divModAny(self, v) { + var value, n = parseValue(v); + var a = self.value, b = n.value; + var quotient; + if (b === 0) throw new Error("Cannot divide by zero"); + if (self.isSmall) { + if (n.isSmall) { + return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)]; + } + return [CACHE[0], self]; + } + if (n.isSmall) { + if (b === 1) return [self, CACHE[0]]; + if (b == -1) return [self.negate(), CACHE[0]]; + var abs = Math.abs(b); + if (abs < BASE) { + value = divModSmall(a, abs); + quotient = arrayToSmall(value[0]); + var remainder = value[1]; + if (self.sign) remainder = -remainder; + if (typeof quotient === "number") { + if (self.sign !== n.sign) quotient = -quotient; + return [new SmallInteger(quotient), new SmallInteger(remainder)]; + } + return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)]; + } + b = smallToArray(abs); + } + var comparison = compareAbs(a, b); + if (comparison === -1) return [CACHE[0], self]; + if (comparison === 0) return [CACHE[self.sign === n.sign ? 1 : -1], CACHE[0]]; + + // divMod1 is faster on smaller input sizes + if (a.length + b.length <= 200) + value = divMod1(a, b); + else value = divMod2(a, b); + + quotient = value[0]; + var qSign = self.sign !== n.sign, + mod = value[1], + mSign = self.sign; + if (typeof quotient === "number") { + if (qSign) quotient = -quotient; + quotient = new SmallInteger(quotient); + } else quotient = new BigInteger(quotient, qSign); + if (typeof mod === "number") { + if (mSign) mod = -mod; + mod = new SmallInteger(mod); + } else mod = new BigInteger(mod, mSign); + return [quotient, mod]; + } + + BigInteger.prototype.divmod = function (v) { + var result = divModAny(this, v); + return { + quotient: result[0], + remainder: result[1] + }; + }; + SmallInteger.prototype.divmod = BigInteger.prototype.divmod; + + BigInteger.prototype.divide = function (v) { + return divModAny(this, v)[0]; + }; + SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide; + + BigInteger.prototype.mod = function (v) { + return divModAny(this, v)[1]; + }; + SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod; + + BigInteger.prototype.pow = function (v) { + var n = parseValue(v), + a = this.value, + b = n.value, + value, x, y; + if (b === 0) return CACHE[1]; + if (a === 0) return CACHE[0]; + if (a === 1) return CACHE[1]; + if (a === -1) return n.isEven() ? CACHE[1] : CACHE[-1]; + if (n.sign) { + return CACHE[0]; + } + if (!n.isSmall) throw new Error("The exponent " + n.toString() + " is too large."); + if (this.isSmall) { + if (isPrecise(value = Math.pow(a, b))) + return new SmallInteger(truncate(value)); + } + x = this; + y = CACHE[1]; + while (true) { + if (b & 1 === 1) { + y = y.times(x); + --b; + } + if (b === 0) break; + b /= 2; + x = x.square(); + } + return y; + }; + SmallInteger.prototype.pow = BigInteger.prototype.pow; + + BigInteger.prototype.modPow = function (exp, mod) { + exp = parseValue(exp); + mod = parseValue(mod); + if (mod.isZero()) throw new Error("Cannot take modPow with modulus 0"); + var r = CACHE[1], + base = this.mod(mod); + while (exp.isPositive()) { + if (base.isZero()) return CACHE[0]; + if (exp.isOdd()) r = r.multiply(base).mod(mod); + exp = exp.divide(2); + base = base.square().mod(mod); + } + return r; + }; + SmallInteger.prototype.modPow = BigInteger.prototype.modPow; + + function compareAbs(a, b) { + if (a.length !== b.length) { + return a.length > b.length ? 1 : -1; + } + for (var i = a.length - 1; i >= 0; i--) { + if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1; + } + return 0; + } + + BigInteger.prototype.compareAbs = function (v) { + var n = parseValue(v), + a = this.value, + b = n.value; + if (n.isSmall) return 1; + return compareAbs(a, b); + }; + SmallInteger.prototype.compareAbs = function (v) { + var n = parseValue(v), + a = Math.abs(this.value), + b = n.value; + if (n.isSmall) { + b = Math.abs(b); + return a === b ? 0 : a > b ? 1 : -1; + } + return -1; + }; + + BigInteger.prototype.compare = function (v) { + // See discussion about comparison with Infinity: + // https://github.com/peterolson/BigInteger.js/issues/61 + if (v === Infinity) { + return -1; + } + if (v === -Infinity) { + return 1; + } + + var n = parseValue(v), + a = this.value, + b = n.value; + if (this.sign !== n.sign) { + return n.sign ? 1 : -1; + } + if (n.isSmall) { + return this.sign ? -1 : 1; + } + return compareAbs(a, b) * (this.sign ? -1 : 1); + }; + BigInteger.prototype.compareTo = BigInteger.prototype.compare; + + SmallInteger.prototype.compare = function (v) { + if (v === Infinity) { + return -1; + } + if (v === -Infinity) { + return 1; + } + + var n = parseValue(v), + a = this.value, + b = n.value; + if (n.isSmall) { + return a == b ? 0 : a > b ? 1 : -1; + } + if (a < 0 !== n.sign) { + return a < 0 ? -1 : 1; + } + return a < 0 ? 1 : -1; + }; + SmallInteger.prototype.compareTo = SmallInteger.prototype.compare; + + BigInteger.prototype.equals = function (v) { + return this.compare(v) === 0; + }; + SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals; + + BigInteger.prototype.notEquals = function (v) { + return this.compare(v) !== 0; + }; + SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals; + + BigInteger.prototype.greater = function (v) { + return this.compare(v) > 0; + }; + SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater; + + BigInteger.prototype.lesser = function (v) { + return this.compare(v) < 0; + }; + SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser; + + BigInteger.prototype.greaterOrEquals = function (v) { + return this.compare(v) >= 0; + }; + SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals; + + BigInteger.prototype.lesserOrEquals = function (v) { + return this.compare(v) <= 0; + }; + SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals; + + BigInteger.prototype.isEven = function () { + return (this.value[0] & 1) === 0; + }; + SmallInteger.prototype.isEven = function () { + return (this.value & 1) === 0; + }; + + BigInteger.prototype.isOdd = function () { + return (this.value[0] & 1) === 1; + }; + SmallInteger.prototype.isOdd = function () { + return (this.value & 1) === 1; + }; + + BigInteger.prototype.isPositive = function () { + return !this.sign; + }; + SmallInteger.prototype.isPositive = function () { + return this.value > 0; + }; + + BigInteger.prototype.isNegative = function () { + return this.sign; + }; + SmallInteger.prototype.isNegative = function () { + return this.value < 0; + }; + + BigInteger.prototype.isUnit = function () { + return false; + }; + SmallInteger.prototype.isUnit = function () { + return Math.abs(this.value) === 1; + }; + + BigInteger.prototype.isZero = function () { + return false; + }; + SmallInteger.prototype.isZero = function () { + return this.value === 0; + }; + BigInteger.prototype.isDivisibleBy = function (v) { + var n = parseValue(v); + var value = n.value; + if (value === 0) return false; + if (value === 1) return true; + if (value === 2) return this.isEven(); + return this.mod(n).equals(CACHE[0]); + }; + SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy; + + function isBasicPrime(v) { + var n = v.abs(); + if (n.isUnit()) return false; + if (n.equals(2) || n.equals(3) || n.equals(5)) return true; + if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false; + if (n.lesser(25)) return true; + // we don't know if it's prime: let the other functions figure it out + }; + + BigInteger.prototype.isPrime = function () { + var isPrime = isBasicPrime(this); + if (isPrime !== undefined) return isPrime; + var n = this.abs(), + nPrev = n.prev(); + var a = [2, 3, 5, 7, 11, 13, 17, 19], + b = nPrev, + d, t, i, x; + while (b.isEven()) b = b.divide(2); + for (i = 0; i < a.length; i++) { + x = bigInt(a[i]).modPow(b, n); + if (x.equals(CACHE[1]) || x.equals(nPrev)) continue; + for (t = true, d = b; t && d.lesser(nPrev) ; d = d.multiply(2)) { + x = x.square().mod(n); + if (x.equals(nPrev)) t = false; + } + if (t) return false; + } + return true; + }; + SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime; + + BigInteger.prototype.isProbablePrime = function (iterations) { + var isPrime = isBasicPrime(this); + if (isPrime !== undefined) return isPrime; + var n = this.abs(); + var t = iterations === undefined ? 5 : iterations; + // use the Fermat primality test + for (var i = 0; i < t; i++) { + var a = bigInt.randBetween(2, n.minus(2)); + if (!a.modPow(n.prev(), n).isUnit()) return false; // definitely composite + } + return true; // large chance of being prime + }; + SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime; + + BigInteger.prototype.next = function () { + var value = this.value; + if (this.sign) { + return subtractSmall(value, 1, this.sign); + } + return new BigInteger(addSmall(value, 1), this.sign); + }; + SmallInteger.prototype.next = function () { + var value = this.value; + if (value + 1 < MAX_INT) return new SmallInteger(value + 1); + return new BigInteger(MAX_INT_ARR, false); + }; + + BigInteger.prototype.prev = function () { + var value = this.value; + if (this.sign) { + return new BigInteger(addSmall(value, 1), true); + } + return subtractSmall(value, 1, this.sign); + }; + SmallInteger.prototype.prev = function () { + var value = this.value; + if (value - 1 > -MAX_INT) return new SmallInteger(value - 1); + return new BigInteger(MAX_INT_ARR, true); + }; + + var powersOfTwo = [1]; + while (powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]); + var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1]; + + function shift_isSmall(n) { + return ((typeof n === "number" || typeof n === "string") && +Math.abs(n) <= BASE) || + (n instanceof BigInteger && n.value.length <= 1); + } + + BigInteger.prototype.shiftLeft = function (n) { + if (!shift_isSmall(n)) { + throw new Error(String(n) + " is too large for shifting."); + } + n = +n; + if (n < 0) return this.shiftRight(-n); + var result = this; + while (n >= powers2Length) { + result = result.multiply(highestPower2); + n -= powers2Length - 1; + } + return result.multiply(powersOfTwo[n]); + }; + SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft; + + BigInteger.prototype.shiftRight = function (n) { + var remQuo; + if (!shift_isSmall(n)) { + throw new Error(String(n) + " is too large for shifting."); + } + n = +n; + if (n < 0) return this.shiftLeft(-n); + var result = this; + while (n >= powers2Length) { + if (result.isZero()) return result; + remQuo = divModAny(result, highestPower2); + result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0]; + n -= powers2Length - 1; + } + remQuo = divModAny(result, powersOfTwo[n]); + return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0]; + }; + SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight; + + function bitwise(x, y, fn) { + y = parseValue(y); + var xSign = x.isNegative(), ySign = y.isNegative(); + var xRem = xSign ? x.not() : x, + yRem = ySign ? y.not() : y; + var xBits = [], yBits = []; + var xStop = false, yStop = false; + while (!xStop || !yStop) { + if (xRem.isZero()) { // virtual sign extension for simulating two's complement + xStop = true; + xBits.push(xSign ? 1 : 0); + } + else if (xSign) xBits.push(xRem.isEven() ? 1 : 0); // two's complement for negative numbers + else xBits.push(xRem.isEven() ? 0 : 1); + + if (yRem.isZero()) { + yStop = true; + yBits.push(ySign ? 1 : 0); + } + else if (ySign) yBits.push(yRem.isEven() ? 1 : 0); + else yBits.push(yRem.isEven() ? 0 : 1); + + xRem = xRem.over(2); + yRem = yRem.over(2); + } + var result = []; + for (var i = 0; i < xBits.length; i++) result.push(fn(xBits[i], yBits[i])); + var sum = bigInt(result.pop()).negate().times(bigInt(2).pow(result.length)); + while (result.length) { + sum = sum.add(bigInt(result.pop()).times(bigInt(2).pow(result.length))); + } + return sum; + } + + BigInteger.prototype.not = function () { + return this.negate().prev(); + }; + SmallInteger.prototype.not = BigInteger.prototype.not; + + BigInteger.prototype.and = function (n) { + return bitwise(this, n, function (a, b) { return a & b; }); + }; + SmallInteger.prototype.and = BigInteger.prototype.and; + + BigInteger.prototype.or = function (n) { + return bitwise(this, n, function (a, b) { return a | b; }); + }; + SmallInteger.prototype.or = BigInteger.prototype.or; + + BigInteger.prototype.xor = function (n) { + return bitwise(this, n, function (a, b) { return a ^ b; }); + }; + SmallInteger.prototype.xor = BigInteger.prototype.xor; + + var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I; + function roughLOB(n) { // get lowestOneBit (rough) + // SmallInteger: return Min(lowestOneBit(n), 1 << 30) + // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7] + var v = n.value, x = typeof v === "number" ? v | LOBMASK_I : v[0] + v[1] * BASE | LOBMASK_BI; + return x & -x; + } + + function max(a, b) { + a = parseValue(a); + b = parseValue(b); + return a.greater(b) ? a : b; + } + function min(a,b) { + a = parseValue(a); + b = parseValue(b); + return a.lesser(b) ? a : b; + } + function gcd(a, b) { + a = parseValue(a).abs(); + b = parseValue(b).abs(); + if (a.equals(b)) return a; + if (a.isZero()) return b; + if (b.isZero()) return a; + var c = CACHE[1], d, t; + while (a.isEven() && b.isEven()) { + d = Math.min(roughLOB(a), roughLOB(b)); + a = a.divide(d); + b = b.divide(d); + c = c.multiply(d); + } + while (a.isEven()) { + a = a.divide(roughLOB(a)); + } + do { + while (b.isEven()) { + b = b.divide(roughLOB(b)); + } + if (a.greater(b)) { + t = b; b = a; a = t; + } + b = b.subtract(a); + } while (!b.isZero()); + return c.isUnit() ? a : a.multiply(c); + } + function lcm(a, b) { + a = parseValue(a).abs(); + b = parseValue(b).abs(); + return a.divide(gcd(a, b)).multiply(b); + } + function randBetween(a, b) { + a = parseValue(a); + b = parseValue(b); + var low = min(a, b), high = max(a, b); + var range = high.subtract(low); + if (range.isSmall) return low.add(Math.round(Math.random() * range)); + var length = range.value.length - 1; + var result = [], restricted = true; + for (var i = length; i >= 0; i--) { + var top = restricted ? range.value[i] : BASE; + var digit = truncate(Math.random() * top); + result.unshift(digit); + if (digit < top) restricted = false; + } + result = arrayToSmall(result); + return low.add(typeof result === "number" ? new SmallInteger(result) : new BigInteger(result, false)); + } + var parseBase = function (text, base) { + var val = CACHE[0], pow = CACHE[1], + length = text.length; + if (2 <= base && base <= 36) { + if (length <= LOG_MAX_INT / Math.log(base)) { + return new SmallInteger(parseInt(text, base)); + } + } + base = parseValue(base); + var digits = []; + var i; + var isNegative = text[0] === "-"; + for (i = isNegative ? 1 : 0; i < text.length; i++) { + var c = text[i].toLowerCase(), + charCode = c.charCodeAt(0); + if (48 <= charCode && charCode <= 57) digits.push(parseValue(c)); + else if (97 <= charCode && charCode <= 122) digits.push(parseValue(c.charCodeAt(0) - 87)); + else if (c === "<") { + var start = i; + do { i++; } while (text[i] !== ">"); + digits.push(parseValue(text.slice(start + 1, i))); + } + else throw new Error(c + " is not a valid character"); + } + digits.reverse(); + for (i = 0; i < digits.length; i++) { + val = val.add(digits[i].times(pow)); + pow = pow.times(base); + } + return isNegative ? val.negate() : val; + }; + + function stringify(digit) { + var v = digit.value; + if (typeof v === "number") v = [v]; + if (v.length === 1 && v[0] <= 35) { + return "0123456789abcdefghijklmnopqrstuvwxyz".charAt(v[0]); + } + return "<" + v + ">"; + } + function toBase(n, base) { + base = bigInt(base); + if (base.isZero()) { + if (n.isZero()) return "0"; + throw new Error("Cannot convert nonzero numbers to base 0."); + } + if (base.equals(-1)) { + if (n.isZero()) return "0"; + if (n.isNegative()) return new Array(1 - n).join("10"); + return "1" + new Array(+n).join("01"); + } + var minusSign = ""; + if (n.isNegative() && base.isPositive()) { + minusSign = "-"; + n = n.abs(); + } + if (base.equals(1)) { + if (n.isZero()) return "0"; + return minusSign + new Array(+n + 1).join(1); + } + var out = []; + var left = n, divmod; + while (left.isNegative() || left.compareAbs(base) >= 0) { + divmod = left.divmod(base); + left = divmod.quotient; + var digit = divmod.remainder; + if (digit.isNegative()) { + digit = base.minus(digit).abs(); + left = left.next(); + } + out.push(stringify(digit)); + } + out.push(stringify(left)); + return minusSign + out.reverse().join(""); + } + + BigInteger.prototype.toString = function (radix) { + if (radix === undefined) radix = 10; + if (radix !== 10) return toBase(this, radix); + var v = this.value, l = v.length, str = String(v[--l]), zeros = "0000000", digit; + while (--l >= 0) { + digit = String(v[l]); + str += zeros.slice(digit.length) + digit; + } + var sign = this.sign ? "-" : ""; + return sign + str; + }; + SmallInteger.prototype.toString = function (radix) { + if (radix === undefined) radix = 10; + if (radix != 10) return toBase(this, radix); + return String(this.value); + }; + + BigInteger.prototype.valueOf = function () { + return +this.toString(); + }; + BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf; + + SmallInteger.prototype.valueOf = function () { + return this.value; + }; + SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf; + + function parseStringValue(v) { + if (isPrecise(+v)) { + var x = +v; + if (x === truncate(x)) + return new SmallInteger(x); + throw "Invalid integer: " + v; + } + var sign = v[0] === "-"; + if (sign) v = v.slice(1); + var split = v.split(/e/i); + if (split.length > 2) throw new Error("Invalid integer: " + text.join("e")); + if (split.length === 2) { + var exp = split[1]; + if (exp[0] === "+") exp = exp.slice(1); + exp = +exp; + if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error("Invalid integer: " + exp + " is not a valid exponent."); + var text = split[0]; + var decimalPlace = text.indexOf("."); + if (decimalPlace >= 0) { + exp -= text.length - decimalPlace - 1; + text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1); + } + if (exp < 0) throw new Error("Cannot include negative exponent part for integers"); + text += (new Array(exp + 1)).join("0"); + v = text; + } + var isValid = /^([0-9][0-9]*)$/.test(v); + if (!isValid) throw new Error("Invalid integer: " + v); + var r = [], max = v.length, l = LOG_BASE, min = max - l; + while (max > 0) { + r.push(+v.slice(min, max)); + min -= l; + if (min < 0) min = 0; + max -= l; + } + trim(r); + return new BigInteger(r, sign); + } + + function parseNumberValue(v) { + if (isPrecise(v)) return new SmallInteger(v); + return parseStringValue(v.toString()); + } + + function parseValue(v) { + if (typeof v === "number") { + return parseNumberValue(v); + } + if (typeof v === "string") { + return parseStringValue(v); + } + return v; + } + // Pre-define numbers in range [-999,999] + var CACHE = function (v, radix) { + if (typeof v === "undefined") return CACHE[0]; + if (typeof radix !== "undefined") return +radix === 10 ? parseValue(v) : parseBase(v, radix); + return parseValue(v); + }; + for (var i = 0; i < 1000; i++) { + CACHE[i] = new SmallInteger(i); + if (i > 0) CACHE[-i] = new SmallInteger(-i); + } + // Backwards compatibility + CACHE.one = CACHE[1]; + CACHE.zero = CACHE[0]; + CACHE.minusOne = CACHE[-1]; + CACHE.max = max; + CACHE.min = min; + CACHE.gcd = gcd; + CACHE.lcm = lcm; + CACHE.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger; }; + CACHE.randBetween = randBetween; + return CACHE; +})(); + +// Node.js check +if (typeof module !== "undefined" && module.hasOwnProperty("exports")) { + module.exports = bigInt; +} diff --git a/platforms/android/cordova/node_modules/big-integer/BigInteger.min.js b/platforms/android/cordova/node_modules/big-integer/BigInteger.min.js new file mode 100644 index 0000000..53480ea --- /dev/null +++ b/platforms/android/cordova/node_modules/big-integer/BigInteger.min.js @@ -0,0 +1 @@ +var bigInt=function(e){"use strict";function o(e,t){this.value=e,this.sign=t,this.isSmall=!1}function u(e){this.value=e,this.sign=e<0,this.isSmall=!0}function a(e){return-r0?Math.floor(e):Math.ceil(e)}function d(e,n){var r=e.length,i=n.length,s=new Array(r),o=0,u=t,a,f;for(f=0;f=u?1:0,s[f]=a-o*u;while(f0&&s.push(o),s}function v(e,t){return e.length>=t.length?d(e,t):d(t,e)}function m(e,n){var r=e.length,i=new Array(r),s=t,o,u;for(u=0;u0)i[u++]=n%s,n=Math.floor(n/s);return i}function g(e,n){var r=e.length,i=n.length,s=new Array(r),o=0,u=t,a,f;for(a=0;a=0?r=g(e,t):(r=g(t,e),n=!n),r=l(r),typeof r=="number"?(n&&(r=-r),new u(r)):new o(r,n)}function b(e,n,r){var i=e.length,s=new Array(i),a=-n,f=t,c,h;for(c=0;c0)i[a++]=o%s,o=Math.floor(o/s);return i}function S(e,t){var n=[];while(t-->0)n.push(0);return n.concat(e)}function x(e,t){var n=Math.max(e.length,t.length);if(n<=30)return w(e,t);n=Math.ceil(n/2);var r=e.slice(n),i=e.slice(0,n),s=t.slice(n),o=t.slice(0,n),u=x(i,o),a=x(r,s),f=x(v(i,r),v(o,s)),l=v(v(u,S(g(g(f,u),a),n)),S(a,2*n));return c(l),l}function T(e,t){return-0.012*e-.012*t+15e-6*e*t>0}function N(e,n,r){return e=0;d--){p=s-1,f[d+i]!==u&&(p=Math.floor((f[d+i]*s+f[d+i-1])/u)),v=0,m=0,y=c.length;for(g=0;gi&&(c=(c+1)*u),a=Math.ceil(c/h);do{p=E(n,a);if(M(p,o)<=0)break;a--}while(a);s.push(a),o=g(o,p)}return s.reverse(),[l(s),l(o)]}function A(e,n){var r=e.length,i=h(r),s=t,o,u,a,f;a=0;for(o=r-1;o>=0;--o)f=a*s+e[o],u=p(f/n),a=f-u*n,i[o]=u|0;return[i,a|0]}function O(e,n){var r,i=G(n),s=e.value,a=i.value,c;if(a===0)throw new Error("Cannot divide by zero");if(e.isSmall)return i.isSmall?[new u(p(s/a)),new u(s%a)]:[Y[0],e];if(i.isSmall){if(a===1)return[e,Y[0]];if(a==-1)return[e.negate(),Y[0]];var h=Math.abs(a);if(ht.length?1:-1;for(var n=e.length-1;n>=0;n--)if(e[n]!==t[n])return e[n]>t[n]?1:-1;return 0}function _(e){var t=e.abs();if(t.isUnit())return!1;if(t.equals(2)||t.equals(3)||t.equals(5))return!0;if(t.isEven()||t.isDivisibleBy(3)||t.isDivisibleBy(5))return!1;if(t.lesser(25))return!0}function B(e){return(typeof e=="number"||typeof e=="string")&&+Math.abs(e)<=t||e instanceof o&&e.value.length<=1}function j(e,t,n){t=G(t);var r=e.isNegative(),i=t.isNegative(),s=r?e.not():e,o=i?t.not():t,u=[],a=[],f=!1,l=!1;while(!f||!l)s.isZero()?(f=!0,u.push(r?1:0)):r?u.push(s.isEven()?1:0):u.push(s.isEven()?0:1),o.isZero()?(l=!0,a.push(i?1:0)):i?a.push(o.isEven()?1:0):a.push(o.isEven()?0:1),s=s.over(2),o=o.over(2);var c=[];for(var h=0;h=0;h--){var d=c?s.value[h]:t,v=p(Math.random()*d);f.unshift(v),v"}function J(e,t){t=bigInt(t);if(t.isZero()){if(e.isZero())return"0";throw new Error("Cannot convert nonzero numbers to base 0.")}if(t.equals(-1))return e.isZero()?"0":e.isNegative()?(new Array(1-e)).join("10"):"1"+(new Array(+e)).join("01");var n="";e.isNegative()&&t.isPositive()&&(n="-",e=e.abs());if(t.equals(1))return e.isZero()?"0":n+(new Array(+e+1)).join(1);var r=[],i=e,s;while(i.isNegative()||i.compareAbs(t)>=0){s=i.divmod(t),i=s.quotient;var o=s.remainder;o.isNegative()&&(o=t.minus(o).abs(),i=i.next()),r.push($(o))}return r.push($(i)),n+r.reverse().join("")}function K(e){if(a(+e)){var t=+e;if(t===p(t))return new u(t);throw"Invalid integer: "+e}var r=e[0]==="-";r&&(e=e.slice(1));var i=e.split(/e/i);if(i.length>2)throw new Error("Invalid integer: "+f.join("e"));if(i.length===2){var s=i[1];s[0]==="+"&&(s=s.slice(1)),s=+s;if(s!==p(s)||!a(s))throw new Error("Invalid integer: "+s+" is not a valid exponent.");var f=i[0],l=f.indexOf(".");l>=0&&(s-=f.length-l-1,f=f.slice(0,l)+f.slice(l+1));if(s<0)throw new Error("Cannot include negative exponent part for integers");f+=(new Array(s+1)).join("0"),e=f}var h=/^([0-9][0-9]*)$/.test(e);if(!h)throw new Error("Invalid integer: "+e);var d=[],v=e.length,m=n,g=v-m;while(v>0)d.push(+e.slice(g,v)),g-=m,g<0&&(g=0),v-=m;return c(d),new o(d,r)}function Q(e){return a(e)?new u(e):K(e.toString())}function G(e){return typeof e=="number"?Q(e):typeof e=="string"?K(e):e}var t=1e7,n=7,r=9007199254740992,i=f(r),s=Math.log(r);o.prototype.add=function(e){var t,n=G(e);if(this.sign!==n.sign)return this.subtract(n.negate());var r=this.value,i=n.value;return n.isSmall?new o(m(r,Math.abs(i)),this.sign):new o(v(r,i),this.sign)},o.prototype.plus=o.prototype.add,u.prototype.add=function(e){var t=G(e),n=this.value;if(n<0!==t.sign)return this.subtract(t.negate());var r=t.value;if(t.isSmall){if(a(n+r))return new u(n+r);r=f(Math.abs(r))}return new o(m(r,Math.abs(n)),n<0)},u.prototype.plus=u.prototype.add,o.prototype.subtract=function(e){var t=G(e);if(this.sign!==t.sign)return this.add(t.negate());var n=this.value,r=t.value;return t.isSmall?b(n,Math.abs(r),this.sign):y(n,r,this.sign)},o.prototype.minus=o.prototype.subtract,u.prototype.subtract=function(e){var t=G(e),n=this.value;if(n<0!==t.sign)return this.add(t.negate());var r=t.value;return t.isSmall?new u(n-r):b(r,Math.abs(n),n>=0)},u.prototype.minus=u.prototype.subtract,o.prototype.negate=function(){return new o(this.value,!this.sign)},u.prototype.negate=function(){var e=this.sign,t=new u(-this.value);return t.sign=!e,t},o.prototype.abs=function(){return new o(this.value,!1)},u.prototype.abs=function(){return new u(Math.abs(this.value))},o.prototype.multiply=function(e){var n,r=G(e),i=this.value,s=r.value,u=this.sign!==r.sign,a;if(r.isSmall){if(s===0)return Y[0];if(s===1)return this;if(s===-1)return this.negate();a=Math.abs(s);if(ar?1:-1):-1},o.prototype.compare=function(e){if(e===Infinity)return-1;if(e===-Infinity)return 1;var t=G(e),n=this.value,r=t.value;return this.sign!==t.sign?t.sign?1:-1:t.isSmall?this.sign?-1:1:M(n,r)*(this.sign?-1:1)},o.prototype.compareTo=o.prototype.compare,u.prototype.compare=function(e){if(e===Infinity)return-1;if(e===-Infinity)return 1;var t=G(e),n=this.value,r=t.value;return t.isSmall?n==r?0:n>r?1:-1:n<0!==t.sign?n<0?-1:1:n<0?1:-1},u.prototype.compareTo=u.prototype.compare,o.prototype.equals=function(e){return this.compare(e)===0},u.prototype.eq=u.prototype.equals=o.prototype.eq=o.prototype.equals,o.prototype.notEquals=function(e){return this.compare(e)!==0},u.prototype.neq=u.prototype.notEquals=o.prototype.neq=o.prototype.notEquals,o.prototype.greater=function(e){return this.compare(e)>0},u.prototype.gt=u.prototype.greater=o.prototype.gt=o.prototype.greater,o.prototype.lesser=function(e){return this.compare(e)<0},u.prototype.lt=u.prototype.lesser=o.prototype.lt=o.prototype.lesser,o.prototype.greaterOrEquals=function(e){return this.compare(e)>=0},u.prototype.geq=u.prototype.greaterOrEquals=o.prototype.geq=o.prototype.greaterOrEquals,o.prototype.lesserOrEquals=function(e){return this.compare(e)<=0},u.prototype.leq=u.prototype.lesserOrEquals=o.prototype.leq=o.prototype.lesserOrEquals,o.prototype.isEven=function(){return(this.value[0]&1)===0},u.prototype.isEven=function(){return(this.value&1)===0},o.prototype.isOdd=function(){return(this.value[0]&1)===1},u.prototype.isOdd=function(){return(this.value&1)===1},o.prototype.isPositive=function(){return!this.sign},u.prototype.isPositive=function(){return this.value>0},o.prototype.isNegative=function(){return this.sign},u.prototype.isNegative=function(){return this.value<0},o.prototype.isUnit=function(){return!1},u.prototype.isUnit=function(){return Math.abs(this.value)===1},o.prototype.isZero=function(){return!1},u.prototype.isZero=function(){return this.value===0},o.prototype.isDivisibleBy=function(e){var t=G(e),n=t.value;return n===0?!1:n===1?!0:n===2?this.isEven():this.mod(t).equals(Y[0])},u.prototype.isDivisibleBy=o.prototype.isDivisibleBy,o.prototype.isPrime=function(){var t=_(this);if(t!==e)return t;var n=this.abs(),r=n.prev(),i=[2,3,5,7,11,13,17,19],s=r,o,u,a,f;while(s.isEven())s=s.divide(2);for(a=0;a-r?new u(e-1):new o(i,!0)};var D=[1];while(D[D.length-1]<=t)D.push(2*D[D.length-1]);var P=D.length,H=D[P-1];o.prototype.shiftLeft=function(e){if(!B(e))throw new Error(String(e)+" is too large for shifting.");e=+e;if(e<0)return this.shiftRight(-e);var t=this;while(e>=P)t=t.multiply(H),e-=P-1;return t.multiply(D[e])},u.prototype.shiftLeft=o.prototype.shiftLeft,o.prototype.shiftRight=function(e){var t;if(!B(e))throw new Error(String(e)+" is too large for shifting.");e=+e;if(e<0)return this.shiftLeft(-e);var n=this;while(e>=P){if(n.isZero())return n;t=O(n,H),n=t[1].isNegative()?t[0].prev():t[0],e-=P-1}return t=O(n,D[e]),t[1].isNegative()?t[0].prev():t[0]},u.prototype.shiftRight=o.prototype.shiftRight,o.prototype.not=function(){return this.negate().prev()},u.prototype.not=o.prototype.not,o.prototype.and=function(e){return j(this,e,function(e,t){return e&t})},u.prototype.and=o.prototype.and,o.prototype.or=function(e){return j(this,e,function(e,t){return e|t})},u.prototype.or=o.prototype.or,o.prototype.xor=function(e){return j(this,e,function(e,t){return e^t})},u.prototype.xor=o.prototype.xor;var F=1<<30,I=(t&-t)*(t&-t)|F,V=function(e,t){var n=Y[0],r=Y[1],i=e.length;if(2<=t&&t<=36&&i<=s/Math.log(t))return new u(parseInt(e,t));t=G(t);var o=[],a,f=e[0]==="-";for(a=f?1:0;a");o.push(G(e.slice(h+1,a)))}}o.reverse();for(a=0;a=0)o=String(n[r]),i+=s.slice(o.length)+o;var u=this.sign?"-":"";return u+i},u.prototype.toString=function(t){return t===e&&(t=10),t!=10?J(this,t):String(this.value)},o.prototype.valueOf=function(){return+this.toString()},o.prototype.toJSNumber=o.prototype.valueOf,u.prototype.valueOf=function(){return this.value},u.prototype.toJSNumber=u.prototype.valueOf;var Y=function(e,t){return typeof e=="undefined"?Y[0]:typeof t!="undefined"?+t===10?G(e):V(e,t):G(e)};for(var Z=0;Z<1e3;Z++)Y[Z]=new u(Z),Z>0&&(Y[-Z]=new u(-Z));return Y.one=Y[1],Y.zero=Y[0],Y.minusOne=Y[-1],Y.max=R,Y.min=U,Y.gcd=z,Y.lcm=W,Y.isInstance=function(e){return e instanceof o||e instanceof u},Y.randBetween=X,Y}();typeof module!="undefined"&&module.hasOwnProperty("exports")&&(module.exports=bigInt); \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/big-integer/README.md b/platforms/android/cordova/node_modules/big-integer/README.md new file mode 100644 index 0000000..6d9ee85 --- /dev/null +++ b/platforms/android/cordova/node_modules/big-integer/README.md @@ -0,0 +1,506 @@ +# BigInteger.js [![Build Status][travis-img]][travis-url] [![Coverage Status][coveralls-img]][coveralls-url] [![Monthly Downloads][downloads-img]][downloads-url] + +[travis-url]: https://travis-ci.org/peterolson/BigInteger.js +[travis-img]: https://travis-ci.org/peterolson/BigInteger.js.svg?branch=master +[coveralls-url]: https://coveralls.io/github/peterolson/BigInteger.js?branch=master +[coveralls-img]: https://coveralls.io/repos/peterolson/BigInteger.js/badge.svg?branch=master&service=github +[downloads-url]: https://www.npmjs.com/package/big-integer +[downloads-img]: https://img.shields.io/npm/dm/big-integer.svg + +**BigInteger.js** is an arbitrary-length integer library for Javascript, allowing arithmetic operations on integers of unlimited size, notwithstanding memory and time limitations. + +## Installation + +If you are using a browser, you can download [BigInteger.js from GitHub](http://peterolson.github.com/BigInteger.js/BigInteger.min.js) or just hotlink to it: + + + +If you are using node, you can install BigInteger with [npm](https://npmjs.org/). + + npm install big-integer + +Then you can include it in your code: + + var bigInt = require("big-integer"); + + +## Usage +### `bigInt(number, [base])` + +You can create a bigInt by calling the `bigInt` function. You can pass in + + - a string, which it will parse as an bigInt and throw an `"Invalid integer"` error if the parsing fails. + - a Javascript number, which it will parse as an bigInt and throw an `"Invalid integer"` error if the parsing fails. + - another bigInt. + - nothing, and it will return `bigInt.zero`. + + If you provide a second parameter, then it will parse `number` as a number in base `base`. Note that `base` can be any bigInt (even negative or zero). The letters "a-z" and "A-Z" will be interpreted as the numbers 10 to 35. Higher digits can be specified in angle brackets (`<` and `>`). + +Examples: + + var zero = bigInt(); + var ninetyThree = bigInt(93); + var largeNumber = bigInt("75643564363473453456342378564387956906736546456235345"); + var googol = bigInt("1e100"); + var bigNumber = bigInt(largeNumber); + + var maximumByte = bigInt("FF", 16); + var fiftyFiveGoogol = bigInt("<55>0", googol); + +Note that Javascript numbers larger than `9007199254740992` and smaller than `-9007199254740992` are not precisely represented numbers and will not produce exact results. If you are dealing with numbers outside that range, it is better to pass in strings. + +### Method Chaining + +Note that bigInt operations return bigInts, which allows you to chain methods, for example: + + var salary = bigInt(dollarsPerHour).times(hoursWorked).plus(randomBonuses) + +### Constants + +There are three named constants already stored that you do not have to construct with the `bigInt` function yourself: + + - `bigInt.one`, equivalent to `bigInt(1)` + - `bigInt.zero`, equivalent to `bigInt(0)` + - `bigInt.minusOne`, equivalent to `bigInt(-1)` + +The numbers from -999 to 999 are also already prestored and can be accessed using `bigInt[index]`, for example: + + - `bigInt[-999]`, equivalent to `bigInt(-999)` + - `bigInt[256]`, equivalent to `bigInt(256)` + +### Methods + +#### `abs()` + +Returns the absolute value of a bigInt. + + - `bigInt(-45).abs()` => `45` + - `bigInt(45).abs()` => `45` + +#### `add(number)` + +Performs addition. + + - `bigInt(5).add(7)` => `12` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Addition) + +#### `and(number)` + +Performs the bitwise AND operation. The operands are treated as if they were represented using [two's complement representation](http://en.wikipedia.org/wiki/Two%27s_complement). + + - `bigInt(6).and(3)` => `2` + - `bigInt(6).and(-3)` => `4` + +#### `compare(number)` + +Performs a comparison between two numbers. If the numbers are equal, it returns `0`. If the first number is greater, it returns `1`. If the first number is lesser, it returns `-1`. + + - `bigInt(5).compare(5)` => `0` + - `bigInt(5).compare(4)` => `1` + - `bigInt(4).compare(5)` => `-1` + +#### `compareAbs(number)` + +Performs a comparison between the absolute value of two numbers. + + - `bigInt(5).compareAbs(-5)` => `0` + - `bigInt(5).compareAbs(4)` => `1` + - `bigInt(4).compareAbs(-5)` => `-1` + +#### `compareTo(number)` + +Alias for the `compare` method. + +#### `divide(number)` + +Performs integer division, disregarding the remainder. + + - `bigInt(59).divide(5)` => `11` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `divmod(number)` + +Performs division and returns an object with two properties: `quotient` and `remainder`. The sign of the remainder will match the sign of the dividend. + + - `bigInt(59).divmod(5)` => `{quotient: bigInt(11), remainder: bigInt(4) }` + - `bigInt(-5).divmod(2)` => `{quotient: bigInt(-2), remainder: bigInt(-1) }` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `eq(number)` + +Alias for the `equals` method. + +#### `equals(number)` + +Checks if two numbers are equal. + + - `bigInt(5).equals(5)` => `true` + - `bigInt(4).equals(7)` => `false` + +#### `geq(number)` + +Alias for the `greaterOrEquals` method. + + +#### `greater(number)` + +Checks if the first number is greater than the second. + + - `bigInt(5).greater(6)` => `false` + - `bigInt(5).greater(5)` => `false` + - `bigInt(5).greater(4)` => `true` + +#### `greaterOrEquals(number)` + +Checks if the first number is greater than or equal to the second. + + - `bigInt(5).greaterOrEquals(6)` => `false` + - `bigInt(5).greaterOrEquals(5)` => `true` + - `bigInt(5).greaterOrEquals(4)` => `true` + +#### `gt(number)` + +Alias for the `greater` method. + +#### `isDivisibleBy(number)` + +Returns `true` if the first number is divisible by the second number, `false` otherwise. + + - `bigInt(999).isDivisibleBy(333)` => `true` + - `bigInt(99).isDivisibleBy(5)` => `false` + +#### `isEven()` + +Returns `true` if the number is even, `false` otherwise. + + - `bigInt(6).isEven()` => `true` + - `bigInt(3).isEven()` => `false` + +#### `isNegative()` + +Returns `true` if the number is negative, `false` otherwise. +Returns `false` for `0` and `-0`. + + - `bigInt(-23).isNegative()` => `true` + - `bigInt(50).isNegative()` => `false` + +#### `isOdd()` + +Returns `true` if the number is odd, `false` otherwise. + + - `bigInt(13).isOdd()` => `true` + - `bigInt(40).isOdd()` => `false` + +#### `isPositive()` + +Return `true` if the number is positive, `false` otherwise. +Returns `false` for `0` and `-0`. + + - `bigInt(54).isPositive()` => `true` + - `bigInt(-1).isPositive()` => `false` + +#### `isPrime()` + +Returns `true` if the number is prime, `false` otherwise. + + - `bigInt(5).isPrime()` => `true` + - `bigInt(6).isPrime()` => `false` + +#### `isProbablePrime([iterations])` + +Returns `true` if the number is very likely to be positive, `false` otherwise. +Argument is optional and determines the amount of iterations of the test (default: `5`). The more iterations, the lower chance of getting a false positive. +This uses the [Fermat primality test](https://en.wikipedia.org/wiki/Fermat_primality_test). + + - `bigInt(5).isProbablePrime()` => `true` + - `bigInt(49).isProbablePrime()` => `false` + - `bigInt(1729).isProbablePrime(50)` => `false` + +Note that this function is not deterministic, since it relies on random sampling of factors, so the result for some numbers is not always the same. [Carmichael numbers](https://en.wikipedia.org/wiki/Carmichael_number) are particularly prone to give unreliable results. + +For example, `bigInt(1729).isProbablePrime()` returns `false` about 76% of the time and `true` about 24% of the time. The correct result is `false`. + +#### `isUnit()` + +Returns `true` if the number is `1` or `-1`, `false` otherwise. + + - `bigInt.one.isUnit()` => `true` + - `bigInt.minusOne.isUnit()` => `true` + - `bigInt(5).isUnit()` => `false` + +#### `isZero()` + +Return `true` if the number is `0` or `-0`, `false` otherwise. + + - `bigInt.zero.isZero()` => `true` + - `bigInt("-0").isZero()` => `true` + - `bigInt(50).isZero()` => `false` + +#### `leq(number)` + +Alias for the `lesserOrEquals` method. + +#### `lesser(number)` + +Checks if the first number is lesser than the second. + + - `bigInt(5).lesser(6)` => `true` + - `bigInt(5).lesser(5)` => `false` + - `bigInt(5).lesser(4)` => `false` + +#### `lesserOrEquals(number)` + +Checks if the first number is less than or equal to the second. + + - `bigInt(5).lesserOrEquals(6)` => `true` + - `bigInt(5).lesserOrEquals(5)` => `true` + - `bigInt(5).lesserOrEquals(4)` => `false` + +#### `lt(number)` + +Alias for the `lesser` method. + +#### `minus(number)` + +Alias for the `subtract` method. + + - `bigInt(3).minus(5)` => `-2` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Subtraction) + +#### `mod(number)` + +Performs division and returns the remainder, disregarding the quotient. The sign of the remainder will match the sign of the dividend. + + - `bigInt(59).mod(5)` => `4` + - `bigInt(-5).mod(2)` => `-1` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `modPow(exp, mod)` + +Takes the number to the power `exp` modulo `mod`. + + - `bigInt(10).modPow(3, 30)` => `10` + +#### `multiply(number)` + +Performs multiplication. + + - `bigInt(111).multiply(111)` => `12321` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Multiplication) + +#### `neq(number)` + +Alias for the `notEquals` method. + +#### `next()` + +Adds one to the number. + + - `bigInt(6).next()` => `7` + +#### `not()` + +Performs the bitwise NOT operation. The operands are treated as if they were represented using [two's complement representation](http://en.wikipedia.org/wiki/Two%27s_complement). + + - `bigInt(10).not()` => `-11` + - `bigInt(0).not()` => `-1` + +#### `notEquals(number)` + +Checks if two numbers are not equal. + + - `bigInt(5).notEquals(5)` => `false` + - `bigInt(4).notEquals(7)` => `true` + +#### `or(number)` + +Performs the bitwise OR operation. The operands are treated as if they were represented using [two's complement representation](http://en.wikipedia.org/wiki/Two%27s_complement). + + - `bigInt(13).or(10)` => `15` + - `bigInt(13).or(-8)` => `-3` + +#### `over(number)` + +Alias for the `divide` method. + + - `bigInt(59).over(5)` => `11` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `plus(number)` + +Alias for the `add` method. + + - `bigInt(5).plus(7)` => `12` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Addition) + +#### `pow(number)` + +Performs exponentiation. If the exponent is less than `0`, `pow` returns `0`. `bigInt.zero.pow(0)` returns `1`. + + - `bigInt(16).pow(16)` => `18446744073709551616` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Exponentiation) + +#### `prev(number)` + +Subtracts one from the number. + + - `bigInt(6).prev()` => `5` + +#### `remainder(number)` + +Alias for the `mod` method. + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `shiftLeft(n)` + +Shifts the number left by `n` places in its binary representation. If a negative number is provided, it will shift right. Throws an error if `n` is outside of the range `[-9007199254740992, 9007199254740992]`. + + - `bigInt(8).shiftLeft(2)` => `32` + - `bigInt(8).shiftLeft(-2)` => `2` + +#### `shiftRight(n)` + +Shifts the number right by `n` places in its binary representation. If a negative number is provided, it will shift left. Throws an error if `n` is outside of the range `[-9007199254740992, 9007199254740992]`. + + - `bigInt(8).shiftRight(2)` => `2` + - `bigInt(8).shiftRight(-2)` => `32` + +#### `square()` + +Squares the number + + - `bigInt(3).square()` => `9` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Squaring) + +#### `subtract(number)` + +Performs subtraction. + + - `bigInt(3).subtract(5)` => `-2` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Subtraction) + +#### `times(number)` + +Alias for the `multiply` method. + + - `bigInt(111).times(111)` => `12321` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Multiplication) + +#### `toJSNumber()` + +Converts a bigInt into a native Javascript number. Loses precision for numbers outside the range `[-9007199254740992, 9007199254740992]`. + + - `bigInt("18446744073709551616").toJSNumber()` => `18446744073709552000` + +#### `xor(number)` + +Performs the bitwise XOR operation. The operands are treated as if they were represented using [two's complement representation](http://en.wikipedia.org/wiki/Two%27s_complement). + + - `bigInt(12).xor(5)` => `9` + - `bigInt(12).xor(-5)` => `-9` + +### Static Methods + +#### `gcd(a, b)` + +Finds the greatest common denominator of `a` and `b`. + + - `bigInt.gcd(42,56)` => `14` + +#### `isInstance(x)` + +Returns `true` if `x` is a BigInteger, `false` otherwise. + + - `bigInt.isInstance(bigInt(14))` => `true` + - `bigInt.isInstance(14)` => `false` + +#### `lcm(a,b)` + +Finds the least common multiple of `a` and `b`. + + - `bigInt.lcm(21, 6)` => `42` + +#### `max(a,b)` + +Returns the largest of `a` and `b`. + + - `bigInt.max(77, 432)` => `432` + +#### `min(a,b)` + +Returns the smallest of `a` and `b`. + + - `bigInt.min(77, 432)` => `77` + +#### `randBetween(min, max)` + +Returns a random number between `min` and `max`. + + - `bigInt.randBetween("-1e100", "1e100")` => (for example) `8494907165436643479673097939554427056789510374838494147955756275846226209006506706784609314471378745` + + +### Override Methods + +#### `toString(radix = 10)` + +Converts a bigInt to a string. There is an optional radix parameter (which defaults to 10) that converts the number to the given radix. Digits in the range `10-35` will use the letters `a-z`. + + - `bigInt("1e9").toString()` => `"1000000000"` + - `bigInt("1e9").toString(16)` => `"3b9aca00"` + +**Note that arithmetical operators will trigger the `valueOf` function rather than the `toString` function.** When converting a bigInteger to a string, you should use the `toString` method or the `String` function instead of adding the empty string. + + - `bigInt("999999999999999999").toString()` => `"999999999999999999"` + - `String(bigInt("999999999999999999"))` => `"999999999999999999"` + - `bigInt("999999999999999999") + ""` => `1000000000000000000` + +Bases larger than 36 are supported. If a digit is greater than or equal to 36, it will be enclosed in angle brackets. + + - `bigInt(567890).toString(100)` => `"<56><78><90>"` + +Negative bases are also supported. + + - `bigInt(12345).toString(-10)` => `"28465"` + +Base 1 and base -1 are also supported. + + - `bigInt(-15).toString(1)` => `"-111111111111111"` + - `bigInt(-15).toString(-1)` => `"101010101010101010101010101010"` + +Base 0 is only allowed for the number zero. + + - `bigInt(0).toString(0)` => `0` + - `bigInt(1).toString(0)` => `Error: Cannot convert nonzero numbers to base 0.` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#toString) + +#### `valueOf()` + +Converts a bigInt to a native Javascript number. This override allows you to use native arithmetic operators without explicit conversion: + + - `bigInt("100") + bigInt("200") === 300; //true` + +## Contributors + +To contribute, just fork the project, make some changes, and submit a pull request. Please verify that the unit tests pass before submitting. + +The unit tests are contained in the `spec/spec.js` file. You can run them locally by opening the `spec/SpecRunner.html` or file or running `npm test`. You can also [run the tests online from GitHub](http://peterolson.github.io/BigInteger.js/spec/SpecRunner.html). + +There are performance benchmarks that can be viewed from the `benchmarks/index.html` page. You can [run them online from GitHub](http://peterolson.github.io/BigInteger.js/benchmark/). + +## License + +This project is public domain. For more details, read about the [Unlicense](http://unlicense.org/). \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/big-integer/package.json b/platforms/android/cordova/node_modules/big-integer/package.json new file mode 100644 index 0000000..f51a9b6 --- /dev/null +++ b/platforms/android/cordova/node_modules/big-integer/package.json @@ -0,0 +1,100 @@ +{ + "_args": [ + [ + "big-integer@^1.6.7", + "/Users/steveng/repo/cordova/cordova-android/node_modules/bplist-parser" + ] + ], + "_from": "big-integer@>=1.6.7 <2.0.0", + "_id": "big-integer@1.6.12", + "_inCache": true, + "_installable": true, + "_location": "/big-integer", + "_nodeVersion": "0.12.3", + "_npmOperationalInternal": { + "host": "packages-6-west.internal.npmjs.com", + "tmp": "tmp/big-integer-1.6.12.tgz_1455702804335_0.11810904298909009" + }, + "_npmUser": { + "email": "peter.e.c.olson+npm@gmail.com", + "name": "peterolson" + }, + "_npmVersion": "2.9.1", + "_phantomChildren": {}, + "_requested": { + "name": "big-integer", + "raw": "big-integer@^1.6.7", + "rawSpec": "^1.6.7", + "scope": null, + "spec": ">=1.6.7 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/bplist-parser" + ], + "_resolved": "http://registry.npmjs.org/big-integer/-/big-integer-1.6.12.tgz", + "_shasum": "39afcddafcd5c4480864efb757337d508938bb26", + "_shrinkwrap": null, + "_spec": "big-integer@^1.6.7", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/bplist-parser", + "author": { + "email": "peter.e.c.olson+npm@gmail.com", + "name": "Peter Olson" + }, + "bin": {}, + "bugs": { + "url": "https://github.com/peterolson/BigInteger.js/issues" + }, + "contributors": [], + "dependencies": {}, + "description": "An arbitrary length integer library for Javascript", + "devDependencies": { + "coveralls": "^2.11.4", + "jasmine": "2.1.x", + "jasmine-core": "^2.3.4", + "karma": "^0.13.3", + "karma-coverage": "^0.4.2", + "karma-jasmine": "^0.3.6", + "karma-phantomjs-launcher": "~0.1" + }, + "directories": {}, + "dist": { + "shasum": "39afcddafcd5c4480864efb757337d508938bb26", + "tarball": "http://registry.npmjs.org/big-integer/-/big-integer-1.6.12.tgz" + }, + "engines": { + "node": ">=0.6" + }, + "gitHead": "56f449108e31542f939e701f1fe562a46e6c1fab", + "homepage": "https://github.com/peterolson/BigInteger.js#readme", + "keywords": [ + "arbitrary", + "arithmetic", + "big", + "bigint", + "biginteger", + "bignum", + "integer", + "math", + "precision" + ], + "license": "Unlicense", + "main": "./BigInteger", + "maintainers": [ + { + "name": "peterolson", + "email": "peter.e.c.olson+npm@gmail.com" + } + ], + "name": "big-integer", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/peterolson/BigInteger.js.git" + }, + "scripts": { + "test": "karma start my.conf.js" + }, + "version": "1.6.12" +} diff --git a/platforms/android/cordova/node_modules/bplist-parser/.npmignore b/platforms/android/cordova/node_modules/bplist-parser/.npmignore new file mode 100644 index 0000000..a9b46ea --- /dev/null +++ b/platforms/android/cordova/node_modules/bplist-parser/.npmignore @@ -0,0 +1,8 @@ +/build/* +node_modules +*.node +*.sh +*.swp +.lock* +npm-debug.log +.idea diff --git a/platforms/android/cordova/node_modules/bplist-parser/README.md b/platforms/android/cordova/node_modules/bplist-parser/README.md new file mode 100644 index 0000000..37e5e1c --- /dev/null +++ b/platforms/android/cordova/node_modules/bplist-parser/README.md @@ -0,0 +1,47 @@ +bplist-parser +============= + +Binary Mac OS X Plist (property list) parser. + +## Installation + +```bash +$ npm install bplist-parser +``` + +## Quick Examples + +```javascript +var bplist = require('bplist-parser'); + +bplist.parseFile('myPlist.bplist', function(err, obj) { + if (err) throw err; + + console.log(JSON.stringify(obj)); +}); +``` + +## License + +(The MIT License) + +Copyright (c) 2012 Near Infinity Corporation + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/bplist-parser/bplistParser.js b/platforms/android/cordova/node_modules/bplist-parser/bplistParser.js new file mode 100644 index 0000000..f8335bc --- /dev/null +++ b/platforms/android/cordova/node_modules/bplist-parser/bplistParser.js @@ -0,0 +1,357 @@ +'use strict'; + +// adapted from http://code.google.com/p/plist/source/browse/trunk/src/com/dd/plist/BinaryPropertyListParser.java + +var fs = require('fs'); +var bigInt = require("big-integer"); +var debug = false; + +exports.maxObjectSize = 100 * 1000 * 1000; // 100Meg +exports.maxObjectCount = 32768; + +// EPOCH = new SimpleDateFormat("yyyy MM dd zzz").parse("2001 01 01 GMT").getTime(); +// ...but that's annoying in a static initializer because it can throw exceptions, ick. +// So we just hardcode the correct value. +var EPOCH = 978307200000; + +// UID object definition +var UID = exports.UID = function(id) { + this.UID = id; +} + +var parseFile = exports.parseFile = function (fileNameOrBuffer, callback) { + function tryParseBuffer(buffer) { + var err = null; + var result; + try { + result = parseBuffer(buffer); + } catch (ex) { + err = ex; + } + callback(err, result); + } + + if (Buffer.isBuffer(fileNameOrBuffer)) { + return tryParseBuffer(fileNameOrBuffer); + } else { + fs.readFile(fileNameOrBuffer, function (err, data) { + if (err) { return callback(err); } + tryParseBuffer(data); + }); + } +}; + +var parseBuffer = exports.parseBuffer = function (buffer) { + var result = {}; + + // check header + var header = buffer.slice(0, 'bplist'.length).toString('utf8'); + if (header !== 'bplist') { + throw new Error("Invalid binary plist. Expected 'bplist' at offset 0."); + } + + // Handle trailer, last 32 bytes of the file + var trailer = buffer.slice(buffer.length - 32, buffer.length); + // 6 null bytes (index 0 to 5) + var offsetSize = trailer.readUInt8(6); + if (debug) { + console.log("offsetSize: " + offsetSize); + } + var objectRefSize = trailer.readUInt8(7); + if (debug) { + console.log("objectRefSize: " + objectRefSize); + } + var numObjects = readUInt64BE(trailer, 8); + if (debug) { + console.log("numObjects: " + numObjects); + } + var topObject = readUInt64BE(trailer, 16); + if (debug) { + console.log("topObject: " + topObject); + } + var offsetTableOffset = readUInt64BE(trailer, 24); + if (debug) { + console.log("offsetTableOffset: " + offsetTableOffset); + } + + if (numObjects > exports.maxObjectCount) { + throw new Error("maxObjectCount exceeded"); + } + + // Handle offset table + var offsetTable = []; + + for (var i = 0; i < numObjects; i++) { + var offsetBytes = buffer.slice(offsetTableOffset + i * offsetSize, offsetTableOffset + (i + 1) * offsetSize); + offsetTable[i] = readUInt(offsetBytes, 0); + if (debug) { + console.log("Offset for Object #" + i + " is " + offsetTable[i] + " [" + offsetTable[i].toString(16) + "]"); + } + } + + // Parses an object inside the currently parsed binary property list. + // For the format specification check + // + // Apple's binary property list parser implementation. + function parseObject(tableOffset) { + var offset = offsetTable[tableOffset]; + var type = buffer[offset]; + var objType = (type & 0xF0) >> 4; //First 4 bits + var objInfo = (type & 0x0F); //Second 4 bits + switch (objType) { + case 0x0: + return parseSimple(); + case 0x1: + return parseInteger(); + case 0x8: + return parseUID(); + case 0x2: + return parseReal(); + case 0x3: + return parseDate(); + case 0x4: + return parseData(); + case 0x5: // ASCII + return parsePlistString(); + case 0x6: // UTF-16 + return parsePlistString(true); + case 0xA: + return parseArray(); + case 0xD: + return parseDictionary(); + default: + throw new Error("Unhandled type 0x" + objType.toString(16)); + } + + function parseSimple() { + //Simple + switch (objInfo) { + case 0x0: // null + return null; + case 0x8: // false + return false; + case 0x9: // true + return true; + case 0xF: // filler byte + return null; + default: + throw new Error("Unhandled simple type 0x" + objType.toString(16)); + } + } + + function bufferToHexString(buffer) { + var str = ''; + var i; + for (i = 0; i < buffer.length; i++) { + if (buffer[i] != 0x00) { + break; + } + } + for (; i < buffer.length; i++) { + var part = '00' + buffer[i].toString(16); + str += part.substr(part.length - 2); + } + return str; + } + + function parseInteger() { + var length = Math.pow(2, objInfo); + if (length > 4) { + var data = buffer.slice(offset + 1, offset + 1 + length); + var str = bufferToHexString(data); + return bigInt(str, 16); + } if (length < exports.maxObjectSize) { + return readUInt(buffer.slice(offset + 1, offset + 1 + length)); + } else { + throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available."); + } + } + + function parseUID() { + var length = objInfo + 1; + if (length < exports.maxObjectSize) { + return new UID(readUInt(buffer.slice(offset + 1, offset + 1 + length))); + } else { + throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available."); + } + } + + function parseReal() { + var length = Math.pow(2, objInfo); + if (length < exports.maxObjectSize) { + var realBuffer = buffer.slice(offset + 1, offset + 1 + length); + if (length === 4) { + return realBuffer.readFloatBE(0); + } + else if (length === 8) { + return realBuffer.readDoubleBE(0); + } + } else { + throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available."); + } + } + + function parseDate() { + if (objInfo != 0x3) { + console.error("Unknown date type :" + objInfo + ". Parsing anyway..."); + } + var dateBuffer = buffer.slice(offset + 1, offset + 9); + return new Date(EPOCH + (1000 * dateBuffer.readDoubleBE(0))); + } + + function parseData() { + var dataoffset = 1; + var length = objInfo; + if (objInfo == 0xF) { + var int_type = buffer[offset + 1]; + var intType = (int_type & 0xF0) / 0x10; + if (intType != 0x1) { + console.error("0x4: UNEXPECTED LENGTH-INT TYPE! " + intType); + } + var intInfo = int_type & 0x0F; + var intLength = Math.pow(2, intInfo); + dataoffset = 2 + intLength; + if (intLength < 3) { + length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength)); + } else { + length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength)); + } + } + if (length < exports.maxObjectSize) { + return buffer.slice(offset + dataoffset, offset + dataoffset + length); + } else { + throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available."); + } + } + + function parsePlistString (isUtf16) { + isUtf16 = isUtf16 || 0; + var enc = "utf8"; + var length = objInfo; + var stroffset = 1; + if (objInfo == 0xF) { + var int_type = buffer[offset + 1]; + var intType = (int_type & 0xF0) / 0x10; + if (intType != 0x1) { + console.err("UNEXPECTED LENGTH-INT TYPE! " + intType); + } + var intInfo = int_type & 0x0F; + var intLength = Math.pow(2, intInfo); + var stroffset = 2 + intLength; + if (intLength < 3) { + length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength)); + } else { + length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength)); + } + } + // length is String length -> to get byte length multiply by 2, as 1 character takes 2 bytes in UTF-16 + length *= (isUtf16 + 1); + if (length < exports.maxObjectSize) { + var plistString = new Buffer(buffer.slice(offset + stroffset, offset + stroffset + length)); + if (isUtf16) { + plistString = swapBytes(plistString); + enc = "ucs2"; + } + return plistString.toString(enc); + } else { + throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available."); + } + } + + function parseArray() { + var length = objInfo; + var arrayoffset = 1; + if (objInfo == 0xF) { + var int_type = buffer[offset + 1]; + var intType = (int_type & 0xF0) / 0x10; + if (intType != 0x1) { + console.error("0xa: UNEXPECTED LENGTH-INT TYPE! " + intType); + } + var intInfo = int_type & 0x0F; + var intLength = Math.pow(2, intInfo); + arrayoffset = 2 + intLength; + if (intLength < 3) { + length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength)); + } else { + length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength)); + } + } + if (length * objectRefSize > exports.maxObjectSize) { + throw new Error("To little heap space available!"); + } + var array = []; + for (var i = 0; i < length; i++) { + var objRef = readUInt(buffer.slice(offset + arrayoffset + i * objectRefSize, offset + arrayoffset + (i + 1) * objectRefSize)); + array[i] = parseObject(objRef); + } + return array; + } + + function parseDictionary() { + var length = objInfo; + var dictoffset = 1; + if (objInfo == 0xF) { + var int_type = buffer[offset + 1]; + var intType = (int_type & 0xF0) / 0x10; + if (intType != 0x1) { + console.error("0xD: UNEXPECTED LENGTH-INT TYPE! " + intType); + } + var intInfo = int_type & 0x0F; + var intLength = Math.pow(2, intInfo); + dictoffset = 2 + intLength; + if (intLength < 3) { + length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength)); + } else { + length = readUInt(buffer.slice(offset + 2, offset + 2 + intLength)); + } + } + if (length * 2 * objectRefSize > exports.maxObjectSize) { + throw new Error("To little heap space available!"); + } + if (debug) { + console.log("Parsing dictionary #" + tableOffset); + } + var dict = {}; + for (var i = 0; i < length; i++) { + var keyRef = readUInt(buffer.slice(offset + dictoffset + i * objectRefSize, offset + dictoffset + (i + 1) * objectRefSize)); + var valRef = readUInt(buffer.slice(offset + dictoffset + (length * objectRefSize) + i * objectRefSize, offset + dictoffset + (length * objectRefSize) + (i + 1) * objectRefSize)); + var key = parseObject(keyRef); + var val = parseObject(valRef); + if (debug) { + console.log(" DICT #" + tableOffset + ": Mapped " + key + " to " + val); + } + dict[key] = val; + } + return dict; + } + } + + return [ parseObject(topObject) ]; +}; + +function readUInt(buffer, start) { + start = start || 0; + + var l = 0; + for (var i = start; i < buffer.length; i++) { + l <<= 8; + l |= buffer[i] & 0xFF; + } + return l; +} + +// we're just going to toss the high order bits because javascript doesn't have 64-bit ints +function readUInt64BE(buffer, start) { + var data = buffer.slice(start, start + 8); + return data.readUInt32BE(4, 8); +} + +function swapBytes(buffer) { + var len = buffer.length; + for (var i = 0; i < len; i += 2) { + var a = buffer[i]; + buffer[i] = buffer[i+1]; + buffer[i+1] = a; + } + return buffer; +} diff --git a/platforms/android/cordova/node_modules/bplist-parser/package.json b/platforms/android/cordova/node_modules/bplist-parser/package.json new file mode 100644 index 0000000..899b577 --- /dev/null +++ b/platforms/android/cordova/node_modules/bplist-parser/package.json @@ -0,0 +1,81 @@ +{ + "_args": [ + [ + "bplist-parser@^0.1.0", + "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common" + ] + ], + "_from": "bplist-parser@>=0.1.0 <0.2.0", + "_id": "bplist-parser@0.1.1", + "_inCache": true, + "_installable": true, + "_location": "/bplist-parser", + "_nodeVersion": "5.1.0", + "_npmUser": { + "email": "joe@fernsroth.com", + "name": "joeferner" + }, + "_npmVersion": "3.4.0", + "_phantomChildren": {}, + "_requested": { + "name": "bplist-parser", + "raw": "bplist-parser@^0.1.0", + "rawSpec": "^0.1.0", + "scope": null, + "spec": ">=0.1.0 <0.2.0", + "type": "range" + }, + "_requiredBy": [ + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "_shasum": "d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6", + "_shrinkwrap": null, + "_spec": "bplist-parser@^0.1.0", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common", + "author": { + "email": "joe.ferner@nearinfinity.com", + "name": "Joe Ferner" + }, + "bugs": { + "url": "https://github.com/nearinfinity/node-bplist-parser/issues" + }, + "dependencies": { + "big-integer": "^1.6.7" + }, + "description": "Binary plist parser.", + "devDependencies": { + "nodeunit": "~0.9.1" + }, + "directories": {}, + "dist": { + "shasum": "d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6", + "tarball": "http://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz" + }, + "gitHead": "c4f22650de2cc95edd21a6e609ff0654a2b951bd", + "homepage": "https://github.com/nearinfinity/node-bplist-parser#readme", + "keywords": [ + "bplist", + "parser", + "plist" + ], + "license": "MIT", + "main": "bplistParser.js", + "maintainers": [ + { + "name": "joeferner", + "email": "joe@fernsroth.com" + } + ], + "name": "bplist-parser", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/nearinfinity/node-bplist-parser.git" + }, + "scripts": { + "test": "./node_modules/nodeunit/bin/nodeunit test" + }, + "version": "0.1.1" +} diff --git a/platforms/android/cordova/node_modules/bplist-parser/test/airplay.bplist b/platforms/android/cordova/node_modules/bplist-parser/test/airplay.bplist new file mode 100644 index 0000000000000000000000000000000000000000..931adea120d583e59d640bf218696d3a07a1455d GIT binary patch literal 341 zcmYc)$jK}&F)+Bv$i&RT%Er#Y$;B-oC?qT*Di)DaT9jClnV%OgAdr)vn39?jl9`(t zl$e*ES{yGRT#%DknUt8E?NpkUmRjVRTToINFCc^}>QH=U7HCd!YHD_3QcfzuN@a(wn|ao77^*Mixx~oJ z#~)f;l2}v%7gc6}0!|K2We1@q9tK@&Yi0Wn5K+#B;y_Ijl9N7$ zsu@}sIvJ)itYX;Au$5sK!vThq43`)#GhAV~%5ab2Il~KvR}AkNen8A*Vuac#1*M@B GBO?InLtPpG literal 0 HcmV?d00001 diff --git a/platforms/android/cordova/node_modules/bplist-parser/test/iTunes-small.bplist b/platforms/android/cordova/node_modules/bplist-parser/test/iTunes-small.bplist new file mode 100644 index 0000000000000000000000000000000000000000..b7edb14a00912ef3e673c0a5d8e0d0f1a7a5cad3 GIT binary patch literal 24433 zcmeI4349aP+VIaZwUh##LMauAOk29pHT%+*wpqKTThg*qLz~h-+tjuopdbhcBH#kZ zA|kkfh$4!(;esNlxF8}RE+Dv}Uawvk-2I+2lLQ*!yB}4``}=-xpgEZ{lg#A*Jm;Ke zn~ZO5^0arzTId_Q9=yrIt3;qkTz zHSV@{Xh+!Gu8zrV?)F-~f2n7Do2zY_P{DS!ceqI z23?8 zcd%vzKZP};_^GTJ!(YRiar{iyT)|Ig&3JwmYwG#ySku7IWlbZ0J!>ZN3s}>{FJw&% zzlb%h{1Vo*@i&9U8MOwp!emh>v^Is!YBu$F7nEWOx+k2jOW54aU&D` zwP-e)gXW?6=mvBnT8wT&x1gnHIa+~Mq1(|N=uWgA-Hq-=8_@me0rVi+g0`YZ(PQXw z^dx#3J%gS@JJE~iCA0^=O2(*Q zDTV<&iVa}7S*@rU4&`;=R^b7hG{f2%I8)J|kpS7x85Uq(woCa^U zY0Yw#)n>A(O;(e_rY?^pJI)yW!6T&;<8Igp?ZV{a)0@!ULD%Qglh8NM-XGK}ZNl_@ zJ`X%Ah~4?U{d`XK-;eG3a{pK8{_o*${bvu}_V@pta|`|t@wNVQoU6an;TK`tcOGwl zf~|)!!4z|0wS0uR$<+>itEsORG9=NsJig*ZkNL@V0ip9f+V zF4zK#u?wHXLnP$%C%GZ+(Y4R%d_`A6gvi~+PwLa@in@9|{9g!l?R)ind@V3~0(Y59>JP6D1<#;d_m_Z%T8Q$aJiUE!IfeX1v|v_2d)+q z9(XuE6~>53Z&WLc2A#qv*IR8?!~d|!^`cF1Fv~^5Usso8|K#a!&pL_1&a?K5lPhL< zAvQj`WsHO!xTn=aF zu5c*ia`;oipBnzO@TYeu6ws%DJ_YnCpicpPO6XHUpA!0%(5Hkx74)f~PX&D{=u<(T z8v4}Gr-nWQ`-6Ui-l2r^DB(OxIFAy}qlEJ);XFz>j}p$Kg!3rjJW4o^63(N9^C*?t zDg*r2ABFj20lon*#5dwacrjjrZ^Ad@Tkx%TDPD%6@N#?`UV&HQRd_YN9j1*n_zt`l z--*}3zxDVoc)lCogYU)n;SG2rz8`PG58%!CLHrQjf*;0P@gw+AybV8AZEPApxp|EE zEEwB5AW2*!H6u)(4$%M}VfHpRgH_eeUbK3ll3|nu>|)8p8Y{lEd+R+79(R2$A8CWq z2VXq}lut}<>8LJnx3syPEa41g75)khsp3L9Vniv_NwAWRv7O2gMzOh6Izp_>5ZI~4 zik;#~tDWZ24p(z4oR8V*PKRf@dz91L0Z}ohr`bJ5swya(+&mtxSlVz-YjrzEx?OEB zYa6F}+Oq@`RDKA?cA?Ze#XY9j)9eun-7WQPo~isgxLT{xoL&l56sin^GTl10qs`wbt3GtpghEP zVVUg0YhjyRIyA<1cw(2IDObTON2{v^QvC4B47q_OH@vXBCV1*Hnp;(@tVP-_NIL~_ z7fj=Nja9Eym@S~527|()=1Jc@8|w&sMOA4Ve8tGkmcB^8;4^VG@Y92vUh z@2KhHqMAN|pTtjzYWg(ZfuF(8;^*-5cqe`Vzle9?m+)>-(>?sUGqFb~lSJ%{@4{~6 zs|J|EU7ikTs#`idP0%{M&EB>)?^P1ser&HG?gRf(+5>d0a=lukuz=sMG(!U4B+-3> z(X}W0>FQP=0J^*P@eMrpH^IIlf_)Y5#jlBAU&n9YH}O9F7T%BF#s}~__#i%n4+GeD zJA>`BsVD$;em8>E07;{#C5e$O^D?aNrY0y>k*Mx5Khcp8W_pux;^$2VmAnJ4$xlXCoLRpDPYcPnT{(&0{ z0iw3!2|vX2Uax>&=56OE@|TDZqyNjgbhZ`gUn0J*@xSpmBEE0&fADwsd;A0b5ud_8 z;hzEAFG1j5S{wj3ryIfP09;W6JTZd9U2JwWFg+Yq)F5aD=nxEmPG!~Uv}&WlX45E) zYL!)-Al>h-?u$aAck)eqXqQp_CZhTs|AGHxs0bpM5JCw@LdYc~l=Q&cNLUc6?;--I z7Ih;kJ+K++oea+fUN&^?Y_+j9d0Dk&l5a+Y{Q~S2>|ho6_K2EiGguW`tHP+%K`on3 z#HW($K+~2K@hyChzc*Y-ID<%fk=~?_2r+{2B$D(c{YVt)Pol{H5<@N}0|Dh_K`6gp z8$h|Z8&Mj7oU|r0g|oZr8Om~|h7MOty~HxgcL1!~^=_fOL14Q8rrE657%dQ#R4FtT zy-mgAzI$#>tzj!>6iZi2a3euC$)cTnD<9TX-6S%67rC4aCIX2SvBr^jGK3_MM3O|3 z$xxC4KvVg3W6HelCZWn*Uk~#PyNrOn^ke@3-MQUIS0QH{8{J8at%I#EHcyM2K^-gh z3J$NpdVr-`Zqv)<2DM42H!H!h71_z}>vPmVp2j%iJg=I%<>?Z_wNnBT+od$m4Gj>DBC^lOdpx)-X;z3NZ<0z z_J|${_$j;r%p8-#ppaW^3Z>1cW}|y!Z39466(00MP5rY0G*p?(PvLw0O{kS3)GFd2 zP7!J~sUgG32r`n4BBRL|GM0=Zwd4wb>heMT6|Mpg1Q${+xPY)~vCpG!~Ouue69Oj(Slf zjOTTW`D-8{$-wjr0&`jo&xU0Ixq&PsHv*JJWHDJnZX!36Tga_sDOmYdmZN- zhkqG`E67T+imV0fb81hcCJ zo+TsN;bv-L7vYS99RjnRp%ZLphRLEb+pIRFMy*z9pfFb)V(G84AvPcju35yEasOw4 ztvZ*V#exVAbq(A7WD|LSYzAx(l849^@-W#-9wCpCZR9bsojgvS0Blco#ujm+R{-0z z3yh5g3p9#$=5QEWT0F3Nw!dEJ~9IE@QC>?sq@9 z>`hk#xL-H(*ZD#PUD3Cv$qw=ic^1GuN1i7;$qVE~vWvV#c9T8iW%3Gn6~OHc23H#Z z*Ls1$F^9I$%}lsruc&0hVM~D5010w8;LvJqMyU5T>1}W$8~6~JwG2`WD{U3EE5FY- zFkP!Y;pehYKo_;^b@B#zlk5XXZ;}1vZE}FTLk^NdUje3n1z|c~ z9Kdwb1;)f&f5}vEbhz4>jo@r_u_4Lg^Uw_Ubg&q7scZ5C(OIbFFK3p6c(A|@6*Hw^ zNpv&{;z0mbZ-A_c+M-Y^G)kM^BrODGs}|Jq1JC_Fp!{_RzrYtUIKO4`-{c$eE%^_q z;&s+Cq)$F4U|wyIT}JQp`o+~ z4Wm8rHX7a;PQ;0^0XS1Gtm=u*e4%GT<5i-fnHwPy!N`pD^$B7RgQ7CaH7cD&XVk!r z5qc@cl>hTafReYKU*vP;&kG9eP5aOY$^(>0+L!jDQM5merUPgUy%eAf^g;1uhaxJk z4M6$l(?FdpO$DJnf$P7J$WuCSeV22mNkoDK$b0*$3{G@cHj2{e%= z(PTh3Gzi@ZE`YA>0_&4#lX|DJS*z4lFB%dfZLke6>X~l?H?gS=Hmw})xV1r8LnXo( zwtxVPevA2=nZph9d$6B)=KOw^Of5}iej-hy=`@38GDn-rsRFPlsfwzphH9yf>ZyTd z0i0||+!@>4qCIGx+6uSnx?Aep^?4#QVaFUm1*=b=uUr9UGyidBaDD(J8LDSoLv5y< zsUG8X20x&tv+Au@jb33=Ypn*ePRU|HE0>4Db;i%U3a(S4h#v=vz4q}h_}rYXQ5;5d zX&%iNDH^GXnyH0asf`xULRv(NX$dU_iuNE}KMxGxx&X1rbK+v^)_HCZOzjb8PVLYO z7)=_TR$+oF1+!jmQR-DZWf(tY7_Y7IV>F-a4;bB<{4Srf)P>RkpF)7Y(pO>5|II)aX*qv&WlhK{A<0B3Cw&QtdUaCWEmvFHy(n&G+7JGot42}Z)UAZ`Ib zs~PfxHlspqF+l;S#=!J&`9~)Kps;tOAE0I8Bmg*ZFTdLthv=Ffy6AXXN9#p!ZrVWZ zpc7~#_0WlQ5^bW*w1s*BTx(}=y=R_YIxj%Z^_+V6fAc%$ZZO}icY1|=yZBDy@t-9GwHQ-7M%^; zuItRL&$OQc3U>iwxaZ`?+)oy>g{Hg>p5Qk^8sJAn{N`CC+b5K_vEL4n`T?fVpf~Cj z3X@5xHft@Atp@LE`Jwk2%$=ovnAsFUkL0^D{#Bm~+BKMS={$NpoiD;%KyRQ6>5X&| zT}+qIo9NB-7J4gP3NV)i!8~s>yNzHgBr z?iAQAD5`)RY+5wgta61$V+BV+XE0htpod>(Kwr@Nffnrk7)JGNoB7v#nd`0ry^XG* zE9oi`=xTa9T|@7nYw4YI9bHfFqIc7K=)C~+z968}_5^_5(2a{Rb6@SEVeD-5Ft^Oa zcru*~cn@%E1MCt^ZZX9GFm-yRQl-}$Y$laPWwMyXHD-koV8+j4ztA8q)mhF^(9SRB z^KbZa+g*dXk={=?(Fa7Bo9TmO34Mrep%2ro^bz_f-9{gy+X3d|K`?)YT4$gCe^oca zWKOO>S_zyqV9OX38ns1ZHdt*6(eYooLR^by2i9Wc=)u5g?hJmP&m}z_NIH8NU#Ix3 zZxw!0T!o*aPtzSDsb}c3^f~%G-AP}dFVbD~C1A8Wh|#yL0Y*!^kr8uML7&>#3Vb?l z;%yeYneI6z`yAI8@h}JhKyU?ODc)w$^?==Mf`l8z6(+bdO0F}SAqXX^+|_j_`l3rx zrtYP^mY0MeUt8^Z_)kqZF+#dLl4qJfc0(X?K*n~m2wTK{-eO=kK2TXymX ze2(sEJ^XK_q)&L z9~9FNU01;`MHT#t{)>Js^87dbhU}!@(*Mx!==byo`XfC>f1*$bMWsThfM3^(`z}EA znr^`k942pbgrgkCg>aW}pMRC}!D!K1bz-h&<(f2xY2F$?CQ}%T&)L=dk+UYa&K*Dqj8Co?*PH9ZMKFEh zzyc@Na(%geTol)zi{=J!F&qS?I4LM4?C?SAJ>%^Fq;8zh{*nb{%A_Kn<+Iw@j-a%b+-f#kta6A=nM^93 z$;fkk_xy@~gl{qL%LYHa?9V;{dVlQTKNRWxKiO=)RK#g5OXo7UOirv<;uM^cOyX3W zn$vJvPRHp<8)x7kNX2Cb5&ZIWy;3*2wNlXYoaGC=S+7=^p?FxXR9F>Ci=Gc*)Rc_c z7kBxo4J$kaBa^S=k9Aq+hH<%E9w&yRI3s7`%$$X@ayG7jE98o}Vy*;;m3Ai9i<=+N zxo(W0u&{YYP%M3%zcUa_muqwir9la$hH8z{st_Hnm3M4rV|D%@Kezl3Y``s7%^wfa zwnb;TeFf}Zu8b=`owS#3Ug0Y6U0fws#W}?B>g1}q8g4i@f*Z+=;zo00xUn2WpSapl zj!B+Y-`yeNOLk9)2=sKd;U;zmvy?Xc=aUlWz72ydoYoN)Z0I_mg_+K(HfmL{AgHVm zRX16rczXQkBpw4mRY@pZCKRf_xSqelw_tG;*^AA~TEAv?&Shx{zYCB^5`l!`xf!S}{5BzvBE($;SmJUB#QHttO8=3{b zVz~l61iw+qexGt5+K&#vkE~|k5?qbPz%6Xea6{U1-#t|u@cmGR9YXp*6>)#49UcTl zu<=m#ngX|@DWH5)4@H}KP=#oNx7{CpJWicKW!W6hQP63m;p38zs%Lvm{A>1fe&N*S|jfMd?o~sA_ znZ&hnZQNDdG;St0i<`&I=N55GxTV~3ZZ)@tThHCiZR9p_Tez*d9DHZN>R*iB)#ge?o(&~r<8TzGtVPPjGP7G4-$ z5Z_=KLos;I=o!(sMX!jyCwfElQv+Uz(ZrO+l*f#Vam938`qRKk1LqE$H*m$k z)dL?Kq!@J1pq+zW7<6dR5m|&RN)|1=%2H)=nNp^c8DzP#e3?~NAS;!X z$sDq3*(livJJBP zWe>?7mOUnWT((2@tn979)q`Ii{EE;aOckyXW(jkJ1;QfXW?`AIQdlFb6Ydc<3Y&$8 zg>AwU!VckiVVCf-@S3nsI3OGr-WQGu9}AxgUkTp`-wQtpzr~_hF1AN(uUI}dDt18Z zz}VTb^JACA-X42T?1Qn}V|T{B8G9o3WbD^*A#r`;2E`@CDdO_tO5!TwM#nYAwZ~13 zTO7AKZcW^yaXaE(irW+STHJ?m$KqS!=f$s#UmbsE{KohP;vbHGEdKHMC*z-u-#H|C zNXih^keng8L-L2bKIFuZABX%j_L9GN&K(UsVc*qAsmu{rTT;=#nDiJvEak@!`TH|gr6B}q3YEl*mTv_9#+ zqz957Oxlw4NOJGwh~${$*yQ-+gyaX3wOl<*WjrGLtRluJ_vrOZj0m$D>fMars_+f!3hO{vwX!&Aqkx>Fldn^W6T zJ5r~lPD?$IdNB1w>Q|{hq@GIsIc-+jlC_c>A0zk3uaVD`&yg>Z-y~lqUnRd?eusRW{7*%g zB1#dh7_3NEq$tu9TNE!T4l9l*jw(J^e5v?GNtB_=FlD&1kJ6>AQ#L6lE3Z;st(>9! zUWHWsRMD!-RDvo_HAI!9nxdMjnyp%>TBKT{`b~}1QR)HeLF!m_ygEUhte&Hur(U97 zpS(B|9rZH(sG-VoxW`t&xW{jp*^OR;f-74Mfx^=qyb(?itb=!4M=$_I&qmR)K z)W_@7^ci}&{yzOy{Vx4({a*b6{UQDP`j7M{^q=TIH{=M zC1jbh3bKl_O0vqb?#Q|`Yh%{dtVgpR%T{DtvWI7n%C60>&u++W%$}6}RQ8VSm$Ki; z-j}^UrzB@&PE(FIrz2-t&eb_Ha%Sbcne$f8k(?7bpX7WtZ1S*W!!``tG;GVTZNs(? zdt%trxjl1x<@V3LJXgq#%UzMXK6hL0cjmsB`%>=9c}aP>dHH!oc~yDNyqdg2 zd0*sxmG^DlFL}S`ll;*9u>A1+KKaf0-u$Wgv-9WV&olNiUT#!CbX9LO8ZE{mW0|qS zSY@m>?l3-U++*Bl+;2Q!sy5Y{+Dsj$X{PH;^Gpj(H<@lREj8U{`oVO{jLc!?aC2|- z3iBrOX7g6_Q|4#PFPQh3Uor1BzhOzYWLoqVqXm2e%RbA;mQ$9WEq_=;tv#&~)+lSV zHO6|Gb-MK$>pbfc>&@0%ZGuf>E3_5c%55WTqit8%+_niekFCkJ*Y>*YpzWybBio4r zZ^3m1%L`T%tSPv+U}M391&#w8D%+dEutQX9}My+*SB`;l9Fm z3Xc@NU-)6+M@2bBxkUv<6-8A=&Y~}hLyBXHFDn*`6N;0HhZd(5FD+hPyta5l@%_aQ zlngCVmRL&)N=i$rOGcE8Eg4@@U(!(GDcM!ByX4K1!zD*b-Y=~$onE@Q^rq5frFWFB zE4{aLQ|ac?E%s=8j6K$#Vo$SY*dMe%Z-2qQ$G*@0w*9dE1N%|?NA{1)^2&^5#bu7N z>ayWw2g*JxJ6ZO1*{QN$%Kj|p$}cGoE3YqaDEF36EuUU~P5Cbsy(=OrqAFw+LPbJF zN<~^lX2rsaMHR~{)>f>mxT`XuQeRn8X|JrR99=oCvaYhRa$;q3gehj)z?-psJ^9o vY4!4&xEgIuQB6rrMa{^XF*UB5hMLBjiD3G`gTU{)um{KP-96(`)BJw`4aDSS literal 0 HcmV?d00001 diff --git a/platforms/android/cordova/node_modules/bplist-parser/test/int64.bplist b/platforms/android/cordova/node_modules/bplist-parser/test/int64.bplist new file mode 100644 index 0000000000000000000000000000000000000000..6da9c046165aa3b5327da20d50c021b1c2474fa8 GIT binary patch literal 84 zcmYc)$jK}&F)+Bq$jrnNQk7biFTfC)nO9#K9{hA_oy; NWQ5AG!W2PieE?iB4ru@Y literal 0 HcmV?d00001 diff --git a/platforms/android/cordova/node_modules/bplist-parser/test/int64.xml b/platforms/android/cordova/node_modules/bplist-parser/test/int64.xml new file mode 100644 index 0000000..cc6cb03 --- /dev/null +++ b/platforms/android/cordova/node_modules/bplist-parser/test/int64.xml @@ -0,0 +1,10 @@ + + + + + zero + 0 + int64item + 12345678901234567890 + + diff --git a/platforms/android/cordova/node_modules/bplist-parser/test/parseTest.js b/platforms/android/cordova/node_modules/bplist-parser/test/parseTest.js new file mode 100644 index 0000000..67e7bfa --- /dev/null +++ b/platforms/android/cordova/node_modules/bplist-parser/test/parseTest.js @@ -0,0 +1,159 @@ +'use strict'; + +// tests are adapted from https://github.com/TooTallNate/node-plist + +var path = require('path'); +var nodeunit = require('nodeunit'); +var bplist = require('../'); + +module.exports = { + 'iTunes Small': function (test) { + var file = path.join(__dirname, "iTunes-small.bplist"); + var startTime1 = new Date(); + + bplist.parseFile(file, function (err, dicts) { + if (err) { + throw err; + } + + var endTime = new Date(); + console.log('Parsed "' + file + '" in ' + (endTime - startTime1) + 'ms'); + var dict = dicts[0]; + test.equal(dict['Application Version'], "9.0.3"); + test.equal(dict['Library Persistent ID'], "6F81D37F95101437"); + test.done(); + }); + }, + + 'sample1': function (test) { + var file = path.join(__dirname, "sample1.bplist"); + var startTime = new Date(); + + bplist.parseFile(file, function (err, dicts) { + if (err) { + throw err; + } + + var endTime = new Date(); + console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms'); + var dict = dicts[0]; + test.equal(dict['CFBundleIdentifier'], 'com.apple.dictionary.MySample'); + test.done(); + }); + }, + + 'sample2': function (test) { + var file = path.join(__dirname, "sample2.bplist"); + var startTime = new Date(); + + bplist.parseFile(file, function (err, dicts) { + if (err) { + throw err; + } + + var endTime = new Date(); + console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms'); + var dict = dicts[0]; + test.equal(dict['PopupMenu'][2]['Key'], "\n #import \n\n#import \n\nint main(int argc, char *argv[])\n{\n return macruby_main(\"rb_main.rb\", argc, argv);\n}\n"); + test.done(); + }); + }, + + 'airplay': function (test) { + var file = path.join(__dirname, "airplay.bplist"); + var startTime = new Date(); + + bplist.parseFile(file, function (err, dicts) { + if (err) { + throw err; + } + + var endTime = new Date(); + console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms'); + + var dict = dicts[0]; + test.equal(dict['duration'], 5555.0495000000001); + test.equal(dict['position'], 4.6269989039999997); + test.done(); + }); + }, + + 'utf16': function (test) { + var file = path.join(__dirname, "utf16.bplist"); + var startTime = new Date(); + + bplist.parseFile(file, function (err, dicts) { + if (err) { + throw err; + } + + var endTime = new Date(); + console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms'); + + var dict = dicts[0]; + test.equal(dict['CFBundleName'], 'sellStuff'); + test.equal(dict['CFBundleShortVersionString'], '2.6.1'); + test.equal(dict['NSHumanReadableCopyright'], '©2008-2012, sellStuff, Inc.'); + test.done(); + }); + }, + + 'utf16chinese': function (test) { + var file = path.join(__dirname, "utf16_chinese.plist"); + var startTime = new Date(); + + bplist.parseFile(file, function (err, dicts) { + if (err) { + throw err; + } + + var endTime = new Date(); + console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms'); + + var dict = dicts[0]; + test.equal(dict['CFBundleName'], '天翼阅读'); + test.equal(dict['CFBundleDisplayName'], '天翼阅读'); + test.done(); + }); + }, + + + + 'uid': function (test) { + var file = path.join(__dirname, "uid.bplist"); + var startTime = new Date(); + + bplist.parseFile(file, function (err, dicts) { + if (err) { + throw err; + } + + var endTime = new Date(); + console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms'); + + var dict = dicts[0]; + test.deepEqual(dict['$objects'][1]['NS.keys'], [{UID:2}, {UID:3}, {UID:4}]); + test.deepEqual(dict['$objects'][1]['NS.objects'], [{UID: 5}, {UID:6}, {UID:7}]); + test.deepEqual(dict['$top']['root'], {UID:1}); + test.done(); + }); + }, + + 'int64': function (test) { + var file = path.join(__dirname, "int64.bplist"); + var startTime = new Date(); + + bplist.parseFile(file, function (err, dicts) { + if (err) { + throw err; + } + + var endTime = new Date(); + console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms'); + var dict = dicts[0]; + test.equal(dict['zero'], '0'); + test.equal(dict['int64item'], '12345678901234567890'); + test.done(); + }); + } +}; diff --git a/platforms/android/cordova/node_modules/bplist-parser/test/sample1.bplist b/platforms/android/cordova/node_modules/bplist-parser/test/sample1.bplist new file mode 100644 index 0000000000000000000000000000000000000000..5b808ff2e4be8741f9cc0ad57263fffca75e3d2c GIT binary patch literal 605 zcmY*V&rTFE81J`=Afgm>K|tar9y~c2xEPPHBf1Gggdsu{Y|896yA7RA)9Csz=NK64SfK+yDTuheChAkufIPBT8iBI{yEfc+#If&cxk&lXUjs z+&rUm&9&7+wIv34gfi19D!YXpkts%}hg_@eP>~2UdqZf0r^x91@EUb9W8b35-C|^o zP#s2Rf@Tzm*gA-tvYF}9h)&l!%?c4A@eWw1QEpjb+`7F+4k-AnVhk$k} z&hox?Aqy1?-fL>-Xi(zj(x#J`N_qvb10El;v|q!!D+xwtubX1J*Pz$6sdPE7Gu}xq z$rxEAFUSUYPfo}u@`d~+e_;Y1!&7(#+pr7Aa0(ycGkk?_@Ev}@FF1#PqR!n)uZ|pt(tOY<*1I zyr20SI><;{2aQ&qOf$`M{D#-nO3m?|J&y*YZ*NP-C6~&63!~|pzO(-)rCa?Mp$s)R ifMYm=K3u~9MlgXXPedc4}pD6p)7M4pT|aNh~g2%*)5$ zz|_Fpz_M6SNVtKufvthPfg=Q{*bqb*g9xJ#pdLdIVGJUSF3HHs$wxu-=OyN*MnIUU z#qk2de!;$_C5cHnsVaaBL;H@M+SEWKZY=dM1~B89ELoG0)`@nGKLC^5s7+z`B(on!kQfQjel9ql#A|%BhDYS&dAFZc})Z{wq7iiEBA_(^^jQ<*9;qX2-TcH*SOCutVlkO zCESSgnGu8@cbLW!hnz621()YiV>mK1J#m*BNDVfy?}VO-k&8{Pz%(L9_r}d1cQg~v zhegVpgb_Qmw@}KMnVb@*@3yM^0uU2d44cs5T_015g0RzywND%`WSo6L;V+?D#oFn`&KK*9!RtW-VRGD_Tp_%DLs8 z={G>r5*Xa>DY?l zx)dvX6?f8CD1BfnCN)@J(K_mW?vH%oP%n9VkvYIN_77IBO}KV@T|HmO=9aVhoThWY ziHJHaiZYTi)m-Jz!Q!X#C~nc&66r zMn6X#WfgT)rv00;0FHs%pv}wtHTV|%0Dc0$foI?)_*a-0RG}!`7aZY{a3DMueii-_ zUI_n*GvX!jx>y%o@f-1xcp&~PJ{5n5N8xdJ63)T1@Ep7hm*5J#0XJX`Zo~V~f;M~z zzk}byefSG}0-wS^;otBDdZR6&iD2mXuvJ%?Z&9;=5#*@uSb6~T(>~3g+7DZ4H zyy1-(8Hsk(8GUj_beM4*M}2U3v4{^oC^)0z_{Ja)GG4}ilWa&C_hong+xh5`HEXscCNa$tGma4Z#34||FHPT zmaV9~r&8TpUA6D27hZgMytjW-S<9<<0G04)G9x9oIA2+Qp{o!TU9)B3bMw zDwc}KB-&)3hH@$f@p9KTiT7YtH%eHuhwvoPwJbm1)eU3Qs!Nv3qGThxY;8hjhG=#g znQ)>F>WO3~ts=Xio23Sb#jbNwSISP*Ox3_vmcQARr;)M?O=3r!QF^E}CR zptdW^h5>4vcaMU2ovx>-74#%gYygVPY726UjJ^t1%C?hsmR~80LwI+Ym^cr469xAo z1LcTHY=W%`Sxlj_rWC~z;DaN0_Xv3?)y$$5Rm?+bq(HE_T^2VQM!&Av;IhDVk;tS5 zgqd*Yow7Jg@Ki5Yn7XQBa}%;~zQrdvW1v%0@DA6xUO%X3N@}9D#B@>D@SxPjW0F{g zimDCPyP!ZWNumaYDIf(8ngl>1hZ%sjLeBJ68ZPID_ zRKuuKzDX8FK7ebX?;WPJ-#qE!W1L5v2_?(vFexZSJ+bCdMbgf@B8UyoCEYjTtpVJM~vGE8vL_OaJ3$?D_?(`}k<#w()+>2jfSuObt*}#? z9pFwqNF=3*OV}Fj%M%!x;VDciM5`5Hnx-m3LWtxNIRy*hLMRYQ)I;vvC0FYMZjTtEm#aV(E=C?5)-LNE}o`)K;8qL=&-Jg3);@u?g@jmN{`P$W>- z!%~M{bh=zOu!am$1IqcPC?E*&a6Bj^viwp-^9SMy6QjJ}CP=Fit61JiP;Cm9jii@N z1w(U6Ff+XaJp*t-Ak}Z%h0F$c=FP5te0J>G(viy>UEQ2N`11qq;8~bdmIVaA9ynXn& ziRLe?9A_w9Z64WZ_UQ9)cQ*9}SW+6?gFWDeHRq<3?20|s);YD8c&{|tCwV$NeV!rD zxM#QLuxG||%5&E9v*(I;zPH;edWm5Z&mr7GRsGZalb&xtny+XZCouE!qA5ouBpHbgXKTp@62W93hQAPvUjk4Hp0f(6f3c#>=^qLdx$;8zRI3t z-(yd)pR#AzU)kR{nw!U6$KA;B++uDCw~R}0_j5^ZgxksO@aTmB> YxQpB+?y{%;_`Hp`=UDUId~tvN2l=KQ%m4rY literal 0 HcmV?d00001 diff --git a/platforms/android/cordova/node_modules/brace-expansion/.npmignore b/platforms/android/cordova/node_modules/brace-expansion/.npmignore new file mode 100644 index 0000000..353546a --- /dev/null +++ b/platforms/android/cordova/node_modules/brace-expansion/.npmignore @@ -0,0 +1,3 @@ +test +.gitignore +.travis.yml diff --git a/platforms/android/cordova/node_modules/brace-expansion/README.md b/platforms/android/cordova/node_modules/brace-expansion/README.md new file mode 100644 index 0000000..1793929 --- /dev/null +++ b/platforms/android/cordova/node_modules/brace-expansion/README.md @@ -0,0 +1,122 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platforms/android/cordova/node_modules/brace-expansion/example.js b/platforms/android/cordova/node_modules/brace-expansion/example.js new file mode 100644 index 0000000..60ecfc7 --- /dev/null +++ b/platforms/android/cordova/node_modules/brace-expansion/example.js @@ -0,0 +1,8 @@ +var expand = require('./'); + +console.log(expand('http://any.org/archive{1996..1999}/vol{1..4}/part{a,b,c}.html')); +console.log(expand('http://www.numericals.com/file{1..100..10}.txt')); +console.log(expand('http://www.letters.com/file{a..z..2}.txt')); +console.log(expand('mkdir /usr/local/src/bash/{old,new,dist,bugs}')); +console.log(expand('chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}')); + diff --git a/platforms/android/cordova/node_modules/brace-expansion/index.js b/platforms/android/cordova/node_modules/brace-expansion/index.js new file mode 100644 index 0000000..932718f --- /dev/null +++ b/platforms/android/cordova/node_modules/brace-expansion/index.js @@ -0,0 +1,191 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = /^(.*,)+(.+)?$/.test(m.body); + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + diff --git a/platforms/android/cordova/node_modules/brace-expansion/package.json b/platforms/android/cordova/node_modules/brace-expansion/package.json new file mode 100644 index 0000000..d6d2f78 --- /dev/null +++ b/platforms/android/cordova/node_modules/brace-expansion/package.json @@ -0,0 +1,104 @@ +{ + "_args": [ + [ + "brace-expansion@^1.0.0", + "/Users/steveng/repo/cordova/cordova-android/node_modules/minimatch" + ] + ], + "_from": "brace-expansion@>=1.0.0 <2.0.0", + "_id": "brace-expansion@1.1.3", + "_inCache": true, + "_installable": true, + "_location": "/brace-expansion", + "_nodeVersion": "5.5.0", + "_npmOperationalInternal": { + "host": "packages-6-west.internal.npmjs.com", + "tmp": "tmp/brace-expansion-1.1.3.tgz_1455216688668_0.948847763473168" + }, + "_npmUser": { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + "_npmVersion": "3.3.12", + "_phantomChildren": {}, + "_requested": { + "name": "brace-expansion", + "raw": "brace-expansion@^1.0.0", + "rawSpec": "^1.0.0", + "scope": null, + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/minimatch" + ], + "_resolved": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz", + "_shasum": "46bff50115d47fc9ab89854abb87d98078a10991", + "_shrinkwrap": null, + "_spec": "brace-expansion@^1.0.0", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/minimatch", + "author": { + "email": "mail@juliangruber.com", + "name": "Julian Gruber", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/brace-expansion/issues" + }, + "dependencies": { + "balanced-match": "^0.3.0", + "concat-map": "0.0.1" + }, + "description": "Brace expansion as known from sh/bash", + "devDependencies": { + "tape": "4.4.0" + }, + "directories": {}, + "dist": { + "shasum": "46bff50115d47fc9ab89854abb87d98078a10991", + "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz" + }, + "gitHead": "f0da1bb668e655f67b6b2d660c6e1c19e2a6f231", + "homepage": "https://github.com/juliangruber/brace-expansion", + "keywords": [], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "juliangruber", + "email": "julian@juliangruber.com" + }, + { + "name": "isaacs", + "email": "isaacs@npmjs.com" + } + ], + "name": "brace-expansion", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "scripts": { + "gentest": "bash test/generate.sh", + "test": "tape test/*.js" + }, + "testling": { + "browsers": [ + "android-browser/4.2..latest", + "chrome/25..latest", + "chrome/canary", + "firefox/20..latest", + "firefox/nightly", + "ie/8..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "opera/12..latest", + "opera/next", + "safari/5.1..latest" + ], + "files": "test/*.js" + }, + "version": "1.1.3" +} diff --git a/platforms/android/cordova/node_modules/concat-map/.travis.yml b/platforms/android/cordova/node_modules/concat-map/.travis.yml new file mode 100644 index 0000000..f1d0f13 --- /dev/null +++ b/platforms/android/cordova/node_modules/concat-map/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/platforms/android/cordova/node_modules/concat-map/LICENSE b/platforms/android/cordova/node_modules/concat-map/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/platforms/android/cordova/node_modules/concat-map/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/concat-map/README.markdown b/platforms/android/cordova/node_modules/concat-map/README.markdown new file mode 100644 index 0000000..408f70a --- /dev/null +++ b/platforms/android/cordova/node_modules/concat-map/README.markdown @@ -0,0 +1,62 @@ +concat-map +========== + +Concatenative mapdashery. + +[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map) + +[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map) + +example +======= + +``` js +var concatMap = require('concat-map'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); +``` + +*** + +``` +[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ] +``` + +methods +======= + +``` js +var concatMap = require('concat-map') +``` + +concatMap(xs, fn) +----------------- + +Return an array of concatenated elements by calling `fn(x, i)` for each element +`x` and each index `i` in the array `xs`. + +When `fn(x, i)` returns an array, its result will be concatenated with the +result array. If `fn(x, i)` returns anything else, that value will be pushed +onto the end of the result array. + +install +======= + +With [npm](http://npmjs.org) do: + +``` +npm install concat-map +``` + +license +======= + +MIT + +notes +===== + +This module was written while sitting high above the ground in a tree. diff --git a/platforms/android/cordova/node_modules/concat-map/example/map.js b/platforms/android/cordova/node_modules/concat-map/example/map.js new file mode 100644 index 0000000..3365621 --- /dev/null +++ b/platforms/android/cordova/node_modules/concat-map/example/map.js @@ -0,0 +1,6 @@ +var concatMap = require('../'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); diff --git a/platforms/android/cordova/node_modules/concat-map/index.js b/platforms/android/cordova/node_modules/concat-map/index.js new file mode 100644 index 0000000..b29a781 --- /dev/null +++ b/platforms/android/cordova/node_modules/concat-map/index.js @@ -0,0 +1,13 @@ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; diff --git a/platforms/android/cordova/node_modules/concat-map/package.json b/platforms/android/cordova/node_modules/concat-map/package.json new file mode 100644 index 0000000..3ebe787 --- /dev/null +++ b/platforms/android/cordova/node_modules/concat-map/package.json @@ -0,0 +1,109 @@ +{ + "_args": [ + [ + "concat-map@0.0.1", + "/Users/steveng/repo/cordova/cordova-android/node_modules/brace-expansion" + ] + ], + "_from": "concat-map@0.0.1", + "_id": "concat-map@0.0.1", + "_inCache": true, + "_installable": true, + "_location": "/concat-map", + "_npmUser": { + "email": "mail@substack.net", + "name": "substack" + }, + "_npmVersion": "1.3.21", + "_phantomChildren": {}, + "_requested": { + "name": "concat-map", + "raw": "concat-map@0.0.1", + "rawSpec": "0.0.1", + "scope": null, + "spec": "0.0.1", + "type": "version" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "_shrinkwrap": null, + "_spec": "concat-map@0.0.1", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/brace-expansion", + "author": { + "email": "mail@substack.net", + "name": "James Halliday", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/node-concat-map/issues" + }, + "dependencies": {}, + "description": "concatenative mapdashery", + "devDependencies": { + "tape": "~2.4.0" + }, + "directories": { + "example": "example", + "test": "test" + }, + "dist": { + "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + }, + "homepage": "https://github.com/substack/node-concat-map", + "keywords": [ + "concat", + "concatMap", + "functional", + "higher-order", + "map" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "name": "concat-map", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/substack/node-concat-map.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "browsers": { + "chrome": [ + 10, + 22 + ], + "ff": [ + 10, + 15, + 3.5 + ], + "ie": [ + 6, + 7, + 8, + 9 + ], + "opera": [ + 12 + ], + "safari": [ + 5.1 + ] + }, + "files": "test/*.js" + }, + "version": "0.0.1" +} diff --git a/platforms/android/cordova/node_modules/concat-map/test/map.js b/platforms/android/cordova/node_modules/concat-map/test/map.js new file mode 100644 index 0000000..fdbd702 --- /dev/null +++ b/platforms/android/cordova/node_modules/concat-map/test/map.js @@ -0,0 +1,39 @@ +var concatMap = require('../'); +var test = require('tape'); + +test('empty or not', function (t) { + var xs = [ 1, 2, 3, 4, 5, 6 ]; + var ixes = []; + var ys = concatMap(xs, function (x, ix) { + ixes.push(ix); + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; + }); + t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); + t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); + t.end(); +}); + +test('always something', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('scalars', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : x; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('undefs', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function () {}); + t.same(ys, [ undefined, undefined, undefined, undefined ]); + t.end(); +}); diff --git a/platforms/android/cordova/node_modules/cordova-common/.jscs.json b/platforms/android/cordova/node_modules/cordova-common/.jscs.json new file mode 100644 index 0000000..5cc7e26 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/.jscs.json @@ -0,0 +1,24 @@ +{ + "disallowMixedSpacesAndTabs": true, + "disallowTrailingWhitespace": true, + "validateLineBreaks": "LF", + "validateIndentation": 4, + "requireLineFeedAtFileEnd": true, + + "disallowSpaceAfterPrefixUnaryOperators": true, + "disallowSpaceBeforePostfixUnaryOperators": true, + "requireSpaceAfterLineComment": true, + "requireCapitalizedConstructors": true, + + "disallowSpacesInNamedFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + + "requireSpaceAfterKeywords": [ + "if", + "else", + "for", + "while", + "do" + ] +} diff --git a/platforms/android/cordova/node_modules/cordova-common/.jshintignore b/platforms/android/cordova/node_modules/cordova-common/.jshintignore new file mode 100644 index 0000000..d606f61 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/.jshintignore @@ -0,0 +1 @@ +spec/fixtures/* diff --git a/platforms/android/cordova/node_modules/cordova-common/.npmignore b/platforms/android/cordova/node_modules/cordova-common/.npmignore new file mode 100644 index 0000000..5d14118 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/.npmignore @@ -0,0 +1,2 @@ +spec +coverage diff --git a/platforms/android/cordova/node_modules/cordova-common/.ratignore b/platforms/android/cordova/node_modules/cordova-common/.ratignore new file mode 100644 index 0000000..26f7205 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/.ratignore @@ -0,0 +1,2 @@ +fixtures +coverage diff --git a/platforms/android/cordova/node_modules/cordova-common/README.md b/platforms/android/cordova/node_modules/cordova-common/README.md new file mode 100644 index 0000000..6454481 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/README.md @@ -0,0 +1,153 @@ + + +# cordova-common +Expoeses shared functionality used by [cordova-lib](https://github.com/apache/cordova-lib/) and Cordova platforms. +## Exposed APIs + +### `events` + +Represents special instance of NodeJS EventEmitter which is intended to be used to post events to cordova-lib and cordova-cli + +Usage: +``` +var events = require('cordova-common').events; +events.emit('warn', 'Some warning message') +``` + +There are the following events supported by cordova-cli: `verbose`, `log`, `info`, `warn`, `error`. + +### `CordovaError` + +An error class used by Cordova to throw cordova-specific errors. The CordovaError class is inherited from Error, so CordovaError instances is also valid Error instances (`instanceof` check succeeds). + +Usage: + +``` +var CordovaError = require('cordova-common').CordovaError; +throw new CordovaError('Some error message', SOME_ERR_CODE); +``` + +See [CordovaError](src/CordovaError/CordovaError.js) for supported error codes. + +### `ConfigParser` + +Exposes functionality to deal with cordova project `config.xml` files. For ConfigParser API reference check [ConfigParser Readme](src/ConfigParser/README.md). + +Usage: +``` +var ConfigParser = require('cordova-common').ConfigParser; +var appConfig = new ConfigParser('path/to/cordova-app/config.xml'); +console.log(appconfig.name() + ':' + appConfig.version()); +``` + +### `PluginInfoProvider` and `PluginInfo` + +`PluginInfo` is a wrapper for cordova plugins' `plugin.xml` files. This class may be instantiated directly or via `PluginInfoProvider`. The difference is that `PluginInfoProvider` caches `PluginInfo` instances based on plugin source directory. + +Usage: +``` +var PluginInfo: require('cordova-common').PluginInfo; +var PluginInfoProvider: require('cordova-common').PluginInfoProvider; + +// The following instances are equal +var plugin1 = new PluginInfo('path/to/plugin_directory'); +var plugin2 = new PluginInfoProvider().get('path/to/plugin_directory'); + +console.log('The plugin ' + plugin1.id + ' has version ' + plugin1.version) +``` + +### `ActionStack` + +Utility module for dealing with sequential tasks. Provides a set of tasks that are needed to be done and reverts all tasks that are already completed if one of those tasks fail to complete. Used internally by cordova-lib and platform's plugin installation routines. + +Usage: +``` +var ActionStack = require('cordova-common').ActionStack; +var stack = new ActionStack() + +var action1 = stack.createAction(task1, [], task1_reverter, []); +var action2 = stack.createAction(task2, [], task2_reverter, []); + +stack.push(action1); +stack.push(action2); + +stack.process() +.then(function() { + // all actions succeded +}) +.catch(function(error){ + // One of actions failed with error +}) +``` + +### `superspawn` + +Module for spawning child processes with some advanced logic. + +Usage: +``` +var superspawn = require('cordova-common').superspawn; +superspawn.spawn('adb', ['devices']) +.progress(function(data){ + if (data.stderr) + console.error('"adb devices" raised an error: ' + data.stderr); +}) +.then(function(devices){ + // Do something... +}) +``` + +### `xmlHelpers` + +A set of utility methods for dealing with xml files. + +Usage: +``` +var xml = require('cordova-common').xmlHelpers; + +var xmlDoc1 = xml.parseElementtreeSync('some/xml/file'); +var xmlDoc2 = xml.parseElementtreeSync('another/xml/file'); + +xml.mergeXml(doc1, doc2); // doc2 now contains all the nodes from doc1 +``` + +### Other APIs + +The APIs listed below are also exposed but are intended to be only used internally by cordova plugin installation routines. + +``` +PlatformJson +ConfigChanges +ConfigKeeper +ConfigFile +mungeUtil +``` + +## Setup +* Clone this repository onto your local machine + `git clone https://git-wip-us.apache.org/repos/asf/cordova-lib.git` +* In terminal, navigate to the inner cordova-common directory + `cd cordova-lib/cordova-common` +* Install dependencies and npm-link + `npm install && npm link` +* Navigate to cordova-lib directory and link cordova-common + `cd ../cordova-lib && npm link cordova-common && npm install` diff --git a/platforms/android/cordova/node_modules/cordova-common/RELEASENOTES.md b/platforms/android/cordova/node_modules/cordova-common/RELEASENOTES.md new file mode 100644 index 0000000..e7db69c --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/RELEASENOTES.md @@ -0,0 +1,42 @@ + +# Cordova-common Release Notes + +### 1.1.0 (Feb 16, 2016) +* CB-10482 Remove references to windows8 from cordova-lib/cli +* CB-10430 Adds forwardEvents method to easily connect two EventEmitters +* CB-10176 Adds CordovaLogger class, based on logger module from cordova-cli +* CB-10052 Expose child process' io streams via promise progress notification +* CB-10497 Prefer .bat over .cmd on windows platform +* CB-9984 Bumps plist version and fixes failing cordova-common test + +### 1.0.0 (Oct 29, 2015) + +* CB-9890 Documents cordova-common +* CB-9598 Correct cordova-lib -> cordova-common in README +* Pick ConfigParser changes from apache@0c3614e +* CB-9743 Removes system frameworks handling from ConfigChanges +* CB-9598 Cleans out code which has been moved to `cordova-common` +* Pick ConfigParser changes from apache@ddb027b +* Picking CordovaError changes from apache@a3b1fca +* CB-9598 Adds tests and fixtures based on existing cordova-lib ones +* CB-9598 Initial implementation for cordova-common + diff --git a/platforms/android/cordova/node_modules/cordova-common/cordova-common.js b/platforms/android/cordova/node_modules/cordova-common/cordova-common.js new file mode 100644 index 0000000..22e90a7 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/cordova-common.js @@ -0,0 +1,43 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/* jshint node:true */ + +// For now expose plugman and cordova just as they were in the old repos +exports = module.exports = { + events: require('./src/events'), + superspawn: require('./src/superspawn'), + + ActionStack: require('./src/ActionStack'), + CordovaError: require('./src/CordovaError/CordovaError'), + CordovaLogger: require('./src/CordovaLogger'), + CordovaExternalToolErrorContext: require('./src/CordovaError/CordovaExternalToolErrorContext'), + PlatformJson: require('./src/PlatformJson'), + ConfigParser: require('./src/ConfigParser/ConfigParser.js'), + + PluginInfo: require('./src/PluginInfo/PluginInfo.js'), + PluginInfoProvider: require('./src/PluginInfo/PluginInfoProvider.js'), + + ConfigChanges: require('./src/ConfigChanges/ConfigChanges.js'), + ConfigKeeper: require('./src/ConfigChanges/ConfigKeeper.js'), + ConfigFile: require('./src/ConfigChanges/ConfigFile.js'), + mungeUtil: require('./src/ConfigChanges/munge-util.js'), + + xmlHelpers: require('./src/util/xml-helpers') +}; diff --git a/platforms/android/cordova/node_modules/cordova-common/package.json b/platforms/android/cordova/node_modules/cordova-common/package.json new file mode 100644 index 0000000..4bd1675 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/package.json @@ -0,0 +1,119 @@ +{ + "_args": [ + [ + "cordova-common@^1.1.0", + "/Users/steveng/repo/cordova/cordova-android" + ] + ], + "_from": "cordova-common@>=1.1.0 <2.0.0", + "_id": "cordova-common@1.1.0", + "_inCache": true, + "_installable": true, + "_location": "/cordova-common", + "_nodeVersion": "4.2.3", + "_npmOperationalInternal": { + "host": "packages-5-east.internal.npmjs.com", + "tmp": "tmp/cordova-common-1.1.0.tgz_1455781889491_0.6937742941081524" + }, + "_npmUser": { + "email": "kotikov.vladimir@gmail.com", + "name": "kotikov.vladimir" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "name": "cordova-common", + "raw": "cordova-common@^1.1.0", + "rawSpec": "^1.1.0", + "scope": null, + "spec": ">=1.1.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "http://registry.npmjs.org/cordova-common/-/cordova-common-1.1.0.tgz", + "_shasum": "8682721466ee354747ec6241f34f412b7e0ef636", + "_shrinkwrap": null, + "_spec": "cordova-common@^1.1.0", + "_where": "/Users/steveng/repo/cordova/cordova-android", + "author": { + "name": "Apache Software Foundation" + }, + "bugs": { + "email": "dev@cordova.apache.org", + "url": "https://issues.apache.org/jira/browse/CB" + }, + "contributors": [], + "dependencies": { + "ansi": "^0.3.1", + "bplist-parser": "^0.1.0", + "cordova-registry-mapper": "^1.1.8", + "elementtree": "^0.1.6", + "glob": "^5.0.13", + "osenv": "^0.1.3", + "plist": "^1.2.0", + "q": "^1.4.1", + "semver": "^5.0.1", + "shelljs": "^0.5.1", + "underscore": "^1.8.3", + "unorm": "^1.3.3" + }, + "description": "Apache Cordova tools and platforms shared routines", + "devDependencies": { + "istanbul": "^0.3.17", + "jasmine-node": "^1.14.5", + "jshint": "^2.8.0" + }, + "directories": {}, + "dist": { + "shasum": "8682721466ee354747ec6241f34f412b7e0ef636", + "tarball": "http://registry.npmjs.org/cordova-common/-/cordova-common-1.1.0.tgz" + }, + "engineStrict": true, + "engines": { + "node": ">=0.9.9" + }, + "license": "Apache-2.0", + "main": "cordova-common.js", + "maintainers": [ + { + "name": "bowserj", + "email": "bowserj@apache.org" + }, + { + "name": "kotikov.vladimir", + "email": "kotikov.vladimir@gmail.com" + }, + { + "name": "purplecabbage", + "email": "purplecabbage@gmail.com" + }, + { + "name": "shazron", + "email": "shazron@gmail.com" + }, + { + "name": "stevegill", + "email": "stevengill97@gmail.com" + }, + { + "name": "timbarham", + "email": "npmjs@barhams.info" + } + ], + "name": "cordova-common", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://git-wip-us.apache.org/repos/asf/cordova-common.git" + }, + "scripts": { + "cover": "node node_modules/istanbul/lib/cli.js cover --root src --print detail node_modules/jasmine-node/bin/jasmine-node -- spec", + "jasmine": "node node_modules/jasmine-node/bin/jasmine-node --captureExceptions --color spec", + "jshint": "node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint spec", + "test": "npm run jshint && npm run jasmine" + }, + "version": "1.1.0" +} diff --git a/platforms/android/cordova/node_modules/cordova-common/src/.jshintrc b/platforms/android/cordova/node_modules/cordova-common/src/.jshintrc new file mode 100644 index 0000000..89a121c --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/.jshintrc @@ -0,0 +1,10 @@ +{ + "node": true + , "bitwise": true + , "undef": true + , "trailing": true + , "quotmark": true + , "indent": 4 + , "unused": "vars" + , "latedef": "nofunc" +} diff --git a/platforms/android/cordova/node_modules/cordova-common/src/ActionStack.js b/platforms/android/cordova/node_modules/cordova-common/src/ActionStack.js new file mode 100644 index 0000000..5ef6f84 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/ActionStack.js @@ -0,0 +1,85 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/* jshint quotmark:false */ + +var events = require('./events'), + Q = require('q'); + +function ActionStack() { + this.stack = []; + this.completed = []; +} + +ActionStack.prototype = { + createAction:function(handler, action_params, reverter, revert_params) { + return { + handler:{ + run:handler, + params:action_params + }, + reverter:{ + run:reverter, + params:revert_params + } + }; + }, + push:function(tx) { + this.stack.push(tx); + }, + // Returns a promise. + process:function(platform) { + events.emit('verbose', 'Beginning processing of action stack for ' + platform + ' project...'); + + while (this.stack.length) { + var action = this.stack.shift(); + var handler = action.handler.run; + var action_params = action.handler.params; + + try { + handler.apply(null, action_params); + } catch(e) { + events.emit('warn', 'Error during processing of action! Attempting to revert...'); + this.stack.unshift(action); + var issue = 'Uh oh!\n'; + // revert completed tasks + while(this.completed.length) { + var undo = this.completed.shift(); + var revert = undo.reverter.run; + var revert_params = undo.reverter.params; + + try { + revert.apply(null, revert_params); + } catch(err) { + events.emit('warn', 'Error during reversion of action! We probably really messed up your project now, sorry! D:'); + issue += 'A reversion action failed: ' + err.message + '\n'; + } + } + e.message = issue + e.message; + return Q.reject(e); + } + this.completed.push(action); + } + events.emit('verbose', 'Action stack processing complete.'); + + return Q(); + } +}; + +module.exports = ActionStack; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js b/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js new file mode 100644 index 0000000..a914fc8 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js @@ -0,0 +1,323 @@ +/* + * + * Copyright 2013 Anis Kadri + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* + * This module deals with shared configuration / dependency "stuff". That is: + * - XML configuration files such as config.xml, AndroidManifest.xml or WMAppManifest.xml. + * - plist files in iOS + * Essentially, any type of shared resources that we need to handle with awareness + * of how potentially multiple plugins depend on a single shared resource, should be + * handled in this module. + * + * The implementation uses an object as a hash table, with "leaves" of the table tracking + * reference counts. + */ + +/* jshint sub:true */ + +var fs = require('fs'), + path = require('path'), + et = require('elementtree'), + semver = require('semver'), + events = require('../events'), + ConfigKeeper = require('./ConfigKeeper'); + +var mungeutil = require('./munge-util'); + +exports.PlatformMunger = PlatformMunger; + +exports.process = function(plugins_dir, project_dir, platform, platformJson, pluginInfoProvider) { + var munger = new PlatformMunger(platform, project_dir, platformJson, pluginInfoProvider); + munger.process(plugins_dir); + munger.save_all(); +}; + +/****************************************************************************** +* PlatformMunger class +* +* Can deal with config file of a single project. +* Parsed config files are cached in a ConfigKeeper object. +******************************************************************************/ +function PlatformMunger(platform, project_dir, platformJson, pluginInfoProvider) { + this.platform = platform; + this.project_dir = project_dir; + this.config_keeper = new ConfigKeeper(project_dir); + this.platformJson = platformJson; + this.pluginInfoProvider = pluginInfoProvider; +} + +// Write out all unsaved files. +PlatformMunger.prototype.save_all = PlatformMunger_save_all; +function PlatformMunger_save_all() { + this.config_keeper.save_all(); + this.platformJson.save(); +} + +// Apply a munge object to a single config file. +// The remove parameter tells whether to add the change or remove it. +PlatformMunger.prototype.apply_file_munge = PlatformMunger_apply_file_munge; +function PlatformMunger_apply_file_munge(file, munge, remove) { + var self = this; + + for (var selector in munge.parents) { + for (var xml_child in munge.parents[selector]) { + // this xml child is new, graft it (only if config file exists) + var config_file = self.config_keeper.get(self.project_dir, self.platform, file); + if (config_file.exists) { + if (remove) config_file.prune_child(selector, munge.parents[selector][xml_child]); + else config_file.graft_child(selector, munge.parents[selector][xml_child]); + } + } + } +} + + +PlatformMunger.prototype.remove_plugin_changes = remove_plugin_changes; +function remove_plugin_changes(pluginInfo, is_top_level) { + var self = this; + var platform_config = self.platformJson.root; + var plugin_vars = is_top_level ? + platform_config.installed_plugins[pluginInfo.id] : + platform_config.dependent_plugins[pluginInfo.id]; + + // get config munge, aka how did this plugin change various config files + var config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars); + // global munge looks at all plugins' changes to config files + var global_munge = platform_config.config_munge; + var munge = mungeutil.decrement_munge(global_munge, config_munge); + + for (var file in munge.files) { + // CB-6976 Windows Universal Apps. Compatibility fix for existing plugins. + if (self.platform == 'windows' && file == 'package.appxmanifest' && + !fs.existsSync(path.join(self.project_dir, 'package.appxmanifest'))) { + // New windows template separate manifest files for Windows10, Windows8.1 and WP8.1 + var substs = ['package.phone.appxmanifest', 'package.windows.appxmanifest', 'package.windows10.appxmanifest']; + /* jshint loopfunc:true */ + substs.forEach(function(subst) { + events.emit('verbose', 'Applying munge to ' + subst); + self.apply_file_munge(subst, munge.files[file], true); + }); + /* jshint loopfunc:false */ + } + self.apply_file_munge(file, munge.files[file], /* remove = */ true); + } + + // Remove from installed_plugins + self.platformJson.removePlugin(pluginInfo.id, is_top_level); + return self; +} + + +PlatformMunger.prototype.add_plugin_changes = add_plugin_changes; +function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increment) { + var self = this; + var platform_config = self.platformJson.root; + + // get config munge, aka how should this plugin change various config files + var config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars); + // global munge looks at all plugins' changes to config files + + // TODO: The should_increment param is only used by cordova-cli and is going away soon. + // If should_increment is set to false, avoid modifying the global_munge (use clone) + // and apply the entire config_munge because it's already a proper subset of the global_munge. + var munge, global_munge; + if (should_increment) { + global_munge = platform_config.config_munge; + munge = mungeutil.increment_munge(global_munge, config_munge); + } else { + global_munge = mungeutil.clone_munge(platform_config.config_munge); + munge = config_munge; + } + + for (var file in munge.files) { + // CB-6976 Windows Universal Apps. Compatibility fix for existing plugins. + if (self.platform == 'windows' && file == 'package.appxmanifest' && + !fs.existsSync(path.join(self.project_dir, 'package.appxmanifest'))) { + var substs = ['package.phone.appxmanifest', 'package.windows.appxmanifest', 'package.windows10.appxmanifest']; + /* jshint loopfunc:true */ + substs.forEach(function(subst) { + events.emit('verbose', 'Applying munge to ' + subst); + self.apply_file_munge(subst, munge.files[file]); + }); + /* jshint loopfunc:false */ + } + self.apply_file_munge(file, munge.files[file]); + } + + // Move to installed/dependent_plugins + self.platformJson.addPlugin(pluginInfo.id, plugin_vars || {}, is_top_level); + return self; +} + + +// Load the global munge from platform json and apply all of it. +// Used by cordova prepare to re-generate some config file from platform +// defaults and the global munge. +PlatformMunger.prototype.reapply_global_munge = reapply_global_munge ; +function reapply_global_munge () { + var self = this; + + var platform_config = self.platformJson.root; + var global_munge = platform_config.config_munge; + for (var file in global_munge.files) { + self.apply_file_munge(file, global_munge.files[file]); + } + + return self; +} + + +// generate_plugin_config_munge +// Generate the munge object from plugin.xml + vars +PlatformMunger.prototype.generate_plugin_config_munge = generate_plugin_config_munge; +function generate_plugin_config_munge(pluginInfo, vars) { + var self = this; + + vars = vars || {}; + var munge = { files: {} }; + var changes = pluginInfo.getConfigFiles(self.platform); + + // Demux 'package.appxmanifest' into relevant platform-specific appx manifests. + // Only spend the cycles if there are version-specific plugin settings + if (self.platform === 'windows' && + changes.some(function(change) { + return ((typeof change.versions !== 'undefined') || + (typeof change.deviceTarget !== 'undefined')); + })) + { + var manifests = { + 'windows': { + '8.1.0': 'package.windows.appxmanifest', + '10.0.0': 'package.windows10.appxmanifest' + }, + 'phone': { + '8.1.0': 'package.phone.appxmanifest', + '10.0.0': 'package.windows10.appxmanifest' + }, + 'all': { + '8.1.0': ['package.windows.appxmanifest', 'package.phone.appxmanifest'], + '10.0.0': 'package.windows10.appxmanifest' + } + }; + + var oldChanges = changes; + changes = []; + + oldChanges.forEach(function(change, changeIndex) { + // Only support semver/device-target demux for package.appxmanifest + // Pass through in case something downstream wants to use it + if (change.target !== 'package.appxmanifest') { + changes.push(change); + return; + } + + var hasVersion = (typeof change.versions !== 'undefined'); + var hasTargets = (typeof change.deviceTarget !== 'undefined'); + + // No semver/device-target for this config-file, pass it through + if (!(hasVersion || hasTargets)) { + changes.push(change); + return; + } + + var targetDeviceSet = hasTargets ? change.deviceTarget : 'all'; + if (['windows', 'phone', 'all'].indexOf(targetDeviceSet) === -1) { + // target-device couldn't be resolved, fix it up here to a valid value + targetDeviceSet = 'all'; + } + var knownWindowsVersionsForTargetDeviceSet = Object.keys(manifests[targetDeviceSet]); + + // at this point, 'change' targets package.appxmanifest and has a version attribute + knownWindowsVersionsForTargetDeviceSet.forEach(function(winver) { + // This is a local function that creates the new replacement representing the + // mutation. Used to save code further down. + var createReplacement = function(manifestFile, originalChange) { + var replacement = { + target: manifestFile, + parent: originalChange.parent, + after: originalChange.after, + xmls: originalChange.xmls, + versions: originalChange.versions, + deviceTarget: originalChange.deviceTarget + }; + return replacement; + }; + + // version doesn't satisfy, so skip + if (hasVersion && !semver.satisfies(winver, change.versions)) { + return; + } + + var versionSpecificManifests = manifests[targetDeviceSet][winver]; + if (versionSpecificManifests.constructor === Array) { + // e.g. all['8.1.0'] === ['pkg.windows.appxmanifest', 'pkg.phone.appxmanifest'] + versionSpecificManifests.forEach(function(manifestFile) { + changes.push(createReplacement(manifestFile, change)); + }); + } + else { + // versionSpecificManifests is actually a single string + changes.push(createReplacement(versionSpecificManifests, change)); + } + }); + }); + } + + changes.forEach(function(change) { + change.xmls.forEach(function(xml) { + // 1. stringify each xml + var stringified = (new et.ElementTree(xml)).write({xml_declaration:false}); + // interp vars + if (vars) { + Object.keys(vars).forEach(function(key) { + var regExp = new RegExp('\\$' + key, 'g'); + stringified = stringified.replace(regExp, vars[key]); + }); + } + // 2. add into munge + mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after }); + }); + }); + return munge; +} + +// Go over the prepare queue and apply the config munges for each plugin +// that has been (un)installed. +PlatformMunger.prototype.process = PlatformMunger_process; +function PlatformMunger_process(plugins_dir) { + var self = this; + var platform_config = self.platformJson.root; + + // Uninstallation first + platform_config.prepare_queue.uninstalled.forEach(function(u) { + var pluginInfo = self.pluginInfoProvider.get(path.join(plugins_dir, u.plugin)); + self.remove_plugin_changes(pluginInfo, u.topLevel); + }); + + // Now handle installation + platform_config.prepare_queue.installed.forEach(function(u) { + var pluginInfo = self.pluginInfoProvider.get(path.join(plugins_dir, u.plugin)); + self.add_plugin_changes(pluginInfo, u.vars, u.topLevel, true); + }); + + // Empty out installed/ uninstalled queues. + platform_config.prepare_queue.uninstalled = []; + platform_config.prepare_queue.installed = []; +} +/**** END of PlatformMunger ****/ diff --git a/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js b/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js new file mode 100644 index 0000000..dd9ebbc --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js @@ -0,0 +1,208 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +var fs = require('fs'); +var path = require('path'); + +var bplist = require('bplist-parser'); +var et = require('elementtree'); +var glob = require('glob'); +var plist = require('plist'); + +var plist_helpers = require('../util/plist-helpers'); +var xml_helpers = require('../util/xml-helpers'); + +/****************************************************************************** +* ConfigFile class +* +* Can load and keep various types of config files. Provides some functionality +* specific to some file types such as grafting XML children. In most cases it +* should be instantiated by ConfigKeeper. +* +* For plugin.xml files use as: +* plugin_config = self.config_keeper.get(plugin_dir, '', 'plugin.xml'); +* +* TODO: Consider moving it out to a separate file and maybe partially with +* overrides in platform handlers. +******************************************************************************/ +function ConfigFile(project_dir, platform, file_tag) { + this.project_dir = project_dir; + this.platform = platform; + this.file_tag = file_tag; + this.is_changed = false; + + this.load(); +} + +// ConfigFile.load() +ConfigFile.prototype.load = ConfigFile_load; +function ConfigFile_load() { + var self = this; + + // config file may be in a place not exactly specified in the target + var filepath = self.filepath = resolveConfigFilePath(self.project_dir, self.platform, self.file_tag); + + if ( !filepath || !fs.existsSync(filepath) ) { + self.exists = false; + return; + } + self.exists = true; + self.mtime = fs.statSync(self.filepath).mtime; + + var ext = path.extname(filepath); + // Windows8 uses an appxmanifest, and wp8 will likely use + // the same in a future release + if (ext == '.xml' || ext == '.appxmanifest') { + self.type = 'xml'; + self.data = xml_helpers.parseElementtreeSync(filepath); + } else { + // plist file + self.type = 'plist'; + // TODO: isBinaryPlist() reads the file and then parse re-reads it again. + // We always write out text plist, not binary. + // Do we still need to support binary plist? + // If yes, use plist.parseStringSync() and read the file once. + self.data = isBinaryPlist(filepath) ? + bplist.parseBuffer(fs.readFileSync(filepath)) : + plist.parse(fs.readFileSync(filepath, 'utf8')); + } +} + +ConfigFile.prototype.save = function ConfigFile_save() { + var self = this; + if (self.type === 'xml') { + fs.writeFileSync(self.filepath, self.data.write({indent: 4}), 'utf-8'); + } else { + // plist + var regExp = new RegExp('[ \t\r\n]+?', 'g'); + fs.writeFileSync(self.filepath, plist.build(self.data).replace(regExp, '')); + } + self.is_changed = false; +}; + +ConfigFile.prototype.graft_child = function ConfigFile_graft_child(selector, xml_child) { + var self = this; + var filepath = self.filepath; + var result; + if (self.type === 'xml') { + var xml_to_graft = [et.XML(xml_child.xml)]; + result = xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after); + if ( !result) { + throw new Error('grafting xml at selector "' + selector + '" from "' + filepath + '" during config install went bad :('); + } + } else { + // plist file + result = plist_helpers.graftPLIST(self.data, xml_child.xml, selector); + if ( !result ) { + throw new Error('grafting to plist "' + filepath + '" during config install went bad :('); + } + } + self.is_changed = true; +}; + +ConfigFile.prototype.prune_child = function ConfigFile_prune_child(selector, xml_child) { + var self = this; + var filepath = self.filepath; + var result; + if (self.type === 'xml') { + var xml_to_graft = [et.XML(xml_child.xml)]; + result = xml_helpers.pruneXML(self.data, xml_to_graft, selector); + } else { + // plist file + result = plist_helpers.prunePLIST(self.data, xml_child.xml, selector); + } + if (!result) { + var err_msg = 'Pruning at selector "' + selector + '" from "' + filepath + '" went bad.'; + throw new Error(err_msg); + } + self.is_changed = true; +}; + +// Some config-file target attributes are not qualified with a full leading directory, or contain wildcards. +// Resolve to a real path in this function. +// TODO: getIOSProjectname is slow because of glob, try to avoid calling it several times per project. +function resolveConfigFilePath(project_dir, platform, file) { + var filepath = path.join(project_dir, file); + var matches; + + if (file.indexOf('*') > -1) { + // handle wildcards in targets using glob. + matches = glob.sync(path.join(project_dir, '**', file)); + if (matches.length) filepath = matches[0]; + + // [CB-5989] multiple Info.plist files may exist. default to $PROJECT_NAME-Info.plist + if(matches.length > 1 && file.indexOf('-Info.plist')>-1){ + var plistName = getIOSProjectname(project_dir)+'-Info.plist'; + for (var i=0; i < matches.length; i++) { + if(matches[i].indexOf(plistName) > -1){ + filepath = matches[i]; + break; + } + } + } + return filepath; + } + + // special-case config.xml target that is just "config.xml". This should be resolved to the real location of the file. + // TODO: move the logic that contains the locations of config.xml from cordova CLI into plugman. + if (file == 'config.xml') { + if (platform == 'ubuntu') { + filepath = path.join(project_dir, 'config.xml'); + } else if (platform == 'ios') { + var iospath = getIOSProjectname(project_dir); + filepath = path.join(project_dir,iospath, 'config.xml'); + } else if (platform == 'android') { + filepath = path.join(project_dir, 'res', 'xml', 'config.xml'); + } else { + matches = glob.sync(path.join(project_dir, '**', 'config.xml')); + if (matches.length) filepath = matches[0]; + } + return filepath; + } + + // None of the special cases matched, returning project_dir/file. + return filepath; +} + +// Find out the real name of an iOS project +// TODO: glob is slow, need a better way or caching, or avoid using more than once. +function getIOSProjectname(project_dir) { + var matches = glob.sync(path.join(project_dir, '*.xcodeproj')); + var iospath; + if (matches.length === 1) { + iospath = path.basename(matches[0],'.xcodeproj'); + } else { + var msg; + if (matches.length === 0) { + msg = 'Does not appear to be an xcode project, no xcode project file in ' + project_dir; + } else { + msg = 'There are multiple *.xcodeproj dirs in ' + project_dir; + } + throw new Error(msg); + } + return iospath; +} + +// determine if a plist file is binary +function isBinaryPlist(filename) { + // I wish there was a synchronous way to read only the first 6 bytes of a + // file. This is wasteful :/ + var buf = '' + fs.readFileSync(filename, 'utf8'); + // binary plists start with a magic header, "bplist" + return buf.substring(0, 6) === 'bplist'; +} + +module.exports = ConfigFile; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js b/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js new file mode 100644 index 0000000..894e922 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js @@ -0,0 +1,65 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ +/* jshint sub:true */ + +var path = require('path'); +var ConfigFile = require('./ConfigFile'); + +/****************************************************************************** +* ConfigKeeper class +* +* Used to load and store config files to avoid re-parsing and writing them out +* multiple times. +* +* The config files are referred to by a fake path constructed as +* project_dir/platform/file +* where file is the name used for the file in config munges. +******************************************************************************/ +function ConfigKeeper(project_dir, plugins_dir) { + this.project_dir = project_dir; + this.plugins_dir = plugins_dir; + this._cached = {}; +} + +ConfigKeeper.prototype.get = function ConfigKeeper_get(project_dir, platform, file) { + var self = this; + + // This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml + // https://issues.apache.org/jira/browse/CB-6414 + if(file == 'config.xml' && platform == 'android'){ + file = 'res/xml/config.xml'; + } + var fake_path = path.join(project_dir, platform, file); + + if (self._cached[fake_path]) { + return self._cached[fake_path]; + } + // File was not cached, need to load. + var config_file = new ConfigFile(project_dir, platform, file); + self._cached[fake_path] = config_file; + return config_file; +}; + + +ConfigKeeper.prototype.save_all = function ConfigKeeper_save_all() { + var self = this; + Object.keys(self._cached).forEach(function (fake_path) { + var config_file = self._cached[fake_path]; + if (config_file.is_changed) config_file.save(); + }); +}; + +module.exports = ConfigKeeper; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/munge-util.js b/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/munge-util.js new file mode 100644 index 0000000..307b3c1 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/ConfigChanges/munge-util.js @@ -0,0 +1,160 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ +/* jshint sub:true */ + +var _ = require('underscore'); + +// add the count of [key1][key2]...[keyN] to obj +// return true if it didn't exist before +exports.deep_add = function deep_add(obj, keys /* or key1, key2 .... */ ) { + if ( !Array.isArray(keys) ) { + keys = Array.prototype.slice.call(arguments, 1); + } + + return exports.process_munge(obj, true/*createParents*/, function (parentArray, k) { + var found = _.find(parentArray, function(element) { + return element.xml == k.xml; + }); + if (found) { + found.after = found.after || k.after; + found.count += k.count; + } else { + parentArray.push(k); + } + return !found; + }, keys); +}; + +// decrement the count of [key1][key2]...[keyN] from obj and remove if it reaches 0 +// return true if it was removed or not found +exports.deep_remove = function deep_remove(obj, keys /* or key1, key2 .... */ ) { + if ( !Array.isArray(keys) ) { + keys = Array.prototype.slice.call(arguments, 1); + } + + var result = exports.process_munge(obj, false/*createParents*/, function (parentArray, k) { + var index = -1; + var found = _.find(parentArray, function (element) { + index++; + return element.xml == k.xml; + }); + if (found) { + found.count -= k.count; + if (found.count > 0) { + return false; + } + else { + parentArray.splice(index, 1); + } + } + return undefined; + }, keys); + + return typeof result === 'undefined' ? true : result; +}; + +// search for [key1][key2]...[keyN] +// return the object or undefined if not found +exports.deep_find = function deep_find(obj, keys /* or key1, key2 .... */ ) { + if ( !Array.isArray(keys) ) { + keys = Array.prototype.slice.call(arguments, 1); + } + + return exports.process_munge(obj, false/*createParents?*/, function (parentArray, k) { + return _.find(parentArray, function (element) { + return element.xml == (k.xml || k); + }); + }, keys); +}; + +// Execute func passing it the parent array and the xmlChild key. +// When createParents is true, add the file and parent items they are missing +// When createParents is false, stop and return undefined if the file and/or parent items are missing + +exports.process_munge = function process_munge(obj, createParents, func, keys /* or key1, key2 .... */ ) { + if ( !Array.isArray(keys) ) { + keys = Array.prototype.slice.call(arguments, 1); + } + var k = keys[0]; + if (keys.length == 1) { + return func(obj, k); + } else if (keys.length == 2) { + if (!obj.parents[k] && !createParents) { + return undefined; + } + obj.parents[k] = obj.parents[k] || []; + return exports.process_munge(obj.parents[k], createParents, func, keys.slice(1)); + } else if (keys.length == 3){ + if (!obj.files[k] && !createParents) { + return undefined; + } + obj.files[k] = obj.files[k] || { parents: {} }; + return exports.process_munge(obj.files[k], createParents, func, keys.slice(1)); + } else { + throw new Error('Invalid key format. Must contain at most 3 elements (file, parent, xmlChild).'); + } +}; + +// All values from munge are added to base as +// base[file][selector][child] += munge[file][selector][child] +// Returns a munge object containing values that exist in munge +// but not in base. +exports.increment_munge = function increment_munge(base, munge) { + var diff = { files: {} }; + + for (var file in munge.files) { + for (var selector in munge.files[file].parents) { + for (var xml_child in munge.files[file].parents[selector]) { + var val = munge.files[file].parents[selector][xml_child]; + // if node not in base, add it to diff and base + // else increment it's value in base without adding to diff + var newlyAdded = exports.deep_add(base, [file, selector, val]); + if (newlyAdded) { + exports.deep_add(diff, file, selector, val); + } + } + } + } + return diff; +}; + +// Update the base munge object as +// base[file][selector][child] -= munge[file][selector][child] +// nodes that reached zero value are removed from base and added to the returned munge +// object. +exports.decrement_munge = function decrement_munge(base, munge) { + var zeroed = { files: {} }; + + for (var file in munge.files) { + for (var selector in munge.files[file].parents) { + for (var xml_child in munge.files[file].parents[selector]) { + var val = munge.files[file].parents[selector][xml_child]; + // if node not in base, add it to diff and base + // else increment it's value in base without adding to diff + var removed = exports.deep_remove(base, [file, selector, val]); + if (removed) { + exports.deep_add(zeroed, file, selector, val); + } + } + } + } + return zeroed; +}; + +// For better readability where used +exports.clone_munge = function clone_munge(munge) { + return exports.increment_munge({}, munge); +}; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/ConfigParser/ConfigParser.js b/platforms/android/cordova/node_modules/cordova-common/src/ConfigParser/ConfigParser.js new file mode 100644 index 0000000..7abddf6 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/ConfigParser/ConfigParser.js @@ -0,0 +1,499 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/* jshint sub:true */ + +var et = require('elementtree'), + xml= require('../util/xml-helpers'), + CordovaError = require('../CordovaError/CordovaError'), + fs = require('fs'), + events = require('../events'); + + +/** Wraps a config.xml file */ +function ConfigParser(path) { + this.path = path; + try { + this.doc = xml.parseElementtreeSync(path); + this.cdvNamespacePrefix = getCordovaNamespacePrefix(this.doc); + et.register_namespace(this.cdvNamespacePrefix, 'http://cordova.apache.org/ns/1.0'); + } catch (e) { + console.error('Parsing '+path+' failed'); + throw e; + } + var r = this.doc.getroot(); + if (r.tag !== 'widget') { + throw new CordovaError(path + ' has incorrect root node name (expected "widget", was "' + r.tag + '")'); + } +} + +function getNodeTextSafe(el) { + return el && el.text && el.text.trim(); +} + +function findOrCreate(doc, name) { + var ret = doc.find(name); + if (!ret) { + ret = new et.Element(name); + doc.getroot().append(ret); + } + return ret; +} + +function getCordovaNamespacePrefix(doc){ + var rootAtribs = Object.getOwnPropertyNames(doc.getroot().attrib); + var prefix = 'cdv'; + for (var j = 0; j < rootAtribs.length; j++ ) { + if(rootAtribs[j].indexOf('xmlns:') === 0 && + doc.getroot().attrib[rootAtribs[j]] === 'http://cordova.apache.org/ns/1.0'){ + var strings = rootAtribs[j].split(':'); + prefix = strings[1]; + break; + } + } + return prefix; +} + +/** + * Finds the value of an element's attribute + * @param {String} attributeName Name of the attribute to search for + * @param {Array} elems An array of ElementTree nodes + * @return {String} + */ +function findElementAttributeValue(attributeName, elems) { + + elems = Array.isArray(elems) ? elems : [ elems ]; + + var value = elems.filter(function (elem) { + return elem.attrib.name.toLowerCase() === attributeName.toLowerCase(); + }).map(function (filteredElems) { + return filteredElems.attrib.value; + }).pop(); + + return value ? value : ''; +} + +ConfigParser.prototype = { + packageName: function(id) { + return this.doc.getroot().attrib['id']; + }, + setPackageName: function(id) { + this.doc.getroot().attrib['id'] = id; + }, + android_packageName: function() { + return this.doc.getroot().attrib['android-packageName']; + }, + android_activityName: function() { + return this.doc.getroot().attrib['android-activityName']; + }, + ios_CFBundleIdentifier: function() { + return this.doc.getroot().attrib['ios-CFBundleIdentifier']; + }, + name: function() { + return getNodeTextSafe(this.doc.find('name')); + }, + setName: function(name) { + var el = findOrCreate(this.doc, 'name'); + el.text = name; + }, + description: function() { + return getNodeTextSafe(this.doc.find('description')); + }, + setDescription: function(text) { + var el = findOrCreate(this.doc, 'description'); + el.text = text; + }, + version: function() { + return this.doc.getroot().attrib['version']; + }, + windows_packageVersion: function() { + return this.doc.getroot().attrib('windows-packageVersion'); + }, + android_versionCode: function() { + return this.doc.getroot().attrib['android-versionCode']; + }, + ios_CFBundleVersion: function() { + return this.doc.getroot().attrib['ios-CFBundleVersion']; + }, + setVersion: function(value) { + this.doc.getroot().attrib['version'] = value; + }, + author: function() { + return getNodeTextSafe(this.doc.find('author')); + }, + getGlobalPreference: function (name) { + return findElementAttributeValue(name, this.doc.findall('preference')); + }, + setGlobalPreference: function (name, value) { + var pref = this.doc.find('preference[@name="' + name + '"]'); + if (!pref) { + pref = new et.Element('preference'); + pref.attrib.name = name; + this.doc.getroot().append(pref); + } + pref.attrib.value = value; + }, + getPlatformPreference: function (name, platform) { + return findElementAttributeValue(name, this.doc.findall('platform[@name=\'' + platform + '\']/preference')); + }, + getPreference: function(name, platform) { + + var platformPreference = ''; + + if (platform) { + platformPreference = this.getPlatformPreference(name, platform); + } + + return platformPreference ? platformPreference : this.getGlobalPreference(name); + + }, + /** + * Returns all resources for the platform specified. + * @param {String} platform The platform. + * @param {string} resourceName Type of static resources to return. + * "icon" and "splash" currently supported. + * @return {Array} Resources for the platform specified. + */ + getStaticResources: function(platform, resourceName) { + var ret = [], + staticResources = []; + if (platform) { // platform specific icons + this.doc.findall('platform[@name=\'' + platform + '\']/' + resourceName).forEach(function(elt){ + elt.platform = platform; // mark as platform specific resource + staticResources.push(elt); + }); + } + // root level resources + staticResources = staticResources.concat(this.doc.findall(resourceName)); + // parse resource elements + var that = this; + staticResources.forEach(function (elt) { + var res = {}; + res.src = elt.attrib.src; + res.density = elt.attrib['density'] || elt.attrib[that.cdvNamespacePrefix+':density'] || elt.attrib['gap:density']; + res.platform = elt.platform || null; // null means icon represents default icon (shared between platforms) + res.width = +elt.attrib.width || undefined; + res.height = +elt.attrib.height || undefined; + + // default icon + if (!res.width && !res.height && !res.density) { + ret.defaultResource = res; + } + ret.push(res); + }); + + /** + * Returns resource with specified width and/or height. + * @param {number} width Width of resource. + * @param {number} height Height of resource. + * @return {Resource} Resource object or null if not found. + */ + ret.getBySize = function(width, height) { + return ret.filter(function(res) { + if (!res.width && !res.height) { + return false; + } + return ((!res.width || (width == res.width)) && + (!res.height || (height == res.height))); + })[0] || null; + }; + + /** + * Returns resource with specified density. + * @param {string} density Density of resource. + * @return {Resource} Resource object or null if not found. + */ + ret.getByDensity = function(density) { + return ret.filter(function(res) { + return res.density == density; + })[0] || null; + }; + + /** Returns default icons */ + ret.getDefault = function() { + return ret.defaultResource; + }; + + return ret; + }, + + /** + * Returns all icons for specific platform. + * @param {string} platform Platform name + * @return {Resource[]} Array of icon objects. + */ + getIcons: function(platform) { + return this.getStaticResources(platform, 'icon'); + }, + + /** + * Returns all splash images for specific platform. + * @param {string} platform Platform name + * @return {Resource[]} Array of Splash objects. + */ + getSplashScreens: function(platform) { + return this.getStaticResources(platform, 'splash'); + }, + + /** + * Returns all hook scripts for the hook type specified. + * @param {String} hook The hook type. + * @param {Array} platforms Platforms to look for scripts into (root scripts will be included as well). + * @return {Array} Script elements. + */ + getHookScripts: function(hook, platforms) { + var self = this; + var scriptElements = self.doc.findall('./hook'); + + if(platforms) { + platforms.forEach(function (platform) { + scriptElements = scriptElements.concat(self.doc.findall('./platform[@name="' + platform + '"]/hook')); + }); + } + + function filterScriptByHookType(el) { + return el.attrib.src && el.attrib.type && el.attrib.type.toLowerCase() === hook; + } + + return scriptElements.filter(filterScriptByHookType); + }, + /** + * Returns a list of plugin (IDs). + * + * This function also returns any plugin's that + * were defined using the legacy tags. + * @return {string[]} Array of plugin IDs + */ + getPluginIdList: function () { + var plugins = this.doc.findall('plugin'); + var result = plugins.map(function(plugin){ + return plugin.attrib.name; + }); + var features = this.doc.findall('feature'); + features.forEach(function(element ){ + var idTag = element.find('./param[@name="id"]'); + if(idTag){ + result.push(idTag.attrib.value); + } + }); + return result; + }, + getPlugins: function () { + return this.getPluginIdList().map(function (pluginId) { + return this.getPlugin(pluginId); + }, this); + }, + /** + * Adds a plugin element. Does not check for duplicates. + * @name addPlugin + * @function + * @param {object} attributes name and spec are supported + * @param {Array|object} variables name, value or arbitary object + */ + addPlugin: function (attributes, variables) { + if (!attributes && !attributes.name) return; + var el = new et.Element('plugin'); + el.attrib.name = attributes.name; + if (attributes.spec) { + el.attrib.spec = attributes.spec; + } + + // support arbitrary object as variables source + if (variables && typeof variables === 'object' && !Array.isArray(variables)) { + variables = Object.keys(variables) + .map(function (variableName) { + return {name: variableName, value: variables[variableName]}; + }); + } + + if (variables) { + variables.forEach(function (variable) { + el.append(new et.Element('variable', { name: variable.name, value: variable.value })); + }); + } + this.doc.getroot().append(el); + }, + /** + * Retrives the plugin with the given id or null if not found. + * + * This function also returns any plugin's that + * were defined using the legacy tags. + * @name getPlugin + * @function + * @param {String} id + * @returns {object} plugin including any variables + */ + getPlugin: function(id){ + if(!id){ + return undefined; + } + var pluginElement = this.doc.find('./plugin/[@name="' + id + '"]'); + if (null === pluginElement) { + var legacyFeature = this.doc.find('./feature/param[@name="id"][@value="' + id + '"]/..'); + if(legacyFeature){ + events.emit('log', 'Found deprecated feature entry for ' + id +' in config.xml.'); + return featureToPlugin(legacyFeature); + } + return undefined; + } + var plugin = {}; + + plugin.name = pluginElement.attrib.name; + plugin.spec = pluginElement.attrib.spec || pluginElement.attrib.src || pluginElement.attrib.version; + plugin.variables = {}; + var variableElements = pluginElement.findall('variable'); + variableElements.forEach(function(varElement){ + var name = varElement.attrib.name; + var value = varElement.attrib.value; + if(name){ + plugin.variables[name] = value; + } + }); + return plugin; + }, + /** + * Remove the plugin entry with give name (id). + * + * This function also operates on any plugin's that + * were defined using the legacy tags. + * @name removePlugin + * @function + * @param id name of the plugin + */ + removePlugin: function(id){ + if(id){ + var plugins = this.doc.findall('./plugin/[@name="' + id + '"]') + .concat(this.doc.findall('./feature/param[@name="id"][@value="' + id + '"]/..')); + var children = this.doc.getroot().getchildren(); + plugins.forEach(function (plugin) { + var idx = children.indexOf(plugin); + if (idx > -1) { + children.splice(idx, 1); + } + }); + } + }, + + // Add any element to the root + addElement: function(name, attributes) { + var el = et.Element(name); + for (var a in attributes) { + el.attrib[a] = attributes[a]; + } + this.doc.getroot().append(el); + }, + + /** + * Adds an engine. Does not check for duplicates. + * @param {String} name the engine name + * @param {String} spec engine source location or version (optional) + */ + addEngine: function(name, spec){ + if(!name) return; + var el = et.Element('engine'); + el.attrib.name = name; + if(spec){ + el.attrib.spec = spec; + } + this.doc.getroot().append(el); + }, + /** + * Removes all the engines with given name + * @param {String} name the engine name. + */ + removeEngine: function(name){ + var engines = this.doc.findall('./engine/[@name="' +name+'"]'); + for(var i=0; i < engines.length; i++){ + var children = this.doc.getroot().getchildren(); + var idx = children.indexOf(engines[i]); + if(idx > -1){ + children.splice(idx,1); + } + } + }, + getEngines: function(){ + var engines = this.doc.findall('./engine'); + return engines.map(function(engine){ + var spec = engine.attrib.spec || engine.attrib.version; + return { + 'name': engine.attrib.name, + 'spec': spec ? spec : null + }; + }); + }, + /* Get all the access tags */ + getAccesses: function() { + var accesses = this.doc.findall('./access'); + return accesses.map(function(access){ + var minimum_tls_version = access.attrib['minimum-tls-version']; /* String */ + var requires_forward_secrecy = access.attrib['requires-forward-secrecy']; /* Boolean */ + return { + 'origin': access.attrib.origin, + 'minimum_tls_version': minimum_tls_version, + 'requires_forward_secrecy' : requires_forward_secrecy + }; + }); + }, + /* Get all the allow-navigation tags */ + getAllowNavigations: function() { + var allow_navigations = this.doc.findall('./allow-navigation'); + return allow_navigations.map(function(allow_navigation){ + var minimum_tls_version = allow_navigation.attrib['minimum-tls-version']; /* String */ + var requires_forward_secrecy = allow_navigation.attrib['requires-forward-secrecy']; /* Boolean */ + return { + 'href': allow_navigation.attrib.href, + 'minimum_tls_version': minimum_tls_version, + 'requires_forward_secrecy' : requires_forward_secrecy + }; + }); + }, + write:function() { + fs.writeFileSync(this.path, this.doc.write({indent: 4}), 'utf-8'); + } +}; + +function featureToPlugin(featureElement) { + var plugin = {}; + plugin.variables = []; + var pluginVersion, + pluginSrc; + + var nodes = featureElement.findall('param'); + nodes.forEach(function (element) { + var n = element.attrib.name; + var v = element.attrib.value; + if (n === 'id') { + plugin.name = v; + } else if (n === 'version') { + pluginVersion = v; + } else if (n === 'url' || n === 'installPath') { + pluginSrc = v; + } else { + plugin.variables[n] = v; + } + }); + + var spec = pluginSrc || pluginVersion; + if (spec) { + plugin.spec = spec; + } + + return plugin; +} +module.exports = ConfigParser; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/ConfigParser/README.md b/platforms/android/cordova/node_modules/cordova-common/src/ConfigParser/README.md new file mode 100644 index 0000000..e5cd1bf --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/ConfigParser/README.md @@ -0,0 +1,86 @@ + + +# Cordova-Lib + +## ConfigParser + +wraps a valid cordova config.xml file + +### Usage + +### Include the ConfigParser module in a projet + + var ConfigParser = require('cordova-lib').configparser; + +### Create a new ConfigParser + + var config = new ConfigParser('path/to/config/xml/'); + +### Utility Functions + +#### packageName(id) +returns document root 'id' attribute value +#### Usage + + config.packageName: function(id) + +/* + * sets document root element 'id' attribute to @id + * + * @id - new id value + * + */ +#### setPackageName(id) +set document root 'id' attribute to + function(id) { + this.doc.getroot().attrib['id'] = id; + }, + +### + name: function() { + return getNodeTextSafe(this.doc.find('name')); + }, + setName: function(name) { + var el = findOrCreate(this.doc, 'name'); + el.text = name; + }, + +### read the description element + + config.description() + + var text = "New and improved description of App" + setDescription(text) + +### version management + version() + android_versionCode() + ios_CFBundleVersion() + setVersion() + +### read author element + + config.author(); + +### read preference + + config.getPreference(name); diff --git a/platforms/android/cordova/node_modules/cordova-common/src/CordovaError/CordovaError.js b/platforms/android/cordova/node_modules/cordova-common/src/CordovaError/CordovaError.js new file mode 100644 index 0000000..7262448 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/CordovaError/CordovaError.js @@ -0,0 +1,91 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/* jshint proto:true */ + +var EOL = require('os').EOL; + +/** + * A derived exception class. See usage example in cli.js + * Based on: + * stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/8460753#8460753 + * @param {String} message Error message + * @param {Number} [code=0] Error code + * @param {CordovaExternalToolErrorContext} [context] External tool error context object + * @constructor + */ +function CordovaError(message, code, context) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.message = message; + this.code = code || CordovaError.UNKNOWN_ERROR; + this.context = context; +} +CordovaError.prototype.__proto__ = Error.prototype; + +// TODO: Extend error codes according the projects specifics +CordovaError.UNKNOWN_ERROR = 0; +CordovaError.EXTERNAL_TOOL_ERROR = 1; + +/** + * Translates instance's error code number into error code name, e.g. 0 -> UNKNOWN_ERROR + * @returns {string} Error code string name + */ +CordovaError.prototype.getErrorCodeName = function() { + for(var key in CordovaError) { + if(CordovaError.hasOwnProperty(key)) { + if(CordovaError[key] === this.code) { + return key; + } + } + } +}; + +/** + * Converts CordovaError instance to string representation + * @param {Boolean} [isVerbose] Set up verbose mode. Used to provide more + * details including information about error code name and context + * @return {String} Stringified error representation + */ +CordovaError.prototype.toString = function(isVerbose) { + var message = '', codePrefix = ''; + + if(this.code !== CordovaError.UNKNOWN_ERROR) { + codePrefix = 'code: ' + this.code + (isVerbose ? (' (' + this.getErrorCodeName() + ')') : '') + ' '; + } + + if(this.code === CordovaError.EXTERNAL_TOOL_ERROR) { + if(typeof this.context !== 'undefined') { + if(isVerbose) { + message = codePrefix + EOL + this.context.toString(isVerbose) + '\n failed with an error: ' + + this.message + EOL + 'Stack trace: ' + this.stack; + } else { + message = codePrefix + '\'' + this.context.toString(isVerbose) + '\' ' + this.message; + } + } else { + message = 'External tool failed with an error: ' + this.message; + } + } else { + message = isVerbose ? codePrefix + this.stack : codePrefix + this.message; + } + + return message; +}; + +module.exports = CordovaError; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js b/platforms/android/cordova/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js new file mode 100644 index 0000000..ca9a4aa --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js @@ -0,0 +1,48 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +/* jshint proto:true */ + +var path = require('path'); + +/** + * @param {String} cmd Command full path + * @param {String[]} args Command args + * @param {String} [cwd] Command working directory + * @constructor + */ +function CordovaExternalToolErrorContext(cmd, args, cwd) { + this.cmd = cmd; + // Helper field for readability + this.cmdShortName = path.basename(cmd); + this.args = args; + this.cwd = cwd; +} + +CordovaExternalToolErrorContext.prototype.toString = function(isVerbose) { + if(isVerbose) { + return 'External tool \'' + this.cmdShortName + '\'' + + '\nCommand full path: ' + this.cmd + '\nCommand args: ' + this.args + + (typeof this.cwd !== 'undefined' ? '\nCommand cwd: ' + this.cwd : ''); + } + + return this.cmdShortName; +}; + +module.exports = CordovaExternalToolErrorContext; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/CordovaLogger.js b/platforms/android/cordova/node_modules/cordova-common/src/CordovaLogger.js new file mode 100644 index 0000000..06dbcf3 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/CordovaLogger.js @@ -0,0 +1,203 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +var ansi = require('ansi'); +var EventEmitter = require('events').EventEmitter; +var CordovaError = require('./CordovaError/CordovaError'); +var EOL = require('os').EOL; + +var INSTANCE; + +/** + * @class CordovaLogger + * + * Implements logging facility that anybody could use. Should not be + * instantiated directly, `CordovaLogger.get()` method should be used instead + * to acquire logger instance + */ +function CordovaLogger () { + this.levels = {}; + this.colors = {}; + this.stdout = process.stdout; + this.stderr = process.stderr; + + this.stdoutCursor = ansi(this.stdout); + this.stderrCursor = ansi(this.stderr); + + this.addLevel('verbose', 1000, 'grey'); + this.addLevel('normal' , 2000); + this.addLevel('warn' , 2000, 'yellow'); + this.addLevel('info' , 3000, 'blue'); + this.addLevel('error' , 5000, 'red'); + this.addLevel('results' , 10000); + + this.setLevel('normal'); +} + +/** + * Static method to create new or acquire existing instance. + * + * @return {CordovaLogger} Logger instance + */ +CordovaLogger.get = function () { + return INSTANCE || (INSTANCE = new CordovaLogger()); +}; + +CordovaLogger.VERBOSE = 'verbose'; +CordovaLogger.NORMAL = 'normal'; +CordovaLogger.WARN = 'warn'; +CordovaLogger.INFO = 'info'; +CordovaLogger.ERROR = 'error'; +CordovaLogger.RESULTS = 'results'; + +/** + * Emits log message to process' stdout/stderr depending on message's severity + * and current log level. If severity is less than current logger's level, + * then the message is ignored. + * + * @param {String} logLevel The message's log level. The logger should have + * corresponding level added (via logger.addLevel), otherwise + * `CordovaLogger.NORMAL` level will be used. + * @param {String} message The message, that should be logged to process' + * stdio + * + * @return {CordovaLogger} Current instance, to allow calls chaining. + */ +CordovaLogger.prototype.log = function (logLevel, message) { + // if there is no such logLevel defined, or provided level has + // less severity than active level, then just ignore this call and return + if (!this.levels[logLevel] || this.levels[logLevel] < this.levels[this.logLevel]) + // return instance to allow to chain calls + return this; + + var isVerbose = this.logLevel === 'verbose'; + var cursor = this.stdoutCursor; + + if(message instanceof Error || logLevel === CordovaLogger.ERROR) { + message = formatError(message, isVerbose); + cursor = this.stderrCursor; + } + + var color = this.colors[logLevel]; + if (color) { + cursor.bold().fg[color](); + } + + cursor.write(message).reset().write(EOL); + + return this; +}; + +/** + * Adds a new level to logger instance. This method also creates a shortcut + * method to log events with the level provided (i.e. after adding new level + * 'debug', the method `debug(message)`, equal to logger.log('debug', message), + * will be added to logger instance) + * + * @param {String} level A log level name. The levels with the following + * names added by default to every instance: 'verbose', 'normal', 'warn', + * 'info', 'error', 'results' + * @param {Number} severity A number that represents level's severity. + * @param {String} color A valid color name, that will be used to log + * messages with this level. Any CSS color code or RGB value is allowed + * (according to ansi documentation: + * https://github.com/TooTallNate/ansi.js#features) + * + * @return {CordovaLogger} Current instance, to allow calls chaining. + */ +CordovaLogger.prototype.addLevel = function (level, severity, color) { + + this.levels[level] = severity; + + if (color) { + this.colors[level] = color; + } + + // Define own method with corresponding name + if (!this[level]) { + this[level] = this.log.bind(this, level); + } + + return this; +}; + +/** + * Sets the current logger level to provided value. If logger doesn't have level + * with this name, `CordovaLogger.NORMAL` will be used. + * + * @param {String} logLevel Level name. The level with this name should be + * added to logger before. + * + * @return {CordovaLogger} Current instance, to allow calls chaining. + */ +CordovaLogger.prototype.setLevel = function (logLevel) { + this.logLevel = this.levels[logLevel] ? logLevel : CordovaLogger.NORMAL; + + return this; +}; + +/** + * Attaches logger to EventEmitter instance provided. + * + * @param {EventEmitter} eventEmitter An EventEmitter instance to attach + * logger to. + * + * @return {CordovaLogger} Current instance, to allow calls chaining. + */ +CordovaLogger.prototype.subscribe = function (eventEmitter) { + + if (!(eventEmitter instanceof EventEmitter)) + throw new Error('Subscribe method only accepts an EventEmitter instance as argument'); + + eventEmitter.on('verbose', this.verbose) + .on('log', this.normal) + .on('info', this.info) + .on('warn', this.warn) + .on('warning', this.warn) + // Set up event handlers for logging and results emitted as events. + .on('results', this.results); + + return this; +}; + +function formatError(error, isVerbose) { + var message = ''; + + if(error instanceof CordovaError) { + message = error.toString(isVerbose); + } else if(error instanceof Error) { + if(isVerbose) { + message = error.stack; + } else { + message = error.message; + } + } else { + // Plain text error message + message = error; + } + + if(message.toUpperCase().indexOf('ERROR:') !== 0) { + // Needed for backward compatibility with external tools + message = 'Error: ' + message; + } + + return message; +} + +module.exports = CordovaLogger; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/PlatformJson.js b/platforms/android/cordova/node_modules/cordova-common/src/PlatformJson.js new file mode 100644 index 0000000..793e976 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/PlatformJson.js @@ -0,0 +1,155 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ +/* jshint sub:true */ + +var fs = require('fs'); +var path = require('path'); +var shelljs = require('shelljs'); +var mungeutil = require('./ConfigChanges/munge-util'); +var pluginMappernto = require('cordova-registry-mapper').newToOld; +var pluginMapperotn = require('cordova-registry-mapper').oldToNew; + +function PlatformJson(filePath, platform, root) { + this.filePath = filePath; + this.platform = platform; + this.root = fix_munge(root || {}); +} + +PlatformJson.load = function(plugins_dir, platform) { + var filePath = path.join(plugins_dir, platform + '.json'); + var root = null; + if (fs.existsSync(filePath)) { + root = JSON.parse(fs.readFileSync(filePath, 'utf-8')); + } + return new PlatformJson(filePath, platform, root); +}; + +PlatformJson.prototype.save = function() { + shelljs.mkdir('-p', path.dirname(this.filePath)); + fs.writeFileSync(this.filePath, JSON.stringify(this.root, null, 4), 'utf-8'); +}; + +/** + * Indicates whether the specified plugin is installed as a top-level (not as + * dependency to others) + * @method function + * @param {String} pluginId A plugin id to check for. + * @return {Boolean} true if plugin installed as top-level, otherwise false. + */ +PlatformJson.prototype.isPluginTopLevel = function(pluginId) { + var installedPlugins = this.root.installed_plugins; + return installedPlugins[pluginId] || + installedPlugins[pluginMappernto[pluginId]] || + installedPlugins[pluginMapperotn[pluginId]]; +}; + +/** + * Indicates whether the specified plugin is installed as a dependency to other + * plugin. + * @method function + * @param {String} pluginId A plugin id to check for. + * @return {Boolean} true if plugin installed as a dependency, otherwise false. + */ +PlatformJson.prototype.isPluginDependent = function(pluginId) { + var dependentPlugins = this.root.dependent_plugins; + return dependentPlugins[pluginId] || + dependentPlugins[pluginMappernto[pluginId]] || + dependentPlugins[pluginMapperotn[pluginId]]; +}; + +/** + * Indicates whether plugin is installed either as top-level or as dependency. + * @method function + * @param {String} pluginId A plugin id to check for. + * @return {Boolean} true if plugin installed, otherwise false. + */ +PlatformJson.prototype.isPluginInstalled = function(pluginId) { + return this.isPluginTopLevel(pluginId) || + this.isPluginDependent(pluginId); +}; + +PlatformJson.prototype.addPlugin = function(pluginId, variables, isTopLevel) { + var pluginsList = isTopLevel ? + this.root.installed_plugins : + this.root.dependent_plugins; + + pluginsList[pluginId] = variables; + + return this; +}; + +PlatformJson.prototype.removePlugin = function(pluginId, isTopLevel) { + var pluginsList = isTopLevel ? + this.root.installed_plugins : + this.root.dependent_plugins; + + delete pluginsList[pluginId]; + + return this; +}; + +PlatformJson.prototype.addInstalledPluginToPrepareQueue = function(pluginDirName, vars, is_top_level) { + this.root.prepare_queue.installed.push({'plugin':pluginDirName, 'vars':vars, 'topLevel':is_top_level}); +}; + +PlatformJson.prototype.addUninstalledPluginToPrepareQueue = function(pluginId, is_top_level) { + this.root.prepare_queue.uninstalled.push({'plugin':pluginId, 'id':pluginId, 'topLevel':is_top_level}); +}; + +/** + * Moves plugin, specified by id to top-level plugins. If plugin is top-level + * already, then does nothing. + * @method function + * @param {String} pluginId A plugin id to make top-level. + * @return {PlatformJson} PlatformJson instance. + */ +PlatformJson.prototype.makeTopLevel = function(pluginId) { + var plugin = this.root.dependent_plugins[pluginId]; + if (plugin) { + delete this.root.dependent_plugins[pluginId]; + this.root.installed_plugins[pluginId] = plugin; + } + return this; +}; + +// convert a munge from the old format ([file][parent][xml] = count) to the current one +function fix_munge(root) { + root.prepare_queue = root.prepare_queue || {installed:[], uninstalled:[]}; + root.config_munge = root.config_munge || {files: {}}; + root.installed_plugins = root.installed_plugins || {}; + root.dependent_plugins = root.dependent_plugins || {}; + + var munge = root.config_munge; + if (!munge.files) { + var new_munge = { files: {} }; + for (var file in munge) { + for (var selector in munge[file]) { + for (var xml_child in munge[file][selector]) { + var val = parseInt(munge[file][selector][xml_child]); + for (var i = 0; i < val; i++) { + mungeutil.deep_add(new_munge, [file, selector, { xml: xml_child, count: val }]); + } + } + } + } + root.config_munge = new_munge; + } + + return root; +} + +module.exports = PlatformJson; + diff --git a/platforms/android/cordova/node_modules/cordova-common/src/PluginInfo/PluginInfo.js b/platforms/android/cordova/node_modules/cordova-common/src/PluginInfo/PluginInfo.js new file mode 100644 index 0000000..2554a3c --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/PluginInfo/PluginInfo.js @@ -0,0 +1,410 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/* jshint sub:true, laxcomma:true, laxbreak:true */ + +/* +A class for holidng the information currently stored in plugin.xml +It should also be able to answer questions like whether the plugin +is compatible with a given engine version. + +TODO (kamrik): refactor this to not use sync functions and return promises. +*/ + + +var path = require('path') + , fs = require('fs') + , xml_helpers = require('../util/xml-helpers') + , CordovaError = require('../CordovaError/CordovaError') + ; + +function PluginInfo(dirname) { + var self = this; + + // METHODS + // Defined inside the constructor to avoid the "this" binding problems. + + // tag + // Example: + // Used to require a variable to be specified via --variable when installing the plugin. + self.getPreferences = getPreferences; + function getPreferences(platform) { + var arprefs = _getTags(self._et, 'preference', platform, _parsePreference); + + var prefs= {}; + for(var i in arprefs) + { + var pref=arprefs[i]; + prefs[pref.preference]=pref.default; + } + // returns { key : default | null} + return prefs; + } + + function _parsePreference(prefTag) { + var name = prefTag.attrib.name.toUpperCase(); + var def = prefTag.attrib.default || null; + return {preference: name, default: def}; + } + + // + self.getAssets = getAssets; + function getAssets(platform) { + var assets = _getTags(self._et, 'asset', platform, _parseAsset); + return assets; + } + + function _parseAsset(tag) { + var src = tag.attrib.src; + var target = tag.attrib.target; + + if ( !src || !target) { + var msg = + 'Malformed tag. Both "src" and "target" attributes' + + 'must be specified in\n' + + self.filepath + ; + throw new Error(msg); + } + + var asset = { + itemType: 'asset', + src: src, + target: target + }; + return asset; + } + + + // + // Example: + // + self.getDependencies = getDependencies; + function getDependencies(platform) { + var deps = _getTags( + self._et, + 'dependency', + platform, + _parseDependency + ); + return deps; + } + + function _parseDependency(tag) { + var dep = + { id : tag.attrib.id + , url : tag.attrib.url || '' + , subdir : tag.attrib.subdir || '' + , commit : tag.attrib.commit + }; + + dep.git_ref = dep.commit; + + if ( !dep.id ) { + var msg = + ' tag is missing id attribute in ' + + self.filepath + ; + throw new CordovaError(msg); + } + return dep; + } + + + // tag + self.getConfigFiles = getConfigFiles; + function getConfigFiles(platform) { + var configFiles = _getTags(self._et, 'config-file', platform, _parseConfigFile); + return configFiles; + } + + function _parseConfigFile(tag) { + var configFile = + { target : tag.attrib['target'] + , parent : tag.attrib['parent'] + , after : tag.attrib['after'] + , xmls : tag.getchildren() + // To support demuxing via versions + , versions : tag.attrib['versions'] + , deviceTarget: tag.attrib['device-target'] + }; + return configFile; + } + + // tags, both global and within a + // TODO (kamrik): Do we ever use under ? Example wanted. + self.getInfo = getInfo; + function getInfo(platform) { + var infos = _getTags( + self._et, + 'info', + platform, + function(elem) { return elem.text; } + ); + // Filter out any undefined or empty strings. + infos = infos.filter(Boolean); + return infos; + } + + // + // Examples: + // + // + self.getSourceFiles = getSourceFiles; + function getSourceFiles(platform) { + var sourceFiles = _getTagsInPlatform(self._et, 'source-file', platform, _parseSourceFile); + return sourceFiles; + } + + function _parseSourceFile(tag) { + return { + itemType: 'source-file', + src: tag.attrib.src, + framework: isStrTrue(tag.attrib.framework), + weak: isStrTrue(tag.attrib.weak), + compilerFlags: tag.attrib['compiler-flags'], + targetDir: tag.attrib['target-dir'] + }; + } + + // + // Example: + // + self.getHeaderFiles = getHeaderFiles; + function getHeaderFiles(platform) { + var headerFiles = _getTagsInPlatform(self._et, 'header-file', platform, function(tag) { + return { + itemType: 'header-file', + src: tag.attrib.src, + targetDir: tag.attrib['target-dir'] + }; + }); + return headerFiles; + } + + // + // Example: + // + self.getResourceFiles = getResourceFiles; + function getResourceFiles(platform) { + var resourceFiles = _getTagsInPlatform(self._et, 'resource-file', platform, function(tag) { + return { + itemType: 'resource-file', + src: tag.attrib.src, + target: tag.attrib.target, + versions: tag.attrib.versions, + deviceTarget: tag.attrib['device-target'], + arch: tag.attrib.arch + }; + }); + return resourceFiles; + } + + // + // Example: + // + self.getLibFiles = getLibFiles; + function getLibFiles(platform) { + var libFiles = _getTagsInPlatform(self._et, 'lib-file', platform, function(tag) { + return { + itemType: 'lib-file', + src: tag.attrib.src, + arch: tag.attrib.arch, + Include: tag.attrib.Include, + versions: tag.attrib.versions, + deviceTarget: tag.attrib['device-target'] || tag.attrib.target + }; + }); + return libFiles; + } + + // + // Example: + // + self.getHookScripts = getHookScripts; + function getHookScripts(hook, platforms) { + var scriptElements = self._et.findall('./hook'); + + if(platforms) { + platforms.forEach(function (platform) { + scriptElements = scriptElements.concat(self._et.findall('./platform[@name="' + platform + '"]/hook')); + }); + } + + function filterScriptByHookType(el) { + return el.attrib.src && el.attrib.type && el.attrib.type.toLowerCase() === hook; + } + + return scriptElements.filter(filterScriptByHookType); + } + + self.getJsModules = getJsModules; + function getJsModules(platform) { + var modules = _getTags(self._et, 'js-module', platform, _parseJsModule); + return modules; + } + + function _parseJsModule(tag) { + var ret = { + itemType: 'js-module', + name: tag.attrib.name, + src: tag.attrib.src, + clobbers: tag.findall('clobbers').map(function(tag) { return { target: tag.attrib.target }; }), + merges: tag.findall('merges').map(function(tag) { return { target: tag.attrib.target }; }), + runs: tag.findall('runs').length > 0 + }; + + return ret; + } + + self.getEngines = function() { + return self._et.findall('engines/engine').map(function(n) { + return { + name: n.attrib.name, + version: n.attrib.version, + platform: n.attrib.platform, + scriptSrc: n.attrib.scriptSrc + }; + }); + }; + + self.getPlatforms = function() { + return self._et.findall('platform').map(function(n) { + return { name: n.attrib.name }; + }); + }; + + self.getPlatformsArray = function() { + return self._et.findall('platform').map(function(n) { + return n.attrib.name; + }); + }; + self.getFrameworks = function(platform) { + return _getTags(self._et, 'framework', platform, function(el) { + var ret = { + itemType: 'framework', + type: el.attrib.type, + parent: el.attrib.parent, + custom: isStrTrue(el.attrib.custom), + src: el.attrib.src, + weak: isStrTrue(el.attrib.weak), + versions: el.attrib.versions, + targetDir: el.attrib['target-dir'], + deviceTarget: el.attrib['device-target'] || el.attrib.target, + arch: el.attrib.arch + }; + return ret; + }); + }; + + self.getFilesAndFrameworks = getFilesAndFrameworks; + function getFilesAndFrameworks(platform) { + // Please avoid changing the order of the calls below, files will be + // installed in this order. + var items = [].concat( + self.getSourceFiles(platform), + self.getHeaderFiles(platform), + self.getResourceFiles(platform), + self.getFrameworks(platform), + self.getLibFiles(platform) + ); + return items; + } + ///// End of PluginInfo methods ///// + + + ///// PluginInfo Constructor logic ///// + self.filepath = path.join(dirname, 'plugin.xml'); + if (!fs.existsSync(self.filepath)) { + throw new CordovaError('Cannot find plugin.xml for plugin \'' + path.basename(dirname) + '\'. Please try adding it again.'); + } + + self.dir = dirname; + var et = self._et = xml_helpers.parseElementtreeSync(self.filepath); + var pelem = et.getroot(); + self.id = pelem.attrib.id; + self.version = pelem.attrib.version; + + // Optional fields + self.name = pelem.findtext('name'); + self.description = pelem.findtext('description'); + self.license = pelem.findtext('license'); + self.repo = pelem.findtext('repo'); + self.issue = pelem.findtext('issue'); + self.keywords = pelem.findtext('keywords'); + self.info = pelem.findtext('info'); + if (self.keywords) { + self.keywords = self.keywords.split(',').map( function(s) { return s.trim(); } ); + } + self.getKeywordsAndPlatforms = function () { + var ret = self.keywords || []; + return ret.concat('ecosystem:cordova').concat(addCordova(self.getPlatformsArray())); + }; +} // End of PluginInfo constructor. + +// Helper function used to prefix every element of an array with cordova- +// Useful when we want to modify platforms to be cordova-platform +function addCordova(someArray) { + var newArray = someArray.map(function(element) { + return 'cordova-' + element; + }); + return newArray; +} + +// Helper function used by most of the getSomething methods of PluginInfo. +// Get all elements of a given name. Both in root and in platform sections +// for the given platform. If transform is given and is a function, it is +// applied to each element. +function _getTags(pelem, tag, platform, transform) { + var platformTag = pelem.find('./platform[@name="' + platform + '"]'); + var tagsInRoot = pelem.findall(tag); + tagsInRoot = tagsInRoot || []; + var tagsInPlatform = platformTag ? platformTag.findall(tag) : []; + var tags = tagsInRoot.concat(tagsInPlatform); + if ( typeof transform === 'function' ) { + tags = tags.map(transform); + } + return tags; +} + +// Same as _getTags() but only looks inside a platfrom section. +function _getTagsInPlatform(pelem, tag, platform, transform) { + var platformTag = pelem.find('./platform[@name="' + platform + '"]'); + var tags = platformTag ? platformTag.findall(tag) : []; + if ( typeof transform === 'function' ) { + tags = tags.map(transform); + } + return tags; +} + +// Check if x is a string 'true'. +function isStrTrue(x) { + return String(x).toLowerCase() == 'true'; +} + +module.exports = PluginInfo; +// Backwards compat: +PluginInfo.PluginInfo = PluginInfo; +PluginInfo.loadPluginsDir = function(dir) { + var PluginInfoProvider = require('./PluginInfoProvider'); + return new PluginInfoProvider().getAllWithinSearchPath(dir); +}; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js b/platforms/android/cordova/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js new file mode 100644 index 0000000..6240119 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js @@ -0,0 +1,82 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +/* jshint sub:true, laxcomma:true, laxbreak:true */ + +var fs = require('fs'); +var path = require('path'); +var PluginInfo = require('./PluginInfo'); +var events = require('../events'); + +function PluginInfoProvider() { + this._cache = {}; + this._getAllCache = {}; +} + +PluginInfoProvider.prototype.get = function(dirName) { + var absPath = path.resolve(dirName); + if (!this._cache[absPath]) { + this._cache[absPath] = new PluginInfo(dirName); + } + return this._cache[absPath]; +}; + +// Normally you don't need to put() entries, but it's used +// when copying plugins, and in unit tests. +PluginInfoProvider.prototype.put = function(pluginInfo) { + var absPath = path.resolve(pluginInfo.dir); + this._cache[absPath] = pluginInfo; +}; + +// Used for plugin search path processing. +// Given a dir containing multiple plugins, create a PluginInfo object for +// each of them and return as array. +// Should load them all in parallel and return a promise, but not yet. +PluginInfoProvider.prototype.getAllWithinSearchPath = function(dirName) { + var absPath = path.resolve(dirName); + if (!this._getAllCache[absPath]) { + this._getAllCache[absPath] = getAllHelper(absPath, this); + } + return this._getAllCache[absPath]; +}; + +function getAllHelper(absPath, provider) { + if (!fs.existsSync(absPath)){ + return []; + } + // If dir itself is a plugin, return it in an array with one element. + if (fs.existsSync(path.join(absPath, 'plugin.xml'))) { + return [provider.get(absPath)]; + } + var subdirs = fs.readdirSync(absPath); + var plugins = []; + subdirs.forEach(function(subdir) { + var d = path.join(absPath, subdir); + if (fs.existsSync(path.join(d, 'plugin.xml'))) { + try { + plugins.push(provider.get(d)); + } catch (e) { + events.emit('warn', 'Error parsing ' + path.join(d, 'plugin.xml.\n' + e.stack)); + } + } + }); + return plugins; +} + +module.exports = PluginInfoProvider; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/events.js b/platforms/android/cordova/node_modules/cordova-common/src/events.js new file mode 100644 index 0000000..868d363 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/events.js @@ -0,0 +1,65 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var EventEmitter = require('events').EventEmitter; + +var INSTANCE = new EventEmitter(); +var EVENTS_RECEIVER; + +module.exports = INSTANCE; + +/** + * Sets up current instance to forward emitted events to another EventEmitter + * instance. + * + * @param {EventEmitter} [eventEmitter] The emitter instance to forward + * events to. Falsy value, when passed, disables forwarding. + */ +module.exports.forwardEventsTo = function (eventEmitter) { + + // If no argument is specified disable events forwarding + if (!eventEmitter) { + EVENTS_RECEIVER = undefined; + return; + } + + if (!(eventEmitter instanceof EventEmitter)) + throw new Error('Cordova events could be redirected to another EventEmitter instance only'); + + EVENTS_RECEIVER = eventEmitter; +}; + +var emit = INSTANCE.emit; + +/** + * This method replaces original 'emit' method to allow events forwarding. + * + * @return {eventEmitter} Current instance to allow calls chaining, as + * original 'emit' does + */ +module.exports.emit = function () { + + var args = Array.prototype.slice.call(arguments); + + if (EVENTS_RECEIVER) { + EVENTS_RECEIVER.emit.apply(EVENTS_RECEIVER, args); + } + + return emit.apply(this, args); +}; diff --git a/platforms/android/cordova/node_modules/cordova-common/src/superspawn.js b/platforms/android/cordova/node_modules/cordova-common/src/superspawn.js new file mode 100644 index 0000000..a3f1431 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/superspawn.js @@ -0,0 +1,184 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var child_process = require('child_process'); +var fs = require('fs'); +var path = require('path'); +var _ = require('underscore'); +var Q = require('q'); +var shell = require('shelljs'); +var events = require('./events'); +var iswin32 = process.platform == 'win32'; + +// On Windows, spawn() for batch files requires absolute path & having the extension. +function resolveWindowsExe(cmd) { + var winExtensions = ['.exe', '.bat', '.cmd', '.js', '.vbs']; + function isValidExe(c) { + return winExtensions.indexOf(path.extname(c)) !== -1 && fs.existsSync(c); + } + if (isValidExe(cmd)) { + return cmd; + } + cmd = shell.which(cmd) || cmd; + if (!isValidExe(cmd)) { + winExtensions.some(function(ext) { + if (fs.existsSync(cmd + ext)) { + cmd = cmd + ext; + return true; + } + }); + } + return cmd; +} + +function maybeQuote(a) { + if (/^[^"].*[ &].*[^"]/.test(a)) return '"' + a + '"'; + return a; +} + +/** + * A special implementation for child_process.spawn that handles + * Windows-specific issues with batch files and spaces in paths. Returns a + * promise that succeeds only for return code 0. It is also possible to + * subscribe on spawned process' stdout and stderr streams using progress + * handler for resultant promise. + * + * @example spawn('mycommand', [], {stdio: 'pipe'}) .progress(function (stdio){ + * if (stdio.stderr) { console.error(stdio.stderr); } }) + * .then(function(result){ // do other stuff }) + * + * @param {String} cmd A command to spawn + * @param {String[]} [args=[]] An array of arguments, passed to spawned + * process + * @param {Object} [opts={}] A configuration object + * @param {String|String[]|Object} opts.stdio Property that configures how + * spawned process' stdio will behave. Has the same meaning and possible + * values as 'stdio' options for child_process.spawn method + * (https://nodejs.org/api/child_process.html#child_process_options_stdio). + * @param {Object} [env={}] A map of extra environment variables + * @param {String} [cwd=process.cwd()] Working directory for the command + * @param {Boolean} [chmod=false] If truthy, will attempt to set the execute + * bit before executing on non-Windows platforms + * + * @return {Promise} A promise that is either fulfilled if the spawned + * process is exited with zero error code or rejected otherwise. If the + * 'stdio' option set to 'default' or 'pipe', the promise also emits progress + * messages with the following contents: + * { + * 'stdout': ..., + * 'stderr': ... + * } + */ +exports.spawn = function(cmd, args, opts) { + args = args || []; + opts = opts || {}; + var spawnOpts = {}; + var d = Q.defer(); + + if (iswin32) { + cmd = resolveWindowsExe(cmd); + // If we couldn't find the file, likely we'll end up failing, + // but for things like "del", cmd will do the trick. + if (path.extname(cmd) != '.exe') { + var cmdArgs = '"' + [cmd].concat(args).map(maybeQuote).join(' ') + '"'; + // We need to use /s to ensure that spaces are parsed properly with cmd spawned content + args = [['/s', '/c', cmdArgs].join(' ')]; + cmd = 'cmd'; + spawnOpts.windowsVerbatimArguments = true; + } else if (!fs.existsSync(cmd)) { + // We need to use /s to ensure that spaces are parsed properly with cmd spawned content + args = ['/s', '/c', cmd].concat(args).map(maybeQuote); + } + } + + if (opts.stdio !== 'default') { + // Ignore 'default' value for stdio because it corresponds to child_process's default 'pipe' option + spawnOpts.stdio = opts.stdio; + } + + if (opts.cwd) { + spawnOpts.cwd = opts.cwd; + } + + if (opts.env) { + spawnOpts.env = _.extend(_.extend({}, process.env), opts.env); + } + + if (opts.chmod && !iswin32) { + try { + // This fails when module is installed in a system directory (e.g. via sudo npm install) + fs.chmodSync(cmd, '755'); + } catch (e) { + // If the perms weren't set right, then this will come as an error upon execution. + } + } + + events.emit(opts.printCommand ? 'log' : 'verbose', 'Running command: ' + maybeQuote(cmd) + ' ' + args.map(maybeQuote).join(' ')); + + var child = child_process.spawn(cmd, args, spawnOpts); + var capturedOut = ''; + var capturedErr = ''; + + if (child.stdout) { + child.stdout.setEncoding('utf8'); + child.stdout.on('data', function(data) { + capturedOut += data; + d.notify({'stdout': data}); + }); + } + + if (child.stderr) { + child.stderr.setEncoding('utf8'); + child.stderr.on('data', function(data) { + capturedErr += data; + d.notify({'stderr': data}); + }); + } + + child.on('close', whenDone); + child.on('error', whenDone); + function whenDone(arg) { + child.removeListener('close', whenDone); + child.removeListener('error', whenDone); + var code = typeof arg == 'number' ? arg : arg && arg.code; + + events.emit('verbose', 'Command finished with error code ' + code + ': ' + cmd + ' ' + args); + if (code === 0) { + d.resolve(capturedOut.trim()); + } else { + var errMsg = cmd + ': Command failed with exit code ' + code; + if (capturedErr) { + errMsg += ' Error output:\n' + capturedErr.trim(); + } + var err = new Error(errMsg); + err.code = code; + d.reject(err); + } + } + + return d.promise; +}; + +exports.maybeSpawn = function(cmd, args, opts) { + if (fs.existsSync(cmd)) { + return exports.spawn(cmd, args, opts); + } + return Q(null); +}; + diff --git a/platforms/android/cordova/node_modules/cordova-common/src/util/plist-helpers.js b/platforms/android/cordova/node_modules/cordova-common/src/util/plist-helpers.js new file mode 100644 index 0000000..9dee5c6 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/util/plist-helpers.js @@ -0,0 +1,101 @@ +/* + * + * Copyright 2013 Brett Rudd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +// contains PLIST utility functions +var __ = require('underscore'); +var plist = require('plist'); + +// adds node to doc at selector +module.exports.graftPLIST = graftPLIST; +function graftPLIST(doc, xml, selector) { + var obj = plist.parse(''+xml+''); + + var node = doc[selector]; + if (node && Array.isArray(node) && Array.isArray(obj)){ + node = node.concat(obj); + for (var i =0;i. If we have two dicts we merge them instead of + // overriding the old one. See CB-6472 + if (node && __.isObject(node) && __.isObject(obj) && !__.isDate(node) && !__.isDate(obj)){//arrays checked above + __.extend(obj,node); + } + doc[selector] = obj; + } + + return true; +} + +// removes node from doc at selector +module.exports.prunePLIST = prunePLIST; +function prunePLIST(doc, xml, selector) { + var obj = plist.parse(''+xml+''); + + pruneOBJECT(doc, selector, obj); + + return true; +} + +function pruneOBJECT(doc, selector, fragment) { + if (Array.isArray(fragment) && Array.isArray(doc[selector])) { + var empty = true; + for (var i in fragment) { + for (var j in doc[selector]) { + empty = pruneOBJECT(doc[selector], j, fragment[i]) && empty; + } + } + if (empty) + { + delete doc[selector]; + return true; + } + } + else if (nodeEqual(doc[selector], fragment)) { + delete doc[selector]; + return true; + } + + return false; +} + +function nodeEqual(node1, node2) { + if (typeof node1 != typeof node2) + return false; + else if (typeof node1 == 'string') { + node2 = escapeRE(node2).replace(new RegExp('\\$[a-zA-Z0-9-_]+','gm'),'(.*?)'); + return new RegExp('^' + node2 + '$').test(node1); + } + else { + for (var key in node2) { + if (!nodeEqual(node1[key], node2[key])) return false; + } + return true; + } +} + +// escape string for use in regex +function escapeRE(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '$&'); +} diff --git a/platforms/android/cordova/node_modules/cordova-common/src/util/xml-helpers.js b/platforms/android/cordova/node_modules/cordova-common/src/util/xml-helpers.js new file mode 100644 index 0000000..8b02989 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-common/src/util/xml-helpers.js @@ -0,0 +1,266 @@ +/* + * + * Copyright 2013 Anis Kadri + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint sub:true, laxcomma:true */ + +/** + * contains XML utility functions, some of which are specific to elementtree + */ + +var fs = require('fs') + , path = require('path') + , _ = require('underscore') + , et = require('elementtree') + ; + +module.exports = { + // compare two et.XML nodes, see if they match + // compares tagName, text, attributes and children (recursively) + equalNodes: function(one, two) { + if (one.tag != two.tag) { + return false; + } else if (one.text.trim() != two.text.trim()) { + return false; + } else if (one._children.length != two._children.length) { + return false; + } + + var oneAttribKeys = Object.keys(one.attrib), + twoAttribKeys = Object.keys(two.attrib), + i = 0, attribName; + + if (oneAttribKeys.length != twoAttribKeys.length) { + return false; + } + + for (i; i < oneAttribKeys.length; i++) { + attribName = oneAttribKeys[i]; + + if (one.attrib[attribName] != two.attrib[attribName]) { + return false; + } + } + + for (i; i < one._children.length; i++) { + if (!module.exports.equalNodes(one._children[i], two._children[i])) { + return false; + } + } + + return true; + }, + + // adds node to doc at selector, creating parent if it doesn't exist + graftXML: function(doc, nodes, selector, after) { + var parent = resolveParent(doc, selector); + if (!parent) { + //Try to create the parent recursively if necessary + try { + var parentToCreate = et.XML('<' + path.basename(selector) + '>'), + parentSelector = path.dirname(selector); + + this.graftXML(doc, [parentToCreate], parentSelector); + } catch (e) { + return false; + } + parent = resolveParent(doc, selector); + if (!parent) return false; + } + + nodes.forEach(function (node) { + // check if child is unique first + if (uniqueChild(node, parent)) { + var children = parent.getchildren(); + var insertIdx = after ? findInsertIdx(children, after) : children.length; + + //TODO: replace with parent.insert after the bug in ElementTree is fixed + parent.getchildren().splice(insertIdx, 0, node); + } + }); + + return true; + }, + + // removes node from doc at selector + pruneXML: function(doc, nodes, selector) { + var parent = resolveParent(doc, selector); + if (!parent) return false; + + nodes.forEach(function (node) { + var matchingKid = null; + if ((matchingKid = findChild(node, parent)) !== null) { + // stupid elementtree takes an index argument it doesn't use + // and does not conform to the python lib + parent.remove(matchingKid); + } + }); + + return true; + }, + + parseElementtreeSync: function (filename) { + var contents = fs.readFileSync(filename, 'utf-8'); + if(contents) { + //Windows is the BOM. Skip the Byte Order Mark. + contents = contents.substring(contents.indexOf('<')); + } + return new et.ElementTree(et.XML(contents)); + } +}; + +function findChild(node, parent) { + var matchingKids = parent.findall(node.tag) + , i, j; + + for (i = 0, j = matchingKids.length ; i < j ; i++) { + if (module.exports.equalNodes(node, matchingKids[i])) { + return matchingKids[i]; + } + } + return null; +} + +function uniqueChild(node, parent) { + var matchingKids = parent.findall(node.tag) + , i = 0; + + if (matchingKids.length === 0) { + return true; + } else { + for (i; i < matchingKids.length; i++) { + if (module.exports.equalNodes(node, matchingKids[i])) { + return false; + } + } + return true; + } +} + +var ROOT = /^\/([^\/]*)/, + ABSOLUTE = /^\/([^\/]*)\/(.*)/; + +function resolveParent(doc, selector) { + var parent, tagName, subSelector; + + // handle absolute selector (which elementtree doesn't like) + if (ROOT.test(selector)) { + tagName = selector.match(ROOT)[1]; + // test for wildcard "any-tag" root selector + if (tagName == '*' || tagName === doc._root.tag) { + parent = doc._root; + + // could be an absolute path, but not selecting the root + if (ABSOLUTE.test(selector)) { + subSelector = selector.match(ABSOLUTE)[2]; + parent = parent.find(subSelector); + } + } else { + return false; + } + } else { + parent = doc.find(selector); + } + return parent; +} + +// Find the index at which to insert an entry. After is a ;-separated priority list +// of tags after which the insertion should be made. E.g. If we need to +// insert an element C, and the rule is that the order of children has to be +// As, Bs, Cs. After will be equal to "C;B;A". +function findInsertIdx(children, after) { + var childrenTags = children.map(function(child) { return child.tag; }); + var afters = after.split(';'); + var afterIndexes = afters.map(function(current) { return childrenTags.lastIndexOf(current); }); + var foundIndex = _.find(afterIndexes, function(index) { return index != -1; }); + + //add to the beginning if no matching nodes are found + return typeof foundIndex === 'undefined' ? 0 : foundIndex+1; +} + +var BLACKLIST = ['platform', 'feature','plugin','engine']; +var SINGLETONS = ['content', 'author']; +function mergeXml(src, dest, platform, clobber) { + // Do nothing for blacklisted tags. + if (BLACKLIST.indexOf(src.tag) != -1) return; + + //Handle attributes + Object.getOwnPropertyNames(src.attrib).forEach(function (attribute) { + if (clobber || !dest.attrib[attribute]) { + dest.attrib[attribute] = src.attrib[attribute]; + } + }); + //Handle text + if (src.text && (clobber || !dest.text)) { + dest.text = src.text; + } + //Handle platform + if (platform) { + src.findall('platform[@name="' + platform + '"]').forEach(function (platformElement) { + platformElement.getchildren().forEach(mergeChild); + }); + } + + //Handle children + src.getchildren().forEach(mergeChild); + + function mergeChild (srcChild) { + var srcTag = srcChild.tag, + destChild = new et.Element(srcTag), + foundChild, + query = srcTag + '', + shouldMerge = true; + + if (BLACKLIST.indexOf(srcTag) === -1) { + if (SINGLETONS.indexOf(srcTag) !== -1) { + foundChild = dest.find(query); + if (foundChild) { + destChild = foundChild; + dest.remove(destChild); + } + } else { + //Check for an exact match and if you find one don't add + Object.getOwnPropertyNames(srcChild.attrib).forEach(function (attribute) { + query += '[@' + attribute + '="' + srcChild.attrib[attribute] + '"]'; + }); + var foundChildren = dest.findall(query); + for(var i = 0; i < foundChildren.length; i++) { + foundChild = foundChildren[i]; + if (foundChild && textMatch(srcChild, foundChild) && (Object.keys(srcChild.attrib).length==Object.keys(foundChild.attrib).length)) { + destChild = foundChild; + dest.remove(destChild); + shouldMerge = false; + break; + } + } + } + + mergeXml(srcChild, destChild, platform, clobber && shouldMerge); + dest.append(destChild); + } + } +} + +// Expose for testing. +module.exports.mergeXml = mergeXml; + +function textMatch(elm1, elm2) { + var text1 = elm1.text ? elm1.text.replace(/\s+/, '') : '', + text2 = elm2.text ? elm2.text.replace(/\s+/, '') : ''; + return (text1 === '' || text1 === text2); +} diff --git a/platforms/android/cordova/node_modules/cordova-registry-mapper/.npmignore b/platforms/android/cordova/node_modules/cordova-registry-mapper/.npmignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-registry-mapper/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/platforms/android/cordova/node_modules/cordova-registry-mapper/.travis.yml b/platforms/android/cordova/node_modules/cordova-registry-mapper/.travis.yml new file mode 100644 index 0000000..ae381fc --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-registry-mapper/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +sudo: false +node_js: + - "0.10" +install: npm install +script: + - npm test diff --git a/platforms/android/cordova/node_modules/cordova-registry-mapper/README.md b/platforms/android/cordova/node_modules/cordova-registry-mapper/README.md new file mode 100644 index 0000000..3b93e5f --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-registry-mapper/README.md @@ -0,0 +1,14 @@ +[![Build Status](https://travis-ci.org/stevengill/cordova-registry-mapper.svg?branch=master)](https://travis-ci.org/stevengill/cordova-registry-mapper) + +#Cordova Registry Mapper + +This module is used to map Cordova plugin ids to package names and vice versa. + +When Cordova users add plugins to their projects using ids +(e.g. `cordova plugin add org.apache.cordova.device`), +this module will map that id to the corresponding package name so `cordova-lib` knows what to fetch from **npm**. + +This module was created so the Apache Cordova project could migrate its plugins from +the [Cordova Registry](http://registry.cordova.io/) +to [npm](https://registry.npmjs.com/) +instead of having to maintain a registry. diff --git a/platforms/android/cordova/node_modules/cordova-registry-mapper/index.js b/platforms/android/cordova/node_modules/cordova-registry-mapper/index.js new file mode 100644 index 0000000..4550774 --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-registry-mapper/index.js @@ -0,0 +1,204 @@ +var map = { + 'org.apache.cordova.battery-status':'cordova-plugin-battery-status', + 'org.apache.cordova.camera':'cordova-plugin-camera', + 'org.apache.cordova.console':'cordova-plugin-console', + 'org.apache.cordova.contacts':'cordova-plugin-contacts', + 'org.apache.cordova.device':'cordova-plugin-device', + 'org.apache.cordova.device-motion':'cordova-plugin-device-motion', + 'org.apache.cordova.device-orientation':'cordova-plugin-device-orientation', + 'org.apache.cordova.dialogs':'cordova-plugin-dialogs', + 'org.apache.cordova.file':'cordova-plugin-file', + 'org.apache.cordova.file-transfer':'cordova-plugin-file-transfer', + 'org.apache.cordova.geolocation':'cordova-plugin-geolocation', + 'org.apache.cordova.globalization':'cordova-plugin-globalization', + 'org.apache.cordova.inappbrowser':'cordova-plugin-inappbrowser', + 'org.apache.cordova.media':'cordova-plugin-media', + 'org.apache.cordova.media-capture':'cordova-plugin-media-capture', + 'org.apache.cordova.network-information':'cordova-plugin-network-information', + 'org.apache.cordova.splashscreen':'cordova-plugin-splashscreen', + 'org.apache.cordova.statusbar':'cordova-plugin-statusbar', + 'org.apache.cordova.vibration':'cordova-plugin-vibration', + 'org.apache.cordova.test-framework':'cordova-plugin-test-framework', + 'com.msopentech.websql' : 'cordova-plugin-websql', + 'com.msopentech.indexeddb' : 'cordova-plugin-indexeddb', + 'com.microsoft.aad.adal' : 'cordova-plugin-ms-adal', + 'com.microsoft.capptain' : 'capptain-cordova', + 'com.microsoft.services.aadgraph' : 'cordova-plugin-ms-aad-graph', + 'com.microsoft.services.files' : 'cordova-plugin-ms-files', + 'om.microsoft.services.outlook' : 'cordova-plugin-ms-outlook', + 'com.pbakondy.sim' : 'cordova-plugin-sim', + 'android.support.v4' : 'cordova-plugin-android-support-v4', + 'android.support.v7-appcompat' : 'cordova-plugin-android-support-v7-appcompat', + 'com.google.playservices' : 'cordova-plugin-googleplayservices', + 'com.google.cordova.admob' : 'cordova-plugin-admobpro', + 'com.rjfun.cordova.extension' : 'cordova-plugin-extension', + 'com.rjfun.cordova.plugin.admob' : 'cordova-plugin-admob', + 'com.rjfun.cordova.flurryads' : 'cordova-plugin-flurry', + 'com.rjfun.cordova.facebookads' : 'cordova-plugin-facebookads', + 'com.rjfun.cordova.httpd' : 'cordova-plugin-httpd', + 'com.rjfun.cordova.iad' : 'cordova-plugin-iad', + 'com.rjfun.cordova.iflyspeech' : 'cordova-plugin-iflyspeech', + 'com.rjfun.cordova.lianlianpay' : 'cordova-plugin-lianlianpay', + 'com.rjfun.cordova.mobfox' : 'cordova-plugin-mobfox', + 'com.rjfun.cordova.mopub' : 'cordova-plugin-mopub', + 'com.rjfun.cordova.mmedia' : 'cordova-plugin-mmedia', + 'com.rjfun.cordova.nativeaudio' : 'cordova-plugin-nativeaudio', + 'com.rjfun.cordova.plugin.paypalmpl' : 'cordova-plugin-paypalmpl', + 'com.rjfun.cordova.smartadserver' : 'cordova-plugin-smartadserver', + 'com.rjfun.cordova.sms' : 'cordova-plugin-sms', + 'com.rjfun.cordova.wifi' : 'cordova-plugin-wifi', + 'com.ohh2ahh.plugins.appavailability' : 'cordova-plugin-appavailability', + 'org.adapt-it.cordova.fonts' : 'cordova-plugin-fonts', + 'de.martinreinhardt.cordova.plugins.barcodeScanner' : 'cordova-plugin-barcodescanner', + 'de.martinreinhardt.cordova.plugins.urlhandler' : 'cordova-plugin-urlhandler', + 'de.martinreinhardt.cordova.plugins.email' : 'cordova-plugin-email', + 'de.martinreinhardt.cordova.plugins.certificates' : 'cordova-plugin-certificates', + 'de.martinreinhardt.cordova.plugins.sqlite' : 'cordova-plugin-sqlite', + 'fr.smile.cordova.fileopener' : 'cordova-plugin-fileopener', + 'org.smile.websqldatabase.initializer' : 'cordova-plugin-websqldatabase-initializer', + 'org.smile.websqldatabase.wpdb' : 'cordova-plugin-websqldatabase', + 'org.jboss.aerogear.cordova.push' : 'aerogear-cordova-push', + 'org.jboss.aerogear.cordova.oauth2' : 'aerogear-cordova-oauth2', + 'org.jboss.aerogear.cordova.geo' : 'aerogear-cordova-geo', + 'org.jboss.aerogear.cordova.crypto' : 'aerogear-cordova-crypto', + 'org.jboss.aerogaer.cordova.otp' : 'aerogear-cordova-otp', + 'uk.co.ilee.applewatch' : 'cordova-plugin-apple-watch', + 'uk.co.ilee.directions' : 'cordova-plugin-directions', + 'uk.co.ilee.gamecenter' : 'cordova-plugin-game-center', + 'uk.co.ilee.jailbreakdetection' : 'cordova-plugin-jailbreak-detection', + 'uk.co.ilee.nativetransitions' : 'cordova-plugin-native-transitions', + 'uk.co.ilee.pedometer' : 'cordova-plugin-pedometer', + 'uk.co.ilee.shake' : 'cordova-plugin-shake', + 'uk.co.ilee.touchid' : 'cordova-plugin-touchid', + 'com.knowledgecode.cordova.websocket' : 'cordova-plugin-websocket', + 'com.elixel.plugins.settings' : 'cordova-plugin-settings', + 'com.cowbell.cordova.geofence' : 'cordova-plugin-geofence', + 'com.blackberry.community.preventsleep' : 'cordova-plugin-preventsleep', + 'com.blackberry.community.gamepad' : 'cordova-plugin-gamepad', + 'com.blackberry.community.led' : 'cordova-plugin-led', + 'com.blackberry.community.thumbnail' : 'cordova-plugin-thumbnail', + 'com.blackberry.community.mediakeys' : 'cordova-plugin-mediakeys', + 'com.blackberry.community.simplebtlehrplugin' : 'cordova-plugin-bluetoothheartmonitor', + 'com.blackberry.community.simplebeaconplugin' : 'cordova-plugin-bluetoothibeacon', + 'com.blackberry.community.simplebtsppplugin' : 'cordova-plugin-bluetoothspp', + 'com.blackberry.community.clipboard' : 'cordova-plugin-clipboard', + 'com.blackberry.community.curl' : 'cordova-plugin-curl', + 'com.blackberry.community.qt' : 'cordova-plugin-qtbridge', + 'com.blackberry.community.upnp' : 'cordova-plugin-upnp', + 'com.blackberry.community.PasswordCrypto' : 'cordova-plugin-password-crypto', + 'com.blackberry.community.deviceinfoplugin' : 'cordova-plugin-deviceinfo', + 'com.blackberry.community.gsecrypto' : 'cordova-plugin-bb-crypto', + 'com.blackberry.community.mongoose' : 'cordova-plugin-mongoose', + 'com.blackberry.community.sysdialog' : 'cordova-plugin-bb-sysdialog', + 'com.blackberry.community.screendisplay' : 'cordova-plugin-screendisplay', + 'com.blackberry.community.messageplugin' : 'cordova-plugin-bb-messageretrieve', + 'com.blackberry.community.emailsenderplugin' : 'cordova-plugin-emailsender', + 'com.blackberry.community.audiometadata' : 'cordova-plugin-audiometadata', + 'com.blackberry.community.deviceemails' : 'cordova-plugin-deviceemails', + 'com.blackberry.community.audiorecorder' : 'cordova-plugin-audiorecorder', + 'com.blackberry.community.vibration' : 'cordova-plugin-vibrate-intense', + 'com.blackberry.community.SMSPlugin' : 'cordova-plugin-bb-sms', + 'com.blackberry.community.extractZipFile' : 'cordova-plugin-bb-zip', + 'com.blackberry.community.lowlatencyaudio' : 'cordova-plugin-bb-nativeaudio', + 'com.blackberry.community.barcodescanner' : 'phonegap-plugin-barcodescanner', + 'com.blackberry.app' : 'cordova-plugin-bb-app', + 'com.blackberry.bbm.platform' : 'cordova-plugin-bbm', + 'com.blackberry.connection' : 'cordova-plugin-bb-connection', + 'com.blackberry.identity' : 'cordova-plugin-bb-identity', + 'com.blackberry.invoke.card' : 'cordova-plugin-bb-card', + 'com.blackberry.invoke' : 'cordova-plugin-bb-invoke', + 'com.blackberry.invoked' : 'cordova-plugin-bb-invoked', + 'com.blackberry.io.filetransfer' : 'cordova-plugin-bb-filetransfer', + 'com.blackberry.io' : 'cordova-plugin-bb-io', + 'com.blackberry.notification' : 'cordova-plugin-bb-notification', + 'com.blackberry.payment' : 'cordova-plugin-bb-payment', + 'com.blackberry.pim.calendar' : 'cordova-plugin-bb-calendar', + 'com.blackberry.pim.contacts' : 'cordova-plugin-bb-contacts', + 'com.blackberry.pim.lib' : 'cordova-plugin-bb-pimlib', + 'com.blackberry.push' : 'cordova-plugin-bb-push', + 'com.blackberry.screenshot' : 'cordova-plugin-screenshot', + 'com.blackberry.sensors' : 'cordova-plugin-bb-sensors', + 'com.blackberry.system' : 'cordova-plugin-bb-system', + 'com.blackberry.ui.contextmenu' : 'cordova-plugin-bb-ctxmenu', + 'com.blackberry.ui.cover' : 'cordova-plugin-bb-cover', + 'com.blackberry.ui.dialog' : 'cordova-plugin-bb-dialog', + 'com.blackberry.ui.input' : 'cordova-plugin-touch-keyboard', + 'com.blackberry.ui.toast' : 'cordova-plugin-toast', + 'com.blackberry.user.identity' : 'cordova-plugin-bb-idservice', + 'com.blackberry.utils' : 'cordova-plugin-bb-utils', + 'net.yoik.cordova.plugins.screenorientation' : 'cordova-plugin-screen-orientation', + 'com.phonegap.plugins.barcodescanner' : 'phonegap-plugin-barcodescanner', + 'com.manifoldjs.hostedwebapp' : 'cordova-plugin-hostedwebapp', + 'com.initialxy.cordova.themeablebrowser' : 'cordova-plugin-themeablebrowser', + 'gr.denton.photosphere' : 'cordova-plugin-panoramaviewer', + 'nl.x-services.plugins.actionsheet' : 'cordova-plugin-actionsheet', + 'nl.x-services.plugins.socialsharing' : 'cordova-plugin-x-socialsharing', + 'nl.x-services.plugins.googleplus' : 'cordova-plugin-googleplus', + 'nl.x-services.plugins.insomnia' : 'cordova-plugin-insomnia', + 'nl.x-services.plugins.toast' : 'cordova-plugin-x-toast', + 'nl.x-services.plugins.calendar' : 'cordova-plugin-calendar', + 'nl.x-services.plugins.launchmyapp' : 'cordova-plugin-customurlscheme', + 'nl.x-services.plugins.flashlight' : 'cordova-plugin-flashlight', + 'nl.x-services.plugins.sslcertificatechecker' : 'cordova-plugin-sslcertificatechecker', + 'com.bridge.open' : 'cordova-open', + 'com.bridge.safe' : 'cordova-safe', + 'com.disusered.open' : 'cordova-open', + 'com.disusered.safe' : 'cordova-safe', + 'me.apla.cordova.app-preferences' : 'cordova-plugin-app-preferences', + 'com.konotor.cordova' : 'cordova-plugin-konotor', + 'io.intercom.cordova' : 'cordova-plugin-intercom', + 'com.onesignal.plugins.onesignal' : 'onesignal-cordova-plugin', + 'com.danjarvis.document-contract': 'cordova-plugin-document-contract', + 'com.eface2face.iosrtc' : 'cordova-plugin-iosrtc', + 'com.mobileapptracking.matplugin' : 'cordova-plugin-tune', + 'com.marianhello.cordova.background-geolocation' : 'cordova-plugin-mauron85-background-geolocation', + 'fr.louisbl.cordova.locationservices' : 'cordova-plugin-locationservices', + 'fr.louisbl.cordova.gpslocation' : 'cordova-plugin-gpslocation', + 'com.hiliaox.weibo' : 'cordova-plugin-weibo', + 'com.uxcam.cordova.plugin' : 'cordova-uxcam', + 'de.fastr.phonegap.plugins.downloader' : 'cordova-plugin-fastrde-downloader', + 'de.fastr.phonegap.plugins.injectView' : 'cordova-plugin-fastrde-injectview', + 'de.fastr.phonegap.plugins.CheckGPS' : 'cordova-plugin-fastrde-checkgps', + 'de.fastr.phonegap.plugins.md5chksum' : 'cordova-plugin-fastrde-md5', + 'io.repro.cordova' : 'cordova-plugin-repro', + 're.notifica.cordova': 'cordova-plugin-notificare-push', + 'com.megster.cordova.ble': 'cordova-plugin-ble-central', + 'com.megster.cordova.bluetoothserial': 'cordova-plugin-bluetooth-serial', + 'com.megster.cordova.rfduino': 'cordova-plugin-rfduino', + 'cz.velda.cordova.plugin.devicefeedback': 'cordova-plugin-velda-devicefeedback', + 'cz.Velda.cordova.plugin.devicefeedback': 'cordova-plugin-velda-devicefeedback', + 'org.scriptotek.appinfo': 'cordova-plugin-appinfo', + 'com.yezhiming.cordova.appinfo': 'cordova-plugin-appinfo', + 'pl.makingwaves.estimotebeacons': 'cordova-plugin-estimote', + 'com.evothings.ble': 'cordova-plugin-ble', + 'com.appsee.plugin' : 'cordova-plugin-appsee', + 'am.armsoft.plugins.listpicker': 'cordova-plugin-listpicker', + 'com.pushbots.push': 'pushbots-cordova-plugin', + 'com.admob.google': 'cordova-admob', + 'admob.ads.google': 'cordova-admob-ads', + 'admob.google.plugin': 'admob-google', + 'com.admob.admobads': 'admob-ads', + 'com.connectivity.monitor': 'cordova-connectivity-monitor', + 'com.ios.libgoogleadmobads': 'cordova-libgoogleadmobads', + 'com.google.play.services': 'cordova-google-play-services', + 'android.support.v13': 'cordova-android-support-v13', + 'android.support.v4': 'cordova-android-support-v4', // Duplicated key ;) + 'com.analytics.google': 'cordova-plugin-analytics', + 'com.analytics.adid.google': 'cordova-plugin-analytics-adid', + 'com.chariotsolutions.nfc.plugin': 'phonegap-nfc', + 'com.samz.mixpanel': 'cordova-plugin-mixpanel', + 'de.appplant.cordova.common.RegisterUserNotificationSettings': 'cordova-plugin-registerusernotificationsettings', + 'plugin.google.maps': 'cordova-plugin-googlemaps', + 'xu.li.cordova.wechat': 'cordova-plugin-wechat', + 'es.keensoft.fullscreenimage': 'cordova-plugin-fullscreenimage', + 'com.arcoirislabs.plugin.mqtt' : 'cordova-plugin-mqtt' +}; + +module.exports.oldToNew = map; + +var reverseMap = {}; +Object.keys(map).forEach(function(elem){ + reverseMap[map[elem]] = elem; +}); + +module.exports.newToOld = reverseMap; diff --git a/platforms/android/cordova/node_modules/cordova-registry-mapper/package.json b/platforms/android/cordova/node_modules/cordova-registry-mapper/package.json new file mode 100644 index 0000000..989efad --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-registry-mapper/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "cordova-registry-mapper@^1.1.8", + "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common" + ] + ], + "_from": "cordova-registry-mapper@>=1.1.8 <2.0.0", + "_id": "cordova-registry-mapper@1.1.15", + "_inCache": true, + "_installable": true, + "_location": "/cordova-registry-mapper", + "_nodeVersion": "5.4.1", + "_npmUser": { + "email": "stevengill97@gmail.com", + "name": "stevegill" + }, + "_npmVersion": "3.5.3", + "_phantomChildren": {}, + "_requested": { + "name": "cordova-registry-mapper", + "raw": "cordova-registry-mapper@^1.1.8", + "rawSpec": "^1.1.8", + "scope": null, + "spec": ">=1.1.8 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz", + "_shasum": "e244b9185b8175473bff6079324905115f83dc7c", + "_shrinkwrap": null, + "_spec": "cordova-registry-mapper@^1.1.8", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common", + "author": { + "name": "Steve Gill" + }, + "bugs": { + "url": "https://github.com/stevengill/cordova-registry-mapper/issues" + }, + "dependencies": {}, + "description": "Maps old plugin ids to new plugin names for fetching from npm", + "devDependencies": { + "tape": "^3.5.0" + }, + "directories": {}, + "dist": { + "shasum": "e244b9185b8175473bff6079324905115f83dc7c", + "tarball": "http://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz" + }, + "gitHead": "00af0f028ec94154a364eeabe38b8e22320647bd", + "homepage": "https://github.com/stevengill/cordova-registry-mapper#readme", + "keywords": [ + "cordova", + "plugins" + ], + "license": "Apache version 2.0", + "main": "index.js", + "maintainers": [ + { + "name": "stevegill", + "email": "stevengill97@gmail.com" + } + ], + "name": "cordova-registry-mapper", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/stevengill/cordova-registry-mapper.git" + }, + "scripts": { + "test": "node tests/test.js" + }, + "version": "1.1.15" +} diff --git a/platforms/android/cordova/node_modules/cordova-registry-mapper/tests/test.js b/platforms/android/cordova/node_modules/cordova-registry-mapper/tests/test.js new file mode 100644 index 0000000..35343be --- /dev/null +++ b/platforms/android/cordova/node_modules/cordova-registry-mapper/tests/test.js @@ -0,0 +1,11 @@ +var test = require('tape'); +var oldToNew = require('../index').oldToNew; +var newToOld = require('../index').newToOld; + +test('plugin mappings exist', function(t) { + t.plan(2); + + t.equal('cordova-plugin-device', oldToNew['org.apache.cordova.device']); + + t.equal('org.apache.cordova.device', newToOld['cordova-plugin-device']); +}) diff --git a/platforms/android/cordova/node_modules/elementtree/.npmignore b/platforms/android/cordova/node_modules/elementtree/.npmignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/platforms/android/cordova/node_modules/elementtree/.travis.yml b/platforms/android/cordova/node_modules/elementtree/.travis.yml new file mode 100644 index 0000000..6f27c96 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/.travis.yml @@ -0,0 +1,10 @@ +language: node_js + +node_js: + - 0.6 + +script: make test + +notifications: + email: + - tomaz+travisci@tomaz.me diff --git a/platforms/android/cordova/node_modules/elementtree/CHANGES.md b/platforms/android/cordova/node_modules/elementtree/CHANGES.md new file mode 100644 index 0000000..50d415d --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/CHANGES.md @@ -0,0 +1,39 @@ +elementtree v0.1.6 (in development) + +* Add support for CData elements. (#14) + [hermannpencole] + +elementtree v0.1.5 - 2012-11-14 + +* Fix a bug in the find() and findtext() method which could manifest itself + under some conditions. + [metagriffin] + +elementtree v0.1.4 - 2012-10-15 + +* Allow user to use namespaced attributes when using find* functions. + [Andrew Lunny] + +elementtree v0.1.3 - 2012-09-21 + +* Improve the output of text content in the tags (strip unnecessary line break + characters). + +[Darryl Pogue] + +elementtree v0.1.2 - 2012-09-04 + + * Allow user to pass 'indent' option to ElementTree.write method. If this + option is specified (e.g. {'indent': 4}). XML will be pretty printed. + [Darryl Pogue, Tomaz Muraus] + + * Bump sax dependency version. + +elementtree v0.1.1 - 2011-09-23 + + * Improve special character escaping. + [Ryan Phillips] + +elementtree v0.1.0 - 2011-09-05 + + * Initial release. diff --git a/platforms/android/cordova/node_modules/elementtree/LICENSE.txt b/platforms/android/cordova/node_modules/elementtree/LICENSE.txt new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/platforms/android/cordova/node_modules/elementtree/Makefile b/platforms/android/cordova/node_modules/elementtree/Makefile new file mode 100755 index 0000000..ab7c4e0 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/Makefile @@ -0,0 +1,21 @@ +TESTS := \ + tests/test-simple.js + + + +PATH := ./node_modules/.bin:$(PATH) + +WHISKEY := $(shell bash -c 'PATH=$(PATH) type -p whiskey') + +default: test + +test: + NODE_PATH=`pwd`/lib/ ${WHISKEY} --scope-leaks --sequential --real-time --tests "${TESTS}" + +tap: + NODE_PATH=`pwd`/lib/ ${WHISKEY} --test-reporter tap --sequential --real-time --tests "${TESTS}" + +coverage: + NODE_PATH=`pwd`/lib/ ${WHISKEY} --sequential --coverage --coverage-reporter html --coverage-dir coverage_html --tests "${TESTS}" + +.PHONY: default test coverage tap scope diff --git a/platforms/android/cordova/node_modules/elementtree/NOTICE b/platforms/android/cordova/node_modules/elementtree/NOTICE new file mode 100644 index 0000000..28ad70a --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/NOTICE @@ -0,0 +1,5 @@ +node-elementtree +Copyright (c) 2011, Rackspace, Inc. + +The ElementTree toolkit is Copyright (c) 1999-2007 by Fredrik Lundh + diff --git a/platforms/android/cordova/node_modules/elementtree/README.md b/platforms/android/cordova/node_modules/elementtree/README.md new file mode 100644 index 0000000..738420c --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/README.md @@ -0,0 +1,141 @@ +node-elementtree +==================== + +node-elementtree is a [Node.js](http://nodejs.org) XML parser and serializer based upon the [Python ElementTree v1.3](http://effbot.org/zone/element-index.htm) module. + +Installation +==================== + + $ npm install elementtree + +Using the library +==================== + +For the usage refer to the Python ElementTree library documentation - [http://effbot.org/zone/element-index.htm#usage](http://effbot.org/zone/element-index.htm#usage). + +Supported XPath expressions in `find`, `findall` and `findtext` methods are listed on [http://effbot.org/zone/element-xpath.htm](http://effbot.org/zone/element-xpath.htm). + +Example 1 – Creating An XML Document +==================== + +This example shows how to build a valid XML document that can be published to +Atom Hopper. Atom Hopper is used internally as a bridge from products all the +way to collecting revenue, called “Usage.†MaaS and other products send similar +events to it every time user performs an action on a resource +(e.g. creates,updates or deletes). Below is an example of leveraging the API +to create a new XML document. + +```javascript +var et = require('elementtree'); +var XML = et.XML; +var ElementTree = et.ElementTree; +var element = et.Element; +var subElement = et.SubElement; + +var date, root, tenantId, serviceName, eventType, usageId, dataCenter, region, +checks, resourceId, category, startTime, resourceName, etree, xml; + +date = new Date(); + +root = element('entry'); +root.set('xmlns', 'http://www.w3.org/2005/Atom'); + +tenantId = subElement(root, 'TenantId'); +tenantId.text = '12345'; + +serviceName = subElement(root, 'ServiceName'); +serviceName.text = 'MaaS'; + +resourceId = subElement(root, 'ResourceID'); +resourceId.text = 'enAAAA'; + +usageId = subElement(root, 'UsageID'); +usageId.text = '550e8400-e29b-41d4-a716-446655440000'; + +eventType = subElement(root, 'EventType'); +eventType.text = 'create'; + +category = subElement(root, 'category'); +category.set('term', 'monitoring.entity.create'); + +dataCenter = subElement(root, 'DataCenter'); +dataCenter.text = 'global'; + +region = subElement(root, 'Region'); +region.text = 'global'; + +startTime = subElement(root, 'StartTime'); +startTime.text = date; + +resourceName = subElement(root, 'ResourceName'); +resourceName.text = 'entity'; + +etree = new ElementTree(root); +xml = etree.write({'xml_declaration': false}); +console.log(xml); +``` + +As you can see, both et.Element and et.SubElement are factory methods which +return a new instance of Element and SubElement class, respectively. +When you create a new element (tag) you can use set method to set an attribute. +To set the tag value, assign a value to the .text attribute. + +This example would output a document that looks like this: + +```xml + + 12345 + MaaS + enAAAA + 550e8400-e29b-41d4-a716-446655440000 + create + + global + global + Sun Apr 29 2012 16:37:32 GMT-0700 (PDT) + entity + +``` + +Example 2 – Parsing An XML Document +==================== + +This example shows how to parse an XML document and use simple XPath selectors. +For demonstration purposes, we will use the XML document located at +https://gist.github.com/2554343. + +Behind the scenes, node-elementtree uses Isaac’s sax library for parsing XML, +but the library has a concept of “parsers,†which means it’s pretty simple to +add support for a different parser. + +```javascript +var fs = require('fs'); + +var et = require('elementtree'); + +var XML = et.XML; +var ElementTree = et.ElementTree; +var element = et.Element; +var subElement = et.SubElement; + +var data, etree; + +data = fs.readFileSync('document.xml').toString(); +etree = et.parse(data); + +console.log(etree.findall('./entry/TenantId').length); // 2 +console.log(etree.findtext('./entry/ServiceName')); // MaaS +console.log(etree.findall('./entry/category')[0].get('term')); // monitoring.entity.create +console.log(etree.findall('*/category/[@term="monitoring.entity.update"]').length); // 1 +``` + +Build status +==================== + +[![Build Status](https://secure.travis-ci.org/racker/node-elementtree.png)](http://travis-ci.org/racker/node-elementtree) + + +License +==================== + +node-elementtree is distributed under the [Apache license](http://www.apache.org/licenses/LICENSE-2.0.html). diff --git a/platforms/android/cordova/node_modules/elementtree/lib/constants.js b/platforms/android/cordova/node_modules/elementtree/lib/constants.js new file mode 100644 index 0000000..b057faf --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/constants.js @@ -0,0 +1,20 @@ +/* + * Copyright 2011 Rackspace + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +var DEFAULT_PARSER = 'sax'; + +exports.DEFAULT_PARSER = DEFAULT_PARSER; diff --git a/platforms/android/cordova/node_modules/elementtree/lib/elementpath.js b/platforms/android/cordova/node_modules/elementtree/lib/elementpath.js new file mode 100644 index 0000000..2e93f47 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/elementpath.js @@ -0,0 +1,343 @@ +/** + * Copyright 2011 Rackspace + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +var sprintf = require('./sprintf').sprintf; + +var utils = require('./utils'); +var SyntaxError = require('./errors').SyntaxError; + +var _cache = {}; + +var RE = new RegExp( + "(" + + "'[^']*'|\"[^\"]*\"|" + + "::|" + + "//?|" + + "\\.\\.|" + + "\\(\\)|" + + "[/.*:\\[\\]\\(\\)@=])|" + + "((?:\\{[^}]+\\})?[^/\\[\\]\\(\\)@=\\s]+)|" + + "\\s+", 'g' +); + +var xpath_tokenizer = utils.findall.bind(null, RE); + +function prepare_tag(next, token) { + var tag = token[0]; + + function select(context, result) { + var i, len, elem, rv = []; + + for (i = 0, len = result.length; i < len; i++) { + elem = result[i]; + elem._children.forEach(function(e) { + if (e.tag === tag) { + rv.push(e); + } + }); + } + + return rv; + } + + return select; +} + +function prepare_star(next, token) { + function select(context, result) { + var i, len, elem, rv = []; + + for (i = 0, len = result.length; i < len; i++) { + elem = result[i]; + elem._children.forEach(function(e) { + rv.push(e); + }); + } + + return rv; + } + + return select; +} + +function prepare_dot(next, token) { + function select(context, result) { + var i, len, elem, rv = []; + + for (i = 0, len = result.length; i < len; i++) { + elem = result[i]; + rv.push(elem); + } + + return rv; + } + + return select; +} + +function prepare_iter(next, token) { + var tag; + token = next(); + + if (token[1] === '*') { + tag = '*'; + } + else if (!token[1]) { + tag = token[0] || ''; + } + else { + throw new SyntaxError(token); + } + + function select(context, result) { + var i, len, elem, rv = []; + + for (i = 0, len = result.length; i < len; i++) { + elem = result[i]; + elem.iter(tag, function(e) { + if (e !== elem) { + rv.push(e); + } + }); + } + + return rv; + } + + return select; +} + +function prepare_dot_dot(next, token) { + function select(context, result) { + var i, len, elem, rv = [], parent_map = context.parent_map; + + if (!parent_map) { + context.parent_map = parent_map = {}; + + context.root.iter(null, function(p) { + p._children.forEach(function(e) { + parent_map[e] = p; + }); + }); + } + + for (i = 0, len = result.length; i < len; i++) { + elem = result[i]; + + if (parent_map.hasOwnProperty(elem)) { + rv.push(parent_map[elem]); + } + } + + return rv; + } + + return select; +} + + +function prepare_predicate(next, token) { + var tag, key, value, select; + token = next(); + + if (token[1] === '@') { + // attribute + token = next(); + + if (token[1]) { + throw new SyntaxError(token, 'Invalid attribute predicate'); + } + + key = token[0]; + token = next(); + + if (token[1] === ']') { + select = function(context, result) { + var i, len, elem, rv = []; + + for (i = 0, len = result.length; i < len; i++) { + elem = result[i]; + + if (elem.get(key)) { + rv.push(elem); + } + } + + return rv; + }; + } + else if (token[1] === '=') { + value = next()[1]; + + if (value[0] === '"' || value[value.length - 1] === '\'') { + value = value.slice(1, value.length - 1); + } + else { + throw new SyntaxError(token, 'Ivalid comparison target'); + } + + token = next(); + select = function(context, result) { + var i, len, elem, rv = []; + + for (i = 0, len = result.length; i < len; i++) { + elem = result[i]; + + if (elem.get(key) === value) { + rv.push(elem); + } + } + + return rv; + }; + } + + if (token[1] !== ']') { + throw new SyntaxError(token, 'Invalid attribute predicate'); + } + } + else if (!token[1]) { + tag = token[0] || ''; + token = next(); + + if (token[1] !== ']') { + throw new SyntaxError(token, 'Invalid node predicate'); + } + + select = function(context, result) { + var i, len, elem, rv = []; + + for (i = 0, len = result.length; i < len; i++) { + elem = result[i]; + + if (elem.find(tag)) { + rv.push(elem); + } + } + + return rv; + }; + } + else { + throw new SyntaxError(null, 'Invalid predicate'); + } + + return select; +} + + + +var ops = { + "": prepare_tag, + "*": prepare_star, + ".": prepare_dot, + "..": prepare_dot_dot, + "//": prepare_iter, + "[": prepare_predicate, +}; + +function _SelectorContext(root) { + this.parent_map = null; + this.root = root; +} + +function findall(elem, path) { + var selector, result, i, len, token, value, select, context; + + if (_cache.hasOwnProperty(path)) { + selector = _cache[path]; + } + else { + // TODO: Use smarter cache purging approach + if (Object.keys(_cache).length > 100) { + _cache = {}; + } + + if (path.charAt(0) === '/') { + throw new SyntaxError(null, 'Cannot use absolute path on element'); + } + + result = xpath_tokenizer(path); + selector = []; + + function getToken() { + return result.shift(); + } + + token = getToken(); + while (true) { + var c = token[1] || ''; + value = ops[c](getToken, token); + + if (!value) { + throw new SyntaxError(null, sprintf('Invalid path: %s', path)); + } + + selector.push(value); + token = getToken(); + + if (!token) { + break; + } + else if (token[1] === '/') { + token = getToken(); + } + + if (!token) { + break; + } + } + + _cache[path] = selector; + } + + // Execute slector pattern + result = [elem]; + context = new _SelectorContext(elem); + + for (i = 0, len = selector.length; i < len; i++) { + select = selector[i]; + result = select(context, result); + } + + return result || []; +} + +function find(element, path) { + var resultElements = findall(element, path); + + if (resultElements && resultElements.length > 0) { + return resultElements[0]; + } + + return null; +} + +function findtext(element, path, defvalue) { + var resultElements = findall(element, path); + + if (resultElements && resultElements.length > 0) { + return resultElements[0].text; + } + + return defvalue; +} + + +exports.find = find; +exports.findall = findall; +exports.findtext = findtext; diff --git a/platforms/android/cordova/node_modules/elementtree/lib/elementtree.js b/platforms/android/cordova/node_modules/elementtree/lib/elementtree.js new file mode 100644 index 0000000..61d9276 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/elementtree.js @@ -0,0 +1,611 @@ +/** + * Copyright 2011 Rackspace + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +var sprintf = require('./sprintf').sprintf; + +var utils = require('./utils'); +var ElementPath = require('./elementpath'); +var TreeBuilder = require('./treebuilder').TreeBuilder; +var get_parser = require('./parser').get_parser; +var constants = require('./constants'); + +var element_ids = 0; + +function Element(tag, attrib) +{ + this._id = element_ids++; + this.tag = tag; + this.attrib = {}; + this.text = null; + this.tail = null; + this._children = []; + + if (attrib) { + this.attrib = utils.merge(this.attrib, attrib); + } +} + +Element.prototype.toString = function() +{ + return sprintf("", this.tag, this._id); +}; + +Element.prototype.makeelement = function(tag, attrib) +{ + return new Element(tag, attrib); +}; + +Element.prototype.len = function() +{ + return this._children.length; +}; + +Element.prototype.getItem = function(index) +{ + return this._children[index]; +}; + +Element.prototype.setItem = function(index, element) +{ + this._children[index] = element; +}; + +Element.prototype.delItem = function(index) +{ + this._children.splice(index, 1); +}; + +Element.prototype.getSlice = function(start, stop) +{ + return this._children.slice(start, stop); +}; + +Element.prototype.setSlice = function(start, stop, elements) +{ + var i; + var k = 0; + for (i = start; i < stop; i++, k++) { + this._children[i] = elements[k]; + } +}; + +Element.prototype.delSlice = function(start, stop) +{ + this._children.splice(start, stop - start); +}; + +Element.prototype.append = function(element) +{ + this._children.push(element); +}; + +Element.prototype.extend = function(elements) +{ + this._children.concat(elements); +}; + +Element.prototype.insert = function(index, element) +{ + this._children[index] = element; +}; + +Element.prototype.remove = function(element) +{ + this._children = this._children.filter(function(e) { + /* TODO: is this the right way to do this? */ + if (e._id === element._id) { + return false; + } + return true; + }); +}; + +Element.prototype.getchildren = function() { + return this._children; +}; + +Element.prototype.find = function(path) +{ + return ElementPath.find(this, path); +}; + +Element.prototype.findtext = function(path, defvalue) +{ + return ElementPath.findtext(this, path, defvalue); +}; + +Element.prototype.findall = function(path, defvalue) +{ + return ElementPath.findall(this, path, defvalue); +}; + +Element.prototype.clear = function() +{ + this.attrib = {}; + this._children = []; + this.text = null; + this.tail = null; +}; + +Element.prototype.get = function(key, defvalue) +{ + if (this.attrib[key] !== undefined) { + return this.attrib[key]; + } + else { + return defvalue; + } +}; + +Element.prototype.set = function(key, value) +{ + this.attrib[key] = value; +}; + +Element.prototype.keys = function() +{ + return Object.keys(this.attrib); +}; + +Element.prototype.items = function() +{ + return utils.items(this.attrib); +}; + +/* + * In python this uses a generator, but in v8 we don't have em, + * so we use a callback instead. + **/ +Element.prototype.iter = function(tag, callback) +{ + var self = this; + var i, child; + + if (tag === "*") { + tag = null; + } + + if (tag === null || this.tag === tag) { + callback(self); + } + + for (i = 0; i < this._children.length; i++) { + child = this._children[i]; + child.iter(tag, function(e) { + callback(e); + }); + } +}; + +Element.prototype.itertext = function(callback) +{ + this.iter(null, function(e) { + if (e.text) { + callback(e.text); + } + + if (e.tail) { + callback(e.tail); + } + }); +}; + + +function SubElement(parent, tag, attrib) { + var element = parent.makeelement(tag, attrib); + parent.append(element); + return element; +} + +function Comment(text) { + var element = new Element(Comment); + if (text) { + element.text = text; + } + return element; +} + +function CData(text) { + var element = new Element(CData); + if (text) { + element.text = text; + } + return element; +} + +function ProcessingInstruction(target, text) +{ + var element = new Element(ProcessingInstruction); + element.text = target; + if (text) { + element.text = element.text + " " + text; + } + return element; +} + +function QName(text_or_uri, tag) +{ + if (tag) { + text_or_uri = sprintf("{%s}%s", text_or_uri, tag); + } + this.text = text_or_uri; +} + +QName.prototype.toString = function() { + return this.text; +}; + +function ElementTree(element) +{ + this._root = element; +} + +ElementTree.prototype.getroot = function() { + return this._root; +}; + +ElementTree.prototype._setroot = function(element) { + this._root = element; +}; + +ElementTree.prototype.parse = function(source, parser) { + if (!parser) { + parser = get_parser(constants.DEFAULT_PARSER); + parser = new parser.XMLParser(new TreeBuilder()); + } + + parser.feed(source); + this._root = parser.close(); + return this._root; +}; + +ElementTree.prototype.iter = function(tag, callback) { + this._root.iter(tag, callback); +}; + +ElementTree.prototype.find = function(path) { + return this._root.find(path); +}; + +ElementTree.prototype.findtext = function(path, defvalue) { + return this._root.findtext(path, defvalue); +}; + +ElementTree.prototype.findall = function(path) { + return this._root.findall(path); +}; + +/** + * Unlike ElementTree, we don't write to a file, we return you a string. + */ +ElementTree.prototype.write = function(options) { + var sb = []; + options = utils.merge({ + encoding: 'utf-8', + xml_declaration: null, + default_namespace: null, + method: 'xml'}, options); + + if (options.xml_declaration !== false) { + sb.push("\n"); + } + + if (options.method === "text") { + _serialize_text(sb, self._root, encoding); + } + else { + var qnames, namespaces, indent, indent_string; + var x = _namespaces(this._root, options.encoding, options.default_namespace); + qnames = x[0]; + namespaces = x[1]; + + if (options.hasOwnProperty('indent')) { + indent = 0; + indent_string = new Array(options.indent + 1).join(' '); + } + else { + indent = false; + } + + if (options.method === "xml") { + _serialize_xml(function(data) { + sb.push(data); + }, this._root, options.encoding, qnames, namespaces, indent, indent_string); + } + else { + /* TODO: html */ + throw new Error("unknown serialization method "+ options.method); + } + } + + return sb.join(""); +}; + +var _namespace_map = { + /* "well-known" namespace prefixes */ + "http://www.w3.org/XML/1998/namespace": "xml", + "http://www.w3.org/1999/xhtml": "html", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf", + "http://schemas.xmlsoap.org/wsdl/": "wsdl", + /* xml schema */ + "http://www.w3.org/2001/XMLSchema": "xs", + "http://www.w3.org/2001/XMLSchema-instance": "xsi", + /* dublic core */ + "http://purl.org/dc/elements/1.1/": "dc", +}; + +function register_namespace(prefix, uri) { + if (/ns\d+$/.test(prefix)) { + throw new Error('Prefix format reserved for internal use'); + } + + if (_namespace_map.hasOwnProperty(uri) && _namespace_map[uri] === prefix) { + delete _namespace_map[uri]; + } + + _namespace_map[uri] = prefix; +} + + +function _escape(text, encoding, isAttribute, isText) { + if (text) { + text = text.toString(); + text = text.replace(/&/g, '&'); + text = text.replace(//g, '>'); + if (!isText) { + text = text.replace(/\n/g, ' '); + text = text.replace(/\r/g, ' '); + } + if (isAttribute) { + text = text.replace(/"/g, '"'); + } + } + return text; +} + +/* TODO: benchmark single regex */ +function _escape_attrib(text, encoding) { + return _escape(text, encoding, true); +} + +function _escape_cdata(text, encoding) { + return _escape(text, encoding, false); +} + +function _escape_text(text, encoding) { + return _escape(text, encoding, false, true); +} + +function _namespaces(elem, encoding, default_namespace) { + var qnames = {}; + var namespaces = {}; + + if (default_namespace) { + namespaces[default_namespace] = ""; + } + + function encode(text) { + return text; + } + + function add_qname(qname) { + if (qname[0] === "{") { + var tmp = qname.substring(1).split("}", 2); + var uri = tmp[0]; + var tag = tmp[1]; + var prefix = namespaces[uri]; + + if (prefix === undefined) { + prefix = _namespace_map[uri]; + if (prefix === undefined) { + prefix = "ns" + Object.keys(namespaces).length; + } + if (prefix !== "xml") { + namespaces[uri] = prefix; + } + } + + if (prefix) { + qnames[qname] = sprintf("%s:%s", prefix, tag); + } + else { + qnames[qname] = tag; + } + } + else { + if (default_namespace) { + throw new Error('cannot use non-qualified names with default_namespace option'); + } + + qnames[qname] = qname; + } + } + + + elem.iter(null, function(e) { + var i; + var tag = e.tag; + var text = e.text; + var items = e.items(); + + if (tag instanceof QName && qnames[tag.text] === undefined) { + add_qname(tag.text); + } + else if (typeof(tag) === "string") { + add_qname(tag); + } + else if (tag !== null && tag !== Comment && tag !== CData && tag !== ProcessingInstruction) { + throw new Error('Invalid tag type for serialization: '+ tag); + } + + if (text instanceof QName && qnames[text.text] === undefined) { + add_qname(text.text); + } + + items.forEach(function(item) { + var key = item[0], + value = item[1]; + if (key instanceof QName) { + key = key.text; + } + + if (qnames[key] === undefined) { + add_qname(key); + } + + if (value instanceof QName && qnames[value.text] === undefined) { + add_qname(value.text); + } + }); + }); + return [qnames, namespaces]; +} + +function _serialize_xml(write, elem, encoding, qnames, namespaces, indent, indent_string) { + var tag = elem.tag; + var text = elem.text; + var items; + var i; + + var newlines = indent || (indent === 0); + write(Array(indent + 1).join(indent_string)); + + if (tag === Comment) { + write(sprintf("", _escape_cdata(text, encoding))); + } + else if (tag === ProcessingInstruction) { + write(sprintf("", _escape_cdata(text, encoding))); + } + else if (tag === CData) { + text = text || ''; + write(sprintf("", text)); + } + else { + tag = qnames[tag]; + if (tag === undefined) { + if (text) { + write(_escape_text(text, encoding)); + } + elem.iter(function(e) { + _serialize_xml(write, e, encoding, qnames, null, newlines ? indent + 1 : false, indent_string); + }); + } + else { + write("<" + tag); + items = elem.items(); + + if (items || namespaces) { + items.sort(); // lexical order + + items.forEach(function(item) { + var k = item[0], + v = item[1]; + + if (k instanceof QName) { + k = k.text; + } + + if (v instanceof QName) { + v = qnames[v.text]; + } + else { + v = _escape_attrib(v, encoding); + } + write(sprintf(" %s=\"%s\"", qnames[k], v)); + }); + + if (namespaces) { + items = utils.items(namespaces); + items.sort(function(a, b) { return a[1] < b[1]; }); + + items.forEach(function(item) { + var k = item[1], + v = item[0]; + + if (k) { + k = ':' + k; + } + + write(sprintf(" xmlns%s=\"%s\"", k, _escape_attrib(v, encoding))); + }); + } + } + + if (text || elem.len()) { + if (text && text.toString().match(/^\s*$/)) { + text = null; + } + + write(">"); + if (!text && newlines) { + write("\n"); + } + + if (text) { + write(_escape_text(text, encoding)); + } + elem._children.forEach(function(e) { + _serialize_xml(write, e, encoding, qnames, null, newlines ? indent + 1 : false, indent_string); + }); + + if (!text && indent) { + write(Array(indent + 1).join(indent_string)); + } + write(""); + } + else { + write(" />"); + } + } + } + + if (newlines) { + write("\n"); + } +} + +function parse(source, parser) { + var tree = new ElementTree(); + tree.parse(source, parser); + return tree; +} + +function tostring(element, options) { + return new ElementTree(element).write(options); +} + +exports.PI = ProcessingInstruction; +exports.Comment = Comment; +exports.CData = CData; +exports.ProcessingInstruction = ProcessingInstruction; +exports.SubElement = SubElement; +exports.QName = QName; +exports.ElementTree = ElementTree; +exports.ElementPath = ElementPath; +exports.Element = function(tag, attrib) { + return new Element(tag, attrib); +}; + +exports.XML = function(data) { + var et = new ElementTree(); + return et.parse(data); +}; + +exports.parse = parse; +exports.register_namespace = register_namespace; +exports.tostring = tostring; diff --git a/platforms/android/cordova/node_modules/elementtree/lib/errors.js b/platforms/android/cordova/node_modules/elementtree/lib/errors.js new file mode 100644 index 0000000..e8742be --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/errors.js @@ -0,0 +1,31 @@ +/** + * Copyright 2011 Rackspace + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +var util = require('util'); + +var sprintf = require('./sprintf').sprintf; + +function SyntaxError(token, msg) { + msg = msg || sprintf('Syntax Error at token %s', token.toString()); + this.token = token; + this.message = msg; + Error.call(this, msg); +} + +util.inherits(SyntaxError, Error); + +exports.SyntaxError = SyntaxError; diff --git a/platforms/android/cordova/node_modules/elementtree/lib/parser.js b/platforms/android/cordova/node_modules/elementtree/lib/parser.js new file mode 100644 index 0000000..7307ee4 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/parser.js @@ -0,0 +1,33 @@ +/* + * Copyright 2011 Rackspace + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/* TODO: support node-expat C++ module optionally */ + +var util = require('util'); +var parsers = require('./parsers/index'); + +function get_parser(name) { + if (name === 'sax') { + return parsers.sax; + } + else { + throw new Error('Invalid parser: ' + name); + } +} + + +exports.get_parser = get_parser; diff --git a/platforms/android/cordova/node_modules/elementtree/lib/parsers/index.js b/platforms/android/cordova/node_modules/elementtree/lib/parsers/index.js new file mode 100644 index 0000000..5eac5c8 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/parsers/index.js @@ -0,0 +1 @@ +exports.sax = require('./sax'); diff --git a/platforms/android/cordova/node_modules/elementtree/lib/parsers/sax.js b/platforms/android/cordova/node_modules/elementtree/lib/parsers/sax.js new file mode 100644 index 0000000..69b0a59 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/parsers/sax.js @@ -0,0 +1,56 @@ +var util = require('util'); + +var sax = require('sax'); + +var TreeBuilder = require('./../treebuilder').TreeBuilder; + +function XMLParser(target) { + this.parser = sax.parser(true); + + this.target = (target) ? target : new TreeBuilder(); + + this.parser.onopentag = this._handleOpenTag.bind(this); + this.parser.ontext = this._handleText.bind(this); + this.parser.oncdata = this._handleCdata.bind(this); + this.parser.ondoctype = this._handleDoctype.bind(this); + this.parser.oncomment = this._handleComment.bind(this); + this.parser.onclosetag = this._handleCloseTag.bind(this); + this.parser.onerror = this._handleError.bind(this); +} + +XMLParser.prototype._handleOpenTag = function(tag) { + this.target.start(tag.name, tag.attributes); +}; + +XMLParser.prototype._handleText = function(text) { + this.target.data(text); +}; + +XMLParser.prototype._handleCdata = function(text) { + this.target.data(text); +}; + +XMLParser.prototype._handleDoctype = function(text) { +}; + +XMLParser.prototype._handleComment = function(comment) { +}; + +XMLParser.prototype._handleCloseTag = function(tag) { + this.target.end(tag); +}; + +XMLParser.prototype._handleError = function(err) { + throw err; +}; + +XMLParser.prototype.feed = function(chunk) { + this.parser.write(chunk); +}; + +XMLParser.prototype.close = function() { + this.parser.close(); + return this.target.close(); +}; + +exports.XMLParser = XMLParser; diff --git a/platforms/android/cordova/node_modules/elementtree/lib/sprintf.js b/platforms/android/cordova/node_modules/elementtree/lib/sprintf.js new file mode 100644 index 0000000..f802c1b --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/sprintf.js @@ -0,0 +1,86 @@ +/* + * Copyright 2011 Rackspace + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +var cache = {}; + + +// Do any others need escaping? +var TO_ESCAPE = { + '\'': '\\\'', + '\n': '\\n' +}; + + +function populate(formatter) { + var i, type, + key = formatter, + prev = 0, + arg = 1, + builder = 'return \''; + + for (i = 0; i < formatter.length; i++) { + if (formatter[i] === '%') { + type = formatter[i + 1]; + + switch (type) { + case 's': + builder += formatter.slice(prev, i) + '\' + arguments[' + arg + '] + \''; + prev = i + 2; + arg++; + break; + case 'j': + builder += formatter.slice(prev, i) + '\' + JSON.stringify(arguments[' + arg + ']) + \''; + prev = i + 2; + arg++; + break; + case '%': + builder += formatter.slice(prev, i + 1); + prev = i + 2; + i++; + break; + } + + + } else if (TO_ESCAPE[formatter[i]]) { + builder += formatter.slice(prev, i) + TO_ESCAPE[formatter[i]]; + prev = i + 1; + } + } + + builder += formatter.slice(prev) + '\';'; + cache[key] = new Function(builder); +} + + +/** + * A fast version of sprintf(), which currently only supports the %s and %j. + * This caches a formatting function for each format string that is used, so + * you should only use this sprintf() will be called many times with a single + * format string and a limited number of format strings will ever be used (in + * general this means that format strings should be string literals). + * + * @param {String} formatter A format string. + * @param {...String} var_args Values that will be formatted by %s and %j. + * @return {String} The formatted output. + */ +exports.sprintf = function(formatter, var_args) { + if (!cache[formatter]) { + populate(formatter); + } + + return cache[formatter].apply(null, arguments); +}; diff --git a/platforms/android/cordova/node_modules/elementtree/lib/treebuilder.js b/platforms/android/cordova/node_modules/elementtree/lib/treebuilder.js new file mode 100644 index 0000000..393a98f --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/treebuilder.js @@ -0,0 +1,60 @@ +function TreeBuilder(element_factory) { + this._data = []; + this._elem = []; + this._last = null; + this._tail = null; + if (!element_factory) { + /* evil circular dep */ + element_factory = require('./elementtree').Element; + } + this._factory = element_factory; +} + +TreeBuilder.prototype.close = function() { + return this._last; +}; + +TreeBuilder.prototype._flush = function() { + if (this._data) { + if (this._last !== null) { + var text = this._data.join(""); + if (this._tail) { + this._last.tail = text; + } + else { + this._last.text = text; + } + } + this._data = []; + } +}; + +TreeBuilder.prototype.data = function(data) { + this._data.push(data); +}; + +TreeBuilder.prototype.start = function(tag, attrs) { + this._flush(); + var elem = this._factory(tag, attrs); + this._last = elem; + + if (this._elem.length) { + this._elem[this._elem.length - 1].append(elem); + } + + this._elem.push(elem); + + this._tail = null; +}; + +TreeBuilder.prototype.end = function(tag) { + this._flush(); + this._last = this._elem.pop(); + if (this._last.tag !== tag) { + throw new Error("end tag mismatch"); + } + this._tail = 1; + return this._last; +}; + +exports.TreeBuilder = TreeBuilder; diff --git a/platforms/android/cordova/node_modules/elementtree/lib/utils.js b/platforms/android/cordova/node_modules/elementtree/lib/utils.js new file mode 100644 index 0000000..b08a670 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/lib/utils.js @@ -0,0 +1,72 @@ +/** + * Copyright 2011 Rackspace + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/** + * @param {Object} hash. + * @param {Array} ignored. + */ +function items(hash, ignored) { + ignored = ignored || null; + var k, rv = []; + + function is_ignored(key) { + if (!ignored || ignored.length === 0) { + return false; + } + + return ignored.indexOf(key); + } + + for (k in hash) { + if (hash.hasOwnProperty(k) && !(is_ignored(ignored))) { + rv.push([k, hash[k]]); + } + } + + return rv; +} + + +function findall(re, str) { + var match, matches = []; + + while ((match = re.exec(str))) { + matches.push(match); + } + + return matches; +} + +function merge(a, b) { + var c = {}, attrname; + + for (attrname in a) { + if (a.hasOwnProperty(attrname)) { + c[attrname] = a[attrname]; + } + } + for (attrname in b) { + if (b.hasOwnProperty(attrname)) { + c[attrname] = b[attrname]; + } + } + return c; +} + +exports.items = items; +exports.findall = findall; +exports.merge = merge; diff --git a/platforms/android/cordova/node_modules/elementtree/package.json b/platforms/android/cordova/node_modules/elementtree/package.json new file mode 100644 index 0000000..f1a5f14 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/package.json @@ -0,0 +1,101 @@ +{ + "_args": [ + [ + "elementtree@^0.1.6", + "/Users/steveng/repo/cordova/cordova-android" + ] + ], + "_from": "elementtree@>=0.1.6 <0.2.0", + "_id": "elementtree@0.1.6", + "_inCache": true, + "_installable": true, + "_location": "/elementtree", + "_npmUser": { + "email": "ryan@trolocsis.com", + "name": "rphillips" + }, + "_npmVersion": "1.3.24", + "_phantomChildren": {}, + "_requested": { + "name": "elementtree", + "raw": "elementtree@^0.1.6", + "rawSpec": "^0.1.6", + "scope": null, + "spec": ">=0.1.6 <0.2.0", + "type": "range" + }, + "_requiredBy": [ + "/", + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz", + "_shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c", + "_shrinkwrap": null, + "_spec": "elementtree@^0.1.6", + "_where": "/Users/steveng/repo/cordova/cordova-android", + "author": { + "name": "Rackspace US, Inc." + }, + "bugs": { + "url": "https://github.com/racker/node-elementtree/issues" + }, + "contributors": [ + { + "name": "Paul Querna", + "email": "paul.querna@rackspace.com" + }, + { + "name": "Tomaz Muraus", + "email": "tomaz.muraus@rackspace.com" + } + ], + "dependencies": { + "sax": "0.3.5" + }, + "description": "XML Serialization and Parsing module based on Python's ElementTree.", + "devDependencies": { + "whiskey": "0.8.x" + }, + "directories": { + "lib": "lib" + }, + "dist": { + "shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c", + "tarball": "http://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz" + }, + "engines": { + "node": ">= 0.4.0" + }, + "homepage": "https://github.com/racker/node-elementtree", + "keywords": [ + "elementtree", + "parser", + "sax", + "seralization", + "xml" + ], + "licenses": [ + { + "type": "Apache", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + } + ], + "main": "lib/elementtree.js", + "maintainers": [ + { + "name": "rphillips", + "email": "ryan@trolocsis.com" + } + ], + "name": "elementtree", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/racker/node-elementtree.git" + }, + "scripts": { + "test": "make test" + }, + "version": "0.1.6" +} diff --git a/platforms/android/cordova/node_modules/elementtree/tests/data/xml1.xml b/platforms/android/cordova/node_modules/elementtree/tests/data/xml1.xml new file mode 100644 index 0000000..72c33ae --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/tests/data/xml1.xml @@ -0,0 +1,17 @@ + + + dd + test_object_1 + 4281c348eaf83e70ddce0e07221c3d28 + 14 + application/octetstream + 2009-02-03T05:26:32.612278 + + + test_object_2 + b039efe731ad111bc1b0ef221c3849d0 + 64 + application/octetstream + 2009-02-03T05:26:32.612278 + + diff --git a/platforms/android/cordova/node_modules/elementtree/tests/data/xml2.xml b/platforms/android/cordova/node_modules/elementtree/tests/data/xml2.xml new file mode 100644 index 0000000..5f94bbd --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/tests/data/xml2.xml @@ -0,0 +1,14 @@ + + + + Hello World + + + + + + + + diff --git a/platforms/android/cordova/node_modules/elementtree/tests/test-simple.js b/platforms/android/cordova/node_modules/elementtree/tests/test-simple.js new file mode 100644 index 0000000..1fc04b8 --- /dev/null +++ b/platforms/android/cordova/node_modules/elementtree/tests/test-simple.js @@ -0,0 +1,339 @@ +/** + * Copyright 2011 Rackspace + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +var fs = require('fs'); +var path = require('path'); + +var sprintf = require('./../lib/sprintf').sprintf; +var et = require('elementtree'); +var XML = et.XML; +var ElementTree = et.ElementTree; +var Element = et.Element; +var SubElement = et.SubElement; +var SyntaxError = require('./../lib/errors').SyntaxError; + +function readFile(name) { + return fs.readFileSync(path.join(__dirname, '/data/', name), 'utf8'); +} + +exports['test_simplest'] = function(test, assert) { + /* Ported from */ + var Element = et.Element; + var root = Element('root'); + root.append(Element('one')); + root.append(Element('two')); + root.append(Element('three')); + assert.equal(3, root.len()); + assert.equal('one', root.getItem(0).tag); + assert.equal('two', root.getItem(1).tag); + assert.equal('three', root.getItem(2).tag); + test.finish(); +}; + + +exports['test_attribute_values'] = function(test, assert) { + var XML = et.XML; + var root = XML(''); + assert.equal('Alpha', root.attrib['alpha']); + assert.equal('Beta', root.attrib['beta']); + assert.equal('Gamma', root.attrib['gamma']); + test.finish(); +}; + + +exports['test_findall'] = function(test, assert) { + var XML = et.XML; + var root = XML(''); + + assert.equal(root.findall("c").length, 1); + assert.equal(root.findall(".//c").length, 2); + assert.equal(root.findall(".//b").length, 3); + assert.equal(root.findall(".//b")[0]._children.length, 1); + assert.equal(root.findall(".//b")[1]._children.length, 0); + assert.equal(root.findall(".//b")[2]._children.length, 0); + assert.deepEqual(root.findall('.//b')[0], root.getchildren()[0]); + + test.finish(); +}; + +exports['test_find'] = function(test, assert) { + var a = Element('a'); + var b = SubElement(a, 'b'); + var c = SubElement(a, 'c'); + + assert.deepEqual(a.find('./b/..'), a); + test.finish(); +}; + +exports['test_elementtree_find_qname'] = function(test, assert) { + var tree = new et.ElementTree(XML('')); + assert.deepEqual(tree.find(new et.QName('c')), tree.getroot()._children[2]); + test.finish(); +}; + +exports['test_attrib_ns_clear'] = function(test, assert) { + var attribNS = '{http://foo/bar}x'; + + var par = Element('par'); + par.set(attribNS, 'a'); + var child = SubElement(par, 'child'); + child.set(attribNS, 'b'); + + assert.equal('a', par.get(attribNS)); + assert.equal('b', child.get(attribNS)); + + par.clear(); + assert.equal(null, par.get(attribNS)); + assert.equal('b', child.get(attribNS)); + test.finish(); +}; + +exports['test_create_tree_and_parse_simple'] = function(test, assert) { + var i = 0; + var e = new Element('bar', {}); + var expected = "\n" + + 'ponies'; + + SubElement(e, "blah", {a: 11}); + SubElement(e, "blah", {a: 12}); + var se = et.SubElement(e, "gag", {a: '13', b: 'abc'}); + se.text = 'ponies'; + + se.itertext(function(text) { + assert.equal(text, 'ponies'); + i++; + }); + + assert.equal(i, 1); + var etree = new ElementTree(e); + var xml = etree.write(); + assert.equal(xml, expected); + test.finish(); +}; + +exports['test_write_with_options'] = function(test, assert) { + var i = 0; + var e = new Element('bar', {}); + var expected1 = "\n" + + '\n' + + ' \n' + + ' test\n' + + ' \n' + + ' \n' + + ' ponies\n' + + '\n'; + var expected2 = "\n" + + '\n' + + ' \n' + + ' test\n' + + ' \n' + + ' \n' + + ' ponies\n' + + '\n'; + + var expected3 = "\n" + + '\n' + + ' \n' + + ' Hello World\n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' Test & Test & Test\n' + + ' \n' + + '\n'; + + var se1 = SubElement(e, "blah", {a: 11}); + var se2 = SubElement(se1, "baz", {d: 11}); + se2.text = 'test'; + SubElement(e, "blah", {a: 12}); + var se = et.SubElement(e, "gag", {a: '13', b: 'abc'}); + se.text = 'ponies'; + + se.itertext(function(text) { + assert.equal(text, 'ponies'); + i++; + }); + + assert.equal(i, 1); + var etree = new ElementTree(e); + var xml1 = etree.write({'indent': 4}); + var xml2 = etree.write({'indent': 2}); + assert.equal(xml1, expected1); + assert.equal(xml2, expected2); + + var file = readFile('xml2.xml'); + var etree2 = et.parse(file); + var xml3 = etree2.write({'indent': 4}); + assert.equal(xml3, expected3); + test.finish(); +}; + +exports['test_parse_and_find_2'] = function(test, assert) { + var data = readFile('xml1.xml'); + var etree = et.parse(data); + + assert.equal(etree.findall('./object').length, 2); + assert.equal(etree.findall('[@name]').length, 1); + assert.equal(etree.findall('[@name="test_container_1"]').length, 1); + assert.equal(etree.findall('[@name=\'test_container_1\']').length, 1); + assert.equal(etree.findall('./object')[0].findtext('name'), 'test_object_1'); + assert.equal(etree.findtext('./object/name'), 'test_object_1'); + assert.equal(etree.findall('.//bytes').length, 2); + assert.equal(etree.findall('*/bytes').length, 2); + assert.equal(etree.findall('*/foobar').length, 0); + + test.finish(); +}; + +exports['test_namespaced_attribute'] = function(test, assert) { + var data = readFile('xml1.xml'); + var etree = et.parse(data); + + assert.equal(etree.findall('*/bytes[@android:type="cool"]').length, 1); + + test.finish(); +} + +exports['test_syntax_errors'] = function(test, assert) { + var expressions = [ './/@bar', '[@bar', '[@foo=bar]', '[@', '/bar' ]; + var errCount = 0; + var data = readFile('xml1.xml'); + var etree = et.parse(data); + + expressions.forEach(function(expression) { + try { + etree.findall(expression); + } + catch (err) { + errCount++; + } + }); + + assert.equal(errCount, expressions.length); + test.finish(); +}; + +exports['test_register_namespace'] = function(test, assert){ + var prefix = 'TESTPREFIX'; + var namespace = 'http://seriously.unknown/namespace/URI'; + var errCount = 0; + + var etree = Element(sprintf('{%s}test', namespace)); + assert.equal(et.tostring(etree, { 'xml_declaration': false}), + sprintf('', namespace)); + + et.register_namespace(prefix, namespace); + var etree = Element(sprintf('{%s}test', namespace)); + assert.equal(et.tostring(etree, { 'xml_declaration': false}), + sprintf('<%s:test xmlns:%s="%s" />', prefix, prefix, namespace)); + + try { + et.register_namespace('ns25', namespace); + } + catch (err) { + errCount++; + } + + assert.equal(errCount, 1, 'Reserved prefix used, but exception was not thrown'); + test.finish(); +}; + +exports['test_tostring'] = function(test, assert) { + var a = Element('a'); + var b = SubElement(a, 'b'); + var c = SubElement(a, 'c'); + c.text = 543; + + assert.equal(et.tostring(a, { 'xml_declaration': false }), '543'); + assert.equal(et.tostring(c, { 'xml_declaration': false }), '543'); + test.finish(); +}; + +exports['test_escape'] = function(test, assert) { + var a = Element('a'); + var b = SubElement(a, 'b'); + b.text = '&&&&<>"\n\r'; + + assert.equal(et.tostring(a, { 'xml_declaration': false }), '&&&&<>\"\n\r'); + test.finish(); +}; + +exports['test_find_null'] = function(test, assert) { + var root = Element('root'); + var node = SubElement(root, 'node'); + var leaf = SubElement(node, 'leaf'); + leaf.text = 'ipsum'; + + assert.equal(root.find('node/leaf'), leaf); + assert.equal(root.find('no-such-node/leaf'), null); + test.finish(); +}; + +exports['test_findtext_null'] = function(test, assert) { + var root = Element('root'); + var node = SubElement(root, 'node'); + var leaf = SubElement(node, 'leaf'); + leaf.text = 'ipsum'; + + assert.equal(root.findtext('node/leaf'), 'ipsum'); + assert.equal(root.findtext('no-such-node/leaf'), null); + test.finish(); +}; + +exports['test_remove'] = function(test, assert) { + var root = Element('root'); + var node1 = SubElement(root, 'node1'); + var node2 = SubElement(root, 'node2'); + var node3 = SubElement(root, 'node3'); + + assert.equal(root.len(), 3); + + root.remove(node2); + + assert.equal(root.len(), 2); + assert.equal(root.getItem(0).tag, 'node1') + assert.equal(root.getItem(1).tag, 'node3') + + test.finish(); +}; + +exports['test_cdata_write'] = function(test, assert) { + var root, etree, xml, values, value, i; + + values = [ + 'if(0>1) then true;', + 'ponies hello', + '' + ]; + + for (i = 0; i < values.length; i++) { + value = values[i]; + + root = Element('root'); + root.append(et.CData(value)); + etree = new ElementTree(root); + xml = etree.write({'xml_declaration': false}); + + assert.equal(xml, sprintf('', value)); + } + + test.finish(); +}; diff --git a/platforms/android/cordova/node_modules/glob/LICENSE b/platforms/android/cordova/node_modules/glob/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/platforms/android/cordova/node_modules/glob/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/cordova/node_modules/glob/README.md b/platforms/android/cordova/node_modules/glob/README.md new file mode 100644 index 0000000..063cf95 --- /dev/null +++ b/platforms/android/cordova/node_modules/glob/README.md @@ -0,0 +1,377 @@ +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies) + +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +![](oh-my-glob.gif) + +## Usage + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Glob Primer + +"Globs" are the patterns you type when you do stuff like `ls *.js` on +the command line, or put `build/*` in a `.gitignore` file. + +Before parsing the path part patterns, braced sections are expanded +into a set. Braced sections start with `{` and end with `}`, with any +number of comma-delimited sections within. Braced sections may contain +slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in a +path portion: + +* `*` Matches 0 or more characters in a single path portion +* `?` Matches 1 character +* `[...]` Matches a range of characters, similar to a RegExp range. + If the first character of the range is `!` or `^` then it matches + any character not in the range. +* `!(pattern|pattern|pattern)` Matches anything that does not match + any of the patterns provided. +* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the + patterns provided. +* `+(pattern|pattern|pattern)` Matches one or more occurrences of the + patterns provided. +* `*(a|b|c)` Matches zero or more occurrences of the patterns provided +* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided +* `**` If a "globstar" is alone in a path portion, then it matches + zero or more directories and subdirectories searching for matches. + It does not crawl symlinked directories. + +### Dots + +If a file or directory path portion has a `.` as the first character, +then it will not match any glob pattern unless that pattern's +corresponding path part also has a `.` as its first character. + +For example, the pattern `a/.*/c` would match the file at `a/.b/c`. +However the pattern `a/*/c` would not, because `*` does not start with +a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has no +slashes in it, then it will seek for any file anywhere in the tree +with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Negation + +The intent for negation would be for a pattern starting with `!` to +match everything that *doesn't* match the supplied pattern. However, +the implementation is weird, and for the time being, this should be +avoided. The behavior is deprecated in version 5, and will be removed +entirely in version 6. + +### Empty Sets + +If no matching files are found, then an empty array is returned. This +differs from the shell, where the pattern itself is returned. For +example: + + $ echo a*s*d*f + a*s*d*f + +To get the bash-style behavior, set the `nonull:true` in the options. + +### See Also: + +* `man sh` +* `man bash` (Search for "Pattern Matching") +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob.hasMagic(pattern, [options]) + +Returns `true` if there are any special characters in the pattern, and +`false` otherwise. + +Note that the options affect the results. If `noext:true` is set in +the options object, then `+(a|b)` will not be considered a magic +pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` +then that is considered magical, unless `nobrace:true` is set in the +options. + +## glob(pattern, [options], cb) + +* `pattern` {String} Pattern to be matched +* `options` {Object} +* `cb` {Function} + * `err` {Error | null} + * `matches` {Array} filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` {String} Pattern to be matched +* `options` {Object} +* return: {Array} filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instantiating the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` {String} pattern to search for +* `options` {Object} +* `cb` {Function} Called when an error occurs, or matches are found + * `err` {Error | null} + * `matches` {Array} filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `'DIR'` - Path exists, and is not a directory + * `'FILE'` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` +* `statCache` Cache of `fs.stat` results, to prevent statting the same + path multiple times. +* `symlinks` A record of which paths are symbolic links, which is + relevant in resolving `**` patterns. +* `realpathCache` An optional object which is passed to `fs.realpath` + to minimize unnecessary syscalls. It is stored on the instantiated + Glob object, and may be re-used. + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the matched. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `pause` Temporarily stop the search +* `resume` Resume the search +* `abort` Stop the search forever + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the Glob object, as well. + +If you are running many `glob` operations, you can pass a Glob object +as the `options` argument to a subsequent operation to shortcut some +`stat` and `readdir` calls. At the very least, you may pass in shared +`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that +parallel glob operations will be sped up by sharing information about +the filesystem. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. +* `silent` When an unusual error is encountered when attempting to + read a directory, a warning will be printed to stderr. Set the + `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered when attempting to + read a directory, the process will just continue on in search of + other matches. Set the `strict` option to raise an error in these + cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary + to set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `symlinks` A cache of known symbolic links. You may pass in a + previously generated `symlinks` object to save `lstat` calls when + resolving `**` matches. +* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. Set this + flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `debug` Set to enable debug logging in minimatch and glob. +* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. +* `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) +* `noext` Do not match `+(a|b)` "extglob" patterns. +* `nocase` Perform a case-insensitive match. Note: on + case-insensitive filesystems, non-magic patterns will match by + default, since `stat` and `readdir` will not raise errors. +* `matchBase` Perform a basename-only match if the pattern does not + contain any slash characters. That is, `*.js` would be treated as + equivalent to `**/*.js`, matching all js files in all directories. +* `nodir` Do not match directories, only files. (Note: to match + *only* directories, simply put a `/` at the end of the pattern.) +* `ignore` Add a pattern or an array of patterns to exclude matches. +* `follow` Follow symlinked directories when expanding `**` patterns. + Note that this can result in a lot of duplicate references in the + presence of cyclic links. +* `realpath` Set to true to call `fs.realpath` on all of the results. + In the case of a symlink that cannot be resolved, the full absolute + path to the matched entry is returned (though it will usually be a + broken symlink) +* `nonegate` Suppress deprecated `negate` behavior. (See below.) + Default=true +* `nocomment` Suppress deprecated `comment` behavior. (See below.) + Default=true + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.3, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +Note that symlinked directories are not crawled as part of a `**`, +though their contents may match against subsequent portions of the +pattern. This prevents infinite loops and duplicates and the like. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +### Comments and Negation + +**Note**: In version 5 of this module, negation and comments are +**disabled** by default. You can explicitly set `nonegate:false` or +`nocomment:false` to re-enable them. They are going away entirely in +version 6. + +The intent for negation would be for a pattern starting with `!` to +match everything that *doesn't* match the supplied pattern. However, +the implementation is weird. It is better to use the `ignore` option +to set a pattern or set of patterns to exclude from matches. If you +want the "everything except *x*" type of behavior, you can use `**` as +the main pattern, and set an `ignore` for the things to exclude. + +The comments feature is added in minimatch, primarily to more easily +support use cases like ignore files, where a `#` at the start of a +line makes the pattern "empty". However, in the context of a +straightforward filesystem globber, "comments" don't make much sense. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. + +## Contributing + +Any change to behavior (including bugfixes) must come with a test. + +Patches that fail tests or reduce performance will be rejected. + +``` +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# to benchmark against bash/zsh +npm run bench + +# to profile javascript +npm run prof +``` diff --git a/platforms/android/cordova/node_modules/glob/common.js b/platforms/android/cordova/node_modules/glob/common.js new file mode 100644 index 0000000..e36a631 --- /dev/null +++ b/platforms/android/cordova/node_modules/glob/common.js @@ -0,0 +1,245 @@ +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern) + } + + return { + matcher: new Minimatch(pattern), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = options.cwd + self.changedCwd = path.resolve(options.cwd) !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + self.nomount = !!options.nomount + + // disable comments and negation unless the user explicitly + // passes in false as the option. + options.nonegate = options.nonegate === false ? false : true + options.nocomment = options.nocomment === false ? false : true + deprecationWarning(options) + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +// TODO(isaacs): remove entirely in v6 +// exported to reset in tests +exports.deprecationWarned +function deprecationWarning(options) { + if (!options.nonegate || !options.nocomment) { + if (process.noDeprecation !== true && !exports.deprecationWarned) { + var msg = 'glob WARNING: comments and negation will be disabled in v6' + if (process.throwDeprecation) + throw new Error(msg) + else if (process.traceDeprecation) + console.trace(msg) + else + console.error(msg) + + exports.deprecationWarned = true + } + } +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + return !(/\/$/.test(e)) + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} diff --git a/platforms/android/cordova/node_modules/glob/glob.js b/platforms/android/cordova/node_modules/glob/glob.js new file mode 100644 index 0000000..022d2ac --- /dev/null +++ b/platforms/android/cordova/node_modules/glob/glob.js @@ -0,0 +1,752 @@ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +glob.hasMagic = function (pattern, options_) { + var options = util._extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + var n = this.minimatch.set.length + this._processing = 0 + this.matches = new Array(n) + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + + function done () { + --self._processing + if (self._processing <= 0) + self._finish() + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + fs.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (this.matches[index][e]) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = this._makeAbs(e) + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + if (this.mark) + e = this._mark(e) + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er) + return cb() + + var isSym = lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + this.cache[this._makeAbs(f)] = 'FILE' + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && !stat.isDirectory()) + return cb(null, false, stat) + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return cb() + + return cb(null, c, stat) +} diff --git a/platforms/android/cordova/node_modules/glob/package.json b/platforms/android/cordova/node_modules/glob/package.json new file mode 100644 index 0000000..7c398ae --- /dev/null +++ b/platforms/android/cordova/node_modules/glob/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + "glob@^5.0.13", + "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common" + ] + ], + "_from": "glob@>=5.0.13 <6.0.0", + "_id": "glob@5.0.15", + "_inCache": true, + "_installable": true, + "_location": "/glob", + "_nodeVersion": "4.0.0", + "_npmUser": { + "email": "isaacs@npmjs.com", + "name": "isaacs" + }, + "_npmVersion": "3.3.2", + "_phantomChildren": {}, + "_requested": { + "name": "glob", + "raw": "glob@^5.0.13", + "rawSpec": "^5.0.13", + "scope": null, + "spec": ">=5.0.13 <6.0.0", + "type": "range" + }, + "_requiredBy": [ + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "_shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1", + "_shrinkwrap": null, + "_spec": "glob@^5.0.13", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/node-glob/issues" + }, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "description": "a little globber", + "devDependencies": { + "mkdirp": "0", + "rimraf": "^2.2.8", + "tap": "^1.1.4", + "tick": "0.0.6" + }, + "directories": {}, + "dist": { + "shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1", + "tarball": "http://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + }, + "engines": { + "node": "*" + }, + "files": [ + "common.js", + "glob.js", + "sync.js" + ], + "gitHead": "3a7e71d453dd80e75b196fd262dd23ed54beeceb", + "homepage": "https://github.com/isaacs/node-glob#readme", + "license": "ISC", + "main": "glob.js", + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "name": "glob", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "scripts": { + "bench": "bash benchmark.sh", + "benchclean": "node benchclean.js", + "prepublish": "npm run benchclean", + "prof": "bash prof.sh && cat profile.txt", + "profclean": "rm -f v8.log profile.txt", + "test": "tap test/*.js --cov", + "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js" + }, + "version": "5.0.15" +} diff --git a/platforms/android/cordova/node_modules/glob/sync.js b/platforms/android/cordova/node_modules/glob/sync.js new file mode 100644 index 0000000..09883d2 --- /dev/null +++ b/platforms/android/cordova/node_modules/glob/sync.js @@ -0,0 +1,460 @@ +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = fs.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this.matches[index][e] = true + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + var abs = this._makeAbs(e) + if (this.mark) + e = this._mark(e) + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[this._makeAbs(e)] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + // lstat failed, doesn't exist + return null + } + + var isSym = lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + this.cache[this._makeAbs(f)] = 'FILE' + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this.matches[index][prefix] = true +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + return false + } + + if (lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} diff --git a/platforms/android/cordova/node_modules/inflight/.eslintrc b/platforms/android/cordova/node_modules/inflight/.eslintrc new file mode 100644 index 0000000..b7a1550 --- /dev/null +++ b/platforms/android/cordova/node_modules/inflight/.eslintrc @@ -0,0 +1,17 @@ +{ + "env" : { + "node" : true + }, + "rules" : { + "semi": [2, "never"], + "strict": 0, + "quotes": [1, "single", "avoid-escape"], + "no-use-before-define": 0, + "curly": 0, + "no-underscore-dangle": 0, + "no-lonely-if": 1, + "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}], + "no-mixed-requires": 0, + "space-infix-ops": 0 + } +} diff --git a/platforms/android/cordova/node_modules/inflight/LICENSE b/platforms/android/cordova/node_modules/inflight/LICENSE new file mode 100644 index 0000000..05eeeb8 --- /dev/null +++ b/platforms/android/cordova/node_modules/inflight/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/cordova/node_modules/inflight/README.md b/platforms/android/cordova/node_modules/inflight/README.md new file mode 100644 index 0000000..6dc8929 --- /dev/null +++ b/platforms/android/cordova/node_modules/inflight/README.md @@ -0,0 +1,37 @@ +# inflight + +Add callbacks to requests in flight to avoid async duplication + +## USAGE + +```javascript +var inflight = require('inflight') + +// some request that does some stuff +function req(key, callback) { + // key is any random string. like a url or filename or whatever. + // + // will return either a falsey value, indicating that the + // request for this key is already in flight, or a new callback + // which when called will call all callbacks passed to inflightk + // with the same key + callback = inflight(key, callback) + + // If we got a falsey value back, then there's already a req going + if (!callback) return + + // this is where you'd fetch the url or whatever + // callback is also once()-ified, so it can safely be assigned + // to multiple events etc. First call wins. + setTimeout(function() { + callback(null, key) + }, 100) +} + +// only assigns a single setTimeout +// when it dings, all cbs get called +req('foo', cb1) +req('foo', cb2) +req('foo', cb3) +req('foo', cb4) +``` diff --git a/platforms/android/cordova/node_modules/inflight/inflight.js b/platforms/android/cordova/node_modules/inflight/inflight.js new file mode 100644 index 0000000..8bc96cb --- /dev/null +++ b/platforms/android/cordova/node_modules/inflight/inflight.js @@ -0,0 +1,44 @@ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} diff --git a/platforms/android/cordova/node_modules/inflight/package.json b/platforms/android/cordova/node_modules/inflight/package.json new file mode 100644 index 0000000..3bc7cf7 --- /dev/null +++ b/platforms/android/cordova/node_modules/inflight/package.json @@ -0,0 +1,86 @@ +{ + "_args": [ + [ + "inflight@^1.0.4", + "/Users/steveng/repo/cordova/cordova-android/node_modules/glob" + ] + ], + "_from": "inflight@>=1.0.4 <2.0.0", + "_id": "inflight@1.0.4", + "_inCache": true, + "_installable": true, + "_location": "/inflight", + "_nodeVersion": "0.10.32", + "_npmUser": { + "email": "ogd@aoaioxxysz.net", + "name": "othiym23" + }, + "_npmVersion": "2.1.3", + "_phantomChildren": {}, + "_requested": { + "name": "inflight", + "raw": "inflight@^1.0.4", + "rawSpec": "^1.0.4", + "scope": null, + "spec": ">=1.0.4 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "http://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", + "_shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a", + "_shrinkwrap": null, + "_spec": "inflight@^1.0.4", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/glob", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/inflight/issues" + }, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + }, + "description": "Add callbacks to requests in flight to avoid async duplication", + "devDependencies": { + "tap": "^0.4.10" + }, + "directories": {}, + "dist": { + "shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a", + "tarball": "http://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz" + }, + "gitHead": "c7b5531d572a867064d4a1da9e013e8910b7d1ba", + "homepage": "https://github.com/isaacs/inflight", + "license": "ISC", + "main": "inflight.js", + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + }, + { + "name": "othiym23", + "email": "ogd@aoaioxxysz.net" + }, + { + "name": "iarna", + "email": "me@re-becca.org" + } + ], + "name": "inflight", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inflight.git" + }, + "scripts": { + "test": "tap test.js" + }, + "version": "1.0.4" +} diff --git a/platforms/android/cordova/node_modules/inflight/test.js b/platforms/android/cordova/node_modules/inflight/test.js new file mode 100644 index 0000000..2bb75b3 --- /dev/null +++ b/platforms/android/cordova/node_modules/inflight/test.js @@ -0,0 +1,97 @@ +var test = require('tap').test +var inf = require('./inflight.js') + + +function req (key, cb) { + cb = inf(key, cb) + if (cb) setTimeout(function () { + cb(key) + cb(key) + }) + return cb +} + +test('basic', function (t) { + var calleda = false + var a = req('key', function (k) { + t.notOk(calleda) + calleda = true + t.equal(k, 'key') + if (calledb) t.end() + }) + t.ok(a, 'first returned cb function') + + var calledb = false + var b = req('key', function (k) { + t.notOk(calledb) + calledb = true + t.equal(k, 'key') + if (calleda) t.end() + }) + + t.notOk(b, 'second should get falsey inflight response') +}) + +test('timing', function (t) { + var expect = [ + 'method one', + 'start one', + 'end one', + 'two', + 'tick', + 'three' + ] + var i = 0 + + function log (m) { + t.equal(m, expect[i], m + ' === ' + expect[i]) + ++i + if (i === expect.length) + t.end() + } + + function method (name, cb) { + log('method ' + name) + process.nextTick(cb) + } + + var one = inf('foo', function () { + log('start one') + var three = inf('foo', function () { + log('three') + }) + if (three) method('three', three) + log('end one') + }) + + method('one', one) + + var two = inf('foo', function () { + log('two') + }) + if (two) method('one', two) + + process.nextTick(log.bind(null, 'tick')) +}) + +test('parameters', function (t) { + t.plan(8) + + var a = inf('key', function (first, second, third) { + t.equal(first, 1) + t.equal(second, 2) + t.equal(third, 3) + }) + t.ok(a, 'first returned cb function') + + var b = inf('key', function (first, second, third) { + t.equal(first, 1) + t.equal(second, 2) + t.equal(third, 3) + }) + t.notOk(b, 'second should get falsey inflight response') + + setTimeout(function () { + a(1, 2, 3) + }) +}) diff --git a/platforms/android/cordova/node_modules/inherits/LICENSE b/platforms/android/cordova/node_modules/inherits/LICENSE new file mode 100644 index 0000000..dea3013 --- /dev/null +++ b/platforms/android/cordova/node_modules/inherits/LICENSE @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + diff --git a/platforms/android/cordova/node_modules/inherits/README.md b/platforms/android/cordova/node_modules/inherits/README.md new file mode 100644 index 0000000..b1c5665 --- /dev/null +++ b/platforms/android/cordova/node_modules/inherits/README.md @@ -0,0 +1,42 @@ +Browser-friendly inheritance fully compatible with standard node.js +[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). + +This package exports standard `inherits` from node.js `util` module in +node environment, but also provides alternative browser-friendly +implementation through [browser +field](https://gist.github.com/shtylman/4339901). Alternative +implementation is a literal copy of standard one located in standalone +module to avoid requiring of `util`. It also has a shim for old +browsers with no `Object.create` support. + +While keeping you sure you are using standard `inherits` +implementation in node.js environment, it allows bundlers such as +[browserify](https://github.com/substack/node-browserify) to not +include full `util` package to your client code if all you need is +just `inherits` function. It worth, because browser shim for `util` +package is large and `inherits` is often the single function you need +from it. + +It's recommended to use this package instead of +`require('util').inherits` for any code that has chances to be used +not only in node.js but in browser too. + +## usage + +```js +var inherits = require('inherits'); +// then use exactly as the standard one +``` + +## note on version ~1.0 + +Version ~1.0 had completely different motivation and is not compatible +neither with 2.0 nor with standard node.js `inherits`. + +If you are using version ~1.0 and planning to switch to ~2.0, be +careful: + +* new version uses `super_` instead of `super` for referencing + superclass +* new version overwrites current prototype while old one preserves any + existing fields on it diff --git a/platforms/android/cordova/node_modules/inherits/inherits.js b/platforms/android/cordova/node_modules/inherits/inherits.js new file mode 100644 index 0000000..29f5e24 --- /dev/null +++ b/platforms/android/cordova/node_modules/inherits/inherits.js @@ -0,0 +1 @@ +module.exports = require('util').inherits diff --git a/platforms/android/cordova/node_modules/inherits/inherits_browser.js b/platforms/android/cordova/node_modules/inherits/inherits_browser.js new file mode 100644 index 0000000..c1e78a7 --- /dev/null +++ b/platforms/android/cordova/node_modules/inherits/inherits_browser.js @@ -0,0 +1,23 @@ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} diff --git a/platforms/android/cordova/node_modules/inherits/package.json b/platforms/android/cordova/node_modules/inherits/package.json new file mode 100644 index 0000000..6313b8e --- /dev/null +++ b/platforms/android/cordova/node_modules/inherits/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "inherits@2", + "/Users/steveng/repo/cordova/cordova-android/node_modules/glob" + ] + ], + "_from": "inherits@>=2.0.0 <3.0.0", + "_id": "inherits@2.0.1", + "_inCache": true, + "_installable": true, + "_location": "/inherits", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "1.3.8", + "_phantomChildren": {}, + "_requested": { + "name": "inherits", + "raw": "inherits@2", + "rawSpec": "2", + "scope": null, + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "_shrinkwrap": null, + "_spec": "inherits@2", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/glob", + "browser": "./inherits_browser.js", + "bugs": { + "url": "https://github.com/isaacs/inherits/issues" + }, + "dependencies": {}, + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "homepage": "https://github.com/isaacs/inherits#readme", + "keywords": [ + "browser", + "browserify", + "class", + "inheritance", + "inherits", + "klass", + "object-oriented", + "oop" + ], + "license": "ISC", + "main": "./inherits.js", + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "name": "inherits", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inherits.git" + }, + "scripts": { + "test": "node test" + }, + "version": "2.0.1" +} diff --git a/platforms/android/cordova/node_modules/inherits/test.js b/platforms/android/cordova/node_modules/inherits/test.js new file mode 100644 index 0000000..fc53012 --- /dev/null +++ b/platforms/android/cordova/node_modules/inherits/test.js @@ -0,0 +1,25 @@ +var inherits = require('./inherits.js') +var assert = require('assert') + +function test(c) { + assert(c.constructor === Child) + assert(c.constructor.super_ === Parent) + assert(Object.getPrototypeOf(c) === Child.prototype) + assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) + assert(c instanceof Child) + assert(c instanceof Parent) +} + +function Child() { + Parent.call(this) + test(this) +} + +function Parent() {} + +inherits(Child, Parent) + +var c = new Child +test(c) + +console.log('ok') diff --git a/platforms/android/cordova/node_modules/lodash/LICENSE b/platforms/android/cordova/node_modules/lodash/LICENSE new file mode 100644 index 0000000..9cd87e5 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/LICENSE @@ -0,0 +1,22 @@ +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/lodash/README.md b/platforms/android/cordova/node_modules/lodash/README.md new file mode 100644 index 0000000..fd98e5c --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/README.md @@ -0,0 +1,121 @@ +# lodash v3.10.1 + +The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash](https://lodash.com/) exported as [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) modules. + +Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli): +```bash +$ lodash modularize modern exports=node -o ./ +$ lodash modern -d -o ./index.js +``` + +## Installation + +Using npm: + +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash +``` + +In Node.js/io.js: + +```js +// load the modern build +var _ = require('lodash'); +// or a method category +var array = require('lodash/array'); +// or a method (great for smaller builds with browserify/webpack) +var chunk = require('lodash/array/chunk'); +``` + +See the [package source](https://github.com/lodash/lodash/tree/3.10.1-npm) for more details. + +**Note:**
+Don’t assign values to the [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL.
+Install [n_](https://www.npmjs.com/package/n_) for a REPL that includes lodash by default. + +## Module formats + +lodash is also available in a variety of other builds & module formats. + + * npm packages for [modern](https://www.npmjs.com/package/lodash), [compatibility](https://www.npmjs.com/package/lodash-compat), & [per method](https://www.npmjs.com/browse/keyword/lodash-modularized) builds + * AMD modules for [modern](https://github.com/lodash/lodash/tree/3.10.1-amd) & [compatibility](https://github.com/lodash/lodash-compat/tree/3.10.1-amd) builds + * ES modules for the [modern](https://github.com/lodash/lodash/tree/3.10.1-es) build + +## Further Reading + + * [API Documentation](https://lodash.com/docs) + * [Build Differences](https://github.com/lodash/lodash/wiki/Build-Differences) + * [Changelog](https://github.com/lodash/lodash/wiki/Changelog) + * [Roadmap](https://github.com/lodash/lodash/wiki/Roadmap) + * [More Resources](https://github.com/lodash/lodash/wiki/Resources) + +## Features + + * ~100% [code coverage](https://coveralls.io/r/lodash) + * Follows [semantic versioning](http://semver.org/) for releases + * [Lazily evaluated](http://filimanjaro.com/blog/2014/introducing-lazy-evaluation/) chaining + * [_(…)](https://lodash.com/docs#_) supports implicit chaining + * [_.ary](https://lodash.com/docs#ary) & [_.rearg](https://lodash.com/docs#rearg) to change function argument limits & order + * [_.at](https://lodash.com/docs#at) for cherry-picking collection values + * [_.attempt](https://lodash.com/docs#attempt) to execute functions which may error without a try-catch + * [_.before](https://lodash.com/docs#before) to complement [_.after](https://lodash.com/docs#after) + * [_.bindKey](https://lodash.com/docs#bindKey) for binding [*“lazyâ€*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods + * [_.chunk](https://lodash.com/docs#chunk) for splitting an array into chunks of a given size + * [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects + * [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects + * [_.curry](https://lodash.com/docs#curry) & [_.curryRight](https://lodash.com/docs#curryRight) for creating [curried](http://hughfdjackson.com/javascript/why-curry-helps/) functions + * [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) are cancelable & accept options for more control + * [_.defaultsDeep](https://lodash.com/docs#defaultsDeep) for recursively assigning default properties + * [_.fill](https://lodash.com/docs#fill) to fill arrays with values + * [_.findKey](https://lodash.com/docs#findKey) for finding keys + * [_.flow](https://lodash.com/docs#flow) to complement [_.flowRight](https://lodash.com/docs#flowRight) (a.k.a `_.compose`) + * [_.forEach](https://lodash.com/docs#forEach) supports exiting early + * [_.forIn](https://lodash.com/docs#forIn) for iterating all enumerable properties + * [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties + * [_.get](https://lodash.com/docs#get) & [_.set](https://lodash.com/docs#set) for deep property getting & setting + * [_.gt](https://lodash.com/docs#gt), [_.gte](https://lodash.com/docs#gte), [_.lt](https://lodash.com/docs#lt), & [_.lte](https://lodash.com/docs#lte) relational methods + * [_.inRange](https://lodash.com/docs#inRange) for checking whether a number is within a given range + * [_.isNative](https://lodash.com/docs#isNative) to check for native functions + * [_.isPlainObject](https://lodash.com/docs#isPlainObject) & [_.toPlainObject](https://lodash.com/docs#toPlainObject) to check for & convert to `Object` objects + * [_.isTypedArray](https://lodash.com/docs#isTypedArray) to check for typed arrays + * [_.mapKeys](https://lodash.com/docs#mapKeys) for mapping keys to an object + * [_.matches](https://lodash.com/docs#matches) supports deep object comparisons + * [_.matchesProperty](https://lodash.com/docs#matchesProperty) to complement [_.matches](https://lodash.com/docs#matches) & [_.property](https://lodash.com/docs#property) + * [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend) + * [_.method](https://lodash.com/docs#method) & [_.methodOf](https://lodash.com/docs#methodOf) to create functions that invoke methods + * [_.modArgs](https://lodash.com/docs#modArgs) for more advanced functional composition + * [_.parseInt](https://lodash.com/docs#parseInt) for consistent cross-environment behavior + * [_.pull](https://lodash.com/docs#pull), [_.pullAt](https://lodash.com/docs#pullAt), & [_.remove](https://lodash.com/docs#remove) for mutating arrays + * [_.random](https://lodash.com/docs#random) supports returning floating-point numbers + * [_.restParam](https://lodash.com/docs#restParam) & [_.spread](https://lodash.com/docs#spread) for applying rest parameters & spreading arguments to functions + * [_.runInContext](https://lodash.com/docs#runInContext) for collisionless mixins & easier mocking + * [_.slice](https://lodash.com/docs#slice) for creating subsets of array-like values + * [_.sortByAll](https://lodash.com/docs#sortByAll) & [_.sortByOrder](https://lodash.com/docs#sortByOrder) for sorting by multiple properties & orders + * [_.support](https://lodash.com/docs#support) for flagging environment features + * [_.template](https://lodash.com/docs#template) supports [*“importsâ€*](https://lodash.com/docs#templateSettings-imports) options & [ES template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components) + * [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects + * [_.unzipWith](https://lodash.com/docs#unzipWith) & [_.zipWith](https://lodash.com/docs#zipWith) to specify how grouped values should be combined + * [_.valuesIn](https://lodash.com/docs#valuesIn) for getting values of all enumerable properties + * [_.xor](https://lodash.com/docs#xor) to complement [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union) + * [_.add](https://lodash.com/docs#add), [_.round](https://lodash.com/docs#round), [_.sum](https://lodash.com/docs#sum), & + [more](https://lodash.com/docs "_.ceil & _.floor") math methods + * [_.bind](https://lodash.com/docs#bind), [_.curry](https://lodash.com/docs#curry), [_.partial](https://lodash.com/docs#partial), & + [more](https://lodash.com/docs "_.bindKey, _.curryRight, _.partialRight") support customizable argument placeholders + * [_.capitalize](https://lodash.com/docs#capitalize), [_.trim](https://lodash.com/docs#trim), & + [more](https://lodash.com/docs "_.camelCase, _.deburr, _.endsWith, _.escapeRegExp, _.kebabCase, _.pad, _.padLeft, _.padRight, _.repeat, _.snakeCase, _.startCase, _.startsWith, _.trimLeft, _.trimRight, _.trunc, _.words") string methods + * [_.clone](https://lodash.com/docs#clone), [_.isEqual](https://lodash.com/docs#isEqual), & + [more](https://lodash.com/docs "_.assign, _.cloneDeep, _.merge") accept customizer callbacks + * [_.dropWhile](https://lodash.com/docs#dropWhile), [_.takeWhile](https://lodash.com/docs#takeWhile), & + [more](https://lodash.com/docs "_.drop, _.dropRight, _.dropRightWhile, _.take, _.takeRight, _.takeRightWhile") to complement [_.first](https://lodash.com/docs#first), [_.initial](https://lodash.com/docs#initial), [_.last](https://lodash.com/docs#last), & [_.rest](https://lodash.com/docs#rest) + * [_.findLast](https://lodash.com/docs#findLast), [_.findLastKey](https://lodash.com/docs#findLastKey), & + [more](https://lodash.com/docs "_.curryRight, _.dropRight, _.dropRightWhile, _.flowRight, _.forEachRight, _.forInRight, _.forOwnRight, _.padRight, partialRight, _.takeRight, _.trimRight, _.takeRightWhile") right-associative methods + * [_.includes](https://lodash.com/docs#includes), [_.toArray](https://lodash.com/docs#toArray), & + [more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.findLast, _.findWhere, _.forEach, _.forEachRight, _.groupBy, _.indexBy, _.invoke, _.map, _.max, _.min, _.partition, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.sortByAll, _.sortByOrder, _.sum, _.where") accept strings + * [_#commit](https://lodash.com/docs#prototype-commit) & [_#plant](https://lodash.com/docs#prototype-plant) for working with chain sequences + * [_#thru](https://lodash.com/docs#thru) to pass values thru a chain sequence + +## Support + +Tested in Chrome 43-44, Firefox 38-39, IE 6-11, MS Edge, Safari 5-8, ChakraNode 0.12.2, io.js 2.5.0, Node.js 0.8.28, 0.10.40, & 0.12.7, PhantomJS 1.9.8, RingoJS 0.11, & Rhino 1.7.6. +Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. Special thanks to [Sauce Labs](https://saucelabs.com/) for providing automated browser testing. diff --git a/platforms/android/cordova/node_modules/lodash/array.js b/platforms/android/cordova/node_modules/lodash/array.js new file mode 100644 index 0000000..e5121fa --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array.js @@ -0,0 +1,44 @@ +module.exports = { + 'chunk': require('./array/chunk'), + 'compact': require('./array/compact'), + 'difference': require('./array/difference'), + 'drop': require('./array/drop'), + 'dropRight': require('./array/dropRight'), + 'dropRightWhile': require('./array/dropRightWhile'), + 'dropWhile': require('./array/dropWhile'), + 'fill': require('./array/fill'), + 'findIndex': require('./array/findIndex'), + 'findLastIndex': require('./array/findLastIndex'), + 'first': require('./array/first'), + 'flatten': require('./array/flatten'), + 'flattenDeep': require('./array/flattenDeep'), + 'head': require('./array/head'), + 'indexOf': require('./array/indexOf'), + 'initial': require('./array/initial'), + 'intersection': require('./array/intersection'), + 'last': require('./array/last'), + 'lastIndexOf': require('./array/lastIndexOf'), + 'object': require('./array/object'), + 'pull': require('./array/pull'), + 'pullAt': require('./array/pullAt'), + 'remove': require('./array/remove'), + 'rest': require('./array/rest'), + 'slice': require('./array/slice'), + 'sortedIndex': require('./array/sortedIndex'), + 'sortedLastIndex': require('./array/sortedLastIndex'), + 'tail': require('./array/tail'), + 'take': require('./array/take'), + 'takeRight': require('./array/takeRight'), + 'takeRightWhile': require('./array/takeRightWhile'), + 'takeWhile': require('./array/takeWhile'), + 'union': require('./array/union'), + 'uniq': require('./array/uniq'), + 'unique': require('./array/unique'), + 'unzip': require('./array/unzip'), + 'unzipWith': require('./array/unzipWith'), + 'without': require('./array/without'), + 'xor': require('./array/xor'), + 'zip': require('./array/zip'), + 'zipObject': require('./array/zipObject'), + 'zipWith': require('./array/zipWith') +}; diff --git a/platforms/android/cordova/node_modules/lodash/array/chunk.js b/platforms/android/cordova/node_modules/lodash/array/chunk.js new file mode 100644 index 0000000..c8be1fb --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/chunk.js @@ -0,0 +1,46 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `collection` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size, guard) { + if (guard ? isIterateeCall(array, size, guard) : size == null) { + size = 1; + } else { + size = nativeMax(nativeFloor(size) || 1, 1); + } + var index = 0, + length = array ? array.length : 0, + resIndex = -1, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[++resIndex] = baseSlice(array, index, (index += size)); + } + return result; +} + +module.exports = chunk; diff --git a/platforms/android/cordova/node_modules/lodash/array/compact.js b/platforms/android/cordova/node_modules/lodash/array/compact.js new file mode 100644 index 0000000..1dc1c55 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/compact.js @@ -0,0 +1,30 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[++resIndex] = value; + } + } + return result; +} + +module.exports = compact; diff --git a/platforms/android/cordova/node_modules/lodash/array/difference.js b/platforms/android/cordova/node_modules/lodash/array/difference.js new file mode 100644 index 0000000..128932a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/difference.js @@ -0,0 +1,29 @@ +var baseDifference = require('../internal/baseDifference'), + baseFlatten = require('../internal/baseFlatten'), + isArrayLike = require('../internal/isArrayLike'), + isObjectLike = require('../internal/isObjectLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique `array` values not included in the other + * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([1, 2, 3], [4, 2]); + * // => [1, 3] + */ +var difference = restParam(function(array, values) { + return (isObjectLike(array) && isArrayLike(array)) + ? baseDifference(array, baseFlatten(values, false, true)) + : []; +}); + +module.exports = difference; diff --git a/platforms/android/cordova/node_modules/lodash/array/drop.js b/platforms/android/cordova/node_modules/lodash/array/drop.js new file mode 100644 index 0000000..039a0b5 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/drop.js @@ -0,0 +1,39 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, n < 0 ? 0 : n); +} + +module.exports = drop; diff --git a/platforms/android/cordova/node_modules/lodash/array/dropRight.js b/platforms/android/cordova/node_modules/lodash/array/dropRight.js new file mode 100644 index 0000000..14b5eb6 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/dropRight.js @@ -0,0 +1,40 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/platforms/android/cordova/node_modules/lodash/array/dropRightWhile.js b/platforms/android/cordova/node_modules/lodash/array/dropRightWhile.js new file mode 100644 index 0000000..be158bd --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/dropRightWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that match the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [1] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active', false), 'user'); + * // => ['barney'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function dropRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), true, true) + : []; +} + +module.exports = dropRightWhile; diff --git a/platforms/android/cordova/node_modules/lodash/array/dropWhile.js b/platforms/android/cordova/node_modules/lodash/array/dropWhile.js new file mode 100644 index 0000000..d9eabae --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/dropWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [3] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropWhile(users, 'active', false), 'user'); + * // => ['pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), true) + : []; +} + +module.exports = dropWhile; diff --git a/platforms/android/cordova/node_modules/lodash/array/fill.js b/platforms/android/cordova/node_modules/lodash/array/fill.js new file mode 100644 index 0000000..2c8f6da --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/fill.js @@ -0,0 +1,44 @@ +var baseFill = require('../internal/baseFill'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8], '*', 1, 2); + * // => [4, '*', 8] + */ +function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/platforms/android/cordova/node_modules/lodash/array/findIndex.js b/platforms/android/cordova/node_modules/lodash/array/findIndex.js new file mode 100644 index 0000000..2a6b8e1 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/findIndex.js @@ -0,0 +1,53 @@ +var createFindIndex = require('../internal/createFindIndex'); + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(chr) { + * return chr.user == 'barney'; + * }); + * // => 0 + * + * // using the `_.matches` callback shorthand + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // using the `_.matchesProperty` callback shorthand + * _.findIndex(users, 'active', false); + * // => 0 + * + * // using the `_.property` callback shorthand + * _.findIndex(users, 'active'); + * // => 2 + */ +var findIndex = createFindIndex(); + +module.exports = findIndex; diff --git a/platforms/android/cordova/node_modules/lodash/array/findLastIndex.js b/platforms/android/cordova/node_modules/lodash/array/findLastIndex.js new file mode 100644 index 0000000..d6d8eca --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/findLastIndex.js @@ -0,0 +1,53 @@ +var createFindIndex = require('../internal/createFindIndex'); + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(chr) { + * return chr.user == 'pebbles'; + * }); + * // => 2 + * + * // using the `_.matches` callback shorthand + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastIndex(users, 'active', false); + * // => 2 + * + * // using the `_.property` callback shorthand + * _.findLastIndex(users, 'active'); + * // => 0 + */ +var findLastIndex = createFindIndex(true); + +module.exports = findLastIndex; diff --git a/platforms/android/cordova/node_modules/lodash/array/first.js b/platforms/android/cordova/node_modules/lodash/array/first.js new file mode 100644 index 0000000..b3b9c79 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/first.js @@ -0,0 +1,22 @@ +/** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias head + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([]); + * // => undefined + */ +function first(array) { + return array ? array[0] : undefined; +} + +module.exports = first; diff --git a/platforms/android/cordova/node_modules/lodash/array/flatten.js b/platforms/android/cordova/node_modules/lodash/array/flatten.js new file mode 100644 index 0000000..dc2eff8 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/flatten.js @@ -0,0 +1,32 @@ +var baseFlatten = require('../internal/baseFlatten'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Flattens a nested array. If `isDeep` is `true` the array is recursively + * flattened, otherwise it's only flattened a single level. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, 3, [4]]]); + * // => [1, 2, 3, [4]] + * + * // using `isDeep` + * _.flatten([1, [2, 3, [4]]], true); + * // => [1, 2, 3, 4] + */ +function flatten(array, isDeep, guard) { + var length = array ? array.length : 0; + if (guard && isIterateeCall(array, isDeep, guard)) { + isDeep = false; + } + return length ? baseFlatten(array, isDeep) : []; +} + +module.exports = flatten; diff --git a/platforms/android/cordova/node_modules/lodash/array/flattenDeep.js b/platforms/android/cordova/node_modules/lodash/array/flattenDeep.js new file mode 100644 index 0000000..9f775fe --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/flattenDeep.js @@ -0,0 +1,21 @@ +var baseFlatten = require('../internal/baseFlatten'); + +/** + * Recursively flattens a nested array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to recursively flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, 3, [4]]]); + * // => [1, 2, 3, 4] + */ +function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, true) : []; +} + +module.exports = flattenDeep; diff --git a/platforms/android/cordova/node_modules/lodash/array/head.js b/platforms/android/cordova/node_modules/lodash/array/head.js new file mode 100644 index 0000000..1961b08 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/head.js @@ -0,0 +1 @@ +module.exports = require('./first'); diff --git a/platforms/android/cordova/node_modules/lodash/array/indexOf.js b/platforms/android/cordova/node_modules/lodash/array/indexOf.js new file mode 100644 index 0000000..4cfc682 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/indexOf.js @@ -0,0 +1,53 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + binaryIndex = require('../internal/binaryIndex'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `array`. If `array` is sorted providing `true` for `fromIndex` + * performs a faster binary search. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // using `fromIndex` + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + * + * // performing a binary search + * _.indexOf([1, 1, 2, 2], 2, true); + * // => 2 + */ +function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else if (fromIndex) { + var index = binaryIndex(array, value); + if (index < length && + (value === value ? (value === array[index]) : (array[index] !== array[index]))) { + return index; + } + return -1; + } + return baseIndexOf(array, value, fromIndex || 0); +} + +module.exports = indexOf; diff --git a/platforms/android/cordova/node_modules/lodash/array/initial.js b/platforms/android/cordova/node_modules/lodash/array/initial.js new file mode 100644 index 0000000..59b7a7d --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/initial.js @@ -0,0 +1,20 @@ +var dropRight = require('./dropRight'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + return dropRight(array, 1); +} + +module.exports = initial; diff --git a/platforms/android/cordova/node_modules/lodash/array/intersection.js b/platforms/android/cordova/node_modules/lodash/array/intersection.js new file mode 100644 index 0000000..f218432 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/intersection.js @@ -0,0 +1,58 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + cacheIndexOf = require('../internal/cacheIndexOf'), + createCache = require('../internal/createCache'), + isArrayLike = require('../internal/isArrayLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique values that are included in all of the provided + * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of shared values. + * @example + * _.intersection([1, 2], [4, 2], [2, 1]); + * // => [2] + */ +var intersection = restParam(function(arrays) { + var othLength = arrays.length, + othIndex = othLength, + caches = Array(length), + indexOf = baseIndexOf, + isCommon = true, + result = []; + + while (othIndex--) { + var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; + caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; + } + var array = arrays[0], + index = -1, + length = array ? array.length : 0, + seen = caches[0]; + + outer: + while (++index < length) { + value = array[index]; + if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { + var othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { + continue outer; + } + } + if (seen) { + seen.push(value); + } + result.push(value); + } + } + return result; +}); + +module.exports = intersection; diff --git a/platforms/android/cordova/node_modules/lodash/array/last.js b/platforms/android/cordova/node_modules/lodash/array/last.js new file mode 100644 index 0000000..299af31 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/last.js @@ -0,0 +1,19 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/platforms/android/cordova/node_modules/lodash/array/lastIndexOf.js b/platforms/android/cordova/node_modules/lodash/array/lastIndexOf.js new file mode 100644 index 0000000..02b8062 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/lastIndexOf.js @@ -0,0 +1,60 @@ +var binaryIndex = require('../internal/binaryIndex'), + indexOfNaN = require('../internal/indexOfNaN'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=array.length-1] The index to search from + * or `true` to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // using `fromIndex` + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + * + * // performing a binary search + * _.lastIndexOf([1, 1, 2, 2], 2, true); + * // => 3 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (typeof fromIndex == 'number') { + index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; + } else if (fromIndex) { + index = binaryIndex(array, value, true) - 1; + var other = array[index]; + if (value === value ? (value === other) : (other !== other)) { + return index; + } + return -1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = lastIndexOf; diff --git a/platforms/android/cordova/node_modules/lodash/array/object.js b/platforms/android/cordova/node_modules/lodash/array/object.js new file mode 100644 index 0000000..f4a3453 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/object.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/platforms/android/cordova/node_modules/lodash/array/pull.js b/platforms/android/cordova/node_modules/lodash/array/pull.js new file mode 100644 index 0000000..7bcbb4a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/pull.js @@ -0,0 +1,52 @@ +var baseIndexOf = require('../internal/baseIndexOf'); + +/** Used for native method references. */ +var arrayProto = Array.prototype; + +/** Native method references. */ +var splice = arrayProto.splice; + +/** + * Removes all provided values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ +function pull() { + var args = arguments, + array = args[0]; + + if (!(array && array.length)) { + return array; + } + var index = 0, + indexOf = baseIndexOf, + length = args.length; + + while (++index < length) { + var fromIndex = 0, + value = args[index]; + + while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { + splice.call(array, fromIndex, 1); + } + } + return array; +} + +module.exports = pull; diff --git a/platforms/android/cordova/node_modules/lodash/array/pullAt.js b/platforms/android/cordova/node_modules/lodash/array/pullAt.js new file mode 100644 index 0000000..4ca2476 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/pullAt.js @@ -0,0 +1,40 @@ +var baseAt = require('../internal/baseAt'), + baseCompareAscending = require('../internal/baseCompareAscending'), + baseFlatten = require('../internal/baseFlatten'), + basePullAt = require('../internal/basePullAt'), + restParam = require('../function/restParam'); + +/** + * Removes elements from `array` corresponding to the given indexes and returns + * an array of the removed elements. Indexes may be specified as an array of + * indexes or as individual arguments. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove, + * specified as individual indexes or arrays of indexes. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [5, 10, 15, 20]; + * var evens = _.pullAt(array, 1, 3); + * + * console.log(array); + * // => [5, 15] + * + * console.log(evens); + * // => [10, 20] + */ +var pullAt = restParam(function(array, indexes) { + indexes = baseFlatten(indexes); + + var result = baseAt(array, indexes); + basePullAt(array, indexes.sort(baseCompareAscending)); + return result; +}); + +module.exports = pullAt; diff --git a/platforms/android/cordova/node_modules/lodash/array/remove.js b/platforms/android/cordova/node_modules/lodash/array/remove.js new file mode 100644 index 0000000..0cf979b --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/remove.js @@ -0,0 +1,64 @@ +var baseCallback = require('../internal/baseCallback'), + basePullAt = require('../internal/basePullAt'); + +/** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * **Note:** Unlike `_.filter`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ +function remove(array, predicate, thisArg) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = baseCallback(predicate, thisArg, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; +} + +module.exports = remove; diff --git a/platforms/android/cordova/node_modules/lodash/array/rest.js b/platforms/android/cordova/node_modules/lodash/array/rest.js new file mode 100644 index 0000000..9bfb734 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/rest.js @@ -0,0 +1,21 @@ +var drop = require('./drop'); + +/** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @alias tail + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.rest([1, 2, 3]); + * // => [2, 3] + */ +function rest(array) { + return drop(array, 1); +} + +module.exports = rest; diff --git a/platforms/android/cordova/node_modules/lodash/array/slice.js b/platforms/android/cordova/node_modules/lodash/array/slice.js new file mode 100644 index 0000000..48ef1a1 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/slice.js @@ -0,0 +1,30 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of `Array#slice` to support node + * lists in IE < 9 and to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function slice(array, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + return baseSlice(array, start, end); +} + +module.exports = slice; diff --git a/platforms/android/cordova/node_modules/lodash/array/sortedIndex.js b/platforms/android/cordova/node_modules/lodash/array/sortedIndex.js new file mode 100644 index 0000000..6903bca --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/sortedIndex.js @@ -0,0 +1,53 @@ +var createSortedIndex = require('../internal/createSortedIndex'); + +/** + * Uses a binary search to determine the lowest index at which `value` should + * be inserted into `array` in order to maintain its sort order. If an iteratee + * function is provided it's invoked for `value` and each element of `array` + * to compute their sort ranking. The iteratee is bound to `thisArg` and + * invoked with one argument; (value). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + * + * _.sortedIndex([4, 4, 5, 5], 5); + * // => 2 + * + * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } }; + * + * // using an iteratee function + * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) { + * return this.data[word]; + * }, dict); + * // => 1 + * + * // using the `_.property` callback shorthand + * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); + * // => 1 + */ +var sortedIndex = createSortedIndex(); + +module.exports = sortedIndex; diff --git a/platforms/android/cordova/node_modules/lodash/array/sortedLastIndex.js b/platforms/android/cordova/node_modules/lodash/array/sortedLastIndex.js new file mode 100644 index 0000000..81a4a86 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/sortedLastIndex.js @@ -0,0 +1,25 @@ +var createSortedIndex = require('../internal/createSortedIndex'); + +/** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 4, 5, 5], 5); + * // => 4 + */ +var sortedLastIndex = createSortedIndex(true); + +module.exports = sortedLastIndex; diff --git a/platforms/android/cordova/node_modules/lodash/array/tail.js b/platforms/android/cordova/node_modules/lodash/array/tail.js new file mode 100644 index 0000000..c5dfe77 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/tail.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/platforms/android/cordova/node_modules/lodash/array/take.js b/platforms/android/cordova/node_modules/lodash/array/take.js new file mode 100644 index 0000000..875917a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/take.js @@ -0,0 +1,39 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ +function take(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = take; diff --git a/platforms/android/cordova/node_modules/lodash/array/takeRight.js b/platforms/android/cordova/node_modules/lodash/array/takeRight.js new file mode 100644 index 0000000..6e89c87 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/takeRight.js @@ -0,0 +1,40 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ +function takeRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, n < 0 ? 0 : n); +} + +module.exports = takeRight; diff --git a/platforms/android/cordova/node_modules/lodash/array/takeRightWhile.js b/platforms/android/cordova/node_modules/lodash/array/takeRightWhile.js new file mode 100644 index 0000000..5464d13 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/takeRightWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is bound to `thisArg` + * and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [2, 3] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active', false), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active'), 'user'); + * // => [] + */ +function takeRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), false, true) + : []; +} + +module.exports = takeRightWhile; diff --git a/platforms/android/cordova/node_modules/lodash/array/takeWhile.js b/platforms/android/cordova/node_modules/lodash/array/takeWhile.js new file mode 100644 index 0000000..f7e28a1 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/takeWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [1, 2] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeWhile(users, 'active', false), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeWhile(users, 'active'), 'user'); + * // => [] + */ +function takeWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3)) + : []; +} + +module.exports = takeWhile; diff --git a/platforms/android/cordova/node_modules/lodash/array/union.js b/platforms/android/cordova/node_modules/lodash/array/union.js new file mode 100644 index 0000000..53cefe4 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/union.js @@ -0,0 +1,24 @@ +var baseFlatten = require('../internal/baseFlatten'), + baseUniq = require('../internal/baseUniq'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique values, in order, from all of the provided arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([1, 2], [4, 2], [2, 1]); + * // => [1, 2, 4] + */ +var union = restParam(function(arrays) { + return baseUniq(baseFlatten(arrays, false, true)); +}); + +module.exports = union; diff --git a/platforms/android/cordova/node_modules/lodash/array/uniq.js b/platforms/android/cordova/node_modules/lodash/array/uniq.js new file mode 100644 index 0000000..ae937ef --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/uniq.js @@ -0,0 +1,71 @@ +var baseCallback = require('../internal/baseCallback'), + baseUniq = require('../internal/baseUniq'), + isIterateeCall = require('../internal/isIterateeCall'), + sortedUniq = require('../internal/sortedUniq'); + +/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurence of each element + * is kept. Providing `true` for `isSorted` performs a faster search algorithm + * for sorted arrays. If an iteratee function is provided it's invoked for + * each element in the array to generate the criterion by which uniqueness + * is computed. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, array). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Array + * @param {Array} array The array to inspect. + * @param {boolean} [isSorted] Specify the array is sorted. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new duplicate-value-free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + * + * // using `isSorted` + * _.uniq([1, 1, 2], true); + * // => [1, 2] + * + * // using an iteratee function + * _.uniq([1, 2.5, 1.5, 2], function(n) { + * return this.floor(n); + * }, Math); + * // => [1, 2.5] + * + * // using the `_.property` callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ +function uniq(array, isSorted, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (isSorted != null && typeof isSorted != 'boolean') { + thisArg = iteratee; + iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted; + isSorted = false; + } + iteratee = iteratee == null ? iteratee : baseCallback(iteratee, thisArg, 3); + return (isSorted) + ? sortedUniq(array, iteratee) + : baseUniq(array, iteratee); +} + +module.exports = uniq; diff --git a/platforms/android/cordova/node_modules/lodash/array/unique.js b/platforms/android/cordova/node_modules/lodash/array/unique.js new file mode 100644 index 0000000..396de1b --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/unique.js @@ -0,0 +1 @@ +module.exports = require('./uniq'); diff --git a/platforms/android/cordova/node_modules/lodash/array/unzip.js b/platforms/android/cordova/node_modules/lodash/array/unzip.js new file mode 100644 index 0000000..0a539fa --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/unzip.js @@ -0,0 +1,47 @@ +var arrayFilter = require('../internal/arrayFilter'), + arrayMap = require('../internal/arrayMap'), + baseProperty = require('../internal/baseProperty'), + isArrayLike = require('../internal/isArrayLike'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + * + * _.unzip(zipped); + * // => [['fred', 'barney'], [30, 40], [true, false]] + */ +function unzip(array) { + if (!(array && array.length)) { + return []; + } + var index = -1, + length = 0; + + array = arrayFilter(array, function(group) { + if (isArrayLike(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + var result = Array(length); + while (++index < length) { + result[index] = arrayMap(array, baseProperty(index)); + } + return result; +} + +module.exports = unzip; diff --git a/platforms/android/cordova/node_modules/lodash/array/unzipWith.js b/platforms/android/cordova/node_modules/lodash/array/unzipWith.js new file mode 100644 index 0000000..324a2b1 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/unzipWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('../internal/arrayMap'), + arrayReduce = require('../internal/arrayReduce'), + bindCallback = require('../internal/bindCallback'), + unzip = require('./unzip'); + +/** + * This method is like `_.unzip` except that it accepts an iteratee to specify + * how regrouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee] The function to combine regrouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ +function unzipWith(array, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + iteratee = bindCallback(iteratee, thisArg, 4); + return arrayMap(result, function(group) { + return arrayReduce(group, iteratee, undefined, true); + }); +} + +module.exports = unzipWith; diff --git a/platforms/android/cordova/node_modules/lodash/array/without.js b/platforms/android/cordova/node_modules/lodash/array/without.js new file mode 100644 index 0000000..2ac3d11 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/without.js @@ -0,0 +1,27 @@ +var baseDifference = require('../internal/baseDifference'), + isArrayLike = require('../internal/isArrayLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array excluding all provided values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ +var without = restParam(function(array, values) { + return isArrayLike(array) + ? baseDifference(array, values) + : []; +}); + +module.exports = without; diff --git a/platforms/android/cordova/node_modules/lodash/array/xor.js b/platforms/android/cordova/node_modules/lodash/array/xor.js new file mode 100644 index 0000000..04ef32a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/xor.js @@ -0,0 +1,35 @@ +var arrayPush = require('../internal/arrayPush'), + baseDifference = require('../internal/baseDifference'), + baseUniq = require('../internal/baseUniq'), + isArrayLike = require('../internal/isArrayLike'); + +/** + * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the provided arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xor([1, 2], [4, 2]); + * // => [1, 4] + */ +function xor() { + var index = -1, + length = arguments.length; + + while (++index < length) { + var array = arguments[index]; + if (isArrayLike(array)) { + var result = result + ? arrayPush(baseDifference(result, array), baseDifference(array, result)) + : array; + } + } + return result ? baseUniq(result) : []; +} + +module.exports = xor; diff --git a/platforms/android/cordova/node_modules/lodash/array/zip.js b/platforms/android/cordova/node_modules/lodash/array/zip.js new file mode 100644 index 0000000..53a6f69 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/zip.js @@ -0,0 +1,21 @@ +var restParam = require('../function/restParam'), + unzip = require('./unzip'); + +/** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second elements + * of the given arrays, and so on. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ +var zip = restParam(unzip); + +module.exports = zip; diff --git a/platforms/android/cordova/node_modules/lodash/array/zipObject.js b/platforms/android/cordova/node_modules/lodash/array/zipObject.js new file mode 100644 index 0000000..dec7a21 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/zipObject.js @@ -0,0 +1,43 @@ +var isArray = require('../lang/isArray'); + +/** + * The inverse of `_.pairs`; this method returns an object composed from arrays + * of property names and values. Provide either a single two dimensional array, + * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names + * and one of corresponding values. + * + * @static + * @memberOf _ + * @alias object + * @category Array + * @param {Array} props The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + * + * _.zipObject(['fred', 'barney'], [30, 40]); + * // => { 'fred': 30, 'barney': 40 } + */ +function zipObject(props, values) { + var index = -1, + length = props ? props.length : 0, + result = {}; + + if (length && !values && !isArray(props[0])) { + values = []; + } + while (++index < length) { + var key = props[index]; + if (values) { + result[key] = values[index]; + } else if (key) { + result[key[0]] = key[1]; + } + } + return result; +} + +module.exports = zipObject; diff --git a/platforms/android/cordova/node_modules/lodash/array/zipWith.js b/platforms/android/cordova/node_modules/lodash/array/zipWith.js new file mode 100644 index 0000000..ad10374 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/array/zipWith.js @@ -0,0 +1,36 @@ +var restParam = require('../function/restParam'), + unzipWith = require('./unzipWith'); + +/** + * This method is like `_.zip` except that it accepts an iteratee to specify + * how grouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee] The function to combine grouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], _.add); + * // => [111, 222] + */ +var zipWith = restParam(function(arrays) { + var length = arrays.length, + iteratee = length > 2 ? arrays[length - 2] : undefined, + thisArg = length > 1 ? arrays[length - 1] : undefined; + + if (length > 2 && typeof iteratee == 'function') { + length -= 2; + } else { + iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined; + thisArg = undefined; + } + arrays.length = length; + return unzipWith(arrays, iteratee, thisArg); +}); + +module.exports = zipWith; diff --git a/platforms/android/cordova/node_modules/lodash/chain.js b/platforms/android/cordova/node_modules/lodash/chain.js new file mode 100644 index 0000000..6439627 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain.js @@ -0,0 +1,16 @@ +module.exports = { + 'chain': require('./chain/chain'), + 'commit': require('./chain/commit'), + 'concat': require('./chain/concat'), + 'lodash': require('./chain/lodash'), + 'plant': require('./chain/plant'), + 'reverse': require('./chain/reverse'), + 'run': require('./chain/run'), + 'tap': require('./chain/tap'), + 'thru': require('./chain/thru'), + 'toJSON': require('./chain/toJSON'), + 'toString': require('./chain/toString'), + 'value': require('./chain/value'), + 'valueOf': require('./chain/valueOf'), + 'wrapperChain': require('./chain/wrapperChain') +}; diff --git a/platforms/android/cordova/node_modules/lodash/chain/chain.js b/platforms/android/cordova/node_modules/lodash/chain/chain.js new file mode 100644 index 0000000..453ba1e --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/chain.js @@ -0,0 +1,35 @@ +var lodash = require('./lodash'); + +/** + * Creates a `lodash` object that wraps `value` with explicit method + * chaining enabled. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _.chain(users) + * .sortBy('age') + * .map(function(chr) { + * return chr.user + ' is ' + chr.age; + * }) + * .first() + * .value(); + * // => 'pebbles is 1' + */ +function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; +} + +module.exports = chain; diff --git a/platforms/android/cordova/node_modules/lodash/chain/commit.js b/platforms/android/cordova/node_modules/lodash/chain/commit.js new file mode 100644 index 0000000..c732d1b --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/commit.js @@ -0,0 +1 @@ +module.exports = require('./wrapperCommit'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/concat.js b/platforms/android/cordova/node_modules/lodash/chain/concat.js new file mode 100644 index 0000000..90607d1 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/concat.js @@ -0,0 +1 @@ +module.exports = require('./wrapperConcat'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/lodash.js b/platforms/android/cordova/node_modules/lodash/chain/lodash.js new file mode 100644 index 0000000..1c3467e --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/lodash.js @@ -0,0 +1,125 @@ +var LazyWrapper = require('../internal/LazyWrapper'), + LodashWrapper = require('../internal/LodashWrapper'), + baseLodash = require('../internal/baseLodash'), + isArray = require('../lang/isArray'), + isObjectLike = require('../internal/isObjectLike'), + wrapperClone = require('../internal/wrapperClone'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates a `lodash` object which wraps `value` to enable implicit chaining. + * Methods that operate on and return arrays, collections, and functions can + * be chained together. Methods that retrieve a single value or may return a + * primitive value will automatically end the chain returning the unwrapped + * value. Explicit chaining may be enabled using `_.chain`. The execution of + * chained methods is lazy, that is, execution is deferred until `_#value` + * is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization strategy which merge iteratee calls; this can help + * to avoid the creation of intermediate data structures and greatly reduce the + * number of iteratee executions. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, + * `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, + * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, + * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`, + * and `where` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`, + * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`, + * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`, + * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`, + * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, + * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, + * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`, + * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`, + * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`, + * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`, + * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`, + * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`, + * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`, + * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`, + * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`, + * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, + * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`, + * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, + * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`, + * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`, + * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`, + * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`, + * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`, + * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`, + * `unescape`, `uniqueId`, `value`, and `words` + * + * The wrapper method `sample` will return a wrapped value when `n` is provided, + * otherwise an unwrapped value is returned. + * + * @name _ + * @constructor + * @category Chain + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var wrapped = _([1, 2, 3]); + * + * // returns an unwrapped value + * wrapped.reduce(function(total, n) { + * return total + n; + * }); + * // => 6 + * + * // returns a wrapped value + * var squares = wrapped.map(function(n) { + * return n * n; + * }); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ +function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); +} + +// Ensure wrappers are instances of `baseLodash`. +lodash.prototype = baseLodash.prototype; + +module.exports = lodash; diff --git a/platforms/android/cordova/node_modules/lodash/chain/plant.js b/platforms/android/cordova/node_modules/lodash/chain/plant.js new file mode 100644 index 0000000..04099f2 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/plant.js @@ -0,0 +1 @@ +module.exports = require('./wrapperPlant'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/reverse.js b/platforms/android/cordova/node_modules/lodash/chain/reverse.js new file mode 100644 index 0000000..f72a64a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/reverse.js @@ -0,0 +1 @@ +module.exports = require('./wrapperReverse'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/run.js b/platforms/android/cordova/node_modules/lodash/chain/run.js new file mode 100644 index 0000000..5e751a2 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/run.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/tap.js b/platforms/android/cordova/node_modules/lodash/chain/tap.js new file mode 100644 index 0000000..3d0257e --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/tap.js @@ -0,0 +1,29 @@ +/** + * This method invokes `interceptor` and returns `value`. The interceptor is + * bound to `thisArg` and invoked with one argument; (value). The purpose of + * this method is to "tap into" a method chain in order to perform operations + * on intermediate results within the chain. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ +function tap(value, interceptor, thisArg) { + interceptor.call(thisArg, value); + return value; +} + +module.exports = tap; diff --git a/platforms/android/cordova/node_modules/lodash/chain/thru.js b/platforms/android/cordova/node_modules/lodash/chain/thru.js new file mode 100644 index 0000000..a715780 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/thru.js @@ -0,0 +1,26 @@ +/** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ +function thru(value, interceptor, thisArg) { + return interceptor.call(thisArg, value); +} + +module.exports = thru; diff --git a/platforms/android/cordova/node_modules/lodash/chain/toJSON.js b/platforms/android/cordova/node_modules/lodash/chain/toJSON.js new file mode 100644 index 0000000..5e751a2 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/toJSON.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/toString.js b/platforms/android/cordova/node_modules/lodash/chain/toString.js new file mode 100644 index 0000000..c7bcbf9 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/toString.js @@ -0,0 +1 @@ +module.exports = require('./wrapperToString'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/value.js b/platforms/android/cordova/node_modules/lodash/chain/value.js new file mode 100644 index 0000000..5e751a2 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/value.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/valueOf.js b/platforms/android/cordova/node_modules/lodash/chain/valueOf.js new file mode 100644 index 0000000..5e751a2 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/valueOf.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/platforms/android/cordova/node_modules/lodash/chain/wrapperChain.js b/platforms/android/cordova/node_modules/lodash/chain/wrapperChain.js new file mode 100644 index 0000000..3823481 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/wrapperChain.js @@ -0,0 +1,32 @@ +var chain = require('./chain'); + +/** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // without explicit chaining + * _(users).first(); + * // => { 'user': 'barney', 'age': 36 } + * + * // with explicit chaining + * _(users).chain() + * .first() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ +function wrapperChain() { + return chain(this); +} + +module.exports = wrapperChain; diff --git a/platforms/android/cordova/node_modules/lodash/chain/wrapperCommit.js b/platforms/android/cordova/node_modules/lodash/chain/wrapperCommit.js new file mode 100644 index 0000000..c3d2898 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/wrapperCommit.js @@ -0,0 +1,32 @@ +var LodashWrapper = require('../internal/LodashWrapper'); + +/** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/platforms/android/cordova/node_modules/lodash/chain/wrapperConcat.js b/platforms/android/cordova/node_modules/lodash/chain/wrapperConcat.js new file mode 100644 index 0000000..799156c --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/wrapperConcat.js @@ -0,0 +1,34 @@ +var arrayConcat = require('../internal/arrayConcat'), + baseFlatten = require('../internal/baseFlatten'), + isArray = require('../lang/isArray'), + restParam = require('../function/restParam'), + toObject = require('../internal/toObject'); + +/** + * Creates a new array joining a wrapped array with any additional arrays + * and/or values. + * + * @name concat + * @memberOf _ + * @category Chain + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var wrapped = _(array).concat(2, [3], [[4]]); + * + * console.log(wrapped.value()); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ +var wrapperConcat = restParam(function(values) { + values = baseFlatten(values); + return this.thru(function(array) { + return arrayConcat(isArray(array) ? array : [toObject(array)], values); + }); +}); + +module.exports = wrapperConcat; diff --git a/platforms/android/cordova/node_modules/lodash/chain/wrapperPlant.js b/platforms/android/cordova/node_modules/lodash/chain/wrapperPlant.js new file mode 100644 index 0000000..234fe41 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/wrapperPlant.js @@ -0,0 +1,45 @@ +var baseLodash = require('../internal/baseLodash'), + wrapperClone = require('../internal/wrapperClone'); + +/** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).map(function(value) { + * return Math.pow(value, 2); + * }); + * + * var other = [3, 4]; + * var otherWrapped = wrapped.plant(other); + * + * otherWrapped.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ +function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; +} + +module.exports = wrapperPlant; diff --git a/platforms/android/cordova/node_modules/lodash/chain/wrapperReverse.js b/platforms/android/cordova/node_modules/lodash/chain/wrapperReverse.js new file mode 100644 index 0000000..6ba546d --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/wrapperReverse.js @@ -0,0 +1,43 @@ +var LazyWrapper = require('../internal/LazyWrapper'), + LodashWrapper = require('../internal/LodashWrapper'), + thru = require('./thru'); + +/** + * Reverses the wrapped array so the first element becomes the last, the + * second element becomes the second to last, and so on. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new reversed `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ +function wrapperReverse() { + var value = this.__wrapped__; + + var interceptor = function(value) { + return value.reverse(); + }; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(interceptor); +} + +module.exports = wrapperReverse; diff --git a/platforms/android/cordova/node_modules/lodash/chain/wrapperToString.js b/platforms/android/cordova/node_modules/lodash/chain/wrapperToString.js new file mode 100644 index 0000000..db975a5 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/wrapperToString.js @@ -0,0 +1,17 @@ +/** + * Produces the result of coercing the unwrapped value to a string. + * + * @name toString + * @memberOf _ + * @category Chain + * @returns {string} Returns the coerced string value. + * @example + * + * _([1, 2, 3]).toString(); + * // => '1,2,3' + */ +function wrapperToString() { + return (this.value() + ''); +} + +module.exports = wrapperToString; diff --git a/platforms/android/cordova/node_modules/lodash/chain/wrapperValue.js b/platforms/android/cordova/node_modules/lodash/chain/wrapperValue.js new file mode 100644 index 0000000..2734e41 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/chain/wrapperValue.js @@ -0,0 +1,20 @@ +var baseWrapperValue = require('../internal/baseWrapperValue'); + +/** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias run, toJSON, valueOf + * @category Chain + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ +function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); +} + +module.exports = wrapperValue; diff --git a/platforms/android/cordova/node_modules/lodash/collection.js b/platforms/android/cordova/node_modules/lodash/collection.js new file mode 100644 index 0000000..0338857 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection.js @@ -0,0 +1,44 @@ +module.exports = { + 'all': require('./collection/all'), + 'any': require('./collection/any'), + 'at': require('./collection/at'), + 'collect': require('./collection/collect'), + 'contains': require('./collection/contains'), + 'countBy': require('./collection/countBy'), + 'detect': require('./collection/detect'), + 'each': require('./collection/each'), + 'eachRight': require('./collection/eachRight'), + 'every': require('./collection/every'), + 'filter': require('./collection/filter'), + 'find': require('./collection/find'), + 'findLast': require('./collection/findLast'), + 'findWhere': require('./collection/findWhere'), + 'foldl': require('./collection/foldl'), + 'foldr': require('./collection/foldr'), + 'forEach': require('./collection/forEach'), + 'forEachRight': require('./collection/forEachRight'), + 'groupBy': require('./collection/groupBy'), + 'include': require('./collection/include'), + 'includes': require('./collection/includes'), + 'indexBy': require('./collection/indexBy'), + 'inject': require('./collection/inject'), + 'invoke': require('./collection/invoke'), + 'map': require('./collection/map'), + 'max': require('./math/max'), + 'min': require('./math/min'), + 'partition': require('./collection/partition'), + 'pluck': require('./collection/pluck'), + 'reduce': require('./collection/reduce'), + 'reduceRight': require('./collection/reduceRight'), + 'reject': require('./collection/reject'), + 'sample': require('./collection/sample'), + 'select': require('./collection/select'), + 'shuffle': require('./collection/shuffle'), + 'size': require('./collection/size'), + 'some': require('./collection/some'), + 'sortBy': require('./collection/sortBy'), + 'sortByAll': require('./collection/sortByAll'), + 'sortByOrder': require('./collection/sortByOrder'), + 'sum': require('./math/sum'), + 'where': require('./collection/where') +}; diff --git a/platforms/android/cordova/node_modules/lodash/collection/all.js b/platforms/android/cordova/node_modules/lodash/collection/all.js new file mode 100644 index 0000000..d0839f7 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/all.js @@ -0,0 +1 @@ +module.exports = require('./every'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/any.js b/platforms/android/cordova/node_modules/lodash/collection/any.js new file mode 100644 index 0000000..900ac25 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/any.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/at.js b/platforms/android/cordova/node_modules/lodash/collection/at.js new file mode 100644 index 0000000..29236e5 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/at.js @@ -0,0 +1,29 @@ +var baseAt = require('../internal/baseAt'), + baseFlatten = require('../internal/baseFlatten'), + restParam = require('../function/restParam'); + +/** + * Creates an array of elements corresponding to the given keys, or indexes, + * of `collection`. Keys may be specified as individual arguments or as arrays + * of keys. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(number|number[]|string|string[])} [props] The property names + * or indexes of elements to pick, specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * _.at(['a', 'b', 'c'], [0, 2]); + * // => ['a', 'c'] + * + * _.at(['barney', 'fred', 'pebbles'], 0, 2); + * // => ['barney', 'pebbles'] + */ +var at = restParam(function(collection, props) { + return baseAt(collection, baseFlatten(props)); +}); + +module.exports = at; diff --git a/platforms/android/cordova/node_modules/lodash/collection/collect.js b/platforms/android/cordova/node_modules/lodash/collection/collect.js new file mode 100644 index 0000000..0d1e1ab --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/collect.js @@ -0,0 +1 @@ +module.exports = require('./map'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/contains.js b/platforms/android/cordova/node_modules/lodash/collection/contains.js new file mode 100644 index 0000000..594722a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/countBy.js b/platforms/android/cordova/node_modules/lodash/collection/countBy.js new file mode 100644 index 0000000..e97dbb7 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/countBy.js @@ -0,0 +1,54 @@ +var createAggregator = require('../internal/createAggregator'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the number of times the key was returned by `iteratee`. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': 1, '6': 2 } + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); +}); + +module.exports = countBy; diff --git a/platforms/android/cordova/node_modules/lodash/collection/detect.js b/platforms/android/cordova/node_modules/lodash/collection/detect.js new file mode 100644 index 0000000..2fb6303 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/detect.js @@ -0,0 +1 @@ +module.exports = require('./find'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/each.js b/platforms/android/cordova/node_modules/lodash/collection/each.js new file mode 100644 index 0000000..8800f42 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/eachRight.js b/platforms/android/cordova/node_modules/lodash/collection/eachRight.js new file mode 100644 index 0000000..3252b2a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/every.js b/platforms/android/cordova/node_modules/lodash/collection/every.js new file mode 100644 index 0000000..5a2d0f5 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/every.js @@ -0,0 +1,66 @@ +var arrayEvery = require('../internal/arrayEvery'), + baseCallback = require('../internal/baseCallback'), + baseEvery = require('../internal/baseEvery'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = baseCallback(predicate, thisArg, 3); + } + return func(collection, predicate); +} + +module.exports = every; diff --git a/platforms/android/cordova/node_modules/lodash/collection/filter.js b/platforms/android/cordova/node_modules/lodash/collection/filter.js new file mode 100644 index 0000000..7620aa7 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/filter.js @@ -0,0 +1,61 @@ +var arrayFilter = require('../internal/arrayFilter'), + baseCallback = require('../internal/baseCallback'), + baseFilter = require('../internal/baseFilter'), + isArray = require('../lang/isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.filter([4, 5, 6], function(n) { + * return n % 2 == 0; + * }); + * // => [4, 6] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.filter(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.filter(users, 'active'), 'user'); + * // => ['barney'] + */ +function filter(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = baseCallback(predicate, thisArg, 3); + return func(collection, predicate); +} + +module.exports = filter; diff --git a/platforms/android/cordova/node_modules/lodash/collection/find.js b/platforms/android/cordova/node_modules/lodash/collection/find.js new file mode 100644 index 0000000..7358cfe --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/find.js @@ -0,0 +1,56 @@ +var baseEach = require('../internal/baseEach'), + createFind = require('../internal/createFind'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias detect + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.result(_.find(users, function(chr) { + * return chr.age < 40; + * }), 'user'); + * // => 'barney' + * + * // using the `_.matches` callback shorthand + * _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.result(_.find(users, 'active', false), 'user'); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.result(_.find(users, 'active'), 'user'); + * // => 'barney' + */ +var find = createFind(baseEach); + +module.exports = find; diff --git a/platforms/android/cordova/node_modules/lodash/collection/findLast.js b/platforms/android/cordova/node_modules/lodash/collection/findLast.js new file mode 100644 index 0000000..75dbadc --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/findLast.js @@ -0,0 +1,25 @@ +var baseEachRight = require('../internal/baseEachRight'), + createFind = require('../internal/createFind'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ +var findLast = createFind(baseEachRight, true); + +module.exports = findLast; diff --git a/platforms/android/cordova/node_modules/lodash/collection/findWhere.js b/platforms/android/cordova/node_modules/lodash/collection/findWhere.js new file mode 100644 index 0000000..2d62065 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/findWhere.js @@ -0,0 +1,37 @@ +var baseMatches = require('../internal/baseMatches'), + find = require('./find'); + +/** + * Performs a deep comparison between each element in `collection` and the + * source object, returning the first element that has equivalent property + * values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user'); + * // => 'barney' + * + * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user'); + * // => 'fred' + */ +function findWhere(collection, source) { + return find(collection, baseMatches(source)); +} + +module.exports = findWhere; diff --git a/platforms/android/cordova/node_modules/lodash/collection/foldl.js b/platforms/android/cordova/node_modules/lodash/collection/foldl.js new file mode 100644 index 0000000..26f53cf --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/foldl.js @@ -0,0 +1 @@ +module.exports = require('./reduce'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/foldr.js b/platforms/android/cordova/node_modules/lodash/collection/foldr.js new file mode 100644 index 0000000..8fb199e --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/foldr.js @@ -0,0 +1 @@ +module.exports = require('./reduceRight'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/forEach.js b/platforms/android/cordova/node_modules/lodash/collection/forEach.js new file mode 100644 index 0000000..05a8e21 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/forEach.js @@ -0,0 +1,37 @@ +var arrayEach = require('../internal/arrayEach'), + baseEach = require('../internal/baseEach'), + createForEach = require('../internal/createForEach'); + +/** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). Iteratee functions may exit iteration early + * by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from left to right and returns the array + * + * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { + * console.log(n, key); + * }); + * // => logs each value-key pair and returns the object (iteration order is not guaranteed) + */ +var forEach = createForEach(arrayEach, baseEach); + +module.exports = forEach; diff --git a/platforms/android/cordova/node_modules/lodash/collection/forEachRight.js b/platforms/android/cordova/node_modules/lodash/collection/forEachRight.js new file mode 100644 index 0000000..3499711 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/forEachRight.js @@ -0,0 +1,26 @@ +var arrayEachRight = require('../internal/arrayEachRight'), + baseEachRight = require('../internal/baseEachRight'), + createForEach = require('../internal/createForEach'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEachRight(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from right to left and returns the array + */ +var forEachRight = createForEach(arrayEachRight, baseEachRight); + +module.exports = forEachRight; diff --git a/platforms/android/cordova/node_modules/lodash/collection/groupBy.js b/platforms/android/cordova/node_modules/lodash/collection/groupBy.js new file mode 100644 index 0000000..a925c89 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/groupBy.js @@ -0,0 +1,59 @@ +var createAggregator = require('../internal/createAggregator'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using the `_.property` callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } +}); + +module.exports = groupBy; diff --git a/platforms/android/cordova/node_modules/lodash/collection/include.js b/platforms/android/cordova/node_modules/lodash/collection/include.js new file mode 100644 index 0000000..594722a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/include.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/includes.js b/platforms/android/cordova/node_modules/lodash/collection/includes.js new file mode 100644 index 0000000..329486a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/includes.js @@ -0,0 +1,57 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + getLength = require('../internal/getLength'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'), + isLength = require('../internal/isLength'), + isString = require('../lang/isString'), + values = require('../object/values'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `target` is in `collection` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `collection`. + * + * @static + * @memberOf _ + * @alias contains, include + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} target The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {boolean} Returns `true` if a matching element is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ +function includes(collection, target, fromIndex, guard) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + collection = values(collection); + length = collection.length; + } + if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { + fromIndex = 0; + } else { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); + } + return (typeof collection == 'string' || !isArray(collection) && isString(collection)) + ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1) + : (!!length && baseIndexOf(collection, target, fromIndex) > -1); +} + +module.exports = includes; diff --git a/platforms/android/cordova/node_modules/lodash/collection/indexBy.js b/platforms/android/cordova/node_modules/lodash/collection/indexBy.js new file mode 100644 index 0000000..34a941e --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/indexBy.js @@ -0,0 +1,53 @@ +var createAggregator = require('../internal/createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var keyData = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.indexBy(keyData, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return String.fromCharCode(object.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return this.fromCharCode(object.code); + * }, String); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + */ +var indexBy = createAggregator(function(result, value, key) { + result[key] = value; +}); + +module.exports = indexBy; diff --git a/platforms/android/cordova/node_modules/lodash/collection/inject.js b/platforms/android/cordova/node_modules/lodash/collection/inject.js new file mode 100644 index 0000000..26f53cf --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/inject.js @@ -0,0 +1 @@ +module.exports = require('./reduce'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/invoke.js b/platforms/android/cordova/node_modules/lodash/collection/invoke.js new file mode 100644 index 0000000..6e71721 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/invoke.js @@ -0,0 +1,42 @@ +var baseEach = require('../internal/baseEach'), + invokePath = require('../internal/invokePath'), + isArrayLike = require('../internal/isArrayLike'), + isKey = require('../internal/isKey'), + restParam = require('../function/restParam'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it's + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invoke([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invoke = restParam(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? func.apply(value, args) : invokePath(value, path, args); + }); + return result; +}); + +module.exports = invoke; diff --git a/platforms/android/cordova/node_modules/lodash/collection/map.js b/platforms/android/cordova/node_modules/lodash/collection/map.js new file mode 100644 index 0000000..5381110 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/map.js @@ -0,0 +1,68 @@ +var arrayMap = require('../internal/arrayMap'), + baseCallback = require('../internal/baseCallback'), + baseMap = require('../internal/baseMap'), + isArray = require('../lang/isArray'); + +/** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, + * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, + * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, + * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, + * `sum`, `uniq`, and `words` + * + * @static + * @memberOf _ + * @alias collect + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new mapped array. + * @example + * + * function timesThree(n) { + * return n * 3; + * } + * + * _.map([1, 2], timesThree); + * // => [3, 6] + * + * _.map({ 'a': 1, 'b': 2 }, timesThree); + * // => [3, 6] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // using the `_.property` callback shorthand + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee, thisArg) { + var func = isArray(collection) ? arrayMap : baseMap; + iteratee = baseCallback(iteratee, thisArg, 3); + return func(collection, iteratee); +} + +module.exports = map; diff --git a/platforms/android/cordova/node_modules/lodash/collection/max.js b/platforms/android/cordova/node_modules/lodash/collection/max.js new file mode 100644 index 0000000..bb1d213 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/max.js @@ -0,0 +1 @@ +module.exports = require('../math/max'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/min.js b/platforms/android/cordova/node_modules/lodash/collection/min.js new file mode 100644 index 0000000..eef13d0 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/min.js @@ -0,0 +1 @@ +module.exports = require('../math/min'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/partition.js b/platforms/android/cordova/node_modules/lodash/collection/partition.js new file mode 100644 index 0000000..ee35f27 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/partition.js @@ -0,0 +1,66 @@ +var createAggregator = require('../internal/createAggregator'); + +/** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, while the second of which + * contains elements `predicate` returns falsey for. The predicate is bound + * to `thisArg` and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * _.partition([1, 2, 3], function(n) { + * return n % 2; + * }); + * // => [[1, 3], [2]] + * + * _.partition([1.2, 2.3, 3.4], function(n) { + * return this.floor(n) % 2; + * }, Math); + * // => [[1.2, 3.4], [2.3]] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * var mapper = function(array) { + * return _.pluck(array, 'user'); + * }; + * + * // using the `_.matches` callback shorthand + * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper); + * // => [['pebbles'], ['barney', 'fred']] + * + * // using the `_.matchesProperty` callback shorthand + * _.map(_.partition(users, 'active', false), mapper); + * // => [['barney', 'pebbles'], ['fred']] + * + * // using the `_.property` callback shorthand + * _.map(_.partition(users, 'active'), mapper); + * // => [['fred'], ['barney', 'pebbles']] + */ +var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); +}, function() { return [[], []]; }); + +module.exports = partition; diff --git a/platforms/android/cordova/node_modules/lodash/collection/pluck.js b/platforms/android/cordova/node_modules/lodash/collection/pluck.js new file mode 100644 index 0000000..5ee1ec8 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/pluck.js @@ -0,0 +1,31 @@ +var map = require('./map'), + property = require('../utility/property'); + +/** + * Gets the property value of `path` from all elements in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|string} path The path of the property to pluck. + * @returns {Array} Returns the property values. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.pluck(users, 'user'); + * // => ['barney', 'fred'] + * + * var userIndex = _.indexBy(users, 'user'); + * _.pluck(userIndex, 'age'); + * // => [36, 40] (iteration order is not guaranteed) + */ +function pluck(collection, path) { + return map(collection, property(path)); +} + +module.exports = pluck; diff --git a/platforms/android/cordova/node_modules/lodash/collection/reduce.js b/platforms/android/cordova/node_modules/lodash/collection/reduce.js new file mode 100644 index 0000000..5d5e8c9 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/reduce.js @@ -0,0 +1,44 @@ +var arrayReduce = require('../internal/arrayReduce'), + baseEach = require('../internal/baseEach'), + createReduce = require('../internal/createReduce'); + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not provided the first element of `collection` is used as the initial + * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`, + * and `sortByOrder` + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(total, n) { + * return total + n; + * }); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) + */ +var reduce = createReduce(arrayReduce, baseEach); + +module.exports = reduce; diff --git a/platforms/android/cordova/node_modules/lodash/collection/reduceRight.js b/platforms/android/cordova/node_modules/lodash/collection/reduceRight.js new file mode 100644 index 0000000..5a5753b --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/reduceRight.js @@ -0,0 +1,29 @@ +var arrayReduceRight = require('../internal/arrayReduceRight'), + baseEachRight = require('../internal/baseEachRight'), + createReduce = require('../internal/createReduce'); + +/** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias foldr + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ +var reduceRight = createReduce(arrayReduceRight, baseEachRight); + +module.exports = reduceRight; diff --git a/platforms/android/cordova/node_modules/lodash/collection/reject.js b/platforms/android/cordova/node_modules/lodash/collection/reject.js new file mode 100644 index 0000000..5592453 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/reject.js @@ -0,0 +1,50 @@ +var arrayFilter = require('../internal/arrayFilter'), + baseCallback = require('../internal/baseCallback'), + baseFilter = require('../internal/baseFilter'), + isArray = require('../lang/isArray'); + +/** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.reject([1, 2, 3, 4], function(n) { + * return n % 2 == 0; + * }); + * // => [1, 3] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.reject(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.reject(users, 'active'), 'user'); + * // => ['barney'] + */ +function reject(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = baseCallback(predicate, thisArg, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); +} + +module.exports = reject; diff --git a/platforms/android/cordova/node_modules/lodash/collection/sample.js b/platforms/android/cordova/node_modules/lodash/collection/sample.js new file mode 100644 index 0000000..8e01533 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/sample.js @@ -0,0 +1,50 @@ +var baseRandom = require('../internal/baseRandom'), + isIterateeCall = require('../internal/isIterateeCall'), + toArray = require('../lang/toArray'), + toIterable = require('../internal/toIterable'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Gets a random element or `n` random elements from a collection. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to sample. + * @param {number} [n] The number of elements to sample. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {*} Returns the random sample(s). + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + * + * _.sample([1, 2, 3, 4], 2); + * // => [3, 1] + */ +function sample(collection, n, guard) { + if (guard ? isIterateeCall(collection, n, guard) : n == null) { + collection = toIterable(collection); + var length = collection.length; + return length > 0 ? collection[baseRandom(0, length - 1)] : undefined; + } + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1; + + n = nativeMin(n < 0 ? 0 : (+n || 0), length); + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand]; + + result[rand] = result[index]; + result[index] = value; + } + result.length = n; + return result; +} + +module.exports = sample; diff --git a/platforms/android/cordova/node_modules/lodash/collection/select.js b/platforms/android/cordova/node_modules/lodash/collection/select.js new file mode 100644 index 0000000..ade80f6 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/select.js @@ -0,0 +1 @@ +module.exports = require('./filter'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/shuffle.js b/platforms/android/cordova/node_modules/lodash/collection/shuffle.js new file mode 100644 index 0000000..949689c --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/shuffle.js @@ -0,0 +1,24 @@ +var sample = require('./sample'); + +/** Used as references for `-Infinity` and `Infinity`. */ +var POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle(collection) { + return sample(collection, POSITIVE_INFINITY); +} + +module.exports = shuffle; diff --git a/platforms/android/cordova/node_modules/lodash/collection/size.js b/platforms/android/cordova/node_modules/lodash/collection/size.js new file mode 100644 index 0000000..78dcf4c --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/size.js @@ -0,0 +1,30 @@ +var getLength = require('../internal/getLength'), + isLength = require('../internal/isLength'), + keys = require('../object/keys'); + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the size of `collection`. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + var length = collection ? getLength(collection) : 0; + return isLength(length) ? length : keys(collection).length; +} + +module.exports = size; diff --git a/platforms/android/cordova/node_modules/lodash/collection/some.js b/platforms/android/cordova/node_modules/lodash/collection/some.js new file mode 100644 index 0000000..d0b09a4 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/some.js @@ -0,0 +1,67 @@ +var arraySome = require('../internal/arraySome'), + baseCallback = require('../internal/baseCallback'), + baseSome = require('../internal/baseSome'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * The function returns as soon as it finds a passing value and does not iterate + * over the entire collection. The predicate is bound to `thisArg` and invoked + * with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.some(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.some(users, 'active'); + * // => true + */ +function some(collection, predicate, thisArg) { + var func = isArray(collection) ? arraySome : baseSome; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = baseCallback(predicate, thisArg, 3); + } + return func(collection, predicate); +} + +module.exports = some; diff --git a/platforms/android/cordova/node_modules/lodash/collection/sortBy.js b/platforms/android/cordova/node_modules/lodash/collection/sortBy.js new file mode 100644 index 0000000..4401c77 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/sortBy.js @@ -0,0 +1,71 @@ +var baseCallback = require('../internal/baseCallback'), + baseMap = require('../internal/baseMap'), + baseSortBy = require('../internal/baseSortBy'), + compareAscending = require('../internal/compareAscending'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through `iteratee`. This method performs + * a stable sort, that is, it preserves the original sort order of equal elements. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new sorted array. + * @example + * + * _.sortBy([1, 2, 3], function(n) { + * return Math.sin(n); + * }); + * // => [3, 1, 2] + * + * _.sortBy([1, 2, 3], function(n) { + * return this.sin(n); + * }, Math); + * // => [3, 1, 2] + * + * var users = [ + * { 'user': 'fred' }, + * { 'user': 'pebbles' }, + * { 'user': 'barney' } + * ]; + * + * // using the `_.property` callback shorthand + * _.pluck(_.sortBy(users, 'user'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function sortBy(collection, iteratee, thisArg) { + if (collection == null) { + return []; + } + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + var index = -1; + iteratee = baseCallback(iteratee, thisArg, 3); + + var result = baseMap(collection, function(value, key, collection) { + return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value }; + }); + return baseSortBy(result, compareAscending); +} + +module.exports = sortBy; diff --git a/platforms/android/cordova/node_modules/lodash/collection/sortByAll.js b/platforms/android/cordova/node_modules/lodash/collection/sortByAll.js new file mode 100644 index 0000000..4766c20 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/sortByAll.js @@ -0,0 +1,52 @@ +var baseFlatten = require('../internal/baseFlatten'), + baseSortByOrder = require('../internal/baseSortByOrder'), + isIterateeCall = require('../internal/isIterateeCall'), + restParam = require('../function/restParam'); + +/** + * This method is like `_.sortBy` except that it can sort by multiple iteratees + * or property names. + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees + * The iteratees to sort by, specified as individual values or arrays of values. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.map(_.sortByAll(users, ['user', 'age']), _.values); + * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.map(_.sortByAll(users, 'user', function(chr) { + * return Math.floor(chr.age / 10); + * }), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ +var sortByAll = restParam(function(collection, iteratees) { + if (collection == null) { + return []; + } + var guard = iteratees[2]; + if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { + iteratees.length = 1; + } + return baseSortByOrder(collection, baseFlatten(iteratees), []); +}); + +module.exports = sortByAll; diff --git a/platforms/android/cordova/node_modules/lodash/collection/sortByOrder.js b/platforms/android/cordova/node_modules/lodash/collection/sortByOrder.js new file mode 100644 index 0000000..8b4fc19 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/sortByOrder.js @@ -0,0 +1,55 @@ +var baseSortByOrder = require('../internal/baseSortByOrder'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * This method is like `_.sortByAll` except that it allows specifying the + * sort orders of the iteratees to sort by. If `orders` is unspecified, all + * values are sorted in ascending order. Otherwise, a value is sorted in + * ascending order if its corresponding order is "asc", and descending if "desc". + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // sort by `user` in ascending order and by `age` in descending order + * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ +function sortByOrder(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (guard && isIterateeCall(iteratees, orders, guard)) { + orders = undefined; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseSortByOrder(collection, iteratees, orders); +} + +module.exports = sortByOrder; diff --git a/platforms/android/cordova/node_modules/lodash/collection/sum.js b/platforms/android/cordova/node_modules/lodash/collection/sum.js new file mode 100644 index 0000000..a2e9380 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/sum.js @@ -0,0 +1 @@ +module.exports = require('../math/sum'); diff --git a/platforms/android/cordova/node_modules/lodash/collection/where.js b/platforms/android/cordova/node_modules/lodash/collection/where.js new file mode 100644 index 0000000..f603bf8 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/collection/where.js @@ -0,0 +1,37 @@ +var baseMatches = require('../internal/baseMatches'), + filter = require('./filter'); + +/** + * Performs a deep comparison between each element in `collection` and the + * source object, returning an array of all elements that have equivalent + * property values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] }, + * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] } + * ]; + * + * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user'); + * // => ['barney'] + * + * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user'); + * // => ['fred'] + */ +function where(collection, source) { + return filter(collection, baseMatches(source)); +} + +module.exports = where; diff --git a/platforms/android/cordova/node_modules/lodash/date.js b/platforms/android/cordova/node_modules/lodash/date.js new file mode 100644 index 0000000..195366e --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./date/now') +}; diff --git a/platforms/android/cordova/node_modules/lodash/date/now.js b/platforms/android/cordova/node_modules/lodash/date/now.js new file mode 100644 index 0000000..ffe3060 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/date/now.js @@ -0,0 +1,24 @@ +var getNative = require('../internal/getNative'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeNow = getNative(Date, 'now'); + +/** + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Date + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked + */ +var now = nativeNow || function() { + return new Date().getTime(); +}; + +module.exports = now; diff --git a/platforms/android/cordova/node_modules/lodash/function.js b/platforms/android/cordova/node_modules/lodash/function.js new file mode 100644 index 0000000..71f8ebe --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function.js @@ -0,0 +1,28 @@ +module.exports = { + 'after': require('./function/after'), + 'ary': require('./function/ary'), + 'backflow': require('./function/backflow'), + 'before': require('./function/before'), + 'bind': require('./function/bind'), + 'bindAll': require('./function/bindAll'), + 'bindKey': require('./function/bindKey'), + 'compose': require('./function/compose'), + 'curry': require('./function/curry'), + 'curryRight': require('./function/curryRight'), + 'debounce': require('./function/debounce'), + 'defer': require('./function/defer'), + 'delay': require('./function/delay'), + 'flow': require('./function/flow'), + 'flowRight': require('./function/flowRight'), + 'memoize': require('./function/memoize'), + 'modArgs': require('./function/modArgs'), + 'negate': require('./function/negate'), + 'once': require('./function/once'), + 'partial': require('./function/partial'), + 'partialRight': require('./function/partialRight'), + 'rearg': require('./function/rearg'), + 'restParam': require('./function/restParam'), + 'spread': require('./function/spread'), + 'throttle': require('./function/throttle'), + 'wrap': require('./function/wrap') +}; diff --git a/platforms/android/cordova/node_modules/lodash/function/after.js b/platforms/android/cordova/node_modules/lodash/function/after.js new file mode 100644 index 0000000..96a51fd --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/after.js @@ -0,0 +1,48 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = global.isFinite; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ +function after(n, func) { + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + n = nativeIsFinite(n = +n) ? n : 0; + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; +} + +module.exports = after; diff --git a/platforms/android/cordova/node_modules/lodash/function/ary.js b/platforms/android/cordova/node_modules/lodash/function/ary.js new file mode 100644 index 0000000..53a6913 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/ary.js @@ -0,0 +1,34 @@ +var createWrapper = require('../internal/createWrapper'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** Used to compose bitmasks for wrapper metadata. */ +var ARY_FLAG = 128; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that accepts up to `n` arguments ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { + if (guard && isIterateeCall(func, n, guard)) { + n = undefined; + } + n = (func && n == null) ? func.length : nativeMax(+n || 0, 0); + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/platforms/android/cordova/node_modules/lodash/function/backflow.js b/platforms/android/cordova/node_modules/lodash/function/backflow.js new file mode 100644 index 0000000..1954e94 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/backflow.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/platforms/android/cordova/node_modules/lodash/function/before.js b/platforms/android/cordova/node_modules/lodash/function/before.js new file mode 100644 index 0000000..3d94216 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/before.js @@ -0,0 +1,42 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery('#add').on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ +function before(n, func) { + var result; + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; +} + +module.exports = before; diff --git a/platforms/android/cordova/node_modules/lodash/function/bind.js b/platforms/android/cordova/node_modules/lodash/function/bind.js new file mode 100644 index 0000000..0de126a --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/bind.js @@ -0,0 +1,56 @@ +var createWrapper = require('../internal/createWrapper'), + replaceHolders = require('../internal/replaceHolders'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method does not set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // using placeholders + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ +var bind = restParam(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bind.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); +}); + +// Assign default placeholders. +bind.placeholder = {}; + +module.exports = bind; diff --git a/platforms/android/cordova/node_modules/lodash/function/bindAll.js b/platforms/android/cordova/node_modules/lodash/function/bindAll.js new file mode 100644 index 0000000..a09e948 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/bindAll.js @@ -0,0 +1,50 @@ +var baseFlatten = require('../internal/baseFlatten'), + createWrapper = require('../internal/createWrapper'), + functions = require('../object/functions'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1; + +/** + * Binds methods of an object to the object itself, overwriting the existing + * method. Method names may be specified as individual arguments or as arrays + * of method names. If no method names are provided all enumerable function + * properties, own and inherited, of `object` are bound. + * + * **Note:** This method does not set the "length" property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} [methodNames] The object method names to bind, + * specified as individual method names or arrays of method names. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view); + * jQuery('#docs').on('click', view.onClick); + * // => logs 'clicked docs' when the element is clicked + */ +var bindAll = restParam(function(object, methodNames) { + methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object); + + var index = -1, + length = methodNames.length; + + while (++index < length) { + var key = methodNames[index]; + object[key] = createWrapper(object[key], BIND_FLAG, object); + } + return object; +}); + +module.exports = bindAll; diff --git a/platforms/android/cordova/node_modules/lodash/function/bindKey.js b/platforms/android/cordova/node_modules/lodash/function/bindKey.js new file mode 100644 index 0000000..b787fe7 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/bindKey.js @@ -0,0 +1,66 @@ +var createWrapper = require('../internal/createWrapper'), + replaceHolders = require('../internal/replaceHolders'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object the method belongs to. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // using placeholders + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ +var bindKey = restParam(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bindKey.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); +}); + +// Assign default placeholders. +bindKey.placeholder = {}; + +module.exports = bindKey; diff --git a/platforms/android/cordova/node_modules/lodash/function/compose.js b/platforms/android/cordova/node_modules/lodash/function/compose.js new file mode 100644 index 0000000..1954e94 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/platforms/android/cordova/node_modules/lodash/function/curry.js b/platforms/android/cordova/node_modules/lodash/function/curry.js new file mode 100644 index 0000000..b7db3fd --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/curry.js @@ -0,0 +1,51 @@ +var createCurry = require('../internal/createCurry'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_FLAG = 8; + +/** + * Creates a function that accepts one or more arguments of `func` that when + * called either invokes `func` returning its result, if all `func` arguments + * have been provided, or returns a function that accepts one or more of the + * remaining `func` arguments, and so on. The arity of `func` may be specified + * if `func.length` is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ +var curry = createCurry(CURRY_FLAG); + +// Assign default placeholders. +curry.placeholder = {}; + +module.exports = curry; diff --git a/platforms/android/cordova/node_modules/lodash/function/curryRight.js b/platforms/android/cordova/node_modules/lodash/function/curryRight.js new file mode 100644 index 0000000..11c5403 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/curryRight.js @@ -0,0 +1,48 @@ +var createCurry = require('../internal/createCurry'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_RIGHT_FLAG = 16; + +/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ +var curryRight = createCurry(CURRY_RIGHT_FLAG); + +// Assign default placeholders. +curryRight.placeholder = {}; + +module.exports = curryRight; diff --git a/platforms/android/cordova/node_modules/lodash/function/debounce.js b/platforms/android/cordova/node_modules/lodash/function/debounce.js new file mode 100644 index 0000000..163af90 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/debounce.js @@ -0,0 +1,181 @@ +var isObject = require('../lang/isObject'), + now = require('../date/now'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed invocations. Provide an options object to indicate that `func` + * should be invoked on the leading and/or trailing edge of the `wait` timeout. + * Subsequent calls to the debounced function return the result of the last + * `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it's invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // invoke `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // ensure `batchLog` is invoked once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * jQuery(source).on('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * })); + * + * // cancel a debounced call + * var todoChanges = _.debounce(batchLog, 1000); + * Object.observe(models.todo, todoChanges); + * + * Object.observe(models, function(changes) { + * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) { + * todoChanges.cancel(); + * } + * }, ['delete']); + * + * // ...at some point `models.todo` is changed + * models.todo.completed = true; + * + * // ...before 1 second has passed `models.todo` is deleted + * // which cancels the debounced `todoChanges` call + * delete models.todo; + */ +function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = wait < 0 ? 0 : (+wait || 0); + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + maxTimeoutId = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0 || remaining > maxWait; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + return debounced; +} + +module.exports = debounce; diff --git a/platforms/android/cordova/node_modules/lodash/function/defer.js b/platforms/android/cordova/node_modules/lodash/function/defer.js new file mode 100644 index 0000000..3accbf9 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/defer.js @@ -0,0 +1,25 @@ +var baseDelay = require('../internal/baseDelay'), + restParam = require('./restParam'); + +/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // logs 'deferred' after one or more milliseconds + */ +var defer = restParam(function(func, args) { + return baseDelay(func, 1, args); +}); + +module.exports = defer; diff --git a/platforms/android/cordova/node_modules/lodash/function/delay.js b/platforms/android/cordova/node_modules/lodash/function/delay.js new file mode 100644 index 0000000..d5eef27 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/delay.js @@ -0,0 +1,26 @@ +var baseDelay = require('../internal/baseDelay'), + restParam = require('./restParam'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ +var delay = restParam(function(func, wait, args) { + return baseDelay(func, wait, args); +}); + +module.exports = delay; diff --git a/platforms/android/cordova/node_modules/lodash/function/flow.js b/platforms/android/cordova/node_modules/lodash/function/flow.js new file mode 100644 index 0000000..a435a3d --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/flow.js @@ -0,0 +1,25 @@ +var createFlow = require('../internal/createFlow'); + +/** + * Creates a function that returns the result of invoking the provided + * functions with the `this` binding of the created function, where each + * successive invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow(_.add, square); + * addSquare(1, 2); + * // => 9 + */ +var flow = createFlow(); + +module.exports = flow; diff --git a/platforms/android/cordova/node_modules/lodash/function/flowRight.js b/platforms/android/cordova/node_modules/lodash/function/flowRight.js new file mode 100644 index 0000000..23b9d76 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/flowRight.js @@ -0,0 +1,25 @@ +var createFlow = require('../internal/createFlow'); + +/** + * This method is like `_.flow` except that it creates a function that + * invokes the provided functions from right to left. + * + * @static + * @memberOf _ + * @alias backflow, compose + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight(square, _.add); + * addSquare(1, 2); + * // => 9 + */ +var flowRight = createFlow(true); + +module.exports = flowRight; diff --git a/platforms/android/cordova/node_modules/lodash/function/memoize.js b/platforms/android/cordova/node_modules/lodash/function/memoize.js new file mode 100644 index 0000000..f3b8d69 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/memoize.js @@ -0,0 +1,80 @@ +var MapCache = require('../internal/MapCache'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is coerced to a string and used as the + * cache key. The `func` is invoked with the `this` binding of the memoized + * function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) + * method interface of `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var upperCase = _.memoize(function(string) { + * return string.toUpperCase(); + * }); + * + * upperCase('fred'); + * // => 'FRED' + * + * // modifying the result cache + * upperCase.cache.set('fred', 'BARNEY'); + * upperCase('fred'); + * // => 'BARNEY' + * + * // replacing `_.memoize.Cache` + * var object = { 'user': 'fred' }; + * var other = { 'user': 'barney' }; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'fred' } + * + * _.memoize.Cache = WeakMap; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'barney' } + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new memoize.Cache; + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +module.exports = memoize; diff --git a/platforms/android/cordova/node_modules/lodash/function/modArgs.js b/platforms/android/cordova/node_modules/lodash/function/modArgs.js new file mode 100644 index 0000000..49b9b5e --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/modArgs.js @@ -0,0 +1,58 @@ +var arrayEvery = require('../internal/arrayEvery'), + baseFlatten = require('../internal/baseFlatten'), + baseIsFunction = require('../internal/baseIsFunction'), + restParam = require('./restParam'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Creates a function that runs each argument through a corresponding + * transform function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms] The functions to transform + * arguments, specified as individual functions or arrays of functions. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var modded = _.modArgs(function(x, y) { + * return [x, y]; + * }, square, doubled); + * + * modded(1, 2); + * // => [1, 4] + * + * modded(5, 10); + * // => [25, 20] + */ +var modArgs = restParam(function(func, transforms) { + transforms = baseFlatten(transforms); + if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = transforms.length; + return restParam(function(args) { + var index = nativeMin(args.length, length); + while (index--) { + args[index] = transforms[index](args[index]); + } + return func.apply(this, args); + }); +}); + +module.exports = modArgs; diff --git a/platforms/android/cordova/node_modules/lodash/function/negate.js b/platforms/android/cordova/node_modules/lodash/function/negate.js new file mode 100644 index 0000000..8247939 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/negate.js @@ -0,0 +1,32 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ +function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; +} + +module.exports = negate; diff --git a/platforms/android/cordova/node_modules/lodash/function/once.js b/platforms/android/cordova/node_modules/lodash/function/once.js new file mode 100644 index 0000000..0b5bd85 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/once.js @@ -0,0 +1,24 @@ +var before = require('./before'); + +/** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first call. The `func` is invoked + * with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ +function once(func) { + return before(2, func); +} + +module.exports = once; diff --git a/platforms/android/cordova/node_modules/lodash/function/partial.js b/platforms/android/cordova/node_modules/lodash/function/partial.js new file mode 100644 index 0000000..fb1d04f --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/partial.js @@ -0,0 +1,43 @@ +var createPartial = require('../internal/createPartial'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with `partial` arguments prepended + * to those provided to the new function. This method is like `_.bind` except + * it does **not** alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // using placeholders + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ +var partial = createPartial(PARTIAL_FLAG); + +// Assign default placeholders. +partial.placeholder = {}; + +module.exports = partial; diff --git a/platforms/android/cordova/node_modules/lodash/function/partialRight.js b/platforms/android/cordova/node_modules/lodash/function/partialRight.js new file mode 100644 index 0000000..634e6a4 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/partialRight.js @@ -0,0 +1,42 @@ +var createPartial = require('../internal/createPartial'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_RIGHT_FLAG = 64; + +/** + * This method is like `_.partial` except that partially applied arguments + * are appended to those provided to the new function. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // using placeholders + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ +var partialRight = createPartial(PARTIAL_RIGHT_FLAG); + +// Assign default placeholders. +partialRight.placeholder = {}; + +module.exports = partialRight; diff --git a/platforms/android/cordova/node_modules/lodash/function/rearg.js b/platforms/android/cordova/node_modules/lodash/function/rearg.js new file mode 100644 index 0000000..f2bd9c4 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/rearg.js @@ -0,0 +1,40 @@ +var baseFlatten = require('../internal/baseFlatten'), + createWrapper = require('../internal/createWrapper'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var REARG_FLAG = 256; + +/** + * Creates a function that invokes `func` with arguments arranged according + * to the specified indexes where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes, + * specified as individual indexes or arrays of indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, 2, 0, 1); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + * + * var map = _.rearg(_.map, [1, 0]); + * map(function(n) { + * return n * 3; + * }, [1, 2, 3]); + * // => [3, 6, 9] + */ +var rearg = restParam(function(func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)); +}); + +module.exports = rearg; diff --git a/platforms/android/cordova/node_modules/lodash/function/restParam.js b/platforms/android/cordova/node_modules/lodash/function/restParam.js new file mode 100644 index 0000000..8852286 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/restParam.js @@ -0,0 +1,58 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ +function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; +} + +module.exports = restParam; diff --git a/platforms/android/cordova/node_modules/lodash/function/spread.js b/platforms/android/cordova/node_modules/lodash/function/spread.js new file mode 100644 index 0000000..780f504 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/spread.js @@ -0,0 +1,44 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func` with the `this` binding of the created + * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). + * + * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Spread_operator). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to spread arguments over. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * // with a Promise + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ +function spread(func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function(array) { + return func.apply(this, array); + }; +} + +module.exports = spread; diff --git a/platforms/android/cordova/node_modules/lodash/function/throttle.js b/platforms/android/cordova/node_modules/lodash/function/throttle.js new file mode 100644 index 0000000..1dd00ea --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/throttle.js @@ -0,0 +1,62 @@ +var debounce = require('./debounce'), + isObject = require('../lang/isObject'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed invocations. Provide an options object to indicate + * that `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. Subsequent calls to the throttled function return the + * result of the last `func` call. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + * + * // cancel a trailing throttled call + * jQuery(window).on('popstate', throttled.cancel); + */ +function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }); +} + +module.exports = throttle; diff --git a/platforms/android/cordova/node_modules/lodash/function/wrap.js b/platforms/android/cordova/node_modules/lodash/function/wrap.js new file mode 100644 index 0000000..6a33c5e --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/function/wrap.js @@ -0,0 +1,33 @@ +var createWrapper = require('../internal/createWrapper'), + identity = require('../utility/identity'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_FLAG = 32; + +/** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Any additional arguments provided to the function are + * appended to those provided to the wrapper function. The wrapper is invoked + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {*} value The value to wrap. + * @param {Function} wrapper The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ +function wrap(value, wrapper) { + wrapper = wrapper == null ? identity : wrapper; + return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []); +} + +module.exports = wrap; diff --git a/platforms/android/cordova/node_modules/lodash/index.js b/platforms/android/cordova/node_modules/lodash/index.js new file mode 100644 index 0000000..5f17319 --- /dev/null +++ b/platforms/android/cordova/node_modules/lodash/index.js @@ -0,0 +1,12351 @@ +/** + * @license + * lodash 3.10.1 (Custom Build) + * Build: `lodash modern -d -o ./index.js` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '3.10.1'; + + /** Used to compose bitmasks for wrapper metadata. */ + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256; + + /** Used as default options for `_.trunc`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect when a function becomes hot. */ + var HOT_COUNT = 150, + HOT_SPAN = 16; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reUnescapedHtml = /[&<>"'`]/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; + + /** + * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns) + * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern). + */ + var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g, + reHasRegExpChars = RegExp(reRegExpChars.source); + + /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */ + var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect hexadecimal string values. */ + var reHasHexPrefix = /^0[xX]/; + + /** Used to detect host constructors (Safari > 5). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^\d+$/; + + /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ + var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to match words to create compound words. */ + var reWords = (function() { + var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]', + lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+'; + + return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g'); + }()); + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number', + 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite', + 'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dateTag] = typedArrayTags[errorTag] = + typedArrayTags[funcTag] = typedArrayTags[mapTag] = + typedArrayTags[numberTag] = typedArrayTags[objectTag] = + typedArrayTags[regexpTag] = typedArrayTags[setTag] = + typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = + cloneableTags[dateTag] = cloneableTags[float32Tag] = + cloneableTags[float64Tag] = cloneableTags[int8Tag] = + cloneableTags[int16Tag] = cloneableTags[int32Tag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[stringTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[mapTag] = cloneableTags[setTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map latin-1 supplementary letters to basic latin letters. */ + var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + }; + + /** Used to determine if values are of the language type `Object`. */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Used to escape characters for inclusion in compiled regexes. */ + var regexpEscapes = { + '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34', + '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39', + 'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46', + 'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66', + 'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78' + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Detect free variable `exports`. */ + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global; + + /** Detect free variable `self`. */ + var freeSelf = objectTypes[typeof self] && self && self.Object && self; + + /** Detect free variable `window`. */ + var freeWindow = objectTypes[typeof window] && window && window.Object && window; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; + + /** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ + var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this; + + /*--------------------------------------------------------------------------*/ + + /** + * The base implementation of `compareAscending` which compares values and + * sorts them in ascending order without guaranteeing a stable sort. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function baseCompareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to search. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without support for binary searches. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isFunction` without support for environments + * with incorrect `typeof` results. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + */ + function baseIsFunction(value) { + // Avoid a Chakra JIT bug in compatibility modes of IE 11. + // See https://github.com/jashkenas/underscore/issues/1621 for more details. + return typeof value == 'function' || false; + } + + /** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` or `undefined` values. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + return value == null ? '' : (value + ''); + } + + /** + * Used by `_.trim` and `_.trimLeft` to get the index of the first character + * of `string` that is not found in `chars`. + * + * @private + * @param {string} string The string to inspect. + * @param {string} chars The characters to find. + * @returns {number} Returns the index of the first character not found in `chars`. + */ + function charsLeftIndex(string, chars) { + var index = -1, + length = string.length; + + while (++index < length && chars.indexOf(string.charAt(index)) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimRight` to get the index of the last character + * of `string` that is not found in `chars`. + * + * @private + * @param {string} string The string to inspect. + * @param {string} chars The characters to find. + * @returns {number} Returns the index of the last character not found in `chars`. + */ + function charsRightIndex(string, chars) { + var index = string.length; + + while (index-- && chars.indexOf(string.charAt(index)) > -1) {} + return index; + } + + /** + * Used by `_.sortBy` to compare transformed elements of a collection and stable + * sort them in ascending order. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareAscending(object, other) { + return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index); + } + + /** + * Used by `_.sortByOrder` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise, + * a value is sorted in ascending order if its corresponding order is "asc", and + * descending if "desc". + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = baseCompareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * ((order === 'asc' || order === true) ? 1 : -1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://code.google.com/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + function deburrLetter(letter) { + return deburredLetters[letter]; + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(chr) { + return htmlEscapes[chr]; + } + + /** + * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes. + * + * @private + * @param {string} chr The matched character to escape. + * @param {string} leadingChar The capture group for a leading character. + * @param {string} whitespaceChar The capture group for a whitespace character. + * @returns {string} Returns the escaped character. + */ + function escapeRegExpChar(chr, leadingChar, whitespaceChar) { + if (leadingChar) { + chr = regexpEscapes[chr]; + } else if (whitespaceChar) { + chr = stringEscapes[chr]; + } + return '\\' + chr; + } + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ + function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; + } + + /** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a + * character code is whitespace. + * + * @private + * @param {number} charCode The character code to inspect. + * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`. + */ + function isSpace(charCode) { + return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 || + (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279))); + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + if (array[index] === placeholder) { + array[index] = PLACEHOLDER; + result[++resIndex] = index; + } + } + return result; + } + + /** + * An implementation of `_.uniq` optimized for sorted arrays without support + * for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ + function sortedUniq(array, iteratee) { + var seen, + index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (!index || seen !== computed) { + seen = computed; + result[++resIndex] = value; + } + } + return result; + } + + /** + * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the first non-whitespace character. + */ + function trimmedLeftIndex(string) { + var index = -1, + length = string.length; + + while (++index < length && isSpace(string.charCodeAt(index))) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedRightIndex(string) { + var index = string.length; + + while (index-- && isSpace(string.charCodeAt(index))) {} + return index; + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + function unescapeHtmlChar(chr) { + return htmlUnescapes[chr]; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the given `context` object. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // using `context` to mock `Date#getTime` use in `_.now` + * var mock = _.runInContext({ + * 'Date': function() { + * return { 'getTime': getTimeMock }; + * } + * }); + * + * // or creating a suped-up `defer` in Node.js + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + function runInContext(context) { + // Avoid issues with some ES3 environments that attempt to use values, named + // after built-in constructors like `Object`, for the creation of literals. + // ES5 clears this up by stating that literals must use built-in constructors. + // See https://es5.github.io/#x11.1.5 for more details. + context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; + + /** Native constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Number = context.Number, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for native method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype, + stringProto = String.prototype; + + /** Used to resolve the decompiled source of functions. */ + var fnToString = Function.prototype.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ + var objToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Native method references. */ + var ArrayBuffer = context.ArrayBuffer, + clearTimeout = context.clearTimeout, + parseFloat = context.parseFloat, + pow = Math.pow, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + Set = getNative(context, 'Set'), + setTimeout = context.setTimeout, + splice = arrayProto.splice, + Uint8Array = context.Uint8Array, + WeakMap = getNative(context, 'WeakMap'); + + /* Native method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeCreate = getNative(Object, 'create'), + nativeFloor = Math.floor, + nativeIsArray = getNative(Array, 'isArray'), + nativeIsFinite = context.isFinite, + nativeKeys = getNative(Object, 'keys'), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = getNative(Date, 'now'), + nativeParseInt = context.parseInt, + nativeRandom = Math.random; + + /** Used as references for `-Infinity` and `Infinity`. */ + var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY, + POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit chaining. + * Methods that operate on and return arrays, collections, and functions can + * be chained together. Methods that retrieve a single value or may return a + * primitive value will automatically end the chain returning the unwrapped + * value. Explicit chaining may be enabled using `_.chain`. The execution of + * chained methods is lazy, that is, execution is deferred until `_#value` + * is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization strategy which merge iteratee calls; this can help + * to avoid the creation of intermediate data structures and greatly reduce the + * number of iteratee executions. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, + * `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, + * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, + * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`, + * and `where` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`, + * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`, + * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`, + * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`, + * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, + * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, + * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`, + * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`, + * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`, + * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`, + * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`, + * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`, + * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`, + * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`, + * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`, + * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, + * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`, + * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, + * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`, + * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`, + * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`, + * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`, + * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`, + * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`, + * `unescape`, `uniqueId`, `value`, and `words` + * + * The wrapper method `sample` will return a wrapped value when `n` is provided, + * otherwise an unwrapped value is returned. + * + * @name _ + * @constructor + * @category Chain + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var wrapped = _([1, 2, 3]); + * + * // returns an unwrapped value + * wrapped.reduce(function(total, n) { + * return total + n; + * }); + * // => 6 + * + * // returns a wrapped value + * var squares = wrapped.map(function(n) { + * return n * n; + * }); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The function whose prototype all chaining wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value. + */ + function LodashWrapper(value, chainAll, actions) { + this.__wrapped__ = value; + this.__actions__ = actions || []; + this.__chain__ = !!chainAll; + } + + /** + * An object environment feature flags. + * + * @static + * @memberOf _ + * @type Object + */ + var support = lodash.support = {}; + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB). Change the following template settings to use + * alternative delimiters. + * + * @static + * @memberOf _ + * @type Object + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type string + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type Object + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type Function + */ + '_': lodash + } + }; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = POSITIVE_INFINITY; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = arrayCopy(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = arrayCopy(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = arrayCopy(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) { + return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a cache object to store key/value pairs. + * + * @private + * @static + * @name Cache + * @memberOf _.memoize + */ + function MapCache() { + this.__data__ = {}; + } + + /** + * Removes `key` and its value from the cache. + * + * @private + * @name delete + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`. + */ + function mapDelete(key) { + return this.has(key) && delete this.__data__[key]; + } + + /** + * Gets the cached value for `key`. + * + * @private + * @name get + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to get. + * @returns {*} Returns the cached value. + */ + function mapGet(key) { + return key == '__proto__' ? undefined : this.__data__[key]; + } + + /** + * Checks if a cached value for `key` exists. + * + * @private + * @name has + * @memberOf _.memoize.Cache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapHas(key) { + return key != '__proto__' && hasOwnProperty.call(this.__data__, key); + } + + /** + * Sets `value` to `key` of the cache. + * + * @private + * @name set + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to cache. + * @param {*} value The value to cache. + * @returns {Object} Returns the cache object. + */ + function mapSet(key, value) { + if (key != '__proto__') { + this.__data__[key] = value; + } + return this; + } + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates a cache object to store unique values. + * + * @private + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var length = values ? values.length : 0; + + this.data = { 'hash': nativeCreate(null), 'set': new Set }; + while (length--) { + this.push(values[length]); + } + } + + /** + * Checks if `value` is in `cache` mimicking the return signature of + * `_.indexOf` by returning `0` if the value is found, else `-1`. + * + * @private + * @param {Object} cache The cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `0` if `value` is found, else `-1`. + */ + function cacheIndexOf(cache, value) { + var data = cache.data, + result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value]; + + return result ? 0 : -1; + } + + /** + * Adds `value` to the cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ + function cachePush(value) { + var data = this.data; + if (typeof value == 'string' || isObject(value)) { + data.set.add(value); + } else { + data.hash[value] = true; + } + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a new array joining `array` with `other`. + * + * @private + * @param {Array} array The array to join. + * @param {Array} other The other array to join. + * @returns {Array} Returns the new concatenated array. + */ + function arrayConcat(array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength); + + while (++index < length) { + result[index] = array[index]; + } + while (++othIndex < othLength) { + result[index++] = other[othIndex]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function arrayCopy(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * A specialized version of `_.forEach` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `baseExtremum` for arrays which invokes `iteratee` + * with one argument: (value). + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {*} Returns the extremum value. + */ + function arrayExtremum(array, iteratee, comparator, exValue) { + var index = -1, + length = array.length, + computed = exValue, + result = computed; + + while (++index < length) { + var value = array[index], + current = +iteratee(value); + + if (comparator(current, computed)) { + computed = current; + result = value; + } + } + return result; + } + + /** + * A specialized version of `_.filter` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[++resIndex] = value; + } + } + return result; + } + + /** + * A specialized version of `_.map` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the first element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initFromArray) { + var index = -1, + length = array.length; + + if (initFromArray && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the last element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initFromArray) { + var length = array.length; + if (initFromArray && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.sum` for arrays without support for callback + * shorthands and `this` binding.. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function arraySum(array, iteratee) { + var length = array.length, + result = 0; + + while (length--) { + result += +iteratee(array[length]) || 0; + } + return result; + } + + /** + * Used by `_.defaults` to customize its `_.assign` use. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @returns {*} Returns the value to assign to the destination object. + */ + function assignDefaults(objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : objectValue; + } + + /** + * Used by `_.template` to customize its `_.assign` use. + * + * **Note:** This function is like `assignDefaults` except that it ignores + * inherited property values when checking if a property is `undefined`. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @param {string} key The key associated with the object and source values. + * @param {Object} object The destination object. + * @returns {*} Returns the value to assign to the destination object. + */ + function assignOwnDefaults(objectValue, sourceValue, key, object) { + return (objectValue === undefined || !hasOwnProperty.call(object, key)) + ? sourceValue + : objectValue; + } + + /** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ + function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; + } + + /** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); + } + + /** + * The base implementation of `_.at` without support for string collections + * and individual key arguments. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {number[]|string[]} props The property names or indexes of elements to pick. + * @returns {Array} Returns the new array of picked elements. + */ + function baseAt(collection, props) { + var index = -1, + isNil = collection == null, + isArr = !isNil && isArrayLike(collection), + length = isArr ? collection.length : 0, + propsLength = props.length, + result = Array(propsLength); + + while(++index < propsLength) { + var key = props[index]; + if (isArr) { + result[index] = isIndex(key, length) ? collection[key] : undefined; + } else { + result[index] = isNil ? undefined : collection[key]; + } + } + return result; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ + function baseCopy(source, props, object) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + object[key] = source[key]; + } + return object; + } + + /** + * The base implementation of `_.callback` which supports specifying the + * number of arguments to provide to `func`. + * + * @private + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ + function baseCallback(func, thisArg, argCount) { + var type = typeof func; + if (type == 'function') { + return thisArg === undefined + ? func + : bindCallback(func, thisArg, argCount); + } + if (func == null) { + return identity; + } + if (type == 'object') { + return baseMatches(func); + } + return thisArg === undefined + ? property(func) + : baseMatchesProperty(func, thisArg); + } + + /** + * The base implementation of `_.clone` without support for argument juggling + * and `this` binding `customizer` functions. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The object `value` belongs to. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates clones with source counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { + var result; + if (customizer) { + result = object ? customizer(value, key, object) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return arrayCopy(value, result); + } + } else { + var tag = objToString.call(value), + isFunc = tag == funcTag; + + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + return baseAssign(result, value); + } + } else { + return cloneableTags[tag] + ? initCloneByTag(value, tag, isDeep) + : (object ? value : {}); + } + } + // Check for circular references and return its corresponding clone. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == value) { + return stackB[length]; + } + } + // Add the source value to the stack of traversed objects and associate it with its clone. + stackA.push(value); + stackB.push(result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); + }); + return result; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(prototype) { + if (isObject(prototype)) { + object.prototype = prototype; + var result = new object; + object.prototype = undefined; + } + return result || {}; + }; + }()); + + /** + * The base implementation of `_.delay` and `_.defer` which accepts an index + * of where to slice the arguments to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments provide to `func`. + * @returns {number} Returns the timer id. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.difference` which accepts a single array + * of values to exclude. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values) { + var length = array ? array.length : 0, + result = []; + + if (!length) { + return result; + } + var index = -1, + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null, + valuesLength = values.length; + + if (cache) { + indexOf = cacheIndexOf; + isCommon = false; + values = cache; + } + outer: + while (++index < length) { + var value = array[index]; + + if (isCommon && value === value) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === value) { + continue outer; + } + } + result.push(value); + } + else if (indexOf(values, value, 0) < 0) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * Gets the extremum value of `collection` invoking `iteratee` for each value + * in `collection` to generate the criterion by which the value is ranked. + * The `iteratee` is invoked with three arguments: (value, index|key, collection). + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(collection, iteratee, comparator, exValue) { + var computed = exValue, + result = computed; + + baseEach(collection, function(value, index, collection) { + var current = +iteratee(value, index, collection); + if (comparator(current, computed) || (current === exValue && current === result)) { + computed = current; + result = value; + } + }); + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : (end >>> 0); + start >>>= 0; + + while (start < length) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`, + * without support for callback shorthands and `this` binding, which iterates + * over `collection` using the provided `eachFunc`. + * + * @private + * @param {Array|Object|string} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element + * instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with added support for restricting + * flattening and specifying the start index. + * + * @private + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, isDeep, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (isObjectLike(value) && isArrayLike(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (isDeep) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, isDeep, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forIn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForIn(object, iteratee) { + return baseFor(object, iteratee, keysIn); + } + + /** + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from those provided. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ + function baseFunctions(object, props) { + var index = -1, + length = props.length, + resIndex = -1, + result = []; + + while (++index < length) { + var key = props[index]; + if (isFunction(object[key])) { + result[++resIndex] = key; + } + } + return result; + } + + /** + * The base implementation of `get` without support for string paths + * and default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path of the property to get. + * @param {string} [pathKey] The key representation of path. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path, pathKey) { + if (object == null) { + return; + } + if (pathKey !== undefined && pathKey in toObject(object)) { + path = [pathKey]; + } + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `_.isEqual` without support for `this` binding + * `customizer` functions. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing objects. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `value` objects. + * @param {Array} [stackB=[]] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objToString.call(object); + if (objTag == argsTag) { + objTag = objectTag; + } else if (objTag != objectTag) { + objIsArr = isTypedArray(object); + } + } + if (!othIsArr) { + othTag = objToString.call(other); + if (othTag == argsTag) { + othTag = objectTag; + } else if (othTag != objectTag) { + othIsArr = isTypedArray(other); + } + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && !(objIsArr || objIsObj)) { + return equalByTag(object, other, objTag); + } + if (!isLoose) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); + } + } + if (!isSameTag) { + return false; + } + // Assume cyclic values are equal. + // For more information on detecting circular references see https://es5.github.io/#JO. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == object) { + return stackB[length] == other; + } + } + // Add `object` and `other` to the stack of traversed objects. + stackA.push(object); + stackB.push(other); + + var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); + + stackA.pop(); + stackB.pop(); + + return result; + } + + /** + * The base implementation of `_.isMatch` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} matchData The propery names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparing objects. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = toObject(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var result = customizer ? customizer(objValue, srcValue, key) : undefined; + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.map` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which does not clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && (value !== undefined || (key in toObject(object))); + }; + } + return function(object) { + return baseIsMatch(object, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which does not clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to compare. + * @returns {Function} Returns the new function. + */ + function baseMatchesProperty(path, srcValue) { + var isArr = isArray(path), + isCommon = isKey(path) && isStrictComparable(srcValue), + pathKey = (path + ''); + + path = toPath(path); + return function(object) { + if (object == null) { + return false; + } + var key = pathKey; + object = toObject(object); + if ((isArr || !isCommon) && !(key in object)) { + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + key = last(path); + object = toObject(object); + } + return object[key] === srcValue + ? (srcValue !== undefined || (key in object)) + : baseIsEqual(srcValue, object[key], undefined, true); + }; + } + + /** + * The base implementation of `_.merge` without support for argument juggling, + * multiple sources, and `this` binding `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} [customizer] The function to customize merged values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {Object} Returns `object`. + */ + function baseMerge(object, source, customizer, stackA, stackB) { + if (!isObject(object)) { + return object; + } + var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), + props = isSrcArr ? undefined : keys(source); + + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObjectLike(srcValue)) { + stackA || (stackA = []); + stackB || (stackB = []); + baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); + } + else { + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; + + if (isCommon) { + result = srcValue; + } + if ((result !== undefined || (isSrcArr && !(key in object))) && + (isCommon || (result === result ? (result !== value) : (value === value)))) { + object[key] = result; + } + } + }); + return object; + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize merged values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { + var length = stackA.length, + srcValue = source[key]; + + while (length--) { + if (stackA[length] == srcValue) { + object[key] = stackB[length]; + return; + } + } + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; + + if (isCommon) { + result = srcValue; + if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) { + result = isArray(value) + ? value + : (isArrayLike(value) ? arrayCopy(value) : []); + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + result = isArguments(value) + ? toPlainObject(value) + : (isPlainObject(value) ? value : {}); + } + else { + isCommon = false; + } + } + // Add the source value to the stack of traversed objects and associate + // it with its merged value. + stackA.push(srcValue); + stackB.push(result); + + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); + } else if (result === result ? (result !== value) : (value === value)) { + object[key] = result; + } + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ + function basePropertyDeep(path) { + var pathKey = (path + ''); + path = toPath(path); + return function(object) { + return baseGet(object, path, pathKey); + }; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * index arguments and capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0; + while (length--) { + var index = indexes[length]; + if (index != previous && isIndex(index)) { + var previous = index; + splice.call(array, index, 1); + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for argument juggling + * and returning floating-point numbers. + * + * @private + * @param {number} min The minimum possible value. + * @param {number} max The maximum possible value. + * @returns {number} Returns the random number. + */ + function baseRandom(min, max) { + return min + nativeFloor(nativeRandom() * (max - min + 1)); + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight` without support + * for callback shorthands and `this` binding, which iterates over `collection` + * using the provided `eachFunc`. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initFromCollection Specify using the first or last element + * of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initFromCollection + ? (initFromCollection = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `setData` without support for hot loop detection. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define + * the sort order of `array` and replaces criteria objects with their + * corresponding values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sortByOrder` without param guards. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseSortByOrder(collection, iteratees, orders) { + var callback = getCallback(), + index = -1; + + iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); }); + + var result = baseMap(collection, function(value) { + var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.sum` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(collection, iteratee) { + var result = 0; + baseEach(collection, function(value, index, collection) { + result += +iteratee(value, index, collection) || 0; + }); + return result; + } + + /** + * The base implementation of `_.uniq` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ + function baseUniq(array, iteratee) { + var index = -1, + indexOf = getIndexOf(), + length = array.length, + isCommon = indexOf == baseIndexOf, + isLarge = isCommon && length >= LARGE_ARRAY_SIZE, + seen = isLarge ? createCache() : null, + result = []; + + if (seen) { + indexOf = cacheIndexOf; + isCommon = false; + } else { + isLarge = false; + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (isCommon && value === value) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (indexOf(seen, computed, 0) < 0) { + if (iteratee || isLarge) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + var index = -1, + length = props.length, + result = Array(length); + + while (++index < length) { + result[index] = object[props[index]]; + } + return result; + } + + /** + * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`, + * and `_.takeWhile` without support for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to peform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + var index = -1, + length = actions.length; + + while (++index < length) { + var action = actions[index]; + result = action.func.apply(action.thisArg, arrayPush([result], action.args)); + } + return result; + } + + /** + * Performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function binaryIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return binaryIndexBy(array, value, identity, retHighest); + } + + /** + * This function is like `binaryIndex` except that it invokes `iteratee` for + * `value` and each element of `array` to compute their sort ranking. The + * iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The function invoked per iteration. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function binaryIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ + function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; + } + + /** + * Creates a clone of the given array buffer. + * + * @private + * @param {ArrayBuffer} buffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function bufferClone(buffer) { + var result = new ArrayBuffer(buffer.byteLength), + view = new Uint8Array(result); + + view.set(new Uint8Array(buffer)); + return result; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders) { + var holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + leftIndex = -1, + leftLength = partials.length, + result = Array(leftLength + argsLength); + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + while (argsLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders) { + var holdersIndex = -1, + holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + rightIndex = -1, + rightLength = partials.length, + result = Array(argsLength + rightLength); + + while (++argsIndex < argsLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + return result; + } + + /** + * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function. + * + * @private + * @param {Function} setter The function to set keys and values of the accumulator object. + * @param {Function} [initializer] The function to initialize the accumulator object. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee, thisArg) { + var result = initializer ? initializer() : {}; + iteratee = getCallback(iteratee, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + setter(result, value, iteratee(value, index, collection), collection); + } + } else { + baseEach(collection, function(value, key, collection) { + setter(result, value, iteratee(value, key, collection), collection); + }); + } + return result; + }; + } + + /** + * Creates a `_.assign`, `_.defaults`, or `_.merge` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + return eachFunc(collection, iteratee); + } + var index = fromRight ? length : -1, + iterable = toObject(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` and invokes it with the `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new bound function. + */ + function createBindWrapper(func, thisArg) { + var Ctor = createCtorWrapper(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(thisArg, arguments); + } + return wrapper; + } + + /** + * Creates a `Set` cache object to optimize linear searches of large arrays. + * + * @private + * @param {Array} [values] The values to cache. + * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`. + */ + function createCache(values) { + return (nativeCreate && Set) ? new SetCache(values) : null; + } + + /** + * Creates a function that produces compound words out of the words in a + * given string. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + var index = -1, + array = words(deburr(string)), + length = array.length, + result = ''; + + while (++index < length) { + result = callback(result, array[index], index); + } + return result; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.curry` or `_.curryRight` function. + * + * @private + * @param {boolean} flag The curry bit flag. + * @returns {Function} Returns the new curry function. + */ + function createCurry(flag) { + function curryFunc(func, arity, guard) { + if (guard && isIterateeCall(func, arity, guard)) { + arity = undefined; + } + var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryFunc.placeholder; + return result; + } + return curryFunc; + } + + /** + * Creates a `_.defaults` or `_.defaultsDeep` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @param {Function} customizer The function to customize assigned values. + * @returns {Function} Returns the new defaults function. + */ + function createDefaults(assigner, customizer) { + return restParam(function(args) { + var object = args[0]; + if (object == null) { + return object; + } + args.push(customizer); + return assigner.apply(undefined, args); + }); + } + + /** + * Creates a `_.max` or `_.min` function. + * + * @private + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {Function} Returns the new extremum function. + */ + function createExtremum(comparator, exValue) { + return function(collection, iteratee, thisArg) { + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + iteratee = getCallback(iteratee, thisArg, 3); + if (iteratee.length == 1) { + collection = isArray(collection) ? collection : toIterable(collection); + var result = arrayExtremum(collection, iteratee, comparator, exValue); + if (!(collection.length && result === exValue)) { + return result; + } + } + return baseExtremum(collection, iteratee, comparator, exValue); + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ + function createFind(eachFunc, fromRight) { + return function(collection, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, fromRight); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, eachFunc); + }; + } + + /** + * Creates a `_.findIndex` or `_.findLastIndex` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ + function createFindIndex(fromRight) { + return function(array, predicate, thisArg) { + if (!(array && array.length)) { + return -1; + } + predicate = getCallback(predicate, thisArg, 3); + return baseFindIndex(array, predicate, fromRight); + }; + } + + /** + * Creates a `_.findKey` or `_.findLastKey` function. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new find function. + */ + function createFindKey(objectFunc) { + return function(object, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3); + return baseFind(object, predicate, objectFunc, true); + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return function() { + var wrapper, + length = arguments.length, + index = fromRight ? length : -1, + leftIndex = 0, + funcs = Array(length); + + while ((fromRight ? index-- : ++index < length)) { + var func = funcs[leftIndex++] = arguments[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') { + wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? -1 : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }; + } + + /** + * Creates a function for `_.forEach` or `_.forEachRight`. + * + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ + function createForEach(arrayFunc, eachFunc) { + return function(collection, iteratee, thisArg) { + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee) + : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); + }; + } + + /** + * Creates a function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ + function createForIn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee, keysIn); + }; + } + + /** + * Creates a function for `_.forOwn` or `_.forOwnRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ + function createForOwn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee); + }; + } + + /** + * Creates a function for `_.mapKeys` or `_.mapValues`. + * + * @private + * @param {boolean} [isMapKeys] Specify mapping keys instead of values. + * @returns {Function} Returns the new map function. + */ + function createObjectMapper(isMapKeys) { + return function(object, iteratee, thisArg) { + var result = {}; + iteratee = getCallback(iteratee, thisArg, 3); + + baseForOwn(object, function(value, key, object) { + var mapped = iteratee(value, key, object); + key = isMapKeys ? mapped : key; + value = isMapKeys ? value : mapped; + result[key] = value; + }); + return result; + }; + } + + /** + * Creates a function for `_.padLeft` or `_.padRight`. + * + * @private + * @param {boolean} [fromRight] Specify padding from the right. + * @returns {Function} Returns the new pad function. + */ + function createPadDir(fromRight) { + return function(string, length, chars) { + string = baseToString(string); + return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string); + }; + } + + /** + * Creates a `_.partial` or `_.partialRight` function. + * + * @private + * @param {boolean} flag The partial bit flag. + * @returns {Function} Returns the new partial function. + */ + function createPartial(flag) { + var partialFunc = restParam(function(func, partials) { + var holders = replaceHolders(partials, partialFunc.placeholder); + return createWrapper(func, flag, undefined, partials, holders); + }); + return partialFunc; + } + + /** + * Creates a function for `_.reduce` or `_.reduceRight`. + * + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ + function createReduce(arrayFunc, eachFunc) { + return function(collection, iteratee, accumulator, thisArg) { + var initFromArray = arguments.length < 3; + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee, accumulator, initFromArray) + : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc); + }; + } + + /** + * Creates a function that wraps `func` and invokes it with optional `this` + * binding of, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurry = bitmask & CURRY_FLAG, + isCurryBound = bitmask & CURRY_BOUND_FLAG, + isCurryRight = bitmask & CURRY_RIGHT_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it to other functions. + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (partials) { + args = composeArgs(args, partials, holders); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight); + } + if (isCurry || isCurryRight) { + var placeholder = wrapper.placeholder, + argsHolders = replaceHolders(args, placeholder); + + length -= argsHolders.length; + if (length < arity) { + var newArgPos = argPos ? arrayCopy(argPos) : undefined, + newArity = nativeMax(arity - length, 0), + newsHolders = isCurry ? argsHolders : undefined, + newHoldersRight = isCurry ? undefined : argsHolders, + newPartials = isCurry ? args : undefined, + newPartialsRight = isCurry ? undefined : args; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!isCurryBound) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity], + result = createHybridWrapper.apply(undefined, newData); + + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; + } + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + if (argPos) { + args = reorder(args, argPos); + } + if (isAry && ary < args.length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(func); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates the padding required for `string` based on the given `length`. + * The `chars` string is truncated if the number of characters exceeds `length`. + * + * @private + * @param {string} string The string to create padding for. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the pad for `string`. + */ + function createPadding(string, length, chars) { + var strLength = string.length; + length = +length; + + if (strLength >= length || !nativeIsFinite(length)) { + return ''; + } + var padLength = length - strLength; + chars = chars == null ? ' ' : (chars + ''); + return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength); + } + + /** + * Creates a function that wraps `func` and invokes it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to partially apply arguments to. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new bound function. + */ + function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it `func`. + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength); + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.ceil`, `_.floor`, or `_.round` function. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + precision = precision === undefined ? 0 : (+precision || 0); + if (precision) { + precision = pow(10, precision); + return func(number * precision) / precision; + } + return func(number); + }; + } + + /** + * Creates a `_.sortedIndex` or `_.sortedLastIndex` function. + * + * @private + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {Function} Returns the new index function. + */ + function createSortedIndex(retHighest) { + return function(array, value, iteratee, thisArg) { + var callback = getCallback(iteratee); + return (iteratee == null && callback === baseCallback) + ? binaryIndex(array, value, retHighest) + : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + length -= (holders ? holders.length : 0); + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func), + newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity]; + + if (data) { + mergeData(newData, data); + bitmask = newData[1]; + arity = newData[9]; + } + newData[9] = arity == null + ? (isBindKey ? 0 : func.length) + : (nativeMax(arity - length, 0) || 0); + + if (bitmask == BIND_FLAG) { + var result = createBindWrapper(newData[0], newData[2]); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) { + result = createPartialWrapper.apply(undefined, newData); + } else { + result = createHybridWrapper.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setter(result, newData); + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing arrays. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { + var index = -1, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isLoose && othLength > arrLength)) { + return false; + } + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index], + result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; + + if (result !== undefined) { + if (result) { + continue; + } + return false; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isLoose) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); + })) { + return false; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { + return false; + } + } + return true; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag) { + switch (tag) { + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) + ? other != +other + : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isLoose) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var skipCtor = isLoose; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key], + result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; + + // Recursively compare objects (susceptible to call stack limits). + if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { + return false; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (!skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + return false; + } + } + return true; + } + + /** + * Gets the appropriate "callback" function. If the `_.callback` method is + * customized this function returns the custom method, otherwise it returns + * the `baseCallback` function. If arguments are provided the chosen function + * is invoked with them and its result is returned. + * + * @private + * @returns {Function} Returns the chosen function or its result. + */ + function getCallback(func, thisArg, argCount) { + var result = lodash.callback || callback; + result = result === callback ? baseCallback : result; + return argCount ? result(func, thisArg, argCount) : result; + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = func.name, + array = realNames[result], + length = array ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the appropriate "indexOf" function. If the `_.indexOf` method is + * customized this function returns the custom method, otherwise it returns + * the `baseIndexOf` function. If arguments are provided the chosen function + * is invoked with them and its result is returned. + * + * @private + * @returns {Function|number} Returns the chosen function or its result. + */ + function getIndexOf(collection, target, fromIndex) { + var result = lodash.indexOf || indexOf; + result = result === indexOf ? baseIndexOf : result; + return collection ? result(collection, target, fromIndex) : result; + } + + /** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ + var getLength = baseProperty('length'); + + /** + * Gets the propery names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = pairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add array properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + var Ctor = object.constructor; + if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { + Ctor = Object; + } + return new Ctor; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return bufferClone(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + var buffer = object.buffer; + return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + var result = new Ctor(object.source, reFlags.exec(object)); + result.lastIndex = object.lastIndex; + } + return result; + } + + /** + * Invokes the method at `path` on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function invokePath(object, path, args) { + if (object != null && !isKey(path, object)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + path = last(path); + } + var func = object == null ? object : object[path]; + return func == null ? undefined : func.apply(object, args); + } + + /** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ + function isArrayLike(value) { + return value != null && isLength(getLength(value)); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; + } + + /** + * Checks if the provided arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + var other = object[index]; + return value === value ? (value === other) : (other !== other); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + var type = typeof value; + if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { + return true; + } + if (isArray(value)) { + return false; + } + var result = !reIsDeepProp.test(value); + return result || (object != null && value in toObject(object)); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func); + if (!(funcName in LazyWrapper.prototype)) { + return false; + } + var other = lodash[funcName]; + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ + function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers required to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * augment function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * common case where curried functions have `_.ary` and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < ARY_FLAG; + + var isCombo = + (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) || + (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) || + (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = arrayCopy(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @returns {*} Returns the value to assign to the destination object. + */ + function mergeDefaults(objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults); + } + + /** + * A specialized version of `_.pick` which picks `object` properties specified + * by `props`. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ + function pickByArray(object, props) { + object = toObject(object); + + var index = -1, + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index]; + if (key in object) { + result[key] = object[key]; + } + } + return result; + } + + /** + * A specialized version of `_.pick` which picks `object` properties `predicate` + * returns truthy for. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per iteration. + * @returns {Object} Returns the new object. + */ + function pickByCallback(object, predicate) { + var result = {}; + baseForIn(object, function(value, key, object) { + if (predicate(value, key, object)) { + result[key] = value; + } + }); + return result; + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = arrayCopy(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = (function() { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); + }; + }()); + + /** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; + + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)); + + var index = -1, + result = []; + + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to an array-like object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array|Object} Returns the array-like object. + */ + function toIterable(value) { + if (value == null) { + return []; + } + if (!isArrayLike(value)) { + return values(value); + } + return isObject(value) ? value : Object(value); + } + + /** + * Converts `value` to an object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Object} Returns the object. + */ + function toObject(value) { + return isObject(value) ? value : Object(value); + } + + /** + * Converts `value` to property path array if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array} Returns the property path array. + */ + function toPath(value) { + if (isArray(value)) { + return value; + } + var result = []; + baseToString(value).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + return wrapper instanceof LazyWrapper + ? wrapper.clone() + : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `collection` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if (guard ? isIterateeCall(array, size, guard) : size == null) { + size = 1; + } else { + size = nativeMax(nativeFloor(size) || 1, 1); + } + var index = 0, + length = array ? array.length : 0, + resIndex = -1, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[++resIndex] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[++resIndex] = value; + } + } + return result; + } + + /** + * Creates an array of unique `array` values not included in the other + * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([1, 2, 3], [4, 2]); + * // => [1, 3] + */ + var difference = restParam(function(array, values) { + return (isObjectLike(array) && isArrayLike(array)) + ? baseDifference(array, baseFlatten(values, false, true)) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that match the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [1] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active', false), 'user'); + * // => ['barney'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [3] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropWhile(users, 'active', false), 'user'); + * // => ['pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8], '*', 1, 2); + * // => [4, '*', 8] + */ + function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(chr) { + * return chr.user == 'barney'; + * }); + * // => 0 + * + * // using the `_.matches` callback shorthand + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // using the `_.matchesProperty` callback shorthand + * _.findIndex(users, 'active', false); + * // => 0 + * + * // using the `_.property` callback shorthand + * _.findIndex(users, 'active'); + * // => 2 + */ + var findIndex = createFindIndex(); + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(chr) { + * return chr.user == 'pebbles'; + * }); + * // => 2 + * + * // using the `_.matches` callback shorthand + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastIndex(users, 'active', false); + * // => 2 + * + * // using the `_.property` callback shorthand + * _.findLastIndex(users, 'active'); + * // => 0 + */ + var findLastIndex = createFindIndex(true); + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias head + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([]); + * // => undefined + */ + function first(array) { + return array ? array[0] : undefined; + } + + /** + * Flattens a nested array. If `isDeep` is `true` the array is recursively + * flattened, otherwise it is only flattened a single level. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, 3, [4]]]); + * // => [1, 2, 3, [4]] + * + * // using `isDeep` + * _.flatten([1, [2, 3, [4]]], true); + * // => [1, 2, 3, 4] + */ + function flatten(array, isDeep, guard) { + var length = array ? array.length : 0; + if (guard && isIterateeCall(array, isDeep, guard)) { + isDeep = false; + } + return length ? baseFlatten(array, isDeep) : []; + } + + /** + * Recursively flattens a nested array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to recursively flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, 3, [4]]]); + * // => [1, 2, 3, 4] + */ + function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, true) : []; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `array`. If `array` is sorted providing `true` for `fromIndex` + * performs a faster binary search. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // using `fromIndex` + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + * + * // performing a binary search + * _.indexOf([1, 1, 2, 2], 2, true); + * // => 2 + */ + function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else if (fromIndex) { + var index = binaryIndex(array, value); + if (index < length && + (value === value ? (value === array[index]) : (array[index] !== array[index]))) { + return index; + } + return -1; + } + return baseIndexOf(array, value, fromIndex || 0); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + return dropRight(array, 1); + } + + /** + * Creates an array of unique values that are included in all of the provided + * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of shared values. + * @example + * _.intersection([1, 2], [4, 2], [2, 1]); + * // => [2] + */ + var intersection = restParam(function(arrays) { + var othLength = arrays.length, + othIndex = othLength, + caches = Array(length), + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + result = []; + + while (othIndex--) { + var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; + caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; + } + var array = arrays[0], + index = -1, + length = array ? array.length : 0, + seen = caches[0]; + + outer: + while (++index < length) { + value = array[index]; + if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { + var othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { + continue outer; + } + } + if (seen) { + seen.push(value); + } + result.push(value); + } + } + return result; + }); + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=array.length-1] The index to search from + * or `true` to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // using `fromIndex` + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + * + * // performing a binary search + * _.lastIndexOf([1, 1, 2, 2], 2, true); + * // => 3 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (typeof fromIndex == 'number') { + index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; + } else if (fromIndex) { + index = binaryIndex(array, value, true) - 1; + var other = array[index]; + if (value === value ? (value === other) : (other !== other)) { + return index; + } + return -1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * Removes all provided values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ + function pull() { + var args = arguments, + array = args[0]; + + if (!(array && array.length)) { + return array; + } + var index = 0, + indexOf = getIndexOf(), + length = args.length; + + while (++index < length) { + var fromIndex = 0, + value = args[index]; + + while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * Removes elements from `array` corresponding to the given indexes and returns + * an array of the removed elements. Indexes may be specified as an array of + * indexes or as individual arguments. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove, + * specified as individual indexes or arrays of indexes. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [5, 10, 15, 20]; + * var evens = _.pullAt(array, 1, 3); + * + * console.log(array); + * // => [5, 15] + * + * console.log(evens); + * // => [10, 20] + */ + var pullAt = restParam(function(array, indexes) { + indexes = baseFlatten(indexes); + + var result = baseAt(array, indexes); + basePullAt(array, indexes.sort(baseCompareAscending)); + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * **Note:** Unlike `_.filter`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate, thisArg) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getCallback(predicate, thisArg, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @alias tail + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.rest([1, 2, 3]); + * // => [2, 3] + */ + function rest(array) { + return drop(array, 1); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of `Array#slice` to support node + * lists in IE < 9 and to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` should + * be inserted into `array` in order to maintain its sort order. If an iteratee + * function is provided it is invoked for `value` and each element of `array` + * to compute their sort ranking. The iteratee is bound to `thisArg` and + * invoked with one argument; (value). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + * + * _.sortedIndex([4, 4, 5, 5], 5); + * // => 2 + * + * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } }; + * + * // using an iteratee function + * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) { + * return this.data[word]; + * }, dict); + * // => 1 + * + * // using the `_.property` callback shorthand + * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); + * // => 1 + */ + var sortedIndex = createSortedIndex(); + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 4, 5, 5], 5); + * // => 4 + */ + var sortedLastIndex = createSortedIndex(true); + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is bound to `thisArg` + * and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [2, 3] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active', false), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active'), 'user'); + * // => [] + */ + function takeRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [1, 2] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeWhile(users, 'active', false), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeWhile(users, 'active'), 'user'); + * // => [] + */ + function takeWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all of the provided arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([1, 2], [4, 2], [2, 1]); + * // => [1, 2, 4] + */ + var union = restParam(function(arrays) { + return baseUniq(baseFlatten(arrays, false, true)); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurence of each element + * is kept. Providing `true` for `isSorted` performs a faster search algorithm + * for sorted arrays. If an iteratee function is provided it is invoked for + * each element in the array to generate the criterion by which uniqueness + * is computed. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, array). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Array + * @param {Array} array The array to inspect. + * @param {boolean} [isSorted] Specify the array is sorted. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new duplicate-value-free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + * + * // using `isSorted` + * _.uniq([1, 1, 2], true); + * // => [1, 2] + * + * // using an iteratee function + * _.uniq([1, 2.5, 1.5, 2], function(n) { + * return this.floor(n); + * }, Math); + * // => [1, 2.5] + * + * // using the `_.property` callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniq(array, isSorted, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (isSorted != null && typeof isSorted != 'boolean') { + thisArg = iteratee; + iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted; + isSorted = false; + } + var callback = getCallback(); + if (!(iteratee == null && callback === baseCallback)) { + iteratee = callback(iteratee, thisArg, 3); + } + return (isSorted && getIndexOf() == baseIndexOf) + ? sortedUniq(array, iteratee) + : baseUniq(array, iteratee); + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + * + * _.unzip(zipped); + * // => [['fred', 'barney'], [30, 40], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var index = -1, + length = 0; + + array = arrayFilter(array, function(group) { + if (isArrayLike(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + var result = Array(length); + while (++index < length) { + result[index] = arrayMap(array, baseProperty(index)); + } + return result; + } + + /** + * This method is like `_.unzip` except that it accepts an iteratee to specify + * how regrouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee] The function to combine regrouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + iteratee = bindCallback(iteratee, thisArg, 4); + return arrayMap(result, function(group) { + return arrayReduce(group, iteratee, undefined, true); + }); + } + + /** + * Creates an array excluding all provided values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ + var without = restParam(function(array, values) { + return isArrayLike(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the provided arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xor([1, 2], [4, 2]); + * // => [1, 4] + */ + function xor() { + var index = -1, + length = arguments.length; + + while (++index < length) { + var array = arguments[index]; + if (isArrayLike(array)) { + var result = result + ? arrayPush(baseDifference(result, array), baseDifference(array, result)) + : array; + } + } + return result ? baseUniq(result) : []; + } + + /** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second elements + * of the given arrays, and so on. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ + var zip = restParam(unzip); + + /** + * The inverse of `_.pairs`; this method returns an object composed from arrays + * of property names and values. Provide either a single two dimensional array, + * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names + * and one of corresponding values. + * + * @static + * @memberOf _ + * @alias object + * @category Array + * @param {Array} props The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + * + * _.zipObject(['fred', 'barney'], [30, 40]); + * // => { 'fred': 30, 'barney': 40 } + */ + function zipObject(props, values) { + var index = -1, + length = props ? props.length : 0, + result = {}; + + if (length && !values && !isArray(props[0])) { + values = []; + } + while (++index < length) { + var key = props[index]; + if (values) { + result[key] = values[index]; + } else if (key) { + result[key[0]] = key[1]; + } + } + return result; + } + + /** + * This method is like `_.zip` except that it accepts an iteratee to specify + * how grouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee] The function to combine grouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], _.add); + * // => [111, 222] + */ + var zipWith = restParam(function(arrays) { + var length = arrays.length, + iteratee = length > 2 ? arrays[length - 2] : undefined, + thisArg = length > 1 ? arrays[length - 1] : undefined; + + if (length > 2 && typeof iteratee == 'function') { + length -= 2; + } else { + iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined; + thisArg = undefined; + } + arrays.length = length; + return unzipWith(arrays, iteratee, thisArg); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object that wraps `value` with explicit method + * chaining enabled. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _.chain(users) + * .sortBy('age') + * .map(function(chr) { + * return chr.user + ' is ' + chr.age; + * }) + * .first() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor is + * bound to `thisArg` and invoked with one argument; (value). The purpose of + * this method is to "tap into" a method chain in order to perform operations + * on intermediate results within the chain. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor, thisArg) { + interceptor.call(thisArg, value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor, thisArg) { + return interceptor.call(thisArg, value); + } + + /** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // without explicit chaining + * _(users).first(); + * // => { 'user': 'barney', 'age': 36 } + * + * // with explicit chaining + * _(users).chain() + * .first() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Creates a new array joining a wrapped array with any additional arrays + * and/or values. + * + * @name concat + * @memberOf _ + * @category Chain + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var wrapped = _(array).concat(2, [3], [[4]]); + * + * console.log(wrapped.value()); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + var wrapperConcat = restParam(function(values) { + values = baseFlatten(values); + return this.thru(function(array) { + return arrayConcat(isArray(array) ? array : [toObject(array)], values); + }); + }); + + /** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).map(function(value) { + * return Math.pow(value, 2); + * }); + * + * var other = [3, 4]; + * var otherWrapped = wrapped.plant(other); + * + * otherWrapped.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * Reverses the wrapped array so the first element becomes the last, the + * second element becomes the second to last, and so on. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new reversed `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + + var interceptor = function(value) { + return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse(); + }; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(interceptor); + } + + /** + * Produces the result of coercing the unwrapped value to a string. + * + * @name toString + * @memberOf _ + * @category Chain + * @returns {string} Returns the coerced string value. + * @example + * + * _([1, 2, 3]).toString(); + * // => '1,2,3' + */ + function wrapperToString() { + return (this.value() + ''); + } + + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias run, toJSON, valueOf + * @category Chain + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements corresponding to the given keys, or indexes, + * of `collection`. Keys may be specified as individual arguments or as arrays + * of keys. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(number|number[]|string|string[])} [props] The property names + * or indexes of elements to pick, specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * _.at(['a', 'b', 'c'], [0, 2]); + * // => ['a', 'c'] + * + * _.at(['barney', 'fred', 'pebbles'], 0, 2); + * // => ['barney', 'pebbles'] + */ + var at = restParam(function(collection, props) { + return baseAt(collection, baseFlatten(props)); + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the number of times the key was returned by `iteratee`. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': 1, '6': 2 } + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3); + } + return func(collection, predicate); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.filter([4, 5, 6], function(n) { + * return n % 2 == 0; + * }); + * // => [4, 6] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.filter(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.filter(users, 'active'), 'user'); + * // => ['barney'] + */ + function filter(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getCallback(predicate, thisArg, 3); + return func(collection, predicate); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias detect + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.result(_.find(users, function(chr) { + * return chr.age < 40; + * }), 'user'); + * // => 'barney' + * + * // using the `_.matches` callback shorthand + * _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.result(_.find(users, 'active', false), 'user'); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.result(_.find(users, 'active'), 'user'); + * // => 'barney' + */ + var find = createFind(baseEach); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(baseEachRight, true); + + /** + * Performs a deep comparison between each element in `collection` and the + * source object, returning the first element that has equivalent property + * values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user'); + * // => 'barney' + * + * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user'); + * // => 'fred' + */ + function findWhere(collection, source) { + return find(collection, baseMatches(source)); + } + + /** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). Iteratee functions may exit iteration early + * by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from left to right and returns the array + * + * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { + * console.log(n, key); + * }); + * // => logs each value-key pair and returns the object (iteration order is not guaranteed) + */ + var forEach = createForEach(arrayEach, baseEach); + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEachRight(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from right to left and returns the array + */ + var forEachRight = createForEach(arrayEachRight, baseEachRight); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using the `_.property` callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } + }); + + /** + * Checks if `value` is in `collection` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `collection`. + * + * @static + * @memberOf _ + * @alias contains, include + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} target The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {boolean} Returns `true` if a matching element is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ + function includes(collection, target, fromIndex, guard) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + collection = values(collection); + length = collection.length; + } + if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { + fromIndex = 0; + } else { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); + } + return (typeof collection == 'string' || !isArray(collection) && isString(collection)) + ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1) + : (!!length && getIndexOf(collection, target, fromIndex) > -1); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var keyData = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.indexBy(keyData, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return String.fromCharCode(object.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return this.fromCharCode(object.code); + * }, String); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + */ + var indexBy = createAggregator(function(result, value, key) { + result[key] = value; + }); + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it is + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invoke([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invoke = restParam(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? func.apply(value, args) : invokePath(value, path, args); + }); + return result; + }); + + /** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, + * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, + * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, + * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, + * `sum`, `uniq`, and `words` + * + * @static + * @memberOf _ + * @alias collect + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new mapped array. + * @example + * + * function timesThree(n) { + * return n * 3; + * } + * + * _.map([1, 2], timesThree); + * // => [3, 6] + * + * _.map({ 'a': 1, 'b': 2 }, timesThree); + * // => [3, 6] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // using the `_.property` callback shorthand + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee, thisArg) { + var func = isArray(collection) ? arrayMap : baseMap; + iteratee = getCallback(iteratee, thisArg, 3); + return func(collection, iteratee); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, while the second of which + * contains elements `predicate` returns falsey for. The predicate is bound + * to `thisArg` and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * _.partition([1, 2, 3], function(n) { + * return n % 2; + * }); + * // => [[1, 3], [2]] + * + * _.partition([1.2, 2.3, 3.4], function(n) { + * return this.floor(n) % 2; + * }, Math); + * // => [[1.2, 3.4], [2.3]] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * var mapper = function(array) { + * return _.pluck(array, 'user'); + * }; + * + * // using the `_.matches` callback shorthand + * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper); + * // => [['pebbles'], ['barney', 'fred']] + * + * // using the `_.matchesProperty` callback shorthand + * _.map(_.partition(users, 'active', false), mapper); + * // => [['barney', 'pebbles'], ['fred']] + * + * // using the `_.property` callback shorthand + * _.map(_.partition(users, 'active'), mapper); + * // => [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Gets the property value of `path` from all elements in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|string} path The path of the property to pluck. + * @returns {Array} Returns the property values. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.pluck(users, 'user'); + * // => ['barney', 'fred'] + * + * var userIndex = _.indexBy(users, 'user'); + * _.pluck(userIndex, 'age'); + * // => [36, 40] (iteration order is not guaranteed) + */ + function pluck(collection, path) { + return map(collection, property(path)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not provided the first element of `collection` is used as the initial + * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`, + * and `sortByOrder` + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(total, n) { + * return total + n; + * }); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) + */ + var reduce = createReduce(arrayReduce, baseEach); + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias foldr + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + var reduceRight = createReduce(arrayReduceRight, baseEachRight); + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.reject([1, 2, 3, 4], function(n) { + * return n % 2 == 0; + * }); + * // => [1, 3] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.reject(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.reject(users, 'active'), 'user'); + * // => ['barney'] + */ + function reject(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getCallback(predicate, thisArg, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); + } + + /** + * Gets a random element or `n` random elements from a collection. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to sample. + * @param {number} [n] The number of elements to sample. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {*} Returns the random sample(s). + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + * + * _.sample([1, 2, 3, 4], 2); + * // => [3, 1] + */ + function sample(collection, n, guard) { + if (guard ? isIterateeCall(collection, n, guard) : n == null) { + collection = toIterable(collection); + var length = collection.length; + return length > 0 ? collection[baseRandom(0, length - 1)] : undefined; + } + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1; + + n = nativeMin(n < 0 ? 0 : (+n || 0), length); + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand]; + + result[rand] = result[index]; + result[index] = value; + } + result.length = n; + return result; + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + return sample(collection, POSITIVE_INFINITY); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the size of `collection`. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + var length = collection ? getLength(collection) : 0; + return isLength(length) ? length : keys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * The function returns as soon as it finds a passing value and does not iterate + * over the entire collection. The predicate is bound to `thisArg` and invoked + * with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.some(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, thisArg) { + var func = isArray(collection) ? arraySome : baseSome; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3); + } + return func(collection, predicate); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through `iteratee`. This method performs + * a stable sort, that is, it preserves the original sort order of equal elements. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new sorted array. + * @example + * + * _.sortBy([1, 2, 3], function(n) { + * return Math.sin(n); + * }); + * // => [3, 1, 2] + * + * _.sortBy([1, 2, 3], function(n) { + * return this.sin(n); + * }, Math); + * // => [3, 1, 2] + * + * var users = [ + * { 'user': 'fred' }, + * { 'user': 'pebbles' }, + * { 'user': 'barney' } + * ]; + * + * // using the `_.property` callback shorthand + * _.pluck(_.sortBy(users, 'user'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function sortBy(collection, iteratee, thisArg) { + if (collection == null) { + return []; + } + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + var index = -1; + iteratee = getCallback(iteratee, thisArg, 3); + + var result = baseMap(collection, function(value, key, collection) { + return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value }; + }); + return baseSortBy(result, compareAscending); + } + + /** + * This method is like `_.sortBy` except that it can sort by multiple iteratees + * or property names. + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees + * The iteratees to sort by, specified as individual values or arrays of values. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.map(_.sortByAll(users, ['user', 'age']), _.values); + * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.map(_.sortByAll(users, 'user', function(chr) { + * return Math.floor(chr.age / 10); + * }), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + var sortByAll = restParam(function(collection, iteratees) { + if (collection == null) { + return []; + } + var guard = iteratees[2]; + if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { + iteratees.length = 1; + } + return baseSortByOrder(collection, baseFlatten(iteratees), []); + }); + + /** + * This method is like `_.sortByAll` except that it allows specifying the + * sort orders of the iteratees to sort by. If `orders` is unspecified, all + * values are sorted in ascending order. Otherwise, a value is sorted in + * ascending order if its corresponding order is "asc", and descending if "desc". + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // sort by `user` in ascending order and by `age` in descending order + * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + function sortByOrder(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (guard && isIterateeCall(iteratees, orders, guard)) { + orders = undefined; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseSortByOrder(collection, iteratees, orders); + } + + /** + * Performs a deep comparison between each element in `collection` and the + * source object, returning an array of all elements that have equivalent + * property values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] }, + * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] } + * ]; + * + * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user'); + * // => ['barney'] + * + * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user'); + * // => ['fred'] + */ + function where(collection, source) { + return filter(collection, baseMatches(source)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Date + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked + */ + var now = nativeNow || function() { + return new Date().getTime(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it is called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ + function after(n, func) { + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + n = nativeIsFinite(n = +n) ? n : 0; + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that accepts up to `n` arguments ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + if (guard && isIterateeCall(func, n, guard)) { + n = undefined; + } + n = (func && n == null) ? func.length : nativeMax(+n || 0, 0); + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it is called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery('#add').on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method does not set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // using placeholders + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = restParam(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bind.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); + }); + + /** + * Binds methods of an object to the object itself, overwriting the existing + * method. Method names may be specified as individual arguments or as arrays + * of method names. If no method names are provided all enumerable function + * properties, own and inherited, of `object` are bound. + * + * **Note:** This method does not set the "length" property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} [methodNames] The object method names to bind, + * specified as individual method names or arrays of method names. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view); + * jQuery('#docs').on('click', view.onClick); + * // => logs 'clicked docs' when the element is clicked + */ + var bindAll = restParam(function(object, methodNames) { + methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object); + + var index = -1, + length = methodNames.length; + + while (++index < length) { + var key = methodNames[index]; + object[key] = createWrapper(object[key], BIND_FLAG, object); + } + return object; + }); + + /** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object the method belongs to. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // using placeholders + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = restParam(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bindKey.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts one or more arguments of `func` that when + * called either invokes `func` returning its result, if all `func` arguments + * have been provided, or returns a function that accepts one or more of the + * remaining `func` arguments, and so on. The arity of `func` may be specified + * if `func.length` is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + var curry = createCurry(CURRY_FLAG); + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + var curryRight = createCurry(CURRY_RIGHT_FLAG); + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed invocations. Provide an options object to indicate that `func` + * should be invoked on the leading and/or trailing edge of the `wait` timeout. + * Subsequent calls to the debounced function return the result of the last + * `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it is invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // invoke `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // ensure `batchLog` is invoked once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * jQuery(source).on('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * })); + * + * // cancel a debounced call + * var todoChanges = _.debounce(batchLog, 1000); + * Object.observe(models.todo, todoChanges); + * + * Object.observe(models, function(changes) { + * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) { + * todoChanges.cancel(); + * } + * }, ['delete']); + * + * // ...at some point `models.todo` is changed + * models.todo.completed = true; + * + * // ...before 1 second has passed `models.todo` is deleted + * // which cancels the debounced `todoChanges` call + * delete models.todo; + */ + function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = wait < 0 ? 0 : (+wait || 0); + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + maxTimeoutId = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0 || remaining > maxWait; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // logs 'deferred' after one or more milliseconds + */ + var defer = restParam(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ + var delay = restParam(function(func, wait, args) { + return baseDelay(func, wait, args); + }); + + /** + * Creates a function that returns the result of invoking the provided + * functions with the `this` binding of the created function, where each + * successive invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow(_.add, square); + * addSquare(1, 2); + * // => 9 + */ + var flow = createFlow(); + + /** + * This method is like `_.flow` except that it creates a function that + * invokes the provided functions from right to left. + * + * @static + * @memberOf _ + * @alias backflow, compose + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight(square, _.add); + * addSquare(1, 2); + * // => 9 + */ + var flowRight = createFlow(true); + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is coerced to a string and used as the + * cache key. The `func` is invoked with the `this` binding of the memoized + * function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) + * method interface of `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var upperCase = _.memoize(function(string) { + * return string.toUpperCase(); + * }); + * + * upperCase('fred'); + * // => 'FRED' + * + * // modifying the result cache + * upperCase.cache.set('fred', 'BARNEY'); + * upperCase('fred'); + * // => 'BARNEY' + * + * // replacing `_.memoize.Cache` + * var object = { 'user': 'fred' }; + * var other = { 'user': 'barney' }; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'fred' } + * + * _.memoize.Cache = WeakMap; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'barney' } + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new memoize.Cache; + return memoized; + } + + /** + * Creates a function that runs each argument through a corresponding + * transform function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms] The functions to transform + * arguments, specified as individual functions or arrays of functions. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var modded = _.modArgs(function(x, y) { + * return [x, y]; + * }, square, doubled); + * + * modded(1, 2); + * // => [1, 4] + * + * modded(5, 10); + * // => [25, 20] + */ + var modArgs = restParam(function(func, transforms) { + transforms = baseFlatten(transforms); + if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = transforms.length; + return restParam(function(args) { + var index = nativeMin(args.length, length); + while (index--) { + args[index] = transforms[index](args[index]); + } + return func.apply(this, args); + }); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first call. The `func` is invoked + * with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with `partial` arguments prepended + * to those provided to the new function. This method is like `_.bind` except + * it does **not** alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // using placeholders + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = createPartial(PARTIAL_FLAG); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to those provided to the new function. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // using placeholders + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = createPartial(PARTIAL_RIGHT_FLAG); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified indexes where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes, + * specified as individual indexes or arrays of indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, 2, 0, 1); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + * + * var map = _.rearg(_.map, [1, 0]); + * map(function(n) { + * return n * 3; + * }, [1, 2, 3]); + * // => [3, 6, 9] + */ + var rearg = restParam(function(func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of the created + * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). + * + * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to spread arguments over. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * // with a Promise + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function(array) { + return func.apply(this, array); + }; + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed invocations. Provide an options object to indicate + * that `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. Subsequent calls to the throttled function return the + * result of the last `func` call. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + * + * // cancel a trailing throttled call + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }); + } + + /** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Any additional arguments provided to the function are + * appended to those provided to the wrapper function. The wrapper is invoked + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {*} value The value to wrap. + * @param {Function} wrapper The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + wrapper = wrapper == null ? identity : wrapper; + return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned, + * otherwise they are assigned by reference. If `customizer` is provided it is + * invoked to produce the cloned values. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is bound to + * `thisArg` and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var shallow = _.clone(users); + * shallow[0] === users[0]; + * // => true + * + * var deep = _.clone(users, true); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.clone(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 0 + */ + function clone(value, isDeep, customizer, thisArg) { + if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { + isDeep = false; + } + else if (typeof isDeep == 'function') { + thisArg = customizer; + customizer = isDeep; + isDeep = false; + } + return typeof customizer == 'function' + ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1)) + : baseClone(value, isDeep); + } + + /** + * Creates a deep clone of `value`. If `customizer` is provided it is invoked + * to produce the cloned values. If `customizer` returns `undefined` cloning + * is handled by the method instead. The `customizer` is bound to `thisArg` + * and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the deep cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var deep = _.cloneDeep(users); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.cloneDeep(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 20 + */ + function cloneDeep(value, customizer, thisArg) { + return typeof customizer == 'function' + ? baseClone(value, true, bindCallback(customizer, thisArg, 1)) + : baseClone(value, true); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + function gt(value, other) { + return value > other; + } + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + function gte(value, other) { + return value >= other; + } + + /** + * Checks if `value` is classified as an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false + */ + var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; + }; + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + function isDate(value) { + return isObjectLike(value) && objToString.call(value) == dateTag; + } + + /** + * Checks if `value` is a DOM element. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); + } + + /** + * Checks if `value` is empty. A value is considered empty unless it is an + * `arguments` object, array, string, or jQuery-like collection with a length + * greater than `0` or an object with own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + (isObjectLike(value) && isFunction(value.splice)))) { + return !value.length; + } + return !keys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. If `customizer` is provided it is invoked to compare values. + * If `customizer` returns `undefined` comparisons are handled by the method + * instead. The `customizer` is bound to `thisArg` and invoked with three + * arguments: (value, other [, index|key]). + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. Functions and DOM nodes + * are **not** supported. Provide a customizer function to extend support + * for comparing other values. + * + * @static + * @memberOf _ + * @alias eq + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * object == other; + * // => false + * + * _.isEqual(object, other); + * // => true + * + * // using a customizer callback + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqual(array, other, function(value, other) { + * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) { + * return true; + * } + * }); + * // => true + */ + function isEqual(value, other, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag; + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(10); + * // => true + * + * _.isFinite('10'); + * // => false + * + * _.isFinite(true); + * // => false + * + * _.isFinite(Object(10)); + * // => false + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; + } + + /** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ + function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Performs a deep comparison between `object` and `source` to determine if + * `object` contains equivalent property values. If `customizer` is provided + * it is invoked to compare values. If `customizer` returns `undefined` + * comparisons are handled by the method instead. The `customizer` is bound + * to `thisArg` and invoked with three arguments: (value, other, index|key). + * + * **Note:** This method supports comparing properties of arrays, booleans, + * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions + * and DOM nodes are **not** supported. Provide a customizer function to extend + * support for comparing other values. + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.isMatch(object, { 'age': 40 }); + * // => true + * + * _.isMatch(object, { 'age': 36 }); + * // => false + * + * // using a customizer callback + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatch(object, source, function(value, other) { + * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined; + * }); + * // => true + */ + function isMatch(object, source, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + return baseIsMatch(object, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some host objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(8.4); + * // => true + * + * _.isNumber(NaN); + * // => true + * + * _.isNumber('8.4'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * **Note:** This method assumes objects created by the `Object` constructor + * have no inherited enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + var Ctor; + + // Exit early for non `Object` objects. + if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) || + (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) { + return false; + } + // IE < 9 iterates inherited properties before own properties. If the first + // iterated property is an object's own property then there are no inherited + // enumerable properties. + var result; + // In most environments an object's own properties are iterated before + // its inherited properties. If the last iterated property is an object's + // own property then there are no inherited enumerable properties. + baseForIn(value, function(subValue, key) { + result = key; + }); + return result === undefined || hasOwnProperty.call(value, result); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + function isRegExp(value) { + return isObject(value) && objToString.call(value) == regexpTag; + } + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + function isTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + function lt(value, other) { + return value < other; + } + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`. + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + function lte(value, other) { + return value <= other; + } + + /** + * Converts `value` to an array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * (function() { + * return _.toArray(arguments).slice(1); + * }(1, 2, 3)); + * // => [2, 3] + */ + function toArray(value) { + var length = value ? getLength(value) : 0; + if (!isLength(length)) { + return values(value); + } + if (!length) { + return []; + } + return arrayCopy(value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable + * properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return baseCopy(value, keysIn(value)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Recursively merges own enumerable properties of the source object(s), that + * don't resolve to `undefined` into the destination object. Subsequent sources + * overwrite property assignments of previous sources. If `customizer` is + * provided it is invoked to produce the merged values of the destination and + * source properties. If `customizer` returns `undefined` merging is handled + * by the method instead. The `customizer` is bound to `thisArg` and invoked + * with five arguments: (objectValue, sourceValue, key, object, source). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * var users = { + * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] + * }; + * + * var ages = { + * 'data': [{ 'age': 36 }, { 'age': 40 }] + * }; + * + * _.merge(users, ages); + * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } + * + * // using a customizer callback + * var object = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var other = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.merge(object, other, function(a, b) { + * if (_.isArray(a)) { + * return a.concat(b); + * } + * }); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } + */ + var merge = createAssigner(baseMerge); + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources overwrite property assignments of previous sources. + * If `customizer` is provided it is invoked to produce the assigned values. + * The `customizer` is bound to `thisArg` and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * **Note:** This method mutates `object` and is based on + * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign). + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using a customizer callback + * var defaults = _.partialRight(_.assign, function(value, other) { + * return _.isUndefined(value) ? other : value; + * }); + * + * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var assign = createAssigner(function(object, source, customizer) { + return customizer + ? assignWith(object, source, customizer) + : baseAssign(object, source); + }); + + /** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties, guard) { + var result = baseCreate(prototype); + if (guard && isIterateeCall(prototype, properties, guard)) { + properties = undefined; + } + return properties ? baseAssign(result, properties) : result; + } + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object for all destination properties that resolve to `undefined`. Once a + * property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var defaults = createDefaults(assign, assignDefaults); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); + * // => { 'user': { 'name': 'barney', 'age': 36 } } + * + */ + var defaultsDeep = createDefaults(merge, mergeDefaults); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(chr) { + * return chr.age < 40; + * }); + * // => 'barney' (iteration order is not guaranteed) + * + * // using the `_.matches` callback shorthand + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.findKey(users, 'active', false); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.findKey(users, 'active'); + * // => 'barney' + */ + var findKey = createFindKey(baseForOwn); + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(chr) { + * return chr.age < 40; + * }); + * // => returns `pebbles` assuming `_.findKey` returns `barney` + * + * // using the `_.matches` callback shorthand + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastKey(users, 'active', false); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + var findLastKey = createFindKey(baseForOwnRight); + + /** + * Iterates over own and inherited enumerable properties of an object invoking + * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed) + */ + var forIn = createForIn(baseFor); + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c' + */ + var forInRight = createForIn(baseForRight); + + /** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The `iteratee` is bound to `thisArg` and invoked with + * three arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' and 'b' (iteration order is not guaranteed) + */ + var forOwn = createForOwn(baseForOwn); + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b' + */ + var forOwnRight = createForOwn(baseForOwnRight); + + /** + * Creates an array of function property names from all enumerable properties, + * own and inherited, of `object`. + * + * @static + * @memberOf _ + * @alias methods + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * _.functions(_); + * // => ['after', 'ary', 'assign', ...] + */ + function functions(object) { + return baseFunctions(object, keysIn(object)); + } + + /** + * Gets the property value at `path` of `object`. If the resolved value is + * `undefined` the `defaultValue` is used in its place. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, toPath(path), path + ''); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` is a direct property, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + */ + function has(object, path) { + if (object == null) { + return false; + } + var result = hasOwnProperty.call(object, path); + if (!result && !isKey(path)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + path = last(path); + result = hasOwnProperty.call(object, path); + } + return result || (isLength(object.length) && isIndex(path, object.length) && + (isArray(object) || isArguments(object))); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite property + * assignments of previous values unless `multiValue` is `true`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @param {boolean} [multiValue] Allow multiple values per key. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + * + * // with `multiValue` + * _.invert(object, true); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function invert(object, multiValue, guard) { + if (guard && isIterateeCall(object, multiValue, guard)) { + multiValue = undefined; + } + var index = -1, + props = keys(object), + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index], + value = object[key]; + + if (multiValue) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + } + else { + result[value] = key; + } + } + return result; + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? undefined : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object != 'function' && isArrayLike(object))) { + return shimKeys(object); + } + return isObject(object) ? nativeKeys(object) : []; + }; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length; + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0; + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor == 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0; + + while (++index < length) { + result[index] = (index + ''); + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * property of `object` through `iteratee`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + var mapKeys = createObjectMapper(true); + + /** + * Creates an object with the same keys as `object` and values generated by + * running each own enumerable property of `object` through `iteratee`. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, key, object). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapValues({ 'a': 1, 'b': 2 }, function(n) { + * return n * 3; + * }); + * // => { 'a': 3, 'b': 6 } + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * // using the `_.property` callback shorthand + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + var mapValues = createObjectMapper(); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable properties of `object` that are not omitted. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to omit, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.omit(object, 'age'); + * // => { 'user': 'fred' } + * + * _.omit(object, _.isNumber); + * // => { 'user': 'fred' } + */ + var omit = restParam(function(object, props) { + if (object == null) { + return {}; + } + if (typeof props[0] != 'function') { + var props = arrayMap(baseFlatten(props), String); + return pickByArray(object, baseDifference(keysIn(object), props)); + } + var predicate = bindCallback(props[0], props[1], 3); + return pickByCallback(object, function(value, key, object) { + return !predicate(value, key, object); + }); + }); + + /** + * Creates a two dimensional array of the key-value pairs for `object`, + * e.g. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) + */ + function pairs(object) { + object = toObject(object); + + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; + } + return result; + } + + /** + * Creates an object composed of the picked `object` properties. Property + * names may be specified as individual arguments or as arrays of property + * names. If `predicate` is provided it is invoked for each property of `object` + * picking the properties `predicate` returns truthy for. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to pick, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.pick(object, 'user'); + * // => { 'user': 'fred' } + * + * _.pick(object, _.isString); + * // => { 'user': 'fred' } + */ + var pick = restParam(function(object, props) { + if (object == null) { + return {}; + } + return typeof props[0] == 'function' + ? pickByCallback(object, bindCallback(props[0], props[1], 3)) + : pickByArray(object, baseFlatten(props)); + }); + + /** + * This method is like `_.get` except that if the resolved value is a function + * it is invoked with the `this` binding of its parent object and its result + * is returned. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a.b.c', 'default'); + * // => 'default' + * + * _.result(object, 'a.b.c', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var result = object == null ? undefined : object[path]; + if (result === undefined) { + if (object != null && !isKey(path, object)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + result = object == null ? undefined : object[last(path)]; + } + result = result === undefined ? defaultValue : result; + } + return isFunction(result) ? result.call(object) : result; + } + + /** + * Sets the property value of `path` on `object`. If a portion of `path` + * does not exist it is created. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to augment. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, 'x[0].y.z', 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + if (object == null) { + return object; + } + var pathKey = (path + ''); + path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = path[index]; + if (isObject(nested)) { + if (index == lastIndex) { + nested[key] = value; + } else if (nested[key] == null) { + nested[key] = isIndex(path[index + 1]) ? [] : {}; + } + } + nested = nested[key]; + } + return object; + } + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own enumerable + * properties through `iteratee`, with each invocation potentially mutating + * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked + * with four arguments: (accumulator, value, key, object). Iteratee functions + * may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Array|Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * }); + * // => { 'a': 3, 'b': 6 } + */ + function transform(object, iteratee, accumulator, thisArg) { + var isArr = isArray(object) || isTypedArray(object); + iteratee = getCallback(iteratee, thisArg, 4); + + if (accumulator == null) { + if (isArr || isObject(object)) { + var Ctor = object.constructor; + if (isArr) { + accumulator = isArray(object) ? new Ctor : []; + } else { + accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined); + } + } else { + accumulator = {}; + } + } + (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable property values + * of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `n` is between `start` and up to but not including, `end`. If + * `end` is not specified it is set to `start` with `start` then set to `0`. + * + * @static + * @memberOf _ + * @category Number + * @param {number} n The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `n` is in the range, else `false`. + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + */ + function inRange(value, start, end) { + start = +start || 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = +end || 0; + } + return value >= nativeMin(start, end) && value < nativeMax(start, end); + } + + /** + * Produces a random number between `min` and `max` (inclusive). If only one + * argument is provided a number between `0` and the given number is returned. + * If `floating` is `true`, or either `min` or `max` are floats, a floating-point + * number is returned instead of an integer. + * + * @static + * @memberOf _ + * @category Number + * @param {number} [min=0] The minimum possible value. + * @param {number} [max=1] The maximum possible value. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(min, max, floating) { + if (floating && isIterateeCall(min, max, floating)) { + max = floating = undefined; + } + var noMin = min == null, + noMax = max == null; + + if (floating == null) { + if (noMax && typeof min == 'boolean') { + floating = min; + min = 1; + } + else if (typeof max == 'boolean') { + floating = max; + noMax = true; + } + } + if (noMin && noMax) { + max = 1; + noMax = false; + } + min = +min || 0; + if (noMax) { + max = min; + min = 0; + } else { + max = +max || 0; + } + if (floating || min % 1 || max % 1) { + var rand = nativeRandom(); + return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max); + } + return baseRandom(min, max); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar'); + * // => 'fooBar' + * + * _.camelCase('__foo_bar__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word); + }); + + /** + * Capitalizes the first character of `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('fred'); + * // => 'Fred' + */ + function capitalize(string) { + string = baseToString(string); + return string && (string.charAt(0).toUpperCase() + string.slice(1)); + } + + /** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = baseToString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search from. + * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = baseToString(string); + target = (target + ''); + + var length = string.length; + position = position === undefined + ? length + : nativeMin(position < 0 ? 0 : (+position || 0), length); + + position -= target.length; + return position >= 0 && string.indexOf(target, position) == position; + } + + /** + * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional characters + * use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in Internet Explorer < 9, they can break out + * of attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + // Reset `lastIndex` because in IE < 9 `String#replace` does not. + string = baseToString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?", + * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https:\/\/lodash\.com\/\)' + */ + function escapeRegExp(string) { + string = baseToString(string); + return (string && reHasRegExpChars.test(string)) + ? string.replace(reRegExpChars, escapeRegExpChar) + : (string || '(?:)'); + } + + /** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = baseToString(string); + length = +length; + + var strLength = string.length; + if (strLength >= length || !nativeIsFinite(length)) { + return string; + } + var mid = (length - strLength) / 2, + leftLength = nativeFloor(mid), + rightLength = nativeCeil(mid); + + chars = createPadding('', rightLength, chars); + return chars.slice(0, leftLength) + string + chars; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padLeft('abc', 6); + * // => ' abc' + * + * _.padLeft('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padLeft('abc', 3); + * // => 'abc' + */ + var padLeft = createPadDir(); + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padRight('abc', 6); + * // => 'abc ' + * + * _.padRight('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padRight('abc', 3); + * // => 'abc' + */ + var padRight = createPadDir(true); + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal, + * in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E) + * of `parseInt`. + * + * @static + * @memberOf _ + * @category String + * @param {string} string The string to convert. + * @param {number} [radix] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`. + // Chrome fails to trim leading whitespace characters. + // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. + if (guard ? isIterateeCall(string, radix, guard) : radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + string = trim(string); + return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=0] The number of times to repeat the string. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n) { + var result = ''; + string = baseToString(string); + n = +n; + if (n < 1 || !string || !nativeIsFinite(n)) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + string += string; + } while (n); + + return result; + } + + /** + * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--foo-bar'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__foo_bar__'); + * // => 'Foo Bar' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1)); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = baseToString(string); + position = position == null + ? 0 + : nativeMin(position < 0 ? 0 : (+position || 0), string.length); + + return string.lastIndexOf(target, position) == position; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is provided it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as free variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. + * @param {string} [options.variable] The data object variable name. + * @param- {Object} [otherOptions] Enables the legacy `options` param signature. + * @returns {Function} Returns the compiled template function. + * @example + * + * // using the "interpolate" delimiter to create a compiled template + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // using the HTML "escape" delimiter to escape data property values + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + +``` + + +## API + +### Parsing + +Parsing a plist from filename: + +``` javascript +var fs = require('fs'); +var plist = require('plist'); + +var obj = plist.parse(fs.readFileSync('myPlist.plist', 'utf8')); +console.log(JSON.stringify(obj)); +``` + +Parsing a plist from string payload: + +``` javascript +var plist = require('plist'); + +var obj = plist.parse('Hello World!'); +console.log(obj); // Hello World! +``` + +### Building + +Given an existing JavaScript Object, you can turn it into an XML document +that complies with the plist DTD: + +``` javascript +var plist = require('plist'); + +console.log(plist.build({ foo: 'bar' })); +``` + + +## License + +(The MIT License) + +Copyright (c) 2010-2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/plist/dist/plist-build.js b/platforms/android/cordova/node_modules/plist/dist/plist-build.js new file mode 100644 index 0000000..4fcd378 --- /dev/null +++ b/platforms/android/cordova/node_modules/plist/dist/plist-build.js @@ -0,0 +1,3982 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.plist = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],3:[function(require,module,exports){ +/** + * Determine if an object is Buffer + * + * Author: Feross Aboukhadijeh + * License: MIT + * + * `npm install is-buffer` + */ + +module.exports = function (obj) { + return !!(obj != null && + (obj._isBuffer || // For Safari 5-7 (missing Object.prototype.constructor) + (obj.constructor && + typeof obj.constructor.isBuffer === 'function' && + obj.constructor.isBuffer(obj)) + )) +} + +},{}],4:[function(require,module,exports){ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; +} + +module.exports = last; + +},{}],5:[function(require,module,exports){ +var arrayEvery = require('../internal/arrayEvery'), + baseCallback = require('../internal/baseCallback'), + baseEvery = require('../internal/baseEvery'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = baseCallback(predicate, thisArg, 3); + } + return func(collection, predicate); +} + +module.exports = every; + +},{"../internal/arrayEvery":7,"../internal/baseCallback":11,"../internal/baseEvery":15,"../internal/isIterateeCall":40,"../lang/isArray":49}],6:[function(require,module,exports){ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ +function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; +} + +module.exports = restParam; + +},{}],7:[function(require,module,exports){ +/** + * A specialized version of `_.every` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ +function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; +} + +module.exports = arrayEvery; + +},{}],8:[function(require,module,exports){ +/** + * A specialized version of `_.some` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; + +},{}],9:[function(require,module,exports){ +var keys = require('../object/keys'); + +/** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ +function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; +} + +module.exports = assignWith; + +},{"../object/keys":58}],10:[function(require,module,exports){ +var baseCopy = require('./baseCopy'), + keys = require('../object/keys'); + +/** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); +} + +module.exports = baseAssign; + +},{"../object/keys":58,"./baseCopy":12}],11:[function(require,module,exports){ +var baseMatches = require('./baseMatches'), + baseMatchesProperty = require('./baseMatchesProperty'), + bindCallback = require('./bindCallback'), + identity = require('../utility/identity'), + property = require('../utility/property'); + +/** + * The base implementation of `_.callback` which supports specifying the + * number of arguments to provide to `func`. + * + * @private + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ +function baseCallback(func, thisArg, argCount) { + var type = typeof func; + if (type == 'function') { + return thisArg === undefined + ? func + : bindCallback(func, thisArg, argCount); + } + if (func == null) { + return identity; + } + if (type == 'object') { + return baseMatches(func); + } + return thisArg === undefined + ? property(func) + : baseMatchesProperty(func, thisArg); +} + +module.exports = baseCallback; + +},{"../utility/identity":61,"../utility/property":62,"./baseMatches":22,"./baseMatchesProperty":23,"./bindCallback":28}],12:[function(require,module,exports){ +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ +function baseCopy(source, props, object) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + object[key] = source[key]; + } + return object; +} + +module.exports = baseCopy; + +},{}],13:[function(require,module,exports){ +var isObject = require('../lang/isObject'); + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(prototype) { + if (isObject(prototype)) { + object.prototype = prototype; + var result = new object; + object.prototype = undefined; + } + return result || {}; + }; +}()); + +module.exports = baseCreate; + +},{"../lang/isObject":53}],14:[function(require,module,exports){ +var baseForOwn = require('./baseForOwn'), + createBaseEach = require('./createBaseEach'); + +/** + * The base implementation of `_.forEach` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; + +},{"./baseForOwn":17,"./createBaseEach":30}],15:[function(require,module,exports){ +var baseEach = require('./baseEach'); + +/** + * The base implementation of `_.every` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ +function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; +} + +module.exports = baseEvery; + +},{"./baseEach":14}],16:[function(require,module,exports){ +var createBaseFor = require('./createBaseFor'); + +/** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; + +},{"./createBaseFor":31}],17:[function(require,module,exports){ +var baseFor = require('./baseFor'), + keys = require('../object/keys'); + +/** + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; + +},{"../object/keys":58,"./baseFor":16}],18:[function(require,module,exports){ +var toObject = require('./toObject'); + +/** + * The base implementation of `get` without support for string paths + * and default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path of the property to get. + * @param {string} [pathKey] The key representation of path. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path, pathKey) { + if (object == null) { + return; + } + if (pathKey !== undefined && pathKey in toObject(object)) { + path = [pathKey]; + } + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; + +},{"./toObject":46}],19:[function(require,module,exports){ +var baseIsEqualDeep = require('./baseIsEqualDeep'), + isObject = require('../lang/isObject'), + isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.isEqual` without support for `this` binding + * `customizer` functions. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); +} + +module.exports = baseIsEqual; + +},{"../lang/isObject":53,"./baseIsEqualDeep":20,"./isObjectLike":43}],20:[function(require,module,exports){ +var equalArrays = require('./equalArrays'), + equalByTag = require('./equalByTag'), + equalObjects = require('./equalObjects'), + isArray = require('../lang/isArray'), + isTypedArray = require('../lang/isTypedArray'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing objects. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `value` objects. + * @param {Array} [stackB=[]] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objToString.call(object); + if (objTag == argsTag) { + objTag = objectTag; + } else if (objTag != objectTag) { + objIsArr = isTypedArray(object); + } + } + if (!othIsArr) { + othTag = objToString.call(other); + if (othTag == argsTag) { + othTag = objectTag; + } else if (othTag != objectTag) { + othIsArr = isTypedArray(other); + } + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && !(objIsArr || objIsObj)) { + return equalByTag(object, other, objTag); + } + if (!isLoose) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); + } + } + if (!isSameTag) { + return false; + } + // Assume cyclic values are equal. + // For more information on detecting circular references see https://es5.github.io/#JO. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == object) { + return stackB[length] == other; + } + } + // Add `object` and `other` to the stack of traversed objects. + stackA.push(object); + stackB.push(other); + + var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); + + stackA.pop(); + stackB.pop(); + + return result; +} + +module.exports = baseIsEqualDeep; + +},{"../lang/isArray":49,"../lang/isTypedArray":55,"./equalArrays":32,"./equalByTag":33,"./equalObjects":34}],21:[function(require,module,exports){ +var baseIsEqual = require('./baseIsEqual'), + toObject = require('./toObject'); + +/** + * The base implementation of `_.isMatch` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} matchData The propery names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparing objects. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = toObject(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var result = customizer ? customizer(objValue, srcValue, key) : undefined; + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; + +},{"./baseIsEqual":19,"./toObject":46}],22:[function(require,module,exports){ +var baseIsMatch = require('./baseIsMatch'), + getMatchData = require('./getMatchData'), + toObject = require('./toObject'); + +/** + * The base implementation of `_.matches` which does not clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && (value !== undefined || (key in toObject(object))); + }; + } + return function(object) { + return baseIsMatch(object, matchData); + }; +} + +module.exports = baseMatches; + +},{"./baseIsMatch":21,"./getMatchData":36,"./toObject":46}],23:[function(require,module,exports){ +var baseGet = require('./baseGet'), + baseIsEqual = require('./baseIsEqual'), + baseSlice = require('./baseSlice'), + isArray = require('../lang/isArray'), + isKey = require('./isKey'), + isStrictComparable = require('./isStrictComparable'), + last = require('../array/last'), + toObject = require('./toObject'), + toPath = require('./toPath'); + +/** + * The base implementation of `_.matchesProperty` which does not clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to compare. + * @returns {Function} Returns the new function. + */ +function baseMatchesProperty(path, srcValue) { + var isArr = isArray(path), + isCommon = isKey(path) && isStrictComparable(srcValue), + pathKey = (path + ''); + + path = toPath(path); + return function(object) { + if (object == null) { + return false; + } + var key = pathKey; + object = toObject(object); + if ((isArr || !isCommon) && !(key in object)) { + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + key = last(path); + object = toObject(object); + } + return object[key] === srcValue + ? (srcValue !== undefined || (key in object)) + : baseIsEqual(srcValue, object[key], undefined, true); + }; +} + +module.exports = baseMatchesProperty; + +},{"../array/last":4,"../lang/isArray":49,"./baseGet":18,"./baseIsEqual":19,"./baseSlice":26,"./isKey":41,"./isStrictComparable":44,"./toObject":46,"./toPath":47}],24:[function(require,module,exports){ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; + +},{}],25:[function(require,module,exports){ +var baseGet = require('./baseGet'), + toPath = require('./toPath'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ +function basePropertyDeep(path) { + var pathKey = (path + ''); + path = toPath(path); + return function(object) { + return baseGet(object, path, pathKey); + }; +} + +module.exports = basePropertyDeep; + +},{"./baseGet":18,"./toPath":47}],26:[function(require,module,exports){ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; + +},{}],27:[function(require,module,exports){ +/** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` or `undefined` values. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + return value == null ? '' : (value + ''); +} + +module.exports = baseToString; + +},{}],28:[function(require,module,exports){ +var identity = require('../utility/identity'); + +/** + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ +function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; +} + +module.exports = bindCallback; + +},{"../utility/identity":61}],29:[function(require,module,exports){ +var bindCallback = require('./bindCallback'), + isIterateeCall = require('./isIterateeCall'), + restParam = require('../function/restParam'); + +/** + * Creates a `_.assign`, `_.defaults`, or `_.merge` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; + +},{"../function/restParam":6,"./bindCallback":28,"./isIterateeCall":40}],30:[function(require,module,exports){ +var getLength = require('./getLength'), + isLength = require('./isLength'), + toObject = require('./toObject'); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + return eachFunc(collection, iteratee); + } + var index = fromRight ? length : -1, + iterable = toObject(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +module.exports = createBaseEach; + +},{"./getLength":35,"./isLength":42,"./toObject":46}],31:[function(require,module,exports){ +var toObject = require('./toObject'); + +/** + * Creates a base function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; + +},{"./toObject":46}],32:[function(require,module,exports){ +var arraySome = require('./arraySome'); + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing arrays. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { + var index = -1, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isLoose && othLength > arrLength)) { + return false; + } + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index], + result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; + + if (result !== undefined) { + if (result) { + continue; + } + return false; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isLoose) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); + })) { + return false; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { + return false; + } + } + return true; +} + +module.exports = equalArrays; + +},{"./arraySome":8}],33:[function(require,module,exports){ +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag) { + switch (tag) { + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) + ? other != +other + : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + } + return false; +} + +module.exports = equalByTag; + +},{}],34:[function(require,module,exports){ +var keys = require('../object/keys'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isLoose) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var skipCtor = isLoose; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key], + result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; + + // Recursively compare objects (susceptible to call stack limits). + if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { + return false; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (!skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + return false; + } + } + return true; +} + +module.exports = equalObjects; + +},{"../object/keys":58}],35:[function(require,module,exports){ +var baseProperty = require('./baseProperty'); + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +module.exports = getLength; + +},{"./baseProperty":24}],36:[function(require,module,exports){ +var isStrictComparable = require('./isStrictComparable'), + pairs = require('../object/pairs'); + +/** + * Gets the propery names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = pairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; +} + +module.exports = getMatchData; + +},{"../object/pairs":60,"./isStrictComparable":44}],37:[function(require,module,exports){ +var isNative = require('../lang/isNative'); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; +} + +module.exports = getNative; + +},{"../lang/isNative":52}],38:[function(require,module,exports){ +var getLength = require('./getLength'), + isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +module.exports = isArrayLike; + +},{"./getLength":35,"./isLength":42}],39:[function(require,module,exports){ +/** Used to detect unsigned integer values. */ +var reIsUint = /^\d+$/; + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; +} + +module.exports = isIndex; + +},{}],40:[function(require,module,exports){ +var isArrayLike = require('./isArrayLike'), + isIndex = require('./isIndex'), + isObject = require('../lang/isObject'); + +/** + * Checks if the provided arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + var other = object[index]; + return value === value ? (value === other) : (other !== other); + } + return false; +} + +module.exports = isIterateeCall; + +},{"../lang/isObject":53,"./isArrayLike":38,"./isIndex":39}],41:[function(require,module,exports){ +var isArray = require('../lang/isArray'), + toObject = require('./toObject'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + var type = typeof value; + if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { + return true; + } + if (isArray(value)) { + return false; + } + var result = !reIsDeepProp.test(value); + return result || (object != null && value in toObject(object)); +} + +module.exports = isKey; + +},{"../lang/isArray":49,"./toObject":46}],42:[function(require,module,exports){ +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; + +},{}],43:[function(require,module,exports){ +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +module.exports = isObjectLike; + +},{}],44:[function(require,module,exports){ +var isObject = require('../lang/isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; + +},{"../lang/isObject":53}],45:[function(require,module,exports){ +var isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isIndex = require('./isIndex'), + isLength = require('./isLength'), + keysIn = require('../object/keysIn'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; + + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)); + + var index = -1, + result = []; + + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; +} + +module.exports = shimKeys; + +},{"../lang/isArguments":48,"../lang/isArray":49,"../object/keysIn":59,"./isIndex":39,"./isLength":42}],46:[function(require,module,exports){ +var isObject = require('../lang/isObject'); + +/** + * Converts `value` to an object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Object} Returns the object. + */ +function toObject(value) { + return isObject(value) ? value : Object(value); +} + +module.exports = toObject; + +},{"../lang/isObject":53}],47:[function(require,module,exports){ +var baseToString = require('./baseToString'), + isArray = require('../lang/isArray'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `value` to property path array if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array} Returns the property path array. + */ +function toPath(value) { + if (isArray(value)) { + return value; + } + var result = []; + baseToString(value).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +} + +module.exports = toPath; + +},{"../lang/isArray":49,"./baseToString":27}],48:[function(require,module,exports){ +var isArrayLike = require('../internal/isArrayLike'), + isObjectLike = require('../internal/isObjectLike'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Native method references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is classified as an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); +} + +module.exports = isArguments; + +},{"../internal/isArrayLike":38,"../internal/isObjectLike":43}],49:[function(require,module,exports){ +var getNative = require('../internal/getNative'), + isLength = require('../internal/isLength'), + isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var arrayTag = '[object Array]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsArray = getNative(Array, 'isArray'); + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false + */ +var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; +}; + +module.exports = isArray; + +},{"../internal/getNative":37,"../internal/isLength":42,"../internal/isObjectLike":43}],50:[function(require,module,exports){ +var isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('../internal/isArrayLike'), + isFunction = require('./isFunction'), + isObjectLike = require('../internal/isObjectLike'), + isString = require('./isString'), + keys = require('../object/keys'); + +/** + * Checks if `value` is empty. A value is considered empty unless it's an + * `arguments` object, array, string, or jQuery-like collection with a length + * greater than `0` or an object with own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + (isObjectLike(value) && isFunction(value.splice)))) { + return !value.length; + } + return !keys(value).length; +} + +module.exports = isEmpty; + +},{"../internal/isArrayLike":38,"../internal/isObjectLike":43,"../object/keys":58,"./isArguments":48,"./isArray":49,"./isFunction":51,"./isString":54}],51:[function(require,module,exports){ +var isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var funcTag = '[object Function]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 which returns 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; +} + +module.exports = isFunction; + +},{"./isObject":53}],52:[function(require,module,exports){ +var isFunction = require('./isFunction'), + isObjectLike = require('../internal/isObjectLike'); + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var fnToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); +} + +module.exports = isNative; + +},{"../internal/isObjectLike":43,"./isFunction":51}],53:[function(require,module,exports){ +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + +},{}],54:[function(require,module,exports){ +var isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); +} + +module.exports = isString; + +},{"../internal/isObjectLike":43}],55:[function(require,module,exports){ +var isLength = require('../internal/isLength'), + isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dateTag] = typedArrayTags[errorTag] = +typedArrayTags[funcTag] = typedArrayTags[mapTag] = +typedArrayTags[numberTag] = typedArrayTags[objectTag] = +typedArrayTags[regexpTag] = typedArrayTags[setTag] = +typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +function isTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; +} + +module.exports = isTypedArray; + +},{"../internal/isLength":42,"../internal/isObjectLike":43}],56:[function(require,module,exports){ +var assignWith = require('../internal/assignWith'), + baseAssign = require('../internal/baseAssign'), + createAssigner = require('../internal/createAssigner'); + +/** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources overwrite property assignments of previous sources. + * If `customizer` is provided it's invoked to produce the assigned values. + * The `customizer` is bound to `thisArg` and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * **Note:** This method mutates `object` and is based on + * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign). + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using a customizer callback + * var defaults = _.partialRight(_.assign, function(value, other) { + * return _.isUndefined(value) ? other : value; + * }); + * + * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ +var assign = createAssigner(function(object, source, customizer) { + return customizer + ? assignWith(object, source, customizer) + : baseAssign(object, source); +}); + +module.exports = assign; + +},{"../internal/assignWith":9,"../internal/baseAssign":10,"../internal/createAssigner":29}],57:[function(require,module,exports){ +var baseAssign = require('../internal/baseAssign'), + baseCreate = require('../internal/baseCreate'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties, guard) { + var result = baseCreate(prototype); + if (guard && isIterateeCall(prototype, properties, guard)) { + properties = undefined; + } + return properties ? baseAssign(result, properties) : result; +} + +module.exports = create; + +},{"../internal/baseAssign":10,"../internal/baseCreate":13,"../internal/isIterateeCall":40}],58:[function(require,module,exports){ +var getNative = require('../internal/getNative'), + isArrayLike = require('../internal/isArrayLike'), + isObject = require('../lang/isObject'), + shimKeys = require('../internal/shimKeys'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeKeys = getNative(Object, 'keys'); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? undefined : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object != 'function' && isArrayLike(object))) { + return shimKeys(object); + } + return isObject(object) ? nativeKeys(object) : []; +}; + +module.exports = keys; + +},{"../internal/getNative":37,"../internal/isArrayLike":38,"../internal/shimKeys":45,"../lang/isObject":53}],59:[function(require,module,exports){ +var isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isIndex = require('../internal/isIndex'), + isLength = require('../internal/isLength'), + isObject = require('../lang/isObject'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length; + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0; + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor == 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0; + + while (++index < length) { + result[index] = (index + ''); + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = keysIn; + +},{"../internal/isIndex":39,"../internal/isLength":42,"../lang/isArguments":48,"../lang/isArray":49,"../lang/isObject":53}],60:[function(require,module,exports){ +var keys = require('./keys'), + toObject = require('../internal/toObject'); + +/** + * Creates a two dimensional array of the key-value pairs for `object`, + * e.g. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) + */ +function pairs(object) { + object = toObject(object); + + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; + } + return result; +} + +module.exports = pairs; + +},{"../internal/toObject":46,"./keys":58}],61:[function(require,module,exports){ +/** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; + +},{}],62:[function(require,module,exports){ +var baseProperty = require('../internal/baseProperty'), + basePropertyDeep = require('../internal/basePropertyDeep'), + isKey = require('../internal/isKey'); + +/** + * Creates a function that returns the property value at `path` on a + * given object. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + * @example + * + * var objects = [ + * { 'a': { 'b': { 'c': 2 } } }, + * { 'a': { 'b': { 'c': 1 } } } + * ]; + * + * _.map(objects, _.property('a.b.c')); + * // => [2, 1] + * + * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(path) : basePropertyDeep(path); +} + +module.exports = property; + +},{"../internal/baseProperty":24,"../internal/basePropertyDeep":25,"../internal/isKey":41}],63:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, create; + + create = require('lodash/object/create'); + + module.exports = XMLAttribute = (function() { + function XMLAttribute(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing attribute name of element " + parent.name); + } + if (value == null) { + throw new Error("Missing attribute value for attribute " + name + " of element " + parent.name); + } + this.name = this.stringify.attName(name); + this.value = this.stringify.attValue(value); + } + + XMLAttribute.prototype.clone = function() { + return create(XMLAttribute.prototype, this); + }; + + XMLAttribute.prototype.toString = function(options, level) { + return ' ' + this.name + '="' + this.value + '"'; + }; + + return XMLAttribute; + + })(); + +}).call(this); + +},{"lodash/object/create":57}],64:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLBuilder, XMLDeclaration, XMLDocType, XMLElement, XMLStringifier; + + XMLStringifier = require('./XMLStringifier'); + + XMLDeclaration = require('./XMLDeclaration'); + + XMLDocType = require('./XMLDocType'); + + XMLElement = require('./XMLElement'); + + module.exports = XMLBuilder = (function() { + function XMLBuilder(name, options) { + var root, temp; + if (name == null) { + throw new Error("Root element needs a name"); + } + if (options == null) { + options = {}; + } + this.options = options; + this.stringify = new XMLStringifier(options); + temp = new XMLElement(this, 'doc'); + root = temp.element(name); + root.isRoot = true; + root.documentObject = this; + this.rootObject = root; + if (!options.headless) { + root.declaration(options); + if ((options.pubID != null) || (options.sysID != null)) { + root.doctype(options); + } + } + } + + XMLBuilder.prototype.root = function() { + return this.rootObject; + }; + + XMLBuilder.prototype.end = function(options) { + return this.toString(options); + }; + + XMLBuilder.prototype.toString = function(options) { + var indent, newline, offset, pretty, r, ref, ref1, ref2; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + r = ''; + if (this.xmldec != null) { + r += this.xmldec.toString(options); + } + if (this.doctype != null) { + r += this.doctype.toString(options); + } + r += this.rootObject.toString(options); + if (pretty && r.slice(-newline.length) === newline) { + r = r.slice(0, -newline.length); + } + return r; + }; + + return XMLBuilder; + + })(); + +}).call(this); + +},{"./XMLDeclaration":71,"./XMLDocType":72,"./XMLElement":73,"./XMLStringifier":77}],65:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLCData = (function(superClass) { + extend(XMLCData, superClass); + + function XMLCData(parent, text) { + XMLCData.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing CDATA text"); + } + this.text = this.stringify.cdata(text); + } + + XMLCData.prototype.clone = function() { + return create(XMLCData.prototype, this); + }; + + XMLCData.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLCData; + + })(XMLNode); + +}).call(this); + +},{"./XMLNode":74,"lodash/object/create":57}],66:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLComment, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLComment = (function(superClass) { + extend(XMLComment, superClass); + + function XMLComment(parent, text) { + XMLComment.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing comment text"); + } + this.text = this.stringify.comment(text); + } + + XMLComment.prototype.clone = function() { + return create(XMLComment.prototype, this); + }; + + XMLComment.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLComment; + + })(XMLNode); + +}).call(this); + +},{"./XMLNode":74,"lodash/object/create":57}],67:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDAttList, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDAttList = (function() { + function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) { + this.stringify = parent.stringify; + if (elementName == null) { + throw new Error("Missing DTD element name"); + } + if (attributeName == null) { + throw new Error("Missing DTD attribute name"); + } + if (!attributeType) { + throw new Error("Missing DTD attribute type"); + } + if (!defaultValueType) { + throw new Error("Missing DTD attribute default"); + } + if (defaultValueType.indexOf('#') !== 0) { + defaultValueType = '#' + defaultValueType; + } + if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) { + throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT"); + } + if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) { + throw new Error("Default value only applies to #FIXED or #DEFAULT"); + } + this.elementName = this.stringify.eleName(elementName); + this.attributeName = this.stringify.attName(attributeName); + this.attributeType = this.stringify.dtdAttType(attributeType); + this.defaultValue = this.stringify.dtdAttDefault(defaultValue); + this.defaultValueType = defaultValueType; + } + + XMLDTDAttList.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDAttList; + + })(); + +}).call(this); + +},{"lodash/object/create":57}],68:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDElement, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDElement = (function() { + function XMLDTDElement(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing DTD element name"); + } + if (!value) { + value = '(#PCDATA)'; + } + if (Array.isArray(value)) { + value = '(' + value.join(',') + ')'; + } + this.name = this.stringify.eleName(name); + this.value = this.stringify.dtdElementValue(value); + } + + XMLDTDElement.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDElement; + + })(); + +}).call(this); + +},{"lodash/object/create":57}],69:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDEntity, create, isObject; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + module.exports = XMLDTDEntity = (function() { + function XMLDTDEntity(parent, pe, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing entity name"); + } + if (value == null) { + throw new Error("Missing entity value"); + } + this.pe = !!pe; + this.name = this.stringify.eleName(name); + if (!isObject(value)) { + this.value = this.stringify.dtdEntityValue(value); + } else { + if (!value.pubID && !value.sysID) { + throw new Error("Public and/or system identifiers are required for an external entity"); + } + if (value.pubID && !value.sysID) { + throw new Error("System identifier is required for a public external entity"); + } + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + if (value.nData != null) { + this.nData = this.stringify.dtdNData(value.nData); + } + if (this.pe && this.nData) { + throw new Error("Notation declaration is not allowed in a parameter entity"); + } + } + } + + XMLDTDEntity.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDEntity; + + })(); + +}).call(this); + +},{"lodash/lang/isObject":53,"lodash/object/create":57}],70:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDNotation, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDNotation = (function() { + function XMLDTDNotation(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing notation name"); + } + if (!value.pubID && !value.sysID) { + throw new Error("Public or system identifiers are required for an external entity"); + } + this.name = this.stringify.eleName(name); + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + } + + XMLDTDNotation.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDNotation; + + })(); + +}).call(this); + +},{"lodash/object/create":57}],71:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDeclaration, XMLNode, create, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLDeclaration = (function(superClass) { + extend(XMLDeclaration, superClass); + + function XMLDeclaration(parent, version, encoding, standalone) { + var ref; + XMLDeclaration.__super__.constructor.call(this, parent); + if (isObject(version)) { + ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone; + } + if (!version) { + version = '1.0'; + } + this.version = this.stringify.xmlVersion(version); + if (encoding != null) { + this.encoding = this.stringify.xmlEncoding(encoding); + } + if (standalone != null) { + this.standalone = this.stringify.xmlStandalone(standalone); + } + } + + XMLDeclaration.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDeclaration; + + })(XMLNode); + +}).call(this); + +},{"./XMLNode":74,"lodash/lang/isObject":53,"lodash/object/create":57}],72:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLProcessingInstruction, create, isObject; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + XMLCData = require('./XMLCData'); + + XMLComment = require('./XMLComment'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLDocType = (function() { + function XMLDocType(parent, pubID, sysID) { + var ref, ref1; + this.documentObject = parent; + this.stringify = this.documentObject.stringify; + this.children = []; + if (isObject(pubID)) { + ref = pubID, pubID = ref.pubID, sysID = ref.sysID; + } + if (sysID == null) { + ref1 = [pubID, sysID], sysID = ref1[0], pubID = ref1[1]; + } + if (pubID != null) { + this.pubID = this.stringify.dtdPubID(pubID); + } + if (sysID != null) { + this.sysID = this.stringify.dtdSysID(sysID); + } + } + + XMLDocType.prototype.element = function(name, value) { + var child; + child = new XMLDTDElement(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + var child; + child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.entity = function(name, value) { + var child; + child = new XMLDTDEntity(this, false, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.pEntity = function(name, value) { + var child; + child = new XMLDTDEntity(this, true, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.notation = function(name, value) { + var child; + child = new XMLDTDNotation(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.instruction = function(target, value) { + var child; + child = new XMLProcessingInstruction(this, target, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.root = function() { + return this.documentObject.root(); + }; + + XMLDocType.prototype.document = function() { + return this.documentObject; + }; + + XMLDocType.prototype.toString = function(options, level) { + var child, i, indent, len, newline, offset, pretty, r, ref, ref1, ref2, ref3, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ' 0) { + r += ' ['; + if (pretty) { + r += newline; + } + ref3 = this.children; + for (i = 0, len = ref3.length; i < len; i++) { + child = ref3[i]; + r += child.toString(options, level + 1); + } + r += ']'; + } + r += '>'; + if (pretty) { + r += newline; + } + return r; + }; + + XMLDocType.prototype.ele = function(name, value) { + return this.element(name, value); + }; + + XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue); + }; + + XMLDocType.prototype.ent = function(name, value) { + return this.entity(name, value); + }; + + XMLDocType.prototype.pent = function(name, value) { + return this.pEntity(name, value); + }; + + XMLDocType.prototype.not = function(name, value) { + return this.notation(name, value); + }; + + XMLDocType.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLDocType.prototype.com = function(value) { + return this.comment(value); + }; + + XMLDocType.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLDocType.prototype.up = function() { + return this.root(); + }; + + XMLDocType.prototype.doc = function() { + return this.document(); + }; + + return XMLDocType; + + })(); + +}).call(this); + +},{"./XMLCData":65,"./XMLComment":66,"./XMLDTDAttList":67,"./XMLDTDElement":68,"./XMLDTDEntity":69,"./XMLDTDNotation":70,"./XMLProcessingInstruction":75,"lodash/lang/isObject":53,"lodash/object/create":57}],73:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, create, every, isFunction, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + isFunction = require('lodash/lang/isFunction'); + + every = require('lodash/collection/every'); + + XMLNode = require('./XMLNode'); + + XMLAttribute = require('./XMLAttribute'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLElement = (function(superClass) { + extend(XMLElement, superClass); + + function XMLElement(parent, name, attributes) { + XMLElement.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing element name"); + } + this.name = this.stringify.eleName(name); + this.children = []; + this.instructions = []; + this.attributes = {}; + if (attributes != null) { + this.attribute(attributes); + } + } + + XMLElement.prototype.clone = function() { + var att, attName, clonedSelf, i, len, pi, ref, ref1; + clonedSelf = create(XMLElement.prototype, this); + if (clonedSelf.isRoot) { + clonedSelf.documentObject = null; + } + clonedSelf.attributes = {}; + ref = this.attributes; + for (attName in ref) { + if (!hasProp.call(ref, attName)) continue; + att = ref[attName]; + clonedSelf.attributes[attName] = att.clone(); + } + clonedSelf.instructions = []; + ref1 = this.instructions; + for (i = 0, len = ref1.length; i < len; i++) { + pi = ref1[i]; + clonedSelf.instructions.push(pi.clone()); + } + clonedSelf.children = []; + this.children.forEach(function(child) { + var clonedChild; + clonedChild = child.clone(); + clonedChild.parent = clonedSelf; + return clonedSelf.children.push(clonedChild); + }); + return clonedSelf; + }; + + XMLElement.prototype.attribute = function(name, value) { + var attName, attValue; + if (name != null) { + name = name.valueOf(); + } + if (isObject(name)) { + for (attName in name) { + if (!hasProp.call(name, attName)) continue; + attValue = name[attName]; + this.attribute(attName, attValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + if (!this.options.skipNullAttributes || (value != null)) { + this.attributes[name] = new XMLAttribute(this, name, value); + } + } + return this; + }; + + XMLElement.prototype.removeAttribute = function(name) { + var attName, i, len; + if (name == null) { + throw new Error("Missing attribute name"); + } + name = name.valueOf(); + if (Array.isArray(name)) { + for (i = 0, len = name.length; i < len; i++) { + attName = name[i]; + delete this.attributes[attName]; + } + } else { + delete this.attributes[name]; + } + return this; + }; + + XMLElement.prototype.instruction = function(target, value) { + var i, insTarget, insValue, instruction, len; + if (target != null) { + target = target.valueOf(); + } + if (value != null) { + value = value.valueOf(); + } + if (Array.isArray(target)) { + for (i = 0, len = target.length; i < len; i++) { + insTarget = target[i]; + this.instruction(insTarget); + } + } else if (isObject(target)) { + for (insTarget in target) { + if (!hasProp.call(target, insTarget)) continue; + insValue = target[insTarget]; + this.instruction(insTarget, insValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + instruction = new XMLProcessingInstruction(this, target, value); + this.instructions.push(instruction); + } + return this; + }; + + XMLElement.prototype.toString = function(options, level) { + var att, child, i, indent, instruction, j, len, len1, name, newline, offset, pretty, r, ref, ref1, ref2, ref3, ref4, ref5, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + ref3 = this.instructions; + for (i = 0, len = ref3.length; i < len; i++) { + instruction = ref3[i]; + r += instruction.toString(options, level); + } + if (pretty) { + r += space; + } + r += '<' + this.name; + ref4 = this.attributes; + for (name in ref4) { + if (!hasProp.call(ref4, name)) continue; + att = ref4[name]; + r += att.toString(options); + } + if (this.children.length === 0 || every(this.children, function(e) { + return e.value === ''; + })) { + r += '/>'; + if (pretty) { + r += newline; + } + } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) { + r += '>'; + r += this.children[0].value; + r += ''; + r += newline; + } else { + r += '>'; + if (pretty) { + r += newline; + } + ref5 = this.children; + for (j = 0, len1 = ref5.length; j < len1; j++) { + child = ref5[j]; + r += child.toString(options, level + 1); + } + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + } + return r; + }; + + XMLElement.prototype.att = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLElement.prototype.a = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.i = function(target, value) { + return this.instruction(target, value); + }; + + return XMLElement; + + })(XMLNode); + +}).call(this); + +},{"./XMLAttribute":63,"./XMLNode":74,"./XMLProcessingInstruction":75,"lodash/collection/every":5,"lodash/lang/isFunction":51,"lodash/lang/isObject":53,"lodash/object/create":57}],74:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLElement, XMLNode, XMLRaw, XMLText, isEmpty, isFunction, isObject, + hasProp = {}.hasOwnProperty; + + isObject = require('lodash/lang/isObject'); + + isFunction = require('lodash/lang/isFunction'); + + isEmpty = require('lodash/lang/isEmpty'); + + XMLElement = null; + + XMLCData = null; + + XMLComment = null; + + XMLDeclaration = null; + + XMLDocType = null; + + XMLRaw = null; + + XMLText = null; + + module.exports = XMLNode = (function() { + function XMLNode(parent) { + this.parent = parent; + this.options = this.parent.options; + this.stringify = this.parent.stringify; + if (XMLElement === null) { + XMLElement = require('./XMLElement'); + XMLCData = require('./XMLCData'); + XMLComment = require('./XMLComment'); + XMLDeclaration = require('./XMLDeclaration'); + XMLDocType = require('./XMLDocType'); + XMLRaw = require('./XMLRaw'); + XMLText = require('./XMLText'); + } + } + + XMLNode.prototype.element = function(name, attributes, text) { + var childNode, item, j, k, key, lastChild, len, len1, ref, val; + lastChild = null; + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + if (name != null) { + name = name.valueOf(); + } + if (Array.isArray(name)) { + for (j = 0, len = name.length; j < len; j++) { + item = name[j]; + lastChild = this.element(item); + } + } else if (isFunction(name)) { + lastChild = this.element(name.apply()); + } else if (isObject(name)) { + for (key in name) { + if (!hasProp.call(name, key)) continue; + val = name[key]; + if (isFunction(val)) { + val = val.apply(); + } + if ((isObject(val)) && (isEmpty(val))) { + val = null; + } + if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) { + lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val); + } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) { + lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val); + } else if (Array.isArray(val)) { + for (k = 0, len1 = val.length; k < len1; k++) { + item = val[k]; + childNode = {}; + childNode[key] = item; + lastChild = this.element(childNode); + } + } else if (isObject(val)) { + lastChild = this.element(key); + lastChild.element(val); + } else { + lastChild = this.element(key, val); + } + } + } else { + if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) { + lastChild = this.text(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) { + lastChild = this.cdata(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) { + lastChild = this.comment(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) { + lastChild = this.raw(text); + } else { + lastChild = this.node(name, attributes, text); + } + } + if (lastChild == null) { + throw new Error("Could not create any elements with: " + name); + } + return lastChild; + }; + + XMLNode.prototype.insertBefore = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.insertAfter = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i + 1); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.remove = function() { + var i, ref; + if (this.isRoot) { + throw new Error("Cannot remove the root element"); + } + i = this.parent.children.indexOf(this); + [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref = [])), ref; + return this.parent; + }; + + XMLNode.prototype.node = function(name, attributes, text) { + var child, ref; + if (name != null) { + name = name.valueOf(); + } + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + child = new XMLElement(this, name, attributes); + if (text != null) { + child.text(text); + } + this.children.push(child); + return child; + }; + + XMLNode.prototype.text = function(value) { + var child; + child = new XMLText(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.raw = function(value) { + var child; + child = new XMLRaw(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.declaration = function(version, encoding, standalone) { + var doc, xmldec; + doc = this.document(); + xmldec = new XMLDeclaration(doc, version, encoding, standalone); + doc.xmldec = xmldec; + return doc.root(); + }; + + XMLNode.prototype.doctype = function(pubID, sysID) { + var doc, doctype; + doc = this.document(); + doctype = new XMLDocType(doc, pubID, sysID); + doc.doctype = doctype; + return doctype; + }; + + XMLNode.prototype.up = function() { + if (this.isRoot) { + throw new Error("The root node has no parent. Use doc() if you need to get the document object."); + } + return this.parent; + }; + + XMLNode.prototype.root = function() { + var child; + if (this.isRoot) { + return this; + } + child = this.parent; + while (!child.isRoot) { + child = child.parent; + } + return child; + }; + + XMLNode.prototype.document = function() { + return this.root().documentObject; + }; + + XMLNode.prototype.end = function(options) { + return this.document().toString(options); + }; + + XMLNode.prototype.prev = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i < 1) { + throw new Error("Already at the first node"); + } + return this.parent.children[i - 1]; + }; + + XMLNode.prototype.next = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i === -1 || i === this.parent.children.length - 1) { + throw new Error("Already at the last node"); + } + return this.parent.children[i + 1]; + }; + + XMLNode.prototype.importXMLBuilder = function(xmlbuilder) { + var clonedRoot; + clonedRoot = xmlbuilder.root().clone(); + clonedRoot.parent = this; + clonedRoot.isRoot = false; + this.children.push(clonedRoot); + return this; + }; + + XMLNode.prototype.ele = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.nod = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.txt = function(value) { + return this.text(value); + }; + + XMLNode.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.com = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.doc = function() { + return this.document(); + }; + + XMLNode.prototype.dec = function(version, encoding, standalone) { + return this.declaration(version, encoding, standalone); + }; + + XMLNode.prototype.dtd = function(pubID, sysID) { + return this.doctype(pubID, sysID); + }; + + XMLNode.prototype.e = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.n = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.t = function(value) { + return this.text(value); + }; + + XMLNode.prototype.d = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.c = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.r = function(value) { + return this.raw(value); + }; + + XMLNode.prototype.u = function() { + return this.up(); + }; + + return XMLNode; + + })(); + +}).call(this); + +},{"./XMLCData":65,"./XMLComment":66,"./XMLDeclaration":71,"./XMLDocType":72,"./XMLElement":73,"./XMLRaw":76,"./XMLText":78,"lodash/lang/isEmpty":50,"lodash/lang/isFunction":51,"lodash/lang/isObject":53}],75:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLProcessingInstruction, create; + + create = require('lodash/object/create'); + + module.exports = XMLProcessingInstruction = (function() { + function XMLProcessingInstruction(parent, target, value) { + this.stringify = parent.stringify; + if (target == null) { + throw new Error("Missing instruction target"); + } + this.target = this.stringify.insTarget(target); + if (value) { + this.value = this.stringify.insValue(value); + } + } + + XMLProcessingInstruction.prototype.clone = function() { + return create(XMLProcessingInstruction.prototype, this); + }; + + XMLProcessingInstruction.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLProcessingInstruction; + + })(); + +}).call(this); + +},{"lodash/object/create":57}],76:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLNode, XMLRaw, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLRaw = (function(superClass) { + extend(XMLRaw, superClass); + + function XMLRaw(parent, text) { + XMLRaw.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing raw text"); + } + this.value = this.stringify.raw(text); + } + + XMLRaw.prototype.clone = function() { + return create(XMLRaw.prototype, this); + }; + + XMLRaw.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += this.value; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLRaw; + + })(XMLNode); + +}).call(this); + +},{"./XMLNode":74,"lodash/object/create":57}],77:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLStringifier, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + hasProp = {}.hasOwnProperty; + + module.exports = XMLStringifier = (function() { + function XMLStringifier(options) { + this.assertLegalChar = bind(this.assertLegalChar, this); + var key, ref, value; + this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0; + ref = (options != null ? options.stringify : void 0) || {}; + for (key in ref) { + if (!hasProp.call(ref, key)) continue; + value = ref[key]; + this[key] = value; + } + } + + XMLStringifier.prototype.eleName = function(val) { + val = '' + val || ''; + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.eleText = function(val) { + val = '' + val || ''; + return this.assertLegalChar(this.elEscape(val)); + }; + + XMLStringifier.prototype.cdata = function(val) { + val = '' + val || ''; + if (val.match(/]]>/)) { + throw new Error("Invalid CDATA text: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.comment = function(val) { + val = '' + val || ''; + if (val.match(/--/)) { + throw new Error("Comment text cannot contain double-hypen: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.raw = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attName = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attValue = function(val) { + val = '' + val || ''; + return this.attEscape(val); + }; + + XMLStringifier.prototype.insTarget = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.insValue = function(val) { + val = '' + val || ''; + if (val.match(/\?>/)) { + throw new Error("Invalid processing instruction value: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlVersion = function(val) { + val = '' + val || ''; + if (!val.match(/1\.[0-9]+/)) { + throw new Error("Invalid version number: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlEncoding = function(val) { + val = '' + val || ''; + if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-]|-)*$/)) { + throw new Error("Invalid encoding: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlStandalone = function(val) { + if (val) { + return "yes"; + } else { + return "no"; + } + }; + + XMLStringifier.prototype.dtdPubID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdSysID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdElementValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttType = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttDefault = function(val) { + if (val != null) { + return '' + val || ''; + } else { + return val; + } + }; + + XMLStringifier.prototype.dtdEntityValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdNData = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.convertAttKey = '@'; + + XMLStringifier.prototype.convertPIKey = '?'; + + XMLStringifier.prototype.convertTextKey = '#text'; + + XMLStringifier.prototype.convertCDataKey = '#cdata'; + + XMLStringifier.prototype.convertCommentKey = '#comment'; + + XMLStringifier.prototype.convertRawKey = '#raw'; + + XMLStringifier.prototype.assertLegalChar = function(str) { + var chars, chr; + if (this.allowSurrogateChars) { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/; + } else { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/; + } + chr = str.match(chars); + if (chr) { + throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index); + } + return str; + }; + + XMLStringifier.prototype.elEscape = function(str) { + return str.replace(/&/g, '&').replace(//g, '>').replace(/\r/g, ' '); + }; + + XMLStringifier.prototype.attEscape = function(str) { + return str.replace(/&/g, '&').replace(/, + * and raw CDATA nodes. + * + * @param {Element} node + * @returns {Boolean} + * @api private + */ + +function shouldIgnoreNode (node) { + return node.nodeType === 3 // text + || node.nodeType === 8 // comment + || node.nodeType === 4; // cdata +} + + +/** + * Parses a Plist XML string. Returns an Object. + * + * @param {String} xml - the XML String to decode + * @returns {Mixed} the decoded value from the Plist XML + * @api public + */ + +function parse (xml) { + var doc = new DOMParser().parseFromString(xml); + if (doc.documentElement.nodeName !== 'plist') { + throw new Error('malformed document. First element should be '); + } + var plist = parsePlistXML(doc.documentElement); + + // the root node gets interpreted as an Array, + // so pull out the inner data first + if (plist.length == 1) plist = plist[0]; + + return plist; +} + +/** + * Parses a Plist XML string. Returns an Object. Takes a `callback` function. + * + * @param {String} xml - the XML String to decode + * @param {Function} callback - callback function + * @returns {Mixed} the decoded value from the Plist XML + * @api public + * @deprecated not actually async. use parse() instead + */ + +function parseString (xml, callback) { + var doc, error, plist; + try { + doc = new DOMParser().parseFromString(xml); + plist = parsePlistXML(doc.documentElement); + } catch(e) { + error = e; + } + callback(error, plist); +} + +/** + * Parses a Plist XML string. Returns an Object. + * + * @param {String} xml - the XML String to decode + * @param {Function} callback - callback function + * @returns {Mixed} the decoded value from the Plist XML + * @api public + * @deprecated use parse() instead + */ + +function parseStringSync (xml) { + var doc = new DOMParser().parseFromString(xml); + var plist; + if (doc.documentElement.nodeName !== 'plist') { + throw new Error('malformed document. First element should be '); + } + plist = parsePlistXML(doc.documentElement); + + // if the plist is an array with 1 element, pull it out of the array + if (plist.length == 1) { + plist = plist[0]; + } + return plist; +} + +/** + * Convert an XML based plist document into a JSON representation. + * + * @param {Object} xml_node - current XML node in the plist + * @returns {Mixed} built up JSON object + * @api private + */ + +function parsePlistXML (node) { + var i, new_obj, key, val, new_arr, res, d; + + if (!node) + return null; + + if (node.nodeName === 'plist') { + new_arr = []; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + new_arr.push( parsePlistXML(node.childNodes[i])); + } + } + return new_arr; + + } else if (node.nodeName === 'dict') { + new_obj = {}; + key = null; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + if (key === null) { + key = parsePlistXML(node.childNodes[i]); + } else { + new_obj[key] = parsePlistXML(node.childNodes[i]); + key = null; + } + } + } + return new_obj; + + } else if (node.nodeName === 'array') { + new_arr = []; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + res = parsePlistXML(node.childNodes[i]); + if (null != res) new_arr.push(res); + } + } + return new_arr; + + } else if (node.nodeName === '#text') { + // TODO: what should we do with text types? (CDATA sections) + + } else if (node.nodeName === 'key') { + return node.childNodes[0].nodeValue; + + } else if (node.nodeName === 'string') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + res += node.childNodes[d].nodeValue; + } + return res; + + } else if (node.nodeName === 'integer') { + // parse as base 10 integer + return parseInt(node.childNodes[0].nodeValue, 10); + + } else if (node.nodeName === 'real') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + if (node.childNodes[d].nodeType === 3) { + res += node.childNodes[d].nodeValue; + } + } + return parseFloat(res); + + } else if (node.nodeName === 'data') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + if (node.childNodes[d].nodeType === 3) { + res += node.childNodes[d].nodeValue.replace(/\s+/g, ''); + } + } + + // decode base64 data to a Buffer instance + return new Buffer(res, 'base64'); + + } else if (node.nodeName === 'date') { + return new Date(node.childNodes[0].nodeValue); + + } else if (node.nodeName === 'true') { + return true; + + } else if (node.nodeName === 'false') { + return false; + } +} + +}).call(this,require("buffer").Buffer) +},{"buffer":3,"util-deprecate":6,"xmldom":7}],2:[function(require,module,exports){ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS || + code === PLUS_URL_SAFE) + return 62 // '+' + if (code === SLASH || + code === SLASH_URL_SAFE) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],3:[function(require,module,exports){ +(function (global){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var isArray = require('is-array') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 +Buffer.poolSize = 8192 // not used by this implementation + +var rootParent = {} + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property + * on objects. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined + ? global.TYPED_ARRAY_SUPPORT + : typedArraySupport() + +function typedArraySupport () { + function Bar () {} + try { + var arr = new Uint8Array(1) + arr.foo = function () { return 42 } + arr.constructor = Bar + return arr.foo() === 42 && // typed array instances can be augmented + arr.constructor === Bar && // constructor can be set + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +} + +function kMaxLength () { + return Buffer.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff +} + +/** + * Class: Buffer + * ============= + * + * The Buffer constructor returns instances of `Uint8Array` that are augmented + * with function properties for all the node `Buffer` API functions. We use + * `Uint8Array` so that square bracket notation works as expected -- it returns + * a single octet. + * + * By augmenting the instances, we can avoid modifying the `Uint8Array` + * prototype. + */ +function Buffer (arg) { + if (!(this instanceof Buffer)) { + // Avoid going through an ArgumentsAdaptorTrampoline in the common case. + if (arguments.length > 1) return new Buffer(arg, arguments[1]) + return new Buffer(arg) + } + + this.length = 0 + this.parent = undefined + + // Common case. + if (typeof arg === 'number') { + return fromNumber(this, arg) + } + + // Slightly less common case. + if (typeof arg === 'string') { + return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8') + } + + // Unusual. + return fromObject(this, arg) +} + +function fromNumber (that, length) { + that = allocate(that, length < 0 ? 0 : checked(length) | 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < length; i++) { + that[i] = 0 + } + } + return that +} + +function fromString (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8' + + // Assumption: byteLength() return value is always < kMaxLength. + var length = byteLength(string, encoding) | 0 + that = allocate(that, length) + + that.write(string, encoding) + return that +} + +function fromObject (that, object) { + if (Buffer.isBuffer(object)) return fromBuffer(that, object) + + if (isArray(object)) return fromArray(that, object) + + if (object == null) { + throw new TypeError('must start with number, buffer, array or string') + } + + if (typeof ArrayBuffer !== 'undefined') { + if (object.buffer instanceof ArrayBuffer) { + return fromTypedArray(that, object) + } + if (object instanceof ArrayBuffer) { + return fromArrayBuffer(that, object) + } + } + + if (object.length) return fromArrayLike(that, object) + + return fromJsonObject(that, object) +} + +function fromBuffer (that, buffer) { + var length = checked(buffer.length) | 0 + that = allocate(that, length) + buffer.copy(that, 0, 0, length) + return that +} + +function fromArray (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +// Duplicate of fromArray() to keep fromArray() monomorphic. +function fromTypedArray (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + // Truncating the elements is probably not what people expect from typed + // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior + // of the old Buffer constructor. + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +function fromArrayBuffer (that, array) { + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + array.byteLength + that = Buffer._augment(new Uint8Array(array)) + } else { + // Fallback: Return an object instance of the Buffer class + that = fromTypedArray(that, new Uint8Array(array)) + } + return that +} + +function fromArrayLike (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object. +// Returns a zero-length buffer for inputs that don't conform to the spec. +function fromJsonObject (that, object) { + var array + var length = 0 + + if (object.type === 'Buffer' && isArray(object.data)) { + array = object.data + length = checked(array.length) | 0 + } + that = allocate(that, length) + + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype + Buffer.__proto__ = Uint8Array +} + +function allocate (that, length) { + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = Buffer._augment(new Uint8Array(length)) + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + that.length = length + that._isBuffer = true + } + + var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1 + if (fromPool) that.parent = rootParent + + return that +} + +function checked (length) { + // Note: cannot use `length < kMaxLength` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength().toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (subject, encoding) { + if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) + + var buf = new Buffer(subject, encoding) + delete buf.parent + return buf +} + +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + var i = 0 + var len = Math.min(x, y) + while (i < len) { + if (a[i] !== b[i]) break + + ++i + } + + if (i !== len) { + x = a[i] + y = b[i] + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'raw': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') + + if (list.length === 0) { + return new Buffer(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; i++) { + length += list[i].length + } + } + + var buf = new Buffer(length) + var pos = 0 + for (i = 0; i < list.length; i++) { + var item = list[i] + item.copy(buf, pos) + pos += item.length + } + return buf +} + +function byteLength (string, encoding) { + if (typeof string !== 'string') string = '' + string + + var len = string.length + if (len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'binary': + // Deprecated + case 'raw': + case 'raws': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) return utf8ToBytes(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +// pre-set for values that may exist in the future +Buffer.prototype.length = undefined +Buffer.prototype.parent = undefined + +function slowToString (encoding, start, end) { + var loweredCase = false + + start = start | 0 + end = end === undefined || end === Infinity ? this.length : end | 0 + + if (!encoding) encoding = 'utf8' + if (start < 0) start = 0 + if (end > this.length) end = this.length + if (end <= start) return '' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'binary': + return binarySlice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toString = function toString () { + var length = this.length | 0 + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} + +Buffer.prototype.compare = function compare (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return 0 + return Buffer.compare(this, b) +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset) { + if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff + else if (byteOffset < -0x80000000) byteOffset = -0x80000000 + byteOffset >>= 0 + + if (this.length === 0) return -1 + if (byteOffset >= this.length) return -1 + + // Negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) + + if (typeof val === 'string') { + if (val.length === 0) return -1 // special case: looking for empty string always fails + return String.prototype.indexOf.call(this, val, byteOffset) + } + if (Buffer.isBuffer(val)) { + return arrayIndexOf(this, val, byteOffset) + } + if (typeof val === 'number') { + if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { + return Uint8Array.prototype.indexOf.call(this, val, byteOffset) + } + return arrayIndexOf(this, [ val ], byteOffset) + } + + function arrayIndexOf (arr, val, byteOffset) { + var foundIndex = -1 + for (var i = 0; byteOffset + i < arr.length; i++) { + if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex + } else { + foundIndex = -1 + } + } + return -1 + } + + throw new TypeError('val must be string, number or Buffer') +} + +// `get` is deprecated +Buffer.prototype.get = function get (offset) { + console.log('.get() is deprecated. Access using array indexes instead.') + return this.readUInt8(offset) +} + +// `set` is deprecated +Buffer.prototype.set = function set (v, offset) { + console.log('.set() is deprecated. Access using array indexes instead.') + return this.writeUInt8(v, offset) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new Error('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; i++) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) throw new Error('Invalid hex string') + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function binaryWrite (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0 + if (isFinite(length)) { + length = length | 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + var swap = encoding + encoding = offset + offset = length | 0 + length = swap + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'binary': + return binaryWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function binarySlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; i++) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = Buffer._augment(this.subarray(start, end)) + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; i++) { + newBuf[i] = this[i + start] + } + } + + if (newBuf.length) newBuf.parent = this.parent || this + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = (value & 0xff) + return offset + 1 +} + +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') + if (offset < 0) throw new RangeError('index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + var i + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; i--) { + target[i + targetStart] = this[i + start] + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; i++) { + target[i + targetStart] = this[i + start] + } + } else { + target._set(this.subarray(start, start + len), targetStart) + } + + return len +} + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill (value, start, end) { + if (!value) value = 0 + if (!start) start = 0 + if (!end) end = this.length + + if (end < start) throw new RangeError('end < start') + + // Fill 0 bytes; we're done + if (end === start) return + if (this.length === 0) return + + if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') + if (end < 0 || end > this.length) throw new RangeError('end out of bounds') + + var i + if (typeof value === 'number') { + for (i = start; i < end; i++) { + this[i] = value + } + } else { + var bytes = utf8ToBytes(value.toString()) + var len = bytes.length + for (i = start; i < end; i++) { + this[i] = bytes[i % len] + } + } + + return this +} + +/** + * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. + * Added in Node 0.12. Only available in browsers that support ArrayBuffer. + */ +Buffer.prototype.toArrayBuffer = function toArrayBuffer () { + if (typeof Uint8Array !== 'undefined') { + if (Buffer.TYPED_ARRAY_SUPPORT) { + return (new Buffer(this)).buffer + } else { + var buf = new Uint8Array(this.length) + for (var i = 0, len = buf.length; i < len; i += 1) { + buf[i] = this[i] + } + return buf.buffer + } + } else { + throw new TypeError('Buffer.toArrayBuffer not supported in this browser') + } +} + +// HELPER FUNCTIONS +// ================ + +var BP = Buffer.prototype + +/** + * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods + */ +Buffer._augment = function _augment (arr) { + arr.constructor = Buffer + arr._isBuffer = true + + // save reference to original Uint8Array set method before overwriting + arr._set = arr.set + + // deprecated + arr.get = BP.get + arr.set = BP.set + + arr.write = BP.write + arr.toString = BP.toString + arr.toLocaleString = BP.toString + arr.toJSON = BP.toJSON + arr.equals = BP.equals + arr.compare = BP.compare + arr.indexOf = BP.indexOf + arr.copy = BP.copy + arr.slice = BP.slice + arr.readUIntLE = BP.readUIntLE + arr.readUIntBE = BP.readUIntBE + arr.readUInt8 = BP.readUInt8 + arr.readUInt16LE = BP.readUInt16LE + arr.readUInt16BE = BP.readUInt16BE + arr.readUInt32LE = BP.readUInt32LE + arr.readUInt32BE = BP.readUInt32BE + arr.readIntLE = BP.readIntLE + arr.readIntBE = BP.readIntBE + arr.readInt8 = BP.readInt8 + arr.readInt16LE = BP.readInt16LE + arr.readInt16BE = BP.readInt16BE + arr.readInt32LE = BP.readInt32LE + arr.readInt32BE = BP.readInt32BE + arr.readFloatLE = BP.readFloatLE + arr.readFloatBE = BP.readFloatBE + arr.readDoubleLE = BP.readDoubleLE + arr.readDoubleBE = BP.readDoubleBE + arr.writeUInt8 = BP.writeUInt8 + arr.writeUIntLE = BP.writeUIntLE + arr.writeUIntBE = BP.writeUIntBE + arr.writeUInt16LE = BP.writeUInt16LE + arr.writeUInt16BE = BP.writeUInt16BE + arr.writeUInt32LE = BP.writeUInt32LE + arr.writeUInt32BE = BP.writeUInt32BE + arr.writeIntLE = BP.writeIntLE + arr.writeIntBE = BP.writeIntBE + arr.writeInt8 = BP.writeInt8 + arr.writeInt16LE = BP.writeInt16LE + arr.writeInt16BE = BP.writeInt16BE + arr.writeInt32LE = BP.writeInt32LE + arr.writeInt32BE = BP.writeInt32BE + arr.writeFloatLE = BP.writeFloatLE + arr.writeFloatBE = BP.writeFloatBE + arr.writeDoubleLE = BP.writeDoubleLE + arr.writeDoubleBE = BP.writeDoubleBE + arr.fill = BP.fill + arr.inspect = BP.inspect + arr.toArrayBuffer = BP.toArrayBuffer + + return arr +} + +var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; i++) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; i++) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; i++) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"base64-js":2,"ieee754":4,"is-array":5}],4:[function(require,module,exports){ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + +},{}],5:[function(require,module,exports){ + +/** + * isArray + */ + +var isArray = Array.isArray; + +/** + * toString + */ + +var str = Object.prototype.toString; + +/** + * Whether or not the given `val` + * is an array. + * + * example: + * + * isArray([]); + * // > true + * isArray(arguments); + * // > false + * isArray(''); + * // > false + * + * @param {mixed} val + * @return {bool} + */ + +module.exports = isArray || function (val) { + return !! val && '[object Array]' == str.call(val); +}; + +},{}],6:[function(require,module,exports){ +(function (global){ + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],7:[function(require,module,exports){ +function DOMParser(options){ + this.options = options ||{locator:{}}; + +} +DOMParser.prototype.parseFromString = function(source,mimeType){ + var options = this.options; + var sax = new XMLReader(); + var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler + var errorHandler = options.errorHandler; + var locator = options.locator; + var defaultNSMap = options.xmlns||{}; + var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"} + if(locator){ + domBuilder.setDocumentLocator(locator) + } + + sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); + sax.domBuilder = options.domBuilder || domBuilder; + if(/\/x?html?$/.test(mimeType)){ + entityMap.nbsp = '\xa0'; + entityMap.copy = '\xa9'; + defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; + } + if(source){ + sax.parse(source,defaultNSMap,entityMap); + }else{ + sax.errorHandler.error("invalid document source"); + } + return domBuilder.document; +} +function buildErrorHandler(errorImpl,domBuilder,locator){ + if(!errorImpl){ + if(domBuilder instanceof DOMHandler){ + return domBuilder; + } + errorImpl = domBuilder ; + } + var errorHandler = {} + var isCallback = errorImpl instanceof Function; + locator = locator||{} + function build(key){ + var fn = errorImpl[key]; + if(!fn){ + if(isCallback){ + fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; + }else{ + var i=arguments.length; + while(--i){ + if(fn = errorImpl[arguments[i]]){ + break; + } + } + } + } + errorHandler[key] = fn && function(msg){ + fn(msg+_locator(locator)); + }||function(){}; + } + build('warning','warn'); + build('error','warn','warning'); + build('fatalError','warn','warning','error'); + return errorHandler; +} +/** + * +ContentHandler+ErrorHandler + * +LexicalHandler+EntityResolver2 + * -DeclHandler-DTDHandler + * + * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler + * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 + * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html + */ +function DOMHandler() { + this.cdata = false; +} +function position(locator,node){ + node.lineNumber = locator.lineNumber; + node.columnNumber = locator.columnNumber; +} +/** + * @see org.xml.sax.ContentHandler#startDocument + * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html + */ +DOMHandler.prototype = { + startDocument : function() { + this.document = new DOMImplementation().createDocument(null, null, null); + if (this.locator) { + this.document.documentURI = this.locator.systemId; + } + }, + startElement:function(namespaceURI, localName, qName, attrs) { + var doc = this.document; + var el = doc.createElementNS(namespaceURI, qName||localName); + var len = attrs.length; + appendElement(this, el); + this.currentElement = el; + + this.locator && position(this.locator,el) + for (var i = 0 ; i < len; i++) { + var namespaceURI = attrs.getURI(i); + var value = attrs.getValue(i); + var qName = attrs.getQName(i); + var attr = doc.createAttributeNS(namespaceURI, qName); + if( attr.getOffset){ + position(attr.getOffset(1),attr) + } + attr.value = attr.nodeValue = value; + el.setAttributeNode(attr) + } + }, + endElement:function(namespaceURI, localName, qName) { + var current = this.currentElement + var tagName = current.tagName; + this.currentElement = current.parentNode; + }, + startPrefixMapping:function(prefix, uri) { + }, + endPrefixMapping:function(prefix) { + }, + processingInstruction:function(target, data) { + var ins = this.document.createProcessingInstruction(target, data); + this.locator && position(this.locator,ins) + appendElement(this, ins); + }, + ignorableWhitespace:function(ch, start, length) { + }, + characters:function(chars, start, length) { + chars = _toString.apply(this,arguments) + //console.log(chars) + if(this.currentElement && chars){ + if (this.cdata) { + var charNode = this.document.createCDATASection(chars); + this.currentElement.appendChild(charNode); + } else { + var charNode = this.document.createTextNode(chars); + this.currentElement.appendChild(charNode); + } + this.locator && position(this.locator,charNode) + } + }, + skippedEntity:function(name) { + }, + endDocument:function() { + this.document.normalize(); + }, + setDocumentLocator:function (locator) { + if(this.locator = locator){// && !('lineNumber' in locator)){ + locator.lineNumber = 0; + } + }, + //LexicalHandler + comment:function(chars, start, length) { + chars = _toString.apply(this,arguments) + var comm = this.document.createComment(chars); + this.locator && position(this.locator,comm) + appendElement(this, comm); + }, + + startCDATA:function() { + //used in characters() methods + this.cdata = true; + }, + endCDATA:function() { + this.cdata = false; + }, + + startDTD:function(name, publicId, systemId) { + var impl = this.document.implementation; + if (impl && impl.createDocumentType) { + var dt = impl.createDocumentType(name, publicId, systemId); + this.locator && position(this.locator,dt) + appendElement(this, dt); + } + }, + /** + * @see org.xml.sax.ErrorHandler + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + warning:function(error) { + console.warn(error,_locator(this.locator)); + }, + error:function(error) { + console.error(error,_locator(this.locator)); + }, + fatalError:function(error) { + console.error(error,_locator(this.locator)); + throw error; + } +} +function _locator(l){ + if(l){ + return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' + } +} +function _toString(chars,start,length){ + if(typeof chars == 'string'){ + return chars.substr(start,length) + }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") + if(chars.length >= start+length || start){ + return new java.lang.String(chars,start,length)+''; + } + return chars; + } +} + +/* + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html + * used method of org.xml.sax.ext.LexicalHandler: + * #comment(chars, start, length) + * #startCDATA() + * #endCDATA() + * #startDTD(name, publicId, systemId) + * + * + * IGNORED method of org.xml.sax.ext.LexicalHandler: + * #endDTD() + * #startEntity(name) + * #endEntity(name) + * + * + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html + * IGNORED method of org.xml.sax.ext.DeclHandler + * #attributeDecl(eName, aName, type, mode, value) + * #elementDecl(name, model) + * #externalEntityDecl(name, publicId, systemId) + * #internalEntityDecl(name, value) + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html + * IGNORED method of org.xml.sax.EntityResolver2 + * #resolveEntity(String name,String publicId,String baseURI,String systemId) + * #resolveEntity(publicId, systemId) + * #getExternalSubset(name, baseURI) + * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html + * IGNORED method of org.xml.sax.DTDHandler + * #notationDecl(name, publicId, systemId) {}; + * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; + */ +"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ + DOMHandler.prototype[key] = function(){return null} +}) + +/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ +function appendElement (hander,node) { + if (!hander.currentElement) { + hander.document.appendChild(node); + } else { + hander.currentElement.appendChild(node); + } +}//appendChild and setAttributeNS are preformance key + +if(typeof require == 'function'){ + var XMLReader = require('./sax').XMLReader; + var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation; + exports.XMLSerializer = require('./dom').XMLSerializer ; + exports.DOMParser = DOMParser; +} + +},{"./dom":8,"./sax":9}],8:[function(require,module,exports){ +/* + * DOM Level 2 + * Object DOMException + * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html + */ + +function copy(src,dest){ + for(var p in src){ + dest[p] = src[p]; + } +} +/** +^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? +^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? + */ +function _extends(Class,Super){ + var pt = Class.prototype; + if(Object.create){ + var ppt = Object.create(Super.prototype) + pt.__proto__ = ppt; + } + if(!(pt instanceof Super)){ + function t(){}; + t.prototype = Super.prototype; + t = new t(); + copy(pt,t); + Class.prototype = pt = t; + } + if(pt.constructor != Class){ + if(typeof Class != 'function'){ + console.error("unknow Class:"+Class) + } + pt.constructor = Class + } +} +var htmlns = 'http://www.w3.org/1999/xhtml' ; +// Node Types +var NodeType = {} +var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; +var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; +var TEXT_NODE = NodeType.TEXT_NODE = 3; +var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; +var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; +var ENTITY_NODE = NodeType.ENTITY_NODE = 6; +var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; +var COMMENT_NODE = NodeType.COMMENT_NODE = 8; +var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; +var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; +var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; +var NOTATION_NODE = NodeType.NOTATION_NODE = 12; + +// ExceptionCode +var ExceptionCode = {} +var ExceptionMessage = {}; +var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); +var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); +var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); +var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); +var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); +var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); +var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); +var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); +var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); +var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); +//level2 +var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); +var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); +var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); +var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); +var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); + + +function DOMException(code, message) { + if(message instanceof Error){ + var error = message; + }else{ + error = this; + Error.call(this, ExceptionMessage[code]); + this.message = ExceptionMessage[code]; + if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); + } + error.code = code; + if(message) this.message = this.message + ": " + message; + return error; +}; +DOMException.prototype = Error.prototype; +copy(ExceptionCode,DOMException) +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177 + * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live. + * The items in the NodeList are accessible via an integral index, starting from 0. + */ +function NodeList() { +}; +NodeList.prototype = { + /** + * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. + * @standard level1 + */ + length:0, + /** + * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. + * @standard level1 + * @param index unsigned long + * Index into the collection. + * @return Node + * The node at the indexth position in the NodeList, or null if that is not a valid index. + */ + item: function(index) { + return this[index] || null; + } +}; +function LiveNodeList(node,refresh){ + this._node = node; + this._refresh = refresh + _updateLiveList(this); +} +function _updateLiveList(list){ + var inc = list._node._inc || list._node.ownerDocument._inc; + if(list._inc != inc){ + var ls = list._refresh(list._node); + //console.log(ls.length) + __set__(list,'length',ls.length); + copy(ls,list); + list._inc = inc; + } +} +LiveNodeList.prototype.item = function(i){ + _updateLiveList(this); + return this[i]; +} + +_extends(LiveNodeList,NodeList); +/** + * + * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes. + * NamedNodeMap objects in the DOM are live. + * used for attributes or DocumentType entities + */ +function NamedNodeMap() { +}; + +function _findNodeIndex(list,node){ + var i = list.length; + while(i--){ + if(list[i] === node){return i} + } +} + +function _addNamedNode(el,list,newAttr,oldAttr){ + if(oldAttr){ + list[_findNodeIndex(list,oldAttr)] = newAttr; + }else{ + list[list.length++] = newAttr; + } + if(el){ + newAttr.ownerElement = el; + var doc = el.ownerDocument; + if(doc){ + oldAttr && _onRemoveAttribute(doc,el,oldAttr); + _onAddAttribute(doc,el,newAttr); + } + } +} +function _removeNamedNode(el,list,attr){ + var i = _findNodeIndex(list,attr); + if(i>=0){ + var lastIndex = list.length-1 + while(i0 || key == 'xmlns'){ +// return null; +// } + var i = this.length; + while(i--){ + var attr = this[i]; + if(attr.nodeName == key){ + return attr; + } + } + }, + setNamedItem: function(attr) { + var el = attr.ownerElement; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + var oldAttr = this.getNamedItem(attr.nodeName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + /* returns Node */ + setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR + var el = attr.ownerElement, oldAttr; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + + /* returns Node */ + removeNamedItem: function(key) { + var attr = this.getNamedItem(key); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + + + },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR + + //for level2 + removeNamedItemNS:function(namespaceURI,localName){ + var attr = this.getNamedItemNS(namespaceURI,localName); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + }, + getNamedItemNS: function(namespaceURI, localName) { + var i = this.length; + while(i--){ + var node = this[i]; + if(node.localName == localName && node.namespaceURI == namespaceURI){ + return node; + } + } + return null; + } +}; +/** + * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 + */ +function DOMImplementation(/* Object */ features) { + this._features = {}; + if (features) { + for (var feature in features) { + this._features = features[feature]; + } + } +}; + +DOMImplementation.prototype = { + hasFeature: function(/* string */ feature, /* string */ version) { + var versions = this._features[feature.toLowerCase()]; + if (versions && (!version || version in versions)) { + return true; + } else { + return false; + } + }, + // Introduced in DOM Level 2: + createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR + var doc = new Document(); + doc.doctype = doctype; + if(doctype){ + doc.appendChild(doctype); + } + doc.implementation = this; + doc.childNodes = new NodeList(); + if(qualifiedName){ + var root = doc.createElementNS(namespaceURI,qualifiedName); + doc.appendChild(root); + } + return doc; + }, + // Introduced in DOM Level 2: + createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR + var node = new DocumentType(); + node.name = qualifiedName; + node.nodeName = qualifiedName; + node.publicId = publicId; + node.systemId = systemId; + // Introduced in DOM Level 2: + //readonly attribute DOMString internalSubset; + + //TODO:.. + // readonly attribute NamedNodeMap entities; + // readonly attribute NamedNodeMap notations; + return node; + } +}; + + +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 + */ + +function Node() { +}; + +Node.prototype = { + firstChild : null, + lastChild : null, + previousSibling : null, + nextSibling : null, + attributes : null, + parentNode : null, + childNodes : null, + ownerDocument : null, + nodeValue : null, + namespaceURI : null, + prefix : null, + localName : null, + // Modified in DOM Level 2: + insertBefore:function(newChild, refChild){//raises + return _insertBefore(this,newChild,refChild); + }, + replaceChild:function(newChild, oldChild){//raises + this.insertBefore(newChild,oldChild); + if(oldChild){ + this.removeChild(oldChild); + } + }, + removeChild:function(oldChild){ + return _removeChild(this,oldChild); + }, + appendChild:function(newChild){ + return this.insertBefore(newChild,null); + }, + hasChildNodes:function(){ + return this.firstChild != null; + }, + cloneNode:function(deep){ + return cloneNode(this.ownerDocument||this,this,deep); + }, + // Modified in DOM Level 2: + normalize:function(){ + var child = this.firstChild; + while(child){ + var next = child.nextSibling; + if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ + this.removeChild(next); + child.appendData(next.data); + }else{ + child.normalize(); + child = next; + } + } + }, + // Introduced in DOM Level 2: + isSupported:function(feature, version){ + return this.ownerDocument.implementation.hasFeature(feature,version); + }, + // Introduced in DOM Level 2: + hasAttributes:function(){ + return this.attributes.length>0; + }, + lookupPrefix:function(namespaceURI){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + for(var n in map){ + if(map[n] == namespaceURI){ + return n; + } + } + } + el = el.nodeType == 2?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + lookupNamespaceURI:function(prefix){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + if(prefix in map){ + return map[prefix] ; + } + } + el = el.nodeType == 2?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + isDefaultNamespace:function(namespaceURI){ + var prefix = this.lookupPrefix(namespaceURI); + return prefix == null; + } +}; + + +function _xmlEncoder(c){ + return c == '<' && '<' || + c == '>' && '>' || + c == '&' && '&' || + c == '"' && '"' || + '&#'+c.charCodeAt()+';' +} + + +copy(NodeType,Node); +copy(NodeType,Node.prototype); + +/** + * @param callback return true for continue,false for break + * @return boolean true: break visit; + */ +function _visitNode(node,callback){ + if(callback(node)){ + return true; + } + if(node = node.firstChild){ + do{ + if(_visitNode(node,callback)){return true} + }while(node=node.nextSibling) + } +} + + + +function Document(){ +} +function _onAddAttribute(doc,el,newAttr){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value + } +} +function _onRemoveAttribute(doc,el,newAttr,remove){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + delete el._nsMap[newAttr.prefix?newAttr.localName:''] + } +} +function _onUpdateChild(doc,el,newChild){ + if(doc && doc._inc){ + doc._inc++; + //update childNodes + var cs = el.childNodes; + if(newChild){ + cs[cs.length++] = newChild; + }else{ + //console.log(1) + var child = el.firstChild; + var i = 0; + while(child){ + cs[i++] = child; + child =child.nextSibling; + } + cs.length = i; + } + } +} + +/** + * attributes; + * children; + * + * writeable properties: + * nodeValue,Attr:value,CharacterData:data + * prefix + */ +function _removeChild(parentNode,child){ + var previous = child.previousSibling; + var next = child.nextSibling; + if(previous){ + previous.nextSibling = next; + }else{ + parentNode.firstChild = next + } + if(next){ + next.previousSibling = previous; + }else{ + parentNode.lastChild = previous; + } + _onUpdateChild(parentNode.ownerDocument,parentNode); + return child; +} +/** + * preformance key(refChild == null) + */ +function _insertBefore(parentNode,newChild,nextChild){ + var cp = newChild.parentNode; + if(cp){ + cp.removeChild(newChild);//remove and update + } + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + var newFirst = newChild.firstChild; + if (newFirst == null) { + return newChild; + } + var newLast = newChild.lastChild; + }else{ + newFirst = newLast = newChild; + } + var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; + + newFirst.previousSibling = pre; + newLast.nextSibling = nextChild; + + + if(pre){ + pre.nextSibling = newFirst; + }else{ + parentNode.firstChild = newFirst; + } + if(nextChild == null){ + parentNode.lastChild = newLast; + }else{ + nextChild.previousSibling = newLast; + } + do{ + newFirst.parentNode = parentNode; + }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) + _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); + //console.log(parentNode.lastChild.nextSibling == null) + if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { + newChild.firstChild = newChild.lastChild = null; + } + return newChild; +} +function _appendSingleChild(parentNode,newChild){ + var cp = newChild.parentNode; + if(cp){ + var pre = parentNode.lastChild; + cp.removeChild(newChild);//remove and update + var pre = parentNode.lastChild; + } + var pre = parentNode.lastChild; + newChild.parentNode = parentNode; + newChild.previousSibling = pre; + newChild.nextSibling = null; + if(pre){ + pre.nextSibling = newChild; + }else{ + parentNode.firstChild = newChild; + } + parentNode.lastChild = newChild; + _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); + return newChild; + //console.log("__aa",parentNode.lastChild.nextSibling == null) +} +Document.prototype = { + //implementation : null, + nodeName : '#document', + nodeType : DOCUMENT_NODE, + doctype : null, + documentElement : null, + _inc : 1, + + insertBefore : function(newChild, refChild){//raises + if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ + var child = newChild.firstChild; + while(child){ + var next = child.nextSibling; + this.insertBefore(child,refChild); + child = next; + } + return newChild; + } + if(this.documentElement == null && newChild.nodeType == 1){ + this.documentElement = newChild; + } + + return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; + }, + removeChild : function(oldChild){ + if(this.documentElement == oldChild){ + this.documentElement = null; + } + return _removeChild(this,oldChild); + }, + // Introduced in DOM Level 2: + importNode : function(importedNode,deep){ + return importNode(this,importedNode,deep); + }, + // Introduced in DOM Level 2: + getElementById : function(id){ + var rtv = null; + _visitNode(this.documentElement,function(node){ + if(node.nodeType == 1){ + if(node.getAttribute('id') == id){ + rtv = node; + return true; + } + } + }) + return rtv; + }, + + //document factory method: + createElement : function(tagName){ + var node = new Element(); + node.ownerDocument = this; + node.nodeName = tagName; + node.tagName = tagName; + node.childNodes = new NodeList(); + var attrs = node.attributes = new NamedNodeMap(); + attrs._ownerElement = node; + return node; + }, + createDocumentFragment : function(){ + var node = new DocumentFragment(); + node.ownerDocument = this; + node.childNodes = new NodeList(); + return node; + }, + createTextNode : function(data){ + var node = new Text(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createComment : function(data){ + var node = new Comment(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createCDATASection : function(data){ + var node = new CDATASection(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createProcessingInstruction : function(target,data){ + var node = new ProcessingInstruction(); + node.ownerDocument = this; + node.tagName = node.target = target; + node.nodeValue= node.data = data; + return node; + }, + createAttribute : function(name){ + var node = new Attr(); + node.ownerDocument = this; + node.name = name; + node.nodeName = name; + node.localName = name; + node.specified = true; + return node; + }, + createEntityReference : function(name){ + var node = new EntityReference(); + node.ownerDocument = this; + node.nodeName = name; + return node; + }, + // Introduced in DOM Level 2: + createElementNS : function(namespaceURI,qualifiedName){ + var node = new Element(); + var pl = qualifiedName.split(':'); + var attrs = node.attributes = new NamedNodeMap(); + node.childNodes = new NodeList(); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.tagName = qualifiedName; + node.namespaceURI = namespaceURI; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + attrs._ownerElement = node; + return node; + }, + // Introduced in DOM Level 2: + createAttributeNS : function(namespaceURI,qualifiedName){ + var node = new Attr(); + var pl = qualifiedName.split(':'); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.name = qualifiedName; + node.namespaceURI = namespaceURI; + node.specified = true; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + return node; + } +}; +_extends(Document,Node); + + +function Element() { + this._nsMap = {}; +}; +Element.prototype = { + nodeType : ELEMENT_NODE, + hasAttribute : function(name){ + return this.getAttributeNode(name)!=null; + }, + getAttribute : function(name){ + var attr = this.getAttributeNode(name); + return attr && attr.value || ''; + }, + getAttributeNode : function(name){ + return this.attributes.getNamedItem(name); + }, + setAttribute : function(name, value){ + var attr = this.ownerDocument.createAttribute(name); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + removeAttribute : function(name){ + var attr = this.getAttributeNode(name) + attr && this.removeAttributeNode(attr); + }, + + //four real opeartion method + appendChild:function(newChild){ + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + return this.insertBefore(newChild,null); + }else{ + return _appendSingleChild(this,newChild); + } + }, + setAttributeNode : function(newAttr){ + return this.attributes.setNamedItem(newAttr); + }, + setAttributeNodeNS : function(newAttr){ + return this.attributes.setNamedItemNS(newAttr); + }, + removeAttributeNode : function(oldAttr){ + return this.attributes.removeNamedItem(oldAttr.nodeName); + }, + //get real attribute name,and remove it by removeAttributeNode + removeAttributeNS : function(namespaceURI, localName){ + var old = this.getAttributeNodeNS(namespaceURI, localName); + old && this.removeAttributeNode(old); + }, + + hasAttributeNS : function(namespaceURI, localName){ + return this.getAttributeNodeNS(namespaceURI, localName)!=null; + }, + getAttributeNS : function(namespaceURI, localName){ + var attr = this.getAttributeNodeNS(namespaceURI, localName); + return attr && attr.value || ''; + }, + setAttributeNS : function(namespaceURI, qualifiedName, value){ + var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); + attr.value = attr.nodeValue = value; + this.setAttributeNode(attr) + }, + getAttributeNodeNS : function(namespaceURI, localName){ + return this.attributes.getNamedItemNS(namespaceURI, localName); + }, + + getElementsByTagName : function(tagName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ + ls.push(node); + } + }); + return ls; + }); + }, + getElementsByTagNameNS : function(namespaceURI, localName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType === ELEMENT_NODE && node.namespaceURI === namespaceURI && (localName === '*' || node.localName == localName)){ + ls.push(node); + } + }); + return ls; + }); + } +}; +Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; +Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; + + +_extends(Element,Node); +function Attr() { +}; +Attr.prototype.nodeType = ATTRIBUTE_NODE; +_extends(Attr,Node); + + +function CharacterData() { +}; +CharacterData.prototype = { + data : '', + substringData : function(offset, count) { + return this.data.substring(offset, offset+count); + }, + appendData: function(text) { + text = this.data+text; + this.nodeValue = this.data = text; + this.length = text.length; + }, + insertData: function(offset,text) { + this.replaceData(offset,0,text); + + }, + appendChild:function(newChild){ + //if(!(newChild instanceof CharacterData)){ + throw new Error(ExceptionMessage[3]) + //} + return Node.prototype.appendChild.apply(this,arguments) + }, + deleteData: function(offset, count) { + this.replaceData(offset,count,""); + }, + replaceData: function(offset, count, text) { + var start = this.data.substring(0,offset); + var end = this.data.substring(offset+count); + text = start + text + end; + this.nodeValue = this.data = text; + this.length = text.length; + } +} +_extends(CharacterData,Node); +function Text() { +}; +Text.prototype = { + nodeName : "#text", + nodeType : TEXT_NODE, + splitText : function(offset) { + var text = this.data; + var newText = text.substring(offset); + text = text.substring(0, offset); + this.data = this.nodeValue = text; + this.length = text.length; + var newNode = this.ownerDocument.createTextNode(newText); + if(this.parentNode){ + this.parentNode.insertBefore(newNode, this.nextSibling); + } + return newNode; + } +} +_extends(Text,CharacterData); +function Comment() { +}; +Comment.prototype = { + nodeName : "#comment", + nodeType : COMMENT_NODE +} +_extends(Comment,CharacterData); + +function CDATASection() { +}; +CDATASection.prototype = { + nodeName : "#cdata-section", + nodeType : CDATA_SECTION_NODE +} +_extends(CDATASection,CharacterData); + + +function DocumentType() { +}; +DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; +_extends(DocumentType,Node); + +function Notation() { +}; +Notation.prototype.nodeType = NOTATION_NODE; +_extends(Notation,Node); + +function Entity() { +}; +Entity.prototype.nodeType = ENTITY_NODE; +_extends(Entity,Node); + +function EntityReference() { +}; +EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; +_extends(EntityReference,Node); + +function DocumentFragment() { +}; +DocumentFragment.prototype.nodeName = "#document-fragment"; +DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; +_extends(DocumentFragment,Node); + + +function ProcessingInstruction() { +} +ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; +_extends(ProcessingInstruction,Node); +function XMLSerializer(){} +XMLSerializer.prototype.serializeToString = function(node){ + var buf = []; + serializeToString(node,buf); + return buf.join(''); +} +Node.prototype.toString =function(){ + return XMLSerializer.prototype.serializeToString(this); +} +function serializeToString(node,buf){ + switch(node.nodeType){ + case ELEMENT_NODE: + var attrs = node.attributes; + var len = attrs.length; + var child = node.firstChild; + var nodeName = node.tagName; + var isHTML = htmlns === node.namespaceURI + buf.push('<',nodeName); + for(var i=0;i'); + //if is cdata child node + if(isHTML && /^script$/i.test(nodeName)){ + if(child){ + buf.push(child.data); + } + }else{ + while(child){ + serializeToString(child,buf); + child = child.nextSibling; + } + } + buf.push(''); + }else{ + buf.push('/>'); + } + return; + case DOCUMENT_NODE: + case DOCUMENT_FRAGMENT_NODE: + var child = node.firstChild; + while(child){ + serializeToString(child,buf); + child = child.nextSibling; + } + return; + case ATTRIBUTE_NODE: + return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); + case TEXT_NODE: + return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); + case CDATA_SECTION_NODE: + return buf.push( ''); + case COMMENT_NODE: + return buf.push( ""); + case DOCUMENT_TYPE_NODE: + var pubid = node.publicId; + var sysid = node.systemId; + buf.push(''); + }else if(sysid && sysid!='.'){ + buf.push(' SYSTEM "',sysid,'">'); + }else{ + var sub = node.internalSubset; + if(sub){ + buf.push(" [",sub,"]"); + } + buf.push(">"); + } + return; + case PROCESSING_INSTRUCTION_NODE: + return buf.push( ""); + case ENTITY_REFERENCE_NODE: + return buf.push( '&',node.nodeName,';'); + //case ENTITY_NODE: + //case NOTATION_NODE: + default: + buf.push('??',node.nodeName); + } +} +function importNode(doc,node,deep){ + var node2; + switch (node.nodeType) { + case ELEMENT_NODE: + node2 = node.cloneNode(false); + node2.ownerDocument = doc; + //var attrs = node2.attributes; + //var len = attrs.length; + //for(var i=0;i + +function XMLReader(){ + +} + +XMLReader.prototype = { + parse:function(source,defaultNSMap,entityMap){ + var domBuilder = this.domBuilder; + domBuilder.startDocument(); + _copy(defaultNSMap ,defaultNSMap = {}) + parse(source,defaultNSMap,entityMap, + domBuilder,this.errorHandler); + domBuilder.endDocument(); + } +} +function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ + function fixedFromCharCode(code) { + // String.prototype.fromCharCode does not supports + // > 2 bytes unicode chars directly + if (code > 0xffff) { + code -= 0x10000; + var surrogate1 = 0xd800 + (code >> 10) + , surrogate2 = 0xdc00 + (code & 0x3ff); + + return String.fromCharCode(surrogate1, surrogate2); + } else { + return String.fromCharCode(code); + } + } + function entityReplacer(a){ + var k = a.slice(1,-1); + if(k in entityMap){ + return entityMap[k]; + }else if(k.charAt(0) === '#'){ + return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) + }else{ + errorHandler.error('entity not found:'+a); + return a; + } + } + function appendText(end){//has some bugs + var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); + locator&&position(start); + domBuilder.characters(xt,0,end-start); + start = end + } + function position(start,m){ + while(start>=endPos && (m = linePattern.exec(source))){ + startPos = m.index; + endPos = startPos + m[0].length; + locator.lineNumber++; + //console.log('line++:',locator,startPos,endPos) + } + locator.columnNumber = start-startPos+1; + } + var startPos = 0; + var endPos = 0; + var linePattern = /.+(?:\r\n?|\n)|.*$/g + var locator = domBuilder.locator; + + var parseStack = [{currentNSMap:defaultNSMapCopy}] + var closeMap = {}; + var start = 0; + while(true){ + var i = source.indexOf('<',start); + if(i<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.document; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } + if(i>start){ + appendText(i); + } + switch(source.charAt(i+1)){ + case '/': + var end = source.indexOf('>',i+3); + var tagName = source.substring(i+2,end); + var config = parseStack.pop(); + var localNSMap = config.localNSMap; + + if(config.tagName != tagName){ + errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); + } + domBuilder.endElement(config.uri,config.localName,tagName); + if(localNSMap){ + for(var prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) ; + } + } + end++; + break; + // end elment + case '?':// + locator&&position(i); + end = parseInstruction(source,i,domBuilder); + break; + case '!':// 0){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + el.add(attrName,value,start-1); + s = S_E; + }else{ + //fatalError: no end quot match + throw new Error('attribute value no end \''+c+'\' match'); + } + }else if(s == S_V){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + //console.log(attrName,value,start,p) + el.add(attrName,value,start); + //console.dir(el) + errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); + start = p+1; + s = S_E + }else{ + //fatalError: no equal before + throw new Error('attribute value must after "="'); + } + break; + case '/': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_E: + case S_S: + case S_C: + s = S_C; + el.closed = true; + case S_V: + case S_ATTR: + case S_ATTR_S: + break; + //case S_EQ: + default: + throw new Error("attribute invalid close char('/')") + } + break; + case ''://end document + //throw new Error('unexpected end of input') + errorHandler.error('unexpected end of input'); + case '>': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_E: + case S_S: + case S_C: + break;//normal + case S_V://Compatible state + case S_ATTR: + value = source.slice(start,p); + if(value.slice(-1) === '/'){ + el.closed = true; + value = value.slice(0,-1) + } + case S_ATTR_S: + if(s === S_ATTR_S){ + value = attrName; + } + if(s == S_V){ + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) + }else{ + errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') + el.add(value,value,start) + } + break; + case S_EQ: + throw new Error('attribute value missed!!'); + } +// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) + return p; + /*xml space '\x20' | #x9 | #xD | #xA; */ + case '\u0080': + c = ' '; + default: + if(c<= ' '){//space + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p));//tagName + s = S_S; + break; + case S_ATTR: + attrName = source.slice(start,p) + s = S_ATTR_S; + break; + case S_V: + var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value,start) + case S_E: + s = S_S; + break; + //case S_S: + //case S_EQ: + //case S_ATTR_S: + // void();break; + //case S_C: + //ignore warning + } + }else{//not space +//S_TAG, S_ATTR, S_EQ, S_V +//S_ATTR_S, S_E, S_S, S_C + switch(s){ + //case S_TAG:void();break; + //case S_ATTR:void();break; + //case S_V:void();break; + case S_ATTR_S: + errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!') + el.add(attrName,attrName,start); + start = p; + s = S_ATTR; + break; + case S_E: + errorHandler.warning('attribute space is required"'+attrName+'"!!') + case S_S: + s = S_ATTR; + start = p; + break; + case S_EQ: + s = S_V; + start = p; + break; + case S_C: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + } + p++; + } +} +/** + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function appendElement(el,domBuilder,parseStack){ + var tagName = el.tagName; + var localNSMap = null; + var currentNSMap = parseStack[parseStack.length-1].currentNSMap; + var i = el.length; + while(i--){ + var a = el[i]; + var qName = a.qName; + var value = a.value; + var nsp = qName.indexOf(':'); + if(nsp>0){ + var prefix = a.prefix = qName.slice(0,nsp); + var localName = qName.slice(nsp+1); + var nsPrefix = prefix === 'xmlns' && localName + }else{ + localName = qName; + prefix = null + nsPrefix = qName === 'xmlns' && '' + } + //can not set prefix,because prefix !== '' + a.localName = localName ; + //prefix == null for no ns prefix attribute + if(nsPrefix !== false){//hack!! + if(localNSMap == null){ + localNSMap = {} + //console.log(currentNSMap,0) + _copy(currentNSMap,currentNSMap={}) + //console.log(currentNSMap,1) + } + currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; + a.uri = 'http://www.w3.org/2000/xmlns/' + domBuilder.startPrefixMapping(nsPrefix, value) + } + } + var i = el.length; + while(i--){ + a = el[i]; + var prefix = a.prefix; + if(prefix){//no prefix attribute has no namespace + if(prefix === 'xml'){ + a.uri = 'http://www.w3.org/XML/1998/namespace'; + }if(prefix !== 'xmlns'){ + a.uri = currentNSMap[prefix] + + //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} + } + } + } + var nsp = tagName.indexOf(':'); + if(nsp>0){ + prefix = el.prefix = tagName.slice(0,nsp); + localName = el.localName = tagName.slice(nsp+1); + }else{ + prefix = null;//important!! + localName = el.localName = tagName; + } + //no prefix element has default namespace + var ns = el.uri = currentNSMap[prefix || '']; + domBuilder.startElement(ns,localName,tagName,el); + //endPrefixMapping and startPrefixMapping have not any help for dom builder + //localNSMap = null + if(el.closed){ + domBuilder.endElement(ns,localName,tagName); + if(localNSMap){ + for(prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) + } + } + }else{ + el.currentNSMap = currentNSMap; + el.localNSMap = localNSMap; + parseStack.push(el); + } +} +function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ + if(/^(?:script|textarea)$/i.test(tagName)){ + var elEndStart = source.indexOf('',elStartEnd); + var text = source.substring(elStartEnd+1,elEndStart); + if(/[&<]/.test(text)){ + if(/^script$/i.test(tagName)){ + //if(!/\]\]>/.test(text)){ + //lexHandler.startCDATA(); + domBuilder.characters(text,0,text.length); + //lexHandler.endCDATA(); + return elEndStart; + //} + }//}else{//text area + text = text.replace(/&#?\w+;/g,entityReplacer); + domBuilder.characters(text,0,text.length); + return elEndStart; + //} + + } + } + return elStartEnd+1; +} +function fixSelfClosed(source,elStartEnd,tagName,closeMap){ + //if(tagName in closeMap){ + var pos = closeMap[tagName]; + if(pos == null){ + //console.log(tagName) + pos = closeMap[tagName] = source.lastIndexOf('') + } + return pos',start+4); + //append comment source.substring(4,end)//, + * and raw CDATA nodes. + * + * @param {Element} node + * @returns {Boolean} + * @api private + */ + +function shouldIgnoreNode (node) { + return node.nodeType === 3 // text + || node.nodeType === 8 // comment + || node.nodeType === 4; // cdata +} + + +/** + * Parses a Plist XML string. Returns an Object. + * + * @param {String} xml - the XML String to decode + * @returns {Mixed} the decoded value from the Plist XML + * @api public + */ + +function parse (xml) { + var doc = new DOMParser().parseFromString(xml); + if (doc.documentElement.nodeName !== 'plist') { + throw new Error('malformed document. First element should be '); + } + var plist = parsePlistXML(doc.documentElement); + + // the root node gets interpreted as an Array, + // so pull out the inner data first + if (plist.length == 1) plist = plist[0]; + + return plist; +} + +/** + * Parses a Plist XML string. Returns an Object. Takes a `callback` function. + * + * @param {String} xml - the XML String to decode + * @param {Function} callback - callback function + * @returns {Mixed} the decoded value from the Plist XML + * @api public + * @deprecated not actually async. use parse() instead + */ + +function parseString (xml, callback) { + var doc, error, plist; + try { + doc = new DOMParser().parseFromString(xml); + plist = parsePlistXML(doc.documentElement); + } catch(e) { + error = e; + } + callback(error, plist); +} + +/** + * Parses a Plist XML string. Returns an Object. + * + * @param {String} xml - the XML String to decode + * @param {Function} callback - callback function + * @returns {Mixed} the decoded value from the Plist XML + * @api public + * @deprecated use parse() instead + */ + +function parseStringSync (xml) { + var doc = new DOMParser().parseFromString(xml); + var plist; + if (doc.documentElement.nodeName !== 'plist') { + throw new Error('malformed document. First element should be '); + } + plist = parsePlistXML(doc.documentElement); + + // if the plist is an array with 1 element, pull it out of the array + if (plist.length == 1) { + plist = plist[0]; + } + return plist; +} + +/** + * Convert an XML based plist document into a JSON representation. + * + * @param {Object} xml_node - current XML node in the plist + * @returns {Mixed} built up JSON object + * @api private + */ + +function parsePlistXML (node) { + var i, new_obj, key, val, new_arr, res, d; + + if (!node) + return null; + + if (node.nodeName === 'plist') { + new_arr = []; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + new_arr.push( parsePlistXML(node.childNodes[i])); + } + } + return new_arr; + + } else if (node.nodeName === 'dict') { + new_obj = {}; + key = null; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + if (key === null) { + key = parsePlistXML(node.childNodes[i]); + } else { + new_obj[key] = parsePlistXML(node.childNodes[i]); + key = null; + } + } + } + return new_obj; + + } else if (node.nodeName === 'array') { + new_arr = []; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + res = parsePlistXML(node.childNodes[i]); + if (null != res) new_arr.push(res); + } + } + return new_arr; + + } else if (node.nodeName === '#text') { + // TODO: what should we do with text types? (CDATA sections) + + } else if (node.nodeName === 'key') { + return node.childNodes[0].nodeValue; + + } else if (node.nodeName === 'string') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + res += node.childNodes[d].nodeValue; + } + return res; + + } else if (node.nodeName === 'integer') { + // parse as base 10 integer + return parseInt(node.childNodes[0].nodeValue, 10); + + } else if (node.nodeName === 'real') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + if (node.childNodes[d].nodeType === 3) { + res += node.childNodes[d].nodeValue; + } + } + return parseFloat(res); + + } else if (node.nodeName === 'data') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + if (node.childNodes[d].nodeType === 3) { + res += node.childNodes[d].nodeValue.replace(/\s+/g, ''); + } + } + + // decode base64 data to a Buffer instance + return new Buffer(res, 'base64'); + + } else if (node.nodeName === 'date') { + return new Date(node.childNodes[0].nodeValue); + + } else if (node.nodeName === 'true') { + return true; + + } else if (node.nodeName === 'false') { + return false; + } +} + +}).call(this,require("buffer").Buffer) +},{"buffer":7,"util-deprecate":70,"xmldom":88}],4:[function(require,module,exports){ + +var i; + +/** + * Parser functions. + */ + +var parserFunctions = require('./parse'); +for (i in parserFunctions) exports[i] = parserFunctions[i]; + +/** + * Builder functions. + */ + +var builderFunctions = require('./build'); +for (i in builderFunctions) exports[i] = builderFunctions[i]; + +/** + * Add Node.js-specific functions (they're deprecated…). + */ + +var nodeFunctions = require('./node'); +for (i in nodeFunctions) exports[i] = nodeFunctions[i]; + +},{"./build":1,"./node":2,"./parse":3}],5:[function(require,module,exports){ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS || + code === PLUS_URL_SAFE) + return 62 // '+' + if (code === SLASH || + code === SLASH_URL_SAFE) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],6:[function(require,module,exports){ + +},{}],7:[function(require,module,exports){ +(function (global){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var isArray = require('is-array') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 +Buffer.poolSize = 8192 // not used by this implementation + +var rootParent = {} + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property + * on objects. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined + ? global.TYPED_ARRAY_SUPPORT + : typedArraySupport() + +function typedArraySupport () { + function Bar () {} + try { + var arr = new Uint8Array(1) + arr.foo = function () { return 42 } + arr.constructor = Bar + return arr.foo() === 42 && // typed array instances can be augmented + arr.constructor === Bar && // constructor can be set + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +} + +function kMaxLength () { + return Buffer.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff +} + +/** + * Class: Buffer + * ============= + * + * The Buffer constructor returns instances of `Uint8Array` that are augmented + * with function properties for all the node `Buffer` API functions. We use + * `Uint8Array` so that square bracket notation works as expected -- it returns + * a single octet. + * + * By augmenting the instances, we can avoid modifying the `Uint8Array` + * prototype. + */ +function Buffer (arg) { + if (!(this instanceof Buffer)) { + // Avoid going through an ArgumentsAdaptorTrampoline in the common case. + if (arguments.length > 1) return new Buffer(arg, arguments[1]) + return new Buffer(arg) + } + + this.length = 0 + this.parent = undefined + + // Common case. + if (typeof arg === 'number') { + return fromNumber(this, arg) + } + + // Slightly less common case. + if (typeof arg === 'string') { + return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8') + } + + // Unusual. + return fromObject(this, arg) +} + +function fromNumber (that, length) { + that = allocate(that, length < 0 ? 0 : checked(length) | 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < length; i++) { + that[i] = 0 + } + } + return that +} + +function fromString (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8' + + // Assumption: byteLength() return value is always < kMaxLength. + var length = byteLength(string, encoding) | 0 + that = allocate(that, length) + + that.write(string, encoding) + return that +} + +function fromObject (that, object) { + if (Buffer.isBuffer(object)) return fromBuffer(that, object) + + if (isArray(object)) return fromArray(that, object) + + if (object == null) { + throw new TypeError('must start with number, buffer, array or string') + } + + if (typeof ArrayBuffer !== 'undefined') { + if (object.buffer instanceof ArrayBuffer) { + return fromTypedArray(that, object) + } + if (object instanceof ArrayBuffer) { + return fromArrayBuffer(that, object) + } + } + + if (object.length) return fromArrayLike(that, object) + + return fromJsonObject(that, object) +} + +function fromBuffer (that, buffer) { + var length = checked(buffer.length) | 0 + that = allocate(that, length) + buffer.copy(that, 0, 0, length) + return that +} + +function fromArray (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +// Duplicate of fromArray() to keep fromArray() monomorphic. +function fromTypedArray (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + // Truncating the elements is probably not what people expect from typed + // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior + // of the old Buffer constructor. + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +function fromArrayBuffer (that, array) { + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + array.byteLength + that = Buffer._augment(new Uint8Array(array)) + } else { + // Fallback: Return an object instance of the Buffer class + that = fromTypedArray(that, new Uint8Array(array)) + } + return that +} + +function fromArrayLike (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object. +// Returns a zero-length buffer for inputs that don't conform to the spec. +function fromJsonObject (that, object) { + var array + var length = 0 + + if (object.type === 'Buffer' && isArray(object.data)) { + array = object.data + length = checked(array.length) | 0 + } + that = allocate(that, length) + + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype + Buffer.__proto__ = Uint8Array +} + +function allocate (that, length) { + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = Buffer._augment(new Uint8Array(length)) + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + that.length = length + that._isBuffer = true + } + + var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1 + if (fromPool) that.parent = rootParent + + return that +} + +function checked (length) { + // Note: cannot use `length < kMaxLength` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength().toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (subject, encoding) { + if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) + + var buf = new Buffer(subject, encoding) + delete buf.parent + return buf +} + +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + var i = 0 + var len = Math.min(x, y) + while (i < len) { + if (a[i] !== b[i]) break + + ++i + } + + if (i !== len) { + x = a[i] + y = b[i] + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'raw': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') + + if (list.length === 0) { + return new Buffer(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; i++) { + length += list[i].length + } + } + + var buf = new Buffer(length) + var pos = 0 + for (i = 0; i < list.length; i++) { + var item = list[i] + item.copy(buf, pos) + pos += item.length + } + return buf +} + +function byteLength (string, encoding) { + if (typeof string !== 'string') string = '' + string + + var len = string.length + if (len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'binary': + // Deprecated + case 'raw': + case 'raws': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) return utf8ToBytes(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +// pre-set for values that may exist in the future +Buffer.prototype.length = undefined +Buffer.prototype.parent = undefined + +function slowToString (encoding, start, end) { + var loweredCase = false + + start = start | 0 + end = end === undefined || end === Infinity ? this.length : end | 0 + + if (!encoding) encoding = 'utf8' + if (start < 0) start = 0 + if (end > this.length) end = this.length + if (end <= start) return '' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'binary': + return binarySlice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toString = function toString () { + var length = this.length | 0 + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} + +Buffer.prototype.compare = function compare (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return 0 + return Buffer.compare(this, b) +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset) { + if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff + else if (byteOffset < -0x80000000) byteOffset = -0x80000000 + byteOffset >>= 0 + + if (this.length === 0) return -1 + if (byteOffset >= this.length) return -1 + + // Negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) + + if (typeof val === 'string') { + if (val.length === 0) return -1 // special case: looking for empty string always fails + return String.prototype.indexOf.call(this, val, byteOffset) + } + if (Buffer.isBuffer(val)) { + return arrayIndexOf(this, val, byteOffset) + } + if (typeof val === 'number') { + if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { + return Uint8Array.prototype.indexOf.call(this, val, byteOffset) + } + return arrayIndexOf(this, [ val ], byteOffset) + } + + function arrayIndexOf (arr, val, byteOffset) { + var foundIndex = -1 + for (var i = 0; byteOffset + i < arr.length; i++) { + if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex + } else { + foundIndex = -1 + } + } + return -1 + } + + throw new TypeError('val must be string, number or Buffer') +} + +// `get` is deprecated +Buffer.prototype.get = function get (offset) { + console.log('.get() is deprecated. Access using array indexes instead.') + return this.readUInt8(offset) +} + +// `set` is deprecated +Buffer.prototype.set = function set (v, offset) { + console.log('.set() is deprecated. Access using array indexes instead.') + return this.writeUInt8(v, offset) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new Error('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; i++) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) throw new Error('Invalid hex string') + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function binaryWrite (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0 + if (isFinite(length)) { + length = length | 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + var swap = encoding + encoding = offset + offset = length | 0 + length = swap + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'binary': + return binaryWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function binarySlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; i++) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = Buffer._augment(this.subarray(start, end)) + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; i++) { + newBuf[i] = this[i + start] + } + } + + if (newBuf.length) newBuf.parent = this.parent || this + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = (value & 0xff) + return offset + 1 +} + +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') + if (offset < 0) throw new RangeError('index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + var i + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; i--) { + target[i + targetStart] = this[i + start] + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; i++) { + target[i + targetStart] = this[i + start] + } + } else { + target._set(this.subarray(start, start + len), targetStart) + } + + return len +} + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill (value, start, end) { + if (!value) value = 0 + if (!start) start = 0 + if (!end) end = this.length + + if (end < start) throw new RangeError('end < start') + + // Fill 0 bytes; we're done + if (end === start) return + if (this.length === 0) return + + if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') + if (end < 0 || end > this.length) throw new RangeError('end out of bounds') + + var i + if (typeof value === 'number') { + for (i = start; i < end; i++) { + this[i] = value + } + } else { + var bytes = utf8ToBytes(value.toString()) + var len = bytes.length + for (i = start; i < end; i++) { + this[i] = bytes[i % len] + } + } + + return this +} + +/** + * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. + * Added in Node 0.12. Only available in browsers that support ArrayBuffer. + */ +Buffer.prototype.toArrayBuffer = function toArrayBuffer () { + if (typeof Uint8Array !== 'undefined') { + if (Buffer.TYPED_ARRAY_SUPPORT) { + return (new Buffer(this)).buffer + } else { + var buf = new Uint8Array(this.length) + for (var i = 0, len = buf.length; i < len; i += 1) { + buf[i] = this[i] + } + return buf.buffer + } + } else { + throw new TypeError('Buffer.toArrayBuffer not supported in this browser') + } +} + +// HELPER FUNCTIONS +// ================ + +var BP = Buffer.prototype + +/** + * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods + */ +Buffer._augment = function _augment (arr) { + arr.constructor = Buffer + arr._isBuffer = true + + // save reference to original Uint8Array set method before overwriting + arr._set = arr.set + + // deprecated + arr.get = BP.get + arr.set = BP.set + + arr.write = BP.write + arr.toString = BP.toString + arr.toLocaleString = BP.toString + arr.toJSON = BP.toJSON + arr.equals = BP.equals + arr.compare = BP.compare + arr.indexOf = BP.indexOf + arr.copy = BP.copy + arr.slice = BP.slice + arr.readUIntLE = BP.readUIntLE + arr.readUIntBE = BP.readUIntBE + arr.readUInt8 = BP.readUInt8 + arr.readUInt16LE = BP.readUInt16LE + arr.readUInt16BE = BP.readUInt16BE + arr.readUInt32LE = BP.readUInt32LE + arr.readUInt32BE = BP.readUInt32BE + arr.readIntLE = BP.readIntLE + arr.readIntBE = BP.readIntBE + arr.readInt8 = BP.readInt8 + arr.readInt16LE = BP.readInt16LE + arr.readInt16BE = BP.readInt16BE + arr.readInt32LE = BP.readInt32LE + arr.readInt32BE = BP.readInt32BE + arr.readFloatLE = BP.readFloatLE + arr.readFloatBE = BP.readFloatBE + arr.readDoubleLE = BP.readDoubleLE + arr.readDoubleBE = BP.readDoubleBE + arr.writeUInt8 = BP.writeUInt8 + arr.writeUIntLE = BP.writeUIntLE + arr.writeUIntBE = BP.writeUIntBE + arr.writeUInt16LE = BP.writeUInt16LE + arr.writeUInt16BE = BP.writeUInt16BE + arr.writeUInt32LE = BP.writeUInt32LE + arr.writeUInt32BE = BP.writeUInt32BE + arr.writeIntLE = BP.writeIntLE + arr.writeIntBE = BP.writeIntBE + arr.writeInt8 = BP.writeInt8 + arr.writeInt16LE = BP.writeInt16LE + arr.writeInt16BE = BP.writeInt16BE + arr.writeInt32LE = BP.writeInt32LE + arr.writeInt32BE = BP.writeInt32BE + arr.writeFloatLE = BP.writeFloatLE + arr.writeFloatBE = BP.writeFloatBE + arr.writeDoubleLE = BP.writeDoubleLE + arr.writeDoubleBE = BP.writeDoubleBE + arr.fill = BP.fill + arr.inspect = BP.inspect + arr.toArrayBuffer = BP.toArrayBuffer + + return arr +} + +var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; i++) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; i++) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; i++) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"base64-js":5,"ieee754":8,"is-array":9}],8:[function(require,module,exports){ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + +},{}],9:[function(require,module,exports){ + +/** + * isArray + */ + +var isArray = Array.isArray; + +/** + * toString + */ + +var str = Object.prototype.toString; + +/** + * Whether or not the given `val` + * is an array. + * + * example: + * + * isArray([]); + * // > true + * isArray(arguments); + * // > false + * isArray(''); + * // > false + * + * @param {mixed} val + * @return {bool} + */ + +module.exports = isArray || function (val) { + return !! val && '[object Array]' == str.call(val); +}; + +},{}],10:[function(require,module,exports){ +/** + * Determine if an object is Buffer + * + * Author: Feross Aboukhadijeh + * License: MIT + * + * `npm install is-buffer` + */ + +module.exports = function (obj) { + return !!(obj != null && + (obj._isBuffer || // For Safari 5-7 (missing Object.prototype.constructor) + (obj.constructor && + typeof obj.constructor.isBuffer === 'function' && + obj.constructor.isBuffer(obj)) + )) +} + +},{}],11:[function(require,module,exports){ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; +} + +module.exports = last; + +},{}],12:[function(require,module,exports){ +var arrayEvery = require('../internal/arrayEvery'), + baseCallback = require('../internal/baseCallback'), + baseEvery = require('../internal/baseEvery'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = baseCallback(predicate, thisArg, 3); + } + return func(collection, predicate); +} + +module.exports = every; + +},{"../internal/arrayEvery":14,"../internal/baseCallback":18,"../internal/baseEvery":22,"../internal/isIterateeCall":47,"../lang/isArray":56}],13:[function(require,module,exports){ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ +function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; +} + +module.exports = restParam; + +},{}],14:[function(require,module,exports){ +/** + * A specialized version of `_.every` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ +function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; +} + +module.exports = arrayEvery; + +},{}],15:[function(require,module,exports){ +/** + * A specialized version of `_.some` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; + +},{}],16:[function(require,module,exports){ +var keys = require('../object/keys'); + +/** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ +function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; +} + +module.exports = assignWith; + +},{"../object/keys":65}],17:[function(require,module,exports){ +var baseCopy = require('./baseCopy'), + keys = require('../object/keys'); + +/** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); +} + +module.exports = baseAssign; + +},{"../object/keys":65,"./baseCopy":19}],18:[function(require,module,exports){ +var baseMatches = require('./baseMatches'), + baseMatchesProperty = require('./baseMatchesProperty'), + bindCallback = require('./bindCallback'), + identity = require('../utility/identity'), + property = require('../utility/property'); + +/** + * The base implementation of `_.callback` which supports specifying the + * number of arguments to provide to `func`. + * + * @private + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ +function baseCallback(func, thisArg, argCount) { + var type = typeof func; + if (type == 'function') { + return thisArg === undefined + ? func + : bindCallback(func, thisArg, argCount); + } + if (func == null) { + return identity; + } + if (type == 'object') { + return baseMatches(func); + } + return thisArg === undefined + ? property(func) + : baseMatchesProperty(func, thisArg); +} + +module.exports = baseCallback; + +},{"../utility/identity":68,"../utility/property":69,"./baseMatches":29,"./baseMatchesProperty":30,"./bindCallback":35}],19:[function(require,module,exports){ +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ +function baseCopy(source, props, object) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + object[key] = source[key]; + } + return object; +} + +module.exports = baseCopy; + +},{}],20:[function(require,module,exports){ +var isObject = require('../lang/isObject'); + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(prototype) { + if (isObject(prototype)) { + object.prototype = prototype; + var result = new object; + object.prototype = undefined; + } + return result || {}; + }; +}()); + +module.exports = baseCreate; + +},{"../lang/isObject":60}],21:[function(require,module,exports){ +var baseForOwn = require('./baseForOwn'), + createBaseEach = require('./createBaseEach'); + +/** + * The base implementation of `_.forEach` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; + +},{"./baseForOwn":24,"./createBaseEach":37}],22:[function(require,module,exports){ +var baseEach = require('./baseEach'); + +/** + * The base implementation of `_.every` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ +function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; +} + +module.exports = baseEvery; + +},{"./baseEach":21}],23:[function(require,module,exports){ +var createBaseFor = require('./createBaseFor'); + +/** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; + +},{"./createBaseFor":38}],24:[function(require,module,exports){ +var baseFor = require('./baseFor'), + keys = require('../object/keys'); + +/** + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; + +},{"../object/keys":65,"./baseFor":23}],25:[function(require,module,exports){ +var toObject = require('./toObject'); + +/** + * The base implementation of `get` without support for string paths + * and default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path of the property to get. + * @param {string} [pathKey] The key representation of path. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path, pathKey) { + if (object == null) { + return; + } + if (pathKey !== undefined && pathKey in toObject(object)) { + path = [pathKey]; + } + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; + +},{"./toObject":53}],26:[function(require,module,exports){ +var baseIsEqualDeep = require('./baseIsEqualDeep'), + isObject = require('../lang/isObject'), + isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.isEqual` without support for `this` binding + * `customizer` functions. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); +} + +module.exports = baseIsEqual; + +},{"../lang/isObject":60,"./baseIsEqualDeep":27,"./isObjectLike":50}],27:[function(require,module,exports){ +var equalArrays = require('./equalArrays'), + equalByTag = require('./equalByTag'), + equalObjects = require('./equalObjects'), + isArray = require('../lang/isArray'), + isTypedArray = require('../lang/isTypedArray'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing objects. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `value` objects. + * @param {Array} [stackB=[]] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objToString.call(object); + if (objTag == argsTag) { + objTag = objectTag; + } else if (objTag != objectTag) { + objIsArr = isTypedArray(object); + } + } + if (!othIsArr) { + othTag = objToString.call(other); + if (othTag == argsTag) { + othTag = objectTag; + } else if (othTag != objectTag) { + othIsArr = isTypedArray(other); + } + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && !(objIsArr || objIsObj)) { + return equalByTag(object, other, objTag); + } + if (!isLoose) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); + } + } + if (!isSameTag) { + return false; + } + // Assume cyclic values are equal. + // For more information on detecting circular references see https://es5.github.io/#JO. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == object) { + return stackB[length] == other; + } + } + // Add `object` and `other` to the stack of traversed objects. + stackA.push(object); + stackB.push(other); + + var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); + + stackA.pop(); + stackB.pop(); + + return result; +} + +module.exports = baseIsEqualDeep; + +},{"../lang/isArray":56,"../lang/isTypedArray":62,"./equalArrays":39,"./equalByTag":40,"./equalObjects":41}],28:[function(require,module,exports){ +var baseIsEqual = require('./baseIsEqual'), + toObject = require('./toObject'); + +/** + * The base implementation of `_.isMatch` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} matchData The propery names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparing objects. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = toObject(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var result = customizer ? customizer(objValue, srcValue, key) : undefined; + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; + +},{"./baseIsEqual":26,"./toObject":53}],29:[function(require,module,exports){ +var baseIsMatch = require('./baseIsMatch'), + getMatchData = require('./getMatchData'), + toObject = require('./toObject'); + +/** + * The base implementation of `_.matches` which does not clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && (value !== undefined || (key in toObject(object))); + }; + } + return function(object) { + return baseIsMatch(object, matchData); + }; +} + +module.exports = baseMatches; + +},{"./baseIsMatch":28,"./getMatchData":43,"./toObject":53}],30:[function(require,module,exports){ +var baseGet = require('./baseGet'), + baseIsEqual = require('./baseIsEqual'), + baseSlice = require('./baseSlice'), + isArray = require('../lang/isArray'), + isKey = require('./isKey'), + isStrictComparable = require('./isStrictComparable'), + last = require('../array/last'), + toObject = require('./toObject'), + toPath = require('./toPath'); + +/** + * The base implementation of `_.matchesProperty` which does not clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to compare. + * @returns {Function} Returns the new function. + */ +function baseMatchesProperty(path, srcValue) { + var isArr = isArray(path), + isCommon = isKey(path) && isStrictComparable(srcValue), + pathKey = (path + ''); + + path = toPath(path); + return function(object) { + if (object == null) { + return false; + } + var key = pathKey; + object = toObject(object); + if ((isArr || !isCommon) && !(key in object)) { + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + key = last(path); + object = toObject(object); + } + return object[key] === srcValue + ? (srcValue !== undefined || (key in object)) + : baseIsEqual(srcValue, object[key], undefined, true); + }; +} + +module.exports = baseMatchesProperty; + +},{"../array/last":11,"../lang/isArray":56,"./baseGet":25,"./baseIsEqual":26,"./baseSlice":33,"./isKey":48,"./isStrictComparable":51,"./toObject":53,"./toPath":54}],31:[function(require,module,exports){ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; + +},{}],32:[function(require,module,exports){ +var baseGet = require('./baseGet'), + toPath = require('./toPath'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ +function basePropertyDeep(path) { + var pathKey = (path + ''); + path = toPath(path); + return function(object) { + return baseGet(object, path, pathKey); + }; +} + +module.exports = basePropertyDeep; + +},{"./baseGet":25,"./toPath":54}],33:[function(require,module,exports){ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; + +},{}],34:[function(require,module,exports){ +/** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` or `undefined` values. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + return value == null ? '' : (value + ''); +} + +module.exports = baseToString; + +},{}],35:[function(require,module,exports){ +var identity = require('../utility/identity'); + +/** + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ +function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; +} + +module.exports = bindCallback; + +},{"../utility/identity":68}],36:[function(require,module,exports){ +var bindCallback = require('./bindCallback'), + isIterateeCall = require('./isIterateeCall'), + restParam = require('../function/restParam'); + +/** + * Creates a `_.assign`, `_.defaults`, or `_.merge` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; + +},{"../function/restParam":13,"./bindCallback":35,"./isIterateeCall":47}],37:[function(require,module,exports){ +var getLength = require('./getLength'), + isLength = require('./isLength'), + toObject = require('./toObject'); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + return eachFunc(collection, iteratee); + } + var index = fromRight ? length : -1, + iterable = toObject(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +module.exports = createBaseEach; + +},{"./getLength":42,"./isLength":49,"./toObject":53}],38:[function(require,module,exports){ +var toObject = require('./toObject'); + +/** + * Creates a base function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; + +},{"./toObject":53}],39:[function(require,module,exports){ +var arraySome = require('./arraySome'); + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing arrays. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { + var index = -1, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isLoose && othLength > arrLength)) { + return false; + } + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index], + result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; + + if (result !== undefined) { + if (result) { + continue; + } + return false; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isLoose) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); + })) { + return false; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { + return false; + } + } + return true; +} + +module.exports = equalArrays; + +},{"./arraySome":15}],40:[function(require,module,exports){ +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag) { + switch (tag) { + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) + ? other != +other + : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + } + return false; +} + +module.exports = equalByTag; + +},{}],41:[function(require,module,exports){ +var keys = require('../object/keys'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isLoose) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var skipCtor = isLoose; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key], + result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; + + // Recursively compare objects (susceptible to call stack limits). + if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { + return false; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (!skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + return false; + } + } + return true; +} + +module.exports = equalObjects; + +},{"../object/keys":65}],42:[function(require,module,exports){ +var baseProperty = require('./baseProperty'); + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +module.exports = getLength; + +},{"./baseProperty":31}],43:[function(require,module,exports){ +var isStrictComparable = require('./isStrictComparable'), + pairs = require('../object/pairs'); + +/** + * Gets the propery names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = pairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; +} + +module.exports = getMatchData; + +},{"../object/pairs":67,"./isStrictComparable":51}],44:[function(require,module,exports){ +var isNative = require('../lang/isNative'); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; +} + +module.exports = getNative; + +},{"../lang/isNative":59}],45:[function(require,module,exports){ +var getLength = require('./getLength'), + isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +module.exports = isArrayLike; + +},{"./getLength":42,"./isLength":49}],46:[function(require,module,exports){ +/** Used to detect unsigned integer values. */ +var reIsUint = /^\d+$/; + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; +} + +module.exports = isIndex; + +},{}],47:[function(require,module,exports){ +var isArrayLike = require('./isArrayLike'), + isIndex = require('./isIndex'), + isObject = require('../lang/isObject'); + +/** + * Checks if the provided arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + var other = object[index]; + return value === value ? (value === other) : (other !== other); + } + return false; +} + +module.exports = isIterateeCall; + +},{"../lang/isObject":60,"./isArrayLike":45,"./isIndex":46}],48:[function(require,module,exports){ +var isArray = require('../lang/isArray'), + toObject = require('./toObject'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + var type = typeof value; + if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { + return true; + } + if (isArray(value)) { + return false; + } + var result = !reIsDeepProp.test(value); + return result || (object != null && value in toObject(object)); +} + +module.exports = isKey; + +},{"../lang/isArray":56,"./toObject":53}],49:[function(require,module,exports){ +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; + +},{}],50:[function(require,module,exports){ +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +module.exports = isObjectLike; + +},{}],51:[function(require,module,exports){ +var isObject = require('../lang/isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; + +},{"../lang/isObject":60}],52:[function(require,module,exports){ +var isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isIndex = require('./isIndex'), + isLength = require('./isLength'), + keysIn = require('../object/keysIn'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; + + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)); + + var index = -1, + result = []; + + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; +} + +module.exports = shimKeys; + +},{"../lang/isArguments":55,"../lang/isArray":56,"../object/keysIn":66,"./isIndex":46,"./isLength":49}],53:[function(require,module,exports){ +var isObject = require('../lang/isObject'); + +/** + * Converts `value` to an object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Object} Returns the object. + */ +function toObject(value) { + return isObject(value) ? value : Object(value); +} + +module.exports = toObject; + +},{"../lang/isObject":60}],54:[function(require,module,exports){ +var baseToString = require('./baseToString'), + isArray = require('../lang/isArray'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `value` to property path array if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array} Returns the property path array. + */ +function toPath(value) { + if (isArray(value)) { + return value; + } + var result = []; + baseToString(value).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +} + +module.exports = toPath; + +},{"../lang/isArray":56,"./baseToString":34}],55:[function(require,module,exports){ +var isArrayLike = require('../internal/isArrayLike'), + isObjectLike = require('../internal/isObjectLike'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Native method references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is classified as an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); +} + +module.exports = isArguments; + +},{"../internal/isArrayLike":45,"../internal/isObjectLike":50}],56:[function(require,module,exports){ +var getNative = require('../internal/getNative'), + isLength = require('../internal/isLength'), + isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var arrayTag = '[object Array]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsArray = getNative(Array, 'isArray'); + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false + */ +var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; +}; + +module.exports = isArray; + +},{"../internal/getNative":44,"../internal/isLength":49,"../internal/isObjectLike":50}],57:[function(require,module,exports){ +var isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('../internal/isArrayLike'), + isFunction = require('./isFunction'), + isObjectLike = require('../internal/isObjectLike'), + isString = require('./isString'), + keys = require('../object/keys'); + +/** + * Checks if `value` is empty. A value is considered empty unless it's an + * `arguments` object, array, string, or jQuery-like collection with a length + * greater than `0` or an object with own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + (isObjectLike(value) && isFunction(value.splice)))) { + return !value.length; + } + return !keys(value).length; +} + +module.exports = isEmpty; + +},{"../internal/isArrayLike":45,"../internal/isObjectLike":50,"../object/keys":65,"./isArguments":55,"./isArray":56,"./isFunction":58,"./isString":61}],58:[function(require,module,exports){ +var isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var funcTag = '[object Function]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 which returns 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; +} + +module.exports = isFunction; + +},{"./isObject":60}],59:[function(require,module,exports){ +var isFunction = require('./isFunction'), + isObjectLike = require('../internal/isObjectLike'); + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var fnToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); +} + +module.exports = isNative; + +},{"../internal/isObjectLike":50,"./isFunction":58}],60:[function(require,module,exports){ +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + +},{}],61:[function(require,module,exports){ +var isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); +} + +module.exports = isString; + +},{"../internal/isObjectLike":50}],62:[function(require,module,exports){ +var isLength = require('../internal/isLength'), + isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dateTag] = typedArrayTags[errorTag] = +typedArrayTags[funcTag] = typedArrayTags[mapTag] = +typedArrayTags[numberTag] = typedArrayTags[objectTag] = +typedArrayTags[regexpTag] = typedArrayTags[setTag] = +typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +function isTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; +} + +module.exports = isTypedArray; + +},{"../internal/isLength":49,"../internal/isObjectLike":50}],63:[function(require,module,exports){ +var assignWith = require('../internal/assignWith'), + baseAssign = require('../internal/baseAssign'), + createAssigner = require('../internal/createAssigner'); + +/** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources overwrite property assignments of previous sources. + * If `customizer` is provided it's invoked to produce the assigned values. + * The `customizer` is bound to `thisArg` and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * **Note:** This method mutates `object` and is based on + * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign). + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using a customizer callback + * var defaults = _.partialRight(_.assign, function(value, other) { + * return _.isUndefined(value) ? other : value; + * }); + * + * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ +var assign = createAssigner(function(object, source, customizer) { + return customizer + ? assignWith(object, source, customizer) + : baseAssign(object, source); +}); + +module.exports = assign; + +},{"../internal/assignWith":16,"../internal/baseAssign":17,"../internal/createAssigner":36}],64:[function(require,module,exports){ +var baseAssign = require('../internal/baseAssign'), + baseCreate = require('../internal/baseCreate'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties, guard) { + var result = baseCreate(prototype); + if (guard && isIterateeCall(prototype, properties, guard)) { + properties = undefined; + } + return properties ? baseAssign(result, properties) : result; +} + +module.exports = create; + +},{"../internal/baseAssign":17,"../internal/baseCreate":20,"../internal/isIterateeCall":47}],65:[function(require,module,exports){ +var getNative = require('../internal/getNative'), + isArrayLike = require('../internal/isArrayLike'), + isObject = require('../lang/isObject'), + shimKeys = require('../internal/shimKeys'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeKeys = getNative(Object, 'keys'); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? undefined : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object != 'function' && isArrayLike(object))) { + return shimKeys(object); + } + return isObject(object) ? nativeKeys(object) : []; +}; + +module.exports = keys; + +},{"../internal/getNative":44,"../internal/isArrayLike":45,"../internal/shimKeys":52,"../lang/isObject":60}],66:[function(require,module,exports){ +var isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isIndex = require('../internal/isIndex'), + isLength = require('../internal/isLength'), + isObject = require('../lang/isObject'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length; + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0; + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor == 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0; + + while (++index < length) { + result[index] = (index + ''); + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = keysIn; + +},{"../internal/isIndex":46,"../internal/isLength":49,"../lang/isArguments":55,"../lang/isArray":56,"../lang/isObject":60}],67:[function(require,module,exports){ +var keys = require('./keys'), + toObject = require('../internal/toObject'); + +/** + * Creates a two dimensional array of the key-value pairs for `object`, + * e.g. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) + */ +function pairs(object) { + object = toObject(object); + + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; + } + return result; +} + +module.exports = pairs; + +},{"../internal/toObject":53,"./keys":65}],68:[function(require,module,exports){ +/** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; + +},{}],69:[function(require,module,exports){ +var baseProperty = require('../internal/baseProperty'), + basePropertyDeep = require('../internal/basePropertyDeep'), + isKey = require('../internal/isKey'); + +/** + * Creates a function that returns the property value at `path` on a + * given object. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + * @example + * + * var objects = [ + * { 'a': { 'b': { 'c': 2 } } }, + * { 'a': { 'b': { 'c': 1 } } } + * ]; + * + * _.map(objects, _.property('a.b.c')); + * // => [2, 1] + * + * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(path) : basePropertyDeep(path); +} + +module.exports = property; + +},{"../internal/baseProperty":31,"../internal/basePropertyDeep":32,"../internal/isKey":48}],70:[function(require,module,exports){ +(function (global){ + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],71:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, create; + + create = require('lodash/object/create'); + + module.exports = XMLAttribute = (function() { + function XMLAttribute(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing attribute name of element " + parent.name); + } + if (value == null) { + throw new Error("Missing attribute value for attribute " + name + " of element " + parent.name); + } + this.name = this.stringify.attName(name); + this.value = this.stringify.attValue(value); + } + + XMLAttribute.prototype.clone = function() { + return create(XMLAttribute.prototype, this); + }; + + XMLAttribute.prototype.toString = function(options, level) { + return ' ' + this.name + '="' + this.value + '"'; + }; + + return XMLAttribute; + + })(); + +}).call(this); + +},{"lodash/object/create":64}],72:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLBuilder, XMLDeclaration, XMLDocType, XMLElement, XMLStringifier; + + XMLStringifier = require('./XMLStringifier'); + + XMLDeclaration = require('./XMLDeclaration'); + + XMLDocType = require('./XMLDocType'); + + XMLElement = require('./XMLElement'); + + module.exports = XMLBuilder = (function() { + function XMLBuilder(name, options) { + var root, temp; + if (name == null) { + throw new Error("Root element needs a name"); + } + if (options == null) { + options = {}; + } + this.options = options; + this.stringify = new XMLStringifier(options); + temp = new XMLElement(this, 'doc'); + root = temp.element(name); + root.isRoot = true; + root.documentObject = this; + this.rootObject = root; + if (!options.headless) { + root.declaration(options); + if ((options.pubID != null) || (options.sysID != null)) { + root.doctype(options); + } + } + } + + XMLBuilder.prototype.root = function() { + return this.rootObject; + }; + + XMLBuilder.prototype.end = function(options) { + return this.toString(options); + }; + + XMLBuilder.prototype.toString = function(options) { + var indent, newline, offset, pretty, r, ref, ref1, ref2; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + r = ''; + if (this.xmldec != null) { + r += this.xmldec.toString(options); + } + if (this.doctype != null) { + r += this.doctype.toString(options); + } + r += this.rootObject.toString(options); + if (pretty && r.slice(-newline.length) === newline) { + r = r.slice(0, -newline.length); + } + return r; + }; + + return XMLBuilder; + + })(); + +}).call(this); + +},{"./XMLDeclaration":79,"./XMLDocType":80,"./XMLElement":81,"./XMLStringifier":85}],73:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLCData = (function(superClass) { + extend(XMLCData, superClass); + + function XMLCData(parent, text) { + XMLCData.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing CDATA text"); + } + this.text = this.stringify.cdata(text); + } + + XMLCData.prototype.clone = function() { + return create(XMLCData.prototype, this); + }; + + XMLCData.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLCData; + + })(XMLNode); + +}).call(this); + +},{"./XMLNode":82,"lodash/object/create":64}],74:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLComment, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLComment = (function(superClass) { + extend(XMLComment, superClass); + + function XMLComment(parent, text) { + XMLComment.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing comment text"); + } + this.text = this.stringify.comment(text); + } + + XMLComment.prototype.clone = function() { + return create(XMLComment.prototype, this); + }; + + XMLComment.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLComment; + + })(XMLNode); + +}).call(this); + +},{"./XMLNode":82,"lodash/object/create":64}],75:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDAttList, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDAttList = (function() { + function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) { + this.stringify = parent.stringify; + if (elementName == null) { + throw new Error("Missing DTD element name"); + } + if (attributeName == null) { + throw new Error("Missing DTD attribute name"); + } + if (!attributeType) { + throw new Error("Missing DTD attribute type"); + } + if (!defaultValueType) { + throw new Error("Missing DTD attribute default"); + } + if (defaultValueType.indexOf('#') !== 0) { + defaultValueType = '#' + defaultValueType; + } + if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) { + throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT"); + } + if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) { + throw new Error("Default value only applies to #FIXED or #DEFAULT"); + } + this.elementName = this.stringify.eleName(elementName); + this.attributeName = this.stringify.attName(attributeName); + this.attributeType = this.stringify.dtdAttType(attributeType); + this.defaultValue = this.stringify.dtdAttDefault(defaultValue); + this.defaultValueType = defaultValueType; + } + + XMLDTDAttList.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDAttList; + + })(); + +}).call(this); + +},{"lodash/object/create":64}],76:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDElement, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDElement = (function() { + function XMLDTDElement(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing DTD element name"); + } + if (!value) { + value = '(#PCDATA)'; + } + if (Array.isArray(value)) { + value = '(' + value.join(',') + ')'; + } + this.name = this.stringify.eleName(name); + this.value = this.stringify.dtdElementValue(value); + } + + XMLDTDElement.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDElement; + + })(); + +}).call(this); + +},{"lodash/object/create":64}],77:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDEntity, create, isObject; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + module.exports = XMLDTDEntity = (function() { + function XMLDTDEntity(parent, pe, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing entity name"); + } + if (value == null) { + throw new Error("Missing entity value"); + } + this.pe = !!pe; + this.name = this.stringify.eleName(name); + if (!isObject(value)) { + this.value = this.stringify.dtdEntityValue(value); + } else { + if (!value.pubID && !value.sysID) { + throw new Error("Public and/or system identifiers are required for an external entity"); + } + if (value.pubID && !value.sysID) { + throw new Error("System identifier is required for a public external entity"); + } + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + if (value.nData != null) { + this.nData = this.stringify.dtdNData(value.nData); + } + if (this.pe && this.nData) { + throw new Error("Notation declaration is not allowed in a parameter entity"); + } + } + } + + XMLDTDEntity.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDEntity; + + })(); + +}).call(this); + +},{"lodash/lang/isObject":60,"lodash/object/create":64}],78:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDNotation, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDNotation = (function() { + function XMLDTDNotation(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing notation name"); + } + if (!value.pubID && !value.sysID) { + throw new Error("Public or system identifiers are required for an external entity"); + } + this.name = this.stringify.eleName(name); + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + } + + XMLDTDNotation.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDNotation; + + })(); + +}).call(this); + +},{"lodash/object/create":64}],79:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDeclaration, XMLNode, create, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLDeclaration = (function(superClass) { + extend(XMLDeclaration, superClass); + + function XMLDeclaration(parent, version, encoding, standalone) { + var ref; + XMLDeclaration.__super__.constructor.call(this, parent); + if (isObject(version)) { + ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone; + } + if (!version) { + version = '1.0'; + } + this.version = this.stringify.xmlVersion(version); + if (encoding != null) { + this.encoding = this.stringify.xmlEncoding(encoding); + } + if (standalone != null) { + this.standalone = this.stringify.xmlStandalone(standalone); + } + } + + XMLDeclaration.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDeclaration; + + })(XMLNode); + +}).call(this); + +},{"./XMLNode":82,"lodash/lang/isObject":60,"lodash/object/create":64}],80:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLProcessingInstruction, create, isObject; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + XMLCData = require('./XMLCData'); + + XMLComment = require('./XMLComment'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLDocType = (function() { + function XMLDocType(parent, pubID, sysID) { + var ref, ref1; + this.documentObject = parent; + this.stringify = this.documentObject.stringify; + this.children = []; + if (isObject(pubID)) { + ref = pubID, pubID = ref.pubID, sysID = ref.sysID; + } + if (sysID == null) { + ref1 = [pubID, sysID], sysID = ref1[0], pubID = ref1[1]; + } + if (pubID != null) { + this.pubID = this.stringify.dtdPubID(pubID); + } + if (sysID != null) { + this.sysID = this.stringify.dtdSysID(sysID); + } + } + + XMLDocType.prototype.element = function(name, value) { + var child; + child = new XMLDTDElement(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + var child; + child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.entity = function(name, value) { + var child; + child = new XMLDTDEntity(this, false, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.pEntity = function(name, value) { + var child; + child = new XMLDTDEntity(this, true, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.notation = function(name, value) { + var child; + child = new XMLDTDNotation(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.instruction = function(target, value) { + var child; + child = new XMLProcessingInstruction(this, target, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.root = function() { + return this.documentObject.root(); + }; + + XMLDocType.prototype.document = function() { + return this.documentObject; + }; + + XMLDocType.prototype.toString = function(options, level) { + var child, i, indent, len, newline, offset, pretty, r, ref, ref1, ref2, ref3, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ' 0) { + r += ' ['; + if (pretty) { + r += newline; + } + ref3 = this.children; + for (i = 0, len = ref3.length; i < len; i++) { + child = ref3[i]; + r += child.toString(options, level + 1); + } + r += ']'; + } + r += '>'; + if (pretty) { + r += newline; + } + return r; + }; + + XMLDocType.prototype.ele = function(name, value) { + return this.element(name, value); + }; + + XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue); + }; + + XMLDocType.prototype.ent = function(name, value) { + return this.entity(name, value); + }; + + XMLDocType.prototype.pent = function(name, value) { + return this.pEntity(name, value); + }; + + XMLDocType.prototype.not = function(name, value) { + return this.notation(name, value); + }; + + XMLDocType.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLDocType.prototype.com = function(value) { + return this.comment(value); + }; + + XMLDocType.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLDocType.prototype.up = function() { + return this.root(); + }; + + XMLDocType.prototype.doc = function() { + return this.document(); + }; + + return XMLDocType; + + })(); + +}).call(this); + +},{"./XMLCData":73,"./XMLComment":74,"./XMLDTDAttList":75,"./XMLDTDElement":76,"./XMLDTDEntity":77,"./XMLDTDNotation":78,"./XMLProcessingInstruction":83,"lodash/lang/isObject":60,"lodash/object/create":64}],81:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, create, every, isFunction, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + isFunction = require('lodash/lang/isFunction'); + + every = require('lodash/collection/every'); + + XMLNode = require('./XMLNode'); + + XMLAttribute = require('./XMLAttribute'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLElement = (function(superClass) { + extend(XMLElement, superClass); + + function XMLElement(parent, name, attributes) { + XMLElement.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing element name"); + } + this.name = this.stringify.eleName(name); + this.children = []; + this.instructions = []; + this.attributes = {}; + if (attributes != null) { + this.attribute(attributes); + } + } + + XMLElement.prototype.clone = function() { + var att, attName, clonedSelf, i, len, pi, ref, ref1; + clonedSelf = create(XMLElement.prototype, this); + if (clonedSelf.isRoot) { + clonedSelf.documentObject = null; + } + clonedSelf.attributes = {}; + ref = this.attributes; + for (attName in ref) { + if (!hasProp.call(ref, attName)) continue; + att = ref[attName]; + clonedSelf.attributes[attName] = att.clone(); + } + clonedSelf.instructions = []; + ref1 = this.instructions; + for (i = 0, len = ref1.length; i < len; i++) { + pi = ref1[i]; + clonedSelf.instructions.push(pi.clone()); + } + clonedSelf.children = []; + this.children.forEach(function(child) { + var clonedChild; + clonedChild = child.clone(); + clonedChild.parent = clonedSelf; + return clonedSelf.children.push(clonedChild); + }); + return clonedSelf; + }; + + XMLElement.prototype.attribute = function(name, value) { + var attName, attValue; + if (name != null) { + name = name.valueOf(); + } + if (isObject(name)) { + for (attName in name) { + if (!hasProp.call(name, attName)) continue; + attValue = name[attName]; + this.attribute(attName, attValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + if (!this.options.skipNullAttributes || (value != null)) { + this.attributes[name] = new XMLAttribute(this, name, value); + } + } + return this; + }; + + XMLElement.prototype.removeAttribute = function(name) { + var attName, i, len; + if (name == null) { + throw new Error("Missing attribute name"); + } + name = name.valueOf(); + if (Array.isArray(name)) { + for (i = 0, len = name.length; i < len; i++) { + attName = name[i]; + delete this.attributes[attName]; + } + } else { + delete this.attributes[name]; + } + return this; + }; + + XMLElement.prototype.instruction = function(target, value) { + var i, insTarget, insValue, instruction, len; + if (target != null) { + target = target.valueOf(); + } + if (value != null) { + value = value.valueOf(); + } + if (Array.isArray(target)) { + for (i = 0, len = target.length; i < len; i++) { + insTarget = target[i]; + this.instruction(insTarget); + } + } else if (isObject(target)) { + for (insTarget in target) { + if (!hasProp.call(target, insTarget)) continue; + insValue = target[insTarget]; + this.instruction(insTarget, insValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + instruction = new XMLProcessingInstruction(this, target, value); + this.instructions.push(instruction); + } + return this; + }; + + XMLElement.prototype.toString = function(options, level) { + var att, child, i, indent, instruction, j, len, len1, name, newline, offset, pretty, r, ref, ref1, ref2, ref3, ref4, ref5, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + ref3 = this.instructions; + for (i = 0, len = ref3.length; i < len; i++) { + instruction = ref3[i]; + r += instruction.toString(options, level); + } + if (pretty) { + r += space; + } + r += '<' + this.name; + ref4 = this.attributes; + for (name in ref4) { + if (!hasProp.call(ref4, name)) continue; + att = ref4[name]; + r += att.toString(options); + } + if (this.children.length === 0 || every(this.children, function(e) { + return e.value === ''; + })) { + r += '/>'; + if (pretty) { + r += newline; + } + } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) { + r += '>'; + r += this.children[0].value; + r += ''; + r += newline; + } else { + r += '>'; + if (pretty) { + r += newline; + } + ref5 = this.children; + for (j = 0, len1 = ref5.length; j < len1; j++) { + child = ref5[j]; + r += child.toString(options, level + 1); + } + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + } + return r; + }; + + XMLElement.prototype.att = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLElement.prototype.a = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.i = function(target, value) { + return this.instruction(target, value); + }; + + return XMLElement; + + })(XMLNode); + +}).call(this); + +},{"./XMLAttribute":71,"./XMLNode":82,"./XMLProcessingInstruction":83,"lodash/collection/every":12,"lodash/lang/isFunction":58,"lodash/lang/isObject":60,"lodash/object/create":64}],82:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLElement, XMLNode, XMLRaw, XMLText, isEmpty, isFunction, isObject, + hasProp = {}.hasOwnProperty; + + isObject = require('lodash/lang/isObject'); + + isFunction = require('lodash/lang/isFunction'); + + isEmpty = require('lodash/lang/isEmpty'); + + XMLElement = null; + + XMLCData = null; + + XMLComment = null; + + XMLDeclaration = null; + + XMLDocType = null; + + XMLRaw = null; + + XMLText = null; + + module.exports = XMLNode = (function() { + function XMLNode(parent) { + this.parent = parent; + this.options = this.parent.options; + this.stringify = this.parent.stringify; + if (XMLElement === null) { + XMLElement = require('./XMLElement'); + XMLCData = require('./XMLCData'); + XMLComment = require('./XMLComment'); + XMLDeclaration = require('./XMLDeclaration'); + XMLDocType = require('./XMLDocType'); + XMLRaw = require('./XMLRaw'); + XMLText = require('./XMLText'); + } + } + + XMLNode.prototype.element = function(name, attributes, text) { + var childNode, item, j, k, key, lastChild, len, len1, ref, val; + lastChild = null; + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + if (name != null) { + name = name.valueOf(); + } + if (Array.isArray(name)) { + for (j = 0, len = name.length; j < len; j++) { + item = name[j]; + lastChild = this.element(item); + } + } else if (isFunction(name)) { + lastChild = this.element(name.apply()); + } else if (isObject(name)) { + for (key in name) { + if (!hasProp.call(name, key)) continue; + val = name[key]; + if (isFunction(val)) { + val = val.apply(); + } + if ((isObject(val)) && (isEmpty(val))) { + val = null; + } + if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) { + lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val); + } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) { + lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val); + } else if (Array.isArray(val)) { + for (k = 0, len1 = val.length; k < len1; k++) { + item = val[k]; + childNode = {}; + childNode[key] = item; + lastChild = this.element(childNode); + } + } else if (isObject(val)) { + lastChild = this.element(key); + lastChild.element(val); + } else { + lastChild = this.element(key, val); + } + } + } else { + if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) { + lastChild = this.text(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) { + lastChild = this.cdata(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) { + lastChild = this.comment(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) { + lastChild = this.raw(text); + } else { + lastChild = this.node(name, attributes, text); + } + } + if (lastChild == null) { + throw new Error("Could not create any elements with: " + name); + } + return lastChild; + }; + + XMLNode.prototype.insertBefore = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.insertAfter = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i + 1); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.remove = function() { + var i, ref; + if (this.isRoot) { + throw new Error("Cannot remove the root element"); + } + i = this.parent.children.indexOf(this); + [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref = [])), ref; + return this.parent; + }; + + XMLNode.prototype.node = function(name, attributes, text) { + var child, ref; + if (name != null) { + name = name.valueOf(); + } + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + child = new XMLElement(this, name, attributes); + if (text != null) { + child.text(text); + } + this.children.push(child); + return child; + }; + + XMLNode.prototype.text = function(value) { + var child; + child = new XMLText(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.raw = function(value) { + var child; + child = new XMLRaw(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.declaration = function(version, encoding, standalone) { + var doc, xmldec; + doc = this.document(); + xmldec = new XMLDeclaration(doc, version, encoding, standalone); + doc.xmldec = xmldec; + return doc.root(); + }; + + XMLNode.prototype.doctype = function(pubID, sysID) { + var doc, doctype; + doc = this.document(); + doctype = new XMLDocType(doc, pubID, sysID); + doc.doctype = doctype; + return doctype; + }; + + XMLNode.prototype.up = function() { + if (this.isRoot) { + throw new Error("The root node has no parent. Use doc() if you need to get the document object."); + } + return this.parent; + }; + + XMLNode.prototype.root = function() { + var child; + if (this.isRoot) { + return this; + } + child = this.parent; + while (!child.isRoot) { + child = child.parent; + } + return child; + }; + + XMLNode.prototype.document = function() { + return this.root().documentObject; + }; + + XMLNode.prototype.end = function(options) { + return this.document().toString(options); + }; + + XMLNode.prototype.prev = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i < 1) { + throw new Error("Already at the first node"); + } + return this.parent.children[i - 1]; + }; + + XMLNode.prototype.next = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i === -1 || i === this.parent.children.length - 1) { + throw new Error("Already at the last node"); + } + return this.parent.children[i + 1]; + }; + + XMLNode.prototype.importXMLBuilder = function(xmlbuilder) { + var clonedRoot; + clonedRoot = xmlbuilder.root().clone(); + clonedRoot.parent = this; + clonedRoot.isRoot = false; + this.children.push(clonedRoot); + return this; + }; + + XMLNode.prototype.ele = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.nod = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.txt = function(value) { + return this.text(value); + }; + + XMLNode.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.com = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.doc = function() { + return this.document(); + }; + + XMLNode.prototype.dec = function(version, encoding, standalone) { + return this.declaration(version, encoding, standalone); + }; + + XMLNode.prototype.dtd = function(pubID, sysID) { + return this.doctype(pubID, sysID); + }; + + XMLNode.prototype.e = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.n = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.t = function(value) { + return this.text(value); + }; + + XMLNode.prototype.d = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.c = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.r = function(value) { + return this.raw(value); + }; + + XMLNode.prototype.u = function() { + return this.up(); + }; + + return XMLNode; + + })(); + +}).call(this); + +},{"./XMLCData":73,"./XMLComment":74,"./XMLDeclaration":79,"./XMLDocType":80,"./XMLElement":81,"./XMLRaw":84,"./XMLText":86,"lodash/lang/isEmpty":57,"lodash/lang/isFunction":58,"lodash/lang/isObject":60}],83:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLProcessingInstruction, create; + + create = require('lodash/object/create'); + + module.exports = XMLProcessingInstruction = (function() { + function XMLProcessingInstruction(parent, target, value) { + this.stringify = parent.stringify; + if (target == null) { + throw new Error("Missing instruction target"); + } + this.target = this.stringify.insTarget(target); + if (value) { + this.value = this.stringify.insValue(value); + } + } + + XMLProcessingInstruction.prototype.clone = function() { + return create(XMLProcessingInstruction.prototype, this); + }; + + XMLProcessingInstruction.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLProcessingInstruction; + + })(); + +}).call(this); + +},{"lodash/object/create":64}],84:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLNode, XMLRaw, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLRaw = (function(superClass) { + extend(XMLRaw, superClass); + + function XMLRaw(parent, text) { + XMLRaw.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing raw text"); + } + this.value = this.stringify.raw(text); + } + + XMLRaw.prototype.clone = function() { + return create(XMLRaw.prototype, this); + }; + + XMLRaw.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += this.value; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLRaw; + + })(XMLNode); + +}).call(this); + +},{"./XMLNode":82,"lodash/object/create":64}],85:[function(require,module,exports){ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLStringifier, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + hasProp = {}.hasOwnProperty; + + module.exports = XMLStringifier = (function() { + function XMLStringifier(options) { + this.assertLegalChar = bind(this.assertLegalChar, this); + var key, ref, value; + this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0; + ref = (options != null ? options.stringify : void 0) || {}; + for (key in ref) { + if (!hasProp.call(ref, key)) continue; + value = ref[key]; + this[key] = value; + } + } + + XMLStringifier.prototype.eleName = function(val) { + val = '' + val || ''; + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.eleText = function(val) { + val = '' + val || ''; + return this.assertLegalChar(this.elEscape(val)); + }; + + XMLStringifier.prototype.cdata = function(val) { + val = '' + val || ''; + if (val.match(/]]>/)) { + throw new Error("Invalid CDATA text: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.comment = function(val) { + val = '' + val || ''; + if (val.match(/--/)) { + throw new Error("Comment text cannot contain double-hypen: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.raw = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attName = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attValue = function(val) { + val = '' + val || ''; + return this.attEscape(val); + }; + + XMLStringifier.prototype.insTarget = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.insValue = function(val) { + val = '' + val || ''; + if (val.match(/\?>/)) { + throw new Error("Invalid processing instruction value: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlVersion = function(val) { + val = '' + val || ''; + if (!val.match(/1\.[0-9]+/)) { + throw new Error("Invalid version number: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlEncoding = function(val) { + val = '' + val || ''; + if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-]|-)*$/)) { + throw new Error("Invalid encoding: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlStandalone = function(val) { + if (val) { + return "yes"; + } else { + return "no"; + } + }; + + XMLStringifier.prototype.dtdPubID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdSysID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdElementValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttType = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttDefault = function(val) { + if (val != null) { + return '' + val || ''; + } else { + return val; + } + }; + + XMLStringifier.prototype.dtdEntityValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdNData = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.convertAttKey = '@'; + + XMLStringifier.prototype.convertPIKey = '?'; + + XMLStringifier.prototype.convertTextKey = '#text'; + + XMLStringifier.prototype.convertCDataKey = '#cdata'; + + XMLStringifier.prototype.convertCommentKey = '#comment'; + + XMLStringifier.prototype.convertRawKey = '#raw'; + + XMLStringifier.prototype.assertLegalChar = function(str) { + var chars, chr; + if (this.allowSurrogateChars) { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/; + } else { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/; + } + chr = str.match(chars); + if (chr) { + throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index); + } + return str; + }; + + XMLStringifier.prototype.elEscape = function(str) { + return str.replace(/&/g, '&').replace(//g, '>').replace(/\r/g, ' '); + }; + + XMLStringifier.prototype.attEscape = function(str) { + return str.replace(/&/g, '&').replace(/','amp':'&','quot':'"','apos':"'"} + if(locator){ + domBuilder.setDocumentLocator(locator) + } + + sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); + sax.domBuilder = options.domBuilder || domBuilder; + if(/\/x?html?$/.test(mimeType)){ + entityMap.nbsp = '\xa0'; + entityMap.copy = '\xa9'; + defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; + } + if(source){ + sax.parse(source,defaultNSMap,entityMap); + }else{ + sax.errorHandler.error("invalid document source"); + } + return domBuilder.document; +} +function buildErrorHandler(errorImpl,domBuilder,locator){ + if(!errorImpl){ + if(domBuilder instanceof DOMHandler){ + return domBuilder; + } + errorImpl = domBuilder ; + } + var errorHandler = {} + var isCallback = errorImpl instanceof Function; + locator = locator||{} + function build(key){ + var fn = errorImpl[key]; + if(!fn){ + if(isCallback){ + fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; + }else{ + var i=arguments.length; + while(--i){ + if(fn = errorImpl[arguments[i]]){ + break; + } + } + } + } + errorHandler[key] = fn && function(msg){ + fn(msg+_locator(locator)); + }||function(){}; + } + build('warning','warn'); + build('error','warn','warning'); + build('fatalError','warn','warning','error'); + return errorHandler; +} +/** + * +ContentHandler+ErrorHandler + * +LexicalHandler+EntityResolver2 + * -DeclHandler-DTDHandler + * + * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler + * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 + * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html + */ +function DOMHandler() { + this.cdata = false; +} +function position(locator,node){ + node.lineNumber = locator.lineNumber; + node.columnNumber = locator.columnNumber; +} +/** + * @see org.xml.sax.ContentHandler#startDocument + * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html + */ +DOMHandler.prototype = { + startDocument : function() { + this.document = new DOMImplementation().createDocument(null, null, null); + if (this.locator) { + this.document.documentURI = this.locator.systemId; + } + }, + startElement:function(namespaceURI, localName, qName, attrs) { + var doc = this.document; + var el = doc.createElementNS(namespaceURI, qName||localName); + var len = attrs.length; + appendElement(this, el); + this.currentElement = el; + + this.locator && position(this.locator,el) + for (var i = 0 ; i < len; i++) { + var namespaceURI = attrs.getURI(i); + var value = attrs.getValue(i); + var qName = attrs.getQName(i); + var attr = doc.createAttributeNS(namespaceURI, qName); + if( attr.getOffset){ + position(attr.getOffset(1),attr) + } + attr.value = attr.nodeValue = value; + el.setAttributeNode(attr) + } + }, + endElement:function(namespaceURI, localName, qName) { + var current = this.currentElement + var tagName = current.tagName; + this.currentElement = current.parentNode; + }, + startPrefixMapping:function(prefix, uri) { + }, + endPrefixMapping:function(prefix) { + }, + processingInstruction:function(target, data) { + var ins = this.document.createProcessingInstruction(target, data); + this.locator && position(this.locator,ins) + appendElement(this, ins); + }, + ignorableWhitespace:function(ch, start, length) { + }, + characters:function(chars, start, length) { + chars = _toString.apply(this,arguments) + //console.log(chars) + if(this.currentElement && chars){ + if (this.cdata) { + var charNode = this.document.createCDATASection(chars); + this.currentElement.appendChild(charNode); + } else { + var charNode = this.document.createTextNode(chars); + this.currentElement.appendChild(charNode); + } + this.locator && position(this.locator,charNode) + } + }, + skippedEntity:function(name) { + }, + endDocument:function() { + this.document.normalize(); + }, + setDocumentLocator:function (locator) { + if(this.locator = locator){// && !('lineNumber' in locator)){ + locator.lineNumber = 0; + } + }, + //LexicalHandler + comment:function(chars, start, length) { + chars = _toString.apply(this,arguments) + var comm = this.document.createComment(chars); + this.locator && position(this.locator,comm) + appendElement(this, comm); + }, + + startCDATA:function() { + //used in characters() methods + this.cdata = true; + }, + endCDATA:function() { + this.cdata = false; + }, + + startDTD:function(name, publicId, systemId) { + var impl = this.document.implementation; + if (impl && impl.createDocumentType) { + var dt = impl.createDocumentType(name, publicId, systemId); + this.locator && position(this.locator,dt) + appendElement(this, dt); + } + }, + /** + * @see org.xml.sax.ErrorHandler + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + warning:function(error) { + console.warn(error,_locator(this.locator)); + }, + error:function(error) { + console.error(error,_locator(this.locator)); + }, + fatalError:function(error) { + console.error(error,_locator(this.locator)); + throw error; + } +} +function _locator(l){ + if(l){ + return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' + } +} +function _toString(chars,start,length){ + if(typeof chars == 'string'){ + return chars.substr(start,length) + }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") + if(chars.length >= start+length || start){ + return new java.lang.String(chars,start,length)+''; + } + return chars; + } +} + +/* + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html + * used method of org.xml.sax.ext.LexicalHandler: + * #comment(chars, start, length) + * #startCDATA() + * #endCDATA() + * #startDTD(name, publicId, systemId) + * + * + * IGNORED method of org.xml.sax.ext.LexicalHandler: + * #endDTD() + * #startEntity(name) + * #endEntity(name) + * + * + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html + * IGNORED method of org.xml.sax.ext.DeclHandler + * #attributeDecl(eName, aName, type, mode, value) + * #elementDecl(name, model) + * #externalEntityDecl(name, publicId, systemId) + * #internalEntityDecl(name, value) + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html + * IGNORED method of org.xml.sax.EntityResolver2 + * #resolveEntity(String name,String publicId,String baseURI,String systemId) + * #resolveEntity(publicId, systemId) + * #getExternalSubset(name, baseURI) + * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html + * IGNORED method of org.xml.sax.DTDHandler + * #notationDecl(name, publicId, systemId) {}; + * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; + */ +"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ + DOMHandler.prototype[key] = function(){return null} +}) + +/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ +function appendElement (hander,node) { + if (!hander.currentElement) { + hander.document.appendChild(node); + } else { + hander.currentElement.appendChild(node); + } +}//appendChild and setAttributeNS are preformance key + +if(typeof require == 'function'){ + var XMLReader = require('./sax').XMLReader; + var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation; + exports.XMLSerializer = require('./dom').XMLSerializer ; + exports.DOMParser = DOMParser; +} + +},{"./dom":89,"./sax":90}],89:[function(require,module,exports){ +/* + * DOM Level 2 + * Object DOMException + * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html + */ + +function copy(src,dest){ + for(var p in src){ + dest[p] = src[p]; + } +} +/** +^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? +^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? + */ +function _extends(Class,Super){ + var pt = Class.prototype; + if(Object.create){ + var ppt = Object.create(Super.prototype) + pt.__proto__ = ppt; + } + if(!(pt instanceof Super)){ + function t(){}; + t.prototype = Super.prototype; + t = new t(); + copy(pt,t); + Class.prototype = pt = t; + } + if(pt.constructor != Class){ + if(typeof Class != 'function'){ + console.error("unknow Class:"+Class) + } + pt.constructor = Class + } +} +var htmlns = 'http://www.w3.org/1999/xhtml' ; +// Node Types +var NodeType = {} +var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; +var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; +var TEXT_NODE = NodeType.TEXT_NODE = 3; +var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; +var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; +var ENTITY_NODE = NodeType.ENTITY_NODE = 6; +var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; +var COMMENT_NODE = NodeType.COMMENT_NODE = 8; +var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; +var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; +var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; +var NOTATION_NODE = NodeType.NOTATION_NODE = 12; + +// ExceptionCode +var ExceptionCode = {} +var ExceptionMessage = {}; +var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); +var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); +var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); +var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); +var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); +var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); +var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); +var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); +var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); +var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); +//level2 +var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); +var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); +var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); +var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); +var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); + + +function DOMException(code, message) { + if(message instanceof Error){ + var error = message; + }else{ + error = this; + Error.call(this, ExceptionMessage[code]); + this.message = ExceptionMessage[code]; + if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); + } + error.code = code; + if(message) this.message = this.message + ": " + message; + return error; +}; +DOMException.prototype = Error.prototype; +copy(ExceptionCode,DOMException) +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177 + * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live. + * The items in the NodeList are accessible via an integral index, starting from 0. + */ +function NodeList() { +}; +NodeList.prototype = { + /** + * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. + * @standard level1 + */ + length:0, + /** + * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. + * @standard level1 + * @param index unsigned long + * Index into the collection. + * @return Node + * The node at the indexth position in the NodeList, or null if that is not a valid index. + */ + item: function(index) { + return this[index] || null; + } +}; +function LiveNodeList(node,refresh){ + this._node = node; + this._refresh = refresh + _updateLiveList(this); +} +function _updateLiveList(list){ + var inc = list._node._inc || list._node.ownerDocument._inc; + if(list._inc != inc){ + var ls = list._refresh(list._node); + //console.log(ls.length) + __set__(list,'length',ls.length); + copy(ls,list); + list._inc = inc; + } +} +LiveNodeList.prototype.item = function(i){ + _updateLiveList(this); + return this[i]; +} + +_extends(LiveNodeList,NodeList); +/** + * + * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes. + * NamedNodeMap objects in the DOM are live. + * used for attributes or DocumentType entities + */ +function NamedNodeMap() { +}; + +function _findNodeIndex(list,node){ + var i = list.length; + while(i--){ + if(list[i] === node){return i} + } +} + +function _addNamedNode(el,list,newAttr,oldAttr){ + if(oldAttr){ + list[_findNodeIndex(list,oldAttr)] = newAttr; + }else{ + list[list.length++] = newAttr; + } + if(el){ + newAttr.ownerElement = el; + var doc = el.ownerDocument; + if(doc){ + oldAttr && _onRemoveAttribute(doc,el,oldAttr); + _onAddAttribute(doc,el,newAttr); + } + } +} +function _removeNamedNode(el,list,attr){ + var i = _findNodeIndex(list,attr); + if(i>=0){ + var lastIndex = list.length-1 + while(i0 || key == 'xmlns'){ +// return null; +// } + var i = this.length; + while(i--){ + var attr = this[i]; + if(attr.nodeName == key){ + return attr; + } + } + }, + setNamedItem: function(attr) { + var el = attr.ownerElement; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + var oldAttr = this.getNamedItem(attr.nodeName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + /* returns Node */ + setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR + var el = attr.ownerElement, oldAttr; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + + /* returns Node */ + removeNamedItem: function(key) { + var attr = this.getNamedItem(key); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + + + },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR + + //for level2 + removeNamedItemNS:function(namespaceURI,localName){ + var attr = this.getNamedItemNS(namespaceURI,localName); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + }, + getNamedItemNS: function(namespaceURI, localName) { + var i = this.length; + while(i--){ + var node = this[i]; + if(node.localName == localName && node.namespaceURI == namespaceURI){ + return node; + } + } + return null; + } +}; +/** + * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 + */ +function DOMImplementation(/* Object */ features) { + this._features = {}; + if (features) { + for (var feature in features) { + this._features = features[feature]; + } + } +}; + +DOMImplementation.prototype = { + hasFeature: function(/* string */ feature, /* string */ version) { + var versions = this._features[feature.toLowerCase()]; + if (versions && (!version || version in versions)) { + return true; + } else { + return false; + } + }, + // Introduced in DOM Level 2: + createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR + var doc = new Document(); + doc.doctype = doctype; + if(doctype){ + doc.appendChild(doctype); + } + doc.implementation = this; + doc.childNodes = new NodeList(); + if(qualifiedName){ + var root = doc.createElementNS(namespaceURI,qualifiedName); + doc.appendChild(root); + } + return doc; + }, + // Introduced in DOM Level 2: + createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR + var node = new DocumentType(); + node.name = qualifiedName; + node.nodeName = qualifiedName; + node.publicId = publicId; + node.systemId = systemId; + // Introduced in DOM Level 2: + //readonly attribute DOMString internalSubset; + + //TODO:.. + // readonly attribute NamedNodeMap entities; + // readonly attribute NamedNodeMap notations; + return node; + } +}; + + +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 + */ + +function Node() { +}; + +Node.prototype = { + firstChild : null, + lastChild : null, + previousSibling : null, + nextSibling : null, + attributes : null, + parentNode : null, + childNodes : null, + ownerDocument : null, + nodeValue : null, + namespaceURI : null, + prefix : null, + localName : null, + // Modified in DOM Level 2: + insertBefore:function(newChild, refChild){//raises + return _insertBefore(this,newChild,refChild); + }, + replaceChild:function(newChild, oldChild){//raises + this.insertBefore(newChild,oldChild); + if(oldChild){ + this.removeChild(oldChild); + } + }, + removeChild:function(oldChild){ + return _removeChild(this,oldChild); + }, + appendChild:function(newChild){ + return this.insertBefore(newChild,null); + }, + hasChildNodes:function(){ + return this.firstChild != null; + }, + cloneNode:function(deep){ + return cloneNode(this.ownerDocument||this,this,deep); + }, + // Modified in DOM Level 2: + normalize:function(){ + var child = this.firstChild; + while(child){ + var next = child.nextSibling; + if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ + this.removeChild(next); + child.appendData(next.data); + }else{ + child.normalize(); + child = next; + } + } + }, + // Introduced in DOM Level 2: + isSupported:function(feature, version){ + return this.ownerDocument.implementation.hasFeature(feature,version); + }, + // Introduced in DOM Level 2: + hasAttributes:function(){ + return this.attributes.length>0; + }, + lookupPrefix:function(namespaceURI){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + for(var n in map){ + if(map[n] == namespaceURI){ + return n; + } + } + } + el = el.nodeType == 2?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + lookupNamespaceURI:function(prefix){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + if(prefix in map){ + return map[prefix] ; + } + } + el = el.nodeType == 2?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + isDefaultNamespace:function(namespaceURI){ + var prefix = this.lookupPrefix(namespaceURI); + return prefix == null; + } +}; + + +function _xmlEncoder(c){ + return c == '<' && '<' || + c == '>' && '>' || + c == '&' && '&' || + c == '"' && '"' || + '&#'+c.charCodeAt()+';' +} + + +copy(NodeType,Node); +copy(NodeType,Node.prototype); + +/** + * @param callback return true for continue,false for break + * @return boolean true: break visit; + */ +function _visitNode(node,callback){ + if(callback(node)){ + return true; + } + if(node = node.firstChild){ + do{ + if(_visitNode(node,callback)){return true} + }while(node=node.nextSibling) + } +} + + + +function Document(){ +} +function _onAddAttribute(doc,el,newAttr){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value + } +} +function _onRemoveAttribute(doc,el,newAttr,remove){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + delete el._nsMap[newAttr.prefix?newAttr.localName:''] + } +} +function _onUpdateChild(doc,el,newChild){ + if(doc && doc._inc){ + doc._inc++; + //update childNodes + var cs = el.childNodes; + if(newChild){ + cs[cs.length++] = newChild; + }else{ + //console.log(1) + var child = el.firstChild; + var i = 0; + while(child){ + cs[i++] = child; + child =child.nextSibling; + } + cs.length = i; + } + } +} + +/** + * attributes; + * children; + * + * writeable properties: + * nodeValue,Attr:value,CharacterData:data + * prefix + */ +function _removeChild(parentNode,child){ + var previous = child.previousSibling; + var next = child.nextSibling; + if(previous){ + previous.nextSibling = next; + }else{ + parentNode.firstChild = next + } + if(next){ + next.previousSibling = previous; + }else{ + parentNode.lastChild = previous; + } + _onUpdateChild(parentNode.ownerDocument,parentNode); + return child; +} +/** + * preformance key(refChild == null) + */ +function _insertBefore(parentNode,newChild,nextChild){ + var cp = newChild.parentNode; + if(cp){ + cp.removeChild(newChild);//remove and update + } + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + var newFirst = newChild.firstChild; + if (newFirst == null) { + return newChild; + } + var newLast = newChild.lastChild; + }else{ + newFirst = newLast = newChild; + } + var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; + + newFirst.previousSibling = pre; + newLast.nextSibling = nextChild; + + + if(pre){ + pre.nextSibling = newFirst; + }else{ + parentNode.firstChild = newFirst; + } + if(nextChild == null){ + parentNode.lastChild = newLast; + }else{ + nextChild.previousSibling = newLast; + } + do{ + newFirst.parentNode = parentNode; + }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) + _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); + //console.log(parentNode.lastChild.nextSibling == null) + if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { + newChild.firstChild = newChild.lastChild = null; + } + return newChild; +} +function _appendSingleChild(parentNode,newChild){ + var cp = newChild.parentNode; + if(cp){ + var pre = parentNode.lastChild; + cp.removeChild(newChild);//remove and update + var pre = parentNode.lastChild; + } + var pre = parentNode.lastChild; + newChild.parentNode = parentNode; + newChild.previousSibling = pre; + newChild.nextSibling = null; + if(pre){ + pre.nextSibling = newChild; + }else{ + parentNode.firstChild = newChild; + } + parentNode.lastChild = newChild; + _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); + return newChild; + //console.log("__aa",parentNode.lastChild.nextSibling == null) +} +Document.prototype = { + //implementation : null, + nodeName : '#document', + nodeType : DOCUMENT_NODE, + doctype : null, + documentElement : null, + _inc : 1, + + insertBefore : function(newChild, refChild){//raises + if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ + var child = newChild.firstChild; + while(child){ + var next = child.nextSibling; + this.insertBefore(child,refChild); + child = next; + } + return newChild; + } + if(this.documentElement == null && newChild.nodeType == 1){ + this.documentElement = newChild; + } + + return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; + }, + removeChild : function(oldChild){ + if(this.documentElement == oldChild){ + this.documentElement = null; + } + return _removeChild(this,oldChild); + }, + // Introduced in DOM Level 2: + importNode : function(importedNode,deep){ + return importNode(this,importedNode,deep); + }, + // Introduced in DOM Level 2: + getElementById : function(id){ + var rtv = null; + _visitNode(this.documentElement,function(node){ + if(node.nodeType == 1){ + if(node.getAttribute('id') == id){ + rtv = node; + return true; + } + } + }) + return rtv; + }, + + //document factory method: + createElement : function(tagName){ + var node = new Element(); + node.ownerDocument = this; + node.nodeName = tagName; + node.tagName = tagName; + node.childNodes = new NodeList(); + var attrs = node.attributes = new NamedNodeMap(); + attrs._ownerElement = node; + return node; + }, + createDocumentFragment : function(){ + var node = new DocumentFragment(); + node.ownerDocument = this; + node.childNodes = new NodeList(); + return node; + }, + createTextNode : function(data){ + var node = new Text(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createComment : function(data){ + var node = new Comment(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createCDATASection : function(data){ + var node = new CDATASection(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createProcessingInstruction : function(target,data){ + var node = new ProcessingInstruction(); + node.ownerDocument = this; + node.tagName = node.target = target; + node.nodeValue= node.data = data; + return node; + }, + createAttribute : function(name){ + var node = new Attr(); + node.ownerDocument = this; + node.name = name; + node.nodeName = name; + node.localName = name; + node.specified = true; + return node; + }, + createEntityReference : function(name){ + var node = new EntityReference(); + node.ownerDocument = this; + node.nodeName = name; + return node; + }, + // Introduced in DOM Level 2: + createElementNS : function(namespaceURI,qualifiedName){ + var node = new Element(); + var pl = qualifiedName.split(':'); + var attrs = node.attributes = new NamedNodeMap(); + node.childNodes = new NodeList(); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.tagName = qualifiedName; + node.namespaceURI = namespaceURI; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + attrs._ownerElement = node; + return node; + }, + // Introduced in DOM Level 2: + createAttributeNS : function(namespaceURI,qualifiedName){ + var node = new Attr(); + var pl = qualifiedName.split(':'); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.name = qualifiedName; + node.namespaceURI = namespaceURI; + node.specified = true; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + return node; + } +}; +_extends(Document,Node); + + +function Element() { + this._nsMap = {}; +}; +Element.prototype = { + nodeType : ELEMENT_NODE, + hasAttribute : function(name){ + return this.getAttributeNode(name)!=null; + }, + getAttribute : function(name){ + var attr = this.getAttributeNode(name); + return attr && attr.value || ''; + }, + getAttributeNode : function(name){ + return this.attributes.getNamedItem(name); + }, + setAttribute : function(name, value){ + var attr = this.ownerDocument.createAttribute(name); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + removeAttribute : function(name){ + var attr = this.getAttributeNode(name) + attr && this.removeAttributeNode(attr); + }, + + //four real opeartion method + appendChild:function(newChild){ + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + return this.insertBefore(newChild,null); + }else{ + return _appendSingleChild(this,newChild); + } + }, + setAttributeNode : function(newAttr){ + return this.attributes.setNamedItem(newAttr); + }, + setAttributeNodeNS : function(newAttr){ + return this.attributes.setNamedItemNS(newAttr); + }, + removeAttributeNode : function(oldAttr){ + return this.attributes.removeNamedItem(oldAttr.nodeName); + }, + //get real attribute name,and remove it by removeAttributeNode + removeAttributeNS : function(namespaceURI, localName){ + var old = this.getAttributeNodeNS(namespaceURI, localName); + old && this.removeAttributeNode(old); + }, + + hasAttributeNS : function(namespaceURI, localName){ + return this.getAttributeNodeNS(namespaceURI, localName)!=null; + }, + getAttributeNS : function(namespaceURI, localName){ + var attr = this.getAttributeNodeNS(namespaceURI, localName); + return attr && attr.value || ''; + }, + setAttributeNS : function(namespaceURI, qualifiedName, value){ + var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); + attr.value = attr.nodeValue = value; + this.setAttributeNode(attr) + }, + getAttributeNodeNS : function(namespaceURI, localName){ + return this.attributes.getNamedItemNS(namespaceURI, localName); + }, + + getElementsByTagName : function(tagName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ + ls.push(node); + } + }); + return ls; + }); + }, + getElementsByTagNameNS : function(namespaceURI, localName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType === ELEMENT_NODE && node.namespaceURI === namespaceURI && (localName === '*' || node.localName == localName)){ + ls.push(node); + } + }); + return ls; + }); + } +}; +Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; +Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; + + +_extends(Element,Node); +function Attr() { +}; +Attr.prototype.nodeType = ATTRIBUTE_NODE; +_extends(Attr,Node); + + +function CharacterData() { +}; +CharacterData.prototype = { + data : '', + substringData : function(offset, count) { + return this.data.substring(offset, offset+count); + }, + appendData: function(text) { + text = this.data+text; + this.nodeValue = this.data = text; + this.length = text.length; + }, + insertData: function(offset,text) { + this.replaceData(offset,0,text); + + }, + appendChild:function(newChild){ + //if(!(newChild instanceof CharacterData)){ + throw new Error(ExceptionMessage[3]) + //} + return Node.prototype.appendChild.apply(this,arguments) + }, + deleteData: function(offset, count) { + this.replaceData(offset,count,""); + }, + replaceData: function(offset, count, text) { + var start = this.data.substring(0,offset); + var end = this.data.substring(offset+count); + text = start + text + end; + this.nodeValue = this.data = text; + this.length = text.length; + } +} +_extends(CharacterData,Node); +function Text() { +}; +Text.prototype = { + nodeName : "#text", + nodeType : TEXT_NODE, + splitText : function(offset) { + var text = this.data; + var newText = text.substring(offset); + text = text.substring(0, offset); + this.data = this.nodeValue = text; + this.length = text.length; + var newNode = this.ownerDocument.createTextNode(newText); + if(this.parentNode){ + this.parentNode.insertBefore(newNode, this.nextSibling); + } + return newNode; + } +} +_extends(Text,CharacterData); +function Comment() { +}; +Comment.prototype = { + nodeName : "#comment", + nodeType : COMMENT_NODE +} +_extends(Comment,CharacterData); + +function CDATASection() { +}; +CDATASection.prototype = { + nodeName : "#cdata-section", + nodeType : CDATA_SECTION_NODE +} +_extends(CDATASection,CharacterData); + + +function DocumentType() { +}; +DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; +_extends(DocumentType,Node); + +function Notation() { +}; +Notation.prototype.nodeType = NOTATION_NODE; +_extends(Notation,Node); + +function Entity() { +}; +Entity.prototype.nodeType = ENTITY_NODE; +_extends(Entity,Node); + +function EntityReference() { +}; +EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; +_extends(EntityReference,Node); + +function DocumentFragment() { +}; +DocumentFragment.prototype.nodeName = "#document-fragment"; +DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; +_extends(DocumentFragment,Node); + + +function ProcessingInstruction() { +} +ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; +_extends(ProcessingInstruction,Node); +function XMLSerializer(){} +XMLSerializer.prototype.serializeToString = function(node){ + var buf = []; + serializeToString(node,buf); + return buf.join(''); +} +Node.prototype.toString =function(){ + return XMLSerializer.prototype.serializeToString(this); +} +function serializeToString(node,buf){ + switch(node.nodeType){ + case ELEMENT_NODE: + var attrs = node.attributes; + var len = attrs.length; + var child = node.firstChild; + var nodeName = node.tagName; + var isHTML = htmlns === node.namespaceURI + buf.push('<',nodeName); + for(var i=0;i'); + //if is cdata child node + if(isHTML && /^script$/i.test(nodeName)){ + if(child){ + buf.push(child.data); + } + }else{ + while(child){ + serializeToString(child,buf); + child = child.nextSibling; + } + } + buf.push(''); + }else{ + buf.push('/>'); + } + return; + case DOCUMENT_NODE: + case DOCUMENT_FRAGMENT_NODE: + var child = node.firstChild; + while(child){ + serializeToString(child,buf); + child = child.nextSibling; + } + return; + case ATTRIBUTE_NODE: + return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); + case TEXT_NODE: + return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); + case CDATA_SECTION_NODE: + return buf.push( ''); + case COMMENT_NODE: + return buf.push( ""); + case DOCUMENT_TYPE_NODE: + var pubid = node.publicId; + var sysid = node.systemId; + buf.push(''); + }else if(sysid && sysid!='.'){ + buf.push(' SYSTEM "',sysid,'">'); + }else{ + var sub = node.internalSubset; + if(sub){ + buf.push(" [",sub,"]"); + } + buf.push(">"); + } + return; + case PROCESSING_INSTRUCTION_NODE: + return buf.push( ""); + case ENTITY_REFERENCE_NODE: + return buf.push( '&',node.nodeName,';'); + //case ENTITY_NODE: + //case NOTATION_NODE: + default: + buf.push('??',node.nodeName); + } +} +function importNode(doc,node,deep){ + var node2; + switch (node.nodeType) { + case ELEMENT_NODE: + node2 = node.cloneNode(false); + node2.ownerDocument = doc; + //var attrs = node2.attributes; + //var len = attrs.length; + //for(var i=0;i + +function XMLReader(){ + +} + +XMLReader.prototype = { + parse:function(source,defaultNSMap,entityMap){ + var domBuilder = this.domBuilder; + domBuilder.startDocument(); + _copy(defaultNSMap ,defaultNSMap = {}) + parse(source,defaultNSMap,entityMap, + domBuilder,this.errorHandler); + domBuilder.endDocument(); + } +} +function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ + function fixedFromCharCode(code) { + // String.prototype.fromCharCode does not supports + // > 2 bytes unicode chars directly + if (code > 0xffff) { + code -= 0x10000; + var surrogate1 = 0xd800 + (code >> 10) + , surrogate2 = 0xdc00 + (code & 0x3ff); + + return String.fromCharCode(surrogate1, surrogate2); + } else { + return String.fromCharCode(code); + } + } + function entityReplacer(a){ + var k = a.slice(1,-1); + if(k in entityMap){ + return entityMap[k]; + }else if(k.charAt(0) === '#'){ + return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) + }else{ + errorHandler.error('entity not found:'+a); + return a; + } + } + function appendText(end){//has some bugs + var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); + locator&&position(start); + domBuilder.characters(xt,0,end-start); + start = end + } + function position(start,m){ + while(start>=endPos && (m = linePattern.exec(source))){ + startPos = m.index; + endPos = startPos + m[0].length; + locator.lineNumber++; + //console.log('line++:',locator,startPos,endPos) + } + locator.columnNumber = start-startPos+1; + } + var startPos = 0; + var endPos = 0; + var linePattern = /.+(?:\r\n?|\n)|.*$/g + var locator = domBuilder.locator; + + var parseStack = [{currentNSMap:defaultNSMapCopy}] + var closeMap = {}; + var start = 0; + while(true){ + var i = source.indexOf('<',start); + if(i<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.document; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } + if(i>start){ + appendText(i); + } + switch(source.charAt(i+1)){ + case '/': + var end = source.indexOf('>',i+3); + var tagName = source.substring(i+2,end); + var config = parseStack.pop(); + var localNSMap = config.localNSMap; + + if(config.tagName != tagName){ + errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); + } + domBuilder.endElement(config.uri,config.localName,tagName); + if(localNSMap){ + for(var prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) ; + } + } + end++; + break; + // end elment + case '?':// + locator&&position(i); + end = parseInstruction(source,i,domBuilder); + break; + case '!':// 0){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + el.add(attrName,value,start-1); + s = S_E; + }else{ + //fatalError: no end quot match + throw new Error('attribute value no end \''+c+'\' match'); + } + }else if(s == S_V){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + //console.log(attrName,value,start,p) + el.add(attrName,value,start); + //console.dir(el) + errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); + start = p+1; + s = S_E + }else{ + //fatalError: no equal before + throw new Error('attribute value must after "="'); + } + break; + case '/': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_E: + case S_S: + case S_C: + s = S_C; + el.closed = true; + case S_V: + case S_ATTR: + case S_ATTR_S: + break; + //case S_EQ: + default: + throw new Error("attribute invalid close char('/')") + } + break; + case ''://end document + //throw new Error('unexpected end of input') + errorHandler.error('unexpected end of input'); + case '>': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_E: + case S_S: + case S_C: + break;//normal + case S_V://Compatible state + case S_ATTR: + value = source.slice(start,p); + if(value.slice(-1) === '/'){ + el.closed = true; + value = value.slice(0,-1) + } + case S_ATTR_S: + if(s === S_ATTR_S){ + value = attrName; + } + if(s == S_V){ + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) + }else{ + errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') + el.add(value,value,start) + } + break; + case S_EQ: + throw new Error('attribute value missed!!'); + } +// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) + return p; + /*xml space '\x20' | #x9 | #xD | #xA; */ + case '\u0080': + c = ' '; + default: + if(c<= ' '){//space + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p));//tagName + s = S_S; + break; + case S_ATTR: + attrName = source.slice(start,p) + s = S_ATTR_S; + break; + case S_V: + var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value,start) + case S_E: + s = S_S; + break; + //case S_S: + //case S_EQ: + //case S_ATTR_S: + // void();break; + //case S_C: + //ignore warning + } + }else{//not space +//S_TAG, S_ATTR, S_EQ, S_V +//S_ATTR_S, S_E, S_S, S_C + switch(s){ + //case S_TAG:void();break; + //case S_ATTR:void();break; + //case S_V:void();break; + case S_ATTR_S: + errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!') + el.add(attrName,attrName,start); + start = p; + s = S_ATTR; + break; + case S_E: + errorHandler.warning('attribute space is required"'+attrName+'"!!') + case S_S: + s = S_ATTR; + start = p; + break; + case S_EQ: + s = S_V; + start = p; + break; + case S_C: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + } + p++; + } +} +/** + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function appendElement(el,domBuilder,parseStack){ + var tagName = el.tagName; + var localNSMap = null; + var currentNSMap = parseStack[parseStack.length-1].currentNSMap; + var i = el.length; + while(i--){ + var a = el[i]; + var qName = a.qName; + var value = a.value; + var nsp = qName.indexOf(':'); + if(nsp>0){ + var prefix = a.prefix = qName.slice(0,nsp); + var localName = qName.slice(nsp+1); + var nsPrefix = prefix === 'xmlns' && localName + }else{ + localName = qName; + prefix = null + nsPrefix = qName === 'xmlns' && '' + } + //can not set prefix,because prefix !== '' + a.localName = localName ; + //prefix == null for no ns prefix attribute + if(nsPrefix !== false){//hack!! + if(localNSMap == null){ + localNSMap = {} + //console.log(currentNSMap,0) + _copy(currentNSMap,currentNSMap={}) + //console.log(currentNSMap,1) + } + currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; + a.uri = 'http://www.w3.org/2000/xmlns/' + domBuilder.startPrefixMapping(nsPrefix, value) + } + } + var i = el.length; + while(i--){ + a = el[i]; + var prefix = a.prefix; + if(prefix){//no prefix attribute has no namespace + if(prefix === 'xml'){ + a.uri = 'http://www.w3.org/XML/1998/namespace'; + }if(prefix !== 'xmlns'){ + a.uri = currentNSMap[prefix] + + //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} + } + } + } + var nsp = tagName.indexOf(':'); + if(nsp>0){ + prefix = el.prefix = tagName.slice(0,nsp); + localName = el.localName = tagName.slice(nsp+1); + }else{ + prefix = null;//important!! + localName = el.localName = tagName; + } + //no prefix element has default namespace + var ns = el.uri = currentNSMap[prefix || '']; + domBuilder.startElement(ns,localName,tagName,el); + //endPrefixMapping and startPrefixMapping have not any help for dom builder + //localNSMap = null + if(el.closed){ + domBuilder.endElement(ns,localName,tagName); + if(localNSMap){ + for(prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) + } + } + }else{ + el.currentNSMap = currentNSMap; + el.localNSMap = localNSMap; + parseStack.push(el); + } +} +function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ + if(/^(?:script|textarea)$/i.test(tagName)){ + var elEndStart = source.indexOf('',elStartEnd); + var text = source.substring(elStartEnd+1,elEndStart); + if(/[&<]/.test(text)){ + if(/^script$/i.test(tagName)){ + //if(!/\]\]>/.test(text)){ + //lexHandler.startCDATA(); + domBuilder.characters(text,0,text.length); + //lexHandler.endCDATA(); + return elEndStart; + //} + }//}else{//text area + text = text.replace(/&#?\w+;/g,entityReplacer); + domBuilder.characters(text,0,text.length); + return elEndStart; + //} + + } + } + return elStartEnd+1; +} +function fixSelfClosed(source,elStartEnd,tagName,closeMap){ + //if(tagName in closeMap){ + var pos = closeMap[tagName]; + if(pos == null){ + //console.log(tagName) + pos = closeMap[tagName] = source.lastIndexOf('') + } + return pos',start+4); + //append comment source.substring(4,end)//, + * and raw CDATA nodes. + * + * @param {Element} node + * @returns {Boolean} + * @api private + */ + +function shouldIgnoreNode (node) { + return node.nodeType === 3 // text + || node.nodeType === 8 // comment + || node.nodeType === 4; // cdata +} + + +/** + * Parses a Plist XML string. Returns an Object. + * + * @param {String} xml - the XML String to decode + * @returns {Mixed} the decoded value from the Plist XML + * @api public + */ + +function parse (xml) { + var doc = new DOMParser().parseFromString(xml); + if (doc.documentElement.nodeName !== 'plist') { + throw new Error('malformed document. First element should be '); + } + var plist = parsePlistXML(doc.documentElement); + + // the root node gets interpreted as an Array, + // so pull out the inner data first + if (plist.length == 1) plist = plist[0]; + + return plist; +} + +/** + * Parses a Plist XML string. Returns an Object. Takes a `callback` function. + * + * @param {String} xml - the XML String to decode + * @param {Function} callback - callback function + * @returns {Mixed} the decoded value from the Plist XML + * @api public + * @deprecated not actually async. use parse() instead + */ + +function parseString (xml, callback) { + var doc, error, plist; + try { + doc = new DOMParser().parseFromString(xml); + plist = parsePlistXML(doc.documentElement); + } catch(e) { + error = e; + } + callback(error, plist); +} + +/** + * Parses a Plist XML string. Returns an Object. + * + * @param {String} xml - the XML String to decode + * @param {Function} callback - callback function + * @returns {Mixed} the decoded value from the Plist XML + * @api public + * @deprecated use parse() instead + */ + +function parseStringSync (xml) { + var doc = new DOMParser().parseFromString(xml); + var plist; + if (doc.documentElement.nodeName !== 'plist') { + throw new Error('malformed document. First element should be '); + } + plist = parsePlistXML(doc.documentElement); + + // if the plist is an array with 1 element, pull it out of the array + if (plist.length == 1) { + plist = plist[0]; + } + return plist; +} + +/** + * Convert an XML based plist document into a JSON representation. + * + * @param {Object} xml_node - current XML node in the plist + * @returns {Mixed} built up JSON object + * @api private + */ + +function parsePlistXML (node) { + var i, new_obj, key, val, new_arr, res, d; + + if (!node) + return null; + + if (node.nodeName === 'plist') { + new_arr = []; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + new_arr.push( parsePlistXML(node.childNodes[i])); + } + } + return new_arr; + + } else if (node.nodeName === 'dict') { + new_obj = {}; + key = null; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + if (key === null) { + key = parsePlistXML(node.childNodes[i]); + } else { + new_obj[key] = parsePlistXML(node.childNodes[i]); + key = null; + } + } + } + return new_obj; + + } else if (node.nodeName === 'array') { + new_arr = []; + for (i=0; i < node.childNodes.length; i++) { + // ignore comment nodes (text) + if (!shouldIgnoreNode(node.childNodes[i])) { + res = parsePlistXML(node.childNodes[i]); + if (null != res) new_arr.push(res); + } + } + return new_arr; + + } else if (node.nodeName === '#text') { + // TODO: what should we do with text types? (CDATA sections) + + } else if (node.nodeName === 'key') { + return node.childNodes[0].nodeValue; + + } else if (node.nodeName === 'string') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + res += node.childNodes[d].nodeValue; + } + return res; + + } else if (node.nodeName === 'integer') { + // parse as base 10 integer + return parseInt(node.childNodes[0].nodeValue, 10); + + } else if (node.nodeName === 'real') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + if (node.childNodes[d].nodeType === 3) { + res += node.childNodes[d].nodeValue; + } + } + return parseFloat(res); + + } else if (node.nodeName === 'data') { + res = ''; + for (d=0; d < node.childNodes.length; d++) { + if (node.childNodes[d].nodeType === 3) { + res += node.childNodes[d].nodeValue.replace(/\s+/g, ''); + } + } + + // decode base64 data to a Buffer instance + return new Buffer(res, 'base64'); + + } else if (node.nodeName === 'date') { + return new Date(node.childNodes[0].nodeValue); + + } else if (node.nodeName === 'true') { + return true; + + } else if (node.nodeName === 'false') { + return false; + } +} diff --git a/platforms/android/cordova/node_modules/plist/lib/plist.js b/platforms/android/cordova/node_modules/plist/lib/plist.js new file mode 100644 index 0000000..00a4167 --- /dev/null +++ b/platforms/android/cordova/node_modules/plist/lib/plist.js @@ -0,0 +1,23 @@ + +var i; + +/** + * Parser functions. + */ + +var parserFunctions = require('./parse'); +for (i in parserFunctions) exports[i] = parserFunctions[i]; + +/** + * Builder functions. + */ + +var builderFunctions = require('./build'); +for (i in builderFunctions) exports[i] = builderFunctions[i]; + +/** + * Add Node.js-specific functions (they're deprecated…). + */ + +var nodeFunctions = require('./node'); +for (i in nodeFunctions) exports[i] = nodeFunctions[i]; diff --git a/platforms/android/cordova/node_modules/plist/package.json b/platforms/android/cordova/node_modules/plist/package.json new file mode 100644 index 0000000..dddb405 --- /dev/null +++ b/platforms/android/cordova/node_modules/plist/package.json @@ -0,0 +1,117 @@ +{ + "_args": [ + [ + "plist@^1.2.0", + "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common" + ] + ], + "_from": "plist@>=1.2.0 <2.0.0", + "_id": "plist@1.2.0", + "_inCache": true, + "_installable": true, + "_location": "/plist", + "_nodeVersion": "5.0.0", + "_npmUser": { + "email": "reinstein.mike@gmail.com", + "name": "mreinstein" + }, + "_npmVersion": "3.3.11", + "_phantomChildren": {}, + "_requested": { + "name": "plist", + "raw": "plist@^1.2.0", + "rawSpec": "^1.2.0", + "scope": null, + "spec": ">=1.2.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/plist/-/plist-1.2.0.tgz", + "_shasum": "084b5093ddc92506e259f874b8d9b1afb8c79593", + "_shrinkwrap": null, + "_spec": "plist@^1.2.0", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common", + "author": { + "email": "nathan@tootallnate.net", + "name": "Nathan Rajlich" + }, + "bugs": { + "url": "https://github.com/TooTallNate/node-plist/issues" + }, + "contributors": [ + { + "name": "Hans Huebner", + "email": "hans.huebner@gmail.com" + }, + { + "name": "Pierre Metrailler" + }, + { + "name": "Mike Reinstein", + "email": "reinstein.mike@gmail.com" + }, + { + "name": "Vladimir Tsvang" + }, + { + "name": "Mathieu D'Amours" + } + ], + "dependencies": { + "base64-js": "0.0.8", + "util-deprecate": "1.0.2", + "xmlbuilder": "4.0.0", + "xmldom": "0.1.x" + }, + "description": "Mac OS X Plist parser/builder for Node.js and browsers", + "devDependencies": { + "browserify": "12.0.1", + "mocha": "2.3.3", + "multiline": "1.0.2", + "zuul": "3.7.2" + }, + "directories": {}, + "dist": { + "shasum": "084b5093ddc92506e259f874b8d9b1afb8c79593", + "tarball": "http://registry.npmjs.org/plist/-/plist-1.2.0.tgz" + }, + "gitHead": "69520574f27864145192338b72e608fbe1bda6f7", + "homepage": "https://github.com/TooTallNate/node-plist#readme", + "keywords": [ + "apple", + "browser", + "mac", + "parser", + "plist", + "xml" + ], + "license": "MIT", + "main": "lib/plist.js", + "maintainers": [ + { + "name": "TooTallNate", + "email": "nathan@tootallnate.net" + }, + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + { + "name": "mreinstein", + "email": "reinstein.mike@gmail.com" + } + ], + "name": "plist", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/node-plist.git" + }, + "scripts": { + "test": "make test" + }, + "version": "1.2.0" +} diff --git a/platforms/android/cordova/node_modules/properties-parser/README.markdown b/platforms/android/cordova/node_modules/properties-parser/README.markdown new file mode 100644 index 0000000..3a808ba --- /dev/null +++ b/platforms/android/cordova/node_modules/properties-parser/README.markdown @@ -0,0 +1,48 @@ +# node-properties-parser + +A parser for [.properties](http://en.wikipedia.org/wiki/.properties) files written in javascript. Properties files store key-value pairs. They are typically used for configuration and internationalization in Java applications as well as in Actionscript projects. Here's an example of the format: + + # You are reading the ".properties" entry. + ! The exclamation mark can also mark text as comments. + website = http://en.wikipedia.org/ + language = English + # The backslash below tells the application to continue reading + # the value onto the next line. + message = Welcome to \ + Wikipedia! + # Add spaces to the key + key\ with\ spaces = This is the value that could be looked up with the key "key with spaces". + # Unicode + tab : \u0009 +*(taken from [Wikipedia](http://en.wikipedia.org/wiki/.properties#Format))* + +Currently works with any version of node.js. + +## The API + +- `parse(text)`: Parses `text` into key-value pairs. Returns an object containing the key-value pairs. +- `read(path[, callback])`: Opens the file specified by `path` and calls `parse` on its content. If the optional `callback` parameter is provided, the result is then passed to it as the second parameter. If an error occurs, the error object is passed to `callback` as the first parameter. If `callback` is not provided, the file specified by `path` is synchronously read and calls `parse` on its contents. The resulting object is immediately returned. +- `createEditor([path[, callback]])`: If neither `path` or `callback` are provided an empty editor object is returned synchronously. If only `path` is provided, the file specified by `path` is synchronously read and parsed. An editor object with the results in then immediately returned. If both `path` and `callback` are provided, the file specified by `path` is read and parsed asynchronously. An editor object with the results are then passed to `callback` as the second parameters. If an error occurs, the error object is passed to `callback` as the first parameter. +- `Editor`: The editor object is returned by `createEditor`. Has the following API: + - `get(key)`: Returns the value currently associated with `key`. + - `set(key, [value[, comment]])`: Associates `key` with `value`. An optional comment can be provided. If `value` is not specified or is `null`, then `key` is unset. + - `unset(key)`: Unsets the specified `key`. + - `save([path][, callback]])`: Writes the current contents of this editor object to a file specified by `path`. If `path` is not provided, then it'll be defaulted to the `path` value passed to `createEditor`. The `callback` parameter is called when the file has been written to disk. + - `addHeadComment`: Added a comment to the head of the file. + - `toString`: Returns the string representation of this properties editor object. This string will be written to a file if `save` is called. + +## Getting node-properties-parser + +The easiest way to get node-properties-parser is with [npm](http://npmjs.org/): + + npm install properties-parser + +Alternatively you can clone this git repository: + + git://github.com/xavi-/node-properties-parser.git + +## Developed by +* Xavi Ramirez + +## License +This project is released under [The MIT License](http://www.opensource.org/licenses/mit-license.php). \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/properties-parser/index.js b/platforms/android/cordova/node_modules/properties-parser/index.js new file mode 100644 index 0000000..b103ad0 --- /dev/null +++ b/platforms/android/cordova/node_modules/properties-parser/index.js @@ -0,0 +1,354 @@ +var fs = require("fs"); + +function Iterator(text) { + var pos = 0, length = text.length; + + this.peek = function(num) { + num = num || 0; + if(pos + num >= length) { return null; } + + return text.charAt(pos + num); + }; + this.next = function(inc) { + inc = inc || 1; + + if(pos >= length) { return null; } + + return text.charAt((pos += inc) - inc); + }; + this.pos = function() { + return pos; + }; +} + +var rWhitespace = /\s/; +function isWhitespace(chr) { + return rWhitespace.test(chr); +} +function consumeWhiteSpace(iter) { + var start = iter.pos(); + + while(isWhitespace(iter.peek())) { iter.next(); } + + return { type: "whitespace", start: start, end: iter.pos() }; +} + +function startsComment(chr) { + return chr === "!" || chr === "#"; +} +function isEOL(chr) { + return chr == null || chr === "\n" || chr === "\r"; +} +function consumeComment(iter) { + var start = iter.pos(); + + while(!isEOL(iter.peek())) { iter.next(); } + + return { type: "comment", start: start, end: iter.pos() }; +} + +function startsKeyVal(chr) { + return !isWhitespace(chr) && !startsComment(chr); +} +function startsSeparator(chr) { + return chr === "=" || chr === ":" || isWhitespace(chr); +} +function startsEscapedVal(chr) { + return chr === "\\"; +} +function consumeEscapedVal(iter) { + var start = iter.pos(); + + iter.next(); // move past "\" + var curChar = iter.next(); + if(curChar === "u") { // encoded unicode char + iter.next(4); // Read in the 4 hex values + } + + return { type: "escaped-value", start: start, end: iter.pos() }; +} +function consumeKey(iter) { + var start = iter.pos(), children = []; + + var curChar; + while((curChar = iter.peek()) !== null) { + if(startsSeparator(curChar)) { break; } + if(startsEscapedVal(curChar)) { children.push(consumeEscapedVal(iter)); continue; } + + iter.next(); + } + + return { type: "key", start: start, end: iter.pos(), children: children }; +} +function consumeKeyValSeparator(iter) { + var start = iter.pos(); + + var seenHardSep = false, curChar; + while((curChar = iter.peek()) !== null) { + if(isEOL(curChar)) { break; } + + if(isWhitespace(curChar)) { iter.next(); continue; } + + if(seenHardSep) { break; } + + seenHardSep = (curChar === ":" || curChar === "="); + if(seenHardSep) { iter.next(); continue; } + + break; // curChar is a non-separtor char + } + + return { type: "key-value-separator", start: start, end: iter.pos() }; +} +function startsLineBreak(iter) { + return iter.peek() === "\\" && isEOL(iter.peek(1)); +} +function consumeLineBreak(iter) { + var start = iter.pos(); + + iter.next(); // consume \ + if(iter.peek() === "\r") { iter.next(); } + iter.next(); // consume \n + + var curChar; + while((curChar = iter.peek()) !== null) { + if(isEOL(curChar)) { break; } + if(!isWhitespace(curChar)) { break; } + + iter.next(); + } + + return { type: "line-break", start: start, end: iter.pos() }; +} +function consumeVal(iter) { + var start = iter.pos(), children = []; + + var curChar; + while((curChar = iter.peek()) !== null) { + if(startsLineBreak(iter)) { children.push(consumeLineBreak(iter)); continue; } + if(startsEscapedVal(curChar)) { children.push(consumeEscapedVal(iter)); continue; } + if(isEOL(curChar)) { break; } + + iter.next(); + } + + return { type: "value", start: start, end: iter.pos(), children: children }; +} +function consumeKeyVal(iter) { + return { + type: "key-value", + start: iter.pos(), + children: [ + consumeKey(iter), + consumeKeyValSeparator(iter), + consumeVal(iter) + ], + end: iter.pos() + }; +} + +var renderChild = { + "escaped-value": function(child, text) { + var type = text.charAt(child.start + 1); + + if(type === "t") { return "\t"; } + if(type === "r") { return "\r"; } + if(type === "n") { return "\n"; } + if(type === "f") { return "\f"; } + if(type !== "u") { return type; } + + return String.fromCharCode(parseInt(text.substr(child.start + 2, 4), 16)); + }, + "line-break": function (child, text) { + return ""; + } +}; +function rangeToBuffer(range, text) { + var start = range.start, buffer = []; + + for(var i = 0; i < range.children.length; i++) { + var child = range.children[i]; + + buffer.push(text.substring(start, child.start)); + buffer.push(renderChild[child.type](child, text)); + start = child.end; + } + buffer.push(text.substring(start, range.end)); + + return buffer; +} +function rangesToObject(ranges, text) { + var obj = Object.create(null); // Creates to a true hash map + + for(var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + + if(range.type !== "key-value") { continue; } + + var key = rangeToBuffer(range.children[0], text).join(""); + var val = rangeToBuffer(range.children[2], text).join(""); + obj[key] = val; + } + + return obj; +} + +function stringToRanges(text) { + var iter = new Iterator(text), ranges = []; + + var curChar; + while((curChar = iter.peek()) !== null) { + if(isWhitespace(curChar)) { ranges.push(consumeWhiteSpace(iter)); continue; } + if(startsComment(curChar)) { ranges.push(consumeComment(iter)); continue; } + if(startsKeyVal(curChar)) { ranges.push(consumeKeyVal(iter)); continue; } + + throw Error("Something crazy happened. text: '" + text + "'; curChar: '" + curChar + "'"); + } + + return ranges; +} + +function isNewLineRange(range) { + if(!range) { return false; } + + if(range.type === "whitespace") { return true; } + + if(range.type === "literal") { + return isWhitespace(range.text) && range.text.indexOf("\n") > -1; + } + + return false; +} + +function Editor(text, path) { + text = text || ""; + + var ranges = stringToRanges(text); + var obj = rangesToObject(ranges, text); + var keyRange = Object.create(null); // Creates to a true hash map + + for(var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + + if(range.type !== "key-value") { continue; } + + var key = rangeToBuffer(range.children[0], text).join(""); + keyRange[key] = range; + } + + this.addHeadComment = function(comment) { + if(comment == null) { return; } + + ranges.unshift({ type: "literal", text: "# " + comment.replace(/\n/g, "\n# ") + "\n" }); + }; + + this.get = function(key) { return obj[key]; }; + this.set = function(key, val, comment) { + if(val == null) { this.unset(key); return; } + + obj[key] = val; + + var range = keyRange[key]; + if(!range) { + keyRange[key] = range = { type: "literal", text: key + "=" + val }; + + var prevRange = ranges[ranges.length - 1]; + if(prevRange != null && !isNewLineRange(prevRange)) { + ranges.push({ type: "literal", text: "\n" }); + } + ranges.push(range); + } + + // comment === null deletes comment. if comment === undefined, it's left alone + if(comment !== undefined) { + range.comment = comment && "# " + comment.replace(/\n/g, "\n# ") + "\n"; + } + + if(range.type === "literal") { + range.text = key + "=" + val; + if(range.comment != null) { range.text = range.comment + range.text; } + } else if(range.type === "key-value") { + range.children[2] = { type: "literal", text: val }; + } else { + throw "Unknown node type: " + range.type; + } + }; + this.unset = function(key) { + if(!(key in obj)) { return; } + + var range = keyRange[key]; + var idx = ranges.indexOf(range); + + ranges.splice(idx, (isNewLineRange(ranges[idx + 1]) ? 2 : 1)); + + delete keyRange[key]; + delete obj[key]; + }; + this.valueOf = this.toString = function() { + var buffer = [], stack = [].concat(ranges); + + var node; + while((node = stack.shift()) != null) { + switch(node.type) { + case "literal": + buffer.push(node.text); + break; + case "key": + case "value": + case "comment": + case "whitespace": + case "key-value-separator": + case "escaped-value": + case "line-break": + buffer.push(text.substring(node.start, node.end)); + break; + case "key-value": + Array.prototype.unshift.apply(stack, node.children); + if(node.comment) { stack.unshift({ type: "literal", text: node.comment }); } + break; + } + } + + return buffer.join(""); + }; + this.save = function(newPath, callback) { + if(typeof newPath === 'function') { + callback = newPath; + newPath = path; + } + newPath = newPath || path; + + if(!newPath) { callback("Unknown path"); } + + fs.writeFile(newPath, this.toString(), callback || function() {}); + }; +} +function createEditor(path, callback) { + if(!path) { return new Editor(); } + + if(!callback) { return new Editor(fs.readFileSync(path).toString(), path); } + + return fs.readFile(path, function(err, text) { + if(err) { return callback(err, null); } + + text = text.toString(); + return callback(null, new Editor(text, path)); + }); +} + +function parse(text) { + text = text.toString(); + var ranges = stringToRanges(text); + return rangesToObject(ranges, text); +} + +function read(path, callback) { + if(!callback) { return parse(fs.readFileSync(path)); } + + return fs.readFile(path, function(err, data) { + if(err) { return callback(err, null); } + + return callback(null, parse(data)); + }); +} + +module.exports = { parse: parse, read: read, createEditor: createEditor }; diff --git a/platforms/android/cordova/node_modules/properties-parser/package.json b/platforms/android/cordova/node_modules/properties-parser/package.json new file mode 100644 index 0000000..b089b27 --- /dev/null +++ b/platforms/android/cordova/node_modules/properties-parser/package.json @@ -0,0 +1,73 @@ +{ + "_args": [ + [ + "properties-parser@^0.2.3", + "/Users/steveng/repo/cordova/cordova-android" + ] + ], + "_from": "properties-parser@>=0.2.3 <0.3.0", + "_id": "properties-parser@0.2.3", + "_inCache": true, + "_installable": true, + "_location": "/properties-parser", + "_npmUser": { + "email": "xavi.rmz@gmail.com", + "name": "xavi" + }, + "_npmVersion": "1.3.23", + "_phantomChildren": {}, + "_requested": { + "name": "properties-parser", + "raw": "properties-parser@^0.2.3", + "rawSpec": "^0.2.3", + "scope": null, + "spec": ">=0.2.3 <0.3.0", + "type": "range" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "http://registry.npmjs.org/properties-parser/-/properties-parser-0.2.3.tgz", + "_shasum": "f7591255f707abbff227c7b56b637dbb0373a10f", + "_shrinkwrap": null, + "_spec": "properties-parser@^0.2.3", + "_where": "/Users/steveng/repo/cordova/cordova-android", + "bugs": { + "url": "https://github.com/xavi-/node-properties-parser/issues" + }, + "dependencies": {}, + "description": "A parser for .properties files written in javascript", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "f7591255f707abbff227c7b56b637dbb0373a10f", + "tarball": "http://registry.npmjs.org/properties-parser/-/properties-parser-0.2.3.tgz" + }, + "engines": { + "node": ">= 0.3.1" + }, + "homepage": "https://github.com/xavi-/node-properties-parser", + "keywords": [ + ".properties", + "actionscript", + "file parser", + "java", + "parser", + "properties" + ], + "main": "./index.js", + "maintainers": [ + { + "name": "xavi", + "email": "xavi.rmz@gmail.com" + } + ], + "name": "properties-parser", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/xavi-/node-properties-parser.git" + }, + "version": "0.2.3" +} diff --git a/platforms/android/cordova/node_modules/properties-parser/play-ground.js b/platforms/android/cordova/node_modules/properties-parser/play-ground.js new file mode 100644 index 0000000..ffbcf62 --- /dev/null +++ b/platforms/android/cordova/node_modules/properties-parser/play-ground.js @@ -0,0 +1,17 @@ +var parser = require("./"); +var editor = parser.createEditor(); + +editor.set("ok", "hi"); +editor.set("hi", "ok"); + +console.log(editor.toString()); + +editor.unset("hi"); + +console.log("==================="); +console.log(editor.toString()); + +editor.unset("ok"); + +console.log("==================="); +console.log(editor.toString()); diff --git a/platforms/android/cordova/node_modules/properties-parser/test/ReadProperties.class b/platforms/android/cordova/node_modules/properties-parser/test/ReadProperties.class new file mode 100755 index 0000000000000000000000000000000000000000..f40792b4b73dd1f8c4411ab3a0f79e38035f29da GIT binary patch literal 2613 zcmZuzZFdtz6n>^nvfItJG+SCI5E?2%+Y~Awphc=sKq}=$3e-Xsx5>5*q`NWMKv5Av z6cu~{#dk#kt%@(;@dS`_IDYmgcsxhH;YZKWPblCso0PV+J-st`X71d%_j&Hj=9im4 zT?McZ7c?wIdkNNKgNltBHsMhPn>F~+A)74J(+UQ6GRO0AT0FCrcXg4i0Mcw7?8cK!cmdZumn%3NUO*wa5cOr^!}B<(;*hj>L7E?y8bf?h!Ak;x2NHI| zZ4oH0tKTNzYjxt5z@+wsZEeU7^jPUFW>1ncz5z2~3slwZXy0Y-F`JU6-PhFNrW1DG zGP$v|!!={O*PAKNo)8fO1xJ_-6H)N8fVO%tW~JPOV>5+Uc(Rp=nJK!SQ#XOj@l(v3 zPCA@yI%cg&$e1cNTV{My+DTbyH(_Pw%fNKphx--0s^ch*34}H{kzN`{QfX&TB5uX! zD|k)E>v%&z_Yz4sP12j(_lAx)aa>@^of)poCX#V0El@5^Bevs4dY!BtZ;t3Vfwy$L zjgtbCy=_@Hk!%_XYS>%hm^M3=bqSkg4#*SV(eWCp)$tjQ>o|=w3eFOVk)uh$?A5lL-Y4KM^m?0ZTj|!MnaNlg z9iQV2Gr2QI9bd?K(MYM)@i5l1CTg2&Iowa)?=)YT?d`SFI)?D2j<4{wKv6fhoxnM% zb<3tlHodZ8;S_ZfzM^hYSk&F5;2Ry^;yXFW%1z(vI4>bA8_VdJFgNz>vSQqCjO5zp zT4~dD=(%EovK)qm(6?>8U3_DFcI?Zz)&LWAvh-Y;FFM+9VqF(#S~kkfsA&NuC5@8I zt#YCQ=A8&wgNclr@$S}k4$V}`vf~2tCbAz_@P(q|`Ks&WZyIZ?u6~>$EkXs4g(~xI zq%Y~1JZ$R7(x~F|EP@%!EmSJ2<-Q4`8h_U4y` z(h=r78#Qs8zp63j!@P2j(r;!qScCNFv%PLC0=GjL<(oHvVE0+>I*VzkRJNJPEZ>Vj z(z5&9evgkf4rBdhdWG~{*H+&u&^Q4AqtnfEkS~0R`N)-Mvt6rCz7IjyS!)drlT}H- z;}H~?Ue`K){vls0B4HqFUP!U+hHsDSA zP=W`r97WPp?1hitB;e16s~Gt%a;L9FdacZ%sxgNtmob$w`l@}GQ7!n0 z?ULFwfuAwG*TAjLn9_SR`HX&31#R)Id*V81_Ost!H0h`pV%rs zj#KzDRpU2I!|(k5Uc(Hu(8~e@%KpPV1rOfD0tF8V1uJf1iGr01TIK&On)no~qJ>=M zmemv=30cGA`J7Udbo|WV0_XqERvwosyuGQub47DeEXrl;f0c%GRh+mqUH$5Wb2UJVa`zq6Ybv+R3OvzNB_E zYRt=P2cyRPytX%LH08B{sBuqTixr2@pd?&ga~3np4^Y>_A)GpkP$&Y9TEd~otut5} zzJvwMzNo?asqd`zF}WrFO22X%<)7K6ts!|&?QO=f0|x;0~I7!T!(QT`gQpE W&#)fxf?J2(>^1T_9sSr9DES|c>uZYu literal 0 HcmV?d00001 diff --git a/platforms/android/cordova/node_modules/properties-parser/test/ReadProperties.java b/platforms/android/cordova/node_modules/properties-parser/test/ReadProperties.java new file mode 100644 index 0000000..12e4472 --- /dev/null +++ b/platforms/android/cordova/node_modules/properties-parser/test/ReadProperties.java @@ -0,0 +1,61 @@ +import java.io.*; +import java.util.*; + +public class ReadProperties { + public static void main(String[] args) throws IOException { + if(args.length <= 0) { System.out.println("No file provided."); return; } + + File f = new File(args[0]); + + if(!f.exists()) { System.out.println("File not found: " + args[0]); return; } + + Properties prop = new Properties(); + prop.load(new FileInputStream(f)); + + boolean isFirst = true; // I fucking hate java, why don't they have a native string join function? + System.out.print("{"); + for (Map.Entry item : prop.entrySet()) { + String key = (String) item.getKey(); + String value = (String) item.getValue(); + + if(isFirst) { isFirst = false; } + else { System.out.print(","); } + + System.out.print("\"" + escape(key) + "\":\"" + escape(value) + "\""); + } + System.out.print("}"); + } + + static String escape(String s) { // Taken from http://code.google.com/p/json-simple/ + StringBuffer sb = new StringBuffer(); + for(int i = 0; i < s.length(); i++) { + char ch = s.charAt(i); + switch(ch) { + case '"': sb.append("\\\""); break; + case '\\': sb.append("\\\\"); break; + case '\b': sb.append("\\b"); break; + case '\f': sb.append("\\f"); break; + case '\n': sb.append("\\n"); break; + case '\r': sb.append("\\r"); break; + case '\t': sb.append("\\t"); break; + case '/': sb.append("\\/"); break; + default: + //Reference: http://www.unicode.org/versions/Unicode5.1.0/ + if (('\u0000' <= ch && ch <= '\u001F') + || ('\u007F' <= ch && ch <= '\u009F') + || ('\u2000' <= ch && ch <= '\u20FF')) { + String ss = Integer.toHexString(ch); + sb.append("\\u"); + for(int k = ss.length(); k < 4; k++) { + sb.append('0'); + } + sb.append(ss.toUpperCase()); + } else { + sb.append(ch); + } + } + } + + return sb.toString(); + } +} \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/properties-parser/test/test-cases-copy.properties b/platforms/android/cordova/node_modules/properties-parser/test/test-cases-copy.properties new file mode 100644 index 0000000..04b8ecd --- /dev/null +++ b/platforms/android/cordova/node_modules/properties-parser/test/test-cases-copy.properties @@ -0,0 +1,16 @@ +# You are reading the ".properties" entry. +! The exclamation mark can also mark text as comments. +lala=whatever +website = whatever +language = whatever +# The backslash below tells the application to continue reading +# the value onto the next line. +message = whatever +# Add spaces to the key +key\ with\ spaces = whatever +# Unicode +tab : whatever +long-unicode : whatever +space\ separator key val \n three +another-test :whatever + null-prop \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/properties-parser/test/test-cases.properties b/platforms/android/cordova/node_modules/properties-parser/test/test-cases.properties new file mode 100644 index 0000000..5fc5bb7 --- /dev/null +++ b/platforms/android/cordova/node_modules/properties-parser/test/test-cases.properties @@ -0,0 +1,18 @@ +# You are reading the ".properties" entry. +! The exclamation mark can also mark text as comments. +lala=\u210A the foo foo \ + lalala; +website = http://en.wikipedia.org/ +language = English +# The backslash below tells the application to continue reading +# the value onto the next line. +message = Welcome to \ + Wikipedia! +# Add spaces to the key +key\ with\ spaces = This is the value that could be looked up with the key "key with spaces". +# Unicode +tab : \u0009 +long-unicode : \u00000009 +space\ separator key val \n three +another-test ::: hihi + null-prop \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/properties-parser/test/test.js b/platforms/android/cordova/node_modules/properties-parser/test/test.js new file mode 100644 index 0000000..4b7b531 --- /dev/null +++ b/platforms/android/cordova/node_modules/properties-parser/test/test.js @@ -0,0 +1,123 @@ +var fs = require("fs"); +var assert = require("assert"); +var prop = require("../index.js"); + +var syncData = prop.read("./test-cases.properties"); +prop.read("./test-cases.properties", function(err, data) { + assert.deepEqual(data, syncData); + assert.equal(data["lala"], 'ℊ the foo foo lalala;'); + assert.equal(data["website"], 'http://en.wikipedia.org/'); + assert.equal(data["language"], 'English'); + assert.equal(data["message"], 'Welcome to Wikipedia!'); + assert.equal(data["key with spaces"], 'This is the value that could be looked up with the key "key with spaces".'); + assert.equal(data["tab"], '\t'); + assert.equal(data["long-unicode"], '\u00000009'); + assert.equal(data["space separator"], 'key val \n three'); + assert.equal(data["another-test"], ':: hihi'); + assert.equal(data["null-prop"], ''); + assert.ok(data["valueOf"] == null, "Properties are set that shouldn't be (valueOf)"); + assert.ok(data["toString"] == null, "Properties are set that shouldn't be (toString)"); + + console.log("Tests all passed..."); + + if(process.argv[2] === "repl") { + var repl = require("repl").start("test-repl> "); + repl.context.data = data; + repl.context.prop = prop; + } +}); + +var editor1 = prop.createEditor(); +editor1.set("basic", "prop1"); +assert.equal(editor1.toString(), "basic=prop1"); +editor1.set("basic", "prop2", "A comment\nmulti-line1"); +assert.equal(editor1.toString(), "# A comment\n# multi-line1\nbasic=prop2"); +editor1.set("basic", "prop3", "A comment\nmulti-line2"); +assert.equal(editor1.toString(), "# A comment\n# multi-line2\nbasic=prop3"); +editor1.set("basic", "prop4"); +assert.equal(editor1.toString(), "# A comment\n# multi-line2\nbasic=prop4"); +editor1.set("basic", "prop5", null); // Delete's comment +assert.equal(editor1.toString(), "basic=prop5"); +editor1.set("basic1", "prop6"); +assert.equal(editor1.toString(), "basic=prop5\nbasic1=prop6"); +editor1.addHeadComment("Head Comment"); +assert.equal(editor1.toString(), "# Head Comment\nbasic=prop5\nbasic1=prop6"); +assert.ok(editor1.get("valueOf") == null); +assert.ok(editor1.get("toString") == null); + +var editor2 = prop.createEditor("./test-cases.properties"); +assert.equal(fs.readFileSync("./test-cases.properties").toString(), editor2.toString()); +editor2.set("lala", "prop1"); +assert.ok(editor2.toString().indexOf("lala=prop1") > -1); +editor2.set("lala", "prop2", "A comment\nmulti-line1"); +assert.ok(editor2.toString().indexOf("# A comment\n# multi-line1\nlala=prop2") > -1); +editor2.set("lala", "prop3", "A comment\nmulti-line2"); +assert.ok(editor2.toString().indexOf("# A comment\n# multi-line2\nlala=prop3") > -1); +editor2.set("lala", "prop4"); +assert.ok(editor2.toString().indexOf("# A comment\n# multi-line2\nlala=prop4") > -1); +editor2.set("lala", "prop5", null); // Delete's comment +assert.ok(editor2.toString().indexOf("! The exclamation mark can also mark text as comments.\nlala=prop5") > -1); +editor2.set("basic-non-existing", "prop6"); +assert.ok(editor2.toString().indexOf("\nbasic-non-existing=prop6") > -1); +editor2.addHeadComment("Head Comment"); +assert.equal(editor2.toString().indexOf("# Head Comment\n"), 0); +assert.ok(editor2.get("valueOf") == null); +assert.ok(editor2.get("toString") == null); + +var editor3 = prop.createEditor(); +editor3.set("stay", "ok"); + +editor3.unset("key"); +editor3.unset("key", null); +editor3.unset("key", undefined); +assert.equal(editor3.toString().trim(), "stay=ok"); + +editor3.set("key", "val"); +editor3.unset("key"); +assert.equal(editor3.toString().trim(), "stay=ok"); + +editor3.set("key", "val"); +editor3.set("key", null); +assert.equal(editor3.toString().trim(), "stay=ok"); + +editor3.set("key", "val"); +editor3.set("key", undefined); +assert.equal(editor3.toString().trim(), "stay=ok"); + +prop.createEditor("./test-cases.properties", function(err, editor) { + var properties = {}; + properties.lala = 'whatever'; + properties.website = 'whatever'; + properties.language = 'whatever'; + properties.message = 'whatever'; + properties['key with spaces'] = 'whatever'; + properties.tab = 'whatever'; + properties['long-unicode'] = 'whatever'; + properties['another-test'] = 'whatever'; + for (var item in properties) { + editor.set(item, properties[item]); + } + + assert.equal( + editor.toString(), + '# You are reading the ".properties" entry.\n' + + '! The exclamation mark can also mark text as comments.\n' + + 'lala=whatever\n' + + 'website = whatever\n' + + 'language = whatever\n' + + '# The backslash below tells the application to continue reading\n' + + '# the value onto the next line.\n' + + 'message = whatever\n' + + '# Add spaces to the key\n' + + 'key\\ with\\ spaces = whatever\n' + + '# Unicode\n' + + 'tab : whatever\n' + + 'long-unicode : whatever\n' + + 'space\\ separator key val \\n three\n' + + 'another-test :whatever\n' + + ' null-prop' + ); +}); + +// java ReadProperties test-cases.properties +// javac ReadProperties.java \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/q/CHANGES.md b/platforms/android/cordova/node_modules/q/CHANGES.md new file mode 100644 index 0000000..cd351fd --- /dev/null +++ b/platforms/android/cordova/node_modules/q/CHANGES.md @@ -0,0 +1,786 @@ + +## 1.4.1 + + - Address an issue that prevented Q from being used as a ` + + diff --git a/platforms/android/cordova/node_modules/sax/examples/test.xml b/platforms/android/cordova/node_modules/sax/examples/test.xml new file mode 100644 index 0000000..801292d --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/examples/test.xml @@ -0,0 +1,1254 @@ + + +]> + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/sax/lib/sax.js b/platforms/android/cordova/node_modules/sax/lib/sax.js new file mode 100644 index 0000000..17fb08e --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/lib/sax.js @@ -0,0 +1,1006 @@ +// wrapper for non-node envs +;(function (sax) { + +sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } +sax.SAXParser = SAXParser +sax.SAXStream = SAXStream +sax.createStream = createStream + +// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. +// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), +// since that's the earliest that a buffer overrun could occur. This way, checks are +// as rare as required, but as often as necessary to ensure never crossing this bound. +// Furthermore, buffers are only tested at most once per write(), so passing a very +// large string into write() might have undesirable effects, but this is manageable by +// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme +// edge case, result in creating at most one complete copy of the string passed in. +// Set to Infinity to have unlimited buffers. +sax.MAX_BUFFER_LENGTH = 64 * 1024 + +var buffers = [ + "comment", "sgmlDecl", "textNode", "tagName", "doctype", + "procInstName", "procInstBody", "entity", "attribName", + "attribValue", "cdata", "script" +] + +sax.EVENTS = // for discoverability. + [ "text" + , "processinginstruction" + , "sgmldeclaration" + , "doctype" + , "comment" + , "attribute" + , "opentag" + , "closetag" + , "opencdata" + , "cdata" + , "closecdata" + , "error" + , "end" + , "ready" + , "script" + , "opennamespace" + , "closenamespace" + ] + +function SAXParser (strict, opt) { + if (!(this instanceof SAXParser)) return new SAXParser(strict, opt) + + var parser = this + clearBuffers(parser) + parser.q = parser.c = "" + parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH + parser.opt = opt || {} + parser.tagCase = parser.opt.lowercasetags ? "toLowerCase" : "toUpperCase" + parser.tags = [] + parser.closed = parser.closedRoot = parser.sawRoot = false + parser.tag = parser.error = null + parser.strict = !!strict + parser.noscript = !!(strict || parser.opt.noscript) + parser.state = S.BEGIN + parser.ENTITIES = Object.create(sax.ENTITIES) + parser.attribList = [] + + // namespaces form a prototype chain. + // it always points at the current tag, + // which protos to its parent tag. + if (parser.opt.xmlns) parser.ns = Object.create(rootNS) + + // mostly just for error reporting + parser.position = parser.line = parser.column = 0 + emit(parser, "onready") +} + +if (!Object.create) Object.create = function (o) { + function f () { this.__proto__ = o } + f.prototype = o + return new f +} + +if (!Object.getPrototypeOf) Object.getPrototypeOf = function (o) { + return o.__proto__ +} + +if (!Object.keys) Object.keys = function (o) { + var a = [] + for (var i in o) if (o.hasOwnProperty(i)) a.push(i) + return a +} + +function checkBufferLength (parser) { + var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) + , maxActual = 0 + for (var i = 0, l = buffers.length; i < l; i ++) { + var len = parser[buffers[i]].length + if (len > maxAllowed) { + // Text/cdata nodes can get big, and since they're buffered, + // we can get here under normal conditions. + // Avoid issues by emitting the text node now, + // so at least it won't get any bigger. + switch (buffers[i]) { + case "textNode": + closeText(parser) + break + + case "cdata": + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + break + + case "script": + emitNode(parser, "onscript", parser.script) + parser.script = "" + break + + default: + error(parser, "Max buffer length exceeded: "+buffers[i]) + } + } + maxActual = Math.max(maxActual, len) + } + // schedule the next check for the earliest possible buffer overrun. + parser.bufferCheckPosition = (sax.MAX_BUFFER_LENGTH - maxActual) + + parser.position +} + +function clearBuffers (parser) { + for (var i = 0, l = buffers.length; i < l; i ++) { + parser[buffers[i]] = "" + } +} + +SAXParser.prototype = + { end: function () { end(this) } + , write: write + , resume: function () { this.error = null; return this } + , close: function () { return this.write(null) } + , end: function () { return this.write(null) } + } + +try { + var Stream = require("stream").Stream +} catch (ex) { + var Stream = function () {} +} + + +var streamWraps = sax.EVENTS.filter(function (ev) { + return ev !== "error" && ev !== "end" +}) + +function createStream (strict, opt) { + return new SAXStream(strict, opt) +} + +function SAXStream (strict, opt) { + if (!(this instanceof SAXStream)) return new SAXStream(strict, opt) + + Stream.apply(me) + + this._parser = new SAXParser(strict, opt) + this.writable = true + this.readable = true + + + var me = this + + this._parser.onend = function () { + me.emit("end") + } + + this._parser.onerror = function (er) { + me.emit("error", er) + + // if didn't throw, then means error was handled. + // go ahead and clear error, so we can write again. + me._parser.error = null + } + + streamWraps.forEach(function (ev) { + Object.defineProperty(me, "on" + ev, { + get: function () { return me._parser["on" + ev] }, + set: function (h) { + if (!h) { + me.removeAllListeners(ev) + return me._parser["on"+ev] = h + } + me.on(ev, h) + }, + enumerable: true, + configurable: false + }) + }) +} + +SAXStream.prototype = Object.create(Stream.prototype, + { constructor: { value: SAXStream } }) + +SAXStream.prototype.write = function (data) { + this._parser.write(data.toString()) + this.emit("data", data) + return true +} + +SAXStream.prototype.end = function (chunk) { + if (chunk && chunk.length) this._parser.write(chunk.toString()) + this._parser.end() + return true +} + +SAXStream.prototype.on = function (ev, handler) { + var me = this + if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) { + me._parser["on"+ev] = function () { + var args = arguments.length === 1 ? [arguments[0]] + : Array.apply(null, arguments) + args.splice(0, 0, ev) + me.emit.apply(me, args) + } + } + + return Stream.prototype.on.call(me, ev, handler) +} + + + +// character classes and tokens +var whitespace = "\r\n\t " + // this really needs to be replaced with character classes. + // XML allows all manner of ridiculous numbers and digits. + , number = "0124356789" + , letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + // (Letter | "_" | ":") + , nameStart = letter+"_:" + , nameBody = nameStart+number+"-." + , quote = "'\"" + , entity = number+letter+"#" + , attribEnd = whitespace + ">" + , CDATA = "[CDATA[" + , DOCTYPE = "DOCTYPE" + , XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace" + , XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/" + , rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } + +// turn all the string character sets into character class objects. +whitespace = charClass(whitespace) +number = charClass(number) +letter = charClass(letter) +nameStart = charClass(nameStart) +nameBody = charClass(nameBody) +quote = charClass(quote) +entity = charClass(entity) +attribEnd = charClass(attribEnd) + +function charClass (str) { + return str.split("").reduce(function (s, c) { + s[c] = true + return s + }, {}) +} + +function is (charclass, c) { + return charclass[c] +} + +function not (charclass, c) { + return !charclass[c] +} + +var S = 0 +sax.STATE = +{ BEGIN : S++ +, TEXT : S++ // general stuff +, TEXT_ENTITY : S++ // & and such. +, OPEN_WAKA : S++ // < +, SGML_DECL : S++ // +, SCRIPT : S++ // " + , expect : + [ [ "opentag", { name: "xml", attributes: {} } ] + , [ "opentag", { name: "script", attributes: {} } ] + , [ "text", "hello world" ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + +require(__dirname).test + ( { xml : "" + , expect : + [ [ "opentag", { name: "xml", attributes: {} } ] + , [ "opentag", { name: "script", attributes: {} } ] + , [ "opencdata", undefined ] + , [ "cdata", "hello world" ] + , [ "closecdata", undefined ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + diff --git a/platforms/android/cordova/node_modules/sax/test/parser-position.js b/platforms/android/cordova/node_modules/sax/test/parser-position.js new file mode 100644 index 0000000..e4a68b1 --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/parser-position.js @@ -0,0 +1,28 @@ +var sax = require("../lib/sax"), + assert = require("assert") + +function testPosition(chunks, expectedEvents) { + var parser = sax.parser(); + expectedEvents.forEach(function(expectation) { + parser['on' + expectation[0]] = function() { + for (var prop in expectation[1]) { + assert.equal(parser[prop], expectation[1][prop]); + } + } + }); + chunks.forEach(function(chunk) { + parser.write(chunk); + }); +}; + +testPosition(['
abcdefgh
'], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); + +testPosition(['
abcde','fgh
'], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); diff --git a/platforms/android/cordova/node_modules/sax/test/script.js b/platforms/android/cordova/node_modules/sax/test/script.js new file mode 100644 index 0000000..464c051 --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/script.js @@ -0,0 +1,12 @@ +require(__dirname).test({ + xml : "", + expect : [ + ["opentag", {"name": "HTML","attributes": {}}], + ["opentag", {"name": "HEAD","attributes": {}}], + ["opentag", {"name": "SCRIPT","attributes": {}}], + ["script", "if (1 < 0) { console.log('elo there'); }"], + ["closetag", "SCRIPT"], + ["closetag", "HEAD"], + ["closetag", "HTML"] + ] +}); diff --git a/platforms/android/cordova/node_modules/sax/test/self-closing-child-strict.js b/platforms/android/cordova/node_modules/sax/test/self-closing-child-strict.js new file mode 100644 index 0000000..ce9c045 --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/self-closing-child-strict.js @@ -0,0 +1,40 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "root", + "attributes": {} + }], + ["opentag", { + "name": "child", + "attributes": {} + }], + ["opentag", { + "name": "haha", + "attributes": {} + }], + ["closetag", "haha"], + ["closetag", "child"], + ["opentag", { + "name": "monkey", + "attributes": {} + }], + ["text", "=(|)"], + ["closetag", "monkey"], + ["closetag", "root"], + ["end"], + ["ready"] + ], + strict : true, + opt : {} +}); + diff --git a/platforms/android/cordova/node_modules/sax/test/self-closing-child.js b/platforms/android/cordova/node_modules/sax/test/self-closing-child.js new file mode 100644 index 0000000..bc6b52b --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/self-closing-child.js @@ -0,0 +1,40 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "ROOT", + "attributes": {} + }], + ["opentag", { + "name": "CHILD", + "attributes": {} + }], + ["opentag", { + "name": "HAHA", + "attributes": {} + }], + ["closetag", "HAHA"], + ["closetag", "CHILD"], + ["opentag", { + "name": "MONKEY", + "attributes": {} + }], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); + diff --git a/platforms/android/cordova/node_modules/sax/test/self-closing-tag.js b/platforms/android/cordova/node_modules/sax/test/self-closing-tag.js new file mode 100644 index 0000000..b2c5736 --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/self-closing-tag.js @@ -0,0 +1,25 @@ + +require(__dirname).test({ + xml : + " "+ + " "+ + " "+ + " "+ + "=(|) "+ + ""+ + " ", + expect : [ + ["opentag", {name:"ROOT", attributes:{}}], + ["opentag", {name:"HAHA", attributes:{}}], + ["closetag", "HAHA"], + ["opentag", {name:"HAHA", attributes:{}}], + ["closetag", "HAHA"], + // ["opentag", {name:"HAHA", attributes:{}}], + // ["closetag", "HAHA"], + ["opentag", {name:"MONKEY", attributes:{}}], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"] + ], + opt : { trim : true } +}); \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/sax/test/stray-ending.js b/platforms/android/cordova/node_modules/sax/test/stray-ending.js new file mode 100644 index 0000000..6b0aa7f --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/stray-ending.js @@ -0,0 +1,17 @@ +// stray ending tags should just be ignored in non-strict mode. +// https://github.com/isaacs/sax-js/issues/32 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "A", attributes: {} } ] + , [ "opentag", { name: "B", attributes: {} } ] + , [ "text", "" ] + , [ "closetag", "B" ] + , [ "closetag", "A" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/platforms/android/cordova/node_modules/sax/test/trailing-non-whitespace.js b/platforms/android/cordova/node_modules/sax/test/trailing-non-whitespace.js new file mode 100644 index 0000000..3e1fb2e --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/trailing-non-whitespace.js @@ -0,0 +1,17 @@ + +require(__dirname).test({ + xml : "Welcome, to monkey land", + expect : [ + ["opentag", { + "name": "SPAN", + "attributes": {} + }], + ["text", "Welcome,"], + ["closetag", "SPAN"], + ["text", " to monkey land"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); diff --git a/platforms/android/cordova/node_modules/sax/test/unquoted.js b/platforms/android/cordova/node_modules/sax/test/unquoted.js new file mode 100644 index 0000000..79f1d0b --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/unquoted.js @@ -0,0 +1,17 @@ +// unquoted attributes should be ok in non-strict mode +// https://github.com/isaacs/sax-js/issues/31 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "attribute", { name: "class", value: "test" } ] + , [ "attribute", { name: "hello", value: "world" } ] + , [ "opentag", { name: "SPAN", + attributes: { class: "test", hello: "world" } } ] + , [ "closetag", "SPAN" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/platforms/android/cordova/node_modules/sax/test/xmlns-issue-41.js b/platforms/android/cordova/node_modules/sax/test/xmlns-issue-41.js new file mode 100644 index 0000000..596d82b --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/xmlns-issue-41.js @@ -0,0 +1,67 @@ +var t = require(__dirname) + + , xmls = // should be the same both ways. + [ "" + , "" ] + + , ex1 = + [ [ "opennamespace" + , { prefix: "a" + , uri: "http://ATTRIBUTE" + } + ] + , [ "attribute" + , { name: "xmlns:a" + , value: "http://ATTRIBUTE" + , prefix: "xmlns" + , local: "a" + , uri: "http://www.w3.org/2000/xmlns/" + } + ] + , [ "attribute" + , { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + ] + , [ "opentag" + , { name: "parent" + , uri: "" + , prefix: "" + , local: "parent" + , attributes: + { "a:attr": + { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + , "xmlns:a": + { name: "xmlns:a" + , local: "a" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "http://ATTRIBUTE" + } + } + , ns: {"a": "http://ATTRIBUTE"} + } + ] + , ["closetag", "parent"] + , ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }] + ] + + // swap the order of elements 2 and 1 + , ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3)) + , expected = [ex1, ex2] + +xmls.forEach(function (x, i) { + t.test({ xml: x + , expect: expected[i] + , strict: true + , opt: { xmlns: true } + }) +}) diff --git a/platforms/android/cordova/node_modules/sax/test/xmlns-rebinding.js b/platforms/android/cordova/node_modules/sax/test/xmlns-rebinding.js new file mode 100644 index 0000000..f464876 --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/xmlns-rebinding.js @@ -0,0 +1,59 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opennamespace", { prefix: "x", uri: "x1" } ] + , [ "opennamespace", { prefix: "y", uri: "y1" } ] + , [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ] + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } + , "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } + , "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' } } ] + + , [ "opennamespace", { prefix: "x", uri: "x2" } ] + , [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } }, + ns: { x: 'x2' } } ] + + , [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x2' } } ] + + , [ "closetag", "check" ] + + , [ "closetag", "rebind" ] + , [ "closenamespace", { prefix: "x", uri: "x2" } ] + + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' } } ] + , [ "closetag", "check" ] + + , [ "closetag", "root" ] + , [ "closenamespace", { prefix: "x", uri: "x1" } ] + , [ "closenamespace", { prefix: "y", uri: "y1" } ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/platforms/android/cordova/node_modules/sax/test/xmlns-strict.js b/platforms/android/cordova/node_modules/sax/test/xmlns-strict.js new file mode 100644 index 0000000..4ad615b --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/xmlns-strict.js @@ -0,0 +1,71 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opentag", { name: "root", prefix: "", local: "root", uri: "", + attributes: {}, ns: {} } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } }, + ns: {} } ] + , [ "closetag", "plain" ] + + , [ "opennamespace", { prefix: "", uri: "uri:default" } ] + + , [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ] + , [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", + attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { "": "uri:default" } } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "uri:default" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' }, + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "uri:default" } } } ] + , [ "closetag", "plain" ] + + , [ "closetag", "ns1" ] + + , [ "closenamespace", { prefix: "", uri: "uri:default" } ] + + , [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ] + + , [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "", + attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { a: "uri:nsa" } } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + ns: { a: 'uri:nsa' } } ] + , [ "closetag", "plain" ] + + , [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ] + , [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", + attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } }, + ns: { a: 'uri:nsa' } } ] + , [ "closetag", "a:ns" ] + + , [ "closetag", "ns2" ] + + , [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "closetag", "root" ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/platforms/android/cordova/node_modules/sax/test/xmlns-unbound.js b/platforms/android/cordova/node_modules/sax/test/xmlns-unbound.js new file mode 100644 index 0000000..2944b87 --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/xmlns-unbound.js @@ -0,0 +1,15 @@ + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"] + + , [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } }, + ns: {} } ] + , [ "closetag", "root" ] + ] + } +).write("") diff --git a/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js new file mode 100644 index 0000000..16da771 --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js @@ -0,0 +1,35 @@ +require(__dirname).test( + { xml : "" + , expect : + [ [ "attribute" + , { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + ] + , [ "opentag" + , { name: "root" + , uri: "" + , prefix: "" + , local: "root" + , attributes: + { "xml:lang": + { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + } + , ns: {} + } + ] + , ["closetag", "root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-prefix.js b/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-prefix.js new file mode 100644 index 0000000..9a1ce1b --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-prefix.js @@ -0,0 +1,20 @@ +require(__dirname).test( + { xml : "" + , expect : + [ + [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: {} + , ns: {} + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-redefine.js b/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-redefine.js new file mode 100644 index 0000000..1eba9c7 --- /dev/null +++ b/platforms/android/cordova/node_modules/sax/test/xmlns-xml-default-redefine.js @@ -0,0 +1,40 @@ +require(__dirname).test( + { xml : "" + , expect : + [ ["error" + , "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n" + + "Actual: ERROR\n" + + "Line: 0\nColumn: 27\nChar: '" + ] + , [ "attribute" + , { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + ] + , [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: + { "xmlns:xml": + { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + } + , ns: {} + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/platforms/android/cordova/node_modules/semver/.npmignore b/platforms/android/cordova/node_modules/semver/.npmignore new file mode 100644 index 0000000..534108e --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/.npmignore @@ -0,0 +1,4 @@ +node_modules/ +coverage/ +.nyc_output/ +nyc_output/ diff --git a/platforms/android/cordova/node_modules/semver/.travis.yml b/platforms/android/cordova/node_modules/semver/.travis.yml new file mode 100644 index 0000000..991d04b --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - '0.10' + - '0.12' + - 'iojs' diff --git a/platforms/android/cordova/node_modules/semver/LICENSE b/platforms/android/cordova/node_modules/semver/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/cordova/node_modules/semver/README.md b/platforms/android/cordova/node_modules/semver/README.md new file mode 100644 index 0000000..0b14a7e --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/README.md @@ -0,0 +1,327 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Usage + + $ npm install semver + + semver.valid('1.2.3') // '1.2.3' + semver.valid('a.b.c') // null + semver.clean(' =v1.2.3 ') // '1.2.3' + semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true + semver.gt('1.2.3', '9.8.7') // false + semver.lt('1.2.3', '9.8.7') // true + +As a command-line utility: + + $ semver -h + + Usage: semver [ [...]] [-r | -i | --preid | -l | -rv] + Test if version(s) satisfy the supplied range(s), and sort them. + + Multiple versions or ranges may be supplied, unless increment + option is specified. In that case, only a single version may + be used, and it is incremented by the specified level + + Program exits successfully if any valid version satisfies + all supplied ranges, and prints all satisfying versions. + + If no versions are valid, or ranges are not satisfied, + then exits failure. + + Versions are printed in ascending order, so supplying + multiple versions to the utility will just sort them. + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +> semver.inc('1.2.3', 'prerelease', 'beta') +'1.2.4-beta.0' +``` + +command-line example: + +```shell +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```shell +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero digit in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0` +* `^0.2.3` := `>=0.2.3 <0.3.0` +* `^0.0.3` := `>=0.0.3 <0.0.4` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0` +* `^0.0.x` := `>=0.0.0 <0.1.0` +* `^0.0` := `>=0.0.0 <0.1.0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0` +* `^0.x` := `>=0.0.0 <1.0.0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9']['0'-'9']+ +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `loose` boolean argument that, if +true, will be more forgiving about not-quite-valid semver strings. +The resulting output will always be 100% strict, of course. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. diff --git a/platforms/android/cordova/node_modules/semver/bin/semver b/platforms/android/cordova/node_modules/semver/bin/semver new file mode 100755 index 0000000..c5f2e85 --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/bin/semver @@ -0,0 +1,133 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +var argv = process.argv.slice(2) + , versions = [] + , range = [] + , gt = [] + , lt = [] + , eq = [] + , inc = null + , version = require("../package.json").version + , loose = false + , identifier = undefined + , semver = require("../semver") + , reverse = false + +main() + +function main () { + if (!argv.length) return help() + while (argv.length) { + var a = argv.shift() + var i = a.indexOf('=') + if (i !== -1) { + a = a.slice(0, i) + argv.unshift(a.slice(i + 1)) + } + switch (a) { + case "-rv": case "-rev": case "--rev": case "--reverse": + reverse = true + break + case "-l": case "--loose": + loose = true + break + case "-v": case "--version": + versions.push(argv.shift()) + break + case "-i": case "--inc": case "--increment": + switch (argv[0]) { + case "major": case "minor": case "patch": case "prerelease": + case "premajor": case "preminor": case "prepatch": + inc = argv.shift() + break + default: + inc = "patch" + break + } + break + case "--preid": + identifier = argv.shift() + break + case "-r": case "--range": + range.push(argv.shift()) + break + case "-h": case "--help": case "-?": + return help() + default: + versions.push(a) + break + } + } + + versions = versions.filter(function (v) { + return semver.valid(v, loose) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) + return failInc() + + for (var i = 0, l = range.length; i < l ; i ++) { + versions = versions.filter(function (v) { + return semver.satisfies(v, range[i], loose) + }) + if (!versions.length) return fail() + } + return success(versions) +} + +function failInc () { + console.error("--inc can only be used on a single version with no range") + fail() +} + +function fail () { process.exit(1) } + +function success () { + var compare = reverse ? "rcompare" : "compare" + versions.sort(function (a, b) { + return semver[compare](a, b, loose) + }).map(function (v) { + return semver.clean(v, loose) + }).map(function (v) { + return inc ? semver.inc(v, inc, loose, identifier) : v + }).forEach(function (v,i,_) { console.log(v) }) +} + +function help () { + console.log(["SemVer " + version + ,"" + ,"A JavaScript implementation of the http://semver.org/ specification" + ,"Copyright Isaac Z. Schlueter" + ,"" + ,"Usage: semver [options] [ [...]]" + ,"Prints valid versions sorted by SemVer precedence" + ,"" + ,"Options:" + ,"-r --range " + ," Print versions that match the specified range." + ,"" + ,"-i --increment []" + ," Increment a version by the specified level. Level can" + ," be one of: major, minor, patch, premajor, preminor," + ," prepatch, or prerelease. Default level is 'patch'." + ," Only one version may be specified." + ,"" + ,"--preid " + ," Identifier to be used to prefix premajor, preminor," + ," prepatch or prerelease version increments." + ,"" + ,"-l --loose" + ," Interpret versions and ranges loosely" + ,"" + ,"Program exits successfully if any valid version satisfies" + ,"all supplied ranges, and prints all satisfying versions." + ,"" + ,"If no satisfying versions are found, then exits failure." + ,"" + ,"Versions are printed in ascending order, so supplying" + ,"multiple versions to the utility will just sort them." + ].join("\n")) +} diff --git a/platforms/android/cordova/node_modules/semver/package.json b/platforms/android/cordova/node_modules/semver/package.json new file mode 100644 index 0000000..0db0065 --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "semver@^5.0.1", + "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common" + ] + ], + "_from": "semver@>=5.0.1 <6.0.0", + "_id": "semver@5.1.0", + "_inCache": true, + "_installable": true, + "_location": "/semver", + "_nodeVersion": "4.0.0", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "3.3.2", + "_phantomChildren": {}, + "_requested": { + "name": "semver", + "raw": "semver@^5.0.1", + "rawSpec": "^5.0.1", + "scope": null, + "spec": ">=5.0.1 <6.0.0", + "type": "range" + }, + "_requiredBy": [ + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/semver/-/semver-5.1.0.tgz", + "_shasum": "85f2cf8550465c4df000cf7d86f6b054106ab9e5", + "_shrinkwrap": null, + "_spec": "semver@^5.0.1", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common", + "bin": { + "semver": "./bin/semver" + }, + "bugs": { + "url": "https://github.com/npm/node-semver/issues" + }, + "dependencies": {}, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "^2.0.0" + }, + "directories": {}, + "dist": { + "shasum": "85f2cf8550465c4df000cf7d86f6b054106ab9e5", + "tarball": "http://registry.npmjs.org/semver/-/semver-5.1.0.tgz" + }, + "gitHead": "8e33a30e62e40e4983d1c5f55e794331b861aadc", + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "semver.js", + "maintainers": [ + { + "name": "isaacs", + "email": "isaacs@npmjs.com" + }, + { + "name": "othiym23", + "email": "ogd@aoaioxxysz.net" + } + ], + "name": "semver", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "5.1.0" +} diff --git a/platforms/android/cordova/node_modules/semver/range.bnf b/platforms/android/cordova/node_modules/semver/range.bnf new file mode 100644 index 0000000..000df92 --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9']['0'-'9']+ +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/platforms/android/cordova/node_modules/semver/semver.js b/platforms/android/cordova/node_modules/semver/semver.js new file mode 100644 index 0000000..71795f6 --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/semver.js @@ -0,0 +1,1188 @@ +exports = module.exports = SemVer; + +// The debug function is excluded entirely from the minified version. +/* nomin */ var debug; +/* nomin */ if (typeof process === 'object' && + /* nomin */ process.env && + /* nomin */ process.env.NODE_DEBUG && + /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG)) + /* nomin */ debug = function() { + /* nomin */ var args = Array.prototype.slice.call(arguments, 0); + /* nomin */ args.unshift('SEMVER'); + /* nomin */ console.log.apply(console, args); + /* nomin */ }; +/* nomin */ else + /* nomin */ debug = function() {}; + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0'; + +var MAX_LENGTH = 256; +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; + +// The actual regexps go on exports.re +var re = exports.re = []; +var src = exports.src = []; +var R = 0; + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++; +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'; +var NUMERICIDENTIFIERLOOSE = R++; +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'; + + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++; +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'; + + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++; +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')'; + +var MAINVERSIONLOOSE = R++; +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')'; + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++; +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + +var PRERELEASEIDENTIFIERLOOSE = R++; +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++; +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'; + +var PRERELEASELOOSE = R++; +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'; + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++; +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'; + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++; +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'; + + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++; +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?'; + +src[FULL] = '^' + FULLPLAIN + '$'; + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?'; + +var LOOSE = R++; +src[LOOSE] = '^' + LOOSEPLAIN + '$'; + +var GTLT = R++; +src[GTLT] = '((?:<|>)?=?)'; + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++; +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'; +var XRANGEIDENTIFIER = R++; +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'; + +var XRANGEPLAIN = R++; +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?'; + +var XRANGEPLAINLOOSE = R++; +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?'; + +var XRANGE = R++; +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'; +var XRANGELOOSE = R++; +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'; + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++; +src[LONETILDE] = '(?:~>?)'; + +var TILDETRIM = R++; +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'; +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g'); +var tildeTrimReplace = '$1~'; + +var TILDE = R++; +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'; +var TILDELOOSE = R++; +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'; + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++; +src[LONECARET] = '(?:\\^)'; + +var CARETTRIM = R++; +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'; +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g'); +var caretTrimReplace = '$1^'; + +var CARET = R++; +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'; +var CARETLOOSE = R++; +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'; + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++; +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'; +var COMPARATOR = R++; +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'; + + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++; +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'; + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g'); +var comparatorTrimReplace = '$1$2$3'; + + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++; +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$'; + +var HYPHENRANGELOOSE = R++; +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$'; + +// Star ranges basically just allow anything at all. +var STAR = R++; +src[STAR] = '(<|>)?=?\\s*\\*'; + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]); + if (!re[i]) + re[i] = new RegExp(src[i]); +} + +exports.parse = parse; +function parse(version, loose) { + if (version instanceof SemVer) + return version; + + if (typeof version !== 'string') + return null; + + if (version.length > MAX_LENGTH) + return null; + + var r = loose ? re[LOOSE] : re[FULL]; + if (!r.test(version)) + return null; + + try { + return new SemVer(version, loose); + } catch (er) { + return null; + } +} + +exports.valid = valid; +function valid(version, loose) { + var v = parse(version, loose); + return v ? v.version : null; +} + + +exports.clean = clean; +function clean(version, loose) { + var s = parse(version.trim().replace(/^[=v]+/, ''), loose); + return s ? s.version : null; +} + +exports.SemVer = SemVer; + +function SemVer(version, loose) { + if (version instanceof SemVer) { + if (version.loose === loose) + return version; + else + version = version.version; + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version); + } + + if (version.length > MAX_LENGTH) + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + + if (!(this instanceof SemVer)) + return new SemVer(version, loose); + + debug('SemVer', version, loose); + this.loose = loose; + var m = version.trim().match(loose ? re[LOOSE] : re[FULL]); + + if (!m) + throw new TypeError('Invalid Version: ' + version); + + this.raw = version; + + // these are actually numbers + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) + throw new TypeError('Invalid major version') + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) + throw new TypeError('Invalid minor version') + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) + throw new TypeError('Invalid patch version') + + // numberify any prerelease numeric ids + if (!m[4]) + this.prerelease = []; + else + this.prerelease = m[4].split('.').map(function(id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) + return num + } + return id; + }); + + this.build = m[5] ? m[5].split('.') : []; + this.format(); +} + +SemVer.prototype.format = function() { + this.version = this.major + '.' + this.minor + '.' + this.patch; + if (this.prerelease.length) + this.version += '-' + this.prerelease.join('.'); + return this.version; +}; + +SemVer.prototype.toString = function() { + return this.version; +}; + +SemVer.prototype.compare = function(other) { + debug('SemVer.compare', this.version, this.loose, other); + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + return this.compareMain(other) || this.comparePre(other); +}; + +SemVer.prototype.compareMain = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch); +}; + +SemVer.prototype.comparePre = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) + return -1; + else if (!this.prerelease.length && other.prerelease.length) + return 1; + else if (!this.prerelease.length && !other.prerelease.length) + return 0; + + var i = 0; + do { + var a = this.prerelease[i]; + var b = other.prerelease[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) + return 0; + else if (b === undefined) + return 1; + else if (a === undefined) + return -1; + else if (a === b) + continue; + else + return compareIdentifiers(a, b); + } while (++i); +}; + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function(release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc('pre', identifier); + break; + case 'preminor': + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc('pre', identifier); + break; + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0; + this.inc('patch', identifier); + this.inc('pre', identifier); + break; + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) + this.inc('patch', identifier); + this.inc('pre', identifier); + break; + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) + this.major++; + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break; + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) + this.minor++; + this.patch = 0; + this.prerelease = []; + break; + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) + this.patch++; + this.prerelease = []; + break; + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) + this.prerelease = [0]; + else { + var i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) // didn't increment anything + this.prerelease.push(0); + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) + this.prerelease = [identifier, 0]; + } else + this.prerelease = [identifier, 0]; + } + break; + + default: + throw new Error('invalid increment argument: ' + release); + } + this.format(); + this.raw = this.version; + return this; +}; + +exports.inc = inc; +function inc(version, release, loose, identifier) { + if (typeof(loose) === 'string') { + identifier = loose; + loose = undefined; + } + + try { + return new SemVer(version, loose).inc(release, identifier).version; + } catch (er) { + return null; + } +} + +exports.diff = diff; +function diff(version1, version2) { + if (eq(version1, version2)) { + return null; + } else { + var v1 = parse(version1); + var v2 = parse(version2); + if (v1.prerelease.length || v2.prerelease.length) { + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return 'pre'+key; + } + } + } + return 'prerelease'; + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return key; + } + } + } + } +} + +exports.compareIdentifiers = compareIdentifiers; + +var numeric = /^[0-9]+$/; +function compareIdentifiers(a, b) { + var anum = numeric.test(a); + var bnum = numeric.test(b); + + if (anum && bnum) { + a = +a; + b = +b; + } + + return (anum && !bnum) ? -1 : + (bnum && !anum) ? 1 : + a < b ? -1 : + a > b ? 1 : + 0; +} + +exports.rcompareIdentifiers = rcompareIdentifiers; +function rcompareIdentifiers(a, b) { + return compareIdentifiers(b, a); +} + +exports.major = major; +function major(a, loose) { + return new SemVer(a, loose).major; +} + +exports.minor = minor; +function minor(a, loose) { + return new SemVer(a, loose).minor; +} + +exports.patch = patch; +function patch(a, loose) { + return new SemVer(a, loose).patch; +} + +exports.compare = compare; +function compare(a, b, loose) { + return new SemVer(a, loose).compare(b); +} + +exports.compareLoose = compareLoose; +function compareLoose(a, b) { + return compare(a, b, true); +} + +exports.rcompare = rcompare; +function rcompare(a, b, loose) { + return compare(b, a, loose); +} + +exports.sort = sort; +function sort(list, loose) { + return list.sort(function(a, b) { + return exports.compare(a, b, loose); + }); +} + +exports.rsort = rsort; +function rsort(list, loose) { + return list.sort(function(a, b) { + return exports.rcompare(a, b, loose); + }); +} + +exports.gt = gt; +function gt(a, b, loose) { + return compare(a, b, loose) > 0; +} + +exports.lt = lt; +function lt(a, b, loose) { + return compare(a, b, loose) < 0; +} + +exports.eq = eq; +function eq(a, b, loose) { + return compare(a, b, loose) === 0; +} + +exports.neq = neq; +function neq(a, b, loose) { + return compare(a, b, loose) !== 0; +} + +exports.gte = gte; +function gte(a, b, loose) { + return compare(a, b, loose) >= 0; +} + +exports.lte = lte; +function lte(a, b, loose) { + return compare(a, b, loose) <= 0; +} + +exports.cmp = cmp; +function cmp(a, op, b, loose) { + var ret; + switch (op) { + case '===': + if (typeof a === 'object') a = a.version; + if (typeof b === 'object') b = b.version; + ret = a === b; + break; + case '!==': + if (typeof a === 'object') a = a.version; + if (typeof b === 'object') b = b.version; + ret = a !== b; + break; + case '': case '=': case '==': ret = eq(a, b, loose); break; + case '!=': ret = neq(a, b, loose); break; + case '>': ret = gt(a, b, loose); break; + case '>=': ret = gte(a, b, loose); break; + case '<': ret = lt(a, b, loose); break; + case '<=': ret = lte(a, b, loose); break; + default: throw new TypeError('Invalid operator: ' + op); + } + return ret; +} + +exports.Comparator = Comparator; +function Comparator(comp, loose) { + if (comp instanceof Comparator) { + if (comp.loose === loose) + return comp; + else + comp = comp.value; + } + + if (!(this instanceof Comparator)) + return new Comparator(comp, loose); + + debug('comparator', comp, loose); + this.loose = loose; + this.parse(comp); + + if (this.semver === ANY) + this.value = ''; + else + this.value = this.operator + this.semver.version; + + debug('comp', this); +} + +var ANY = {}; +Comparator.prototype.parse = function(comp) { + var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var m = comp.match(r); + + if (!m) + throw new TypeError('Invalid comparator: ' + comp); + + this.operator = m[1]; + if (this.operator === '=') + this.operator = ''; + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) + this.semver = ANY; + else + this.semver = new SemVer(m[2], this.loose); +}; + +Comparator.prototype.toString = function() { + return this.value; +}; + +Comparator.prototype.test = function(version) { + debug('Comparator.test', version, this.loose); + + if (this.semver === ANY) + return true; + + if (typeof version === 'string') + version = new SemVer(version, this.loose); + + return cmp(version, this.operator, this.semver, this.loose); +}; + + +exports.Range = Range; +function Range(range, loose) { + if ((range instanceof Range) && range.loose === loose) + return range; + + if (!(this instanceof Range)) + return new Range(range, loose); + + this.loose = loose; + + // First, split based on boolean or || + this.raw = range; + this.set = range.split(/\s*\|\|\s*/).map(function(range) { + return this.parseRange(range.trim()); + }, this).filter(function(c) { + // throw out any that are not relevant for whatever reason + return c.length; + }); + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range); + } + + this.format(); +} + +Range.prototype.format = function() { + this.range = this.set.map(function(comps) { + return comps.join(' ').trim(); + }).join('||').trim(); + return this.range; +}; + +Range.prototype.toString = function() { + return this.range; +}; + +Range.prototype.parseRange = function(range) { + var loose = this.loose; + range = range.trim(); + debug('range', range, loose); + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; + range = range.replace(hr, hyphenReplace); + debug('hyphen replace', range); + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); + debug('comparator trim', range, re[COMPARATORTRIM]); + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace); + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace); + + // normalize spaces + range = range.split(/\s+/).join(' '); + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var set = range.split(' ').map(function(comp) { + return parseComparator(comp, loose); + }).join(' ').split(/\s+/); + if (this.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function(comp) { + return !!comp.match(compRe); + }); + } + set = set.map(function(comp) { + return new Comparator(comp, loose); + }); + + return set; +}; + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators; +function toComparators(range, loose) { + return new Range(range, loose).set.map(function(comp) { + return comp.map(function(c) { + return c.value; + }).join(' ').trim().split(' '); + }); +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator(comp, loose) { + debug('comp', comp); + comp = replaceCarets(comp, loose); + debug('caret', comp); + comp = replaceTildes(comp, loose); + debug('tildes', comp); + comp = replaceXRanges(comp, loose); + debug('xrange', comp); + comp = replaceStars(comp, loose); + debug('stars', comp); + return comp; +} + +function isX(id) { + return !id || id.toLowerCase() === 'x' || id === '*'; +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes(comp, loose) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceTilde(comp, loose); + }).join(' '); +} + +function replaceTilde(comp, loose) { + var r = loose ? re[TILDELOOSE] : re[TILDE]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + else if (isX(p)) + // ~1.2 == >=1.2.0- <1.3.0- + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + else if (pr) { + debug('replaceTilde pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0'; + + debug('tilde return', ret); + return ret; + }); +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets(comp, loose) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceCaret(comp, loose); + }).join(' '); +} + +function replaceCaret(comp, loose) { + debug('caret', comp, loose); + var r = loose ? re[CARETLOOSE] : re[CARET]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + else if (isX(p)) { + if (M === '0') + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + else + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; + } else if (pr) { + debug('replaceCaret pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + if (M === '0') { + if (m === '0') + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + m + '.' + (+p + 1); + else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + (+M + 1) + '.0.0'; + } else { + debug('no pr'); + if (M === '0') { + if (m === '0') + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1); + else + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0'; + } + + debug('caret return', ret); + return ret; + }); +} + +function replaceXRanges(comp, loose) { + debug('replaceXRanges', comp, loose); + return comp.split(/\s+/).map(function(comp) { + return replaceXRange(comp, loose); + }).join(' '); +} + +function replaceXRange(comp, loose) { + comp = comp.trim(); + var r = loose ? re[XRANGELOOSE] : re[XRANGE]; + return comp.replace(r, function(ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr); + var xM = isX(M); + var xm = xM || isX(m); + var xp = xm || isX(p); + var anyX = xp; + + if (gtlt === '=' && anyX) + gtlt = ''; + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0'; + } else { + // nothing is forbidden + ret = '*'; + } + } else if (gtlt && anyX) { + // replace X with 0 + if (xm) + m = 0; + if (xp) + p = 0; + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>='; + if (xm) { + M = +M + 1; + m = 0; + p = 0; + } else if (xp) { + m = +m + 1; + p = 0; + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) + M = +M + 1 + else + m = +m + 1 + } + + ret = gtlt + M + '.' + m + '.' + p; + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + } + + debug('xRange return', ret); + + return ret; + }); +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars(comp, loose) { + debug('replaceStars', comp, loose); + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], ''); +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + + if (isX(fM)) + from = ''; + else if (isX(fm)) + from = '>=' + fM + '.0.0'; + else if (isX(fp)) + from = '>=' + fM + '.' + fm + '.0'; + else + from = '>=' + from; + + if (isX(tM)) + to = ''; + else if (isX(tm)) + to = '<' + (+tM + 1) + '.0.0'; + else if (isX(tp)) + to = '<' + tM + '.' + (+tm + 1) + '.0'; + else if (tpr) + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; + else + to = '<=' + to; + + return (from + ' ' + to).trim(); +} + + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function(version) { + if (!version) + return false; + + if (typeof version === 'string') + version = new SemVer(version, this.loose); + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version)) + return true; + } + return false; +}; + +function testSet(set, version) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) + return false; + } + + if (version.prerelease.length) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (var i = 0; i < set.length; i++) { + debug(set[i].semver); + if (set[i].semver === ANY) + continue; + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver; + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) + return true; + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false; + } + + return true; +} + +exports.satisfies = satisfies; +function satisfies(version, range, loose) { + try { + range = new Range(range, loose); + } catch (er) { + return false; + } + return range.test(version); +} + +exports.maxSatisfying = maxSatisfying; +function maxSatisfying(versions, range, loose) { + return versions.filter(function(version) { + return satisfies(version, range, loose); + }).sort(function(a, b) { + return rcompare(a, b, loose); + })[0] || null; +} + +exports.validRange = validRange; +function validRange(range, loose) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, loose).range || '*'; + } catch (er) { + return null; + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr; +function ltr(version, range, loose) { + return outside(version, range, '<', loose); +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr; +function gtr(version, range, loose) { + return outside(version, range, '>', loose); +} + +exports.outside = outside; +function outside(version, range, hilo, loose) { + version = new SemVer(version, loose); + range = new Range(range, loose); + + var gtfn, ltefn, ltfn, comp, ecomp; + switch (hilo) { + case '>': + gtfn = gt; + ltefn = lte; + ltfn = lt; + comp = '>'; + ecomp = '>='; + break; + case '<': + gtfn = lt; + ltefn = gte; + ltfn = gt; + comp = '<'; + ecomp = '<='; + break; + default: + throw new TypeError('Must provide a hilo val of "<" or ">"'); + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, loose)) { + return false; + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i]; + + var high = null; + var low = null; + + comparators.forEach(function(comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator; + low = low || comparator; + if (gtfn(comparator.semver, high.semver, loose)) { + high = comparator; + } else if (ltfn(comparator.semver, low.semver, loose)) { + low = comparator; + } + }); + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false; + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false; + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false; + } + } + return true; +} diff --git a/platforms/android/cordova/node_modules/semver/test/big-numbers.js b/platforms/android/cordova/node_modules/semver/test/big-numbers.js new file mode 100644 index 0000000..c051864 --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/test/big-numbers.js @@ -0,0 +1,31 @@ +var test = require('tap').test +var semver = require('../') + +test('long version is too long', function (t) { + var v = '1.2.' + new Array(256).join('1') + t.throws(function () { + new semver.SemVer(v) + }) + t.equal(semver.valid(v, false), null) + t.equal(semver.valid(v, true), null) + t.equal(semver.inc(v, 'patch'), null) + t.end() +}) + +test('big number is like too long version', function (t) { + var v = '1.2.' + new Array(100).join('1') + t.throws(function () { + new semver.SemVer(v) + }) + t.equal(semver.valid(v, false), null) + t.equal(semver.valid(v, true), null) + t.equal(semver.inc(v, 'patch'), null) + t.end() +}) + +test('parsing null does not throw', function (t) { + t.equal(semver.parse(null), null) + t.equal(semver.parse({}), null) + t.equal(semver.parse(new semver.SemVer('1.2.3')).version, '1.2.3') + t.end() +}) diff --git a/platforms/android/cordova/node_modules/semver/test/clean.js b/platforms/android/cordova/node_modules/semver/test/clean.js new file mode 100644 index 0000000..9e268de --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/test/clean.js @@ -0,0 +1,29 @@ +var tap = require('tap'); +var test = tap.test; +var semver = require('../semver.js'); +var clean = semver.clean; + +test('\nclean tests', function(t) { + // [range, version] + // Version should be detectable despite extra characters + [ + ['1.2.3', '1.2.3'], + [' 1.2.3 ', '1.2.3'], + [' 1.2.3-4 ', '1.2.3-4'], + [' 1.2.3-pre ', '1.2.3-pre'], + [' =v1.2.3 ', '1.2.3'], + ['v1.2.3', '1.2.3'], + [' v1.2.3 ', '1.2.3'], + ['\t1.2.3', '1.2.3'], + ['>1.2.3', null], + ['~1.2.3', null], + ['<=1.2.3', null], + ['1.2.x', null] + ].forEach(function(tuple) { + var range = tuple[0]; + var version = tuple[1]; + var msg = 'clean(' + range + ') = ' + version; + t.equal(clean(range), version, msg); + }); + t.end(); +}); diff --git a/platforms/android/cordova/node_modules/semver/test/gtr.js b/platforms/android/cordova/node_modules/semver/test/gtr.js new file mode 100644 index 0000000..bbb8789 --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/test/gtr.js @@ -0,0 +1,173 @@ +var tap = require('tap'); +var test = tap.test; +var semver = require('../semver.js'); +var gtr = semver.gtr; + +test('\ngtr tests', function(t) { + // [range, version, loose] + // Version should be greater than range + [ + ['~1.2.2', '1.3.0'], + ['~0.6.1-1', '0.7.1-1'], + ['1.0.0 - 2.0.0', '2.0.1'], + ['1.0.0', '1.0.1-beta1'], + ['1.0.0', '2.0.0'], + ['<=2.0.0', '2.1.1'], + ['<=2.0.0', '3.2.9'], + ['<2.0.0', '2.0.0'], + ['0.1.20 || 1.2.4', '1.2.5'], + ['2.x.x', '3.0.0'], + ['1.2.x', '1.3.0'], + ['1.2.x || 2.x', '3.0.0'], + ['2.*.*', '5.0.1'], + ['1.2.*', '1.3.3'], + ['1.2.* || 2.*', '4.0.0'], + ['2', '3.0.0'], + ['2.3', '2.4.2'], + ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0 + ['~2.4', '2.5.5'], + ['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0 + ['~1', '2.2.3'], // >=1.0.0 <2.0.0 + ['~>1', '2.2.4'], + ['~> 1', '3.2.3'], + ['~1.0', '1.1.2'], // >=1.0.0 <1.1.0 + ['~ 1.0', '1.1.0'], + ['<1.2', '1.2.0'], + ['< 1.2', '1.2.1'], + ['1', '2.0.0beta', true], + ['~v0.5.4-pre', '0.6.0'], + ['~v0.5.4-pre', '0.6.1-pre'], + ['=0.7.x', '0.8.0'], + ['=0.7.x', '0.8.0-asdf'], + ['<0.7.x', '0.7.0'], + ['~1.2.2', '1.3.0'], + ['1.0.0 - 2.0.0', '2.2.3'], + ['1.0.0', '1.0.1'], + ['<=2.0.0', '3.0.0'], + ['<=2.0.0', '2.9999.9999'], + ['<=2.0.0', '2.2.9'], + ['<2.0.0', '2.9999.9999'], + ['<2.0.0', '2.2.9'], + ['2.x.x', '3.1.3'], + ['1.2.x', '1.3.3'], + ['1.2.x || 2.x', '3.1.3'], + ['2.*.*', '3.1.3'], + ['1.2.*', '1.3.3'], + ['1.2.* || 2.*', '3.1.3'], + ['2', '3.1.2'], + ['2.3', '2.4.1'], + ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0 + ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0 + ['~1', '2.2.3'], // >=1.0.0 <2.0.0 + ['~>1', '2.2.3'], + ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0 + ['<1', '1.0.0'], + ['1', '2.0.0beta', true], + ['<1', '1.0.0beta', true], + ['< 1', '1.0.0beta', true], + ['=0.7.x', '0.8.2'], + ['<0.7.x', '0.7.2'] + ].forEach(function(tuple) { + var range = tuple[0]; + var version = tuple[1]; + var loose = tuple[2] || false; + var msg = 'gtr(' + version + ', ' + range + ', ' + loose + ')'; + t.ok(gtr(version, range, loose), msg); + }); + t.end(); +}); + +test('\nnegative gtr tests', function(t) { + // [range, version, loose] + // Version should NOT be greater than range + [ + ['~0.6.1-1', '0.6.1-1'], + ['1.0.0 - 2.0.0', '1.2.3'], + ['1.0.0 - 2.0.0', '0.9.9'], + ['1.0.0', '1.0.0'], + ['>=*', '0.2.4'], + ['', '1.0.0', true], + ['*', '1.2.3'], + ['*', 'v1.2.3-foo'], + ['>=1.0.0', '1.0.0'], + ['>=1.0.0', '1.0.1'], + ['>=1.0.0', '1.1.0'], + ['>1.0.0', '1.0.1'], + ['>1.0.0', '1.1.0'], + ['<=2.0.0', '2.0.0'], + ['<=2.0.0', '1.9999.9999'], + ['<=2.0.0', '0.2.9'], + ['<2.0.0', '1.9999.9999'], + ['<2.0.0', '0.2.9'], + ['>= 1.0.0', '1.0.0'], + ['>= 1.0.0', '1.0.1'], + ['>= 1.0.0', '1.1.0'], + ['> 1.0.0', '1.0.1'], + ['> 1.0.0', '1.1.0'], + ['<= 2.0.0', '2.0.0'], + ['<= 2.0.0', '1.9999.9999'], + ['<= 2.0.0', '0.2.9'], + ['< 2.0.0', '1.9999.9999'], + ['<\t2.0.0', '0.2.9'], + ['>=0.1.97', 'v0.1.97'], + ['>=0.1.97', '0.1.97'], + ['0.1.20 || 1.2.4', '1.2.4'], + ['0.1.20 || >1.2.4', '1.2.4'], + ['0.1.20 || 1.2.4', '1.2.3'], + ['0.1.20 || 1.2.4', '0.1.20'], + ['>=0.2.3 || <0.0.1', '0.0.0'], + ['>=0.2.3 || <0.0.1', '0.2.3'], + ['>=0.2.3 || <0.0.1', '0.2.4'], + ['||', '1.3.4'], + ['2.x.x', '2.1.3'], + ['1.2.x', '1.2.3'], + ['1.2.x || 2.x', '2.1.3'], + ['1.2.x || 2.x', '1.2.3'], + ['x', '1.2.3'], + ['2.*.*', '2.1.3'], + ['1.2.*', '1.2.3'], + ['1.2.* || 2.*', '2.1.3'], + ['1.2.* || 2.*', '1.2.3'], + ['1.2.* || 2.*', '1.2.3'], + ['*', '1.2.3'], + ['2', '2.1.2'], + ['2.3', '2.3.1'], + ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 + ['~2.4', '2.4.5'], + ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0 + ['~1', '1.2.3'], // >=1.0.0 <2.0.0 + ['~>1', '1.2.3'], + ['~> 1', '1.2.3'], + ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0 + ['~ 1.0', '1.0.2'], + ['>=1', '1.0.0'], + ['>= 1', '1.0.0'], + ['<1.2', '1.1.1'], + ['< 1.2', '1.1.1'], + ['1', '1.0.0beta', true], + ['~v0.5.4-pre', '0.5.5'], + ['~v0.5.4-pre', '0.5.4'], + ['=0.7.x', '0.7.2'], + ['>=0.7.x', '0.7.2'], + ['=0.7.x', '0.7.0-asdf'], + ['>=0.7.x', '0.7.0-asdf'], + ['<=0.7.x', '0.6.2'], + ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'], + ['>=0.2.3 <=0.2.4', '0.2.4'], + ['1.0.0 - 2.0.0', '2.0.0'], + ['^1', '0.0.0-0'], + ['^3.0.0', '2.0.0'], + ['^1.0.0 || ~2.0.1', '2.0.0'], + ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'], + ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true], + ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true], + ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'] + ].forEach(function(tuple) { + var range = tuple[0]; + var version = tuple[1]; + var loose = tuple[2] || false; + var msg = '!gtr(' + version + ', ' + range + ', ' + loose + ')'; + t.notOk(gtr(version, range, loose), msg); + }); + t.end(); +}); diff --git a/platforms/android/cordova/node_modules/semver/test/index.js b/platforms/android/cordova/node_modules/semver/test/index.js new file mode 100644 index 0000000..47c3f5f --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/test/index.js @@ -0,0 +1,698 @@ +'use strict'; + +var tap = require('tap'); +var test = tap.test; +var semver = require('../semver.js'); +var eq = semver.eq; +var gt = semver.gt; +var lt = semver.lt; +var neq = semver.neq; +var cmp = semver.cmp; +var gte = semver.gte; +var lte = semver.lte; +var satisfies = semver.satisfies; +var validRange = semver.validRange; +var inc = semver.inc; +var diff = semver.diff; +var replaceStars = semver.replaceStars; +var toComparators = semver.toComparators; +var SemVer = semver.SemVer; +var Range = semver.Range; + +test('\ncomparison tests', function(t) { + // [version1, version2] + // version1 should be greater than version2 + [['0.0.0', '0.0.0-foo'], + ['0.0.1', '0.0.0'], + ['1.0.0', '0.9.9'], + ['0.10.0', '0.9.0'], + ['0.99.0', '0.10.0'], + ['2.0.0', '1.2.3'], + ['v0.0.0', '0.0.0-foo', true], + ['v0.0.1', '0.0.0', true], + ['v1.0.0', '0.9.9', true], + ['v0.10.0', '0.9.0', true], + ['v0.99.0', '0.10.0', true], + ['v2.0.0', '1.2.3', true], + ['0.0.0', 'v0.0.0-foo', true], + ['0.0.1', 'v0.0.0', true], + ['1.0.0', 'v0.9.9', true], + ['0.10.0', 'v0.9.0', true], + ['0.99.0', 'v0.10.0', true], + ['2.0.0', 'v1.2.3', true], + ['1.2.3', '1.2.3-asdf'], + ['1.2.3', '1.2.3-4'], + ['1.2.3', '1.2.3-4-foo'], + ['1.2.3-5-foo', '1.2.3-5'], + ['1.2.3-5', '1.2.3-4'], + ['1.2.3-5-foo', '1.2.3-5-Foo'], + ['3.0.0', '2.7.2+asdf'], + ['1.2.3-a.10', '1.2.3-a.5'], + ['1.2.3-a.b', '1.2.3-a.5'], + ['1.2.3-a.b', '1.2.3-a'], + ['1.2.3-a.b.c.10.d.5', '1.2.3-a.b.c.5.d.100'], + ['1.2.3-r2', '1.2.3-r100'], + ['1.2.3-r100', '1.2.3-R2'] + ].forEach(function(v) { + var v0 = v[0]; + var v1 = v[1]; + var loose = v[2]; + t.ok(gt(v0, v1, loose), "gt('" + v0 + "', '" + v1 + "')"); + t.ok(lt(v1, v0, loose), "lt('" + v1 + "', '" + v0 + "')"); + t.ok(!gt(v1, v0, loose), "!gt('" + v1 + "', '" + v0 + "')"); + t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')"); + t.ok(eq(v0, v0, loose), "eq('" + v0 + "', '" + v0 + "')"); + t.ok(eq(v1, v1, loose), "eq('" + v1 + "', '" + v1 + "')"); + t.ok(neq(v0, v1, loose), "neq('" + v0 + "', '" + v1 + "')"); + t.ok(cmp(v1, '==', v1, loose), "cmp('" + v1 + "' == '" + v1 + "')"); + t.ok(cmp(v0, '>=', v1, loose), "cmp('" + v0 + "' >= '" + v1 + "')"); + t.ok(cmp(v1, '<=', v0, loose), "cmp('" + v1 + "' <= '" + v0 + "')"); + t.ok(cmp(v0, '!=', v1, loose), "cmp('" + v0 + "' != '" + v1 + "')"); + }); + t.end(); +}); + +test('\nequality tests', function(t) { + // [version1, version2] + // version1 should be equivalent to version2 + [['1.2.3', 'v1.2.3', true], + ['1.2.3', '=1.2.3', true], + ['1.2.3', 'v 1.2.3', true], + ['1.2.3', '= 1.2.3', true], + ['1.2.3', ' v1.2.3', true], + ['1.2.3', ' =1.2.3', true], + ['1.2.3', ' v 1.2.3', true], + ['1.2.3', ' = 1.2.3', true], + ['1.2.3-0', 'v1.2.3-0', true], + ['1.2.3-0', '=1.2.3-0', true], + ['1.2.3-0', 'v 1.2.3-0', true], + ['1.2.3-0', '= 1.2.3-0', true], + ['1.2.3-0', ' v1.2.3-0', true], + ['1.2.3-0', ' =1.2.3-0', true], + ['1.2.3-0', ' v 1.2.3-0', true], + ['1.2.3-0', ' = 1.2.3-0', true], + ['1.2.3-1', 'v1.2.3-1', true], + ['1.2.3-1', '=1.2.3-1', true], + ['1.2.3-1', 'v 1.2.3-1', true], + ['1.2.3-1', '= 1.2.3-1', true], + ['1.2.3-1', ' v1.2.3-1', true], + ['1.2.3-1', ' =1.2.3-1', true], + ['1.2.3-1', ' v 1.2.3-1', true], + ['1.2.3-1', ' = 1.2.3-1', true], + ['1.2.3-beta', 'v1.2.3-beta', true], + ['1.2.3-beta', '=1.2.3-beta', true], + ['1.2.3-beta', 'v 1.2.3-beta', true], + ['1.2.3-beta', '= 1.2.3-beta', true], + ['1.2.3-beta', ' v1.2.3-beta', true], + ['1.2.3-beta', ' =1.2.3-beta', true], + ['1.2.3-beta', ' v 1.2.3-beta', true], + ['1.2.3-beta', ' = 1.2.3-beta', true], + ['1.2.3-beta+build', ' = 1.2.3-beta+otherbuild', true], + ['1.2.3+build', ' = 1.2.3+otherbuild', true], + ['1.2.3-beta+build', '1.2.3-beta+otherbuild'], + ['1.2.3+build', '1.2.3+otherbuild'], + [' v1.2.3+build', '1.2.3+otherbuild'] + ].forEach(function(v) { + var v0 = v[0]; + var v1 = v[1]; + var loose = v[2]; + t.ok(eq(v0, v1, loose), "eq('" + v0 + "', '" + v1 + "')"); + t.ok(!neq(v0, v1, loose), "!neq('" + v0 + "', '" + v1 + "')"); + t.ok(cmp(v0, '==', v1, loose), 'cmp(' + v0 + '==' + v1 + ')'); + t.ok(!cmp(v0, '!=', v1, loose), '!cmp(' + v0 + '!=' + v1 + ')'); + t.ok(!cmp(v0, '===', v1, loose), '!cmp(' + v0 + '===' + v1 + ')'); + t.ok(cmp(v0, '!==', v1, loose), 'cmp(' + v0 + '!==' + v1 + ')'); + t.ok(!gt(v0, v1, loose), "!gt('" + v0 + "', '" + v1 + "')"); + t.ok(gte(v0, v1, loose), "gte('" + v0 + "', '" + v1 + "')"); + t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')"); + t.ok(lte(v0, v1, loose), "lte('" + v0 + "', '" + v1 + "')"); + }); + t.end(); +}); + + +test('\nrange tests', function(t) { + // [range, version] + // version should be included by range + [['1.0.0 - 2.0.0', '1.2.3'], + ['^1.2.3+build', '1.2.3'], + ['^1.2.3+build', '1.3.0'], + ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3'], + ['1.2.3pre+asdf - 2.4.3-pre+asdf', '1.2.3', true], + ['1.2.3-pre+asdf - 2.4.3pre+asdf', '1.2.3', true], + ['1.2.3pre+asdf - 2.4.3pre+asdf', '1.2.3', true], + ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3-pre.2'], + ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '2.4.3-alpha'], + ['1.2.3+asdf - 2.4.3+asdf', '1.2.3'], + ['1.0.0', '1.0.0'], + ['>=*', '0.2.4'], + ['', '1.0.0'], + ['*', '1.2.3'], + ['*', 'v1.2.3', true], + ['>=1.0.0', '1.0.0'], + ['>=1.0.0', '1.0.1'], + ['>=1.0.0', '1.1.0'], + ['>1.0.0', '1.0.1'], + ['>1.0.0', '1.1.0'], + ['<=2.0.0', '2.0.0'], + ['<=2.0.0', '1.9999.9999'], + ['<=2.0.0', '0.2.9'], + ['<2.0.0', '1.9999.9999'], + ['<2.0.0', '0.2.9'], + ['>= 1.0.0', '1.0.0'], + ['>= 1.0.0', '1.0.1'], + ['>= 1.0.0', '1.1.0'], + ['> 1.0.0', '1.0.1'], + ['> 1.0.0', '1.1.0'], + ['<= 2.0.0', '2.0.0'], + ['<= 2.0.0', '1.9999.9999'], + ['<= 2.0.0', '0.2.9'], + ['< 2.0.0', '1.9999.9999'], + ['<\t2.0.0', '0.2.9'], + ['>=0.1.97', 'v0.1.97', true], + ['>=0.1.97', '0.1.97'], + ['0.1.20 || 1.2.4', '1.2.4'], + ['>=0.2.3 || <0.0.1', '0.0.0'], + ['>=0.2.3 || <0.0.1', '0.2.3'], + ['>=0.2.3 || <0.0.1', '0.2.4'], + ['||', '1.3.4'], + ['2.x.x', '2.1.3'], + ['1.2.x', '1.2.3'], + ['1.2.x || 2.x', '2.1.3'], + ['1.2.x || 2.x', '1.2.3'], + ['x', '1.2.3'], + ['2.*.*', '2.1.3'], + ['1.2.*', '1.2.3'], + ['1.2.* || 2.*', '2.1.3'], + ['1.2.* || 2.*', '1.2.3'], + ['*', '1.2.3'], + ['2', '2.1.2'], + ['2.3', '2.3.1'], + ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 + ['~2.4', '2.4.5'], + ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0, + ['~1', '1.2.3'], // >=1.0.0 <2.0.0 + ['~>1', '1.2.3'], + ['~> 1', '1.2.3'], + ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0, + ['~ 1.0', '1.0.2'], + ['~ 1.0.3', '1.0.12'], + ['>=1', '1.0.0'], + ['>= 1', '1.0.0'], + ['<1.2', '1.1.1'], + ['< 1.2', '1.1.1'], + ['~v0.5.4-pre', '0.5.5'], + ['~v0.5.4-pre', '0.5.4'], + ['=0.7.x', '0.7.2'], + ['<=0.7.x', '0.7.2'], + ['>=0.7.x', '0.7.2'], + ['<=0.7.x', '0.6.2'], + ['~1.2.1 >=1.2.3', '1.2.3'], + ['~1.2.1 =1.2.3', '1.2.3'], + ['~1.2.1 1.2.3', '1.2.3'], + ['~1.2.1 >=1.2.3 1.2.3', '1.2.3'], + ['~1.2.1 1.2.3 >=1.2.3', '1.2.3'], + ['~1.2.1 1.2.3', '1.2.3'], + ['>=1.2.1 1.2.3', '1.2.3'], + ['1.2.3 >=1.2.1', '1.2.3'], + ['>=1.2.3 >=1.2.1', '1.2.3'], + ['>=1.2.1 >=1.2.3', '1.2.3'], + ['>=1.2', '1.2.8'], + ['^1.2.3', '1.8.1'], + ['^0.1.2', '0.1.2'], + ['^0.1', '0.1.2'], + ['^1.2', '1.4.2'], + ['^1.2 ^1', '1.4.2'], + ['^1.2.3-alpha', '1.2.3-pre'], + ['^1.2.0-alpha', '1.2.0-pre'], + ['^0.0.1-alpha', '0.0.1-beta'] + ].forEach(function(v) { + var range = v[0]; + var ver = v[1]; + var loose = v[2]; + t.ok(satisfies(ver, range, loose), range + ' satisfied by ' + ver); + }); + t.end(); +}); + +test('\nnegative range tests', function(t) { + // [range, version] + // version should not be included by range + [['1.0.0 - 2.0.0', '2.2.3'], + ['1.2.3+asdf - 2.4.3+asdf', '1.2.3-pre.2'], + ['1.2.3+asdf - 2.4.3+asdf', '2.4.3-alpha'], + ['^1.2.3+build', '2.0.0'], + ['^1.2.3+build', '1.2.0'], + ['^1.2.3', '1.2.3-pre'], + ['^1.2', '1.2.0-pre'], + ['>1.2', '1.3.0-beta'], + ['<=1.2.3', '1.2.3-beta'], + ['^1.2.3', '1.2.3-beta'], + ['=0.7.x', '0.7.0-asdf'], + ['>=0.7.x', '0.7.0-asdf'], + ['1', '1.0.0beta', true], + ['<1', '1.0.0beta', true], + ['< 1', '1.0.0beta', true], + ['1.0.0', '1.0.1'], + ['>=1.0.0', '0.0.0'], + ['>=1.0.0', '0.0.1'], + ['>=1.0.0', '0.1.0'], + ['>1.0.0', '0.0.1'], + ['>1.0.0', '0.1.0'], + ['<=2.0.0', '3.0.0'], + ['<=2.0.0', '2.9999.9999'], + ['<=2.0.0', '2.2.9'], + ['<2.0.0', '2.9999.9999'], + ['<2.0.0', '2.2.9'], + ['>=0.1.97', 'v0.1.93', true], + ['>=0.1.97', '0.1.93'], + ['0.1.20 || 1.2.4', '1.2.3'], + ['>=0.2.3 || <0.0.1', '0.0.3'], + ['>=0.2.3 || <0.0.1', '0.2.2'], + ['2.x.x', '1.1.3'], + ['2.x.x', '3.1.3'], + ['1.2.x', '1.3.3'], + ['1.2.x || 2.x', '3.1.3'], + ['1.2.x || 2.x', '1.1.3'], + ['2.*.*', '1.1.3'], + ['2.*.*', '3.1.3'], + ['1.2.*', '1.3.3'], + ['1.2.* || 2.*', '3.1.3'], + ['1.2.* || 2.*', '1.1.3'], + ['2', '1.1.2'], + ['2.3', '2.4.1'], + ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0 + ['~2.4', '2.3.9'], + ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0 + ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0 + ['~1', '0.2.3'], // >=1.0.0 <2.0.0 + ['~>1', '2.2.3'], + ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0 + ['<1', '1.0.0'], + ['>=1.2', '1.1.1'], + ['1', '2.0.0beta', true], + ['~v0.5.4-beta', '0.5.4-alpha'], + ['=0.7.x', '0.8.2'], + ['>=0.7.x', '0.6.2'], + ['<0.7.x', '0.7.2'], + ['<1.2.3', '1.2.3-beta'], + ['=1.2.3', '1.2.3-beta'], + ['>1.2', '1.2.8'], + ['^1.2.3', '2.0.0-alpha'], + ['^1.2.3', '1.2.2'], + ['^1.2', '1.1.9'], + ['*', 'v1.2.3-foo', true], + // invalid ranges never satisfied! + ['blerg', '1.2.3'], + ['git+https://user:password0123@github.com/foo', '123.0.0', true], + ['^1.2.3', '2.0.0-pre'] + ].forEach(function(v) { + var range = v[0]; + var ver = v[1]; + var loose = v[2]; + var found = satisfies(ver, range, loose); + t.ok(!found, ver + ' not satisfied by ' + range); + }); + t.end(); +}); + +test('\nincrement versions test', function(t) { +// [version, inc, result, identifier] +// inc(version, inc) -> result + [['1.2.3', 'major', '2.0.0'], + ['1.2.3', 'minor', '1.3.0'], + ['1.2.3', 'patch', '1.2.4'], + ['1.2.3tag', 'major', '2.0.0', true], + ['1.2.3-tag', 'major', '2.0.0'], + ['1.2.3', 'fake', null], + ['1.2.0-0', 'patch', '1.2.0'], + ['fake', 'major', null], + ['1.2.3-4', 'major', '2.0.0'], + ['1.2.3-4', 'minor', '1.3.0'], + ['1.2.3-4', 'patch', '1.2.3'], + ['1.2.3-alpha.0.beta', 'major', '2.0.0'], + ['1.2.3-alpha.0.beta', 'minor', '1.3.0'], + ['1.2.3-alpha.0.beta', 'patch', '1.2.3'], + ['1.2.4', 'prerelease', '1.2.5-0'], + ['1.2.3-0', 'prerelease', '1.2.3-1'], + ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'], + ['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'], + ['1.2.3-alpha.2', 'prerelease', '1.2.3-alpha.3'], + ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta'], + ['1.2.3-alpha.1.beta', 'prerelease', '1.2.3-alpha.2.beta'], + ['1.2.3-alpha.2.beta', 'prerelease', '1.2.3-alpha.3.beta'], + ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta'], + ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta'], + ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta'], + ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1'], + ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2'], + ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'], + ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'], + ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'], + ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta'], + ['1.2.0', 'prepatch', '1.2.1-0'], + ['1.2.0-1', 'prepatch', '1.2.1-0'], + ['1.2.0', 'preminor', '1.3.0-0'], + ['1.2.3-1', 'preminor', '1.3.0-0'], + ['1.2.0', 'premajor', '2.0.0-0'], + ['1.2.3-1', 'premajor', '2.0.0-0'], + ['1.2.0-1', 'minor', '1.2.0'], + ['1.0.0-1', 'major', '1.0.0'], + + ['1.2.3', 'major', '2.0.0', false, 'dev'], + ['1.2.3', 'minor', '1.3.0', false, 'dev'], + ['1.2.3', 'patch', '1.2.4', false, 'dev'], + ['1.2.3tag', 'major', '2.0.0', true, 'dev'], + ['1.2.3-tag', 'major', '2.0.0', false, 'dev'], + ['1.2.3', 'fake', null, false, 'dev'], + ['1.2.0-0', 'patch', '1.2.0', false, 'dev'], + ['fake', 'major', null, false, 'dev'], + ['1.2.3-4', 'major', '2.0.0', false, 'dev'], + ['1.2.3-4', 'minor', '1.3.0', false, 'dev'], + ['1.2.3-4', 'patch', '1.2.3', false, 'dev'], + ['1.2.3-alpha.0.beta', 'major', '2.0.0', false, 'dev'], + ['1.2.3-alpha.0.beta', 'minor', '1.3.0', false, 'dev'], + ['1.2.3-alpha.0.beta', 'patch', '1.2.3', false, 'dev'], + ['1.2.4', 'prerelease', '1.2.5-dev.0', false, 'dev'], + ['1.2.3-0', 'prerelease', '1.2.3-dev.0', false, 'dev'], + ['1.2.3-alpha.0', 'prerelease', '1.2.3-dev.0', false, 'dev'], + ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1', false, 'alpha'], + ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], + ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta', false, 'alpha'], + ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], + ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta', false, 'alpha'], + ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta', false, 'alpha'], + ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta', false, 'alpha'], + ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-dev.0', false, 'dev'], + ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1', false, 'alpha'], + ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2', false, 'alpha'], + ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3', false, 'alpha'], + ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], + ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta', false, 'alpha'], + ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta', false, 'alpha'], + ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta', false, 'alpha'], + ['1.2.0', 'prepatch', '1.2.1-dev.0', false, 'dev'], + ['1.2.0-1', 'prepatch', '1.2.1-dev.0', false, 'dev'], + ['1.2.0', 'preminor', '1.3.0-dev.0', false, 'dev'], + ['1.2.3-1', 'preminor', '1.3.0-dev.0', false, 'dev'], + ['1.2.0', 'premajor', '2.0.0-dev.0', false, 'dev'], + ['1.2.3-1', 'premajor', '2.0.0-dev.0', false, 'dev'], + ['1.2.0-1', 'minor', '1.2.0', false, 'dev'], + ['1.0.0-1', 'major', '1.0.0', false, 'dev'], + ['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.0', false, 'dev'] + + ].forEach(function(v) { + var pre = v[0]; + var what = v[1]; + var wanted = v[2]; + var loose = v[3]; + var id = v[4]; + var found = inc(pre, what, loose, id); + var cmd = 'inc(' + pre + ', ' + what + ', ' + id + ')'; + t.equal(found, wanted, cmd + ' === ' + wanted); + + var parsed = semver.parse(pre, loose); + if (wanted) { + parsed.inc(what, id); + t.equal(parsed.version, wanted, cmd + ' object version updated'); + t.equal(parsed.raw, wanted, cmd + ' object raw field updated'); + } else if (parsed) { + t.throws(function () { + parsed.inc(what, id) + }) + } else { + t.equal(parsed, null) + } + }); + + t.end(); +}); + +test('\ndiff versions test', function(t) { +// [version1, version2, result] +// diff(version1, version2) -> result + [['1.2.3', '0.2.3', 'major'], + ['1.4.5', '0.2.3', 'major'], + ['1.2.3', '2.0.0-pre', 'premajor'], + ['1.2.3', '1.3.3', 'minor'], + ['1.0.1', '1.1.0-pre', 'preminor'], + ['1.2.3', '1.2.4', 'patch'], + ['1.2.3', '1.2.4-pre', 'prepatch'], + ['0.0.1', '0.0.1-pre', 'prerelease'], + ['0.0.1', '0.0.1-pre-2', 'prerelease'], + ['1.1.0', '1.1.0-pre', 'prerelease'], + ['1.1.0-pre-1', '1.1.0-pre-2', 'prerelease'], + ['1.0.0', '1.0.0', null] + + ].forEach(function(v) { + var version1 = v[0]; + var version2 = v[1]; + var wanted = v[2]; + var found = diff(version1, version2); + var cmd = 'diff(' + version1 + ', ' + version2 + ')'; + t.equal(found, wanted, cmd + ' === ' + wanted); + }); + + t.end(); +}); + +test('\nvalid range test', function(t) { + // [range, result] + // validRange(range) -> result + // translate ranges into their canonical form + [['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'], + ['1.0.0', '1.0.0'], + ['>=*', '*'], + ['', '*'], + ['*', '*'], + ['*', '*'], + ['>=1.0.0', '>=1.0.0'], + ['>1.0.0', '>1.0.0'], + ['<=2.0.0', '<=2.0.0'], + ['1', '>=1.0.0 <2.0.0'], + ['<=2.0.0', '<=2.0.0'], + ['<=2.0.0', '<=2.0.0'], + ['<2.0.0', '<2.0.0'], + ['<2.0.0', '<2.0.0'], + ['>= 1.0.0', '>=1.0.0'], + ['>= 1.0.0', '>=1.0.0'], + ['>= 1.0.0', '>=1.0.0'], + ['> 1.0.0', '>1.0.0'], + ['> 1.0.0', '>1.0.0'], + ['<= 2.0.0', '<=2.0.0'], + ['<= 2.0.0', '<=2.0.0'], + ['<= 2.0.0', '<=2.0.0'], + ['< 2.0.0', '<2.0.0'], + ['< 2.0.0', '<2.0.0'], + ['>=0.1.97', '>=0.1.97'], + ['>=0.1.97', '>=0.1.97'], + ['0.1.20 || 1.2.4', '0.1.20||1.2.4'], + ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], + ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], + ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], + ['||', '||'], + ['2.x.x', '>=2.0.0 <3.0.0'], + ['1.2.x', '>=1.2.0 <1.3.0'], + ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], + ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], + ['x', '*'], + ['2.*.*', '>=2.0.0 <3.0.0'], + ['1.2.*', '>=1.2.0 <1.3.0'], + ['1.2.* || 2.*', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], + ['*', '*'], + ['2', '>=2.0.0 <3.0.0'], + ['2.3', '>=2.3.0 <2.4.0'], + ['~2.4', '>=2.4.0 <2.5.0'], + ['~2.4', '>=2.4.0 <2.5.0'], + ['~>3.2.1', '>=3.2.1 <3.3.0'], + ['~1', '>=1.0.0 <2.0.0'], + ['~>1', '>=1.0.0 <2.0.0'], + ['~> 1', '>=1.0.0 <2.0.0'], + ['~1.0', '>=1.0.0 <1.1.0'], + ['~ 1.0', '>=1.0.0 <1.1.0'], + ['^0', '>=0.0.0 <1.0.0'], + ['^ 1', '>=1.0.0 <2.0.0'], + ['^0.1', '>=0.1.0 <0.2.0'], + ['^1.0', '>=1.0.0 <2.0.0'], + ['^1.2', '>=1.2.0 <2.0.0'], + ['^0.0.1', '>=0.0.1 <0.0.2'], + ['^0.0.1-beta', '>=0.0.1-beta <0.0.2'], + ['^0.1.2', '>=0.1.2 <0.2.0'], + ['^1.2.3', '>=1.2.3 <2.0.0'], + ['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0'], + ['<1', '<1.0.0'], + ['< 1', '<1.0.0'], + ['>=1', '>=1.0.0'], + ['>= 1', '>=1.0.0'], + ['<1.2', '<1.2.0'], + ['< 1.2', '<1.2.0'], + ['1', '>=1.0.0 <2.0.0'], + ['>01.02.03', '>1.2.3', true], + ['>01.02.03', null], + ['~1.2.3beta', '>=1.2.3-beta <1.3.0', true], + ['~1.2.3beta', null], + ['^ 1.2 ^ 1', '>=1.2.0 <2.0.0 >=1.0.0 <2.0.0'] + ].forEach(function(v) { + var pre = v[0]; + var wanted = v[1]; + var loose = v[2]; + var found = validRange(pre, loose); + + t.equal(found, wanted, 'validRange(' + pre + ') === ' + wanted); + }); + + t.end(); +}); + +test('\ncomparators test', function(t) { + // [range, comparators] + // turn range into a set of individual comparators + [['1.0.0 - 2.0.0', [['>=1.0.0', '<=2.0.0']]], + ['1.0.0', [['1.0.0']]], + ['>=*', [['']]], + ['', [['']]], + ['*', [['']]], + ['*', [['']]], + ['>=1.0.0', [['>=1.0.0']]], + ['>=1.0.0', [['>=1.0.0']]], + ['>=1.0.0', [['>=1.0.0']]], + ['>1.0.0', [['>1.0.0']]], + ['>1.0.0', [['>1.0.0']]], + ['<=2.0.0', [['<=2.0.0']]], + ['1', [['>=1.0.0', '<2.0.0']]], + ['<=2.0.0', [['<=2.0.0']]], + ['<=2.0.0', [['<=2.0.0']]], + ['<2.0.0', [['<2.0.0']]], + ['<2.0.0', [['<2.0.0']]], + ['>= 1.0.0', [['>=1.0.0']]], + ['>= 1.0.0', [['>=1.0.0']]], + ['>= 1.0.0', [['>=1.0.0']]], + ['> 1.0.0', [['>1.0.0']]], + ['> 1.0.0', [['>1.0.0']]], + ['<= 2.0.0', [['<=2.0.0']]], + ['<= 2.0.0', [['<=2.0.0']]], + ['<= 2.0.0', [['<=2.0.0']]], + ['< 2.0.0', [['<2.0.0']]], + ['<\t2.0.0', [['<2.0.0']]], + ['>=0.1.97', [['>=0.1.97']]], + ['>=0.1.97', [['>=0.1.97']]], + ['0.1.20 || 1.2.4', [['0.1.20'], ['1.2.4']]], + ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], + ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], + ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], + ['||', [[''], ['']]], + ['2.x.x', [['>=2.0.0', '<3.0.0']]], + ['1.2.x', [['>=1.2.0', '<1.3.0']]], + ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], + ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], + ['x', [['']]], + ['2.*.*', [['>=2.0.0', '<3.0.0']]], + ['1.2.*', [['>=1.2.0', '<1.3.0']]], + ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], + ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], + ['*', [['']]], + ['2', [['>=2.0.0', '<3.0.0']]], + ['2.3', [['>=2.3.0', '<2.4.0']]], + ['~2.4', [['>=2.4.0', '<2.5.0']]], + ['~2.4', [['>=2.4.0', '<2.5.0']]], + ['~>3.2.1', [['>=3.2.1', '<3.3.0']]], + ['~1', [['>=1.0.0', '<2.0.0']]], + ['~>1', [['>=1.0.0', '<2.0.0']]], + ['~> 1', [['>=1.0.0', '<2.0.0']]], + ['~1.0', [['>=1.0.0', '<1.1.0']]], + ['~ 1.0', [['>=1.0.0', '<1.1.0']]], + ['~ 1.0.3', [['>=1.0.3', '<1.1.0']]], + ['~> 1.0.3', [['>=1.0.3', '<1.1.0']]], + ['<1', [['<1.0.0']]], + ['< 1', [['<1.0.0']]], + ['>=1', [['>=1.0.0']]], + ['>= 1', [['>=1.0.0']]], + ['<1.2', [['<1.2.0']]], + ['< 1.2', [['<1.2.0']]], + ['1', [['>=1.0.0', '<2.0.0']]], + ['1 2', [['>=1.0.0', '<2.0.0', '>=2.0.0', '<3.0.0']]], + ['1.2 - 3.4.5', [['>=1.2.0', '<=3.4.5']]], + ['1.2.3 - 3.4', [['>=1.2.3', '<3.5.0']]], + ['1.2.3 - 3', [['>=1.2.3', '<4.0.0']]], + ['>*', [['<0.0.0']]], + ['<*', [['<0.0.0']]] + ].forEach(function(v) { + var pre = v[0]; + var wanted = v[1]; + var found = toComparators(v[0]); + var jw = JSON.stringify(wanted); + t.equivalent(found, wanted, 'toComparators(' + pre + ') === ' + jw); + }); + + t.end(); +}); + +test('\ninvalid version numbers', function(t) { + ['1.2.3.4', + 'NOT VALID', + 1.2, + null, + 'Infinity.NaN.Infinity' + ].forEach(function(v) { + t.throws(function() { + new SemVer(v); + }, {name:'TypeError', message:'Invalid Version: ' + v}); + }); + + t.end(); +}); + +test('\nstrict vs loose version numbers', function(t) { + [['=1.2.3', '1.2.3'], + ['01.02.03', '1.2.3'], + ['1.2.3-beta.01', '1.2.3-beta.1'], + [' =1.2.3', '1.2.3'], + ['1.2.3foo', '1.2.3-foo'] + ].forEach(function(v) { + var loose = v[0]; + var strict = v[1]; + t.throws(function() { + new SemVer(loose); + }); + var lv = new SemVer(loose, true); + t.equal(lv.version, strict); + t.ok(eq(loose, strict, true)); + t.throws(function() { + eq(loose, strict); + }); + t.throws(function() { + new SemVer(strict).compare(loose); + }); + }); + t.end(); +}); + +test('\nstrict vs loose ranges', function(t) { + [['>=01.02.03', '>=1.2.3'], + ['~1.02.03beta', '>=1.2.3-beta <1.3.0'] + ].forEach(function(v) { + var loose = v[0]; + var comps = v[1]; + t.throws(function() { + new Range(loose); + }); + t.equal(new Range(loose, true).range, comps); + }); + t.end(); +}); + +test('\nmax satisfying', function(t) { + [[['1.2.3', '1.2.4'], '1.2', '1.2.4'], + [['1.2.4', '1.2.3'], '1.2', '1.2.4'], + [['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.6'], + [['1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2', '2.0.0b3', '2.0.0', '2.1.0'], '~2.0.0', '2.0.0', true] + ].forEach(function(v) { + var versions = v[0]; + var range = v[1]; + var expect = v[2]; + var loose = v[3]; + var actual = semver.maxSatisfying(versions, range, loose); + t.equal(actual, expect); + }); + t.end(); +}); diff --git a/platforms/android/cordova/node_modules/semver/test/ltr.js b/platforms/android/cordova/node_modules/semver/test/ltr.js new file mode 100644 index 0000000..0f7167d --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/test/ltr.js @@ -0,0 +1,181 @@ +var tap = require('tap'); +var test = tap.test; +var semver = require('../semver.js'); +var ltr = semver.ltr; + +test('\nltr tests', function(t) { + // [range, version, loose] + // Version should be less than range + [ + ['~1.2.2', '1.2.1'], + ['~0.6.1-1', '0.6.1-0'], + ['1.0.0 - 2.0.0', '0.0.1'], + ['1.0.0-beta.2', '1.0.0-beta.1'], + ['1.0.0', '0.0.0'], + ['>=2.0.0', '1.1.1'], + ['>=2.0.0', '1.2.9'], + ['>2.0.0', '2.0.0'], + ['0.1.20 || 1.2.4', '0.1.5'], + ['2.x.x', '1.0.0'], + ['1.2.x', '1.1.0'], + ['1.2.x || 2.x', '1.0.0'], + ['2.*.*', '1.0.1'], + ['1.2.*', '1.1.3'], + ['1.2.* || 2.*', '1.1.9999'], + ['2', '1.0.0'], + ['2.3', '2.2.2'], + ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0 + ['~2.4', '2.3.5'], + ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0 + ['~1', '0.2.3'], // >=1.0.0 <2.0.0 + ['~>1', '0.2.4'], + ['~> 1', '0.2.3'], + ['~1.0', '0.1.2'], // >=1.0.0 <1.1.0 + ['~ 1.0', '0.1.0'], + ['>1.2', '1.2.0'], + ['> 1.2', '1.2.1'], + ['1', '0.0.0beta', true], + ['~v0.5.4-pre', '0.5.4-alpha'], + ['~v0.5.4-pre', '0.5.4-alpha'], + ['=0.7.x', '0.6.0'], + ['=0.7.x', '0.6.0-asdf'], + ['>=0.7.x', '0.6.0'], + ['~1.2.2', '1.2.1'], + ['1.0.0 - 2.0.0', '0.2.3'], + ['1.0.0', '0.0.1'], + ['>=2.0.0', '1.0.0'], + ['>=2.0.0', '1.9999.9999'], + ['>=2.0.0', '1.2.9'], + ['>2.0.0', '2.0.0'], + ['>2.0.0', '1.2.9'], + ['2.x.x', '1.1.3'], + ['1.2.x', '1.1.3'], + ['1.2.x || 2.x', '1.1.3'], + ['2.*.*', '1.1.3'], + ['1.2.*', '1.1.3'], + ['1.2.* || 2.*', '1.1.3'], + ['2', '1.9999.9999'], + ['2.3', '2.2.1'], + ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0 + ['~>3.2.1', '2.3.2'], // >=3.2.1 <3.3.0 + ['~1', '0.2.3'], // >=1.0.0 <2.0.0 + ['~>1', '0.2.3'], + ['~1.0', '0.0.0'], // >=1.0.0 <1.1.0 + ['>1', '1.0.0'], + ['2', '1.0.0beta', true], + ['>1', '1.0.0beta', true], + ['> 1', '1.0.0beta', true], + ['=0.7.x', '0.6.2'], + ['=0.7.x', '0.7.0-asdf'], + ['^1', '1.0.0-0'], + ['>=0.7.x', '0.7.0-asdf'], + ['1', '1.0.0beta', true], + ['>=0.7.x', '0.6.2'], + ['>1.2.3', '1.3.0-alpha'] + ].forEach(function(tuple) { + var range = tuple[0]; + var version = tuple[1]; + var loose = tuple[2] || false; + var msg = 'ltr(' + version + ', ' + range + ', ' + loose + ')'; + t.ok(ltr(version, range, loose), msg); + }); + t.end(); +}); + +test('\nnegative ltr tests', function(t) { + // [range, version, loose] + // Version should NOT be less than range + [ + ['~ 1.0', '1.1.0'], + ['~0.6.1-1', '0.6.1-1'], + ['1.0.0 - 2.0.0', '1.2.3'], + ['1.0.0 - 2.0.0', '2.9.9'], + ['1.0.0', '1.0.0'], + ['>=*', '0.2.4'], + ['', '1.0.0', true], + ['*', '1.2.3'], + ['>=1.0.0', '1.0.0'], + ['>=1.0.0', '1.0.1'], + ['>=1.0.0', '1.1.0'], + ['>1.0.0', '1.0.1'], + ['>1.0.0', '1.1.0'], + ['<=2.0.0', '2.0.0'], + ['<=2.0.0', '1.9999.9999'], + ['<=2.0.0', '0.2.9'], + ['<2.0.0', '1.9999.9999'], + ['<2.0.0', '0.2.9'], + ['>= 1.0.0', '1.0.0'], + ['>= 1.0.0', '1.0.1'], + ['>= 1.0.0', '1.1.0'], + ['> 1.0.0', '1.0.1'], + ['> 1.0.0', '1.1.0'], + ['<= 2.0.0', '2.0.0'], + ['<= 2.0.0', '1.9999.9999'], + ['<= 2.0.0', '0.2.9'], + ['< 2.0.0', '1.9999.9999'], + ['<\t2.0.0', '0.2.9'], + ['>=0.1.97', 'v0.1.97'], + ['>=0.1.97', '0.1.97'], + ['0.1.20 || 1.2.4', '1.2.4'], + ['0.1.20 || >1.2.4', '1.2.4'], + ['0.1.20 || 1.2.4', '1.2.3'], + ['0.1.20 || 1.2.4', '0.1.20'], + ['>=0.2.3 || <0.0.1', '0.0.0'], + ['>=0.2.3 || <0.0.1', '0.2.3'], + ['>=0.2.3 || <0.0.1', '0.2.4'], + ['||', '1.3.4'], + ['2.x.x', '2.1.3'], + ['1.2.x', '1.2.3'], + ['1.2.x || 2.x', '2.1.3'], + ['1.2.x || 2.x', '1.2.3'], + ['x', '1.2.3'], + ['2.*.*', '2.1.3'], + ['1.2.*', '1.2.3'], + ['1.2.* || 2.*', '2.1.3'], + ['1.2.* || 2.*', '1.2.3'], + ['1.2.* || 2.*', '1.2.3'], + ['*', '1.2.3'], + ['2', '2.1.2'], + ['2.3', '2.3.1'], + ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 + ['~2.4', '2.4.5'], + ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0 + ['~1', '1.2.3'], // >=1.0.0 <2.0.0 + ['~>1', '1.2.3'], + ['~> 1', '1.2.3'], + ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0 + ['~ 1.0', '1.0.2'], + ['>=1', '1.0.0'], + ['>= 1', '1.0.0'], + ['<1.2', '1.1.1'], + ['< 1.2', '1.1.1'], + ['~v0.5.4-pre', '0.5.5'], + ['~v0.5.4-pre', '0.5.4'], + ['=0.7.x', '0.7.2'], + ['>=0.7.x', '0.7.2'], + ['<=0.7.x', '0.6.2'], + ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'], + ['>=0.2.3 <=0.2.4', '0.2.4'], + ['1.0.0 - 2.0.0', '2.0.0'], + ['^3.0.0', '4.0.0'], + ['^1.0.0 || ~2.0.1', '2.0.0'], + ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'], + ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true], + ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true], + ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'], + ['^1.0.0alpha', '1.0.0beta', true], + ['~1.0.0alpha', '1.0.0beta', true], + ['^1.0.0-alpha', '1.0.0beta', true], + ['~1.0.0-alpha', '1.0.0beta', true], + ['^1.0.0-alpha', '1.0.0-beta'], + ['~1.0.0-alpha', '1.0.0-beta'], + ['=0.1.0', '1.0.0'] + ].forEach(function(tuple) { + var range = tuple[0]; + var version = tuple[1]; + var loose = tuple[2] || false; + var msg = '!ltr(' + version + ', ' + range + ', ' + loose + ')'; + t.notOk(ltr(version, range, loose), msg); + }); + t.end(); +}); diff --git a/platforms/android/cordova/node_modules/semver/test/major-minor-patch.js b/platforms/android/cordova/node_modules/semver/test/major-minor-patch.js new file mode 100644 index 0000000..e9d4039 --- /dev/null +++ b/platforms/android/cordova/node_modules/semver/test/major-minor-patch.js @@ -0,0 +1,72 @@ +var tap = require('tap'); +var test = tap.test; +var semver = require('../semver.js'); + +test('\nmajor tests', function(t) { + // [range, version] + // Version should be detectable despite extra characters + [ + ['1.2.3', 1], + [' 1.2.3 ', 1], + [' 2.2.3-4 ', 2], + [' 3.2.3-pre ', 3], + ['v5.2.3', 5], + [' v8.2.3 ', 8], + ['\t13.2.3', 13], + ['=21.2.3', 21, true], + ['v=34.2.3', 34, true] + ].forEach(function(tuple) { + var range = tuple[0]; + var version = tuple[1]; + var loose = tuple[2] || false; + var msg = 'major(' + range + ') = ' + version; + t.equal(semver.major(range, loose), version, msg); + }); + t.end(); +}); + +test('\nminor tests', function(t) { + // [range, version] + // Version should be detectable despite extra characters + [ + ['1.1.3', 1], + [' 1.1.3 ', 1], + [' 1.2.3-4 ', 2], + [' 1.3.3-pre ', 3], + ['v1.5.3', 5], + [' v1.8.3 ', 8], + ['\t1.13.3', 13], + ['=1.21.3', 21, true], + ['v=1.34.3', 34, true] + ].forEach(function(tuple) { + var range = tuple[0]; + var version = tuple[1]; + var loose = tuple[2] || false; + var msg = 'minor(' + range + ') = ' + version; + t.equal(semver.minor(range, loose), version, msg); + }); + t.end(); +}); + +test('\npatch tests', function(t) { + // [range, version] + // Version should be detectable despite extra characters + [ + ['1.2.1', 1], + [' 1.2.1 ', 1], + [' 1.2.2-4 ', 2], + [' 1.2.3-pre ', 3], + ['v1.2.5', 5], + [' v1.2.8 ', 8], + ['\t1.2.13', 13], + ['=1.2.21', 21, true], + ['v=1.2.34', 34, true] + ].forEach(function(tuple) { + var range = tuple[0]; + var version = tuple[1]; + var loose = tuple[2] || false; + var msg = 'patch(' + range + ') = ' + version; + t.equal(semver.patch(range, loose), version, msg); + }); + t.end(); +}); diff --git a/platforms/android/cordova/node_modules/shelljs/.travis.yml b/platforms/android/cordova/node_modules/shelljs/.travis.yml index 99cdc74..1b3280a 100644 --- a/platforms/android/cordova/node_modules/shelljs/.travis.yml +++ b/platforms/android/cordova/node_modules/shelljs/.travis.yml @@ -1,5 +1,6 @@ language: node_js node_js: - - "0.8" - "0.10" - "0.11" + - "0.12" + diff --git a/platforms/android/cordova/node_modules/shelljs/README.md b/platforms/android/cordova/node_modules/shelljs/README.md index 9120623..d08d13e 100644 --- a/platforms/android/cordova/node_modules/shelljs/README.md +++ b/platforms/android/cordova/node_modules/shelljs/README.md @@ -13,6 +13,8 @@ The project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled and [many more](https://npmjs.org/browse/depended/shelljs). +Connect with [@r2r](http://twitter.com/r2r) on Twitter for questions, suggestions, etc. + ## Installing Via npm: @@ -130,15 +132,21 @@ target.docs = -> text.to 'docs/my_docs.md' ``` -To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on. +To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`. +You can also pass arguments to your targets by using the `--` separator. For example, to pass `arg1` and `arg2` to a target `bundle`, do `$ node make bundle -- arg1 arg2`: +```javascript +require('shelljs/make'); - + ## Command reference @@ -266,7 +274,7 @@ Available expression primaries: + `'-d', 'path'`: true if path is a directory + `'-e', 'path'`: true if path exists + `'-f', 'path'`: true if path is a regular file -+ `'-L', 'path'`: true if path is a symboilc link ++ `'-L', 'path'`: true if path is a symbolic link + `'-p', 'path'`: true if path is a pipe (FIFO) + `'-S', 'path'`: true if path is a socket @@ -320,7 +328,7 @@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaS those returned by `cat`, `grep`, etc). -### sed([options ,] search_regex, replace_str, file) +### sed([options ,] search_regex, replacement, file) Available options: + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_ @@ -333,7 +341,7 @@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js'); ``` Reads an input string from `file` and performs a JavaScript `replace()` on the input -using the given search regex and replacement string. Returns the new string after replacement. +using the given search regex and replacement string or function. Returns the new string after replacement. ### grep([options ,] regex_filter, file [, file ...]) @@ -439,6 +447,23 @@ Display the list of currently remembered directories. Returns an array of paths See also: pushd, popd +### ln(options, source, dest) +### ln(source, dest) +Available options: + ++ `s`: symlink ++ `f`: force + +Examples: + +```javascript +ln('file', 'newlink'); +ln('-sf', 'file', 'existing'); +``` + +Links source to dest. Use -f to force the link, should dest already exist. + + ### exit(code) Exits the current process with the given exit code. @@ -531,10 +556,11 @@ otherwise returns string explaining the error Example: ```javascript -var silentState = config.silent; // save old silent state -config.silent = true; +var sh = require('shelljs'); +var silentState = sh.config.silent; // save old silent state +sh.config.silent = true; /* ... */ -config.silent = silentState; // restore old silent state +sh.config.silent = silentState; // restore old silent state ``` Suppresses all command output if `true`, except for `echo()` calls. @@ -544,6 +570,7 @@ Default is `false`. Example: ```javascript +require('shelljs/global'); config.fatal = true; cp('this_file_does_not_exist', '/dev/null'); // dies here /* more commands... */ diff --git a/platforms/android/cordova/node_modules/shelljs/RELEASE.md b/platforms/android/cordova/node_modules/shelljs/RELEASE.md new file mode 100644 index 0000000..69ef3fb --- /dev/null +++ b/platforms/android/cordova/node_modules/shelljs/RELEASE.md @@ -0,0 +1,9 @@ +# Release steps + +* Ensure master passes CI tests +* Bump version in package.json. Any breaking change or new feature should bump minor (or even major). Non-breaking changes or fixes can just bump patch. +* Update README manually if the changes are not documented in-code. If so, run `scripts/generate-docs.js` +* Commit +* `$ git tag ` (see `git tag -l` for latest) +* `$ git push origin master --tags` +* `$ npm publish .` diff --git a/platforms/android/cordova/node_modules/shelljs/make.js b/platforms/android/cordova/node_modules/shelljs/make.js index 53e5e81..f78b4cf 100644 --- a/platforms/android/cordova/node_modules/shelljs/make.js +++ b/platforms/android/cordova/node_modules/shelljs/make.js @@ -3,9 +3,18 @@ require('./global'); global.config.fatal = true; global.target = {}; +var args = process.argv.slice(2), + targetArgs, + dashesLoc = args.indexOf('--'); + +// split args, everything after -- if only for targets +if (dashesLoc > -1) { + targetArgs = args.slice(dashesLoc + 1, args.length); + args = args.slice(0, dashesLoc); +} + // This ensures we only execute the script targets after the entire script has // been evaluated -var args = process.argv.slice(2); setTimeout(function() { var t; @@ -21,8 +30,8 @@ setTimeout(function() { (function(t, oldTarget){ // Wrap it - global.target[t] = function(force) { - if (oldTarget.done && !force) + global.target[t] = function() { + if (oldTarget.done) return; oldTarget.done = true; return oldTarget.apply(oldTarget, arguments); @@ -35,13 +44,13 @@ setTimeout(function() { if (args.length > 0) { args.forEach(function(arg) { if (arg in global.target) - global.target[arg](); + global.target[arg](targetArgs); else { console.log('no such target: ' + arg); } }); } else if ('all' in global.target) { - global.target.all(); + global.target.all(targetArgs); } }, 0); diff --git a/platforms/android/cordova/node_modules/shelljs/package.json b/platforms/android/cordova/node_modules/shelljs/package.json index fd09b45..572bd7c 100644 --- a/platforms/android/cordova/node_modules/shelljs/package.json +++ b/platforms/android/cordova/node_modules/shelljs/package.json @@ -1,48 +1,89 @@ { - "name": "shelljs", - "version": "0.2.6", - "author": { - "name": "Artur Adib", - "email": "aadib@mozilla.com" - }, - "description": "Portable Unix shell commands for Node.js", - "keywords": [ - "unix", - "shell", - "makefile", - "make", - "jake", - "synchronous" + "_args": [ + [ + "shelljs@^0.5.3", + "/Users/steveng/repo/cordova/cordova-android" + ] ], - "repository": { - "type": "git", - "url": "git://github.com/arturadib/shelljs.git" + "_from": "shelljs@>=0.5.3 <0.6.0", + "_id": "shelljs@0.5.3", + "_inCache": true, + "_installable": true, + "_location": "/shelljs", + "_nodeVersion": "1.2.0", + "_npmUser": { + "email": "arturadib@gmail.com", + "name": "artur" }, - "homepage": "http://github.com/arturadib/shelljs", - "main": "./shell.js", - "scripts": { - "test": "node scripts/run-tests" + "_npmVersion": "2.5.1", + "_phantomChildren": {}, + "_requested": { + "name": "shelljs", + "raw": "shelljs@^0.5.3", + "rawSpec": "^0.5.3", + "scope": null, + "spec": ">=0.5.3 <0.6.0", + "type": "range" + }, + "_requiredBy": [ + "/", + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", + "_shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113", + "_shrinkwrap": null, + "_spec": "shelljs@^0.5.3", + "_where": "/Users/steveng/repo/cordova/cordova-android", + "author": { + "email": "arturadib@gmail.com", + "name": "Artur Adib" }, "bin": { "shjs": "./bin/shjs" }, + "bugs": { + "url": "https://github.com/arturadib/shelljs/issues" + }, "dependencies": {}, + "description": "Portable Unix shell commands for Node.js", "devDependencies": { "jshint": "~2.1.11" }, - "optionalDependencies": {}, + "directories": {}, + "dist": { + "shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113", + "tarball": "http://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz" + }, "engines": { "node": ">=0.8.0" }, - "readme": "# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)\n\nShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!\n\nThe project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like:\n\n+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader\n+ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger\n+ [JSHint](http://jshint.com) - Most popular JavaScript linter\n+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers\n+ [Yeoman](http://yeoman.io/) - Web application stack and development tool\n+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation\n\nand [many more](https://npmjs.org/browse/depended/shelljs).\n\n## Installing\n\nVia npm:\n\n```bash\n$ npm install [-g] shelljs\n```\n\nIf the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to\nrun ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder:\n\n```bash\n$ shjs my_script\n```\n\nYou can also just copy `shell.js` into your project's directory, and `require()` accordingly.\n\n\n## Examples\n\n### JavaScript\n\n```javascript\nrequire('shelljs/global');\n\nif (!which('git')) {\n echo('Sorry, this script requires git');\n exit(1);\n}\n\n// Copy files to release dir\nmkdir('-p', 'out/Release');\ncp('-R', 'stuff/*', 'out/Release');\n\n// Replace macros in each .js file\ncd('lib');\nls('*.js').forEach(function(file) {\n sed('-i', 'BUILD_VERSION', 'v0.1.2', file);\n sed('-i', /.*REMOVE_THIS_LINE.*\\n/, '', file);\n sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\\n/, cat('macro.js'), file);\n});\ncd('..');\n\n// Run external tool synchronously\nif (exec('git commit -am \"Auto-commit\"').code !== 0) {\n echo('Error: Git commit failed');\n exit(1);\n}\n```\n\n### CoffeeScript\n\n```coffeescript\nrequire 'shelljs/global'\n\nif not which 'git'\n echo 'Sorry, this script requires git'\n exit 1\n\n# Copy files to release dir\nmkdir '-p', 'out/Release'\ncp '-R', 'stuff/*', 'out/Release'\n\n# Replace macros in each .js file\ncd 'lib'\nfor file in ls '*.js'\n sed '-i', 'BUILD_VERSION', 'v0.1.2', file\n sed '-i', /.*REMOVE_THIS_LINE.*\\n/, '', file\n sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\\n/, cat 'macro.js', file\ncd '..'\n\n# Run external tool synchronously\nif (exec 'git commit -am \"Auto-commit\"').code != 0\n echo 'Error: Git commit failed'\n exit 1\n```\n\n## Global vs. Local\n\nThe example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`.\n\nExample:\n\n```javascript\nvar shell = require('shelljs');\nshell.echo('hello world');\n```\n\n## Make tool\n\nA convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script.\n\nExample (CoffeeScript):\n\n```coffeescript\nrequire 'shelljs/make'\n\ntarget.all = ->\n target.bundle()\n target.docs()\n\ntarget.bundle = ->\n cd __dirname\n mkdir 'build'\n cd 'lib'\n (cat '*.js').to '../build/output.js'\n\ntarget.docs = ->\n cd __dirname\n mkdir 'docs'\n cd 'lib'\n for file in ls '*.js'\n text = grep '//@', file # extract special comments\n text.replace '//@', '' # remove comment tags\n text.to 'docs/my_docs.md'\n```\n\nTo run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on.\n\n\n\n\n\n\n## Command reference\n\n\nAll commands run synchronously, unless otherwise stated.\n\n\n### cd('dir')\nChanges to directory `dir` for the duration of the script\n\n\n### pwd()\nReturns the current directory.\n\n\n### ls([options ,] path [,path ...])\n### ls([options ,] path_array)\nAvailable options:\n\n+ `-R`: recursive\n+ `-A`: all files (include files beginning with `.`, except for `.` and `..`)\n\nExamples:\n\n```javascript\nls('projs/*.js');\nls('-R', '/users/me', '/tmp');\nls('-R', ['/users/me', '/tmp']); // same as above\n```\n\nReturns array of files in the given path, or in current directory if no path provided.\n\n\n### find(path [,path ...])\n### find(path_array)\nExamples:\n\n```javascript\nfind('src', 'lib');\nfind(['src', 'lib']); // same as above\nfind('.').filter(function(file) { return file.match(/\\.js$/); });\n```\n\nReturns array of all files (however deep) in the given paths.\n\nThe main difference from `ls('-R', path)` is that the resulting file names\ninclude the base directories, e.g. `lib/resources/file1` instead of just `file1`.\n\n\n### cp([options ,] source [,source ...], dest)\n### cp([options ,] source_array, dest)\nAvailable options:\n\n+ `-f`: force\n+ `-r, -R`: recursive\n\nExamples:\n\n```javascript\ncp('file1', 'dir1');\ncp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');\ncp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above\n```\n\nCopies files. The wildcard `*` is accepted.\n\n\n### rm([options ,] file [, file ...])\n### rm([options ,] file_array)\nAvailable options:\n\n+ `-f`: force\n+ `-r, -R`: recursive\n\nExamples:\n\n```javascript\nrm('-rf', '/tmp/*');\nrm('some_file.txt', 'another_file.txt');\nrm(['some_file.txt', 'another_file.txt']); // same as above\n```\n\nRemoves files. The wildcard `*` is accepted.\n\n\n### mv(source [, source ...], dest')\n### mv(source_array, dest')\nAvailable options:\n\n+ `f`: force\n\nExamples:\n\n```javascript\nmv('-f', 'file', 'dir/');\nmv('file1', 'file2', 'dir/');\nmv(['file1', 'file2'], 'dir/'); // same as above\n```\n\nMoves files. The wildcard `*` is accepted.\n\n\n### mkdir([options ,] dir [, dir ...])\n### mkdir([options ,] dir_array)\nAvailable options:\n\n+ `p`: full path (will create intermediate dirs if necessary)\n\nExamples:\n\n```javascript\nmkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');\nmkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above\n```\n\nCreates directories.\n\n\n### test(expression)\nAvailable expression primaries:\n\n+ `'-b', 'path'`: true if path is a block device\n+ `'-c', 'path'`: true if path is a character device\n+ `'-d', 'path'`: true if path is a directory\n+ `'-e', 'path'`: true if path exists\n+ `'-f', 'path'`: true if path is a regular file\n+ `'-L', 'path'`: true if path is a symboilc link\n+ `'-p', 'path'`: true if path is a pipe (FIFO)\n+ `'-S', 'path'`: true if path is a socket\n\nExamples:\n\n```javascript\nif (test('-d', path)) { /* do something with dir */ };\nif (!test('-f', path)) continue; // skip if it's a regular file\n```\n\nEvaluates expression using the available primaries and returns corresponding value.\n\n\n### cat(file [, file ...])\n### cat(file_array)\n\nExamples:\n\n```javascript\nvar str = cat('file*.txt');\nvar str = cat('file1', 'file2');\nvar str = cat(['file1', 'file2']); // same as above\n```\n\nReturns a string containing the given file, or a concatenated string\ncontaining the files if more than one file is given (a new line character is\nintroduced between each file). Wildcard `*` accepted.\n\n\n### 'string'.to(file)\n\nExamples:\n\n```javascript\ncat('input.txt').to('output.txt');\n```\n\nAnalogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as\nthose returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_\n\n\n### 'string'.toEnd(file)\n\nExamples:\n\n```javascript\ncat('input.txt').toEnd('output.txt');\n```\n\nAnalogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as\nthose returned by `cat`, `grep`, etc).\n\n\n### sed([options ,] search_regex, replace_str, file)\nAvailable options:\n\n+ `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_\n\nExamples:\n\n```javascript\nsed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');\nsed(/.*DELETE_THIS_LINE.*\\n/, '', 'source.js');\n```\n\nReads an input string from `file` and performs a JavaScript `replace()` on the input\nusing the given search regex and replacement string. Returns the new string after replacement.\n\n\n### grep([options ,] regex_filter, file [, file ...])\n### grep([options ,] regex_filter, file_array)\nAvailable options:\n\n+ `-v`: Inverse the sense of the regex and print the lines not matching the criteria.\n\nExamples:\n\n```javascript\ngrep('-v', 'GLOBAL_VARIABLE', '*.js');\ngrep('GLOBAL_VARIABLE', '*.js');\n```\n\nReads input string from given files and returns a string containing all lines of the\nfile that match the given `regex_filter`. Wildcard `*` accepted.\n\n\n### which(command)\n\nExamples:\n\n```javascript\nvar nodeExec = which('node');\n```\n\nSearches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.\nReturns string containing the absolute path to the command.\n\n\n### echo(string [,string ...])\n\nExamples:\n\n```javascript\necho('hello world');\nvar str = echo('hello world');\n```\n\nPrints string to stdout, and returns string with additional utility methods\nlike `.to()`.\n\n\n### pushd([options,] [dir | '-N' | '+N'])\n\nAvailable options:\n\n+ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.\n\nArguments:\n\n+ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.\n+ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.\n+ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.\n\nExamples:\n\n```javascript\n// process.cwd() === '/usr'\npushd('/etc'); // Returns /etc /usr\npushd('+1'); // Returns /usr /etc\n```\n\nSave the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.\n\n### popd([options,] ['-N' | '+N'])\n\nAvailable options:\n\n+ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.\n\nArguments:\n\n+ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.\n+ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.\n\nExamples:\n\n```javascript\necho(process.cwd()); // '/usr'\npushd('/etc'); // '/etc /usr'\necho(process.cwd()); // '/etc'\npopd(); // '/usr'\necho(process.cwd()); // '/usr'\n```\n\nWhen no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.\n\n### dirs([options | '+N' | '-N'])\n\nAvailable options:\n\n+ `-c`: Clears the directory stack by deleting all of the elements.\n\nArguments:\n\n+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.\n+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.\n\nDisplay the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.\n\nSee also: pushd, popd\n\n\n### exit(code)\nExits the current process with the given exit code.\n\n### env['VAR_NAME']\nObject containing environment variables (both getter and setter). Shortcut to process.env.\n\n### exec(command [, options] [, callback])\nAvailable options (all `false` by default):\n\n+ `async`: Asynchronous execution. Defaults to true if a callback is provided.\n+ `silent`: Do not echo program output to console.\n\nExamples:\n\n```javascript\nvar version = exec('node --version', {silent:true}).output;\n\nvar child = exec('some_long_running_process', {async:true});\nchild.stdout.on('data', function(data) {\n /* ... do something with data ... */\n});\n\nexec('some_long_running_process', function(code, output) {\n console.log('Exit code:', code);\n console.log('Program output:', output);\n});\n```\n\nExecutes the given `command` _synchronously_, unless otherwise specified.\nWhen in synchronous mode returns the object `{ code:..., output:... }`, containing the program's\n`output` (stdout + stderr) and its exit `code`. Otherwise returns the child process object, and\nthe `callback` gets the arguments `(code, output)`.\n\n**Note:** For long-lived processes, it's best to run `exec()` asynchronously as\nthe current synchronous implementation uses a lot of CPU. This should be getting\nfixed soon.\n\n\n### chmod(octal_mode || octal_string, file)\n### chmod(symbolic_mode, file)\n\nAvailable options:\n\n+ `-v`: output a diagnostic for every file processed\n+ `-c`: like verbose but report only when a change is made\n+ `-R`: change files and directories recursively\n\nExamples:\n\n```javascript\nchmod(755, '/Users/brandon');\nchmod('755', '/Users/brandon'); // same as above\nchmod('u+x', '/Users/brandon');\n```\n\nAlters the permissions of a file or directory by either specifying the\nabsolute permissions in octal form or expressing the changes in symbols.\nThis command tries to mimic the POSIX behavior as much as possible.\nNotable exceptions:\n\n+ In symbolic modes, 'a-r' and '-r' are identical. No consideration is\n given to the umask.\n+ There is no \"quiet\" option since default behavior is to run silent.\n\n\n## Non-Unix commands\n\n\n### tempdir()\n\nExamples:\n\n```javascript\nvar tmp = tempdir(); // \"/tmp\" for most *nix platforms\n```\n\nSearches and returns string containing a writeable, platform-dependent temporary directory.\nFollows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).\n\n\n### error()\nTests if error occurred in the last command. Returns `null` if no error occurred,\notherwise returns string explaining the error\n\n\n## Configuration\n\n\n### config.silent\nExample:\n\n```javascript\nvar silentState = config.silent; // save old silent state\nconfig.silent = true;\n/* ... */\nconfig.silent = silentState; // restore old silent state\n```\n\nSuppresses all command output if `true`, except for `echo()` calls.\nDefault is `false`.\n\n### config.fatal\nExample:\n\n```javascript\nconfig.fatal = true;\ncp('this_file_does_not_exist', '/dev/null'); // dies here\n/* more commands... */\n```\n\nIf `true` the script will die on errors. Default is `false`.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/arturadib/shelljs/issues" + "gitHead": "22d0975040b9b8234755dc6e692d6869436e8485", + "homepage": "http://github.com/arturadib/shelljs", + "keywords": [ + "jake", + "make", + "makefile", + "shell", + "synchronous", + "unix" + ], + "license": "BSD*", + "main": "./shell.js", + "maintainers": [ + { + "name": "artur", + "email": "arturadib@gmail.com" + } + ], + "name": "shelljs", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/arturadib/shelljs.git" }, - "_id": "shelljs@0.2.6", - "dist": { - "shasum": "3c1e3cebca47c6819cb354ae1e1f8f8452ed71dd" + "scripts": { + "test": "node scripts/run-tests" }, - "_from": "shelljs@0.2.6", - "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz" + "version": "0.5.3" } diff --git a/platforms/android/cordova/node_modules/shelljs/shell.js b/platforms/android/cordova/node_modules/shelljs/shell.js index e56c5de..bdeb559 100644 --- a/platforms/android/cordova/node_modules/shelljs/shell.js +++ b/platforms/android/cordova/node_modules/shelljs/shell.js @@ -85,6 +85,10 @@ exports.pushd = common.wrap('pushd', _pushd); var _popd = require('./src/dirs').popd; exports.popd = common.wrap("popd", _popd); +//@include ./src/ln +var _ln = require('./src/ln'); +exports.ln = common.wrap('ln', _ln); + //@ //@ ### exit(code) //@ Exits the current process with the given exit code. @@ -131,10 +135,11 @@ exports.config = common.config; //@ Example: //@ //@ ```javascript -//@ var silentState = config.silent; // save old silent state -//@ config.silent = true; +//@ var sh = require('shelljs'); +//@ var silentState = sh.config.silent; // save old silent state +//@ sh.config.silent = true; //@ /* ... */ -//@ config.silent = silentState; // restore old silent state +//@ sh.config.silent = silentState; // restore old silent state //@ ``` //@ //@ Suppresses all command output if `true`, except for `echo()` calls. @@ -145,6 +150,7 @@ exports.config = common.config; //@ Example: //@ //@ ```javascript +//@ require('shelljs/global'); //@ config.fatal = true; //@ cp('this_file_does_not_exist', '/dev/null'); // dies here //@ /* more commands... */ diff --git a/platforms/android/cordova/node_modules/shelljs/src/common.js b/platforms/android/cordova/node_modules/shelljs/src/common.js index fe20871..d8c2312 100644 --- a/platforms/android/cordova/node_modules/shelljs/src/common.js +++ b/platforms/android/cordova/node_modules/shelljs/src/common.js @@ -92,8 +92,22 @@ exports.parseOptions = parseOptions; function expand(list) { var expanded = []; list.forEach(function(listEl) { - // Wildcard present? - if (listEl.search(/\*/) > -1) { + // Wildcard present on directory names ? + if(listEl.search(/\*[^\/]*\//) > -1 || listEl.search(/\*\*[^\/]*\//) > -1) { + var match = listEl.match(/^([^*]+\/|)(.*)/); + var root = match[1]; + var rest = match[2]; + var restRegex = rest.replace(/\*\*/g, ".*").replace(/\*/g, "[^\\/]*"); + restRegex = new RegExp(restRegex); + + _ls('-R', root).filter(function (e) { + return restRegex.test(e); + }).forEach(function(file) { + expanded.push(file); + }); + } + // Wildcard present on file names ? + else if (listEl.search(/\*/) > -1) { _ls('', listEl).forEach(function(file) { expanded.push(file); }); diff --git a/platforms/android/cordova/node_modules/shelljs/src/cp.js b/platforms/android/cordova/node_modules/shelljs/src/cp.js index a1bc529..ef19f96 100644 --- a/platforms/android/cordova/node_modules/shelljs/src/cp.js +++ b/platforms/android/cordova/node_modules/shelljs/src/cp.js @@ -1,6 +1,7 @@ var fs = require('fs'); var path = require('path'); var common = require('./common'); +var os = require('os'); // Buffered file copy, synchronous // (Using readFileSync() + writeFileSync() could easily cause a memory overflow @@ -72,7 +73,7 @@ function cpdirSyncRecursive(sourceDir, destDir, opts) { cpdirSyncRecursive(srcFile, destFile, opts); } else if (srcFileStat.isSymbolicLink()) { var symlinkFull = fs.readlinkSync(srcFile); - fs.symlinkSync(symlinkFull, destFile); + fs.symlinkSync(symlinkFull, destFile, os.platform() === "win32" ? "junction" : null); } else { /* At this point, we've hit a file actually worth copying... so copy it on over. */ if (fs.existsSync(destFile) && !opts.force) { @@ -173,7 +174,10 @@ function _cp(options, sources, dest) { fs.mkdirSync(newDest, checkDir.mode); } catch (e) { //if the directory already exists, that's okay - if (e.code !== 'EEXIST') throw e; + if (e.code !== 'EEXIST') { + common.error('dest file no such file or directory: ' + newDest, true); + throw e; + } } cpdirSyncRecursive(src, newDest, {force: options.force}); diff --git a/platforms/android/cordova/node_modules/shelljs/src/exec.js b/platforms/android/cordova/node_modules/shelljs/src/exec.js index 7ccdbc0..d259a9f 100644 --- a/platforms/android/cordova/node_modules/shelljs/src/exec.js +++ b/platforms/android/cordova/node_modules/shelljs/src/exec.js @@ -40,32 +40,67 @@ function execSync(cmd, opts) { return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0"); } - cmd += ' > '+stdoutFile+' 2>&1'; // works on both win/unix - - var script = - "var child = require('child_process')," + - " fs = require('fs');" + - "child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {" + - " fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');" + - "});"; - if (fs.existsSync(scriptFile)) common.unlinkSync(scriptFile); if (fs.existsSync(stdoutFile)) common.unlinkSync(stdoutFile); if (fs.existsSync(codeFile)) common.unlinkSync(codeFile); - fs.writeFileSync(scriptFile, script); - child.exec('"'+process.execPath+'" '+scriptFile, { + var execCommand = '"'+process.execPath+'" '+scriptFile; + var execOptions = { env: process.env, cwd: _pwd(), maxBuffer: 20*1024*1024 - }); + }; - // The wait loop - // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage - // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing - // CPU usage, though apparently not so much on Windows) - while (!fs.existsSync(codeFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); } - while (!fs.existsSync(stdoutFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); } + if (typeof child.execSync === 'function') { + var script = [ + "var child = require('child_process')", + " , fs = require('fs');", + "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {", + " fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');", + "});", + "var stdoutStream = fs.createWriteStream('"+escape(stdoutFile)+"');", + "childProcess.stdout.pipe(stdoutStream, {end: false});", + "childProcess.stderr.pipe(stdoutStream, {end: false});", + "childProcess.stdout.pipe(process.stdout);", + "childProcess.stderr.pipe(process.stderr);", + "var stdoutEnded = false, stderrEnded = false;", + "function tryClosing(){ if(stdoutEnded && stderrEnded){ stdoutStream.end(); } }", + "childProcess.stdout.on('end', function(){ stdoutEnded = true; tryClosing(); });", + "childProcess.stderr.on('end', function(){ stderrEnded = true; tryClosing(); });" + ].join('\n'); + + fs.writeFileSync(scriptFile, script); + + if (options.silent) { + execOptions.stdio = 'ignore'; + } else { + execOptions.stdio = [0, 1, 2]; + } + + // Welcome to the future + child.execSync(execCommand, execOptions); + } else { + cmd += ' > '+stdoutFile+' 2>&1'; // works on both win/unix + + var script = [ + "var child = require('child_process')", + " , fs = require('fs');", + "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {", + " fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');", + "});" + ].join('\n'); + + fs.writeFileSync(scriptFile, script); + + child.exec(execCommand, execOptions); + + // The wait loop + // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage + // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing + // CPU usage, though apparently not so much on Windows) + while (!fs.existsSync(codeFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); } + while (!fs.existsSync(stdoutFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); } + } // At this point codeFile exists, but it's not necessarily flushed yet. // Keep reading it until it is. diff --git a/platforms/android/cordova/node_modules/shelljs/src/ln.js b/platforms/android/cordova/node_modules/shelljs/src/ln.js new file mode 100644 index 0000000..a7b9701 --- /dev/null +++ b/platforms/android/cordova/node_modules/shelljs/src/ln.js @@ -0,0 +1,53 @@ +var fs = require('fs'); +var path = require('path'); +var common = require('./common'); +var os = require('os'); + +//@ +//@ ### ln(options, source, dest) +//@ ### ln(source, dest) +//@ Available options: +//@ +//@ + `s`: symlink +//@ + `f`: force +//@ +//@ Examples: +//@ +//@ ```javascript +//@ ln('file', 'newlink'); +//@ ln('-sf', 'file', 'existing'); +//@ ``` +//@ +//@ Links source to dest. Use -f to force the link, should dest already exist. +function _ln(options, source, dest) { + options = common.parseOptions(options, { + 's': 'symlink', + 'f': 'force' + }); + + if (!source || !dest) { + common.error('Missing and/or '); + } + + source = path.resolve(process.cwd(), String(source)); + dest = path.resolve(process.cwd(), String(dest)); + + if (!fs.existsSync(source)) { + common.error('Source file does not exist', true); + } + + if (fs.existsSync(dest)) { + if (!options.force) { + common.error('Destination file exists', true); + } + + fs.unlinkSync(dest); + } + + if (options.symlink) { + fs.symlinkSync(source, dest, os.platform() === "win32" ? "junction" : null); + } else { + fs.linkSync(source, dest, os.platform() === "win32" ? "junction" : null); + } +} +module.exports = _ln; diff --git a/platforms/android/cordova/node_modules/shelljs/src/rm.js b/platforms/android/cordova/node_modules/shelljs/src/rm.js index 3abe6e1..bd608cb 100644 --- a/platforms/android/cordova/node_modules/shelljs/src/rm.js +++ b/platforms/android/cordova/node_modules/shelljs/src/rm.js @@ -48,7 +48,25 @@ function rmdirSyncRecursive(dir, force) { var result; try { - result = fs.rmdirSync(dir); + // Retry on windows, sometimes it takes a little time before all the files in the directory are gone + var start = Date.now(); + while (true) { + try { + result = fs.rmdirSync(dir); + if (fs.existsSync(dir)) throw { code: "EAGAIN" } + break; + } catch(er) { + // In addition to error codes, also check if the directory still exists and loop again if true + if (process.platform === "win32" && (er.code === "ENOTEMPTY" || er.code === "EBUSY" || er.code === "EPERM" || er.code === "EAGAIN")) { + if (Date.now() - start > 1000) throw er; + } else if (er.code === "ENOENT") { + // Directory did not exist, deletion was successful + break; + } else { + throw er; + } + } + } } catch(e) { common.error('could not remove directory (code '+e.code+'): ' + dir, true); } diff --git a/platforms/android/cordova/node_modules/shelljs/src/sed.js b/platforms/android/cordova/node_modules/shelljs/src/sed.js index 9783252..65f7cb4 100644 --- a/platforms/android/cordova/node_modules/shelljs/src/sed.js +++ b/platforms/android/cordova/node_modules/shelljs/src/sed.js @@ -2,7 +2,7 @@ var common = require('./common'); var fs = require('fs'); //@ -//@ ### sed([options ,] search_regex, replace_str, file) +//@ ### sed([options ,] search_regex, replacement, file) //@ Available options: //@ //@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_ @@ -15,13 +15,13 @@ var fs = require('fs'); //@ ``` //@ //@ Reads an input string from `file` and performs a JavaScript `replace()` on the input -//@ using the given search regex and replacement string. Returns the new string after replacement. +//@ using the given search regex and replacement string or function. Returns the new string after replacement. function _sed(options, regex, replacement, file) { options = common.parseOptions(options, { 'i': 'inplace' }); - if (typeof replacement === 'string') + if (typeof replacement === 'string' || typeof replacement === 'function') replacement = replacement; // no-op else if (typeof replacement === 'number') replacement = replacement.toString(); // fallback diff --git a/platforms/android/cordova/node_modules/shelljs/src/which.js b/platforms/android/cordova/node_modules/shelljs/src/which.js index fadb96c..2822ecf 100644 --- a/platforms/android/cordova/node_modules/shelljs/src/which.js +++ b/platforms/android/cordova/node_modules/shelljs/src/which.js @@ -15,6 +15,10 @@ function splitPath(p) { return p.split(':'); } +function checkPath(path) { + return fs.existsSync(path) && fs.statSync(path).isDirectory() == false; +} + //@ //@ ### which(command) //@ @@ -42,7 +46,7 @@ function _which(options, cmd) { return; // already found it var attempt = path.resolve(dir + '/' + cmd); - if (fs.existsSync(attempt)) { + if (checkPath(attempt)) { where = attempt; return; } @@ -50,17 +54,17 @@ function _which(options, cmd) { if (common.platform === 'win') { var baseAttempt = attempt; attempt = baseAttempt + '.exe'; - if (fs.existsSync(attempt)) { + if (checkPath(attempt)) { where = attempt; return; } attempt = baseAttempt + '.cmd'; - if (fs.existsSync(attempt)) { + if (checkPath(attempt)) { where = attempt; return; } attempt = baseAttempt + '.bat'; - if (fs.existsSync(attempt)) { + if (checkPath(attempt)) { where = attempt; return; } @@ -69,7 +73,7 @@ function _which(options, cmd) { } // Command not found anywhere? - if (!fs.existsSync(cmd) && !where) + if (!checkPath(cmd) && !where) return null; where = where || path.resolve(cmd); diff --git a/platforms/android/cordova/node_modules/underscore/LICENSE b/platforms/android/cordova/node_modules/underscore/LICENSE new file mode 100644 index 0000000..ad0e71b --- /dev/null +++ b/platforms/android/cordova/node_modules/underscore/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative +Reporters & Editors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/underscore/README.md b/platforms/android/cordova/node_modules/underscore/README.md new file mode 100644 index 0000000..c2ba259 --- /dev/null +++ b/platforms/android/cordova/node_modules/underscore/README.md @@ -0,0 +1,22 @@ + __ + /\ \ __ + __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ + /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ + \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ + \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ + \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ + \ \____/ + \/___/ + +Underscore.js is a utility-belt library for JavaScript that provides +support for the usual functional suspects (each, map, reduce, filter...) +without extending any core JavaScript objects. + +For Docs, License, Tests, and pre-packed downloads, see: +http://underscorejs.org + +Underscore is an open-sourced component of DocumentCloud: +https://github.com/documentcloud + +Many thanks to our contributors: +https://github.com/jashkenas/underscore/contributors diff --git a/platforms/android/cordova/node_modules/underscore/package.json b/platforms/android/cordova/node_modules/underscore/package.json new file mode 100644 index 0000000..3304948 --- /dev/null +++ b/platforms/android/cordova/node_modules/underscore/package.json @@ -0,0 +1,96 @@ +{ + "_args": [ + [ + "underscore@^1.8.3", + "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common" + ] + ], + "_from": "underscore@>=1.8.3 <2.0.0", + "_id": "underscore@1.8.3", + "_inCache": true, + "_installable": true, + "_location": "/underscore", + "_npmUser": { + "email": "jashkenas@gmail.com", + "name": "jashkenas" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "name": "underscore", + "raw": "underscore@^1.8.3", + "rawSpec": "^1.8.3", + "scope": null, + "spec": ">=1.8.3 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022", + "_shrinkwrap": null, + "_spec": "underscore@^1.8.3", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common", + "author": { + "email": "jeremy@documentcloud.org", + "name": "Jeremy Ashkenas" + }, + "bugs": { + "url": "https://github.com/jashkenas/underscore/issues" + }, + "dependencies": {}, + "description": "JavaScript's functional programming helper library.", + "devDependencies": { + "docco": "*", + "eslint": "0.6.x", + "karma": "~0.12.31", + "karma-qunit": "~0.1.4", + "qunit-cli": "~0.2.0", + "uglify-js": "2.4.x" + }, + "directories": {}, + "dist": { + "shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022", + "tarball": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz" + }, + "files": [ + "LICENSE", + "underscore-min.js", + "underscore-min.map", + "underscore.js" + ], + "gitHead": "e4743ab712b8ab42ad4ccb48b155034d02394e4d", + "homepage": "http://underscorejs.org", + "keywords": [ + "browser", + "client", + "functional", + "server", + "util" + ], + "license": "MIT", + "main": "underscore.js", + "maintainers": [ + { + "name": "jashkenas", + "email": "jashkenas@gmail.com" + } + ], + "name": "underscore", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/jashkenas/underscore.git" + }, + "scripts": { + "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", + "doc": "docco underscore.js", + "lint": "eslint underscore.js test/*.js", + "test": "npm run test-node && npm run lint", + "test-browser": "npm i karma-phantomjs-launcher && ./node_modules/karma/bin/karma start", + "test-node": "qunit-cli test/*.js" + }, + "version": "1.8.3" +} diff --git a/platforms/android/cordova/node_modules/underscore/underscore-min.js b/platforms/android/cordova/node_modules/underscore/underscore-min.js new file mode 100644 index 0000000..f01025b --- /dev/null +++ b/platforms/android/cordova/node_modules/underscore/underscore-min.js @@ -0,0 +1,6 @@ +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var S=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=O(n);a>o;o++){var c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var u=[],i=[],o=0,a=O(n);a>o;o++){var c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=S(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])i;i++,n+=r)u[i]=n;return u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=j(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var f=r&&!e;return e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var r=j(n);return t&&m.extendOwn(r,t),r},m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return N(n,t)},m.isEmpty=function(n){return null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object Array]"===s.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return s.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===s.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&p.call(n,t)},m.noConflict=function(){return u._=i,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var B={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},T=m.invert(B),R=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var t=++q+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},f=t.variable||"obj";return c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var P=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=o[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var t=o[n];m.prototype[n]=function(){return P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this); +//# sourceMappingURL=underscore-min.map \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/underscore/underscore-min.map b/platforms/android/cordova/node_modules/underscore/underscore-min.map new file mode 100644 index 0000000..cf356bf --- /dev/null +++ b/platforms/android/cordova/node_modules/underscore/underscore-min.map @@ -0,0 +1 @@ +{"version":3,"file":"underscore-min.js","sources":["underscore.js"],"names":["createReduce","dir","iterator","obj","iteratee","memo","keys","index","length","currentKey","context","optimizeCb","isArrayLike","_","arguments","createPredicateIndexFinder","array","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","idx","i","Math","max","min","slice","call","isNaN","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","constructor","proto","isFunction","prototype","ObjProto","prop","has","contains","push","root","this","previousUnderscore","ArrayProto","Array","Object","FuncProto","Function","toString","hasOwnProperty","nativeIsArray","isArray","nativeKeys","nativeBind","bind","nativeCreate","create","Ctor","_wrapped","exports","module","VERSION","func","argCount","value","other","collection","accumulator","apply","identity","isObject","matcher","property","Infinity","createAssigner","keysFunc","undefinedOnly","source","l","key","baseCreate","result","MAX_ARRAY_INDEX","pow","each","forEach","map","collect","results","reduce","foldl","inject","reduceRight","foldr","find","detect","findIndex","findKey","filter","select","list","reject","negate","every","all","some","any","includes","include","fromIndex","guard","values","indexOf","invoke","method","args","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","set","shuffled","random","sample","n","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","indexBy","countBy","toArray","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","input","shallow","strict","startIndex","output","isArguments","j","len","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","object","findLastIndex","low","high","mid","floor","lastIndexOf","range","start","stop","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","invert","functions","methods","names","extend","extendOwn","assign","pick","oiteratee","omit","String","defaults","props","clone","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","type","name","Int8Array","isFinite","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","text","settings","oldSettings","offset","variable","render","e","data","argument","chain","instance","_chain","mixin","valueOf","toJSON","define","amd"],"mappings":";;;;CAKC,WA4KC,QAASA,GAAaC,GAGpB,QAASC,GAASC,EAAKC,EAAUC,EAAMC,EAAMC,EAAOC,GAClD,KAAOD,GAAS,GAAaC,EAARD,EAAgBA,GAASN,EAAK,CACjD,GAAIQ,GAAaH,EAAOA,EAAKC,GAASA,CACtCF,GAAOD,EAASC,EAAMF,EAAIM,GAAaA,EAAYN,GAErD,MAAOE,GAGT,MAAO,UAASF,EAAKC,EAAUC,EAAMK,GACnCN,EAAWO,EAAWP,EAAUM,EAAS,EACzC,IAAIJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OACvBD,EAAQN,EAAM,EAAI,EAAIO,EAAS,CAMnC,OAJIM,WAAUN,OAAS,IACrBH,EAAOF,EAAIG,EAAOA,EAAKC,GAASA,GAChCA,GAASN,GAEJC,EAASC,EAAKC,EAAUC,EAAMC,EAAMC,EAAOC,IA+ZtD,QAASO,GAA2Bd,GAClC,MAAO,UAASe,EAAOC,EAAWP,GAChCO,EAAYC,EAAGD,EAAWP,EAG1B,KAFA,GAAIF,GAASW,EAAUH,GACnBT,EAAQN,EAAM,EAAI,EAAIO,EAAS,EAC5BD,GAAS,GAAaC,EAARD,EAAgBA,GAASN,EAC5C,GAAIgB,EAAUD,EAAMT,GAAQA,EAAOS,GAAQ,MAAOT,EAEpD,QAAQ,GAsBZ,QAASa,GAAkBnB,EAAKoB,EAAeC,GAC7C,MAAO,UAASN,EAAOO,EAAMC,GAC3B,GAAIC,GAAI,EAAGjB,EAASW,EAAUH,EAC9B,IAAkB,gBAAPQ,GACLvB,EAAM,EACNwB,EAAID,GAAO,EAAIA,EAAME,KAAKC,IAAIH,EAAMhB,EAAQiB,GAE5CjB,EAASgB,GAAO,EAAIE,KAAKE,IAAIJ,EAAM,EAAGhB,GAAUgB,EAAMhB,EAAS,MAE9D,IAAIc,GAAeE,GAAOhB,EAE/B,MADAgB,GAAMF,EAAYN,EAAOO,GAClBP,EAAMQ,KAASD,EAAOC,GAAO,CAEtC,IAAID,IAASA,EAEX,MADAC,GAAMH,EAAcQ,EAAMC,KAAKd,EAAOS,EAAGjB,GAASK,EAAEkB,OAC7CP,GAAO,EAAIA,EAAMC,GAAK,CAE/B,KAAKD,EAAMvB,EAAM,EAAIwB,EAAIjB,EAAS,EAAGgB,GAAO,GAAWhB,EAANgB,EAAcA,GAAOvB,EACpE,GAAIe,EAAMQ,KAASD,EAAM,MAAOC,EAElC,QAAQ,GAqPZ,QAASQ,GAAoB7B,EAAKG,GAChC,GAAI2B,GAAaC,EAAmB1B,OAChC2B,EAAchC,EAAIgC,YAClBC,EAASvB,EAAEwB,WAAWF,IAAgBA,EAAYG,WAAcC,EAGhEC,EAAO,aAGX,KAFI3B,EAAE4B,IAAItC,EAAKqC,KAAU3B,EAAE6B,SAASpC,EAAMkC,IAAOlC,EAAKqC,KAAKH,GAEpDP,KACLO,EAAON,EAAmBD,GACtBO,IAAQrC,IAAOA,EAAIqC,KAAUJ,EAAMI,KAAU3B,EAAE6B,SAASpC,EAAMkC,IAChElC,EAAKqC,KAAKH,GA74BhB,GAAII,GAAOC,KAGPC,EAAqBF,EAAK/B,EAG1BkC,EAAaC,MAAMV,UAAWC,EAAWU,OAAOX,UAAWY,EAAYC,SAASb,UAIlFK,EAAmBI,EAAWJ,KAC9Bd,EAAmBkB,EAAWlB,MAC9BuB,EAAmBb,EAASa,SAC5BC,EAAmBd,EAASc,eAK5BC,EAAqBN,MAAMO,QAC3BC,EAAqBP,OAAO3C,KAC5BmD,EAAqBP,EAAUQ,KAC/BC,EAAqBV,OAAOW,OAG1BC,EAAO,aAGPhD,EAAI,SAASV,GACf,MAAIA,aAAeU,GAAUV,EACvB0C,eAAgBhC,QACtBgC,KAAKiB,SAAW3D,GADiB,GAAIU,GAAEV,GAOlB,oBAAZ4D,UACa,mBAAXC,SAA0BA,OAAOD,UAC1CA,QAAUC,OAAOD,QAAUlD,GAE7BkD,QAAQlD,EAAIA,GAEZ+B,EAAK/B,EAAIA,EAIXA,EAAEoD,QAAU,OAKZ,IAAItD,GAAa,SAASuD,EAAMxD,EAASyD,GACvC,GAAIzD,QAAiB,GAAG,MAAOwD,EAC/B,QAAoB,MAAZC,EAAmB,EAAIA,GAC7B,IAAK,GAAG,MAAO,UAASC,GACtB,MAAOF,GAAKpC,KAAKpB,EAAS0D,GAE5B,KAAK,GAAG,MAAO,UAASA,EAAOC,GAC7B,MAAOH,GAAKpC,KAAKpB,EAAS0D,EAAOC,GAEnC,KAAK,GAAG,MAAO,UAASD,EAAO7D,EAAO+D,GACpC,MAAOJ,GAAKpC,KAAKpB,EAAS0D,EAAO7D,EAAO+D,GAE1C,KAAK,GAAG,MAAO,UAASC,EAAaH,EAAO7D,EAAO+D,GACjD,MAAOJ,GAAKpC,KAAKpB,EAAS6D,EAAaH,EAAO7D,EAAO+D,IAGzD,MAAO,YACL,MAAOJ,GAAKM,MAAM9D,EAASI,aAO3BI,EAAK,SAASkD,EAAO1D,EAASyD,GAChC,MAAa,OAATC,EAAsBvD,EAAE4D,SACxB5D,EAAEwB,WAAW+B,GAAezD,EAAWyD,EAAO1D,EAASyD,GACvDtD,EAAE6D,SAASN,GAAevD,EAAE8D,QAAQP,GACjCvD,EAAE+D,SAASR,GAEpBvD,GAAET,SAAW,SAASgE,EAAO1D,GAC3B,MAAOQ,GAAGkD,EAAO1D,EAASmE,KAI5B,IAAIC,GAAiB,SAASC,EAAUC,GACtC,MAAO,UAAS7E,GACd,GAAIK,GAASM,UAAUN,MACvB,IAAa,EAATA,GAAqB,MAAPL,EAAa,MAAOA,EACtC,KAAK,GAAII,GAAQ,EAAWC,EAARD,EAAgBA,IAIlC,IAAK,GAHD0E,GAASnE,UAAUP,GACnBD,EAAOyE,EAASE,GAChBC,EAAI5E,EAAKE,OACJiB,EAAI,EAAOyD,EAAJzD,EAAOA,IAAK,CAC1B,GAAI0D,GAAM7E,EAAKmB,EACVuD,IAAiB7E,EAAIgF,SAAc,KAAGhF,EAAIgF,GAAOF,EAAOE,IAGjE,MAAOhF,KAKPiF,EAAa,SAAS9C,GACxB,IAAKzB,EAAE6D,SAASpC,GAAY,QAC5B,IAAIqB,EAAc,MAAOA,GAAarB,EACtCuB,GAAKvB,UAAYA,CACjB,IAAI+C,GAAS,GAAIxB,EAEjB,OADAA,GAAKvB,UAAY,KACV+C,GAGLT,EAAW,SAASO,GACtB,MAAO,UAAShF,GACd,MAAc,OAAPA,MAAmB,GAAIA,EAAIgF,KAQlCG,EAAkB5D,KAAK6D,IAAI,EAAG,IAAM,EACpCpE,EAAYyD,EAAS,UACrBhE,EAAc,SAAS0D,GACzB,GAAI9D,GAASW,EAAUmD,EACvB,OAAwB,gBAAV9D,IAAsBA,GAAU,GAAe8E,GAAV9E,EASrDK,GAAE2E,KAAO3E,EAAE4E,QAAU,SAAStF,EAAKC,EAAUM,GAC3CN,EAAWO,EAAWP,EAAUM,EAChC,IAAIe,GAAGjB,CACP,IAAII,EAAYT,GACd,IAAKsB,EAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC3CrB,EAASD,EAAIsB,GAAIA,EAAGtB,OAEjB,CACL,GAAIG,GAAOO,EAAEP,KAAKH,EAClB,KAAKsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAC5CrB,EAASD,EAAIG,EAAKmB,IAAKnB,EAAKmB,GAAItB,GAGpC,MAAOA,IAITU,EAAE6E,IAAM7E,EAAE8E,QAAU,SAASxF,EAAKC,EAAUM,GAC1CN,EAAWc,EAAGd,EAAUM,EAIxB,KAAK,GAHDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OACvBoF,EAAU5C,MAAMxC,GACXD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtCqF,GAAQrF,GAASH,EAASD,EAAIM,GAAaA,EAAYN,GAEzD,MAAOyF,IA+BT/E,EAAEgF,OAAShF,EAAEiF,MAAQjF,EAAEkF,OAAS/F,EAAa,GAG7Ca,EAAEmF,YAAcnF,EAAEoF,MAAQjG,GAAc,GAGxCa,EAAEqF,KAAOrF,EAAEsF,OAAS,SAAShG,EAAKc,EAAWP,GAC3C,GAAIyE,EAMJ,OAJEA,GADEvE,EAAYT,GACRU,EAAEuF,UAAUjG,EAAKc,EAAWP,GAE5BG,EAAEwF,QAAQlG,EAAKc,EAAWP,GAE9ByE,QAAa,IAAKA,KAAS,EAAUhF,EAAIgF,GAA7C,QAKFtE,EAAEyF,OAASzF,EAAE0F,OAAS,SAASpG,EAAKc,EAAWP,GAC7C,GAAIkF,KAKJ,OAJA3E,GAAYC,EAAGD,EAAWP,GAC1BG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GAC7BvF,EAAUmD,EAAO7D,EAAOiG,IAAOZ,EAAQjD,KAAKyB,KAE3CwB,GAIT/E,EAAE4F,OAAS,SAAStG,EAAKc,EAAWP,GAClC,MAAOG,GAAEyF,OAAOnG,EAAKU,EAAE6F,OAAOxF,EAAGD,IAAaP,IAKhDG,EAAE8F,MAAQ9F,EAAE+F,IAAM,SAASzG,EAAKc,EAAWP,GACzCO,EAAYC,EAAGD,EAAWP,EAG1B,KAAK,GAFDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OAClBD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtC,KAAKU,EAAUd,EAAIM,GAAaA,EAAYN,GAAM,OAAO,EAE3D,OAAO,GAKTU,EAAEgG,KAAOhG,EAAEiG,IAAM,SAAS3G,EAAKc,EAAWP,GACxCO,EAAYC,EAAGD,EAAWP,EAG1B,KAAK,GAFDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OAClBD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtC,IAAIU,EAAUd,EAAIM,GAAaA,EAAYN,GAAM,OAAO,EAE1D,OAAO,GAKTU,EAAE6B,SAAW7B,EAAEkG,SAAWlG,EAAEmG,QAAU,SAAS7G,EAAKoB,EAAM0F,EAAWC,GAGnE,MAFKtG,GAAYT,KAAMA,EAAMU,EAAEsG,OAAOhH,KACd,gBAAb8G,IAAyBC,KAAOD,EAAY,GAChDpG,EAAEuG,QAAQjH,EAAKoB,EAAM0F,IAAc,GAI5CpG,EAAEwG,OAAS,SAASlH,EAAKmH,GACvB,GAAIC,GAAO1F,EAAMC,KAAKhB,UAAW,GAC7B0G,EAAS3G,EAAEwB,WAAWiF,EAC1B,OAAOzG,GAAE6E,IAAIvF,EAAK,SAASiE,GACzB,GAAIF,GAAOsD,EAASF,EAASlD,EAAMkD,EACnC,OAAe,OAARpD,EAAeA,EAAOA,EAAKM,MAAMJ,EAAOmD,MAKnD1G,EAAE4G,MAAQ,SAAStH,EAAKgF,GACtB,MAAOtE,GAAE6E,IAAIvF,EAAKU,EAAE+D,SAASO,KAK/BtE,EAAE6G,MAAQ,SAASvH,EAAKwH,GACtB,MAAO9G,GAAEyF,OAAOnG,EAAKU,EAAE8D,QAAQgD,KAKjC9G,EAAE+G,UAAY,SAASzH,EAAKwH,GAC1B,MAAO9G,GAAEqF,KAAK/F,EAAKU,EAAE8D,QAAQgD,KAI/B9G,EAAEc,IAAM,SAASxB,EAAKC,EAAUM,GAC9B,GACI0D,GAAOyD,EADPxC,GAAUR,IAAUiD,GAAgBjD,GAExC,IAAgB,MAAZzE,GAA2B,MAAPD,EAAa,CACnCA,EAAMS,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,EACxC,KAAK,GAAIsB,GAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC/C2C,EAAQjE,EAAIsB,GACR2C,EAAQiB,IACVA,EAASjB,OAIbhE,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GACjCqB,EAAWzH,EAASgE,EAAO7D,EAAOiG,IAC9BqB,EAAWC,GAAgBD,KAAchD,KAAYQ,KAAYR,OACnEQ,EAASjB,EACT0D,EAAeD,IAIrB,OAAOxC,IAITxE,EAAEe,IAAM,SAASzB,EAAKC,EAAUM,GAC9B,GACI0D,GAAOyD,EADPxC,EAASR,IAAUiD,EAAejD,GAEtC,IAAgB,MAAZzE,GAA2B,MAAPD,EAAa,CACnCA,EAAMS,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,EACxC,KAAK,GAAIsB,GAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC/C2C,EAAQjE,EAAIsB,GACA4D,EAARjB,IACFiB,EAASjB,OAIbhE,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GACjCqB,EAAWzH,EAASgE,EAAO7D,EAAOiG,IACnBsB,EAAXD,GAAwChD,MAAbgD,GAAoChD,MAAXQ,KACtDA,EAASjB,EACT0D,EAAeD,IAIrB,OAAOxC,IAKTxE,EAAEkH,QAAU,SAAS5H,GAInB,IAAK,GAAe6H,GAHhBC,EAAMrH,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,GACxCK,EAASyH,EAAIzH,OACb0H,EAAWlF,MAAMxC,GACZD,EAAQ,EAAiBC,EAARD,EAAgBA,IACxCyH,EAAOnH,EAAEsH,OAAO,EAAG5H,GACfyH,IAASzH,IAAO2H,EAAS3H,GAAS2H,EAASF,IAC/CE,EAASF,GAAQC,EAAI1H,EAEvB,OAAO2H,IAMTrH,EAAEuH,OAAS,SAASjI,EAAKkI,EAAGnB,GAC1B,MAAS,OAALmB,GAAanB,GACVtG,EAAYT,KAAMA,EAAMU,EAAEsG,OAAOhH,IAC/BA,EAAIU,EAAEsH,OAAOhI,EAAIK,OAAS,KAE5BK,EAAEkH,QAAQ5H,GAAK0B,MAAM,EAAGH,KAAKC,IAAI,EAAG0G,KAI7CxH,EAAEyH,OAAS,SAASnI,EAAKC,EAAUM,GAEjC,MADAN,GAAWc,EAAGd,EAAUM,GACjBG,EAAE4G,MAAM5G,EAAE6E,IAAIvF,EAAK,SAASiE,EAAO7D,EAAOiG,GAC/C,OACEpC,MAAOA,EACP7D,MAAOA,EACPgI,SAAUnI,EAASgE,EAAO7D,EAAOiG,MAElCgC,KAAK,SAASC,EAAMC,GACrB,GAAIC,GAAIF,EAAKF,SACTK,EAAIF,EAAMH,QACd,IAAII,IAAMC,EAAG,CACX,GAAID,EAAIC,GAAKD,QAAW,GAAG,MAAO,EAClC,IAAQC,EAAJD,GAASC,QAAW,GAAG,OAAQ,EAErC,MAAOH,GAAKlI,MAAQmI,EAAMnI,QACxB,SAIN,IAAIsI,GAAQ,SAASC,GACnB,MAAO,UAAS3I,EAAKC,EAAUM,GAC7B,GAAI2E,KAMJ,OALAjF,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,GAC1B,GAAI4E,GAAM/E,EAASgE,EAAO7D,EAAOJ,EACjC2I,GAASzD,EAAQjB,EAAOe,KAEnBE,GAMXxE,GAAEkI,QAAUF,EAAM,SAASxD,EAAQjB,EAAOe,GACpCtE,EAAE4B,IAAI4C,EAAQF,GAAME,EAAOF,GAAKxC,KAAKyB,GAAaiB,EAAOF,IAAQf,KAKvEvD,EAAEmI,QAAUH,EAAM,SAASxD,EAAQjB,EAAOe,GACxCE,EAAOF,GAAOf,IAMhBvD,EAAEoI,QAAUJ,EAAM,SAASxD,EAAQjB,EAAOe,GACpCtE,EAAE4B,IAAI4C,EAAQF,GAAME,EAAOF,KAAaE,EAAOF,GAAO,IAI5DtE,EAAEqI,QAAU,SAAS/I,GACnB,MAAKA,GACDU,EAAE0C,QAAQpD,GAAa0B,EAAMC,KAAK3B,GAClCS,EAAYT,GAAaU,EAAE6E,IAAIvF,EAAKU,EAAE4D,UACnC5D,EAAEsG,OAAOhH,OAIlBU,EAAEsI,KAAO,SAAShJ,GAChB,MAAW,OAAPA,EAAoB,EACjBS,EAAYT,GAAOA,EAAIK,OAASK,EAAEP,KAAKH,GAAKK,QAKrDK,EAAEuI,UAAY,SAASjJ,EAAKc,EAAWP,GACrCO,EAAYC,EAAGD,EAAWP,EAC1B,IAAI2I,MAAWC,IAIf,OAHAzI,GAAE2E,KAAKrF,EAAK,SAASiE,EAAOe,EAAKhF,IAC9Bc,EAAUmD,EAAOe,EAAKhF,GAAOkJ,EAAOC,GAAM3G,KAAKyB,MAE1CiF,EAAMC,IAShBzI,EAAE0I,MAAQ1I,EAAE2I,KAAO3I,EAAE4I,KAAO,SAASzI,EAAOqH,EAAGnB,GAC7C,MAAa,OAATlG,MAA2B,GACtB,MAALqH,GAAanB,EAAclG,EAAM,GAC9BH,EAAE6I,QAAQ1I,EAAOA,EAAMR,OAAS6H,IAMzCxH,EAAE6I,QAAU,SAAS1I,EAAOqH,EAAGnB,GAC7B,MAAOrF,GAAMC,KAAKd,EAAO,EAAGU,KAAKC,IAAI,EAAGX,EAAMR,QAAe,MAAL6H,GAAanB,EAAQ,EAAImB,MAKnFxH,EAAE8I,KAAO,SAAS3I,EAAOqH,EAAGnB,GAC1B,MAAa,OAATlG,MAA2B,GACtB,MAALqH,GAAanB,EAAclG,EAAMA,EAAMR,OAAS,GAC7CK,EAAE+I,KAAK5I,EAAOU,KAAKC,IAAI,EAAGX,EAAMR,OAAS6H,KAMlDxH,EAAE+I,KAAO/I,EAAEgJ,KAAOhJ,EAAEiJ,KAAO,SAAS9I,EAAOqH,EAAGnB,GAC5C,MAAOrF,GAAMC,KAAKd,EAAY,MAALqH,GAAanB,EAAQ,EAAImB,IAIpDxH,EAAEkJ,QAAU,SAAS/I,GACnB,MAAOH,GAAEyF,OAAOtF,EAAOH,EAAE4D,UAI3B,IAAIuF,GAAU,SAASC,EAAOC,EAASC,EAAQC,GAE7C,IAAK,GADDC,MAAa7I,EAAM,EACdC,EAAI2I,GAAc,EAAG5J,EAASW,EAAU8I,GAAYzJ,EAAJiB,EAAYA,IAAK,CACxE,GAAI2C,GAAQ6F,EAAMxI,EAClB,IAAIb,EAAYwD,KAAWvD,EAAE0C,QAAQa,IAAUvD,EAAEyJ,YAAYlG,IAAS,CAE/D8F,IAAS9F,EAAQ4F,EAAQ5F,EAAO8F,EAASC,GAC9C,IAAII,GAAI,EAAGC,EAAMpG,EAAM5D,MAEvB,KADA6J,EAAO7J,QAAUgK,EACNA,EAAJD,GACLF,EAAO7I,KAAS4C,EAAMmG,SAEdJ,KACVE,EAAO7I,KAAS4C,GAGpB,MAAOiG,GAITxJ,GAAEmJ,QAAU,SAAShJ,EAAOkJ,GAC1B,MAAOF,GAAQhJ,EAAOkJ,GAAS,IAIjCrJ,EAAE4J,QAAU,SAASzJ,GACnB,MAAOH,GAAE6J,WAAW1J,EAAOa,EAAMC,KAAKhB,UAAW,KAMnDD,EAAE8J,KAAO9J,EAAE+J,OAAS,SAAS5J,EAAO6J,EAAUzK,EAAUM,GACjDG,EAAEiK,UAAUD,KACfnK,EAAUN,EACVA,EAAWyK,EACXA,GAAW,GAEG,MAAZzK,IAAkBA,EAAWc,EAAGd,EAAUM,GAG9C,KAAK,GAFD2E,MACA0F,KACKtJ,EAAI,EAAGjB,EAASW,EAAUH,GAAYR,EAAJiB,EAAYA,IAAK,CAC1D,GAAI2C,GAAQpD,EAAMS,GACdoG,EAAWzH,EAAWA,EAASgE,EAAO3C,EAAGT,GAASoD,CAClDyG,IACGpJ,GAAKsJ,IAASlD,GAAUxC,EAAO1C,KAAKyB,GACzC2G,EAAOlD,GACEzH,EACJS,EAAE6B,SAASqI,EAAMlD,KACpBkD,EAAKpI,KAAKkF,GACVxC,EAAO1C,KAAKyB,IAEJvD,EAAE6B,SAAS2C,EAAQjB,IAC7BiB,EAAO1C,KAAKyB,GAGhB,MAAOiB,IAKTxE,EAAEmK,MAAQ,WACR,MAAOnK,GAAE8J,KAAKX,EAAQlJ,WAAW,GAAM,KAKzCD,EAAEoK,aAAe,SAASjK,GAGxB,IAAK,GAFDqE,MACA6F,EAAapK,UAAUN,OAClBiB,EAAI,EAAGjB,EAASW,EAAUH,GAAYR,EAAJiB,EAAYA,IAAK,CAC1D,GAAIF,GAAOP,EAAMS,EACjB,KAAIZ,EAAE6B,SAAS2C,EAAQ9D,GAAvB,CACA,IAAK,GAAIgJ,GAAI,EAAOW,EAAJX,GACT1J,EAAE6B,SAAS5B,UAAUyJ,GAAIhJ,GADAgJ,KAG5BA,IAAMW,GAAY7F,EAAO1C,KAAKpB,IAEpC,MAAO8D,IAKTxE,EAAE6J,WAAa,SAAS1J,GACtB,GAAI4I,GAAOI,EAAQlJ,WAAW,GAAM,EAAM,EAC1C,OAAOD,GAAEyF,OAAOtF,EAAO,SAASoD,GAC9B,OAAQvD,EAAE6B,SAASkH,EAAMxF,MAM7BvD,EAAEsK,IAAM,WACN,MAAOtK,GAAEuK,MAAMtK,YAKjBD,EAAEuK,MAAQ,SAASpK,GAIjB,IAAK,GAHDR,GAASQ,GAASH,EAAEc,IAAIX,EAAOG,GAAWX,QAAU,EACpD6E,EAASrC,MAAMxC,GAEVD,EAAQ,EAAWC,EAARD,EAAgBA,IAClC8E,EAAO9E,GAASM,EAAE4G,MAAMzG,EAAOT,EAEjC,OAAO8E,IAMTxE,EAAEwK,OAAS,SAAS7E,EAAMW,GAExB,IAAK,GADD9B,MACK5D,EAAI,EAAGjB,EAASW,EAAUqF,GAAWhG,EAAJiB,EAAYA,IAChD0F,EACF9B,EAAOmB,EAAK/E,IAAM0F,EAAO1F,GAEzB4D,EAAOmB,EAAK/E,GAAG,IAAM+E,EAAK/E,GAAG,EAGjC,OAAO4D,IAiBTxE,EAAEuF,UAAYrF,EAA2B,GACzCF,EAAEyK,cAAgBvK,GAA4B,GAI9CF,EAAES,YAAc,SAASN,EAAOb,EAAKC,EAAUM,GAC7CN,EAAWc,EAAGd,EAAUM,EAAS,EAGjC,KAFA,GAAI0D,GAAQhE,EAASD,GACjBoL,EAAM,EAAGC,EAAOrK,EAAUH,GACjBwK,EAAND,GAAY,CACjB,GAAIE,GAAM/J,KAAKgK,OAAOH,EAAMC,GAAQ,EAChCpL,GAASY,EAAMyK,IAAQrH,EAAOmH,EAAME,EAAM,EAAQD,EAAOC,EAE/D,MAAOF,IAgCT1K,EAAEuG,QAAUhG,EAAkB,EAAGP,EAAEuF,UAAWvF,EAAES,aAChDT,EAAE8K,YAAcvK,GAAmB,EAAGP,EAAEyK,eAKxCzK,EAAE+K,MAAQ,SAASC,EAAOC,EAAMC,GAClB,MAARD,IACFA,EAAOD,GAAS,EAChBA,EAAQ,GAEVE,EAAOA,GAAQ,CAKf,KAAK,GAHDvL,GAASkB,KAAKC,IAAID,KAAKsK,MAAMF,EAAOD,GAASE,GAAO,GACpDH,EAAQ5I,MAAMxC,GAETgB,EAAM,EAAShB,EAANgB,EAAcA,IAAOqK,GAASE,EAC9CH,EAAMpK,GAAOqK,CAGf,OAAOD,GAQT,IAAIK,GAAe,SAASC,EAAYC,EAAWzL,EAAS0L,EAAgB7E,GAC1E,KAAM6E,YAA0BD,IAAY,MAAOD,GAAW1H,MAAM9D,EAAS6G,EAC7E,IAAI8E,GAAOjH,EAAW8G,EAAW5J,WAC7B+C,EAAS6G,EAAW1H,MAAM6H,EAAM9E,EACpC,OAAI1G,GAAE6D,SAASW,GAAgBA,EACxBgH,EAMTxL,GAAE6C,KAAO,SAASQ,EAAMxD,GACtB,GAAI+C,GAAcS,EAAKR,OAASD,EAAY,MAAOA,GAAWe,MAAMN,EAAMrC,EAAMC,KAAKhB,UAAW,GAChG,KAAKD,EAAEwB,WAAW6B,GAAO,KAAM,IAAIoI,WAAU,oCAC7C,IAAI/E,GAAO1F,EAAMC,KAAKhB,UAAW,GAC7ByL,EAAQ,WACV,MAAON,GAAa/H,EAAMqI,EAAO7L,EAASmC,KAAM0E,EAAKiF,OAAO3K,EAAMC,KAAKhB,aAEzE,OAAOyL,IAMT1L,EAAE4L,QAAU,SAASvI,GACnB,GAAIwI,GAAY7K,EAAMC,KAAKhB,UAAW,GAClCyL,EAAQ,WAGV,IAAK,GAFDI,GAAW,EAAGnM,EAASkM,EAAUlM,OACjC+G,EAAOvE,MAAMxC,GACRiB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1B8F,EAAK9F,GAAKiL,EAAUjL,KAAOZ,EAAIC,UAAU6L,KAAcD,EAAUjL,EAEnE,MAAOkL,EAAW7L,UAAUN,QAAQ+G,EAAK5E,KAAK7B,UAAU6L,KACxD,OAAOV,GAAa/H,EAAMqI,EAAO1J,KAAMA,KAAM0E,GAE/C,OAAOgF,IAMT1L,EAAE+L,QAAU,SAASzM,GACnB,GAAIsB,GAA8B0D,EAA3B3E,EAASM,UAAUN,MAC1B,IAAc,GAAVA,EAAa,KAAM,IAAIqM,OAAM,wCACjC,KAAKpL,EAAI,EAAOjB,EAAJiB,EAAYA,IACtB0D,EAAMrE,UAAUW,GAChBtB,EAAIgF,GAAOtE,EAAE6C,KAAKvD,EAAIgF,GAAMhF,EAE9B,OAAOA,IAITU,EAAEiM,QAAU,SAAS5I,EAAM6I,GACzB,GAAID,GAAU,SAAS3H,GACrB,GAAI6H,GAAQF,EAAQE,MAChBC,EAAU,IAAMF,EAASA,EAAOvI,MAAM3B,KAAM/B,WAAaqE,EAE7D,OADKtE,GAAE4B,IAAIuK,EAAOC,KAAUD,EAAMC,GAAW/I,EAAKM,MAAM3B,KAAM/B,YACvDkM,EAAMC,GAGf,OADAH,GAAQE,SACDF,GAKTjM,EAAEqM,MAAQ,SAAShJ,EAAMiJ,GACvB,GAAI5F,GAAO1F,EAAMC,KAAKhB,UAAW,EACjC,OAAOsM,YAAW,WAChB,MAAOlJ,GAAKM,MAAM,KAAM+C,IACvB4F,IAKLtM,EAAEwM,MAAQxM,EAAE4L,QAAQ5L,EAAEqM,MAAOrM,EAAG,GAOhCA,EAAEyM,SAAW,SAASpJ,EAAMiJ,EAAMI,GAChC,GAAI7M,GAAS6G,EAAMlC,EACfmI,EAAU,KACVC,EAAW,CACVF,KAASA,KACd,IAAIG,GAAQ,WACVD,EAAWF,EAAQI,WAAY,EAAQ,EAAI9M,EAAE+M,MAC7CJ,EAAU,KACVnI,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,MAEjC,OAAO,YACL,GAAIqG,GAAM/M,EAAE+M,KACPH,IAAYF,EAAQI,WAAY,IAAOF,EAAWG,EACvD,IAAIC,GAAYV,GAAQS,EAAMH,EAc9B,OAbA/M,GAAUmC,KACV0E,EAAOzG,UACU,GAAb+M,GAAkBA,EAAYV,GAC5BK,IACFM,aAAaN,GACbA,EAAU,MAEZC,EAAWG,EACXvI,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,OACrBiG,GAAWD,EAAQQ,YAAa,IAC1CP,EAAUJ,WAAWM,EAAOG,IAEvBxI,IAQXxE,EAAEmN,SAAW,SAAS9J,EAAMiJ,EAAMc,GAChC,GAAIT,GAASjG,EAAM7G,EAASwN,EAAW7I,EAEnCqI,EAAQ,WACV,GAAI/D,GAAO9I,EAAE+M,MAAQM,CAEVf,GAAPxD,GAAeA,GAAQ,EACzB6D,EAAUJ,WAAWM,EAAOP,EAAOxD,IAEnC6D,EAAU,KACLS,IACH5I,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,QAKrC,OAAO,YACL7G,EAAUmC,KACV0E,EAAOzG,UACPoN,EAAYrN,EAAE+M,KACd,IAAIO,GAAUF,IAAcT,CAO5B,OANKA,KAASA,EAAUJ,WAAWM,EAAOP,IACtCgB,IACF9I,EAASnB,EAAKM,MAAM9D,EAAS6G,GAC7B7G,EAAU6G,EAAO,MAGZlC,IAOXxE,EAAEuN,KAAO,SAASlK,EAAMmK,GACtB,MAAOxN,GAAE4L,QAAQ4B,EAASnK,IAI5BrD,EAAE6F,OAAS,SAASzF,GAClB,MAAO,YACL,OAAQA,EAAUuD,MAAM3B,KAAM/B,aAMlCD,EAAEyN,QAAU,WACV,GAAI/G,GAAOzG,UACP+K,EAAQtE,EAAK/G,OAAS,CAC1B,OAAO,YAGL,IAFA,GAAIiB,GAAIoK,EACJxG,EAASkC,EAAKsE,GAAOrH,MAAM3B,KAAM/B,WAC9BW,KAAK4D,EAASkC,EAAK9F,GAAGK,KAAKe,KAAMwC,EACxC,OAAOA,KAKXxE,EAAE0N,MAAQ,SAASC,EAAOtK,GACxB,MAAO,YACL,QAAMsK,EAAQ,EACLtK,EAAKM,MAAM3B,KAAM/B,WAD1B,SAOJD,EAAE4N,OAAS,SAASD,EAAOtK,GACzB,GAAI7D,EACJ,OAAO,YAKL,QAJMmO,EAAQ,IACZnO,EAAO6D,EAAKM,MAAM3B,KAAM/B,YAEb,GAAT0N,IAAYtK,EAAO,MAChB7D,IAMXQ,EAAE6N,KAAO7N,EAAE4L,QAAQ5L,EAAE4N,OAAQ,EAM7B,IAAIE,KAAevL,SAAU,MAAMwL,qBAAqB,YACpD1M,GAAsB,UAAW,gBAAiB,WAClC,uBAAwB,iBAAkB,iBAqB9DrB,GAAEP,KAAO,SAASH,GAChB,IAAKU,EAAE6D,SAASvE,GAAM,QACtB,IAAIqD,EAAY,MAAOA,GAAWrD,EAClC,IAAIG,KACJ,KAAK,GAAI6E,KAAOhF,GAASU,EAAE4B,IAAItC,EAAKgF,IAAM7E,EAAKqC,KAAKwC,EAGpD,OADIwJ,IAAY3M,EAAoB7B,EAAKG,GAClCA,GAITO,EAAEgO,QAAU,SAAS1O,GACnB,IAAKU,EAAE6D,SAASvE,GAAM,QACtB,IAAIG,KACJ,KAAK,GAAI6E,KAAOhF,GAAKG,EAAKqC,KAAKwC,EAG/B,OADIwJ,IAAY3M,EAAoB7B,EAAKG,GAClCA,GAITO,EAAEsG,OAAS,SAAShH,GAIlB,IAAK,GAHDG,GAAOO,EAAEP,KAAKH,GACdK,EAASF,EAAKE,OACd2G,EAASnE,MAAMxC,GACViB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1B0F,EAAO1F,GAAKtB,EAAIG,EAAKmB,GAEvB,OAAO0F,IAKTtG,EAAEiO,UAAY,SAAS3O,EAAKC,EAAUM,GACpCN,EAAWc,EAAGd,EAAUM,EAKtB,KAAK,GADDD,GAHFH,EAAQO,EAAEP,KAAKH,GACbK,EAASF,EAAKE,OACdoF,KAEKrF,EAAQ,EAAWC,EAARD,EAAgBA,IAClCE,EAAaH,EAAKC,GAClBqF,EAAQnF,GAAcL,EAASD,EAAIM,GAAaA,EAAYN,EAE9D,OAAOyF,IAIX/E,EAAEkO,MAAQ,SAAS5O,GAIjB,IAAK,GAHDG,GAAOO,EAAEP,KAAKH,GACdK,EAASF,EAAKE,OACduO,EAAQ/L,MAAMxC,GACTiB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1BsN,EAAMtN,IAAMnB,EAAKmB,GAAItB,EAAIG,EAAKmB,IAEhC,OAAOsN,IAITlO,EAAEmO,OAAS,SAAS7O,GAGlB,IAAK,GAFDkF,MACA/E,EAAOO,EAAEP,KAAKH,GACTsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAChD4D,EAAOlF,EAAIG,EAAKmB,KAAOnB,EAAKmB,EAE9B,OAAO4D,IAKTxE,EAAEoO,UAAYpO,EAAEqO,QAAU,SAAS/O,GACjC,GAAIgP,KACJ,KAAK,GAAIhK,KAAOhF,GACVU,EAAEwB,WAAWlC,EAAIgF,KAAOgK,EAAMxM,KAAKwC,EAEzC,OAAOgK,GAAM3G,QAIf3H,EAAEuO,OAAStK,EAAejE,EAAEgO,SAI5BhO,EAAEwO,UAAYxO,EAAEyO,OAASxK,EAAejE,EAAEP,MAG1CO,EAAEwF,QAAU,SAASlG,EAAKc,EAAWP,GACnCO,EAAYC,EAAGD,EAAWP,EAE1B,KAAK,GADmByE,GAApB7E,EAAOO,EAAEP,KAAKH,GACTsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAEhD,GADA0D,EAAM7E,EAAKmB,GACPR,EAAUd,EAAIgF,GAAMA,EAAKhF,GAAM,MAAOgF,IAK9CtE,EAAE0O,KAAO,SAASlE,EAAQmE,EAAW9O,GACnC,GAA+BN,GAAUE,EAArC+E,KAAalF,EAAMkL,CACvB,IAAW,MAAPlL,EAAa,MAAOkF,EACpBxE,GAAEwB,WAAWmN,IACflP,EAAOO,EAAEgO,QAAQ1O,GACjBC,EAAWO,EAAW6O,EAAW9O,KAEjCJ,EAAO0J,EAAQlJ,WAAW,GAAO,EAAO,GACxCV,EAAW,SAASgE,EAAOe,EAAKhF,GAAO,MAAOgF,KAAOhF,IACrDA,EAAM8C,OAAO9C,GAEf,KAAK,GAAIsB,GAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAAK,CACrD,GAAI0D,GAAM7E,EAAKmB,GACX2C,EAAQjE,EAAIgF,EACZ/E,GAASgE,EAAOe,EAAKhF,KAAMkF,EAAOF,GAAOf,GAE/C,MAAOiB,IAITxE,EAAE4O,KAAO,SAAStP,EAAKC,EAAUM,GAC/B,GAAIG,EAAEwB,WAAWjC,GACfA,EAAWS,EAAE6F,OAAOtG,OACf,CACL,GAAIE,GAAOO,EAAE6E,IAAIsE,EAAQlJ,WAAW,GAAO,EAAO,GAAI4O,OACtDtP,GAAW,SAASgE,EAAOe,GACzB,OAAQtE,EAAE6B,SAASpC,EAAM6E,IAG7B,MAAOtE,GAAE0O,KAAKpP,EAAKC,EAAUM,IAI/BG,EAAE8O,SAAW7K,EAAejE,EAAEgO,SAAS,GAKvChO,EAAE+C,OAAS,SAAStB,EAAWsN,GAC7B,GAAIvK,GAASD,EAAW9C,EAExB,OADIsN,IAAO/O,EAAEwO,UAAUhK,EAAQuK,GACxBvK,GAITxE,EAAEgP,MAAQ,SAAS1P,GACjB,MAAKU,GAAE6D,SAASvE,GACTU,EAAE0C,QAAQpD,GAAOA,EAAI0B,QAAUhB,EAAEuO,UAAWjP,GADtBA,GAO/BU,EAAEiP,IAAM,SAAS3P,EAAK4P,GAEpB,MADAA,GAAY5P,GACLA,GAITU,EAAEmP,QAAU,SAAS3E,EAAQ1D,GAC3B,GAAIrH,GAAOO,EAAEP,KAAKqH,GAAQnH,EAASF,EAAKE,MACxC,IAAc,MAAV6K,EAAgB,OAAQ7K,CAE5B,KAAK,GADDL,GAAM8C,OAAOoI,GACR5J,EAAI,EAAOjB,EAAJiB,EAAYA,IAAK,CAC/B,GAAI0D,GAAM7E,EAAKmB,EACf,IAAIkG,EAAMxC,KAAShF,EAAIgF,MAAUA,IAAOhF,IAAM,OAAO,EAEvD,OAAO,EAKT,IAAI8P,GAAK,SAAStH,EAAGC,EAAGsH,EAAQC,GAG9B,GAAIxH,IAAMC,EAAG,MAAa,KAAND,GAAW,EAAIA,IAAM,EAAIC,CAE7C,IAAS,MAALD,GAAkB,MAALC,EAAW,MAAOD,KAAMC,CAErCD,aAAa9H,KAAG8H,EAAIA,EAAE7E,UACtB8E,YAAa/H,KAAG+H,EAAIA,EAAE9E,SAE1B,IAAIsM,GAAYhN,EAAStB,KAAK6G,EAC9B,IAAIyH,IAAchN,EAAStB,KAAK8G,GAAI,OAAO,CAC3C,QAAQwH,GAEN,IAAK,kBAEL,IAAK,kBAGH,MAAO,GAAKzH,GAAM,GAAKC,CACzB,KAAK,kBAGH,OAAKD,KAAOA,GAAWC,KAAOA,EAEhB,KAAND,EAAU,GAAKA,IAAM,EAAIC,GAAKD,KAAOC,CAC/C,KAAK,gBACL,IAAK,mBAIH,OAAQD,KAAOC,EAGnB,GAAIyH,GAA0B,mBAAdD,CAChB,KAAKC,EAAW,CACd,GAAgB,gBAAL1H,IAA6B,gBAALC,GAAe,OAAO,CAIzD,IAAI0H,GAAQ3H,EAAExG,YAAaoO,EAAQ3H,EAAEzG,WACrC,IAAImO,IAAUC,KAAW1P,EAAEwB,WAAWiO,IAAUA,YAAiBA,IACxCzP,EAAEwB,WAAWkO,IAAUA,YAAiBA,KACzC,eAAiB5H,IAAK,eAAiBC,GAC7D,OAAO,EAQXsH,EAASA,MACTC,EAASA,KAET,KADA,GAAI3P,GAAS0P,EAAO1P,OACbA,KAGL,GAAI0P,EAAO1P,KAAYmI,EAAG,MAAOwH,GAAO3P,KAAYoI,CAQtD,IAJAsH,EAAOvN,KAAKgG,GACZwH,EAAOxN,KAAKiG,GAGRyH,EAAW,CAGb,GADA7P,EAASmI,EAAEnI,OACPA,IAAWoI,EAAEpI,OAAQ,OAAO,CAEhC,MAAOA,KACL,IAAKyP,EAAGtH,EAAEnI,GAASoI,EAAEpI,GAAS0P,EAAQC,GAAS,OAAO,MAEnD,CAEL,GAAsBhL,GAAlB7E,EAAOO,EAAEP,KAAKqI,EAGlB,IAFAnI,EAASF,EAAKE,OAEVK,EAAEP,KAAKsI,GAAGpI,SAAWA,EAAQ,OAAO,CACxC,MAAOA,KAGL,GADA2E,EAAM7E,EAAKE,IACLK,EAAE4B,IAAImG,EAAGzD,KAAQ8K,EAAGtH,EAAExD,GAAMyD,EAAEzD,GAAM+K,EAAQC,GAAU,OAAO,EAMvE,MAFAD,GAAOM,MACPL,EAAOK,OACA,EAIT3P,GAAE4P,QAAU,SAAS9H,EAAGC,GACtB,MAAOqH,GAAGtH,EAAGC,IAKf/H,EAAE6P,QAAU,SAASvQ,GACnB,MAAW,OAAPA,GAAoB,EACpBS,EAAYT,KAASU,EAAE0C,QAAQpD,IAAQU,EAAE8P,SAASxQ,IAAQU,EAAEyJ,YAAYnK,IAA6B,IAAfA,EAAIK,OAChE,IAAvBK,EAAEP,KAAKH,GAAKK,QAIrBK,EAAE+P,UAAY,SAASzQ,GACrB,SAAUA,GAAwB,IAAjBA,EAAI0Q,WAKvBhQ,EAAE0C,QAAUD,GAAiB,SAASnD,GACpC,MAA8B,mBAAvBiD,EAAStB,KAAK3B,IAIvBU,EAAE6D,SAAW,SAASvE,GACpB,GAAI2Q,SAAc3Q,EAClB,OAAgB,aAAT2Q,GAAgC,WAATA,KAAuB3Q,GAIvDU,EAAE2E,MAAM,YAAa,WAAY,SAAU,SAAU,OAAQ,SAAU,SAAU,SAASuL,GACxFlQ,EAAE,KAAOkQ,GAAQ,SAAS5Q,GACxB,MAAOiD,GAAStB,KAAK3B,KAAS,WAAa4Q,EAAO,OAMjDlQ,EAAEyJ,YAAYxJ,aACjBD,EAAEyJ,YAAc,SAASnK,GACvB,MAAOU,GAAE4B,IAAItC,EAAK,YAMJ,kBAAP,KAAyC,gBAAb6Q,aACrCnQ,EAAEwB,WAAa,SAASlC,GACtB,MAAqB,kBAAPA,KAAqB,IAKvCU,EAAEoQ,SAAW,SAAS9Q,GACpB,MAAO8Q,UAAS9Q,KAAS4B,MAAMmP,WAAW/Q,KAI5CU,EAAEkB,MAAQ,SAAS5B,GACjB,MAAOU,GAAEsQ,SAAShR,IAAQA,KAASA,GAIrCU,EAAEiK,UAAY,SAAS3K,GACrB,MAAOA,MAAQ,GAAQA,KAAQ,GAAgC,qBAAvBiD,EAAStB,KAAK3B,IAIxDU,EAAEuQ,OAAS,SAASjR,GAClB,MAAe,QAARA,GAITU,EAAEwQ,YAAc,SAASlR,GACvB,MAAOA,SAAa,IAKtBU,EAAE4B,IAAM,SAAStC,EAAKgF,GACpB,MAAc,OAAPhF,GAAekD,EAAevB,KAAK3B,EAAKgF,IAQjDtE,EAAEyQ,WAAa,WAEb,MADA1O,GAAK/B,EAAIiC,EACFD,MAIThC,EAAE4D,SAAW,SAASL,GACpB,MAAOA,IAITvD,EAAE0Q,SAAW,SAASnN,GACpB,MAAO,YACL,MAAOA,KAIXvD,EAAE2Q,KAAO,aAET3Q,EAAE+D,SAAWA,EAGb/D,EAAE4Q,WAAa,SAAStR,GACtB,MAAc,OAAPA,EAAc,aAAe,SAASgF,GAC3C,MAAOhF,GAAIgF,KAMftE,EAAE8D,QAAU9D,EAAE6Q,QAAU,SAAS/J,GAE/B,MADAA,GAAQ9G,EAAEwO,aAAc1H,GACjB,SAASxH,GACd,MAAOU,GAAEmP,QAAQ7P,EAAKwH,KAK1B9G,EAAE2N,MAAQ,SAASnG,EAAGjI,EAAUM,GAC9B,GAAIiR,GAAQ3O,MAAMtB,KAAKC,IAAI,EAAG0G,GAC9BjI,GAAWO,EAAWP,EAAUM,EAAS,EACzC,KAAK,GAAIe,GAAI,EAAO4G,EAAJ5G,EAAOA,IAAKkQ,EAAMlQ,GAAKrB,EAASqB,EAChD,OAAOkQ,IAIT9Q,EAAEsH,OAAS,SAASvG,EAAKD,GAKvB,MAJW,OAAPA,IACFA,EAAMC,EACNA,EAAM,GAEDA,EAAMF,KAAKgK,MAAMhK,KAAKyG,UAAYxG,EAAMC,EAAM,KAIvDf,EAAE+M,IAAMgE,KAAKhE,KAAO,WAClB,OAAO,GAAIgE,OAAOC,UAIpB,IAAIC,IACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAEHC,EAAcxR,EAAEmO,OAAO8C,GAGvBQ,EAAgB,SAAS5M,GAC3B,GAAI6M,GAAU,SAASC,GACrB,MAAO9M,GAAI8M,IAGTvN,EAAS,MAAQpE,EAAEP,KAAKoF,GAAK+M,KAAK,KAAO,IACzCC,EAAaC,OAAO1N,GACpB2N,EAAgBD,OAAO1N,EAAQ,IACnC,OAAO,UAAS4N,GAEd,MADAA,GAAmB,MAAVA,EAAiB,GAAK,GAAKA,EAC7BH,EAAWI,KAAKD,GAAUA,EAAOE,QAAQH,EAAeL,GAAWM,GAG9EhS,GAAEmS,OAASV,EAAcR,GACzBjR,EAAEoS,SAAWX,EAAcD,GAI3BxR,EAAEwE,OAAS,SAASgG,EAAQzG,EAAUsO,GACpC,GAAI9O,GAAkB,MAAViH,MAAsB,GAAIA,EAAOzG,EAI7C,OAHIR,SAAe,KACjBA,EAAQ8O,GAEHrS,EAAEwB,WAAW+B,GAASA,EAAMtC,KAAKuJ,GAAUjH,EAKpD,IAAI+O,GAAY,CAChBtS,GAAEuS,SAAW,SAASC,GACpB,GAAIC,KAAOH,EAAY,EACvB,OAAOE,GAASA,EAASC,EAAKA,GAKhCzS,EAAE0S,kBACAC,SAAc,kBACdC,YAAc,mBACdT,OAAc,mBAMhB,IAAIU,GAAU,OAIVC,GACFxB,IAAU,IACVyB,KAAU,KACVC,KAAU,IACVC,KAAU,IACVC,SAAU,QACVC,SAAU,SAGRzB,EAAU,4BAEV0B,EAAa,SAASzB,GACxB,MAAO,KAAOmB,EAAQnB,GAOxB3R,GAAEqT,SAAW,SAASC,EAAMC,EAAUC,IAC/BD,GAAYC,IAAaD,EAAWC,GACzCD,EAAWvT,EAAE8O,YAAayE,EAAUvT,EAAE0S,iBAGtC,IAAI5O,GAAUgO,SACXyB,EAASpB,QAAUU,GAASzO,QAC5BmP,EAASX,aAAeC,GAASzO,QACjCmP,EAASZ,UAAYE,GAASzO,QAC/BwN,KAAK,KAAO,KAAM,KAGhBlS,EAAQ,EACR0E,EAAS,QACbkP,GAAKpB,QAAQpO,EAAS,SAAS6N,EAAOQ,EAAQS,EAAaD,EAAUc,GAanE,MAZArP,IAAUkP,EAAKtS,MAAMtB,EAAO+T,GAAQvB,QAAQR,EAAS0B,GACrD1T,EAAQ+T,EAAS9B,EAAMhS,OAEnBwS,EACF/N,GAAU,cAAgB+N,EAAS,iCAC1BS,EACTxO,GAAU,cAAgBwO,EAAc,uBAC/BD,IACTvO,GAAU,OAASuO,EAAW,YAIzBhB,IAETvN,GAAU,OAGLmP,EAASG,WAAUtP,EAAS,mBAAqBA,EAAS,OAE/DA,EAAS,2CACP,oDACAA,EAAS,eAEX,KACE,GAAIuP,GAAS,GAAIrR,UAASiR,EAASG,UAAY,MAAO,IAAKtP,GAC3D,MAAOwP,GAEP,KADAA,GAAExP,OAASA,EACLwP,EAGR,GAAIP,GAAW,SAASQ,GACtB,MAAOF,GAAO1S,KAAKe,KAAM6R,EAAM7T,IAI7B8T,EAAWP,EAASG,UAAY,KAGpC,OAFAL,GAASjP,OAAS,YAAc0P,EAAW,OAAS1P,EAAS,IAEtDiP,GAITrT,EAAE+T,MAAQ,SAASzU,GACjB,GAAI0U,GAAWhU,EAAEV,EAEjB,OADA0U,GAASC,QAAS,EACXD,EAUT,IAAIxP,GAAS,SAASwP,EAAU1U,GAC9B,MAAO0U,GAASC,OAASjU,EAAEV,GAAKyU,QAAUzU,EAI5CU,GAAEkU,MAAQ,SAAS5U,GACjBU,EAAE2E,KAAK3E,EAAEoO,UAAU9O,GAAM,SAAS4Q,GAChC,GAAI7M,GAAOrD,EAAEkQ,GAAQ5Q,EAAI4Q,EACzBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,GAAIxJ,IAAQ1E,KAAKiB,SAEjB,OADAnB,GAAK6B,MAAM+C,EAAMzG,WACVuE,EAAOxC,KAAMqB,EAAKM,MAAM3D,EAAG0G,QAMxC1G,EAAEkU,MAAMlU,GAGRA,EAAE2E,MAAM,MAAO,OAAQ,UAAW,QAAS,OAAQ,SAAU,WAAY,SAASuL,GAChF,GAAIzJ,GAASvE,EAAWgO,EACxBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,GAAI5Q,GAAM0C,KAAKiB,QAGf,OAFAwD,GAAO9C,MAAMrE,EAAKW,WACJ,UAATiQ,GAA6B,WAATA,GAAqC,IAAf5Q,EAAIK,cAAqBL,GAAI,GACrEkF,EAAOxC,KAAM1C,MAKxBU,EAAE2E,MAAM,SAAU,OAAQ,SAAU,SAASuL,GAC3C,GAAIzJ,GAASvE,EAAWgO,EACxBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,MAAO1L,GAAOxC,KAAMyE,EAAO9C,MAAM3B,KAAKiB,SAAUhD,eAKpDD,EAAEyB,UAAU8B,MAAQ,WAClB,MAAOvB,MAAKiB,UAKdjD,EAAEyB,UAAU0S,QAAUnU,EAAEyB,UAAU2S,OAASpU,EAAEyB,UAAU8B,MAEvDvD,EAAEyB,UAAUc,SAAW,WACrB,MAAO,GAAKP,KAAKiB,UAUG,kBAAXoR,SAAyBA,OAAOC,KACzCD,OAAO,gBAAkB,WACvB,MAAOrU,OAGXiB,KAAKe"} \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/underscore/underscore.js b/platforms/android/cordova/node_modules/underscore/underscore.js new file mode 100644 index 0000000..b29332f --- /dev/null +++ b/platforms/android/cordova/node_modules/underscore/underscore.js @@ -0,0 +1,1548 @@ +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.8.3'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value)) return _.matcher(value); + return _.property(value); + }; + _.iteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, undefinedOnly) { + return function(obj) { + var length = arguments.length; + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Optimized iterator function as using arguments.length + // in the main function will deoptimize the, see #1991. + function iterator(obj, iteratee, memo, keys, index, length) { + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + } + + return function(obj, iteratee, memo, context) { + iteratee = optimizeCb(iteratee, context, 4); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + // Determine the initial value if none is provided. + if (arguments.length < 3) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + return iterator(obj, iteratee, memo, keys, index, length); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var key; + if (isArrayLike(obj)) { + key = _.findIndex(obj, predicate, context); + } else { + key = _.findKey(obj, predicate, context); + } + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + var func = isFunc ? method : value[method]; + return func == null ? func : func.apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = isArrayLike(obj) ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = cb(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, startIndex) { + var output = [], idx = 0; + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + //flatten current level of array or arguments object + if (!shallow) value = flatten(value, shallow, strict); + var j = 0, len = value.length; + output.length += len; + while (j < len) { + output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(arguments, true, true, 1); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + return _.unzip(arguments); + }; + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var args = slice.call(arguments, 2); + var bound = function() { + return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object + // In contrast to _.map it returns an object + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}, + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s) + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(object, oiteratee, context) { + var result = {}, obj = object, iteratee, keys; + if (obj == null) return result; + if (_.isFunction(oiteratee)) { + keys = _.allKeys(obj); + iteratee = optimizeCb(oiteratee, context); + } else { + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(flatten(arguments, false, false, 1), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), and in Safari 8 (#1929). + if (typeof /./ != 'function' && typeof Int8Array != 'object') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = property; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + return obj == null ? function(){} : function(key) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property, fallback) { + var value = object == null ? void 0 : object[property]; + if (value === void 0) { + value = fallback; + } + return _.isFunction(value) ? value.call(object) : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return '' + this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define === 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}.call(this)); diff --git a/platforms/android/cordova/node_modules/unorm/LICENSE.md b/platforms/android/cordova/node_modules/unorm/LICENSE.md new file mode 100644 index 0000000..ed1d4f3 --- /dev/null +++ b/platforms/android/cordova/node_modules/unorm/LICENSE.md @@ -0,0 +1,42 @@ +The software dual licensed under the MIT and GPL licenses. MIT license: + + Copyright (c) 2008-2013 Matsuza , Bjarke Walling + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. + +GPL notice (please read the [full GPL license] online): + + Copyright (C) 2008-2013 Matsuza , Bjarke Walling + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +[full GPL license]: http://www.gnu.org/licenses/gpl-2.0-standalone.html diff --git a/platforms/android/cordova/node_modules/unorm/README.md b/platforms/android/cordova/node_modules/unorm/README.md new file mode 100644 index 0000000..6ff6420 --- /dev/null +++ b/platforms/android/cordova/node_modules/unorm/README.md @@ -0,0 +1,118 @@ +This is [Unicode Normalizer] in a Common JS module. I'm not affiliated with Matsuza, the original author of Unicode Normalizer. + +[![Build Status](https://travis-ci.org/walling/unorm.png?branch=master)](https://travis-ci.org/walling/unorm) + + +Installation +------------ + +```bash +npm install unorm +``` + +Polyfill +-------- + +You can use this module as a polyfill for [String.prototype.normalize], for example: + +```javascript +console.log('æøåäüö'.normalize('NFKD')); +``` + +The module uses some [EcmaScript 5](http://kangax.github.io/es5-compat-table/) features. Other browsers should use a compability shim, e.g. [es5-shim](https://github.com/kriskowal/es5-shim). + +Functions +--------- + +This module exports four functions: `nfc`, `nfd`, `nfkc`, and `nfkd`; one for each Unicode normalization. In the browser the functions are exported in the `unorm` global. In CommonJS environments you just require the module. Functions: + + * `unorm.nfd(str)` – Canonical Decomposition + * `unorm.nfc(str)` – Canonical Decomposition, followed by Canonical Composition + * `unorm.nfkd(str)` – Compatibility Decomposition + * `unorm.nfkc(str)` – Compatibility Decomposition, followed by Canonical Composition + + +Node.JS example +--------------- + +For a longer example, see `examples` directory. + +```javascript +var unorm = require('unorm'); + +var text = + 'The \u212B symbol invented by A. J. \u00C5ngstr\u00F6m ' + + '(1814, L\u00F6gd\u00F6, \u2013 1874) denotes the length ' + + '10\u207B\u00B9\u2070 m.'; + +var combining = /[\u0300-\u036F]/g; // Use XRegExp('\\p{M}', 'g'); see example.js. + +console.log('Regular: ' + text); +console.log('NFC: ' + unorm.nfc(text)); +console.log('NFD: ' + unorm.nfd(text)); +console.log('NFKC: ' + unorm.nfkc(text)); +console.log('NFKD: * ' + unorm.nfkd(text).replace(combining, '')); +console.log(' * = Combining characters removed from decomposed form.'); +``` + + +Road map +-------- + +As of November 2013. Longer term: + +- Look at possible optimizations (speed primarely, module size secondarily) +- Adding functions to quick check normalizations: `is_nfc`, `is_nfd`, etc. + + +Contributers +------------ + + - **Oleg Grenrus** is helping to maintain this library. He cleaned up the code base, fixed JSHint errors, created a test suite and updated the normalization data to Unicode 6.3. + + +Development notes +----------------- + +- [Unicode normalization forms report](http://www.unicode.org/reports/tr15/) +- Unicode data can be found from http://www.unicode.org/Public/UCD/latest/ucd + +To generate new unicode data, run: +```sh +cd src/data/src +javac UnormNormalizerBuilder.java +java UnormNormalizerBuilder +``` +produced `unormdata.js` contains needed table + +Execute `node benchmark/benchmark.js` to run simple benchmarks, if you do any changes which may affect performance. + +License +------- + +This project includes the software package **Unicode Normalizer 1.0.0**. The +software dual licensed under the MIT and GPL licenses. Here is the MIT license: + + Copyright (c) 2008-2013 Matsuza , Bjarke Walling + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. + + +[Unicode Normalizer]: http://coderepos.org/share/browser/lang/javascript/UnicodeNormalizer +[String.prototype.normalize]: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.5.3.26 diff --git a/platforms/android/cordova/node_modules/unorm/lib/unorm.js b/platforms/android/cordova/node_modules/unorm/lib/unorm.js new file mode 100644 index 0000000..92d3699 --- /dev/null +++ b/platforms/android/cordova/node_modules/unorm/lib/unorm.js @@ -0,0 +1,442 @@ +(function (root) { + "use strict"; + +/***** unorm.js *****/ + +/* + * UnicodeNormalizer 1.0.0 + * Copyright (c) 2008 Matsuza + * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. + * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $ + * $Rev: 13309 $ + */ + + var DEFAULT_FEATURE = [null, 0, {}]; + var CACHE_THRESHOLD = 10; + var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28; + var NCount = VCount * TCount; // 588 + var SCount = LCount * NCount; // 11172 + + var UChar = function(cp, feature){ + this.codepoint = cp; + this.feature = feature; + }; + + // Strategies + var cache = {}; + var cacheCounter = []; + for (var i = 0; i <= 0xFF; ++i){ + cacheCounter[i] = 0; + } + + function fromCache(next, cp, needFeature){ + var ret = cache[cp]; + if(!ret){ + ret = next(cp, needFeature); + if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){ + cache[cp] = ret; + } + } + return ret; + } + + function fromData(next, cp, needFeature){ + var hash = cp & 0xFF00; + var dunit = UChar.udata[hash] || {}; + var f = dunit[cp]; + return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE); + } + function fromCpOnly(next, cp, needFeature){ + return !!needFeature ? next(cp, needFeature) : new UChar(cp, null); + } + function fromRuleBasedJamo(next, cp, needFeature){ + var j; + if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){ + return next(cp, needFeature); + } + if(LBase <= cp && cp < LBase + LCount){ + var c = {}; + var base = (cp - LBase) * VCount; + for (j = 0; j < VCount; ++j){ + c[VBase + j] = SBase + TCount * (j + base); + } + return new UChar(cp, [,,c]); + } + + var SIndex = cp - SBase; + var TIndex = SIndex % TCount; + var feature = []; + if(TIndex !== 0){ + feature[0] = [SBase + SIndex - TIndex, TBase + TIndex]; + } else { + feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)]; + feature[2] = {}; + for (j = 1; j < TCount; ++j){ + feature[2][TBase + j] = cp + j; + } + } + return new UChar(cp, feature); + } + function fromCpFilter(next, cp, needFeature){ + return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature); + } + + var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData]; + + UChar.fromCharCode = strategies.reduceRight(function (next, strategy) { + return function (cp, needFeature) { + return strategy(next, cp, needFeature); + }; + }, null); + + UChar.isHighSurrogate = function(cp){ + return cp >= 0xD800 && cp <= 0xDBFF; + }; + UChar.isLowSurrogate = function(cp){ + return cp >= 0xDC00 && cp <= 0xDFFF; + }; + + UChar.prototype.prepFeature = function(){ + if(!this.feature){ + this.feature = UChar.fromCharCode(this.codepoint, true).feature; + } + }; + + UChar.prototype.toString = function(){ + if(this.codepoint < 0x10000){ + return String.fromCharCode(this.codepoint); + } else { + var x = this.codepoint - 0x10000; + return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00); + } + }; + + UChar.prototype.getDecomp = function(){ + this.prepFeature(); + return this.feature[0] || null; + }; + + UChar.prototype.isCompatibility = function(){ + this.prepFeature(); + return !!this.feature[1] && (this.feature[1] & (1 << 8)); + }; + UChar.prototype.isExclude = function(){ + this.prepFeature(); + return !!this.feature[1] && (this.feature[1] & (1 << 9)); + }; + UChar.prototype.getCanonicalClass = function(){ + this.prepFeature(); + return !!this.feature[1] ? (this.feature[1] & 0xff) : 0; + }; + UChar.prototype.getComposite = function(following){ + this.prepFeature(); + if(!this.feature[2]){ + return null; + } + var cp = this.feature[2][following.codepoint]; + return cp ? UChar.fromCharCode(cp) : null; + }; + + var UCharIterator = function(str){ + this.str = str; + this.cursor = 0; + }; + UCharIterator.prototype.next = function(){ + if(!!this.str && this.cursor < this.str.length){ + var cp = this.str.charCodeAt(this.cursor++); + var d; + if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){ + cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000; + ++this.cursor; + } + return UChar.fromCharCode(cp); + } else { + this.str = null; + return null; + } + }; + + var RecursDecompIterator = function(it, cano){ + this.it = it; + this.canonical = cano; + this.resBuf = []; + }; + + RecursDecompIterator.prototype.next = function(){ + function recursiveDecomp(cano, uchar){ + var decomp = uchar.getDecomp(); + if(!!decomp && !(cano && uchar.isCompatibility())){ + var ret = []; + for(var i = 0; i < decomp.length; ++i){ + var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i])); + ret = ret.concat(a); + } + return ret; + } else { + return [uchar]; + } + } + if(this.resBuf.length === 0){ + var uchar = this.it.next(); + if(!uchar){ + return null; + } + this.resBuf = recursiveDecomp(this.canonical, uchar); + } + return this.resBuf.shift(); + }; + + var DecompIterator = function(it){ + this.it = it; + this.resBuf = []; + }; + + DecompIterator.prototype.next = function(){ + var cc; + if(this.resBuf.length === 0){ + do{ + var uchar = this.it.next(); + if(!uchar){ + break; + } + cc = uchar.getCanonicalClass(); + var inspt = this.resBuf.length; + if(cc !== 0){ + for(; inspt > 0; --inspt){ + var uchar2 = this.resBuf[inspt - 1]; + var cc2 = uchar2.getCanonicalClass(); + if(cc2 <= cc){ + break; + } + } + } + this.resBuf.splice(inspt, 0, uchar); + } while(cc !== 0); + } + return this.resBuf.shift(); + }; + + var CompIterator = function(it){ + this.it = it; + this.procBuf = []; + this.resBuf = []; + this.lastClass = null; + }; + + CompIterator.prototype.next = function(){ + while(this.resBuf.length === 0){ + var uchar = this.it.next(); + if(!uchar){ + this.resBuf = this.procBuf; + this.procBuf = []; + break; + } + if(this.procBuf.length === 0){ + this.lastClass = uchar.getCanonicalClass(); + this.procBuf.push(uchar); + } else { + var starter = this.procBuf[0]; + var composite = starter.getComposite(uchar); + var cc = uchar.getCanonicalClass(); + if(!!composite && (this.lastClass < cc || this.lastClass === 0)){ + this.procBuf[0] = composite; + } else { + if(cc === 0){ + this.resBuf = this.procBuf; + this.procBuf = []; + } + this.lastClass = cc; + this.procBuf.push(uchar); + } + } + } + return this.resBuf.shift(); + }; + + var createIterator = function(mode, str){ + switch(mode){ + case "NFD": + return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)); + case "NFKD": + return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)); + case "NFC": + return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true))); + case "NFKC": + return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false))); + } + throw mode + " is invalid"; + }; + var normalize = function(mode, str){ + var it = createIterator(mode, str); + var ret = ""; + var uchar; + while(!!(uchar = it.next())){ + ret += uchar.toString(); + } + return ret; + }; + + /* API functions */ + function nfd(str){ + return normalize("NFD", str); + } + + function nfkd(str){ + return normalize("NFKD", str); + } + + function nfc(str){ + return normalize("NFC", str); + } + + function nfkc(str){ + return normalize("NFKC", str); + } + +/* Unicode data */ +UChar.udata={ +0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]}, +256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]}, +512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]}, +768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]}, +1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]}, +1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]}, +1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]}, +1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]}, +2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]}, +2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]}, +2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]}, +2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]}, +3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]}, +3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]}, +3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]}, +3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]}, +4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]}, +4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]}, +4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]}, +4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]}, +5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]}, +5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]}, +5632:{71231:[,9],71350:[,9],71351:[,7]}, +5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]}, +6144:{6313:[,228]}, +6400:{6457:[,222],6458:[,230],6459:[,220]}, +6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]}, +6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]}, +7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]}, +7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]}, +7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]}, +7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]}, +8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]}, +8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]}, +8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]}, +8960:{9001:[[12296]],9002:[[12297]]}, +9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]}, +10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]}, +11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]}, +11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]}, +11776:{11935:[[27597],256],12019:[[40863],256]}, +12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]}, +12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]}, +12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]}, +12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]}, +13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]}, +27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]}, +27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]}, +42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]}, +42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]}, +43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]}, +43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]}, +43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]}, +43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]}, +48128:{113822:[,1]}, +53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]}, +53760:{119362:[,230],119363:[,230],119364:[,230]}, +54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]}, +54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]}, +54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]}, +55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]}, +59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]}, +60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]}, +61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]}, +61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]}, +63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]}, +63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]}, +64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]}, +64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]}, +64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]}, +64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]}, +65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]}, +65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]} + +}; + + /***** Module to export */ + var unorm = { + nfc: nfc, + nfd: nfd, + nfkc: nfkc, + nfkd: nfkd + }; + + /*globals module:true,define:true*/ + + // CommonJS + if (typeof module === "object") { + module.exports = unorm; + + // AMD + } else if (typeof define === "function" && define.amd) { + define("unorm", function () { + return unorm; + }); + + // Global + } else { + root.unorm = unorm; + } + + /***** Export as shim for String::normalize method *****/ + /* + http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21 + + 21.1.3.12 String.prototype.normalize(form="NFC") + When the normalize method is called with one argument form, the following steps are taken: + + 1. Let O be CheckObjectCoercible(this value). + 2. Let S be ToString(O). + 3. ReturnIfAbrupt(S). + 4. If form is not provided or undefined let form be "NFC". + 5. Let f be ToString(form). + 6. ReturnIfAbrupt(f). + 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception. + 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms. + 9. Return ns. + + The length property of the normalize method is 0. + + *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method. + */ + unorm.shimApplied = false; + + if (!String.prototype.normalize) { + String.prototype.normalize = function(form) { + var str = "" + this; + form = form === undefined ? "NFC" : form; + + if (form === "NFC") { + return unorm.nfc(str); + } else if (form === "NFD") { + return unorm.nfd(str); + } else if (form === "NFKC") { + return unorm.nfkc(str); + } else if (form === "NFKD") { + return unorm.nfkd(str); + } else { + throw new RangeError("Invalid normalization form: " + form); + } + }; + + unorm.shimApplied = true; + } +}(this)); diff --git a/platforms/android/cordova/node_modules/unorm/package.json b/platforms/android/cordova/node_modules/unorm/package.json new file mode 100644 index 0000000..ca5fd67 --- /dev/null +++ b/platforms/android/cordova/node_modules/unorm/package.json @@ -0,0 +1,95 @@ +{ + "_args": [ + [ + "unorm@^1.3.3", + "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common" + ] + ], + "_from": "unorm@>=1.3.3 <2.0.0", + "_id": "unorm@1.4.1", + "_inCache": true, + "_installable": true, + "_location": "/unorm", + "_npmUser": { + "email": "bwp@bwp.dk", + "name": "walling" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "name": "unorm", + "raw": "unorm@^1.3.3", + "rawSpec": "^1.3.3", + "scope": null, + "spec": ">=1.3.3 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/cordova-common" + ], + "_resolved": "http://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", + "_shasum": "364200d5f13646ca8bcd44490271335614792300", + "_shrinkwrap": null, + "_spec": "unorm@^1.3.3", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/cordova-common", + "author": { + "email": "bwp@bwp.dk", + "name": "Bjarke Walling" + }, + "bugs": { + "url": "https://github.com/walling/unorm/issues" + }, + "contributors": [ + { + "name": "Bjarke Walling", + "email": "bwp@bwp.dk" + }, + { + "name": "Oleg Grenrus", + "email": "oleg.grenrus@iki.fi" + }, + { + "name": "Matsuza", + "email": "matsuza@gmail.com" + } + ], + "dependencies": {}, + "description": "JavaScript Unicode 8.0 Normalization - NFC, NFD, NFKC, NFKD. Read UAX #15 Unicode Normalization Forms.", + "devDependencies": { + "benchmark": "~1.0.0", + "grunt": "~0.4.1", + "grunt-contrib-jshint": "~0.8.0", + "grunt-contrib-watch": "~0.5.0", + "grunt-simple-mocha": "~0.4.0", + "unorm": "1.4.1" + }, + "directories": {}, + "dist": { + "shasum": "364200d5f13646ca8bcd44490271335614792300", + "tarball": "http://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz" + }, + "engines": { + "node": ">= 0.4.0" + }, + "gitHead": "e802d0d7844cf74b03742bce1147a82ace218396", + "homepage": "https://github.com/walling/unorm", + "license": "MIT or GPL-2.0", + "main": "./lib/unorm.js", + "maintainers": [ + { + "name": "walling", + "email": "bwp@bwp.dk" + } + ], + "name": "unorm", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/walling/unorm.git" + }, + "scripts": { + "test": "grunt test" + }, + "version": "1.4.1" +} diff --git a/platforms/android/cordova/node_modules/util-deprecate/History.md b/platforms/android/cordova/node_modules/util-deprecate/History.md new file mode 100644 index 0000000..acc8675 --- /dev/null +++ b/platforms/android/cordova/node_modules/util-deprecate/History.md @@ -0,0 +1,16 @@ + +1.0.2 / 2015-10-07 +================== + + * use try/catch when checking `localStorage` (#3, @kumavis) + +1.0.1 / 2014-11-25 +================== + + * browser: use `console.warn()` for deprecation calls + * browser: more jsdocs + +1.0.0 / 2014-04-30 +================== + + * initial commit diff --git a/platforms/android/cordova/node_modules/util-deprecate/LICENSE b/platforms/android/cordova/node_modules/util-deprecate/LICENSE new file mode 100644 index 0000000..6a60e8c --- /dev/null +++ b/platforms/android/cordova/node_modules/util-deprecate/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/util-deprecate/README.md b/platforms/android/cordova/node_modules/util-deprecate/README.md new file mode 100644 index 0000000..75622fa --- /dev/null +++ b/platforms/android/cordova/node_modules/util-deprecate/README.md @@ -0,0 +1,53 @@ +util-deprecate +============== +### The Node.js `util.deprecate()` function with browser support + +In Node.js, this module simply re-exports the `util.deprecate()` function. + +In the web browser (i.e. via browserify), a browser-specific implementation +of the `util.deprecate()` function is used. + + +## API + +A `deprecate()` function is the only thing exposed by this module. + +``` javascript +// setup: +exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead'); + + +// users see: +foo(); +// foo() is deprecated, use bar() instead +foo(); +foo(); +``` + + +## License + +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/util-deprecate/browser.js b/platforms/android/cordova/node_modules/util-deprecate/browser.js new file mode 100644 index 0000000..549ae2f --- /dev/null +++ b/platforms/android/cordova/node_modules/util-deprecate/browser.js @@ -0,0 +1,67 @@ + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} diff --git a/platforms/android/cordova/node_modules/util-deprecate/node.js b/platforms/android/cordova/node_modules/util-deprecate/node.js new file mode 100644 index 0000000..5e6fcff --- /dev/null +++ b/platforms/android/cordova/node_modules/util-deprecate/node.js @@ -0,0 +1,6 @@ + +/** + * For Node.js, simply re-export the core `util.deprecate` function. + */ + +module.exports = require('util').deprecate; diff --git a/platforms/android/cordova/node_modules/util-deprecate/package.json b/platforms/android/cordova/node_modules/util-deprecate/package.json new file mode 100644 index 0000000..4ad9893 --- /dev/null +++ b/platforms/android/cordova/node_modules/util-deprecate/package.json @@ -0,0 +1,81 @@ +{ + "_args": [ + [ + "util-deprecate@1.0.2", + "/Users/steveng/repo/cordova/cordova-android/node_modules/plist" + ] + ], + "_from": "util-deprecate@1.0.2", + "_id": "util-deprecate@1.0.2", + "_inCache": true, + "_installable": true, + "_location": "/util-deprecate", + "_nodeVersion": "4.1.2", + "_npmUser": { + "email": "nathan@tootallnate.net", + "name": "tootallnate" + }, + "_npmVersion": "2.14.4", + "_phantomChildren": {}, + "_requested": { + "name": "util-deprecate", + "raw": "util-deprecate@1.0.2", + "rawSpec": "1.0.2", + "scope": null, + "spec": "1.0.2", + "type": "version" + }, + "_requiredBy": [ + "/plist" + ], + "_resolved": "http://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "_shrinkwrap": null, + "_spec": "util-deprecate@1.0.2", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/plist", + "author": { + "email": "nathan@tootallnate.net", + "name": "Nathan Rajlich", + "url": "http://n8.io/" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/TooTallNate/util-deprecate/issues" + }, + "dependencies": {}, + "description": "The Node.js `util.deprecate()` function with browser support", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "tarball": "http://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + }, + "gitHead": "475fb6857cd23fafff20c1be846c1350abf8e6d4", + "homepage": "https://github.com/TooTallNate/util-deprecate", + "keywords": [ + "browser", + "browserify", + "deprecate", + "node", + "util" + ], + "license": "MIT", + "main": "node.js", + "maintainers": [ + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + } + ], + "name": "util-deprecate", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/util-deprecate.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "version": "1.0.2" +} diff --git a/platforms/android/cordova/node_modules/which/README.md b/platforms/android/cordova/node_modules/which/README.md deleted file mode 100644 index ff1eb53..0000000 --- a/platforms/android/cordova/node_modules/which/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The "which" util from npm's guts. - -Finds the first instance of a specified executable in the PATH -environment variable. Does not cache the results, so `hash -r` is not -needed when the PATH changes. diff --git a/platforms/android/cordova/node_modules/which/bin/which b/platforms/android/cordova/node_modules/which/bin/which deleted file mode 100755 index 8432ce2..0000000 --- a/platforms/android/cordova/node_modules/which/bin/which +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env node -var which = require("../") -if (process.argv.length < 3) { - console.error("Usage: which ") - process.exit(1) -} - -which(process.argv[2], function (er, thing) { - if (er) { - console.error(er.message) - process.exit(er.errno || 127) - } - console.log(thing) -}) diff --git a/platforms/android/cordova/node_modules/which/package.json b/platforms/android/cordova/node_modules/which/package.json deleted file mode 100644 index 6c5ccb3..0000000 --- a/platforms/android/cordova/node_modules/which/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "which", - "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", - "version": "1.0.5", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-which.git" - }, - "main": "which.js", - "bin": { - "which": "./bin/which" - }, - "engines": { - "node": "*" - }, - "dependencies": {}, - "devDependencies": {}, - "readme": "The \"which\" util from npm's guts.\n\nFinds the first instance of a specified executable in the PATH\nenvironment variable. Does not cache the results, so `hash -r` is not\nneeded when the PATH changes.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/node-which/issues" - }, - "homepage": "https://github.com/isaacs/node-which", - "_id": "which@1.0.5", - "_from": "which@" -} diff --git a/platforms/android/cordova/node_modules/which/which.js b/platforms/android/cordova/node_modules/which/which.js deleted file mode 100644 index db7e8f7..0000000 --- a/platforms/android/cordova/node_modules/which/which.js +++ /dev/null @@ -1,104 +0,0 @@ -module.exports = which -which.sync = whichSync - -var path = require("path") - , fs - , COLON = process.platform === "win32" ? ";" : ":" - , isExe - -try { - fs = require("graceful-fs") -} catch (ex) { - fs = require("fs") -} - -if (process.platform == "win32") { - // On windows, there is no good way to check that a file is executable - isExe = function isExe () { return true } -} else { - isExe = function isExe (mod, uid, gid) { - //console.error(mod, uid, gid); - //console.error("isExe?", (mod & 0111).toString(8)) - var ret = (mod & 0001) - || (mod & 0010) && process.getgid && gid === process.getgid() - || (mod & 0100) && process.getuid && uid === process.getuid() - //console.error("isExe?", ret) - return ret - } -} - - - -function which (cmd, cb) { - if (isAbsolute(cmd)) return cb(null, cmd) - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - //console.error("pathEnv", pathEnv) - ;(function F (i, l) { - if (i === l) return cb(new Error("not found: "+cmd)) - var p = path.resolve(pathEnv[i], cmd) - ;(function E (ii, ll) { - if (ii === ll) return F(i + 1, l) - var ext = pathExt[ii] - //console.error(p + ext) - fs.stat(p + ext, function (er, stat) { - if (!er && - stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) { - //console.error("yes, exe!", p + ext) - return cb(null, p + ext) - } - return E(ii + 1, ll) - }) - })(0, pathExt.length) - })(0, pathEnv.length) -} - -function whichSync (cmd) { - if (isAbsolute(cmd)) return cmd - var pathEnv = (process.env.PATH || "").split(COLON) - , pathExt = [""] - if (process.platform === "win32") { - pathEnv.push(process.cwd()) - pathExt = (process.env.PATHEXT || ".EXE").split(COLON) - if (cmd.indexOf(".") !== -1) pathExt.unshift("") - } - for (var i = 0, l = pathEnv.length; i < l; i ++) { - var p = path.join(pathEnv[i], cmd) - for (var j = 0, ll = pathExt.length; j < ll; j ++) { - var cur = p + pathExt[j] - var stat - try { stat = fs.statSync(cur) } catch (ex) {} - if (stat && - stat.isFile() && - isExe(stat.mode, stat.uid, stat.gid)) return cur - } - } - throw new Error("not found: "+cmd) -} - -var isAbsolute = process.platform === "win32" ? absWin : absUnix - -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute - - return isAbsolute -} - -function absUnix (p) { - return p.charAt(0) === "/" || p === "" -} diff --git a/platforms/android/cordova/node_modules/wrappy/LICENSE b/platforms/android/cordova/node_modules/wrappy/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/platforms/android/cordova/node_modules/wrappy/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/cordova/node_modules/wrappy/README.md b/platforms/android/cordova/node_modules/wrappy/README.md new file mode 100644 index 0000000..98eab25 --- /dev/null +++ b/platforms/android/cordova/node_modules/wrappy/README.md @@ -0,0 +1,36 @@ +# wrappy + +Callback wrapping utility + +## USAGE + +```javascript +var wrappy = require("wrappy") + +// var wrapper = wrappy(wrapperFunction) + +// make sure a cb is called only once +// See also: http://npm.im/once for this specific use case +var once = wrappy(function (cb) { + var called = false + return function () { + if (called) return + called = true + return cb.apply(this, arguments) + } +}) + +function printBoo () { + console.log('boo') +} +// has some rando property +printBoo.iAmBooPrinter = true + +var onlyPrintOnce = once(printBoo) + +onlyPrintOnce() // prints 'boo' +onlyPrintOnce() // does nothing + +// random property is retained! +assert.equal(onlyPrintOnce.iAmBooPrinter, true) +``` diff --git a/platforms/android/cordova/node_modules/wrappy/package.json b/platforms/android/cordova/node_modules/wrappy/package.json new file mode 100644 index 0000000..35d4cc7 --- /dev/null +++ b/platforms/android/cordova/node_modules/wrappy/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + "wrappy@1", + "/Users/steveng/repo/cordova/cordova-android/node_modules/inflight" + ] + ], + "_from": "wrappy@>=1.0.0 <2.0.0", + "_id": "wrappy@1.0.1", + "_inCache": true, + "_installable": true, + "_location": "/wrappy", + "_nodeVersion": "0.10.31", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "2.0.0", + "_phantomChildren": {}, + "_requested": { + "name": "wrappy", + "raw": "wrappy@1", + "rawSpec": "1", + "scope": null, + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/inflight", + "/once" + ], + "_resolved": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz", + "_shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739", + "_shrinkwrap": null, + "_spec": "wrappy@1", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/inflight", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/npm/wrappy/issues" + }, + "dependencies": {}, + "description": "Callback wrapping utility", + "devDependencies": { + "tap": "^0.4.12" + }, + "directories": { + "test": "test" + }, + "dist": { + "shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739", + "tarball": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + }, + "gitHead": "006a8cbac6b99988315834c207896eed71fd069a", + "homepage": "https://github.com/npm/wrappy", + "license": "ISC", + "main": "wrappy.js", + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "name": "wrappy", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/wrappy.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "1.0.1" +} diff --git a/platforms/android/cordova/node_modules/wrappy/test/basic.js b/platforms/android/cordova/node_modules/wrappy/test/basic.js new file mode 100644 index 0000000..5ed0fcd --- /dev/null +++ b/platforms/android/cordova/node_modules/wrappy/test/basic.js @@ -0,0 +1,51 @@ +var test = require('tap').test +var wrappy = require('../wrappy.js') + +test('basic', function (t) { + function onceifier (cb) { + var called = false + return function () { + if (called) return + called = true + return cb.apply(this, arguments) + } + } + onceifier.iAmOnce = {} + var once = wrappy(onceifier) + t.equal(once.iAmOnce, onceifier.iAmOnce) + + var called = 0 + function boo () { + t.equal(called, 0) + called++ + } + // has some rando property + boo.iAmBoo = true + + var onlyPrintOnce = once(boo) + + onlyPrintOnce() // prints 'boo' + onlyPrintOnce() // does nothing + t.equal(called, 1) + + // random property is retained! + t.equal(onlyPrintOnce.iAmBoo, true) + + var logs = [] + var logwrap = wrappy(function (msg, cb) { + logs.push(msg + ' wrapping cb') + return function () { + logs.push(msg + ' before cb') + var ret = cb.apply(this, arguments) + logs.push(msg + ' after cb') + } + }) + + var c = logwrap('foo', function () { + t.same(logs, [ 'foo wrapping cb', 'foo before cb' ]) + }) + c() + t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ]) + + t.end() +}) diff --git a/platforms/android/cordova/node_modules/wrappy/wrappy.js b/platforms/android/cordova/node_modules/wrappy/wrappy.js new file mode 100644 index 0000000..bb7e7d6 --- /dev/null +++ b/platforms/android/cordova/node_modules/wrappy/wrappy.js @@ -0,0 +1,33 @@ +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} diff --git a/platforms/android/cordova/node_modules/xmlbuilder/.npmignore b/platforms/android/cordova/node_modules/xmlbuilder/.npmignore new file mode 100644 index 0000000..b6ad1f6 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/.npmignore @@ -0,0 +1,5 @@ +.travis.yml +src +test +perf +coverage diff --git a/platforms/android/cordova/node_modules/xmlbuilder/LICENSE b/platforms/android/cordova/node_modules/xmlbuilder/LICENSE new file mode 100644 index 0000000..e7cbac9 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Ozgur Ozcitak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/platforms/android/cordova/node_modules/xmlbuilder/README.md b/platforms/android/cordova/node_modules/xmlbuilder/README.md new file mode 100644 index 0000000..13a5b12 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/README.md @@ -0,0 +1,86 @@ +# xmlbuilder-js + +An XML builder for [node.js](https://nodejs.org/) similar to +[java-xmlbuilder](https://github.com/jmurty/java-xmlbuilder). + +[![License](http://img.shields.io/npm/l/xmlbuilder.svg?style=flat-square)](http://opensource.org/licenses/MIT) +[![NPM Version](http://img.shields.io/npm/v/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder) +[![NPM Downloads](https://img.shields.io/npm/dm/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder) + +[![Build Status](http://img.shields.io/travis/oozcitak/xmlbuilder-js.svg?style=flat-square)](http://travis-ci.org/oozcitak/xmlbuilder-js) +[![Dependency Status](http://img.shields.io/david/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js) +[![Dev Dependency Status](http://img.shields.io/david/dev/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js) +[![Code Coverage](https://img.shields.io/coveralls/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://coveralls.io/github/oozcitak/xmlbuilder-js) + +### Installation: + +``` sh +npm install xmlbuilder +``` + +### Usage: + +``` js +var builder = require('xmlbuilder'); +var xml = builder.create('root') + .ele('xmlbuilder') + .ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git') + .end({ pretty: true}); + +console.log(xml); +``` + +will result in: + +``` xml + + + + git://github.com/oozcitak/xmlbuilder-js.git + + +``` + +It is also possible to convert objects into nodes: + +``` js +builder.create({ + root: { + xmlbuilder: { + repo: { + '@type': 'git', // attributes start with @ + '#text': 'git://github.com/oozcitak/xmlbuilder-js.git' // text node + } + } + } +}); +``` + +If you need to do some processing: + +``` js +var root = builder.create('squares'); +root.com('f(x) = x^2'); +for(var i = 1; i <= 5; i++) +{ + var item = root.ele('data'); + item.att('x', i); + item.att('y', i * i); +} +``` + +This will result in: + +``` xml + + + + + + + + + +``` + +See the [wiki](https://github.com/oozcitak/xmlbuilder-js/wiki) for details. diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLAttribute.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLAttribute.js new file mode 100644 index 0000000..247c9d1 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLAttribute.js @@ -0,0 +1,32 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, create; + + create = require('lodash/object/create'); + + module.exports = XMLAttribute = (function() { + function XMLAttribute(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing attribute name of element " + parent.name); + } + if (value == null) { + throw new Error("Missing attribute value for attribute " + name + " of element " + parent.name); + } + this.name = this.stringify.attName(name); + this.value = this.stringify.attValue(value); + } + + XMLAttribute.prototype.clone = function() { + return create(XMLAttribute.prototype, this); + }; + + XMLAttribute.prototype.toString = function(options, level) { + return ' ' + this.name + '="' + this.value + '"'; + }; + + return XMLAttribute; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLBuilder.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLBuilder.js new file mode 100644 index 0000000..4282833 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLBuilder.js @@ -0,0 +1,69 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLBuilder, XMLDeclaration, XMLDocType, XMLElement, XMLStringifier; + + XMLStringifier = require('./XMLStringifier'); + + XMLDeclaration = require('./XMLDeclaration'); + + XMLDocType = require('./XMLDocType'); + + XMLElement = require('./XMLElement'); + + module.exports = XMLBuilder = (function() { + function XMLBuilder(name, options) { + var root, temp; + if (name == null) { + throw new Error("Root element needs a name"); + } + if (options == null) { + options = {}; + } + this.options = options; + this.stringify = new XMLStringifier(options); + temp = new XMLElement(this, 'doc'); + root = temp.element(name); + root.isRoot = true; + root.documentObject = this; + this.rootObject = root; + if (!options.headless) { + root.declaration(options); + if ((options.pubID != null) || (options.sysID != null)) { + root.doctype(options); + } + } + } + + XMLBuilder.prototype.root = function() { + return this.rootObject; + }; + + XMLBuilder.prototype.end = function(options) { + return this.toString(options); + }; + + XMLBuilder.prototype.toString = function(options) { + var indent, newline, offset, pretty, r, ref, ref1, ref2; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + r = ''; + if (this.xmldec != null) { + r += this.xmldec.toString(options); + } + if (this.doctype != null) { + r += this.doctype.toString(options); + } + r += this.rootObject.toString(options); + if (pretty && r.slice(-newline.length) === newline) { + r = r.slice(0, -newline.length); + } + return r; + }; + + return XMLBuilder; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLCData.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLCData.js new file mode 100644 index 0000000..00002f1 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLCData.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLCData = (function(superClass) { + extend(XMLCData, superClass); + + function XMLCData(parent, text) { + XMLCData.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing CDATA text"); + } + this.text = this.stringify.cdata(text); + } + + XMLCData.prototype.clone = function() { + return create(XMLCData.prototype, this); + }; + + XMLCData.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLCData; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLComment.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLComment.js new file mode 100644 index 0000000..ca23e95 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLComment.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLComment, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLComment = (function(superClass) { + extend(XMLComment, superClass); + + function XMLComment(parent, text) { + XMLComment.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing comment text"); + } + this.text = this.stringify.comment(text); + } + + XMLComment.prototype.clone = function() { + return create(XMLComment.prototype, this); + }; + + XMLComment.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLComment; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDAttList.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDAttList.js new file mode 100644 index 0000000..62e6d8a --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDAttList.js @@ -0,0 +1,68 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDAttList, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDAttList = (function() { + function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) { + this.stringify = parent.stringify; + if (elementName == null) { + throw new Error("Missing DTD element name"); + } + if (attributeName == null) { + throw new Error("Missing DTD attribute name"); + } + if (!attributeType) { + throw new Error("Missing DTD attribute type"); + } + if (!defaultValueType) { + throw new Error("Missing DTD attribute default"); + } + if (defaultValueType.indexOf('#') !== 0) { + defaultValueType = '#' + defaultValueType; + } + if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) { + throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT"); + } + if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) { + throw new Error("Default value only applies to #FIXED or #DEFAULT"); + } + this.elementName = this.stringify.eleName(elementName); + this.attributeName = this.stringify.attName(attributeName); + this.attributeType = this.stringify.dtdAttType(attributeType); + this.defaultValue = this.stringify.dtdAttDefault(defaultValue); + this.defaultValueType = defaultValueType; + } + + XMLDTDAttList.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDAttList; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDElement.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDElement.js new file mode 100644 index 0000000..2d155e2 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDElement.js @@ -0,0 +1,46 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDElement, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDElement = (function() { + function XMLDTDElement(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing DTD element name"); + } + if (!value) { + value = '(#PCDATA)'; + } + if (Array.isArray(value)) { + value = '(' + value.join(',') + ')'; + } + this.name = this.stringify.eleName(name); + this.value = this.stringify.dtdElementValue(value); + } + + XMLDTDElement.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDElement; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDEntity.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDEntity.js new file mode 100644 index 0000000..3201d19 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDEntity.js @@ -0,0 +1,84 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDEntity, create, isObject; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + module.exports = XMLDTDEntity = (function() { + function XMLDTDEntity(parent, pe, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing entity name"); + } + if (value == null) { + throw new Error("Missing entity value"); + } + this.pe = !!pe; + this.name = this.stringify.eleName(name); + if (!isObject(value)) { + this.value = this.stringify.dtdEntityValue(value); + } else { + if (!value.pubID && !value.sysID) { + throw new Error("Public and/or system identifiers are required for an external entity"); + } + if (value.pubID && !value.sysID) { + throw new Error("System identifier is required for a public external entity"); + } + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + if (value.nData != null) { + this.nData = this.stringify.dtdNData(value.nData); + } + if (this.pe && this.nData) { + throw new Error("Notation declaration is not allowed in a parameter entity"); + } + } + } + + XMLDTDEntity.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDEntity; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDNotation.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDNotation.js new file mode 100644 index 0000000..cfbccf4 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDTDNotation.js @@ -0,0 +1,56 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDNotation, create; + + create = require('lodash/object/create'); + + module.exports = XMLDTDNotation = (function() { + function XMLDTDNotation(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing notation name"); + } + if (!value.pubID && !value.sysID) { + throw new Error("Public or system identifiers are required for an external entity"); + } + this.name = this.stringify.eleName(name); + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + } + + XMLDTDNotation.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDNotation; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDeclaration.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDeclaration.js new file mode 100644 index 0000000..b2d8435 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDeclaration.js @@ -0,0 +1,65 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDeclaration, XMLNode, create, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLDeclaration = (function(superClass) { + extend(XMLDeclaration, superClass); + + function XMLDeclaration(parent, version, encoding, standalone) { + var ref; + XMLDeclaration.__super__.constructor.call(this, parent); + if (isObject(version)) { + ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone; + } + if (!version) { + version = '1.0'; + } + this.version = this.stringify.xmlVersion(version); + if (encoding != null) { + this.encoding = this.stringify.xmlEncoding(encoding); + } + if (standalone != null) { + this.standalone = this.stringify.xmlStandalone(standalone); + } + } + + XMLDeclaration.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDeclaration; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDocType.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDocType.js new file mode 100644 index 0000000..eec6f36 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLDocType.js @@ -0,0 +1,188 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLProcessingInstruction, create, isObject; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + XMLCData = require('./XMLCData'); + + XMLComment = require('./XMLComment'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLDocType = (function() { + function XMLDocType(parent, pubID, sysID) { + var ref, ref1; + this.documentObject = parent; + this.stringify = this.documentObject.stringify; + this.children = []; + if (isObject(pubID)) { + ref = pubID, pubID = ref.pubID, sysID = ref.sysID; + } + if (sysID == null) { + ref1 = [pubID, sysID], sysID = ref1[0], pubID = ref1[1]; + } + if (pubID != null) { + this.pubID = this.stringify.dtdPubID(pubID); + } + if (sysID != null) { + this.sysID = this.stringify.dtdSysID(sysID); + } + } + + XMLDocType.prototype.element = function(name, value) { + var child; + child = new XMLDTDElement(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + var child; + child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.entity = function(name, value) { + var child; + child = new XMLDTDEntity(this, false, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.pEntity = function(name, value) { + var child; + child = new XMLDTDEntity(this, true, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.notation = function(name, value) { + var child; + child = new XMLDTDNotation(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.instruction = function(target, value) { + var child; + child = new XMLProcessingInstruction(this, target, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.root = function() { + return this.documentObject.root(); + }; + + XMLDocType.prototype.document = function() { + return this.documentObject; + }; + + XMLDocType.prototype.toString = function(options, level) { + var child, i, indent, len, newline, offset, pretty, r, ref, ref1, ref2, ref3, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ' 0) { + r += ' ['; + if (pretty) { + r += newline; + } + ref3 = this.children; + for (i = 0, len = ref3.length; i < len; i++) { + child = ref3[i]; + r += child.toString(options, level + 1); + } + r += ']'; + } + r += '>'; + if (pretty) { + r += newline; + } + return r; + }; + + XMLDocType.prototype.ele = function(name, value) { + return this.element(name, value); + }; + + XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue); + }; + + XMLDocType.prototype.ent = function(name, value) { + return this.entity(name, value); + }; + + XMLDocType.prototype.pent = function(name, value) { + return this.pEntity(name, value); + }; + + XMLDocType.prototype.not = function(name, value) { + return this.notation(name, value); + }; + + XMLDocType.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLDocType.prototype.com = function(value) { + return this.comment(value); + }; + + XMLDocType.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLDocType.prototype.up = function() { + return this.root(); + }; + + XMLDocType.prototype.doc = function() { + return this.document(); + }; + + return XMLDocType; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLElement.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLElement.js new file mode 100644 index 0000000..d5814c8 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLElement.js @@ -0,0 +1,212 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, create, every, isFunction, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + isObject = require('lodash/lang/isObject'); + + isFunction = require('lodash/lang/isFunction'); + + every = require('lodash/collection/every'); + + XMLNode = require('./XMLNode'); + + XMLAttribute = require('./XMLAttribute'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLElement = (function(superClass) { + extend(XMLElement, superClass); + + function XMLElement(parent, name, attributes) { + XMLElement.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing element name"); + } + this.name = this.stringify.eleName(name); + this.children = []; + this.instructions = []; + this.attributes = {}; + if (attributes != null) { + this.attribute(attributes); + } + } + + XMLElement.prototype.clone = function() { + var att, attName, clonedSelf, i, len, pi, ref, ref1; + clonedSelf = create(XMLElement.prototype, this); + if (clonedSelf.isRoot) { + clonedSelf.documentObject = null; + } + clonedSelf.attributes = {}; + ref = this.attributes; + for (attName in ref) { + if (!hasProp.call(ref, attName)) continue; + att = ref[attName]; + clonedSelf.attributes[attName] = att.clone(); + } + clonedSelf.instructions = []; + ref1 = this.instructions; + for (i = 0, len = ref1.length; i < len; i++) { + pi = ref1[i]; + clonedSelf.instructions.push(pi.clone()); + } + clonedSelf.children = []; + this.children.forEach(function(child) { + var clonedChild; + clonedChild = child.clone(); + clonedChild.parent = clonedSelf; + return clonedSelf.children.push(clonedChild); + }); + return clonedSelf; + }; + + XMLElement.prototype.attribute = function(name, value) { + var attName, attValue; + if (name != null) { + name = name.valueOf(); + } + if (isObject(name)) { + for (attName in name) { + if (!hasProp.call(name, attName)) continue; + attValue = name[attName]; + this.attribute(attName, attValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + if (!this.options.skipNullAttributes || (value != null)) { + this.attributes[name] = new XMLAttribute(this, name, value); + } + } + return this; + }; + + XMLElement.prototype.removeAttribute = function(name) { + var attName, i, len; + if (name == null) { + throw new Error("Missing attribute name"); + } + name = name.valueOf(); + if (Array.isArray(name)) { + for (i = 0, len = name.length; i < len; i++) { + attName = name[i]; + delete this.attributes[attName]; + } + } else { + delete this.attributes[name]; + } + return this; + }; + + XMLElement.prototype.instruction = function(target, value) { + var i, insTarget, insValue, instruction, len; + if (target != null) { + target = target.valueOf(); + } + if (value != null) { + value = value.valueOf(); + } + if (Array.isArray(target)) { + for (i = 0, len = target.length; i < len; i++) { + insTarget = target[i]; + this.instruction(insTarget); + } + } else if (isObject(target)) { + for (insTarget in target) { + if (!hasProp.call(target, insTarget)) continue; + insValue = target[insTarget]; + this.instruction(insTarget, insValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + instruction = new XMLProcessingInstruction(this, target, value); + this.instructions.push(instruction); + } + return this; + }; + + XMLElement.prototype.toString = function(options, level) { + var att, child, i, indent, instruction, j, len, len1, name, newline, offset, pretty, r, ref, ref1, ref2, ref3, ref4, ref5, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + ref3 = this.instructions; + for (i = 0, len = ref3.length; i < len; i++) { + instruction = ref3[i]; + r += instruction.toString(options, level); + } + if (pretty) { + r += space; + } + r += '<' + this.name; + ref4 = this.attributes; + for (name in ref4) { + if (!hasProp.call(ref4, name)) continue; + att = ref4[name]; + r += att.toString(options); + } + if (this.children.length === 0 || every(this.children, function(e) { + return e.value === ''; + })) { + r += '/>'; + if (pretty) { + r += newline; + } + } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) { + r += '>'; + r += this.children[0].value; + r += ''; + r += newline; + } else { + r += '>'; + if (pretty) { + r += newline; + } + ref5 = this.children; + for (j = 0, len1 = ref5.length; j < len1; j++) { + child = ref5[j]; + r += child.toString(options, level + 1); + } + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + } + return r; + }; + + XMLElement.prototype.att = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLElement.prototype.a = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.i = function(target, value) { + return this.instruction(target, value); + }; + + return XMLElement; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLNode.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLNode.js new file mode 100644 index 0000000..592545a --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLNode.js @@ -0,0 +1,331 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLElement, XMLNode, XMLRaw, XMLText, isEmpty, isFunction, isObject, + hasProp = {}.hasOwnProperty; + + isObject = require('lodash/lang/isObject'); + + isFunction = require('lodash/lang/isFunction'); + + isEmpty = require('lodash/lang/isEmpty'); + + XMLElement = null; + + XMLCData = null; + + XMLComment = null; + + XMLDeclaration = null; + + XMLDocType = null; + + XMLRaw = null; + + XMLText = null; + + module.exports = XMLNode = (function() { + function XMLNode(parent) { + this.parent = parent; + this.options = this.parent.options; + this.stringify = this.parent.stringify; + if (XMLElement === null) { + XMLElement = require('./XMLElement'); + XMLCData = require('./XMLCData'); + XMLComment = require('./XMLComment'); + XMLDeclaration = require('./XMLDeclaration'); + XMLDocType = require('./XMLDocType'); + XMLRaw = require('./XMLRaw'); + XMLText = require('./XMLText'); + } + } + + XMLNode.prototype.element = function(name, attributes, text) { + var childNode, item, j, k, key, lastChild, len, len1, ref, val; + lastChild = null; + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + if (name != null) { + name = name.valueOf(); + } + if (Array.isArray(name)) { + for (j = 0, len = name.length; j < len; j++) { + item = name[j]; + lastChild = this.element(item); + } + } else if (isFunction(name)) { + lastChild = this.element(name.apply()); + } else if (isObject(name)) { + for (key in name) { + if (!hasProp.call(name, key)) continue; + val = name[key]; + if (isFunction(val)) { + val = val.apply(); + } + if ((isObject(val)) && (isEmpty(val))) { + val = null; + } + if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) { + lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val); + } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) { + lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val); + } else if (Array.isArray(val)) { + for (k = 0, len1 = val.length; k < len1; k++) { + item = val[k]; + childNode = {}; + childNode[key] = item; + lastChild = this.element(childNode); + } + } else if (isObject(val)) { + lastChild = this.element(key); + lastChild.element(val); + } else { + lastChild = this.element(key, val); + } + } + } else { + if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) { + lastChild = this.text(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) { + lastChild = this.cdata(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) { + lastChild = this.comment(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) { + lastChild = this.raw(text); + } else { + lastChild = this.node(name, attributes, text); + } + } + if (lastChild == null) { + throw new Error("Could not create any elements with: " + name); + } + return lastChild; + }; + + XMLNode.prototype.insertBefore = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.insertAfter = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i + 1); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.remove = function() { + var i, ref; + if (this.isRoot) { + throw new Error("Cannot remove the root element"); + } + i = this.parent.children.indexOf(this); + [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref = [])), ref; + return this.parent; + }; + + XMLNode.prototype.node = function(name, attributes, text) { + var child, ref; + if (name != null) { + name = name.valueOf(); + } + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + child = new XMLElement(this, name, attributes); + if (text != null) { + child.text(text); + } + this.children.push(child); + return child; + }; + + XMLNode.prototype.text = function(value) { + var child; + child = new XMLText(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.raw = function(value) { + var child; + child = new XMLRaw(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.declaration = function(version, encoding, standalone) { + var doc, xmldec; + doc = this.document(); + xmldec = new XMLDeclaration(doc, version, encoding, standalone); + doc.xmldec = xmldec; + return doc.root(); + }; + + XMLNode.prototype.doctype = function(pubID, sysID) { + var doc, doctype; + doc = this.document(); + doctype = new XMLDocType(doc, pubID, sysID); + doc.doctype = doctype; + return doctype; + }; + + XMLNode.prototype.up = function() { + if (this.isRoot) { + throw new Error("The root node has no parent. Use doc() if you need to get the document object."); + } + return this.parent; + }; + + XMLNode.prototype.root = function() { + var child; + if (this.isRoot) { + return this; + } + child = this.parent; + while (!child.isRoot) { + child = child.parent; + } + return child; + }; + + XMLNode.prototype.document = function() { + return this.root().documentObject; + }; + + XMLNode.prototype.end = function(options) { + return this.document().toString(options); + }; + + XMLNode.prototype.prev = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i < 1) { + throw new Error("Already at the first node"); + } + return this.parent.children[i - 1]; + }; + + XMLNode.prototype.next = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i === -1 || i === this.parent.children.length - 1) { + throw new Error("Already at the last node"); + } + return this.parent.children[i + 1]; + }; + + XMLNode.prototype.importXMLBuilder = function(xmlbuilder) { + var clonedRoot; + clonedRoot = xmlbuilder.root().clone(); + clonedRoot.parent = this; + clonedRoot.isRoot = false; + this.children.push(clonedRoot); + return this; + }; + + XMLNode.prototype.ele = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.nod = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.txt = function(value) { + return this.text(value); + }; + + XMLNode.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.com = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.doc = function() { + return this.document(); + }; + + XMLNode.prototype.dec = function(version, encoding, standalone) { + return this.declaration(version, encoding, standalone); + }; + + XMLNode.prototype.dtd = function(pubID, sysID) { + return this.doctype(pubID, sysID); + }; + + XMLNode.prototype.e = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.n = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.t = function(value) { + return this.text(value); + }; + + XMLNode.prototype.d = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.c = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.r = function(value) { + return this.raw(value); + }; + + XMLNode.prototype.u = function() { + return this.up(); + }; + + return XMLNode; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js new file mode 100644 index 0000000..f5d8c6c --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js @@ -0,0 +1,51 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLProcessingInstruction, create; + + create = require('lodash/object/create'); + + module.exports = XMLProcessingInstruction = (function() { + function XMLProcessingInstruction(parent, target, value) { + this.stringify = parent.stringify; + if (target == null) { + throw new Error("Missing instruction target"); + } + this.target = this.stringify.insTarget(target); + if (value) { + this.value = this.stringify.insValue(value); + } + } + + XMLProcessingInstruction.prototype.clone = function() { + return create(XMLProcessingInstruction.prototype, this); + }; + + XMLProcessingInstruction.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLProcessingInstruction; + + })(); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLRaw.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLRaw.js new file mode 100644 index 0000000..499d0e2 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLRaw.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLNode, XMLRaw, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/object/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLRaw = (function(superClass) { + extend(XMLRaw, superClass); + + function XMLRaw(parent, text) { + XMLRaw.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing raw text"); + } + this.value = this.stringify.raw(text); + } + + XMLRaw.prototype.clone = function() { + return create(XMLRaw.prototype, this); + }; + + XMLRaw.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += this.value; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLRaw; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLStringifier.js b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLStringifier.js new file mode 100644 index 0000000..f0ab1fc --- /dev/null +++ b/platforms/android/cordova/node_modules/xmlbuilder/lib/XMLStringifier.js @@ -0,0 +1,165 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLStringifier, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + hasProp = {}.hasOwnProperty; + + module.exports = XMLStringifier = (function() { + function XMLStringifier(options) { + this.assertLegalChar = bind(this.assertLegalChar, this); + var key, ref, value; + this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0; + ref = (options != null ? options.stringify : void 0) || {}; + for (key in ref) { + if (!hasProp.call(ref, key)) continue; + value = ref[key]; + this[key] = value; + } + } + + XMLStringifier.prototype.eleName = function(val) { + val = '' + val || ''; + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.eleText = function(val) { + val = '' + val || ''; + return this.assertLegalChar(this.elEscape(val)); + }; + + XMLStringifier.prototype.cdata = function(val) { + val = '' + val || ''; + if (val.match(/]]>/)) { + throw new Error("Invalid CDATA text: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.comment = function(val) { + val = '' + val || ''; + if (val.match(/--/)) { + throw new Error("Comment text cannot contain double-hypen: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.raw = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attName = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attValue = function(val) { + val = '' + val || ''; + return this.attEscape(val); + }; + + XMLStringifier.prototype.insTarget = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.insValue = function(val) { + val = '' + val || ''; + if (val.match(/\?>/)) { + throw new Error("Invalid processing instruction value: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlVersion = function(val) { + val = '' + val || ''; + if (!val.match(/1\.[0-9]+/)) { + throw new Error("Invalid version number: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlEncoding = function(val) { + val = '' + val || ''; + if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-]|-)*$/)) { + throw new Error("Invalid encoding: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlStandalone = function(val) { + if (val) { + return "yes"; + } else { + return "no"; + } + }; + + XMLStringifier.prototype.dtdPubID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdSysID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdElementValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttType = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttDefault = function(val) { + if (val != null) { + return '' + val || ''; + } else { + return val; + } + }; + + XMLStringifier.prototype.dtdEntityValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdNData = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.convertAttKey = '@'; + + XMLStringifier.prototype.convertPIKey = '?'; + + XMLStringifier.prototype.convertTextKey = '#text'; + + XMLStringifier.prototype.convertCDataKey = '#cdata'; + + XMLStringifier.prototype.convertCommentKey = '#comment'; + + XMLStringifier.prototype.convertRawKey = '#raw'; + + XMLStringifier.prototype.assertLegalChar = function(str) { + var chars, chr; + if (this.allowSurrogateChars) { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/; + } else { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/; + } + chr = str.match(chars); + if (chr) { + throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index); + } + return str; + }; + + XMLStringifier.prototype.elEscape = function(str) { + return str.replace(/&/g, '&').replace(//g, '>').replace(/\r/g, ' '); + }; + + XMLStringifier.prototype.attEscape = function(str) { + return str.replace(/&/g, '&').replace(/=0.8.0" + }, + "gitHead": "ec17840a6705ef666b7d04c771de11df6091fff5", + "homepage": "http://github.com/oozcitak/xmlbuilder-js", + "keywords": [ + "xml", + "xmlbuilder" + ], + "license": "MIT", + "main": "./lib/index", + "maintainers": [ + { + "name": "oozcitak", + "email": "oozcitak@gmail.com" + } + ], + "name": "xmlbuilder", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/oozcitak/xmlbuilder-js.git" + }, + "scripts": { + "postpublish": "rm -rf lib", + "prepublish": "coffee -co lib src", + "test": "mocha && istanbul report text lcov" + }, + "version": "4.0.0" +} diff --git a/platforms/android/cordova/node_modules/xmldom/.npmignore b/platforms/android/cordova/node_modules/xmldom/.npmignore new file mode 100644 index 0000000..b094a44 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/.npmignore @@ -0,0 +1,5 @@ +test +t +travis.yml +.project +changelog diff --git a/platforms/android/cordova/node_modules/xmldom/.travis.yml b/platforms/android/cordova/node_modules/xmldom/.travis.yml new file mode 100644 index 0000000..b95408e --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/.travis.yml @@ -0,0 +1,22 @@ +language: node_js + +node_js: + - '0.10' + +branches: + only: + - master + - proof + - travis-ci + +# Not using `npm install --dev` because it is recursive. It will pull in the all +# development dependencies for CoffeeScript. Way too much spew in the Travis CI +# build output. + +before_install: + - npm install + - npm install istanbul coveralls + +env: + global: + - secure: "BxUHTsa1WVANLQoimilbZwa1MCWSdM9hOmPWBE/rsYb7uT/iiqkRXXwnWhKtN5CLvTvIQbiAzq4iyPID0S8UHrnxClYQrOuA6QkrtwgIEuDAmijao/bgxobPOremvkwXcpMGIwzYKyYQQtSEaEIQbqf6gSSKW9dBh/GZ/vfTsqo=" diff --git a/platforms/android/cordova/node_modules/xmldom/LICENSE b/platforms/android/cordova/node_modules/xmldom/LICENSE new file mode 100644 index 0000000..68a9b5e --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/LICENSE @@ -0,0 +1,8 @@ +You can choose any one of those: + +The MIT License (MIT): + +link:http://opensource.org/licenses/MIT + +LGPL: +http://www.gnu.org/licenses/lgpl.html diff --git a/platforms/android/cordova/node_modules/xmldom/__package__.js b/platforms/android/cordova/node_modules/xmldom/__package__.js new file mode 100644 index 0000000..b4cad28 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/__package__.js @@ -0,0 +1,4 @@ +this.addScript('dom.js',['DOMImplementation','XMLSerializer']); +this.addScript('dom-parser.js',['DOMHandler','DOMParser'], + ['DOMImplementation','XMLReader']); +this.addScript('sax.js','XMLReader'); \ No newline at end of file diff --git a/platforms/android/cordova/node_modules/xmldom/changelog b/platforms/android/cordova/node_modules/xmldom/changelog new file mode 100644 index 0000000..ab815bb --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/changelog @@ -0,0 +1,14 @@ +### Version 0.1.16 + +Sat May 4 14:58:03 UTC 2013 + + * Correctly handle multibyte Unicode greater than two byts. #57. #56. + * Initial unit testing and test coverage. #53. #46. #19. + * Create Bower `component.json` #52. + +### Version 0.1.8 + + * Add: some test case from node-o3-xml(excludes xpath support) + * Fix: remove existed attribute before setting (bug introduced in v0.1.5) + * Fix: index direct access for childNodes and any NodeList collection(not w3c standard) + * Fix: remove last child bug diff --git a/platforms/android/cordova/node_modules/xmldom/component.json b/platforms/android/cordova/node_modules/xmldom/component.json new file mode 100644 index 0000000..93b4d57 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/component.json @@ -0,0 +1,10 @@ +{ + "name": "xmldom", + "version": "0.1.15", + "main": "dom-parser.js", + "ignore": [ + "**/.*", + "node_modules", + "components" + ] +} diff --git a/platforms/android/cordova/node_modules/xmldom/dom-parser.js b/platforms/android/cordova/node_modules/xmldom/dom-parser.js new file mode 100644 index 0000000..08c2f70 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/dom-parser.js @@ -0,0 +1,249 @@ +function DOMParser(options){ + this.options = options ||{locator:{}}; + +} +DOMParser.prototype.parseFromString = function(source,mimeType){ + var options = this.options; + var sax = new XMLReader(); + var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler + var errorHandler = options.errorHandler; + var locator = options.locator; + var defaultNSMap = options.xmlns||{}; + var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"} + if(locator){ + domBuilder.setDocumentLocator(locator) + } + + sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); + sax.domBuilder = options.domBuilder || domBuilder; + if(/\/x?html?$/.test(mimeType)){ + entityMap.nbsp = '\xa0'; + entityMap.copy = '\xa9'; + defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; + } + defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace'; + if(source){ + sax.parse(source,defaultNSMap,entityMap); + }else{ + sax.errorHandler.error("invalid document source"); + } + return domBuilder.document; +} +function buildErrorHandler(errorImpl,domBuilder,locator){ + if(!errorImpl){ + if(domBuilder instanceof DOMHandler){ + return domBuilder; + } + errorImpl = domBuilder ; + } + var errorHandler = {} + var isCallback = errorImpl instanceof Function; + locator = locator||{} + function build(key){ + var fn = errorImpl[key]; + if(!fn && isCallback){ + fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; + } + errorHandler[key] = fn && function(msg){ + fn('[xmldom '+key+']\t'+msg+_locator(locator)); + }||function(){}; + } + build('warning'); + build('error'); + build('fatalError'); + return errorHandler; +} + +//console.log('#\n\n\n\n\n\n\n####') +/** + * +ContentHandler+ErrorHandler + * +LexicalHandler+EntityResolver2 + * -DeclHandler-DTDHandler + * + * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler + * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 + * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html + */ +function DOMHandler() { + this.cdata = false; +} +function position(locator,node){ + node.lineNumber = locator.lineNumber; + node.columnNumber = locator.columnNumber; +} +/** + * @see org.xml.sax.ContentHandler#startDocument + * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html + */ +DOMHandler.prototype = { + startDocument : function() { + this.document = new DOMImplementation().createDocument(null, null, null); + if (this.locator) { + this.document.documentURI = this.locator.systemId; + } + }, + startElement:function(namespaceURI, localName, qName, attrs) { + var doc = this.document; + var el = doc.createElementNS(namespaceURI, qName||localName); + var len = attrs.length; + appendElement(this, el); + this.currentElement = el; + + this.locator && position(this.locator,el) + for (var i = 0 ; i < len; i++) { + var namespaceURI = attrs.getURI(i); + var value = attrs.getValue(i); + var qName = attrs.getQName(i); + var attr = doc.createAttributeNS(namespaceURI, qName); + if( attr.getOffset){ + position(attr.getOffset(1),attr) + } + attr.value = attr.nodeValue = value; + el.setAttributeNode(attr) + } + }, + endElement:function(namespaceURI, localName, qName) { + var current = this.currentElement + var tagName = current.tagName; + this.currentElement = current.parentNode; + }, + startPrefixMapping:function(prefix, uri) { + }, + endPrefixMapping:function(prefix) { + }, + processingInstruction:function(target, data) { + var ins = this.document.createProcessingInstruction(target, data); + this.locator && position(this.locator,ins) + appendElement(this, ins); + }, + ignorableWhitespace:function(ch, start, length) { + }, + characters:function(chars, start, length) { + chars = _toString.apply(this,arguments) + //console.log(chars) + if(this.currentElement && chars){ + if (this.cdata) { + var charNode = this.document.createCDATASection(chars); + this.currentElement.appendChild(charNode); + } else { + var charNode = this.document.createTextNode(chars); + this.currentElement.appendChild(charNode); + } + this.locator && position(this.locator,charNode) + } + }, + skippedEntity:function(name) { + }, + endDocument:function() { + this.document.normalize(); + }, + setDocumentLocator:function (locator) { + if(this.locator = locator){// && !('lineNumber' in locator)){ + locator.lineNumber = 0; + } + }, + //LexicalHandler + comment:function(chars, start, length) { + chars = _toString.apply(this,arguments) + var comm = this.document.createComment(chars); + this.locator && position(this.locator,comm) + appendElement(this, comm); + }, + + startCDATA:function() { + //used in characters() methods + this.cdata = true; + }, + endCDATA:function() { + this.cdata = false; + }, + + startDTD:function(name, publicId, systemId) { + var impl = this.document.implementation; + if (impl && impl.createDocumentType) { + var dt = impl.createDocumentType(name, publicId, systemId); + this.locator && position(this.locator,dt) + appendElement(this, dt); + } + }, + /** + * @see org.xml.sax.ErrorHandler + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + warning:function(error) { + console.warn('[xmldom warning]\t'+error,_locator(this.locator)); + }, + error:function(error) { + console.error('[xmldom error]\t'+error,_locator(this.locator)); + }, + fatalError:function(error) { + console.error('[xmldom fatalError]\t'+error,_locator(this.locator)); + throw error; + } +} +function _locator(l){ + if(l){ + return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' + } +} +function _toString(chars,start,length){ + if(typeof chars == 'string'){ + return chars.substr(start,length) + }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") + if(chars.length >= start+length || start){ + return new java.lang.String(chars,start,length)+''; + } + return chars; + } +} + +/* + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html + * used method of org.xml.sax.ext.LexicalHandler: + * #comment(chars, start, length) + * #startCDATA() + * #endCDATA() + * #startDTD(name, publicId, systemId) + * + * + * IGNORED method of org.xml.sax.ext.LexicalHandler: + * #endDTD() + * #startEntity(name) + * #endEntity(name) + * + * + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html + * IGNORED method of org.xml.sax.ext.DeclHandler + * #attributeDecl(eName, aName, type, mode, value) + * #elementDecl(name, model) + * #externalEntityDecl(name, publicId, systemId) + * #internalEntityDecl(name, value) + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html + * IGNORED method of org.xml.sax.EntityResolver2 + * #resolveEntity(String name,String publicId,String baseURI,String systemId) + * #resolveEntity(publicId, systemId) + * #getExternalSubset(name, baseURI) + * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html + * IGNORED method of org.xml.sax.DTDHandler + * #notationDecl(name, publicId, systemId) {}; + * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; + */ +"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ + DOMHandler.prototype[key] = function(){return null} +}) + +/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ +function appendElement (hander,node) { + if (!hander.currentElement) { + hander.document.appendChild(node); + } else { + hander.currentElement.appendChild(node); + } +}//appendChild and setAttributeNS are preformance key + +if(typeof require == 'function'){ + var XMLReader = require('./sax').XMLReader; + var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation; + exports.XMLSerializer = require('./dom').XMLSerializer ; + exports.DOMParser = DOMParser; +} diff --git a/platforms/android/cordova/node_modules/xmldom/dom.js b/platforms/android/cordova/node_modules/xmldom/dom.js new file mode 100644 index 0000000..460a1be --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/dom.js @@ -0,0 +1,1147 @@ +/* + * DOM Level 2 + * Object DOMException + * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html + */ + +function copy(src,dest){ + for(var p in src){ + dest[p] = src[p]; + } +} +/** +^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? +^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? + */ +function _extends(Class,Super){ + var pt = Class.prototype; + if(Object.create){ + var ppt = Object.create(Super.prototype) + pt.__proto__ = ppt; + } + if(!(pt instanceof Super)){ + function t(){}; + t.prototype = Super.prototype; + t = new t(); + copy(pt,t); + Class.prototype = pt = t; + } + if(pt.constructor != Class){ + if(typeof Class != 'function'){ + console.error("unknow Class:"+Class) + } + pt.constructor = Class + } +} +var htmlns = 'http://www.w3.org/1999/xhtml' ; +// Node Types +var NodeType = {} +var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; +var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; +var TEXT_NODE = NodeType.TEXT_NODE = 3; +var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; +var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; +var ENTITY_NODE = NodeType.ENTITY_NODE = 6; +var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; +var COMMENT_NODE = NodeType.COMMENT_NODE = 8; +var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; +var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; +var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; +var NOTATION_NODE = NodeType.NOTATION_NODE = 12; + +// ExceptionCode +var ExceptionCode = {} +var ExceptionMessage = {}; +var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); +var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); +var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); +var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); +var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); +var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); +var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); +var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); +var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); +var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); +//level2 +var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); +var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); +var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); +var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); +var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); + + +function DOMException(code, message) { + if(message instanceof Error){ + var error = message; + }else{ + error = this; + Error.call(this, ExceptionMessage[code]); + this.message = ExceptionMessage[code]; + if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); + } + error.code = code; + if(message) this.message = this.message + ": " + message; + return error; +}; +DOMException.prototype = Error.prototype; +copy(ExceptionCode,DOMException) +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177 + * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live. + * The items in the NodeList are accessible via an integral index, starting from 0. + */ +function NodeList() { +}; +NodeList.prototype = { + /** + * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. + * @standard level1 + */ + length:0, + /** + * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. + * @standard level1 + * @param index unsigned long + * Index into the collection. + * @return Node + * The node at the indexth position in the NodeList, or null if that is not a valid index. + */ + item: function(index) { + return this[index] || null; + }, + toString:function(){ + for(var buf = [], i = 0;i=0){ + var lastIndex = list.length-1 + while(i0 || key == 'xmlns'){ +// return null; +// } + var i = this.length; + while(i--){ + var attr = this[i]; + if(attr.nodeName == key){ + return attr; + } + } + }, + setNamedItem: function(attr) { + var el = attr.ownerElement; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + var oldAttr = this.getNamedItem(attr.nodeName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + /* returns Node */ + setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR + var el = attr.ownerElement, oldAttr; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + + /* returns Node */ + removeNamedItem: function(key) { + var attr = this.getNamedItem(key); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + + + },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR + + //for level2 + removeNamedItemNS:function(namespaceURI,localName){ + var attr = this.getNamedItemNS(namespaceURI,localName); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + }, + getNamedItemNS: function(namespaceURI, localName) { + var i = this.length; + while(i--){ + var node = this[i]; + if(node.localName == localName && node.namespaceURI == namespaceURI){ + return node; + } + } + return null; + } +}; +/** + * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 + */ +function DOMImplementation(/* Object */ features) { + this._features = {}; + if (features) { + for (var feature in features) { + this._features = features[feature]; + } + } +}; + +DOMImplementation.prototype = { + hasFeature: function(/* string */ feature, /* string */ version) { + var versions = this._features[feature.toLowerCase()]; + if (versions && (!version || version in versions)) { + return true; + } else { + return false; + } + }, + // Introduced in DOM Level 2: + createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR + var doc = new Document(); + doc.implementation = this; + doc.childNodes = new NodeList(); + doc.doctype = doctype; + if(doctype){ + doc.appendChild(doctype); + } + if(qualifiedName){ + var root = doc.createElementNS(namespaceURI,qualifiedName); + doc.appendChild(root); + } + return doc; + }, + // Introduced in DOM Level 2: + createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR + var node = new DocumentType(); + node.name = qualifiedName; + node.nodeName = qualifiedName; + node.publicId = publicId; + node.systemId = systemId; + // Introduced in DOM Level 2: + //readonly attribute DOMString internalSubset; + + //TODO:.. + // readonly attribute NamedNodeMap entities; + // readonly attribute NamedNodeMap notations; + return node; + } +}; + + +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 + */ + +function Node() { +}; + +Node.prototype = { + firstChild : null, + lastChild : null, + previousSibling : null, + nextSibling : null, + attributes : null, + parentNode : null, + childNodes : null, + ownerDocument : null, + nodeValue : null, + namespaceURI : null, + prefix : null, + localName : null, + // Modified in DOM Level 2: + insertBefore:function(newChild, refChild){//raises + return _insertBefore(this,newChild,refChild); + }, + replaceChild:function(newChild, oldChild){//raises + this.insertBefore(newChild,oldChild); + if(oldChild){ + this.removeChild(oldChild); + } + }, + removeChild:function(oldChild){ + return _removeChild(this,oldChild); + }, + appendChild:function(newChild){ + return this.insertBefore(newChild,null); + }, + hasChildNodes:function(){ + return this.firstChild != null; + }, + cloneNode:function(deep){ + return cloneNode(this.ownerDocument||this,this,deep); + }, + // Modified in DOM Level 2: + normalize:function(){ + var child = this.firstChild; + while(child){ + var next = child.nextSibling; + if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ + this.removeChild(next); + child.appendData(next.data); + }else{ + child.normalize(); + child = next; + } + } + }, + // Introduced in DOM Level 2: + isSupported:function(feature, version){ + return this.ownerDocument.implementation.hasFeature(feature,version); + }, + // Introduced in DOM Level 2: + hasAttributes:function(){ + return this.attributes.length>0; + }, + lookupPrefix:function(namespaceURI){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + for(var n in map){ + if(map[n] == namespaceURI){ + return n; + } + } + } + el = el.nodeType == 2?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + lookupNamespaceURI:function(prefix){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + if(prefix in map){ + return map[prefix] ; + } + } + el = el.nodeType == 2?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + isDefaultNamespace:function(namespaceURI){ + var prefix = this.lookupPrefix(namespaceURI); + return prefix == null; + } +}; + + +function _xmlEncoder(c){ + return c == '<' && '<' || + c == '>' && '>' || + c == '&' && '&' || + c == '"' && '"' || + '&#'+c.charCodeAt()+';' +} + + +copy(NodeType,Node); +copy(NodeType,Node.prototype); + +/** + * @param callback return true for continue,false for break + * @return boolean true: break visit; + */ +function _visitNode(node,callback){ + if(callback(node)){ + return true; + } + if(node = node.firstChild){ + do{ + if(_visitNode(node,callback)){return true} + }while(node=node.nextSibling) + } +} + + + +function Document(){ +} +function _onAddAttribute(doc,el,newAttr){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value + } +} +function _onRemoveAttribute(doc,el,newAttr,remove){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + delete el._nsMap[newAttr.prefix?newAttr.localName:''] + } +} +function _onUpdateChild(doc,el,newChild){ + if(doc && doc._inc){ + doc._inc++; + //update childNodes + var cs = el.childNodes; + if(newChild){ + cs[cs.length++] = newChild; + }else{ + //console.log(1) + var child = el.firstChild; + var i = 0; + while(child){ + cs[i++] = child; + child =child.nextSibling; + } + cs.length = i; + } + } +} + +/** + * attributes; + * children; + * + * writeable properties: + * nodeValue,Attr:value,CharacterData:data + * prefix + */ +function _removeChild(parentNode,child){ + var previous = child.previousSibling; + var next = child.nextSibling; + if(previous){ + previous.nextSibling = next; + }else{ + parentNode.firstChild = next + } + if(next){ + next.previousSibling = previous; + }else{ + parentNode.lastChild = previous; + } + _onUpdateChild(parentNode.ownerDocument,parentNode); + return child; +} +/** + * preformance key(refChild == null) + */ +function _insertBefore(parentNode,newChild,nextChild){ + var cp = newChild.parentNode; + if(cp){ + cp.removeChild(newChild);//remove and update + } + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + var newFirst = newChild.firstChild; + if (newFirst == null) { + return newChild; + } + var newLast = newChild.lastChild; + }else{ + newFirst = newLast = newChild; + } + var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; + + newFirst.previousSibling = pre; + newLast.nextSibling = nextChild; + + + if(pre){ + pre.nextSibling = newFirst; + }else{ + parentNode.firstChild = newFirst; + } + if(nextChild == null){ + parentNode.lastChild = newLast; + }else{ + nextChild.previousSibling = newLast; + } + do{ + newFirst.parentNode = parentNode; + }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) + _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); + //console.log(parentNode.lastChild.nextSibling == null) + if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { + newChild.firstChild = newChild.lastChild = null; + } + return newChild; +} +function _appendSingleChild(parentNode,newChild){ + var cp = newChild.parentNode; + if(cp){ + var pre = parentNode.lastChild; + cp.removeChild(newChild);//remove and update + var pre = parentNode.lastChild; + } + var pre = parentNode.lastChild; + newChild.parentNode = parentNode; + newChild.previousSibling = pre; + newChild.nextSibling = null; + if(pre){ + pre.nextSibling = newChild; + }else{ + parentNode.firstChild = newChild; + } + parentNode.lastChild = newChild; + _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); + return newChild; + //console.log("__aa",parentNode.lastChild.nextSibling == null) +} +Document.prototype = { + //implementation : null, + nodeName : '#document', + nodeType : DOCUMENT_NODE, + doctype : null, + documentElement : null, + _inc : 1, + + insertBefore : function(newChild, refChild){//raises + if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ + var child = newChild.firstChild; + while(child){ + var next = child.nextSibling; + this.insertBefore(child,refChild); + child = next; + } + return newChild; + } + if(this.documentElement == null && newChild.nodeType == 1){ + this.documentElement = newChild; + } + + return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; + }, + removeChild : function(oldChild){ + if(this.documentElement == oldChild){ + this.documentElement = null; + } + return _removeChild(this,oldChild); + }, + // Introduced in DOM Level 2: + importNode : function(importedNode,deep){ + return importNode(this,importedNode,deep); + }, + // Introduced in DOM Level 2: + getElementById : function(id){ + var rtv = null; + _visitNode(this.documentElement,function(node){ + if(node.nodeType == 1){ + if(node.getAttribute('id') == id){ + rtv = node; + return true; + } + } + }) + return rtv; + }, + + //document factory method: + createElement : function(tagName){ + var node = new Element(); + node.ownerDocument = this; + node.nodeName = tagName; + node.tagName = tagName; + node.childNodes = new NodeList(); + var attrs = node.attributes = new NamedNodeMap(); + attrs._ownerElement = node; + return node; + }, + createDocumentFragment : function(){ + var node = new DocumentFragment(); + node.ownerDocument = this; + node.childNodes = new NodeList(); + return node; + }, + createTextNode : function(data){ + var node = new Text(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createComment : function(data){ + var node = new Comment(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createCDATASection : function(data){ + var node = new CDATASection(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createProcessingInstruction : function(target,data){ + var node = new ProcessingInstruction(); + node.ownerDocument = this; + node.tagName = node.target = target; + node.nodeValue= node.data = data; + return node; + }, + createAttribute : function(name){ + var node = new Attr(); + node.ownerDocument = this; + node.name = name; + node.nodeName = name; + node.localName = name; + node.specified = true; + return node; + }, + createEntityReference : function(name){ + var node = new EntityReference(); + node.ownerDocument = this; + node.nodeName = name; + return node; + }, + // Introduced in DOM Level 2: + createElementNS : function(namespaceURI,qualifiedName){ + var node = new Element(); + var pl = qualifiedName.split(':'); + var attrs = node.attributes = new NamedNodeMap(); + node.childNodes = new NodeList(); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.tagName = qualifiedName; + node.namespaceURI = namespaceURI; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + attrs._ownerElement = node; + return node; + }, + // Introduced in DOM Level 2: + createAttributeNS : function(namespaceURI,qualifiedName){ + var node = new Attr(); + var pl = qualifiedName.split(':'); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.name = qualifiedName; + node.namespaceURI = namespaceURI; + node.specified = true; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + return node; + } +}; +_extends(Document,Node); + + +function Element() { + this._nsMap = {}; +}; +Element.prototype = { + nodeType : ELEMENT_NODE, + hasAttribute : function(name){ + return this.getAttributeNode(name)!=null; + }, + getAttribute : function(name){ + var attr = this.getAttributeNode(name); + return attr && attr.value || ''; + }, + getAttributeNode : function(name){ + return this.attributes.getNamedItem(name); + }, + setAttribute : function(name, value){ + var attr = this.ownerDocument.createAttribute(name); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + removeAttribute : function(name){ + var attr = this.getAttributeNode(name) + attr && this.removeAttributeNode(attr); + }, + + //four real opeartion method + appendChild:function(newChild){ + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + return this.insertBefore(newChild,null); + }else{ + return _appendSingleChild(this,newChild); + } + }, + setAttributeNode : function(newAttr){ + return this.attributes.setNamedItem(newAttr); + }, + setAttributeNodeNS : function(newAttr){ + return this.attributes.setNamedItemNS(newAttr); + }, + removeAttributeNode : function(oldAttr){ + return this.attributes.removeNamedItem(oldAttr.nodeName); + }, + //get real attribute name,and remove it by removeAttributeNode + removeAttributeNS : function(namespaceURI, localName){ + var old = this.getAttributeNodeNS(namespaceURI, localName); + old && this.removeAttributeNode(old); + }, + + hasAttributeNS : function(namespaceURI, localName){ + return this.getAttributeNodeNS(namespaceURI, localName)!=null; + }, + getAttributeNS : function(namespaceURI, localName){ + var attr = this.getAttributeNodeNS(namespaceURI, localName); + return attr && attr.value || ''; + }, + setAttributeNS : function(namespaceURI, qualifiedName, value){ + var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + getAttributeNodeNS : function(namespaceURI, localName){ + return this.attributes.getNamedItemNS(namespaceURI, localName); + }, + + getElementsByTagName : function(tagName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ + ls.push(node); + } + }); + return ls; + }); + }, + getElementsByTagNameNS : function(namespaceURI, localName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ + ls.push(node); + } + }); + return ls; + }); + } +}; +Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; +Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; + + +_extends(Element,Node); +function Attr() { +}; +Attr.prototype.nodeType = ATTRIBUTE_NODE; +_extends(Attr,Node); + + +function CharacterData() { +}; +CharacterData.prototype = { + data : '', + substringData : function(offset, count) { + return this.data.substring(offset, offset+count); + }, + appendData: function(text) { + text = this.data+text; + this.nodeValue = this.data = text; + this.length = text.length; + }, + insertData: function(offset,text) { + this.replaceData(offset,0,text); + + }, + appendChild:function(newChild){ + //if(!(newChild instanceof CharacterData)){ + throw new Error(ExceptionMessage[3]) + //} + return Node.prototype.appendChild.apply(this,arguments) + }, + deleteData: function(offset, count) { + this.replaceData(offset,count,""); + }, + replaceData: function(offset, count, text) { + var start = this.data.substring(0,offset); + var end = this.data.substring(offset+count); + text = start + text + end; + this.nodeValue = this.data = text; + this.length = text.length; + } +} +_extends(CharacterData,Node); +function Text() { +}; +Text.prototype = { + nodeName : "#text", + nodeType : TEXT_NODE, + splitText : function(offset) { + var text = this.data; + var newText = text.substring(offset); + text = text.substring(0, offset); + this.data = this.nodeValue = text; + this.length = text.length; + var newNode = this.ownerDocument.createTextNode(newText); + if(this.parentNode){ + this.parentNode.insertBefore(newNode, this.nextSibling); + } + return newNode; + } +} +_extends(Text,CharacterData); +function Comment() { +}; +Comment.prototype = { + nodeName : "#comment", + nodeType : COMMENT_NODE +} +_extends(Comment,CharacterData); + +function CDATASection() { +}; +CDATASection.prototype = { + nodeName : "#cdata-section", + nodeType : CDATA_SECTION_NODE +} +_extends(CDATASection,CharacterData); + + +function DocumentType() { +}; +DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; +_extends(DocumentType,Node); + +function Notation() { +}; +Notation.prototype.nodeType = NOTATION_NODE; +_extends(Notation,Node); + +function Entity() { +}; +Entity.prototype.nodeType = ENTITY_NODE; +_extends(Entity,Node); + +function EntityReference() { +}; +EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; +_extends(EntityReference,Node); + +function DocumentFragment() { +}; +DocumentFragment.prototype.nodeName = "#document-fragment"; +DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; +_extends(DocumentFragment,Node); + + +function ProcessingInstruction() { +} +ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; +_extends(ProcessingInstruction,Node); +function XMLSerializer(){} +XMLSerializer.prototype.serializeToString = function(node,attributeSorter){ + return node.toString(attributeSorter); +} +Node.prototype.toString =function(attributeSorter){ + var buf = []; + serializeToString(this,buf,attributeSorter); + return buf.join(''); +} +function serializeToString(node,buf,attributeSorter,isHTML){ + switch(node.nodeType){ + case ELEMENT_NODE: + var attrs = node.attributes; + var len = attrs.length; + var child = node.firstChild; + var nodeName = node.tagName; + isHTML = (htmlns === node.namespaceURI) ||isHTML + buf.push('<',nodeName); + if(attributeSorter){ + buf.sort.apply(attrs, attributeSorter); + } + for(var i=0;i'); + //if is cdata child node + if(isHTML && /^script$/i.test(nodeName)){ + if(child){ + buf.push(child.data); + } + }else{ + while(child){ + serializeToString(child,buf,attributeSorter,isHTML); + child = child.nextSibling; + } + } + buf.push(''); + }else{ + buf.push('/>'); + } + return; + case DOCUMENT_NODE: + case DOCUMENT_FRAGMENT_NODE: + var child = node.firstChild; + while(child){ + serializeToString(child,buf,attributeSorter,isHTML); + child = child.nextSibling; + } + return; + case ATTRIBUTE_NODE: + return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); + case TEXT_NODE: + return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); + case CDATA_SECTION_NODE: + return buf.push( ''); + case COMMENT_NODE: + return buf.push( ""); + case DOCUMENT_TYPE_NODE: + var pubid = node.publicId; + var sysid = node.systemId; + buf.push(''); + }else if(sysid && sysid!='.'){ + buf.push(' SYSTEM "',sysid,'">'); + }else{ + var sub = node.internalSubset; + if(sub){ + buf.push(" [",sub,"]"); + } + buf.push(">"); + } + return; + case PROCESSING_INSTRUCTION_NODE: + return buf.push( ""); + case ENTITY_REFERENCE_NODE: + return buf.push( '&',node.nodeName,';'); + //case ENTITY_NODE: + //case NOTATION_NODE: + default: + buf.push('??',node.nodeName); + } +} +function importNode(doc,node,deep){ + var node2; + switch (node.nodeType) { + case ELEMENT_NODE: + node2 = node.cloneNode(false); + node2.ownerDocument = doc; + //var attrs = node2.attributes; + //var len = attrs.length; + //for(var i=0;i=0.1.0 <0.2.0", + "_id": "xmldom@0.1.22", + "_inCache": true, + "_installable": true, + "_location": "/xmldom", + "_nodeVersion": "5.5.0", + "_npmUser": { + "email": "jindw@xidea.org", + "name": "jindw" + }, + "_npmVersion": "3.3.12", + "_phantomChildren": {}, + "_requested": { + "name": "xmldom", + "raw": "xmldom@0.1.x", + "rawSpec": "0.1.x", + "scope": null, + "spec": ">=0.1.0 <0.2.0", + "type": "range" + }, + "_requiredBy": [ + "/plist" + ], + "_resolved": "http://registry.npmjs.org/xmldom/-/xmldom-0.1.22.tgz", + "_shasum": "10de4e5e964981f03c8cc72fadc08d14b6c3aa26", + "_shrinkwrap": null, + "_spec": "xmldom@0.1.x", + "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/plist", + "author": { + "email": "jindw@xidea.org", + "name": "jindw", + "url": "http://www.xidea.org" + }, + "bugs": { + "email": "jindw@xidea.org", + "url": "http://github.com/jindw/xmldom/issues" + }, + "contributors": [ + { + "name": "Yaron Naveh", + "email": "yaronn01@gmail.com", + "url": "http://webservices20.blogspot.com/" + }, + { + "name": "Harutyun Amirjanyan", + "email": "amirjanyan@gmail.com", + "url": "https://github.com/nightwing" + }, + { + "name": "Alan Gutierrez", + "email": "alan@prettyrobots.com", + "url": "http://www.prettyrobots.com/" + } + ], + "dependencies": {}, + "description": "A W3C Standard XML DOM(Level2 CORE) implementation and parser(DOMParser/XMLSerializer).", + "devDependencies": { + "proof": "0.0.28" + }, + "directories": {}, + "dist": { + "shasum": "10de4e5e964981f03c8cc72fadc08d14b6c3aa26", + "tarball": "http://registry.npmjs.org/xmldom/-/xmldom-0.1.22.tgz" + }, + "engines": { + "node": ">=0.1" + }, + "gitHead": "29a83b315aef56c156602286b2d884a3b4c2521f", + "homepage": "https://github.com/jindw/xmldom", + "keywords": [ + "DOMParser", + "XMLSerializer", + "dom", + "javascript", + "parser", + "w3c", + "xml" + ], + "licenses": [ + { + "type": "LGPL", + "url": "http://www.gnu.org/licenses/lgpl.html", + "MIT": "http://opensource.org/licenses/MIT" + } + ], + "main": "./dom-parser.js", + "maintainers": [ + { + "name": "jindw", + "email": "jindw@xidea.org" + }, + { + "name": "yaron", + "email": "yaronn01@gmail.com" + }, + { + "name": "bigeasy", + "email": "alan@prettyrobots.com" + }, + { + "name": "kethinov", + "email": "kethinov@gmail.com" + }, + { + "name": "jinjinyun", + "email": "jinyun.jin@gmail.com" + } + ], + "name": "xmldom", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/jindw/xmldom.git" + }, + "scripts": { + "test": "proof platform win32 && proof test */*/*.t.js || t/test" + }, + "version": "0.1.22" +} diff --git a/platforms/android/cordova/node_modules/xmldom/readme.md b/platforms/android/cordova/node_modules/xmldom/readme.md new file mode 100644 index 0000000..f832c44 --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/readme.md @@ -0,0 +1,219 @@ +# XMLDOM [![Build Status](https://secure.travis-ci.org/bigeasy/xmldom.png?branch=master)](http://travis-ci.org/bigeasy/xmldom) [![Coverage Status](https://coveralls.io/repos/bigeasy/xmldom/badge.png?branch=master)](https://coveralls.io/r/bigeasy/xmldom) [![NPM version](https://badge.fury.io/js/xmldom.png)](http://badge.fury.io/js/xmldom) + +A JavaScript implementation of W3C DOM for Node.js, Rhino and the browser. Fully +compatible with `W3C DOM level2`; and some compatible with `level3`. Supports +`DOMParser` and `XMLSerializer` interface such as in browser. + +Install: +------- +>npm install xmldom + +Example: +==== +```javascript +var DOMParser = require('xmldom').DOMParser; +var doc = new DOMParser().parseFromString( + '\n'+ + '\ttest\n'+ + '\t\n'+ + '\t\n'+ + '' + ,'text/xml'); +doc.documentElement.setAttribute('x','y'); +doc.documentElement.setAttributeNS('./lite','c:x','y2'); +var nsAttr = doc.documentElement.getAttributeNS('./lite','x') +console.info(nsAttr) +console.info(doc) +``` +API Reference +===== + + * [DOMParser](https://developer.mozilla.org/en/DOMParser): + + ```javascript + parseFromString(xmlsource,mimeType) + ``` + * **options extension** _by xmldom_(not BOM standard!!) + + ```javascript + //added the options argument + new DOMParser(options) + + //errorHandler is supported + new DOMParser({ + /** + * locator is always need for error position info + */ + locator:{}, + /** + * you can override the errorHandler for xml parser + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + errorHandler:{warning:function(w){console.warn(w)},error:callback,fatalError:callback} + //only callback model + //errorHandler:function(level,msg){console.log(level,msg)} + }) + + ``` + + * [XMLSerializer](https://developer.mozilla.org/en/XMLSerializer) + + ```javascript + serializeToString(node) + ``` +DOM level2 method and attribute: +------ + + * [Node](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247) + + attribute: + nodeValue|prefix + readonly attribute: + nodeName|nodeType|parentNode|childNodes|firstChild|lastChild|previousSibling|nextSibling|attributes|ownerDocument|namespaceURI|localName + method: + insertBefore(newChild, refChild) + replaceChild(newChild, oldChild) + removeChild(oldChild) + appendChild(newChild) + hasChildNodes() + cloneNode(deep) + normalize() + isSupported(feature, version) + hasAttributes() + + * [DOMImplementation](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-102161490) + + method: + hasFeature(feature, version) + createDocumentType(qualifiedName, publicId, systemId) + createDocument(namespaceURI, qualifiedName, doctype) + + * [Document](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#i-Document) : Node + + readonly attribute: + doctype|implementation|documentElement + method: + createElement(tagName) + createDocumentFragment() + createTextNode(data) + createComment(data) + createCDATASection(data) + createProcessingInstruction(target, data) + createAttribute(name) + createEntityReference(name) + getElementsByTagName(tagname) + importNode(importedNode, deep) + createElementNS(namespaceURI, qualifiedName) + createAttributeNS(namespaceURI, qualifiedName) + getElementsByTagNameNS(namespaceURI, localName) + getElementById(elementId) + + * [DocumentFragment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-B63ED1A3) : Node + * [Element](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-745549614) : Node + + readonly attribute: + tagName + method: + getAttribute(name) + setAttribute(name, value) + removeAttribute(name) + getAttributeNode(name) + setAttributeNode(newAttr) + removeAttributeNode(oldAttr) + getElementsByTagName(name) + getAttributeNS(namespaceURI, localName) + setAttributeNS(namespaceURI, qualifiedName, value) + removeAttributeNS(namespaceURI, localName) + getAttributeNodeNS(namespaceURI, localName) + setAttributeNodeNS(newAttr) + getElementsByTagNameNS(namespaceURI, localName) + hasAttribute(name) + hasAttributeNS(namespaceURI, localName) + + * [Attr](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-637646024) : Node + + attribute: + value + readonly attribute: + name|specified|ownerElement + + * [NodeList](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177) + + readonly attribute: + length + method: + item(index) + + * [NamedNodeMap](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1780488922) + + readonly attribute: + length + method: + getNamedItem(name) + setNamedItem(arg) + removeNamedItem(name) + item(index) + getNamedItemNS(namespaceURI, localName) + setNamedItemNS(arg) + removeNamedItemNS(namespaceURI, localName) + + * [CharacterData](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-FF21A306) : Node + + method: + substringData(offset, count) + appendData(arg) + insertData(offset, arg) + deleteData(offset, count) + replaceData(offset, count, arg) + + * [Text](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1312295772) : CharacterData + + method: + splitText(offset) + + * [CDATASection](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-667469212) + * [Comment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1728279322) : CharacterData + + * [DocumentType](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-412266927) + + readonly attribute: + name|entities|notations|publicId|systemId|internalSubset + + * Notation : Node + + readonly attribute: + publicId|systemId + + * Entity : Node + + readonly attribute: + publicId|systemId|notationName + + * EntityReference : Node + * ProcessingInstruction : Node + + attribute: + data + readonly attribute: + target + +DOM level 3 support: +----- + + * [Node](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) + + attribute: + textContent + method: + isDefaultNamespace(namespaceURI){ + lookupNamespaceURI(prefix) + +DOM extension by xmldom +--- + * [Node] Source position extension; + + attribute: + //Numbered starting from '1' + lineNumber + //Numbered starting from '1' + columnNumber diff --git a/platforms/android/cordova/node_modules/xmldom/sax.js b/platforms/android/cordova/node_modules/xmldom/sax.js new file mode 100644 index 0000000..e11bdfb --- /dev/null +++ b/platforms/android/cordova/node_modules/xmldom/sax.js @@ -0,0 +1,586 @@ +//[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] +//[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] +//[5] Name ::= NameStartChar (NameChar)* +var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF +var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\u203F-\u2040]"); +var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); +//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/ +//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',') + +//S_TAG, S_ATTR, S_EQ, S_V +//S_ATTR_S, S_E, S_S, S_C +var S_TAG = 0;//tag name offerring +var S_ATTR = 1;//attr name offerring +var S_ATTR_S=2;//attr name end and space offer +var S_EQ = 3;//=space? +var S_V = 4;//attr value(no quot value only) +var S_E = 5;//attr value end and no space(quot end) +var S_S = 6;//(attr value end || tag end ) && (space offer) +var S_C = 7;//closed el + +function XMLReader(){ + +} + +XMLReader.prototype = { + parse:function(source,defaultNSMap,entityMap){ + var domBuilder = this.domBuilder; + domBuilder.startDocument(); + _copy(defaultNSMap ,defaultNSMap = {}) + parse(source,defaultNSMap,entityMap, + domBuilder,this.errorHandler); + domBuilder.endDocument(); + } +} +function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ + function fixedFromCharCode(code) { + // String.prototype.fromCharCode does not supports + // > 2 bytes unicode chars directly + if (code > 0xffff) { + code -= 0x10000; + var surrogate1 = 0xd800 + (code >> 10) + , surrogate2 = 0xdc00 + (code & 0x3ff); + + return String.fromCharCode(surrogate1, surrogate2); + } else { + return String.fromCharCode(code); + } + } + function entityReplacer(a){ + var k = a.slice(1,-1); + if(k in entityMap){ + return entityMap[k]; + }else if(k.charAt(0) === '#'){ + return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) + }else{ + errorHandler.error('entity not found:'+a); + return a; + } + } + function appendText(end){//has some bugs + if(end>start){ + var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); + locator&&position(start); + domBuilder.characters(xt,0,end-start); + start = end + } + } + function position(p,m){ + while(p>=lineEnd && (m = linePattern.exec(source))){ + lineStart = m.index; + lineEnd = lineStart + m[0].length; + locator.lineNumber++; + //console.log('line++:',locator,startPos,endPos) + } + locator.columnNumber = p-lineStart+1; + } + var lineStart = 0; + var lineEnd = 0; + var linePattern = /.+(?:\r\n?|\n)|.*$/g + var locator = domBuilder.locator; + + var parseStack = [{currentNSMap:defaultNSMapCopy}] + var closeMap = {}; + var start = 0; + while(true){ + try{ + var tagStart = source.indexOf('<',start); + if(tagStart<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.document; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } + if(tagStart>start){ + appendText(tagStart); + } + switch(source.charAt(tagStart+1)){ + case '/': + var end = source.indexOf('>',tagStart+3); + var tagName = source.substring(tagStart+2,end); + var config = parseStack.pop(); + var localNSMap = config.localNSMap; + if(config.tagName != tagName){ + errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); + } + domBuilder.endElement(config.uri,config.localName,tagName); + if(localNSMap){ + for(var prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) ; + } + } + end++; + break; + // end elment + case '?':// + locator&&position(tagStart); + end = parseInstruction(source,tagStart,domBuilder); + break; + case '!':// start){ + start = end; + }else{ + //TODO: 这里有å¯èƒ½sax回退,有ä½ç½®é”™è¯¯é£Žé™© + appendText(Math.max(tagStart,start)+1); + } + } +} +function copyLocator(f,t){ + t.lineNumber = f.lineNumber; + t.columnNumber = f.columnNumber; + return t; +} + +/** + * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack); + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function parseElementStartPart(source,start,el,entityReplacer,errorHandler){ + var attrName; + var value; + var p = ++start; + var s = S_TAG;//status + while(true){ + var c = source.charAt(p); + switch(c){ + case '=': + if(s === S_ATTR){//attrName + attrName = source.slice(start,p); + s = S_EQ; + }else if(s === S_ATTR_S){ + s = S_EQ; + }else{ + //fatalError: equal must after attrName or space after attrName + throw new Error('attribute equal must after attrName'); + } + break; + case '\'': + case '"': + if(s === S_EQ){//equal + start = p+1; + p = source.indexOf(c,start) + if(p>0){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + el.add(attrName,value,start-1); + s = S_E; + }else{ + //fatalError: no end quot match + throw new Error('attribute value no end \''+c+'\' match'); + } + }else if(s == S_V){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + //console.log(attrName,value,start,p) + el.add(attrName,value,start); + //console.dir(el) + errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); + start = p+1; + s = S_E + }else{ + //fatalError: no equal before + throw new Error('attribute value must after "="'); + } + break; + case '/': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_E: + case S_S: + case S_C: + s = S_C; + el.closed = true; + case S_V: + case S_ATTR: + case S_ATTR_S: + break; + //case S_EQ: + default: + throw new Error("attribute invalid close char('/')") + } + break; + case ''://end document + //throw new Error('unexpected end of input') + errorHandler.error('unexpected end of input'); + case '>': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_E: + case S_S: + case S_C: + break;//normal + case S_V://Compatible state + case S_ATTR: + value = source.slice(start,p); + if(value.slice(-1) === '/'){ + el.closed = true; + value = value.slice(0,-1) + } + case S_ATTR_S: + if(s === S_ATTR_S){ + value = attrName; + } + if(s == S_V){ + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) + }else{ + errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') + el.add(value,value,start) + } + break; + case S_EQ: + throw new Error('attribute value missed!!'); + } +// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) + return p; + /*xml space '\x20' | #x9 | #xD | #xA; */ + case '\u0080': + c = ' '; + default: + if(c<= ' '){//space + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p));//tagName + s = S_S; + break; + case S_ATTR: + attrName = source.slice(start,p) + s = S_ATTR_S; + break; + case S_V: + var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value,start) + case S_E: + s = S_S; + break; + //case S_S: + //case S_EQ: + //case S_ATTR_S: + // void();break; + //case S_C: + //ignore warning + } + }else{//not space +//S_TAG, S_ATTR, S_EQ, S_V +//S_ATTR_S, S_E, S_S, S_C + switch(s){ + //case S_TAG:void();break; + //case S_ATTR:void();break; + //case S_V:void();break; + case S_ATTR_S: + errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!') + el.add(attrName,attrName,start); + start = p; + s = S_ATTR; + break; + case S_E: + errorHandler.warning('attribute space is required"'+attrName+'"!!') + case S_S: + s = S_ATTR; + start = p; + break; + case S_EQ: + s = S_V; + start = p; + break; + case S_C: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + } + p++; + } +} +/** + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function appendElement(el,domBuilder,parseStack){ + var tagName = el.tagName; + var localNSMap = null; + var currentNSMap = parseStack[parseStack.length-1].currentNSMap; + var i = el.length; + while(i--){ + var a = el[i]; + var qName = a.qName; + var value = a.value; + var nsp = qName.indexOf(':'); + if(nsp>0){ + var prefix = a.prefix = qName.slice(0,nsp); + var localName = qName.slice(nsp+1); + var nsPrefix = prefix === 'xmlns' && localName + }else{ + localName = qName; + prefix = null + nsPrefix = qName === 'xmlns' && '' + } + //can not set prefix,because prefix !== '' + a.localName = localName ; + //prefix == null for no ns prefix attribute + if(nsPrefix !== false){//hack!! + if(localNSMap == null){ + localNSMap = {} + //console.log(currentNSMap,0) + _copy(currentNSMap,currentNSMap={}) + //console.log(currentNSMap,1) + } + currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; + a.uri = 'http://www.w3.org/2000/xmlns/' + domBuilder.startPrefixMapping(nsPrefix, value) + } + } + var i = el.length; + while(i--){ + a = el[i]; + var prefix = a.prefix; + if(prefix){//no prefix attribute has no namespace + if(prefix === 'xml'){ + a.uri = 'http://www.w3.org/XML/1998/namespace'; + }if(prefix !== 'xmlns'){ + a.uri = currentNSMap[prefix] + + //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} + } + } + } + var nsp = tagName.indexOf(':'); + if(nsp>0){ + prefix = el.prefix = tagName.slice(0,nsp); + localName = el.localName = tagName.slice(nsp+1); + }else{ + prefix = null;//important!! + localName = el.localName = tagName; + } + //no prefix element has default namespace + var ns = el.uri = currentNSMap[prefix || '']; + domBuilder.startElement(ns,localName,tagName,el); + //endPrefixMapping and startPrefixMapping have not any help for dom builder + //localNSMap = null + if(el.closed){ + domBuilder.endElement(ns,localName,tagName); + if(localNSMap){ + for(prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) + } + } + }else{ + el.currentNSMap = currentNSMap; + el.localNSMap = localNSMap; + parseStack.push(el); + } +} +function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ + if(/^(?:script|textarea)$/i.test(tagName)){ + var elEndStart = source.indexOf('',elStartEnd); + var text = source.substring(elStartEnd+1,elEndStart); + if(/[&<]/.test(text)){ + if(/^script$/i.test(tagName)){ + //if(!/\]\]>/.test(text)){ + //lexHandler.startCDATA(); + domBuilder.characters(text,0,text.length); + //lexHandler.endCDATA(); + return elEndStart; + //} + }//}else{//text area + text = text.replace(/&#?\w+;/g,entityReplacer); + domBuilder.characters(text,0,text.length); + return elEndStart; + //} + + } + } + return elStartEnd+1; +} +function fixSelfClosed(source,elStartEnd,tagName,closeMap){ + //if(tagName in closeMap){ + var pos = closeMap[tagName]; + if(pos == null){ + //console.log(tagName) + pos = closeMap[tagName] = source.lastIndexOf('') + } + return pos',start+4); + //append comment source.substring(4,end)// + + + + + + + + +
+
+
+
+
+
+
+
Help
+
+ + + + +
+ +
+

Menu

+ The menu for the app can be accessed by selecting the 3 white horizontal lines in the top left corner of the screen. This gives access to all pages within the app. “Study Time†is the default page and the one where you will be starting, pausing and finishing your study sessions. +
+

Study Time

+ start: +
    +
  1. press the switch while it is in it’s ‘off state’ (grey coloured)
  2. +
+
+ pause:
+
    +
  1. press the switch while it is in it’s ‘on state’ (blue coloured)
  2. +
  3. select “take a short break†when the “confirmation†window pops up
  4. +
+
+ resume:
+
    +
  1. select “ok†or tap anywhere off of the “monitoring paused†message
  2. +
+
+ stop:
+
    +
  1. + press the switch while it is in it’s ‘on state’ (blue coloured) +
  2. +
  3. select “yes†when the “confirmation†window pops up
  4. +
  5. enter any notes you wish to save regarding the session and click “okâ€. It is fine to leave the input field blank and just click “ok†if you have no notes to save.
  6. +
  7. Upon stopping, your session will be saved.
  8. +
+
+ Whilst a session is in progress you cannot leave the “Study Time†page. To leave it you must first end the session. +
+
+ +

Schedule

+ This page is a placeholder. The feature is still a work-in-progress. For now there is only a button allowing you to open Google Calendar - something which can allow you to plan study sessions. +
+
+ +

Reports

+ This section is where you can view the reports on all your previous study sessions. Reports will be ordered by time and date, from earliest to latest. As of just now, to review your reports you must be connected to the internet. +
+
+ + +

Settings

+ In this section of the app you can change the app’s default settings to your own custom ones. +
+
+ current user ID:
+
    +
  1. directly under “Current User ID†you will find what your ID is currently set to
  2. +
+
+ new user ID:
+
    +
  1. tap the input box below “New User ID†- your device's keyboard should appear.
  2. +
  3. enter your user ID
  4. +
  5. tap the “Submit†button below the input box.
  6. +
+
+ + enable break reminder: +
    +
  1. in the “break reminder†section, select the “on†radio button
  2. +
  3. there should be a dark dot in the circle next to the “on†text
  4. +
  5. there should be no dark dot in the circle next to the “off†text
  6. +
+ +
+ disable break reminder:
+
    +
  1. in the “break reminder†section, select the “off†radio button
  2. +
  3. there should be a dark dot in the circle next to the “off†text
  4. +
  5. there should be no dark dot in the circle next to the “on†text
  6. +
+ +
+ set study duration between break reminders:
+
    +
  1. enable break reminder (see above)
  2. +
  3. tap the rectangle stating “X Minutes†with a small arrow pointing down - X being either “20, 30, 40, 50 or 60â€
  4. +
  5. a pop up should appear
  6. +
  7. select the duration you want to study for between breaks
  8. +
+ +
+ enable distraction reminder:
+
    +
  1. in the “distraction reminder†section, select the “on†radio button
  2. +
  3. there should be a dark dot in the circle next to the “on†text
  4. +
  5. there should be no dark dot in the circle next to the “off†text
  6. +
+
+ + disable distraction reminder:
+
    +
  1. in the “distraction reminder†section, select the “off†radio button
  2. +
  3. there should be a dark dot in the circle next to the “off†text
  4. +
  5. there should be no dark dot in the circle next to the “on†text
  6. +
+
+ + custom noise threshold level: +
    +
  1. in the “surrounding noise level†section
  2. +
  3. tap the “record noise level†button
  4. +
  5. tap “ok†on the pop up that appears
  6. +
  7. wait 10 seconds
  8. +
  9. tap ok on the pop up that appears
  10. +
+ +
+ default noise threshold level:
+
    +
  1. in the “surrounding noise level†section
  2. +
  3. tap the “default value†button
  4. +
  5. tap “ok†on the pop up that appears
  6. +
+
+
+ +

Help

+ In this section you can read the user guide and find instructions on how to complete the user evaluation. +
+
+ + +

Post-Session Questionnaire

+ This button will open up a questionnaire in your browser. This questionnaire is for filling in after a study session. It is not necessary to fill one in if your study session only lasted a few minutes. Information such as “session ID†that the questionnaire asks for can be found in the “Reports†section of the app. Ensure you are looking at the correct report when you take note of the session ID. +
+ +
+
+ + + + + + + diff --git a/platforms/android/assets/www/index.html b/platforms/android/assets/www/index.html index c4bfa15..e02712e 100644 --- a/platforms/android/assets/www/index.html +++ b/platforms/android/assets/www/index.html @@ -6,7 +6,8 @@ StudyWell Home - + + diff --git a/platforms/android/assets/www/reports.html b/platforms/android/assets/www/reports.html index 3273dff..80dacde 100644 --- a/platforms/android/assets/www/reports.html +++ b/platforms/android/assets/www/reports.html @@ -6,7 +6,9 @@ Reports - + + + diff --git a/platforms/android/assets/www/resources/js/backend.js b/platforms/android/assets/www/resources/js/backend.js index de020bd..3b15839 100644 --- a/platforms/android/assets/www/resources/js/backend.js +++ b/platforms/android/assets/www/resources/js/backend.js @@ -1,3 +1,4 @@ + var swFireBase = new Firebase("https://vivid-heat-9475.firebaseIO.com/"); var users = swFireBase.child('users'); diff --git a/platforms/android/assets/www/vendors/js/firebase2.4.js b/platforms/android/assets/www/vendors/js/firebase2.4.js new file mode 100644 index 0000000..a4a0f92 --- /dev/null +++ b/platforms/android/assets/www/vendors/js/firebase2.4.js @@ -0,0 +1,7148 @@ +/*! @license Firebase v2.4.0 + License: https://www.firebase.com/terms/terms-of-service.html */ +(function() { + var h, n = this; + + function p(a) { + return void 0 !== a + } + + function aa() {} + + function ba(a) { + a.yb = function() { + return a.zf ? a.zf : a.zf = new a + } + } + + function ca(a) { + var b = typeof a; + if ("object" == b) + if (a) { + if (a instanceof Array) return "array"; + if (a instanceof Object) return b; + var c = Object.prototype.toString.call(a); + if ("[object Window]" == c) return "object"; + if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array"; + if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function" + } else return "null"; + else if ("function" == b && "undefined" == typeof a.call) return "object"; + return b + } + + function da(a) { + return "array" == ca(a) + } + + function ea(a) { + var b = ca(a); + return "array" == b || "object" == b && "number" == typeof a.length + } + + function q(a) { + return "string" == typeof a + } + + function fa(a) { + return "number" == typeof a + } + + function r(a) { + return "function" == ca(a) + } + + function ga(a) { + var b = typeof a; + return "object" == b && null != a || "function" == b + } + + function ha(a, b, c) { + return a.call.apply(a.bind, arguments) + } + + function ia(a, b, c) { + if (!a) throw Error(); + if (2 < arguments.length) { + var d = Array.prototype.slice.call(arguments, 2); + return function() { + var c = Array.prototype.slice.call(arguments); + Array.prototype.unshift.apply(c, d); + return a.apply(b, c) + } + } + return function() { + return a.apply(b, arguments) + } + } + + function u(a, b, c) { + u = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? ha : ia; + return u.apply(null, arguments) + } + var ja = Date.now || function() { + return +new Date + }; + + function ka(a, b) { + function c() {} + c.prototype = b.prototype; + a.nh = b.prototype; + a.prototype = new c; + a.prototype.constructor = a; + a.jh = function(a, c, f) { + for (var g = Array(arguments.length - 2), k = 2; k < arguments.length; k++) g[k - 2] = arguments[k]; + return b.prototype[c].apply(a, g) + } + }; + + function la(a) { + if (Error.captureStackTrace) Error.captureStackTrace(this, la); + else { + var b = Error().stack; + b && (this.stack = b) + } + a && (this.message = String(a)) + } + ka(la, Error); + la.prototype.name = "CustomError"; + + function v(a, b) { + for (var c in a) b.call(void 0, a[c], c, a) + } + + function ma(a, b) { + var c = {}, + d; + for (d in a) c[d] = b.call(void 0, a[d], d, a); + return c + } + + function na(a, b) { + for (var c in a) + if (!b.call(void 0, a[c], c, a)) return !1; + return !0 + } + + function oa(a) { + var b = 0, + c; + for (c in a) b++; + return b + } + + function pa(a) { + for (var b in a) return b + } + + function qa(a) { + var b = [], + c = 0, + d; + for (d in a) b[c++] = a[d]; + return b + } + + function ra(a) { + var b = [], + c = 0, + d; + for (d in a) b[c++] = d; + return b + } + + function sa(a, b) { + for (var c in a) + if (a[c] == b) return !0; + return !1 + } + + function ta(a, b, c) { + for (var d in a) + if (b.call(c, a[d], d, a)) return d + } + + function ua(a, b) { + var c = ta(a, b, void 0); + return c && a[c] + } + + function va(a) { + for (var b in a) return !1; + return !0 + } + + function wa(a) { + var b = {}, + c; + for (c in a) b[c] = a[c]; + return b + } + var xa = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "); + + function ya(a, b) { + for (var c, d, e = 1; e < arguments.length; e++) { + d = arguments[e]; + for (c in d) a[c] = d[c]; + for (var f = 0; f < xa.length; f++) c = xa[f], Object.prototype.hasOwnProperty.call(d, c) && (a[c] = d[c]) + } + }; + + function za(a) { + a = String(a); + if (/^\s*$/.test(a) ? 0 : /^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g, ""))) try { + return eval("(" + a + ")") + } catch (b) {} + throw Error("Invalid JSON string: " + a); + } + + function Aa() { + this.Vd = void 0 + } + + function Ba(a, b, c) { + switch (typeof b) { + case "string": + Ca(b, c); + break; + case "number": + c.push(isFinite(b) && !isNaN(b) ? b : "null"); + break; + case "boolean": + c.push(b); + break; + case "undefined": + c.push("null"); + break; + case "object": + if (null == b) { + c.push("null"); + break + } + if (da(b)) { + var d = b.length; + c.push("["); + for (var e = "", f = 0; f < d; f++) c.push(e), e = b[f], Ba(a, a.Vd ? a.Vd.call(b, String(f), e) : e, c), e = ","; + c.push("]"); + break + } + c.push("{"); + d = ""; + for (f in b) Object.prototype.hasOwnProperty.call(b, f) && (e = b[f], "function" != typeof e && (c.push(d), Ca(f, c), + c.push(":"), Ba(a, a.Vd ? a.Vd.call(b, f, e) : e, c), d = ",")); + c.push("}"); + break; + case "function": + break; + default: + throw Error("Unknown type: " + typeof b); + } + } + var Da = { + '"': '\\"', + "\\": "\\\\", + "/": "\\/", + "\b": "\\b", + "\f": "\\f", + "\n": "\\n", + "\r": "\\r", + "\t": "\\t", + "\x0B": "\\u000b" + }, + Ea = /\uffff/.test("\uffff") ? /[\\\"\x00-\x1f\x7f-\uffff]/g : /[\\\"\x00-\x1f\x7f-\xff]/g; + + function Ca(a, b) { + b.push('"', a.replace(Ea, function(a) { + if (a in Da) return Da[a]; + var b = a.charCodeAt(0), + e = "\\u"; + 16 > b ? e += "000" : 256 > b ? e += "00" : 4096 > b && (e += "0"); + return Da[a] = e + b.toString(16) + }), '"') + }; + + function Fa() { + return Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ ja()).toString(36) + }; + var w; + a: { + var Ga = n.navigator; + if (Ga) { + var Ha = Ga.userAgent; + if (Ha) { + w = Ha; + break a + } + } + w = "" + }; + + function Ia() { + this.Ya = -1 + }; + + function Ja() { + this.Ya = -1; + this.Ya = 64; + this.P = []; + this.pe = []; + this.eg = []; + this.Od = []; + this.Od[0] = 128; + for (var a = 1; a < this.Ya; ++a) this.Od[a] = 0; + this.ge = this.ec = 0; + this.reset() + } + ka(Ja, Ia); + Ja.prototype.reset = function() { + this.P[0] = 1732584193; + this.P[1] = 4023233417; + this.P[2] = 2562383102; + this.P[3] = 271733878; + this.P[4] = 3285377520; + this.ge = this.ec = 0 + }; + + function Ka(a, b, c) { + c || (c = 0); + var d = a.eg; + if (q(b)) + for (var e = 0; 16 > e; e++) d[e] = b.charCodeAt(c) << 24 | b.charCodeAt(c + 1) << 16 | b.charCodeAt(c + 2) << 8 | b.charCodeAt(c + 3), c += 4; + else + for (e = 0; 16 > e; e++) d[e] = b[c] << 24 | b[c + 1] << 16 | b[c + 2] << 8 | b[c + 3], c += 4; + for (e = 16; 80 > e; e++) { + var f = d[e - 3] ^ d[e - 8] ^ d[e - 14] ^ d[e - 16]; + d[e] = (f << 1 | f >>> 31) & 4294967295 + } + b = a.P[0]; + c = a.P[1]; + for (var g = a.P[2], k = a.P[3], m = a.P[4], l, e = 0; 80 > e; e++) 40 > e ? 20 > e ? (f = k ^ c & (g ^ k), l = 1518500249) : (f = c ^ g ^ k, l = 1859775393) : 60 > e ? (f = c & g | k & (c | g), l = 2400959708) : (f = c ^ g ^ k, l = 3395469782), f = (b << + 5 | b >>> 27) + f + m + l + d[e] & 4294967295, m = k, k = g, g = (c << 30 | c >>> 2) & 4294967295, c = b, b = f; + a.P[0] = a.P[0] + b & 4294967295; + a.P[1] = a.P[1] + c & 4294967295; + a.P[2] = a.P[2] + g & 4294967295; + a.P[3] = a.P[3] + k & 4294967295; + a.P[4] = a.P[4] + m & 4294967295 + } + Ja.prototype.update = function(a, b) { + if (null != a) { + p(b) || (b = a.length); + for (var c = b - this.Ya, d = 0, e = this.pe, f = this.ec; d < b;) { + if (0 == f) + for (; d <= c;) Ka(this, a, d), d += this.Ya; + if (q(a)) + for (; d < b;) { + if (e[f] = a.charCodeAt(d), ++f, ++d, f == this.Ya) { + Ka(this, e); + f = 0; + break + } + } else + for (; d < b;) + if (e[f] = a[d], ++f, ++d, f == this.Ya) { + Ka(this, e); + f = 0; + break + } + } + this.ec = f; + this.ge += b + } + }; + var x = Array.prototype, + La = x.indexOf ? function(a, b, c) { + return x.indexOf.call(a, b, c) + } : function(a, b, c) { + c = null == c ? 0 : 0 > c ? Math.max(0, a.length + c) : c; + if (q(a)) return q(b) && 1 == b.length ? a.indexOf(b, c) : -1; + for (; c < a.length; c++) + if (c in a && a[c] === b) return c; + return -1 + }, + Ma = x.forEach ? function(a, b, c) { + x.forEach.call(a, b, c) + } : function(a, b, c) { + for (var d = a.length, e = q(a) ? a.split("") : a, f = 0; f < d; f++) f in e && b.call(c, e[f], f, a) + }, + Na = x.filter ? function(a, b, c) { + return x.filter.call(a, b, c) + } : function(a, b, c) { + for (var d = a.length, e = [], f = 0, g = q(a) ? + a.split("") : a, k = 0; k < d; k++) + if (k in g) { + var m = g[k]; + b.call(c, m, k, a) && (e[f++] = m) + } + return e + }, + Oa = x.map ? function(a, b, c) { + return x.map.call(a, b, c) + } : function(a, b, c) { + for (var d = a.length, e = Array(d), f = q(a) ? a.split("") : a, g = 0; g < d; g++) g in f && (e[g] = b.call(c, f[g], g, a)); + return e + }, + Pa = x.reduce ? function(a, b, c, d) { + for (var e = [], f = 1, g = arguments.length; f < g; f++) e.push(arguments[f]); + d && (e[0] = u(b, d)); + return x.reduce.apply(a, e) + } : function(a, b, c, d) { + var e = c; + Ma(a, function(c, g) { + e = b.call(d, e, c, g, a) + }); + return e + }, + Qa = x.every ? function(a, b, + c) { + return x.every.call(a, b, c) + } : function(a, b, c) { + for (var d = a.length, e = q(a) ? a.split("") : a, f = 0; f < d; f++) + if (f in e && !b.call(c, e[f], f, a)) return !1; + return !0 + }; + + function Ra(a, b) { + var c = Sa(a, b, void 0); + return 0 > c ? null : q(a) ? a.charAt(c) : a[c] + } + + function Sa(a, b, c) { + for (var d = a.length, e = q(a) ? a.split("") : a, f = 0; f < d; f++) + if (f in e && b.call(c, e[f], f, a)) return f; + return -1 + } + + function Ta(a, b) { + var c = La(a, b); + 0 <= c && x.splice.call(a, c, 1) + } + + function Ua(a, b, c) { + return 2 >= arguments.length ? x.slice.call(a, b) : x.slice.call(a, b, c) + } + + function Va(a, b) { + a.sort(b || Wa) + } + + function Wa(a, b) { + return a > b ? 1 : a < b ? -1 : 0 + }; + + function Xa(a) { + n.setTimeout(function() { + throw a; + }, 0) + } + var Ya; + + function Za() { + var a = n.MessageChannel; + "undefined" === typeof a && "undefined" !== typeof window && window.postMessage && window.addEventListener && -1 == w.indexOf("Presto") && (a = function() { + var a = document.createElement("iframe"); + a.style.display = "none"; + a.src = ""; + document.documentElement.appendChild(a); + var b = a.contentWindow, + a = b.document; + a.open(); + a.write(""); + a.close(); + var c = "callImmediate" + Math.random(), + d = "file:" == b.location.protocol ? "*" : b.location.protocol + "//" + b.location.host, + a = u(function(a) { + if (("*" == d || a.origin == + d) && a.data == c) this.port1.onmessage() + }, this); + b.addEventListener("message", a, !1); + this.port1 = {}; + this.port2 = { + postMessage: function() { + b.postMessage(c, d) + } + } + }); + if ("undefined" !== typeof a && -1 == w.indexOf("Trident") && -1 == w.indexOf("MSIE")) { + var b = new a, + c = {}, + d = c; + b.port1.onmessage = function() { + if (p(c.next)) { + c = c.next; + var a = c.hb; + c.hb = null; + a() + } + }; + return function(a) { + d.next = { + hb: a + }; + d = d.next; + b.port2.postMessage(0) + } + } + return "undefined" !== typeof document && "onreadystatechange" in document.createElement("script") ? function(a) { + var b = + document.createElement("script"); + b.onreadystatechange = function() { + b.onreadystatechange = null; + b.parentNode.removeChild(b); + b = null; + a(); + a = null + }; + document.documentElement.appendChild(b) + } : function(a) { + n.setTimeout(a, 0) + } + }; + + function $a(a, b) { + ab || bb(); + cb || (ab(), cb = !0); + db.push(new eb(a, b)) + } + var ab; + + function bb() { + if (n.Promise && n.Promise.resolve) { + var a = n.Promise.resolve(); + ab = function() { + a.then(fb) + } + } else ab = function() { + var a = fb; + !r(n.setImmediate) || n.Window && n.Window.prototype && n.Window.prototype.setImmediate == n.setImmediate ? (Ya || (Ya = Za()), Ya(a)) : n.setImmediate(a) + } + } + var cb = !1, + db = []; + [].push(function() { + cb = !1; + db = [] + }); + + function fb() { + for (; db.length;) { + var a = db; + db = []; + for (var b = 0; b < a.length; b++) { + var c = a[b]; + try { + c.yg.call(c.scope) + } catch (d) { + Xa(d) + } + } + } + cb = !1 + } + + function eb(a, b) { + this.yg = a; + this.scope = b + }; + var gb = -1 != w.indexOf("Opera") || -1 != w.indexOf("OPR"), + hb = -1 != w.indexOf("Trident") || -1 != w.indexOf("MSIE"), + ib = -1 != w.indexOf("Gecko") && -1 == w.toLowerCase().indexOf("webkit") && !(-1 != w.indexOf("Trident") || -1 != w.indexOf("MSIE")), + jb = -1 != w.toLowerCase().indexOf("webkit"); + (function() { + var a = "", + b; + if (gb && n.opera) return a = n.opera.version, r(a) ? a() : a; + ib ? b = /rv\:([^\);]+)(\)|;)/ : hb ? b = /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/ : jb && (b = /WebKit\/(\S+)/); + b && (a = (a = b.exec(w)) ? a[1] : ""); + return hb && (b = (b = n.document) ? b.documentMode : void 0, b > parseFloat(a)) ? String(b) : a + })(); + var kb = null, + lb = null, + mb = null; + + function nb(a, b) { + if (!ea(a)) throw Error("encodeByteArray takes an array as a parameter"); + ob(); + for (var c = b ? lb : kb, d = [], e = 0; e < a.length; e += 3) { + var f = a[e], + g = e + 1 < a.length, + k = g ? a[e + 1] : 0, + m = e + 2 < a.length, + l = m ? a[e + 2] : 0, + t = f >> 2, + f = (f & 3) << 4 | k >> 4, + k = (k & 15) << 2 | l >> 6, + l = l & 63; + m || (l = 64, g || (k = 64)); + d.push(c[t], c[f], c[k], c[l]) + } + return d.join("") + } + + function ob() { + if (!kb) { + kb = {}; + lb = {}; + mb = {}; + for (var a = 0; 65 > a; a++) kb[a] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a), lb[a] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a), mb[lb[a]] = a, 62 <= a && (mb["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a)] = a) + } + }; + + function pb(a, b) { + this.N = qb; + this.Rf = void 0; + this.Ba = this.Ha = null; + this.yd = this.ye = !1; + if (a == rb) sb(this, tb, b); + else try { + var c = this; + a.call(b, function(a) { + sb(c, tb, a) + }, function(a) { + if (!(a instanceof ub)) try { + if (a instanceof Error) throw a; + throw Error("Promise rejected."); + } catch (b) {} + sb(c, vb, a) + }) + } catch (d) { + sb(this, vb, d) + } + } + var qb = 0, + tb = 2, + vb = 3; + + function rb() {} + pb.prototype.then = function(a, b, c) { + return wb(this, r(a) ? a : null, r(b) ? b : null, c) + }; + pb.prototype.then = pb.prototype.then; + pb.prototype.$goog_Thenable = !0; + pb.prototype.cancel = function(a) { + this.N == qb && $a(function() { + var b = new ub(a); + xb(this, b) + }, this) + }; + + function xb(a, b) { + if (a.N == qb) + if (a.Ha) { + var c = a.Ha; + if (c.Ba) { + for (var d = 0, e = -1, f = 0, g; g = c.Ba[f]; f++) + if (g = g.o) + if (d++, g == a && (e = f), 0 <= e && 1 < d) break; + 0 <= e && (c.N == qb && 1 == d ? xb(c, b) : (d = c.Ba.splice(e, 1)[0], yb(c, d, vb, b))) + } + a.Ha = null + } else sb(a, vb, b) + } + + function zb(a, b) { + a.Ba && a.Ba.length || a.N != tb && a.N != vb || Ab(a); + a.Ba || (a.Ba = []); + a.Ba.push(b) + } + + function wb(a, b, c, d) { + var e = { + o: null, + Hf: null, + Jf: null + }; + e.o = new pb(function(a, g) { + e.Hf = b ? function(c) { + try { + var e = b.call(d, c); + a(e) + } catch (l) { + g(l) + } + } : a; + e.Jf = c ? function(b) { + try { + var e = c.call(d, b); + !p(e) && b instanceof ub ? g(b) : a(e) + } catch (l) { + g(l) + } + } : g + }); + e.o.Ha = a; + zb(a, e); + return e.o + } + pb.prototype.Yf = function(a) { + this.N = qb; + sb(this, tb, a) + }; + pb.prototype.Zf = function(a) { + this.N = qb; + sb(this, vb, a) + }; + + function sb(a, b, c) { + if (a.N == qb) { + if (a == c) b = vb, c = new TypeError("Promise cannot resolve to itself"); + else { + var d; + if (c) try { + d = !!c.$goog_Thenable + } catch (e) { + d = !1 + } else d = !1; + if (d) { + a.N = 1; + c.then(a.Yf, a.Zf, a); + return + } + if (ga(c)) try { + var f = c.then; + if (r(f)) { + Bb(a, c, f); + return + } + } catch (g) { + b = vb, c = g + } + } + a.Rf = c; + a.N = b; + a.Ha = null; + Ab(a); + b != vb || c instanceof ub || Cb(a, c) + } + } + + function Bb(a, b, c) { + function d(b) { + f || (f = !0, a.Zf(b)) + } + + function e(b) { + f || (f = !0, a.Yf(b)) + } + a.N = 1; + var f = !1; + try { + c.call(b, e, d) + } catch (g) { + d(g) + } + } + + function Ab(a) { + a.ye || (a.ye = !0, $a(a.wg, a)) + } + pb.prototype.wg = function() { + for (; this.Ba && this.Ba.length;) { + var a = this.Ba; + this.Ba = null; + for (var b = 0; b < a.length; b++) yb(this, a[b], this.N, this.Rf) + } + this.ye = !1 + }; + + function yb(a, b, c, d) { + if (c == tb) b.Hf(d); + else { + if (b.o) + for (; a && a.yd; a = a.Ha) a.yd = !1; + b.Jf(d) + } + } + + function Cb(a, b) { + a.yd = !0; + $a(function() { + a.yd && Db.call(null, b) + }) + } + var Db = Xa; + + function ub(a) { + la.call(this, a) + } + ka(ub, la); + ub.prototype.name = "cancel"; + var Eb = Eb || "2.4.0"; + + function y(a, b) { + return Object.prototype.hasOwnProperty.call(a, b) + } + + function z(a, b) { + if (Object.prototype.hasOwnProperty.call(a, b)) return a[b] + } + + function Fb(a, b) { + for (var c in a) Object.prototype.hasOwnProperty.call(a, c) && b(c, a[c]) + } + + function Gb(a) { + var b = {}; + Fb(a, function(a, d) { + b[a] = d + }); + return b + } + + function Hb(a) { + return "object" === typeof a && null !== a + }; + + function Ib(a) { + var b = []; + Fb(a, function(a, d) { + da(d) ? Ma(d, function(d) { + b.push(encodeURIComponent(a) + "=" + encodeURIComponent(d)) + }) : b.push(encodeURIComponent(a) + "=" + encodeURIComponent(d)) + }); + return b.length ? "&" + b.join("&") : "" + } + + function Jb(a) { + var b = {}; + a = a.replace(/^\?/, "").split("&"); + Ma(a, function(a) { + a && (a = a.split("="), b[a[0]] = a[1]) + }); + return b + }; + + function Kb(a, b) { + if (!a) throw Lb(b); + } + + function Lb(a) { + return Error("Firebase (" + Eb + ") INTERNAL ASSERT FAILED: " + a) + }; + var Mb = n.Promise || pb; + + function B() { + var a = this; + this.reject = this.resolve = null; + this.D = new Mb(function(b, c) { + a.resolve = b; + a.reject = c + }) + } + + function C(a, b) { + return function(c, d) { + c ? a.reject(c) : a.resolve(d); + r(b) && (Nb(a.D), 1 === b.length ? b(c) : b(c, d)) + } + } + + function Nb(a) { + a.then(void 0, aa) + }; + + function Ob(a) { + for (var b = [], c = 0, d = 0; d < a.length; d++) { + var e = a.charCodeAt(d); + 55296 <= e && 56319 >= e && (e -= 55296, d++, Kb(d < a.length, "Surrogate pair missing trail surrogate."), e = 65536 + (e << 10) + (a.charCodeAt(d) - 56320)); + 128 > e ? b[c++] = e : (2048 > e ? b[c++] = e >> 6 | 192 : (65536 > e ? b[c++] = e >> 12 | 224 : (b[c++] = e >> 18 | 240, b[c++] = e >> 12 & 63 | 128), b[c++] = e >> 6 & 63 | 128), b[c++] = e & 63 | 128) + } + return b + } + + function Pb(a) { + for (var b = 0, c = 0; c < a.length; c++) { + var d = a.charCodeAt(c); + 128 > d ? b++ : 2048 > d ? b += 2 : 55296 <= d && 56319 >= d ? (b += 4, c++) : b += 3 + } + return b + }; + + function D(a, b, c, d) { + var e; + d < b ? e = "at least " + b : d > c && (e = 0 === c ? "none" : "no more than " + c); + if (e) throw Error(a + " failed: Was called with " + d + (1 === d ? " argument." : " arguments.") + " Expects " + e + "."); + } + + function E(a, b, c) { + var d = ""; + switch (b) { + case 1: + d = c ? "first" : "First"; + break; + case 2: + d = c ? "second" : "Second"; + break; + case 3: + d = c ? "third" : "Third"; + break; + case 4: + d = c ? "fourth" : "Fourth"; + break; + default: + throw Error("errorPrefix called with argumentNumber > 4. Need to update it?"); + } + return a = a + " failed: " + (d + " argument ") + } + + function F(a, b, c, d) { + if ((!d || p(c)) && !r(c)) throw Error(E(a, b, d) + "must be a valid function."); + } + + function Qb(a, b, c) { + if (p(c) && (!ga(c) || null === c)) throw Error(E(a, b, !0) + "must be a valid context object."); + }; + + function Rb(a) { + return "undefined" !== typeof JSON && p(JSON.parse) ? JSON.parse(a) : za(a) + } + + function G(a) { + if ("undefined" !== typeof JSON && p(JSON.stringify)) a = JSON.stringify(a); + else { + var b = []; + Ba(new Aa, a, b); + a = b.join("") + } + return a + }; + + function Sb() { + this.Zd = H + } + Sb.prototype.j = function(a) { + return this.Zd.S(a) + }; + Sb.prototype.toString = function() { + return this.Zd.toString() + }; + + function Tb() {} + Tb.prototype.uf = function() { + return null + }; + Tb.prototype.Ce = function() { + return null + }; + var Ub = new Tb; + + function Vb(a, b, c) { + this.bg = a; + this.Oa = b; + this.Nd = c + } + Vb.prototype.uf = function(a) { + var b = this.Oa.Q; + if (Wb(b, a)) return b.j().T(a); + b = null != this.Nd ? new Xb(this.Nd, !0, !1) : this.Oa.w(); + return this.bg.Bc(a, b) + }; + Vb.prototype.Ce = function(a, b, c) { + var d = null != this.Nd ? this.Nd : Yb(this.Oa); + a = this.bg.qe(d, b, 1, c, a); + return 0 === a.length ? null : a[0] + }; + + function Zb() { + this.xb = [] + } + + function $b(a, b) { + for (var c = null, d = 0; d < b.length; d++) { + var e = b[d], + f = e.cc(); + null === c || f.ea(c.cc()) || (a.xb.push(c), c = null); + null === c && (c = new ac(f)); + c.add(e) + } + c && a.xb.push(c) + } + + function bc(a, b, c) { + $b(a, c); + cc(a, function(a) { + return a.ea(b) + }) + } + + function dc(a, b, c) { + $b(a, c); + cc(a, function(a) { + return a.contains(b) || b.contains(a) + }) + } + + function cc(a, b) { + for (var c = !0, d = 0; d < a.xb.length; d++) { + var e = a.xb[d]; + if (e) + if (e = e.cc(), b(e)) { + for (var e = a.xb[d], f = 0; f < e.xd.length; f++) { + var g = e.xd[f]; + if (null !== g) { + e.xd[f] = null; + var k = g.Zb(); + ec && fc("event: " + g.toString()); + gc(k) + } + } + a.xb[d] = null + } else c = !1 + } + c && (a.xb = []) + } + + function ac(a) { + this.ta = a; + this.xd = [] + } + ac.prototype.add = function(a) { + this.xd.push(a) + }; + ac.prototype.cc = function() { + return this.ta + }; + + function J(a, b, c, d) { + this.type = a; + this.Na = b; + this.Za = c; + this.Oe = d; + this.Td = void 0 + } + + function hc(a) { + return new J(ic, a) + } + var ic = "value"; + + function jc(a, b, c, d) { + this.xe = b; + this.be = c; + this.Td = d; + this.wd = a + } + jc.prototype.cc = function() { + var a = this.be.Mb(); + return "value" === this.wd ? a.path : a.parent().path + }; + jc.prototype.De = function() { + return this.wd + }; + jc.prototype.Zb = function() { + return this.xe.Zb(this) + }; + jc.prototype.toString = function() { + return this.cc().toString() + ":" + this.wd + ":" + G(this.be.qf()) + }; + + function kc(a, b, c) { + this.xe = a; + this.error = b; + this.path = c + } + kc.prototype.cc = function() { + return this.path + }; + kc.prototype.De = function() { + return "cancel" + }; + kc.prototype.Zb = function() { + return this.xe.Zb(this) + }; + kc.prototype.toString = function() { + return this.path.toString() + ":cancel" + }; + + function Xb(a, b, c) { + this.A = a; + this.ga = b; + this.Yb = c + } + + function lc(a) { + return a.ga + } + + function mc(a) { + return a.Yb + } + + function nc(a, b) { + return b.e() ? a.ga && !a.Yb : Wb(a, K(b)) + } + + function Wb(a, b) { + return a.ga && !a.Yb || a.A.Fa(b) + } + Xb.prototype.j = function() { + return this.A + }; + + function oc(a) { + this.pg = a; + this.Gd = null + } + oc.prototype.get = function() { + var a = this.pg.get(), + b = wa(a); + if (this.Gd) + for (var c in this.Gd) b[c] -= this.Gd[c]; + this.Gd = a; + return b + }; + + function pc(a, b) { + this.Vf = {}; + this.hd = new oc(a); + this.da = b; + var c = 1E4 + 2E4 * Math.random(); + setTimeout(u(this.Of, this), Math.floor(c)) + } + pc.prototype.Of = function() { + var a = this.hd.get(), + b = {}, + c = !1, + d; + for (d in a) 0 < a[d] && y(this.Vf, d) && (b[d] = a[d], c = !0); + c && this.da.Ye(b); + setTimeout(u(this.Of, this), Math.floor(6E5 * Math.random())) + }; + + function qc() { + this.Hc = {} + } + + function rc(a, b, c) { + p(c) || (c = 1); + y(a.Hc, b) || (a.Hc[b] = 0); + a.Hc[b] += c + } + qc.prototype.get = function() { + return wa(this.Hc) + }; + var sc = {}, + tc = {}; + + function uc(a) { + a = a.toString(); + sc[a] || (sc[a] = new qc); + return sc[a] + } + + function vc(a, b) { + var c = a.toString(); + tc[c] || (tc[c] = b()); + return tc[c] + }; + + function L(a, b) { + this.name = a; + this.U = b + } + + function wc(a, b) { + return new L(a, b) + }; + + function xc(a, b) { + return yc(a.name, b.name) + } + + function zc(a, b) { + return yc(a, b) + }; + + function Ac(a, b, c) { + this.type = Bc; + this.source = a; + this.path = b; + this.Ja = c + } + Ac.prototype.$c = function(a) { + return this.path.e() ? new Ac(this.source, M, this.Ja.T(a)) : new Ac(this.source, N(this.path), this.Ja) + }; + Ac.prototype.toString = function() { + return "Operation(" + this.path + ": " + this.source.toString() + " overwrite: " + this.Ja.toString() + ")" + }; + + function Cc(a, b) { + this.type = Dc; + this.source = a; + this.path = b + } + Cc.prototype.$c = function() { + return this.path.e() ? new Cc(this.source, M) : new Cc(this.source, N(this.path)) + }; + Cc.prototype.toString = function() { + return "Operation(" + this.path + ": " + this.source.toString() + " listen_complete)" + }; + + function Ec(a, b) { + this.Pa = a; + this.xa = b ? b : Fc + } + h = Ec.prototype; + h.Sa = function(a, b) { + return new Ec(this.Pa, this.xa.Sa(a, b, this.Pa).$(null, null, !1, null, null)) + }; + h.remove = function(a) { + return new Ec(this.Pa, this.xa.remove(a, this.Pa).$(null, null, !1, null, null)) + }; + h.get = function(a) { + for (var b, c = this.xa; !c.e();) { + b = this.Pa(a, c.key); + if (0 === b) return c.value; + 0 > b ? c = c.left : 0 < b && (c = c.right) + } + return null + }; + + function Gc(a, b) { + for (var c, d = a.xa, e = null; !d.e();) { + c = a.Pa(b, d.key); + if (0 === c) { + if (d.left.e()) return e ? e.key : null; + for (d = d.left; !d.right.e();) d = d.right; + return d.key + } + 0 > c ? d = d.left : 0 < c && (e = d, d = d.right) + } + throw Error("Attempted to find predecessor key for a nonexistent key. What gives?"); + } + h.e = function() { + return this.xa.e() + }; + h.count = function() { + return this.xa.count() + }; + h.Vc = function() { + return this.xa.Vc() + }; + h.jc = function() { + return this.xa.jc() + }; + h.ka = function(a) { + return this.xa.ka(a) + }; + h.ac = function(a) { + return new Hc(this.xa, null, this.Pa, !1, a) + }; + h.bc = function(a, b) { + return new Hc(this.xa, a, this.Pa, !1, b) + }; + h.dc = function(a, b) { + return new Hc(this.xa, a, this.Pa, !0, b) + }; + h.xf = function(a) { + return new Hc(this.xa, null, this.Pa, !0, a) + }; + + function Hc(a, b, c, d, e) { + this.Xd = e || null; + this.Je = d; + this.Ta = []; + for (e = 1; !a.e();) + if (e = b ? c(a.key, b) : 1, d && (e *= -1), 0 > e) a = this.Je ? a.left : a.right; + else if (0 === e) { + this.Ta.push(a); + break + } else this.Ta.push(a), a = this.Je ? a.right : a.left + } + + function Ic(a) { + if (0 === a.Ta.length) return null; + var b = a.Ta.pop(), + c; + c = a.Xd ? a.Xd(b.key, b.value) : { + key: b.key, + value: b.value + }; + if (a.Je) + for (b = b.left; !b.e();) a.Ta.push(b), b = b.right; + else + for (b = b.right; !b.e();) a.Ta.push(b), b = b.left; + return c + } + + function Jc(a) { + if (0 === a.Ta.length) return null; + var b; + b = a.Ta; + b = b[b.length - 1]; + return a.Xd ? a.Xd(b.key, b.value) : { + key: b.key, + value: b.value + } + } + + function Kc(a, b, c, d, e) { + this.key = a; + this.value = b; + this.color = null != c ? c : !0; + this.left = null != d ? d : Fc; + this.right = null != e ? e : Fc + } + h = Kc.prototype; + h.$ = function(a, b, c, d, e) { + return new Kc(null != a ? a : this.key, null != b ? b : this.value, null != c ? c : this.color, null != d ? d : this.left, null != e ? e : this.right) + }; + h.count = function() { + return this.left.count() + 1 + this.right.count() + }; + h.e = function() { + return !1 + }; + h.ka = function(a) { + return this.left.ka(a) || a(this.key, this.value) || this.right.ka(a) + }; + + function Lc(a) { + return a.left.e() ? a : Lc(a.left) + } + h.Vc = function() { + return Lc(this).key + }; + h.jc = function() { + return this.right.e() ? this.key : this.right.jc() + }; + h.Sa = function(a, b, c) { + var d, e; + e = this; + d = c(a, e.key); + e = 0 > d ? e.$(null, null, null, e.left.Sa(a, b, c), null) : 0 === d ? e.$(null, b, null, null, null) : e.$(null, null, null, null, e.right.Sa(a, b, c)); + return Mc(e) + }; + + function Nc(a) { + if (a.left.e()) return Fc; + a.left.ha() || a.left.left.ha() || (a = Oc(a)); + a = a.$(null, null, null, Nc(a.left), null); + return Mc(a) + } + h.remove = function(a, b) { + var c, d; + c = this; + if (0 > b(a, c.key)) c.left.e() || c.left.ha() || c.left.left.ha() || (c = Oc(c)), c = c.$(null, null, null, c.left.remove(a, b), null); + else { + c.left.ha() && (c = Pc(c)); + c.right.e() || c.right.ha() || c.right.left.ha() || (c = Qc(c), c.left.left.ha() && (c = Pc(c), c = Qc(c))); + if (0 === b(a, c.key)) { + if (c.right.e()) return Fc; + d = Lc(c.right); + c = c.$(d.key, d.value, null, null, Nc(c.right)) + } + c = c.$(null, null, null, null, c.right.remove(a, b)) + } + return Mc(c) + }; + h.ha = function() { + return this.color + }; + + function Mc(a) { + a.right.ha() && !a.left.ha() && (a = Rc(a)); + a.left.ha() && a.left.left.ha() && (a = Pc(a)); + a.left.ha() && a.right.ha() && (a = Qc(a)); + return a + } + + function Oc(a) { + a = Qc(a); + a.right.left.ha() && (a = a.$(null, null, null, null, Pc(a.right)), a = Rc(a), a = Qc(a)); + return a + } + + function Rc(a) { + return a.right.$(null, null, a.color, a.$(null, null, !0, null, a.right.left), null) + } + + function Pc(a) { + return a.left.$(null, null, a.color, null, a.$(null, null, !0, a.left.right, null)) + } + + function Qc(a) { + return a.$(null, null, !a.color, a.left.$(null, null, !a.left.color, null, null), a.right.$(null, null, !a.right.color, null, null)) + } + + function Sc() {} + h = Sc.prototype; + h.$ = function() { + return this + }; + h.Sa = function(a, b) { + return new Kc(a, b, null) + }; + h.remove = function() { + return this + }; + h.count = function() { + return 0 + }; + h.e = function() { + return !0 + }; + h.ka = function() { + return !1 + }; + h.Vc = function() { + return null + }; + h.jc = function() { + return null + }; + h.ha = function() { + return !1 + }; + var Fc = new Sc; + + function Tc(a, b) { + return a && "object" === typeof a ? (O(".sv" in a, "Unexpected leaf node or priority contents"), b[a[".sv"]]) : a + } + + function Uc(a, b) { + var c = new Vc; + Wc(a, new P(""), function(a, e) { + c.rc(a, Xc(e, b)) + }); + return c + } + + function Xc(a, b) { + var c = a.C().J(), + c = Tc(c, b), + d; + if (a.L()) { + var e = Tc(a.Ea(), b); + return e !== a.Ea() || c !== a.C().J() ? new Yc(e, Q(c)) : a + } + d = a; + c !== a.C().J() && (d = d.ia(new Yc(c))); + a.R(R, function(a, c) { + var e = Xc(c, b); + e !== c && (d = d.W(a, e)) + }); + return d + }; + + function Zc() { + this.Ac = {} + } + Zc.prototype.set = function(a, b) { + null == b ? delete this.Ac[a] : this.Ac[a] = b + }; + Zc.prototype.get = function(a) { + return y(this.Ac, a) ? this.Ac[a] : null + }; + Zc.prototype.remove = function(a) { + delete this.Ac[a] + }; + Zc.prototype.Af = !0; + + function $c(a) { + this.Ic = a; + this.Sd = "firebase:" + } + h = $c.prototype; + h.set = function(a, b) { + null == b ? this.Ic.removeItem(this.Sd + a) : this.Ic.setItem(this.Sd + a, G(b)) + }; + h.get = function(a) { + a = this.Ic.getItem(this.Sd + a); + return null == a ? null : Rb(a) + }; + h.remove = function(a) { + this.Ic.removeItem(this.Sd + a) + }; + h.Af = !1; + h.toString = function() { + return this.Ic.toString() + }; + + function ad(a) { + try { + if ("undefined" !== typeof window && "undefined" !== typeof window[a]) { + var b = window[a]; + b.setItem("firebase:sentinel", "cache"); + b.removeItem("firebase:sentinel"); + return new $c(b) + } + } catch (c) {} + return new Zc + } + var bd = ad("localStorage"), + cd = ad("sessionStorage"); + + function dd(a, b, c, d, e) { + this.host = a.toLowerCase(); + this.domain = this.host.substr(this.host.indexOf(".") + 1); + this.ob = b; + this.lc = c; + this.hh = d; + this.Rd = e || ""; + this.ab = bd.get("host:" + a) || this.host + } + + function ed(a, b) { + b !== a.ab && (a.ab = b, "s-" === a.ab.substr(0, 2) && bd.set("host:" + a.host, a.ab)) + } + + function fd(a, b, c) { + O("string" === typeof b, "typeof type must == string"); + O("object" === typeof c, "typeof params must == object"); + if (b === gd) b = (a.ob ? "wss://" : "ws://") + a.ab + "/.ws?"; + else if (b === hd) b = (a.ob ? "https://" : "http://") + a.ab + "/.lp?"; + else throw Error("Unknown connection type: " + b); + a.host !== a.ab && (c.ns = a.lc); + var d = []; + v(c, function(a, b) { + d.push(b + "=" + a) + }); + return b + d.join("&") + } + dd.prototype.toString = function() { + var a = (this.ob ? "https://" : "http://") + this.host; + this.Rd && (a += "<" + this.Rd + ">"); + return a + }; + var id = function() { + var a = 1; + return function() { + return a++ + } + }(), + O = Kb, + jd = Lb; + + function kd(a) { + try { + var b; + if ("undefined" !== typeof atob) b = atob(a); + else { + ob(); + for (var c = mb, d = [], e = 0; e < a.length;) { + var f = c[a.charAt(e++)], + g = e < a.length ? c[a.charAt(e)] : 0; + ++e; + var k = e < a.length ? c[a.charAt(e)] : 64; + ++e; + var m = e < a.length ? c[a.charAt(e)] : 64; + ++e; + if (null == f || null == g || null == k || null == m) throw Error(); + d.push(f << 2 | g >> 4); + 64 != k && (d.push(g << 4 & 240 | k >> 2), 64 != m && d.push(k << 6 & 192 | m)) + } + if (8192 > d.length) b = String.fromCharCode.apply(null, d); + else { + a = ""; + for (c = 0; c < d.length; c += 8192) a += String.fromCharCode.apply(null, Ua(d, c, + c + 8192)); + b = a + } + } + return b + } catch (l) { + fc("base64Decode failed: ", l) + } + return null + } + + function ld(a) { + var b = Ob(a); + a = new Ja; + a.update(b); + var b = [], + c = 8 * a.ge; + 56 > a.ec ? a.update(a.Od, 56 - a.ec) : a.update(a.Od, a.Ya - (a.ec - 56)); + for (var d = a.Ya - 1; 56 <= d; d--) a.pe[d] = c & 255, c /= 256; + Ka(a, a.pe); + for (d = c = 0; 5 > d; d++) + for (var e = 24; 0 <= e; e -= 8) b[c] = a.P[d] >> e & 255, ++c; + return nb(b) + } + + function md(a) { + for (var b = "", c = 0; c < arguments.length; c++) b = ea(arguments[c]) ? b + md.apply(null, arguments[c]) : "object" === typeof arguments[c] ? b + G(arguments[c]) : b + arguments[c], b += " "; + return b + } + var ec = null, + nd = !0; + + function od(a, b) { + Kb(!b || !0 === a || !1 === a, "Can't turn on custom loggers persistently."); + !0 === a ? ("undefined" !== typeof console && ("function" === typeof console.log ? ec = u(console.log, console) : "object" === typeof console.log && (ec = function(a) { + console.log(a) + })), b && cd.set("logging_enabled", !0)) : r(a) ? ec = a : (ec = null, cd.remove("logging_enabled")) + } + + function fc(a) { + !0 === nd && (nd = !1, null === ec && !0 === cd.get("logging_enabled") && od(!0)); + if (ec) { + var b = md.apply(null, arguments); + ec(b) + } + } + + function pd(a) { + return function() { + fc(a, arguments) + } + } + + function qd(a) { + if ("undefined" !== typeof console) { + var b = "FIREBASE INTERNAL ERROR: " + md.apply(null, arguments); + "undefined" !== typeof console.error ? console.error(b) : console.log(b) + } + } + + function rd(a) { + var b = md.apply(null, arguments); + throw Error("FIREBASE FATAL ERROR: " + b); + } + + function S(a) { + if ("undefined" !== typeof console) { + var b = "FIREBASE WARNING: " + md.apply(null, arguments); + "undefined" !== typeof console.warn ? console.warn(b) : console.log(b) + } + } + + function sd(a) { + var b = "", + c = "", + d = "", + e = "", + f = !0, + g = "https", + k = 443; + if (q(a)) { + var m = a.indexOf("//"); + 0 <= m && (g = a.substring(0, m - 1), a = a.substring(m + 2)); + m = a.indexOf("/"); - 1 === m && (m = a.length); + b = a.substring(0, m); + e = ""; + a = a.substring(m).split("/"); + for (m = 0; m < a.length; m++) + if (0 < a[m].length) { + var l = a[m]; + try { + l = decodeURIComponent(l.replace(/\+/g, " ")) + } catch (t) {} + e += "/" + l + } + a = b.split("."); + 3 === a.length ? (c = a[1], d = a[0].toLowerCase()) : 2 === a.length && (c = a[0]); + m = b.indexOf(":"); + 0 <= m && (f = "https" === g || "wss" === g, k = b.substring(m + 1), isFinite(k) && + (k = String(k)), k = q(k) ? /^\s*-?0x/i.test(k) ? parseInt(k, 16) : parseInt(k, 10) : NaN) + } + return { + host: b, + port: k, + domain: c, + eh: d, + ob: f, + scheme: g, + bd: e + } + } + + function td(a) { + return fa(a) && (a != a || a == Number.POSITIVE_INFINITY || a == Number.NEGATIVE_INFINITY) + } + + function ud(a) { + if ("complete" === document.readyState) a(); + else { + var b = !1, + c = function() { + document.body ? b || (b = !0, a()) : setTimeout(c, Math.floor(10)) + }; + document.addEventListener ? (document.addEventListener("DOMContentLoaded", c, !1), window.addEventListener("load", c, !1)) : document.attachEvent && (document.attachEvent("onreadystatechange", function() { + "complete" === document.readyState && c() + }), window.attachEvent("onload", c)) + } + } + + function yc(a, b) { + if (a === b) return 0; + if ("[MIN_NAME]" === a || "[MAX_NAME]" === b) return -1; + if ("[MIN_NAME]" === b || "[MAX_NAME]" === a) return 1; + var c = vd(a), + d = vd(b); + return null !== c ? null !== d ? 0 == c - d ? a.length - b.length : c - d : -1 : null !== d ? 1 : a < b ? -1 : 1 + } + + function wd(a, b) { + if (b && a in b) return b[a]; + throw Error("Missing required key (" + a + ") in object: " + G(b)); + } + + function xd(a) { + if ("object" !== typeof a || null === a) return G(a); + var b = [], + c; + for (c in a) b.push(c); + b.sort(); + c = "{"; + for (var d = 0; d < b.length; d++) 0 !== d && (c += ","), c += G(b[d]), c += ":", c += xd(a[b[d]]); + return c + "}" + } + + function yd(a, b) { + if (a.length <= b) return [a]; + for (var c = [], d = 0; d < a.length; d += b) d + b > a ? c.push(a.substring(d, a.length)) : c.push(a.substring(d, d + b)); + return c + } + + function zd(a, b) { + if (da(a)) + for (var c = 0; c < a.length; ++c) b(c, a[c]); + else v(a, b) + } + + function Ad(a) { + O(!td(a), "Invalid JSON number"); + var b, c, d, e; + 0 === a ? (d = c = 0, b = -Infinity === 1 / a ? 1 : 0) : (b = 0 > a, a = Math.abs(a), a >= Math.pow(2, -1022) ? (d = Math.min(Math.floor(Math.log(a) / Math.LN2), 1023), c = d + 1023, d = Math.round(a * Math.pow(2, 52 - d) - Math.pow(2, 52))) : (c = 0, d = Math.round(a / Math.pow(2, -1074)))); + e = []; + for (a = 52; a; --a) e.push(d % 2 ? 1 : 0), d = Math.floor(d / 2); + for (a = 11; a; --a) e.push(c % 2 ? 1 : 0), c = Math.floor(c / 2); + e.push(b ? 1 : 0); + e.reverse(); + b = e.join(""); + c = ""; + for (a = 0; 64 > a; a += 8) d = parseInt(b.substr(a, 8), 2).toString(16), 1 === d.length && + (d = "0" + d), c += d; + return c.toLowerCase() + } + var Bd = /^-?\d{1,10}$/; + + function vd(a) { + return Bd.test(a) && (a = Number(a), -2147483648 <= a && 2147483647 >= a) ? a : null + } + + function gc(a) { + try { + a() + } catch (b) { + setTimeout(function() { + S("Exception was thrown by user callback.", b.stack || ""); + throw b; + }, Math.floor(0)) + } + } + + function T(a, b) { + if (r(a)) { + var c = Array.prototype.slice.call(arguments, 1).slice(); + gc(function() { + a.apply(null, c) + }) + } + }; + + function Cd(a) { + var b = {}, + c = {}, + d = {}, + e = ""; + try { + var f = a.split("."), + b = Rb(kd(f[0]) || ""), + c = Rb(kd(f[1]) || ""), + e = f[2], + d = c.d || {}; + delete c.d + } catch (g) {} + return { + kh: b, + Ec: c, + data: d, + ah: e + } + } + + function Dd(a) { + a = Cd(a).Ec; + return "object" === typeof a && a.hasOwnProperty("iat") ? z(a, "iat") : null + } + + function Ed(a) { + a = Cd(a); + var b = a.Ec; + return !!a.ah && !!b && "object" === typeof b && b.hasOwnProperty("iat") + }; + + function Fd(a) { + this.Y = a; + this.g = a.n.g + } + + function Gd(a, b, c, d) { + var e = [], + f = []; + Ma(b, function(b) { + "child_changed" === b.type && a.g.Dd(b.Oe, b.Na) && f.push(new J("child_moved", b.Na, b.Za)) + }); + Hd(a, e, "child_removed", b, d, c); + Hd(a, e, "child_added", b, d, c); + Hd(a, e, "child_moved", f, d, c); + Hd(a, e, "child_changed", b, d, c); + Hd(a, e, ic, b, d, c); + return e + } + + function Hd(a, b, c, d, e, f) { + d = Na(d, function(a) { + return a.type === c + }); + Va(d, u(a.qg, a)); + Ma(d, function(c) { + var d = Id(a, c, f); + Ma(e, function(e) { + e.Qf(c.type) && b.push(e.createEvent(d, a.Y)) + }) + }) + } + + function Id(a, b, c) { + "value" !== b.type && "child_removed" !== b.type && (b.Td = c.wf(b.Za, b.Na, a.g)); + return b + } + Fd.prototype.qg = function(a, b) { + if (null == a.Za || null == b.Za) throw jd("Should only compare child_ events."); + return this.g.compare(new L(a.Za, a.Na), new L(b.Za, b.Na)) + }; + + function Jd() { + this.ib = {} + } + + function Kd(a, b) { + var c = b.type, + d = b.Za; + O("child_added" == c || "child_changed" == c || "child_removed" == c, "Only child changes supported for tracking"); + O(".priority" !== d, "Only non-priority child changes can be tracked."); + var e = z(a.ib, d); + if (e) { + var f = e.type; + if ("child_added" == c && "child_removed" == f) a.ib[d] = new J("child_changed", b.Na, d, e.Na); + else if ("child_removed" == c && "child_added" == f) delete a.ib[d]; + else if ("child_removed" == c && "child_changed" == f) a.ib[d] = new J("child_removed", e.Oe, d); + else if ("child_changed" == c && + "child_added" == f) a.ib[d] = new J("child_added", b.Na, d); + else if ("child_changed" == c && "child_changed" == f) a.ib[d] = new J("child_changed", b.Na, d, e.Oe); + else throw jd("Illegal combination of changes: " + b + " occurred after " + e); + } else a.ib[d] = b + }; + + function Ld(a) { + this.g = a + } + h = Ld.prototype; + h.H = function(a, b, c, d, e, f) { + O(a.Mc(this.g), "A node must be indexed if only a child is updated"); + e = a.T(b); + if (e.S(d).ea(c.S(d)) && e.e() == c.e()) return a; + null != f && (c.e() ? a.Fa(b) ? Kd(f, new J("child_removed", e, b)) : O(a.L(), "A child remove without an old child only makes sense on a leaf node") : e.e() ? Kd(f, new J("child_added", c, b)) : Kd(f, new J("child_changed", c, b, e))); + return a.L() && c.e() ? a : a.W(b, c).pb(this.g) + }; + h.ya = function(a, b, c) { + null != c && (a.L() || a.R(R, function(a, e) { + b.Fa(a) || Kd(c, new J("child_removed", e, a)) + }), b.L() || b.R(R, function(b, e) { + if (a.Fa(b)) { + var f = a.T(b); + f.ea(e) || Kd(c, new J("child_changed", e, b, f)) + } else Kd(c, new J("child_added", e, b)) + })); + return b.pb(this.g) + }; + h.ia = function(a, b) { + return a.e() ? H : a.ia(b) + }; + h.Ra = function() { + return !1 + }; + h.$b = function() { + return this + }; + + function Md(a) { + this.Fe = new Ld(a.g); + this.g = a.g; + var b; + a.oa ? (b = Nd(a), b = a.g.Sc(Od(a), b)) : b = a.g.Wc(); + this.gd = b; + a.ra ? (b = Pd(a), a = a.g.Sc(Rd(a), b)) : a = a.g.Tc(); + this.Jc = a + } + h = Md.prototype; + h.matches = function(a) { + return 0 >= this.g.compare(this.gd, a) && 0 >= this.g.compare(a, this.Jc) + }; + h.H = function(a, b, c, d, e, f) { + this.matches(new L(b, c)) || (c = H); + return this.Fe.H(a, b, c, d, e, f) + }; + h.ya = function(a, b, c) { + b.L() && (b = H); + var d = b.pb(this.g), + d = d.ia(H), + e = this; + b.R(R, function(a, b) { + e.matches(new L(a, b)) || (d = d.W(a, H)) + }); + return this.Fe.ya(a, d, c) + }; + h.ia = function(a) { + return a + }; + h.Ra = function() { + return !0 + }; + h.$b = function() { + return this.Fe + }; + + function Sd(a) { + this.ua = new Md(a); + this.g = a.g; + O(a.la, "Only valid if limit has been set"); + this.ma = a.ma; + this.Nb = !Td(a) + } + h = Sd.prototype; + h.H = function(a, b, c, d, e, f) { + this.ua.matches(new L(b, c)) || (c = H); + return a.T(b).ea(c) ? a : a.Hb() < this.ma ? this.ua.$b().H(a, b, c, d, e, f) : Ud(this, a, b, c, e, f) + }; + h.ya = function(a, b, c) { + var d; + if (b.L() || b.e()) d = H.pb(this.g); + else if (2 * this.ma < b.Hb() && b.Mc(this.g)) { + d = H.pb(this.g); + b = this.Nb ? b.dc(this.ua.Jc, this.g) : b.bc(this.ua.gd, this.g); + for (var e = 0; 0 < b.Ta.length && e < this.ma;) { + var f = Ic(b), + g; + if (g = this.Nb ? 0 >= this.g.compare(this.ua.gd, f) : 0 >= this.g.compare(f, this.ua.Jc)) d = d.W(f.name, f.U), e++; + else break + } + } else { + d = b.pb(this.g); + d = d.ia(H); + var k, m, l; + if (this.Nb) { + b = d.xf(this.g); + k = this.ua.Jc; + m = this.ua.gd; + var t = Vd(this.g); + l = function(a, b) { + return t(b, a) + } + } else b = d.ac(this.g), k = this.ua.gd, + m = this.ua.Jc, l = Vd(this.g); + for (var e = 0, A = !1; 0 < b.Ta.length;) f = Ic(b), !A && 0 >= l(k, f) && (A = !0), (g = A && e < this.ma && 0 >= l(f, m)) ? e++ : d = d.W(f.name, H) + } + return this.ua.$b().ya(a, d, c) + }; + h.ia = function(a) { + return a + }; + h.Ra = function() { + return !0 + }; + h.$b = function() { + return this.ua.$b() + }; + + function Ud(a, b, c, d, e, f) { + var g; + if (a.Nb) { + var k = Vd(a.g); + g = function(a, b) { + return k(b, a) + } + } else g = Vd(a.g); + O(b.Hb() == a.ma, ""); + var m = new L(c, d), + l = a.Nb ? Wd(b, a.g) : Xd(b, a.g), + t = a.ua.matches(m); + if (b.Fa(c)) { + for (var A = b.T(c), l = e.Ce(a.g, l, a.Nb); null != l && (l.name == c || b.Fa(l.name));) l = e.Ce(a.g, l, a.Nb); + e = null == l ? 1 : g(l, m); + if (t && !d.e() && 0 <= e) return null != f && Kd(f, new J("child_changed", d, c, A)), b.W(c, d); + null != f && Kd(f, new J("child_removed", A, c)); + b = b.W(c, H); + return null != l && a.ua.matches(l) ? (null != f && Kd(f, new J("child_added", + l.U, l.name)), b.W(l.name, l.U)) : b + } + return d.e() ? b : t && 0 <= g(l, m) ? (null != f && (Kd(f, new J("child_removed", l.U, l.name)), Kd(f, new J("child_added", d, c))), b.W(c, d).W(l.name, H)) : b + }; + + function Yd(a, b) { + this.me = a; + this.og = b + } + + function Zd(a) { + this.X = a + } + Zd.prototype.gb = function(a, b, c, d) { + var e = new Jd, + f; + if (b.type === Bc) b.source.Ae ? c = $d(this, a, b.path, b.Ja, c, d, e) : (O(b.source.tf, "Unknown source."), f = b.source.ef || mc(a.w()) && !b.path.e(), c = ae(this, a, b.path, b.Ja, c, d, f, e)); + else if (b.type === be) b.source.Ae ? c = ce(this, a, b.path, b.children, c, d, e) : (O(b.source.tf, "Unknown source."), f = b.source.ef || mc(a.w()), c = de(this, a, b.path, b.children, c, d, f, e)); + else if (b.type === ee) + if (b.Yd) + if (b = b.path, null != c.xc(b)) c = a; + else { + f = new Vb(c, a, d); + d = a.Q.j(); + if (b.e() || ".priority" === K(b)) lc(a.w()) ? + b = c.Aa(Yb(a)) : (b = a.w().j(), O(b instanceof fe, "serverChildren would be complete if leaf node"), b = c.Cc(b)), b = this.X.ya(d, b, e); + else { + var g = K(b), + k = c.Bc(g, a.w()); + null == k && Wb(a.w(), g) && (k = d.T(g)); + b = null != k ? this.X.H(d, g, k, N(b), f, e) : a.Q.j().Fa(g) ? this.X.H(d, g, H, N(b), f, e) : d; + b.e() && lc(a.w()) && (d = c.Aa(Yb(a)), d.L() && (b = this.X.ya(b, d, e))) + } + d = lc(a.w()) || null != c.xc(M); + c = ge(a, b, d, this.X.Ra()) + } else c = he(this, a, b.path, b.Ub, c, d, e); + else if (b.type === Dc) d = b.path, b = a.w(), f = b.j(), g = b.ga || d.e(), c = ie(this, new je(a.Q, new Xb(f, + g, b.Yb)), d, c, Ub, e); + else throw jd("Unknown operation type: " + b.type); + e = qa(e.ib); + d = c; + b = d.Q; + b.ga && (f = b.j().L() || b.j().e(), g = ke(a), (0 < e.length || !a.Q.ga || f && !b.j().ea(g) || !b.j().C().ea(g.C())) && e.push(hc(ke(d)))); + return new Yd(c, e) + }; + + function ie(a, b, c, d, e, f) { + var g = b.Q; + if (null != d.xc(c)) return b; + var k; + if (c.e()) O(lc(b.w()), "If change path is empty, we must have complete server data"), mc(b.w()) ? (e = Yb(b), d = d.Cc(e instanceof fe ? e : H)) : d = d.Aa(Yb(b)), f = a.X.ya(b.Q.j(), d, f); + else { + var m = K(c); + if (".priority" == m) O(1 == le(c), "Can't have a priority with additional path components"), f = g.j(), k = b.w().j(), d = d.nd(c, f, k), f = null != d ? a.X.ia(f, d) : g.j(); + else { + var l = N(c); + Wb(g, m) ? (k = b.w().j(), d = d.nd(c, g.j(), k), d = null != d ? g.j().T(m).H(l, d) : g.j().T(m)) : d = d.Bc(m, + b.w()); + f = null != d ? a.X.H(g.j(), m, d, l, e, f) : g.j() + } + } + return ge(b, f, g.ga || c.e(), a.X.Ra()) + } + + function ae(a, b, c, d, e, f, g, k) { + var m = b.w(); + g = g ? a.X : a.X.$b(); + if (c.e()) d = g.ya(m.j(), d, null); + else if (g.Ra() && !m.Yb) d = m.j().H(c, d), d = g.ya(m.j(), d, null); + else { + var l = K(c); + if (!nc(m, c) && 1 < le(c)) return b; + var t = N(c); + d = m.j().T(l).H(t, d); + d = ".priority" == l ? g.ia(m.j(), d) : g.H(m.j(), l, d, t, Ub, null) + } + m = m.ga || c.e(); + b = new je(b.Q, new Xb(d, m, g.Ra())); + return ie(a, b, c, e, new Vb(e, b, f), k) + } + + function $d(a, b, c, d, e, f, g) { + var k = b.Q; + e = new Vb(e, b, f); + if (c.e()) g = a.X.ya(b.Q.j(), d, g), a = ge(b, g, !0, a.X.Ra()); + else if (f = K(c), ".priority" === f) g = a.X.ia(b.Q.j(), d), a = ge(b, g, k.ga, k.Yb); + else { + c = N(c); + var m = k.j().T(f); + if (!c.e()) { + var l = e.uf(f); + d = null != l ? ".priority" === me(c) && l.S(c.parent()).e() ? l : l.H(c, d) : H + } + m.ea(d) ? a = b : (g = a.X.H(k.j(), f, d, c, e, g), a = ge(b, g, k.ga, a.X.Ra())) + } + return a + } + + function ce(a, b, c, d, e, f, g) { + var k = b; + ne(d, function(d, l) { + var t = c.o(d); + Wb(b.Q, K(t)) && (k = $d(a, k, t, l, e, f, g)) + }); + ne(d, function(d, l) { + var t = c.o(d); + Wb(b.Q, K(t)) || (k = $d(a, k, t, l, e, f, g)) + }); + return k + } + + function oe(a, b) { + ne(b, function(b, d) { + a = a.H(b, d) + }); + return a + } + + function de(a, b, c, d, e, f, g, k) { + if (b.w().j().e() && !lc(b.w())) return b; + var m = b; + c = c.e() ? d : pe(qe, c, d); + var l = b.w().j(); + c.children.ka(function(c, d) { + if (l.Fa(c)) { + var I = b.w().j().T(c), + I = oe(I, d); + m = ae(a, m, new P(c), I, e, f, g, k) + } + }); + c.children.ka(function(c, d) { + var I = !Wb(b.w(), c) && null == d.value; + l.Fa(c) || I || (I = b.w().j().T(c), I = oe(I, d), m = ae(a, m, new P(c), I, e, f, g, k)) + }); + return m + } + + function he(a, b, c, d, e, f, g) { + if (null != e.xc(c)) return b; + var k = mc(b.w()), + m = b.w(); + if (null != d.value) { + if (c.e() && m.ga || nc(m, c)) return ae(a, b, c, m.j().S(c), e, f, k, g); + if (c.e()) { + var l = qe; + m.j().R(re, function(a, b) { + l = l.set(new P(a), b) + }); + return de(a, b, c, l, e, f, k, g) + } + return b + } + l = qe; + ne(d, function(a) { + var b = c.o(a); + nc(m, b) && (l = l.set(a, m.j().S(b))) + }); + return de(a, b, c, l, e, f, k, g) + }; + + function se() {} + var te = {}; + + function Vd(a) { + return u(a.compare, a) + } + se.prototype.Dd = function(a, b) { + return 0 !== this.compare(new L("[MIN_NAME]", a), new L("[MIN_NAME]", b)) + }; + se.prototype.Wc = function() { + return ue + }; + + function ve(a) { + O(!a.e() && ".priority" !== K(a), "Can't create PathIndex with empty path or .priority key"); + this.gc = a + } + ka(ve, se); + h = ve.prototype; + h.Lc = function(a) { + return !a.S(this.gc).e() + }; + h.compare = function(a, b) { + var c = a.U.S(this.gc), + d = b.U.S(this.gc), + c = c.Gc(d); + return 0 === c ? yc(a.name, b.name) : c + }; + h.Sc = function(a, b) { + var c = Q(a), + c = H.H(this.gc, c); + return new L(b, c) + }; + h.Tc = function() { + var a = H.H(this.gc, we); + return new L("[MAX_NAME]", a) + }; + h.toString = function() { + return this.gc.slice().join("/") + }; + + function xe() {} + ka(xe, se); + h = xe.prototype; + h.compare = function(a, b) { + var c = a.U.C(), + d = b.U.C(), + c = c.Gc(d); + return 0 === c ? yc(a.name, b.name) : c + }; + h.Lc = function(a) { + return !a.C().e() + }; + h.Dd = function(a, b) { + return !a.C().ea(b.C()) + }; + h.Wc = function() { + return ue + }; + h.Tc = function() { + return new L("[MAX_NAME]", new Yc("[PRIORITY-POST]", we)) + }; + h.Sc = function(a, b) { + var c = Q(a); + return new L(b, new Yc("[PRIORITY-POST]", c)) + }; + h.toString = function() { + return ".priority" + }; + var R = new xe; + + function ye() {} + ka(ye, se); + h = ye.prototype; + h.compare = function(a, b) { + return yc(a.name, b.name) + }; + h.Lc = function() { + throw jd("KeyIndex.isDefinedOn not expected to be called."); + }; + h.Dd = function() { + return !1 + }; + h.Wc = function() { + return ue + }; + h.Tc = function() { + return new L("[MAX_NAME]", H) + }; + h.Sc = function(a) { + O(q(a), "KeyIndex indexValue must always be a string."); + return new L(a, H) + }; + h.toString = function() { + return ".key" + }; + var re = new ye; + + function ze() {} + ka(ze, se); + h = ze.prototype; + h.compare = function(a, b) { + var c = a.U.Gc(b.U); + return 0 === c ? yc(a.name, b.name) : c + }; + h.Lc = function() { + return !0 + }; + h.Dd = function(a, b) { + return !a.ea(b) + }; + h.Wc = function() { + return ue + }; + h.Tc = function() { + return Ae + }; + h.Sc = function(a, b) { + var c = Q(a); + return new L(b, c) + }; + h.toString = function() { + return ".value" + }; + var Be = new ze; + + function Ce() { + this.Xb = this.ra = this.Pb = this.oa = this.la = !1; + this.ma = 0; + this.Rb = ""; + this.ic = null; + this.Bb = ""; + this.fc = null; + this.zb = ""; + this.g = R + } + var De = new Ce; + + function Td(a) { + return "" === a.Rb ? a.oa : "l" === a.Rb + } + + function Od(a) { + O(a.oa, "Only valid if start has been set"); + return a.ic + } + + function Nd(a) { + O(a.oa, "Only valid if start has been set"); + return a.Pb ? a.Bb : "[MIN_NAME]" + } + + function Rd(a) { + O(a.ra, "Only valid if end has been set"); + return a.fc + } + + function Pd(a) { + O(a.ra, "Only valid if end has been set"); + return a.Xb ? a.zb : "[MAX_NAME]" + } + + function Ee(a) { + var b = new Ce; + b.la = a.la; + b.ma = a.ma; + b.oa = a.oa; + b.ic = a.ic; + b.Pb = a.Pb; + b.Bb = a.Bb; + b.ra = a.ra; + b.fc = a.fc; + b.Xb = a.Xb; + b.zb = a.zb; + b.g = a.g; + return b + } + h = Ce.prototype; + h.Le = function(a) { + var b = Ee(this); + b.la = !0; + b.ma = a; + b.Rb = ""; + return b + }; + h.Me = function(a) { + var b = Ee(this); + b.la = !0; + b.ma = a; + b.Rb = "l"; + return b + }; + h.Ne = function(a) { + var b = Ee(this); + b.la = !0; + b.ma = a; + b.Rb = "r"; + return b + }; + h.ce = function(a, b) { + var c = Ee(this); + c.oa = !0; + p(a) || (a = null); + c.ic = a; + null != b ? (c.Pb = !0, c.Bb = b) : (c.Pb = !1, c.Bb = ""); + return c + }; + h.vd = function(a, b) { + var c = Ee(this); + c.ra = !0; + p(a) || (a = null); + c.fc = a; + p(b) ? (c.Xb = !0, c.zb = b) : (c.mh = !1, c.zb = ""); + return c + }; + + function Fe(a, b) { + var c = Ee(a); + c.g = b; + return c + } + + function Ge(a) { + var b = {}; + a.oa && (b.sp = a.ic, a.Pb && (b.sn = a.Bb)); + a.ra && (b.ep = a.fc, a.Xb && (b.en = a.zb)); + if (a.la) { + b.l = a.ma; + var c = a.Rb; + "" === c && (c = Td(a) ? "l" : "r"); + b.vf = c + } + a.g !== R && (b.i = a.g.toString()); + return b + } + + function He(a) { + return !(a.oa || a.ra || a.la) + } + + function Ie(a) { + return He(a) && a.g == R + } + + function Je(a) { + var b = {}; + if (Ie(a)) return b; + var c; + a.g === R ? c = "$priority" : a.g === Be ? c = "$value" : a.g === re ? c = "$key" : (O(a.g instanceof ve, "Unrecognized index type!"), c = a.g.toString()); + b.orderBy = G(c); + a.oa && (b.startAt = G(a.ic), a.Pb && (b.startAt += "," + G(a.Bb))); + a.ra && (b.endAt = G(a.fc), a.Xb && (b.endAt += "," + G(a.zb))); + a.la && (Td(a) ? b.limitToFirst = a.ma : b.limitToLast = a.ma); + return b + } + h.toString = function() { + return G(Ge(this)) + }; + + function Ke(a, b) { + this.Ed = a; + this.hc = b + } + Ke.prototype.get = function(a) { + var b = z(this.Ed, a); + if (!b) throw Error("No index defined for " + a); + return b === te ? null : b + }; + + function Le(a, b, c) { + var d = ma(a.Ed, function(d, f) { + var g = z(a.hc, f); + O(g, "Missing index implementation for " + f); + if (d === te) { + if (g.Lc(b.U)) { + for (var k = [], m = c.ac(wc), l = Ic(m); l;) l.name != b.name && k.push(l), l = Ic(m); + k.push(b); + return Me(k, Vd(g)) + } + return te + } + g = c.get(b.name); + k = d; + g && (k = k.remove(new L(b.name, g))); + return k.Sa(b, b.U) + }); + return new Ke(d, a.hc) + } + + function Ne(a, b, c) { + var d = ma(a.Ed, function(a) { + if (a === te) return a; + var d = c.get(b.name); + return d ? a.remove(new L(b.name, d)) : a + }); + return new Ke(d, a.hc) + } + var Oe = new Ke({ + ".priority": te + }, { + ".priority": R + }); + + function Yc(a, b) { + this.B = a; + O(p(this.B) && null !== this.B, "LeafNode shouldn't be created with null/undefined value."); + this.ca = b || H; + Pe(this.ca); + this.Gb = null + } + var Qe = ["object", "boolean", "number", "string"]; + h = Yc.prototype; + h.L = function() { + return !0 + }; + h.C = function() { + return this.ca + }; + h.ia = function(a) { + return new Yc(this.B, a) + }; + h.T = function(a) { + return ".priority" === a ? this.ca : H + }; + h.S = function(a) { + return a.e() ? this : ".priority" === K(a) ? this.ca : H + }; + h.Fa = function() { + return !1 + }; + h.wf = function() { + return null + }; + h.W = function(a, b) { + return ".priority" === a ? this.ia(b) : b.e() && ".priority" !== a ? this : H.W(a, b).ia(this.ca) + }; + h.H = function(a, b) { + var c = K(a); + if (null === c) return b; + if (b.e() && ".priority" !== c) return this; + O(".priority" !== c || 1 === le(a), ".priority must be the last token in a path"); + return this.W(c, H.H(N(a), b)) + }; + h.e = function() { + return !1 + }; + h.Hb = function() { + return 0 + }; + h.R = function() { + return !1 + }; + h.J = function(a) { + return a && !this.C().e() ? { + ".value": this.Ea(), + ".priority": this.C().J() + } : this.Ea() + }; + h.hash = function() { + if (null === this.Gb) { + var a = ""; + this.ca.e() || (a += "priority:" + Re(this.ca.J()) + ":"); + var b = typeof this.B, + a = a + (b + ":"), + a = "number" === b ? a + Ad(this.B) : a + this.B; + this.Gb = ld(a) + } + return this.Gb + }; + h.Ea = function() { + return this.B + }; + h.Gc = function(a) { + if (a === H) return 1; + if (a instanceof fe) return -1; + O(a.L(), "Unknown node type"); + var b = typeof a.B, + c = typeof this.B, + d = La(Qe, b), + e = La(Qe, c); + O(0 <= d, "Unknown leaf type: " + b); + O(0 <= e, "Unknown leaf type: " + c); + return d === e ? "object" === c ? 0 : this.B < a.B ? -1 : this.B === a.B ? 0 : 1 : e - d + }; + h.pb = function() { + return this + }; + h.Mc = function() { + return !0 + }; + h.ea = function(a) { + return a === this ? !0 : a.L() ? this.B === a.B && this.ca.ea(a.ca) : !1 + }; + h.toString = function() { + return G(this.J(!0)) + }; + + function fe(a, b, c) { + this.m = a; + (this.ca = b) && Pe(this.ca); + a.e() && O(!this.ca || this.ca.e(), "An empty node cannot have a priority"); + this.Ab = c; + this.Gb = null + } + h = fe.prototype; + h.L = function() { + return !1 + }; + h.C = function() { + return this.ca || H + }; + h.ia = function(a) { + return this.m.e() ? this : new fe(this.m, a, this.Ab) + }; + h.T = function(a) { + if (".priority" === a) return this.C(); + a = this.m.get(a); + return null === a ? H : a + }; + h.S = function(a) { + var b = K(a); + return null === b ? this : this.T(b).S(N(a)) + }; + h.Fa = function(a) { + return null !== this.m.get(a) + }; + h.W = function(a, b) { + O(b, "We should always be passing snapshot nodes"); + if (".priority" === a) return this.ia(b); + var c = new L(a, b), + d, e; + b.e() ? (d = this.m.remove(a), c = Ne(this.Ab, c, this.m)) : (d = this.m.Sa(a, b), c = Le(this.Ab, c, this.m)); + e = d.e() ? H : this.ca; + return new fe(d, e, c) + }; + h.H = function(a, b) { + var c = K(a); + if (null === c) return b; + O(".priority" !== K(a) || 1 === le(a), ".priority must be the last token in a path"); + var d = this.T(c).H(N(a), b); + return this.W(c, d) + }; + h.e = function() { + return this.m.e() + }; + h.Hb = function() { + return this.m.count() + }; + var Se = /^(0|[1-9]\d*)$/; + h = fe.prototype; + h.J = function(a) { + if (this.e()) return null; + var b = {}, + c = 0, + d = 0, + e = !0; + this.R(R, function(f, g) { + b[f] = g.J(a); + c++; + e && Se.test(f) ? d = Math.max(d, Number(f)) : e = !1 + }); + if (!a && e && d < 2 * c) { + var f = [], + g; + for (g in b) f[g] = b[g]; + return f + } + a && !this.C().e() && (b[".priority"] = this.C().J()); + return b + }; + h.hash = function() { + if (null === this.Gb) { + var a = ""; + this.C().e() || (a += "priority:" + Re(this.C().J()) + ":"); + this.R(R, function(b, c) { + var d = c.hash(); + "" !== d && (a += ":" + b + ":" + d) + }); + this.Gb = "" === a ? "" : ld(a) + } + return this.Gb + }; + h.wf = function(a, b, c) { + return (c = Te(this, c)) ? (a = Gc(c, new L(a, b))) ? a.name : null : Gc(this.m, a) + }; + + function Wd(a, b) { + var c; + c = (c = Te(a, b)) ? (c = c.Vc()) && c.name : a.m.Vc(); + return c ? new L(c, a.m.get(c)) : null + } + + function Xd(a, b) { + var c; + c = (c = Te(a, b)) ? (c = c.jc()) && c.name : a.m.jc(); + return c ? new L(c, a.m.get(c)) : null + } + h.R = function(a, b) { + var c = Te(this, a); + return c ? c.ka(function(a) { + return b(a.name, a.U) + }) : this.m.ka(b) + }; + h.ac = function(a) { + return this.bc(a.Wc(), a) + }; + h.bc = function(a, b) { + var c = Te(this, b); + if (c) return c.bc(a, function(a) { + return a + }); + for (var c = this.m.bc(a.name, wc), d = Jc(c); null != d && 0 > b.compare(d, a);) Ic(c), d = Jc(c); + return c + }; + h.xf = function(a) { + return this.dc(a.Tc(), a) + }; + h.dc = function(a, b) { + var c = Te(this, b); + if (c) return c.dc(a, function(a) { + return a + }); + for (var c = this.m.dc(a.name, wc), d = Jc(c); null != d && 0 < b.compare(d, a);) Ic(c), d = Jc(c); + return c + }; + h.Gc = function(a) { + return this.e() ? a.e() ? 0 : -1 : a.L() || a.e() ? 1 : a === we ? -1 : 0 + }; + h.pb = function(a) { + if (a === re || sa(this.Ab.hc, a.toString())) return this; + var b = this.Ab, + c = this.m; + O(a !== re, "KeyIndex always exists and isn't meant to be added to the IndexMap."); + for (var d = [], e = !1, c = c.ac(wc), f = Ic(c); f;) e = e || a.Lc(f.U), d.push(f), f = Ic(c); + d = e ? Me(d, Vd(a)) : te; + e = a.toString(); + c = wa(b.hc); + c[e] = a; + a = wa(b.Ed); + a[e] = d; + return new fe(this.m, this.ca, new Ke(a, c)) + }; + h.Mc = function(a) { + return a === re || sa(this.Ab.hc, a.toString()) + }; + h.ea = function(a) { + if (a === this) return !0; + if (a.L()) return !1; + if (this.C().ea(a.C()) && this.m.count() === a.m.count()) { + var b = this.ac(R); + a = a.ac(R); + for (var c = Ic(b), d = Ic(a); c && d;) { + if (c.name !== d.name || !c.U.ea(d.U)) return !1; + c = Ic(b); + d = Ic(a) + } + return null === c && null === d + } + return !1 + }; + + function Te(a, b) { + return b === re ? null : a.Ab.get(b.toString()) + } + h.toString = function() { + return G(this.J(!0)) + }; + + function Q(a, b) { + if (null === a) return H; + var c = null; + "object" === typeof a && ".priority" in a ? c = a[".priority"] : "undefined" !== typeof b && (c = b); + O(null === c || "string" === typeof c || "number" === typeof c || "object" === typeof c && ".sv" in c, "Invalid priority type found: " + typeof c); + "object" === typeof a && ".value" in a && null !== a[".value"] && (a = a[".value"]); + if ("object" !== typeof a || ".sv" in a) return new Yc(a, Q(c)); + if (a instanceof Array) { + var d = H, + e = a; + v(e, function(a, b) { + if (y(e, b) && "." !== b.substring(0, 1)) { + var c = Q(a); + if (c.L() || !c.e()) d = + d.W(b, c) + } + }); + return d.ia(Q(c)) + } + var f = [], + g = !1, + k = a; + Fb(k, function(a) { + if ("string" !== typeof a || "." !== a.substring(0, 1)) { + var b = Q(k[a]); + b.e() || (g = g || !b.C().e(), f.push(new L(a, b))) + } + }); + if (0 == f.length) return H; + var m = Me(f, xc, function(a) { + return a.name + }, zc); + if (g) { + var l = Me(f, Vd(R)); + return new fe(m, Q(c), new Ke({ + ".priority": l + }, { + ".priority": R + })) + } + return new fe(m, Q(c), Oe) + } + var Ue = Math.log(2); + + function Ve(a) { + this.count = parseInt(Math.log(a + 1) / Ue, 10); + this.nf = this.count - 1; + this.ng = a + 1 & parseInt(Array(this.count + 1).join("1"), 2) + } + + function We(a) { + var b = !(a.ng & 1 << a.nf); + a.nf--; + return b + } + + function Me(a, b, c, d) { + function e(b, d) { + var f = d - b; + if (0 == f) return null; + if (1 == f) { + var l = a[b], + t = c ? c(l) : l; + return new Kc(t, l.U, !1, null, null) + } + var l = parseInt(f / 2, 10) + b, + f = e(b, l), + A = e(l + 1, d), + l = a[l], + t = c ? c(l) : l; + return new Kc(t, l.U, !1, f, A) + } + a.sort(b); + var f = function(b) { + function d(b, g) { + var k = t - b, + A = t; + t -= b; + var A = e(k + 1, A), + k = a[k], + I = c ? c(k) : k, + A = new Kc(I, k.U, g, null, A); + f ? f.left = A : l = A; + f = A + } + for (var f = null, l = null, t = a.length, A = 0; A < b.count; ++A) { + var I = We(b), + Qd = Math.pow(2, b.count - (A + 1)); + I ? d(Qd, !1) : (d(Qd, !1), d(Qd, !0)) + } + return l + }(new Ve(a.length)); + return null !== f ? new Ec(d || b, f) : new Ec(d || b) + } + + function Re(a) { + return "number" === typeof a ? "number:" + Ad(a) : "string:" + a + } + + function Pe(a) { + if (a.L()) { + var b = a.J(); + O("string" === typeof b || "number" === typeof b || "object" === typeof b && y(b, ".sv"), "Priority must be a string or number.") + } else O(a === we || a.e(), "priority of unexpected type."); + O(a === we || a.C().e(), "Priority nodes can't have a priority of their own.") + } + var H = new fe(new Ec(zc), null, Oe); + + function Xe() { + fe.call(this, new Ec(zc), H, Oe) + } + ka(Xe, fe); + h = Xe.prototype; + h.Gc = function(a) { + return a === this ? 0 : 1 + }; + h.ea = function(a) { + return a === this + }; + h.C = function() { + return this + }; + h.T = function() { + return H + }; + h.e = function() { + return !1 + }; + var we = new Xe, + ue = new L("[MIN_NAME]", H), + Ae = new L("[MAX_NAME]", we); + + function je(a, b) { + this.Q = a; + this.ae = b + } + + function ge(a, b, c, d) { + return new je(new Xb(b, c, d), a.ae) + } + + function ke(a) { + return a.Q.ga ? a.Q.j() : null + } + je.prototype.w = function() { + return this.ae + }; + + function Yb(a) { + return a.ae.ga ? a.ae.j() : null + }; + + function Ye(a, b) { + this.Y = a; + var c = a.n, + d = new Ld(c.g), + c = He(c) ? new Ld(c.g) : c.la ? new Sd(c) : new Md(c); + this.Nf = new Zd(c); + var e = b.w(), + f = b.Q, + g = d.ya(H, e.j(), null), + k = c.ya(H, f.j(), null); + this.Oa = new je(new Xb(k, f.ga, c.Ra()), new Xb(g, e.ga, d.Ra())); + this.$a = []; + this.ug = new Fd(a) + } + + function Ze(a) { + return a.Y + } + h = Ye.prototype; + h.w = function() { + return this.Oa.w().j() + }; + h.kb = function(a) { + var b = Yb(this.Oa); + return b && (He(this.Y.n) || !a.e() && !b.T(K(a)).e()) ? b.S(a) : null + }; + h.e = function() { + return 0 === this.$a.length + }; + h.Tb = function(a) { + this.$a.push(a) + }; + h.nb = function(a, b) { + var c = []; + if (b) { + O(null == a, "A cancel should cancel all event registrations."); + var d = this.Y.path; + Ma(this.$a, function(a) { + (a = a.lf(b, d)) && c.push(a) + }) + } + if (a) { + for (var e = [], f = 0; f < this.$a.length; ++f) { + var g = this.$a[f]; + if (!g.matches(a)) e.push(g); + else if (a.yf()) { + e = e.concat(this.$a.slice(f + 1)); + break + } + } + this.$a = e + } else this.$a = []; + return c + }; + h.gb = function(a, b, c) { + a.type === be && null !== a.source.Lb && (O(Yb(this.Oa), "We should always have a full cache before handling merges"), O(ke(this.Oa), "Missing event cache, even though we have a server cache")); + var d = this.Oa; + a = this.Nf.gb(d, a, b, c); + b = this.Nf; + c = a.me; + O(c.Q.j().Mc(b.X.g), "Event snap not indexed"); + O(c.w().j().Mc(b.X.g), "Server snap not indexed"); + O(lc(a.me.w()) || !lc(d.w()), "Once a server snap is complete, it should never go back"); + this.Oa = a.me; + return $e(this, a.og, a.me.Q.j(), null) + }; + + function af(a, b) { + var c = a.Oa.Q, + d = []; + c.j().L() || c.j().R(R, function(a, b) { + d.push(new J("child_added", b, a)) + }); + c.ga && d.push(hc(c.j())); + return $e(a, d, c.j(), b) + } + + function $e(a, b, c, d) { + return Gd(a.ug, b, c, d ? [d] : a.$a) + }; + + function bf(a, b, c) { + this.type = be; + this.source = a; + this.path = b; + this.children = c + } + bf.prototype.$c = function(a) { + if (this.path.e()) return a = this.children.subtree(new P(a)), a.e() ? null : a.value ? new Ac(this.source, M, a.value) : new bf(this.source, M, a); + O(K(this.path) === a, "Can't get a merge for a child not on the path of the operation"); + return new bf(this.source, N(this.path), this.children) + }; + bf.prototype.toString = function() { + return "Operation(" + this.path + ": " + this.source.toString() + " merge: " + this.children.toString() + ")" + }; + + function cf(a, b) { + this.f = pd("p:rest:"); + this.G = a; + this.Kb = b; + this.Ca = null; + this.ba = {} + } + + function df(a, b) { + if (p(b)) return "tag$" + b; + O(Ie(a.n), "should have a tag if it's not a default query."); + return a.path.toString() + } + h = cf.prototype; + h.Cf = function(a, b, c, d) { + var e = a.path.toString(); + this.f("Listen called for " + e + " " + a.wa()); + var f = df(a, c), + g = {}; + this.ba[f] = g; + a = Je(a.n); + var k = this; + ef(this, e + ".json", a, function(a, b) { + var t = b; + 404 === a && (a = t = null); + null === a && k.Kb(e, t, !1, c); + z(k.ba, f) === g && d(a ? 401 == a ? "permission_denied" : "rest_error:" + a : "ok", null) + }) + }; + h.$f = function(a, b) { + var c = df(a, b); + delete this.ba[c] + }; + h.O = function(a, b) { + this.Ca = a; + var c = Cd(a), + d = c.data, + c = c.Ec && c.Ec.exp; + b && b("ok", { + auth: d, + expires: c + }) + }; + h.je = function(a) { + this.Ca = null; + a("ok", null) + }; + h.Qe = function() {}; + h.Gf = function() {}; + h.Md = function() {}; + h.put = function() {}; + h.Df = function() {}; + h.Ye = function() {}; + + function ef(a, b, c, d) { + c = c || {}; + c.format = "export"; + a.Ca && (c.auth = a.Ca); + var e = (a.G.ob ? "https://" : "http://") + a.G.host + b + "?" + Ib(c); + a.f("Sending REST request for " + e); + var f = new XMLHttpRequest; + f.onreadystatechange = function() { + if (d && 4 === f.readyState) { + a.f("REST Response for " + e + " received. status:", f.status, "response:", f.responseText); + var b = null; + if (200 <= f.status && 300 > f.status) { + try { + b = Rb(f.responseText) + } catch (c) { + S("Failed to parse JSON response for " + e + ": " + f.responseText) + } + d(null, b) + } else 401 !== f.status && 404 !== + f.status && S("Got unsuccessful REST response for " + e + " Status: " + f.status), d(f.status); + d = null + } + }; + f.open("GET", e, !0); + f.send() + }; + + function ff(a) { + O(da(a) && 0 < a.length, "Requires a non-empty array"); + this.fg = a; + this.Rc = {} + } + ff.prototype.ie = function(a, b) { + var c; + c = this.Rc[a] || []; + var d = c.length; + if (0 < d) { + for (var e = Array(d), f = 0; f < d; f++) e[f] = c[f]; + c = e + } else c = []; + for (d = 0; d < c.length; d++) c[d].Dc.apply(c[d].Qa, Array.prototype.slice.call(arguments, 1)) + }; + ff.prototype.Ib = function(a, b, c) { + gf(this, a); + this.Rc[a] = this.Rc[a] || []; + this.Rc[a].push({ + Dc: b, + Qa: c + }); + (a = this.Ee(a)) && b.apply(c, a) + }; + ff.prototype.mc = function(a, b, c) { + gf(this, a); + a = this.Rc[a] || []; + for (var d = 0; d < a.length; d++) + if (a[d].Dc === b && (!c || c === a[d].Qa)) { + a.splice(d, 1); + break + } + }; + + function gf(a, b) { + O(Ra(a.fg, function(a) { + return a === b + }), "Unknown event: " + b) + }; + var hf = function() { + var a = 0, + b = []; + return function(c) { + var d = c === a; + a = c; + for (var e = Array(8), f = 7; 0 <= f; f--) e[f] = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(c % 64), c = Math.floor(c / 64); + O(0 === c, "Cannot push at time == 0"); + c = e.join(""); + if (d) { + for (f = 11; 0 <= f && 63 === b[f]; f--) b[f] = 0; + b[f]++ + } else + for (f = 0; 12 > f; f++) b[f] = Math.floor(64 * Math.random()); + for (f = 0; 12 > f; f++) c += "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]); + O(20 === c.length, "nextPushId: Length should be 20."); + return c + } + }(); + + function jf() { + ff.call(this, ["online"]); + this.oc = !0; + if ("undefined" !== typeof window && "undefined" !== typeof window.addEventListener) { + var a = this; + window.addEventListener("online", function() { + a.oc || (a.oc = !0, a.ie("online", !0)) + }, !1); + window.addEventListener("offline", function() { + a.oc && (a.oc = !1, a.ie("online", !1)) + }, !1) + } + } + ka(jf, ff); + jf.prototype.Ee = function(a) { + O("online" === a, "Unknown event type: " + a); + return [this.oc] + }; + ba(jf); + + function kf() { + ff.call(this, ["visible"]); + var a, b; + "undefined" !== typeof document && "undefined" !== typeof document.addEventListener && ("undefined" !== typeof document.hidden ? (b = "visibilitychange", a = "hidden") : "undefined" !== typeof document.mozHidden ? (b = "mozvisibilitychange", a = "mozHidden") : "undefined" !== typeof document.msHidden ? (b = "msvisibilitychange", a = "msHidden") : "undefined" !== typeof document.webkitHidden && (b = "webkitvisibilitychange", a = "webkitHidden")); + this.Sb = !0; + if (b) { + var c = this; + document.addEventListener(b, + function() { + var b = !document[a]; + b !== c.Sb && (c.Sb = b, c.ie("visible", b)) + }, !1) + } + } + ka(kf, ff); + kf.prototype.Ee = function(a) { + O("visible" === a, "Unknown event type: " + a); + return [this.Sb] + }; + ba(kf); + + function P(a, b) { + if (1 == arguments.length) { + this.u = a.split("/"); + for (var c = 0, d = 0; d < this.u.length; d++) 0 < this.u[d].length && (this.u[c] = this.u[d], c++); + this.u.length = c; + this.aa = 0 + } else this.u = a, this.aa = b + } + + function lf(a, b) { + var c = K(a); + if (null === c) return b; + if (c === K(b)) return lf(N(a), N(b)); + throw Error("INTERNAL ERROR: innerPath (" + b + ") is not within outerPath (" + a + ")"); + } + + function mf(a, b) { + for (var c = a.slice(), d = b.slice(), e = 0; e < c.length && e < d.length; e++) { + var f = yc(c[e], d[e]); + if (0 !== f) return f + } + return c.length === d.length ? 0 : c.length < d.length ? -1 : 1 + } + + function K(a) { + return a.aa >= a.u.length ? null : a.u[a.aa] + } + + function le(a) { + return a.u.length - a.aa + } + + function N(a) { + var b = a.aa; + b < a.u.length && b++; + return new P(a.u, b) + } + + function me(a) { + return a.aa < a.u.length ? a.u[a.u.length - 1] : null + } + h = P.prototype; + h.toString = function() { + for (var a = "", b = this.aa; b < this.u.length; b++) "" !== this.u[b] && (a += "/" + this.u[b]); + return a || "/" + }; + h.slice = function(a) { + return this.u.slice(this.aa + (a || 0)) + }; + h.parent = function() { + if (this.aa >= this.u.length) return null; + for (var a = [], b = this.aa; b < this.u.length - 1; b++) a.push(this.u[b]); + return new P(a, 0) + }; + h.o = function(a) { + for (var b = [], c = this.aa; c < this.u.length; c++) b.push(this.u[c]); + if (a instanceof P) + for (c = a.aa; c < a.u.length; c++) b.push(a.u[c]); + else + for (a = a.split("/"), c = 0; c < a.length; c++) 0 < a[c].length && b.push(a[c]); + return new P(b, 0) + }; + h.e = function() { + return this.aa >= this.u.length + }; + h.ea = function(a) { + if (le(this) !== le(a)) return !1; + for (var b = this.aa, c = a.aa; b <= this.u.length; b++, c++) + if (this.u[b] !== a.u[c]) return !1; + return !0 + }; + h.contains = function(a) { + var b = this.aa, + c = a.aa; + if (le(this) > le(a)) return !1; + for (; b < this.u.length;) { + if (this.u[b] !== a.u[c]) return !1; + ++b; + ++c + } + return !0 + }; + var M = new P(""); + + function nf(a, b) { + this.Ua = a.slice(); + this.Ka = Math.max(1, this.Ua.length); + this.pf = b; + for (var c = 0; c < this.Ua.length; c++) this.Ka += Pb(this.Ua[c]); + of(this) + } + nf.prototype.push = function(a) { + 0 < this.Ua.length && (this.Ka += 1); + this.Ua.push(a); + this.Ka += Pb(a); + of(this) + }; + nf.prototype.pop = function() { + var a = this.Ua.pop(); + this.Ka -= Pb(a); + 0 < this.Ua.length && --this.Ka + }; + + function of(a) { + if (768 < a.Ka) throw Error(a.pf + "has a key path longer than 768 bytes (" + a.Ka + ")."); + if (32 < a.Ua.length) throw Error(a.pf + "path specified exceeds the maximum depth that can be written (32) or object contains a cycle " + pf(a)); + } + + function pf(a) { + return 0 == a.Ua.length ? "" : "in property '" + a.Ua.join(".") + "'" + }; + + function qf(a, b) { + this.value = a; + this.children = b || rf + } + var rf = new Ec(function(a, b) { + return a === b ? 0 : a < b ? -1 : 1 + }); + + function sf(a) { + var b = qe; + v(a, function(a, d) { + b = b.set(new P(d), a) + }); + return b + } + h = qf.prototype; + h.e = function() { + return null === this.value && this.children.e() + }; + + function tf(a, b, c) { + if (null != a.value && c(a.value)) return { + path: M, + value: a.value + }; + if (b.e()) return null; + var d = K(b); + a = a.children.get(d); + return null !== a ? (b = tf(a, N(b), c), null != b ? { + path: (new P(d)).o(b.path), + value: b.value + } : null) : null + } + + function uf(a, b) { + return tf(a, b, function() { + return !0 + }) + } + h.subtree = function(a) { + if (a.e()) return this; + var b = this.children.get(K(a)); + return null !== b ? b.subtree(N(a)) : qe + }; + h.set = function(a, b) { + if (a.e()) return new qf(b, this.children); + var c = K(a), + d = (this.children.get(c) || qe).set(N(a), b), + c = this.children.Sa(c, d); + return new qf(this.value, c) + }; + h.remove = function(a) { + if (a.e()) return this.children.e() ? qe : new qf(null, this.children); + var b = K(a), + c = this.children.get(b); + return c ? (a = c.remove(N(a)), b = a.e() ? this.children.remove(b) : this.children.Sa(b, a), null === this.value && b.e() ? qe : new qf(this.value, b)) : this + }; + h.get = function(a) { + if (a.e()) return this.value; + var b = this.children.get(K(a)); + return b ? b.get(N(a)) : null + }; + + function pe(a, b, c) { + if (b.e()) return c; + var d = K(b); + b = pe(a.children.get(d) || qe, N(b), c); + d = b.e() ? a.children.remove(d) : a.children.Sa(d, b); + return new qf(a.value, d) + } + + function vf(a, b) { + return wf(a, M, b) + } + + function wf(a, b, c) { + var d = {}; + a.children.ka(function(a, f) { + d[a] = wf(f, b.o(a), c) + }); + return c(b, a.value, d) + } + + function xf(a, b, c) { + return yf(a, b, M, c) + } + + function yf(a, b, c, d) { + var e = a.value ? d(c, a.value) : !1; + if (e) return e; + if (b.e()) return null; + e = K(b); + return (a = a.children.get(e)) ? yf(a, N(b), c.o(e), d) : null + } + + function zf(a, b, c) { + Af(a, b, M, c) + } + + function Af(a, b, c, d) { + if (b.e()) return a; + a.value && d(c, a.value); + var e = K(b); + return (a = a.children.get(e)) ? Af(a, N(b), c.o(e), d) : qe + } + + function ne(a, b) { + Bf(a, M, b) + } + + function Bf(a, b, c) { + a.children.ka(function(a, e) { + Bf(e, b.o(a), c) + }); + a.value && c(b, a.value) + } + + function Cf(a, b) { + a.children.ka(function(a, d) { + d.value && b(a, d.value) + }) + } + var qe = new qf(null); + qf.prototype.toString = function() { + var a = {}; + ne(this, function(b, c) { + a[b.toString()] = c.toString() + }); + return G(a) + }; + + function Df(a, b, c) { + this.type = ee; + this.source = Ef; + this.path = a; + this.Ub = b; + this.Yd = c + } + Df.prototype.$c = function(a) { + if (this.path.e()) { + if (null != this.Ub.value) return O(this.Ub.children.e(), "affectedTree should not have overlapping affected paths."), this; + a = this.Ub.subtree(new P(a)); + return new Df(M, a, this.Yd) + } + O(K(this.path) === a, "operationForChild called for unrelated child."); + return new Df(N(this.path), this.Ub, this.Yd) + }; + Df.prototype.toString = function() { + return "Operation(" + this.path + ": " + this.source.toString() + " ack write revert=" + this.Yd + " affectedTree=" + this.Ub + ")" + }; + var Bc = 0, + be = 1, + ee = 2, + Dc = 3; + + function Ff(a, b, c, d) { + this.Ae = a; + this.tf = b; + this.Lb = c; + this.ef = d; + O(!d || b, "Tagged queries must be from server.") + } + var Ef = new Ff(!0, !1, null, !1), + Gf = new Ff(!1, !0, null, !1); + Ff.prototype.toString = function() { + return this.Ae ? "user" : this.ef ? "server(queryID=" + this.Lb + ")" : "server" + }; + + function Hf(a) { + this.Z = a + } + var If = new Hf(new qf(null)); + + function Jf(a, b, c) { + if (b.e()) return new Hf(new qf(c)); + var d = uf(a.Z, b); + if (null != d) { + var e = d.path, + d = d.value; + b = lf(e, b); + d = d.H(b, c); + return new Hf(a.Z.set(e, d)) + } + a = pe(a.Z, b, new qf(c)); + return new Hf(a) + } + + function Kf(a, b, c) { + var d = a; + Fb(c, function(a, c) { + d = Jf(d, b.o(a), c) + }); + return d + } + Hf.prototype.Ud = function(a) { + if (a.e()) return If; + a = pe(this.Z, a, qe); + return new Hf(a) + }; + + function Lf(a, b) { + var c = uf(a.Z, b); + return null != c ? a.Z.get(c.path).S(lf(c.path, b)) : null + } + + function Mf(a) { + var b = [], + c = a.Z.value; + null != c ? c.L() || c.R(R, function(a, c) { + b.push(new L(a, c)) + }) : a.Z.children.ka(function(a, c) { + null != c.value && b.push(new L(a, c.value)) + }); + return b + } + + function Nf(a, b) { + if (b.e()) return a; + var c = Lf(a, b); + return null != c ? new Hf(new qf(c)) : new Hf(a.Z.subtree(b)) + } + Hf.prototype.e = function() { + return this.Z.e() + }; + Hf.prototype.apply = function(a) { + return Of(M, this.Z, a) + }; + + function Of(a, b, c) { + if (null != b.value) return c.H(a, b.value); + var d = null; + b.children.ka(function(b, f) { + ".priority" === b ? (O(null !== f.value, "Priority writes must always be leaf nodes"), d = f.value) : c = Of(a.o(b), f, c) + }); + c.S(a).e() || null === d || (c = c.H(a.o(".priority"), d)); + return c + }; + + function Pf() { + this.V = If; + this.pa = []; + this.Pc = -1 + } + + function Qf(a, b) { + for (var c = 0; c < a.pa.length; c++) { + var d = a.pa[c]; + if (d.md === b) return d + } + return null + } + h = Pf.prototype; + h.Ud = function(a) { + var b = Sa(this.pa, function(b) { + return b.md === a + }); + O(0 <= b, "removeWrite called with nonexistent writeId."); + var c = this.pa[b]; + this.pa.splice(b, 1); + for (var d = c.visible, e = !1, f = this.pa.length - 1; d && 0 <= f;) { + var g = this.pa[f]; + g.visible && (f >= b && Rf(g, c.path) ? d = !1 : c.path.contains(g.path) && (e = !0)); + f-- + } + if (d) { + if (e) this.V = Sf(this.pa, Tf, M), this.Pc = 0 < this.pa.length ? this.pa[this.pa.length - 1].md : -1; + else if (c.Ja) this.V = this.V.Ud(c.path); + else { + var k = this; + v(c.children, function(a, b) { + k.V = k.V.Ud(c.path.o(b)) + }) + } + return !0 + } + return !1 + }; + h.Aa = function(a, b, c, d) { + if (c || d) { + var e = Nf(this.V, a); + return !d && e.e() ? b : d || null != b || null != Lf(e, M) ? (e = Sf(this.pa, function(b) { + return (b.visible || d) && (!c || !(0 <= La(c, b.md))) && (b.path.contains(a) || a.contains(b.path)) + }, a), b = b || H, e.apply(b)) : null + } + e = Lf(this.V, a); + if (null != e) return e; + e = Nf(this.V, a); + return e.e() ? b : null != b || null != Lf(e, M) ? (b = b || H, e.apply(b)) : null + }; + h.Cc = function(a, b) { + var c = H, + d = Lf(this.V, a); + if (d) d.L() || d.R(R, function(a, b) { + c = c.W(a, b) + }); + else if (b) { + var e = Nf(this.V, a); + b.R(R, function(a, b) { + var d = Nf(e, new P(a)).apply(b); + c = c.W(a, d) + }); + Ma(Mf(e), function(a) { + c = c.W(a.name, a.U) + }) + } else e = Nf(this.V, a), Ma(Mf(e), function(a) { + c = c.W(a.name, a.U) + }); + return c + }; + h.nd = function(a, b, c, d) { + O(c || d, "Either existingEventSnap or existingServerSnap must exist"); + a = a.o(b); + if (null != Lf(this.V, a)) return null; + a = Nf(this.V, a); + return a.e() ? d.S(b) : a.apply(d.S(b)) + }; + h.Bc = function(a, b, c) { + a = a.o(b); + var d = Lf(this.V, a); + return null != d ? d : Wb(c, b) ? Nf(this.V, a).apply(c.j().T(b)) : null + }; + h.xc = function(a) { + return Lf(this.V, a) + }; + h.qe = function(a, b, c, d, e, f) { + var g; + a = Nf(this.V, a); + g = Lf(a, M); + if (null == g) + if (null != b) g = a.apply(b); + else return []; + g = g.pb(f); + if (g.e() || g.L()) return []; + b = []; + a = Vd(f); + e = e ? g.dc(c, f) : g.bc(c, f); + for (f = Ic(e); f && b.length < d;) 0 !== a(f, c) && b.push(f), f = Ic(e); + return b + }; + + function Rf(a, b) { + return a.Ja ? a.path.contains(b) : !!ta(a.children, function(c, d) { + return a.path.o(d).contains(b) + }) + } + + function Tf(a) { + return a.visible + } + + function Sf(a, b, c) { + for (var d = If, e = 0; e < a.length; ++e) { + var f = a[e]; + if (b(f)) { + var g = f.path; + if (f.Ja) c.contains(g) ? (g = lf(c, g), d = Jf(d, g, f.Ja)) : g.contains(c) && (g = lf(g, c), d = Jf(d, M, f.Ja.S(g))); + else if (f.children) + if (c.contains(g)) g = lf(c, g), d = Kf(d, g, f.children); + else { + if (g.contains(c)) + if (g = lf(g, c), g.e()) d = Kf(d, M, f.children); + else if (f = z(f.children, K(g))) f = f.S(N(g)), d = Jf(d, M, f) + } else throw jd("WriteRecord should have .snap or .children"); + } + } + return d + } + + function Uf(a, b) { + this.Qb = a; + this.Z = b + } + h = Uf.prototype; + h.Aa = function(a, b, c) { + return this.Z.Aa(this.Qb, a, b, c) + }; + h.Cc = function(a) { + return this.Z.Cc(this.Qb, a) + }; + h.nd = function(a, b, c) { + return this.Z.nd(this.Qb, a, b, c) + }; + h.xc = function(a) { + return this.Z.xc(this.Qb.o(a)) + }; + h.qe = function(a, b, c, d, e) { + return this.Z.qe(this.Qb, a, b, c, d, e) + }; + h.Bc = function(a, b) { + return this.Z.Bc(this.Qb, a, b) + }; + h.o = function(a) { + return new Uf(this.Qb.o(a), this.Z) + }; + + function Vf() { + this.children = {}; + this.pd = 0; + this.value = null + } + + function Wf(a, b, c) { + this.Jd = a ? a : ""; + this.Ha = b ? b : null; + this.A = c ? c : new Vf + } + + function Xf(a, b) { + for (var c = b instanceof P ? b : new P(b), d = a, e; null !== (e = K(c));) d = new Wf(e, d, z(d.A.children, e) || new Vf), c = N(c); + return d + } + h = Wf.prototype; + h.Ea = function() { + return this.A.value + }; + + function Yf(a, b) { + O("undefined" !== typeof b, "Cannot set value to undefined"); + a.A.value = b; + Zf(a) + } + h.clear = function() { + this.A.value = null; + this.A.children = {}; + this.A.pd = 0; + Zf(this) + }; + h.zd = function() { + return 0 < this.A.pd + }; + h.e = function() { + return null === this.Ea() && !this.zd() + }; + h.R = function(a) { + var b = this; + v(this.A.children, function(c, d) { + a(new Wf(d, b, c)) + }) + }; + + function $f(a, b, c, d) { + c && !d && b(a); + a.R(function(a) { + $f(a, b, !0, d) + }); + c && d && b(a) + } + + function ag(a, b) { + for (var c = a.parent(); null !== c && !b(c);) c = c.parent() + } + h.path = function() { + return new P(null === this.Ha ? this.Jd : this.Ha.path() + "/" + this.Jd) + }; + h.name = function() { + return this.Jd + }; + h.parent = function() { + return this.Ha + }; + + function Zf(a) { + if (null !== a.Ha) { + var b = a.Ha, + c = a.Jd, + d = a.e(), + e = y(b.A.children, c); + d && e ? (delete b.A.children[c], b.A.pd--, Zf(b)) : d || e || (b.A.children[c] = a.A, b.A.pd++, Zf(b)) + } + }; + var bg = /[\[\].#$\/\u0000-\u001F\u007F]/, + cg = /[\[\].#$\u0000-\u001F\u007F]/, + dg = /^[a-zA-Z][a-zA-Z._\-+]+$/; + + function eg(a) { + return q(a) && 0 !== a.length && !bg.test(a) + } + + function fg(a) { + return null === a || q(a) || fa(a) && !td(a) || ga(a) && y(a, ".sv") + } + + function gg(a, b, c, d) { + d && !p(b) || hg(E(a, 1, d), b, c) + } + + function hg(a, b, c) { + c instanceof P && (c = new nf(c, a)); + if (!p(b)) throw Error(a + "contains undefined " + pf(c)); + if (r(b)) throw Error(a + "contains a function " + pf(c) + " with contents: " + b.toString()); + if (td(b)) throw Error(a + "contains " + b.toString() + " " + pf(c)); + if (q(b) && b.length > 10485760 / 3 && 10485760 < Pb(b)) throw Error(a + "contains a string greater than 10485760 utf8 bytes " + pf(c) + " ('" + b.substring(0, 50) + "...')"); + if (ga(b)) { + var d = !1, + e = !1; + Fb(b, function(b, g) { + if (".value" === b) d = !0; + else if (".priority" !== b && ".sv" !== b && (e = !0, !eg(b))) throw Error(a + " contains an invalid key (" + b + ") " + pf(c) + '. Keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]"'); + c.push(b); + hg(a, g, c); + c.pop() + }); + if (d && e) throw Error(a + ' contains ".value" child ' + pf(c) + " in addition to actual children."); + } + } + + function ig(a, b) { + var c, d; + for (c = 0; c < b.length; c++) { + d = b[c]; + for (var e = d.slice(), f = 0; f < e.length; f++) + if ((".priority" !== e[f] || f !== e.length - 1) && !eg(e[f])) throw Error(a + "contains an invalid key (" + e[f] + ") in path " + d.toString() + '. Keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]"'); + } + b.sort(mf); + e = null; + for (c = 0; c < b.length; c++) { + d = b[c]; + if (null !== e && e.contains(d)) throw Error(a + "contains a path " + e.toString() + " that is ancestor of another path " + d.toString()); + e = d + } + } + + function jg(a, b, c) { + var d = E(a, 1, !1); + if (!ga(b) || da(b)) throw Error(d + " must be an object containing the children to replace."); + var e = []; + Fb(b, function(a, b) { + var k = new P(a); + hg(d, b, c.o(k)); + if (".priority" === me(k) && !fg(b)) throw Error(d + "contains an invalid value for '" + k.toString() + "', which must be a valid Firebase priority (a string, finite number, server value, or null)."); + e.push(k) + }); + ig(d, e) + } + + function kg(a, b, c) { + if (td(c)) throw Error(E(a, b, !1) + "is " + c.toString() + ", but must be a valid Firebase priority (a string, finite number, server value, or null)."); + if (!fg(c)) throw Error(E(a, b, !1) + "must be a valid Firebase priority (a string, finite number, server value, or null)."); + } + + function lg(a, b, c) { + if (!c || p(b)) switch (b) { + case "value": + case "child_added": + case "child_removed": + case "child_changed": + case "child_moved": + break; + default: + throw Error(E(a, 1, c) + 'must be a valid event type: "value", "child_added", "child_removed", "child_changed", or "child_moved".'); + } + } + + function mg(a, b) { + if (p(b) && !eg(b)) throw Error(E(a, 2, !0) + 'was an invalid key: "' + b + '". Firebase keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]").'); + } + + function ng(a, b) { + if (!q(b) || 0 === b.length || cg.test(b)) throw Error(E(a, 1, !1) + 'was an invalid path: "' + b + '". Paths must be non-empty strings and can\'t contain ".", "#", "$", "[", or "]"'); + } + + function og(a, b) { + if (".info" === K(b)) throw Error(a + " failed: Can't modify data under /.info/"); + } + + function pg(a, b) { + if (!q(b)) throw Error(E(a, 1, !1) + "must be a valid credential (a string)."); + } + + function qg(a, b, c) { + if (!q(c)) throw Error(E(a, b, !1) + "must be a valid string."); + } + + function rg(a, b) { + qg(a, 1, b); + if (!dg.test(b)) throw Error(E(a, 1, !1) + "'" + b + "' is not a valid authentication provider."); + } + + function sg(a, b, c, d) { + if (!d || p(c)) + if (!ga(c) || null === c) throw Error(E(a, b, d) + "must be a valid object."); + } + + function tg(a, b, c) { + if (!ga(b) || !y(b, c)) throw Error(E(a, 1, !1) + 'must contain the key "' + c + '"'); + if (!q(z(b, c))) throw Error(E(a, 1, !1) + 'must contain the key "' + c + '" with type "string"'); + }; + + function ug() { + this.set = {} + } + h = ug.prototype; + h.add = function(a, b) { + this.set[a] = null !== b ? b : !0 + }; + h.contains = function(a) { + return y(this.set, a) + }; + h.get = function(a) { + return this.contains(a) ? this.set[a] : void 0 + }; + h.remove = function(a) { + delete this.set[a] + }; + h.clear = function() { + this.set = {} + }; + h.e = function() { + return va(this.set) + }; + h.count = function() { + return oa(this.set) + }; + + function vg(a, b) { + v(a.set, function(a, d) { + b(d, a) + }) + } + h.keys = function() { + var a = []; + v(this.set, function(b, c) { + a.push(c) + }); + return a + }; + + function Vc() { + this.m = this.B = null + } + Vc.prototype.find = function(a) { + if (null != this.B) return this.B.S(a); + if (a.e() || null == this.m) return null; + var b = K(a); + a = N(a); + return this.m.contains(b) ? this.m.get(b).find(a) : null + }; + Vc.prototype.rc = function(a, b) { + if (a.e()) this.B = b, this.m = null; + else if (null !== this.B) this.B = this.B.H(a, b); + else { + null == this.m && (this.m = new ug); + var c = K(a); + this.m.contains(c) || this.m.add(c, new Vc); + c = this.m.get(c); + a = N(a); + c.rc(a, b) + } + }; + + function wg(a, b) { + if (b.e()) return a.B = null, a.m = null, !0; + if (null !== a.B) { + if (a.B.L()) return !1; + var c = a.B; + a.B = null; + c.R(R, function(b, c) { + a.rc(new P(b), c) + }); + return wg(a, b) + } + return null !== a.m ? (c = K(b), b = N(b), a.m.contains(c) && wg(a.m.get(c), b) && a.m.remove(c), a.m.e() ? (a.m = null, !0) : !1) : !0 + } + + function Wc(a, b, c) { + null !== a.B ? c(b, a.B) : a.R(function(a, e) { + var f = new P(b.toString() + "/" + a); + Wc(e, f, c) + }) + } + Vc.prototype.R = function(a) { + null !== this.m && vg(this.m, function(b, c) { + a(b, c) + }) + }; + var xg = "auth.firebase.com"; + + function yg(a, b, c) { + this.qd = a || {}; + this.he = b || {}; + this.fb = c || {}; + this.qd.remember || (this.qd.remember = "default") + } + var zg = ["remember", "redirectTo"]; + + function Ag(a) { + var b = {}, + c = {}; + Fb(a || {}, function(a, e) { + 0 <= La(zg, a) ? b[a] = e : c[a] = e + }); + return new yg(b, {}, c) + }; + + function Bg(a, b) { + this.Ue = ["session", a.Rd, a.lc].join(":"); + this.ee = b + } + Bg.prototype.set = function(a, b) { + if (!b) + if (this.ee.length) b = this.ee[0]; + else throw Error("fb.login.SessionManager : No storage options available!"); + b.set(this.Ue, a) + }; + Bg.prototype.get = function() { + var a = Oa(this.ee, u(this.Bg, this)), + a = Na(a, function(a) { + return null !== a + }); + Va(a, function(a, c) { + return Dd(c.token) - Dd(a.token) + }); + return 0 < a.length ? a.shift() : null + }; + Bg.prototype.Bg = function(a) { + try { + var b = a.get(this.Ue); + if (b && b.token) return b + } catch (c) {} + return null + }; + Bg.prototype.clear = function() { + var a = this; + Ma(this.ee, function(b) { + b.remove(a.Ue) + }) + }; + + function Cg() { + return "undefined" !== typeof navigator && "string" === typeof navigator.userAgent ? navigator.userAgent : "" + } + + function Dg() { + return "undefined" !== typeof window && !!(window.cordova || window.phonegap || window.PhoneGap) && /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(Cg()) + } + + function Eg() { + return "undefined" !== typeof location && /^file:\//.test(location.href) + } + + function Fg(a) { + var b = Cg(); + if ("" === b) return !1; + if ("Microsoft Internet Explorer" === navigator.appName) { + if ((b = b.match(/MSIE ([0-9]{1,}[\.0-9]{0,})/)) && 1 < b.length) return parseFloat(b[1]) >= a + } else if (-1 < b.indexOf("Trident") && (b = b.match(/rv:([0-9]{2,2}[\.0-9]{0,})/)) && 1 < b.length) return parseFloat(b[1]) >= a; + return !1 + }; + + function Gg() { + var a = window.opener.frames, + b; + for (b = a.length - 1; 0 <= b; b--) try { + if (a[b].location.protocol === window.location.protocol && a[b].location.host === window.location.host && "__winchan_relay_frame" === a[b].name) return a[b] + } catch (c) {} + return null + } + + function Hg(a, b, c) { + a.attachEvent ? a.attachEvent("on" + b, c) : a.addEventListener && a.addEventListener(b, c, !1) + } + + function Ig(a, b, c) { + a.detachEvent ? a.detachEvent("on" + b, c) : a.removeEventListener && a.removeEventListener(b, c, !1) + } + + function Jg(a) { + /^https?:\/\//.test(a) || (a = window.location.href); + var b = /^(https?:\/\/[\-_a-zA-Z\.0-9:]+)/.exec(a); + return b ? b[1] : a + } + + function Kg(a) { + var b = ""; + try { + a = a.replace(/.*\?/, ""); + var c = Jb(a); + c && y(c, "__firebase_request_key") && (b = z(c, "__firebase_request_key")) + } catch (d) {} + return b + } + + function Lg() { + var a = sd(xg); + return a.scheme + "://" + a.host + "/v2" + } + + function Mg(a) { + return Lg() + "/" + a + "/auth/channel" + }; + + function Ng(a) { + var b = this; + this.hb = a; + this.fe = "*"; + Fg(8) ? this.Uc = this.Cd = Gg() : (this.Uc = window.opener, this.Cd = window); + if (!b.Uc) throw "Unable to find relay frame"; + Hg(this.Cd, "message", u(this.nc, this)); + Hg(this.Cd, "message", u(this.Ff, this)); + try { + Og(this, { + a: "ready" + }) + } catch (c) { + Hg(this.Uc, "load", function() { + Og(b, { + a: "ready" + }) + }) + } + Hg(window, "unload", u(this.Mg, this)) + } + + function Og(a, b) { + b = G(b); + Fg(8) ? a.Uc.doPost(b, a.fe) : a.Uc.postMessage(b, a.fe) + } + Ng.prototype.nc = function(a) { + var b = this, + c; + try { + c = Rb(a.data) + } catch (d) {} + c && "request" === c.a && (Ig(window, "message", this.nc), this.fe = a.origin, this.hb && setTimeout(function() { + b.hb(b.fe, c.d, function(a, c) { + b.mg = !c; + b.hb = void 0; + Og(b, { + a: "response", + d: a, + forceKeepWindowOpen: c + }) + }) + }, 0)) + }; + Ng.prototype.Mg = function() { + try { + Ig(this.Cd, "message", this.Ff) + } catch (a) {} + this.hb && (Og(this, { + a: "error", + d: "unknown closed window" + }), this.hb = void 0); + try { + window.close() + } catch (b) {} + }; + Ng.prototype.Ff = function(a) { + if (this.mg && "die" === a.data) try { + window.close() + } catch (b) {} + }; + + function Pg(a) { + this.tc = Fa() + Fa() + Fa(); + this.Kf = a + } + Pg.prototype.open = function(a, b) { + cd.set("redirect_request_id", this.tc); + cd.set("redirect_request_id", this.tc); + b.requestId = this.tc; + b.redirectTo = b.redirectTo || window.location.href; + a += (/\?/.test(a) ? "" : "?") + Ib(b); + window.location = a + }; + Pg.isAvailable = function() { + return !Eg() && !Dg() + }; + Pg.prototype.Fc = function() { + return "redirect" + }; + var Qg = { + NETWORK_ERROR: "Unable to contact the Firebase server.", + SERVER_ERROR: "An unknown server error occurred.", + TRANSPORT_UNAVAILABLE: "There are no login transports available for the requested method.", + REQUEST_INTERRUPTED: "The browser redirected the page before the login request could complete.", + USER_CANCELLED: "The user cancelled authentication." + }; + + function Rg(a) { + var b = Error(z(Qg, a), a); + b.code = a; + return b + }; + + function Sg(a) { + var b; + (b = !a.window_features) || (b = Cg(), b = -1 !== b.indexOf("Fennec/") || -1 !== b.indexOf("Firefox/") && -1 !== b.indexOf("Android")); + b && (a.window_features = void 0); + a.window_name || (a.window_name = "_blank"); + this.options = a + } + Sg.prototype.open = function(a, b, c) { + function d(a) { + g && (document.body.removeChild(g), g = void 0); + t && (t = clearInterval(t)); + Ig(window, "message", e); + Ig(window, "unload", d); + if (l && !a) try { + l.close() + } catch (b) { + k.postMessage("die", m) + } + l = k = void 0 + } + + function e(a) { + if (a.origin === m) try { + var b = Rb(a.data); + "ready" === b.a ? k.postMessage(A, m) : "error" === b.a ? (d(!1), c && (c(b.d), c = null)) : "response" === b.a && (d(b.forceKeepWindowOpen), c && (c(null, b.d), c = null)) + } catch (e) {} + } + var f = Fg(8), + g, k; + if (!this.options.relay_url) return c(Error("invalid arguments: origin of url and relay_url must match")); + var m = Jg(a); + if (m !== Jg(this.options.relay_url)) c && setTimeout(function() { + c(Error("invalid arguments: origin of url and relay_url must match")) + }, 0); + else { + f && (g = document.createElement("iframe"), g.setAttribute("src", this.options.relay_url), g.style.display = "none", g.setAttribute("name", "__winchan_relay_frame"), document.body.appendChild(g), k = g.contentWindow); + a += (/\?/.test(a) ? "" : "?") + Ib(b); + var l = window.open(a, this.options.window_name, this.options.window_features); + k || (k = l); + var t = setInterval(function() { + l && l.closed && + (d(!1), c && (c(Rg("USER_CANCELLED")), c = null)) + }, 500), + A = G({ + a: "request", + d: b + }); + Hg(window, "unload", d); + Hg(window, "message", e) + } + }; + Sg.isAvailable = function() { + var a; + if (a = "postMessage" in window && !Eg())(a = Dg() || "undefined" !== typeof navigator && (!!Cg().match(/Windows Phone/) || !!window.Windows && /^ms-appx:/.test(location.href))) || (a = Cg(), a = "undefined" !== typeof navigator && "undefined" !== typeof window && !!(a.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i) || a.match(/CriOS/) || a.match(/Twitter for iPhone/) || a.match(/FBAN\/FBIOS/) || window.navigator.standalone)), a = !a; + return a && !Cg().match(/PhantomJS/) + }; + Sg.prototype.Fc = function() { + return "popup" + }; + + function Tg(a) { + a.method || (a.method = "GET"); + a.headers || (a.headers = {}); + a.headers.content_type || (a.headers.content_type = "application/json"); + a.headers.content_type = a.headers.content_type.toLowerCase(); + this.options = a + } + Tg.prototype.open = function(a, b, c) { + function d() { + c && (c(Rg("REQUEST_INTERRUPTED")), c = null) + } + var e = new XMLHttpRequest, + f = this.options.method.toUpperCase(), + g; + Hg(window, "beforeunload", d); + e.onreadystatechange = function() { + if (c && 4 === e.readyState) { + var a; + if (200 <= e.status && 300 > e.status) { + try { + a = Rb(e.responseText) + } catch (b) {} + c(null, a) + } else 500 <= e.status && 600 > e.status ? c(Rg("SERVER_ERROR")) : c(Rg("NETWORK_ERROR")); + c = null; + Ig(window, "beforeunload", d) + } + }; + if ("GET" === f) a += (/\?/.test(a) ? "" : "?") + Ib(b), g = null; + else { + var k = this.options.headers.content_type; + "application/json" === k && (g = G(b)); + "application/x-www-form-urlencoded" === k && (g = Ib(b)) + } + e.open(f, a, !0); + a = { + "X-Requested-With": "XMLHttpRequest", + Accept: "application/json;text/plain" + }; + ya(a, this.options.headers); + for (var m in a) e.setRequestHeader(m, a[m]); + e.send(g) + }; + Tg.isAvailable = function() { + var a; + if (a = !!window.XMLHttpRequest) a = Cg(), a = !(a.match(/MSIE/) || a.match(/Trident/)) || Fg(10); + return a + }; + Tg.prototype.Fc = function() { + return "json" + }; + + function Ug(a) { + this.tc = Fa() + Fa() + Fa(); + this.Kf = a + } + Ug.prototype.open = function(a, b, c) { + function d() { + c && (c(Rg("USER_CANCELLED")), c = null) + } + var e = this, + f = sd(xg), + g; + b.requestId = this.tc; + b.redirectTo = f.scheme + "://" + f.host + "/blank/page.html"; + a += /\?/.test(a) ? "" : "?"; + a += Ib(b); + (g = window.open(a, "_blank", "location=no")) && r(g.addEventListener) ? (g.addEventListener("loadstart", function(a) { + var b; + if (b = a && a.url) a: { + try { + var l = document.createElement("a"); + l.href = a.url; + b = l.host === f.host && "/blank/page.html" === l.pathname; + break a + } catch (t) {} + b = !1 + } + b && (a = Kg(a.url), g.removeEventListener("exit", + d), g.close(), a = new yg(null, null, { + requestId: e.tc, + requestKey: a + }), e.Kf.requestWithCredential("/auth/session", a, c), c = null) + }), g.addEventListener("exit", d)) : c(Rg("TRANSPORT_UNAVAILABLE")) + }; + Ug.isAvailable = function() { + return Dg() + }; + Ug.prototype.Fc = function() { + return "redirect" + }; + + function Vg(a) { + a.callback_parameter || (a.callback_parameter = "callback"); + this.options = a; + window.__firebase_auth_jsonp = window.__firebase_auth_jsonp || {} + } + Vg.prototype.open = function(a, b, c) { + function d() { + c && (c(Rg("REQUEST_INTERRUPTED")), c = null) + } + + function e() { + setTimeout(function() { + window.__firebase_auth_jsonp[f] = void 0; + va(window.__firebase_auth_jsonp) && (window.__firebase_auth_jsonp = void 0); + try { + var a = document.getElementById(f); + a && a.parentNode.removeChild(a) + } catch (b) {} + }, 1); + Ig(window, "beforeunload", d) + } + var f = "fn" + (new Date).getTime() + Math.floor(99999 * Math.random()); + b[this.options.callback_parameter] = "__firebase_auth_jsonp." + f; + a += (/\?/.test(a) ? "" : "?") + Ib(b); + Hg(window, "beforeunload", d); + window.__firebase_auth_jsonp[f] = function(a) { + c && (c(null, a), c = null); + e() + }; + Wg(f, a, c) + }; + + function Wg(a, b, c) { + setTimeout(function() { + try { + var d = document.createElement("script"); + d.type = "text/javascript"; + d.id = a; + d.async = !0; + d.src = b; + d.onerror = function() { + var b = document.getElementById(a); + null !== b && b.parentNode.removeChild(b); + c && c(Rg("NETWORK_ERROR")) + }; + var e = document.getElementsByTagName("head"); + (e && 0 != e.length ? e[0] : document.documentElement).appendChild(d) + } catch (f) { + c && c(Rg("NETWORK_ERROR")) + } + }, 0) + } + Vg.isAvailable = function() { + return "undefined" !== typeof document && null != document.createElement + }; + Vg.prototype.Fc = function() { + return "json" + }; + + function Xg(a, b, c, d) { + ff.call(this, ["auth_status"]); + this.G = a; + this.hf = b; + this.gh = c; + this.Pe = d; + this.wc = new Bg(a, [bd, cd]); + this.qb = null; + this.We = !1; + Yg(this) + } + ka(Xg, ff); + h = Xg.prototype; + h.Be = function() { + return this.qb || null + }; + + function Yg(a) { + cd.get("redirect_request_id") && Zg(a); + var b = a.wc.get(); + b && b.token ? ($g(a, b), a.hf(b.token, function(c, d) { + ah(a, c, d, !1, b.token, b) + }, function(b, d) { + bh(a, "resumeSession()", b, d) + })) : $g(a, null) + } + + function ch(a, b, c, d, e, f) { + "firebaseio-demo.com" === a.G.domain && S("Firebase authentication is not supported on demo Firebases (*.firebaseio-demo.com). To secure your Firebase, create a production Firebase at https://www.firebase.com."); + a.hf(b, function(f, k) { + ah(a, f, k, !0, b, c, d || {}, e) + }, function(b, c) { + bh(a, "auth()", b, c, f) + }) + } + + function dh(a, b) { + a.wc.clear(); + $g(a, null); + a.gh(function(a, d) { + if ("ok" === a) T(b, null); + else { + var e = (a || "error").toUpperCase(), + f = e; + d && (f += ": " + d); + f = Error(f); + f.code = e; + T(b, f) + } + }) + } + + function ah(a, b, c, d, e, f, g, k) { + "ok" === b ? (d && (b = c.auth, f.auth = b, f.expires = c.expires, f.token = Ed(e) ? e : "", c = null, b && y(b, "uid") ? c = z(b, "uid") : y(f, "uid") && (c = z(f, "uid")), f.uid = c, c = "custom", b && y(b, "provider") ? c = z(b, "provider") : y(f, "provider") && (c = z(f, "provider")), f.provider = c, a.wc.clear(), Ed(e) && (g = g || {}, c = bd, "sessionOnly" === g.remember && (c = cd), "none" !== g.remember && a.wc.set(f, c)), $g(a, f)), T(k, null, f)) : (a.wc.clear(), $g(a, null), f = a = (b || "error").toUpperCase(), c && (f += ": " + c), f = Error(f), f.code = a, T(k, f)) + } + + function bh(a, b, c, d, e) { + S(b + " was canceled: " + d); + a.wc.clear(); + $g(a, null); + a = Error(d); + a.code = c.toUpperCase(); + T(e, a) + } + + function eh(a, b, c, d, e) { + fh(a); + c = new yg(d || {}, {}, c || {}); + gh(a, [Tg, Vg], "/auth/" + b, c, e) + } + + function hh(a, b, c, d) { + fh(a); + var e = [Sg, Ug]; + c = Ag(c); + "anonymous" === b || "password" === b ? setTimeout(function() { + T(d, Rg("TRANSPORT_UNAVAILABLE")) + }, 0) : (c.he.window_features = "menubar=yes,modal=yes,alwaysRaised=yeslocation=yes,resizable=yes,scrollbars=yes,status=yes,height=625,width=625,top=" + ("object" === typeof screen ? .5 * (screen.height - 625) : 0) + ",left=" + ("object" === typeof screen ? .5 * (screen.width - 625) : 0), c.he.relay_url = Mg(a.G.lc), c.he.requestWithCredential = u(a.uc, a), gh(a, e, "/auth/" + b, c, d)) + } + + function Zg(a) { + var b = cd.get("redirect_request_id"); + if (b) { + var c = cd.get("redirect_client_options"); + cd.remove("redirect_request_id"); + cd.remove("redirect_client_options"); + var d = [Tg, Vg], + b = { + requestId: b, + requestKey: Kg(document.location.hash) + }, + c = new yg(c, {}, b); + a.We = !0; + try { + document.location.hash = document.location.hash.replace(/&__firebase_request_key=([a-zA-z0-9]*)/, "") + } catch (e) {} + gh(a, d, "/auth/session", c, function() { + this.We = !1 + }.bind(a)) + } + } + h.ve = function(a, b) { + fh(this); + var c = Ag(a); + c.fb._method = "POST"; + this.uc("/users", c, function(a, c) { + a ? T(b, a) : T(b, a, c) + }) + }; + h.Xe = function(a, b) { + var c = this; + fh(this); + var d = "/users/" + encodeURIComponent(a.email), + e = Ag(a); + e.fb._method = "DELETE"; + this.uc(d, e, function(a, d) { + !a && d && d.uid && c.qb && c.qb.uid && c.qb.uid === d.uid && dh(c); + T(b, a) + }) + }; + h.se = function(a, b) { + fh(this); + var c = "/users/" + encodeURIComponent(a.email) + "/password", + d = Ag(a); + d.fb._method = "PUT"; + d.fb.password = a.newPassword; + this.uc(c, d, function(a) { + T(b, a) + }) + }; + h.re = function(a, b) { + fh(this); + var c = "/users/" + encodeURIComponent(a.oldEmail) + "/email", + d = Ag(a); + d.fb._method = "PUT"; + d.fb.email = a.newEmail; + d.fb.password = a.password; + this.uc(c, d, function(a) { + T(b, a) + }) + }; + h.Ze = function(a, b) { + fh(this); + var c = "/users/" + encodeURIComponent(a.email) + "/password", + d = Ag(a); + d.fb._method = "POST"; + this.uc(c, d, function(a) { + T(b, a) + }) + }; + h.uc = function(a, b, c) { + ih(this, [Tg, Vg], a, b, c) + }; + + function gh(a, b, c, d, e) { + ih(a, b, c, d, function(b, c) { + !b && c && c.token && c.uid ? ch(a, c.token, c, d.qd, function(a, b) { + a ? T(e, a) : T(e, null, b) + }) : T(e, b || Rg("UNKNOWN_ERROR")) + }) + } + + function ih(a, b, c, d, e) { + b = Na(b, function(a) { + return "function" === typeof a.isAvailable && a.isAvailable() + }); + 0 === b.length ? setTimeout(function() { + T(e, Rg("TRANSPORT_UNAVAILABLE")) + }, 0) : (b = new(b.shift())(d.he), d = Gb(d.fb), d.v = "js-" + Eb, d.transport = b.Fc(), d.suppress_status_codes = !0, a = Lg() + "/" + a.G.lc + c, b.open(a, d, function(a, b) { + if (a) T(e, a); + else if (b && b.error) { + var c = Error(b.error.message); + c.code = b.error.code; + c.details = b.error.details; + T(e, c) + } else T(e, null, b) + })) + } + + function $g(a, b) { + var c = null !== a.qb || null !== b; + a.qb = b; + c && a.ie("auth_status", b); + a.Pe(null !== b) + } + h.Ee = function(a) { + O("auth_status" === a, 'initial event must be of type "auth_status"'); + return this.We ? null : [this.qb] + }; + + function fh(a) { + var b = a.G; + if ("firebaseio.com" !== b.domain && "firebaseio-demo.com" !== b.domain && "auth.firebase.com" === xg) throw Error("This custom Firebase server ('" + a.G.domain + "') does not support delegated login."); + }; + var gd = "websocket", + hd = "long_polling"; + + function jh(a) { + this.nc = a; + this.Qd = []; + this.Wb = 0; + this.te = -1; + this.Jb = null + } + + function kh(a, b, c) { + a.te = b; + a.Jb = c; + a.te < a.Wb && (a.Jb(), a.Jb = null) + } + + function lh(a, b, c) { + for (a.Qd[b] = c; a.Qd[a.Wb];) { + var d = a.Qd[a.Wb]; + delete a.Qd[a.Wb]; + for (var e = 0; e < d.length; ++e) + if (d[e]) { + var f = a; + gc(function() { + f.nc(d[e]) + }) + } + if (a.Wb === a.te) { + a.Jb && (clearTimeout(a.Jb), a.Jb(), a.Jb = null); + break + } + a.Wb++ + } + }; + + function mh(a, b, c, d) { + this.ue = a; + this.f = pd(a); + this.rb = this.sb = 0; + this.Xa = uc(b); + this.Xf = c; + this.Kc = !1; + this.Fb = d; + this.ld = function(a) { + return fd(b, hd, a) + } + } + var nh, oh; + mh.prototype.open = function(a, b) { + this.mf = 0; + this.na = b; + this.Ef = new jh(a); + this.Db = !1; + var c = this; + this.ub = setTimeout(function() { + c.f("Timed out trying to connect."); + c.bb(); + c.ub = null + }, Math.floor(3E4)); + ud(function() { + if (!c.Db) { + c.Wa = new ph(function(a, b, d, k, m) { + qh(c, arguments); + if (c.Wa) + if (c.ub && (clearTimeout(c.ub), c.ub = null), c.Kc = !0, "start" == a) c.id = b, c.Mf = d; + else if ("close" === a) b ? (c.Wa.$d = !1, kh(c.Ef, b, function() { + c.bb() + })) : c.bb(); + else throw Error("Unrecognized command received: " + a); + }, function(a, b) { + qh(c, arguments); + lh(c.Ef, a, b) + }, function() { + c.bb() + }, c.ld); + var a = { + start: "t" + }; + a.ser = Math.floor(1E8 * Math.random()); + c.Wa.ke && (a.cb = c.Wa.ke); + a.v = "5"; + c.Xf && (a.s = c.Xf); + c.Fb && (a.ls = c.Fb); + "undefined" !== typeof location && location.href && -1 !== location.href.indexOf("firebaseio.com") && (a.r = "f"); + a = c.ld(a); + c.f("Connecting via long-poll to " + a); + rh(c.Wa, a, function() {}) + } + }) + }; + mh.prototype.start = function() { + var a = this.Wa, + b = this.Mf; + a.Fg = this.id; + a.Gg = b; + for (a.oe = !0; sh(a);); + a = this.id; + b = this.Mf; + this.kc = document.createElement("iframe"); + var c = { + dframe: "t" + }; + c.id = a; + c.pw = b; + this.kc.src = this.ld(c); + this.kc.style.display = "none"; + document.body.appendChild(this.kc) + }; + mh.isAvailable = function() { + return nh || !oh && "undefined" !== typeof document && null != document.createElement && !("object" === typeof window && window.chrome && window.chrome.extension && !/^chrome/.test(window.location.href)) && !("object" === typeof Windows && "object" === typeof Windows.ih) && !0 + }; + h = mh.prototype; + h.Hd = function() {}; + h.fd = function() { + this.Db = !0; + this.Wa && (this.Wa.close(), this.Wa = null); + this.kc && (document.body.removeChild(this.kc), this.kc = null); + this.ub && (clearTimeout(this.ub), this.ub = null) + }; + h.bb = function() { + this.Db || (this.f("Longpoll is closing itself"), this.fd(), this.na && (this.na(this.Kc), this.na = null)) + }; + h.close = function() { + this.Db || (this.f("Longpoll is being closed."), this.fd()) + }; + h.send = function(a) { + a = G(a); + this.sb += a.length; + rc(this.Xa, "bytes_sent", a.length); + a = Ob(a); + a = nb(a, !0); + a = yd(a, 1840); + for (var b = 0; b < a.length; b++) { + var c = this.Wa; + c.cd.push({ + Xg: this.mf, + fh: a.length, + of: a[b] + }); + c.oe && sh(c); + this.mf++ + } + }; + + function qh(a, b) { + var c = G(b).length; + a.rb += c; + rc(a.Xa, "bytes_received", c) + } + + function ph(a, b, c, d) { + this.ld = d; + this.lb = c; + this.Te = new ug; + this.cd = []; + this.we = Math.floor(1E8 * Math.random()); + this.$d = !0; + this.ke = id(); + window["pLPCommand" + this.ke] = a; + window["pRTLPCB" + this.ke] = b; + a = document.createElement("iframe"); + a.style.display = "none"; + if (document.body) { + document.body.appendChild(a); + try { + a.contentWindow.document || fc("No IE domain setting required") + } catch (e) { + a.src = "javascript:void((function(){document.open();document.domain='" + document.domain + "';document.close();})())" + } + } else throw "Document body has not initialized. Wait to initialize Firebase until after the document is ready."; + a.contentDocument ? a.jb = a.contentDocument : a.contentWindow ? a.jb = a.contentWindow.document : a.document && (a.jb = a.document); + this.Ga = a; + a = ""; + this.Ga.src && "javascript:" === this.Ga.src.substr(0, 11) && (a = ' + + + + + + +
+
+
+
+
+
+
+
Help
+
+ + + + +
+ +
+

Menu

+ The menu for the app can be accessed by selecting the 3 white horizontal lines in the top left corner of the screen. This gives access to all pages within the app. +
+

Study Time

+ Study Time is the default page. It is where you will be starting, pausing and finishing your study sessions. +
+ start: +
    +
  1. press the switch while it is in it’s ‘off state’ (grey coloured)
  2. +
+
+ pause:
+
    +
  1. press the switch while it is in it’s ‘on state’ (blue coloured)
  2. +
  3. select “take a short break†when the “confirmation†window pops up
  4. +
+
+ resume:
+
    +
  1. select “ok†or tap anywhere off of the “monitoring paused†message
  2. +
+
+ stop:
+
    +
  1. + press the switch while it is in it’s ‘on state’ (blue coloured) +
  2. +
  3. select “yes†when the “confirmation†window pops up
  4. +
  5. enter any notes you wish to save regarding the session and click “okâ€. It is fine to leave the input field blank and just click “ok†if you have no notes to save.
  6. +
  7. Upon stopping, your session will be saved.
  8. +
+
+ Whilst a session is in progress you cannot travel to other StudyWell pages. To do so you must first end the session. +
+
+ +

Schedule

+ This page is a placeholder. The feature is still a work-in-progress. For now there is only a button allowing you to open Google Calendar - something which can allow you to plan study sessions. +
+
+ +

Reports

+ This section is where you can view the reports on all your previous study sessions. Reports will be ordered by time and date, from earliest to latest. As of just now, to review your reports you must be connected to the internet. +
+
+ + +

Settings

+ In this section of the app you can change the app’s default settings to your own custom ones. +
+
+ current user ID:
+
    +
  1. directly under “Current User ID†you will find what your ID is currently set to
  2. +
+
+ new user ID:
+
    +
  1. tap the input box below “New User ID†- your device's keyboard should appear.
  2. +
  3. enter your user ID
  4. +
  5. tap the “Submit†button below the input box.
  6. +
+
+ + enable break reminder: +
    +
  1. in the “break reminder†section, select the “on†radio button
  2. +
  3. there should be a dark dot in the circle next to the “on†text
  4. +
  5. there should be no dark dot in the circle next to the “off†text
  6. +
+ +
+ disable break reminder:
+
    +
  1. in the “break reminder†section, select the “off†radio button
  2. +
  3. there should be a dark dot in the circle next to the “off†text
  4. +
  5. there should be no dark dot in the circle next to the “on†text
  6. +
+ +
+ set study duration between break reminders:
+
    +
  1. enable break reminder (see above)
  2. +
  3. tap the rectangle stating “X Minutes†with a small arrow pointing down - X being either “20, 30, 40, 50 or 60â€
  4. +
  5. a pop up should appear
  6. +
  7. select the duration you want to study for between breaks
  8. +
+ +
+ enable distraction reminder:
+
    +
  1. in the “distraction reminder†section, select the “on†radio button
  2. +
  3. there should be a dark dot in the circle next to the “on†text
  4. +
  5. there should be no dark dot in the circle next to the “off†text
  6. +
+
+ + disable distraction reminder:
+
    +
  1. in the “distraction reminder†section, select the “off†radio button
  2. +
  3. there should be a dark dot in the circle next to the “off†text
  4. +
  5. there should be no dark dot in the circle next to the “on†text
  6. +
+
+ + custom noise threshold level: +
    +
  1. in the “surrounding noise level†section
  2. +
  3. tap the “record noise level†button
  4. +
  5. tap “ok†on the pop up that appears
  6. +
  7. wait 10 seconds
  8. +
  9. tap ok on the pop up that appears
  10. +
+ +
+ default noise threshold level:
+
    +
  1. in the “surrounding noise level†section
  2. +
  3. tap the “default value†button
  4. +
  5. tap “ok†on the pop up that appears
  6. +
+
+
+ +

Help

+ In this section you can read the user guide and find instructions on how to complete the user evaluation. +
+
+ + +

Post-Session Questionnaire

+ This button will open up a questionnaire in your browser. This questionnaire is for filling in after a study session. It is not necessary to fill one in if your study session only lasted a few minutes. Information such as “session ID†that the questionnaire asks for can be found in the “Reports†section of the app. Ensure you are looking at the correct report when you take note of the session ID. +
+ +
+
+ + + + + + + diff --git a/www/index.html b/www/index.html index c4bfa15..e02712e 100644 --- a/www/index.html +++ b/www/index.html @@ -6,7 +6,8 @@ StudyWell Home - + + diff --git a/www/reports.html b/www/reports.html index 3273dff..80dacde 100644 --- a/www/reports.html +++ b/www/reports.html @@ -6,7 +6,9 @@ Reports - + + + diff --git a/www/resources/js/backend.js b/www/resources/js/backend.js index de020bd..3b15839 100644 --- a/www/resources/js/backend.js +++ b/www/resources/js/backend.js @@ -1,3 +1,4 @@ + var swFireBase = new Firebase("https://vivid-heat-9475.firebaseIO.com/"); var users = swFireBase.child('users'); diff --git a/www/vendors/js/firebase2.4.js b/www/vendors/js/firebase2.4.js new file mode 100644 index 0000000..a4a0f92 --- /dev/null +++ b/www/vendors/js/firebase2.4.js @@ -0,0 +1,7148 @@ +/*! @license Firebase v2.4.0 + License: https://www.firebase.com/terms/terms-of-service.html */ +(function() { + var h, n = this; + + function p(a) { + return void 0 !== a + } + + function aa() {} + + function ba(a) { + a.yb = function() { + return a.zf ? a.zf : a.zf = new a + } + } + + function ca(a) { + var b = typeof a; + if ("object" == b) + if (a) { + if (a instanceof Array) return "array"; + if (a instanceof Object) return b; + var c = Object.prototype.toString.call(a); + if ("[object Window]" == c) return "object"; + if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array"; + if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function" + } else return "null"; + else if ("function" == b && "undefined" == typeof a.call) return "object"; + return b + } + + function da(a) { + return "array" == ca(a) + } + + function ea(a) { + var b = ca(a); + return "array" == b || "object" == b && "number" == typeof a.length + } + + function q(a) { + return "string" == typeof a + } + + function fa(a) { + return "number" == typeof a + } + + function r(a) { + return "function" == ca(a) + } + + function ga(a) { + var b = typeof a; + return "object" == b && null != a || "function" == b + } + + function ha(a, b, c) { + return a.call.apply(a.bind, arguments) + } + + function ia(a, b, c) { + if (!a) throw Error(); + if (2 < arguments.length) { + var d = Array.prototype.slice.call(arguments, 2); + return function() { + var c = Array.prototype.slice.call(arguments); + Array.prototype.unshift.apply(c, d); + return a.apply(b, c) + } + } + return function() { + return a.apply(b, arguments) + } + } + + function u(a, b, c) { + u = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? ha : ia; + return u.apply(null, arguments) + } + var ja = Date.now || function() { + return +new Date + }; + + function ka(a, b) { + function c() {} + c.prototype = b.prototype; + a.nh = b.prototype; + a.prototype = new c; + a.prototype.constructor = a; + a.jh = function(a, c, f) { + for (var g = Array(arguments.length - 2), k = 2; k < arguments.length; k++) g[k - 2] = arguments[k]; + return b.prototype[c].apply(a, g) + } + }; + + function la(a) { + if (Error.captureStackTrace) Error.captureStackTrace(this, la); + else { + var b = Error().stack; + b && (this.stack = b) + } + a && (this.message = String(a)) + } + ka(la, Error); + la.prototype.name = "CustomError"; + + function v(a, b) { + for (var c in a) b.call(void 0, a[c], c, a) + } + + function ma(a, b) { + var c = {}, + d; + for (d in a) c[d] = b.call(void 0, a[d], d, a); + return c + } + + function na(a, b) { + for (var c in a) + if (!b.call(void 0, a[c], c, a)) return !1; + return !0 + } + + function oa(a) { + var b = 0, + c; + for (c in a) b++; + return b + } + + function pa(a) { + for (var b in a) return b + } + + function qa(a) { + var b = [], + c = 0, + d; + for (d in a) b[c++] = a[d]; + return b + } + + function ra(a) { + var b = [], + c = 0, + d; + for (d in a) b[c++] = d; + return b + } + + function sa(a, b) { + for (var c in a) + if (a[c] == b) return !0; + return !1 + } + + function ta(a, b, c) { + for (var d in a) + if (b.call(c, a[d], d, a)) return d + } + + function ua(a, b) { + var c = ta(a, b, void 0); + return c && a[c] + } + + function va(a) { + for (var b in a) return !1; + return !0 + } + + function wa(a) { + var b = {}, + c; + for (c in a) b[c] = a[c]; + return b + } + var xa = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "); + + function ya(a, b) { + for (var c, d, e = 1; e < arguments.length; e++) { + d = arguments[e]; + for (c in d) a[c] = d[c]; + for (var f = 0; f < xa.length; f++) c = xa[f], Object.prototype.hasOwnProperty.call(d, c) && (a[c] = d[c]) + } + }; + + function za(a) { + a = String(a); + if (/^\s*$/.test(a) ? 0 : /^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g, ""))) try { + return eval("(" + a + ")") + } catch (b) {} + throw Error("Invalid JSON string: " + a); + } + + function Aa() { + this.Vd = void 0 + } + + function Ba(a, b, c) { + switch (typeof b) { + case "string": + Ca(b, c); + break; + case "number": + c.push(isFinite(b) && !isNaN(b) ? b : "null"); + break; + case "boolean": + c.push(b); + break; + case "undefined": + c.push("null"); + break; + case "object": + if (null == b) { + c.push("null"); + break + } + if (da(b)) { + var d = b.length; + c.push("["); + for (var e = "", f = 0; f < d; f++) c.push(e), e = b[f], Ba(a, a.Vd ? a.Vd.call(b, String(f), e) : e, c), e = ","; + c.push("]"); + break + } + c.push("{"); + d = ""; + for (f in b) Object.prototype.hasOwnProperty.call(b, f) && (e = b[f], "function" != typeof e && (c.push(d), Ca(f, c), + c.push(":"), Ba(a, a.Vd ? a.Vd.call(b, f, e) : e, c), d = ",")); + c.push("}"); + break; + case "function": + break; + default: + throw Error("Unknown type: " + typeof b); + } + } + var Da = { + '"': '\\"', + "\\": "\\\\", + "/": "\\/", + "\b": "\\b", + "\f": "\\f", + "\n": "\\n", + "\r": "\\r", + "\t": "\\t", + "\x0B": "\\u000b" + }, + Ea = /\uffff/.test("\uffff") ? /[\\\"\x00-\x1f\x7f-\uffff]/g : /[\\\"\x00-\x1f\x7f-\xff]/g; + + function Ca(a, b) { + b.push('"', a.replace(Ea, function(a) { + if (a in Da) return Da[a]; + var b = a.charCodeAt(0), + e = "\\u"; + 16 > b ? e += "000" : 256 > b ? e += "00" : 4096 > b && (e += "0"); + return Da[a] = e + b.toString(16) + }), '"') + }; + + function Fa() { + return Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ ja()).toString(36) + }; + var w; + a: { + var Ga = n.navigator; + if (Ga) { + var Ha = Ga.userAgent; + if (Ha) { + w = Ha; + break a + } + } + w = "" + }; + + function Ia() { + this.Ya = -1 + }; + + function Ja() { + this.Ya = -1; + this.Ya = 64; + this.P = []; + this.pe = []; + this.eg = []; + this.Od = []; + this.Od[0] = 128; + for (var a = 1; a < this.Ya; ++a) this.Od[a] = 0; + this.ge = this.ec = 0; + this.reset() + } + ka(Ja, Ia); + Ja.prototype.reset = function() { + this.P[0] = 1732584193; + this.P[1] = 4023233417; + this.P[2] = 2562383102; + this.P[3] = 271733878; + this.P[4] = 3285377520; + this.ge = this.ec = 0 + }; + + function Ka(a, b, c) { + c || (c = 0); + var d = a.eg; + if (q(b)) + for (var e = 0; 16 > e; e++) d[e] = b.charCodeAt(c) << 24 | b.charCodeAt(c + 1) << 16 | b.charCodeAt(c + 2) << 8 | b.charCodeAt(c + 3), c += 4; + else + for (e = 0; 16 > e; e++) d[e] = b[c] << 24 | b[c + 1] << 16 | b[c + 2] << 8 | b[c + 3], c += 4; + for (e = 16; 80 > e; e++) { + var f = d[e - 3] ^ d[e - 8] ^ d[e - 14] ^ d[e - 16]; + d[e] = (f << 1 | f >>> 31) & 4294967295 + } + b = a.P[0]; + c = a.P[1]; + for (var g = a.P[2], k = a.P[3], m = a.P[4], l, e = 0; 80 > e; e++) 40 > e ? 20 > e ? (f = k ^ c & (g ^ k), l = 1518500249) : (f = c ^ g ^ k, l = 1859775393) : 60 > e ? (f = c & g | k & (c | g), l = 2400959708) : (f = c ^ g ^ k, l = 3395469782), f = (b << + 5 | b >>> 27) + f + m + l + d[e] & 4294967295, m = k, k = g, g = (c << 30 | c >>> 2) & 4294967295, c = b, b = f; + a.P[0] = a.P[0] + b & 4294967295; + a.P[1] = a.P[1] + c & 4294967295; + a.P[2] = a.P[2] + g & 4294967295; + a.P[3] = a.P[3] + k & 4294967295; + a.P[4] = a.P[4] + m & 4294967295 + } + Ja.prototype.update = function(a, b) { + if (null != a) { + p(b) || (b = a.length); + for (var c = b - this.Ya, d = 0, e = this.pe, f = this.ec; d < b;) { + if (0 == f) + for (; d <= c;) Ka(this, a, d), d += this.Ya; + if (q(a)) + for (; d < b;) { + if (e[f] = a.charCodeAt(d), ++f, ++d, f == this.Ya) { + Ka(this, e); + f = 0; + break + } + } else + for (; d < b;) + if (e[f] = a[d], ++f, ++d, f == this.Ya) { + Ka(this, e); + f = 0; + break + } + } + this.ec = f; + this.ge += b + } + }; + var x = Array.prototype, + La = x.indexOf ? function(a, b, c) { + return x.indexOf.call(a, b, c) + } : function(a, b, c) { + c = null == c ? 0 : 0 > c ? Math.max(0, a.length + c) : c; + if (q(a)) return q(b) && 1 == b.length ? a.indexOf(b, c) : -1; + for (; c < a.length; c++) + if (c in a && a[c] === b) return c; + return -1 + }, + Ma = x.forEach ? function(a, b, c) { + x.forEach.call(a, b, c) + } : function(a, b, c) { + for (var d = a.length, e = q(a) ? a.split("") : a, f = 0; f < d; f++) f in e && b.call(c, e[f], f, a) + }, + Na = x.filter ? function(a, b, c) { + return x.filter.call(a, b, c) + } : function(a, b, c) { + for (var d = a.length, e = [], f = 0, g = q(a) ? + a.split("") : a, k = 0; k < d; k++) + if (k in g) { + var m = g[k]; + b.call(c, m, k, a) && (e[f++] = m) + } + return e + }, + Oa = x.map ? function(a, b, c) { + return x.map.call(a, b, c) + } : function(a, b, c) { + for (var d = a.length, e = Array(d), f = q(a) ? a.split("") : a, g = 0; g < d; g++) g in f && (e[g] = b.call(c, f[g], g, a)); + return e + }, + Pa = x.reduce ? function(a, b, c, d) { + for (var e = [], f = 1, g = arguments.length; f < g; f++) e.push(arguments[f]); + d && (e[0] = u(b, d)); + return x.reduce.apply(a, e) + } : function(a, b, c, d) { + var e = c; + Ma(a, function(c, g) { + e = b.call(d, e, c, g, a) + }); + return e + }, + Qa = x.every ? function(a, b, + c) { + return x.every.call(a, b, c) + } : function(a, b, c) { + for (var d = a.length, e = q(a) ? a.split("") : a, f = 0; f < d; f++) + if (f in e && !b.call(c, e[f], f, a)) return !1; + return !0 + }; + + function Ra(a, b) { + var c = Sa(a, b, void 0); + return 0 > c ? null : q(a) ? a.charAt(c) : a[c] + } + + function Sa(a, b, c) { + for (var d = a.length, e = q(a) ? a.split("") : a, f = 0; f < d; f++) + if (f in e && b.call(c, e[f], f, a)) return f; + return -1 + } + + function Ta(a, b) { + var c = La(a, b); + 0 <= c && x.splice.call(a, c, 1) + } + + function Ua(a, b, c) { + return 2 >= arguments.length ? x.slice.call(a, b) : x.slice.call(a, b, c) + } + + function Va(a, b) { + a.sort(b || Wa) + } + + function Wa(a, b) { + return a > b ? 1 : a < b ? -1 : 0 + }; + + function Xa(a) { + n.setTimeout(function() { + throw a; + }, 0) + } + var Ya; + + function Za() { + var a = n.MessageChannel; + "undefined" === typeof a && "undefined" !== typeof window && window.postMessage && window.addEventListener && -1 == w.indexOf("Presto") && (a = function() { + var a = document.createElement("iframe"); + a.style.display = "none"; + a.src = ""; + document.documentElement.appendChild(a); + var b = a.contentWindow, + a = b.document; + a.open(); + a.write(""); + a.close(); + var c = "callImmediate" + Math.random(), + d = "file:" == b.location.protocol ? "*" : b.location.protocol + "//" + b.location.host, + a = u(function(a) { + if (("*" == d || a.origin == + d) && a.data == c) this.port1.onmessage() + }, this); + b.addEventListener("message", a, !1); + this.port1 = {}; + this.port2 = { + postMessage: function() { + b.postMessage(c, d) + } + } + }); + if ("undefined" !== typeof a && -1 == w.indexOf("Trident") && -1 == w.indexOf("MSIE")) { + var b = new a, + c = {}, + d = c; + b.port1.onmessage = function() { + if (p(c.next)) { + c = c.next; + var a = c.hb; + c.hb = null; + a() + } + }; + return function(a) { + d.next = { + hb: a + }; + d = d.next; + b.port2.postMessage(0) + } + } + return "undefined" !== typeof document && "onreadystatechange" in document.createElement("script") ? function(a) { + var b = + document.createElement("script"); + b.onreadystatechange = function() { + b.onreadystatechange = null; + b.parentNode.removeChild(b); + b = null; + a(); + a = null + }; + document.documentElement.appendChild(b) + } : function(a) { + n.setTimeout(a, 0) + } + }; + + function $a(a, b) { + ab || bb(); + cb || (ab(), cb = !0); + db.push(new eb(a, b)) + } + var ab; + + function bb() { + if (n.Promise && n.Promise.resolve) { + var a = n.Promise.resolve(); + ab = function() { + a.then(fb) + } + } else ab = function() { + var a = fb; + !r(n.setImmediate) || n.Window && n.Window.prototype && n.Window.prototype.setImmediate == n.setImmediate ? (Ya || (Ya = Za()), Ya(a)) : n.setImmediate(a) + } + } + var cb = !1, + db = []; + [].push(function() { + cb = !1; + db = [] + }); + + function fb() { + for (; db.length;) { + var a = db; + db = []; + for (var b = 0; b < a.length; b++) { + var c = a[b]; + try { + c.yg.call(c.scope) + } catch (d) { + Xa(d) + } + } + } + cb = !1 + } + + function eb(a, b) { + this.yg = a; + this.scope = b + }; + var gb = -1 != w.indexOf("Opera") || -1 != w.indexOf("OPR"), + hb = -1 != w.indexOf("Trident") || -1 != w.indexOf("MSIE"), + ib = -1 != w.indexOf("Gecko") && -1 == w.toLowerCase().indexOf("webkit") && !(-1 != w.indexOf("Trident") || -1 != w.indexOf("MSIE")), + jb = -1 != w.toLowerCase().indexOf("webkit"); + (function() { + var a = "", + b; + if (gb && n.opera) return a = n.opera.version, r(a) ? a() : a; + ib ? b = /rv\:([^\);]+)(\)|;)/ : hb ? b = /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/ : jb && (b = /WebKit\/(\S+)/); + b && (a = (a = b.exec(w)) ? a[1] : ""); + return hb && (b = (b = n.document) ? b.documentMode : void 0, b > parseFloat(a)) ? String(b) : a + })(); + var kb = null, + lb = null, + mb = null; + + function nb(a, b) { + if (!ea(a)) throw Error("encodeByteArray takes an array as a parameter"); + ob(); + for (var c = b ? lb : kb, d = [], e = 0; e < a.length; e += 3) { + var f = a[e], + g = e + 1 < a.length, + k = g ? a[e + 1] : 0, + m = e + 2 < a.length, + l = m ? a[e + 2] : 0, + t = f >> 2, + f = (f & 3) << 4 | k >> 4, + k = (k & 15) << 2 | l >> 6, + l = l & 63; + m || (l = 64, g || (k = 64)); + d.push(c[t], c[f], c[k], c[l]) + } + return d.join("") + } + + function ob() { + if (!kb) { + kb = {}; + lb = {}; + mb = {}; + for (var a = 0; 65 > a; a++) kb[a] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a), lb[a] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a), mb[lb[a]] = a, 62 <= a && (mb["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a)] = a) + } + }; + + function pb(a, b) { + this.N = qb; + this.Rf = void 0; + this.Ba = this.Ha = null; + this.yd = this.ye = !1; + if (a == rb) sb(this, tb, b); + else try { + var c = this; + a.call(b, function(a) { + sb(c, tb, a) + }, function(a) { + if (!(a instanceof ub)) try { + if (a instanceof Error) throw a; + throw Error("Promise rejected."); + } catch (b) {} + sb(c, vb, a) + }) + } catch (d) { + sb(this, vb, d) + } + } + var qb = 0, + tb = 2, + vb = 3; + + function rb() {} + pb.prototype.then = function(a, b, c) { + return wb(this, r(a) ? a : null, r(b) ? b : null, c) + }; + pb.prototype.then = pb.prototype.then; + pb.prototype.$goog_Thenable = !0; + pb.prototype.cancel = function(a) { + this.N == qb && $a(function() { + var b = new ub(a); + xb(this, b) + }, this) + }; + + function xb(a, b) { + if (a.N == qb) + if (a.Ha) { + var c = a.Ha; + if (c.Ba) { + for (var d = 0, e = -1, f = 0, g; g = c.Ba[f]; f++) + if (g = g.o) + if (d++, g == a && (e = f), 0 <= e && 1 < d) break; + 0 <= e && (c.N == qb && 1 == d ? xb(c, b) : (d = c.Ba.splice(e, 1)[0], yb(c, d, vb, b))) + } + a.Ha = null + } else sb(a, vb, b) + } + + function zb(a, b) { + a.Ba && a.Ba.length || a.N != tb && a.N != vb || Ab(a); + a.Ba || (a.Ba = []); + a.Ba.push(b) + } + + function wb(a, b, c, d) { + var e = { + o: null, + Hf: null, + Jf: null + }; + e.o = new pb(function(a, g) { + e.Hf = b ? function(c) { + try { + var e = b.call(d, c); + a(e) + } catch (l) { + g(l) + } + } : a; + e.Jf = c ? function(b) { + try { + var e = c.call(d, b); + !p(e) && b instanceof ub ? g(b) : a(e) + } catch (l) { + g(l) + } + } : g + }); + e.o.Ha = a; + zb(a, e); + return e.o + } + pb.prototype.Yf = function(a) { + this.N = qb; + sb(this, tb, a) + }; + pb.prototype.Zf = function(a) { + this.N = qb; + sb(this, vb, a) + }; + + function sb(a, b, c) { + if (a.N == qb) { + if (a == c) b = vb, c = new TypeError("Promise cannot resolve to itself"); + else { + var d; + if (c) try { + d = !!c.$goog_Thenable + } catch (e) { + d = !1 + } else d = !1; + if (d) { + a.N = 1; + c.then(a.Yf, a.Zf, a); + return + } + if (ga(c)) try { + var f = c.then; + if (r(f)) { + Bb(a, c, f); + return + } + } catch (g) { + b = vb, c = g + } + } + a.Rf = c; + a.N = b; + a.Ha = null; + Ab(a); + b != vb || c instanceof ub || Cb(a, c) + } + } + + function Bb(a, b, c) { + function d(b) { + f || (f = !0, a.Zf(b)) + } + + function e(b) { + f || (f = !0, a.Yf(b)) + } + a.N = 1; + var f = !1; + try { + c.call(b, e, d) + } catch (g) { + d(g) + } + } + + function Ab(a) { + a.ye || (a.ye = !0, $a(a.wg, a)) + } + pb.prototype.wg = function() { + for (; this.Ba && this.Ba.length;) { + var a = this.Ba; + this.Ba = null; + for (var b = 0; b < a.length; b++) yb(this, a[b], this.N, this.Rf) + } + this.ye = !1 + }; + + function yb(a, b, c, d) { + if (c == tb) b.Hf(d); + else { + if (b.o) + for (; a && a.yd; a = a.Ha) a.yd = !1; + b.Jf(d) + } + } + + function Cb(a, b) { + a.yd = !0; + $a(function() { + a.yd && Db.call(null, b) + }) + } + var Db = Xa; + + function ub(a) { + la.call(this, a) + } + ka(ub, la); + ub.prototype.name = "cancel"; + var Eb = Eb || "2.4.0"; + + function y(a, b) { + return Object.prototype.hasOwnProperty.call(a, b) + } + + function z(a, b) { + if (Object.prototype.hasOwnProperty.call(a, b)) return a[b] + } + + function Fb(a, b) { + for (var c in a) Object.prototype.hasOwnProperty.call(a, c) && b(c, a[c]) + } + + function Gb(a) { + var b = {}; + Fb(a, function(a, d) { + b[a] = d + }); + return b + } + + function Hb(a) { + return "object" === typeof a && null !== a + }; + + function Ib(a) { + var b = []; + Fb(a, function(a, d) { + da(d) ? Ma(d, function(d) { + b.push(encodeURIComponent(a) + "=" + encodeURIComponent(d)) + }) : b.push(encodeURIComponent(a) + "=" + encodeURIComponent(d)) + }); + return b.length ? "&" + b.join("&") : "" + } + + function Jb(a) { + var b = {}; + a = a.replace(/^\?/, "").split("&"); + Ma(a, function(a) { + a && (a = a.split("="), b[a[0]] = a[1]) + }); + return b + }; + + function Kb(a, b) { + if (!a) throw Lb(b); + } + + function Lb(a) { + return Error("Firebase (" + Eb + ") INTERNAL ASSERT FAILED: " + a) + }; + var Mb = n.Promise || pb; + + function B() { + var a = this; + this.reject = this.resolve = null; + this.D = new Mb(function(b, c) { + a.resolve = b; + a.reject = c + }) + } + + function C(a, b) { + return function(c, d) { + c ? a.reject(c) : a.resolve(d); + r(b) && (Nb(a.D), 1 === b.length ? b(c) : b(c, d)) + } + } + + function Nb(a) { + a.then(void 0, aa) + }; + + function Ob(a) { + for (var b = [], c = 0, d = 0; d < a.length; d++) { + var e = a.charCodeAt(d); + 55296 <= e && 56319 >= e && (e -= 55296, d++, Kb(d < a.length, "Surrogate pair missing trail surrogate."), e = 65536 + (e << 10) + (a.charCodeAt(d) - 56320)); + 128 > e ? b[c++] = e : (2048 > e ? b[c++] = e >> 6 | 192 : (65536 > e ? b[c++] = e >> 12 | 224 : (b[c++] = e >> 18 | 240, b[c++] = e >> 12 & 63 | 128), b[c++] = e >> 6 & 63 | 128), b[c++] = e & 63 | 128) + } + return b + } + + function Pb(a) { + for (var b = 0, c = 0; c < a.length; c++) { + var d = a.charCodeAt(c); + 128 > d ? b++ : 2048 > d ? b += 2 : 55296 <= d && 56319 >= d ? (b += 4, c++) : b += 3 + } + return b + }; + + function D(a, b, c, d) { + var e; + d < b ? e = "at least " + b : d > c && (e = 0 === c ? "none" : "no more than " + c); + if (e) throw Error(a + " failed: Was called with " + d + (1 === d ? " argument." : " arguments.") + " Expects " + e + "."); + } + + function E(a, b, c) { + var d = ""; + switch (b) { + case 1: + d = c ? "first" : "First"; + break; + case 2: + d = c ? "second" : "Second"; + break; + case 3: + d = c ? "third" : "Third"; + break; + case 4: + d = c ? "fourth" : "Fourth"; + break; + default: + throw Error("errorPrefix called with argumentNumber > 4. Need to update it?"); + } + return a = a + " failed: " + (d + " argument ") + } + + function F(a, b, c, d) { + if ((!d || p(c)) && !r(c)) throw Error(E(a, b, d) + "must be a valid function."); + } + + function Qb(a, b, c) { + if (p(c) && (!ga(c) || null === c)) throw Error(E(a, b, !0) + "must be a valid context object."); + }; + + function Rb(a) { + return "undefined" !== typeof JSON && p(JSON.parse) ? JSON.parse(a) : za(a) + } + + function G(a) { + if ("undefined" !== typeof JSON && p(JSON.stringify)) a = JSON.stringify(a); + else { + var b = []; + Ba(new Aa, a, b); + a = b.join("") + } + return a + }; + + function Sb() { + this.Zd = H + } + Sb.prototype.j = function(a) { + return this.Zd.S(a) + }; + Sb.prototype.toString = function() { + return this.Zd.toString() + }; + + function Tb() {} + Tb.prototype.uf = function() { + return null + }; + Tb.prototype.Ce = function() { + return null + }; + var Ub = new Tb; + + function Vb(a, b, c) { + this.bg = a; + this.Oa = b; + this.Nd = c + } + Vb.prototype.uf = function(a) { + var b = this.Oa.Q; + if (Wb(b, a)) return b.j().T(a); + b = null != this.Nd ? new Xb(this.Nd, !0, !1) : this.Oa.w(); + return this.bg.Bc(a, b) + }; + Vb.prototype.Ce = function(a, b, c) { + var d = null != this.Nd ? this.Nd : Yb(this.Oa); + a = this.bg.qe(d, b, 1, c, a); + return 0 === a.length ? null : a[0] + }; + + function Zb() { + this.xb = [] + } + + function $b(a, b) { + for (var c = null, d = 0; d < b.length; d++) { + var e = b[d], + f = e.cc(); + null === c || f.ea(c.cc()) || (a.xb.push(c), c = null); + null === c && (c = new ac(f)); + c.add(e) + } + c && a.xb.push(c) + } + + function bc(a, b, c) { + $b(a, c); + cc(a, function(a) { + return a.ea(b) + }) + } + + function dc(a, b, c) { + $b(a, c); + cc(a, function(a) { + return a.contains(b) || b.contains(a) + }) + } + + function cc(a, b) { + for (var c = !0, d = 0; d < a.xb.length; d++) { + var e = a.xb[d]; + if (e) + if (e = e.cc(), b(e)) { + for (var e = a.xb[d], f = 0; f < e.xd.length; f++) { + var g = e.xd[f]; + if (null !== g) { + e.xd[f] = null; + var k = g.Zb(); + ec && fc("event: " + g.toString()); + gc(k) + } + } + a.xb[d] = null + } else c = !1 + } + c && (a.xb = []) + } + + function ac(a) { + this.ta = a; + this.xd = [] + } + ac.prototype.add = function(a) { + this.xd.push(a) + }; + ac.prototype.cc = function() { + return this.ta + }; + + function J(a, b, c, d) { + this.type = a; + this.Na = b; + this.Za = c; + this.Oe = d; + this.Td = void 0 + } + + function hc(a) { + return new J(ic, a) + } + var ic = "value"; + + function jc(a, b, c, d) { + this.xe = b; + this.be = c; + this.Td = d; + this.wd = a + } + jc.prototype.cc = function() { + var a = this.be.Mb(); + return "value" === this.wd ? a.path : a.parent().path + }; + jc.prototype.De = function() { + return this.wd + }; + jc.prototype.Zb = function() { + return this.xe.Zb(this) + }; + jc.prototype.toString = function() { + return this.cc().toString() + ":" + this.wd + ":" + G(this.be.qf()) + }; + + function kc(a, b, c) { + this.xe = a; + this.error = b; + this.path = c + } + kc.prototype.cc = function() { + return this.path + }; + kc.prototype.De = function() { + return "cancel" + }; + kc.prototype.Zb = function() { + return this.xe.Zb(this) + }; + kc.prototype.toString = function() { + return this.path.toString() + ":cancel" + }; + + function Xb(a, b, c) { + this.A = a; + this.ga = b; + this.Yb = c + } + + function lc(a) { + return a.ga + } + + function mc(a) { + return a.Yb + } + + function nc(a, b) { + return b.e() ? a.ga && !a.Yb : Wb(a, K(b)) + } + + function Wb(a, b) { + return a.ga && !a.Yb || a.A.Fa(b) + } + Xb.prototype.j = function() { + return this.A + }; + + function oc(a) { + this.pg = a; + this.Gd = null + } + oc.prototype.get = function() { + var a = this.pg.get(), + b = wa(a); + if (this.Gd) + for (var c in this.Gd) b[c] -= this.Gd[c]; + this.Gd = a; + return b + }; + + function pc(a, b) { + this.Vf = {}; + this.hd = new oc(a); + this.da = b; + var c = 1E4 + 2E4 * Math.random(); + setTimeout(u(this.Of, this), Math.floor(c)) + } + pc.prototype.Of = function() { + var a = this.hd.get(), + b = {}, + c = !1, + d; + for (d in a) 0 < a[d] && y(this.Vf, d) && (b[d] = a[d], c = !0); + c && this.da.Ye(b); + setTimeout(u(this.Of, this), Math.floor(6E5 * Math.random())) + }; + + function qc() { + this.Hc = {} + } + + function rc(a, b, c) { + p(c) || (c = 1); + y(a.Hc, b) || (a.Hc[b] = 0); + a.Hc[b] += c + } + qc.prototype.get = function() { + return wa(this.Hc) + }; + var sc = {}, + tc = {}; + + function uc(a) { + a = a.toString(); + sc[a] || (sc[a] = new qc); + return sc[a] + } + + function vc(a, b) { + var c = a.toString(); + tc[c] || (tc[c] = b()); + return tc[c] + }; + + function L(a, b) { + this.name = a; + this.U = b + } + + function wc(a, b) { + return new L(a, b) + }; + + function xc(a, b) { + return yc(a.name, b.name) + } + + function zc(a, b) { + return yc(a, b) + }; + + function Ac(a, b, c) { + this.type = Bc; + this.source = a; + this.path = b; + this.Ja = c + } + Ac.prototype.$c = function(a) { + return this.path.e() ? new Ac(this.source, M, this.Ja.T(a)) : new Ac(this.source, N(this.path), this.Ja) + }; + Ac.prototype.toString = function() { + return "Operation(" + this.path + ": " + this.source.toString() + " overwrite: " + this.Ja.toString() + ")" + }; + + function Cc(a, b) { + this.type = Dc; + this.source = a; + this.path = b + } + Cc.prototype.$c = function() { + return this.path.e() ? new Cc(this.source, M) : new Cc(this.source, N(this.path)) + }; + Cc.prototype.toString = function() { + return "Operation(" + this.path + ": " + this.source.toString() + " listen_complete)" + }; + + function Ec(a, b) { + this.Pa = a; + this.xa = b ? b : Fc + } + h = Ec.prototype; + h.Sa = function(a, b) { + return new Ec(this.Pa, this.xa.Sa(a, b, this.Pa).$(null, null, !1, null, null)) + }; + h.remove = function(a) { + return new Ec(this.Pa, this.xa.remove(a, this.Pa).$(null, null, !1, null, null)) + }; + h.get = function(a) { + for (var b, c = this.xa; !c.e();) { + b = this.Pa(a, c.key); + if (0 === b) return c.value; + 0 > b ? c = c.left : 0 < b && (c = c.right) + } + return null + }; + + function Gc(a, b) { + for (var c, d = a.xa, e = null; !d.e();) { + c = a.Pa(b, d.key); + if (0 === c) { + if (d.left.e()) return e ? e.key : null; + for (d = d.left; !d.right.e();) d = d.right; + return d.key + } + 0 > c ? d = d.left : 0 < c && (e = d, d = d.right) + } + throw Error("Attempted to find predecessor key for a nonexistent key. What gives?"); + } + h.e = function() { + return this.xa.e() + }; + h.count = function() { + return this.xa.count() + }; + h.Vc = function() { + return this.xa.Vc() + }; + h.jc = function() { + return this.xa.jc() + }; + h.ka = function(a) { + return this.xa.ka(a) + }; + h.ac = function(a) { + return new Hc(this.xa, null, this.Pa, !1, a) + }; + h.bc = function(a, b) { + return new Hc(this.xa, a, this.Pa, !1, b) + }; + h.dc = function(a, b) { + return new Hc(this.xa, a, this.Pa, !0, b) + }; + h.xf = function(a) { + return new Hc(this.xa, null, this.Pa, !0, a) + }; + + function Hc(a, b, c, d, e) { + this.Xd = e || null; + this.Je = d; + this.Ta = []; + for (e = 1; !a.e();) + if (e = b ? c(a.key, b) : 1, d && (e *= -1), 0 > e) a = this.Je ? a.left : a.right; + else if (0 === e) { + this.Ta.push(a); + break + } else this.Ta.push(a), a = this.Je ? a.right : a.left + } + + function Ic(a) { + if (0 === a.Ta.length) return null; + var b = a.Ta.pop(), + c; + c = a.Xd ? a.Xd(b.key, b.value) : { + key: b.key, + value: b.value + }; + if (a.Je) + for (b = b.left; !b.e();) a.Ta.push(b), b = b.right; + else + for (b = b.right; !b.e();) a.Ta.push(b), b = b.left; + return c + } + + function Jc(a) { + if (0 === a.Ta.length) return null; + var b; + b = a.Ta; + b = b[b.length - 1]; + return a.Xd ? a.Xd(b.key, b.value) : { + key: b.key, + value: b.value + } + } + + function Kc(a, b, c, d, e) { + this.key = a; + this.value = b; + this.color = null != c ? c : !0; + this.left = null != d ? d : Fc; + this.right = null != e ? e : Fc + } + h = Kc.prototype; + h.$ = function(a, b, c, d, e) { + return new Kc(null != a ? a : this.key, null != b ? b : this.value, null != c ? c : this.color, null != d ? d : this.left, null != e ? e : this.right) + }; + h.count = function() { + return this.left.count() + 1 + this.right.count() + }; + h.e = function() { + return !1 + }; + h.ka = function(a) { + return this.left.ka(a) || a(this.key, this.value) || this.right.ka(a) + }; + + function Lc(a) { + return a.left.e() ? a : Lc(a.left) + } + h.Vc = function() { + return Lc(this).key + }; + h.jc = function() { + return this.right.e() ? this.key : this.right.jc() + }; + h.Sa = function(a, b, c) { + var d, e; + e = this; + d = c(a, e.key); + e = 0 > d ? e.$(null, null, null, e.left.Sa(a, b, c), null) : 0 === d ? e.$(null, b, null, null, null) : e.$(null, null, null, null, e.right.Sa(a, b, c)); + return Mc(e) + }; + + function Nc(a) { + if (a.left.e()) return Fc; + a.left.ha() || a.left.left.ha() || (a = Oc(a)); + a = a.$(null, null, null, Nc(a.left), null); + return Mc(a) + } + h.remove = function(a, b) { + var c, d; + c = this; + if (0 > b(a, c.key)) c.left.e() || c.left.ha() || c.left.left.ha() || (c = Oc(c)), c = c.$(null, null, null, c.left.remove(a, b), null); + else { + c.left.ha() && (c = Pc(c)); + c.right.e() || c.right.ha() || c.right.left.ha() || (c = Qc(c), c.left.left.ha() && (c = Pc(c), c = Qc(c))); + if (0 === b(a, c.key)) { + if (c.right.e()) return Fc; + d = Lc(c.right); + c = c.$(d.key, d.value, null, null, Nc(c.right)) + } + c = c.$(null, null, null, null, c.right.remove(a, b)) + } + return Mc(c) + }; + h.ha = function() { + return this.color + }; + + function Mc(a) { + a.right.ha() && !a.left.ha() && (a = Rc(a)); + a.left.ha() && a.left.left.ha() && (a = Pc(a)); + a.left.ha() && a.right.ha() && (a = Qc(a)); + return a + } + + function Oc(a) { + a = Qc(a); + a.right.left.ha() && (a = a.$(null, null, null, null, Pc(a.right)), a = Rc(a), a = Qc(a)); + return a + } + + function Rc(a) { + return a.right.$(null, null, a.color, a.$(null, null, !0, null, a.right.left), null) + } + + function Pc(a) { + return a.left.$(null, null, a.color, null, a.$(null, null, !0, a.left.right, null)) + } + + function Qc(a) { + return a.$(null, null, !a.color, a.left.$(null, null, !a.left.color, null, null), a.right.$(null, null, !a.right.color, null, null)) + } + + function Sc() {} + h = Sc.prototype; + h.$ = function() { + return this + }; + h.Sa = function(a, b) { + return new Kc(a, b, null) + }; + h.remove = function() { + return this + }; + h.count = function() { + return 0 + }; + h.e = function() { + return !0 + }; + h.ka = function() { + return !1 + }; + h.Vc = function() { + return null + }; + h.jc = function() { + return null + }; + h.ha = function() { + return !1 + }; + var Fc = new Sc; + + function Tc(a, b) { + return a && "object" === typeof a ? (O(".sv" in a, "Unexpected leaf node or priority contents"), b[a[".sv"]]) : a + } + + function Uc(a, b) { + var c = new Vc; + Wc(a, new P(""), function(a, e) { + c.rc(a, Xc(e, b)) + }); + return c + } + + function Xc(a, b) { + var c = a.C().J(), + c = Tc(c, b), + d; + if (a.L()) { + var e = Tc(a.Ea(), b); + return e !== a.Ea() || c !== a.C().J() ? new Yc(e, Q(c)) : a + } + d = a; + c !== a.C().J() && (d = d.ia(new Yc(c))); + a.R(R, function(a, c) { + var e = Xc(c, b); + e !== c && (d = d.W(a, e)) + }); + return d + }; + + function Zc() { + this.Ac = {} + } + Zc.prototype.set = function(a, b) { + null == b ? delete this.Ac[a] : this.Ac[a] = b + }; + Zc.prototype.get = function(a) { + return y(this.Ac, a) ? this.Ac[a] : null + }; + Zc.prototype.remove = function(a) { + delete this.Ac[a] + }; + Zc.prototype.Af = !0; + + function $c(a) { + this.Ic = a; + this.Sd = "firebase:" + } + h = $c.prototype; + h.set = function(a, b) { + null == b ? this.Ic.removeItem(this.Sd + a) : this.Ic.setItem(this.Sd + a, G(b)) + }; + h.get = function(a) { + a = this.Ic.getItem(this.Sd + a); + return null == a ? null : Rb(a) + }; + h.remove = function(a) { + this.Ic.removeItem(this.Sd + a) + }; + h.Af = !1; + h.toString = function() { + return this.Ic.toString() + }; + + function ad(a) { + try { + if ("undefined" !== typeof window && "undefined" !== typeof window[a]) { + var b = window[a]; + b.setItem("firebase:sentinel", "cache"); + b.removeItem("firebase:sentinel"); + return new $c(b) + } + } catch (c) {} + return new Zc + } + var bd = ad("localStorage"), + cd = ad("sessionStorage"); + + function dd(a, b, c, d, e) { + this.host = a.toLowerCase(); + this.domain = this.host.substr(this.host.indexOf(".") + 1); + this.ob = b; + this.lc = c; + this.hh = d; + this.Rd = e || ""; + this.ab = bd.get("host:" + a) || this.host + } + + function ed(a, b) { + b !== a.ab && (a.ab = b, "s-" === a.ab.substr(0, 2) && bd.set("host:" + a.host, a.ab)) + } + + function fd(a, b, c) { + O("string" === typeof b, "typeof type must == string"); + O("object" === typeof c, "typeof params must == object"); + if (b === gd) b = (a.ob ? "wss://" : "ws://") + a.ab + "/.ws?"; + else if (b === hd) b = (a.ob ? "https://" : "http://") + a.ab + "/.lp?"; + else throw Error("Unknown connection type: " + b); + a.host !== a.ab && (c.ns = a.lc); + var d = []; + v(c, function(a, b) { + d.push(b + "=" + a) + }); + return b + d.join("&") + } + dd.prototype.toString = function() { + var a = (this.ob ? "https://" : "http://") + this.host; + this.Rd && (a += "<" + this.Rd + ">"); + return a + }; + var id = function() { + var a = 1; + return function() { + return a++ + } + }(), + O = Kb, + jd = Lb; + + function kd(a) { + try { + var b; + if ("undefined" !== typeof atob) b = atob(a); + else { + ob(); + for (var c = mb, d = [], e = 0; e < a.length;) { + var f = c[a.charAt(e++)], + g = e < a.length ? c[a.charAt(e)] : 0; + ++e; + var k = e < a.length ? c[a.charAt(e)] : 64; + ++e; + var m = e < a.length ? c[a.charAt(e)] : 64; + ++e; + if (null == f || null == g || null == k || null == m) throw Error(); + d.push(f << 2 | g >> 4); + 64 != k && (d.push(g << 4 & 240 | k >> 2), 64 != m && d.push(k << 6 & 192 | m)) + } + if (8192 > d.length) b = String.fromCharCode.apply(null, d); + else { + a = ""; + for (c = 0; c < d.length; c += 8192) a += String.fromCharCode.apply(null, Ua(d, c, + c + 8192)); + b = a + } + } + return b + } catch (l) { + fc("base64Decode failed: ", l) + } + return null + } + + function ld(a) { + var b = Ob(a); + a = new Ja; + a.update(b); + var b = [], + c = 8 * a.ge; + 56 > a.ec ? a.update(a.Od, 56 - a.ec) : a.update(a.Od, a.Ya - (a.ec - 56)); + for (var d = a.Ya - 1; 56 <= d; d--) a.pe[d] = c & 255, c /= 256; + Ka(a, a.pe); + for (d = c = 0; 5 > d; d++) + for (var e = 24; 0 <= e; e -= 8) b[c] = a.P[d] >> e & 255, ++c; + return nb(b) + } + + function md(a) { + for (var b = "", c = 0; c < arguments.length; c++) b = ea(arguments[c]) ? b + md.apply(null, arguments[c]) : "object" === typeof arguments[c] ? b + G(arguments[c]) : b + arguments[c], b += " "; + return b + } + var ec = null, + nd = !0; + + function od(a, b) { + Kb(!b || !0 === a || !1 === a, "Can't turn on custom loggers persistently."); + !0 === a ? ("undefined" !== typeof console && ("function" === typeof console.log ? ec = u(console.log, console) : "object" === typeof console.log && (ec = function(a) { + console.log(a) + })), b && cd.set("logging_enabled", !0)) : r(a) ? ec = a : (ec = null, cd.remove("logging_enabled")) + } + + function fc(a) { + !0 === nd && (nd = !1, null === ec && !0 === cd.get("logging_enabled") && od(!0)); + if (ec) { + var b = md.apply(null, arguments); + ec(b) + } + } + + function pd(a) { + return function() { + fc(a, arguments) + } + } + + function qd(a) { + if ("undefined" !== typeof console) { + var b = "FIREBASE INTERNAL ERROR: " + md.apply(null, arguments); + "undefined" !== typeof console.error ? console.error(b) : console.log(b) + } + } + + function rd(a) { + var b = md.apply(null, arguments); + throw Error("FIREBASE FATAL ERROR: " + b); + } + + function S(a) { + if ("undefined" !== typeof console) { + var b = "FIREBASE WARNING: " + md.apply(null, arguments); + "undefined" !== typeof console.warn ? console.warn(b) : console.log(b) + } + } + + function sd(a) { + var b = "", + c = "", + d = "", + e = "", + f = !0, + g = "https", + k = 443; + if (q(a)) { + var m = a.indexOf("//"); + 0 <= m && (g = a.substring(0, m - 1), a = a.substring(m + 2)); + m = a.indexOf("/"); - 1 === m && (m = a.length); + b = a.substring(0, m); + e = ""; + a = a.substring(m).split("/"); + for (m = 0; m < a.length; m++) + if (0 < a[m].length) { + var l = a[m]; + try { + l = decodeURIComponent(l.replace(/\+/g, " ")) + } catch (t) {} + e += "/" + l + } + a = b.split("."); + 3 === a.length ? (c = a[1], d = a[0].toLowerCase()) : 2 === a.length && (c = a[0]); + m = b.indexOf(":"); + 0 <= m && (f = "https" === g || "wss" === g, k = b.substring(m + 1), isFinite(k) && + (k = String(k)), k = q(k) ? /^\s*-?0x/i.test(k) ? parseInt(k, 16) : parseInt(k, 10) : NaN) + } + return { + host: b, + port: k, + domain: c, + eh: d, + ob: f, + scheme: g, + bd: e + } + } + + function td(a) { + return fa(a) && (a != a || a == Number.POSITIVE_INFINITY || a == Number.NEGATIVE_INFINITY) + } + + function ud(a) { + if ("complete" === document.readyState) a(); + else { + var b = !1, + c = function() { + document.body ? b || (b = !0, a()) : setTimeout(c, Math.floor(10)) + }; + document.addEventListener ? (document.addEventListener("DOMContentLoaded", c, !1), window.addEventListener("load", c, !1)) : document.attachEvent && (document.attachEvent("onreadystatechange", function() { + "complete" === document.readyState && c() + }), window.attachEvent("onload", c)) + } + } + + function yc(a, b) { + if (a === b) return 0; + if ("[MIN_NAME]" === a || "[MAX_NAME]" === b) return -1; + if ("[MIN_NAME]" === b || "[MAX_NAME]" === a) return 1; + var c = vd(a), + d = vd(b); + return null !== c ? null !== d ? 0 == c - d ? a.length - b.length : c - d : -1 : null !== d ? 1 : a < b ? -1 : 1 + } + + function wd(a, b) { + if (b && a in b) return b[a]; + throw Error("Missing required key (" + a + ") in object: " + G(b)); + } + + function xd(a) { + if ("object" !== typeof a || null === a) return G(a); + var b = [], + c; + for (c in a) b.push(c); + b.sort(); + c = "{"; + for (var d = 0; d < b.length; d++) 0 !== d && (c += ","), c += G(b[d]), c += ":", c += xd(a[b[d]]); + return c + "}" + } + + function yd(a, b) { + if (a.length <= b) return [a]; + for (var c = [], d = 0; d < a.length; d += b) d + b > a ? c.push(a.substring(d, a.length)) : c.push(a.substring(d, d + b)); + return c + } + + function zd(a, b) { + if (da(a)) + for (var c = 0; c < a.length; ++c) b(c, a[c]); + else v(a, b) + } + + function Ad(a) { + O(!td(a), "Invalid JSON number"); + var b, c, d, e; + 0 === a ? (d = c = 0, b = -Infinity === 1 / a ? 1 : 0) : (b = 0 > a, a = Math.abs(a), a >= Math.pow(2, -1022) ? (d = Math.min(Math.floor(Math.log(a) / Math.LN2), 1023), c = d + 1023, d = Math.round(a * Math.pow(2, 52 - d) - Math.pow(2, 52))) : (c = 0, d = Math.round(a / Math.pow(2, -1074)))); + e = []; + for (a = 52; a; --a) e.push(d % 2 ? 1 : 0), d = Math.floor(d / 2); + for (a = 11; a; --a) e.push(c % 2 ? 1 : 0), c = Math.floor(c / 2); + e.push(b ? 1 : 0); + e.reverse(); + b = e.join(""); + c = ""; + for (a = 0; 64 > a; a += 8) d = parseInt(b.substr(a, 8), 2).toString(16), 1 === d.length && + (d = "0" + d), c += d; + return c.toLowerCase() + } + var Bd = /^-?\d{1,10}$/; + + function vd(a) { + return Bd.test(a) && (a = Number(a), -2147483648 <= a && 2147483647 >= a) ? a : null + } + + function gc(a) { + try { + a() + } catch (b) { + setTimeout(function() { + S("Exception was thrown by user callback.", b.stack || ""); + throw b; + }, Math.floor(0)) + } + } + + function T(a, b) { + if (r(a)) { + var c = Array.prototype.slice.call(arguments, 1).slice(); + gc(function() { + a.apply(null, c) + }) + } + }; + + function Cd(a) { + var b = {}, + c = {}, + d = {}, + e = ""; + try { + var f = a.split("."), + b = Rb(kd(f[0]) || ""), + c = Rb(kd(f[1]) || ""), + e = f[2], + d = c.d || {}; + delete c.d + } catch (g) {} + return { + kh: b, + Ec: c, + data: d, + ah: e + } + } + + function Dd(a) { + a = Cd(a).Ec; + return "object" === typeof a && a.hasOwnProperty("iat") ? z(a, "iat") : null + } + + function Ed(a) { + a = Cd(a); + var b = a.Ec; + return !!a.ah && !!b && "object" === typeof b && b.hasOwnProperty("iat") + }; + + function Fd(a) { + this.Y = a; + this.g = a.n.g + } + + function Gd(a, b, c, d) { + var e = [], + f = []; + Ma(b, function(b) { + "child_changed" === b.type && a.g.Dd(b.Oe, b.Na) && f.push(new J("child_moved", b.Na, b.Za)) + }); + Hd(a, e, "child_removed", b, d, c); + Hd(a, e, "child_added", b, d, c); + Hd(a, e, "child_moved", f, d, c); + Hd(a, e, "child_changed", b, d, c); + Hd(a, e, ic, b, d, c); + return e + } + + function Hd(a, b, c, d, e, f) { + d = Na(d, function(a) { + return a.type === c + }); + Va(d, u(a.qg, a)); + Ma(d, function(c) { + var d = Id(a, c, f); + Ma(e, function(e) { + e.Qf(c.type) && b.push(e.createEvent(d, a.Y)) + }) + }) + } + + function Id(a, b, c) { + "value" !== b.type && "child_removed" !== b.type && (b.Td = c.wf(b.Za, b.Na, a.g)); + return b + } + Fd.prototype.qg = function(a, b) { + if (null == a.Za || null == b.Za) throw jd("Should only compare child_ events."); + return this.g.compare(new L(a.Za, a.Na), new L(b.Za, b.Na)) + }; + + function Jd() { + this.ib = {} + } + + function Kd(a, b) { + var c = b.type, + d = b.Za; + O("child_added" == c || "child_changed" == c || "child_removed" == c, "Only child changes supported for tracking"); + O(".priority" !== d, "Only non-priority child changes can be tracked."); + var e = z(a.ib, d); + if (e) { + var f = e.type; + if ("child_added" == c && "child_removed" == f) a.ib[d] = new J("child_changed", b.Na, d, e.Na); + else if ("child_removed" == c && "child_added" == f) delete a.ib[d]; + else if ("child_removed" == c && "child_changed" == f) a.ib[d] = new J("child_removed", e.Oe, d); + else if ("child_changed" == c && + "child_added" == f) a.ib[d] = new J("child_added", b.Na, d); + else if ("child_changed" == c && "child_changed" == f) a.ib[d] = new J("child_changed", b.Na, d, e.Oe); + else throw jd("Illegal combination of changes: " + b + " occurred after " + e); + } else a.ib[d] = b + }; + + function Ld(a) { + this.g = a + } + h = Ld.prototype; + h.H = function(a, b, c, d, e, f) { + O(a.Mc(this.g), "A node must be indexed if only a child is updated"); + e = a.T(b); + if (e.S(d).ea(c.S(d)) && e.e() == c.e()) return a; + null != f && (c.e() ? a.Fa(b) ? Kd(f, new J("child_removed", e, b)) : O(a.L(), "A child remove without an old child only makes sense on a leaf node") : e.e() ? Kd(f, new J("child_added", c, b)) : Kd(f, new J("child_changed", c, b, e))); + return a.L() && c.e() ? a : a.W(b, c).pb(this.g) + }; + h.ya = function(a, b, c) { + null != c && (a.L() || a.R(R, function(a, e) { + b.Fa(a) || Kd(c, new J("child_removed", e, a)) + }), b.L() || b.R(R, function(b, e) { + if (a.Fa(b)) { + var f = a.T(b); + f.ea(e) || Kd(c, new J("child_changed", e, b, f)) + } else Kd(c, new J("child_added", e, b)) + })); + return b.pb(this.g) + }; + h.ia = function(a, b) { + return a.e() ? H : a.ia(b) + }; + h.Ra = function() { + return !1 + }; + h.$b = function() { + return this + }; + + function Md(a) { + this.Fe = new Ld(a.g); + this.g = a.g; + var b; + a.oa ? (b = Nd(a), b = a.g.Sc(Od(a), b)) : b = a.g.Wc(); + this.gd = b; + a.ra ? (b = Pd(a), a = a.g.Sc(Rd(a), b)) : a = a.g.Tc(); + this.Jc = a + } + h = Md.prototype; + h.matches = function(a) { + return 0 >= this.g.compare(this.gd, a) && 0 >= this.g.compare(a, this.Jc) + }; + h.H = function(a, b, c, d, e, f) { + this.matches(new L(b, c)) || (c = H); + return this.Fe.H(a, b, c, d, e, f) + }; + h.ya = function(a, b, c) { + b.L() && (b = H); + var d = b.pb(this.g), + d = d.ia(H), + e = this; + b.R(R, function(a, b) { + e.matches(new L(a, b)) || (d = d.W(a, H)) + }); + return this.Fe.ya(a, d, c) + }; + h.ia = function(a) { + return a + }; + h.Ra = function() { + return !0 + }; + h.$b = function() { + return this.Fe + }; + + function Sd(a) { + this.ua = new Md(a); + this.g = a.g; + O(a.la, "Only valid if limit has been set"); + this.ma = a.ma; + this.Nb = !Td(a) + } + h = Sd.prototype; + h.H = function(a, b, c, d, e, f) { + this.ua.matches(new L(b, c)) || (c = H); + return a.T(b).ea(c) ? a : a.Hb() < this.ma ? this.ua.$b().H(a, b, c, d, e, f) : Ud(this, a, b, c, e, f) + }; + h.ya = function(a, b, c) { + var d; + if (b.L() || b.e()) d = H.pb(this.g); + else if (2 * this.ma < b.Hb() && b.Mc(this.g)) { + d = H.pb(this.g); + b = this.Nb ? b.dc(this.ua.Jc, this.g) : b.bc(this.ua.gd, this.g); + for (var e = 0; 0 < b.Ta.length && e < this.ma;) { + var f = Ic(b), + g; + if (g = this.Nb ? 0 >= this.g.compare(this.ua.gd, f) : 0 >= this.g.compare(f, this.ua.Jc)) d = d.W(f.name, f.U), e++; + else break + } + } else { + d = b.pb(this.g); + d = d.ia(H); + var k, m, l; + if (this.Nb) { + b = d.xf(this.g); + k = this.ua.Jc; + m = this.ua.gd; + var t = Vd(this.g); + l = function(a, b) { + return t(b, a) + } + } else b = d.ac(this.g), k = this.ua.gd, + m = this.ua.Jc, l = Vd(this.g); + for (var e = 0, A = !1; 0 < b.Ta.length;) f = Ic(b), !A && 0 >= l(k, f) && (A = !0), (g = A && e < this.ma && 0 >= l(f, m)) ? e++ : d = d.W(f.name, H) + } + return this.ua.$b().ya(a, d, c) + }; + h.ia = function(a) { + return a + }; + h.Ra = function() { + return !0 + }; + h.$b = function() { + return this.ua.$b() + }; + + function Ud(a, b, c, d, e, f) { + var g; + if (a.Nb) { + var k = Vd(a.g); + g = function(a, b) { + return k(b, a) + } + } else g = Vd(a.g); + O(b.Hb() == a.ma, ""); + var m = new L(c, d), + l = a.Nb ? Wd(b, a.g) : Xd(b, a.g), + t = a.ua.matches(m); + if (b.Fa(c)) { + for (var A = b.T(c), l = e.Ce(a.g, l, a.Nb); null != l && (l.name == c || b.Fa(l.name));) l = e.Ce(a.g, l, a.Nb); + e = null == l ? 1 : g(l, m); + if (t && !d.e() && 0 <= e) return null != f && Kd(f, new J("child_changed", d, c, A)), b.W(c, d); + null != f && Kd(f, new J("child_removed", A, c)); + b = b.W(c, H); + return null != l && a.ua.matches(l) ? (null != f && Kd(f, new J("child_added", + l.U, l.name)), b.W(l.name, l.U)) : b + } + return d.e() ? b : t && 0 <= g(l, m) ? (null != f && (Kd(f, new J("child_removed", l.U, l.name)), Kd(f, new J("child_added", d, c))), b.W(c, d).W(l.name, H)) : b + }; + + function Yd(a, b) { + this.me = a; + this.og = b + } + + function Zd(a) { + this.X = a + } + Zd.prototype.gb = function(a, b, c, d) { + var e = new Jd, + f; + if (b.type === Bc) b.source.Ae ? c = $d(this, a, b.path, b.Ja, c, d, e) : (O(b.source.tf, "Unknown source."), f = b.source.ef || mc(a.w()) && !b.path.e(), c = ae(this, a, b.path, b.Ja, c, d, f, e)); + else if (b.type === be) b.source.Ae ? c = ce(this, a, b.path, b.children, c, d, e) : (O(b.source.tf, "Unknown source."), f = b.source.ef || mc(a.w()), c = de(this, a, b.path, b.children, c, d, f, e)); + else if (b.type === ee) + if (b.Yd) + if (b = b.path, null != c.xc(b)) c = a; + else { + f = new Vb(c, a, d); + d = a.Q.j(); + if (b.e() || ".priority" === K(b)) lc(a.w()) ? + b = c.Aa(Yb(a)) : (b = a.w().j(), O(b instanceof fe, "serverChildren would be complete if leaf node"), b = c.Cc(b)), b = this.X.ya(d, b, e); + else { + var g = K(b), + k = c.Bc(g, a.w()); + null == k && Wb(a.w(), g) && (k = d.T(g)); + b = null != k ? this.X.H(d, g, k, N(b), f, e) : a.Q.j().Fa(g) ? this.X.H(d, g, H, N(b), f, e) : d; + b.e() && lc(a.w()) && (d = c.Aa(Yb(a)), d.L() && (b = this.X.ya(b, d, e))) + } + d = lc(a.w()) || null != c.xc(M); + c = ge(a, b, d, this.X.Ra()) + } else c = he(this, a, b.path, b.Ub, c, d, e); + else if (b.type === Dc) d = b.path, b = a.w(), f = b.j(), g = b.ga || d.e(), c = ie(this, new je(a.Q, new Xb(f, + g, b.Yb)), d, c, Ub, e); + else throw jd("Unknown operation type: " + b.type); + e = qa(e.ib); + d = c; + b = d.Q; + b.ga && (f = b.j().L() || b.j().e(), g = ke(a), (0 < e.length || !a.Q.ga || f && !b.j().ea(g) || !b.j().C().ea(g.C())) && e.push(hc(ke(d)))); + return new Yd(c, e) + }; + + function ie(a, b, c, d, e, f) { + var g = b.Q; + if (null != d.xc(c)) return b; + var k; + if (c.e()) O(lc(b.w()), "If change path is empty, we must have complete server data"), mc(b.w()) ? (e = Yb(b), d = d.Cc(e instanceof fe ? e : H)) : d = d.Aa(Yb(b)), f = a.X.ya(b.Q.j(), d, f); + else { + var m = K(c); + if (".priority" == m) O(1 == le(c), "Can't have a priority with additional path components"), f = g.j(), k = b.w().j(), d = d.nd(c, f, k), f = null != d ? a.X.ia(f, d) : g.j(); + else { + var l = N(c); + Wb(g, m) ? (k = b.w().j(), d = d.nd(c, g.j(), k), d = null != d ? g.j().T(m).H(l, d) : g.j().T(m)) : d = d.Bc(m, + b.w()); + f = null != d ? a.X.H(g.j(), m, d, l, e, f) : g.j() + } + } + return ge(b, f, g.ga || c.e(), a.X.Ra()) + } + + function ae(a, b, c, d, e, f, g, k) { + var m = b.w(); + g = g ? a.X : a.X.$b(); + if (c.e()) d = g.ya(m.j(), d, null); + else if (g.Ra() && !m.Yb) d = m.j().H(c, d), d = g.ya(m.j(), d, null); + else { + var l = K(c); + if (!nc(m, c) && 1 < le(c)) return b; + var t = N(c); + d = m.j().T(l).H(t, d); + d = ".priority" == l ? g.ia(m.j(), d) : g.H(m.j(), l, d, t, Ub, null) + } + m = m.ga || c.e(); + b = new je(b.Q, new Xb(d, m, g.Ra())); + return ie(a, b, c, e, new Vb(e, b, f), k) + } + + function $d(a, b, c, d, e, f, g) { + var k = b.Q; + e = new Vb(e, b, f); + if (c.e()) g = a.X.ya(b.Q.j(), d, g), a = ge(b, g, !0, a.X.Ra()); + else if (f = K(c), ".priority" === f) g = a.X.ia(b.Q.j(), d), a = ge(b, g, k.ga, k.Yb); + else { + c = N(c); + var m = k.j().T(f); + if (!c.e()) { + var l = e.uf(f); + d = null != l ? ".priority" === me(c) && l.S(c.parent()).e() ? l : l.H(c, d) : H + } + m.ea(d) ? a = b : (g = a.X.H(k.j(), f, d, c, e, g), a = ge(b, g, k.ga, a.X.Ra())) + } + return a + } + + function ce(a, b, c, d, e, f, g) { + var k = b; + ne(d, function(d, l) { + var t = c.o(d); + Wb(b.Q, K(t)) && (k = $d(a, k, t, l, e, f, g)) + }); + ne(d, function(d, l) { + var t = c.o(d); + Wb(b.Q, K(t)) || (k = $d(a, k, t, l, e, f, g)) + }); + return k + } + + function oe(a, b) { + ne(b, function(b, d) { + a = a.H(b, d) + }); + return a + } + + function de(a, b, c, d, e, f, g, k) { + if (b.w().j().e() && !lc(b.w())) return b; + var m = b; + c = c.e() ? d : pe(qe, c, d); + var l = b.w().j(); + c.children.ka(function(c, d) { + if (l.Fa(c)) { + var I = b.w().j().T(c), + I = oe(I, d); + m = ae(a, m, new P(c), I, e, f, g, k) + } + }); + c.children.ka(function(c, d) { + var I = !Wb(b.w(), c) && null == d.value; + l.Fa(c) || I || (I = b.w().j().T(c), I = oe(I, d), m = ae(a, m, new P(c), I, e, f, g, k)) + }); + return m + } + + function he(a, b, c, d, e, f, g) { + if (null != e.xc(c)) return b; + var k = mc(b.w()), + m = b.w(); + if (null != d.value) { + if (c.e() && m.ga || nc(m, c)) return ae(a, b, c, m.j().S(c), e, f, k, g); + if (c.e()) { + var l = qe; + m.j().R(re, function(a, b) { + l = l.set(new P(a), b) + }); + return de(a, b, c, l, e, f, k, g) + } + return b + } + l = qe; + ne(d, function(a) { + var b = c.o(a); + nc(m, b) && (l = l.set(a, m.j().S(b))) + }); + return de(a, b, c, l, e, f, k, g) + }; + + function se() {} + var te = {}; + + function Vd(a) { + return u(a.compare, a) + } + se.prototype.Dd = function(a, b) { + return 0 !== this.compare(new L("[MIN_NAME]", a), new L("[MIN_NAME]", b)) + }; + se.prototype.Wc = function() { + return ue + }; + + function ve(a) { + O(!a.e() && ".priority" !== K(a), "Can't create PathIndex with empty path or .priority key"); + this.gc = a + } + ka(ve, se); + h = ve.prototype; + h.Lc = function(a) { + return !a.S(this.gc).e() + }; + h.compare = function(a, b) { + var c = a.U.S(this.gc), + d = b.U.S(this.gc), + c = c.Gc(d); + return 0 === c ? yc(a.name, b.name) : c + }; + h.Sc = function(a, b) { + var c = Q(a), + c = H.H(this.gc, c); + return new L(b, c) + }; + h.Tc = function() { + var a = H.H(this.gc, we); + return new L("[MAX_NAME]", a) + }; + h.toString = function() { + return this.gc.slice().join("/") + }; + + function xe() {} + ka(xe, se); + h = xe.prototype; + h.compare = function(a, b) { + var c = a.U.C(), + d = b.U.C(), + c = c.Gc(d); + return 0 === c ? yc(a.name, b.name) : c + }; + h.Lc = function(a) { + return !a.C().e() + }; + h.Dd = function(a, b) { + return !a.C().ea(b.C()) + }; + h.Wc = function() { + return ue + }; + h.Tc = function() { + return new L("[MAX_NAME]", new Yc("[PRIORITY-POST]", we)) + }; + h.Sc = function(a, b) { + var c = Q(a); + return new L(b, new Yc("[PRIORITY-POST]", c)) + }; + h.toString = function() { + return ".priority" + }; + var R = new xe; + + function ye() {} + ka(ye, se); + h = ye.prototype; + h.compare = function(a, b) { + return yc(a.name, b.name) + }; + h.Lc = function() { + throw jd("KeyIndex.isDefinedOn not expected to be called."); + }; + h.Dd = function() { + return !1 + }; + h.Wc = function() { + return ue + }; + h.Tc = function() { + return new L("[MAX_NAME]", H) + }; + h.Sc = function(a) { + O(q(a), "KeyIndex indexValue must always be a string."); + return new L(a, H) + }; + h.toString = function() { + return ".key" + }; + var re = new ye; + + function ze() {} + ka(ze, se); + h = ze.prototype; + h.compare = function(a, b) { + var c = a.U.Gc(b.U); + return 0 === c ? yc(a.name, b.name) : c + }; + h.Lc = function() { + return !0 + }; + h.Dd = function(a, b) { + return !a.ea(b) + }; + h.Wc = function() { + return ue + }; + h.Tc = function() { + return Ae + }; + h.Sc = function(a, b) { + var c = Q(a); + return new L(b, c) + }; + h.toString = function() { + return ".value" + }; + var Be = new ze; + + function Ce() { + this.Xb = this.ra = this.Pb = this.oa = this.la = !1; + this.ma = 0; + this.Rb = ""; + this.ic = null; + this.Bb = ""; + this.fc = null; + this.zb = ""; + this.g = R + } + var De = new Ce; + + function Td(a) { + return "" === a.Rb ? a.oa : "l" === a.Rb + } + + function Od(a) { + O(a.oa, "Only valid if start has been set"); + return a.ic + } + + function Nd(a) { + O(a.oa, "Only valid if start has been set"); + return a.Pb ? a.Bb : "[MIN_NAME]" + } + + function Rd(a) { + O(a.ra, "Only valid if end has been set"); + return a.fc + } + + function Pd(a) { + O(a.ra, "Only valid if end has been set"); + return a.Xb ? a.zb : "[MAX_NAME]" + } + + function Ee(a) { + var b = new Ce; + b.la = a.la; + b.ma = a.ma; + b.oa = a.oa; + b.ic = a.ic; + b.Pb = a.Pb; + b.Bb = a.Bb; + b.ra = a.ra; + b.fc = a.fc; + b.Xb = a.Xb; + b.zb = a.zb; + b.g = a.g; + return b + } + h = Ce.prototype; + h.Le = function(a) { + var b = Ee(this); + b.la = !0; + b.ma = a; + b.Rb = ""; + return b + }; + h.Me = function(a) { + var b = Ee(this); + b.la = !0; + b.ma = a; + b.Rb = "l"; + return b + }; + h.Ne = function(a) { + var b = Ee(this); + b.la = !0; + b.ma = a; + b.Rb = "r"; + return b + }; + h.ce = function(a, b) { + var c = Ee(this); + c.oa = !0; + p(a) || (a = null); + c.ic = a; + null != b ? (c.Pb = !0, c.Bb = b) : (c.Pb = !1, c.Bb = ""); + return c + }; + h.vd = function(a, b) { + var c = Ee(this); + c.ra = !0; + p(a) || (a = null); + c.fc = a; + p(b) ? (c.Xb = !0, c.zb = b) : (c.mh = !1, c.zb = ""); + return c + }; + + function Fe(a, b) { + var c = Ee(a); + c.g = b; + return c + } + + function Ge(a) { + var b = {}; + a.oa && (b.sp = a.ic, a.Pb && (b.sn = a.Bb)); + a.ra && (b.ep = a.fc, a.Xb && (b.en = a.zb)); + if (a.la) { + b.l = a.ma; + var c = a.Rb; + "" === c && (c = Td(a) ? "l" : "r"); + b.vf = c + } + a.g !== R && (b.i = a.g.toString()); + return b + } + + function He(a) { + return !(a.oa || a.ra || a.la) + } + + function Ie(a) { + return He(a) && a.g == R + } + + function Je(a) { + var b = {}; + if (Ie(a)) return b; + var c; + a.g === R ? c = "$priority" : a.g === Be ? c = "$value" : a.g === re ? c = "$key" : (O(a.g instanceof ve, "Unrecognized index type!"), c = a.g.toString()); + b.orderBy = G(c); + a.oa && (b.startAt = G(a.ic), a.Pb && (b.startAt += "," + G(a.Bb))); + a.ra && (b.endAt = G(a.fc), a.Xb && (b.endAt += "," + G(a.zb))); + a.la && (Td(a) ? b.limitToFirst = a.ma : b.limitToLast = a.ma); + return b + } + h.toString = function() { + return G(Ge(this)) + }; + + function Ke(a, b) { + this.Ed = a; + this.hc = b + } + Ke.prototype.get = function(a) { + var b = z(this.Ed, a); + if (!b) throw Error("No index defined for " + a); + return b === te ? null : b + }; + + function Le(a, b, c) { + var d = ma(a.Ed, function(d, f) { + var g = z(a.hc, f); + O(g, "Missing index implementation for " + f); + if (d === te) { + if (g.Lc(b.U)) { + for (var k = [], m = c.ac(wc), l = Ic(m); l;) l.name != b.name && k.push(l), l = Ic(m); + k.push(b); + return Me(k, Vd(g)) + } + return te + } + g = c.get(b.name); + k = d; + g && (k = k.remove(new L(b.name, g))); + return k.Sa(b, b.U) + }); + return new Ke(d, a.hc) + } + + function Ne(a, b, c) { + var d = ma(a.Ed, function(a) { + if (a === te) return a; + var d = c.get(b.name); + return d ? a.remove(new L(b.name, d)) : a + }); + return new Ke(d, a.hc) + } + var Oe = new Ke({ + ".priority": te + }, { + ".priority": R + }); + + function Yc(a, b) { + this.B = a; + O(p(this.B) && null !== this.B, "LeafNode shouldn't be created with null/undefined value."); + this.ca = b || H; + Pe(this.ca); + this.Gb = null + } + var Qe = ["object", "boolean", "number", "string"]; + h = Yc.prototype; + h.L = function() { + return !0 + }; + h.C = function() { + return this.ca + }; + h.ia = function(a) { + return new Yc(this.B, a) + }; + h.T = function(a) { + return ".priority" === a ? this.ca : H + }; + h.S = function(a) { + return a.e() ? this : ".priority" === K(a) ? this.ca : H + }; + h.Fa = function() { + return !1 + }; + h.wf = function() { + return null + }; + h.W = function(a, b) { + return ".priority" === a ? this.ia(b) : b.e() && ".priority" !== a ? this : H.W(a, b).ia(this.ca) + }; + h.H = function(a, b) { + var c = K(a); + if (null === c) return b; + if (b.e() && ".priority" !== c) return this; + O(".priority" !== c || 1 === le(a), ".priority must be the last token in a path"); + return this.W(c, H.H(N(a), b)) + }; + h.e = function() { + return !1 + }; + h.Hb = function() { + return 0 + }; + h.R = function() { + return !1 + }; + h.J = function(a) { + return a && !this.C().e() ? { + ".value": this.Ea(), + ".priority": this.C().J() + } : this.Ea() + }; + h.hash = function() { + if (null === this.Gb) { + var a = ""; + this.ca.e() || (a += "priority:" + Re(this.ca.J()) + ":"); + var b = typeof this.B, + a = a + (b + ":"), + a = "number" === b ? a + Ad(this.B) : a + this.B; + this.Gb = ld(a) + } + return this.Gb + }; + h.Ea = function() { + return this.B + }; + h.Gc = function(a) { + if (a === H) return 1; + if (a instanceof fe) return -1; + O(a.L(), "Unknown node type"); + var b = typeof a.B, + c = typeof this.B, + d = La(Qe, b), + e = La(Qe, c); + O(0 <= d, "Unknown leaf type: " + b); + O(0 <= e, "Unknown leaf type: " + c); + return d === e ? "object" === c ? 0 : this.B < a.B ? -1 : this.B === a.B ? 0 : 1 : e - d + }; + h.pb = function() { + return this + }; + h.Mc = function() { + return !0 + }; + h.ea = function(a) { + return a === this ? !0 : a.L() ? this.B === a.B && this.ca.ea(a.ca) : !1 + }; + h.toString = function() { + return G(this.J(!0)) + }; + + function fe(a, b, c) { + this.m = a; + (this.ca = b) && Pe(this.ca); + a.e() && O(!this.ca || this.ca.e(), "An empty node cannot have a priority"); + this.Ab = c; + this.Gb = null + } + h = fe.prototype; + h.L = function() { + return !1 + }; + h.C = function() { + return this.ca || H + }; + h.ia = function(a) { + return this.m.e() ? this : new fe(this.m, a, this.Ab) + }; + h.T = function(a) { + if (".priority" === a) return this.C(); + a = this.m.get(a); + return null === a ? H : a + }; + h.S = function(a) { + var b = K(a); + return null === b ? this : this.T(b).S(N(a)) + }; + h.Fa = function(a) { + return null !== this.m.get(a) + }; + h.W = function(a, b) { + O(b, "We should always be passing snapshot nodes"); + if (".priority" === a) return this.ia(b); + var c = new L(a, b), + d, e; + b.e() ? (d = this.m.remove(a), c = Ne(this.Ab, c, this.m)) : (d = this.m.Sa(a, b), c = Le(this.Ab, c, this.m)); + e = d.e() ? H : this.ca; + return new fe(d, e, c) + }; + h.H = function(a, b) { + var c = K(a); + if (null === c) return b; + O(".priority" !== K(a) || 1 === le(a), ".priority must be the last token in a path"); + var d = this.T(c).H(N(a), b); + return this.W(c, d) + }; + h.e = function() { + return this.m.e() + }; + h.Hb = function() { + return this.m.count() + }; + var Se = /^(0|[1-9]\d*)$/; + h = fe.prototype; + h.J = function(a) { + if (this.e()) return null; + var b = {}, + c = 0, + d = 0, + e = !0; + this.R(R, function(f, g) { + b[f] = g.J(a); + c++; + e && Se.test(f) ? d = Math.max(d, Number(f)) : e = !1 + }); + if (!a && e && d < 2 * c) { + var f = [], + g; + for (g in b) f[g] = b[g]; + return f + } + a && !this.C().e() && (b[".priority"] = this.C().J()); + return b + }; + h.hash = function() { + if (null === this.Gb) { + var a = ""; + this.C().e() || (a += "priority:" + Re(this.C().J()) + ":"); + this.R(R, function(b, c) { + var d = c.hash(); + "" !== d && (a += ":" + b + ":" + d) + }); + this.Gb = "" === a ? "" : ld(a) + } + return this.Gb + }; + h.wf = function(a, b, c) { + return (c = Te(this, c)) ? (a = Gc(c, new L(a, b))) ? a.name : null : Gc(this.m, a) + }; + + function Wd(a, b) { + var c; + c = (c = Te(a, b)) ? (c = c.Vc()) && c.name : a.m.Vc(); + return c ? new L(c, a.m.get(c)) : null + } + + function Xd(a, b) { + var c; + c = (c = Te(a, b)) ? (c = c.jc()) && c.name : a.m.jc(); + return c ? new L(c, a.m.get(c)) : null + } + h.R = function(a, b) { + var c = Te(this, a); + return c ? c.ka(function(a) { + return b(a.name, a.U) + }) : this.m.ka(b) + }; + h.ac = function(a) { + return this.bc(a.Wc(), a) + }; + h.bc = function(a, b) { + var c = Te(this, b); + if (c) return c.bc(a, function(a) { + return a + }); + for (var c = this.m.bc(a.name, wc), d = Jc(c); null != d && 0 > b.compare(d, a);) Ic(c), d = Jc(c); + return c + }; + h.xf = function(a) { + return this.dc(a.Tc(), a) + }; + h.dc = function(a, b) { + var c = Te(this, b); + if (c) return c.dc(a, function(a) { + return a + }); + for (var c = this.m.dc(a.name, wc), d = Jc(c); null != d && 0 < b.compare(d, a);) Ic(c), d = Jc(c); + return c + }; + h.Gc = function(a) { + return this.e() ? a.e() ? 0 : -1 : a.L() || a.e() ? 1 : a === we ? -1 : 0 + }; + h.pb = function(a) { + if (a === re || sa(this.Ab.hc, a.toString())) return this; + var b = this.Ab, + c = this.m; + O(a !== re, "KeyIndex always exists and isn't meant to be added to the IndexMap."); + for (var d = [], e = !1, c = c.ac(wc), f = Ic(c); f;) e = e || a.Lc(f.U), d.push(f), f = Ic(c); + d = e ? Me(d, Vd(a)) : te; + e = a.toString(); + c = wa(b.hc); + c[e] = a; + a = wa(b.Ed); + a[e] = d; + return new fe(this.m, this.ca, new Ke(a, c)) + }; + h.Mc = function(a) { + return a === re || sa(this.Ab.hc, a.toString()) + }; + h.ea = function(a) { + if (a === this) return !0; + if (a.L()) return !1; + if (this.C().ea(a.C()) && this.m.count() === a.m.count()) { + var b = this.ac(R); + a = a.ac(R); + for (var c = Ic(b), d = Ic(a); c && d;) { + if (c.name !== d.name || !c.U.ea(d.U)) return !1; + c = Ic(b); + d = Ic(a) + } + return null === c && null === d + } + return !1 + }; + + function Te(a, b) { + return b === re ? null : a.Ab.get(b.toString()) + } + h.toString = function() { + return G(this.J(!0)) + }; + + function Q(a, b) { + if (null === a) return H; + var c = null; + "object" === typeof a && ".priority" in a ? c = a[".priority"] : "undefined" !== typeof b && (c = b); + O(null === c || "string" === typeof c || "number" === typeof c || "object" === typeof c && ".sv" in c, "Invalid priority type found: " + typeof c); + "object" === typeof a && ".value" in a && null !== a[".value"] && (a = a[".value"]); + if ("object" !== typeof a || ".sv" in a) return new Yc(a, Q(c)); + if (a instanceof Array) { + var d = H, + e = a; + v(e, function(a, b) { + if (y(e, b) && "." !== b.substring(0, 1)) { + var c = Q(a); + if (c.L() || !c.e()) d = + d.W(b, c) + } + }); + return d.ia(Q(c)) + } + var f = [], + g = !1, + k = a; + Fb(k, function(a) { + if ("string" !== typeof a || "." !== a.substring(0, 1)) { + var b = Q(k[a]); + b.e() || (g = g || !b.C().e(), f.push(new L(a, b))) + } + }); + if (0 == f.length) return H; + var m = Me(f, xc, function(a) { + return a.name + }, zc); + if (g) { + var l = Me(f, Vd(R)); + return new fe(m, Q(c), new Ke({ + ".priority": l + }, { + ".priority": R + })) + } + return new fe(m, Q(c), Oe) + } + var Ue = Math.log(2); + + function Ve(a) { + this.count = parseInt(Math.log(a + 1) / Ue, 10); + this.nf = this.count - 1; + this.ng = a + 1 & parseInt(Array(this.count + 1).join("1"), 2) + } + + function We(a) { + var b = !(a.ng & 1 << a.nf); + a.nf--; + return b + } + + function Me(a, b, c, d) { + function e(b, d) { + var f = d - b; + if (0 == f) return null; + if (1 == f) { + var l = a[b], + t = c ? c(l) : l; + return new Kc(t, l.U, !1, null, null) + } + var l = parseInt(f / 2, 10) + b, + f = e(b, l), + A = e(l + 1, d), + l = a[l], + t = c ? c(l) : l; + return new Kc(t, l.U, !1, f, A) + } + a.sort(b); + var f = function(b) { + function d(b, g) { + var k = t - b, + A = t; + t -= b; + var A = e(k + 1, A), + k = a[k], + I = c ? c(k) : k, + A = new Kc(I, k.U, g, null, A); + f ? f.left = A : l = A; + f = A + } + for (var f = null, l = null, t = a.length, A = 0; A < b.count; ++A) { + var I = We(b), + Qd = Math.pow(2, b.count - (A + 1)); + I ? d(Qd, !1) : (d(Qd, !1), d(Qd, !0)) + } + return l + }(new Ve(a.length)); + return null !== f ? new Ec(d || b, f) : new Ec(d || b) + } + + function Re(a) { + return "number" === typeof a ? "number:" + Ad(a) : "string:" + a + } + + function Pe(a) { + if (a.L()) { + var b = a.J(); + O("string" === typeof b || "number" === typeof b || "object" === typeof b && y(b, ".sv"), "Priority must be a string or number.") + } else O(a === we || a.e(), "priority of unexpected type."); + O(a === we || a.C().e(), "Priority nodes can't have a priority of their own.") + } + var H = new fe(new Ec(zc), null, Oe); + + function Xe() { + fe.call(this, new Ec(zc), H, Oe) + } + ka(Xe, fe); + h = Xe.prototype; + h.Gc = function(a) { + return a === this ? 0 : 1 + }; + h.ea = function(a) { + return a === this + }; + h.C = function() { + return this + }; + h.T = function() { + return H + }; + h.e = function() { + return !1 + }; + var we = new Xe, + ue = new L("[MIN_NAME]", H), + Ae = new L("[MAX_NAME]", we); + + function je(a, b) { + this.Q = a; + this.ae = b + } + + function ge(a, b, c, d) { + return new je(new Xb(b, c, d), a.ae) + } + + function ke(a) { + return a.Q.ga ? a.Q.j() : null + } + je.prototype.w = function() { + return this.ae + }; + + function Yb(a) { + return a.ae.ga ? a.ae.j() : null + }; + + function Ye(a, b) { + this.Y = a; + var c = a.n, + d = new Ld(c.g), + c = He(c) ? new Ld(c.g) : c.la ? new Sd(c) : new Md(c); + this.Nf = new Zd(c); + var e = b.w(), + f = b.Q, + g = d.ya(H, e.j(), null), + k = c.ya(H, f.j(), null); + this.Oa = new je(new Xb(k, f.ga, c.Ra()), new Xb(g, e.ga, d.Ra())); + this.$a = []; + this.ug = new Fd(a) + } + + function Ze(a) { + return a.Y + } + h = Ye.prototype; + h.w = function() { + return this.Oa.w().j() + }; + h.kb = function(a) { + var b = Yb(this.Oa); + return b && (He(this.Y.n) || !a.e() && !b.T(K(a)).e()) ? b.S(a) : null + }; + h.e = function() { + return 0 === this.$a.length + }; + h.Tb = function(a) { + this.$a.push(a) + }; + h.nb = function(a, b) { + var c = []; + if (b) { + O(null == a, "A cancel should cancel all event registrations."); + var d = this.Y.path; + Ma(this.$a, function(a) { + (a = a.lf(b, d)) && c.push(a) + }) + } + if (a) { + for (var e = [], f = 0; f < this.$a.length; ++f) { + var g = this.$a[f]; + if (!g.matches(a)) e.push(g); + else if (a.yf()) { + e = e.concat(this.$a.slice(f + 1)); + break + } + } + this.$a = e + } else this.$a = []; + return c + }; + h.gb = function(a, b, c) { + a.type === be && null !== a.source.Lb && (O(Yb(this.Oa), "We should always have a full cache before handling merges"), O(ke(this.Oa), "Missing event cache, even though we have a server cache")); + var d = this.Oa; + a = this.Nf.gb(d, a, b, c); + b = this.Nf; + c = a.me; + O(c.Q.j().Mc(b.X.g), "Event snap not indexed"); + O(c.w().j().Mc(b.X.g), "Server snap not indexed"); + O(lc(a.me.w()) || !lc(d.w()), "Once a server snap is complete, it should never go back"); + this.Oa = a.me; + return $e(this, a.og, a.me.Q.j(), null) + }; + + function af(a, b) { + var c = a.Oa.Q, + d = []; + c.j().L() || c.j().R(R, function(a, b) { + d.push(new J("child_added", b, a)) + }); + c.ga && d.push(hc(c.j())); + return $e(a, d, c.j(), b) + } + + function $e(a, b, c, d) { + return Gd(a.ug, b, c, d ? [d] : a.$a) + }; + + function bf(a, b, c) { + this.type = be; + this.source = a; + this.path = b; + this.children = c + } + bf.prototype.$c = function(a) { + if (this.path.e()) return a = this.children.subtree(new P(a)), a.e() ? null : a.value ? new Ac(this.source, M, a.value) : new bf(this.source, M, a); + O(K(this.path) === a, "Can't get a merge for a child not on the path of the operation"); + return new bf(this.source, N(this.path), this.children) + }; + bf.prototype.toString = function() { + return "Operation(" + this.path + ": " + this.source.toString() + " merge: " + this.children.toString() + ")" + }; + + function cf(a, b) { + this.f = pd("p:rest:"); + this.G = a; + this.Kb = b; + this.Ca = null; + this.ba = {} + } + + function df(a, b) { + if (p(b)) return "tag$" + b; + O(Ie(a.n), "should have a tag if it's not a default query."); + return a.path.toString() + } + h = cf.prototype; + h.Cf = function(a, b, c, d) { + var e = a.path.toString(); + this.f("Listen called for " + e + " " + a.wa()); + var f = df(a, c), + g = {}; + this.ba[f] = g; + a = Je(a.n); + var k = this; + ef(this, e + ".json", a, function(a, b) { + var t = b; + 404 === a && (a = t = null); + null === a && k.Kb(e, t, !1, c); + z(k.ba, f) === g && d(a ? 401 == a ? "permission_denied" : "rest_error:" + a : "ok", null) + }) + }; + h.$f = function(a, b) { + var c = df(a, b); + delete this.ba[c] + }; + h.O = function(a, b) { + this.Ca = a; + var c = Cd(a), + d = c.data, + c = c.Ec && c.Ec.exp; + b && b("ok", { + auth: d, + expires: c + }) + }; + h.je = function(a) { + this.Ca = null; + a("ok", null) + }; + h.Qe = function() {}; + h.Gf = function() {}; + h.Md = function() {}; + h.put = function() {}; + h.Df = function() {}; + h.Ye = function() {}; + + function ef(a, b, c, d) { + c = c || {}; + c.format = "export"; + a.Ca && (c.auth = a.Ca); + var e = (a.G.ob ? "https://" : "http://") + a.G.host + b + "?" + Ib(c); + a.f("Sending REST request for " + e); + var f = new XMLHttpRequest; + f.onreadystatechange = function() { + if (d && 4 === f.readyState) { + a.f("REST Response for " + e + " received. status:", f.status, "response:", f.responseText); + var b = null; + if (200 <= f.status && 300 > f.status) { + try { + b = Rb(f.responseText) + } catch (c) { + S("Failed to parse JSON response for " + e + ": " + f.responseText) + } + d(null, b) + } else 401 !== f.status && 404 !== + f.status && S("Got unsuccessful REST response for " + e + " Status: " + f.status), d(f.status); + d = null + } + }; + f.open("GET", e, !0); + f.send() + }; + + function ff(a) { + O(da(a) && 0 < a.length, "Requires a non-empty array"); + this.fg = a; + this.Rc = {} + } + ff.prototype.ie = function(a, b) { + var c; + c = this.Rc[a] || []; + var d = c.length; + if (0 < d) { + for (var e = Array(d), f = 0; f < d; f++) e[f] = c[f]; + c = e + } else c = []; + for (d = 0; d < c.length; d++) c[d].Dc.apply(c[d].Qa, Array.prototype.slice.call(arguments, 1)) + }; + ff.prototype.Ib = function(a, b, c) { + gf(this, a); + this.Rc[a] = this.Rc[a] || []; + this.Rc[a].push({ + Dc: b, + Qa: c + }); + (a = this.Ee(a)) && b.apply(c, a) + }; + ff.prototype.mc = function(a, b, c) { + gf(this, a); + a = this.Rc[a] || []; + for (var d = 0; d < a.length; d++) + if (a[d].Dc === b && (!c || c === a[d].Qa)) { + a.splice(d, 1); + break + } + }; + + function gf(a, b) { + O(Ra(a.fg, function(a) { + return a === b + }), "Unknown event: " + b) + }; + var hf = function() { + var a = 0, + b = []; + return function(c) { + var d = c === a; + a = c; + for (var e = Array(8), f = 7; 0 <= f; f--) e[f] = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(c % 64), c = Math.floor(c / 64); + O(0 === c, "Cannot push at time == 0"); + c = e.join(""); + if (d) { + for (f = 11; 0 <= f && 63 === b[f]; f--) b[f] = 0; + b[f]++ + } else + for (f = 0; 12 > f; f++) b[f] = Math.floor(64 * Math.random()); + for (f = 0; 12 > f; f++) c += "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]); + O(20 === c.length, "nextPushId: Length should be 20."); + return c + } + }(); + + function jf() { + ff.call(this, ["online"]); + this.oc = !0; + if ("undefined" !== typeof window && "undefined" !== typeof window.addEventListener) { + var a = this; + window.addEventListener("online", function() { + a.oc || (a.oc = !0, a.ie("online", !0)) + }, !1); + window.addEventListener("offline", function() { + a.oc && (a.oc = !1, a.ie("online", !1)) + }, !1) + } + } + ka(jf, ff); + jf.prototype.Ee = function(a) { + O("online" === a, "Unknown event type: " + a); + return [this.oc] + }; + ba(jf); + + function kf() { + ff.call(this, ["visible"]); + var a, b; + "undefined" !== typeof document && "undefined" !== typeof document.addEventListener && ("undefined" !== typeof document.hidden ? (b = "visibilitychange", a = "hidden") : "undefined" !== typeof document.mozHidden ? (b = "mozvisibilitychange", a = "mozHidden") : "undefined" !== typeof document.msHidden ? (b = "msvisibilitychange", a = "msHidden") : "undefined" !== typeof document.webkitHidden && (b = "webkitvisibilitychange", a = "webkitHidden")); + this.Sb = !0; + if (b) { + var c = this; + document.addEventListener(b, + function() { + var b = !document[a]; + b !== c.Sb && (c.Sb = b, c.ie("visible", b)) + }, !1) + } + } + ka(kf, ff); + kf.prototype.Ee = function(a) { + O("visible" === a, "Unknown event type: " + a); + return [this.Sb] + }; + ba(kf); + + function P(a, b) { + if (1 == arguments.length) { + this.u = a.split("/"); + for (var c = 0, d = 0; d < this.u.length; d++) 0 < this.u[d].length && (this.u[c] = this.u[d], c++); + this.u.length = c; + this.aa = 0 + } else this.u = a, this.aa = b + } + + function lf(a, b) { + var c = K(a); + if (null === c) return b; + if (c === K(b)) return lf(N(a), N(b)); + throw Error("INTERNAL ERROR: innerPath (" + b + ") is not within outerPath (" + a + ")"); + } + + function mf(a, b) { + for (var c = a.slice(), d = b.slice(), e = 0; e < c.length && e < d.length; e++) { + var f = yc(c[e], d[e]); + if (0 !== f) return f + } + return c.length === d.length ? 0 : c.length < d.length ? -1 : 1 + } + + function K(a) { + return a.aa >= a.u.length ? null : a.u[a.aa] + } + + function le(a) { + return a.u.length - a.aa + } + + function N(a) { + var b = a.aa; + b < a.u.length && b++; + return new P(a.u, b) + } + + function me(a) { + return a.aa < a.u.length ? a.u[a.u.length - 1] : null + } + h = P.prototype; + h.toString = function() { + for (var a = "", b = this.aa; b < this.u.length; b++) "" !== this.u[b] && (a += "/" + this.u[b]); + return a || "/" + }; + h.slice = function(a) { + return this.u.slice(this.aa + (a || 0)) + }; + h.parent = function() { + if (this.aa >= this.u.length) return null; + for (var a = [], b = this.aa; b < this.u.length - 1; b++) a.push(this.u[b]); + return new P(a, 0) + }; + h.o = function(a) { + for (var b = [], c = this.aa; c < this.u.length; c++) b.push(this.u[c]); + if (a instanceof P) + for (c = a.aa; c < a.u.length; c++) b.push(a.u[c]); + else + for (a = a.split("/"), c = 0; c < a.length; c++) 0 < a[c].length && b.push(a[c]); + return new P(b, 0) + }; + h.e = function() { + return this.aa >= this.u.length + }; + h.ea = function(a) { + if (le(this) !== le(a)) return !1; + for (var b = this.aa, c = a.aa; b <= this.u.length; b++, c++) + if (this.u[b] !== a.u[c]) return !1; + return !0 + }; + h.contains = function(a) { + var b = this.aa, + c = a.aa; + if (le(this) > le(a)) return !1; + for (; b < this.u.length;) { + if (this.u[b] !== a.u[c]) return !1; + ++b; + ++c + } + return !0 + }; + var M = new P(""); + + function nf(a, b) { + this.Ua = a.slice(); + this.Ka = Math.max(1, this.Ua.length); + this.pf = b; + for (var c = 0; c < this.Ua.length; c++) this.Ka += Pb(this.Ua[c]); + of(this) + } + nf.prototype.push = function(a) { + 0 < this.Ua.length && (this.Ka += 1); + this.Ua.push(a); + this.Ka += Pb(a); + of(this) + }; + nf.prototype.pop = function() { + var a = this.Ua.pop(); + this.Ka -= Pb(a); + 0 < this.Ua.length && --this.Ka + }; + + function of(a) { + if (768 < a.Ka) throw Error(a.pf + "has a key path longer than 768 bytes (" + a.Ka + ")."); + if (32 < a.Ua.length) throw Error(a.pf + "path specified exceeds the maximum depth that can be written (32) or object contains a cycle " + pf(a)); + } + + function pf(a) { + return 0 == a.Ua.length ? "" : "in property '" + a.Ua.join(".") + "'" + }; + + function qf(a, b) { + this.value = a; + this.children = b || rf + } + var rf = new Ec(function(a, b) { + return a === b ? 0 : a < b ? -1 : 1 + }); + + function sf(a) { + var b = qe; + v(a, function(a, d) { + b = b.set(new P(d), a) + }); + return b + } + h = qf.prototype; + h.e = function() { + return null === this.value && this.children.e() + }; + + function tf(a, b, c) { + if (null != a.value && c(a.value)) return { + path: M, + value: a.value + }; + if (b.e()) return null; + var d = K(b); + a = a.children.get(d); + return null !== a ? (b = tf(a, N(b), c), null != b ? { + path: (new P(d)).o(b.path), + value: b.value + } : null) : null + } + + function uf(a, b) { + return tf(a, b, function() { + return !0 + }) + } + h.subtree = function(a) { + if (a.e()) return this; + var b = this.children.get(K(a)); + return null !== b ? b.subtree(N(a)) : qe + }; + h.set = function(a, b) { + if (a.e()) return new qf(b, this.children); + var c = K(a), + d = (this.children.get(c) || qe).set(N(a), b), + c = this.children.Sa(c, d); + return new qf(this.value, c) + }; + h.remove = function(a) { + if (a.e()) return this.children.e() ? qe : new qf(null, this.children); + var b = K(a), + c = this.children.get(b); + return c ? (a = c.remove(N(a)), b = a.e() ? this.children.remove(b) : this.children.Sa(b, a), null === this.value && b.e() ? qe : new qf(this.value, b)) : this + }; + h.get = function(a) { + if (a.e()) return this.value; + var b = this.children.get(K(a)); + return b ? b.get(N(a)) : null + }; + + function pe(a, b, c) { + if (b.e()) return c; + var d = K(b); + b = pe(a.children.get(d) || qe, N(b), c); + d = b.e() ? a.children.remove(d) : a.children.Sa(d, b); + return new qf(a.value, d) + } + + function vf(a, b) { + return wf(a, M, b) + } + + function wf(a, b, c) { + var d = {}; + a.children.ka(function(a, f) { + d[a] = wf(f, b.o(a), c) + }); + return c(b, a.value, d) + } + + function xf(a, b, c) { + return yf(a, b, M, c) + } + + function yf(a, b, c, d) { + var e = a.value ? d(c, a.value) : !1; + if (e) return e; + if (b.e()) return null; + e = K(b); + return (a = a.children.get(e)) ? yf(a, N(b), c.o(e), d) : null + } + + function zf(a, b, c) { + Af(a, b, M, c) + } + + function Af(a, b, c, d) { + if (b.e()) return a; + a.value && d(c, a.value); + var e = K(b); + return (a = a.children.get(e)) ? Af(a, N(b), c.o(e), d) : qe + } + + function ne(a, b) { + Bf(a, M, b) + } + + function Bf(a, b, c) { + a.children.ka(function(a, e) { + Bf(e, b.o(a), c) + }); + a.value && c(b, a.value) + } + + function Cf(a, b) { + a.children.ka(function(a, d) { + d.value && b(a, d.value) + }) + } + var qe = new qf(null); + qf.prototype.toString = function() { + var a = {}; + ne(this, function(b, c) { + a[b.toString()] = c.toString() + }); + return G(a) + }; + + function Df(a, b, c) { + this.type = ee; + this.source = Ef; + this.path = a; + this.Ub = b; + this.Yd = c + } + Df.prototype.$c = function(a) { + if (this.path.e()) { + if (null != this.Ub.value) return O(this.Ub.children.e(), "affectedTree should not have overlapping affected paths."), this; + a = this.Ub.subtree(new P(a)); + return new Df(M, a, this.Yd) + } + O(K(this.path) === a, "operationForChild called for unrelated child."); + return new Df(N(this.path), this.Ub, this.Yd) + }; + Df.prototype.toString = function() { + return "Operation(" + this.path + ": " + this.source.toString() + " ack write revert=" + this.Yd + " affectedTree=" + this.Ub + ")" + }; + var Bc = 0, + be = 1, + ee = 2, + Dc = 3; + + function Ff(a, b, c, d) { + this.Ae = a; + this.tf = b; + this.Lb = c; + this.ef = d; + O(!d || b, "Tagged queries must be from server.") + } + var Ef = new Ff(!0, !1, null, !1), + Gf = new Ff(!1, !0, null, !1); + Ff.prototype.toString = function() { + return this.Ae ? "user" : this.ef ? "server(queryID=" + this.Lb + ")" : "server" + }; + + function Hf(a) { + this.Z = a + } + var If = new Hf(new qf(null)); + + function Jf(a, b, c) { + if (b.e()) return new Hf(new qf(c)); + var d = uf(a.Z, b); + if (null != d) { + var e = d.path, + d = d.value; + b = lf(e, b); + d = d.H(b, c); + return new Hf(a.Z.set(e, d)) + } + a = pe(a.Z, b, new qf(c)); + return new Hf(a) + } + + function Kf(a, b, c) { + var d = a; + Fb(c, function(a, c) { + d = Jf(d, b.o(a), c) + }); + return d + } + Hf.prototype.Ud = function(a) { + if (a.e()) return If; + a = pe(this.Z, a, qe); + return new Hf(a) + }; + + function Lf(a, b) { + var c = uf(a.Z, b); + return null != c ? a.Z.get(c.path).S(lf(c.path, b)) : null + } + + function Mf(a) { + var b = [], + c = a.Z.value; + null != c ? c.L() || c.R(R, function(a, c) { + b.push(new L(a, c)) + }) : a.Z.children.ka(function(a, c) { + null != c.value && b.push(new L(a, c.value)) + }); + return b + } + + function Nf(a, b) { + if (b.e()) return a; + var c = Lf(a, b); + return null != c ? new Hf(new qf(c)) : new Hf(a.Z.subtree(b)) + } + Hf.prototype.e = function() { + return this.Z.e() + }; + Hf.prototype.apply = function(a) { + return Of(M, this.Z, a) + }; + + function Of(a, b, c) { + if (null != b.value) return c.H(a, b.value); + var d = null; + b.children.ka(function(b, f) { + ".priority" === b ? (O(null !== f.value, "Priority writes must always be leaf nodes"), d = f.value) : c = Of(a.o(b), f, c) + }); + c.S(a).e() || null === d || (c = c.H(a.o(".priority"), d)); + return c + }; + + function Pf() { + this.V = If; + this.pa = []; + this.Pc = -1 + } + + function Qf(a, b) { + for (var c = 0; c < a.pa.length; c++) { + var d = a.pa[c]; + if (d.md === b) return d + } + return null + } + h = Pf.prototype; + h.Ud = function(a) { + var b = Sa(this.pa, function(b) { + return b.md === a + }); + O(0 <= b, "removeWrite called with nonexistent writeId."); + var c = this.pa[b]; + this.pa.splice(b, 1); + for (var d = c.visible, e = !1, f = this.pa.length - 1; d && 0 <= f;) { + var g = this.pa[f]; + g.visible && (f >= b && Rf(g, c.path) ? d = !1 : c.path.contains(g.path) && (e = !0)); + f-- + } + if (d) { + if (e) this.V = Sf(this.pa, Tf, M), this.Pc = 0 < this.pa.length ? this.pa[this.pa.length - 1].md : -1; + else if (c.Ja) this.V = this.V.Ud(c.path); + else { + var k = this; + v(c.children, function(a, b) { + k.V = k.V.Ud(c.path.o(b)) + }) + } + return !0 + } + return !1 + }; + h.Aa = function(a, b, c, d) { + if (c || d) { + var e = Nf(this.V, a); + return !d && e.e() ? b : d || null != b || null != Lf(e, M) ? (e = Sf(this.pa, function(b) { + return (b.visible || d) && (!c || !(0 <= La(c, b.md))) && (b.path.contains(a) || a.contains(b.path)) + }, a), b = b || H, e.apply(b)) : null + } + e = Lf(this.V, a); + if (null != e) return e; + e = Nf(this.V, a); + return e.e() ? b : null != b || null != Lf(e, M) ? (b = b || H, e.apply(b)) : null + }; + h.Cc = function(a, b) { + var c = H, + d = Lf(this.V, a); + if (d) d.L() || d.R(R, function(a, b) { + c = c.W(a, b) + }); + else if (b) { + var e = Nf(this.V, a); + b.R(R, function(a, b) { + var d = Nf(e, new P(a)).apply(b); + c = c.W(a, d) + }); + Ma(Mf(e), function(a) { + c = c.W(a.name, a.U) + }) + } else e = Nf(this.V, a), Ma(Mf(e), function(a) { + c = c.W(a.name, a.U) + }); + return c + }; + h.nd = function(a, b, c, d) { + O(c || d, "Either existingEventSnap or existingServerSnap must exist"); + a = a.o(b); + if (null != Lf(this.V, a)) return null; + a = Nf(this.V, a); + return a.e() ? d.S(b) : a.apply(d.S(b)) + }; + h.Bc = function(a, b, c) { + a = a.o(b); + var d = Lf(this.V, a); + return null != d ? d : Wb(c, b) ? Nf(this.V, a).apply(c.j().T(b)) : null + }; + h.xc = function(a) { + return Lf(this.V, a) + }; + h.qe = function(a, b, c, d, e, f) { + var g; + a = Nf(this.V, a); + g = Lf(a, M); + if (null == g) + if (null != b) g = a.apply(b); + else return []; + g = g.pb(f); + if (g.e() || g.L()) return []; + b = []; + a = Vd(f); + e = e ? g.dc(c, f) : g.bc(c, f); + for (f = Ic(e); f && b.length < d;) 0 !== a(f, c) && b.push(f), f = Ic(e); + return b + }; + + function Rf(a, b) { + return a.Ja ? a.path.contains(b) : !!ta(a.children, function(c, d) { + return a.path.o(d).contains(b) + }) + } + + function Tf(a) { + return a.visible + } + + function Sf(a, b, c) { + for (var d = If, e = 0; e < a.length; ++e) { + var f = a[e]; + if (b(f)) { + var g = f.path; + if (f.Ja) c.contains(g) ? (g = lf(c, g), d = Jf(d, g, f.Ja)) : g.contains(c) && (g = lf(g, c), d = Jf(d, M, f.Ja.S(g))); + else if (f.children) + if (c.contains(g)) g = lf(c, g), d = Kf(d, g, f.children); + else { + if (g.contains(c)) + if (g = lf(g, c), g.e()) d = Kf(d, M, f.children); + else if (f = z(f.children, K(g))) f = f.S(N(g)), d = Jf(d, M, f) + } else throw jd("WriteRecord should have .snap or .children"); + } + } + return d + } + + function Uf(a, b) { + this.Qb = a; + this.Z = b + } + h = Uf.prototype; + h.Aa = function(a, b, c) { + return this.Z.Aa(this.Qb, a, b, c) + }; + h.Cc = function(a) { + return this.Z.Cc(this.Qb, a) + }; + h.nd = function(a, b, c) { + return this.Z.nd(this.Qb, a, b, c) + }; + h.xc = function(a) { + return this.Z.xc(this.Qb.o(a)) + }; + h.qe = function(a, b, c, d, e) { + return this.Z.qe(this.Qb, a, b, c, d, e) + }; + h.Bc = function(a, b) { + return this.Z.Bc(this.Qb, a, b) + }; + h.o = function(a) { + return new Uf(this.Qb.o(a), this.Z) + }; + + function Vf() { + this.children = {}; + this.pd = 0; + this.value = null + } + + function Wf(a, b, c) { + this.Jd = a ? a : ""; + this.Ha = b ? b : null; + this.A = c ? c : new Vf + } + + function Xf(a, b) { + for (var c = b instanceof P ? b : new P(b), d = a, e; null !== (e = K(c));) d = new Wf(e, d, z(d.A.children, e) || new Vf), c = N(c); + return d + } + h = Wf.prototype; + h.Ea = function() { + return this.A.value + }; + + function Yf(a, b) { + O("undefined" !== typeof b, "Cannot set value to undefined"); + a.A.value = b; + Zf(a) + } + h.clear = function() { + this.A.value = null; + this.A.children = {}; + this.A.pd = 0; + Zf(this) + }; + h.zd = function() { + return 0 < this.A.pd + }; + h.e = function() { + return null === this.Ea() && !this.zd() + }; + h.R = function(a) { + var b = this; + v(this.A.children, function(c, d) { + a(new Wf(d, b, c)) + }) + }; + + function $f(a, b, c, d) { + c && !d && b(a); + a.R(function(a) { + $f(a, b, !0, d) + }); + c && d && b(a) + } + + function ag(a, b) { + for (var c = a.parent(); null !== c && !b(c);) c = c.parent() + } + h.path = function() { + return new P(null === this.Ha ? this.Jd : this.Ha.path() + "/" + this.Jd) + }; + h.name = function() { + return this.Jd + }; + h.parent = function() { + return this.Ha + }; + + function Zf(a) { + if (null !== a.Ha) { + var b = a.Ha, + c = a.Jd, + d = a.e(), + e = y(b.A.children, c); + d && e ? (delete b.A.children[c], b.A.pd--, Zf(b)) : d || e || (b.A.children[c] = a.A, b.A.pd++, Zf(b)) + } + }; + var bg = /[\[\].#$\/\u0000-\u001F\u007F]/, + cg = /[\[\].#$\u0000-\u001F\u007F]/, + dg = /^[a-zA-Z][a-zA-Z._\-+]+$/; + + function eg(a) { + return q(a) && 0 !== a.length && !bg.test(a) + } + + function fg(a) { + return null === a || q(a) || fa(a) && !td(a) || ga(a) && y(a, ".sv") + } + + function gg(a, b, c, d) { + d && !p(b) || hg(E(a, 1, d), b, c) + } + + function hg(a, b, c) { + c instanceof P && (c = new nf(c, a)); + if (!p(b)) throw Error(a + "contains undefined " + pf(c)); + if (r(b)) throw Error(a + "contains a function " + pf(c) + " with contents: " + b.toString()); + if (td(b)) throw Error(a + "contains " + b.toString() + " " + pf(c)); + if (q(b) && b.length > 10485760 / 3 && 10485760 < Pb(b)) throw Error(a + "contains a string greater than 10485760 utf8 bytes " + pf(c) + " ('" + b.substring(0, 50) + "...')"); + if (ga(b)) { + var d = !1, + e = !1; + Fb(b, function(b, g) { + if (".value" === b) d = !0; + else if (".priority" !== b && ".sv" !== b && (e = !0, !eg(b))) throw Error(a + " contains an invalid key (" + b + ") " + pf(c) + '. Keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]"'); + c.push(b); + hg(a, g, c); + c.pop() + }); + if (d && e) throw Error(a + ' contains ".value" child ' + pf(c) + " in addition to actual children."); + } + } + + function ig(a, b) { + var c, d; + for (c = 0; c < b.length; c++) { + d = b[c]; + for (var e = d.slice(), f = 0; f < e.length; f++) + if ((".priority" !== e[f] || f !== e.length - 1) && !eg(e[f])) throw Error(a + "contains an invalid key (" + e[f] + ") in path " + d.toString() + '. Keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]"'); + } + b.sort(mf); + e = null; + for (c = 0; c < b.length; c++) { + d = b[c]; + if (null !== e && e.contains(d)) throw Error(a + "contains a path " + e.toString() + " that is ancestor of another path " + d.toString()); + e = d + } + } + + function jg(a, b, c) { + var d = E(a, 1, !1); + if (!ga(b) || da(b)) throw Error(d + " must be an object containing the children to replace."); + var e = []; + Fb(b, function(a, b) { + var k = new P(a); + hg(d, b, c.o(k)); + if (".priority" === me(k) && !fg(b)) throw Error(d + "contains an invalid value for '" + k.toString() + "', which must be a valid Firebase priority (a string, finite number, server value, or null)."); + e.push(k) + }); + ig(d, e) + } + + function kg(a, b, c) { + if (td(c)) throw Error(E(a, b, !1) + "is " + c.toString() + ", but must be a valid Firebase priority (a string, finite number, server value, or null)."); + if (!fg(c)) throw Error(E(a, b, !1) + "must be a valid Firebase priority (a string, finite number, server value, or null)."); + } + + function lg(a, b, c) { + if (!c || p(b)) switch (b) { + case "value": + case "child_added": + case "child_removed": + case "child_changed": + case "child_moved": + break; + default: + throw Error(E(a, 1, c) + 'must be a valid event type: "value", "child_added", "child_removed", "child_changed", or "child_moved".'); + } + } + + function mg(a, b) { + if (p(b) && !eg(b)) throw Error(E(a, 2, !0) + 'was an invalid key: "' + b + '". Firebase keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]").'); + } + + function ng(a, b) { + if (!q(b) || 0 === b.length || cg.test(b)) throw Error(E(a, 1, !1) + 'was an invalid path: "' + b + '". Paths must be non-empty strings and can\'t contain ".", "#", "$", "[", or "]"'); + } + + function og(a, b) { + if (".info" === K(b)) throw Error(a + " failed: Can't modify data under /.info/"); + } + + function pg(a, b) { + if (!q(b)) throw Error(E(a, 1, !1) + "must be a valid credential (a string)."); + } + + function qg(a, b, c) { + if (!q(c)) throw Error(E(a, b, !1) + "must be a valid string."); + } + + function rg(a, b) { + qg(a, 1, b); + if (!dg.test(b)) throw Error(E(a, 1, !1) + "'" + b + "' is not a valid authentication provider."); + } + + function sg(a, b, c, d) { + if (!d || p(c)) + if (!ga(c) || null === c) throw Error(E(a, b, d) + "must be a valid object."); + } + + function tg(a, b, c) { + if (!ga(b) || !y(b, c)) throw Error(E(a, 1, !1) + 'must contain the key "' + c + '"'); + if (!q(z(b, c))) throw Error(E(a, 1, !1) + 'must contain the key "' + c + '" with type "string"'); + }; + + function ug() { + this.set = {} + } + h = ug.prototype; + h.add = function(a, b) { + this.set[a] = null !== b ? b : !0 + }; + h.contains = function(a) { + return y(this.set, a) + }; + h.get = function(a) { + return this.contains(a) ? this.set[a] : void 0 + }; + h.remove = function(a) { + delete this.set[a] + }; + h.clear = function() { + this.set = {} + }; + h.e = function() { + return va(this.set) + }; + h.count = function() { + return oa(this.set) + }; + + function vg(a, b) { + v(a.set, function(a, d) { + b(d, a) + }) + } + h.keys = function() { + var a = []; + v(this.set, function(b, c) { + a.push(c) + }); + return a + }; + + function Vc() { + this.m = this.B = null + } + Vc.prototype.find = function(a) { + if (null != this.B) return this.B.S(a); + if (a.e() || null == this.m) return null; + var b = K(a); + a = N(a); + return this.m.contains(b) ? this.m.get(b).find(a) : null + }; + Vc.prototype.rc = function(a, b) { + if (a.e()) this.B = b, this.m = null; + else if (null !== this.B) this.B = this.B.H(a, b); + else { + null == this.m && (this.m = new ug); + var c = K(a); + this.m.contains(c) || this.m.add(c, new Vc); + c = this.m.get(c); + a = N(a); + c.rc(a, b) + } + }; + + function wg(a, b) { + if (b.e()) return a.B = null, a.m = null, !0; + if (null !== a.B) { + if (a.B.L()) return !1; + var c = a.B; + a.B = null; + c.R(R, function(b, c) { + a.rc(new P(b), c) + }); + return wg(a, b) + } + return null !== a.m ? (c = K(b), b = N(b), a.m.contains(c) && wg(a.m.get(c), b) && a.m.remove(c), a.m.e() ? (a.m = null, !0) : !1) : !0 + } + + function Wc(a, b, c) { + null !== a.B ? c(b, a.B) : a.R(function(a, e) { + var f = new P(b.toString() + "/" + a); + Wc(e, f, c) + }) + } + Vc.prototype.R = function(a) { + null !== this.m && vg(this.m, function(b, c) { + a(b, c) + }) + }; + var xg = "auth.firebase.com"; + + function yg(a, b, c) { + this.qd = a || {}; + this.he = b || {}; + this.fb = c || {}; + this.qd.remember || (this.qd.remember = "default") + } + var zg = ["remember", "redirectTo"]; + + function Ag(a) { + var b = {}, + c = {}; + Fb(a || {}, function(a, e) { + 0 <= La(zg, a) ? b[a] = e : c[a] = e + }); + return new yg(b, {}, c) + }; + + function Bg(a, b) { + this.Ue = ["session", a.Rd, a.lc].join(":"); + this.ee = b + } + Bg.prototype.set = function(a, b) { + if (!b) + if (this.ee.length) b = this.ee[0]; + else throw Error("fb.login.SessionManager : No storage options available!"); + b.set(this.Ue, a) + }; + Bg.prototype.get = function() { + var a = Oa(this.ee, u(this.Bg, this)), + a = Na(a, function(a) { + return null !== a + }); + Va(a, function(a, c) { + return Dd(c.token) - Dd(a.token) + }); + return 0 < a.length ? a.shift() : null + }; + Bg.prototype.Bg = function(a) { + try { + var b = a.get(this.Ue); + if (b && b.token) return b + } catch (c) {} + return null + }; + Bg.prototype.clear = function() { + var a = this; + Ma(this.ee, function(b) { + b.remove(a.Ue) + }) + }; + + function Cg() { + return "undefined" !== typeof navigator && "string" === typeof navigator.userAgent ? navigator.userAgent : "" + } + + function Dg() { + return "undefined" !== typeof window && !!(window.cordova || window.phonegap || window.PhoneGap) && /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(Cg()) + } + + function Eg() { + return "undefined" !== typeof location && /^file:\//.test(location.href) + } + + function Fg(a) { + var b = Cg(); + if ("" === b) return !1; + if ("Microsoft Internet Explorer" === navigator.appName) { + if ((b = b.match(/MSIE ([0-9]{1,}[\.0-9]{0,})/)) && 1 < b.length) return parseFloat(b[1]) >= a + } else if (-1 < b.indexOf("Trident") && (b = b.match(/rv:([0-9]{2,2}[\.0-9]{0,})/)) && 1 < b.length) return parseFloat(b[1]) >= a; + return !1 + }; + + function Gg() { + var a = window.opener.frames, + b; + for (b = a.length - 1; 0 <= b; b--) try { + if (a[b].location.protocol === window.location.protocol && a[b].location.host === window.location.host && "__winchan_relay_frame" === a[b].name) return a[b] + } catch (c) {} + return null + } + + function Hg(a, b, c) { + a.attachEvent ? a.attachEvent("on" + b, c) : a.addEventListener && a.addEventListener(b, c, !1) + } + + function Ig(a, b, c) { + a.detachEvent ? a.detachEvent("on" + b, c) : a.removeEventListener && a.removeEventListener(b, c, !1) + } + + function Jg(a) { + /^https?:\/\//.test(a) || (a = window.location.href); + var b = /^(https?:\/\/[\-_a-zA-Z\.0-9:]+)/.exec(a); + return b ? b[1] : a + } + + function Kg(a) { + var b = ""; + try { + a = a.replace(/.*\?/, ""); + var c = Jb(a); + c && y(c, "__firebase_request_key") && (b = z(c, "__firebase_request_key")) + } catch (d) {} + return b + } + + function Lg() { + var a = sd(xg); + return a.scheme + "://" + a.host + "/v2" + } + + function Mg(a) { + return Lg() + "/" + a + "/auth/channel" + }; + + function Ng(a) { + var b = this; + this.hb = a; + this.fe = "*"; + Fg(8) ? this.Uc = this.Cd = Gg() : (this.Uc = window.opener, this.Cd = window); + if (!b.Uc) throw "Unable to find relay frame"; + Hg(this.Cd, "message", u(this.nc, this)); + Hg(this.Cd, "message", u(this.Ff, this)); + try { + Og(this, { + a: "ready" + }) + } catch (c) { + Hg(this.Uc, "load", function() { + Og(b, { + a: "ready" + }) + }) + } + Hg(window, "unload", u(this.Mg, this)) + } + + function Og(a, b) { + b = G(b); + Fg(8) ? a.Uc.doPost(b, a.fe) : a.Uc.postMessage(b, a.fe) + } + Ng.prototype.nc = function(a) { + var b = this, + c; + try { + c = Rb(a.data) + } catch (d) {} + c && "request" === c.a && (Ig(window, "message", this.nc), this.fe = a.origin, this.hb && setTimeout(function() { + b.hb(b.fe, c.d, function(a, c) { + b.mg = !c; + b.hb = void 0; + Og(b, { + a: "response", + d: a, + forceKeepWindowOpen: c + }) + }) + }, 0)) + }; + Ng.prototype.Mg = function() { + try { + Ig(this.Cd, "message", this.Ff) + } catch (a) {} + this.hb && (Og(this, { + a: "error", + d: "unknown closed window" + }), this.hb = void 0); + try { + window.close() + } catch (b) {} + }; + Ng.prototype.Ff = function(a) { + if (this.mg && "die" === a.data) try { + window.close() + } catch (b) {} + }; + + function Pg(a) { + this.tc = Fa() + Fa() + Fa(); + this.Kf = a + } + Pg.prototype.open = function(a, b) { + cd.set("redirect_request_id", this.tc); + cd.set("redirect_request_id", this.tc); + b.requestId = this.tc; + b.redirectTo = b.redirectTo || window.location.href; + a += (/\?/.test(a) ? "" : "?") + Ib(b); + window.location = a + }; + Pg.isAvailable = function() { + return !Eg() && !Dg() + }; + Pg.prototype.Fc = function() { + return "redirect" + }; + var Qg = { + NETWORK_ERROR: "Unable to contact the Firebase server.", + SERVER_ERROR: "An unknown server error occurred.", + TRANSPORT_UNAVAILABLE: "There are no login transports available for the requested method.", + REQUEST_INTERRUPTED: "The browser redirected the page before the login request could complete.", + USER_CANCELLED: "The user cancelled authentication." + }; + + function Rg(a) { + var b = Error(z(Qg, a), a); + b.code = a; + return b + }; + + function Sg(a) { + var b; + (b = !a.window_features) || (b = Cg(), b = -1 !== b.indexOf("Fennec/") || -1 !== b.indexOf("Firefox/") && -1 !== b.indexOf("Android")); + b && (a.window_features = void 0); + a.window_name || (a.window_name = "_blank"); + this.options = a + } + Sg.prototype.open = function(a, b, c) { + function d(a) { + g && (document.body.removeChild(g), g = void 0); + t && (t = clearInterval(t)); + Ig(window, "message", e); + Ig(window, "unload", d); + if (l && !a) try { + l.close() + } catch (b) { + k.postMessage("die", m) + } + l = k = void 0 + } + + function e(a) { + if (a.origin === m) try { + var b = Rb(a.data); + "ready" === b.a ? k.postMessage(A, m) : "error" === b.a ? (d(!1), c && (c(b.d), c = null)) : "response" === b.a && (d(b.forceKeepWindowOpen), c && (c(null, b.d), c = null)) + } catch (e) {} + } + var f = Fg(8), + g, k; + if (!this.options.relay_url) return c(Error("invalid arguments: origin of url and relay_url must match")); + var m = Jg(a); + if (m !== Jg(this.options.relay_url)) c && setTimeout(function() { + c(Error("invalid arguments: origin of url and relay_url must match")) + }, 0); + else { + f && (g = document.createElement("iframe"), g.setAttribute("src", this.options.relay_url), g.style.display = "none", g.setAttribute("name", "__winchan_relay_frame"), document.body.appendChild(g), k = g.contentWindow); + a += (/\?/.test(a) ? "" : "?") + Ib(b); + var l = window.open(a, this.options.window_name, this.options.window_features); + k || (k = l); + var t = setInterval(function() { + l && l.closed && + (d(!1), c && (c(Rg("USER_CANCELLED")), c = null)) + }, 500), + A = G({ + a: "request", + d: b + }); + Hg(window, "unload", d); + Hg(window, "message", e) + } + }; + Sg.isAvailable = function() { + var a; + if (a = "postMessage" in window && !Eg())(a = Dg() || "undefined" !== typeof navigator && (!!Cg().match(/Windows Phone/) || !!window.Windows && /^ms-appx:/.test(location.href))) || (a = Cg(), a = "undefined" !== typeof navigator && "undefined" !== typeof window && !!(a.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i) || a.match(/CriOS/) || a.match(/Twitter for iPhone/) || a.match(/FBAN\/FBIOS/) || window.navigator.standalone)), a = !a; + return a && !Cg().match(/PhantomJS/) + }; + Sg.prototype.Fc = function() { + return "popup" + }; + + function Tg(a) { + a.method || (a.method = "GET"); + a.headers || (a.headers = {}); + a.headers.content_type || (a.headers.content_type = "application/json"); + a.headers.content_type = a.headers.content_type.toLowerCase(); + this.options = a + } + Tg.prototype.open = function(a, b, c) { + function d() { + c && (c(Rg("REQUEST_INTERRUPTED")), c = null) + } + var e = new XMLHttpRequest, + f = this.options.method.toUpperCase(), + g; + Hg(window, "beforeunload", d); + e.onreadystatechange = function() { + if (c && 4 === e.readyState) { + var a; + if (200 <= e.status && 300 > e.status) { + try { + a = Rb(e.responseText) + } catch (b) {} + c(null, a) + } else 500 <= e.status && 600 > e.status ? c(Rg("SERVER_ERROR")) : c(Rg("NETWORK_ERROR")); + c = null; + Ig(window, "beforeunload", d) + } + }; + if ("GET" === f) a += (/\?/.test(a) ? "" : "?") + Ib(b), g = null; + else { + var k = this.options.headers.content_type; + "application/json" === k && (g = G(b)); + "application/x-www-form-urlencoded" === k && (g = Ib(b)) + } + e.open(f, a, !0); + a = { + "X-Requested-With": "XMLHttpRequest", + Accept: "application/json;text/plain" + }; + ya(a, this.options.headers); + for (var m in a) e.setRequestHeader(m, a[m]); + e.send(g) + }; + Tg.isAvailable = function() { + var a; + if (a = !!window.XMLHttpRequest) a = Cg(), a = !(a.match(/MSIE/) || a.match(/Trident/)) || Fg(10); + return a + }; + Tg.prototype.Fc = function() { + return "json" + }; + + function Ug(a) { + this.tc = Fa() + Fa() + Fa(); + this.Kf = a + } + Ug.prototype.open = function(a, b, c) { + function d() { + c && (c(Rg("USER_CANCELLED")), c = null) + } + var e = this, + f = sd(xg), + g; + b.requestId = this.tc; + b.redirectTo = f.scheme + "://" + f.host + "/blank/page.html"; + a += /\?/.test(a) ? "" : "?"; + a += Ib(b); + (g = window.open(a, "_blank", "location=no")) && r(g.addEventListener) ? (g.addEventListener("loadstart", function(a) { + var b; + if (b = a && a.url) a: { + try { + var l = document.createElement("a"); + l.href = a.url; + b = l.host === f.host && "/blank/page.html" === l.pathname; + break a + } catch (t) {} + b = !1 + } + b && (a = Kg(a.url), g.removeEventListener("exit", + d), g.close(), a = new yg(null, null, { + requestId: e.tc, + requestKey: a + }), e.Kf.requestWithCredential("/auth/session", a, c), c = null) + }), g.addEventListener("exit", d)) : c(Rg("TRANSPORT_UNAVAILABLE")) + }; + Ug.isAvailable = function() { + return Dg() + }; + Ug.prototype.Fc = function() { + return "redirect" + }; + + function Vg(a) { + a.callback_parameter || (a.callback_parameter = "callback"); + this.options = a; + window.__firebase_auth_jsonp = window.__firebase_auth_jsonp || {} + } + Vg.prototype.open = function(a, b, c) { + function d() { + c && (c(Rg("REQUEST_INTERRUPTED")), c = null) + } + + function e() { + setTimeout(function() { + window.__firebase_auth_jsonp[f] = void 0; + va(window.__firebase_auth_jsonp) && (window.__firebase_auth_jsonp = void 0); + try { + var a = document.getElementById(f); + a && a.parentNode.removeChild(a) + } catch (b) {} + }, 1); + Ig(window, "beforeunload", d) + } + var f = "fn" + (new Date).getTime() + Math.floor(99999 * Math.random()); + b[this.options.callback_parameter] = "__firebase_auth_jsonp." + f; + a += (/\?/.test(a) ? "" : "?") + Ib(b); + Hg(window, "beforeunload", d); + window.__firebase_auth_jsonp[f] = function(a) { + c && (c(null, a), c = null); + e() + }; + Wg(f, a, c) + }; + + function Wg(a, b, c) { + setTimeout(function() { + try { + var d = document.createElement("script"); + d.type = "text/javascript"; + d.id = a; + d.async = !0; + d.src = b; + d.onerror = function() { + var b = document.getElementById(a); + null !== b && b.parentNode.removeChild(b); + c && c(Rg("NETWORK_ERROR")) + }; + var e = document.getElementsByTagName("head"); + (e && 0 != e.length ? e[0] : document.documentElement).appendChild(d) + } catch (f) { + c && c(Rg("NETWORK_ERROR")) + } + }, 0) + } + Vg.isAvailable = function() { + return "undefined" !== typeof document && null != document.createElement + }; + Vg.prototype.Fc = function() { + return "json" + }; + + function Xg(a, b, c, d) { + ff.call(this, ["auth_status"]); + this.G = a; + this.hf = b; + this.gh = c; + this.Pe = d; + this.wc = new Bg(a, [bd, cd]); + this.qb = null; + this.We = !1; + Yg(this) + } + ka(Xg, ff); + h = Xg.prototype; + h.Be = function() { + return this.qb || null + }; + + function Yg(a) { + cd.get("redirect_request_id") && Zg(a); + var b = a.wc.get(); + b && b.token ? ($g(a, b), a.hf(b.token, function(c, d) { + ah(a, c, d, !1, b.token, b) + }, function(b, d) { + bh(a, "resumeSession()", b, d) + })) : $g(a, null) + } + + function ch(a, b, c, d, e, f) { + "firebaseio-demo.com" === a.G.domain && S("Firebase authentication is not supported on demo Firebases (*.firebaseio-demo.com). To secure your Firebase, create a production Firebase at https://www.firebase.com."); + a.hf(b, function(f, k) { + ah(a, f, k, !0, b, c, d || {}, e) + }, function(b, c) { + bh(a, "auth()", b, c, f) + }) + } + + function dh(a, b) { + a.wc.clear(); + $g(a, null); + a.gh(function(a, d) { + if ("ok" === a) T(b, null); + else { + var e = (a || "error").toUpperCase(), + f = e; + d && (f += ": " + d); + f = Error(f); + f.code = e; + T(b, f) + } + }) + } + + function ah(a, b, c, d, e, f, g, k) { + "ok" === b ? (d && (b = c.auth, f.auth = b, f.expires = c.expires, f.token = Ed(e) ? e : "", c = null, b && y(b, "uid") ? c = z(b, "uid") : y(f, "uid") && (c = z(f, "uid")), f.uid = c, c = "custom", b && y(b, "provider") ? c = z(b, "provider") : y(f, "provider") && (c = z(f, "provider")), f.provider = c, a.wc.clear(), Ed(e) && (g = g || {}, c = bd, "sessionOnly" === g.remember && (c = cd), "none" !== g.remember && a.wc.set(f, c)), $g(a, f)), T(k, null, f)) : (a.wc.clear(), $g(a, null), f = a = (b || "error").toUpperCase(), c && (f += ": " + c), f = Error(f), f.code = a, T(k, f)) + } + + function bh(a, b, c, d, e) { + S(b + " was canceled: " + d); + a.wc.clear(); + $g(a, null); + a = Error(d); + a.code = c.toUpperCase(); + T(e, a) + } + + function eh(a, b, c, d, e) { + fh(a); + c = new yg(d || {}, {}, c || {}); + gh(a, [Tg, Vg], "/auth/" + b, c, e) + } + + function hh(a, b, c, d) { + fh(a); + var e = [Sg, Ug]; + c = Ag(c); + "anonymous" === b || "password" === b ? setTimeout(function() { + T(d, Rg("TRANSPORT_UNAVAILABLE")) + }, 0) : (c.he.window_features = "menubar=yes,modal=yes,alwaysRaised=yeslocation=yes,resizable=yes,scrollbars=yes,status=yes,height=625,width=625,top=" + ("object" === typeof screen ? .5 * (screen.height - 625) : 0) + ",left=" + ("object" === typeof screen ? .5 * (screen.width - 625) : 0), c.he.relay_url = Mg(a.G.lc), c.he.requestWithCredential = u(a.uc, a), gh(a, e, "/auth/" + b, c, d)) + } + + function Zg(a) { + var b = cd.get("redirect_request_id"); + if (b) { + var c = cd.get("redirect_client_options"); + cd.remove("redirect_request_id"); + cd.remove("redirect_client_options"); + var d = [Tg, Vg], + b = { + requestId: b, + requestKey: Kg(document.location.hash) + }, + c = new yg(c, {}, b); + a.We = !0; + try { + document.location.hash = document.location.hash.replace(/&__firebase_request_key=([a-zA-z0-9]*)/, "") + } catch (e) {} + gh(a, d, "/auth/session", c, function() { + this.We = !1 + }.bind(a)) + } + } + h.ve = function(a, b) { + fh(this); + var c = Ag(a); + c.fb._method = "POST"; + this.uc("/users", c, function(a, c) { + a ? T(b, a) : T(b, a, c) + }) + }; + h.Xe = function(a, b) { + var c = this; + fh(this); + var d = "/users/" + encodeURIComponent(a.email), + e = Ag(a); + e.fb._method = "DELETE"; + this.uc(d, e, function(a, d) { + !a && d && d.uid && c.qb && c.qb.uid && c.qb.uid === d.uid && dh(c); + T(b, a) + }) + }; + h.se = function(a, b) { + fh(this); + var c = "/users/" + encodeURIComponent(a.email) + "/password", + d = Ag(a); + d.fb._method = "PUT"; + d.fb.password = a.newPassword; + this.uc(c, d, function(a) { + T(b, a) + }) + }; + h.re = function(a, b) { + fh(this); + var c = "/users/" + encodeURIComponent(a.oldEmail) + "/email", + d = Ag(a); + d.fb._method = "PUT"; + d.fb.email = a.newEmail; + d.fb.password = a.password; + this.uc(c, d, function(a) { + T(b, a) + }) + }; + h.Ze = function(a, b) { + fh(this); + var c = "/users/" + encodeURIComponent(a.email) + "/password", + d = Ag(a); + d.fb._method = "POST"; + this.uc(c, d, function(a) { + T(b, a) + }) + }; + h.uc = function(a, b, c) { + ih(this, [Tg, Vg], a, b, c) + }; + + function gh(a, b, c, d, e) { + ih(a, b, c, d, function(b, c) { + !b && c && c.token && c.uid ? ch(a, c.token, c, d.qd, function(a, b) { + a ? T(e, a) : T(e, null, b) + }) : T(e, b || Rg("UNKNOWN_ERROR")) + }) + } + + function ih(a, b, c, d, e) { + b = Na(b, function(a) { + return "function" === typeof a.isAvailable && a.isAvailable() + }); + 0 === b.length ? setTimeout(function() { + T(e, Rg("TRANSPORT_UNAVAILABLE")) + }, 0) : (b = new(b.shift())(d.he), d = Gb(d.fb), d.v = "js-" + Eb, d.transport = b.Fc(), d.suppress_status_codes = !0, a = Lg() + "/" + a.G.lc + c, b.open(a, d, function(a, b) { + if (a) T(e, a); + else if (b && b.error) { + var c = Error(b.error.message); + c.code = b.error.code; + c.details = b.error.details; + T(e, c) + } else T(e, null, b) + })) + } + + function $g(a, b) { + var c = null !== a.qb || null !== b; + a.qb = b; + c && a.ie("auth_status", b); + a.Pe(null !== b) + } + h.Ee = function(a) { + O("auth_status" === a, 'initial event must be of type "auth_status"'); + return this.We ? null : [this.qb] + }; + + function fh(a) { + var b = a.G; + if ("firebaseio.com" !== b.domain && "firebaseio-demo.com" !== b.domain && "auth.firebase.com" === xg) throw Error("This custom Firebase server ('" + a.G.domain + "') does not support delegated login."); + }; + var gd = "websocket", + hd = "long_polling"; + + function jh(a) { + this.nc = a; + this.Qd = []; + this.Wb = 0; + this.te = -1; + this.Jb = null + } + + function kh(a, b, c) { + a.te = b; + a.Jb = c; + a.te < a.Wb && (a.Jb(), a.Jb = null) + } + + function lh(a, b, c) { + for (a.Qd[b] = c; a.Qd[a.Wb];) { + var d = a.Qd[a.Wb]; + delete a.Qd[a.Wb]; + for (var e = 0; e < d.length; ++e) + if (d[e]) { + var f = a; + gc(function() { + f.nc(d[e]) + }) + } + if (a.Wb === a.te) { + a.Jb && (clearTimeout(a.Jb), a.Jb(), a.Jb = null); + break + } + a.Wb++ + } + }; + + function mh(a, b, c, d) { + this.ue = a; + this.f = pd(a); + this.rb = this.sb = 0; + this.Xa = uc(b); + this.Xf = c; + this.Kc = !1; + this.Fb = d; + this.ld = function(a) { + return fd(b, hd, a) + } + } + var nh, oh; + mh.prototype.open = function(a, b) { + this.mf = 0; + this.na = b; + this.Ef = new jh(a); + this.Db = !1; + var c = this; + this.ub = setTimeout(function() { + c.f("Timed out trying to connect."); + c.bb(); + c.ub = null + }, Math.floor(3E4)); + ud(function() { + if (!c.Db) { + c.Wa = new ph(function(a, b, d, k, m) { + qh(c, arguments); + if (c.Wa) + if (c.ub && (clearTimeout(c.ub), c.ub = null), c.Kc = !0, "start" == a) c.id = b, c.Mf = d; + else if ("close" === a) b ? (c.Wa.$d = !1, kh(c.Ef, b, function() { + c.bb() + })) : c.bb(); + else throw Error("Unrecognized command received: " + a); + }, function(a, b) { + qh(c, arguments); + lh(c.Ef, a, b) + }, function() { + c.bb() + }, c.ld); + var a = { + start: "t" + }; + a.ser = Math.floor(1E8 * Math.random()); + c.Wa.ke && (a.cb = c.Wa.ke); + a.v = "5"; + c.Xf && (a.s = c.Xf); + c.Fb && (a.ls = c.Fb); + "undefined" !== typeof location && location.href && -1 !== location.href.indexOf("firebaseio.com") && (a.r = "f"); + a = c.ld(a); + c.f("Connecting via long-poll to " + a); + rh(c.Wa, a, function() {}) + } + }) + }; + mh.prototype.start = function() { + var a = this.Wa, + b = this.Mf; + a.Fg = this.id; + a.Gg = b; + for (a.oe = !0; sh(a);); + a = this.id; + b = this.Mf; + this.kc = document.createElement("iframe"); + var c = { + dframe: "t" + }; + c.id = a; + c.pw = b; + this.kc.src = this.ld(c); + this.kc.style.display = "none"; + document.body.appendChild(this.kc) + }; + mh.isAvailable = function() { + return nh || !oh && "undefined" !== typeof document && null != document.createElement && !("object" === typeof window && window.chrome && window.chrome.extension && !/^chrome/.test(window.location.href)) && !("object" === typeof Windows && "object" === typeof Windows.ih) && !0 + }; + h = mh.prototype; + h.Hd = function() {}; + h.fd = function() { + this.Db = !0; + this.Wa && (this.Wa.close(), this.Wa = null); + this.kc && (document.body.removeChild(this.kc), this.kc = null); + this.ub && (clearTimeout(this.ub), this.ub = null) + }; + h.bb = function() { + this.Db || (this.f("Longpoll is closing itself"), this.fd(), this.na && (this.na(this.Kc), this.na = null)) + }; + h.close = function() { + this.Db || (this.f("Longpoll is being closed."), this.fd()) + }; + h.send = function(a) { + a = G(a); + this.sb += a.length; + rc(this.Xa, "bytes_sent", a.length); + a = Ob(a); + a = nb(a, !0); + a = yd(a, 1840); + for (var b = 0; b < a.length; b++) { + var c = this.Wa; + c.cd.push({ + Xg: this.mf, + fh: a.length, + of: a[b] + }); + c.oe && sh(c); + this.mf++ + } + }; + + function qh(a, b) { + var c = G(b).length; + a.rb += c; + rc(a.Xa, "bytes_received", c) + } + + function ph(a, b, c, d) { + this.ld = d; + this.lb = c; + this.Te = new ug; + this.cd = []; + this.we = Math.floor(1E8 * Math.random()); + this.$d = !0; + this.ke = id(); + window["pLPCommand" + this.ke] = a; + window["pRTLPCB" + this.ke] = b; + a = document.createElement("iframe"); + a.style.display = "none"; + if (document.body) { + document.body.appendChild(a); + try { + a.contentWindow.document || fc("No IE domain setting required") + } catch (e) { + a.src = "javascript:void((function(){document.open();document.domain='" + document.domain + "';document.close();})())" + } + } else throw "Document body has not initialized. Wait to initialize Firebase until after the document is ready."; + a.contentDocument ? a.jb = a.contentDocument : a.contentWindow ? a.jb = a.contentWindow.document : a.document && (a.jb = a.document); + this.Ga = a; + a = ""; + this.Ga.src && "javascript:" === this.Ga.src.substr(0, 11) && (a = ' + + diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 04dfec2..72ee583 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -51,8 +51,8 @@ function askUserNotes() { 'This is an opportunity to enter any notes you wish to remember about this session', // message onPrompt, // callback to invoke 'User Notes', // title - ['Ok'], // buttonLabels - ' ' // defaultText + ['Ok'] // buttonLabels + ); } diff --git a/platforms/android/assets/www/resources/js/study.js b/platforms/android/assets/www/resources/js/study.js index f0eb677..b683cad 100644 --- a/platforms/android/assets/www/resources/js/study.js +++ b/platforms/android/assets/www/resources/js/study.js @@ -82,7 +82,7 @@ function startMonitoringSensors() { updateScore = setInterval(scoreOnStudyPage, 60000); //Check if the user wants to be reminded if they are too distracted. - if (getDistractedBool) { + if (getDistractedBool()) { setTimeout(checkDistractedReminder, 600000); //first check begins at 10 mins in (score would be 100 if we did it immediately and cause the next check to immeditately flag) studyCheck = setInterval(checkDistractedReminder, 1200000); //timer to check if the users score has dropped significantly in the last 20 mins } diff --git a/www/help.html b/www/help.html index 2727659..c2b70a9 100644 --- a/www/help.html +++ b/www/help.html @@ -40,6 +40,10 @@
+

User Evaluation Participants

+ For the next week I ask that whenever you sit down to study, you open the app and press the start switch to inform it that you are beginning a session. At the end of your studying session, simply open the app again and press the stop switch. At the end of the session, I ask that you fill in the “Post-Study Session†online questionnaire. A link to is available within the menu of the app. Alternatively you can use the link I’ve sent you via email to fill it out on a computer/laptop. +
+

Menu

The menu for the app can be accessed by selecting the 3 white horizontal lines in the top left corner of the screen. This gives access to all pages within the app. It can be closed by selecting the horizonal lines a second time.
diff --git a/www/index.html b/www/index.html index e02712e..726eca9 100644 --- a/www/index.html +++ b/www/index.html @@ -6,8 +6,8 @@ StudyWell Home - - + + diff --git a/www/resources/js/alerts.js b/www/resources/js/alerts.js index 04dfec2..72ee583 100644 --- a/www/resources/js/alerts.js +++ b/www/resources/js/alerts.js @@ -51,8 +51,8 @@ function askUserNotes() { 'This is an opportunity to enter any notes you wish to remember about this session', // message onPrompt, // callback to invoke 'User Notes', // title - ['Ok'], // buttonLabels - ' ' // defaultText + ['Ok'] // buttonLabels + ); } diff --git a/www/resources/js/study.js b/www/resources/js/study.js index f0eb677..b683cad 100644 --- a/www/resources/js/study.js +++ b/www/resources/js/study.js @@ -82,7 +82,7 @@ function startMonitoringSensors() { updateScore = setInterval(scoreOnStudyPage, 60000); //Check if the user wants to be reminded if they are too distracted. - if (getDistractedBool) { + if (getDistractedBool()) { setTimeout(checkDistractedReminder, 600000); //first check begins at 10 mins in (score would be 100 if we did it immediately and cause the next check to immeditately flag) studyCheck = setInterval(checkDistractedReminder, 1200000); //timer to check if the users score has dropped significantly in the last 20 mins } From a536ad5fe3fe0b8500c25bd8ae6da049f352a918 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Fri, 4 Mar 2016 17:47:29 +0000 Subject: [PATCH 16/20] fixes disabling break reminder, ask user note text colour (new method, uglier but works) --- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 45981 -> 46093 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 330639 -> 330639 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 20942 -> 20942 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 62789 -> 62789 bytes platforms/android/assets/www/css/index.css | 1 - .../android/assets/www/resources/js/alerts.js | 19 ++++++++------- .../android/assets/www/resources/js/study.js | 22 ++++++++++-------- www/resources/js/alerts.js | 19 ++++++++------- www/resources/js/study.js | 22 ++++++++++-------- 10 files changed, 44 insertions(+), 39 deletions(-) diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index 7440cc073034aa41ba2569756d19dea6e0efcba0..58727d6dbaeee09c1e4320b3c92ffd5acef2c12e 100644 GIT binary patch literal 17 VcmZQBkvw$J`yw9~0~qiY0{|;l1IPdX literal 17 VcmZQBkvw$J`yw9~0~m0(001jv1J?im diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index 455c7f6aaa49e2e887ac5388ffa80a979e88c684..59902ffb3d02b2e11a17c2e6219bf09d01777416 100644 GIT binary patch delta 3627 zcma)P8F7JeV=ia~Oz}rM_ zTsi5p;QEjc;F+Wv%C3<0PK>`*buF;8r?}Hme7oY?X5^b80UoXIO8@@+>A7NZ(osQ> zjPhq`ic&F1(AG@x23-=@mbn!9tc|{USdhSR`CH_XBgbl>X)?!UdB_FxSG90Efor#! zH{y2--Cn@bWR6?BMy`7CJ{*Eqaa=YE`I2d14$t`dP8rCn53jCE zA&+|YZw$DsRU2oc`BdZ!;w`#B(po;=4Y_PtUOjY9Try!K@5 zL&)Ic&6^@`QYKu3dF#0P&Y{Rd-A}a#GcCuZYUFKSUpfN5Ja4iAx$e8@Oo-ySq6m3W zH>D5k(W-*j^lUm3x$B`Fax$y&p1^P9W-IKUnO7#8w6d$$%_D*HJVHg)@YA~EY|N|a zU8aTB8@av|)yTa}>(%gbJ$F4U$X$41X#aHBu#w|*y0k62bq*$P;JE1_tdkl&OadSI zc+&#pcGlYAP>%6cEAd#o5+1l+UN>9@3ehg{^B?1}&|s;4by>fPmYT@8Ky5Ut==>zK zk)0u4pf);k(ZjMDV&YWLByqkmi7F;>nbka^7?wm86MfP#lqiOAs+jdAGcFUw7&%dl zZb|8nL@|t0#k>j+srweiur#Weqdz~$B8p+0DrSiHIVDjH<5V%@K3(lh6vH@GOt;*q zXrdU#sbX&2-W5a?!#GupxnImxq8P@hVn&y>$R~^OP8G9#TV;2m7{-Ma8IKH}p03N;Nad zJ#ih;j4_93rc;H-7@`@*sb+j)Gs1{w7^j*!I#=OKG{ZR6O#5jG5kxbLQ_Td$f4`Dw zhH8bfOu?sb-2RFYO|lF><0A@9j2E^u5weBy1h9 z`GoU&q(GCd=XM7o3bcb3xf;_`q}F zGuGb}acvd!$P(+vtifZ!B&ZBOYWrjsLm2WnvhWK+jz9A27MkvmlO^`KbSoYUlBrAZ zW9^IeK~Rmn;d&~GYch!PTw#Xam+q?@#UcYt5c^Hg*^*B5hOw{}EBj9bUu1VTJDR2*)tq z;ly%X<2&t9m_vO3`ZPOr{yh7;-K@mxi3@r|UYAEFF|Vc=+Uf6YDYj+}n=I;wCjwWW zmcqWh>KMb5Lj#}LdGL()UZ^|w9{{Jss{jB1 delta 3490 zcma)_ZHeOOlLiZBQ zrgY!U_SExq+bu#H-EY!$Q&igTJ%=+#?H|qa%pBkEyyrdd_nkApV-g-qw?2|4n@XhW z0cJA4)Eq_8v`Zb;{@-iNJ0)966YgsYZ6oB;1P6`HSWg{UxP@_E(X{gt%~WUqp~hZz z=LPbT9l=J@`@u5J+0|A$CiYc#-qW5L3E1WZ-R=jCQ5V?=iAg8qzSjaB!68A#xX^Ag za&Mo%y+9ewasBPchsO>%4Eyt_cM05{r9=Q(k{K;1WpqS5NG!ePi5Bkh)Z?9Y!HPbk98p!jn0!UynRw zb(}4@#c*8afqc-LdrnZx=kJn%JjME5DxBowO-Y?j6Ak|XA2nBxVkpK3-`lYS)I66J zAz%B*dk36XbMp?dLT>L8U7eD`r7wW^zc8ieq?*J6y1Fn!|= zyZAg(N952vukKcyYQ3wiFXOOmPlxE`&~+16m%I`?BGRLc z;KfGndFYdG;lDRss~~<8$LV%ipxPe`e(@aFJ&JiMAKOoYk9@ptA#%U$2U56#@vaN- zS`e%T;-{bA$R!{b?P4#hz-yt|Qa6+B?L#?Or*iea28=GfX_juOQ%P8D;p;>J^=7{;k$ zhULgBh+-J0ig`S`W-L(*<5V%lg~g+ZVi>22F%8OnMij$1Rm>SZ?|h;d#;Iazb6zTl zVi>1;MxJkYiztS1s+i-7@|~y{hN)s2>+gmT#V}44)8sp>jwpt4s+b0^oqdR67^jLE zTeB>eD28#m2&ak$l@Y~gIZ=$8n~Mce4C7QW$89TIM8&9J4~*2-N;PxBYd~kB8SNON znezon=ZIz)r<$q$II4kYhHsdnqi!3rfy-B&9`WV4WpXr+%f1wXQCO_K{eBGy*!X; zhHjhEu9y+3}|Tkf`nD_g|f+QQqO zLB1j@AQW^nxOj;L@`TV;r@`TC?j70L2bO=$ue>gK0R^o%*-4r(%UN-Ng*YR^o9j-!YD^BKpmF6D@A9yZ&#{BJ**Lc9- zEHQs4f4mmjxRMhlcJIiwun@V)O2UQQaoFyAW)%s!Sz?{aWWpr@Vb}&i-wLQiuIfa% ze5on60f(b^fpV+J&728WHn?G%`q{}2oH*Xb_Ym^o149cTVyieWT@OLXAqUO28LJJU z7`ef2j1we*hS~jJWS=lj_sP60 z(_~1?=Jt=i5yq$dcD)iVWv6NnJSjbBPeUy%-6kIBEeD}+65~g;)2nUuP3vwX>|B|4 zxnO5-V3e6_jA2=9Fg?+m$Mt(O9>;YbZKbQZx9voGR&bk8TkP1|Fk20W4*Ev6{O8cj z`yU(eq}4>0O6Bs#MX}2|2tn$(8Fy-54W{!Oz%COCf@J4fb5uz2H3tJG5s!?TGJM`8uUYT$z>? zpg$n;50s79j4YB#1KMp(%zyLl6Ug)aQ1!V#VgjAF<%f~wbj&`fMDS|-qTc@>*Rl?D L+$>Ld_b&ede62}+ diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin index 93f536648b7885662f1ebc2d44a0e3d241ef35e5..3cd04fa6db46b19018398eab9cf5cde6162d72d7 100644 GIT binary patch delta 2756 zcmaJ?3se(V8qUleLgYC?DiJ~+P!L^tg^D5;)G7py($Mg-ioD80suUDfER_~nTq&%8 zW4S;Tf}(bPASiI@iYN*PA3+i-F6vrbVMV&G1))b5wcX4NC}aJeo=3f!S1zK;lrSwv>mPhd*JG;6&+f<4@6GS%%l$xGJ_-T|`|G zNS0Gc`z@)iPMQygLmZS%6c=YF)fo*hwP5m~@XSQMRBRWllw{_x`Glj?bAf~`yRZ#k zBU3+Oll!VEa&Dk$M*qHNJop8hlNC{6a}&rDYDJ-&D_X<^F8A)DEY#i}h z*TWJ4fAFGsR)MBpUtaIFICdvfj5~Hv3ab)IAS@&wdF+}W)D`Z*q7Jhlht{SzB~uleK0O|4T+Y_r_zShi zW(hT9BOpH?v9RY|5?tJ9%lnE#@NM73#Zc(d=G0s-VkwT6& zS0kHVY>Xh5tibp%Y7Fy$$-_i4tQo*8VWb;wjtT}bV+;+w!v5uqGPL*u6C%xj;WubF zmuLrQeFiu?3k}%<4UY8I;=2h{Dg&1>a@kPON_oVA)cDBT_2x0A-@^N$crJW(3Vcc2 z&JC8M#320Ec5+v&L%eK@Q?<`Sw-HZsVz%usr}I$thartgi&IAA=J2mJj8PZOL21Ad9+4`DPRA0UlSve9;`S4M#ZwW z)!RM~$yIrOmh{65RbD-f7u2P9po}i!+=E4(cm{uJ(IldV?Sr;0{Y>#N%+TP;ylpq$ zd!YPvcl@~QAq#GbaFhiT)17}5i(ktqs-#o3a-<2@aze}~x9FeOM%x0wO z!pXye&QBlhycxb=B!|rRJQD|N&4`sSc@&=wRdVnlJdS}3z3u~IA5Yj~OMKLjLbPD$ zf*0-zRvFci5K7ZWHfA84@Y z6Z>YaADGr%NA^xYIK%Wao-MrT)Ax_@!DbZhEjX9q9DTxsQP>HP0h*AOW7!+Z(+ai0 zqW8@{q!nJZr~c|X*_KbXuHKD1-+oAF}8dy(hp+A8slp zNM!aDXQx?%^T{2?z5}%tnIxBtesSH|sc$BR+-3dI{4~W>is+yrv6`F#;rHB7LNOs7 zpIyDoPsYwxO{OBV-F}It^6pZ!S09w~$T367GX9Z6*f4kW*7CcJNpJk1+qHJguR3|I z%|^Xqzym2%-ZQmJxPJ4K8m8oeL{xK^@F$Qeg=pi#Z delta 2362 zcmb7EdsI_L8qb}XKtN_44zCij=`{${?% z@B6NqxSEM;_Na{`MAij!>bc*C0@men&ldvDJ|+?|G6DO3!C@BxYrQ%AiGcf)MIz-y z9y5b>HjGA;ibR^Pcsuf4BocY)1>Ajs!i90)+4hU!Jp0ZmV- zt|g8MJ1Q8jX0bjhHJhyR!>X#Hltba(cZGWo7O*88dx9xHvqG|RmcVYzVQW+op@A)r z6Vig}puo&rG8EYilO&;M4XG0B#{D+?z0uDWX5;1l?UlMscLIf%=5Q8|D`4x!DSnqGijPrl zi4<<{UCQ>13-n1&_1&I0OZk&Po;-6X6w`lyzhL{|w2J~c@>5o!QR5AlgN#x2!FL2Q zdzdw7T+xi+#R)tZIX)fppkR{GV5$2+ZfRymej1^t5qjp#5t7gg3^>UD)T6%4T~!s8 z;Bd#y5F?cyf;xab-DOV}ZEZ^bEb>Nm>$7>@R5t)0ib+Q~#Pq}q##2k-ITVD6TE!WZ zGr=ksGJ7)oLDBNh`VNb_Ys-y4yx))#cvWf*tZU%m*CcWZJb_QIOMmvCH#cYgC1cdy znn!adk&Z=R8|ia^8{r?9&7vz8fPW<6FUBQq=`6hEYHDZ!e$!~_L0Bju#d;v4As9M((6~%k&rrvyFc9GN&t`YTw$^2*o7U{x z*Ed(nhl3s@9h*Q{U-(p&mejxCZr;AECDnGvyq>%rW6ijK^^)6#)@ViFkd$VSiiekl zsIGx%S%|k?7ti{hWA<7%DbYcrWZN__KFcjXkB@aMl#2FdC5Nv+Wp?w3{oGyae0YGP zif(?sV}kXt{4U*L4=*ruNdP>rv}NJqbYT2*fW)(6GunemX(#+a5Kjx?LPYl(VK^o# z6_i@VlRFWPi)m>-nhZ$dJdlUB6^0Jd$ZqHg=%2dKp8<`@gw4$B+Smj{XJ34Dm3nKT zCquYMFkdFIEEqK0Avuj;oy62D?UuhEe2Py>%OzF1(0S(sUCEcv!{?+byef3oq{==p zt(z^YHUCub?uRGR9$QVvqt%DW_G@4>9$smohz)C2E&R12{-Ps1IDa?$I(I*Kul|DN zT>R7hTU_~>rj>!wG{+x~VF;(T5Hy-z;`a&J+zRw$rUM*>QOozs&sU}HKPi&ut}I_) z{jzE8*(=N9?tAVgx)m^tlrTWC^Ez~=kKTkI1DaF-C&|bzU-)n0broQVHJ1a;RUZ+l z0}LhEQ(&_6_1=0}P8bmuKrC)hOG><1{R>CmmUE8yeiPSZDkhe{+E1hWHA&~JvUyGCwm-i^z9u;p zX!Xt@ASRElgFGITd<*QU*@RX|UjHVw>_I`^$iiq3>BxmxFB%Fhgtqips^LC<=`fALn8?PD6{)W`|$(^oCd_6{Tlr zs>8;|hV^LbnZgFcj^FOgF-ntR$0vT0Ug<_{GTSFK4$yxY(NT#_AUUvUlZC|pi)lRj zAzhJ-+GV!E6^yf=CiS9UO9t`?3c#VJyGcPa4)YODHqe)ZqzZH!UZxU;83CL LZaweRcpLr?ods6M diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin index 67c30d1ba93189c99ae0ab6785740ae40203b9af..51700c14bc2425bfd09a272bf78c0477b2071980 100644 GIT binary patch delta 26 hcmX@NnDN|V#tr)d1@8CnuGUXl&Bp))_rJ=22LPll3yc5& delta 26 hcmX@NnDN|V#tr)d1&-v0nnj=KSi=AW2a+2m0|20d3j+WE diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin index d8aacb045a577af791d5ca61f17235c823a3731f..717d32b0d11ffb60eb7733e51ce7b893d0095f9e 100644 GIT binary patch delta 489 zcmX^5iuvd(<_Qse7c3YUIJg;rAXa9&_Qt}s;u9OVC(B8EU^;Slvw-9kW)?=J{ZByR z8yj{DZw~NSpD5UKu0~O*_kgZ_)8xkEi6-g$Cof#0vRQtS9HXFC#YK;Xe>~fb;wNp$ zEIy=(Bo%VI()*0@4CRvxe+C>ccpC+iQetGu&y3-j+_*}8^S!t_#?4FDyYmPX_|4(` zxPvYD%xU>mOaYrXCSN!(N8t2jt9!FGw_Ln%HQzn^`mRM_!Rd?Ua39%j)yulgtx-dM z^$C#R{DeE=hzJN>}F;onS}cRE?bvQi(dU^(wjXA zn-?s(#t24v#1i9Xv}y9fFJhbboSnuckQ%9d@8KWaP!#rGgwxxuWd2s*W5E%u~A`j!^@M*f)eX}6v84R q^E_@#+j_9Bnt>#hFe&u#{`j1)dT(Fu`l#H?hLGX_#pqq1hX(%9gB&l6LwlzPy^xNZ`RM>^(+E%$RDJ4c0w~Lo2O>SJJKKcA<{>^XW@)_t zD{H5EPCnS|y7~3v$4ry?&h43e?wQACgGXtM0{tr8DObfcgkyhKzSrZ-b%iRs$+UUT z*=bw?8!pBqZ4T6~;NWifZWJ@p*@k(fe^c=D;7z ze^Z}D^dwp;WJ6^FSylYl%~H-71D*FBh~I-S^D?olZR-#Js8UbJTYcOmResN8#YTnA z4KGhJ3vPU3xnbi9C7Jh*ck)zPS8qd-%A1v>&Q^0Z^3CK;E6l1tC?ljeKrziwZ}=Vn D=Ai4u diff --git a/platforms/android/assets/www/css/index.css b/platforms/android/assets/www/css/index.css index 20518c7..2dbef9f 100644 --- a/platforms/android/assets/www/css/index.css +++ b/platforms/android/assets/www/css/index.css @@ -43,7 +43,6 @@ body { padding:0px; /*text-transform:uppercase;*/ width:100%; - color: black; } hr { diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 72ee583..0eb6077 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -45,16 +45,17 @@ function stillRecordingNoiseLevelWarning() { ); } +//for some reason this nicer looking prompt broke (text input colour became white on white) //Ask the user for notes on their session. ---------------------------------------------------------------- -function askUserNotes() { - navigator.notification.prompt( - 'This is an opportunity to enter any notes you wish to remember about this session', // message - onPrompt, // callback to invoke - 'User Notes', // title - ['Ok'] // buttonLabels - - ); -} +// function askUserNotes() { +// navigator.notification.prompt( +// 'This is an opportunity to enter any notes you wish to remember about this session', // message +// onPrompt, // callback to invoke +// 'User Notes', // title +// ['Ok'] // buttonLabels + +// ); +// } function onPrompt(results) { userNotes = results.input1; diff --git a/platforms/android/assets/www/resources/js/study.js b/platforms/android/assets/www/resources/js/study.js index b683cad..9095333 100644 --- a/platforms/android/assets/www/resources/js/study.js +++ b/platforms/android/assets/www/resources/js/study.js @@ -82,13 +82,13 @@ function startMonitoringSensors() { updateScore = setInterval(scoreOnStudyPage, 60000); //Check if the user wants to be reminded if they are too distracted. - if (getDistractedBool()) { + if (getDistractedBool() == "true") { setTimeout(checkDistractedReminder, 600000); //first check begins at 10 mins in (score would be 100 if we did it immediately and cause the next check to immeditately flag) studyCheck = setInterval(checkDistractedReminder, 1200000); //timer to check if the users score has dropped significantly in the last 20 mins } //Check if the user wants to be reminded of breaks - if (getBreakNotifBool()) { + if (getBreakNotifBool() == "true") { // setTimeout(checkBreakReminder, 600000); //first check begins at 10 mins in (score would be 100 if we did it immediately and cause the next check to immeditately flag) // breakCheck = setInterval(checkBreakReminder, 1200000); //timer to check if the users score has dropped significantly in the last 20 mins setTimeout(checkScore, 300000); //first check begins at 10 mins in (score would be 100 if we did it immediately and cause the next check to immeditately flag) @@ -130,10 +130,10 @@ function stopMonitoringSensors() { //timeStop = new Date(); //sessionDuration = (timeStop - timeBegin) - totalDurationPaused; - if (getDistractedBool()) { + if (getDistractedBool() == "true") { clearInterval(studyCheck); } - if (getBreakNotifBool()) { + if (getBreakNotifBool() == "true") { clearInterval(breakCheck); } clearInterval(accelMonSensor); @@ -178,7 +178,7 @@ function pauseMonitoring() { timePaused = new Date(); document.getElementById('myonoffswitch').checked = false; - if (getBreakNotifBool()) { + if (getBreakNotifBool() == "true") { clearInterval(breakCheck); } @@ -202,7 +202,7 @@ function resumeMonitoring() { durationPaused = timeResumed - timePaused; //keep track of duration of pausing totalDurationPaused += durationPaused; - if (getBreakNotifBool()) { + if (getBreakNotifBool() == "true") { breakCheck = setInterval(checkBreakReminder, 60000); //check if the user should consider having a break every minute } @@ -306,11 +306,13 @@ function disableWakeLock() { +//for some reason the nicer looking prompt broke (text input colour became white on white) +function askUserNotes() { + userNotes = prompt("This is an opportunity to enter any notes you wish to remember about this session. If you have nothing to add then just click OK."); + localStorage.setItem("userNotes", userNotes); -// function askUserNotes() { -// userNotes = prompt("This is an opportunity to enter any notes you wish to remember about this session. If you have nothing to add then just click OK."); -// localStorage.setItem("userNotes", userNotes); -// } + pushData(); +} // function getUserNotes() { // if (localStorage.getItem("userNotes") != null) { diff --git a/www/resources/js/alerts.js b/www/resources/js/alerts.js index 72ee583..0eb6077 100644 --- a/www/resources/js/alerts.js +++ b/www/resources/js/alerts.js @@ -45,16 +45,17 @@ function stillRecordingNoiseLevelWarning() { ); } +//for some reason this nicer looking prompt broke (text input colour became white on white) //Ask the user for notes on their session. ---------------------------------------------------------------- -function askUserNotes() { - navigator.notification.prompt( - 'This is an opportunity to enter any notes you wish to remember about this session', // message - onPrompt, // callback to invoke - 'User Notes', // title - ['Ok'] // buttonLabels - - ); -} +// function askUserNotes() { +// navigator.notification.prompt( +// 'This is an opportunity to enter any notes you wish to remember about this session', // message +// onPrompt, // callback to invoke +// 'User Notes', // title +// ['Ok'] // buttonLabels + +// ); +// } function onPrompt(results) { userNotes = results.input1; diff --git a/www/resources/js/study.js b/www/resources/js/study.js index b683cad..9095333 100644 --- a/www/resources/js/study.js +++ b/www/resources/js/study.js @@ -82,13 +82,13 @@ function startMonitoringSensors() { updateScore = setInterval(scoreOnStudyPage, 60000); //Check if the user wants to be reminded if they are too distracted. - if (getDistractedBool()) { + if (getDistractedBool() == "true") { setTimeout(checkDistractedReminder, 600000); //first check begins at 10 mins in (score would be 100 if we did it immediately and cause the next check to immeditately flag) studyCheck = setInterval(checkDistractedReminder, 1200000); //timer to check if the users score has dropped significantly in the last 20 mins } //Check if the user wants to be reminded of breaks - if (getBreakNotifBool()) { + if (getBreakNotifBool() == "true") { // setTimeout(checkBreakReminder, 600000); //first check begins at 10 mins in (score would be 100 if we did it immediately and cause the next check to immeditately flag) // breakCheck = setInterval(checkBreakReminder, 1200000); //timer to check if the users score has dropped significantly in the last 20 mins setTimeout(checkScore, 300000); //first check begins at 10 mins in (score would be 100 if we did it immediately and cause the next check to immeditately flag) @@ -130,10 +130,10 @@ function stopMonitoringSensors() { //timeStop = new Date(); //sessionDuration = (timeStop - timeBegin) - totalDurationPaused; - if (getDistractedBool()) { + if (getDistractedBool() == "true") { clearInterval(studyCheck); } - if (getBreakNotifBool()) { + if (getBreakNotifBool() == "true") { clearInterval(breakCheck); } clearInterval(accelMonSensor); @@ -178,7 +178,7 @@ function pauseMonitoring() { timePaused = new Date(); document.getElementById('myonoffswitch').checked = false; - if (getBreakNotifBool()) { + if (getBreakNotifBool() == "true") { clearInterval(breakCheck); } @@ -202,7 +202,7 @@ function resumeMonitoring() { durationPaused = timeResumed - timePaused; //keep track of duration of pausing totalDurationPaused += durationPaused; - if (getBreakNotifBool()) { + if (getBreakNotifBool() == "true") { breakCheck = setInterval(checkBreakReminder, 60000); //check if the user should consider having a break every minute } @@ -306,11 +306,13 @@ function disableWakeLock() { +//for some reason the nicer looking prompt broke (text input colour became white on white) +function askUserNotes() { + userNotes = prompt("This is an opportunity to enter any notes you wish to remember about this session. If you have nothing to add then just click OK."); + localStorage.setItem("userNotes", userNotes); -// function askUserNotes() { -// userNotes = prompt("This is an opportunity to enter any notes you wish to remember about this session. If you have nothing to add then just click OK."); -// localStorage.setItem("userNotes", userNotes); -// } + pushData(); +} // function getUserNotes() { // if (localStorage.getItem("userNotes") != null) { From 48648d3ce0fb70f2a184d176a0b18a37f1621878 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Fri, 4 Mar 2016 20:03:47 +0000 Subject: [PATCH 17/20] final before eval orientation portrait, keep track of number of break/distracted reminders, fix for distracted sometimes reminding after first 10 mins (had to clear the localsStorage var) --- config.xml | 2 ++ .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 46093 -> 46093 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 330639 -> 349468 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 20942 -> 20942 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 62789 -> 62789 bytes platforms/android/AndroidManifest.xml | 2 +- .../android/assets/www/resources/js/alerts.js | 4 ++++ .../assets/www/resources/js/backend.js | 5 ++++- .../android/assets/www/resources/js/study.js | 4 +++- platforms/android/res/xml/config.xml | 1 + www/index.html | 3 +-- www/resources/js/alerts.js | 4 ++++ www/resources/js/backend.js | 5 ++++- www/resources/js/study.js | 4 +++- 15 files changed, 27 insertions(+), 7 deletions(-) diff --git a/config.xml b/config.xml index d6218bf..cac3e8d 100644 --- a/config.xml +++ b/config.xml @@ -13,6 +13,8 @@ + + diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index 58727d6dbaeee09c1e4320b3c92ffd5acef2c12e..68a7d044cdb42dad8f9d11dbcd72c267d571cc6a 100644 GIT binary patch literal 17 VcmZQBkvw$J`yw9~0~ql80{|;F1Ev4~ literal 17 VcmZQBkvw$J`yw9~0~qiY0{|;l1IPdX diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index 59902ffb3d02b2e11a17c2e6219bf09d01777416..ceac1ef8c11f8e2946b175d71ede8a2971fb9f63 100644 GIT binary patch delta 2109 zcmZ{lc~DbV6vl5J31Jh%=7Nd@XvrI~u$&W{l8C2YovlU!E9exJr@Yly&f9g>9lu20}Kg|!9{!vF*)cf>b?gly|CshH;+4&K$uHR&T^W zZUG(K#2tZaW#BRB-~o|6f{sYnPM9sAgNwLydu_@iU`ruwwfb{ZwAc%VAchCT-3X?f z8&y!r19}Vst%JpzAwHY763rqo{y19-21*(TuOT=%YncH3*>qOMuOhgVIk_8Bl{CvqALMRZoWTT$ViDON%e z4+t9&)Md^2z^x)WxT`e+6FaF#aWU;=(TD#Z=rfxEw_;jg%hea2_FWrbBC$Z0d`xh&Sc<*}C#L5OBF^yYB!kqtxhP?*DWu|g1Ca4HHMO6a)eT+zu7Z%4yF zJcUs>DyCfa%b|>?&@(`A#Jwj2;&SO27KacB?wjO-ZYd3zw-LyM8`gj)59s70n7du$ z1}Awy{1t*dG z=Gw69O708n|EKV!2#bYZYl>Z9H>%7T&3#NV%{Bh`gAglLenB9h_Lz)fv?O6;|w&&A$2aLe%Mq*vR%K{vPXccN*q`pgIXYy7+?0#4lUWhmh6L_!+R>-krU3aX+I0 zWC6jKA1s8kE)}mZ8B)ng5xka+79)%qCCasyW#(qPNAYL#sKbdz)%#o_u6@ ziE*`8raQZwG%=n!b+f$u{41yeNB`zg@0t4-53RINYo7=qMMwx7IssnGQ!x zM1tg7|A3-;YqOZv9+?09_;6K&8tR^yr^or0_ZLnEoOoHJW`#9O_E d64Az0E?@JqkV;n4X+~sGmzy3_1{Lh_e*yDYJ^lay delta 2080 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 delta 2392 zcma)64OCRs7QXkMGe5|WcN7GNLGBE~8ci8yeCYxe&{QTL@xb9HvsnTfV$X*H{-7i@ zk_199!x0Xk=%|DxsbJBe{3&!u(?QXmWoAMT3aKQKT$O*lnYkil@z%R*owfG*X76wB z{q4PH=K+sW>~2&hn=BMXeQ$dd#at+QYy)+f&HmjEQy?&aqUbb-&Gas%s0ovJTvR|& ze(yVM=)7mh{;rjxCZ4t99~q`sH*Rb4q}QWxFE4gW6HC>|*X8gbSu0VhS1MclWn9NM z@w<{8AQO{^e)Zy%Myph-ch~nhKu}-x`=ig)Tb&*HRZ1=IY&D_q@mx4c+b%_yF4#Mv zC|IKzbgsxtd(Wjm#M6NTtU%GW{CJM7{wR}))L3uuVA&y5Fg|8< zc6Zq?V*Cn^X-uene5$hEDkY?QNdym~gM+N^e5uVovna39fiqGo(n=dpxVIV=daKw^ zUv3_FcJURyN$^xCI^!LT)Uq!S=aYo0e7r^nZpE#`fX2lgus@2gLTN_+amU!ZQRUL-ONHad@E5U7sSr3 zug8Vu0^2ZcALH=}`k3RC3+7D~qusS)-dnYOkR{^moiy2dZz*`Z_(gPu;}9!PRK~sj zrrT=6)@H{KO#8aQfOu)^tshD&RyuH~NqP+K-HW?(n;|DB>`#E>hlh7>JG4Hn!+J8{3z;=0$5sw3g0kBZ?0CF2rY~ zj0?%W$ZQsn7>)^1leeAWDVjv-nA=%cSpry`ZUnQTGP30-Y_c-z#RpFpUHtKGha9&U zL5eq!P;J)_NqRz;&2W9@e%oRH6+(M4?BXC1F}5*68aD)ijgnIh$CsKCUV1CQP^`w! zUe=$$rN?Lm4r^yLp3$)nTsEv$@~G2ZO*Xl5<U|%nux^X`P?BDZbDgwmR*zd*-4hd(PNPf}Pcl`F)K|7np3xlTO3t=X|=? zuch1J+>f){nKk0f^MCt~?qU84#~O+N8*(B;gz#n!kdZz0z=Osc%LjM2t2Hkf_b+1f zY{cu!zugwCXnELtv~F(Lfx4l-L^1o4=X@*Mg&UH<3l*OMDf#JXP~lEi^fEidgwuf% z4`LL7H8i$u0819010T8(w+6VDA)!(r6JwhTOA7M9H8H8u01HiQx8qL}RUjBkW7{?H zcjP?f-wV2~IV6IPK8Vr;d}xWz{BG@H&A*ms%+F_3pO5n&*7~RwyK{?%civ$MJ6(5w z@w7(=$UbM?pJu7t8TIp#1#A6o?Mkt0+n(`qRU9#CfR!dTA(Z3njU>6**LSKDQJn%Y zlkrZKZ5f`t8GG=>!l($W-T`LdzI^CSzU~8|qW||e0-e~6t`R+ryK`6}n|$w_DzJ;p zIR$LTFsnORvM&0M#}E&3jWcv1=~-}?vdwPf8*k_(8zZ6aI&-rmZ|NB;t_MM}x3hSJnU=nQ(R)EQrk#!Fm#T6Y5+fefQ1mx9|Fnk0-?4w!7kn5bFQA{!dAU7mufItxU^alZn{{^%Ad3*o> diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin index 51700c14bc2425bfd09a272bf78c0477b2071980..ba9ea9663e6321ca83a64901e1c51f0e67f86641 100644 GIT binary patch delta 26 hcmX@NnDN|V#tr)d1!7yDJ^ZjScnSj$)KpzP4*;(I41WLs delta 26 hcmX@NnDN|V#tr)d1@8CnuGUXl&Bp))_rJ=22LPll3yc5& diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin index 717d32b0d11ffb60eb7733e51ce7b893d0095f9e..dbd83633116ee2e3d48172899db86b421d9c869f 100644 GIT binary patch delta 561 zcmX^5iuvd(<_QjL%j*~zn2IJ^$*`Esh&Z#caIN^n2JX#r5(k)>E?8`SAkD(aA|$rL z9VD@_VYl$+0FU*Fg0DY*m)W|~Ex0VyN^q)~{=NN^7cNoREWb#OQBWeg>O*XO*5S?h z3%JeMd*35TJv{x;^wPGg34-|-KZc7Gxxu8A7+I#DJeD!Jah3Yy^QZYYzm3ah+`M$X zJCDEzDKU-X25Zjm7P@Da;+9!E`NDxY0=Iz4A?0lU-oJmYAlDXSt03 zrY^f=<`vKR93(jT!(J8^w&Rs7li$6!oZNP;fAfKTI&1==87rnRB|UoA)MmHr>Eft= zn-?s(#2+#Wbd-B3BVw?AzZDA5;+0MYgvYlyOV8PT1-&Ws~^_P7n zY>eWZykLpy=0nQ`83hw7f>W}?Qj3Z+^YhlcWne9sd~t>FmVWhX;WtJnXK5Tu({#oNoK*{frlj{c^4-A5^;Sa`aM QAm@aT;$Q#*ndUt|0o->3C;$Ke delta 524 zcmX^5iuvd(<_QjJhZGnXnD#P&!IDNG`!9rj!GeK-gB!$-m6@)+v2d;U#0KuoauNra znU>dWejv@l$ik?!{|QK9W5aIY%>f?k69s$D)hH_U9?-RKn%sCi(IkEU_#p?q@T&w%3vZ=+yRN{lS|nK3+*8&|1M zK7X2j^V_(5#?4FDyYmPX_|4(`xPvYD%xU>mOaYrXCSN!(N8t2jt9!FGw_Ln%HQzn^ z`mRM_!Rd?Ua39%j)yulgtx-dM^$C#RwOf$A|mrVZcE#Gu&$bcB$Y5J^zi=poUeLsU+(&-+{=cL;s8bN IU7v>s0sZ*s(f|Me diff --git a/platforms/android/AndroidManifest.xml b/platforms/android/AndroidManifest.xml index 859709a..3bda5dd 100644 --- a/platforms/android/AndroidManifest.xml +++ b/platforms/android/AndroidManifest.xml @@ -3,7 +3,7 @@ - + diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 0eb6077..0475c84 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -1,4 +1,6 @@ var breakAlertUp = false; +var breakReminderCount = 0; +var distractedReminderCount = 0; //Alert the user they have successfully set a custom ambient noise level function customVolumeLevelSet() { @@ -123,6 +125,7 @@ function checkDistractedReminder() { if (localStorage.getItem("score") > score) { if ((localStorage.getItem("score") - score) > 15) { returnToStudyAlert(); + distractedReminderCount++; if (cordova.plugins.backgroundMode.isActive()) { returnToStudyNotif(); } @@ -220,6 +223,7 @@ function checkBreakReminder() { localStorage.setItem("breakSuggestedTime", currentT); localStorage.setItem("timeSinceBreak", timeSinceBreak); timeResumed = new Date(); + breakReminderCount++; } } } diff --git a/platforms/android/assets/www/resources/js/backend.js b/platforms/android/assets/www/resources/js/backend.js index 3b15839..e73c071 100644 --- a/platforms/android/assets/www/resources/js/backend.js +++ b/platforms/android/assets/www/resources/js/backend.js @@ -20,7 +20,10 @@ function pushData() { accelIntervalCount: accelIntervalCount, accelNotStudingCount: accelNotStudying, appMessage: appMessage, - userNotes: getUserNotes() + userNotes: getUserNotes(), + distractedReminder: getDistractedBool() +" Count: " +distractedReminderCount, + breakReminder: getBreakNotifBool() +" Count: " +breakReminderCount + } ); } diff --git a/platforms/android/assets/www/resources/js/study.js b/platforms/android/assets/www/resources/js/study.js index 9095333..f451c00 100644 --- a/platforms/android/assets/www/resources/js/study.js +++ b/platforms/android/assets/www/resources/js/study.js @@ -239,7 +239,9 @@ function initialiseMonitoring() { micOff(); localStorage.removeItem("oldScore"); - + localStorage.removeItem("score"); + breakReminderCount = 0; + distractedReminderCount = 0; totalDurationPaused = 0; diff --git a/platforms/android/res/xml/config.xml b/platforms/android/res/xml/config.xml index f552c3f..efa31cd 100644 --- a/platforms/android/res/xml/config.xml +++ b/platforms/android/res/xml/config.xml @@ -43,6 +43,7 @@ + diff --git a/www/index.html b/www/index.html index 726eca9..c82a9dd 100644 --- a/www/index.html +++ b/www/index.html @@ -6,8 +6,7 @@ StudyWell Home - - + diff --git a/www/resources/js/alerts.js b/www/resources/js/alerts.js index 0eb6077..0475c84 100644 --- a/www/resources/js/alerts.js +++ b/www/resources/js/alerts.js @@ -1,4 +1,6 @@ var breakAlertUp = false; +var breakReminderCount = 0; +var distractedReminderCount = 0; //Alert the user they have successfully set a custom ambient noise level function customVolumeLevelSet() { @@ -123,6 +125,7 @@ function checkDistractedReminder() { if (localStorage.getItem("score") > score) { if ((localStorage.getItem("score") - score) > 15) { returnToStudyAlert(); + distractedReminderCount++; if (cordova.plugins.backgroundMode.isActive()) { returnToStudyNotif(); } @@ -220,6 +223,7 @@ function checkBreakReminder() { localStorage.setItem("breakSuggestedTime", currentT); localStorage.setItem("timeSinceBreak", timeSinceBreak); timeResumed = new Date(); + breakReminderCount++; } } } diff --git a/www/resources/js/backend.js b/www/resources/js/backend.js index 3b15839..e73c071 100644 --- a/www/resources/js/backend.js +++ b/www/resources/js/backend.js @@ -20,7 +20,10 @@ function pushData() { accelIntervalCount: accelIntervalCount, accelNotStudingCount: accelNotStudying, appMessage: appMessage, - userNotes: getUserNotes() + userNotes: getUserNotes(), + distractedReminder: getDistractedBool() +" Count: " +distractedReminderCount, + breakReminder: getBreakNotifBool() +" Count: " +breakReminderCount + } ); } diff --git a/www/resources/js/study.js b/www/resources/js/study.js index 9095333..f451c00 100644 --- a/www/resources/js/study.js +++ b/www/resources/js/study.js @@ -239,7 +239,9 @@ function initialiseMonitoring() { micOff(); localStorage.removeItem("oldScore"); - + localStorage.removeItem("score"); + breakReminderCount = 0; + distractedReminderCount = 0; totalDurationPaused = 0; From 8915a421d39b0e82229b937ef9044eefe64f0da1 Mon Sep 17 00:00:00 2001 From: Adam Don Date: Fri, 4 Mar 2016 20:24:37 +0000 Subject: [PATCH 18/20] minor ui changes --- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 46093 -> 46205 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 349468 -> 349468 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 20942 -> 20942 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 62789 -> 62789 bytes platforms/android/assets/www/index.html | 3 +-- .../assets/www/resources/js/reports.js | 2 +- www/resources/js/reports.js | 2 +- 8 files changed, 3 insertions(+), 4 deletions(-) diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index 68a7d044cdb42dad8f9d11dbcd72c267d571cc6a..50dd3a80244d419a6ecda82229bd2e94047e1775 100644 GIT binary patch literal 17 VcmZQBkvw$J`yw9~0~iRz001jR1GE4D literal 17 VcmZQBkvw$J`yw9~0~ql80{|;F1Ev4~ diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index ceac1ef8c11f8e2946b175d71ede8a2971fb9f63..461f46c7dc4264ef03821fb729a3247e260a9c6b 100644 GIT binary patch delta 1836 zcma)-e^AqP7{|YS*%+|thKxW?m-}G_QQDz#5E!RYDzd;y2g03tgwQpDQdty|xt5MG zw($sxCO?{}XJ%VpG|t331@w;xqZIeb=UsbzI(qu@8|P8 z&*%Bv*X*Jnx@c>JJcwdH=0%>L1n;w6;(s=8w#njn3eBc2XI4if$fD-c?bDddsOdtw zJ&jqXR4IAM<5ee|S=|9l=CXAQ!j}!?c%$&X#^0LU#w@0*GBC&o0;Ew02J8_-xO zH0m2(*!~$**OD8DCnK<#t%u<>2k>JN6sX5&n5b0|sq$M9lqaOs!F&rDO5BDZI&nk} zMI0dLMW9L6YM_Y<Lo8x|KgenSrQ+KY_Y~$-4?7E4c;lFoJJyxR1lIfoR8!B-CGq z=RbxItYosndkC(G?#%}ECxn5gLH(q@xd3i(c8K1C;K>}513F1V1e@x)#CIlOjg3qx zWC0p}gQ0A&aRASWVA?L#N6>8}bBb3Ya3(#Ptg9m<$u6S)$Jw5ENT?$X&#=|~RXWQF zr5x~d89K%bE#+{K6N+AfApK^(8-_U!lqsrxTa*!;JBWTz>8LN=QcwwMAd})%BXEY^ zc>?Ab^ZkPsI*EE;a8e>zjKtCL6sVuscVG`ZyOS&;nyv1~{_r+%8&&DP$q#!S4H|i^ zr8nO5fK!Jd%EPge7|cSGq7_* zpzp*bci96R>^6@wD|XWXK0r~|afhEGwK`baNSs6nd+l3HBU+}RQOWlkgfF7uc8R?N zdYkI~snTqdK3&?i7&bMlR`^PwI&uA_yK5Ft84{PluUo$KAbT28!$uN*;J zWJs*|6vw9sqqe4rzM5&2*!$)&Maga5*;9<{>wqUVoxTM&2Qe?Q5sa8yeylRp1C-27 zMCPg07gW|#aC*V0o2|E}=+0>0sntpYB*;M?^+jpdW`;93E?j;ejZv&UeDF0u+ Rq>*6Uk)pgl#ZdUge*jRC-pc?0 delta 1702 zcmZ{kdrVVz6vuBbw_JIM#ey<)1$wIjc3`ARoKA6_REt)S;CrJnV&?;aP>^Ll8lgrW zg_Z-2kBE=N2ND&yQNV}+U4{!ai%yNNutbT$Jrt9H1YwMGneFeAc>lRK-_P%Re&?Lu z`Q70j+SWtcgMAoEcx;Ou^VQ7zg7Ak8IhUq7EF368=Fo*QJ~<@7kGAFUMoz^sXTo-v z8glMP_~hkAjXZLwXUxnr;X6jJtKx6(_40NDNl*xa-1^Qlu-L{0Y2A*1RS5Ph$Zi5z z;U>3%Vh^I;>nvblf8h*5m!e)8lWBo#g({C8xB~SbzN`HO{wCK)g`)nGa)Sv<%E^u8 zix9-s7_y*U1ftId=8EVp51kKTsZZL@e>q77@w$TYS zBH&9S@Y-4#2H94k3h4mqlTTSAz~4@8!CXYJbs#(!x~xPyCVz?g2}|!%_|Z-#>(`GU zAuRGS7!DBzCKYvsed#&)Q?x_qF$AqiX?f5}8iIvXzmLB16>M~nDfwv7ptZ1eaEJiY zfZ$5e;5Tr`LFN?4A&^H!EUBy{BPkxCzUEPIKg3s(hDf2hwR>-wAxi{iWuqe{KZS?$ zqENIJ!RwKO3!zKoK$)VZIDTFU4Tp(-P)Vr2+TGd$1|XASN)X6Di~SA4i#K})&36#> zUDLXUprV*KI!1}QvAiH1W>=9#gbLN=Kfh~)e~VQ~?#T~ai-vb|ll88+(GQ$D45199 ziY$r|^C4C<>}<;mU#~ewQIb^8jq&v#T}AC$bpHTkmJkUjGEkR1m6w1|HCYM08G(+O zHU$zyU_u#!!Mk=Ps@|3vh{+ft(Me!}&8*8F-QlsUsZm-Pt;nDZ=E z$?K2M5;vfzKX8XUrm+#yj}j;0BV2p>h@_Tx9_6GSgWr5KtlGct0=R0bJ*m<{le*O1 zCNQ5=>D?tzt+@W!iG8N=BhojK|KK#3^UK~mR@-?0I$=aU`qVw^(3eOX`4=bEvI8HF z$t!mO>hzQ93FG6vSC}&|pYQAFjM2N=5{qt(#S2=G>#2E(ZTPa^Z@M|&*Oq3`Dz-nc zEonb4*)dg{HqIxE1+!YOc>#`kVqO%#W55p?J6jS)0muJUpFw-3Nx2EBbo#`(*WnAE IgTuV_Kbh^ussI20 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin index 135c9cac13ec924dc377760b749c0d22202491a9..bee04ae6afc88d26b694e461dd76ed68342f9d9b 100644 GIT binary patch delta 1680 zcmb7Edr(wW9KL(cxhxDIXN$)!3%IaAHOejzElfZ(Qy%I-_+a8CmO|R75IB$+2;%S@ zb~)r_kWyTjz)9s{9ZW<(QILm=W-w#Spq2@^B%)!0*zR6ZN4J{(xM#lk&hLD`*EhHP zs8#tT#zs44TO`Eb7e0o^6V8A5NA6Xp_~ zVwWt?lb~oht`$n~9icl?Hug81-}B(G{sM*_!u}!&!ZpQ{H(Nex<|Kw=aJa}3D@7}j zs&C=ynKv`nax%*E4Qi2qXCb{Gy*O{sgd-L8c)(VIkyvD5uDWjZYyC8*(yhea;zc-D zY=fE|o#KDExnm=D(WAnpVhL7@1F?r)KbF`laEHARjSM{@JZY&(Dg+3cJ7-JxO2A#{m*=qh!+na4S&T+~>3A?lYFtTT62NATVSSmqD5oOhyOK0;q>Ch}Jl!o9^sToW> znN*DxQcGCYzrI}$j#yUo*R@93)TzD9vqAz$NC0o&6(W-XOCDOI8cLa1eM?c{vPvVV z&i#%}Pyk!4sD=w+26wGbQmm~aVJ~X(yhCUs9|kM z!)%KJ#2W_`gf5vLKJ3P}D!>*o5Ktr5r=8}Oyd81#4Z(w?vz_~O)i3$bs)O|iqwQF~ zZn~3o#vnmxD6aicSQV@2p-Tjt`u(=$Mf!YPal?#K+dW><%oa8AoY*C5+7n*LnYJN? zy>vQHz+W7`t;@oniRCw+iJj^G^u@5xT_dtsZP+d{s;1L~MwD*i)2uR-9u=XNAL^=< z$-Lay@fn^MtG>-+*s=XkOa{k*AD{S~1Q(bCCIFFvN&1upNlbyY#;*yeru@O$6JN)l z-ac;GTbb*djblGp#%}bZJ-@#SXg-m@$0XCl&ldFX1jyHN<>ZdX2hp*R)N3QD2cMAG zWwehG*|{CYLB>{UvUDlgdj{@;>t$*`C#`|XVqFkivl{dusRCTP=<-Yj4B#84si~>Y5FD~QdW$VJn z)Qf6hAdFc&Ob>57CMj^ zIsC`*np?xE+EgX!3xY;8Npyt^-AJ@MlWk&P9WUk#=8?PBOq$*p^}v87`WoOSJ}G*O zIcEf23QL^H<`j4+kgxk$*HOM-Dw&-J7SRmJXoLQ|XAL*<|3}(k0iSK%ZqYZXAycie O{kcj#B&#$~9rqV8eQmq| delta 1528 zcma)+dr(wW9LMiH=d3LF*uw_x;;zdILW;l&WRl9uQ6ws4N0iaQFvENe8UpL8DaL9+ zsO);E!zhJV4J8JysmGa21vEgGM~vvuq%N9-inwYs3fj=!yFO^@kIu}!^PSJ{cYf#b z{oPx3(7WuQw^@}3TE5~q?w0Uy9Gp@qyl;yd*eo2!%S8>%M_%aAKtZo{@ttWL2YN+~ zMpkf~|8W;@s(Y?c?PHFcaNfyHHV@k~eY3yQ;ndc>{R*;QIfe8pmAEL=t7J@-4=)x0 z&Hm((GIC;Z{gYs0Y*MfY(fsnEr^B3fY{bF8rhei|)|*JIkCqsHd}OkH-SBZ?kjP=! z9#Y_w{DZ^CohP0u1wNwT2OL=jVSmCvx>TZ7jh9WR>CWB|Fx|y^&XHu*>oRk6^eKJU zIg!EQ*<_naOHQbixZ%lXOEVrdwu%AJRzw^4miBO#j0!OWyWI{xRI+p(+9zc*kHViNtnndelCkC{xQ?fS#_ZlkbYcuEA3z4c zG(|`)r9vX+2Phu}ve}socnzX8_u}JdMJG&W_MeafvFVec6yd;y8!s*%{Dxaq{m$>~ zP((S+GQ%jObw8QHhz{N#`_C(lwgLID+iB>-muOfIA56CeK{YGx1KAR4G(pV5=ELI> zwoU><-07&pNY3Kwp)W7#Ec1<@K`X8cZrHyT(n29zh}eOZu+CrfNSV(C{@I^%E4wqa zHRiWD`&*oMIe)#$_S~*bIDh%X72%no)$u(M4`z6cR=?Pf$2Hl}W?O{tuUN{;tDu6X zrD}kkCrYGS+d-!EYVnVob<3*8IDK0Yf|J@8)>fL*zRWfMvOp6hpXXd`cEPcxMd6tl z>*st7bQfO^aIyyb+RL=44Se+9F0tx8aAzbH4*UO%sENxtKHP|$J8-Io73o1e|8F~9 zw4(e|(|6SKeK?mnY_Lc|wGQaXKFERwH&48A^xQwJMD_Lj3}&Y&Ny6`E%Z;e~4c6L&gs3I_eOJ3jNHXZyP-Wxa?Lk^TE8FI=LsS$>fmqu_>^*_*HM3L5RZ z(BM-zbN^I?)aL&ygBd4Z$YNpnI(eGJ#-~2W%pKQZ~nh$kx6(pG3IK=AavkSSK4?U{P5SYnOP&n1O-&I}pDIVdhBtlg&L( zHqO5zn$4W|WKF=H$%>5%n;Tx9WEM=yTNJ$Q>_&%#66v(Rl|nWMsm=Z`e=&0~0Kq}_ G%ZmYxkfQPc delta 321 zcmX^5iuvd(<_-T>ZeF@3m{Cw7yXr%1eb(X4`3tzs*?ZsbpS*C1%4YdRa*ToxPd_xh zwC!qwVE)CA;UYzDFexQQmgy&tWlU~dr9S!mY5vV`Bk(~=Oyju0n)ADb z?wO^yW!6r StudyWell Home - - + diff --git a/platforms/android/assets/www/resources/js/reports.js b/platforms/android/assets/www/resources/js/reports.js index b79e3a2..9ebc1a0 100644 --- a/platforms/android/assets/www/resources/js/reports.js +++ b/platforms/android/assets/www/resources/js/reports.js @@ -34,7 +34,7 @@ function drawData(date, time, duration, score, appMessage, userNotes, sessionID) var sessionTable = "" sessionTable += "" sessionTable += "" - sessionTable += "" + sessionTable += "" sessionTable += "" sessionTable += "" sessionTable += "
Date: " +date + "
Start Time: " +time + "
Duration: " +duration + "
Score: " +score + "
Score: " +score + " / 100
App Notes: " +appMessage + "
User Notes: " +userNotes + "
Session ID: " +sessionID + "


" diff --git a/www/resources/js/reports.js b/www/resources/js/reports.js index b79e3a2..9ebc1a0 100644 --- a/www/resources/js/reports.js +++ b/www/resources/js/reports.js @@ -34,7 +34,7 @@ function drawData(date, time, duration, score, appMessage, userNotes, sessionID) var sessionTable = "" sessionTable += "" sessionTable += "" - sessionTable += "" + sessionTable += "" sessionTable += "" sessionTable += "" sessionTable += "
Date: " +date + "
Start Time: " +time + "
Duration: " +duration + "
Score: " +score + "
Score: " +score + " / 100
App Notes: " +appMessage + "
User Notes: " +userNotes + "
Session ID: " +sessionID + "


" From 5f981d8edc6a1bcc921fa572f2d8f4ecffb3f342 Mon Sep 17 00:00:00 2001 From: Adam D Date: Fri, 11 Mar 2016 14:36:17 +0000 Subject: [PATCH 19/20] id's and whatnot --- config.xml | 1 + .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 46205 -> 84036 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 349468 -> 696388 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 20942 -> 20942 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 62789 -> 62789 bytes platforms/android/android.json | 38 +- .../android/assets/www/cdvtests/index.html | 63 + .../assets/www/cdvtests/jasmine-2.2.0/boot.js | 121 + .../www/cdvtests/jasmine-2.2.0/console.js | 190 + .../cdvtests/jasmine-2.2.0/jasmine-html.js | 416 + .../www/cdvtests/jasmine-2.2.0/jasmine.css | 62 + .../www/cdvtests/jasmine-2.2.0/jasmine.js | 3048 ++++ .../jasmine-2.2.0/jasmine_favicon.png | Bin 0 -> 1486 bytes .../assets/www/cdvtests/jasmine-medic.js | 123 + .../assets/www/cdvtests/main-bootstrap.js | 26 + .../android/assets/www/cdvtests/main.css | 148 + .../www/cdvtests/topcoat-0.7.5/.gitignore | 6 + .../www/cdvtests/topcoat-0.7.5/Gruntfile.js | 277 + .../assets/www/cdvtests/topcoat-0.7.5/LICENSE | 203 + .../assets/www/cdvtests/topcoat-0.7.5/NOTICE | 193 + .../www/cdvtests/topcoat-0.7.5/README.md | 89 + .../cdvtests/topcoat-0.7.5/contributors.txt | 7 + .../css/topcoat-desktop-dark.css | 3450 ++++ .../css/topcoat-desktop-dark.min.css | 1 + .../css/topcoat-desktop-light.css | 3450 ++++ .../css/topcoat-desktop-light.min.css | 1 + .../topcoat-0.7.5/css/topcoat-mobile-dark.css | 3700 ++++ .../css/topcoat-mobile-dark.min.css | 1 + .../css/topcoat-mobile-light.css | 3700 ++++ .../css/topcoat-mobile-light.min.css | 1 + .../topcoat-0.7.5/demo/css/brackets.css | 69 + .../cdvtests/topcoat-0.7.5/demo/css/main.css | 508 + .../cdvtests/topcoat-0.7.5/demo/css/theme.css | 28 + .../fonts/sourcecodepro-regular-webfont.eot | Bin 0 -> 23949 bytes .../fonts/sourcecodepro-regular-webfont.svg | 242 + .../fonts/sourcecodepro-regular-webfont.ttf | Bin 0 -> 52660 bytes .../fonts/sourcecodepro-regular-webfont.woff | Bin 0 -> 27068 bytes .../fonts/sourcesanspro-light-webfont.eot | Bin 0 -> 23716 bytes .../fonts/sourcesanspro-light-webfont.svg | 243 + .../fonts/sourcesanspro-light-webfont.ttf | Bin 0 -> 51876 bytes .../fonts/sourcesanspro-light-webfont.woff | Bin 0 -> 26716 bytes .../fonts/sourcesanspro-regular-webfont.eot | Bin 0 -> 23970 bytes .../fonts/sourcesanspro-regular-webfont.svg | 243 + .../fonts/sourcesanspro-regular-webfont.ttf | Bin 0 -> 52456 bytes .../fonts/sourcesanspro-regular-webfont.woff | Bin 0 -> 27076 bytes .../fonts/sourcesanspro-semibold-webfont.eot | Bin 0 -> 23974 bytes .../fonts/sourcesanspro-semibold-webfont.svg | 243 + .../fonts/sourcesanspro-semibold-webfont.ttf | Bin 0 -> 51960 bytes .../fonts/sourcesanspro-semibold-webfont.woff | Bin 0 -> 27048 bytes .../topcoat-0.7.5/demo/fonts/stylesheet.css | 57 + .../cdvtests/topcoat-0.7.5/demo/index.html | 3167 ++++ .../cdvtests/topcoat-0.7.5/demo/js/main.js | 44 + .../demo/js/rainbow-custom.min.js | 11 + .../demo/js/rainbow.linenumbers.min.js | 2 + .../demo/topcoat-desktop-light.html | 3167 ++++ .../demo/topcoat-mobile-dark.html | 3417 ++++ .../demo/topcoat-mobile-light.html | 3417 ++++ .../topcoat-0.7.5/dev/build/styleguide.css | 495 + .../topcoat-0.7.5/dev/build/styleguide.js | 10 + .../dev/tasks/checkchromiumsrc.js | 13 + .../dev/tasks/telemetrygentest.js | 98 + .../dev/tasks/telemetrysubmit.js | 101 + .../dev/test/perf/telemetry/README.md | 79 + .../dev/test/perf/telemetry/bin/runAll.py | 200 + .../dev/test/perf/telemetry/bin/runAll.sh | 105 + .../dev/test/perf/telemetry/lib/csvToJSON.js | 56 + .../perf/telemetry/lib/extractFileName.js | 12 + .../dev/test/perf/telemetry/lib/settings.js | 31 + .../dev/test/perf/telemetry/lib/submitData.js | 61 + .../page_sets/topcoat/topcoat_telemetry.jade | 17 + .../cdvtests/topcoat-0.7.5/font/LICENSE.txt | 93 + .../font/SourceCodePro-Black.otf | Bin 0 -> 88472 bytes .../topcoat-0.7.5/font/SourceCodePro-Bold.otf | Bin 0 -> 92248 bytes .../font/SourceCodePro-ExtraLight.otf | Bin 0 -> 84636 bytes .../font/SourceCodePro-Light.otf | Bin 0 -> 88152 bytes .../font/SourceCodePro-Regular.otf | Bin 0 -> 89600 bytes .../font/SourceCodePro-Semibold.otf | Bin 0 -> 89576 bytes .../font/SourceSansPro-Black.otf | Bin 0 -> 98472 bytes .../font/SourceSansPro-BlackIt.otf | Bin 0 -> 96536 bytes .../topcoat-0.7.5/font/SourceSansPro-Bold.otf | Bin 0 -> 104072 bytes .../font/SourceSansPro-BoldIt.otf | Bin 0 -> 101848 bytes .../font/SourceSansPro-ExtraLight.otf | Bin 0 -> 94560 bytes .../font/SourceSansPro-ExtraLightIt.otf | Bin 0 -> 92880 bytes .../topcoat-0.7.5/font/SourceSansPro-It.otf | Bin 0 -> 100556 bytes .../font/SourceSansPro-Light.otf | Bin 0 -> 98972 bytes .../font/SourceSansPro-LightIt.otf | Bin 0 -> 97352 bytes .../font/SourceSansPro-Regular.otf | Bin 0 -> 101820 bytes .../font/SourceSansPro-Semibold.otf | Bin 0 -> 101772 bytes .../font/SourceSansPro-SemiboldIt.otf | Bin 0 -> 100000 bytes .../www/cdvtests/topcoat-0.7.5/img/avatar.png | Bin 0 -> 11926 bytes .../cdvtests/topcoat-0.7.5/img/bg_dark.png | Bin 0 -> 85839 bytes .../cdvtests/topcoat-0.7.5/img/breadcrumb.png | Bin 0 -> 202 bytes .../topcoat-0.7.5/img/checkbox_checked.png | Bin 0 -> 1424 bytes .../img/checkbox_checked_dark.png | Bin 0 -> 1437 bytes .../topcoat-0.7.5/img/checkbox_unchecked.png | Bin 0 -> 1216 bytes .../img/checkbox_unchecked_dark.png | Bin 0 -> 1199 bytes .../topcoat-0.7.5/img/checkmark_bw.svg | 15 + .../topcoat-0.7.5/img/dark-combo-box-bg.png | Bin 0 -> 1023 bytes .../topcoat-0.7.5/img/dark-combo-box-bg2x.png | Bin 0 -> 1124 bytes .../cdvtests/topcoat-0.7.5/img/dark-grips.png | Bin 0 -> 220 bytes .../topcoat-0.7.5/img/dark-sprites2x.png | Bin 0 -> 5066 bytes .../topcoat-0.7.5/img/dialog-zone-bg.png | Bin 0 -> 600868 bytes .../img/drop-down-triangle-dark.png | Bin 0 -> 1091 bytes .../topcoat-0.7.5/img/drop-down-triangle.png | Bin 0 -> 2892 bytes .../topcoat-0.7.5/img/hamburger_bw.svg | 1912 ++ .../topcoat-0.7.5/img/hamburger_dark.svg | 1935 ++ .../topcoat-0.7.5/img/hamburger_light.svg | 1936 ++ .../topcoat-0.7.5/img/light-combo-box-bg.png | Bin 0 -> 1023 bytes .../img/light-combo-box-bg2x.png | Bin 0 -> 1124 bytes .../topcoat-0.7.5/img/light-grips.png | Bin 0 -> 248 bytes .../topcoat-0.7.5/img/light-sprites2x.png | Bin 0 -> 5351 bytes .../img/pop-up-triangle-dark.png | Bin 0 -> 1153 bytes .../topcoat-0.7.5/img/pop-up-triangle.png | Bin 0 -> 2958 bytes .../cdvtests/topcoat-0.7.5/img/search-bg.png | Bin 0 -> 1390 bytes .../topcoat-0.7.5/img/search-bg2x.png | Bin 0 -> 1800 bytes .../www/cdvtests/topcoat-0.7.5/img/search.svg | 11 + .../cdvtests/topcoat-0.7.5/img/search_bw.svg | 16 + .../topcoat-0.7.5/img/search_dark.svg | 16 + .../topcoat-0.7.5/img/search_light.svg | 11 + .../cdvtests/topcoat-0.7.5/img/spinner.png | Bin 0 -> 2707 bytes .../cdvtests/topcoat-0.7.5/img/spinner2x.png | Bin 0 -> 5201 bytes .../www/cdvtests/topcoat-0.7.5/package.json | 85 + .../android/assets/www/cordova_plugins.js | 29 +- platforms/android/assets/www/help.html | 12 +- platforms/android/assets/www/index.html | 38 +- .../tests.js | 367 + .../cordova-plugin-device-tests/tests.js | 116 + .../www/jasmine_helpers.js | 86 + .../cordova-plugin-test-framework/www/main.js | 449 + .../www/medic.js | 66 + .../www/tests.js | 138 + platforms/android/assets/www/reports.html | 2 +- .../android/assets/www/resources/js/alerts.js | 18 +- .../android/assets/www/resources/js/mic.js | 2 +- .../android/assets/www/resources/js/motion.js | 2 +- .../android/assets/www/resources/js/study.js | 14 +- platforms/android/assets/www/schedule.html | 2 +- platforms/android/assets/www/settings.html | 2 +- .../android/platform_www/cdvtests/index.html | 63 + .../cdvtests/jasmine-2.2.0/boot.js | 121 + .../cdvtests/jasmine-2.2.0/console.js | 190 + .../cdvtests/jasmine-2.2.0/jasmine-html.js | 416 + .../cdvtests/jasmine-2.2.0/jasmine.css | 62 + .../cdvtests/jasmine-2.2.0/jasmine.js | 3048 ++++ .../jasmine-2.2.0/jasmine_favicon.png | Bin 0 -> 1486 bytes .../platform_www/cdvtests/jasmine-medic.js | 123 + .../platform_www/cdvtests/main-bootstrap.js | 26 + .../android/platform_www/cdvtests/main.css | 148 + .../cdvtests/topcoat-0.7.5/.gitignore | 6 + .../cdvtests/topcoat-0.7.5/Gruntfile.js | 277 + .../cdvtests/topcoat-0.7.5/LICENSE | 203 + .../cdvtests/topcoat-0.7.5/NOTICE | 193 + .../cdvtests/topcoat-0.7.5/README.md | 89 + .../cdvtests/topcoat-0.7.5/contributors.txt | 7 + .../css/topcoat-desktop-dark.css | 3450 ++++ .../css/topcoat-desktop-dark.min.css | 1 + .../css/topcoat-desktop-light.css | 3450 ++++ .../css/topcoat-desktop-light.min.css | 1 + .../topcoat-0.7.5/css/topcoat-mobile-dark.css | 3700 ++++ .../css/topcoat-mobile-dark.min.css | 1 + .../css/topcoat-mobile-light.css | 3700 ++++ .../css/topcoat-mobile-light.min.css | 1 + .../topcoat-0.7.5/demo/css/brackets.css | 69 + .../cdvtests/topcoat-0.7.5/demo/css/main.css | 508 + .../cdvtests/topcoat-0.7.5/demo/css/theme.css | 28 + .../fonts/sourcecodepro-regular-webfont.eot | Bin 0 -> 23949 bytes .../fonts/sourcecodepro-regular-webfont.svg | 242 + .../fonts/sourcecodepro-regular-webfont.ttf | Bin 0 -> 52660 bytes .../fonts/sourcecodepro-regular-webfont.woff | Bin 0 -> 27068 bytes .../fonts/sourcesanspro-light-webfont.eot | Bin 0 -> 23716 bytes .../fonts/sourcesanspro-light-webfont.svg | 243 + .../fonts/sourcesanspro-light-webfont.ttf | Bin 0 -> 51876 bytes .../fonts/sourcesanspro-light-webfont.woff | Bin 0 -> 26716 bytes .../fonts/sourcesanspro-regular-webfont.eot | Bin 0 -> 23970 bytes .../fonts/sourcesanspro-regular-webfont.svg | 243 + .../fonts/sourcesanspro-regular-webfont.ttf | Bin 0 -> 52456 bytes .../fonts/sourcesanspro-regular-webfont.woff | Bin 0 -> 27076 bytes .../fonts/sourcesanspro-semibold-webfont.eot | Bin 0 -> 23974 bytes .../fonts/sourcesanspro-semibold-webfont.svg | 243 + .../fonts/sourcesanspro-semibold-webfont.ttf | Bin 0 -> 51960 bytes .../fonts/sourcesanspro-semibold-webfont.woff | Bin 0 -> 27048 bytes .../topcoat-0.7.5/demo/fonts/stylesheet.css | 57 + .../cdvtests/topcoat-0.7.5/demo/index.html | 3167 ++++ .../cdvtests/topcoat-0.7.5/demo/js/main.js | 44 + .../demo/js/rainbow-custom.min.js | 11 + .../demo/js/rainbow.linenumbers.min.js | 2 + .../demo/topcoat-desktop-light.html | 3167 ++++ .../demo/topcoat-mobile-dark.html | 3417 ++++ .../demo/topcoat-mobile-light.html | 3417 ++++ .../topcoat-0.7.5/dev/build/styleguide.css | 495 + .../topcoat-0.7.5/dev/build/styleguide.js | 10 + .../dev/tasks/checkchromiumsrc.js | 13 + .../dev/tasks/telemetrygentest.js | 98 + .../dev/tasks/telemetrysubmit.js | 101 + .../dev/test/perf/telemetry/README.md | 79 + .../dev/test/perf/telemetry/bin/runAll.py | 200 + .../dev/test/perf/telemetry/bin/runAll.sh | 105 + .../dev/test/perf/telemetry/lib/csvToJSON.js | 56 + .../perf/telemetry/lib/extractFileName.js | 12 + .../dev/test/perf/telemetry/lib/settings.js | 31 + .../dev/test/perf/telemetry/lib/submitData.js | 61 + .../page_sets/topcoat/topcoat_telemetry.jade | 17 + .../cdvtests/topcoat-0.7.5/font/LICENSE.txt | 93 + .../font/SourceCodePro-Black.otf | Bin 0 -> 88472 bytes .../topcoat-0.7.5/font/SourceCodePro-Bold.otf | Bin 0 -> 92248 bytes .../font/SourceCodePro-ExtraLight.otf | Bin 0 -> 84636 bytes .../font/SourceCodePro-Light.otf | Bin 0 -> 88152 bytes .../font/SourceCodePro-Regular.otf | Bin 0 -> 89600 bytes .../font/SourceCodePro-Semibold.otf | Bin 0 -> 89576 bytes .../font/SourceSansPro-Black.otf | Bin 0 -> 98472 bytes .../font/SourceSansPro-BlackIt.otf | Bin 0 -> 96536 bytes .../topcoat-0.7.5/font/SourceSansPro-Bold.otf | Bin 0 -> 104072 bytes .../font/SourceSansPro-BoldIt.otf | Bin 0 -> 101848 bytes .../font/SourceSansPro-ExtraLight.otf | Bin 0 -> 94560 bytes .../font/SourceSansPro-ExtraLightIt.otf | Bin 0 -> 92880 bytes .../topcoat-0.7.5/font/SourceSansPro-It.otf | Bin 0 -> 100556 bytes .../font/SourceSansPro-Light.otf | Bin 0 -> 98972 bytes .../font/SourceSansPro-LightIt.otf | Bin 0 -> 97352 bytes .../font/SourceSansPro-Regular.otf | Bin 0 -> 101820 bytes .../font/SourceSansPro-Semibold.otf | Bin 0 -> 101772 bytes .../font/SourceSansPro-SemiboldIt.otf | Bin 0 -> 100000 bytes .../cdvtests/topcoat-0.7.5/img/avatar.png | Bin 0 -> 11926 bytes .../cdvtests/topcoat-0.7.5/img/bg_dark.png | Bin 0 -> 85839 bytes .../cdvtests/topcoat-0.7.5/img/breadcrumb.png | Bin 0 -> 202 bytes .../topcoat-0.7.5/img/checkbox_checked.png | Bin 0 -> 1424 bytes .../img/checkbox_checked_dark.png | Bin 0 -> 1437 bytes .../topcoat-0.7.5/img/checkbox_unchecked.png | Bin 0 -> 1216 bytes .../img/checkbox_unchecked_dark.png | Bin 0 -> 1199 bytes .../topcoat-0.7.5/img/checkmark_bw.svg | 15 + .../topcoat-0.7.5/img/dark-combo-box-bg.png | Bin 0 -> 1023 bytes .../topcoat-0.7.5/img/dark-combo-box-bg2x.png | Bin 0 -> 1124 bytes .../cdvtests/topcoat-0.7.5/img/dark-grips.png | Bin 0 -> 220 bytes .../topcoat-0.7.5/img/dark-sprites2x.png | Bin 0 -> 5066 bytes .../topcoat-0.7.5/img/dialog-zone-bg.png | Bin 0 -> 600868 bytes .../img/drop-down-triangle-dark.png | Bin 0 -> 1091 bytes .../topcoat-0.7.5/img/drop-down-triangle.png | Bin 0 -> 2892 bytes .../topcoat-0.7.5/img/hamburger_bw.svg | 1912 ++ .../topcoat-0.7.5/img/hamburger_dark.svg | 1935 ++ .../topcoat-0.7.5/img/hamburger_light.svg | 1936 ++ .../topcoat-0.7.5/img/light-combo-box-bg.png | Bin 0 -> 1023 bytes .../img/light-combo-box-bg2x.png | Bin 0 -> 1124 bytes .../topcoat-0.7.5/img/light-grips.png | Bin 0 -> 248 bytes .../topcoat-0.7.5/img/light-sprites2x.png | Bin 0 -> 5351 bytes .../img/pop-up-triangle-dark.png | Bin 0 -> 1153 bytes .../topcoat-0.7.5/img/pop-up-triangle.png | Bin 0 -> 2958 bytes .../cdvtests/topcoat-0.7.5/img/search-bg.png | Bin 0 -> 1390 bytes .../topcoat-0.7.5/img/search-bg2x.png | Bin 0 -> 1800 bytes .../cdvtests/topcoat-0.7.5/img/search.svg | 11 + .../cdvtests/topcoat-0.7.5/img/search_bw.svg | 16 + .../topcoat-0.7.5/img/search_dark.svg | 16 + .../topcoat-0.7.5/img/search_light.svg | 11 + .../cdvtests/topcoat-0.7.5/img/spinner.png | Bin 0 -> 2707 bytes .../cdvtests/topcoat-0.7.5/img/spinner2x.png | Bin 0 -> 5201 bytes .../cdvtests/topcoat-0.7.5/package.json | 85 + .../android/platform_www/cordova_plugins.js | 29 +- .../tests.js | 367 + .../cordova-plugin-device-tests/tests.js | 116 + .../www/jasmine_helpers.js | 86 + .../cordova-plugin-test-framework/www/main.js | 449 + .../www/medic.js | 66 + .../www/tests.js | 138 + plugins/android.json | 9 + .../plugin.xml | 29 + .../tests.js | 364 + .../cordova-plugin-device-tests/plugin.xml | 31 + plugins/cordova-plugin-device-tests/tests.js | 113 + plugins/cordova-plugin-test-framework/LICENSE | 191 + plugins/cordova-plugin-test-framework/NOTICE | 199 + .../cordova-plugin-test-framework/README.md | 145 + .../RELEASENOTES.md | 45 + .../package.json | 27 + .../cordova-plugin-test-framework/plugin.xml | 40 + .../www/assets/index.html | 63 + .../www/assets/jasmine-2.2.0/boot.js | 121 + .../www/assets/jasmine-2.2.0/console.js | 190 + .../www/assets/jasmine-2.2.0/jasmine-html.js | 416 + .../www/assets/jasmine-2.2.0/jasmine.css | 62 + .../www/assets/jasmine-2.2.0/jasmine.js | 3048 ++++ .../assets/jasmine-2.2.0/jasmine_favicon.png | Bin 0 -> 1486 bytes .../www/assets/jasmine-medic.js | 123 + .../www/assets/main-bootstrap.js | 26 + .../www/assets/main.css | 148 + .../www/assets/topcoat-0.7.5/.gitignore | 6 + .../www/assets/topcoat-0.7.5/Gruntfile.js | 277 + .../www/assets/topcoat-0.7.5/LICENSE | 203 + .../www/assets/topcoat-0.7.5/NOTICE | 193 + .../www/assets/topcoat-0.7.5/README.md | 89 + .../www/assets/topcoat-0.7.5/contributors.txt | 7 + .../css/topcoat-desktop-dark.css | 3450 ++++ .../css/topcoat-desktop-dark.min.css | 1 + .../css/topcoat-desktop-light.css | 3450 ++++ .../css/topcoat-desktop-light.min.css | 1 + .../topcoat-0.7.5/css/topcoat-mobile-dark.css | 3700 ++++ .../css/topcoat-mobile-dark.min.css | 1 + .../css/topcoat-mobile-light.css | 3700 ++++ .../css/topcoat-mobile-light.min.css | 1 + .../topcoat-0.7.5/demo/css/brackets.css | 69 + .../assets/topcoat-0.7.5/demo/css/main.css | 508 + .../assets/topcoat-0.7.5/demo/css/theme.css | 28 + .../fonts/sourcecodepro-regular-webfont.eot | Bin 0 -> 23949 bytes .../fonts/sourcecodepro-regular-webfont.svg | 242 + .../fonts/sourcecodepro-regular-webfont.ttf | Bin 0 -> 52660 bytes .../fonts/sourcecodepro-regular-webfont.woff | Bin 0 -> 27068 bytes .../fonts/sourcesanspro-light-webfont.eot | Bin 0 -> 23716 bytes .../fonts/sourcesanspro-light-webfont.svg | 243 + .../fonts/sourcesanspro-light-webfont.ttf | Bin 0 -> 51876 bytes .../fonts/sourcesanspro-light-webfont.woff | Bin 0 -> 26716 bytes .../fonts/sourcesanspro-regular-webfont.eot | Bin 0 -> 23970 bytes .../fonts/sourcesanspro-regular-webfont.svg | 243 + .../fonts/sourcesanspro-regular-webfont.ttf | Bin 0 -> 52456 bytes .../fonts/sourcesanspro-regular-webfont.woff | Bin 0 -> 27076 bytes .../fonts/sourcesanspro-semibold-webfont.eot | Bin 0 -> 23974 bytes .../fonts/sourcesanspro-semibold-webfont.svg | 243 + .../fonts/sourcesanspro-semibold-webfont.ttf | Bin 0 -> 51960 bytes .../fonts/sourcesanspro-semibold-webfont.woff | Bin 0 -> 27048 bytes .../topcoat-0.7.5/demo/fonts/stylesheet.css | 57 + .../www/assets/topcoat-0.7.5/demo/index.html | 3167 ++++ .../www/assets/topcoat-0.7.5/demo/js/main.js | 44 + .../demo/js/rainbow-custom.min.js | 11 + .../demo/js/rainbow.linenumbers.min.js | 2 + .../demo/topcoat-desktop-light.html | 3167 ++++ .../demo/topcoat-mobile-dark.html | 3417 ++++ .../demo/topcoat-mobile-light.html | 3417 ++++ .../topcoat-0.7.5/dev/build/styleguide.css | 495 + .../topcoat-0.7.5/dev/build/styleguide.js | 10 + .../dev/tasks/checkchromiumsrc.js | 13 + .../dev/tasks/telemetrygentest.js | 98 + .../dev/tasks/telemetrysubmit.js | 101 + .../dev/test/perf/telemetry/README.md | 79 + .../dev/test/perf/telemetry/bin/runAll.py | 200 + .../dev/test/perf/telemetry/bin/runAll.sh | 105 + .../dev/test/perf/telemetry/lib/csvToJSON.js | 56 + .../perf/telemetry/lib/extractFileName.js | 12 + .../dev/test/perf/telemetry/lib/settings.js | 31 + .../dev/test/perf/telemetry/lib/submitData.js | 61 + .../page_sets/topcoat/topcoat_telemetry.jade | 17 + .../www/assets/topcoat-0.7.5/font/LICENSE.txt | 93 + .../font/SourceCodePro-Black.otf | Bin 0 -> 88472 bytes .../topcoat-0.7.5/font/SourceCodePro-Bold.otf | Bin 0 -> 92248 bytes .../font/SourceCodePro-ExtraLight.otf | Bin 0 -> 84636 bytes .../font/SourceCodePro-Light.otf | Bin 0 -> 88152 bytes .../font/SourceCodePro-Regular.otf | Bin 0 -> 89600 bytes .../font/SourceCodePro-Semibold.otf | Bin 0 -> 89576 bytes .../font/SourceSansPro-Black.otf | Bin 0 -> 98472 bytes .../font/SourceSansPro-BlackIt.otf | Bin 0 -> 96536 bytes .../topcoat-0.7.5/font/SourceSansPro-Bold.otf | Bin 0 -> 104072 bytes .../font/SourceSansPro-BoldIt.otf | Bin 0 -> 101848 bytes .../font/SourceSansPro-ExtraLight.otf | Bin 0 -> 94560 bytes .../font/SourceSansPro-ExtraLightIt.otf | Bin 0 -> 92880 bytes .../topcoat-0.7.5/font/SourceSansPro-It.otf | Bin 0 -> 100556 bytes .../font/SourceSansPro-Light.otf | Bin 0 -> 98972 bytes .../font/SourceSansPro-LightIt.otf | Bin 0 -> 97352 bytes .../font/SourceSansPro-Regular.otf | Bin 0 -> 101820 bytes .../font/SourceSansPro-Semibold.otf | Bin 0 -> 101772 bytes .../font/SourceSansPro-SemiboldIt.otf | Bin 0 -> 100000 bytes .../www/assets/topcoat-0.7.5/img/avatar.png | Bin 0 -> 11926 bytes .../www/assets/topcoat-0.7.5/img/bg_dark.png | Bin 0 -> 85839 bytes .../assets/topcoat-0.7.5/img/breadcrumb.png | Bin 0 -> 202 bytes .../topcoat-0.7.5/img/checkbox_checked.png | Bin 0 -> 1424 bytes .../img/checkbox_checked_dark.png | Bin 0 -> 1437 bytes .../topcoat-0.7.5/img/checkbox_unchecked.png | Bin 0 -> 1216 bytes .../img/checkbox_unchecked_dark.png | Bin 0 -> 1199 bytes .../assets/topcoat-0.7.5/img/checkmark_bw.svg | 15 + .../topcoat-0.7.5/img/dark-combo-box-bg.png | Bin 0 -> 1023 bytes .../topcoat-0.7.5/img/dark-combo-box-bg2x.png | Bin 0 -> 1124 bytes .../assets/topcoat-0.7.5/img/dark-grips.png | Bin 0 -> 220 bytes .../topcoat-0.7.5/img/dark-sprites2x.png | Bin 0 -> 5066 bytes .../topcoat-0.7.5/img/dialog-zone-bg.png | Bin 0 -> 600868 bytes .../img/drop-down-triangle-dark.png | Bin 0 -> 1091 bytes .../topcoat-0.7.5/img/drop-down-triangle.png | Bin 0 -> 2892 bytes .../assets/topcoat-0.7.5/img/hamburger_bw.svg | 1912 ++ .../topcoat-0.7.5/img/hamburger_dark.svg | 1935 ++ .../topcoat-0.7.5/img/hamburger_light.svg | 1936 ++ .../topcoat-0.7.5/img/light-combo-box-bg.png | Bin 0 -> 1023 bytes .../img/light-combo-box-bg2x.png | Bin 0 -> 1124 bytes .../assets/topcoat-0.7.5/img/light-grips.png | Bin 0 -> 248 bytes .../topcoat-0.7.5/img/light-sprites2x.png | Bin 0 -> 5351 bytes .../img/pop-up-triangle-dark.png | Bin 0 -> 1153 bytes .../topcoat-0.7.5/img/pop-up-triangle.png | Bin 0 -> 2958 bytes .../assets/topcoat-0.7.5/img/search-bg.png | Bin 0 -> 1390 bytes .../assets/topcoat-0.7.5/img/search-bg2x.png | Bin 0 -> 1800 bytes .../www/assets/topcoat-0.7.5/img/search.svg | 11 + .../assets/topcoat-0.7.5/img/search_bw.svg | 16 + .../assets/topcoat-0.7.5/img/search_dark.svg | 16 + .../assets/topcoat-0.7.5/img/search_light.svg | 11 + .../www/assets/topcoat-0.7.5/img/spinner.png | Bin 0 -> 2707 bytes .../assets/topcoat-0.7.5/img/spinner2x.png | Bin 0 -> 5201 bytes .../www/assets/topcoat-0.7.5/package.json | 85 + .../www/jasmine_helpers.js | 83 + .../cordova-plugin-test-framework/www/main.js | 446 + .../www/medic.js | 63 + .../www/tests.js | 135 + plugins/fetch.json | 27 + spec/studywellUItest.js | 133 + www/help.html | 12 +- www/index.html | 38 +- www/node_modules/.bin/jasmine | 1 + www/node_modules/.bin/rimraf | 1 + .../adm-zip/.idea/scopes/scope_settings.xml | 5 + www/node_modules/adm-zip/MIT-LICENSE.txt | 21 + www/node_modules/adm-zip/README.md | 64 + www/node_modules/adm-zip/adm-zip.js | 404 + .../adm-zip/headers/entryHeader.js | 261 + www/node_modules/adm-zip/headers/index.js | 2 + .../adm-zip/headers/mainHeader.js | 80 + www/node_modules/adm-zip/methods/deflater.js | 1578 ++ www/node_modules/adm-zip/methods/index.js | 2 + www/node_modules/adm-zip/methods/inflater.js | 448 + www/node_modules/adm-zip/package.json | 83 + .../adm-zip/test/assets/attributes_test.zip | Bin 0 -> 4189 bytes .../attributes_test/New folder/hidden.txt | 17 + .../New folder/hidden_readonly.txt | 17 + .../attributes_test/New folder/readonly.txt | 17 + .../attributes_test/New folder/somefile.txt | 17 + .../attributes_test/asd/New Text Document.txt | 0 .../assets/attributes_test/blank file.txt | 0 www/node_modules/adm-zip/test/assets/fast.zip | Bin 0 -> 4194 bytes .../adm-zip/test/assets/fastest.zip | Bin 0 -> 4194 bytes .../adm-zip/test/assets/linux_arc.zip | Bin 0 -> 415 bytes .../adm-zip/test/assets/maximum.zip | Bin 0 -> 4086 bytes .../adm-zip/test/assets/normal.zip | Bin 0 -> 4170 bytes .../adm-zip/test/assets/store.zip | Bin 0 -> 5878 bytes .../adm-zip/test/assets/ultra.zip | Bin 0 -> 4086 bytes www/node_modules/adm-zip/test/index.js | 5 + www/node_modules/adm-zip/util/constants.js | 84 + www/node_modules/adm-zip/util/errors.js | 35 + www/node_modules/adm-zip/util/fattr.js | 84 + www/node_modules/adm-zip/util/index.js | 4 + www/node_modules/adm-zip/util/utils.js | 145 + www/node_modules/adm-zip/zipEntry.js | 224 + www/node_modules/adm-zip/zipFile.js | 311 + www/node_modules/balanced-match/.npmignore | 2 + www/node_modules/balanced-match/.travis.yml | 3 + www/node_modules/balanced-match/LICENSE.md | 21 + www/node_modules/balanced-match/Makefile | 6 + www/node_modules/balanced-match/README.md | 89 + www/node_modules/balanced-match/example.js | 5 + www/node_modules/balanced-match/index.js | 50 + www/node_modules/balanced-match/package.json | 98 + .../balanced-match/test/balanced.js | 84 + www/node_modules/brace-expansion/.npmignore | 3 + www/node_modules/brace-expansion/README.md | 122 + www/node_modules/brace-expansion/example.js | 8 + www/node_modules/brace-expansion/index.js | 191 + www/node_modules/brace-expansion/package.json | 104 + www/node_modules/concat-map/.travis.yml | 4 + www/node_modules/concat-map/LICENSE | 18 + www/node_modules/concat-map/README.markdown | 62 + www/node_modules/concat-map/example/map.js | 6 + www/node_modules/concat-map/index.js | 13 + www/node_modules/concat-map/package.json | 109 + www/node_modules/concat-map/test/map.js | 39 + www/node_modules/exit/.jshintrc | 14 + www/node_modules/exit/.npmignore | 0 www/node_modules/exit/.travis.yml | 6 + www/node_modules/exit/Gruntfile.js | 48 + www/node_modules/exit/LICENSE-MIT | 22 + www/node_modules/exit/README.md | 75 + www/node_modules/exit/lib/exit.js | 41 + www/node_modules/exit/package.json | 95 + www/node_modules/exit/test/exit_test.js | 121 + .../exit/test/fixtures/10-stderr.txt | 10 + .../exit/test/fixtures/10-stdout-stderr.txt | 20 + .../exit/test/fixtures/10-stdout.txt | 10 + .../exit/test/fixtures/100-stderr.txt | 100 + .../exit/test/fixtures/100-stdout-stderr.txt | 200 + .../exit/test/fixtures/100-stdout.txt | 100 + .../exit/test/fixtures/1000-stderr.txt | 1000 + .../exit/test/fixtures/1000-stdout-stderr.txt | 2000 ++ .../exit/test/fixtures/1000-stdout.txt | 1000 + .../exit/test/fixtures/create-files.sh | 8 + .../exit/test/fixtures/log-broken.js | 23 + www/node_modules/exit/test/fixtures/log.js | 25 + www/node_modules/glob/LICENSE | 15 + www/node_modules/glob/README.md | 365 + www/node_modules/glob/changelog.md | 67 + www/node_modules/glob/common.js | 235 + www/node_modules/glob/glob.js | 782 + www/node_modules/glob/package.json | 102 + www/node_modules/glob/sync.js | 467 + www/node_modules/inflight/.eslintrc | 17 + www/node_modules/inflight/LICENSE | 15 + www/node_modules/inflight/README.md | 37 + www/node_modules/inflight/inflight.js | 44 + www/node_modules/inflight/package.json | 86 + www/node_modules/inflight/test.js | 97 + www/node_modules/inherits/LICENSE | 16 + www/node_modules/inherits/README.md | 42 + www/node_modules/inherits/inherits.js | 1 + www/node_modules/inherits/inherits_browser.js | 23 + www/node_modules/inherits/package.json | 77 + www/node_modules/inherits/test.js | 25 + www/node_modules/jasmine-core/.npmignore | 28 + www/node_modules/jasmine-core/CONTRIBUTING.md | 130 + www/node_modules/jasmine-core/MANIFEST.in | 5 + www/node_modules/jasmine-core/MIT.LICENSE | 20 + www/node_modules/jasmine-core/README.md | 76 + www/node_modules/jasmine-core/RELEASE.md | 73 + www/node_modules/jasmine-core/bower.json | 40 + .../images/jasmine-horizontal.png | Bin 0 -> 1714 bytes .../images/jasmine-horizontal.svg | 102 + .../jasmine-core/images/jasmine_favicon.png | Bin 0 -> 1486 bytes .../jasmine_core.egg-info/PKG-INFO | 30 + .../jasmine_core.egg-info/SOURCES.txt | 18 + .../dependency_links.txt | 1 + .../jasmine_core.egg-info/requires.txt | 2 + .../jasmine_core.egg-info/top_level.txt | 1 + .../jasmine-core/lib/console/console.js | 190 + .../jasmine-core/lib/jasmine-core.js | 37 + .../jasmine-core/lib/jasmine-core/boot.js | 152 + .../lib/jasmine_examples/Player.js | 24 + .../node_example/lib/jasmine_examples/Song.js | 9 + .../helpers/jasmine_examples/SpecHelper.js | 15 + .../spec/jasmine_examples/PlayerSpec.js | 60 + .../jasmine-core/example/spec/PlayerSpec.js | 58 + .../jasmine-core/example/spec/SpecHelper.js | 15 + .../lib/jasmine-core/example/src/Player.js | 22 + .../lib/jasmine-core/example/src/Song.js | 7 + .../lib/jasmine-core/jasmine-html.js | 473 + .../jasmine-core/lib/jasmine-core/jasmine.css | 58 + .../jasmine-core/lib/jasmine-core/jasmine.js | 3454 ++++ .../jasmine-core/lib/jasmine-core/json2.js | 489 + .../lib/jasmine-core/node_boot.js | 41 + www/node_modules/jasmine-core/package.json | 90 + .../jasmine-core/requirements.txt | 1 + www/node_modules/jasmine/.travis.yml | 5 + www/node_modules/jasmine/Gruntfile.js | 44 + www/node_modules/jasmine/README.md | 48 + www/node_modules/jasmine/bin/jasmine.js | 11 + www/node_modules/jasmine/lib/command.js | 220 + .../jasmine/lib/examples/jasmine.json | 11 + www/node_modules/jasmine/lib/exit.js | 17 + .../lib/filters/console_spec_filter.js | 10 + www/node_modules/jasmine/lib/jasmine.js | 170 + .../jasmine/lib/printDeprecation.js | 3 + .../jasmine/lib/reporters/console_reporter.js | 208 + .../lib/reporters/exit_code_reporter.js | 24 + .../jasmine/node_modules/glob/.npmignore | 2 + .../jasmine/node_modules/glob/.travis.yml | 3 + .../jasmine/node_modules/glob/LICENSE | 27 + .../jasmine/node_modules/glob/README.md | 250 + .../jasmine/node_modules/glob/examples/g.js | 9 + .../node_modules/glob/examples/usr-local.js | 9 + .../jasmine/node_modules/glob/glob.js | 728 + .../jasmine/node_modules/glob/package.json | 83 + .../node_modules/glob/test/00-setup.js | 176 + .../node_modules/glob/test/bash-comparison.js | 63 + .../node_modules/glob/test/bash-results.json | 351 + .../node_modules/glob/test/cwd-test.js | 55 + .../node_modules/glob/test/globstar-match.js | 19 + .../jasmine/node_modules/glob/test/mark.js | 118 + .../glob/test/new-glob-optional-options.js | 10 + .../node_modules/glob/test/nocase-nomagic.js | 113 + .../node_modules/glob/test/pause-resume.js | 73 + .../node_modules/glob/test/readme-issue.js | 36 + .../node_modules/glob/test/root-nomount.js | 39 + .../jasmine/node_modules/glob/test/root.js | 46 + .../jasmine/node_modules/glob/test/stat.js | 32 + .../node_modules/glob/test/zz-cleanup.js | 11 + .../jasmine/node_modules/minimatch/.npmignore | 1 + .../jasmine/node_modules/minimatch/LICENSE | 23 + .../jasmine/node_modules/minimatch/README.md | 218 + .../node_modules/minimatch/minimatch.js | 1061 ++ .../node_modules/minimatch/package.json | 82 + .../node_modules/minimatch/test/basic.js | 399 + .../minimatch/test/brace-expand.js | 33 + .../node_modules/minimatch/test/caching.js | 14 + .../node_modules/minimatch/test/defaults.js | 274 + .../test/extglob-ending-with-state-char.js | 8 + www/node_modules/jasmine/package.json | 98 + www/node_modules/jasmine/tasks/jasmine.js | 14 + www/node_modules/lodash/LICENSE | 23 + www/node_modules/lodash/README.md | 40 + www/node_modules/lodash/_Hash.js | 18 + www/node_modules/lodash/_LazyWrapper.js | 27 + www/node_modules/lodash/_LodashWrapper.js | 22 + www/node_modules/lodash/_Map.js | 7 + www/node_modules/lodash/_MapCache.js | 32 + www/node_modules/lodash/_Reflect.js | 6 + www/node_modules/lodash/_Set.js | 7 + www/node_modules/lodash/_SetCache.js | 25 + www/node_modules/lodash/_Stack.js | 32 + www/node_modules/lodash/_Symbol.js | 6 + www/node_modules/lodash/_Uint8Array.js | 6 + www/node_modules/lodash/_WeakMap.js | 7 + www/node_modules/lodash/_addMapEntry.js | 15 + www/node_modules/lodash/_addSetEntry.js | 14 + www/node_modules/lodash/_apply.js | 22 + www/node_modules/lodash/_arrayAggregator.js | 22 + www/node_modules/lodash/_arrayConcat.js | 25 + www/node_modules/lodash/_arrayEach.js | 22 + www/node_modules/lodash/_arrayEachRight.js | 21 + www/node_modules/lodash/_arrayEvery.js | 22 + www/node_modules/lodash/_arrayFilter.js | 25 + www/node_modules/lodash/_arrayIncludes.js | 16 + www/node_modules/lodash/_arrayIncludesWith.js | 22 + www/node_modules/lodash/_arrayMap.js | 21 + www/node_modules/lodash/_arrayPush.js | 20 + www/node_modules/lodash/_arrayReduce.js | 25 + www/node_modules/lodash/_arrayReduceRight.js | 23 + www/node_modules/lodash/_arraySome.js | 22 + www/node_modules/lodash/_assignInDefaults.js | 27 + www/node_modules/lodash/_assignMergeValue.js | 19 + www/node_modules/lodash/_assignValue.js | 27 + www/node_modules/lodash/_assocDelete.js | 31 + www/node_modules/lodash/_assocGet.js | 16 + www/node_modules/lodash/_assocHas.js | 15 + www/node_modules/lodash/_assocIndexOf.js | 22 + www/node_modules/lodash/_assocSet.js | 20 + www/node_modules/lodash/_baseAggregator.js | 21 + www/node_modules/lodash/_baseAssign.js | 17 + www/node_modules/lodash/_baseAt.js | 23 + .../lodash/_baseCastArrayLikeObject.js | 14 + www/node_modules/lodash/_baseCastFunction.js | 14 + www/node_modules/lodash/_baseCastPath.js | 15 + www/node_modules/lodash/_baseClamp.js | 22 + www/node_modules/lodash/_baseClone.js | 131 + www/node_modules/lodash/_baseConforms.js | 32 + www/node_modules/lodash/_baseCreate.js | 18 + www/node_modules/lodash/_baseDelay.js | 21 + www/node_modules/lodash/_baseDifference.js | 66 + www/node_modules/lodash/_baseEach.js | 14 + www/node_modules/lodash/_baseEachRight.js | 14 + www/node_modules/lodash/_baseEvery.js | 20 + www/node_modules/lodash/_baseExtremum.js | 30 + www/node_modules/lodash/_baseFill.js | 32 + www/node_modules/lodash/_baseFilter.js | 21 + www/node_modules/lodash/_baseFind.js | 24 + www/node_modules/lodash/_baseFindIndex.js | 23 + www/node_modules/lodash/_baseFlatten.js | 39 + www/node_modules/lodash/_baseFor.js | 17 + www/node_modules/lodash/_baseForIn.js | 16 + www/node_modules/lodash/_baseForOwn.js | 16 + www/node_modules/lodash/_baseForOwnRight.js | 16 + www/node_modules/lodash/_baseForRight.js | 15 + www/node_modules/lodash/_baseFunctions.js | 19 + www/node_modules/lodash/_baseGet.js | 24 + www/node_modules/lodash/_baseHas.js | 26 + www/node_modules/lodash/_baseHasIn.js | 13 + www/node_modules/lodash/_baseInRange.js | 18 + www/node_modules/lodash/_baseIndexOf.js | 27 + www/node_modules/lodash/_baseIndexOfWith.js | 23 + www/node_modules/lodash/_baseIntersection.js | 73 + www/node_modules/lodash/_baseInverter.js | 21 + www/node_modules/lodash/_baseInvoke.js | 27 + www/node_modules/lodash/_baseIsEqual.js | 30 + www/node_modules/lodash/_baseIsEqualDeep.js | 78 + www/node_modules/lodash/_baseIsMatch.js | 61 + www/node_modules/lodash/_baseIteratee.js | 30 + www/node_modules/lodash/_baseKeys.js | 16 + www/node_modules/lodash/_baseKeysIn.js | 36 + www/node_modules/lodash/_baseLodash.js | 10 + www/node_modules/lodash/_baseMap.js | 22 + www/node_modules/lodash/_baseMatches.js | 30 + .../lodash/_baseMatchesProperty.js | 26 + www/node_modules/lodash/_baseMerge.js | 50 + www/node_modules/lodash/_baseMergeDeep.js | 82 + www/node_modules/lodash/_baseOrderBy.js | 32 + www/node_modules/lodash/_basePick.js | 22 + www/node_modules/lodash/_basePickBy.js | 21 + www/node_modules/lodash/_baseProperty.js | 14 + www/node_modules/lodash/_basePropertyDeep.js | 16 + www/node_modules/lodash/_basePullAll.js | 47 + www/node_modules/lodash/_basePullAt.js | 49 + www/node_modules/lodash/_baseRandom.js | 18 + www/node_modules/lodash/_baseRange.js | 28 + www/node_modules/lodash/_baseReduce.js | 22 + www/node_modules/lodash/_baseSet.js | 45 + www/node_modules/lodash/_baseSetData.js | 17 + www/node_modules/lodash/_baseSlice.js | 31 + www/node_modules/lodash/_baseSome.js | 21 + www/node_modules/lodash/_baseSortBy.js | 21 + www/node_modules/lodash/_baseSortedIndex.js | 40 + www/node_modules/lodash/_baseSortedIndexBy.js | 56 + www/node_modules/lodash/_baseSortedUniq.js | 14 + www/node_modules/lodash/_baseSortedUniqBy.js | 33 + www/node_modules/lodash/_baseSum.js | 23 + www/node_modules/lodash/_baseTimes.js | 20 + www/node_modules/lodash/_baseToPairs.js | 18 + www/node_modules/lodash/_baseUnary.js | 14 + www/node_modules/lodash/_baseUniq.js | 71 + www/node_modules/lodash/_baseUnset.js | 22 + www/node_modules/lodash/_baseUpdate.js | 18 + www/node_modules/lodash/_baseValues.js | 19 + www/node_modules/lodash/_baseWhile.js | 26 + www/node_modules/lodash/_baseWrapperValue.js | 25 + www/node_modules/lodash/_baseXor.js | 30 + www/node_modules/lodash/_baseZipObject.js | 22 + www/node_modules/lodash/_cacheHas.js | 25 + www/node_modules/lodash/_cachePush.js | 27 + www/node_modules/lodash/_charsEndIndex.js | 19 + www/node_modules/lodash/_charsStartIndex.js | 20 + www/node_modules/lodash/_checkGlobal.js | 12 + www/node_modules/lodash/_cloneArrayBuffer.js | 16 + www/node_modules/lodash/_cloneBuffer.js | 18 + www/node_modules/lodash/_cloneMap.js | 16 + www/node_modules/lodash/_cloneRegExp.js | 17 + www/node_modules/lodash/_cloneSet.js | 16 + www/node_modules/lodash/_cloneSymbol.js | 18 + www/node_modules/lodash/_cloneTypedArray.js | 16 + www/node_modules/lodash/_compareAscending.js | 33 + www/node_modules/lodash/_compareMultiple.js | 44 + www/node_modules/lodash/_composeArgs.js | 39 + www/node_modules/lodash/_composeArgsRight.js | 41 + www/node_modules/lodash/_copyArray.js | 20 + www/node_modules/lodash/_copyObject.js | 16 + www/node_modules/lodash/_copyObjectWith.js | 32 + www/node_modules/lodash/_copySymbols.js | 16 + www/node_modules/lodash/_countHolders.js | 21 + www/node_modules/lodash/_createAggregator.js | 23 + www/node_modules/lodash/_createAssigner.js | 37 + www/node_modules/lodash/_createBaseEach.js | 32 + www/node_modules/lodash/_createBaseFor.js | 25 + www/node_modules/lodash/_createBaseWrapper.js | 28 + www/node_modules/lodash/_createCaseFirst.js | 38 + www/node_modules/lodash/_createCompounder.js | 18 + www/node_modules/lodash/_createCtorWrapper.js | 37 + .../lodash/_createCurryWrapper.js | 46 + www/node_modules/lodash/_createFlow.js | 83 + .../lodash/_createHybridWrapper.js | 90 + www/node_modules/lodash/_createInverter.js | 17 + www/node_modules/lodash/_createOver.js | 26 + www/node_modules/lodash/_createPadding.js | 47 + .../lodash/_createPartialWrapper.js | 43 + www/node_modules/lodash/_createRange.js | 31 + .../lodash/_createRecurryWrapper.js | 56 + www/node_modules/lodash/_createRound.js | 30 + www/node_modules/lodash/_createSet.js | 15 + www/node_modules/lodash/_createWrapper.js | 105 + www/node_modules/lodash/_deburrLetter.js | 33 + www/node_modules/lodash/_equalArrays.js | 72 + www/node_modules/lodash/_equalByTag.js | 99 + www/node_modules/lodash/_equalObjects.js | 82 + www/node_modules/lodash/_escapeHtmlChar.js | 22 + www/node_modules/lodash/_escapeStringChar.js | 22 + www/node_modules/lodash/_getData.js | 15 + www/node_modules/lodash/_getFuncName.js | 31 + www/node_modules/lodash/_getLength.js | 15 + www/node_modules/lodash/_getMatchData.js | 21 + www/node_modules/lodash/_getNative.js | 16 + www/node_modules/lodash/_getPlaceholder.js | 13 + www/node_modules/lodash/_getSymbols.js | 15 + www/node_modules/lodash/_getTag.js | 59 + www/node_modules/lodash/_getView.js | 33 + www/node_modules/lodash/_hasPath.js | 40 + www/node_modules/lodash/_hashDelete.js | 15 + www/node_modules/lodash/_hashGet.js | 28 + www/node_modules/lodash/_hashHas.js | 21 + www/node_modules/lodash/_hashSet.js | 18 + www/node_modules/lodash/_indexKeys.js | 24 + www/node_modules/lodash/_indexOfNaN.js | 23 + www/node_modules/lodash/_initCloneArray.js | 26 + www/node_modules/lodash/_initCloneByTag.js | 74 + www/node_modules/lodash/_initCloneObject.js | 20 + www/node_modules/lodash/_isHostObject.js | 20 + www/node_modules/lodash/_isIndex.js | 21 + www/node_modules/lodash/_isIterateeCall.js | 28 + www/node_modules/lodash/_isKey.js | 24 + www/node_modules/lodash/_isKeyable.js | 14 + www/node_modules/lodash/_isLaziable.js | 27 + www/node_modules/lodash/_isPrototype.js | 18 + .../lodash/_isStrictComparable.js | 15 + www/node_modules/lodash/_iteratorToArray.js | 18 + www/node_modules/lodash/_lazyClone.js | 23 + www/node_modules/lodash/_lazyReverse.js | 23 + www/node_modules/lodash/_lazyValue.js | 73 + www/node_modules/lodash/_mapClear.js | 19 + www/node_modules/lodash/_mapDelete.js | 23 + www/node_modules/lodash/_mapGet.js | 23 + www/node_modules/lodash/_mapHas.js | 23 + www/node_modules/lodash/_mapSet.js | 28 + www/node_modules/lodash/_mapToArray.js | 18 + www/node_modules/lodash/_mergeData.js | 90 + www/node_modules/lodash/_mergeDefaults.js | 23 + www/node_modules/lodash/_metaMap.js | 6 + www/node_modules/lodash/_nativeCreate.js | 6 + www/node_modules/lodash/_parent.js | 16 + www/node_modules/lodash/_reEscape.js | 4 + www/node_modules/lodash/_reEvaluate.js | 4 + www/node_modules/lodash/_reInterpolate.js | 4 + www/node_modules/lodash/_realNames.js | 4 + www/node_modules/lodash/_reorder.js | 29 + www/node_modules/lodash/_replaceHolders.js | 29 + www/node_modules/lodash/_root.js | 41 + www/node_modules/lodash/_setData.js | 41 + www/node_modules/lodash/_setToArray.js | 18 + www/node_modules/lodash/_stackClear.js | 12 + www/node_modules/lodash/_stackDelete.js | 19 + www/node_modules/lodash/_stackGet.js | 19 + www/node_modules/lodash/_stackHas.js | 19 + www/node_modules/lodash/_stackSet.js | 36 + www/node_modules/lodash/_stringSize.js | 48 + www/node_modules/lodash/_stringToArray.js | 38 + www/node_modules/lodash/_stringToPath.js | 24 + www/node_modules/lodash/_unescapeHtmlChar.js | 22 + www/node_modules/lodash/_wrapperClone.js | 23 + www/node_modules/lodash/add.js | 29 + www/node_modules/lodash/after.js | 41 + www/node_modules/lodash/array.js | 65 + www/node_modules/lodash/ary.js | 28 + www/node_modules/lodash/assign.js | 62 + www/node_modules/lodash/assignIn.js | 56 + www/node_modules/lodash/assignInWith.js | 36 + www/node_modules/lodash/assignWith.js | 35 + www/node_modules/lodash/at.js | 29 + www/node_modules/lodash/attempt.js | 33 + www/node_modules/lodash/before.js | 39 + www/node_modules/lodash/bind.js | 57 + www/node_modules/lodash/bindAll.js | 39 + www/node_modules/lodash/bindKey.js | 67 + www/node_modules/lodash/camelCase.js | 28 + www/node_modules/lodash/capitalize.js | 22 + www/node_modules/lodash/castArray.js | 43 + www/node_modules/lodash/ceil.js | 25 + www/node_modules/lodash/chain.js | 36 + www/node_modules/lodash/chunk.js | 44 + www/node_modules/lodash/clamp.js | 38 + www/node_modules/lodash/clone.js | 31 + www/node_modules/lodash/cloneDeep.js | 23 + www/node_modules/lodash/cloneDeepWith.js | 33 + www/node_modules/lodash/cloneWith.js | 36 + www/node_modules/lodash/collection.js | 29 + www/node_modules/lodash/commit.js | 32 + www/node_modules/lodash/compact.js | 30 + www/node_modules/lodash/concat.js | 35 + www/node_modules/lodash/cond.js | 58 + www/node_modules/lodash/conforms.js | 28 + www/node_modules/lodash/constant.js | 23 + www/node_modules/lodash/core.js | 3826 ++++ www/node_modules/lodash/core.min.js | 29 + www/node_modules/lodash/countBy.js | 33 + www/node_modules/lodash/create.js | 41 + www/node_modules/lodash/curry.js | 56 + www/node_modules/lodash/curryRight.js | 53 + www/node_modules/lodash/date.js | 3 + www/node_modules/lodash/debounce.js | 177 + www/node_modules/lodash/deburr.js | 39 + www/node_modules/lodash/defaults.js | 30 + www/node_modules/lodash/defaultsDeep.js | 29 + www/node_modules/lodash/defer.js | 25 + www/node_modules/lodash/delay.js | 27 + www/node_modules/lodash/difference.js | 29 + www/node_modules/lodash/differenceBy.js | 40 + www/node_modules/lodash/differenceWith.js | 37 + www/node_modules/lodash/drop.js | 37 + www/node_modules/lodash/dropRight.js | 38 + www/node_modules/lodash/dropRightWhile.js | 44 + www/node_modules/lodash/dropWhile.js | 44 + www/node_modules/lodash/each.js | 1 + www/node_modules/lodash/eachRight.js | 1 + www/node_modules/lodash/endsWith.js | 39 + www/node_modules/lodash/eq.js | 35 + www/node_modules/lodash/escape.js | 47 + www/node_modules/lodash/escapeRegExp.js | 28 + www/node_modules/lodash/every.js | 49 + www/node_modules/lodash/extend.js | 1 + www/node_modules/lodash/extendWith.js | 1 + www/node_modules/lodash/fill.js | 44 + www/node_modules/lodash/filter.js | 44 + www/node_modules/lodash/find.js | 50 + www/node_modules/lodash/findIndex.js | 43 + www/node_modules/lodash/findKey.js | 42 + www/node_modules/lodash/findLast.js | 33 + www/node_modules/lodash/findLastIndex.js | 43 + www/node_modules/lodash/findLastKey.js | 42 + www/node_modules/lodash/flatMap.js | 28 + www/node_modules/lodash/flatten.js | 21 + www/node_modules/lodash/flattenDeep.js | 24 + www/node_modules/lodash/flattenDepth.js | 32 + www/node_modules/lodash/flip.js | 27 + www/node_modules/lodash/floor.js | 25 + www/node_modules/lodash/flow.js | 25 + www/node_modules/lodash/flowRight.js | 24 + www/node_modules/lodash/forEach.js | 40 + www/node_modules/lodash/forEachRight.js | 30 + www/node_modules/lodash/forIn.js | 37 + www/node_modules/lodash/forInRight.js | 35 + www/node_modules/lodash/forOwn.js | 34 + www/node_modules/lodash/forOwnRight.js | 32 + www/node_modules/lodash/fp.js | 2 + www/node_modules/lodash/fp/_baseConvert.js | 319 + www/node_modules/lodash/fp/_convertBrowser.js | 17 + www/node_modules/lodash/fp/_mapping.js | 243 + www/node_modules/lodash/fp/_util.js | 13 + www/node_modules/lodash/fp/add.js | 2 + www/node_modules/lodash/fp/after.js | 2 + www/node_modules/lodash/fp/all.js | 1 + www/node_modules/lodash/fp/allPass.js | 1 + www/node_modules/lodash/fp/apply.js | 1 + www/node_modules/lodash/fp/array.js | 2 + www/node_modules/lodash/fp/ary.js | 2 + www/node_modules/lodash/fp/assign.js | 2 + www/node_modules/lodash/fp/assignIn.js | 2 + www/node_modules/lodash/fp/assignInWith.js | 2 + www/node_modules/lodash/fp/assignWith.js | 2 + www/node_modules/lodash/fp/assoc.js | 1 + www/node_modules/lodash/fp/assocPath.js | 1 + www/node_modules/lodash/fp/at.js | 2 + www/node_modules/lodash/fp/attempt.js | 2 + www/node_modules/lodash/fp/before.js | 2 + www/node_modules/lodash/fp/bind.js | 2 + www/node_modules/lodash/fp/bindAll.js | 1 + www/node_modules/lodash/fp/bindKey.js | 2 + www/node_modules/lodash/fp/camelCase.js | 1 + www/node_modules/lodash/fp/capitalize.js | 1 + www/node_modules/lodash/fp/castArray.js | 2 + www/node_modules/lodash/fp/ceil.js | 2 + www/node_modules/lodash/fp/chain.js | 1 + www/node_modules/lodash/fp/chunk.js | 2 + www/node_modules/lodash/fp/clamp.js | 2 + www/node_modules/lodash/fp/clone.js | 1 + www/node_modules/lodash/fp/cloneDeep.js | 1 + www/node_modules/lodash/fp/cloneDeepWith.js | 2 + www/node_modules/lodash/fp/cloneWith.js | 2 + www/node_modules/lodash/fp/collection.js | 2 + www/node_modules/lodash/fp/commit.js | 1 + www/node_modules/lodash/fp/compact.js | 1 + www/node_modules/lodash/fp/compose.js | 1 + www/node_modules/lodash/fp/concat.js | 2 + www/node_modules/lodash/fp/cond.js | 1 + www/node_modules/lodash/fp/conforms.js | 1 + www/node_modules/lodash/fp/constant.js | 1 + www/node_modules/lodash/fp/contains.js | 1 + www/node_modules/lodash/fp/convert.js | 17 + www/node_modules/lodash/fp/countBy.js | 2 + www/node_modules/lodash/fp/create.js | 2 + www/node_modules/lodash/fp/curry.js | 2 + www/node_modules/lodash/fp/curryN.js | 2 + www/node_modules/lodash/fp/curryRight.js | 2 + www/node_modules/lodash/fp/curryRightN.js | 2 + www/node_modules/lodash/fp/date.js | 2 + www/node_modules/lodash/fp/debounce.js | 2 + www/node_modules/lodash/fp/deburr.js | 1 + www/node_modules/lodash/fp/defaults.js | 2 + www/node_modules/lodash/fp/defaultsDeep.js | 2 + www/node_modules/lodash/fp/defer.js | 1 + www/node_modules/lodash/fp/delay.js | 2 + www/node_modules/lodash/fp/difference.js | 2 + www/node_modules/lodash/fp/differenceBy.js | 2 + www/node_modules/lodash/fp/differenceWith.js | 2 + www/node_modules/lodash/fp/dissoc.js | 1 + www/node_modules/lodash/fp/dissocPath.js | 1 + www/node_modules/lodash/fp/drop.js | 2 + www/node_modules/lodash/fp/dropRight.js | 2 + www/node_modules/lodash/fp/dropRightWhile.js | 2 + www/node_modules/lodash/fp/dropWhile.js | 2 + www/node_modules/lodash/fp/each.js | 1 + www/node_modules/lodash/fp/eachRight.js | 1 + www/node_modules/lodash/fp/endsWith.js | 2 + www/node_modules/lodash/fp/eq.js | 2 + www/node_modules/lodash/fp/equals.js | 1 + www/node_modules/lodash/fp/escape.js | 1 + www/node_modules/lodash/fp/escapeRegExp.js | 1 + www/node_modules/lodash/fp/every.js | 2 + www/node_modules/lodash/fp/extend.js | 1 + www/node_modules/lodash/fp/extendWith.js | 1 + www/node_modules/lodash/fp/fill.js | 2 + www/node_modules/lodash/fp/filter.js | 2 + www/node_modules/lodash/fp/find.js | 2 + www/node_modules/lodash/fp/findIndex.js | 2 + www/node_modules/lodash/fp/findKey.js | 2 + www/node_modules/lodash/fp/findLast.js | 2 + www/node_modules/lodash/fp/findLastIndex.js | 2 + www/node_modules/lodash/fp/findLastKey.js | 2 + www/node_modules/lodash/fp/first.js | 1 + www/node_modules/lodash/fp/flatMap.js | 2 + www/node_modules/lodash/fp/flatten.js | 1 + www/node_modules/lodash/fp/flattenDeep.js | 1 + www/node_modules/lodash/fp/flattenDepth.js | 2 + www/node_modules/lodash/fp/flip.js | 1 + www/node_modules/lodash/fp/floor.js | 2 + www/node_modules/lodash/fp/flow.js | 1 + www/node_modules/lodash/fp/flowRight.js | 1 + www/node_modules/lodash/fp/forEach.js | 2 + www/node_modules/lodash/fp/forEachRight.js | 2 + www/node_modules/lodash/fp/forIn.js | 2 + www/node_modules/lodash/fp/forInRight.js | 2 + www/node_modules/lodash/fp/forOwn.js | 2 + www/node_modules/lodash/fp/forOwnRight.js | 2 + www/node_modules/lodash/fp/fromPairs.js | 2 + www/node_modules/lodash/fp/function.js | 2 + www/node_modules/lodash/fp/functions.js | 1 + www/node_modules/lodash/fp/functionsIn.js | 1 + www/node_modules/lodash/fp/get.js | 2 + www/node_modules/lodash/fp/getOr.js | 2 + www/node_modules/lodash/fp/groupBy.js | 2 + www/node_modules/lodash/fp/gt.js | 2 + www/node_modules/lodash/fp/gte.js | 2 + www/node_modules/lodash/fp/has.js | 2 + www/node_modules/lodash/fp/hasIn.js | 2 + www/node_modules/lodash/fp/head.js | 1 + www/node_modules/lodash/fp/identity.js | 1 + www/node_modules/lodash/fp/inRange.js | 2 + www/node_modules/lodash/fp/includes.js | 2 + www/node_modules/lodash/fp/indexOf.js | 2 + www/node_modules/lodash/fp/init.js | 1 + www/node_modules/lodash/fp/initial.js | 1 + www/node_modules/lodash/fp/intersection.js | 2 + www/node_modules/lodash/fp/intersectionBy.js | 2 + .../lodash/fp/intersectionWith.js | 2 + www/node_modules/lodash/fp/invert.js | 2 + www/node_modules/lodash/fp/invertBy.js | 2 + www/node_modules/lodash/fp/invoke.js | 2 + www/node_modules/lodash/fp/invokeMap.js | 2 + www/node_modules/lodash/fp/isArguments.js | 1 + www/node_modules/lodash/fp/isArray.js | 1 + www/node_modules/lodash/fp/isArrayBuffer.js | 1 + www/node_modules/lodash/fp/isArrayLike.js | 1 + .../lodash/fp/isArrayLikeObject.js | 1 + www/node_modules/lodash/fp/isBoolean.js | 1 + www/node_modules/lodash/fp/isBuffer.js | 1 + www/node_modules/lodash/fp/isDate.js | 1 + www/node_modules/lodash/fp/isElement.js | 1 + www/node_modules/lodash/fp/isEmpty.js | 1 + www/node_modules/lodash/fp/isEqual.js | 2 + www/node_modules/lodash/fp/isEqualWith.js | 2 + www/node_modules/lodash/fp/isError.js | 1 + www/node_modules/lodash/fp/isFinite.js | 1 + www/node_modules/lodash/fp/isFunction.js | 1 + www/node_modules/lodash/fp/isInteger.js | 1 + www/node_modules/lodash/fp/isLength.js | 1 + www/node_modules/lodash/fp/isMap.js | 1 + www/node_modules/lodash/fp/isMatch.js | 2 + www/node_modules/lodash/fp/isMatchWith.js | 2 + www/node_modules/lodash/fp/isNaN.js | 1 + www/node_modules/lodash/fp/isNative.js | 1 + www/node_modules/lodash/fp/isNil.js | 1 + www/node_modules/lodash/fp/isNull.js | 1 + www/node_modules/lodash/fp/isNumber.js | 1 + www/node_modules/lodash/fp/isObject.js | 1 + www/node_modules/lodash/fp/isObjectLike.js | 1 + www/node_modules/lodash/fp/isPlainObject.js | 1 + www/node_modules/lodash/fp/isRegExp.js | 1 + www/node_modules/lodash/fp/isSafeInteger.js | 1 + www/node_modules/lodash/fp/isSet.js | 1 + www/node_modules/lodash/fp/isString.js | 1 + www/node_modules/lodash/fp/isSymbol.js | 1 + www/node_modules/lodash/fp/isTypedArray.js | 1 + www/node_modules/lodash/fp/isUndefined.js | 1 + www/node_modules/lodash/fp/isWeakMap.js | 1 + www/node_modules/lodash/fp/isWeakSet.js | 1 + www/node_modules/lodash/fp/iteratee.js | 2 + www/node_modules/lodash/fp/join.js | 2 + www/node_modules/lodash/fp/kebabCase.js | 1 + www/node_modules/lodash/fp/keyBy.js | 2 + www/node_modules/lodash/fp/keys.js | 1 + www/node_modules/lodash/fp/keysIn.js | 1 + www/node_modules/lodash/fp/lang.js | 2 + www/node_modules/lodash/fp/last.js | 1 + www/node_modules/lodash/fp/lastIndexOf.js | 2 + www/node_modules/lodash/fp/lowerCase.js | 1 + www/node_modules/lodash/fp/lowerFirst.js | 1 + www/node_modules/lodash/fp/lt.js | 2 + www/node_modules/lodash/fp/lte.js | 2 + www/node_modules/lodash/fp/map.js | 2 + www/node_modules/lodash/fp/mapKeys.js | 2 + www/node_modules/lodash/fp/mapObj.js | 1 + www/node_modules/lodash/fp/mapValues.js | 2 + www/node_modules/lodash/fp/matches.js | 1 + www/node_modules/lodash/fp/matchesProperty.js | 2 + www/node_modules/lodash/fp/math.js | 2 + www/node_modules/lodash/fp/max.js | 1 + www/node_modules/lodash/fp/maxBy.js | 2 + www/node_modules/lodash/fp/mean.js | 1 + www/node_modules/lodash/fp/memoize.js | 2 + www/node_modules/lodash/fp/merge.js | 2 + www/node_modules/lodash/fp/mergeWith.js | 2 + www/node_modules/lodash/fp/method.js | 2 + www/node_modules/lodash/fp/methodOf.js | 2 + www/node_modules/lodash/fp/min.js | 1 + www/node_modules/lodash/fp/minBy.js | 2 + www/node_modules/lodash/fp/mixin.js | 2 + www/node_modules/lodash/fp/nAry.js | 1 + www/node_modules/lodash/fp/negate.js | 1 + www/node_modules/lodash/fp/next.js | 1 + www/node_modules/lodash/fp/noop.js | 1 + www/node_modules/lodash/fp/now.js | 1 + www/node_modules/lodash/fp/nthArg.js | 1 + www/node_modules/lodash/fp/number.js | 2 + www/node_modules/lodash/fp/object.js | 2 + www/node_modules/lodash/fp/omit.js | 2 + www/node_modules/lodash/fp/omitAll.js | 1 + www/node_modules/lodash/fp/omitBy.js | 2 + www/node_modules/lodash/fp/once.js | 1 + www/node_modules/lodash/fp/orderBy.js | 2 + www/node_modules/lodash/fp/over.js | 2 + www/node_modules/lodash/fp/overArgs.js | 2 + www/node_modules/lodash/fp/overEvery.js | 2 + www/node_modules/lodash/fp/overSome.js | 2 + www/node_modules/lodash/fp/pad.js | 2 + www/node_modules/lodash/fp/padEnd.js | 2 + www/node_modules/lodash/fp/padStart.js | 2 + www/node_modules/lodash/fp/parseInt.js | 2 + www/node_modules/lodash/fp/partial.js | 2 + www/node_modules/lodash/fp/partialRight.js | 2 + www/node_modules/lodash/fp/partition.js | 2 + www/node_modules/lodash/fp/path.js | 1 + www/node_modules/lodash/fp/pathEq.js | 1 + www/node_modules/lodash/fp/pathOr.js | 1 + www/node_modules/lodash/fp/pick.js | 2 + www/node_modules/lodash/fp/pickAll.js | 1 + www/node_modules/lodash/fp/pickBy.js | 2 + www/node_modules/lodash/fp/pipe.js | 1 + www/node_modules/lodash/fp/plant.js | 1 + www/node_modules/lodash/fp/prop.js | 1 + www/node_modules/lodash/fp/propOf.js | 1 + www/node_modules/lodash/fp/propOr.js | 1 + www/node_modules/lodash/fp/property.js | 1 + www/node_modules/lodash/fp/propertyOf.js | 1 + www/node_modules/lodash/fp/pull.js | 2 + www/node_modules/lodash/fp/pullAll.js | 2 + www/node_modules/lodash/fp/pullAllBy.js | 2 + www/node_modules/lodash/fp/pullAllWith.js | 2 + www/node_modules/lodash/fp/pullAt.js | 2 + www/node_modules/lodash/fp/random.js | 2 + www/node_modules/lodash/fp/range.js | 2 + www/node_modules/lodash/fp/rangeRight.js | 2 + www/node_modules/lodash/fp/rearg.js | 2 + www/node_modules/lodash/fp/reduce.js | 2 + www/node_modules/lodash/fp/reduceRight.js | 2 + www/node_modules/lodash/fp/reject.js | 2 + www/node_modules/lodash/fp/remove.js | 2 + www/node_modules/lodash/fp/repeat.js | 2 + www/node_modules/lodash/fp/replace.js | 2 + www/node_modules/lodash/fp/rest.js | 2 + www/node_modules/lodash/fp/result.js | 2 + www/node_modules/lodash/fp/reverse.js | 2 + www/node_modules/lodash/fp/round.js | 2 + www/node_modules/lodash/fp/sample.js | 1 + www/node_modules/lodash/fp/sampleSize.js | 2 + www/node_modules/lodash/fp/seq.js | 2 + www/node_modules/lodash/fp/set.js | 2 + www/node_modules/lodash/fp/setWith.js | 2 + www/node_modules/lodash/fp/shuffle.js | 1 + www/node_modules/lodash/fp/size.js | 1 + www/node_modules/lodash/fp/slice.js | 2 + www/node_modules/lodash/fp/snakeCase.js | 1 + www/node_modules/lodash/fp/some.js | 2 + www/node_modules/lodash/fp/somePass.js | 1 + www/node_modules/lodash/fp/sortBy.js | 2 + www/node_modules/lodash/fp/sortedIndex.js | 2 + www/node_modules/lodash/fp/sortedIndexBy.js | 2 + www/node_modules/lodash/fp/sortedIndexOf.js | 2 + www/node_modules/lodash/fp/sortedLastIndex.js | 2 + .../lodash/fp/sortedLastIndexBy.js | 2 + .../lodash/fp/sortedLastIndexOf.js | 2 + www/node_modules/lodash/fp/sortedUniq.js | 1 + www/node_modules/lodash/fp/sortedUniqBy.js | 2 + www/node_modules/lodash/fp/split.js | 2 + www/node_modules/lodash/fp/spread.js | 2 + www/node_modules/lodash/fp/startCase.js | 1 + www/node_modules/lodash/fp/startsWith.js | 2 + www/node_modules/lodash/fp/string.js | 2 + www/node_modules/lodash/fp/subtract.js | 2 + www/node_modules/lodash/fp/sum.js | 1 + www/node_modules/lodash/fp/sumBy.js | 2 + www/node_modules/lodash/fp/tail.js | 1 + www/node_modules/lodash/fp/take.js | 2 + www/node_modules/lodash/fp/takeRight.js | 2 + www/node_modules/lodash/fp/takeRightWhile.js | 2 + www/node_modules/lodash/fp/takeWhile.js | 2 + www/node_modules/lodash/fp/tap.js | 2 + www/node_modules/lodash/fp/template.js | 2 + .../lodash/fp/templateSettings.js | 1 + www/node_modules/lodash/fp/throttle.js | 2 + www/node_modules/lodash/fp/thru.js | 2 + www/node_modules/lodash/fp/times.js | 2 + www/node_modules/lodash/fp/toArray.js | 1 + www/node_modules/lodash/fp/toInteger.js | 1 + www/node_modules/lodash/fp/toIterator.js | 1 + www/node_modules/lodash/fp/toJSON.js | 1 + www/node_modules/lodash/fp/toLength.js | 1 + www/node_modules/lodash/fp/toLower.js | 1 + www/node_modules/lodash/fp/toNumber.js | 1 + www/node_modules/lodash/fp/toPairs.js | 1 + www/node_modules/lodash/fp/toPairsIn.js | 1 + www/node_modules/lodash/fp/toPath.js | 1 + www/node_modules/lodash/fp/toPlainObject.js | 1 + www/node_modules/lodash/fp/toSafeInteger.js | 1 + www/node_modules/lodash/fp/toString.js | 1 + www/node_modules/lodash/fp/toUpper.js | 1 + www/node_modules/lodash/fp/transform.js | 2 + www/node_modules/lodash/fp/trim.js | 2 + www/node_modules/lodash/fp/trimChars.js | 2 + www/node_modules/lodash/fp/trimCharsEnd.js | 2 + www/node_modules/lodash/fp/trimCharsStart.js | 2 + www/node_modules/lodash/fp/trimEnd.js | 2 + www/node_modules/lodash/fp/trimStart.js | 2 + www/node_modules/lodash/fp/truncate.js | 2 + www/node_modules/lodash/fp/unapply.js | 1 + www/node_modules/lodash/fp/unary.js | 1 + www/node_modules/lodash/fp/unescape.js | 1 + www/node_modules/lodash/fp/union.js | 2 + www/node_modules/lodash/fp/unionBy.js | 2 + www/node_modules/lodash/fp/unionWith.js | 2 + www/node_modules/lodash/fp/uniq.js | 1 + www/node_modules/lodash/fp/uniqBy.js | 2 + www/node_modules/lodash/fp/uniqWith.js | 2 + www/node_modules/lodash/fp/uniqueId.js | 2 + www/node_modules/lodash/fp/unnest.js | 1 + www/node_modules/lodash/fp/unset.js | 2 + www/node_modules/lodash/fp/unzip.js | 1 + www/node_modules/lodash/fp/unzipWith.js | 2 + www/node_modules/lodash/fp/update.js | 2 + www/node_modules/lodash/fp/updateWith.js | 2 + www/node_modules/lodash/fp/upperCase.js | 1 + www/node_modules/lodash/fp/upperFirst.js | 1 + www/node_modules/lodash/fp/useWith.js | 1 + www/node_modules/lodash/fp/util.js | 2 + www/node_modules/lodash/fp/value.js | 1 + www/node_modules/lodash/fp/valueOf.js | 1 + www/node_modules/lodash/fp/values.js | 1 + www/node_modules/lodash/fp/valuesIn.js | 1 + www/node_modules/lodash/fp/whereEq.js | 1 + www/node_modules/lodash/fp/without.js | 2 + www/node_modules/lodash/fp/words.js | 2 + www/node_modules/lodash/fp/wrap.js | 2 + www/node_modules/lodash/fp/wrapperAt.js | 1 + www/node_modules/lodash/fp/wrapperChain.js | 1 + www/node_modules/lodash/fp/wrapperFlatMap.js | 1 + www/node_modules/lodash/fp/wrapperLodash.js | 1 + www/node_modules/lodash/fp/wrapperReverse.js | 1 + www/node_modules/lodash/fp/wrapperValue.js | 1 + www/node_modules/lodash/fp/xor.js | 2 + www/node_modules/lodash/fp/xorBy.js | 2 + www/node_modules/lodash/fp/xorWith.js | 2 + www/node_modules/lodash/fp/zip.js | 2 + www/node_modules/lodash/fp/zipObj.js | 1 + www/node_modules/lodash/fp/zipObject.js | 2 + www/node_modules/lodash/fp/zipObjectDeep.js | 2 + www/node_modules/lodash/fp/zipWith.js | 2 + www/node_modules/lodash/fromPairs.js | 27 + www/node_modules/lodash/function.js | 25 + www/node_modules/lodash/functions.js | 29 + www/node_modules/lodash/functionsIn.js | 29 + www/node_modules/lodash/get.js | 32 + www/node_modules/lodash/groupBy.js | 38 + www/node_modules/lodash/gt.js | 25 + www/node_modules/lodash/gte.js | 25 + www/node_modules/lodash/has.js | 34 + www/node_modules/lodash/hasIn.js | 33 + www/node_modules/lodash/head.js | 22 + www/node_modules/lodash/identity.js | 20 + www/node_modules/lodash/inRange.js | 52 + www/node_modules/lodash/includes.js | 51 + www/node_modules/lodash/index.js | 1 + www/node_modules/lodash/indexOf.js | 41 + www/node_modules/lodash/initial.js | 20 + www/node_modules/lodash/intersection.js | 29 + www/node_modules/lodash/intersectionBy.js | 43 + www/node_modules/lodash/intersectionWith.js | 41 + www/node_modules/lodash/invert.js | 26 + www/node_modules/lodash/invertBy.js | 43 + www/node_modules/lodash/invoke.js | 23 + www/node_modules/lodash/invokeMap.js | 43 + www/node_modules/lodash/isArguments.js | 43 + www/node_modules/lodash/isArray.js | 26 + www/node_modules/lodash/isArrayBuffer.js | 34 + www/node_modules/lodash/isArrayLike.js | 33 + www/node_modules/lodash/isArrayLikeObject.js | 31 + www/node_modules/lodash/isBoolean.js | 36 + www/node_modules/lodash/isBuffer.js | 48 + www/node_modules/lodash/isDate.js | 35 + www/node_modules/lodash/isElement.js | 24 + www/node_modules/lodash/isEmpty.js | 54 + www/node_modules/lodash/isEqual.js | 34 + www/node_modules/lodash/isEqualWith.js | 40 + www/node_modules/lodash/isError.js | 40 + www/node_modules/lodash/isFinite.js | 34 + www/node_modules/lodash/isFunction.js | 40 + www/node_modules/lodash/isInteger.js | 31 + www/node_modules/lodash/isLength.js | 33 + www/node_modules/lodash/isMap.js | 27 + www/node_modules/lodash/isMatch.js | 31 + www/node_modules/lodash/isMatchWith.js | 40 + www/node_modules/lodash/isNaN.js | 34 + www/node_modules/lodash/isNative.js | 53 + www/node_modules/lodash/isNil.js | 24 + www/node_modules/lodash/isNull.js | 21 + www/node_modules/lodash/isNumber.js | 45 + www/node_modules/lodash/isObject.js | 29 + www/node_modules/lodash/isObjectLike.js | 28 + www/node_modules/lodash/isPlainObject.js | 66 + www/node_modules/lodash/isRegExp.js | 35 + www/node_modules/lodash/isSafeInteger.js | 35 + www/node_modules/lodash/isSet.js | 27 + www/node_modules/lodash/isString.js | 37 + www/node_modules/lodash/isSymbol.js | 36 + www/node_modules/lodash/isTypedArray.js | 75 + www/node_modules/lodash/isUndefined.js | 21 + www/node_modules/lodash/isWeakMap.js | 27 + www/node_modules/lodash/isWeakSet.js | 35 + www/node_modules/lodash/iteratee.js | 38 + www/node_modules/lodash/join.js | 25 + www/node_modules/lodash/kebabCase.js | 26 + www/node_modules/lodash/keyBy.js | 34 + www/node_modules/lodash/keys.js | 55 + www/node_modules/lodash/keysIn.js | 54 + www/node_modules/lodash/lang.js | 56 + www/node_modules/lodash/last.js | 19 + www/node_modules/lodash/lastIndexOf.js | 49 + www/node_modules/lodash/lodash.js | 15073 ++++++++++++++++ www/node_modules/lodash/lodash.min.js | 121 + www/node_modules/lodash/lowerCase.js | 26 + www/node_modules/lodash/lowerFirst.js | 21 + www/node_modules/lodash/lt.js | 25 + www/node_modules/lodash/lte.js | 25 + www/node_modules/lodash/map.js | 52 + www/node_modules/lodash/mapKeys.js | 33 + www/node_modules/lodash/mapValues.js | 39 + www/node_modules/lodash/matches.js | 31 + www/node_modules/lodash/matchesProperty.js | 31 + www/node_modules/lodash/math.js | 14 + www/node_modules/lodash/max.js | 28 + www/node_modules/lodash/maxBy.js | 33 + www/node_modules/lodash/mean.js | 20 + www/node_modules/lodash/memoize.js | 71 + www/node_modules/lodash/merge.js | 38 + www/node_modules/lodash/mergeWith.js | 45 + www/node_modules/lodash/method.js | 33 + www/node_modules/lodash/methodOf.js | 32 + www/node_modules/lodash/min.js | 28 + www/node_modules/lodash/minBy.js | 33 + www/node_modules/lodash/mixin.js | 74 + www/node_modules/lodash/negate.js | 32 + www/node_modules/lodash/next.js | 34 + www/node_modules/lodash/noop.js | 19 + www/node_modules/lodash/now.js | 19 + www/node_modules/lodash/nthArg.js | 25 + www/node_modules/lodash/number.js | 5 + www/node_modules/lodash/object.js | 46 + www/node_modules/lodash/omit.js | 34 + www/node_modules/lodash/omitBy.js | 30 + www/node_modules/lodash/once.js | 24 + www/node_modules/lodash/orderBy.js | 45 + www/node_modules/lodash/over.js | 22 + www/node_modules/lodash/overArgs.js | 56 + www/node_modules/lodash/overEvery.js | 28 + www/node_modules/lodash/overSome.js | 28 + www/node_modules/lodash/package.json | 111 + www/node_modules/lodash/pad.js | 47 + www/node_modules/lodash/padEnd.js | 31 + www/node_modules/lodash/padStart.js | 31 + www/node_modules/lodash/parseInt.js | 48 + www/node_modules/lodash/partial.js | 49 + www/node_modules/lodash/partialRight.js | 48 + www/node_modules/lodash/partition.js | 42 + www/node_modules/lodash/pick.js | 26 + www/node_modules/lodash/pickBy.js | 25 + www/node_modules/lodash/plant.js | 47 + www/node_modules/lodash/property.js | 30 + www/node_modules/lodash/propertyOf.js | 29 + www/node_modules/lodash/pull.js | 28 + www/node_modules/lodash/pullAll.js | 28 + www/node_modules/lodash/pullAllBy.js | 32 + www/node_modules/lodash/pullAllWith.js | 31 + www/node_modules/lodash/pullAt.js | 40 + www/node_modules/lodash/random.js | 81 + www/node_modules/lodash/range.js | 44 + www/node_modules/lodash/rangeRight.js | 39 + www/node_modules/lodash/rearg.js | 34 + www/node_modules/lodash/reduce.js | 49 + www/node_modules/lodash/reduceRight.js | 34 + www/node_modules/lodash/reject.js | 46 + www/node_modules/lodash/remove.js | 52 + www/node_modules/lodash/repeat.js | 51 + www/node_modules/lodash/replace.js | 27 + www/node_modules/lodash/rest.js | 61 + www/node_modules/lodash/result.js | 49 + www/node_modules/lodash/reverse.js | 32 + www/node_modules/lodash/round.js | 25 + www/node_modules/lodash/sample.js | 25 + www/node_modules/lodash/sampleSize.js | 42 + www/node_modules/lodash/seq.js | 17 + www/node_modules/lodash/set.js | 34 + www/node_modules/lodash/setWith.js | 31 + www/node_modules/lodash/shuffle.js | 24 + www/node_modules/lodash/size.js | 37 + www/node_modules/lodash/slice.js | 35 + www/node_modules/lodash/snakeCase.js | 26 + www/node_modules/lodash/some.js | 49 + www/node_modules/lodash/sortBy.js | 52 + www/node_modules/lodash/sortedIndex.js | 25 + www/node_modules/lodash/sortedIndexBy.js | 31 + www/node_modules/lodash/sortedIndexOf.js | 30 + www/node_modules/lodash/sortedLastIndex.js | 23 + www/node_modules/lodash/sortedLastIndexBy.js | 26 + www/node_modules/lodash/sortedLastIndexOf.js | 30 + www/node_modules/lodash/sortedUniq.js | 23 + www/node_modules/lodash/sortedUniqBy.js | 25 + www/node_modules/lodash/split.js | 24 + www/node_modules/lodash/spread.js | 59 + www/node_modules/lodash/startCase.js | 27 + www/node_modules/lodash/startsWith.js | 32 + www/node_modules/lodash/string.js | 33 + www/node_modules/lodash/subtract.js | 29 + www/node_modules/lodash/sum.js | 23 + www/node_modules/lodash/sumBy.js | 32 + www/node_modules/lodash/tail.js | 20 + www/node_modules/lodash/take.js | 36 + www/node_modules/lodash/takeRight.js | 38 + www/node_modules/lodash/takeRightWhile.js | 44 + www/node_modules/lodash/takeWhile.js | 44 + www/node_modules/lodash/tap.js | 28 + www/node_modules/lodash/template.js | 226 + www/node_modules/lodash/templateSettings.js | 67 + www/node_modules/lodash/throttle.js | 65 + www/node_modules/lodash/thru.js | 27 + www/node_modules/lodash/times.js | 50 + www/node_modules/lodash/toArray.js | 57 + www/node_modules/lodash/toInteger.js | 44 + www/node_modules/lodash/toIterator.js | 22 + www/node_modules/lodash/toJSON.js | 1 + www/node_modules/lodash/toLength.js | 36 + www/node_modules/lodash/toLower.js | 27 + www/node_modules/lodash/toNumber.js | 59 + www/node_modules/lodash/toPairs.js | 29 + www/node_modules/lodash/toPairsIn.js | 29 + www/node_modules/lodash/toPath.js | 34 + www/node_modules/lodash/toPlainObject.js | 31 + www/node_modules/lodash/toSafeInteger.js | 34 + www/node_modules/lodash/toString.js | 46 + www/node_modules/lodash/toUpper.js | 27 + www/node_modules/lodash/transform.js | 63 + www/node_modules/lodash/trim.js | 50 + www/node_modules/lodash/trimEnd.js | 44 + www/node_modules/lodash/trimStart.js | 44 + www/node_modules/lodash/truncate.js | 119 + www/node_modules/lodash/unary.js | 21 + www/node_modules/lodash/unescape.js | 33 + www/node_modules/lodash/union.js | 24 + www/node_modules/lodash/unionBy.js | 36 + www/node_modules/lodash/unionWith.js | 34 + www/node_modules/lodash/uniq.js | 25 + www/node_modules/lodash/uniqBy.js | 30 + www/node_modules/lodash/uniqWith.js | 27 + www/node_modules/lodash/uniqueId.js | 27 + www/node_modules/lodash/unset.js | 33 + www/node_modules/lodash/unzip.js | 44 + www/node_modules/lodash/unzipWith.js | 37 + www/node_modules/lodash/update.js | 34 + www/node_modules/lodash/updateWith.js | 32 + www/node_modules/lodash/upperCase.js | 26 + www/node_modules/lodash/upperFirst.js | 21 + www/node_modules/lodash/util.js | 28 + www/node_modules/lodash/value.js | 1 + www/node_modules/lodash/valueOf.js | 1 + www/node_modules/lodash/values.js | 33 + www/node_modules/lodash/valuesIn.js | 30 + www/node_modules/lodash/without.js | 27 + www/node_modules/lodash/words.js | 85 + www/node_modules/lodash/wrap.js | 30 + www/node_modules/lodash/wrapperAt.js | 53 + www/node_modules/lodash/wrapperChain.js | 33 + www/node_modules/lodash/wrapperFlatMap.js | 22 + www/node_modules/lodash/wrapperLodash.js | 144 + www/node_modules/lodash/wrapperReverse.js | 43 + www/node_modules/lodash/wrapperValue.js | 20 + www/node_modules/lodash/xor.js | 25 + www/node_modules/lodash/xorBy.js | 36 + www/node_modules/lodash/xorWith.js | 34 + www/node_modules/lodash/zip.js | 21 + www/node_modules/lodash/zipObject.js | 23 + www/node_modules/lodash/zipObjectDeep.js | 22 + www/node_modules/lodash/zipWith.js | 30 + www/node_modules/lru-cache/.npmignore | 1 + www/node_modules/lru-cache/.travis.yml | 8 + www/node_modules/lru-cache/CONTRIBUTORS | 14 + www/node_modules/lru-cache/LICENSE | 15 + www/node_modules/lru-cache/README.md | 137 + www/node_modules/lru-cache/lib/lru-cache.js | 334 + www/node_modules/lru-cache/package.json | 84 + www/node_modules/lru-cache/test/basic.js | 396 + www/node_modules/lru-cache/test/foreach.js | 120 + .../lru-cache/test/memory-leak.js | 51 + www/node_modules/lru-cache/test/serialize.js | 216 + www/node_modules/minimatch/LICENSE | 15 + www/node_modules/minimatch/README.md | 216 + www/node_modules/minimatch/minimatch.js | 912 + www/node_modules/minimatch/package.json | 85 + www/node_modules/once/LICENSE | 15 + www/node_modules/once/README.md | 51 + www/node_modules/once/once.js | 21 + www/node_modules/once/package.json | 89 + www/node_modules/options/.npmignore | 7 + www/node_modules/options/Makefile | 12 + www/node_modules/options/README.md | 69 + www/node_modules/options/lib/options.js | 86 + www/node_modules/options/package.json | 76 + www/node_modules/path-is-absolute/index.js | 20 + www/node_modules/path-is-absolute/license | 21 + .../path-is-absolute/package.json | 97 + www/node_modules/path-is-absolute/readme.md | 51 + www/node_modules/rimraf/LICENSE | 15 + www/node_modules/rimraf/README.md | 101 + www/node_modules/rimraf/bin.js | 40 + www/node_modules/rimraf/package.json | 91 + www/node_modules/rimraf/rimraf.js | 335 + www/node_modules/sax/AUTHORS | 10 + www/node_modules/sax/LICENSE | 57 + www/node_modules/sax/LICENSE-W3C.html | 188 + www/node_modules/sax/README.md | 216 + .../sax/examples/big-not-pretty.xml | 8002 ++++++++ www/node_modules/sax/examples/example.js | 29 + www/node_modules/sax/examples/get-products.js | 58 + www/node_modules/sax/examples/hello-world.js | 4 + www/node_modules/sax/examples/not-pretty.xml | 8 + www/node_modules/sax/examples/pretty-print.js | 74 + www/node_modules/sax/examples/shopping.xml | 2 + www/node_modules/sax/examples/strict.dtd | 870 + www/node_modules/sax/examples/test.html | 15 + www/node_modules/sax/examples/test.xml | 1254 ++ www/node_modules/sax/lib/sax.js | 1410 ++ www/node_modules/sax/package.json | 111 + www/node_modules/sax/test/attribute-name.js | 33 + .../sax/test/attribute-no-space.js | 75 + www/node_modules/sax/test/buffer-overrun.js | 26 + www/node_modules/sax/test/case.js | 50 + www/node_modules/sax/test/cdata-chunked.js | 11 + www/node_modules/sax/test/cdata-end-split.js | 15 + www/node_modules/sax/test/cdata-fake-end.js | 28 + www/node_modules/sax/test/cdata-multiple.js | 15 + www/node_modules/sax/test/cdata.js | 10 + www/node_modules/sax/test/cyrillic.js | 8 + .../sax/test/duplicate-attribute.js | 13 + www/node_modules/sax/test/emoji.js | 12 + www/node_modules/sax/test/end_empty_stream.js | 5 + www/node_modules/sax/test/entities.js | 10 + www/node_modules/sax/test/entity-mega.js | 16 + www/node_modules/sax/test/flush.js | 13 + www/node_modules/sax/test/index.js | 86 + www/node_modules/sax/test/issue-23.js | 43 + www/node_modules/sax/test/issue-30.js | 24 + www/node_modules/sax/test/issue-35.js | 15 + www/node_modules/sax/test/issue-47.js | 12 + www/node_modules/sax/test/issue-49.js | 31 + www/node_modules/sax/test/issue-84.js | 13 + www/node_modules/sax/test/parser-position.js | 28 + .../sax/test/script-close-better.js | 12 + www/node_modules/sax/test/script.js | 12 + .../sax/test/self-closing-child-strict.js | 44 + .../sax/test/self-closing-child.js | 44 + www/node_modules/sax/test/self-closing-tag.js | 25 + www/node_modules/sax/test/stray-ending.js | 17 + .../sax/test/trailing-attribute-no-value.js | 10 + .../sax/test/trailing-non-whitespace.js | 18 + www/node_modules/sax/test/unclosed-root.js | 11 + www/node_modules/sax/test/unquoted.js | 18 + www/node_modules/sax/test/utf8-split.js | 32 + .../sax/test/xmlns-as-tag-name.js | 15 + www/node_modules/sax/test/xmlns-issue-41.js | 68 + www/node_modules/sax/test/xmlns-rebinding.js | 63 + www/node_modules/sax/test/xmlns-strict.js | 74 + .../sax/test/xmlns-unbound-element.js | 33 + www/node_modules/sax/test/xmlns-unbound.js | 15 + .../sax/test/xmlns-xml-default-ns.js | 31 + .../xmlns-xml-default-prefix-attribute.js | 36 + .../sax/test/xmlns-xml-default-prefix.js | 21 + .../sax/test/xmlns-xml-default-redefine.js | 41 + .../selenium-webdriver/.npmignore | 2 + .../selenium-webdriver/CHANGES.md | 490 + www/node_modules/selenium-webdriver/LICENSE | 202 + www/node_modules/selenium-webdriver/NOTICE | 2 + www/node_modules/selenium-webdriver/README.md | 226 + .../selenium-webdriver/builder.js | 513 + www/node_modules/selenium-webdriver/chrome.js | 811 + www/node_modules/selenium-webdriver/edge.js | 378 + www/node_modules/selenium-webdriver/error.js | 619 + .../example/chrome_android.js | 38 + .../example/chrome_mobile_emulation.js | 39 + .../example/google_search.js | 50 + .../example/google_search_generator.js | 45 + .../example/google_search_test.js | 47 + .../selenium-webdriver/example/logging.js | 43 + .../example/parallel_flows.js | 51 + .../selenium-webdriver/executors.js | 50 + .../selenium-webdriver/firefox/binary.js | 221 + .../selenium-webdriver/firefox/extension.js | 177 + .../selenium-webdriver/firefox/index.js | 320 + .../selenium-webdriver/firefox/profile.js | 413 + .../selenium-webdriver/http/index.js | 514 + .../selenium-webdriver/http/util.js | 135 + www/node_modules/selenium-webdriver/ie.js | 444 + www/node_modules/selenium-webdriver/index.js | 57 + .../selenium-webdriver/io/exec.js | 159 + .../selenium-webdriver/io/index.js | 227 + .../selenium-webdriver/lib/README | 2 + .../selenium-webdriver/lib/actions.js | 594 + www/node_modules/selenium-webdriver/lib/by.js | 276 + .../selenium-webdriver/lib/capabilities.js | 404 + .../selenium-webdriver/lib/command.js | 263 + .../selenium-webdriver/lib/devmode.js | 34 + .../selenium-webdriver/lib/events.js | 210 + .../lib/firefox/amd64/libnoblur64.so | Bin 0 -> 41262 bytes .../lib/firefox/i386/libnoblur.so | Bin 0 -> 30887 bytes .../lib/firefox/webdriver.json | 78 + .../lib/firefox/webdriver.xpi | Bin 0 -> 696912 bytes .../selenium-webdriver/lib/input.js | 172 + .../selenium-webdriver/lib/logging.js | 668 + .../selenium-webdriver/lib/promise.js | 3093 ++++ .../selenium-webdriver/lib/safari/client.js | 7203 ++++++++ .../selenium-webdriver/lib/session.js | 79 + .../selenium-webdriver/lib/symbols.js | 36 + .../selenium-webdriver/lib/test/build.js | 153 + ...kTest_testClicksASurroundingStrongTag.html | 11 + .../lib/test/data/Page.aspx | 17 + .../lib/test/data/Page.aspx.cs | 22 + .../lib/test/data/Redirect.aspx | 11 + .../lib/test/data/Redirect.aspx.cs | 9 + .../lib/test/data/Settings.StyleCop | 759 + .../lib/test/data/Web.Config | 59 + .../lib/test/data/actualXhtmlPage.xhtml | 14 + .../lib/test/data/ajaxy_page.html | 81 + .../lib/test/data/alerts.html | 85 + .../lib/test/data/banner.gif | Bin 0 -> 2109 bytes .../lib/test/data/beach.jpg | Bin 0 -> 14085 bytes .../lib/test/data/blank.html | 1 + .../lib/test/data/bodyTypingTest.html | 41 + .../lib/test/data/booleanAttributes.html | 19 + .../lib/test/data/child/childPage.html | 8 + .../data/child/grandchild/grandchildPage.html | 8 + .../lib/test/data/clickEventPage.html | 26 + .../lib/test/data/click_frames.html | 10 + .../lib/test/data/click_jacker.html | 38 + .../lib/test/data/click_out_of_bounds.html | 23 + .../data/click_out_of_bounds_overflow.html | 85 + .../lib/test/data/click_rtl.html | 19 + .../lib/test/data/click_source.html | 18 + .../test/data/click_tests/click_iframe.html | 6 + .../data/click_tests/click_in_iframe.html | 8 + .../click_tests/disappearing_element.html | 62 + .../lib/test/data/click_tests/google_map.html | 15 + .../lib/test/data/click_tests/google_map.png | Bin 0 -> 26209 bytes .../click_tests/html5_submit_buttons.html | 16 + .../lib/test/data/click_tests/issue5237.html | 9 + .../data/click_tests/issue5237_frame.html | 1 + .../data/click_tests/issue5237_target.html | 10 + .../data/click_tests/link_that_wraps.html | 11 + .../test/data/click_tests/mapped_page1.html | 9 + .../test/data/click_tests/mapped_page2.html | 9 + .../test/data/click_tests/mapped_page3.html | 9 + .../click_tests/overlapping_elements.html | 70 + .../partially_overlapping_elements.html | 124 + .../data/click_tests/span_that_wraps.html | 11 + .../test/data/click_tests/submitted_page.html | 9 + .../wrapped_overlapping_elements.html | 13 + .../lib/test/data/click_too_big.html | 10 + .../lib/test/data/click_too_big_in_frame.html | 11 + .../lib/test/data/clicks.html | 35 + .../lib/test/data/closeable_window.html | 8 + .../lib/test/data/cn-test.html | 156 + .../lib/test/data/colorPage.html | 20 + .../lib/test/data/cookies.html | 30 + .../coordinates_tests/element_in_frame.html | 9 + .../element_in_nested_frame.html | 9 + .../page_with_element_out_of_view.html | 11 + .../page_with_empty_element.html | 10 + .../page_with_fixed_element.html | 12 + .../page_with_hidden_element.html | 10 + .../page_with_invisible_element.html | 10 + .../page_with_transparent_element.html | 10 + .../data/coordinates_tests/simple_page.html | 10 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui-lightness/jquery-ui-1.8.10.custom.css | 573 + .../lib/test/data/cssTransform.html | 61 + .../lib/test/data/cssTransform2.html | 20 + .../test/data/document_write_in_onload.html | 13 + .../data/dragAndDropInsideScrolledDiv.html | 67 + .../lib/test/data/dragAndDropTest.html | 102 + .../lib/test/data/dragDropOverflow.html | 104 + .../lib/test/data/draggableLists.html | 67 + .../lib/test/data/droppableItems.html | 65 + .../lib/test/data/dynamic.html | 39 + .../test/data/dynamicallyModifiedPage.html | 42 + .../lib/test/data/errors.html | 15 + .../lib/test/data/firefox/jetpack-sample.xpi | Bin 0 -> 7289 bytes .../lib/test/data/firefox/sample.xpi | Bin 0 -> 1551 bytes .../lib/test/data/fixedFooterNoScroll.html | 13 + .../data/fixedFooterNoScrollQuirksMode.html | 12 + .../lib/test/data/formPage.html | 174 + .../lib/test/data/formSelectionPage.html | 46 + .../test/data/form_handling_js_submit.html | 30 + .../lib/test/data/framePage3.html | 7 + .../lib/test/data/frameScrollChild.html | 26 + .../lib/test/data/frameScrollPage.html | 14 + .../lib/test/data/frameScrollParent.html | 11 + .../lib/test/data/frameWithAnimals.html | 11 + .../data/frame_switching_tests/bug4876.html | 9 + .../frame_switching_tests/bug4876_iframe.html | 9 + .../frame_switching_tests/deletingFrame.html | 29 + .../deletingFrame_iframe.html | 8 + .../deletingFrame_iframe2.html | 7 + .../lib/test/data/frameset.html | 14 + .../lib/test/data/framesetPage2.html | 7 + .../lib/test/data/framesetPage3.html | 4 + .../lib/test/data/globalscope.html | 15 + .../lib/test/data/hidden.html | 5 + .../lib/test/data/html5/blue.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/database.js | 84 + .../lib/test/data/html5/geolocation.js | 18 + .../lib/test/data/html5/green.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/red.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/status.html | 1 + .../lib/test/data/html5/test.appcache | 11 + .../lib/test/data/html5/yellow.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5Page.html | 32 + .../selenium-webdriver/lib/test/data/icon.gif | Bin 0 -> 127 bytes .../lib/test/data/iframeAtBottom.html | 15 + .../lib/test/data/iframeWithAlert.html | 1 + .../lib/test/data/iframeWithIframe.html | 1 + .../lib/test/data/iframes.html | 11 + .../lib/test/data/injectableContent.html | 22 + .../lib/test/data/javascriptEnhancedForm.html | 30 + .../lib/test/data/javascriptPage.html | 275 + .../lib/test/data/jquery-1.3.2.js | 4376 +++++ .../lib/test/data/js/jquery-1.4.4.min.js | 167 + .../data/js/jquery-ui-1.8.10.custom.min.js | 782 + .../js/skins/lightgray/content.inline.min.css | 1 + .../data/js/skins/lightgray/content.min.css | 1 + .../data/js/skins/lightgray/fonts/readme.md | 1 + .../lightgray/fonts/tinymce-small.dev.svg | 175 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 10316 bytes .../skins/lightgray/fonts/tinymce-small.svg | 62 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 10128 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 7848 bytes .../js/skins/lightgray/fonts/tinymce.dev.svg | 153 + .../data/js/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 10024 bytes .../data/js/skins/lightgray/fonts/tinymce.svg | 63 + .../data/js/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 9860 bytes .../js/skins/lightgray/fonts/tinymce.woff | Bin 0 -> 7664 bytes .../data/js/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../data/js/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../data/js/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../data/js/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes .../data/js/skins/lightgray/skin.ie7.min.css | 1 + .../test/data/js/skins/lightgray/skin.min.css | 1 + .../test/data/js/themes/modern/theme.min.js | 1 + .../lib/test/data/js/tinymce.min.js | 10 + .../data/key_tests/remove_on_keypress.html | 36 + .../lib/test/data/keyboard_shortcut.html | 36 + .../lib/test/data/linked_image.html | 16 + .../boolean_attribute_selected.html | 13 + .../boolean_attribute_selected_html4.html | 13 + .../lib/test/data/longContentPage.html | 55 + .../lib/test/data/macbeth.html | 5255 ++++++ .../selenium-webdriver/lib/test/data/map.png | Bin 0 -> 26209 bytes .../lib/test/data/map_visibility.html | 8 + .../lib/test/data/markerTransparent.png | Bin 0 -> 260 bytes .../lib/test/data/messages.html | 15 + .../lib/test/data/meta-redirect.html | 11 + .../lib/test/data/missedJsReference.html | 11 + .../lib/test/data/modal_dialogs/modal_1.html | 21 + .../lib/test/data/modal_dialogs/modal_2.html | 21 + .../lib/test/data/modal_dialogs/modal_3.html | 15 + .../test/data/modal_dialogs/modalindex.html | 21 + .../lib/test/data/mouseOver.html | 17 + .../lib/test/data/mousePositionTracker.html | 33 + .../lib/test/data/nestedElements.html | 155 + .../lib/test/data/overflow-body.html | 15 + .../lib/test/data/overflow/x_auto_y_auto.html | 30 + .../test/data/overflow/x_auto_y_hidden.html | 30 + .../test/data/overflow/x_auto_y_scroll.html | 30 + .../test/data/overflow/x_hidden_y_auto.html | 30 + .../test/data/overflow/x_hidden_y_hidden.html | 30 + .../test/data/overflow/x_hidden_y_scroll.html | 30 + .../test/data/overflow/x_scroll_y_auto.html | 30 + .../test/data/overflow/x_scroll_y_hidden.html | 30 + .../test/data/overflow/x_scroll_y_scroll.html | 30 + .../data/pageWithOnBeforeUnloadMessage.html | 20 + .../lib/test/data/pageWithOnLoad.html | 6 + .../lib/test/data/pageWithOnUnload.html | 6 + .../page_with_link_to_slow_loading_page.html | 6 + .../lib/test/data/plain.txt | 1 + .../lib/test/data/proxy/page1.html | 20 + .../lib/test/data/proxy/page2.html | 24 + .../lib/test/data/proxy/page3.html | 5 + .../lib/test/data/readOnlyPage.html | 24 + .../lib/test/data/rectangles.html | 40 + .../lib/test/data/resultPage.html | 25 + .../lib/test/data/rich_text.html | 161 + .../test/data/safari/frames_benchmark.html | 31 + .../lib/test/data/screen/screen.css | 19 + .../lib/test/data/screen/screen.html | 72 + .../lib/test/data/screen/screen.js | 7 + .../lib/test/data/screen/screen_frame1.html | 72 + .../lib/test/data/screen/screen_frame2.html | 72 + .../lib/test/data/screen/screen_frames.html | 11 + .../lib/test/data/screen/screen_iframes.html | 12 + .../lib/test/data/screen/screen_too_long.html | 68 + .../lib/test/data/screen/screen_x_long.html | 72 + .../test/data/screen/screen_x_too_long.html | 72 + .../lib/test/data/screen/screen_y_long.html | 72 + .../test/data/screen/screen_y_too_long.html | 72 + .../lib/test/data/scroll.html | 27 + .../lib/test/data/scroll2.html | 21 + .../lib/test/data/scroll3.html | 8 + .../lib/test/data/scroll4.html | 7 + .../lib/test/data/scroll5.html | 18 + .../frame_with_height_above_200.html | 26 + .../frame_with_height_above_2000.html | 26 + .../frame_with_nested_scrolling_frame.html | 11 + ...th_nested_scrolling_frame_out_of_view.html | 12 + .../frame_with_small_height.html | 10 + .../page_with_double_overflow_auto.html | 19 + .../page_with_frame_out_of_view.html | 12 + .../page_with_nested_scrolling_frames.html | 11 + ...h_nested_scrolling_frames_out_of_view.html | 12 + .../page_with_non_scrolling_frame.html | 11 + .../page_with_scrolling_frame.html | 11 + ...page_with_scrolling_frame_out_of_view.html | 12 + .../scrolling_tests/page_with_tall_frame.html | 11 + .../page_with_y_overflow_auto.html | 14 + .../data/scrolling_tests/target_page.html | 9 + .../lib/test/data/selectPage.html | 58 + .../lib/test/data/selectableItems.html | 65 + .../lib/test/data/sessionCookie.html | 21 + .../lib/test/data/sessionCookieDest.html | 34 + .../lib/test/data/simple.xml | 5 + .../lib/test/data/simpleTest.html | 98 + .../lib/test/data/slowLoadingAlert.html | 10 + .../test/data/slowLoadingResourcePage.html | 12 + .../lib/test/data/slow_loading_iframes.html | 14 + .../lib/test/data/styledPage.html | 28 + .../lib/test/data/svgPiechart.xhtml | 81 + .../lib/test/data/svgTest.svg | 4 + .../lib/test/data/tables.html | 36 + .../lib/test/data/tinymce.html | 10 + .../lib/test/data/transformable.xml | 11 + .../lib/test/data/transformable.xsl | 37 + .../lib/test/data/transparentUpload.html | 70 + .../lib/test/data/underscore.html | 9 + .../lib/test/data/unicode_ltr.html | 8 + .../lib/test/data/upload.html | 45 + .../lib/test/data/userDefinedProperty.html | 8 + .../lib/test/data/veryLargeCanvas.html | 81 + .../lib/test/data/visibility-css.html | 21 + .../lib/test/data/win32frameset.html | 8 + .../page_with_frame.html | 12 + .../window_switching_tests/simple_page.html | 9 + .../lib/test/data/xhtmlFormPage.xhtml | 17 + .../lib/test/data/xhtmlTest.html | 76 + .../selenium-webdriver/lib/test/fileserver.js | 319 + .../selenium-webdriver/lib/test/httpserver.js | 122 + .../selenium-webdriver/lib/test/index.js | 262 + .../selenium-webdriver/lib/test/resources.js | 44 + .../selenium-webdriver/lib/until.js | 428 + .../selenium-webdriver/lib/webdriver.js | 2351 +++ .../selenium-webdriver/net/index.js | 82 + .../selenium-webdriver/net/portprober.js | 219 + www/node_modules/selenium-webdriver/opera.js | 480 + .../selenium-webdriver/package.json | 94 + .../selenium-webdriver/phantomjs.js | 260 + www/node_modules/selenium-webdriver/proxy.js | 103 + .../selenium-webdriver/remote/index.js | 381 + www/node_modules/selenium-webdriver/safari.js | 547 + .../selenium-webdriver/test/actions_test.js | 53 + .../test/chrome/options_test.js | 227 + .../test/chrome/service_test.js | 45 + .../selenium-webdriver/test/cookie_test.js | 206 + .../test/element_finding_test.js | 392 + .../selenium-webdriver/test/error_test.js | 163 + .../test/execute_script_test.js | 322 + .../test/fingerprint_test.js | 57 + .../test/firefox/extension_test.js | 96 + .../test/firefox/firefox_test.js | 183 + .../test/firefox/profile_test.js | 187 + .../selenium-webdriver/test/http/http_test.js | 443 + .../selenium-webdriver/test/http/util_test.js | 184 + .../selenium-webdriver/test/io_test.js | 232 + .../selenium-webdriver/test/lib/by_test.js | 127 + .../test/lib/capabilities_test.js | 84 + .../test/lib/events_test.js | 177 + .../test/lib/logging_test.js | 272 + .../test/lib/promise_aplus_test.js | 74 + .../test/lib/promise_error_test.js | 808 + .../test/lib/promise_flow_test.js | 2282 +++ .../test/lib/promise_generator_test.js | 308 + .../test/lib/promise_test.js | 996 + .../selenium-webdriver/test/lib/testutil.js | 90 + .../selenium-webdriver/test/lib/until_test.js | 436 + .../test/lib/webdriver_test.js | 2207 +++ .../selenium-webdriver/test/logging_test.js | 167 + .../test/net/portprober_test.js | 129 + .../test/page_loading_test.js | 164 + .../test/phantomjs/execute_phantomjs_test.js | 73 + .../selenium-webdriver/test/proxy_test.js | 170 + .../selenium-webdriver/test/remote_test.js | 72 + .../test/stale_element_test.js | 58 + .../selenium-webdriver/test/tag_name_test.js | 34 + .../test/testing/assert_test.js | 374 + .../test/testing/index_test.js | 178 + .../selenium-webdriver/test/upload_test.js | 85 + .../selenium-webdriver/test/window_test.js | 128 + .../selenium-webdriver/testing/assert.js | 378 + .../selenium-webdriver/testing/index.js | 268 + www/node_modules/sigmund/LICENSE | 15 + www/node_modules/sigmund/README.md | 53 + www/node_modules/sigmund/bench.js | 283 + www/node_modules/sigmund/package.json | 85 + www/node_modules/sigmund/sigmund.js | 39 + www/node_modules/sigmund/test/basic.js | 24 + www/node_modules/tmp/.npmignore | 2 + www/node_modules/tmp/.travis.yml | 5 + www/node_modules/tmp/README.md | 162 + www/node_modules/tmp/domain-test.js | 13 + www/node_modules/tmp/lib/tmp.js | 307 + www/node_modules/tmp/package.json | 91 + www/node_modules/tmp/test-all.sh | 9 + www/node_modules/tmp/test.js | 6 + www/node_modules/tmp/test/base.js | 74 + www/node_modules/tmp/test/dir-test.js | 196 + www/node_modules/tmp/test/file-test.js | 177 + www/node_modules/tmp/test/graceful.js | 15 + www/node_modules/tmp/test/keep.js | 11 + www/node_modules/tmp/test/name-test.js | 82 + www/node_modules/tmp/test/spawn.js | 32 + www/node_modules/tmp/test/symlinkme/file.js | 0 www/node_modules/tmp/test/unsafe.js | 30 + www/node_modules/ultron/.npmignore | 3 + www/node_modules/ultron/.travis.yml | 21 + www/node_modules/ultron/LICENSE | 22 + www/node_modules/ultron/README.md | 97 + www/node_modules/ultron/index.js | 129 + www/node_modules/ultron/package.json | 100 + www/node_modules/ultron/test.js | 327 + www/node_modules/wrappy/LICENSE | 15 + www/node_modules/wrappy/README.md | 36 + www/node_modules/wrappy/package.json | 78 + www/node_modules/wrappy/test/basic.js | 51 + www/node_modules/wrappy/wrappy.js | 33 + www/node_modules/ws/.npmignore | 11 + www/node_modules/ws/.travis.yml | 15 + www/node_modules/ws/Makefile | 40 + www/node_modules/ws/README.md | 242 + www/node_modules/ws/index.js | 49 + www/node_modules/ws/lib/BufferPool.js | 63 + .../ws/lib/BufferUtil.fallback.js | 47 + www/node_modules/ws/lib/BufferUtil.js | 13 + www/node_modules/ws/lib/ErrorCodes.js | 24 + www/node_modules/ws/lib/Extensions.js | 70 + www/node_modules/ws/lib/PerMessageDeflate.js | 325 + www/node_modules/ws/lib/Receiver.hixie.js | 184 + www/node_modules/ws/lib/Receiver.js | 702 + www/node_modules/ws/lib/Sender.hixie.js | 124 + www/node_modules/ws/lib/Sender.js | 324 + .../ws/lib/Validation.fallback.js | 12 + www/node_modules/ws/lib/Validation.js | 13 + www/node_modules/ws/lib/WebSocket.js | 965 + www/node_modules/ws/lib/WebSocketServer.js | 513 + www/node_modules/ws/package.json | 102 + www/node_modules/xml2js/.npmignore | 6 + www/node_modules/xml2js/.travis.yml | 5 + www/node_modules/xml2js/83.coffee | 6 + www/node_modules/xml2js/CONTRIBUTING.md | 19 + www/node_modules/xml2js/LICENSE | 19 + www/node_modules/xml2js/README.md | 343 + www/node_modules/xml2js/canon.xml | 482 + www/node_modules/xml2js/incompat.coffee | 5 + www/node_modules/xml2js/incompat2.js | 7 + www/node_modules/xml2js/lib/bom.js | 15 + www/node_modules/xml2js/lib/processors.js | 19 + www/node_modules/xml2js/lib/xml2js.js | 436 + www/node_modules/xml2js/package.json | 211 + www/node_modules/xml2js/text.coffee | 11 + www/node_modules/xml2js/text.xml | 485 + www/node_modules/xml2js/x.js | 24 + www/node_modules/xmlbuilder/.npmignore | 5 + www/node_modules/xmlbuilder/CHANGELOG.md | 329 + www/node_modules/xmlbuilder/LICENSE | 21 + www/node_modules/xmlbuilder/README.md | 86 + .../xmlbuilder/lib/XMLAttribute.js | 32 + www/node_modules/xmlbuilder/lib/XMLBuilder.js | 69 + www/node_modules/xmlbuilder/lib/XMLCData.js | 49 + www/node_modules/xmlbuilder/lib/XMLComment.js | 49 + .../xmlbuilder/lib/XMLDTDAttList.js | 68 + .../xmlbuilder/lib/XMLDTDElement.js | 46 + .../xmlbuilder/lib/XMLDTDEntity.js | 84 + .../xmlbuilder/lib/XMLDTDNotation.js | 56 + .../xmlbuilder/lib/XMLDeclaration.js | 65 + www/node_modules/xmlbuilder/lib/XMLDocType.js | 188 + www/node_modules/xmlbuilder/lib/XMLElement.js | 217 + www/node_modules/xmlbuilder/lib/XMLNode.js | 331 + .../lib/XMLProcessingInstruction.js | 51 + www/node_modules/xmlbuilder/lib/XMLRaw.js | 49 + .../xmlbuilder/lib/XMLStringifier.js | 193 + www/node_modules/xmlbuilder/lib/XMLText.js | 49 + www/node_modules/xmlbuilder/lib/index.js | 14 + www/node_modules/xmlbuilder/package.json | 93 + www/package.json | 15 + www/reports.html | 2 +- www/resources/js/mic.js | 2 +- www/resources/js/motion.js | 2 +- www/resources/js/study.js | 4 +- www/schedule.html | 2 +- www/settings.html | 2 +- www/spec/UI-help-test.js | 133 + www/spec/UI-home-test.js | 133 + www/spec/UI-reports-test.js | 133 + www/spec/UI-schedule-test.js | 133 + www/spec/UI-settings-test.js | 133 + www/spec/support/jasmine.json | 11 + 2015 files changed, 275374 insertions(+), 57 deletions(-) create mode 100644 platforms/android/assets/www/cdvtests/index.html create mode 100755 platforms/android/assets/www/cdvtests/jasmine-2.2.0/boot.js create mode 100755 platforms/android/assets/www/cdvtests/jasmine-2.2.0/console.js create mode 100755 platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine-html.js create mode 100755 platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine.css create mode 100755 platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine.js create mode 100755 platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine_favicon.png create mode 100644 platforms/android/assets/www/cdvtests/jasmine-medic.js create mode 100644 platforms/android/assets/www/cdvtests/main-bootstrap.js create mode 100644 platforms/android/assets/www/cdvtests/main.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/.gitignore create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/Gruntfile.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/LICENSE create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/NOTICE create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/README.md create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/contributors.txt create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.min.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.min.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.min.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.min.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/brackets.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/main.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/theme.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.woff create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.eot create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.woff create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/stylesheet.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/index.html create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/main.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/rainbow-custom.min.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/rainbow.linenumbers.min.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-desktop-light.html create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-dark.html create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-light.html create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/build/styleguide.css create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/build/styleguide.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrygentest.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrysubmit.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/README.md create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/LICENSE.txt create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Black.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Bold.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Light.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Regular.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Semibold.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Black.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-BlackIt.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Bold.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-It.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Light.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-LightIt.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Regular.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Semibold.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/avatar.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/bg_dark.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/breadcrumb.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_checked.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_checked_dark.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked_dark.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkmark_bw.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dark-combo-box-bg.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dark-combo-box-bg2x.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dark-grips.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dark-sprites2x.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dialog-zone-bg.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/drop-down-triangle-dark.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/drop-down-triangle.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_bw.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_dark.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_light.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg2x.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-grips.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-sprites2x.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/pop-up-triangle-dark.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/pop-up-triangle.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search-bg.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search-bg2x.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_bw.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_dark.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_light.svg create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/spinner.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/spinner2x.png create mode 100755 platforms/android/assets/www/cdvtests/topcoat-0.7.5/package.json create mode 100644 platforms/android/assets/www/plugins/cordova-plugin-device-motion-tests/tests.js create mode 100644 platforms/android/assets/www/plugins/cordova-plugin-device-tests/tests.js create mode 100644 platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js create mode 100644 platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/main.js create mode 100644 platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/medic.js create mode 100644 platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/tests.js create mode 100644 platforms/android/platform_www/cdvtests/index.html create mode 100755 platforms/android/platform_www/cdvtests/jasmine-2.2.0/boot.js create mode 100755 platforms/android/platform_www/cdvtests/jasmine-2.2.0/console.js create mode 100755 platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine-html.js create mode 100755 platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine.css create mode 100755 platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine.js create mode 100755 platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine_favicon.png create mode 100644 platforms/android/platform_www/cdvtests/jasmine-medic.js create mode 100644 platforms/android/platform_www/cdvtests/main-bootstrap.js create mode 100644 platforms/android/platform_www/cdvtests/main.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/.gitignore create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/Gruntfile.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/LICENSE create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/NOTICE create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/README.md create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/contributors.txt create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.min.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.min.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.min.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.min.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/brackets.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/main.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/theme.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.woff create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.eot create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.woff create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/stylesheet.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/index.html create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/main.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/rainbow-custom.min.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/rainbow.linenumbers.min.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-desktop-light.html create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-dark.html create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-light.html create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/build/styleguide.css create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/build/styleguide.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrygentest.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrysubmit.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/README.md create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/LICENSE.txt create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Black.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Bold.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Light.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Regular.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Semibold.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Black.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-BlackIt.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Bold.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-It.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Light.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-LightIt.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Regular.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Semibold.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/avatar.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/bg_dark.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/breadcrumb.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_checked.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_checked_dark.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked_dark.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkmark_bw.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dark-combo-box-bg.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dark-combo-box-bg2x.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dark-grips.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dark-sprites2x.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dialog-zone-bg.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/drop-down-triangle-dark.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/drop-down-triangle.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_bw.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_dark.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_light.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg2x.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-grips.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-sprites2x.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/pop-up-triangle-dark.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/pop-up-triangle.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search-bg.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search-bg2x.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_bw.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_dark.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_light.svg create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/spinner.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/spinner2x.png create mode 100755 platforms/android/platform_www/cdvtests/topcoat-0.7.5/package.json create mode 100644 platforms/android/platform_www/plugins/cordova-plugin-device-motion-tests/tests.js create mode 100644 platforms/android/platform_www/plugins/cordova-plugin-device-tests/tests.js create mode 100644 platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js create mode 100644 platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/main.js create mode 100644 platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/medic.js create mode 100644 platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/tests.js create mode 100644 plugins/cordova-plugin-device-motion-tests/plugin.xml create mode 100644 plugins/cordova-plugin-device-motion-tests/tests.js create mode 100644 plugins/cordova-plugin-device-tests/plugin.xml create mode 100644 plugins/cordova-plugin-device-tests/tests.js create mode 100644 plugins/cordova-plugin-test-framework/LICENSE create mode 100755 plugins/cordova-plugin-test-framework/NOTICE create mode 100644 plugins/cordova-plugin-test-framework/README.md create mode 100644 plugins/cordova-plugin-test-framework/RELEASENOTES.md create mode 100644 plugins/cordova-plugin-test-framework/package.json create mode 100644 plugins/cordova-plugin-test-framework/plugin.xml create mode 100644 plugins/cordova-plugin-test-framework/www/assets/index.html create mode 100755 plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/boot.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/console.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine-html.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine_favicon.png create mode 100644 plugins/cordova-plugin-test-framework/www/assets/jasmine-medic.js create mode 100644 plugins/cordova-plugin-test-framework/www/assets/main-bootstrap.js create mode 100644 plugins/cordova-plugin-test-framework/www/assets/main.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/.gitignore create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/Gruntfile.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/LICENSE create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/NOTICE create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/README.md create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/contributors.txt create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-dark.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-dark.min.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-light.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-light.min.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-dark.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-dark.min.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-light.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-light.min.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/brackets.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/main.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/theme.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.woff create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.eot create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.woff create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/stylesheet.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/index.html create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/main.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/rainbow-custom.min.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/rainbow.linenumbers.min.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-desktop-light.html create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-mobile-dark.html create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-mobile-light.html create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/build/styleguide.css create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/build/styleguide.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/telemetrygentest.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/telemetrysubmit.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/README.md create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/LICENSE.txt create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Black.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Bold.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Light.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Regular.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Semibold.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Black.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-BlackIt.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Bold.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-It.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Light.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-LightIt.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Regular.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Semibold.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/avatar.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/bg_dark.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/breadcrumb.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_checked.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_checked_dark.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_unchecked.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_unchecked_dark.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkmark_bw.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dark-combo-box-bg.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dark-combo-box-bg2x.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dark-grips.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dark-sprites2x.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dialog-zone-bg.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/drop-down-triangle-dark.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/drop-down-triangle.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_bw.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_dark.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_light.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-combo-box-bg.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-combo-box-bg2x.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-grips.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-sprites2x.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/pop-up-triangle-dark.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/pop-up-triangle.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search-bg.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search-bg2x.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_bw.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_dark.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_light.svg create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/spinner.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/spinner2x.png create mode 100755 plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/package.json create mode 100644 plugins/cordova-plugin-test-framework/www/jasmine_helpers.js create mode 100644 plugins/cordova-plugin-test-framework/www/main.js create mode 100644 plugins/cordova-plugin-test-framework/www/medic.js create mode 100644 plugins/cordova-plugin-test-framework/www/tests.js create mode 100644 spec/studywellUItest.js create mode 120000 www/node_modules/.bin/jasmine create mode 120000 www/node_modules/.bin/rimraf create mode 100644 www/node_modules/adm-zip/.idea/scopes/scope_settings.xml create mode 100644 www/node_modules/adm-zip/MIT-LICENSE.txt create mode 100644 www/node_modules/adm-zip/README.md create mode 100644 www/node_modules/adm-zip/adm-zip.js create mode 100644 www/node_modules/adm-zip/headers/entryHeader.js create mode 100644 www/node_modules/adm-zip/headers/index.js create mode 100644 www/node_modules/adm-zip/headers/mainHeader.js create mode 100644 www/node_modules/adm-zip/methods/deflater.js create mode 100644 www/node_modules/adm-zip/methods/index.js create mode 100644 www/node_modules/adm-zip/methods/inflater.js create mode 100644 www/node_modules/adm-zip/package.json create mode 100644 www/node_modules/adm-zip/test/assets/attributes_test.zip create mode 100644 www/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt create mode 100644 www/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt create mode 100644 www/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt create mode 100644 www/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt create mode 100644 www/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt create mode 100644 www/node_modules/adm-zip/test/assets/attributes_test/blank file.txt create mode 100644 www/node_modules/adm-zip/test/assets/fast.zip create mode 100644 www/node_modules/adm-zip/test/assets/fastest.zip create mode 100644 www/node_modules/adm-zip/test/assets/linux_arc.zip create mode 100644 www/node_modules/adm-zip/test/assets/maximum.zip create mode 100644 www/node_modules/adm-zip/test/assets/normal.zip create mode 100644 www/node_modules/adm-zip/test/assets/store.zip create mode 100644 www/node_modules/adm-zip/test/assets/ultra.zip create mode 100644 www/node_modules/adm-zip/test/index.js create mode 100644 www/node_modules/adm-zip/util/constants.js create mode 100644 www/node_modules/adm-zip/util/errors.js create mode 100644 www/node_modules/adm-zip/util/fattr.js create mode 100644 www/node_modules/adm-zip/util/index.js create mode 100644 www/node_modules/adm-zip/util/utils.js create mode 100644 www/node_modules/adm-zip/zipEntry.js create mode 100644 www/node_modules/adm-zip/zipFile.js create mode 100644 www/node_modules/balanced-match/.npmignore create mode 100644 www/node_modules/balanced-match/.travis.yml create mode 100644 www/node_modules/balanced-match/LICENSE.md create mode 100644 www/node_modules/balanced-match/Makefile create mode 100644 www/node_modules/balanced-match/README.md create mode 100644 www/node_modules/balanced-match/example.js create mode 100644 www/node_modules/balanced-match/index.js create mode 100644 www/node_modules/balanced-match/package.json create mode 100644 www/node_modules/balanced-match/test/balanced.js create mode 100644 www/node_modules/brace-expansion/.npmignore create mode 100644 www/node_modules/brace-expansion/README.md create mode 100644 www/node_modules/brace-expansion/example.js create mode 100644 www/node_modules/brace-expansion/index.js create mode 100644 www/node_modules/brace-expansion/package.json create mode 100644 www/node_modules/concat-map/.travis.yml create mode 100644 www/node_modules/concat-map/LICENSE create mode 100644 www/node_modules/concat-map/README.markdown create mode 100644 www/node_modules/concat-map/example/map.js create mode 100644 www/node_modules/concat-map/index.js create mode 100644 www/node_modules/concat-map/package.json create mode 100644 www/node_modules/concat-map/test/map.js create mode 100644 www/node_modules/exit/.jshintrc create mode 100644 www/node_modules/exit/.npmignore create mode 100644 www/node_modules/exit/.travis.yml create mode 100644 www/node_modules/exit/Gruntfile.js create mode 100644 www/node_modules/exit/LICENSE-MIT create mode 100644 www/node_modules/exit/README.md create mode 100644 www/node_modules/exit/lib/exit.js create mode 100644 www/node_modules/exit/package.json create mode 100644 www/node_modules/exit/test/exit_test.js create mode 100644 www/node_modules/exit/test/fixtures/10-stderr.txt create mode 100644 www/node_modules/exit/test/fixtures/10-stdout-stderr.txt create mode 100644 www/node_modules/exit/test/fixtures/10-stdout.txt create mode 100644 www/node_modules/exit/test/fixtures/100-stderr.txt create mode 100644 www/node_modules/exit/test/fixtures/100-stdout-stderr.txt create mode 100644 www/node_modules/exit/test/fixtures/100-stdout.txt create mode 100644 www/node_modules/exit/test/fixtures/1000-stderr.txt create mode 100644 www/node_modules/exit/test/fixtures/1000-stdout-stderr.txt create mode 100644 www/node_modules/exit/test/fixtures/1000-stdout.txt create mode 100755 www/node_modules/exit/test/fixtures/create-files.sh create mode 100644 www/node_modules/exit/test/fixtures/log-broken.js create mode 100644 www/node_modules/exit/test/fixtures/log.js create mode 100644 www/node_modules/glob/LICENSE create mode 100644 www/node_modules/glob/README.md create mode 100644 www/node_modules/glob/changelog.md create mode 100644 www/node_modules/glob/common.js create mode 100644 www/node_modules/glob/glob.js create mode 100644 www/node_modules/glob/package.json create mode 100644 www/node_modules/glob/sync.js create mode 100644 www/node_modules/inflight/.eslintrc create mode 100644 www/node_modules/inflight/LICENSE create mode 100644 www/node_modules/inflight/README.md create mode 100644 www/node_modules/inflight/inflight.js create mode 100644 www/node_modules/inflight/package.json create mode 100644 www/node_modules/inflight/test.js create mode 100644 www/node_modules/inherits/LICENSE create mode 100644 www/node_modules/inherits/README.md create mode 100644 www/node_modules/inherits/inherits.js create mode 100644 www/node_modules/inherits/inherits_browser.js create mode 100644 www/node_modules/inherits/package.json create mode 100644 www/node_modules/inherits/test.js create mode 100644 www/node_modules/jasmine-core/.npmignore create mode 100644 www/node_modules/jasmine-core/CONTRIBUTING.md create mode 100644 www/node_modules/jasmine-core/MANIFEST.in create mode 100644 www/node_modules/jasmine-core/MIT.LICENSE create mode 100644 www/node_modules/jasmine-core/README.md create mode 100644 www/node_modules/jasmine-core/RELEASE.md create mode 100644 www/node_modules/jasmine-core/bower.json create mode 100644 www/node_modules/jasmine-core/images/jasmine-horizontal.png create mode 100644 www/node_modules/jasmine-core/images/jasmine-horizontal.svg create mode 100644 www/node_modules/jasmine-core/images/jasmine_favicon.png create mode 100644 www/node_modules/jasmine-core/jasmine_core.egg-info/PKG-INFO create mode 100644 www/node_modules/jasmine-core/jasmine_core.egg-info/SOURCES.txt create mode 100644 www/node_modules/jasmine-core/jasmine_core.egg-info/dependency_links.txt create mode 100644 www/node_modules/jasmine-core/jasmine_core.egg-info/requires.txt create mode 100644 www/node_modules/jasmine-core/jasmine_core.egg-info/top_level.txt create mode 100644 www/node_modules/jasmine-core/lib/console/console.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/boot.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/helpers/jasmine_examples/SpecHelper.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/jasmine_examples/PlayerSpec.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/example/spec/PlayerSpec.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/example/spec/SpecHelper.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/example/src/Player.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/example/src/Song.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/jasmine.css create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/jasmine.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/json2.js create mode 100644 www/node_modules/jasmine-core/lib/jasmine-core/node_boot.js create mode 100644 www/node_modules/jasmine-core/package.json create mode 100644 www/node_modules/jasmine-core/requirements.txt create mode 100644 www/node_modules/jasmine/.travis.yml create mode 100644 www/node_modules/jasmine/Gruntfile.js create mode 100644 www/node_modules/jasmine/README.md create mode 100755 www/node_modules/jasmine/bin/jasmine.js create mode 100644 www/node_modules/jasmine/lib/command.js create mode 100644 www/node_modules/jasmine/lib/examples/jasmine.json create mode 100644 www/node_modules/jasmine/lib/exit.js create mode 100644 www/node_modules/jasmine/lib/filters/console_spec_filter.js create mode 100644 www/node_modules/jasmine/lib/jasmine.js create mode 100644 www/node_modules/jasmine/lib/printDeprecation.js create mode 100644 www/node_modules/jasmine/lib/reporters/console_reporter.js create mode 100644 www/node_modules/jasmine/lib/reporters/exit_code_reporter.js create mode 100644 www/node_modules/jasmine/node_modules/glob/.npmignore create mode 100644 www/node_modules/jasmine/node_modules/glob/.travis.yml create mode 100644 www/node_modules/jasmine/node_modules/glob/LICENSE create mode 100644 www/node_modules/jasmine/node_modules/glob/README.md create mode 100644 www/node_modules/jasmine/node_modules/glob/examples/g.js create mode 100644 www/node_modules/jasmine/node_modules/glob/examples/usr-local.js create mode 100644 www/node_modules/jasmine/node_modules/glob/glob.js create mode 100644 www/node_modules/jasmine/node_modules/glob/package.json create mode 100644 www/node_modules/jasmine/node_modules/glob/test/00-setup.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/bash-comparison.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/bash-results.json create mode 100644 www/node_modules/jasmine/node_modules/glob/test/cwd-test.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/globstar-match.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/mark.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/new-glob-optional-options.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/nocase-nomagic.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/pause-resume.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/readme-issue.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/root-nomount.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/root.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/stat.js create mode 100644 www/node_modules/jasmine/node_modules/glob/test/zz-cleanup.js create mode 100644 www/node_modules/jasmine/node_modules/minimatch/.npmignore create mode 100644 www/node_modules/jasmine/node_modules/minimatch/LICENSE create mode 100644 www/node_modules/jasmine/node_modules/minimatch/README.md create mode 100644 www/node_modules/jasmine/node_modules/minimatch/minimatch.js create mode 100644 www/node_modules/jasmine/node_modules/minimatch/package.json create mode 100644 www/node_modules/jasmine/node_modules/minimatch/test/basic.js create mode 100644 www/node_modules/jasmine/node_modules/minimatch/test/brace-expand.js create mode 100644 www/node_modules/jasmine/node_modules/minimatch/test/caching.js create mode 100644 www/node_modules/jasmine/node_modules/minimatch/test/defaults.js create mode 100644 www/node_modules/jasmine/node_modules/minimatch/test/extglob-ending-with-state-char.js create mode 100644 www/node_modules/jasmine/package.json create mode 100644 www/node_modules/jasmine/tasks/jasmine.js create mode 100644 www/node_modules/lodash/LICENSE create mode 100644 www/node_modules/lodash/README.md create mode 100644 www/node_modules/lodash/_Hash.js create mode 100644 www/node_modules/lodash/_LazyWrapper.js create mode 100644 www/node_modules/lodash/_LodashWrapper.js create mode 100644 www/node_modules/lodash/_Map.js create mode 100644 www/node_modules/lodash/_MapCache.js create mode 100644 www/node_modules/lodash/_Reflect.js create mode 100644 www/node_modules/lodash/_Set.js create mode 100644 www/node_modules/lodash/_SetCache.js create mode 100644 www/node_modules/lodash/_Stack.js create mode 100644 www/node_modules/lodash/_Symbol.js create mode 100644 www/node_modules/lodash/_Uint8Array.js create mode 100644 www/node_modules/lodash/_WeakMap.js create mode 100644 www/node_modules/lodash/_addMapEntry.js create mode 100644 www/node_modules/lodash/_addSetEntry.js create mode 100644 www/node_modules/lodash/_apply.js create mode 100644 www/node_modules/lodash/_arrayAggregator.js create mode 100644 www/node_modules/lodash/_arrayConcat.js create mode 100644 www/node_modules/lodash/_arrayEach.js create mode 100644 www/node_modules/lodash/_arrayEachRight.js create mode 100644 www/node_modules/lodash/_arrayEvery.js create mode 100644 www/node_modules/lodash/_arrayFilter.js create mode 100644 www/node_modules/lodash/_arrayIncludes.js create mode 100644 www/node_modules/lodash/_arrayIncludesWith.js create mode 100644 www/node_modules/lodash/_arrayMap.js create mode 100644 www/node_modules/lodash/_arrayPush.js create mode 100644 www/node_modules/lodash/_arrayReduce.js create mode 100644 www/node_modules/lodash/_arrayReduceRight.js create mode 100644 www/node_modules/lodash/_arraySome.js create mode 100644 www/node_modules/lodash/_assignInDefaults.js create mode 100644 www/node_modules/lodash/_assignMergeValue.js create mode 100644 www/node_modules/lodash/_assignValue.js create mode 100644 www/node_modules/lodash/_assocDelete.js create mode 100644 www/node_modules/lodash/_assocGet.js create mode 100644 www/node_modules/lodash/_assocHas.js create mode 100644 www/node_modules/lodash/_assocIndexOf.js create mode 100644 www/node_modules/lodash/_assocSet.js create mode 100644 www/node_modules/lodash/_baseAggregator.js create mode 100644 www/node_modules/lodash/_baseAssign.js create mode 100644 www/node_modules/lodash/_baseAt.js create mode 100644 www/node_modules/lodash/_baseCastArrayLikeObject.js create mode 100644 www/node_modules/lodash/_baseCastFunction.js create mode 100644 www/node_modules/lodash/_baseCastPath.js create mode 100644 www/node_modules/lodash/_baseClamp.js create mode 100644 www/node_modules/lodash/_baseClone.js create mode 100644 www/node_modules/lodash/_baseConforms.js create mode 100644 www/node_modules/lodash/_baseCreate.js create mode 100644 www/node_modules/lodash/_baseDelay.js create mode 100644 www/node_modules/lodash/_baseDifference.js create mode 100644 www/node_modules/lodash/_baseEach.js create mode 100644 www/node_modules/lodash/_baseEachRight.js create mode 100644 www/node_modules/lodash/_baseEvery.js create mode 100644 www/node_modules/lodash/_baseExtremum.js create mode 100644 www/node_modules/lodash/_baseFill.js create mode 100644 www/node_modules/lodash/_baseFilter.js create mode 100644 www/node_modules/lodash/_baseFind.js create mode 100644 www/node_modules/lodash/_baseFindIndex.js create mode 100644 www/node_modules/lodash/_baseFlatten.js create mode 100644 www/node_modules/lodash/_baseFor.js create mode 100644 www/node_modules/lodash/_baseForIn.js create mode 100644 www/node_modules/lodash/_baseForOwn.js create mode 100644 www/node_modules/lodash/_baseForOwnRight.js create mode 100644 www/node_modules/lodash/_baseForRight.js create mode 100644 www/node_modules/lodash/_baseFunctions.js create mode 100644 www/node_modules/lodash/_baseGet.js create mode 100644 www/node_modules/lodash/_baseHas.js create mode 100644 www/node_modules/lodash/_baseHasIn.js create mode 100644 www/node_modules/lodash/_baseInRange.js create mode 100644 www/node_modules/lodash/_baseIndexOf.js create mode 100644 www/node_modules/lodash/_baseIndexOfWith.js create mode 100644 www/node_modules/lodash/_baseIntersection.js create mode 100644 www/node_modules/lodash/_baseInverter.js create mode 100644 www/node_modules/lodash/_baseInvoke.js create mode 100644 www/node_modules/lodash/_baseIsEqual.js create mode 100644 www/node_modules/lodash/_baseIsEqualDeep.js create mode 100644 www/node_modules/lodash/_baseIsMatch.js create mode 100644 www/node_modules/lodash/_baseIteratee.js create mode 100644 www/node_modules/lodash/_baseKeys.js create mode 100644 www/node_modules/lodash/_baseKeysIn.js create mode 100644 www/node_modules/lodash/_baseLodash.js create mode 100644 www/node_modules/lodash/_baseMap.js create mode 100644 www/node_modules/lodash/_baseMatches.js create mode 100644 www/node_modules/lodash/_baseMatchesProperty.js create mode 100644 www/node_modules/lodash/_baseMerge.js create mode 100644 www/node_modules/lodash/_baseMergeDeep.js create mode 100644 www/node_modules/lodash/_baseOrderBy.js create mode 100644 www/node_modules/lodash/_basePick.js create mode 100644 www/node_modules/lodash/_basePickBy.js create mode 100644 www/node_modules/lodash/_baseProperty.js create mode 100644 www/node_modules/lodash/_basePropertyDeep.js create mode 100644 www/node_modules/lodash/_basePullAll.js create mode 100644 www/node_modules/lodash/_basePullAt.js create mode 100644 www/node_modules/lodash/_baseRandom.js create mode 100644 www/node_modules/lodash/_baseRange.js create mode 100644 www/node_modules/lodash/_baseReduce.js create mode 100644 www/node_modules/lodash/_baseSet.js create mode 100644 www/node_modules/lodash/_baseSetData.js create mode 100644 www/node_modules/lodash/_baseSlice.js create mode 100644 www/node_modules/lodash/_baseSome.js create mode 100644 www/node_modules/lodash/_baseSortBy.js create mode 100644 www/node_modules/lodash/_baseSortedIndex.js create mode 100644 www/node_modules/lodash/_baseSortedIndexBy.js create mode 100644 www/node_modules/lodash/_baseSortedUniq.js create mode 100644 www/node_modules/lodash/_baseSortedUniqBy.js create mode 100644 www/node_modules/lodash/_baseSum.js create mode 100644 www/node_modules/lodash/_baseTimes.js create mode 100644 www/node_modules/lodash/_baseToPairs.js create mode 100644 www/node_modules/lodash/_baseUnary.js create mode 100644 www/node_modules/lodash/_baseUniq.js create mode 100644 www/node_modules/lodash/_baseUnset.js create mode 100644 www/node_modules/lodash/_baseUpdate.js create mode 100644 www/node_modules/lodash/_baseValues.js create mode 100644 www/node_modules/lodash/_baseWhile.js create mode 100644 www/node_modules/lodash/_baseWrapperValue.js create mode 100644 www/node_modules/lodash/_baseXor.js create mode 100644 www/node_modules/lodash/_baseZipObject.js create mode 100644 www/node_modules/lodash/_cacheHas.js create mode 100644 www/node_modules/lodash/_cachePush.js create mode 100644 www/node_modules/lodash/_charsEndIndex.js create mode 100644 www/node_modules/lodash/_charsStartIndex.js create mode 100644 www/node_modules/lodash/_checkGlobal.js create mode 100644 www/node_modules/lodash/_cloneArrayBuffer.js create mode 100644 www/node_modules/lodash/_cloneBuffer.js create mode 100644 www/node_modules/lodash/_cloneMap.js create mode 100644 www/node_modules/lodash/_cloneRegExp.js create mode 100644 www/node_modules/lodash/_cloneSet.js create mode 100644 www/node_modules/lodash/_cloneSymbol.js create mode 100644 www/node_modules/lodash/_cloneTypedArray.js create mode 100644 www/node_modules/lodash/_compareAscending.js create mode 100644 www/node_modules/lodash/_compareMultiple.js create mode 100644 www/node_modules/lodash/_composeArgs.js create mode 100644 www/node_modules/lodash/_composeArgsRight.js create mode 100644 www/node_modules/lodash/_copyArray.js create mode 100644 www/node_modules/lodash/_copyObject.js create mode 100644 www/node_modules/lodash/_copyObjectWith.js create mode 100644 www/node_modules/lodash/_copySymbols.js create mode 100644 www/node_modules/lodash/_countHolders.js create mode 100644 www/node_modules/lodash/_createAggregator.js create mode 100644 www/node_modules/lodash/_createAssigner.js create mode 100644 www/node_modules/lodash/_createBaseEach.js create mode 100644 www/node_modules/lodash/_createBaseFor.js create mode 100644 www/node_modules/lodash/_createBaseWrapper.js create mode 100644 www/node_modules/lodash/_createCaseFirst.js create mode 100644 www/node_modules/lodash/_createCompounder.js create mode 100644 www/node_modules/lodash/_createCtorWrapper.js create mode 100644 www/node_modules/lodash/_createCurryWrapper.js create mode 100644 www/node_modules/lodash/_createFlow.js create mode 100644 www/node_modules/lodash/_createHybridWrapper.js create mode 100644 www/node_modules/lodash/_createInverter.js create mode 100644 www/node_modules/lodash/_createOver.js create mode 100644 www/node_modules/lodash/_createPadding.js create mode 100644 www/node_modules/lodash/_createPartialWrapper.js create mode 100644 www/node_modules/lodash/_createRange.js create mode 100644 www/node_modules/lodash/_createRecurryWrapper.js create mode 100644 www/node_modules/lodash/_createRound.js create mode 100644 www/node_modules/lodash/_createSet.js create mode 100644 www/node_modules/lodash/_createWrapper.js create mode 100644 www/node_modules/lodash/_deburrLetter.js create mode 100644 www/node_modules/lodash/_equalArrays.js create mode 100644 www/node_modules/lodash/_equalByTag.js create mode 100644 www/node_modules/lodash/_equalObjects.js create mode 100644 www/node_modules/lodash/_escapeHtmlChar.js create mode 100644 www/node_modules/lodash/_escapeStringChar.js create mode 100644 www/node_modules/lodash/_getData.js create mode 100644 www/node_modules/lodash/_getFuncName.js create mode 100644 www/node_modules/lodash/_getLength.js create mode 100644 www/node_modules/lodash/_getMatchData.js create mode 100644 www/node_modules/lodash/_getNative.js create mode 100644 www/node_modules/lodash/_getPlaceholder.js create mode 100644 www/node_modules/lodash/_getSymbols.js create mode 100644 www/node_modules/lodash/_getTag.js create mode 100644 www/node_modules/lodash/_getView.js create mode 100644 www/node_modules/lodash/_hasPath.js create mode 100644 www/node_modules/lodash/_hashDelete.js create mode 100644 www/node_modules/lodash/_hashGet.js create mode 100644 www/node_modules/lodash/_hashHas.js create mode 100644 www/node_modules/lodash/_hashSet.js create mode 100644 www/node_modules/lodash/_indexKeys.js create mode 100644 www/node_modules/lodash/_indexOfNaN.js create mode 100644 www/node_modules/lodash/_initCloneArray.js create mode 100644 www/node_modules/lodash/_initCloneByTag.js create mode 100644 www/node_modules/lodash/_initCloneObject.js create mode 100644 www/node_modules/lodash/_isHostObject.js create mode 100644 www/node_modules/lodash/_isIndex.js create mode 100644 www/node_modules/lodash/_isIterateeCall.js create mode 100644 www/node_modules/lodash/_isKey.js create mode 100644 www/node_modules/lodash/_isKeyable.js create mode 100644 www/node_modules/lodash/_isLaziable.js create mode 100644 www/node_modules/lodash/_isPrototype.js create mode 100644 www/node_modules/lodash/_isStrictComparable.js create mode 100644 www/node_modules/lodash/_iteratorToArray.js create mode 100644 www/node_modules/lodash/_lazyClone.js create mode 100644 www/node_modules/lodash/_lazyReverse.js create mode 100644 www/node_modules/lodash/_lazyValue.js create mode 100644 www/node_modules/lodash/_mapClear.js create mode 100644 www/node_modules/lodash/_mapDelete.js create mode 100644 www/node_modules/lodash/_mapGet.js create mode 100644 www/node_modules/lodash/_mapHas.js create mode 100644 www/node_modules/lodash/_mapSet.js create mode 100644 www/node_modules/lodash/_mapToArray.js create mode 100644 www/node_modules/lodash/_mergeData.js create mode 100644 www/node_modules/lodash/_mergeDefaults.js create mode 100644 www/node_modules/lodash/_metaMap.js create mode 100644 www/node_modules/lodash/_nativeCreate.js create mode 100644 www/node_modules/lodash/_parent.js create mode 100644 www/node_modules/lodash/_reEscape.js create mode 100644 www/node_modules/lodash/_reEvaluate.js create mode 100644 www/node_modules/lodash/_reInterpolate.js create mode 100644 www/node_modules/lodash/_realNames.js create mode 100644 www/node_modules/lodash/_reorder.js create mode 100644 www/node_modules/lodash/_replaceHolders.js create mode 100644 www/node_modules/lodash/_root.js create mode 100644 www/node_modules/lodash/_setData.js create mode 100644 www/node_modules/lodash/_setToArray.js create mode 100644 www/node_modules/lodash/_stackClear.js create mode 100644 www/node_modules/lodash/_stackDelete.js create mode 100644 www/node_modules/lodash/_stackGet.js create mode 100644 www/node_modules/lodash/_stackHas.js create mode 100644 www/node_modules/lodash/_stackSet.js create mode 100644 www/node_modules/lodash/_stringSize.js create mode 100644 www/node_modules/lodash/_stringToArray.js create mode 100644 www/node_modules/lodash/_stringToPath.js create mode 100644 www/node_modules/lodash/_unescapeHtmlChar.js create mode 100644 www/node_modules/lodash/_wrapperClone.js create mode 100644 www/node_modules/lodash/add.js create mode 100644 www/node_modules/lodash/after.js create mode 100644 www/node_modules/lodash/array.js create mode 100644 www/node_modules/lodash/ary.js create mode 100644 www/node_modules/lodash/assign.js create mode 100644 www/node_modules/lodash/assignIn.js create mode 100644 www/node_modules/lodash/assignInWith.js create mode 100644 www/node_modules/lodash/assignWith.js create mode 100644 www/node_modules/lodash/at.js create mode 100644 www/node_modules/lodash/attempt.js create mode 100644 www/node_modules/lodash/before.js create mode 100644 www/node_modules/lodash/bind.js create mode 100644 www/node_modules/lodash/bindAll.js create mode 100644 www/node_modules/lodash/bindKey.js create mode 100644 www/node_modules/lodash/camelCase.js create mode 100644 www/node_modules/lodash/capitalize.js create mode 100644 www/node_modules/lodash/castArray.js create mode 100644 www/node_modules/lodash/ceil.js create mode 100644 www/node_modules/lodash/chain.js create mode 100644 www/node_modules/lodash/chunk.js create mode 100644 www/node_modules/lodash/clamp.js create mode 100644 www/node_modules/lodash/clone.js create mode 100644 www/node_modules/lodash/cloneDeep.js create mode 100644 www/node_modules/lodash/cloneDeepWith.js create mode 100644 www/node_modules/lodash/cloneWith.js create mode 100644 www/node_modules/lodash/collection.js create mode 100644 www/node_modules/lodash/commit.js create mode 100644 www/node_modules/lodash/compact.js create mode 100644 www/node_modules/lodash/concat.js create mode 100644 www/node_modules/lodash/cond.js create mode 100644 www/node_modules/lodash/conforms.js create mode 100644 www/node_modules/lodash/constant.js create mode 100644 www/node_modules/lodash/core.js create mode 100644 www/node_modules/lodash/core.min.js create mode 100644 www/node_modules/lodash/countBy.js create mode 100644 www/node_modules/lodash/create.js create mode 100644 www/node_modules/lodash/curry.js create mode 100644 www/node_modules/lodash/curryRight.js create mode 100644 www/node_modules/lodash/date.js create mode 100644 www/node_modules/lodash/debounce.js create mode 100644 www/node_modules/lodash/deburr.js create mode 100644 www/node_modules/lodash/defaults.js create mode 100644 www/node_modules/lodash/defaultsDeep.js create mode 100644 www/node_modules/lodash/defer.js create mode 100644 www/node_modules/lodash/delay.js create mode 100644 www/node_modules/lodash/difference.js create mode 100644 www/node_modules/lodash/differenceBy.js create mode 100644 www/node_modules/lodash/differenceWith.js create mode 100644 www/node_modules/lodash/drop.js create mode 100644 www/node_modules/lodash/dropRight.js create mode 100644 www/node_modules/lodash/dropRightWhile.js create mode 100644 www/node_modules/lodash/dropWhile.js create mode 100644 www/node_modules/lodash/each.js create mode 100644 www/node_modules/lodash/eachRight.js create mode 100644 www/node_modules/lodash/endsWith.js create mode 100644 www/node_modules/lodash/eq.js create mode 100644 www/node_modules/lodash/escape.js create mode 100644 www/node_modules/lodash/escapeRegExp.js create mode 100644 www/node_modules/lodash/every.js create mode 100644 www/node_modules/lodash/extend.js create mode 100644 www/node_modules/lodash/extendWith.js create mode 100644 www/node_modules/lodash/fill.js create mode 100644 www/node_modules/lodash/filter.js create mode 100644 www/node_modules/lodash/find.js create mode 100644 www/node_modules/lodash/findIndex.js create mode 100644 www/node_modules/lodash/findKey.js create mode 100644 www/node_modules/lodash/findLast.js create mode 100644 www/node_modules/lodash/findLastIndex.js create mode 100644 www/node_modules/lodash/findLastKey.js create mode 100644 www/node_modules/lodash/flatMap.js create mode 100644 www/node_modules/lodash/flatten.js create mode 100644 www/node_modules/lodash/flattenDeep.js create mode 100644 www/node_modules/lodash/flattenDepth.js create mode 100644 www/node_modules/lodash/flip.js create mode 100644 www/node_modules/lodash/floor.js create mode 100644 www/node_modules/lodash/flow.js create mode 100644 www/node_modules/lodash/flowRight.js create mode 100644 www/node_modules/lodash/forEach.js create mode 100644 www/node_modules/lodash/forEachRight.js create mode 100644 www/node_modules/lodash/forIn.js create mode 100644 www/node_modules/lodash/forInRight.js create mode 100644 www/node_modules/lodash/forOwn.js create mode 100644 www/node_modules/lodash/forOwnRight.js create mode 100644 www/node_modules/lodash/fp.js create mode 100644 www/node_modules/lodash/fp/_baseConvert.js create mode 100644 www/node_modules/lodash/fp/_convertBrowser.js create mode 100644 www/node_modules/lodash/fp/_mapping.js create mode 100644 www/node_modules/lodash/fp/_util.js create mode 100644 www/node_modules/lodash/fp/add.js create mode 100644 www/node_modules/lodash/fp/after.js create mode 100644 www/node_modules/lodash/fp/all.js create mode 100644 www/node_modules/lodash/fp/allPass.js create mode 100644 www/node_modules/lodash/fp/apply.js create mode 100644 www/node_modules/lodash/fp/array.js create mode 100644 www/node_modules/lodash/fp/ary.js create mode 100644 www/node_modules/lodash/fp/assign.js create mode 100644 www/node_modules/lodash/fp/assignIn.js create mode 100644 www/node_modules/lodash/fp/assignInWith.js create mode 100644 www/node_modules/lodash/fp/assignWith.js create mode 100644 www/node_modules/lodash/fp/assoc.js create mode 100644 www/node_modules/lodash/fp/assocPath.js create mode 100644 www/node_modules/lodash/fp/at.js create mode 100644 www/node_modules/lodash/fp/attempt.js create mode 100644 www/node_modules/lodash/fp/before.js create mode 100644 www/node_modules/lodash/fp/bind.js create mode 100644 www/node_modules/lodash/fp/bindAll.js create mode 100644 www/node_modules/lodash/fp/bindKey.js create mode 100644 www/node_modules/lodash/fp/camelCase.js create mode 100644 www/node_modules/lodash/fp/capitalize.js create mode 100644 www/node_modules/lodash/fp/castArray.js create mode 100644 www/node_modules/lodash/fp/ceil.js create mode 100644 www/node_modules/lodash/fp/chain.js create mode 100644 www/node_modules/lodash/fp/chunk.js create mode 100644 www/node_modules/lodash/fp/clamp.js create mode 100644 www/node_modules/lodash/fp/clone.js create mode 100644 www/node_modules/lodash/fp/cloneDeep.js create mode 100644 www/node_modules/lodash/fp/cloneDeepWith.js create mode 100644 www/node_modules/lodash/fp/cloneWith.js create mode 100644 www/node_modules/lodash/fp/collection.js create mode 100644 www/node_modules/lodash/fp/commit.js create mode 100644 www/node_modules/lodash/fp/compact.js create mode 100644 www/node_modules/lodash/fp/compose.js create mode 100644 www/node_modules/lodash/fp/concat.js create mode 100644 www/node_modules/lodash/fp/cond.js create mode 100644 www/node_modules/lodash/fp/conforms.js create mode 100644 www/node_modules/lodash/fp/constant.js create mode 100644 www/node_modules/lodash/fp/contains.js create mode 100644 www/node_modules/lodash/fp/convert.js create mode 100644 www/node_modules/lodash/fp/countBy.js create mode 100644 www/node_modules/lodash/fp/create.js create mode 100644 www/node_modules/lodash/fp/curry.js create mode 100644 www/node_modules/lodash/fp/curryN.js create mode 100644 www/node_modules/lodash/fp/curryRight.js create mode 100644 www/node_modules/lodash/fp/curryRightN.js create mode 100644 www/node_modules/lodash/fp/date.js create mode 100644 www/node_modules/lodash/fp/debounce.js create mode 100644 www/node_modules/lodash/fp/deburr.js create mode 100644 www/node_modules/lodash/fp/defaults.js create mode 100644 www/node_modules/lodash/fp/defaultsDeep.js create mode 100644 www/node_modules/lodash/fp/defer.js create mode 100644 www/node_modules/lodash/fp/delay.js create mode 100644 www/node_modules/lodash/fp/difference.js create mode 100644 www/node_modules/lodash/fp/differenceBy.js create mode 100644 www/node_modules/lodash/fp/differenceWith.js create mode 100644 www/node_modules/lodash/fp/dissoc.js create mode 100644 www/node_modules/lodash/fp/dissocPath.js create mode 100644 www/node_modules/lodash/fp/drop.js create mode 100644 www/node_modules/lodash/fp/dropRight.js create mode 100644 www/node_modules/lodash/fp/dropRightWhile.js create mode 100644 www/node_modules/lodash/fp/dropWhile.js create mode 100644 www/node_modules/lodash/fp/each.js create mode 100644 www/node_modules/lodash/fp/eachRight.js create mode 100644 www/node_modules/lodash/fp/endsWith.js create mode 100644 www/node_modules/lodash/fp/eq.js create mode 100644 www/node_modules/lodash/fp/equals.js create mode 100644 www/node_modules/lodash/fp/escape.js create mode 100644 www/node_modules/lodash/fp/escapeRegExp.js create mode 100644 www/node_modules/lodash/fp/every.js create mode 100644 www/node_modules/lodash/fp/extend.js create mode 100644 www/node_modules/lodash/fp/extendWith.js create mode 100644 www/node_modules/lodash/fp/fill.js create mode 100644 www/node_modules/lodash/fp/filter.js create mode 100644 www/node_modules/lodash/fp/find.js create mode 100644 www/node_modules/lodash/fp/findIndex.js create mode 100644 www/node_modules/lodash/fp/findKey.js create mode 100644 www/node_modules/lodash/fp/findLast.js create mode 100644 www/node_modules/lodash/fp/findLastIndex.js create mode 100644 www/node_modules/lodash/fp/findLastKey.js create mode 100644 www/node_modules/lodash/fp/first.js create mode 100644 www/node_modules/lodash/fp/flatMap.js create mode 100644 www/node_modules/lodash/fp/flatten.js create mode 100644 www/node_modules/lodash/fp/flattenDeep.js create mode 100644 www/node_modules/lodash/fp/flattenDepth.js create mode 100644 www/node_modules/lodash/fp/flip.js create mode 100644 www/node_modules/lodash/fp/floor.js create mode 100644 www/node_modules/lodash/fp/flow.js create mode 100644 www/node_modules/lodash/fp/flowRight.js create mode 100644 www/node_modules/lodash/fp/forEach.js create mode 100644 www/node_modules/lodash/fp/forEachRight.js create mode 100644 www/node_modules/lodash/fp/forIn.js create mode 100644 www/node_modules/lodash/fp/forInRight.js create mode 100644 www/node_modules/lodash/fp/forOwn.js create mode 100644 www/node_modules/lodash/fp/forOwnRight.js create mode 100644 www/node_modules/lodash/fp/fromPairs.js create mode 100644 www/node_modules/lodash/fp/function.js create mode 100644 www/node_modules/lodash/fp/functions.js create mode 100644 www/node_modules/lodash/fp/functionsIn.js create mode 100644 www/node_modules/lodash/fp/get.js create mode 100644 www/node_modules/lodash/fp/getOr.js create mode 100644 www/node_modules/lodash/fp/groupBy.js create mode 100644 www/node_modules/lodash/fp/gt.js create mode 100644 www/node_modules/lodash/fp/gte.js create mode 100644 www/node_modules/lodash/fp/has.js create mode 100644 www/node_modules/lodash/fp/hasIn.js create mode 100644 www/node_modules/lodash/fp/head.js create mode 100644 www/node_modules/lodash/fp/identity.js create mode 100644 www/node_modules/lodash/fp/inRange.js create mode 100644 www/node_modules/lodash/fp/includes.js create mode 100644 www/node_modules/lodash/fp/indexOf.js create mode 100644 www/node_modules/lodash/fp/init.js create mode 100644 www/node_modules/lodash/fp/initial.js create mode 100644 www/node_modules/lodash/fp/intersection.js create mode 100644 www/node_modules/lodash/fp/intersectionBy.js create mode 100644 www/node_modules/lodash/fp/intersectionWith.js create mode 100644 www/node_modules/lodash/fp/invert.js create mode 100644 www/node_modules/lodash/fp/invertBy.js create mode 100644 www/node_modules/lodash/fp/invoke.js create mode 100644 www/node_modules/lodash/fp/invokeMap.js create mode 100644 www/node_modules/lodash/fp/isArguments.js create mode 100644 www/node_modules/lodash/fp/isArray.js create mode 100644 www/node_modules/lodash/fp/isArrayBuffer.js create mode 100644 www/node_modules/lodash/fp/isArrayLike.js create mode 100644 www/node_modules/lodash/fp/isArrayLikeObject.js create mode 100644 www/node_modules/lodash/fp/isBoolean.js create mode 100644 www/node_modules/lodash/fp/isBuffer.js create mode 100644 www/node_modules/lodash/fp/isDate.js create mode 100644 www/node_modules/lodash/fp/isElement.js create mode 100644 www/node_modules/lodash/fp/isEmpty.js create mode 100644 www/node_modules/lodash/fp/isEqual.js create mode 100644 www/node_modules/lodash/fp/isEqualWith.js create mode 100644 www/node_modules/lodash/fp/isError.js create mode 100644 www/node_modules/lodash/fp/isFinite.js create mode 100644 www/node_modules/lodash/fp/isFunction.js create mode 100644 www/node_modules/lodash/fp/isInteger.js create mode 100644 www/node_modules/lodash/fp/isLength.js create mode 100644 www/node_modules/lodash/fp/isMap.js create mode 100644 www/node_modules/lodash/fp/isMatch.js create mode 100644 www/node_modules/lodash/fp/isMatchWith.js create mode 100644 www/node_modules/lodash/fp/isNaN.js create mode 100644 www/node_modules/lodash/fp/isNative.js create mode 100644 www/node_modules/lodash/fp/isNil.js create mode 100644 www/node_modules/lodash/fp/isNull.js create mode 100644 www/node_modules/lodash/fp/isNumber.js create mode 100644 www/node_modules/lodash/fp/isObject.js create mode 100644 www/node_modules/lodash/fp/isObjectLike.js create mode 100644 www/node_modules/lodash/fp/isPlainObject.js create mode 100644 www/node_modules/lodash/fp/isRegExp.js create mode 100644 www/node_modules/lodash/fp/isSafeInteger.js create mode 100644 www/node_modules/lodash/fp/isSet.js create mode 100644 www/node_modules/lodash/fp/isString.js create mode 100644 www/node_modules/lodash/fp/isSymbol.js create mode 100644 www/node_modules/lodash/fp/isTypedArray.js create mode 100644 www/node_modules/lodash/fp/isUndefined.js create mode 100644 www/node_modules/lodash/fp/isWeakMap.js create mode 100644 www/node_modules/lodash/fp/isWeakSet.js create mode 100644 www/node_modules/lodash/fp/iteratee.js create mode 100644 www/node_modules/lodash/fp/join.js create mode 100644 www/node_modules/lodash/fp/kebabCase.js create mode 100644 www/node_modules/lodash/fp/keyBy.js create mode 100644 www/node_modules/lodash/fp/keys.js create mode 100644 www/node_modules/lodash/fp/keysIn.js create mode 100644 www/node_modules/lodash/fp/lang.js create mode 100644 www/node_modules/lodash/fp/last.js create mode 100644 www/node_modules/lodash/fp/lastIndexOf.js create mode 100644 www/node_modules/lodash/fp/lowerCase.js create mode 100644 www/node_modules/lodash/fp/lowerFirst.js create mode 100644 www/node_modules/lodash/fp/lt.js create mode 100644 www/node_modules/lodash/fp/lte.js create mode 100644 www/node_modules/lodash/fp/map.js create mode 100644 www/node_modules/lodash/fp/mapKeys.js create mode 100644 www/node_modules/lodash/fp/mapObj.js create mode 100644 www/node_modules/lodash/fp/mapValues.js create mode 100644 www/node_modules/lodash/fp/matches.js create mode 100644 www/node_modules/lodash/fp/matchesProperty.js create mode 100644 www/node_modules/lodash/fp/math.js create mode 100644 www/node_modules/lodash/fp/max.js create mode 100644 www/node_modules/lodash/fp/maxBy.js create mode 100644 www/node_modules/lodash/fp/mean.js create mode 100644 www/node_modules/lodash/fp/memoize.js create mode 100644 www/node_modules/lodash/fp/merge.js create mode 100644 www/node_modules/lodash/fp/mergeWith.js create mode 100644 www/node_modules/lodash/fp/method.js create mode 100644 www/node_modules/lodash/fp/methodOf.js create mode 100644 www/node_modules/lodash/fp/min.js create mode 100644 www/node_modules/lodash/fp/minBy.js create mode 100644 www/node_modules/lodash/fp/mixin.js create mode 100644 www/node_modules/lodash/fp/nAry.js create mode 100644 www/node_modules/lodash/fp/negate.js create mode 100644 www/node_modules/lodash/fp/next.js create mode 100644 www/node_modules/lodash/fp/noop.js create mode 100644 www/node_modules/lodash/fp/now.js create mode 100644 www/node_modules/lodash/fp/nthArg.js create mode 100644 www/node_modules/lodash/fp/number.js create mode 100644 www/node_modules/lodash/fp/object.js create mode 100644 www/node_modules/lodash/fp/omit.js create mode 100644 www/node_modules/lodash/fp/omitAll.js create mode 100644 www/node_modules/lodash/fp/omitBy.js create mode 100644 www/node_modules/lodash/fp/once.js create mode 100644 www/node_modules/lodash/fp/orderBy.js create mode 100644 www/node_modules/lodash/fp/over.js create mode 100644 www/node_modules/lodash/fp/overArgs.js create mode 100644 www/node_modules/lodash/fp/overEvery.js create mode 100644 www/node_modules/lodash/fp/overSome.js create mode 100644 www/node_modules/lodash/fp/pad.js create mode 100644 www/node_modules/lodash/fp/padEnd.js create mode 100644 www/node_modules/lodash/fp/padStart.js create mode 100644 www/node_modules/lodash/fp/parseInt.js create mode 100644 www/node_modules/lodash/fp/partial.js create mode 100644 www/node_modules/lodash/fp/partialRight.js create mode 100644 www/node_modules/lodash/fp/partition.js create mode 100644 www/node_modules/lodash/fp/path.js create mode 100644 www/node_modules/lodash/fp/pathEq.js create mode 100644 www/node_modules/lodash/fp/pathOr.js create mode 100644 www/node_modules/lodash/fp/pick.js create mode 100644 www/node_modules/lodash/fp/pickAll.js create mode 100644 www/node_modules/lodash/fp/pickBy.js create mode 100644 www/node_modules/lodash/fp/pipe.js create mode 100644 www/node_modules/lodash/fp/plant.js create mode 100644 www/node_modules/lodash/fp/prop.js create mode 100644 www/node_modules/lodash/fp/propOf.js create mode 100644 www/node_modules/lodash/fp/propOr.js create mode 100644 www/node_modules/lodash/fp/property.js create mode 100644 www/node_modules/lodash/fp/propertyOf.js create mode 100644 www/node_modules/lodash/fp/pull.js create mode 100644 www/node_modules/lodash/fp/pullAll.js create mode 100644 www/node_modules/lodash/fp/pullAllBy.js create mode 100644 www/node_modules/lodash/fp/pullAllWith.js create mode 100644 www/node_modules/lodash/fp/pullAt.js create mode 100644 www/node_modules/lodash/fp/random.js create mode 100644 www/node_modules/lodash/fp/range.js create mode 100644 www/node_modules/lodash/fp/rangeRight.js create mode 100644 www/node_modules/lodash/fp/rearg.js create mode 100644 www/node_modules/lodash/fp/reduce.js create mode 100644 www/node_modules/lodash/fp/reduceRight.js create mode 100644 www/node_modules/lodash/fp/reject.js create mode 100644 www/node_modules/lodash/fp/remove.js create mode 100644 www/node_modules/lodash/fp/repeat.js create mode 100644 www/node_modules/lodash/fp/replace.js create mode 100644 www/node_modules/lodash/fp/rest.js create mode 100644 www/node_modules/lodash/fp/result.js create mode 100644 www/node_modules/lodash/fp/reverse.js create mode 100644 www/node_modules/lodash/fp/round.js create mode 100644 www/node_modules/lodash/fp/sample.js create mode 100644 www/node_modules/lodash/fp/sampleSize.js create mode 100644 www/node_modules/lodash/fp/seq.js create mode 100644 www/node_modules/lodash/fp/set.js create mode 100644 www/node_modules/lodash/fp/setWith.js create mode 100644 www/node_modules/lodash/fp/shuffle.js create mode 100644 www/node_modules/lodash/fp/size.js create mode 100644 www/node_modules/lodash/fp/slice.js create mode 100644 www/node_modules/lodash/fp/snakeCase.js create mode 100644 www/node_modules/lodash/fp/some.js create mode 100644 www/node_modules/lodash/fp/somePass.js create mode 100644 www/node_modules/lodash/fp/sortBy.js create mode 100644 www/node_modules/lodash/fp/sortedIndex.js create mode 100644 www/node_modules/lodash/fp/sortedIndexBy.js create mode 100644 www/node_modules/lodash/fp/sortedIndexOf.js create mode 100644 www/node_modules/lodash/fp/sortedLastIndex.js create mode 100644 www/node_modules/lodash/fp/sortedLastIndexBy.js create mode 100644 www/node_modules/lodash/fp/sortedLastIndexOf.js create mode 100644 www/node_modules/lodash/fp/sortedUniq.js create mode 100644 www/node_modules/lodash/fp/sortedUniqBy.js create mode 100644 www/node_modules/lodash/fp/split.js create mode 100644 www/node_modules/lodash/fp/spread.js create mode 100644 www/node_modules/lodash/fp/startCase.js create mode 100644 www/node_modules/lodash/fp/startsWith.js create mode 100644 www/node_modules/lodash/fp/string.js create mode 100644 www/node_modules/lodash/fp/subtract.js create mode 100644 www/node_modules/lodash/fp/sum.js create mode 100644 www/node_modules/lodash/fp/sumBy.js create mode 100644 www/node_modules/lodash/fp/tail.js create mode 100644 www/node_modules/lodash/fp/take.js create mode 100644 www/node_modules/lodash/fp/takeRight.js create mode 100644 www/node_modules/lodash/fp/takeRightWhile.js create mode 100644 www/node_modules/lodash/fp/takeWhile.js create mode 100644 www/node_modules/lodash/fp/tap.js create mode 100644 www/node_modules/lodash/fp/template.js create mode 100644 www/node_modules/lodash/fp/templateSettings.js create mode 100644 www/node_modules/lodash/fp/throttle.js create mode 100644 www/node_modules/lodash/fp/thru.js create mode 100644 www/node_modules/lodash/fp/times.js create mode 100644 www/node_modules/lodash/fp/toArray.js create mode 100644 www/node_modules/lodash/fp/toInteger.js create mode 100644 www/node_modules/lodash/fp/toIterator.js create mode 100644 www/node_modules/lodash/fp/toJSON.js create mode 100644 www/node_modules/lodash/fp/toLength.js create mode 100644 www/node_modules/lodash/fp/toLower.js create mode 100644 www/node_modules/lodash/fp/toNumber.js create mode 100644 www/node_modules/lodash/fp/toPairs.js create mode 100644 www/node_modules/lodash/fp/toPairsIn.js create mode 100644 www/node_modules/lodash/fp/toPath.js create mode 100644 www/node_modules/lodash/fp/toPlainObject.js create mode 100644 www/node_modules/lodash/fp/toSafeInteger.js create mode 100644 www/node_modules/lodash/fp/toString.js create mode 100644 www/node_modules/lodash/fp/toUpper.js create mode 100644 www/node_modules/lodash/fp/transform.js create mode 100644 www/node_modules/lodash/fp/trim.js create mode 100644 www/node_modules/lodash/fp/trimChars.js create mode 100644 www/node_modules/lodash/fp/trimCharsEnd.js create mode 100644 www/node_modules/lodash/fp/trimCharsStart.js create mode 100644 www/node_modules/lodash/fp/trimEnd.js create mode 100644 www/node_modules/lodash/fp/trimStart.js create mode 100644 www/node_modules/lodash/fp/truncate.js create mode 100644 www/node_modules/lodash/fp/unapply.js create mode 100644 www/node_modules/lodash/fp/unary.js create mode 100644 www/node_modules/lodash/fp/unescape.js create mode 100644 www/node_modules/lodash/fp/union.js create mode 100644 www/node_modules/lodash/fp/unionBy.js create mode 100644 www/node_modules/lodash/fp/unionWith.js create mode 100644 www/node_modules/lodash/fp/uniq.js create mode 100644 www/node_modules/lodash/fp/uniqBy.js create mode 100644 www/node_modules/lodash/fp/uniqWith.js create mode 100644 www/node_modules/lodash/fp/uniqueId.js create mode 100644 www/node_modules/lodash/fp/unnest.js create mode 100644 www/node_modules/lodash/fp/unset.js create mode 100644 www/node_modules/lodash/fp/unzip.js create mode 100644 www/node_modules/lodash/fp/unzipWith.js create mode 100644 www/node_modules/lodash/fp/update.js create mode 100644 www/node_modules/lodash/fp/updateWith.js create mode 100644 www/node_modules/lodash/fp/upperCase.js create mode 100644 www/node_modules/lodash/fp/upperFirst.js create mode 100644 www/node_modules/lodash/fp/useWith.js create mode 100644 www/node_modules/lodash/fp/util.js create mode 100644 www/node_modules/lodash/fp/value.js create mode 100644 www/node_modules/lodash/fp/valueOf.js create mode 100644 www/node_modules/lodash/fp/values.js create mode 100644 www/node_modules/lodash/fp/valuesIn.js create mode 100644 www/node_modules/lodash/fp/whereEq.js create mode 100644 www/node_modules/lodash/fp/without.js create mode 100644 www/node_modules/lodash/fp/words.js create mode 100644 www/node_modules/lodash/fp/wrap.js create mode 100644 www/node_modules/lodash/fp/wrapperAt.js create mode 100644 www/node_modules/lodash/fp/wrapperChain.js create mode 100644 www/node_modules/lodash/fp/wrapperFlatMap.js create mode 100644 www/node_modules/lodash/fp/wrapperLodash.js create mode 100644 www/node_modules/lodash/fp/wrapperReverse.js create mode 100644 www/node_modules/lodash/fp/wrapperValue.js create mode 100644 www/node_modules/lodash/fp/xor.js create mode 100644 www/node_modules/lodash/fp/xorBy.js create mode 100644 www/node_modules/lodash/fp/xorWith.js create mode 100644 www/node_modules/lodash/fp/zip.js create mode 100644 www/node_modules/lodash/fp/zipObj.js create mode 100644 www/node_modules/lodash/fp/zipObject.js create mode 100644 www/node_modules/lodash/fp/zipObjectDeep.js create mode 100644 www/node_modules/lodash/fp/zipWith.js create mode 100644 www/node_modules/lodash/fromPairs.js create mode 100644 www/node_modules/lodash/function.js create mode 100644 www/node_modules/lodash/functions.js create mode 100644 www/node_modules/lodash/functionsIn.js create mode 100644 www/node_modules/lodash/get.js create mode 100644 www/node_modules/lodash/groupBy.js create mode 100644 www/node_modules/lodash/gt.js create mode 100644 www/node_modules/lodash/gte.js create mode 100644 www/node_modules/lodash/has.js create mode 100644 www/node_modules/lodash/hasIn.js create mode 100644 www/node_modules/lodash/head.js create mode 100644 www/node_modules/lodash/identity.js create mode 100644 www/node_modules/lodash/inRange.js create mode 100644 www/node_modules/lodash/includes.js create mode 100644 www/node_modules/lodash/index.js create mode 100644 www/node_modules/lodash/indexOf.js create mode 100644 www/node_modules/lodash/initial.js create mode 100644 www/node_modules/lodash/intersection.js create mode 100644 www/node_modules/lodash/intersectionBy.js create mode 100644 www/node_modules/lodash/intersectionWith.js create mode 100644 www/node_modules/lodash/invert.js create mode 100644 www/node_modules/lodash/invertBy.js create mode 100644 www/node_modules/lodash/invoke.js create mode 100644 www/node_modules/lodash/invokeMap.js create mode 100644 www/node_modules/lodash/isArguments.js create mode 100644 www/node_modules/lodash/isArray.js create mode 100644 www/node_modules/lodash/isArrayBuffer.js create mode 100644 www/node_modules/lodash/isArrayLike.js create mode 100644 www/node_modules/lodash/isArrayLikeObject.js create mode 100644 www/node_modules/lodash/isBoolean.js create mode 100644 www/node_modules/lodash/isBuffer.js create mode 100644 www/node_modules/lodash/isDate.js create mode 100644 www/node_modules/lodash/isElement.js create mode 100644 www/node_modules/lodash/isEmpty.js create mode 100644 www/node_modules/lodash/isEqual.js create mode 100644 www/node_modules/lodash/isEqualWith.js create mode 100644 www/node_modules/lodash/isError.js create mode 100644 www/node_modules/lodash/isFinite.js create mode 100644 www/node_modules/lodash/isFunction.js create mode 100644 www/node_modules/lodash/isInteger.js create mode 100644 www/node_modules/lodash/isLength.js create mode 100644 www/node_modules/lodash/isMap.js create mode 100644 www/node_modules/lodash/isMatch.js create mode 100644 www/node_modules/lodash/isMatchWith.js create mode 100644 www/node_modules/lodash/isNaN.js create mode 100644 www/node_modules/lodash/isNative.js create mode 100644 www/node_modules/lodash/isNil.js create mode 100644 www/node_modules/lodash/isNull.js create mode 100644 www/node_modules/lodash/isNumber.js create mode 100644 www/node_modules/lodash/isObject.js create mode 100644 www/node_modules/lodash/isObjectLike.js create mode 100644 www/node_modules/lodash/isPlainObject.js create mode 100644 www/node_modules/lodash/isRegExp.js create mode 100644 www/node_modules/lodash/isSafeInteger.js create mode 100644 www/node_modules/lodash/isSet.js create mode 100644 www/node_modules/lodash/isString.js create mode 100644 www/node_modules/lodash/isSymbol.js create mode 100644 www/node_modules/lodash/isTypedArray.js create mode 100644 www/node_modules/lodash/isUndefined.js create mode 100644 www/node_modules/lodash/isWeakMap.js create mode 100644 www/node_modules/lodash/isWeakSet.js create mode 100644 www/node_modules/lodash/iteratee.js create mode 100644 www/node_modules/lodash/join.js create mode 100644 www/node_modules/lodash/kebabCase.js create mode 100644 www/node_modules/lodash/keyBy.js create mode 100644 www/node_modules/lodash/keys.js create mode 100644 www/node_modules/lodash/keysIn.js create mode 100644 www/node_modules/lodash/lang.js create mode 100644 www/node_modules/lodash/last.js create mode 100644 www/node_modules/lodash/lastIndexOf.js create mode 100644 www/node_modules/lodash/lodash.js create mode 100644 www/node_modules/lodash/lodash.min.js create mode 100644 www/node_modules/lodash/lowerCase.js create mode 100644 www/node_modules/lodash/lowerFirst.js create mode 100644 www/node_modules/lodash/lt.js create mode 100644 www/node_modules/lodash/lte.js create mode 100644 www/node_modules/lodash/map.js create mode 100644 www/node_modules/lodash/mapKeys.js create mode 100644 www/node_modules/lodash/mapValues.js create mode 100644 www/node_modules/lodash/matches.js create mode 100644 www/node_modules/lodash/matchesProperty.js create mode 100644 www/node_modules/lodash/math.js create mode 100644 www/node_modules/lodash/max.js create mode 100644 www/node_modules/lodash/maxBy.js create mode 100644 www/node_modules/lodash/mean.js create mode 100644 www/node_modules/lodash/memoize.js create mode 100644 www/node_modules/lodash/merge.js create mode 100644 www/node_modules/lodash/mergeWith.js create mode 100644 www/node_modules/lodash/method.js create mode 100644 www/node_modules/lodash/methodOf.js create mode 100644 www/node_modules/lodash/min.js create mode 100644 www/node_modules/lodash/minBy.js create mode 100644 www/node_modules/lodash/mixin.js create mode 100644 www/node_modules/lodash/negate.js create mode 100644 www/node_modules/lodash/next.js create mode 100644 www/node_modules/lodash/noop.js create mode 100644 www/node_modules/lodash/now.js create mode 100644 www/node_modules/lodash/nthArg.js create mode 100644 www/node_modules/lodash/number.js create mode 100644 www/node_modules/lodash/object.js create mode 100644 www/node_modules/lodash/omit.js create mode 100644 www/node_modules/lodash/omitBy.js create mode 100644 www/node_modules/lodash/once.js create mode 100644 www/node_modules/lodash/orderBy.js create mode 100644 www/node_modules/lodash/over.js create mode 100644 www/node_modules/lodash/overArgs.js create mode 100644 www/node_modules/lodash/overEvery.js create mode 100644 www/node_modules/lodash/overSome.js create mode 100644 www/node_modules/lodash/package.json create mode 100644 www/node_modules/lodash/pad.js create mode 100644 www/node_modules/lodash/padEnd.js create mode 100644 www/node_modules/lodash/padStart.js create mode 100644 www/node_modules/lodash/parseInt.js create mode 100644 www/node_modules/lodash/partial.js create mode 100644 www/node_modules/lodash/partialRight.js create mode 100644 www/node_modules/lodash/partition.js create mode 100644 www/node_modules/lodash/pick.js create mode 100644 www/node_modules/lodash/pickBy.js create mode 100644 www/node_modules/lodash/plant.js create mode 100644 www/node_modules/lodash/property.js create mode 100644 www/node_modules/lodash/propertyOf.js create mode 100644 www/node_modules/lodash/pull.js create mode 100644 www/node_modules/lodash/pullAll.js create mode 100644 www/node_modules/lodash/pullAllBy.js create mode 100644 www/node_modules/lodash/pullAllWith.js create mode 100644 www/node_modules/lodash/pullAt.js create mode 100644 www/node_modules/lodash/random.js create mode 100644 www/node_modules/lodash/range.js create mode 100644 www/node_modules/lodash/rangeRight.js create mode 100644 www/node_modules/lodash/rearg.js create mode 100644 www/node_modules/lodash/reduce.js create mode 100644 www/node_modules/lodash/reduceRight.js create mode 100644 www/node_modules/lodash/reject.js create mode 100644 www/node_modules/lodash/remove.js create mode 100644 www/node_modules/lodash/repeat.js create mode 100644 www/node_modules/lodash/replace.js create mode 100644 www/node_modules/lodash/rest.js create mode 100644 www/node_modules/lodash/result.js create mode 100644 www/node_modules/lodash/reverse.js create mode 100644 www/node_modules/lodash/round.js create mode 100644 www/node_modules/lodash/sample.js create mode 100644 www/node_modules/lodash/sampleSize.js create mode 100644 www/node_modules/lodash/seq.js create mode 100644 www/node_modules/lodash/set.js create mode 100644 www/node_modules/lodash/setWith.js create mode 100644 www/node_modules/lodash/shuffle.js create mode 100644 www/node_modules/lodash/size.js create mode 100644 www/node_modules/lodash/slice.js create mode 100644 www/node_modules/lodash/snakeCase.js create mode 100644 www/node_modules/lodash/some.js create mode 100644 www/node_modules/lodash/sortBy.js create mode 100644 www/node_modules/lodash/sortedIndex.js create mode 100644 www/node_modules/lodash/sortedIndexBy.js create mode 100644 www/node_modules/lodash/sortedIndexOf.js create mode 100644 www/node_modules/lodash/sortedLastIndex.js create mode 100644 www/node_modules/lodash/sortedLastIndexBy.js create mode 100644 www/node_modules/lodash/sortedLastIndexOf.js create mode 100644 www/node_modules/lodash/sortedUniq.js create mode 100644 www/node_modules/lodash/sortedUniqBy.js create mode 100644 www/node_modules/lodash/split.js create mode 100644 www/node_modules/lodash/spread.js create mode 100644 www/node_modules/lodash/startCase.js create mode 100644 www/node_modules/lodash/startsWith.js create mode 100644 www/node_modules/lodash/string.js create mode 100644 www/node_modules/lodash/subtract.js create mode 100644 www/node_modules/lodash/sum.js create mode 100644 www/node_modules/lodash/sumBy.js create mode 100644 www/node_modules/lodash/tail.js create mode 100644 www/node_modules/lodash/take.js create mode 100644 www/node_modules/lodash/takeRight.js create mode 100644 www/node_modules/lodash/takeRightWhile.js create mode 100644 www/node_modules/lodash/takeWhile.js create mode 100644 www/node_modules/lodash/tap.js create mode 100644 www/node_modules/lodash/template.js create mode 100644 www/node_modules/lodash/templateSettings.js create mode 100644 www/node_modules/lodash/throttle.js create mode 100644 www/node_modules/lodash/thru.js create mode 100644 www/node_modules/lodash/times.js create mode 100644 www/node_modules/lodash/toArray.js create mode 100644 www/node_modules/lodash/toInteger.js create mode 100644 www/node_modules/lodash/toIterator.js create mode 100644 www/node_modules/lodash/toJSON.js create mode 100644 www/node_modules/lodash/toLength.js create mode 100644 www/node_modules/lodash/toLower.js create mode 100644 www/node_modules/lodash/toNumber.js create mode 100644 www/node_modules/lodash/toPairs.js create mode 100644 www/node_modules/lodash/toPairsIn.js create mode 100644 www/node_modules/lodash/toPath.js create mode 100644 www/node_modules/lodash/toPlainObject.js create mode 100644 www/node_modules/lodash/toSafeInteger.js create mode 100644 www/node_modules/lodash/toString.js create mode 100644 www/node_modules/lodash/toUpper.js create mode 100644 www/node_modules/lodash/transform.js create mode 100644 www/node_modules/lodash/trim.js create mode 100644 www/node_modules/lodash/trimEnd.js create mode 100644 www/node_modules/lodash/trimStart.js create mode 100644 www/node_modules/lodash/truncate.js create mode 100644 www/node_modules/lodash/unary.js create mode 100644 www/node_modules/lodash/unescape.js create mode 100644 www/node_modules/lodash/union.js create mode 100644 www/node_modules/lodash/unionBy.js create mode 100644 www/node_modules/lodash/unionWith.js create mode 100644 www/node_modules/lodash/uniq.js create mode 100644 www/node_modules/lodash/uniqBy.js create mode 100644 www/node_modules/lodash/uniqWith.js create mode 100644 www/node_modules/lodash/uniqueId.js create mode 100644 www/node_modules/lodash/unset.js create mode 100644 www/node_modules/lodash/unzip.js create mode 100644 www/node_modules/lodash/unzipWith.js create mode 100644 www/node_modules/lodash/update.js create mode 100644 www/node_modules/lodash/updateWith.js create mode 100644 www/node_modules/lodash/upperCase.js create mode 100644 www/node_modules/lodash/upperFirst.js create mode 100644 www/node_modules/lodash/util.js create mode 100644 www/node_modules/lodash/value.js create mode 100644 www/node_modules/lodash/valueOf.js create mode 100644 www/node_modules/lodash/values.js create mode 100644 www/node_modules/lodash/valuesIn.js create mode 100644 www/node_modules/lodash/without.js create mode 100644 www/node_modules/lodash/words.js create mode 100644 www/node_modules/lodash/wrap.js create mode 100644 www/node_modules/lodash/wrapperAt.js create mode 100644 www/node_modules/lodash/wrapperChain.js create mode 100644 www/node_modules/lodash/wrapperFlatMap.js create mode 100644 www/node_modules/lodash/wrapperLodash.js create mode 100644 www/node_modules/lodash/wrapperReverse.js create mode 100644 www/node_modules/lodash/wrapperValue.js create mode 100644 www/node_modules/lodash/xor.js create mode 100644 www/node_modules/lodash/xorBy.js create mode 100644 www/node_modules/lodash/xorWith.js create mode 100644 www/node_modules/lodash/zip.js create mode 100644 www/node_modules/lodash/zipObject.js create mode 100644 www/node_modules/lodash/zipObjectDeep.js create mode 100644 www/node_modules/lodash/zipWith.js create mode 100644 www/node_modules/lru-cache/.npmignore create mode 100644 www/node_modules/lru-cache/.travis.yml create mode 100644 www/node_modules/lru-cache/CONTRIBUTORS create mode 100644 www/node_modules/lru-cache/LICENSE create mode 100644 www/node_modules/lru-cache/README.md create mode 100644 www/node_modules/lru-cache/lib/lru-cache.js create mode 100644 www/node_modules/lru-cache/package.json create mode 100644 www/node_modules/lru-cache/test/basic.js create mode 100644 www/node_modules/lru-cache/test/foreach.js create mode 100644 www/node_modules/lru-cache/test/memory-leak.js create mode 100644 www/node_modules/lru-cache/test/serialize.js create mode 100644 www/node_modules/minimatch/LICENSE create mode 100644 www/node_modules/minimatch/README.md create mode 100644 www/node_modules/minimatch/minimatch.js create mode 100644 www/node_modules/minimatch/package.json create mode 100644 www/node_modules/once/LICENSE create mode 100644 www/node_modules/once/README.md create mode 100644 www/node_modules/once/once.js create mode 100644 www/node_modules/once/package.json create mode 100644 www/node_modules/options/.npmignore create mode 100644 www/node_modules/options/Makefile create mode 100644 www/node_modules/options/README.md create mode 100644 www/node_modules/options/lib/options.js create mode 100644 www/node_modules/options/package.json create mode 100644 www/node_modules/path-is-absolute/index.js create mode 100644 www/node_modules/path-is-absolute/license create mode 100644 www/node_modules/path-is-absolute/package.json create mode 100644 www/node_modules/path-is-absolute/readme.md create mode 100644 www/node_modules/rimraf/LICENSE create mode 100644 www/node_modules/rimraf/README.md create mode 100755 www/node_modules/rimraf/bin.js create mode 100644 www/node_modules/rimraf/package.json create mode 100644 www/node_modules/rimraf/rimraf.js create mode 100644 www/node_modules/sax/AUTHORS create mode 100644 www/node_modules/sax/LICENSE create mode 100644 www/node_modules/sax/LICENSE-W3C.html create mode 100644 www/node_modules/sax/README.md create mode 100644 www/node_modules/sax/examples/big-not-pretty.xml create mode 100644 www/node_modules/sax/examples/example.js create mode 100644 www/node_modules/sax/examples/get-products.js create mode 100644 www/node_modules/sax/examples/hello-world.js create mode 100644 www/node_modules/sax/examples/not-pretty.xml create mode 100644 www/node_modules/sax/examples/pretty-print.js create mode 100644 www/node_modules/sax/examples/shopping.xml create mode 100644 www/node_modules/sax/examples/strict.dtd create mode 100644 www/node_modules/sax/examples/test.html create mode 100644 www/node_modules/sax/examples/test.xml create mode 100644 www/node_modules/sax/lib/sax.js create mode 100644 www/node_modules/sax/package.json create mode 100644 www/node_modules/sax/test/attribute-name.js create mode 100644 www/node_modules/sax/test/attribute-no-space.js create mode 100644 www/node_modules/sax/test/buffer-overrun.js create mode 100644 www/node_modules/sax/test/case.js create mode 100644 www/node_modules/sax/test/cdata-chunked.js create mode 100644 www/node_modules/sax/test/cdata-end-split.js create mode 100644 www/node_modules/sax/test/cdata-fake-end.js create mode 100644 www/node_modules/sax/test/cdata-multiple.js create mode 100644 www/node_modules/sax/test/cdata.js create mode 100644 www/node_modules/sax/test/cyrillic.js create mode 100644 www/node_modules/sax/test/duplicate-attribute.js create mode 100644 www/node_modules/sax/test/emoji.js create mode 100644 www/node_modules/sax/test/end_empty_stream.js create mode 100644 www/node_modules/sax/test/entities.js create mode 100644 www/node_modules/sax/test/entity-mega.js create mode 100644 www/node_modules/sax/test/flush.js create mode 100644 www/node_modules/sax/test/index.js create mode 100644 www/node_modules/sax/test/issue-23.js create mode 100644 www/node_modules/sax/test/issue-30.js create mode 100644 www/node_modules/sax/test/issue-35.js create mode 100644 www/node_modules/sax/test/issue-47.js create mode 100644 www/node_modules/sax/test/issue-49.js create mode 100644 www/node_modules/sax/test/issue-84.js create mode 100644 www/node_modules/sax/test/parser-position.js create mode 100644 www/node_modules/sax/test/script-close-better.js create mode 100644 www/node_modules/sax/test/script.js create mode 100644 www/node_modules/sax/test/self-closing-child-strict.js create mode 100644 www/node_modules/sax/test/self-closing-child.js create mode 100644 www/node_modules/sax/test/self-closing-tag.js create mode 100644 www/node_modules/sax/test/stray-ending.js create mode 100644 www/node_modules/sax/test/trailing-attribute-no-value.js create mode 100644 www/node_modules/sax/test/trailing-non-whitespace.js create mode 100644 www/node_modules/sax/test/unclosed-root.js create mode 100644 www/node_modules/sax/test/unquoted.js create mode 100644 www/node_modules/sax/test/utf8-split.js create mode 100644 www/node_modules/sax/test/xmlns-as-tag-name.js create mode 100644 www/node_modules/sax/test/xmlns-issue-41.js create mode 100644 www/node_modules/sax/test/xmlns-rebinding.js create mode 100644 www/node_modules/sax/test/xmlns-strict.js create mode 100644 www/node_modules/sax/test/xmlns-unbound-element.js create mode 100644 www/node_modules/sax/test/xmlns-unbound.js create mode 100644 www/node_modules/sax/test/xmlns-xml-default-ns.js create mode 100644 www/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js create mode 100644 www/node_modules/sax/test/xmlns-xml-default-prefix.js create mode 100644 www/node_modules/sax/test/xmlns-xml-default-redefine.js create mode 100644 www/node_modules/selenium-webdriver/.npmignore create mode 100644 www/node_modules/selenium-webdriver/CHANGES.md create mode 100644 www/node_modules/selenium-webdriver/LICENSE create mode 100644 www/node_modules/selenium-webdriver/NOTICE create mode 100644 www/node_modules/selenium-webdriver/README.md create mode 100644 www/node_modules/selenium-webdriver/builder.js create mode 100644 www/node_modules/selenium-webdriver/chrome.js create mode 100644 www/node_modules/selenium-webdriver/edge.js create mode 100644 www/node_modules/selenium-webdriver/error.js create mode 100644 www/node_modules/selenium-webdriver/example/chrome_android.js create mode 100644 www/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js create mode 100644 www/node_modules/selenium-webdriver/example/google_search.js create mode 100644 www/node_modules/selenium-webdriver/example/google_search_generator.js create mode 100644 www/node_modules/selenium-webdriver/example/google_search_test.js create mode 100644 www/node_modules/selenium-webdriver/example/logging.js create mode 100644 www/node_modules/selenium-webdriver/example/parallel_flows.js create mode 100644 www/node_modules/selenium-webdriver/executors.js create mode 100644 www/node_modules/selenium-webdriver/firefox/binary.js create mode 100644 www/node_modules/selenium-webdriver/firefox/extension.js create mode 100644 www/node_modules/selenium-webdriver/firefox/index.js create mode 100644 www/node_modules/selenium-webdriver/firefox/profile.js create mode 100644 www/node_modules/selenium-webdriver/http/index.js create mode 100644 www/node_modules/selenium-webdriver/http/util.js create mode 100644 www/node_modules/selenium-webdriver/ie.js create mode 100644 www/node_modules/selenium-webdriver/index.js create mode 100644 www/node_modules/selenium-webdriver/io/exec.js create mode 100644 www/node_modules/selenium-webdriver/io/index.js create mode 100644 www/node_modules/selenium-webdriver/lib/README create mode 100644 www/node_modules/selenium-webdriver/lib/actions.js create mode 100644 www/node_modules/selenium-webdriver/lib/by.js create mode 100644 www/node_modules/selenium-webdriver/lib/capabilities.js create mode 100644 www/node_modules/selenium-webdriver/lib/command.js create mode 100644 www/node_modules/selenium-webdriver/lib/devmode.js create mode 100644 www/node_modules/selenium-webdriver/lib/events.js create mode 100644 www/node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so create mode 100644 www/node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so create mode 100644 www/node_modules/selenium-webdriver/lib/firefox/webdriver.json create mode 100644 www/node_modules/selenium-webdriver/lib/firefox/webdriver.xpi create mode 100644 www/node_modules/selenium-webdriver/lib/input.js create mode 100644 www/node_modules/selenium-webdriver/lib/logging.js create mode 100644 www/node_modules/selenium-webdriver/lib/promise.js create mode 100644 www/node_modules/selenium-webdriver/lib/safari/client.js create mode 100644 www/node_modules/selenium-webdriver/lib/session.js create mode 100644 www/node_modules/selenium-webdriver/lib/symbols.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/build.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/ClickTest_testClicksASurroundingStrongTag.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/Page.aspx create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/Page.aspx.cs create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/Web.Config create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/alerts.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/banner.gif create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/beach.jpg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/blank.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/child/childPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/clickEventPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_frames.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_jacker.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_rtl.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_source.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/disappearing_element.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/google_map.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/google_map.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/html5_submit_buttons.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_too_big.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/clicks.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/closeable_window.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/cn-test.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/colorPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/cookies.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/cssTransform.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/cssTransform2.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/draggableLists.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/droppableItems.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/dynamic.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/errors.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/firefox/jetpack-sample.xpi create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/firefox/sample.xpi create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/formPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/framePage3.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/frameset.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/framesetPage2.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/framesetPage3.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/globalscope.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/hidden.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5/blue.jpg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5/database.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5/green.jpg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5/red.jpg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5/status.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5/test.appcache create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5/yellow.jpg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/html5Page.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/icon.gif create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/iframeWithAlert.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/iframeWithIframe.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/iframes.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/injectableContent.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/javascriptEnhancedForm.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/javascriptPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/jquery-1.3.2.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/jquery-1.4.4.min.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/jquery-ui-1.8.10.custom.min.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.svg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.eot create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.woff create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/anchor.gif create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/loader.gif create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/object.gif create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/trans.gif create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.ie7.min.css create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/js/tinymce.min.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/key_tests/remove_on_keypress.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/linked_image.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/longContentPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/macbeth.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/map.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/map_visibility.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/markerTransparent.png create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/messages.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/meta-redirect.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/missedJsReference.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/mouseOver.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/nestedElements.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow-body.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/plain.txt create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/proxy/page1.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/proxy/page2.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/proxy/page3.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/rectangles.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/resultPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/rich_text.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen.css create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scroll.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scroll2.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scroll3.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scroll4.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scroll5.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/selectPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/selectableItems.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/sessionCookie.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/simple.xml create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/simpleTest.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/styledPage.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/svgTest.svg create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/tables.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/tinymce.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/transformable.xml create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/transformable.xsl create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/transparentUpload.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/underscore.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/upload.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/visibility-css.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/win32frameset.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml create mode 100644 www/node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html create mode 100644 www/node_modules/selenium-webdriver/lib/test/fileserver.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/httpserver.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/index.js create mode 100644 www/node_modules/selenium-webdriver/lib/test/resources.js create mode 100644 www/node_modules/selenium-webdriver/lib/until.js create mode 100644 www/node_modules/selenium-webdriver/lib/webdriver.js create mode 100644 www/node_modules/selenium-webdriver/net/index.js create mode 100644 www/node_modules/selenium-webdriver/net/portprober.js create mode 100644 www/node_modules/selenium-webdriver/opera.js create mode 100644 www/node_modules/selenium-webdriver/package.json create mode 100644 www/node_modules/selenium-webdriver/phantomjs.js create mode 100644 www/node_modules/selenium-webdriver/proxy.js create mode 100644 www/node_modules/selenium-webdriver/remote/index.js create mode 100644 www/node_modules/selenium-webdriver/safari.js create mode 100644 www/node_modules/selenium-webdriver/test/actions_test.js create mode 100644 www/node_modules/selenium-webdriver/test/chrome/options_test.js create mode 100644 www/node_modules/selenium-webdriver/test/chrome/service_test.js create mode 100644 www/node_modules/selenium-webdriver/test/cookie_test.js create mode 100644 www/node_modules/selenium-webdriver/test/element_finding_test.js create mode 100644 www/node_modules/selenium-webdriver/test/error_test.js create mode 100644 www/node_modules/selenium-webdriver/test/execute_script_test.js create mode 100644 www/node_modules/selenium-webdriver/test/fingerprint_test.js create mode 100644 www/node_modules/selenium-webdriver/test/firefox/extension_test.js create mode 100644 www/node_modules/selenium-webdriver/test/firefox/firefox_test.js create mode 100644 www/node_modules/selenium-webdriver/test/firefox/profile_test.js create mode 100644 www/node_modules/selenium-webdriver/test/http/http_test.js create mode 100644 www/node_modules/selenium-webdriver/test/http/util_test.js create mode 100644 www/node_modules/selenium-webdriver/test/io_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/by_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/capabilities_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/events_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/logging_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/promise_aplus_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/promise_error_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/promise_flow_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/promise_generator_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/promise_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/testutil.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/until_test.js create mode 100644 www/node_modules/selenium-webdriver/test/lib/webdriver_test.js create mode 100644 www/node_modules/selenium-webdriver/test/logging_test.js create mode 100644 www/node_modules/selenium-webdriver/test/net/portprober_test.js create mode 100644 www/node_modules/selenium-webdriver/test/page_loading_test.js create mode 100644 www/node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js create mode 100644 www/node_modules/selenium-webdriver/test/proxy_test.js create mode 100644 www/node_modules/selenium-webdriver/test/remote_test.js create mode 100644 www/node_modules/selenium-webdriver/test/stale_element_test.js create mode 100644 www/node_modules/selenium-webdriver/test/tag_name_test.js create mode 100644 www/node_modules/selenium-webdriver/test/testing/assert_test.js create mode 100644 www/node_modules/selenium-webdriver/test/testing/index_test.js create mode 100644 www/node_modules/selenium-webdriver/test/upload_test.js create mode 100644 www/node_modules/selenium-webdriver/test/window_test.js create mode 100644 www/node_modules/selenium-webdriver/testing/assert.js create mode 100644 www/node_modules/selenium-webdriver/testing/index.js create mode 100644 www/node_modules/sigmund/LICENSE create mode 100644 www/node_modules/sigmund/README.md create mode 100644 www/node_modules/sigmund/bench.js create mode 100644 www/node_modules/sigmund/package.json create mode 100644 www/node_modules/sigmund/sigmund.js create mode 100644 www/node_modules/sigmund/test/basic.js create mode 100644 www/node_modules/tmp/.npmignore create mode 100644 www/node_modules/tmp/.travis.yml create mode 100644 www/node_modules/tmp/README.md create mode 100644 www/node_modules/tmp/domain-test.js create mode 100644 www/node_modules/tmp/lib/tmp.js create mode 100644 www/node_modules/tmp/package.json create mode 100755 www/node_modules/tmp/test-all.sh create mode 100644 www/node_modules/tmp/test.js create mode 100644 www/node_modules/tmp/test/base.js create mode 100644 www/node_modules/tmp/test/dir-test.js create mode 100644 www/node_modules/tmp/test/file-test.js create mode 100644 www/node_modules/tmp/test/graceful.js create mode 100644 www/node_modules/tmp/test/keep.js create mode 100644 www/node_modules/tmp/test/name-test.js create mode 100644 www/node_modules/tmp/test/spawn.js create mode 100644 www/node_modules/tmp/test/symlinkme/file.js create mode 100644 www/node_modules/tmp/test/unsafe.js create mode 100644 www/node_modules/ultron/.npmignore create mode 100644 www/node_modules/ultron/.travis.yml create mode 100644 www/node_modules/ultron/LICENSE create mode 100644 www/node_modules/ultron/README.md create mode 100644 www/node_modules/ultron/index.js create mode 100644 www/node_modules/ultron/package.json create mode 100644 www/node_modules/ultron/test.js create mode 100644 www/node_modules/wrappy/LICENSE create mode 100644 www/node_modules/wrappy/README.md create mode 100644 www/node_modules/wrappy/package.json create mode 100644 www/node_modules/wrappy/test/basic.js create mode 100644 www/node_modules/wrappy/wrappy.js create mode 100644 www/node_modules/ws/.npmignore create mode 100644 www/node_modules/ws/.travis.yml create mode 100644 www/node_modules/ws/Makefile create mode 100644 www/node_modules/ws/README.md create mode 100644 www/node_modules/ws/index.js create mode 100644 www/node_modules/ws/lib/BufferPool.js create mode 100644 www/node_modules/ws/lib/BufferUtil.fallback.js create mode 100644 www/node_modules/ws/lib/BufferUtil.js create mode 100644 www/node_modules/ws/lib/ErrorCodes.js create mode 100644 www/node_modules/ws/lib/Extensions.js create mode 100644 www/node_modules/ws/lib/PerMessageDeflate.js create mode 100644 www/node_modules/ws/lib/Receiver.hixie.js create mode 100644 www/node_modules/ws/lib/Receiver.js create mode 100644 www/node_modules/ws/lib/Sender.hixie.js create mode 100644 www/node_modules/ws/lib/Sender.js create mode 100644 www/node_modules/ws/lib/Validation.fallback.js create mode 100644 www/node_modules/ws/lib/Validation.js create mode 100644 www/node_modules/ws/lib/WebSocket.js create mode 100644 www/node_modules/ws/lib/WebSocketServer.js create mode 100644 www/node_modules/ws/package.json create mode 100644 www/node_modules/xml2js/.npmignore create mode 100644 www/node_modules/xml2js/.travis.yml create mode 100644 www/node_modules/xml2js/83.coffee create mode 100644 www/node_modules/xml2js/CONTRIBUTING.md create mode 100644 www/node_modules/xml2js/LICENSE create mode 100644 www/node_modules/xml2js/README.md create mode 100644 www/node_modules/xml2js/canon.xml create mode 100644 www/node_modules/xml2js/incompat.coffee create mode 100644 www/node_modules/xml2js/incompat2.js create mode 100644 www/node_modules/xml2js/lib/bom.js create mode 100644 www/node_modules/xml2js/lib/processors.js create mode 100644 www/node_modules/xml2js/lib/xml2js.js create mode 100644 www/node_modules/xml2js/package.json create mode 100644 www/node_modules/xml2js/text.coffee create mode 100644 www/node_modules/xml2js/text.xml create mode 100644 www/node_modules/xml2js/x.js create mode 100644 www/node_modules/xmlbuilder/.npmignore create mode 100644 www/node_modules/xmlbuilder/CHANGELOG.md create mode 100644 www/node_modules/xmlbuilder/LICENSE create mode 100644 www/node_modules/xmlbuilder/README.md create mode 100644 www/node_modules/xmlbuilder/lib/XMLAttribute.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLBuilder.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLCData.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLComment.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLDTDAttList.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLDTDElement.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLDTDEntity.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLDTDNotation.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLDeclaration.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLDocType.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLElement.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLNode.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLRaw.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLStringifier.js create mode 100644 www/node_modules/xmlbuilder/lib/XMLText.js create mode 100644 www/node_modules/xmlbuilder/lib/index.js create mode 100644 www/node_modules/xmlbuilder/package.json create mode 100644 www/package.json create mode 100644 www/spec/UI-help-test.js create mode 100644 www/spec/UI-home-test.js create mode 100644 www/spec/UI-reports-test.js create mode 100644 www/spec/UI-schedule-test.js create mode 100644 www/spec/UI-settings-test.js create mode 100644 www/spec/support/jasmine.json diff --git a/config.xml b/config.xml index cac3e8d..611c0e0 100644 --- a/config.xml +++ b/config.xml @@ -8,6 +8,7 @@ Adam Don + diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index 50dd3a80244d419a6ecda82229bd2e94047e1775..0678f258dad9b4f2ede77f83a7bbb74a2fcd1366 100644 GIT binary patch literal 17 VcmZQBkvw$J`yw9~0~m;f0st#Y1G4}C literal 17 VcmZQBkvw$J`yw9~0~iRz001jR1GE4D diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index 461f46c7dc4264ef03821fb729a3247e260a9c6b..ab7d8378c38fd956273023e209fdd50dcd32d740 100644 GIT binary patch delta 21732 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 delta 3479 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 delta 2337 zcmah}3sh9q8b0UjGcX9j864mUI1En-VIGtT7uS^}6A5hyFcW;>BLyR02&7@)h)W3q z*<7}Q#mfg?Q9+-C%XTJH)x4-{C|NhR@ z>f8?h+akl_6C*-@0o8Htvxmo2>vryYOu)@)e`1h%n#1Ef57e1YF+4>OR=qq=E8isu zCx0G`jMF(>FYv$AarlZJH@m3ICh@&~m-d0lAFmBHa!m-L-nv5PKQUX7SFR@eETJzM z2W6~-Yf>iEW#>7q;;l)mmhp*ePoS4sjd^wz&x5{rn8?bROgr$C-O1X*i)v+0&q zY+ml$fOH#K*h<8193`(>0KhvCPBN`k=!{iH*XI%NL*lvq#_+ zF0hN^Rdy^RjY{gSc5B_q-ynw#ps!sb!+zIbdA9wAk|$~70@!M&VP>A#+qZLhdW=9` z_yelsa>jF8dVg92c%LV!mQSI-+}rH;-Cj|Zat$1jv(VQ*1Kzb~nXn(O z?@CyZbCDO2KUu>OdkwSNB>2vqlb?I=q)4>{E_Ki_kxsK0c7K&RF*WN(nD3D2yJe^L zH-qV-iMa)bjy9oqL;K9f2{E*zt1-0GEWZ>#_07kAOz+AMA6tZ68KRlu#Yy! zT9%qm(R2JmO;Ot#gIe6(O}d$jIsJ?FVDTu~D8n-wC@IM-F6xROT=a8BfpcJ=ym)^F z+L8fYMmv>2N`HT((-svRrWc~B5mIU{A#MkMw&kN6M`G2vCB2l_;~0E%gcOtXlA5v} zWPgoPpynpp8K1sN1yDFhPWhRuS?=^&dqPG-dssOw(gwn+#g#vsi_D>C(J9;nQ z0~M&j`!+yA+_yaMV3+k;*sU3op_rP>d-bE7yUgMeQU_BqCS^<#H_v_KAD#~j$3D|G zEPUEJSU2X4G8(Bk@$%$fZVr?MXYrPb=UCQ_1Rq@x7y@fSVgG@1t@QNoSzB<^glM&W{3fz%p+f0z_l;Vi?X6U-csNl&kbTRMX`u`m+#1`lpU*Y~g z|4R_2Kj;^3y$rCS5QTv2RCkDQplF^Fgo&PTMW3LgHmb)}LJZ4dqE8=xRNtToXw<#A zr%K$i>Usz_7c8Z^95HQ4e|Pi&+4Cb z=k>DW|IF`Vdn-D>{@E`$xq@q&AR2v^+07810q+l@>PfufRWQTSi2afvxTS7KNw>*B zlpiNH#x+V>V~8~6pckDvX~f`}zkw%aNE0rW;JItST{lMU`N(;lqtu73Oo{VN&Q9CU6g4Z$*Uve6DOBH6{R4S`5T<9d{WMHdU{!UNzHgF7 zyZXQo`)nfgM*X47-*{nOPG@p`{Uwq1Tq1R$i~VGgSJUQR$R(q!{P@1yOAfs!j7liE z{$I9hhsk#uycH<*{1NZv`jUh44|)-)qCE7k=Ts!KrFJlPqS!q?gIUt>l4z@23e(NP zSPYa)kB!@YfyyGlGL$jf&>BCO1wNo~+#%p*jsw$yC5gDRFnjvUbaeECOcZoV^da`? zq0&t7CK2Ufgq7cbTmwTp7lN>JAyH|I*bgOI0~PLxr)P`t+bczFBvMT=+=0el2NIm1 zr5&aC@m;W&e%>MbQdm9!_S+b-6N{1FAiR{p504qx zlGvRTX g*wswGYk>29r@u8p&9O!jym%WuRfOMBiLN;P4^tvk+W-In diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin index c6b4fd32ee5128bb9eb74673a9676bebf84ecd50..6bcc79bea5b6a0e03971efc558664a41055be432 100644 GIT binary patch delta 26 hcmX@NnDN|V#tr)d1s;_Jt~&pBLj?m6Fn@e$1puz@3=#kU delta 26 gcmX@NnDN|V#tr)d1w48J?f<-7pvwRRp3h7i0G_!DZ2$lO diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin index b8993bdf117093569f770b7afa01da89904ddea6..f76eb05bb427082bcf8154c3fe08a1707220c686 100644 GIT binary patch delta 590 zcmX^5iuvd(<_-T>3WhJ`6PskTx%tcYKg%Y5TNk{4^1>x5o8=eDF$(^0^H{xF(B(k% zdf|`B?aIAKQhAq^BNuG{7{PaJe{_KOLN%C_5+loB%|#z3H?C5jeEu~5=C^VAjGLFP zcjpm^`(0hlm)%jhsI_?o-`gV5$rldH5%Bzy<+Z5f=x5gb{sQ;BFX({a<&{hJT$(_s^kS(kp=alP#7M=E@q=V%@| zvU$Oh1B{a&oUxlcp^am*!zrW53CkiTH&O2X zdD@E$axzPb*Suw5EttHqHDvOfx$=_@+JrV&J=@15;97Df{96C3%BNvIF8QjW?NEI; znSjQYFbT{G@|@-m8eo4zJ=S_rIP84JtK8!G}ISmYTo4+`U_aWyYWF zA=ALhH#fZ8$vAn>S+33IpAEr`$pzO>3m$3pIk2-?^8@!}y@Zb|4^P6a_B_jitHz!H DKj9{X delta 548 zcmX^5iuvd(<_-T>3I_eOJ3jNHXZyP-Wxa?Lk^TE8FI=LsS$>fmqu_>^*_*HM3L5RZ z(BM-zbN^H%sn;LB%WPfg7F-r;B{2vUTaS=+$o~z1fqndBKuvOaiW4Ofz+KR@+XT`#>-JqMkEQG>mDo+}Rcu;aQ)5 zPhR*%Y;xWQuFdD3VZZaxGHveqM2x3gG zdvjVaDQ{8mwzC@@5=x}g{#FXv5Kz84_Hh1sM^~LouY-j2r%joSUpWT@5FBK`ychs= Ckr1Z< diff --git a/platforms/android/android.json b/platforms/android/android.json index 6056325..b5f44e5 100644 --- a/platforms/android/android.json +++ b/platforms/android/android.json @@ -141,6 +141,15 @@ }, "de.appplant.cordova.plugin.local-notification": { "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-device-tests": { + "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-device-motion-tests": { + "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-test-framework": { + "PACKAGE_NAME": "com.adamdon.sw" } }, "dependent_plugins": {}, @@ -237,6 +246,30 @@ "cordova.plugins.notification.local.core", "plugin.notification.local.core" ] + }, + { + "file": "plugins/cordova-plugin-device-tests/tests.js", + "id": "cordova-plugin-device-tests.tests" + }, + { + "file": "plugins/cordova-plugin-device-motion-tests/tests.js", + "id": "cordova-plugin-device-motion-tests.tests" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/tests.js", + "id": "cordova-plugin-test-framework.cdvtests" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/jasmine_helpers.js", + "id": "cordova-plugin-test-framework.jasmine_helpers" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/medic.js", + "id": "cordova-plugin-test-framework.medic" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/main.js", + "id": "cordova-plugin-test-framework.main" } ], "plugin_metadata": { @@ -249,6 +282,9 @@ "cordova-plugin-device-motion": "1.2.0", "cordova-plugin-dialogs": "1.2.0", "cordova-plugin-whitelist": "1.2.1", - "de.appplant.cordova.plugin.local-notification": "0.8.4" + "de.appplant.cordova.plugin.local-notification": "0.8.4", + "cordova-plugin-device-tests": "1.1.2-dev", + "cordova-plugin-device-motion-tests": "1.2.1-dev", + "cordova-plugin-test-framework": "1.1.2-dev" } } \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/index.html b/platforms/android/assets/www/cdvtests/index.html new file mode 100644 index 0000000..68460bc --- /dev/null +++ b/platforms/android/assets/www/cdvtests/index.html @@ -0,0 +1,63 @@ + + + + + + + + Cordova tests + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
Log
+
+
+ + diff --git a/platforms/android/assets/www/cdvtests/jasmine-2.2.0/boot.js b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/boot.js new file mode 100755 index 0000000..e8ddd55 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/boot.js @@ -0,0 +1,121 @@ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +(function() { + + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + window.jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. + */ + jasmineRequire.html(jasmine); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = jasmineRequire.interface(jasmine, env); + + /** + * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + if (typeof window == "undefined" && typeof exports == "object") { + extend(exports, jasmineInterface); + } else { + extend(window, jasmineInterface); + } + + /** + * ## Runner Parameters + * + * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. + */ + + var queryString = new jasmine.QueryString({ + getWindowLocation: function() { return window.location; } + }); + + var catchingExceptions = queryString.getParam("catch"); + env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions); + + /** + * ## Reporters + * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). + */ + var htmlReporter = new jasmine.HtmlReporter({ + env: env, + onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); }, + addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, + getContainer: function() { return document.body; }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmine.Timer() + }); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); + env.addReporter(htmlReporter); + + /** + * Filter which specs will be run by matching the start of the full name against the `spec` query param. + */ + var specFilter = new jasmine.HtmlSpecFilter({ + filterString: function() { return queryString.getParam("spec"); } + }); + + env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + + /** + * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. + */ + window.setTimeout = window.setTimeout; + window.setInterval = window.setInterval; + window.clearTimeout = window.clearTimeout; + window.clearInterval = window.clearInterval; + + /** + * ## Execution + * + * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. + */ + var currentWindowOnload = window.onload; + + window.onload = function() { + if (currentWindowOnload) { + currentWindowOnload(); + } + htmlReporter.initialize(); + env.execute(); + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + +}()); diff --git a/platforms/android/assets/www/cdvtests/jasmine-2.2.0/console.js b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/console.js new file mode 100755 index 0000000..e154806 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/console.js @@ -0,0 +1,190 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== 'undefined' && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().console = function(jRequire, j$) { + j$.ConsoleReporter = jRequire.ConsoleReporter(); +}; + +getJasmineRequireObj().ConsoleReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function ConsoleReporter(options) { + var print = options.print, + showColors = options.showColors || false, + onComplete = options.onComplete || function() {}, + timer = options.timer || noopTimer, + specCount, + failureCount, + failedSpecs = [], + pendingCount, + ansi = { + green: '\x1B[32m', + red: '\x1B[31m', + yellow: '\x1B[33m', + none: '\x1B[0m' + }, + failedSuites = []; + + print('ConsoleReporter is deprecated and will be removed in a future version.'); + + this.jasmineStarted = function() { + specCount = 0; + failureCount = 0; + pendingCount = 0; + print('Started'); + printNewline(); + timer.start(); + }; + + this.jasmineDone = function() { + printNewline(); + for (var i = 0; i < failedSpecs.length; i++) { + specFailureDetails(failedSpecs[i]); + } + + if(specCount > 0) { + printNewline(); + + var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' + + failureCount + ' ' + plural('failure', failureCount); + + if (pendingCount) { + specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount); + } + + print(specCounts); + } else { + print('No specs found'); + } + + printNewline(); + var seconds = timer.elapsed() / 1000; + print('Finished in ' + seconds + ' ' + plural('second', seconds)); + printNewline(); + + for(i = 0; i < failedSuites.length; i++) { + suiteFailureDetails(failedSuites[i]); + } + + onComplete(failureCount === 0); + }; + + this.specDone = function(result) { + specCount++; + + if (result.status == 'pending') { + pendingCount++; + print(colored('yellow', '*')); + return; + } + + if (result.status == 'passed') { + print(colored('green', '.')); + return; + } + + if (result.status == 'failed') { + failureCount++; + failedSpecs.push(result); + print(colored('red', 'F')); + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + failureCount++; + failedSuites.push(result); + } + }; + + return this; + + function printNewline() { + print('\n'); + } + + function colored(color, str) { + return showColors ? (ansi[color] + str + ansi.none) : str; + } + + function plural(str, count) { + return count == 1 ? str : str + 's'; + } + + function repeat(thing, times) { + var arr = []; + for (var i = 0; i < times; i++) { + arr.push(thing); + } + return arr; + } + + function indent(str, spaces) { + var lines = (str || '').split('\n'); + var newArr = []; + for (var i = 0; i < lines.length; i++) { + newArr.push(repeat(' ', spaces).join('') + lines[i]); + } + return newArr.join('\n'); + } + + function specFailureDetails(result) { + printNewline(); + print(result.fullName); + + for (var i = 0; i < result.failedExpectations.length; i++) { + var failedExpectation = result.failedExpectations[i]; + printNewline(); + print(indent(failedExpectation.message, 2)); + print(indent(failedExpectation.stack, 2)); + } + + printNewline(); + } + + function suiteFailureDetails(result) { + for (var i = 0; i < result.failedExpectations.length; i++) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', 'AfterAll ' + result.failedExpectations[i].message)); + + } + printNewline(); + } + } + + return ConsoleReporter; +}; diff --git a/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine-html.js b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine-html.js new file mode 100755 index 0000000..bee5a04 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine-html.js @@ -0,0 +1,416 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +jasmineRequire.html = function(j$) { + j$.ResultsNode = jasmineRequire.ResultsNode(); + j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); + j$.QueryString = jasmineRequire.QueryString(); + j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); +}; + +jasmineRequire.HtmlReporter = function(j$) { + + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + function HtmlReporter(options) { + var env = options.env || {}, + getContainer = options.getContainer, + createElement = options.createElement, + createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, + addToExistingQueryString = options.addToExistingQueryString || defaultQueryString, + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0, + htmlReporterMain, + symbols, + failedSuites = []; + + this.initialize = function() { + clearPrior(); + htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'}, + createDom('div', {className: 'banner'}, + createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}), + createDom('span', {className: 'version'}, j$.version) + ), + createDom('ul', {className: 'symbol-summary'}), + createDom('div', {className: 'alert'}), + createDom('div', {className: 'results'}, + createDom('div', {className: 'failures'}) + ) + ); + getContainer().appendChild(htmlReporterMain); + + symbols = find('.symbol-summary'); + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + var summary = createDom('div', {className: 'summary'}); + + var topResults = new j$.ResultsNode({}, '', null), + currentParent = topResults; + + this.suiteStarted = function(result) { + currentParent.addChild(result, 'suite'); + currentParent = currentParent.last(); + }; + + this.suiteDone = function(result) { + if (result.status == 'failed') { + failedSuites.push(result); + } + + if (currentParent == topResults) { + return; + } + + currentParent = currentParent.parent; + }; + + this.specStarted = function(result) { + currentParent.addChild(result, 'spec'); + }; + + var failures = []; + this.specDone = function(result) { + if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') { + console.error('Spec \'' + result.fullName + '\' has no expectations.'); + } + + if (result.status != 'disabled') { + specsExecuted++; + } + + symbols.appendChild(createDom('li', { + className: noExpectations(result) ? 'empty' : result.status, + id: 'spec_' + result.id, + title: result.fullName + } + )); + + if (result.status == 'failed') { + failureCount++; + + var failure = + createDom('div', {className: 'spec-detail failed'}, + createDom('div', {className: 'description'}, + createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName) + ), + createDom('div', {className: 'messages'}) + ); + var messages = failure.childNodes[1]; + + for (var i = 0; i < result.failedExpectations.length; i++) { + var expectation = result.failedExpectations[i]; + messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message)); + messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack)); + } + + failures.push(failure); + } + + if (result.status == 'pending') { + pendingSpecCount++; + } + }; + + this.jasmineDone = function() { + var banner = find('.banner'); + banner.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's')); + + var alert = find('.alert'); + + alert.appendChild(createDom('span', { className: 'exceptions' }, + createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions'), + createDom('input', { + className: 'raise', + id: 'raise-exceptions', + type: 'checkbox' + }) + )); + var checkbox = find('#raise-exceptions'); + + checkbox.checked = !env.catchingExceptions(); + checkbox.onclick = onRaiseExceptionsClick; + + if (specsExecuted < totalSpecsDefined) { + var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all'; + alert.appendChild( + createDom('span', {className: 'bar skipped'}, + createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage) + ) + ); + } + var statusBarMessage = ''; + var statusBarClassName = 'bar '; + + if (totalSpecsDefined > 0) { + statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount); + if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); } + statusBarClassName += (failureCount > 0) ? 'failed' : 'passed'; + } else { + statusBarClassName += 'skipped'; + statusBarMessage += 'No specs found'; + } + + alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage)); + + for(i = 0; i < failedSuites.length; i++) { + var failedSuite = failedSuites[i]; + for(var j = 0; j < failedSuite.failedExpectations.length; j++) { + var errorBarMessage = 'AfterAll ' + failedSuite.failedExpectations[j].message; + var errorBarClassName = 'bar errored'; + alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage)); + } + } + + var results = find('.results'); + results.appendChild(summary); + + summaryList(topResults, summary); + + function summaryList(resultsTree, domParent) { + var specListNode; + for (var i = 0; i < resultsTree.children.length; i++) { + var resultNode = resultsTree.children[i]; + if (resultNode.type == 'suite') { + var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id}, + createDom('li', {className: 'suite-detail'}, + createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description) + ) + ); + + summaryList(resultNode, suiteListNode); + domParent.appendChild(suiteListNode); + } + if (resultNode.type == 'spec') { + if (domParent.getAttribute('class') != 'specs') { + specListNode = createDom('ul', {className: 'specs'}); + domParent.appendChild(specListNode); + } + var specDescription = resultNode.result.description; + if(noExpectations(resultNode.result)) { + specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription; + } + if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') { + specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason; + } + specListNode.appendChild( + createDom('li', { + className: resultNode.result.status, + id: 'spec-' + resultNode.result.id + }, + createDom('a', {href: specHref(resultNode.result)}, specDescription) + ) + ); + } + } + } + + if (failures.length) { + alert.appendChild( + createDom('span', {className: 'menu bar spec-list'}, + createDom('span', {}, 'Spec List | '), + createDom('a', {className: 'failures-menu', href: '#'}, 'Failures'))); + alert.appendChild( + createDom('span', {className: 'menu bar failure-list'}, + createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'), + createDom('span', {}, ' | Failures '))); + + find('.failures-menu').onclick = function() { + setMenuModeTo('failure-list'); + }; + find('.spec-list-menu').onclick = function() { + setMenuModeTo('spec-list'); + }; + + setMenuModeTo('failure-list'); + + var failureNode = find('.failures'); + for (var i = 0; i < failures.length; i++) { + failureNode.appendChild(failures[i]); + } + } + }; + + return this; + + function find(selector) { + return getContainer().querySelector('.jasmine_html-reporter ' + selector); + } + + function clearPrior() { + // return the reporter + var oldReporter = find(''); + + if(oldReporter) { + getContainer().removeChild(oldReporter); + } + } + + function createDom(type, attrs, childrenVarArgs) { + var el = createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(createTextNode(child)); + } else { + if (child) { + el.appendChild(child); + } + } + } + + for (var attr in attrs) { + if (attr == 'className') { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; + } + + function pluralize(singular, count) { + var word = (count == 1 ? singular : singular + 's'); + + return '' + count + ' ' + word; + } + + function specHref(result) { + return addToExistingQueryString('spec', result.fullName); + } + + function defaultQueryString(key, value) { + return '?' + key + '=' + value; + } + + function setMenuModeTo(mode) { + htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode); + } + + function noExpectations(result) { + return (result.failedExpectations.length + result.passedExpectations.length) === 0 && + result.status === 'passed'; + } + } + + return HtmlReporter; +}; + +jasmineRequire.HtmlSpecFilter = function() { + function HtmlSpecFilter(options) { + var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; + } + + return HtmlSpecFilter; +}; + +jasmineRequire.ResultsNode = function() { + function ResultsNode(result, type, parent) { + this.result = result; + this.type = type; + this.parent = parent; + + this.children = []; + + this.addChild = function(result, type) { + this.children.push(new ResultsNode(result, type, this)); + }; + + this.last = function() { + return this.children[this.children.length - 1]; + }; + } + + return ResultsNode; +}; + +jasmineRequire.QueryString = function() { + function QueryString(options) { + + this.navigateWithNewParam = function(key, value) { + options.getWindowLocation().search = this.fullStringWithNewParam(key, value); + }; + + this.fullStringWithNewParam = function(key, value) { + var paramMap = queryStringToParamMap(); + paramMap[key] = value; + return toQueryString(paramMap); + }; + + this.getParam = function(key) { + return queryStringToParamMap()[key]; + }; + + return this; + + function toQueryString(paramMap) { + var qStrPairs = []; + for (var prop in paramMap) { + qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop])); + } + return '?' + qStrPairs.join('&'); + } + + function queryStringToParamMap() { + var paramStr = options.getWindowLocation().search.substring(1), + params = [], + paramMap = {}; + + if (paramStr.length > 0) { + params = paramStr.split('&'); + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + var value = decodeURIComponent(p[1]); + if (value === 'true' || value === 'false') { + value = JSON.parse(value); + } + paramMap[decodeURIComponent(p[0])] = value; + } + } + + return paramMap; + } + + } + + return QueryString; +}; diff --git a/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine.css b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine.css new file mode 100755 index 0000000..ecc5f5e --- /dev/null +++ b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine.css @@ -0,0 +1,62 @@ +body { overflow-y: scroll; } + +.jasmine_html-reporter { background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333; } +.jasmine_html-reporter a { text-decoration: none; } +.jasmine_html-reporter a:hover { text-decoration: underline; } +.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; } +.jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; } +.jasmine_html-reporter .banner { position: relative; } +.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,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') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; } +.jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; } +.jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; } +.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; } +.jasmine_html-reporter .version { color: #aaa; } +.jasmine_html-reporter .banner { margin-top: 14px; } +.jasmine_html-reporter .duration { color: #aaa; float: right; } +.jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; } +.jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; } +.jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: "\02022"; } +.jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; } +.jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; } +.jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; } +.jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; } +.jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; } +.jasmine_html-reporter .symbol-summary li.empty { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.empty:before { color: #ba9d37; content: "\02022"; } +.jasmine_html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; } +.jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +.jasmine_html-reporter .bar.failed { background-color: #ca3a11; } +.jasmine_html-reporter .bar.passed { background-color: #007069; } +.jasmine_html-reporter .bar.skipped { background-color: #bababa; } +.jasmine_html-reporter .bar.errored { background-color: #ca3a11; } +.jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaa; } +.jasmine_html-reporter .bar.menu a { color: #333; } +.jasmine_html-reporter .bar a { color: white; } +.jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; } +.jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; } +.jasmine_html-reporter .running-alert { background-color: #666; } +.jasmine_html-reporter .results { margin-top: 14px; } +.jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } +.jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } +.jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } +.jasmine_html-reporter.showDetails .summary { display: none; } +.jasmine_html-reporter.showDetails #details { display: block; } +.jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } +.jasmine_html-reporter .summary { margin-top: 14px; } +.jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } +.jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; } +.jasmine_html-reporter .summary li.passed a { color: #007069; } +.jasmine_html-reporter .summary li.failed a { color: #ca3a11; } +.jasmine_html-reporter .summary li.empty a { color: #ba9d37; } +.jasmine_html-reporter .summary li.pending a { color: #ba9d37; } +.jasmine_html-reporter .description + .suite { margin-top: 0; } +.jasmine_html-reporter .suite { margin-top: 14px; } +.jasmine_html-reporter .suite a { color: #333; } +.jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; } +.jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; } +.jasmine_html-reporter .failures .spec-detail .description a { color: white; } +.jasmine_html-reporter .result-message { padding-top: 14px; color: #333; white-space: pre; } +.jasmine_html-reporter .result-message span.result { display: block; } +.jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine.js b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine.js new file mode 100755 index 0000000..6bf3f02 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine.js @@ -0,0 +1,3048 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +var getJasmineRequireObj = (function (jasmineGlobal) { + var jasmineRequire; + + if (typeof module !== 'undefined' && module.exports) { + jasmineGlobal = global; + jasmineRequire = exports; + } else { + if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') { + jasmineGlobal = window; + } + jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {}; + } + + function getJasmineRequire() { + return jasmineRequire; + } + + getJasmineRequire().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$, jasmineGlobal); + j$.util = jRequire.util(); + j$.Any = jRequire.Any(); + j$.Anything = jRequire.Anything(j$); + j$.CallTracker = jRequire.CallTracker(); + j$.MockDate = jRequire.MockDate(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.ArrayContaining = jRequire.ArrayContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(j$); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyRegistry = jRequire.SpyRegistry(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.StringMatching = jRequire.StringMatching(j$); + j$.Suite = jRequire.Suite(); + j$.Timer = jRequire.Timer(); + j$.version = jRequire.version(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; + }; + + return getJasmineRequire; +})(this); + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + 'toBe', + 'toBeCloseTo', + 'toBeDefined', + 'toBeFalsy', + 'toBeGreaterThan', + 'toBeLessThan', + 'toBeNaN', + 'toBeNull', + 'toBeTruthy', + 'toBeUndefined', + 'toContain', + 'toEqual', + 'toHaveBeenCalled', + 'toHaveBeenCalledWith', + 'toMatch', + 'toThrow', + 'toThrowError' + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = function(j$, jasmineGlobal) { + j$.unimplementedMethod_ = function() { + throw new Error('unimplemented method'); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { + return jasmineGlobal; + }; + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_('Array', value); + }; + + j$.isString_ = function(value) { + return j$.isA_('String', value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_('Number', value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.fnNameFor = function(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.anything = function() { + return new j$.Anything(); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.stringMatching = function(expected) { + return new j$.StringMatching(expected); + }; + + j$.arrayContaining = function(sample) { + return new j$.ArrayContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + var callData = { + object: this, + args: Array.prototype.slice.apply(arguments) + }; + + callTracker.track(callData); + var returnValue = spyStrategy.exec.apply(this, arguments); + callData.returnValue = returnValue; + + return returnValue; + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) { + methodNames = baseName; + baseName = 'unknown'; + } + + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw 'createSpyObj requires a non-empty array of method names to create spies for'; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; +}; + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(//g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + util.arrayContains = function(array, search) { + var i = array.length; + while (i--) { + if (array[i] === search) { + return true; + } + } + return false; + }; + + util.clone = function(obj) { + if (Object.prototype.toString.apply(obj) === '[object Array]') { + return obj.slice(); + } + + var cloned = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + cloned[prop] = obj[prop]; + } + } + + return cloned; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.queueableFn = attrs.queueableFn; + this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; }; + this.userContext = attrs.userContext || function() { return {}; }; + this.onStart = attrs.onStart || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + + if (!this.queueableFn.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [], + passedExpectations: [], + pendingReason: '' + }; + } + + Spec.prototype.addExpectationResult = function(passed, data) { + var expectationResult = this.expectationResultFactory(data); + if (passed) { + this.result.passedExpectations.push(expectationResult); + } else { + this.result.failedExpectations.push(expectationResult); + } + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.markedPending || this.disabled) { + complete(); + return; + } + + var fns = this.beforeAndAfterFns(); + var allFns = fns.befores.concat(this.queueableFn).concat(fns.afters); + + this.queueRunnerFactory({ + queueableFns: allFns, + onException: function() { self.onException.apply(self, arguments); }, + onComplete: complete, + userContext: this.userContext() + }); + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.onException = function onException(e) { + if (Spec.isPendingSpecException(e)) { + this.pend(extractCustomPendingMessage(e)); + return; + } + + this.addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: e + }); + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function(message) { + this.markedPending = true; + if (message) { + this.result.pendingReason = message; + } + }; + + Spec.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.isExecutable = function() { + return !this.disabled && !this.markedPending; + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + var extractCustomPendingMessage = function(e) { + var fullMessage = e.toString(), + boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage), + boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length; + + return fullMessage.substr(boilerplateEnd); + }; + + Spec.pendingSpecExceptionMessage = '=> marked Pending'; + + Spec.isPendingSpecException = function(e) { + return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Spec = jasmineRequire.Spec; +} + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global)); + + var runnableLookupTable = {}; + var runnableResources = {}; + + var currentSpec = null; + var currentlyExecutingSuites = []; + var currentDeclarationSuite = null; + + var currentSuite = function() { + return currentlyExecutingSuites[currentlyExecutingSuites.length - 1]; + }; + + var currentRunnable = function() { + return currentSpec || currentSuite(); + }; + + var reporter = new j$.ReportDispatcher([ + 'jasmineStarted', + 'jasmineDone', + 'suiteStarted', + 'suiteDone', + 'specStarted', + 'specDone' + ]); + + this.specFilter = function() { + return true; + }; + + this.addCustomEqualityTester = function(tester) { + if(!currentRunnable()) { + throw new Error('Custom Equalities must be added in a before function or a spec'); + } + runnableResources[currentRunnable().id].customEqualityTesters.push(tester); + }; + + this.addMatchers = function(matchersToAdd) { + if(!currentRunnable()) { + throw new Error('Matchers must be added in a before function or a spec'); + } + var customMatchers = runnableResources[currentRunnable().id].customMatchers; + for (var matcherName in matchersToAdd) { + customMatchers[matcherName] = matchersToAdd[matcherName]; + } + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: runnableResources[spec.id].customEqualityTesters, + customMatchers: runnableResources[spec.id].customMatchers, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var defaultResourcesForRunnable = function(id, parentRunnableId) { + var resources = {spies: [], customEqualityTesters: [], customMatchers: {}}; + + if(runnableResources[parentRunnableId]){ + resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters); + resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers); + } + + runnableResources[id] = resources; + }; + + var clearResourcesForRunnable = function(id) { + spyRegistry.clearSpies(); + delete runnableResources[id]; + }; + + var beforeAndAfterFns = function(suite, runnablesExplictlySet) { + return function() { + var befores = [], + afters = [], + beforeAlls = [], + afterAlls = []; + + while(suite) { + befores = befores.concat(suite.beforeFns); + afters = afters.concat(suite.afterFns); + + if (runnablesExplictlySet()) { + beforeAlls = beforeAlls.concat(suite.beforeAllFns); + afterAlls = afterAlls.concat(suite.afterAllFns); + } + + suite = suite.parentSuite; + } + return { + befores: beforeAlls.reverse().concat(befores.reverse()), + afters: afters.concat(afterAlls) + }; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + var maximumSpecCallbackDepth = 20; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + options.timer = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}; + options.fail = self.fail; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory + }); + runnableLookupTable[topSuite.id] = topSuite; + defaultResourcesForRunnable(topSuite.id); + currentDeclarationSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + if(runnablesToRun) { + runnablesExplictlySet = true; + } else if (focusedRunnables.length) { + runnablesExplictlySet = true; + runnablesToRun = focusedRunnables; + } else { + runnablesToRun = [topSuite.id]; + } + + var allFns = []; + for(var i = 0; i < runnablesToRun.length; i++) { + var runnable = runnableLookupTable[runnablesToRun[i]]; + allFns.push((function(runnable) { return { fn: function(done) { runnable.execute(done); } }; })(runnable)); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + queueRunnerFactory({queueableFns: allFns, onComplete: reporter.jasmineDone}); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + var spyRegistry = new j$.SpyRegistry({currentSpies: function() { + if(!currentRunnable()) { + throw new Error('Spies must be created in a before function or a spec'); + } + return runnableResources[currentRunnable().id].spies; + }}); + + this.spyOn = function() { + return spyRegistry.spyOn.apply(spyRegistry, arguments); + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentDeclarationSuite, + queueRunner: queueRunnerFactory, + onStart: suiteStarted, + expectationFactory: expectationFactory, + expectationResultFactory: expectationResultFactory, + runnablesExplictlySetGetter: runnablesExplictlySetGetter, + resultCallback: function(attrs) { + if (!suite.disabled) { + clearResourcesForRunnable(suite.id); + } + currentlyExecutingSuites.pop(); + reporter.suiteDone(attrs); + } + }); + + runnableLookupTable[suite.id] = suite; + return suite; + + function suiteStarted(suite) { + currentlyExecutingSuites.push(suite); + defaultResourcesForRunnable(suite.id, suite.parentSuite.id); + reporter.suiteStarted(suite.result); + } + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + addSpecsToSuite(suite, specDefinitions); + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = this.describe(description, specDefinitions); + suite.disable(); + return suite; + }; + + var focusedRunnables = []; + + this.fdescribe = function(description, specDefinitions) { + var suite = suiteFactory(description); + suite.isFocused = true; + + focusedRunnables.push(suite.id); + unfocusAncestor(); + addSpecsToSuite(suite, specDefinitions); + + return suite; + }; + + function addSpecsToSuite(suite, specDefinitions) { + var parentSuite = currentDeclarationSuite; + parentSuite.addChild(suite); + currentDeclarationSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + self.it('encountered a declaration exception', function() { + throw declarationError; + }); + } + + currentDeclarationSuite = parentSuite; + } + + function findFocusedAncestor(suite) { + while (suite) { + if (suite.isFocused) { + return suite.id; + } + suite = suite.parentSuite; + } + + return null; + } + + function unfocusAncestor() { + var focusedAncestor = findFocusedAncestor(currentDeclarationSuite); + if (focusedAncestor) { + for (var i = 0; i < focusedRunnables.length; i++) { + if (focusedRunnables[i] === focusedAncestor) { + focusedRunnables.splice(i, 1); + break; + } + } + } + } + + var runnablesExplictlySet = false; + + var runnablesExplictlySetGetter = function(){ + return runnablesExplictlySet; + }; + + var specFactory = function(description, fn, suite, timeout) { + totalSpecsDefined++; + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeAndAfterFns: beforeAndAfterFns(suite, runnablesExplictlySetGetter), + expectationFactory: expectationFactory, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + userContext: function() { return suite.clonedSharedUserContext(); }, + queueableFn: { + fn: fn, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + } + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function specResultCallback(result) { + clearResourcesForRunnable(spec.id); + currentSpec = null; + reporter.specDone(result); + } + + function specStarted(spec) { + currentSpec = spec; + defaultResourcesForRunnable(spec.id, suite.id); + reporter.specStarted(spec.result); + } + }; + + this.it = function(description, fn, timeout) { + var spec = specFactory(description, fn, currentDeclarationSuite, timeout); + currentDeclarationSuite.addChild(spec); + return spec; + }; + + this.xit = function() { + var spec = this.it.apply(this, arguments); + spec.pend(); + return spec; + }; + + this.fit = function(){ + var spec = this.it.apply(this, arguments); + + focusedRunnables.push(spec.id); + unfocusAncestor(); + return spec; + }; + + this.expect = function(actual) { + if (!currentRunnable()) { + throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); + } + + return currentRunnable().expect(actual); + }; + + this.beforeEach = function(beforeEachFunction, timeout) { + currentDeclarationSuite.beforeEach({ + fn: beforeEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.beforeAll = function(beforeAllFunction, timeout) { + currentDeclarationSuite.beforeAll({ + fn: beforeAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterEach = function(afterEachFunction, timeout) { + currentDeclarationSuite.afterEach({ + fn: afterEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterAll = function(afterAllFunction, timeout) { + currentDeclarationSuite.afterAll({ + fn: afterAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.pending = function(message) { + var fullMessage = j$.Spec.pendingSpecExceptionMessage; + if(message) { + fullMessage += message; + } + throw fullMessage; + }; + + this.fail = function(error) { + var message = 'Failed'; + if (error) { + message += ': '; + message += error.message || error; + } + + currentRunnable().addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + message: message, + error: error && error.message ? error : null + }); + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = 'loaded'; + + this.started = false; + this.finished = false; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function() { + this.finished = true; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = [], + suites_hash = {}; + + this.suiteStarted = function(result) { + suites_hash[result.id] = result; + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + this.suiteResults = function(index, length) { + return suites.slice(index, index + length); + }; + + function storeSuite(result) { + suites.push(result); + suites_hash[result.id] = result; + } + + this.suites = function() { + return suites_hash; + }; + + var specs = []; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionScheduler, mockDate) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + timer; + + + self.install = function() { + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + installed = true; + + return self; + }; + + self.uninstall = function() { + delayedFunctionScheduler.reset(); + mockDate.uninstall(); + replace(global, realTimingFunctions); + + timer = realTimingFunctions; + installed = false; + }; + + self.mockDate = function(initialDate) { + mockDate.install(initialDate); + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + mockDate.tick(millis); + delayedFunctionScheduler.tick(millis); + } else { + throw new Error('Mock clock is not installed, use jasmine.clock().install()'); + } + }; + + return self; + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, n); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + self.reset = function() { + currentTime = 0; + scheduledLookup = []; + scheduledFunctions = {}; + delayedFnCount = 0; + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function forEachFunction(funcsToRun, callback) { + for (var i = 0; i < funcsToRun.length; ++i) { + callback(funcsToRun[i]); + } + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + forEachFunction(funcsToRun, function(funcToRun) { + if (funcToRun.recurring) { + reschedule(funcToRun); + } + }); + + forEachFunction(funcsToRun, function(funcToRun) { + funcToRun.funcToCall.apply(null, funcToRun.params || []); + }); + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = ''; + + if (error.name && error.message) { + message += error.name + ': ' + error.message; + } else { + message += error.toString() + ' thrown'; + } + + if (error.fileName || error.sourceURL) { + message += ' in ' + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += ' (line ' + (error.line || error.lineNumber) + ')'; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + var customMatchers = options.customMatchers || {}; + for (var matcherName in customMatchers) { + this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]); + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ''; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + if (Object.prototype.toString.apply(result.message) === '[object Function]') { + message = result.message(); + } else { + message = result.message; + } + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + var result = { + matcherName: options.matcherName, + message: message(), + stack: stack(), + passed: options.passed + }; + + if(!result.passed) { + result.expected = options.expected; + result.actual = options.actual; + } + + return result; + + function message() { + if (options.passed) { + return 'Passed.'; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ''; + } + + function stack() { + if (options.passed) { + return ''; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().MockDate = function() { + function MockDate(global) { + var self = this; + var currentTime = 0; + + if (!global || !global.Date) { + self.install = function() {}; + self.tick = function() {}; + self.uninstall = function() {}; + return self; + } + + var GlobalDate = global.Date; + + self.install = function(mockDate) { + if (mockDate instanceof GlobalDate) { + currentTime = mockDate.getTime(); + } else { + currentTime = new GlobalDate().getTime(); + } + + global.Date = FakeDate; + }; + + self.tick = function(millis) { + millis = millis || 0; + currentTime = currentTime + millis; + }; + + self.uninstall = function() { + currentTime = 0; + global.Date = GlobalDate; + }; + + createDateProperties(); + + return self; + + function FakeDate() { + switch(arguments.length) { + case 0: + return new GlobalDate(currentTime); + case 1: + return new GlobalDate(arguments[0]); + case 2: + return new GlobalDate(arguments[0], arguments[1]); + case 3: + return new GlobalDate(arguments[0], arguments[1], arguments[2]); + case 4: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]); + case 5: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4]); + case 6: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5]); + default: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5], arguments[6]); + } + } + + function createDateProperties() { + FakeDate.prototype = GlobalDate.prototype; + + FakeDate.now = function() { + if (GlobalDate.now) { + return currentTime; + } else { + throw new Error('Browser does not support Date.now()'); + } + }; + + FakeDate.toSource = GlobalDate.toSource; + FakeDate.toString = GlobalDate.toString; + FakeDate.parse = GlobalDate.parse; + FakeDate.UTC = GlobalDate.UTC; + } + } + + return MockDate; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + this.seen = []; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === 0 && 1/value === -Infinity) { + this.emitScalar('-0'); + } else if (value === j$.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar('spy on ' + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (j$.util.arrayContains(this.seen, value)) { + this.emitScalar(''); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + this.seen.push(value); + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + this.seen.pop(); + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append('\'' + value + '\''); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Array'); + return; + } + var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); + this.append('[ '); + for (var i = 0; i < length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + if(array.length > length){ + this.append(', ...'); + } + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null'; + this.append(constructorName); + + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + return; + } + + var self = this; + this.append('({ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.append(property); + self.append(': '); + if (isGetter) { + self.append(''); + } else { + self.format(obj[property]); + } + }); + + this.append(' })'); + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function(j$) { + + function once(fn) { + var called = false; + return function() { + if (!called) { + called = true; + fn(); + } + }; + } + + function QueueRunner(attrs) { + this.queueableFns = attrs.queueableFns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.userContext = attrs.userContext || {}; + this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + this.fail = attrs.fail || function() {}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.queueableFns, 0); + }; + + QueueRunner.prototype.run = function(queueableFns, recursiveIndex) { + var length = queueableFns.length, + self = this, + iterativeIndex; + + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var queueableFn = queueableFns[iterativeIndex]; + if (queueableFn.fn.length > 0) { + attemptAsync(queueableFn); + return; + } else { + attemptSync(queueableFn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(queueableFn) { + try { + queueableFn.fn.call(self.userContext); + } catch (e) { + handleException(e, queueableFn); + } + } + + function attemptAsync(queueableFn) { + var clearTimeout = function () { + Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]); + }, + next = once(function () { + clearTimeout(timeoutId); + self.run(queueableFns, iterativeIndex + 1); + }), + timeoutId; + + next.fail = function() { + self.fail.apply(null, arguments); + next(); + }; + + if (queueableFn.timeout) { + timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { + var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'); + onException(error, queueableFn); + next(); + }, queueableFn.timeout()]]); + } + + try { + queueableFn.fn.call(self.userContext, next); + } catch (e) { + handleException(e, queueableFn); + next(); + } + } + + function onException(e, queueableFn) { + self.onException(e); + } + + function handleException(e, queueableFn) { + onException(e, queueableFn); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyRegistry = function(j$) { + + function SpyRegistry(options) { + options = options || {}; + var currentSpies = options.currentSpies || function() { return []; }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); + } + + if (j$.util.isUndefined(methodName)) { + throw new Error('No method name supplied'); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + currentSpies().push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + this.clearSpies = function() { + var spies = currentSpies(); + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + }; + } + + return SpyRegistry; +}; + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || 'unknown', + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.returnValues = function() { + var values = Array.prototype.slice.call(arguments); + plan = function () { + return values.shift(); + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function() { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.onStart = attrs.onStart || function() {}; + this.resultCallback = attrs.resultCallback || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.expectationFactory = attrs.expectationFactory; + this.expectationResultFactory = attrs.expectationResultFactory; + this.runnablesExplictlySetGetter = attrs.runnablesExplictlySetGetter || function() {}; + + this.beforeFns = []; + this.afterFns = []; + this.beforeAllFns = []; + this.afterAllFns = []; + this.queueRunner = attrs.queueRunner || function() {}; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [] + }; + } + + Suite.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.beforeAll = function(fn) { + this.beforeAllFns.push(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.afterAll = function(fn) { + this.afterAllFns.push(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'finished'; + } + }; + + Suite.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.disabled) { + complete(); + return; + } + + var allFns = []; + + for (var i = 0; i < this.children.length; i++) { + allFns.push(wrapChildAsAsync(this.children[i])); + } + + if (this.isExecutable()) { + allFns = this.beforeAllFns.concat(allFns); + allFns = allFns.concat(this.afterAllFns); + } + + this.queueRunner({ + queueableFns: allFns, + onComplete: complete, + userContext: this.sharedUserContext(), + onException: function() { self.onException.apply(self, arguments); } + }); + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + + function wrapChildAsAsync(child) { + return { fn: function(done) { child.execute(done); } }; + } + }; + + Suite.prototype.isExecutable = function() { + var runnablesExplicitlySet = this.runnablesExplictlySetGetter(); + return !runnablesExplicitlySet && hasExecutableChild(this.children); + }; + + Suite.prototype.sharedUserContext = function() { + if (!this.sharedContext) { + this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {}; + } + + return this.sharedContext; + }; + + Suite.prototype.clonedSharedUserContext = function() { + return clone(this.sharedUserContext()); + }; + + Suite.prototype.onException = function() { + if(isAfterAll(this.children)) { + var data = { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: arguments[0] + }; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.onException.apply(child, arguments); + } + } + }; + + Suite.prototype.addExpectationResult = function () { + if(isAfterAll(this.children) && isFailure(arguments)){ + var data = arguments[1]; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.addExpectationResult.apply(child, arguments); + } + } + }; + + function isAfterAll(children) { + return children && children[0].result.status; + } + + function isFailure(args) { + return !args[0]; + } + + function hasExecutableChild(children) { + var foundActive = false; + for (var i = 0; i < children.length; i++) { + if (children[i].isExecutable()) { + foundActive = true; + break; + } + } + return foundActive; + } + + function clone(obj) { + var clonedObj = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + clonedObj[prop] = obj[prop]; + } + } + + return clonedObj; + } + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + var defaultNow = (function(Date) { + return function() { return new Date().getTime(); }; + })(Date); + + function Timer(options) { + options = options || {}; + + var now = options.now || defaultNow, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().Any = function() { + + function Any(expectedObject) { + this.expectedObject = expectedObject; + } + + Any.prototype.asymmetricMatch = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return ''; + }; + + return Any; +}; + +getJasmineRequireObj().Anything = function(j$) { + + function Anything() {} + + Anything.prototype.asymmetricMatch = function(other) { + return !j$.util.isUndefined(other) && other !== null; + }; + + Anything.prototype.jasmineToString = function() { + return ''; + }; + + return Anything; +}; + +getJasmineRequireObj().ArrayContaining = function(j$) { + function ArrayContaining(sample) { + this.sample = sample; + } + + ArrayContaining.prototype.asymmetricMatch = function(other) { + var className = Object.prototype.toString.call(this.sample); + if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); } + + for (var i = 0; i < this.sample.length; i++) { + var item = this.sample[i]; + if (!j$.matchersUtil.contains(other, item)) { + return false; + } + } + + return true; + }; + + ArrayContaining.prototype.jasmineToString = function () { + return ''; + }; + + return ArrayContaining; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + ObjectContaining.prototype.asymmetricMatch = function(other) { + if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } + + for (var property in this.sample) { + if (!Object.prototype.hasOwnProperty.call(other, property) || + !j$.matchersUtil.equals(this.sample[property], other[property])) { + return false; + } + } + + return true; + }; + + ObjectContaining.prototype.jasmineToString = function() { + return ''; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().StringMatching = function(j$) { + + function StringMatching(expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + this.regexp = new RegExp(expected); + } + + StringMatching.prototype.asymmetricMatch = function(other) { + return this.regexp.test(other); + }; + + StringMatching.prototype.jasmineToString = function() { + return ''; + }; + + return StringMatching; +}; + +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if ((Object.prototype.toString.apply(haystack) === '[object Array]') || + (!!haystack && !haystack.indexOf)) + { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + + return !!haystack && haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = 'Expected ' + + j$.pp(actual) + + (isNot ? ' not ' : ' ') + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ','; + } + message += ' ' + j$.pp(expected[i]); + } + } + + return message + '.'; + } + }; + + function isAsymmetric(obj) { + return obj && j$.isA_('Function', obj.asymmetricMatch); + } + + function asymmetricMatch(a, b) { + var asymmetricA = isAsymmetric(a), + asymmetricB = isAsymmetric(b); + + if (asymmetricA && asymmetricB) { + return undefined; + } + + if (asymmetricA) { + return a.asymmetricMatch(b); + } + + if (asymmetricB) { + return b.asymmetricMatch(a); + } + } + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + var asymmetricResult = asymmetricMatch(a, b); + if (!j$.util.isUndefined(asymmetricResult)) { + return asymmetricResult; + } + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + + var aIsDomNode = j$.isDomNode(a); + var bIsDomNode = j$.isDomNode(b); + if (aIsDomNode && bIsDomNode) { + // At first try to use DOM3 method isEqualNode + if (a.isEqualNode) { + return a.isEqualNode(b); + } + // IE8 doesn't support isEqualNode, try to use outerHTML && innerText + var aIsElement = a instanceof Element; + var bIsElement = b instanceof Element; + if (aIsElement && bIsElement) { + return a.outerHTML == b.outerHTML; + } + if (aIsElement || bIsElement) { + return false; + } + return a.innerText == b.innerText && a.textContent == b.textContent; + } + if (aIsDomNode || bIsDomNode) { + return false; + } + + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + // Compare array lengths to determine if a deep comparison is necessary. + if (className == '[object Array]' && a.length !== b.length) { + result = false; + } + + if (result) { + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && + isFunction(bCtor) && (bCtor instanceof bCtor))) { + return false; + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = 'Expected actual not to be NaN.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called.' : + 'Expected spy ' + actual.and.identity() + ' to have been called.'; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util, customEqualityTesters) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { + result.pass = true; + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; + } else { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function(j$) { + + function toMatch() { + return { + compare: function(actual, expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = 'Expected function to throw an exception.'; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; + } else { + result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError (util) { + return { + compare: function(actual) { + var threw = false, + pass = {pass: true}, + fail = {pass: false}, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + var errorMatcher = getMatcher.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + fail.message = 'Expected function to throw an Error.'; + return fail; + } + + if (!(thrown instanceof Error)) { + fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; + return fail; + } + + if (errorMatcher.hasNoSpecifics()) { + pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.'; + return pass; + } + + if (errorMatcher.matches(thrown)) { + pass.message = function() { + return 'Expected function not to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + '.'; + }; + return pass; + } else { + fail.message = function() { + return 'Expected function to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + + ', but it threw ' + errorMatcher.thrownDescription(thrown) + '.'; + }; + return fail; + } + } + }; + + function getMatcher() { + var expected = null, + errorType = null; + + if (arguments.length == 2) { + expected = arguments[1]; + if (isAnErrorType(expected)) { + errorType = expected; + expected = null; + } + } else if (arguments.length > 2) { + errorType = arguments[1]; + expected = arguments[2]; + if (!isAnErrorType(errorType)) { + throw new Error('Expected error type is not an Error.'); + } + } + + if (expected && !isStringOrRegExp(expected)) { + if (errorType) { + throw new Error('Expected error message is not a string or RegExp.'); + } else { + throw new Error('Expected is not an Error, string, or RegExp.'); + } + } + + function messageMatch(message) { + if (typeof expected == 'string') { + return expected == message; + } else { + return expected.test(message); + } + } + + return { + errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception', + thrownDescription: function(thrown) { + var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception', + thrownMessage = ''; + + if (expected) { + thrownMessage = ' with message ' + j$.pp(thrown.message); + } + + return thrownName + thrownMessage; + }, + messageDescription: function() { + if (expected === null) { + return ''; + } else if (expected instanceof RegExp) { + return ' with a message matching ' + j$.pp(expected); + } else { + return ' with message ' + j$.pp(expected); + } + }, + hasNoSpecifics: function() { + return expected === null && errorType === null; + }, + matches: function(error) { + return (errorType === null || error.constructor === errorType) && + (expected === null || messageMatch(error.message)); + } + }; + } + + function isStringOrRegExp(potential) { + return potential instanceof RegExp || (typeof potential == 'string'); + } + + function isAnErrorType(type) { + if (typeof type !== 'function') { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + + return toThrowError; +}; + +getJasmineRequireObj().interface = function(jasmine, env) { + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + fdescribe: function(description, specDefinitions) { + return env.fdescribe(description, specDefinitions); + }, + + it: function() { + return env.it.apply(env, arguments); + }, + + xit: function() { + return env.xit.apply(env, arguments); + }, + + fit: function() { + return env.fit.apply(env, arguments); + }, + + beforeEach: function() { + return env.beforeEach.apply(env, arguments); + }, + + afterEach: function() { + return env.afterEach.apply(env, arguments); + }, + + beforeAll: function() { + return env.beforeAll.apply(env, arguments); + }, + + afterAll: function() { + return env.afterAll.apply(env, arguments); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending.apply(env, arguments); + }, + + fail: function() { + return env.fail.apply(env, arguments); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }), + + jasmine: jasmine + }; + + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + jasmine.clock = function() { + return env.clock; + }; + + return jasmineInterface; +}; + +getJasmineRequireObj().version = function() { + return '2.2.0'; +}; diff --git a/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine_favicon.png b/platforms/android/assets/www/cdvtests/jasmine-2.2.0/jasmine_favicon.png new file mode 100755 index 0000000000000000000000000000000000000000..3b84583be4b9d5ae9cd5cae07b2dbaa5ebb0ad1c GIT binary patch literal 1486 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0VDb;}332@o1PuQh8X8uGu4-^- zn3*=SA+%wV=cI;&hMB$%-Lc(MLmN8%IwwUpbcA;F2Q;)twND9bn-tpC9oR4-vb8I; zp+Bg#FSKP+P(yD-%f!%zo}iZgh=%Ua=KkP@iNVbiLYsSn8~VeW`+}P$1~&ACHcbd_ z=nZb_32o{NZkZ6&1k^hrxT!a&r8lIdAIJ@9nh?|iRMsET+#A%`AKKg-(%2K)*cZ|~ zA-J&*$PEUH08MM`4Q=iVY3vVfhN$TUscGs5sR8P31X|G_+SnTcv<0XVC=Rr!u|K4# zHyCJU6UYRR;%2BtKv^I=q#2|DECn_k@wXU|=@ zeD&J(8#iy=zH|5fgNKiwJbm`!<*V0k-oF3v@zdvTKYsrD^Y>rGdNDU(R>|^oaSW-5 z%f0Y2x+hSk{p0&HA;E60Oq1S3r7U;(X3MH#?W9nxXzk)srlC4P;cZYe&v*G}mgi%< ze(bTl{@&_)cX8b-kvX%ff9D22e*M~7edm|;|Jb8m2JBzkzKiSBKR0n*?XSyM6fxZY zJ4bb;vGKRiKP(ztq3sJx9iq$Re`-EEQU0KE$sdyqayzp6H-7x+oGKZ_6;hQ_Y|p&y z7o`N7g@ z8Yl1HKL;mFo4BdxljF1}KbfMR6nNdLyPnEap1MqBdI?{g$L58$P8+wftLX5R70)7n`#pwItnbma$w{%`M(`wpsu2rJ60rdGCc> z+~lm)viMYM`=uXwK_$`#_UtRZMO=2-IV)l2vc~)doyPvg-RmxtACQ#v{7}5$&isV+ zPws~n?@yNGy#H1=vTI?;CAl9~9#VgqJ+7`4y~R+Wyj0U+){?lm9r6mtf0gl_VmUW^ z%eje%?jM%^eLuUg#ybXaQM{yQy&8UgiQ`HQ+=iTpjfd0iJ@ ssyFi&dF4%9dEry;pNN)Q>$jg_dr3r;PHA*CFc&d+y85}Sb4q9e0J812W&i*H literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/jasmine-medic.js b/platforms/android/assets/www/cdvtests/jasmine-medic.js new file mode 100644 index 0000000..4194f3a --- /dev/null +++ b/platforms/android/assets/www/cdvtests/jasmine-medic.js @@ -0,0 +1,123 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* global device */ + +jasmineRequire.medic = function(j$) { + j$.MedicReporter = jasmineRequire.MedicReporter(j$); +}; + +jasmineRequire.MedicReporter = function(j$) { + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + var platformMap = { + 'ipod touch':'ios', + 'iphone':'ios' + }; + + function MedicReporter(options) { + var logoptions = options.log || { logurl: 'http://127.0.0.1:5984/' }, // TODO: http://localhost:6800 + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0; + + + var serverurl = logoptions.logurl; + + this.initialize = function() { + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + this.suiteStarted = function(result) { + }; + + this.suiteDone = function(result) { + + }; + + this.specStarted = function(result) { + // Start timing this spec + }; + + this.specDone = function(result) { + if (result.status != "disabled") { + specsExecuted++; + } + if (result.status == "failed") { + failureCount++; + results.push(result); + } + if (result.status == "pending") { + pendingSpecCount++; + } + }; + + var buildResults = function(){ + var json ={specs:specsExecuted, failures:failureCount, results: results}; + return json; + }; + + this.jasmineDone = function() { + var p = 'Desktop'; + var devmodel='none'; + var version = cordova.version; + if(typeof device != 'undefined') { + p = device.platform.toLowerCase(); + devmodel=device.model || device.name; + version = device.version.toLowerCase(); + } + + this.postTests({ + mobilespec:buildResults(), + platform:(platformMap.hasOwnProperty(p) ? platformMap[p] : p), + version:version, + sha: options.sha, + timestamp:Math.round(Math.floor((new Date()).getTime() / 1000)), + model:devmodel + }); + + }; + + this.postTests = function(json) { + console.log('posting tests'); + + var xhr = new XMLHttpRequest(); + var doc_id = [options.sha, json.version, json.model].map(encodeURIComponent).join('__'); + var doc_url = serverurl + '/mobilespec_results/' + doc_id; + xhr.open("PUT", doc_url, true); + xhr.setRequestHeader("Content-Type","application/json"); + xhr.send(JSON.stringify(json)); + }; + return this; + } + + return MedicReporter; +}; diff --git a/platforms/android/assets/www/cdvtests/main-bootstrap.js b/platforms/android/assets/www/cdvtests/main-bootstrap.js new file mode 100644 index 0000000..58624b7 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/main-bootstrap.js @@ -0,0 +1,26 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +document.addEventListener("deviceready", function() { + 'use strict'; + + cordova.require('cordova-plugin-test-framework.main').init(); +}); diff --git a/platforms/android/assets/www/cdvtests/main.css b/platforms/android/assets/www/cdvtests/main.css new file mode 100644 index 0000000..9223dbd --- /dev/null +++ b/platforms/android/assets/www/cdvtests/main.css @@ -0,0 +1,148 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +*, *:before, *:after { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +html, body { + height: 100%; + width: 100%; + margin: 0; + padding: 0; +} + +#title { + position: fixed; + height: 30px; + width: 100%; + top: 0; + z-index: 1000; + + background-color: #75B2F0; + font-size: 25px; + text-align: center; + font-weight: bold; + white-space: nowrap; +} + +#middle { + position: absolute; + top: 30px; + bottom: 20px; + padding-bottom: 40%; + width: 100%; + overflow-y: auto; + overflow-x: auto; +} + +#log { + position: fixed; + height: 20px; + width: 100%; + bottom: 0; + z-index: 1000; + border-top: 2px solid #777; + transition: 0.25s ease; +} + +body.expanded-log #middle { + margin-bottom: 40%; +} + +body.expanded-log #log { + height: 40%; +} + +#log--title { + position: absolute; + top: 0; + height: 20px; + width: 100%; + background-color: #93AAC2; +} + +#log--content { + position: absolute; + top: 20px; + bottom: 0; + width: 100%; + overflow-x: none; + overflow-y: auto; + background-color: white; +} + +.log--content--line { + border-bottom: 1px solid #ccc; + white-space: pre; +} + +.log--content--line--log { + background-color: white; +} + +.log--content--line--warn { + background-color: #FCFFA6; +} + +.log--content--line--error { + background-color: #FFA6A6; +} + +#info{ + background:#ffa; + border: 1px solid #ffd324; + -webkit-border-radius: 5px; + border-radius: 5px; + clear:both; + margin:15px 6px 0; + min-width:295px; + max-width:97%; + padding:4px 0px 2px 10px; + word-wrap:break-word; + margin-bottom:10px; + display:inline-block; + min-height: 160px; + max-height: 300px; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +#test-enablers-container { + margin: 10px 5px; +} + +#test-expander { + text-decoration: underline; +} + +#test-list { + display: none; +} + +#test-list.expanded { + display: inherit; +} + +#test-list label { + display: block; +} diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/.gitignore b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/.gitignore new file mode 100755 index 0000000..f678651 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/.gitignore @@ -0,0 +1,6 @@ +node_modules +npm-debug.log +tmp +.DS_Store +src/ +.tern-port diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/Gruntfile.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/Gruntfile.js new file mode 100755 index 0000000..1952688 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/Gruntfile.js @@ -0,0 +1,277 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/*global module:false, require:false, process:false*/ + +var path = require('path'), + os = require('os'), + chromiumSrc = process.env.CHROMIUM_SRC || ""; + + +module.exports = function(grunt) { + 'use strict'; + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + + stylus: { + options: { + paths: grunt.file.expand(__dirname + '/node_modules/topcoat-*/src/') + /* FIXME: Utils is the last needing to be moved out of mixins + * folder + */ + .concat(grunt.file.expand(__dirname + '/node_modules/topcoat-utils/src/mixins/')), + compress: false + }, + + mobilelight: { + options: { + import: ['theme-topcoat-mobile-light', 'utils'] + }, + + files: [{ + src: 'node_modules/topcoat-*/src/**/*.styl', + dest: 'css/topcoat-mobile-light.css' + }] + }, + + mobiledark: { + options: { + import: ['theme-topcoat-mobile-dark', 'utils'] + }, + + files: [{ + src: 'node_modules/topcoat-*/src/**/*.styl', + dest: 'css/topcoat-mobile-dark.css' + }] + }, + + desktoplight: { + options: { + import: ['theme-topcoat-desktop-light', 'utils'] + }, + files: [{ + src: [ + 'node_modules/topcoat-*/src/**/*.styl', + '!node_modules/topcoat-navigation-bar/src/*.styl', + '!node_modules/topcoat-list/src/*.styl' + ], + dest: 'css/topcoat-desktop-light.css' + }] + }, + + desktopdark: { + options: { + import: ['theme-topcoat-desktop-dark', 'utils'] + }, + + files: [{ + src: [ + 'node_modules/topcoat-*/src/**/*.styl', + '!node_modules/topcoat-navigation-bar/src/*.styl', + '!node_modules/topcoat-list/src/*.styl' + ], + dest: 'css/topcoat-desktop-dark.css' + }] + } + }, + + topdoc: { + usageguides: { + options: { + source: 'css', + destination: 'demo', + template: 'node_modules/topdoc-theme/', + templateData: { + "title": "Topcoat", + "subtitle": "CSS for clean and fast web apps", + "download": { + "url": "https://github.com/topcoat/topcoat/archive/v0.7.0.zip", + "label": "Download" + }, + "homeURL": "http://topcoat.io", + "siteNav": [ + { + "url": "http://topcoat.io/topcoat", + "text": "Demo" + }, + { + "url": "http://bench.topcoat.io/", + "text": "Benchmarks" + }, + { + "url": "http://topcoat.io/blog", + "text": "Blog" + } + ] + } + } + } + }, + + autoprefixer: { + dist: { + options: { + /* + * Add target browsers here + * https://github.com/ai/autoprefixer#browsers + * browsers: ['android 4'] + */ + }, + files: [{ + src: 'css/topcoat-desktop-dark.css', + dest: 'css/topcoat-desktop-dark.css' + }, + { + src: 'css/topcoat-desktop-light.css', + dest: 'css/topcoat-desktop-light.css' + }, + { + src: 'css/topcoat-mobile-dark.css', + dest: 'css/topcoat-mobile-dark.css' + }, + { + src: 'css/topcoat-mobile-light.css', + dest: 'css/topcoat-mobile-light.css' + }] + } + + }, + + cssmin: { + minify: { + expand: true, + cwd: 'css', + src: ['*.css', '!*.min.css'], + dest: 'css', + ext: '.min.css' + } + }, + + htmlmin: { + telemetry: { + options: { + removeComments: true, + collapseWhitespace: true + }, + files: [{ + expand: true, + src: ['dev/test/**/topcoat/*.html'], + dest: '', + ext: '.test.html', + }], + }, + }, + + clean: { + release: ['css'] + }, + + copy: { + release: { + files: [{ + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/font/**', + dest: 'font' + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/img/*', + dest: 'img' + }] + }, + + telemetry: { + files: [{ + expand: true, + cwd: 'dev/test/perf/telemetry/perf/', + src: ['**'], + dest: path.join(chromiumSrc, 'tools/perf/') + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/font/**', + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/font') + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/img/*', + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/img') + }, { + src: ['css/**'], + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/') + }] + } + }, + + jshint: { + options: { + curly: true, + eqeqeq: true, + immed: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + unused: true, + boss: true, + eqnull: true, + browser: true, + globals: { + jQuery: true + } + }, + gruntfile: { + src: 'Gruntfile.js' + }, + lib_test: { + src: ['dev/lib/**/*.js', 'dev/test/**/*.js'] + } + }, + + watch: { + files: ['src/**/*.styl'], + tasks: ['compile'] + } + + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-jade'); + grunt.loadNpmTasks('grunt-contrib-stylus'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-exec'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-topdoc'); + grunt.loadNpmTasks('grunt-contrib-cssmin'); + grunt.loadNpmTasks('grunt-contrib-htmlmin'); + grunt.loadNpmTasks('grunt-autoprefixer'); + + //Load local tasks + grunt.loadTasks('dev/tasks'); + + // Default task. + grunt.registerTask('default', ['clean', 'stylus', 'autoprefixer', 'cssmin', 'topdoc', 'copy:release']); + grunt.registerTask('release', ['default', 'clean:src']); + grunt.registerTask('compile', ['topcoat:compile', 'topdoc', 'copy:release']); + + grunt.registerTask('telemetry', '', function(platform, theme) { + if (chromiumSrc === "") grunt.fail.warn("Set CHROMIUM_SRC to point to the correct location\n"); + grunt.task.run('check_chromium_src', 'perf:'.concat(platform || 'mobile').concat(':').concat(theme || 'light'), 'htmlmin:telemetry', 'copy:telemetry'); + }); +}; diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/LICENSE b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/LICENSE new file mode 100755 index 0000000..242fd8a --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/LICENSE @@ -0,0 +1,203 @@ +Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/NOTICE b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/NOTICE new file mode 100755 index 0000000..3c8ddfa --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/NOTICE @@ -0,0 +1,193 @@ +Topcoat is licensed under the Apache license version 2.0, January 2004 (see LICENSE file). + +Topcoat uses the following third party libraries that may have licenses +differing from that of Topcoat itself. You can find the libraries and their +respective licenses below. + + - Source Code Pro ./src/font/SourceCodePro + + https://github.com/adobe/source-code-pro + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is available with a FAQ at: http://scripts.sil.org/OFL + +- Source Sans Pro ./src/font/SourceSansPro + + https://github.com/adobe/source-sans-pro + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is available with a FAQ at: http://scripts.sil.org/OFL + +The following frameworks and libraries are provided just for testing and benchmarking and, as provided, should not be included as part of Topcoat output. + + - Bootstrap - ./test/third-party/bootstrap + + https://github.com/twitter/bootstrap + + Copyright 2012 Twitter, Inc + Licensed under the Apache License v2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + - jQuery - ./test/third-party/jquery-1.8.2.js + + https://github.com/jquery/jquery + + Copyright 2011, John Resig + Dual licensed under the MIT or GPL Version 2 licenses. + http://jquery.org/license + + Includes Sizzle.js + http://sizzlejs.com/ + Copyright 2011, The Dojo Foundation + Released under the MIT, BSD, and GPL Licenses. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + - Modernizr - ./test/third-party/modernizr + + https://github.com/Modernizr/Modernizr + + Modernizr is available under the MIT license + + Copyright (c) 2009–2011 + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + - Benchmark.js - ./test/third-party/benchmarkjs + + https://github.com/alexanderbeletsky/benchmark-js + + Copyright 2010-2012 Mathias Bynens + Based on JSLitmus.js, copyright Robert Kieffer + Modified by John-David Dalton + Available under MIT license + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - normalize.css - ./test/third-party/normalize + + Copyright (c) Nicolas Gallagher and Jonathan Neal + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - Foundation - ./test/third-party/foundation + + Copyright (c) 2012 Mark Hayes + + MIT License + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - ua-parser ./test/third-party/ua-parser + + https://github.com/faisalman/ua-parser-js + + Copyright © 2012 Faisalman + Dual licensed under GPLv2 & MIT + Copyright © 2012 Faisalman + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + - HTML5 boilerplate + + https://github.com/h5bp/html5-boilerplate + + Copyright (c) HTML5 Boilerplate + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - classList - ./test/third-party/classlist + + http://purl.eligrey.com/github/classList.js/blob/master/classList.js + + This software is dedicated to the public domain. No warranty is expressed or implied. + Use this software at your own risk. + + - fastclick - ./test/third-party/fastclick + + https://github.com/ftlabs/fastclick + + Copyright (C) 2012 The Financial Times Ltd. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/README.md b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/README.md new file mode 100755 index 0000000..a89dad2 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/README.md @@ -0,0 +1,89 @@ +# Topcoat + +CSS for clean and fast web apps + +--- + +## Usage + +* [Download Topcoat](https://github.com/topcoat/topcoat/archive/0.7.0.zip) + +* Open index.html to view the usage guides. +* Copy your desired theme CSS from the `css/` folder into your project +* Copy the `img/` and `font/` folders into your project ( Feel free to only + copy the images and font weights you intend to use ) +* Link the CSS into your page + +```css + +``` + +_*Alternatively incorporate the css into your build process if you are so +inclined._ + +--- + +## Contributing + +Start by checking out our [Backlog](http://huboard.com/topcoat/topcoat/backlog). (Pls file issues against this repo.) + +* [Fill out the CLA here](http://topcoat.io/dev/topcoat-cla.html) +* [fork](https://help.github.com/articles/fork-a-repo) the repo +* Create a branch + + git checkout -b my_branch + +* Add your changes following the [coding guidelines](https://github.com/topcoat/topcoat/wiki/Coding-Guidelines) +* Commit your changes + + git commit -am "Added some awesome stuff" + +* Push your branch + + git push origin my_branch + +* make a [pull request](https://help.github.com/articles/using-pull-requests) + +For the details see our [Engineering Practices](https://github.com/topcoat/topcoat/wiki/Engineering-Practices). + +### Testing + +For performance tests, see [dev/test/perf/telemetry/](https://github.com/topcoat/topcoat/tree/master/dev/test/perf/telemetry). + +### Building + +Topcoat uses [Grunt](http://gruntjs.com/) to build + +* Open the terminal from the topcoat directory + + cd topcoat + +* Install [npm](http://nodejs.org/download/) +_*comes packaged with node._ +* Install its command line interface (CLI) globally + + npm install -g grunt-cli + +* Install dependencies with npm + + npm install + + +_*Topcoat uses Grunt 0.4.0. You might want to [read](http://gruntjs.com/getting-started) more on their website if you haven't upgraded since a lot has changed._ + +* Type `grunt` in the command line to build the css. +* The results will be built into the release folder. +* Alternatively type `grunt watch` to have the build run automatically when you make changes to +source files. + +--- + +## Release notes +See [Release Notes](https://github.com/topcoat/topcoat/releases/). + +--- + +## License + +[Apache license](https://raw.github.com/topcoat/topcoat/master/LICENSE) + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/contributors.txt b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/contributors.txt new file mode 100755 index 0000000..e4cd8b7 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/contributors.txt @@ -0,0 +1,7 @@ +# Github accounts of the people who signed the TopCoat CLA (http://topcoat.io/dev/topcoat-cla.html). +# CLA needs to be signed before accepting pull requests. +@yourpalsonja +@noformnocontent +@jrowny +@aparticulate +@jlembeck diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.css new file mode 100755 index 0000000..e590e11 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.css @@ -0,0 +1,3450 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
+
+ +
+
+ +
+
+ +
+
+ examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
+
+ +
+
+ +
+
+ +
+
+ tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
+
+ + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 1rem; +} + +input[type="checkbox"] { + height: 1rem; + width: 1rem; + margin-top: 0; + margin-right: -1rem; + margin-bottom: -1rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 1rem; +} + +.topcoat-checkbox__checkmark:before { + width: 1rem; + height: 1rem; + background: #595b5b; + border: 1px solid #303233; + border-radius: 3px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-checkbox__checkmark { + width: 1rem; + height: 1rem; +} + +.topcoat-checkbox__checkmark:after { + top: 2px; + left: 1px; + opacity: 0; + width: 14px; + height: 4px; + background: transparent; + border: 7px solid #fff; + border-width: 3px; + border-top: none; + border-right: none; + border-radius: 1px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.25rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: baseline; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-icon-button:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 1.688rem; + height: 1.688rem; + line-height: 1.688rem; +} + +.topcoat-icon-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 0.81406rem; + height: 0.81406rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 1.06344rem; + height: 1.06344rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
+
+ + +
+
+ + +
+
+ + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.063rem; + width: 1.063rem; + margin-top: 0; + margin-right: -1.063rem; + margin-bottom: -1.063rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #c6c8c8; + line-height: 1.063rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.063rem; + height: 1.063rem; + background: #595b5b; + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.063rem; + height: 1.063rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.313rem; + height: 0.313rem; + background: #fff; + border: 1px solid rgba(255,255,255,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 0.313rem; + left: 0.313rem; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 4px; + border: 1px solid #303233; + background-color: #424546; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-moz-range-track { + border-radius: 4px; + border: 1px solid #303233; + background-color: #424546; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 4px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range::-moz-range-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 4px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 1.313rem; + font-size: 12px; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + padding: 0 0 0 1.3rem; + border-radius: 15px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 12px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 1.688rem; + font-size: 0.875rem; + font-weight: 400; + padding: 0 0 0 1.8rem; + border-radius: 25px; + background-position: 1.2em center; + background-size: 0.875rem; +} + +.topcoat-search-input--large:disabled { + color: #fff; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
+
+ +
+
+ + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 12px; + padding: 0 0.563rem; + border-radius: 4px; + border: 1px solid #303233; + overflow: hidden; + width: 3.5rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 2.6rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #5dc1ff; + background-color: #404141; + right: 0.8rem; + padding-left: 0.75rem; +} + +.topcoat-switch__toggle { + line-height: 1.313rem; + height: 1.313rem; + width: 1rem; + border-radius: 4px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #595b5b; + border: 1px solid #303233; + margin-left: -0.6rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #727373; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #404141; + left: 0.8rem; + padding-left: 0.6rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 1.85rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
+ + + +
+ examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 0.563rem; + height: 1.313rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border-top: 1px solid #303233; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #5dc1ff; + background-color: #404141; + box-shadow: inset 0 0 2px #313231; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
+
+ +
+
+ + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 1.313rem; + font-size: 12px; + letter-spacing: 0; + padding: 0 0.563rem; + border: 1px solid #303233; + border-radius: 4px; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
+
+ +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 1.688rem; + font-size: 0.875rem; +} + +.topcoat-text-input--large:disabled { + color: #fff; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 1rem; + font-size: 1rem; + font-weight: 400; + border-radius: 4px; + line-height: 1.313rem; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + letter-spacing: 0; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 1.3rem; + line-height: 1.688rem; +} + +.topcoat-textarea--large:disabled { + color: #fff; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #fff; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #4b4d4e; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_light.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.min.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.min.css new file mode 100755 index 0000000..1623395 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:1rem}input[type=checkbox]{height:1rem;width:1rem;margin-top:0;margin-right:-1rem;margin-bottom:-1rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:1rem}.topcoat-checkbox__checkmark:before{width:1rem;height:1rem;background:#595b5b;border:1px solid #303233;border-radius:3px;box-shadow:inset 0 1px #727373}.topcoat-checkbox__checkmark{width:1rem;height:1rem}.topcoat-checkbox__checkmark:after{top:2px;left:1px;opacity:0;width:14px;height:4px;background:transparent;border:7px solid #fff;border-width:3px;border-top:0;border-right:0;border-radius:1px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .25rem;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:baseline;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#646666}.topcoat-icon-button:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:1.688rem;height:1.688rem;line-height:1.688rem}.topcoat-icon-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:.81406rem;height:.81406rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:1.06344rem;height:1.06344rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.063rem;width:1.063rem;margin-top:0;margin-right:-1.063rem;margin-bottom:-1.063rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#c6c8c8;line-height:1.063rem}.topcoat-radio-button__checkmark:before{width:1.063rem;height:1.063rem;background:#595b5b;border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-radio-button__checkmark{position:relative;width:1.063rem;height:1.063rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.313rem;height:.313rem;background:#fff;border:1px solid rgba(255,255,255,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:.313rem;left:.313rem}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:4px;border:1px solid #303233;background-color:#424546;height:.5rem;border-radius:15px}.topcoat-range::-moz-range-track{border-radius:4px;border:1px solid #303233;background-color:#424546;height:.5rem;border-radius:15px}.topcoat-range::-webkit-slider-thumb{height:1.313rem;width:.75rem;background-color:#595b5b;border:1px solid #303233;border-radius:4px;box-shadow:inset 0 1px #727373}.topcoat-range::-moz-range-thumb{height:1.313rem;width:.75rem;background-color:#595b5b;border:1px solid #303233;border-radius:4px;box-shadow:inset 0 1px #727373}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:1.313rem;font-size:12px;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;padding:0 0 0 1.3rem;border-radius:15px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:12px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input:disabled::-moz-placeholder{color:#fff}.topcoat-search-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-search-input--large{line-height:1.688rem;font-size:.875rem;font-weight:400;padding:0 0 0 1.8rem;border-radius:25px;background-position:1.2em center;background-size:.875rem}.topcoat-search-input--large:disabled{color:#fff}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#fff}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:12px;padding:0 .563rem;border-radius:4px;border:1px solid #303233;overflow:hidden;width:3.5rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:2.6rem}.topcoat-switch__toggle:before{content:'ON';color:#5dc1ff;background-color:#404141;right:.8rem;padding-left:.75rem}.topcoat-switch__toggle{line-height:1.313rem;height:1.313rem;width:1rem;border-radius:4px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#595b5b;border:1px solid #303233;margin-left:-.6rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #727373;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#404141;left:.8rem;padding-left:.6rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:1.85rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 .563rem;height:1.313rem;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border-top:1px solid #303233}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#5dc1ff;background-color:#404141;box-shadow:inset 0 0 2px #313231}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:1.313rem;font-size:12px;letter-spacing:0;padding:0 .563rem;border:1px solid #303233;border-radius:4px;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input:disabled::-moz-placeholder{color:#fff}.topcoat-text-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:1.688rem;font-size:.875rem}.topcoat-text-input--large:disabled{color:#fff}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:1rem;font-size:1rem;font-weight:400;border-radius:4px;line-height:1.313rem;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;letter-spacing:0}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea:disabled::-moz-placeholder{color:#fff}.topcoat-textarea:disabled:-ms-input-placeholder{color:#fff}.topcoat-textarea--large{font-size:1.3rem;line-height:1.688rem}.topcoat-textarea--large:disabled{color:#fff}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea--large:disabled::-moz-placeholder{color:#fff}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#fff}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#4b4d4e;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_light.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.css new file mode 100755 index 0000000..0da42ea --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.css @@ -0,0 +1,3450 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
+
+ +
+
+ +
+
+ +
+
+ examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
+
+ +
+
+ +
+
+ +
+
+ tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
+
+ + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 1rem; +} + +input[type="checkbox"] { + height: 1rem; + width: 1rem; + margin-top: 0; + margin-right: -1rem; + margin-bottom: -1rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 1rem; +} + +.topcoat-checkbox__checkmark:before { + width: 1rem; + height: 1rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 3px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-checkbox__checkmark { + width: 1rem; + height: 1rem; +} + +.topcoat-checkbox__checkmark:after { + top: 2px; + left: 1px; + opacity: 0; + width: 14px; + height: 4px; + background: transparent; + border: 7px solid #666; + border-width: 3px; + border-top: none; + border-right: none; + border-radius: 1px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.25rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-icon-button:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 1.688rem; + height: 1.688rem; + line-height: 1.688rem; +} + +.topcoat-icon-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 0.81406rem; + height: 0.81406rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 1.06344rem; + height: 1.06344rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
+
+ + +
+
+ + +
+
+ + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.063rem; + width: 1.063rem; + margin-top: 0; + margin-right: -1.063rem; + margin-bottom: -1.063rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #454545; + line-height: 1.063rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.063rem; + height: 1.063rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.063rem; + height: 1.063rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.313rem; + height: 0.313rem; + background: #666; + border: 1px solid rgba(0,0,0,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 0.313rem; + left: 0.313rem; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 4px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-moz-range-track { + border-radius: 4px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 4px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range::-moz-range-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 4px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 1.313rem; + font-size: 12px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + padding: 0 0 0 1.3rem; + border-radius: 15px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 12px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 1.688rem; + font-size: 0.875rem; + font-weight: 400; + padding: 0 0 0 1.8rem; + border-radius: 25px; + background-position: 1.2em center; + background-size: 0.875rem; +} + +.topcoat-search-input--large:disabled { + color: #000; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
+
+ +
+
+ + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 12px; + padding: 0 0.563rem; + border-radius: 4px; + border: 1px solid #a5a8a8; + overflow: hidden; + width: 3.5rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 2.6rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #0083e8; + background-color: #e0f0fa; + right: 0.8rem; + padding-left: 0.75rem; +} + +.topcoat-switch__toggle { + line-height: 1.313rem; + height: 1.313rem; + width: 1rem; + border-radius: 4px; + color: #454545; + text-shadow: 0 1px #fff; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + margin-left: -0.6rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #fff; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #d3d7d7; + left: 0.8rem; + padding-left: 0.6rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 1.85rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
+ + + +
+ examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 0.563rem; + height: 1.313rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border-top: 1px solid #a5a8a8; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #0083e8; + background-color: #e0f0fa; + box-shadow: inset 0 0 2px #c0ced8; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
+
+ +
+
+ + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 1.313rem; + font-size: 12px; + letter-spacing: 0; + padding: 0 0.563rem; + border: 1px solid #a5a8a8; + border-radius: 4px; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
+
+ +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 1.688rem; + font-size: 0.875rem; +} + +.topcoat-text-input--large:disabled { + color: #000; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 1rem; + font-size: 1rem; + font-weight: 400; + border-radius: 4px; + line-height: 1.313rem; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + letter-spacing: 0; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 1.3rem; + line-height: 1.688rem; +} + +.topcoat-textarea--large:disabled { + color: #000; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #000; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #dfe2e2; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_dark.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.min.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.min.css new file mode 100755 index 0000000..e682662 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:1rem}input[type=checkbox]{height:1rem;width:1rem;margin-top:0;margin-right:-1rem;margin-bottom:-1rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:1rem}.topcoat-checkbox__checkmark:before{width:1rem;height:1rem;background:#e5e9e8;border:1px solid #a5a8a8;border-radius:3px;box-shadow:inset 0 1px #fff}.topcoat-checkbox__checkmark{width:1rem;height:1rem}.topcoat-checkbox__checkmark:after{top:2px;left:1px;opacity:0;width:14px;height:4px;background:transparent;border:7px solid #666;border-width:3px;border-top:0;border-right:0;border-radius:1px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .25rem;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:baseline;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#edf1f1}.topcoat-icon-button:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:1.688rem;height:1.688rem;line-height:1.688rem}.topcoat-icon-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:.81406rem;height:.81406rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:1.06344rem;height:1.06344rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.063rem;width:1.063rem;margin-top:0;margin-right:-1.063rem;margin-bottom:-1.063rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#454545;line-height:1.063rem}.topcoat-radio-button__checkmark:before{width:1.063rem;height:1.063rem;background:#e5e9e8;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-radio-button__checkmark{position:relative;width:1.063rem;height:1.063rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.313rem;height:.313rem;background:#666;border:1px solid rgba(0,0,0,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:.313rem;left:.313rem}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:4px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:.5rem;border-radius:15px}.topcoat-range::-moz-range-track{border-radius:4px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:.5rem;border-radius:15px}.topcoat-range::-webkit-slider-thumb{height:1.313rem;width:.75rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:4px;box-shadow:inset 0 1px #fff}.topcoat-range::-moz-range-thumb{height:1.313rem;width:.75rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:4px;box-shadow:inset 0 1px #fff}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:1.313rem;font-size:12px;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;padding:0 0 0 1.3rem;border-radius:15px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:12px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input:disabled::-moz-placeholder{color:#000}.topcoat-search-input:disabled:-ms-input-placeholder{color:#000}.topcoat-search-input--large{line-height:1.688rem;font-size:.875rem;font-weight:400;padding:0 0 0 1.8rem;border-radius:25px;background-position:1.2em center;background-size:.875rem}.topcoat-search-input--large:disabled{color:#000}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input--large:disabled::-moz-placeholder{color:#000}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#000}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:12px;padding:0 .563rem;border-radius:4px;border:1px solid #a5a8a8;overflow:hidden;width:3.5rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:2.6rem}.topcoat-switch__toggle:before{content:'ON';color:#0083e8;background-color:#e0f0fa;right:.8rem;padding-left:.75rem}.topcoat-switch__toggle{line-height:1.313rem;height:1.313rem;width:1rem;border-radius:4px;color:#454545;text-shadow:0 1px #fff;background-color:#e5e9e8;border:1px solid #a5a8a8;margin-left:-.6rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #fff;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#d3d7d7;left:.8rem;padding-left:.6rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:1.85rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 .563rem;height:1.313rem;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border-top:1px solid #a5a8a8}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#0083e8;background-color:#e0f0fa;box-shadow:inset 0 0 2px #c0ced8}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:1.313rem;font-size:12px;letter-spacing:0;padding:0 .563rem;border:1px solid #a5a8a8;border-radius:4px;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input:disabled::-moz-placeholder{color:#000}.topcoat-text-input:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:1.688rem;font-size:.875rem}.topcoat-text-input--large:disabled{color:#000}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input--large:disabled::-moz-placeholder{color:#000}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:1rem;font-size:1rem;font-weight:400;border-radius:4px;line-height:1.313rem;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;letter-spacing:0}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea:disabled::-moz-placeholder{color:#000}.topcoat-textarea:disabled:-ms-input-placeholder{color:#000}.topcoat-textarea--large{font-size:1.3rem;line-height:1.688rem}.topcoat-textarea--large:disabled{color:#000}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea--large:disabled::-moz-placeholder{color:#000}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#000}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#dfe2e2;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_dark.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.css new file mode 100755 index 0000000..0d3aa5f --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.css @@ -0,0 +1,3700 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
+
+ +
+
+ +
+
+ +
+
+ examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
+
+ +
+
+ +
+
+ +
+
+ tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
+
+ + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 2rem; +} + +input[type="checkbox"] { + height: 2rem; + width: 2rem; + margin-top: 0; + margin-right: -2rem; + margin-bottom: -2rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 2rem; +} + +.topcoat-checkbox__checkmark:before { + width: 2rem; + height: 2rem; + background: #595b5b; + border: 1px solid #303233; + border-radius: 3px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-checkbox__checkmark { + width: 2rem; + height: 2rem; +} + +.topcoat-checkbox__checkmark:after { + top: 1px; + left: 2px; + opacity: 0; + width: 28px; + height: 11px; + background: transparent; + border: 7px solid #fff; + border-width: 7px; + border-top: none; + border-right: none; + border-radius: 2px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.75rem; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: baseline; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-icon-button:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 4.375rem; + height: 4.375rem; + line-height: 4.375rem; +} + +.topcoat-icon-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 1.62rem; + height: 1.62rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 2.499999998125rem; + height: 2.499999998125rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list, +.topcoat-list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header, +.topcoat-list__header { + margin: 0; +} + +.list__container, +.topcoat-list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item, +.topcoat-list__item { + margin: 0; + padding: 0; +} + +/* topdoc + name: List + description: Topcoat default list skin + markup: +
+

Category

+
    +
  • + Item +
  • +
  • + Item +
  • +
  • + Item +
  • +
+
+ tags: + - mobile + - list +*/ + +.topcoat-list { + border-top: 1px solid #2f3234; + border-bottom: 1px solid #5e6061; + background-color: #444849; +} + +.topcoat-list__header { + padding: 4px 20px; + font-size: 0.9em; + font-weight: 400; + background-color: #3b3e40; + color: #868888; + text-shadow: 0 -1px 0 rgba(0,0,0,0.3); + border-top: solid 1px rgba(255,255,255,0.1); + border-bottom: solid 1px rgba(255,255,255,0.05); +} + +.topcoat-list__container { + border-top: 1px solid #2f3234; + color: #c6c8c8; +} + +.topcoat-list__item { + padding: 1.25rem; + border-top: 1px solid #5e6061; + border-bottom: 1px solid #2f3234; +} + +.topcoat-list__item:first-child { + border-top: 1px solid rgba(0,0,0,0.05); +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar, +.topcoat-navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item, +.topcoat-navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title, +.topcoat-navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* topdoc + name: Navigation Bar + description: A place where navigation goes to drink + markup: +
+
+

Header

+
+
+ tags: + - desktop + - light + - mobile + - navigation + - bar +*/ + +.topcoat-navigation-bar { + height: 4.375rem; + padding-left: 1rem; + padding-right: 1rem; + background: #595b5b; + color: #fff; + box-shadow: inset 0 -1px #333434, 0 1px rgba(0,0,0,0.15); +} + +.topcoat-navigation-bar__item { + margin: 0; + line-height: 4.375rem; + vertical-align: top; +} + +.topcoat-navigation-bar__title { + font-size: 1.3rem; + font-weight: 400; + color: #fff; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
+
+ + +
+
+ + +
+
+ + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.875rem; + width: 1.875rem; + margin-top: 0; + margin-right: -1.875rem; + margin-bottom: -1.875rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #c6c8c8; + line-height: 1.875rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.875rem; + height: 1.875rem; + background: #595b5b; + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.875rem; + height: 1.875rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.875rem; + height: 0.875rem; + background: #fff; + border: 1px solid rgba(255,255,255,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 7px; + left: 7px; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 6px; + border: 1px solid #303233; + background-color: #424546; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-moz-range-track { + border-radius: 6px; + border: 1px solid #303233; + background-color: #424546; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 3rem; + width: 2rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 6px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range::-moz-range-thumb { + height: 3rem; + width: 2rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 6px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 3rem; + font-size: 16px; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + padding: 0 0 0 2rem; + border-radius: 30px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 16px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 4.375rem; + font-size: 1.3rem; + font-weight: 200; + padding: 0 0 0 2.9rem; + border-radius: 40px; + background-position: 1.2em center; + background-size: 1.3rem; +} + +.topcoat-search-input--large:disabled { + color: #fff; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
+
+ +
+
+ + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 16px; + padding: 0 1.25rem; + border-radius: 6px; + border: 1px solid #303233; + overflow: hidden; + width: 6rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 5rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #5dc1ff; + background-color: #404141; + right: 1rem; + padding-left: 1.5rem; +} + +.topcoat-switch__toggle { + line-height: 3rem; + height: 3rem; + width: 2rem; + border-radius: 6px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #595b5b; + border: 1px solid #303233; + margin-left: -1.3rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #727373; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #404141; + left: 1rem; + padding-left: 2rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 2.7rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
+ + + +
+ examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 1.25rem; + height: 3rem; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border-top: 1px solid #303233; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #5dc1ff; + background-color: #404141; + box-shadow: inset 0 0 2px #313231; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
+
+ +
+
+ + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 3rem; + font-size: 16px; + letter-spacing: 1px; + padding: 0 1.25rem; + border: 1px solid #303233; + border-radius: 6px; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
+
+ +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 4.375rem; + font-size: 1.3rem; +} + +.topcoat-text-input--large:disabled { + color: #fff; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 2rem; + font-size: 2.5rem; + font-weight: 200; + border-radius: 6px; + line-height: 3rem; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + letter-spacing: 1px; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 3rem; + line-height: 4.375rem; +} + +.topcoat-textarea--large:disabled { + color: #fff; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #fff; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #4b4d4e; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_light.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.min.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.min.css new file mode 100755 index 0000000..2ce6f11 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:2rem}input[type=checkbox]{height:2rem;width:2rem;margin-top:0;margin-right:-2rem;margin-bottom:-2rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:2rem}.topcoat-checkbox__checkmark:before{width:2rem;height:2rem;background:#595b5b;border:1px solid #303233;border-radius:3px;box-shadow:inset 0 1px #727373}.topcoat-checkbox__checkmark{width:2rem;height:2rem}.topcoat-checkbox__checkmark:after{top:1px;left:2px;opacity:0;width:28px;height:11px;background:transparent;border:7px solid #fff;border-width:7px;border-top:0;border-right:0;border-radius:2px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .75rem;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:baseline;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#646666}.topcoat-icon-button:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:4.375rem;height:4.375rem;line-height:4.375rem}.topcoat-icon-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:1.62rem;height:1.62rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:2.499999998125rem;height:2.499999998125rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.list,.topcoat-list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header,.topcoat-list__header{margin:0}.list__container,.topcoat-list__container{padding:0;margin:0;list-style-type:none}.list__item,.topcoat-list__item{margin:0;padding:0}.topcoat-list{border-top:1px solid #2f3234;border-bottom:1px solid #5e6061;background-color:#444849}.topcoat-list__header{padding:4px 20px;font-size:.9em;font-weight:400;background-color:#3b3e40;color:#868888;text-shadow:0 -1px 0 rgba(0,0,0,.3);border-top:solid 1px rgba(255,255,255,.1);border-bottom:solid 1px rgba(255,255,255,.05)}.topcoat-list__container{border-top:1px solid #2f3234;color:#c6c8c8}.topcoat-list__item{padding:1.25rem;border-top:1px solid #5e6061;border-bottom:1px solid #2f3234}.topcoat-list__item:first-child{border-top:1px solid rgba(0,0,0,.05)}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.navigation-bar,.topcoat-navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item,.topcoat-navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title,.topcoat-navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.topcoat-navigation-bar{height:4.375rem;padding-left:1rem;padding-right:1rem;background:#595b5b;color:#fff;box-shadow:inset 0 -1px #333434,0 1px rgba(0,0,0,.15)}.topcoat-navigation-bar__item{margin:0;line-height:4.375rem;vertical-align:top}.topcoat-navigation-bar__title{font-size:1.3rem;font-weight:400;color:#fff}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.875rem;width:1.875rem;margin-top:0;margin-right:-1.875rem;margin-bottom:-1.875rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#c6c8c8;line-height:1.875rem}.topcoat-radio-button__checkmark:before{width:1.875rem;height:1.875rem;background:#595b5b;border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-radio-button__checkmark{position:relative;width:1.875rem;height:1.875rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.875rem;height:.875rem;background:#fff;border:1px solid rgba(255,255,255,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:7px;left:7px}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:6px;border:1px solid #303233;background-color:#424546;height:1rem;border-radius:30px}.topcoat-range::-moz-range-track{border-radius:6px;border:1px solid #303233;background-color:#424546;height:1rem;border-radius:30px}.topcoat-range::-webkit-slider-thumb{height:3rem;width:2rem;background-color:#595b5b;border:1px solid #303233;border-radius:6px;box-shadow:inset 0 1px #727373}.topcoat-range::-moz-range-thumb{height:3rem;width:2rem;background-color:#595b5b;border:1px solid #303233;border-radius:6px;box-shadow:inset 0 1px #727373}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:3rem;font-size:16px;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;padding:0 0 0 2rem;border-radius:30px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:16px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input:disabled::-moz-placeholder{color:#fff}.topcoat-search-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-search-input--large{line-height:4.375rem;font-size:1.3rem;font-weight:200;padding:0 0 0 2.9rem;border-radius:40px;background-position:1.2em center;background-size:1.3rem}.topcoat-search-input--large:disabled{color:#fff}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#fff}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:16px;padding:0 1.25rem;border-radius:6px;border:1px solid #303233;overflow:hidden;width:6rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:5rem}.topcoat-switch__toggle:before{content:'ON';color:#5dc1ff;background-color:#404141;right:1rem;padding-left:1.5rem}.topcoat-switch__toggle{line-height:3rem;height:3rem;width:2rem;border-radius:6px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#595b5b;border:1px solid #303233;margin-left:-1.3rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #727373;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#404141;left:1rem;padding-left:2rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:2.7rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 1.25rem;height:3rem;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border-top:1px solid #303233}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#5dc1ff;background-color:#404141;box-shadow:inset 0 0 2px #313231}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:3rem;font-size:16px;letter-spacing:1px;padding:0 1.25rem;border:1px solid #303233;border-radius:6px;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input:disabled::-moz-placeholder{color:#fff}.topcoat-text-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:4.375rem;font-size:1.3rem}.topcoat-text-input--large:disabled{color:#fff}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:2rem;font-size:2.5rem;font-weight:200;border-radius:6px;line-height:3rem;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;letter-spacing:1px}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea:disabled::-moz-placeholder{color:#fff}.topcoat-textarea:disabled:-ms-input-placeholder{color:#fff}.topcoat-textarea--large{font-size:3rem;line-height:4.375rem}.topcoat-textarea--large:disabled{color:#fff}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea--large:disabled::-moz-placeholder{color:#fff}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#fff}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#4b4d4e;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_light.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.css new file mode 100755 index 0000000..6735055 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.css @@ -0,0 +1,3700 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
+
+ +
+
+ +
+
+ +
+
+ examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
+
+ +
+
+ +
+
+ +
+
+ tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
+
+ + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 2rem; +} + +input[type="checkbox"] { + height: 2rem; + width: 2rem; + margin-top: 0; + margin-right: -2rem; + margin-bottom: -2rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 2rem; +} + +.topcoat-checkbox__checkmark:before { + width: 2rem; + height: 2rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 3px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-checkbox__checkmark { + width: 2rem; + height: 2rem; +} + +.topcoat-checkbox__checkmark:after { + top: 1px; + left: 2px; + opacity: 0; + width: 28px; + height: 11px; + background: transparent; + border: 7px solid #666; + border-width: 7px; + border-top: none; + border-right: none; + border-radius: 2px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.75rem; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-icon-button:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 4.375rem; + height: 4.375rem; + line-height: 4.375rem; +} + +.topcoat-icon-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 1.62rem; + height: 1.62rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 2.499999998125rem; + height: 2.499999998125rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list, +.topcoat-list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header, +.topcoat-list__header { + margin: 0; +} + +.list__container, +.topcoat-list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item, +.topcoat-list__item { + margin: 0; + padding: 0; +} + +/* topdoc + name: List + description: Topcoat default list skin + markup: +
+

Category

+
    +
  • + Item +
  • +
  • + Item +
  • +
  • + Item +
  • +
+
+ tags: + - mobile + - list +*/ + +.topcoat-list { + border-top: 1px solid #bcbfbf; + border-bottom: 1px solid #eff1f1; + background-color: #dfe2e2; +} + +.topcoat-list__header { + padding: 4px 20px; + font-size: 0.9em; + font-weight: 400; + background-color: #cccfcf; + color: #656565; + text-shadow: 0 1px 0 rgba(255,255,255,0.5); + border-top: 1px solid rgba(255,255,255,0.5); + border-bottom: 1px solid rgba(255,255,255,0.23); +} + +.topcoat-list__container { + border-top: 1px solid #bcbfbf; + color: #454545; +} + +.topcoat-list__item { + padding: 1.25rem; + border-top: 1px solid #eff1f1; + border-bottom: 1px solid #bcbfbf; +} + +.topcoat-list__item:first-child { + border-top: 1px solid rgba(0,0,0,0.05); +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar, +.topcoat-navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item, +.topcoat-navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title, +.topcoat-navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* topdoc + name: Navigation Bar + description: A place where navigation goes to drink + markup: +
+
+

Header

+
+
+ tags: + - desktop + - light + - mobile + - navigation + - bar +*/ + +.topcoat-navigation-bar { + height: 4.375rem; + padding-left: 1rem; + padding-right: 1rem; + background: #e5e9e8; + color: #000; + box-shadow: inset 0 -1px #b9bcbc, 0 1px #d4d6d6; +} + +.topcoat-navigation-bar__item { + margin: 0; + line-height: 4.375rem; + vertical-align: top; +} + +.topcoat-navigation-bar__title { + font-size: 1.3rem; + font-weight: 400; + color: #000; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
+
+ + +
+
+ + +
+
+ + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.875rem; + width: 1.875rem; + margin-top: 0; + margin-right: -1.875rem; + margin-bottom: -1.875rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #454545; + line-height: 1.875rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.875rem; + height: 1.875rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.875rem; + height: 1.875rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.875rem; + height: 0.875rem; + background: #666; + border: 1px solid rgba(0,0,0,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 7px; + left: 7px; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 6px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-moz-range-track { + border-radius: 6px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 3rem; + width: 2rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 6px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range::-moz-range-thumb { + height: 3rem; + width: 2rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 6px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 3rem; + font-size: 16px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + padding: 0 0 0 2rem; + border-radius: 30px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 16px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 4.375rem; + font-size: 1.3rem; + font-weight: 200; + padding: 0 0 0 2.9rem; + border-radius: 40px; + background-position: 1.2em center; + background-size: 1.3rem; +} + +.topcoat-search-input--large:disabled { + color: #000; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
+
+ +
+
+ + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 16px; + padding: 0 1.25rem; + border-radius: 6px; + border: 1px solid #a5a8a8; + overflow: hidden; + width: 6rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 5rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #0083e8; + background-color: #e0f0fa; + right: 1rem; + padding-left: 1.5rem; +} + +.topcoat-switch__toggle { + line-height: 3rem; + height: 3rem; + width: 2rem; + border-radius: 6px; + color: #454545; + text-shadow: 0 1px #fff; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + margin-left: -1.3rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #fff; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #d3d7d7; + left: 1rem; + padding-left: 2rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 2.7rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
+ + + +
+ examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 1.25rem; + height: 3rem; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border-top: 1px solid #a5a8a8; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #0083e8; + background-color: #e0f0fa; + box-shadow: inset 0 0 2px #c0ced8; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
+
+ +
+
+ + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 3rem; + font-size: 16px; + letter-spacing: 1px; + padding: 0 1.25rem; + border: 1px solid #a5a8a8; + border-radius: 6px; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
+
+ +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 4.375rem; + font-size: 1.3rem; +} + +.topcoat-text-input--large:disabled { + color: #000; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 2rem; + font-size: 2.5rem; + font-weight: 200; + border-radius: 6px; + line-height: 3rem; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + letter-spacing: 1px; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
+
+ + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 3rem; + line-height: 4.375rem; +} + +.topcoat-textarea--large:disabled { + color: #000; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #000; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #dfe2e2; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_dark.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.min.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.min.css new file mode 100755 index 0000000..7692377 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:2rem}input[type=checkbox]{height:2rem;width:2rem;margin-top:0;margin-right:-2rem;margin-bottom:-2rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:2rem}.topcoat-checkbox__checkmark:before{width:2rem;height:2rem;background:#e5e9e8;border:1px solid #a5a8a8;border-radius:3px;box-shadow:inset 0 1px #fff}.topcoat-checkbox__checkmark{width:2rem;height:2rem}.topcoat-checkbox__checkmark:after{top:1px;left:2px;opacity:0;width:28px;height:11px;background:transparent;border:7px solid #666;border-width:7px;border-top:0;border-right:0;border-radius:2px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .75rem;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:baseline;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#edf1f1}.topcoat-icon-button:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:4.375rem;height:4.375rem;line-height:4.375rem}.topcoat-icon-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:1.62rem;height:1.62rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:2.499999998125rem;height:2.499999998125rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.list,.topcoat-list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header,.topcoat-list__header{margin:0}.list__container,.topcoat-list__container{padding:0;margin:0;list-style-type:none}.list__item,.topcoat-list__item{margin:0;padding:0}.topcoat-list{border-top:1px solid #bcbfbf;border-bottom:1px solid #eff1f1;background-color:#dfe2e2}.topcoat-list__header{padding:4px 20px;font-size:.9em;font-weight:400;background-color:#cccfcf;color:#656565;text-shadow:0 1px 0 rgba(255,255,255,.5);border-top:1px solid rgba(255,255,255,.5);border-bottom:1px solid rgba(255,255,255,.23)}.topcoat-list__container{border-top:1px solid #bcbfbf;color:#454545}.topcoat-list__item{padding:1.25rem;border-top:1px solid #eff1f1;border-bottom:1px solid #bcbfbf}.topcoat-list__item:first-child{border-top:1px solid rgba(0,0,0,.05)}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.navigation-bar,.topcoat-navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item,.topcoat-navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title,.topcoat-navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.topcoat-navigation-bar{height:4.375rem;padding-left:1rem;padding-right:1rem;background:#e5e9e8;color:#000;box-shadow:inset 0 -1px #b9bcbc,0 1px #d4d6d6}.topcoat-navigation-bar__item{margin:0;line-height:4.375rem;vertical-align:top}.topcoat-navigation-bar__title{font-size:1.3rem;font-weight:400;color:#000}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.875rem;width:1.875rem;margin-top:0;margin-right:-1.875rem;margin-bottom:-1.875rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#454545;line-height:1.875rem}.topcoat-radio-button__checkmark:before{width:1.875rem;height:1.875rem;background:#e5e9e8;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-radio-button__checkmark{position:relative;width:1.875rem;height:1.875rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.875rem;height:.875rem;background:#666;border:1px solid rgba(0,0,0,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:7px;left:7px}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:6px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:1rem;border-radius:30px}.topcoat-range::-moz-range-track{border-radius:6px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:1rem;border-radius:30px}.topcoat-range::-webkit-slider-thumb{height:3rem;width:2rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:6px;box-shadow:inset 0 1px #fff}.topcoat-range::-moz-range-thumb{height:3rem;width:2rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:6px;box-shadow:inset 0 1px #fff}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:3rem;font-size:16px;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;padding:0 0 0 2rem;border-radius:30px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:16px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input:disabled::-moz-placeholder{color:#000}.topcoat-search-input:disabled:-ms-input-placeholder{color:#000}.topcoat-search-input--large{line-height:4.375rem;font-size:1.3rem;font-weight:200;padding:0 0 0 2.9rem;border-radius:40px;background-position:1.2em center;background-size:1.3rem}.topcoat-search-input--large:disabled{color:#000}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input--large:disabled::-moz-placeholder{color:#000}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#000}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:16px;padding:0 1.25rem;border-radius:6px;border:1px solid #a5a8a8;overflow:hidden;width:6rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:5rem}.topcoat-switch__toggle:before{content:'ON';color:#0083e8;background-color:#e0f0fa;right:1rem;padding-left:1.5rem}.topcoat-switch__toggle{line-height:3rem;height:3rem;width:2rem;border-radius:6px;color:#454545;text-shadow:0 1px #fff;background-color:#e5e9e8;border:1px solid #a5a8a8;margin-left:-1.3rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #fff;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#d3d7d7;left:1rem;padding-left:2rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:2.7rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 1.25rem;height:3rem;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border-top:1px solid #a5a8a8}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#0083e8;background-color:#e0f0fa;box-shadow:inset 0 0 2px #c0ced8}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:3rem;font-size:16px;letter-spacing:1px;padding:0 1.25rem;border:1px solid #a5a8a8;border-radius:6px;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input:disabled::-moz-placeholder{color:#000}.topcoat-text-input:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:4.375rem;font-size:1.3rem}.topcoat-text-input--large:disabled{color:#000}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input--large:disabled::-moz-placeholder{color:#000}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:2rem;font-size:2.5rem;font-weight:200;border-radius:6px;line-height:3rem;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;letter-spacing:1px}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea:disabled::-moz-placeholder{color:#000}.topcoat-textarea:disabled:-ms-input-placeholder{color:#000}.topcoat-textarea--large{font-size:3rem;line-height:4.375rem}.topcoat-textarea--large:disabled{color:#000}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea--large:disabled::-moz-placeholder{color:#000}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#000}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#dfe2e2;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_dark.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/brackets.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/brackets.css new file mode 100755 index 0000000..8e32479 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/brackets.css @@ -0,0 +1,69 @@ +/** + * Brackets theme + * + * @author Garth Braithwaite + * @version 0.0.1 + */ +pre { + word-wrap: break-word; + padding: 6px 10px; + line-height: 19px; + margin-bottom: 20px; +} + +pre, code { + font-family: source-code-pro, 'Source Code Pro', Courier, monospace; + color: #535353; +} + +pre, pre code { + font-size: 13px; +} + +pre .comment { + color: #A2A2A2; +} + +pre .support { + color: #0086B3; +} + +pre .tag, pre .tag-name { + color: #446FBD; +} + +pre .css-property { + color: #8757AD; +} + +pre .css-value, pre .support.namespace { + color: #F18900; +} +pre .vendor-prefix { + color: #535353; +} +pre .constant.numeric, pre .keyword.unit { + color: #738D00; +} +pre .hex-color { + color: #F18900; +} +pre .entity.class { + color: #5585C4; +} + +pre .entity.id, pre .entity.function { + color: #900; +} + +pre .attribute, pre .variable { + color: #738D00; +} + +pre .string, pre .support.value { + color: #8757AD; +} + +pre .regexp { + color: #535353; +} \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/main.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/main.css new file mode 100755 index 0000000..2d0bda3 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/main.css @@ -0,0 +1,508 @@ +html,body{ + margin:0; + padding:0; + height: 100%; +} +body { + font-family: source-sans-pro, sans-serif; + position: relative; + -webkit-font-smoothing: antialiased; +} +body.light { + background: #F4F4F4; +} +body.dark { + color: #F0F1F1; + background: #4A4D4E; +} +body.light { + color: #181919; +} + +h1 { + font-weight: 600; +} +#wrapper { + width: 100%; + overflow-x: hidden; + background: inherit; + position: relative; +} +#site { + width: 100%; + position: relative; + z-index: 10; + background: inherit; + left: 0; + transition: all 0.2s ease-out; + -webkit-transition: all 0.2s ease-out; + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); +} +#site:before{ + position: absolute; + content: ''; + left: -4px; + height: 100%; + width: 4px; + background: #3B3E3E; +} +#site.open { + transform: translate3d(250px, 0, 0); + -webkit-transform: translate3d(250px, 0, 0); +} +pre { + font-family: source-code-pro, sans-serif; + font-size: 12px; +} +/* Main Header */ +#main-header { + color: #373435; + background: #fff; + height: 98px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px 20px; + position: relative; +} +#main-header hgroup { + text-align: center; +} +#main-header hgroup h1 { + font-size: 40px; + margin: 5px 0 0; + letter-spacing: -.065em; + line-height: 1.1em; +} +#main-header hgroup a { + color: #464646; + text-decoration: none; +} +#main-header hgroup a:hover { + color: #000; +} +#main-header hgroup p { + font-size: 13px; + color: #999; + margin: 0; +} +#main-header nav { + display: none; +} +#slide-menu-button { + position: absolute; + top: 20px; + left: 20px; + display: inline-block; + vertical-align: top; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-background-clip: padding; + -moz-background-clip: padding; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + padding: 0 0.5rem; + line-height: 2rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + -webkit-box-shadow: inset 0 1px #fff; + box-shadow: inset 0 1px #fff; + -webkit-border-radius: 3px; + border-radius: 3px; + width: 2.6rem; + height: 2.6rem; + line-height: 2.6rem; + border: 1px solid transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +#slide-menu:disabled, +#slide-menu.is-disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} +#slide-menu-button:active, +#slide-menu-button.is-active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + -webkit-box-shadow: inset 0 1px rgba(0,0,0,0.12); + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} +#slide-menu-button span { + background-repeat: no-repeat; + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWw0KCTwhRU5USVRZIG5zX2V4dGVuZCAiaHR0cDovL25zLmFkb2JlLmNvbS9FeHRlbnNpYmlsaXR5LzEuMC8iPg0KCTwhRU5USVRZIG5zX2FpICJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlSWxsdXN0cmF0b3IvMTAuMC8iPg0KCTwhRU5USVRZIG5zX2dyYXBocyAiaHR0cDovL25zLmFkb2JlLmNvbS9HcmFwaHMvMS4wLyI+DQoJPCFFTlRJVFkgbnNfdmFycyAiaHR0cDovL25zLmFkb2JlLmNvbS9WYXJpYWJsZXMvMS4wLyI+DQoJPCFFTlRJVFkgbnNfaW1yZXAgImh0dHA6Ly9ucy5hZG9iZS5jb20vSW1hZ2VSZXBsYWNlbWVudC8xLjAvIj4NCgk8IUVOVElUWSBuc19zZncgImh0dHA6Ly9ucy5hZG9iZS5jb20vU2F2ZUZvcldlYi8xLjAvIj4NCgk8IUVOVElUWSBuc19jdXN0b20gImh0dHA6Ly9ucy5hZG9iZS5jb20vR2VuZXJpY0N1c3RvbU5hbWVzcGFjZS8xLjAvIj4NCgk8IUVOVElUWSBuc19hZG9iZV94cGF0aCAiaHR0cDovL25zLmFkb2JlLmNvbS9YUGF0aC8xLjAvIj4NCl0+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zOng9IiZuc19leHRlbmQ7IiB4bWxuczppPSImbnNfYWk7IiB4bWxuczpncmFwaD0iJm5zX2dyYXBoczsiDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDAgNDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQwIDQwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzd2l0Y2g+DQoJPGZvcmVpZ25PYmplY3QgcmVxdWlyZWRFeHRlbnNpb25zPSImbnNfYWk7IiB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj4NCgkJPGk6cGdmUmVmICB4bGluazpocmVmPSIjYWRvYmVfaWxsdXN0cmF0b3JfcGdmIj4NCgkJPC9pOnBnZlJlZj4NCgk8L2ZvcmVpZ25PYmplY3Q+DQoJPGcgaTpleHRyYW5lb3VzPSJzZWxmIj4NCgkJPGcgb3BhY2l0eT0iMC43Ij4NCgkJCTxnIG9wYWNpdHk9IjAuNzUiPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRkZGRkZGIiBkPSJNMzksMTF2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwxMywzOSwxMi41MiwzOSwxMXoiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMTBWOWMwLTEuNDctMC40OC0yLTItMkgzQzEuNDcsNywxLDcuNTIsMSw5djFjMCwxLjU1LDAuNTIsMiwyLDJoMzQNCgkJCQkJQzM4LjUsMTIsMzksMTEuNTIsMzksMTB6Ii8+DQoJCQk8L2c+DQoJCTwvZz4NCgkJPGcgb3BhY2l0eT0iMC43Ij4NCgkJCTxnIG9wYWNpdHk9IjAuNzUiPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRkZGRkZGIiBkPSJNMzksMjJ2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwyNCwzOSwyMy41MiwzOSwyMnoiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMjF2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MWMwLDEuNTUsMC41MiwyLDIsMmgzNA0KCQkJCQlDMzguNSwyMywzOSwyMi41MiwzOSwyMXoiLz4NCgkJCTwvZz4NCgkJPC9nPg0KCQk8ZyBvcGFjaXR5PSIwLjciPg0KCQkJPGcgb3BhY2l0eT0iMC43NSI+DQoJCQkJPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiNGRkZGRkYiIGQ9Ik0zOSwzM3YtMWMwLTEuNDcxLTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwzNSwzOSwzNC41MiwzOSwzM3oiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMzJ2LTFjMC0xLjQ3MS0wLjQ4LTItMi0ySDNjLTEuNTMsMC0yLDAuNTItMiwydjFjMCwxLjU1LDAuNTIsMiwyLDJoMzQNCgkJCQkJQzM4LjUsMzQsMzksMzMuNTIsMzksMzJ6Ii8+DQoJCQk8L2c+DQoJCTwvZz4NCgk8L2c+DQo8L3N3aXRjaD4NCjxpOnBnZiAgaWQ9ImFkb2JlX2lsbHVzdHJhdG9yX3BnZiI+DQoJPCFbQ0RBVEFbDQoJZUp6c3ZlbVNKTG1SSnZnRTlnNitQMXFFSEprS0dnQ0RBY1lkV1pId09IbzRRM2FYa094anBXV2tKSmtWVGVaMEhpVlpXZVJ5bjM3MQorMVFWZ0xsN1pFVWVSVksySzFDVkVhNE9nNW5oVU9qeHFlTHYvbzh2Zi9QRjlkZHZmdmZ3UmJxYUQ5UGYvZDNOMjRkbjc5NjgvZm1CCjFNTXZYcjc4N3R0M2IwSDZ5YTkvZWdqcjFTeVZybjlSdjdLSy8venc5dHNYYjE3L25GOWRKZm55SGxmLzVCZmZQdnZkdzh1WEQ0ZGYKUG52OTlicy9QSHY1OFBhbmg1LzhWTDcvN1l0M0x4K2t4aCtldmZyZGQyOS8vL0QyNnRzLy92Nm5mbXRwNi9iWk8vbCsrVm44V1VpSAorUE01SHI3OEZiNSs5dnFQejc3OTlzWC8rNENicFlwN0hkOTg5L3JyRjY5L2Yzenovd2p4OEVYS2g3UWR2aWp5MVg5LzhldUhiOS96Ci9lMmI1OSs5ZW5qOTdzdTNiNTQvZlB2dHpadVhiOTUrKy9QRHpaK2Z2VDc4NnRudjVadG5oLzliM3VETm53N0hsOCtlLzhja2I1Mi8KdW4veDhrRmU4Tld6ZDRjUTBSZlh2d2p4cStOM0wxNSsvUS9mdmZyZGc3ejZ1cEdjdm1LVC8vU3R0Q1hONG0rUXkxZS9lQ1dVM3p5OApleWZQSlRkRWYvNzY3NC9qWXdpUjVTZi85dXVIMzc5ZzkwdTMvSytmV3JOdjMzeno2dG5iLzhDMWh5K1crU0QvMlIxLysvRHFtNWZTCmUzemRPRi9sd3hmOHQvOXA5ZVF0V09lTHVGYnBsYkllMGx3UEtWZjl2dmZOd3g5ZlBQenA1NGQvZVBQNlFUdmcrdTI3MytnUUxNczgKNjcvNnphKy9rekgrcDljdjNzbURyU0J0MmdPL2V2UDF3MHVwMzY2L2YvbU1MODRTK3I5YTRiZlBaRTY4azdGNzgvSzdkNXhaMWU4ZwpQZnpMWjM5K3dEQUZ2Y0UvZnZQdytyZHYvcG5QK0VVTTBrN2NyclpEWE9TTlF0eVdRNmhzUCtKUnQ3bmRNL1IvdFdrMGhHYThmY3lRCkwyV2Mvdkh0aTkrL2VQM3pMMUtWdms1eDFpSDgrN2N2dnU0akdBN1YvcGZHcitydy8rYi82OVBLaTc5NzkvRGFubDdtemMydmhua3cKWC8zcU4zTFh1OWRmMzd4NWhkNy9GaE5jSnNCcm1Sc3YzL3hldjJ0Lzh4dTUvTHR2OUEzNCtTc1pxQy9mdm5pTk5xZC80RGYxcXk5ZgpmaWRmL2YzYk45OTk4NHZYLy81bStva3U3WDkrZUM3clY4Ynk2OE0vL3U1L3l3ZFpuNXliaDkrK2ZmWmNHcERQcmM3VnN4ZmYvUFM5Cnpjbkx2WDA0NkpkeUpULzY3KysvK3ZiaDMyVlY5Y3VWZXZmNmp3OHYzM3d6Tk5zb3dsVU8vL0xzN1RmZjMvU1hMNSs5ZnZiMlFIcHIKK1pjdi9pamZQSk9lNm0xMzJoTWFsVm55alhRT0wyR1ZreHU4cDhMdzFSTnU5T3pkSDRRQlBieisrdHZXdG43Y1A3alN2cis5M3p6SApISHg3T0w3OTd0cy9ISDc3NXMzTDF1eitxOWE2a1VsRi9iK05lM3pKQzE3LzQydnRvUE03V1lYVE93bi8rWnU3aTlSKy9BN3k1ZDl5CjZ6ZlBYcjU4OGZ1M3o3NzV3NHZubDI1dzRmdDJKLzN1UXliV24xLzk3czNMRjkrKzZ2TnBvSHo1N08yN0Y4OWZQdnptejkrK2UzajEKNU1FOTNIMzlRcGpjSTh2NHZYVis4NmRuNzU3LzRaY3ZmdmYyMmRzWEQrOWRmUmlBZjMveCttdVorNy81N3NXN2g5NUJiMTU5QXlubAo4SnMvUFB2bWdhL3g3Zy8zclBtYjFtRCtTbGoveU55LytPSTlYRCtzaCtQcjRmdS9mL3ZzNnhleW9ZalE5ZmR2WG43OThQcndhN0QzCmFmZEp0cTl5T0g0OS9kczBXd2tzeStIdnZqcStuZjdiTkovK2hKTVNoNUtzTEZZeS8vZXk0djlKZm8ybHRGTG5iVmV1aDNLVWNtUGwKZGloMzgvMDAzM3ZaUGRqNEU0ZVNockxzU3RZeThWY0pxNVRDMzNVbzI2NWNoMk1yTjYwY3c2MFUvM1E3eVljN2ttN0QvVmpHcnVQRAorVThheWpLVUhGZVVTWC9GTXBRYU55bjY3L1ZRamxxbS8rdlNXRDQybW1rM25zc3dxbjFzcFV4dGVKZGhrSFZVeDlHdFV2QWJvMXAzCjQ3c05JeXovVGpiVVB0akhOc3o2RzZOOE40NjIvS3MvODhXeGp0TnVvSk9NSzM1alpESEdLMHZsS0plVEViNjJzaDliR1V2OHVtTzUKUFJsRnYybmlHUFl4UTlGQjhpSGJiTEJrZ0NZYkk0elZqWlZibGpzcjl5aStzdkF5NDFnR2p0SmlIVi9ab1VjdWtudjJUZVRMcjN5OQpqYTl5eXljTzlvUXJwNHc4d3NUNzRqNHhwYlNrTlJWUnRyWjBsSEtiN21XMHc1S1daY2xMV2VxeUxkZkxjYmxkN3BaNzZjaVlVMTd5Cm1rdmU4blUrNXB0OGwrOG5lYUFnczNSWjg3cXVkZDNXNi9XNDNxeTM2NzNNaFNEZHNKUmMxbExMVm83bHB0eVdlNWtub2NhNjFGelgKV3VwV3IrdXgzdGE3ZWkvekpVNWIycFpOMnRucXRtM0g3V2E3Mis1bDBvVHJkTDFjNSt2MXVsNXYxOWZYUnlrMzE3ZlhkNXhKVVY1ZwpPZVpqT2RiakpsOGRqemZIdStPOXpLNHdzYmZUelhLVGIrUUJicmFiNjV2anpjM043YzI5VExiQVVWaHU4KzE2S3c5M1cyKzMyK1B0CnplM2Q3ZjNkTE9PUzdwYTc5YTdjMWJ2dFR1NTFkM04zTzkzZDNkMWpSdHhMaDkzbmUzblRlM24yKzJzcGNzdDd1ZkwrNUVmR2NwYlIKYkovdmhuSTdsSnVoSEhmbGVpaWJsMG4rcVVNcFExbDNKUTlsR1VvYWlrekE2VDYyTXJLd3puem44ZEh2eHAvYlhiblJNdkhYY1NqWApROWwycFE2bERHVWRTcDd1Y2l2THJxU2h4S0dFb2N4ajBTNmZyTy9IcHg5L2JvWnkxTUtWdVJ2SC9lanR4OHhIYXo5RSsyR1JvWmlHCjBkZ1B3YjdqOTkxdDNYelN0K3pQcVhYcHZpUDN2YmZ2c1pOKzJuZk5kTklqMmh2WFZqYVdhcVZZV1ZteWxZVWxXWWtUMTU1dG1jcjYKMi9UM045TjcrYytSNWRyS3hsS3R5TnFlNUovVlNyYXlzQ1FyeW5xZDBRc0g5Ykc4NC9nZE9WNlY0NU01SUJpRW1kMSt5MjYrWnE4Vwo5dVBDZmd2c3B6dDJ6SkVkVVNlK2VlYTc0Z1ZudnRBdFgrQ2FqMXo0aEF1ZlNKNURac3VkZE9hTjhLMXI0VjlWK05ncTNHd1JyaGFGCm04K1RUS1E3NmVVYllYclh3djdxZFJGR21JVWhKdGxSZ3V5dzl6TGl0OUlkeCsxYTJHYmRpakRRTEl3MHlSWVVaRCsrbDRsd0s5MTAKRkc2NzFUb0o0MTJGQVM4MUNTc09zbkhmeXd5NWxUNDhsbXRoMWJVVVlkcFptSGNTRmg1a283K1h1WE1ySFhzVUJyOEpveS9DN3JPdwovU1RNUDZ6ekpOUDRUc2I0UmphR2E5a2dxbXdUYTg2eVlTVFpPSUxJRHZjeTNXNWxMSTZ5cVd5eXVaUmxsVzFta2UwbXlxWXp5N3kvCmsxbHhJeHZSdFd4SWRaS2RhVTFaOXFna2UxVVFXZVZlWnVpdERCOTJVV3lyMkdpemJHN1lpRU9jQTdoc0UyaXRGdXA1TGRhVEJhV2IKT3VRMzdQd2JKUU9WRkVSMjRIeDQ1SFpzaGczNDVmMWlpQjJ4TTRiN2dkVXJTOWhrVW1XWlVFRW0wNldwRkcyUDRPNkRIOTJCQXRjbApkcUhNMWVzN2tlMUYySXBrdHhFaGdQZkdmdGMydTFWbVdiMnczYVcyM1dHenU4WU5lWEdUR0pMSm9NV2xCZ29OZHhRYmdna091WWtPCjEyTzNveGNncDgzMzJxUjhvREIzeTQ5WUxicFdmRU5zdXlpLzU1dnpyWFVZcmltVjNLWGR5RklrREUzb1VRbFBCUitWNUc0b2lOOUoKMDhHRWJIMGRsNXBOU3FaYXdhYThvZDRNRzJGdjZNVVhlMElmZVJ3b0hhU2RzRUJKSWNuSUY1a0JSODZGRStuQXV5TGJCdUFjWitRNQpmYXAwdmpOeUh2SWU3ZUlMN0dqUGpiNlBGMm5YbjZ6R1QxNk14eWIrZXVtS1ROMnBPTVhVSGkxNXB4bVp0alRaSC82akF2bE9SOTJyCllMN0hOQVd0U2Zvc3gybW4yTjFRZ25hbEFMKzNrMUpQU2xjaTlhOTFjald6bGVXc3BMTVNMeFQ3bVhhYTdwbENoeFUzQ21udDkrM0YKSW54aWFwcjJqU2xqUjlYT0xwYnQwVkpkNzVzR0pWL0wrc1RTVmNvOGxtbi9zUmtiK3QvbkpUMVNPQ21tT1Q2eFhPcmdDMlY2WXNVbgovMXpTM1QvcDU3TTE2UHRpYUQycU1xcUwyYmRXVk1KeW80UWJLYXJwd203RXNKVSttZHJzeTl2TkluMzZuNjVtbDFCOTlZNEw5cWpyCjJGWDY4OVZhbWdsZ3RaS2JnYURiaHRLNFFLZnZYNW55VnpOTGRQUFV5WEwwQlhrN0RVYXQwY2gxdkxnY2p6dlQyUG1DTkdQSzZmcXMKT3l0YnQ4NjRoZWJTRW0yZnA3T1ZlYm9JenhmbGU4dDBaakM4dEZMZnQzNVBsdWMwMkNBL2VRMi9ieDMvOVpmZFoyL3drb2c2YWovbgorby9LSStmNmowc2hNM1RvTzBvYm0ybCtxOGtic1drLzk0UEVVWFlTUnh3MG9CdlJnYWdCVGFJQ1FRbFNGUWhLMEV3TlNIV2dHeHAvClZBK3FUUTlLcGdkQkU3b1JMZWhJUGFqU2xMUk1WSVVDRjhjOXRlSmIzRUd1cjZJSnFTNEViU2lxTmtSOTZOYjBvU1Axb1VwOUNCb1IKT0ZlWVRDbTZwNFlMdFVnVkk2aEdsYW9SbEtPRnlsSGdVcnFuaG5SRERRazZFclNrSW5kRlZWR0VKbEdVRXRsaG9Hbm1qdXJTcmFoTApVSmlnTWtGcGd0cFVsa3pGQ2FwVElxZWFxVDdkbTJKOTFES0ozQWJKRGJKYm9meTJvbjdDVDZEODFMazRaRm9kaXk2bHFXUldxVUNoCkxGUGoxR2RTMXlCanVTVlZmNDhNZUJTUktBOU5neEMwWTZwbmpITW51ZXg0NUk0alRqdVpCT1dFdDExa2ErK1JJTTRsaHFleGlVZloKeCtkY3g2WXRhaG5OVk9QUDNpdzNtQnIzdGpEZlZ5ZjdJKzVLMnBXOTJTMmZsSFZYeXJRejVaV2RrYTlTVWRxWDY1TnlQQzFUczNsNQp1VDByNXovMzU4WG4yRFR1MVBmaFFva1hTN3BZekpKM1h2SWpaWDIwTkZ2dXREUHNGcHFiMzFlMjd5blgwODZjZkxrY24xakkzS2VkCjVmcDk1ZlpwWmJwQXZEU0lUeTdUbzE5OTVNLzVKdnF4RFpuaFptN3FaelNQaFpiRmlwb3ozYnhackxqMWM3Tml0dEhKVEtYKzQ3eWgKTHhzZkQrZXNyaUs3Sk85V1dyWFpMaE9OUmxyV1Z0ek1XMXZackZ5M2NyekFvK1JuT21OUWwxaFROOTFmNWtZREg1b2VZVUtQY1ovSAp1TTdBYVk2MDRUek9hOTdEWTNaTXhSakw5RjZlY29HVGZCOExtZDdQTjU3QU1rNVl3elJ5aVk5bURjTjZmNHd4UEpFTm5LLzh4OWZ4Cis4dGZhQjEva0ExMVowVVZrZTFHaloxMHdrTE9Tc3N5aWFTM0RyN1lvM0FDOWNmTzVwR0ZUemJUSzF0Rm9IVFA3QzE4czdLNXFITTIKVVJTRmc3Wk1sRS9kU3dzLzdSMDl0ZXFyVFpBdTZhL0ZEM3kyMXhTQTRiZkZBbExmTGJ5M0VDenB3WjNveEsyUXRPbklQUW8zdW0zdQozRm5FUDBpUzhPa3U4bmlRa0F2RjhrMUU5R3Y2ZDIrRVg5eVpsM2UrRHBQSThaSHlQTnk5Y1BpdTE0V1Mvalk0ZnVuNmxZTHBDRUV3CjBNQ1k2QWFHSXhnQ2VhRTd1RTdIalQ1aDlRcmZrQmRoYWQvVFB6dzNsdXZNMXRtc3M5Zk9WbzJqVG8yVmRoYnFyTE16emM0ck80L3MKdkhIa2lMZFQ0NE1qLyt0OGI4L3JSaFkzc3JXQm1VMERIOXV6cmhObWRVSHlPZWRIZzB4eldXNTVqTXVjaUIxam1kN0hOYjZYVFR4eApnLy9ZZFd5RzYzK2JSbEJ4T0VUNWF6M1UrV3FSNVhJbzZVb1dTRVRWMzB4Lzk5VlRxaDYvUFcveEtrdkZQQjlxdUJJOWNIMjB1ZE42CmFPc3FyR1ZiZ253Wm9OMUdSeW5uV3VNaWY1UWM3ZXNZOHJvZFVFRWJpVmRwemt1NzJTYzN4S2VaUlRQTnE5U2FaWkd2dUU2VWExRysKMmRhMjVIa2pkbHFZNHBMbGo0amZZV2dyWGMzQ1Z2cERmYWIyOU5uV1dSZ3Eyc3Boem9YWFZXSEUycGFvaUZYYmo4SlIwWmFNVzk1MgpiZVY1M29abit6enRmZndveG5KVlU5clFVczFsKzhTaFBHM3R3a3kxSjkrMksrSG5qMDNUZlNWcDVYamJJSTZPVkx3TVh2ekh0OC8vCjhPTHJuMDcrQjREOURiSjR0YTVCOWttTVk0cWxyQVF3eXVKaTkrSnJqUHh1MmRvVkI3OUM0eERzaW9OZFljdFVIbGlVOWVHVlB1SmkKN2JDblhvaHVXdGFybERDOVArTEcrK3MvcEp0Lzh4OS9sajdHdjNMaG9oMzgzM3ovdWJkZEo5cCtrODJmV1d4M3ViWU41WFowUE50bQpzUmdXU25ZRFNrS3lGd1REZVMwVUVZRDBPbEkwdUtkVlNFV0NsY0xBTmNXQU8rNFNBSHBoMzljOS81cld2dHRUWUtPQ0dOMGpwUFp0Ck5aTmpMNTROQUtvdVhVZHcwaXZjUUhINU1hemtwWi9IMGJDajhUcWJVWVpXUWtWT0VEdlIwQk9uaHNKaUtBckZVUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJR0pLQ3BzSTdBMVBjWkhYcnZoOGVNcUJEbm9RTkdYMnpUUkFLQmgwWXdRTWRQbkNqMHM0QUlWaWFkTE01ak9CV3h3bGlyQ0VKSWIxVwpSeEZTWmxVTVlhV2NDdmtVMG1tV2ZvQkllaU9UYmFZWW1nMHdlRnZVUDQ1dU5keEZSMTdzZ0J0bU81eWIxL09HMWtFMUJ4WXoreTNtCk1RaG1DSDh5WU9aSmFCa0ZCSFR6dHpyY28yS2JETk4wMjNCTTE0WmVjbk40TnBpU3dwTm1Da1YzT3kvNkFCUnRVRkUxbjZvL1BEV3QKSWxPeldLbGRGR29ZbGRiZ2Erb1pSeG9XYmllS2xmZFVPTHJLb2VoUGpKdnFIYXA1ZE4yRDJvZmhRUlVSQ3YwREdzZzZVUW1wVkVKYwpEYm5kcVNJbnlvanBJaGg2UjQxU0gzR05aRHBSU1RBbk5nT1MzbENxdm10dzBraUZ4RUdsbzBaeVE0M2tEZ0xwWkFwSkdoU1NZc3JJCmtjcklMWlVSQlp4MlBXUVo5QkRvSUUwTG1Xamo2R3JJdVNLU1RSR2hLdEwwa0NOMUVXb2l5b2NNY0dmNDV3R2tTRS9oK2Q5MzdlODkKMWF6bWs4R281WVA1SXUrNlY5TC9Hbjgza1BVSXFsZUR2RUdzUTdQUXA0YXc3Ny9UN3ZkaTdOZmgyTG5oN3RYNEwxeHgyaUh2SFg5Zgo3Ri8xR3VpLzZzenQvMTd2ZkF5M0J0VTIvRDJCUDNBVUQxanRqdFJPNXNKWURhdTltaTlhUFIwZFZFOC95RFRncy91UzYwc3RFUkJ6CnVzdzRZd2lja2RYLy9qMW05QkdjK2dzZTh5Nll0M0owTVlUbWxoZ2RGT2NPMFhPZjZ1SmVqbE5IN1BtbjhmZnAzeU10ZThSQUR3MVoKSHNWdVBJN3NTTHUvMHpSOFdFNWNOcU1qNTdMUHVuL2ZQTmpUbWE5SCs2NjdsSHV2OWg3dWc5QTlNRHRrNnZFQ01yVVlLTFhEVVIySQphaEJVNWZUYzRXV1BuOGdicnJuUjYxWmZhTXpJNUNmSnRuemQ5UGN1MGV2bUVpMWtWdVlXblNnRmROL29MUjlPdHozZCtIenJhNXRmCjIvNThBeVJtbEp1Z2JJT1Q3WVBqVGpqdWhTTjJkSThlM2VOSEc0SjBVc0hIUEtTbkdOTEhVS1R2d1pGT0EzVHRvOEJyUWJueU9WcDgKS044UEdPK1diN09GVHcwbmZZNlVMczJvdmtkTEQzaHBLd05jZWpwRFROL3VFTk9QejhwcS9vTjFQemVuQVMwOVlxWG5ObEh2emE2awpiNmJ0SDl1YzFWbTdjYS9qM0oxcytxN2NDdnNrVGdZSlZGNnVybHlmMEhmV1hUZURyMThudDVUSlpuaXhXYjVTV2FDSW9xeVhIRnczCkN2VUw2N1MvNDlUbjVGY014Q1VuM1dsSXhHbTU3QW1NcDhiOXM2Q0ppOEVUZXp6L1dTREZkQjVOY1FMM3Z4eFVjUjVZWVhFQTA4WG8KaW5MaXNWMVAvTG1QQjFtazZkRTRpL0NlbGZQWXVwR1ZNMTFjUE1mQm1kVFh6N2lHaHBXMHM5NWRiU0prcGt6RkdlSTdyQjdDS0NwMAo2amtJczhxMGpZZ1dYVmVvMTNtTElaZWRHVU5xZHhQZjUycVBWcCs2cmx1Z2RyK0pJRnpOa0NJZm02VkdMVnpkWnJSZWlmeFUrOU44CmRBdThmMW1Tc0Q3WXBsSVIxbS9YaGxCRTdzY2I0aSs4YWwyRVp3NHZrVmU1TkhSRDVTYzNwRGF3T3FmRWZzeHBxelQ2eVQ1YlUwKzcKVUhBOWpHdmF1OWJNZHBYelBCcFJQcjJsRHpLbmZQZnExY05iV0ZUMER4ckJ6R28xU0g0dWtJMVMxUmhHV1Jwa3o3Rit4eFlFZStlaQp1NEtBSWRHNmVKMmJERjJhcE53akdUMFVkUlNGZTlncDFiMXBpRnFzRGFYWkEwb1YwYW40enNkMXpreXRrNEx3TkVqQ3FuSnVnMFI4CnRLM3N6alZQMFQySlhqSUFLTnVoOW9rTm5YcmlSTUJUSWZ4SkZWRlhSbysrUHhwdmNnK0ZDbnZSY05lbURHZHJOZWVKMmlxaFhMUkQKVkZOWnRkZ3U1Y0ZEdVczR3piUHNJS0tHSVowYVdEMjFrbHZwUDZXVjJzcDFLOGRlcHZWbUtOM2J2bmU1akRET3NDdHBLT3k3cVN5dAo1RjA1LzZrblpidFFycWR5ZlZadUhpbTM3eW5OYlRSZDlsbFR1Zi9Rd29rODFmZzV5bmtNYm8vQ0xTME85OWhYYWRqSGsxUXV5bU9QCkpzWlNuRXdkM2NXa2NKbmREL3BsZHcxdkZnZHpPMWhxRmw4ZnNNOU10aVp1NkIyY1c3QnV0bkRkU25QYnRVM25POXBpTUlFVHpZN1oKNWlZc01VZk94RnZNUUhjTFI4Nmo3aEsrcGt2WXhvOVl5VUJ0SU5FKzVyYVhTbU12YkM4UU9HaDNtYzN1a21sMVVSZncxaHpBdDJiOQpCUU9NRk9LNjFRWGkzdGJzTHZUOVR0L2ovdTBPNEcyd3Vkd3dLaGdHenp2REVUYmY3M1RpL0YwcEczZUVqVHVCVmVMdFVKb09vZW5nCkdZN1ZkT0lFWG5kUW1lME1LTE56Q0EvSW1JYUpVVzFrRDRKeHNld1U2M0tPY1RuSDA5MU1GMUF0RjlFc285eDZqbXJwWmJvZ0dWOUUKeUQwQklMZGNSdEk5aHFKN2I2R21Ic2FZWFkvVzlTaGRqOC90c2JuK0RGM3FONUYrRU5vcG91K2piM3NjczB2V1hZcnVnYlpOUUI0RQo0bHNGUmUwRGE3dVlleDVPMjFYREU3VncxQWVuQytyZ1pSUEZtU3A0b2dlYUpqaGRVQVgzeXVCZUhkd3JoTlZNb2FWdGRubHFhbUZYCkRWMDVqQzN0eGp5b2lQZURvbmpYRklNV0ZUejVqYS83ejlaS2JhWHZYWDBienEwc3ZVeW1WM2J0TWc0NlpoaDF6VUhqN0dYVXhEaWUKMDZERDNPeks4YXhjbjVSTFAzVWlPOTJYaXpzM1RUMlBseVlHVGYzUGs3SjhjT0VPTm0zcGM1UVBqOVorZjd3MlF5U25reGpKODVqdApmYVRrUG01N2pOdzI1OXpVREhhanNlN09wbWszMU8zTWRPcXJhOTQ2OTlkZCsvZ1dHeC90MEhnU3kzRFRQRlhiU1VSRDZyWTZzOWJkCmxkdUpLLzdJNmIrWkE2dFFPSFhYcFJydXV2Tnk3Nzdza1E2RnNtMmVMTnhCdlpoeEYvSndSMzYxRDN6WUtKU1VadURMSnA2M0dJZ0oKMWo3YSsrNXRrN3VsM2UvR09NVVlFcUZCRVNvT2VXaUVCa2VvV2tFM3hOU2lKTzVOLzFEdXFVenVTR3ZodFZrTVBYQmlESjFZVFpNdwpKU1dsaWJxUGg2U0dDN0Z4ajBYSGVaekZQaUoybTB6OTJnWUI5TEdnMkY2V1N3R3lIaVo3L25NZXgvWlkrTlFGSVB4MFJycjdtUEkrCmhCWEJLSFVIaXJqOHZRRXU4bHhGdVNQbVJnVGF6UUFUR2JhSDBLMFF6ZVp3Z3ZQNGlLcy94RHJ3VDY5ZlAzdjE4UFhoOTBZNmhKOU8KbDRnZDYzSWg0MDl1dXNhUTlTYzhIcmV1NGUvM0hyMCtHUXoxRklLNkQrTGZnMC9WQjZ6KzMrc2Q1bFRVaXFrQlRyZTllNnViT0pZegpKY2tmM0lQdSsrT2Z2c0J4MGpjd284VlRzeEc4QjBrNzlmZDUrZ01mN1lGN2pvQ3h0M2Y5UFZtSGg5M2pqcHJkWThrVExnTi8wOVM3CnZ5Y08ra0VTbEh5bTlDVFg5MU5QVC9LRFpsVDU4WUgxZ1FjYmQxcEtucEdJTmhhMU9rTVhMelREWHFuaDZjSWZGeG5pWjJoS3VLT20KM3lXbE5iMmpmUm9IbmVlTFBGVEkwblRlY2RGbzREQ3M1eHZDR3hLeEJ4dlhMVGhNSWhaZ282WHpUaGFvbWwwcWw2UkNtRFFWMnZYVQpFRXlSN0svUVZuZzdKRDl6QkpNRDZudnFzMkl3ZW9Mb0hhMHlOYmpLSHFwaVFKVWRjRDZieldRUG5COHRKM2ZiL2RUTUp3cGNpYWF2CkxHWkljU2o5YWtxUHEwRmR0L0FmVTU4bXM3VW8xdjdXZ0M1ajZRRWh1NUQxbml0eFg2YW0xZldTTHBibGtaTDNaVG9ockU4cTVmRXkKUGZwVi9iZ3lmVURsQzhyZmVabWVWdTNwNWNjR0wxUm9Vb0pMWVd2aklpcDdSVW9DWlpkck1SSmRWTGpwcXpHM0MxazFYVStheTZqSgpWOWpleCt5S2lRYmIxZUJ6RnNQVFFITWRNTmRDZDZhR2xmUEluWDNjVG1NNUFNbWRSZTRvVUc1dHhscmhQNVBOeEJ0enFONVpFTWRzCmNUekIxQk9IenVVV3orUEZiUS82Y3owWlovRis3WFlPdDM1MHcwaVBFdW1HbEhCYXBqRi8wTTRxazNiYzdyemtzMEplT0EyMm45TnkKd2NmeFNPazJwVHFOSDU1VXppdzgreko5WDRVUExVOXQ4TWsvMDlPci9xZHA4REVPQXAzaXp1RHBtVnJFdGZxR1dxNngxWlFHVDlJSwovbUVxMmdTaGhCN1QyREswUWplN2I3anF2TXZPcXE0ZWg5eU9icDZMSE1SNWlFTnRMMFQvWGVRaXprY0tzZ29xTTduZWNSSTFpSi95CmtzNVBvcGxjT2xmSlpvOHMwOEJZL0tmUDBUMWYyU0ZEVGdFd3ptR21NeWJ6R0xPSmo1UVRqak05a1FGOUh6dHFaWHJmbHg5UjNzdmoKUHFyODJPQmZvTUVQaVU1NThzLzdHdHpqaHRPWldhVHM3RGhtdzVtYVZXU1hPWEVNczZIZFJzMGdMaFc1ZTNzMTB4TUJJU29ZVFJaNwpVTGxPWUhlNmI5TFJRbHZ4Nk1xK3AzU1VMSUtra0dsQXhpZGFRckVRRTUzWGluUUFLNEhkVzEya3dBb2t1cTJ6Z1IzQVp0UWpCdGVwCnNxclVmTlpaZWRGa2JPakdRcGJnVzUzTmJhM0ZGN21QcGZNcmQwdDFNQnVWcDRrYVZOZVRSa1ZvMUc3MkNzbXAwRHI4S0lMNDlrSTUKejZhaW51RDV2U1ZPTi9ISlpYbEttWjVXN1daOWFwbWVYdlUvVFlOdTFybzlTejU3bERsYjdySXNPbVJqdmJYRVhTc1RkczFNMVhXawpqV3FsZlNwWWFxNmp6REs2dG1DVWdra0s5aWc0cytESVVpZVdnc3h2bVg1TG9lWFo4MjdSVTlYU0Q5ZmkwVlJUQTVFL0pmWHdhZkxoCmxuNjRZOGNuOHpLNWg4bTlTOGtnNUtFNWxXNEhJUG4xa0YycnU1SG9RcHJNZytUdW83M3J5QjFIM1duVVhVYWp3eWgxYjlFME9vdDIKanFKVE45R3BrK2dSLzlCMDRpQjZ6RDIwY3c2OXp6TTBQZVlZdXVRVWVvSWZpTEU1VHkwM1R5blQwNm85WW9tNlVLYW5WLzFQMCtDUApIT1JIRHZJakIvbmJYWjkvK3czK3lFRis1Q0EvY3BDLzNmWDV0OTlnOTNWZlBMbnU2VVM0eWt0Y2F0am91bDYyd29RcVdlWVlLS1ZrCmRYMkhHZEZURi83Z24rc0ZyL2xuYmRVYzZNZ3NFOUloaDZ0WmVOam9Sai81eHV2TFBlV0xOVndoYnYrUWxxczE5UHhPNzZteHY3NUkKcXptdU9GTTR4YTFjdVA2MFJydStsQXMrLzVIOGlXNy9lTm50SCtIMlQrNzJiOW5FN2s2Z3liY25FT1ZIQzNlczY5dXpjdk5oUlpzNQpoU0hqNTMwK2x6UHZrRVloZDZESmJIRHgyNFlUUHo5NnFaN0gyYmd4Y1R4R3JneWdzdkhreGZIVXhaUHlOOWRNVDJKejB6TDdkVHVYCnpRVWRpdjM0N01aV0sxeENRaGdXd3ZPNnRPTnk3SlNhZGk2UHAvRG9TV2Zxa0c3R2s4MThhb1dSa2FXMUtxY3BLZU1ZYk9FOTg4SmMKYVhVSmlYblI1cnhzYzd6d3gyWHN6K2RyVXFOTDh4d0RXeE5aU1p1Rml4eFF5em1zaTZFNkRjK1poSWZXaXV2NzQzemM5WHJ2ei9JcQpuNzF2UHBFRlhtU0E4Y094bzNlR1o3eHc0bEhEalJxTWNYTFk1ZmZoSnNzWmJ2SVMyUE1FcmFwN1AwN2JmRS9ybDkvaU1vaDA5ejZUCnY5TEhRQ2kvRjk0blBOWGpCVDUzVEFMdk1IbEV3dnRhL3dCNDRyNzlGdkd3NXlwMWdPbnRlTVBwRno4NHlpOWRtdXRwTjljTlp4WlAKTXI2T1NaWjBTN2hyYVY1N2t0YzhISSttR2M2T0U3TmtNNlJ2Q09mcnFWelhsc0wxMnVMMGRON1NQYVh4eHBFcVhxYTZWd3pLczlGWgpkYlJnNGp0enlYZFlUeHJpaE9IQXF0T3F3Y0F3NFNQbTk4N2llNVBoQ1RNZFdXTWNwbWRJd3l4djJWMU84N3VNR1Y0aW5lOHpYZktlCjVXWE04eklFa0V5UFJaQzBzekU4Z0tSNkFNbm5ndE5lWG0xUGg5T2V6TzBQelpXd1h3QWZjelgzSXJsdW5wSDlJSVdRbU5CUnJ4UnUKdGRaMXpKazUzTzVETHZxMGRWWXZMclM2U3c3Wk1xQjVEclF4RzdQRFJVMnE0dUNmWlg1MitHb0hjalFJcTE1dzExQ3Y4d0FONlpmNgp4ZkxEQzNaNUJHL01FNXk0Z0k3bSswMjJVdlFPajV4RGVUbDcwRi9pZ2k2Nm9oL0cyTWpUYkRtWDh1V0VDL2x5TEZmTzFBTE1YS1B3CkVFY1BhOVFkYTFmbEF4THFXRURqN1k3VENLK1o3TGdkanpMMFdMWFlZOVgwdnYwZStlS2Q0bnRTOTdTN2RjNDJuY1RGUlp0QWMyTncKT2o2MEpFWmhEWGM4WkdqajZVTHBHS1FQYjVrM2M1V25pSEpQbkI2MDBXeVlwSWs3Sm4vTXdnSm4yZ2MzbVZSWkpsZVllUFRQVVdaYwpFZmFkWkduZU04cnRta2Y2WURMb0FaR1hKYXNubks3NS9jRWhsaFArTkNQODhwL3d2bTA1RGFrY1cxNzVob3QzL05aajdHelAwQWg0Cm4zWnBCanEyZllTdmorRDBFV1BlY04zSzVOSU9kSHNoWC81NytPWXA1MFFXcTQ3OUg0RC9sNkgvYTN2VnNvT2RLZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJVUhISW5abDNHUno2OHozR29FOVpkTVA5NmhDTVdMd091K3Z3dXZNUWhRN05aU2JaUElLRVRuTEtFaDMweUU2UXovWUNRSC91Sm1KKwpNckUrTjhUNEpPSjZBT2U1STRSbklXQUhJQjFnY2hKeE54dmhOSURKQU4raVR6YWVmZnhwUngvclVhdlRwNXkxNmljUy8vaGtIL1ZrCmc1aTR5dFNQVlBERHZGSEJYK2Q1Z2NSM0pjc2paUVpIYVI2cjh6OTZucThxa3R1UXkvOHpONnVDNVRKSDVnVFBhd2pNUUNiZEoxMUwKcWJHbzhTUWgxWHU4OEVkcmNvMVhtNmpRdzVOKzFtYlZIUE5wOW5Gdk1seGg4LzFzWnZlVFpyVlBaeVFleFRzTFYrR0w1VENuamFNegpyMVZmbnNuOUwveHhVWkQvVEExK2twQy9YSkx4bDUzZG5HbVRrTDJuV3BMMmV5Wm9kK2FJOU96M2xwZ0g3Rm1USU9zZWVXZWJZaklsCkhOdmVOcG4rZmR2MDczRGpCNU12N1hnVnp5L2VEbFlaejFVWkRxV1NoVHp0VDZNNk9ZaHFmd2pWaUFQZkgwQTFIRVUxcGhwOC81bDUKVHl2MzA0Y2RhZlQ5NWEvZm9OcmxOQlh2UHY0Sk5qZFkydlNjZEpYeVhNSTd0a1JXaVZuaENwTWkzOWdHem1oczNjRWh6MW5TcXBaUApmTEhzYkc0NHVlRXVjVzlJMzBpVHlkTFNxUkh2T3pWemlhWkFtaTF0VmFUQkJJNXdUN3hXTGNkWmoxanFnTnJCWFhLU2pPejByRy9tCnU3cGM4c1d5VEhXNVdOYVBMZFBIWC9xWkd0U3AwYk91ZVNvNlQ3V3Y1MjE2WXNOaS8yOEQzVk0xdzhDYlBNdHpwTHRqVE1vOC9vdmYKWTVMcmVVaDNQUUxabjRSMy82aWZIeHQ4d2dWMkNNWXNxL0ZHQkhtY2hvdHpjR2VlZm52a3FiY1E5Q0tGUEloNEVQQWczaTA4em5ibQpRYmFRN0VhNWpvaVZ4OFM2UWJCcm90MnRJUyt1TFl1OG56M3J4MFdrYVRqRTIxUGo5NHo2NHltejQ0bmIyOW1VYnhraDkrZlZ2LzlVCitpY2RXdjE5eDh2LzhHUDUyUnRVVTh5Tm5RT2RhWklad1YzVjBoNW8wb09XOGVEOWg1cE03UUNQZFc5MDJsbTRqME9DSkxkd2U1S2sKMGNnZDZqeVpwZnZlOHVuZG1yMzd4bXpleHhiNzZSdEpUNWpaZjRhTW45TkozczNscktSSFNyeGNwa2UrQ0I5YnBvKy85RE0xcUZpSAo3aE1ZdlFMdUZ3aG5DQWpIUDR3SGovZmNlQ0kzeGwxYXZKNGsvU2taOGZZNThaajV5ME5YVWl0ajlNc2UrWFVTU0hQeHNNeTc2YkdvCm5EUHN5dFBLemZUOUlKY1BLMy85QmtjRDMxOWRLdjRoR255dmJqRTk4c1hsUXdmT3M2ZVBXZFNwRlUwWGp5Qll6N0pMN2pOTWhyT0YKNU12b09Oa2EybXp0ck9hTlczYkhHZGtCRnhkUzNJUVRiczhrLzJEM2lSYjVld1B6cWswK3lXNStMNDk5SkNkZmhYZkhxdnZLWDEwcQovcFFHTDZzSXl5TTZoV2tjMDVrS2NxYXNuR1JVSG1GaFhmdHBHdEhVMGtENzNxVlpwSFYzVVhsSGM4M2VHQmo2U0Myc1dDTEFoYUplCnBLQUZoTUx0UktudnhwTCtGUU5DTThXZlpmYURpVStCenpEd3didzNFOTE4STFxanluOXExVlBoN3pnMXVZOFNuOGw1a084ZzFVR00KZy9CMlRWMERjbGo2aTBmUy90amcyYzllUDdOQTQ2bDk4TE4zNG9uQ3QxY0VIUlNVMmxFK2UwMXptd1pWczU2b21tV25wRm94VmVVVApPK2JzNXkvUzRQdFZnOGVPSzdReVhUd1M2dlJNcDFHZGFWck9XUzlTSzVvTXVUa2VYbkF6NERidkcyQXJ0R1I2eVE0Rlc0ZVVlcFlEClVKUHF1UmR4OUNPK3o1TjRudEN3cHpQa1FRSmI4eHJ0ODNqZE1OTk9wR1VKU2ZsNURxR2VZdm5YbG9vL3BjRkhkSWRIaW1rYzA1a0sKY3E2czdKV1pRYys1ZEpEQTFNOE5zSEswckNMOWVJQzdJYi9JM0hLTXZDZkx5R1BlMDlGMzZtZU5iK1l4N1FmN1JUdGNYQS8wdTU1MgpwdXhvaHV4S3Y5OE43ZGVCbnI4c0R3eDd0VUpLL3VwUzhRL1I0SHQxaSttUkx4NVhZTzR1NlR4ZEk1cUdMUHk5akFwVlY3TThKMERYCnhWWnpJNVNlcG44eUphNGYxMzQwUmU4OFkvOTRZbnNIK2EzbVNqRG53ZVJZdjdQemNmVWs5blYzTnU3TjNlMEo2cXdJUndJK1ROZ1cKVHU1dHVERjM4VUhEejlsY1BhVmU0YURmUTFtdVFpNkRVKzdUbXFGcks4OXhJNDU2RG5IbGNUekNNMFBXM0k1TDJtSWdtaG40NnRHWApGOUpoS1ZmQ2x2dkRmSEpMZXZyUkI3MVNMWWU0WEpYZGMzeDBDNS9rVE11WG5HbDVoMHk5aUhzNTNhK2VuQXgyV1U0Uk1LY1ltRENjCnc0cjhUME9XV3o4bzBrOGc4bi83QVlmNzR5RzdpSlZPUDA4NzBXQTgyZkZVU0lEQUpjSldPN2ZYTVp3ZkR1RTBkZkVrSCtwMDNCOTUKM0pPcFAyWWZKQ0oxUEwvaGZqaG83ZndBaDIwNEpHMS9oTVBTam5DSTA2T25PSFFOL0hvd1QwSFlEUHU4clpFbmlNMnhsdUtuWnEyegpMS0RJdUFJZUdCOGV6ZFQ2NFJmck9WdXlKT2gybGpteHhHSlhWbzlaMkJUSGVobVcraEhYZnRwYXV3Z0R6ei9pd0gvRWdmK0lBLytzCk9QQjF1N1RTaEhvV1hSU2VFRjMwZUc1NjArZytzMG1tN1RSUG5HMVBTT0h0azdjZkYzUnI1Nno2a1VIOTBLRGFEZzFhaDhPTCtvR2gKT0JucGhQZC9NQ2ZkemNLUHVsclBTemc3UzJFMzRSNzcvcFBtVnJrb01wWDh2c2kxUjZPKzNuUHl3UTUzZkRta3JNc3U2NldwT3pUdgpGb3E4QzFoN05FNnROMWhQWXRST1R3NDRlOXJMNFdtUFQ5N0htZVZ1Q2ovT2ZaL0tmOSt6S3A3RzBwK1VKLy8weE5ZZ214SzFDNW16CkVOWkJtZGR0c3lsdWJMYk45ZE16UlUvV3lTZTM5YmtqM2Y3bER5L2VQZnpYdy9IbHMrZi9JY3RpOS9FdmNRckl1ZG5zSTg4Qm1jNFMKem5xNmFrODNPNmFhdlczSENlNXpWWHVPMlJ1Z3J1NHN2V3djOE9oN3JQemo2ZkhINVBqSGpvLy9GUGovelpEeG52ai82ZU1EQUt5MApGSkNlcVBIVTdISmlOZmtoejFjNXM2eCs5QWtyazZxcGo4d1V6OTJaN1NoS25TdzlQN0dMd0QxSHNZaStHME1BWFBpOXN3TlBuNURuCi9DUS9zVmtOMzJjeGZGcTh4ZmxoQ3g4YmNiRlBMZEFQV3poTklYRjdJVW5CazZiQ1I1eGNNMyt1czJ1bUN4TmhGNnBELzk4NEVjWXoKU1gwYURNbXEzemNWdmk5aDlUNWR0Wm1ScC9wcEFTNm5rK0oyK3ZnUWwyR0tEQk5sZXVSWWpuMDZpczhuUFpzTS9aZHI4SkpuNnRMQgoyR1hQM2FZTHpPMkNmbkV4OC9BKzc3QUZGRTJmR0ZGVU5LYW9oeFJOSHg5VFpKNkZveG9mYUhaSXQ4c2thMk9mZHVUdVF1S1JIK3JvCm9vOHgxVjA4dkdqNkVHTmR3L0k1a3M4VHQ5MzIxRzJUbVNXWXZhMGxiN3Q5VXZxMmZmSTJpMGFhUGkwY1NhTjZEYlhLZUtUcDR3T1MKaUZnRm5tRTFwQ3BBcXJLYzdrL1N3NVFMR1dSK25Bby9Ub1VmcDhLUFUrR3h0RkVma0ZUcExEL1VoMS83UTVtY2hQRFZQN3g1L2VYYgpGNi9mdlhqOSt5KytHSFR0OFl2cEg3N0JOMG0vK2ZMWnUzY1BiMStMRW43OThzL2ZmdnRNMUcvNzQ3QnRWOXVhRm5oT2wzVk5oN2dzClY3S055eDlodlpLNXRQSkpyL252di81SmZuM0hQOTNuK0s5LzVzZi9JWC8rYnlIK1NWNys4S3ZEdi8yditmQzFYdkpyK2VYMzhDWVAKcjRSNGRxUERMMGVxUDg4dmgrc3YwWFpYdjViL2YzYjk5dDN0aStmdlhyeDUvZXp0bnc4L3A4bmlaOGMzYjE3SzIvL0NldUtydTY5Zgp2SHZ6OXF2anMrZi9JYjMxMVc5ZnZIejQ2dGNQejkvOTlQQmY1WUwvVS82M1YvMHYzN0dCVzc3TlAzSTZSQndWcURiSUVETW54aUlUCm9sclNQenRBdGZwWmdjdFc1N1FkL3ZVWkc5cDFYQXJoYWs2cmpIdTlTaUxaYThmSXEwVVJ1QTU1dTFwRnBEcklpcitTcHZJaEZ4elcKS3U5Y3BYcU42WkR6VlpDMWRYaU95MnEra3NWYkR6bGVyUWdCRmNuL2FwRlZkVmkyS3hINmNYYnNlaFZrQVI2V2RDVnJMZHBsMjlVcwpYT0dRNU12Q3hvdmVMZGFySEdIUXIvTlYzamFab3VVcXdmakt5OHB5SlNxSTFGb1JtQ3QzVytVdTg3SWVVdFJuQWlIbHVoMlN2SVpJCnQzcVpFRU9vNVNERFhJT00vVnF1SUcvQ1A3NGhTbFMwSUJuT1hFQ0lxZHFycmZNVmxKTERzbDdoN0o5RGxLNEpzaFlQUzdoS290OGMKV28yVXJ4YS9LRnlKb0xxMng0NXJScTQwVFptRzVHVHJlcldFYlRtRUxFTXFnNkJYclZkYlNPc0JOd2gxNHdOSmk5SldYWEFlYms1WAp4Z1NFeWZoRjhqYnNzaS9DbGJBb2RIV3FWM091NGJCSUh3cjdFNEk4QmVaRElEdkplcDMwT1NDZWgxRHNOUlpoS1J1ZVdVWWNuU3VmCkY0VERZcnczRzdDRW1TLzlLYS9LMFVRclhCWnl6N3pLZTZaRngydkpWL0trTmw0cFhNbmZNb2RXNmRjZzd5V1hWMUVuRHVzaTQ1YmwKbGt1VW0waTdxOXhNaGxZdmt5a1hwT01PWlVXMGRtVW5DbmRlY0puc1NFS1FSWmx5a0haV21XV2h0RWtscTJSRlc0ajZQYVJaWG1pVApjYStMakxNTWsweDh6bUNaa3NMdmRjVGtzYTdXV2ZwY1ppQ2NUREtWY0RONXN5cFhaNWxUU1dZYnAzU0pPdXQ0bVF5d0tEYVJrZGRGCk9pQ2g5K1JlOHV4elR2Rnd0c3B3MWI5elFkOXl5Q3RUMmFFKzE4bXJrU2dUQy9rSU9WczJCRjNMdE1JYlJIYkEzRDdyNUpISGtxMjYKMTVHVkkwcmQwSWdSL0ZZK3U1VW9jM2RiVWN1YWtibkdGMnYzY2tLYnFYaWdYc3ZmbzdWejhtTCszaW1nSTJSWVNwSTFML1BxMVk2NAo2THhLTWl0bFA5NUFrTzFWT0lTdzJpeWoyQWc2YURMTGdxeU1YbXZSdS9aMm5HQjMwOHVjR0s5RVk1VkJhKzJFcTBWR2Y3aWJFZlF5CmY2Wld5NSs2dFhQeWJ2N1MvK1dmNUo5L2V2SUc4WXR2di9yVk05bFRiOTU4OCtldjN2dzdONHkvZi92bXUyOTBoN2g4eGE4ZnZubDQKOXU3aDY2L2tGcnVkWkR2ODVLZUhmLzJYQzN1S1RJeTh6c1FVQ1YvWjZQR2NTNUdld1c0aXJLakVQTzRtUmMvbDF0MWtxVmRseTdJeApZc0VzT25NN0Via0o0Q3FWQ1NKNnYweGxtU2hWZUt6MHN0WkFRbHdSOXRoRlFkaEtCRkVtaTE0bXF4RlJCNGVTdGZGRzJLd0dMM05pCm1EZTdMbUtYbHAwNWhOVW93dnZXdUEwVVhybllEdDdyeWNUVmVuUFZCMnVVcmVvbXp3dWRLRXlHODd5OWNRWEQydzVuM2JKZjcyRkIKZndnVHFWRzZWYmpLcXgxUjVBOXdyQ0RzY0JHaDF6bFd3RllqbzJJZjlRMlF2M2p0VmRDRlNYYWwxa1lqMkoxYVI1TVlaREFyN3VUTgp6THBNMjYzbXZtejc0N1JLL3NDdG1aUFgyazM4M1pSTGFhNExrR3F6N0E5MERzMjVoTlV5SGMvTTZWblZ6eTUvYkl2czJEcmhvdXlkCjdORzh3QUdibFZWaTVRSjBsNE9JRmNKdjR5emY1aXdNR1ZNSzIvVXNlNDNzQjNqV09SaXZuSVU3cjdLU3VWV0FXd1ZoMzlqc3RrVzIKMWlxYm42emtUVGFmd3lhN2dFZ1NlaGwyQUhtNVRaaURNUDREOXpYWmZUWVJla1M3a00vQ0I0S0lNYktIYkZ1MDdVaUlKVmZkUjRUcgpIQ0prRzlHWTBKc2l6SUVnMWF1SUc4STE1clRZWlVKYzVJME9zdWZCOXNtYnJWVkVCOWxFNndLSjZMUS9UbllXTEE3c3JYTGZQTXY5ClgrMkllRi9zeFBLZWVVbWNScGcxVVhoY1FKZmI1K2ZleDZYR1hrZjJlT1FvNlkwNHdXNmxWemxSUmxpMHYwTnJwcUJybDdYZnl3bDYKbVQxUXIrV1AzTm81ZWJIZFhBdUg2MjgrbWJVRlNJK3laVUx3a0wxZkYya2paaGtsR1Z4NThxdFFaYTdJc0ZYTVlQQVNVVlJySXlpUApFc2xZNXNCUVMzcHhGY21vdCtNRXU1dGU1c1J5QlFYODBOc1JrVG5MOFBlN0dVRXY4MmRxdGZ5cFd6c243OVo2VDNVcjl0NG5yOVVnClV5VkQzc1dVRWE3SURvU09nRTEzbGJFUmVUTUlLeGZobFk4V1NzUktGVFlqUTRTbHUyRmg2SHlRU1FaR0s0dzNZNWFMNUhzVnNaNWsKK3ErekxJeFE0VUplWXlPd0l5RHJ6MnV2Skt1R2ZEc2w1L2RHRUkxbDRPNUdGT0ZsWFdYMUJ3aVc1T2FMWFNiU1VDM1lGSVR0T25zUAowQnVLek5sQVhzUFdSWW9xM0hXeUNyU2RFbVg2TG41bG80cEVEQ01JZDUwTjR3S1dDbmZJQWExdklsWjJDcStVSFhhck12eTluanhqCnljdkNMWS9xeTBBUmpXRUwyYTUwS2htSWFGL29yTVRueDVyTkFUckJDaTgrbmovb0lQRktXWEdKYzFqMnlCWHlqUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJak8xVldyRGJ5R3ljWlorUVVmVjlOSlRlUTNHV01STEd5dWxIaFV3K3lBVTFzRjdCcXA2dEorYXRiNXdjZll4am1JRytBcGg0aGxKUQpPQUJsa1hVZFpIdEcyQnk0Y0oyRExSLzVzS3p5Z0tLOUpqQi8yYVNrdTRUamI3UGUvM1NHbm16VDBCMDRTUU51VTB5NjZWU0loL0xXCkt6aFlVVjVBMWgyRVhTTUhTNmY0QkZuQTRZZDZVVjUvRFVOVGpXQjMxQXNiVlRvaUNUOFltaElwZEpWbE05elNLSHBsZTdSV3J6MTkKYSt2MExiMFhSRFBWM3NHTW5uTlVLUjFqV3pPWWlGTkZEeGJCZXdaRnhuL0xPMHBSTFV2SG8xR3hzbW8rREczSmVnZ1lrWDVQbytpVgo2U29LS3gvcnlTNEwrTlhRVnFQczd0bW83ZGxhVyszNVQ5K3o5WUNzRXZhTktMTFVURi90aUVEVVo2eXdwTDI4VkZYQ2crZ0dDYlBRCkNjNk1rSFdtMTFxckRtdHJweEhzYnM5dHVpa3h5UlNCbU52YWlmWkM3VzVHMFBYdHo5UnErVk43TzZmdjlyaTA5aW5tSnVpSXM1QkgKK3hMWUd4UXROeTlCSGNpQVdMcDVLU3dpZ1ltV3RUTXZRU2lWdlc5cjVpVlZHSVFMdUhrSkl1bzhMOHZPdklTMk5naHNibDRDcitUZAozTHdVYUw0UVBqR2FsOGd0d2ZQY3ZDUnZmZ1h6ZFRNdmdSRGozcm9VNHFKU25GbVh3RjFsZXcvTnVrVFdKMHJIenJwRXZpbkNZN011ClljT1FUbHVhZGFuVjZOWWxzTXhscWYycFF4UlJhS3RyTXkrRktITi8yeG1YUUNwVk9MUWJsNW9rNE9ZbHJMQ2E2cll6TDRIeDVpUjgKdXBtWFpCRnRFVlkwc3k1aFVjbnVzVE11eWRMTE0zck9iRXV5L0dYZVJqY3R5Y2UwMENqWVRVdmdCd2tIcEpobFNacElhZDNjc0NSOApXd2FxN094S0ltWXpNNTZibFRaS3lLVlpsV1Jud0p3ZGJVcmtmVnNKemFhRXJvTVE2U1lsdWZjVlhBQTdrMUtRdTNKSnVVa3B5SFROCkFDSzc5aVhjbHJOMk5Da0ZLSytsVzVTd2ZjNTFYWnBGS2RTb3MzaTBLR0dub2xqckZpVzVyMnpLOHNodVVqcGJXQ2Q3RitOdHdySXoKS1RXaVc0TXdIV29XR2RqTVJTRXk5V0FlVFVyWXJTS0VPNjhUWUxTRXVjMGJjY0pvNU9sRU13VzFadHhZMU80MW1wVGFBL1ZhL2g3ZQp6dW1MamJ4YTVLRmxaMUxxUkRNRmdTK21MVGRia2NpY0NKdmFkaFlsY0ZTRSt3eTFacjFwYjhZSmc0Mm5FODBTMU5zeFcxRy8yMkJSCmFvL1VLdmt6dDJaTzN1eHYzYUQwOGRxOUxQQll5WVhNT1BkcXBNcFNwb0d1dVJGazR3YW9WQWhCcHd2WVVNNW1PWVpLc1VScTVtbWIKNFQyUWpoWkpFWmZsWk9aSmJzVlNRN1lOZHhDWS9SL0duU3lNcEpueFJjWGdXaFIySWs4ZFF5T29CUjRDZXVtVllGa3ZJc0xYYW40RgpKMnlidHQvczd5QmlOY3dySGxJMk0rRTRHMVVFQ2lNd3hzWjFJT2pMVmRFMnVJUzlXdXU3WUNicTg5NDhNUTZVV2UyYjJBUkVDRkk3ClZLY0tVeFFaZmxFckxqMEhNWnB6QUh4eHphRlR0T2ZnaEVqcldDK3FwMkJveXlsK1R6ZGJHN1dZUzY2MUJkMkpvOWZ1NlJTOTBwK3QKMWV0djVXMmR2ZWNQSXVvMEl6L2szSFhkbHIwdkRTb0tPWGR6cHFHZWFQT2xlOU1nbSthOHVsL00zR215VTRzSWlDdmRueWJhdmV6RAo5TERaU3NDMkl2SjkzbnZVS09NbDNxRzQwTG5xM0cwK05XZ09JaGI1bWpHbkdsVGN0V0FTdVZjTjNJM1AxdHhxMkpPNmhjdjlhdGk2CkFxWjA4NnlKdkNDRG4zSjNyY0VLSUpQZGg5QThaOURHUkJ3czNia202MEJ1empYb2RXQkJXVXk0Ynl1enZZTjcyS2d5eWExR0YxdFMKMTg3T3gwYkpNeSt4T2RuZzJscmt6czNMRmloNkxIc3ZHNVZycUNITnl3YlJVM2FqT0xqWkZuU0lTUUhkenliN21MNlJPOW9DOWxFWgpyZVpxbzdraEIzZlFtYThOTDY0K0ZYZTJRVDNmSXVhM3U5dlFnZlBpN00vOWJWUnZOcnlqTzl6aW5DQmVidDNqSmt4VUpCL2JrSnJMCkxkSkZVa1AzdWZGS3ZHOXp1c0d5Mm1hUE85M1FYQzF4N1Y0MzJDbXBwRFMvbTJ4dElxaVpnYWM1M21LRVJpZzdaUE84UlhER1FLZWEKODdVdzY5emMrZDVnRXFLWTZjNDNLSmVMOVBmaGZHRSs0bjdEOTF4V3IvYlVLaHR6M0xvRERvWU12a3h6aXpYS3pnazMxRE1IMjlCVwpvOWc5ZDQ0NE1JS2E2ZnkxdHFESTBzRGI3dGtvTzEvY1VLODlmMnZyOUQzUDNIRlJ1aXBMcCszOWNUREFjTzQxNTFjTXN0R1cwRjFrClR0ZzU1SG90MjMrR2hockZicmh6eVdHRU00VGszaFRVa2hDSEd4cGg1NVBydGRxVHQ0Wk8zL0QvdDBKVVNFSE5sU0hCS0dqVEdic2gKOVRwOExkb2hkdFlaUmpxbzM5S24wR1JwYnlaRnVCOHBybWlxZzIxRnZBNGxFV0hvQzJ3dXdpbDBMc3F0MU9EbkZOV1lrbnIwZWoyNAozQ2pHZzZQa0RRelJlRmJJWUwxK3BXZzFkcVZzU0x5blhEa25tRzFnSk1WK2RQYWFKeHBRZ2o0RkcxbWUrM1k4VUlOdU5tZ0hGbWxZClliZEE1ZzRmQTh5VVRsSE5SQlpQbXRlaG5uQ2VDald2TjlVcGMyYzBuU3F2b050M2Eyc1JkaERETXR6VEtjOXRKUGxvdlpvL2ZXdnEKN0MwZmwyMCtoNThYL2h2T2daMmpGM1pjSFYvMzlNS01QOE9EMDF5OVFRUWgyQXIydmw1YWlubWx1M0hCTkhTV05Vckt3NXhxMU1YbgpsTHQ3WTNiTzZPN2VSdG01ZTNzOTkrTkdyb0EwVWxMcGs2cFRNWlI1ZFBCaUY1dXpqZEcraHg3eCtVYUl3c2pwLzJwUGhROGdydDNyCjIzWk1kOFkyd3M3ejI2dTVWN2MzMVNsMnk1MzNseHNyRmZqV0Z1UmpXdGI4bGs3WU9ZQ0hhdTNwVzFPbmIva0QrSURCcjRRdjFMMlcKMktpdUpUWnJvR3VKbUJZMHFveGFJcmlIaVBxeGFZbFFxRUlWSnVoYUlpd090QmVPV21LejQ3bVcyTXh4cmdEQ0RGM1dXSFphSW5TLwplVkFsWVNKYlpESzdrdWlmUngzUmFVMUZoSmw2aFgrdjZYNzArS1Z0M2V1SXNHS1ZCYy9XNnJXZWN4M3h2QzlQN1VpcldpeDJPbUtuCnVsNUhzd3htVmRQOThNZWFjdG5yaUxUNnBDVU85VUpWbTE5dnExRkdmVzJnbWw3WDIzTGRyOTl6MUJIN3MvVjY3YTFhVzZmdmVkbWgKL0NtbThDVWJMQVdHWnpoOVgrMnB4WlNlWlhFbjRhb2FCRmJWREptbFVkd2VUZ3ZuVUE4N09seHp2YTFHc1hzNjh6RHFabGFFMXBacwpSTUxGMXVHZVRuRmp1cmtxVzczMi9LMnQwL2Y4UWJ6TEVldVU3bG5aQ0NqZVUyb1h0V0VyaEJoRkZSeGlvaVc3ME15ZmtDb0pYTHdVCkd2NEIzZGdjMXlHVGc3NG9HTlJqVUxhcElvZDBzR2hKa1dDRkxVWjlXZHJtSE9RUTRYekVacXkyR01JZXNPQ2djbUVxUURMVkxvZkcKMkd4TndLbHNVUkU0OHJLSnV2NmFpbDVadG5XaGQ1V0dYdlNyZEpiTmFhajRDVzhsKzc3cTNmQjBWVkxnaUlZT3Z4VzFHMEtJRXYzUQp0RHRSNFdUVENIUitLNEIycHZ6SHpVOEJ1Q0ttdzl3T0tTeTRnaEhBVm1HdkZxV2JMNENkcDlMbHVHSVJWY1Y5cmh0VTJES3JmcXhhCnN6UnJHbXlBd2hjelR5YUhaNHNXY05qVFJPcE1ORHFrNUpwdnB1MS80V05WSGNsRk1RSVVDbFdIUEowREo1cGRYQlUvZ2l1V3NoaTgKdVZQZGJJQlpRME92OUVrQnNKN2FxYnJpamFKekpDa2VaNmdubTJLb2VXeXJVZXllZW1XakpvTy85cmFpYnBYRFBXUGZQSWRuYS9YYQo4N2UyVHQvekI1RUNZM1pBd0Z5NkZOaW84S3BUR1Y2Q3dlTjhDV0tZU01oWGN6UVhCeVpVWFdGbmhTMWxVUnk5eW9Telh3ZDFrZjVBClVkcWFOQVpoczFEN2dDaW81Z2JYUHFDR3VHNGNYVG5vRWlCOEw1aW92VjdaSENxNDZSMDRLeFc2c0kwU1lEbWhnaE5xWDhpc1ZIbTEKVVdUWk5BbXdVMHR5R1pPK00vaWRrVnNtY3RvckRyR09Jbkl4R0FxTWZmcXdxeitzL0tHM3JMTzlwbE9jTjVRZFZlMkYyQ0ZnTHd5MAp3SGxiMjZBOWdmdndZU0crNjJ0dU5paUFYT2lnekI0RElHd2orVDA1ditlbHFqMUlybEsrcXlKK3RQVUxOcHBpcG9tUUJrMi9VdGxJCkVjMGNGclE1V25lczJhMHIyYlhCMlBWUzJxd1dDQVR3OE5MRUhseHJCRHVsUVFES3JzNkQ4V0VYUXdOU2g2UTFyczNzYUZQMGZLNmYKc0JaTVNRRFo4REkwbmIzYVUyVnJxWXVhUE5hbDZsZ3RzRGxpYzlDdWQ0b3VCK25vQXQ3WjZ4WDFwUTV0TlVvYXpIV2RtbkhVVlRnTQpiY0VxQkl4OHY2ZFI5TXIyYksxZWUvN1cxdWw3Tm9lYlRGdDZ0ekRmdVZXOTJsTTNOV01DckVLM0dPd0htWjZNRldoSTRsMk1va2lICm9OaWRvWjZzMTVoM2JUV0szZE92TkdveEMxZHJDLzVTbURyN1BaMmlWL3F6OVhydCtWdGJwKy9aZWtBR1pzdllja1g1SXl6eDFZNksKcmJuUVhEKzd2UVFqeWIyd0VnSFJDTDdpWjdyL2U3VUZ5ZWJTMEZTaitDMzF5a2FGK0VPZm9iY0ZLRVVKL1k3MldSbUZQNWRYNmkvawo3Wnk5b3I4ODdLMlZxQytndXBNNVhBZnFBdWxYb1hvaVRLcWpnWkkxektLeHB0SXB5bnRnMG9DSjNLa0VkZkd4dksyQll2ZlVLeHMxCm1tRFgyNElmQUs2SGZrK2pQTGVudFdkcjlkcnpXMXZuNzlsNklNRzlHeFhQSklxTCtjOGFGZlkxQ09IZ2hETm1uaXczaW1vQS82WjUKQzUzeTNNUVN1dmlIZW9CQndEdlltbW9VdjZXTENFWTFxMFZ2UzFnbjBKVDlsa1pRRjRFOW1GZnFMK1R0bkwzaUQ2RFBOd3d6ZGdwNgp2SGFnYm14VkszT0pPcW9iVzlDYTRTaHlXRGRNRXFtNi9kMkIzUkQwMWF2Z3lHN2dzRFBzYkEzYUhVVVV5RnNOYlFnQUZZS2tDZG5JCnNkM29LSFZvT3JnYk5WTjJINDJCdTJrR1dkYWxvN3NwNUFCMjB1RGQ0S2RwTzRGMzQ4MElXR3I0YnRqRjdFYW5uWE82RHhrUUduOVEKLzlwQnZLSERKRlZkREZMTm5Sclkwb2E4YnBUbjN1M2c5ME05dzNBUGJUbkY3K2xxa0ZHcjltSnJTdTVFSDJpL3BWTmNFdFJINi9YYQpTM2xUcDI5NVdUMy9ISGh2ZXIyaW96MDdWVkVhRFZ5Tk9TV1RaK3NZN0VaUmM0VkJ0WWQ2aHVidVRUV0MzVkV2YkZUWnhWZkNhbHRUCnhlekEvWlpsTUJmM1IydjEydE8zdGs3ZnNuRXptRzdoN0lQYUxwekNzQmVOS2dKVW5nTWlBa1hJS21ycEMrWkRuR2NQL3dpMnNjSm0KVzVaMUhlcWwyWUNhcmFWRzhUczZVMUlxVEd4QWVmVzJNS0dXYmJ5blUxU3MweWRydGRxenQ1Yk8zdkVITVUwMFdESFdFS0hVSS9TZApzaGhOaG81OXgwTEppVjR1QTc5RHgra2hrSTUrcHljUExLREIzeUhuYkNYR2puOXZGQlZ2RkFEZnF6bTJIY0syMmNDZHNvVlIzekVxCmVTbms0UWFDcDlDbzZvaWg0TUZDbTJ6ZFlQQndscXNLNGZCMjlENGx5RTVaWVdEd0t4dFZwSms1MHFkaE1IamdlK2ltYnpENFJsSHgKeDJEd3ZaN0QyMk14cEVHbnVObkJCU2VqaGl1Q2doMEZIK25tQVVUQVVmQkE1cXp0WVIwRkR6ZUUyc2tjQlEvM1FpcHI3aWg0NkJKZAorWEFVUE56c2hFODBGRHgxamhSVHg4R2o5YVo4TkJ3OFVBZTB0emdNSGlOQXZ0cHc4TmhJa0RqSEJDUUR3a01SWCtzQWhNZEd4V2M0Cm43SW5kbUJIaVdNUUE0SXBYdTJwb29MaDZPS0dPT2M3YndNVzNnaytTWWhmNzdVTTRqNDAxQ2gyUTcyd1VWMnhhMDBCT0JWSDlIMmoKNkpYK1lMMWVlL2pXMXVsTE5rbmZJZUtBZVMzQkF4MGR2dDZvRGVLTzJVOW55VURKUThoSHA4SndCY2RmYnd1Q05tRS83WjVHMFNzTgp2ajdVTTRqNzBGYWo3TzdacU8zWldsdnQrVS9mcy9XQXc4VXhkOHJpMXV0T0ZSWkdJSXdEejBXQXZab0pyM1o4ZXFNNGF5S012ZGR6CnBIdHZxMVBzbnMrbkFSRlAzWVNHbE43V2JHL1c3MmtVWGUzdDJWcTk5dnplMXRsN1BpN3hmZzVjL0E0czVzRDRoaFZyeVBpR0ZXdlEKK0IxV3JHSGpHMWFzZ2VNYlZxejV3M1pZc1FhUGIxaXhobzl2V0xFR2tOOWh4UnBDdm1IRkdrUytZY1VjSTcrRGlqV1FmSU9LTlpoOApnNG8xLzlvT0t0Wmc4QTBxMXBEeURTclc2NHhRc2VhZWE2L1E0UElOSzlidzhnTlNyQUhtRzFLc0krWWRLOVlnOHlOV3JFSG1HMWJNCklmTU5LdFl3OHlOU3JJSG1IU2ptcVBtR0UzUGMvQTRuNXNENUJoTno1SHhEaVRsMmZnY1NjL0I4dzRnNWVyNUJ4QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJREQ2L0E0ZzEvSHdEaURtQXZ1SERHb0oreEljMUJIM0RoelVJZlhkak80aCtodzl6RkgyRGh6VVlmWU9ITlJ6OURoN1dnUFFOSHRhUQo5QTBmZHI0V1QzMmdCam5mNGNNR3FtRzZHbmk5NGI0YXhuMkhEMnRRK0Y3UDBmSzlyVTRac0ZvRDFUQmRyYTJHKzJyMzNPSEQyck1OCjlkcnplMXRuN3preWYzcVNkdml3Z1dxd0xvZXlPL0NyNGQxSGVGaER4ZmRhaHBzZjJtbVVBYTAxVUEzVjFac3k0RmUvNFFBUGEwL1YKS3JYbmJ1MmN2dDhsOWJKN0VtRnVFeFpoOXA1R2hTV2hxSlNWeVZBS29qZk0rbElEVjZOUlZQMTNMdC9yQ1pkS1N4amJhaFM3WnpNYwpLRlZXRkZqNTBKWnQrY005QnlGZ2VEYXYxNS9mMnpwN3o3WWVQa1hCUGtuWlJLMHVMV3FjS1ZqeHIvYlVvRkUyc01VVUlDWXhXSE5TCllaZTdmYU80RWNhVXFWWXZHTkNsTjlVb2Rzdm5ackF6YXRKZzFhR3RqTDA5ai9jMGlsN3BqOWFxdGFkdlRaMitaZS9MajljdjRRbWMKaStvY0lqT2FOTnFwc0cweGVRV1E1dGloQVRDbjRKOW5VeVdkb3BxWEorcG85UmhTbDllaHJVNnhleXBIZCtvMksvUzN0eVdVc29IUgp0SHM2UmUvcHo5YnIrZlAzdGs3ZnN6R2twWnFrZ1kwSEMrWFZub3JlTmZUWmxyT2xEZ0dDT2VnNVNGdW42SHNBRDFQaldFOTJHaHBNCmUxdU5ZdmYwUGExUjYwb0luN2NGQzFvZDdxaWY5U3AvTHE4enZJKzFjdnFHbjJVUmh0TkZLQktZK3RDU2dvdGU3YWtBUlVIZGh0MlUKbnRNbFdPS0poSEF3V0NxZDB0YlNHdU5ZVHg0Z09pQkQyMm9VdTZlYmZScFZrMlMxcGhiR3Z3eDNWSUl2ZTNzd3J6VzhrYlp6K29xOQpJejlCZ0QvaFpxcStNUXJUUWhkZjdhbUFuQ1dOYjlaWWRCbldBbTgrbFhNSzRFNVJaVzFXQ0VhclZoMy8ycHJxRkx1bE8zK05LbnBWCm9KempUY0hNYWlLQTNkRW96MDNGdFNkcjlkclR0NlpPMy9JSG1aU3drTUJQTEtJL3NqS2FZOG1KaSs1UzhQSFVMWVVEbElpcU9oTTUKclgzV2R4SlpyOGo5V3AxVlhUaTlFU2ZZclZ3NVY2SXM1SVZPY0crbWFMaEV2MWNaSXJYYkF4VVBxdkJIdG5iT1hxeTdVcVBxd0JzQwpXdHlQMklqU1cvT3F6czhVNVRFMlROaWtEbFdxc1U1UXhycXBBdHRxQVk1UVZRUFFkaHJCN3FhWE9SR1RBeXlwdFlQMXMyM0QzWXpnCnJsZDlwbGJMbjlyYk9YMjNIMkw1Y1p1RnlBSjFnMTZqVjNzcTVMdlZRbVVpSEVGUVZPYW8wb1JtUm5PSzg3RTFwVFRXdzl0dmVXeXIKVWV5ZXpzZU1XaFRTUGJSVlRhem85Nnc5c2Nid2JLMWVlLzdXMXVsN2ZnNXg0cVF2WTFZak5PVnRHRWRmN2Fnd3RzQWpEQVZ0aWJPYQp6U2hmUnpldkdFRUZUcmpRbG0yb05hdTNiR2pJS1g1RHZiQlJJOS9rMEp1aUhTZlY0WTVPMFN2OXdYcTk5a3F0cmRPWC9DRmtYRERPCjFSTEdCTWVJZEdJMFVBT2N0VVFMdG5nMm9GRFcxQW1xd3FVclpPa2ZxMkdOTWF0SGE2cFI3STZ1L0JrVnJoRmlIRnRiU0Y0YTZuQkwKSStpRjdjbGFOWC80MXRMSkszNytDVWtiekd6eDFMSkFISVBjcURBMlpaVzNwQTIxQjJyd0hqeVdXMW83UmQrSytYTzNzZDVNODhYUQpsQlBzam43ZDdCTnlKZ3JVR3hLS2FORExjRU9uZVAvcmcvVjY3ZUZiVzZjditYbTJWaUI3a29hK01pengxWTVZUFNuQmF1WkR4dm9zCmFzOUZzdjVPVWVGaThVeDhyWjVJV1VncU5MVFZLSFpMdDhNb1ZmcU11ZFI2VzNIV3dKOStUNmM4dDRmVlordjE3UEY3VXljdjZWMzMKMmNLNkhnL1grbHcrUTBBamsxbDhHNW9ad0s4RnE4N0J6UEtpY3dIT3g3SE1BR1Zsc0xvUnlsd1JlMUZ6UnpJWEdyaFNCeklYakViYQp3NWhsN29zUUVEdUtHZWtiS3h3TURtSmVrWU9CcU9ZQnc0eXdyUlhENHhCbUdFcm5VanVDR1U2SVV0SWV3QXl6OCt6SUp1YmpKVVF4CmRmaHlKZ0I5RDE2V204MGNhY2N1TXp3eXJoMjd2QUl3UU4yM1k1Y0xBVnhMaHk2WFRkWXRzY3lHWEthSVRPUGdBRnlHQ1hjcnk5cVIKeTRHUVF6cFV6WWxJcE15NmJYdnNNdEF5RWJab2h5NURGbHRTQnk2ZmpmYmU0bGhoZEFZYkdtSExuV2dXYk9SZDVDZzZHQmtoM2FtRQpQV2E1d0Erd2JwMVk1TmtxRkZadnB4TUc4SEFuR3NhNHQyTXc1SDYzQWEzY244bHJ0YWUyZHM3ZTdYSC95aWVoT2VJZXBReUNBNVFoCnpqZHdjczA3V0hKaHJFaHFxR1RoejhpQzB6REp6Q01UOTRoaytEK0M1ZGtqSUJtaWN3Y1pZMmFqaVJHS0xPdDNnOTI3RVJOU3hBMzQKWWdRZG5XQ1EwMGlaTy9CNDNpT081dzQxQmc2NFlzY3lwSEdFL25HQ000WUMzVEhHMFI3RGtjTkltclN1ZTN6eHdpeDFuWWFFNmRHdwpwUVFYTDliSUNDMDJkQU0vWiszVEJpa0daSUJaT3djM09lWmZ5VXZIRTFkN0VrY1RZeDdOS2V6QnhLWGF3allzTWZwbFJCSXozK3k2Cnh4RUxDOGtobEE0amhqRjRYVHVJdUJZYnYrSHhBZ1BiNGJweUNERm5uS09IZDlOdnY3YkJjaFp6ZmpYY2NDY2ExSmM1aG9BUmNqUXcKbVBFcFpoaHpjNmtEc1FBSEgwSnZwaE1HOEc0bkdzYTN0Mk13NEhhekFTemNuOGlJL1ptdG1iTTM4eGVIQlMzbnZBY0tkNkpqZTJtWgpIdEMvQU9LWEU0eXdDSnNsYkNORVdIYlJkV3lsRVhZQVlTYzZwdGZiYWJCZnU5a09IR3dQNUxUK3hOYksyWHY1Q3lkRy9BNGczVmNqCjBiRzhXRnRrR3c3M1RjamFXOVk5S2hoV3IxQ0hTdGloNktiMFpwd3dJblE3MFlDODNvd2hmZHV0Qmpod2V4NnYwOTdDMnpoOUxYOWYKNUdJSzg3YUhBbmVpb1hmUmoyR0UvV2JHSGc2SVgyN3h3UHBUWC9SYWNFMVNxL1IyR21FQTVIYWk0WFo3T3didDdYY2JFTUQ5bWJ4VwplMnB2NS9UZC9LVmg1c25NOXptZ2Z4dlJFYnV5T0xiRVBEWUc2b1hwcWRCelBXQi9oWmt0c1F4RXVEZDVpbmhyeHdrakVMY1REYS9iCjJqRkViN3ZaZ1BwdFQrUjEybnQ0STZjdmRza1pCcWQzWk9ENUNCZnNWQWY1SWE0MExCNGFEQ0NnN0w0NHIydVBGNFRmT1pUWWlSWHAKbGJjQmQ5Z0lJM1N2RVIzaDE5cHhFR0M3MjRnVTdBL2wxUDdnM3RMNUMzNTJyZUtqazBVODhnVEw0V2UvZVAzdXdpRWorUFhzZHk4Zgo5RUYrK2ViNVYvL3o0Yy9hZHA0UFAvdjF3N05MUjVQY3ZuajExWmNQYjU4L3ZINDMxSC9zSGwrK2ZmamppNGMvZmZYck4zLzYxbDR2Cndac2t1dTFqTitDWkovLzk0Y1h2Ly9EdTBRN3hxbSsrK1VvNjh2N3RtOWZmVy9lWEQvLys3c21WOFpMU0t5OGV2djJBZDd4NTg5TGYKVWNPNzF2ZS80Nys4K1ByZEh5Nk81WjJla1hQMyttdTc3dUtaT2YvanhSOGZmanJwTCtwWHE4N1BsVEhmVURLMnFxanBXRU9hTHA2WApvd2pwRHpzMngyN2xEVGVNMHU1MlBQZW1VZHRqL2JKZmY0bTJ1L292Y1dvT1RjbXlJOHc0ZGpndU9HVUtta1VOY2RZemlhT2ZTYnpzCmtxbGt6ZFdMVklDTFp3RUhFZUlsc25jamxTVUlBUUVKY0tHck9nNEwvMXlWNEJpa2hmaHMwR0tsSlhXMnRpdHlWS2s5Q2tkYmdkZEIKcGJtWjFNQWVxZHdGUUJJWHVoY1RzamdWWkdHQVVpL2Jjb0g1SElMdzRyWXFwTUFBbEF6RXpZNUFJQ1JMQ01haGhZQWRUd2hFQ3JYTApBSHhFcHJHY0ZiMVVlQUJLTW0wUFFnQ1F5U1NrMk41TTA3d25XSzREUmFRUTRERkJSbFB1blRRZndpa2dleXBmVFBiakxVY2lsVGErClBXQ1kwSjQycGtaTlNtREdOeWhmaXdNZ1IrcXlCcjB3TFp0U01zY2pCOHVSTmRQZzFxL01sWHRTbE02aER1ckNPK3BsQzhqU2pOSm8KZlZsdDVKQWZIRkVIT1BNcGE1Z3dqVjNJTmJGcURpOHEvOGh4c2phaEUvRVFWQVNRMVduVkJLR3NGdVlrMG1wV1ZQVUt4QzhzQ3lVNQprSDlkN2ZRSmhycXV3YXlyVEdFd3cvR21ZZGg2bGdid0RzSFRicTRPZ0E2dW5hL29DcWJXZzN1bExrWlpsQUl2Uzd0eW9TMDA0RkN4CnhZelB6QlNNL0ZrODFCNzNaR1FXS05HTkhaQ1VWdGVKbzQwMkE5QkpLQ3JMemV5S3dQTVhITThUVEVhUVd5NDBCcFZWVlM1MHh4S3AKeUsyVy8ydzJXeGpuRGhDTUplbjRwbG8xbzF4ZE1LUXp6RVVLSzAzSmp2TGdZS3N4RWI2NVJlT25Tb1FVeE1Tc20wbzdoY3V5MnRJaApaZldIQlZUT3JzdXNvMWthMFhyT0NtNWxQQVVvbEVuMEtoaUNZRUxDaUZkRE9Hb3l3aG51T0xpenEybTBHeXpwVXZmR0wxeEVLOTJZCktGNFJlbWxHbnBJTmpuVUZqeEUxaUNqL1pmV0FOc2o5U0hFQ3d4YVJkck9HMUFCd1hLTTZKWm44aExoQ2d4V1F5T1M1Z0JSR2JSdlQKa29BNGpkaWJvZUx4OCtJdWF2aUFnV09Vc1Nyb1NuajRrSWR1WTlwVVRWT29pVHZ4aFkwZHN3MGtwQkNHUGNwRGxMQzRLck56V0xCSwpLcFZLc1Bja2lVaGJCUU5mWkVqUXFtSVpMRExNSXh5Z3BraUhnckNHSHM1RUhBS0lTTElubnd1ODUyaUd3RU1RbHFSWmZaMVRhSEJNCkptZE9jektJUGhLelZXWVZEblFKVjdQa2dRUG9teVZDRUtEK3pveFhxMW9IVm9scUFMUWxiVkN2UXpJWEMybEFrWlpaRnhrSU5HTEQKdkxJQmpENzdVVlpDV0wwN1pvVFV5N2NnSnJ0TWRJRmx1S3hxaGc1ditMbDF2bXpWdEFnSERDUkdkczB5VVdEZUsxa0JDclRzbDAyVgpQWDJ6b0hjcmlGaUpodXFFcmdCblJad1YwWmxnZlFNY2YvYjhqQ0RTbWdHZ0g4NGdtMjN2RW9Md1REWDVzQjBRaHF1WXZYS0ZsMVF0ClFGUkRVQ2RWaS9xck9HNEx1NDIvR0x6TWtYMnJRTmd0Z2FGdVBHbGkwZkJsT3VIaGNGa2RoRlJ3N2dOdUJUZ09RL0ZocXlzOENhdFoKaUFQU0M4SlEyeGdYaUZIbTRySnFYOU9PSFBWNE9OSFJpMEduTnhKd2NHWmo2d1ZyRVVUYVZ0ZFY4MG5pc2hLTXdMdXRnRXZIeGw4MwpwTENVM3l1Vk9SaXB6Wklyb29vNllXS0JwU3JUa0VZR2doRkdzdUNLclhkVHY2MXM5eHpZVEIvQ3V1cThLZ3c2eXJZckY1czE0WXBKCmgyREh0ZVdoVytZaTAzTUxIRUx1MHJyL2J6QVlaUjBpeS9QRzhFV01ZU0U4QjViN2xXTVdRdW9DRWF6dm9JR0Q4Zk9zSXkyclQwRlEKekdzaGhGUWNrdDJhUWk3MHF2anBLdXVObVVyMWtUZlIrZkFLb3RzdCtsN1Nvem8vbUNtNDBMcTNJR0VpWEhMWUVDRENWYVo4WHRlVwpBMTYyTFRoYVlSU2UxYVBCWEZFRjdHSFZKQzA3NlhCdjZxTUVBTVJUZ0tYYmo0OVlORFl2RW1uS25UMXVBQTBIWktQWHdHbHVHWkg1Cm9HT1RKVFFrV0hnbHVEWUpnTVVqYVJLRkpSQVlFeHZBbFQxVUFpbytUWExZREt0NktXWWVMb1VVNWJySmg1bmF1QktlbXpDZnNNQmEKTGFUY1o1TE5ESjViTlVFZ2pLNUpYanpZbHNVMWcyaXRUUmMzd2QwTWg4VldZNEg5QkxkRktFMk82Vjh0a3hBeXFabllNVmZHUHJYUApnY0Y3aTVxblhGclJTRkhJUlVWcmFXd3F6MmhSdVNjdWpHMFJucHNkZExocUFpZ0UvWWFzdWhORlJ6cXY0dkFaWndPRTNDUlZTRm9MCnBNdW81ajZjTTR2TS95SzRhbFRhd25QL3pLeWdqNWhvZ29hbExVZXpWaUVWS2dpMFdVQk13bGpncXRsVDB5UEFEU2RVTWRlTkdibDQKWHVFQ3pxblpGTWo4MHFMN29MNVhWYjh5WmpuTldSbHhYWW5aNFkyelJIV2VZaDNYMGlXM2pkdXNlbVR3RVNPQlBLRTBsNjRRZXlzMwpTM29yL0NJKzlycjVlMFFlZW9iUGVWVmNRMFpPTFJEbUpuc1huVkxJeDB1K2duRVNNUVpwK210U3ZxSkhCVmExVHQrWXhCN1FaNWxLCmtPSlhaMGhQMENMSnhCYUQ3Qyt5V2tTRHM4dG1qZFNqWXBBTVRJbUZpOUN3T0d0V1gxMzlRZTJnejkxZWdhZ0VFQXR0VDFWRGQwSEkKbVBZSlRrcnNscGl6S2JUTFpvQlRzZlhRYmdZQ1lPV0tWOWU0a0FCeHRjejZic3JHZ3ZYMnFqckVzbWlpWlRoVTY2cm52N0dMc1BpMgo1SHpNd1ByY0hDT2RRTVVlVWZSTnkxYVhjZnFnRVhndldjZ2JRazViTGNTWFluOGk5d0dEb0swUHZwbEJMT1FwUE1KSVpXaTRPTUFPCnNKMHYyYlk5NW9TS1BPMGl1V1FDWW9GUEdjU0VaR3VJZ2VlYVFseGtVQUpqN3hHSFZ1YlNMbU5LdkdXeGtRVUIxZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJSS9aTDBDUjNqRGNGb1hvd1FWQ1pLek4zY3FZQmxUb0ZHUVJkM0ZGUHZnRXZoaExHWGhUWkVaN0ZqRk9HWm0yNkFNbTlVTnRWbTU5TQpQdDNRRzF1TWxmY0NqVXNST1JXd1BFQ29ub2t5ckhtL2ZZT0ljUVlNZUU3WmFnVVNSSWpRM0d3SURNYm42cjJJL0FMZ1o1aTUwQ2d4CnJzd2dMWE9hOGtzbklDallkOVJHcktiK01TNEFtK1ZNK1JkQld5cUI2V2Vkd0NZcXRUcW1vbENKWnk0eUovRG9Fdy8vTWlMc0VWQkkKTkZ1cE5MMUFyV01DZVp1S0N5QldwUjlic2lFMWh4RFZheWdxWVZseFVDM0VIR0JMSVRhRHdhQS9NQmp1VVpkbkJFMGtaOVhxOUlqWgpZajZZdWRxeE9BVWRWOXBWaEFtZ3FaeFVYU051QW9NUnF4RVFOdzM1cmpFcjVHaUFNQXVuN0x3YXdoWkhDU1RxUlNvSmtETXdwV1N5CldSWEJ1bVprdmI2YWJWWWg3MnMwaVJ6TGlWeUlsaGUvRjlZWTVBRllYbGEzUkZma1NDNG1nczZXa0JLWGJRNjhuemROWEFoaXBHSzYKRWIrRjlPTWJkRzljQlFzTXdzLzZhZ25ndGppMDFLM2kwSldnVFNKbjM2cjRMazFzdG5ZNUhrTk5TRklzTHBjRmxRcHhIRTNRcEtYYwpiSG5hVURJdWpEZzNhS3pZYklzbHVTTjZPTklVcFI3eEJkQU9rVm0yWlppTkdrT0VPSExXNFZnQUNMMmdWM0VSeEdHaytVN05ONTRVClRFQXBLbW5lTHoweU9xaWV4MG5PZk9LQnpFeFo4T3laQ01BanpGdkc5TzhJbWl1YTlhYXN1clBQalhzNEVkbGc2NktJLzFVVHB0dVEKTVJ5VG92b1ZqcXR2REorVENLR0lxMlZaMWJ5TnhUZ2xDSHFBbEdwVmZobWxmYzJkWWZsZ0dlcGZiTVBGM3Nma1RnV1NrMGNZVURLRApxVUoySnd0ZzVBR1ZjR3U2U0w0aStBOWhqMUQ5Zk92VWVBK2tmY3FLdEZGZEI5YkNUZkc4ekE3dkJGZHRhTG5zdFRZMWRjR1dvaDViCkl5REdLM3RZWHlQQ0pKbzFsYURzTUh4SW5Xa25JblJ6S1NOeGt5YUJTenJsTkdlN0IzU0ZsVllnaEpQektFL0MweXBQbHkvS0FaajYKczZxeXhEQjdIa3dRZzJLZWtCRlk4NmtqNHBEWitiT2RneEJydC9HQnV1YWdySDlGZjRHU0dZUWR3YkVRaDRSOG1Nd2tBTXJzUnhvdQo4RSt1eS81S1pyelhPMVM5TXVwSlRnZ0x0QVhDTy9CSUw3cXE3Q3dCUm90aDkxdXh4d0J6VEhRcldBNzJBYjVscWhhbmk0U1ZtNTQ0ClFPY2k0S0FsSVdtOGNJdEZVMWxYYllsM0JGT2gyNXh2d0JnT2c4ZVFzZ1E5OTRDSEl1SEN6WlBKQU9hQ0JVNXE1b0VKWEZuUmtvTW0KUFJkbFcycngzYlBmVWZHbXEvSjNWRXVjR1h4V0tGQUlNVTEyZWhQdEszcGxVS2xKeFlYTUNMcUVjRnV5NDhRVEJUSmtSWVY5eHR6eQpmeVl6aTJJOVlESUNSOHk4M1VoM2ptNUdWbFVhYTVGUDE4MmZpTFBUb3luQTloZkdzbTRhNlFJS2hWdUF3dFh5ek9UcmF3OTVVWE1xCnFNdHFvVEUwcGVJdDhxYXdjMEtLUUtHVzdsZFM2Z00xYjhndmlyWjRZQkl6Q0ZXTjR1UE1URHlDd1pQdDRRQ2pXVE9KeHh3dDFRNE4KM3B4anErWUYwc0FCSlBpTTdmelh0cEt3c2RCSUNHc1dQS1VCRTV6V0hNQUtvU0dGVmYwZ3o4MHNwc2Jhc0JydUI1b1JKVU9leWFmUgp4bnhXbVBCcTdOY3RtclNYWmk5V1VuQU5USFl4V3Q1SENxSlpWNExiajNSNEdZU0hidVZwa3BzeUM0TFlFSi9IblFkTFlZVWdvR2F1Cll1dUJ4d3hpR1NDUkdLTVlFTEZjR1NNY2JNV2owZGt0OXJCd01tYUduY0lnTmlna1NUZG0zWkZ4RENWRHUyYUc1dmVVaXlLQmE3MUkKT1hjek9ZcGJlc2xHNFJTR2xMNzU3Z1UvQ1RHNGNGVkE5NGw2Z2JvekNINkFrVlFHZDZWem40NXh2aWZlUGxmMVE2UjUxaXMxSC9ScwpFZzRNYXJTM1NnL1E2dGFzYkJYbmJtNDAxOEV1eUx4WUc3UFJHcUVtaG8xdnZwWm5TejZEb0JreVpiUkNDekJCWjVadGN0Rmc4N1ZOCkd6Z0YwRkpXNlFHcG9MZ1NObU13V01iVU16azJhN1ozUXdwb0pueVpaelVQWVQ0anBuSGpPWWNhU0VwbVR5U1pzemo0UWhpbEg1SHgKSzJzVXVaMGVSZTJMQkdSVVFZUitzY3d6SkJKM2dGMk5TWnV3NUMzK2ZsMDBsY3MybDZLRTBCZFR6WHBvZEt5enZoeWNGWnM1NXhqWQpnRFd6QWF4aEJoWXMxWFhORFBkUksyeWNkUVV5RGFqMUNHWmhTU3FINkpMUHFxUUJGTWk4WG9oSUxmb1p6ampHMU1OMXdwaGpQNWdLCldXZXBNU1owdzhxRVo0VFpBVHFjRnczRnA0a0JhUmFhV1RyaTNFTkNVK2VDOTRMRUNJNVF6VlRDWUppWktkZ0p1dE1oc3h6cU1GOFcKTytXYSt4a01uQ25idG9RRnpIdTUwd0tpTHhRUUVHZWVqRlBVRmtCME16OFdlRHJ3ZlV6OUlnb1loYWNNYUtML1RXWWpDTzFlUE4rQgpXWWg4ejRXcEI2dWVWbVJNdmtVejZXd01EeEk1QS9ZaWZCS0oxMC9ScVhyTVljSkprSmxWbUU4RWVTQUNSRlVRa0xkemcwSElNOUNSCldQVm9NOWdoMlF6Q2pYQW9PUUdSdUJVaXZkVWg1RGZEdDVHckpSWm02ZHJVMUVaemZxSTh3M3hBVzlJS0t2WlVOWDhqeWV2TXpNeVIKbS9oV1RRb2lSSGlqMHltN21RVEVpc1RNSUdZNFI3SmxLTjQyOVJZUkMwQm5hSEY5bGpTNCsrRkI1VjZCcHBtdWVtYWMya2JLdXRveAp2OElJL2MyQ0JaWWhXVUtraFErdVVtRjNZRG96N2dmTk1XN21pRElIR2tTNnlMQmlSSEJ4azBIZVhjbzJ6TGNFRlFQb2NUOStkcXZ0CktKM0lYQlB3U2dwdnJLeEdHQU44cjdCQWtzQXdrVUFvUVd6WDJlbWRzeHBwMlJLVFo0S1hzV3R3UjBaSGc5THVDT3VGWmpPQmZvYVYKdmJqQVFIeDUxTnphVEpXMVZiVkNxa1NYZFlyakphbkI2Q0ZTTVpxbVd6V0ZsQjBTQUVPcU0yVjR0UFVvY0lUSll2WEFaSWpnT3owRgpCZ3VJWnMyc0NTbGxoZmZ6OGJLZSs0aHpXS3VlbmFWcHYxblBLRVhUelVXRWZiUUw5UnlVZ0FRb21GNmdLT2dxS1pEdFhLeHZBais0Cjl1SUtyMldnaUE3ZkFpQVJNUWNnTU1RZ204aUdjNC9odlZnUndPazhPNmg0QnNPYmN2WkF2Q01QbUxPTHVCMkJrTmJVcmlLMEY4UmcKMndnTXMyZ2FXamsvMDAyMWRsV0ZxUWZnUTRlUkppZjFDV3E0dzZLeUZSMXdVanZ4R0dNVFEyaC9wZWtuV01UaEJ1NjN3cDVnc29XNgpyWXhBY1FENVQ4eHJxcldRdlFGOXNVTEsxZUFqQnZjai9mcnN4a3NRMGExNVZyQXJuRUdZaW5sV095M2NJMjVnODlQc1M5U3RFYUgrCk5PaVZxT1l6cTBTM0dseE5hTFRCQkpDSkRkb0hnSm0wK0RMN3JOcW9hWFpDVkN6MkN2dXNNbzZkZU9kMW1PY0dNTTFnRVMxT2dGcm4KUGRGb21QQ1dVSUI3c09nUUZGUGdyS2NPNndUdHdFUTdkcThFWVVmZUlnRmNEeE9URTNCMFc5NWFyeXNOTzNyUndDa0NTUUgyaVlxcwpwLzF4MlpxSEV6U3VidEN5T2NxWjBCUnVNNGJLZ0lBdXhqay84M0RaU2xWOE01c1Aya0ZjTmpZakluZVJ2MkhUeTdxaHVTN3FoUWVSCmJqYmtDZ3c4djdxc2tBMEw3Qmx3Y0ppcmdvWUFnSklnSVM5dUNnR2hiZ3pVS2ZRNEZRckF0TEtYNHNlcEZNcS9CejBpYzJVbDJveHoKTk1CeHNmTVFRU2d0Z2Q5bWJ0ZG8vc095cVdPTkcxTFFaeVFPQkpmTjN2bEZoWWtGY0I0SWdpMkR5YXFpSHQ2VVo5WnVDbjI1c1htNApZRElnQkZMdk5Xc3dRSXFLU0NOaFU0UDE3R0FIbU80aFZnTHZ0M3JVSVNBUnpEdFFOR2ROVXV0MDNQcEY5TXZDOGgxV0RTK2krNTFKCnZQU2pNR28yMm4xMnF5WVRTY21zUy9CSkUrbXp3UE5UdEU4NXl0QlQzZnNHNkF6U1E5RTl0Rm82R2pBcytvOFd2WnM4S1M3YjZPL3gKUjZSZ0E4OW1XdFc1UE5QS0xmMnRjQ0VMa3NRRWIyZHhnd2cyZ2ZTSmpBb0FBYUtvaHNJc1l6dVp5cUhlemR5WWNQSGxUYk4yMGVzego5K1UvR3dCbVZpdEh2dEtWeDM3RDZXK0VhU0VuTURkcEkraTZCNTlrRWtlcnRSWFZ3WkRES2xkTm9FbVZTWGFaa2p5b2tVSTNUS2ZxCkdlTm54TWtqdjFvRkQ5elV4OEF0MXAzUVc5S3NJTEJPWmp1NmsyWitaREtqcTJxemc5WVQ1WDduWnpBMzg2MW1ndmRVOHcwOGtKdUcKNUVhQXM2WDBJenVVdGhsUWtEcFE1Und1SmVpT1VQUkFTZ1dBNno2Q2ljMHNpNHI0aHBiSGhSNGRmb0dVdlp2R1E5RGE1OG9KMVF3egprT0d6bmtRQ1FZS1cyRVY5bExocWJrbEtrUU5uMDZZb3NEQXpHNjhpdStmbnhPUndNbnRyVDIzS1BRQkdGRFVxV040eDV2VW94VUJGCkdXZjZJWjR2dHplclNMR0pFS2pWY3FwU2g0SG1VSG5HQzRGbTdLRE5UNXhnSmhYVVRyb0I4cEFxb0tXaTZVdUVJa0UxNUJIcUxvSEMKOXFnbitITFdzQlk1SWV3akJDeEZneHZDWlQwbnZ4dmkxakxqTThpY296bWRSR2FqL2ZCTW9ybVpIazJ0TFdNYXFpWkt3RkhwczhhVAp0ampTTmNMSndUT2xrRFBCUXRGbE05N25TQ2dha2djWDMyeEhncE5JcitOcUdDWGE4UUpycmVDOHRNL1Y5dEcxUENKMEFJTmNGOHQ4CnpLWVRBNGMwYThKR1R5RVd1cW12UWRWK2VHY1g1cXd5SFJQUldKVFFreDI1dFl5R1Vod3FzNUMyQXFqQnBFdXpFc3lBYU9rSGw5RisKdUtpVkJpbUI0ZDlrMC9EWmd4QldKWkEza0ZDN0RaQmdNTFJOTUZiUTdIVTB6VUs4aHBjSmJoK1lwOXQ3bWN3Sk9TRkZtM3FLalNESQpBRE9CZkFsNnJyUENrWWo5Z3A5aGVPZnhZOFh5SlBESTVFMFhsRisxQXRVVHpTb1RtZTBOWjdwdUNvUWdBYndDUnNoNWRURjBNOXhECjBPVkExQnNNamN4RVVUVGRGblVvV1hmQjhRR3doOUUyU0tzbHN3QXVXZ3ZaekxkcVdTaVlNSFV3aUFLL1JkZExNcUVjK3RhcURodGQKQ0xObWN5SjJaZW5tSG1ZbjRacGNOTHRYMVJNN2RlR3pCdmhRNUVSZisyV0V6OHdHaXd4bVZFWDNMWXZkRFh3WWhPUWFGeTJDUERwRwp6WDlNdU16emUwSFE3QjF4b2ZCOTFYWUtzSjJDUXl2QkpyRHhRdEtrS29xd1NhSk9ZR1RpUTIvcXpPUldodWhpV00wd0pMQlRBUVBLCnpJTVJjRXZJSjBoblNWQlE2c1kyRU1uazBJOUVCZ0Y4dUhLR3lZNjhhZ2o5eWxSdnlPYmJRL1RwZjRocW1XQ1lQVStjVFlvSUpTRXgKcmJaMnRGOUZOekVHRml1YWFUY1pseG9Ndm9JRFkyQW5nU2RzZFZrS2x3VXlhd1VJSTgwbkRJdUlOaU40cDVobEQrdHh6aDExTjhOTQp4VVc2YXBZRldnMnh0TG1kTVN0Q1prUWNoWmwyR2JZemdLNW1WVlVJU2t6R1pFQ2dGNUlFOTB6aEZIakloUERZRWhCUVljZVR3Uk8rCkpsdUdKVU1HeW1IV2RjWVg0em5TOEYxbU5RTEJMMWF4Z3VEdGhyY2RmakVDeW9CVkMzNVVLb2haRVczcTBZUDNEQ1lwd2lJWHZZeG0KQ2RTQWdPeVhFUkVBWXJXazNCVG0xbVIrTVJBZzZSTTQ2VEpwUmhiQVRLNUxwQmloWS9BWE1TYzFVLzh0RGFIQVphN3ZWdFVwQXcyRgorb0NpNnhaRzNCUGdCSWdQdkMvQWUzZWNWcVRXc0FZREpPUHp4cytLZWxrdERuY05LcmZxUlVsZEpraEFIaFlGUFJGK1BGNG1mQ3BxCnV3M3l1REo0WDFURmpNZDJRVDlIUTNtVW9odHVKdGR5alNYb3ZmSmlBYjFBWmNKQUNLOGdnN2JYVE1WNnJicDhuOXRJYzVVQkVNeGcKLzlWMkpRQ0NpWFdEUUw0cVRxbzduUEdFVldHUnE5YWhWN0hCSkVFb0NsZk9jenZTYVRZVmZjWnkzNmpWVUVLam5ZMEtTOVUwRG5sVAoyNFFLamFwVHJXWmQxRlBqWU1OY0ZWeEpOQzRVUXpDSTFOd25XWkdyWUNQMG9PRVVKZHdkekFiVEJRUTZKRUJ3dSs4TVVLVThMMmcwCktNMW1aVWN6MVE1ald2MW1henRVYmxNUElUQmZ0TmE3alI5Mkp0ZURHVFlNRnp2ZVhUa2o1bVdnOXI0UjFLMnVESTQwYlZYY1REQ3IKOHRhZDFKRDJkTTY0M1h2Vy9HUU5JUnd0WG9OQnk5bWxscWl1eDlVUVp0anRaK0JUMXVyaUgxWlg1bHhZSGNjSElrTjVRT1ErRkZOTApCWUJRSVNVczJyRGJJSHBUT0hpQlFnQU1Ld2liNWltaUZqNEZvd21PdG9lblZVM2hhNXNoS2cvVGtWczVJU0xOVGdtcG9BTEJPWTNKClVXaURHd0pFTnA1cys4cW12WjhKZjI1WHV4QjI5Wk12bURGUFJ2Mm5oNS85NXQzYkY2OS9mL2pKOFhqOS9QbDNydz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJZnYzbTNUUFUzY1ZiMlVra2tCWUllb0JWRkZhTVYwYXRqTU1Jczh0UXhiTHVoRmxSZlJRUW1DNGFsbE1INzlCVVJyd0VxSFZSUVlJWQpWNDE1TVZ3K3BWVkd0NFFXenJBcXVnOVd4SVcyZHQ2VFVUQlFDVGN6OHFuUDBTZ3FUbmhpNGw1djArbk8zQitxTkxrakNzZVpGUmNDClZ5Z2U2b3dqMjZEYVJCYzVUbFlGcTFmRDQ2Ymh1bXVLcm00Rm5jdzhNSFpXVVl5cFRFZ0lSaUVPK2VUQ1dYZE5VSW1uSVNXdmFqVzIKSUltZ2dSdWcwQVRodXBxR00xVUZEK1BwS1h6Q0dZbFo1NThCTEFkRGNUbDNnYU8rRW8ra1dYNEpxWUZITE5zNEZzWjdsS3VtOHVyWgowSlZFNHZoQXdHRGpjN0JSWllRU3JscVczSzVLd0RreTlkNmlWeEVSQUoxK0NScmZRQTY3R1hwRzN3eWFYT0JKZzBYZkxLblJvN2pOCkdad0tIQmJiVllOeEVITTFjM0VTNk1wYTVEQlJ6WG9rSUpaanRmUWxUWXJFazRPb1V4dlltc0IyVmtyamlIeUVZUXMxZkhlanNzcTkKSVN2N0FpUU9DdVpxU1VIMHNFaDFaTkVaZStQYTYycEpYbmdjdEdYVDhCaHY5WWNHNXZsTFFLZjdWVXhVd3hRUm1MMVVjVFl5cG9WRwpBUUNqd0dIV2ViQjJKME1acjdPeFJvaDlNSUtnRmtlUi9vaUV6M1gydE1TZ3dWS0YvVzJlRnp1eE0zUDdoeVdOclVBU1hvTyttRjQxClcxOW4wMFdpaFNvV0lBTWhwRU9hWm1ZT1FJeXJPWGlBVjREd3lTMTRVNTZucHVwTndmaVJhRTdZRExlT3pzZXBHNGdQYVpXd3E2NkIKNlN6VWd3dUJCT2R6QU9UdmNremtzQXZEZ1pFOTgraU9XZ3FubWU2dHlCa1BPWmZ4WmY1aUFNbERuYTIrR2lHb2NWa1ZjMFh6UEpxTgpNZml4SFYrRlREbFlSVEJTY3c4RUFSQUJuSlNRWjIxSDB3aXRxZ2k0NTVBcDlwSDlpV1lLcE1TQTFGUm1sV3pnRXl4b0J5bldaN01SCndla21NaGJXaDd5NWVzbVdxbExDRE9nYXozRkJoRUJkMUJYTm15MUpaVWpLRWxpTndDWHprUllGbkpNQWl3ekVoSWF4V2VpcUpWSGgKUUt5MU1WRUJUZHBzZU5FMENUUXQ2R1ZaK1JyVGVLSzdnV1dEL1I2eVBGMDRUaERCa0NZWnZjeUp5WFQreFVJcmNEb0U0SStSR0d6RgpSYmY0RXNDa0tKUzFXbjcrZkNHNHRnNEVoSHU2U3VuRW10VmtIK2ttbUl1NjZ6SDdmVDdDSGJINXdiQUF3aU9lRmhZOFFyRFdXZk9pClFSUmtaQmQwQnh5NFNjM09XUSs4Y0VrSFFKY3huSENyaW1VMHI5R1ZWakxIcmNXUmNMYmpmSGEweFNxeUNEaldhOVMxUU13Z3hxeHgKSzZ6d2pUN2l4VmVWMm5CbjErY2hrbURoYmJScTM5aEFpd1FWV0FuR2pJelpGUFVpWFRGTVdhamU3NmJSZ01pejl1QVM1enNnTVhwbQpSS0ZLdW93bmluUnJ0N2pxU0tXb3Npa0Nxa2xBQWhxNHlNbTlHV0hFQ2t0Ykwram5va2V0WStMQlEwZlFsdXp6Q3Y4Q0VqMVZUWlRSCjlBVU1zd0lEWjZRaldUVVRNcVZQSE15UXNwNTB4VTBYUm1wSURNcXVOc1hjYk5WV05RQmQ2bzVHREF0Nk5qSGVWTStUYUZJUXJFb0kKQnlSVnA2TzZCK21maHA1REF1RjVjRkM3dnNiVzZxcjFvb0w3cW1xK3BQQVZrMFd5a05JQmREUnlNSW5acHNjTnAyQnlEUFlWUFpJdQpyN3FqTzRZak9kRElJQnJFblFDS3p1Zms0Q1ZHRFN2ODBJSGRQS2lJMHltbzQ0UUU5YjliaEF1dkk5QW5MRDNtbkZRT0QrelZ5NnlaCjdEY2U2QUNLOXVpc0hJK1Via1FyYW9RUGxCWTJUV1ZLVHNIOEs2b0tSUFhJV1F4RWJydXBScHJEeXNaM0FxYU51RHVBQXkwcFBUTWoKTzZHWnhHZ2M5MXF6UVJZQ0FYbkxTSUZlc05VZTFtalUxZUpWTWUwQVR3bDZXSUxLdG51NSszUEs5Z1RhODBDWnFwTlprNmtGRGZXQwpqTXM0ZHFDTUNUSkk1ZzNER1M4RXppMmFhWW5xbnNaaVlZMXB2QWlQaDZGMkE5Mnk2a25yM1BxVjBmdlpGYXNleUtLeGhKckdrSjZ1Cm1ldUdXUTJoZjJuK2c5UXUybGE2ZXZ5aW9zbi92R2tsekhUaE5FbVE5Nkx6STNxbXhhQ3dMOEFlNlE5ajRDQW5qZHJQK0dhQW0xY2UKT3FOdWMvZ2hwTW1LQ1UrRXB3Rytrcmw1ZUM4R3oyMTh4Sll4a2VkSEppN3NhSGtsNExnbTB0c0RMN0s1bzhMTUdEYW1qcU1yS3FxNwpHNFNBN2tnOWFCTDNTbkR6SlpvS1VZY29wLzZFMVZLWHpXb0U0bFhZd25oRU5mUnBUWkdta2YwZVA0ZlFGM2o2Z2JOb0VTOHczK01rCmxzMWlDb0RPd01sQ1FLZlJUb1Z6WUdnMnBybkNyMW9zRlJkcy83TW12YXpBSzh5UWl2RmVPRmNjeG0rbVUyaEJiSXRCTElEbFYzOGQKOFBBdzdzSWgyK0lWT0lteFFIcHdQcWpvU2JoQWFmZml3ZVdhRjJUbFpnZEtRUmcrOG5ndUxRUU9salBJNEYvTVYzcHVBUzN1UG84UQpSQ2kzRmNHTEFwT241ZllWZ2xES3RaaVJqY2NzV1pDYWhxVERSdGloMTNva0djOEVObE1Zb3ZXWXNpSXIrb2FFaGNjTnEvSFVMeXRRCmFLRHB1Uk9abHVxd2VpNkhhcGtuTEtWb000WnhPSXZucDRqcU1RUjhudmxBc3UxUmhlZ0d0U2N1bk9zeFdrNUxxRnF3aFFFTHFPYnUKMlk1aGpZUGRyUUp3eVVOVHpUY09WSUllbGFyUVp4S2dMc2N4WWdBZS9aWEhBeUcyU0kvOFlob1JNT3hpWjN0eGprYW1wZWdISkcvMAowRzBlSG1vcFBia3QyM0ZMeUNyaS9Qakd4b3dSTEF6aENob2hTV1JKTXNNb3Zkd3crS2JZTlY3NjFBSGVCSkZCUnZTOEp6cFg2RlpVCllNQkt3emxOQ00wNldJVUpwcWpCaFMzT083bGR0bGpLQnh4cDBHZElVR050V2kzWFY0dk5UYW90YVl3a3BEQ3pwdlBkbGszUmRqeG0KZ2FHd0NMeExCTWtraTZnbHM4WmhnL1BjczRRd3BDdDU2RGxNeE5pK2s2bG1yQUhzSmhDVHBaMzNaeG1yMDZaNFl6Yk9sSEtiNWU5QQovSzRzdUxScERvaG0zNGFFbExBRlIzMHp5a0xKWEg4TUJhL3FBaUNhU2tjdHFzZVlpejdZSWR0WWFkbGkyZ0VneE5URGtxeXpNNE5WCk5UamtqV1hBeXJJcUxDUWpoUWVHWXpHdkRXcmtHdHRsQkd1RHFORTVGbFdmMVVYR3p6QkE1S0lHQ0wwS1JneGhUSm53WVEzK1ZKQ0YKNTZGWkxDOERRbEFoaXV1WVlXWEJDYUV4S2F5RXZZbEdWdXhOYWRIbG1zdGdnNGViaFdrM2k2cThJTkJRQUFMRG5rQ0F1d1VFTjRXQgpTRUVEYlRFYUdDSElzSHVDNEhkVDdGaFJDT0Z6MndtcExpNUluVkUxU2JuT3E4cmNJZ1FjZ2w4bHk3bkFxd0x6a1NzeEdWSWYxamxtCkc5cXFmUTZNblN2TmF3VWlJaFU4b0k0RVFyYUtoNFBDMVErSFZORVZySmNWVFJDQVkrMnE1ZDZtWVk1WldSbkl1ZXFaS3d3VG5vM1AKUWNUVm1MZk1OSmR4dHMwNWVWenJxdkJyQUluY2trTEJEUlp0T0ZZM2srU1NmbGF2RlQ1elVnZDF2ZmxWUEVNQ2dYcmNITkJNcGY5MgowVTlFSXlVTGlsUFJKU2lhQ0lwRlpBeFBOZ1JRdEN4QzBjS3QzQmZtUWhuVHBqQkVwMnFjVE1vODlWcGRuMFRIenJRbURqc01zQ1E0Cnd5SzZQMmkyQS9nWWx4Y3RpTUk4dW5rZXdoMXBGV1dnbGFzMW1OUHcrMVlMV1NLU0tKb2R3OStOOHBOSVlSdDBEb3BsZElRdjVxVmgKYUhaUzNnZ0Frb3BscTA3czZObU0wV0hnc1J4TGlubFp3MW9vMExmREFqYzlhaHRTTGIxL09MR1pSNlFWZW9jMVZ4Q3owUTdDRWd5ZApWVkU2QkJ4VGRNYk90aWx1aHArWjc2anF1dk9yRnJxQUZVWFB6endCemxNL25RcmduMVc2QngvR0lvZnFuS0tmUWltekN4T0pKMkN1CjZzWGtIbHV5SjdLYURZQ2FOVXVCTXZsWjVUWFk4UmloRERNZ0pPVjEwWEJvcG5MQS9zVjBVS1duckdJWUY0aVc3NEdHWHJTZG5VRGYKV3U3cURkcW1teDhlNTNtMkF3L2dMV0F1ZUNJR2c2WnhBa1RmTVNqME5xNmFGbzN2eStNR3dURmhUNG5aY3VtcXM0MmYxUUUzTjErdgpWdHFLZFlnR2srclJMN2g1VUF1ZHUrMVV4QTYybzZBV0pqRXNkRkFHQVpCSEZCZk9FbTVTQUVEMGxnRlVzNi9EKzBlRG5OVWlBUndGCnpUaWdBWjQwS2lERjlFU2U4d2VyUkxIVUtjemJpeTJtakxsVVNsV0JwdFhDOVhDU0VaaUhTZXlFdW95WEdaRjUwNkVQVk4yK2dZZGcKNHZOcTV3TTVRV1czcXRieFZtdWIxVHlNb0J0R1NEZkMzR0ZialZnOWl5OE1vd0Q4MUdUeVZiVk1HalVPSHRxYWxFTlVwcU93dE1SYQphU21ySGxUQWNPMjZFMHVUeHRIVmFNSDUxU0JCZ0NDU3JlRm1SUzlyTm13OEVyTVhnQWhJSE1PL0VFbk1rNVpYd3djQ3hGM05EY0xwCmlDUkZLMDEwbWs5bVM1cVNOVjJwYXNjUXBVcERZNE84a0lqRmh5R2lvQXdDWE5nNEFwVU1HeW4xNEJsaW5udGZubHN5ci9GR1l4OVIKamZBSTRqTnpGbTVKc1N0b3BxVlZNakVFUGg4bVRFVzJzVVJ2VmJaZGI3UDFTdHVKSS9Rd0gydFdJNUpIaWpIcUNKTzNNR0ZVVUdOVQpOU2VYM2k2bzFhWGFoczdMQU9tQUNSMTZLd2dVQWFzRlVmdGw5QzJEQ0E4c0E4cG05blZtWEdMVUdCSm1kc3ZkU1JoaDUwSW1MNDB2ClhEU1BCM1pYWmxSZ3gvSTR2RmhVbGRWWHN4UmlvS3FDczdseUJRb01qUm9ZaDBRc01GVTRPRm9mcTI1bXdLanFKbWNlQVZJcW55SXEKREpaV2phMjV3Nkx1eVNGcUh2VkV6VkVEVXV2WVRGRTNzWTY0TzFBQlFiVGM2ZlFyY1JzMElKSzZZbzJnN3hmY0JMSnE0QUFXSVBnNQp3SEFVWWJET21DSFBLY29VaWlWbWJQWGdRb0ZLUjlHSitLQ3FhaGllc3dYY0VPeTlXREN4YXRCMDlDd2FKY3lNRTd6U0k0azd2cnIyCllHSlZJOERQNkV5RnlrWWhDTW5YR0dRYjY0QzRRYlJYc0hlazEwdlY2RTJQMEtINjNTbGhpQzNveEtnNTBvdW0rWUdEbFc5RTRITDIKQ0J4WU45aXA4R1VsbW8xTlZZRXUyUklQcWdpVExYNk5kczVTTzhySHdyMFh5eEFCdlVnVE9FS3kzelRUa3NvbnRJWDYwYzY1YUZCKwpDRXUvZzZXUnROUXJyTVB6NVlDcHlFMm5ORUFGckxtYUxtdmROTW9aa1ovY2xRbWpZdUtOZVFUWEI0WDdZL2xEaitPekJxdW1xZmVECkpqWmtoN1hEeDRMQ3BCaWFSZUVhYVU0V0U3V29wREV6Z1JvUHErTGg5RXBtZFYySC9rZDRTMUdQdDY3aWJFQksrdE5kd09ZWkJId3UKYzBVeWZSVlkzYlphMU1pcGJIVHpHUVd2Ly9KSUN1Y1BidWl2bjR6NkpOdnV4K1haUFQzUGJkWFR2OGVzdTFpcG9kU1dkRGZ5U0tyVQpjdTdDNEl0RHJzYVV1MmxUOTZLbjNNV2hvNWovbm5GMzVUa2k2NWh3RjdvMFpyRG4yNFZHS3ZkdDZYYWhRMVU5VXJCbDI0Mk1hVmxhCnNsMTh4cU42cmwxOFhqUkRiMHUxeTJ0Q2JwbDIwVzRwVzB1MEd4bXp2a3V6QzRTaXBmU2pReEYyVmxqUE5jbHVOdVRXa0dNWG1HbUsKd0paaUY0R1NNS2g0aHQzRkVGRzdCTHNqa2ZsMWwyVEpXejI5N3BMVWZMdkxycnNrUmZLMzVMckk1UDcvc2ZkdXU3NGt5WG5mRS9RNwo3QnNEdG9HaEtzK1psMUpiaG1XM1pFR3daQW1HUWRETmxrU0RQU05RbEFtL3ZkZDNpTXlzdFhvb0Nkd0NmS0VMY25yRnJxcC9IVE1qCkk3NzRCUmRSd2RhdHpuNi8wTHBNc3VVUlpOMXFoWS9CdXMzVDZNM1ZoYVJTN0ZkamRZTjF0cW02aU5qb2c3K2d1b2hhNURJT1U1ZTkKZWVZNlNGMG00MHQ1RTNXYmkwTTJVTGNWYWUwMlQ1ZUczdDQ0M1ZiTVdRaWFMbzZUNTJIcE5vdklYaWhkdE1RUnVVQWtYZWdmQzFONApCdWxpWlNhVXdzWFJaZnF6OUlQUlpjSFFPQkRkUGtQQ2RERjA0ZkVYQzVZNGQ0NGh6V2tRZERFSGkrQi9BWFE1VmZkNitMbXMzQXBVCk1UNnhxTzk2MFhPallzbjRYQlNKemNQTzVaOHV6TjNSZVhpM3ludWFuSXVPTUpwQkRjNGRsU0dpRzVzN0hLa0lhaTU2SFdDbURHZ3UKa3V3b3lMcVp1Y3VOTlFLWnV4SXpKUUhNeForY0JTNHdHblpaTldpNUsybCtNU3dYN2hOV0p6Y3JkM2JsSVFPVml5OFlxODRnNWVLOApxL2Jkb0Z5SXN4QlBDVTR1UzJMeHFRUW5sek1jSVc0M2NaalRYaDJiazh0Wno4UmJjbkl0SWlzdlRpNDFaUGpJemNtbGdpeEpDcW4xCkpBelVMODRiWHRXMU5nMU9MdTc3WTIzb293dzQ4OHNYSlhlNXkwNVFjdlVacXcwVksxQTRJeU80ZFdOeVpaeHIwdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJYkdHZ0dyeHZ1dGFqd2UzRzVQSmRvZHphbUZ4Nkt4UmtYYnN4OG5oamNwZnB6a0hKQmJzaDZaT2dDQlg2L2FZRjEyYmtycXhmQ2tTdQpGMEFCeUYzVCtxbUxqd3NiUHFiQTR5S3FnTnJ0b09QaU5GcTUyYmpJdUROV0lqUXVYdjFIQjZYdUZXSTVDbG9QR0hlaHFxMmx6Y1hsCnkxT0Rpb3U1RWl1K2k0a0xQcW5iK3pBODI1WWNyQ0RpdGtObjJ5TlFzKzR2ZUxoZ0Z1QkhBNGZicFBpN1liaE5ZYTlBNGFLK0Y3OFMKSkZ6OHpWKzVTSHBJVUVBc0hCemNIazJPbkl1QXMxREdEY0h0YnRRVEROenV4R0FnY0JIdnhpdHpFM0JaUzl0SEFIQ2hSL0pycjFrdApLWTEzNDIrclMzbUNmZ3ZPR2ZWOWh0K0tmMWRlN050cXZFaXdiNnVyVkFKOWk3K0Jjcm5KdC9zNEJ0OHl3UUhaczhDM3Rhb1kvdWJlCkZnK09nYjFGRkxxV0h0UmIrRkR0NlMvcUxWZEVxd1QwTm5jOTkyRGVmbmJOSWh3cEVUQW01MW5leUZzVVJTQTBaZUl0YUJGTmZGc0MKYjV1N0M5NjhXOElobnJseHQ4M2xTa0c3eFQ2Wkl0dFRPSXVWaHRwRGluV0wzK25zNUM2SWJjdGFGMXlnVzZJUkxocHVOUjAzTUxmSQpVeVB5ZEZGdVVXZGVSdDJRVzFSc00zNXN4bTEwRnJzUnR3QjQ0cFV5MGJhNVdldjVrMEs1bTI4TGhIRTVkTnVXbmIwMDNCWi9zNFQ1Cll0dFc1NWNEYmN2dkUwWGRJdHZ1UHkrd2JaMUt3Z1hZOW1PaHBNSlh3MXFhS3dodXJDMXkyNkI3QnRhMnVZWWdxTGJ3UW5IWGI2Z3QKM0poZU45SVdJd21URjBiYTRwK2JPTGliYUl0VElVL09RRnNreWxBQUhEemJWaG5MdTJtMk1QR0xNczRXZitPdUI4MFd3d2ZrSGpmTQpGZzRYNGFCbTJVS01oekJMc0d5QlZXbUNxdS9KQVRsSERySWkyVUtiaU1CRWdHeEp2eXoxeGJHbGt1SGpKZ1hHdGpvWUVCUmJnR2N4Ck9OOFFXeUFWTDRSdGRVNDVDTFlnVWZKRHZnQzJoZjFFOHViWEVqejU4WG9FdmhaL3AxVmU5TnE4eEc4TGVHMVc4Qy9RdFpuUThCZTQKdHJoMXNMbTFoZW1ydkxHMWhjclEvS0xXSW1XV1ZmVEVpbUpRbUhWZVV2MTB3TUxYQzFtTEZFUStGRnNvTXJpcUMyQXRKQVZFZXI2QQp0Ui92S3g2MWdiV1k0L1NFUE5XakdyKythYlVvTFdqandHcmgrai9qc0dvZnljOWZxRnFnMXNZNHBGcmNuSXRUKzNDWXV5bTFtSmhRCml4bVVXa2dlaTlvUnFpYU43ZWhmaUZxZ1pqRXZiRVF0MGhLaXlJcFF1NFFWZWdGcWtUbDd4Z2JVb2l6bTBHbXpaWGozbElvVVpoTDkKbElJQ2JsUHlRZE11ZFVCOW9XbVJOVVloVDVCcFVkSFcxZ0hUeHQ4M2x6WnNnYVZkV3N1Yk9BditKOWJZRjVRV0ZaVm9wQnhiMFBtdgpHMG03Lzc2SXRHRUxJQzNxZlhEVXphUDFhM2JqYUJmTHhldW0wYUo4SGk1S3dHZ2ZMb0VGeTlpYXhhMHJDaG90NUIyRVdRU045cUZXCnJMeHB0UGc2S1JJSkd1M3ZtRmJDV2pSd3RBOHJac1VDM2dNT3lqOTd1V2kwOEtyd2Q2RGF1ajd6bTBVTHNpRkFRa2JSZnJ3c0hBTTMKaXBZcXgvSW0wV0tXZnRJRzBRSm5NeEcvREJBdFJnaUdRRzRRTGJ1bnozbEF0QS9vejRqTUI0a1dxMklNakRlSVZoU3RkRGkwai9seApnYUZGa0tYTUY0VVdJV05FbFFKQ0M1bk0wMG93YURIdVBDTy9FTFNZVVRycVNrMmdCVlNBWlVOUk1JTlFVU2t2L214dUd2ck5uMlZsCnM0cVhtV25IMzFQYy9aMXF3bUZLR3hzK2k1eXlRRUxXYkRhRmRpNzBMUHl3cmlKY2NwdllkMm5XRFo2RnlCQkJtSnM3RzdiQXprSWEKTW1mYTFGbmVFS0kzams0Y0FpTzhLOEdjaFJRQVkyQWdaL0h2N0E1eEVXZGhtK3k5STBsTGNSMTM4R2FSWWMvdFJadEZucDFNV2NObQp5ekxjMUt4Wk1HeGR1YnlyK0twMUlVR2F4Y2pHUllRUnNxMG9WWDl6WnVHd0kxNFhOc1R2eUtBelpUYit2aUd6MjJiR0xKcnpQa3ppCjZqMzY3TEtHUTR1QXNLbGNGMkpXRFRGRzM0alpWRjFNdFJHemtDSUloM1VJczZrNGk3c0pzOWhLdUZHTGVmQzlNT0J4QTJacFRSY2wKRmdiaFJvTXZtMWdSMk1hYkx3dnBBMHV4cnoyN2FQNmJMMHZMek9YTmw4WHhLRi9jZkZuQlFsYzVmRmxwWWNvbndDemg0c1VKREdhNApTM1plSWdDelJLZU9OTitBV1ZxRkhEVmdGdi9Cbk9ZR3pQSS9tRjY2Q2JNQ3k1WjVDTE84T2tSbk5tR1cvNVNNNU4wUXF6eGRQUmVFCldXYWYrR0lFWVphUGhwQzBtekNMQkpGU1VTYk00ajQ5ZFpaRG1OV1RaK0xySXN3eUw4WklZUkJteVRaRlZYa2daZ21pWitqeVJzemkKQjFEMnNnbXpPQi9seDRJd3kwTXkvSG9UWmlsc1lwUXhDTFBFNFdmM0xaYk1NcHY0OVNMTVNoTFZEMkNXQm5ZT0NjQXNMT0lTM1lSWgp3bG1adnd6Q0xHS1ZpdnNHWVphQlAyVVlMOElzTTJQNmtFeVlaWXhuK1Q2eGVtMDFRWFplZ0Zrd0Y2UkJGbDhXREVRQ3N3TXZpMFpWCmFwVjI0V1ZYaStwUzgyVzUxVGgwV1J4bU9lMjU0YklJMmZEQkJsdVdnU2tWVlpndGkrdWdFdW5GbGwzTFgwS2daVmNTejIrVFpaRWMKU1BYTmxVV2NVTzNEakpXZFJiaXhUWldGQWV2TkYxUjI1bWlhWnFZc0RLSUNHaW1yN0VWNUUyVlJvcTN5VVFObEdUNUQxbjREWlpuUApiMk84Z2JLODVQejBBNVRsbytOWEdFQlpjREFSbDd4NXNzdTFpTWJKSWxiRjRMOXBzdmk3OXBzbEN3dGxKVWJKNGdDUG9tc2t5UksyCitmRTkzU0RaeEt4N1Nwc2txemk1a3d3c0lNRHNKNHppUlpMbElFWVljNUJrZWRPclhoVnhHbkNqTUtyZktGa0cxSWNhR3hJbFN3T2kKYllHU3BjRUUybzJTVlE2bTVZMlNWWnBram8yU1ZmNWx6UmRLRnFkTWVWaWdaRmx1dy9yYWFQU0ljbE44SHpkTGxpME9vQ0VJbGl5RwpkbjVyWnNueW5yQlc3bUxKMG9qNHVWbXl6SXdqQWgwc1dSaVlSTGhac2pBR2daWXNXUm9RVndtV0xBMXNTM2F4WkNsNXBLYkdNRmwyCkJNSFhIekJaREI5VUhOdzBXY2tnODl3MFdXNkYyU3Rvc2lrN1ozSFRaR0ZrZWlGb3Nsc3NLWnBzSXJ4bnRCZE5Ga2I2RWtHVHBRRmgKdktESjBzRG1NQmRORnFNMktibUd5WXJvdjFMUVpObmFHd1BXelpPRmtXV3lBWlJOcElhV3VZR3lOTENLK3dMS3lvaGtoWUd5UEE0TApEZzJVaFlFczl4c295MDRJeUxZSFVGYkZFbmtGVUpaOVFQa09YMEJaMWNZQXpXcWdMTnJWY05JT29peVV6eFMyM2tSWnlxR05rU1pSCk5sV2pmVTJVNWQ5OHB5K2tMSTJRQ0FSU1ZxcnFyQXdST1Z6OE5XcVRicVNzWk5UNnJpblFZT09mcFZwQUVtVzNRdm9teXRLdGExbUQKbkFTZUlQSFRtUW1pTEVUMFQvb0VsSVV4c1JneWlMS3dlSXA2b2dkOFBYbkdqWlJOcDMyQmtiSThGbnRHQkZJV29uaXFMRjlJV1Z5agovS3hBeW5JK1ZvTFdoRGE0TitNVFVaWktKNWFYQlZFVys2bWdMWWl5dUJFaUc5eEVXVWpZVFhVM1VSWXZGaitLQU1xbTVvNlJMNkFzCnkyV29DQW1nTEx0d0tUVnJvQ3g5Y1FDU2JxQnNpb3ozQnNyS2NuQ3lYMTM0N2R4akxIMmtGTjg0V1VFUzhxYkpZbXlsTk5vMFdUMzQKbFY0NFdScmhpd1ZPRm9lbWdEbDRzakJ3VnJwNXNreVR6N0Z4c3Z3YnMxVHdaR1hvNjhXVHhZOGhqUnc0V1g0UEFralNqOExNWUJUWgpscXNodjRZU2xjREpNaStaK3ViRVloU2FiYjVnc2hqUG5GbWtyVWRyVGFGa093YVlaNzVJc3JBOVpyNU9iVUpNaVRpeVVPZk9GMFdXCm5lZytibHRBWkx0ckE3MEovc1NRY0NOa3UxdTZCa0VXMktoSFFXSEVpTkFxRnRQRHhZOGxqSFhWTUxIWGErdWJIaHQvWC9EWWJUSTcKZG5yT0RTb3NXS2tzMHJuSXNhTXBhcnkzS1FLRUJEZzIvcjY0c2R0a2JPekh1VlBuYUdyc2ZBU3R1cUN4UWNzTlp1eDhOTFFGTW5ZKwpiaGgxRVdPeGo4bXZqTTFNQzBpQ0Z6c2Z2Ym8zTG5hNEJVN1FZcGtiVTRpS3RGalFCTWpOdTJDeGhJaVd1Vm14QVJVTlZDd0MwQjhECndRMktoUW1mVW9CaThUZHlvY0dKSFNLMzNwVFlZYWxYUUdLSHU1Y0VJNVpCNnR4ZmlOaHVEeUVRc2ZqY0prdkU1Y0dONkJad0VXSUQKR3hXQVdEUzhRVFl6K0xBOUszbC80V0ZwS25uVFliRUxrWVNHd3dMNnd3em9nY09DaUZYR1JzTWltWW1Vczhpd2dHR3hIMWw5NWJkWQo3Qk5jV0NSbUtWY3hGblo0VFhoVFlkbk9sQldtZ3NKMnJYRUNDZHNOL2J1SnNEeVJ1bm13YkROOWFMQ2RZYS82Z3NHeXVBdHZvbG13CjNjVE9RTUh1UXh3UWJIZCtMeml3dzBtVFozL0Vvc0NDU29GUUJDQ3dHSlBTaFh5ZDBTYmpRc0JDeDhYVlNXeXp0RndLQUN4SlYwUzcKSHY0cmlSV29JVk1xQ1g5MjNpUFJYNmYxQ2pmOWRSbzBHL0JYcU4xWnZXVDJLMUMyS05PN3lLK0xvZDJ5d2E5WWJiTEJnd3VDNCs4TAorN3BOcHI2QzY5SkY5aHRXam5HZGNUTmZsNkV3Z1h6Rk9veWZheUJmaVRkb2FoYTFrYTh3U2xHc2lCVjFIUXdlalNoZDZacktMK0lyCmdVaEQ4VWI1RTVCYlVVdHE1Q3Uzb056MFFyNWlDdU9vSGNoWE9KUmw4MTVuMFJPL2NhOVlKcUhTUDJpdlBKdEhHNm5pRjM3Q05LSjEKMXczQVZjQ1ZCdTVWYm9JZ3VXclRsZHdwOXNhOTJsVW9HL2NLQTBlendMM1N3UExsQy9kS1A0c25idHdyOFFrWWVvTDMrc1hsK1BHSAovNks4VjRiUXdQQzVlYTgwSXNvWXZGZUYxVXJlZ0ZkR3kwaDN2NGl2RElwQWVCTEVWMkllZUhBUlgxZlZ1M0FEWDNIQlhKMEg4SFV2CkJBUDRpckFYKzN2ZXdGZTFQcFREUXVJckRUam51Z042WFk1QXZlTjVvbFFFOEZVUnRkNDI4SlUxZlNTMVg4QlhCcFllSjdNa0srb1MKa0FmeGxmRUxacXN2NU90MkRJMTg1ZnRub1lEcTR1bktJa04vSVY5dkkyUHV5Ukh3UUw0UzZkQ1VwdG5JVndyTklXSUo1R3NpYkRmbgpqWHcxdEtLOGtLOVVDRklQWU9Tcm1HQ3RiT1FySGlFWE9UZnlGZVVaV0VJRzhSVmxSVVFtcTVwMXVhbkd6WHVGSnNsUWFYck44RWt4CkNnVHVsYkdqcWk1L0cvZkthRWRYUTJQeEJ4NzM2UXpjS3cxTmxYbW45b1hHMmpmdWxjZEJoRE53ci95MVBGKzBWOGJvMkJ2WnRGY3UKQnl2ckwxalB4d2dUYVlNSDlvb3dqUHMwc3pvSXpDYXNFUVAxeXRLSlhGK2tWeFFORVJwcjBPdVk0cllGNTNXNFNPdkd2TUpXVkpGSQpWZnR3dldoQVhvZS9oaHZ5Q2wzYU10TVZRa2pSTW9Qd09yb2lPVGZnZFRSWDI1dnZPb2FLVUUxM1JZaUZyUElMN29wK0RSaFRBKzdhCmw3dGJtdTNhSFd1NzBhNWdEaUZvRkdUWHJnaGVjRjNKS0JydGhYVmw4eEJrcGtSMXhSSHdoZ1hVbGYyUXgzZ3hYYnVyTDZPTUZUMHMKc2lyWFdiT0dNOGQ2K3lhNnN2OXdMUnZveWtMcm5EZlBGYXdvT0hrM3poVXViOVk1TVZtR0xvRkZsMEdZYTNVVjRNMXl4ZHJSemV2cApZTmE1QWJBTStlTnZ1T0EzeUpVTnpVZmVIRmYyeXNsbFkxd0JJSVZ5NWFhNG92NlJMcmNocnExcG0yQzRRdG1DdGZHTmNJVU5ybndnClhLR0lhVUt2Y2pVSnhZeHBiYnQ2dkZVbEpBTGcycXJrc05jK3JDQzY4YTJvQjJmSnU1a1Y0WVFIdmhXMUpKZy9iM29yUUJQNG5ZQzMKdHJsNzBuTE1SeFVNeWJvWHV4VTJmRHFCYm0yZVhvTGNpdk1vSnNSRnJoWXljSVRhREc1RlFuRWNkUitJQUVYaTJZMXB3WlV1MXdvQQpYSXJGRGN2cHpXeWRiaVIvSTF1WFZ6ZUJiRjN1MHhQRVZtaDZpWGk3Z0swUWpMS0kwYnhXbHRDc3RYR3QwQ2NqQUhmUldpVmozcXpXCjVUQjJvRnJ4ZC94S2tGb1ptSWVySGFUV0NLRUhxQlYxUGVBZzNKeFcxT2h4N1dsTTZ6TEdMeWl0eS9IY0c5S0tuSURlakFnb3UySTcKeEtxaU9lWHhnclRTU0t5dzVWT0pHTTFjTjZTVjRXejRxamVrbFEydUVmb0xTQ3NtZHNNQnlXaE4wWjdnWXJTZUk1blJDZ01STk1GbwpwWG9mUVltYjBRb3ZKbDRJcGFuZ2dMTjN0aG10VHMydUY2T1ZuaGRiUDVqUnlnd2tacDFndEg1eDJDSlk5ZjBZcmNzdFcxNklWa1JkCktmUVBRaXVpcmxHOHdQVU1wdlJrWXV1V3N5eFN5Z3h0eFhBQmd3cEJUV2ZGYmt5ZzNIQldGaVhLcXlhYWRRVmZOUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaUtzS2wxMm9WcjIyOFAxWWNoaWJvV3ZUOU5xRWhmRW5yM09CV2VtR00xOGZZRll1ZHBoYURqQXJRM2l1NGR0NFZZYnhXQnRwTGl2UApDN1hTbTh0S0I1ZmtyYzg3OWlxZHZkb2NzeUptam04Ynkwb0xPN0hlV0ZidXdGb1lZMWw1MFpoTWpHWGRmOTlZVm9aeldhMXZMS3NxCmMyZmRXRmJtcjFoZGNHRlpHZnhtZzdnUnNyVkh5czdnc3RMenpRS3NucHBDZUU0NWJTd3JZdThzT2pLVmxmOWVoSURkVkZhZUVlNWMKVUZsVDlCRUlLaXZGK3hoRWJ5b3JqZnlvVFdXbGdVT0txYXdjekZBN2NGTlo2ZTNodklQS0NnT3JZNFBLQ2dQVjVqZVZsWXRLanYyaQpzbExac0JReTBxOWpkSmhLQ0cwcUt4ZVp1R3VCWmNWN0RkRitVRm1WV3l6MVJXVWxUd0pJZzZDeUtzR2QrcWF5SWpiUE1lV21zaExvCjBRUmQxVmdJeHQ0OFVGWkY5RFZlYlNvclZRd0lGQVdWbFlZaUNpc0NXTnlyS25Cekt0cWhpZUs5TnBXVlhMcWtZTjRRNGkzcEJ0MVUKVmdnZUVPb0xLQ3R6YmZNd1dhR0RZZERpWnJLQ3A4WDA5TjRLbmdPQkM0YXlJdTNCOStPR3NzTEk1cXlDc2dJR1JIY2dvS3hJenpCQwpkRU5aeVI3RGtqT2dyRERRWXdzb0t3MlFTdDlRVmdKNldNOXZLS3VJUFI5M002Q3MzSTIxTGhlVU5UVzdhUUZsUlYwcmx4VUJaVlh6CmJqQ0VENVNWYVN2V214akt5cE91OGdVSVpRVytqYUNBaThrS20zN0xUTlpFVWsydG04bEtBK0ltTjVNVlJtTEhnc25LclhqOVpyTHkKd0VtYytNMWtSZjVQbkFveldmRmtpYThLSnVzMjNFeldZelNURlFkblFDSm9xNG42NGp4ZlRGWmtUT2wwN2EyeUZqQ0JaTjEvWDBUVwpzQVdRTlJIU0JTbUNnYXo3WmJ5QnJNeDhvaTQ3Z0t3c0ZVWnlPb0NzVEdPWmdIKzZ1OE80NUo3cEMwWVNDNnVTQUxJeUdhVy9kNTBEClgvU3FtOTlVZ3Z5SUIwRkVBLzRWNjhlYngwcThWWk1QcWV4eENkWmJBRmtad3BrM2o1Vkl3Q2RMVWpQMGFhZ3FQbmlzL0ppY1BMNDYKVEZTNUJ1YXg0dStPQkY3d1dHR2dwM1B6V0dGa29ENTRyRFM0R1NsNXJEUThPazQ5MzBwV210UkVWbVpYS1hJS0lpdjBhaXlKZXhGWgo4Wmk3T2VzRVlyS0NmNmdmS0lHc2xHOFJHSElCV2FrVHlJS2c2NHZHK2xuWlhBTlo4ZGF4ODlPTHlBb3IrY0NieUVvTEhzbEdzdEpDClFkdU5aT1h4Mk9vOGtLeFV6TEVxTlpDc3NEQnVkU0ZaNldBeSsya2tLd2xXZytxaklJY2treUl2SnV1MmJTWXJKeVBxTW9QSnluczEKeXljb0s2eDZwUXhsaFlHTC9RMWw1U2JVek54UVZscjVoQUxLS3Z6WE1LWlZ1TTZzRWU4RlphV0k3akZycVd2bTdCb3FOcFNWakFLbAo4eThvS3dPMnJFOE9LQ3RySUtsVk0yNlZiejJ2KzRLeWN0R1NqbTFGTDdSQUFHN0RUV1E5Um9OMjBNSkMxQkR6V0wvNDJOL1ZqZis0CkUxV1lpWU5qVlZWNTJqUldlT3RjWVFXTUZaSGNYdDhzVmdTSldGNXJGR3VYdW5xVFdLZEsyRjhnMWcvYklERFZTRlhJSmhBc0RCQXIKVnMxbzBITnpXTEdPNi9jdUErckVEV0cxM3ZQRllFVXRJSW9FakdCRmV3MXhTRVJnUmJ5eXBmb0NzRUp5alFwNzgxY1Ira0xOYk5CTgpnWldGL09QR3I4STJpV1FWZlJWQnVtZHU5aXBVOVNpV3VkR3JVR2Vqd0NMUXEvaDdJY1J2OGlyK1JubnZUVjRsdlBialF3anlLclRuClVERHNVNFBJbHF1Umd4SmpNZ1J1c2JDclVGY1hmTzB1N1FLVmJ1RUdYZEJWS0crSWw5YUFXcGJHOTBDdWxzNlcyQmR2RlI1RXhuTEIKdUZYMlhudktwcTJDYWxlZitZYXRsaUk5d0dhdFFndmVpR1IxU1FRTUtDQjZrVlpoaEdRMFFLdUZoUHQ4T0tzRkViVlMzcGpWc3FRawpKV1VWbVZBeU5mMmlJTlhNRmdrWFk3V2FMUmVJVmNiQTF0aUVWU3pZdWE2OUFLdUlUcERuRXJHcXg5UUM0MVc3UlZZM1hSVTI2b3dNClY4VStTNWxKUlVvZjh3Y3V0R3F6eENuSXFzM3Q1d0tzMm1LcU9XQlZxRTRZU0RkWUZaSUl2S2ZHcXNJNUhPa0ZWVVVnbEFrdU0xV0gKRVRPQlZCMHM5SHNCVlpFQXo2S2xrcWM2alBZSm5DcDJBWUxncHFsQzZjTDhsMkdxbU0zQlh6WkxGVElzMWlsY0tGVmNIaWJwSUtuaQo4cGxCZFhnUzRVT0VXbStPS2dKdjBDMEdScFhaYXBFVG1hM3JLdFMvR2FyZFBQOUFxRWFKY0JCVXUrdi9iNEFxR3g2VXRmbXB1K2pUCitOVEMwdVQwb3FkV002OENuZ3JJSjlKalpxZTJzdkdSRzUxS2tFU3VtNXphM0ZZb3dLbk5Lc1dibXdwYkVRQ1ZxbHBTSlhyZTFOUlcKQkpxL3FhblZBdnVBcHNLTFl0YzBKODlRL2NTZWZoY3lsYUtEVVRZeEZhUU9mRGdHcHVJT1FFbDU4MUpoZTFiZnVGVGdGNmZFTjZTbApGcVkrMGd1V0dpaVZZS1VXbGwvblFLWGl6NHlydWtpcHVCdVBoRU1FcFJhOGVpS1pNTUZmV0psZlhwaFVWUDJ3N2t1RkZTVnIrZ2hJCkttcUt5SFc5R0ttc0FjaHRJMUpGdmxxYmtJbzhaUjh2UG1ydUtySU1QQ3IrQmpRazZLajQrNm5yQlVmTnlJTTg3YkJSUVJaU2grbkIKcHJDVkgvcE5SaVVnM1RhQVVTSGdRSTR2d0toNFdiTUFwNXVMMm9BMmVnNFdGWE1qbk1LZ29pSSs5SWlsdXFHb2l6WGo2VEJSS3lzdQpEeElWNDVaZW8wTkViY0xkYkNKcThwUnBJQ3BlaFpwZU9GUzhRWEEzZ29ZSzNTVFNGMEZEeGF6SXk3MWdxS0FrUVA4UUxGUUVFSldpCnhFU0RMSHNlbjBpb1VNKzBBMExGbWwwL1F2SUxXMitXL01hZ2ZyeFlnRTFzQ3FvRm94dUNDbDF2TFc4R0tzSVBwUjRFS3FhT2NnQ28KeUhDbS91YWZJdnE4NXNHZjRsVmwyd0RUVHo4bS9xcUt5QU0vTFhKZWduMmFQVE1IK3BSbHZYaUxMdklweEJWOWJPNHBGaEFrNFFYMgpGS1ZBVC9wRVBRVUF2bTdvS1JKbGoxd3FESjFjdWxBdGV6RlBKVlZnWTNaSlloRkRkS3RsS1VjZWxycktvZHpRVTBUVFJZczI5UlFHCm9lRU41L25pNTM1UEp4ckQ1dkQ2TktDblVBVkFjUlhNMDBBbkJmSVV1YXNwU3VrbW5tSWxEaGxrQUU5UjhneWhTUEJPU1J5bzY0VTcKeFNnRVg4RzAwMlpTWThCTzhmZVlMOVJwYzRZN1NLZklEaUx1SHFCVDBrTWc0NzA0cDYySk5oS0JZaUNTNEcwRXdCVEFEK2VuTnVWMApwcDBCcFEyTFpkNEJWUzBDVFlQVitJMDRoUTAzTWdpbnk1aDlBMDVCaHRTL2Jyd3BJdG1ZOVlKdWlpb1lCcmE4RFJKbnlDemRiTk01CjFkWXowS1lCOWd4bTZaaEtWOXhnVTRUWDRGK0VyVThKUVFOckduL2ZWTk93QmRSMGVIWU5YT25vV2tUZVRGTW9MSXZrVzdUTnBOQnEKRUUzMzN4ZlFOR3pCTXlXRGRkV05NeDFHS053MFUwaE1TVEl4ekJSQU13UjZBMlpLd0ZrZUw1YnBjQy9hUUprT2ExMENYSXBYdStUeApBcGtDQm1yOEtZVmUwelR2d0poQzZSYlV6cUNZSXI1V0ZDOWtMSUovbDBNeFpSd3h2UmltMDVDWlFKaE90OW9KZ3FrYjI5NzhVc1lzCld3MThLWE9jSWlkeHJsTU90Tjd3MHFEMkJMdDBUamVEQ1hUcDlNZjNJcGRPWmlPbDMzSlJFa3RjQWx5S3Y3UEN4WnRiU2x1YUcxc0sKMWl0RUMwRXRSWDBLZkxBYldycE94ekJXZGhFRk8xSXdTMW5sa1YvRVV1Q0JFQVVLWUNuZU9lbm16U3VOMXI4dlhPa01BR1BRU2xlcwpWZ0pXeXJLck50K3NVcE5vTjZrVTU3UDY0WlNpNklTVmVEZW1GR0ZCb3Fvejc1UEtFZ0pTdW85d0lVcG41QkJOS0oxT3NRU1BORDd0Cm0wOEsyYVBvcDhLVHpxUWJ0N0dqbzVwQWR0TkplNkJDdzRoTUMvR2JacE5TUFR6ckcwMDYzSlI2azBuSnhlamxnRW5IYytwUFE5bzcKbmxPQktyVGE0ODRlUVNYOU1LZ3U4NGFTZGtkN041TzBQMUU0NmJMYmJiaUlwTWNtSUdrM29HVURNVWRXZWMrTFIwckpTdjIyYWFRbwpLd21NRzUySzZ1cW5GNHUwcnFnTU5vcVUrdlFlSFpla0xJOFdUenRuaU94T0tvb0E2dGd6eUh1bWFsUW52bDhRMG1hOXdHYVFJcW5WCjJpYVFqcURnM2dCUzVBOGhJdy8rS0ZkRDNnaTFvU1FnbW9vV0tncVVBeFdEN2xoZVc3TlVUSnM5V3JONldyelFveFdMNndDWjRrYkQKb0pwb2swZXI1WHczZUJRTjczVFdUclpGcmlld281K2RreCsvbytQelg2bWpmeXQxbFAyWEtETEFTUG94eGtveVc1cTcwNUpxMTVQYgpNaTF0eDFjVUt3bkd5MmtJU1RDMFdYTzZ1enNodWs4Y2YycDFCYXl1RUwycmEwbW90VWh5ZVJqY2hxYldJOUs2Y3c3RDRJMzFYc1kvCnNhajBPYlFBZ1psQm84TnlDQlpxdk1TeWZvUUxVS3VxUlYrem5UMGZKR3lKQ2NmS2hDdEtrOHZUbUxJSTU3d2M1SXVyYkducVRDWlkKT3FRTVkvV1IrRTVqVklFT2lyd3UxT0xDSjlUeTBXMEZNZ3RiY1JjSUJ4NXErNnppelpiazZLQ1Q3V2x5ZjZ4WmdaelVYRUlKQyt2ZgptV2tsTkF1V2tzNmVoTWpSMnJwSXcrNWJnVFVwTGhnV3lqZ1JnWjRCNW0vdUtjMG1yMWoyc20zNzR0bGlQYzlBKzZOUmt3MWxJLy9lCnEvS3BiQTNIeW5rV01pVjEwUDJZaXh2YmhaUEppSDV5VWJ6RUh1T2RDMGpNSXl4cnFPSTNveXN4V2FQc3YwUGxPMUErc1ZCU201NXEKNjNCL0hTWmRZRUhva245WC9WMERza2pqVkVQdHhsWTUzYzIxWU9rdEd2NGdza3hMTDZjNXZBQnRrTkJTUzRWSHJqWk1qemlncVR1dgpyajBqSjhibFJkSjJEenRoUUJHYjJTRWJqZGZaamFvcjE0NlhvRTVEcGRCemdEQlVQaWFFcnRGMVFDZzFURC9FRjB5WGpPRVc4bkVyCndXQXhLRytzV2xRTlIwb1JqK1czT3YwcDBaTGliT0gxZVQ5a1B2QTNpMUo0ZkZiL3c0SUJIcFlVMkFCOHQ2eW14aFAzOGJzS3kvQlcKRkR3QlVOV25wTXpqa29wdzlRUDFORHNRNC9OU25XNm1wUzUyVkhaZktIdzJZM3F5aHBXQ0RWcEI5S05sOEJjNmtWVTB3S25PcktqWQpUUWNmbFVMRFNnaFRWaEcvRHNXd1gzN2M0MUtXcVBSZUx2Q0VWZG80RWsxTjExZUpPQzRJdXEwc1dZN2pGVS9Jb0hFODlZOUVySVF0CkJ6QXFaM1dsWm5OME1OMzNyYVVWekZGWSticnd2V0dPRGt2bXhaYmRybC9rTm8rakVHeUR6VzZPUTJFb2JpZTBQMzRoOFkxcmtqNm0KTWM4b3dnN09LSDVtM3djR0RPazdJRjZCcDFNNStBM0RWVUFMd09pZzZ5ekV1ckg3QW1vM3NLTTJtNGJBOGJIeU8xZ3FRTkV6V2RKdwpKUzU0a2p0U2t4Y0R6WVArbHRBTmY2ZTRPNCsxdG9tUVhlOG56RW5zNTZyNmZlU2YvVHdvZXVBM2hlZTdXMEhnUk9uM0xFdUQwMXpDCkxPa0NrMzhReTFzeW5BQ0hXQVF6c25URmJ4RllFSURuODV1UG4rUlhpUVp5S3o5Ky96anRRU2YySkwzZ090YkFnT09xV0xiWEpFb0kKVnVUOThKdHFQem1ZeVM2MHlNZWs1bXpGbnRuNERDaXgyR05zRllQNndheGxiNjVaQWl5WmxLelV1T1V1SEhqSmxLeGpzZDNRUUZjUQprTU00cithZ3JWOGpIcXhVUERaeXUvRzN6Z0h6Q2ZrbzNkSmZXa3BNMGFoZDVMcUdWaVRadXh1NzhVZ01FWEllaVY4c2dXM29XY215ClJKK1pYNFpieTdFbkMxWW1pQlFoVm9XM2xZaGlEajZqUzYzTzdpWHNGMENRYnRORC96alM0ay9xdlVQTUFQSVR6ZTNEYnhVNTZ1d0UKRVBYbncwTXhCRnNmbzZnZkwyWjcrUk5ZZWFCYWFEaU1DOHZIeUsvVEp6dUZmZDlXMThNa1FTSThrVFdUbnpuK0E0YkhiOEhIRGEyeQpKTDdzaGVITi9aTStISlE5dVBIVnhCMkFxNXZQbnFWaWliRXRYeVFFK1hwN2t1RWIxV0p3M2d6a1ErZ3Jza2RORlNMNTUzQXB1U3lCCmxYVXNzS1FzSi9OaitIQXowSmN6R2lGUVNYbnBWbVMxdENMRDcxY2JwUlNCZGVJbEl6QXhhMG1kcUdQdDdvS2QyRmYzOGxMVWh4ZFcKUWdwZ1lXMHNjQlYweG1DaDMxc0VkZk9lVFJoNnJaeVRlakdKRmZTeHRsNjl5STl3NXhOYjVGS0Jvekx6dFIxQ3FIeC9TelhkS3JvWgpraS9RUnJpT3pRMW9VWUgxdUxWRkk1bWNQYit5bTFSQmRRUkYyZWhSM2djVkpGOU02TXo0aEhxZ2FtNExrV0RhTStadzBocTdGR29mCkE1dXVxaWg4Z2ZOZmNyTVlxOFQ1TS8vMXN4M2RRc3dUeVBsdG1IREFxYWVaNDNsWnB0Qnc0U0lUVllHUGgxck5GZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJSFp1eFpxNXNwVmhVMVVIV3hneVZXSGRiRWpUaVh1eWloZi9BODRXRlZLL3Vya25jTWI0aDF0dXcvV0ZSTW9lV0lzUGlDOWRkK3FlTwpyZEVqcXdWMmkzMDBLT0lNTGo4Ri9sa3RUeGRIMHVHYzZoNmROS25YakdFQmYydENRc3FTelRxenlXV0RKSys2OTlQNWt4eis2UGg5Ckx2ZDhtZXJYU1lrcUxXMnZBWVpmT3haT1BSS29VUkNNampVMVY0MU42cW5kbldENjBhc0hpa2YxYmxVMUYyR3hPQnVwY0R4a3Q4MGwKcWVmVGg1MVZKREFmdDA1YkpEaHgzWlRWSldlaHowSmliaTFwTXVvdEpJTE12dUpMUnNkVVlpaVE3R1MzbnlPMURDb1RaTWhyQzlXbQpwVW1UMGZDa0pyL1R6VllaYU9HZUxESkdKSHQvSkRYRkkraGUyWkJ1eW04RDhWZXNRR3YyUGVzSVBBVUFwamkwdzVtNDlQaVFOVVl5CkJ3VjlGVlhNMjZMc1UxWHEvbXlIVlJWblFjQjA2cU1JbHQ2ZmZybXJGb045M08vbFR3bFJKRG9TVkZlU0cwVGRwK2dzOFRrajFjUkEKR1FBcUkzaHUxVEFXSnY5SUhFcTVCM2FsN0QybHZpTzBoUUhrYWRZMFhxUktQQXZZY0VzV092emEwOTRmbENqNWNRa29heS9BTzhpcwpIWEVkSkY0THJoWjVYeW5oS21yRFU1S09UMEtBVy84bzJNZ3laYm9IZTRoRldESjhobWF3SHFzRDZEUGszSUtLMXo3NURGUnFWSGtwCm81cTdwMGdqa2J2VGJaZndqVFRyb3JSajk2QklLY0RrODFZamVNclVlUTdiZ2dhZU1mUWM2L1NpRlZGWGptS0E4M1BhaGw1U0hxRXQKZXRIRFp6dmJlWFZGcHdsNTY4dENXWWwzREdOcm9oWVRpOGNmd0tmT0JlOStYVUVxZ1JPaEo0bGdQRTZXZlhTYk9EdWRrdGhzaU5GagpVajd2Vjl2bDd5eHMwejJMZU92eTN4UjFQY1JJVGxucXhzWGdzVlU5Sk5KZWhlTnBlclJVRmRCU3U1Mi9QZHFCOUVWbm14TDJxU29CCjl3VmJwb0VpZmxVTVRFbzFlcmdoRjA2cUc5UmsrckttdXBnVUxoMVlJc0VoREVUYkhXTEI5MGdmaEtGTkJsWWgrb1lRbUJiditlRVYKNlFkempjYXNXSnB3dUs2VVpJcWpCRkFMREE4bGNOaVJzU1d5UnZaM0JjZ1JoZkpKcEdrMk1lMTJyTkxqdVA2Z3l3dE1TeXc2S0NrZQpmai9zSWliN3FSRDBONDU5MlpNNkFrTWw2dHNRTnFha0dwMXZOUElqUU0zN0NrYm5sRitnR0RGSkJWdk1qcWlQUExLVzdJcm9FZUh0Cm0wa3V5KzdVbGtmb2dHRWQxVDRmVy9JV3Z6MTBBaC81TUlyYXdZSm5wdkg4OFRCRDRWT1ZBSnoxRFA0RUN1ZWowZTFIOUQzd2JDdXAKQlJTUkluYlFteitWNWp0V0l0VXpJc2dDZ2c3Zk1sZ2Z0MWNYdTRvNnlhVEhwU1VUOGZreHZ0WUlmN0p1R29NY0FXbGRGczNzTEpzZwpNZlRxOGNOWG5EY0dEenMxa2NONm9lb1lpd2l2SGZwangza0ZOQTdOeFpScUFacHRhSGgwbjU4cUxTbm11WjNzb0NWV1pidkptcmZiCnFaUEJzUE5sZ1pSdjlmQW50eFh4WVhvK3cwZ1hWQUx5WmZ6czVNY2FJS05PdXFJNkhzSTh2Sk5xa1lYTUUzdXhkd1hBY2hERU1xWUgKek50WjMrRGlOcHlpdVd5dnhybmxZaGxJeGdjMmliMW9lazAvdmdINUFMbk1IZDJFc1l1T2dmRUluUkdnT0N2a2xLaldFb2FLQkJBTgoxWmNQSzdYb3J4M0pRT1B4ay83T1ZLM0FiUWs5TFE3UDhuYktEeEZPd051OUdETEtVZ0hqSXVCOEkwekttWVNYQ0NqVzRHYndhSGxCCkpnaGxLcGJ3azhVdHgza0sxUnBKV0lWZzRBVWdwZ0ZHTHRzWUY0UHRZRUVyRlJwMmp5K29wL0NPOFhEb1ZseTYwcENaZmhmQ3FMQ2cKSm9BWDJhd1M0Uzh5WUY2YXBnVnN4KzVVT2xmOGI1WG1FQmZMd0pGMmRHa2JubmRMRkc3QzI2WHFjMEJOakFmZkFqR3dSSXptbmtSUgo4NUtTWHNlY3ExQUtrQXFpYzFCV0tsY1h1V08vZkxORUkxaEtSZkRKTEQ3QlIrNTBSajBFdys0WUk2dFQrckFxbGd3ckF0eXdLSTZNClBpc1FLTUhBakFBSGo1WDJqblFxYzNWREVCNEtDMGRZV0hqSW4wekxCc3V2TWpXcE9NV2FsTFptSkozQmZyNWtET1VPVlVqalRyTUIKV29UODlvYzBFTDVRbkE3Z2FDTERHWjBxVWl6RE1sWWc5b3ZEMUNpN2U1Z3VLQ0xsY1RNK3kwZmR6bUhvdWU3OUdHWnZpdVp4RzRiRgpRYUJRWUsxWWgwc21SV0RTbncyUUtPcFRvRGp4MGxpeEVFNWlGSnJ2SlI3eHNKd1BjZWNlMlFVQ1J0bHFHR0UwaEZSYlJwd0kzYTE0CnFvUWVSOStCSkJJampSQkZzdjB0c1VPd2NPS0dHSWowSXZqS0pWakswQU5CazVIcGU3UGRzUjB3V056cElQa0ZoaCsvRzBJUlJjSkcKNGxuTHJDeTI3VkNxcUxEeGVKY0tLTWRJek12RXhSTXNBdnhQemRwVGl1WEhEaEVicWo1WnFSM0dEM2UwY0E3RlRCbDlWSjlYcDRBNgovSEgxb3NXckNjOXVmOCt3RHNic3B3cGxlU3dGdkRGZ1JKUGFvUjF6dkR4cys3QVl2YVNQd2J0U0krZUVjWVl2Q0hsRmVFYVBWUjg1CkcyekdwQk5DV3JnSEJLNDgwSWJ4WVQwZThnRlZXVEhXb1lzZEk5K1BPYlE1dVZVUis4NFc3VWdTR2U5U01rT0tWbkxVY1dXTG1aUEgKc0xYSFJMYk1ibmhqMkpMUHA4VysyTHhMT1MzblYzUU9VMW1yWXNUTkE1R0UyenZoNVJKSEdpVmovQ1NReldJT2ZpNlA4Ymc5YkNSSwp2bkowNHNXSGx0ek5PV01TOUxjb0MyV1UvRjRyazBOUTBVVjdBSkMxdEU1MUVVT204cmRvTzdZZjRUYU1mS0I3NHc3RlEwQU90M2hGCmJ4VW9ZUmlhVzQ3bFlPanRqOFlETmliUW80U3NudTJ5bThCUm1WRHU0ZWd0SjdyaS9CVi9jU2R5aWpHcUNtRmpkQ3pSWWhZV3FBZGgKVVIzWExLZTZFMVo1SWxQcW1FeXR0cnRvNzU4a0NZUXRzM3ZNemhCc2N4VktPU0xlVC9oYlU0K2NpNGlNU0ZIbU5VSStxOTNRTFlkOQprNk1iSnZnZk5YdllhM2hMWVdtUHR1bWhrSmQxNnBheDB3RVBOYm9zSE9Qd2U2M29GOWY1eFNyQkp4SlRLK0c5UmNpSEl4UUtDZVVmCmRIVld4TGx6RzdsS1U1Ri9waFRnem1RU0NKMEVvdTlFTnNqU2dKSWlrZ1ByTEYzakRRdW1ZRm5QZEhLUGVUVnNzNW9ubDNoekNJU0IKLzRFRkYyY2FOc2h5VnJCandRWkw3MDVQVTZtc1BhMnZoSlZkVzNCTkpIbHh4S3FrbUdVVjR5dHA1N3dqSEVLaG5xQ201aVNGT0FsOQpJNHdreUdaa1JIN2EwR1RROCs0ZkJrMmlqV3JNeXZTK3BscjJ4WUNoTVUrN2JnMCtlcElOcGFRWmdlYVJHcWVwUjRzNC9tS21LMEk0CmdYK3hHZnlBbkNHckUra1NLczN2WmltWkRhbTZoMWVFVXVVVEdzeUNTWUVMSTdvc0hLblo1NGJ1TWpsYStNVU5mczRoNDhYQVZCQUwKd1Z1MkhuaEx1U2pmblJtWXhidU04aHZYdE1EWUpoNFRmRlZVUFdRR1psSFh3ODFzR1J3R0VBc3FWb2RsYWlpeXRtdDh5MGhnbXJKOApMQi8xays5VndWNHZZTEN2ZTJuOThTcHp2WUFxcCtxVzB1d1pCd3R4VTRqcXkrbER6cDFwbTY2S1FBM1p5UTA5Ui9lY2tGaU5oTDlaCmJBMERwek51TWNiYSt6MXdZbWh0bm9XV3MvNE1CTkNnMUYwL2F4N3NTQ0VDdzkycktYR3FoQVdiZURGZC9RaThVVjJiSXFkbVNuYkkKc0hwU0lwcjEzVWpjVVVjSkIyT244ZzUrSExKWlpadGp1MUhqM3FDTkR1SWh3eFF6Q2o5cXhGMWg1YjFHSVZqMmR1SVFFeVR6eU5JaQpGTGpkZmxnNTFhb0JkeDZSQkx1Mll5NkxHYmorNkVscXoyYWlDTVRuakdBSE1CYmhOQVhGZ0tYa2ZCTVdPVkpGenMvWmJqV0RUcUQrCjREUGNGc0JyVXNEWWp2VnhGNW5sK1ozMTVUeHQ4Qks0YUE2TDdtMVJvUDVzbHQzWG9FWnQ0N1l3Y2g3NGdHT3RiSStjU1BqMW1RMDIKdVovVEFkUTJUNHBZZVU1S2pOdzZBQloyRzJDZVFpazZrdzhSU1Q0Um9obmRjeEZmN3Q2T2ZSZGhZYU1mNXU1WERrdEUwV2Mxb2FZdApkZXBoQmh3dUFLb0IwYXdJZVFuQzh4Q0VacDZHMFFpa1FoZzJhaEdjZ1dYNlpGbUx4WHcrRXpWcVUrNjNZT2xieFlOREp6am1MeGtLCmgyd0hFMUhhL1hsUkN4Zk9XMkliWHpjOVY5SVZWQSttSDBuMktqcFhkWlhBc1dwQWxJWmNGbWFveVBKbkRoVWhwdExsYU9LcStZbVQKZStncmJGSklJeUNWOVh1UGtCL01QZkEvWUZGb0ZHOUxqay9rTWJFWERHd0lFN2dkRmR1YW9CUXVwcm9WaG5MdHFBdzNyQWdOa1ZMYwpSRkNmVlBQQXdrWXg2RDEwOHB2ZGpaQnJjUWlNRFphVFV4bFVIdTBHeCtnTGtnTzlQY3dwaGRYYmVSRkh5MHdLWkdmSmx3RjlDR0pPCkVKUnBaVFlOb1cwT0dMQ3dtcnN2QTRvU0tRMDdxTFJFUEsvUzd0QlNvc0tmYit0OXFIUnViQ1NBNGJhanlEZU55SUhSeVVqM0NCSVcKWGlhVFRtN1RrclNka1JrQ2ZDSWNpV29TRGlWaDBRaGlrTzdaYmczWHhaS3loYk9BVW1adFlsVGJnNVp4K1VXWlJGckVUY0IvUE5Jcwo2Q285dGNlT1JCR0pFYy9sWlltZU10bEphTWoxT2Rkd214aXowTUtBeXdFK2twRzlhbWRmbWNubC9qR0FEQnNkeEMvcnN1cVRqVWZtCmNKaTNhQW9hRWI5OXVtdlNNS0dKTklFUTNHaGVvSEs4S0tHSVNSdGIwQlc1akNXVk8rdzR5QWVMRVFodTRBcUxVcjNZcGg1TkZEbHAKUEJ3ZEoxaThIeWNXR2pneVpKRE12TnR1UHpRaU9sTEVVbVAwSE9velNjRndBMW1DNnA1UnVFWTFla0orSHplYnkwSGVhTWFCNGRiawpwSzRLdUYzRmJidHA1SVd6VXIzSys2UGdqUllzOWFnaG8wNUxFZmF5OTFTdGRkRWJSUU5IVjhUVEtUWExGbzlTRTFCYi9PVGpma1QxCmlRNXZ6c3NoVlBsSXpQZDJzMzc4NGI4bzVKZUJTREtYMlk3VVFBaGFsYTN0RnBVeFBKbVM1VHJGb2NoNS9vNGxxb1JVa0o0K1hkRVYKSHg5cTRhYm9sZDRRc0YreXV5YlRzU3RURXRnUEIxM0JMUzJVZTlieU9STXgwT1dMblRod1VhMFAwNFdMN0laSU5iY2RJNjEyYnRvcgpSbG9WaXFMV2lKMEI4UU1VUjZBSUZ4bTNYS0xNSHBiK25GQ25SSDJzVGs1eWUxa2pnVkwyeG9XbytsTlRackgyUllaenpNNjVqQm9rCnIvM0JKK0Nna04wTU9yR3dPODM5NXRnNk5TWFJ3b3dERkN5c0w4K1A5WFRVdEpTeDkxUVpSSEVraXVKY050b2dmWGhLbktzUmhzWGwKTTF6bUZhcVRwTStHWWtZQytWRGhrSmZjZHE3OXNNME1SVVptdlFKY1pFWnJzY0lOWUJ0MTRrd3NQTTMxTW5nTU94WU1KWjRTVXRrTApDcXlKdXhOWittUWVGUTFLVnRSUDFJbWpONHlOTDk3ajdHbnhhTUZ0T0lJUnNUMVBoTXo5eGg2cllaT2p5a3dXeithZjVJQU95NGhWCkk4T2lReWZDSUNoamFvZzAwdEladVJyR1EzRFBHTkNoeWw4Nk5SWVN3eFBtb2hvM1EwS2cxYUpkbW52YWNLWkVhU0hiaDVYb05JTlcKOGl6UEttNktxMm9CU3JqeUNUMG1Ncnk2MnFwMXlyaEk5U3lhQ3RnN01ybHFqb2FZMVhkTldISDRoUUt6NnNZdWxBVW5JYXYwMEhqegpZMDhsMzFrYVFORklFNm8zTVc5U05hdUxqZ0VKa1NWTDB5MXdhckppSENwY3d1U1JuS1dxZkRqVWlhK0dLdGhZL0R5TTFMRkxBcGVPCmpxWENvbmx5Wkl0WE1Wdms4TkJnNVR6SkZ1aGVjRW1GV21zNE01SEVoV1VuRE1ld3M0ck1ZYlpJbGUxUmtPZXM1RkNoOW5GWUV2VEUKazRUb2pUbEsvQ1JYQlZnRThYTnJydnpuZjhpVHpScFYrSk93TnNzVWxRVkZxcEZCT2NwaG5kSlg3emxZU25RSWc0YURRd2JGaTltNgpUenFZbE14YU5LQzFDU1d6b2N2R2VnTWNVNnllS2ZtakNEQS8xZ3F3S0dIVUVJYVlES1Bybkc1MmlQVVYxekRxU0Y4NXJnOXEwaURFCklwWnBwR3YxMDQzeEJMS051blVZbGd4U0krRmtPSGlpQmlESGUwYytMQVRSc0xZbW9acmFzOTE3c2hlV0RyNWxydUpnSjViQWNZWHYKdFFrenQxU05ERS9yNmxrUnk2M2tYNlMra1F0M3R3Q2hINDRwaU9FUUNzU0dQdm1mL1JMb282UmNIT2ZUWTlLalhCejVhYXdldXZWdApKNVBmdTVvTkRvY3FPRkZUemJIVnNiQU02OXBUdUNCY0xpZ3FnVEd0NkxmbEpFSjIzTGplbXBEdVJkNDVIRjh2RFlmRHJoalNKYmFZClRhcGFDclc1MG9XR1BUekp4MDNnWWVUS25Ma0luZ0paV0k4VTNzenR5TEw5M21qUGhPWUFqSzA5VGxWd08rWWdPQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaS9nblNRQ0trWm41Vmk2UG1mYUliRWxpU0xDcUVtck5KdWtPYjRRRzJPNENVc2hCV1F6d1JNUExuaFMvNHh6RjE2N1BMUUNBMDZrMwpxdS9FQVVJd0krVEVEc2VwUWVXWW11eC9kcVpGbGFYRFNrRzRGK3dRejZjclB4UzA3NmFIbFVPakNhdXF4c1owTVFDaWlhd0x4Uyt3CnBUQmhEejc2anJ4Y3gydnFlc3hRNGRQMERaSW5oZWsvSzNLMEpPQlNNaUZxS0dDbG84NWMrWlIrZlRJa3g0YXl5ZUtwWGZNQUQ1S2kKV0dqTStRc2xKc2Z1TU1WWGJ6VGlqOThQWVV6bnBEQU12UlMzK2RYV3FVS2ZGUjdjMFBLWWxsNGRuaWYvQ0h1R3NvcHhSS2EzOHVOVwp6K3h4dVJ4MmJxN3VvUGZNNnFtMjYyUzY5SnA2NE15a0RSY3FaZDVDaDBHYmt6MjB5R2xCZVZ2dTkzYkdJTE1BVEF1N25lbERBN0FWCkxpaW9aYzJPZVNGOHBJcDZ4WlVnNWdvRlo1M3lZOGY3SGJKOXVnTGIxTFR6M0FhOTN4SEIyT1NHQmU4OUg2YzBrM1ZOdExCUkJYTGwKcXJsSnJnZEs3RHU4RjVNdW1SdFNrUE5mMVduaFVRaDFXMWcrYUxVc2RoUW9FWmt4cmwrU2RVMU1reTQvemFFNm9xSElVenhOTHExWgpSRld6OGh4ODZEQTBQMTZWd21ISDJkUGVrVDNuYUUxT2tFaUQ4UURqclY5VXc1M0graVZkWkRGSEVDNmZMckk0cERNalVvOEJqU015CnhwSlF6bEFWOThqWWxYSmRNYTBSM0NVRGk0Tmd5UDNzS0lBaUFzMTYxNWNiRWNMQ0pRRUNOTjErejU0aHViVFduRkk5eXFXaDlrYUkKVmVra01KSlFlamJkSy96SFdHMTNWYVFtcHMyeU93MGhXakpSVTZKRXRGVURDeVVNc2FNSzVORUJpYm1yN0s2dmlUUjhOcW9vSG9JUQp1TnU1Z2hJNmMxZzVqRUpVejVET2VQeHdtZFZSZEt6V1VFN0F5UEFjNWtoOEVEQU1COUVZU2VTUjZJaWpvSCsvNk9XSisxKzlQc3BSClBndFZNbUtMMU16d2hxRVU5ekZNRktJUVJXTTU1Q2NOamc3d0w1VnZJSk9rR0U5WWxFbWlTUExhREZtZG5wUjNVQjRkM2s1MmRmSDIKa3pLWjE1alJrYjVBK0JLSG1tUG9UZFJVM1F5WlNHd2VFSmVKa2dxdXcxZDh2V0NnNlNNY0ZnZWdydysxMEtzckhCdDdLcUtOK25wTwpwckFRcW9HMmdpdnJXSHBuWVhsbS9DYjhTTlpYWWQyTEgxaEtjc0hocHUrRS9LdjRIS01yOWNRN3kzS0NLVjM0aDB1c1BLUmFxUU5jCkFibGh4dUtiMVNYd0swWUVNMUN3RUlWcVRCRkRuSzR6cXlwSW9JV2hKcm9mTWRQVklqb3RyRXlNY2pQZWpLb1VBSSt0QWFvcVVLSWQKbXhzb1l5d2puQS95UTZZL1FOMUFubXdiNWxDb1NUdHVhM2Jnb2thUkRuZzdVTFRtbW81QWZwY3VRYlVrNzI5dlYyS1ZOc25CcUxjRgpWY214L04zVzFaVHR5T3hQU0tIQlVpWDNmbVdaV2lzdDB0RlZIV1NoMTVCc3JyT3V2bk84VnBWaHAzYXE2Z2FGSnBUWnorSkhvaytmCkxXSHNBRDdhYjR5bVI3bUxrL2hOektFbndnZ3pMS3MydVp5WlVoeFlxUDJFOTdwSFBCUnEwTGZ0SVVjWUNuTXpZOG1BQk55ZHpNeXcKOHdBLytpVmdFeG5OcGtsU3lnZThIR1pFK1huaEV3eEp3bDVzd1RxclZSeXFSbFRzTE1sQ1Z4dExuNUZETXJhSnBIRHJwby9IckRJcwphMGtHd1NrZEJvNzRWUm54dUVncGg1YVZtc3hvNE1HZzhEWDdFMUY5TGFLK3NZQ2h1cEFlRERJQjFJcEIvcG5zNVM5MGc4ZWd5SmtkCmJ3VTlFdzE0SzdvekRZOEVKVGtKRHdJK2xVbUlXSFVKQWVwMnQ0b2JrTUhhOU1JcVF5dTlRSkc2a0hrSENRYnkyRHRLVFFSL1RtTE4KcWFVNi9UbGVaWEYxRkxlSnB1SDBjQkd2MFdSSHQwdk53bkRaTExhaitKRktNYm9OTWZac2E3S3FocnFoVW4xcWZKTFV5OHAxM3lMLwpUTG51SEphYWNzSnhPcHdoVm82NXJMNmpMckFlbWdLdGZFNVE1bUdsZ1B1L0VDR0NSWW92Uk1Rb21zdFhUU0Yxbml4K0p5ODM2Wjg1CnFtQU9ubHFIWk9VOEtZekZpamltYUxFVEVQYmlSWDA0WlZ6MElVZzhxVXVCakl3WEhwWWQ3bnZXWmFWU1JrclhJa0xCc2VTcE1LMzIKM05idVNtdW9idEtRZGtIdjRoZFAvM3V1SmxoNUlWalIxSHZOQWtwMnFXbWlRQXZOQUI1ZW94bzlPNzBJdlRZVkN0Z214ZEl6dTRFdApXeUJBOUlVNkM5VVdwQmFsTnQzdVJQSUV3YVU1RWNGdWQ2ejZWb3JhMVVVT21nVW1ZN2dLVERmdEF4a1prcy9QZmtNOUNQYnhaWG5VClcyNkhodm1MU2c4bExiQVJucVdtajcxcmxndFpsMG9TR0JQa05TSS93bXc3TmYyUGFralY0M2tvQ293SUtNVjg2dFFjTld6VkJjZzgKLzZ5S0U0SjYxQlN2RkVOVmtCS09wcy9hc3ptSmw1MkZMaTBTZUJ0bzB0aTFtVmM0UWxpS1gyUmxGbjZIMjBpc2RzNXpXb21DTC9uWgo4UC9IM2gxRU5ta3FYRWlPQldwVVZidFp1d1VZSU1qdmVxbEtNa3ZsOFZSd2dsWmdoV3ozSnY0azJ6Z3dLZ2xXMHpnMUMwcVVwV1J5CkFDcEx1ak94OU1rWlMyVVNJQkFpMmpNME1iRFdvUWlyUXRycFVkeVEyL0F0aHdBc25mSSsrYVpJSnpMU2loOWdIQVlXNGxOcU1sME0KSzRtZHNBWFNwamdsckZRdnlwMVMzUDdxWHQybVJJM2pqU2wxNDg4SVNGT0hEY203YWk2SlJMY21jYkxhVWQremZKUytlbzY0WHArbQp6TU5DTVFjc1BOdmNGQ21PUFlXeHg5SWtNdmNLMU9jV1BKTXA4Z3E3b0tRUWZTQ3lwMmM4Z3RDU25YbEZVUm9CT1UzVEd6OVdKQXNVCkw2MzZIdkE5alNnOVoyQVB5U21GL0I5LzdoRGE3MWdpcWp1VnZFeVNKMEFyUXRvT0cvQlpQTUo2eUhKWGtVQmNRYmtMa2FwWnRaM3EKVXg5d1hPN0pkN2d3U2hSUmMrUXF1bXFvWGIxYzFPazRFYnY3cUNxWkRXVlNET2MvK2xtcTlBa2ZrZGdIMFJ1cE9nUk1rUUhEM0RXZgo1Ym5pcWN5UFp1VmNwSDl3VG9vcFdnazF1akxIZFgvUXNMSWJBR0ZjVmIrZ01xRWFnZWhoRGdvdDUvMUpEazhEQ0V6Nndha3B6MXJECnFXZ1hqN2s0cjhEclpHMGZia045RkdaalF3d21TRkg2bjF3cnJtRWY5YnoxNXU4OEtxb2lYZ0dTR1FaOHExZU4zSVFhWHNwSm84ME0KNDlKREdqWnEwM2w4MW53QlVrQU5DYXJPVzdGaGR3Vng0UXFzS1ZWZEpCMHRmclBETmMwZlRremxqYUJpVGc4ek95M1Bpc2NpL3BFKwp6QjdzQm9oRytYSjJGTkh0WWFSN2RZbTZwY1NuM3kzaVlTVlQxWDFTZmd0N3JxRGdicDRWcktyd0NvcEVkNEtSRmtaUitsQVVSWHVpCjBSVGpsNCs3QWxSM0lHVC9FR3BJYXBCS1VOU0VsWUFlWnJTd2FLNW40bmFjOHhCVWRxa3lQL0Urcm53RThwdGNKOEU2dTc5a0JqcHcKcnF5bTQ3ZHRsa2VMS0IrczlHaG9aU0Y3cVk3dm9yR1JmdEZLd1NFWjZjK2VaYldjSlVUajhXeWsxMjVhMVlONEdBZThhdndJOTBRcwpTdFdSdy9LaXBNb1MzamQxVlFzMVNuVThMSFpVdjVLbzVKUkFxY25pV21WMENtUWViK2lyMTU3RFlBeUlwZkhDUXNiS1lRcXZ4Mk92CjU0bFhuYUpkK1V2bFQ2TE1NaTIycFhyc0FOUVM1ZGZkMm4xa3B5TXV4TTRiak9qRFNnUUNZcVkyS05tWDNER1k4OXF6TDdJTGo4OXAKa3RlR1EwMlZGeks3UXpsSFNyWkVxVWxPbG9XaEtHbWs0dm1rdWdpZVpLNGN4WHlSU0F5ZlVOd2gxbjh0MVcwWHVrY3M0OUtFSzJFOQoxazk3NXNJMERKNnJLa0xiOE1UOERGZUUxaHBUdGNrZTdhcStWUk1FTGt5bXBtcTkrRmhKa0QzMWhDUk1hNHQ5bFhMYzBKRWk1ZUk1CmJBbkdvV1FXT1FORkEreDBmWUtBRzdpYlpKVDdGQWZIYXFpWmhCRnRxcDVpWm4zUHNxd3p5aUtIS0lrS09WZHpmeWRtNEZrdnpkcGgKT0tiYlQwT1lkM28ycGpxZDdueFhHVHpkRlJvbzI0Tmw2NzlDMThIeXVFZFYya3FINTRDc2ZWa1lmTmRsaCtTYVh1TVAxVzB5Q2NzMwpEUEkwbmtTdzhaQ2RNelR1Q1pWeUZabERFOFpqWHhFaHk4ZlNZWUZYMlJ1cnFPSmQweUlzbXlzQlZBbGRJVmdEZTZMMk9qaldNdjdOCldjbDZWbUQ0QlFrc0VNT3EwaHlyMUJmdG9vY3p1cUtub1VWaWlJU1l0dTNHRTlLalE5TXpqcmpvcWRmRnI0Z3NaUW9QQjRGanBkRzkKMFJweGIxemp6SUFWNVpmcjBmb2lVcDV5K3RmaitRbmI4UjFIRkxKVTdTazhCU3piMlVCVFNrN1hLNkRvU0o4cTZPanRhT0V3aEtPSApxSVIzZ0N1azZYVXRybFY1eEdua1VHS0hPRU9YRG9TSUdPalNydTNZQ3BwbFBzdFNoRzFCZE96czJhTjg3VEg3Y01wRlVHSTJLOGVyCjVYdFk1RHRPcFEzT2RnenZONlZaV3IzL2ZvNzBibHQ1dFp6WUlQT21RZ3VpUy9wMU0rZ3lLMTk1NzJCMzAxcGNkdFM5V1lLb2h3WlMKQjliTFBTNEdBeUhhM2IyZFJGd3JtV0tBbnh6ZWN3ZjFpV2dicmtBVTRTb1pwWWI0TVZFbWtJQ3lKR0E1YWNTM2xVUm1SU0pGWkFvbQo4c29TZ1BJMTVtaEZWbnBNM3l2SVlKT05WZjIyTTdxN05PYXZBRS9QSlEvOVovK2VFL0pMSVUzZVRLWlRZVEdHUzZvaTdIZ2dadUh2CnJDa0NFSzVESEQ2MndjMjZTVXBtc1ZsQmFIVVF4bThLak8xNlJsYkJzVVFwa2RXV3JJZFpUaExxSjVQRjg4ditBdmVrdm1aUjhVK0QKL00vbCt2L1lVV2w3WkJyR1Vya2dWUnRzWnV4aUs5WXM4ZGl0bjJRcis2TWdLdVNDMkNxOERVSklwSWlJY1RxSDFZNUdBbE9jMVZqUApPN3dDVzE0RnNteU9wVW1zNDJTWlVOOXFlcDBab3YxczY3SWtReUFuZzV1VlIrTWJGZEU1bWpURm5wemxZYVZPbWhaaUlkR0phWmVZCnhyRm0zTmkwSWh0ZEg1TjNsdk54TEdTbTd4Zmp4N2JvTXBOaU9pelg1bmI0VEI4RkR1VW56ZDNjeHhZTkg4TXcxYjBkWmhnRytPR0oKMGhtbjlyOHJ3NzhydlZnandIQXJWTCtQNElTUE1tNkRrQlh1cHdMNGNVdng1Nm1DMTVvR2d4K1QwMlFXV2ZxaDJuQnVFd3Nyb0lBWQpEQzJ1S3RMS24vWGJMdjQvbG53WHF4eHJrcENWV256bnczbEoxTEczWGZyVjVsWUhFUzdEcERRNVRUMGZXS2o4b3VheVNrWnQwenFxCks1TUtxa0VvV0tXSnVsclZ3OFA0bnVWNGIwOTdUMElsYUkxZkVQazFtMFRFYmRRZXFxZ0xXY3pOaXQrbllpUWRrRUVzejRjbnhWbWQKRXJlbTJxdGRrSkdNUkNXSUUyTklNemcrcy9uaEVQNUVLRklFZGtMbXcyVWpyeDMza1k0OHdGY3FCL2Rxa1hpTlFuWEFrSHBSZXo3cQpFM21lUUh2TWJSaitvcHMxc1pRb3hJREhsVjVjZ0laK1pnbUhhekpaRC9EWnovcnhPenB4LzVXai9iZHl0S1BDNElYUlJwUXNEU1d4CkdXRkVUSnZSR0VPMEVjMW14T05tYUpmbHpHc3d0RUdGWDEzbFd5eW1nTHRMdXZ4TjBFWjVKc3VlRE5DT3psT2JuNDNsR3Z2djNQanMKdkpRdzNmUnNNbU00ODBjZCt2SVljN096dVZ0U3BRcmpjamo0c0Y5Qi9FaGVLbGE3dWRuMUNiU21zZG1JRERGYkVOVHNadjNjQzVvZApmV2syTTV0RWUyYzRxYkdwMXFPOWlObkhhR0IyZGRQTXpjc0dtcEF3aVJ1WERiUlJMV0pqY3lxdVJTdTJEY3V1Vmc2OFdObE1ObVpWCkozT2dxS0dvQ2xKMmkvbjJBbVZEQml1ZXM0UGNBUkRjbUd5V0NGUVJmcU1ndncxWFl3Y2tHOFhTSEZHRGtVMHBReWx2UkhaekFkRW0KWktPM1dyWXdINTIvaXVvV2J6NDIyNitab1UwaE13NlM1NEZqTjh2M1hteHNBdUJhT1doc3hKL1VVczlrYkt6K2hrOXdZMktaQ3k3OQpjTEZaZEtiY0hCT0lmWVppN0lKaW85OU5zVHlNTXl2b3RNOVF0US9qYXBpaXlkdStpZGljeUxzdzJRUmlzeDdRNkhIaTY2SnM4SVhECmpxcTN6Y01tWlBqYmhtSHp6NlZuczRITnFDcFRBdGdvYkpHVlJZY2dDWHRVMFZCdUR2WndtR1Jqc0Q5V05FeCtiUXIyY20rL0Z3UWIKcXdWMlJBd0c5bExUd0NCZ3I2UWw0Z3VBVFVHTjlxRjdoU1B6dFF2NjlYSS80UmY4ZW5ablpZTjlEVUJFSjU3YjZPdXh4Tng2a2EvWApWRS9qRGI1bTFWbkpxaUZnZ0pjTkpVUkN2Sm5pYkROUkpTSVdKeDBKVStHckRiNkdSZG1ORzN5ZDZFS25FSld5MDBWMGlRbndOUzBTCmxNNmI3ZGE5REE3d05kYlBUMmlHa2IzQ29vY3B5QnQ3dmFyVGFvRzlSajhPYlJiWWF6YkVZT3p0NWw3TE9sWHZxZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaE0yVExQWWZodEE5cm5pOHVkZXdEaW5vemIxbW01RHVza2J2cDFqcHpiMWU1cmx2N0hVMEVRcnFOZW8xbXRkeUczcU4rV0o1WmMrQQpzOWRWbTNpOVpnalhMdUExakV5QkJ1OGFjWTJSODdlTnU4YlpOS24vZGlVekdqd3JiR1BXOVJvbWk0Wk9lUTBuSDI3U05kYTZUTzBFCjZIbzIxY2dHNWhwbHU0Wnlic2gxZDV1bXpiaHVTeDdiUmx5M2kzRzRoNjVtWmFZQjF3Qnk4S2VEYjkya3lIelJyWnZqY3NHMmJ0TjAKMFVCYnc3Qi9LYkt1U01kUTdoMWc2Mmo0R1Z4cjZoejFLVzJxTlhNVDFDa2FhdDBqYXhwTTZ6YjhTdDFJYXlTREZLTnlWZ1Fhc1AyRgpjSEpNVG5IZVBPc2FsVitCczY1UGFEQ2R0VWM1WkhNUng0WlpWME4zTnN5NlJnMVRzS3hoR0cxOGU2R3N6N0ZNc21iK2QraXJvdXFYCkpUS3NuRDhnYXl6cXBzVm1YRFFnbDZoaUlXT3M0YXlSZzMxanJITS9CVVNrV0dkT1pQTHhwS3Y1N0FsR0tGVmFic3o0NGl4ZkRHdlUKeDNEdEdBaHJRRkthZWRVa1dHT0daMlRoQmxpVGlQSW9qazU2U0l0aXQ4Qlh0K1k4NEUydnhpcUhTTm1BVitQWG1FOE5Kalc3K0tVMwp1WnBRa0J0d1hZTjRIZHpxNkNMN3dsWWo1YUtVcnFuVmRVVlkzTkJxSk9NWTY3eVoxWUJpODgwTFFEVk9xUm5uR0FicEdHOWdOWkRsClJZZGltU0QranBwVzVudGhVQkgrQmF1dWthY1BWald1bFpORm9LcVA0U0pWc3lLeXBrT3FidEhIUGtEVkxRcEpiazUxaTI1VndhbHUKVVVvU21Pcm1ibmczcFpvbEh6SXhFbzdWbjlJMlpsUmpBK1ZmTDBRMXpvaDNMUWpWSUV1d1NqMEExYTBxRm5uanFXSFRoMmcrTlF5YQpONHlueGlCRWljMU5weWFVaEJoZnc2a2htbVRvT2VEVUFCQ3BxdWxpVXlORnE3SGJhT3JhTEdJTk1qVSthR2JxYmpBMUZTT1BzcUtzCmRhZ09XbXdzZFlscDlxWlNJd2wvTTZsclpPY0RTVjJDVG40VHFVdG9Td0pJalFha0tsMDBqNW9kU1MwODJEanFqREtVcE4xRWNGR3IKdnMyaXprc3hvNXRFWFpqUWxEeWQza1JoWms5MU9nemVsbUp5NzRXaFJybThJdWltVU9kZFhCbHdhY0JzMHZyMllsQjM1NzNDOW5DRgptWVZ0OEpvWUdVMTNQVGdFYWk3UDJpRlE5eWpqRTMvNmNjTHVoWjkyYmVxaFR6OU9TRzM0Tk1iM21qK3hweDh4L1E1Nit2bVROM2dhCmZsVjZZNmN4QjZKbjhNWk9WelpsbFk1ZVZZOVZ1ZHViT1QwWmhHN2ZEblA2RVJicklLZVgweW92NHZSeUVqQ0kwMXkvSE53MC9od3oKdmVmeGJBMzRoazF6cTVJdjFqUzZSeHBIZlZqVGp0TnQxSFJYQ2ZraFRXL0REWnJleHVCTUw0Y21BaC9ORUdFYXg4QnpiQTYvN3EzcwpHRy9HOURFY3hQUzJCV0U2NzZyUEFFekhxM2p6cFZFTTBFZ2pGbDRhU3lXMkZ3cTY5TU5ZWktwdnVqU09rTnVZZ1pjV3BxRG1nNWZHCkI4MHV5aSs4OUVOSVl5a0hMLzA3SnQxcVQ0Y3ZEVkxCbU9aOTd4RUx6a2RuSGovdzBnWkhiTHAwRG1MMURaZkdLcHVwaW1CTEwvcXEKN1Z1d3BURVN6Zkx0alphR1o4Q0tkcE9sSC81a3Rab0JEaW5LeHovT3p6c0dXUnBlVVowenVBd2ZreUdHTHZiaTNHaHBPUVhTQW0yeQpOSW9sQVVFOFlHbmNxbVM1NHFPUGdHcnpGMVk2bTBpd3FkSm9TUDgwZ1NKSU1NQ3dKVVhSeFpTR1lLUzcxNEpHYllqcmpOVlE1Vld6ClJ1Y0dTcE0vMmkzR2xQNWJsV3liSncwRDVTQTNUaHJIS2sxdUZJVHp5TkYzcCs4bHlXMk9ZOTBzYWJpRzNiMHhpRlZoZWZqVXRiSUsKa05EWGtiKzlRTkxiR0J4cEtDSllUeHdZYWQ2aVZOOFVhV0pPeWpnUTZlS2lwTTJReGhZTStONElhUmo1VUlJZ0RTSENNK1lCU09QcwpyVTNaSlk2NEFBNU5RWTh1UzRqaURZK211bzArNVdGSDE5RG1CRG9hUlJOYy9nUVJHalFoeWlGdWNEVFdHTkVWazhiK0dCb1pzTkp0CnVLblJ4MmhvZEZ0V1h3UXorb3RUSFQ0M2hpQmo4aTVtdFByeWpINlkwZFRKc1d3dm1ORlVDRkltZnlHajhhRXlGckNSMGRoTUJPRlEKV0FGanpGalBSWXltTVYzY1o3M2NlVzFnZEdJQmFodHZZRFRlTDNJRXJoMjcrb0lZR00yL3AvbkV6OEd0RCtsUk56QWFNa2psRWdNWQpMVEZTK1VTTUp2U0JSYVZCaktha2tzSEZJRVlUNnNNYytrMk1wbFVNWVJPaitYaEdiNGNZVGVrSzgyNDNNcHBxbFZibVJrWlRxY0p3ClZDQ2p1VWt5WVB1dzR5Q3ZaN2c0a05GVXFqNnRibVEwVkRpaUZ0N0lhT3JhQlFNMk1qcVI3Y3NDQXlPajhVNktmSHNqb3lsc1pwQTAKa05Hd0VJS3dtZEZpSTVtVWZmb0ZKdlZYMnNob3FJK1VPUXhrTkhYQ2pEM2Z5R2lxeXhoaURXUTBHMll3dm1wa05BMTh6VzlrdEdScAovUkNqYWNDU2JST2pZV0hkNEFzWmpVc1MxRG1RMFJCcUsrWWR5R2pLa1pSN3ZaRFJiSzRiM3hGcnJSbTdVa2JReUdqRUpab3h0YUdXClIrQ01NZHdBUnE4bW9ldm1SYVBObnBvK0hsNzBhbEhHYkdBME54b0hGNDJqRU9oNTA2TFhqT2RxV0RRRGJvejhCaXdhbDBIUjF3c1cKaldLZ2lMS1RGWTFPN3VSckJpcWF2RjJWNGdRb0doRlJkVUUwSjNvVzRmdzJKcHJhbDZ3dzg2WkVvMCszMmo4YUVnMkRHSjFtUkdPMwphb3owUmtRallxY2laUk9pR1JTa3VpRUkwV3p5emJ6aFRZam1GZWRIU1EzbHBCNzNpTnFFYUZTOTlqcSt2UURSeTVXdG13L04xdHJPCmV4QjB5Szdmb2pkdk9EUnN4UlhOWkVQak1Bb0pDdzNOWHVDUGtKZEJoazRVSnlUakdOU0VKaWlvZ1liV1RPS09pQnNOTFE1Y2NUOVMKZGpzamIySHBXQUtMZ0pyQXNmMW1ROFBxQW1pem9XbEJzNWRnUTlNUVVPbk5ocWFWdFVuQmh1WVAxQmtrYUhqalRHaXQrZTNGaGtiQQptV0s4ellabWFZTUt1cU1BQkZYTi9HQnVPRFRMS2FoaURqZzBLaFNFN3dvNE5HK1FxaXd2T0hSUzhmdjZ0dUhRN0xmTkFIekFvVm5iCjhKZ09zK0hRckM3WldHbkFvV2xoSENqZzBMU29zK0lGaDZZU1ZTb2wwNkhaVTZpNXBsS3lEUEFpdXNzSU54NWE2bFNTMDQySDVuYmsKRXdVZUd0T1IybnZmZUdoNk5XcDFhRHowVWJFR0hocVdHcFRualllR1ZVNkg4ZEEwTURvWmVHaGExSHpxd2tNekZzZXFVTk9oMWRuRApNaUNoZXhCbTR1QjJBNks1T0tKQUpBalJpZEJmWS9ERmlXbHVoZjRpUk12S1Q5ZUVhQjVMOWFzaVJNT2diZzQzSVpvdFVpaGFDRUswCkZnRm1SbXNwWE1aaHFHOUN0SXFubW5SMVV5VTl4WE45SUtLNVlKa3UrdCtJYU1xMHhaTTNJcHBLYm4wV1JrVFRvZy9nWWtUVFN0RkYKTUtJbGxjOW1BVlF2d0V3MHVCalJFc2JyY0ZwTnd4OVpKdEVURWIwVjd5OUVOTDFDOW04T1JEUnVtUVNGZ1loV05PTVRJWm9SRGRYVwpHaEhOY0FhbnVHQkVLOERSamU4SVJuUTY3VXpNaUhaMFpCNUdOQ01xTS9BZCt6Yy9ybEorV2pDaTZRVXF1UjByVnN5dm54SFJXQXhJClNCSWNTVmJhcUFpVWlHaVMyWko3S1c5RU5BTy82dkpnUkRSZU13SW9naENkV3JUTHZRalJMSitpeWlZSTBXd05LSTJRQ2RIMDVIT3EKYjBKMDJvS0JJRVRMY3ZqUVgxY0FlMjJBMGZjSnVYL3dvWkVFWk5vdThOQ0o1SXRIb0NQNWQ4QUJrdmgyODZGcHBUVFlmR2djWDVMegpBRVRESWxuNkRZaUdWWEptODZGcFVGclFnR2habVBDNkFOSDRSYmFtQ2o0MEVwUE1Cd1FlR3BtOGdQZHRQRFR6a0N4VENqNzA2dFk3CkJ2WVpRMXdrd1RZZGVwVEl5TnJZbzhOd3NLRTdxc1Vka3Qxb2FCZ2ZzNXM1czhBZzFJN0IwSkJTVDBXd3RtdlBkcHJVV1pzSzNhUFUKTkxicTFSbXNtd25kM2Z0Nkk2Rkhjc0lxU00vb3E4MHA1Z1pDazZpODZqR3lOM2FUUHB3NDZHMjRhZERIYUJqMDlIeStJYytBT2FtQwo2MEpCaithdytONnFDSHV6U2REYmNJT2dqMUVjNk5HdFBnME1OS2dTQkx2ZEZPaU54QTRJTkVMUFRBa0ZBeG9HTmErN0VORFlMVGpPCkRCN04wTzRFQUhvK2Z0MXYvdk9JRmx1QmZ3YkVSWDBEalg4R3RVUjB5b3YrVFBTdkEzU01wMndXY0xDZlJ4SlM4U0kvdzdRc2V5TUUKQ0lZYURlSXh2UXhEbUcvczgzZ2luV3ZxODNCRHBBMTlob0Yxb1RmenVkc1AyY3huQkVCWm94SEk1eEVmN1VFK2I2UmFFSjhCWldOYQpPSURQNElSdUZuWmdpV2tzTWpJaGo5M0VBalh0K2NNZ1R1Rk5lKzVKZVYrem5oR1FaVm8vVU0rNllCbnVYS0Rxd1FMMGpIUzMrbkdaCjh6eThTbjFobnRuM2VkVkRlZTVhZVczR2N3L0k1bzE0NWluVkEzakdEV1lGalBITytMdll1MjFuSDJGK0F1N2NBNmtiYk9mcktKdnMKM0NNekdtRG5FU21rb0RqdmNlREdPZ09ZcURKZVU1MHg1cVViNFR5alYrTE5kSjdkWXZTOTFUS3lQWWpPa1BJMWs1b0Q2RXk4NWF5SAo1d3hEOTAwa3pubUdoT1RHT2MvZ1J3Zk5HWFVPVE00RnpCbkVhdmJqdkZET2k1SHNja2pPV0NvejcyV1E4Lzc3NWpnZm96SE9RTHBFCmYyRldiczFpWXQ4TmNWN0JTUXFHTTlhUyt1cUQ0WnlvYlhjenU4MXdobFVMbUlpNlVYMURrdWJPcTJONVpEanpidUVMYVJPQlZJRncKaG1Xd2ppQVl6dHlHSC9waE9HTUcxZlFRREdjMGVIZXBMdEw4V05Qd2hiajV6UitYUjY3SXhqZnpsSGgzQTkvTWd2NFp2T1ZkUkFLbgprUmNkL0daVzlFOURzTlZaTUVYWDdadmZ6R2ZKUWduem0vbEtOQU9pSlY1T1ZqTysrTTFzRXhsWG9GQTNQRDBPWlFZNGYvV0RmdnpoCnZ5akFtWEZCVXE1dWdET3RsRGdFd0ZuUndwSVBzSmxoUURXTHVCRE9ERmRSSHhRSVp6eFgvNElSenVBeDhnVzVDYzY0Y2hVWUJzSDUKckdhRDRLeHZlbW9DUFlGWmRueTFENlhNV283Nnk3WmpsdDNPU0h2RkxNVmgyUVJuR0tRYUNJSXppMGZWOGVFaU9PTXFwVTRMZ2pOZQpPMEdiQXVFTTEwNkNzcHZoZkR6WVlEano5UXlwaGdnUFpGSU1wYkEydy9teW11SE03cjBNL1FmREdSYkp3MjZHTTNFUFZCd0Z3emtSCnErMEtldlVTaDZDV3c4dk5jTVliYXpXR0djN1U1YW42MVF4blBGK1ZJOThNWjFTbmtlZ1ZDR2VVYWdtWDdnTHI1UVkvTDRBejFHWEIKbDZmSER6ZWFRMGZ3bS9HZWNIMXk4NXNaNE9Gd0hmeG1CbmpFSmZCb1FVdHpEZWlwbHFMVnJYMnA0K1N4V0NRZC9HYitaSlp3WitPYgpHYWlNWnZRcU9Yc2VSUUUzdm5uTllHd2ZlalBLYVlSWE5yeDVEcTEyTjd1WjVUVTg4d3Zkakc0d0FrR2IzQXpwSkN2MUE5dzhvdkx2CjVqYVA3dUV4c00wamlwZUQyanppNDdtb3pWallMQ09hR1JRWkp0c0dzaG5rUE03N043RjV0Q0JJR05nOGhzdWlqV3NHSW94Qm1rTnIKUnRzWURzMUJhNmFzZ2lYL2hqVjNCeDlmckdaUXVoZzNDMVJ6TDI2OVkxQXpzVjVENWRDYjA4eE9SNDl3enJ3c0hJYXZZRkNhMlgxKwpLSm04MDNJOUtvQ2p0SnBpUDBNWVdCZUpxNmlQR0FrYjBjd3U3MVdmTlFOUVNOVHhXd3BBTTZocjlFQnZQak95ZHdRakI1NFpFQUhHCnhJTE9YS1A4OUlZelF6WTFTcWp4SVBNTHJ6RFF6TVF3ckZCM1dqUU12UTlMNHdQTXpGWmZ1Und1TS9qQlZCZmRXR1pVNEdxTllDcHoKYTk0cW9NeFlGN0hFOEdZeXc4Z0ZTRENaSVYxcTVpaHoxUXh4azBpSkY1SVowd1RCOUVGa2J0V0Z0ZGR1cW1pOWVjeGNpaEhnWUc3TApYamNFanhuS0VzN1NONDRaVjhCZkN4cHptNmU3TnljVDFGV0pvSDNCbU52d2x4WXM1aGF6VjZDWWNUN0ZqTWFkQk1lc3dnS1RJREZqCktocVhxTE5OZDd1NE1jeHczclg4TjRVWnB5WkloQ0hNRURuTnRGNE01aFdMdEdBd3J4YTk5NHhnWHQycDQ0dkFEQzJ4Q21rTllGN2QKUHg3OFpVRWJ3ekMzVGxqTm5BeGZYczRGYlBZeURQRmJHNzNNUkFmWEJvRmVqbVRFSmk5RDVFWHF4dzFlbmlNNktwaTd2QUt3R2RqbApGWUh3aTdxTVJJdmVtNzRqOHNFY0NEVXoxeitVdzkvVVpWcEZFN2NNTHBHRGE4V2R2Y2RxanNsTlhZWjFzZUEvcU10a1JQbTlrQ0JpCk4wRzVvY3ZYNFF4ZGhrWG9wb0F1cCtSQ3R4ZDBXU3VmdFE1MG1mbG15azREdWl5UWdaVmxoMDhQUDVEQ3pvQXVNdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJemNzNUxhRExYejNJQ09wOVAranljck9wRjNONUxRRVdObklaVmZPc2p3bmlNcHlIWkFUejFob2hIY09VVWZDV1lWQnBzbkhMMkkwSgpxcHUyek1MWWVsakxLNERKZ1ZCV1FQRmlMK3Q5aGtpVEphK3hHYmlQNUFZSGFmbEtuRjJrWlM0TnFJc0kwaklYWkV6aEIybVpZVTZYCmtHNWNNa09kQWs4YnRNd3pVNWU4Y2FLYVJ0dDkyck1ieXF2KzhUQ282R2RFaVVkMjZjbkZXV1k5aCtxdHpGbm1aUS9XVjVtenZDMDMKWnhrN2ltd1NuR1Y4a2FUN2I4NHl2S3FxcXBXTHN3eXIydmtHWnhrV1NuazNhSmtPT0IvUkRWcW1sNWExR1JPRW9EU296RTJZWlc3QQpSM1pqbG5saWpDUUhaam50bmlTQldXWXBDQWZkQzdOTVkzVVhCdEhVWU5Gc0pjd3lCejBXbzl5WVpUcVkyVUw5b2hWRlVzbjJ4aXpECm9qS0ZHN1BNSmJEbURHT1dFd3ZoaW5TOU9nbU1IU3hkdURITFhCUlREeDJjWmF4a1dRTVNtR1VsZFV0OVk1WVpOeUdwSXpETFhDS3AKVzRReHkyU2pWY3MrVDhROWgxWTZNTXRrbzAxdnhrZWJnd0oyWTVhcEptRjB6SmhsR29xaHlnemdjVWVobmkvTU1qS1d2di9HTEVNTwpvczVOZ1ZuR05ycGhOMmFaYU1VZVF6eFRuY3ZoOGhWc3B1VVl6QTFaSmsyTGxUVjd1OVlzdEEvS010YU5lbmx1eWpMankyUTlCbVVaClBxWWNqYUFzSTNhZ09OaE5XUmJYYUk1RFdhYjJUNStnS2N1MFVFcC9VNWFscE96elVKYkZ1Q0pNeEpSbDdxa3lxNHV5ekJCNXdMWVgKcGU3SnE1MmdMSE1oS1hqNFJWbVdmSExOUTFubTZVZlJLaW5MQ0dBSmYzRkJsbUgwTHdxeXpEQ1hUc3lRWlZvWUVMb2h5N0NLOVdmSQpNamZUdlRCa21jZE9iaXV4SWN0YzNZak5Fb3pMc295R00yVDVHRzdJOG1VMVpCay9vQ2hMd0pNWkxsSUMvNElzWTZrbzcyNXZsNzIwCkNzYnlNVnlJNVcwTXdqTFhjOHJWbTdDODM5Y1hZWm1wWnhJR2dyRE1rbmVxQm9Ld3pPUmh0TTdZZWtsYWwzMUJmZlhJSG5LMUpNSXkKYzREeFp4VFBTS251cDJHdVkzT1dMUURMM0lZcjNodXdMRUh5VElldzdDREhQSVJsUnFybUo4QXlzWjFQam5ZRnlYa2hJaDhDc015dgpMekw2VnplYmFzY2pBTXV3OUdKMWdFaW9yY3FkZWdHV0dSc2ljU0FBeTdSb0hoTmdtUVlKRFM3Q01tOC9NOWFCV0dhcW00SzFRQ3dqCkVLQkt6aHV4VExTVnV6T1FhZ3VWV1ZlM1FCT1dNZGFwdmRsTldLYXVJMGZ6Qkk0Q2NIMlVYVGRobVRHVGt2SWJzUXdybWVBYnNVd0wKSDFJd2xtbWhRUEZtTFBONFZPVUVZNW1SRTVWWHI3aE1GL2E4R010MGFMTjdTVGc0WnU3T2hpd3prZEJHOUdhSW9XZGJBN0xNR1c3MQplaURMdkdmc0xYOVRsbUhWaXhhVVpWaWtsQXJLTXJlaEJPcW1MTlBLUnhXVVpSSDJSaitVWmNvSTFjdmpLbm1qTkpMMTFFRlpobktICnc4cW1MRE03UTRmMnBpd3phczJLKzZBc3M0Q1hDc1NnSjhPZFlJdXpGMldaSzZkMEdWZW9NUUxLdVEwM1l2a1lUYUpDYnh6eGNneFkKL3VMVmY5ZUZBMi8zMHc1R0RXdUd3cHVidm0yOE1wNXdtWHJFb2l0M2R4dDd3Wlc3bWF1YnJkd2RNTjVvNVdsVXc0dXNQQjBaM0lCawoxNmtmc3ZLTWQrNEdLMDlHNHU2OXhNVGRWT1hwOHBJWFZCbEZZMVErbWFuTU42VGxRQ3BETmNKSTlVMVVEdER0QmlwRHU4VWhMVURGCjJmV3ZOMDhadG1uR3Nwb3VkUEYzQXFiTVBOSXFiNVp5ZHVYTVppbkR3SFphZ1ZLbXB0NGg4UTFESTUwYXF4aWhsTkVSWTZ4MG5lQ0sKdGU4RlVrYmhBc0d3d1ZFT1BOTEdLSmRvOUh4VGxDR2NZb2c0SU1yVUI5ZDVHTXJBSjYwWFFMbTBjQ0xOVHk3UmxEZnd5VXd3T1FHNgo2Y2xJUXlzN1pYZ3lLZ0thR2NzTTZ4WFRPbTUwTW15azhRVTV1WVRRTDhESnlFa2htdkxpSnFNVUp2cm1jbnBGcWtFWlI3OUJLRG9SCklmdUNKdGRnT1FZem1WRzlOUTR5R1hvUFpvbHZZaklTT1BTNkE1Z01DVXEzSTA5SlViZDI3b1ZMN2srUUVFMUx4bTZNakFjc0dRZG0KYU81bUpUZEwxallxdVVYUHpTQWxOODlTTDFJeVd0eEZZb0drWkdoWW1Pb3pKeG41NTZGLzM3TXBWMW1QdmlHc2ZvZEpUTUZJUmxmMQpyckQ0cnBqQXNpK0hiQXNmeXpBRmEvT1JzUmY3b2R4NFpBUmNsRUUwSFJtT0FSbnNBVWVHdms0bExSY2JHZGZhWFF0QlNDb0ZLazBCCmRRYXFJRDFnZ1BrR0k2dGlySDdiWEdScUJwem1ZZWF6QzF6eGdpTDNhQWtTVE9SZC9oNUk1RzRveG91SXpBWXFQSmFCeUtkWTJUemsKNGdMWUZ3NjVCaDR5YU1nZzlETFZHRERrVmc3b05WaklCSzF3eGFLSy9CWk56NEtFM0VLdGVvT1FZU3pFR1p1RFRQWUsxeS9HSU9PMwoySmJpeGlCWEYyTnNDaks4TkhXR2RDS1N1ZXVscGRkbUlDT0x3Ynh3SUpCQnRlRjNGZ1RrRW0zWGJ3QnkyYzM3ekQ5R2hZWkltc1lmCmsyWm1odkdtSDI4WVVjQ1B5NGlwejZrNUdBaHF2ZEhIZk8wc0RlTzhBclljNWRzQlB0Njg3NXQ3akpveTFSdTZLS2RrVDB1aUhtY2sKcEl4c3Zwb0xPVTRWekdQa1padTNVaSsvTGhibkRUek9YYXIrelR1R2dSQjk0WTV6Tk1hOGFjY2YwenlyQ3cvc3VKb01HYXpqeGdGVgpOWDRiZGN6V0NtSEVYSWo1Z1VXdVFUckdPNTJOSzk2ZzQ0Wkt0NmVlc2tJTW00T2ZrREhIaUM0OTVpTnZ5dkZpTWpSOTI1RGo2azdlCm0zRThWQUw2Umh4L1RKakxnamNoanBPbjVTQWNXMmY2NGh0UExxTnN4TFFsR1o0b3lNeVNUWUo5bmJTTGRURmdJbWxKVVUyNDhmUkMKTHVER0VTZC9vNDJsK3pwazR4R3RDZ3cyenRIaTlzVTE3cXF5T0ZoakN4TTMxWmhKQUpVcEhxZ3hreDVSbFlqRnI2R2ptMmlNdHlJWgo5TENCeGlnSlcrWTZrR2VNOTlrTEVYMGxIUHUwcHRrMDQyS3ZLV0RHT1h5QVlCbXpSdDBqYnFDTVVlL1dWVzFKVHdtTEdyNlNtMk9NCmdqT2psQytNc1NYZFFURnVEQktrQXpIbXFvcGxxamZFV0FxU1VRN0VHQkhVajNWYVB4Ump5am1mc0lUc2lWclIySTQxQkxEVTZuSXgKUHJpdi92ZjM5TzR4K281WVNKdGlYS2NiVGdiRU9GaGxtMkhjY2tocEw0UXhBZ2pGMUVsNjFjQmRVTTBUQUdNU09Lb05JWlVIOGtKTgpndXRtWUFpcUd2VGlscDNKdTlqRkxiUUZSaGNqM1VxOVo1Q0xrYU9VQnZ3Q0Y3ZG1mSTlqNTFDTDBzTXhrUmo5aHlPeEY5amltU0s1CkxCc1JzWFVjYVBGS0NpQzhtTVV3c21vaWtNVXIrbmNFc1JnZ1YyK3dYZlNWUEtjR3JoakZXQXJlZVN2OEE5TnhONng0VHJkRURsYngKcHZNR2doaG9DcnFYTjZsNFBQWm93Z2loTUhOeHdTbmVoaHRUSE1aTktSNmV3VGQ5R0NKZXJuNXZTREhFdHdyazJEaVQ0YVJDRko4LwpMMEp4R0RlZ21IRGxWUStmZUFSVzVNWVRRNHdzTXBEcHhLTTVZeDEwWWhpbWVickhLNDFlMzhFbUhxRk9DaER4YU01aDNtUmljS2NDCmFZelhld2IyUDdqRStHdzJlamV3eExQWm1RNHNNUTNsd2hJemZwM2VVT0laSkNjemlhZmJnUVdTT0ZxSDMwQmljQmlWblRhUEdKcE0KSmhxTkk0YjZrdmZ3cGhGdllGYkFpSWxjWkRyTUxPTHBEL1dGSWthcFVqSWhORXJuMU1RMFNNUXdaRWZQTjRpWVJzeEV3U0VHMDRrSwpFbU9JVjdFRGVGT0kxOTBXRVI0TFVjOGpIUWd4Uys3eUcwRU1QQmREWEVFZ1J2cGVsUm9HRUVlejlSZC9lQVpITmZERHk4dXFUUjltCmxTQnh4QWMrYk5iMFJnL2poRlkvNE9GVkpObDljWWZ4dWJGWUxyRERLMHBoZ2pwOEhXWXpoMmNrWkFNNVBKMmEybnpoR0FaZXdHR28KWFVVME5tOFk1TEErTG83d3FCNUxiOXh3RC9adkdKRzFacXc3WU1QVW5NLzZaZzBqZ2ZTNDZUQkNIZmc3R1VnOEpjQncyZlFGR2taaQpLa3FuUlVOOGxIVFltR0drdUpwNzFXMHRUM2VnZTBPR2V4U1dCV040RzI3RThER2FNTndOTjlwOFd5eHBrMm0yR3pBTUtEN3h1VjZRCm9LQXAwSXYwVktxTDhsNXdZWkNqVk5SdXRqQldQQUpXR2kyTXRWQk9iN0F3VmxPcDlNTVZ4cG9yOE1QOHlxckZCQytxY0xNb1kwT0YKZ1JscTdTQ0ZSOUN0RDFFWWdpWWlKUU1vekxXWlM5dFkxa3h5YVpsdm5EQzlzZFFPVFZncjJYNWd3bHpyanZ4bUNXTlZ2SXdtNXEyRwpRUVg5UmdsWEt6TmZKR0VBcE9LOCtYMUVIbXh6aEQ4N09qOStSeWZxLzM4WTRTOTQ0RDl5NVBydDcvMmozLy8xZldBYzZBOS94Zi81CnMvL3JMMy9SRC96MGg1Ly85SC81NWYvVnNkdno3ZS85czEvKzdDOS9ZNi8vNFM5Ky9kTi8rc3RmL2Z6TDcvLzYydjZQL2NZLy9hdGYKL3ArLytPVnYvdlNmL2VGdi9yM3B4MUczOE1kKzRILzdpNDlUK3A5KytZdC84Mi8vK28veWttUFRQL3k3UC8yNFFmL2pYLzNoOS8vUgpiWC82NVYvLzlYL3l4cmpJajd2eUY3LzgrLytNYS96eEQzKzVyeEZWM1IvRDR0OTZqZi83WC96NVgvL2IzM3lXLy9DSC8rYnYvNlB5CnAvL3c5My91L2ZCM3c5OS8ray8rOFB0Lyt2R1MvZlhIZS9hNzM4bjhEMzc1TngvWGRmM0RELy9rMytGZnB2N2xIL3pWZi9qMy96YU8KODkvK2sxLys1cHYvK0piK3V4K2ViMy8vNC8vKzVkLzg4QjkrZUlHaG4yLy84OGQvL044ZnByLzVWci85NDIvL3gvLzVmUHR6YlBuUApmdmpkQktPUS8rL1gvUWZxZ3JDUS93a1cvRUZ4N2g4emYrenkwMzJjbjM3NC9jZXgvOWNmNEZ3endmVkFmNWIxSDFoK1Fwby9vTndGCkRPaGp5ZmV4OHNKL2ZJekRuUmJHNXY3bG4rR1lrTkpYMUgweGlKVSt4aG1lSmNaM2xHb2ZNNHhWMkt1SkFNTEhEOVpQeHE1MmNELy8KOERZREZmSHhDKytqb3BqbFkreDVuNEdOT3NDUU9QNjlyWU5QNzZNZTQrc01qdms2MjNQVTY3cSszSU9mZi9qWFB3Q3N0T0JrZ2lySwpmQmpVUFFWVEsybmhINjcyUkluRXgvSVhtWEFVSUMwVWNYN2MxL1I4KzhmN0VjS1BUY1FuUDM0Rk9EdTAyd3dqWk1YUUlLcHIyY2RNCjlEWW1wVDk0YVpmNUVTWGlkZFNQNldqaEpYaWRRUmgvL3UwVCs4dVBLNDUvWVAwVEpybE1rRTRjdTl4bW53V1dySk5GRkwyblQwYnIKaC9ZWjIweVFWLy8yT21yRGVxR1ViNjh6Q09QUHYzMWlQdVAvK2dMLzhSZTR6cHBOU3B1TXBIeXN1NEd3UVRGQnhidjdNUTRRQnRpZgpnZGc2NFFFWUxEUTJBSE9ITFA2blcwdEJSV3J2VTRBb2dVdWkrMlF2NDMxaGwvbmNoT3VvNTNaZFozRGYydWpmOE41MmtxdjI2YWpICitEcURZNzdPOWh6MXVxNHY5K0R2T0RiOGpxY3lRTHo3ZEY5eDJ0QnJ2SDRmRjRnby9ldE1MK045VlpmNTNJSHJxT2RlWFdkdzMxZjgKQkZ6bjk3YkladVpQcit4bGZKM0JNVjluZTQ1NlhkZVhlL0JkWGxsMjlYcmE1L0VMZ3c0cTFsN2pWMlBZcXJ6SHI4dDRqMStYK1l4Zgo1NmpYK0hYTzREVis5U3hGOW50YmxuWitQdW94M21kd21jL1pucU5lMS9YMUh2eXNvUkp6Q0pRK24yNE81cENuZkRvSXBvdktMK1FlCjNJL3hOYmdmODdtTWM5VHJnczhadkc0T1pyeUJRT0pyVy9MKzE2ZWpIdVByOFJ6ejlTajNVZStIL3VVZStPWmN6KzJlcTY5bmZPYnEKOHpaY2MvVmx2T2ZxeTN6bTZuUFVhNjQrWi9DYXE4OHp2cmZkYjhOOTFHTzh6K0F5bjdPOTNzZHpYVi92d1pjMzUzVnpybWQ4T1RMNwpiYmdkbVdOOE9UTEhmQzdqSFBXNjRITUdyNXR6bnZHOTdYNGI3cU1lNCt2eEhQUDFLTS83ZUQzMEwvZmc1ODhlU0dNZmkvYlpBd256Cnk2dG9UTEYvY2tzdzIwaVA4VFpia1BjK0trdVgxbnYrRCtNbkQrVGVkbnNWOTFHUDhYVUd4M3lkN1RucWRWMWY3c0hmZlpvOFUrL3IKdmg1SDRmcjk0MUpjWjNvWjc2dTZ6T2NPWEVjOTkrbzZnL3UrSGtmaDNuYTdGUGRSai9GMUJzZDhuZTA1Nm5WZFgrN0JkNWtteit6Nwp1clhIVjdoTzRYZ1YxOGxleHZ2Q0x2TzVDZGRSeisyNnp1Qyt0Y2RYdUxmZFhzVjkxR044bmNFeFgyZDdqbnBkMTVkNzhIZC9aYzluCmdFOW5sQzlEUVpoZm4zZEhxWW85Z21Qc2dvRjhHZ3B3cVBxTTkxREFaaGFwdmovRU1INGFDdTV0OStkOUgvVVlYdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJWjNETTE5bWVvMTdYOWVVZWZPZkZ5T3ZXbnUvMk9vWHpoVjhuZXhudkM3dk01eVpjUnoyMzZ6cUQrOWFlNy9iZWRuL2g5MUdQOFhVRwp4M3lkN1RucWRWMWY3c0gzWEl5ODd1djVhSy9mUDUvM2RhYVg4YjZxeTN6dXdIWFVjNit1TTdqdjYvbG83MjMzNTMwZjlSaGZaM0RNCjE5bWVvMTdYOWVVZWVHb0hXUWdKbkU5K3p4QSsvNVB6WklYNzI4MDZ4cGRMZHN6SFF6bEh2WHlaY3dZdnYrZnJpVGtjTXI2NDl6eHMKK2JUMjRRbG8yMnMxY1l5dmxjY3hIMGY4SFBWeTJjY1h6LzUxT2pqRmY2NVE2ei84L1orL0FxMy9LZkhYOG5lTHYvcU9mUXJDbmxncgozckEvWW94OWYvcHl0Qk9LL1RzSEMvSHVkcTNlcVh3cForN0lqUFdGMmZNQmlKVmVaNmYyeVlnMWVXMW43ckFaNi9kUnY3MlAycFQrCmY1K0JqWHZ1V0dOODJuWkk2ZjArNmpHK3p1Q1lyN005UjcydTY4czkrRzV6Qi83OTA2MmxOMUUrblFMOURyN1kxOGxleHZ2Q0x2TzUKQ2RkUnorMjZ6dUMrdGMwNjIvZTJVMEsxOTFHUDhYVUd4M3lkN1RucWRWMWY3c0YzbVR0WXRmSHB2dkswODZkWGxoZFlQcjJ5bC9HKwpxc3Q4N3NCMTFIT3Zyak80N3l0K292YithZHRwS2NQcnFNZjRPb05qdnM3MkhQVzZyaS8zNExzRnNsQVo1ZEd6ckJPT1lJdkFiZjZkClJ0dzhhZ3ptWlh3eW1oYTh3eEUyUHlvWWVSMlZnM2VhMzE1bkVNWWRqb0JvOGIxdGtScjJmZFJqdk0vZ01wK3pQVWU5cnV2clBiakMKRVUyZTczMXpPSmUyVHdmaHROblQrK2N1NDMxcWwvbGN4am5xZGNIbkRGNDNCelAvbk92VHRrVWxZZStqSHVQcjhSeno5U2ozVWUrSAovdVVlZkljVjkzNDVJbHQ1V1R6aHYxOUN1d2J2aDJYanA5ZmwzbmEvQXZkUmp6RjlmbGZIU1ZEdFJ4U25lRm5Pd2E1WDRmenNkY3Z1ClU3eHU3N1h0ZmhEM1VZOHhmWDVqZklyZjhjT1BYL3YwNFlmNWRZTjREYXQrTXZwNlA5M011RGV2bzM2S1Erb012c1FoOVNRL3hTSDEKME82akh1TjlCcGY1bk8wMW5KenIrbm9Qdm56NHI1dHpmYUxuSU9mUlhEOTNHZTlUdTh6bk1zNVJQOFVoZFFaZjRwQjZoejdGSWV2bgptM01aWDQvbm1LOUhlWWFUNjZGL3VRZmZZU0pQMGkxK3VxL1YzVHZmOTlYZDY5NzM5UmhmOS9XWXp4MDRSLzJVcU5ZWmZFbFV2MC9zClNsU1B2bGNYTVFYZzJDbmZacDlGbiszVEZIQ01yeW5nbU05Z2ZZNTZEZXZuREY1VHdOY1QrejdEd3ZhTXcrWDd0RG9JODh2anB5Zm8KNU1BeDJoUDh0RHFRMzdxRHpENnFQZHozR2RqNGFYVndiN3M5L3Z1b3gvZzZnMk8renZZYzlicXVML2ZnK3dTWjVSYS83dXR4NHEvZgpQKzcrZGFhWDhiNnF5M3p1d0hYVWM2K3VNN2p2NjNIaTcyMjN1MzhmOVJoZlozRE0xOW1lbzE3WDllVWVmSzhnc3ozajE2MDlmdngxCkNzZmp2MDcyTXQ0WGRwblBUYmlPZW03WGRRYjNyVDErL0wzdDl2anZveDdqNnd5TytUcmJjOVRydXI3Y2crOFRaTzRSaFpzajljOUQKUVpoZm56ZGpZUG5UVU1CNFdadWZod0ljQ28yRTNrZEZGTzc5R2NyMGFSZzQyKzBQK3o3ZU1iNSsrNWl2OHp6SHZLN295OVYvNXhEQgo2NmFlTC9ZNmhmTnRYeWQ3R2U4THU4em5KbHhIalp0MS9mNjVxZWRyUGR2dHIvbyszakcrZnZ1WXIvTTh4N3l1Nk12VmY4L2d3T3VPCm5nLzErdjN6U1Y5bmVobnZxN3JNNXc1Y1I0MDdkZjMrdWFQbkl6M2I3WS81UHQ0eHZuNzdtSy96UE1lOHJ1akwxZi84bngvOS9PZS8KLy8yZi9mckxuMzhicjhqbmYwYnNzK1lGYVMyazV2Z1BNR2wraFJXNE45U3pIL05Qbjh6dFk5SFRxOHpuR0w5dDNZZjRQYy90ZXdoVApYK2N5MUlKN256bmNRSnJseThrNGJIdjZyTGExNTJOaFFXTjZxRytYbWJXR05MTkYrK2NyOTYvOUJEK3pFdVVHTGdCNmxINmNlcDgrCkRkUzNmTHpxTkpQQUxDUDlRUDBrcWdwa0pMSkJQemhMbk1kZ1AwQnQybVAzanlGcCtkSlFSaVBqeHdyVXY4OWF2OWo5K2ZnUS9mc2YKYjVvdmVlMkRLdEl2bzI4TldSQnhGOWpTeDNjc04yL0ptbTM5UHFveGZMOHdubXJMUkxxbHpPUWk2cmJnZWZxazBKRlZScFRmK2FxZQpNSDQ0OXVmeTBSalo1Lzh4SHNlbWJYai9jd00rUFlBZjlXVHl3dzVpdEdmMGF2N1ZWcmFTcHJVcGxDL3JTUDQ1ZmVNeXJoWGI1dDYvCi9kWlI0OWZtbjlUMCtCK2VqNFdCZjI3dTE3R3JlNnFOV1FjQjdHcHVtMTREZzBGL2pQM0hpQzJmN0UzWnhVZkhaSmp4dDM0L1Rnek4KWVBTRTBXYWtGcDhZY0p5NnVLWWlVaHRSKzJmamFtRjhZc1BGK3h1YkxwOXY3M3QzRkJqS0JvVDJiLzcrZit6NXNORUt6ZXhuRUErSQp3RlZ2WGVOWlZML1BiTGd3LzdZSDlBQTNuUDJkZmJ4YU1kS2gyVW4zUzQxMXFXMTdhR0R2WEJqQjBXditKTmd5N01mWVArVnNNMG9DCjQ2RHhwZGFoczMzWURPTExkNzZFRHRQdkkxTm8yOXpuMVBmdTcvUDNoU1hVdHlYZmRiYUEvelhNVCt1WCtTZWJpYXlSK1dNMStzM0cKN2tmTTFoTzJvUkJkeGhUajQ5ZGY4MEFJTGdES1RmVVBZTjM5YW5NQ25rU0h3WXRnWTA3K0tqaDgyUWpJc0o3YzhnY0FhNHJ4TFkweAp2T25UWTNRaGM4REc5SGgwWUdvNURoQVBzK3RSeDdZamJnNGV4bTlld1hsMXh0TThtTEtUWGJ3NnJGV1Z1UTNQZXl6STJXYmdER3ljCmNjVWx4dU12eDQxSE9sV0FyWnUya3VlMlpCcTB6TlgzY3FvUzA4K3B0REEyRHpDRFk4RW40OHc5NzcxekdOdGEzMzd6NTMxZTZBUFMKdTZiMDUxRk14ZGJxTDRQUm1EQjZXbGdqNVczci9nUldxejR2ZHV2TVBmYlhKNlFXbmkxKzY5ci8rdms0cmUxcGdEQ2FQQVV2QUJwawpiQ3ZHRVJobjgzTm9WWGVMeHNldkNFSDhYNHhsZVdiODhsdCsvUWtnS2I1bkJYbWlYOFA4ekI3bXdXdWpjYVRmTU9ZUnhuai9VWFpaCnVzZlpqS1lETm83d3VQQ3AvT1lKK082d0VWb002dXlTK0t2Tk9SZWZCRWtZTXNhOGp6ZXNaaHViUHhaOGJUNHhTYTFHekVJbE52MVkKVmVUM3JQTDFCTTUzeFQ0akdoTFgzSjhWdTk3RWlOajhxYkFOaDQwbHZwK1AxN1Nlc1ROR1ZLNUlQWHBxZW53SVMyMnhxZWJjTDc5Lwo3dGo3Z24vOURXdjlqVnZ6TVhyOXE3amxvNGNaczhwUFlVWnJKcG5yRTNlSHpXTmtMSG4ra1Z1dXQyeXFiU2x2SlNlUlg4T2N3azFnCnRiMk1wTHZLT0hRZldQd2JiZ1lCS2ovK0VPWmNZdHVSWXR2Wi9HTk43OExYRTRneks1TEllSnpQZnBqczlWNUx2RkRObjJFQmd6S0YKZVNUOVhoRml6a2FOUlYrUDZ4OUV4ZmFZNjlyNlY1dkRKMmppSmRyWTloQ3A3K1hEMXNyK3RSYnpHOHg1blRQcnNTMGJHK2drMGd4agppZy9XbzZSL0MyT2dqeHUvVld1TGcyclErWHIrY1dHZ2J6emorckZmd3h4dUdLdWlaUHVZWDFaTTVuT0ZjV3lmc1V3UFhEQzNlQklzCkU3Y3hMbUZsVGE2d1BUR1FrTXo3NDIrZmxrZStpYTQyc1lDaDkvQ3J6ZWxKSHRXSEozNFlTN0ZuUmVLSmpSNDB3TGZ0OXF5bWNVSTYKYnRJUzRzTlllNDhmKzFqU2Yvdk5NN2g5dnZnNStORXh3SEM5ZHp3NUcvTzR2TFBmSGg5c0JZN0wxaGJ6ZTdncDJIL0ZvUE5IUEw0eAp0eU9adHNjNFJoaWY0NGUrVHYrOCtuUXFOUkd1dUs1b2R5TnppMitOMkM5TjhaT1VjZG02YjRHUDhKdUg5ZStoajBiekJYOThnZlpHCjBPOWlMMGNuOENRL2hmbXA0M29ZUHNLb05ZeHkrTDRjTmk0dmlZYjErZkt5ZUFOeUV6U0N3N2E5WjFJeFpVdzlKaEIrS3ZFQ2svUW0KTXhhQk5xNjhEMURpQVBtSjUwNmN3WSsvZlY3bkN5QSswUzl3S2VjTHVONXJyV0cvdnV6LzZtL2Y5blhjZi9IeGcvLzlmNkFmZ2llNAovQVRwcVB4cU0yTWtOc3Y1WEJoK2l1OStEQk5zNFJhL09CNnZ1OUVldWxhL2NzUjdhZE0wVXR5a3NjSklKaFYvS2NXeWNMSi9RYnlECm5uUUFYdW5KSHdJYlBNaEl1SitNTlc3eVhBcXY2SzE0dFBZaG1pVU93RmZGUm9TRS9aanJPWVB6SlgxNGFIRW5XdzczWWE0bkJxUDgKSkwrcDlrdDgxejErRHF2SlpRelBGWlRPMzN3NnNUdFYxL3FTUGFiU3VIek1qdzh0NzkvM2htbFB4YS9CN0ZrZU40ZldhdlFIZ0JtUwpMVUlzUThRLzdUKzBMS3M3cm1WanhNU2VHbGZQNXVNeWdtd1J1N01wbDNZSE52QW5tL3Z4bjNLT084QndudzVCTWY0bkk1c094WEZqCm1UTGtUc3Y0NGR2NldwTlgzOU5YbzZPMnZUdkRVSDRBK3ZweFVpc21BNzVNY2N6WVhjVE4rUGxZVVFONEdWZkZodHArVzNNY2dDdEMKais5eFRoOXJtSFZ0R0VjbHprbmZ3SGoyK2RkNFYrWlNGQVN0SWVIdzdjRkwrL2Y3dFh6OHJOSERjUHBPalRTbmphM0h3MmE4VUFkbwplOGdmNnM0dTQxbysxK0xRR1VoSkk4V1lXTUpabWVnc0VZZGx1RURHUEZNOGdPR0p0d3FPcnhONHdpdEF4OXhTWXJUSGZLd2JXLytrCjFVOURMWmxLeGMrZ3lBa0NRNzV1WDMrVnVDOVZuZjg4TmloSUFVNVRibkd1Y0VYOFF5M09kWnpIRFZ6TW5INWVYZE14anByaWpXOTEKeGxrOS9VbVhNUTdBVm1lK3J1bTVsQTJSNHoyeUl6ZEpieDZmWHMxOFhRR2ZzUTZicnhlK1o0M0UwKzNpUER3cUxEdXprTXIrcFlqcgpUaEQvWW5BaWNROUdFRnppVko4d3hWZUlTZDhmNFRDNU4zd3l4NFRHQ2Z1TlAzRlllcHlBaGRsUDNyRHVlU0E4eXc5ckhmc3I4ZzM0Clk4ZTBaem5VV0dIdlgrTXI2SzBYYjNzQzdsdzRlTXZWWTJJdXBlOERuQmhjckRySFdSTVp6Z3NqSnJWOUExTHlYUjJhQVgydTAyTWUKZXNpbEo4SVZjdnJIRUxIVkg1eEdZclNUV1BHdytabnBxSWlzeDB6UWNuRjhpQTN0NG8wamtSTkd0SnlJRXl0ZVlZeXFySnVudmVvNQorc05jZWpoTzRTdU84aWZka2VLNWwrTURYWGhqd3h4ZjEyQy90ZmhtS0xxaGtSQXgvNWFtVGRLQlp6eFpMRWgxZ0x5RDgwQnZhdHdICjRLbUhCeDNCWDlBQjkvRFFQbFk1K3dEaE8yQ0k3RzI3amdNZ2MyMDk4dHhtemlQMjBWSTlqdVp2KzUrRXV2ckYwZlNOUTZTMXg0N1MKdy9qRTlORkxPQkFmWmc3bEh2ODFKckt0eTlxdjR6ckdKKzc1TTN3QXRFR2Y4ZWFSOHZhVHpXY0VqVFV2eElNbEZnUGtVOGxJRXBzbgpDM1lvMEFIR2RpSStwb2djQjlnZmVzU1MwTW5RVXdpQXFSRkx3Z0hLZnFFMXJtUFRGZ3VYK002Nm1VSWVKMHJlKzNPNXBQMzdpbTE1CjZSNFVGRHpyVTExdy9JQ3pYeHkwTTZ3eFVueDhXbjd1NkNMZFl1RkNud3JHRGE5U0FGQm4yMVZsWm1PTUlLd3pDLzl3UFRNTzhPekoKVllNcWRpOWxSNEdxWGE3dUZKWEgyaWNlR0ZDdjhTTEVZTjNWZTZxRzEremR0eDlaKzdQMlVjTzUwT3BSTmhMci9FdDZCL0E3MitGYwpaZXpkQ1dDTGp6L3ZreW85bmxlTXk5MWtQRCtESEtmRmhoYTZWNGlBN3VQbUZ0UEZxaHdYZTFPSGFXN0xrVUxHbUxCdnB3Zm0wajIzCnNsdk5UemFIM3oyMVhJQVJoT1BoUmNLSHQ5bHRqRWtmdzBmeE5BSnozdDlvejluYlB2dkQ1UkFJSXpwaHJIQXh0VkNWdWZad01MencKak5LaTk1c0JldWJhazN0NHpwMkl1bmkyOWpyWStpL2M2VjZWaWUxWjVWa2U4Q00yakFPTVdJM0dSQTR1K2Q1MkpFM1BhTnkraC91NQo5MDg3YkFqZlh1NEZhKzduL2tBMW52VUh6YzlqS0NnUk1rRnZ6QkYrVjNPMjhjTTQrZ2x0K0t4Y1Z1YlpjZFo5Z0RialN5Z2Erc2oyCm0vdWo4YkJ4d216K05tSi9FcmM5dHpXUHlSQkE5cGdnbVdpRkVWVGZ4eTlNVEdQTmlRRVA2dUc0d0h4bVFyeTBQOWxjOGhPclZTeW0Kdy96c1lFN3ZXbTAxbjd3TzhXZ04yWEE2TVVhc0h1Tko2MmoyR1c2cElyMTlSMzA4cFA1T1lkcDZ1NmtSR1g5bThvWHBVb3VwOFR3aAp1K21rd2JjZUgwek16czNOVlR6NE55OVZBSUhmdHpEbVp4anovc0sxMUFTMTd3blhONVY5QjgrSE1HUFhlV0ljTTg3ejJkUHlUSEZHCllHK2YyNmxmZVhaQXg3RHREeU1BaWc1cFd2TEJlUXN3YzZUQlpQYmNTU1IrZklQaDhLQzliTjNSdlNlOGVZTEY0dz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJdUI5UElRSmJRK2hoMzM0Tnh1RHg1NUNkSkh0WDdEVVdRL0ZVYnNUbXNTTlFqZ3JVZHNVUGxpTjUwU1hBeHNqT1YxTmcrV001NnliVwphZ1MwN3pUL3J2dWlZbndIZUQ5dkI5ZnBPR3hiOTFRdzlhSVEwYi9kNjVUMi9vOUZMZmh0amZuc2JyeUhNRHdnR2JzanNYWU45VmkyCmN6alZhTnViOXIwcFdtVDVvRSs0T1FsQnB4OWoveDNWSVJCWXhxZEZzREdWRmNZMFkrVkdUeTBDY3ZQWmQzcHB2QVdyY2p2TlZCajgKN285SDlNRDhDbGVQcTBjWlc4cWZyd3NBOXUwNjdWaEpQUU91b3hhL1U3eDA3a1dHbzEwSTltK1p3RmxuSW80YVg4WU95ajlxa1BpYQpjcGlXeU8vWXFzeHhZZWQrbDdVWGxIWnliSXdCM3owVFphMGVnYVlXdDc5amp1WjhSVHdWR2J0ajJjQzlacDhBRUxKN2Vvc29QUkcrCjRmNVovRU1lYkd6WVl1SEVCdUF4T2JHM3ZIZmZBWXltbTFxc0x2TFB4MHFpM0Q3U2JCcEdQb3lNWHR1ZlV2UUFMZE42eExDSUs5Y0IKMEY0Z1hoZjY4RExXczU1VHhoOHQ5cmJNNm1PSkdQdlhLOXdWVThXSE1hMklBRVdTb1h5ODdqdHNUKzlZQjhCWHRGZHpVdzU4S1hJVgpkQUpacnhBeVdjOStnMklZNFA1N1JWb2o1MFVKNXZGSGJhekhHMjFuOTdiMnp6OG52M2FrV21VcXFTaVNmOGpnMm9yRHhzM3VFRDJzCmZkd1B6Mk03RFR2RmZQei94eTR0K3JLUGU2RWZhZXUrWXNBY3JVU0t1NjBZYjJPaHo3NkFFUkk1TDFaV2FrWFdPRmY0WXR2cDhPQlMKM0wzTXYxL1BBYzRhYWorWExOMmMzeXl0Zk5GUDU0bnh1WTRucmlEZEFTK0hrR0RjOFI5R0VuVFU0Mk1PYUpQaUFCeldYODRZT3Y3RQp1cWdVWi80VGN2ZzdZcHpxM2o4UyttN3I0VzFQeWp2dVMySkhLTnYydC9WZ3RvbmZ6d3BWb012ZEUyL1JJMmVTc3ExSXp1UWMzbWhlClhDTyt2b3g4Ui9LTDE3QXc3dFg4Y1lQUW4zUkZSS0dYV00xL21NdStMWFhya3ZLU1BNN20wTVNGbnN5OU9XUnNPdzFFYlVVSTVVYUoKUVkvaHRKOXNQbTRPeTNYQ2ZBSkp1WjF0VnppRFQ1UFVBai9uaSt0YXkzakwwbXc4amxLZWV3SEJsbFo4T3pJKzRkQWZ6YWw1SHUweQpaZ3dRSi9aUDg3ak5YNDBmRC9wZmVOc1dHWUZsalJyYlVLVklFL1FTUnJiVDFaYW9Zb3ZmWWxkVVhTM2NJQmtqYnNvK05TTU9zRU9CClIvbVd4M1pBaG54akdQc1ZzaXJkZWtkMG00Nmg4NFFqY3Q5KzRjbFU1SHVlS1UrSm81WTlTN2tkZ013blpzWEE0MDgyaC9CaDdLZzgKRy9SVW41anl6dG1kOVh5dU1TV3dCWEI0S3pVcFVZNmZ5aUUxWkVCRFc0WUdjbHdyYkpqM29pSWxUUjh3bnNCaGt5NkFYWU4zc21WRgpoamkzVzhNY0F0R0szNDJiK1AreDk3WHRiZHpHb3VmemZSNzlCL2EyYnB3bXBCZFlBTHNiSjIwc3lYYWR5ckZyNWNVOWJhcERrU3ViCk1VV3FKT1hFK2VQMzQ3a3pBd3dBdmk5bFN5SnA5c1VpaDhBQU13QUdnNW5Cd01WNFNHVTl5QTVyeGlRb0gzV0Vvc2N4VVpIRjJpSlYKTHJaVDJjY2xuWkR6ODFCRlpqc241L0VWbVpTM2VwbzVDTVJuQWgzS2hBV2ZsRDZPSTdNTzlDTUh6aFJIcUJvWDZDTFJsTWhIZWVVOApCUkpQeDF3L1k3c2NQdDBvZUxwUUxua0g5R0plT1pNVUFuM2tBRVhGV2dUQ1Iwc0V3eDRBcFdMaklybkI2amJhMUZ0SWhYZnR5Y1JtClhROHM1TmhVSmJKSm9aaFlvNVVGdXBnVGZDYlFtemhTTHpkRWlCak03TE1rRmtpaGFCWm9NZ2JxbkoxcjVOZndrWDNldWNaR1BIcUUKbEtNTEtiV01CZEliaTJGcVdRU1pmZi9hclRwN0doUE9VZWZZYVBWSWtVVnVZM3AxeVllRmVzcG9OK05vMHl6M3prempnaE9OalZOMAprOVk2cU9oVnk4eUoxQ0xqdVlSbGplRTRlcmRoUmpHc3h2dVRoWWtGZFNwQ3ZHcnVLQXVCNUZTV3lSWE95dzFBZXFMWmtoQWp3QVhCCnM5bnVnOEk5VGVFa2o0Y1Y3T0tqc0d5dW4yamVyNVQwbldXL0c0WWhXaE9EMFA3NGpJOWY4ekZKdUhnZnl4bkZiZ1NCd29mRk9zY2sKNFpPZ0diTUx4S2gwd05SSkRtZm9aTHpCSFVablprYkE0ZFBzVEVKZzdqY2dIMWlySXc5VllzKysrTTZKYngvV3RXMGZYN3VRdkZ1aQo4ZExXVjk1UmpmY1NiQndOdm5YcHdob1FhQmdyekh3NXhWazhmZk5oTjVXK01jRGx4WnppMEdDWVVTS2FuWXlBM2x0eGE1OE45ZlNHCnJRL1F3ZGRlR0J5V1E2cFVBUE0raWo1ZTYyY1NvSDhIRjZxd1J6aDhwOTQ1YS9FeFNNb0U0c29heGt1dk5GcWdOOEJ6aUQvQ0ZKK3IKM1B1d0RxMzNnN0NqUzZUV05PdGtuWnNJcWUyTGxmWVo3MWY4T3E5VFNtMVJhZk5jV1ozT0JVMUxlc1dROTBXT0twWTJ1TkFpZFpHVgpJdlp6K2ttUFQwejZRemdmb1FWS2NGYUoyWDJLUlROdnN5eHNGQWdDdGRjdGZFQzZqRHdvaVJ0dllSVm0yL3ZNS2tjaXNZNWNOMTBFCno2SWtzck56L0NXKzVaSDdaWkM0VzBTRnRSdTZrZVoxUVBIZU9WOUFLUXpIYzhFMFk2VUw5NXAvY0ZtdlNyRjVKSEZQUjduZFJuSnMKS3MxZVMxWWMyK29Wamx6N0tGaS9nMUVRVWQyRnJ1WFI1bUdyNTlZNzRCYUg1S0tzeDZIV2FsV2JKSThGdHpZQkFia2luRERVcmlnSgpDamQ5N0RZeDc3WkVjQUNoZmRuZHhNcDlzQ3Z1OTRhdlc4Z3NrTW9HYWdRTDlyOUk3YTltQkpkZnFxeHFnbGk5QjEvNWUwWDRzQXlqCjlYSDRXYlFoc2M2WlpKR3pqTjdIc1FqUXBzUENyQWozdzlDMHg5SFFIUEdReE1ZVjRaejFpRUJ5VUIvczNLbnZtSDErMHdzZDExdk4KeDAwaG1kM1NCR1U2Qy9YcHdVWGJBY054TzhSRzZUYWF0SmczdUc3R1NDOXlaS3FpS1ZNNEJCUXp5SmNjS0FHY2JjNmY0bkFxdTdPMAo4YzRLQkdxdmlBamg1N2V6c2hucmplRUpydDB4MEZnaDY0QStSTm80cDN0UzJIZDRDYWo4aFNrRU8rK1VzU1kzQjVRY2o4MHEvYXpiCkYyN2xLaVpCUzA5WFhyRDZIMkV0Y3U0QjN3L0RrcWxoWU02bkxSUW9obnRBandOWklNY2FHL3NNa0FVYWQydzJWZ2d4QXZLbldMRE8KM1BnS3diWmhaNG16UlRsWXlkaGJVN1lnV3hxTjlSc2V1UHJrc1NRd1Nnekd5dTV5ekNpWm1nRE8rWGpKZDUwQVNJRzh5dCtUc0VDVApGVzQ1cE9IeUVOcFU4b3g1YXhnQmgwWVpLK0FkMXN6ZnMvRDNFbEhZRytZWTM2MmhmWWxQMkh4RXArZkFEZk9yQ0pzVis4S01EY2x3Cm14VnJuc3JaTUxGNjdxZDk2alYxTkhaeCsvVE1tZHMvL1UwSXIzU2hHNGVCdEJueFhpdWRwZzdkY3Q1QWZBZzdaeDAxMVlwM2NPbWMKMGlZNmc1QmlrUHZCTFZnem9CeWxLcjZMc2VBK2xPU3JqdVF2dFVBT2hhRFhibGx0eTNtdzBpd29YWEFBWVFLODBtWVM3aE41c3B6YQphdGdZa3JENFJLZ3pXMmovbG8xVmtpVVB0MDBrTTZaUUc3c1pXS0RSR2ZkS2E1NFlicGJZTGpnN01LcjV6a0dFWGNnWnFFSVBOQjhPCjUxK1hZeFhSK0VBeVBGTW8xc2hGNms5TGlXZGhjT2NKcDdNcmUwdWdZSUtENHpHNmhrZE9UT2F0YyttSTNGOVE5QmM3SFRnVGZuNHIKUHB3RmtlWk1PaUlmVy9nY3VJZmdqT1ZrbGl0dWl3M2Z4bDdENUpiNGdpNnBraTFHSUpnSlh1L0w3ZHV3YnJkd0N6eW5KeE1kVWhOMQp3Ri9zby90S1J3NmNKaXdvS1pDVzBYcUpsdVRjRm5zRWpGV2dHRy9xVDR3eTk1ZmtWRmhoeXQ5OVU4YmZ2UEZlZUJHMGllaHlZdTZ0CmxzWjdzTEZiWHFnSDh3MGlVTXhGVnNnQWFEU1BMYXVwTSs3Wk9iQ0xJRGIybnR0NFdXTXRQUmFZdXhCb1krMmNiRThRZmd2aElEV1IKMitnY08rT1Vab09FczZXNjYxNWNuM0wvaDBWcWdieFRPS3NWQS8ya1Q5bXZobWFLY0QrVGRlcWk0YStHRmU3YUJGbytKTjhPTFRnQwpHODBrTEdRVGR6aEdJNHZNK2FxS2xteGtrZjQybnZSSENnQUxMN3pEdVE3QlJlYVhqTC9qelRKU0ZuYXJSSmdMUXpPUmpZVEFPZ2JQCkxEdXpaRUF3VnBhN2xlWGFuNW10OUpUQ3FpUmpITVRIRlhsSGtKcERWUW1hOHc2ZVNHOXRDOWZpNmJLZ0JXWUpLMTFTMm10ZUFHUjMKWVh6UlVlSWpodHdhNytzU1BibWVYenBueTZCSWVhTVEzak9HQnNQQzMrZDFZWWI0ckxTL3V3NHJLbk5BY3R3NEVyd0RJWTF1YUJYdQpEQXZBUEdmMWpQWTNMcGt3MEhzWHNhenhWNTU0enFUK1pJWjNZKzNxd2pjaEN6WWVKWkVabEk0amRzbzd1NTd5c1VQYTV6REFoOXo1CmJsYnVUNVpvbk0zODN1RUhCaDl5bHJ3dnBnVmpEVWZMeE4zNGxtamY4SHNFcmhoR1MrWWVaVy9lZXdlSzltdE9Xd1d4VG1icklLUlQKTGRqdWJkd2xMTHlSbndack9vVkcyT1lTdzZaNzZXK0lzZjBOamZ4K0VFTkFnRVM3VzhSRU8yUFE3dWN2ZithR2ZTSjhZMWpiZ0NQMgpLR2gvWTVFamdoQm9XSFJ6akw3RVFBYkRVd05uTHlNb25LVnFyQWVGUDVOd3BBbTZhaFJQWkZXd2xvM2VIczFya1I0VnQ4QndTWTdOCnhua3NqaEsyYVdHNkJwMTZpWjV3MlZUd0ZVYStaVGMvM3dNN1lMUS9SOHFjNzVGcGVvaVR5MFdUMEZmV25IK0JacjUzZGlVOGpUT1YKTWxIc2V0QStRUWMveG03SHhYdUt3bG5lWlhCWVVKK0RET0tjQWVqYmN6R3FtQmRDYzFxSmNNL1NuVzNucHBvd3prS2tmV0FnT2gxegpuNGNnRVp4cmdyWEFlRlR3eFhxdGZWOVRMbHV3R2t3M2QyMUJ0dnk1WkFOY1h4dSsvbGs0YXhRaVZTb2VBd3MwN2s2UXRpZEdSaEN1ClZYTllUaHFPYWJyaHRBU3NML2dlTG1rc3ZyN3pxbWtNOEdGWE1Qa1ZDT2p1VXdDTVVrTW92aGp1UGNrcDAwOWI0SkVEODdrY0pZYkgKQ2dzZ1k2QU51MFd2dGVadVNSMDg1TnJuUzZBWUFVYkxKMVh0cjFjQ01OTktNVEJMUGRCMWxwUis3emYzYzlCcFA0alRlQWE0S1l3RgppMEt4ZU9mcGl1NTQ3Zk1jT0w1STlwQWJObFZqTUlGa2ZZVGN6Tjd0SCs0UDI3V0tSWFBKbmRlS2d4RVNrekhReHlSUjNBSFhWKzVHCklyK2RiSUZ1TDhVK0dXWnFHdWFLOUs0RjkrcTdBL29iek01RU8rdkN2d1ZuT1NlWFlUOGhCa240MVdhY1RvdWhIMTZJMHJwbEJPR0kKeHZHaStFQzE1T1dldW1nMURCTGg1VXAzcmpoMGhHOWphT3NyY3ZVRmI4VSt6aWIxT29xMmxsTkdRRWNIVzFaN0JHSFQ0bHRWc3k2SAp1N0x1YUlHN1F5NTlVQXp0ZHVOTEhpK2Q4eW1DWFVHcGlzNWNwTUZidk1ydlpYaGU1ZXFxOE9mRGxIRVdMbjdIYnZ4Y20wM3k3c0JqCmdXem8xdmFoYVF1a3kyQ09yTUo0QlBSeXRwT0RCUmVWL3BLL3RwNC9Lc2pYd3BYM3BXRUlWUkRaN2hvZ0FqUFd3S1h6cGFYYVBtZHUKRVlTSUZPMVZsMmdRdFhYbVdtQWlHQ3NsUkhWck1OU1hJZWNRWDhKREJCbXJqMlM4WUREYjhJTktoQmdNVDI0T2NNQVlNSmM0UnR0bgp0VDI1eWllb2NOWTFCRW8rekxMMmhWajVXT0FOSGRnK0wwUDdxcUhqQ3lkd1VPNE1oZUZxR2VzTU1tSHRGY0ZlOGFFSXB5TUgxczYxCnJuMHdiR3E4ZVJFWngwRjRmUCtCUm9NSEVTM1VmbTVrZkZjaGpTTS82R2FGQmRKdEtHWk02b0JCZmZSbkU0UTZodzJnVFZ3Z0lzYWcKZXNXQnc5am1aNUF3UEk4eTNqZlFzczl5RC9iRm5JRWVRZUhQN1FET0ZmY3JrM3hvU3d0TzU2VHhxR2haVTNoUGJUamlBekQzaHp2cAo0eHNMNnd0MlN6SHpzWlFoSFFOTEtEeUsrbk9CaUNJc3M1eVhRdWJTZmlBQ3IvMFo1N0ZBWU1vSDdOeTc1MVRpVFZzaHA1WUtsNjl4Cjl0aHBPRCtoaE00SzFuVmRwRFpkNEdmYm1NZzFJK0RBRTJObERTTmdLV21zRk9leTNxeUVscVIvN00xRVVhY3cyVVR6dEpmT2VJSFoKQmdyMjFKS0gzRFltZkxTejl2ZTM4VUs5NWdPZU1vYXYzcy9NVTVGRzlza2s4U0hNS3RWZXNiZUdLWXhMVnB6anp0OXhSS2czbExCYgptNHI2ODRKTFVVVEpwN080Sll0QVJjbFVjdWxqb0lPeldtYzJya21GNkJzVEJSQUJtT05NUXNZcHhPb1RRSkd0eUFMWmRVdG5tOXdqClVJblhvS1JrQkR6bmpMMEtVS2U0ZE9sOHN0cWFnQzBDN1NOd3RZM0lPM0pndmlha3ZmVmJhVGEyaEF4ekNvZFordz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJNHhYTGI0VlRUZmw5eVlTeVh0U2prdktESzZ1OGM0UXNqWFVic1MrOGNRK2RJeGFvbkhLTWRtYjI5S25NTG0wM2E1VXJLbjNNQXp2MwpWZWFqeTdTMW8zUDlZUEpMM0kxMVJPQ042aXBKR0t2eGxramFqUmxCSmpsVlZPb1ViT1hDOGxWc25sUzV2MTZnYmRBQ0krRHJnZHE2ClhQamFBbnNGM1pIZG91Q0R1clkzV3kxUTVrSFdpM0FkUXBvZ2tyU3pJNm5jK3lhMERWRjNRTzltNDZ0MUNtV3FGd2dwWDFoVGhRMkEKY3R4MUlUeXFpSncrSnMwWmcwNjl3eUcxOFFrS1hWK1M5UnMrZkdDNmRpbjk2WmNka3pxSlVzQzVHenA0K0dHaG1EclJBY0RDRzFISQpZWHZncW1mZXI1bmtWaUFBa0ROQ09JbGlnZXdZMWRhV3p3aGtFYlpYd2JkYWd0NlRPWE1nQUhQRG94RHVmbUJacGtvSEFncldPL24rCmxvNlBkR1RwNStxNW5reG9xTVBWVTdyOTUyQWg4eUdwYXJhKzhMbWtjQnUyR3o0bDNPY3pyY3VWQjdEUWZlMTduM3FzMmtaWUlWRFoKNkRNcmQ0eFBjY1hDSDg5amZNa1Y4eGFiekNzY2ZCMHF6RmN0RmRlWFB1eFArS3RxbUF0TDhtQlRrSjhGY3U4TjV5UFRYbUNReW00cgpHNS8yUmR0SW1pTUhscEkzVUhkdXdJeG1pYzlJNXBSK0JFcldwRlVZVXVQRnNmYVplYlNKNW85MFNoQ1d6SVNiS0ltUG0wU3dZSjFQCjV0WUJnNWZKQkV2TjFLVzEwb1p2MHVNNVBhclBWKzIwdlczQWROSDFHTmJqY29laEVJWjc0QzZwWWJDTVR5eVhzLzFDWjlGSlVSVCsKVnA3TGoySkw4NDI0M01iMnVMS09Cem1lRi9pa21QTjFYZ1Jyemh2SmpuMmQrN0IzWktLMUZ1RmR2OEx2YU40d28xR1J5L2lvNkt6QgpKdkZpeU9XZnNzQ2N4U09wZ1ZRZmJ6RjZrVWNYNzQ4Y09KdytpUGQxdWtmSjdsRE52akVqdkJQTW5WMHNXc0hCTTdyaEwzRUdzNHd6CkpDUE03NGJLYjVKR2VGMUgrL1JRQmswbG5HK1M4MndZNFNNWXRKVjhqQ0FzVGZLSFc2S2t0ZXJhS2VPc05VYmF5NWRPNHRpNVpWTHIKV2JZTU5LeVpFWmpYcHQwT1Rlb3ZQbXViamF4dXI5eEtOa0dDdXNCTUNUZHh0UlVUUnc2Y3kzeGl2aGh0WTAwY1pRbGZVaGFLWjJ4MApxZHhFcDMxSzcxdW51OXVaNEFYcW9ueE1jTmRwdTh4cy9aQmhGMXZWWERRWEV4WUV2SlB1VFJBVXNzRDFNejhHOW9pRVY5cUQzOWdkCkdoQ1lDWC91WVhNTFhYL1A0elhBbC8yRkMyclEzdmxoQ3NwUzZHYTc0TGJZZGE5dHVnbEdtOHZDSDZCenpubVFSRVorVHErRWFSTzAKOFhZTmUwYktaSlNKa1NKV0NDK21idkNtUUZZK01NMkRadXNTQjR3QU1DUWJwY1hMQ0RJdlkwbFMySTZsTmlUYmtwRVduRlBDeXowWApRNWNwbTREYnpUaGVjVkNTZzI1MGRLY2NTa3QvK0JMYUpTRlJVVXBrWjU3S1VPVk8vVEdQRTNBb20rVEVpZFBDVGRtTVpLUGt5V1ZOCjE1bTJkeGpkZ05uOUtBUFJ6WjJsK0J5TEZrOEFpdXVuVms5Qm9HWlhxbklPL2N3RUJuZ0RYMmFpaEsycDA2S3pMSElyQ1plMUtzdDgKWWhSdGc0SXNnaXlLWUVoZHh0Y3M5eWx4dFUzMFo0RjhGZFVkWlN5Q1BOcm5OQWV5Wm5sa05jdGRMQkVCL2VHVGsySHdpYVZRSWJFTQpweFF4L3VvTUF2M0IxU2U4eU5tSGlTY0xsazFRTkZpR09JWXlLNkpvQk1xelpJRmFlMCtadit5RW1XRWttMmdwbTJMSWJPTXo1cnA0ClF3UjZ0ZHhaY3pPMEh2aTAwNFl2MldJYW5jemJocHdYRllBcVJMYTRTNXM1SHQ1OWVzU1FyeWZ4dVV1MFRlVmhnWm5rSUNCUldQRUUKd09DbUNxb09ndjJ4anpYdFBMSFhhQzFXbDNNRGdWNWtCTmJtd2tjZEI4TU1wUkZpTGtwM1ZzaEZISnRUOERrSXdkNmFXTGd6VXg0dQp3bW1iaHF4T09Zc1NyK21RRXNBSVFrTEozSXJZWFBpNFJEdzE1dHlCTkFuV3ZUeDBJSUJaelVDa0tXc1UybDNkeFpKZUxaTSt2UStWCjVXVkFKMnZYMmNJYmxKMUZHMU14OGRLa2JkcldsLzd5cnJaSE9nZFVYckYwbHhrcGxSTjNsT09yRVNpOVBvRm5sU01IOXJ1QmRyZHMKRWViRkk0c21BSEllRWxSKzJOMmFvNEJXdnF6aHNsbkJDNG50d1FBTWpwSW9KWnVNWEIwc3MvTTAwcjRveFlNRmh2eWxSSXRGZ0ZZWgp2Nk1uWEoram9aMVRZYksrRDdSQmFPWXpWNGVXQk0vQjNOMGZBeUEvRWVEeVhuTjk2YlUvc2gwNm9KOXFMdmxkNnFORVlpbElZSi8xCm5KTUtwdDR2UEk3QXUyOXlIMHVjcHo0bFJGUldScm82WjNqQkFmREdWUm5OaThLa1hrK3pkNWNRcVRmc2NUSXRHaFJtUU1oN2hYd3gKcktjSVRocVorbXhpSVNJRmdHeUlOWGJ6WXdSaEsrS1luRnpGeHFQY09wc3dvWnBQOTA5UG4xc0V5c2R6NHc1bHpRdDViR1ppZDIrTwpoaWpXVVh6TUFlYXY4MWRUcEJKY256SWhxZGh5ZzhBUURPR2pWQkJCTURlNnpSVGJ5dmtjeXlsdXFBTitaQVdibVhMalUxR0YzUUN6CjdSVXNYM25ud3J4OFJ2aStzcEtSWjFIb1lwSTVkcG1RY05pTFRBeVU5bFlpbnlZb056NWJGRTZ1akRQTm9VR2VsUlFPZE1mc3R6NWsKcitBc21GRjRoTC9YbnhmK0htWXdNQ05RcC83TW5qQ0M2QkVGdzJweFFVK3orRGxyVjBjaHJBRkVXVXVaMVFhS2NLNElrUmhGR3FsRAp1Wk10Q0N5OFI4YWR3UUNZaDRBL3pWWllCQWMzaFkvSExKVDN1cU9OS01rOU9OTWNXc1ZpRHpVcDd6TFVMdmtReldudkFHTDloZVFYCnN5c2NibmkxT1EzRVlxVm9LTGJSR0VlRThkZXFYVVNvUld2c25VWVZXOU9KZGN4d3VzeHFnU0Q0T1RiTU82SEkyR3ppWWJUOXdtd0sKYkh0M3I5RlljT0N2ZFBtSDZQcUVkOHk0b05JaTg5ZjF0RFZXSHpnRVJaWk02QXFZbmNjYnJsMk9Uc3cySVRsckFCMUxiWDJYQmNXcApGVzUrNUQ2aGl1R2NRcHlWMFZJbzJDZzNMMlYvbW5LR0JYNkxoakxyV0lxZEU2L0lRbUt1M0R1ajZVNlJ6OE9ZUlp4U0lSY1FaMHFtCnkwS2M1SVB5aEFlMityektxWTAvUVF3NVh3dmttdzUwcWNXbjB4UjhjNVd2cDlteTdzMkJ6TDg0RStYa3hRdGdmSW1kOWdhZUJibFAKMmVXenlaTVE0T1JIV1NKNElvSVU1cWJjL1JZc3FUZ1RRT0ZqMFFzWFFPNEl0eFlGUkJDeVdXWitkcHB3b1paVFY1QVAxRi93VnpuWApWNFZQNE9RT3VXVHQ5d2thL2MwcG1qdDhiNGZNZUE3b2N6VFFWUW9MVEhOT29oVTg0cVErZXdRdUJvYzJBbjRveFVzdTdZTXMzWXpnCmRhLzlGWEM2cE9qa2hyK09xMTAwZlRILzdRcWZTNXoxMkVJMWZBSlpUaElCc0pBQ2k2NHJIRGpCVldTY0Y0WHZpaGNxem1mcER2UUkKZEJsZzNMTnRYazRhbndEVk9TUlFKQ3UrVWxpd25FWWxKRXhPUGg4Z1dETUZWZ2tycEw5eEdsSVRJVEF0L0pwaEpiSUlJYVdaVjhJSwoxRmo1cWgyY0U1UURxcHdUUmxORU9TTlF2RzdKdEdoaDRRWS8rNDBMWVUrbGJwbjVJUlRldmg1eXJTQ0N6TThCdTMvVDVzWEpta1RtCkpRU0FDNTlvMWFXcktVU2M1MVZuRFBUWk5LbFRYRDljZGN5ZERST0JCVjlMejl6UkZZRDhva2h1azEwd2duQi96eWtnQUl1U1VMa1kKcWdJOXJueTFOZHlKS1pJb01RM2QySEJsQmFmbzVFd1NtQWZjTUsvOVUxdEZlT1lxOTJrWXB0T0wvMlB2YkUvVURwM2lHaVN5d2czeQpmQWJZOElrbUJ1YXpnRjZaazlFTmJBNnZHTXVPUzIrcTFlT3prOHZnM09MNm5yNm9xQXJKS3p6T0NRSmM2bms2S2ZLVllweEdqakswCjFQSUZaT1VQb0J4NWt6VmNBalE4RmFjc0pCUnJBWFNBOWhja25VaWtvdjd1c2JzMGhEaDk3bXE2VWVZUkpEeWJwZFBsaEErMnhUdVAKR2RlZjZEN1RsZHBKUUFLTFRLTThZa1hCYm5GMmVDQlFlL3UxTXczSXlENUhPZEVQcHVwek5wbzg5UmZldFQzTjF2bXM1RjB6bkFpVwp3TjVqVlBnekdDZlFEdFpqQXZJWmxqYWpDSUdjYnN5N2dVUkFPczRCWk0yZnZ0OUwzSnllT21PZU05aUg2ZWFhVWFYQk51dkNSeENvCnh1SnkvQkV0dkdsUzhCbVhuN0h6MFQ3elQzalN2NmpHbmg4NjR2cUQ2N0lqcWpUZUlzT3pKQ1FlZENlT21mU0haOW9tN2xnc2VVY3YKOWZmSTNEVVpCRXAyNFpJZVVGOTh5V0xtSFltUWZvVURCOGFCbkpwbnhwV1FNMmU0RHVsZ0tkWGp1UWZQU0VVc295ZllDbmF4VCtNNAo4bSt3VGVTTzREZlkwb0szWE9tQ3BNZHlSMUNpZFFmVUxLYkkyblhBQ0xSUDJzSzN0RXg0R3BMdllNeEtYc0hQc2sya1B1Qm4yYlJYCk1WS2ZVQlBBSVJrWDU2ZENvRTlBUkM2S21YaTV3ZFRlR0ozWUhCRHNjM2R4Vm5vQyt1eE1ibnJPVDNNUVV2aWxMbUNjRVBpVUFESFEKNXpOZ1BXRzZYMGZoNWFLeHZHejhjQkZmR1VhdzVyeHVRWkhtQ0V6MG9mbnNWeG1JbUphckh4SW9zQjBvRFJkZFFyNy9HWG5oN01LYgp5dnQwN3NEK1lqMWZMcE9adjdxUk5WekVrc3lpYS9uQlhJSFZNMVpPcFl0N3dLYUt4QVBkdmFDcDlxUG5aOXlwT0xjaHMrSGxKZW5CCkNiK2NGTXJ5YXhiemt5R3l1eVAzQVpzSWpFdldaNzlUTTdOYlIvNXB6cEE2bFk3Ri9EUW5CemI0WFZWbTNpU1grU3VuOHpsWkdNNlYKeFR1NHpDUEZrNU41VEhlQTN5Y2lOWXdQc2tiNHQyUHp3ajgyNHRPZ0U5Z1hkdStTRUpCbk5SK0ZreXpLZEJFZUg1aHFMVHhoTzFIYwpkOE1uMTZVem5lK0dUMnFnWE5aT0JHWWgzWWd4ODdyQkRZYUUxM1NUYUVtRG1UOHArL2VXTXA5NHlyOEdONFUxdkFMRjkwZHc1WXZ3CjhpZm5PblZKc3Z6empab2xxUmFDVTM4WTVWOEZkamxCcC9HeUNFeHNXaVA3QTZwKzV3NmNwUDZwME55L1laZjdqSytjMUIweGUxSkMKdXRMNVBRN1puL2o1QXhFbmx1ZUhnS1k3eGoyV0RjbUdaSm53VzZ4Q2VEZVQyN2c1RFVBUkxJWjgzUnZUc0hDZ1dlS3lEU0lDeFc4bwpKb2tJdC9qVGNJT04zL1FVM2lRVll2dW0raFUyR1JPaXgvaE5XN3h6WDdEN2g1MXRWSlNOLzduMk1CL1BRUWxOZUl2SWZEUWxSNTRnCnNQQldlbmNVbTJxZlpYWnExN2RpNitJNVF3VjcwQ2djNzhpQjB4RGVKMU8rM3loOVVBajNkd290TjZkdDFLamQ2WXgvMnhkVHhiR0cKRVI2ZVFMRGdrNzcwcjM5TUkyRzVhYUlRQXUySk1UNjd0YlladFRucG5uZXhrU0ovTkJQRmtYL2pMbWliZEgyQW4vZ0tGOWpDeFExTQovNXNHejdUZ21HS0tjN2VvMDR5QkUzaDV6eXA4dm1wbjVqOTM0RlJ6bUFiN25URzRVZm43SjRYbTRFWmp2SldlRFZCWU5IaDkrYlhBCndsc0JkY2hyUE5VQjFrdVR5TjFDRjRiT0hUZzhSb3ZCcHh6L0VSNEpwY2pnbzlrNGp1Z3grYUoyOTlQYXl4L0hQczE3WUY0ajhPVGIKZnUvNW9OTWJkWHF2Nm5VTHBuZm40eC8ydnIzQVgwUmlmenIrNGZHalRoZlE3TjN6SDJ0ZjdOMTcrZlRvMjM2N3hJK0huZGFvMCs4MQpCKzhXL1hDL2R2Zlg4MjRQZnFwRHR3YWQwOHRST2Z5MDl2bmV2UWVEUVhPaVJPdDFwOXNlbEQzOFhkYnVQZW1Od20vNHoramRSWW0vCjNRVk41TTZudFh2Zjl6b3RBQjhEM3Q2cjhhSnZtOTFMVy9hWFRudjBlbkhoWHZPY3lrSlhYT25QMTVtaTEyWG4xZXRSWlpLNCtJM1QKMUQvOXVXeU45dnVYdlRiMGI3Ly9hMVVDejJpK1FkSFJzREtWWTNWdW5OUUhUMDRlZEM5ZU4wOUVWUm83YlNpNWhDWXNjK09rVkorSAo3eW9QenJ1MXBtUEp2SXpvK0pYL0x1N3V1b2pKMGVYZzlMSmI5bHBsVlZiWXFoVzV3ZTNjOU1EQ0VhOHFQYWZOWWZsb1VQN25FcGhRCmZicE8xTHB4Q21WVjhucVg1ODlhbytiYnNycWNqS3ZjT0dHOS92R29NMm90Mlk0RGZVTXEvVjJudXdLQlkzVnVuRUpjY2xXcEc1VEQKeTI3MWZaeUxWNUZBYzdvdUZuUjk5bTRVYmNybGR4WEZTZWp6QXZhdjhiaDBla3NXWUx4Rlk5a2JuMldkWGxWYStoZmxvRG5xRHlvVApGQ3JjT0ZYSC9jdEJxM3c4YUY2ODdyU3FEOVlLWTNXTGkrZWdmMzdSSDNaR0s2eWQ2K2dIYWNsVnUzRHZzRHlyM2Q4ZEFkZVBvdDBSCmNBYVZhM0lFVkxzajRBeENka2ZBV3hHVFo0TW1hUHZkYi91ZDRaWWRBaXRiV2piekRGaFppdXpPZ0xzejRPNE11QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJT3dQdXpvQzdNK0RIZGdaVVczY0dYSUdpVFRrRHdzRm92M3hiZG85Zk45djlYN2JBUTFhWDIzSkFXb1dTclQwaVZkYTBoNlAyWWZtMgowOFFPcmFDS3hwVnVmSVJQdTVkTFJQMEgwRVZ2UlVjZ1k4dTJhUWlQbTVmRFlhZloyMTg2Yk91b1lGZGVTZTNxWXJHOTFvZnZkbldwCjJQNzFGZ2pwbjUwTnk5SHkyYlI1UW1BVndiWXBxLzhaamRibXJmc3VhcFlZWGRqcWQvdURMMzU1dmZTSUUyK3E3N3JWclkydTlJM1AKdHNvQko4UEx3Vm16VlI2M21xdFFOVmJweG9rYlhwU3RaNWRMNXQxT1FveEppQnYzRFZhZWdEQ1lsOTNtNE9HdkYvMWUyYXMrVHRNVgpiNTdLVllrODZQZUdvK1lWaUF3Vk4rbWtBc2MxK0U5Vkp2MVdtU3UvM2NiUlU2eEN5NW9mby9VS3BIendjL1MxcUNMUCs1M2U2R2dWCkE5UDEyQ3JMWTdkaWo1eU9zWG5hMFpXT3F6dnZ3MjE0SDdaVUUxcVJyRTA1TGwzQm5iSXVNcUh5YnZGbWlVNFVqUVVXdmZrNGpNcUUKTExHcHhJU29kZFk5MzZUVkNVblhtcERxZTh5YjI5aGlWcFphNjc1bk5nZWQwZXZ6Y2xUZHNiMUplMmUzTTNyZTdDdzdpMjNlNXJtTApTS2k0aFc3T09YcDFxL2ltak9mVGN2Q3FSRTV1bmtxMHF2elk0aUc1dm43c0FvOCtqSTRsZG9GSDZ4OTQ5SEZkUGpubzk3djdnN0w4CnJiTHJiWDBEckZhWWpPdHVHYTVNeU5iR1Y3VTczV1oxZi9BbUhYa3EyM00zNjZ4enZaRlY2enBHSkEwckVuSWJRbEUwS3FlRkdEVGIKbmN2cVd4Y1h2ejBWdVQrNGVOM3Y5bDlWRnVicmMyelpYdWwyL1hlWTFsWVVyTGxNcTM2TGFTZlRkakx0S3ZyM3RnVHlubGIyaG15SwpFRnZoQnVPYUM3SFZMZ0t0SXNWdWFjbHZhdmp1OXVZSXFMeTdiR2FPZ01wUnlic2NBZE1FM202T2dOUHFpcyttYkV6VjVmbTY3MHlWCngyWlRkcVpOenRxd0pOd21FZ0tyM2JtNHBjc1dLMHl1dFE5b09hMDhOanNodHI1anMrNUdnZ2VWWFVFSHI1dTlYdGs5THJ0bGF4VWoKMjNURkd5ZnlSV1UzMFZXSm5LNTRhOXZSWVdkNDBXMjJ5dk95TjNyYXZOaThQZW04Q2FncXU1TTM0cXhVNC8vV3BqNktzWTlWcWFaUAoxZFZ4TG43emdyS3lzV3RqTnJIcW9uL2RON0hWY21sdWdDWitnRGVrbjFZUUgrc285cXJmejl6RVRDbVZyU2tiSXdlcXI1NTFsd09WCngrWWE1TUM2ckw2emxZSzd6anJkN2lyQmE5M2JVRHFXcUFlUmZSWWZwYXB1bDdXbGIvN0dTbVd4RnlqenpYOUwvYTlJNFVTdFd6RFEKOWlyUHhHYXJkWGwrdVR4S0lpWXZxbkx6VnZYS3M3SmRQVW1UTFh2anRBeEtPbWhWSHFwMnV6UHF2RjFob0h5RjliM25kamJvbjFlWApoRlI0ZlQwNW8zNzFrMlQvRmdocGRuOXB2cXU4Z0VBMUdqVUhLNmxTdHZ3dDNHN3JsYzNLMTRWYXpXN3JhYi82bFkrb3dpMmRUSnE5Cnp2a0tFdnFhN3Foc2R2cTdlcjR0WVRPdFhkak11aDZGcWcvTnBwaEVkbUV6OHpidzJ3cWIyZmIzRmF0blU5c0Z6c3l5MDkxbTRFeHIKNndKblZwRG82NzQzN1FKbjFtaC9xcXlOYmtiZ3pBcVRhKzBEWjFwYkZ6aXpSVUpzRnppekM1elpCYzdzQW1ldUdEZ2pQcGJBbWRiVwpCYzZzSVByWGZSUGJCYzZzazlqYjZzQ1oxdFlGenF5d2V0WmREdHhtNE13bXVJZzJKL3huaGFGY2RWTGUwbEJ1Y0xMQ0ZRTFNkb094CnVYazlObWNzcnE4ZnQ5dUhyVWtaK2VESnlTR2xDanBaemI2MFpVR3MyNXN1NldieVJLL3I1ZHVQSVQzUFRyNVZrbTltSjk5MjhtMUQKNUZ2bHVicVRienY1OW5BQWdJOWJmU3VSQlR2cHRpSFNiYWU5N2FUYml0THRvMWJlZHRKdGs2VGJUbmZiU2JmSzBpMTJHNTJzNWh6ZgpNaUZYbWZnUDRvdmVLQy9oYmhHdHNJaXlqM2tSVlNaK3Q0aDJpeWkrNTUzVWRPVkFRRXYyaXhWaUFhTWFONjZPZlZ5dmJUM3YvRnAyCm4zZWI3MDVXdTQrNVpYSndVSjczbDZXTDJPV2t3WTdjVms2YWlrSmtsNUJtTVhtM21aQkdWSitUdTR3MHQ1aVJabHR6bnd3dk1QdEoKVmJyZUsvZkpEVlBXNmJYTHMwNXY2ZnZYOGFoZGxNM1I0UXJMTEtweDg1S2pKdTdMcENZMC9KdlU0UC8zNFRQOHZROC8xSzc5UHNxdApIRnRXVG1TekxxclV6UjRwYnpwZWRvVzMxamZsbHNBV1BwYTV5akI5cEJjR05zTnpzKzRYNEpjdGhNMTBzN1g2NXhmOUlXZ1R6eTZYCnlLL05rM1lyaVlZTmliTS80UEhhUExsUTJZajRab2w5S2hvTExIcno5cGJLaEN4eFhNV0VxTnZRdFNzVHNpUXNKeVlrWFd0Q3F1OHkKYjI1ams3bVNncmJ1TzJkejBCbTlQaTlIMWJXQlRkMUJ0eTRINVZYVWc0OXhLOTBjOThlVnB1dW1ET251RnVMTy83enpQeThpZEMzOAp6NnZsWE56NW4zZis1NTMvK2NPVHVmTS9VOUdkLzNubmYvN2dkTjNnMnhzNy8vT0hWemZSQXkyVCt5dXBuanVmODg3bi9MN0U3WHpPClZ6TTNyUEV3N1h6T2ErVUFhSGZPemk2SDVVRy9CNnBCci9yeW1hcDM0NVB1WGRudDluK3BTbWUzOCtyMUNINnZ0ekFKYVdVeUo2dmQKL1BaYldieGZEczVBS1Q1ZTdTR0FzVXJyNjZheXdubzEyc2JxM0RocGJuMXMyK1oxclNFRTZ6MUVXL3dzOGM0RXQrNG11RlcycjUwZApibzN0Y0x1WGlYZDJ1SjBkYm1lSHUrSng1LzZyUVZuMjdvTWFWdDRIaWp1dit2ZmZkdnJkY25SL1VMYnY5d2ZOM2pJLys4NUFkOU01CmJpcGJUTXN1ZkZuSlBCZlZ1UG10TEs5TVdQTzN6dm5sYU1tTGxySGc1L0szWnYwNTdKQlo0d2pWcmx1T25UbTB4NVFqcHdGdTNnSUEKeWJUdFZocXgxV2FhNFVYWkFvVjVzTHNTc2RiMmpCVW1vUnZRaDc5ZXdGbHJCYXZ2ZE1WYmlHUllsY3FWYmR2VEZYZkduSjB4WjJmTQoyUmx6ZHNhY25URm5aOHpaR1hNK0FIMW91ckhHSEdmWkladk96cGl6M21mWm5USG5mWXc1dDZGbmJWdGMwaHBacG83ZE9XbHpUVk5iCmViMTRPeE56YkxFUjZncWtiY29GMUExT3oxRTloOEl1UGNlNkViTG02VG1xRTdMbTZUbFdEYUZiKzcxenUxTnpkRHVqNTgzT01rdjQKNW0yZ04vTTJ6bTRMdlQ0NXQ5dEMxMDJwV2ZNdGRHc3lYRjFKK2Q5dG8rdXdqVzVkZHF0VjlZT1BjUXZkbkVDQWxhZnBwZ3puTHF2Vgo5bVcxK3JoU1B4Mi9icmI3djN6Yzd3NVZUbnExUzF5d0h0ckJUU1F1dUtVZFpiTXYrMWQrRHJSZCtUVmFLbnJqTTZ3NklVdTJoNWlRClgyK0JrUDdaMmJBYzRXd2FsTzJWVnN5bUNJTnR6Q1gvakVidG96b2pYSDJpYnNxZ1h1R3dzQzZEczlWbTdkMGhidnNPY1VJbGQ2ck8KMDE4NjdSV0N5RnpwbXpjenA5VXBlbDJ1RXBQbGk5Kzhjdkl4SHJXdkljWHlEZE5TRjdyeVZLeXU1OStHbXI4S0pkVVYvVjgzeS94aApkdWFQelRyeDdNd2YvZlZVay9OdE1YOVVKMlJuL3RpWlAzYm1qNTM1WTJmKytJakdaV2YrV0hQengwZDJzQjQxVjRqdjJrWVA5dG1nCjJSbzF1OS8yTzlWRDRHM2xpbVBNTGQxMHRHdWpjaWFaMCthd2ZEUW8vM05aOWxyVnRldUpXamR2MWFzY3o5dTdQSDhHWS94MmhhdlYKY1pVYnA2elhQeDUxUnEwbGh0WFl1SUNsdit0MFZ5QndyTTZOVTlpcWJNbmJsTE5FNi9vQzlOWjJiSGJKdERjby85SUtRbjZYcm1neAplYmVacm1pWHJXaUZnYnE5YkVVcmFGOW5nLzU1ZGVGQmhXK0JuTW92VkkzNjFUWGovaTJRc3NzalJadjhMby9VL0R4U3QySk5Xam1iCjByVllrcjY3SEp4ZWRrRkYyRmhUNHk0UHpBWmN2bHZoakxFaHB1QXIzRTdibVdFWFduZTJMZ3B0QllwMlVXZ3pxTHgxWTNuWUhFK1cKWEt6ZmdFaTA2cE54dmVQUXF0T3h0VkZvbzRwSzI2WTVNSkl0OTJCVURoWGFPVENtQ2J4ZEJ3WXV1V3QzWWR5U0tyczdBKzdPZ0d1MgpoSGFud0pYNnNUc0Y3azZCTjBqVFIzc0tyS3lmN2s2QmEwUEgxcDRDdHplUXJYSkdpYzA4QmxZbWIzY00zQjBEZDhmQTNURndLUzI3ClkrRHVHTGhWeDBDOWRjZkFGU2phSFFOblVIbnJ4OEFmKy8zMnEwR3p1bEJlMnpOZ1hXekxLWEFWU3JiMkhGajVPTEhMU2JFZVYwZHUKNW9yc0dnL1VwcnphdDlrWk5uWUpSaGNSc3N1d2NldFNZTTBsV3I5Q1pvM05rMmtmTEYvSVRWdTd1NkIvMTF2OWJuL3d4V20zMlhwegp2MlpCL1l0bXF6TjY5OFVLWnVQaDZGMjN1aG5jbGI3NW1HbWtkZHNFeEVwRWJjcWFlb1FUY2ZPVzFQdmswZG5aVG0vRGRycjlDc1JxCjhtSE5OWWdoWlRFOTJFYVJ0OEh2RzFaTzNPRGVTVDNvOStqeDl1cG5pOGw2Tno3eGZubTl3dVhKcm5zSXZsNWg3VVZVVGxhN2NTSXIKQitNTUx3ZG56Vlo1M0dxdW92V05WYnA1ZjhGcWduMDEyc2JxM0RocEt6NC92Q2s3MXpZZGZWZDlJWHA3ODhLWXlrbW55aTU4V2NtMApIdFc0ZWZtU1ZoYWZ6ZDg2NTVjcnVGaDkrUnNuaXJhazI4eG1kQzJxMW1HSDFJaWpWWnpDMTVRdDROREtoU08zOVcrZTdyZFRqRFpkCk1ickN5OHM3RGVJVzlwZksreVlQNk1OZkwvcTljb1ZqMW5URjlkWFN1YThybnlXbksrNjBwNTMyZEgzYTAwNTV1amJsNmRndDVjM1YKbm5aUjFodmpLZGhpTmVrS3BHMXhIUG02eUliS3F0Q2JKU1dqc2NDaU4zLzlyREloUytJTllrTFVXaE95SkxsUlRFaTYxb1JVMzJ2ZQozTVpXczZwWmRlMzN6dWFnTTNwOVhxN3dvc1FtN2FIZHp1aDVzN1Bzc0xaNUcraFdQOUd6d1Z0b2RUbTMyMExYVGFsWjh5MjBPaUZyCnZvVmVTZm5mYmFPN2JmVDI2Zm9ZZDlETk1WWHZIcFZjWTgxb1c1ZmFocjRudVM3VFlsc3pJRzE5SXR6ZFUzNmJtd0twYXBxZ3pWUG8KcnVUZTJveU5acE56TzUwM0FWWGwzQ0tiSU45RkxYSC9uZlhKUTZxU1RKK3Fpdzh1ZnVOa1A0YXF3K1d4WnBzbk9GWVhpWnNpTitqdQowdE1LQzNBZEJjZFdKMGJaNWt1QVc3d1JiM1pLa1hybGM4bTY1eFNwYjAxU2tXZGJmeWQ0bTQxeW01cU80K3F6YnYzZE1kc1pFWWhtCmZSeXY3MjRpaGZHNm55dzJSVHhzY0RTRHFQNGk5aWJxMy9GeXFuemxjRlBXMDFWa3hhWXNxYzNXd0hGa1hwNlZnMGVkd2RhWlVkWkIKaXEvTE9JK2FwOVg1c0FrMlQxbXI3UE1oMm45WXphZzVWdWYyRW9GZDlsb3ZOaytvYk4xa2EyUzFwUFp4VExmSHUrbDIrOU5OZkN6QwpiZitXQTFYb1BJU1h2YjhiTkh2RHMrcXZYYXpQN0w5aTlQM09hSEpiUmhNN1lOdW9jRi9sTUxFcHg3d050cHhRTk42RGJ2ZmFwOXZtCkhJZXV0ZzQzWmE1dWFCam9kZlRoS2s5WTNYbndSQ1FuRDN0dC81UVZnalJDVHI3dDk1NERDc3JIVkxmZy9mSlZweGYvc1BmdEJlRlEKOXFmamQrZW4vZTdlM1FmdGR1MVI4MjEvZ0VKa0w2azlnUCsvL0dYdkV2NmIxSjd0SlExVFpIQ3FiUWlWcTh6RzdEU0VTYkpjd1FlVApKVHJQNFVPZUc1bnAyc3ZtWG9qeGVma092bndESDM0RzBDODFrZFNlMXY3NVUxSnJZd3N2OXVwSlF5a2o4NkltUlNQWFN0Zk85K3JDCk5FU1JLQ2pjRUZxb1dsMnFoaTdTdklhbHBjaWhqYnJVV0RHdDFZdUdFYmt3dFlPOUFCT3lZZklrcXgzdFlkVk1GMUJWSm8wa1VRVjkKa0Zyamg3U1I1QWJRaTZ5Ukdwa1NKRFdGcUxXb0R6cHpNSWRVTjNKcHBJVkFWd2tpbE5JQmd2V1NScEZMRlpVcUdsS1pCTnVURFNscQpkVUNUNU5pK3lCdENxQlI3N3JsUUY2SUJ6UnJvdW1vVXd1aFE3R2d2YjZTSTBPS0JocElpU1VORFFnRmRjY3V0UFFBVktiYnB5MmdZCnJWd0dxb0JNWlFvWmt5NEsrSVRNWnY3QTM5eGtXV0FoRG9kT1plRHp3WjRIOFhBY0VVZ1ZORUxhQ0MycFdxb05BUklGTXdZQkVzZW0KZ000ZzB3aFBrZVRZVmlOTnRDRThSYU1vbElsQktjNjFGRkRqNE9aWlVVdEZJODBLb0QwRHBoaVRJNEQ3azBvcHNZc2VCTDB1OGxSWgpQREI1TGNzSWhHeVJCQ2pzTU1EVUVCb0hENHFtS1l3YThBZG1weWdNZ1ZRS0k0VFRRSnZNQXNaR2dnR3RQZWhYWWxJZFFDbndRbVRZClVvYWpxbXZSSElBQk5pS2xpYUdnUHlyblVraGZrU1JwRWZDRVNSZ2F3OGxMREk1S1FRZUV5RUtuY1ZvbE1Lc2l3Zz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJY0sya1F1cEFmUjE1WnFRT0RLcW5NcXd4Z2tBblBZeVpEZXNPYWhwZ2dXakl4Q1FXZ1lHeFF0NklBbm5qeWVVK3d1QkRZYTJ6bXN5aApycW1waGxFNVRDQnBZTVVBd3cwc0NLVjFEWlo1a2lvSkZUd0VhRWhTYkJmNkM0c2lqU0N3SGtWUlNJbWdYQUE2WFA0UzBjS2NTZU9PCnNBUTYyRHZiKzM2UGhGZDd6OVR1ZmxwNytlUGVuWk5ab2dxZ1Z4UldVSE9HdUVMbzFRU1c3Y2xWUkJiV3ZJclFpamtTaWEwN0o5T0MKNjg3SnlxTHJ6c21WaEJkVXU0cjR1bk15UTRCWjRNb2lqS3BOQ2pFQVRvdXhPeWRYRW1SUWJWcVVFYTdWaFJudzZ5cmk3TTdKRlFVYQpUSm9yaVRRN3ZhOGcxT3lLdW9wWWc1b3pCQnRDcnlEYVlQeFhGVzUzVHFiRkd3elhsSUM3YzNJVkVYZm5wQWZhNjkwSHZYNnZWa2hECk1zNHBlMUM5S05JQ1dDMThzRGJvZElRTW1BYnp4ZVFGU2orR3dKQVdLcVhWRDNJQVZwU1lCZUo2UjZST3dtUkpaNEZ3a1Jja05MamUKTklSNGxwRnU0SG93RFFtMWFCQnhlS1lnb2ZsSjJvNW1id0hUTEFpd2lHSVlwV2syQkdCb0JJZHVpaFVSTUhRNTFKNEZDK1NIL3N5Qwp4WFduMlJKZ2NXZW1XUk5OSGVMTDl3Q0JRK05vN0d4TWdnWFdURkZUTU9FTlNFT2xZZlZSZTFKSmU0aTQ5NkpzZG0zSU5WUUFsRTlFCitoeE9vK1dnVnh4M096YnpLcHhhSGc4NjdiK1ZGRHQ1NTBTN00xZFUrQVdjWllhakFjVkhmT2VPWDhERzJyMzlmcjg3VnZKaEQrM0wKank4N2JYdllCZnFtMFdHV3pjRW9JSUpqMThsZXdiUEFuOERzMlduR2FXci9jalRxOTA3NmIrRjRGeCttL25RSmZEdDBpMnpPQVVtTgpuNCtTMnFzOWtCaEpJbkNQeFRXWDB3YzgyZmhQSUdhay9iMXVkd3FaNUxnbjRaZk1LbWcxcTVUSkd2MkkyR3dsM1BrTGxOQXdNQUpWCk1QcDd4RzNTWnl3SnV3Wjg1dnE2UmhoQnA2WVdqdmE0MlFKT2g2NDRkaWZxT1NwVkNSQ2ZDcWg0am45Z1dtall6VUVvRzQyYmVjTEYKNFpQdFNPTElkQit3WUlZOWdCNG5FcVU0NFRDNDZSQmFwRlRZRHRFSC9GWExyT2FyZ3FKVHMzeHpUZFFKdGU5bVlvOGIxQi84eGtpdwpDWXY1d0JKd3RMZC9pbXZnK3g2ZTBOdTFWNE5tdTFQQ05Fby9wVUd0RnpqQUlycnRJbXI3ci9DY2wrQi9VS21CM2hnOE5CTUFtc3NGClNQTmNBRWRlbm84VjFETUxTdEJiOWxzVk1lNVh3UWpuZWNTSXc3Uy92L2VuNzJIR3czYWl3elNOMkhRZU04OTlxTS84RkhOK2JFeVkKbjNYSDBMSGhuQnByT3dzT3duU1kvc3R6cDdzWFRha3d6OXdNNFFrU0QyMDg1QkdSclhtRExDc1BNaFFDVFcrTTB6a09pWmdjNUhSbQpRZFRlSmdaNVBzYjlLaGlGRWRFZ3o1SGNxZ1pUUVlEdWVRTkNXdHlXa0Q0WWxPM09xSGJRSExUbkN1bHJNM3RKUStzVlJzeDlza3RGCkZuVHdrMVowQ3diUUYrTUVPUjYxVWxMNTdUZjRBcnFhKzBybkZ2cmdrYmtQaUJUYWtxaFoycjhrNnZpM3FJcEZZMlY3d0Q3V3N1dVEKKzhCWW92NDdxbGpvZ3hZQXhjL3Bid1pyRGRRTjZmNktBZ3ZEdndmRUMvaUFyQWcvMXFNNmRZc0hTeFp4MzZhK1VkL09YREhiNlhQMwp6VmhXMCtIQkllVVAxSnFodjhTak9uVW0vam11NTdBZDdFV05ISTAxaVYwQU1UcFhQUUxOcUFhYXZCRGJyQXNkTmtmbG8wN1piVStyClEzYUphV0VVTFRLVkNnWDZaZlFoeWJRQzdSYktKSEJDbmZXQjFoeXN3R3FyTGlQVm8yN3NmZ01EakpNaDR6OFpEUmdneTNScWNJRnIKYVpUMmQxVkJNMDV4bjB3YVdacEpQYjNlNFF5SDJMTWFUYkhNYmpPRy85Z1pDZHJkSHU2K3RodlVNUDVGclZyN1AyYStlcUVYN2p6dwpBKzVjdWhhMkFSRDRDcVIrbHVHR2srQjVSTTh1a2NQQkVuZUdoVGoyRitPQTAwYllXNGllYzA4ZS9sV1dQaFdvdlpJV3RhQ0xaaW1aCnlWSXl6Vkl5ZFVUbUpWR0dtbmtkTFJKSUthcWpqbUwrSytiVGFvcEFySnBKYkk1VEF2K0tMTVhtbFNNU1ZhcjRoMXc1eXFZcjdNK3MKWU9MeGdsK2twVUphSWhMYmQvZEhMcWFnanROblpTSWlmVVdrRThSa2k0aFpVSEdTS0cySjBwWW9OeUR1ejRJcFNFU2w3MGVTR1M5UQpKRlZKTW90SVN0MTBFMjY2Q1RmTjB2RDNRMDIzSko1dTJUZzhGOVBVSlBGc215Zy9TWVMwTkVoTFFtSjc3djU4d01tV3pGc3h5WndWCms4eGJNYk9Jc081S083bEV6YkhmL2ZsZ2t5dFp0bDZTT2VzbFdiWmVwa2hLN055U2RncEpPNk1TLytjRHpTdVR4WU9pSnVENUZDRmMKZm45VytZbitTK28rYWJjMG14TDM3NGViVXVPOXo4YmhNMWJGZU8remhiMG5xeXJOSEZtelBMZi9mcWk1Tk43M2FIYmJ6azh2aC9ITwpUMVlZNnozSm4vTTlKMzYwLzBNV1Yvdm5ROHdkTllmN2FnNzMxUnp1cStuKzQ5elJORk0welpyVS9mc0I1NDZhTS9QVm5KbXY1c3o4CkdiM1gxSHVyUTFxZTIzOC8yTnk1TnM1Lzd3OFUvdkNkTkFvcGhmQXVDUFNzQ0kxbmNGQzdCVVdPS0s5MnhTdkZxMkRDcXZPQWpYYVoKYzk1WGVKY1IvRWZ5UVUzVUhseFEwNnJtbFhvOFFyaElsWXoxKzFpeGQrcitIUDVtaS9YMUNha3NzbkZkTTdWellsS3BJTFYwUnRGQwpXZFcyR3RaSmpXTWVWcU9YMjR0U3FDd1MvaWR0V0p2aHRoNW9CLzJMZHYrWEdlWjlzaDBsT0lsV3NQSUx0dktUcVZPamQwaVRsL3A4CkNuTGtJWFhUVVBRaEF1WGt0VlZrN3RRWnVhaVZxKzVLTU9CZ0Q3M0xOcmFnOElpOE5kVERNQ3dBaXVtQU8wQk13TVd3ME0xRklJK0sKbXl0Y0dkOG5CbEI0QnpWU2VEUk1IRU9ZZXNZNnlUSTBRTTJjc25kUmFHZEpWcGhQUTV6ZS92NkRWdXZ5L0VWLzVHL2FRdVc0WnUzZQp0LzNSaTdMVkg3UmhuZHQ1U0hvNC9ERXBuS0ZOYW5BUnBVVmlwaGJBd1lNbmo1MWsrTzZzUHpqblhFTTBDMkdPdHZ1bjVjbURKOFVKCmRQZDQ5SzVibm9TbW83bUtMYjVzbzhpUlZ6ZzZ3eXBtZnliSlJ1WjY3cWNkam5haUMrTkJNQ0ZzbWF4aDZBY1BDR3oyb0docUJoaFcKcENHM2lPR0RtMkYrSHVaK1Bwa3dvUmtSMXBOMkhpbzMzQVhYUjhUNTVMSTQyTXVuMWc1RG1BaEd5bFFhUDVVOFRaTzhxV2F2V0RBagpyTlFYTkV1RHFQVWZKSm5walNBUFJDNjBYWWkwQVdDRUM0Yk16S3VVQWxraXlhTmF1Qk9zMnRKK2haWnlNZDZJMnhwMnEyek9LdnZUCm5FMXp4NXNmcHp5TWs2djJmRzlxYVllRjdCZi9oSENZRWlEeGZoZUV5a3pZdElTYWxHRlRjbTZKN0l1MndBVWdMMW1uWk8ra0RKb3AKbGlabFZ4Q1pESm1XZnBNYlpSVmY1M0xSbHMwVE9GYWpsRTdnbUNRU2JXS3V3S0ZLS21IUnhyVkl0SzNZMG42Rmx2Smt2SkdQVXJRdApkbTZQTGQ5d2JrTlBxY3JSaTJOU2dUNVJBNmMxc3AzclBEVUNmd2ovbjNhVTBuR09GNUZ3aStoOEwrV1ZMUHk2U3ZCNFFlVzZNNm9jCnpWZjMzRkFueTBhTE9EVFBMOTdJc3d6RC9OeWZCUDFCN3M4V2U4b2ZkYnJuRXdjZGY5aFpjTWFaOUw3aElVZWtHUHdLekVNbGcxekMKY0VadHlCeGozUnpvS0lEd0EwWERIdm1LTTBDaDRoa2R2RENFTXlseVVsT2xrZVR5WXhDS1BTV290bWprR0VJOURlRnFjN1U5NVZhSQptcmxDWk43QStBQ01PaFUyK01nMHNqU25HQ1ZvQUlPSDRRQU8vUkVKbXRBSzNBSmtnWkpRWVNjeFVEblZqVlFxT2JPcVRGRFlwN0tXClM0bEIxWVpzZGhnSW5hTXpYamVVelBTY1ZnM00zRUpyYkRWdEpLbWt3S0Nza1JsUjBPYWxSWnJrczZ2cUhCRkxNalRqRm9JMUsvVlgKYUJBR1Jsc1BZMUlBZjZHN2ozeU1VUkFoYzliY3ZhZk40UnY2NUUvOFQzcHc4aDZWN1FsRHdFRzNjM0hSd2JkbXg4Q0huU0d1RVZmNgo1VmZ3enlYOG42NUh3Y3d1ditBdk5PZGZOSWQwcCtvRU9nVlM4akhKNy9KdGgyNHh2NnU5L0JZQS8vVERYU2U3Ty8zekU4Wk5wR2h6CmZ2bDZmaGtFMlhMMmYzazBmMVNON0U3WW5UdlVsOFBtcVBrRkxDT1o3YjE4OG4vKzY3My84Ly8rZCs1Ly9oLytQdi9uLy8zZm0vbDkKVHNkM3YrOSsvNjkxbUorTGYxKzJ2dDd2UHlnV1lKdEdvWUJ5N0s4c3RnRG1oZGEzYzBLTmd1WlExQjVkL3ZiYnV4cEsxVWdidUhPQwo0dGZyQkNjdlA3TUt6R0Ewb1hzY2RYcHZXSmJlSjRRbkU2aXNNSk1vUFpmcEEyUFI5ZDlQYWhJVHNmY290UDkwU1gxNWNFRUMvaG45Cit3cEJVMm9GM2hlWlVpd2lZS1JIaE9vemdYSDFNMEl4cFY1RXdLQk8yT2o4Y1JVandJS1NjZWNFMUF5a2FsVkZBM1M5SzZzYW9NdGUKWGRuQWl5bFhWamZ3NXRCVkZZNkt2WjZwY3R3NWVVVFRoYzV6WkpPWnAzRHc5WGZRQVI0OHFUMjRIUFZyZG9GMWZpdkQ2V0hxelBYcwpkRmdPM3BidEU5RHNUMnloWWJRc3dsMmJ3dDIxQ2U2Q3hNZWJKbW1HQnhyNElIV1NtK2dEZXNRVWhrSlAvbDNwdHJYQUF4cmVUSU1QClVoWTJmQ0dDSlJnRENYL3p4RTd3WE9VVUZ5M3NMd3c0c0JwMWtxb0FPeUtZRkVyRkZXVURCaWVQY0VjQTZvQkY1V0N5SVhEZ2pzWmgKYVVhdUIwWU9IN1RLTEM3YkJZWWdMdUhiSVpEMVBGaHlRa1ZQc1VjZVFhZ0xCek40WlE4WXpyMVR6ekJPMGFoUTVYd2NaaEhqM0JVNgpianhyNUhRWkxlbzBMT1BDNVBsWXIzR3RtandtdDJpSUxNdlNDSGtNNFY0SG1PLzFHTXlObzBQdUI4cDNJUnBpN21rMHdwNGNYekdRCjdIREhBQjdoS1Y1UmRLNkMzNVVSWXh5TVlaWklCZUpYNlRSaWhFSjVvTEl4RnVxR3pvdVlYVWQ3ZEdjMXlTSzJBcVRJa25qY0l3QXoKMElNQy95SVFrZWdSZXk3NDVpUDIrVzVHL1BQRStKcUJZSWM4QmpEL3BqaEYvTU9wanZjT1kvN0ZNRGUxR3lMbmxlU21QM1FpVitQcgpCcGNiYkl4ai9KTjRqem1McGlwQU1ySlBCZXd4aERrWVlJR0ZNWXpJOU1nOUozd1hZaW5EWFkybERCTVVwSXdubXFWTUJQQlNacEpiCnlFTVpNY2V4TUFZUmpiaC81anBpZy9CM29UMy9RTVRBYmpRdWVOQnNtWTd4RkdPSVpacEhTM2dNNHZnWHdUei94bUJJWWtET1hBaGQKQ1B6elBRM3M4OVF3S05Cck1jZmZIZSttdUlTc2d3MjRNT09zaTBGRW5nWU1PdWFVaGlhVUdaTitDamE5UkdZeDUxSWdKVWtqeHFVTgpvMENGQ29oamdHTmJBSG11eFNBa3plTmwybjNiZ1dXK2g0RmxuZ29HQlRvdDN2aTdZOWtVZDVCbE9VZ0VxY2UyakJoRWxPV1JxQ1RhCmMwQXBUQjZ6TEd2SU5FdGpqbVdnSjJUeFZtZ2FPV2hyT3VDTkFZNWpBZVE1Rm9PUU1vK1hTZWVtQThOOC93TERQQTBNQ2xSYXRQRjMKeDdBcDN0QnVLK3psNkloaE1ZZ0lFeUpzM1haNUN0QWM4N0h0UWVENlVXTWN3NWJUV0FoaTEraEN1MGNjQVJ6SEFzaHpMQVloYVI0dgowKzdianBZbDl6Q3d6RlBocTNrNkhkN291MlBaRkhmc3J1RFVGc3BIa1dleGhsZUF5cGc3UFlCVW9xSUJla0VlRkR6K0h1bDNESXJVCnUxRExLV2tCcndOdzI1RnlSd2NrazhXNm5aQjg3SEtJNGEvSzNJWkRqVE1nS0hZTWlmUzZVSXNwOTNnRGdObyttT1lPc1l6Vms0aGwKRFBLa3NlYmppWGZhVWNReTFxRWlsckdpNVd1eEt1YnhNaUJpbVFjRmxrVWdTeG9qOXNSejR4SExYQThqbGpFUnZwYW5uUEZHQUdiWgpKSGZHZExlSVpRenlwTEd5NDRsbmpTamlHU3RPRWM5WXUvTFZuUHJsOGJydkVjY1lFaGdXSUpZdVJ1b3A1NFlqZm5IM0lvWXhDYjZhCnA1c1JSd0JtMkNSdnhwUzFlRms2VUZnK2JwOE5DOHlwUHhIRFdFdUtHTWFxbEsvR3lwWkh6SUNJWlI0VWVCYUJMRzJNMkZQUGpjZnIKMG5VeFhwaU9qTEF3bVhhL01BUEFMOHdKL3NUYVdlQ1o5Qnl5bExFMnc2U3p3aE1ZNXRXaXdEQ3ZPekhJYTFlTTFnTUN3d0xJTXl3RwpFVjBlTVZQdUd3OE00eDRHZmpFTkRKR0JmWVExK3U2WU5jbVhXQjBMdkdJSUU4VnFERlBObWs3Z0ZhdERnVldzTVRHRU5Tckd5ZDhECm56ekVzeW1DRUQyTWsrbmxWZ09QdUdlQlI5eDNobmhxSGM3b3UrUFJKRDlpL1N2d2lDRk1UKzdGdnFXWGxadkFJdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJcHdBRkZyR0t4QkJXb1JnbGZ3OHM4aERQb2doQzVEQk9KdGMxR2pqRS9Rb2N5b1BnSm9pbjFhR012anNPVFhJalZyZ0NoeGpDNUxDaQo0bGVjMDJVQ2gxamhDU3hpbmNqWGNUcVR4K20rQnhaNWlHZFJCTEZtV1llVDZlVldvNVhtZWhaNHhIMzNkWmhheGhtK094NU44bVB4CmxkN3I4bFVtMXVMOXdWeVdwa2IvL0lSM21OTmt0c3ZTbDBHUUxXZi9yZUN5aERGOVg0K2w4NnJ3Ly80M2ZIL2ZILzlyL0gvOGFmZWYKM1gvOGYyYk1vZi82TUxOdi9vOVgvYy9IN2hja24rQXN4OFlFdExKcnczbnpKcHdiRm5vRjk0YXRPT25nbUlDdTRPTEFtbE5PRGt2cgpWZHdjczNoblUzemh2c00rcTl3eDIvbGUwUUVDRldlNFFDYWcxWjBnVUhHR0d3U2dWM1NFVU0wcFY4Z0V0TG96aE9pYWRJY1E4Q29PCmtWbThtOC8wV1k2U0NlZ0tyaEtvT2NOWlF0QXJ1RXVvM3FURFpCeFkzV1ZDUkUwNVRRaDZGYmZKTE00dDRQSU1kOG9FZEFXSENxYWQKbkhhcEVQUktUaFdxT2VWV21ZQldkNndRWVZPdUZZSmV4Ymt5aTN2ek9UM0Q2VElPck94MndWU0owNDRYU3FCNEpkY0wxcHgydmt4QQpxN3RmTUZ2bmxBTUdTVjNkQlRPRGEvTVpQTU0xTXc2czdKekJtT2NwOXd4ZStMeUNnd2FyVGJsb3hvRlZuVFJJelpTYkJvR3JPMnBtCmNHcytZMmM0Y01hQmxWMDRHQVl6NmNTaHBMcXJ1M0V3SEdmS2tUTU9yT2pLUVZxbW5Ea0lYTjJkTTROWEM3U0thVGZQT0xDeW93ZXEKVGJ0NkNMaTZzNGVxVGJwN3hvRlZIVDVFemFUTGg0QXJPMzFtY0d2Um5qYmxESXFBSzdpRElwMDRtSFVpbFhnVmwxQ2srZ2J6emppdwpzbHNvS01QQnloUHB3bUlGMTlBTWJpMWc3TFRMS0FLdTREU0sxTjR4eGw3RmNSUXB0Mk9NdllyektPaTdZNHk5aWdOcEJyY3E2THBqCmpMMktheW5TYzhjNHU3cDdLYWl6WTJ5OWdvc3BVbkRIMkhvVk45TU1YbFZRYnNjRndSVWNVSkZpTzhiV3F6aWhJdlYxakxOWGNVUkYKR3UyNEtMaUNNMm9HdjVacnN6Rm5WM2RUUlpwc3pOWXJ1YW9pZlRWbTY1WGNWVUdGamJtNnVzdHFtay9MMWRlWW82czdzNExxR2pOMApkWWRXMEZCalpxN3UxQW82YTh6SjFSMWIwL3hacnEvR25GemQ1ZVYxMVppUnE3dTlna29hTTNKbDExZFFVbU0rcnU3K211Yk9jZ1UxCjV1UHFqckdnbk1hTVhOMDVGblRRbUpHck84aUNWaHB6Y25VbjJUUi81bk55WGphRWE0KzZ6eGRkTWx6MVJ1eGYrK2ZsWk5Mb2lVaisKNjhvY25hcEdsdEtEUEtrb0tLK3hCTW1hNGhzeTlHQ09wcEFDQnVIN01pckZyTWdpblEvQ1YwRVNROG14NkpxMHZXRUJ3RFNsZ0E3YgpKdG4vVWlta0RRNHVHaExJcUZFcG0zOWFnc0lqcmRhUW9HSVN3d2diWG9FaFFKRlBBNmhXUXBlNENYZUVlWkptaWcxSmJEVjg1b0xZCndLa1VIT0JvTCtSVzhEM01YVHI1R1NCZnJVNlk4M1FHQkJXdVJORTFkTThtQVdlM3JLQkUwYTVIb2RSRUg1ZmtnOFkzblVBYWFWcFgKb3FheVJxWXhzWUxHNTVTS2JVNnA5YnpaSzdzbkI5MytzTFJQWnp5YlRxMjE2dXNaUHErV29hRkNrd1pNRWpUVTEyeEszc0lGeE5rbgpzd3I2SDM2bGQ0SHdkaEtGNHRsa3pwU2d3LzdDTmFnRUphbXEyUXdjdGhVYmpHdkxnblpTQzU4UlgyR1RPMGN0UlMxR0hlVzg2VG1sCm5NdWhsS0JEQS81Vm1NMEQ0RG4yRC84UUdReXZoOEwxbk5xMEdmbU82Qy8rSk8yYlM3YUMvYkdlRXgzMW5EcnZmNGtxNUpZZithSmsKZDVXZnZoQTJSL3hZcWpsS1lacE12b29nWmhhVWlaak1jemNmNDM0VmpBS0UzOVRURjFtWVlzUWJtOHQ2ak45MVluaGdxMk5UM2ZJcAovUEZERWczVTJBakcvNFl5b2FJZFNvdlBqV2ZVYnRRZE41anYrM0FGWmlDV3lUaWZNSnRLVmt5bUl5eG1GeXp5eVNHYWozRy9Fa2FUCnpzd1lhWk0ydm5mNkVkbkk2VjRveUc1VUpGMDhxNUpvQytYZktFUXlsNFdvMmQvb2VRRCtCTCtrTUZZVXp6ZU9hbUZTa2l6WHNCRlYKU2twU1o0VGN3TGx2YWtaL1p2UTZGSnBDdGFDUEV1OTlpa0s5WCtJVWpmZG8zVC9xZlJKRWl0dmR6YTZmd0EzWXJ2c1gzMThzZU9OcQoxUlNZUGp0TVN0bW8wRVpEMlg5c1RsSlNwTkx3VWZxUDlhaEVQYzBibVgxcHFxNHdDMm5kUDNSbHY5ckliUHhJc2M3MEtUeVVSWlhwCi9TeEVTYzlWOGFjajN5MzdCWXJpQTFqd1pReUhRMzJ3eDgwZDdVWDlRSVhYVmNRdXhvVHlYbzhNcUtjRllUbDNuOXhUVnZReFBKeUUKeVM3OWswcVdCZlNjbFhRZkhaUHNBMHlXak1TeGlDcFNQY1Nacy9MaG1zV3UrQjc0RXZoMkV1WFh0QThxTVRNU3o2T0VSeWg4c3QzdwpuVHVLaGpheFRCVCtqUzFQSFhhRnlUN2dqbnlZbDdaeS80d0Q3dEpDNWcwOTc2MnRtVVZudjdZMUYrdjBlMXV6aTg1NmNTdFNPMkttCm5jZmNqSGdjR0I4R0l4cWp3R3RtTlE4cEQzbVlhQk1qRVk5UjFKSDNWeTd3RGF1SkhWNFdsblZqNzJKaCtubDZoR05tWWRqaHAvSWQKTDhTOFh4WHorQnRaWVltZDcwMnN2WWwxNmFkdTNjL2R5WFVXcjBBM1hBZlJhbzJXY0QwYTdqa01GKy94REpreU14Z3U3TXVvY3dwTApkSjR1ZjQ0c1lONnZpbm1jNGUrbHpOSENxbU82YnpmQU9LK0ZuYjBTbjRiTEdYcm04MzA3bnVGLzNYdENNa0tvL09qUFhIWDBlL2hrCmZ6NExJMG12cFBwcVlteWtKOGY4Ykg2QzdTSlRwZ2FuRkdDSTJ1WmNjODlCd3h3dFZpaXV6N1NHWXFHUmFIeWMrWHpQcGpjeEF0OHQKQnJtUUpvSk9YRm1DRDdQaTYyRDhtUjZ0TnlZTGtDTVBRYU1wZWxnaUNLcmVNSWt4elM2KzMwdHZkS09keDAwVFkrM2RCenh0UUd2SQpETnFPOGtaU2FHdVhLMHhtRFc1VVpBckFPSTVzTXQreFZ1cVQvYWhQZHZWZ3J6NU5UejBtMkZyL3hobFNqOWxWanpuWnN1L1V3VWxECjB4RVluNWZUalRSVHRYL1lsK3B5KzNxeXg0bFpPaWtLenZESEEwZVorOHFFQnNKbmZmV0ZBeDZ5TE1adFJNMkhidG1YNzdpL01TbHYKbmFvR0RNNDB4Zk9BY3BlYWxDNFNKWXBpcVJ6a3lFTmtabTNqUjlQVjdMMHRYNHg2Zis0aE5JejJjbkRtaHpYNkhnM0hIQURqUEpwcQpoY1FmbGduTjFzZStNdzZCV1U2RmIzVGlhNHdPSCs4enhFQW44dHczTnh3WlZuU200MW5mZmVsNlFFUmZHbHFsQlVQcWFCZEdneWk5CktwNkZJYU12RFMyVkVpamxKNzlvN2txb1BvRTV0SHBRNGRrK0JZUnJZWkhsNlZZYloxOGNINC9KWTdkclhxY2d4cWZYWUwyUllhdEkKYzVjWXhvSmd1U3JjQzBIWVpLa21QMWxPUGdtMGhoV0NYTGtXMEtJbkRaUXdvVWpodkxRZUNRTzRvZGFlQndGKysvYTdRNElkeUlVSQo3VENndGVmNzRzdHdiejJTU1lwYTh3d3U5MTQrUGZyK3lXSHRpOXJkVm1mUTZwWW42Y21uTmJwU0FTTUY1ZUhIc1ZzVk1Cb2duM0pCCkxsMlRxWlRlT2trYUtlaGdxZkV3OHUwb1NiSXV3NmZvRTNLNXFBUjFWMHpVSlZFR3B6Q1k2RnBPYVZBVjBvYS9KWGgrZ0xKSjZ2aU0KVDVvRE9sRW9HMUZvTlA2VTRQclJRdHBMN0JhR3dqTXp4anFEb0M4aUo0dGFnWkVHTmZ5YlpXZzhNN1E3VFJKeU1FVWFTcG9DSDduUApaVVF1TEZ3WVVCMlZBbGxwaWdRblltNW90T3FZYWR3R1JzTnZtVWtwRHNvb2RKalZjZUVMbmJ0K1d4ak9BMGtaMmdRSVQ1UFM5TWs0CjZNRHVuZkJMU205aWozZm9ZS3FMQzNRN2dWbU8wNXFDM1N0REk1MUFucEFocVNoMHZzMlM1YmhzRGxxdloyUVd2bWJwQWxzWExuRmsKc1JJdWJWSU9lMnRCenZGQ3A0YjBMbkxpWVF3aUJUckQ1cXFFOVg0TG9hMXdFVW9sR09xY0ZETExNQ0YxQnZNWW94QndvdU1Mc0RDeApDcE1VQ0xDMkg5eHpNUGNkckMvWVJrbEd3VWNCNnhMVDFtTzRHS0tCNnRBTGxFcEt1dldTcFFtNkFWeVRXS2xBeHoyY1ptQm1rcElGClBjMEtQUFJubU9HUXVvUEpEclY5UHpkTGhNMXZXR1JBSHI1aGF5alNHeVBQSkFHQUl4YlBCSGU2TkhXbkxtVVYwZldzR1prYTdiWFYKWnphRWFiV0J4T2lycVJGQzRPcGpSTkdWazZOa3d4aFhIU2VvTlQxU0ZLdTIrbGpaWU5lSjBYTEpLVmNkcnhuY1FseTR1M3hQWTBDRApjK2NrRE05N0RBdVFBRUlON1FDWjhqR3ZlTUFRTlR3OUZOcGZja20xZFV6WmtFaE92V25TcEVDTkc1UlI1WURqS09mQnp1aE15aFI4Ckg4VjFaQzZiNHArdVcyem9oaUJIUDdJYlJqcWxiVWZyUkVZZzBBcFRlaVZDWU41TWVybElGclIxNEFOYm9JL2lsWEk4aVNsN0FOTVkKZlFSSGtqU2g0MVZTb09NZmtHRXdCbXhZV2ttVjJ5clN3SGFwOE9WcEc3Mk9FeW1qd0FDODFRQVRML3ArUUdrYmNNOWxpR3lBcGx2ZwplQmlhaXJCdlpUaFkwRzBwaFV1aGd0RStDdHJBeFVXdlp4VGFuaGxncWtsQmk4THUwaGd1ckFHUHpYVUNyQ1NER0V4VmpWT1VJdGNUCmlzQjNYSm5pM01IZUl6ck9oeDlTRzJ0OERuc3Q5TThFQ0xRTzJBci8rRGllZHh2S0dEcDZHbVZjdmhVWVdMcGtadDhBQjRnUXVhSGEKN2hZVExIK0Z2OEFjVURtdUlFbzVVdVM0VXVHb29QSFpYL2lScWtsWTlpUllwRlBXOEoyQnRDQ25BTXdscmRHM2x5clkrdUd2SUFFQwo2cDBRTXZWRHdkOVJFMGh5bUJRZWdyUGFHQnlTSkpYb2RFZ3hISWVDWnV4N1dERGNDblVRTkpuaDZjbytOYUFLVkZkTlErblVwclFGClFXUjFVNHBNZ1Vya3A3T3gvTnFHaTlrNjJHQkNsemFBOVlJZWhiT0JYSmdCUW9CaTdKTGgyZ0FnSENHaExNaFlZWWVDUm9RUm1ScTAKZytseFhCenBnbjVQR0NpQm1WQXIrQlFWdmNBM3NmM01WcVZBM1VhdEMwNW5hUUVEcXpCRVc5dUR2ZFJiL2N6NjhlcytKWlNvSFRRSApNK3huMTI0NkV3MGJZb2ltWG1kTFNJUjlqaTJSYkUxSVJIVHNsNWtOS2hObzFrM0l0WVlkS3hCaXp4VVlJb1lQU0tLYlBLRkllb1RrClpBUWpPenJPZXcvQ2JjWG1yQUZJUnRFRzBCYU12aXpjZDl4UFFCZUhobE9xZ1FDWDdNeDJqaUZIRWNUWVorc2NTRkNXNVFJUEJOYlkKVTJocGJkdnVxbVhhOE1adXJJYStBR0tOaDZCbEg1WldqZ1kxaG1FMlk0bnhHNEM1U0FraEEraVZHMUkzUFFoNmhBSWtvRUhEczBWagptK0x2MXBKbnlWQytkUWRDUzQ3N2FxOGVLYjZPQ3BLSk5obURCNUdVcUVTYWFFc3JMTWN6elYrQjNhNGJEdUM2Q1VzT3pqM0dmMDJwCjBkWWVmNGZXOFFhS3IyeG56dGcwT3JBWm9BcVprdHhPckNxQlVUaHdFc1ZBMWdiTVYyM0R1U3lFaGlpbnQzKzUzalRFWTBJaFpkeFoKbHN1ZG8vRE44a0pFTlFNRTFNczhzV2tTWFRWNm1naDBuUmptSzZKTnJHSHZiSUo4VmJpM0EvN2NZWU50TmNzb0t0Q0RRbWU1M2pTRQpNWEd1UDlxR1F2YzlDSmNWWUkzbXNxUWd4bmd4QnZSVG1Kd0VyK2R1ZFpJR3lrK3AyQVl5WnpmVytQaE9EVlpiWm1pL2NkOFZMU1U4ClVEaEF6aTA0QkRUN1NkR3dUYmp2WkhMSU1EYzZGeENvL0dLSXBzZkFnTkFHUTdnWERnVjNjb0lNdEw1QTVVeEhoRUhWSWsxOEZWU3EKWVhRWUlYL2xGdm03NnhKWGRsMTJ1RDFGNkhWQ3M2a0RwSUthNE1yOGxYSHpkOWMwVjNZZEcrOTNhNEZoQVVwSVVKZzBLRUVaR3FkZwpiOWNKMlN3em5jaHQzZzIvYTU3dU53ZjFVZk4wT2tCbGxhQVVjdDJqaS9MY2ZpU1hPR21sS1lXQm9rbEkyMWdBL0VCT0c1TFg5SlY4CmU3Ujc4RmVzcFhQN0ZjYlJGbVdrSG1Bc0t2Y1ZWcVlUM1ZMUGcxQ1Y2R3R1TjB4RUtXM01DWWFpK043UXQ2aXo5QjMzQWhsOWhxckMKZlNYdkQrT2tMN2FMZFN1NS9jNmlKNzY1YnMxeFgrdnFFUnpDZFZ3N0FvTWJQd2RsMVQwc2k5bis5V1JBQnowUmxpK3BLUk5ONjNMQwp0NzFDcS90WGFIWEdTM01UOFI5ak0rSjhiM3JHak0ybmVLNU56VVEvUjYxVE1KNjhZL05haDdFZG0yalRrMUdOVGIzM0QxRmdacWN6CldLWThzNVBwSVNaK1prdHF3aUZtMWhDdjBPcitGVnFkTWNRdVhoVWxzQ0NsdXpCMHJRKzBiMG1SeVVXQ2xpazNCdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJYkRoQ1VrelBDUjZKOHhuckxyeVh6S1duSWFIR21XMGpuVzZEYTUxUFlNVnYrUlRHYVVpb3NTQ3lBWFJ6MnB2b0w5bys4RFU5dWZXUAo2bjFYL2pwNk1DaWJKMmY5MXVWd1lvY2lEOXNMUEsvbHhnZzZwT1Y0b2NhZTJDZzBCclFiUlRjMmM1bnF0UGJ5d2V4TkRlWlRJVktRCkVWTjdXNFlPWEtYdDVoYStITGt2ZGZkdCtvdjdQS1JwWTBLVEtDNXptTHEvN0dVWVpLUGN2aG0rSExrdmRmZHQrb3Y3UEp5cjBxRHIKRmhRWWN1SFdDano2SlpRWUprOXV3Z2Q3WTVPRnNyZWRmTnZ2VVRnTTlMZGUzd3NKSCtNZjlyNjl3Rjl5Kzh2ejdpWDgrK3owNTdJMQoyck8zNUdyN2c4dmg2OXJUWnEvNXFoelVuZzNhcUE4dC9LMW1menhvZHJzZGtPUVhyenN0Vi9JN29QNWVMYTFkakJxMUYvM0xYdnZlCmRObFBhL1c5dStNVlJMS3d4bmhoWGJzZ0ZGRGhVYmM1NHZJd0daNzFnSjJ2eHdvZnZHNE9XdjFtdDFhdlBTOTdyVTZYaXhPS3RpMDYKVnFFNSttUUluM3V2TGtzdTZ3WnBFajJod0Nya2hoM2UrN1RXc0t5R3NSbGo5QWNlc0tsZXc1REUzWWF2bUhrVDl5VDcveFQzRHp3MwpZeEJNN2NHVGsvMEJUTjV1U1JpT09xZXdlazRPanFHa09VR09uaEJoei9zWWFIVkRKTTBaYktBa25ocjRGZWNLL2MvK1B5Z015YUsrClhxbnBkS0psT0lpTnRadGNVN3VhMnNXUm9HYmhnRVlORmZTL0NvMSt5SUdadGFwd3VrMHVLNENCV0t1eGZwZmRxL0YvY1h6dTFWejQKWk5pQ2hQK1VvQko0TTlUTVdjaEVrVjNFam81dnkxKzRjRTJNZjAybnZ1Si9jWm1wRkZRU1dqdTQzalI4a1JnRUFkcGhXa2pMZzJRdQpEejdzaUJiMkYzN21lYmgzNzIrOS9pODkrZ0liNWQwSDNYZkRZZlBrOGZHbnRYdmZ3b2pCcG5QdkFleWtiMHN1Y3UrZ2YzNkJVLzlSCnB3dUVZaVVZOUU2dlpndFlxRlhlNzdraW40UHVldStIenJBRCt4MGluTVp3UEdxMjNxeUFZYjg1N0xUaTZvUCttN0o2ZlVrL2RKOE4KWEVYQXVPaXA3WHUybU9OQXJiSnQyL2tlN2gyV1o3WDd0YjNhM1FnUGJ1ZjNhOVJzN2Y1ZTdkN3o1bUEwZzdLRGZxOTkyUmxWSVdvQgpGaVIyQmU0dTVBWGlDcHg0eGxQbTArbUpXL3VuUUR1VS9ZRSttU1RQUWVYQ3hGVmE2NElTTnZ4VXUxamxKV2d4emxIZkcrU250eHA5ClB5d2Z2aTE3ejlydGlteStUZ2JoTnB2a2lzTFg0Y1JXME9QeE9oUDJhVDZqOGVZdWFPTndqcVpuKy9KQ0NWQlJWL0doZkNpdUxHRFEKZnJmc3RUOFVod2paeXFzcGtCZnF6eVZrNzk3RFg4dldKZmFCZnFDNlU4S3VoKzdDZFpaejc5K0hpWEcwMjUwVGU4L096b2JsNkZNYQpnRG4xWFlVbjNlNGxuV3I2ZzBiekF0VHNlM1lud3B6eWpuMTN4NURXam9DVnRZZG5aN0JSUWVudk9xT3JDTjY3enk1SFF6Z2ZSZDdlCnc4N3dvdHQ4Wjc5K2VvM0MyUzhiQzdka1Blblo3bFFTS3B1MlpqNzBKdlRCSisrMVNta3llS1JGbmtlYTJHMEk0YTJaUlZ0RVUrWGQKcEphYWRMMTNsSjNtdkRhYTgwcTIvQThpaGNTSFVBV3RSbkE0NkYvVWpsODMyLzFmRmlzUVdOQ1dhelE3c3pXSE1WeGVWMWpJVEUvSgpSYk16Y0tTaEJiZDJGMS9OK1hTT2hQZG5GUEYrVEIyMnV0Um9sbkNyN2ViZ2paUHpGdkM2UC9pTkFHaGZjN0QrUmJNMU5neVh3L0w1CjhkRis5M0l3VnZjMEFNZ2UzQm9PV3ZIMzAyNlB4ZzJPRU01Z1RFTml0YTNhdzE4dm1pQmQ5OHV6L3FDcy9WQU9oaTRxN3BZM216RUgKNVMySTVrS2E5UmJOTzJWL3ArenZsUDJiMlhtdks1eDFkd3JZblFMYzVaTHIyMnBtaW5seVI5VU8rb01lN1BnZlNzeFBJSzJvbXpVRQpCclk2WlFZRGVpNkg4NmI1N2tDek5RZWFxM0ppWjZ4ZVJiRGs2NjNEN2xiam1xeEdWSEtTTk1NZ092Z2dkVUxPSmY2QUZnYUY5MnNtCi82NloyOG51VlBFRGs0djJOU3BuanlGemJRMlB5dWJvTmZLNTJsNkdVWmc2NTczc3hjSzk3Q09TUXNWT0N1MmswRWJwQkdzZ1NYSzgKZUx1VEpFNlM3SGN2eTlxMzVicDc0RzlabEdBb2R5b1QrOGFPeUdSV3VHajdFTWVkYVludnlZVElrWW1BYmdIREtpaWcyK2pwWUc3eAova0xvTm5paUU1TmhtSDlEWmpJM05pKzdTQXFLNWNicjY4TG1mNlRJTzJSTldraGg1ckpHYkJOcmpESDRTZ2ZNRzYwemtidnBrZ0pMCk1sUUJOWnU1c2dJL3plVUpKcGZjRnBaa3VhRzUwVkNTbmg1eEJqKzZBWUVzUVhzZnpxSE1vTVZ2TGtzd3ljclc4Q1RQMGpRWEZJK2EKRkJuZkV3SVd1WUEwV0Y1UzY3bThVQitHRVIvY0dIWXJLeTQxT3FWd2VwM1NnNzU0d2NzSzZrWnFweFJtRkRBcUl6R05VYjl5TG1PdgpaNFpkcjJNdnVnRjJEUTZLclpnajJxUjVnZk1nVFZKTWp1MFdtOTJYTUJtQXdGdHNxQ1NtbU1ocDN1d3dHemc3cE41TmoyWFRRNms4Cnh3MUs0bzBBT3pjMDc5Z0dVeVBpMU5EV1JETm5hbVNiT0RXdWRXYnNEc3M3QTNvNGNCNjhIdlRobVBuWHpxdlhYZmovYUtQT25ldmkKbFY5OFJXMmhUY1ZXb3RKWWVLNWRaUnI1MVdOSzdqMStkdnJ6QzVnTlg5VGkyM08xWlhUY2l5OWFZUTVkMTQ4UWcvV2c5NnBidmlnQgpHOHljNy9yNGs0L3pPdXdBS2NUWmlmS0g1UVhNNWVHejNsaTRGemxaZStXUXpFR0ZCMU9Oc1lJRSthRTU2UGhFWjJORTNmdSsxMm4xCjIyWDE2SmtYMVdNUTU5NFNUNlFTQmEzZzFmYWVaSkpiWTRReDJ6eHZsckJ1Wm1YR1BGYjMxdmM4bDVyM2hqYTkyOUYxdFV6b3VKMFYKQlQwWHJXQ1dpWlFDYnREbWdQcU9zOHhNZnBnLzBUQXIxZXJUN0VZT25WYWF1R0E0dkVMNm9lSXZ4bEJXc3pNclhodm4zYzQ1Y2dCegpKbUtxYmc1Q1BSdFNmQ3duRy9pNU43cW91QzUyd24rKzhKZWJLUHpkTW5NUjBYTlhYbXBrYm5ZaXZwcUlsMlNBM3F3VDcvV2RhUlprClRKc1RUckIvQ210cFJqNm9KRm1ZRVlwU0pHMVEyS1c4cG5qNGozMld1TGZrdG1lUzZCdU4vdDZBTVU3ejZ4L2lqODAyTW40RGEzUE0KSXJ2SW50dGF6dXRqckZ6UCs0alo4dnVJTjNIOWsyOHE2cW1iaXRsNzNGVFVremNWeGNSTlJiSFJOeFZ2VFF4L0ErSjJsM3RwSjRJcgo1MTdDQ1RNejh4Sm1YTUkzTStuZnBKYnFOR3VrR0JZa2lpSTFqVlFrK2lOSXZBUlN0S0JRcUtTUU5rU2pLQXkrdTBCME4zSmpNQlA2CjdlVDUrTmhrMjdOTDdQcmpidjhYVE5TNVdkNjNuWXpicVpuT3h1OW44WHRybVRHcWFrcm03YXFRNzZNZnlwMCtlQldaK1UrQU5pKzcKbzU4aWFYbmNPYi9vZW1rNUo3SEorenQyWnhFbzNOUjREdUo0RlBXYThvbys3TFZEVnRHbHFVbWZON3ZsYUZSUzM1K2ZWdTd0M1gvRworYlYvK3BTb2Z2bmIzaVI4NzNscm1pMTNmM3pkR1pYMnQrb0xCd1lUOWc3R09ETkgyTjBYai9kckw4cTJRNTBZZXNHVlNoc3RWTzdWCk15NzdqN0tMeTk0V056SXo1REFJdGl3dTkzaFFsajFYVEl1c3NJbnRHMExxMUlhNmU5S3c5TUc3SmhmTzg5UlFPR0ZtQ21HaWhMcSsKTUY2L2NJV2xLZXdWUUh6WjBtWHpGMk9GbnpaZmxiMVIwNVVIcFFvb1JPcXl2TWhJcTVLWnBMc0lpY21VdTVSZ2NncUZGWHc3UWRqNApWMEw1bFNqUzJ1T3YwcUsyLzVYU3pMWUVxaHFiZDE1SlJmaFRTYzhGSjBsU1VBTE5BcEZSNG9ZRVgrQWpoekpGeVZtMEVoajArQ3VaCkE5clUrQ0hMb0doS0kydnl6TjZIVEJKaHg1cWpuVlBmelRGOEFIcjhWWkZFK0xBdThKYWl4aE44bHhtUTVOcG9kNmx5S3RwWEVOMGUKSC9aUHdMK0FNQWtJcFZBVW9vOVBEdUk0WkNLMVVlcUFXNlgwbzRGcFdSaUtFQlFwTU4waDFOaEI3UEQrVjdwZ2hFcUwxUFVuRlhtdQpIQ1lYN1Y2aytCK2FSc1JNeGlTUmRTbnhMdVdSeGljSmM4dXdsS0pYWVdLbk5yQTU1OFNsR1haeENwMmdrWUJoak5CcHZLSWg3RjJOCjFFNmNJa2x6TzZtMXU0ZWFNZWVBV1lrdWVNS29CQWt0c0h1RzhXWEtDR3NlQjBRWlRRZDhTUU1qS0J2U3h0SGlBM0J1cGtqTFFZdFAKMDBEa0F0QmxpaGVOU2ZGVk1KeXFHcTlJVUU5VElOamVLdEdaMURSN3BNMFBZaEZSdHhUeTN6RC9nUTVhSG1tcThCVTVaQnFsd1lXRgpsaGh0eHhYRElCUnlRTnE4cnhHeUJIbW1lVlZrc05TMDdRRE0zU3kzekJjOGhwNDZPNUV0bWxSNTRvVHdpSEtsNko1TWtlVFVLNlV6ClRjRVpPQUV6MnkxL3FjaE1kY3ZnWWhVNlk2bTFXZ0lWd0tMc1ZNVmVTY21yS2M5MFNyelIwaWp2Nm9qQ1F2Z2FRdWlJU0xFamVjN2MKTG1DeDJOV3RGVFdmcEtwUU5neWZIaXJ4bWJZVGZNbE42Q3dNcHV1WkFieUs2Rk8yWXlTdVlieGdmZEdhVTFvU1JzRTNSUktlOWFuRgo2R1k5VFhvVUYraXU1RW1xSlhVQ3hJUndpNm13VTFWS2l2bFZRVHBpN0l5OWdtSm5mWUtMRWdZRWU4WURxUXF0cVE5QWVVRkJOYmlhCkVrdXd2UU1WaVIrV2ErN2FENittak1XdlVMeWFRUHdnT2lJcWt3bE5BNEZ2cU52NDlNSWtGTGhFRDZZblBEWHc3ZlBIWHlIRmhSY2EKQW1hYVphQXFwSDNmSnM4a3pZZlVyZnZBUHRzL0ZocVMrVmNrWWNmTjZPR2NCRjlXNWFVUTlnRXJYakhDQ0tkUHZBMmtOQTVTOEM0bgpjMXg3c0hxVkpQbU43OXJhWFRyajZXRndwMEQrZWZLQW16aHBjNXI3bmxNZ2xSVXRPc0NaMnRrTGROQzhNTG05YVc4c2xBU0d3a25qCmVhOXg2eE9wb3RXWmVkR1kyb0VERHRIR0RkeTJLd3prV0VGeTIyOVZMTWpUZUt2Q1o2dGhxOEloelQzU1RKTWlBc2lVSUtUQS9aeHcKd1Fhc0NKbVhhVzVBcE9ZOEFJQTB4NjdTaWpYYXM5RmtWcnJsOUZJcTNYNnhHbFFpQkYwbzhoTGNYMnBRTWhvZEZPTEFBRzFvbWJEUQpUSVV1eUVLakNwRmJ3WjNDN2tYVHA4Z0xDaWZqWE5uS2loWHNQYUR4VzRUQlpTeG95OGtsb3pVeXRmTS9Vd21oelZVQ24ybUhNSUlHCm0zZWVsUGRhdDNmRU93OXRQRjc0cGZaeFpMeGdLQkppQXJBVEh4Q25TM2ZFQkRmbXVPMjRPU1hHaHd1bktPM2JYck9BTWJJM3NnQzMKWlMxTWZhdFhBVlB3eFdkY21idzd1Z1VKU3ltd3RrQU9XTVl5WDFXV1dXR1l3VzVrN0NMTUJDMUxBMnViMkNpNXI0S1hWZUtDOFFncgo4VFVscVdzWGszWE1ramI5ZWMycXg1R3VQY3NoTzE0NDREaCs4MjVwVlN3VGFqd2J0RjUzMmtzcnVXS3VIcXUvKzYrcDBjdnpjejRlCkxtclhGcHVKNG5HLzJ5NTd0UmNVVzdVRVQxd1drYzAzMmtZSTBEaHJDMUtWUlRuMkp5cTVvbllYdS90NDBIeEgyYUNldjFycDBHUDMKV3BTZ2ZoK1QyaTVtZkMrVGtHallmbWk5dzduQkJuZWlnaVZtZkhCaUdlZVJ4Tm5wdDM5VEtDdWdVbnRmRjlZekxYa041eGVhaU9ILwpUbTlESlVLalJOSXMySTFPTTlwVU5DajZ0S0hDSGtwQnBpQ1liTWRTN3Mva0I0czBvN1dJU25ubVJTY0lYMUltdEVCaGdCK1NMQ05rCkVyWmIyczJVLzMrOFcrTy9LTmhZQXNHbXIwaVFvM0FwZFB3aHliVGI5TGxia3g4Y1lra1NrODQxOEMrdmJBbVNsOGhVV1c3Rklld2UKMm02NFJVNXFqdkgvSDl0OGREcStuOEd4alFTcmhIT1hzUW9QakxVOU4yVGNwY2tQRG1ObWQwalNKVEtXT3JDOUdPcWJRQTBzb3c4NgpkY2ZYM1AvZnpZdEUwYmFQZ2h2KzVWTk1yblJoSDAwUUtjMHpVSjR6NDg0MTNKZkpENndBSkhTWXdma3J3MEhyU3VsdzZOaEdlb25DCmdZVi9lVzM5V0o3V0R2cmQvZ0RPNmYzTEM3L0szR1FHQ2EzNDZoc2ZaaUlOdTRnVk1wTjZGVnQ2UlE4a2ZwS3hHWUhXQmVrNWJxUE8KV0EyUUZpTlBGYXRDMFo2ZGVSMEt5RXhwL3dBZW1kUVpHK1lkVXJXZU9xVGFQdGlSTEhCRXBVTWg4REViMGhUakE0aEZJWkdjTkhRQwpGbU5tdlRHcHpQQm1tOVVSN1ROMGZNMXRyQStTNW1uR1MwbkNTdGMwcTJTR3pNTG1UV2FjRXNmWDVTSkYwL0VrTDhMOEVoYlo4MzF2Cm8ySlQxQ3J2NWh4MWhxUFlQRGNlTXpEdDdJalRYY3k0aVJROHYvRUxQRk4yTldyMUtxLytpQ1IrUWhEUi9CZjA2QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJY2pUcTk5d3p0OU1QMzA2OU0zajNlZi9pKzR2eFdrZzFVT3kvUDIvMnl1N0pRYmMvTEczQlo2NWNjMVErNnBUZE5oZDgxT21ldzU4WAp4MGp5Y2RtRTdSb1pNeWpiblJHK1JJOFBhMDI4VEgvM3I4QTBlb0N1WFh2VWZOc2ZrREh2THBINjZlUmJlSmJHK2J4eTQza0lwSjJYCnZSSDByNGtQQi9MMzJoZjBMYklSMjBlSnJWVjd2MXVXN2FQeWJQUkRFNjFvdGNrWC9wTGFXUmRmZ2VyQkhMZ1lsTU55OExhc0llRVgKMklmaDRncXRidWVpMXVxamtmZlgyZ0E2MmUrNUdsbjAzR0JjWTlBY3dteXJ2eTFiSTVCRnA4MXVzOWR5dmJyN3o2ZkEwY3Z6Mm90eQoyTzllT3FPcHo2OExpRVROMDN4Y2ppNHZLSnpjNG4yT1hSL1YwUERzdWh5aVNJQ0R0YWZsOEhYdEJUWGUrWTBNcjFFenRrYWFqTldBClpYRnhPVnBTSndsVVRuWHVxTmw3ZGRsOFZkWmdMbDVlMlBMZTJRRExEWWgvVVY1Y2RvY3h0bWpRWHVCeWkwWnQvTmZ2K2hmUmIvZGUKUGozNnR0OHVaODZGKzdXN3Y1NTNlL0J6SGRnMTZKekNnbmZEZE8vQkFKUXVXK3VhVVh3QS9GRXAwSmk3N1VIcEdNY3VHLzRWL3huNQpkeWp2L3JFM1BIbmJIQXp2UjlNcEx2bzJNSkxnd3pubGVuNTJ1WjRNeDc1dEtIZDYvVjVaZ1RIZGZ1dE4yYTdDR1M3NWdTYm1WZWs2CjdmVGEwRkZSZ1RhWUhMQm1yZkJZVGw5YytnTU4vM3R5UWl6a1JDWDZPL2pBYTVXSnYzUlVOMm1oZi9HMjhsTEhvcmM4bzVFOFVHOUcKL2ZQYmxXVFhOdysvR0RaUm1VQVZCNVpZMWVsNDdldmlHQjhqV0p1dWJNTXFIWjc5c3NhNzhTMHZneUcrNGIzaG8xeUhjN014ckxMTwpvL1NYVHB0dUN5OGRYMWZ3ZGdWd05acGVseTVqeDFLaXVPVHRVaVhSNDdHTXFIZFY2SGwzMjZUa3VwRExLUG0xa2ppNWJVcjhpWHNlCkdhZjlFZWdCZUxCL051aTg2dlNxVURWZFp3MzJmQkoyeC8zTFFhdmN4MERZVzkvMFlXdTY3UzZjbDZObUczU2c5KzFIOFo3OStIM2IKbVRTcXpLNm84T2V6dHFLeHVYUmNkdi9hSEIzMlcwZjlWck9MWjZraC9UNXIzdm15UUVzNWVISVlsNHgvL2c3MUkyelY5VjZvUnRKSQpvcTYvZWZEazBXVzN5M1lhRjdRSnY5b0t5bHRubnNNdkZ5V0ZlajhlZE5vbnVHUWVOVnVsejNTQVEreGVjWHZlNy9SR3lNMnBXc2RBCldiRGQwRUJNRnZtKzEzRzkxWGt5cjNVeUJEMzhkZVJadTZBczlqUXVxblNPd24xbTQ0KzYvZjdBaHUxUldkemRza1ZsOS8zTVdGcjAKQlJzQUZwVWt3cUlPNkxsa0VjNW5GODFXWi9SdU1VY0paK2lvTkJpdk5yc284aXB1UFM5eXNhQm9RS3JtOC8rSFR2a0x6TFhEem5BVQpMSnRHNjNRQllzK3JISk1UVVVES3NwazFJbk1rRlZqR09oTDNFNXhieEdUMzlCck44YmtMNHFEc2RnOUFXcnVDNlZ5Y1dQQzQ4eHVQCnh2eHUvclUvNlB6VzcvMDFVb21RYlhyUk1Idkd5VG1sdnZPeWJuN0RoR21TUWQ3YWJTTGJkYk0zNnRTYTNVNXpPRjB1dG5IM0wwZmQKVHErc2pjcGZlUlY2TTNIQk5tc1VTSCsvQkd5amQ3V2o4bTNaSGQ4NUFLVThPYjdvajhocDk3VGZYbUs2NXphSGRLdGl1RXlnRWRFVApFaTJwMVRXYndPZFBQYzRrUTVQbGgyYXZNM3dOcEVRemtWeCtlU3JNVWt6WWgrZmRacS9FU1JJTHJZVnJtMnBRY0h3SG1ZZExvWXlXClQxWXNYejRCejNmOWk3anJWZGRmUUxCUEtsV013MlNBQXhGVndUR0xnVm1ocXpFUVYvWnEvTHZzbGdPcitqM3B0Y3Rmajh0V3Y5ZGUKcmM2anptQzRwQm1hR3ZPSGFWNDFUODc3RGE1SGM4V3g5ZlduaGpiTFJMV2h0ZTYyNlpGbHlnOEcvUXYwVnRyTFpOT21pUW5OS1JjMApwYktwZHFPeEdXL0FKVlI2NnE1UGd5NzBZREE2N1RjSDdacVlUcjhVT2MyOHZIand3b2tRa0FvcUZncXcvci9ydjdDTld1TDd3NDdmCmpDVDNvM29WTVNIWW5neTVyODVqL2UyMHRzc2xZcFZ4Z21tcFA2ZGZOTnZ0Q1lGOVRvOXFqSUdHSUdzblFDQ2MyWnZKRzB6N290TVkKRittdGZuZmdWZEVIVDJvUExrZDk3elFzSnpDU201RFY1TnFiWHIvMUJnUjM3WlVOeVZoUXREUHNnOWd0YTZkNFdjY2x5Um9yWE5RdQptaGV3RHd3NzU1ZmRabkJReW1qbkdRMmF2ZUZGRTA0SHJYZlFacWNOcGJtTFdpcVpSMldiUEY5YUZEUWlvZVhJZXp5bldFVlVyeUtkCmExblpBVy94c1RJd282U0lPcmkwYU5TQnBXVjlCNFJKODlTWDVEUEVRYlAzdGprTUdvNFlHNy9uN0ZESCtJVGF3M1puMUxTQ2JVSVQKSTQrdWxUZVJVL2MrL3V3dmVrMU04Y2w3WUJNZWJ5RnJNQmtmY3g0YXZLcG1YZUNMbk42MjBoSHFFYkRDcUJKMWZMTFNlRXVpOXZENQo4Y3BOMlZyTDIxclZ3ODZ6OC9pSHg0LzZ2VkhRQU5Qd0F3eExxelBtZG5jUDZ2N3dHUHZ3ckdkekdFNys5ckk1dVVpcHd2bEYxKzlTCkU2M2o0VFppVzFUdCthdXpjZm9BZHZqZDRYUkJsQ2QvS3djVHl4bCtlTmdER2U1RlFkVHd3L1BUc20wbDBMaW9ndDhvTk9lN2FTdlQKMUFHak4wWHJWSkhYL1YvKzJtbFBFSDRFN2JKMGZ1TElXUjdZUWZOdVFUREh1RWFPVWhaVjhRZW9pc2NjOEdVSTN3RUdweHk0NEpRWApjWERLVk5GblRucytqclhuWkY2cDc3eGVIMGU1VUJITDlucy8yUENXL1RpOFJVd1VmVFlSWTFNbC9BV1hUR1UyWWVFbGZMSVlxekhLCmxsM0txZkZpczFsbHkxVGpsY00zUHlDcHFQWDZJV0NwMXVsUlFCSnFHS3haTFJHYnJxMTd3Zmg1NytmK2FZUFFOYnRkM2hHR2swYXoKcVFvZ2lXQ0hmVFZCd3p5OGkwc04zM1F1VG9FamI4YWx4R1N4QVp3Y0I4TVNxUmtzTGduN1dSQlRkNmVWd01ueVRIWkUwWDIvcXlHagp2K21mUHVtZDlXdkI0TGFFMGZONmR0b1puVGN4OUd4Uzd0dTlJaTUrOGVyOFRlTVVOOHYrMlZuRG1yUGRQajYzK0Rrb3djUEo0clBZClBvNzhjbGpDYmtNYnMxK2dUaUd0L1ZpZTN2c0JSRi8vM3RNKzdPZmxUNHZaaWF3dmlUTmptdlpVQjRhamJxTnRtNkJKd2tPNlpMU3cKbWlzZjdMRlY2bHkweitIbmJxOXlweTdhbFpIYk1BVmZZOWJZWDF3TVhMRUZZd0psWE90dW5JV2NPZEpRTG5JUlpzWGNVckhQVGVUegpTblhPWVRFM3VuQ09xMVp5MU9jQXYwSXRMamtJeldkNmJpOXQyWGpHM29YSkJ4SzFYVHQ5VnpzY2RON1NZMzRMQmdHeDlPS2RZYnFoCjFnVFg1aGVLbWJZQVZUK3lIUzVBTmxGc2F0Q3BGQjFXRm91MGRqbnN2T3JOT096TUZMbW56cm0wQ0NNVjdKOTFKczMyczJYNDBFcXUKeWlKMWJEaW1xZTRPR3VmZXpqZXZSS3Zmd3lSdGVGcGRRQXVXOUZ2aXFiMzBaTSt4TTBzUDJvMytBSlgzNXJUZVBWbndESlFGenNKRwo4YXd6UzEyNEUvNml1VUN0dm1vc25IeXVqQXU5RXNuY1VrUDB0VEN1cGVYZUxxWngyTHJvdHQ3TmwwcTJUS3MzYVFpYkxET0NzMTUwClZwOURINHhUdDNteG5BK3UzSUsrMHc1Vzl0QU50a2p1WXFraEoveFlPbk9wdUpYVFlXRlVxUU5UZm9TWllseFA4R21sZVhzMGlIaFUKRjhkbDBZSU5la21aMXFCL3NhUUlLbXNkVUYrV0ZCdEVtVHFXTllvR2c5UG1ZTGhnSE1kVmpMQzlWQ2c4aWtoYVZqYmFZeXJvUmFFYgpGUXI3YmxRb0czVmoxaW82NjQwYTdlNWlrV2ZMWEF6TytyMUY4ZzZMRFM5UGVUMm1zOFpvQ0lSNk44dk1VUnlDS29ySzY4SWl2ZkpWCk0xaHQ1eFRDRXdnb3RNUEZzd2JMd1hiVFc0eXJLeEJiMDN2YVpvLy9zREY4M1lSRFFMbUFTMWlvSEtIUGlIUDRSeGJmaVlManBiSloKY3Y3WGk4YlkvUTNxMnF4U2cwbmRudXhIczBxK21uRUttRlhPN1lMQndUWnJmb1Z5MWltMnVHUzNzMEJrUUFGMC9qWEhEdEp6Q3ZZdgpXZ3VrQ2hVWUxoaHhLdEMrWEdnVFdDQjVvZnBpTlFOT2RNUGxld1NWT3J2c3RSYk1FbHZHV1NONHBpelpHS2hPczlkalcvdnMwelNWClduWTBhSjFINnRMZDd4dkhqWnE5NUFpbjNIYnRYM2VQZjN6Mi9GK2YxdDdLSlllemM5RG1JcFZ2bGc0SlpmQjQ1ZjA0YzdyRDE2ZGEKNSs4V0hOdWpnbjM3SnZmMDJmb0JGNDlPMTdFdFJnZEw2UFBPcjJYM2VUbkFwR1JUMXBqajV0dnlLWnlkT2hmZDhzRzRIZU1LaC9WTwo3MDEzT0lKRjVmMyszT3NudlRjMXZNVTIzbDF2Vko4dzIxN2d4VHMzYmphbjJ2UERSODZhaFZwRC8ySmtUVkRqSnNKditxZTFaL2FuCnlPYVZaZU5HdUxoVU1NdmYyKzh3cFErT0Q1NDh5ZlZoaVRNQ2YxUi9lZmJIZjM3MjVZOWZmWEsvK2ZMemI5SS9QcXZ2ZnoxNGZQNzYKaTFlOTMzM3o2SGVmMy8za29OTnNEUDlndnYvclEvUDdMNzcrL3ZHZm42cS9mSEgwcjArZWZqMjRiR1dQSHNxbitSMmgxTytUWkhqNAo4K0dyejVNL2ZIMy8zNDAvZmYzbDV4ZkRyNGQvay9mMjdueDkvK2gzQXk3MHpXai8xVi8vZnZUMWw2bzhQdWg4OWVmV1lhUHh5YXVwCnBvN2EvNEQyc3NOSGQ3N0kvdnZ4NlBEbm4vYlZmOWMvZjNEZVB4ckM0STVlZi9abjgvdkxSNGZxRHovdS85ejk1TWU5TzRkbnlUZW4KTTVIOUlTdk9zaC8rL3M5L1BmanVvUEhEL0ViamNsLzg5UFdYYng3OTlQVVh3OGI1WjRlZjM3bDhkUGR4KzJ6dkRqSHIwZitjUExzOApQUHZweDJ5LyszWDM1UmRuKzY5SEI2K3oveFpqN1BpZlB4NjJ4TkYvdnY3eUw1LzhhUEZBbDRjSC8zNzE3ejU4K3VOL0RwKzBuL3h1CnY1Ny8vSWNIeC9YZjkyd2ZYamJibDN0M2lwL3ZmdFo2Mk5KL3YzdndXcDNjLy9MQm5mU1BuKzEvKy9uL2ZQYjF3U2ZmUHpvb0wvLzAKNXgrKytmM3IrNjFXOHcxKzZuejI4T3pvdFcxWkpQZWEyYUR6aC8vNW92UHZiOXI3M1R0LythUSsrT3hmbHcrT2p2LzRIK3ovcDEvZgovK1oxdW5mSDNQL2hwNjhmOUZxZm5ILzIxZFA3OTdMemYzM1Z5Yko3dzdQMHdhRDFSSHoyNWd2aE1iWU92eG4rQUd6TFBpbXpIOU9rCi9VWG40RjRUeGxjOC9lcHUvZk55djVzOVA3Y1UvT1BvenRjSFQ3NzgvWThQUHkvMEVNYmx5VC9ONy8rY0hmVC8vZG1YUDdULytZVTgKL2YxUGhQYlB2VHRBMEovTm4zNlBRL0pQODZQNWV3LzU5T2Y5TjUrYXVwdWFQN1NQRXZIVDc1OGUzbXQrK2NkSHYvdnN2d2ZZaXNFZgovazFZcU1qZW5lVDAvejVSOVBtelB6LzYwbjM2OHNlSGY3UEZEejUvK0Q4V21meUhmQUpUOTJYeTJaLy8vUEJ6ZWZpWFYxODVQRDkrCjllWDk5cy9mL3B0RzBuY1k4RDNiMTY0VktMVC9qZS9BVDZFRDR1NVhMN0JRcVFpbWY3ZC9lRUtzUGl5SGYxSG12ODNQclFmZkhmNzgKMmVIWnZiLzk1Mkd6K2NrZjlzM3A5Mzh2bnQ5NStmMkRad2Y3encvUGpqdi8rZm8vUDMzeGF1L08vMi92eTdmVFozSUZuNEIzQ1BzTwp0dG1Yc0dNZ1FCSUlFQ0FKTzRFRXdrNzM5UHh4bjMycXlydnhDbngzenAwejV6djlhNEtOVktXU1ZKSktLdVdDdmRhUUltWS9QT3NYCmg3aTdrd3Qyc3k5azRmZDltUC81RGZzVDMzL1dCWm4vZHVHQWdLbFJKTktjYlRsODBiZjlYelg3VW5OVnlZSnpWcVZvd3hDYTRuMncKK3FlZHIrRk9kOFo3YWtLcGNIU2NTYlJPcG16cjZYUytuSnFJc2p3Nk1BdlJQUmdaVUc5QWNsN3lKNE8xMko5WkY4UW9tUzVnNUdjbQpnRmdnT1VxU0JjQWRMbzg3dDQwTnhHc2xwQ3gvWVptRm9EZ252VHllRVpYQVhQaDBlcXFWc3NNbkhIRk0wcjFMakVqSGQ5V1h4Wkt0ClB1RzBESkxVUUlUa0NKK2JzVG5wc08yYytXVzR1U3E2YXo2UzQxUWdBTDB0MURCdnhSbmswQXdRcWo4Ym1KclptVjhzaThkSVl0cHUKWmlOOTRsMjhCcS9sZFVjQTIxUXFlajJUbU5TU3hGYnphdDVnemJicU16ZlFNS2xZSVZmcnJhUkdpOTdrdlZmcVJiNkIwQlFKakNnRgo2NWVjYzNvbG5hL3JCRmtJOVFsM3FqVHlHcXpjdk1Dc3B0OWtzUkNLNU1MZWx3NVNPRDY4M1BFZ3BBWC9hT2ZLL1o1bWY3bjFwclBOCnRwWmRDd0JSZGJNQWRrWFA5cGtnYmQ3SVI3YjV2YlNEbjMzWmNtRjNiVWxwUzJmaDIxNE9nOUZ1bDVRV0xIYTZaUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJUm9VREJOV3ZWb0RNTEI2N1VNR1BDcFBnOGozYnRrNlB3dmRzMldicll4MzlYWHVUU0tOeEd3SEF3ajNmUG1ISjNNcXgreUdUSmR6QgowKzM5cG12TXB3bllTM2pLR3NjbTU2TGpjZi9PN1RTaXA0Q1RIYWZJQWd4di9uYnhQRHB5SnlySGI2Q3hwK1pRRGordlA3SnZvNmM4Ci9UU1dIV1dTNWJ3UHZETHFBQzFRcytYdy9ubVlmVHUzZ3R4VDlETFFZK0NMdjh4aEdyZFJxOFdYVDM4dm1YN0pieUxONzRVRG53emEKMllETmFDbENuczdqcFh3dEF6K2xzS2NTL29qTkovRTA3bkhrMCt4M0tlNFhCaXYzSnZvVy9wbURxakNQZm9qK0RML1ZpQVo4K2tqOQpta0dRaDkvbEtHRFpwSmVNaEx5RkpqSHM3NHJ3bFNSNkdmNVpNRmpaNGVYZ1M4OGNIQW9MeENjRWtXRUhuMkova1VDdndORzhvaUd4CjA4MmlnUmlzYUpyVWhPR2dJcS9sZWd0K2wwREFPQ3dJaEpoRXpKREZTTkdmTEx3M0dndjdhL1NiQkh5T3BwSG1TSWxlUjhPanFMaFoKSkJvc0NkNFFQVmtzU2RIU2dkVVhMcFRFMGw2eEVLSmxvTEZRdjRIRTRtQ2phU0E2Q2NueGlHYkYvWW1Bc1poTEVtUElTTTRscGI0awoxSkRSSnhZaWhWVDRKOFVXUVBQTE1ZWXNXOENYYSt5c09GYVJKQlo2QURqNWtsaVAxRnlSNUREa2VPVG1ERjkra1NLcVNGSlpBajVTCkZCTk5FOUVrTGdTUkZvNG16MkttZUZxRUZMM01TUjNnWkc2MUJLdWE0cmdXdlE0cGtaVVFsUVE3d2xkV2VWQk1paDdRc28vQTZpZTEKTXI4Z2tpTXFJc2cwajBrcFFEUTFWalQxc1NHMUpLd01VZG9TamJFWmp1TE9GL1NKSWorY0JobzgvS2N2TlAxYzJWYW51aUV6OW5rTApXUHJmQkgvRGlHVTNZSzljMU1oUnZSY25qUzRmMk1YZ3ZLTE1idSsxQU11bHNNcThtOXVML005Z21DbE9WM3NidFpYeHpJblE2VlhlCm5lR2JIZTUzNU00QVgwem8wS0NCRmhaZVo1b3kvVjRyems5dWp4TjRXNWc1MDdFN1l2bmx1ZGt2Vkt2N0hIOUN1ZUU4Mjl3VVhqSnYKZzhNRVdMRHJ6Qjh1eE9KR3ZrUDhHVnNQazk0UnVSVS85WnVjSDhBSjdleUtVMC9Mbnd0N0NDL1BiOFJ6azBWaDdpcVdPZHNLV2twUAo1eGhIR05vSys0eSs4RnczdmhFQlhGUG8yOGJXNVBhYk1zOHVBSFNENEdmZXJiL2UvTXpDY1FGTENWanJvZjR0em9rRzF3UmFTamM2Ckp4cGNFOXJxWXpuVUM2ZEd1Y3dDMzNldzRqeVU2TnAzS05OcjBMYXVhUHVvKzVSRFppeEhKdzdVLzF1ZUJYS2tHWCtxL0ZtbzVzSjIKZ01BNXlUVXlINjVjdy9wMVF1WXdWQlVSQ1RyeGZSSEU5cWx3MVZlby9FYkdITm1BWndFSlI1TS91eWxIT3V0YUsvdlNyZ0oyQjlKSgpNU2MzRURtbmdxSm5LaHgyc1FKUXlxM0RpdzlrL1J1c25QMS9PZEQ1UzZHMHNzNkJlRFdTTUtneEJaODhwOUxPTkluRjNJbmdzeEJzClRjWkpTZG9wRFZQS3ZxMHpidkRyeFI2Zk50TXZSS1p0ak5HZWFzczFCOFJhQlZXY2ZxSy9NdWVYbjhZNEdQQnd5S3orbHc5TTF3ZGsKUDdlcXU0RWo4dm9kWkFVa0RoMkRRVzVGUEJxNUJ5eXpZL0haM3hxRHkvUWs4SkhET1RKWi9QU3hVQ0xrNE10bEpvdWJNNUJLd2hyNwppMUtjNWJINFA2S1JhZTBwMTNqTmdOMmk5L2RNRC9UY3MyWWJ6MjhkNkdzekQ5NS9BelNOdHpZc3NqcFBYckhhenJjdUhWL21CeEZtCldpcEZ1TytOMldCbFdaTE1IQTdMZGpCZWYwOGpCQWtzblJoQjd5NlBmY2Z5RlI3c2wxMnVuQXVlY3hqdWFSK05nalg0R0dSamlhcVgKZmRBSzduMC9XZVNMRlQyWmcrbXBUTHFjbmlCUVYrL0F2L0hNTm1CM2FwTGswR2xjd3BrR01zbkpZSk41YjdodDhhWDc3UWRzZnJGZgp4T2M4N1h3UndDaDdDMDhIMTRqaXNVdU9NUlpUMUp1cy9BcUFhWk5lSXB5MW9SMFF4bUhVNURmQUJSMlZwWmMzRUNpOXdCWGNmdWQvCmpqOWhHRlh3ZmpTeHArSStMNEtvd2N2bmdXMFl3YzdOU0c4QW1DL1ZOWG9samtlTndPWW5uYjNYVTdiYXcyZlVNajVXbjJlRjJWL00Kd3pDZnd3VDg5RFJXeUpmTjFHYmszUnBUUGlvUVFFWFAzaDlEOGZuSU5xZnBWSDcxNTlhK0pnNkF2bTJRMldHd1VoaWYyOUd2NG5CZwovUUNEWHhneis5ekF3ZTVZUzVidmdOWU5XNnlBRXJFSzNITVd4WW0vL3lPMFlaREcva0MrTzcxZjF4YkFVb3E4MTNkdndyMmJlak9TCkRCVG54Y0hMWkFoc2t3UlVPTi9PNHRTTmZXYURqbGdEcUwvM0tHVUwwT2dENWt3eTNiWVZLbjgvSDdsUXArdkxObHl2aTJ5ejVRYWUKUmNsYStvcmtWdmpzd0RkVnFBM2wwVitvZk5SYzBOaG9vbGVBZGs2K1NRMCsyckpaM3NpaDJkWXJmQU42NWRaUmk2Znc1SEE2a0hIRAp5ajZ5SkJiV0ZlQ0ptQ254YlhsYlNpQU5nazIwZVN5NlhlRnYvdllHMTJvM3pBMHlIY3ZweEdLdWdTVmVHTU9uR3RrRW5CeHErYnlDClIzWWpWdmtvSldrUTdQNktJclQxMysvditJKzlVUWNtblNkTEZucGxsOVRVQk8rRjNBWnI0bXY3OGFuMFVzY1ZlWjRtWGtTdkpPWUQKNXdyRjBlTFBpOFJQMGJQdDQwQXpodkRzVzRqOEt2MmRYSGI0M2krallTNjR5SHdFZTBsOVNSa3k2WEMzbEgvT2Q5SWkzcUJQTHc3RwpEMkEyNzV0Z2tUTjdublZJZzhKOGdMenZPNE1WSFlCSXJJRVB5R2MxSEg0azkrVmtZVjBMY1VZd3ZZZ0RzN0h3L1RiYTVuOU1saEJnCjdPQkxkcE9xYktWNENLNExaTHFYN1hRWHEzLzc4ZXhMdkZqTkpISTd2dVZOanl6cHlCeThzVFBVeVpsczVHdjJYUGlPamZ6Ri92eGsKRTlFejludXd0OEMrUCtobHQ4c1hGNkNZa0ZsWWN3bjkrY2tOSGd3cVhlRnhTZW94SEpCaWtOZ3FXMnhsSTdFbU1odUhoZS9HRWV6SQpsS3FnUjFzMmsvbnMxNExNWnhiTnN1VVJyMlJqL2xWVytwV3M2emZUYVZYR1pMSnc0bzBHYUdLektSTi9ueTh5MGQxaGlPS1NsMWlBClErZENhd1c0NkhXcGRhYVVtU2VFa2l5dDYzL3VWS1JVQnZ2THZwL29zUXNWQUlxeWVJUmgrZ2Jnamw5YnB2UGRPdk5ncDhKUDU0S3YKT2ZObTRzKy9LNTV4RHY1cGhVM2tKazhmdmJEaXVzOUM3elgzQjNZL0FmbnRhLzl5UGhneHBKNEgrZVFvdjV3TDVjSHhXUEJNeUdMUwphYkcyQVMvMjlybS9sMVRva2w4YUpyQjlyZnJRVWtyZ0RxRG5nbFpncXJYOGhlL1dBVGg3MlBjZlR3SXJ4NjlSeVVvYXE1bURlWEFxCmZHOFBQZ21HallGZGMrR0VaenRkTXYrZERuRGlRL3N2MERpSXdFQXNaV0tSbHU3dkQwYUVWc3RDS1dXZEF4TWpGcVppc05OTy84aUMKVFpDT3l1d2RPcGVmVUVkMEMvUGtBTG9LWnpmbkFES25QQUdYd3hrTkhSTHZ3Q29xL1daZjhGd0F1Tm5wVlNhWjJwbjVzc2lZUWVEVAp6TStqSW5iMDlNT3BkckNZRFhtckRhZ284RXNzNkNVMDBBRkp0Q1QzSkJOWjJ4U25vUTNBN1BVNUpZaGx6MGJlNmlSWWc5NXJkcHY5CmRraGpBWlN2UnVWQU9JRDFoQzNpZFhjQTdLUXRtMUdUcEFyWW5sb1hPY1puZysvWUNRaHhhNVBGaURUWkFFdzF3b3JUM2lGVXlKUjMKZStabHp4WWFkR0dLa1VxOXpCb2RITkxXaGZ2eHFmL0VvdzdZZGI1eTYwakdnbHdKK2lBekRBOFhJcTR6MUJmTnVQYzdlV0JueWc5QgoxTXRPTExkZTcwWWlCNTdqTWQ2MlBTbE9zS1NkYjhIVEVNUFVnK3g2UEllbkVtWjRXSU5sbTl2YXFlQjUyYzhZUzJsMVprZk4zMThRCkZsdHhhZ3AvQVUvR2VDQ0wwV1paYkd6c3k4MGFjcFFUMzM4MkczRGJmOE9jTFNSaEFkU0J4aTc2MEdJRExBbzJSZUs5Nkg2eHV3RUIKQjE2bDkxSjFJSVpWQzhCTStxUXdHNndzN3ZkTWNrMDYrVGE0R05pYnZOeEJFZDdubjR1eEVkcFEzS2xqUDhZcFI2QXQ0WlFlSFExbgpEM29vei80ZmN6eEpHN1RNUytSdzdROERIUmxlWnlMZFJURWJMUjFQOE9qYlN6cWV2SjA4M3Y0N0p1WngyeCtZYzlQSng1emEveUVyCkV1cms5SFF1MUpibmJIU3lXL0MyQktSdys0MXhHZGg2V3l6eGZaNGZ4S3AzNnlyNGViOWdENFlSMHhpczRUMGVld1AyOWh0SlpoYUEKeWQvT3JaazYvNGFSMDR2b0FQMkFPbUNmZHdMWUk4bDY5czJUQWV1eWNHMzRXQkJ6RnFkbjB6QWI5ZnBNMENBTWk5Z0xiRWViZVM2NAptczNDbmZaWEp4cEo1OHY1NWNmTUJEMHNVeWJaQ0F3SzFXclN4QjRXaTM4RzdERnliQ3RtRWw5dFlIWkdHbTZNOE95blFNdjNWMkRQCi9kNWxtK3ZRdTBBSmo3dVpvN05yS2xTZkFvRHR6Ym1kbEVKbFR1MWYrNUhXOEx3eFdNR2IrY2ZDSWhRMkpUM256NTl3YXU4cUFpL0kKdFNlVDVKVG1SbFkvc2FxSjBVbTBIanZTVHNXcnpmMllpWmdLS0hjQURPUXJIM21iYlpQQUd0OVpCbDR1dUJtZnphYXRPREYydmViVwpYcnhWNnZhN0c3QXVweHdYemFOZWVSNU16dVRvNjd5RTJSWjI1QnQ1TjU1V0VDMEVmN0V4ZUxNMHRScmZmdTg3V1BpMkk3dVpMSTZzCmJoTkFIQkIvYUEvazVWZ0l3SGFBOFRvNEF3TDJyRUN0TmM3Y1U0ckgzck90ZHFURjBTNjJ5dnpXd016LzNnVWhTMGpsMFR2WW9uYlkKTVlzbG4zZThtQ2dpVnM2ZWJCVmNQLzVwMHRPcjVySlJUd1hDcy8yQXVTQlpaUTBpT2NvemkwTmJlRVZnVE9XbTJaZHFHUjZYTG5xUQpEb1JnU0EwVDJCem1ING54Ky9ZWGVLLys0cStWTE1hMlA4VkJkOWtHQ3NmYmszaDlGRzYvZlB6U0dxWkdmc3JDSnAybnhMWTREVHRECnViclQrUlBaVkJwdTZJbUxvOUVOc08vWFNUdGdaMHUvNk8xRkY3bmdlOERMVy8yZmdXZVJiUldPcnZDK09rNC9BdC9ZQVp5ckpDN0UKeDBKeFBRSjVtY1JYajRXdm41Nlp4MmdzSE9UV2d6M25UdzVFb0pGZlptYmVRbVdkZnhkdCtSalIrRFNUam1vdUN0Ymx0ZS9aOHVZdgppSU9IV2Mzd0EvM1BVSEhTS29ZNHpTakEzSWVHUTNtR0F0Wk1oS1FmUXpFVjZDTUhzSmt3NWhJdmprZS9udXdtYlh3bFI0NHZBZ3JEClorSEorSTF4dzJOZ0R3ZUp5a3U1R1k1MzJ4TXdsemxKbTRpQTFXaHQ4WVF0d09vRE04OEpFSHp5WS9YaHVQbExVMnBSS0RaMEYrdnUKR0pBNnR3ZklVT3RZbktiS0FGVGJ0clBFMnNVUFMyenhEbnhrTUxJeWpNdjdCdG5XY25xQ1kveXZGSnVDSjh4N0s2Q3J3elJrK1RrKwpLdXYxR1NXNGJ3OFB2QWFlT3F2WlpMS1NOVitqTHAwUURGTUxYd3ZrRUYyQlU5aitlME5kRGl2K3NXUnlzdlpyNTZXU09Sbk1UUDArCmowcXdpQi9RSkQvZVVhWDhQL09qSWh5Q2dvTXlUQ3ViS1lDRExyNVkveWdWbUdpNTNFY3lBWjhaT0hXTEUzblkvbVVQcDM5dkQ2dWMKU3ZFajgwUFlneWZQWmEvVE54VEpaN015djJzZGZ2N2dkU01LNmVjc1VjZUxlWVZmZWlFL0RlYW1lNjJ2OG1lcE5JVG1mTUVickJJOQpHRm9BTW1vZFJKTXJlM0MwbG9DQkhzYUgrY05wT1grZ0t4a2Z3TkpBSGpvKy9IczUzendjeC8rQ1FqYmVQUENGRWZMTHcvZ0l2K1p5ClpKbjdRSHdQN1NNQ0NmNFZBdnZQOXZ5d0E5ejlBS1JzVHJFcVFrMkJXOERlNUQ4Q1JKNEhnSXo5NlFhTS8rRzBoU0NtODRjZlZFNDkKZmxpUC93T3ZLUm52ZG9CdEtRaytucWRMT0x6S3BvQ3E4RGd3RkxZTklORVpqRzc3emFIL09UNmNOeXZZTk5pbnJHSVlzUUdncDRlZgpuWEk1QUVON0VvajQrM3dDTDJCVFgxYXFLOFlQVTE2dDlDcGJlcTQrQktTb2N2d1NJRm1OMERvQWFySlhpMGkvR0VRMG9JdVF0WEpmCmphdFpWVUQvZGhwdlpyQnppVUxsQmdPMnZ0MXNwNmdMakx3T1ZzSkY3UURnTVdCY1doSENuVU9ERGhUbzRPejBzSjJNVDdYeGYrWU0KZ1lPYVJzMVRaOVVmNXJvcmdwRFpOVmd0eUUyMkFvdHhzNVB0dnpUc0dJZ0Y1QlNvUHBYTjF5UGE1SVdpZEg2N21hSGl5OG9NVVB6bgorNGVwTWRDdzA4ZzNkRkhlb29VRUUzTkhXQWZCdUNYU1gvekNxZ0wyaWoycXFFQ3lLNHpZVU5IUUlVWjE0VGtTY05NSUtoSU9zcWs4CnA4a1ZUWXAzM2ZmNXJieWlMc1pBR1lQZGhMNTNraE5kamVoNHYzN1dla2tCODF1NlhmcC91Qi9xRXlSdEtwRm1SQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJV0RBbU50RVVyUm5xNWdXNEN0eTlPakkvVUxwTVVrbEdSRVlaeDF1S2xoeEVNejdOVzh2ejMyUXovbGxyTU0xb3dXbnhMZ3BUMzhxQQpLWUtJME9KVk94TWh0Zm1BdCtlOGE3TVVkNkMzOHdTdTZIWnpha0lPMG1iRlNzbWlWR0VvMzlJRDBFWDNjMmsxemJsU1JPV3BJeTRUCnpWM24zc3ZUa0hwRS9XSUQxcklSaXJTYVdEL3BrMFBXa0FjK0szaUIwczE1MXAwVVZhL0J1NitnNFl2dWh0Nk54ZTRhZmNNV3hSb24KbHZFU2wwNXVndTFOSit5Z0JzZEpkVmFEdHhReHp3eG8vUHh2Skl2RzNLblFLT0pPZHlaK3pPK3VlOTNwNVNrQVB4SEJaQ01lWUI4MAoyRS9vUVNLUWJwMXloZTlZYVZVMk54L0g4T3dxeFQ0bDNJL044TkxvREpRZmpWNi92V213R3QycFZkTG9mTzdIako3bEQzZzArdllaCjNlZjRtOUZUN3hhTVhxeE9ZUDdIbmdPaER4bnp6a2J3U0J6cllIQ0ZWVEQ5TWtvRmN0RkFOTndQLy9WUjRnWUtpSEJQc2ZKd25qZFkKRDRmVTR5VHIyVDAvWmFxeFl5cGFUcjc3eUcwLzJDa2VQdnRZb1UvMld1Umo5bkdLdTdLUkRZMGxZR200ODE1WEUrQ3JoZVdtUzAzSQpGNmpGTElCaUZ5L1Zqb2RENHRnQ1NEd1Z6Qjk4bzZiQmpld1lKVThkWXJCZDJiQ1pEVWVZWHppd2h5L3NtQVN3bzJkM3FtUzBvWW1qCmRTbXNmUDVqdEJTTTdoTy80TS9TR3Z5NlZ4QWkvVHg4MVQ4YjBraExrVUVvWGhuNEpKRU9MTTgxZzFXRWxrTWEvcW1Xck5KSWswYkgKNFloYkQ5SklYL0hQb0ltSXV6aWtCaXVIOW1qMzFMMHlTRU5MeDlqZUswb2pEVG8vM1VsaUlUMVRFemtJR3F6bTltNWRrNW9yUnVhcQpHUm1rWWJObGMzQSt5aUR0RFREeSsvbU5RNHFLTEZtMEpXUFNoajhOVzVKSVMyV2lKVXRlb3A5cWpSQlN3SXVUb25CTjN3RW5mNTVUCk5ZaldlYm1xamw3Z1k0MDdBZExnOW9LVmFsaU9SdnBxdDR1UWhrSi93eDJIbE9Oa0N1M3c4TFhjdEdTUVpzYmhDR25CSlpFTzBxT20KSE5LeXdXb0pPQktmMG5OTkdyK081dVc4S1kyMGtYZW05cGEvbWhSU2QySWRUM0ZJd2JvSVdjbVY3bWRlcEpFR2V6Mk1qR0hQa2toTgo1Q0ppYWY0UkwxSklEVmFNL1BvaVplWWFObHRYbTNwZUR1a1lLM2xHSFdta0pTeHJuenNpUFlUVVlCVVQrR1QycEdta1BhOURST0QwCmMvQ1JKbS94YzBVS2tQYVRXQzNpeFNGU2x3aXB3WG8wbGVmYmNIUHNKUURheUU3TXY3V1AvbGdHYWRnY1djM0lnUnpTQWxaM2ZjVVEKVXNoam9ybFc5dkhNNytHNUtZbjBMV0VQeUNLdHp0OENtQlJTcVBtREgxN3NiZWcwU2MzMWFLcVc1ODhmZmFkREVtbkh2bG5JSW4xYgpOa1lUaE5SZ3ZaenJSd25yVkhkSmFhUzFnTFZOWnBLUDBraDNUeVlwcEVBblE3U2RZY2wwa2lId3h3djJucTRXcEpIV1U4WGhvUEgxCkpZbjA2MlZWUVVqaC9uSTUxOTllYUViS0lQMk1ZbC9IdFZjYTZmUHY3dThsRmcySWtNSlVBb2gyV1BGdVpBbDhzTDY1alRKSWUyMnMKK1BQM0pJazArdXcxR1ROZlhxREhBTnI0WGl3MDUyRmtTQ09kQkp3aW9YSDJhMk1YUWtyWVU0NnljS1kxYk9TS1p5RlNENGNVWUlGbwpBZGpmUGFQMEh3OWlwTWV0N1pGR2VrcTdSVE0xZm80L25CVFNYQSt2Q0JXaDUzQnNwNHdBQzBEcnU5UktGUythSzBDYVAxMm93cklwClRDRk40MVd2U0JGNmRzRm5hcWNKV09MNUtrSUtzZEJvTFlmRGVMS0JTREVSMHNNaE85OHkvUHRrRkNFOWhuN2o5RTZUampkOEl2S2EKdHZOUnkwRGJEL1B4TUN3Y1ZMbHRHMnpqc2s5N0RmeXZJL2QwaVpWSDFqUDM5RUx6QTlWYnNNbjhHcXlCeloxbnh2VTdqNGllaHFQNApzRVUvUGE2aUYxSVozaXhOWGFubmxGSjhyY1EvWlo5R0NWZHpKUDkwT1I3WVdZcGRQczhTdHY1VTltbk52VWtUOGs4bkw5OEo3cW1JClltSHppMms2S2N2OE9scTJsWlB0SS9YMDI3NlBpWDdiZHY4d3h1azNib3BmVUt3OWVYcmJTRDJudEZ6QnZUcklQbjIzVHZ4RythZWYKaGZnalF6R0o1eVBySUdLUmZmcDdldDJWWlordU9rU3V3VDI5b05qZmlrd041SDROaHRSSWhHU2ZQaEhCVkZlZVl0YnBadkpXay91MQp6V2lyZkxwa254YXo5Y2xjOXVrVGtUYmg4aFRMR2dtTE15N3pORlRHaW84dVpzNXhSMEwwMU4xcUhOUDAwN3d2S1piS2NtdFVjbVc1CjU4RmowTk1VZW1CNWJHYi95TlA2WjJSZHc2YzcyaDBsaHlGSzllUzJ4MmZxazBDUEVTY0w5RER6UnU5VHJBYzh6TjhXL01jSHZ5T04KbmtJekQvOTVSLzRiNjcxUk9vTEdOMjdtR00xM01CSDJ4MWN2cmMrQm55T3d4MUxtZ0IzODhPa1B5UWIwZEhnUzRhOUhOM2JneDNiUApRTFdhYkFEZmQ1TEZaL2IvUEU2Y1FEdVppb2Z6eU9jVnFOdUR5V0RsMENKUFJ3WnAyQXo5bkE5cHBNRmVYeFlwMkVSK2NaRTl4cDhyCjhuUmtrY0l0YnlxSGRNWkhHbndEUGpJUGJmUTU5OFpET3JQWnpCeFNaUDJ6U0FNaThrTHJuNTFwYVMxQTZ1d2g3NVdQVmtEZ1IwSVcKS2JMK1paQUNmeEJZL3dNT0taaUxZSzVmc2tnQmdZOUJlYVRRK3BkRmFyQkMrMzhwUGRlazBhZUV0R2FYUllwc0NnNHBsSDBCV21oVAp0QVNyT284eDZORW5laUdjK2Y3c1Q4dDdnL1BmaGkvN01tK0d6ZnRCc2Z1aStsNW9TZk1kclMxeVlNNmZXVnBiWG9qdXlQRUhxZFBrCkJXaFM1UGxBS3hmYlcwWWs4VEMxMGNQOWs5bzVaaTNhV1ljNmlmTDNVenRuY3NkQ2RDQVFxVmpaOG90R2tZcVZQZ3BBY1kyTEVIT0EKVTAwMCtsVFJTdi9qcVc5cEJNZ0VaaEN3dGlVWUQ1amM0NDU2U1JSOUFtb3Y1MS9PQzFiMm55YmZZcVpqWmkvc3l3V0lwY1NmN3VncApUY2VVd0pEYnIrQUxHelJvenk2R09wVGRUcXRqM2d4ZWJVSUNzaEUzTUdEc0tXUzFvbjhnUTc0THZTU3BRYTFpRmRHZytFTWFudTJBCmRlc2V3cDdHZUhFMFVUZ1FrUnhveTY5enJxcEdkUGdQUFhqS21aZVluOTBvT3orRGxac2gra2QyQlpuMWV6T3ByNStablorTDVqR3AKR1VManRhMUFMTzNydDBYOFNYa1dHb21sQUF4MzVYNUpXVkFHTGV6T0VDdmgxY1ZaSEY4SmRtU0tzMHFmZS8yVWw2UTdNRzc2TkNmZgpUSGtpMTQ4OUtkUGRJRThzb2VweFhxcWVRVkdvZWdLeXFzZWd4cnJGejhxQlQwQjJ5QUlDMmlqVkkwMjdBYnlLaGlHd3pIZzhSUS8xCkQwMDdmQ05OdTU3WEtLdTI1YVFTeGVNa3A5WXo2WjhhZnhkRGt3dWtPNjI2R3FsTFZSdDltaUE1a0lKYk5DditMc2FiMWZ6Vlo2TlgKLzBLTkZnR1d6bGJYaEtRMERPQWQ0TTUxZWJSbHhaRFA1eU9uRFF5dVc1QlpKczhPSDF2c1pUUUdLczUvSldFdytWMTZ1WFUvTXB6RAo0MlFVMUpFR2htc0ZKZ1VLMFoxM3l1TzZsTHN4cVZYdWxLVU83SlZqVS9lc3VKWm0zTlBHUGZDZkR6ZnZrT0tDTFlCbWRCU3JVc3NKCktNWmZVUGdQV0ZBdUVIM0pHMkIrckJhODVJMlhCanNrM3JqUVhFNGx5WkdsU3BPajNDUXoyUHpVOWw5WVlaZEx3bmw4ZGZmbGtzeEsKYWxhWVZ0V3ppaDROVnRtTlNZUE55TDBNckptUGsreTJaTERxV2Q4U3BFbFp2L1VrSmZ1emtsQlBTeENydnVVMlhvVWhuZEpQc252bApTNU1lanhhVERneEozcUJqbHM1ZzFiYUN3TXRYTkN6VWJIN0JDbTZzaW9hRmp2VXJ2ZjV4b0NoT3ZnSFkyMGJEdU9CVloxcUFDVGNVCnZlTmlUbmhwWUQxbEowYlBKUGxXM2MwVUd4N3VTREdoUnRNNXJwMHdEak9LSEM0YzExUHFlS1YxTERoL0FlTXBTem1EY2dhdDVBWk4KNUxwTG80b2U0eG5ZMGxKNVNwdnVKcFc1N3Q2aXoxR216bU12VnJJTWoweHFIRzJnSjY2Zk9qMlRUYXZ6d2RxV1l1cWtqdXkyckJwRwprRFlNeXlLbElDa3Y2c3VVT2lxN2VLS0IwSng4T1JRVkxhQnBJQ0xiOGpxYXFJZzlieUNVait5VzJhSVdaUmk2L3REaGsxT0hrc0lrCkl6YTNoL2c2VG55OGdEYjRWSUU4WDlTQlFDYW9BU3hCbzRJTkk2aytaQVNrb214MkdLeDZCbVcrVWdFSXRTVVV1YStUVlhsYjFxb0EKS3B3QzBPcnZ5OC9Qcm9Ia0JtMUVGOWdLNnZFTXNTWFB4ZnArSy9CUTcvMGVURlU0NGNXdlk0blRESUpjT0VuSFI4WW5CN3kvREdqbApUL3JFU29sWTJrVmMxdTFCWGhJZ2xrNFJGeENMRlhIMGk0QWx0dklMQmZ3SnprVW80cEpldDNwMENYQ3RTVnVFUkNtVzhDUU95WXBICm94U1NGVVZJL3A2RUZyeU1VNndla2dWVDR3a1N2ZnE2d3lSUE1DK2hyalc4d1hwSjRxRThuWVhiOGhYaERjQUhld0pOQ0dXcVhLeVcKOXJVUzdha3ljUitEVlNsSzkvY0VEM2Q3TjhWOUlGblVZMzBpVlNBVHI0SFVDV3ZpWko3ZUZFUWFkZ0pUT25NV205S0FEK1NEaWJSTwoxbUJNUXlwWHhhYTBIdHBSOWhnYWoxVjVQRnJqQzRGME8ySVhjUVRQRjlPMUVWWkZsdkIxOGhKdk9KV25wczduVlc3elkvZVhLNkxSCnU2cDQzNU9ia01HcXdPbUFkNFNiM2pVS0lOMjJoZ3dxYTY2Tk1FT1ZJTDFCdE5YSjJiS0FPcUtOVG0wZjR0dXkxRng0V3gwOHJMTHoKOHpmZ3JNQjNXcGhCVnVwNG5Kd0g0L0hwaTNsZnpybjdKclhiQ1U5Rk5SOUJBbUJ5OFZhcGFDdmxXY2pGV3lFd0hjSW43UzhCb1RGWQpiejZrUUt1bXZPVVpOTU1ST3BMNlJrT2ZpVk53YnBWQUNncnJUWEpRR0oyc0I0NytmWS8xOXlXQUNVNEk5VzJpd3ZOQk83SXVQQTZoCnhabEhhYXAzT1dISW8rUlRnMVZkRERWc054QVk0ZE45eGlkalJNQmNUcGNtVXZMTXovaGVzSXVKTmRweDVielFhTWVWK0FCUGcwYVQKakpEa0FXRXkrMXMxV3B2VGFJejNxc2VDRndOVDEyZ0dqU2RJRU5qMUdvMlZ5bEpuZXdlTkJsWk5TcVBwbG4wQVI3OUd1NGhkVUhCdQoxMmdReXUxbnJ3aU93bW1RSitkZ1QzSDhCcXVVTlNEWWhEcGJKUSthZjNRb2JhTUVQVTFodmlYd2VTNWk0L0M3V3c5Z21mM2wyNzZYClYwTWFMYk04a1BPWGs1UXdVeEY0ZldvV0FPc1lkU2xaZzFWV3pWNlovU0FVNWc3eXBRV2UrRFVHQ2xnMVVWS1RuSVpSaDZQTnRKZUYKZ3VJd0FNN3RLUkFJaW94RExUcDVWNGNqUEhUWEdGNldPRTFBd080UnE2YjJRakEvTjdRdWhMc2grTlo3aTMzUFk5S3hxWG04MmVQcgp2bXVOWnZGaUY3Szc0YnN1KzE0NUJndUIzVzdmZis2bDlrSzl1eGhjTmYwaHJjdGRETUs1eGI3blFXSDN3dXQzTVFSSHdyNlhnc0o2CnJ6Snd0TzZHeW5zaDBqQ2YrNXQzUThGZU9CU2ZFeU1zNE51N3BDTkIvU09aaDBYdmxZTGtLUzROUTlZV0dCNFVsb1JQU28rRzA3ZHUKOTVaWXRTak9ENERkS3QyOGNVbkl0bkt1dFFMRk5KbTd6RXBDTEhJZUVWaExueVk1VnpnOXpRTjZkdndLa1NzTjZYU2lJY2x5Qk1ydApVUlV2OGNhVTkza3Z0cVc4ejYvSnI5U3dNUkc1N2t3MlBVOCtjMDNHM3djakk3U1JVb053VFk3M3k3WUZ3R1RQYnRob2o5YUVlZ0FzCllFbFVhL2VJa0FDS1JmU1pHREk1aUhBbGh6NU5NVmdLbUl5dzl4U1RieW1PTUREeGUwMkQwc2dSRjhKRjc4aVU2SEw3V1NwVTMwaDYKRnZRYW9HcTU0OExvM1RTR1JrOW5VRFI2czRFQnJKc3JTbFhRVVRlMzNGNUR4OS9GTGl2b1JCVkRWOWZRS1ZmUUlaMThoeG82V2FTbwpnazYyV2xCbkRaMXlCUjIvV3ZDV0dqcmxDanFCMVhkRERaMXlCWjJnV3ZDR0dqcmxDanFGYWtGZE5YVEtGWFNvV3ZBT05YVEs3OUcxCjFUZlgwRjBJcnFDQ2p2VXNicXloVTY2Z1EvYVllZzJkSUNGWm9jTHMxVTVLV2R2eU9mRHlsVUNpWkJjTlE1S005QmJVRTdkZDJ1cWwKU0pHUGZIVXliRUZzL1VvRUI3UkdlajhLd3QxZTM5THh6dmdLNG9TTnErbVVjQW5ZVlZncnl1N3hEaTNGWVBQZmVVY3RpQ0k4NDFNQwpwcHlIcFcxK0tOYW5Wam1uZVg2aXlOV2x2R2dudWwvL2tHUXFIMVVpVjBwRGtpcVpnM1BSVlRTblNkY1VSYWtnWEc2UHZnS3FrNjVVCkVDcC9URElaUkgvWVdDNW9qRzRHdXpsZTFmT2FsYWRtMEZqc0pzeUUxQnNZUkp3TTF2eldpREZWN0NaM2JDUDBrZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJMUlyZDVQMVQ1UU1IbnJZc0tpYURDRnhUTlRla0tLcG1FRlFLYXdNbVRNSENMMDlzSnNSZXJmSlJtODRhazdxY1hpU1ZjbTd2SkNDZgpRcW1yeEJUVnZ0VTFWaDJxKy9hQVdGSm4yYXc5ZGhrNlV3c2NycUk3VVpnRS9MWXRtVFI3eFlsVlNkYnNrcTBDNDFsSzRqb3dWYk5MCmN4M2ZXUzBIWGtjZDMwU3Qvc1VzQ0ZySmw2YkpGOEVvbTlLWE9mRDJ4NlZaYmxBWnFSSk4rZlZUellIWG5FVXdLd2tqbUpMcnA3V08KTDNwUXE0bFJZZ1poZGpvRWRyY0swUU4zOGlGWG1hSUhtRHJIYTZlWU1NQjZJOFZVeTBTMVQ1TFRhRmRSVEJqNEpYTGRubGVZNkZRVwpKZFpMVkhKcHMyVXZZcjZYYmhZcjZrM3B1S1Z5dlp3SWhBeUFsVW00STB1QUdCRURIUDR6VXBUdXNnWm5qL1g0Vkp5OVJWbXpzeWNIClFKeWplQVVJdGF0UndEcXp0MnBvSzVXN2FvV0dtUHIrd3BnMDBtSUJTOXpVZ3d3R3haQTByRXFUY2VJdTJGNnBSczZnVXVhczRjZ1QKVFVqNXloUERoWHVsWUVmR2p4ZXAvSTdDU1FQSmVTY2pjcHo4VzlFWDNwRndsU2hMU2FWQTdrTHJ5RmRFblNSMzh5dnNzWXBXaWVmawpYZFllKzYzb0MrL0lsOW1KTTRpdXB0TlNKZEpnRUxrUzhpeWdNeUlqR0pLZ0hoa01pdEFUL2xBWWtsQ1kxWGN4QlRvRnRRNUpPVHRkCnZTaE9hVWppdXp0OG92Z3ZWWkowajRqTUU0ckkzSmlsQml4aGk0YUlESDNHcDFLZVk0bjdiTGRFWkhqKy90UHRFUmtBd0tHUTNhR2oKRE8yYWlNeEZ0ZUR0RVJsWWhpYUt5TWhWcEtyVjV3VjFSV1FrNC94UEdzcHp0Qlhud0JJOUlIRHFuS3d0ZlErMjZzQ0V4bktWTTVibAo4OGExR011QmROdHQxc0FNeWpXSnUrcDlNaG5ndXNRYjl2c0VkY0RVNGc2Vm5GNHRaV2hYSnJEejl4ZFlRQ1lmWGRKUlBuYVJ1aUJaCkxhaFdWNmM3YWZZeVF4WFYxV25NMTFPc3ErT1ZqaXBVQ3FzSFFhdUtsMVR4cEpkbld5cW02cjFlM2tVS3Y5TzQwVEUxNzNLSlNmZXAKaDROWTdwRlRwMXdQcC8vK3NXdnE0YVN5b0YvLzdsMFBkME9kaFk1Nk9LVU0xZnZWdzhHbzlZMFNxS0VlVHVKR1VOa2lydXZyNFFUWgpVTXh2N1BldWh4UGZPMHBWeE4yN0hrNzFsb0M3MU1NSlRxdzBwRnBlVnc4bjlzWGtqblZnSmR2dGxmVndnN3RiVGlRQUpjeUpsTE10CnRlUkVkcmFhY2lMVlpQKzRDdHhxQnVSUmdzVHQxZWdJamtkdDlUWEMwVkpISWd1RnNzY1FuRHRVY2wxa01pamt3S3RyTkZoY0p4OFEKdTh4MzV2V3lrY2w0dHU5ZEZ4blA5cjNLUW9pRVVEYmEwKzNjSW9aYzhSRXZxbkNyR0FKZ2l0ZktTT2t4V1RIczdiU0tvWUkxRHVtdAp6MStVWkxUNzNBYU00T2dUSDVsNlpBRG5Mb1dRQmIrMlhVd1ZqdnlWd0RLM2FjbWxXVjllQ2F4Nkc1b3dLaTI2cmRIcHVZeGh3ZUl6CjVZdWRWQjFxdGlJVk4xMmJJTUticzl6RndsZFZwSTVOUXcxRnBCb3JVc2VtaVphUWdVcXAzMTBxVWovMzk2bEloWER1VVpFSzY4VnUKcjBpRlVPNVJrUXJoYUxzR1d1UVNTK1gxSVFHUnZ6UlZkNUtSMDB1dnZsQU11emVMb2FnVVRscVAzYnNVRHVYeksyYjAzS01VVG5KZAo3bDRLZDMzY1VrZ3haZDlkaDE5NVF5a2MvdzRpVkF6M2o1VENTVVFWL29GU09PbjRtRWIvcktka0dQSlZBZi8rWktYQ3A2VnNycXFXCkcrR0Y5bGplcCtJV2FVMzBncUJDbWlLS0dnTElFSmo4elhZNmJaaUxTNGIxSGk3d3F0RjdHbzl3bEc3bkJhcGNhc3Zqc0tnWE40dnIKNmo1bHI4TVJidzVNZEZSaWUrRGtGM2FOODBqaG85Y0F0YmhNdlN4TDY4NTRXRERQemtVeVpza015RmJxdFpqeG4reEE4NU90ZEtTSAoyb1lYK3NWREpsc090NTd5T2Q4MG44LzVxN0FKd2R1TzJZNnNhK0dRNllpVHNCWkxxdW9NZWtsMGpkS0hmTjFadEJGLzViT1hzTmd0Ck1YMnA4NFBQUEtTaHBjdWFORzdsS3V5Q3ZhNVNzZHZNTDRzVUkxczVwUW83Njh0UGZTeUhkS1NBdE9TTjhaQ0thN0hpN2lNdkNpY3UKZGd0Mmx6VzJNNkdvQk16a1VDcDJ3MzBpcE1KK2ZJay91UXE3c05tOEQ1OC81WXJkUHBTcXp2NlVLK3kyclpZc1VsdHR2cHpKSVowcgo5K05yZE9XUkZwOC9TckxrdFd3Q2lhRWMwb2F3d2c2dEtoQllldGJvRTgzbmNZM3ZKYVRlbzZJS2dqZURuelZORUlQT1YrbzlldXVzCmhTVU0wV2ZHUzBxUjU3VjRRMVdLSFd0SXVSVmFzTzROTlJmQkdkR3JiWHVmMGg3MURGVngxRVMrajlWZXc1QjQ1MklLZzFKTFRsWEwKODZDODEzdDJrcE5xT3lKeHA0cUc2SkpTSnpsZFViaVBndVlVU1pWcVNIUW5wSTY4UHJVbWNvcDVmZHI1U2FXSm5PejhwUHErcVRVYgowVG8vOVY0RG1vbXUxbWRFZEpmYURmM2p0TXRMYVM3ZmlFZzIzVlZyQXpybFNPODExWFRYeFdIMFZ0TkorUUZNTDg3N1ZkTnB2Qi9tCnhtbzZxWmlnV0Y1dXI2YVRxcVc3dHZKUnZwcE9LaFl2bldsL1N6V2RnQ3kwekVyZVAzWlROWjBVS0pVYlFxNm9wcnR5UjlaWlRTZDEKVHNQdWxYZXJwcE9xcGVQNysvZXBwcE9xcGRPWTI2T2ptazRxMXM1MFlMOWZOWjNVNnFKSTcxMnI2YVNNRzM3dTZIMnE2YVJxNldSdQptNytobXU1eVNFdXp2S1YwYlRXZGxIRnFzTjY3bWs1cS9TU3lvVzZzcGhPRFV1MHBmRlUxblp4dGVkOXFPdTBVdTZXYVRnUktmQ1orCnAycTZxeWltdTVwT3NjYnFidFYwMHJYVjk2Nm1rd0lBc055NW1rN3F0RVNVQTMrSGFqb3A5U0QwWHU5UlRhZHlNbktuYWpyMS9lVWUKMVhSU3hPQ3M4WHRWMDZsVmN0Mm5tazZxbGs2Mkg5L3REcUNYY3dBRi9jVjBYZDBrMzhYcnNrbWx1RGVIeHNLbnZZcXdDNGdmM01yMQpzcm0rWDkzRmtFN3dsT2ZlL2Vya3JRdHRkRHE1N2Jyb3hGRkprQWtKYXpKVkRRdU5MQ0FvVUpDcGVwWWJsR2hJV2xXQmh1NXl3b09wCnE0WUVLUVlHcGF2dHN0S1FwQk1wWkRXTUFwMFUyaTdMcUV5NGl3azlvalQrZEJSNVJBRkxiS2ZTMkZ3NU1zZDJ5MUpxZEhkem16dmUKUFZjYVRmSnIydHpKZHBlcmFxcFYwdGptVHE2U1Mxc2huYVlFQ2VYOFpLN1IzVzFyVmVydHRIU1pVWXhTYVdwenB4cFJoSVM1dWMwZApiY01vTjdxN3VjMGRWZnVtMHVoTzIrSFJybnFIZTY0QzZUYXV2SWphNnl5cWQwdFIybFU1ay92cVdoNHd0VWVuVnY2VVBlV0JEZXBVCmN3L1YrQk9XMFVIbldURUNyNm1RVGt0R3MwRzl3bEEraVVOemZTSEFvcEIycUNPSkRGSkhOdlFuNUdSdEhiWUFack5kWEU4RUwwMlYKbmJQVTNWQnk1ejJsMTc4ckM3c0UyVkNBcVZUeXdUVm5Rd0ZRcXZsam1yT2hBREJ0R2QzS2ljMUk5OTJsOHZIMm94RFlVVkRoT25CNgo5VFhDMGRUYlZRb0tMN1ByN1I0U2lLQmNWTEpMVmdxcjE3SWpZSm9LYStWNlFJZ0xhOTgybDRXMWI1djczUW9JZ2QybGtUSGlNVEJhCkxjcU12M2ZKa3JJbFJVclZmcTlLT2RTdXl5TmRXSWwzbVVHdDZJbkw1VkRQajZ1N1ZLYXdOeC9ydHlRdVFkWE85K3BnQ0I2OHloOFIKYTViOXRxNUcxWEtuYjdEeDJzM21CQVZGS2F0VEI1dzczQkpBd2JtMVd6VUZoUkZDcVJzTzllV3F0alVVTXVnNjRYVzZKY1N3bzZHUQpRVk1FL3VZT2QweDlwVnlQdXl2RVVDSzU0dHErMWZvNjNDbFZQdDRnaGd5ajBSM3U3dElwVDdXZVNGdW52RnZyaWRoT2ViZUxvVUtICk8yRmRrcGI2a0dzNjNDbjFlNFU5N3ZSM3VOTjZxem1zZnJxOXNQWnp6NWs1Y3Q2cjVzSmFBRXpkekRGb01YU28zblRYRmRhS0t4OUQKdDhhUFlIMWhYYkljV3Q4OVZ3ak9GWHJ6NG80SUNPY3U5WngxVEpzdnBncEh2aFpXVk1Sa1VMdG1BclhMMDFQZkxsWEV4RDhWaFFyQwpjeUdHY1lmS1FtaUlhekY5M3pTV01Xa3BZckkvRHNTZUtHOFgwMUxHSkp5a1N1eVVBOFd1aTJ3WlU5eWhxVUpkMFcxbnBUTHUwQ0tWCldvcVk3SThic2ZGOXJWL1oxVlhFSkpkQkJIc25LdXkwK2d6RExsM0RlOE90L0NMRFVPS3l4RzZQNmdGeGp4clh2RS8rVmpIb3YranQKU0tlcjNTTWlwYnc5MXJ2ZjFWUTlkUHAycHhyWG51elZWUHB0bU1sUlY3dEhsVTU1L2l0clhIbnl5YVpoYUtoNlZxOXhCVVBTWFBXcwpWT05LUjREZ1F0UWkwdmdZMHc5V3ZKVWZXNFVWbnMvNW45NEw1dm5UbThGYVNMdmZXby9ia1RzTVBwVmVVWFVmMmYwa1o0UTlaU3BRCkd3OEs3ZkppeC9RblFSSGVjN3JKUnlxb2h6TllqK1pPNzVVZnFoTDJZWXZuUDNveTlYQk8rU0s4dzNrVXg0VTZXVlNHaDdua2F2L0MKWmt1azZmeVNLOEw3bEVVSzVtSWlkd0hadVdJbGM3OHRpOVJlbWZnV2NuM1luQnhTdHBLTEkvQnJpT0FoRlphbUhlMFJHOWRITUNDcQpjblE2MGg5ckthUUdLeVN3dU9lY29BeHZMSzc5NDVPM21ueVZRUm8yVzRQUGhSRVhneFZYeEEwVmtKWXNZWG1rcFlhNUw0VVU5WDJMCmxnV2xsV0trVGFVK2d0V09QTkppc1UwS01yc0FXZ3Q4N21FLzBVV1laOWVqWDdqNk11OEY4cGpzZS96NlNtemtpbWMxUUhUSHQ2Y2kKdDAyQ09mZUNZcU9UUGF5aG96M0N6VE92RUNkbU56cU5hWk9BcUNFbk9nMFNkREZUVDV6VXNEY0QySS9pd2liVkNJbDhTZEpsYXBYcwprQ0FueXc4cXI2VzBTYjJ3Nlhpdnppd29vS3ZTbVVWckpLbWduRm9sdTNRWG5Wa0FnamM5S1doS1ZYZWlteWR2cUVwVHlkQ2txR1RRCnhrK2lReSs5ODJPajFyRHVUbmVYUlpraFhXUnBpZVZGTTlGMVpXa1pyRXFEa284VDZ4c1MwSmJ5ZVZyMGVDNXlZMFhxcXZpWmNna1AKcjR1WFBWT3VjeVVBN0lxR3E2OVZZckNENHIwdWIreDVqZHB1T05SUWphUVlYdFo2eWpNbzNuSVRMVmVUZUhGbDNGWEZidEpIMXJydQp0UjRVcjR3c0MyL1JoRldBdDE1Q0szVlhuR3k5bUpyWGNubFhuSUlESkIwZkV5YU5TQnl4amtsZC9RN2tOUXg1Tng5NVRJbzF6TFduCjNsVEJuWndjb3hNcjlmWjFncEdKNC96cUlUdlVqMDgycWhMY1h5UVFyS0lIL2ZhSVRPOG4rMk5YL25CUVh5SFpSVCtMRzlxeUtWY3kKNmFxeGl1bTY1NEEzSkZIOXk2eWtGRHRXdGNZRlErS2w2dE9uMVR5cDFWa0t1TEpvS09YazMzT2xVQXFvMXRKWVpmMjRrL2RaU2IxUQpSek16aVBvYVMzYVowUUZNcll1T1hWeGRxd0JNdEt2Y1JqSFZXaDd0a3hTZVhONUlNZFYrT3Jvb1ZndCt5Z0M3S0JlV3NnNXBpbDFaCkJhaTFCbER6UFNSeUJXS2FhZ0FWc3RNMVZBRnFyUUc4akNmcnFRTFVXZ1BJditGUWZ4V2cxaHBBRkxXK3VncFF3Q29LSHFZNEQxWmYKRmFEV0drQklzZXVyQURsNkt1c05ZWTJWM2lwQXJUV0FySTk4VlJXZ3pKQXVhZ0Q1NTVYVWVDNW5kWHRUUHUwZDJXNXB5c2VieXovWQpsTzhpcXZDUE5PVlQ2OGgybjZaOFZNMklzb0Z5ZTFNK2cxWENLcng3VTc3TC9zai9SRk0rK2Y3STkyektwNmwvNVMxTitmaFJCVGlvCnNPeWdhQktwbFFiTGQvVzcvVzZvcDN2Y0RhV3hyNSttdTZGdTd1dkhtOW9kN29hUzYrdW5MMC9wMnI1K3lsMzlycm9iU3FLdm4zSlUKU05vVDE5L1hUNXI1Rk8rR3VxS3Zuem9uMzZPdm4zSm1DQnU1dXJHdm4xb2wxNTBDdW9wZC9ReFdYUUZkMmI1K3lsTVR4UzZ1N3VzbgpHTWhGVjc4ck9vQkk5dlZUbnBCVWh1bzFmZjBreXhHVmJqWFhUaGpObGJLU2QwRmYwZGRQK2VZdjlrejh4cjUraWh0ZEh1MWlkK2pyCnB4d1cxblVEbFVKZlAyVlhWeklMK29xK2ZsSmxrcHpvM2RhUDd3NDE3N3I2K2lsRGdYSCtlL1QxVXo1UU1XaUdjMHZodTdnaTlkcSsKZmhLbUpxK3JINzg3QTNaRFh6K1JHR0xDcm42Q083dDBsNmRnYkY4LzFiclh1L1QxVSs3cXgzTHlqWDM5bEJPdWVSV3BOL1gxNCtxMwpwSGhSZE0vVjFYMzlsQW1JTE5nNzlQVlRrTFhqS25DbmZud3VaU2lhKy9HcHRKUFQzSS92cHI1K0xCUko4ZEZielhIUjEwK2g3a0UxCjIzYXV0Nitmc2lVUGJ6eTRSMTgvdVQyOGMzbVNlRjM5bGdaem5qbEpWQk5EdGI1K3l1Zk53aXlDNi92NkNha3Q5Zz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJRnEvdHg2Y3ZTVU8rSDk4ZHhJZnQ2bmQ3UHo0dFJVeHF0emRjNW1yb2E4VW5ya2k5cmErZklMQjkwZFdQcWhpNnZhOGZXeXFsMUZmMAo1cjUreW1hT0RJL3A3dXVuM05YdjVsdWI2TDUrTjhiNk5QYjEwMUQzZW9lK2ZzcGQvWFQzNDd1cUNsZWtMUy83K2wxZkRNL3I2c2ZECmNsTmZ2OHRRTXIrcm45d3RaM3I3K2ltbmQ0bDJzYXY3K2lrbk9vbGlTbGYzOVpOWUYxNVhQK1Y3NGJUMzlicytiaW1rbVA2YUp4bS8KOG9hK2ZwemlrdXJxZDNYMm9LaXZueUpIOERxQTNOYlhUOWt3cEx6WDIvdjZLUmZFMGp2eXpYMzloSk1VZC9XN3NNYzAzMlFsN09zbgpid1JSTm96S1RWWWErL3Bwc21GdTd1dkhYOG5MQXh5RjZsb1orWlR1NjZlOE9TaFdjZDZ0SUpiYTkvMFMyME5meVVaN2FVdG5mSWp2CmxWcFNOeXFLOWtyd3JYeG9Wem54WGxTMktPQW1oc2U0MDV2VTQ0NWZCMC9GcG1oVURzRU82ZHR5aE1IOEwvTXdTODluZ1NkYU84TGEKTitLNE5JSnQ1Y25vL25pMllQN3VLa0s5Qk91cGpKWjZxdUxESEJ1amYvcXhDd1lPeXljeXRmNktOZG91aC9mUGFjL3RjMWg1OFp3MQo3OCs1c1BGelBBdUFUNk9NTlJSTmxHMzFsMzB6dEYvMVBneldTTWdYbkViclpOZFg5UjJNb1ZvcE9NbzFWKzMwN0swZWZsKzI1cytoCmZjY3gvN2E4WjUzQndxK3AxYXl1NHV0a2R6dFBPemI3WVdSdlBXUTI0V2ZqKzNQYWJnazRTbUhyOTBlbDRqd3Z6Ui9CN2VjOFRzcysKcXUxTXRWdHZIYVBQUGNnWWljVys0MDRHN0JtTXpGVnpHUGs5ZmNKS1lWdnpjQmpGSElkajlMMXlOQS9DazJObzh2SEtWbHEyM0k5Kwo3N3N2VUl1Wm1MSzNYLy9oK0xtRnplWmlacXEyK2xLSENPcExFLzNhTUphZE5uYlFvV1piUU1KK2t1Y1JiblZsTTdVbktXSWhZb0RwCm5teHdYUUlXbyt4Y1VVV2pZMnlmdjVvNy9WYktzam40U1JzUlhKek42NWx4Qml0Sm41amlVT1Bac3dzK3czeTErZ2JWSkJxelpLdGwKeFN6ekdmTDNYN2RDazMwbkVoOHd0ZGM4cjJpT2k3ZnlwZ2JVbWhRZFVtRnIvbXl3RnZya3ZJc2FhT2EvU3MxdStEay9NMlg4cCtSVAp4bitjSmNpWWVmVmFmTThFQm9Cc20xUnAzZWwrWnN0aDR3VEE2ZXdac0ZUN1RBZnVYa1ZnS1dOdmtFblVqQWMwcSt6ZkZuSnl0dnIrClBuUVhPOTB5L0FRbS9McjJ3YUpkRCtYV3AwSzlBL0tjTVAvSkFiTVJoaWRLRS90RFBqdnpDWGVnMkRHZ1NHUUQvb3k0VU5VdlVEaVYKSGZqejBZTTBqTmtPZHJHUEEvZ2k3Mk4rU1BySklsR1BBckJsekYzd1dNK2tvMXlwNEI3NzhxODRYZTFqbUQ4VmNhS0J3c0Y5NGE0OApuc2ovalAwNGVQRG81ajBZVy9LUEJpdnpLTy9sSGhHNWZqdk5QS2l3K0twOGZGNUxaY2tRNXRrSlZNWjJoWmRxcGpIN25adDcyV0RGClN3UGZsSDNrNWNFcDdlSVkvTTVQMjBlaFp3eFdHZjNoNVhDTmdIOFNGT3pKd01yQ2JyaXBWeVk3SEZyb0RTOHZCbXNoN0NrSFRMZHEKK0tpWHB1RThoTlBBWUhMWUFaK1dYOUNmTk5ocC93T24xNnBIdXYzMXQxVUFQRzE1MEZQQ0dZN1BHS1F0SDRNRmMxcWlHTEYrc3hZOQpNU2ZnRHF4ajRmdjdJd2Q5TEVjeHcwWDhpQTc1QUloK2l0a2w0QW56eHJWRHhIZ1FjYi81bUhTM0U0ZHdxaDE4emthK1pnNG9kVG5DCjJYOHpJbGFCRk90OUVPekNqd0tXWkhKRURwMGZWY0o1bnEyWXFiOTd1QVVqQ3VWSHlOUHZQb3BFaFg0Rmh4dTVoU2hNWDBMMHAzV2IKb0QrZFB3YTBiVWtVbmVNaC9ZbFloQ0NJRUFWaTJNOUFpSDBmck5mWUVzTjFEYU4rUFR3M2FkZ2paNWZsdGo3Qkc4MG9NZnRGRHhERgora0ZXS2llOHVZemVqWG00MHlSZ21rSXp0L1l0WE5uWDZYZXRVSzBZM3poRndoN201Tm5nZ0kwWGMrQk9Fbk1CNjdreVo4Yno1VWZUCkNOaUlkaENOTm1CTGZJVG9UNFh4RC90ZWdINnY4NWNWaitZbDMvb2lDMnZUTk50c2Zkb04xdUxFbTNtSG0zVVM1YlBSc24vYWhTbFoKRkpvT3drTmdtMEJ2c21ydFVtOHl1eGpVbkNLOUdmOTYyVHFLNzduNlU4NjVQc0JMQ3NMbFhCSHp0UzcxcHJqdHNCMU5IS2kxS0xxaQoxc21lOFFIMVQwK2p1M0pUcTVyckRvNllmMlh5K1g5TXI3YUFKZlozd2pDSDcwanJNYUF0VVNJNGlyZUNQNE5PVk9hTUZ6OHo4TSs0Ckd3YzdSd29xUXVnak13di9DWDdUZ1NxbDdFTjJIVXk5OGFGSUJGUkNNTkpROXN2RWxNcVl4T3JEQjFVSHpIM2R3em9MYkROaUZyVHEKb25TSUoyK2RzTjk1Nk8vYU9PVHBLdUNOU0tlY0g2MnlNNEZXcldGWWFGS0ZDMUhGK2Rvd3R3OGpPM254QW5VZlFORGJvcTBGVHYwegpDNy9ER2ZPc0ZxRXBVU0s5NkJYZ3lUWDM0TSthbjRFTmRTa2NEZENsbkxLbU5CK1lDMUNwWHMyc1JGbDRGeWNNZEhSRjNLQVdOYlIrCjlQL1NjWDdFYU5qY0ZQSnpaaVg2RHQ1YTBNQm0xazBCdkg1dzg4MGNCQ0taZnVNQnFIeDZmRUlBeTFSNzZLTHkrcG9uYUdDMkJSZEoKMUk3d096UDRMbnFtckV4Ym4zamltZHFVMlpWOEtiSUFHcGNBemhRQU1CY0tSTmxXNWx1OWdPZmQ4RVlFdEFiQUVIOG1ZSGtyMkpnOApaVGY4NUdPLzg3UGZnWFh4dk8yaGZYQ2dtQjJ3ZlorM2k5azQyd3YyekI0eEp0WWp3VmhYd0NpYldKcWZ3R0FJbHNROW8ra05BMDZJCnVtNGladVI2UjhOZTVFYnFKb29lc2pQcHZ0M3I5alBmQndGYko3MHVPV2ZWemR4dFVmN3ltWDdiWUFadUVpRDFlWkZZWDE1NlFWZjQKTWhRTFJGNVd0TlZMbkhITzRFWE53cUhiWUdKR3c3c0R4TVVqd2NjaE1PRmRRY0tTd0pudnp3YW93ZzRSd2VjVkVBRVYxMUZFR1BDSgpRQ3dhaUFqd1FaOVBBbEhyY2lEeEhBbTRmdUpDSW95VHp4d1JBaDlyUE1wclp2VjFuUGo0U0duRC8wdVdCT0srMVQ2Tys3dkdyYjlJCkVlR1E2MzFvNHdOME5UOWk3TE9SSTRIQmFnd2VQMndzRWJvS2ZBQXZMR1dvK0NuRlNySUF1RHlsM2s2Wkc5VjRFVWFKNWNZQTVVWEwKTklhSEs2ZkJSRWhRT09LMmFTd2xWNE5iQzBvcWxhYngrcm03amFkZmgzdFdXNHBBYUtNRUFERS9LazhEQUhCWkVDY3pJTkw1L1ZZQQpZbXRVSDRPaWRqcVlFQUJFc2Q0ZkJ3SXIxM3RUL3B1OVQ1Wi9lN3lGeDhpdnNqRG04dnAzTTQraDY4QnY0N0g1NlJZUUFNRGFlRE9QCmRUWTM4bGh2Szhkam1rRk1EdW9NMGhmdzJNVTBsamVTOG5WMTVuanNPaEM5b1FaeDdUTFJIbWtRRTNuZHAyME1jeDRwS1lycFhZM2UKVWwzaStXTUFjN2tZeGVyRzFlaHR6aUpTTWhUVFBvMkRpbXhJalVGUW01RHFuVTIzTVhiZmJGYmZrWW5qSndmQ2FPOHMzL2dnSnBOcgo5d0IyUjU3TTkycVVVQm5EVWtZK3dSaDQybEtKRXBQVjhWWnRPZG1jTk94RUN2dlFaSDlXSG9PNnRweWNqZncvcDJhVDRFK2JtWWwwCmxpa2ZFaDdMeFhoaGI4ZUhLd2hXM3pPY2RZMmUvYTVtOU5TN0w1UVJDSDdEUmNxNjBPTUw4MXd6bEU4eFAyV2l5QzVsWXpnRG5qYzUKdHZ4OVVoRVErMk12Uk5XOVFxOTc2SUcraXBlSlZuNGU0WjlzQUs1c1p6ODVLTWR1Zmx4QmE3eE0rYnZ3NE4rRHZHNzZ6N3pQUjduYgpURTR2OUxCWmR6eVE3dXh5ak5zYmRMREJSQ2MvZUJrN3NjRzlxcHYvb09abXc0WlZyeUNpNkJsRTJCQk1sY1AzRmJBa0Zsa0czd3ZPCkVZWU9VWlFlWGR4My9PaG9LZS9oUFJCRVIwc1ZId3dPdVFEdFB0MlVyLzExL0FXOFUycmk2TTlBdW0wRWY3NW1PTmhET216eFNpSnEKdTRDL01NOGh0d0NlMDBBdm9SWUZWdnZMQWNyTDY0c2Z4alk4QU1IZUF2NXNJN0F1S2lUaWYvMElzSkZKdHp0bFRwcmhVemRBNEFORwpTNi9HaFc1SERKWVJvSEc0N3kzNHgwbGJmTEd4dHcxV01sa00vdkxDNjFUd3ZkUnQ4SS9mbVRONDlyUW9Cc2E0eVV0QmxJSkg1U21wClFHUnV1a1FRblUvUlJpeGFJalAyZWF0UW1UMGFhYSs2MThVWlZtbnhBMzdPOVJEc2xYU0VxRGNPc2xNZkF5eW5HTDFna3hjVUV2SFEKNGZWSjIwOEhlU2RkREovVUtrN3c2UU9uNDFHVEFaR0tWUWl3VnBOeGdQazBDMUlSZUErOXRLc21ndWhGUitUZ3p5NFRsRnQ5WU15bgpBY2R0RThLZXJxWG8wYXhtQWQ2RGdURXdwT09TOWIyVm5jdnFMNHk4dGtBdUdvZ201Z1BuZDM0WkpsOXk2Nmc1S2hWcG9TYkUvVU5sCmJIT2htbFBYeHlLZG9vdzd5Q3luQVlhWDhJd0RmQnJqektjWkZ3S2Uwa0drMDIvd1lqU2hVNGQwT1ZPSlNNZHJxcE9qdWpWR0JVTnQKdzJNRWV5cTVRMGoydjhLMExIWXhNM0pTbGVPRCtxT0RMTVYweEFmMVJ3ZWw3dXRUaXcvcWp3NUNpdW1ORCtxUERsS2NyQzgreUk4TwpadjhyWllqaUVmd0IvZU52bnRmenc4dmhaL0d6ZWZBWUVnWi90b0xqN2Mxc1N4N204OWI4ZjUwSzIrbjViNzQ1UGNRZi9ObTNmS1VTCkRSWG0wKzFzL29DU21VS2pDS3MydkRTMzB2ek5QOUlXaEJoUnNEeFgrSTZWVm1WejgzRmMrTVo2S1o1WVVGYktyclUzZXBhL1piQ2gKdXFjK3RLdCtHRDBFK1daMGxJOGUrR2VQMnVVcElra2VyQ0t0NURJWDVvZmN1ZWl1MTk1RnB3UW9HQk1idFVwZ2V5aSs1K2JOalArNApTUHJMMlg2MTBDYzdieG4vQ2RzeUFVRjRuaW5JSHVDZGVrc2NrZ05ENW1Rek9wUFBRYVBYYisvQXcvSUNtSXVsRVBVYlBjNU1Cbjc3ClpIUTNUTTl3ZnMvd1Fkcm96UVptMEdvb0cxMTdNekRMeHZzb1gxWFlDRGN0Y3R4V1J3Nkh6SEsvYnBHYU5WRG54N2huc1VpaFl3TmEKWDBMeFF5Y1pqUGo1MFo4d3BkRkJmL3FkSStQQVNWc0Q5ajFzSVZOMjAzL0dIVjdLa0tHQ3p2Q0dHQnJFZHp0K1lpUzVnbkduajN3OQpydU1va3p2SU5GaGxqeks1QnplYkNkUXg4SUNQK3g4d0UxQmFIbTBvL0hObWdzR3F2SzNmeDB5Z1F0dWFJVjVwSmdCRGh6VVUvamt6CkFSbzZqS0h3ejVrSllDNnNvZkRQbVFrOGVabitjMmFDd2NvWkNtSXpRVGtqaE01Q3JNWGxOZ2RhL2J1K3lETjBwWmEvd0pYcURJcEEKS2I1M2pjN252b1BXbStmNEsxU3BaYUJMMHkyajgyZWRNbm8zalUrb1MyTndYN0NJM1N0cXdSNTdsS29EUXBOMUlJSGpEalhmZHZSTAo0NzJYU2Z3SU9yakVEelpYdzA1NWYwQmJ1bWx0Q1U5WWVOcVMzc3J0aEQxai9FTExEclZsM3VkQnQwOFRYK2RreGYvVFBma293K1BICkUzZWp0QzJneDRwUFVrWG53Tzk2cm9wV0h6NW9BeXlSQTZkYUtUMzJSWXVBU0sraWJCU2dVdUhJSFBBNFk1VmJtemFrMFBuQ09CdUcKNyt5VjRrN0lHM1ZrakNBRE5FcWQ1dU9sdGlQS1dqRzBTVlJhQkNIRm5uMjBSV0xKK0F0UHlTMEc0THhnbFBMa2FleFNtMEFMQWY1eAo4NnA2MkRSVzdpUVNLSE51OTBXTWVGR2d3WjcvaTFxcVVtbHB4VUZJZERqSXBlVlI1NHRlL3ZuaU5Gb1ZuUzhhalNjSEd6ODd2bDZjCkx3WmRKVit3bkdXTzJ4NjNUT3Ntd1VHb3Q4NGRCUkdPV0M4Z09BZ05tNDNXbktYQWdKamFMazVTYzM0ZUFKenNsbkIwNEVzbk5OQmkKRHpnZG1leituMVM3aUl3RHlHZ3B4T2ZNZDUwOTgxM3Y0UDk1MmJpNVJBdkVjZ0p6bnc2dENNT09Xa04rU0lYQkNkSG5udlQxK3E3TQp1MnZNSEVFaU81bytmVE5ZeFllUTZGYjA2NDhnblZLbmJ6QWtwUG44RGI4NVZMZUs3aGdpWkFJOElxQlRZWm9JUVQ5SEJEaWFGZThJCkV0MmtKMGNDSm9TYWpxODJEQkZjb2lOSTc0MUgwWThuN25oZWU5aVZ4d2ZwK090SncxRTBuV0lvZFJoTkZ4WlRWRVRueDFLc3BIQ2EKVFpkRUFnQmc5VFZ5NHdVSTFOUk4yeGlvMUp4TEVLZ2gxUzNUUUFuOGpFanhqclIxVEtNZDkrdEtETGlVU2svczVMcUZwNkZMN1JZQgpvQ21tbFJMUUEvZXFUZVB5YUo5ZkpJTjdkbmxNY2hvYVNRbFRLSEVFNEdncWxYTnV0cFdId1FvVEh2YThONEhiNzZUZkpIOXh0MFRUCkQ1clB4MFA3alR3R0RCVEhiVHhXQy9vNEFMSThwZ2hpa01GdTVUSDcwbkViajJFYnB3eVBhUVpSYzN0VUdZUVBBQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJVFVMSVk0T0k3NWJWQVA3OG8xOEtBT0F4clNCS05aTzZ1RW9Eb05OWW9jR25XZmRKajJIZ2t5WWxIQU82bEZ4MU5ZQ0JxU3J4U21PQQpTY3k3K0cyckFhMWFaVktpL1VWcEdtVXZxVTgyTHNZUXJ1SFFHcjlCTnNycEpxRXloa1BLai9OMjVITHc1R3NuZVNBbUErdHRlOEJrCjRYWXpPN0xpS0JUR3NNUGxtVW8wQmxyMnhhT1lXaUxlbXpoaTZuMzAzWlprQmhQY0pVVmNkZ3lzdGtRSm55SGNnWXhFcnY4WVFoLzEKR3FmQlF0bzk3QmJPNDFJdC8vVVVNOU1oZzFDR2lTUlJJZjZuUDJHZU9sVTZZYkJLRlUvY3UzUUNZcmtzbnRCZE9zR0dRNldQSmRHNgphRHFZRkI5TDhoN3M4Z3YyZ1NpbUR3T296ekNxd1B1MjdXQ1BEWjQ5L0FlTElGdVRBTDFsNENWQnZVS2x6RVAxQURrWm5RTnNrYVRDClB4c3V3ZEVwa0IxSTJ3YnRlZ01tanRQZWhxZU96c2R6a0M4aEt6WDhkQkZGdWdMSjFxREJUaHR0QkRiQWl6S1dod2Y2Z05ucERWTFcKZU12TFA3aExaeEs2ay9BdkRtRllMNTV3bHNrazVTWGREV0tqOXNpZE5ZUk9yNVo1NmFzZlhSaXMyYmV6NWFmWW43M0NrNk1XenZFdgo4WFVlWk9pWVJHOFFZRU9SUVg3QlJEckNzc3E3bDY2YWFPU2hYbm4zTTJ6L2pxR0VoaS9vY3I3alRIVHBIWjBTd05PRTl3RDdLVWlCCktDYit3dURQUGcxeE9FVUwzMmVQOGZzWSt3bm5yejY4VTV5dFNlZ0grTFVVaFpXRmlUTCtocGk1OU1PeVZTcHV1Um9WQTMzQkNWZXYKd3E5UytmSnhTQU0yNXdzazZoZjRwL2NPb3c5Zk9QdUo0TDlYWHdUaGQwRnVORUQybWZFMHlGR25seSs0bzA2U0xOWTdVU2E0K1JmQwo1cE40R0hLb2o0MVQ5S2txeVA4ZjYvc2ZHK3ZiL2xmS2tBQ1RxZUQ0c0xpWjhjOGNEVllyK09adGZqcnY0QXVoWVc2KytOblV4ditaCkh3ejRBL1VmQnY2RC8wWmlEemdSZlNCQ0lmQkhDSDVibXhnYzZOMEgzUGxRQTd2TDBKODluQW8vMDlQUGRqTSsvT2NoRHIvcTFtdnQKU3VFaC9rQzlPd1R2Smg0Y1lEVFlFTHdOSGpuaFFlY1FqSEJvd0I2eTRIL2RmeHZPNEQvczRjV0FQV0QwQU9CLzNiRUJvMGNFM3ZvUAorT01KZlBnRlgvMzdBY2NlNmc4Zlg5akRESXk4MnpRRVlnOWVISC80b3o1Z0QydjBJZW9MRVRFd2t3RDRnTWRDNEl1SFFBVCtPelVFCjRQK3REYmd2R01FSUhQNkJVKzlqR0FFL0FoaFRBNDZBcnRIL0U3NVFNQWJlb2wveDRvR0hBUG9Yd0lxZ0R3QW5BRUE5aVZHL0lCN28KZ1UwTjM0WTJuSjh2QWdrS1VhQVpnYUdqMmMwTTRRZUg4Nkg3emxBQ3ZBZkhoZm5Da1ZnNEdrQWZNSUlnd0ljWWhvZURERmxFTk9LSQpnZEhFaU5HMGlJaHBFVUcwaUZDMGlQQnBFWUVFaUhDMGlOR2t3R2hTNEdKU0VJZ1VCRU1LZ2lNRlF3Q1dGQmhOaWhnOTNiWTBIOUg4CkFjakFYLzlMYWxtSDdHU3BqM0M2MUNlRkNZTVhxQ2xiaDRxVEJvL3BhVk9mRkNZT1FESlRCeDhWSm04ZHlvbE85bkFZVXgrQnZEeGsKejZmdFEzTjhQTTBQUC85Nzduend2NTBPUDVzRkpUMUFvbWJieVh5WXJjU0dMNVBqL1BDditXeFluZjluU0wxMDVBa1pEdDdkYkRjUApnWENBNWk4dHNzYnlFZUE0aW84SW5HWWtQQVlKRytYb2lzY1FZZkVZeFVwNGpNOUw0QytjL2czOFFPQVVMeEVFeFV0RVFFUlNJZ2hKCkN2NmxlQWw4WUhnSlBvbFJ2NEJvNmNIOXR3c1d3V2daZ3RFeWVGUk1FRXJONExTZXdRV0tCa2VhQnYwR0VZVFdNd1N0WndpeG5pR1EKbmlFWVBVTndlb1lJMEVUZ0VRVC9KOFFMVFpuK2lMSHlwVGh0SkdGbzRqd1JrNW82RWl3MGVlcVR3dlFwRVVNRVlFUk1qZ1QvdzRRcwpFS0I1S2tEUVBCWEFJSEVESEhFREdDSnVBS040S29EeGVTb0F3YUxmd0hkeEJBZHhWU0JBY1ZVZ0tDSnJJQVRKQ3Y2bHVBcDhZTGdxClFKRVIvb0loYVNEdzN5OW1BVWJ2QkJpOVE4UkVKQ0VvdlVQUWVvY1E2QjBDNlIzNEc0WWt0T1lKMEpvbklOWThBYVI1QW96bUNYQ2EKSnhDa3ljQWpDZkZQQ0JxYU5QMFJad1ZOY2VKSTBJaVlVTkNrSjQ4RUxFQXdvcVpFQUVyVUVBa1lVWk1qd3Y5dFVhdmxLRnNXV0xiSQo0dlFDLzlyNk9sN01XNGZ4enhwWXRvdmorRi96aC9GbXN6Mk5UL01kZVBLd09NeVBwKzFoL25CY2J2OE52d0UvWVY0SE52SUxhZmcvCndrbmVyZz09DQoJXV0+DQo8L2k6cGdmPg0KPC9zdmc+DQo=); + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + vertical-align: middle; + width: 1.3rem; + height: 1.3rem; +} +#download-btn { + display: none; +} +/* Content */ +#content { + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; +} +/* Code */ +#content section.code { + display: none; + background: #FFF; + border: 1px solid #E0E0E0; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 15px; + font-size: 12px; + -moz-border-radius: 1px; + -webkit-border-radius: 1px; + border-radius: 1px; + font-weight: 400; +} +article.component { + padding: 0 0 10px; +} +#content section.code h3 { + margin: 0; + font-size: 12px; + color: #000; + font-weight: 400; +} +#content header h2 { + font-weight: 300; + margin: 10px 0 25px; + font-size: 20px; + position: relative; + display: inline-block; + padding-right: 10px; +} +body.light #content header h2 { + background: #F4F4F4; +} +body.dark #content header h2 { + background: #4A4D4E; +} +#content header{ + position: relative; +} +#content header:before { + content: ''; + width: 100%; + display: block; + position: absolute; + left: 0; + top: 23px; +} +body.light #content header:before { + border-bottom: 1px solid #E0E0E0; +} +body.dark #content header:before { + border-bottom: 1px solid #58595A; +} +#content pre { + padding: 0; + margin: 2px 0 10px; +} +.showcode { + margin: 10px 0; +} +.showcode a, section.examples a { + color: #288edf; + text-decoration: none; +} +.showcode a:hover, section.examples a:hover { + text-decoration: underline; +} +section.examples ul { + margin: 0 0 20px; + padding: 0 0 0 20px; +} +section.examples h4 { + margin-bottom: 5px; +} +section.examples li { + color: #58595A; +} +/* Side Nav */ +#sideNav { + background: #4A4D4E; + position: absolute; + width: 100%; + z-index: 1; + height: 100%; + left: 0; +} +#sideNav ul { + list-style: none; + margin: 0; + padding: 0; +} +#sideNav li a { + color: #F0F1F1; + display: block; + height: 46px; + font-size: 16px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 12px 0 0 20px; + text-decoration: none; +} +#sideNav nav.site, #sideNav .combo { + border-bottom: 1px solid #58595A; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px; + display: block; +} +#pageNav li { + border-bottom: 1px solid #58595A; +} + +select.docNav { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #595B5B; + background-image: none; + box-shadow: 0 0 0 1px #303233; + border: none; + border-top: 2px solid #666767; + color: #FFF; + text-shadow: 0 -1px 0 #000; + overflow: hidden; + font-size: 14px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; + -webkit-appearance: none; + -moz-appearance: button; +} +@media screen and (min-width: 650px) { + #site.open { + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); + } + #main-header nav { + display: inline-block; + position: absolute; + right: 0; + top: 40px; + } + #main-header ul { + list-style: none; + } + #main-header nav li { + display: inline-block; + margin: 0 18px; + } + #main-header nav li#download-btn { + display: none; + } + #main-header nav li a { + text-decoration: none; + font-size: 20px; + color: #7F7F7F; + } + #main-header nav li.selected a { + color: #373435; + } + #slide-menu-button{ + display: none; + } + #main-header hgroup { + text-align: left; + position: absolute; + display: inline-block; + top: 24px; + } + #main-header hgroup h1 { + font-size: 60px; + } + #main-header hgroup p { + font-size: 15px; + } + #main-header { + color: #373435; + background: #fff; + height: 148px; + } + #content { + padding-left: 240px; + } + /* Side Nav */ + #sideNav { + background: transparent; + width: 220px; + z-index: 20; + left: 10px; + top: 150px; + height: auto; + } + #sideNav nav.site { + display: none; + } + #sideNav .combo { + border-bottom: none; + padding: 36px 0; + } + #sideNav li a { + padding: 12px 0 0 10px; + } + body.light #sideNav li a { + color: #797B7B; + } + body.light #pageNav li { + border-bottom: 1px solid #E0E0E0; + } + select.docNav { + background: #595B5B; + box-shadow: 0 0 0 1px #303233; + border: none; + border-top: 2px solid #666767; + color: #FFF; + text-shadow: 0 -1px 0 #000; + padding: 3px 20px 4px 8px; + -webkit-appearance: none; + } + body.light select.docNav { + box-shadow: 0 0 0 1px #949696; + background: #DDE1E1; + border-top: 1px solid #FFF; + color: #454545; + text-shadow: 0 -1px 0 #FFF; + width: 192px; + } +} +@media screen and (min-width: 880px) { + #content { + padding-left: 300px; + } + #sideNav li a { + display: block; + height: 60px; + padding: 22px 0 0 10px; + text-decoration: none; + } + #content header h2 { + font-size: 28px; + } + #content header:before { + top: 30px; + } + section.code div { + display: inline-block; + width: 48%; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + section.code div:first-child { + padding-right: 5px; + } + section.code div:last-child { + padding-left: 5px; + } + .max-width { + max-width: 1180px; + position: relative; + margin: 0 auto; + } + header#main-header .max-width { + top: -10px; + } + #main-header nav li a { + font-size: 22px; + } + #main-header nav { + display: inline-block; + } + + #main-header nav li { + margin: 0 25px; + } + #main-header nav li:last-child { + margin-right: 0; + } +} +@media screen and (min-width: 940px) { + #main-header nav li#download-btn { + display: inline-block; + } + #main-header nav li a#download-btn{ + position:relative; + top: -15px; + display:inline-block; + box-sizing:border-box; + -moz-box-sizing:border-box; + background-clip:padding-box; + font:inherit; + background:transparent; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + text-overflow:ellipsis; + white-space:nowrap; + overflow:hidden; + font-size:16px; + line-height:3rem; + letter-spacing:1px; + color:#454545; + text-shadow:0 1px #fff; + vertical-align:top; + background-color:#e5e9e8; + box-shadow:inset 0 1px #fff; + border:1px solid #a5a8a8; + border-radius:6px; + margin:0; + padding:0 1.25rem; + } + #main-header nav li a#download-btn, #main-header nav li a#download-btn:hover { + border:1px solid #143250; + background-color:#288edf; + box-shadow:inset 0 1px rgba(255,255,255,0.36); + color:#fff; + font-weight:500; + text-shadow:0 -1px rgba(0,0,0,0.36); + } + #main-header nav li a#download-btn:hover { + background-color:#2f9cf3; + } + #main-header nav li a#download-btn:active, #main-header nav li a#download-btn.is-active { + background-color:#0380e8; + box-shadow:inset 0 1px rgba(0,0,0,0.12); + } + #main-header nav li a#download-btn:disabled, #main-header nav li a#download-btn.is-disabled { + opacity:.3; + cursor:default; + pointer-events:none; + } +} + + + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/theme.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/theme.css new file mode 100755 index 0000000..7f1ec6c --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/css/theme.css @@ -0,0 +1,28 @@ +pre { + padding: 0; + font-family: 'Monaco', 'Source Code Pro', monospace; + font-size: 1em; +} +.rainbow { + border-spacing: 0; + border-collapse: collapse; +} +.rainbow .line:hover { + background-color: #171b1c; +} +.rainbow .line:hover .line-number { + background-color: #101313; +} +.rainbow .line .line-number { + text-align: right; + background-color: #1b2022; + padding-left: 0.8em; + padding-right: 0.8em; +} +.rainbow .line .line-number:before { + content: attr(data-line-number); +} +.rainbow .line .line-code { + padding-left: 1em; + width: 100%; +} diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..9e9e4de2601568908009b24f1cbc8adff31884ac GIT binary patch literal 23949 zcmafaWmFw8+wFmaySwYb5AJYqcPUWZ-Mv6@clY8}pt!qxad&quT1vlu@4EN>bAQ~- zO0u7woju9?m^EvX#2Ekpa{2%O^uG%R@UKROMFheCp`l@*0Etk5f1IK!JODuP5B@i$ zKmjQJH+X7RXZSDqUqA-X05}0W0ImQtfW<$d#J|Y=KS=c-=k!m922lSOTm94615EyL zfPY#0AL9ye1K9jiIR5L!4qyd<|CL~XAVBq>S^qyHrTBlw2>^&|$f*8zs{aQ70SV3k zffj&37l6MFYx*pD?2G-UacesV`v7Muw{v4=FJ=`-#)KPS@Up;AoU4^?F^FhgaWK)0^V?fR>0S!b@kdw;US{iux8omllE=Yh;5(x9_g(|38@ zyyi#?v4ha!4Y8`i&>TNKRjpF88rV0aL(RvpMKulbs}ZIp22>94J)bu5^^M$v_Ff0e z2>A`;LXZ{Wzz|iP*7d``CpoE*mHp~&Pgfu=eH_KDDI5is-sw~qIewk--eT$c35I2VDU4uueq=p zJ*jT`chYo+F!O@eAlz<;m6q4xK1?Mu0q+c=XrEF`BFgt~hO_hd?Cz#W;jMGoH2l@zqQAtgy zg!6nM;TI|Ip}?%{6|%Bup|uGBlw4T&&YMz?FeWICDr$z9Vge$X%F-sX)ccS|ohBd~ zv4Z7!k)p}?g#9LJ0-84*o<;YG@xIwHk3R?*j5p9g3KDvBE6D|j!?L2b{7tjWxIbe~ zJ96hb4JUC&KxEA&;|oacHp1O#7@5Hj{jQ-62IHSGTyAp7+)#(Da<({9IvG_#SbJr<0jh|p5B2SgB&RX~9&Y`%G zKXGF&%4+D!`Vby>T4oVX2hR^OW7^lZFsjMx6;FP%5NB_xDUC0!iMC-Zvu1ZWjb&$H zqSOb-B%R1Fo_1CX7eL9Y>EJWgL`P{>d43}q`i6oc(S)}pHqmUPZRUE6x-t?}uUuUv zT`ln5&Vqa7eDq0yEq0#Vk-1c7xItl!Vy>o-x+Yr1zRp4aTt#nRXLYL4Wx;jK=CM&H z1e%~&r!?KhoSmCUk?fBDXiJ8YF33}R62>hx8i+2>#eL*0aQ*JfDiV{X`m zO+zrY>nP^O%8R7VR zI+#zTDP~k;kmGWr*UD(J3@aHALG&(3(~!G$%)*r+nx@{{VzX>cd#Rn3F`z>wtza&B z#W(K>(}Tr1O~xxDxy&+(usk9UWsAS6uQT6z0$QplsjRY*<{6HSC2P5QjEOWuXt^2r zP20(V)^W3uzr&Kjl!6T5((+HO0{ddEd~7$A4mMcG;gmwz0AHbcR~lSJ5)X$l@rZ*U zKb)VLPUaqAn635s)-ono`1+4q6?G)L0!7>hZQF{(NA^8J5#szR73N3|?QuH$AXzF& zr?^2522+ZetW_ja&8e%5xtfaYAz@Sgv2-po!!=G$!Cy&I@NGIQ2!(&`=PKV*uf>xW zaaflnDbRWLhNbT=#_U@R{h+A|M;ArX^=#3$y z8abe(5Ri6EDHU*O4*Ww9V=_Tng5y_h#9rek6OdXT{)zDuL&6HjK)d8l63-I+*>N5G zg{SfBY1z-Bf?RHv6=MWUn<$HBCKp}@wV}3O5zbDU)l{gK8n^;1%0H+TmiB8{6)3i^ zLRBRLztA*FF?sx4#6e!u=%@+s{2~D@Q?-a9sPlaO=U9*YB4wFSQB+Y+i3;dMW_@zZ z0!F_p<7i%m=MM6Auf=sVOk{M2RZ>Msi1HqmCw|+|Wh#MzAJ&XAwrt{_Vuthk#w2*w zs#>@1GgXgWXDuQ&O|v@^1wR{{6x4#$9&$)Ni03NMV)NVBQd;Z!C~sv=|3I6VNu1R* zApYqv6d>svVHx-0L*#qtskbbF6PbHy&$RADdbk#N<;A=;FrXq?d)k6Jt5$;ZJFbsw znd`fQK*wuXMw&(or_0`ptfStpF5OIJ8E)8OmZEN3M|CXiC<%iefgL`3)zhWFr#beH zmqgoI6<&U1$_CJFoySb%ytn<<5KAC9tY1m-7zvd)h#5SR_K@QkcS*?CND14|I3V{L z(C}8ii1>0nYLa^|6hMbAlPJs)6j_D-i;$U=F_bsrE|HUe;)BTKy5!beKva@Dvr33K zoL(9#Mr2Fftb;eWPDM@wvRJo%1-HNC>qbU{=ZhIc1ifsm4X(}VOS8`WP*Oh{k;63c zFd#2GE~vKRR`kw(to8yjVvRu&y3dQ`G+=5{DdbLge^os%lzGlCjko=ea(Mf zqJKz#9-2>>;+`71@Q>PI!ijo@K~f+;#pwY}D@;R%g!>-kW$&TgPz_k9q0VU*{Wxq$ z@dsNRfhrnNR?N|K-1JDzQ~C0w>GVr|rk3(c6=$DzYy8~nK4qg0XEe=WL?mUg39AeG zX!s6%_q{}dl!RA&#}prB^Sm|GPZJx(2G4iXoE@!vIUx%+^It{Lk7AkA&P3q_qm}Jc zc6#v;3~b=XF0x)pQQZ%=$m`yeEGf$Ys&hhRFJ1x8sjMkmrej<0-K`SX=I^L_Fl1=B zk_Oq=naSDny3&DW<9^%=`ih&9c5_s5)K=7F^a+$$I4|30c!KE=Ct9^wrNrF(sKsw=2tH{TgcZzr`*+7=QIXIUMj^DO`xk3t;*nUx)ft&yBY`FQTmctS+o;of znWjZHwS#AgW`#)xtMiwBo@Vpn3D{GTk@a<_OSCc=SS6|tec3{);loaD@jw3r#g@>> zTq1V{lq6;3Vly|}Nv{w$xrsy^FXhq)_LoZqPiqwswWeAjneGq$$%k?WOp^P?=;U7hU z;nz@!^Jckj6Ln!^fPv%L-D=w_rSS7iWtN^Pk;K6{g9y!&B|8?f2z49cLyi`h`hCB) z6q`o6R{LqrnzXZnUwDLebJItvTmn(1SSx**mL#G#mFWRKSURD+h(E$q-{9bXha{%T z;+-5xUULQ}T=LNg%)<7d4Lsnk;WpmhaNYsR9H5=}c;3=^p@~ zv$Wot2K>>fQimO7Q{^iiJrm*l`U*6SLw5Y&Pm)-F??AA52`P|SOl`^@bzbXOv#o-% zdfby0iIm}#3#m{37SaqnKlasNlq!dAZLFUo(j3Ho&QzCvs0th4sx~R2E{2c4l)UkA z^*A+fw%JY#7x_Qh@R&(f7;)9_nc!=yFRH)-WN_VoW zzZkU}E>wNtP4z-mB|AZrMmOaDybX^wn}F5a{h(#%_sHjccVFoiuCh=&=jJF}E^3{VYiq2C^)21=BJ)K8i(`dpxO_Zl?-tDF*eloZXSpAgvSf5-q#Q_fx+EqY;CQql>i;^ z1xG)AIuAGL&-=189myLepcXL=i5-KLLBs>(S=l+_p(Wi2!|)5?l=Fr@rXurX_Q*5+ z%JPkFaX*0laq1!;DPb>4@dk0FCD-u16FSNK5LgF=A+~!&S=j({M1qiTNBf~P2Dmg^ zAQM^vxX$VCI)sv4RiA3vUKhSvGp*O%C0IjVLkh0D9xhZVp3|@};GWV}1dHoB%Uv{#u)S_GV5GS`_JkQWGUt>0@Ca z4S`p&0xrNIE;VzHawi8}nm28vc{N+V#H=!c%DsIWclurV3N6sN|7gLIm$bPYM-GPUF)9bkjPDWgHx> z6Ep^i{7slQ#~zRYkHN!v9GvYDfz=)rkB%|bWUI%C=r4%j+}ud%iiGc#NDK+M0{0?T zBkJU7oMuT~Qm_Kopm5QJ|30J}==k#aMT9-DrW0*0E*WC&1FP^lp3ua_hHKBcQ?Q-- zwTqt*|Jxo?Y@1wP+eP1M8un3nI8oMl1&rE(kOS62T?hWLE5=-Ae%7vR0-G??QKLe-1)4;ic z_;(R;4b-W0oiMO^7y-&E@5W!EPgxumJTgs-wfosNT?P;UR?N9W%j$&brwtf(mf0*( z(9i7 zgxKe+Kg~L;4OH7obAbZ;Rg1lDyqo6Jc>Gt98=$=-;}#v|>*idSAdeC3UT=qoE$#CrRccI>P(xbB=s&tbL5_dB!u+9qi6futk_v%z(s$f)li=rxZnH)2W%yTms zNMLF<5HVoA(KNds0WWQk)8`jbe;k$oy(+VfxAlRdRYA~$7C5l$)&2k%aA&sI(ZdlG zX1q+H<2ftWIk(pPc6sDp=_dT`+MUd71(|A4B7Gu)Pk$xQmfuXK2r5@i;87ICVv#T+ zmsXVcXM$d~aH;i<3I-X@k~rgF58O!&KVp`{gK=Jr>6#q{o$0L^Zy~mkTGW{8%)}$+ zSK>0Cf=F;s{R1>r0&E1fq^rM=+vV)4Ov&MCv1sa$Q#jD_hFfdpCUYbp+Qckjw<&S- z?Icj$VKiEuVC8{a3QLuI#Sl5pK7U(X?L(;%165L_LEYZv=j&)G9wd>WY8fFpfx`N#=Mu2(V&*my z9q(8JhmfqUg_i5RgON2pk`H3F=DO1uE`G!hs0#2fbKAP!r<*8_*|%z@lv=mdBRFb_ zfLadnu|dq~PPtAI!x7<9@=-%U{nNPmeS4>(f^g7zxzIFwm}*C%x(*%>W=@ob?YS@W zI_0Sv=SQh8_Ch8}YSRo=7;acZw&=gdc}0}`$t-L06=_c2!*qDNH8WWz3$na5#N4dKy6GUe)If)^m~S+h1k zGJly`SRG3(v!}l;g@lqS1i_o{0gLA)QAIC9oJqB>maQ7?mOhLL^$}gn?OVjOPD~L! z9y>uG=Ngw7MIhlCnixDok~`f8+Z{%w9ff&VUY%pq(Fi7vNtxa64{69!rXZJt*!~ia zQ2ZpN@0sRdwgjp8XT?_EObzE5*T~#iqy)TqQ@KPMpV}cSk7(z5AHNxi%#}mE^aA)K z2)?O^r>slHTHK}r;Zo-QjLBR~IT!hT2DMCOrY1fQk1(Wo?fW8JskeV35`LBSJP9*r zs;U-_q1|eJ{Q(cdmSaft&qZ-(0Rv6#Z{xUljBOXSlqf`t=eviWjE1frKd?skFuvvV%IgrfW7lPt#Sn`-{&|kak%(Gw-b<3uhcE#hjF{0qCZ_5s+GmLUe`U33JXZlR= z>g=xHdXIqXFya&-^;it3SkF_D8m`6R7yruUS~VStRHzueqeFw#R~=%jXpqzMA%xNk zQFr?H!oY{u`I?Ri=ad~c$#WgV~BRg=~ImMg&5O2Fi@49+Z*sdX)8%D$EFmHGCx!mLQOXi$an)=$5UY_mx#{FJU zUMEG@C~^GT%NRt%On||d`{vfV1goc#!y-#ebGc9+n;%!Ae;>a~eE6p!CFkC=1gzf3`;e2 zpGSV)Mh-IpSP6*>1vr+(Z|PFd(K(3;)1i!%=pK<0_Hz+`PCmX|N$W0F3^;Eix>*7km|(o5Kvwvy}4Jtyub{B4oo+cGwxH)Qg`TV!N`} z3>A?stP!-T^PW@eXNhBi1Z~oaB~k$8+L+~U)XJ;ufjrKt>|IhdbP|mdO19r(DEDN> z6&XauqI<%*s><2af{o@wFcl>Wh20f{h$L1zDP7Qi0Q9CYdLp<#5Zf?`3M@tZU)kfP zu2gg;pm4ixh%pF&QLwRd8RJvPSR>9L^>7?prNWhFRSav|^7cncv*3$_g?A+&xV|=7 zzBz(-HRQy@RvVR%el0jL5)S|AD$p0x#JT%rThUHvn>T zZdk&nl{YWy&8n8mxxi>wn8i%t@aR&!Lz79on#WQ{G?b4;MotNJNE~v~ zNmS68cucgbL)N$m`AaBwT@z?|R*K^5V1s+8BV16rmKAe8!F?^4X+X;a*XJ0A#-pM! zQz8dgr*D<$o@MT^&iPP=>#498E{OSHqAHOJt42ta=o734O2~eEgDbE_3XNKW15>w8 ziq{*hu3puo#n6X^k;)L}#J0o^(5<)NG`llF)r|m1wxnt1BK)f)qQ^bLp-a!)_j9G` z1n~!3EHLT7Ga(ccz&iB{`M(91S?q6mQ*MV&BuPUY^g|HbCqCsvGPmywITi+t-b-9K zU7CN@5>uS=UZ(d(TBsphXd?Ntr%OFcPcsqleIR#qZ>N6~tBVcJz{#J`O#d_3%n@n# zXWV3i+j=7fq4t-7`6?6Bg4}1H`69+rdL>9Nq&V{qyU6}~0r8|!;0Kwp_D?vxd_pCL zGzq#8vIX^iS-zQ5S2pUMD2i@%ra37u@I1N*;Rbyx>8!RIFS43(bprB~wQP~Kae0Ueq#VG#&k+Rz)AdFV2|DXpjEg!&`nWs4_SxYX8U zFU4EkqFaa<%{yK9bxejLdu$IgH0Ml2q$<%Lw_AI`Zx=dZ9v=89=fH4+V^W+Q@-*}U zTq$2y#`?A}NPp)+93Zay#UaNm2Yml!K$`4#8B`0&Wwft-`ET13qJ2N+Fm3^e~iKf%#7I8Db5 z6>gwUr~4qsF_Mh=rG%P5#r*3#muZ?wb=!x3N%G2`jpd5GNGAHh$L*ct5~7IA!3~U0 z8L7nY2=c10y?B*nUI;>ks@CV*$^45Z9HR95^mQ!B{2ayEr-qmzGmF5<^gLAYMFMoV z3N=l-paFoe3@neQzD%zt!vOtdcAje?HHExMO)0cm>(TE{Ctw`QoSBa@J1-k7@uKxc zgxEp3t0x_&_7R=?6Ey~$u1g$#1C@<91`>aKXThYmczG^!O`CD5cW+zw484w~cDp5a z)avDK>&-Z3QiWAUA4qtxEq_kJaU)9mPHoWGdA5?GXykikm`v90+Ucl@xeV@3U_<|0 z0YFF{WUpIdCINhN-0prx9uqyIh1gr2;PbtzxY*}F#euE z4x9h?FOh}|hvNjl!Wif6C?b@pBwWBhA`eneuaON6cgoV`T7>-#+@{L*xFES0JryIr zFK1AB&4>3;$1$)ZDfW3kuLgUg&iolK7TmS2tA#9YGbLNzv2V>1DCOy#RfpuDu=jPl5NgiDi9G8c(K|+(n`1t}9(b>{`RV=c zQn(f|#o19uFF+U8M!Qefxd043OLTqrX|vfsnZGI%xJ&=|Lld*~b&QHg*atn)60mY{ zF{rD5TOK*4Hun&hg-_bl-n0AN(zAE74nk1nY#cFEyR3*w8>{Lq6r*9M2_+IQEvMw6 zSuTiEZbj@U`;9MbSv;|V&p*`V^kJ^BQJ_)ZeiO7Ny{wZfj*h-uHts{|S+fLKC9mo6 zl9)`G19%chD^0!SMgsWfMFOiAYXI)2loF;3t`eW>cleFGS^}1bbw%t3Ynj1T6MZiQ zG9nG&j3;Wh&jNnMkY#~X_8##{2^`u9{6q1$3cqh&bS<6UIt5~iRYfMTUu3AYD;Z67 z=7|~Ldx4Q?EY&DpKwaez{{6mGIOK&~NJcU2s0e*BQ^RqLZJbZXVg-{d39=463``yB z&a8Qnyv)ec6f6+BJyS>G9+EIlAsdvdT(*dYDz9b3qk6nn;bfsE>_6l4@8?XAra5E@)Q0RRL@~RJ17i6}*+8aXM&%k@wAape;sIS3nst zW9@f<7kdV89HZcn3PexJsmi(v*6<~qF1E5@^2R@34=f9DeZf=U(a#$&@D5R)KPyAh zDGO<$5T87{y=0A}HhG6w>#E<(hJM<%3+=`6jLF(bqgKdCZu;vqhtqN_?Q0;N9l9`5 z%nQe%=+J(|7leeKQuca#w+L4d((y+I8?IZkFc4Y2($IL6mPKHVXm?58azJ~VU{lyp zqZhp=9~jm`7gCFY2eeq$p%>}|#V}A)i!fEFHPi}XF#+*lzv9Mi&@a>n>*m0tdQ?S^ zD5JnT%D`K7_A2Xy3Ivd~k`J&!TUGQ5lbfLFHtrORd6?R8sh%s(l<}_mWO&H=w@zCQ zwJA7CCK6iyuT9nmL_kZX@~LJ7X#?=7Yrg^vZ*Y)E&-cNs`TZ?cjtLns6m4`9Id)9$ z;pB!=f*;w6!|!I-b#@+1O$r4F8`Ww3(sQfDaCcF;zSiFXoPe(WL$^)uRTj$;907OC zzjLVP&i`z*$TOX(_Rp}RQdq^uq6H2G^OL2g}o zeS7gaOBQj*<@B~ohyu*3{IEyn`8EC--6@1^08?}M*IPAomq=-QJOBy|UGjOguT5PwPR0n{wx zW&RtsGq5~r@&{N7O4_W9o)b7#o$5!IPoN(#|QX^sjh z{<&&Wyp`c+&>`tu`cF`hDQh2+4slx%W)QCN7IPgdhNnNCh2TZ%v}axj7x7UF7c5Gy%O}ccA4j4| zgwDN3W4!;RlFxs0dZimG+CFGbXFvnxPi!CGkR9hh&V8K`q^sD;Y8Mu9nKyh-M?!GL%RXPJ+36Td0W=&0?^*M@?jHe1a2sGAo#TXAegHY~5bwG7 z1bpM??-NQji87$gaw)}#tN$dJyrtzLF8}A6mxnyt5iq7Gll#+UkY3&C1@9_;h7S!vXT$;PU-@<Ig1~2jk zEf9yTIzX%Kpwg{o6!l{r7U%0Y9Dl=57&~gj&{_vV&2aEihSBZ8X2#is{T0J{hBvr! zpZNPrQ+x>NEM#{l36by7cu}8_9iS<_Uj^0<2^xj2Hzj>Vc1#yeI!&ii`7@kb!S)D$1G@sHtk? z?{xKnTEl0qbv*Y8in0{mfAMg(#&sHA%lKv#9BI`D$uei7fVjV3on#r`d>oXXOzXR6 zZf6%f_JRx0ocf7PVINfHZp(OMCQ$;KCYNkDgN9q9_pJ3lX2qBIZlak9SQY!lp2b3y*d_FrltYC$v~ z6XsUNaxeNJ0&*^rk)R3W)g0=?Xf1{CzSztNR8}F!X#I%HRoVD{%sFJA%T`Qk zvQld1RCSlHRt&$9i+?Jqc6nuybJov>LLI6< zIY^}rc*9ztZm;W76qnQJ#S&I?tg7x#@hZUQQcuLXfVb)=QqHYaJ??mM6)UsYB@9yj zlrcG`MooU^-`F7VXitwA1g@fg9g-8LP<|c9{JzItM>m3%?UWZql8;o^l)8DG=Z$?~ z>z!jPZzqN$mda;CNxo^qKa;Joz-2YExWkb`k#`DLHWxl80_E_uho)|{YXbd} zM4(d>?pCbFp%EI0YiS$C+Po?pRocvXJ_LE! zF$KskeWBV&SAQ?76M4&WoS^p*%_Zqwn&KTYy^X4#>GtWQQk&|wS73_XSTVwgsyg;O zm*oMsYrM#JJ$MXx*Y-Ubw$+#WIRoh_9X~?px&F8iH8SHya;qkNn+C?so!3d z=I>PN#$)T7qC><#FruNU3((lYBL?Az7YbYa1VA{n&1~)IN6N00pSIGTv*vA{1?U)E z(6Y^o;;iY#Wz=E#v5si=&t|q3c0)PN8O0}m4w#BWzKwX8il+Fsg=V3O`}jsFv7)ER zp<{RILRCdZ*&-HcEVN#2AXykkcSU(aKT4e%j{01Pd+`LUSD|C;SUv(QhSt6yofhDD zekT-J*9Knw_I_NjLRBm|YFLU9Ue%D$Pm}?|N|x)#Ss=!6_9=H2(nPt40smzFe%S zgHTCSDHq`^^Gx$oL2!%K60P($B!#%~iTX~8fdz%8jlwhWcFx-iJn{kXD?B4?_PYTX z_0f{$EaVd6g@F;bzZ`{O`vLswC41qs*bIN(LZ_L>%oTF@;?gi=`$Hv^yKI&3?A7?X zcg>^A>VN#ctNswPdIPQX*Hm;wC2&Puu;&;@V-M@MFe65Xm}E>YS{w&|K5)!w1`-SE zQ8R~f<-KNK!>uf*DeCw-FXOlnsCj=nLb zc3q|ZYE9j&2X&D)ZF?R(GimOm)%%jznB3AdT|~e|rIXcLCDo$Ye&SB_L052JBsA3x=jhJ?8ThXjuNj6Xr4<^HCFX~lk<1AB|ifPxSHs?Amee+r2=^VoB3!BC?GNnGg0^j4}9jtEP}WX=AO9>PZ# zeg2Fz2ff_91JlyOF0yU@)Q;L;$rh>&R&_I^-Dk<*?aUzPFeqJ7l zNkPS2rMZ7&i&mpR2t>7y?9$_e9^0J(GY6@x1}WH>t?9C(pL*wCu%7}=hn2X=45B{! z5UU$Mf=#JlNAXU)ds)n0rul$<4_K6OCQ)%In08F&rm|#v$vX$X4v^)V~<5 ztr&5xC5YYaJv`|KUh;S*A+F=pF_P+U}AG ziM4ybb0uyiDwhIzUNlyA^_=Iuf9z$`^wW-^CekNfD>RzQL^jaJA#L8M2ADw=Q&5Y* z>ZjTJ26^`J{A{KD%yhSHdDkVo5;J~#=IXX9Egk=r_<3H0$e9_w;af-@706Pzq21V( z*TnLt9jQ^@XOTvN7mPBhKIt?JExJ(l$Uc@Lbybzdi?F@WAT`gxe8L!j=!!=QA!n89 z8JAA}MY-JrlDD#Xpvo*epc%S@gV3(Z^qc~1<0a6?W)8t%3o|kx(P?AE48UhxxIJT4 zt#BZe+~J9{mEjL{wu;Kf9)S{bMR0>013NhExux1-evgY?N#6LEoLJJCU%FO7FE~P6 zx1T2{>6rsg8C_STbdSMNU+>!iD)~q!6!eqG*98*8@Q1-#G5=NQMb1C*@iU1_lLRVn zX&nh0ot;R6BR?af8y$RFx?QIjo9P(9B~QuTovm5A`pXp+M76Z~wF8S0h;Dn?ywW2$ zgZt4O^iFP;zl*o2>XAs|Elu=3+eeN0eX7eMkTFk|kLwimw0k^Ao%mdF#*R4PMAafM zo%p(Mo0{-PT#@~->Smlmvas?FOvQ=q9~`kW6B00+lRpQ?a9xn<`dJ%eVC!M9=_-Yb_!gQ0pY0(aJppLz0#3Xj0 ztRF`XJea@bMVSlT9t|Wgbcuvhvkt=3qNdt8ld{y=?{A`Zi;Mqu#_1PeNUOJ>wx9QTmIRY()H7GP-_ma!q!S)6CqaOM> zt|^T5s=EN!T1=eX2wV%`e^2>c$bRFIQRCAZfHE^{86OdaAo&T05^pVJk0WQOco^Xg z(~+y?^TcbaCnyYp@v9MzAo%bHae)e|E14P^)UBo7n-dCyzMM;kBKR0n*HT9c4+}xD z&LvG>2c_m}@J~(SHLjSg>5k~7fxI=oe;rgPbZ~V%T34=P(zO4$O}8J^az6HL44ckf z0zVDX+aD$I2Mk4R!e!$-=>Ed=SFh$Qq_qa~zOKME*tAuebjU7sJU(FbunvJ9OiMG8 zgjBSSlIil`=S-)}qRwu1@*C}z_`w5vknqn0#O@0#=-rRrw`U{9Ai3Po=1GWx<(Xdl zWT^P$amh7JwI43#*7G*H9Vq^T(rl&U7{LvdxXK##8<0=z%B7=YG0$`dUubzFr1b=l z|5bbGZihV$N%QA&g*u%gFfNGIsXlmHm!+QY-~RU95Uet}KA?Xj#U#uk^ry(nX4dwF zm74ADumEV4*wwed_!Unmc_)$Jm*-fb^7#@xG2VTY#xmP4sN358CK)YMMy@mm;f+7m zSZjx0P;I--0ZO#1*LRf+^gi#z_=PZ}^?{q;8}59{>#+Vr2_^yqIl~ma z)W2A1>2_!(gxW6$3S?dg#2%<0v0C_TwYhP$;AT{QsKtd$uGvt`Yw+xIYg89^s;a1) zQYx{CGxbtYZtj4wbxJ;Q;YHm|a=h+W(YQv8>V%-!=)c*JSQM{=F-(w2lq=i1V5h2& zKo4WqZP*}Vv6q*db2sgfeD|4?`D)Vh0FTs3AJ0`1_&O@~vmd65DQ31~)cs(X(OI89 z<4hdF1}DsYX$l>2;6b)DHG-D|SZjh^tZ!)0q(-C=dK=gEQ9hO3A<^MdgWPc;r((9) zxUdo2BN}O$;t$zy5Md^?arP0W%)ci+;zH>*jx7{#NmRWz!YTcfsiOOnm8O+eYtD(7 zVqB9r=^2(UTi~EvpkX|9_uQ~{(_6F@OT49~4K~F#zHD0cm^m_-7Lwnta0pDgozYTX z0$XcSGkbMZZu?cLrtkcy?CPBviqQ#}kBP)H7HIcrZb$SbKvL5lZ@`0q1vot<@Aw^`*4P31TapWq!r&z^O6JWz=;7=v3`B`W*DrUD-VseR1>GM_mMzSMPC^V1AKOO6=0@`N3^X- za+fNl_EqjR3NmJmQSw4t1@ z#UQv`at=*4ql$y$ zUj2?oE!U!{O?Ntiy0SdH31*G*hjX*rv!p@jr72K}QQ&hnN!gktO%Zh1%0-S3o2^A= z6;|pm!A!2A-^^~R0D@iG889cYBO9UbURhPPVg;(g=M}MT;l=Gi?0_J;kM8xrQ0l)O zoh**X5Kj<~WM}fhAViyjJ%&8gpi$LPrGU8KM`k*v^wF0{}Plv>h8JQ*|`G?y9D?~O5F8?Def)i{P%)BhnAYUsqcaBaU7qV=-oQ4ApMxz zr7>0{Q%d*9f*1<-HeJ9_Y7%$JNXGd5Xs*J!Kp+w6RYOdd8)}{~hcOe$Y4BRQxd z`DbUQ89rEXZh~BR;cVM)#9@czb`qdYca*zS*0>D^R5t>UjL#xWI0i-L6HhFzBi)3jTHRl^K|5XanB}Kwd$_ z^sVFV{`&Eij{JxIjPb2;k?Tik017MW<{Q;^AI#QiVGT2s!zS<`iZjoUDM*a18cH7% z76AZ&0zw%BXgXLpuXFH{fykXX)w?cPu;Q7sn7VIN0vwUlS{VBfv8YuTW@0MW#c_$J z-@u023k&nD`mB!o0%Yw;6EXYkO*7~(;Q-fSreWfd#ZS6BvUUnp?OiI+@4s3+oY?z1 zq|bQdiiIus=!%Ldcil`(Ntt7kij?QNJKkCPleQq`a7`;Ib`jp$^H^T@z4J2512GV; z93~JCW#9Ri0LssOb!F=ShrU&Z5^N^>Tf%RuZFnJy_I1B9?CXc4t571)NnAS#xQI|& zE-v>^M81(ajsi8L1SxQ^6@`gYQfm{jhMcfG0afL^Jw+h2yx0 zx4K`W+ai7Pw)Ux=8J5^&ny(tlAD2VQ#)v6kEBZuup%qkV7@gooF4|KJhH@*Yxd`=p zzO9|Ox4u6dJVEsxFcS;P>L;1!sLS6C70oyY+h$fBa_!|wG+<4suc*1RX+}Un6&1H3 zps%DRSXj8x95iAs#1{H|k&J~L7~^P~mdF}2m#_xp7sC)Nx#89RDY`xV!SNVjK^EA_ zDjVcE)qcZ%Ma8gBHduP5{#mS>fwdOn71f-{t$12)M4!{px(KDEEPrl9+?cv#?UV?x zEiCpO$kPV5BSOR0vw7$v7IYO$F0|!Ji~v<*^95Yz^0FA@0~_nc)nhKPH;4?9IV^DR zXyG>7gJoUzgscKp7V_?5qsAs?RR*dTHdNRZb3hG6^C%lt{+RkCz%S;vFDUUQNa5u< zT*W(c%QWUPxd|2_Vot)KmkOlA2?cj-2R+-tOV$2!)lIRvw$U)$S?)})1S0@3eykx( znKmSN1`D{mU_r~pPw7VuCkfbmYH^yg2DvVuqZyFC;9>9}-r$Y|Lov7s_7Nxxw|0cm z(nbXuVdfxV+wqs(8SWHWqkMi~!_pJwk#jDGN$$$s#r;dvVx?dl7Sc8AsML|#A&^P12sHd z%9(^@4f4@89Img6#nw4F1ZROXU~Ypza-`8mx3+|0+}BXSzm!csUav`SVJsev;pcH5 z^n9CCBr1khZRmaK_%H}}C_1A_91f-QGDOJPI8sq zZjM#{1O3Ff#DmZ#qD(!!fv0|MrLu^mu&mGje*(-LGvfyfBqDoPzKnc0<=`3h)E(+} z%&{{G!z8T4ftiwG5V@)a0uFp;^)ZyK!VHrkFqJrfS5VfDA1#Je+_NopR^eu-OqsX#-XL~`E^Jrp{klHFUC$FTMRB6|7 zM9Bp3r35(!JfHw>0(fB9uRBZ`c@XkKx%vyt#fH+TmT+12}JA#h`4dT*}w^NGbKd z+Ck1$F5DHjmVsExEYx)wjdz$z;*7a(N~#9NWCtPx9(6;kMd-*nj>5J!Y&hVw;GXml zb`Zz_YjE6(3O?1@Yn82O#%-Q3Ae^_SF}Mw6N`ov|*&S{OC8iKu+*zXd`7uur2iGQJ zxZ!qV$XqTLU0xSUvMV^-(d=rUaKafjMUAJLR4JyN>dblG=lWQYyGS+5fqB z0cfPhFss1zde4_l_?wbVa?>M`r(&WL5e|ee6u7vi*8`?2l)whjtTrY_h$!tEG;{^a zQzkyRo}>DfRF!C{wS}Y(Mn!MfNI0#HL_yBWa*~nEeJIdvo%ZSm4t=UC*>9sVBJ@{n zA;JQ30R>OxojiOFA1-v7Um*WE`@ToCQ0p51vNjYw8I#06E&Z1|>PQ%SvDDVLsP~P9 zF;SMs)It0IK=S^x>U)4>FerbR`1QvPqg44Be9`cKZ)~4(E1OEe3MKf!md^qgaG~k4 zhEt9%^U47O@A4|4hOotLC*AaZNsD(0D$s)eMPtcr=6)i%qFM(KN)S}O^Ts(KfP9ck z5(*+vMtUcW@^)S`{R>g}bx)zUH4iDYNC)QaKKC6ioYydZ(U8L1F$@PS{kcL+QRXq%(~xUy%BN(?TU#hQ!8L>u2Hz; zf6?ke7++JB4VrF_Mt(#R9|)yiETqi)uOZghK!%NEqjyg9X96t99rc6&!}M&l#%mMv z?^lCyjipag2k1!Q+Y!Y07U}^Jk*@}r5|Y^lf=UCFi9k|vH&PT|WOoW<8aCPp4mO%d z5lx+-L%#?UO^SEYz^wU>hE%kf&@su7|BWXP9YT4iMn(fYmjoilL>cfyjd%YU39czq z8vz+TSh^oeo$Skx!g4WE3*|S+ZZ_u=Fs%0-tt&>FVdJ3IJQlf5r+aa%kE{ztT&OQp z28w>N;qLChZ@Qyw_+6Ip2HA~_Vf*06uoyQk!L~it{PMo(K133sYewcBnDlPZ($@v* zeXp}P<}^C?#ETGdqtQ#kBpYi=KWj?^7#_pwRz+|Mwdos6+G-Fr>@stxF3^MRGUvb$ zNxmu`;e)TGDf?s4n1Y_d@=k>PjUb04f>H0cu0Wd;=AmKI$l>n%z>IP)XVh^?o}*;agIe?koefYu*Dr!~q>KMJ}j8oNPN29_Qi}`Lze$7@>`rSv4C689Y7+ zbvTm?2M)o&eMjKJh8g?Rm-LCzYH5edvqUlqG{UVqx4n&ohf2AVVq0v@m^EW60v6VJ zbm+OzC=`x~#y6)9WcCVl>)t9@=wB-UK-BIt2D)8XR04ewCxrAN&eKCHB^E)k&E*q_ za?c|vuFRB?$(EhL=E|CT((SOQi8z<+?uSRkO{TaSNY+R=q_rK)V8oLHC&?&j94Nfr z9RXnYw3^of3ihB_Z0s_&MUJb^K@LbfmKgx~LD&0WOf5gFj>;qo*a{v}0g_d2nRtpEz7hr|Vm= z^>^BA^O=axuuhqx<^&WV%B~Lyd#;QGtuI&Ep&sWdZR*GXIGHyTH!&-@Koxy3AehEq zo0f$K5sR;rxJs{XETLliCU;u-l=!(q&M94rq+yvb6K4V@)sFD!AqE;iMqfnjN!>)U zzD_X#3_L)H;0_}OC5JLPDPC-7fkni6!uM7oil%m^0{&}K#KcqL0s`+A%iM_3srom$ zCurSJJ2naqmW%}xC1`PD*`lK|jZ{`ZtKKW7mKp-#PA>Di7pWe~5|0NN)7E!D89zPj zkLbyiml4?tRgRe`V#S2x{@mpb2pD=s)wbG5en*q{`9SKO1*WLdt9edT%>Cm;7?_JG zp9VTe>1WN5bzWf)6yveDUSj%2W@a`G(jB+>9}M77%L=Nr`t{WMYuio0otZZV`eu6c zDS~xeyzDD1jFpEdv0*;-_74s$pn96Q5x@$i>I%8Uq_!|;Og}$6^Th}GBt*~v{_O?1 zZ|ofxg4>>U4$i^k@33n24>us)@Bt~B=IkG(vgD8-{@$A|#=0;Xv~Mq@IPL;d;@RXVU|qrxoxvOYSHfG2WubPr(7A}>~kgiW^@ctBN)45l-Y zPzB`^7;uD;Jy8sLB&!AkL+bv1t0AFusJ*iIO`&5SY@M_)GogTqf`vb!u!sbHa+4P5 zVmbx@62s{ee_G@TyBQ#gp!g{>=0fg1P}Y-qlF*ulvLvrStTq^ey`PuV^l?w;WYs&# z>e6jzzbvry%Q)_&7_?$)ceX=9`@u-T*@dYA7KUBQ$^ryPaV;)!Db!vDW?*YAPzS6t zln@+{gefDjUk5u(qchuy9!f>4A&>-Crjy+7y}W#@vnY@uQ1NRQGaUsfVf6GScf+$* zO$uYt0?y#qsdB!d&wz$(ugf{HY#|OoED+7g8I*UTlA6lasyI}1;K}jA777Zfk2whT z%Ja-JjTkusvO>@XkTVGuNIf){fLTMQ9BN1MX}|2f?P?+_?m7`GXy4?KA zrw$Cw={GY?rv)#ke26~s>J>=yVwBltN`D4i0H$NyY#M|b(w_mLjA*9=-vNg}&@2yW znVyBIy!FHZM03sDi=W#BVLEIuJ`G}VQH806rwDI5Uw3ecaE&?GCFp=gJ^+uzi|FVD zH?p|nfGZkeH_QX5%u7)@%h{5}Gp>-yVr%E880O>`dEprRoS}n!P=MtvIN2*@1(oDn zlcoR>vs8?BA*`LCrJT_8sTU5^-0B9fmK!qybA4&PKvt1+{47SUquz z)LzdOFcY~`JR>LIb(6;>aymk#_6vFz`*GBASw~z1jj9}TjpwkFW0l=UG;R!_l z-i%`#m`#~pnOBvU>U3bYD(GYx>9cSz{uKI%Wj z8K8k(br^ zZ5nLHNrXMtV}vv}*C$0bzF8QzWJn(ovsO+hosZf{1X$gTA#6n-fSq z2u!i~zum3;{N({Red+myU)_r%l$3dl-~$pz!X~6;4KCY#vH8CuV-o*k_>d#UR3(p4 zwJpdFKZTo;R8Gc*9zddsjD(toSp@7@S-ff%ouvex!YkI{<}3|2R47P@@F0N^$r9v3 z2xJmS<-!sHHuFAE9N+76o0QK>|83Air~qT35D#X}8>~vgSOC!+%d4sSn1ww(pIs)D z?j)`2tQW3ZoR8gvZ!$lOdgLI3S^yVrGHq?ru^@q#!I7nC`0y@4$U^2 z>7I)kBSV@P6_qq)5Ku!buyrB2{A&uHhC%Y6KF`sWAjoc`0*NX997K~FSLs_kWXE0( zrqGm%h{LV!p%NY*^)e8Eu^aDa(SB^wWhj7U1T4aI2p2sAvkJbusHAB^XpU+IeO)JVZrSLU@X;oJ%A4ysl#C8s#lc!$4*uAJ~`7w){H* zN=m_TF12QAL`rU`NZrEq)e$WzV3avf$XCmAYVOr+?;80T0M7&0-ZW*btY$ zwbh4g!{$g}Xp}shkq1wmsuYod2h>bpA{6iZi7KuIkXyPlA%c{+pT zLar zd~zcBS0aLCS}52u#khdBl-??b1;ASc=BZRwYIrb)e3^7K19LUQg_-yHn_vL+)xHC| zwFZ4N*ZDKupCthdNr-4$Y<7WdvL4*G0g87ALA|=%|3Dj%)!9mwrVwD5LCfd%SdsLC z%qkG0SkVwYG_;0TI)KJOmACk0fhSHq`(G7drRG)C>kdUgf0kZMhT%U&Qe4bHUkyJCCx*rVq4@f*^T)SBBg?})b2=} z&2{!3a|{Dk#f&Y;Qy#t6WDqsks4j$-x_~TU=yhb}=zy!q^}^|6c;qyDy$8_lvV9<& zg+twSM*0niv74=D($IiIKxM*RAv+*L&{n8Nu;efJFrJFYy7n6}%&#`pIM=f}o+OOL zdnMsK*XV@nZ&6aI%At*s`Ei@2?<$JTJ z{vs{dhaSOXguC5hJVUm49PZRlai79+|HnL%JWD5o`i?`;`|l;CPm08#o&9vxh@5r% z5+_iWg1EyiwdvXOHF2_hXRkid5YN1EQDNeflkP`k@CzBO-TGBANOO+KOq;JIMi9FGtILLk%( zQ!(nOV+ZvLLtLr2C^dg}E4(=>$0}k*j}kb!Er`3$q`wXHo=EWv-?BU*yPSCga8lxY z;*?G7WdX@S9KNzU`Ke!G4%rCmB8jYG2?-St-0Z62W}vl&A}MNm3Xn(=rwsJf#iMaE zVHUXhJRtw4%3+4l3KygtT#LaAGAKagv&f+)5xsiXJ7Uv)J+@xO{nMvi5lLkRFz@=H ziyyZVO@Z!$mY842D_NisO}O=59)Nrz{U#cvvE&<@4K)!?95Hf5Bw;B;it8P7c20iD z3{5oqmdG+Zr5Q*U-b~SRS_l?XT)W@Ft?$JBRniH&BR15OuoypJWJH58V9UzK#;{SqLoU7PwX1hC*N*-HiZ6S1ExRMa>W+Dc&IH7P~?epWVfAprvM>R$1ebQI3N z2QOrIig~JaD5Ow)g9K10J+hR;NG{F|4r!o~Ksh~Fh`trYKR!-if~xTclfdFES%NuW zROkdLrB3J3d4!0UEhcgFnxD5GIn=s!$DkFM))mjaMnTL~iDv%&cUc^>o}*`;4~K>E zVg_)GRg^GEfy@b-Mxd!UcR-Hz=ho>C0xo$x-7f*x5kHZ^+0b^&2F!{-s2U`SG)W&K zm-ER3oErxHGAr+dQ8~((xWrI=$5a@ZTX2DNqk%Ln3*`Wag{X5DXBn@-KF$dt;>)LT znT-eFX1(3B4>Ip5D)qV$wTv{m_bnrre2a=Cmx4-OanrFNH@ptYhDXA+GoMdQX+GEG z#hy*GAA+wqNQYp)1AR_|X8^ zHS3S~=<~()1JK0}0p~Ttw(*pOj>oXbq=RG}N>});-NehGu!WbD^=*GNX&CN_n%yErg_Vjr;4)9KHvZnLi#lQ)JWOLK?Y_CT@l7T+)sF%1(_0n)C&8!mXLTFg0% zBsjo6=Z|`X=$25=Hj<^-q5JqC+>%Q@zY_N9RLg-4E+;j%Yk?<`5H`ln`zIrVafUBN za6H@a531v}sV~hqs$DJDV6ZGw!@Ga!At%(k3R~lZ*jc)cb3%SFQRUX>P?aFwh=v>? z12AgE{gc$)YXHJOdgl~GZMFvw^uc&VwssKoAZ+g5>akW(iP0sL0DJX=P1C0e8wyd|(8bT$8iWTwf=o>cG-90RM-0c313<~*yT zu$nUQOTnzk!KlK2Fn=t4wBAR^-#igd=99q?7h-DHgSNf=QJsSXg*_1%L8`%;)U&xa zi-bR0$#iiopR&=y&T4cUoG zP^=tLk!&5Pk^5ShRI$^Ft3jBRFd#=FO9BrxP$NG|F+x!*0!BPRGeHh$i8N>+^V6U) zGYb^sZfvKVP{uu1O+Ffm*(0z-Cv$aF^QU)vqx&q05&82Lf{Jn>ovEPuH^R@0G^JN> zTv*stZY(&O|cBwk;^OxHH;M_Y1Fn)SW| z&d~bj8cI?*m1=2J4!T-3SSVYD4~2uw^yq+MEjVJCfxwo%;nvQeRMLki^}O#89*e5) zdE85si5Lm~Ji?qRZjlHF1P3CGkw7BDN_JXH64Qo^jhZ|dM0$*D)41?u&~V)Mu)bcW z#&9r(xPK6Mmq<)RKA|@ECvc183ws`E(|3~uJ2+_fdZ7nEv85pD?>x5MsGbu6GwPlI zy^C!!I=nD$uo+BivUQK~ug;bn&25!!0>^Qi#eQJ8*Onc z0T*)+@r7K1!y+K!PSVaBVBrLv0fK4_DiKI9^GKBj6vQ!yWXIN{31OruPjP__K*iHc zYB_@l1`HHe4OnI&q33u%H=buJLftb~&_m3R0PikVnYzG1{6SC&q~G#*fpNf6`zA=o zLQoV;kYHdXE0F$80GG5H=Ud%yA*6UB0n(uIdTYvOtqv z2O_VAQbHgA?ZGZk1O!1b(a8gqiq&G_v!M=<@&Pz_WVnVlO4%=*DP_eGfJd*HiH^dJ zkR7xBOU)@xO%^Soh~sp)1bxisOa8`&^RVu9yQskfXY_|c3=&A6R!Nc!whDP9XmvV^ z=SqJY7vB$~Ujd8OYMf}3n^Ue{0vSiki3Uy_582^2>0K(V;b*Bz9uAR22*B(XQqluT zW2LrCcA~d?3Fu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..6eb48e7d492e4290175c03218b5530a9d9220182 GIT binary patch literal 52660 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 Xh{gj8fogTf@X6E(R$0P<_m%o@fv!po literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..2383f47354b74e261bb9874faa5d6d0fe38d507c GIT binary patch literal 27068 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..bda2005c0248244ab89377c7c8c04934b4c1a825 GIT binary patch literal 23716 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg new file mode 100755 index 0000000..e031390 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..0959ecefeed75716d0f3abf3b4b4db05ac27e574 GIT binary patch literal 51876 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
+ +
+
+
+
+

Topcoat

+

CSS for clean and fast web apps

+
+ +
+
+
+
+
+

Button Bar

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<div class="topcoat-button-bar">
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">One</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">Two</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">Three</button>
  </div>
</div>
+
+
+

CSS

+

+.topcoat-button-bar > .topcoat-button-bar__item:first-child {
+  border-top-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+
+.topcoat-button-bar > .topcoat-button-bar__item:last-child {
+  border-top-right-radius: 4px;
+  border-bottom-right-radius: 4px;
+}
+
+.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
+.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
+  border-right: none;
+}
+
+.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
+.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
+  border-left: none;
+}
+
+.topcoat-button-bar__button {
+  border-radius: inherit;
+}
+
+.topcoat-button-bar__button:focus,
+.topcoat-button-bar__button--large:focus {
+  z-index: 1;
+}
+
+
+
+
+
+
+
+

Large Button Bar

+
+
+
+ +
+
+

HTML

+
<div class="topcoat-button-bar">
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">One</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">Two</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">Three</button>
  </div>
</div>
+
+
+

CSS

+

+.topcoat-button-bar__button--large {
+  border-radius: inherit;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-button,
+.topcoat-button--quiet,
+.topcoat-button--large,
+.topcoat-button--large--quiet,
+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-button:disabled,
+.topcoat-button--quiet:disabled,
+.topcoat-button--large:disabled,
+.topcoat-button--large--quiet:disabled,
+.topcoat-button--cta:disabled,
+.topcoat-button--large--cta:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Button

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<button class="topcoat-button">Button</button>
<button class="topcoat-button" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button,
+.topcoat-button--quiet,
+.topcoat-button--large,
+.topcoat-button--large--quiet,
+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  padding: 0 0.563rem;
+  font-size: 12px;
+  line-height: 1.313rem;
+  letter-spacing: 0;
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  vertical-align: top;
+  background-color: #595b5b;
+  box-shadow: inset 0 1px #727373;
+  border: 1px solid #303233;
+  border-radius: 4px;
+}
+
+.topcoat-button:hover,
+.topcoat-button--quiet:hover,
+.topcoat-button--large:hover,
+.topcoat-button--large--quiet:hover {
+  background-color: #646666;
+}
+
+.topcoat-button:active,
+.topcoat-button--large:active {
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+.topcoat-button:focus,
+.topcoat-button--quiet:focus,
+.topcoat-button--large:focus,
+.topcoat-button--large--quiet:focus,
+.topcoat-button--cta:focus,
+.topcoat-button--large--cta:focus {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+  outline: 0;
+}
+
+
+
+
+
+
+
+

Quiet Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--quiet">Button</button>
<button class="topcoat-button--quiet" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-button--quiet:hover,
+.topcoat-button--large--quiet:hover {
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-button--quiet:active,
+.topcoat-button--large--quiet:active {
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  background-color: #404141;
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+
+
+
+
+
+
+

Large Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large" >Button</button>
<button class="topcoat-button--large" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large,
+.topcoat-button--large--quiet {
+  font-size: 0.875rem;
+  font-weight: 600;
+  line-height: 1.688rem;
+  padding: 0 0.875rem;
+}
+
+
+
+
+
+
+
+

Large Quiet Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large--quiet" >Button</button>
<button class="topcoat-button--large--quiet" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+
+
+
+
+
+
+

Call To Action Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--cta" >Button</button>
<button class="topcoat-button--cta" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  border: 1px solid #143250;
+  background-color: #288edf;
+  box-shadow: inset 0 1px rgba(255,255,255,0.36);
+  color: #fff;
+  font-weight: 500;
+  text-shadow: 0 -1px rgba(0,0,0,0.36);
+}
+
+.topcoat-button--cta:hover,
+.topcoat-button--large--cta:hover {
+  background-color: #509bef;
+}
+
+.topcoat-button--cta:active,
+.topcoat-button--large--cta:active {
+  background-color: #1976c3;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Call To Action Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large--cta" >Button</button>
<button class="topcoat-button--large--cta" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large--cta {
+  font-size: 0.875rem;
+  font-weight: 600;
+  line-height: 1.688rem;
+  padding: 0 0.875rem;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="checkbox"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.checkbox {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox__label {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.checkbox:before,
+.checkbox:after {
+  content: '';
+  position: absolute;
+}
+
+.checkbox:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="checkbox"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.checkbox,
+.topcoat-checkbox__checkmark {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox__label,
+.topcoat-checkbox {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox--disabled,
+input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.checkbox:before,
+.checkbox:after,
+.topcoat-checkbox__checkmark:before,
+.topcoat-checkbox__checkmark:after {
+  content: '';
+  position: absolute;
+}
+
+.checkbox:before,
+.topcoat-checkbox__checkmark:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+
+
+
+
+
+
+

Checkbox

+
+


+
+

Examples

+ +
+
+ +
+
+

HTML

+
<label class="topcoat-checkbox">
  <input type="checkbox">
  <div class="topcoat-checkbox__checkmark"></div>
  Default
</label>
<br>
<br>
<label class="topcoat-checkbox">
  <input type="checkbox" disabled>
  <div class="topcoat-checkbox__checkmark"></div>
  Disabled
</label>
+
+
+

CSS

+

+.topcoat-checkbox__checkmark {
+  height: 1rem;
+}
+
+input[type="checkbox"] {
+  height: 1rem;
+  width: 1rem;
+  margin-top: 0;
+  margin-right: -1rem;
+  margin-bottom: -1rem;
+  margin-left: 0;
+}
+
+input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
+  opacity: 1;
+}
+
+.topcoat-checkbox {
+  line-height: 1rem;
+}
+
+.topcoat-checkbox__checkmark:before {
+  width: 1rem;
+  height: 1rem;
+  background: #595b5b;
+  border: 1px solid #303233;
+  border-radius: 3px;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-checkbox__checkmark {
+  width: 1rem;
+  height: 1rem;
+}
+
+.topcoat-checkbox__checkmark:after {
+  top: 2px;
+  left: 1px;
+  opacity: 0;
+  width: 14px;
+  height: 4px;
+  background: transparent;
+  border: 7px solid #fff;
+  border-width: 3px;
+  border-top: none;
+  border-right: none;
+  border-radius: 1px;
+  -webkit-transform: rotate(-50deg);
+  -ms-transform: rotate(-50deg);
+  transform: rotate(-50deg);
+}
+
+input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-icon-button,
+.topcoat-icon-button--quiet,
+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-icon-button:disabled,
+.topcoat-icon-button--quiet:disabled,
+.topcoat-icon-button--large:disabled,
+.topcoat-icon-button--large--quiet:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button">
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button" disabled>
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button,
+.topcoat-icon-button--quiet,
+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  padding: 0 0.25rem;
+  line-height: 1.313rem;
+  letter-spacing: 0;
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  vertical-align: baseline;
+  background-color: #595b5b;
+  box-shadow: inset 0 1px #727373;
+  border: 1px solid #303233;
+  border-radius: 4px;
+}
+
+.topcoat-icon-button:hover,
+.topcoat-icon-button--quiet:hover,
+.topcoat-icon-button--large:hover,
+.topcoat-icon-button--large--quiet:hover {
+  background-color: #646666;
+}
+
+.topcoat-icon-button:active {
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+.topcoat-icon-button:focus,
+.topcoat-icon-button--quiet:focus,
+.topcoat-icon-button--quiet:hover:focus,
+.topcoat-icon-button--large:focus,
+.topcoat-icon-button--large--quiet:focus,
+.topcoat-icon-button--large--quiet:hover:focus {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+  outline: 0;
+}
+
+
+
+
+
+
+
+

Quiet Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--quiet">
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--quiet" disabled>
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-icon-button--quiet:hover,
+.topcoat-icon-button--large--quiet:hover {
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-icon-button--quiet:active,
+.topcoat-icon-button--large--quiet:active {
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  background-color: #404141;
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+
+
+
+
+
+
+

Large Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--large">
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--large" disabled>
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  width: 1.688rem;
+  height: 1.688rem;
+  line-height: 1.688rem;
+}
+
+.topcoat-icon-button--large:active {
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+
+
+
+
+
+
+

Large Quiet Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--large--quiet">
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--large--quiet" disabled>
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--large--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-icon,
+.topcoat-icon--large {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  overflow: hidden;
+  width: 0.81406rem;
+  height: 0.81406rem;
+  vertical-align: middle;
+  top: -1px;
+}
+
+.topcoat-icon--large {
+  width: 1.06344rem;
+  height: 1.06344rem;
+  top: -2px;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.input {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+}
+
+.input:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.list {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.list__header {
+  margin: 0;
+}
+
+.list__container {
+  padding: 0;
+  margin: 0;
+  list-style-type: none;
+}
+
+.list__item {
+  margin: 0;
+  padding: 0;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.navigation-bar {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  white-space: nowrap;
+  overflow: hidden;
+  word-spacing: 0;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.navigation-bar__item {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+}
+
+.navigation-bar__title {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.notification {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.notification,
+.topcoat-notification {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+
+
+
+
+
+
+

Notification

+
+
1
+
+ +
+
+

HTML

+
<span class="topcoat-notification">1</span>
+
+
+

CSS

+

+.topcoat-notification {
+  padding: 0.15em 0.5em 0.2em;
+  border-radius: 2px;
+  background-color: #ec514e;
+  color: #fff;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="radio"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.radio-button {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button__label {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button:before,
+.radio-button:after {
+  content: '';
+  position: absolute;
+  border-radius: 100%;
+}
+
+.radio-button:after {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}
+
+.radio-button:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.radio-button--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="radio"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.radio-button,
+.topcoat-radio-button__checkmark {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button__label,
+.topcoat-radio-button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button:before,
+.radio-button:after,
+.topcoat-radio-button__checkmark:before,
+.topcoat-radio-button__checkmark:after {
+  content: '';
+  position: absolute;
+  border-radius: 100%;
+}
+
+.radio-button:after,
+.topcoat-radio-button__checkmark:after {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}
+
+.radio-button:before,
+.topcoat-radio-button__checkmark:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.radio-button--disabled,
+input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Radio Button

+
+






+
+

Examples

+ +
+
+ +
+
+

HTML

+
<!-- NO LABEL -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
</label>
<br>
<br>
<!-- LEFT LABEL -->
<label class="topcoat-radio-button">
  Left label
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
</label>
<br>
<br>
<!-- RIGHT LABEL -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
  Right label
</label>
<br>
<br>
<!-- DISABLED -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat" Disabled>
  <div class="topcoat-radio-button__checkmark"></div>
  Disabled
</label>
+
+
+

CSS

+

+input[type="radio"] {
+  height: 1.063rem;
+  width: 1.063rem;
+  margin-top: 0;
+  margin-right: -1.063rem;
+  margin-bottom: -1.063rem;
+  margin-left: 0;
+}
+
+input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
+  opacity: 1;
+}
+
+.topcoat-radio-button {
+  color: #c6c8c8;
+  line-height: 1.063rem;
+}
+
+.topcoat-radio-button__checkmark:before {
+  width: 1.063rem;
+  height: 1.063rem;
+  background: #595b5b;
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-radio-button__checkmark {
+  position: relative;
+  width: 1.063rem;
+  height: 1.063rem;
+}
+
+.topcoat-radio-button__checkmark:after {
+  opacity: 0;
+  width: 0.313rem;
+  height: 0.313rem;
+  background: #fff;
+  border: 1px solid rgba(255,255,255,0.1);
+  box-shadow: 0 1px rgba(255,255,255,0.5);
+  -webkit-transform: none;
+  -ms-transform: none;
+  transform: none;
+  top: 0.313rem;
+  left: 0.313rem;
+}
+
+input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.range {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+.range__thumb {
+  cursor: pointer;
+}
+
+.range__thumb--webkit {
+  cursor: pointer;
+  -webkit-appearance: none;
+}
+
+.range:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.range,
+.topcoat-range {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+.range__thumb,
+.topcoat-range::-moz-range-thumb {
+  cursor: pointer;
+}
+
+.range__thumb--webkit,
+.topcoat-range::-webkit-slider-thumb {
+  cursor: pointer;
+  -webkit-appearance: none;
+}
+
+.range:disabled,
+.topcoat-range:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Range

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<input type="range" class="topcoat-range">
<input type="range" class="topcoat-range" disabled>
+
+
+

CSS

+

+.topcoat-range {
+  border-radius: 4px;
+  border: 1px solid #303233;
+  background-color: #424546;
+  height: 0.5rem;
+  border-radius: 15px;
+}
+
+.topcoat-range::-moz-range-track {
+  border-radius: 4px;
+  border: 1px solid #303233;
+  background-color: #424546;
+  height: 0.5rem;
+  border-radius: 15px;
+}
+
+.topcoat-range::-webkit-slider-thumb {
+  height: 1.313rem;
+  width: 0.75rem;
+  background-color: #595b5b;
+  border: 1px solid #303233;
+  border-radius: 4px;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-range::-moz-range-thumb {
+  height: 1.313rem;
+  width: 0.75rem;
+  background-color: #595b5b;
+  border: 1px solid #303233;
+  border-radius: 4px;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-range:focus::-webkit-slider-thumb {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-range:focus::-moz-range-thumb {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.search-input {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+.search-input:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.search-input,
+.topcoat-search-input,
+.topcoat-search-input--large {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+.search-input:disabled,
+.topcoat-search-input:disabled,
+.topcoat-search-input--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Search Input

+
+
+
+ +
+
+

HTML

+
<input type="search" value="" placeholder="search" class="topcoat-search-input">
<input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
+
+
+

CSS

+

+.topcoat-search-input,
+.topcoat-search-input--large {
+  line-height: 1.313rem;
+  font-size: 12px;
+  border: 1px solid #303233;
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+  color: #c6c8c8;
+  padding: 0 0 0 1.3rem;
+  border-radius: 15px;
+  background-image: url("../img/search.svg");
+  background-position: 1em center;
+  background-repeat: no-repeat;
+  background-size: 12px;
+}
+
+.topcoat-search-input:focus,
+.topcoat-search-input--large:focus {
+  background-image: url("../img/search_dark.svg");
+  background-color: #646666;
+  color: #fff;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-search-input::-webkit-search-cancel-button,
+.topcoat-search-input::-webkit-search-decoration,
+.topcoat-search-input--large::-webkit-search-cancel-button,
+.topcoat-search-input--large::-webkit-search-decoration {
+  margin-right: 5px;
+}
+
+.topcoat-search-input:focus::-webkit-input-placeholder,
+.topcoat-search-input:focus::-webkit-input-placeholder {
+  color: #c6c8c8;
+}
+
+.topcoat-search-input:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-search-input:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-search-input:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+
+
+
+
+
+
+

Large Search Input

+
+
+
+ +
+
+

HTML

+
<input type="search" value="" placeholder="search" class="topcoat-search-input--large">
<input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
+
+
+

CSS

+

+.topcoat-search-input--large {
+  line-height: 1.688rem;
+  font-size: 0.875rem;
+  font-weight: 400;
+  padding: 0 0 0 1.8rem;
+  border-radius: 25px;
+  background-position: 1.2em center;
+  background-size: 0.875rem;
+}
+
+.topcoat-search-input--large:disabled {
+  color: #fff;
+}
+
+.topcoat-search-input--large:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-search-input--large:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-search-input--large:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.switch {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch__input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.switch__toggle {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.switch__toggle:before,
+.switch__toggle:after {
+  content: '';
+  position: absolute;
+  z-index: -1;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.switch,
+.topcoat-switch {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch__input,
+.topcoat-switch__input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.switch__toggle,
+.topcoat-switch__toggle {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.switch__toggle:before,
+.switch__toggle:after,
+.topcoat-switch__toggle:before,
+.topcoat-switch__toggle:after {
+  content: '';
+  position: absolute;
+  z-index: -1;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch--disabled,
+.topcoat-switch__input:disabled + .topcoat-switch__toggle {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Switch

+
+




+
+

Examples

+ +
+
+ +
+
+

HTML

+
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input">
  <div class="topcoat-switch__toggle"></div>
</label>
<br>
<br>
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input" checked>
  <div class="topcoat-switch__toggle"></div>
</label>
<br>
<br>
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input" disabled>
  <div class="topcoat-switch__toggle"></div>
</label>
+
+
+

CSS

+

+.topcoat-switch {
+  font-size: 12px;
+  padding: 0 0.563rem;
+  border-radius: 4px;
+  border: 1px solid #303233;
+  overflow: hidden;
+  width: 3.5rem;
+}
+
+.topcoat-switch__toggle:before,
+.topcoat-switch__toggle:after {
+  top: -1px;
+  width: 2.6rem;
+}
+
+.topcoat-switch__toggle:before {
+  content: 'ON';
+  color: #5dc1ff;
+  background-color: #404141;
+  right: 0.8rem;
+  padding-left: 0.75rem;
+}
+
+.topcoat-switch__toggle {
+  line-height: 1.313rem;
+  height: 1.313rem;
+  width: 1rem;
+  border-radius: 4px;
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  background-color: #595b5b;
+  border: 1px solid #303233;
+  margin-left: -0.6rem;
+  margin-bottom: -1px;
+  margin-top: -1px;
+  box-shadow: inset 0 1px #727373;
+  -webkit-transition: margin-left 0.05s ease-in-out;
+  transition: margin-left 0.05s ease-in-out;
+}
+
+.topcoat-switch__toggle:after {
+  content: 'OFF';
+  background-color: #404141;
+  left: 0.8rem;
+  padding-left: 0.6rem;
+}
+
+.topcoat-switch__input:checked + .topcoat-switch__toggle {
+  margin-left: 1.85rem;
+}
+
+.topcoat-switch__input:focus + .topcoat-switch__toggle {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
+.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
+  background: transparent;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-tab-bar__button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-tab-bar__button:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.button-bar,
+.topcoat-tab-bar {
+  display: table;
+  table-layout: fixed;
+  white-space: nowrap;
+  margin: 0;
+  padding: 0;
+}
+
+.button-bar__item,
+.topcoat-tab-bar__item {
+  display: table-cell;
+  width: auto;
+  border-radius: 0;
+}
+
+.button-bar__item > input,
+.topcoat-tab-bar__item > input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.button-bar__button {
+  border-radius: inherit;
+}
+
+.button-bar__item:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Tab Bar

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<div class="topcoat-tab-bar">
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">One</button>
  </label>
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">Two</button>
  </label>
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">Three</button>
  </label>
</div>
+
+
+

CSS

+

+.topcoat-tab-bar__button {
+  padding: 0 0.563rem;
+  height: 1.313rem;
+  line-height: 1.313rem;
+  letter-spacing: 0;
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  vertical-align: top;
+  background-color: #595b5b;
+  box-shadow: inset 0 1px #727373;
+  border-top: 1px solid #303233;
+}
+
+.topcoat-tab-bar__button:active,
+.topcoat-tab-bar__button--large:active,
+:checked + .topcoat-tab-bar__button {
+  color: #5dc1ff;
+  background-color: #404141;
+  box-shadow: inset 0 0 2px #313231;
+}
+
+.topcoat-tab-bar__button:focus,
+.topcoat-tab-bar__button--large:focus {
+  z-index: 1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.input,
+.topcoat-text-input,
+.topcoat-text-input--large {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+}
+
+.input:disabled,
+.topcoat-text-input:disabled,
+.topcoat-text-input--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Text input

+
+




+
+ +
+
+

HTML

+
<input type="text" class="topcoat-text-input" placeholder="text" value="">
<br>
<br>
<input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
<br>
<br>
<input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
+
+
+

CSS

+

+.topcoat-text-input,
+.topcoat-text-input--large {
+  line-height: 1.313rem;
+  font-size: 12px;
+  letter-spacing: 0;
+  padding: 0 0.563rem;
+  border: 1px solid #303233;
+  border-radius: 4px;
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+  color: #c6c8c8;
+  vertical-align: top;
+}
+
+.topcoat-text-input:focus,
+.topcoat-text-input--large:focus {
+  background-color: #646666;
+  color: #fff;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-text-input:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input:invalid {
+  border: 1px solid #d83b75;
+}
+
+
+
+
+
+
+
+

Large Text Input

+
+




+
+ +
+
+

HTML

+
<input type="text" class="topcoat-text-input--large" value="" placeholder="text">
<br>
<br>
<input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
<br>
<br>
<input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
+
+
+

CSS

+

+.topcoat-text-input--large {
+  line-height: 1.688rem;
+  font-size: 0.875rem;
+}
+
+.topcoat-text-input--large:disabled {
+  color: #fff;
+}
+
+.topcoat-text-input--large:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input--large:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input--large:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input--large:invalid {
+  border: 1px solid #d83b75;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.textarea {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  vertical-align: top;
+  resize: none;
+  outline: none;
+}
+
+.textarea:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.textarea,
+.topcoat-textarea,
+.topcoat-textarea--large {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  vertical-align: top;
+  resize: none;
+  outline: none;
+}
+
+.textarea:disabled,
+.topcoat-textarea:disabled,
+.topcoat-textarea--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Textarea

+
+


+
+ +
+
+

HTML

+
<textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
<br>
<br>
<textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
+
+
+

CSS

+

+.topcoat-textarea,
+.topcoat-textarea--large {
+  padding: 1rem;
+  font-size: 1rem;
+  font-weight: 400;
+  border-radius: 4px;
+  line-height: 1.313rem;
+  border: 1px solid #303233;
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+  color: #c6c8c8;
+  letter-spacing: 0;
+}
+
+.topcoat-textarea:focus,
+.topcoat-textarea--large:focus {
+  background-color: #646666;
+  color: #fff;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-textarea:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-textarea:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-textarea:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+
+
+
+
+
+
+

Large Textarea

+
+


+
+ +
+
+

HTML

+
<textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
<br>
<br>
<textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
+
+
+

CSS

+

+.topcoat-textarea--large {
+  font-size: 1.3rem;
+  line-height: 1.688rem;
+}
+
+.topcoat-textarea--large:disabled {
+  color: #fff;
+}
+
+.topcoat-textarea--large:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-textarea--large:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-textarea--large:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Regular.otf");
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Light.otf");
+  font-weight: 200;
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Semibold.otf");
+  font-weight: 600;
+}
+
+body {
+  margin: 0;
+  padding: 0;
+  background: #4b4d4e;
+  color: #000;
+  font: 16px "Source Sans", helvetica, arial, sans-serif;
+  font-weight: 200;
+}
+
+:focus {
+  outline-color: transparent;
+  outline-style: none;
+}
+
+.topcoat-icon--menu-stack {
+  background: url("../img/hamburger_light.svg") no-repeat;
+  background-size: cover;
+}
+
+.quarter {
+  width: 25%;
+}
+
+.half {
+  width: 50%;
+}
+
+.three-quarters {
+  width: 75%;
+}
+
+.third {
+  width: 33.333%;
+}
+
+.two-thirds {
+  width: 66.666%;
+}
+
+.full {
+  width: 100%;
+}
+
+.left {
+  text-align: left;
+}
+
+.center {
+  text-align: center;
+}
+
+.right {
+  text-align: right;
+}
+
+.reset-ui {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/* This file should include color and image variables corresponding to the dark theme */
+
+/* Call To Action */
+
+/* Icons */
+
+/* Navigation Bar */
+
+/* Text Input */
+
+/* Search Input */
+
+/* List */
+
+/* Checkbox */
+
+/* Overlay */
+
+/* Progress bar */
+
+/* Checkbox */
+
+/* Radio Button */
+
+/* Tab bar */
+
+/* Switch */
+
+/* Icon Button */
+
+/* Navigation bar */
+
+/* List */
+
+/* Search Input */
+
+/* Textarea */
+
+/* Checkbox */
+
+/* Radio */
+
+/* Range input */
+
+/* Search Input */
+
+/* Switch */
+
+/* This file should include color and image variables corresponding to the light theme */
+
+/* Call To Action */
+
+/* Icons */
+
+/* Navigation Bar */
+
+/* Text Input */
+
+/* List */
+
+/* Overlay */
+
+/* Progress bar */
+
+/* Checkbox */
+
+/* Range input */
+
+/* Radio Button */
+
+/* Tab bar */
+
+/* Switch */
+
+/* Containers */
+
+/* Icon Button */
+
+/* Navigation bar */
+
+/* List */
+
+/* Search Input */
+
+/* Text Area */
+
+/* Checkbox */
+
+/* Radio */
+
+/* Range input */
+
+/* Search Input */
+
+/* Switch */
+
+/* Text Input */
+
+/* Radio input */
+
+/* Overlay */
+
+/* Textarea */
+
+/* Progress bar container */
+
+/* Progress bar progress */
+
+/* Search input */
+
+/* Switch */
+
+/* Notification */
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/main.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/main.js new file mode 100755 index 0000000..6dcdbd8 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/main.js @@ -0,0 +1,44 @@ +window.onload = function(){ + var showCodeDivs = document.getElementsByClassName('showcode'); + for (var i = showCodeDivs.length - 1; i >= 0; i--) { + showCodeDivs[i].firstChild.onclick = function(e) { + var element = e.target.parentNode.nextSibling.nextSibling; + var style = window.getComputedStyle(element); + if(style.getPropertyValue('display') == 'none'){ + e.target.innerHTML = 'Hide code snippets'; + element.style.display = 'block'; + } else { + e.target.innerHTML = 'Show code snippets'; + element.style.display = 'none'; + } + return false; + }; + }; + var slideMenuButton = document.getElementById('slide-menu-button'); + slideMenuButton.onclick = function(e) { + var site = document.getElementById('site'); + var cl = site.classList; + if (cl.contains('open')) { + cl.remove('open'); + } else { + cl.add('open'); + } + }; + var docNavs = document.getElementsByClassName('docNav'); + for (var j = docNavs.length - 1; j >= 0; j--) { + docNavs[j].onchange = function(e){ + window.location.href = e.target[e.target.selectedIndex].value; + }; + }; + var pageNav = document.getElementById('pageNav'); + var pageLinks = pageNav.getElementsByTagName('a'); + for (var k = pageLinks.length - 1; k >= 0; k--) { + pageLinks[k].onclick = function(e) { + var site = document.getElementById('site'); + var cl = site.classList; + if (cl.contains('open')) { + cl.remove('open'); + } + }; + }; +} \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/rainbow-custom.min.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/rainbow-custom.min.js new file mode 100755 index 0000000..a25e178 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/js/rainbow-custom.min.js @@ -0,0 +1,11 @@ +/* Rainbow v1.2 rainbowco.de | included languages: html, css */ +window.Rainbow=function(){function q(a){var b,c=a.getAttribute&&a.getAttribute("data-language")||0;if(!c){a=a.attributes;for(b=0;b=f[d][c])delete f[d][c],delete j[d][c];if(a>=c&&ac&&b'+b+""}function s(a,b,c,i){var e=a.exec(c);if(e){++t;!b.name&&"string"==typeof b.matches[0]&&(b.name=b.matches[0],delete b.matches[0]);var k=e[0],g=e.index,u=e[0].length+g,h=function(){function e(){s(a,b,c,i)}t%100>0?e():setTimeout(e,0)};if(C(g,u))h();else{var m=v(b.matches),l=function(a,c,i){if(a>=c.length)i(k);else{var d=e[c[a]];if(d){var g=b.matches[c[a]],f=g.language,h=g.name&&g.matches? +g.matches:g,j=function(b,d,g){var f;f=0;var h;for(h=1;h/g,">").replace(/&(?![\w\#]+;)/g, +"&"),b,c)}function o(a,b,c){if(b + + + + + Topcoat + + + + + + + +
+ +
+
+
+
+

Topcoat

+

CSS for clean and fast web apps

+
+ +
+
+
+
+
+

Button Bar

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<div class="topcoat-button-bar">
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">One</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">Two</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">Three</button>
  </div>
</div>
+
+
+

CSS

+

+.topcoat-button-bar > .topcoat-button-bar__item:first-child {
+  border-top-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+
+.topcoat-button-bar > .topcoat-button-bar__item:last-child {
+  border-top-right-radius: 4px;
+  border-bottom-right-radius: 4px;
+}
+
+.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
+.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
+  border-right: none;
+}
+
+.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
+.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
+  border-left: none;
+}
+
+.topcoat-button-bar__button {
+  border-radius: inherit;
+}
+
+.topcoat-button-bar__button:focus,
+.topcoat-button-bar__button--large:focus {
+  z-index: 1;
+}
+
+
+
+
+
+
+
+

Large Button Bar

+
+
+
+ +
+
+

HTML

+
<div class="topcoat-button-bar">
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">One</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">Two</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">Three</button>
  </div>
</div>
+
+
+

CSS

+

+.topcoat-button-bar__button--large {
+  border-radius: inherit;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-button,
+.topcoat-button--quiet,
+.topcoat-button--large,
+.topcoat-button--large--quiet,
+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-button:disabled,
+.topcoat-button--quiet:disabled,
+.topcoat-button--large:disabled,
+.topcoat-button--large--quiet:disabled,
+.topcoat-button--cta:disabled,
+.topcoat-button--large--cta:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Button

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<button class="topcoat-button">Button</button>
<button class="topcoat-button" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button,
+.topcoat-button--quiet,
+.topcoat-button--large,
+.topcoat-button--large--quiet,
+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  padding: 0 0.563rem;
+  font-size: 12px;
+  line-height: 1.313rem;
+  letter-spacing: 0;
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  vertical-align: top;
+  background-color: #e5e9e8;
+  box-shadow: inset 0 1px #fff;
+  border: 1px solid #a5a8a8;
+  border-radius: 4px;
+}
+
+.topcoat-button:hover,
+.topcoat-button--quiet:hover,
+.topcoat-button--large:hover,
+.topcoat-button--large--quiet:hover {
+  background-color: #edf1f1;
+}
+
+.topcoat-button:active,
+.topcoat-button--large:active {
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+.topcoat-button:focus,
+.topcoat-button--quiet:focus,
+.topcoat-button--large:focus,
+.topcoat-button--large--quiet:focus,
+.topcoat-button--cta:focus,
+.topcoat-button--large--cta:focus {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+  outline: 0;
+}
+
+
+
+
+
+
+
+

Quiet Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--quiet">Button</button>
<button class="topcoat-button--quiet" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-button--quiet:hover,
+.topcoat-button--large--quiet:hover {
+  text-shadow: 0 1px #fff;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-button--quiet:active,
+.topcoat-button--large--quiet:active {
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  background-color: #d3d7d7;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large" >Button</button>
<button class="topcoat-button--large" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large,
+.topcoat-button--large--quiet {
+  font-size: 0.875rem;
+  font-weight: 600;
+  line-height: 1.688rem;
+  padding: 0 0.875rem;
+}
+
+
+
+
+
+
+
+

Large Quiet Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large--quiet" >Button</button>
<button class="topcoat-button--large--quiet" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+
+
+
+
+
+
+

Call To Action Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--cta" >Button</button>
<button class="topcoat-button--cta" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  border: 1px solid #143250;
+  background-color: #288edf;
+  box-shadow: inset 0 1px rgba(255,255,255,0.36);
+  color: #fff;
+  font-weight: 500;
+  text-shadow: 0 -1px rgba(0,0,0,0.36);
+}
+
+.topcoat-button--cta:hover,
+.topcoat-button--large--cta:hover {
+  background-color: #509bef;
+}
+
+.topcoat-button--cta:active,
+.topcoat-button--large--cta:active {
+  background-color: #0380e8;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Call To Action Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large--cta" >Button</button>
<button class="topcoat-button--large--cta" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large--cta {
+  font-size: 0.875rem;
+  font-weight: 600;
+  line-height: 1.688rem;
+  padding: 0 0.875rem;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="checkbox"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.checkbox {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox__label {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.checkbox:before,
+.checkbox:after {
+  content: '';
+  position: absolute;
+}
+
+.checkbox:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="checkbox"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.checkbox,
+.topcoat-checkbox__checkmark {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox__label,
+.topcoat-checkbox {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox--disabled,
+input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.checkbox:before,
+.checkbox:after,
+.topcoat-checkbox__checkmark:before,
+.topcoat-checkbox__checkmark:after {
+  content: '';
+  position: absolute;
+}
+
+.checkbox:before,
+.topcoat-checkbox__checkmark:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+
+
+
+
+
+
+

Checkbox

+
+


+
+

Examples

+ +
+
+ +
+
+

HTML

+
<label class="topcoat-checkbox">
  <input type="checkbox">
  <div class="topcoat-checkbox__checkmark"></div>
  Default
</label>
<br>
<br>
<label class="topcoat-checkbox">
  <input type="checkbox" disabled>
  <div class="topcoat-checkbox__checkmark"></div>
  Disabled
</label>
+
+
+

CSS

+

+.topcoat-checkbox__checkmark {
+  height: 1rem;
+}
+
+input[type="checkbox"] {
+  height: 1rem;
+  width: 1rem;
+  margin-top: 0;
+  margin-right: -1rem;
+  margin-bottom: -1rem;
+  margin-left: 0;
+}
+
+input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
+  opacity: 1;
+}
+
+.topcoat-checkbox {
+  line-height: 1rem;
+}
+
+.topcoat-checkbox__checkmark:before {
+  width: 1rem;
+  height: 1rem;
+  background: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  border-radius: 3px;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-checkbox__checkmark {
+  width: 1rem;
+  height: 1rem;
+}
+
+.topcoat-checkbox__checkmark:after {
+  top: 2px;
+  left: 1px;
+  opacity: 0;
+  width: 14px;
+  height: 4px;
+  background: transparent;
+  border: 7px solid #666;
+  border-width: 3px;
+  border-top: none;
+  border-right: none;
+  border-radius: 1px;
+  -webkit-transform: rotate(-50deg);
+  -ms-transform: rotate(-50deg);
+  transform: rotate(-50deg);
+}
+
+input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-icon-button,
+.topcoat-icon-button--quiet,
+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-icon-button:disabled,
+.topcoat-icon-button--quiet:disabled,
+.topcoat-icon-button--large:disabled,
+.topcoat-icon-button--large--quiet:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button">
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button" disabled>
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button,
+.topcoat-icon-button--quiet,
+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  padding: 0 0.25rem;
+  line-height: 1.313rem;
+  letter-spacing: 0;
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  vertical-align: baseline;
+  background-color: #e5e9e8;
+  box-shadow: inset 0 1px #fff;
+  border: 1px solid #a5a8a8;
+  border-radius: 4px;
+}
+
+.topcoat-icon-button:hover,
+.topcoat-icon-button--quiet:hover,
+.topcoat-icon-button--large:hover,
+.topcoat-icon-button--large--quiet:hover {
+  background-color: #edf1f1;
+}
+
+.topcoat-icon-button:active {
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+.topcoat-icon-button:focus,
+.topcoat-icon-button--quiet:focus,
+.topcoat-icon-button--quiet:hover:focus,
+.topcoat-icon-button--large:focus,
+.topcoat-icon-button--large--quiet:focus,
+.topcoat-icon-button--large--quiet:hover:focus {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+  outline: 0;
+}
+
+
+
+
+
+
+
+

Quiet Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--quiet">
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--quiet" disabled>
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-icon-button--quiet:hover,
+.topcoat-icon-button--large--quiet:hover {
+  text-shadow: 0 1px #fff;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-icon-button--quiet:active,
+.topcoat-icon-button--large--quiet:active {
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  background-color: #d3d7d7;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--large">
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--large" disabled>
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  width: 1.688rem;
+  height: 1.688rem;
+  line-height: 1.688rem;
+}
+
+.topcoat-icon-button--large:active {
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Quiet Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--large--quiet">
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--large--quiet" disabled>
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--large--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-icon,
+.topcoat-icon--large {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  overflow: hidden;
+  width: 0.81406rem;
+  height: 0.81406rem;
+  vertical-align: middle;
+  top: -1px;
+}
+
+.topcoat-icon--large {
+  width: 1.06344rem;
+  height: 1.06344rem;
+  top: -2px;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.input {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+}
+
+.input:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.list {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.list__header {
+  margin: 0;
+}
+
+.list__container {
+  padding: 0;
+  margin: 0;
+  list-style-type: none;
+}
+
+.list__item {
+  margin: 0;
+  padding: 0;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.navigation-bar {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  white-space: nowrap;
+  overflow: hidden;
+  word-spacing: 0;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.navigation-bar__item {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+}
+
+.navigation-bar__title {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.notification {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.notification,
+.topcoat-notification {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+
+
+
+
+
+
+

Notification

+
+
1
+
+ +
+
+

HTML

+
<span class="topcoat-notification">1</span>
+
+
+

CSS

+

+.topcoat-notification {
+  padding: 0.15em 0.5em 0.2em;
+  border-radius: 2px;
+  background-color: #ec514e;
+  color: #fff;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="radio"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.radio-button {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button__label {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button:before,
+.radio-button:after {
+  content: '';
+  position: absolute;
+  border-radius: 100%;
+}
+
+.radio-button:after {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}
+
+.radio-button:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.radio-button--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="radio"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.radio-button,
+.topcoat-radio-button__checkmark {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button__label,
+.topcoat-radio-button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button:before,
+.radio-button:after,
+.topcoat-radio-button__checkmark:before,
+.topcoat-radio-button__checkmark:after {
+  content: '';
+  position: absolute;
+  border-radius: 100%;
+}
+
+.radio-button:after,
+.topcoat-radio-button__checkmark:after {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}
+
+.radio-button:before,
+.topcoat-radio-button__checkmark:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.radio-button--disabled,
+input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Radio Button

+
+






+
+

Examples

+ +
+
+ +
+
+

HTML

+
<!-- NO LABEL -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
</label>
<br>
<br>
<!-- LEFT LABEL -->
<label class="topcoat-radio-button">
  Left label
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
</label>
<br>
<br>
<!-- RIGHT LABEL -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
  Right label
</label>
<br>
<br>
<!-- DISABLED -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat" Disabled>
  <div class="topcoat-radio-button__checkmark"></div>
  Disabled
</label>
+
+
+

CSS

+

+input[type="radio"] {
+  height: 1.063rem;
+  width: 1.063rem;
+  margin-top: 0;
+  margin-right: -1.063rem;
+  margin-bottom: -1.063rem;
+  margin-left: 0;
+}
+
+input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
+  opacity: 1;
+}
+
+.topcoat-radio-button {
+  color: #454545;
+  line-height: 1.063rem;
+}
+
+.topcoat-radio-button__checkmark:before {
+  width: 1.063rem;
+  height: 1.063rem;
+  background: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-radio-button__checkmark {
+  position: relative;
+  width: 1.063rem;
+  height: 1.063rem;
+}
+
+.topcoat-radio-button__checkmark:after {
+  opacity: 0;
+  width: 0.313rem;
+  height: 0.313rem;
+  background: #666;
+  border: 1px solid rgba(0,0,0,0.1);
+  box-shadow: 0 1px rgba(255,255,255,0.5);
+  -webkit-transform: none;
+  -ms-transform: none;
+  transform: none;
+  top: 0.313rem;
+  left: 0.313rem;
+}
+
+input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.range {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+.range__thumb {
+  cursor: pointer;
+}
+
+.range__thumb--webkit {
+  cursor: pointer;
+  -webkit-appearance: none;
+}
+
+.range:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.range,
+.topcoat-range {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+.range__thumb,
+.topcoat-range::-moz-range-thumb {
+  cursor: pointer;
+}
+
+.range__thumb--webkit,
+.topcoat-range::-webkit-slider-thumb {
+  cursor: pointer;
+  -webkit-appearance: none;
+}
+
+.range:disabled,
+.topcoat-range:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Range

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<input type="range" class="topcoat-range">
<input type="range" class="topcoat-range" disabled>
+
+
+

CSS

+

+.topcoat-range {
+  border-radius: 4px;
+  border: 1px solid #a5a8a8;
+  background-color: #d3d7d7;
+  height: 0.5rem;
+  border-radius: 15px;
+}
+
+.topcoat-range::-moz-range-track {
+  border-radius: 4px;
+  border: 1px solid #a5a8a8;
+  background-color: #d3d7d7;
+  height: 0.5rem;
+  border-radius: 15px;
+}
+
+.topcoat-range::-webkit-slider-thumb {
+  height: 1.313rem;
+  width: 0.75rem;
+  background-color: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  border-radius: 4px;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-range::-moz-range-thumb {
+  height: 1.313rem;
+  width: 0.75rem;
+  background-color: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  border-radius: 4px;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-range:focus::-webkit-slider-thumb {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-range:focus::-moz-range-thumb {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.search-input {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+.search-input:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.search-input,
+.topcoat-search-input,
+.topcoat-search-input--large {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+.search-input:disabled,
+.topcoat-search-input:disabled,
+.topcoat-search-input--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Search Input

+
+
+
+ +
+
+

HTML

+
<input type="search" value="" placeholder="search" class="topcoat-search-input">
<input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
+
+
+

CSS

+

+.topcoat-search-input,
+.topcoat-search-input--large {
+  line-height: 1.313rem;
+  font-size: 12px;
+  border: 1px solid #a5a8a8;
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+  color: #454545;
+  padding: 0 0 0 1.3rem;
+  border-radius: 15px;
+  background-image: url("../img/search.svg");
+  background-position: 1em center;
+  background-repeat: no-repeat;
+  background-size: 12px;
+}
+
+.topcoat-search-input:focus,
+.topcoat-search-input--large:focus {
+  background-image: url("../img/search_dark.svg");
+  background-color: #edf1f1;
+  color: #000;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-search-input::-webkit-search-cancel-button,
+.topcoat-search-input::-webkit-search-decoration,
+.topcoat-search-input--large::-webkit-search-cancel-button,
+.topcoat-search-input--large::-webkit-search-decoration {
+  margin-right: 5px;
+}
+
+.topcoat-search-input:focus::-webkit-input-placeholder,
+.topcoat-search-input:focus::-webkit-input-placeholder {
+  color: #c6c8c8;
+}
+
+.topcoat-search-input:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-search-input:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-search-input:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+
+
+
+
+
+
+

Large Search Input

+
+
+
+ +
+
+

HTML

+
<input type="search" value="" placeholder="search" class="topcoat-search-input--large">
<input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
+
+
+

CSS

+

+.topcoat-search-input--large {
+  line-height: 1.688rem;
+  font-size: 0.875rem;
+  font-weight: 400;
+  padding: 0 0 0 1.8rem;
+  border-radius: 25px;
+  background-position: 1.2em center;
+  background-size: 0.875rem;
+}
+
+.topcoat-search-input--large:disabled {
+  color: #000;
+}
+
+.topcoat-search-input--large:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-search-input--large:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-search-input--large:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.switch {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch__input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.switch__toggle {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.switch__toggle:before,
+.switch__toggle:after {
+  content: '';
+  position: absolute;
+  z-index: -1;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.switch,
+.topcoat-switch {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch__input,
+.topcoat-switch__input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.switch__toggle,
+.topcoat-switch__toggle {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.switch__toggle:before,
+.switch__toggle:after,
+.topcoat-switch__toggle:before,
+.topcoat-switch__toggle:after {
+  content: '';
+  position: absolute;
+  z-index: -1;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch--disabled,
+.topcoat-switch__input:disabled + .topcoat-switch__toggle {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Switch

+
+




+
+

Examples

+ +
+
+ +
+
+

HTML

+
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input">
  <div class="topcoat-switch__toggle"></div>
</label>
<br>
<br>
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input" checked>
  <div class="topcoat-switch__toggle"></div>
</label>
<br>
<br>
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input" disabled>
  <div class="topcoat-switch__toggle"></div>
</label>
+
+
+

CSS

+

+.topcoat-switch {
+  font-size: 12px;
+  padding: 0 0.563rem;
+  border-radius: 4px;
+  border: 1px solid #a5a8a8;
+  overflow: hidden;
+  width: 3.5rem;
+}
+
+.topcoat-switch__toggle:before,
+.topcoat-switch__toggle:after {
+  top: -1px;
+  width: 2.6rem;
+}
+
+.topcoat-switch__toggle:before {
+  content: 'ON';
+  color: #0083e8;
+  background-color: #e0f0fa;
+  right: 0.8rem;
+  padding-left: 0.75rem;
+}
+
+.topcoat-switch__toggle {
+  line-height: 1.313rem;
+  height: 1.313rem;
+  width: 1rem;
+  border-radius: 4px;
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  background-color: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  margin-left: -0.6rem;
+  margin-bottom: -1px;
+  margin-top: -1px;
+  box-shadow: inset 0 1px #fff;
+  -webkit-transition: margin-left 0.05s ease-in-out;
+  transition: margin-left 0.05s ease-in-out;
+}
+
+.topcoat-switch__toggle:after {
+  content: 'OFF';
+  background-color: #d3d7d7;
+  left: 0.8rem;
+  padding-left: 0.6rem;
+}
+
+.topcoat-switch__input:checked + .topcoat-switch__toggle {
+  margin-left: 1.85rem;
+}
+
+.topcoat-switch__input:focus + .topcoat-switch__toggle {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
+.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
+  background: transparent;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-tab-bar__button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-tab-bar__button:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.button-bar,
+.topcoat-tab-bar {
+  display: table;
+  table-layout: fixed;
+  white-space: nowrap;
+  margin: 0;
+  padding: 0;
+}
+
+.button-bar__item,
+.topcoat-tab-bar__item {
+  display: table-cell;
+  width: auto;
+  border-radius: 0;
+}
+
+.button-bar__item > input,
+.topcoat-tab-bar__item > input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.button-bar__button {
+  border-radius: inherit;
+}
+
+.button-bar__item:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Tab Bar

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<div class="topcoat-tab-bar">
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">One</button>
  </label>
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">Two</button>
  </label>
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">Three</button>
  </label>
</div>
+
+
+

CSS

+

+.topcoat-tab-bar__button {
+  padding: 0 0.563rem;
+  height: 1.313rem;
+  line-height: 1.313rem;
+  letter-spacing: 0;
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  vertical-align: top;
+  background-color: #e5e9e8;
+  box-shadow: inset 0 1px #fff;
+  border-top: 1px solid #a5a8a8;
+}
+
+.topcoat-tab-bar__button:active,
+.topcoat-tab-bar__button--large:active,
+:checked + .topcoat-tab-bar__button {
+  color: #0083e8;
+  background-color: #e0f0fa;
+  box-shadow: inset 0 0 2px #c0ced8;
+}
+
+.topcoat-tab-bar__button:focus,
+.topcoat-tab-bar__button--large:focus {
+  z-index: 1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.input,
+.topcoat-text-input,
+.topcoat-text-input--large {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+}
+
+.input:disabled,
+.topcoat-text-input:disabled,
+.topcoat-text-input--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Text input

+
+




+
+ +
+
+

HTML

+
<input type="text" class="topcoat-text-input" placeholder="text" value="">
<br>
<br>
<input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
<br>
<br>
<input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
+
+
+

CSS

+

+.topcoat-text-input,
+.topcoat-text-input--large {
+  line-height: 1.313rem;
+  font-size: 12px;
+  letter-spacing: 0;
+  padding: 0 0.563rem;
+  border: 1px solid #a5a8a8;
+  border-radius: 4px;
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+  color: #454545;
+  vertical-align: top;
+}
+
+.topcoat-text-input:focus,
+.topcoat-text-input--large:focus {
+  background-color: #edf1f1;
+  color: #000;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-text-input:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input:invalid {
+  border: 1px solid #d83b75;
+}
+
+
+
+
+
+
+
+

Large Text Input

+
+




+
+ +
+
+

HTML

+
<input type="text" class="topcoat-text-input--large" value="" placeholder="text">
<br>
<br>
<input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
<br>
<br>
<input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
+
+
+

CSS

+

+.topcoat-text-input--large {
+  line-height: 1.688rem;
+  font-size: 0.875rem;
+}
+
+.topcoat-text-input--large:disabled {
+  color: #000;
+}
+
+.topcoat-text-input--large:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input--large:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input--large:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input--large:invalid {
+  border: 1px solid #d83b75;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.textarea {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  vertical-align: top;
+  resize: none;
+  outline: none;
+}
+
+.textarea:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.textarea,
+.topcoat-textarea,
+.topcoat-textarea--large {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  vertical-align: top;
+  resize: none;
+  outline: none;
+}
+
+.textarea:disabled,
+.topcoat-textarea:disabled,
+.topcoat-textarea--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Textarea

+
+


+
+ +
+
+

HTML

+
<textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
<br>
<br>
<textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
+
+
+

CSS

+

+.topcoat-textarea,
+.topcoat-textarea--large {
+  padding: 1rem;
+  font-size: 1rem;
+  font-weight: 400;
+  border-radius: 4px;
+  line-height: 1.313rem;
+  border: 1px solid #a5a8a8;
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+  color: #454545;
+  letter-spacing: 0;
+}
+
+.topcoat-textarea:focus,
+.topcoat-textarea--large:focus {
+  background-color: #edf1f1;
+  color: #000;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-textarea:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-textarea:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-textarea:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+
+
+
+
+
+
+

Large Textarea

+
+


+
+ +
+
+

HTML

+
<textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
<br>
<br>
<textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
+
+
+

CSS

+

+.topcoat-textarea--large {
+  font-size: 1.3rem;
+  line-height: 1.688rem;
+}
+
+.topcoat-textarea--large:disabled {
+  color: #000;
+}
+
+.topcoat-textarea--large:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-textarea--large:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-textarea--large:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Regular.otf");
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Light.otf");
+  font-weight: 200;
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Semibold.otf");
+  font-weight: 600;
+}
+
+body {
+  margin: 0;
+  padding: 0;
+  background: #dfe2e2;
+  color: #000;
+  font: 16px "Source Sans", helvetica, arial, sans-serif;
+  font-weight: 200;
+}
+
+:focus {
+  outline-color: transparent;
+  outline-style: none;
+}
+
+.topcoat-icon--menu-stack {
+  background: url("../img/hamburger_dark.svg") no-repeat;
+  background-size: cover;
+}
+
+.quarter {
+  width: 25%;
+}
+
+.half {
+  width: 50%;
+}
+
+.three-quarters {
+  width: 75%;
+}
+
+.third {
+  width: 33.333%;
+}
+
+.two-thirds {
+  width: 66.666%;
+}
+
+.full {
+  width: 100%;
+}
+
+.left {
+  text-align: left;
+}
+
+.center {
+  text-align: center;
+}
+
+.right {
+  text-align: right;
+}
+
+.reset-ui {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/* This file should include color and image variables corresponding to the dark theme */
+
+/* Call To Action */
+
+/* Icons */
+
+/* Navigation Bar */
+
+/* Text Input */
+
+/* Search Input */
+
+/* List */
+
+/* Checkbox */
+
+/* Overlay */
+
+/* Progress bar */
+
+/* Checkbox */
+
+/* Radio Button */
+
+/* Tab bar */
+
+/* Switch */
+
+/* Icon Button */
+
+/* Navigation bar */
+
+/* List */
+
+/* Search Input */
+
+/* Textarea */
+
+/* Checkbox */
+
+/* Radio */
+
+/* Range input */
+
+/* Search Input */
+
+/* Switch */
+
+/* This file should include color and image variables corresponding to the light theme */
+
+/* Call To Action */
+
+/* Icons */
+
+/* Navigation Bar */
+
+/* Text Input */
+
+/* List */
+
+/* Overlay */
+
+/* Progress bar */
+
+/* Checkbox */
+
+/* Range input */
+
+/* Radio Button */
+
+/* Tab bar */
+
+/* Switch */
+
+/* Containers */
+
+/* Icon Button */
+
+/* Navigation bar */
+
+/* List */
+
+/* Search Input */
+
+/* Text Area */
+
+/* Checkbox */
+
+/* Radio */
+
+/* Range input */
+
+/* Search Input */
+
+/* Switch */
+
+/* Text Input */
+
+/* Radio input */
+
+/* Overlay */
+
+/* Textarea */
+
+/* Progress bar container */
+
+/* Progress bar progress */
+
+/* Search input */
+
+/* Switch */
+
+/* Notification */
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-dark.html b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-dark.html new file mode 100755 index 0000000..327aeae --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-dark.html @@ -0,0 +1,3417 @@ + + + + + + Topcoat + + + + + + + +
+ +
+
+
+
+

Topcoat

+

CSS for clean and fast web apps

+
+ +
+
+
+
+
+

Button Bar

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<div class="topcoat-button-bar">
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">One</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">Two</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">Three</button>
  </div>
</div>
+
+
+

CSS

+

+.topcoat-button-bar > .topcoat-button-bar__item:first-child {
+  border-top-left-radius: 6px;
+  border-bottom-left-radius: 6px;
+}
+
+.topcoat-button-bar > .topcoat-button-bar__item:last-child {
+  border-top-right-radius: 6px;
+  border-bottom-right-radius: 6px;
+}
+
+.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
+.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
+  border-right: none;
+}
+
+.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
+.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
+  border-left: none;
+}
+
+.topcoat-button-bar__button {
+  border-radius: inherit;
+}
+
+.topcoat-button-bar__button:focus,
+.topcoat-button-bar__button--large:focus {
+  z-index: 1;
+}
+
+
+
+
+
+
+
+

Large Button Bar

+
+
+
+ +
+
+

HTML

+
<div class="topcoat-button-bar">
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">One</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">Two</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">Three</button>
  </div>
</div>
+
+
+

CSS

+

+.topcoat-button-bar__button--large {
+  border-radius: inherit;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-button,
+.topcoat-button--quiet,
+.topcoat-button--large,
+.topcoat-button--large--quiet,
+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-button:disabled,
+.topcoat-button--quiet:disabled,
+.topcoat-button--large:disabled,
+.topcoat-button--large--quiet:disabled,
+.topcoat-button--cta:disabled,
+.topcoat-button--large--cta:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Button

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<button class="topcoat-button">Button</button>
<button class="topcoat-button" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button,
+.topcoat-button--quiet,
+.topcoat-button--large,
+.topcoat-button--large--quiet,
+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  padding: 0 1.25rem;
+  font-size: 16px;
+  line-height: 3rem;
+  letter-spacing: 1px;
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  vertical-align: top;
+  background-color: #595b5b;
+  box-shadow: inset 0 1px #727373;
+  border: 1px solid #303233;
+  border-radius: 6px;
+}
+
+.topcoat-button:hover,
+.topcoat-button--quiet:hover,
+.topcoat-button--large:hover,
+.topcoat-button--large--quiet:hover {
+  background-color: #646666;
+}
+
+.topcoat-button:active,
+.topcoat-button--large:active {
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+.topcoat-button:focus,
+.topcoat-button--quiet:focus,
+.topcoat-button--large:focus,
+.topcoat-button--large--quiet:focus,
+.topcoat-button--cta:focus,
+.topcoat-button--large--cta:focus {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+  outline: 0;
+}
+
+
+
+
+
+
+
+

Quiet Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--quiet">Button</button>
<button class="topcoat-button--quiet" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-button--quiet:hover,
+.topcoat-button--large--quiet:hover {
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-button--quiet:active,
+.topcoat-button--large--quiet:active {
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  background-color: #404141;
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+
+
+
+
+
+
+

Large Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large" >Button</button>
<button class="topcoat-button--large" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large,
+.topcoat-button--large--quiet {
+  font-size: 1.3rem;
+  font-weight: 400;
+  line-height: 4.375rem;
+  padding: 0 1.25rem;
+}
+
+
+
+
+
+
+
+

Large Quiet Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large--quiet" >Button</button>
<button class="topcoat-button--large--quiet" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+
+
+
+
+
+
+

Call To Action Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--cta" >Button</button>
<button class="topcoat-button--cta" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  border: 1px solid #143250;
+  background-color: #288edf;
+  box-shadow: inset 0 1px rgba(255,255,255,0.36);
+  color: #fff;
+  font-weight: 500;
+  text-shadow: 0 -1px rgba(0,0,0,0.36);
+}
+
+.topcoat-button--cta:hover,
+.topcoat-button--large--cta:hover {
+  background-color: #509bef;
+}
+
+.topcoat-button--cta:active,
+.topcoat-button--large--cta:active {
+  background-color: #1976c3;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Call To Action Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large--cta" >Button</button>
<button class="topcoat-button--large--cta" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large--cta {
+  font-size: 1.3rem;
+  font-weight: 400;
+  line-height: 4.375rem;
+  padding: 0 1.25rem;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="checkbox"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.checkbox {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox__label {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.checkbox:before,
+.checkbox:after {
+  content: '';
+  position: absolute;
+}
+
+.checkbox:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="checkbox"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.checkbox,
+.topcoat-checkbox__checkmark {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox__label,
+.topcoat-checkbox {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox--disabled,
+input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.checkbox:before,
+.checkbox:after,
+.topcoat-checkbox__checkmark:before,
+.topcoat-checkbox__checkmark:after {
+  content: '';
+  position: absolute;
+}
+
+.checkbox:before,
+.topcoat-checkbox__checkmark:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+
+
+
+
+
+
+

Checkbox

+
+


+
+

Examples

+ +
+
+ +
+
+

HTML

+
<label class="topcoat-checkbox">
  <input type="checkbox">
  <div class="topcoat-checkbox__checkmark"></div>
  Default
</label>
<br>
<br>
<label class="topcoat-checkbox">
  <input type="checkbox" disabled>
  <div class="topcoat-checkbox__checkmark"></div>
  Disabled
</label>
+
+
+

CSS

+

+.topcoat-checkbox__checkmark {
+  height: 2rem;
+}
+
+input[type="checkbox"] {
+  height: 2rem;
+  width: 2rem;
+  margin-top: 0;
+  margin-right: -2rem;
+  margin-bottom: -2rem;
+  margin-left: 0;
+}
+
+input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
+  opacity: 1;
+}
+
+.topcoat-checkbox {
+  line-height: 2rem;
+}
+
+.topcoat-checkbox__checkmark:before {
+  width: 2rem;
+  height: 2rem;
+  background: #595b5b;
+  border: 1px solid #303233;
+  border-radius: 3px;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-checkbox__checkmark {
+  width: 2rem;
+  height: 2rem;
+}
+
+.topcoat-checkbox__checkmark:after {
+  top: 1px;
+  left: 2px;
+  opacity: 0;
+  width: 28px;
+  height: 11px;
+  background: transparent;
+  border: 7px solid #fff;
+  border-width: 7px;
+  border-top: none;
+  border-right: none;
+  border-radius: 2px;
+  -webkit-transform: rotate(-50deg);
+  -ms-transform: rotate(-50deg);
+  transform: rotate(-50deg);
+}
+
+input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-icon-button,
+.topcoat-icon-button--quiet,
+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-icon-button:disabled,
+.topcoat-icon-button--quiet:disabled,
+.topcoat-icon-button--large:disabled,
+.topcoat-icon-button--large--quiet:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button">
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button" disabled>
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button,
+.topcoat-icon-button--quiet,
+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  padding: 0 0.75rem;
+  line-height: 3rem;
+  letter-spacing: 1px;
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  vertical-align: baseline;
+  background-color: #595b5b;
+  box-shadow: inset 0 1px #727373;
+  border: 1px solid #303233;
+  border-radius: 6px;
+}
+
+.topcoat-icon-button:hover,
+.topcoat-icon-button--quiet:hover,
+.topcoat-icon-button--large:hover,
+.topcoat-icon-button--large--quiet:hover {
+  background-color: #646666;
+}
+
+.topcoat-icon-button:active {
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+.topcoat-icon-button:focus,
+.topcoat-icon-button--quiet:focus,
+.topcoat-icon-button--quiet:hover:focus,
+.topcoat-icon-button--large:focus,
+.topcoat-icon-button--large--quiet:focus,
+.topcoat-icon-button--large--quiet:hover:focus {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+  outline: 0;
+}
+
+
+
+
+
+
+
+

Quiet Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--quiet">
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--quiet" disabled>
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-icon-button--quiet:hover,
+.topcoat-icon-button--large--quiet:hover {
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-icon-button--quiet:active,
+.topcoat-icon-button--large--quiet:active {
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  background-color: #404141;
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+
+
+
+
+
+
+

Large Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--large">
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--large" disabled>
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  width: 4.375rem;
+  height: 4.375rem;
+  line-height: 4.375rem;
+}
+
+.topcoat-icon-button--large:active {
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+}
+
+
+
+
+
+
+
+

Large Quiet Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--large--quiet">
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--large--quiet" disabled>
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--large--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-icon,
+.topcoat-icon--large {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  overflow: hidden;
+  width: 1.62rem;
+  height: 1.62rem;
+  vertical-align: middle;
+  top: -1px;
+}
+
+.topcoat-icon--large {
+  width: 2.499999998125rem;
+  height: 2.499999998125rem;
+  top: -2px;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.input {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+}
+
+.input:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.list {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.list__header {
+  margin: 0;
+}
+
+.list__container {
+  padding: 0;
+  margin: 0;
+  list-style-type: none;
+}
+
+.list__item {
+  margin: 0;
+  padding: 0;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.list,
+.topcoat-list {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.list__header,
+.topcoat-list__header {
+  margin: 0;
+}
+
+.list__container,
+.topcoat-list__container {
+  padding: 0;
+  margin: 0;
+  list-style-type: none;
+}
+
+.list__item,
+.topcoat-list__item {
+  margin: 0;
+  padding: 0;
+}
+
+
+
+
+
+
+
+

List

+
+

Category

  • Item
  • Item
  • Item
+
+ +
+
+

HTML

+
<div class="topcoat-list">
  <h3 class="topcoat-list__header">Category</h3>
  <ul class="topcoat-list__container">
    <li class="topcoat-list__item">
      Item
    </li>
    <li class="topcoat-list__item">
      Item
    </li>
    <li class="topcoat-list__item">
      Item
    </li>
  </ul>
</div>
+
+
+

CSS

+

+.topcoat-list {
+  border-top: 1px solid #2f3234;
+  border-bottom: 1px solid #5e6061;
+  background-color: #444849;
+}
+
+.topcoat-list__header {
+  padding: 4px 20px;
+  font-size: 0.9em;
+  font-weight: 400;
+  background-color: #3b3e40;
+  color: #868888;
+  text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
+  border-top: solid 1px rgba(255,255,255,0.1);
+  border-bottom: solid 1px rgba(255,255,255,0.05);
+}
+
+.topcoat-list__container {
+  border-top: 1px solid #2f3234;
+  color: #c6c8c8;
+}
+
+.topcoat-list__item {
+  padding: 1.25rem;
+  border-top: 1px solid #5e6061;
+  border-bottom: 1px solid #2f3234;
+}
+
+.topcoat-list__item:first-child {
+  border-top: 1px solid rgba(0,0,0,0.05);
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.navigation-bar {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  white-space: nowrap;
+  overflow: hidden;
+  word-spacing: 0;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.navigation-bar__item {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+}
+
+.navigation-bar__title {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.navigation-bar,
+.topcoat-navigation-bar {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  white-space: nowrap;
+  overflow: hidden;
+  word-spacing: 0;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.navigation-bar__item,
+.topcoat-navigation-bar__item {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+}
+
+.navigation-bar__title,
+.topcoat-navigation-bar__title {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+
+
+
+
+ +
+
+

Notification

+
+
1
+
+ +
+
+

HTML

+
<span class="topcoat-notification">1</span>
+
+
+

CSS

+

+.topcoat-notification {
+  padding: 0.15em 0.5em 0.2em;
+  border-radius: 2px;
+  background-color: #ec514e;
+  color: #fff;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="radio"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.radio-button {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button__label {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button:before,
+.radio-button:after {
+  content: '';
+  position: absolute;
+  border-radius: 100%;
+}
+
+.radio-button:after {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}
+
+.radio-button:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.radio-button--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="radio"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.radio-button,
+.topcoat-radio-button__checkmark {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button__label,
+.topcoat-radio-button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button:before,
+.radio-button:after,
+.topcoat-radio-button__checkmark:before,
+.topcoat-radio-button__checkmark:after {
+  content: '';
+  position: absolute;
+  border-radius: 100%;
+}
+
+.radio-button:after,
+.topcoat-radio-button__checkmark:after {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}
+
+.radio-button:before,
+.topcoat-radio-button__checkmark:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.radio-button--disabled,
+input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Radio Button

+
+






+
+

Examples

+ +
+
+ +
+
+

HTML

+
<!-- NO LABEL -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
</label>
<br>
<br>
<!-- LEFT LABEL -->
<label class="topcoat-radio-button">
  Left label
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
</label>
<br>
<br>
<!-- RIGHT LABEL -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
  Right label
</label>
<br>
<br>
<!-- DISABLED -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat" Disabled>
  <div class="topcoat-radio-button__checkmark"></div>
  Disabled
</label>
+
+
+

CSS

+

+input[type="radio"] {
+  height: 1.875rem;
+  width: 1.875rem;
+  margin-top: 0;
+  margin-right: -1.875rem;
+  margin-bottom: -1.875rem;
+  margin-left: 0;
+}
+
+input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
+  opacity: 1;
+}
+
+.topcoat-radio-button {
+  color: #c6c8c8;
+  line-height: 1.875rem;
+}
+
+.topcoat-radio-button__checkmark:before {
+  width: 1.875rem;
+  height: 1.875rem;
+  background: #595b5b;
+  border: 1px solid #303233;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-radio-button__checkmark {
+  position: relative;
+  width: 1.875rem;
+  height: 1.875rem;
+}
+
+.topcoat-radio-button__checkmark:after {
+  opacity: 0;
+  width: 0.875rem;
+  height: 0.875rem;
+  background: #fff;
+  border: 1px solid rgba(255,255,255,0.1);
+  box-shadow: 0 1px rgba(255,255,255,0.5);
+  -webkit-transform: none;
+  -ms-transform: none;
+  transform: none;
+  top: 7px;
+  left: 7px;
+}
+
+input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.range {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+.range__thumb {
+  cursor: pointer;
+}
+
+.range__thumb--webkit {
+  cursor: pointer;
+  -webkit-appearance: none;
+}
+
+.range:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.range,
+.topcoat-range {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+.range__thumb,
+.topcoat-range::-moz-range-thumb {
+  cursor: pointer;
+}
+
+.range__thumb--webkit,
+.topcoat-range::-webkit-slider-thumb {
+  cursor: pointer;
+  -webkit-appearance: none;
+}
+
+.range:disabled,
+.topcoat-range:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Range

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<input type="range" class="topcoat-range">
<input type="range" class="topcoat-range" disabled>
+
+
+

CSS

+

+.topcoat-range {
+  border-radius: 6px;
+  border: 1px solid #303233;
+  background-color: #424546;
+  height: 1rem;
+  border-radius: 30px;
+}
+
+.topcoat-range::-moz-range-track {
+  border-radius: 6px;
+  border: 1px solid #303233;
+  background-color: #424546;
+  height: 1rem;
+  border-radius: 30px;
+}
+
+.topcoat-range::-webkit-slider-thumb {
+  height: 3rem;
+  width: 2rem;
+  background-color: #595b5b;
+  border: 1px solid #303233;
+  border-radius: 6px;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-range::-moz-range-thumb {
+  height: 3rem;
+  width: 2rem;
+  background-color: #595b5b;
+  border: 1px solid #303233;
+  border-radius: 6px;
+  box-shadow: inset 0 1px #727373;
+}
+
+.topcoat-range:focus::-webkit-slider-thumb {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-range:focus::-moz-range-thumb {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.search-input {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+.search-input:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.search-input,
+.topcoat-search-input,
+.topcoat-search-input--large {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+.search-input:disabled,
+.topcoat-search-input:disabled,
+.topcoat-search-input--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Search Input

+
+
+
+ +
+
+

HTML

+
<input type="search" value="" placeholder="search" class="topcoat-search-input">
<input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
+
+
+

CSS

+

+.topcoat-search-input,
+.topcoat-search-input--large {
+  line-height: 3rem;
+  font-size: 16px;
+  border: 1px solid #303233;
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+  color: #c6c8c8;
+  padding: 0 0 0 2rem;
+  border-radius: 30px;
+  background-image: url("../img/search.svg");
+  background-position: 1em center;
+  background-repeat: no-repeat;
+  background-size: 16px;
+}
+
+.topcoat-search-input:focus,
+.topcoat-search-input--large:focus {
+  background-image: url("../img/search_dark.svg");
+  background-color: #646666;
+  color: #fff;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-search-input::-webkit-search-cancel-button,
+.topcoat-search-input::-webkit-search-decoration,
+.topcoat-search-input--large::-webkit-search-cancel-button,
+.topcoat-search-input--large::-webkit-search-decoration {
+  margin-right: 5px;
+}
+
+.topcoat-search-input:focus::-webkit-input-placeholder,
+.topcoat-search-input:focus::-webkit-input-placeholder {
+  color: #c6c8c8;
+}
+
+.topcoat-search-input:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-search-input:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-search-input:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+
+
+
+
+
+
+

Large Search Input

+
+
+
+ +
+
+

HTML

+
<input type="search" value="" placeholder="search" class="topcoat-search-input--large">
<input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
+
+
+

CSS

+

+.topcoat-search-input--large {
+  line-height: 4.375rem;
+  font-size: 1.3rem;
+  font-weight: 200;
+  padding: 0 0 0 2.9rem;
+  border-radius: 40px;
+  background-position: 1.2em center;
+  background-size: 1.3rem;
+}
+
+.topcoat-search-input--large:disabled {
+  color: #fff;
+}
+
+.topcoat-search-input--large:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-search-input--large:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-search-input--large:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.switch {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch__input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.switch__toggle {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.switch__toggle:before,
+.switch__toggle:after {
+  content: '';
+  position: absolute;
+  z-index: -1;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.switch,
+.topcoat-switch {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch__input,
+.topcoat-switch__input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.switch__toggle,
+.topcoat-switch__toggle {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.switch__toggle:before,
+.switch__toggle:after,
+.topcoat-switch__toggle:before,
+.topcoat-switch__toggle:after {
+  content: '';
+  position: absolute;
+  z-index: -1;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch--disabled,
+.topcoat-switch__input:disabled + .topcoat-switch__toggle {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Switch

+
+




+
+

Examples

+ +
+
+ +
+
+

HTML

+
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input">
  <div class="topcoat-switch__toggle"></div>
</label>
<br>
<br>
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input" checked>
  <div class="topcoat-switch__toggle"></div>
</label>
<br>
<br>
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input" disabled>
  <div class="topcoat-switch__toggle"></div>
</label>
+
+
+

CSS

+

+.topcoat-switch {
+  font-size: 16px;
+  padding: 0 1.25rem;
+  border-radius: 6px;
+  border: 1px solid #303233;
+  overflow: hidden;
+  width: 6rem;
+}
+
+.topcoat-switch__toggle:before,
+.topcoat-switch__toggle:after {
+  top: -1px;
+  width: 5rem;
+}
+
+.topcoat-switch__toggle:before {
+  content: 'ON';
+  color: #5dc1ff;
+  background-color: #404141;
+  right: 1rem;
+  padding-left: 1.5rem;
+}
+
+.topcoat-switch__toggle {
+  line-height: 3rem;
+  height: 3rem;
+  width: 2rem;
+  border-radius: 6px;
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  background-color: #595b5b;
+  border: 1px solid #303233;
+  margin-left: -1.3rem;
+  margin-bottom: -1px;
+  margin-top: -1px;
+  box-shadow: inset 0 1px #727373;
+  -webkit-transition: margin-left 0.05s ease-in-out;
+  transition: margin-left 0.05s ease-in-out;
+}
+
+.topcoat-switch__toggle:after {
+  content: 'OFF';
+  background-color: #404141;
+  left: 1rem;
+  padding-left: 2rem;
+}
+
+.topcoat-switch__input:checked + .topcoat-switch__toggle {
+  margin-left: 2.7rem;
+}
+
+.topcoat-switch__input:focus + .topcoat-switch__toggle {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
+.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
+  background: transparent;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-tab-bar__button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-tab-bar__button:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.button-bar,
+.topcoat-tab-bar {
+  display: table;
+  table-layout: fixed;
+  white-space: nowrap;
+  margin: 0;
+  padding: 0;
+}
+
+.button-bar__item,
+.topcoat-tab-bar__item {
+  display: table-cell;
+  width: auto;
+  border-radius: 0;
+}
+
+.button-bar__item > input,
+.topcoat-tab-bar__item > input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.button-bar__button {
+  border-radius: inherit;
+}
+
+.button-bar__item:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Tab Bar

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<div class="topcoat-tab-bar">
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">One</button>
  </label>
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">Two</button>
  </label>
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">Three</button>
  </label>
</div>
+
+
+

CSS

+

+.topcoat-tab-bar__button {
+  padding: 0 1.25rem;
+  height: 3rem;
+  line-height: 3rem;
+  letter-spacing: 1px;
+  color: #c6c8c8;
+  text-shadow: 0 -1px rgba(0,0,0,0.69);
+  vertical-align: top;
+  background-color: #595b5b;
+  box-shadow: inset 0 1px #727373;
+  border-top: 1px solid #303233;
+}
+
+.topcoat-tab-bar__button:active,
+.topcoat-tab-bar__button--large:active,
+:checked + .topcoat-tab-bar__button {
+  color: #5dc1ff;
+  background-color: #404141;
+  box-shadow: inset 0 0 2px #313231;
+}
+
+.topcoat-tab-bar__button:focus,
+.topcoat-tab-bar__button--large:focus {
+  z-index: 1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.input,
+.topcoat-text-input,
+.topcoat-text-input--large {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+}
+
+.input:disabled,
+.topcoat-text-input:disabled,
+.topcoat-text-input--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Text input

+
+




+
+ +
+
+

HTML

+
<input type="text" class="topcoat-text-input" placeholder="text" value="">
<br>
<br>
<input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
<br>
<br>
<input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
+
+
+

CSS

+

+.topcoat-text-input,
+.topcoat-text-input--large {
+  line-height: 3rem;
+  font-size: 16px;
+  letter-spacing: 1px;
+  padding: 0 1.25rem;
+  border: 1px solid #303233;
+  border-radius: 6px;
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+  color: #c6c8c8;
+  vertical-align: top;
+}
+
+.topcoat-text-input:focus,
+.topcoat-text-input--large:focus {
+  background-color: #646666;
+  color: #fff;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-text-input:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input:invalid {
+  border: 1px solid #d83b75;
+}
+
+
+
+
+
+
+
+

Large Text Input

+
+




+
+ +
+
+

HTML

+
<input type="text" class="topcoat-text-input--large" value="" placeholder="text">
<br>
<br>
<input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
<br>
<br>
<input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
+
+
+

CSS

+

+.topcoat-text-input--large {
+  line-height: 4.375rem;
+  font-size: 1.3rem;
+}
+
+.topcoat-text-input--large:disabled {
+  color: #fff;
+}
+
+.topcoat-text-input--large:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input--large:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input--large:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-text-input--large:invalid {
+  border: 1px solid #d83b75;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.textarea {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  vertical-align: top;
+  resize: none;
+  outline: none;
+}
+
+.textarea:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.textarea,
+.topcoat-textarea,
+.topcoat-textarea--large {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  vertical-align: top;
+  resize: none;
+  outline: none;
+}
+
+.textarea:disabled,
+.topcoat-textarea:disabled,
+.topcoat-textarea--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Textarea

+
+


+
+ +
+
+

HTML

+
<textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
<br>
<br>
<textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
+
+
+

CSS

+

+.topcoat-textarea,
+.topcoat-textarea--large {
+  padding: 2rem;
+  font-size: 2.5rem;
+  font-weight: 200;
+  border-radius: 6px;
+  line-height: 3rem;
+  border: 1px solid #303233;
+  background-color: #404141;
+  box-shadow: inset 0 1px rgba(0,0,0,0.18);
+  color: #c6c8c8;
+  letter-spacing: 1px;
+}
+
+.topcoat-textarea:focus,
+.topcoat-textarea--large:focus {
+  background-color: #646666;
+  color: #fff;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-textarea:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-textarea:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-textarea:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+
+
+
+
+
+
+

Large Textarea

+
+


+
+ +
+
+

HTML

+
<textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
<br>
<br>
<textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
+
+
+

CSS

+

+.topcoat-textarea--large {
+  font-size: 3rem;
+  line-height: 4.375rem;
+}
+
+.topcoat-textarea--large:disabled {
+  color: #fff;
+}
+
+.topcoat-textarea--large:disabled::-webkit-input-placeholder {
+  color: #fff;
+}
+
+.topcoat-textarea--large:disabled::-moz-placeholder {
+  color: #fff;
+}
+
+.topcoat-textarea--large:disabled:-ms-input-placeholder {
+  color: #fff;
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Regular.otf");
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Light.otf");
+  font-weight: 200;
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Semibold.otf");
+  font-weight: 600;
+}
+
+body {
+  margin: 0;
+  padding: 0;
+  background: #4b4d4e;
+  color: #000;
+  font: 16px "Source Sans", helvetica, arial, sans-serif;
+  font-weight: 200;
+}
+
+:focus {
+  outline-color: transparent;
+  outline-style: none;
+}
+
+.topcoat-icon--menu-stack {
+  background: url("../img/hamburger_light.svg") no-repeat;
+  background-size: cover;
+}
+
+.quarter {
+  width: 25%;
+}
+
+.half {
+  width: 50%;
+}
+
+.three-quarters {
+  width: 75%;
+}
+
+.third {
+  width: 33.333%;
+}
+
+.two-thirds {
+  width: 66.666%;
+}
+
+.full {
+  width: 100%;
+}
+
+.left {
+  text-align: left;
+}
+
+.center {
+  text-align: center;
+}
+
+.right {
+  text-align: right;
+}
+
+.reset-ui {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/* This file should include color and image variables corresponding to the dark theme */
+
+/* Call To Action */
+
+/* Icons */
+
+/* Navigation Bar */
+
+/* Text Input */
+
+/* Search Input */
+
+/* List */
+
+/* Checkbox */
+
+/* Overlay */
+
+/* Progress bar */
+
+/* Checkbox */
+
+/* Radio Button */
+
+/* Tab bar */
+
+/* Switch */
+
+/* Icon Button */
+
+/* Navigation bar */
+
+/* List */
+
+/* Search Input */
+
+/* Textarea */
+
+/* Checkbox */
+
+/* Radio */
+
+/* Range input */
+
+/* Search Input */
+
+/* Switch */
+
+/* This file should include color and image variables corresponding to the light theme */
+
+/* Call To Action */
+
+/* Icons */
+
+/* Navigation Bar */
+
+/* Text Input */
+
+/* List */
+
+/* Overlay */
+
+/* Progress bar */
+
+/* Checkbox */
+
+/* Range input */
+
+/* Radio Button */
+
+/* Tab bar */
+
+/* Switch */
+
+/* Containers */
+
+/* Icon Button */
+
+/* Navigation bar */
+
+/* List */
+
+/* Search Input */
+
+/* Text Area */
+
+/* Checkbox */
+
+/* Radio */
+
+/* Range input */
+
+/* Search Input */
+
+/* Switch */
+
+/* Text Input */
+
+/* Radio input */
+
+/* Overlay */
+
+/* Textarea */
+
+/* Progress bar container */
+
+/* Progress bar progress */
+
+/* Search input */
+
+/* Switch */
+
+/* Notification */
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-light.html b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-light.html new file mode 100755 index 0000000..f67a519 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-light.html @@ -0,0 +1,3417 @@ + + + + + + Topcoat + + + + + + + +
+ +
+
+
+
+

Topcoat

+

CSS for clean and fast web apps

+
+ +
+
+
+
+
+

Button Bar

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<div class="topcoat-button-bar">
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">One</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">Two</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button">Three</button>
  </div>
</div>
+
+
+

CSS

+

+.topcoat-button-bar > .topcoat-button-bar__item:first-child {
+  border-top-left-radius: 6px;
+  border-bottom-left-radius: 6px;
+}
+
+.topcoat-button-bar > .topcoat-button-bar__item:last-child {
+  border-top-right-radius: 6px;
+  border-bottom-right-radius: 6px;
+}
+
+.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
+.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
+  border-right: none;
+}
+
+.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
+.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
+  border-left: none;
+}
+
+.topcoat-button-bar__button {
+  border-radius: inherit;
+}
+
+.topcoat-button-bar__button:focus,
+.topcoat-button-bar__button--large:focus {
+  z-index: 1;
+}
+
+
+
+
+
+
+
+

Large Button Bar

+
+
+
+ +
+
+

HTML

+
<div class="topcoat-button-bar">
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">One</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">Two</button>
  </div>
  <div class="topcoat-button-bar__item">
    <button class="topcoat-button-bar__button--large">Three</button>
  </div>
</div>
+
+
+

CSS

+

+.topcoat-button-bar__button--large {
+  border-radius: inherit;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-button,
+.topcoat-button--quiet,
+.topcoat-button--large,
+.topcoat-button--large--quiet,
+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-button:disabled,
+.topcoat-button--quiet:disabled,
+.topcoat-button--large:disabled,
+.topcoat-button--large--quiet:disabled,
+.topcoat-button--cta:disabled,
+.topcoat-button--large--cta:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Button

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<button class="topcoat-button">Button</button>
<button class="topcoat-button" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button,
+.topcoat-button--quiet,
+.topcoat-button--large,
+.topcoat-button--large--quiet,
+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  padding: 0 1.25rem;
+  font-size: 16px;
+  line-height: 3rem;
+  letter-spacing: 1px;
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  vertical-align: top;
+  background-color: #e5e9e8;
+  box-shadow: inset 0 1px #fff;
+  border: 1px solid #a5a8a8;
+  border-radius: 6px;
+}
+
+.topcoat-button:hover,
+.topcoat-button--quiet:hover,
+.topcoat-button--large:hover,
+.topcoat-button--large--quiet:hover {
+  background-color: #edf1f1;
+}
+
+.topcoat-button:active,
+.topcoat-button--large:active {
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+.topcoat-button:focus,
+.topcoat-button--quiet:focus,
+.topcoat-button--large:focus,
+.topcoat-button--large--quiet:focus,
+.topcoat-button--cta:focus,
+.topcoat-button--large--cta:focus {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+  outline: 0;
+}
+
+
+
+
+
+
+
+

Quiet Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--quiet">Button</button>
<button class="topcoat-button--quiet" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-button--quiet:hover,
+.topcoat-button--large--quiet:hover {
+  text-shadow: 0 1px #fff;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-button--quiet:active,
+.topcoat-button--large--quiet:active {
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  background-color: #d3d7d7;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large" >Button</button>
<button class="topcoat-button--large" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large,
+.topcoat-button--large--quiet {
+  font-size: 1.3rem;
+  font-weight: 400;
+  line-height: 4.375rem;
+  padding: 0 1.25rem;
+}
+
+
+
+
+
+
+
+

Large Quiet Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large--quiet" >Button</button>
<button class="topcoat-button--large--quiet" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+
+
+
+
+
+
+

Call To Action Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--cta" >Button</button>
<button class="topcoat-button--cta" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--cta,
+.topcoat-button--large--cta {
+  border: 1px solid #143250;
+  background-color: #288edf;
+  box-shadow: inset 0 1px rgba(255,255,255,0.36);
+  color: #fff;
+  font-weight: 500;
+  text-shadow: 0 -1px rgba(0,0,0,0.36);
+}
+
+.topcoat-button--cta:hover,
+.topcoat-button--large--cta:hover {
+  background-color: #509bef;
+}
+
+.topcoat-button--cta:active,
+.topcoat-button--large--cta:active {
+  background-color: #0380e8;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Call To Action Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-button--large--cta" >Button</button>
<button class="topcoat-button--large--cta" disabled>Button</button>
+
+
+

CSS

+

+.topcoat-button--large--cta {
+  font-size: 1.3rem;
+  font-weight: 400;
+  line-height: 4.375rem;
+  padding: 0 1.25rem;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="checkbox"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.checkbox {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox__label {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.checkbox:before,
+.checkbox:after {
+  content: '';
+  position: absolute;
+}
+
+.checkbox:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="checkbox"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.checkbox,
+.topcoat-checkbox__checkmark {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox__label,
+.topcoat-checkbox {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.checkbox--disabled,
+input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.checkbox:before,
+.checkbox:after,
+.topcoat-checkbox__checkmark:before,
+.topcoat-checkbox__checkmark:after {
+  content: '';
+  position: absolute;
+}
+
+.checkbox:before,
+.topcoat-checkbox__checkmark:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+
+
+
+
+
+
+

Checkbox

+
+


+
+

Examples

+ +
+
+ +
+
+

HTML

+
<label class="topcoat-checkbox">
  <input type="checkbox">
  <div class="topcoat-checkbox__checkmark"></div>
  Default
</label>
<br>
<br>
<label class="topcoat-checkbox">
  <input type="checkbox" disabled>
  <div class="topcoat-checkbox__checkmark"></div>
  Disabled
</label>
+
+
+

CSS

+

+.topcoat-checkbox__checkmark {
+  height: 2rem;
+}
+
+input[type="checkbox"] {
+  height: 2rem;
+  width: 2rem;
+  margin-top: 0;
+  margin-right: -2rem;
+  margin-bottom: -2rem;
+  margin-left: 0;
+}
+
+input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
+  opacity: 1;
+}
+
+.topcoat-checkbox {
+  line-height: 2rem;
+}
+
+.topcoat-checkbox__checkmark:before {
+  width: 2rem;
+  height: 2rem;
+  background: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  border-radius: 3px;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-checkbox__checkmark {
+  width: 2rem;
+  height: 2rem;
+}
+
+.topcoat-checkbox__checkmark:after {
+  top: 1px;
+  left: 2px;
+  opacity: 0;
+  width: 28px;
+  height: 11px;
+  background: transparent;
+  border: 7px solid #666;
+  border-width: 7px;
+  border-top: none;
+  border-right: none;
+  border-radius: 2px;
+  -webkit-transform: rotate(-50deg);
+  -ms-transform: rotate(-50deg);
+  transform: rotate(-50deg);
+}
+
+input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-icon-button,
+.topcoat-icon-button--quiet,
+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-icon-button:disabled,
+.topcoat-icon-button--quiet:disabled,
+.topcoat-icon-button--large:disabled,
+.topcoat-icon-button--large--quiet:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button">
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button" disabled>
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button,
+.topcoat-icon-button--quiet,
+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  padding: 0 0.75rem;
+  line-height: 3rem;
+  letter-spacing: 1px;
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  vertical-align: baseline;
+  background-color: #e5e9e8;
+  box-shadow: inset 0 1px #fff;
+  border: 1px solid #a5a8a8;
+  border-radius: 6px;
+}
+
+.topcoat-icon-button:hover,
+.topcoat-icon-button--quiet:hover,
+.topcoat-icon-button--large:hover,
+.topcoat-icon-button--large--quiet:hover {
+  background-color: #edf1f1;
+}
+
+.topcoat-icon-button:active {
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+.topcoat-icon-button:focus,
+.topcoat-icon-button--quiet:focus,
+.topcoat-icon-button--quiet:hover:focus,
+.topcoat-icon-button--large:focus,
+.topcoat-icon-button--large--quiet:focus,
+.topcoat-icon-button--large--quiet:hover:focus {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+  outline: 0;
+}
+
+
+
+
+
+
+
+

Quiet Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--quiet">
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--quiet" disabled>
  <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-icon-button--quiet:hover,
+.topcoat-icon-button--large--quiet:hover {
+  text-shadow: 0 1px #fff;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-icon-button--quiet:active,
+.topcoat-icon-button--large--quiet:active {
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  background-color: #d3d7d7;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--large">
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--large" disabled>
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--large,
+.topcoat-icon-button--large--quiet {
+  width: 4.375rem;
+  height: 4.375rem;
+  line-height: 4.375rem;
+}
+
+.topcoat-icon-button--large:active {
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+}
+
+
+
+
+
+
+
+

Large Quiet Icon Button

+
+
+
+ +
+
+

HTML

+
<button class="topcoat-icon-button--large--quiet">
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
<button class="topcoat-icon-button--large--quiet" disabled>
  <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
</button>
+
+
+

CSS

+

+.topcoat-icon-button--large--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.topcoat-icon,
+.topcoat-icon--large {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  overflow: hidden;
+  width: 1.62rem;
+  height: 1.62rem;
+  vertical-align: middle;
+  top: -1px;
+}
+
+.topcoat-icon--large {
+  width: 2.499999998125rem;
+  height: 2.499999998125rem;
+  top: -2px;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.input {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+}
+
+.input:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.list {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.list__header {
+  margin: 0;
+}
+
+.list__container {
+  padding: 0;
+  margin: 0;
+  list-style-type: none;
+}
+
+.list__item {
+  margin: 0;
+  padding: 0;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.list,
+.topcoat-list {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.list__header,
+.topcoat-list__header {
+  margin: 0;
+}
+
+.list__container,
+.topcoat-list__container {
+  padding: 0;
+  margin: 0;
+  list-style-type: none;
+}
+
+.list__item,
+.topcoat-list__item {
+  margin: 0;
+  padding: 0;
+}
+
+
+
+
+
+
+
+

List

+
+

Category

  • Item
  • Item
  • Item
+
+ +
+
+

HTML

+
<div class="topcoat-list">
  <h3 class="topcoat-list__header">Category</h3>
  <ul class="topcoat-list__container">
    <li class="topcoat-list__item">
      Item
    </li>
    <li class="topcoat-list__item">
      Item
    </li>
    <li class="topcoat-list__item">
      Item
    </li>
  </ul>
</div>
+
+
+

CSS

+

+.topcoat-list {
+  border-top: 1px solid #bcbfbf;
+  border-bottom: 1px solid #eff1f1;
+  background-color: #dfe2e2;
+}
+
+.topcoat-list__header {
+  padding: 4px 20px;
+  font-size: 0.9em;
+  font-weight: 400;
+  background-color: #cccfcf;
+  color: #656565;
+  text-shadow: 0 1px 0 rgba(255,255,255,0.5);
+  border-top: 1px solid rgba(255,255,255,0.5);
+  border-bottom: 1px solid rgba(255,255,255,0.23);
+}
+
+.topcoat-list__container {
+  border-top: 1px solid #bcbfbf;
+  color: #454545;
+}
+
+.topcoat-list__item {
+  padding: 1.25rem;
+  border-top: 1px solid #eff1f1;
+  border-bottom: 1px solid #bcbfbf;
+}
+
+.topcoat-list__item:first-child {
+  border-top: 1px solid rgba(0,0,0,0.05);
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.navigation-bar {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  white-space: nowrap;
+  overflow: hidden;
+  word-spacing: 0;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.navigation-bar__item {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+}
+
+.navigation-bar__title {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.navigation-bar,
+.topcoat-navigation-bar {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  white-space: nowrap;
+  overflow: hidden;
+  word-spacing: 0;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.navigation-bar__item,
+.topcoat-navigation-bar__item {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+}
+
+.navigation-bar__title,
+.topcoat-navigation-bar__title {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+
+
+
+
+ +
+
+

Notification

+
+
1
+
+ +
+
+

HTML

+
<span class="topcoat-notification">1</span>
+
+
+

CSS

+

+.topcoat-notification {
+  padding: 0.15em 0.5em 0.2em;
+  border-radius: 2px;
+  background-color: #ec514e;
+  color: #fff;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="radio"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.radio-button {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button__label {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button:before,
+.radio-button:after {
+  content: '';
+  position: absolute;
+  border-radius: 100%;
+}
+
+.radio-button:after {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}
+
+.radio-button:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.radio-button--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+input[type="radio"] {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.radio-button,
+.topcoat-radio-button__checkmark {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button__label,
+.topcoat-radio-button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.radio-button:before,
+.radio-button:after,
+.topcoat-radio-button__checkmark:before,
+.topcoat-radio-button__checkmark:after {
+  content: '';
+  position: absolute;
+  border-radius: 100%;
+}
+
+.radio-button:after,
+.topcoat-radio-button__checkmark:after {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+}
+
+.radio-button:before,
+.topcoat-radio-button__checkmark:before {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.radio-button--disabled,
+input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Radio Button

+
+






+
+

Examples

+ +
+
+ +
+
+

HTML

+
<!-- NO LABEL -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
</label>
<br>
<br>
<!-- LEFT LABEL -->
<label class="topcoat-radio-button">
  Left label
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
</label>
<br>
<br>
<!-- RIGHT LABEL -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat">
  <div class="topcoat-radio-button__checkmark"></div>
  Right label
</label>
<br>
<br>
<!-- DISABLED -->
<label class="topcoat-radio-button">
  <input type="radio" name="topcoat" Disabled>
  <div class="topcoat-radio-button__checkmark"></div>
  Disabled
</label>
+
+
+

CSS

+

+input[type="radio"] {
+  height: 1.875rem;
+  width: 1.875rem;
+  margin-top: 0;
+  margin-right: -1.875rem;
+  margin-bottom: -1.875rem;
+  margin-left: 0;
+}
+
+input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
+  opacity: 1;
+}
+
+.topcoat-radio-button {
+  color: #454545;
+  line-height: 1.875rem;
+}
+
+.topcoat-radio-button__checkmark:before {
+  width: 1.875rem;
+  height: 1.875rem;
+  background: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-radio-button__checkmark {
+  position: relative;
+  width: 1.875rem;
+  height: 1.875rem;
+}
+
+.topcoat-radio-button__checkmark:after {
+  opacity: 0;
+  width: 0.875rem;
+  height: 0.875rem;
+  background: #666;
+  border: 1px solid rgba(0,0,0,0.1);
+  box-shadow: 0 1px rgba(255,255,255,0.5);
+  -webkit-transform: none;
+  -ms-transform: none;
+  transform: none;
+  top: 7px;
+  left: 7px;
+}
+
+input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.range {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+.range__thumb {
+  cursor: pointer;
+}
+
+.range__thumb--webkit {
+  cursor: pointer;
+  -webkit-appearance: none;
+}
+
+.range:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Copyright 2012 Adobe Systems Inc.;
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+.range,
+.topcoat-range {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+.range__thumb,
+.topcoat-range::-moz-range-thumb {
+  cursor: pointer;
+}
+
+.range__thumb--webkit,
+.topcoat-range::-webkit-slider-thumb {
+  cursor: pointer;
+  -webkit-appearance: none;
+}
+
+.range:disabled,
+.topcoat-range:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Range

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<input type="range" class="topcoat-range">
<input type="range" class="topcoat-range" disabled>
+
+
+

CSS

+

+.topcoat-range {
+  border-radius: 6px;
+  border: 1px solid #a5a8a8;
+  background-color: #d3d7d7;
+  height: 1rem;
+  border-radius: 30px;
+}
+
+.topcoat-range::-moz-range-track {
+  border-radius: 6px;
+  border: 1px solid #a5a8a8;
+  background-color: #d3d7d7;
+  height: 1rem;
+  border-radius: 30px;
+}
+
+.topcoat-range::-webkit-slider-thumb {
+  height: 3rem;
+  width: 2rem;
+  background-color: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  border-radius: 6px;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-range::-moz-range-thumb {
+  height: 3rem;
+  width: 2rem;
+  background-color: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  border-radius: 6px;
+  box-shadow: inset 0 1px #fff;
+}
+
+.topcoat-range:focus::-webkit-slider-thumb {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-range:focus::-moz-range-thumb {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.search-input {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+.search-input:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.search-input,
+.topcoat-search-input,
+.topcoat-search-input--large {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+  -webkit-appearance: none;
+}
+
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+.search-input:disabled,
+.topcoat-search-input:disabled,
+.topcoat-search-input--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Search Input

+
+
+
+ +
+
+

HTML

+
<input type="search" value="" placeholder="search" class="topcoat-search-input">
<input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
+
+
+

CSS

+

+.topcoat-search-input,
+.topcoat-search-input--large {
+  line-height: 3rem;
+  font-size: 16px;
+  border: 1px solid #a5a8a8;
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+  color: #454545;
+  padding: 0 0 0 2rem;
+  border-radius: 30px;
+  background-image: url("../img/search.svg");
+  background-position: 1em center;
+  background-repeat: no-repeat;
+  background-size: 16px;
+}
+
+.topcoat-search-input:focus,
+.topcoat-search-input--large:focus {
+  background-image: url("../img/search_dark.svg");
+  background-color: #edf1f1;
+  color: #000;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-search-input::-webkit-search-cancel-button,
+.topcoat-search-input::-webkit-search-decoration,
+.topcoat-search-input--large::-webkit-search-cancel-button,
+.topcoat-search-input--large::-webkit-search-decoration {
+  margin-right: 5px;
+}
+
+.topcoat-search-input:focus::-webkit-input-placeholder,
+.topcoat-search-input:focus::-webkit-input-placeholder {
+  color: #c6c8c8;
+}
+
+.topcoat-search-input:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-search-input:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-search-input:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+
+
+
+
+
+
+

Large Search Input

+
+
+
+ +
+
+

HTML

+
<input type="search" value="" placeholder="search" class="topcoat-search-input--large">
<input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
+
+
+

CSS

+

+.topcoat-search-input--large {
+  line-height: 4.375rem;
+  font-size: 1.3rem;
+  font-weight: 200;
+  padding: 0 0 0 2.9rem;
+  border-radius: 40px;
+  background-position: 1.2em center;
+  background-size: 1.3rem;
+}
+
+.topcoat-search-input--large:disabled {
+  color: #000;
+}
+
+.topcoat-search-input--large:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-search-input--large:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-search-input--large:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.switch {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch__input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.switch__toggle {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.switch__toggle:before,
+.switch__toggle:after {
+  content: '';
+  position: absolute;
+  z-index: -1;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch--disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.switch,
+.topcoat-switch {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch__input,
+.topcoat-switch__input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.switch__toggle,
+.topcoat-switch__toggle {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.switch__toggle:before,
+.switch__toggle:after,
+.topcoat-switch__toggle:before,
+.topcoat-switch__toggle:after {
+  content: '';
+  position: absolute;
+  z-index: -1;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+}
+
+.switch--disabled,
+.topcoat-switch__input:disabled + .topcoat-switch__toggle {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Switch

+
+




+
+

Examples

+ +
+
+ +
+
+

HTML

+
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input">
  <div class="topcoat-switch__toggle"></div>
</label>
<br>
<br>
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input" checked>
  <div class="topcoat-switch__toggle"></div>
</label>
<br>
<br>
<label class="topcoat-switch">
  <input type="checkbox" class="topcoat-switch__input" disabled>
  <div class="topcoat-switch__toggle"></div>
</label>
+
+
+

CSS

+

+.topcoat-switch {
+  font-size: 16px;
+  padding: 0 1.25rem;
+  border-radius: 6px;
+  border: 1px solid #a5a8a8;
+  overflow: hidden;
+  width: 6rem;
+}
+
+.topcoat-switch__toggle:before,
+.topcoat-switch__toggle:after {
+  top: -1px;
+  width: 5rem;
+}
+
+.topcoat-switch__toggle:before {
+  content: 'ON';
+  color: #0083e8;
+  background-color: #e0f0fa;
+  right: 1rem;
+  padding-left: 1.5rem;
+}
+
+.topcoat-switch__toggle {
+  line-height: 3rem;
+  height: 3rem;
+  width: 2rem;
+  border-radius: 6px;
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  background-color: #e5e9e8;
+  border: 1px solid #a5a8a8;
+  margin-left: -1.3rem;
+  margin-bottom: -1px;
+  margin-top: -1px;
+  box-shadow: inset 0 1px #fff;
+  -webkit-transition: margin-left 0.05s ease-in-out;
+  transition: margin-left 0.05s ease-in-out;
+}
+
+.topcoat-switch__toggle:after {
+  content: 'OFF';
+  background-color: #d3d7d7;
+  left: 1rem;
+  padding-left: 2rem;
+}
+
+.topcoat-switch__input:checked + .topcoat-switch__toggle {
+  margin-left: 2.7rem;
+}
+
+.topcoat-switch__input:focus + .topcoat-switch__toggle {
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
+.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
+  background: transparent;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.button,
+.topcoat-tab-bar__button {
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-decoration: none;
+}
+
+.button--quiet {
+  background: transparent;
+  border: 1px solid transparent;
+  box-shadow: none;
+}
+
+.button--disabled,
+.topcoat-tab-bar__button:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+.button-bar,
+.topcoat-tab-bar {
+  display: table;
+  table-layout: fixed;
+  white-space: nowrap;
+  margin: 0;
+  padding: 0;
+}
+
+.button-bar__item,
+.topcoat-tab-bar__item {
+  display: table-cell;
+  width: auto;
+  border-radius: 0;
+}
+
+.button-bar__item > input,
+.topcoat-tab-bar__item > input {
+  position: absolute;
+  overflow: hidden;
+  padding: 0;
+  border: 0;
+  opacity: 0.001;
+  z-index: 1;
+  vertical-align: top;
+  outline: none;
+}
+
+.button-bar__button {
+  border-radius: inherit;
+}
+
+.button-bar__item:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Tab Bar

+
+
+
+

Examples

+ +
+
+ +
+
+

HTML

+
<div class="topcoat-tab-bar">
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">One</button>
  </label>
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">Two</button>
  </label>
  <label class="topcoat-tab-bar__item">
    <input type="radio" name="tab-bar">
    <button class="topcoat-tab-bar__button">Three</button>
  </label>
</div>
+
+
+

CSS

+

+.topcoat-tab-bar__button {
+  padding: 0 1.25rem;
+  height: 3rem;
+  line-height: 3rem;
+  letter-spacing: 1px;
+  color: #454545;
+  text-shadow: 0 1px #fff;
+  vertical-align: top;
+  background-color: #e5e9e8;
+  box-shadow: inset 0 1px #fff;
+  border-top: 1px solid #a5a8a8;
+}
+
+.topcoat-tab-bar__button:active,
+.topcoat-tab-bar__button--large:active,
+:checked + .topcoat-tab-bar__button {
+  color: #0083e8;
+  background-color: #e0f0fa;
+  box-shadow: inset 0 0 2px #c0ced8;
+}
+
+.topcoat-tab-bar__button:focus,
+.topcoat-tab-bar__button--large:focus {
+  z-index: 1;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.input,
+.topcoat-text-input,
+.topcoat-text-input--large {
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  vertical-align: top;
+  outline: none;
+}
+
+.input:disabled,
+.topcoat-text-input:disabled,
+.topcoat-text-input--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Text input

+
+




+
+ +
+
+

HTML

+
<input type="text" class="topcoat-text-input" placeholder="text" value="">
<br>
<br>
<input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
<br>
<br>
<input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
+
+
+

CSS

+

+.topcoat-text-input,
+.topcoat-text-input--large {
+  line-height: 3rem;
+  font-size: 16px;
+  letter-spacing: 1px;
+  padding: 0 1.25rem;
+  border: 1px solid #a5a8a8;
+  border-radius: 6px;
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+  color: #454545;
+  vertical-align: top;
+}
+
+.topcoat-text-input:focus,
+.topcoat-text-input--large:focus {
+  background-color: #edf1f1;
+  color: #000;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-text-input:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input:invalid {
+  border: 1px solid #d83b75;
+}
+
+
+
+
+
+
+
+

Large Text Input

+
+




+
+ +
+
+

HTML

+
<input type="text" class="topcoat-text-input--large" value="" placeholder="text">
<br>
<br>
<input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
<br>
<br>
<input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
+
+
+

CSS

+

+.topcoat-text-input--large {
+  line-height: 4.375rem;
+  font-size: 1.3rem;
+}
+
+.topcoat-text-input--large:disabled {
+  color: #000;
+}
+
+.topcoat-text-input--large:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input--large:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input--large:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+.topcoat-text-input--large:invalid {
+  border: 1px solid #d83b75;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.textarea {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  vertical-align: top;
+  resize: none;
+  outline: none;
+}
+
+.textarea:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+/**
+*
+* Copyright 2012 Adobe Systems Inc.;
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+.textarea,
+.topcoat-textarea,
+.topcoat-textarea--large {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  vertical-align: top;
+  resize: none;
+  outline: none;
+}
+
+.textarea:disabled,
+.topcoat-textarea:disabled,
+.topcoat-textarea--large:disabled {
+  opacity: 0.3;
+  cursor: default;
+  pointer-events: none;
+}
+
+
+
+
+
+
+
+

Textarea

+
+


+
+ +
+
+

HTML

+
<textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
<br>
<br>
<textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
+
+
+

CSS

+

+.topcoat-textarea,
+.topcoat-textarea--large {
+  padding: 2rem;
+  font-size: 2.5rem;
+  font-weight: 200;
+  border-radius: 6px;
+  line-height: 3rem;
+  border: 1px solid #a5a8a8;
+  background-color: #d3d7d7;
+  box-shadow: inset 0 1px rgba(0,0,0,0.12);
+  color: #454545;
+  letter-spacing: 1px;
+}
+
+.topcoat-textarea:focus,
+.topcoat-textarea--large:focus {
+  background-color: #edf1f1;
+  color: #000;
+  border: 1px solid #0940fd;
+  box-shadow: 0 0 0 2px #6fb5f1;
+}
+
+.topcoat-textarea:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-textarea:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-textarea:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+
+
+
+
+
+
+

Large Textarea

+
+


+
+ +
+
+

HTML

+
<textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
<br>
<br>
<textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
+
+
+

CSS

+

+.topcoat-textarea--large {
+  font-size: 3rem;
+  line-height: 4.375rem;
+}
+
+.topcoat-textarea--large:disabled {
+  color: #000;
+}
+
+.topcoat-textarea--large:disabled::-webkit-input-placeholder {
+  color: #000;
+}
+
+.topcoat-textarea--large:disabled::-moz-placeholder {
+  color: #000;
+}
+
+.topcoat-textarea--large:disabled:-ms-input-placeholder {
+  color: #000;
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Regular.otf");
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Light.otf");
+  font-weight: 200;
+}
+
+@font-face {
+  font-family: "Source Sans";
+  src: url("../font/SourceSansPro-Semibold.otf");
+  font-weight: 600;
+}
+
+body {
+  margin: 0;
+  padding: 0;
+  background: #dfe2e2;
+  color: #000;
+  font: 16px "Source Sans", helvetica, arial, sans-serif;
+  font-weight: 200;
+}
+
+:focus {
+  outline-color: transparent;
+  outline-style: none;
+}
+
+.topcoat-icon--menu-stack {
+  background: url("../img/hamburger_dark.svg") no-repeat;
+  background-size: cover;
+}
+
+.quarter {
+  width: 25%;
+}
+
+.half {
+  width: 50%;
+}
+
+.three-quarters {
+  width: 75%;
+}
+
+.third {
+  width: 33.333%;
+}
+
+.two-thirds {
+  width: 66.666%;
+}
+
+.full {
+  width: 100%;
+}
+
+.left {
+  text-align: left;
+}
+
+.center {
+  text-align: center;
+}
+
+.right {
+  text-align: right;
+}
+
+.reset-ui {
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  background-clip: padding-box;
+  position: relative;
+  display: inline-block;
+  vertical-align: top;
+  padding: 0;
+  margin: 0;
+  font: inherit;
+  color: inherit;
+  background: transparent;
+  border: none;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/* This file should include color and image variables corresponding to the dark theme */
+
+/* Call To Action */
+
+/* Icons */
+
+/* Navigation Bar */
+
+/* Text Input */
+
+/* Search Input */
+
+/* List */
+
+/* Checkbox */
+
+/* Overlay */
+
+/* Progress bar */
+
+/* Checkbox */
+
+/* Radio Button */
+
+/* Tab bar */
+
+/* Switch */
+
+/* Icon Button */
+
+/* Navigation bar */
+
+/* List */
+
+/* Search Input */
+
+/* Textarea */
+
+/* Checkbox */
+
+/* Radio */
+
+/* Range input */
+
+/* Search Input */
+
+/* Switch */
+
+/* This file should include color and image variables corresponding to the light theme */
+
+/* Call To Action */
+
+/* Icons */
+
+/* Navigation Bar */
+
+/* Text Input */
+
+/* List */
+
+/* Overlay */
+
+/* Progress bar */
+
+/* Checkbox */
+
+/* Range input */
+
+/* Radio Button */
+
+/* Tab bar */
+
+/* Switch */
+
+/* Containers */
+
+/* Icon Button */
+
+/* Navigation bar */
+
+/* List */
+
+/* Search Input */
+
+/* Text Area */
+
+/* Checkbox */
+
+/* Radio */
+
+/* Range input */
+
+/* Search Input */
+
+/* Switch */
+
+/* Text Input */
+
+/* Radio input */
+
+/* Overlay */
+
+/* Textarea */
+
+/* Progress bar container */
+
+/* Progress bar progress */
+
+/* Search input */
+
+/* Switch */
+
+/* Notification */
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/build/styleguide.css b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/build/styleguide.css new file mode 100755 index 0000000..bcbf2a8 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/build/styleguide.css @@ -0,0 +1,495 @@ +/*! +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +/* Styleguide CSS here pls ------------------------------------------------------------------------------- */ + +html { + height: 100%; + width: 100%; + position: absolute; +} + +body { + color: #444; + font: 14px "source-sans-pro", "source", helvetica, arial, sans-serif; + line-height: 21px; + margin: 0; + padding: 0; + -webkit-font-smoothing: subpixel-antialiased; +} + +.guides { +/* border: 1px solid red;*/ +} + +.space { + height: 90px; +} + +#container { + min-width: 600px; +} + +#test-container { + padding: 0 120px 30px 30px ; +} + +h1,h2,h3,h4,h5,h6 { + color: #000; + font-family: "source-l", helvetica, arial, sans-serif; + font-weight: normal; + margin: 0; +} + +h4 { + border-bottom: 1px solid #d7d7d7; + font-size: 30px; + margin: 20px 0; +} + +h5 { + font-size: 21px; +} + +h4 span { + background: #fff; + padding: 0 7px 0 0; + position: relative; + bottom: -10px; +} + +.tabular { + border: 1px solid rgba(0,0,0,0.09); + border-spacing: 0; + margin: 14px 0; +} + +th, td, .tabular td.var { + border-bottom: 1px solid #eee; + font-size: 15px; + font-weight: normal; + padding: 5px 10px; + text-align: left; +} + +th { + white-space: nowrap; +} + +.tabular tr:last-child td { + border: none; +} + +.tabular td { + font-size: 12px; + padding: 10px; +} + +.images { + width: 100% !important; +} + +.images td, +.images th { + border-right: 1px solid #eee !important; + padding: 18px; + text-align: center; + vertical-align: top; +} + +.images th { + padding: 9px; +} + +.images tr:last-child td, +.images tr th:last-child { + border-right: none !important; +} + +.images img { + width: 300px; +} + +header { + background: #3a3f42 url("../img/bg_dark.png") repeat-x; + bottom: 0; + cursor: default; + left: 0; + overflow-y: scroll; + padding: 0 0 30px 0; + position: absolute; + top: 0; + width: 220px; +} + +#main { + bottom: 0; + left: 220px; + margin: 0; + overflow-y: scroll; + padding: 0 100px 60px 40px; + position: absolute; + right: 0; + top: 0; +} + +header hgroup { + padding: 15px; +} + +header hgroup { + border-bottom: 1px solid rgba(0,0,0,0.36); + box-shadow: 0px 1px 0px rgba(255,255,255,0.11); +} + +header h1 { + color: #fff; + font-size: 18px; + text-shadow: 0 -1px 0 #000; +} + +header h2 { + color: #c7c7c7; + font-size: 12px; + text-shadow: 0 -1px 0 #000; +} + +header h3 { + color: #A4B4B7; + font-size: 14px; + text-shadow: 0 -1px 0 #000; + margin: 15px 0 5px 15px; +} + +header ul { + list-style: none; + margin: 0; + padding: 0; + width: 100%; +} + +header a { + box-sizing: border-box; + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #bbb; + display: block; + font-size: 14px; + height: 24px; + line-height: 24px; + padding: 0 15px 0 30px; + text-shadow: 0 1px 0 #000; +} + +header a:link, +header a:visited { + color: #c7c7c7; + text-decoration: none; +} + +header .selected { + background: rgba(112,112,112,0.24); + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #fff !important; +} + + +header a:hover { + background: rgba(112,112,112,0.24); + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #fff !important; +} + +header a:focus { + border: 1px solid #0940fd; + -webkit-box-shadow: 0 0 4px #0088ff; + box-shadow: 0 0 4px #0088ff; + outline: none; + margin-left: 4px; + margin-right: 4px; + padding: 0 10px 0 25px; + background: rgba(112,112,112,0.24); + color: #fff !important; +} + +header a:active { + background: rgba(0,0,0,0.24); + border-top: 1px solid rgba(0,0,0,0.2); + border-bottom: 1px solid rgba(255,255,255,0.15); + color: #fff; +} + +h4:target span { + -webkit-animation: highlight 5s ease; + -moz-animation: highlight 5s ease; +} + + @-webkit-keyframes highlight { + 0% { color: #0083E8; text-shadow: 0 0 4px rgba(0,136,255,.69); } + 100% { color: #000; text-shadow: none; } + } + +.preview { + border-spacing: 0; + width: auto; +} + +.preview td { + padding: 15px 30px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.bg-light { + background: #f8f8f8; + border: 1px solid rgba(0,0,0,0.09); + font-size: 12px; +} + +.fonts.tabular { + width: 100%; +} + +.fonts.tabular th.bg-white { + border-bottom: 1px solid rgba(0,0,0,0.09); +} + +.fonts.tabular th.bg-lightgray { + border-bottom: 1px solid #bdbdbd; +} + +.fonts.tabular th.bg-slategray { + border-bottom: 1px solid #5c6061; +} + +.fonts.tabular td { + vertical-align: top; + width: 33%; +} + + +/* Selection ------------------------------------------------------------------------------- */ + +::selection { + background: #e0f0fa; + color: #000; +} + +header { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Scrollbars ------------------------------------------------------------------------------- */ + +::-webkit-scrollbar { + height: 8px; + width: 8px; +} + +::-webkit-scrollbar-track { + background: rgba(0,0,0,0.1); + box-shadow: inset 0 0 6px rgba(0,0,0,0); + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0); + border-radius: 4px; + -webkit-border-radius: 4px; +} + +::-webkit-scrollbar-thumb { + border-radius: 4px; + -webkit-border-radius: 4px; + border: 1px solid rgba(255,255,255,0.15); + background: rgba(0,0,0,0.3); + box-shadow: inset 0 0 6px rgba(0,0,0,0); + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0); +} + +::-webkit-scrollbar-thumb:window-inactive { + background: rgba(0,0,0,0.1); +} + + +/* Scrollbars ------------------------------------------------------------------------------- */ + + +/* Container */ +.modal { + /* Overlay page content */ + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.6); + z-index: 10000; + + /* Transition opacity on open */ + -webkit-transition: opacity 200ms ease-in; + transition: opacity 200ms ease-in; + + /* Hide for now */ + opacity: 0; + pointer-events: none; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Show modal */ +.modal:target { + opacity: 1; + pointer-events: auto; +} + +/* Hide modal */ +.modal:active { + opacity: 0; +} + +/* Content */ +.modal > div { + width: 65%; + background: #fff; + position: relative; + margin: 10% auto; + + /* Default minimise animation */ + -webkit-animation: minimise 500ms linear; + + /* Prettify */ + padding: 12px 15px; + border-radius: 4px; + box-shadow: 0 15px 36px rgba(0,0,0,0.6); + background: #fff; + text-shadow: 0 1px 0 #fff; +} + +/* Override animation on modal open */ +.modal:target > div { + -webkit-animation-name: bounce; + -moz-animation-name: bounce; +} + +.modal h1 { + font-size: 24px; + padding: 0 0 10px; +} + +@-webkit-keyframes bounce { + 0% { + -webkit-transform: scale3d(1,1,1); + } + 55% { + -webkit-transform: scale3d(1,1,1); + } + 100% { + -webkit-transform: scale3d(1,1,1); + } +/* 0% { + -webkit-transform: scale3d(0.1,0.1,1); + box-shadow: 0 3px 20px rgba(0,0,0,0.9); + } + 55% { + -webkit-transform: scale3d(1,1,1); + box-shadow: 0 10px 20px rgba(0,0,0,0); + } + 75% { + -webkit-transform: scale3d(0.95,0.95,1); + box-shadow: 0 0 20px rgba(0,0,0,0.9); + } + 100% { + -webkit-transform: scale3d(1,1,1); + box-shadow: 0 3px 20px rgba(0,0,0,0.9); + } +*/ +} + +@-webkit-keyframes minimise { + 0% { + -webkit-transform: scale3d(1,1,1); + } + 100% { + -webkit-transform: scale3d(0.1,0.1,1); + } +} + +/* Modal close link */ +.modal a[href="#close"] { + position: absolute; + right: 0; + top: 0; + color: transparent; +} + +/* Reset native styles */ + .modal a[href="#close"]:focus { + outline: none; +} + +/* Create close button */ +.modal a[href="#close"]:after { + content: url("../img/close_modal.png"); + display: block; + + /* Position */ + position: absolute; + right: 15px; + top: 15px; + + /* Style */ + font-size: 12px; + text-decoration: none; + text-shadow: none; + text-align: center; + font-weight: bold; + background: #fff; +} + +.modal a[href="#close"]:focus:after, +.modal a[href="#close"]:hover:after { + +} + +.modal a[href="#close"]:focus:after { + outline: 1px solid #000; +} + +.modal a[href="#close"] { + text-shadow: none !important; +} + +/* Open modal */ +a.openmodal { + display: block; + text-align: center; +} + +a.openmodal:hover, +a.openmodal:focus { + +} \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/build/styleguide.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/build/styleguide.js new file mode 100755 index 0000000..67f89bf --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/build/styleguide.js @@ -0,0 +1,10 @@ +if (!document.querySelector('override')) { + var head = document.querySelector('head'); + var link = document.createElement('link'); + link.id = 'override'; + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = '../../release/css/' + location.href.split('/').pop().split('.')[0] + '.css'; + link.media = 'all'; + head.appendChild(link); +} \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js new file mode 100755 index 0000000..6c472dd --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js @@ -0,0 +1,13 @@ +var chromiumSrc = process.env.CHROMIUM_SRC; + +module.exports = function(grunt) { + + grunt.registerTask('check_chromium_src', "Internal task to store CHROMIUM_SRC env var into chromiumSrc", function() { + if (!chromiumSrc) { + grunt.fail.warn("Please set the CHROMIUM_SRC env var to the root of your chromium sources(ends in /src)"); + } else { + grunt.log.writeln("CHROMIUM_SRC points to " + chromiumSrc.cyan); + } + }); + +} diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrygentest.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrygentest.js new file mode 100755 index 0000000..2b0bb0c --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrygentest.js @@ -0,0 +1,98 @@ +var fs = require("fs"), + jade = require("jade"), + path = require("path"); + +module.exports = function (grunt) { + + var TELEMETRY_DIR = 'dev/test/perf/telemetry/perf/page_sets/', + MASTER_JADE = 'topcoat_telemetry.jade'; + + grunt.registerTask('perf', 'Generates performance test', function (platform, theme) { + + var perfJades = findAllPerfJadeFileInSrc(); + + var targetPlatform = platform || 'mobile', + targetTheme = theme || 'light'; + + var targetCSS = prepareCSS(targetPlatform, targetTheme); + + var jadeCompileData = {}; + + grunt.util._.forEach(perfJades, function (jadePath) { + + var jadeFileName = path.basename(jadePath).split('.')[0]; + + prepareJadeCompileData(jadeCompileData, jadePath, + jadeFileName, targetPlatform, targetTheme, targetCSS); + + createTelemetryJSON(jadeFileName); + }); + batchCompileJade(jadeCompileData); + }); + + var findAllPerfJadeFileInSrc = function () { + + var jades = grunt.file.expand('node_modules/topcoat-*/test/perf/topcoat_*.jade') + .concat('node_modules/topcoat-checkbox/test/perf/checkbox-test.jade'); + + if (jades.length === 0){ + throw new Error("ERROR: No jade file is found in src/../test/perf/"); + } + + return jades; + }; + + var prepareCSS = function(platform, theme) { + + return "release/css/topcoat-" + platform + "-" + theme + ".min.css"; + }; + + var prepareJadeCompileData = function (jadeCompileData, jadePath, + caseName, platform, theme, css) { + + var jadeContent = fs.readFileSync(jadePath, "utf8"), + getHtml = jade.compile(jadeContent); + + jadeCompileData[caseName] = { + options: { + data: { + platform: platform, + theme: theme, + css: css, + name: caseName, + componentHTML: getHtml() + } + }, + src: TELEMETRY_DIR + "topcoat/" + MASTER_JADE, + dest: TELEMETRY_DIR + "topcoat/" + caseName + ".test.html" + }; + }; + + var createTelemetryJSON = function (caseName) { + + var jsonContent = { + "description": "Test", + "archive_data_file": "../data/topcoat_buttons.json", + "pages": [ + { + "url": "file:///topcoat/" + caseName + ".test.html", + "smoothness": { + "action": "scrolling_action" + } + } + ] + }; + + var jsonFilePATH = TELEMETRY_DIR + caseName + '.test.json'; + + fs.writeFileSync( + jsonFilePATH, + JSON.stringify(jsonContent, null, 4), + 'utf8'); + }; + + var batchCompileJade = function(data){ + grunt.config('jade', data); + grunt.task.run('jade'); + }; +}; diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrysubmit.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrysubmit.js new file mode 100755 index 0000000..f9f6fb2 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrysubmit.js @@ -0,0 +1,101 @@ +module.exports = function(grunt) { + + grunt.registerTask('telemetry-submit', 'Submit telemetry test results', function(gitCWD) { + + var exec = require("child_process").exec, + commandToBeExecuted = 'git log --pretty=format:"%H %ci" | head -n 1', + done = this.async(); + + var part1 = { + properties: { + path: { + message: 'Path to telemetry output file', + required: true + }, + device: { + message: 'Device on which the test ran', + required: true + } + } + }; + + var part2 = { + properties: { + test: { + message: 'What is the name of the test?', + required: true, + default: '' + }, + type: { + message: 'Is it a test (nightly) ?', + required: true, + default: 'Yes' + } + } + }; + + exec(commandToBeExecuted, { cwd: gitCWD }, function(error, stdout, stderr) { + if (error) { + grunt.log.error('Error'); + console.log(error); + done(); + } else { + + var path = grunt.option('path') + , device = grunt.option('device') + , test = grunt.option('test') + // use env variables to overwrite the location + // where the test results end up, for CI example + , host = process.env.TOPCOAT_BENCHMARK_SERVER + , port = process.env.TOPCOAT_BENCHMARK_PORT + , type = grunt.option('type') + , date = grunt.option('date') + , snapshot + , submitData = require('../test/perf/telemetry/lib/submitData') + , fileName = require('../test/perf/telemetry/lib/extractFileName') + , prompt = require('prompt') + ; + + if (!path || !test || !device) { + // Dummy test to see if it was called without arguments + // in this case we request the user for data + + prompt.start(); + prompt.get(part1, function (err, result) { + var options = result; + + part2.properties.test.default = fileName(result.path); + + prompt.get(part2, function (err, result) { + for (var i in result) + options[i] = result[i]; + + if (options.type.match(/y/gi)) + options.date = 'snapshot ' + new Date().toISOString(); + else + options.date = stdout; + + submitData(options.date, options.path, { + device: options.device, + test: options.test + }, { + host : host, + port : port + }); + }); + }); + } else { + // This is in case for automated tasks that submits the data + submitData(stdout, path, { + device: device, + test: test + }, { + host : host, + port : port + }); + } + } + }); + + }); +}; \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/README.md b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/README.md new file mode 100755 index 0000000..0fc795e --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/README.md @@ -0,0 +1,79 @@ +Performance tests based on chromium telemetry (see https://github.com/topcoat/topcoat/wiki/Measuring-performance for details) + +# Preparing to run the tests +A few steps are required before you can run the telemetry tests. + +First of all, you need to download chromium source code locally, as described on http://www.chromium.org/developers/how-tos/get-the-code. No need to compile, just download it. +Then export the location for the 'src' folder in the CHROMIUM_SRC environment variable, like in +``` +export CHROMIUM_SRC = /Users/cataling/work/chromium/home/src_tarball/tarball/chromium/src/ +``` + +Then you need to manually patch a little bit two of the benchmark files (the patches are just one liners, it they get bigger we'll just duplicate the benchmarks in topcoat). Locate the files named `loading_benchmark.py` and `smoothness_benchmark.py` in `$CHROMIUM_SRC/tools/perf/perf_tools`. Inside, look for the method `MeasurePage`, and find an appropriate place to paste `results.Add("UserAgent", "", tab.EvaluateJavaScript("navigator.userAgent"));`. This makes the benchmarks include the user agent string as part of their output, and we need this info to submit the results to the server. + +NOTE: we should make a patch for these modifications + +Next you can prepare the telemetry tests: +``` +grunt telemetry +``` +This does few things: +* it generates html snippets based on grunt template from test/perf/topcoat-*.test.jade of each of Topcoat component. So make sure you build Topcoat first, by ```grunt default```, so that Topcoat components are downloaded into the src folder; +* then it uses that html snippet to generate the actual test file from topcoat/test/perf /telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade; +* last, it copies those test files to the right location in chromium telemetry tests. + +# Running performance tests locally +You can run a telemetry test with: +``` +cd $CHROMIUM_SRC/tools/perf +./run_multipage_benchmarks --browser=system loading_benchmark page_sets/topcoat_buttons-base.test.json -o /tmp/loading_benchmark_topcoat_buttons-base.txt +./run_multipage_benchmarks --browser=system smoothness_benchmark page_sets/topcoat_buttons-base.test.json -o /tmp/smoothness_benchmark_topcoat_buttons-base.txt +``` +We store the benchmark output in a file - the next script will take this output and push it to the server + +For steps of running performance tests on Android: +https://github.com/topcoat/topcoat/wiki/Running-TopCoat-Performance-Test-on-Android + +# Pushing benchmark results to the server + +There is a grunt task that automates the process `$ grunt telemetry-submit --path=test_results.txt --type=sha|snapshot [--device] [--test]` + +Device is an optional parameter and sets the device on which the test ran. +For `type snapshot` you have to send in a date param as well. You have to use: `date -u +"%Y-%m-%dT%H:%M:%SZ"` + +Type is either `sha` or `snapshot`. + + * `sha` is for running the tests on a stable version (in black) + * `snapshot` is for running custom nightly builds of topcoat (in red) + * ![x axis perf view](http://i.imgur.com/DrKxFlI.png) + +Test is an optional parameter and it overrides the default test name ( which is the name of the file from path ). + +There is a `settings.js` file located under `/test/perf/telemetry/lib/` where you can change the address where to submit. It is currently set for http://bench.topcoat.io/v2/benchmark + +If you set an `TOPCOAT_BENCHMARK_SERVER` and `TOPCOAT_BENCHMARK_PORT` env variables you can override the default settings. + +You can view the results at http://bench.topcoat.io + +# Running all tests +There's also a handy script to run all the performance tests and push the results on the server. +It's located at `https://github.com/topcoat/topcoat/blob/master/test/perf/telemetry/bin/runAll.py`. +Check out the script for details on how to run it. + +# Adding a new performance test +Before adding new tests, you should make yourself comfortable with the chromium telemetry framework and running telemetry tests in chrome. + +Topcoat performance tests are located in `test/perf/telemetry/perf/page_sets` (the folder convention matches the one from chromium telemetry tests). When building telemetry with `grunt telemetry` this folder is copied over `page_sets` in chromium src. There is one .json file that describes each test, its structure is as required by chromium telemetry framework. You will need to add a new json file to describe your test - just start from an existing ones. + +The files for the tests are located under the `topcoat` folder. You can either add html file directly, or use jade. Jade files are converted to html when you run `grunt telemetry`. The html files will be generated under `page_sets` in chromium src. Currently, if you're adding a jade file you need to manually add it to `Gruntfile.js` (just look up where topcoat_buttons.jade is added). If future we'll get rid of this. + +Inside the test files (html or jade) you can reference the topcoat assets (css, fonts, images) under "./release/". The whole `./release` folder under topcoat root and all the components are copied there by `grunt telemetry`. + +In the json file you can reference the test file to load using `file:///topcoat/` URLs. Use .html here even if you use .jade for tests - you want to reference the generated html file, not the jade template. When running the tests, telemetry will instantiate a local HTTP server and rewrite the URLs, they will not be loaded with the file protocol. + +From telemetry we're currently using loading and smoothness benchmarks. The runAll.sh script currently runs these two benchmarks on all the .json tests under page_sets. + +Note 1: runAll.py uses CEF ([chromium embedding framework](https://code.google.com/p/chromiumembedded/)) to run the tests on desktop (Win and Mac) by default. This is because the target for TopCoat are web applications, not web sites, and CEF is the preferred way to develop web applications on desktop. +We're currently using a custom CEF build because telemetry does not work in CEF by default. A patch has been submitted to CEF upstream (https://code.google.com/p/chromiumembedded/issues/detail?id=917&sort=-id) to fix this. + +Note 2: part of this will probably change when we switch to the new components/themes architecture. diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py new file mode 100755 index 0000000..3dd8aba --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py @@ -0,0 +1,200 @@ +# Copyright 2012 Adobe Systems Inc.; +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# Runs all the telemetry tests and pushes results to the server +# +# Make sure to run in from its folder! +# +# Env vars used: +# - TestHelper.CHROMIUM_SRC: path to chromium src +# - DEVICE_NAME: a label to identify the machine running the tests when submitting results +# - CEF_HOME: path to CEF binaries (needed only if USE_CEF is set to True) +# - USE_CEF: if run with CEF, set this to 'True' +# + +import os +import sys +import shutil +import subprocess +import glob +import platform +import shutil + + +class TestHelper(): + GRUNT = "grunt" + RESULTS_DIR = "/tmp/topcoat-telemetry" + BROWSER = "system" + BROWSER_EXEC = None + SUBMIT_TYPE = "SHA" + + CHROMIUM_SRC = os.environ.get("CHROMIUM_SRC") + DEVICE_NAME = os.environ.get("DEVICE_NAME") + CEF_HOME = os.environ.get("CEF_HOME") + USE_CEF = os.environ.get("USE_CEF") + + @staticmethod + def init(targetPlatform, targetTheme): + TestHelper._checkEnvVars() + TestHelper._prepareProperties() + TestHelper._prepareResultsDir() + TestHelper._cleanTelemetryTests() + TestHelper._prepareTelemetryTests(targetPlatform, targetTheme) + + @staticmethod + def _getPlatform(): + p = platform.platform().lower() + if p.find('windows') != -1: return "Win" + if p.find('darwin') != -1: return "Mac" + if p.find('linux') != -1: return "Lin" + + @staticmethod + def _checkEnvVars(): + if not TestHelper.DEVICE_NAME: + raise RuntimeError("Please set DEVICE_NAME env var (no spaces allowed yet)") + + if not TestHelper.CHROMIUM_SRC: + raise RuntimeError("Please set CHROMIUM_SRC env var.") + + if not TestHelper.USE_CEF: + raise RuntimeError("Please set USE_CEF env var.") + + if (TestHelper.USE_CEF == 'True') and (not TestHelper.CEF_HOME): + raise RuntimeError("Please set CEF_HOME if you set USE_CEF to True") + + @staticmethod + def _prepareProperties(): + p = TestHelper._getPlatform() + + if p == "Win": + TestHelper.GRUNT = "grunt.cmd" + TestHelper.RESULTS_DIR = "C:\\tmp\\topcoat-telemetry" + TestHelper.BROWSER = "exact" + TestHelper.BROWSER_EXEC = "%s\\app\\cefclient.exe" % TestHelper.CEF_HOME + + if p == "Mac": + if TestHelper.USE_CEF: + TestHelper.BROWSER = "exact" + TestHelper.BROWSER_EXEC = "%s/app/cefclient.app/Contents/MacOS/cefclient" % TestHelper.CEF_HOME + + if p == "Lin": + TestHelper.BROWSER = "android-chrome-beta" + + @staticmethod + def _prepareResultsDir(): + print "runAll.py: Preparing results dir %s" % TestHelper.RESULTS_DIR + if os.path.isdir(TestHelper.RESULTS_DIR): + shutil.rmtree(TestHelper.RESULTS_DIR) + os.makedirs(TestHelper.RESULTS_DIR) + + @staticmethod + def _prepareTelemetryTests(targetPlatform, targetTheme): + print "runAll.py: Preparing telemetry tests" + subprocess.check_call([TestHelper.GRUNT, 'telemetry:'+targetPlatform+':'+targetTheme]) + + @staticmethod + def _cleanTelemetryTests(): + print "runAll.py: clean up CHROMIUM_SRC/tools/perf/page_sets/topcoat" + path = TestHelper.CHROMIUM_SRC + "tools/perf/page_sets/topcoat" + if os.path.exists(path): + shutil.rmtree(path) + + @staticmethod + def runTests(user_defined_test_list, how_many_rounds_to_run_the_test): + print "runAll.py: Running telemetry tests, results in %s" % TestHelper.RESULTS_DIR + + telemetry_tests = ["loading_benchmark", "smoothness_benchmark"] + + if user_defined_test_list and len(user_defined_test_list) != 0: + topcoat_test_files = user_defined_test_list + else: + topcoat_test_files = glob.glob(os.getcwd() + "/../perf/page_sets/*.json") + + def genCmd(): + cmd = [ + "python", + TestHelper.CHROMIUM_SRC + "/tools/perf/run_multipage_benchmarks", + "--browser=" + TestHelper.BROWSER, + telemetry_test, + TestHelper.CHROMIUM_SRC + "tools/perf/page_sets/%s" % topcoat_test_file, + "-o", TestHelper.RESULTS_DIR + "/%s_%s-%s.txt" % (telemetry_test, topcoat_test_name, test_round) + ] + if TestHelper.BROWSER_EXEC: + cmd.insert(3, "--browser-executable=" + TestHelper.BROWSER_EXEC) + return cmd + + for tf in topcoat_test_files: + topcoat_test_file = tf.split(os.sep)[-1] + topcoat_test_name = topcoat_test_file.split(".")[0] + print "runAll.py: Running tests for %s" % topcoat_test_name + + for telemetry_test in telemetry_tests: + for test_round in range(how_many_rounds_to_run_the_test): + cmd = genCmd() + subprocess.check_call(cmd) + + @staticmethod + def submitResults(git_cwd): + print "runAll.py: Pushing telemetry data to the server" + result_files = glob.glob(TestHelper.RESULTS_DIR + "/*.txt") + for rf in result_files: + subprocess.check_call([ + TestHelper.GRUNT, + "telemetry-submit:" + git_cwd, + "--path=" + rf, + "--device=" + TestHelper.DEVICE_NAME, + "--test=" + rf.split(os.sep)[-1][:-6], + "--type=" + TestHelper.SUBMIT_TYPE + ]) + + +if __name__ == "__main__": + + # Usage: + # ./python runAll.py --platform=VALUE --theme=VALUE [--gitCWD=VALUE] [--test=VALUE] [--round=VALUE] + # --platform= desktop or mobile + # --theme= light or dark + # [optional] --gitCWD=PATH_WHERE_YOU_WANT_TO_RUN_GIT_LOG, e.g. src/skins/button + # [optional] --test=ONE_OR_MORE_TESTS_YOU_WANT_TO_RUN, e.g. topcoat_button.test.json + # [optional] --test=HOW_MANY_ROUNDS_TO_RUN_THE_TEST, default is 1. + + platfrm = theme = git_cwd = test_list = None + test_round = 1 + + args = sys.argv[1:] + + for arg in args: + arg_key, arg_val = arg.split('=') + if arg_key == '--platform': + platfrm = arg_val + elif arg_key == '--theme': + theme = arg_val + elif arg_key == '--gitCWD': + git_cwd = arg_val + elif arg_key == '--test': + test_list = arg_val.split(',') + elif arg_key == '--round': + test_round = int(arg_val) + else: + print "%s is not recognized." + + if not platform or not theme: + raise RuntimeError("ERROR: --platform and --theme must be set.") + + if not git_cwd: + git_cwd = '' + + TestHelper.init(platfrm, theme) + TestHelper.runTests(test_list, test_round) + TestHelper.submitResults(git_cwd) \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh new file mode 100755 index 0000000..aa088c0 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh @@ -0,0 +1,105 @@ +#!/bin/sh +# Copyright 2012 Adobe Systems Inc.; +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# Runs all the telemetry tests and pushes results to the server +# +# Make sure to run in from its folder! +# +# Env vars used: +# - CHROMIUM_SRC: path to chromium src +# - DEVICE_NAME: a label to identify the machine running the tests when submitting results +# - CEF_HOME: path to CEF binaries (needed only if USE_CEF is set to True) +# + +RESULTS_DIR=/tmp/topcoat-telemetry +USE_CEF=true + +function checkEnvVars() { + if [ -z "$DEVICE_NAME" ] + then + echo "Please set DEVICE_NAME env var (no spaces allowed yet)" + exit 1 + fi + + if [ -z "$CHROMIUM_SRC" ] + then + echo "Please set CHROMIUM_SRC env var" + exit 1 + fi + + if ($USE_CEF) + then + if [ -z "$CEF_HOME" ] + then + echo "You need to set CEF_HOME if yout set USE_CEF to True" + exit 1 + fi + fi +} + +function prepareResultsDir() { + echo "runAll.sh: Preparing results dir $RESULTS_DIR" + rm -rf $RESULTS_DIR + mkdir $RESULTS_DIR +} + +function prepareTelemetryTests() { + echo "runAll.sh: Preparing telemetry tests" + grunt telemetry +} + +function runTests() { + echo "runAll.sh: Running telemetry tests, resuls in $RESULTS_DIR" + + if ($USE_CEF) + then + browserParams="--browser=exact --browser-executable=$CEF_HOME/app/cefclient.app/Contents/MacOS/cefclient" + else + browserParams="--browser=system" + fi + + testFiles=$(ls ../perf/page_sets/*.json); + + currentDir=`pwd` + cd $CHROMIUM_SRC/tools/perf + + for test in $testFiles + do + testFileBaseName=$(basename $test) #ends with .json + testName=$(echo $testFileBaseName | cut -d '.' -f 1) + echo "runAll.sh: Running tests for $testName" + ./run_multipage_benchmarks $browserParams loading_benchmark page_sets/$testFileBaseName -o $RESULTS_DIR/loading_benchmark_$testName.txt + ./run_multipage_benchmarks $browserParams smoothness_benchmark page_sets/$testFileBaseName -o $RESULTS_DIR/smoothness_benchmark_$testName.txt + done + + cd $currentDir +} + +function submitResults() { + echo "runAll.sh: Pushing telemetry data to the server" + + for resultFile in $RESULTS_DIR/* + do + grunt telemetry-submit --path=$resultFile --device $DEVICE_NAME + done +} + + +checkEnvVars +prepareResultsDir +prepareTelemetryTests +runTests +submitResults + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js new file mode 100755 index 0000000..b5d0594 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js @@ -0,0 +1,56 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +"use strict"; + +var parseCSV = function(file, cb) { + + var fs = require('fs') + , filename = file + , csv = require('csv') + ; + + var header = []; + var values = []; + var json = {}; + + csv() + .from.stream(fs.createReadStream(file)) + .transform(function(row, index){ + //in case there are blank lines in between key & value on Win7 + if (row[0] == ""){ + return null; + }else{ + return row; + } + }) + .on('record', function(row,index){ + if (index === 0) + header.push(row); + else + values.push(row); + }) + .on('end', function(count){ + header[0].forEach(function (h, idx) { + json[h] = values[0][idx]; + }); + cb(json); + }) + .on('error', function(error){ + console.log(error.message); + }); +}; + +module.exports = parseCSV; \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js new file mode 100755 index 0000000..f3446e5 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js @@ -0,0 +1,12 @@ +var extractFileName = function (path) { + if (path.split('/').length > 1) { + sep = '/'; + } else if (path.split('\\').length > 1) { + sep = '\\'; + } else { + throw new Error('ERROR: the separator in test result file path is neither "/" nor "\\".'); + } + return path.split(sep).pop().split('.')[0]; +}; + +module.exports = extractFileName; \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js new file mode 100755 index 0000000..b701064 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js @@ -0,0 +1,31 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +function settings (contentLength) { + var post_options = { + host: 'localhost', + port: '3000', + path: '/v2/benchmark', + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': contentLength + } + }; + + return post_options; +} + +module.exports = settings; diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js new file mode 100755 index 0000000..d3f732d --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js @@ -0,0 +1,61 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +var submitData = function (stdout, path, args, destination) { + var querystring = require('querystring'); + var http = require('http'); + var fs = require('fs'); + var parse = require('./csvToJSON'); + var postOptions = require('./settings'); + var fileName = require('./extractFileName.js'); + + var post_data = {}; + console.log(path); + parse(path, function (j) { + post_data = { + resultName : j + }; + + var version = stdout.split(' '); + + post_data.commit = version.shift(); + post_data.date = version.join(' '); + post_data.test = args.test || fileName(path); + post_data.device = args.device || 'device?'; + post_data = querystring.stringify({data : JSON.stringify(post_data)}); + post_options = postOptions(post_data.length); + if (destination.host && destination.port) { + var location = destination.host.split('/'); + + post_options.host = location.shift(); + post_options.port = destination.port; + } + // Set up the request + var post_req = http.request(post_options, function(res) { + res.setEncoding('utf8'); + res.on('data', function(chunk) { + console.log(chunk); + }); + }); + + // post the data + post_req.write(post_data); + post_req.end(); + + }); + +}; + +module.exports = submitData; \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade new file mode 100755 index 0000000..c38b00f --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade @@ -0,0 +1,17 @@ +repeats = 200 + +doctype 5 +html + head + meta(charset="utf-8") + meta(name="format-detection", content="telephone=no") + meta(name="viewport", content="user-scalable=no, initial-scale=1, maximum-scale=1, width=device-width, height=device-width, target-densitydpi=device-dpi") + + title #{name} test + | + + body + -while (repeats > 0) + -var repeats = repeats - 1 + p + | !{componentHTML} diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/LICENSE.txt b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/LICENSE.txt new file mode 100755 index 0000000..d154618 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Black.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Black.otf new file mode 100755 index 0000000000000000000000000000000000000000..ba47f3db43526fb256b02073eb102750867745f8 GIT binary patch literal 88472 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

8Wc&+}CCU`jEs&%D@qL+549E1WlFUd_B& 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

5F3@lk=wUo4h}Sj4dZPqpjX68^CY3bERopSoeA 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⋘kI`WEq$ellKm7mq2TD_fz zAkvd7L6biiX>xbwNp|Jlg?3ZlEIxUqgZuGcs!aF)D>jXaf^<5!(mW}B{K1p{-#GyN zciiXaN*xBRxju8B+lwncB~pls9o1CYx~-c6Y}B)U zUUx04e$ussnCs2E^~<+y7F))NPs|BNpcWpb6J zwz@LK^&{a*ToTkTvSK9#_ne7Iw<{*y@W71BvY7ko)U`vqT5h#GOEKwxJ1&$SIR2K4 z|Aj%OvYOsbPwQs>;d{F69yX`~XV3d%-x;$fIb+kD;_rKVwyza@F@BU?-0Sf5 zTi$hfY+=^pt9sD)sHN?kr%bF;VO|;U%^m$`?@O8EInHBI22clic(`r5DXwE!V#AU3F&5+yRA6F3s84vPnSw zE8Ckiua>;R@_eN#XF52Zp6f7hcE`G>8sB*0aV>0(V_w}?Rc_{*KRdddq;Ib{&pmAF z^FI43$3?07e2=#GZ+6Z#Zbh>F;*_I3VkY-rnKSR}#y1Q04m?q@$Kk{t{+q1LyH2yR zZ_=~-;+Zv9Hkof{vRqdC_<}WU=UsM9lv-dk;5lqvn0Qk6eC1%Po7?;NrO)}?)F;H^@2y~u@+K9X(G$)IC_8i z=r4;}1kJzJJ>qmh1=CPn#KW_-)ouG!IGa7FK7Vsp=XNz3bO{LrtCA3CzH@hcLd?C+{_~534cErCaJHM_ zG4jj2HI`*w=)G38|2TL0fW4}OOCttNiI*NayUeLg!PDyZJij0G4)ol#f7(RJSibzA zst>njR2ki}M_K>*=VvwxJYhE^rFwb$>Cs=gxwk6SYH;IN#>{W>l#6GQJ-$uI6~*!fkLdpW+zM|UT&Fx}XmmBVs1wBLMP#rOXS7EdcR!*<$h zCp?O~#++OnEoyo|MVii#|PD(imhnKgjsoTHN*N-f0E~00GDZ0ssI2 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf new file mode 100755 index 0000000000000000000000000000000000000000..5cb8e5fb97423708576a22c0496cc62aef8866bc GIT binary patch literal 84636 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Light.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Light.otf new file mode 100755 index 0000000000000000000000000000000000000000..e3c0a7492fd2233e1328ed072111c0df84ed9bcb GIT binary patch literal 88152 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 Z2%EhkErP322FqK>?y}MNI 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 D{gKXx literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Regular.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Regular.otf new file mode 100755 index 0000000000000000000000000000000000000000..40208be604a26af38c4dedb943c11c5a2e45aad3 GIT binary patch literal 89600 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 Vd^)H~a&+r1-Cfd$w_U+7{~wtKlK21s literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Semibold.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Semibold.otf new file mode 100755 index 0000000000000000000000000000000000000000..65b82d105c5d6cfd4abaf63846ad71bd650a2a53 GIT binary patch literal 89576 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 Clv%m} literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Black.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Black.otf new file mode 100755 index 0000000000000000000000000000000000000000..13338c22b5b10c678c960aef42aa3995ac238a7c GIT binary patch literal 98472 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%0Di9AI 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 LW7(w#;t2Ua82QPZ literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Bold.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Bold.otf new file mode 100755 index 0000000000000000000000000000000000000000..8998f3de6e545d65c4a7048dd56e678ae3bf4f38 GIT binary patch literal 104072 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 E0H_sezW@LL literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..071d0c398eb8a00c9533afc192952cf4d3e2c8ed GIT binary patch literal 101848 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 !)L#gmlQYt3YS5TN0N?R9R>N6pI8DLX=F#< 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�T>kZe&r8tZo6BIDswE2 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

Jv&&bdeknIcpZxUoif<2BX_?hHWJssh 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf new file mode 100755 index 0000000000000000000000000000000000000000..43e0c69ff3d98460951c3edd92c3817d076f9597 GIT binary patch literal 94560 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..01ac8765b95426f579ff5b485e27b30b07469ac2 GIT binary patch literal 92880 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

!t{peCIc;ta!T`}Ookd2rM3qoZ6sEdSke(| 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 LuQU3NA>{u6ogZx( literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-It.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-It.otf new file mode 100755 index 0000000000000000000000000000000000000000..51577d6d0262b323103ae6fc13a88c9c73d388a4 GIT binary patch literal 100556 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

-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 RROFJB&iwh+8Nge17yw?P4&VR) literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Light.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Light.otf new file mode 100755 index 0000000000000000000000000000000000000000..9d8fb28c11a430bda05269b3e36951b84c88806d GIT binary patch literal 98972 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 YT$ig$-89DX+DUzQsIMkO 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�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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..8a668e48720053d578b77bec94cf7b9ea462ed66 GIT binary patch literal 100000 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
  • Rf2JCSvKD8bR~ zrZ%uhb%!0Mr1p+RYTHMt7Ombtt8BIH*tq_+PHUH6X_|V5Un3fECFG4Kc3dUsn|GDI zkhAERW>o%egB4xATmJ!$?Q^XDRx?$n9|bBK(BL2|ZDb7_Rbs}8 z=0e>mUqZV2l%~?MuF`ovtZ?6jQkB}~*?i2es94-U*%t*zg|*@U2Vsip$338u_6V`u zp|!|i)b{*KNk{8`t+&d)`E1`-wRpyyU!&^fUy^-qwccm!k>_#P(>Hn}2edVSp77aA zp@=c+H0c7mV^QLgTcN=Bw?ckqmn?XZeG0$%VGS%fx1vhb_bZ7}tD<9!kWnNFpZ^-T zhZP>nxlVz5`{_PsaIl^xad8l6x5$R;gMiy02S+dWa+@YWRw?YqS0!W>R9raBE2#8Q zjxe+6devQY53^{70CJLRgE&yRgAWdJu!R}Qk=@V%jV#mwt)Plf5e4ZgBKSvfhDsMT z_kH$RDTkF-5SfExt~MNLN(>4YP)4!@wEXP?qIAg>uy!Reat)g&!K($7jC6V zn=^Cb%%4(EoY_Ln%Gh$xE#44!+sdzwgdWOBYF5DB=i3oeQ{0 zZSUGp!CwkBIU$7FXD%f2kky3e}GW)ORQ?&;9 z5C0wO5D9}HO~cWa1%lUWNpdzN<4frP z#VI#z@Nd>)+xVmnw_MWxR(eqz4neylT$nZ-yE}^b7s$_F{{7XE_GqJ*azOq5wFdWx z8WL5|#<;0l^)m{$r`Nbr)sVaj#??@_<{!iL>(Nd8z5(;o0ZG4p0h`YVx+CY-kkYhK z5fbbze3R2nF0?UU9;KEn(dOmPoW@IZok$i$aFt%>mvd9ka;f~0=Jv=MZo9m+CEL+J z9V(HGdv679Icr1%?X*6hqjD7b>c zmP*njZ3cHu9lM3sHWDsQ=H{#q=ck+l_*j4^0K7lI#{xW|k`$-SeG15QFEu12FwiKE zJ*Ku$VOT5eipi1DuYdG0rIM7O&3EEJb{GGhhcGQhKQvmX@8SLWqpOs6LUsX}jc9oQ zT6RIp8!JgvN}C-k$rJXVq{t&!-dN}p+(OOS`F^LX^zzW%gR*BBuv5Z-J|YbGo?#%6 z5(WxiYU7lnyRwcQbl%**=dhtY`=-uD$KLFOLeu8on8hknl$N6G>d+W&-SXICx5!(f zZ3a@~g<}s)Lt8m$DhVy6p`n~glAIdCGW3foxOP6|Dv?K?>;brBzzqkS2jG$`Njch^ zR+t=Wb>QCzCInNHBc7aurP>eoC9-*-Pvy7$s0~tS%n*>705XXn(@}e=R2QpM6t0SAj!jZCdkW`8){QDE@ynxEtuo5)moR}Jr3?uR znlDH`faz8sblD1&wpxKyx)o?$wklqjJFK?wJBej!vQmFEDID1M@b8?=m!0em{H;JA z25fgAZ>O()i z+Jm8+lq0+Fm9>$ttO0ywx$u>>5i9F)zWWli5@zwCNBL0y&6$f3WPn<|=>xany6Y<4 z$OaG}H%?**CozGONaTwX9Z+uXIdmx6JV0~{nJ{srapaWvM9}CnJ-*LvV?Qz%k75`f z#xOpPg2aw+30MeHnK-%)KDb2_Lit59B?W zYU{(pFI_sGbnv)oaQrc+3&yjDHf-E(c0x?8r}LEYMmg`dA%`BXFw>5bQMG+~yAK>; zIv6-2zMHXo7hjLQ=6DBTLssVM9mc&Iy!x5tJyYjS3lA}|4l|kkU{=u}=V_Ixy>ff~ zq3ped0k~mv0s+U44^d{h%$u~xwann*!@PN@W9;_R=Thmr2(xVn7p{BwYR&H1!4AJE zPky60YCV<2iK905G_u-yY;U^?2Rq!HVwSZb9Uy5>iSa_L!M3vtcWq3LvmbU&kl*-C za`$&Oc6LR?lWp$X`$=m;Ab!Z;OcJ=hXKme3^mmEg>DI%)POZ0 zcYH(Ma3M&;!tsU+LE3OhtEss`d9kNRt?2zuy$@&heUSR>hpBSb6qZp#y$|XC{yu4# z3R}-SeFuN2(>33}iEpL?sHV{y`bBXZJ#6wQBe$b}y!z?p=FR@2)|x4pQk4#(>=u2; zPnEp`8VjttC?|#W5vaO2wSRDJNTjJ#oa14ZmvKjGZdrrJ5_coASoYRKDoNB%oLeNo z+kr<7=nfBkDD}Ej;y3$-QrlY!Fo-)P`BQn7bwSG*!&ex?Pkamkzf(ostMV#IT3bGX zpD=>2EF;)g%7vXZ>HRJoZWSKLpFyB3WzCl4KaQ$>rKcAy4YTIZvv4(MU+EG*!+2Yu zHo1!_i79@?S1)VfEImE_7fk-zn6zXZVYACP*X6r{1YI{>0iB z%xM6s)cz1h^vY{jh}TLpwE|~3IH(I7V?R=+auZCYd8whn{A_*|2M979DC}b^N*z{o zl$3g)4+}p^3dco$MfTc+$G~4;soJv}cw4W)kL0{Iycha#{v{tKnEzrm<8(=8?)b5+ zWZy9le61EU5cbz-e+t8J=Z9gu*_VGbX`rU)`%EFv)=BTTA&mC{jE>Btc&jNJv#HDp z^ZzM+UJtmJ7B8JYe~HQ0zxUuC22ZWUe+1Oqj^-kiE&^TG9JEkHepW@5ulGkpW)Dch z+YyoJuDSDN@d*8V#+SwDB56dvV!?O>j4Qx+1dJ=dc=SP=h}nIH*?q)kcQkjK!7%~9 z5bP>?BQJoG2b32;$pgwOT(c+FP)9>GkU0RH2=NQ zR^NS7O}zIO8Rfrqh1P3-@P+#f3-^&_;i3^;;QB9Jc@d<|(pT*0B4O{p(T>$7^JVp{ zcv(G)v-lBVzy4pYM2&V&mGYP?Y$(>;=?De`d+1UAo8wW^AGK)XxwfVELT$p3K!sqQgGs-dVEB!{-k)s zbK@*TxSVZ$5IYel2R=}ed8AfROfL^mI;!fVF!AWoaRBxIsL!#bQ#;jlbeof>AoBgk zL1DpjK4eV+dBEF7y;`A3D11Wwu&V8X$*=~?`UCd|tBGBU)%u*&0FCjlxUt1wY|IU8 zAoEo2FIHS`J?6%|LYFdhXfz1h-m{2)c8JIBD|^G6ERA~>d7n|+YM=O^xZ(TrF1&~A zfg&o@k9(KV@N0$MW%EC8hWUkiompJYGReQlrm1@}4|3a_*1X43q9$0Ycp z-RtbT#aGL+9CtcULk`pzK+Bp*)Pglo&6V%Ggd&|$Dw|96o*480&>O+`0nMMgMIvSKV4vi4i$ZhW~V z-1ss9R}UWmhuNv>o_71mQEvqpNdsotE1fKbF1pRaPZzxptp0Xt>Dtfh1 zPFoGEQ7f>p_+<3nBiYgD+*kPY^U%_Z5-p+Ay9+KV>xwc9SRzBw5?|l6hYUl2lm?`n z5=fkbY4;ka_ln0s#W>jfJNfGv5^i$8hZ&-8&=bA;xghzZ1j*cU((unU;7vj|x2x~z zTRU<+ORq4pdmJ&c^mv?tAougaFJg^?Q0zN$o+YnID)O47A)X!q#-CnGzxL2wC2cQ3 zTGYKHH&VR~YVohJRIj~+UyetkFbEZ;8dNV`U8f5RD9EcQ4Ta-W;Q+qC0Os)lT&GJq zTgmDm31>)PrNHIy6{TU+^cpOEN2PUK+R+vZu3)igP;6KX%8R+~@J%7NL@Y3Mf> zVf2O@BiQnic&hk93@HZP;6jXrPmG@jJym`!x&go7H((vXmc#AY9i_%xkqbcn52#u4 z{{NCG6r<{amuTWuMd>50RBDKoD+;+qH{5d~>&kDq%k&%Wr^HocR=1~|T8o>T*EIj2 zAjn}8f_bd9lM9cv#z>sk<)jkB@ll^5zWu%A5yJ0zgfOd%t1e$omqPD!_0`(kvD^BF z7QU4;HJR=z3&Q4yg&0_=F06D-51+_2K_=g9C49x)sFjc%&r+GEo7RW=t~OEQXUf>E zy&Z)ut|Ouc8kvFp1bNzV_;RNhH?usYdpAMOOc{UZh~S=-5eR2wBTi{M>a}y)wt&s} z{6B`?{PiAHI)|J+O>gn}qrfNR@lf_7mr&*6#f+RRbL({n##}I7IJ#kDs#)Gyd_C(t zaOeA_W=h57Y!y#=G!iL~x_27WeuU|w_psDfMx>iD@Sd1uKW2NOk$XdyGZNEMOR$p;6xBQ`d!8$bb4h?-k zL+{X#Tj2)<3NN${`JEKEkl;W}H~*TBh((`QdL(_T#+upcg3rKz2K+qWUkASBlNgCl zqN?7F7jW1&sxa4aQ*RRhPXe$vfG34Ym-tCr$5(4{k59wc8-$+AFFxqv@|G=`XE&Ou z^qz;$sEL8(mN^wnaK0*>Yvg3=_%y^Uzwip|-M@zc%sPVE;`|y#Lwya?Z7X3XU#C@( zqYFKnPY2?F;vUVX;nAF=do<@_KX0IKwfiNz1J`;=l?yHw8O%TcGKSVbjx5AK3j9cp ze-!u$IzFAZ?Dng$H$+-Ync)7yz1@c0i5l}mKN#}4o zRlOwdXG!~3yYY`5%!%Lm@gcU&vpf67Eie5I?8B9{_R0?D0h_xTt2gV~z;Vau(=O%{ zi{@gZW(%T{DG;%I+sgSQ-$Y|XO7-69CJx+lZts7wP93r zieYQg#>~{szLVliwobZKaf3ebhWxK3zLC9u#%_6#xfhM|EBzjM_Dwb!>Y^K{)o7CD z*g$oHoKc7fb7ZEa?!_JU2FA!AL-U6C=6`+Hjxs*1dEfZ8JY}HzQkyE|MyH=RZp>Qa zIoe#4eK)x}G@4bYl3z2!C|9=;W8GHAdYFc_6DDNr4azpYzIyqwnZ9PGb?460xAF9q zLC$>Ma%V&KeT(``@HQ3txF5b!=;aQHp`rq@Y6bUAdZ$+4L)g<-t9!=|Uhr;t&|yqL zsv`QD=O;pPm3S&A)JNQo6D#LHKdR@&L2QOF$8V0mpP~P{5eK+oXh{1av*m_uI~F8H zu3KjBcNNN%8Nop_1B{~sV^UVkk6f_AY+FGeMecFW+j6}ozp07sA)p|*NGPj-u_~&r ziUp?EM}4-cfo?*=D&ecoYzpAF1FNRRgP;7M5CF|KJP;jTj-dNuGo4;4-MOp6r+*53 z`ZM9vKgCO`rk&rQ{zoZms-17ofgO(m+#BF&0QdHim=6N@F@9pg_nJ|(Ky3rK#fSHv!!H9-$H=37g!;{`c2DSDxu!) z;@>;T#%fO?jm)s9693**eeDu%xZb*}pzOw-1!qWH&z>#aK6v+#918OLKt9w)%^u36tcTb%(>zv@348?K$dBkg5XakL_ZN>xlZNJ2Qwf&f&4$1C}x_~+-1 zO~TExNpQ~IpFNl@r6b`($(C9B{OJ#+6$i7`>CCqt8U_SIc^ind;RmQuL>7OC&}g5>2vn%8@{ zrNyI4Z{u%OKfPCJY{{yj+-RZq>d{>}gpT02D0wpa_7S#8dWsYB4F^Sifq~*sU1qm5 z=&SYM=b=Rn<$;xXM8t~CNLzukaIHDMb_)2AJ%E&}()_#f6`EW}DH@i-Q8Lq^{EjIq z&x9yn|9{AZC}%BF52$(kPQrs@-n4>rfZ&)noh5pnx8c84ZNagoW8spn<2?c11K>RY zp2uI;^}?I!0rdek0m>k8N{l*(5Nh-nxcrXRJy22(sV+R#7SEdkR|KSoiqtPkJfbF( zN7PK=_ukAZ(8%UDyCMCzO5glu$1RoU7{^WHxZWH$4Y(F$gyfTAp;`PvbwCk4j_Lns0tqlcSQF^%UJ@#P#lgF7!ZsQ=8{V=t6 zwWdZot({hU_p>UF<5EW^4oR>d+-{;3VvHj`iV_Sws_g&PdyNFAuhvq{%SoJJxgo~6W^NBY@Nc&NgI`w*jcOJbe>C})XETm2fL zf0hWg>ssq1#MVI-LizGUs6w{!VVZd6f5a0eh2Ey0&QX<{)^QIg=$(z$k9I4hwz*io z$3TCtL8ioZLQK;3Ra=c`G6vO}VP^ZpFt4ytPKK)K&Ee~zAg1p->Wc8phD!a(j>8;{ zJ*K4ZUbSHL!c}Gj2a*c?S&cjNj(?O@@%9M zOo&T2u8)~MW2HGIS6JyjVY!p>=RWO!_BBr(+7-w5De+f517RLA5K_m&A2;#iF+c9% zteLAPB-{{}W?Ty@QD)osdi$8$ws-9`N1VyI%~V=k5TJY#UqKOskCAJas5IAaB=NvT zu9$cU{YEpuZ7C=Phrd}Cy+*wI;rO)+7q2wQkzB7aeKyx?%qY@pK+S(2N+YThdS?J9 zV@KB^O;6E+{!zm8_BOR8+bgR6FOApoEndMWXo3oAujLwbO9_LwJ}3$ zBj*C(XRUxc13xKt2F`^uFktjBldmjcCIG9aeRh&i3?IN5T2)T@%lvQP1dJlxZ( zDHP6wI++KPpv4yWtyRyT(3QjR_z_xnlY{igcPsMmEzdm2?y>G-u?62=ZRrL(Q9~`y zJ$|a_rE~Au%s@6g*CN;W?1a=J*Z44GwMtHc554&c&+XVse6G16pqr<8TrN(jCtMM0 z7Ptv*MBC&7&>^b$d}4g1Wt^3+XO-(7o%@|ERA` z_u5^m z(br+wB}qI)GRX?%roB^03lWeGuB(okFd7AZAFW_xdT@Bp8ec7Cl)H5u)r+-73e@P??5*1Krrt>Ht#?% zIxt#ut1Ffe(g2_H%I7PANNQMNOY#@Cgocn`T-#S~#I92`-))GoF z2V~EF>VWLoAHtA5`>8`m6>$1m1n>)(ZNK2DwmGNy#@%+=xeN$GqS{@`elt=~C*QU~Gi;gc212dz9GGzUIt z<@un+@cE`?3u{@KfMH~9gQO_DVe2kto zk`0aZMS4Y80~gr1!Zc|43CkU-W9XLO?2CeO?2mBqJ#S; zGPiQ`+&b-BRsr_8H?EKoVVE0=h&nWqeGL>@P2FP1hOSY0nLh*^6vF5R`=zA}Mz_M^ zKA-d~r!chfN?n<#_qI8`=SaGR4Ne}cCptKrTi2}DQ=$!0cEEE>PtE^HgnRGRor3KL zOWKVjq}{Mcuz8R->xJIb*5+8RdY}A=e!OEtUm;|FZ_4&P$)+vc(|hh7RL0ABOz>D^ zUze19W@tn&Di?NS?cTJ~Z({epPMw`iGuF@9u+Bhhas6^{@6uy%|KXXV4|*OhbN|4@ zqi+lsM(t@)rAZT3YTOd%70#w#hqQKNR)$(A3X6rgYa#@AR;YJLNo=xvU-+ zck<$%yd8JSAZ7e*ZR#!S9j|Ey^2Iyj(qg6`5g!sorp|Y(;+|vA+Ow5RJ=6G|`MGvk z$&MS`gmr7l+BFyG9-FnQhaNQKt=kg;|u5Swt%(M&A?Iw{Th1b_vZyWT_17 zHZ{0oIV53eSkOjbMiCf~vp5bAKqpVcd z?*1bkP5avmo3`(uA0<}R9EjW18!DSNx<}{!!<+XRoV?2w#IcHgy-nNSS})Z`BBylO zB>GjjCa%6Mv=pytKML&o9a3CsoSsy2c*xM{quf}{a(b5{@~HenYq|?(-TsV~ zA>*e>pQE2HG$Lz#k`8a=lhl;8tJ~X?Ptq;w_!upt-IbW6n>5#khL)ut^1nk8Q9e0c z3n!;i!Aik4p>Ss2>ls3;=ovyoMCwG%-s_Xp`D}$p(*6W}j^v-2H=m>Rf6dY5Pi>&g zdou-dv`3#K^&Ow1u|;$Ax_FLky7nlZqf|aeRSM@wNyi-Z8{WL{pyXW>%(nZA=O~8H z(YwMqiso~a%jf939a2%^Pt4J@QSN+>c$W(2=o;KkLNG^Jg>&?cK1Xd1*PJ*xQ_5Id zG)G-AM`MyR-T54?w#?CEt)b0xK1DsK(@IQHMSY4ki-@qR)~3W1O_2B(AfD?;Utu?r z|rESM*)k&6O>e`8KiKdhT>h3f`c@bz_5y)|p+$in!#=_XB( z_>2$JJ9VDIzZ0zT;;vXYQIRjD32`)p% zj~G3cryZ8>^kDBfop3Vg;2=|%9su`*$N=BY2OV(@N*c9G-(@gSL9#0pd zF=*Z5=@-MJ&IhXY>@#uXNYkP2!p4Lx(TT=gn>>eN=V>Mj)m;qBSYi~VA#cc$O#V}}wlGE99>2%es90TYbF zJT_**NZfWy6oD%1j?Czrt)X(NVng3)CXCje(~|AdqS8ktN~tw#u3QweQLm$YYyIx5 z4K2%e7_1juqHnF?Ct>5L>gc?d?1})W%^pB4)e3=lg`-O21{b}a;Dy%{Ci2%4Kzbzz zy*;y1vaM+O3&1O-60rJ93$894w)Y9m)_Mnx+*|Z_9F5#1*#_ywn(bbwoLC*C>iV@f z-F6*TIjFf{fr!&=cOjgujxyXMkJV=?tCQ@Egm#rz-arDpiZuSZ^;Vi~vz5jxTGlrwZ3pJyp17%fsypzC{Frnr^9RX{o3!u0{oNa%8BhBxZ&w ze+l{@W&`u`Ps;VZmoA(cwyS6JL2Wv8&K!2!Y`dBLcnYbaTx~o%DZyO@ZI~E!iua9m z_`Ra_vHLb8u@1_Gje_UpP`INSX!tpTS1;6u-I4@^7x!+0M`MBv%sPRU+0qybyu6M` zt$;Z+f1=W1qLA?03RbFtfer7-`l7mv>BM+}YEbXn5IlnoWbH*|Cfo*Q1(Hn<{f&u;|kE=CszL0Sit0=MjsIj9Tab+Bz}xFuROnC&x(^vwyocBZo$e^ z<@ziL-k4yJ&mY)N@>R4bv4;7-TesIH+O%g4@kt@=)bFrU+0xe%i%`!09@GH~$pUnj zTG&t*9jXR^+UY>FPdTp*=pYts|Ds^Td2K{#TQ}`Ty3XTyufhRWtEAk%ez@Mg&CYK> zB~LrVtb&)4&}*RwD^(?F(tt+;+SV3qm;Y&fDa`8TpH}O`to*DWX?8aBb#vr{f3NMP zN;9G#u&Oh5P&1){IFU7D6_@xopr4ljD=&|Z{b}XML(z1^mD&iKmDd!ive=n5MYixb zYD$%7#@uH=Pv1@r;-~>tnyM2^1+iarVwIKzfY@>;)?hMgz$z~lY*X9kX^(E&?Rzrk zW&F#zPvr-66v+j;?5!Dp){qewpS;?1X3%5zE`|}llU)K$)JSWnWRC2;rH4_@soAkx zJ@3U+mir^htB2?CK^<64at-~(;Oy=-a>(E<$*!iporHneXFX0B-{+iuvKG%vtTxLz zXSSqfUco`&z9G-BeapJ7Y1_O!5=p2Xv#7HmVunnPnvRr4qLsjO*1cV)eJU+XRm z6IoTJHp3eqU%u%^JZQ{q>fSqNXxW*E+15$>A6=*X{WjDdVPiFp_j#C|5tEo^nvgB{ zxqAn@8vBh;KKc0EnIrKrQ+;F1yEBCZU)Q){#-CZ~`jDFF8&n!Z|1hTRNu(HZi3@RteV^IkvWMzD!JK?t!j1p zwSLRNM{}Q@z4;KM(FuM5A1`-4V|Q8mEN`Q$nw4^1#H%J$3di^c3F+s2-V2RIwuYVN zCkf5Pl8HJauq9$hXV?^M5jOYX@B)w+a>(w=^?1TGC)5p7r;n9wO}Oc^_c4U;_9j4^f?Fx=63{iN7XbE=OJGj+wZ0E3TD zpu3m%s`XP$p8SmSe~p6_{qW?i7VXY6)fr5|o;RWHf6wdeGO zG9)DB=t^@oc_P_;&}c-&Bn3`h?Pg@w_1V|V)-3O9c%c88^o)($H=2-&>-LbyZ4Y&=V3!sy#j4;vb; zbvq)}*1Dae=nK|#GSB9w)=l|UwXLZ+TvhF8=k;DU01;e{9bv0ie;h~^gw|PX#*q{ ztF%0#(^u5+@CVtZ;^7{F;9hE&H#~!0gy`;vhi_W#Tg=;I;g>y|mJhnanrf;%V z;F-0u@Z3Ak#+kL!d1hTW&#iTyovVQ5Haf@S!SOzS@XNY@-wxMpoU3qlS(m43poLvq z_9fV*TIZ}2!0l#`c z#+Gm{SqE_G^ucBkqPzIdojQ}t!DCOh6Fi3MEJj&atQ@Lyxc9O3Lq4ri*-nye?Rgds zee-O>%knu5sTTMP1$(a7ZNkrS_ClYkYc1S0*w2}}a?biB zm^)LJvlgmzw*0Jm_YF7;eJ*XcFxHfYbIzK8u~abDTXW-#@t<$6+9WjLY)uDOb3WLl zP1l+FMrUdln3~MK0aFyIb9K_fRey@)Y-y*lT+4I5TF`n-9j&)8wkgkMH?7yFjv_g4 z%XQv%(<8oIZFKJT@#SjLnt?rv1b@-jf%AwnNRdy~3li&e7TkZRn8_w z>U+ zRof=19xD?9HyIz@eM#Ttx@7bkJ8sG(Pb8U*IlYc-u(8xB7%O1wTCc>d^&8e~K&OHJ zQ@}I2l=~7L|CK>gHJz9o2RtVRn2-@vCM0akFiyc-+if__*0)Z4COr)3DjI z{l)K@#jN?qduHrAym0bp&#hzD2QO2#)98}1jl^bau_qoKw>wHvfByMfm{qQPhc4wi zE0MlFizgf9^Bu+x?i6gE;WB*I)ZRim9%YQi9=V^Qg;U~+6GAs}NwTnQY4n;n&co;WRh`kWxM6B~furs2KPh^UCws|@?S6Z?*F@%C~@ zQsI~jmZ`I4N%=qA$F1}ki126PT8Re_T##52eSKUTVX44(cnga04(z?)GJUH5WMk;m zg$t*dC-)P=)~=ZyYdo8jc`C}hTdNDaFDObIYrUJEfZXbv$B!Li+&8>A6h`GBUO`?l zv8r$(J3^_LGc-<%PFkOMXLE+$D0715hK3njqJ7fVtcq9|X*yCmd}jE(*~S?&7ep?c zw{XECbFQXvtS4Z*-!41N^@bd~2P-sJMjEfvT1I-**vam$JbiN^m0;-?FiR5(KdtX6 zTUjXn^TTrW_e9IvyNUG*Mxl>uk#W#Khb-S!|BeIv10o-*^|K`H2h7NSKIm8c?jP2c zS4+PtpnwVaA8-6IS1tCu<32>iERtjSLrRwAlAaJBy~Vg}$-LQ1&GBc2h0~`m2sS!T zm^^NhJ}L|M@lk;sv*-}{AGW@B=|GN69359&H|_GyG+y7Ic5bOtm1^M4o_V zJ^HTDRh-ml(CpA&5asbTE;?g<@`jD}9fqr=IFfk?<0njpxaS=jm9T8V@`#n@R2qOK zHHM86<^;|O2{QCs=XNMPdBf%;?4aSpkT2L4E(TFYtaIonjzx?RvdOo?XVO}1###-l zj-@=~We~N(XJfmAqE1kUyVieN4d$1+cE~ScJZbX=I1k0sR6Y5T5K&)T#%l0<8kInz zo!E}Gbg6~V-tcFk)Dlu6X%GgAJ&Ruce*=>9AQeteM zxbBeKxOyY?2hPdJ8o-|M!UvodX!fVY>c(Uvu#sN*!^g!KkGX0rjE zp!s6taUP$HyVS&`nOs#9)}6m%iUeL>f^DuuA^CR7LDA{CfaGi6vgd6il=VZ|G4aK7 zp@oP%xF};Xw&OdyA0D;dcZzC2=6kFSQ63G>`pwxn)PKBb{UBk*hL~k>#+@6zx`vzC z5OG%M)Cr!3uABN?zw`7aePe3osPqkXa(6L~35nmbe8H0Wk+?Peq#nFNhFqN8`eB&0 z)p8iR9M@06g*XXE@RKl(pM>j|Cm6S`E(Fo<0d&7I_HG# zzWs39)%1z6wWCac8@y!t;x&fIWy_Z>Hia*Z439G2JaXVlRCv_PNb`O%@(54kzbGU) z0(su5KImXE=C?+vAVMi)-jY);uaBFPCPqeZ6Ui*#K_#o9kX#MgS{dC+0DP0>YS5Ke4 zd2vWq$JSjs{n~E#&~xTkXmPj4dbkXAA3n_4XH!bnmdstS3X$;|h2>hGcu7NF*=S~D zlh`xpl(02*-M*uSO|#;r#+uF_A9|=wH({;U_(&(ClT)bQc=OO z`!yPW&yK3RuK!Ygb6fIR;1%HoRY>buL2ZQR;@r9eTQ(T|R^792!-0q^_VlB;>Kg24 ztcDoAE__|gCm1})x!-}42kE4r-Fj`kJmqEn_sU(oPtIg9tS^7pIkcO=YKdWZJEN8; zXS%VvQ0&Q5wh*49ttqZJz$>9PKxO1Xj>I!Pc2euI1`|hmjqn_5KS!LpYx>UVJ10;B zi^Z+}krRih!9D96NTBxx1t}}AhWd!}V$8m#(Y^T64m1B5-|Y`-}^;l2ZAmBX(SB5M$FwGn+|JbrY;z9Z%V zrv!KRao*4ej6VE&Hl`*pzrFPp+@9tlQ^d#^@61z%Cx_2nSYvvI_eUoBxdpk*K0)Wp z#m|fhUh8w}SUJzc@f!y(UHiIRH_;DM_FWMBz9MUGU}cWAeG+2AA$3w*`})x0U9lM( z?QPR*+@+`2soh;~Kf6)d6+BJguhmup#P+iT9fa$6rFfuF#m#f%5Tk#<;$kb3eJ5KWbBop}rDgIl%H@mG(rSHp)7RN(5xF{$hV1fOXm%?b#?Pr123BW4~zp^kx z_04S#jxmj5_K+bFjIeU%D!4J&%iG+lqF~F*;|q>%IGk-i@RY~I@xCsz?WvMBY+2Z{ zkflKw5iCvfk;6x*slGUCzm>Jy()4-L=1)UD#V)f$`{V3e;5XlIen6S2;x98Xfgi-6 zwnH6%8~;{KO)>uOk(X9*l`h7~(vJUT} zy3cTe-GV4=LoeVEF;bk98Xg06tOr{JK|BO6^==hen=EC1#F7I-rWi3HVv;bKB9)a` z&@SQ{zMKz0n-;lC=pbfO1QZKHSOgBc@%XzM{6Hhx&6+k^xG0A9Za-`4DEu*)%>oZu zGz%YTBL03Y?#AEe#N}B+M=|oSpc|!UTzGZ<=>==;i`O=gB~L2+Ypx}B^&K#-t#Kc% zQqHD$-~sOH;+m&0{nb`_ixKl8BA`@ny{nRmnM7CiYp2;EU7-*8wV<}}7A?#Wwuw~w z-2p0{XgC!f7$APv_aw zMuG9)3QB?TEPNp;;+rSwk21_hMIa3n7e+_K%wG%F2fpVvMs($RUs`>iys`D}MDjrc zCDT%*Ka+dF)-MDGO$_lcwsSi5jygX?@aos8>nuCVq%4wXaVu*^{_E+5RBj6k_c$_{;GP+8zA_Ltxl#WmxRw z!#51n0{K5)t~F8LAjNB!>yG{_*F47-f~<|KK`3r|&DczY^d0@>mA^@jwd^9V4lLTY zA$u3TBQGxxKi8S|FSIEermpr~<$=!#gB^DF!H8N!MciB{KC$3B@E^j(|DEhYj zasCm(1N=pJdSJ3gY#Fi#Goi1wU4GWPv;j8cbYDp)S89GX>LhE{X~h|8!T)OBX(K|) z)N!msJ(rMf4^u)q*Vq5;!xG6W9IuXsQ-FOPpE*ou)Uo_@dt3HrXug9r8?U9~Df!T@ zFu?tn0v8TZg+tKqCnfndIdTQa_<}#Xs#;&XfO3&!vNy|rlAy}B>+bKGYm)ywsoLg` zJt^(FMvbn?`}WgFpv$+dvT6M<61^$-Qz=HPWToR-Sr9kuKdI6g_O_@VubuJ=Gw9LD zd3Z3Ok}n}SLpzAXkC8WA`y@w02eV%3BxzONEAmkN5%@Er{vru9^xP^qoI!l-Mt3azO~5L znuFB+q5Ns!%yaWj(a;Nav?-4cafDYEeHb-mH@m8o4TPIOcm;$fy2_4|)*PRKP9bH# zf?P$Ll<$DOr(n`&2SKaTO{KShbv+$>B;7J{;TXA(z`5y=LXSw6{x%>t9R4{VTk#_H zKL+=v!+#7eNd@Jws>^yJ{YI>(1mYnG%a5JR{~GEuY;<3w7%u9^$-@`U*-_+mDve&; z3QOnuJNlv+|FZ+|Z-oK>vjgyNg%#o7xA5HioSoK%^ZZ;_>z!lCXt-fFn42?mtq~1n zLmsb`JotM2mdhNdcXQ;VaA-xi5b6NC5i+2;Q6`m|J4sQ_zSiDa7^5#?{4Papzo|{ApHPLB;HQhn2?g}8Smoa={3$} zKOCA2(5WswEX}%|U}aNzYh_cZ z+eu4n)hw92E$Hgy{Y98m=L@~b>N*$%5H#7N8!1k_NyUlv=&mDD=(WP>K$vYFqQ`%` zhWTjGoV8#MEioUogq>0JuGpqgqGqi6#_pQ-og8}&H;@N#`>!X+BQwc>>vbkG9Ax!` z`*1zej8IzHzLBVtlFK|x-$jrnl&y8dEA$<%w+`$(JpRy%JjF&(Yccy)PxPWodNqb_ z@s-6_?9wp`BVR&}_)d~zqa=CcWxf(Bpz3T<^}v@fI-`0Vss~<{4zVcyE6VZ&Q$0H>vx0J7qr0cXN@}v@5nGrtC=r<>3^J4R1N`Y_{b5|(nfwL~C8DuY8I!ne^Ew0mVFS}m1+kQhs4!5Cj zU#hEI+IJu`3ECt%y5-Tsqw|cfuit`-yG+ZRDy;?#=`@I|gWR&l4cOn@Sfg|6s%Cj; z^-~UydAj#;)KfW;ffw40C(=gs=;b`jvG>UIGega?8&sNB%Aj#Oc4sFhXJ@2258P@V z>h3gln9=t3jCPj)qq_KQu2>TMBn#y!NPIN~-r+_jE>MQQJF3SU+Fdt_wHHDBL%=hl&}P9tMY zE_ED#Yd^Ql3T=Y2W<&DoMB~LReVRGX8a-`{dEbPgiQSCMTo=h9zWe!Vj|cd&%h5cf z()h9SE%sfXK|Zd-&9;?TgS`Cso7Nt9{A)%V#iyk(D>5d0t&!|@zNViN%$umrTxzq4 zs+W1SX8nPE#?>ps!9TvhTkhfNyLtRcAL~5iYQw$ z!GF!`u63}s(I&X8wpv_qs*MK6Q$=Lw3y|_D26;%fp4)V4%f&Ja#f9w_by?UcfhCk< z$w2jmzh1x->vNwpobm`yqB&yJ1!2Taw;cGo{PqG~OUk{yovN{_tzb^IYH12?FVI|Z zHK>1y2i1j~6Hnj)))cuL8a!oHV5F@DFCWie65DQeGRhU1JwJ zc4IEa7-bKSc>njz9f(GgPyK#h|KID&@t&QXotd5TJkPY9XP$^ropfWGD@`$~l~0uB z`?FOj+^yL4w^=z`K4!Q4u`;g_*0AML<|8;?u%9X8Cps@zFU~VNu+IpJ=3@KYR+YKv z9|4b{6gzi{GH;Sf8$af;>G&<0jWo1|-n1pAIl7-#Y}vZb`kxiTT z`X!uG4o!$nj_~dozwz;M^bTH*St*}fE+1csUHu-W&P*itk%?~d+{tt2dC9HpX5!D+ zbP0p4*)zT5HdqA-Fo)q+8D9ytF}H!zr2q(W)o+Jxo%8LYYTB_z??CS=b+(@BoM(*`OTe(c~~!VE4#^4r%uKP7RBVq2Xuw$ zkhnsgp_5b1%MWIn>&dm0rb-X+)f2>Dt*{@=spb_ZM7>_#Yg(4nPK1{}IF#T8@>yiodfE+CzFsXIe6BjKf*s(8??BxA) zfxJ`1_g{AS+y&o`aF`+f$6o&7qU?I{2byv6l&m>*N|Xo59=aAC58S8G3Y+Y5nymK9Kt7>GGE>oi}j?%NcQ}0)75v_lTYEaTVmO`W-pIasb^7jEvSlT%a&Pb%f1<~X~yot4_(*PG_hm8Qj_yxz1~ zXI_vuOF7lFc&43sfoT?=ZoG^&c04ToyAImhHpxZJo0NIpAv$iG@RyW`Vu~7 z+vR=9f~d5=uQtuLCTQbooxH#_Q#mtl@l-o`LEcQH$JFN%PmsxA>Z8M$=zDWf`Fnh$ zeL*MB&zq5?$C-&USO7cgE0-Zb%kZJ4X#}WZrfK6;Ro)0Qs*|S&V^R@Bvl+A9GE$Rn zcLftKHXoDitU(|rE{@x0I(Um-+-I78L(HY7N4mU&dDBe??Yif^(3vi(j-6AQ^72mD zHSYj2xioJ7l`K;kc;9cDb`#z+ba~TE2TWa6Uzi;+GHzxrrk<=CduPbC0k`Tzcy0?` z9kjH>n?;^irN3yz_xU2VY)4DQo;p zMeQ!7>}u1(D|SlqxH#YRk;)aDRvtX)bvyBB&>7!u=@aISU!&HZ9QVjH?GgRa6o9sD z99uG|EI)%Fc&0R{AQzu0<(}r*x(>2?C)w$Utj&~lN%~`E-4PrrVs`3ib_e&ck45*= zS905j)=xxXH#tAl$f9{K6f0!Ojkd`eWpS(!Fpr=AJk)$7x7kh{d2mep87e6r?Av#G zU&7{QQ~bvDQEpi>EGaH!P>-pYF5Ye0wUgdECdvbIhv2Wea!h;e)D%KV@9o5 zz46;MduRG-uU^pOq)Zg^Ri?;;-OZPW;Hy-ozk}U{$=`@_7?gHosi3lhDQ)6GhQQf0 zforfhrmDxluS^nbz5GBrJtXc>dm7s=zqp5er9iA zH#gYZtFX75Z=;J8N^2p8txYit)5{!+PJ#BSiEY4f#kltpn$2m@3}Vwelm@k4eVAIW zt0rtfr8vQdDfJSuvp4I8=D6l6doKjkG7+lb@aC(g%O|KjT%IS&cTJad_m65KM-7CA zMW*xPswrdltKC$dcJ#qfQGQ~|z+TUNCyw;pVAJ$5;E3NsxvXwAE8f8a2MrpH0{mtz z^irVMpd$?Zh!+?!m@e$VTd_ThqGRaA;<;8?f0b#3(H^353k)he>+5WaayK8s+K~1t zHn!2%w?wO!qb=*w4{!Bru8JDep;H?#?FIcxl+Ev^3%4}6q1Zk&S8gEw49)*Ikq;*o zT+&>?VQxdjt)>entNFJ&=Ytt81=(ctz@Y-Xl#4Tcoc)>ZQ@`=@lbW~oN}b5 z3F0ZC(pn2Ro|W%9(>3gJN-NM_(C36cw-feYC(75{`mE3GqT9G=Db`)x(lVBY9rfO` zd#na)8+{^2vZE?`_6!-0@2ybk6Hw?AOh0jrGP(UO)9LaGF}I&$freGVLbL!%)8*Cr z+|W##h7~w15_D&0{=t9A1Eaj7N37mB)32SX^~8-hzf{YMlpO&mJD~R2F@L#TQOKA} z5^-F2SGdg9a1t2G^hT~XW%bqPqBW-Dtb4*Ua>M#+a%)42L)qKn_1xNZHC!FP{~hsS z?ukN2IE?q5(@S}M(aH7ay)yc(FF)H?Yo&^HP`J)sZ6k`P4K~H<0}lIPbCz!PVk=Q3 z6%a*k>)kk1BZD2NA$#Vw&OcA1Yy0jvQ*|K*GOL#kPacqxJZMn<$*WpUMl!|qdHtaHP1if&jl+fMI zt9u5jTi%{~yrqW6-&EctrsYQHDyvRmWOJS!fms?iCvo#54`D~!$p=NbGm51mBC=Cn zQJKThpy%IcP1}qCa#zJXzD$h}a@PQ(>yuX)lbN<*@57z7-yb^R_5HAK6XKJG#3rvCp5{Aq*7TX);}ZuD zj~IynjrLQy&I3`dX3Eyh9y4?7Sg*d(@m(hS&giC;9lkz#?3~wfe5Sery(OKVLamV) zX-P;Kh4_+}SI;nqL{K{cmM@jk`xTU~t5Zt~QwiaSC zX*X0SiH!~UN|S8t8goaiT3CC9G{T5V#I1cImBbrYPbzu zo*Zj)%hq4jZ~v2WptJfjx!Hd@Pvxrq@Mm=coz*YS4f~6;Rj%sqeWWDlto|4Njt>r3 z$<-a9p{6gyP}7CNo6JG8{0Oy3Q#Cg%TISAYC#dzYouHQX{sc7;Guw;q8Y;g89nQ#| zik;_aGno*y2A6+_^QyOY{7kj9f-}`vFlc<1CtnlgR=FeFLjcJHM|R4qFNu+0FLu1z z5WVTbFZ!19DSV#mlUoD3&o5x}dHQ_rm!G&6DPML=&-Y$!^9;RQRKF*;F1Crk!WlR< za3*BZ1je`Qpxy~bAYyjuGF7rYHosI;H8V%`!BlEd{W;U+33}^JaGMtXf&j7>hX7j- z_03eZDGUFm%g3<)gTA>U?$6!xH5R-359s5auYLa!Qg(=)^E=_lt;^!G+|WMyfpVm7 z_mrg{A7KopOJFDeB0j#G+ciqw;+Bq-VB>Z{CJ*r=eEPPLv2MFHFVODLnlG~dF^f!N7F}7iZ_(UE+ZL(J5sU2L zGGfv7MTg+BYmwRvt7khn;%L#+Zp0)IN@|lt@*O!& z?P)XGmu?cu3$eli;f7dNY$1k;eZ|G%WieZ!Rdi9rD8?(MC^jn2C>|@-%5uua${xz8 z$~DRj%Ac_!TU1p-)kxJ+)mt@2HCeUHPGzUH^R=sG_l;eqx~#f}Iz-(|9jX3GJzu?8 zy+?i6-pjt6eGB`g_M7a}?RVJkwLfHkLL+IsG&pHbQ%*BTGgLE8b6)dQ^G0KqG*WS? zq7*FEmYPVRQlyk5jgcluhoq}gw)C@PlKyb;a`1HsbO>>1>d?)hw?l%%GKcRSG8|4g zTyePPU~=?vEa%wKv8Q8S$9Tu_j_VwMaJ=ex-|=V1-yAJkg;uTAYAa}~X&Y)=YTIkW zw7s+u+A-RR+F9DU+GW~rwHvfswP&>#wKud+v_>bTldsbkP8FSkooYC>ck1aB?Udk@ z>@?hIw9|N}DNb{omO7<5?Q}ZrblvHe(_^Qfoy^W!XIJM^&efbloSQkfa_;RM;~ejt z>^#(YwDWA|Z=BaUZ*|`9e9rl@bC&Zn=U2{eT?7}6i>r&5OEH(SF4bI`xU_NU=o0P{ z=Q7k~g3An-xh~6HHn{9^$#gm6a>?a}OSa1+mtS0RUH)(tTs5w)t{$#FuEkx;x>j(l z>{`dQnQLp;FxNh=ajq$@!(B(aPWWdO9u#ci=XyFMc`vq%+Kv~*fpv8r6~hUD_e^(m z{7Ae{ooy${@d(1Sfx6?Xa;Jt_IDRf)pQQFm9a->uudg$tY@PQ?B&CmzdKk`+dI-Z& z4?S=OfRrgOz!8Q|O3Fbue_WTb&-b`|5c=dt1Sw@lRh+q^a`@o5(b3*!Rd05ZRQcz! zK`y>;V~VDxH})Quz$T)2KWXfWbzd#>{^jI_oRfa?ccvxiqnWkl87V!JLkIW7G4@mU zOv;?JYk)k%(_fXHH)3SGGIU@>Ot|;x(X;1{^OFi6%kMWW@ou>F^+pKd%o!K40;X+Lqp2NzDMI)do}79)vjHi z?I%xX>^i*3*X_#V{kk?AW7hxRb#m9{1N%3`c4-$K9+?1Dhxp*Xr_OBmGVF=0d39M< zpNlvUvCbE}oUdHW*mv}f*KgJL)F@_XZdQb?=$jtRKE-)fH?Db`N?uysPB{gWocDGO zYE`3MXS3*sFQZQD*!i@N^#|pJN~7wzc_G`5Y9{ix%2(^IUy-$5vbypvvkN*7z76%* zTp_Q+5oJ1!zqwv~w?RD600u)E&uYJQZ|BrznZ5#B!Y(u~U& zye7(zl$e_N!u%+)NnA(*docIX>`QYlE|nj7;u8o76L|~&Qjw5UaFoOz>|2o9>ihPO zi;7u4bR%ZE+%@LvkBiFz_s(Wy?DGB0G360%SVJ?A%b`mC8=tG`*dc$N32l|y2?$Hm3@$qhhh>jw5)+Q++C znLu-0!_ijPuU$Ct_*CSs=CS=p3>o5gf9amxncm;67(Z-oI^ZFHN z6*gNXgT(Y!d;`4|%L?hOsL%CQY-4&WB%7x3iGR|_C9Uiqu>k7TT3|aO#3*n*|U_O^9cw(d9qtFTQ~SaiIo!ipnQ(nRR{ z<9HS8p$*S)XhRkbZFq)58?v@)wA(gT(@46Y!(q3#W-MO5(Kq>^a`cd)UckG7FOw7+?x?Ptyp*j~v4aPV?KELrnCC;4G+JJ!`~rs{n3oOdIikm~?%=C^Gxto} z>xKFWA#SppHb$P{Y*8{)E{eN{EDUX#W>N>{lyl~~f z?Muhf!)gwmHe}imzfL`ReHrI%9&4TqCFkL5_w>2uEjP!+Vq1Bo>=E+BtTua8z}`ij zS^Z<%C)sZ+>%SWwzREY++(Ie2owcb4 zegyTvXPJ87M=>~-i>n8QIDR14y)I9?O@DkL_rd2hbL6YK(D;ngKkmMMjwNo?^ik7B z`GxlGH6p>=Jl;H07qM8yxK2 z7fFL&Z$5fEaO}EQ`q0%0aRZ0O48%E&zB8ud)2fNl34?n=m&1;r2XgWaxfc{!oX%;= z6j>yH%N1EbaYWIVH)OYS(R*91;fgFCZ#;PVuGiycC(KZiFbs+;4ndJcMn>vp@5~MT zyS44r)?CtWB-dx*jMb(lox*B$>alqbG#9*AfM-?gFKyw6E8%1r5N4mN*r`$e8TR0+ z3pf3KQpTpXdP(<2cG>-0_V>Cx;{2dY-?oF4E4s~V*2&8(MU)ISD}1$i6QPv)b#G(XAc$)5O+t!!by*X?b;sI`>6-_w=;u3i8pgOYwxl0E|D9S2!x`}YDoL(8 z{ee8}m>l+iVoq2P<&X!u-SRLd>)D|kdQ}GYaBah=`)pf~L8sE_aFp?DkB`$jnzuBX zjKk$GsalzTRLUJxavW9y0^}KT&C-v}El}{6WqbYBCfJ~W$wiDYBy)IPkHW`I74$*) zIYiQqpojAO+j7|_RQ?fqAyU3&dLhEO?hZ#Irtnn_Pe3ok#BoEg^R2p49@biKzN)HW zzPKY+`OVIi^O-)6sD_oTx*~R=#K-&2Ei^My4l^S%QAtnRjn+#{u{BCa{}m2CBsiCq zN;@9km5=;}W6=AtkEz4 zFI1bb1@?w2^)CCab?)eqvxa!L>(sMNUo1yT?4WAXSV?a3rCxH~EQ_G`d!|PB=;oL5 zsFzp^L`SZM5xWW7%5E+0ViRVK04zwhHM^ayE)&07rp3A=Yr9u5`?N4utr9wL-+kHV ztXvfuUBEOyJ&-mofj0Y$!rJW7QYE1HTVf5UD!!kx!$G47SmXjSUt{gESc|^*9!M@VG zp~Ge;|)hhT_t6tZBF0sb-ZUrvye8unhjW%^vzIgt5!#$8aaOV7S^!3hIr+XIYZKttGri!K(I-D#ur0<&L8Yy1?aPEz7u6k|b z=i5s8{oP|D_a=VtCtcgNcgr5{)YPf?EK-`4pqI+#@9xQxE8ttfX7U`}lP7m%w|iao zhg34uFuPSd)a{DjK`gFsSw665?cOayV}`HWeRJ2@qnJr)Y4+B&J=i0WC3zGJU6<1t^uPPeumZ!2K}5`ubWg1*T%jE9@70%zJz95{7;rGI0S^bTlv<34<8wM{Q6f-EU|A3XycPru8g++Rrsa|qhXO%HCz06-&qmL z^Go)AteQFhGX=-?MRD&eX zQ7yTwG|y3Kp>9x)eIt$C-_E<2O!d;??KQ7@@7}le!dAbI>B`6YPOX4zf1*nwx z@$wt5LrhJ?!2U7))(rdJcjin?&`pbp?%Xs%Ety+m!L2OLr-c>`=wDzOI(BRsye_7D zzg`ii^tQ7A@^xcLd}_EyFE%wS;iNNnd;`)^iL5>v%?*IQDVujUmS)j)}F z(eN!QJ5FRKzWtmI_Tk;q0*+`(Rnv5;39@3a|a-VaHnc7(;<=8#6V~63*EKTEcbfR(-Q( z&5$K2i76>bgVIK=f;bUW+70ZW5s2m$pzT59hvA?RiG4J-8eina4Gxb=O4~ThPun@- zb_4HT-3K;_^22D&PA}b0f)L2x7`W?a+txry*HO%$?}rthvn%%46%yk zE-xciPKCkBEFTFZfR*3B4OaG_1L}m;3&%84iq{XTqrZeDkGfcH6|P5Cm!F2^Z9yHg zdj1qx-T%w5ycKKwO?XC6p8}(?&tV3_F#5A69c@=;ugd9>(d55_DG2`wFd8omM(ckC z&IgPa^1T~{JJo2AL4)JC@_c4U>co+DP!`H@-j3@sMa9(Eo{3(FP8K38a z^E>1D&%*MGm@QdW6p{@#`M_iZ9S*20*MVPcNT-gZNP+BN^5YW_9Z5WwD@?ZhYan7N zgmwN55GR*aah995>nj>(Vc5py7n5P1fY2234YCag1}fX^61y^a_iv*d;`kIGLzx`S z2bZNxo_-FHvrN|JLvSOdnT%%go6G6Pq$sC>){yVzfoec6)KynY?mqK;B-!?+eRoD~KA`w{QyrVt|r> zR*>K?1~TFv{N1wrLQTXK*WbCnE2KxhKU_-y`SCro#%1}5`+GsU+WZmjFNQRx*ZF%t z^mm1{DexzeB2=4^$%pt~Y2EqQ~_zZDZL> ze#d*;kk0(Nh76+TNq0a?e};^&4O&b^KLMcYA$y0B7D56kEjA6Ay zW*Uw1>l?MVD+IH|_%@d#TQ_7u1` zBh|=7QVZ^S8cPgh6NBXp4dwQ_=w}7e{_xMj4gekXC)LRd+Zv`siRU*-8#2<84)^`Q z55Ohh5s(AiL^yX`y8*F;5O+WYlm==OVtH=E16&^gCb+Xd^!~Zunz%NCyAjBNy%o>| z@BzvI6i@)E#zD>Iu6y^@jNc{Q_nHEeCf4HNf7Mwuik7 z?E*6zd@azCbQJ9K=|Y%`>0+2m=n}Z6(o~qs>2kPy2PsGCA$k~QCe4KVNqUk{;gRqN z<_iJ5CA<~`i6{n%LCC8>MBF}Aa}e_@4mzzCH3An#k-Wmj@W}{9ElTgA#Nz`B9J29L{I!k zF;aq*3=bcWLT+;NL1cJx6nW0gmywb214#}usn9neF`jC<=^mXF9!b5pS#m&ZOgOE` z&ESN=@kz8MH|rA}?wC4{Vh4UcSlrm2$47s10Vfni_7mnvUGgOaP1(OceYZ0_2)k%HQjC3H~ zNCfFmlE?@$iOeDk!7ppcX0nqUB*)2la*f<2PY@r{FTO*raaEW&9Z~pVc@)4m<*hC> z*qUGZ)*3=!sX_=yX6v;&e=Z7Dg=RuGn_GnKy3}^vZo8hhUC-LCEdMO7{QC#idy(aq zrLL?s4PssERaxKau53Z5G7TwrKr7V_&on4$58@-1Bmy`M(nH8WSV4FzmL`IzDCDC& z_YuH-Kmx!=#gBaWb00q3hZoE|(HA~6yqpAOb!A<=yAe-^&RTZLs&FxI7Z2D1ke1S@ zi<*$uZAchuVgMOJ#*(i|DrzB}>?N$e6_9O$2>-A_?$~UQaA;wf+sFd9wFS1*1-9IL z8;Xgg4Iv=ySS$i+!+}XV;VqMVyd)J&?pfbJk!PF#E(LDv{nj`N-pZsJ!iu1bvA`Tw z8vx>0>_*SHo6ue8A@me_3B83rLbwniL<-SDjL=tzf{%sp(Mo77v=Q10?S%G12ce@7 zDs&RUgswto0kT#x4dub&o(9Y>h&$h9X(1Ouk*fF_zR*Gyq+kxw3vt2#Aznxj5`}@n zAR$Re7E*-4!VqDoFiaROj1ayQMhc^Z(ZU#EtT0X(FH8`=5+(|hFb^V#IY=LR8A4?t zNC+0HfO4w|)rA^DZJ~}(Q>XgYKle=x(})?xp+aetLi&q=ztz0p>u+s_4xfrbp;edJHYj5A--aAxy z_(QOWR1`&}XeZiZJ;G7ciA6+jQ7`(5#l#X~DY1q)rjiZl(;p`n(4%_U3!N;#a(yMdZ18` z-oWG4+5$!iOj1DlF-d{3S$VN44frIlf=@ZW{!3*mR>ONl!6dvx zznXQ&N-~p6AS&cAJ0ucXK2DdcZ^NZGdMN(r&y+-OHUJcAVCBt!-r)VJ=-+uEjJNPw z$U)3+g*?QLmxu~cC8|Y@=ped_9_V5Dh`yq~SX?YAmc|#k0b+Tvq6n#nanogrJ}EWR zJfaaWJ*6G1%Vs6t$#b;c)+ihw~9C{Oh?u>6F2{Dp9mLkat6fy)6Yki2D)i z|3Ws#q1VUKRUAJ;b!ZPLq~stj30QA|^;D90Pny+EG58Izx$1F8(N8RmcBCwFrQ!ZO zdCVnv4r}oEYVi~_Do7k^RfTb-8Y9hk)UJjkpoSetB5K(kV^9xJ(;(Eg z7fC{m`;cVRx-UsV&HIzVsQuz(2q>T=844;WO@@II%97!rh5#}G6j7dh396__Mv4Z| z273IE1U@LMGN_{~^eVkZuhT4ggWjaK=xs(ZoL(p?&nWkktsh!G-U9wh)Cr1Xt*Zuo z{|z6E1^m$yz#ql}>}nkgym!g(@2lgYk`hQ|ZdQ*EPl_XTx!Ec{E^gtZ4DvSrk5=7K^)O;_z=)c05^MKn{SRH)yU+*W?_<~T zw)_9&bt&nDaq0#1yl*3i56Cmj@4O~&!F(#}KwZ(>_615}Y-*rYX>HmNI}6&-P}+_5 z!MJn)O`^l-X!;eMhTj~xEyQ?q6~>{P(R0{~p22bSHZFl;@6t!)G+LSmvMY@ zX3_-aLc4J@otx9RIhdQ@b8`_h$rEnh#?4gj@{-$kb8{6p*KzYJZjR?>g0KbgM{@fL zZVuq)LvHrtW?OFZbkZg~Z4ZQ-2vv)x(8TRExV zs*I=Xk5XS|Vs4U|x43zRo8NJB3p0aW1+%AE_u$;U7;Yb;KAD1k(0sBK^DJvIr#PQv zpht8NBbWD7{3#kPpkR{8Xc*?Fsd&yu6x;{2?OTYB+YoAbYk7b)KEb>gr6M;yx#`MG z@|v4HxJxj%cegx+`yv*K`f!)0{AqpeQjD8^HlNIo3y=RfH?MM^F8t{|?z1&F-TBi@ zZeHW&OYY|vZr^%Pr_d zRqj=}FJf@O+ytWaM(EO* zYbsvQkFJk7$yR79!bmU3_x?P7&>H4ynQ84eb>#L^-1OpRcW(MI6XBV8ox6l`dsA)> z<1W>iX&4!Jji-XQ7U-K0@*Mb|xUzRJ-eT`#*Sr6PYYtjs#?$C+{Iw(|3z>u{i+Bx4UNd$nKSzsI_Vzb%46Mx`{dz``G%alhh;C zlhkw6OV!`0cd9R_uc=?!YwSzf*R>C`PqH6tKg&MVeuMpP`{VXk>>t>_w11~@z}~j9 znyQ*cnhu&ingq>A>~CAFS*zKuIjA|Qxum(Rc>;Y??<5DwODZc>l^RJMq#oGmHbq(? zZI@0<7o=;_ZRvsZOnM=`mfkuL2bF_^gR6rlcD|K#2yiesL_4H7jCYvhu)<-t!zBl! zqsr0Wv8H3FV}j#I$7zm>9oIT;cRcQR#qp+Nw&N2=qvI<_ljA$=f7584wH{g@ZEq*!1u2)=dx@NmRaW%TWay7ZB+}z!YyBXZ-y0voacYo=g!%x`o1t6b(a$5nW30zQk93dI9=APm zig*^OSfo*r&P93@>0e}6k!eL%7dcwwS&?_1?w($r{+^{ht9#bfzWb^ z@P<4d&tcpdahJnWaTdP6LMl?>8Vc915a+;;-k=~w@g9~YKcpuBt^J27VDZ0%yEBhJ z2X_x}r^c#YIi$kFl8JEN*-}#$(%cX0HY&uIZA+~YE}6FH*4$;`&fk_-56gDk8E{t_ zefM&f+vt<15o;Dgz0V^nAr^-#4@HrNRJ;kLi`=vFK-m!`Y^=mt3Q?N)GOHY(s}W}& zIy1hA*B3rah}Vd<&~^yZ5V3_K9u^zRWjaC_c`jMqWb(WB?(c2ZH|Luyw1VXtvAQGH z@`x2PAc$eVEiOOqj@b$RCgzvL{|tUT@s2zmI=@^|E^twz*7IqEl@|OVPHVkb%Z}Yy zbIzV&_2#oQ_kT}P|F3jFqo1dPkLAyY(&!(*D=fD@lp%k0$N0)Bzy2LtK5zJf8?cH3 z-uOo(A>+u*zmSxy%swqc|EHe(RmuIo^9=KXwt8bU^q;wd{Dmxi!X>-4{bKa>&)KXp zHowLDZ``po9Y#9$f2KYCbSwMsyIR}n|F-E!4_k8R5#T6r49En20FDDEc%S0}+RfTR z34E0qfNMF7>lj@Z?j!u8cc1S+{QvU_qqq0Ho`2@9uq0;v4U{qOiEam_owfBN^7+Hs zEBW6wKizkG-?#h6ZGNCB(9>sngP(rS|G8TG%Kv^j{Nq%_6{Axw@n4lyC3Vl z@Lnrsxc^sODiZ_dFW%yt^#PbGiU$&aL|`B=2uK2wffQgcFa#J13A+SX1K0*^2X+8EfnC6EU=Oet*az$f4gd#% zL+G35%X3N}VO~r@v$0>|KJWl|guOpX+~vUbgg(ag2`F!_B^UEXckw(MUqw9t*wZK2 zuQr#>f#FFGVtIuaUg610Jb8&H_@V_*m<#qI+FbJe=D;s|N4{Uo!O=UG2iTv%VlpBH zx8cJ`AL5;ldDtgN*Za3Wu%+uQTv@uT;qqf;xq5||UIRIR2{lGxzJOGLo#uj)=33t3 zuCNbl7?b50earLw5;^OO?e~GWx3%}zw!m)h6#ur{J-0yhPYv2v?m4mCy zQ<7tQJ1gfxZ@0aZ<>wXh^I^Ur+yZW6Clb~p@rKGg-WCrI z1GEL&0qubppdSzm^atXA0YE%38<+#k1-=I60rPx98vLAM4VQ)joq*0j7hnP2u@KkAz!FOqT?#A%Qi1hw+W>3?HUZxQSRaPue-6q2 z9FqSzB>!_r{^yYV&msArL-Id|;@O?1{drG7wiUQ9tUL}2W1`yWgZ7*9tUL}2W1`yWgaJYklwq%Js=y{ zft+O#3H=x!#OMp4p9a}ugxoPg?$n0dF+%Pb@r9y0Z`G^9e>I>wPy?t5)B5M(~aiyki9K z7{NP6@Qx9@V+8LQ!8=CqjuE_L1n(HZJ4W!15xipr?-;>5M(~aiyki9K7{NP6@Qx9@ zV+8LQ!8=CqjuE_L1n(HZJ4W!15xj$yGwi4<57dXf0niW#0U7~~fhIsxpc&8{XaTeY zS^=$rHb7gT9nc==0CWUGflfeYpbHRPun*V|8~_di zhk(DC%Ofqor>SURv%ssFXkoL^x~7Ag`(iX`B$YvB!Jy_&=-DCX;GL|U>2|dVGd)j>k;56a16)< zegKXGC-4=E8ofu>$9%+kpXgPw-dKKrFq^XWMuR?Q4*HIH=ySeCpYtyIoOuXkM4$5& z`fx8PxQw!XBYK&5>pg_H53qO`?>Qm-TRd^bld|ZYx+9L4=pVZy4%TnQx9+Sjhx^y? z^9I)(TxGcBqW4)y8au6EUwk(kl^TLoy6U9V6`Q~lFDr_ zEw9mc``bUuOVokw4-&V~ALs;si1Ve@R_M`3R;0m*U%}f7`)8q%9`?(Dzo%@s4Q)dfmjb${LfUuVn^)7{ysOgPPcrbO02QUy2{cV}1IeE2Ioz_{aZPsptDf&QkO3 zg|C(o@MQuZA5llc*s~Ao$npw%!Fe6Qm+{ke1@|nx0b^A5v&R44#^WrM7VGmroB1LC z{KV>lw;axY#!`ZEE}(PVqu0iNU%|HDau7L6$8Qdh$)Ba7@52AA?_nn5DB!33m~DQJ z=jWN-|2bt=nt$((_nY3wkY9q94V-I_!^{T#qb!#FCWC8ZH?ih8hi4Ap9iR2_De%PGEufWQTkbs zgtuWo2=k?tHjzHg(bl*aKfR9ycXw>DJV2=5EXU#d>3iOK?~|v8Nhuzh$*X_$kCm1! zmO}Zlu)VGS#GmCLV&UN}+w+4V_cnU6xwscR!K{PTZhP}*q$p-r|Ajv;y?LElQ}jU; zY+oj;-{+V=!XL``effVtS%vapEnN+KXIrvAi0yB0z+KxxPyC+h!0@BEIpLYQHK>^S_n_WTpU2zo{Ze`p!-t-IwclO?Pj zFL+SM^1iJpBj8A#J7%kS^w;hdkr+qks9_x(8^?Ct1>Jh9xh^n)$ybN-k+_si(p z$5w`1zJTUg>&xO{t-gC321yZ6Qt^#RX;F51~ z#y3-pr`6c$K`=&Rze0cSW41Y#wqDd<^2haaFu$BjjF>~T+1WM!?;nW8)@Nh= z36w9t`RA^beh?m9~d=lxlPoG@?{TO6HRq*tN5e)a2=@#nV$8 z``Oo%I@q~$nAGLzsfTw_(HW+7PYJ#th8_Ej#Ui*m;=L+Rv~{9*^;Okob4 zD%=(BV#YzhZsx*yU>aGhd9des@Z@>$;d#*WJT%~WXo20R`Kj*?n%PF;FeiDM42K4( z`^eKnbRh0zW(C z%n@$R_=%t@7u2sSej=#L4ZfJfasVaj;L8I)E$XibD9{r>XXvIWiV$A-xuQnB5rXw! z+@Y^V55Kb0wwqb>;a@4{IfkX?xX^KY+rvxJgI~q zqd^1Q1My=! zYDmrLOXPell6BZ4Cz0<_TMnqLJ;>=^)R`7_b_IF7id~!-Iy= zo|sSSMf;L3XcUctF0yFMZw6rZ=t#sf3j12i(Ft@CsX!-VHmnkz4O%g9zV_gJ?audd zdvNY{=UR{SjCv5mdU^<2!VY78%$M(;_o9E$chD(kp%&r=dQy^7j5DyJXeZc_GK@c9 zw-@YTcMu$~qrg#cgnl@!poJZqVPJQLW=S7Lf6&VZ`hyAjg9+|I*n7e~>~a@)jR>Fs zMukj!0n=Z=D9@c!8+7F0$8__!!!M&SkyDt0Q<#!d7DQ&>?@mOq{_ zs?u<(DvJ5gQiz+;lMiSn08h)|=fkP0D5okPPE~qNRZg6$oHWg zct=&pC{IpXlv5SuROJrpS&Ni2iV--)h@hAY$R(o~6{i?Arx<%qB}F-vco8#bq9`p- z%R{qUMaVH9P(xjq^`XJ4D5n4)P62ve_fDw$@t8YgweHGm-Hq3}FI|ASP>I)iQC{Cg zQQxVUqhvMh#cSGw*R(gUX@6eR-n^zAcuhOs)AIW=~VZ8Swm3_dZW|L$`YA2-OWO_Iy3zP;*278sVoK_UPl*ACO z(v(wy@y1sZs3NVSp}nDeAs3%jzGHpRaI;@qDD+7tiBRejMN)ve>}M!eC^Ch6iOsdf zhZosqUN$`~^<>1zx-ILQCZvro(%&#%Txl3DOimL8DhSTQSFM?tdr{ZW?Z)o9IXh?m zVsI=-Dpev;9eEnXP70Nq(5Yi!5ra;J8;zT`b5v4n$Jm&J^8U>eA}a=#Gkn1wh;GI6 zANYsH#z*;gObL%47@H8|-!TejT1G}C`-e0z_!e;ttZb-a2sH4&ZtOO&auEKj)TmOU zn<3)Em+B4P)|a|>93CH@kP;Q?ACj0fFfl1SB{nf3FxXJp`s#88k3aKjmfol&{|f$1 zgAC(V7S1X~+cIt@F^rokj2lPRca2WDS!dd)5m|X}#y0x$UDN*Vo!Yc(Dj6^Taz3ZJ z+%|U4)|Wenjn~W=;t}&e_$D~bhlm|s%?+B_;uGR z?$aA@>YCBIrLyC~YX2e{Z0Z zJZK&(&;&lTV1Zr{&m*#O|KWWcepU~ zUSNl|y|#>6*JALKHs{N&{G!~`AA7D8M<G!2i`dtCyu(hZ(?+# zqCHp6`+5A{$Q74IhFea0-zX6_#_(Kcp^ia_S_hxoz5+dJ*+q`Mqm`R z{&dFbv*-M`Xhu!lG>WSrY~P5sXYCOdYiaBf&|&;r*bu6yqGtF+-hVl);H43{n9qO*V;Du$Ud7uxn&ra^)GTgqaCXlQX5oYekdq4G+=IiikgP%hN@}7 zX_Y4#J|~QLa=IfrOzd$R&7kQGha67c~^gr*F~C0TKp;R=q-C zg(^XX>z@e{i18M2xzEFnHu4FaI($jFg@?v(qSt&{olBnPR(nx^h)svom{V4v9<#P$No0G`s8iTo-HEpe(bccP035^%d{D>c~^LY z-viD+J$0kkoqgpd*4?pu$Bp}4EC;v$F#64p4l7z$S@F{^5gD`XweoDNkSj!O2nni3tOS2jaMA z7FKktogc(MWI%XwvVV|&yTK6yVk7?@c3?h7Hei~8HX z6Ln?Y{Pz9Hz^OfpKMUBfw&Awfrahf@ZQa#!+q>DL?YbC$4Y?H^p$q@9kK^jByQb`8 z5$ZajZa+6a-8FP#>Br?}d$0WY%{Oz81~tzLiR|B@<)zur2DWc~acb&u=kJ6~RSNH_GG^w+COz1rgQb&TiZ*DA%YbM`zUkM7jmQPd*reO>!S_Vk~tO*g*2 zzUfuY%Q{=`44xZQRPR&&OiIb3#pc~`f43>1!-?5f70n;bjBGlkcI<>R@0uPcH@fW) z3pQ()U%41^I41d_yL$BFdMlH62WfunSuc3~7wqcn&R zBp>!C!0qw*y%6f42siZpre|7rLsvr=LnjY=&|OSarI^@g^mY9VcDAmw!hQDR%U+W< z&72i??8mYFuQc;4|7FpNhEg6SY~pA@Voc%(eV9r^lDQj;>3#QP%;l(cNADQ-y)@YW z9#Z42uq7z)Pf~?7Ci6`VFR5@~XwI79#j6`L*QE_}{XRn5cwpZj zo-T^6u-JZd?=9EPmW_HvH>kau-p$P&`E@sStiR)py739M9TT#isOHx9++#ZO%e`9- zHe@gKKXtCJuKKuB^Ixp`>I=y&an>z|JEeqMtEU%jbg97zWo(PEwtY^I9^YRQHk2w- zW5=yAPrr%^STOCtq`SSwc}%F_eD>}i-;EE5FYD(hWj=oDRl4Z?*Di_9I~L?UZK$k# z>-_Tey~^%fG4XQuU)PLkTt8{nE^VAvWe%#+Y|!rIWu|9F^>&;zB(>3qoCQ5{dRA5k ztq$GkS+8G@R}EWCtR6a{_r+)BUu|-^_T4X$7(pmKAlBa5#G3B$CQY+}k%MN{xY@zr zrI_+3v9|p`CDv*gYFNcu<`XlxIbiIpdqj# zMpIm_mHLxh3rXyYfeJd#Y@AXVqmukFiUGrtDg^?JjZp%F3k2Am53_~7FN#>W7mfI?=gfJf9v^GmdDmg5 zj7?7CH;3xZH`-Y)pxaERB=fqlt**reRDC_`+5VF2b}U;`FMU{xz{o0Z8~R-fZ@K7c zPOF|rVy*IIJpB?KyrCHNGKs>6M<4VYFgB^r9{DM17^)enqy?n~PO6mOLrIPds=%tc z!k-3CAss`kk9Y^A5sSfJQOCfDPwF$N8J%QmOznz@Yy_4ssRZib^H(IuJLDgAb40_S z{NNaVMHwRh!Qoe}{7?qr6S)bG4gZh<3gsp$$>7IwQ$pcs@EGg<HMn+wBuQdR1mhmyHf%YFBvB*j(z?g8rwPIo~>eBVdqk-YwsA_l?yS zj{9-hzRFEpinI&+z25O+W$mRY>#vOeV^eR>i{yFvzV_vg`nH*L)o=Ej`ELEEhxQ9D z)7N28x2CK1|G0Se>;G?RJ|8O#TyE-rn0mxPz@+1_rShCb1<}!UqTiPGG(9=u=5c^o z`Bm%7v=+zeUn}o){rvNS+w|sRfjPXq z9GcYtp{CteW$(D9*SmHby}T0s{r!{UYISQRXZ%|+w|2@mvuuIurHuylEE)BuwM*sB z%5wDF&z!Q{eDR#>h6ghrzBBiYKW8oSuIYW4a3_A;;ar~P``UVdzA*rqD$5QAXp`$;DM z}6QQPmVACmQRfn}RDE@&@C;tyfhR zF#{1;_%JiUS=RW0^_AayJUM9{xvvESqAKOd4Yn*IT&8}>*bbiRuNUGCXcv^W4GEgor8CEN zk`%`*R=wksmwHURY}mxy2W%&IF)=b4G@dkQ9FheflK@8h9x-LHpm7E;;c-G|Ei@Pn z*_nYOFTlAE14;NS0w=Q}4^j()#Xts$$8E?59Nw*1Fi=Jq&SD50SDy8FN&g<>qLw1pNcBZ0YFC8ZjHpAdYk|XoER79qcfHp;oO>t! z>Y%3GX3+(PcYW487XR~#o7pzH$h<&Zj&-}kboMX>*e!^JEWO9c+;9#%BQTm^Q&ya;hWy|O8*^hrLo*WtQ{yO%DEMi(scMr)>z9X93oMh& z|ArshzjiKW6ofZ5$yx9|nPu;E;L{gP8;f~9Y?rUtMLg0`{Jb&v`cvomH^sO%{$+xf!KlpVe8VQku-cFr(kn4M$b^G`52G&D?3R}*u%xgG@U;O!}7 z_m7NFfTs^i8x2iPF~G;p!5s!?vxhmmddUOMKK26GTpi^BW)gZLdOoT!7gw!UzA)%3 zeG`XQ?hZ1J07V5hxd1Qdn{D z32dyU@!x%+uH*qOaJUaxSlHj+U&vof$lKRhSX4$v<{u0YNDw6<=ojb(w+j&T^5gh7 zf*Q=v!PnIX?&|Hu_79?+z4r^aJOE|se+|LY=YL?m{Qi5IP!lE`VCN$&DkSpHkp3;G zr}zIC_4NE7X+O9z?0@b3e**iN1p2^)jbVP?FMJ(P3+Ke~Pgg!*RbQAL+}qd0+uP&c zvuNnz4fpnQ@%CX;g-WvV=-D~Adi~SD`!5YWJ+QWyAKcE%0j8}c4?tlExw<-nRV3A= z#6glWQW`Q6qN3^`Wl?2mX>}20Rb_Q?byX>uf9tAwJG}6OdBOj!>-fLA%KuUKA7}9N zLG`Q#^L2d*bJXzl_GJ6lpuw*H*%qn)i1**Rj{n&f>HnxJj50>}pQZi3mipgKDF6BA z^nV-|b@4y05A#C#yD!SI;V*4b_X|Iswwkg@z)EnDKeBk|arE6mvy^(>p`6QelasdU z_FC{lZ5;WKmdPE58YkcaH{J+9!C8h6h@z`sX|rJ_~(3|Af*o@Lu)kzFs8KQ?!y2 za$2f06V|xU0Dq?kBF=I`97e{8%u5wz=13cI_|>}y+l`E54C>o*L9u||!d z`3iGYX)-im`%ay+_x0d21uCV91hWAxyg!8omJB&jasQ*GfW&W)5UG5Y?xm^_e-4NB_IJoEGd3Kkh?Sw}ClY zxGnHb$FRhP=HakBHJl^yaXV3XQ?~EDZ9m3g-0)ADvT}JT+t-XNpfol=1*HT7x@dzw ztj3osu2t>rl16hM{m&%a7aiNJDLQzNtp+=nb`9s{wk^qM*Yzs#&(;&-_5C+O-VdI~ zr6QgvP@bolQP2it??iQb7+`kb>!5?jI25Yr`6D1v9APbTl^;=Vc5!h0r7rBx5jP@+ zYE&L0krch!r}W!d&)*ahl$V742|Me)*(52(Tn@QeGc$e77qQmyeCO8hQwGqtTek^U zGj)OjSLa*FTQdU9;WCgW`_6&*lHasEt)S(C>rfndS0!&>8MaiHlNPoqngCPQBD)an zC;sY~;hzb>ADt%+o9Ja}i66G8&({JEil_VT@Kjf?r}Y3v-vxCrF;ek%6O)W<%n>l0-32&VjwdAF=!(A2WA8PN zPZH+&4cmvecr3SMm#W6T4x1THD#dOZg%7t6@qUP@1u6j%6OTt#Z!f8fCW>TfwM6;& zOE1=g&IAwb_`Pxo3?1&-(hLgA7W$LED2SJ%7pV%vF|2Wj87lOb98%>oH$*@~geByF zHfL)vIwXyqd0@w0f0IwOFN)uvdO&x%;#ZYuF9b4%GxMuYJlCfve8C-QO0P}G+18>B zFy`S4M{v06=uH431a8BwW;M5HYm&00&7$RXF#wymjv}O5F)X*xEN(9wYCt>-n$UF6 z)!}TF!CQoG4gkG><9utdO226QRma)NJANBom>92A%%Y{h!-7UGf|$e(+pRiK+eV?=~T zfr#1^T5mu11C;SA$(5TK<)wyQ+)%U5Iavr&n->eBy1+(ds&
      )4fVwaZK=bjXFQ9P&lNO|O40K|KxjPO*Xg0k)U%G+oQ6{J z#Pd7t=YRW?RTK0Lbb76|H_;XmxYra`*`X78ROE*3=8DyJapeMgs_caA?Ie}nMD76| zpXO*Pyyz+PKgoaMcuNZwdjf69P;V%t=yKz-B714y^Y+QBR@?u+)M{^>_FL2Mj@d&W z*=$q!Q*65B<^rMif#{O7ry!;Y)EQ?eK48j7K#*j@I>?j3gRHCt>E#YX$<8f^Tp-?s}^nO$|w752*86j7bO1&6p{-l$RO4}u>A z5y~k5k;Ks(Wlj}Q+3ZiDBi1xcD{xvDE+IQq3?~$)DxYB6&%M>Xd5`(pcN6?vPp~&Y z)pDs#@mw?E_q8aVYAmm0w7U~9v6@H79EAkv;BBzBsjt_jxGBPl_=yuQ3H{h22u23Gu0G9`p>Bo*lTQHbiCe53!qZaB6PB09HcqJ!e{C% zXYD0$(~Cfw7g>G@wu@SYS9cw?ho5@PzVY4L?5__$Vz2G^seSf~pCiZ!*@YKvu#;?NA>tO|XWqQDH#P5t+fJbL`$-zAq-!4G zJWT>#1h{4e0Ral5GPuV4BK9yGYSAQ4A9x*VfaVw~9bAWem{j&AWtyh2N0ZRF6p-X% z-$fx%(~J4X6o5kj5Kcwab-{WoS+&{ef;Ei8KMs=4E!)9EhwM0e7fE}|S+Rf#MKG=p zg(fkLrgx$@-%5*%(0>&lS{Xw4*o;NCzrb-|wO?zG(mtlcabU4w`h74Vm+|dnp0G)v z1T)My2U=U~tJN3S`gPaaP+pb&`|iKPzXpIH=;|jh3{%AJ8Scl)hHk)h&K+}(v3{QK zZ_WSx+-v8)DoDuWImu~#?&)V8fOB|&qTrkF{Du=nO!I(sp_z18PUV;qMFWs?AR2&BGF5<1Vl?z#eTE3x=bUZlGxWO| zcwr$@;&P^Cgu>EO+weA@1wDx^Sb#1suTX^}PSz7)A%LENcK!PL< z)F}xrOELzvtG8)(Ob|ks6h;YL)Cne>o9f4kmBkJ>u&Rto!m)BYyRXIS(@$78#CZ>r zTN^LG%HBdTVeG5x?IL8j?)~NqcJ(JNb~rZEAfZ_p1M$lOI2IaDpOA0nRd!*ajWpHT znSm(+jAZ-xwO83RyxjVOXYIw`|IsP*^1>4g5$z{XVe8|1!=R4ir%nSIqWxK2X*1#( z%{#WOsB-87LPX_&X)ei7>re~D2wVXNnH5Jz&je>w&r#1S%G?=u0MS_vvz!CHS5=`x zxb$_J$WpJ@Ggf4-bBH>id8Z=@lqDo_XDn4B1}qi=nc(M1f+49uJlOKQLodmv@;rf* zOMe%wcQJq-qG3@5qHYxt$}sQ@`TQi-Lw~yM;Vc1)=@f}gL-B6_v3Zas&Int zYzY{IF*wNS%$H;~t+9amvg6=H`e`57WBJRntiJvP%{SmXr%)|VP?h8$F>&N|R7eHq znCBb>vB?6V4z&$fL1sSbs5tUR%wa!Wppa-wL%2Uo@H*oO@VYEG@`F%Dpcio+bJXCuS*geY3e15u4&{FB23Fz_SOK;Y&dZVJ}CXW+=K zt+9av$Lzf~ybo27Q7gLP6Xsrai9PYqoz_8DF8BHQI74q)=E^D?Jke~c@4DS;_n#mY z1)p`G)qMPZ+tzgZB%a?VzxN1ZUW`MUV+Bi5>*xW+9crM6X57B8waRYVdXxR?!6)tI zUv+C?<8<(RN&Ty#$_)I)MB2%w1mVLL7J;lL*fUQZg$R;m{fnAyT~V&pF%PnDG| z*M9M(%eV%Rt#~cK*6-d*cAvoZ)W!XhnuSd|QQer!KIawLSLU^+@Yw zVKZ@N*4+35n^{qB!}X6^;+gyHijd!aI0gVPT4`UqJZSs&ylLYd88(tvF@M->#X7P) zT{IbBvmayAPD#!ot21PwrVd2%{Z>gvWI$Aa+&EHN1dX&TMI^;~4kY+KR?f*1xjhz4YL;qzLUwS1@;Bp#Vj5E(ECFY(&bYxTj z%qGRTS<9qRCHo`}Vw`Js)GHFl2{`CuJ)I!9+(+94{q1wCxTFY>rNzeJ#j6l)bdau*Q1epBbPcyiL1Btw_ZPOzpZPwn{K_$dYX}rtIlQ3(iv_9PPA)*edEhF+0CE+ggx@;pPl`F zf_XiIojiEtH1b*m&V;p#YnIqWaI^dSTHw~Nc5HM_%_ZD7iZ&!kS~|MzYhS)i3|4qB6A%lik|7d?O$Jf94ZOgU|;S%{CYw}9gNX=6P=lMcEl;Pm@IQTaO{S86f= z7fx(CNaX&b+`;%vKjFd=ik( zQD}(C1Q}yNfHOdxDeSzuRH;i~5ZfbNb>b83FqwrB><~ak5_Ce<=1;QsreoW*55=+P zlK@dZ)n@S6RVy({@pp!@N(3e1FOLYl#b5B_6bm4ULmQcf_K*d@r1MTfSx~pSG`Pa^ zj}IfOcPUiCg5(N&;rL(ePjA%Q`l&n|boNVvX4xDU4!@f~rmBGAT>K5uOOoU4cW_nX zG>g%`^saX!R~JQLh>TcaW}#EGFPlA=O_y&sqXIYfQ|)Dv7}NKOaWYNN2uH}6B=*5q zk2P64RINaIo^4$_WM4US%oc3f4CN+|z;+ORKKyTuD`;~cfmRyl`2RX|ZXF8V#X&-^X$O^fi%U00Ls(!$yt6rQe5;iHhPm2lzSx!s$F@21Nri=P2s?+4s*P zw(9mV4n(Bi3Gr2-i<}m5VZ`0g;?#wQaa3RjIFWUF|Mykf zej!BjgrL|Z|VdE>Yr)clF^J|T?h+K;t4pr8qsx?7Xv9CxbN7``8^>EBE$=c~j z9`EX~^r|(MRO$oqiCN?EdVBf#zgc1yhCbYdycS(&NE1f7L0<#;mXg2NCNo!ALeqYW z^pT=q0nR_pl4^?ZEF*l5y0_^W3JDjQuIDsPIzsbI6IUI3^bF;=isz&w83l5MA3`a_ zYgW;n-lvJIuao=}%C2B({-JY-z@7+gBL^pZS#gP#8L1UkmX4HtkC zs)AVU6vH+^u%L9-Bul;_%?hQ^#)IPt@0Mf*Midko zzHJO0&1ur9N(n+fvtT2s=TaAXphWjn@h5_m#h?$QcyY`@lG8wgGoebP;Al;7KS>0B z^N%Swa9PE<)^ohpwr;)5DwkGL%s6BVs2uiOQDL_~2Hge6IDowv%tX zZRf4pXeX(7FTZS+{V%A|`gJ(o`}Wx#m!4%WQ&m6HWH}+WKl22LgR5koQ=Ex-c z1UqHLH%(aGi*Gq8>JGGWlR#X3y{uPKf|+FrcE|NgZR=GpB3Zlt2c?g885z73a^`f#AEXGP&M9QhLUED7^5n2JZagM*HrscjGu> zH0K?o-4uRc`&CSrLEtg~2il*NZv|Cw5c`wua2*=C%&j%0W!7=F!-iOk)bQKlnBVfF ztrl8YLV=)x=B>4X@n$>p;z_If^AlFJj5*e=*%hDw)@z+XXgRMY*ut#!IKyy9;XE#b zW-`KhizkFYW^rn{@9f-Er^))|VLK<9eKp`@_k(>aLDDE#aOU?Rn;Y@h|dDLk#g_LlJ zMi?{jS}U+)p00r1_wk!?wBfvuc4GarP%5ba?F%>sL_wTSwrq+H7um^^$L(XE{wOq> zGHYt@x2~RHyZ`qO*wx#w0x3qC@yhG$6SscRPBzxscYgMJ>u4ReyMO#wi$DK_c{0=N zH{bq--SUke6S#8EfJw?&Wibh4yH1h?tbk8DK`;}bXm0Qf>jJxX(?>pFzqsc&>=o<} z@a8k2ZRNwupRG^$$H=9+5ah?k`;kZsvfoWJ1`(XtC~I7Zc%%y|2U*|<4Lj7qtv}R< zl7w_tsfA&ljpNXQAXsRSeE=uf%bFhq#b*JUm$@^7u4yt_r@dsblr_^{Eh(~L&L>ne z!oQgaI;nh)8W=_SY`lBs5c7#Dd~ZgaHHx!NYJ3`4-c7bxvQty+2?^|_wqz3hGLL+5*u*;yC3VxV|GJ{GB~xG@a+lXOD?vi*1}>|4X5J zP?*;%BZrR-l>y)dXLr^i|HruPdaKzgGb-thr`i;nF|~x*`;$?&V=SQ*HKihcsWJvgv=6dA`~_%G{u;t!TUR^>};R8%8T&r}W zH?I@}hxYFI$2n|rhnRd6c|*Om4YCbV57(!;%~{9aYed8;~4xNH<2iB zR+}(QRPpy5hmHt=`(o`W=29{drxnl9`5+!}3};7`Y7;0mtHYGiBpQSyBJTM0> z(pe5A7XU<$qeO(NbgdhHU?PzRALNWvob#x{O+{u(&xn&57B7>i$8l!4Io+QdqOp)U z-TVCG^OYr*%HXNBo{Cn43;X3cQ}mUc;p@d#0HSjim)JNaJ0*d*nr`@47TGO z4Ru=UaLBxkMCtJ&i}tr$9K_Sp*^X??0{DZp5M)$3!yT5Dmt|SN{n3(CEAeu*@KIch z%NT~Zhr%%3-w+El&a;bRNF}=6^EMlCGH7&pCg~))yMVs`edw&kd*K0MI3QqH62&W{ zs$eD>)k2;ar6)TJ))p4qv z3rA_o%F0S&3dxdC*o1Q=)K>f^@q;y^7B^+uU<)pJLkMpykx=B;SFhoggCQfdV_ekVl z?HE}(7)z|8m-jM;QY~Ow5k(UiasBUbuRSOY$S~p@OEp6Z3dyPv;E*GnD$W#(P#s?8 zA4v&)IBul-3*heIYz)Bt%wkg+Q>s#Hg|#D9kLmCTCFs(|xzITxrG5=yLm>u(Jb6r_`$1W`&&gx8CV7CdlOijPxS z&x*Fe5ju7u;g##JviwB4EP>>W*TAS2_RY>fOQ z&N-D6pkxs*fihL|L6ErlhlhFO27NP}jhRxfz46K+Yoeef3p6B|YU^>Fn?x#QM=2Om zHL~w?hb5g4wV|=Y`qK#9(?a&M&F{A@>q_W|gLpUh?q7m#=QQ$Hu{Uun%R%T40?1x~ zc4Rfd2-C~8!T$X83pgFvEfgEpp@J}gZf@uFQM>zxpRh09`B5AVf`0hHE;eepb0mlD zvX5oh525os@r>6#`yVaj-P5dz&G;L?X}5d7P-32O0u+S%W6>s3&0hP(9ck8aa z2Pf^q>$9y$vN@#{rt+i-Q1qt`6Ew#HC{UD9p*)42Es|2BxmL=&y`ZGYcE-vm5IbSz zZ2YYh2F*XxD25vbRZ_q7D8-z2-t|i>uUtW9hK-H+HB8aT3y;2F-}=gZq{y)=tpBUF zqS0E6EtswZv7+5-9l=~3OQWfP(N}?~4`)hh8nS^ZTAn0ecBPZjhn~fzg2RQnF^&$(Mw|mHj?Hj_{TzyR z$Wo2$+iP#V@vJpA9U&VcbS~F^`0o!`L5XA_W2B9bQsF*mWy_aZ-{64#^0CKl)5RCr z-*+7b7+FY@jvWq#>f3jG#jd*U$oQ~%*cYlRbL@fp?zOs;O$5go z_Qr_@+qvhE9RS1-TAGM+DI+Ia=b<=Ke9#FT=2V`uhxMsU)sKGgLp#m;)5!3Ql9jAp zSjm3VV^2Kwy#3~Ze~et&3Y;4Pel$9Yx)y*&6hqrApjF8T&p zG^XQp64@$j-V7jI<$`?MMmFcq&piP(h{9&%*fQb0zURuTZP#1-?Zg=*^SHkiE0@`0 zPyXGCs^HjC^|iQ+F|thVDFCAlrI>|PR#cWths+bKI~0qm@hLJ==#I77o_^+4E2uDl ztbayeZ^1#lcnM%kdcbbpc8RqOz(?;MvL{c{ZW%6bHFAed_!!z7%S+0vpALB8(jq$D z5nw>SNMWClL+=ON86gWRxzRC-$dk#asSUES<2oF0k};5|7X5^+=~E zkf6M6583$1UMqV44GdBSO(2d@oJz18ueSmJ5_=;55)=q>t%NGr9{B7CbvfshqyNvx z|NVLPvuB;xS*MrZ-~)QBp`n5O(rvH4`kGyO>802pr2e9mdy5O9A`v+W>OP?dFUM5Q zg*IDNR?Br&-G3rH5ptk5E{6{XBt}{`17t&3rU|ba<&{ zcVY>s-XQ6hw;=tKk{lhffBV||+1#(O_TB?r zpAREQU-U4@5GcfCbO6WK%jOhd9Jn8(hT`MUG?H6M^TZ*bBgNDYDn<}68H$louEgmR za!8bm5zV7Ya0Ce~btMU}*g(ds%~lLko!J1w*uY`~{GZ4zvh+dHCW+aWSiHbedypfU zf?Gu%ahi1BG{#6eh%R^6yiqfI<^G>Lzt=?6c*`Nxe8QFF+GP}(6#st*@6&t5>6$%A z@e6|0K}4JmlF9?tjMp4ze9r||{5*j~jvQV+Q+=JIFX((aH1G7i^H%;7781nk_&;L^ zpO?>xW3&|HNT<&^2e0F&+3%Tl&H-&e&s+DYWA<|R3IB7rz;rGmVw`N;7uFxL zE*R^{Ko=A=5Ns$YGX!Wp(o-dH8CzP;*wR8aD^ixZxundfVjrJ?C!d^ceXVU)j4@tR zmXF*PNE++3v|s^U>F8iI(1x>}OX_R=+>kk66QCeSRW1{r=e}o?LSWDgS3LRjvuqaE4Erj-w}}1I=k>w z|4DjvkNGjmGw>uQv3;p7+Azr5O325SKcvaO}ZXHB)8cFmS7((Haa z4t1mfXU&7~`5Sw%*94Jw-}UZ)8n=eQerttxL~@qNG-+3F{-RZbMyi-721l^Dwwc;C z987|=FtFE#b+n@;TQNc=sel5$)Iy5R2+~Fm@3X7#_^hqjdcEEA)w?af-)-y21|3i7 zuuG~-Z2_9paYL-G2K0*WC-f}>q!ytXJlw!ctG&|FK%7)9wtgbGdE?-E3QP7vc z8hxvTpkg4=+Sz!awUVLeLSVkrg81>(bf8Nl7RyM3?nWjg0h>;BCkR-tl~V^W+=VuE z21*<44z>HA#%(>te@BngfPwYt25}X-4+(}f0*VE=!N!X8WCVfvDeKE1UyXXMdf;_j5rt2uFr(+cob;1*8CABiDAk zc)vaV;;Ural(~b3QB-C{<&`+wg*F6$(sa7cDz4aQJ73$)Ji$R98?wu(Q&_{ZyLiiX z+p%Mh9eU$6kYhgADVhyA&!r3c!R>c^&W@ZoYk2|z*srx;PJswY(n|JQTB;tdy9+>Q zhP640tX&aKT+O0|cK(VL_6m+O+BMj=7!L3$rPBUs+%8#}28R>bF#_@at{z*vqRh$) ze75uLlhy@FxE4gUZlVE4D{dd$kY=^z6v_H%n+&MH2vG$evgP?iCJR9rtKle9Aha^E z)>f5QnW01yMqwlkbTbb{j1&-f7nz?AZ1$nfT8|~%panvHJ z>{AOqX5TseEizfq_>Mu!CG3-&dX%o zv4+(+!{>p{H+Iany>Fr8g!Z7ZKL7a8wU=T)Cuk>2aahNM)t@M0Nxj{=ST4;-0 zNS(FQ{SLrzq6kzNNzcyuMv5!hL!cQXA*~jGj?yHBA%ccP3Uqy_3XRjKAibD`zqTlxS`W5pVg-Tst~yJq zd(*O8c3G8YjkS}N9b=7VLD?Cn=rBQa89+ce*#cvfS=CM!V~pYiNdmn1bm!nB*-Q0T zKqtP6ni?a(sjsg`)@+&e_H^*rYqnVW&j66Qvv zLg4fTrl3Y$P^6iM#3{}(MjMpYM-{R@S1VpVgPhbU@f=wF{KknG)nP+UF1O@32ukCI z>A&qbL%c}~QLczON6ZcqQ5olrlkUM4bM9^KKYxGnf6Yz=?6q7vWi1KY6^lx2O-AG?0K(6+o zXDgk+tO6D%?~+sr{0pl>*X>Lv?G0dG0ZyJ{_}8p7ZTL{YSsoKatJnUZW@c z&hLe&I;EbnY|tRc}{EJ6+G5Q#}91)!j;5E%lTZ zXI6YJ@sNamsE8ned9L-U>(!V~p}3*>?Iys|XGTEJT)v2AGVfoo3X=`g7<(9)ceEL!*t;^d*( z*>RThqd!P?APXd7`BG$tPPbV?;9T(=V*QfD5-(osT|B($IE6BdRWkuo0E$A~J56Jb z6R26_ASu&kc?5VKQgUwYRcSnR$Z78EvG%hmR$ZNC&8=OW6AeN(vz}hE07LNi<_%ov z@b4|>(v>!fK5ur?sKvSiWM#;{Fji?OfQ+S-P)N#DM*+dLVFd^_R1oZ2lwdRh>OIpF zwVhA?&OW|~K$cBO>AV7D-){W(f3@G;8%5XhDl9GGmmVOSI0<)q|Baup!w1`}YzatI zcY!ta@3O~V`h{J$ZKb{Z@ekM_svgTKlTbV0Ssp)a71gMctnRk{!l-4B`mJ+sk5z7R z+5XQq+J>)yycZ4GL7ENRc=u7;uzj@!598RQzZ;r@H^_axbm(;u?J+Bax10*H7lFVI zc0v)1AF4sXx;-sc5OUd5uYs)4SuX^dm|KY+BgG~6MLA*; zt==H=T0Pc1MHelci@xT7?d^_PHk)-P$a-Er`&cIkLR%@^Qz$SLEP1$wNPQm#LLRi0 z;c~+l-Ed(spa?~rKzwm1E`H{0MitKut>DYI!Ob0>&D6{dUP;+PTe55|&U^sM4nY{S z9O-SA;2ca*P%IS%We?RDrlXa$#KsUtnW4S&6iN!?j5QV;kVgsyi>fL?qEXwZSqvbN zYcD+eEMql{GQ->Kuc@|q%Vkzxwb<^w^G*lRz5L=$_Ssv%&fJzXUxaHIus07LKyt6l zwr$&nNTLSA|I1z6mykpkN+d1L^;~rE1$N?8ont>@IGRhBRN5aN zeAEGy1h&YYC?ggF)lViEO{3^qd#4Ip3vgUcH#DFje(8`(?(@BL$M^L+hwqUnHrub+-i1TqCVH1Ua&X~EeF^o?5Q zU>o)`%N{zi+tQ1&?E6o?Z9OzWX@b&IQJzN-KW)eQ8|}@*?T8#j?W)ZyDCCS2I2$(30#TOT_U{r`{$?W@7%) zKib1O%d>y|&69S|gU=G6=F$9x0_-F*vSfHY+{;q3tryg+q7aut_>Lg_zx z332={u3?JIgAU1t#T?tp5BO)=GgLn^yLaNZINLDb6|}oB8K5yT!G+ZAyuN!U#rbk3 zgfOx3B?wA~f8)YYb)(tpY>c3&(@L4*p9JCmNy}9&_e5-0w~2sK%A7cfL2^EbO;;_| z9LJZ3B+r?%^T1{uR;7G(UVWW&dbE*GQ@Aq2XS3adFv8Qs=%3iLhmEtu{G=m9Fi$6C zKYR|g%EnM6@u1|qYBP_*g>usWIF3$p0tP{Yp>9aJd{u1=-PQdn&8)9Fgc2*#>|+y` zWBh+91dk`>Q~6KP00kjqIlb_Xvf*L5Y^(`K!<%Jay5$C2^I;4_V|Iq3 z2#L3+f|P|wo4V=bm57M(1e^GoMpC;VOQC^Yt0{nwRYUOul1!O?($5ovaEOa+0V&Yi zZoR?&_rKpjOOnD1_^&SRy@!Y~8|Qf(USUp2K36}2E}|3$2o4|w#gLkbjQ7~dL(R6d zVwvsV_l7M!ztl;`B$LjSBa!9HflG_dEGZgsucmNt<4_w~&emGSsx7vvs=%5_gQoDT z$1x;6I$)@3(@kaiG|~77{1;m6SW+SBN@Ro*LDv)n@D!Z!ocoW`>2v7o+;g6RCnjo& zes&X0IS0>3j@|r2Kl5wnj0#G09)9GIUUkh3Y9M16x)*<)k#kmPjpn(cH5P{>QG^d9w zLOYTKnd-m=jVDUAEy+s?t04Plz&j+R;F>BYs^&EytEU=!fwpElydC*KRN612A&jY~NYWdvxfm$(OAW!5RR9~SF4&E^J= z*|&j>D$mAo%1YK#yaJauewL1WNo0mVH2pjm1O*s}OKo-PllJhB9yiaIN2$c#${0=J za1UDJ-Z!kW%56o#a?9wNU?b}%MVo8aE4=%y*Ns6 zXbU!WTfDrMO{m18WHwf;K5dVG$z|8xyBNM<(2gHVwf4TF_Vud^D1@Y^JSr!d$keES zF0BN52y1tm;t_S2N@Sjkk5`OimYr4vGKsCr9JHom4VDAVpwf*ROE}e5)-1Osio~+u z^vypi%jpI+5VDHWm2fyaK+oDyT_Nyhb5VDyk#Que*eL()_7B*}eSahP2v`n?>NLt8 zq9(1lahX+azSz7iL-z0QU+<_$T(^CRUHj2@+mEiefv!2HY}MKe;Ia1NIQ7}|Znr)9 z`e!U>-E#Zk``@(Vzx@PVsdm_RzIMR=^waHj{`re7v*c>)^$(i28BzR$FWXzsAGhA( zNn2U%x9W9EDQ@dT$|sdILSK1bhgmy83b&O<8{?8VD4dtgHiZghri(uZ0kw_NG!9eX zm13uW6#DL&`I1XnSL`-Sj5!o^yv=*owYNR0)QFRvm1H7K%m@I<&`G*HtwNBJN zQb1o-96Q5$&VVmC)z^-lM8+ux<(ad`EZ%U+%AwU%m6zKiufAZrYR}pi{_S6B#I)D` zzGoLjHCNkdP}5znzd^g=YWwbY?y|SrJ5Xv#u*ECMGGH{Ge&KKS#;&^vW_-3`?Rl)P zDEE)LLtqRvZom#4JO!FMK#}4uyX_0N+KyNLVsE}#YZqL&0!Q~|(%2z;{K;2w#&Yb~ z;bZomtFMA9yTD$5b00_`%_6Y#Duz=*XgJ)Bb#qzOf)ak8Z@YKzw}sVZ1d-Kt;J`jx zOI^h%vSsxR1f5XGq}-BCVVTSt8q^~))ybL zUmpDrJBFj2w~jE*U10^NR@em8CLBkBX6e2>%fJ!RdWn((PfVt`3v@9$Mmt>`vi_rE z+}A3c@dE2T8Mdwy9o7(e0}azuvY+TwXHcs_7Qll>aowpP2q0iU7WFLU*m~OKW@bih z8N~?^c%J?2#k&BEvb;IgLIG6@Dm|&J&3*#QAu?DD1qv~kqyVtUX|$k`bX4J35Oo6| ze11{M#;~(#?8W{J6{-5{U*-**nn|e9&n1^!V!wZBKS1AX_Bxq8JVMLbHXO_1@(SyP zGO+&2E%w6SU$T4t`wrF}dd_fMkJZ=OGk(+O5BftA zr1_~a97bXVIgaxWRew5>6mv_?q2q+YM}<)0{GQQw=H1+TGzax>?wCWy|6jj9_qw^? z&%Hz$v^om10c?!EDI=acg~|Mzo^I}}UmwGttp zdk?eDacrIIICp=}`8n?_YC3lv`g!*L=dOS5zP&`d5z?gz4(|*{Rci!GBc759%-ryS zndmHjMiP`nTryQUOP)n&wYa!aF9@@VmXwxLh@)1@pph8d2x&E?@MBa-2XT7vmK^GY zinW5wk0|F;>tFRk4`OgqC|YD?U~J%;L2ZHL19C+AlXPMX4y+FYALBY2&a{E{l<+!! zCP)+SIg`{_m?Aj9eXg5oU5u6sPc~sZ9ooPYg=11f5K0Tx1_EF9v^Sn>va#M@gIWjd*%!O)(;r@I|M~r!?7&SA*br!JMtYy^c=BIu=*JJ( zD|9hidc)OLc z@r4#|J!@^_BX;Y}+Yx3r+p`xgeG2w^f@-gMhnwQtY|#3iUJ9UCpTb0vsb>JH$7X># z&Y(!ZFPl1X#^8NNr?4rsuPj-%(bjL?WM1sT`<8zYMGSxoY?>MeJo>k@_S)_*+9jLT zSz2k6y?po}DiWliId>tnhV-6MYu)t%9gzCrmiF43EAOK7-*Lp;z4qWA57~8JsJ08X ze9mgFg@W+yL{P8a+7(w^Mlt46%PcLlUq10o``QO@vEw}>_9MH-F1Y9G)^L=zrEKE8 zfgQGY&*QfKk{{TrOEy~Ff#*=jfI~{%Kv`#&ZMo_r$Rq7W9fFiA&n>5P z`_PbuqZ#QZ!0RLMirT`e3N~1%07E_VMh&02p_VKO4L`DJeTPBJ&#+O~8}{W?Uv{{E%0SnhrK}61v;s#ntxW>wmMK{Pa0nc@^!VH{wSO zA+v@}=tGHOH4SrWX3%h5y3{VnUv9fkK4A^h4OX;?0BfYg-cz&D3TCP;=nMZpe7y&p z-gTAzf99Fqd+#kXX_HBBlq58fUKJ2rcg41rwSo;5+gf+UML}69qKMQW2@oJ8klr&T zlj*(p{!IV9?`JYN`rp_8t6^rI{(Qfma_+h3o=axuv`#gjz}n3R%o2$|Y7`k>Usd8= z+Jt0sc|xu>;MMBmQ>4}Tx6*hZQfVJ6!b$K@`j+`&J?hYM{@Ef=IDX z`oz%9&JU-cUOG_%ZaV?z6xoJEwX)v%sp2`4Z4g_ii40fxB?u#${NO3Rh($q~G zXbeF{wxU!`GqKu_3VmAwKHqrek3w?9Ll*TK)65q#*9o^LbDQBa3pDKY{lJK}S2`dI ztIw&QCyDqu&&V2_1!QCMVV%tk`6ZCoFvYw9Vc0tPb$n25VK6{2dO+92g`bAx+{%FJ*25 z_9X&gbM1FS;9+P_htLOEpWxQ&N;MoksbvNEy7-3c*rZ93@_H7D%>Y6J_;xca=wVbV z#$$KUZ`F)0txK8}#y8ls6d-wfjz0iw7SQPhfEz<)k_oF+cPESQZIEdOU>D41_vHfj zb-^YrI#L_z^~8}kHBq)fU%U4XHPR~X$dMAYQmFOEH{Kvsk)h0}5yerZ+FI9z)k&`E zVL6^Idr#LEUBqI8IWv{t(E(_CVK%Dy5eG8aq(8=7Nn@LuAhs|<8sg_qFqTy4AlANW>u6B`30xpMsQ3& z|7jsZ2{;l z{9FKU_H*&?_Bz%<&5p(Q0r}qlo40-c_XYOU9&2;J(le$Fv)^q@F1(-no7b?vt%%M2 z4c-Z^TvFEzaW|NY! z>%P-JeK+?c{&V9sHxL-&vPW9juGKU;I%6>gVOzXJ!g0<)V%{ypKAUATY|fcKp8Xyd z8AoJ~M%@5xN;cXytYjGXLxT;fYdozqDyN$%2nhn949^i&Pr%5+hzwyM?`Oai4b(8q z$S4}V2|ll-2=Qp)ess^XNltEHshlasG?Ux0Y5~D9t`KE{N^}1RTo>5PE$~65z*uM7 z0|3py$XXTfB>tDZqz`>a$yuR<6?u;Gm~c{J13fUeK-Cc?a0urkgjy7*YJ#G@zg`5c(T$a+J%~wQG zNt;AF$69^<)A{zODS8IO<-@gQj&?k!Z#v}3i z?(IwD8S2+_bi}&O_k+shTKR?UN7~e;lI9?-ev=ete4C!Wp;sGzldHhK4&D3Bm-MZF zU9EMi06D#(Xx(wTVD4sRQ}Bl0?F5?H2(+6PjE|wc^H5Co-m`$Gm04O+l&cj`K08YZ zPD!s0~N4AlrJvy1b# zaqEpLUcW)V`N>ap&rj|HTx9BnpZ{9j5B){H;S`dF6~bUG(cNF)rPSi9HBkE+%yp5L z{>vo_`OVK^;$iNp*0XQH$aTM^uAorZXMo34wTf2K%9B8_x32*WIOmlN;oKyeX$qyR z3Cuq;iB0E@s)H;+W_F%Z)3aG;Q|Ri2m#9_XV{&hdz(cC6YlDPAAN$5ZWoM<)%qGJ5e8u|;VCj*(lo*n`-H%b?$39>+^PMslDn?ggOdb)8naV}=j z9@4E0;wl)j#{9)cM}~Co=f9xGAA1B>lSEy2-E~Ol+H~-c`34U-JFCUxZ3JKEG4}c~ zzI;Om4F<@jSc}rOp)Od@F(rKzts@2HK2+EHQzy}f94ZMG_S*C`jiCz`}wvSmkcstTl<5n%Q)%9^U<&iZ;ZO(Hv*Jgd~6{2v2TTZ3h;CWIbD2 z!7*Xu$}WgfQ?q%gBFn>ia0(}&T-f@eRe0uB*Q&gx6ZajwxB<8mV66aH)Hu$wA6igr zAYcUFAkA+~@?p3sh&|hi`bNMyi;qAgUbCe1hbR!d{-&Gt=i?1zWMQ8H#3PV-A-EpZ zwN>c)jklrWh57AhB>U5&H5ab}oO-Dt$k3<$?VfpEGPZ`ld-#8KoC3jkJeZAH&RDTt zOA6QPchA14XCD8v@@c7yW>EPFX^P88RU@tr!|k1%qZQheu~eS(N7T*hB;0*7#fvl# zLW*T9rWdd3X|f~1V_jr>@KugYMpBCl2lj~5Q`Bdm<29mkn%itIGz+glYM#s=*|e_C z;*|B>2rw%kWb@(wCM$pl;k+1zGi+h)gFUPZbZxuf!)Y5bdzJZ88lW`$s{lZ4IDr zn%A{Hy&j?w_XW5>Mk(9BsVOcbo8A>$x9GV_LSR!T*zgQM1flf^HMSPi?=-ZW z8apA@=)i1|X1R!lx5gJ4?%DuqA4GdYrvA4-+oj+B;u)gjG|f=884w<+sI`Sy-B3^v zxQquvxd-&9ypL!sB3;{=n3eeK#bDc#6vNp!JuF(%OLi>N19vW04*D!zeTDw=$0xOG z=iAzF30-75NUaa~F`@7zgh`H~6UlIYle*ffbkWu&#J`+B0RIq$FM&i!5s@CXHg)Jb zU%Eq?bkmvkZfB7pJ-|lbC8`NYoK-?ftXpu}VB*Z-Ar=WjH=3!)Xj}n^CVhLlm0GY= zEiazb>svNzL+X?&%IPy*v_|CzkMml5bl4LEGLzM9s+w!!tnk^1WPK5D&xD|pWsvy* zSQZ~H?aqL7#{K|7I~;K1cl)`JPFQ@~!td^}OlJ4DJHwUT2sH4t#RI`*{IC+61w`O^-T%|2*JaD7Lco!(Q7!q65Kf;tTKPZs)uG z{ci%Q3&7ZJbN?)$y71ZTCt=Fg~(_!vI?h!($2hT3Tz- zY?DH#qmKC?`tUrGFW^)r06{8Gq*|Ht$~84Du_-OhzjBE7!_gRRTN_TZqT|f)o?Lsb zgO?4@T7pvF#X15zfyR{mj=_U<3=F7wD$W81reX2?DX!=y1sF~NVn-L1ys%jPV*{jX zVS?gT!SEwhfOWMhZ4aroR%$l-@mQXua4jGmeJg9$5Oy|;k3BCO(9kc3^~;Z3rzoUF z&rnP<^4H^vOG77~Q>+-6f?0U8QzMj7I<66EgUG-SO6=NOc87?N} zOND$2`d(+De<+(0CzHdt1hJ8SB(FF)3<)^DSlJGdnOH@j5+QIsaDVh71W9`St%kt~40> zEBeZyI#;O@dz&Px=vlPsgvFX%-=P=ZtI$VDAuk+f%idAu(nPA++q8SnY1Y?yCL{#V z&@+rKADf?BZoD3yC(IigWiKst*A=DFh=mk6)#jgjqyz{g+NEGJ51VTEIF(D+%lrr= z_()0e!1xp@GBaE2FWG_b>{>nfIR3G?K&&hB$CLB`?S5&Gx#KG3-199}zx{jt?uWnC zaJfeh-1}Kwcg1QIuu(;jA=nLI9y+y|;;I%k_cv(W-RrgdScV?_@xuVv6sq6A3G^?qeAcwWVe6a_~+Qq`A4)u3A z5X)rdd2U5#4&n~Pes0b}vFy2#=wTDt;hqe2R{ddPOPlBEiwIMg4l?G()sj+fwPOMr4wMyT$*Yy;X|in-XMwilwe zCsS;WISpu&M*_hMF=1SXCYWDpNmv&rUyw|blSAOCf zI?ynzZJXC4Wg@5`IJK$<^Ez*Y{XJLRsI=5vU3SffRo6?w{JCna%U?#z;2&Zgxl;Fi z;p5tWNRbdEgI}CMOXSuc#@ZA2fJ5+I^OkaEA zOjQ&Ys5k z0$fKUKbl4g77z%74Xy~bW)SSlCMyj9Z(3H~+9Dg_>8w*B;4FBu-{WFvp5!v|;7#zS zUjz}C0oEDB=H_{6fWpx3qPndC55{smaiT&sw6;u$3)78TY4aG8q^EZsQ3{n>{^9j7#ejr~LN;T7 zBNjooU%yJRbh8*5qavFu=$iG(>ajA{aeNiII98}IJCROL_c~syk;Qbg{Lx#z{x)n4 z>9=*8bJRgc93QkQBUL?UsTjaaB0mbWCaL1|4hGQ6J_S$1Q>rSffmL84u$d%re$Cf3 zFf_uooSOhl3;;;N05yK-1qZQDdi%HUD&>C6h>3)Q@W_lRNLA0dIt8aE+q%X%#A<{{ zaGGl~1N*}VV-e#^IB>Z5tj#l@cK(4xOs{#+#?W$y1vg%fYold#Do34pkFnRYH59bxcdzZ zy4PNKJU>k~u<$v-DewPow;7w_UU%{17k+o2)y~A)!@Eal9egzZ)$ ztO1276#m3hoM82LW<58Jm5;T)WLgo3psBP@i|5N{_A*x{rkQJKUM&@C_}Fw?lPqK&7NQZDR4+un zYln$$ca%aJyVm0{LIG6fP7qLbwzJvU0A$SCXRz~NufO;hk4n}fXa1&tFD`}!B9nl3 zZVA=y!^j-`VWE$;)@b>o&uZtN{-){dSY7n->*YPRR~;p^MMMWbK$C_r0BdgIfM#M@ zdq|o7_4P6~0gqn$A!$E~K$DT_3=rj4(mHnwf#JjVU#j~b+oM^6g9pAjs0V&S;ly3R zdO7JXGBj+eiF@?>`*&+eI6BwJbk$Kzx8?FrD~IJ^u<_3d$8>ypq7#+}=D8jD)<(uy zRHi<1=Sn4=!$)(1^!8US)7s`rGF({pwbQZ|w%4CA5x{ylj90E{7pFN#>42`AHf>dH z@&WBw^8tPMleGQhGkopeR_aT)Cn_~7PgU>zjV@M=i%%P=ORSjim^^-ru>ia3p`lA8 z8_G27cyU3rK6KLx^!NCABR`42PH2$8GBSOM@(Wk%q2K(kR>JZwP0!KuZGD?w1@9Raaejz zJgyiN5&@Rj26#`_RDioCVmWWHW>|AoRg-aAbg*q`by2Z;V5J6;!kFcs?U$AvY=))G z%*|H#@}(3Vjp#2gy`gpM)&u&w*w31{Zau1IPb}GYP;HGh`j?N~sa^spFXOPEy>{2( zpFtiLsLOY3*M1xWs$if4sOt8EoSEW121cs&v5)=>+Dyg>Y zNNuQWMRt%%fn}}^9X<$n@Kec|YRHK)r={%#TyNNNkxrMCs;B+p+CpRUromK?c}H@X*lEpk>Pokef5b@5?#R*__SCMjf_MWPr3MhIX(!BT>U(S5FbM#;QRMDYxn2_n}ZKrS+X zyPtSWv$$SFp=C`4Y<=Vlbkdv4L(_Xm5i8cgntQc2<1+Qe^@2et>}sL&7>k~DfC?o5 z_0rnZx@&Dl6Ca-$OlLdn-`M9mM#xN1E07nNtu!Pmy{sEU9gqcmegw2+B2$M|*V(US z=~(Ll?4o?4l@dFRmK7_v!E`mjd|$SeY{Gb`UVp1sb;x!OG|ebB7|St=VQcE^vHYX~ z#p)up?P*qB*^mmaF2Hl0>j>_$J-Mm9i**j%g$3D&#tAyH)I`Fu_^_hMc69bP-~J&r zJ-<(-=PIaoh@_1-MXMB>+POChz#7I0M5=RT71VAZ9e}+xQ{6dIt6naqrMlw*S7T`W23X9^ zPt*f@6du7s3>dY|7Z}9m&IZlG>tld{?>fh#Zy@UZqAh+WK;r=9jQ?ZAc;+;zFswEH zxbtU10;_NT?k{RS+DbKEk8aqUt(BxCf-5KW4qbD;{vGyElAiU{F-Y2|)Mc?mjBa{m zsgA)i-zwPjlObq(fO1GTpyBan&CFk`WGcsZzc{MxY%Dr?ZWQ{+Uz>OA^rmZwA&Z|GhK}R zZLi~gy5Hv?Z~pbz0(lV!#6X#rvM^w3RFUiK#W|S< ze-9qdXIKn)d4u=wv(IOToo{=*34CS@ z0skLI1Oe1sFtQhSPGQZ!lGcgLBn?)?W!|vX^um}|vyk&+!&)ecG#P_gk@yk0+Gp`a zN`NkgVjt6j$GAnpFBC8gkP2o&v=*1vWWty9zMp{)&W}Gpb7X`@0Wc0WP7L5$XRQge z;`VryQ(V6g<{2~_8`KbUJD52=2%8fy!RkY86|poM;gsuFKZc<@?pFW<0!6Ive3%14 zY`Av*B6!~j(u6a-z7GWqfoR{&OVbCVZWK#6bFfk4Z|W0B@H^K<(1yza|E$|xFyMIc zk+q^wL1}6F+_Bv%d96oh--QiiQ!32KmA8cyWn7$IJF;K1mlU(!MACW8U-5LZiuF%a zS2{1xcOEuIs>N5Ua{x`SmKCRI7yyWQ^>0J^%(f&w-V~@-)}0JC#dEAVacs1oxMc;O zxg4|kO!=b4d*j>qaxU#v))kK^2?q482=uirCE8L>(029hsyzLi3Rj2eWGkJnPDZNt zbd}b9^Vjk`^Hl}+RKr}2YGct-r59tTbM}Dd_Eji)Wf)9UoPsFcF+HP==U`Zg!EtN* z3yZ^0Y@)bzM>2DF`3gO|vrDyu4X{v+DvQ2NPfVl{q?97{>ZE!aMt0E==o6=?xJDHe zW0^!MFv_f@JYCwnW;59%T1%g=VVoJ$L;+|tzyi0JXPt@3{J+O_hDeLkpl{6Nn^E>ayL0}r+)ghhwuSPB36r$3v{Z!X{lk4_q6 z8UPwe3ONLVWEN)DvXN^xU!-@BopKqG2`_65tl3ysotEWiYx}Y+rO>{#wxNn{Z7@tZ zIVw!~2+b23b^p#6S^qsq_A+4)BdH{BaIBR1m~Ywm0i7?m)P4i3RS;P=3ftmn>CGk| zjf^PNm+JSPW>_l$o(bqqmFua;X)uwQq)j)h!QrDt=POHj9;WoLs8;_ng4lTmTC}CP zQ%kbqXy~z8HFdRQU)cj|o6*!K(gM7d04Uf+7V!e zQ$t|@*Zf=;AAMfr3lvMm$5XWeNx*VMRXlT<^=AMUaxMT#O$pmg7W#ZV-6H^(p``zV z(r6MvDxCP)1>088IO-WeVlbm!&F_)D26P3TlFqSCvA)g`G+QtdMD?aG{_JL5nM@Ji z4Ch2SD`9Cx3->09;A(X3)#-G{oWK$bpHniBIo2A2Q8d1nZZt z&r@C;%~g<0ne%{Uv1Zr73M1Ef_4U_v<@%LcwQ3bW&G!4hACdmZ8IX1qM@;LbpMFkt zGco%9_Z|R%p3ww_gnq2Y>?*9!lWKzC@&HbKd#1D^7dcTu2F@-pw5@oC_mZ7vJ_b`< z8$sdt5H^e_8)?%VjGmNhaPascEll6VSY1WHY zdKB%i$q$o|zBD&?(EI}LZCq~r2~r|(O9~4odq@V(HFD}gQi5#2v9rvrzMfv)dg}+x zRKPYb;0W4NYdIMf7^X9|O&TQPJAd+&o4hf}w2t&y0Yx4Q12CiNb7j!JFa#;dDm`{m zBbKIsg>7T7rZ55d#A-O#fJUQ(^!tEXnT*xVZ4CN2MN(`Lj9|EjG)q!41C5#Ah(0Tt zba_r;k>V0Ub^O&=h)z8Ez-=D_IFqix2QMQ7&q!$ZakRA22~oTj#_5Q8yDI9Ho=RGu zg>R0U_hV0 z9q>=bOAS`l51<)F;RCo@=c$kk2pt6gvKd%0806(mx31C`@4<%?S%9V+U7z+|^Pf`# zaHm>*6|1#ruqd`v4eb0Tr6ywMZhaT(e2158MPa^s)$nl!s~v zZ23NbHV^U%14WY*T?L?R9zk>Cfi>tR%@>IY^4KXhL)a_z*6J^haE(HPux`oHC2ShU z4jrZo&v{bId|)Q$G~LFGq4OuwH}78`45`B+Ne3)C3>-ReXUNh~f&AcC!*2#`C(#sH zv_)9KZGcFCv4KVdf~EyB>n+<9>@(Z7aUhjj$eI(_02obYX^-bW^WfF=Gxk{iahv&8 zE&$2}S%AH-y_Rh}qhu89^O+mLJo9=%O2BjNb$u=E?S41b);_m^+J(pP90zjw+kV=D z>42&IKL5D+s!A4Q{%41~pP%-;h2QPx!td@u{Kr!5LSddqTZRKW$GUEwAOZs&JX2l*Kn~1EygMVl8+Ibg?n$vtwn2=!nU6C*a zO#?_l8dJ2%4V}Rj4xeMIcAcQ;D+JSWUszXXcf$3W@Zx_N(Zgd*&eO-HOzTEIhA$RY zem)fX5oU)lKL*%XMo23K#}Q?tyEU43Jc5+h6lriG?S8&*#1w%npvIWrIj&DoG}b^P z6rzzH4-T_F;ppQAVf$y$YzH)=u|*=WFs9r$XHU92M^F6upeo+2*Tm^2y7bUt3I;b9 zOPZW5SpJN6E3lD<5a@Vry1P)dZ=F%u&RPZJt<_8ubE~bB#vL_u&Oz!_xLq$Y<^yuj zHImi%`Af&OG<3TtSaxh_z)%dSzzNm%&_NDw-R#&6+OQ1ks<{Tdb6~kLHRcyRO|7ll+AhY$CN!Z^oVv1Y}L}V zN-ep(NG06_23YiHw1xA5^9$NT4-5DdASN6}ES>_aL1a+L;g$O3NSuZPvNTWw)w<{i0Z0rtjq8#P1?V1;d-e4zKYs^nb{)N1Vl>V^ z6$Wh{I%BK|wft;2%W}f#UxJ?V&2Ek3YEf?~Vg6@%gJ6OY>quAAi7t?ob6hvlD&7y7 zJ>Zq`LBKo38fFE)!G5EFJ<|L|qgoB4+t%35Sf!r3M=E`-Mz25hSM{<+M{$l{d-FNP zfBAci^>Ae^S*?u1ECMH5gwm?`FF*RKKK#W`>6Wj5ia8prvvoasn>N_BB@OCn+{gEt zReB6ydZMDQDY7Fcv zl$C}Smq~ZUmD^N$`joQSL)ww&HMO=8P{it$SB@zR`Q5+XakC?2o`3xv2QcGfv2Pmh zR3G}$)~*iLP;|;HfQ)tu!T23;l9H398?U}nFTU`KO3G`TbZ;8wJ_@3O#b3YrpQrgf ziO&v@!q0g5(j}}z)VEYtDIa$Nb1^w~yd1z`ZK(0zEncTu@W9DaWoWLWX(}70bN_o{y($b`~x@>FhmCtk1aD5EM>ObhG$~p%F<0*E5hnCJ5^>(I$3=&pb8P zJ+GN({P?H(DTvnTfdte3X=D_m36Lr31lq6;vUjkqjgM2q5jlwll(m?3BLL7d!rm6d z-Wdo9hc?oEhDmgnzGOTtg*ebpqn;(%>@O5LvKB=o(pZOJsRNgQSsZ}o{GwqPv$SXT zgz~o`p^T+N77ikzQ;DJ(9Os={7g)qONUql5cCItoSloa*z%+3QiLl-^yl*57H-LGD zW-bJbfe?6!>}O+L{YXpZlodVZ3T8(D$RU96Y>2?_cJ#~Ol&jXQCD@u%Wl0V5U}*7a zBUl{N$^Q3rt`>jb%2)LQc6S>BW0i4fvS#vdrSMD8iTCJ0Mw63>`YN&xQZw4s?6e5g z9w=27+1)5yiq>ujRcXn2G^c)OmT{ipJdQ>6V$&I~>a)_uY_j4w4x~Ul+<52htW!(r z!r7um^xSh3V~V04s(DQa**u&T{5llDx$Ct;(BUMcm3=f%f*hy=m`CSo+cvblWS0WH zFxd(H%z4fQ*^;_?tQyG<^rGkWN8aXvxR{_|w$I;7$27ValF?h4SAY#+r)!IAjwr+a z{i;9JMkh#`HY`uToykXME3rQdVb}8z=~yr40CacOAAQ-{A{}_|9o=!)o!a~Mo9d_I zLrP{AmJr=~`?Wp#!1dSYz*}!a>tZnhfHH@HZYGme@<+tSpljO4MuhibZ;z65vPpT- z{~CRU9mc|rQWRtw#1S?#V}gtpt{LuE?uW0^?0Y8^3e(#^*r#K=-qIzXyho7rYO6T! z7?{B>CU0w#&L24FBE4xAk+wfHD04-TD>4eC;AI4%cMxsNf|#r<r+5z&)u1FTiRHO-dMT_{i2{(K1Hb zh&osbVD7y0Lps~thuk8P^JW${q=JPB zV5?%B*Rk63_~!uX{8R0Bd+ao+XJc30ecWcxgB#)X7K2iI{yadn&u5jj_H*I$y89gX zp8x#zy%tzkd))j#i-G5VH|_7j@AIFAG01&(xW@v(7M{0ozx}lLTYT7K79an3@BBTB zA7hZ${+@N<_riJSHYb1JXFyYWBaETKiHA7baeeE=2yXGNk` zjACBJrqQ+~q@VRH8OD~3G_{@t&5Q?|amK`0ZGy#Dp@5ZXfJuLKl=fAZYW1pg73Sxw zl_2Pf^=oMj+@T-*?wr~>rmz5;Qxj>`Wm$B&s(Vkb?0K1jDXRJ@28oW2(ZgT+6*U=8 zah~FI@kKk-|LR_~z^E?Sco80%0jfE-pE`jwZP|LM3X8Jz^6P&h{rnPZFzNP_Z`09` z>h!#PjnWh%oO+2_*5S?p_L0~y+8akPFKuT1{V?!q_I7>fW5d~i&EVf3aNmujAQ{FL%eY5Q$Ll9S_#8NN(4~#TVa{g&SEtUN2Jp2|xxWoUAX4A`!S@;Dtc_f= zO&6_&B`gEn=Ce2XvrqP+(T!%@W$Vn@Qo1h2p{?vg@)3^S6eir}CF@-Ysp5{h8h|K) zBVIPU_U}TN$wRvepq+2i9fPN8+Iqo}s`lJd9 z^WA%{U5i0IkG0wnW1idiovR3Vq(J!`)^JD>f&y5pk#Nn<5UlX}ix0MZ_5`f`7>|=M zn8tLQ3y=le(Nxb*!`ORSBg}mzHYyIiek<1*=Nk4o+cN@vqhUt}0I#?pz^a-Z;}{y# z;P5cc8`&$yTP&YzlXB?_EbNXWK+ry?@JgpEj;xeK~S~Li1$=8xVr{b@zb>LIAm`SQ$3b<~t>sLaA_q&%9XOb~S}u z1PInyZqMJ|)OG7Os+x2DyK^3W_qsPYH^&qX*bHE`>Bc>2&aYb;Oq2A4Ocnc;YqoQ@ z`~k>Imn^{nA)B!|sphh3vIzL!QdA$C!kUi1{D^m0sq8taJg*8&mXVCBLeqX_Wv8jF z*CZI!E#Z1&(v8d%3W+B>zX~sd^pk95uK|lR|<^lrgfX? zNqtEEq|0)0a@5t?p?$mFK+uh8ZA%ju750K=18uOaE-i}wwYwKjJ@(y6KyevVadp*s zt=xKv%1$(}dFBDW%%t6eNjgTq7dCo-x^ws^ut+no;x5Py8end7PFJX$$i{>d5k%2Z z0MwI5P8tn|#SW=(m_oxxO=nI~B^a-Q)oV1++NheU{iL@8wG8c1{;Cz&d9lq&J!4f5-l*8Z|+^;XxD(j(=94MUhiUTlR zv7~G+zoU$j$TV^RXjK*zJVCkOX}QJnOCV(%Lbog!Pu2=_xASd!&2PdMz!~%|<3v@qI9Mv$ zm%%a%I}%DTW1Y`Nr>RnBWAgzWx-MyGkWG4FV9Y+#B$1*`Vq+Z^A6C6m>CC30a7lFZUB^j24YPQ>p&?0$G*z~U^TYaUei6F$J*~x zyqSBfJ)iT#P40HP&;HHJ4(5NKzm3=9^%w4+WL!Fcx$rzbrvrw3Eq6O_?ta3)+PRqj zou7PXdma0H?(y#X&7T?fHeJ{J&+C94i z&}7%v9sC?6bsx+4k6-~=Qb4Ol+zm!rYUIlzFpYlO9}Bh_=B2ric<^l{gilcypVbe|6H^<;km~_cVr_hF<43X0 z!pCQ2p)lXuD1f6mgqVcM7;n=(S&AuwG3Em}-~}0<=xQnK0*AScWd2Ld|95tDnMTP{ zcrqvoAjtE=8jmtAG}WpT&mL7jQlDs2$@^+p6;S;Lk{NHvf>qE>H8u-mI{jrkGDg9k-cxW$eXHV(){SWBNK07s< zD%Hi@pts!W~%T1Ll9RShj{@Bk3jPG7*_D2u+O->i6Mh`E-YDWpUL zdhXq7MG~B@L{fDNW6$TJm3nYlrY4Uc#D_yTr zQB4TMdQK7S)^!?afqkqo@&rF}#$E&IU*E1Fd7E0C8_r9xmByEXGjwe4>)19?%t+^} z__gcg3)r2EO3)o&_zr2xBt@`yl$1tL zcOjs@aPm^qX?%c&+rF#;M`K}qnI~DfIqGa{C;Ql<4u0A?5RJ@k?>qb5dK4KIqf58# zpg_!{S9k4Hb$vbFs_XR%duk>7Tq40iIN8l}HEpiCyrBh6VrrUB07@gta#@{9An!N9 z8WRd=9VXBk;k{##-t{{sFdlcBc;*WG!Zg-stbftGr=?z70fQExSgY;6hI*Bkopm7A zin1)=GdF_9#%AWDSJ}89*!pf>uXS~G*mF@&0U=abRlx=KC>;Oj2v}*WISB^v$H(Gc zLZQ;dTQ{?xHmDn!;1t=-WlQoeoU!>IB!(3ZkOS@TT`0V^;wrS){$xg{vFI8dWZ(2* z?s48cFxPY@ae^0X{9fc#^@yEkgRFJ1Tw=|^O>b!D0W`vniRqL7&VudMaQ<(L?sSy zU~fSSo;sqU<)eDz0M?4L6-tUo)9IQzq?GtQXVM%(PvVF{P~%P1uO5F_EimRu%l%bL zvxmO97JU@^wz5+VDy=4v7Fjt6vK7l|?>*Q;8{QzYBtCR>Yt;ka`HsGF_g8hWqEfGv z@6+dR-LBI;B|6KR-Auqd+J`&?*{KI&&bO{svq4F!N9J(Nr4;^?QNLl+Z8Sk)9brA1 z!j-@z00aFAxKiO!PW_E(rYDSDWL=6Y!WD;gVr^0}ScW-sQ9Qw6FYG)`ZLG$KLP&oa zafC4r#-|5xX&8nSrDm&%NZHt~0MdsMR1JDbVU(RZrM!#`)mBz>3W<8q-y|m|Y4@wI zLiLh9zy`rqf9nWi>}e0FG)9@aJ1`RGe*wYhKRSDOEEF*xE|Qh2^3(|;qd0ZeSFus} zQvp~=1jgj+=HiDjF4LQDNuTrwITsmfef~0YnS&uP9EZ)|Y z#)paLPlZ}2n_LK!w4wgIW@omTJdllWW!DdC`L00=V(EB z3iIfkSPcG&Y(m4AXnQ=Sr+9IFt{9NVr zw9um%Es84VISR9^ZD24giZ5wTe**w)^yX!2EY&Q46nX~wovL%#39G*IW#J3qJ6amM z69euM9`B1*&o&l6BJXjo-L&blSO|<2mA{Nv-?9b8*`$in0Jlg~H*xP|xg z58`TJFdZMCuEgwhn!;Yo+f=HQwJR}4KgR+)uTc*meQSU>lAiG+Xt`_*c?iCISSx&B z1O4!N^hMz6!+f8mD%Xe9lh0Jde2`@U07+$Xb9|clHqK#)^^w`}e8vJ}&r2n$MY=N= z*eymdYzSk`M4cStrprf9X&a^$f%z~mtPQJGMhDsLiw<8>;eOL-&B<(x!R+}`gvE-i zAWYor30!>vA&)+WR*oXZ8CpCJdzmZId9;?bB9nFK=8P>iUqa4SAdL^mGE9)InWP$c ziquv#8rK&|NpD{}sEuLSs-bJo`7)TK(z9B%g)B!;n11!&Tl9s?UQ*0AuT;ntKhvi_ ze7Da3X%B5O1NE(wC$$F2&38Xnpt&X2a9$eax9e}(aP~hHcsb1-vcII-T0DQ*;HClT z{h>o>=Hsw1Aez5Xn7LrGIDXg& znrAV~3V;RDgMr!0rj5uD8?`XC5=7^$198OrsHEi#?MdSpKU3>MqtZh6a_}ydRse`Iv@L89PP#Gl&nXcXLwkH!*VGKib0o{GplUI(A1d81;9R&HA+YdA`Ncy2YVzy^5SC_t+sh@hf$C; zLe|osJ#K<=*#?_xzZQ2ZIvCczn0Mv}MOf@ys()1vo&xqs$CNv=?4nT?R z8O2Rev?LG1TCJfDX+&Wm@7?E!qDjD)1tqrrG(tS30Ei5NL z%`|J32Zl0{>vOK6oYuXpTeAeW1oka0p$hC|ocVITshFRl^*g=E_#8BDhGiz!V@>td z`jt64U)4ayx*yH?gw}6ZO;(DadePwxjYGd$tC5*{#V(;Ov(IumU_Fa{RT3neum0nb z0v$O$uKh1}=;9q4APtA;GhmrGfH84EUw|k47)C^29}WW?#2gw# zD#4&|Bv~*diZS^U%$aUBjwwKI5CKFN7NHSz1hnFOS_QLE8|ud@tA%{x*>~Sn`H{og zxUxv0SazJPuGVHE#-aWWZP~Ozdv?C!>|CY+X4cknaHt=^N_0%L<^y=}12Olswz!mZ z1QFsa8$vbC1WT6XD-*zL8XvQQ>aMOtGusOrl;8$dHy_e(I9y9}^VNOmw40nD7yau4 zUs6I^s($gAF8~N>zetoF!0v2dl$DAv3af*`dk_m|FcIMhX_*-obygfwkL-QJ-70U^XH_ zKrIpR6p^-v)X6MGVFqre(CGxSfJGCG^r9z;j?3jb8G}nS$~l;Y#hPTH7=w8q8?&l) zOoo}%7R|Gwz;ef;d&YaPv>c5h(L0NiJI4e9pjaj&Klu*E)((*#3Ph@~ka}M@XZF)N zM;SPrcM+HeuLhtT5H(N;U@(AcZGWw$FAsJ1aR<-#zyg@Yb)Hq7FKFU-u8*<&X3jhX z2y#G`@nzm|4u~=?-0Sl^+lbw5+{eqii7;c}mW9L4r@M{E*=yTpbZwB`PaeziIuG_P zyoP%{yKVk&_qi@SW}#5cfVg|k1)y%yYvMt^enL-TAf;!(oAnJ!M|TG5?*+p2WEe033Z_>r*odH9@NEM9E2Av0|+{>L=9Q z$Q)&%nT36eiqE0zQwP_GDp$sB0Db6(S-56N-3AAzlLqpqs@SSl@&B~oh7Nr`remXs z#5B0GXs!G~^CK)?(SVcbKE5{#m{DY2fX1B74b~s?V)jr(F%FxA%E7HICRZ_b*BCBK zOIiWI#8j_Kf7)XgAG5Fl(_}9KNLhIqmouiJg9Y&7e&Umyj4`||1M%D0i zu$FxQJ$^toOlzMyN$2nF`IdI1e_sPXW^rA0pW;?srTleiI(Xnwovngtxa%@LW2gT2 zD<9U!0E3a+U{rE8=}>hpX|hV%zou#?sgX4dtC^7iMdRZ<-N?cn5Q!d-PB}w-H-ZXZ zPdIZROvlYS35Kz=!B^YRN4^H*eQ)Qat_SE26ff1U{U)_O-mBLE-ghA zMwXeG1*>93Kd{hj{>Fxc14@#!qiES#q)AwlI(##q{KS8$zo|-*iTKj?^f1P_lss;l zYdOL?9LejA5j1qduCYwO(X$q?wzFygm{{uo@v~&crdZp(EJ`afy>vDl)+hd*D(lu! zHI$exk2ESi+wCp*Mgml)d%S2^(c==3_#}|^VLj`_{63HZ6#4YieG7deo110!)N83s z_y_{03?vLomjjeLx?$nsU{OWg28C)Aig@{qWd1R%M?NuuPI(-CB&pRA{|Z;Asu`Hj zxM3ax@T4vzEe$d7qT|@%`L0wg?QKdUqcI9#onxHDz{quRTO5U4-4or;cFHW2obwLP zw>9kO(W9*W{_3C`<2ZX&MjEE?eKfQIWFUZw42SQubrWSzu`G-i>rJqO$q#!wLeS202~76FXP9Jtn)IWy7a0*Fe1cie z`~Xga1S?*w>`X=x79K?-fnjCkEayGIA5e&1HkbtV)Diw>tH$9V9ygVKzGFBf9O-h# zOh;EY-x2G>$WVNKS0eSm0byoX!6^hf?7NGPmk+g7eHGYk&Z@r!{VeUGTTO$? zTyN`KD*xqZj$0uUClhsO=M$`*&18v^HP=A~mc4Bha;kf{2PX@%-(-<&ex?v8@~4h+ zT_1Y4pYfrQ42~c_)tneQx#yC$Th%)Jm4>Bx| zy^uA`>F8DSo5$5a^N>)ALp#Y9g;8rWMnC|8%KALU`3Adq0IL+)&9I1c4d8uCv90aC zhRdw$To)~%&2b>eq>EsWT;!eIymkoJeionUKE|HkBqzFuLaVyEGIcgJxWzh>Cp1)5 zxk$&8tyuT*{LF+!Q-qfBZ83O%6ver!BK@o4KnPc#H$7;LW>9090~Q^h++^eP@` z*0E%gMItXJSM7C;Og=_g&lssG1JX=lfIy}(xvj_-SRAdg(xNWY;P|njM<+x(6JTFJ zT25{T3(hE%HY_77r@10bpvB@Evl9NJc>1m%{g)p5$({0k=FfU#f4%ydQnB#?dgU3j z8%t9oHWU&4Fbnv)h7tisb76hDXVpnLuD>Ty3F8bCu(laoXQFW>Xjco}I}X2HMpJ`s z#WuC0BSkwxrD9JMQhcKMzyvA<{VAlPl5-YN$|~&^e2ZwU{hR?!Lna2uJb1pEewCtc z76#lTIRBF|00&kH4?tpk7!N#jrj}~-Fj;&Jq+u!IJB0|FN!Z8031%Y!nrOCv7`KNJ z^>Dr%qm4C>7kd+bHXMI8KLf~qyq2>iNlMzVow0MqN*b$anSx2~H;t@$z*?5bfm-+ayw`=- zb+7M0@;obRK-q3{Ko>x3l7eXiql`bheF0S3``JS5{^pMbkh}2N?Q<+Vo=&(gwziT`QvOKtPKXf5Z{&45Svqv}Y&-omebsu0ia6=Fp@zQ*e}hDLUDb z_vnfhN18AmW^znzO>Z$SX(EzTqy&IXC@HUKfK@lzuGzqo8mfg|r0@20Pdzmnp$va4 zY(T6N6i*o7=j1bsh^zs@)_KNswiZ?x(6@8qp(x0@?OErp1<8rw`d}7FPe>-WvH7tc zEIuq495dT3u8Z#^n-MGwjhW;Zo6KTIkluBI4JZ(6nRt2H=@u4?Od>i(lQ59sNhY6( zgBfPCWNP^{pGMK$&C&QH2&*t3ifz1s=>)}tbae95Q~QRreThH8T?n!yEWN@jC=5zh zj6b^lBiU*%yH$5>-=(=1AEsHv-}K2pU$0MI9Zx5&RSLQBRW)B$sgH$~uqc#LfqaAh zbY!!Jd(P6`Z@H!@BBSI;;iGgzB5nEh=}zaJotKk^EUKCqa>7;vHdz)Gz{}R{s~IPx zV_}O6Nh7~;<#$zh^pFC6wMT>3-H3sCv^Et4Q4AHKzr4H)-8_?F(cz&m(i)&QNZ?9-(iA{Cg3MiU=XRxehp5k`%9vruTr*cf4bNTim*QnLn; zFp4FGPUZBuaSDY=@8f~pH$*BEfR;=4Dw7UyfdJy*0D$aBjQU19VCD&Gne1j=6cz*% z2(e%W{ELtBbEPUNJ)_mDS2Jg*d*BNOV$g3bKaE-HCj(}|q`7Js>*YtveE^2d#<%UM zqev30-S(Pw>u|pq)9Dvq#wN?WFX>S~+^gga#w`q)X~b{7>@u>PJ^e z>zX+L^%$t-T3F_6XsBWFX=C3-jso!ZAgLQ220hx<0~C6hV?pd~fwAZ!X}=sy)qE5< zqOz)u^8ncNFl zG8!39liV>pp`_dbojP*{f`DL(jFArjeVTdL(MntTn1X*eZ&UTHicDrbRGi9dhXC{J zXJdf=kamL295kf8$gooM<%j=MFCBbak39ag;>iSDw0$$yiRJ)9U=!Qcm{LRv?H(pnGYLaq-T9JkI)3J_v zAPC2-%%uv5*`UK!N7PPm8|Tz% z@}i3pi7%LtQLrRP0(xmZI7X|yW(vG`v%?48qk1d_-@GgaCTswaVpdL`n_RIm$#{$g zlDcklfUvBk%-P*o1m_Fu^X}mjZc+rog1XKTOq2j-eQ$5K)7eZgLBi1|1tNOxW3vim zGV?9ebm){4)+|8)&BSP^R~CaHb4i{`Pn?0eCUu1v52(gK1l%#0i!-xfO%O^$^-nqG zhNL5#Q7?M6V50w_Ay7Ww#UjrECXJawn@`&qX*AnP4eTsFUfesQ5Htzj`o<&L`|tN? z+2w19cv#%hX@YR3OOt(w>c_HSBkEZ|@Z%#go{RCL!^a>#uuPJ$2{!ORooH;)pYHpU zwqyBHRsD`4dL|Gzrz<`ynMIW1lDKB=0p#WpF%q+B3a!bp6Ajw2As(oM?#*_028<8i ziLyI@78|RjzR@x|(_g<(@LWz!UT4U;~z#VUeD*bM8;nhbcyhL5CyNZyy|$kNS= zj|l**ErJV;1Pp+>zZsDRRPA>=-{u@J$?I6!&um3Nq%2ORueICx$9FXLW(MG6&s*r1 zY?IIaHUMjz&Aj`-JODB_)xf?3#Jr3B%}cuXTwq(L0gCQ3aEJXgu*eU-)%@S@-^Od( z=Uf1u?lFs>wnJ&zxx*>^=*6_dt6U}|GA>q2R#2ot z^?k*OeOj`58`qp7l+b8JA|Xg#mW6j@iL5@EweiB}jpJ zF%9@6nFEq7JSGA_O6G#kviKMsEp@EwG&)y5s;e_%{Z)N*kEZI;bR{iS47$MKw2ew1 zsM4?Q-Jl=iEO79}3IGqm<{(k!WRqhuy;Ku}MwP7-?n$OSrLO#Q0myuNVH@=VIw+v9w!L&ac^XVDd!h=Y2aj&YvuT^e+r%WLI|K?Y-*|( zpElz3GkwAbzHUzR<2;32|z21r5MFZ z{b=lB(8A4djRvUNvhio5*fg{gWO3pE9ucg)b}cRFj$xx_TEjl_c))D(Bz9sA0Q@wH z)WR!;G!w@K*imE}P;G2@*dIZ*mevj`p>h^`A8TsLAVD@3z~cyuSPN&A$a_q&*%@(f zc1xyA@#VZEWYN`*9`sGMcx&@CynmET0F+MQ;^c4%@&}J%IX@$OmLM;wNjBZ_F~;gB zpxv*PwFK7$J0XjX%@=K@ST@zMkj7ja@E-uU4a2CKMNkZyy<{5NRM*wQP*Lju12@BK z6c-h#3oEvgQ)iLoC8!3i>^JVaU&Wg?($Oo;71q4{&YSwqSH7zg6nO30y<1<_w9R^ z&*ra!m@L-fNtz?vq+PpS<9#Ta27H`6e%x8H)z(sM#{Liy6#<}2)atdXRR&RIQG82l zgOe?+UR{jTuMgnYgPxqdh3gy%xUD{4@7A_Wn>VW%Cz~p?yweEPjS)3D#o{9ryx|(M z5MYLdv!57~hyHpB;1Woy)*u3&F|K(Z>}HGwR8%~N5fF^wxHAqO@S$!bfB@Il_F*zZ z_T8o+RZJ(DoP?h#O!F{atQ`cYg}E!awrK1}$!sPh@G<<*gBtj?y&ow6gCQLEr49<9 zCx>w<7#rd~g4I4`f^;nG0J!#<^%U|c;}yc9lbIJ3rm-eeR8~Tu%rTY&VFYQZ3%l4w zP!vozx^g;l#>GWJvIStDR_+2sYfj|T9-tL@G->D@0Bcb^$GEa43awq% zQYe}S@PbViA0cT|I^OKj$>x4K(#7jUWwW-gPN5EI1)j5$I@ENQ_Z!#SkA6dE8Y$>Z zSgxnE-RqsYdLBj1dm-l>VP>xUG{CxGHlWQraFkQsoXm$et9 zsBzZg2m+SI))sA9y9H}Kq$oo#kZ~E&iKtD=D9%KV5~B~KWa#0SkE$zqrM`IkC43hG zI2Q65FZ46#$yu4QrrTa`&2iX@9B`clJD6l$wt=E?-Ii-*%@jv=3k# zvjNdaBL0{-7!6K*E28_vv_vj6gBq|IZ`3_HqX8)NKt7=9k<3SMln=0SWwDZo49}x? zwLxzBmT_C$7^ngGsSU#G`%}3;QQNL=I``C6lv3ElVBlc5bgzMMq&MU{1fo@~>{t?#LPF;3MtXlhNqc$C` zMi$oQe$L_?`V_#cwbBe_g2t89YvpB^>yj;(qPZg?V&c}fj=1z{9^W@07;O|lxT>RB zpSbg4{m1RA^!llG))1IeimTYgUCP~EeMW#S;sI1+TiSURMtr89Nk+;vFwpchZ2Cls zqfHd4@K|5irwP(#z6|1MQX9dfdu)>#CcP2};15AqKLm&!>>q_misQQVxpZO_8ed}( zjI|ucZpkXq!#UShKrzbr@D5uc59f~C7ax`$wvE;Rru%sTfZD=ie_QKIR}9AZa<5O+ zWeqJX!jEAbOvC06lX~oDvl&KCV47VUd!QN1D)YMY0M!bA46NGU(|k7rvW{uxF%G~o z_RQzi-qRLb`)NVSg7uaCZO?JQ*6wrn^Ec!8{m1h>iyZCmg?~Kk{ofaE@M;W>!?5;10y!(N znWNy(`qrB!G1w1HdvuaAmu=#HiX^ZhO37SC5dfZkXhE|I*5Z@tB@Kk<0G(uVi*A9j z+{qF{Ti47rnx&FwY!ucBJ!JSyf_m^H^b31U*(-|Gee6k%0}`xSHzi{QZW&?fDnkNf zbB$HR<~~EmEmR)H;M5S(0uD|Ux3SR8k(RO>_>VbR_!zTB8)HIr2R7}lg~NZ8N_+n) zOv);W9!B61fwA- z+KrBVWW0?JfkhR7Xoj_8E*R|`%v_Y0cA&vzY|yShw0l$!y>dify={s9^Nv+ocJUBe zR6INson^zJS3$x>q*D zDdw54I+)RXPWw_YXfqUO2F~RZC^j&|$yRXI=J;Gz@MvQRKH7MEoBgKJWOGFa%uY*V zNuEE53I8g!K7WQepDzE|W*!}+1JxyZ@`vAEIBoOun$6#ee9W`c3X{4zI$g1>d1ue! z(ono1382jTQTNa{)~`37d7iW)Hju0{qbzgFzv0nIU8i(n1|DVoLLI~hS1y2Mexor`+=;%tyH(ilalsdr0LVhT#^ldC<$b9hWXJImtF1jr?2mMLswmMjgFi=f;1ybS8Us^ z|9$jfBn@#C$7QK0zQv7|+zf~;DhKzydq6+> z-uLv&haSdLx5ANG69l{i0L6lW0>C4J;zh>{n%5~vv1o!5>oVBU-iI|3=a@z)-7PS$ z;{aQVnMNpx>g~qj4^QY$bd@Fn7$ci%+WTZOvuFdAolUo_nmS0WaNIN~2*aji5KU$r zTIQr=Bqw7%Xo8a*an;;f4NxaTivy1}S~Bn2_$0_1V^b+G^g}ijhJJX6*4k|YBdRQ& z)~5AzJwuWgZu(R3OAxJMheu$G*^k4h{pjq1DaDp+4!qLe*GuyXI?7es)rb2=rt^I6X{tuA6U({-0YEm@iuT8mghZL` zA3>Jw{T|N2xMjV#{vZ>G5C{uC0-G>omSx1?t9z zX=t$DRjlV_WT~Qxg%mJljGaZpGo+>axzPWQu=4#olInX)@OGuwObtKO?+S+X%U zwrM7qW(*G!0)aSrBqopY0wI9_c`0;=3B4JNF~(pUW85uUmTXCu)wlQF>+J5#&ij4; z*^x(jN#3T!`Fo533CeDR3w+MGY8;0c|d5eLL4sJBzD1Kv6SIQ_B;T(SP=##d7>t5?> zxj-0^<1P898k26FBfVrk;({iW6Ql9^LHcn9V+7Yg8+JDuGoQQ&y;27#%lZS zogMblnKrxs(+&2Kx4+9ie&;;^RM2l>C^&QsD(8M?|y0JD_JI^1M2jtRl%FO+zLJI{+^6ngLeDks9v6 zlR>CU+-ETSH;=Vw&P3) zDo5N4Cr3$LqA3W73Y5vanEC>hz$=^<{QwAs9HL)aLSMLK?!eof03t-28kFl0!6Ik6mUaMc*fRQ=N z#Mes1P0v6b__uprQ46?p)jHOIGVZOC+vs&P$M=hT=F;3KA z2JdVp23QcurmlI9HH25J91d~oT91mgX6+)?L-evp3Hy*d&J<@7_e%oIA+J~2D_88o0MU+qG!!cvk@|z9+w(cgyY-`lng2H^@B)K;o&}2qOV>DQLMOxy zO-4Ll(sYo!17J+jF9C*8)=LgB#-y;sIN-rUqOh;BpciKFWYIkQjIW{eDw||7tgPH( zz2i)ji292QU5Mi$b;$x44R-Yr_C~^weyU;;ndpW3p@c0$VVERIDTn(_UMk8B9K%Q0 zwS);|6gm_rc7PU@uCabHW?77-szl`noQj8B*Rap7y?MR8`A^@&gbnWwt=(V!^h+f2 zE?HG|y6xP*)_(PkXKc@_<_X_Y{**Bwgx4oTF_vw07*kYUO5@(6V#K{zG;bbMhmm>f z#1l8lol&)6B)2U%3BT1lXhk?uf=FO6_cHG0SeWea7;;oKjmVyLk26NmHQ?}b3jvuy zIKObb;dy$gniM8^aWS$PFD@ZWyt!#`07+`cplEcor6}H?)J5L9lJYv2;4_DTU0X*a za%zBRVlDjv9qv{%y`ja0NH|gM#hM~ys7i=J(!o_;b1p>RVR8==0qcg=5MfLhnkCE} zDYO&k&f9@2ug56^_{vw&j*#uUau@Av%GRw%>I(;qbY}nTgMR|hqAC_f=I!r!06sv$ zzrTIs8(*m89_`{jBts%y84-q)202CF#7oLgRsptAp397aXoFB)Ki+jAR(#n5*ujS5;+U9M4 zX8-gLA0YW@*go~?uMn0d3?0g~bFJNs*9oIEdGDr&aDKs~AB)b}{8S;MF$G1|nRT?0 z*hS=W1hAT(iPR?J!6NM_Nc+smrT;J<4-a4zRnxwBu4I6q7tFX1SAB4pC?MWckGQj7 zk1^V9ltj%OIP;V9LvZ%N0vI7Ol0)@>A5(50N-%Pr!h|Z zbBZV`kbwc2ham%<3)+SU?rN0lnLw>#9?8KKmsbGCocT9SI|<`H27hv_gL5(}m}bE5jr*uapRcQvOj67lA&nAVuY%SuWi z(PQz!CFyPJ1QlcH17>I8si>BE-*CU(a?34P=M2&enl6hUcYSkPGiCGwwq?go2tQ;v%xLE16GhXFjHbrox!hgZVY8#b)7mtH<;{eYEek~>P88f|)niKn-ZYF7X1 zj(z)|ydUd_&^25*O}7fW$O!(oJHKgn{q!ex3{`=IypCpRES>C9YU37=so6~^YstRw z=}+>$#r7V!!oK;{|FEZ?IcgO(wJw~a%*_CecZCP5%*i}BG18>d4ZVChHUduyf728H zI$-OMf7^cjjd$6n=GIe52aXt??PpH*+19LL8|wiu&XwA0cT`&$L~8sP-1Hn9z&laK z)HHUw4TANMz4Z7~b}!=MqgX9rctqd5`h8eIl!WA`GvL?AbC4cSx9+Z9PNfbjP7g^r z>jHdu)VLd7JRgEF0%&0d+8FM7AKaZ;uNoU);5iCU0V)CZ;b4|clR4Uohh0Q|5%twR z)PN+}A?tA&j|eyssS(ymBNyX^{srX#1BA9A&s>Jn1r_MQkAqixj_0PTFEIvhh5j$+ zz)FfmAr|p0Me|TN%gZ1gqC+V|Syi9p?Q!6OQ&w`-49NpZAaGid44xYNt zNoEOja#s?77Ld#DXqzO^6sQw*!M!>_yGj?(HtZY2GM3j?`y~Go;57kiwO^EL)~oxT zS9PjO04`5J-|LTmxB@+oSN2bOr1kyf0M;EhWm~uN>OZeELAC3|;(lZGeN>j{f3avg z?_~h@l}!`JTfrzzoD;n!(RC81?>=x1YF|8KaoN_xi(BHk@X#?=yg+RXz5g8W zx1P2=JFm4LJ@O*`YyoXi4-@s0P1IL`=J9mWZ>A`ny6w%35bt`I4S(&^$bv01k>R1i zfRwJ~3fGoFhjvuIsu3ZVVq9lAn=mpRYuv+B_@g} zV|FHexeu@&hpXl#Bj&O!`{4mw*9~@X@3QrEcS5@`yob~1s7?~v#8?`H84d3-W12aLWSz{= zMna)4*$%vV7CB>9OGuvTKRY&tZTC8~A>s9Z{Ijz*0oNColZ{i@B?C`bFI?0Yj(Le7 za{CL&OJMw2k(v#>+yER)FA+8`fNeS8p%mv3)ETaWv1`Rs3_Fvk76~$5yePR;7E4_; zjtnwiHa6AL7z3^{kg}#l*E(_h2-(-DFbGT&DrUGwf4BucaL_5cEG?2$gfm5nUFD@^ z0444v+sG-DSC>zvMZ8#0yedm8?eN(y^jA-Czv28%adLA2=ekCYC2iknlJ8I@fFC(U z!sRRgbr(*d4NV)V>h!2xd(9qOhm+~PUq676!4EK}hXFC77|h{JxO)2zq`NLyFG)Vt zHEGtcb`9ldq4kG5q6W&9 zx7c6Y{z(iTc&D_Z6(|83hXb@XkDN?kh}0#F?s-{FChcPYJm9e|42v8Lyfi?zoJifR zv}GcRIdJi_QMbv1&e(hw!F&=(3H-rlE`q8th4D~Ir9OZc-cwcmBZvSsX`XvcoxKVm~3qpLrS1 zfV0VAz$8wz!Exk9X*=RNXVI@D;U&eMQ7;KrcxuPTaWT-x^_RLtptZySzZZu8U@MbB z+q&nYHpQIu(xVUAq23elOiNIX%CbX;pRj}bHeo1xoujd+y3Bc;b4l1Olm{A27UMp- zusr+6X$Qr*1@PIYabED7j01|sXpRtVYX$n24{xdX?Ri;f5#uqhsVT5mzv^21#23Hi z_{4L7@RsHlaEaGN8s>0>=)LA|QP!MOgtnKA#_HJaJ6^SDeiY45OL7j?oWck9ot#_J z?bni=OOvlSBLOE^UkXN5PO=Or002M$NkllB2pFHR8*X~7-FN@} zwqyHdctn#{UsXkRC~{etv2!5g0A4ti%WH>*AV3lTnCaH*@6SK@A^XSAea0pLwz>I5 zi1pUl!w>(?dib1EP-t5=!QUt^cf!Sf9_o|NK5Ne(f63nRj@#_r@BL%@#^=6}a4#dD z5u{=5I&h`^uaDf}veHV}ZxQmd1divSAMD+Cy&b)9n6ML8EPRf?{p2U?;m3Ypc?>+C z{hJTj7ZBii?!}{oDvBI8S2rU)pt5fmr_7(aY4S6@COhVOWs;DbPzJ76?wX^VRRzpQ#=& zuFeJ5l@6lD?!YUPr(Sh^juXqPqYLnTavPnGzEA9z0H|(zwn?Q4h*zuiq84!X+`V+4 zSGUvI=(GM(m*hHmm9^+|va=;WC$>od4C^#XU7FPChm zLCbBU^Ga;#EM6dp&eIhdU`&vl&bkeokU0@;L||R~L}X8(p=9u#LO^;x;;(A3Qu}oJ zy@1V%hO4=6gyr%Yt#tE2E12GdhlJ29U^TyHKbgbTgzc|zVa*tkk`VGx;igwnP~jw; zPv%+B%;a={4DK4lz@e5b^jJUlGn;;)>m%|^ztD4eWf|`~2V|w{mk{*2XIP)Yn^_^wSOdw%KRDe3yOo?vns# z=nQ1MH=j9Sxoa>6dc8IQ#TP<>9I z(s7n~Hj4`D;bl_fB#LZaoY3bI3NlN0LCe-`26$g!Qi#}=-P`TOrw_TT_>BOLj<$B9 zB$xp4ERv-P0YUsm$`TAC2f_1I-(J6dJ(D^mB>^2ZfTwN%t)z?6H{b!LT2g!e9Qv1l zv>49;b%Qw)Kk}i7sP8WFOr$KZsP@k15C)CfUDz|gd3vn5ciGN&yh!Vf*<0T`YA+pv z6MWrA?dn}O(Vw^4xiiPCsXu@Nh4P(O#=YJr=XyJTq+%{-z(vGQWM`#xncKBTUZNE&VzdO2Yc_;-7q(5GoGTZQD1H z6h!&darD2lsRz&V2pjs{>!LQyJTf-{V4;ns0Wb?{NM7m1c!DQ5g!cJ7bf(lrV_0Q* z1rD77B$8^7l`2O<>OAWxq_FQw>t;f~YVXz7)ppuNBc)Vun9{(Egl_)Qq%0XSf!Dky zfCXc2K9WZ?>Ss1LBh%8pwQln^Na0)-#u<`e8+q3XWzNgs;SzwyLzEf6RVaHCM z#MW3MkEPP}=W#r|DsFK0>{*NC&k(wwvY-Ft5&QfVMt*TOG<3*UuAXyxVKgJ3V5fKk_SAgiuxl>Sv z7#2z@NDM<^p$%Q+@d2VIfPB#e2m8tM;CwpZQhVbQR#sk3RWu5i;B6l2C;EiPG=}#! z4=?2cbcE;ReI3A9>_C6`z%^TOtOZH>i{L$lOG_vqoBOc>-6Td;%z3~V z^j6e|(6T0>Ox4n&^H3)6NXAfGP`_AY?$&%f3wYM}JH>psfT!C>#2}sDQzGdl3u8&| zd=1>&hmqM@YX$XXR!D;QNW*U1l09vY{kqe35c#@-Ha9$u#x0TF!EyMdK_tG23Q?KJ zB7QvAN`xhk@{o=zfz#fK;YiivYO1ucB=_x*y|~u3LYaXY?ohp?O4qKF6tJZsU8+ z)!I&rj-g|zs7?|9YrN6^TJKl*NtU38My(9BQLK^?!V~>{eQ=nn?9@p(8vwo9$_kgb zB`K|UzVn^-S9koiODYgIRs{(%AVVKGaKNTXhAJ&7v6hw=`_?!A-B}p{M8TD{NuPJ5 zckzYXJ8b@3x(IN}smR{_nps zjm{YtC=gme6^(}AgQ5^I>A*1a9rlmB!jLHrC7j9 zppHCiLSD?7W3f?m`3V0I?pG;KIk3i!E%|jwotDP;B{$( zbL6M<#0OAaASogae}?hG5y%}k7jG zD>A}E&&1M{IUzE%s-Ee(nB*Ki7!3<}RRqWjXg7M+ z3U5sTN@oBU)4b|BwV(T21$E-*B#$)@@DV9pzS!h836PrbwmRTT=SynHUczx@y)3;% zM@ej->|FF6*9Mk^d@ll5?it%_8#$Qts{OSj_j4asKeN(#hm-44Uz6L*uc$@mkh*BV z`0p0&|KBZ1VEtchX)ZNJ2X zp#8n{8(o94|D{hnPn*Jjiz>*Vm29|{Fl-fBu9Y-Fy!j09Wm{j3F-3T9?H;SBhokx2 zU3galR&(_S?9|Whu(aB3RFyh}JPMrg@_I|#P;V1Y-$|Gq-juHb&o~k<04(R}OS#CE zhW*IHF+g)pF$`&JF%lSRF$P0OC#}QKCS;mZZBrx5B$^K5oyCJi(oLX*q!r5K&I8=O z{?A@}@Trhp{pz5-br+zbeZ>Cb{^x8{LCo&G?K+G8`K@;EQ{DEH$A;`wN3UimXjzP7 z-Bj%&4EN4Y{FqEzB%Vg$vr*HBLuJS(9Jlhw-6WUc z^(`bTn@17EBeTr?R-8q=@DPTj)KWwj3X&u#9p?~6#3JFvC;){YwKW@?Fs56rbZwJW z78cuMcilswhM>Lnjc>AZFT7+6@a)$EYK!WjK;SW4Ai9>iXmZv4Z0l^bOyYPF=kLSV6?I3^m25orqC%um zDs%$5oJGbW4^m}WWT`#!vt_&WmUUF!xz`4WMs3&@vaP!}+VibF_RKSn*xDV-I5+~7 zjI5(F&{ZU@oVT0bwiB=PfPL=6w_D?yCi|Da>$QFoQO3#jZ2-_5>YB4FZz-@RPGFpS zkTfEJDjFNKbA3dvG&!r}E=1c3|gQtflkIHhStF zE6*&qjt0|bu4_s-2BAqpCw zwASb3gy5Mi(YIABNDil-o-V7auXoz+$B!T9UJco(owKO=T=%Ar@LPDG zNu;Ym-DkQCszmm7`@>TYSv^jU9Mk~1Iw&)nPh^0$w}5E9locG$Q4J$yDXYMU*M=6`$qV{-WJdw`wCAgcnqDZc#UnjOl&lGrk1_lEfBu?XbLBO*fF#!R z1c}}_o2pSuh~W{Q!GS1UVIS>H^KL(5ts=b{a#ktg&3Z-8Wf;g=A29n6HfHA7N7^S0&&&6UZyM%R>_gOc;Rj40ta zZLja#_nLmStVSH8Y?B17GVZl#JHKkK!`Gls>nb`J@MpIE=1PBcg}UjGfabz8NmxQ$pioVKYoVy zczroXb>Mk`SAJ0mpcHihEPxQ5)(Grc9{t6F3wmtpi5xec(@30^I z{1;^Yag(v8(wPX<;1`z(DYrgsbj`#b!5gB2iMq7o@uc^xn;9?0GQJ;NaFB0 zgLUi3A`aU*=nA2tE1VxUH(2Wk%XB+HqAV~P0Q`_%LZsh1{=AJInz1u8({?^EMhQzQ zfuv!1`pE7Bu;rMhz0jnfMz%_i3y}%lqxNVXZtP-AB=cG<_9(5r1 zmjIP|uj>>LO{`CR)(zEf=sW!h@ak2+k@)S^^#XTn=aQpVx7BvZCAmLcHo5AO*W~w{ zbz=QxfK~Ed|JjoK4JkBSz9hfX`qWBY|JiopOeO-poWbgEC-)aMMW%>kO_TweI72`x zpC$CIuLV-Iy$l`srRA*?fYCD%&Bce+?p4MsgIU>zS0OyDP!ygU#vBzvsam%IUi_%7 zFoF8QrFaMP;i)%SdD9ivRlME`wq0#wzZ!5G;u+7J<#dG0MD4J;U?bdnXK6QD=DCD&x41xt*y(>w4MXx6i}{p{UyyprNBM7wbuiLM@9!| z_kdFVrlEcnllU_-Ib;{wd#s1NwpkM8R{SK(0GuT-j^+ucgvHLn)IoxksxrY*rtfOJ z&?AcQeFn!1(w_o=ggIyxKYL)-9(mvkRzrBUB8PhMnM=0);Jn@VjvBk|FK=QDC_rNx z0s0jxAx%6*IajYWT(iaA{HllS{FB92Ztb?UHflHKV=SD_wCz{VSSv|p5Bzk*deOl3 z;$2N6$*DNYYsF!rPE$ztki6ANGVoRVZX${HTB}=MPvmin?Wm>I66PP6BTu6IRTe*V z#EOe*Y%11fnN9E{S0gqWqf(a;;6~%Sbc^Xy^aUB@D}bdzS5!a=rHX3K0J4;X!iY;X zNOW^WQYRrf#Isd@k>pkzp?ZaOH9jj3W07OZ!>e-C;v)v|$cdh?NSIz@@iI;Y`85S( z18~-xFkW(UC+()si78fQ{*ixQ~|go$fwYwh^M&su5CqW$gP z{e#{8%eyHlPeL}}RbWxTM3k`9WgPB%MtY$&pBkrn97fg9fE(B4)t#Fl6g@lO49Wlw zm6ONX097Pn)34>#$EQprhor6nlqpb-@Zh1H7{f>mK|LWvAI57aDhksw5sP$a1Q9C* z*k=eskTu`aMR6Ytth(xT^z-v@%5kXRA&ub}Dawb|fV7nt$Ia{*^PnF?5j+v6h|nw) zpa7JR8243`pnBSd$sd8sTufdK&psWE(;1{RgOqn2TR_Qx=cf5Vk(E-nBY<2Z-0Lmbvc z$-Z&(W_hmCabCf58WfL^YY;XPm{g$Pz!0VoSa+UNd0kiEJM78*;bzeHxeu(D!J+wC>*T!iac?y5ILDJF z@72XGPKUq@wz8AI>W2zYO5NXO8lU7@1TMu>R88i0zUw^z(*pa^Pkuxr>ZRBEY?SI- z<#<33Tydp+>6w3V+HzHB(W&t^U@41N@e*2R=_<|0Nvi7AJQgT-iw;a!0Pd|2^+Eu? zD{7>!(*hEPr|9gu5H3IuGX^M=__S`Q5G}+QgH0dN%xO>ZXz%?#-^6Hk*xJ)Ob zAVz~6ywGQbS>^VVl_Bd7E@CL;S@8;;hWg7sKfIbCBFcDG`p62O&ky3cA~Twc#b3!a z%N@@v&_g#sm#$ZRde}N`H^lFAF(!g|gaY`#%jI>E*G*~&N(xX#7Bwi38Wv|MpqIL+ z#NkDNNJv^8SfEFL+HY=wPz8vVv6b)OiqW}6JBWD*F)_#pENOqYANxu_^x|hGL!m2y zR`(mc*BOXMbJ5evy5#S>{n+1ifQtZj6`<-Su70QQFM?RS+iw3=P^;@p9EUs4cJj6) zwtwZilb`jfd#u<0XVG`=C-pDOW!o_CU9wz$3=N8xuS?w_b@%^jyZGw4=^V8ry~zw$ z3^Y{I!^@+r&qbb<8*Fu-X@ja7vxxDb{;FrC@0I=Tu9XKS`hySSE6pQWoMj6ZRbz9J z;SB{w(GH)Iuo#y^NHHy@BRQm`E3)znw_b0aMf4fhzuK}k9JI9Fvv#`ePKy=SqA%EJ zg==3;ZR}>tLdjtG6u_2#zleu2b;%|vq_$~|Wfzy(`L=G$CE=*HG|M)_3;WJjK7sR| zA}XEJ*4_RX(G%owNb;zt!wWkCC8C4+R(VV?o$&aWgnR)2_!1nyKfcv&+ol+_M}K^EQ)I6R$*y44JKrdi$II z@k`rARiY`v>J^olcJ4TQ=(QeeDr>T*e|r}S6xr5LAF<{>zjY4a(c*btTeV<=PzFwP z$1wsz_MIPo#ZC^PiF)c3$-EJ2-5+A!NXLVTCwQ#g9)I|5D=euc%o?$#EvTK0k)(qc zJRQK5O`_Eq=B?Sj7HA%MB;}l=Cj3UE!U|Ii^~BAaBV4*bG$2IsTm(;WdshpS_oVIJ zQ^Qy`ZTt4hnUUf0Ib`fJS}>N0*DC{&$(ebGcWfJR5>G$<>5nOUzQzGzMY|Yf@kkOG zBfP6+atbLro@akQ^GFr#iTm8q*@hEo$bnu}h!PlqQ)lN}&S6*)6@)i2hj-BpIJCzA zc??TPLItIx$@6M$Yv)`HP%>uU``-8L)1UsdJ@wR6_P}o*v=^UyjBOUJzP{L|21Y2b z0T|_))0rzOp~JL{1Cq(HS=-QPXEBg^x`&5f9EEZ z91Q)rh4~;tB`3g97!RTxB{SnuG(@n_`;By>#zYG3ata~R-=`_@f$w=5h-I(7~T zTB__7p>*pC8IY>p>4iHkFQUdUnI-~H>2PZ&kmJf-J!WMYMN)9m%rK9t!r35(i!{qM zUdjs|j-pBuWz1BheRu~f_QH6p337(zgM5t*eL;_OqYe?NImQk39otZX;GLXdXZ!Qnr3bRiDCy85ZywEb@7o z*C{}(AB$2GVfSFa>%dER9OP|~H zcQev)$qq6BJazn-)vnuS>-X)mhn_w{C9ANN@GvUqBoF@lXZEMJz0!;nLM$h|$-04;Px@Xe@MKYiLg}uzzVWSg;)NGUwZ^kRc3yQ>gH8LWZbfEmG1_D? zgv>h#(^VBBfSs1_!r`8`-1EM<5q7tqcI2Z8R%F@?*9Y>Sf1VY_vM9T~eovqCbYD2DL%F`_?e-@8SE@ba4 z3?7lr!z7VRPtS2oLcuIj*kZvYkufq7i!-EcC48an<$-Fe^}-=pgcjxbNMu68D8oFFs@KC*Z2% zCZ0R(DHX^9Uh~W1Sz=e-Y3D|#cSt#wz>!kwVxJUvzEkfv5w!;l3edT z@Q*mz|J|Z-`>&9c$58K{iN4YORZ$GN&?7uY zJ!ze{XcaOVG|1?)?iDL3D8Tb!I}JoLfE*3Q>FhL5LSqDjE**7%Sag`S#=saVv+S+c zKrQJezh^Dc19boDciT$YqZVq~VG+XpRa;+Y3*F}|yLJcM#|LRAfIgBBQ zy{EU+swp%Q=bY-wbM2d7`Yh~)QGmc+!tik0mU`@uKl~1=Vh!8IA{5tPaGpYt~&7;*e&IE6BZAgwW z31@Gx+ur^r`02=0ktmW&pDrYMWdP?uI?)nE$-+!TevYB=q9P+}-hMrxOcOZK6EfMO zB)$3a;R6PF7F6uJYI7qV>=214034oqBU+8a0F^1|Td7MS8Pr4Y7o&LhRM~Gc@@FwZ zyN8~B6z4*|t>3iQdY(8#U&o8*!8?Q}-mhvzc-Va*s{1fW1@Pbo@YZ-SavbNLxo`=O z3(baPo-Sx5cnvc!o|)7#07VE}Ks$r3@x&yC5~1oNR0JwH&sd#hFB5VvgR?mV^3Mer zl)}F{_wt}sUWKEBxuv@c$w$D{Fyl@%z1Uu)=tfyZ&{Z2dLRk3opS{D@UvV|glPtUH zme*MO6Log?J-?^T&fC^)>#h47$wN3odhmD;O%9T*^hUUnk6Xpg4HRujO$n}1?suz%JWb zj0;uX3gCT>&-uk|v?K1dCz)N@G@8l?jmiYPkN)d5y1ZUePU zW2ZpFfvXR=z87SEoEn;;1Z}x(*|`ZC3!(qBt+rwP1`IO1dU(Qq_lGB(?&=C0$TU3R z-2**XR!{=)f_4HxGYKz$>1$uM4eQq1{;RLFXP=}P25qmK%zNCDJaa`|V%A6T9S@0i zp6V*TYqMxSV2Sqmjc?QZ@!s#(^1>Sl1o6|hw5VDuj ze_bSrXc=Q`9%_Lf&uZ%hDudw_jS%Gv5}9ai9fsGgv5#`2@H_J;HqbW))q<)_MaZE! zuOaOc`ZA{jP^a>xk9Ii#$32Va;w+UfLuk9o!#NLs)-No<2`_+83X4l|$PKv2gH$jC z;9?wChNI|nDwQmH0Zo_OAnC`#b%iPrfQBRrM0anOqe`lss6YbHhfapMV-u0wrSB@=B_3qLa_Djy40=Bx(!Unqc`c88Su+7aw z!Y-;LroNJ-lj<1S&v9Ve+uPmXB@XPA2+r)B##7Kn4Gne96B`2HPGjXO)bX9~{D-T> ztQ&mt#0i(lm`&M59o$3ME>4&v7cE#-2pPkRFgi@*)5DSbU#0RiISTLqm`dwvapi}s z5Ua4Wxs?gfTz01yfGaSTMwm>XN~Oo9@fIkYna8mu7_E}Dy0KYgHV4y@q@Y7~F}M#8 zJ!uP1K5pq03Apq7KeQkH)g6TY*4hcKa~bfwi{!C0Z5@QdXk;`dg;lb`G+Y)<)~U;Q z_PCWSZ?+lVI1^l-Z6TR$jEX}A3=%UEUXCl70lA&%1p0(np35E9JGIuzp`K>r5eAl9 zCtl(x50Uf)8(;tlM*tB___+Y}#SNT084%}M&R75yf=s+D{`wNz1T`VkS`rkcct%Yf9KD;Y)cxHeS zgku0tbf6#;VuS{zjD0B(C{uN?w;Ms|BHKkMa-J|ifA=WXak^`i`FPqTUA6=$kuIN> z42~Vee3aH|>M}=IP7O@_7(H(RFG+K$z(I`HI0SxG8Cw=`WeYuvMV_g=^isKycTeET zHB`RStNs$;mi=kn$?u)+tHVyOd@sC}*eCJowiOU%JH40AsNQQER=8779#dg@O%Ph| ze$#!=HSnJndG5Um^|I(#T2g_iTX)$2l-Me>Cmtt5KE2gQ=(kX`)82LahivUt8?5)jF`HtXEG?=ed1;ms zirv-&w_Zkjb|&FTJRl@AGcMD&@#;*&k(6gnRfIHdEn=t^qoe61Dir5hB2*q4o#?PI z1kp^MTNfHwaTE;F7;hp>vZ>1`p~Fl($6*ZZX$;(#jx!E%&g<50VbUJPOE-k<4^@Ro zjMZ~oA>-OR&)r{v`XnWSAW9Sw=p;P+pr{?1RG73Sn-$0Ug@MInsYE=^p9Fy@6cb=R zeH_P04v@<^K5R8a@6vMMM&tEuX`z}Cb=%9zgLcLB2d%Ve z9p3AHJ9#)_7w&(;a-+{$@!o7JMiOZuQe|_{G!_OrD1=Z7NAfZbER(gygW}Q>41*yj zr=*CM`pwa!N8!IhYa<^)fX2&xqqWmtD8Eeqk&&Lpn5uEJrmmK@C{A|_{aGa67?&mF z&jkRE5`8kj+$raR!0#30pu_>B5e$xOoCwZyMPzJtYTA`>ecc;wBny2j6Ip~Zvg-g{ z5j%6C)o#A!^>*~wX=`g{u4fG2wr4jP_@`~#)~&XE&rTAZYHbq^s6YJS53ah{%{RZn zDfX0?XQ6(>IStHN#X86vM^4*k?|+J9#sT|_zx)%svaud*W%!N@XoQjr6Z9xbAY&^z z{%TZsWm%pF?9g^c@QnH}`V@|jVK8RrOUD?G-4s%2VbPUHvLjC zBM~}Dip)?3HWV%Z^rCcxw3?6k)s1Hi>Pm3*(>`V>o0}4j&B38maxd_X>e)1IK~PFs0zL);aqLPfi%E$CPt>4C+VkJH-}NLHl)n`)MeI> zoaLEe3zQbxz*B=z01)vn02{&`KDcX#z4?vT*sJ!gqa^cZZSTR|&}8a}7-P6`>c>t! zZ?&6u)7Lz9rl$i6CY8027+Zl`+(YHBjT_h7+VvY5+n=;nFw)TQ7~7!bk2({2q)xLv zOV@-B_8dCB^-CMztTO(PS0jZ2J@*-?TbU%x>fB{uYrar)KLY@(YMc4ARe@9)e40O! zP7l4;I>+q>7s#=s?=)_yRBc>g_UgEZQ~bC+Px1xWLvJg z7KxrEd+6TZ*cEH25`DqtY$(4pnmYy*VqHkAG6^F%GCk(BzV5S?-UTa%BDhsGHnM- z=oFo!_T`Vio$D#IzH~Bw^Wfr41YEM)03f%vu9mP#hRb$sY-)7E+v2DA(5uz+T_ijZ zCUaXBqP&0^WUQWTLsA7UQV4W4Ro^hwdkz%Ec9DCt|$mm!Z;ZWg2{Es-x7ON2{v?Hw9*sTp@~M@ z@xNOVAW(*oJ7{91{^d7Q7mqVH*)DY@?{$w>59Pjb$4=SRx9WLL?zW0o-8m%IC61{5 z5?960&w<_7XPd3^Von-ynJmO&zXzI2g?Dqm9K7!jUZ z8nx^RYLmnud1^cz>_Pn~jfI@&jE&Q@ZLxqoCTs${l1{&5NOyDuRrm8{<^$~hnEpCQ zgo7W&85sP!>E@LpO36S(~MA-)&0(=|>N>+1rrC z$t^o#-~ZfS*j8m^Ll7R`fpRheUph=LVGfje{k6Pl@jheJWF8M(TqFo`jNWa1PU1N8RC6A`2gxOy3Jz~wB_F94IIs2Zyf!(Wy>&=Tb)1rT3Z zRHaJMwBGJ+m;ay%eSDM(WT>eeKhtN&@Kk5un8?NB>R~&63XMpfD6(F#z7Uqj+fF;d z7RJEGI0C$?!e0c6hgw${52|`^RGvA;Eswmov@gvMz!9hxG6<3SLPVHwAbZdjXuIlj z9bJ5K&3VF(G*563c(!aO!QmLPQUT6K+|KdEB9qs6^G5l9~w2 zN)AuyZ*V+l7u-nR=ivdDV zyLZOgPM>klOrGF=6bybtv5%{F-e3>>{!t=p03Sfv68AnE8K=3$KKqmR-3G9ov)kUW zhxVrGjW|9qTF;z0O?WvMkK~f|V`T0`wILeEs5x_zd+o8>lFfF8<`ananFlA$nSw?8 zn~j_8Al3Lpf61>bq@B%L`-L{<5>=-{5dsQg>N2}bsdGXx{t(ZNXn??tyyMdp2$0ju zLjtlCAJPGRUO=Cc8GXzxN*2}anu<`S77w+IyC{(&>?A-S?VWoqz~~2vI*^ISTPhFq z0RD6?7^^ss7HLpUNrCTx%%YmR91OMl7@DX)qC*Om>-dre)SRS2FhkJ}jE1FIwNX5X z=?P_>6;wl1wpZnbgKD5^)wE3x;QCdN!W^?uFVYx4@FS93tv-pf4WllM=JGrqU@ba6 zL2Fk&cZqST2!k|r!B(_!90(QlX;!n>Z(T=_8)IE$xf_b)1V-iqHv9Q+TN5Q>PeElY z$*Zz=zwX`k?BRzkP(5ZBIKROe3Kzg%&dNrmg>j>!mqbzS?fK?GJJxoewZrv&^yqPW z=UZ>G`DRfuMi@hQF0`LHw0FJWCDH?JzOTm$>+^{SsJ%()0xvhGTTp<8G~>(I5K(F7 zh>=me^}Z1|X9u8Oq%lxrLqU|I6Ot>>6z2xdBp1Ui1C4v-TPcZIC4I92&~hX#k$9+a zZW`)~0DeScICFxGci~i$eR+Z`;$5jB>ra42NLqtPXLk>so(9f=^}`xm#Q6~Tlm|u` zs{*@zJg)*N635pzOB_R}SNr6^*%@WP6<86Ox2B>3eYHH-z{iHLD)_B*8p#yz&w<8g zMu%M}DyAeMo~p7YWofF~i57u~iSbc;wS zIM*O9uLn>oUBeg>GXiSrP4XlPu&41})>jmOcMg*NGJ?q7Fu)DaIYPx4B{{6HpGw^o zW?`w&_|qg|2yvjGxWZodrrYg3x9+w-`@rk$rF%YXX}P-h3>@&PmauYpd`MDF&=5$h zV0e@ujLr92eDVYa3E_Kgf1R(%CQF71hYi4sy5JJ)Dl02osl$%W4)>gL@o1?Ot&(wM zHHok?Iyi>ait&KHUQQVqk({T82}~VJ4bQcU&Q2yGpB0qW0vc2)MMLx}i@0}c2M%y@ zPt-QFpZ@ea`s_H!0;K$Dz3yFd8*aMWUmH%oBTHMN~^fILg(R5;NluxHrKoQ*&T~(PXbhZ7BxhRu7Ype zdkw(JZS;*6cWk|;oL}OL#QyI6>Ob1|mF-rK$vOd-)J32+amP~EUi#jZ0={&W`;Qd#e5`bd{$kHLk@B*KDxU4XG?5f7z0pS)^O#Jmmuo*$3q z(js07Kwq56EsI2)s+x`V*kdPbO+ziRVGQUE_#V^B&_qSbrVXVJ4d7g}H%&>7crBPz z{ZKPmr7~jkA_s~FGKUJSzZ9A-Xi=Mx}yL<^_-17x}Ty!c$ z4!E!Ur)Dc7jLO#5+&Tha2MDvX=8*_1mvk)7L#4A-GBlkZ(l|X2<)Nc<2JarFk~4;g zrnT7ba-YD#fTuUl?3!yf*vM?FlS%8s%NBx`p`<8P1xj614pTi*^Jg|9@!}Fo9j6~| zVPREU*q>)0N|m39SWyfg?KpsUS7k{XF@h#==&00bgk(qcZ|`cm zdxXk%jGR=mtHJ0$D$w_8Ir_e|ygI7RLbG!J!qHky(k_T1J7pI%fvlQ?Q(MNn3RC2t?i@uCg zFq9|EnZ6XdB;s} zu+qjFC;|FiG-R&>j}W;XC8}Bg7Q5xTtDp-_+P{7MPHRQm`RJMB^obR_;hNnjF`&%w zQXA?TIV5zp*rpojC{O~^eH3DX8#^^eTlMAH_O%7}+H3bxa(M)!m9|IATOe63mVsR9 zLYaGROZ1=qu4ya85ikeGR*D6R+`FW(0w^6Q7eHI-h3kyis z;w7x3o2&D`d`W{(BUzXw!WPk0FQbP+NJ%ZyJe$}4cooD`4T$c5M^u@(8et^_tk8Ww zvKw1B?V{MjCMLyE_&x1-Uo%N2$g==dc0z#T6)e|9%DPVB(a0g$>-dogd%ii-t~k|V z17wuW4%31jY!b-&ml1EKaWyod zA;-Yl+uQAo4hNg7IRQs1lXx(Z+%FM(ENGqN7I z%obce=OFaTBG0S#Nq|^h^ms_l24Jrh+ zHg}?fCS7flO#v$=yLbxf(9rZ*OJ5<;hf$9yJdhp{a4IG0~3~BU1ny$sQ7RFQ%9XISNKUS4r>QmN6z-z&QPCF^V@>Et$3+ zBJ}5Dd|4v<-w$Y7VVp}{&Nm-%&WMpQCM}{ZKEQSn32=M%5v7sZ3O~_1Gyzu`kj!Mh z$OPhNLQ&1~2cGMYQz%7|WF$raqyFgSwjjG@|P~1ST}js5$Fz z_0c;(!zcH70q~wYWw0p|9w0>hjs~bcoW}l8_T1rf52mM+_sC_)T3zJ=61(=U0X`?;J(VIZxP7_dxT_@~WrQwIkMP zESGU5bq9^juHDfdu@s#LRr7}y>9Z=yQ|*h{$8q=5@W}i4Eky~O_mhePev+&w#zn(UWihcA?`U|^$ci80^?aI zXDndAD%36xGnS~MD|+$7W&>zdqIL?3LlkFNPA=uHk^Pdf1!l8649&|`FH|CScwhoY z;INAlkC7`AnUo=8aACXcg(n}Tk!M=_xn?we3vKhB&Gyh^hwTrCUZBmRGEy!ccAV$` z2BIe1_1Y35R}is<%=!ts9%&|SgHS%s49P}w`Z&jhs00uHq#0jdTN?XL%>3Qrk;AAP4zAnQxq5qWO~a_9IBy_Yq+ z0N9cRnS})@fGhw}1YJQHnUV-`Ko}6HkbvGRyrG0LRj+U*N|(blVvU9xh?p$sfa1Wa zW2nqxkOn6*avp$ko`Gkue}pW=KFdXUpaIhQJji`|Qq`-l=-_SShIE5v5&B$*b{Dz& zkC(jEic0Oce0^n<^( zV=v-o#{&~5qu7UBmTUanhcFgZrd;bJUqsY-sB{%d%dz{uf5d+9?*JtxIwgtZGSS5W z_EQ-%@P5%@brxi)1?K3PR0+x^)L0QN!@7oFTU|=oIggF>D1$Jc^AhN=Lno>!DX zTZ4n@ALrnSl80OCUZ7Un@{e0D0eA;m`Rpb`ZgJ6z(y>B_ZTa$B`k$$X^&V3b^ux%K8tjyytU(D4q!;A^UF)3!3Y8NY)B zP5_SP#1!&?4a;`@&N}QuU3nuy;h88EJV>%p zS)q;Mz4E}pQvnCavlI;=3bm)o0xd}T)Lu>HoesUVUB{kI-~KT28cekNeNU_rpg zjIWC^42^Bh+e@(%Mrq3{Ewh1JoM zS#>G%)zCOe#))X>kn%@(?m3#9@OWhsAyDFMc~!aN8g@bbxbfQS?AO1%&;E!+uwB&~ z?Zlav?Vh_IXC8^!vE$F%laHNe?q0C(fBQ$e%eH4b?GDeNmRUEiqG8J1uK88YD|tw*#+vgWdk__gXigDofYE6p+q*JvoH; zlhCo;LTAqAa(isZ+!z8 zkna?YRP|C(PbJ6e95MjB9sqI~6p_-J3ahUp8GLRCfZI#y;msV6`-nF*%mX6r%;uMd zFu2X0f4PS;w^er66Th{!R1#cYpJAQjBjAL9Wh3!9IgXz3=%R`2H4D8;#W(^`L*``s ztl2{~w6E2fQPI^Ru6sJwHX0Tfft1X z%PXlYLWdEk6n8~Cs7Qg+4`n;OmlsppCq1{4l29l^{7DzOW~TH4c0@uJcXbS}fjXQ@ zv$+s74OL>w5e6@{od6wI){`(ck3P@lNDiK zU9XOpx{Ok)HHe#kg&P^blA*V8o+P=UQ5jX|;(B}nk{VU<(#8Rg9y*eYYh`RJ0V;~O zMwx(>SUrnaWeZsBdbpYhmgt1y6;6@SA4hOFf>m$+A?^|6ZY+_40F(9@2_aY@5sX$< zQYjz{djW9S!eC(j3+6AWwJ43zUQSqgz7@RGcz-&wX?W6~-F$?3SsKW)dx7q@r6DWJA`9K9wzq=LuVKB+{YwgqBz z+wu=KzkZwN%zG^>7!i7}$<6J@qm=rC)_M6(U{e#Y`^_X`KGhv^;mADngah_ zT-a9Nmm8K?rQf>LVSRB^ajw*qQWtlPtLt=)THLv;ZlqsIeopWRbxp}he|38XuH=$D z)xa&3VxN|GPy4?tiu<&)@ZnbnBma?t3fdQQ{_9s6^7_V*A-u8|+SVe6$W7aeo*OX|?S<4s) zjS9dzjxUl2BQq zuQ080e2U_9!Wo9zl@-EyGNDP4;ti!CN@g;S<5d^<2?Wr{BubUKXza`I1d*AdJTZLZ zwQC9CbDnYn2$Z&VwR4p?Uhp{4EV*`%O_JmlWNtj%e8I|#%J{2w1%D16d<_7SL_Lfi znz+l}&dC92Kote$4VuA2@O{5L-VDc6xZR!=*S2&k2B$~;7nm!areOsFGb(WDA7C>CA5#7NBRhDfrm++ zI{l0N0J0%f@8Vg9@q#OqJtHr6F^U7or%5VHMSH|Cb+U~BrOa%=5bZ#XUlu^zC zKk%1H)R-uQ&QHH987`eeCOX0kc#lPCkQdbpC|m)IiPEMJx17PWSUkUQoO!ms%vlsi z;;3m1xcPGtFqT_PAM#UHc7BBCLkVLpHUru~S9ibVGtUO;FRp?i38YGZOkHX!>S#o? zAsm6BKn|6ZtNDFWy75$oaVW`?TUL>4UA?W=K7%J7IlKxeQs-PebpBkGQkpq-8DoJ4#)2Squ zJfA^miwsH+uwR674-dyjqwop5(r~4B=jTD_y=$y$3U~_AIJOtpyhNh~EOdNn%jp~j z0ouJ?@N;>uCBLKq>l-3DGyH#@If!8j&3j>l^hZcCg|QDqcG_Ra&K#^tudwGC{iv6Hz- z_(g{a!3AObgm|89MHPFk9vKyR23D{>rl-il=R9Ws^4e~huwgvHyLz8Gs;uTuE-Aa-DnLFQN3z;=^-YK{^e4o3SkjRAPl93#o z8l!`U9PL8-iW*?`eAQTVKUKAZhvwEv>0uoH%rKQsWcg|`CY=z9%r{KI!TCstrB z`gn*AF!C(*ojX?sKD{c$q$T;A?i~26zNv*_{1hUCvYkOVW zJj)}HSU6v{mt$xM1q%OKU$=^+`k7+0FnGVNM-0I8Ep4;UX zg|z;=CG}d8+g-Abd#=y=bAuQ6F8NvaeHriAV)bT1-3)LkOW(0YyZMi{;TZ@53i>Hg zdJyj4pp_ODQBkVazWbf;+u)gAJgd8Hk%Xv<+7L=2^LBM(x!wMSw^`iHGYO2pM=}G2G9y;?-nij)U36OEd!f~iLDj}&z)70?R znP|}hA>#Y&rq^$^E!(PGgd-N~!K;&F>kAN8C*wYb-ln8{(&63C0d(k&Oa^h=zN^Xc z#zsb|YE)4UXE4Xwo4XNRrw#DC>Vv7v^yD&?7YX6vCDI(AiCc-dSCXaP+}vXQ9cdWh zgxMKq>uc893oj1PFBlYh_+vg0(9jr-CyR+xNtX-Mh))AhL4Hcm7B2P|H536? z0ZO$gJzv^1eNNtcKGCNVtxL~80}rdJg=y^3sf*d8FLCLHHH*k zkdpCbML4-=RC92nGt_frPGpje)E@o-;R z7Qq;rw}Z%CiEhzOL?(a{ArI=<$OsaBs7<_d)M^{0%rM6Ifzz(2!Cq>kYAMLP92Jih za9JiE&t>?((;VZW=Z{)_<62Z-((Erk_(7-wD|V#&sCBjVppZn_UUYXChtAsWs;jIj z4^Fe>=X$6pSXF`dpW-M_KWL9V^{{0YMy+yFqqU9=*$;pIbL3RFl5|J`7nDn~GmymV z8?wsk468&zArog{DfAm*J*gw5`I&K;-=_iHnrj0X6k0Dzjxd753>a6qBpqIi(qG=S(*E@2O@ zGZrDMj%?i}I!6|bbAimk`2{lj2%E-ybeLf}9C~z}Xws~dF5CLp1q&@yS;nSHJ9h%I ze+$~0p>C>Jm04XG$y#)}Ds&zlO#`oR4y1BDFFhAc4)WId;k`+_QC@L9+k&jg#B<{U zg7BGwSf1K;Nze5EviIImeqYyN=bher0|p%+3c(6?QH5%jB{5PW$-A+4onj}k9VfQq zwr4l%#5r-iadNUwHkM;2a#7ayDt1g+l4bQqQl!|-1`>_vWiXh*^xpULdEeig`2nPK zVk`gT96aDR-}d^u@4ox)yM@KPiE$TsUmfOH4Valm#;nSPn#HO-xN#At5~8PLyz)O? zeP6DyrJ~lFJK|D&ul`)Eiu>Z5=D&QF$P}>G;{i)4J`=!YkhO|u-cevdfPyf6=Mw4A zf#fP3tWsD@1R6M(Zw8U(3dl{GHX%_LS$3cjzcwN%BFSb-U-?6wiY3=K#e3K5_4@g` z6ntmgZ0;(*&(|yio6>G%n({J^h`&4-k6Nt>RZX*Qm zO_pIx)v|b}s(G(~rhYnw_GER=z-d1w-y|Ow2 zrxCfwj$ZP9KDO@K8+Sao6^&!?9WI$SVHmulX+LvrjN|9R{G7ztEX;*U2((HZqSV8Y zScKR*e;)2idsA|zaOBma$?axm+h*qUCd98$lz}7l-uG?v+vZ(u;Lod=<^z{ERe+l( zkdM5AsMU64VOd1ska%2s@xlof4o<(E0!!!xu;H$UNwHi7hgk(wNV94B3iF(-0oXBR z9OgKl=HxoTCm0OEgAKaeI-qea%`XU9xO@_?#hm1x;dWs!4Lf+LV00)lAP068?wj9I z8YigWF7X04)Fa3G26Q8EM-6~rRt*a_#Mh5~lFucsX*DC|gf6TO9`RwP@f5TKAndZRQA;ymd9JXDMX>YnbzGaMiWA;2J#!L!%4h z^y65IIEP(anL4&-21bzP)bz%u-PTzYtER{1V-Oo4%^Xv6$d29DJ(x&*6Pq|({z5E| zU{1<){?%8G#tSbzpTr22o4)6sTd`-pBX;e*1rB`=ghpL_>|-B`U;Xv}5dY=NpNodg z9CgznYtRB!aK0Ci$y~r)w4NGQuyZc%F2w&9WB>L&>s{B<#ZG~iOWY>2i4ZT9Fl;L7 zG%Z#WZQX_Sf=alw>S!d!1M#cC{mm^B?r>At)U1KzS7}2ncwh$QLWypV@h@Xdqz=a- za@cDjmg*3rYiI4N<}^f+zHT;@uFEnYYQU3gz+WTs$1BhmO>AbyM%ehU?yaK4*1-wP z0vu$(Cc&i~;5rDaIZXa}LZB{)b3-tkq5UcgvR_QLf2&&9Xd=$C1U_v-cDAb#9J_R3gg($oz&M*rx=T8TI`wfXtZe%%bXR#;hC`1W6NE1Ais4pj<5ikv853ab z6)0Ka#G;YS|0>+);h~GjtivH^V^Q1E7RN8cjO@dN*Tf)>O3pB)Ic0z@*t5MaKL5!_ z;;()1L-FX>Uyg0JH6h}1cU*mSAx=)6iud1pZyY^xCVuVrKN|16^{(VTwh>}~ac&&3 zl+WQ}`XVOjTH=N0ACJ#|`S*aXn)s<7cnHF^D=N|VX=v#{zo-s6Z4CR)SJ)g3$Eo4b zc>W@$5)o4v2N&t`U1hy0yezuOs)A6TWm6|@>8XSY{E93#!&vZyV;a+*!cMCuyAT_# zmJoDjXHYcY)TvWxQfg&D?Zs8uwGf!f$hep&Mj%1tPE(mzGn0VqlfYx((+&&-Wnt#4 z-9}9?RYCmdkYI)~nkd{!Y;e6)#YaVZqmHkyE?JshdnkHx$bS7W1eG`DvscH_HmCw#TUNv)tKk_u)V7_{_0=( z07N&tCU(ws&1eDA9_wq}uir5~{Nw*7o;l2sAX<0JAVu48*WN9-K}0cZYY)5DozVw( zW7n3g(GPNI>F9yrhWGBG4pHZFe-X1H{oC8%kU&@Ajpo&lxSQ?n)NUD;)n?}}Wx(?4l?6MmtI&mF~^1$Ca7_I$)&O6@`gCG6l zs5|vX7z$?tf>M} za6x~guwZ>kVLiVh`}8&`!`SAscd7lQG@t_RineUHmA$SK#4ybphO(&TWf<2a`ExnZ z>bKG!fbZWXUn3Ech(K}shJS^L9ImgU<1){Y+%jh9=GlamhcV1^y>#qEoO}TVl?#iQ z<~z-iEuOMi2v!%aaD4yfsNB*4w`V)X^t(gF|KnF*fw0*ZKl_P)7eDt?KNWv#_o29g zc+MpV!+*Q&_IUVbx5v+)dLcSDbE<gGKS@qzc<$MHRc z6L{_n+-1Fcow+oE27AGs)j+=7S*=~XmT$qZ?(o6;1MPGCz)MhqwZ|3tbm^b$0~6N(U@2Ff~5!a zP#1%&dH8DqH_pLrf)iWQM+3=!4j3v6_Gu%8fL3?f5K(#Hfd}GGKZgSZ)(rJ_ z{YmC;25#PJ58Nj<|H`m?;@E**bx(pcW9jE{@gkZ|uT@BQ9kB)Ios-C#2W(O-G@_atuM7~fsbUpjuAlemlV*zbQWj+{7+r#zfR?7t)K ze%qZ`7-)zg*2@u&)CaKaQ-jIHM$FMIVBNztWoeCd9Im5ugG6$9m`B0Qag^IAF0Nrs ztmBkb7sl$dERk*=j;crK%^W=^Tnxd!0H?F6jo_;r`3~!emH+4IDx2Ujq2`cinC`1nVT?N=p#AEl_-8yBSYVYZ0f`qGV`N~ z=}Zt8FJ#aN&`c0f5Z1J}x33K%3V1<2RwmmVgtnWi1w;aCTQNC>ed{SsDCF$d*R^A7 z_Yxag2w%9ja-YwgM$ZTsuv@lo!($cf|IM3wsgq)iO>yzeIA$E#1a9SowJfYQL8q`0 zlOsRHx-1@EM!aTthD~EDyLv$w}Pu(0v@ z&;J<&E>@Jli_ahaV%&zv)i85xd}cU4_Mbi-@3`mgcwpE5_|)KG#1v;@7aa0~`)|jS z>4R)c*hCv3zX;~@5TmBvjJ>|Uh0X1 zyYE310cT0f#|1Xh4V>Z%=b9>$7tsjQUENyD($LBen@(3Er zh8LNn^>`oa0SY8qD=`sc8FHVp8KM-CKY#rPJ`~^g{Sck(A|}wTeEIanc>JrEn&H)U)f`wyihrJak(eyv2nHPg%%~RKvBMmvDp-w5&w%fsF?j zhLDv}-Ud6bn9``kghT>xY(7>A1(*w&W#_qy5%g7LX_we_H^#QORMQ)q{-?X+L-*so z=IPV%z&ktQb8p!ehmYdDCN4(p+|BI1kH#vT+}@U*FN~}5w7DHEX^u=Jyj!trdu8AP+=f0lEXeV(C2d7xc9jWr z>C)-kW$7v+NdyP|Ye)ns3yJ;f;w?YZv2{iAo7-3kP8I)ZS=RIHY3}S+rQXKR4SjaMc?=fh)ifT*ma(==wqEbcuQl&QjEK@Ioap|0E2-V_4 zK^Uj|^?3P-JWEvPdUI1g)~(e3QdGGKIixlg-IQMyS2^BAbh8Jpr4kzuEv3e{c-E|-4Kn_9PQR%?0YSK?>Bxv z&Y!&mp4aWxYSG2b|i3 znZK7_8i?aZPedmo45Q$rCG6Rv$Sn=d+-k+uDI!n(5%=DGFGtSf(M6xA+6cmf-Isk_s6lw!$n=8Hfjh@Syu`ai?C_5B zAOT_>CRRvSo1S5IFa!fb-~b3?^H}6p$wszTm}65R$!u6bE1W5s>Q@B^Rt2iHHIAb_ zZG@1mWEd6W(z4<-rUd)?d$A{c?Fmy|I^uQlt-|`n*|_lOPev>F*|2~)C`Hm%$gh!t zs<7BF0rO=F(?xD*E96`QQ*x|UFz?ik-Q$7tcuZ?hakMgyoOwR(=y(@$q!-Bt?l|v` zUOEywsOi?aK;*ekru>CCaw;rg}xf)GtGm2^{byv z^0+hD9sS<-y-%ZyF@e{&aXdHOv=6gNZ1^M~p%d`DxdSg=dw^L8=L*b!aVmJ~_?h_1 z^Iwi{eEm;iZV;WBZMZLg^tpIy-#6n!AAT5nmrzZGba8xeQ?gU9bwCpSW5TJ8o*nWG13>;9&_txo)l4E}g;^`U1!G zD^*%dLQWMkP%Fzgw1CS$1p!uFp@XCO*t`ou7~9f{)XYF^X#!G5Kx!Z^q2{g^%u$HA zy|*JmH_S%%@F>!Fu6xte1Jj|Wk&_4R7nf$}6GR*us4oO`Gp7M_5RA3F+jFoB1!=?| z;oP^jb2>1>rW$dX#$GlyteJSTCtU?{#&vNH=O^uW{9BMA$DD3%vQwTyAswjSI! zpBq9yrjdCAt73~F_HU2Jo_jL-&`)Ry+=k;_aAuZ`KJ%)s3R=<5U?Y<}uX2LnNyhNx<+R~$ zWz*i=(HE1@M`tb$VyX*c0GtfeBZDC=w*WCeIh6=q?UB`|m+qE4`d#KHk!dHT#g<8! zIg=hgOZ4Tdh(O}kU7HlO-j>{Hx@h}zrza zk)TS)?RmCw{f8fX5QNBagvgJDhd5AfPT2}37Wx(7JjI@%z zrz&t~+CPEjzGx2(T;jQVHj#4x`i4*l24@&~93k;qh6|Klc0fty>detvM8TWQzdg{4BDyGld97?mEjb z^eQIP2q>KXCP1 z`cBrF!&>$kLaXSv@^{zXUt6bZzon)ZuZrrW`$S;UeTI#?70>x^uDwL6LGE)wE6|sv zw7$>jz0V;Nu<02>&yeFeRw>I;U#_!i%knG|q`&+rVA7|YNB)xXF~95665)Zj+!KQr zuqFZr=jZ<3KaM~6%-3S2Z7M$W&IjWwubhg_aBUV2EPfBRQoLVgwnjrp4)5|~FQp=@JueD(5byz}Ae z_=W##9}Dyn-_VxEHsT;MisQ_wNrYP0VBJ8&ktdue7Us32)Bv%^f-1aKA%@ThVdc@c zn)VX2&Q-Z~axy%A_lWuAYsX_04v{|EmANYq;zdml_HFJ#Rt(UE|n7ym#A@DeZ zRu(+I)hNGfP&FG9PXotZc#(CgfuraK2zVG5aFJZw94p7fJgV6gEUID6nAuL(8*$vb z-u13Ha`xFIgDLm6$F*u25wc6OtQ`x9)0@{Q<^O6KN7p+UNF6wq5RaZdb1I(yv&Zlj zd23=sJ@w4fseZZ-9tAe^5Jq8%(RApRTjBDr#J~9EUx^?4`#&0cc5h*Ga~}A+8k@K7 zf&17Nd;50bvUfNJUOUHF_QrcZ_?|ehZ%_QcfAR!fJs0=A`MzjF%;Zl#_eqYUcfsuF zia-A3AIBcF)wjWolkk*4x&Pop>pkZ&c_Y?#7I1bVw>;UyWw2+)U`TK*vIfDt3Nh5o zyqf1IUHV`VU5;Vams#YhdvP1v0Qa*BF8jEm7cfugu0(e@FFdWC8i%8J83r31Q3>)T z)=vEe2s7*zm@}*&5`=hmQ(UYHQ4`^93dLyc&30iapa$EgqgSs;`=t%T{3O;1&<*KD z4t*3k+8sN$#A~m-NE!8rPNJ-S9tKQ_=^2I!yR z0jvrPtJvAiX1E!yGi3p%qlid;^w)ngHY2Wi?|lbwPJ;N3QIJ1Ix#!P!#mkQ#LrHBYo>*>d~@*LUxGy@TjJcNIvK~h@v~jzV;mb%p5A;EnlYsJL^0X5 z;o2A1r*}qV;s>XKNGgO4#l;o^crxT z+E{9UUF-MMccuIFqDomRS6E1#6{Y8Vb6vd3jY^@c9zNIBS41xw)!+NU+vB%>_jh9! z(U*6>|DEyNlTXCE-g6%s$>S{8h$mr)y8`6-#czH!KK#C$m<=FC;Jl@`3;cv^{@4o2 zOJ7QMoBK9zMeY+%L@&P_Up{g;-gD2ramND(<1?p^$8`1876&WedH&LsSzt!vE% zwzJuv9tMX(bV`_%hfzeWx@r4WHoHw6y|VOTXY^v+a_7C6eYzS)4!?{kD2PsQfOeqg zIW1bn_G~ie#HmdKn&8zCo!jBa9XQAlH3ax7#EtH5>o}g*B+wW~=pC?f2M}Sn?|!_3 z0i+{C9Hm2`Eh3gBE)WEgA$Z!IH?|T2MG&`dY;1hz@F#cz2qoUcBSMGo<>I=PkciF1 zgVU{m$BnD`$aHYgbmLsbX;lTHLy8A@@}Ns=)3@RI$pySTctYf2ssd^|i@m3j;+gXo z&Zc#4-@#kbnqynU@8WXTJA=62wMKmAdNhX(^StJ|p^&IG?g|Lm^qP%Rv`$;bJ*Ffh47ol zF8L?_^pC;U3-LTKHUhVEl6Cq;h{(;Gx1eZ!g?_Av`+w=7^{&%`fDSSi*pRi*ek~6; z?&BlCGP4oyu)s9N|KYY>8DJ9!u5UseehgRXLW93vQgJVITz} zHFX~AL-+#r+>2+mas>SW(A6NahpG*IiM0j93spX>hkohk(ttjj1c+X`nKcj`!CE+m zBY^F@Nr0Ha9G=GNAbh1?HsRdo&!2e_Q3ka7Re zQfc_#`v$Bkc!DA9oH=(EI3zL?K^U5c)@egFxE&(XlcZL}3fjOglT+x-5U&xvAsIwn zY&z;WncW5*7vszy+)+<=|bT4Ot~Ig8o9nQ3Uj=BhY* z_B`{Z5*hppNhW)lqnXQ>FDIgU66Hn99p(h0k$EDMaf)%QfskI|WWrN{6_^Vxz?zOA zq(KuM#{8F1Wum0{qYS*_f1(BFQ`+FtSf=@naH9uq^uUcCxX}YQdf-M6+~|QDJ#eE3 z{>SKn5EXwk^K*Y8jTF%PQoOJCZz>`6&;hyw%Id^C?TEz;~8U&27zB^Yokf zDOZ!*Z$7!qT<`M!{DB|%ft*FW`oiPszWlrJV#x2l(>23Yk>d4#6D($UDqXLQRTP%X z@Y}Wb*TPQuw-mRm0{PqZ*IZtHUtWf?ikj}RFC9bsE{!V^JI3#9>x+N&%fAq3PrejS zqNSR{-~5#yiPk-L#SeVoZy;EYj1_W=4H$_ZxbR{;ec`JZ=tiz^0(*%l-Mn)7SRC4S zcO2UEKw;GYWs(YHiBefej9Iqhq-?1n!Ai+IQSn?Tj2Xu|Sx-II{rg}1g?RLz|8g|k zf_r1+Dl6~+rKOUUI%FP^DZ4s`961`a?btf3oI&Or`Ojr+FFyS;UT%;HUBZ_(V)F6* z4{nR+PY%TC(Uo}f?*6#AfFj2DOg#9&J-|QmY$z29Tfz%P&cly zUtJtUdl);~h|X1EpSlK9JMFvb;`C%aGWc`RxCf<+Ib?*9VQj(#5|9?7SUs3Rh_JP> z3-5$@F`7Z{6M4b~G|@B*xB%=|pv0tns)McUdIesGDv;Bw#CZ8EXth%Nr@$jtr;&vN z4p2_Rq7uMctRrifJJM5Q1={v&X#MLFQ%KRIQjH2Z$c5?wvK~)Elfcr39BrQe1+1G& zt0$$Y;o~(S!_#Uiy!iBk2U20_VduVm>6+t}C$@iWfes&Zhb~Sw_+CwaWld|aTPuoj zZPT)fvVQX@?xB&8)&}QdPLszgm*ul_*?FFW-z>*(rd5Pe9RS~_A8j?hP8FPU>S7pl zC}dv#To;-#g?Z-GDHNLU7>O)yGKGmvQNO8pcj(X|WEg94eldcr*n5)M&11(-q%w@V zfDEYRJ4QKQ*O44P{%?O4nds5v!rl6+Pt%00(lOSwmadLup`eBUTR^10xn7Ul>mq$u zSKG|m1#FPFCONN;4Msoxbri+Hum9ekAwxP49e3On?>qF~7_OU&b3gch#G7zhFi+nu zU_1SGl#?Dmiy{3gEazZ9y&W0ZdvF2$WbLkKrTg|)PQ@8)FZXQTA9%lwZuC|TZSQ6j zfITc^Ai*5<&@n40i?3jPfK@a%jwQJySM}P|8bvm}&*LkqKT_CR@Z;3N<|k z(%2?g0M@Thn-m!tX73mxXT&5LAvycwis%d45?3)i>5yc8qo>DAX&d+3Z*(3KhvSrxvy1>!D-K#caib64J~pk`)gDe;Dqkd`(#Aj zJP6<_$}R5Gi|_C!x5X&d@%m5N=g-y1*Gi*F(T>tWgEXFBsRu66Qie&*%XXBEjLbPc&&iDvWi zXL^5z+#c^uoAWllb`I5O_MLSwFWYM!OqcU8ZFw*sgV*)^uj~5!?TxObIlZ3cdLE@W z*&NgL?{fl`J`CmGzukR#y!AN1-THkgpX;AZXLzIcnm|(#k>P-l#aBE1CamZ|NVvE( za4x?2#G`TVZTpK%N`LVi5i?g`i$DG3zmNXTme{;|cO1Cs?znLIBu2WgL^pOH*HF%> zMyaBOb>Y(G*WyjR2cxSBBlu{LH|uc0z6YGW=AYR+Rw9RQ7mTY?+?(I|j(F5sl zSkO$8$}Ed48kLx(anh@;jkXzOFt$m+UU-7orS3YY04#tH%=BPLy}1?4gQ=R83SCH} z=!9}p>W8GzNIv8(oTY^on~K?peQLt`lq}%ezEmNjfZ-BG`*w}F@&3Q52dW@Ano+P= zV*@gWqUIV4^=l{=oErD(uR*x9D#cw0p;8xl4zD6h_; zz%q?O$F}-SY(%iAFoWr*u1=hgp>Yp9B}15KV>d(Gs&b*Slh#PIi(S7w5>sfeql*$v zn73M~st>%P69?rJ0DNr@o1(4(D8^_hV1;>2a^M6U$ok%Z*{{hNU<>n(D$6WG5ZAD| zu^dfwX-&b9=BS|W$|rCc3KVh8{PlI3Ki&}X=C63#_*;(m^8C+NV`=R{xOStRosT5< z)qJbQ5$-O8lt8u5(#@vW#u5>NV`c*nPaZ!R@BXFVOO}Dg zuoP5D-W}L4K8MY8$D*-uA>OlNE}oxQi#v9=V~R53v2zh;FW}Lt1_jRH^Rac$EtsLZ zjOB&a=*9)AfL5nA7oh?sf>g|Zx8NWOivB4DL3I`!Sk1;~1oLj2u<4w`8Zcu}30J2W z*95HUBtowQ&)0q{@)ynuc*UR!pHi*U zb)CewahVXkrUQ5|K~dp?pe#+76pg$gCf#r5hLSlINQIH9ZqKd>8F|oUklo+9@`sG}Wc?y)S((O~KSE>P}fHuH8u${P`(8abN0GUSAVZ*~Cd^ny&e>@!({1 zf;v$pKD44Bhf~7V^iJyBN5;zpt?@)+4xT?Jt9ePxq(z%=#!q!9^-CIP^7NhGGAGnB zOzZpdIF_69_G%ihBA)Cf*s=@-LM`&PE#_@q%IlEFB)3Q6)qHG|7AX>PEfK(`E04d? zV+G9Q=Nu=Gn{CJ;-{-6E)BSZ|ljCn(H)d;j+WbAg%U9o*-(Mf^`tKQTbDD2=El-!@ z_)b@O)gb9&vsUzzeJ=8`-|8^Ree2B!fFo3D%fi?xjB(eD#kM;jPR|{W)0Yp!)mVs2 zcroeOdUI4@&#$6$DULN=!H(~AeCXzPV#25+2I189<7O59JToK#{(7#$cJ8h9`A{|n zd3?N1W5oYvIHdKM)u}iQhZJ)z>~bM2#CgC9Ls!Ehh{7l$Ba|8Hv z?3iyuaOyg?fOuImdhR0M1C7?rAj>)W=z&n`4TRmo)R(OMaDbd|ikI_jGELR`CR$33p|y z9QKv-x0nkX_-TWEa&2$sIpbUJ%b$Ix)g0?09#C^yJnO`e!KRDhd9<+Qu%-2Z^b2s@ zBs8mB$RT2NW1U0J+xlf3BSXmd={dg#@29$uQ1eL=-#$BEEMLz>#<#3W`X;Rh&Mm%c zjb{q01zL*Hg}h#nJn3+*Ub=J{!~M9B$D+`yuO3P1w8uG#>snooYn$DZK|`??ZO{Tf zmxoKIhN7vn2^*nJX!gSiro9tzWEjHjp9CLEOSOaTo74}=Fv7y|E(fVoLW1N7E z42~Z*v+mp>GMWGYKmbWZK~!S4ZtBWpJoxU1V(aGG_`{EWGKO)V`h{nf;uf^&Ph41u zgGr&jg$fgQ7=>!Sw!<*LU2Nz-|IC)|Ot}&aXZyh-qhi=}=$=1bq zVDD~D0;oG1W)6hX9&8P#9>VQ+6Y`ij4&q{lCyhxSSFKG5eT$d}D-UZ{+yMNFgV#gi zUYEZ{%2hy2oa z;-+UCN3hMBPg@~R-{)@$R!eDCnb(PiCa%>K{}Yi47Ij^Qs9z7cQd~>DQhX}SZ5mKa zj9keazla5a#7#1XWB~>noSL^$annlmyC4~=Sd=6v4T+O#eEzRDruf7&6;AOW`cnQr zuz>Q{27B*vY_8??DvC)7*9r0BiHL;j>FDBZ&a^GFcD=q1ru8S`YaU+B-{AZ8zH`t^h(bi=z4bL;kx;I` z&mt}3SPzj-LZGF3m$%#dTrX|M$<5VZvP7(Dt&eHV`;CHWb9%q0x&oQG&N)qPPmYt{ zXAWzAE|2HCocHzbua95;z5M?Acs`eZFQ!cqtNeYw&)4#Fh1gzh%2m?1`F}B~*#D;$rvnjLDgSQpu zws6+g^r(dU+St|< zW0+Txm0G(3*X-2USc0e>z|H559Xk@Cqo<>(Nr*b35%Bg92?6ig08~64{eWKj*L}CCuYO|f6P50wtyYaRUEDe zHZ^c_p%oLHrcDqF=!)wQK&Ck(;Yydz>+=?zl|#la2_W;!Vqq$tfX6&%@>RT>)79am zNBo#@IL-CjGR{|gHV*Vzs-sL0am2C&F2Q)ti5eE{avbls^?Gt|O|7m3hcm&SYku+G z6S$HscD|%_1Kexg=2-*&wr=8Z*J54i!rw~uN_OB`XZ)_cav34I()BtpFvvaltOe6b zY^o(J%~J-4PA972BK#cC#3`Z@~0ibroiot`5c`&NNmriH9}QnBsV69`TF&Z@WF-f9p)V?Jd>^ z5sHp0FJ2eQ)7Z~x z{2gvP@wD;R#a4pV_)ch#=H*KI?D4vU zodl^sXDB9oLEQSzXAzVGBf=0l`QCR<^!zQCXui2_UNhjDHgkduH-upA;ymGm|%lD=?zJzcldTo<^VtF~_`1v{KnV*YmQSb7&#>=7n zy+_q=6mp!LEq$nXC-7xm9#;3Y;-(XunP<)+|D`-3#-=YE#x*2< zuaN=6F=w=0#*xSX9EkpXab=OC+oAKZIIt9hovU$s-~Fkr<@L?5S&T_}X+>X^zeyqi z%-p-*{qA_}xBnp8IJ%mJ6QV6%pge5^YdA8lh5(QQyM|c73f^&K1T;6Yuq20~Y?L5| zCTElbL}WrYkKmuJ3@M?DmntU5!FO`SO(#+-hrROp z-?;ya^*}Q+feUO}UVY{`#`lr^n?lAIH$*Fp`zeUl_Q|?sX^>T?tvPW z!w8WJj5Xmcv2q+Qe^{W$L?+@2%sJ-WC`a7FRaY&BrQZ688+lQM^yadM@9+57NuEzP%Nof-rfAnHxbJ8eG3GibEuxlSOXqcwBa%~TSr;X6yq>R zd&(=wT`w-pM{7qDge#jOJkAZ{0=lWO8!ojO;Ib9bidk&C&cRjQ+^`kVmC zNv-`bcd#eCw!b%Sd-JWab@j($X#Q`;roPLu+!OJkqiwO$GZp{hZjI+djBmnA+2mS$ z9nV}ltB0{K3-=!JnVCr#GI)I(!MVU1a@#|*<8k}e-N=K(c%XibFd^{p1VDZFL~I(H z5T zajew205pj<+J*W=_>x$c>Ec`&3K5q!=>td%Ohn{_eitxS?nP3@o%GERfS z)qUhjnmneYQP(v#KwT{JJRbsjL=7*HWb!8Rt zQnK|4Up!f5Q&?P)??z5J#>UmS83Bn<{7KB|F~vbIT)7o;OuEx`qW9n$&5&hQjc*ewLwO?97dA!+5pnav$dSUM;IUr2JXXuFtzXPWgT2z`jx5GG^&c2h@OmH6%Ki8{Dj(-#M#Wp+7cPM(VP?#u1zT0t zu^t&lm*^KB2^$!~DY^pec>F36lCIZM7ACk6{t`Vf`Wmu-P573_A7?FYKPTw_!7HQj z!s;kuD--cz#d4f|>1Z6-(i#uoE%E5kYw?lW?~dO;avY_rw)ob$GjVnEO0?nW>#j<; zqzx@`8W*umt+fFUGJ2T@L%74OTEPqB6fQ$skUxZ@>ZWHF*;To+S4i7|3(v+{IQ4iP z>}ITMIh~jqg=-0lT7l53grKTL&bl2}on6434Ag1zZ9`cLFP(s)fVvi&;mVF;h<%YG z0Q^;OLLjrFz^!Rb6bJcS!VeOH8<6(;4)nz2je<;!@{s3Qp8vwLI9|d-kAl<8=>jK~ z@FM-XLSO5E!u3FzP>J5I-ku~XksTT&BA0^RXs(*h;5UDHZSmbI^|mh7K}BShc6-4= zt_Q{)$AQHHCnw6Gnr;?(4eO`k=`6C)&NG=5&Q}t|w;);L@U7f_O@OM?)-6;O&y5{rWe(BYxw#zSz6#r{dh{m3XrI zmU!?A44dxpnC-$-RCjG$!70cGZtV@|)Og}BPMDDG#twh1H7E+j8jp<2)uGv_z{_Pj za@mg_J{}L>zaQ8`^a~0E-e`&TC~whU{63APKvz0aSIlG{hbf-WwKsI6tKuc>zt)3J zL>PdAh~#QWM5e&~9cuMDG-=wDhGgl?-kbV zM@m`zDXNt2g%f{<^()nMqo#8o8H_SIlWaH}rlkMiH{MweG144ObCV^8*bw$bZ{)na zda9DhVH1)*B}%1U_s8!=ee8~60v7MAqzx__Z!$TlayyM_A;wGZOK4*Kx%4eJ(D#&* zI&z)TH)*PvO)3oqWr=_c9(&mFsi97u()*lej+f$=5LQZ9`cuR!5^czbl*iC3M}3-{ z*3X@@X`IAPdI>w_TqRhY)Go?$J#|q#fCsG4fBy3cd5ARn`}@;T+V0)E(|6;Wx5T91 z%`Y$F)wdaSpv7?kwvJL@N*X@2gMO_%zWG~OG0Z@vcOTdu))2JpvMg+Ji3?)OaneocPtGr2eVwF3O68QteZ%{*%}M^A+wF6C9n0V6xFt4A zdMy85exKv!clql3^7}V@UMCTYxH*2lRL-R=0NpNa|GEw1d`j#uN&QF9nC zOPl3R493I-I2iY^k~1f)gR*_s$aT9F_s4MOI@+!reCJQ4j+F`giT7`d-n(y&cyoavW|5S4$7)JH{qvnWV{fac)B@rj=95m za0gZ`MmVOMfxVIlSU5Gprau>ZPg<0fN^nEw9+3&T=?GY=9D*j*Q((FgzUv<7>grA& z%#IG8kBjFo!MWNQO;wHYJeHlHRoA^xQz))ZG=|IB_NJ z+utAO$H9SmT)Z+6cOASrp7_R-u>;QRR*un^)+X>3-x+&b`(uiY*y8*M^08>UBU`(S z^@_{*rr*}S94CjW;&a~`h<-e(z2|{_SVL%vMnn}5k%TJ*{8j2Amy;znN7F;dPy>Hm zP3_Ddh*!XR4Y#E#+Nf2p_pd?$nB5#4e&NN<7uXPZDsW=%IIS1(ItAmsK3q$Hx@zXO2bdrg~hjPDL~Fu4`;& zRA^i9R+@b8DPb*7pEolQ9AJz7>%gga#3jSc>tshIsbuaJ*?JZd2K%SHY$H z?-EL2W?y^aG%Hx+%pYLFqlPMOmu? zp?RjdFewqWt5h@t51$gMR;?0c_jPB(-(6r%^lws4dm)Ka!8FL zl4X@2RTP!CkkTH@#;;c}<-eY`c-r`z%HT1_m(rF{&F`%^#qnMCbwO;c4^V2BF$@yA zMLp9aPofwX(OlQ!J%4kO^rCpk<@+j^UEHTgulpkc5THaX1}ClQoX}2iJJBGanN3dp z&hPwAJonslv3>jYgghj8)!cmc*=N(_m57wcJ#gSaJpAy(DG&1((UcR(5{Q;(9W2wj z=kk2c_4n#~30#qkb(1?Pg3H`fzneZCYZKo*4f*PQ?i;T;Z{HitGuJO8PIvVMVlI$m z5wrMPUcdZ4X&sXHw+q*lSvDbay~@9PpWo-}HTk;HDV0?ow>*y=KgaX=+udIumnoEA zr8K7Vm-DXyG4=IrO5E2e+zERG-@<||f}eqq{pp|i+1P|z&z8mwO;a;mIQ3dok6*!L z%xsJga>Ry+!0ZyLS+sW%+1S}LaQ#Oa=S?U(Yz4`kxfC^5CSqoJ6d1)VG8A5}3zb=~ zkN1xC3LM~E$Mpu3-Doar2?DdNt2g$(>7ID?OV7qa2kuW1Us#;L;zlBZS$x?M%cU`h zGggq@Qr=KALCbJ<49<)N{FgW3_kDQ@SwE0bQ&W$kw7@9{lG<7)f7Yq|mog~*DcVDR zz;JTCylk5C7&q?!vOTbh?CLjXvghUKwFg zo#fcRu`gbI8O1`lc?Xe=A0Je~vpUAu_D@TMB_gmcRWOnUJH7G3Ns;P$sc{Z2}-(mDQwqqIPK zWKargWq{=O*M(yJe%)(d2(KA-ea`bPmBT!-U%Iw#u_A-Pf>_*)~Ck$2I4|`vSt{>B|b~cT5nGhWw^*#u`b59?Td_I z4bNSjy1*??3;kZr7+H^0*OX)N=a+x&GZ2_#aq^`2C!Ja#@V%r?a{%`e3d-?}LluA)2! z;W|Brm<2d)Y^5y@-P94Som=9o&%G42aEAvWDzA<%#wJb_#CM{<|1N>PF#yrz2_p$5 zi8(BQ+`M^Pj3eSut++xN0qf?hh|hSJ5O0Dvh~HGPZ$n%cFh@CwXe^LsLE{x0Gl@#$ zRKYZms;gw)>$-ZC6Sd_<6cK?h{y-m>%zj#D;`1lfXX8(ikI%Wxjc=?E4Xw-X2(>5Dku4o}HRwNKo^W`!sTQW1iA zI9crQjkBdGEdV#>B+L`f zL}C60%gVcO$HsVaLM42C_GcW^`rhEZ1hDV@Zauw9befmXe#@a4=c0eSH{|c-*IW;g zlkN7K^(hY`KSxya97$G^IC84>9d0_Lsjv%48cqgMJs@g4PMgKCbdB;x#Fv}z(R3qb zah93TYA8Fol*wAo099US+5Pn*2)X`cQPQpNb6d;5mB%l?H;&J1YmU1lnC$@ppmd=| zt_n|!ODHFFwNX!GVY$bq4ctZKS>dQU{(tLl{7sY)7&C^6y?1%B(Km1+R-4+eC4kZb z@`!W8_yup<0ylSO3~)q0eRFMW>fIA_`2Luj z-UmJq&)57`v@^G7CT61^u2}^#QVYu{fw1@~!n%wprCK!C=P{49u-1yA)+!beBHBOz zGa#l*7zcgJX5g@LCPrr4qMaiu6}+Y<2V>jzT_7@!F=G@BX%=JowwTdL3R=Wbb2Vvf z*+V?Lv@T%|p&HXk&ifnTyYGR%is^V2vqAfs4?s{3M+Yp;rJ3{b>F@hs99|xZAOFMW z;zPG~#s|0b#1n8~zIAduZsH7ob+kGi9809FK_p?3WBktU-WVAg21joPkGG*`F`95Jt15XH8#r;Be9l?=$u&hz zs`W5`85ZLA8gQw0RBIt@8tMxiJ%zTv^=`-CeM@Uy3|_t*<5(VO#0IZqev&`uj>aUS z*!gFBR@wBrZn)-|zxZ3*!E(D@UtA9qJ*wyQ$Ts;s;co6tQy!lD%K7-hZ~Ut`{q zY~ysCLGIO!$@$@v(L{SXTj%35UpWz5J8q5pzW1FmHx)73^Oo4T|0A(@;$)0}>yM(o z8)Z_=V$IBfLlMJr4O(4nh!X=PGig%u;R*C8W!Q$uLnL`57#e7I>GJ=#Bv9gaZry$X9MxKnbY8R zL^N2ps^N9lfaB*_o0X+ju}<-V#B^ixAP!I5TjtLi;s?tR%WIee^R&!)rYYqm*2oI_ zZHWz!mPwEX0)Bu|-lyl4kyr)R*OxIdXzlst5D!zXDYY8T4V{J zEFp(kS=w+}uUyCS^7GEfZ#jqAa^{kQV>`QEfSuZ+6fnNn#8Yh_#ET40{Wwu`_u zJ0np(gRI}qn|8$`pZKrw)BosaL6Ftaj+r6*-c4e8XuSPaxU3@pR$Dam0VBvn4R7v> z+O6B7?i`$0%+PeqPe5c`#@II;SDY8jGVv!TQ0!8caq$#}<3SK0l4&M+4V=%q>3Iyo zPewgRa~7(30ZvH=@?)#Bn68>wjt&<8MKr(b#*tU7yBdpYh^?U5bJIQBqk2;v{XdN| zStB$rTH_!&8keeEC|$9r(H^=P1f!J>G@46oazPhCuYpt@_F3#iMircBq$Vat*XWl? z=CE985E-x`yb2=*^D9az#;+){;4UrmPkDCS*=mTjA2W&uT)g%M;>fp0cF^`rB# zfcdH_Hbu}RaUA8Zb5qa6*lI^?Ywn5@uT95Sd$Czu)gJG<4}VcfYk6g@Swae1~m z4l_q~S9QlX4o}4H?#dWjd=0tTyW`{)lmO??BBszBlZfMVceKPRu-df~+=1D+7C2YS ztL<#8T=Qz;OGl<-ch_9p*R>i$^<8m!oJ}1BNWJ?+#1fjPCS$4ryS12FYMX_)18q&N zVh#%V!<*`{rMx&5qwLIDz)L$>^e+R1TQCJz$8l!bZI?QD4Q@#tgu3RAssL{B!ZO6P z_!Y7$ZNxM4K-`!%=FA7-TYMtJN5#&nsv=DdbEF!aQKd{E7|=CCT<%&SzISe99G>tI z^F!Ra$k8*&(&?W#-L=UymQw|xYaLt{G9x4t+_kkRH*sWNUs^vTsBD84MZCJ!T25kC zP#?<{Upc?ctChaY_3;?I&eKDFbCg>!RlwnikS%6$hRdJ-+Xn&{2?>2R&H^t`IsQiG zu(3|0bNFT&S=(@^u^0>BwF-W&69cJc6(ygQ-_lX%4uN}GO~OmzWMks$GZ;w=bRv27qRq_3iV0&NyPL9 z0lNq>%3z6vi>nMpnLLa?1A*P}f*W5Xr?RCW8nqd#RZTH0Ly65qbIOKSoK&=j7sn@V_retYpgL+qvHAsoI$O@!L5VHU0}Y*6isrfaG0xECtU-U z5F=yNV?9@*xYT2OpJy#tl}QB?25twNG3d}mm@l?Lv7jV}Tx^D9rY456?aB>VMA<}O z^;kgwHq-&s60yEtVKKhOG69{K;}r{h(JAZi$ihK2x>th!7rq^wIc_|M5S@5B<;&fiSnE zU9>xC)5^)UT;quxM2POZ6%-kEGP&a+@TcGvg+@X>QI zdl~sx2=_UTx2ix6KnM#c8pXqt(N>E>%+h!?pae61bpp;5oZU@3;<@85#dv>Tyl3kn zxCt#WUq2HwYWJ>U9NfN8hN-qQ9y|7UER0=_x88p*{g132M#D!YF0GqRryAgxpdi9(2Gr>Bz`k z`7Fvo%N)%imdHZN<_*rz-do$^*~fv4h3Vws%kj7GlJ>G27>=W_4-}UIG%|6E-}P~B zJpaXe;J+UGR-78X6#w&<2jj%a)6vz}6fX`RiD!{#-8VlKAKud+(}|S&z*?3-&GY)9Xk=raF_1cadXU# zoQ^M@Jr|F^HWa_`(EH+cY;z7`)Ai+AaUb~m=DT|07eD^lc<7c}V*4I8anl3w zllR^XF*+Xut<|vu{#y%#$vFV114!SDt=Tic@HRHe^ANxjP1Dgo)e^mIu+CgwjE_Eb zGQM=?V!Z2~0~p9}j@=MRIaJeDOCidr^n)ssVU2^s522EHBKH#u@O z-UiXuhz#}!>unF5`cXt^YFMk9*r=QXPNlnV!ql7i&lOeM#0A+Z&bqdpd)SeIlTaZy2>fc^3c&(?Y|A(yl&*+Tj(Pc z4C$*H^35loDphK?c#-k|nONiaU;0pUTotSnHF)z=$zDRUQW&AV(rwiZF!EraC?CE6 z3<|^QIjlk(nNbb!ze2idP70Qlg$3@kS-gnn$4u`E&jxAfbplpmCN01METuV7d{!oA z5g8^InZyyLBANM-xS&odyMX~r6D&QY{L>D_N+$w>S2om8XrWO7(x%3HC8BW+rOQSF z-Vq~xOW%oa$nn#=oO$|EGQP5fiWj-{g|k&nb@G1&{VRuY*Ko>#6QXwHC17^}@H5X+I3i+lL+;dski z-V(ZHb+;@BSL9~=oR|G+`64n0(`P5M@4SjsL{|Bm*EBZtn|U~{)+LYm^{p=Yr|56< z&iNQG!AL@A#kg9Q^)O9&kl;?oNCJAPKBkpxC(^HhxLpF)oOB+eiR={@(3HzI2(emJ zMe7<`(PCdh;QmT7#gjxh*uho78Ob6m<#oO09w1F{SE`ryhK+h|w6DD0IZhTq$lo^7 z6>sdnDi;tHEkGbXTZUo|0=~lMjd;vzMUmw*fAmQF{LlZ>xbybCDb75Ep5tl1*(c?p zd1x}a+FGL?L*jD-Loql$9J`kfMgxo38pQC#)N~BOg<9PR%+_F#05u&{!3n^;U{SU`rW7UDcgI$u8XLeveOi^bDN*&JMmd*AxK^ati+SS(gC zkpla?J^D0p&P1G$W<} zVqs_@NYQR)5m*3Yw!oNHo$ucqH*IZVdJxEXG$ z=!lmv@AbKV__o+xaV5TRtS^49-oMo?y7iu_qG^1I~yN6JP?2PmP6|uJ_o1LHDQfo<4SOsaOttS8&lT|HT(Sj5ij&OGH9_2zm{HW#_oAITCf_P2B<5#bay;uKZ&V!S zy?N9j1Fv&|CUBbTj9$@PKWwWw%=JdDnz(P3e$c|oGG%V8+C|qb$I~o(u4@M1}rO}Ir5HuVBHVErvKn*foIoKo_sr zkJQ60oW_#DBKu0J)*(mBgT^;a@ng z{3RU#*S>n}7rP$Tvz|es#n>o%GROaOy!pVtj7MMi-{Y1okF4jvA*=1l__e*d0tH)z zJT*KHM8Vxqcq+lTp&&I697_3dCIFm(=NUILD1vUB*>Fij)~=xpjA)roYAVK0Vd>^{ zRQBGPY>%%_p2B1qvd36|5Uz!lRmLz8roekGOwW}$)*sfiT1@aQVIg9z5{46HRpIbL zhb78rTN6d;guOL5t!v1*CMzGnn6+Mp7N{nD1VwH}obLmKO16 za1(Kj8Lc!S$*h6Qr=gMsbQdXQWEPMUF*p%20h*u7yE7|irO5noawM9TbWVnxCYw_5 zoq77HjK)lBT6w;SFeqgzft~WQael5;lyc~b~hkrD_ADPiJXHFv1H5bj8VOoYzD&NrLvU5Gtv%4*V zqn_K9pS?Pn%ipJWr9UYjStMoQdgy6lXA6IU$w)lfpuCtc>Q(Uu?ODyBIVtz#M}O?^ z!I?*^8f6N(9^+^nFSGmgv_m(oAa^`97Jd8nvN3Iqi4$Kyv|uhe`|pNJG83)6H6SSJj;!P~q8!zX z86B6ZEb>+4DiPr{SsA)&cFRp1L(Ou;tSwk^vk?(mo2FdZfG%;Sm z0&O39(#5e82++Rg|La1j$dsQOBk}N!@ZI;o40c%ikZEqDgO{3X<0a$_J8=rXjrsVQ z$G#jN{@`0wO3+%r7P;;s5e&w-*{)z1kTdn88#yo7>4hRD_2)g3L1=E zy|rkPFT>RZXVs%PgaTs+rwRi|AHHw0t;N;%F2=G4A96v@^u#mA3a!X7Q$%lUyg260`(+-azp zjI;BIR<-VomByJkdGS=d^H?x-;&$w9ZiVpK-ux6CxCdhX#O3%u zU*Tj-5gg=k|HJp(5s#c3isu{au#tKdoO>-k(Cyp;^G}Y`WXWq%1MYU0!L9YI7u9T1 zHT|Xop9L0s;X5fV0_?(gHP%Sh#M^M2T48jEkLz&hy95qdgDadFB*lCvxT3BT&NZ1D zb8x)G_bSY}E+{uE5$Wlj@#fh8yKae_#dG--Oq?$cYU0Gm?;~?pSqH#nD}|Xa%Tu&L zLc@D;y_KLsx7^nX{4f(<>0$ zaQEh6*-o=jy1KwgBdpG!eCSPBDOrure({mGNNNoSf+^eP+&tJ zMM~G=^Yuvi20RMl$AOJmKEC4uefpw5LdlCE3 zO>njQV-+hCEA5J&;mWz0lV9jR?eH!!PHW)#HSX7deWhr%&d|vCPajuD({X|kya)mh6)~xF>Kol$d?8a&c-xcNz!jH)<@G^FtlTHMw zZTp&O2#Eum0afncrAwD$|Ni|+o~4G}iJdjUPNyE0ZVo9vnPg6EexI+`%cuH2(T9w5 z=9-#^FpxI`bgT7V4|xsC@e5L<_?$uHS}O(x7+p`4Uc{K~KVN=TSWs6F`Lg9&*kGO!t6^|#-Cd%W<%3kgw3z(~;g?WLDqN}Sd# z7GPb>Uro?VaGGA^r83ygojcBou&fvFvEOmW8!qG)+n9jnXQyIZ_YI&i#xvh{1X7F1T zF#x_ALB!K=AX-4+M_+y+{^c+ILY%)k%xuI<)p2Ya;Q{_0?t9zr6ze|Wqz{+K*)3`O0K>_t;j@oM=;>PLw-3M=t zAN!#np^q46oD(STbougR;!IW|z+cVI+c7B*3%4JNktbdSDbP-kXC*uJ8HnAsEq&1k zK{z@v98L6V6{dxz;ApP)^hRe(9cJ3#j8%@snNwr&$cazHt1q64y59EKk5{7G*RTL^ za2xVmW3lVxS(LWejbDbVQ-3ioV@uO8aP~~>+_yh29X)~~Nl%Cp`$uF zx6Y&84yUHSaO@$RI!?teRf+KuBV<@}!%<)ew=d3DgzHX824 z^U~-k491%&n)MKNp*jN&T67_s1VRxg0yTO~em>Z+E)!ajgH7?3R~I<3X^cfqCn^yRSjKO<9HQll0iIjq#MtrZoIV|`cYa^|!<~1= z_v{?Td;v?}Y)5?dl@=T#uwjEDX;~VLcXTz!C)j}flS`v9G=f+JGP8lmPIpgQD%ZQX zdfr8R1?L?s@En5+zx61k%%Zee#kclOl(Hn`z^~#$gKLNLUA*g}E{^s%!FLi75`hhf z1k^8M>X5dWryN!BxTk%o4Auq-&#n%{(!dR8PM%8d)roK(ItR7s3h4=M<+cq&N{jYmvA;H^J*MJ#<5;4&$6tq zZ7mN6nm5P3_HCGwu8RR=SLcDBxycb^KSyGkCiNl9|E{;+g1NNm_|4D12&c9w4nO-E zW|SbdqAz+j&Bea`yHL~`fLji?8LJA6e%$|-w?%V%b$tEOQ>-&>aUM~XzWsaS_|apr z@Alhbx_uB?&Wbqt_@mL?cqz`&Zxd%r}l@}3Au ze;=ZiGf>8wlTMYN7!yOv!}^1xD`{Bu)_qZl>u5M4FMuqn0&eiM4ThYzR(2Tvy~<4OMW= z(TZT>#slk`m%=d(_b^-1$(pC9b}Z}T9Giw}WVQc)_TD>C&a1xj{!P8T_afbUb=A8i zTb7F~8{Dx-mpQD%jUt1`$# zC}3i0au?vB9bthjvJi4`W|zjyX}vPMME!6l%Z#UnOyin)_a?FiIxY)l-et$ETDB>Y-s0Aslseq(_ z=%GW0UU!D$$B(-OyMFz8=g%tO>bVfS@WKmjApSka!@Y|j%B?_6QndCLpw<2&79wCGC?X)bj-I7n-gZa0IKRd~$LLy@ z0#BVgdyKs2s$;d?`%T+*9o>TnntXw?+wR@Fag`W_$Pv{}dYG=RE~kCoNwmEB7@(|Z z0x2%UWQb#y5CE#Jt+wy}%~vT&8X_%AwH+XpiQ2pz)Bt>v>f+Q8FU-e;&gAv_mVI6C zv)503_x8))=I!UbU);yr;Fi|KFBd;}=U^#ee#vMn^eo)-BzI#`0nyW#&gHlKneW$R65n{Kzs92WWXS$q8SQHxP+X2Up< zq(fsijbIujz#+Z=IDuN*EsdYkaCesty|mvNR_?H>6%AB9A`oKqC{egnIa=9l`@7q$ zpbRYl(!N%9X1p>?ElvQ2vV@3frqJHFN=^V+4WZI;PZ31cL=gv(tH}w#ZVmxE8+>-; z1+>Vx5kM9lv)4J7mUQ-zyzaC7rG#U>=k>ZD|L>Q7^9XD!t+7fpuG4cpwxzMbwvzs; zwXWXMX!#Z}`Zb}|y7z@K80)0nx?;PXog1^E%3{)Oox)KOEe%wA7Hv|zkIGSH2~srW z+Q^wfD{RQIEgLJWso!t+o_&U3LKtWc{`>f%o;Z2RrdT_9I6Hpuv1je34OLbXtcAx6 zqD%@~^STTmgZ-0s?+`%xLd5o;I)O$gY&*6<7iQ5&M!Kva zmwdGpN$46Hv8yl-@9PFkqbWU9syS=477cQYl|nz zYN6kf&{EN3(PHszu!ZZBuBYP#g!R&~MYt%bzxrHUTxt_oZnW^kmz^*wp%g2ZeitrK zDePj>a+L$hg%RZ2Dxp-@l?L9eMUI!zD*zn`5dm{uAgXQ+kzxp2pl_kli+h{x2UtupCB|cyJQObC6Cn?c ztrU3~B$9onZ~WO8K+{Q3lv1hrgA#CZ2{g;K^{qGBsWY$Gg`T_Ys^VX@wX1G<-3gMc zF)3BtSToSNo|JC7zLY@oDA)Y5VuDu!WR}tMl*YCYrH~(2fq9fHZeNhA&LIGpDUN^! zo$tzK6A;)Xs4%URU4;mO#6~DMZ$8B~|mTnuaf+?&7aVbMm7R5ZSnKqXRygz}oIi*5rK@nA9ZqnkKB57R#Y=_giKM z4s(o7`(~KU#Y?%vb>25?0R zD8l5VWp)+OxchDW&xTU4lanfpw7;VLuP{j<+oH^qNk&cro zNZUnBBqXSb2=Znu zSuXJSuWjDF=)PWSuLq9YrfaY5^Uq7tK?raNGoYkM<#R0M9#y#gxu+kuM;^S7zK89p zXP#r+2(Ul`4r7X$n?Wb9XDVCYoOtUQzHJYm3Xal(Y#4u6Su~xq`ISMnMwGV7*w9y(W&fwpe zK6Dy?#F%Y*@B7g>%-Wd;AG7xJl&o!8fmQ%zdFOWk06+jqL_t((mw=VPW$TE>9k5&~ zf~Bc?6Zgffs!kr7nGwnUo0*$Buh)m{U;pptfBOhDu7^gTotYZ(n)w|&M=PmJ0l`$z1TuHR^@RO7|U3OjVR&H68N5HJ$ARW;1S@qqP?U`fbt zuyN+p;>e(F-B3YcgbK8vXm$ag{^T%oY|gG&Q*TA-0{eqUAGZAz3`kaOwC9d?SRohu zRCB%!groLMU(`l1PWX%PPsi`k4>Mn#U&@U4+ljWZ*A4E2FYhCL7ZL0LSP845^P+j0 z&$70KCNeourC^ZuRQri$OR*ukJCBK9{1XY@(NtNXw3bFDNU=y(k?9F66>LjM$cOIc z0(gs1ENQ#i1e#Nbw4>9aZ%G8l0{D#hhP1mZN7r<%2?CTtoXhbEq(AZbB;{bGV9|9w z-hoQZ^-cb+0>nD6`XoN$`oc-&0yjE3jG&PzgRXU``;xD&lo`2bkk#MVBtVVk(O&n3 zKdn1Ij#l(}8=O3D69M`O-7STVUQUVP7Sx*e9_}EiKb@B*njqMDs$;FnDYt>hgq=X^ z=|A6Q4g2@mx=kA`AOGD6=3JyGj`lxh)wmY8{z7l35VW>kzteWDTxUnfr+xH9FLNtx z)y);SbWB@?uhs$t=2_#MjUCx%i_E!-x2#2jNNfrqCyJl-@WhzS#v7nzA#28kUu+@z}f4o}*6e27D;Q#qX%nOynAmcQYOlUQc;ca;G7%mgj_M!JaXuYEkk$$l4 zb*Bjsw5#Aa(Og(J1Q0&&%<)nr@tw~_2tVUw4G07LW6;wv1d~t@oPdHMNLnjBXMx=e zVdg$Wu+;#yc#)v|sD@CJ4JO3?rDU?`AF(1j7a%ZK!E!Tmvj|^gzG3~j7!l?`KD=Mq z8se1c4djDaC=3xG_F_S?5{w};ithl?IWo>j*m0`YjE}Ce)4&1g0L%rDtqcV2n*bib zRZ1=Ap9?>mr)Y`hlB4_FyFNQyqDd>}!!)&UQGvaPN z%%VC7<*nOaC(;0TCzX?~wkb#0YmE-*i}t01`d!y@`@#5itfT~WM5=7>H*I&-yxfyv z((=2~IJo0<4x#9!%V;3=(MQCZr;*KE|MdVQpcD_K-MV#-xQTFxa0%>bfeFZZrgz<&2!MMA{HD($ zFgivOv)mR`6ydt-u5%h-^+VUy{`#zablz;Rs($J`0+>3#2#T&N;wl0sjj~)HWYX7o z=yw6s42Z~RZgtPvE-&8FNuvdm$6S3koBwLwO@*zBu_|)GpgjrYB+LCWg3jZ5Da~&_Og7^G2R!ZBEK$99l zdd!7!EU*s30?+v2B{@!!zf~;qD86I)3*3)1mISz*#AFqQP*xDUl?!;Ck*fi7U%?%6 zzn8|u07j_x-%A^DMyns zf<_8D!Cde&hAE<|)iTd#i6gT~d3Tdias7-mk1lBr|ExD}j(hz~k%lNla`(}R1slfQ zrwk40!04QP=;7~M3mU8#eunSa9w8e+jeWoUh%KLHy#qw^U{cqXtRrV}*fx^RFHK6T z_UQ_HWeE3|#t4L&DiHItFwRXCckGBC693-m_VSLNRSISJ&fDI zI(zi=7_4r{;?TX9$Cwi%mG*@lCH4nDe%}83;gFToVbYyFY5izeD+ngpvSyV%aOAYD zty*oq*<)6Mrl-Ccp^ylhll{H6j9j7Jm>|U~O3|J**X7xvBPXrAVYNN>@^O6gj@Xr( zTWupjK4So;!Qr5dN}wk{@gfXb^%A6EI#)36EJd$5yJbc$mH>4?J4!I!%Iv?qq0w?T zUG6kO0x~&r@}s%A0gn;ibl;b@MLoU)IA$gBJHjYD$a7Ou)jB$F)nst^(EEShUV8Fr zfLEP!vyv4muc+9q3(->1K$-v59L?u^;@x9_;T8C{|JE0O7uTIW`@xTXgr8-#-FV}T zB=Gmyp~$cuK6Ts*v5+MJluDqgs`Fh=fPtX+$1_LJ|RU-Q+>6&uK1LE zd-dBW;8s4k?*4fmqPgl@cB@)>gEeou1pqw-T{}Z?);>V-2|GN{Z7A9?7ZXTCPig=? zJ64t2t49ZH<4T12vkXT(-wpw&Uj6cSNyk=hcl_q9%9d@3qkHV20{hFiS=WhYEf5*C zhN32$JK1F~`WEd2zwrtC94=^o_=T?$s7fI0RG!suthXDlz1n{C;DeU84!5?E9vgp% zlF4sDh+KMp0MB^FgaQADto~HfYThjq#B`b`dv-B%qoaVN4IK)Mzk+ z!awj6*OuPAXYbGu0jwM+Zr?uj)cWEEGp?wymLYc1+zF5<2QG&TrXzZhmcZhtf2?U=20%Dx`Srq05 zhX=9pq39@FX60M9+BAx%FdFrE+bPS5Ov3LXR?xE2;`PfJQ&Ox=kD_@cb_ehpi_V#k z6ppGFor85RE@2J25YLC#BUqJHECmob3c{QC|YH*!r5hr2Mh}Q$D zCB)9Y^MQ=7ACKkYKJIvRnii&xx0=^q_k}+KZURkOh?)TV_U&`P(ermz-d9Zu0a$@q zkBPOkkdlLiFW{=}U0q!cRBD^Fw>qzyfTAX+2ZjY2CG9pfH94Z7YwP?X9CBe0xRr)n zKv^1K?W=PNkm_9etaIzL*B1{Q>l^~Qx`uueArisUHl0^ZebH|^USpwLv-+$)=v^<3 zh4&IDR=afEbPk={1IOxvuCJH&&0*pAAo7`9g-k4uUY9ddT9cursoI%n1=a6P@+h80i5pJ_!3(wi(N1wr$o%Agb76q|QQQ}bMm>jMH>0EN zar(7(>*ZUJSjpfJ(fR+XC%UXBryw8ZdPC<*Ed7t zDH47zRl1biUE@xo_Y_)(c{I9dKxSS+v19Cz0!NhQBLulbNpcQ>T10cakecP1lv0dz z6CsPnK3-@qRXu01_$Y)!G$7-qLRdL|u1Mj~Vb!)5Q49m{T|#y4kE%x0$xsAA-^%dZXF z^J)CR7eN|BPg(HX0jmzo+1pDuSqGfF^DDL`s!a@H!*%Ec)r5<$T8!*U9P_~28ndGFzK z97V;bFmn`5-7L)h0Dj_w`GXcG3r7T@cWMkyw}2xiz#>M$1b;rl@g$(Z*)TJF!W+jl z+97_S5CW!XnCv{+Jf;Y`6g|p?hARKDYfFk6m*$FjBETS)Lt;5r2SO!%)l3$>)EX&) z-YXV>WONL@Otfa-`1ZH#6Ce4Q?SJtFG+F(iJREb-ti|Cg5`X=e_?@Yp&(rwqrl8d@ z8#HG*_E+Ejy6wE;N(9M-{rZ=F$4b#CtL1)8Oj{W(cSPL4?-ebo(XQ36NHS3{t za1}03qLWgNh_{TB%|Sl=vZhG^qVl(8WJ3|ZP^^sH7PN1iIWt2aSFA?rHA^kBt`99R}Vu%I;}Xuk$=wNfB~-g3IK=-#uP@$xR`}W*;WWBn_%DL-21^l z`o6t&S&7|t%X`h&L2-hyy|xU0$svj&B!ivy{jdHL>fIK5+sA&>sL5sHU9Vbg^GfKP z&pJBJk$ZLA-t(UKAVl{O(0Y{YEAZ(@_FChWms`!&bsT|@FraIEY{4dZCQhda73>onCl@VkXFwC0*g=tqPZ5-3h$_@)LCc9v~g zWs{7VuVixyEXvi#hL-(1F(rETVyUS`2VtnWGqc(z)hL2WCIrSibc78I;2Ugso zkX&cQ(&!aZTIUc(LiByX(PNB^}H6Ro|5gO8`)yM<7*AlS2DTGpcbA z_|u}+c74~r0*V5Cx-adgdlLv1*b``#R#f9FqM>c7=(T_Uem5!gnY}qoqZr9bea?`eqWC_8np|*7#fT|kbVdhy8l4*MC6cQc851+QGMv6<| z>!nsg{*;KG6F|+)D;S8zMq{Bd^kF8Kz@eZr%_~LHpFVQTme*zc(&iT<_V`neK*-{D z`3<*NOXVtjs;cdQ`|q*gS6{X(fAf>p@{O@NQzMLCPq%mH4JyU~EM9&o=Xfjb8nw;X~C;%Iv30Fp_3 z^&&G`XMjh*Y#8mZp3OX3(j<~=3b%z^Ouh+@(Y>h>%L3P5fEp(toGzFeAEzLZ=Fat> z>MK3~ZzZ`i^Xe-sc^c`NG+AoO)2n-1WFExOrXz=vAp(sJQK$-PDV1~#ZOg^Tql}0LQlIv~~6La~$qP zXsRAR(uH;(06Ton297-CqL|weI(Ie=*uwsYt>m)n@jZky^hpTEr=C2o3pF`bw|bk+ z;2M)a5bT*pKm)WEVJV!EzzuUvP&KJekICW2#yO z&Vv~P&R~vH69A=PsrC3_o^3tWxO|1RP%Ud1?a(}0J0EGa@(GfRqRDbrhNUb#-ZL!0 z0w9p4A}dOt6+qxjqlwk*h~rYDD04N<18=HorHlKyCJPL6NeSuoy9)?fno9z*i>%o& zU|12_vYI{i@WXDcb$1e+32h&xikRrM+!vg{&N`IvEkG%H-Q2X2ds@b&{MHA|orm6* z0A7cnCgam%Xr3EMvzKpMHgC1q-jmi)+hE7e;FeU==v)-V3pAhQ<`zTiCh#h&p1zAW z4D^$A0!yO!QB7r)yR$;ZUe`uJ4u~AP$a69`oca5WZ{9$qHqOhl8H9$4<(H!fXfDN- zh-A_6egqKK|M+6iM)>xNsmeFc<&+`IoGA0;1J98x5be;l6guPj6P5VhWp^8i%@8qG!K8)V-F zLkn1oCu=@U;9JjzWNLTnprXBk1>F)|%Q$B1ts zh9t!rm+b6k&P9~f0HB_OaGJ)a9j{^5KGhrXBlm;pH0-V=kxIghky7 z>fir4B-Kgt<1d$_a*0R0wI~I21VlVQlt4nzXC=3lTYyK*#k94*OtRPp9TV3DRfTJ^gCt3a7Kp)y!+R?p1GPnU)pqCZ(mR9)7W@(Mq{hI zea(PU)TGvR_P9O#;~zTLf!)_^B&F7R*Pp$6_geqhqz#Uf0GVloaA{lW%%1q^!`6r9 zXd2+ue*T=jw092`sU{h_7~r?nUOsfp+6RfsfAkpwBWjSE<*H&XXl0&Ur|MfAsUO!` zH*Z5r+7kH?El`WOo`mWhm_qhE^MorfF)~Rm)u(@Iy?qe3To~V;kgfjsTkUL5ubqDN zuCPa%p zlDN=>@kv(T+@f49mZ+?rshskIn0|anopJvN)(Fz50I)-7Q|BlvSXPN|;@Vd0J9HKz zl37Cv0?;GZdS{xzT$u|zoH&}N1vJ31darvpV_O5oKoyp2kNV=?veu4_afXWNDxpA`<#tDL*8MLue2hhxr z`FD`)=oq+?b`0fhzJXwnPgHaa%Xycx2RMy1j5Sv97^2Ik2m z0$BIlB(x5#Dnb%sDC>-fakPi{51|PKV3p%41>+p*?LtEfxWsKnB{c&uMiuVKLF*fe zB++h_*xVHEOa=JX0szKXSN-@@&V@=?e^@)Dfn8F@cw4{gvI3$m^jpzB(z zYg$Qn$MG$!vz$7F(Io*`E>NPeYNGo|KI?kZ@QZ-52}w&#ftXsXFJ+Y071iEcR%b~H zr!?bV7_DLigBxwC6Bjsui>xf2o!!vqOuk#i9!Lm~kS}3Bits#&ude98EN)P;APV%( z14zW@)K{$o@wn`^`~A1u{r5e|@6$Z*YOF;OGB?cFAQs-7G(rXBtf8TbRAvNrk5r4$Q!UF8cpIUTf}MJ@J6 zfBeVxH6j_Uu86Uk07S*T0ywXuH;0@=&J@-}Rua z`qVE|0gj*~$_e`by+t)X`;C=1*d$X3I^qC9| zdN@+vOtAJQCWoxPuEkb1Z?f^xi1l`l*`2q3^>wF7BfQD-SB#6rjM5>HLpB$y;0(E# zQG3Gsu_|KrPg5>A&06%~Qpez0f^`!o<4l0+VseRLk}+_?nVA5+MU)(gIDIanGUPl( zH|S5oSLuR*3&{OChxR);32fwaIRx^>@GTDkICCggp!8xf_<0aZy+1nca?lFrB&X4$ zB2e-JiWA%gumT~S;K{M1djSScQ1-4Z>9$Vl z(!w~knrI$@)+E(S6-aE61hg=-1b{}ryGSuQs?T~QNL3=9t%V^MXf@}0fZE4JV@m9L zlcwwXk=8j;W{)MauS$){l&IfH#`L{1#lh62GHqP0ZD;70bp$x!BLtiolDsa z^jW`mc9LHaFe{KOVCqT0p3kX>hR&z$YU-OnrwCcLX4UJL_Eld6aCKjDe-J>{H9f7Z z0J5H!`mWC&0rH-`uA|?x-}O2B_w3(vf8H4DTmtaA{}9@^St>J?Ag&99e(SEkb-;B5 zpPCIV^=M82`u!I$)e|6r&*lulM@l=D7sAgHf`=m0KKaStw{vID0Lo%8uC#5~+-NIt zGkDj3dWYTobDy-%jxIaZcHY+Pd<)ma{3Fs22*fGVLP)2sY3}muyt$QRoW*e(aq}1- z>Lsaif^$#Wqt8BU8#ZmQq49peAljaEjjbU+=8u0!zYzq^TsUiw0+_E_xt@wyQ)o8P zbi*`MakF@1 zi?OcA@`yA_zDX8$E@PZeKusZ9iwKNeU|GRes`?|x|1gq!4sHg-Ls(o{xY6q9xxhZ% zv(S~n?Cx_w(g8#*hRZ=-VbW$@pw6PLxNNH(yZccmfI0?Af8?%GUQtCFB2^rkv?)^m zND~{KmeUdLCi8MNSz6a<5Cop_Qm`{8`|az0^AqbvV%M(fAFv7wYL_$IqrS`KiG}`rAs~9cF5KOB+=Q}o}SZyg{UZ)vVe8TDq3hjvthwaEjkM&2UY-Rm204!!;iWxi~M1xygV&lbr zyKmoqTMKab_?0)?-|T(TW&xlVW(dfVus$(t%eJhuW;7O^$Isb``C@w)831Zmk?A;w zsc<%Jm#;3c$GWF2&`$s(fb=cf2&A=9w7J!o`tz)iNm5CQxcrem(k}tja1RT>KPt#l z5{01`qSz==6f{+sA_PvNl4AbgQwI=H{z`$YIx?P&j$?vljh5gyI0d+iC&`aWDy3Cu z68+pqUkX4qJc8y5js@+>ZULC~986YPQfD?0-(!bGEIMJ;-uSQfrpIs!|-)3@c=&s zDOA<48Vd?F1)vk~TLkAgC&-8SYZ0v>Pxk_uV%A@|3q(y^#_6Pu0$Rgp+r6!l9uI?-xCv<+{p$uHU(e+gHHaff;o;tKC+&+^XJvxqbcqXKcp}<@Wyf zeAqtw=`WLwKv^7GERyQBUUFFLxs(FZ=5P-SbHj-=nNtAMa=e&jdzl-IxUHzIvv1#h zpFMZD%WmA*fO4YLHtlY<=3OhSgaR*Z^H11ceCCw>@UMPiKlkb1v*~$wDHf-BTuAcB zs*q%G3IIteiV$FYa-iuob9uI~fh7JYO*-%To)x|IO7mTJ1wmy9K0_1s>Lk`vtXMHD z{+AWBT3hW5&l@Wl0+e*om$ui@2`HNA7ao*6lYmv0@(fUx#8Gr0-{W5Ks_ne&7jdHl zOlJ*UZe^?EQ8S~^Wz6sa3M)j1QBaUhP1VujWaCJ4{UAUud>mX+0u}@Khsb;rgO>)! z*msG~Y0e42CIN~*1Op%ZC`o~vLNwe_6p?X&k{m}DlqCRno<;IRr#gFBe*_ovIgT4g z96>?~iUNeh2zj8xQPv3<>AgSyK3mn?Y-bN2vmZb3h%M%VyEup6UukhF`W3?W9f(B; zT|mnltVd(avrnHwaW}wPg+EGw&MhHT95`Seex!g!oP=;|BS3HsR&V;Azp4g}J()VZ z!Hz)`rt#+~L;{#eLp1*M6ZYiizifGzZL`o-^_F{nXla77n8f__5|`n>#5o@-YE5{h z2Vz+Q7CAL$OSg?JvuJ-@gZT<7ivP%`Rpt^M;fKL`Ewd2xyma!+0(a>bq(S4UN?O&s z9m)QS5btwlugqVsFItSs(BPTP1t@iH^+U%9 zK#QVKOxF-F7a`J1`{)>*Psiw3eZTaj zK7049&zCm!QDdV%c;H^ZT7JB`hKd%HlWS7Gp`ZBJN358|AahC)W~3NVw9^1DX^7(p zE>TQaaeV5+xU$IIKzfF2uG&T*-3kguthMUeDyN+J?rw^R(xzJK0pL_ z9#}RY2_18C!`jv6hv@hrUQw!}E{ZmR$&1dpzPfjPc0}g2QIa4k->v`1 z=FJoJL2E(G3Md z63C0$yO7+QSBF*-G^JEVXjx!5S5`JN1|gfApR(c3UfWVs;{>O>AO9gDR)h7$@&6`` z+f>hCTe}jA(F_46Q@OTkWea}dRn|5)YCGyrTYcsA_V}x3Z4%J(R(uVgM^Ce9UC`

      QS$VWiB9n0Z!-NUvx8MViXz)VHUab4m0vD7lpGIQq_KeHVY z3ttt6%KVmOzNAoZf(jTvKrou#md2amPomkcja<#2e39pjZ)r6`2z+O8jI0x=H5b~k zPAmuL4Yygc8$ac1S3`pl21d|cR>+f@m>R4JKKxCkB#^(WD8ZsMoV;?t5o&=DaX!rV zl17doIQTc4>Z}Bx^%T~;7y_Rk4S99ra{J_`KX1LKJJ@dp02y8wo3O$vG^``geQ3c? zUN~s+C-#z!1mK$k9UurXjX+os#Fv(skXfwxvMyTRfIal&gZ9q1YfXM z_paMeU^O^kDk>U58B$1rm0uY@Z&lS5_IUD;RTB_Aj(gie4BVr^)hm}t5g8$MM-jdi z7pOu31H0mDpRw;={~Na9!?#<>oi{n~rGOTvan&gBl3#_6Pv@X@Ve!CAX-q&qxO3B2 znL-F3$`E-mO=)J?N8+c{#ry&JXH+jbhhwaqMT_2@n+t`|WC>J=KnVV7yR^Bgx9+aP zWXx`kV6(5@^;#f5nfuH&^)3*bX_=Xn#?-`~*{5)y1;iZS;urxv0Z`{84R92o6w?xj zbVOt6S^|k`+SfDF>zV>{0=;5zI`3I?@h&^%ypy%A3V9I{~6q=nWG`9_mAs{p;u!z4HgdU|2Ym5l& zdG5)F76ua_uBH%q7&+t3N?}c5+Q&CfI$Q~!vXCgzd5ZNXwu6d^@j-)tX;|jBC=#y^ zb8SA=ZxT4nm!WkjX)49fn0_!eH4TkcL89-Gv2p7i96?|r!v;dDf>NNCZamTXqGk{^ zpq~H?&@);T-jK-2m`4AgJ7|kj9K+ORSNsX-tyaDxE=%L0XQSrk+0vSp_2xgKdGkc` zMlE}NXl=Rqv^4kCU$5`~5q$3Z}# zpXB~Qv^%Q&wk}j*pIUzdYbId*B=>*+%4?}+rD{+~`~1`2CR*EX)qs*wxx0k%bLYWs z!xu5x^HU3=~;MZ?S)_mMFxMNy-u_jv-0ljNnAhDzqmag}jpZdL-=aw_nb1>prr`IOzx zceLBKt=r_><2D}$W4wsgaf<9J<++8nnaJ_pt}eUm@|`x0@c7)bFLDpW3$XSDM8!j7Db(CnzjaOV zF^}hskB_>37Ga7PT`%BW`)PSWp+%ouT*+@X`(HocX12|rSbxg*`5`0#*j-@MlH zQ5J-*-em2ptM(TTk@gUCf7^f+kPRboC+Fz~3v6$;g00If)-`CMD!@7}BEhP9Cv3^o zCZTH)yrGJV#eh=vWfAuX1^<n7^ zCWklz=!f5S147$dnC~c7u$DXe&wMQ;cuY>alohcT&OB{-D@*L=g=*`8cOIO~av?y# zWwB#|$s=V{u9((>RVB)7>)(FPe82m!<$T~;QWe33=(CuvCbnj&CaVbb#B^rj3T6tE zI*`ghIk?I9G)zhpJkQlq#wSzahIT_mtOcvz+;=|f0eg$ZV*)7vOy+mAHZcD!`zpne{OEC(W(4iw)@-DFO}DGW)xa?vKtd@TdL> zfa!O=yv3>Q0*UIg#zZfHDZLAjdW1&zC;;l+r}h_U6&TjLg0|ETT~AHhbPf>=HGx%q z7l_ui^}Eh3f+be~?WcZ9AXvY7pi;-^oO;)FbiAiMRloF7 z^UkYxy}bMLes??ZNB5`ecpyI)a4G*3qays<2cwqXnT)8ZFgLKoxOF-b{pz$ zx33*+qhc7D1j2=+{3x~@g1NS?!Z{bo_VUfk?S1duX7@dGm}#hcV39*zeazh)e3@o3 zSArznI&p)t^ydHzG39_aV-8qTmWF%@gD~kd?ly@W{F&tcgJwE_7A%DpED5pA$NwsY z5Ef^gP%oGf!dgPL#6KFmKCZ%4@%qyM|Yf5=Y5L0GI?C+6c$uoA0c!3+(Sld#sk3U%b0-ul;dp`W%6|^q1H6`QQ0T{nC8V zobcw0H~00MCn#!+z2CLn+vk60-~Rucy8_?yKIUg-UWwhlg|e}f`8(*{!4Rlj>bIkUr`VKi*;|STy2&(A;?1ixsECb}m zNPjgCb8N#64XKEN7I|1ShU}H+C{s+alH$-9Y2$*{@4o^c$RY%6)WV)~us8l%kF>XNi=s!m%OTGIzllh?Gm71#j1#WkXYY&?Z%i=qS?`Qt~OYeHi~ zMpNaD@m^@n43Xd`0IsUobQTS1A=3jxMO(FTgUc|GhfBaTn&*51uta;63Q+#MVb+u8WEeoJ_c%0T z#g>iM*4<&_fHh@PiLxfeJ8}RgK3pYOhIYf2o%V;1JZalM^%?uSyT47WO2AfyD{Q(j z?zFB_sAx`W{)&HiyhXf2&tr514Io0flqcMw<8SiEO`;UgwFH8*Tb$#TG0sB-bw(t$ zVxEz=aEQ5q;vbVVXNZtPegc0;usX z4qb}K|1e|IisfqsKFsAg5$mfVbr;GW+g@jBw67t2(HEfgvyYsx=rgCSXy+=@KXUnc z<{EjIMTb;5D+rHI0A3Rj);-$H1uPIsqqcxHI*MRefRGcw4|zhx3!vRKN*4ydTto@7 zeRDGcUAuk#?g#AfNvr_yp*fVADTKj1_?gJJVwH+X!N@eWGUjNp@JBJ#BFPoJecf8S zddpf@)l4ZF7jb(FhRSfELAj30SuPoC6c`3T1Dj!maCFvhe^h#neg48Z>+T(~e_BD- zC6soPkGCtUB|<9`v^3152hA-|)hC3+ngh_B9-BtGYqG-UK5NJS`WaH-M7TgTS|E}# zpiP;h^FDk=;zVKG{2MzRU=bG3LzH`fq)wSG1sD@7uuzWQ4(u7Ub8Q_+S|oFaSSk=D zj|H`Wk6Z+EWi?LmA+*2&f;v)jfN9QE;Fz_5F1Y*b5T|kM z)|GfjUSJGs2tuJbAfPG@5WjIgHEE?XOhqHWYssW@>1-3=6X^5+pg@^GqwZ11YjNwd z_7P(fyeQzV)qd*$p?`;7m74 zp``#PXm_+C$6{HFq=pwq*Z&PUSR0lkT&@?&Gg>!cUC1j~iLthdIB0e;dxeRL#i}+Pc z4=b;@+=_T5h^(K7fH$pJV-Gz3oZWrT16ImHDI^6>2>(#!fz%k6<15rfN}fOalh4{^ zo8>GIP+np(0TztzLj+o5;GQG*H-kj2zOP!d!cMjiSo4Z{`#@`*J%JYeYy0q3Mtik( z^D=U@E?`nGux^~?>nbqCvHm*AHTlxsBMRii0X`4&4_YHK2jswDXVEYysk3U1htNP~ zxA_EPi+>Tdjad8;^jwJA1jK`Wm5_8Wmypg`06}gcWoB_|4+6^LXdV^_M#GN)Eep&8 z1|kCLgPMc{{CNf{$Cm_%Dz{Jq|1tQZYc7on>mtl^;X#s`Cv6P{XjdDn?bP`;v=V4~ z@KtI;kSN)(-BM4ULG!xIVx{G%Atnj@L=%h#OX-6a5OC7~mlSJ};RO9c{dkut48?;Z zhTw5BAwcB#O_F;NAXZrsrV#Igj73PA;Y?TD+T}LfxpY1WpdxE@S6zL>rstU5GHX10 z%Nu|8=COXw{;cns+pb(BS69^eBEkV12%?a&QfvCnCMjUM6ctiurT|)8y8g9d;qs3v&`spS1FrlH)UXd1m>%?;kp80D(Y$zfX1S z&j37voaQFTUIT#1Ex`Al^%(#(Dh=DgqmSX!Tw^QHaE*6IY}pzt3gg2FUaL^X_n9v? zjgKa2vHVd2uE=eithN!95;-xUzGBE$6m7A+UCgrz#toWKlzf>~J}YoR z+5itC%M8)^g-QvAhEKkdH3UT_{dhHso+Dgkw<#i{kDNRVc%ukHcN@<;X)hhzXX%{* z;!%riL#P;+9~d$M@Ca6nYSM_$7Lp-_^%Mmdgjs`1y(DX9g6An=TYOjnTLJ(QZl&El z20*S@(P%!#wjd0M#++VOMH~TEoT*8)aXkA4+?(bU6riTXp*6sHv`8w+TvGygb@3i( zvgE!bppwr#ngjf0VU;X0_d&hORTKmBx&i_Av zP_eDXZ}nK3`Y~gt0hLPMJrb+5zGu5^s2x{@`5)LFZ-1NZx@nnR^DFC+swxQhJ!q?! zZKROIae}!>-N@$&=1BV_>AA+c?Y7+vS5UkI1y|EDI|`q; z5f`>IWO8c3M-?*9{6ho4`d@(0V4wyNpvmUmg2Zv~X!(zYOW43C04cXjgfDjUDd#=k zS=bj_3WwVlPj=fu#ytdx^I?gQ>sS%4KRIBm05Ki$5pu+LlRKQX6RDs$$$1iv6{4u2 zv~Ix91r+K<3WbmA7UQj~L45x|?q6)X-m z4B_TbKzxRyY4GDu|I!`IJZ_2k?V=ZD!gr0WatCFOI6BA2MWugKpcn#)RuPYwdx!p` z#0fH|qXhVq3D1F7f%^=7k~qY5A(T;2{zm5QpKrU_K6Bt+JAdXlrESetEf;U&LINd= zgg#5-=4UYSAk5RVBTHIIJ7zKvM1UtSqrf&6;}zF_jvJK3f`5+)JIygVeq-jK?a>gZL5Q`u7z}BTMZ_2R z?tw1#(TfJnnltW5fgDepA~U`~oW@DaK%YHOr!f@p({Iu`YP-OY&aLnIU4T}7P_kz= znejbMt3alJrJCFU1V{xE^}D2C6;IIh1zx4Klz**&@PiLNXjfl-wM$MdQ2OYjkGgB^ zA+l0LN4`r>J@u43ht7G^O*c8ISjP)oO9QNX)V}J!UTW&E`l>$Yp48kpaX;Eufn>Tb zjf13Y^+h@Lyr%8)FH#C65xGJl7gaaBvI=m?{pBL*KX~6a?3>^E8+-d(-tX=+wni`Woj6SNR3MrX`xO*?k02*6}|fj*NxqkxEImG}#waY}`1sak}e^hneSmRCS< zrwF2gNRlli07y?0RjucwoXy@Gm8MzS^gJ`GBy&OUd1hT634sW2`~VA6#iSf7B6Zm? zV+PYj`fk~{+V=Ah3enmH0Ah0#pitG7FnRfWNY5^6n(Jhm1j*OV?3Sk%OW+I*2a zgc|G-DIB6F;LX46W8Dr*e=eRrdn2ECQiEeI`DzaX;A5eXBrl1Q-PAez>UXp3H1L*;(E^bdED*`zmj zFFOCfbkyt5;*CZ2)(wnJUWzDigdfxs_^aVN8h8a4PP|v~!=A!i7Ym-YMl>>s1+>D9WwDMn1 z5^ORXA7VdJ38Ar_ogZS|BRoPks;dg9*u^tv{{$ADwqs9Q@l^x}&677fSx@vi$M`xd zIcC;cjjK)sEhWNTxUd|7Fp44vngC;!6(Ni;rrD{!WVd1X)4sN|w(Huftd@W`W#edE zPDL>2Pz+$OVf|KsB7!B4o?rOXE&g4|T<6HVHETDBH z-^sZMT42_K0>vC(+)vt?inm-GzSZ#oCs2h^Bvj+}k_)&D@Jw?CC#*KV$jS%= z>s^l9AU^A<_E|eQOl3ISXYvr3e9w1Tpl!n5v8~l^##JVT#bp}BLGO6fYRhJ93&y}y zPMZtHE5|oHj|Y(p^GZRqr=e*hlUP5%Z&H-y^IgdnoF4`ADT+ih&OFaUYm>u01`$f~ z!kRsf90Fd!08q#|05L_5nLEVspb$v|;*+=-C?9$uIh%phZqCUqlrQuVf(qRfsmnz> zeSGS;okS{Vo<(UuwYKH(-`nc8Km*|jd1yT$wGh`h$(S<<@iqAbG!`K;(ypxbjo90} z_E9yb3B){$7R6^D^7W$0LaIQbO#64ZPJ4ec3`$HzlUPAk07`CLgMjLdWYRo@!g>~a z%z=nJB)=TAt`kh;@^!0h3OhoCa(sS>jSt_I97%i(P63l-VqlPokTHcPlQ4X#Y|wm& zMP=9_S7cGExo!HHKG1^!jxbn0DVmhaQruG-GQuD5>YyqkSrjmt!{nvl( z%FycCot>S|jHP$=O+jMbmNmK&pJ8 z1a`%6rOnj40Ipv8F6VyTZ*~)L)465d7r=e^z8?ZI$84&qf++QIJ9qpvW_R)h_K_EI zXp9M2gS1bwV#@c`vdNH9QzSEaC2bJD5Z-e z-j99sefA3lXF-7%QCQjPdnHJIDHahOyR#KcZb)n zBK3i5Wayb&jG_km&JtvT(F+Gy-AA{E91i3szuO^mJYWCC_GSR}jX>?ccrtd-*y-4d zjeC@T^6_0BDNpcccN zr$q2?)-wC^OqmCw>zS%cOF*A1d%g6|n|&T_%Wju`KQZxwt-<_RQdnz?Q(aWzs-w<* z#96q;5}jDeT3Ej%k0+uASb@e-`~bml77$x9M|KdbDrjLB(5B{+-?NyYtVztjQ{z2$ z<2Ae3cE$#=5;e6n+6zxiSYr!*shp#nK+C{lg$)3X$HxXxZfv7i2R?5IPE$kYt+r|% z{;mj|0M}4XB`#`Hyja6%cO}f$HJ0O!My^*<^ho0q72pZ*YVwvp9*B%whaK}cmXyK~1|Y!AuxZ){jea3uf|K}Pc> zKwlAgwDer*&mbUJ&nH*P1AIT}0TJoj?8%27<(##73B(D*b%#cfM`gwrrw5J}ZQFk5i05 zt`XuLE`XM~>epIjP3S)5w$Rf>#sc~(o)%+2@vH!9H?2h-mruwv1gCl#&_Lh)ufJlb$rT-h`DIcKr;uG{$R)^!2%f; zDGWD`!2$a(fBJ`1-CJ&d`&(bIvIv21q;$+fJ07R_KtXZF%7EcLbK~&u6hWS{J9-mV zu}vOfli)uOAG$GKW-YB-?D75%yLwxT9qR74;Q8}y4isH?^))uo*JA;+U`kr7YCdry zE8|SE5**ti6PkATIpo)&Z7Bvcf|+v_g+GiYqS8%T5m+rEH_;hbc5x3zodSCzwav2t zV5Trqtv;3lU;!-~lRkx3Ls6ovJp7UHMlzKQ0y>~lsbd1 zCx0WEinaKqQPvpiH*Yj_H92I+4>E~1Oq|p)JTY`Qf?nQWT}t3}sI-*=kBatp*ARuE z3E+td>0O{sL_zP(&CL#|zx2{eluyN(8t~^i!VA0#_^G0aw3u7BZgsw#AN=44?YZZk zbN$jebsZ4~j|fQmzVE*KAY>V>jzFRMBoHdl`SjCI+jqbFUAu7Mf&-n(AuF&d|5yiJ53IS164MW&DK(yf~3Ddv$mTSQ z#a=7sXMpPIc7j_*thHr_ji<(quA)JjvT8C8M7X9>ZTVsY2+cWwAm|H<9hp6|o3vEJ zSi>4>t5ARvw~hdR4qm#Bi2s)lylTT6ufT*ojh1W7I(rA~fBxt@cHI~L*nvh_8LxTIkIdk30U_}|?vwSdDf)x&-)qwZ2vtDi=MbDVPm=hj zOQ|7+$@J8MqpQk}5G1&j-jP>!!8UGRi&9AnFlIK#Nch*B6;IU5@mAfB*T6X#(a|2F zrDct$5cW`EAq=CrC5Y@0+W8{RRxsJ+=JWxw3rt<;MPrCYc;*6`PjamZOYRZ0g6;ji zRzX1WVH7^^+I+ix=1)Fu-)TQ-|KpZ-+rWtqo5z)-qzF?Qn(hDvSehQ=oweOz1 z%dRA7_}UNOV#j{{AMD+CP|RVZ*v|K!wCU3c``*icWUXt~TVZvBwd}s0^5zW|nX9%b zw4kT|`wy)7ZSS`BGgc3V?=hn+|gwP(1sd(SOf6V{@!7-x3qBQ1Z&Gr zBA1cYeWS>T<1(dK2eQeLVW!{O2ET!8Sv$dnXih1YTvbu)jhK7CE{C~H0Bs?2ArCr} zVBJRl%VAx7VHvoZ5M%)=J8ihia`ice{8y_G(A`E{}9%1$c;k&+^_+I>~-JPux#mTNj#Ga+1%Z>HghEv21Vx`b8oG;(JMDhf(95@7QJEzx%f= zAM-$(f+DY@U?QAL4JhdN#rERO);)95l7%t5_4Zx391^sc#A4Fi-0ZY=#RZv?rAffz zJbp|v_YxyaFe0D^GiB|s-(uxcyHS4wEMe?^CVm0hp=C^XYDT%sWhO2Yn2GGn_e@|( zuZ{@ASPRJ$=s+M^Haz^O)_^k$lULE*3ut~8Lp0RciwrY z`@D1KPWK!H9JO8GQO9au^;5^`rR~zPim>Q>3hq*{n2s0F{_JNz>wIcoe)(kwUUj}- z{^eh`hpFTuZLGkmfSUYa^)9ysfo|Q8&aL}ZmICFkRX+q&H9lU-6pewddGh2*$9U8S z{U%^8zgw?KHd~a519H{f-D%fea}|JSo_(p8U0)0M!oO-_6u{jF5f9nnBgd@{U!=*& zVHiRgQTAwhAhLOANft55A!{-oXlO)WaSP}ozpMHs;H^FjKq;ZN2xy4FfC*CZNT5)l zpT@D6xi^WgwwQso%OO+8>sUQMZ%jY(k&k4a4|bAL+!SKL5_{*GI%~iQ{V&^w$&r|E zYw?9mVB(Jxw4`+)7F0q|L~d2co_d)QnVU9H%}9X(v(ELSt!*06LNzSrtNJGmiVH?! zu=Gr`+Z;~yLGm+>7vN)w18og!pbDWfpOhhkIpd5f3>Kkp27mEIh-WG?W3`M|5^=VV zbVFrG!I?7(0HQHr4Am4YDc?E?cy7LHiO@3hO6xT9IiHF`GxS^4Q4(mX>dI?j0wwn9 z@uM*5N~>yFM(Q(s7tuT`wbFzHRWuzcDXUw_SX?sa_WtU6-hH}#_@nOvts08}=YXy= zKFk_*o@FV`f_cQ+=NY|H)%J9fY-7qFy^fHTac zSfmo_j^zO`$oR*0c=C9}Pw(*-Dfl}1u!YJ62SLPXbeaXHb znc5b_w4l#OFla@%qB{hdDG9*3mOyb@j_^;Ap2+!-NZ{+T#ySSxs}5El*ck&%g;R9MDS4$MeY{ zo9IKh?|sIu*mxDO9Jm@x^UR3Sj*zY^iQB=q|6XaL&^SR)5oDP|Y6*T*HiJSeWCF5(`p17{ z&CShJRx5V<$mdx6ppF1KfpaNCCPqh`A|!`3Fa{5(!GBW90$J(ASHv5{*F;|_X729g zQp;u#w=!?8svk;yCO_^FW_9`IfAKHAWIJ}>jLS&AZE9U%bHilIK_HmvIcLxOoJN=J`?Kgk$_tyKB-?8|UuUc>zn!*xUOW;ov zpgwf8%ho}2-ge!3d-l*CYa_G8r-(uM+u!@Pz2nZe*pWl8*j1a?*<9zajhsGXoiFaS z%DQH2T(OFL;+NaX-`{03C}DEQKr@H7erg^c=&lJAAR*g;hVhj>?UqlboNH^QEr=F- zZV~Gp>qVu$bI4_G^t+8E|WSBV7XMG4v z{`?tx_TV0Cpc>oemep3-1k+$1_xEDKB?oX>-7*_tzD?ump~_nc?xUFXQ&ds!gsYu* zeAEuV0+>Y6lqPR8oCcQwo+|b}lp++%Go8oro`}shqp~tpnW0x!7r2Ub@Z}dcl7vpl%?rk+_KvleES$ z{YoOoax1AgHF*JZgW@_-yThb{F!Kbyb&KR6Q+~NRh=oiP2~wqK;)X%g$Z|{CL9jF{ zQ_;luu)9U4!H#3*QBvX^lxl0JFGG#Yl0#ZX)x&jg7eK;}(b>F66Mz!|`V}OjYh?9V&z@**<5O?q1?fhA#`4kWnkQB(2R`uR{ z@3n^>ddO+hr6s-Ro_idq74ZJjm%ikllddVVkO;3_5yVUdu62)km&<{Oq(HMksr+Z< zZ>wwTTKZjpSKqy{5;)YoU)r3HF4_b6V{O~E)gJiq{Z3Lm2@q0w*s8J?3qCStz5Uaq zWWsDoYMdT&>bY`)L=#S-$y&Q=1yxCU&=w%3BDE$k)kZL7{>p#;&k#_|SB!!B>SK}V z8OcN+#{4$}FfR=kIglQm%eX)c4h}l7DvgJpag+t7eos#UE=6=9_yY9{2^As0odCi# zPIPq$!f{Qw)K21R@KyY*K6LZV*4$EOdtN%jWbqTUMM8Bz_5`Kw79hrb1Z(BvJDS5h z>>KQ69l>xI163|juvtPtmh1YLeCn2_-NoVi3(^Ixpzk#>sTwHU@xEa@2XkMEUsVZf zWDS!1^71On<#~;x4FpyH{TS%rY3Nyd5Z`H&S5REMs)vfsff@4 zYV|!c@6j?chSQvP5&;adfff!;RpS~;h*GqJd#PNrl1v19tyIJl#;v*N(s4mQmGMAk z_RI?8ufFR-a@Se9QRO|>K2Fedjf+098I~BiJaEGsj#BVqNL8%4QT0_>K?Zr(T5hWImd2 zyRN68$2_2i0KoV}3hPu2#Y{+o-;QenB{KhC#@+)yuCrSAUTQOvMqQ)ct1b6#$4(r_ z=?Uo#IDrHRfk5Dp1AznK0GBTzKtjoZaDWpCCA~Y43U=JP?DD?reb!pfdRAm4aqBpB8BBtAS7|HO%(LEsW{Rxfb;ff4pwWcU zFz3|X8Y?SLr|VFIoj7_LZQ&l!zp!ZscFqQD=03WX&w;Hz(zU2^Ew_`NItg)%i`YCFi82~&TJ86G<;stx) znQvI>Y?mF`@(1(vxoy$K_gH^eI@y6d)^F@TbqLd}Q4v+gY$DZb9r&gRQzLc`z#YT7 zp3hiwGv}vi3@*ngifng)wMOb1Io{Ql6y9QORUMW=Eydg|j9Q;$)|G+IK662=j>3*o z8)!bM@IbSii6QceeRgqw-B2UP$P`VpPe9M36NMx1l-&qDqLX>NwFbPJn8i3G5On&8 zt@oAK^5SB6{cyP_h|&`voPzo=E*caLPGly*#=dSE+oaQx@;*EG_xCJzUIieMj3E1k zQBY556d)S8MU12h^9DypEIcj4TuWQu3LEa z!vrscJ>Fk0xNyhbvq-2&R$SZ(9OXE&INi+28H(hlSWEYuc!N4&K1>T-6ugnS6Ga+y zE*4}Bz;RmpMR76X{iJj82#3(toWY>GqSI|`Q1T`KNkF6kk-98sLP$4|vtrT&7ZuS4 zdV5-I{rU6puoqz@Fe*`q1xtm1C`CBjzcHd>DR5bR4DQ(oFT6UII0?_=3C!Sik5lm% z1wX@2EP7@t&Uy!%@cuCV;pn-+vCzhNbv8#zivc3T;M@$t6_PEPaY8&SqTCdR^1$C! zz@~H7_Th!&d*Az>Q{68Ptc<_Fs}n`xdO~1Rzv~{#^Au%3pmX)=)sEMCJ>+_U%Wd1X zIUusEtjqzdI_~Dpn;l@R1y9G78bNh+wF5F05!7*Y%sqSdI4OS>NiBwV^@l(F!2!rp z52&xNcM7w#zf=VTE)`7`u>Ah_zwbmv1x5v41#ET9a`>9MPEiW=t%qLb8Pf%bXZMloF0(@isz{42xx=<_{ya;g-?pwpZSORuXZmQ7%=F$8jPxNi28?sq^j06IF1hiY$pr;+M9(V!hq8s`L`Az!XjT;oPB> zIe-yQ@S}>sxE-RCRcCv!Ew2`oA*#3KJu}VuP0&sFO9S$Xe`M0}Gn zt(T}%eYeXRpWn}Q5wT|mr4ycSVsa9kuw2@Mc3UR=^vb{OB{d8f z$99DCOcXv1;B@#&KcSlC97mtwTptls(T1FP$mejyyay0X;fB((m=(ux39JUsg89np z+Vg$9twVjVg^;YGj&nABmbMSiU*{b7+lODD^H%4_(ECHjnESh43uivfVo)PMrfMyk z=OtCmkQYuE=k;*zK@^KeN+LSVL|S!vU<@astmYC*n@UQ}N2KITb)$1{5))#qs3;w9 z2Iz2}fpaSV^mFKZ^mjkwc8Yr`xv_ZYB^WaRF+kY4s~_BtxyK3~@&CLpq1Qb)O6@h* z*`rULvfHkD!I~P-Quegi-5<}l+g7i!KW=X#`dMnPJzqy#<$#?z(PH77l9?ynIGb5^ z;CL%MSB)vM1Jg@kDg!ald~jiYe(-ozvMa4{%g@sL~Rk z6-Z8PK_1^pCaYszFRdu$Xm%pa)mujfhKO6mV%DDU4!DsimVE&cx2`%TMc&xd2Bm-q zZN_QzVrg&yAd&l#gGCVjx+gQyS{jFmK0-sIgWq5`&N@m8 zi^~daL3XsA8Q^J=2A0HF06lb7OuN;MW6l(QHr2gx(kXDIsQ3~fNHHnqi$ z#u*j(oWyCAih!gA#hLD+!15D!d=lz}n!MoTW6{R7<}yZ9)XXq658ze4S3u*0aj03M zk)rGvGnAjPPVD=wZ-3kFzWXkF=BcOckE|~#q;s#|Q`l{d(EKnvr2JGa@$q5XCl0g{)WdeK_y zdaRN*xsQJNcH8>yF2ke+)pd^-28O=m$Gcq{S$WN)Fk?#>G#1IWeB`oX$$G0uxtOsU$?;|Z zqhqX}az(0JYj6(kaHJ{yv;mGz6m@J0-g`Qf6R0*k(4^Q@d*d%#0sUv7SL9kBYk&)F z;Yb3b&pi4CTZkjvM>P4r{`9U)7}8&mU2tAxw`6x^;`zqsDGEG904vJ6`s*wqXMr84 zKMJJ{{&iIwJXngjR88!MQ=<_iFrrBy@S~Kc5=W8Df;3tUMj@9)Cv~UtI58rho2F$L zZ;^0%0G^FHu?TEUla|nA6M)qTh5E}!5s_6iVrp1MSHyTkj``3Si6(Oq5kz_8Db$&z znpu1xA5T6R$%jz}yr$U<=~Q(-@k5{pXXSHq{DLI9uppWpIh)G4YFeM7c!&klZR zJr~S?*NcZZ26A_0hdI%dgZge_bDRQZ_wAUNtSibu%V#q{kKl;&+Iv`Q|3l!@8ir9+Fs&tL^S9Dv^ zS$!9%(&q@IKK}UQPHJC8Tg#U(w~u}7W3~|Pl?;bK;=qCGZ>q@VX{N40T?5o*E1K5?I&gDPpYi5eU@%(0S?oGGKGJTW$w z9(u^Rue!dE{>#Trz}82R$f4uMtbC!@S~?|`Omrs~y}ct;IKsWTVEugCTX~jItp4Q4 z5KgPl1ZQads^v~}SyTy~{|yLKi$5IBWQ>Uc1k%RJPvqp1yhN)9m9;m|*!8Fm zELdD*{r)~{svcqi)NrFE#Jjx##aN=T-u#3Pj4xh2L1vz$e-U|Eima}kb2kiwUT}~d~XHVYu zd7=*}2XH@nIJZ2CFtzab0KoE6m4X))L#WU(5P&SlNNB>d1wTKym^rTl00tOG(JXwT zfkYC`YHe>JTmy#=gP4|IfD=gtDc3OSgWdw*Ajr$SXK$hn1Sy@*(RkAFLa89bEemo0p@El~Y_@C1Zru>5Y|MR~J#u6m^A2*G4IbETsk7I`z!=bVLKfdw*;Sb8p z%G$;X6%bA7CmpP)X*iL5DVQi$pp_{WXH9y=tXj^sJDqlTZvdn|NXMStdrlJFR&ioB zk**Yb`Nh}mrkk(EwgmyphfhV%Oq;Gn4v4^pLj~bkI73J`?*Cy6*+cCbeCEM7jUH>V zi1YGn`=7sV-~E!yUVUlIDq9hHCsI1hTw1$;>|B%&Nxnh=dy4(>i5RE^)3$s*BLA_o zw(IbaC8q=K;fWTNB$GxDvvn(oo+Y2PrKOp+ubPa8f6$WBrYxr*4{qv!wbzlY%N%4e zMG=IIM|x6*wY0X==_lDxvi*>G$b}- zipuNEyi}rP{mg}CvU>4$^f2}WC54oXaXRHm>?YL;bD1gLZQus9l z*qV$%4ll`SJKHT0K$*gQ4kODqOHMN@j$$Jm4mWAh_&AO154NtJUh@*vm_!no+X+9TN1MAkexbegViY;yqM>C9(dYHVz@^9itowL5kE{5@$j@@9K zDPz^v(&VfUAa4FA-Ao?8pJpc7G|xmQ2;zre#P`F2ja&fS6scq&7z2@@566k+N5Su8 zvZ{-dsDNh-#b(8s3+lo^@2HINM7te5J8Pf5ez|q{>uu~*2hn+=hgrGsbt7#5d%K`dWm*xP9|=9u)MW`0Zxo{E zW}tF#$fnM0!+yD}^GKI1UG^!)BC*JY>+Nk??ygM=SQ%)tzmbk!1#8i*twibIWt<9t zyZfL`4j~;0b#9vMT4FZOvJ=$=)O6-<>a;j53uD(&Qpy4Z z$fqt|yPB?d5!ON^Ie}1pIP0K?bxTC2<7bDh8Hqh8(T?}-VSJ2t_gO;B8H$!^!bDfU z^z1B)b2z;9Hbeu62rwZtk?6VGuK(KeypOrW-2KTz_cB(v6pX9rRia7B+y#U~2}Jn= zep;&AjVCrXWdT&utk+U%AGsQU-e^k_gP~=m9QNUJF+I#M~#{rW9 zkSkZNbfTLAnUdI&q?YcL0I0rn9pbM(|NQd~V7>R=d!5%rNzi))ECqtEyz)xtxQfiG zEv@JUD)g$Usc|^D9i)InZ+PdOcburLK)JRM-&Fuv#z%%Kbnj$L^|}D6{w7L<0CDJd z-3NgN0sFaIDjc}c;TdGT-r}}TSZ5cNrL*i3~m&j^f(toWzGHoeZKM-@p~WQ6AqoSa$XNh7OaR`b8`L)!RD|xGZ|gzS<)A_&<>DCjz$%0r z7G7kpO&+rEpMAmBmtJ8zh*-zaMW&{y-ahe%SL|PkFR(|p{nq;5*=~zI^)b7S@pA#! zJDkLV#ex||+R@k6=Pd9M@k}nf`H09oG9OSVV3cLh-@0#*Pj7%{q_k}WC9638&YTMYS6!p#iM~4$1);rjd2hSl526o^eR-s9-dJ1EsmFC{s92xnIbY z*VGkAQ7q{q1#r5eP_CF_QIY&%6p^P1$-+!h93$=k?`IitPHqaGbTo1{RCU8{7dfRc22e1W_DGE3v*-IM-P& z^q&W8?WR;D>87l)R!(7@9X->EGe%mUD)KlAGvi1DH#Mp-l63$y!Ag7m1x;G_}`0ikftt!YTI6@&S zpKNkCK&qO;nh-z%UxcZ(zdqb`&@4r@F|rY0qUY!8YZ09o>{R()hQuajkZcdN}K zxDe+_wa%JGt2%bd>MD;}34H%J_=ejLZns0&gR3vS(iY%^M>Bp|!8jM50d`}M3-ADl zXUI0a2y9z+6DiSEY`h0V{!z5~G9DUYuoj)3cW&}LuU2j%iHM;XPN4cD3sP+Vq_ z&A;|4TYKZ}oNGEE=vYfgyTVp%Txje4 zo(zk-s0gj&X{$d3WrwbEzUWRXEX%QL7HqJ?ZydIvu3F2;PP5myoUu)p-DpLm*SGI` z6}m+k0PcG8E~vHlo`?0 zCw`1G7*4U+#a4f!(p)K|{3HH(Jyq~75Kd~J*oqgWoDm;VmNbKy0!vLHLp98p6U)ZM z_?8nh24#dH#2n$7FwWG0u^XCOVd*l|bpV<%8$Ntjnx5I7J)a*E9 z*DS2CdDApH@=RF@-d`*%`#o;jgYPiDUkv*Nk4R*Gppvz_i2yy$T7Bo`EkLot`-}o@i z6~Grgbj?dnrQQntiNElT9aZsiV=nS$F%ml4Q zfKQ@n`dK4bRu%Le>7wU4kva1ticB}KDF$;`AdWCN24NaLNVLF~E?3+8?{i#Je&r@Y zk_dj+pY^-G{bPSV1q9E`x67`(){dV-Hlww}IscS<@3g}76)fY@G?hULeTH)gXA%oM zra{6Ns0R8<(Zckf;Y5bJZazZw+?SnBUOPaRk1q$sLB zSH}(kZk^w*UAvsfsfhVH9|2@VZpF=Yo)gb5WVAxSLy=ZppNv#vW1|zD4Hc0IxGLhO z&zidp40-_lYwhIeYPvS10}jg>m}vLyJYt1~^iroFC>~+*<>{#`6zJiOcUfj?vYj|y zZRPAAO}Z*MI?Sr!#l~Pnr_ol`f)0!YbT+CH4}%w=0XTJ&g3))S$rIou_O|v|X*m_g z6hMieRzAN1K!T%2S}2kV%`RFG9@|xeTucQ-^C3%xyA(jEvAeGg<0SAyAr-uyR1ZoE zEOgDS$E=~F7m@cCq;crd(zz9kNoIhQu(W1>^w_WL7f-)neMDl%;GB8U$XrvFZ(SW- zjzL$&v9umtjQ!v}Rm2WJ!S)Ye=lo_?PNb$a1xJp^&m>ftXy#*o->`)jX4pW>Lc5?F z19K5FV!LUPTQqA;fd7Y2AF$%H6L$AkK4w$-YcV9rR*#43!ypZhMR8xfcKV5}mh#2R z=$8%n86;ITO(gfkcDw7dSHW3=azYy0MKVoQ$0rU465=aVDKGQ_h3fU`Ke{TL!5 z`4e?S6PT|mH1Uwy8Xo}E0n|eBb-K>b_30Wz*Xdk8NK{!7fl?s=6<2CO6YQJPzRtaQ ze;&TS{^?cz^p9f(fBN9xDO4CD;i4*{6ovS<#yryx;6e2(ce|@<%oZd;GYa=vBeGEO z$n;G2a$m9X0kkuR;4UX86yjKsmBCqy#sitz#6gA)SOWpR;k9SZ_P3k`m5J(oSeqWN6 zufSnVLw0BqS`ChBeFF~@M>C9w?gSChrK>Y|rewATNa-Gj>lQI=ofJV`aA`J0F*rr; zE=w&(K%MSZXO5u?z@iyOd$?}eRYsB#oFJ3ZGuZ6}IQsiRxJ2+2)opF;LSdlX28P

      R+;-U%YYH6-)YAg+>P2h>mp_Jp!Lka~)(BB{5o>X>!F%u2h7Dw5}n|2WaK z&iudcphFmqb@FK?9XX8HFbw#b)o(c%RZ@K+h1#m)>@x&YnBng3PM0o4Cg0fDL~@Cu zrG+?%NjP-ysAE)wXm0rY-#C9ynT^A^ul#U@lrl5Y?1kr_2O$zK%y}Zh=?JjWoCy&n zP!d)FOi84@Id|!D_W8IyaQ_py8WiIjxy{~w>oub0tL&y5Z*_qcn>M_QALtI7S-#XR zTyZ`3@>xR@sl0GAQRM$=vlozO(T|VtB9|3l@_vKtIfNSlvmDNKde$zO4#BIHyo{0f zKN3rTh?7zPrX**f z1n6Sk2%|wvl^h$#okxLl0dT3#cl(%YMT8<5laRdDI*u$W0|fTyv+!^v7M0QAZg%I0 z{p9;Uvd`XlljW36aZIec`H6ob2+uwDoYQ!U!PIkAmKfz%6~m@EieZ%oQv}IlU=?&F zEvcTn-lfgd*hC~n{6y5G-PJYfQ+q=Guu9J(Vy1L(x=ut`466vM+ziA#O9Q0)Xf7gf znxlxKh@mnC2o@w%XK{S-WxV<>nAO+=!eFj zaq0dd_WCT^BSNW{n&uv2U_x~6#FDwU52I6)&-rto-E(BUbPqjCHQmd@r9o0VCQWo% z`)R8z6ZauFQoHOkU$G0THrm=3wp%0a0a;peT;@h|dEU$BSq^i0eixZT5E{crV=NEt z;}ixAk)i=Qs(-vDP!cHEn`kt?qd|{`J|)7ek?wG0XpA7+<2FR5n-bw%gz#}_ zsbWO@q_c~WrbccF2%;0*!Pvox?Ft*g`a^4w20%?TJ*9EzIU1)UicJQ9Yx9|`dw zG6`1SUI|m3N_?GIe1NbTCgG**Phot6O4O%PIz9{nZNzp zzqRMV(BStKd^j_Z5#M*b}}FJ$KTaF$TT7rsMiu0-x$09*hdZf_QLV$G=h$?8*45cH^fd zkIhxJr+}H6pUOHn?*<=00B(kLZa^_D#rheT3YEomN!kG-$_0P_>!l}08tTQ>2{DB0t zC8lKCEnoTyrqX+C`|e#Vc$b}h)*=hS#A?h!Sl+w3_vYz`0aJ=1I9DRcN9-Wx>VvHv zRtpm9WX)T8;_WE8F+1=_PQf=XJ~aX6Hq%~j2qWcFwOulG(9W7Zn;d~SwYN3f5QJ2W zMFbfOh6pVBhljV@<7f?gJ8%VH6UUJgZ-8iWr8XHRPgK-I0uh-YQkdl!%rOD(6(l%G zN!p{v&@f7q+lNF7aE`(B1m!xxyNX*tSuKKRJ9%E-((T%C#NHjlWB?QE#!}yI_s)iC z^27DPX=YfzeSA)o{o@r&t){lyYWfqb8NX4vW~8AG%Y*^#$5mq#ZIur|O(b|q8r^=F zfB}$;WFkM@!Z7MG43bpJg0W^3bz>?I5aB&PFToKd5kIZHHoVqcF9BLRlKtA9n_*t} zJEE2tpKJXQt>!1sYyMJFfq(#;@u7}O$WmrGYdKtN5oim2HJwh&8wqnZf!VqbYXG_7 zxCi@^XE;(ol>X^w+CofLZ+83b@5_?$uN}4vsrJ$d!#IrJ>_LRN*+mFGz({&Rh*)~- z_VhD<#N`GpFY79e+9g+9ZadH}od$u<0C`NEGlyq`CJt+cO1?_C+`W5`OK~NFAM47@ zP6b&-!N8)yZtHM!7Qq%{@yyfD+MRd(0z{E)7hZfmlKEB;BN{{yd=$^Kq=~SCCwG?xGFZXH%U*Ly~ zhO&SR2!DL$IgnwAEnmJI#YVWj`NkS@mHq(DV7}e?(|;u|=@h&AiW~6H?X+iJ_zx>5 zIPY_x{zqqm+_>=#kYxglB&mY>Q;{!|5Oz(xHJt_sktbz%$20 zU;r2ZmnRwiEM%jl!nHWXPQ36QYip=lM5h0O=79{GdPsi)3UCOgC z2x>p+*2eI~QdKYcGE3_r7Y^rP2mFnI8;3eo;Vqn~)TcbV&f1mo)r(D(n2|`y; zbxtrU0xF+7^(msOK1J}uZdvXNB9ICW zQ)(~y;p#lmDLo6VnTW7H>lx~}nm(WUU2CFeI+-}1T)h9m2k$6&qS$}w8YU8^ORS`0XbmktrrHQn(52zu-&B3rie^BAVUn%5)0z%%v$PJ1 z5|I~ng23l!_G~=X--tv4{Gbg`BMVC^q+7WW$RfvK@Rjc9(c=jT6J#!sHPmTdp*3=E z^f4Cnv4AjEOB7&31VxXH9|1Q)yJM-=mNDJRr{vi3%c(Lt`Z3GsKVlj4W{^jnk@t67 ze=Ol!^0tHz|L-(eoCGg|Ew5=0scG!`ti2-`)4RS)=+xfUUe`HUUT4h>)o6j9L)!v#$Mpy6D%ez*zS(#$zVZ_J+R(aSQn>A=8y!PFb4sCY z*^X~e*8mapxHzH(D4Ui-tW%fsr4kXG+~Uw4)z?-zjS5af_SsK-8-Si5f$@E8@lv}H z|JVW~!w>sG&FvB`crXXZ-VT+OB<;yR9ijUfI=qY%R=@}o}hISfYd z4~;(Cb&!CDQ2>r=9=peSY(E;OY4~OqMI-@)n9cjr?TtXE)r@po!64-vS%*U-oz~16 ztbLb!fEATI!*}hW3szVGb?Q5+I_9*bb}!lbt}gHYK^iVCeFPwai2Syr67-xgwyJ~yA#TEQC9vkh9~kP^M)o;@g|>wFmeqN$|Cs#s$grMVW4HZ#zMzc*zS2L?cZZKSUeGl2i9 zZx{g%K_)tyR6;?r5*$ylKspQy`L~pNHg4e=R-TOpjc2xM-gN74tzj*FcA&q91mwe3 z5Y|c{7(Qr}Ev#fChe4F^(6fCV@wO=I{S53d&!q+AAeW2!mL?nCNM1&?*5mjHXHQ?` z65A^&x%@o`VCbU|NSYdtgIIx6yePBCJvw*pH1|vriAdhL{ea7J*w5PBb=OZpT*X#g zTnqz|i*SOVhlXHifPBaZpF((fg=C8Wwl}}?7Cw||cJ|o|K`w_NPUB=oc-WFiS999D za~%Aamro%}fZs72(o}>&&;r~i1*ABPX2cKNuUvJ$OIn|qnPCq+@_SNs-D7XOzTRGY z<#hyDKPjTtfh^0YZGRo9!KT?eTh@>oY%5Gmn$4VZA==LdhX4n#NaW{|-V0_~0V)R$ z9I|<{-y@FGN@k)}9%fbX8SX%X&T7CNT0TPb^K6TgM9=UARve!$d(x(H?kPpWCC781Ve;_dvI)&bqpucx{v1_Nj!nz zVFZgv3|U)Zz>Qs`t4joDjtJMnG!;ylX2+{#b_3tx*Q@}^cq%7J&ti@D+ym~WEpVP%Rynb1J+TUtsHLhgQ>HE))!eeGTQ z)U}^Pk%tOuQVR(^v5t_5h=@pt;S<3S6DVzr=A(Ow*omPN;gOJ_`+CGnL{HfvL>I1v zK~}j~F^!&^g_u$K(Wy@nBx!oY5Q`W-`skx>4|&59VO9Skw9>?Ay~Us|U%uS+Cx%w{ z)!3vV(wJn*6mgVBSaXuFCZaDwDHj6l)V zo7UvdHIE@W^*rym)=n=GX`Q3v-hK30*;NLx8b~)AiCa`WIhuVr1o6g_g6{goHeY6Z z(jNK{s>cx8$Eqs{SfU8XY~nrg!S|T>AvSh2mOSkJtko0*-zm7F)v)g{tzR-N*}_j> zY`<8;b0+U|X8aIJ5GqWyG@z&j}5U3PmyY{JQMJeN@AOmp> z(IYU3`0Iwp!N`hE3^rTD&NX(`tyep%Yt!cSR)`kaYp1Sq0pKMPUry+SzhE&LK&G2-_lq#MpG7l^(ATxqMr(H4*fHW){Are$ zHHCCrP%0E)?Y#q*!o0)Dv+I0@P>}Td@ZrQdAAu4p90kT0MIs{O`5m{xkzQPo2Eh>o zkwp_cI%7ta{oAXQq0Jb#VyuDZoj1kG#*d*1o@-N2$66eJ25Bx)s4$-ZDe_VP(9tlI zfRyWv#*+n%;uv+!ZWP5~1bab8!wGbj^)>>_%;dEayeL4?6T~D?Y9C9DAbx6-cro}d+p%|9<*i4&%+emM^=GUOxdvxsSdW*{#KcRFi?g{g6 zIH&}?L_12m1|ooBTRu|k%WJpTkM6qDHa)k+a+fT^G>%{D>^b(MyC1T1X3VthyN=rR z|M5FJPO6h%{OWc)qg;Nn^)^OuTYt0P-mMR_J8LSfX%E_s{5*VX#;vaTFpM6Eh5V>H z>$_|}rjks8Zi2m4XmB93F_~7~&HT#pY)N>k?P{#CnG|p+DI@B=J!n_`@pVfa&$gZW zjyV&tKMi36EfU-tv;Ao1_#r5 z0*SNs($u@_gm}@=p31yx?R;Sbc631i2H7{5*2mE_28rez??AX1LjYoqZ4Ev4rRwc2 zm|*VATDxjlv8}?NJ3Rpc4RRWQz)yqOZzLaVGv?g1B(!H4xPCCeet;$%-_>-i05N&w z-kp$nOpg2{J|D){mZa4c_+VuwP1sDNxFcQ1EsizwVOCd8K?zHDJn_0kDU#-7;etifH%YG3qY`ZDxeIL;Ox!UvWOGa6 z?QkOz?g&(+2?TPnPSc49PeK65jDqlo4cl=vb#YYEN$L%^tl1QfXdz7xk+hTB3WBim z^0J&IL;*$Hw!VRB^$e;}z2=a|IZGE?Zhk)SfRMp+g$&v!uKAR`^a7eGw2IPTKlaEA zq}9qJFJTLWIaI$s2Be)|n1k82)xP!ZZ=#J%L38!G%}twOt1egubCTka<3UneDdJa= z?XSQ7I)PqUz{GS+x%kwjrI3TQ!yz3ZN=5sR!d#1a6*C}YDkkThcgR~hf1!Q$bJyEF z_uPZYe}P?a;RP}4mH?mOT6q2;8eqd7{lvoBmhHii!Tqh+zk26q8F ztV0Z%QQXh4LVn1;_%_4 z_W0A!IxTA~nF&N#dU`O6GBz>GN(VR&?1^Xu2!;$&oJ3k7jh8=1tfV#9b!iDyN&8KtmiMrQHjof`O9BAX7s-M?sJ6}#8~QDPqU*n7x9s{MfcFX40D+iZ0+_%h z0mp#=xuIN#W*~sM24f6%z_{QpOD?h{tM@t@mCKY8wFADuJj zd}V+8+pGW9TI<%WLs7Uih5uD@J+H^A=z2}%Q$}glgY@vj52vzO9`Ai9^u1Tdp)Bzp zoLl9X&)jSHyPrL`-+NA~f}_?D|9XY^c3EP@-HKyw)20~O3$DK(Xc;d5C9J+T1glkOl?sc4E} z_(3`41A}^{!^rHHwq?awfpS9A8Wq%iNx*--i)r2}eBp zR>b=0FSo|6Z(ode7TH3gZw{rQq=#Jc2nMP5-HW`eUj9ZF=ulLhhlAr!Z}PwS_v!Ok zL}a6Dh-ARR2~o4?`q=TvoiTsKS#k0N;dG3Z!nxv{w|`V&)L8QN0V4q0_?7>t}SN2Wp)e}jY{5LZ63rn^9zuNKXUu<9y9%& zz@g*~d6bu=r~!}+CPXotXO$21FASGc@R?$Cj?CuTR9W<0ucQ$*Hw`qEKi9a%;OX?~ zI(7}ard;#RqwCu9xM}n~^UO0TO7WGid?j_U^IX2Ro>$uQ z8lF>{)?+KJ)#DhHhE=+S4f&nhO*h??B4R44@&RdGx|DAH&F?&)`+J|>ulK4_?X`WW z;QDvcTSu5B$_iaS^79NKBUB014;t2IR)r71=hI+3nG^4V%*TTz^AHo(M3|z3(n4Om z6!5f+M#iJZKuh*i7XxJwy)3@VF1?cQ78$R2QT7p{75DkX6V#5asEHM4p239F$KQSW zGx7bqzKcMicQFE4tGx^*AQ!Kc3h|6tGvmXb_-Jf+@Ag=F!9|35%i}Pi+#`pMlEgF| zJ67+YXMIb&_k-_^fBVtD$BzB`V%pq!v2^8mG4847utw(+I^G?XV@5~!@y4Y2&n5X~ zn0x)&x4sphx#RO`vi&Eo7%Lf}lS4w2y4(=q(E|sM#-_c8qrRKW&zKO0Um%o#=c5;x zL^0!Bvvx-mjIWBH{ovuKm^=_$$Xx%A&VpDChHzwVxPhVR2YV02$a<5ALmm`jW?@k*W&UOrI1RQS!U?6Xrac z6?^J{e#CL&+?KSN002M$Nkl8w&auAf_ znQQ_u$a^+IP$f52gW(TilYT5-{~fUw+|}CkbXTbX0s=O-?qe5&qwgkk*26pyE(8kF zf0RXCSrB7k2)$sOPhp^#X_^aWv5GKS4;2csU;xEcSiJr1F%}Qt;p1&F5%1P4GEh6Y zzZ{BikHEkA5l-^{lHr8G)IMM;0ZF7U*dY}#`!C#sfrxXCg!}IQMZEum zA4qg1J$4Uv!)PvqnPkTW=bn%7ttLrtYceDa6Cp!-Q<3R21SiX2!Jo@;Vn z?g%BG_8q{Au8Csk{`u8w=;-&Rq?kN~vV6gL=X0(6xczhg6lbkGlMwYgIbSO@-Hx$* zim1l*bdx%Zb;!B|)`Gei1;vB0Y1^yu?CK*)fQ~Ae6*vFoyJEul2{5zFtVKLUGZoSr z(-&8~{!P(4nkobxRDA%-(aSy92j1}i5H1|=sTX*P5vIJfyjkyAFn{=qEpJbpXhLCx z-l3*32#8jc%6>wJGE|#6bQ78%Mfoe4sbzjN+TCR6D)P>!Es7s`+sa()>F{M@o##|>c3cUjfS1PSo+4+A zUn4G?7Mgv%D6jD2(h_J6@7&y)G0B@U3kb{7MPOqwkk2^#TskQIK`1(A$0~pDUgXuz zO~#8Ue^;SY=%sP6pGvFyItE{^G1tHycifS@s0tzzxjb)84HZ2QHtw&$6VK|Vz_Qeu z*Hvh_mK2iyE>_n4T~F?(fOby3zA{C)fSwyMc;;#NOx#zmtlyc$rBD@DE9O>w-Bnjz zmG<*K+*iTpHN6*wyr12CciaklpP9eAIUc|N?`$6PUu~J+e9wG7eP8cYux3#gAz^Yg za`E6*QTA$xXWa|Gue^f&IELDiK&w0z9Q`JBHhM z3|U}XUC@#VvAbzA`0-c%0y#*I!e|=(P~vdn_~}8~6TFlp9lWYJ!wq;KPfZcQKpJS%XJ*MA4L~OePwkSXRASeE&b) z{&aqF=_r?r3$u-ALm~7$e<}%jn;(vfp(xf!%x^foRh3vbzmvA4 zJ!wZzs4r>D^{>ZOZ>QK+>mqAtnn0@osqW_XcYpVHF@5^4}`dPa0I`RjjEIu3g zl=_)tP*D}*DoyL5bzc+2#H$PKalBspoO8}eo?n$z$CaUB&*ykOmz%uAYkI#KqgS5e zHGTJ9axLcXjaF6SX#sO)r=SiLST|3UiyP!OgUB+#Z`Y zZ$sI=lyW<*(Qu+Qx^U}fll47@8nTMEuYcp4sm^2>_?7}fk?S^XrIQmOatOa0FJdu_ zt@h|~>ep5x_`72LHbUzE@es;vZPecLQ*f_)QunYU^~bR4U#DX=e);Q%Vp7eFbnlse zdI;mva2bUUVNsHoI(g+0wyl|3lakT)=Io(`EXAF{D773uNbSfPO2e}98u1u6At=GC ze(qQ6qU7qcP{s)Rv5-pi(>8dJaLWJ+zpJ&L@IPFNP^=2ICE&mk z(orkBF+W~COf5+8)<*|A;;MO5KJ`Sc@#C#0&sxv5s8Prn~vfY#lw46 zR?Gq}a>02^@SIPN=~J-G%ktt346Nqb6S3ymm#GRtLj#hM8jld}q#}i-yx`Yh8>xm+ z3{wPuT1FDhNtBHGlQe4}JawuYFF+*`j553h6_o7Zzjo&Q^zFe1f0YuHF23k8yq4Fd zpN^9F(@TlA*{uH(N@q3E6{@IgO2S&3<$qxBew3G-XvRB#@?>9}kD|D1&(1hhTZd9{ zEZ+Us?~c#@!>2Jq8{%8v{yL1MFJ63cEs>IQIW9jb6P7g6lUISFe&E0Xm{eK95Nb)w zcnoLD=&Ht0;GeR1DHM$2qF`5nJ^#WB;!L_@?VwDQ`>lTVxwz))tCEr-f4St2Ur7>gLLY`e)G`1d(+S&uLmP!SMB&l6`$<=ZB zMK>o#pPfVL7rc;r4}e>rKJWKaC-bc&99WFe(gT*dpL6D8*bb0{T3QOW6-D39JXVd! z!nnu-aw3LWra6QHnom@q5NOA9t6v1_v?I0?6CG^WuqiQf8K_Z> z9GY{;8-0w0%w>B=ck*CZ2;AhTQJw$@AO$D z;EWj??Sw-o0kx3cR2(zj6OD-hm1NexiD>=~$?`i21?ykIHdI0TPXt&2>#&EmpkpVX z*pbcs-GBc<8qcD$md0qph1jWowE6sezIr4T6q&!hhWGA$dj5U7OfpIuKt5qmm z^wea2Q{eeLtPEg?Qm<<*Aw)eoDw;q1;SbaPo<~or@Oq@q5SPIsad8 zp5IqyZhgmmz7^3vn%q8*7fB7~}qsCacxH~TGhTr7XP;rK+4N!nJU6)1yMsa`ko>+f;I7ShT zitOe%cIpI)%?;7iGe4E1tmfWlmXna2butca9*A9SFF-$5X_*yUUu~j&djS}D@&d?a z&BI#^LXDc!8)E!eB2Dn%uBMZe9E8?@BK=Rc%)Dfd_3sWW&K%%A#d#>mROo4HD~SX9 zPsQBq7o(K<>Mz<9%}prpeNEBx%&ut5s)`|C1KIlyN73YMQP)2@rk=5s2|Ge02Khje za84E#XF7mnP=zP^IF6V6Mv`=)Ia2V>K~2v@MKB zn1GQJX~dT}c=6|7`qGyuar(Z*+fD3}E>$93qZ*ScrP8yC>T}OMm-vkyR!R7jH8c@^4ke)F4&UWF9-Jf$!1O^A=@GLmA`6TQ9iJ?Tz9;aI#^ z$Ln|U3waYwXGjKtL3E)=4r3B@m`KnqQIEK2T|6o}Vo&t|cp@{LwJtoN6DKpNBIID$ z&BEDZ2v3&vkl4UeI&!2A1yeI)gmV_4&~DqdC0X0eO@uqj38~Y?r@ny&(K-R;_0=e) z^UWhq{4Rln4<9<>AfuPiVD(sB`Uu}ay3GvXAz3zeNt_^oYU_rrz&3fP2$W(N-6$sf zq&QBLyW>rC=$bqwCQO})CudI_JW|iY#EOCJ%Bx1l1nz79fm$$rSc_y)$}mpfrYu-Y z`^(Pc%`x+_6CCOc>e02;AB~qE{4HZ6)G%#yi~=*)eWIDJOl0z5x#k}QdN7t6X=hMt zb0OZE5{v+>XHq1<3Sk6{Bgv?58X1)ouAhkYHn}(s+_N@@sqeS_7%3fmh$7}jYlv(@bMHLE06 zESwkpR8C+TqYx(40};+_iPok+pIbCE>nr&wB^2V1?YKG$=UZ@*yxj7CU+=~*z(?ikSws$>n7?P@5PsC+c zP)8Im?z;6`XgNx99~iDFlWG#Pc=_eEF>B6@xblkYU>e(#fEW9&!f^^FdI~-;f8m0} zcr-0kK(e3{c|lUHm}3=^6<~ljZr+5#e3-D*^pq7|R!o-~6bu!I_0$>s-gkcx%T_Fp zS!Ii(8BfWMJ!|8mAA1Kpg^Ck|&vT0?U$CS6%rZA2t*!bQrL_!iSaJL z+gk!(GD&gKlC$tmFH8`PF4pZBLi6P)nm?em>#rWTKV`}vsyUPr8>-+RcDpOZ^WK9O zM~15+sE~O2>8BHKT(o#$YDZigHKR7>*+qqE|WQ2zFu3+&y6+VAgPAEY9P66U~j?Ya+P{q&h zJkDcGC=){RwXc0G8AW1jtvRVcax>(qS5*Z#Bapmr1+(Mw+&WL34+XNqP1u1D5)CNF z<8jI$<&x+1`g(Ny+v^KWFqzA9I=;+3r~tTmFCOETxfeabu5VwNxp7?olPz=Z%(0pC z$Ukj!Jrcv>S9z`*V@a3lA4?5aAOx`CqS(`$v$f_kh8qFV(EqP;+_rhJnhpD>}{k$#(C5f?ui*dQYO#5E+!To!Si~G zcEwx=uf}iz$v(Y=b%~61l(5EVW84LN<{-4umDf&!Z*{!ob(h3M@)G*G^P+BdLp-?l zVB9tfqa0ae>BihV$`KOT7)O$7)&QRRL0|tp&-KV8{O5l&^N1;m@B!aT0FM2RWbk)5^t&{vqAVRcMz7~4|Ms)8 z#`8$W{_U~3G9FJhXU^Q@Q8Xmx4>HT-Ss)q1O=5QP2Jp{oVj%VK7LO*|nYN5QfR)<`&za4(VA0%Yqa2ag55o={ zHf@Nze|8VddBox`MvzpLmVlX?8Vl#ojT_%~bAloK;Dj?_2C_{k`qbLYh7U6e3tBBX{w*V1^5F%NHiLJaQ5m@n5D!p`J@2|R@~GjL2PU^*Bef1m8fnHD zIQ94w(K7*@@tNnwfiHbMs;&f3f64Ob*anYNaRU&PL6UP$5n^h?B5&)Zdx<^bIM%Tq^|lV`BH{%vDk{fQGY=0T#r_dG(`U?0jHMFzNe|`H`tfXO5$k2t z`(^DunU{*U!dIo@6!=Pun9D<~jBv%(*CY$Q9tG|&;aru4go)ysZ@u~L3Hq~S_5zgM zSK~J7k79k{K_k3L81nI_U&Q-c88`jKrxO3bIZFH3Ep+_)Rczh9fi)z^e;W{k^wQ@r8 zVs>`5#O96bqB^HK?*HX4;$t8CGy-8}s;nU2+D>(Y+i$-;Rf5p7fPSCu*D+0f0LX($*LTOTA6QBJf3%8heYF2{563TtUB#y9wC5;(I^-bye4 zI>fX=pSgIybGff>%CimW$w5)eMnGzRil@s37EugD274yDI|ri`9(>~H^R(wZ0w%jF zE_&TtsRg_q_)b6Gll`YpTT+x27|w;l!)KXMKr;%R%A^8AdRH-ZQ)ns^e8zq+rp@0n zm^jZ-Q&W=?Jq-IRP^}J-5m+jTDw)o|*HwvCNlojD^LTCd)g!Be#QmIS1-1&TLd-EJ z+%n3j5CYrPdM{qzcfCz|Y89f^ne<#9>vfc48M)^5y%+!XUOlJh@R}K3_eT@=|Kksj z`_s+uGD_^9`_1ptaXlzJ_!J zBL@%j$5OUnKqJ-bEAt#@8gF&d&-kal|FTC~l(B?Lf>t56zgTIJ7Ur2~z~zy9mLPB?WtELx@Iv!DHJqG6R!=|zvM=h0A<|La{< zY1IoW|Is+q+bVrn{>ns2ukUvrtJhTp)!$91RFSnzo*rD4W1&Zm+n01G54i2N+Y&wd zw>qKwWj6D+BP0E;1cY!a$NjijpF8u&$_Bkit~=ZKURx2bw70340OR zZf5Rx&|xv*0<4M#Je@T)Q(2Uoh7O`bR< zoh$Rt?%g~2h~`Nsv$6I_oT%%LW|GDBZ>uGgfr}rXe?CR`-EvXbd+{)qfj=AW%88Cv zz~3mLg@EdNuyD=dA4XXipx=4f{Bxp@P|)C(_0d9@KNn@!*&GH~-Um^205~t`MByJU zjN<3k$DvoZMoA@!a$sn?chUvQco+C;p1IkNJ)IEgo*bO-kt=4s+G+6YC7Qb5?&g>OEJiJPv2}S z{EcsXo%*MTLQRmFGBDp2y=<6qOYUMz5`4^7@`zA?m&g zE@hSLPA`mMOg*^D7T2@y3U4bRcn%e5#~{4GD1h0}9_#glHz*7}zn&t;}!1a98A9bq)|R6oLg9N}jl8ZWLTF z5S{yKW7WUj8|zlDkH=3QN@WhOT(FX8CA^Si=)y52F?SqwlR4*joG6o)&5q)Z!T3~J zb99dyjO9xgd6oFVPu9hjJ+;(3zaYkqUJ0K+8g=!xsq5y64m{i^>M($F;x7p|S5pe{ z;!7#rNJX61?ELumyZ$NOeCyv(X`?(QPz|Vj@fk6&cSGEB_r0-x-NyLVlg~Ng|M7PE zJY~U0^Km*EmoZ_r9~eOn5C@czs5DWlk@anF?>w9g2ew3h1x;jf!Le_=D{3m2$NV>R z#nw@)FGwLQkoo5j60$D9?fizi>)9>=yHi?-UW@uo|b#K+!!Tg+W@Y1H)` zj6I+FLacw}ehmL{Kq=aYf`C;e+EIwYI-G;I1AdZ?qr}o&xpb(}W`e$k0pA?~8jreQ%7Pwjw&Fv;RV6Z5AB|&yELP-5&SE9~9V(!Ipt-N@L>6 zUC(Z=RXHJC)o>RJTz57ym^*8BLddqa< z5-01m{O#M{{&u?ls#U8}H04J>`cZOp$n%62IBwwqI!UG5r=EH$9qYMN%H@+@*YTTl zDG!kb-K0I~-g|O$Y|^&Mv3yoKrNR=$br~R|Ne5Vjy9b5TjKf^KLjsCnk(>lvX<}@I z^AJ)giw>pJ2UtNTs)GmjCktF<*U52T2jbuygqt@b13XEhg4nxpSO|VMaXh6}P&QO# zyHP4F?yXX}Wh-SBCQrvB3w!~=GX{LvAosExFT(R{Uy4VcemF|N{S@M98$3zfRIH(f z4wP{2r3ztMJ+3;|ZrdDZEjlBG6-^X4|NQggo_p?zym z%bmZCvIR`~O_w122*;no(@ZkRD1=}On4)}2^YjtEEao1`Yy!916FC%CAHdUAn2lHD z0NK$HOGhEXj6&0u6VHhOlDM)7O%C(yy2|j-kY#Stky|&5!BDbFr40xyyEKAzS~j|Q+}JM*0#$c)bB@!-zA52r^>Cte)%DiQx-+t)5oKDdU@B2+4ME+~s)0=gpdv{_erUt0jH_qpuLUo;_n(?B9C?1+Xdp z^6hVp^J>pVQ0K-3nCi>xR>em?ek)!(O5#*c0y0qrFEL7zL)&ROgmH}gWdFVcF>mg| z)29u=jRJ)M+=_zU$lA%ps5^lHIAh+NxaSu?k0&1mn#8!|Bi$&E@-G!W8K(yCC_;lQo&)hISJ4G}<(msF-M zqgD}9xir~GLC{6gRwuaJ&h9!QLDsbe--^c+f}m}2YuxscTk-Ty#8dGgSU7ObR50*7 zHmT5%xB0>VC3(D_bSEF{KtV55ImJ!q{AGc~D=de1ptSVjC7&?48h!}Pp;(u~Q${1K zO)eQ#Iubh1OrB#_F?C*jckEu%XDNSlepD#s;qpnnG4AVU9SrggpRY=!3cB~}{_Z0V zPGM3atWA8ReM0-;BcS{Q7;y6Xo^YoR9yPo7ef%bNYAY`@sTK zG?GB$s>|`P<8{NyA!@#m?uwSH$|FNQ8)#L*f{C&8J(u9DXp8gaT|vUTI{OFoUgrEjPw<`zT;{WA_!Ym#?kG_pO6$<2xC(EBaiD-o;M#E!h3eral(lUIr zc?*Dm^+(g*J@MGi`dB!7AP(=OngCJCn)%~m$H9hJR|^!ZmZWLwUgx14PrYa*?ZRtg z(E>_}BER17hD+nNFVGshswghM;A`>quiY76`sSD7_=$ZnJ`0(W!y4w9l#iL8VvBx-??N0+m{gKAV)-9^7kx-~%5>O6y&B-Ic~C?OEU1 z>l#&24(WjvYM?@$9GZ+x9+I4w%#C!bSJvM$H0ba05${|6q73p~53-y4Qb!-_wvS0` zCj<>MGQ_OXnn$*Q#sewn*g)juenLPi< zrn^T&OA|>uS+pVT;Kp|+XhJ?-&rTHTiPTd(*mQt;c3>wMM-@p7XPvhK-0Q}8di4`@ z?ZETFWQ^;bK=Q{dIt}e&p=BdfD1gqr4C0k>;%do9rUd0!k4+g2+Xv8hfQ5?SX+gO`0)dSM zJPvd20dJJWL)SwMd*ixTn&6Z`r$=WQ)=?v#3Bv0A6TxRSk%_tHmFUOt%fjPbjQ6Gs z#jBSPdUjQ1vhcjGA(TQJPS^!$$QYvvEB6CpiLg517s2-u26r`twWtSHR6rJjI$OM~ zLIXn42El2_KRh56To$?A*7{J?{@k|n&S&E4yFMJBIDcAv|9cOCx8D~-wU#4dP8KbT z_PWLx-p2w2;?dhq62L^f)0KE;s6PleHVS6Vi0?hVhHG_3Q4Jn^>gtY(anXH}L@=IP z#dL(If);JA{b*+l*O72iUJ}o|{9NQ#6vaAVDE(N)xz*)SHn~53^5)AUziKcZ-?1$o z{Wb{?hj+!$VnSm8kn&HFsDxpW)iyR7a+_l+;ri{hjd)p^h>48pU`xF5yk!^&&&TFD z3*+pGCGpgTh`HmzDt2L9faK_AomLE%#K{Ig{&^aB{V}S0LTv1*jpgNIW9tBZ6P|4h z6vy^vx{>U)L=L6f`bWYcnK?WJW^M73Me+PIt2jq)B66*AyFeL2&i7gJ{IKbujXp|c zwXlS;;<;5X(jZ_WY+S4qCCA2)Q~)mbm6unez+M>F-f(?l1be{8=4QeC5CJWXO|gT7 zxp@ob#Yp;5CO^gC|(1XW#=JXly(wbLkH~>@z5DKc)a75 zTjJtNEO1^&3(K8RGh;lSpGip}K6H$7VT3m~ZQc=wn@PsOUfO}z^rN@FE0!*tAG5&p zzPe^r%2*#gesa9|rdvoj`Z1-S7Q*C5ie+!uxHTy$@+HGzGEs5AGPW|RPMp3S-L@$X zH8zYT;4WgA1H z2hiG{eS2w9J2i#vHS#R6wrt7bxaZ!xQkc%?U?fRJzpzBZljn`Gr*a|Vm0k*%Bk4Q` zW|lk^knkxy=!W`{V&->Hxj+F7mY8ZTgV5i*{^HzN|H6}T&1(o$5-4tw| z-*Y)nzB1pdv?^azLOq|J)QrOGJ|3qq_nIoD^@L6paPI5e+d$!6?|N4fu;K(&h!x6u zcol$-U5|0*UL3cdJx4}?_dE((@7v#0XdUb6n>6XBLXo)_$L`&A+F_pgJp~4SYIpEFh=9nO6$T?Uuf*CnLF($At)D)&JE%$wB-3#&PukVYi z@a%U~PKXlta2;O!rB_}N*M0qO<9EM)I)1+EaBTe@@(#c1)Y55j^bk1`D7V+W?#$S- zzAhen>e(1-KOP_a#QUOe=5iX_kSx|d6eqVFhz-Eb&L~#Qlz_Ij=PZ9+JoMc=DXDff)mx^-rJue% zE`6U4us>|hm2+*5jaxs@QhmU=caBZ8RPN~zQr?VAJ8K+=njP>0xKSS1uE7DyZPK1O z2LkCBE~j&2O_bEX5W`bfQuiI&>Mlr8$}A#b6Xz|1zx_vi^;-{6IbkN4)AHE5Zg+Hh zExflwyq?*(BTfJ_I9Yg#8o6|XqJDQ>0l79aaUu~7-1Gbvs-G+-%0q;ip%+vvB(Ru^ zXO%=doIH>!(h1|3gyVvNJ+wXt=bBp;RVecPjC*jHQh-FMI?4;FZ65LD)>dlB=Esd^ zR>V*5IZTv!A54KWwC%^Cb0SWmBb>fDZmd^vc9-fx zdQP!tC%~PF^Xo=I>4llg47xhIv({=DIH{`29Nd}BWL8Z-@SIuelpK-a5 zf^je}c>IPDwmD>Gn?z!AQ_VG;qtF3+h%DDFpe-)K;E{z-h`jS}RPVX(A z#bD9I=qouAm1mN8R*lf*lA}<@8}>KF;v3G3t|CHu9mi>pOWi^0fVRP?IvdG`#H%(; zVeTTBM#X4K!c3hXSv=S{8fqsNQ;sW#WV1q&E5^sBg9oXX%DMy#-GibXl(pJ{_dH81 zIG(Wab4ez_0PDarSvek10YdEbZO)t;)+J$nLeIlMOBCo#Y zhB)Vf^TFR9NsRATzxj`tiHTz7rk`tJ9@ zQ~KhoAG$5R^Syt^1G|pK52fjTr9-`BzKey*Ft(jL_9bORjO*#!#PN8HFj_m>N!+7^ z+#q;pf?SbbnFkL$5ocezIKK9Uuf)$Dc#Mh`5zjvQiVjR`zX{@GH<^5<}_d8s6Af(n|V1e3O%puF@APT zUfb^yzkO}c@*c10IsB{u^!G#?oKw${*IKn|RgztLb-j+>9kH|0f#a;HsYwd3=l42} z!A;rW-+G$$9Qk+V`}EFTi*Zew~Y0T0)`?9#qMrZ_W!6|Df)k{j2bbuu=+ z3^wxECKR=)F*JqJh(}JKPg3HjvmPf2bC^>S-@o^Pxc=HD(R~!}S=**~^`$3c#fQIg z`qZUo=Da5ZkNfqRCj)^wvSU#`l}0*S>mrBHJYEO*7BUF_o`qb*JAuQEHNe~!5lQKT zc1QDwdeIvSrd`JM?u+FM=BHz*>>U%NNh%Wj?7n}FTOPg!*dhi&UTa)?&1JyFhN7_z z&+IJWK2xLTbvTGfts0N9IeuJ8ES)qfent)OLzHJMm^waQclLs)IMx@n8#YJH^2JFQ zniF71tc&$vYiA?NIV5&<9IvGc0nu#~)?&*IP#QANF~<}jWMER^FWWcmjn?9dIOoR8 zqM&aPxjmGW?8Y$t zJCD=T>OR5+gxPqUbRkbwfpxu$W0huH_h0?$SCgWv@h22Oz9-E|BN?x%^y&WMTE&)| z{3Q=CDkFVKlO~jDygF8mNWHg?Up-Ko$tcQ>(er!G3{86u=~jc&@73WnSZmcGSUaB6 zE|D1QWWz!*3b)bVHBad!#1mRdsL4sOW}(Rsjm=Goku{^C%YfTa2=UkPpIM_QKUn&6mQ zQ195enHw#R)z3Vc5(3Pav)H#c)5gu^|x7u>0WoNMPMn-0(4T2 z9X^tny%Ee!;)6i^>bu?+@_k`KA0@+AiR zb0H+J%M;^ z2*dVb<@#KQFhoWabXYSt?x<0xSU}$Nf8HitF**9@{Bs=t&4cmVJD!a4tLDbw%!+6~ z#*==6BI~oV$=oC~hLY9;13!hJe*XWy64`x(PL4Bo)X^O#yT7bFFKWikh&f}*V;VJC zCrv1)E;k+(u*Vb0s;{E(d|nzODmvp7vQdAcG0vVmHhz65S>|(B_V4|Lv;yzto$h@L*I9(S?an-HYX~LdFAE3z4;~rt? zT6GQE&Y%s2|M_QLNVIs-#pfctO@67uJ6lX?tDVVU*?;grEL^Y{2DUTqzwh7UA3yiW z_|~02j91sL1HX+?H42Y%0T!+vMU*ZX+g=n#1@icbW8(YYy$c3i5seLaZP+SFcF?N7 znHqoXUDVyB2BO}5*H;x@L?aP%rq{%hg$v@EYp-V99dzRQeqx$)@xqr>jgP;4{TmUu zgYgfaza0g6TGZ6cNX$yc<@LQUn-+8uGFOQ_MxsS|`P|=o2GT(Ir@7^Lj3SzG^l&5I zCp_JBw!<}v=Qp3W(FbGAD{Erh12K)z zdlqdnTd7BVh`PCkpM3^0dX*r@QX%X}Gz-g>}Tm&D#R3K3NT;tU;p;Hp40PW zlvO{w=H17ARg!&q4#z5wa$kkDa?9@(?w-#usACrvkctYh`ktovhY&YNiUXEA>(W& zf$Dg3UCf@e1cwi05{bO*eDR@}f5utxd&)Om{MM+NGC7!;C?^cvzH3js_?ri)%UTs} zgU2JE8m{HTc&$;2+L5(J3YQUqxnS8$I?7=fowqb9X(v2+%*vQdsm$>xP5V!5hiEoZ zR*QQk@ei9VzJAVxxc!ofpfY*<_!sxbzV-h%e)!!7I4|p~8+mt0D3@$zwLL#+^I8T#px5L%w*1d zK5)XcF7uE}89hPyU$=h;PKW(*=4DsmAhV5;Q4OMOH2TQ`pIabg2iuGV0&VEAwr&mH z??IxJrAyR4Z3=8aI|ksgEx_5kns@<04jbhiQ*!?7`ua+VcU<%tI=u+8Vu3p>PnfjpC8)i*Z5 zOUQ$nM!o{oAXExEah$Yq9}_9f6=hqaV}Em8HEUMPzIVr+px5 zNCxXfPM*F=ODd+WF&hRre_}yZOs7wu4&SUv2AW<{L+mQ4u6^lGoT)URL8cMs?^Xs; zsg!P2G=&mK=SE6|7)WbgQ(9D!)gdVVmDkBfgL?-1TXnVjt=QIql7 zbmH+K!U>ZAK0LV!OuGi<;BhQQc@|r%M{&=-t?4%+EJ>O5CS*F+lk5Sn zlgkb24YZ!E*v&4y8Q!=`m=k6fu(UrDEW>iry75{jA%kbd3G*RYUBTZnlbUAKf3*78 zGHPYohjAI+K$h?WQX;*Lyr;hrHirI8lggriazFExgD2KDr@1h$KJHhHaUlz+-;mL3 zTgKCn8Hd-jv>Dnrj7H}ziV)AI5RXeSw9tY=l)Nlj_&href<)PP!Z>t9*#%ZG#B=Hd zmu9KZlz8WVE>50ch~#4TQ_JZ7>gc`wigZq7bvw|tpibzPJNHX<0hY7v*a(}~=MDaOwxA)N+R-7p%NluX90z;zS0WUCO zSmHS-GW!q;(}u>x>x$>c&fXJoY-xMUTQ)wLVGx7IM#b_yw4f#Ft3|i+)@|TrffbN} z-@B_hCSdXZ;_jzo@>^&HoAjXQl5hpuneTzzfRF}(8Xfsf2pp2zPTO2BsfDuma~?nr z_gy&#uLJ8;f^DPBSQVZ$*GdVBzrPC{5LUrcEi7Uy~ApOpmm#trLY?aOpK zLxJ{L{raItVm%LjxhE=jc|4rwFfV5989vblmcmRZp*CxzIQQ zPvdAXU}r2pD<)5=q58;@xZ?|VVChdy9z?^u8E>abk7ZZ9Z@mCURF*DXLM`YKtmJ9a zhH^(l0Hs09@et1=hkCHqNflzG61s1114{LHm@QeS8vp=607*naRQP;6BfvXI?)cS@ zej7&*cEFGac12CyTLZbjT z{6)I8;Xp&;m!lKk(c@sbtvrlLd7%Qw@9OK1CV`^R@Z3d|`ReREsB~xCB%49^zT5J7 zfOTN^yew&)D1(W98r&*g*|`Ww?mJ%|##sB|fd%kVAzdl7SwLqxXx?Wwmg^+GaN5LW z_@8UdO#vyNbX_@bCRQk*6og{n^ztZ-^vYgw#TBm^6~~fd=y*Jj@5&5?l}e^U$nOnD z+VDVQKm}4EB|mq6H^<@}WyX?GOf%<{PrErrUmoW<6qK$pzw=#zDel&JRdAcYrO>y@ zfl-5uaQ0f>r_ar6_)?f=#;daHKF){7oW9wu&g1+(bKMO8c05HuLvrM;hWpTLe(}(6 z38!wr(>Xdm{QmdhXv~eDuX-ZhT>1JKN2GD|lDU)tJQhPoTVvmWgYhhLG=JIolyJh^ z_L`F*uk|=e6>DhT^0*?mG@iWwH!*Ae84PPUzV@*X$DV7hisG8FamLDXqmr8Ky~v!b zwxhJgZlHX4Z%ieji_$1KelSj`Eek#^PSR1Za4e+>Pu9kamp4YmShD0x8shIic|mk- zXB{0p1df%`WO#aeDb01qU$w<65ABRMw}9;*H}vs2+VJu6^reao^+5 z#o5#7{5PH2o^u@EA8*dHbC#qPvPxO3OT@VpTC?WmSL3>?uj96GPN4kvcQ7w~hohx# zOXPMS`=-&dgqEy5RZ~*wyq^9BaN~CHJQWKmt+{+Lyl*qb_p7-s5JA$)VhmAG72&rnGcA`=gJv z)J4PQwy0i7C>kt$DNJ^`HTvy`j2!b&5DgRFT(viPJSz&wlaW9r*z`FPiq*SAx(N7>G{%2FO3Hu zd@w1K8M@HR>v`nSDz+-R(w#IUZOY%I3$N`tJ&*Syoyi+q3(~dk(z9#8vAUo1B@gg> z>D0|Jh+$Xxc5Dek;DKT68l7(jPVzQMvwWupEd=QcGVZ1x}2aW6gY*lBHhz zSp`%)aF!le2?I~@AgxiwJ*9AC(m6TuwM%+^w{$M9lQy19H*+WP<&m-8hteqSG*706 zu+GaGxz|+RmHST~ZHQ(NSO=3nqHkjI50G5bgHlQ*Wz5YUqM~M^b1gir3j84yUGHs> z>IQli$W}sDat%Tx+0@s}W5RwL z48#LpzajR2`Y+UpNy7*=~< zPeF{K4&gXTUmfPzaWm1wq$#i&Fv>YfE$hK&+d%T$qGCJ>ORtShlvMl9mKURm&R1FG zfat+B%|5d<7PnSLbJpBwID*%Y8mX<{pAAfQjW~S4Qt~;12-$3t+sxV5I>}kral)L0|H0y44JI5yH)- zJ{}!*TvP3qjN=|o-;N$V@_XX-dkI)#)wp!+PQpvMch~Mz8AJkiO&6gwwUD(wbHO4$ z7sR8FJVbXhv47M~rj6vf6QTz|ziFs|b?L3k&M-MIMLSHD6&$rVImo{Ldf;^W6(keHK6QI?BRag^zd zLP66SPsZDh{fYKuPzv%ydw5G`&Yl}TzwiF|(1$*fYDa(joBtMX|I3@=Rg~>RhnuLb z(2zWTIq-r5Fl!m?7MN}a46g$0Yaz^WYR&Z1r;Rm9wm8OXSIurzKlMPb$sTTXQNDldj}iuah^woRQ{=ua30*ZYBU~= zRzk;RBr4$`*t%s0N#~UOBRrd;S}3aBV8n|^!Wp140xW>Ft)ev&R+r{;w4~W6Xq6OL zdV>>{g5H@6c_}NI{`U3kfpY=)Ko30i^iAHUfKa%&$;(vO{Qk~6?@UP=K39d39?ew< zPQ!xUm!2ET-H3Hlh5<8tQ^nP!kP9!oFwKL;iu2>kc~MaL@;tt) zcstMj?z`jiT#ngwr4V#13Sys$G@;V%buYQ(l5|gwQ5j%To%?u?o?AibxiaJR-2U#h zJio?RA+%d3^$#i5e(%gD<&k_JU~ao zK`N@8`=QBk?wJ?I(lZvvPyhBKG3SlcF9!Gj^Skeh=QlhbV`tBaTW`2DDyhVBs+U&A z$OGkBKVIFzk~Uh?(zURwp7bqv6YWyF*6pNBADQ!&L@hUAich(Stp3CCz>oedZhB>L zeC3Lk_~g6sknO6C(v}19=IgGFJHGb0Sbo{H@dS09TTj)+559dzZ2sBL;vJv8Gd}<3 zx5T1b->Ag+{ib|$T`D$QA1bf?I?A9iLzfT#_@_X`D7iR#Ji0_1C8sdZG3sNOy4rKE zfsfE!fZUTKTVISZ%P*$x`FOfuLfhbc@rA@Nb+|9O?BOOoQ5#hSAoY+o12pwN|3);#2Q zkeF43{3Vo%0l;~2nu#|rWdAN?azT;29PBU+jPj_VdumJ*a+pRa9q2$nqlAVPva4B}v?aqTAw=y-D@x0v5yn~pL4Eu~ zAE4R5#`x)jzl?H}y^@kLgaaWXiklV5tiXazCZpCeO=4$NHq~>w$&gQqupT}bzKXFO zC{(0M3X90ZJC<%pX4K81@J56+u*$i)fg~)a@}Ru2KE`MrTD_NpOl}q$U_MH#li@_5 zO{7WD^Pu9Tk}FQOn?*H52*%>YGIS@^CJ6(a!v*4mI^I9pm^gM!`>I$b<&qr|9w)uK zHwrgi*Nh^{Y;*786@5oB)P3xjBvP)UGVJC(X1i~?1Ydd%kKyH}62PcZM~`7jaAm{z z#L%k#^d~D(k0gvzFAVdP{Gq(3`|v!Rc#!L+maojU!5F>O3c&&{Cj+s0LpFcgoeSR| z<3%xaKpf{YGywr%Gdqjx;&`okm~!$kb4z^uv)f6=SBlUrqpZ)dl4cAGzwIr(y%X^6MU{@6$SHgYO z;tVM9XY&dDh9(aztpc@C7%|*W4j8Xw%GDX9dX{w2{ESlig;-ErdZv# zGg@*e)J)O*apHr?z-lb5r#Zo>Sab#!|II664<6&etoc!WI43qecQh(qPXX}4QL*u! z+NdHloqHH1`U2|of^p5y8;Iqjs$kQeW}^Rmi`{w^iYi=Lo zlXg`WT$d_%Zb?ChzZm|NQ4T|kdJruCb^0bPcZ2P2rKHu)-L=u)+7shY3j4?sZfsIO z=EapaT!E*l89K?23Ds42Dz?VQKKd5Q>P(DdN9w2_Ig*j?+-1h0*SObEFfb;^Ec^ok zW5(epJQJTyD@y2ODyhtyGn=Hj^$DZD2+y)m3=L}`0AeOpie$z{xm0B3wF+~uHDVK@ zWa2zL#!My8T?@HHntvdz2vwUXC{R6z<-Ht(f9nZ0#Ok#io654E-P|WLR*!Q&)@83zv^qYGMf^l?w}?-4)1P`vZPOXGEPR~+7Rfd0DN5A989 zvlzuYNC3R?jY+X9F&X&iYR1$;DXXd&HTfK(j^k;Oih+vEyZP-m#}~f)jfjtYAfA13 zb^Pd2N=3fBJ@y?t60_?uDya$l;Wu6tWvr2|;qGW>P3F>FYOq5ba(+zW`h`HT@==KL zCoG~QBQyx#&S}EKy!XY3F*D+-k9|C@djI?5Q(yl|+|c@__{{3gn7wcm&!ij%v-o3Zu|Im zWA3j%9E-@U=*6qtO)17a9AhR73l$)^tn>r^;rau6jE9@hDzrHwUkfp4Ao!?Y&35A~ z%5A5_8#LcXGG0H?>LJD>r;gI2sY*gy9mWDQdDR(ZvApW_vH96o;_+24k&Cb>_HNxC zPyX%|?(}x2CvD8duV%5fP0^=|PXH&;sF;(waQe+R4^K_HWnms#UAf zckZLID-Gx*$SB3qlyXN!R~k?ktf{FRa4SXmWd;R?znU;d_7_|{u* zP4p$-R)!cMk=~@43|&dT8D8(P(va`+LGQsP4bqk^Z+$r*(m4)0ELoU)2_WvoPzCv; zm>xS`Pg$92=xs20J`2eFyZXxO;-%HJCtJIQOk6Z`uyF-2!~q192^{Y0jTablW~KGu z-P5&hD9f;ya0MCk07~RA*DS!3(RZ>d7N0Q>NW!Va9KAswj!LFC;o==uOJcDftD}1e z-#ft-)JV*uR_Y*_v{H(GH<9#`kCNtuCk6*5w;MPAh(i@+4Cbyip>Q(1mi9r(G$fen z+`i`3$Pm?Q>joi#VuTXx25U?2-rMPfXjDBZuP$b2GK=$?HEhY96b|G;CI$!Lit7dZ zloVM#CD!G1kY-IQjAxTfsFw>Q z1PdhTV;*nzsrBv>;MXtyWP4zBeeADqr-ds5_TX<~;mjp54ams1f7cKP>RO_STCcaR zJR{z4_A(NmHd1T=EA`c7-YsCn12n}#=jYLahzQ{FCO2$E7s)EO17{x zp5H@Qstx6y5YDb4dNZFaVr@@~s%k9fmECdu#baaD`i?k6b%ElA6#k#GJ%&0cl{JcR z(vv8w;LX+?ewp$oU{sGDiX!@pckiR-D9Ksq-aJ>}Er18C2grm$4+tox4Ic_Zi?yvs z{Iu-{-~LC|{RnZJFezb+e^j8i<3(*#F@r8!fh)*JgoS8Sta;^?ICAtD1W$OJ`76X2 zZD^=t4HU$A7hV+e7tM&3XD*6QeC+eAfv%W2mr`IbyE+PyH=Nv+jH7bu)8^%kBpm+l z|NZr3G~V>Kzlb$2Jdbd|*z6xjVc0wbr$(;I(Asq`$LIg?_IT-qmtxDtEr|*By=H)_ zTxsza(3P(l#Z~2|a1`|q={WPj_x(+ZOqj)b{S7zJ~k(esg&mIS3VMjQE`$NC>(MKBdZ+Bq#K$V zV&B32@UL!^_hacjmlnmY>61V`WI;Y}4eX@c!fRC4gbs`-eR^t%3b3PVg@Gb)fdXN) z7cfqRiM-WgPT%BX@>|!L9u+^^p+`kee(AY|4d|8ec*mYyUj<_*3b7 z$K~(J9mnEl=d7FRF^$b9f#$T6jD#VI;dE@@o;Y{GTridmF-VsArDrZ+3^WpQooD*T>MI&2e(u?kH`i{&?$_$UYCa1ht+=&%Jt2m#!L~PbHKaDx<<0qVV*i1-mpbEB6yE>f+pZ&73tozmR!AwpNwh^BS}=pk zFOvyX&^Z%c72|m^U8G#l*$byrZe5)E&d;OlFyo%OEH<`Gj@w=yip>Wei51!BMlH*1 z?9@es)rsOETTYPFb>;atlKA=k_=oR&G7A5yGp>B^C+IM>=?_zfTpNI|87WN3!8lZm zh_+MJWapL*@%lFc9bml*#lok;+Qk!zOhp=@Z%}=M@B6`r=U|-nw~)`W{lzF+eiqS9 z!qG%o`7!cFH^gEhwsmzmF=j#!^S&=0_|6M)`RnP1*S|eZ?r)FPd-j9tFNtx}7R23; zKTDF@-1x>n-Ai=fa~R&}C&-oFLCSSeWrzoaqe9tNlo~C$)@;r*#C;S4T^Ir~m5TyB z%=6F6ZYCk`VC2`;NA{el)ZryDiD=?56@-Q-m69tY|EGabF3+2`z7;)t9PqsyV?|a{y!so7AAp+8&Ro|IqvINVK)|B}va>su2wJ!ftuH6A7MRQDC46+>lM#KB6$3X!pRgeFX!izlZ!W=)}$*He#C zvPk?L)@Ki47`$E*awoM|hhX;IgmS$>16US2FGs;-C9o(^$`I@zw~~_AfpyqIc%+<~ zhzx zGh;uCI((=oDU_#z>d}15zkcRFeza$Ma=nabzkI}ps(cyYxex>U!x)Mw&Cy0EA1MnS z3aAIIcO@W|3Nbc5VBs6yTiUoM=d7RavSD%x^Bxj^lH~~T4bTy-7onQ)ugr^`x?tBM z*JBKhQV51#S5BG?kRcUqn7i}ioY{&Ny_#eA=g(|wUOgOrYoCo;!a!IO@ls_S$3nIe^^M9>YbgZ6y=Bt#Sy6AT-|%Yea@izm5`$`nhgCcKB%HGzGgxkKTN2k zkIEUnC|KZTdxrkllh_BwO~VU|0|8xwh*NaSOYXzgqLnY^*ACG)veGa(Tx4h}b_~nB?kHg3JVH}pmoCQmx z{zyI7!UGGWqZ`A($c5RoKf3!KnEZHfq5G3pap{UPP*SM<3TAKDUJB*Iq!iXNz_ZUj zJJyj5Rs`Lb;Wad=asWCzMg7}W6pM!AO>qN7`=fkHJo?asBviZs58v9P5bxc0AokTA zrfSJa)>b4&rDs5{y z3aq#>yPT=S%43sq+1U~YsdYPfD)?xOjykTbP?pDxp{j*m_Ixx8d3CDOEyHI{g!^=! zYES$T7L<%^!?FeW1(f3%>2zpmEed{fK0?J#@M)V0ocAK{l84)RQUUFl6if;b6+?el zaTNlfx5r4CJYGR4PqrSUzk8g5$<5CmC(lSShB3Q&Jr#Y0toLtQOV6XHC8LD8zt3DD z>ND{?zT6a)j@$2D6OP6G{OoVuhjVSGG{@+;^ip|lm2BtTF?kLZ-4x~ETncTktEb9y z`?urs<>%A4=`&{i{=OWi`*=-1d;a~DrF;JWW9vNN<1UZ%Kf78x(gq4j!rq@D~wC*F4q^xfaP!$xoHB#D*sZwVe- zQxt3a(TTn2gty`N&dFJZtibb!$nHnhZ#{O_OD<0rv3L1zGUBc;vtLp(wCf^}%4CrU4cfV^TiwZ2JOJQo73qWP^ zPC}Q;qf!jb7nB?EJel|Vk3yp=rwRyEiqWkTmXPr|>ps2-+;bLo!c1#9eAKl#Z|SPD z%oJp(T7Ho>H`GHSs3NE6rSXADOW^rVpgTpm6wn@Lu1)Zs%Gr727|RgXa?y?EJzhmF zM3akxB&xau|3#9&Fy=o;a|L964~>x$QmnYF$Tn`NvM+z4+`e?<5^Emz+nx`0*>8US zA0Hbxm4v(NuDhJ!C;21Ud+5+1*HTs>Q1e)GTAt8S@oQ4|8rSFLp&Z~8jbdXT)*oYvabaW${CX+3F;2w)12={q{V*0a{3*0$DFn3^DY zr_x{Q;-%<~0Pa2a+~epA;_W)whhZ#PuVbn-m;kOKIs)fP`qfX}uhzJ{uTMPjgfpha zh4rbMkcSJJ=%F7GfJo#NS&M!WN18htm^hRiNhz|OJGNU%UZGuf(Ry1jZ-wnSdH_Y1 zMt^nsruQq%In^{#OQq?)kQQ#C>3e!l zp1trUn!Shcm)g)usY;dLNT>g_&ciu*?_(Q6BQX(SG1vhh<%>M`(1b|&2o>txrjF&? zP~n8tx7XPXm)u46|5|(O;cKiSs*2AcxW|^Uc*xDfE9)b?HbK~5ygol;8$}WBNE#q8 z#a#W>N%#=5h6e(aZDXNDAr!?!J248_kM6f_=3N$i&;FseM39eHo{=&I7*4kV=R=>IHDJXsIW{v zHf&$I?>9E1qQbS~>&1hkxi8PS){8{>B;%h<%T+fgc|MbP#w%x5SQLwU?cyc2x2ekV zi;JzczM1g;UORE@BmBNY zj!;BWL@Z&bIuf%s!`%wmx(k*AkZ0q$+~NeEz+3yd4%_jOLn6+0 z?%8ku`I8^puOB4DOG%wLj1SSG62ymNyv2V_qONSDm%IZaT$MBC0JxDIc)|N94+tBa zxl9=~0BTA~CdZ}&7!j+i(h`96l&4TUbgey=CmaFr`l9f_j`UgWsk6@Wx@^sATexVx z3lU0TNqJ4*q;LfKr1(VBkTR13QkY#pRLV^6NfC+GA#f(8CuO8Lsh9Q_u+^~yN(3Nv zP5LQ$s{Qr8Hho{8>AM2L>d>Wg%exW|XXeKs?10rP`=j1cn;dDx8e;OT=K?He@LiA!NVKr7PGs|MA~HpFV7a=83RLo}pI8)FE-?;5np4Dd)F z^K+DHE%1ByRpA|vO0;?o8=!%XWmApD`@H#clPt0)*0M6kZ3~ovKsEBBvDvcYX1Nku zA)38O$P^TAh-h7ZOqXSlr_qIKh)GJc%Hj%JxaOPo*GIo?x8MIY+q3nc6<>D2 zM`NdX`paMb(#=P$VP)bApcW(Rl_;f-SmL8_5#^Z$;@gZ{F-=wv0?QRJilbJ6$J99b2GP09Zz(A~)ap&UftId+&9gU0(=3 zjjZ@sx>GoTgn~?fzZe9#22gIZX^R;vnn7Bx)lgdIu~(j_aA&NgV@Zk&ryJ^kgBU?b zBHEu~8E^%aNTSWPSY#2l5*mp|K};gFRCGToL1nlIXAp{v2b}e{Qu+joX5rEm@YbpQ z$~EZ5#i12FL1i<#P@=KXqwp#Lv+#D-T~cEIzKZiSw^`07FR&SNXWN4BKV$ism8?g= zNKB%oQl!4Mwa(IFQ_V9|-Q~M~#;M0Q z^^jQ1ET$>WDh~}Xq5tF!^}=O|MmY_M^GJ4QbPRkm062ay7C+NFi3iJKQgiEZynz;q zgIhxgff6XbaV&Z6F%~c~LgC~g8kdAr7KB9^$Gr|Q8RQXH(GSNf25^fLEV_YPRL*6~ zJ_4~|AwBTFZ-4(CKZu)v02p@M1f5){h zbg$1peqM0eNGFB_BNUy9z^$~{g(a3tcdOa7`^(Etu+5_#_Ws{GY<3Rg0x&r9w`RNM zv-exgp4)BgbfMJ&`r;BXHsTQSTnCX*Xd~%Fhz3!tG9u(LLRoS@GD5Uz!6%7WeuXcVo*g|b-# zZQ_G+pALM)N8>TAaX@YnS=HSrkUzihj9svJp{3MQt$=m(%Ij~~4m@Jt`sR1+w-5c+ z9{ax!0%ekWfRkEsg?!c=G zuePg8hACx}h6bHQEn%{hY6U6~|C68m#ICvi8pqM}<9*%q_Djq~j8uT>(#x;4B0Q!Z zjF{s)-mq9I5U9!lrWYZl1~eI5z|Vf(3ErbejuSDNYAjMwP9hvayQb!h0~Cct1@7-j zLgNZ$r>Cb*8#S}~Lv^wdte0rY2<5As$ABn8%mhh5fQVrXL}C(nh)|X^6S*eGC8dS5p+04qxp}TiL?lB0r}zHM@syX5^({`M zn!ePYsf8lbLQ)+`LIW5~D2uwfI;ynf06OWi1-&W)U_C&%GnKJ$01z3Hm8)b5I^Z1G z$MdFcHuoM47#+jIuB0`2Le%k4(IP#UynL!Q03-!6b=|$)B(VVO#Pt_=pG6YJRo7hZ zs95sQil-}OAtf?>({}~(1XLALRFQuvA5j8y-}+pNOUKsvw8jKxouSD0^tlw4ys0{d zKG*&lLv1>S6lM550YqK1KG#q2=A?wxfIy+aFxOef(s?D9!T?cYso(XUu1EW8(=o%& z2fZhyEdVQypC|)TlzKnxDUw%8_p0y7Yozn*d;;YHtW&aZN}lL^dgA!3$V%86LUo&bP6Kvo;R(<#2m5`2gv*F1^fN`Tb)S&ssTNb;x2C7h`+| zt@foowr&BO$;BjfCB<6`c`qLLsM&xf<>B|>uuywsFXMT^Iu)wl4?Rdca}33_OxwEs zJwPL#^VlrA@1eih)0=kN>61r38ah8UY+ZvM97bNAp=QZJJpIunB^F;c8v~sra2gYM zCox{6_sE@z16L4$Gk>6whmvRg8123YQL`4?c-cizEZ(=cLh5WEAS#FFb@)KY8qQG* zIt#sq;(!svIJQ%fVTr}(Fb+dyaCZk;gCjP3NrA-|(SE!E+1XCBAu1Y#ppl958cQOX zjLA{Fy3v4mmCg$!L4!nMOi%$S0r|ot;DO_?LryC~>ZcpzAko*95KacBO!RGEHSf-a zbS`+o)di0r`5*>oij3ru)(+OV-~Rf{3-+a3=h>x~t+L-ey47~kUOUO3VV{@=Us1EkefQnx-qZY4)aR3Ejb_lPIz5}zpL+PlkOJ?*75Yx+SFQ*tkOCUuVuZbstI~&)0)(^DAJ>I zXdTL+6%bd28_6Qor&V2A$vh>M%Cjt5neJ6pQGD42SzG{KE0nrUm`Hd~HB^Vl{!b=( zBaJ$eUIx81x74~i2=U@!$tt218eS~bZ%ZXanUJO`MF!*_vV&A=k-qZCFq zo~DqGavTUDc`^l%)j6q)dmMn{Ca^Y+!q$TbKNL5@{NviH@>9G};2QvTN=T{jzxcfg zaEAx55J$L2AIdM1OvI7icIwf=(Sf)cPdScI1}w-HJdt?L@E;Q90LTI&C;?z&7zX0R zP5`L2Uiv_SMg* z@u{#QsWBfaY7Q)IE$=S-i?54K=>C)cRo>MpFv?i)`8a>OW4nLZMZ4)OokK5xmGxwz&1Y_RSOZ|ji&T-|^i$tB3dz>Toc9p6FY~9`cQ5;#eSnALnVp;LAW4fA>yt1d zLe}y=p(7d_q+k@)9Bc;wVx-Lym` zs*qKDc9sR+!%G&T#$Ru|wWOT3_>^q8%5taweT%`UE5(~pIk(bMlF}&qa@u;jC^QbB z5U7bvBO4x}QdmSATFO4MU$!kf zw%WEGyX@1Sy_v8Ukqy>oJjP@}et{Dp8oL3; z_h6$m*m>u#bb$DuZu+Ec+W0m=uiC!;jj!4-{`+SnK+Plbw!+@qw8?oCB(OEtHK)UZ zbYMU>tme;+h{tLfpnd^icAsWL}d2`CWx3r55t$GbX4_Hchshm{m%*s>*y z=!f2hO$mictA?!c5#){Lz683)!+Dw8+jtMoGV^4|uANXWDsA?xdG6f((34{0lkLf; zX#WehSCJ>xsMfZF-FtWczYt&A>xF6AjO>trfBYd?*t?p4RscQhAt zu76bW;%(}C;qyustG=ner~8Vc+RR`~z*2#I<0S0F6=Wjgi4e3QpE3cQcnISGvJtGe zJ=L`~aq(KY;)o3PTCHR=UdGt2ChNyYmUAh1@B^?LdYUkGWI~aZUw)x=zwi!GKc6it zoon0LxX+|X+pvDFUF|I+`Y>ii6ysl*Q))rhMm*p$-IHj^Q2xd++_RRD^P2cZTYJ$}+=RxY4@ z=`QC{?xKmvyag-W^GireXZ(gpw#4|Jwvp23){_S=yK3M{&5csJZb>=S1W0%a67`B@ zENLOhcoKaKwpe;(kqw{S0l+P#UU;7+s>ZV~%LZ6NY1dq4-4Ff1Qm-qdX-_f{BqCI0 zv*7*0SBKj^iQ#s`+-3G)&pV7sz0EF7$3fu-RQJ+)H^JsmQjkE8`K-oLXU?PrGZjAq zIFI5f0Z9oib+_}gwp0ZoLi05~AKi<5!BHo1qk7G%pb!IoL5Lu0=+cMO3E*stj;4wU zU_7F7twl|Ao1dsuM1D4$Sag0Q`387&l?S8tvcG-eRa?Kb!hZ16WB7gPqLzz}p0;WJ zYK?s13twck4DPtc_!4m!Z@{l~b0 ztz;Q8Ik;iWOq`SydyYu7-#q-dYoZ`TUS3`b&@CtIJPCkR9ky|+>nE89D|U#_5ApPdsEgMg35D&;u<1t%AJG(uUZ*Eg4U5pA=34LLV?h(wRB} z^`bmt<46F&vXzA%7R(<#P^bU`_!=WUEZH0?Qtc9*_XO@?%PT@IZoVS#(`%t&NUu$U3;yqH+-8hKL_PBM_!1ffRNClLKXTp}JI|8pF` zj+%B~Hj&WM6r>;9*e~h`J``@x!(0C3*1FRwMd;EXcEs@4V&sL;H5^v4z%fD<8zi=--kzA+4(*8{L_C$P!YAuE3_)Eed&_(ES+^GAaU7-OYOkH zeJ+GtK}4tO*clg2(leYrYmW1fZ6>so&;1}4ZHP!k37j#7kpwQLZ!=Lu*RNP(%q*rc z{m%)(N8vT;L;h?!eu$dAZBQeUF>r$RlY732+=4^gi)WuiK=G4($S!OjY&v=U1dgD& z01h=q63lIF9gIn-QzAW3tdy`?N%^B^pZ=SZhl3ae3m48u&`$BeT04gUXHl-Er)0`l z0Ix7>uN#_FcTcASqa%3n)T%cnC5_L-$%MXERzZcngdc`QYcE! zEXA8HIjo}Vs!9-vjM8`ujQ92TS~1bF_uqft0euO7l~dEcssJ#36M$3*FUQ&<)iQDCB-P^BCn(rmA3F_dSAzp@{+e!_aHB)-qZJGNa-8` zr7GR?&2N6wg$|{hbgZ!Al>F68f9qJ9BRaNzYSU->TU%Hm%WI=!?%A`)DM@*))FO5h zMv`QG9iDLkZ=Fm0Tiu(+ND5!quTA5jbLhO&HyKmxfx8zb8J+`HRJ zgv1)7qt>Us^8*__+iiLCm)Pc~p0ffR7=Dgfk9;c1oM9`t)_y|s?Ub<$5CMDlaLcsKj-m5^psbpg(&s&O3S4b-Ai;+TLyZbUuxc(1LiGSijzoy0i79)u>^FW zx@*=XFR&4!yfH=P7JPBPg^+O}jHEIsPhO}G%a_I4vPI>#=Y7tDH@BQn{-vv_tOD=1 zld^lQM8$fJy=xEu_FigvQ!Jl4j=7oKFNwXP?ICDM(rvfCmIg}()CZ|BFoH8h<-Vfj zC5E#upZPfXCd7xizF4#!01bzUpSI{x)HU}kzQTg96U`c6Z2;^id1lcGJ|cc3-lk^R z3(SExe(`0yC-DPos7~kj_+G(Y8iRPyA54?gHTl=@iXEl;H8vgVyC35Yi;5U91J z3cGgCCjxYCFhldrYMmNTp84&4m|tpv+kVoxXK%=Ij0DaHpw;L z1Z^&r0F;|X=?Nyp802YrQiXu}0JXINge`9F0JE+i?`tY0A;!3X01q}M3DP^lKB&xZ z_@BC|C@x$AST`2}{7KQc!Qg>M@X%)DWdTS@gkTY?sB`VnlNQ7Y)p!q-mizbqS!lM~}+yD9=D>(T8CK#c+87Rf5d|Q5GC&iPC?DPo= z;m;z(S(0rTp*pP6#rX1d{nYs!pxQxCpPglr2YGLl1gSy7uu;h*ocKc@ZdM&>lQc5h4MxEC~zXK|!JdknteN>nlOZq8X=J z01}?-B9mPvp{ywW79~O+TV1QB;3Q?9)S=2f1C+9o+hi0VLENN_MQEx`X$YVi(lHUN zUI6W+7OsT1j-z98Y=K_U4YcWa3Rk*zse0od1pM&hk0PLA`G8t^%%8}_A`+KIoZ(=j z9K$zciLG#4{dEYLe2W>W0-&Se1i*(2M&A4o9yKKd z>NS0H%0u%`*TQ@SLqH#iv>N(>k6Vr{oRMqo-TjsmLm3ii9*AKwgt3=#+4kT)ABJ{vg0V3SL+|HHjlB zQhlzjp7BZoP)^#3q#mv%%OY4ag?Qiho!f7zGZHPY0GM?)o|>lISK5@I2;WCbW0R@; zRX5R&065-zZ10Vsj-e^Jku%vHHh#H@)B3`Ttl4;*QtD98bY?F zwiYmyOc$L1HEYEKo#KEM7ONn5Kjo$_aDb@21CAbYR^hW)o|otb^42OMBrm8ur8@Qi z;4>CaTx~TqLTAshPO3LZIn5}qaG7^O1HHE=m#=fLP;fIP%cV^ z&ZA@NJbM1R9x46sb-9E6!#~n-+QI-fJVyFk$MHrIZ5iSkQ+(E2vCM{#K5JP8sg@Yg z4_6a_%$kUZr`|C0^F3%P->ijBwhBK-0(C-rJFKf@gXLfPDJTOicHycuc4Gfti#U4D z#%ihn!i>T2MYhXF!<9e&m99uL00FD)d)qeSP-%q=O*g3F6gyB`WtnwtmdV^WI@o0o zJpLnuJT%#lS1Su-H>np;p$;+e)__mo8dYKrfF~A_e09S9^7vJZ(Vr}<@0>+Y+Hu># zy>xX%FAXHxrl;SxU;f*V?eY~#*527T7 zApwrFGi?~9ZVUG9MC`O!7nOJ722(Ayaw+Ar3M^tA3dSg%62TTRd0?0N4k!e0#YsF4 z4Mh?G1|Tv{op6-9Flg@m`7-;_SF2F*ANPu`U%%cZVo3&Rj*9oHb)(|{eAV- zSG)PHq)HixT6Y4y0>I%Uc&(4{y3u`VlM$!6JN>2iwbt|!*bUEh?W>pG*B1U;;8WM2 zzhxk5z3Ua;bPlaMU6)?kZoc_u*Bn9MS}*Zsbx&$hE4e5~ht`(XvJ71rzcRMN*X6sq za;7^dUTYF&7>K-d79cbLJUnUC$Q(vMo;q_HMZyEcD>Q?HMix@WN1-wRjW`_Ra6}@R z%sQwLwk}eFZh|rtL6Q1MzlzEY%u1>FC3KP7<2&5FisH7NH-9 z5)ud%r67PnRLESD1`NXgQ(<*Y0)^K-eM~;aZw&9SIK|in?&mlby&6ckBrYbWyuMz( z!xtTZ6_Y-MkWo{CNdT;#wc9u@10~y;uoH@e5X%2=>!<4xJMm(C@DTc`I6;$N#wp$s zmtS9W(`^;?jyoQ-J8Y>#lLaO&x4v;v((T=@X3ka?S~e zf_jt0u>?3$QsMi~piZPE5aK@OfSn>MRd{4eN{a~1u7bO`&lW9RU=p+efX@EyJ8foR zjulqq!hs*Qt-I-9hC-M(r@{^)T#o`^PaHXnQDoLw-##TfFrefykZ}I<-hudC&@>L@ixGHZR_{v(@!>vZ~es%!d?0 zs^i1`cHWZNl)~wtY=XICMPI4MOL-yrK+Cl%JWy->u(Spo$@*drVDRkSy^G2X*SfHuyomBR6jBCEa#p->MS_x% zTSLg`#`-#2xEKlt5wr7_FL7SS-d?)Cv21-9yhB`n3QDf-Y@NG@@IUhE=ou?1L>;RH z3I*r{Fy$T9Sm<}j7bzfx_4Qtua!^uI;=V8MrU0*Gzm%AMN>NJoYd?WYt<9E}se=9r zb*kXGz7tl2QdByQs06BcsWqU_^uEro-}TeUI&L5gICafBwl-axewRWQ2$kY3#sGTe znP;3AR?k9Q+u#27x96{bL z!(u4;r_yTIfBQaLRCC-OTKrue2DL5GK`0K#@2{#x2aQl-ZUUkvPMrYHs<@)W&Ojwe z;Ac#FzLh{vDVcd8C!@{k@!jU%yUQ}>9<%F8=GisRylAt1%~svlW>+T7u*$1eTU=|h z?FsbSxw=|gh1^_GG|T?w6PMZ2i?4C>JT%rqJ_;#D&FGF^oJDnK%-`2yeMe83H>=n} zL_a3tkf206fP0<{wUX3Dy1N3Jl~HAk5J3=%;?xVMbaiNtda3N9BRW5rDjE zfPz)PT=f&3oW9{7!N3PAKvxjAx3{m`l31S%xYJ91&s-Z!;#PAitpb{QIdZ&npvF4O z&skF2KC|3H`0VOzMf0L0qPzp0mYf@9tp|u+q&HaVE%VGnH>*t#y=&P#qv%Y^e4RdL zMJctmed`VOr)TNL)xOodkIRQn1+TeI{bD#uC&kj-!O}ze$6!dWK84H~x5qQpQoL}p) zj47MtA(Dn+5)`)#*%>J>7)j=Mc1WA)09#S@<;6|*@PA!nKlsMzR>(W5$x~FeZWpM2Psp1z#;3bKG1`&m)RGLBF=O`v&Bs|&xE%3la@DtNH z2DMiSN%zzp2QYc8i5j9;-hI98YN)b2JV|5JC+%W^6W=#K)^QwdJ_iYrdopOnMjg)) zz+FZzNi^`9@{-{4W@XZA9;L|IkU|(ka73Y8C)8oYAxwZ9U~Q6dcavK`#mB_UdHfLM`D%6#-v-{dyx9+u#$P<0;^oR%2v#y zh9rhi%9F|V(5L^;df=-@#Zl<~+rO|m^B%?$OC;3NM%Yyr9zcXPeG?=-X#5?ISLfze zupaMC2}8dRE+gJLUsRkWL5ZmD7^l?CIV;Uix3(I{`f&(Az8Zoq6A2I1LnI;szUL%i zvuJqRvr~iCK8y)6)@&8b$I+-HyF|2(nr?gZp*oAm8nyG*k(jnT*&3^Nm^VAh=I7iguUZQR3tQ63-F?fhP?Lag>iP4CIazkko~7^$;nc@)T0Hg zNZIRoXTuwpGL`~Ug$s>=1it!k2hj-WpyLqhY#8Ao8juunGZ6-5$VSirqNBIjaia3@ z3Z_+)aL9h^*RFxLO9>>BI^^+RiVJhL3pZ@|cZ}=ed$lu^0(00Oo@9Ogj%Sv}M~~IIUE4V7>OhHJ?+KYgG-sR$h{8 zU;omh%rm;{6_lZ#LS*w3w&T2ofbK!SnAW?%L_0uM0`k85?sM6z0U|_as?NCg!T=&X zbnyT;RYDks5>QL%T^#qzZ@J0p9(cs&Wan9cb<%^kYc*wxnwshvBf_Tu$T&EJs#~k{ z=P`^n31A6LdHO|DiDfKRc1z!%k`08uxGo9XXy#UFX|Xe)UVHg1_J`gBAeWJ;XQa^T zruW{ZX!v3~bnvj9IeEs)ue`*068bPKwU!EU3*9ZK?rcXJKprDGj{E|7gL8>iz4hj6 zHV10R$`vaJ)gLFkU+a{QJSv4msE!^x?&S0c;71V=l|xjY@*F0YY}DQ}9NwPbJDV=FI4V2+JAHY6&<@q*r_<&2$>}c9+(dUNkkxe`8`)Aa(S-RsTN;_mQ$RmFeqQRTif=1=8h8(i927wk#h5Te9eLkF3u5FGM1Rj^kCQ(N0D&bhvSwnbu$n&o46% zMtMxnHo!g!>QE{Ycb&0`Gt3Wk={Vk3FS6XA|8x+!iNM&HjLoy%)jd$4a_kFtEVMs8 z*AN~u_fu;_>qHR)tq;vJ%~eH3v<75!Y7UG3qwmTvmB&@vzdX{nY0=p8nP`gh6x+adYJ{7H?INmABq{ z%Oz&%GXY}B711G7aX|MZuB$dt2lSaJ0|KuCu98JMxAdXzTj$X}zGf`2AzauhBa<+w z0=*+7tneigTRZ?My4Tqdo~cn^H%TKT8IW~&?d9uGeCGh8ezL{SS$bxcHIeug>yJn9 z0#>ogG!WsNW93>mrESs>q>)^NlrC&gGIcx64~QM$LOckOX2PZega9X9MF6;jEEFj^ zmGOyB8=~Il2wsy!8{~TOlhdszH^uVM7=v+Z>=SEBoh!W;-5w%@7)b`d7cb^GrFF*f z{6&*_86B7EvYZFFUmRpucI_0}R}E3Jl-u!uGVs#{r5nwyd#7r>0T8)lNl51rm1oRJ z7A$5Dndn}G5@a=am$VB701OVCvbTTpLtBV&*?u~ngq0?{`&oE$>GYEBr!am^4U2_D zgVba)AAPoe$1%&t1KoyKFxXscx5N9ny1CANc;K+5Q~X*9Cmy`OJ|^cF6o@D$^BA7v z5ME^0X^SzESJq81UFV0ds4;4<^5-OgHv|XIX;^)zNytm!T$^YIniQH``Y${=N7+Xp zL;o=$+;hm zGA!QS-k{Ztci09vqP4&2wKu=E4R8%$BLsZ=XTNQ)y!Agct$?aR=BFPHEEWJqmb6oy z*blj9{H}@w;{aIQmk)1{k5XHs%te1}0$rJg?Ttf?_QRW3TUB*Dl{MIp`-nh*x{h%0 zCdZ(-^f6n!(JVrYi!{KEw-+DIJ2U?kn`Bqq& zjkVoNn206;g|xvOD7T^H{WjS=ZYQdEhDo`Wz9ARREJ7bQxDQTt;2ent66Di1Jp%~@ z38wBYgfB*%3%LOB;uB5J9liii!ND17H+Qt6=STkE3Vw&JbiDxj5m=arwdjswFq5bJ z0N#V9vr`F08mH+S6kQC|C`%<|ciY7qoX2_Ir*5%ZZn}bUW_@<5p^b1SiWk{1gfZAp zVrnF`k>nJ{iFJdE#0ht?bjFc6T1N`+i~la=rDvd8yz(%qyVd~5s3@mrIlx|?#Mv`v zU=O3r386+qOUZ@Gp?TQdO*S_M?jsLBYM;IBRtMg6904b0AR>hBWN`E2;`^My*Rz+m zH#3cD9XSP1v*Pf??&PBAE|;BY|Mbb5?ES6p<2gU{0#U7LRY_=Xcea*%(-nbx_zL~ryHL5bmmP6NCB?tlMiMXB&K36+Pc zj$6$9dFU}XnyiDw5FPab01k}f;R)&_Uww-mt0N(K{!*eV@Eu=!%@$mD72Z&i(gGOp zXHHqwuOGASxPZO-@^)Ja&|3po`p*6Y`|bEy>rCvjs&;BRKedNsY?>p)WfL>;(FqLW zp%bUnu0ytGf16dFUui#kVY}Ube4kCkr`mZL`GmT05-}F((02kPR7K&?u>_j@P$zq1 zsM#(8Y^M`78iL~)%))WQ%_*`MfhTtYxzvSD%E`-~aw15-00QF^l<4$vPo9@Dl8Ve~ zp9qZYAnU(dc?D>TNfal9ID8QRBE~KjU8;y!5NBCJH_^=a919hsS;r=#1{-do&8-Nf zU$ ze-W~@ZNM6ib=lAEx!(Tx{C|FIx@n#Xn93lNS5rV%e+#^7j%qy#yh?AY$iKqzhYufi z^7+R<{;`|mqGo;TTiDD->3UO4_O~A3^eqZrV=xPM zJsxB)N_U)Wbw73dMksuq5KlQACU110%!2+g!ixE1p2A)1!J?^7wDgE=b`p!Kk3^yk zE7R=$AbpDK2W{aW6acnOd)hlxKTnM`Z=yx4V#xm8))$B zmurc$uD27BWZ?&UY`m(2u+5-F&KR^OzIZvtM1(!}PJGIj&X`KkZ>1I=ooH!`zgGo2+Mfp(DW^t>y(le(OwlWe1zS3 zctp6TYFs9ua5}W^SQGJSi9AO*Ybcsg<{|lh-2Rj>OT??(3C+Ou@J1y_0Hm;QClP}s zBpa#ra&b{EUSUc+aZbmd#p9Qza&YYv_KP1sY^Tp0wRM-R$BU9iF>fl5gigY{1!N$| zQsBk5P`XD+N$ z*m;YW(9)93RlKD?eBi$v_!3}KOHp4WUKJ(0;KA-2#3=Ks&8a|{GS8{CiU(8MB%s!V zH&)&0Z*R5pm#wfQ1gf~x8F+f*P$TX}-Szm?Kci5y*rUYe`&7HO=MkfP)2c)Ff2kerG{ zO=U>y`vR*1(P1U4zvX=r=+q$cQ_2Kn?k9Mr3zL~bUx5fT+?v#CgPO&B6T?FwVWP7a< znobmqg0$2utBY^9D=+_)s}KYija_KidDTlI++Yo(>&1$30FZTHxEl9TRw z>$r`lcH1X1XVYID1V@U_$8yF+P74(qwOcj}5J-3@iGSEsWz@ITd;^zRs zfk>lhXxhBe3Cx8Uo^=W}P5YrD#?jr&1N97;I(7UH|AioDF+@d&skY$5-&juM_8oL_ z9NnrIG!`I>3_67Zi|YR9rE5V!H0m8>f+`eud zbTKeVEOlyo5E-6=MCfzmm}~=k5M5Pe1P`8S5QGioQo^hE1lR-aE_nx$T+23+&p$nT zuHA6?f{%|I^HI%Do__jiH-|MR1?0pN6#&&bS2C0e{_CZ6eEaRUJKBLfoH90_fBtzF zf|o~B(Fe_O?Jon>;Wp;7^ih<58IiWQtZ>&J7Fr1=5+E3S_mq4+o1ll)Z z^`a&B=wdrNyWD|Q=TSExPeTB&k33v^;9`v+K-*gy2*DCEoK=BvA`6qxx+yvygTlc6 zgglN==H`;AS15~i90lCV1ti8NGJp&+x_W?f1rfRv@G-~u$w~2KRB+LB??K>60fYt7 zAV45C2E@*dseNTP<%Gol6u&}UWyU#1YfGyW9{pHF+HV-p;$y%EIhI0UjS|=h8)X-( z9L*>p4+$s@Vh`6C!1I%dP-7YL;7=fYhwZZK;R=1Y{qT)f_=r|}{$c5G0{?ugy#xw~Nc7Z0Y^HiWhpLciOmc|mfr(Mn-{sns3SDFn4|(mG*+3>6|9}5Lk07G+A@~pbO zi#mt_Yh^CQRQFjHWsZ9NH2;{L4d9{uBf>uQynIOgxm3o%A|C^=;GL1TS3t>!=j`hj zf9|7kd+@>EGLNMYWJrj2IK>_GLt9ZHdnsl=##>q%R0A@h;}Ps7CB=mP$@b>EZA3)6 zsR`P~b@6ndl>}`5yhS|pr-9?Mfv$J(%zf+&H9KfLFEb=t!JSrKueCZUYP4}J#h3MP= z{yo-V1cH36E8C?mdNY{&qB6{1G~f2_-(&A=eA|Bi=rg&~rrmx{)6rhwhM$cRFTgR5- z)AcAr`N=1rbn;Bs<3JKWrBK6RM2(~V)=R%TqZVZzeqSC|9dG^m_0AJ4Z@zSsl)l2Q zQk|y*8&EfpVK_BB zR3x~13FRn}xq~0nkZcrfN9o}Ar;~@QjQY!|$o>zY(w(g9wkvZI?5X#+*lvuO|9tjk z3v>@aE6cQv#}2SA679Yd4fcbS0v1lUqm8Vhi&ri3z&93avxd=?MDpgQ<00>fu#=&7 z>&Bq;FP&*?AODH@FQOjmidB|TP)H*kB2R5()wAy62%Gy@YZ26ajfBG+WSuDIplrcR z`|5+gwqXyEuLMfDktpT#0b>)%8gY$n7>n3Ac(u%#)2B`&SBM-j7xekR-g&DV6aC}u z-D3S1bMZ6;7{`D-2fgdaVZ!jGIHgibnEM!mR85dw?*p7hBv88<`JiGsLGnFfCbrqZ z7Y>oLLjD2A8|ftyOkMZKUOEh=a5GW2S+uKWuHe(n_2pRo-ZmR)M@I}M8Yu{N>}0>S zfQL^r?q`tON6;htPq*5U+ID-NIX8H^%ev1VwXzh9B5K9(_5;KS}Ws!*fGw6ZAPMak6X0)Y? z$`h$HZEC|q9%H|*X|X2SgHIGf3m7JPNDJamZlIwH6_=LGnf=kY$-61zO6x+NNa<@C zhLVTk*(;o`&$aFpbKK3f+us}ySNKZj*E-U7#m&{a5C9g&QNW2zJJLjmpFd9zN=MZ;O&3bPc*d0o(yx_i+qd5Fnxf^YC9b*VKuUTDIgo>cy7WD=)oF zhUZinltelPFdVpJS^RxtbPrI9-JOpW=5v-@`CeRxImtU>05~GK$Tk> zBWyC#OR`lPMZEz?V?KD8ggeJn7Am2^Cfi7HNe0B=-RV9>myrB`J-T<$K7V7Xm8P`Y zbMK$E?!#kt@%ke3P!Ds)@>F{;{!NP;uCqVTjubbJMby+=2!Iwhzt}2=PT+9?V8L4* z9pwDYgxi+nSr-XkK0uo~gN@@Qij0wUr0`Y*_k%lBKnsvMfzlO6S)NiUVuko8FesGB zrII`zz^iMM%VO~2VHXWSo>qY-S7|^X77pwvfL`8P51_=u^AmMof(bVv;mvVeO_b>a z_Tld@o`6;nkz+yV0Tao1q_gl$wQ`>+>Gt~RI!hwN9S1+FuPe&x2&ed(dZ~2LZ|_oF z!pp=ShVtQ`l}za>j1>~Les%8yw&9frFc_Mxov>0GAYNbqQB%ni0RHI;BCBfb08TB8-+K&Rj5>c4G$$Qw<-3yRVdsn<57zi@hv}UFhCISRc zoh<4tJGR>L3sxYYmRn;@9blE@npEm95=oKKr*d(lD5Jvs0usHB;c+d(^O`*Ux=r$!L8TkrWOZaRijoRqcIFb3C!Z+;_1U?Er7?vcqGLWmsfI< z`7LjOxT{+4eN;2>F$a8v28Tv^@f0OF;n+opKQ5Mv5KsvuNF^`@Xf@W75879}Qpq$a z2!T<_m3Vl2N{o2=$^UbLSRNXjH6$3)K@Y<}A+N};yqx~uJjdLuT)X5l3a&FoQUFpw z;>$|j2^7ownwW@k2vK+*PvDLnd+ao_Q3bot)YMY1H<{`x1+J;X6<1&3xS>~Gd!>E< zM?YqK`)uvHwYKT4cO2L3mRoPbaD%#lVw0C9k^8JWTaWjN=mhIk39-{R$zR=!?yR*G~7v;pzp0ajg)0J8Lmo~;z%bnvLp^;!6*){K;* zuH)KkuXVac*QaxeMxeQ;?@Pf7NK2vX-gIrcFI|U@rFE$1KYdfgD@+~G`%3uJKDrP6 z?t`PYYyVMX3F{g9U2;sK9XtuA{S@^;sqfsOB^cWe|+nN?P_kYCzyj#nG0?7B<-%GM$>|H{)b! z;2H0kJZ{;(Y|ExRWru&%PM)qN^gZ7$f8;-HtSAlO2-s(hjt)@;gSk5Dr6d#)l@Ly# zz>sK7@R6C%5zS2KiWs^Nl7K{A)M&!xq_|prXo#{}w0)%#Lo0^iV%D@eJk~K+FMz_L zF!w+ofEXPQBAY&JcK;)r?e6a`<$Y=eQ+{d&k&U;>N2uO%%F1rcXMN6el?M8~7=r0U zm<-u4iNmSqs7=&71MMhiUEWAb2gHZY00PU=c@1Xw{pmf<6K!w5^^|=o^ILY^XBJVu zDrgIj^ipx4#S+VsEbTzAZ9Lm<{ZvRPBnmfoF`R$&Q#(3DHJFolB+u_UU^m@%wI!{- z*!+ODDC&{xxGYz6KA@VvG*ulXPj`mB5Am<`WueP6$8-fPY3 zy8@z`|KT+u*{FT>Jw;D8Z>H247*cCkQIjjLywdHrapOjpNUAlcHKpsG1F4gzrxE++;f~@)*9iuo3-kjzW%Z8ZhEHISwSRtI zzB{oNxGq40r9stCU1S2?DH<9ZNa$bz@t*`>B7#){t)I`uTT}R27KeCd62|g42A~Yo z0yPKS8^KMp;5|lVYwz`ClVB(u4p$MI^Z8w0KPobbiH<_ z#~#?x6F-?6WKjmVL_S4+p zD4t2ixfX&v)~7tMc77rSq(>~7W(PrxhZEr68$Y$oMw$Q`URcze+Rwd-)*?P`Bp2p~ zQW1+_9G!qOiuX21a*Py<4<#|ib;KrT+Rmf3wj6I*B4uoj)zk1G1KI$z2&y#NAY?`iP0H;7z2Xdgaw8ROwut3d(YkwKnDc~Uxa_L1IJ{q@&fAv%M ze1beXjji)y1Kv}qu{tz3WG&q9Y&;qlUA!Ix99N9I^~j8KjZ`*K66c2iL@@}>mu8fK z+PzK*%&AUH!@~$tWP}n|hj>PV{e#Z?swhxA0NX`{kZ)FuQfI&2CxwyE*DVCi4 zeA}~kAD+!Bo4;U@8-v+%<~XGwQ1SWC-%dv_N}{1K;wcjr&AjE79JrFaz4eCcJ{mWH z%{n};lGg&3aw-T!3y=!DiAyILDKM-})VlfoCclA@GimLk=CNdM?s_1p#KbzA{sU90Az&LIUV5FXz2Tsal{AbqC& zR8&xNFA4>J@BchZJ66JIRKN%gj9Cr!%2yWCohygZeH(Y%2WiFjvwlLsb<}odO^*d| z)KKR%5ku=(XEWs<+pV#+-P-GE-jPvZi&iuD%kn8fcZ38;O3g*1`>GCFBeF3jHO5Nf z(umsiSbZ{yI<0gI%u2R}+}EcUoNuZN+?qjU5h7v{MDcu$XDG{cz*^sX(~iCQstuj0 zvH%fC&&dXv5u4L(*dt~5{6N0?@w=aJoJZ$!rhhMO33wtb%a(iQa7#n1e#Sg{UTRW;Kw@MVj z-vlM$9Keypw?G{_nWjn~JZs*%ZRjUJ^CCJ|kduf`eYw+=?y6ID$a!4}Dr;OsV3`?Gc7jy`R6Y_piR6S&R%;|Q! z`JY!%E0+jtJkB(LD^H%hGRBMfr5Wa--Zvd7h+?8wxc4!x!HWUlg97P++w1jU&}T0I zJkvII)=IjDo|Y$u`Yn8Ofp^h`X*iE^evTNOYv};^daM|Mts6)~u}rd0GoBmWoWQFF z_f+*6_W;^E+TG3QpCKJ%ECuLU%tBobDkonKcM{$z5IH*y$^_mR@R_BNBsPF$wPIPBtu2I@ zegco@K!g=T5h%h-IveiX*aw7iuHXd)ArM_=ldB2;K85fAJ-U#5>X@xd&9*9P%0<9) zOwLT9a}(DUeVEHGBv45m{v}wAm|7w-G1Bi_^Y<_(uGz$Gt2t%oCUZx)$o)zME4rSH7Sv6 zVghdsp=^O#Y!!?a5_Gt3(JuO!w@GQa_VjxP?e3eG+o76jJKK#nl?DV+2(eDgY(L;n zlnCA92p$BDo90R%o_&Ss6A&bUhyg3$xz<3y=QMT{Pum4Cxz=cu#7UxdaYeahG%=SM z*H{uLg7m#kX6)lBz0!lhF+#bOAON@tuk-Yc3Nuz&KGQ99S-qN@1tlaeaDJ_ssK_PM zS)6p?p{4WY;9(8AzSo;Jz2ksLZb~}O7$DBIDoNtH>#t*NG2bZpb?E3ZIF}?%!od~q zw6nd7gdvPeim7|>G9TFXJ_%@r&X^QOTwJP!a~B{J;_>d05ssJQnrkk$uD?77|MMLL zHxZS5N-!;7%JCHbO|h*XY)8PZrqF(g3vmgIdl`Q&i5k4^^h!^4U~G&rc=D;gx=`}x zKKD5%teosYG4x_=M#JycoabWe@LRL8D(n}(_<_X(FeH#GDrP!4 zE02kkixh$k6Fpx6t-_L0JGk!{CBSMp7Bwz&^KB;ct)Z^o)*|P`U(-7O@|VAEPs4-V zy>q`UT~7UMyx(_y<*WAlM}FtZVWo0>$-CmBQn!XZ&}el10_y*`N#^Ri@`&iZlyoJ9 zq%jtdlh;zRTw|g+DWw$V(n=wUV<%;&>lcXCu{2lZ`ILu908j>p6s$ZiB_$>9ds3)s zwxCUsFNH!iCX(G6Z;g$V^L_W-=PDjZKS@_f8R~k%YeGNu(x!c<|CA!sCZH-_o<5fz z(X-bv1kgpB(0lSIOAkrO>b`Z|+F#e9>zTfV|JF|(OI!FFG@h-$7^s^6HHW}S*if?z*%`TB=Ro97OkeO>OQ1e>0 zyl5Tu2P~(wl5Uo>tUijG?78K3;hYldA}^p=h$yqbHvQl8RyLWB96D!b;r5rKI~742 zz_@Ps-LrNoG1BVCXr)Z;^zlequ2S#WOYP?_D1i~h=%l<%OPG;q*$Y=`Fm3+DR2+(o zvq}uwBh3dbllrF~yt+Ynq#B!Iz^m?CV-U&r^z1dx&%g4V^9X7zrf;F>`SzVhPTQa6 zZm~e}rGUb2o4c&Qq7Q}aty9SO_sNjo^sdFuN~iltilrVMuuCq*sJLtC@!feZ3MMUAUH8?)dj^j8HxH{+PiKX%lo@dB&w4g=b z@S9K3PPQm0528^K#zQVMuQ(>eGcdwRWUkkav^Uuy665cp+*f=cn!2~*8B+q2PAW$evxPJ;imN{U99yWkf+}@FSWijcQs%29Au=) z2-8~E8r6IkPgUShGDmY<>sNDJb5{UWm`IzB8D3Yye_HoCj^w94)A!_944*5!zYIai z3SEzmul;0n3dCyN>sSK4+D`yxK$*Ycf60u?FTdRVF0QM*|*_kgqOs_wSeow?I{Q=5@AvU(Tp4Hwzq*r9|NFg29GOA_Eq0!iLC zfg}*pNQ009gc1lfq1fPnF)p}Z%SEy!xyb4xO;MTN`@P@u?C~W7za0B&ZaHP2efC=G zzj}RLV`7v}#)81)p~JTt7+;q0*&4PSAT*CP&9OVFn>KBUGgwoasJGb+5f(HS8KKOw z1`CBk!5-yfEb4MB9gDY$^XH-hP4ENPUm5%9obhxPlRp+Q@;;)i^CaMl#4fbuicCAj z7LLUP^YCbQXZ+t!ygu%Km~7DEjq%v;T@`c9{ZUfCg-kLmx#j1gJ4*)Y4DCUQxBSpA zt&8si)+YJ@@d)-m{-?WQY`!}(OAxrH(JFHUm1A8TA41C|aDEWtnLq&BBfXbnFoEK} z)gmeL#@fienC0nQW+{heJy%VM*0IfSt{j%B^c(l;{O5R{mPWD^lckx803+-TxMksR z4MPnQi^lbYc{c$hOnfYEES=K;3C^MQd+}DZjuL6K%*7e*}?<@TCh38+MOnRpbM`*eoJ8dzqt5O^sTXk9%Ad%EL^ z=lbH8uU{XZx%~j~gJfI-^hyIw*8{}JNcdg36;T^D_}mtEc#!+DB^pQU^X z{k&_aZ@hTB`lVMShI1avu0&f(yxa)wQw0{%jPrcK+BI?2+*PT|(?yqE8ruPx@BPHP z5?x8dT3+2`783tMtZ&PwH8i*2f*X!ulvOPX&P{V|MZEN~i(@%f!;+j#n({Y*-#Y=s z{pSYak$wAWT=Zb>*GEzZ_n8P06+jqL_t&!K&r)pVL7o2)~%%={2&o7C8->j z3RZ7_Ut-8UzYG?68NPhany=D93^5RXQp^)&U!m@k!LaeAf*Ex~bx(*eB$_j;|6$rGT z%eO71W!E2L^qea#Cb!*oTYTm-pGouLIgHhFUNvMS!v%6c;AnV)GC^VF^OO&3v2|bh zv^-isX`G#%cuYLea^yJ-F>qY&>vQxvepcZ6@;e2pWAfe%c`(-2=jQPO0ztP*fw6+l zgL291Dx|%(=W%S(&@XP*N?%xm3l^w?P!tD9Fu{VYkK!-u1V@SDSg zQFZ?C`S?;}bM$of#&#M4^f10sVo_&Gy6}?0lc@$Y!t$=rbCrd^1F)1zCpuUUjAs*7 z1a?r#;N~T5QPPT~6!0|rd?!YWfw*j0TYMFz<^VA2+T4m%KRQ1^tz*{PWmAL;?pzj^ z{rVMT#;=S#plxjlB`5JA#W3<0mY1iJkYxpdV)2H}+hZ91edUs!v6@!i3>4!BHBX80 zCqE3jScqHpo|UD}>#45JXv1K%efv&oLqC-~42$RP{J_EZ@kCpE=}Y&;TYqym7H1kF zRZYe3Uo#ya`u=!q+r2JgWnFybUk}7jj_!%8)~||d*4z+>?mmUF2G1-P?kC}^x)E7a zL(SQawm5Y3SX{EUDz;y7S=|5q|BgwLrtdp&ko=FPsHL3Tdr2BA>+OlB9>FtP1u)Iw z&Zk6POM7dyQHpCxT`6_CDak|#&rsi)Xjr}iwE`s(woyd*wF zP2fB}goDg)A>SV{UW(4IU^eki?rZjY0WJ=S$E-5AF%Z}B)~lYCQt zBVQ1>$}hc!GD%)q0IA-Cv?)LET;7ZP#{2V_!dT@wf?%)j_XQgFI?|=%%ZivixR`+I zVy$yp@DP&YB%nNZ{tyGlO%0HltDvUdzP(A12zZQ>(kl; zL^Gzfha=62ojf*Y>uLCD1g#s#aP^oJuPRE6w}3LkT^kO8_TG*I*Xu$e9!(G>|C+-cp{3Nh1n2UXeVDs>;s^PM(qzQn@QhttMOaa_$`%oNP+VrLESClZ`d8pw zjD|P^12+jy5LCuu63Cf|XR;2d)@fmR{>58vl<{%S8TxRpx|bTL;KF- z$Ks<~SH|V*o8w3a*7=pI=?F&TD`~hhEanW>(=uH75?hwIt2(SGvd$(4QG!lW#bRk~ zaw9LEw>jo~?fMOgA-F!(G9^@nsL#vyZUU4Ion3Lw?&}lbE2u|xCBkSi0vJIO&4jz$ zg++1#da+&Uk!KFa)fZnBuekOa-01zpW-bLFL-*|8gR9a|3@dz`pzGFostdHO#)VJk zvNPxUW0<+TmN10Xt6E~$&du?_L%676K8~-EdD;8q)6n1Q6t~#J@l~}n9%0>0$i!Gr zp|vIgC5Bog(88W4XO9UO4_j0^Z)cV50&{>_)D8;^Z*|S6_^e zER=bXnJwNXn78xr9_Ppe!*fSoh;^Gb(%q^vR;A^AdstDd910LsoQ|UAA&&mh3 zru_1kzd~Hy>)>4r+4Nd6jhp4&zXTKN3V=j^_Y z-S@r}bOj*kefhgQ-@smnjQ8pU>L!%zj)r}T|XEb z@+h{2>o{J&gM-H14?j#86dlcghb7j2hF8uS-=3R@zsGud$EogE4WI5R!y7``$QoY# zBdo_#cupmT8QNy&SZ{p*q>@2GxJv5r^3B9MR#eBIT)r(z4x^0W0R%@zSvU7d%Y0fusdRc@hskI;6v2hi9fkxY20|_-BG`5XG}asdAz63M#H0{G>aLCSKqcYuKMtX z*!$N{(F*ry{Kh}t6YqJ=rr5j=OYvk&>^*jWMC(QHl(M*e?+bu*fE$UYH@@!1c>4A` zvFx_TkyA(U@Scl$LMP@i9&EtU+OzS(7(H_e-bAhr^O6TFR#FPl{Ei3dxcKtz7a262K$V2eXFPMP!Q;vcGD2(zQ)b2S+gd2L0qdI<9Xdrp5}W&sSSm%j9+bS}L%(s*HC6&ZPKfp(=il|?^0PL&$Lv+G60QSd6Q``PO_ z4#(_k*nQ3|56I+cwvySBW6ZbY~SiV#Mt z+S?N|G9FW~sA@8b+1|;Qp$v^8tPuQd#OK+q#?0ahK%j9lg4QE198N%3AXVE!DH*J+ z(}02{Fq1*7Cfp9yQ9WZ;Z-$a)y z1%!-8rtQQDres!5hHy zVt78%yEo2$mIpxw>FCUn$PXQlA`*S(0DP1npnD6)Pf(k%nfOaefsCWQm)0*dS;!EB zGy{+Ted6X9kip1N|BN$b;4m@32$otkLf{jO6DuY}n&nv}fGLAT8DZk^eXt;y*Qr!f z7HbgJ8DnK}Atq~RE^!v3ofwYhcU>8oN1uzcUwSBtFNU#K zZ^YHr7_-a4$}f9O%-{7jx^z7htshuQ=KOO!S6suJFJPTDvQD@LWu(T3&0NI-3(FB) zOruI`lx)B?lmU<|W6g~Zp={9s?$HCCv3qAteEcYLL~;2Q)L6{XLX{hXsi0ud*Lof% zJOh|5B^5RYNDu^1P4^Rn1zTg?)RBlb$vV8Wa#I}6pNnHN=VI(kWwdZ#Rg{8h%+JQP z?VDp$-34(kjP(ac_o2+NjtHxOQWj4eRpp%tX~83!&t<6GmIe5 z{gq&S9HyRWds$l=r?flAyjy#=8OAF(s-@IZR>Z~XQn?+cMx%{H40kBSVlF^=@9(@f z_C57vYMUr<(j8fbtL+5UIE;fYCL~5i`-|H!&nm~984_T%l1doj323_<;j{$BvkGff zA2l*{CGXm~33}0WUzx1y#@)(9WtgSVh3i>{D&LU5$S~dHDOz!5`0^RpEVV1C<4W9d zBeB0jBqNs5=p@yMCWJ*r+fb(#GQ^i)tyVdl_OT6G;H6o z%QIv3JP{XNd@)0vix2+UhsX(Nq7L@~>KLDlA)bx=O%QmNa%SCK=LqRRAY#e6;l`H} zC;3#m2cN6^O(Br%_?7d)E!q@Ft~1w{!bAY*nEXyz;9R?p_w1Vd(1$*h1ekyS;1B*F zmFkgS+uT4`zeWcw=El(~U_4#`>U%9N0%Su4ynlhN1{49Mb7RRhukZN;jtWh$>1T}? zRxkMN-~R0sil9(*Q_%Xn3Y*9Ka{PYpy7OAziy&O#sSDF{E9cx4x(Z>h<9Hp9=TPow zQTBM>FWy}H&Y9!$<#C1Uy5Dn;?2CF_>b(Qh7$@Awj!q*zqfrk)9IHhkKYJ*;ny5!U zLMHV*_etnk)>@^*C+IK*5AP)&oDBT=snt;jPwA^5$p^FS$1lGwGQF&S@*T#es6v7~ zvPN|Ue6E=01k0;hsJFf{vi&FHd^Jg^Bb2uS98Wh8sZVe1Qux~D9}%k1Ruu33{GZ2H zPaluBTy;bI>P0&+AT-3+_B;{)@y#DmpOq}|YC`t_cx9B<>j#Xl#3Fl~8s&Y<*T-!4 z@z}m~N177BOE>iHeAiG$>xq4P!3e7Wv8_qYE}pj%N(!7kUkkmI#kTi85MO=E1M#w3 zcE@D@ZSnrM-4pL3X7u+TIDrA6G(P*Me;Ge{esA3V?>~+1o`?sZ$N0m2-u1|d_UQs*@7?vi^cQQZ7{z?o5L(c#>XQB_;*|v8Srfu<&|Myq%p6;*4TW-98P_pmDv@v852D~)R2ijXJWu93H&sO5z)UOy=$2L?=NE1ABYBQI$-jOsSYBPPu6N}_ zVRLP|=6z|!yzaW|()yR@xvwwd@1-->uFufMAp%%=x4f{h=H1t8N-wT^&mm0PRS4m-dTQnoZ)SYP#TUPX;@HDj5Bd<+W%2Txu8k%ZrZ;)Ivx5^7Q^y3ZqBwh= zpl)w)2!Z6u1*}@=WO_0Sk1^2Q^O@-@L(#qGdqI-c)*>`NyGR z!6UeRWz^Z?vUvQlC*$(V&_WU7XUY8Dx^45%gjHc7xV>Qa2}u`aL~#;1K==8 zV-}0R^e7tPi_E+dO<9E^10$TJgGxDxdDFP0GFXi?&uP)kaD3Gg1Q^!X39M|E*|N-4 zRe4p4W6m?L)40mA6X>2Ss5tUuW_+%8fQYvi;M2XTg`cvxL5<8o{Vs%t%X>P_Uft_LY zJQmO!uZrG7bmZuKAfE5KCT_ZXOFVVzeB875bX@n6TwF_n-2P7DiLx!Rl&&>%IVxcQ zIE}ZRM_}~>ILpd#6=PMdB$KwjwlzMx=TKa|>XLZ#E!znt*cQc4=YOeyz?X63n3EY z#6K@x)=brgJJBA8;+E^K0HCgmgVbZLuOi`u_Zh%uj(UehjNwvT^W`X!y~O27yIJl} zx*5iG*wr;a?OQYOwSK{XumZY1W(Yqy1HD)mx|}Y3r@K0%=lm+@7beR3A3#y9ou?II z1%e+1aqtY_yPD(-c!6|ZC4)g(8bI-^r!{Iix3wKv+Zo&V5`%YU=q&E@8i17!xorH) zC;ugW=L5eTpZvt92uXNt0yxKxo*)Js0gvU!vSWh}c!?z;}9bInj+@|W*;I~@>T7O%bam5gf(uKrgL zuCScix0l7Ek3R}u#*O-ttKz$m?gXSA zcL6+l9*-#qP`~$huc=&7AZq>9NK-h*>wAn~Sa9q93T{Dy`*>Yx#m#lKc#}4T%^FDN zQTS(wQ&m~6rbf_GiLr~K)d&YXDlw~ZgJsYG^MEO`reBqXt!+WrN5^iUu6hlXXhA=hQK1}Ad zB&2e(juKdx5Sx0mkGRA#=ncM`J6W@76lPRjVx{D9?qq>#acW(bJNTMvdB<9fkrZXz?+U8 zIT4%IW9T_{bn&#|O|TT?5KTppTky~~eQqNDnwqZfeia6YsSBgz$np5<%J%s6Ki?Oh zJojY0=gn=gz3qnh;k|wFJQKBYRayMbpZ;!q^rL@6SmRR=50z%XDc}CH&&O+MyZk%v zd_{ctqo0Z^$bYFCKFGDGQGAYMGMgz;eE^(E!2pzXj1sd`jm%wLeEJ=qjO(Xr;>~~b z#%S4IP8YLP>`Py43N^ZoFg*@yN&( z!sg1mAHi(WhxK(So!EGAlS}A?c`C}cE{WVdl;+!t!EZkx4TT`Hf%P(h0SDPJH3q>F zN>R!j?|-&8cCK9ZbMvNLH-=Rp>Du(YYuin_5HCr)(vmbF&T?&goa_G!U-&|zAwzMb z0lglsZxu(+>H7D*hQk7ePkho!4w{ZzqiD(WK}Z7UX7WI(e!FL-!Ya zdaUPnEE*3TtKXY9B_5Oi2!y3SuPME`kMt+)IwqB1?@er}HCVdM`cEG%B2N;>S_kM^ z3YdFx-`+Gi4!Q(ES6|-*gCrIro58)cJxz=QYJnM_?KzK^n^;*&YdN7FV+N}M`^Qh7 z0O0blVF=6H+7}Qu-Hja7xxOK8&TcQG>82-er#R_V)wQ@R&!$11J>Q#d*qhUJq(!5R z;P>wCPAq^61$9SpLHf{0JBqDn8V^7G2wi>_G-_KdYVkQsjNpooR_#V08ixv zmJKYKnL0|$5L-0~NI_>>JZ+I#N6)O{xAP1+I}B~^|CAC zAHKOK9v-1y<=%?8it<>!XC`9Li!r1%F!?43b}4Hv1CX9Xp_$;>=cw~He~f!#d=DR@ z)6A7?A;!A6pYAS~VWG{l_J%8HWefM-!4c8QKD28dzh zhS*k6`e+)hdJe!mN!;?9g*^|D&991Vv~9kBFK3S_QqA8NerINsRD37xpVI#%(6JVXet1r?Cb$K}*GDB-mtF z>)fxl$l^SVsq++G7L;BXjLfrw@k(b!L~YDcBXMSACNZgU)|$j(e9Qf` zNI&?%g9{#=4eL`(mkPHpW4ljMdP>*3*3@Fwt$fXSkatb+{N+E+{VYJh^R{o;oWgV5 z&wDpiCl63}lR@u4iNHW;o$5M83^qc{P%116)3`qEo|eON;<>c={q%8{@ye{rxz3`efXA-OJjX5p_kQN%t@R)d|Fk6G=#P3Yb za-4>-{Ka4VMFNuwB@2`57SzgZX)Ueih6-rC_52FB-~HX+O~5s+HRei-kHFGr6 zE_9J9D_kc&PrviEcyk>|=Lx{FBvtt4*xxX&XP$eW@h({Ny@q2nN%cIfg0(<-oe~yw z3pp8s@GTf?l5@5KZ)oPbK4qzf251s*kn3po@@4TFJdKltnAH-~X`S{AmPKN8QaMMP z%h(!qoH5zSZA&>oy$(92u4ze)F^trfrcL~8C5c1GtubU!b9r67x_y1zfmdN!6<`$h zHbof2jNw?UN9TW<^IB$Z7=Chob^zsta+N4+dJ@L*F3jSYT9_Nw8K7EOrdBpM*iSg2 z&kugGXghkeKN^;ySdk=!008t4#(UrO2l3S%8{?g?y)=G(4NBl~!aYd#eTa2-roSUD z+p;+}U$KiAZ{!GW_GV<_-orcM```R&tXOs-&-PSWvtu-AXFZ7XjaHgCl4?M3n3*hvThmL=aJ zXNgfQR#{Q8r`*%Mlpv(!)#1av@yr1{#V1SSU-#glt{jL9FIpD2T#uYtL1{XwMo_#x zhLE-Ol#4vpNpqVs<#EvxH0idPINA*_Lt&W0l5Tigz8H@j_-csoxh&T5K{}T%-ds1X zOV^}xEO>O@eJ^bkfS=z>Bl0QNwd>cHW#gn7!DTz3Qvj^ODX5e_JSKU~Sc5)yw*vq4 zubXSx>$`bv_g9&|Vw9?#=g9kaCV*aW&B z@3peJU7f_O(n<~jtzeKfw1YE9T0yUC=+vo`EMSX# zXK`g=>PJI6O$PQdEP1wnl*!1<)?BbI#XIOCvM~CSl>Tsl3W3ox=hOQxtf>yp+GYxB zk@X-9SYkT|(9seAou;iCM$KHM*j#T?%aqqzyY_;_Y|J{|zyDw=HhmU;s!8x)r!TIS>#>iMl(l^#xZ z3IRrZAoWi0=wlhvLZ?#^H+DG|OpqB#TQp|?kXb)9!$Pe`aL)oFEyFaAwJQ~Y#!WH9 z!v!r6Z;EybW19p_=ZWpChM7&w8JfWYALBb1hX5&Gf!hg-SRQ6Hf09gB<|c#C$pb=W zSui;SVGdVjriyMXIkfT$I!+<@OJJl~7W^~|dLA(6!e(_v5th{=T(2{LqI?}14-Wn|sY3ZzL?nn82zgP}Wi zf=kKX1_0qMnUS%tM2l+Xell1Ku{g{hKO0ls6pUX*XvvM2(#x9iUGsqdO74w}|H{=% zW9iz9;@t6L@yJ8R=bd!EK8VxWuPoyhc%J+3Vi2^l?A;JZ_Bv6 zFJszVD}puGhe8>jv$irWXl;sTk9Dvwp#THM7_$r;m%t*qGlrgI; z%Pa*ueF*TPlqUcHfQfpIQo?Bjo#~l#-ah!z6tVqGUE)7e#7k>|kQWKW#;}mpk^JWv zCJCD`jcvE>zkIv-hK3Z zC!YM`ORl2n#G!Zw@VAK=;nO6P9XtF2;DwTO2nFYQWh>>j9^Xp{h2;ow*4EyfYO_Hdv3WO zOXc|T8VaUwfBV~M?wn(5yn1d0p7W#3DF`Qpm(R|*)-vw>_!4A0-wI8Wz67Oyc0c#` zd~W{rnvT(zn;=%Js}?A~^Lm19k5yp$a%~9U6^`!bZ=S1g-gF}VaotESHrSCTDvv}w z#mw}%uZyy-ZY+E7m$SHMYf*ZTOLKUMQVBXdL57G3$;~yX!m#oE;|Jp~GGg13 zcK8D^R19%|do007LO>35MYsvc#NVAghLsQ)N2q}(uoknk=y)^AFW7_61qi@Av;tZ= z2kTMrQH!GP+z5bd`91+CbzWD{)sI6Hc;{3<+otBB!G5Z-RASAfGg&6H6#m~Hdk%HP z6MxVhe}3`mc+ z_>CnO$Jd7*j_qrgQZ)eY)?hQP8j=WUTvA+td_s9ea^w9$F0wX?uAyrnIV>-IV&!`gHm%~3Y2!bpYplm-Zul-!!2Ldf6$)92!iG)~B{-*jU>_P)Tp z!el3qoeS;~;z03co}VIK8!uZo7-{k5oVp%echZXM*Y)grk(asFr42v3mR!fuub%~x z9E9cqT6^J0BsN)aczTGJ#{y#y-Dm&UKvC?i9qqaLckNIiUJ5$7rH^*qiAO%yqd9K zXr--3csRIPtPRU4S0j^X11S5Q09rSk=WtLKyVe3CbMmHSc4nk`W16K$M~}n7O=Ot`oV+GrULA%$v&J1I2V(|n z<*jl6^GT8`@-QCEO+-Nun>9e?0Z@hUxD(dZgD9=vTFU*Y;nxtCNy-!$5(WX-DW)!L z35;T{dl0w!Kx7&bcz{U1%fm2d&ESz!5q3~E$s$Jk7I>=NYYm>~mEqaqh)7wFGnA;B z=i1hxOZ8-VJ|&cu0<+O48|DmHp2I3TNwMra;SJ@DRk-NU9A~({<6YFJB~*chHp4X* zZ&M^Ilmk*N!G+pPWeDy8#%o>I3BXY06hL|$tLr3|mJHf1y{L=p2q)Q&2ETCyNdpk{ z_6vwHWDL(j%qysei#s$!Lc=+VvTNQ6;T}_HKJ&l*#6QNymu$m*UYFdlt5>ZAd}3+k-W9Hc09X~n zNx-r6>MGCUVpsI$pow{arB>H+toUOHuxS(=uOq{lWggRC0PwSqJriI4$M40j-gE;o za07AmC6~uz2cC$p{nvL%Fbph#r?F51YO$)SXtLZApAe7>BlpDiw(z&o^&#M3cRMYXC z8|j^jxYyuPZE2!?_Ict_;f?YZX-coPWRki=%b2Rm-N65p|kXPg5x<1F#bF+SSN^H^_ z#68s**2DZ%^Bk>5thdndlt3@pN=h-J^wc7MuO@_V?%DmchF!{y!DsNC%mIpLp;fy} zYUi|BjY>*$3(Xt4k(Vf$oweE6CJXVlpwB=E*Xd8`p1QRV~PyQm$J7NneQ2p& zyp7}4sG#oZP|plCv)3ZGsVIW|CR5&od>kbyd@%mHAh1`;6WFy3@fS9hj~ z&(M1-a&J{H3JP*)Y;AcgC*k(ymJPJSJ{CW?^WM1Z|NaIF0t}10sz8QQ+lNWT#n zB%VT>7flcKU=(QsBdx^sPj#c!44&GurBt7(rZZYETQXvcZ5>9tHI*ab0%G>cwK} zU^j2wg5au649b#L1);LCtrY@CI3iFdbwMy`Rw$T*QY1RHIVan57@wg~b+Ua(GE3vx zTH63N+|)3ZRg;Z8My$qg)Im2ViDi2$VnY_zUsqLqCiq zm+in>u`HfOLD@mMr^_}{?78cFJbZ3CE?GhW>@h4p7VbtfHeS)9JH#fI%+2Qq5EbU0}Rtdpolemcy2g)5Fl2A*wVg(Gc9aIl%vE?PZsH{*;Ve@0G zs|DBpAmC#L;o?!~;;aQd zxIdj3wanV{6_}h1&(E{aw~Sx#DNhmjd3~9tVFC&0J09q;smZL@5-g4n(^!e2DIM* z3qX;2#!o+qK%oN0s#cO4>Ed_t1RWF!x5BbAP7Hi4G02YH`S?G-_J*I$o5IWabiDFk zg_}Lgv&qnKy0!xdF$LM<0nyGc#^WJ~|{VA(o-fhh6YhLr31Wv#I{qHBsu3%GZ zt><{vt6uf97(9hj!Bwb$^;!8+K>6~$^C{SKEDB74uk$YWRd6a3+|O}%KG&P~nB` zpZhZF+Uh-cJh%sWg5q22cZ$0O%uYgQmWZ<@bS;XWE!VB9F1?tvXveu~6;3>R*JGG@ zQ#sZ^EVASM7?9wb(}b~1!87Nfqe=cwvX*kl2orOMu;h(W<>UnG=n~Gq4NGE{nzF;p z;ZQ#Yga*Joxf4h5q?Vvm4WLL8Yi5iYZyR{1)C}%v$S;0Q!;V9`#d#V1v?c{4}aXTYgOEO+qH4SE3Sz4wcO`U zIu7nV6kEUhqqwNKEixymMNFLeII{7Ed{aC$(na%`nb-`l?*_Mw6KZyHv@@De3icm7 z6gO9`iOQG4zVlRDD6hfT!+M&=Kr;%MqG3TPN!k^7B2kHn?m%|U=+U5}(j3-EEUi|m zv74m^4a2_{5-5?^$jy&_>c{cB>$gyQ7K1`pCjOK>k`fGDS=LD&xm=4pFC$ic8l%tp zX5=n1>z7`->u2+3?0CV7>AH2Tx@H#)ie-sMx>hwBxNfB>l~0f9z~Zlx|w((XqM}j`O|e^0U`{N3;UuJF0=o5vUb#yfufBmDr^60)t0XlLnO1z@spZNI5o(#h~5oOmniDbBL z4U1cg>jcbTDfd)P;!+Qbf5#5m?=g`wEUgQc_>no@-OzTkcm=Z(snP+kB z+x5&YS2GCJDO}_80OEPFA!o1_&%q!nNzN$)U?L7NfWk0$quKH`b{Z08nf!;3!EKm@#uCi2U*U-}1A0`}1$yrx}fF z3D5!N7SKbp%mWfjuvE-10}EnREuss_EU}^NLHsU4pRr{T>eF1O0wqDqS^0*QRAOkr zn#sN6-nruRTpT6N&$_iWBr)uthmiN&2cy6}OTX|6ECw?O7&jNW07Wpy>OkYIiY!$G zvJlvOH(EN@-4$=SES^7%3m1U+h7HT(YKrE61xve6dL>L7<7={FRWp}8GgO*@xoOQ1 zs509rw$ug+h>vs)7ts*(;=HSf*v@kfP-&vna^hR9%E3`l%{2wFN#9H{S6-fI@4g;8mV2VAbO3^HOLy2hxv1 zNnz;s*5lP;Di77-<8QtcFg8F?7-?8gfGIE)Y#JHtVr2r!zx~_4r6exhmr`Pw{DJK+y1tI6LDddd5?k7Oqy?b{GKUfS_ z1=t>^rOG)FOnXj`cXJ->Bv#n^2F@(-W%v^;o>i1#%{In^Ki!K9^?r;qZD|g@FJ+9O zY*TpYoL8So8Abx{N28H)k4s~jr6?ABUWzqgQy25p^k}?~l7W}vwKIJx*bP$%)^KEq72~G=|X8~yYBi3s`D(tVAO>5^c)_YktwQ=5X(9@Iv2;u zqL)ZYkzWr@QD?fUo`FCs7)n&uRV3BUO}MsR`V^qguox9K%l$RLtGYS?h^%cru}o1? z&ZJ@ItqR^hhzxnxyIx(%Yl4WX*51DjFh{$K5|Y9v^)B zjX#?=LwB5G*SJcMbWq?^uGzx+F92G3m;0&gNw?CB>rJ{S(6swXFVe4T-&X-ddSUnV zdeVvec?~y@cR#=LIeT1z?#zGk+FnnuxyQS&H_B{n7RjAD;Li0S|<^;AK?BrMlmHWylIy%%& zo02<6<|V`OoVs^($+Y3RKSd0nH|4b_0lbDbRG~S`jGS~C$BENuSS<|{f8R(KpPtnJ z-A-Qx>#ht&z+7y?P6hQcY47-R8{DO`jj90WNyGxM%+buCrfzA>(*u4E>**{Dw`2v! zU|G}JWztd}3#V~}c|h(ot?dMCc|sJ-`j_xc%9;R_BSBLLfWTAZrmmtf0V_&@z3fwB z0H8&UIKx7xk{8FrPzn04AS9y2uPY}csUXU-LoCex_5rQ!% z$OXI@=QxihYK`4tT(=Jj5eU z5!<9lNn(Y;qSwK2WI7Owma<{ugc(y*qJW+1jptYw?P%;zA3G8c9371tFQmQeOV`Ig zeD|lZjM|&zNk?BX0B|%w1RjOVN2d0KtI z^W|{e%Al=C;B_5Kp8a)?8{3;lA=a8*4i9o0WInbNMq)@%FCMOzBYY8k<(dz2Ey*9K;%Z>l=P8+OTdJ(xpJMz44w$9*ebG zR>oW2_SX3DAN~>NfDhxfng+Pcz(){~sf?CmXXetF3ja8Eg^ysQ^UEoC=CDcK)WDvCvLe@ag*Tx{g6> zuJ66B=ae^lteMgBc$Eb~vLSC;f_*Lv&lcXwGb^kK|N1ICQ_rJ3@UO`%uYdjPQ}Yb( zslB~D88fuVDla^z=ThcKACAv+x$oj_7=V(c;s;tARylafi)&~vF~_zZPpT}_ZP`LS zXdYh5TAl*9Ou{Q?0huirDu!4`9j8ttS}Vc0P!7(h!>jYqlTWjh>rOF-DaNW7z(zQE3?rkp)3NW-N8%l>xFM(nP+GAZ4<%N3_)X;nE8>oCKf>>4kZS{6 zqAZ?z+3REbOKM}N<9uu&akYx|J2E&C{p2;g{5W0Y;P(kN4Vs0PuZTb%894|EUK1&>I^Lk=s+cy*B-cMU}+S5}q3(FJF zVp-HJSx+*x7FUchSXT$B1>H~$|6-o3^GbRiNqPDB9Cdj!ge2%GG{&|FWn`viChCf* zEHF<~0AjJq4Io~$6=+dqOxlz7-NaZbq0)!z)n`?pXL*_XYZ>*~x`yTHg>%U-lPuww zf`!y$r2#k3SJ*tp^A+~TQy@vaF9$$X%<~g&v-fd+FZ%#KW${*@y;qgdDV5TdGSM5AWhbc}}hQPN^cX#)h z#2^nJe>f4i$7gvEt5>$7tu;ch3#i`2j4hit<7S|Y1)851eBsEkbhGFC2GZahQ2Pbz zqM4+m4I4K^2j*_O)U+_HL_;u~bU~J;Byq@}bB&^AN7jFWMDPnlbuq=^( zMA;zP>-OOK#fm&L1pF9+m@E0)t6-|6ED8^q$u=~i3J@@k2C5*c!~$aT0YT%;u%);V znh5@4vJFQO9y#4GEbVhZ4!8v?wtuw-Id z3bfL4bCIJ=3sM#%Hq4FBHXF!rkF%h7*LVdM^s&$WFy?w$+zo30ybuM}hbcN)jXVPQ z#TqfieP$_LCRokswMbUb|CzeZ zo{spXSG}C+oR0e*x`(=>{ghs6#&y<9R&N*a$1oD^{i){B_Wxbvtf5 zdY7L$l^Bl}RjYQ$08BQ~%yYhv>}Eid7DAbmbyJN6)oNK_egYyB@}^k7GRHZNcRl&+ z1q-X&mlH!hPhs#Cl+mLc-8`B#mfd>dWs3>7n1KeKdFEie{*A8#m@V|umLbVVhpCrZ zS&#CB;df~>+03jn!)@Mh+Z*C158Y2v3teGQ$aJgead1q=EHtzBqYeA@0ADQiyY!)Y!bA#hdr)T=;DLTL9$Vs~}d;=rx>2a4EnQtZHS}_+X_0L8o!Df?6BicunWa-&Jf1LeFbCZ^p#>{CrLdXV;4FwfdSl zt)O&YpNVVIXQmOvzsBlXFWAks?wawQJg+aWTM&R=!((j3V3P&EH#9nVF^VS&_DFS_Tmsw1zd9D@&v82j$8NO==dp^vLxf5VVzKi& zem~8A$_ExA_W&@(8i{HV7Xn_Fuj=bQG~|fCr#PP=tTZh&;-F6 zPb6B_!nv?J>y|+@7Ebpb2>IkJ}t?}&B`{Pu{=~PZD!Xl zDW`N+Ee4RG$>)(X&^G*j9-g{w#|je73FCwPH|``{>jikp#m&(;M7!9IiilsSi_LrR z!o2eGD1Pke$e+WyJ41yU@XKc8`$%_5{Q8^zA)Y(^#b~ednE#9O-d6R2c+H~CrVx*_2qY7OWO0Vzxlo}7LRw!E(7>YqwQ~AyE^@N z1SYd-+m@saPh+ik;$W84$d={`;szBt#iIafQ74iHF zM^ZHdZ}@Rsoav%~dI#CuxKKD-=AS`G?LV+Dl|@;$yfq$15NlyQO=0dV7DWZGmJYSK z=bw9;ma)X9K&Z25kPXDwsL`J|dYl_Z^yF$kKqxKk=>6)E>YF5WB~R8Rcm$g$qY)Kl!7u~b%42%m*m z(LnEL;!H065WEDePXS=G=9R!q#)uEj z(WAMPFa;OOBq1Ed>zXmQjwY*a13=1_wYpAc(A=kSr({SJGg+>@60WgmE20#N?&=H- z(DtpfSRJ&sW(eRf#g&rLg226&&|-FmdZ43J7|8WtMMLoC_u)?JC2@+5B$?${kVYFK z-vkIdNdSH^iGBpYX9ejbDCgOZ@HS)p7N=r{X8Q4Y8vECPNH! zSJ_hHSqD+7AU5vH^q3O;+MqJYT!vo?Jxp-E3d1y}B}C?(T~e7Hl!q!9yh$Kc5N5?9 zCgAjK*}8!aZN14lX-ri;g~_L3aASmaRKeISZDx(dX)N4pF4#yf`3LbD)Wwdio8n9t zby^9PVMJIs1X-+e7>i)kn9e*Pt`g>D_==3n4r|tLt!1rA!`3n#L5Pk5mQy?z>ziv;p zF>^d06%p)hi62IUz>tGdtwLCrw5Gc@ zeJ$R!vyY=7`6vV(qgeH|UQV;$Joj70@{q}ToD5dRDx;JU`niZwZ@!<>D#bkL!c`d9 zZBX|wgG#jI@m4dK#L_atH3Y_`gryW?(UCnnW*ajcc!4GxoL8aJhO#_|^04=*1B8>{ z)ncs2Xd7!HB<>o32LOMmE`HW7$2P*-W>BnEcE?aw>uV9Dlv`Vig=-u-`sNot6PLd9 zIubE%P8sjL!{<_{5q2rc$MwXz_3PuUzxIw4-*(6C-$ij5Bg_k41@AJfVDTo8R@gZ1 zLYRQxDfkKkL_w%EO<-zAEPpdGLo201$Z}a*w{A_s%Q;ohDzp@q@_x_l_kvUTtJYNo zuhtn22D^9fPK_%}60=!>0@k@V(aY;BC<^5X%o>Vd?4H8cFfd!sdR#%Uc`sheO?jgr zbZz@xLFj7fRjzoSt^>ic*K-{xfEDzG?|t4r!-Bvp%$;>uxfB+*7Q7e4rq^ep4;npl z7P=!WY?O@i6opS$KhK>*;T?lEG)`pn((&las3$(bf-Pl!EN^IR^LUo^DnKP%EQ5FH z&E@N&dx{(ncvcJ9@DpV-F+!K9I*P+u|9dP4UzPC?k2w#GYZEBv_Onzun5;M(y^Vu$ zWqwWUCx-JlNxwxT6%Es1VGeIxj*^n+w8TzQ`&N(JG@!Kv4@i#0K3ww7sU_oxWZ+(X zhPcC7??up4CK)WC;Ykb?#NHa7R!idLd0hTJH=mF5I>nk>yv>&22FF4>4tUIAwapXv zid100&>r5YEXlFJLY^JgUii44Ar)#=2oyZ-iON2W=g8DACkJALIAy94Ol7GeL{jh< ze)ZzW9YEGzT^+!cs6BixCf~X-rXRrDi;-jg0MB6)3Uq&Glw;u?AY`Hu1677(uL_=X z3(u{OxZvhxAB^0CzZK)xyeg_1Uxt!!H5@e?Ez>8U`=_z`A^*L?ukrXU-lRR(qCCuXD^2;GjR2$xz2JIAq!lrn^DpQttXt{A=c!>& znsuF9VdR4!{9vNTFMjch$&yU4gSns~g4|Z2h@es1^8;gh?4f!-pqx z9U?Al*N&a>jjw$@JtQBpF>af%0O)?*yLTVw&0^(Um%x%Z73}ql<3-ZUcH-;q-Z3Rgf-Gj|Ztl!r44$Q+FT|C@#W6+&f;?Jt z2?AgcKmnyCYifN}BS}HMG2udCELJs`rBJ-@^Mho#Zd{&Rh^2%C6mzUKSj&e2liWw1 z_~jCq_Z<7rps2X0GXSkhtim%|f&mc~0N(i?;(%~x<>zn-u|A4c6T?>n7~=U(=&@KY@Nrl8Mr&WQ|`S3@5R4(6H6qG@V{&M}rO+_9t?P=#ilJB?+4ZZ-Mt zA-Z)n(7_9))`vw6tu#+u6eyI0Ijm)zcaAbvn1Eq=CXXtR_ID_Vt{X9$IX z{W7?tRfM!C=K;7`m~9bEX9n!U`X)0R12T@CUfI>*DGwFUJ)* zKy78L1OP4z@cTH7dljHoYejnTB7N+aG-SSOT+)(gPV1cleSv9d7{M|E<1!@1x|Y+# zNmrBLC;j!F>qb#M9_!cCQXXktJWcFyDT>%2F?7>d1ohzPF1DoIEw8)w^UxDzb&3+K zZA08QCZhy?oIe@4H7sjz+p5G_6+(}TiB%@0SSrY^lyC;a6lAzEdFMdhQ~*MPVaL~q z;%zLog2VY6B^d)ENg&T>WWyABhwC8EJ|?!xFJ;VwxJdo25gL2}<$h=c*FMj;7&=rD zFrGGpQYKIuiBa0X4yO04)MRBFh1RMoi5=&v`CzJl{p`2_{s zv3t$OAKepse)>q_jUW2(AIBZH-yY8&I+XZuK~NOt&^R@PqAx+GYgXV<;P)nZ$SW0m zu2o}L1%QG~UkhOqRq>5)d?Nurd9lD&U~00KV|ITH6UrB@rCNXd-Ru1Q-~WAFcinYq zIJ)<}mU6>&q%ib&$LKRvSo>aH<@j#B_11KKWsx-~edg}xCJ0qYbIggiy(s(?e9p6S z%YB?P?>Rkpo}2Si00k1<2C0oqB#CO z3;|xxwd9rrGCU&Bdb8Bt3?Oitwy`;^aYd|)dSp#M>!02(v6d2oPtw?=2tGDjgbNy3 zkS)bpU4grC-YT&6N(*Jmo!B~JVYSM81fWGE?*?G@vtdv8u#m@u z)zz&*0f0|p_=x%PSc`FM3kIb*VodWGbBX}F(F(o*{8k`d2Wy$v9>5n(nclum>^T3|S zEpMcn5cv#4$PU(##)cxotj4M9+raa!V;xswVP3qsp5#5!w{z-xGW62*X2_-Va?wQ> zVbJ(V>dxo-bYGu|>&@pSX!RV19GGOO7vgq!gU89k++X@hYZsa2Fwf#$ih~*R^hYfDeUiej>pY&We0IBjH3w+bI}JM zd4vT*(m_iTZCSfgL1b^by}dokh?UfRy>{cqI0>Q3T&qbU5U6RjIC|t{3f$Mt!W(x_M~;oD4scdB;Al&w+q|>$&h4%W&kSG%v_$L*t5*Zcq<=dC-Gsk2##e-8WY3m zBz(b22~LpitQG*cZmNEm=7|&Csho?9Pz#F8)ctzN_EZoz6QAq&F4=V<0E1S1+_T+8 z#*9(HTA&r-IT-!otr#XW1tTps9*Ej;_!{~wRf8g|Nmd!C z#oaMBj`fEBDmFAHCYK{lc9K^POJJUdnH`{93J-k(xBfiJ0QxQQk_cMvH-oiy4#B&8 z#ZrpSQ_2QK)?)hAgb@fDc^Hr~p%C?S`WPT-2}V#$OqGkJgr)%TEND5hSxW%rWw?xfZi6XXzZU;8j7Q+XJyF%57zQ|R(izt(g160rw#y*? z*#Tl%0n2mD9n(PK9vWzV88143G_X+NWi!MUXEL~vU^p|}S3Th>)ZK;=k3@ZW9VMwI zC8;ExIVzZP=ab0W-;J)60knUXUuIRmjRGR4@C2gzl;lr_#^nXxnS^*RL_dkW} zY%X4Y?KKecJTx&BUDOWD;>x$7g-p(JHg>wp^Sd=@70%7jm6l0ezXAlAiUPt)AjL2S z0lDKhtU$)%Z?di}xN4hh$x25zj}b>U0&0hco{cq|R_QT|fw4ZASXp%739V}+3q;maf<6ukpORjm5qQL%opAsJT@Nd`5K!SlD;OWWHJJ;UIssy%g#~-ra8`^ zIvHR8;^*SZmtIW+ngzf&CV&En4x{iq0zW@-q64LUb8OqbJvAiQOKF?Mn@tG>egaH+ zy=%nJ3P#t5yjq|l;8ZaAn~7ZBr^3wIP}betRL1o zovU0s(vhKcqdbfHMr)BT05Y$G^9t_(3BRI46hsp5QTB1IQZt)_q5bK&E=#oxLhlCH zr5*#w$n;>8kF!Q*NJNB>$$^YbEh9;`nBV0+74S$E{FU=nSPZA*EM=(<0Q^oc9~}VK zEU^yt$gfvtm&KZu%c316b|s#jOmThu%}aJQGc3k<;%0sf&Ij&g0eonHa!$wK z{ln6SGEw-XuSC1&FT#%D-D4;GMw0W-JBtaSY9g_$7nyF znKv%z!-G|G^UQ}+k`lnV&>9W@%qFOH6MGbD5dT#F@m})mF&j8s$0De32ppJREY+z{|nzyVFy2ozx|!h#h*N)8=Vl9 zcIp^ok$nQC{twq*5+@$rhZhzZk2OAzj5h?5+J<-s;Umb==_!m$d}l(~;?1?_I+Y%z z0oSP*Nrh4+(++qla@J#&KJ9dO=FFM2ubyf#l{9Qv&->s1{-My*9H1j*2v2|w{#)hxrW@&V+-dmobMN}!mVtsCnJimkpS+fS_LjweE#AJ+%F1?s|A6%g@wW{hW z3Ui;2_3P*%j5W-zL9-B|Zr1^?=|z`b63-lZJ|-!weuiVp0Xil>EZ)j$ zu&N;Frs+VHtt6oX;wxrsT5ZOOO{*HCSpcAPq8tFGYX$2KN;H;MvNi!JX6eshwKgHE z1TbM{X`V7jCBz@i0xG6BwuqR|x|#;U8DM1GEx08r(9*Ox^)d&!2HZ&))pBHnPXZpQ ziWka#&A^NVP+0(LIhn{qJzWHq6K;UzZkWZ3iHCSQh=tazQ|A%VwBnqp)a}i<2q`Gt zx)vRtGZ4o*Z>4}D+@Opz!~MEAW?XO`L$Q=PsJ(P`NtzTOZ+dA>>PbC;MYoL7P%_SO z+*6CUlsF~hGgQFXR@|^9iOKRAU}3DF49W~lwcz}D05uF(S8z`7#`|(=$;#MsdFB^J zLm+BYt)fQb>3tm99K(Q#OdBq|Be;XH047ugvl^w?b}iC2MyK@!=H5eM5fjKvX#{MCcq@t*B1v3l)>_|(fO4fVy2xS*vm zHq;Sc1lZM8ty^0G#cibL22V@ELrbiss-zP)=hA(W^_9;8dVjJ6mxR1{({(=~^JOiY zfv&}A$^c_M8ti;Oy0)GuNxb;_Yal!nLpX!R|q0dRcXG2q6Vs0i8S_hXX0_GW^ zj>03j7$9CVH@pznDKl}bGAgZ=(uK$QXk7EU>`PhC+b`T1*Wa`|xo{1|NLDT^4=Yx* zAi!An2$?#-?Dzn-aPIXi4N6W@54H}MqV)#9^{sC)i0X75D=-+}t)a{l9JNSGE%hMJ17bDymp91cfj? z8|E=7snC{8zwk_)Um2?N@AL7!4A<|S4_{hhW$ezINodOesZCgF^hgPiw7^-&U4Wx7 z*0bcCYRxwOSZla^!U`p@t2lc6*w3!DbJy0m>6dOu)=Br@^Z0X#pN$Z&SI+qa1zNmS zD%1KAFhds&ddvV=R&l5YWZ4wr!F%qG_Kn+;CB=p=^YGo2gbB!$e?NWj0DOURa|kzM zMi*~BXL+9PeXrvtfD_>PoCU1Ti7($fe*#?rsUXiewYq@cJ7)#!rhwDW1w~1Br^h(Q zT8xa5^_&V(U+(+PcfK>pAK&|%;K=>GuChho=^FK13TvN%^Q{5Hu{e+Z?pB~H$K|;^ z*3I9Q4_d7JPLS?(6xjaecY!QV;fiDCd-o5%WAc~_j>C6{pak+pBEM5#JN28(MV^%Hs8#AQ{MT{J8x0_ zm%-VdMmAXOC-aqB+H1iV3T5%FlIFi6aAF}$I%U}eFNj48hS42xD=ST#4 zNqw;BS3Ys{UNZ3>IKD7U*pZ6BSPEe=;0?>TW@j%4rck<;xvD}*vvzu4J1Y1ttL(B@Ri#J>M%$RLCccqp5gfZUuzwKSueAT{l z|Cgb4WfmTTu@YN`qpe|fEip%##A*fN2WCg@*?)V?e(ygpkGTvv=bS-A)9@VDgjIz8 zQhStq&VwF4^uQx5V5lAXjhH7AQHsO3nv2fb0K3k)*p!`Qt_lYAMYV;*ax^Yg_tN;k z`s%CQj>kg}J>(XU0)c=K7%608J7@EH2xHdWo|j)xh5~yc5MotpwdXjLyR&9(w3^n$Aff$TyLU4P;owlH zJqP!*ia>6Q0n>~ngUTf}PHuJ6mJROX>fvw=!C@KG3J&lpjoj7i*IE@?z5@^z5l+cw z^mg~SmAga)RH+i?-$3KYoR1o!2X2!ZOLhR4E^BneQDxRW$rSD0vscK$5la!yXP@7J z`7QDq z5&$!b2_q?YNW^lcZ`hf?nQQO0cn2EeE1Lnx5HTiK)*B2MaR~roHJDbSA;YZ9=TW$l zSri!}7l@vMP)*6YGjYXDld@DeU%uoacz~}oT$?bfw-gh48ZaD1R3S|oxwyBT!w!BKJ3#{mi>0AY^__RLI$(9F16AxJO2$Ksqm*MFQ94Kw+ zNH%u94!On#utPk$cpJdjqkq#Td@rGLukmh^;o>>?l zWw*V<%8>7#K+%p?wQ@{{b)rP1?WC^0kbUgo!}bFJ;fAJi`^_z5_7#)@K73APR?LF7 za4QYo)1m`9NMJ<>(G}N1vf3J)YGVO>wYdifBF>VB4N>Q^WDpFlPtb2A5;Md?(8-zt zXtqD|ES!rxC*C6fbse@=)t@y1A7;ySn298U{Bt{iSD-|z;Q|Pf2EOBFu_BhtrdGlV za`7yaJF?5F1s=m3g2FZ>pf>^_ty|jQ#y&kCK*g3H?`u0>c5ElvX^^+Dm8~s|+hTSz z0P;mykqOzg9A}Ge$FsZKSQHW4v>8R4XP$vzHp7TVK~bDi>Z_}(!>+l0oBhZA57@u` z%RR_xE^&Y*$ygd19kL6~KiAH?@I2f3EFwy^$SXtSGg>(iJVA38{F$S!n8EQUPya40 zallO?7h{N)2y_?bYwL|ISK35`lj^5!vgc7iLk0AdToihPuUNBJ>XW zfu6-oa?CD?W8nk(`fS0ll}#fbiBQ3OQOHK&utres?PoVowxvO5&O?+_{N-6u2Jtc$ zq3H(Z62MhGGUxAXTFHQkSvh?e&p8N(!a0U~&9T6rW@~GTZTB2##?6(@_Cy!lZ~9zD z%m#p?#BRix5sgrNsXwV*^AVHKPDxc2bIAfHR)C3aheCD*eG;xJpA`it2Sb7dZz-aK zQi7XdN1=orhiT|a5?Nl+NO|E?U6B!a(~lXaDo1v=3Yx|HdDQ1Tb(^dC2pXEk)Yt`h zv=oEGdQcADAXlz1zV3P6;WpZcrMEgW4aB8 zNum?+B9uJg!p=#zAQ05o)u*(;Qa_Sdj{2*{mUch{9(67e0_|wXI*727oI?HZhd*@p z1uE~p`)&tdh4Vy*G~P7sHNMneMIY6^8jA{Q^Wazt6zQi<6;El2j;eebTcRJDkF@C2 zQHxB`8|CB2n%digQa?v39o_RkT`Tyb&paY|wR3CFaRf|qtmke%he6ltR;X=9+w7wA zFR=ZG4q6>6f5|q9+p5Y`0ktw}ZfbR&x7ykcxk}K=wxXiNT3ec&qL-9Mr0HHvr(N07 zYW)Mlw(ZKR9Wj6Wu_ql!En~uwy~rxIGrBquu!lRS57AEzvTnnA2WCXfq%8LAb32{l zfIdQ%q6)k8qKlBDeF`fFhg>5I^k{4F+u!;Y6TlLbT-Ie931tn5G04nKV72dsti>2v_V zNtC$4OiaZ!QhGuzsSg*`qu;hYIfQ+IK=**PdRWst3OZt9Q)8bij>*=Xgw zn2BqWiER3KubUL-SxuKL1(+gq9%JDl^IN&dX-<)cR=Xj9M`i-;$Er$XNfCPhEX=Y! zQbC!=;Yj5S$a(>$n7W1lj(l90G*H}{2h_w^jEIvEVO1X`Z8=bw=Q~RW@I6d_2*Yh- zkKR&f)u)yg+YDP%kqehwKK`XOu;kDp800cnWpY7nDFCZ6!KxS?AY(V5%4Jo?_DKRU z1sT)^uDdPZ2yGLmfN@sNA>@?C$v>~4k?SGqnhA<>*I#qF_0IuZ1)O2i=GD|$-Bp)b z?rM41nX=)2Kr!1wMHi!Nbn#XPS|zp-V$zohF}av6tZ4;AVFHf45_te0xS8F(^ETLa z3^Qeo_HZvd6YZV086}nf`MQLCt7os>(}iM19dea$NDz;9Tuwn)aWXX?a^MtbaOUHt zQG-oD!ntDv(2FZ0Fzbi|6M=@LL<)kzfk^68M5Gki&k6wHj$ON*-O`%6dh2Uzw@V;O z>boKkU48wyP&|$(Nd??X#Cez;1)|8<$*_wk3an}@shyOr0EQ-I5kp<8|EC}#`stp) zL=AmcGT{<8a3F^HBYU?wB9H>sfJ0~FmIa@HgWikrP5S0+eZZZk zowOycAPwp`eOce9pLTe}4VC9D)s?JiWWf%y>ny@W3zcS+iMW>?3Duv{l2a6gBIt$y z&gAr{v!y8!0TFO5szuDDeXe)HERdU;TC8b#EdT%jxC{jmcB#6%dI2j#aQhQB(A$o~ zh-$cYS&p%|u(BmR0}T`H9D#0b|H%_LIamd-W#>u2gEpIn6Rh@EJ8JP047w-ar^!d# z@`|VL)OR_~GIgUksw4F!)rsQjn-xzJlmNW0MOXDq@$|0hLD%|T)qwzx#0u0;ZoTzZ zr+A_`npb2uR_E;iT?M_P2~`ub@=%`>t=IOa%IM3Yv8MdRxX?tcpgfg_+E_>Z^p3tk z=X$Q~Rn1ibze-!>S3Bsadjic00`5x31ABLqKS_X(?EcCdR&hZ&GRH5FCc6g`rGg&G zp1DM$l%{q9)Yp`+$|2=wEqG(l1cm~15@rG8DokF}C{#rNX&c})?#>yrYHY0*LX$To zTC4z&fHZ4W$uN#mGEnuM= zD!}X4B(kpbuUt5(bL`9=9mKDFA9DzJbFu_I6&Na6`X%a?<BExI@qQh3)R>_6^wY{Ph#`XA+@|RWL;cQN#+P<6+g9{H$4FJv4YuY#3~S zWf7Qra$*ri4py$`=K!&J>;UG#gh|3(&S8RF*_x$C6u|}cQ7sBZdo)(mFIDeNO-*i* zCuK)56UDgDc>2N@zF^z7ZF37dIpEM-@!8LQ)*ZEDp*ECAfyS^O7Xq~Er|P4=-)p>R ztf}vwEa+VYpN7u$zQ&~=dwN%6S#d-cl()u(;^>~IDZ#Y-xldcydM|jb^GH6G`IBd# zcUw%Qa9Sp)*dzu1!9V_^U5G#O7k9tFgo2DKTq?OK9ARrk1ntTzue5L9`S&P}piM}^ z=Wf}`gw<*FY)^0pN##RF-;0ESxT8_L9@+4X{QjSR`*8)Jo3}Oi|;W32D zmN1iz(keo>X`-VSIVL8SmB@h}=yI~OqX@fa5EUtI#MUHSOc}18?8E&W-&W6LH;CME ziq-HKTvmE2^1Rr&Wh>qh==w4^lQkCV8b!ttE^lKc+tM->2G|{8WxTAC*+#Zrv+fvu z-DOxkI}Rm83cLxy=9=~jL11#=!lv-BB7mLjLqvivnFrv88Nfm+X*kKST3MY?cawu~ z)T!%{Zu`*ZZ?SLx!%-_*vBie5vzHrXk`~dY&ck7xX0Z6l43Yl4CJulu-w+;S@**j5 zt)%4}2Bbz<2hAc2JkfU0$%M%R*)WPSQbdB8fGiSRE$p7gP;U6Gr+e(arVDJY-0W|z zXti4(+-E!ctF3v72yJ#yrvZo&0I6s(Jw)^v`Q@z4spN>GP)?+q-9#mpf-~(!d~VS1 ze2ry~8q@*;Wh^>s>lXNNRYws+1zoG(E1nh@O)bq3E+&5_jv>j7(-$fbO;P_mcBGAT zQz(l~KuFo9XS-73Ir;Qe5y3KK%nINLiAyV2xcl~Ei3DKHh6f5pea<`6epC;lFN!Y!C2o@z z;hMlTO9^19-elrOabyxK%(DU}N;y!`Lc($FsIw$vy^y-mE{)O`S4#_fIk%9jWz~b~ zy6s4Z`zkpmKnlW{(plNk;Amw}7s_*;J(yF2Yev6j>IbNkCljWeGpH}hs*1Lvd)d7@ zdh{5ciZ(l7A&%S_?`cxfw+Dmr6`hyIEXk(IcB{Tu6Q19;7YA0~C;+MVRWGVDrKdU& z;8S~Qaux8?ef0^wr)LVxt#rgE7Kke#C zVl|4dzN>zs{;u?NRQYtzKXZxkM`aFvyT*z@m*T1nitnE*9etn5qx*WU_k%%TM_hF0 znUB4-A3yp8;Ex3pyI50`fL1`H(pH}mfTaYapY2mhKca;gi;p+}I1kGtG5XF3yJsmD zdAGB${$lHTI}C@hrKJ&hNyN;`*%Ak|N!cq2$jU>Hz_*2Dzg-|dD#{U+v33@fFd`(5 zFay&h2l`NoI7OP)Ld4VN9$1k8yLpmYn1yJwkiU{efI3RO33$%~@}vXe zP_*bJb;lq2wjeC!l>#p9lExEP2JSIJKLBYwmDSWc8QO`b+by!80mn<&rM~+`%lR-O zNIS5GgScM77;S)}R076J2rrOxxP_g_iNk>fL^0n?vFIfuWKUzZb>n(__{Hbg1ubVx z&DqVF-F7?N?7}tgux`X1yE3!3dE*BAUw{6XJ^VzM^>=krM=*@2gG>SKC`J&bH6yc8 ztF_g(8PwQvga=^#{^gvbgv(gKJ;p+yIJVMJiDr*EvYzT2(M|yc&H49_Jth` z)xE@9bkrEr_!Vf?Jpt0DrY1+fbQJSXG){_>ciwrYqa)(d>OEO4&=?XJmTbAsMbng? z(pG!>@t`pf4C=qZ;Kz>M)4Aw`&J{Fvl%E)$3L3`>!8Cn7x_`2?7suDN50Npno*`n zJLI;d#J#!jl8fO6W>?4({NH!rpxY)@MeABV;RUGM+7Gx1d`UwcTkZu2uah1``DQgra87t^8lf!2iqJ2BMRXy%tc-Wz$Q={9zZJ`u1g$qQ?q?=mI3V{Y`o1=ry_FE z!)z5o408~TNYS{ePiajvOWEuQlTJHZIEtq<;I4+zSd7C>(spSY&^pH!d1z@l6BlN? zI(scrTMigO^YmCBTPvi45M;5iWdrtI>7drj7O>1;A@{0sch3QUF)@-4XD5QJ>@3{N zp$QZqn8d}&m1(VdaB^cRDe&S2~w`eb2bkYL2(@r&(Kh-8TRz4=$K zw#NqG(lFo)pFf6^2qw8CvTB$iO5uniii}g7MMDZ3tc8dQNFx^7OaILh^(5jFSfFu( zD-vhXQ37WxTwzm)h%o(IeYDg%Ck`=)H?Xqn#?9fJ?b?@Tf4}=_d&kACcG=ouyYa<5 z`|h4G`$c3kV<^LEqSYh?l5rZP1t1S8M8OMmwGrpOwshIFb6i9XV1c7~IMEv9iwCU0 zt0ry9qaQkah^^Lxu1^dD24oL*-Ad$^#dV`CpFv3~mXFIrCId~jO0R$&0}%&-FcBdw z@I*v(E$adT@(PM8!lK~D7g8|-9OA+YzzSb$Tsh)G+h_`wC#{N#D%Z~yL4c_O(Vr+X z+SP!52Lu61%2#EO=+PyYor6#8?HIX#y$Qh1Ymo-nEW-4Zh-(4dAXz4up2UqQ3kj7| zV_QF&>p5`vfZhJ#+i@t=XMg-hU$mvmm%1`9{*%Y#F-_jA9G$p8E-aMHjnyc0(0uc!!xEo2A9sg_&LNo-@z&W_p= zl;;vN!?tzvN~^A4W{*Gqw6z`WvKqGK1T-a9pvAAiq7>#NI#EbJcxwB0TgF7z+S=-r zD+D$d_csAKl~bC?n&|!!#>M8%o1I*&xV0*yI`srOA^<4RU;uD{6>8rdNAA0WVTkRpH zg=DD3@K6YrQ)N+^^iw;loVur@zC~&2T0fOV-=I9i@zQhEn-)01AkiANzqn-+(5jv6 zlEhe?LG`iQJ8ab@HSQagp5&2z+LCJ*AOm{yK3m`{)I}>KS1LdTezZTl{7sCvBY4oN zfIG;}5F%Ei5&`Ii>xpb6%sQu_7!#LY<(E<~!F>a}eDl!0A{4zE(T7N9U|!(DyPm}+ zNXb&z9}crPp3h-t5IfS-6Z1C4cTdp2I|^oPZAG2Ez^?`lGG%3@&_ry0Z~ipr{y_yhE#Toz%cbQ*crbOjbI^*CFP7Iudw*1p<9&jzvwH1#U2C2SD`Mk5|z!jY<79 zz9oAq0IM;kek(B@wZUKg)n7T;Sc&OKY(TpedM@UJt|k7XcGXz$bWr(fOem=T`*H4W zEc&BD)q3taqQwgU}zKG?)O7d{c&8=|pSlO_B zcMkxuh-cz5Ni5)Rzw;fqGo`i!4w9T4JiFs*yY$kF`4DOIj@!CTtJ&(rR^4S6+0N&l zwHKay+7aPGlvSEmtwxz6;Ry2%2w&{*Q8+9ytFEYV+x@a@I1?R5gBNW(z~jmlD_rFb z4`q$@mSXSjrW;@HK)?_{OdO^%S1d?-;W@9cZu}mdqX#i9Sm=JR*I8Imz zkiyG6GEA9%ltAFuNg+z|INH*VAX_^|8SW>rDD{JNQ4v? zgCU<)xON#j8E?-EyaJkJ>P`Li>T9nCCo|!|3E#PUFWc+@R_uy)_4Xhm47Z*MZ4yp+ zOUv>T1W1HQWe_2dh=8A%H2I4t$VosYz*rzaoDn@=*32rN_cYnp1EgglN@G|Ht{N5_ zGqmH(bP|qei8Z!j5dmipt+iMsfDT31&r!I6*fB0<6;6JaUC3_B6Zg1< zCk@0-4}=;!kTfJm0ssI&07*naR8g@T2~s%Bqb|iUmP~j!4~{ute{b6!``j0P&nlNy z*e8GOcZ5zHU~w-k{F!9@ildf-%OW?r`VJAvWzd`i6Z$;gfN?N4&eH5a%+pS?^1(i( zI`4`460j7(<|ag48tGZitwbuMcq$^SP9@@;-8z@}K|bf~XpoL%$i;yWN6HiFeym8; z*CQf%h0UgY|Q$FWwBrkxQJ zX-08zB@QLjwqs-U{93J}J8RT@4*Rr|!IoRs+UyQ^H0mk$QYs< z)pl^tak%YpM3Et#LPSh9qSNR5g(T)0$fn-Tpje$99il*%-{a^YX@*K%B1)8b4 zhW=9@as(vHK+0F+TF!Dr-}2bLlI`sZIoV+Gf3i>qXzcHyJwnq~15;$Kbq$V^4#ITk zL!(^IY_fBdb`-QzLC11*D+e7AxlK>b_u4eOY}mfEe92#=I_;NNUTT@=>F12^1}r!1 zy?2i_-MqoVKf#@RFDB?VBFfT-GS?gn9~dN40Dy6}|05}!H1ORLwUI3I#;SUI3^~>E ziB3#hvPyutRg)OD5j<~xq^HyVPXT?<(NfqQ31pRvS?tmu!vI`tIXOm30#TtP^1nrx z2%MT1MxYN3cTg`ZZomo!%<)B4xLH1Mga)R$pmlQ7p46m=3*0zuBS#mqgc1xIYXXJ> zs~T(SlNwVJg%Jl3L<8q`n=+6Ts`o>1Fk(a7S-R? z|CNUyTN*bS3%cinA3Oe9aTWBwf}ZQ1K(U{9bWdYhLGgSXUF%%I^bF$|is#18{-UC+1-J!~#^6{VFc zrwHQassgL9v$%=Qs0xSx=Ge~x@S+qzC)3twL2-fW2%4y;;NZ+c0D?i=?2H%9D!>9 zZ-_BwS7b&@HcFp`PkGvF!P(g4Dj*31(rNitk~M%&l*xz?1HcKE+guS+)wDS5X||8$#VQZ5k>;m7RfaTW z3{w%>mJ-J@!6c%(km{IBwL}0;PWg)Ri5Smfl1s{M(b^W99~ib@fAFx~am#ruImYeJ z-m=*~^4;yW9q!AeEhTJOL4@do0|McISIOGy>l`Oj^-Z_X=StBmOAO$e(2v=0arL3n z`>?#Z*~y?k^5_$+>M_?wdByoU|J?KVF1QRV#0IbvD%+rZI<|d#9T3n2tnQ~~5Frww zP`&1&q@nLu(Bv$$O`3o_5l|cvME_Gdp4h0Y0w7Au$ps=-Fakgu8me~VX@*H%Tv|QT zYQE&~F(xCKIzmwcqBw#g;xo@YW3RvQGG}al+m&yz9ebX1-y`57BJ2T$z?|}tSt_-I zK%jt$wBrR>b|2VfANtS-?dr?6*>8UA6ZYuCkNYZfN4=}ED#-1mzDq=3-<6M8l3XcA zHNI$DMyt9b-H!_6zv?2}E^4Efz?kbd)Pd?m=K?WGPgV|OT|nP0(E)Mi^uFRLxbL73 z$i8JIi`Xa&7lA~5kB_T%&Ay{J>=2QL;wTM)JONn8#Ued{NdZT-uku$}^wYWW();xd zjnvZ|3Ng~42LK^jGzKSE3mb`eJqy>fc4>ptJa&a#_#?*wa;++0sJ75io~mxT=_Z%2 zCP|e^d5OEJNlh>k3hqeHrZzbY00vUoQp6UuN=T|MDsM?BKR&FxXEcm>540uQjsI3+*`Cez`KNebM3d2MfL|^lyMje&Xung!PKb~t69%5H>=Ok7POJf zQZg|hTELvZTq27=;`YkqsF+B|#ksc9{O9VIT~TMbf%#oKb~Eg127^GS#*E~=#X(hD zXxxg9YMhDQY8OJ`D_{AFbG59ta!T!t8!bXrk1{zYu>mhHu70ch_494(k4j7DrwdB+ zOmR;4{^_16ZT~w}JS;=uvJLRm)Y@YEcJH#c-Sj31X{8-Ke8>*+o0&(Wl1f(PX_9I? z(&l7a59~i6fd;$o`s?l9`ya51m1O|cK5JZB@7UNH+%i56(~C}2fsNM=whUrcjO{cv z-~@vz&cN%UiFq!W zk&(uuWNEvR<1AonU}$8(wr<^uD8R5=(YLjAI&U`M7dLsW*|3HVipDk_TFjS5=B^qCuZ)ZBIVswha;xi{p7xrA|P9cZ9(a2nmHkG`x0f znialeAm;!$&b$cit%U(E!m-S5v!x((1z28)(U!TCGd?gvUCg@`sATX$Cn)Md?UAAK zbs;baLfqHjW7uZPE2jXi{wN@2W>iCLv<(4=E7@&TSKoyDy%D?Sl16*6>zL(XvP6U| z%~qImLCZjQZAo1UtV-}dBhCbqf(Uh3#KQgO8NevbGe=W(Z((d|0ICcOMgA$UVuZUM zNun)23%Cs>?fb0oKXu8F)s$!K){VvX=T9!T!Z_?@dy0A)2FP~zBkP26 z*&IYphVZ4JBiUZLAl0OC;J_g_nfev5@=_imRGy2Zb`em~Grg;4;wb9AD;pDeE<{iD zB48!O6vgj2)&`+okf#;rjd3ZEv20n^$o!#Wowge}a}iW=3N_Kn7VK5mp6e`rT(|9J z#~~0962Vn|0w<~yl~M5pOlGhgkb$Eu(>^0uBM?9lao3`?263MIe)Mnl@FNcgtIbWG z`evo6bh49t7C0%75DU?KCMl*7b|jd*=pyQiZdX9s&!)(ldc2*H7q2 zg@}*{BuQaVi$Mj&Q9G#)ozn`^)pu%A6W1}j7?6F)Y~AXab|(~6&yw-iGvzCAr*bPj zos0fTiA{Bz52s9JnS-;eykw74vWVIDVzft%qotY%Wv5#l|HJ#cp@Wll1ZxAqAkNHv z_uc0vI&pXO4O%e$;0Hf&3LsMGYieq8z*QVj(e>;?Na7y_ZZcJwRenv3Qj8MV)Z(Fc zfjgwWrJu^IwpSer_`c^o?{RraK2G9b;tnZ&1=a1_-u5=fK~h?ZuY9zaQQPWU)jw4~ zx-aeOcH{(Aeg)OF`a>|Td$90FWl&K4sZJG7<3Rc9r#`2&bW}PjdoZY+%3p0HWn`TT zz=ok)5fA1l+rsMF5u2N3u1YqJL`VN%b~9#m?DDLfg^fD08#3$}ZV{ z&Xb5bz;1LvUSm$Xky>!EMds!d(I=LbY_&sEWm}xMVXQIaumhB09y_F8yY#e=@V%*bDBYqb`q)w_9(#c2zrX34|`7b4r08B}y*fDKn z(SQE78||L`hio+t3}Wb7bdI3FPEmeL2g1J}XL82#V>QjoK z&PFgtF*Gn-%g(esH1ZC8H-w0fl-8V`L&{HOYW3`DObhHq_|+bM_+gX1R`q{zPp`P* z3P)4acSVD>;FL1vXFvPd6Mgz36x#)MC0-zr0fAt}mAtzc4;rTm0>PRa)V?okW7@%w zGvC+T3yc1o?%ATKr@RcNq5c)TKG{n?PKW|$=j@ZkI(zSI4V5AYXJs9s(IInYHlpMT)O@ z`bicc`<|C7_o*#DW@V22UA-3!Qmj!}eBZ~B2E7j_izB%aA5QjM&-{HSqelLcpVGa> z-_?jYFdrn_rJ#8J=f7R=Np9z74Za+D&)1>9=a0I-IQVD&=%4$z!TY|9iX%BLDH?_JX;|D+ZK_~B}`gzM+-s0rgKJ%H+IJp_gdPzuJzLY=r zxz9OyG0EY`v4!Mvl%MQ0`f$@#@3sUQ=KZtX*x)4J(X>@pMXY`~c7hKNAj6t6*&Qw` zpSBfsEw;9~-qx={qZ8r$(vrBw`4q18A>#PfT)2{Ko_8Y(P5i3nf zj*$MRzDcGsIIn(~hs z6ugi}PS0Ta36nQ@$T-a*WOWd$4Lh-t@GrY@LySA&3X}z|EsmfF8A4+iBmBs6m7_&p zfTEY&22x?jM4@OUc{5~UB_HeCtwe(23t{tx??g$f+irgUwf5wHJdWGLC3eO7D*M#? zFS76N*ls-sqqgnhy4FgssI)s*QqRdUI}iWupIfofx+V_Vlk@#JG}&aW+&eOT%-Tb}m|L5- z74w+G!A@mcXxugy*5Y-q+-^H(1=o9Mk1m_dP1~81U}Ew>Vya@Geu9 zvjj^FSSvwEvx<5fLi4yevJ3<6I4ZDFJ7zsLlo@dfC9>#|m&mcf7z!9On4YR_L`fF~ z!9)b52}bu&(z>t!(w{zr>=<(4`BnC@^>6jnX8&_%zcnRm?VM#vJ4oNkrA{vh&)HsN z={77$T08Yo%y>_ihVAJeK7x!ha+WAfVO`UvF)6eR6LD8we6Ev2b2gnJR}pE_I@w6| zm7gAuCo<>6_cPt|?Ru)`!TbLFRPU&NDsA;i{p6Ne#_4sh5Jv`*7gsph`#$Z{9pCi3 zpSK5}>b6h5`#ih4K5qYfaLRU!%-S{BwyvSga*=aQBd05xa0%Y`zK1o0Kl#>SD~{kn zDT*T&>|@eBkS%0L$$1BI*dgf%h<@>lqM(|La*kDxF#hgk2_%FJd@W-d+^U%@X^T%Kk!L;=}7{@>J_x-hhKNwf{g3lK}({=E<7IXiU=ok%aqO zuY_IV5CjhbT!fSU$-b*c**q6tXFKIdU*+cF^nJNc#9t_zu2rVR&wVB6zAHcRG#GSW zM<@8sy~Xc&Wey)#>HA4V=XyVww(cn`PA7Xe`&aQ7Klk^1TEY1KJQ&Bn@8kQU;`(Pg zYT}V{fq<(tg9StdXl3MB-|@S@`@8llzw#^21dZa#TaL`pNNGp*8#PHti9t#f(r%P6 zxwM`?@PQ9FlOEC>R^ECy7^VPxZJh^j>)C3{G1F!hT~-F@81Bb3$r3cU^H9Vumg+2BJczM<04WTV>~!XC@w(pr?SOfxDzFqo*dh>4)@HMLb~E3U$rgOt8MF5 zF?(R=afI%ZSnN1vt=K@^u^p}NifMZqH@Ztu_&8@hE_Qp5W6Km6#UGv*uj9BH@y<05Fn~<}8}+=N7HE zZytZZ{`@ODZQ~!k&z^r`uif~zOL2%%Xzg`-?UxVzz}CdBv8(IWI~%;Y_=zu1MXU}L zyP0Sb@S2Zl<8nKK*SaUBy6w<#4+?qMn#J156s{l(P>PfnxT*L!9_sLt*ORf=H7>Iv z0Aw;}2pg4M)|uCBi6ImnQN&nMjhUN3h+-sb3~k>z>NTA}A%R5)`gdpsV-uNgLT4Ps zD{MZNVy3JCGiAr{K*vG@Kdy{@EGrCVCkTym0a!U0a1;sJ=4|I;*606qaN|1LRb5eB zzowABf4`dY-Sg#pEcV9LwgPw2JI8wMM;$2SrK_!|4tv(sXk}|mBv{awVDA(Yes4lK zb>~f(8`?R5X{IIAks!1HHcD{P>ei33n8v%Hz^YtlOQ|NrA9;>K1<+}^>s({6DU7X1 zW=AayWwjv;K&RKC4Ic)uf^Y>aiHqR}yte^F`A7lMH1m`zb^?C_lJRat zJQ;t&A|L&j#SThdGHFLn&O@6Np^{SK;hiWbT5T=`In}Ss1%^T6q5~SI@{|{({ja8u z&%X2OYC!F=xNo~Lu#lYEhq--a9&&T!8e7^o#$Kbu- zc`(j@_B>cu!8}f!^F5~x8VvuB!ih4TB!3pI*@DZ$O!kb%1+?fT|8tGNVE3KL-w&pD zrtcS_dnsfq~U2X;HQ`((@OBdglHTbd`Q5{x4rRqDEu6@T2#@D%s zpNqfnfj*w@3EcS(AI#5xmyW^v!L)tey64YN71zJ#)AL7v-@oV6(S09Bz|*x`7~X#4YJ2R_m>t1Bfu^e z6-Mw0kJ+{571q3_!CFK3PCvBAhVgVWnF!m)l{j2zkJPbHrIBM}G@RCU2)e23` zQk0@|qkW{c#2W72WrN@9W>TH7($-5YmAAxZhcmVZW7bEpwYWS~U^UnZybx@a1LsNL zHN(VROn&m;Eyj~v>}Jia`7B*e%wF)f5?h4*k#TGX?!ZPeo@3(e*4vq}xw3j2Kx_2Q zzw5IV8(IOxn0><@V#nc8%pDEdn8De|U1qPlXx3I$tg&-fH(~4d7@Xi@TXFtU>%dCI zKi`+OuFLCe-#uNJCo8gkxWpB$AzOhh8s1 z$JoAq^f{{rn4Dj`#@_to2kcF^yvbHoPuO4dJY;!jvi@ZB$9CTA8*OXB7AAf;n=wo< zF|G%vLUzYPPgoa5Cv&i$8^%WI-r*U_KVtFDF>65keKL%N4|apX^Gj&35xenq<+gIk zu&u!8dVfdEKK}LRZ8XhToEFNk7uNGUX1DNtkFTq|l zi;wi|jPrt(gBEc6pa_ZcI^f{^5C%L+fNVJ=xo?ltz=DoW`oA`$|sFf_Db`4t;_1`=v3uV{)^-2I-*so3+|X5q|VHP2nzT7 zOS262uusGp8O}aa!msG#7IB>1J1-*&z90+5A>C{^GvRnyG7E1lJ_u}Pi5n9r#89aR zJFl;x#or>(r#jG2X=p-I5O9@gm{W0XU8FPo@pY?c{(N!%y6^A#^HaqQ##0>q#Br4g z9&Z*#rhB|$@{fP~QkR`hQsC6L*_dE`mg`mWGhk}*}weDzjP+j z8N~8@6M|4kudRKlu$CF~UCIYEK<6v!`C%Z%2=GVa8;DX$EgjwJWWR zi7u9?v)XDniN*9So3y8Y(qqp((`QX&ffODv(l93IyTS|6UF?XaoQM=1PKJ%ap`WDyA zc&6P3g;}_|Fn0_`ELN3VV($PvH>}%iksBLr{_Edhkr%P~@{8$5n9ag|U@D9OdAN>4 zOq6AVleQcit|7(=%tAOzw6Dq`b6T39`Q^f~@@?cYT=>)6khTLyqP8r*!mhw(-_#hM zq*hJZ{`N_1dXi8n;Qm;*^&Q!7N%Ea1otCB*Q11e!dSo?v*IL7Ryhb&{Rh+D}9-O|s z_{^vc&Ec+dMZ{X>+pTHKN-J${vL;HhMi2pDa^3O`7CJU-?LBRlf=emRda9tp%JIp5 z;Ap#jYWwfmd6#Xl@eLXK$9;S3hPS=Zc3`6Ag_$GP{lu7Ex@L>D)E>2giC!BiS&qF* z>=EN{J%VYwi6m~6F$tGH8nJbku7uN?Yc0KSW|I}xJu!>}2%I(aOKZ3@#hU9>@KORHUU-fHU|laYB=6o^Ayc5Yd)+Nf8ymvPZJfH|opa9>BU$tydU z6Qh$>+fZi7sX?1%-?*i@&K~~Z0~RWm+t)&iVMZ{OnYJCz@3O6%)&X4DhQ?HnY)Xrx zum0`F)ypzmbfLC9T{zS8)4lszKC8U_EA-m~_Kp4y+tqc{uDEQKt*%S3`$0dgL@Wo_ zmZbo{$q9Bi#tW>M;c+2myFT2w*6tgfxAXJxA_PE{M=2d;#!g^VA^>s`nuEW28NnCu zr1!#oWjp|0lkBK<2u23679{y z0gUQ4gL4ycQ5Bq7C(0m$P-?pw7MRndF)wpWaD4Om9+@Z1rBL%c4~MaX3~h+hXJ~xh zgL}*05Z{ms5Oys~yjL1ttG0fv(tV}h^;*RHS-$CHaf4&?WY14mX2thEAJ5P4!F2sI z9Th+L%wPLsFz({>#c>v2FODC)4(1uW@6VOi>4N_*#qn|dQTNW=yU!d$>Ac#o`1^uo zJ5`!`M@%6X9H`@l`_KiDrU#0opSV&Az9JOgXQF#r^`0*Hd`=f9_{^t$;=@kTKqsE@ zVo*jln2ta9oKjuuJqL6sx6btwF;(#Sx(ogYq-Ft7RtDIoBjPF9Pfc*A3X9V^RlMN+ z;5+{NbnjH>{$2lEM+eXr+Q)nF5P+54H`!_2vuBSJ3ApXH+nkNK%P+s&B_lg>5)beO z+hs&t@4xST@3Wh4zS-H7lcyee{Scs)7{WKd`ArAr&pGEDUley-dgc4<4b4BcnQwGj z`KAVYtnG;9S8PD;6>i=LzQXY*tu6gc>&~~%!)forZ}1~RWC^g zWV3b>bMR23dQ!W~SGnt6OpF4&ikpKyM{QM?VH>cWd9epaDf##muV_lz9=N1oZ2LwK z7r-B_rH8Qz8J@9rxR~K^)SfcL7jm)DiDB|WlhmuvLr8QhfH#MzIx(XPooP05sQMXrKM(`)uD+xKd<`zdJr; z7i`#QzjW?4J9zAsJ|}0 z_tMkTpLPG~-y?~PC%M<3Z>3vitucLsof4cYRIFn$gBwo9PRd4XyenaY)J1(llB6NK z4(sugrFe1!7K(G4!x(}gn%xOuE{(Eyi|B`6=q#9}U3gRC0Yqm32RP(7LD|KDWi zvpZw*QDLcuNv@=N(R0oVL(v(sEEPWSf7ChEs z75B=>5zeP4ofkaWuoZ2efez_=oTC#!Z33Dk*UApYVtYHRtx2V>j&O$XYTMup$^L)! z_|?|Ynch3ob6<%*p4!v5sXy1zk8>YS@A-I((+FPsIH!A0@%{6~@fTnFwEwG)!Swxk zFl}G1;JyFO^TlOae0{R=Db7o%lM4-1{g?|~P-FTD*8^06)$DH}l6ymh<@8~3fleR$ zrKi5&{uoTh-+L+csn7H+Dz|@M@9JFl-8s)(dfW>J37u;jUIb6i#gP@D)q65{eJUj` zm)1f;KF?sf|5fLU)Asr5sGoqg%B-Kjw!T9~zh%@|29DqP&Ue}c7hGUp|N7URF>(R) zyY9Nn{^BqG!WlmncU7F$eHcL3_iov;#VLe+@rz${q6qTrA&(#e$iXmPy4uRul-c_~ zRc8Ai9kueOiftDEiO>BQ#}IkL&hLFHId1pf{k&a%d6Vruc$j*vv7;UBcICBO?C{in z%N!cA-XowZ@|`>|WEFYH$ZjdNJ%@+wZ5OuySnP z1Ny1X)NYb(lss%^p%3UiFaI6E&^CM`8;5(-z#63t5r_DE*sAbLAHz@f%ro09v$w)> zDwf&Q(TtUpmof>WFoMhBZWuX7a&Q+4N-bv6jj@H93umtck7we@N~ueR?v2Tk$+s&v)Y~4nP;dD@>~XG5gi?R#{DI(!O+0kHu?qk$dI)CvnM{Xt$hv zfa@{*xR;IE4VM?%>e@;?P}SPrbr}p^hwRXk!-ytK+xG5hyK3z%Hpe&N62tmaLpFi3 z7LuUWi(*w}s?PFo1DQr9H59>@J)ErR`Eh&ax=ZZnOsBP0G+Jw9g_W1pS$uH6#YX#K zsWsYNe{8pR|kPS1?BT<(@z~8 zw35ya8yoGgYkuPj`{`sgA*5;#if~pjI6vPy7`D_dSBdE5rSFTQ1b9lJxc(H z#c7q80F{ONZw$!mM_wg)(JaT9cVk-2k|TEP9gvlCfC;#=s^4H+x&kix^J?pVQ8Fhk zgZceer+p%mpOcf|_XWS(7ccl+=RS^(i=X*-&U8H4d%EZE`#h9R@LurzmF5vl%fF*^ zg7(45oFmcTbkS-tq5gjyzqUxIZ_+mstgR3BW=uq=l{ECVjXMBHn_uKvonv z@T$e+@3-NDV9>pEhCejdX=8X|9E=n!=mM>Fo#|!wgD;%q+&7%(qN@Co0~MjuHz?@4 z<{@?p{+_$wkLp64OL?>qkoB%Jm7WNs-c@;gnRN7d>gccibDyq1`uqN!#rJjX7PU4-jmCc&8=JHC%C@yZH2lviS3 zd0@=`^lz>NjKevkOJ(4?h`R~nl(vJLBaSO=mdC`X9_QK}?^`;mUa~))11{afClJds z1+}%ntd7N@IUC?!d491C;~F`JXQ-{Xwmrx=j{4g<2AkLPc&Pcs9qL ze<5v?V<_OvOxymBHhcT;-)fD;3Cc2T6>!s1Ac_bGaTJeId8H+m!5TmmFg$^Gu?oOR z|I`qkXbLPfJZmo=IBu`IYP~)2j}unCcEob(n(e*KW^KDi?Wu1aw+kzmSps$ce|qYE zyZbv2+P0fp?A*|oxqjo5j^qD(kA#UpQW#rwH>qfH^0+Yn|Dz>(eG(Pt0d^|)=kV3qyCmi2bS8{dp9Y@4lUYO;=@KC3M$vOKtP z&+K^4nj5Z%11qxVppz3La5V4dfPgzXuuzWRct24Iuj1sQ+t0V(U2~z`u$~=M0PZTYfc7~1`(ne zaP8UJpMw^rWkG^*mtvgG!x@c>yDAX@WR2OUz4~HDfYEy6nD4 zG$9U0T=aH^Mb!+8@-e{i6rP#Fcp{Rlxm=lw>l#8-NOKncnovB>Wj6uX%6)nSqCUvG z(zaUEPXmN!Q39QypX8EfA?23$D_JptM+{h&HzZtwGG9R5Nn>HqzKS|N`^rl-5S+_= zANKeBwPNdD@Y<)~F1fKefKC#^BY7kV!i#$+vnk;i z+$0FSf{1`7eq|u=Nz~H^I!G}1iu3nK=BL8T;_%#mjPhF?1Z0BYW$*Gp+(+H>_az%D z6ImjPx>wJnsqgoB__U=F1-OFWrhERUa%%!s8%iPT;K75=J)`R5&O7gPZg=%e76-oi)vr2*EQtlkMVU1Ggu_R%vTXj*v7m<>t}1aHVnUL8KMDsMK*~`*LgIz z6L9>dQ0B_RoX_;!jOA6c6^^UqZggN8NTZyxmBZG_pg=;FaA6rYa0`7Kxq>eI`9GiC zYLQj9*+ko;D7+N#VQkqZCanYu4ou0GzUWfBb$%ZcZM{7;m}8Awa%^pGja3&R{|Too zIap+UC`fg6%-i-oF9K81>PHj1y?5H)@Jny7nm2Am6C3Un9A=yY+dKdw3dk!cTZ##y zNvr}avmfre&o;BouIqlb^V>S$vcl0dly(l$7KtN;_S?5UY==hL;GWf6X+^&6J95A_ zymPg69-OeNHn-Sbl%?+Y=)LxPU-+O+MV_+@uH0%{lUuAie8gJHOYC>9z1p5^J7$lM zwb_$L+Nq;ryL9OW8_mO1R`;MCz;Z@4bzF+52t~B>HQ>EU=}v4{q)s-0`T*{Ob?wiHld*hX3{J_UL2V?PA zPy+W(;Gb6^Yi@fd!vr5mLA>G+AEf9K6gVllHEivqLbH~ODIBeWlOl#>;)on^L{=Qf zY{6PU7=(}mIEf?B@4<)~CyAX<6)QhhVx9O`-+5p^GJfPvnWs@OSvNRjO-mcF2ZG~iLC!i`IEAFe#1=z%`l%kW;mM>xbJU3SFx;!D;3Z84NMi8O*okisi4k*>1t`!tV zKUb&RSMUw$-}mvAz5uybDpMLdSJ^cnRW7xuL;#+9?m3sH!~`z6+Z>RWX)bNUt1jeET@!yW%%ivyg#(+8Bb$n8 z8>?MwbJGXx$~RwOPdqz%$sPoU(mAlA)vTXOH;@;m=#&$OrQ z(R7cks_L;T&RJ#Wyd~cr*~ykT+{$DuZXi0nyXg_$;@% zM4{zk86vNE+9ok26$;nDCr8|adid7g|A=;D{4(Yqx_`eNZ#P@MV!6c+jo88c$1szm z_N9+vx@y_Q>+Gtl>+E}f_kb-gzSu6h1aXf{o~^Z2cIV&RYh~+NY~wYZwkl`Rs#nMu z8Pzr0XBS|5>;i-Zu31)L4?fpx`v(Rsw}J&1ig`;jqlidU!6h4pI|cwxcHuj|#Tqf~ zlwVtB9slv9*%iLl%&L*I?cci021esn2Jk(WDMKWo1O>DqzG1*3=Pb3{{A#=Ql3Kg_ z-W=m0p^vakpx7|=`X|6d#?UV&Iv5FBRAr#A85vnsV247x zN3xmi=z>^}yb=faiF5dBLL#!(hH~SWF6%*bB4iT}U8BW@8&!LiPx?J>_br!rFkGt)Des)|Ar*a2X1AJez-9jlUg)-gR|eJq9wV|mtq zQf6rqnbzS68=C4ReeIes?hp@&@eO6r*m2II#LZ-KY^1l7_RnJ%0?P!LJeyB4j^{(R zwy4ZHnV;f-T`frC$RtR{94Q_fXSXAPoI%MfBXL2?Lu?i|Ex7?l`%=41FIER9SoJT9 zCBSPNr7mTw+0B1cXfE_xbl20~S5wEY#XBMTra*oYS|zItnyJ&!&II;?)JI<*eGDqgB)4qbR_`8FB`gE_KDqisZsm_(If98+6r?Tiecu)6zIMsds zTu04Unh!M=)$SUXvbXvV|L_lvAtUpU+HKX?)Hn??XB2;N9=<#(+ll!mkm2d-&!^?% z`0oq6e&W=}J#k~viBDtE?NeSZj(?`~U!q@GT%x*Bc%^0b`JF7EQ>77%>-du*H7}7= zhXW%&e&H!MsZRh#;xv$^)NJEH7zDPsBUlx zp?kE*r2vqWF~>+L1T)JiQ^kn}#UU~x@Y*g`ILdZVPk*25d~t}sI%y7_P~RZ4QIQlA z2J%h?MI~^_=G`__1mGc=r((9ecB6HD93ouW(`E17j6w5-AWeLMHJOYONEH`T^&?qQ zaVG`h#EIXDuV`s8pM^0Z&3Z{zJl)Sr+QL61r0F8^>N(Ig+D&N ze@AgtFFNX;g7VdO`)j4GGTnFIeXd;BUVE)Gl_fi{>(;Ha?c2Az_ar7D?&|&b-*3P8 zi@)g7lronTzLZvbd%H_p-zG3Gpe#@>vEpc@<+7C=Eyq>?N?$kKa+CeXj~=$E z!BOm-#;`xzU{%F^_TgWC2cUxQ4Og&0k_|@`G!n&3#MEKFw34%+K|@X7E`l$GjXbtN zX8|dBaNcH743otI)!I1iSjOZF!xU}jLBK+x>#se4sR6X*Ys%re&PT1N36o3ptv2<* zi&nC=9IgEdn;V{lLj+MQ(!|1R<+ILMI#>f)z(PCDmTVC?q@PK?GC2i^gu6<}ww60} zf7V@w6@hbB0#@cNGa0uiHgeN&qAWG%7L3MZl!oJ*v-(PV@9(d-bN}``_Rx=e0ClUa zC(&cW4;I_^;BpU)<=T;>6E=*9#`PaL&u;kK)%I+9kOjfC#R2KFC|OlS2dRT1o0<$+ zX>lE@R}=7L8*F5dU51%S+t7Nx{qvoV*&D9D&>nrD*Peas1CZ zS8k!6sKfkPIBs(`l5^A^dU~C0yKs{w=u3NtrflTUvz8j%U_&jVw&VMgwsI|icH>&C z6JW0udCAriLo*YxlpDHm94V$^F26#n1cJd+dlm}@3K#R?7Q~% zcdxahdq=FBzShP)_kO-)i9fFkm*ESqd@eAbB}NlGA> znIueIjNw$G5R+OnLnzGU=OGFNctX}VzX&sT%o8#_R$2z#27uRLk)tAtj5FVq3uku@ z^Jx<((C%&dv`yfF;v-LnFha6|(9Q7CksP36BnA8H0Mn3PKc)c|FcE zUPP`t${gZkY8iNiVqP$ICT1oOBVvK33G5_6^w0&`R=Y7#oQ}w{f#!|`Cbq;Rk=}=# zqNtAb`?(5~KLjmN7o4X*Xwj3ag${Hkk2w}SJZPO3-0a{0=F=!<=5kI9x{Br)`qFC{ zRKI@ic{SPi_fND_Ad%obKBX=5!hvK#s_90j8O%43_lVEOL!=&Ky^oL6%Av!C?ca%}+q2$1GV`4KdDG0{~c< zV}e1KPhK%JyJrv-EFj$o6ey0m>hr9`wE|KHOd=a48BTw#GItD&lYW+?mILw3C_%Va z*-nQ{6lFuW%|>SDvw)VNpMaz1IG0QY%Nyzi)43a{A-+tVT0m8+wBg}lXA@N-1>(l4 z^Q+?v*m@@ciZ7W^1vRYVYO?VF(*s&vFSaqO_`0v4K@$X|?&iXuV2AM?MQy0Ecz~?> z5r9>>bS}Ut5r|#8b~#`wd#(brcieG@-EhMVC*)d{#dX(Rhckg8cVEC&-_QA|bSVP$=1F1H>~xdUH0kU z`csVL*V+C(al7K0CcF0-95+lK^OPAgDJw|g$8kbW}bUd^=ah$1Y#4~ z+N9ZIY#l13*iI~)uC^q}VQa!V_UyKEH(h6=$d`6L|GX6(W&x5Dx56s4^}Ba4sp5!X z8g3z5`c}yn=@gufGTIPNUD0wpCgp|ro-vI2BTLAlZv~)nQf7xv5~{1{r^uaZ+cm_b zpMaAZ7SdtdB-8Xa`bRzpyC8%eQzTh8yyt%);_-KOtYg4F{B6#B zkzM!kH`*J1a~<-$9ac66&}MNEi%v4Bp`e1Zi5O+iElS#GypMVeVUP7i8|W{zrHw82 z!2J)?e`;*U6UXe)f8Sx@!YQjyEwfBb6QDP4=Ui58%PWra$wjubti;~?DWoVQZsRFURUgcYpN(yY@}nEPoL1UR6!V z0n(`{6N4bVr(-BK_<;(+)n;+9|+cn&UU zqN@$D9NuZd@~nmu42~&hZVS&`EKox*Me+q^#YGQHzN!T`nev&Ac2bEXt7>%%h%kT~ zfe2`+euzI&CMk|BN;@Pv=4iK+I*re;@Rt*boB>E-A$7}m!OTcr6el*& zl02M+q@_IYYCFu&PzkP{i65M=&h)z8@$rM_r+UxF@$Z}}p1tO6yGN`MCaFpNFpfGk%_wZK$}tXR3qX_)5$5;crZG?Mx_L^K0&Nx;2Kp}^t`t2i=Y5ilU=?tuw8b-rLHasC=}fW@E*#**ma)bMQ{v?1&|o{O z!)a?LjRGdayqsb?4#-VH^zsrB>q$;Ku7^5N3ZZ=ECzDB12GF@WT{#>#5gGw0{iF<_ z_yU=lEXL3opFj+FNl2bZ@`?c6;*4C!J%1FMs*VZcwZIGP|YkUcGv? z`)*k=xaXdG+&9Q7fvgzlSuliAx0ez7Fq6BswW9PNZI8ysCjctAJY_4rWX)##<8S=7 z{qcvtX8FsCY*Xtc$Vc{B2xTOjXZ!caQTymEAF}nE*I*BI-X4DRetYLT-f9Q;9I_)l zqt?zqS+(Fx;OR z#45^@xOjy_gc!rz$c%NOFm>M20!!fJK%7)8U)cadEk--3jTeXUqwTmiEpUA&QUDjJ zxg0`@j2>ICaWvdY00Svas`HqtV!1URTWa|iztvV(?67Zqyw$$@Po4HOUZyfPEVnOy z=~j!zqt?j3gIE?A%pJB|wuVCy`X*fQB?Wbqb&w)VSd4A=2s<64v*Y%}vj^?!>np8) zpv<0r>M@%cM*OFWewsvSXDHv^e16O}wIuA8w_k;Q-isj=tI!U|PG`YB%Lfd7>5j*& zXD0xhGTg>7zfK&=pK3iFdGJ6;d4 zK{4%@Q3(6L%$)~-o@JG`@A;;;OmCSRkdZScHeP}{{8)L)4tY0{i11@ zGUX~RErb5wqV11YY1Wy?0caDoY}IV-$FXfzC2d2z(;gBb?5{ec;@lTI-*HxjP||MLO~*0l>xKKf1-E74zb196)8+nS|DI1e5Os?U_J7OrswL zCm_qBIRDZ6utFtjUriODnv7&1jtKx&Vk(v@!k^W()u}YAi2iKKmCO1k3h+9m>!r?< zCYrUg7LGjO;d;87p#v}`ki(J0LF6{df(a5^#1aVv`P>@;v?D4z+K~6qC(4U)w(ID` zS#X;w=guZ!Nfz}Lryll=5Cy_^ds7@-Z}z&3g$9G64*AVHB7;39h8bt$fKLN>DLJSnpUKkmOjQZa}nTsh<=_#xe}4N11Mp_ z=mwr6!toZ$O;<@k*Wj5GXkvqNpcF)*NsPipu)G+je4ZCP5B@!Ewhnlq9fy{F(&>;n zg?ET!ZuOQtmOokCKy6OHL++SDHG*$Tf~}cHplnVH^1gQ@@8#^gg$rx1;C2 z@SH#PIdwkwy*xL2{#&wSN#OrsC6D)eo-ly*=1)J%{Uh8LJ|irPe@`u2c>L&n{vB>p zuMPM8rJsN5UQ?eNKI2ba6P`EuIa%+aob#uhrv2wviXy+JK4a>8`}@>m;eGx5W9<)* zPyGx5>(qVz9@mEkH3f-eEkH7#<}D3lRvjjoH_aG;p}>^FlyA*uFmQr`n-4-GBfy8y z6l7u&^PosgCvQ9rei#8(z2O;vPX^k{?4Y2TeNCD(vr_xpqT1iQ12bPOtsYMjQpA$0ohzlWcAQEO#|ITnfUK>sJ+&^Y7&5PHUj)j_>RJ zZU%!EZU(YW5@7IWPk$e`hSleWKzjQ0=>f&S+Dkit`F=jv=6C;Du!nyxe;`CDub<=n z{_QPnXn*=V|AqT~j-MTt(Z>v){oBV}2i}})!1uiV`s?+TuY4uYsQTUPpyh-G3l}cb zt+(E)MT-^%A-0_Gz~Q#MIyHsjt6%-9UVQPz;GUOUa!KF-W@k1F0N-co7B_%48`hyAJh|?Q0O8S zQbEjEbNHwaE7VLur8@^2T2H3-IJUVz9q?*jkAM616T0{I2efnji}18b@n}Yy8O)tSYHR6K_RPhK#rxl!*>SW+TYC~zM#j=C9@>jpd|n0` z$3!SKl-FC>uE7ufNh2A8BV@$KpmhSYB@Pv$m_o}$KM(Y5!+^;s;26!E&Af3V&5BK# zr-|}>&B%C0AI^>H>%Z>M(r^9)&NeOT8qe1HW`K6?fU?I+(Ev9Ao(q)+3Ll5>s)TMP z{9JWlCQi-3yC3uHD4DB@au@3GzAY>c07%L3z8SkSO7eBz&DUzqnqtiJXkw!PTIzBP z4Qd2aaHlGC&gBVOQk1O^{p+vw#Pfr?;-b}rsOr`uhtTpibm)dp->l2tak0+0U?sHS z4iXL^cMQx~cnqg^X&-Sty8%wal>WhIJG8uXu4d;|Yx-5o_0;`sdj5$QHBgwQwkNB? zDhoav6X8#fwyJ#YQsT`vXmjgKZsyI8ENI!h&MPXaW?P-O4L2Qgd6oUVeF#)}6XaS6zOd ziVD)SclTC8R^e!uQNm(7i55q;Hr45170z&{mQeYx04sOizhE23u`q&JKb^k3ac>pc zd#D`9w3>ky&B57j2x`tqZwHhOThQ#hh2_E4mZ7A;pJ8X!egG6SEa*N3#24=Afc^!r z@-_iIr~{6)$DHR9ggWDGQid{n1X`595JBAz15PKmhm^g260-WvmxXA=0eUvlG0yfd>X8Nclkj2B~X8B3I zF|K1UxyMt!Sb(c%2T#au-+0vT5qP+!eN2_N;T`_gpMDq17^myC(6c>aki}6l3z~^> z>KxwpfvP<^aNvMetvwxOO95jF@S2p%yo>C!G3@Vj3uR*XIklMKKDWu#@8LP&zVP?a zpW*y$tEe~M=Ve>fkYA42;2pJ@L%|j;qUO?;j!@C@YDN43=;11=by8M&p7&;m|HhJ z!&s)$aZZ^Gw?sa207)N2dT%M1dEB_u7|d=^?{DvfTZW*C#o@sq$(uDW7RENgL=oy%!UsS#GpV|_hZi16;>z7vsjb=dqmgb58m9Sheg zj@7m&$zfKPDR?Bi40eQY2OA}nial4;(nueQHrS3w?x5aWE_X)1xWSc$R6oc4I|1Q1 z%97M8_GC1$L#8?qDrU07PUxfS&I#_}e{4$k>Oa)7+PvUHRLdpX>9&%^fG~cs@7WLICS)ChLbu?(pHD zoPM^!^Ww#eb-@J}1bkJO-GlY#KmWNt_qopn+Es&7CnNB62HFPR2IdB=j!xk74Q8FO z%d1tF%V5~&8i>2xU--fo!XmNKhhIquDmz6*Fn79KLG~R>UYqsCFb~3Si{w@_3C-56 zANvnDbHt!U!*bWHTglKhti0)II)v6No-j_UR#h;upQ?Virt{|)XxZ^6YER8R6_?K^ z-Rzid`@tsN_M=~_q4q9J?l|zFF|kI~=^;IM{Csopyt%B_o>@bbgm%pfwpe(CwyfR$ zn@9DbkNlGc>J5sCdpW(3bgaqB%*`PaRA&&DsSm(fk~^kpsl}>qPS)`07b$uES!j;n zSkGe-m`H+)F$gdzm{^PAw5o7avzSmP(88Vshjb3}e+gPPx1}?GB{PA)y6w4(&_Mu3 zoZxIN7*C!-zm3GwrzC3EbEFl$OB3xHSOH!b+ggfrGm2 z$}edBGlXnI0w}#$1(iukAIVk$KzLu(UiINfRWQAn>&J-4I$d**pQUTAoTtUn>3FAGk(OJ3L{@eY4D>RF>%}OsPer$ccmM)sDv(`dU zv0)ytHO``W_mOV>;-^mlJR4ZNrs>M7FHq%7QW^8~sK+XrL`3_mWjWTD7z;7}_adtq zC(`=HBPuPQu7<`M!cHYY!N|sBPUy125^Y9{oR2KYpHZl1Hg3f6W}G@t)a;ovgE4u- zm%gB{-}n`!kE4kPpwS8b%8>&kG#JNGH-jhu zER~`-`I*NX0X(KL9#f&4^f$E=Pq;>xUVM?J&ni{JzTE+3XpBYU7!(ADsvE@Vih&ep zG94YneSXqRk41zrYOSj04bLYQ^v2;%M38{oFDwKQkGAW`!Cu|==w@x&S*OJ~mYz~t z0(Awg^*M7i*gvS8^eojvAvz3iJBdZJ$CR~^#Ft>}WcJ9M8}`lk8N`@bYuRd-!`;4)60{_&fXz zpL_K0qxT={xM_>w*4ICYYr@}0e;(`lqtAK0-{Jeb-f`~_-_7;n@8O*4-;-m+g6Oqv z7M97MVLgWXf|LJ@e*)#yE9WCZU)|!mx(U$(*?tH?5QDiVmB}gv5N1xz5L#Go9=vtU zc#JYcf|Q(mi$jpvjAjsLQ*BHTpV0((OkxZsre}l`1qV19h$)&&UiFCThU+zBW(p=@ zo6<70GM|ZJ^G(X?Y*Obyo)YJtrS^;p!V?kFi_2PZEy-YF8o}f_Jc#z`6>Z`Gz}Mw6 zcpJjxG~Uo3fJbWwf_;G2A^1T4ZU^E1DA`ra>qXSZ;@#@|(B%REJc6bm0Tpn(RdYv8 zLgTO#FQeztzzGbjIW<*a z?b@}06PlA17`QsBz;Ax@n;@Bi%kAU;_>cb>>~}d_R+rr%-Jjt?!Sxbu<2c+*B%nt_ zQ;6P^DUdST#KmOH%d3m%61*-AjF~ojr&gc6L=Qbtr^8ztlt0l(JC*5$jW3{GDIw5! zgfM62+WgW1ZF*+E)}1>WjYF$`c*`br;3&57Wx_D!#_GuzZ_(|y-=k#<<|wNmD-cG0 z{}h0$KZAjX`PTL9awh{`T~D?!SdsPV&)uY(zH&1PjU*+^FV+keRJrhWQ!>)k({e=r zc+zqmKWiGHrux-A5RWH&Clh9p?tkGIL{`|MvH9=Oc+U)c4xtRtcjFl&DNM%DU^S1J znKdY(8YwUK4o!!0;Qm0hyk_eiVLT=l&vc_Kk3%pKYL!Y)0*IfW@_#nG>yr1 z>ewC8L$^Mw9KwRV>w|AblZ#oF1;Wy`X*&JTD*dwdF;=E5#^4%XxbDpWf-z1@CY_F=bOL^tNly)uk8o>4BG|9@jh+FQ2yf&&D5#a9j6oDwMvzX=PIw7a9RmH>IQ^wg>zZj z|B@2+ZPjSQYc;TT$Lx<80Ki7nxhFw$iptPdR-w_3XQ9)ev-7ev3cY7V-W;-Y4eGHy z&3emOEA@@<-$}aQUY!y@7gK$aw(QuViWz|We4I7uA7A^= zreEl-SDdXcf9XS{LAJS_#eVd)PGzrYRDPgiM4mF~~%$+8FM*>Z|Sqvh5J3qzasCzE#2F)?}A+TnQPqsZJ5<{X;_hXJ;h zE0&!G$!S>e;v6p)2eTQaS!7|GqnLS1lzPu|s@k)gby|jwFPjHf96C})K7ScX#k!G9 z(vWsIy{wC&jUacr(ViwxTAwWIU)_+O;ZJAjvn&{Y1zg8bj~36G%c1O`&95k z1vmIB{d27M{wv-3Rb27M?&tS*8Nzb-({<@Te-GzZpEvc-$BtEJ;eC#E?2nbh$J}$n z5g9jxwknF&E8V8_-aZ_CmyWtPQok}LuR?R`RJ;9nLf`-~+T>VmI_po`j>qKlR0v^WB?_XgZ1Yu2nqi$`)==nbO1P02P74Gr-K z+}T&al{=mPT)ANX&`eqqChWeLk@(CYiReBN9}m&++&z3=Y3@0P=2IbwjL3>b79K%2Yk=l%4jKMm5u zx(rTgaN&g)2JP?q_PhCgyty9y&VDbSYo6@XExC3N96orJStY3P$#4Yk*iHsxc)&*R zy2wOR){j;`6_efgXuk62wyEvmR<$)A!rYsrz9R={d$ORVmJ{4RpFTILM;?C|^?Z?% zGE?>J3uwN(p)Pcls(`qa$1lT#-BPbPON-S^K>S!7sLc7bAadw011)RGhHxr$9eJW0 zq^~9euw7H{dCy1nvmgFanX?uF_R*johErXXLLAa0omrVi7^-u%=(3YEh*=rKC3FHD zL`+-guh-ifcWeE<`}Ge$`n0M?->$for?QA^!=k`K1%^!d=?75ib?NdDTlcqE@EoWVa7wD+C~$VODL=K zJ}dxeQGt1ihhmUkPgt#`Ir{al`*izF2NY8utBSc1En^?qQ~|XOP-+N0m7hV_xcPv# zR((CJ9ee{0NLEwPK;;4gj z6XF6n;m}8TeN*2<^dkf3i%wpk_kaGs^!&p^>hIbdIA_LBqrLJYfSrELD$FI^S-E!a zt%KhiLyFmM#&VZ7{?|i#>W5Ei#f=xJvLR-4u^K7X-whbqXjwWYW=tg_&< z7p+@Hc8MqM|bGz@?4$vg*R*Ok;Wig+QTn&>6<@(r}q5z z!&-U6?Qnxz^}!E*SogQq!sE=xgq@&!AK0u0h7On3s$}gM_Hx>E-8hkGVhoF@#Uuq4p&GPggOx$tQOE@9Crc&O( zkJOSftpo{g*m+pDZ`iB_W#xLLZo6(H(Zt-6LgF#wL(n&%z0hOgShS3w)EI29(S@rE z^^T8Sr?}=8)z{Vr8r)$b%Z#FZO$2D$GkyrpZWKPPGjzFpjwwFmXby};`yeFY&^QDL z3ls#5dCT$a@L=qc%gT2qm!H6J;L_{D39Y=h;DXdtGpCE!fi+gcZd z=PJ#vR9)jfZNT~yp}+Q_o=zN?Y?rC^6UtA2dJ%5$|)v}#8Q4H0_I8V1z131SQPix)oLaSfYc++N*?Ud^okgr^0^AlT0Exje)~ba z`}+T*D6}EWJpZHR4Ckl63H~RU<-sg?n<4?WU8@Y$iIaZy$k!wSs>Q9dsmnZ!5 zz7XfQ-hAB83IBZm@S3Ba6_)2uy`Sy)#}cuzXI}G`&wEN9!b36YPJ>_^LHLZINsWop zko>ksG&2^lQ~|Bt&tyUI$dc4goW>!{J;b;qCg3O4&emP zPfJI;V^bE-pkVe7U{#M3O&Vrgo1iEY$|`_01AsvtMRRK}beoA|;9bTArasJ@cDxwq1DqpQEmwf z@LJ!~0@V9_P8iL=1IH$MYiC0+>H##Vp_rTue2wqtd$@D>w^xuJY<9e|)0NBQ0q8P4 z_0&^(;)y4Ma((~%-w%LkO-)U}_pz4MoY)&~xFOKWIxg%dKlw?__NxLwZCXJ%fNfs! zy6_^4tQob#GBw4M9aD6^nMKlpFtTH7;fmj$XO+MI33ek5~Ds`MPL!t7@OTM?0I~$5zY*1hD{wlh=qWuC%q7qdi1iPU3Bn zBq0$kWnp2uHf|y#+V76&y0?_W?IhF}9JvkkN3?loy^0GLY30%rv;B& z0wfWTXYJg;^Y^e=ErrJpZGyO)aX4N&Rqf3`yj%bI@3*rM#$%o^d&PuA%PT~yh=#m~ zK=$SNGlMWvZ7f6v;5x=(av8(xUV=&?^X|RyGShEU|-QTcHf)r)%@mERaV?v3vd+P3y(kj0J2V z8rtlf6s6_hOxRtbZ~goUU2|$2^r$qfHJzHBS)g}(;3hQ?>v|Zz{K)VTKzY7mIv8^a z1m8!#b=Ah{j^96|kH7a~nhg;BA^`_dJ8lg|y7aM6{G73# zqsQ-gM$wK`tvF?le)!{OsFw`tyioVtai69WZmtC&-`?A;(@tI!Bov6CfgWb@*WA@c zpCtt=VZa>6(+{6l7hTkMgiR8o|O<)r}5Hp++Q4zgpV zs)uJkf3OPK%>o?-LQnH3Aqv}|fHdicAGk;#dFzRaw7jT>R%>O6ssPvBAbW&yOfXrj zCdeW`CUbYSwK|6!akia|; zi)91>2r!Oln0X@}ho;CBg~jB=>&cm_LQMNJhJ|j76)F5TKW~0mZLiJ;VV%Ev;IH&0 zY{S>Pe=N>zZ8-C#TA$$PAw)V!fG+X)-S=n}&XW@n9E5kaU_pWAbZDp6Eze{DJgn)J zYm|!?pQ-N+ZBxrJwJdI{H@Z!|&Q?FqRsJ*B3Gd_iFI-IczEiIWe;>W?SkL!4Q~!`>?=rb;KIXp=&<6c;%Ge3Z6_&&A^m<$Pp5gJMe}`qBx&;{Tm(gmD&Yc>!n|MQJ%sR4Iq!H)b-L8;1*SYlI{6B*6c6TR2)zN-CHOJeX+f z3H4;j;c%1zJ&)s73|X!W4&W%?Mf!B+q%^KE?h4}Zlkv`2(GIZ2ihfVmx8Ku$uII2X z7`r4O=f|zovas;Dd!?^T;xm_a^3NsrhL`|45Iw+v&){@&qjv}B(59V9(B)7*ez18= zy)?AJlvmN#dJfVlM+h1nOBR!98JTFc&;|jD8tR*a0%zep+zZDvgGtF1I1A0sk-AY0 zF1=af>Gx=)epJcDNvca4(!7`V>d1Abb-`a6s=>>&91|nlKg@hXXv|!N<}#XJ6=(#h zT=QTphsIv%aP}CDP%-u{kHLiHtWbk+F=NpDxsOe7-Y^a}j%Z+S)pQ)qGKe+kcd~i; z&)r-vZUlFBH;Nm{VANCqgHW6A{oTON=Xs!n=NqgV?7GAF&kgEw7>xS9en&T~lP37L zJGK8pje(yTu73R8fY)X4GyG`~>lNm`_ud=4)=MwF6x`dqUGrBz{pn9@$BrF3{q)m= zV9qmU%n0h`8#Y^Vn2=aJlkw54cMrp0vY2%I`=^kX#_6W0Oq*QcpAHC6-N z8QQa_O^atArx);US9URp1Zwr%BQ;vL;!4fV&euavS7V~?)5A}`sK?+he&WNI!%ZI4 z$4)z42M!<7!9&$rGA;I5~*KT#Ia@78g% z6Se3JfDGY`lG2VtlWCJRJZ{Fp_yj<=g+&U^aGf}A#KIFFAk@{JKYLcoX67l0Cx?sy_F~I-Qj@PgxCzwSU_tWsc05+T8$6ED)vvhHy&lIasKoOJa0nTes#6 z7OS{&g_7$Z)qz9MTH1CK_xNOu)z|2~SDmUl78n2gkqiLRupas~0BF$yoj-di4y8kS zp&DnH7{*gd4jkZOO~Yc)6Vr$$07umrOpQg_BYx<0GJ-y+@ zz=Gg0mx(!i6u*E7%77#Uygl;~1&nVCb1%LkUYom=luKAf_~Vv!{2$2V2y%OvMb`v#jpH$oqa2CSCoS9JprToJ zkM*)h`=+hA$%CF-se7IpcrmpTfE-yaR1StzAoI{j^S^A_vX1W+(HGG~w zyIkQGUhCiC{la7Z44*Ugys5{hem~ar$J#gbn!m>PB&_7lkVkh$CONSMW73In7;mN{ z^cXKRwf)5WqlA7=b|QIeON697)*5?fkK zX>tl@gU~U~b;JzUtKZesDf9`V?ZkjNlNtNHC`ePV;`d|qNkHZv zYl|Djd_HO?7GlSRjpu;fL197DAwY`qG6|T5{5we7NdqSkVkp8(+3VCi!U0gYLlz|? zWL-FGM9hip?12ACIGfSzc(oHwYrGziJJNt@SUTsNOH}u(U+Cqks4gpkd;9S#)Z2rT z*R&xr>g20=_#o!jynw84ftJAP+5Fc4p_MZ034KLs3DXDu=)@a7~3HVF+=F2@}l z1~gf->5i7pq>w>?^b~ko2CWHb=N#~P9Ix3wXLEh{er^Q6v;Vw#0C=DIu0F>rJZmz& z!m}3B4d)5Vbsp3e_warE=Y3(l8^{_A`y6)^M?LW3z?~rE%=)|Qz|S*qHCXoV5D@!1 zJ7XDWmY0_Yj$2M0>-#vGfE~CDuI;hva++4)7_a8UR#jC6<+Zl88ft{^?I;BXwGN%- za@tHEYO2G!i{MODHH;?b@URM+4{9QBkB(ox6m2+~=>9{*P(6+Y%0d~BHZz?%XQ1ra z-N-w(Ya~5h#iW|;Z90hE9gSk&xLSMq3GqZ$ASfbo-6I8P4CFSDjzF@{i6`rzK>1A`32wk8Dllipi0E|c{991;_q~DEh zgzE9aPF?@mOI3|#^RD|hsuXkZzRoC-9{`WIAs0f-9Y8CYnOcMvoN!n9ahiz``uv5z z(5~o>+D_DkHQ686ij(u;LFrcg%sVXLH#YL%Tso#1D?}jQIrRD?z4sndB9)V66G;2B-`QLd9%RAJZ+%WP3v$$rtm^I>M8@)7 zjicHF*YqwdS)VDGrOOx(pBR2xg`_ubBnv}oFQK=J(a;me89X0s0o{zr%nn=(0u%_u zS!K}>q<^-ym3J8(#zKSqc4UHKtbMF4kZ~wUSZt0knGK`bKG5Av%-(qAg5FYa+KLR8 zsU7Ra7@F8rA|bT4jG?{mR~ZR3B1JjcbjO1#>^WXtSIomBm$b@guTvedqNAHRFPXZ- zf)UDX>Inf%c_)<+G0Y<|Ch7hiZpke6#DZZQ>V+3nC}4@!@SK*GCg?{$*`&v|;Pm&= zO1N+T zxBK_8wyDR%?|!cPn(@ulPlGgXo=aVp@SfrP?0r7p*Lw?(2S5HB|AgiGZ`>ld^iSOf z42gAw#UW!h0u3%6E5|T6V*mV7P^Km<0 zx=wt)lK@dU_zhqw;@GR0PHIQ)W3eA#%niZMZbPYBjACl2 zZCE++S?WnRHZF@ZxUoia41qF?y4M{jj`&q3-v@&4m4<^c8t_LQI*U;c$RzX>+Cg&( z-SJRBPl7Qj$py6r)SET9?y%Vi%_AMe_`@`nm^T7fHC8ofb<(f>pl-?DtCqXBsDPJz zwuaP~l|{;}o`Ay?3)L?ZjS{>?fa@6iFIRxeHB3B91E*d9U9h4<8{}gYEjaG)<5a#? z&%IQ}5JJ!umIx>rMe}NYuY-eo)o);Yq;XQC=(4LcDEb@v$7S)ey!pF3xPQAI-Ra$s z{%z+dH=H%8PE}{JxCgI+pPv~HC^x1zgHe~uzg>TBX#ci`)Zg81{&REyKf`rkU~G-8 zpW}0V4|hmwUH#pEm6eqNApY3LJ{CkK@UsnA4SWrhUG68Jd@|t5I-H2h{`ljM2cY%3 z>#hqNxqKg&+uCKnqu<%@K6P724)of?fRY}ppwj6l&dAVJCwB$ zb8~K~vH`-IkF@FKx@`d5E+w>34)~Vi6PT-0NaH&#szX)#l!6&LH)n?K-&BLutOHF> zhE85vpn0>>b-21#r8A0j;Uzc#t)8hHzqV0NKK7K#X6LE9qf@`V1x3h^-ak;b(^HC-*LXedE5NJcRnckHP@l1R#6O#kDA z0!t!LI0@t#l|^WoCJ3s3@(Oip`gZ#Cvu7MB?b z`Dk`iNmdp`vyAqN{xoFgr)hZkCq1cF7NqHDNd@SSde3QVwdNgf)0wAyKpPJ4R9k&SCoEf`Z-2N< z3#WGyVyQ$irSmnd1b#0(<}nt)=;3h)GygFeXC3|)Jsd1LXH_(5@s@*NjzqQh&sN7n z(k?=+r55L)Q6>UJF)M>9+mG*kL=hqm#2_nTqjh>u%3|HTX_GR_b9Cwi?BJ75#1WKe z3^PuE7fFN%D!)Eu7Vq1mn{T;SPaf{m2UfEX>%jpKi&0lq1LKO7e{U80s+HQGuf8l6 z~r{x|BtCn-Vkgv~~X>RUK-?5w15d`NpSbc#d^M? zL|Yf7D-EBA7{Z?=vv}(wrFR6dnPJNtj=z2IZwHTz>JBn(-IsKkzB{&FYtf<{0#s$S zL!E&yJ<0;l^obFCAw0(<((ey3_QHoWK z1tb7|oVwnK+^p@364)b$3|(lCaBLeR3P&bUIpR@7)Kpa~Y2I|D*N&?mTH3Da{aTwp zOViNC#w;Dsw#+eQaD68!gr^}NM_6^*O6O=Fmf)xlj9p*(oBR@LXv2C8>+Ns;X`F}l z9CoJS0VS4cEr$j*ix`04e(#wYYN%H>PIixfl9;_?g~aijz~Z)5Nn>x~LaYkJF8=Rq ze`$Sqp7Wd*%(Jf)z;oKEI$NOCdmoJ>tywCRx z|AGtoC%h*79ey5b|IyD6&ppd56FX8j-84(2VDXZubBPvD$Y-n|_zXi>BfT zV^fz;NB|I~Ae7uuU2vO=9ImRR8v$v@mF#pC)E&@p(L60;a#_>1Sw$rYD!g)$`nK2U zxb@#v>+0{QaTEurjsr@lB00fKRMY?icdVZ7z5r}RP*G=N`u9GIpDrA{T(-#$1b78l z`L`=)kcM)g_Ayovei;i<>XVhisOp>0vNXdh18B!OA0Z;)&)Hl@ewP2-NPedGdGn_m z%>dJ2)4%QEZ{TfOfq|*b`!2HwivN7Q@8j=2?%(cEzSie?pFdr{cD(X)eXc11)~H%z z>ucP>ynp`u`9Ydje|Pc$J7s<28{d%muWmz^&7ioku`!?-7`z(Lu3o)5pauAPKi{3s z;M?U6!Ly&?d-&erJBM`_bKyVf`A0vkyKcLU&Pbl3%yN=bMD)nPeOj{fppKujQY9~- z1#H`{voCGbgS+9kp>3MLygh^_sHY7xDGovdIAkdvt@%Wj1`a2yq2?eDC zJJBB5BMS66%;G4^fHWPAtYu?=scw4mcs)j6-p%B{6GG{!cYaq%O)w9pv*7C`+!nE5 z>2jE&>4?FsIazZlWGPY_CRBKm*Zf}`E?#;-?}m%JVQ;E_`XVu1TcdiRfsiWu+I2dK zC&t=Sb@`Q_*XDioL?g)1dzLNN9nZFC@!OL1!1@|(Iozc#XazA79Xh389?3?sKl-B1J9mvLFStbKpIJdzuuj0?bbbFvx%&23 zU((y({4Txg!x!tx$G2jWE7!Wqa^L_Thoyy3b$8#YZCk1|&O+n6?>|Rxtw7U>z;t@6 zq@^qv;j0f0bpXi707%q?31Zqt;>kEhp4}*EU!!^JsAniR1*ECX{IT9Pl*pnXOI68@ zYW~t@m41FDCgl{p>%DKEtgu)9J#%icnh-(Nn64AYQ?>TQ8Twfp3j7pS^f?Lo{awG% zm#;rZTU%oQiCYoiscIc4#k}93b1u4E58d!fqIc}m<*TpM%TMjr>=GQ7h?h2+IS)<$ z0`(U&zL90|aDRuPOeBD+#`;=y(#30a|I_!YA0QX0WO3QqqME}f1?VsRWh^RRjOyRM zb-T`(KUY8g#eHN<){{`;P8Chd z(V_iy&}2#iS!bC#X4(`T4c$SoSsqO7Lz8=_9^<<^+bf%syo6ik96)$moLWc?{1RaK zY2@nu{xRe^GG;IxtuOp!qDsUeS7Kr^c?{vR(B;HHi*UT)q*CZOgq-WGPtkSRSLvte z8+1-ileQ%dqunkg8V50g>E8jbjk#tVr`#xt1DDxyj_@}eM+0PQ8erG9up1bWOz2o9Somi2t2X@pcKXC>W8^lu%bL!vd zH9U8?u04Obeyuq1Z_h)XE8PY`zj&p5ulAF_Qh9xUw{N)lS>f}7F~!^&9uJR&W$^Ft zyRY~6V{KE*Rk4k!Xi88pOA=2Gt<+cfb3cDk>@h?yH~g$OO+m`>fWlUmpk$YlRJP9W&PD zHX!!1-NF3lXB&JQxH@`*zgz3;{jP_p+b9CIeCAwImCgdR;J|{mBLU7xYipLCI*i%0 z{Yky)r1{Ds8&q@Mu%6%9q}j)@0wjOyaB~hCwm8hCl>~C%qPdl0y6}`0N}0&foO$z= zk~={h);>~#j_bc}Kdgryu2*yaKCA|vdT9MlJe3DDt0YAmo_rPnn@lK~daYb>qIU1t zt4AMyL1&zKBE%AD>kEXwA|2@IvnmvAZdH3csdrfg#z1RmtjB~>K!T1;GW-mu(BT2A z9nCmT_295Xd_JxjhJTs?kV#_EHr|)0-`)MVzVV~G^kVfv9haA@#*SHd**B>71)TEk z*&?D+UwU$cU+$T&SLv*Qu|hS_{|p>f`6^&<75u zDsc{BxlUV6nez4cQ(N@>mNuQm`;{ae(UQwc71@SnoS34wJopfqyZ}CJQJrzzT+N1) zem~y*-DoMZh;A^BlhFWYK$yQ+^0>BFZ^aqsaaAl_pcCHo7B$s4XF3_d7-L;j1*`vBgBpE$FU9Bl9ULq6D?>QPHs^&0I`5l8;MdZxcD+o0+X2e=V^K4T`DCS z#KQ|paTMI6l)hfVsqNCscl=cUw(obZR^27XVa9NG@&d;nlPDN zQZY|6ruPD-3Agt1ohmQKp)Rur;59^8s2J_K`63-kxw4s zdD3+4ORPhr+DtfUjk0yjKy&03nVE*7BOOPiv{dLkOn|KoP*2Q%1z#0-b~K`zD~+p zt8_TVU<;1@z5FvuiglMUf+aJOkf!ZzP5ST-|F;=c6z}fF38ju$$R@C_%ZW^?|EgQxd#t^MUGMUcvIsvRZ4^)$# zaTYicD|Jb+`s-U&K#bmT%6zOXE`p%2Dzy(@X$ZnXFcQVw=>i+X#3M+}x3am#IpqBk zjzKqp`CCB^0GZGb!vd0ltBu|*y;v-^;@6Pb<+TN ztOomXy47&F0iZ*Oo6dL*Zg@#Wzaosw^6#tSEoW>0`CrHTv<-j;pddSpJDR;%yWo&D zqebfXgircEx*kGkLOCFPSFAx-D&cw3ZCY>bq`}DY!|FZ?SWd)bY3HsX-o++n^JZPa z(*SmV&gPEodJ6}If4gqN4j&Fm15uaB;Lod2pJU#sL8BYdrhjh+vj&&0b9Wwp_vV2W z4ldu@ZRAhi&mF|=^rbI-Nsm4DSP(tHAkGnX~C{{Hcg17u#=;>Y@Mnwq2R z)H0RLtWZ`$r^<>DR%ly#38S{7Z7hR++FYnZcKk_~;S`7N56kSY)Lxg)fe(^$8WT6FwUl-$q81Nf= zTLIq$N-v+uiZO%mW@tV8058r+MfcV)4q=H&goVP?A8jHoC>pkZy?qm!xfrcEu?#-t z)jGAbS3Bxr^_jayRNVfenx21FEmthpDcNX0m=A;g!O(*l^O|j}z0vnZc(+Jm zF=MKoF~A}?XSP}zjt~{MTT5q*t1vN3JDT=E;bTEDW!tn1CrmOkwI0Tc{=5R}HCrdZ zG8o5%odVq?qY@1dtN1LkTeVFGs1cfJ49(s9&%Q!iqcxgAwz%4kL_G^lDwq>Tpj zv+sUU@5PDf`gi|8&2T-U1t|cf0s2B6p>Xq5Pvna(z;_wi-`v=2b&VjbGgfQuGwr(d z`6YUg++@>FI78R``v;6Nl~*!DIYkrt=D+`^-h9DYty(ct4?n(F=bv+(E7+9bq2^*$;sqY#ygmw{T*c%-HnG zk;zkoAHy+tU)Odjx|>J>$m@aJVb$jMU|pbZLYat?P=nP4_vJf|LNQ}3$VuzWPR#$) zv9=LjjQd5Ju+pTpsHbsA9~@djR<4&+fRog4*JP$a%SS66-0!XD@SI?8=TWRI7&8co zH>?A7J!IZPze`^v_5pn5J`!5=5MhH<*Nn~byb@$xL>pc>fKwLMCfM&OL(S^JY50Uy zbM)X(eyxPYh~BsKR3){N9(S-&aWnAKfZEYjR;I3>uh;Z7m#Zrcy3`2N6w6mazqyWr zYGZ*A)SrLzhQU7S`{+7-r569TAI!}|%pudTP8}q+@QOEml!f#xmEk~m-iaytLUEdo z)RV0&r$sxkZoL>wQium0&?MDb@_Qb%_Rc`ZeZqg9%RGl!EBD9hI_%3~ z!NcEEuL<{s=N$d%`EBa?{vB!q{poVJjNUw7d-M6>{C=$a|GE3Z^N;@YvyQcI>VAJe z*7n*_|Nox>{XXzjilc7}XVb(MvMu(+(hJfwh~n;0A`~IoBn2&OJ7eB+zqP)m1Q>@5 z5ktQ;KNIU2$(K-0dW!*|dJB|?jO~*0VofhA4i?kHC=89)QsLA?I6w~bSVFYA-E+V_ zu4Ch%_SVTnQMs(F4%Ad@DZn=atw=6Z&nU{i0i0>m2)77hJ$Tm9|HMVnM5b`^5WpZP zh`|_VxzXI9?p$NMwBu(w!2lRBQ1N?JL3zg(E|0K{j0144eg8R6q!p4)V!Ia0VEA>unl+ z_$|sIxc3BHHfPyGeQgP4PdnTef=DFPtys==W0&)NKb7Rm;s?tHGda3SE|{&PM0&*vEY`Ma<4 z;PG*TQ11(YtQ*!q)(&66yE4dqUq2@RJ`~XB`#E0CI<>6<>5Vtu7~Id?RYwtU7_5~m zS8Ca^WdR6v%2``&)8%Wcqa zM>RWiP2GB#7*||StR=S^HV~--Zf7IB(lSCm<=|*=Vde?i-P5Xb&zYfZn6-X>$KA>- z%T@kpfmWQbMr%ukbm0}};%G6U_J%$B?RPc;07{8xc)SW1oerQQxd6PpgxC^Ybj8P% z_M2N+kkA%gILUNmXn*ZaB~Bx}8YYt8KX@uF55>vz?h%})ra&VdF9n-Y=MWR5U?N~M|lZks!z0W+ZcivyEyB?^a zqaze%R4Q#%ky;Xl^y|B~>g#QpD$4JsUlPV99TRj{pANz^eNS#ANSSQy8O{2t891!F zs_IcRh;YWU&_tp29cJVw61r%ps|kU^!l=DgX(e+tibIj|Fk|Bpe#uSOz)QlsJ5;Qf zAG{f$L58t8t7+G9UA%f7Ch?!3ZGTi_(~nnmW|68fqwj6qNk01{8ZTI(_$3)?JM=I# znrVvdPtf!CKCKJ2MrpI6S~Y828*iP^LqFT8ZB=7RJ=CcUAN{PV`fD{~{yOEg#_F@T z{7RMc@^$rF&Q#uDk>(QgzWHFkY8DYKf_l#+GC(|9>!GxR8t*1V7FolFh^3m&;tlpA zXvU^1-iOZ!4x3c3+S3R}$K;%Zb6P(LCjw`(y?dteSQy3R5;b66Oju>XXHqH-P-ruw zWUq=(B}*6@hD5;Y#=2IWPLhkv!dXE~(0vK5YQ!A9tO1!<*{Ay5>xne6I2bnzNom{N z2DJdr@?bYHWOMtKR*|8(^HTJVf*Jb4%QXnqY~7F7{V%SEzLb-t;r56Usk^9;$D?t@(Km`F#0or< zZ=DHlj95I82^<@Xpz^fAeT|Tcws~0B_ASz5c}L(mdvQGp0C@XAz9jQf1_#6VH0(yJ zTiby3quViJlhlcKeS7x+(K2wjWzx(81TSR)eNjavj=jhcA~2j+c_Lx1+~L4~P5f4R&rAu)Qah* zC83b9Om$rWRjD-I?UiZ^L-+W%u|Ijhw}4)?z?ZNw*1FG)1H6m8~>Z{_0U5P>HPE05BjmeqBqYm z-om*p_`yFxoBWmQ-Se9JUN}#O^REGw=R42;p>oLQc#ig8IQPC@KM2R#>m8r^PT{#n zfBGEn3-^cD{53vfcyAlxhxr_2vEG-BVhWs)l!3()Yf4canJ2+|j)C2Q<<+>(^S;|= z#Igg;&5_3DKpAEMWL#od}jh{3KU>|7vrEFLT*`k z7h0d2825d-M9nF~st%pV?JpkQk&p}v2G3c*tLTIA}#grRYOkf90 zf+cHbsx1c|RC_ayGdMCJIA>AG8Rld_K()vN{eCQwt=OrU}n%64AQ(T zNPsUjPVRMz38!z;xyl{Rs_q2hkvg>2D1!6P+5F6K3p?-8op9n^{sDxD;SKX z2l)Q(bnbu#y}nNv_RG-+98cDr&*lRka~aIxJsESSwXrU*w{UQW_2AD)EvU3O7k=v^ z?fvdSr7VVL(+!|ROIbFDkXWbXYsu`h$bPX-&wcJ+RYJ_xjKMs;`Kl9j`Kbjex`2oQ zS;e%~4CYES&KQ`h_f^4N1-MgxC`vUA?r8&yr|GQml1WGUlV@<$sKcC*2hscxW=+r2 z%OjyIxpz30hJ zm12g@h!AQhmz1J}hMIS7mY#Uvpf35u^Rxvfk>WXI0%9PK5rlsSDMB&14iP9k6OLWO zff7ZsYLw0dK2hDP8vMlua7aUmL=0EQ7sa}PFqvG>PS)Ptj}x?g;C`L7bd~xD^^?Iu zF?yg;iI@O~$)Gb@dA!E9ZPm0Q_{Vu9{5bM^MP9Db#PugBKIvt>u)F280ijc`Dkbu?S#*Sb(Dk5{Z}E zr?%`7>Mut%8{0HO9M|5gTs@ndsp~$vT1B(w!B;KU!7tyTgD<0TTeU=SH~v)dBuA(x zJlf#yCapt&WiHCsa6xHMu2guIWG%o+2U?NWio}t{oB{}&MjM0eyac!C}y>#cGb^`8W>3>tVQO5Upd@l|@t!k=gF?9l5t86rS$cycX>B>B^ zm++*C+E>@D9fyemQoU1e#Yy1cJIUfS+D04B)s}`sy0ZoiQEi@fc30`%wX?LSc#$5u z@8|l+Mc3ILnEsoZ1P@-I*{py3=vD{I;4 z(1)`#3j_HO%80P;7Uw1CsVr7>w1Gopbfe{0&5TBP`$u={eEv7NC0{gx|Wq zwO`G|XFWh1*}BGF-aR)cYb^a?2K|06j$mnt8Cp)AR8&kS`yKCQ(9EJ_h<0@HhB54r zQRr&%!g|NTX!(LX{pyEb)LXB)S*wbpT7lZhF=#ioRqNciaw1Gbba=-hRkW9Dgvqy$ zu@xcOfme}+uLi7$8qlh3G{|T^ll;DagDr}`h-3evU*cWu=K+Ws1NcL4z_SfNfde&m ziC+5HrSR1^{PUO8MSAEF92B45(W2{bfyW$=rt{zdUAKIR?tJ7~MVB0}-6R63X7O8* z#r!&q^N!~|>-yncV}uN-8%e~8j=oOVqOdArTsg=%+zBxbk?oN7B5wqJh(8KFZbwIV z8H&rz!pnjrIcJ@9Rseq77u{byuXw%+=f-ee^l{HE{_SJoc61*O_fP$tdQNzKICpw} z^gL(lp`UFk-JU&rg7M?|*K?nhGP7pQ(wsSS0&An^P9O8U?K1iP{&Ts)`-aaCkNJ04 z4xi)A*BkhSbH4X`pU1At;$yzX&zQPRps@3N?(=-y=Xp+cxGG;yK$Kv=BSek8rp_j< z9?pE10@Y_6rCmBa@(kvWS~Q+}tM;h4Xgckct|EL%x`yd%v`HV-PdjWjqapQNZ{eJf zlCEus>%oKZT9$|31U;|=XRy8j9L&LQncR2Ru3dpb%?QkG+uYHw4w9L4AnyyYK>2=c zXktxg=%vGT;@rs_D}{42pc3^E`J@BOsNby|T0s_|b_6AkHOR(s=GG=+aWZSb=fsU; zKD2piAbtqM3*P}P$RK=E$7>}o74h|Ow!qtQEH{UVg~SASFZbYRlEBOLBAkaNlGWKZ zsC*I>j3dk}4B{CKPHr&S7-Ww@J6gzUy85{%^z3u@VrG+acN4BD9q_q?N=xo0h&dj> zFcIQ0?=)49L#bmxF|c;2ntkvwSa}c7z{&8xGMt{2&vZN~-ROyQqCp&N7>$;#2v>Ko zN$+^~gF#CH2K^w~R_ECENkG}4lUNH72cn3JGNIBbxWm+b^Jjk#JM0_1Fzl%Q^z;4a zh6)F>vq^cSVzB6Q+-Tvseum%Q0JOZk{MARgF|r8aGZVhJ9PZgy~;@} zS4;(na*V-1l>6RTvcDzZbrZW&8@4?JNN&`>ee4olboBy_CPD!3A^xqkb7R9w&dm=( zsa4|ir~VD<+xnQ2mc3aK`oVNe388en>(Xs{FwDox<0%rRW z>d7P=IBqFnyiEUspz!?Wmx7|ElPDk?0bI|(vQv>$PbOsH?Oh(#uD)TtP+LZ*9ujO6 zw=(Fm^tC%X^|dcQs>p(cOzLC^!*Vg62FFhCxX(moGr=Ckb^I2;B z=~p!4?D-m)S*l3QHn?v%;gwET-@}`gb=x7`c>5!|@987Zcorz9ce4uX6ZKfvcl;8lAcLJbm`}kCH5b1#40xf~lAZY#+%SQuU9=-J?j^93^I@ z=(7unHC(`$>4ASqB8SCQ{VI3}&Dr218YwN;)$ch?-}!!>-gWU8ai$}5TrP24sk_S3 zX_T7@sEBb+#PwJbSd7Hfz-x>T1XCXZY=TT};}h^vS#%}>@Foa_KYTH1CC$v^I=w1IyNAzQD1;Q36@wj=! zQze?l1o`Lj)-OV1J}rAX&P|uA>iGt(S^!5o2P+Jj3Wwp4Zr37x;T@MFhlW+vQlrdb z48AN}VxpT>rYt2Rz$?;=^z0F|@{s}M!b2SbnC%^HA$~B_D3k_HbdZnWAEw`q;Z)(p z@Cj$U$!bKZ%pAWz)LcE<+wwUxwePVlN<^bM(2SF-l@3tA65$aHMv(uQ0dWfr|Y&*f(8ZP^iRhrShQjnj54DhF^V>L7~D z7!JURw9(vIL=MP+p1`Cx2HiY^GG#yuKu^ZP8p=&JjwH}!#?itgFbPNPb3xJtBd#$f z^zlCUx;T(TSTL~~M=s<)n{ zxhOti2rC846V1uO+O#B|$DB?h|IxQ}TU$exoC+0$g~c$+tO)Hn%%$T&d~D`l?$CziTXj*PpJ701q&32NZuuiu@!(3QV5}cEUL;Mh!t-PcdEC~PyL#_Y){d)ez7qooE3A&Ulo~<42 zN+bl|;51V7(r0s0DBt`_QgSo1V@dZw>qh%K0?iFL$-I%QLX?g@J(HIE?93dJ>Of

      inDi=hMy`~8 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%0D-Dj4I`+6fV45Jadb-D zz)4&!@So+ct&?0${@*qCtNVwR_q~JlDJjv6Nfi9kcL2&C6*8y@%6@t+jcUc$XfSt zjbY8r0jRvvudp>aS6OcA6!Y!gW-%Sd!LhQgL!nq?K?N^1-E+up_+Yic2; zn{l4Ew9MXm=VM!b{#+E&iI_;uADXW?y)#cb!jE+U=7Jb#HUgmXA!o)2KZ*d#(*Rey zw%1wLp%JTIRAR5v_ft_8V*OqAA(MJNG5D8vUL&VvIV1)|nS|?GrLo06-j-63XgN zYE-5xXKt0Ol+0Dg!8pmGKJ4~UN~s4`rk66(m*4gi+p!u;IRLwhFozM=<>XCep4m-; zUXz`B(S=ro2L8KWUSl_1zr^C-IK}pLx7y>+zk~O$%hvy6vqNu|QFW#D<0VO&Mu<~U zz~;?6*|C}*s_CR+VTb+U!807fx0hb_+m$!JU~j)rPoH^#9*ebi1SL%Q3S9ZPlbx=N z1Z)w6+BF`iXTI~=x9)w-{&>%S*k#u|Y@>~<`E?=bCGCu(Dm%Qb*B;yPn625m+p3SN zwAb&S%kLA50Hl(Mmo8oESUZ3I^PfB5O`&fBv9d}^4$2s$c5?6u@=1L|KsQm&NDk@Q zXmOvB)*buZU8i@+Ll;2HeJ{7YUO4N{JMVNniiyW?E5Ye*bsqQK-Ns=yar)szdpPb2 zwGA(M*_>vfQ|sNmX6JetUs@SKrT~i_U@6)2I^Whxfx#ifez-Sx^P#ITo}qLcqOmr?vQ_#3q$>lh&pI_Um8&+E%Ps;ef)s z@4nkAD;c1#zwTHv1tit+wVfL$yK2=c2dt{%hL#5&c)*EM72woBmi8yhtm0tgPLQQm z=M=HA62UZ(HE=~cqT@?*bK0AA`d!}@=q^jD2ByAi(Lhj~jRvf1NfnUQfYcz;fOLb> zwY{FP^PK7I0;PJXEwsJcv9z7rJ{s_DXL5y)es`Culys{s%9V-6!u#R$#Qi(i4KoFT zLtLFvT;I$Zj`x&_Jsqk6pRG&4Cl~{cfoW11*Br>oG zF|1ymdkmmD!ZC-%E&;_=5FwfaEmRj-)fx0DKhHgb^w|LIHjH(6I2CSKl51YSG{cs? zmSS(zj1g~2GS^5wmi;^|2V{U}Otqw8I5bB(tqvneU23tt+mUAXK5ce+UW?tnsMpS# z%;3ozuny|o=O;_>^Bn+3C>oYCD*X`am%}~B%CKAlW=69BqqroK!AkxNRkV}Z_vsSA zy_iJ##SuIVO^W}^3LFJ4K*C5Ap3VcoUYj|4Dpon@ zb#~N2AWs!8ESzHl&{F|~1D!)gufj^$VjW(}k`fml%bJdb2AZahZW1t1_{gMh&rY@} z!BLx64d}(qn?sd@PHLl*%3}k#ki%h~J#pt=B}+2-_=sce=lpabD=td6Z7Kup$+GfO z#_j6&WA?kP!}gU6vh1?AVJ292$cbyNIe_P2&OxhrXop=mFWJt!is4Im2BfpL>lMnS z{-Dh+J}zp1-&V0%?8lpLv(>k~ZQHPdb{=TOCkpt2b}Ry&Sd{P*q&39=crMTfr4*MEDvXPc`%~7} zAXY7+Q%I01aS~VCwM?nk<=pt%CuQWsLQUo z^-eq3K^W5@ZN$0HzvfI^@!*pv5ERJpVmZ&`S&b9k5XOT9cnx5A^^iyyRm>~>Bu>E! zuZRBA%`=%g-R53iWV5mt+wWf+wT{*#%OuvfuWKuvDQdU;*Ufgpb;sGedsi|alK~$o zC(*FQv1ASfhy`X&mXQ9;ah? zhBZo3D@qTcDd~eXR^GSGM)Jx5twB4`Gi259kPefWDX-Q!XJf5?w!?bbi8;lhfA;4V z+EcebNt+`9aJQ!%1%+y0D+P?l0RBh<%^Ndut>LqwZwp<0AQ!JBnl(6 zruEsi#Z~q;+{^POmD|j|Y@0cpWNR^{<|C22rY75dlDj0c7Zgvz)741)E((J@TimOY z{fwXv(*}MCT$*GU<46>lqWSPM3&4)U&`!)@nzy(<&5dz{spiEvOeRr06)MZiRSUgp zYqn!z;2tAAJl9-=H;Ps!9+o~>Is(Oo%vT<}^7eae-S2)xq9}?0hrasUS=Ro}Gd5}J z@pj{Nr&%sl?wY3e+7JHnN2^5cmEmdmkIT-ss#_-6@1A|pHt#!V)A3~F6il+|Cr-8} zo_ve*Qb~~H$jqW3pluc`D>JRg$NcQ=v4=05Y5#lHDRx{1eTnPIfQ@JzgAe)u;RARA zh_{bnAjo0N{Ld5LwpE+9+S8A%wAbHWXOBMkB|HLOvNa7Wv8LqUVlyodvrqtl?w-SyNv@pI zyVkkuT??#^sb?xVDetLk01{|bA9TH=+F$Zg?~;XXKXA|Qo>%YgIkc@_iHo~VMkE1r z;R(s+Lx&F8tXZ=h5G$jULJ1}B71|)9n7bg6{~xyA1JJIjO#6RNyXV|+^Nxge@ql|?_i^v-tRC*8)!>YUggpLp))0M&1A!7>36+_1y4XhfR-yY^G>2J5_B7O9L>>|z$olFqA4b@!pQ^#N%CZ>qh ztX?Jo4X;iJHu3m+VKQ@hQ2{c_1PI0DBWzMpRhc!cUXKY#KxX`O)0o`Q;DCy`YY?e;z5kFnDDtUHl6?h z)Y~nvzLL#*qqSm6o5gfJ>8Z4e#-;RQlJE>eHZ%oph>a_UxRwREHO}+7gXKQI!dl3z zAjVLWO`23OidtBbnsi^m>X?{UEk=Fxx66R)w~GGONB7V%O+tO^Z+%qMrWT>jsU5YyuoS`M4EJ=S zu_7ifeNW2t+Di;k7HhOBUEamhYoZmQ3P7e5-cOAi`%O7B+<>8AN7Cd2oEzcQbj`BM-1Fo00{j=>hBJ3Q| z3-Z9q_*5Z)=)h(`ao)h64(x#d}B zc7^?Jq}X;n8?}wuL-zO%u#Sa{Zzb~==wyMIIxG}Eux+q@Fr9ckGrw6Nn4noRq&D?{ z1xCsvG}gjVBVtBJKMXVD#fnTam*@?aewYpz<2l}604<%Lar5CNo&uUNSB$!sxRYZr zKjgZF_{MGK0NIZSgQcA6k#X?9ems@~I5J``_W*2D@{u48HWou@3}dDyoLCA^WzTHB z`8rz3Mc)ar^V{jD*A|tUZ9x2PgW;b|k1^JoUto@5k`<0e%mdR2C&&zt93F}M>T$H| z`x9vTUd^`;-XF7%JZ$#Ks}gqK_Hz6Ed9-89*-h}OOFukoHQU(IMzI1(0|{Pk@9#-u z@lONRM#!z_&cRrtX&v;OvAw=B`wzUcJq3jDn+n>`Lp_A8y5-W~egEIjTEp^2VzJg) z7>E*vQpO%fo()1LV4wbGm|z*Qik;I^R{`W8kP!Sf`2QxFS<30U~&yN zk`8&*Mu_7<3(cT;8Rs1q#_Zh)zP}}oCIDQRm;&T(7JwI%G1qwzaISSv#gQ_Jx6U%!p_^)19N1hoCsOrHuIZL_26j z+X)qkkPR)!la5tVGQm&YD=0> zPyk8jI@4zXW${7@p#T}uw1{}QbVjE56pWz{Eogu_n84!V$C{8K@8DA=Q{bf28pxA}w$L_C0lGLGd6xJ5-Z-BW-C)<2w#V++aI z%6~+3M8{;V7xr`U;>8Y)(y(bfCD5pjm`eS2X_3ymG|K($(kK1xmW6c7rDdXlI<9Zg zcF|DXLkybKGoFDwiDqvKB8Rb9tN&!nO{ZaqaHQQOXO{o~%mIU=55 zUb*Dfzj)XgBmG8K?jE}I?T(G^Ck?EM_)H)7)fl*KiI1EEe&*x3HSRjTu(eC|IPSKo z&|E4`bPyfX;HWsi=YL-Mtp@Z_oVp+jTUuK&IO>7N}z9 zrN(D0zY!;h7oW6qCr{cCCeIu0xWn?nCPk;)*r-t*v#}Cp8E;)Y0omAQ;l>Nd{&D)q z340#Lre?HZX9ostNluN!JeHQ1;dGHrO28=`HGFoVzn#8f4n*@hIPkjlwI8)bE7n*X z4Oi}!#0O>Z=8|D6Kmc|hJj=lf=?{}ojFMjchjs&WS zEU8S3L)Qr|pqQ+xtNTbo6zvELx(u%- zi5OeGKb_M%*S+*x#hoNNuQr?sc(E_;HSR{D{<$CL;*0-O@T@JE)prm8--m?%uHig8 za0cWeL@r$vhSQm6jFk&q_X{CNWYHD|axCRANN97m?O0{$2?7!Y@g5gev4HEm#0n-d zK`t8J7@Ag1{LvBcMEPinnD#lj1>lHgtZ{iE{bpgaX(x$ii1EpqY6CXVK4Fzh0#*zY zSU?I{#}Nl6;i>oe?4$n`vmfop$u3ArQ}D3Sks8}nOIp;Wt+oh)Sc&(ymk>nN2&5|0z_{(n6&ZC9fKy7%s4m`gB>c`$i}z#AfHm!KKrKnL;_{ssot2XukxV5G1` zz9ar-c0QD1LCIoQilPnlz4nnt3#{JqLl$>_?T2 z_jW3e*vreTg&_Wy2Nj*cZyi7f3K-{5nmBwgsKJX2w+}Uz-&z0oiNHL765<`;Fqbz$ zDoVdCUzBZ6?~d4gE4{XJeb^p;I&B}l4XD76Yb<9DC=nY@L?D1USq0EkG0&d+-iYme z1R_%Hw@R?8&*Q*1Q0TMDn)O6cz^O)N`B9jrlDHk7KDS`hnD?O)92h5TC;I{JWo*TG zki-05IM!=>j(y7_%1%UhCqKCOV#1fDXm4V)A0Y}&7|v~=25@?qA_;?t7}^#OPBgqf z)MyR_Ws3R2Pc(fD9Rh$8w0;CECXRBiq&uyBDVC&A8Hz3hs@ZCKO6*_Y2Y>si$L;FX zFb~zkHrfluzn(EngU=f;Heci+m^jGbPfZHmQ&{QBv@vT@UMKtz>1m69;F}as+}~n$u~M}_9P6) zVwiP=v*^)tmg#xYmK1Ka#-t)`41={C05d&pmz5P-dmq^9VIT-ArtKVB%2gLSEFM@z z*e}*(6OKydm8Hptz;5n8V3(PgC$}| zO(T{Agh!Mi!K$$RA=PISC1^NV)76y)cINd%wtm|UR&}JuJc~&ijG$i)_SAz<#<9*G zTb;d~5OHi2tT*wUK}8BcI15Q=U|-6H0dwe|PA)76#5%(61(QZyol_ktdiZ7=zF00Y z1sBPRoWA7P6^#zU5aOWAdx;6Y!+sbb9xd@DaClyBzkA}m{YTv{`x0=F2?W&RgqVwU zrmVTKiUb)xYrgUw&@y06iwjBqkpgEtX!XlCIzm^97`sQ?C7=>k@%1;EKnNT-u*PTU ziw~a%VsR&uqKXzlo4a6x}r@|)`-^VeYoZAzeP*jWBS(LDlScvc2i8W zOUFgWT>7feUSd)Ot#hvty>n@~=(EdUxox}c>u>kI?zQeQ_qf|P-Ba^f&!hP5f(+`I zn0YbMn*ZVz78X7C!h5;*&@uIKVZU@v$5h-tXf7|L?>g_EQ$1(B^9-u9V0bT$n`520 zctY3dzD|GKZ#DAvqM_%b`T@^8opa?t-N)^ZXn`ZVQ%}ED-#NdaJ?)EPu=SsqaW{d2 z-zP!|6X{_=YVir@vsV$$)^G!tX8h@dls z`Ds0K((*1RFf)?o{U5#GKL6Pvxs6Exyd)Br3t)k;Pzi@JCVW=%vd#k_Io{qWgs=n^Cuq5$B-xwxr zR0DWVOrT3^X6=zb-DdCp#Y>p%5QNZtC8uG&f`G>f(d5VRCzoR}uke4Qj;&sYnYR+` z;4ou^gB2l<0yweA$uAQi79^86$ow1VAjL6|l>EgI0<@$3Lk4~tvwdC6ItNOa2N1;Z zZXAy4ZGaTSDaHSVP)wsG=)=>$31=r|sF@uZw1;mSvKt!%_NiSfZ3N=`o(;R~t5p!n zQZ%LTKdo(Ox=vNuR9Io);&#u9uzfba!&=aa{swr&iCt0q=f6}`1T5ik$3M~uCznUa zI4@rL%4md&!_hVt!K_3An5|hVZ*9kDG6_GI%bJ=&LozlqY}EuVH?&ye#luzz$aFS_ zdHN^|tv_X>n+X3>OgJ=PI0bvhECs$XQlD+DBQSZu57Gz_Veqlu{AC0# zC276k30oS)G0PgQ2dAafV$8yLjfaP3>>$o_A8mvIByE=hx))&y8G^9Yz^q3@^H!3) zTsBQMry%=5P60w7;fE4bzkmY`A(_7Yi(bOIDMS*fu#?2v<)z>KwSTkT*PgMx zFZ>r91$!`72*pw&oI66ywE4=iZ4N&IBT`DOUg_?#tS-VO4i;H6!e<_gae10K6z{_^lL$1g!*G8b+%Or~>Z)<#At^!>9|U$F z2p=s;u?FXeTewaUR#x2 zWnMx@okplA3{Ap#0X3Uwvyy%oAcUgwM2)o$l5_+pnwPyS3#Kv*Hg<-!$M#}TS#Q9c zOJgLh>D!AB8mIj)g83o$ld#!oKzWU)jBXc87!SFGVG~sA-Y>Cv6yO3GNN$SH)U_I5%A zg6{>(o?pa#!|5uJ0~3@}Z5>0bF$DfJYUYIKvb4nraG))4?&RKOZT8yZUDnVyVQs(s zhT}jT1^Sc?!{PN|ei5BSz{#f1NwnbE5t!M?G{VCej9(6kAyPJoLS>Xh4c?+E$bQ@o zoqNG@aXu7nLNESDLnpc+9}Y2tQVNM#k-|r`Nfu1aS^0qo7b-?lbVYStdL>$;-@4AF zXQD|i?b2_3L|)v7xbzW`i8bKLEGcUXBGUuMUPV`qywk)l>m#%Y}D$zkP zz%E@CqbYi;_C)jb+ok2At(qgMt2T6B-CutTE}{F&imPM#t?TryKIpoIMRZwxxKtcF zx|m4TuGR}h^jsg+RZ)AoMjst{I}_~Icj!2ER9_l%eXBU_IQLQ8Qr^tpe_=lys1bG3 zA_nwB*DSowi?UPKX*uXVT1q-EA#^_5-TeEK6Pe%xPVyAppNc7jYKLug+MJI9F^95L zDP;rnOYQliV1NQ>6udZHq$C+ec){TCG~k6r`KZ@N$!e5sRiraal4U0!)8rDQz&N4X_&pk2HeosSq`)TSSKxU`tjZ{Zlm+g`2{!@mwSW|eK{lEa7B)I1JM`uu zhne&t7Sy5p>+I}w9HIW~um4%^&ncSRl905RG}*;83a_dntm~b3-sym^@4N3lr;eUM z*|=VQ`DJJF>%62oIfFg>?6ZzEDd4!wC#tLVo_gvjhe=i_4Kd1+2o+LG=cL`$q}I3y zbQS9l`sB-E{^9fBHb#1&GC+g=Ca`sYZJme1Gp-{$BV{C8-1E!?hf{a zqy`=WbBFSmTYVGe{Jgl04I{nf@m_J(^Jl^ELD0q~2^$tKD_~j7Z$ALJ3(aCP~-sK5< z@87oa{xbI1;Ees`gxR7swYDg?&*CsK9TSxnnCi1Nt0}+P_O!{ynLTlOE61Sxn$4p;oAGmH@ zfCyS@C3R??+8DSk(wZVP{8uMoaE8pYt=T3&NZe7f+!@YlgD}*&UBEJ6*b2sS?Nk&E z0vaaNgJ29{SV);^ifub4ga5p?D8yRVFATzv7{&qc+e9JEKJTM7Eu?dfVPd)8H-g+PwXVNQ( zKU!?fFy&bYJd+67lVS)Kl!za{|2k6q!W#GH@NDdBK?rwDuqDC?`TT3a5+AcWcdRGx zc&|7J*uf*@Ij^j+#fySYoa!M){FWt4 z&D(RzN~;&!pMUyc`_cEl3RYRd8&(RG3BE!!jVJ*aV6c!tT5#I>!rcf9>x*pF$_9Jw zp(Bh@o}H*1Al7O% zE+QyCl$z4Rz8p{nMR2Z)2blujEaD|?tupfX&=Lnop0S&R5tsQ(2^BX9{&vzffYofS zEwdvi802_%V@IjA%(R+!pa!VStPPSy?|4=>$x%qy!eq`y!310UE!*Mi9@kma|kOZ?@C2h4R*Gm4%u($EqKh-dcX5#@E7a8U^P zT~EGX)mPp@bckI}lnFvbGxcG}1XYtUX3c5ZZHh`qhk zR*-EjF*6NKZemV#+qvH3z;B|qVaZLGhE5Eg=$jZpVO*tgZE9+Ao3O&6i=3%Nn_WIY%&F?BUENRjmCuUkzS?u2L4DA19dnp7u8|*$OM~@X>bGdLo=b`^ z(RNvP#jNUY^;^%Nx~k*$*Bv-#cF|Aub)MeNpV4*tD0G&NyG6(5owxMX=9$_5KRT^? zqU-wRABWL(9Ir05HQ%Pr>$p?iwicXYC=fN=cGYGl~jSLU0$jN zkRKbH4b600Th9e6Z>S`QJXp{yv;$~n1B540{`pzjPaxHM*kHc@#2ZI8Gc{))1;UGGZb%^3wWou3)jq6HOb4m_~Kf3#d-Pt`}`sWp!(C>N;}4 zHf-BwyB_(GeekpSRtV#g#$hHK2bFjLNgBMRA`(Qvw;g|Nziq$b3Y#G%=h@S(wru?- zn`XkFx^T|kcx9iRIniQYLmT=xpZbX9=V4-AQR{@WSh{8*J29^Tm1VraQiCL9nmrO2NKsu&&wV2(-rpcgtXd#Qyl@zIaXd&vi zyBWBPK@-BA#F{ATw-&t?x)!Ee)P{SF`>na6-)}Egj4O*ckmG

      =czYw+4fBQP1U#U+??vj=ze$V?T2Rt#s#(NxRCuP1FfbkjyBRdhy{)IL^7?8EU9-b-nD1eKhHX^uz&opR=y@1Tw4Z(^VX6~oLE&FnKfo1WZh2wM z52dT-n>uT@Z-SFYo42PErmxRxmR)A;=Lv|8!&qR&Mhll$;f5 z!QQn6Y-qe6cucXK+1F~*p>n&>GKG&ow|(Q&wYL492W)Pv+x9&16K+l@FU-au!x`r? zWB~e?KJFFe;;QB(sQo)EPG3(b>5}GYUB!Kn~%kHXhU^6Gu-L|+c z$9{7z<`8g)I9?=lJ|0^vQ-7vxI zWl{RgJ|CMRRA6%h$$!wwj{+MZLQ90_%K=7l;lxQNdWolyIK(iL=@GQ_tavZk*s_5w zM1jxw6MaN9DI{c8nN0vcTDJ3(cJk@}3x+&yvvX($aVkuSo?!LxA(UpLn5tin9|@S) z_JK1nfxtwFL0wSVYX=`a$~;5aRdX7FbpH7Zh}FJfi8DOTKcZP;&O|e$K^2V>y%Al~ zG0`y5B8|Ifo{Fo)QT<0AdBkzJl0wO)WvZ_t+ADe_&wfGqgr`-;NimM1W2z^nR2pmj zEz75z$aGIJ&bnS&RMq?0&wl36R9QRqe$|G~i!RE+T9()sUwqN=ff210L#m?t>$jds ziYwhm$}3@hbxwSPGH@wEk(g{1_c`2W*EmR{yRgW~Nn_$NbULSgiZ|2jW9d5#sQT)D zR7Yk0y0>Vzj_F!=-Y)#DbGpAf@AbD+PmCi=z->#%7iwfLE)yNTR2;!a0v$zD+qsrT z1Xp^i%->5<6w-?70Uc94$i7n)6~s~BvS7rIsBeDiO6b*i`t>6V+|MMNQ)y|H4GngK zIrLh8PrsF+-ONQJHq+5WdHKr zpW65S{ag0G|M8#jg6y%1cYF{$-iAJuU;6!*8T)ns?ubI4FieW(GURB#fCbl5sEHe;E93Uzw zh;;yAC!aW@A+&LCp6j&@#T7WMlb3#C+Ey+{&_ZyE$FL@lvMN8(ZzXt0<>DosR{O+i zJ)0sGZL->)IoLt2c!(Q#)I_Mj$+mN4B~%cC(J~Ih)srCxYt(MrIA?2@uxWMSm>}X9 z&a*`glXe4)ap-KumM;N=7d}U9QL{k;{m)Ef?18Ib2Rqq(Rsgk_WDFU4KhK{9HB+W6 z9N(Szl3w_YXgeXC`sWw;rLp7uG#bi0lr&_l zuOmgcDfXbsl-;nN{Ut-JXFRiS|L2Xiy{Fe+IkwbCPL#0#06+jqL_t(ueX+}C3d(W# z3u8e>!@Qt0V#3M`MXhr+>3Po}_~2A`fWBve<;#iWS_Dt+sW_I4wO2XX3Yns%rAmND zO{Wod(A0*p(8Pcu1TgO^Qye;S#}uDHQ1Ilew2yt@7VxtPJ3kV&)6>f>(Hgam8PaAG za-#DB3{v3;f!vo^%d;?>1!a~Gu5oc=z?w*}dU|)Sz3}`lOO%J~s?FP&8|`Sm!qynC zwF50@tP~B}v&4Vi`mXzd1a#U2S>jO1k}ecT0P{{UfP<{(Os36}tPRbBtOQ9hVBmTu z$6+9)OGoR?`;b{%!b?h~eSQmLEaooBdrR?Le^hX0O|34sEcTQlEMa=q=&4pqGoQ22 z@CTYv5&%m`VhyuQBMya~R-JPK$0>vxVl{hM*A3ue4xz!irmVq^!;}?4=m~s*b`$S< z1js0O>Mbnr0vO~73~}x-YnJ_feGctId$f;fUlG$M3~Ub9>u>Fi3Gml`w67j4eU3(n z=TU|;Jn!g7J{rlFEwHA-mgd!hA&ps8;f#5!a_qoJr~PvJq|x9FP1_BhdY?V^tuFz0 z7_>KDJ&akq)poyf!ZG(}5Nw0c9WU?LCyZ*0xUZP(y;v(Jr^ZMs7v=r3kpkJu8fV|@ z+{=8xF>!{?Cac22NUd{NBNF0vfCq#TOfzv9HufhkFq?4x)%b=0p+Hts=CLq4gPvZ` zPS{Fdu?g%hxN7!-Q!VFg24OaoM<6bsc@2wEf-!z2_`)nKU;XM= z?a3!e(T%c3G*a(b^u^VlYAnU5iq1ARHabkAXs6zb7?zVKPdcomsu43ky1wr z8!4N9@rz$L!jWjLm`G_g-KYj)N_AX}?xT-B>OlEE{_&4H{w$)STeog?7)~*u>WliQ zHpINDf3n1ikyd+ZOLSI>CDBmzQ`f18H&7kHAw-u&vt0&P{Z&78t$Uq*>t15Ib+3hm z9haBD|GWduCy$hh6n0?e+c`(y^bG~)m^%~ssS6wpDM#s_oqg9a|G#Vpm)rcH!ZdeOBAwL(@JPT)m*TT@IphcnL zYF#DK>b}|p)F;)^_3EeYqs5~0nm7wL3oRITQo85Wu8!%s)t36DHr&OfKDrZC^>keA z>$9+IU_%`51dq0~$`T!2%v?;cxo8F;I$qLJdXdmmm^o#F)NsyW?jJ+*>NFA*r%KzKid;l>DcDfqap7KiP6Bn|~Mj+%>b%lh8Ic4Yk zb=J>(3KIUs$Nj2u$87|xW@X`J)=y%A;Vy(2=H3wRq_`;MFiv62{Z-Wn0ojxGLbut& zyE3+J*{oIP5wh)k()M90tE$HtCO(8#m-L`GXH}uD+nif!OB*m%%@o^(UyoYNH89x? zXerSgI&oVyMre!_U(bieNBAElIwWGlG_H8H6SX z(~Rl5156fFFKb|wf5**V2;`vEYu}&9vA@nOwmia)EeB8DesHgOutW%>8ez_dqc$#^KmK1%m4UVDN5hDVOM{%FC!SiK?FY$!2>)Os6|E2Vq4O%%#J|79=LOZh01_pcpB_I+wZdX?L20m{rksk0F953 zq6s;sT&G-R;^6kvV0%MgKC{r0 z&tlRIXEQemrIlb_dh>`gi_nzeUcTB&yL#DXv`%SjJ#iWne?71l+)hjCFtuZe8fEQ< z7Fh)_lTb15yqriZL#M21%bl2bTkQFk^HvRnC0w$EP*SaS@ad-rH&t%$df)A6z{>4s zFZS4jH#fr_WZQwgEmi@1M(ZvIMy0SBO>_n(;2hd$%+3Bn#ZiV>cwtD;yvHW~+e-2` zfv;vQqBV4^X)sHQ(2-<)CbZ_cLYl%Pgg_&=u;i?5vRGHY%^Yj901;gxygx7dWZ{wu zn`2#M*bh_ei(axD&UH-K@N+-5H6K`EXVKd$drp#fcv)Vt{kH3X-L!nG<(y2|WLbi& zX3PiXMp;gUot)~h3K;FgOwu|AlL($@OtD@J#$l3SL==NEz#0|SGy=0C?Vk1+3FKlb z6F?CX2s+x607f~{O8mU*dW6rP5~l7!;y<_a67RH_nBk!o_Hr+Y3W{wl7P>ouG(6PV zVz;ecYzKP!ujJ)2`zS3UJY>M6652pqtaA-2RQ{I96eh5Ywa6>+3>Mqcdp6r= zKYW}0#aF*+FFxI4qdgr&Fk!EU9{Pef_2lELfiQ#G3G+X1lB|;%XieK-FAG`99y#OT zgjHB-(UYegOTZk^KP#w)E)(5^NI(gM5-*uC^H>klv+T>kJS%S|OkHJ>wI1)ai4Kxc zkS;n43xF&UDXd~F2evWxDR}M>jQeN+u_9UUFcZ_!lwzDQA}>(pmmC#92^ zVKK34OV??wiYAL*s-G^jL41LZsZD8<)uygdea#*H)-&lIdR86NIVq)NSzTBpw9FUg z8zm!QkLz7+rpC){bN)Q%I6pr}=PjH%?$ptK;IuJcN5?ti>=EvHXV>6*6}2M)%xz2G zOl9Y9o!8$I@@T=St7B>HMHjEvc`>L?JAAvmg7C4r#=TC?kRH~dtVU|msjoGuzga?3 zX1NY^DbX4J^9ws6#?2FA<0eDTrVUqE0dWzXNvr6!$x#OMRnpMaTHUHe1gh?2p+dY! zZ`s?`jRQvkn8YdTV!>o1{mo6s!N&pSXJQl<)|d}TEf){jGz+Y#avLTb0M}&aP45lN8ELqGACp}*f_3;#%Ga|8A>2f5&qBLH>I9=dfUO?_> z3!f)xLLsJQ9*T@4l6K_Kpl6e$rHv(-JqqC)a{ATZ+X*29`3C_DurWk1C5JPWRsv)} z{a#pHRlcMtO)3ql7MO6ZT7c4as;HhOtIlaLYN2YvYLRL3>$lE{X;slASKst9HHmet zUbL>&JtPG-Ha0pEqS_Gt^+O*bpE(m;(x=*2Uv-TZv!q!)x2{)TwSXN0z{1wzc0amC z?Yj)?{N!`Gio2UjMk8OO1q zt~pzEJq*u+G6%*r7-nPhme?7r5&m5WK5c~8Y1&|^bKR(^M`21}L_24RiYmM;Fq>7) z)_V6+`(k#3{rcx8Y@%YBRX4A&_Crs?NP^jo;AX|)u`oaI z1vsh^;s&>;&RK*~A~fVI278U;F$w&sW}K>pt_J2p*NT zY#q^e>#=gJBGgpZCYS{>#gd0O(L+I{9`tgi`PHVG7`XR0`e4REux@gzhjNbB+lCM%PEcN z7R4cH4yGg_lfZ&9`zVf7b*$kEgvMpHq+4zv+nO97d#zv`Mg!cl9}WIQ%QSIFN3E|Y zjv5<;_GO4mz`r?THAmv z`Qp9y#+i02En%+(s(=h*DG6M($wtQN&|b%$Aq>ER{cpjr;rxfm7y=9(cfK783-L8W+DAU~QG^7XcG2difo`><39e<| zo4`SnKx9ssu7l@VaJYQKwqCK+sw*0-vz?HZ_y=^6OrmcfYE_Lz%)>m}ylR~lRw8IF zm~x^mqFeG%;wL#ra1sc{sY6AjXDF`6n;^au*j z-{0>rouYN3iMo$|>stM-zUUe;k1pMo^;B)T?YhoiQV8j{7+gU^wG>$57(OFl3nx9Wl?fLU!>zKpR z{Ht)5J(#*8IqV0T;!Y9GzF2p@P0lgrHIAyRWAh(phEsF?T3zorZmAweRoLPk#*+)? zuVGbOY~4ApYKoPtv7fhCT(tCRpK{K@9J4*MaNx)uHH&a4pgQ{mlY_Mu!=vKR@mC2=g>JS3AR0j&j4ADHg8k=Pk4 zFKCp%4Hjg;&SX}a!;yjY3#X5n6lOG|c(R1gNn?)kg&J7E`09oMtrKrHGuOoN5hsMm z@XWLo<)H3IlFnwr2#Xg3|C2*r`xuZ1FJ`hF2(AVyjfpuT4IT4-2H3(#1WtoenUBa&Xe)^GQ3w~mhMx`pTT4Engo^m}2+!YoA`9g7fR$uq&`l0^E)(=asGfEPNkJZUo_ zTNNfcAI#J=v0Od=8f$D=k3$e)V@?7CAd{Ec_h63BMJt%X6rF|vsaxc?;qg+!90lw$ z!lZ@sCT(I9CH1(d|SMVND^RI15IdS@4M5MUAxpK5B$=6+tApOU|`ApAGc%Q{JAYUfoA`@ zSvwNJQEC`nC|*us2>I~LxGgUu2B%&}FYg(}iC`-}2xMYhA#7Of)oi?&pT`CW@AfWi zhzm+Kn7;^)kA9f?U2Q$~wUrwzz9?+T8s-ymErVCzVpBC>($KzaM&lfSAuX&bw+Biw ztt>Hn_Z4^9HDCT6p7sE5(c;cwipjuKFmP6hBaPk?Xj~Xs-W_ud)C1a8%@ogKy+fiO{6222QnbYw6>2sO<5y)9_# z(TIg>(E!0PgY6B#>2AxzyPtFn!Rt@a@_a$`L0cXw{L;hIu1 zsllkA&6PtR?&Ulh%v>C%FT^~?UhGGhPAWJ(ilzXbH8N%UnVa=RWwt4|iv3~Gy3s(+ z@ric^p`TW9g)=V667+d(Dc(gw&#)FH2kZ8L;a!y|!#o zon1gsXgk$qW8L%#;b%j6!oKr&57`I5^d<0hIcVHv`KV#n-vFeEIm}v@ZrS?qyr1YM z6c>iHY{s2433XAsEmdpUe4yv2xVAXA{x?lcp(_xw=uA}A8$mML|6ez zkz!wqf{hGL6Hy{LVKany^AmG-^4wWVKKHaGKUr@@n`-Us?+;p09RfNdT$xyAKRI>4 zs&LdCY@f02lC*6)4Wp5s033!X`SghGhB01^wcyU>YwY0>zdd*Wr^Nr>V;^45_|dNr zR+%Z3AYqvB5IAEA4%)wFnBz`-*8qFTMWQOpTp9;ZWec0Z!jl}EwUb!iR@F7&uM1=4_`g`o~@;XL_Adm`_JhAw@g zI1HMPOk6p+goO*)hi<#Z{_~;lkm-y%Xf&fhCfJ;@2GKq~8cZ&m1eWJ*-bk!xqGNb~ z86k9ei`aMgOyfA6Mvw`?+|L3lBImT#uGwnYB}I0w<0VTJK-=>c6OR}g)8B4hG^QhG zUZu~N$%(n_MYt^az!moJKir2^3QHu`l_XY-1HG**E~XwYsY5=K6hH^bikvqMq) z&lir{s^vIBtzBY|y-GGnEL4gD5`7s>pouQIv}hrH z(s9uneMI*}4@KX^*oxkYHi{mr9ceiAEe)m^NYO*lQe7uasY|~^uXPV8jMTo`(J`fN zmljt2(S5{B>TiX%5{*PJPvV=D**XXZl+ohi3Av;?~oCz=UzG(b=bL?AMQ!r$#bX!SpdLMN&dJ)Z8t%2a|NQl;D~cmIaQ-^4 zlqE3Ij-|-q8Tgxv^;1v*mZHrs` zm{0f?0vJx>aavP{X?N4E147{g|D`J5G`2HDLAIZ=8=^2X=0hSg)RJv`Tb% zP9g)F2bmVY@DMSQBm@fR9`yk}XLH5h0x)kbOe}$heM3$zXvL~iirFA9nc2Vt!lg?* zfQU{IFgm9U?Gc1&4pS=h7c(G(O8W}KL@X6z-f`XAikMJMEKM>^O#R*1*yy}CNqG9` zm==&0k0!jn#YD>Nuk#vgOg1xpL7Yc<(b^ji|1CXD-A_4U#;!F9c01@7cf zJ36lys)gykT%FgV(?rroi$X77$F(q2S4H>LF)c8i*SGGiWA3-ESAAWl5%oO0_!@PkKX z-l0Lli+!#aXEA6{xEeyt0#3ql46~Wcz-ZYz7@!3uf;Q&r8?UuLz3VdDeC-WZ)P!*2 zpCsMsah!(O*a`JhRlL@Ggd<9UNA&idz`8&NG5E!TGugK8odx#6->W+Icmnu{7bnc& z5$i$|+j?r;YSD^U@)47piqI#ROn498o5K6T4D+z*;u!HF@u+7lHou*A zIM8)kw1Blb8Mc11gQYwq0x7Sue%`%OhGwz8H=vfbX3TpT1WFuJ64}gSJhi=g zp4@6C-&+G$$oiN8PdSktv0r@WZu{L(u1)7m!gvO44OYxq#zNWMiUYOmO=Fm$A&AA` z?Rj1gF-#Rgi-^O{UK1?N$25=UF!OCw6Xs@2*r(foWt>S_)iUse(um0^u6cuvM%&R` z(!Ua{P71MAGHfTtJod!5N6dHlRmoYX&X1JCQdGnq?_2M(NL#}LbD9VxE*s_tOipwJ+mtiSY!Ppoak#J z)DlSx22lhSHuJna)_-`+>alj5C)!8O(Fyx1g4s7)P6O*9=>~L&?b_LQ)b}uoi~x+Q zmq-d8A_QoEQbHUE33GiGM@AfC@SPYz+j*>GfN>xcl9kyjqy2WczuTVkP1|9FxaY5X z!2b0ZTG*mWJBkz3+Rtyov6%5XLiWRd`3SEP2P7zPggtH!>Y0~Cj9|1yj?)a0Y(x>< zJ#OK+c@cW`>QdU~9~i zj`KKN;Q?K^rpjg~W*x#Ucwd~k=V!i)SSN7a#AZs;gMblX4~IJd5yUDEGWY#O6})fu zb~M&(`j){$Fk6q(MNdF5=$sYX*h9cKj~%xFj)&eoF9DgUGS4lnlh#of;R4(D&9Boj zaQR@@^T6Wg0!iAme6@9-z2HP7sqjO820QHV3$NJWr&_5xWk(+$v|l3pBuToVajIOk z-Uf#H=x2ky@a%IahrBSb_c+h3e?&t?4^>3F^qHTt^VURJBE@K`j+jtI1Q703^iOn7 z^igz545WA$)mPCm(M&P5>WA(ln&j3IJyc!MXV*_e$%4eNijIoTi2)U(DO#>;T?Sd# zNx7tUbq{G&)vn7A=(pRZ=%f0t`-twUjD=o6_qiZy;RbTg3eceM0vHJT* zg*B|U=RfoOg6eATc3}i+TOS?Q^QcJ3a%i^LLe6P+>bzU#k0BpvPIBD&z<14GKQFw| z3h#IR8u6bh&VAG$cr`JyZlVH5c$NU|+@I_9ANO@It{mro6jAg2(>eLT=)CG{JxO2` z|ED&cesj)Albf6mCF=4aa`+ej;(uw+BQSkQTe0abVrceT*VuWmfpV0nv_e7@g&>#? zqk*Z+KV6DfEP&-4GX0>s2@wGx3$03;MVu$8m_ZH^UM7J?CySVaX_&@AyiygqBo_j= zym}2l@#Rvi+T|a3(AI5PZMSW>(e^#|tetK7Z@g;tRlc3#@6$QbN{|SDeW? z0X}h(kUh)SY=$u*JQJC5&h&Hv5=WXLKIH(Ljvh#pTp#^bT25yZZ4<-t9qI|I;Xy=E!|6h>$iJP=b`v#EIDJrdNz%d z?KmBQFGlkn0`k$8Ib>sKzN#R~K4P+FMG1C|#=H+^Gc_eI^9hSGPrjro3g?J zq7#sPD;w?V7#PKoehg?u7`o8fhR7E`iPKRUtX?>uus@>%YzT5F#N34$T)ESm%lYoh zCv4TAEqndnji4CT(hppL1+%^olRldK>GZG#>aMg{6&vh2n3AUmJ@rc#ZsH;HZoA!z zYF0qBQ#ReU&-`b1Tiye=+w7uT%Np5BxS>isGR%g};cY2Nccw|oeX|1sQzR#rGf(jB)h$z<&DsVOxIrPD|`+MH|gp&Lyb< zb78_*Gggaolx$TH#ZvIN;}R$_FNWc06EG-o?-{G2)0tjabC|i#p#iHRp#35==F9)) za#F1xvw|AJQVmqus$;usfFS9I_o5v|i&Hd9@`Z4UF)*?QWx-U1Y%DxOCOw21MkhUm zNw9*w0UmH>3g0X_$L!~1&I&( zN#Pg=-ciV;n1q&0vcH6}+N61R88GBALUmPwr5}N@B)}lr@G)CNQi6daeYSP^5*to+ z+v}$Ys1NRRZ9%DhYwHI4!s!=Lya0{ySK0Y+yKUOB(_Z@W_ic`>Z}l7NErQuQM%rCb zRu5w|l7@NVegU+M9CbAD+WVjme^in%ZD?MA-eEQ*0*;^n8R{u@n;Zg>m}y5!6tuC9 z8tE-YR?!H2tUF&14rS|>Sk+~X_PrmzM7-m2o5c(%T(Jj@ZUW}l3m#aQ`2v`A#mn_z zS&R*maS}L;u<#+^D1PWq5+zgs^Fe^P*_r4t6fb7ut;a38Wv6+oFN1*?V;l&3nXa|Z zN6_qBBfcxc_S^HLw&~6r?QxqwBV-|Zr@i>qRul@3gvv$Mwu+@bVc4)fY z9{j{ZHn8WMtyqZzCi>XfhH@Jxp7u0-OJdC&XgkWD$6QQyasH2)B@N&+&phKWpQ1sc zA7b8Inj-q8-=bG4&bTwCqBlCHy811;B|0kF=rVn3Pqa$sb-ie^6gv9W-#Ra=rRs~G z>OP{iVp63&Rr|VD*N7hLI{CNgTAi1+RmVl=L@&jBit*BK(Mk2qy}#Obm^S*ZV|q^U z1L}ilsIqVAZ}Ap-4n2>~sZYAUtiGzZuqd3I=&-P;jzi$3lVVE6V#<~=|KGgYQrqM_ zw>huTZm&uXei#0<#nWVk>Y<9A0 zFrKU_)lb70h;jGlRV*gmDh^aExSC=-5n=9xp-N(E3xS0dRxzI7C2=fBCZZ{rh1&Av zHjd^hi4#EtwM%X+8?RC)5iGc4g_6Yi;MBZna&{{LXIu@P{mK5!fmjHIe9(5U|2N91U3T$y}JP zBD8uemN{Zw&O+4UnCb$U_7Z6G6faPrnKU?AS(wTR2c{R0o&kiNoaEijzk&R4sh#}8 zE?c+t4xSHb4VA23UBVYtDa@57oc@+1r3o%6PLo{cH3>DrHQ@ye z*94VRr^%{w?&Q?O)`HTvUcA25j_T-J=d_4bbWR|0eQUu;8!HX2&Z{q4j86Y~1}!@G zc3j_Mto7`E#VoM+~<8Sy?Q zv)M!-;w^hI9bwia7bg%Ew!p%AJ28MXUzTe(-FLnH_WMWd_7ASHx<<0EK&*UZo0-8Z zUj{xb4^vva{~TJy2+TskG8tQCFWYZkk_-7-J?A<+U#VAf#rM+WIT z0o;iekXebT5{p49jPt~%%~mpa$`->mSQ}c|Yc*mQOA4mv#E(gPivweGHr9njq*+Fz zj8-j~Bs*9I+W6ic^VE_d2iO8s-x6ds^3F|?vKPl9GJ`B@o_1n6M!<>B5<|3_a9#B? zM5?jQKAVj&T z2HY9BVUKdLy=G@szDtkM-cfq!pDXZ6tRyqlBda%sTurf`CFy zfpgB0LxwwOC`HlY#t8+OA%G>ch&>IwF5F*gj`2l9rZxy-OSm(im9p1`F^>-6P?jPT zTUik((^NA~|73B>3}Z>EvD~qY)!;a~_ZggFF6_7bwHs`G!zr+=W-kC!nm!6K?as1+ zoO9;wX50x!HBd>&to+OE+`cz0UEXTRkskZ>2R>*|?B7EewqRfQ4_M3L4#E_& zHzBAE4b0lnfpdf^%eCs-YFqoM&)N%n_gDem=NlT%TMs7hV`r=F;Qn)#TbHyOFI#3O z9!EQz4P&}4i6c`kQDP=A)w2E>cbU4qI6!I-Pa!3Eya>&??12yuC-NIqWLsqa zjA8Eo+vm*w{k=_uzKdBe+Uq`^t$4W8VtC0X2+LF$Vtzwph1;CL<2@T9rf^{+L{Hdu zwi_&Y9}!G)?PyCceimN4rb3?jh4z(mC#@QK_2CUW?7LmBTWJB%m47^F2ll;TpLq1^ zB>R9Ch)EQ!VB8!}YsOIF#{?nKaS>9DsrJ2v#gh-L|8UOoz__NNsTtmBPLPBdvsmbM6o8IJ5cJYhC@#qE76f7yZ@*yqRXF4U zMOd3@vagM8vdmZzC%ke1ATze-(Z9Fmre*eKyxlqmj@#O*W!A&`yz{}Y+Z+Gq8OE7h zg+KcnLVInqzq#`(Hr)aqe+hms14>m6ZkWdre5bUs1`7lNFl#G9NX=Q+muQMhAKbAM ztrC3`-4rbo4b?b{rip>n-=Zz5Cx&P8kr+qOKPiyJJgSIRskrphy|?JE zifE>;mu6R*Trsqw%evpa_ugyQUw^&bdh4wYot5QO3M$pnb&ZXUjzv}dQhl{8=Q6b? z+N*D!(>xJvb?K>&>7(;{23cm+U-d!PtDcJLxJB3Nv#_{MP|VCrb5U)&^HNS-`dc5^ zK<3R`^HpYiw;m@r|JL75lnl;mZn|~cKDqbTaXqt&TZh`tJ<>8KP@Jd)Jd66N>-A2Z zXabyfvS#tF9eg|2sVy<333xRzp-#W4&q1fH6auK)aJt2__?`Om=bU>{SN+h(UtB>B zW(a>OQo=%m%Z;G5#AJ~LVWBTHp0+abG^Ytdo$D{LvT8uvMZ=O19w}0ej ztDn0J0*?nigs=~d%^PnVw^Ofu*IHiPZJno1*tsq?Htt@Ohv#-pkzIRLwdLXYxZ|C- zqwN5XN&LwiVh}#jcF-y?Rbf~lr5(~Y=6>a1&R`y_YHs39lMZwYyep=OTo_p&lRk^d zpF{R0XAB_4np~R9%GxwP*%(mTNP>yXuqgm`z%-MvSHAmWTfg}oYKxKN+F`JM?x~`_YW(z3eRuKeehZ80 zt3Rrvw%&gJx+N*2%EFQ;#AbF1Fwaq zm8?O(`QBms@L#O7_16$!nplp5Z6P8@VA4#q5%aVJGnnFXPFN9ek?APOF3^y9$t>kz z1DCgN9OFIecG|IX47jbzax*3SjzFagVd@)R0gEcrkjLRn-i8f~`p+G<;R?|?;jBN%@8 zt&yFZe#UZ}x1dd1#9W`XLOD%l_p;b|x2YZ+V`goJFm<`siP^WnMpF|oyDfOxL(G6t zC@^}*Ah;_VvZ?*gS{cl01cBjAn7387)yC1h!q&pHqG3&spoau|m}p=FLV!YJd~@Zb zZ7xK+2=n73lEX0|D^-NX8R#LgNgaJa!#!7m>2Wa*i)SCTT&8^rjOw!04Ys?hgSeVl z)5Crove201%vv`NB^6+x2LoVQ!SJR=PgqGYX=x|$IAWG=VeUyamG@xj9na26a!ce_|%)NG#xkS@rt} zjfJD=R8D~vf^i=$z$p!EerIaTRtmz=lWk`o2cA*DbD{}T7^+6}a zNM)XV$ODoeA#Pfw7%!)Zt(zLo8-uo0kOV}uL~V`45O8c39g7HLeIF)!(~!M>LTfdxeg zw*)RUgqHfj8=9;ih|I5FebWlATW5)Zl>ODuhwQg^@jmj%R0Iqyigvw}^*aR=O=*-B z@H_=$I|T#lgZcM?$1Z&5Myoy&v6H8cSbO#v`^;m1W1qO^lXjrH*y?kMQb4Gw&Hr$} z{qrL)S|wWk9aYu#M9&%9@Q&@~yQ$uiI9hrb5A9tk+Ls1aF(w7M;Ev95c0p&j-oC&2 z3h67D{1ko7#Ky4*jG=WUgcrwPZ&(MIdBlS_{DhP${6X7}HdeQX)pQ3C0Na*@+n8gHFrm zJ&X4bH3NVD7UMyKPBI@ce4-hmdoJUuZxzuL{Z<{(K+#tn6TJ~V6#V-9-Kcp>fY;1In ziE&nYYFpo8bVWne7ndOyE!Xp@ud1WA+{_Do$c6^R|lDd1&XS^N+3-ljsaI6HVV*K$>v+)&$p!*0+inRGpL5rp2QLrG@1(yt-Z! zS4ERl6GJaj_t7NRV%0|zT$5er1sZp+(`1nJsJ3+<-B+)PL!krVdDM_c!sSK4Qd<#<|CNu zPQWCsK=O(bQYVNl|5W!mgcUSJzB=pe>$6XOeWgA9vjO|jcRForORn91e}gSrJAsJ` z?|k}GSP-+i2BcYUGfRSZ16HvT4a3AB?+6W|yzGN$eUo?`&j2+D77!t$CvBg-|3!OO zO^(gB4Kkn5Zs0W!#0;hl2nE`n0NIuji&r^$z`cZqiFNPAf`BT1#r>Amh`u4+o3dt9jPr1hGfUqq#eH9JBjkJNcU)`^$&Xx(w{Yak-CcAOfuE81v(F>JTXe znjkiq^&KZSn0LZs${|hO%O6}mZLeI2TkT?xHNkuz2Zk|7s@Fw~kJmc`Ys2R2 zZGzHZN!WkEY%y!JbI#t_-)Y%k^P+50n!jGM1Qi5v!eM%4V=3{Mt+n+P>#gef*RiXh zB}HSD0(O+ZVao$dAw5=MAN^XHMS2IU^KgMREbX(RMcXVd!#EVu|4A^XIK=t5E(fh5 zU{0j1x5llBw6jA*W*F@OSBD3k=C!1J?Q0V_&jrUL)=573J{z>Fi8j)ZD6~^YPS}al z1YJisqL=3H&ar#`*Ijn#@m7l*?6J^N)@KA$>9RkuCr=a7C)N+MM`kQCRRw%~b^;+R znKNw{I=Zd2hM2h!$H|xeU@awg+0vCuNRNEMuKC1|tg8jKVU7UiFCMZ6pa%C`bETa? zTiAuw=$-2@%@d<|uxr*1V!p10=_^r2h-MtCK5(mzb`UY+0zyNipD0^rV3@XInlD4E zfxr&#Ff|vle3*Axk^Uch?;YpaRULSqU*#OStGc?nyE+GTD+_^;gh&F}1cL_~3^oi7 z`luP4UB=l)VM33fg9U^dz#xv!|nt zlM&_GMJn@f1Tk8R6&b9%z>RBNYC~xa1wCw-Zh)Zdh2zqCY%<>YGuOxG|H~6G_VuTu zWed!b#gX{*p<=un@rfgxFwD1Zj$ux2>KsG9XOXgt(7iGREN z=J@MPyO#7iWe?i6ZieehoWV)BHr=iKge8|i2Lt(EPmoo zel6DbkHm4r1U%i)Rj})uIJ_QnUNx?tu7&g&3rQku&+RpyRAin-^bAvt>}27(BGLj} zC%IShi$EoW4abqE5Xo72tHh+5$}tD=MX%=%xy zVGX)it*rM5mkaK4aS>6d03R0jya-cm$Uswm3nt%+() zoQ_q;pWfXH><`C5#dshvTk1NZb?jvP{Wm`oZ+hjs5VKmsJ#%IJ#5?~wnjidY`g$W{ z&PIFfj`;YO??*njF0Q{3&ryd?VkP5oPROuJ&FRMc9LyQoGY8(CWb9{Q9?U}!)zuT9 zzW&?|lc$vi@s@Zb;}7F9P7>z{xA~oTNc?8JarT2(gXO3c<(gv}@sPOJ6HtjugQtns zB|gpNO2{flYkG-DOzOTdWMMxKO-ndefR$yl&YU*Jr$J8RA~^n?AR} zIcR$GiQ{dv&!+X>IG_EM2VGj5*I>Q=D-R`ZI5=F8m4HoY!Os)}=+L<^n@V>nTUM@e zqiI^m#8j>?a~o4a{`d`mZ_OM zl~0#hPaMMnG@<$E73RE_3-};T#T_@}lgzCfLB7TJRgDm@%MgEaHG`PD=|`Rv*&3Cm zIGUdUdFt}DL!p%2GB4}2LzS2aUv!;uH1w7o630P&|Rzr9J#<*awoTU z*Nzw&Vq!9YLoD_xCM+>I6q#j<>*0KK692=I1N(Tm=oU=iee>vd$>_n1y zv@8i$0aUG=l(}2i$xDbOvm%PBC@~UbOUU;6kH zanCm<W|Q>ryMyXa*x zzczmOn$N`5FMu^M@$+!FJ`hbOY13jO6N8fmoF^3FQdG;pO6%mVlAXzBuP`VYs_zkheseCn@au^VmxrmmLY zQVt@T(_D9TG#>sRG5-_45tV(PfG|E76}=eo9=kD$H|<7A=>fazY^XuBr2sM6G7k_I z;Z(wTsaQlItp>Y;5X(_G6;->hrgyhT@7>=*Lmhwc2Rq^)4o%0e-2PX5-+j?Dxg)j( zMzlM2#Q2$mFk4Q*m=UNa5Frnrv{NJ~%( zB?ierB%{jCw?j}vtdBx;d>nbfR*0_MS2f2^U42vBx##k@fXx95Z;}7IbEs1KI$xrrN|4?w89N~^`_X$XDy&~ICN+zjArsCI5M9p;gN)zZuo9J_f=waUZmI=99*AAbVQCZN@UEGs4jE42v0YCHhf z>Xd2_002M$NkllHnF1Tb$MNjM!SnBb_}+LgME5&?=&JbH*X<)!6AFHa1I;5& z#(FY|Y2m%BZ2$?of;`_jE}@E^Vzz4ZSN{6GIIqD<4+SVlRqTB{Unz#+Jn zM4+s@9&09-mBhKeY1h^Dcy(Cpe~N}dtOHL>Og7-AhiHRPSX69E<_UykDqG?eMv5k` zsEGfFfx&g!ciD~cg)iL!*B62oh1A&-d>l%JbsJH*#4nR zJU@z4Y{c1`MAg#}$aAOS`%@wLDGP5J?yfv&v}2W)QP6bGA^jcXy|o;(n1 zn=z@jVH1v9PT|}H(}gHz&muA~2Ts)HbuA|yH4tZ`=sn0~)5dRkkc(=6ic@p&*`K)D zpZzYOE0HIjbu*grk$6sABiwiia^;wsPTVGb@|U@{)?+>iRXMVjZ+eMc z>$c8ZmdE^-A%Uz(EaPQH&k8Ndu*dP-8jF=^2Fh$ z_r5$VIFWOpUrl4kc(*!hS20g=D6qCKCi!dT46A}^{gv`k2*KxMvz7Avm*Ys8?oI2x zr#GcwJb5gOIg*3zwJe=b`ThJ)?;ZI0z|J?dQv%juk+CP zx8RWjM62x}XZk|Us}qr1rCgh?LsJ?#q`!s+=>%}!|~wP z{x+U^{7?)JVaS+3lc5cFrO@Q9DHq@LG>F=!7LTqcJ|;3{g9Yo5*>% za5cMoaCV^lEXSb;-kVOX-0~oh3vBtg!hsUtygE=$1cBZ(0=7WveV$;M5VcIpcW``X zUf&6@UMU|Q?VliW1M<;h_h%d%`IkA2{-(f5{N`PSpJX;L3?pT65~ z=V!1Ef9A1#>&skY^Vu%H!!)^mB`uBxch$!W zuA7W~S9Zm^F3>*Sp=PGfFa|0GfJEWE*MmT-4)(`aj`YME8~-pa`!RO(vp*a&jfdb+ z^aQ?O=}cs{A+YB-mac3>d7!oxcGM|k;j{p;K4#IPFWmIwQNRCq6ox;6LenSVw!A!M zFUPxFGe^J!L($o_8>OH%a7+861wv)<6>q?H=QGg($EX0@w9vLj4YXs^v*zT7WAxfL z1J6~_I`H)U%-feJmu=r5NoCG0O!Ch^xyA10cC*dlhX zO)a7jSii(^?Mi3D?7)2mTq9z)b)$Vh9o>il&B3)gj+<%Mw{{HBAIJ1n#bRxA zu?n`d9;JV|Zs?3Fwxh-Vzr8(rKU0h?+i*>Z7XIUX5PoZck3t)KVr(^ITXvC+#N1`C zLzeSe${u8_Km=^C%fs=b%oVHv)Fg9O%okvD8RB1-dcQOjqi^_W*2yPvnu6?|eF}GV zGhD2%eEBxUWg!NSd@;tqc8tvgn{w=mR@WlFQ@0_SuDU+Dnz2|i^>}PV0kIiQ=Sa&& zxP=oSY&J!#l{1yN>A(s=U@4&GGLF=%VLZ%uq|3%wA`BQ*!?zZO0T7;!n3aQ-04xu$ zeMxn^`IRrnek(_;yqJJ_adaGSgAgT`lW)AQF-9OphH)MV zj}6D4{@AX#8oBUAlna@D5UZTvLCg-JP$#9;z}U~$U|tI@o1RkC?xKK&Rf&IF-~G=zX=A*JnIdneUWR2Rs+$^auQL= zc%uH0R!o4+<58@1gj)j<$VjI3NK;*|Z?2Wf-&KHE^4ggDu7F1?`?DaD1=b22 z=PYwNm}FnsUKZF*XvW)}@ z&CM}z3XU=io*D@7xmr9;o^Fm4IO%A^CGg23kHzfJ2~K-Pp<`Coe9;rcYoP|ECQJY> zPh&=lZiQxjXOjbL3MC>r#M1xg1D+dgL4rp2%0^bL*}QJL59tR z>^eum>^_;hG`PgAZ0TU{=mLfeR0{^jRU{b4(@!M;G|S42MU@0J3vyrJ>Mg<{E?|r~ zbry(p6yjzYZ#+o6v-ok;uyY#(3`B4podbmryCF@eQcsos3UE#`0aL(}Kot<3ToSJW zW(M}m74^M&1bB(nOhgLM4x(4faRO&$sWf;igOrKbOcXkS4VLS@oNT#-#@j&MewNW@si?!zCNUH+Ll(mHQ#A zf@S*;KX{xYxp%^?>F3A~pWm3%l4G%eJoF-ph*jW|np))5mf@@;|2>J^Y10^7tx3#R z74MGaU7I+;_|;f=>c2+gLF7|UzXcgktXV9;of^O*Ks7$^+b&1b8)Yw)MA}E$-M8*W zF7`u=*E@l$%9z}V0sGm*QFrGDqj1Ad@cWe*{@j0wj{CnEg&TL}E=$*`#{Jl(rJXgK z;Fn@4gL$+({B`PMa&PF0ul>>2WBa!c;*zy8UM~YFURpVYtb497R?h8jMD)J4`fp#1<5WiuXJSl~IV{r$C&D<`iM8!7O8HK{O-V zJclI))-pJGRdJM4leL&X>qbsfo20w0$J`DZnnj2Z@N#_mi{pRbsiqqqarG3n1tL zFhq=K73<4)%eOuh}Dx5d0 z>xg&#`lERFtB=p!abNt*Z@wz7XuLX_U%EHizjiM;;b06eZNT;H%}6rbgV{j7duj^` zM#w6kJR0@wmqQ>QkA?fb9EHnX1y^!3c_^Bh?v0rPbFumIU6^TmVf3LVP|#8DJu zx|pX}eyP~VS8sp=-!T;Hae;e+P4~hYtxFVQ0HwU<$?E9B>cjqRHSv-rWN82R^U=4r zD>`1c4Kq{q$mX@P0bsL(65H$?^6`r$4o@8%Sjas{(sL1H0sF14Xs^dw{49BmygE| z#C(Pz<|}7(^wPs-Wjg8*|Coh1T1M8ll70}GX_-bGF^T!JE;;Q?>qoGfux-!!__+_g zIYuaB`2=o%nWt~u`&P+!XttJ`}Jl zqgdx6)E?Kp91$kw>OBwPte~nh)^*}mdqYdCAH{=YABOZf{hM1-S#JSxmCAUumkkVD z;4SO08h}7~H%I=5SihdZ=J2a;*%p8J@ttg4@frxxin=O<>kN0Cg!1jCaH*iMXM^GohFXBHu{>ii^a> znFDHiaj*4dye0ni-n0_6j$bA=#Z|tyeDjD$bDI2|#RRNVVpxLK{H7D%8+_+;W)OLA ze#`gU47S&H*v8y8VaWQ;Z(KPZx4p*YZ!zs^n3L`)1rP#3Ff)BAokU*=W_{;L^%9J@ z47JL33!~o=T%dtX%aYEu4XcB77$h=to6gt1^qmr)lmQPFa;o$V5}8ccG}aa`FVb;$ zvzW@2dWNXYW#@j-O)UwNNDgFKD%Ui*kMg%y{m!qvJHGg}TM>lr55&cy8%7kOL9uUV zO}zdMd!w;?Jqk9vqWP*TFm$G^O)Cmt1YY{ep`u(&x!K!DBIQq<;aJ&Rib**!gE zwPG8x3E9bM767>l0!2NtdetZ?EWiPAw_!lPILTPpIm}f$1R!BCo=03j89${asyY6c zB2NWJv&!amY~H|*9%Q>Tg`5>D&Uu0as6gkW^O^zItAOXO&Rv<4MZh(kKrcWWpNUzY zB_vJf&%yA$6G~wAy}|f2zfw=VYvDmevJ2vj9imS0U zFf(&$96vb4F=`=>VFG4in4`|87{g(Sd?pSGM+K1Dp6i?9EiXC~%h#g$KZ=D4#=IF@ z#~A&LQA}sG_Q8Y&Nh~en@eAddN{&a9Tje!9u%VbZ*a)p0MotsLvC#HpRPXpn5czG< z*nbzwfG>;MjhpcDScJ35?tSSvCk?GJ)joo(_~vMX8#ll0>Zp0G!8F-oFzt?~9@T z@s0Sg{X3)h{Q&sE$KU`~M+07*7Lhlf!ZcL-eiqk3IFn0<;_5T)2^cvXDjE4RnXUVcTiFZ9LJD1NnUULTv;K>hNj4v_riacq)Z^VDC)=#!7f>wocw zVqeA8h=V{Y9Q`y92C>v%4MA`y{_?XgiMPJ~p}6km>!Xj&{Nxa#EHxY*P98%}yFCVu zd?RYvBu}+Md>8toYxC}S9RK!nD3e|Ns+UF2jW@($lxAi&v-XZMH{jqkz`fjva^e^) z$J68VqXrt`m5nd-(pPmcfVTY+jyvCu+~@;yH^<`5-7$C1M-i#n7(=~y8$8h)+jp&t zt=l`23Bn@cCBj<{p7Wo5^!YqpD>O!pz##B1g!GksTjtjCcOX&Uond2cqVwe~8;3+!Zf)1C}jD*D?Q|z}rf=YmF+#9m=t~{Dtb1>3$E;m z;|Jhmk3sa;Z^HZHeRxE}EMEs!P1ZsvK?qD?^{1^3&GzmV?5$3Lf7)UT9NQUAl&TQ9 z*)ZFHymd{y<9)1~K-t_Vu;Ti{ON68e{~7TJ%o$yr|59uGh;U;Xm#IB=>re*Rsb ziANtEjUMLoSO>%&V^=YK94iUKbl~I6)eV@imafLh9Im8_nVfNIb zud;*{5-?Kkva?rlrwkl%hWJK&D4xoAMFvgAM-r{3wf`g*RoL>qcqijz@v8ThBX0Cr z{AfPQv5r3GOn#O)HLYcu&T>s>U6w7ODPEUpmGP>$&N_q(iCNog8Hyj6#&Z0w+&0V3 zZOq@OT&`vK-MK99t=qIYz2&9;JlkX3KoA;uQ@WDI^aU1LucgVIUL|6d*z}OgO@wON zygnOGCSaU0C`%&IH-4WXw;|`(@l&dArC!tIcivZU+GAdc*YwPHrO5$sNW@mcVDOtg z-Ke48I72xrR$xDBJt~!7w!!u}_oLzk2_{lIEzx$f>HO>e^CRet%*NgwDC8ckiXHoQ z#t*#X`(xYnuSN5<6&C%Y9IJxtAXukZ*hhvr0%jqY<7j{L<{sL*F`nr?#sUG*aa^Fi zGIzW66z<|VhxX?p_Wg7TIDt*bdXEqJ&`PwD9dvxkFeDIKDjh(e*43-sU!u=j8#&@6 z?JOG69>IA0gSn70ETnJV_wt@@_D_cfUB`>%)tRf5=3oI^8 ztBUI&u)(e@j8zcKEIXt-cfz^LGgzL$=^zNS0-iEA84#^QAorTuLmr83iBl&+-i-;w zrtw+8&O~m`V|j9AGq6~X_r`l~J_l7#%+PoV=NUw%tD4Zh^%5EXSYqnb&yR zV_wV21aB_WG7QFBuW6m|8i1Db>|&6QO-d@$pYq#sB?#P?>=Gi(Wc}Tr8ZwZHy;~ zqNia^T(xgHTHc7L3Ph5G(;Ua+GhnSIw3wBMJuQ)kHMX2R{`} z5B>u3ufH3$FMoFwzxAIZHvjV3t{X?x2EF81?n48Zqt@w~w?lHCibG#I5F@{J7zHAf z(2lX-{+kydzlN2FlTSsl%j4;5q6jjtKrCY#8PJ~`Zissa&%}o zxSQ`_LxrY)Om{`$?vv3r{)cgROB?dBV|e1Jj4L-`$MwW)oP>7h9IT1Uwhu?g4(8U0 zV%+ty2jXTE3RFJ{ z;y@f>oa5WZz1w5?@Tqun^R4loJAM}j4uf&c?i=H;KKS1F#*;ha+Q(5|>K~1VaUAf_ ziMF`zg>^CBzdOG8v5#UVY*V}tA~1(NyO!cK;s;~PYZx>Z(z%6r4W`*X_kowhiNn7W zO@I4_IQ}`jMXlW*JMm_9%f1_EBXXjQ^oO7Rhxqg_eTj|JZSe;m{3RS~!8d;L&Un)g zzC7OXQ?H9DxKBqOeJHN%g|KYEy)7Gr-VIygWp#Wf;ztcACH>70^u^7835N`&nVQ9k zc-iZ2hQqcT_kZbA(e=82AA>0M-TbD?__+^W6EAz&XX7D^$KQNeSF~{iP`OwAfKC*( zPz*%2vrxzB0L0a3XZD+36$6}f4a_#iRyO``*t03VcIXs}jZeg;ed}Uy?mf5-_XL5 zcLA}ER!-q2nWHQNl!0_Gu1kBzFxdv1e;>Au-~XRq8~@AOKM<#TYhoue=OMUx?aPRa zF<0vlJD6%_lWyC=A(O0IDo&1|z~=hj3{20mhC^zi(8wtsYj6`vzSVHvD+ouwrZ=dolIt~p#<|92(LeK8uK3pX*5}o-&0|@9i|M@gUBSypt7|3FY6g|~{8q(n z5}C~*4eSG z`sM%nMzl=P(yQ7OzxA8%i;<;?*tly?;$)1X4XcS3ZNQF>YJ-$TP}v@9w-SzUG>M?b zVGYN*E_7+JlK>^jl8tpYj$pbJI^-7v2B8E;Zia=zz#7EFVt%uuhD@V@DLQqc{b*+@ z0u2^R9Hz4$4QfqF$6|CQJ|IhG_PeE1V$&CKLOEvd7^or(|ENF=F4p|U7iqmGFZ0v z2Ja0eAS!W4Ez|eq?^2?bblxlGkn6I2rnLIUHIZSb}Q> zLlHAfXpkN|ja(|otPXAiQ{5eA1*X?(i^v<+9EsKqj5{3p<*|Mi0|05Lv4gGr zz5RD^#L*g`x?y{~5Q`3r_#dyjd>!zEyxBb;pgZIowds#rn06#?+JBu^{$cC{!##b~E%CnFJ{`v)POpRe z`0Uh~pZ;X5IIu1u}I0nZm;@hVW#q=W)J9n-H1`%<=R8x6yty%&&imcDt@ytlaG@#TH zl1%Hc^Pt52tR)?GVA5K-3)iKKoT}9UZ>LAFl!1w*N*47ZYwrYbR$!wdnoVnthzPh_ zP{D~?*Q3*LAzzK|#oK=A=J@FQZjUF%fDJYVLzow9-n|RiS~y&^MO=~z1ItSaAFhec z(UtYdtLu~AlFrsfl%-KuqdE{uziB#p8^(mTGqpL#r5kH>(mlrc5sN0 z=U-F8xf6(dU<+?}>NKA0=Ho}+{sZyQ(Y`qG@T0M_1Enp9>tn-+LL5Xa00Q=_xBeYf z04EE0NaK|A)+5))b}W^!LZt74ua(v#iJhd`&DH*c@1BTSIokI>{80Sy-~3;kuwEUV zJ9Z$3g(wVt)dvw>$%5K|S-cA5^QO@3RIx^U+JA;kJSHyfv!pXkA6G%JR>53qLuq@o z6#^4xR#9WeWx;+H7BbGsjCYMUz2#X)F4ufH zuVtDi<6zTCOd4#bb0g=^csSRY%gpW0c}!;-<1=0~F2O%>`TKKv%eS4TO)y9s47q>O z1Aj`eFKp3w2}Gf-7|BWrO2**qyycyAjC7ho2u>LscVIu6xB|Y-?aQSUS&G*|g7d>~ zb4|AmxgDkN_PKOIYq3y1EAU@xvvC&+>AO=)sg{0#0HXrx^$+!cJ-AzG7jww;25C7a z1~B3hA!YQvq}xI_@hx`K|8 z@YAcpGK-TO7rnjIx@&+)O`2qBy10sG_d5&Wtc`TsbxD^b2)xf{-whBmk{-dPB$92>h|)nFi}oOdPgMnq zUV!i-_Dyg8k?#1$H_yaJ-+wsX^rKs1cnj|I*ucN~`r3HyOA$AK`}E-Bb8+W=lkvGf zWzh$on%m(B;eBey9*oX!fjGscV@;h-7+AE>)^598H-&3}O*jTjT8}g<;QTKzORKSA ziQ6RHF~TvREX;CQb)0~V0OR^h8wB@65+ zD!;u1hsP5Hk6^3OI)?!ZVU4TiXKszg7rYaKcOMZ)Sx?>=jraUHTI7EhHQjH`U6!tM zqsUz?KLpnp<&`?*Oe-&m*Szh^5F{Ln)-T2nJ@iO?ZKfx#dTcTlZ$fStIIG*sT)Avh zEZ`8LSk2KUL_<{pOAp8bRgRQQp)I?hc}&AxglV1TGX7M#S&VhahpunqDAxJHJQ%@s zCk9F4ik?C|d8`<__p)i3fve2>-V^hf)It=9c{PJFia5F+BEKGv+ziL|_0C(ldW`FO zrh9=S-0?rFiAoV{ykL7^XjXXY79Q zEz$GozmG3{<&M~K=@qeOYj>O+T8#Jo@&6mAPOy=#fVf8_r95n8JSSS=oMEnM0vo@Z zy4fg?W9xM*ZfD04QMzdh9Lwss{&g>j-}vvp5MRf~`;|ZXL$QS1KkTB|eAzy13RlJW zz<$PP9j2YGjE{Z!-WdP%H?fV4qZLG0-ut4~xb7xwMc#Qb8ZNn+H3cMo*MZcdSZIuV{r(1%a`8tmiX%}4@U3Nd!nN2WwC&f{ymrfLQEaP%U9EKbiDL3 zj)xKNztd+?5 zPGfttsii9({nFjB<3(_)Z&(kpf`gDp1~`JoF#|SBj~&7E7gkuR;KarcJ==53tg+xN zj_{a=fI}s7BO$ev1f;@yR{%LYC67{YU*K5kcDsPwIpixFn@*I8W+A%9X>omY$jlJu za2#LZj*0k{&_O*2W zRcf#6S^8NP|186{8t2-@P3b*X*E5l^KR5c-#EFy>;Y)Gm;X_ip_%LEhgq7aRDnYK5 z65pobzRHYjCdz{xsS5EGUf-B-Ebc3B!8^_~m74UTm6V&rVf0l6Oq=G-oCs}Xt|EWi zhKI5dtQb_I=-GurmP&VibCI&QqQteUt1arMu-Jo**%w^BFRtCOHx3LVvwD0eUcDFh zw;c2L9I9HDnB~~_OhR&c6TNUft*V4}%(<7=REwRA7_mh_BTuT;D8@~uH(nFHo zmbSq0gb&S$8w*5PaQxF)rF^A!+0TxpKk;fNRL!;;CuKb4)p0eiWhPj#{+05LH*dys z-e-K3^GH})PNo5TZ~EMx-0WPZ>Abg&T&MLKe9pvcE+d!k)llBX+=lY{bKA?mIc4OJ zC&SD<3gJO;^iR5VR7(V_Wdga(*%EP=WM31_W(#l$H3y#) z<5FUh_1$1xnuQXg-ck2+h16b?klr~-hV(N&m6bM#ncgU^InGPpNtf~GJBlym%dQl@ z3$2QK!&#U8lW0~dSXVh>#Gfr~xxudfG6+lPOB?Yh{ai#>3$2QK!&#U8lW z0~dSXVh>#Gfr~wG-X6F}z@E2TE=FGLfr~wGu?H^pz{MW8*aH`P;9?K_YwdxmA#4EV z@Z53?=hC{$A3R?u$uB&cF6Sw)C*MCScXj?!bGq}tC3ZzN<3jJBZN-IBJR9G&wq(!E zn1LZQdkEI=PdOFkPLuq_N?iV~l<;}}tWK+3OqQpy+$?XS+>A0ltJ6PE@!#?KACtel zugzcnYz5`d<@a3}SkK|lzVWT(okfY6re+LHBil5KCmv;mYmr@^M<%lo%~8KyxwN(x zyj>wPhAJJharo6j;VQ|akyhJri^3b}Y7n}tqt6tJQR$=_nVK4&ZHH||ye_><4lR&p z@;S+3^L_!D8a0YFgse=feQ$pobbn`C43<@cQkYkjKc2N@!Pq13que!;UMpIWBv1y3 zvS~roQl<_$_>X)z!udQ;A~QD0ck7~AVRYN6tYKCVd-1x?RIh)&@|CZodaXPEOrL+b zy{7g3bA|jqU!N;&es`g?Io@`hFPtwv$K`8zz8vQ@-}^q_ufCS&&FQ}H`@ZjN^xb!U zE6q#g)RW933Z|B!+?sOfbr{rF!9zK>Y~>@5xADrDna_~r%JVnpK6g$oBTsKW?~|el z%4|svPFYE1 zUndmyhxO@>yM}M6!J0vV?@$1*fjPPc*WE41xjJ(+KV|<6V|R6wHXRrk!l4Cbw{Rx1 zt$j`G$5G8@%HE3IZj8jn;Nmdyvv^n{cM+M&CF&|*)uuo{^3lm9t){bDP!T8KX45HoNi{jV-2FR5Qo}s^l3*~ix^u@1nh*G%ywmZ@| z`jE#%^GdF7nqac8RW6!E(b0ahF4qy2m@N9shwP@#BmV1zEjoEYA?maxaH=DlT)V4Xm#HTB50 zs@yy~JB<=*$s|;1#j}s-TV!zUn>q9V^nU4Fn!`Gf3Y*?rzrj_+$EK zzA(!*@RCborg{4f$Pq z;E(D38Oqbn*q3lG6F-T_1ZJYXolPb&Flw5~IW8d~XwK@g>VdO(>IABIB+i z?J#-T&+18HSJM$Rj=3y-F)HW=}#-1j|ODh8C3=B=g(ZeU=z|+sLIAH@FdHeBU zEK49JKQ=TL-QDZr#IeJ%eOnLKJNo0ypk_n6qYHQ&KRt;zRN#yWHZ+0TZLE}R*}OB( zFb|8&%O%X|>A<6!HEiqVP0@uTssXICOiZ@nW$sKIK5z>A|BMwDYu2`)dw}+^^Q8&J zL}6+HD;~3p*mB04V;v5y7O;PP{Mb-z!L6_QOlOArfo&8Ob7!9IsSDgNMrS+z0!hw^ zUR`eav-b|(zf?$dKTmzk^YaGtW`Gi?4H+nXE}t;xEubv2ybp48j$3{8y>U4{r~j9@ zT4(wAJm2&A+LW9-FyUvJ@Gd-aEbJN$cR@2$q4`{&e1nU`(RTtd)}laR53_9W2Zg&t z5=v08sG^u;Ul&!f0Dvo5>}e(;p{Ar{BIW8ZYeZRMRpOPbX(BC?PbCBWo;#jJv}yIt ztdfJugw`ukb4>mA2I?Rq#43HUGVUU46;KpBuOhDmw#X^>RVs@(30NDa($_qiy7r%G z#m81uff9^Gnr}t9k{9O><>R00$tm-@)$zVRUtG>te*JFKmFMw3=etlFj5kfb=KSU9 z&v&2GUFe$gr2GbcQQK%A{TC_E|m$hvoBh$@*@I}HIF?uyfIQZW3 zL{{cW`aHmoc@r_2&^ep5rsjlfg)1Gb2uF$VfbeT#bGC#6Pc1gDh23hEdkAwg(zsM~l?PpL zmkiQtri%X1PBuu;a%*s%E8%)(Vhod6xQk^D3(xgzDmQocfJ}O#5@o)1?QOA!xHTBA z-`LZdbOV?1cGyB(ef?B?=;Xsu#1zzPyZ6QmYq~Jq#wG$C_!?|^PoMzVj`fZL9&`F; zmg8aS8G@+m!ffM4OmJ0U?(Nb2*g|Flytlmz^HJkbi$}P|HrxU)_v1hUFIMb3+UP56 zgYd14I~z>h&CWv@SKtlO;8Kx1W-*4EBvHHBUk&-Rh@&D)eM=Ko9}0MQ1SWtL*C2`e zd0~W&L3waI>}&hkv2#rFv&3El{i+sc4HiB!{%~xC!)oAf8N^?UDK6p0F)6J{rGA$f z(*v00YSw8Q1vy=bTK+ud;YJ}y=dh99h@%ZnLK!d7X&a`9muPL2ph*N^$?;8wt8zH8 zPJ_g@@MD_&R$RuwvHAY%52!! z6%&}Do532+!9yqGhL^lJx;J%0^etfCvpo(za}1lSYhvq`U2*ypim%M8kuyi5X9MnQ zCk9ZE#>oUQHORZkGt1!LWjvjZ(x2G4#(_-(_ObhW`;s#Hsos8^ShYs;RtVQ|<}OOU zBbb4kMOj+>x^K_EXhj+N%*bfWvd(Pi+03d~!l~ofY961Oh=Jp$qI2ht*nuMAy?1>K zD@4F7w*4D`J2_NyC=@p}u0bIbh6CQ*#G%5rb8~oTG?pf(Vh80;j58OQLtX9NF*G_@ zPQaE3g52TdomaXq0bP!FFrF{uH2GSd-Z<+z-@Ed3`TqIRt-wi2e!jHli_2xFYk2`> zF9bsK=KQ&Td=}6y6w1@*`}3vsoxfbJX>#0icsLV7bTevf$Wsanlxp72f|8Z3dCzAR7nj) zul35&b%Cj80?Cy~8p$qrtV4^~m7K-KqeQH9i-^K_5oYd>)HLF>s4UTb`4mt1n>M?D8pY!GC^7J{K zajW0^T%LCIb1wHnSM!$V&*?-emX*sBsboZvi45Nv=T$^t9_P0R+~=65V@ll3^pM5Q>(tx3c)nZglthw zdNzTh(>VTsyEl&2m}-cz2JAX(nc&#)Kpg4s#p_plT;G00KvUv&_EfZ>v7W5bK%6rB z;)?c;*jf3)cw}%mzH;(Jd|~NG+}P3)H)2jocU6r|ZTQq!jME_40~3?+G@cxXA&O68 zE#WaH*A!m*bOT>m-mE}f;Mu5!``HF}uRJ*Z za=RU4`z)_-j*(*{SJAM9ZFAvBqRV)?E{%`YN=h(V8avzKdxHdPOEZX_HOe4dO~Rd; zAzm)N4t@Ntg#~|ZPNouJ2W0XcoNQqk#c}p$-IgmCergJ{j%+M!ZygK(*XKIE%koVl z0p*yxRxMz~#Qc7zS79o{S+W_jnR%N|z zJSA-N{Im=SSlelv+$d-b$FzBF_&(1A%l2nGGVGf#2jg-mf1mT`_UClglWo{qZtfHB zP2+ppYo7}bdHpb*?Xx`V&*SWO8GO!hIc=^px9=3($EIeTgD@u`2<52P)mL(I*^%u3 z4q%VGy0Ig6?AjTJo;jVIEj;=V4p2rGFo1!j92|%2-Mu3wIa!#+K6C%{P#k>nPz>~* zf?L~+^Qq~$v|(YVCQf2b z^UMIYmT`(v*W4JJd+_i$H4>)>2e7l=3Y@WKu+gGJ;uu8i)mQC^ZCiK8*KflqP$%;m zdl{8D_o%}o-85EAI`JSmJT!>Ypm{9YU~3pNko9F>JEXbmR<6k-%(-!^JNewV=OWwkcjj}Ta{luB@^t0*rg^TA%UYc#$6xTf zRx*^q@;OBaaQSB&@?@}F<1>((Dc4nA!1?0J-{*X$%fIrt)oK5!pUd0#-S+YGrL&Ei zTuTcJ!`27_Fu2f4_|-y$N+5XQ+~Bvgs{QrlUGs+cUbAXO1!scbpEEcCR|_W0d1Og!Hwm@yCECa2eT21utw zye>%$Um)bM$^D(LIl1q1T)xlGIn8rjpDXSE%)4B-b>%i+sNVd3_4PvOFBG5ipMB4G zgC;;&5D*?QW5Q26(VFYi6j}{O$}S;(mw5rHL?}8OiVrAaAR@|h-8824C;W++Bv?dD z1`)3D`6nEB%v_2uy_W#ZWwyel9EI@mM4}pGuoid3rk#YFc4ib4S1aY2UJkJcFRw2m zc!PC|ymOmGdLl^?q4~`t0@wDl=}NFxLf#(vreG(Og(r`kO!d@rblnKounhux38drE z_5$3#Avh{CAh9Wk$|a7TCvjudfN}q1GnR7p5A?=*jtDn2$Pt}_7^Hu3T*GIiIoXcW zk$UXm-PE!%UOu}q`lgof#5W$tFn70xEQc z#vC~#=LJ!mdc2esIl1YZ#&HF4EzO7~QB^AyHWA+@(q!zH6#-fy7UjHVks>**c@3}| zbUCYct5FD{g+VsW^iS#7xFkjYQ5ogreh8$FY4C z$k)>+(+YQvlm9a8IG%<~$XIqeu6fNb?COYNQf@uOsT^>9!y9x=Aps|+z6p<9ER4WD zwpt~KSdXCAfpyL3l{l2vQ#y^nDGx-dFjGtWgmvpIeYa!xEL^9GR{oejwUz6f$G3cp zYqH!|;nt0pSJN~Avwr8f&{lGXE@w?xwk`IV;xFdWDUSEHN4QojBK0BZoD0U=X6K@1 z8+v+r($%&L`{psP&*B@?<@sS9mgCj2usoj)`I^The}~V8JlAZmap~JAC*Paid%w$a zeKw8tShiPx##vUrH;?I!H;?6?FErr=j~UJ;W&#)2%yTwf_Qjc@f!MouPx{tbPLdvZ z@Nu~REzz^NJNi!z#?eE^5_f)d2vdOjZpQQ^{mUocfA7Q5zGiLg*nBBzPQ>Zi{ps{& z5mB8*#7}D3%nc7t=m8l5vL+56>|;aBnAKww904FtcSxAl0=dI=h%8i8FGfFR-nurf zjXi5|Ykcr%`YumHi--%fb>McrsS~0Y18%I9jljq<=II7|@!rO1#l}r=mHDpvMobKL zt&8yqPd|Vl?8FzV5fK_5WIdlptaFI^X`50ZX(yUlt4yKs~^^#4+X!{pRE~Ou$WX!rGrYkC<_y!?9TgDwp9fEV$rHz!IPO znnjYOzrY-lMr_9C zdtp}CO>)oFXIhB}$JHRg>3d;MLc(%pAO`1w>smNpbsXQV>F7-LNMK8FOVHSEze}ep z=8>aju>IEUx8yeX-e0Pl_qN%0B2bAMIditbILn>Yb|>kKD-U?Eb8a!+DChlcLl$JteMwsa6K2A z;wVRoPuCV>QlbW~+q83w4dfz3^{GjmRv=(pC@jPtY(lR^-rl)6528!XaUg{4Q~PIu zIhxjU=4;w;(l-+elMt{F{UA<>MCH~cK-)p|Zb*vAnTl-Xx|avx#&nkLPr}Rb@t251 zRtDFVI^bfNjj<;?d3;@aJJDE+002M$Nkl(@tTC-#yVgZ$omzt?BW z&ShAR_4u5L`aFkndwn*IX>&QwaeubiZ}Xj3)0y7jz2BDe=kmOo);3zFc@3tQ*p~a8 zzu&m>(06Pw_Fc9YII51mV*}B(VO=zJ03Q`4+2HQ=n`3x<2;#3KOTDENVi0-Rbsd~^ zfccKq9>*~Z_WZGVEvK`$cNjVI4e`x~???W0EUvwF56(0?-+$FrSK;DXU7m(G zJ$5X%Z^Fj_9NytGBfxJPA_H#piZKLNxNU>Dkhxd07LRqxWk>>(p?%dUBbH|s*d!OUYSN>d{E|+=UD+|DP z8_riIjJf9w=l{BAk%yB&fXhhA?>S#zt*(3ZcRyz%{(pFx+gskw+>HFr=X_tD&badD zoX=|!1LgGquJ1jbYp9nK+K@aC&4Wy({5%c0uUK^ zR4f9{$f+DLI98V9`%HM4$LCDoS(a%;a1s(DW1~r#No1Olvt=sVY(AB>T(l)>MV7{? zc%xfVH)vHDwr^j9+u0`E3satHZHKVb%(1*OjUq*V)+=HbdH8HP>#|H?#xBYucaHWS<>+$=FOWOBHbo}{@!fEX4ln5Cu9ZB< z>%tLUqQ81U);o2IgB&I+bs{)vD#Uk5F1Wy^G>>fog|-6DM%+*o$S*9p0jaNo_+?yl zE9=_f&bSWOs1ovdLzFs^KN5fTzv=C_3{NRP<<%lOrTnYoW1KK!9ybfAzLoKpz!V0O zY-}Q4Bf-zaBpU^q(A*418DhuHLV{t|Hozjuib@QQO->-^jEpkg+tP753(yQ}sr!@! zTM)0EogEwluTAAj=q>?2!cc}6+tz>#qjSL^QCT@zTIVdoZ#(Bl8aG_RoZsRvxnO5) zu7;a#TgjH-&UfV@6RgU*KKkgR5H$ViINW#%JM-Eu+hmZV>N`a;><8m@;qKKoIoC|% z9Fb5r-k)jx9{b*Rrn4Ns+cuTPq9j*tdSSzF^=f+4SiW)oj5Du4=Tj~xzq8H8J4emy z`&^D~uw1XseS>3Zdh?sdcwxnS=L-uQ`=5Xd+5l&?6&J+gL$lF)`~Xf$a2SEpiHZUQ zCdcqpN*VL<#N$sus8+`Pho6Y6uiO{Aadb0>IL`9KQuLjgjXm3MjN^y;NIoC0eZ!5h zFoO$a=Amu3-Gc+etO2#a)D%808gK(WA6vI?i&K54WBAlma(G2g#Z!+x7Tb4T8tq-} zG0aI4nw7C`{n|Krw3oGGp1RJE7KO6S+v61C277lPqN1GZ*ksh;MtTxPR%bV^yBnq$ zvx?~N>*u7UGKP?`T`bbh%e#T`k>n_60Jp|#P!!k2wR6-HqcQ@v1ZcEB4cz%U@wVlFN5ZlHw4B(ew+o5(8Jrj0N*rB@Rws+ZY6-EiII&QBIOe}}PDwLF4B&KR2T2FbsmS$LF}! z`O4Gfcg9^PeJ<~O*YdK?_x?h0!jE|+CLDLIUWgDxP7-nx97knDC6e&h&@ht_rs4y_ zi?Amg_|EcjI^n|it_20TeZWY5PO{8^!6J1ee>>~I}JB;!^WPo@Mt*_ zCqNlZBbTxbQCTJTs1eB3lLwHA+fRuM^bNxV-QTWjdDrckWsdB zr?^6$rp!r><{ROB_o1-W0Mc56vep{hi^`#yT>vqnIC5?MdgSep8HA9lg>bD~gm9sM zsS1uO=|<<{1RUx+_v11bFLNDeU{gX=AltVd*}krIdUAw|Gj%4qA&BKe&KDp|Afy&J z3iafJE+v$Ruml5elByu4tKix$Krj{gUPX$k_#RJDW<9QFldUHHT8JXY*ma^j;$G;kmv1qCl*~XSu`V0?SZs?O}3Gg;aTbpq! zEYZ}`C}$H<0_I8`KSduFkT~VOmR#%u`@=k5>o{_@pPdJ`t324| zFMs*VNkK;f^O8$0N$rr3HLsj);oVJ`{o}puwmj#T?KDk(HZE=UsM~%pkMq{6Kg%>t zZol`o)3m~}<@<9E8NB*Ff4}+ix0%Op&1t<)@Wj=0{&Jn>$>rttm`{$f&%U?+%_9MB zIl_-{V!B*MDuh3i5Of7}FeaHJTX$@aryqYB(Vb4G)l-_sXrYeODWzK*u3~8}ZWjAhPbj{v6^t$d%4v9pun~!^wKV5;&@^ z8ktl!MlHbF0-^~;;tm}?$fmR|aZd~2^jhTHJ8^+L#VN=f8&C<#Ax;Z+@7WvUoaCH5 zI>07%J*S$Dl-n6cPalBGjw0CDAZZ~)u~sn4$SyE67njrLtK1{|X&xlvYMeP@E%aeC-#T!T1q-HZn`@RqPYryIKi^HCKS%cSzWT?OS)R}P^Mwq@x$kqj{A`}`a&j3tU4CAD^?m-8 zzY_^%WFnFxQ9|${DG{EU_||P2<3yy>Q^?7&`1-uahRLIE(+G1JQHflPmy_z;x9&8q zq!VcvTq6v&!S~jYiDC1YP9$6phq4x~Ts7@;Gh@BhmCP=oneV*_-?rIiiC}}}`%TUb zgZDYD_1RX_s2rKsC!c+n+RXgRZ8U9psI7u3J zIi+S~S&P8`EXRq!v=+FoBvByVOKgoW z&Tc6E{%XgX)uhR>g3v98+dKyLuf&t%k-2-Ov#dGB!f~|!m1!0REZ5T}MMhu&pMB>( z-1e2mtOS3F;A9L`+)~k1Zn$Q!YN|U@d97{j(FeC`O78gz_ug-Fv$1jGMvj=F0{E68 zOjyeM$9)^0dGI+vSmdh53T65LXk@6FTQjrpdot~AH&*9^xJ zga+H2=bvL>U;DFtzBA4?S+?J8`Noytp){{^8q4;*`AfLx*)_*!)0xITG+pk4ydL(C?_A~9!%z;9j1%l5DVW4(h@KiFGLrzDR&aT3#2J;=BYMECkO@Y(<-vd+Yo zEj>uWAy?avWso*RPB8B=hZ5%*#C&RN*T(3?P^@Lcvw%XS#P;GWoKZF_bF`ziy&2-R zDmJ%lj{Q#^0QA_vH@3$toZF@~?J+bsg4oDFJpRN(nD=A8K!|I#!oD0G8{j$x*A-Xf zoCKtAeBuP+5YAmsht5Q2H8S4d(stlP^M12@Z+j~nRtreHfYMsI(r4#EN-13l>74D@ zvOIvo+30*zDtqOLMQ5dm{Q8`$3*!00*)jm;^58@&5AImMBdo-k)*WMcSe^ge(wQSl_)rqcID|^dtRc21Aun`%v1vmkIuisgO=(D?O zIK~jEXg{tR4wUsNN>Ib1SO-Ft^H9qoT|mSj9TifC=^b8=?~BV42Gk8Po5q}X5|IUwb)L~SX*Wy|Fiv54ffZeZIo+}Xdy6?wZ_7cjnc z(c?O=a$)*qjT7+~4_X!hFB_>bvrB_WkNK8rA|fZaIDm6F1c$1fMJ6J{I9N zxUs3GE#tE&bYXW??b>>d{$@~8upLWN%$Y(hN;yq%Xi9c#Q3y`3Y~T2OUUOS)pU;*r zVpn!i_*au%!Ua%E!8vIE|ts+dY zu}D@3XeS?vm;s#51UD-kxzcenGskcJNeI9ld-g=@+72|!hiM0GgcI(mk}xy3Fr8pX{cmmh+TONy6mwYo zoD16gRiUp?$+%Ew;tsPmF2kvFoTdD$Sl8x|U39^$1R&D5Gq!$Dnlto=`U3ToRm;Y& zJScCjIDkayfddB;cUYK~5Z$_UYl3Crwy&=*^^Jt9q5;CWTyE1!$O`KcyY`NsBPUb?VLRbEbAkRF%h;pCGsC82it4A2YuIPYs+1U+| zJkR$)>Nj0;n=c)N2Ya6 z)8<%aOvkY=+qHIcoIE`Y3|cPp130MQl%$B&i~eJy(cZKs#^%Q0no>rgj(M(3G9rM* z>DaPu9pxi)duTZ7E839ThT}Tf7q#oIjmC;+qIDe{^l5coCZY+EokeWXRi0`oZsb*ba?+YM)mmzoX`I0}^ zJJSOn&l#RCzZ3MFP*z^byXy5hX?a*({&zgD&am>FiOur#0(S;lsFs8%Ga}5Bz=`9} zbf!1tvhw68FLR~3f0oO?R6XU5Pe<=8ZX(lX$KHOhKT1311{WWYieduF!6l7W@`w&;(JVqCJ<#f3WpG{-EY0i^v4lb{oC5huEj^0`!rgRP<_p5D3bqyCGr` z)`Xlge+zKX7Aa#I8>rUf&pL#Ck(_l{SF$floCJq$wN8<=*TKO-z6oRCAb1gF;_j2i z_XP+uxz7}FHedO;?A^L8nN2Fme=9={SBUl%IMyyUfXv4|+DEw&rgjmIX6gs#Vk1Pw z8Z_T$K&rVfY^!ZkJG}wIr2zuQa?iazG*7~ID?(r&IVZ9t%p*w8}2()cBo1y5OYGOz|>ALrTXV|L~bOIdGb9 zn~!5Nr_vad;Nit*yKWLi7>N)TE1gz{MrkaYbqgU*}{-Vuu*X)n&pzS3LZOtl8tpKzqWsy;Lr*e z{#uZmG@o^)Weu3NEIGP$46JPvCKWw#6D2Y2IN5H$t%f=(I4(AB5!<@POo`fBpxlV)Zfm<68&RYmT6x&uKp~;^2{T#X&r7-yh?~0 z=PwhbnPByM97EgccbebwdyxTkPTOYNt>}nT$fnNEBV#+whD_p;ov+G+JGWdKl?@BgNBtX6&{BM52J>+X z3&U~w6`OEY@FX^0vBx{mmrQdF4Pl2B+4dSXIO7w*0yf(_+UrT*7_*b$EaYZen%WZ# z&v1e@!Cajfn2O7<+`&Lp!4-x(ij4F0=n@tK2H*l#iOFvZus zeiL=JM$39mPA1{bU%NG(8i<4K>qZDZ(OfQ_MJb@JrtBr=rx==so1 zIUttbo7s+M&3VqSI?w9F&-*@+0jqPJ`}}-mnEHZg{D$)c0oXi#qt|kPH+ho7LuuE0e0X9_`5{?gUrc zA$(h}h%>bf&Xe!`dBm7b^%y2?yV^#?0aH32*y969lFn@h_e zc~&}N9$1k33jGdZk!!0n1~t*S2U#qxIA*YI|I{J(wdLAIpS>E&@AGqdae+TM-vwU( zlSZ#@+l2~0UpnWO@rFFVjPsZJ7&!91KVdHSi}&e0V{CR!Z<)VTMrl6hb{J>=^72Ji z2?0Z}*~7xL2us31n69DUMaUj`&4S?T_*FrOiR|U7O|hv_fkG~fh}rfC|F+Mziy)J6 zcQ$4s*No6zz|@2m^Ym+0H4!vIki2i z9If2KDF`ZIy-Dvs&JQ<^#I(TOG{~(>bC`0dBykC6&|V%LA4v+5ayy%l<8-3gUV1uN zCz)TYi{a{#*gx10a$6G{QSh2)4$mU*SyzEf9mH*&8v|tS*7vGyv&94cZhCZyJ*M79ZT_+quP>a?Bp zpgubosYPzH9R>vJfk-s>ajJafk6Y7aL<2D{3TTP=g8-a_IBw*a)NxS3R5@1r zT{!cIUCz3M%LF135o?$LiqMl{3D?%lhAuSw(%hvCX~#<0qWDwok_PmF|D+ayO>_?bXy$Kf$v_!8FB z`H}O(PvMU+mBnb5DpkVu#F2hjNpG9ws7fT7wmjIE!mzOH&$(h7g@60Px#YbHYKA-y z{GMD^UNdc5?pNo7`GrB-ZCd-xJ~EBv+8*0x8}eK>pTRko2~CM!^IDem8m!a)F`xM* zwB?i<%;&w|Ww1``H{SAnXL@6Oz4;r{3;$H2?8K(v$wzzRz*DSg z%MKFuL8^`*seDhLl-L@Hmu_jKP zIL(F-ML}fJ0c}w9QgpR#2u*dJIDUqHn&-4Y&wz;1uxTA-v)9iK>Ccu$!YwH{2@Xw-1hW&WVhRq|g(2Dp~9ZF@>D3jK@b|Ry@ zh;NZHC9V>Yb+*G+-PpOgqv`5%-j@2mGzjOsIOpNqJmO zldl&}bCyAN&UfT|E~n@Je(TCVQ~!U=y?Lx=$#vLQZ{PRs_g?So>@&^9B(;ztWysWK zXN9393lPhZ;N*|UfRg}096(8A1P}}a`7^L#SaK3)Q6eh=Ati_viKMs;IV5LayQjNf zcfanp@B5P9@7(XazVprNnIT09s_y&l{c1gR>QvRKQ>RWP9ufu#G&_Ug8CN2g2qnh! zGp)}@b*B4%;(ye9e;Dzy{*TH_rmbGz{BCK~NlBHL7s#}lmj^gBW!1p|-NWG7N~bUl z3rHUH2pQPjn%7>dW^ML4bfN@6R#;psT9ApwD;UaLSV*d}h)%vrTy+s2&nS;}SEAvq zTto`VtX!?bmN16yE%__C2xe9`1)%b9nc<<9Afro=TXizUacwP3s|@Q-Fa|Kd>gyR! zM44IX<9!2FK=_0IIgVcHZI$g%_xr(1dw)vv{U~{79O23D_viM|rylRPGQ5dMT7c_e zJH48C-9A_H>Y_wCFr97hTfAq#^_}5<+h?7Sb;dJ|41?R!hUdiWxA7u5ZLdi-Cqhrz zI$=6lnU^*(HN&*apuBG@PZV~2H23E$wZBxrolC}kNV%_(cFf>79 znNIMYW?z9htlHB)<@yR++<#5KYyHjjy$`l1XvR&9oUucKHahIbN z-0gI8svZAr%t?7m&%h9>7a(gNrfM7g_Rd3gQCN(5Q=Uw$%y85VTgfU5th0qa1M}2H zy~^;((#s^YFB1#n?qY%SU*#f<n5TjU@u?Z(-_+zE1q;qDXEI zsE?hET*?V9Lf8Ygo-X<%@nbQ`w&MmW2W?2KJe1Xmdc`3J#tuBxh2+W8)xD5PJ36;< z(FluTcXY@Cm`XW0zzz_Mx|SvOwni$vIS|#H2c&Gt?j046-ycajIf=TG3S;gV9t%<)Ju@)`yNhZ7MBG=Su8X zxgD(!lVRIj|EUF+F(h7xEa(?F_;vTr?XtmDoY$Uv7HbeJ8h~Ya2}va5t7-^$@7`sB zfTaN#=d^+#t!mrT1xqknp%PN5oa`~EYS$aWiaOgLHiI4*uU(WOWgo=oylt=QjWoB7 z^$VFZX|e9^z*yP;^q0XChsm(YAc`-;vfufgkNHTy{;t3MwqN*I58*f8Y!B1fugp`J zl2H~;nP}t5bo#hR5I&t@O0bP@T49qJmBD@Px#yz3mYwx+M`dP4ea>o;?Ax}@`j}tl zopH=pII@m@8zvle=k0#moY+5q`czyT&^Oo<<^Nm%=D){+X&Pp7qg;D-vRu8wwdEV9 zu)#WyR35WjNL%;zv4@M@o{dH3M>NIPXq&}Fn0@;5)*7~z!POyB)kUs-9_$$`x0ks} zc@gR8*)#MV)LOWrcoB1JGY{rN0t#vJ?m>-VmIV(xB^>PXO36)Vv4sO=;}b*VwG6)4 z>c@t%`u-=dIlFLIsq{VQcb%OH#ysPrA~OSC&s_KfJFKWLVO3$Dot}4Jd$F83eX&d{ z-JQi^0aioYVbz*TFE*#U(UF%CuQ9NV5w4E4+IJ#8z4Eun{$aVy^SJzugRUO`h(XQ7 zO<>jIW|X?0dWy$6J48-;*>S9MJ{sd!@6Exxg+W}&nx>xbcIImhAkxV*pLcD7?Wpd_A}>!faJ=;bkqRk&yjLUb|X?!z!R0opNS zdO=$ZqUv0=BY`lE`74>NY#<6Xiw0^$(uOJkdEwj6CuH+Tsf~=24swPbs!7)P4v%r-94158&9-_>+)St& zE7ghXOlz4=zD{~F-A-mo)})nfbTyON@wa6=DGQ^{w~v0pY&~<_F}?@K#E%QEx|`(4 zuQcmnp>8GwFIkWgG5@%pw3XBNgs&k@l}T0gCf+^T=Iq5*BqpTjJg_#gP+QTyGiL6B zwiyRCC8nCto%_>le{Pf$LnkW9C^+&^Q6~)YN%H!U$y0y@>`bbvJgD>TLUk4sT-(@b z?V>-9z_8i5yxNu4i8_95^%h3gInmrR%n4{Dnrwf!_W(;5^iWn&gP>ipIM54I+s;Yq z4fObKF!sC&Q@qAuv@w`m@g0j3^lepDf`{gWwp;ZqtjR@ZJAS;fG8MmvxdluH+83xh7|$G7$M(OG`}HeND?_7~yM&nNq*<=e+hC$7!Yy4s(NlVgST zF^;Io91c!XsSb!Tb}Z0Ic!n;DE&=QvI35?Q-MBjq>EP=g=X(UY@=1`Es`RA_pMf zAuYG9!FXy~Z4eVxCnvZhU;+Ei?0hWTX(_MXxLzK=dV$;XM%nhi!Muk4Y0CsmvL;#KDa+sPEKNK57h;&eH^eY5xV5S;$m5bGTNK^n9uCe zbO@5V*nx_LHsjs`x8-fDySuYqzVrwGQ#r)~U};I|Ka117SuR&_mk1ni`16(5UM`c| z0QTG`ua-p^*N#p_Nm!9tqMgul>W9ue|FXQ~P66XHa;`v8D@gyS&PGXB|4zRjl*DaXOA$8>I^{_d)!#|Rb zZ3rU@{P4fTuOw+*OhQU`9jy5elWgtisQeK2L&{SUD>&MsRRy7i25Yd&0ZYZ;B6TIL zk}*x$Y~$&+rH?jhs~f?p)wcF0orq%~YYfts`onP9PLIm#xbWlrzMu4uiu)JoZy&Q? z+4pinNLuwBHxo4g3c6!*-FNXw!}@3@$q7Uz!^tOc5?iDAo3H&>XS-QePEx@*!ucq% z%XCUK zsSzZ3?j~#@*@NYYzT$4l;Hja|Wp!)X{Jk~mfLTR2yhgeQ=53cr%uzsgM4QlFOWVU% zcQ=QHHehPkkovWu%j$OHde?5bw~G!Z{qD?OPdSNHb(g-{Nj*kUgk@8n3lS*=A3Ekf))87@(6{M#>nsL#JAntC*y&A}3Ci6$ z1kX&ME@%hT-Bmpa27H>sE4GR4{qc!2i8jWVYQdntJwT)aD z>0GqvG%oK&3D&23(;M0BSKxpN+PXTbwel^Us8ZlAnhd&qC&q1WRs-c7w0*>BnlH5B zs+9z9(2_>&8`7|SGE`;AS32@{^b2q={(X$+EndPcEV}Hg_7VH2zs=Y5u~4K>nAR}g z;=nkD`P;JWQ|9gC!7_jA?{D)puY}36%_DVSWmv_(^)hb0v(E}=!khI;*o0p{%Sjl8 zO;|0j?goarVwGF(x}e$5eC9_vym$vZp2Du`bLG{q-NZ!JC*l^Y-jTEAg**SUygU7J zIdl0OS33`LC~B)bc$X_c?rTjeYVxjMRAV5k?I{$XtC zTSMT4J}T@U=2}B4+lO@$rN-?pl5|SEK8h33KZyI#bdSi^#x|{!%yI5R^F1yRe$D9~ zQG5_s62BeNbP{DgnZ3W0=#7_zZ@9m+GaIkD?9Ag){u%z4;hiwrE+6Eqr!LwLQjCA% zPNso>VNQzQ6<(k}I&F(LTrqgdKq`Dal*xlGz2+G0F!0upqM>_sh=c}qlAM@mogSqV zM$TA>0a_hAr_NUC+ersPlF3zlAkqcLYM2z@@LW-XhZ@|LtyBcaFun-|7EK8`c*jj& z!YF)7S*i1`j8VYrRww>;V&aPr>sUQXmMa=M#P2V{HMdu`W0u_N@j==C#RhGpIK z%e?*Gf?4c>{xZJXzm5S;UY_=LlJ}8DW5IJo3(y?Qi4q_47Iv8+>*C{>A`|P@taWp8 zHJ%f&lfP;QGO$WU^tVjkPO9pyxh<+BL|S%YH@xl^QBi1x*%B_(Sr@EL#v)qD@F2`j zE6kwQ6Z+{teZT;^h*!bdivMokE|VVjrU$Kqf9kG|q%<#_)~SR3>cmGE#{3UkvMe^c zki5<^S#1%%$7%m{>I$n`&U2V+lpU;7>b%ho2Qo+YD;QId9&qlnr6S{fdgK&4U%<4p zf{tfLd1ex(i$Z2L+R7r5$yXNGl10C+1O0%mP7WVIVm%z{>Zgwm!9-8>S7S=0H(V`H zT)4WmF0Rg?hbvxkJWJf!Ubd%o^N|+(?G0DzKkvZ|XL~Iom2GcdILgEP91~WMhB76 z394@Gsr~@%RPcl7no~VS+^HjLoi1Fs5X_WuW#naqrEBxEFC{ZtG02rf)poI8Sgw!p zq;qLa=eJJ$+y8XJnr#%YQjYmpu4VYPFPWE*ZE8I0Z(qs-V&*NJGOkKqmD1{$^f8U~ z1esXtU^?Hzl?x5~uXQnwiv|y}882~dnC)d5b$9QE6#rH#ej zz)(y1*tN@Le)?v)I(eyF`^*#Ni$D3J<-h+Q{$ZKlooe#Zj%LCPwN1dNI3k3NxhMir^-8T-z%$g3+2|mxpI#F z-^Wc`-+SfNa^>vRpx^tm_c{DJT2^*2U&!Sg%gbDF0<(J1?Hk=)7QC%UpvF!hHOBVy zM^+)IBU56iI~%##uO9wUzB7HkP4k|78C2@79_k`iu{5#`G%o4KU zNzf9jog;}>;@3%p#uM)BU=psKC<)Z?jAMGgb?FyB{v7{gd4JX-J`7&NJ;{FvgXoG( z7k&_sgNIBK@Kc<>rGsEt z`Jq`Xf`Y9!t#)XY@<|`Uo7=a-3fM6a9EPa5QMn(&%W`$%AYJ`izl@XNb-#}ix1R1V z;#-&!=4SY^e5;*Oe`-(toj7GqtgrM{F)F6der(@%!my9_Fqqc+qy93m`Z>YX#{prn zPn*toI?Z1>AxaNUKrzXp1Lj2JMCHUKy~Y7UB#Fk`Kr*?HeyQ*{VJg{ia+lXupVcyz z!gXuy~bpnaBGuC#e7x^a@S z?yWn(gXC3vuCVgxknSL%Xc+)otKCTckmz;75K?kXrs_Ah zsIyBv_2k=-Ms`{bW5ofc>AV874cwkXntT?6?oXl5DnmQRw(0`qwc4&oavT?wX95XQ zAWpM$NRFvJ#_dh&y#ww`ALhVdKE9mCaC^rTSmF=Hd5|Qeyc;f2qUY+P&yfa7G3ak!Bj|>y}e^W zH!Z+o_~If9CJueAt;tM3RLk*ZHV>srV^Lr9abpf-+_n$M2xB*kuE!V%{@Y-vef!j% zG-Y2fZ)sJAR;Qoa^4871BXcW!GL@ERI;}TI_ofxs=_kIG-b(9k<$Ea1zL|`0#xq|Z z)9bSTX5V(sw%sh-e(Se+T4&1;9)H`1?5Dydjpulxg(mgx#99BU;P*5U;FW2DDS-d8dB}2 z%e|Yc<@BYC>^7akX za1Mv5b61(ZJ&h?Wu7|~R-afkzELlyPE<=-E-mzxir}^!Z*jq!DV6A-S^PenJ^t3CFT`%VzJL@S)tc@UXMlV)1CHsa8 zgW1^`RE>tg1&bP_MS~~MFTVeP@rl03uEg9d(%(T3Yddi17+XHbiTHFjrY_$$nzFD* zIm12G-R$&FrwW0;eKKF)`PAcPJkw^}*ybg^9mefI#^fM83BmY=>zea9@`Ir{&RK8E z$ol77LX!}|H%5i~V@0`#?w8j>x&>n=QRl@@VVM%S@9fa#>9?IB%kW#jgfYq@UDi?f z8oc0fpuWd1^QfnNPlUz~!;SmM_za$pat)Lo8@$GeUYTNV`eWN=wJM*l=ob@rxc+n>s-x=SxX4npBgb0^TXwQ&H*{0FfRX;Xv zy}T+T-a9_ptlJ( z?`k4sTOJtVFbgz!DGLP+AA%LmwWIMhW#+2Gd zePuxH4IzCYuN@>eYnaX%?LDD4<BLfl(<;Uj2)Ci7~yXEmUb%-IVDY!=(}x9usSzYHn}2J*Uk_1XD5*qjWXG) zzbnIM8%id_GKtKB`*hd?Ohk1Pzn3wi75s_oMI=CVdWlT=v%&$CgF_`;9{%C*9L!BW z%!P3svy^`KAf4{&JWU=ead2z{iSRZ|?JDoJ?YWTLsj{$3**9-b1;cB*%0RBm96&Su zNJkGmY&JDrCOK7ZyRL06b6Cqmf0Z=P15+}l=T4nw%e9nqr^kt>-P9%KC#0$z{DM+o zIQGiY&Kj_C4?Rr0u*z7;tgSm|flpNx4jHqh!8R5qUMAxL$Hhl1&{=SMSj_86#gFoO z$81d@Sw5zjST+N@JZ%qc1e97bwZ}w+x=nej!7tpZQC(<{?w* zw|SVa`3Q&K;?g*#(fMsZ&HgMyY?%4_n3v)975jIz1>gFcpZ#2&So^niH*QL8ec!x! zGvF})ix)4(xBkNBjh=-=F>2pAESE(~sTO`}b%oR6Nd2 zbd-5ic9yv*>t1=i{Qlj4RBpVpT>iy>`;SZK)zkFN?(%p4{(oGa?fh)HzV|iSy*%FjIQCcXGH1acv(TEEUMh$8u(8|A{HxwMI;vg$ z>;^HH?O>j3mpSVI3j-79##lHZ!Dg{Ehv}`ZRdnK)HmOr};mINMUKi5o2ORzyJ~)dM zb*HRjT%2d)}xx(Sf%B?e3 zf|ldTZipLIOlxN_Kbal#OjzHDgs-O8B=bG`7arA#gl8o}mw`EzsecIK0 zY+t1=>aFR-kN!?0#&wI|I01`O8=xwkRC*isT^ZC+xzy3JM0*1yB?hFnWVm^;3q) zfxTi*L#MI0S7f|1{0k)h#V<^GrZuecF@o!=kT)#KK`>-nU=`TL!}>ukWSXc2~p&hjooS8FRZa6Xmvg=-*lv?d}$L2lg$I6Ggu_U+WvzMeMJ^sL}Q? z!d_-z`|QBPiFcp6vu$^Fa*Lbs0eGbq)kUm#57NjXBvV`c9)hF(puvk-HalSy=PLon z0nDQCdUM$Z_I6colDWyYx1D!kPDe(Epab<)HNcNF3TDe~VBh;Nk4yYh-`c}pZt*V6 zaaAXbhd7rmwCh@#-}2yAwL2i*4foOcR!`S5lR2#FQJL-v1{UeCIL@w=&LgV1Uj@SYTZ96E44f z2Q3lD@`crKCAQYlu|a>^L|BX~F6(Y~ZjS?y=nXU8tg$O{Ez2&zsn+83u^_EXP`Kj{Gom*w)UQ1aVUM^4l$lodlx7T2t z@0HhYH(n^*(km?=yX`u1GcJlZ}`mRa;*k_6ljm9?dL>bu2(GOb%s|Bc;p zo5k0KQ_o-~Z?Md)zFqcMr1kc(ctdyn-5al#r=NM2OB4>usqQOSuXv{%Y%G_TUbu%4 zsE?~TzTO(xpG-68{_=m7*NygbTn3sru{d^GX--Azq1Y-)$gP*xg7BdO5+VeKhkly3!0K7!szB zozk>AJ3$aEgOY6^A=h2TOTUCOfB&%F^?b8l^}HWJ4o6X%;mm*oa3h1Z!(;tymxD&9 zWS9$Ssc|zs7=GA3NN63*l^)1I3S-!B1()J!7YW(EhXopiRduN7Rys4!kdhKl9ok(c z-7Y3IjXEpom8#q}jNEM}KFmuPR6~dulxe<)NPt4p3VkpIleh86-^q?}Ct43>X=y;| zs*4y8ZCPj23y0s$kM;1;|IgD^xUr_+zcX#KtNYczo8#4gXS{qL7nXj;$>%sf>8Lr} zcsbzP_8Bf}6Ys{c?GoL_(J6WKk*_taeY7frwuFYAP<-pJGmhceid-omkDw zFvlAw&${bFirTf`ush2*xxS4g7)fLs44~=`(zz-;8XhT7idMPDomFGj$N!DY$FX-wy123<4$i>5>L0kY?=Yu&Ff8%yfvp~H8S4b59VE6o7d|@6Q8>WKIOagqLx3w8 z!HCfKV|mi2w5$Zw#hXm6Wmumq%Q)(m3a|O-{B7S5Psa0G{L9eVW`@f!>ilh=klu~s zZ{r(oTUkf*6%H9$^NThot$xP6c=2Mndi83QXMEdKmt_mDI7_;csTO~xSAwjHk7Y$W z(f?d<2)hibY4q2bw@%oEA?p>MjX&Gmn7iMBBp$ui%a^#hihglo=oF@_4$C{Q+$sC) z6v(8uak%U8(?3yOeC0;z9zS26EnhFM-TG2le)B&mSI$3%1oLuvV}824^?yB9_OM1U zd>Y-<>r-X)DRzO_HSHVgEIUYM*B+>g?_oa1EpD@$osm(!6N?RR>RW`7-Gb2s)8+J8 z4h|x9-3R_r4iI_}c5dkb2Umy7kNx;h!NlGK59sE1V!mw$X*OfasY%p?I?`@94%T6K2RM|8{bnvo83v~9Ev~eko{7b-i)asjs*=~PvURhwvET2i ziRJzNm5+yKGF`swaqSGvjue%bbWg+Cs5;Z%m5z9mzUwB5pU2s$*4*Yz!E+a_V)jLlv;ZP+Rx?@b856xR{1LD!lTq+T^&j zALN&v(K=_R%yMF2tokeyOGN`Q0ir9@%84yc`Bzg)MHkU>NOIin*9?_g0DVA$zgjJ9 zPw28eViE$cVI=?@$vk_=s?|vdf0PoaCsJ54W2_357X4*|qpcdWND|^zgOqT`_8A_+ zY<@vO%uE%t3iC?;36%lfP8zVJ&>HcjY10XFOwg6YeV@V2dU$v%@^1`YQJFudKZ*Ar zM)u!tUKu~%br_oc@^}56eIeh57WaWb?#85-+h`A)d%hzY;rhiRRB{f;X~Da&uu$jn%_X?*OD$4!hL8WPU90$1h& z{nSn3ucI$244rJd3zy7EEbMrPY7QzJ3AcTCKXi`4Z-b#xhs#5l$SEVeFvnCwU8;7d zBuv)vfW_zzf`%Oy{FRP*rLWrpP8!)#XZjQW#EmX#pcN^Pd3!m;LpbS(z_dqxYnb&i zu5om}%u(#lG0kPv{!fj*5ACXn@^OBzvb93bV@VDtIn-< z>nlSjgXnMR*)}tt^S*R%xM~T8iF4E27lcpPb>iD_%SyPVDg7-YXejEfVSUVxk=Anb zw@uAA^Dz(8TDIveBVkplEN+EKf8)x$zVgZ|QOAVM`U}5!F>i5WewJ5vJv-dQb})dw z;i1y9$u7`AXL;?#TjkdDjq>Av^)u*%_Ll4S-Y)NU-!Jo1t>tHa;tS>8#`$vj8^2b* z_}RtszjuA1y!+Oll*X_mwq{pZ*s#077XS2vd-Nf!sH`*g z-DI4D2O8xj!kd`V8ykBL6&)Dxt$C~}paZ;#ZQ|3dajTZLmG}3l+u%Am?~CudPtV5&7 z@9Xubv=8wvWIo3`Lxd~qRmaPt@~-Ffs5m*%2!~G&5($?RlkH5&gjX;)N9@^gnH=|# zjL?muD9Z@O72GLN)wQwG*U`jPd(y}i?EHoa?m(Z%iPf}+(hlKHfN|Q|5txDBoLuOr z|Ej42ZOrPb5_~g|^X~wipFPtHU(gT|EhH)8O^K_dA8(lJBOO=Dl$lND)wUJ~zRiQg z@tt^zf`15qtZ(A@&zjw%+V)ZT{#nZwZgHxsmtC(<(rP{2`1V2lDjXwOYfNIsukx&z zRcXXY$;rycZ}ZnUylK>5m$7xyGEW)V=&yts-)|XK-}ZOo$>>>z6OZPGv?Ac7WLxVN z=9dDl;o<7gkMWgWIC1-}lL0sXtgCP)gPIeqVV3Kaw8ADFhFNFJv;Kzrwrumr#|hH! zX4lO%quVSTy=-H1o9i4|j7L5!#)n4-;t~VXgxU=gl{p;Jd8-RLFd7f1XWcFDfH6(y z?Nc4VWqCU=vBKyh159Ytv5lLxI)7fh~NNc)nB*was^fubqv_ca2WMb?9U*@HASH&?Y#wE(~p7$uH5gw8F z(~gu$>nL8zu!t_Ak0<%P`c;Xb=CKrL95^4*&eDbljij-A;BOY=@W!{j#I0$BN7#(( zp(*`TMc52_spv#$>Lz)2aa)-5u}>N5Y>WR`WU&(}lV^Kdu1r|f?$s5y`U!)l$5jiE z{0HdI(<~ghz;cJtg^Ovu>t5KhE!2TEUk}wu!`2}d5YhxVtUFKND|z)1 zuSz9-5>|H{d}QQgMtvLiCi*CQPp$qL3bCc0uO-u z#e1)pmDc_;diZSlqu>8}8UIyO8BTSSsdv9s)<5>wOUHlrOJ(Ic>H`1cZmD0AUzT9Rzxd4O%FP>7<&C#q#iZ2;?QxoGU58*; z@0Y39ACyo1$fwauUn!&GL*?EK3lJ=PoWFE7c(9GN*|Kn-ogvm;AOF#(%K!1*7pNLK z@+U{o6Ynq2epGe07IS<0A%E zgk~oeY4z_wB7;}@HNOpy+lV4v#Ew7a=|5dHJjCbGpDLd!UpuD1NfPg{ALk2Z>(R2>9eEGPQrN=QY%gG?iN&>cX z3}RwJsmKnB`Pw?`V)8SN@V0wh9|BDwa86|XWELQ+s_h&n zXctW$$$aJbvWo=5?<~v7&pz(Nq_YesH2bv^p^_Ej`mIyyqF$SR$z(dYI#K)EgECH( z^~q8ga{@IV%X0Ed39OT$afGX?V+F6UIeD7a@(g$K+uU^gd$>hx*{1WUyBQ8lDSeFz z9VVp{<|@j9DbgB9A54pF=UKxrK?mIKc3GCY9y^GhRR!ok-;|=m&-_iZ%fdZwo&)Df zFheDXju$=D{K-p3UM4P77WfSxkH2$5U-XsXMnXHJPXMSbcok zMut|CXUj~ulSsOxk-!t>nQyl5I47!GF~)A5rc>H2eK|hKFgZ{3VEV`#jN04!VA5cS zx$e_;)&8c^c6Dt>M={Ta)Jp#yY-nzA$NV0++~hE^dAHa=xR`f1#3ej3o0cQZbaSt~ z%%W-yD@Rrb7|R^1U=)No(yLS4@9kDq8%Q6qfPwZ@huPz@iCz4>;Y?GAkOt`;nAw4B zNNOV^{`~2m{%N^%=~8*(i6??S?K{FE{Yme_sBY-3Ter}UJk0^12j$CO{&M-+*S;3a z>d*b$&y`>P5%a=31UIx4V$$w(nVw~FaC)Kq*Wb8Q-h8#Q z{QE!sPT3#7SS~;Rc6sW5{*yBE;@8WA+2L{m#`CS7vGUdnv!(x3DRZmS$o?0(D1*g3 zS0Z=7z^-#xkcq0i@y0u4<}L>kvE$aV-(TK&<9;k0`&bNp;ftRsFTeaUOy|WiF?y=} zm7jPDeeAXJ<*)n+_39{t@o`@Ws=8}5B!_}hrO zdRY4TuKP#CrnpY}4shmT+-O)D+uwPoyhB+snhA{{`|Lp+y(q4)fb=bxS@TeTOD9oi zdL^W9bYAm2l&OVjk)Q&;MrVx#wLgaI%ufPK*!;Gm^kU*A1||kd{d^=$8Koq6^T@|A zAIsD)2Q|MFUzYJf&hU);LGeB;%zQF0^AqRdN|*3{7%Y#1!*u4SjYeJOV~dERRtD@a zmj!zDiItE{10Hal1owQ(1b)v^@dRO@hQ=K>}{81mGn3oKvMvjB7D9g!) z@f2p4a*YvSQ3msQNL{GEfM|ZnIx%<0vrQdLtNMWVj_;|;K>O{$@K~o{R!Jz{oLt-j z6n-UIiBHu94ENEm`H4#XIsQr9f0QDc+p{_ChyAXXk#T+JcRl>0d}q4M!*)K-yHT$Hl-`P~#7)3QUd}c9 z`0HYk8(-BQx9P>_E+_Xjht=L_|6Rra&qO%CxM;Aw!Y*v!ekr8qGBaZsahDG6-kA=D z$95LpSYT7%cI@N|uj$=d6$c@Gg+X3lQy@aQNMFyKs!p=6LQ5-atKi#Q3;kqpt^3r}RP;&XnxAmm_jUeG=ePaXc*2mkj9CxyAx!pn^A;B4`si=@mTTX) zt^GD1{p)VC>swf%IE6|ahp^@!luPHHD_aZbzi+S*IDk1u@;XGbY^`cCYdTcqmR^0c zyg?lCL4L+|ySH}8~dpY392b+ydQuaqt>J))pTptu>H`AR50{?2^-*3T_KL2^>iNq`cCaNDVkqcgr8K|=C72lz&C z#Hs(u{IlE)Gk*zfTib$scQKfl=Oz+?Ff&6~C81$LLc*cbgo|azKtLJ^I3?GKr_A4S zKgbzwnjh3<{?LYqT)|UKl<^(X z114oS&A6Ql&eT)KGQH-P`S@1v)d8JWuW-U|EftV)NFmIM)G(sLRO#1wh|6}9{@;W9 z1_OJD=vLdIVUQbqsOzePSSD3#1D2Mjm({habYd$;R`~M~2eAO-t+dtOKJ{?2`b+1c z4UU28IRE4PGHKS+-+tF=_PBJ0r+@vO-*wz&8NOB1k&d%1jqj83t9+|*!FbX3ZZE^x zL>PJK=XW(W7^lj!YO`ufH5tg1kSGQ6+lk8lZhFTZ^RgVn%+HBU=Z#qYHq5uuSjPm% z0>=}#nf2G1pLr$2Y~IP(=A;Na5phjxpLJ1PrLDG{{Z3fSH}j52{8>Q)N{N6zTJ|OJU?13Y`~+@Y7Yt@d>zMF_RY_)!9j#0@TSx=JYT(6uthZ+M z04n%e^LK}h&O{kZNN)YZB-1TvKOXvg{J_KZj6-GgU2!1;+JXta=!*;lkr&Yob6jwd z+#`Huro&%npAWhKAB&rnDJ5YPPfA{^aLNOYPFKh{VX3<(pL{$RzNN*Lva|>T1d~Vs zp{wWi=9Ut{ZWlpb6>IgX!$P*H%#w%iWLj6(R6VE;?ZrZf#f;&oImY-aPGv0h+Xd$` zqKAx$-qL0|RTgAYr3)QR6b$tq+sTgK(vCNFb-?LMi?*$90-eXbup}Xq+*1ZI+eONt zN6&Or`r4H$jrk}oa~xKeT?l&UV7=J=nqO*h1>cnmDL>8Z~Vq@#3cway?=^SR|fYNfAJTC33T_v zZTZ}RFr9R7Svu)R+#AO*`?StD!e=`1Zau7@{Zl4aKc%!ePDsl>wwsUs_TTH*ua|Fs z``f`NU%Pg#JoeaQ5pJCfkA6aY+f@7{KVsQ3zjyB33H*Hi^Pdm6{4?JBTqy{-1FvV#UBtxOgEH4PTPC=8VP)}t`Pj3M zaUsfR*`LD(@!B1vyZ6h4a-8(0vAcI3 zl%+XTuDA}mr)!V_l)eG2KJm1P9m z!(U?YNdk7uhfElw7%F5e+@hdUYpz9gfv#>UfhiOvYu=Is2y7wqKs=iej`>K$-j6K- zNLWFXjlpRh-P7*7Y=k?3F7%+Ei zQ|bmXqW)Di{A=BWK|=T2I{FBMZ?DWV+$|M>mU-1l(54ZurV|%_dsB;bbRh7zD3rMh zJEsjCCvMH(yc37!t8_sBfJ=C5F5wa{*(p1`yO_b}fN~>W8XWl)_;)pqVm~*&s3+!@ z8VJS)A-9gO0_)uEz!3O}vddlQj8`G8w(V5Nc8kwR!OI6&@7ExB_~{ms@TjKYfhw&M zfP}^fOUJ`(N5DgcS{ij!QbN?ITMKYHXlg!fkG49BYkvH*=1w}kK?!N_rIQgHZ)CB*pxOhP~RZt}>uS z0^2%_K3i|V59^Bgj48 z(FRbCbYtt2Id(to*Oe63tLB`*BFWLPAxYGS|-uPP0YUd5_z1=COt7xKKHA zW}LGG(>|Q&)+2BGXiomd&+)`b+`O~yO7Sw>tzPS|Gu(LU&TeBTRXs-UOSjL+M954S zr>Zx4m<;+c21TtSi}*84T_^gh$>;XUOzFoQlQvdcSdib};=l~LZhKs|aENu4cKTK) z#dk4|I>}q_ZWyX{4uY-2^bBDG`vC^Xy?R#b9L@$>Bj^Ag>uUR0Z)v}s?Z9>x_HFhd z{OxCsS#eMjsb(+R(VlAFbI7L7(M{;Lblza7Wpovq>@eI~$B09HV;9e{n7F3Fq7Ym0 z?u^*m-TkTbj7bVCTspyp2&NUSvAE#eLMLY!ytu#{uDndeLsT;Kb@%v{voU_llx(5% z?4=ab_h;GGgn6T=9uBI=P}^n<0C6D9wsQX3Ly$2ClV$r2x$O)dor|o8c#^pi7GYY( z-fO!!Ms2__neuJERp;1-X`Y{%2aXf8cW=;`dH67kl0S?z3zU=yD)9w@K_A+D6^ETj zz_)3?Vd!NQhHj6;H;!HEe$z}bN7!!C(iR@#$~@G~+JXLiP}4hi?ku-9^&xewjPkSJ zMg1!k4e7qwnV0k<({0|)LvBBNz)1=0tFOKq{XxdHDzDN#jrpGPQ3;v_ zZ~kWa`Jey!@{>RLlSkYCE-=N1{UMoFVY2*mmLn}2*Y-4?Oxx?PzaDMmfh^&&U)cuP z_e`&!a9IbLYnkca`@P=_$+GmU6#1)P{c1>?EyJ`*o|VShF2XKzEQ~toK==%+yQg=4 zK44zi<1&X?bes{CO`Hesj1MyOBlP2qvm>Pq+o%)gFO}1@$?*6{`Q&S#D7W66D(|d+ zxtwS{Q9kzZkC$h!T__W0cFL9QE40*EOlRFK<4*t^b27%o81U&^2g_w(w4c5@2@S$S zz!bN0yVj}mV;qd+a2s~mx7%1$ZL=Fyu)s8UP=-hPz!Pou?h@7r#>>rjWYXKqYm2jG za9}Oes>a7pqECARzGEmy?5UUB2_%hRH!B{qk*?<-oQwo-^6e zp`Apco6%S?xEaR@9e<|5P-1riFr5TqN3_fi#LISW8(C(>!NB~x2w%D~QZ}#tM`ir? z|3PVe_KC9m;4X%E83;JJ*MS(?d{jg?zUj5gw@oLsMiOGZPQtFUeBskcXr|4rA@j=# zE7KaDPJDy_q2XbijF)kQBh&bn$aSW*Q{->`OlzEaJ{c~YrtzKej4KXX;XvJHi{E6= z7lSKI79;#B6R?K-5g}ks2jzT-s7>89^hTkkbNoy;KlT4{wsj3iwWoQ?=V=zzJOa?Z76DR6yxwKc5?>A3MU@aql zH{SK~>)*%0m*H9GNBvI!zVOFn{anaq8byX!W<* z-@cMKO*nn~NIUjn`c-fz1E{tcMwyVsleccIWWu;;;?f=Fx?c8oP zQTlCs%aRdrqH?@&QdCD?rU~jJO|`x0Bxl_EIAR`_Z$2*Cg-N*mZF%W$8ex|a=w$LS zo#U8~X@p&8nl27&342Q5B7i@SoqG}~W~JkIjV;P$jO24eWvF6x?Q-&Z20NUN7v$xn zuU?1m7Smeb#o2;@4sfb-m&D@_THCa}b7Tp~ds zsthbGXvLtSz4Z;uE-_5@!K8{)@z;aCa_G%6c1z2~bv(4~rGtu2SAs!``hi<^#(}50 z$;$9fB-qmE98$$4m{*x?X|)|&wJtoQxwOvV)wQii&bLWt+T}$|el;Y&;@!DXrb;J6 zIEW6Tu$o8RSzqJZ7CwHb^S2D7eZqPqlbLjHT5)E$bxa1=`uW@VfA9x?Q2y`_|FC@O zQ=clo^h>`KS%2j#UkR9H3YCVM-hLo_rhD_vH-mxp#w^41m&SbypDG8Y^N5mW1~oLIV9JK8ql44cVVW#Ro1Yg z@%WR^ayI0k{MctdS^n04_{-%xFTDcYkCe~<%t`p8rSi}Im;a_5b}u01q}@44)!|~^ z1?=2?DXNT|7>J#PE-VnVcRVQlNbb8kS=b^Ko#0Z1Q4f;6gDx@);qQLyd)SIa7krE{ zsbd&Ct(K`fH_F86Yh|1=mzHPgw5Q6|r_XbPo;wQ6sO@W|kAqzO)N5vOF7T#(fZr$8`_h!&*yV9k~y_b;c$ct}RymBk@EH$EwZwH3xM8s@llLTs7 z(@A^>aQ3niA$g?pbkGr%NNUJ>6GD$eI1EHO2j|L^4Oh6)AcII#Hy8|*21q=13<+0f zdT;u&CT5A)na(S{k2Ejn0xHxm;Bm{OKDj9LqqM65Zi&csj$fbLtlo8?w?rpNyODI_}f2{;rp&zo&ea zRJ24pQ$Fwufj`|ASLf5Mz5{i+(ChRX#sj1X+YG*(buDe^!@>2(cAdLvv?70)py?1Y z#?^V=Is^~Dh1JJ8XMGYrVGtjN*Tej-aP(gPdOS;rwBm`3Op~}x9u=?f*CydUokYdC zLspF)enOANr|=_S6IS24upU6(4jNEgNQN{OmJEPp$BIuYgsnRS4?URf(F+Nq&?hd4uTBYF@UM5W1 zH`dA3I3d0dDHE(9nPzT)iQVSf%q|$jE||=r5w<(2lM=>3+HY=drToAD@{h}}{yR?# za=0#cuCV*6DuA?L+x7Of2D7rfjNpO!MrPHv5YDBQRT%v3U`&$nvVD_Ay?WF3l2KO3 z(lz-|e_GnBXsTjVPjl0jw;FcAq-z6KH3G|#nc8Ew(fY|e`N#;#T&jj34f&j8YgfiP zc0g$xX;&N{Qf@D_Y#a1JhrYegK^J)mH5i+ z)}6Ggv+ha%^>5)4pY{Q1**JkG;I^NczUq6`F0AztPW^N)1dR8+?|m;+5M&xnFK&cK zM)VV(_(ZvM=~DQq=c-i$`?P(}ye!u=I`J+(RUNSI;#3`3ttq&@E`DW3zxmB?MjkSt z#+M!(3uKOsld2Ok*ybbiYF&ljvW)Lrbqdq@`xk!U7Xk+V9H58XjjG2Eiwvl}y#4mu z6s3^S|c>tBASeBraGU$jk>cc4;ow0Efn zw28j!gVNfEjxGFHCyUkn)$Vfl)?E&ap$m`D3>E`C4Ab5$kv(iUQOem|%-8hUA&g^~3@qdjDgcLZ zDwvK*o-&^1*9)$FZ;RErqZiLqkJYeRS*u)_HLtNXab1c zF{B_>{7A$f}8SM9`TdgJ>f3^5kUMDXZLFI-OY#&=S6g4S7wMt6$0a4D&K zuX;m7jX&*d{mW?e4fK?m**Pv_;Zg>=;~HjvJjp+bBu&|bX0f{1M&F|U%q&+1+EvlI zzQ{yGfx`IU`s>`#gAG$i?8GqkI3G-xv;Eww4xCQNEu3E7LYktaG5Qo^bazK(2Xl?N zLB>NI1J}2wG4P5BBI+>zI(Nn2zF+?Mk6wX+eTcWW-@YDs z_5fEf9|Me~wEGyw;Z;RhVF&Aw`guCvHkOgwV$0uW9V6_$eHCqa%i!{IWm3xxE$c5M z*nvG)zh$@-wg|8J$b`wHDYce9WEKrm8tfuOTCz~(`=1L{bYAvKl(tR%w?X*lU+ z((2Cg(%D`mPuMr?7sjz~37_?MoBuoC`A*<5 znM-k`?yPy3-gvo?l%~wbGV~KKN{W@3nns;h!)zDnOnOkiR$Q4@6I!Mb?!<@nGQD-O zu7(?Cdh@R1slrbSv~@BLs1FSd$E8U_1K4yucP{XE_wFqu#i&1UYgIe_^zy}X<(a3@ zFCCu<6@!VBUFFp`ZT4wV+M_ZE>ip4NEV*yw_1Lxc%-zdF=d?*md28!JQ}{`;va-5_bpiS*JR00k865SBVbnOdNMZ8y zxuEej#+|8Kci1RqLByDF{jFQ{C1h((_BJr2ABaeT@LeIUA~L0>`MXX);mIEvjvPGn z%Ld5&6a_o5DJ`v}pAbJq?$KeCepV9DDvy3Tu*4^m6vTw_|23q7I=6+?vC=l441@#M zAX38ZS!~Nab+X(;642U*{?#BW)PMT*GIH&7S;KgAKd0DKuGeIac?Y3_4B>P|q#gsWDdi8!w&t=kLU? zaOkq^`dfcfhu$$?ajKU1ZqcqUoEP`MAo+scVWx7OA-7R!Dxu&hXT zVZ>Qgx3Kb7df{r_+j)YTEU3vPoavpg>o3d>@*duxN{x3i>ejIu(6TP(Auddpe)*m4 zWj!C}{g8Q;*_5;o5Fb+Ws}+@r#p z{hNO`=hyr@%gr*I!}E92Mf?WFEXV$3nEp;49q1w^P1$BT!}76RbvY(DA({>~(}*J@ zR2}GhxHFTqs02l4*-nI(>-b@s%-_7sJN;!~9ba@wOIfyYoj{%Bbe3b7{!W&@g)eE( za&^YZJlr0(Y=76?`YPsgkow%6Mw&D*!mT}TmMN~6oH%p3Ok#7g9Yf>YsBLX>OV9l5 zgBV{Q%*>R@krQPE>DD{M4IM&;0-4vdr_YoTCfMP@f!O(JW76|1!xrhCpgrWu&=K`^ zk*Th`_1Q<7xJ|rWbjuHz_}keL8ic88L$6M_TM?mJKj$l0EUs9st`co$8$0kprsA>- zRf8@jmgr;jy>^&h(;b4lcE%icQ?}6I6Q9m4SI(X zrXCY+RRLr=we#D-qCVy=7-SCBsdYZI zEOBeSQ$Un>6K++4s=JaUcJnG0-wVTS2E=D=!%ZQ;EL}PeUs(sryq~S$Na){ zxq4-igI7!CjhA04L(tE}AO}ScZlgNHfx88y&g-Z^uzRqwJzY8mTqtq51y>uN9D~7Z zA7>zID+9yZ;BTNzv6!1**eGYuz@A-z<)8BYDmJRMxIfzXrHy9H#Ys_y|yD*3` zfO=9tbdw|={yAvxKoA~=vEl55=1WO2n7GZY6wK`}r;`I1-8LCm2&{(=Bh$IDx=qJp zi-h}uM>n4?cV53DP^TbvfH z*SArrAjs@2IjLD^@P2!Ui+wh zgh!(Dz?k6;bdU!**}%9c14ht;K;<6R@vD`^kvHz-C+ewqAjI zzAZeN)Or|%Ud1_r@nKs%grfRNd^G#le;cRnntx~5qx>_x{!V(T`!#=ym*ZTP<2&Qz z+xT_=dir{tx_^Gx!~M=D!+ncq^Uue6h#mcnpJn@Pe{%wJLNlK2=EWnv?c+IN%23Go znHE+d23zCXFJru7sP(sHbar_l2KgX;%Py?HWw>Bg|I^9J@xeZC`MP>uX-3Pugv-b8 z9CJ*U&azFbpWnir;aUHzukkF;iTt>U5j%h|rPzI>KMkY*x!rNUyf*WIYbMcadvm@# zbNWI#cVeOpv%}Ti%f!M3BZI)E*}^Th#V^9}$#^@ij+{JII+w#bwmYY~U zcyN3As69Nu)rn-ipB=gZPGNV;gkXih%Wa&Ox|qDhf!1LBJ;YU)Tc{2UQ`dbY(VZ=9 z`%Vs*fBsMZ*YcnK`ri+s$#Carxewz2^(Ok`or?`m_-7kg&w>7KB*jSAi9U+`)*-g{ z7x7c-v;{L{dxZ3#sZ#uS@aN=-G2ZA76CRfeNV7b)tMf-S2UH6$>B2g=c(Uz150d)a z;#0L2PicD-Thfx{xXmqYmFP-~=Iw8-8LS}@o<-;O9#?hVo1S%OqkS9m4(((-X}Jq} zQ{rp6eJnWaGi#`YhzqX=-Lu}nZ9QZJh1E&DF!r98ZJ?b&A-Yxc{RpZ_Y1 z;Svi+tOQVY2iyCDs1r=zn~J=*>0eu$E9JqRIoQoTE+t?W0`=Ml3$$79$GKIjuPkr8 zOCQiW3X7WkMW+2bFgo5G zyz1^}r)Pn3uw<}@%ERzDd>-#z@YEmuaR~L%&hq0w_G5tqZ;{h1*oJ&YA7e|HZsS%# zZ261B3+J)#OI=%AQCWfU6`y-pHR&7dK{7j5-d6IRk|vi}B1q@U?|k&jE!p&|q-XR} z8Xy{}(Z7}QMJ|oJOlzFz01&xvPk4qoBv#wTR`;_Xj@qp*Ps3{xXN?Zv$xa683nda)T%m41b&dn5a<=g-HKSX;9QTZR-ExZ5sKPj!O zD6&I)kYbhm`ynXg7||iPYBz{j;;%dFmQJG9NsRjYTYLzQE<2s&=r1u#v^wJ_ff_FS zc0_M#F|KLdq6^(i^3%_FmSNgD9Oh@ZPu=<3`1u%i0Pb2?;gAdJ1bC=?CR4|ug?$KT zitVdC@Qv9(h+k<=7X<9}i|E5Kscf@?3cb%QIyU(1BqHNfxJtVD5I>b~^*7=6mv~56 z^DQo{lVMrE`fngS@;8l7<`cM}SgjT?WW6Wv(4PYbYD9Uxv8I6{eg)Q1o?zj9F3SlR zVRC&dZB=qwF|Un-Tl_vmrnm@sA5T z&M(u5!$&#cIxcO%`=~_tXFA`z^+D{hi$@Z%ybpAAX96*RaQov#ADKC^0OaXwgats>F--Od>n`k*O{Mw zF$Olu*WbPXKXo*DB@9`9j!C97Ec17w6%WZUBn~o;VdkN~=B)hAvC49FbJXc~|LBj) zxr>jLufKGox;$iXyu6EE+a3n_hmq9DkQH=YE&l=xSD0=>vN?v-q<>|dD;^o+hR4dn z@_gV!ybm#6A27}iaD}8e6o#~&=p7VgKb~HU-a00c0QSuV^GIlaP3v8k8W2blu9h!7cu=gpt=ef6A3o`%Rezg@hob$K@iLEDbSGuTJrm<0)ymc` zj3NJ|X{`)+wXWqV4^a9mGiF{2gL>HoHJ-RmrqSQRRdi)Ku&M+UtvQBGZQqpGr_^W`A|g~rH?EvaaqdT z47(z8<;ulNFpt;|z+#9k)`BE+iT>j*U@NKs+A1D8(O)=*d@0~5rJo_An^A0d)bqjjuvWamHat@3l@kQMP zo$mf2c0ed+erByqV)lxgG+<)ym(P9iY35)KL$Z5*_VLlOIJ=8}^;miNyKe&H2s*(? zTv_z5!CXJ}%vB`2x5}9dXUa0;&LQ@TL(vTg3nVfh3z zXmuosSQ{gsYFwmqmd|AB5S7s_gh%e3|%dk{?4zJ zTmR&LgG0Yrx_|H2OaB&wA%ld3DwStVQvw(g8$xXy2%IzA1H0R{26c{mV;2`DNT_y!M_W!|RMFJ1lHJjK7xc-e-+ zV?0+pjH3k7hA^)!9Ln&w2D93I9?eP{=H2McQh`>te0LFH8QSm-2Iy$CTJIV<6 zfU6E}2w-fbEGH!E{2me#jBs_h5sa*U-L`t_?7Oy`{VMbEw^AzUFUAPQo)~{fXgnXczjPIo z@bG}m=-6=7#feqe9p@Zd%*%Yu&q)o6i{IYx=FXF_8OO)|-`7`NZEG4C3f~EDGOmsp zKIZ3m;e_owc9mlMsH8_ZiD&(UO9s|)(jBL|`_k9HRo>$2##<||m%&!_Uzx0CnN-fg zs16)-m$&b}Th4OAUi_?csAG$9q#Nm;J2p!kZ0X?gm<=u=*x~oUNhT^71f_DqCBv{e zSJ^A=Ln_+M0$t`uCUa|(MKj~uDzaPFgU#b;wv{A6Hj1+wFik#Wu6g+D1ChUx$cKlppUUbbY&Fm<$sNuu`clVuyh$uc^!b*IV4-u{6yb`nbkNQPQD zG^S*A3zacshtLmmjgnyU>OsvR8L3Sqz0$`b+puB!jIq@NIWn!+u031MpFK@J%!iwm zzOL=P3v+H8o6g@mv}Jb}!Vhr}gId+k;!vTJBTlJ*bqMAl;B#Buv`YR)N4+tM-9OsM z%Lm$8ySNS%)w_1|Ct-fP{?}Wz+)3y~!aImMh)k2JeX2Id7_Bj1OHbC%FzH-8OS75^ z3*iQENXK=Tbf13B{onqelXm?UZ@z6i`-SjZ5B(Hq`AE|jE^wd;n$3PKEIF3=wp?NH zI$G;3oI2y{44=jnmwn4JjVnK(04iazY-!s3?B_Wa*nefJg+;i`%Q(WR)6WB6#uH!W zXB>YU&v480+c4YN@VaYbC-m}T7s`{5KT+PjaXoesXJ_ZjC3H$pj3QNM=d^{L3$J7C z#~MIS?{GCfKnFWW%2zh;!|$N?3ez}nhQ-I$Oc~;U)#mPXbicW51@(aC`K~gBec5$% zPc^+ccJ^G^-c8Puu{m^`8 zxovCvV5yuQA4P8!3mt>!;JfC^O%9KJ`m;}#)g@>X_*7lI#IDUOdi0a$IK0MgkdoTF zH>WFAAXJF#Bi-Fx-hk@s%*;G+4su9sv7EwU%19p!>>h(jAQZwEkv@(x5~*)jy0L9c zr?he18ujp%%#cWzp%vLZ>Y=il?55M&5O`wlffIWJ=uMgrHjG+eNWC9gGbY<`t?V?F zH3-O+@;IGDro>g~B8RcGr>DKqu(L|pV_X5a)wWSa`Z?vhU)|Q!(}u1U<|kZDvYAj$ z(3#)G@<93jzE$r0+TSTZ@i+gKvZZL6&N)2RM*{*Ql1G`b4F--@bbU^6KeyWT;<&DPH$_}k|s;8qKGMufl5frBCL9NvcdwpY1DhTq+)3P9|A4z|2E zm`psOtW>6*L2bXs#YS}i&H6Pv)jh<8Dho>MHHxfZaN!U7Ac1dbr;am!M>uiy_o;Vg z@frDMJo2%#>AYDj^Y3CZ$-J_>h}8H~oms75$Tl*5wwdjfzkTN;&W)oPpnA9}2^lB- zBVSf%sw`w!Uigu5eAk_I(`7yCVF_o3*Td@HS>Jp&ht>Tv&n(aS1%9ccv?$Fvp!?Qe zzoWV&ZSzjQpveXv%`^Rl!Sw0p?<~`|`PTC`pTxC!2&a#6^V>YqIW7@MGc@RffUpPL zz-RSx5_8h9ZdIA)<+x^lk{K|6e>;iTPc;?fif^KaL76_}q~qyt;|s3_?A@Ulz(DF2 zSBh?8A9Dla`giW#38|GE9^EieJNw%#zB%E}m7JD8ukm~D8t)t`fBKD=%O^kfG~?cE zdHT60P=A^O=bS~guQFbB!EDTFYjmw*T7?f%4`xFZ2gg6RjP$h(+mJgiRDr?|lkDWB;O{6Gqlp)5QvyREA9r=v*Hx}RSwjqen^)yQ~M-Dfo=c*KmbWZK~(GIs|(l56eJISw84}P zF-Nh;hxwHr`oO=8o4TdaO&6!DrLhCAHAd~ChcPpDEor!c4iCCHe^!f~^Dtj4Fu}KP z-wCS-S1w%Xtp$ zW=>=33SclOe-f!#N4W)~EEBV~?tB1LK&!vJ9yFsQb$xBSJon6#WpZ{djOaV>tZlEy z$$8Ik3~HT$ImEb1S~roZsedVK-OOp7NXEC&pIw5{rl&^RijQ{shzpvJmyaFcPTI83 zWuLB(0ok{uR~Kh8fPNcS=F+tGJNuw-A8AO&QlXSg;`#IEqaQf;xsWrC>5{>g$;^d- z{l#(&b52)^Dud~`W4^}K#%hi`!k3Fh`jK!ajc>THn?i11{uP%E)lto83V>)uu1IDJg&F_?6XsDx$3pQ>bJKQ@}Hm9(@@cMH3 zs~`Ux98~*iS=#1M7AiGc9b7apgcN)Y8^l|SWfNQbJC>G!`JrId1Dd(D6+mScBQes+(fnR0_YzC7WssIgyieyjU`iAlYk*>IvvPxt& zl#LVxvO08GM_Vz616i%0m=P%GebLAcl*^jQ22DRJzSP?#bnQO{!mVe`yf2q7d*c|ru z#$b9SVi_{+*bQNNWaGh1_-P(veCz}msJ0iotC{YIeq610U~a3OZJ}5(Ez$X4xc50R zXTAGqELWm_=LBy&AAf6Z#8tQT>Y$_Or+Jq6O&a56r?OCStUX0n$Z`EG1A+uD{B{h> ziFRnj^|y-Tc0%(ahv*n~9Nh|%g0KZkxwi8mOuHI7Yb)sdpjUGm93Q}l_n{gvfJAkV zQ-k|hAc#c@unaLc@gJM8bS&BoO2OO~hu>I%sT*qh9OrV7$}sEQAgA;?dRs5+E9-hT6NoqgnIKpkII#EJ&%VZvL7IhbzzEI0lA&c_8_hSizU zhvC2ly=T6@>16NuonZ;nhrP2Nb+|K4?~q`$vq(tO(nKGNcQ z>PTdNOV7<=rmNS{Z{z6dd1k&D)|_9$SbyhtWL9O^kUfcJ@C;0r;TYvxiM#n)R`>%) z)n6)q`;c`|a^^(ixaRM{p-O7Gi6QUa-Vt>6tHV_0(LcbrfW*oZ{@ub+{8~wDQ za``kFY|zJInBAEjKkZ$0xi0VRD_{D)e3jjA8iQbV-@5PS&CHwboIH74Zdc~R2z5E! zS;IFh1OaTptM@pQ9f@2IUIGT;%HBa*^x^yj-3A^*Wnj3rF0^by!qPLl=&Ht%ms4a@`I6&aOwF zVk`rJd2VPZj*;%fR#Abgqiw>2YotCxSC-dE*BmZfxDd;pU)c&PY&6=D0F2$d9rljK zu{ys9V&A}*EvhYyXALfi_8~^|FdfEOw@T|fAhg!e4~FZwU)YGcX^V4-Ig>V!t~D#D zmier1u0(ny#vxiYz!r|2U#^?Zy=^ug3#_Nxw8xFV>rE}{2F^8!%i{3UKmF73QTVl- zbU8=83~p|OLHkg;;=AAdZk)@>6_w@MH@=q$^tZ6;Iw}$RDms>l8*5tEM%yAWEs<*) z-Dk;_wjS2e!v$P3bv+clOH@p`I_NmYhcqqXK>-5Y#F0Gd6-{Y{bQaE;Z8|L9VKlowf5KDwB3DCcA zE4W8b5l0ZI+o<1&58B&1!uk$$$uVjy=!zU2=0j&?1DkOquj^~jQtVSvBih>84o&!Z zJx~9gI^Z zktzdqh*spjW~r=}n3e3t+_jY zu2M?qgbEO?{`2GjH=tneu1Nx3C(ez$S7c(Fii5;=oN%`IUyJC_!sj0g` z0E!b4maQ(D^n+-j&Vy}H2PBlQ@~5+on?z{~T#-|DK;^{g zNZd2LV;Atp)2j~P6lYMLt;c}l^oTKJQXL)cP>!M|9E8hy`HZ0cn|)azK?{VE98$UJ z30XaPkLfAXcn16IewLTG)GvkikBOk-=TxSBRUH2rRs2*`D%-mu5wIyf&H>&%z85&L zK1-N-PggPFn&SSpa?~HhZL7+Ba${SY~u3UMBJ^x9#HU5yz^KR&bYtz-$AFkgW4`btRg%OC3Hn>L3I1g9%P%hl$#1u%o z0Zv6-7@xfv`i2I=Nex6ExU3e5&C1GBT$E}N-^&=VuQVc)+iIUB6$Npp?bN7e9gc@> z5Em4OkC(w)2b^$I&oQ=0qqfm6T|!rH7DKKRaKVR5IO9i3Q;KzR9>T5x{k1asqf&#e zeYnl}g^nq{*3}>CM%)yOiA?K7Z$5%oLhiW9G^FaIgAzFxp6CUn4TJin+xuq=3MrP3H;FF zzp|8m*zSQa-d+v!5Q;2+VeS4yHss(c>MR$%9?|4r3oU`DJ=i&9BSAm^;QjEOe}}{S z!3!9jphhOXglNcN+B~*#f%8k|0J9U~VlIw>QcL^0iE&(Fu`e&1 zjGWp|h=<-@PIZFV?rG|YbE$x@Rngd{4FzeQgpcz~VoP{%BUM|+$w?3a5}fT24YN3_ zhsNiO`R?%b-~8<`wy*~WvM2oYjmc2nw$5e(y~jq3ZDuD}KT(lrYGqDR9t1?L0>Z}0 zL2$lEDBCxlHSdXPEo_`ro3US0<&x`es(TU;RQc{xv=%eM9Be(vXDxxP0fnD%a50lo`3!)FP&I3|?s zvzK$w;BU*60QK&-)J@fAv3)Q;J|1z5^(xHU0!KNmxx$)ddoM8HN+0!&cqGA>w1vzu ziDJLuJHJ`z=fWWtrWJ>H+0VAuboOByn^gsJK#`{?IqaGloG)eh5d1;fX+xXH?vic7Xpok87T;)Kod0t93Y z8(4I&fyvqV859Kb;r$z*KqzmMzc=LYdptie85+Bw86Y5XoQhS`fLi7v1Uf2*2f$|~ z8`qUh%3_`zgA2=$K&>#h_t|8t%f1giSH?U$fWcD+?U<++Ne8BmON)#h>J_wH`14fw+eL zl&8it(NTNb02M6bJt+7^5aRM87LpLZm4lf$;r4i^Xncin-vJ?l%>iKFWexyo9mmO-eg>QEelY>GMG<5vK&tX^BW#jXnx}(5Kt%M-F@3{E||VIkL9NEIfUqx zP_``s$}!ww>mqQPRtBl*CEV37HvS0UDnr~Q7a$AwHFA4-SKz8s_c*rf%oytv#ABs! z1++5N)tMe3)G@1o^K>d#gF1dzu#It^@Y3|DzL8_gw`k1Yxb)3iV&CyD>UMFL@QD3+ z_B-nG`aWj&eSuI-eeXT~W-b|u<733xpXiC8D8jlLycd2yCcIKy@!hdZ9M#lT30Eo< z>y+XivO->H4+eR}rp95E2qf?Oc=60suDyv;#n(X-5MFJqvzefaIp^@avaY0 zb%gic|0oO$DDvA2GqV%ut&Osnmxi&4neYG!(xpofM!0Q)T^O#8&9WdtRGuQHMcrx< z4jO9a;bdhd)Rf{H2d?9d$+^%_zK6j|dl=~VG$2HI5P0GV`>YDwaR{8GJ}dMo&hsH2 zTtpWaINhcO1B~W^er>Gy*`L=3JXr|wIdHtR&gn`eoI!r>G7FgcoV2S8k#`;AMg2~I z`HjQ*$i=KKslmb@#kATh(LSLR)qp)0t5djL;OlKvk>m=Oqw8iLN1Vnt)iw25oMyk4 z>t+YM;<2dq!wOvMDhMV0(U#ze;388jkImKLP=8n>O$!^4FFb!a%%Em5wKWCDI~(qB zUiuo+q!I}1YBtv6_wT?&aDJkqfXK3zBPn5gN5(}Z2Q=(+TQ%wA{H)uehk{aYyM66^_Fm}sGuUPjcUgdS z10+L7Kfp2vW@hJ^2jii?w+*grTa(;_DF0Wqw;;Z4>ok?61vALkETKsCx?rwzDg>^Vuc$vsA;@arF@cC!2 zgl9&E!WIlALjmq&qrhE-(5P=f8cIFtAy^gJUcGuXrjx7ep$WUJ&#p;JE4W%>Ef!Wb zVRFbJ_O4#A@p1qq3^%u!BSpbAD)p7H>TmCc1lP_L=dzna-#JfQ-_iz5xJ>xMe3oIH zm-Eg7Gv)4HX4``h|iPI{m6IIf2D z&a?^lr8*VoN%>-?C;r^Jc@<)F4cB$e@jE-fmz(i!45$3QZC3?z4JKYG^pq+edZ$pu zU=?F8eI4(!S@ZjQ`XD)vK%&x6PmOrV4OR z2+kTr@nCR?}?^D_*?O}oP8jd$A!;@-ToQ7eKkn5>KpSv{*S(dxSRzS6@w+LdfhO8>5W&y zrO}bFu)Gm&+?v336k@dMMvy$?0kNk2z#8Ipt=4lGNH*4&hSx5ShSn^q3IN%<21VdU zbu6j9&~etE_Gw{Eo%4=?8+*BDb8`#PvfTQsudlA-8oIZ|VKaka%m&;Kke{5CygooN z_&7l4wG_S8!*b3xM}oD8@kT9+9jBepUgiLzzeaS{*4A}_Mg1X`Hz59NajxFp-UV(3 zH6wc8-bYW4BS_H+D9nu$PKsjaDo|M}1!tojh6)4t1XYM`7Uw<|s2rJT9UBbv^Kf$& zH_8l8?l_OyKplo$&2Wu-qBLh^V=k1MK4*gf$8(q7JmlagnIH4$`iUzvC`UtFao-scaqZbF~ zPny5Zl{EkCYu7_{lCu!tO>n0rESxjVaDAKLZtio!nFcT0JJYd@$UI@4YeO`u58WQb z_Tq5MQVqc|mFq4(m&o$FTX4HiQ8N?2e(ut_@CJnMk37GGv-M{rdIT=0bl~ zMMEj$&1;@S44c>f_t~`K65rcTe#7?o-glPoJ2{t@m7WvsvMk^G4dV=!o61OQvS|#a zv0R^hm+(ibW5S0C2YFAyG`>&4XX~88l`B`$&v5zTa3ubyK3)V0Mv`)L4`AR~m1>OB zZI2sP=S)xc2>6T5Byiu{)*NBQQ|IJ}s_wCNrZOdmb`6!4i!VM6M}I!zydGTR^$vF- z!59zI6Zb-Ie^>bK58n@0&cA{RBF6@=SKti*z4(@F=)3&6FtPF-PR(0JI^7G?Q9GJ4 z#*hs!I`fXj8a`;Vz;qV1Qa3vKn3p3gfm#l|wuP$83I1$%QHiOn(j^yp;R1VL!-I*j zD7iR1#TRm`uJKBc0acO*sX#jt>wPu# zY8}wfz{CR}XV_^ULpZx|l)xdO6ddovwE@vpuybtX2tbvR%ga#gX4i29vAUZF0k9j- zz!mVDwRDaXu2Eu{Z|@&q*hT(bkP0L<3(%((s8=D1oup}EIhpM*0aNjS$l3NAoSc5c zMNLJ1fx~>}KcZdd&Yg?#eqWt1)9Oac9k#$Or!tm7|3>bCac2N$8TNZB)87KkA&5Jc z&wKNh(=Ua07%+g$tI-FG#&dj2FAjP7ZTe@9wW)_!P zo8@?GK*Xdf2>yr(AZXYb8QQJt$=?>Nr~Q&H)dyhB#PSRElYlEcM`YkaMtf2m%ip84 zrZ>d8oz*ct8&`ZiiYHzA?XQ?O#uWa@?KPyaOZUQCrvDkDN%84!AN$)Y{VrA+D1PTW zA>pHRQCIdXzhj=#rf+(WeNhx)y$yfcy(sCYex^S8R3r~imjC2?=aTa>A!^&`;_KZp z74e%Ujc*(?+L-2GYLn?x|HQsO>j(2$zQNz-GmmiP<+prJd7r$e^1T;_M+Sn-AdV}Hh^7ygAk=v zQDnLVk!aa7h)_LZbAxi$7VZFlY}*+3u1+jz;b3j7ZL@jC@L`1$bTCr&SnVu$=*5c{ z!iD}03~y*l3Ew#04P9p^GnJ#vyM}(O?glI10$W!%u=bn%w}yMBNsL3cATT7rH9{2^ zO{1$;jn%Gci^D-a7e*jBAxqh6aNF6Qhrn10&tl9cm(aDs`6_`ZN7A{cT3bh3FPk5^phw}s z{hM)}IiwDAE4yLry@~Ju{oO5esrQahV_TgMJp+y5+0nkx)9T4>Y*z3*;JkPKI3`|+ z5OW^6cE~|>?Jf}0a(*FFA(S<2n#D7OwkCQ4@)R%i?{-+*ciA`z(-J5w=YM0qNpu;6 z4`Is7?aS-E`ji&a{?kNO;Ng2GiRP)1z)Tn%9E|e} zOwLR#NOA3(Z4UOhhu4qZo*_7&`d!8A#SVv=G-K2STx~Azgr~ZH1W!eE5uSH2v^v>G z{o({QOx$TTS3Jc=tsZ7%byzx`jFO(k<$DmYj8Qo{)Q9wM2DpZJK1OO&j|wQ{7?K-c z4lhYn7`Ey~;kbki(k`%%%F+StJcPDv>*6p3ydEsiF>ly3Yeb)63@WOaKX7j|c8L0l z4rrQ0sYAUx0ENl$*Z{x*GB|O}XE;ARj3RFvNSVn4;EG@!kX;nJo!kslVe)aOez3Ty zIQpu!REDUi2c`JC0$^})_qf?p5Z(;Cg{2w%mZ3Xw!q$BqE7dH-v25^t2uJ~GdTuuC zp+~V;w-%ZZdEZ_|--vLy=3i?#GMN3L`cd8&V-RWs4<&K1x(V@03Pm06a z@4X)kuSuKl$6>1XZQMIDw`X!df>i_OW_4s$j&j*pJd|Lefo0HHV2;swDt2-vzPjjJp!U4!I`kW5I)u-+S_p<$G-F zDGNaY-eMxwx(n=%N&21c1)wh=6w?^Id!;nRap~Qs;+#~3;&(A3{rL|NuzttOP<&7E z#di|KG%3!$l7p+L+P0_5cz>sK>7J_OU05^z$zVGSPu^47bT7_lTuPtfQ@SVL`RtYI z=iG7r8Ygk&yi9SGtvBp59$f{2B|`o6PFpg(@kZ>m0EelOujqX%)4>II7N(%}X=r#HVa zIr`Lj77KiyLNP`cMC8@6{sx3(4(>=N#H|Y}M)0AlwLM(9*o&tE#JcG5Yq(GfSK_5g2u(o+{+d3GptHS(?eQW)g4ox$TTB7)@P zrnV}q%^6!x@5!^V{kMPpPWY8y{iE=+&v%9Y`k(&8FxcN4cHrb5V+6L0mGi_5#vl+% zr4WD`2PY1@i8!h;c*&u)`edhrpB`mrJWt>vP?;L%b1y4%MS3&G; zfmd!#&4kN+G7Dh<%@yVobf1H_U&=bpm&WQ)TSAl_KGkJzkaN+9IrTooLnKI*vFUw#o{2Tmxk;TRMM zfdamjbIBGes)adD`uA?Z53Kefa@uvh77sPRD}pB}X%n)wjZqHFh}LGrzx0Q?m;(a? zaZXBTIcFtoUH2?=dGR6b=)k{cTR1m*K1@EGfzSq*VnFx(dvAt&8)bN8s0cstxpSch zy~5{*F(5-^3m`ze1CJ64;C%Z?_>*w6T;WF;IHYajE7yQsjC-_tcMRpCImhJIwR1Lo zi)%j2CUM0fW6Kalk3_2&fk_A|Q78_=n%{7Y4GG4rhw;u?>*L%|O-CkC!V8vXKe*l* zXWEoMmFctnWm{~M>0L+to^j^04yG}!W%)j}KYhbCTE6eioBGH&^P4xd!EYF6+2Vur z4fCWp)0@}#DW7fj+2GwP#hJc1tm9^_%ndY>fmJqiJ3HWGCi~vuW_aWC=UBV(yusWN z7WQG>x$$-f;XxslsAIa>T3nisoAC=zU5fK%hfR@vT!P2a=fZQZJ{#VC=OeiCa9lm|6}5rvPGeXbTaBl6w)7sMW`c3$ zoqOoVgZnsSAzO}m5C&(}b-)8UIpSXDi+Z{cVR(sR9Plc&wTj0G4o=u(eooCi2m{Rb z-Tfunpcf|ef7w{+>o^P3b8Tf20#@L3FlaCIO%!*?ouX^wKiz0)k*=5{4Z@MsF@qzK zB7(OQ`g*zn&V1O^*)F>PCxZHn(UC4l{eb*VGL>>2R7La4ID>A3yP=il`1C^zt`JqA zU*lxhqM|MaYfPjS^ls)@EHvsW;k!-kt(??S5f>D7N1wU$RQUG0?}vjy&Y;F!$R-w+ z-H7taQ0_lGVMl>0tpagZ;PBXv+1ZDC=&;{JHUgb~1qD)1F*^~sfD^q$9HC@gN8ij$&xR6I z1LOn?G{+|*FhwDS1057^OW<#@=vAXotz!2c2p_sO^dh3GByC31?oY#6tfzl0GXgB{ z6TtdxefjAsyd3d-e`_9ODc9Rp_TwMl2`QB;`rZXZJ@suxAK_ z&iz!1xSt@V7{QnzA)55ta*}>!Ov`ghlkT?XN#fP~hM1@DGyY9&_^fynq`vgGX-r?7 zw)nSco(#TESMj?P=iU0cAVtE5X9-v5mfREPqVp~xZPOO#^|y60-aO9L6pZsSulF?8 z=~=vBUh|~9mS-^DU_L{Nj}QE@UY3{o$M@-b-m?-5PHuu_`8zF6e#S@r5FIy&&ihQr$?o zc*4INGr7ic&=gl2e*(U>3&k0ee(?5u_&zwT1R^n%Uq`wnF|iwlM|#6gUOoyx z^%HM|(kU$ZuYDYjawlPYyFUCM|Mp|7+AoHG^T|>8ga77VhhP5r7sG$@MSQkyOvX)d z7Uskp1pf{y1CFnFTEi^~1Bp@Vsps<&brt z74FS6O0nPg!S}e}^b{czpp@$n(daUI$n701p_$Ex>!wD2tE5w9qnhz|4lbha z8s{Z&(9=xfi=euQD|5XSLIn}nu`pjaO zwv29~3>XF^a`)BAJvTBOb$qW~yB6^UkW!F#QjV^hEOQmB_Tu2WmEg|rdl~$;m+wsD zcNK?QhG~Q$^?^-eU-{md?|ajG_c^seIJNAAH-u@^`QG{IJ7LnY#23Ez^0(jd zw`naWeItF(G^viJGu|?-qj@aXOPr9(vfkz~t$7TVV@P$34`+YwK6rqDWCxw%y>R>1 z1BgbA4?R|OIehb5Z-(bC^Zmgt7>%o_RV90Xv);2swU2~lvO)nfC#2mr+JhO`hY8+U0yDMjU zA$B}N5(jf1#FoWn6lKDBV^XMU0CgXM8medus{ThWN3>EMR&iA_ zwK^R-Xha1Zz!E1hx|j#-*f$^ot3XP7EFyy#1$?<>5a2Ekzc+t7%t8o1Kl)S{LJa}x z7eojF*58M7-m4Iz=-am7(O`Kh^x}}W8VkNU^mvNHDY|F+y3KN0g+@*40A+EFCBN0f z7fz9@SD;Jf)YJL22QA3TcMv2X)vc{S>~g?Pqojl#E~0n+M(PJpZYN7RmU-x4!Ku#c z=7I&riESTi@Ky)%+-JdaCo2c~zyXwSM2uI>BCrit$6fLXx-2IUn{u|P6bm*BI*UO$ z_25%XUc_^#VN}Hh3_aoIrnt~560XGZa1qW@1IVHRqIQ=PS&q?}nnyfTP2KT55V<>b za9-;8W(0OPz8R=Iwl&4w_2{?2=sa?V0F1KW764U!SUMus$-C}!1mJYZwT%ExGl+fk z&w}ma6a%{BH_sA`vB<}STtWbk$}B<>mSd0rj`gDy(_63zeq+f59K zRmexYj49((!_Yq>4`5X@NU)i%upKl${wA&cW4Q@wkvaySi|bveTcNJ8Uq~f^B#|PL z^u37DI73SBT|_HFHl1@SA!*}9q%IU9*o4F_-}Dk0o*W~x78Z>Ywo^F?As4qHwWGN1 zelyNx>g9VcpRHSZPI2kk{7=45?~J!DsUKp4&;GciWE;_XGkW#gJ13!~wJ!F(eQBQvKW>g| zuo8XI7QUCyV`YB=S0OH<)Q@+1 z`^bVXG)CH3#Mu;K9_OEkRw@xwAO81$|0kgW;;#~SRLAsDes3jY znlX|sM^yqYtFE&C`PV-R|NQr_h3bY}XyXXKzxzyY_$NR5Mi}HMbsY3@!qqfJQ}k(F zS6Bg;>y@P%BKd>yy>M%8EzE-#Kb)9CU12kP@##z9RgBd}Q0FQ+#EKi-TeiE3o3iRK zm#GcE{D*%P-krp$JnP2?tMu1LQ{lh=dvAn`^%{kR@a^jl!XJNpKg=IveA3Ux0%Cdy z9nPMr4mhzJ;n%O;3sdWOI{-HGdgR^W>FCI0l8s`RX_r8Umu!ih+(Q|PR+KJ9Tof%w=&ZKQ$2 zD+chLIe2a;ZVvC8tN2|g38TXhq?~fL4u0I>bR*$ioNr9r2Ai;ik1*4Wjd`+h9xnqZSaK^RZ3h zj3#4|QcS-ca>BAMY0Qx*o~ z4kyqxwu1w41BeHUayF@_Wt*W3|I?Ebi{W&WP2~zWpE3*QNwgRNBvdH~u!KE*Gi##I70OISF~!#!dl&0-LzVwjUZ zdNQDVR6-zR@uon$UO^Aefz6o2Q*w5c4w?{BY2#7cYu8^l_WPcdsu zBN2U;_R*bj@V6nw#e7esiwTPUnAUHn{!6dYvq(5`_e6*W<9sh6nvksJh%9ZZ2;Vf$ zDY@zrsOC*vFgY6rpUvl7oCIbQVe6bT&fwj$5)yy1Z&SKQZH~DLec-#)Ht#;CIMb(4 zoaV`L{tOW&^}Pl+`i0#lhj4`l)gj6uvCqHU?YbT zXa&};^;lLLln#m8>|=dEI(OSzJL0IGe~yjc`|rOWuHLvAo`3%N==SI! z4;Pfw4G<34LI9I+AKT`07#kKPT^mfAy!=!plQ_ z;pcz;jquJ#KL~g4uY|9@`cinN5C4wf?GMm9{p0KCr@|ybsSS?>NX@WAxclZO;g2gn z2~TnQPZz#nJ1QY+AhhSH&)5ItYb?-}p}npZCI|;j)K4JpuL}R_!<)GIItugX70+^- z;^aIW*N_W;@J;jr2Rh)o;*kNXXmyW|S!=2gt5(qe+l#Yd<9IuKg7_3yI2e%8Zq~me zIJI;FSPmcIj8(D`Nqy(>=FuYyY2BRPx^p{nR<)rJj#L+MJ_$qW?R9i_@xDNW!?rJMs=uR0vSH{90vlxn8`!L9CENi2?snNB!6U~B6= z=59@xvG3^XGQK4jR4%RbfT{wrMatPF8E-v}OXZ2{!~^!b@d=msJ_YlcCY5U%zi*l+%QH_ZKfO!k zq%w=|w!!o%_%7x5?t9Bg-%j5(z3+`rc~TkP_3n^An2ntNbqJi(Q|L7<@zFnTsLh7= zKX?bv5mn*Em!6Ir^*o1KG_lFdqHnEq=Z4@s+&P$h&=5DkPpTg_;7Tic zkzoE-ptnAS-uM!9lSFShha4Tkocn0(8mchu91FY5{5y(L-U&7_)kvKha!-Yu*KVUO zg*p@B|KZV>$hQ+V_GY7cK&HF_Zm;g!kO1R8)H$Wfj!b~%mBmn%sgEj08*E_j-X2F{ z0mFg4L>@Y_0atKCy`$mot%nh2y8G&2Cg7)6w{Q81V=A&8da#ysP~AmV(*ITL#P=cE z^be{bf}Ogwj_ZV0h(&;*uc=kE~O ztBEzB4t>gQ^pB#by01A}$W>!yTZJCbTn0`e2%{eWtf+4f?R450O74Gn=PyEUb6XgA z_ClCrq1DYx1A0s~IKh4S_2{6qY#Ep#d=+;1K=M7EhdQCmV^Xuzq#2P0Y;3 zPM6!ZO9vj!V)e=ZYJur{f%+6eT;f5I%075dl?xgjb|E6SnV@-y+Cz5D8LaTM@ZAT& zl;hOg zE{gh5GgwD~#D&;8_96P3qo2!RS7x{1&|W4#3cYPe&_EL@BI{gFyq`RrgxDDR^@_VIVt!v<|!)M zXY-}JPv%i=!~QZzbXcD4wA6S^ZQ)gXpNQ4?z#p2y$Ua7zWRCe$d6rdtna@QqsT!no z#uvB4XX_j5K^dmA9bW!UWeTGrLN`FB7is(6`C?k%IS*3V&MAKpN3Tn8yL2-INZLi(|Ov1=)VF^NVEPu z!2`8e*-DhkIbMU)x&xuHjCJlh8`v@qQput#+R@P#>M*EkK>Y1kAK>4ylej#FLetYT zk>grMxw~*#HaC}9plCVLsw|s(@x(5~mb#V2;RFt+hPF^+PDU=~93BDW42v8!Zlf5= z0gpk@mmrQt9tq)%S{a<=a`4UpUS>)%;4nDeQsH2rYOmD!kt#AT`F;*grEAtPa0RzR3GW?cP-yHa{6Ym8Qlt;Kw(gRSF1T;sKAJM0~TO17x z(O!ow#tF=aQ#@nbTbc~(^DE)z&D(L#Y;4hiteM-)>zRjRaNilr>~Wlr9=_Af8lfL@ z3D^xbQ2P+5Q7U+bd&D(6z<`9Uuqxbn3EN)9!L-Ji&PzBFUedGq{4ER{OlumSy-e%f zH0c}Swe)Nre~W7jDPJnX{x*0ouAAu$>F)28HpN+Ps=M!fPVdt5lXugkU|P%cvhF^M zM}4+_#u@xZ`gY0-fW>wF#;x1Y`-Hg8zHEhgx61l`@u^V^H6Mg;eiLZ|s!Sf$oWHxx zT!OB_<3~^DK%B>_qsYYAM|#}EhDl??Z6rXY;Ehx8(zRPxfk}+F=u`EbH=qrhAbMqv zHKVd1_tp*G3Pk5A^ED4X%mTlj{B`*f#B<3SKKdVok3YT^hKGANuJ&BG!G`qkq%yQ( zOK@0*-)K|{N-(sahcS7)4~+y7o5?BRQir^Nm&;%rme4Od+nX@`%EPUNiKzem0M7En z?m7~8ILU1CG9SLP35DClIkhOSlfi*^vX@}}>P|lcz*JRX1c6Aaq5_NAgj1=XRZVZWHIKvO8=tUAFAbw@aAik(!}Vz# zbK}JO#kyz1Ve>OQvpd0^h+NROKD-y|R`D5#Q|QSD^Kb=PaRap$W?)aRP?KJc;u}ZF z{Liockl#HRFbuM2-vha!J5^QSwxo%p%7P2q8g67BKAd9FD2M?R+sR2egow?fBUFn* zyKMPJtp3vkbccNez-8DeNxgD~Xk$5x=K(vZ8bnF$Ed@O|^E#Oq**TwL z)!6`He0qRiO1K~*u^h_G^1)N;1(P$6a(6l7m4#g! zfdo2OojtVpSgX**3)M_y^!8W`+vyAS(+&`iX#rfpvA%L*1ws)=8AP`q6wcJ+bLYnF zCGKwq=TZW0y%qR75}Hq~S(aBqT&cX2 zPa-rSIop?gTu2)Kz`q_8Z$GgGb=1KKQZL}Jp(i3UVklk+*qoKMdUi9HF~6Bdfry-U}~qu)!&1z5mIL*w-^N z$5D6oC!QaQUVDxl?N>?e8FF6p|NZ@}OQa}9g!^l~cm~(M=-sRyWYjC!H#8I175PFQ4FlL_) z3=Bl#(mA<>5wY`9NAIR_JRLI+MG(h(oO)OHF!Nyx=k#mgA)GMN51t$5gtV6M-iM!r zOBXJM;h}T!q_+dU+t|{>_@jn#Z5%_H`Y>FNJ0jNgQ^su?BA^cL^6B0>ggpjj5W?TQ z$y%|2DhkGH!cIBN6+>Jb7-xx`9K^6Nxd}0S^^@!Iy(&6+V6=jABc1_|2;%yMPdG@J z)@H`M+Rqe+l%@cu1;Zv`IpG+~6t;Z!o?zHCmM0GKo!>}hrL?Jxgr7|BcZ|3HEU!2e zKbyw%#lh#4#(Vm08p|`Jxb!}i@npPd)4P;kiHza^06+jqL_t*7XMd+>>ur6D7#>I7Mg+7B`Cy!!Dc;Tecm562kj?~W3gMh;fVvJrOET?;*ug|1O|-;liP zIM4KL{e>@nKHR=}19bom+j1OMzzKY$bv}ygq9-H#vhLz*xSCDbI>wT{NE7O7P-y_- zZ-M7Ne&_8ld{OBXTvj%ojrF5Q!*QoJJ`>jFSfiFXfTbM<-4?4Sn@c6vbx0Q;+@B78 z-F;!GXE@xtcR$jaxm+zU3hjt)c%v@pz%>&Orr^jjCtqu!+%9nI{V=F{<}T~N<$gLA zor10Q!XkIdxymIa95}$lY(U3Aql49zSqK*V{^11r?|$h^uzcsj?8uYYQug(O0)8ps+XMF^hc|G%TV} zj9?>-PmM=sxIOp)Y(SI09n7#;lp#{Xb`4R-e5gUhegEpUFo&*B7e_aK|N3qGk(MLw z?hhNQoc)WU{9k?#JqcH0N-bTT?Vbe@Y=1#Vh)PPW-Oz**fw z{Q}_2vE$Xa;(+$&mDp*8tK)$Mqji?tE0TqO)yD@>_ z{uB<)nMh7-f!W0|-JS5K_)RmN>yE&!g>(TSNDRP1U{TW5na~h(U@%U`}bcgZM1N3p$*QPGPtEDDKm^CYERU2@$2=-t9ZTSA0pp+D``W zslN7+L7&8>Ea28Zev?gB3CP={YYPbHtPL@B;ZLetD$6_72FxFa;$<+UfBd%Kb|&@> zk-m>(eAW-9bBqn9apChWGLj=N%sMV!iP((u>8$OEICT7MgD{c$N5V^@SnjKwSamlo z&pOzDmXn^%>t)@%{GHPH+cHz#?a$QC^e)xk=X9CI;5Tej8ncu(-ThvwvvDaX9=HAy z;Tkl_^|D|5ZFzF$bS1+lS$OFmF28A-3J`oxCq}5i;UVQS!o2f4B@hE=u6*D+Y@o|p zgD9^Iv7G)43-G3@0-JuV%;_f$-=Y#N6_dDB45zQ<%NP1X4#S3b5wjs;Li~-f3JXy= zo9umjt*(Omsvyvgse=o1FNYSaK#XoIO^0L79RFZ-6TQloNVux^Do${L(jvDEo&0ie ztlWzH4z7=AQzat#9GsV3yrk@*Yxc^OH)7wkz?>)!@K+f_h<*A+qLU^7bx&s@D0I4*k#1@O?^47y}zP}BzIHJ@nY7H#7 zxt)fv4A(G2JE=8orfk$1wl-D&z%}9;#OoZ#wjyZ@M=anFx@DXWR?4RS2uV^Nl@2I# z5dioX4&?kSX^?us*?|ER4j`-#Atq%)NW&I~HMqkk^vf>w(@mlCZkKW9>|NAKnvrVp zUHWPdQK^KeT&&89MsVm+gjAFw79;0`wsnfz#$eLD5l z55w!PXTpzs`Nwf9bSKO$jNvyEpP1NrtgYY+9DTx@dd9#B{QnDAdUvj?|qkGKRw%DzBk^u^ekL?8B)Ay68;fxeNNvq zO-gSX>m-c&TRi5wbhk|7eV@K-IR?M)Rs79VZcOkQe^UF3Uzxx7@_VUV%S+$$`^8sr z8C_jHal>2-4w;=t(u|6wr>1G^;^P0{{#Z=jfz|%%Du<_B7>#&D2~!E`hvHQ^hq`%H_HzG^UpjNdH^ntD?o`HY8;2Tm-;%wbLfGUfv6;moJ`dq zfOYglHDKBW87(0C?`dj{dN`+t-Rw@Q$;%ODm7}2%g0U2FP!1O``|P~$b9~v09d%)- zr4x4?oQs>^2umDcy1&m+hbPZq$&11=IzdMVSi!N=?tJdm@a(`aJMrDn0&{ZdU@m;= zN1qC_ldCAdpATE;9j(F1-3^O$?smBFR73cgx?y(a?3Pg@_&cw6#v@c8KlTD+!8O?F0le($9y-AXJb-J)G7Y3sIcRESwUs63!L$K>|?K3`7_i#z-P0 z`qX0ri#(n9a)cyA3bo>&MAWG~^I3oAi+v*Z)*#_${M_7JJPX`8=7MBCziXM6XZS24)^h!hchg$7 zA=SnB6pGtY9A~`gtb5Auw~g~%3f9RqPX>p>@1?e85NQ|E6&AKEgn{qm9$MG55p*0p zLi6t3J5j&01}=jHt)UuZU4!&U*L1?G!F)ESwGC(a;K#)2K84`3Kbh?@jeRPo!8)j} zR9)W~rj|JNltV<8);P@y!n3`jE39wthL5h^2)92%0@Bus{uzfAK$Hw%JJ8Kb1 z5OoKkZx9Xx{ZI#Y)LGQp)`ekKcO0{pR`3cZZ8q17TY`%^hmIR+3CC3!{PZ=2_Gj87QH_i{)a|#0Q`9x`;PQtoYIT!Ey=^g3_;f8^GK5~EgGKRyYtRLAN5<=Q=$c84r zu#C|##!QUoDad%AwLtE??yM@%-#u2B7x!g*;7E_l?&>|qcr1pUiHD&S6^T>E@Rak} zk7+Z*`>F8vfA*(PHNeIKf501zp}1G?0(qrotbZ*XopJ1)zv{DU)$f5abYS%0(#TP; za?$l5F*rEL5wLwx@7&Gf^z;-G{akcixBcgMFck z^X}#9*5(ewFaG4~VRC9V{BLh#IEb-V2IH9wtnaR7PGmwQW%USO!KE1R?o7owUCYLy z2A{oIqzvn;3wRT156@gaAExoSZg4YI54Y^~*I#9Rp_e^29=$4bKvXBGhjT-H@=Dfn z=b+rXI=FjJ!mi~xFC!fCTeueQn8)B|QrI`2mm%Q`pG_<5CVY_Ic~5Z?tJYcEVGt*n z&uiXs`!H;wA?4sIWi;*4DrfV-w{u#&i`bAeIji z%H~DYtL|=G`c1tX4MTed2IF|hf!}8S$PiOMItzj6cpE=)pG^*gsVYyN&ezr3AAa!m zO;ihjA*9>)Z{smxb030$-W!Kzx0-W6tMm&lJ>v^jJn8xSk3M*Rc0hKLvJ zbO(H|1cCbzhEj+Xzx3LR9H(5v@pPP(%?ChVObB+0_a{RqBIxW43mhUhcdye6Q}`T1 ze~AMJYB1QUEn|lUr&8l5C-?3WzRa-Hhk8RDU=$%X#tR_8@x?iIq$P2O@nB{(4EFV- z_qrHnK;qqPJuDr8V=Q{@=jLXBl z>(@hndrx?&?L23C?}h1mGhwM_K0G}*8jesyIH28iJ)L2s7Dv%I@ZQ+^G)M6iz1^Yn z{nWc)jcvcEpk4(*sIqS@l(_b71wy#CK6%N1sY= z&^(-kRz#5klw2Qmwe~^yI&D7`0cHLsG2u5N(MNxzy7;YAD&sv~)XTn1bIrK)obr>9 zIu*)@>7-*=15(;_Cu1A~$01#ba7)j{cfX@wP|Ng+-{YR89}d}3ijenMj2^vbBPO!5 z5B#Qt>?w2C-v*IFafpbKSLwa)T>ngFTp_;DF5eXgzhVBz=?ZUCJ$-N6Y>#O)z`A+! zX5_|+xUIYM$}#kJN@pqlmavjrYagWkcG2{m?rzX^su1gol*xYc7*9Fp`90n4Z9qUEvIcSMgVS#aOZJQRV~7K0Q7p5p ztR^%!p<~HA$6!MkvM&(ztxn&8o6v-+Rav;uHyDQcy4jR@>?OqC>1epWa$L}lMe0#j zeiA;uc{{>oEn@DyJ;o7EqlC2em#|#ImV z_U9GRAerDps znR3_x#5-ei%6Oh)th9BAQ4$Mz)C&R%L0`0&X9(|biWGxQ`Ys#StsG;8x?D?jCu2AK~W z3rjm2;ASo9=8$%9;hLlh*KI+ zTj)moY@5X)612{J;h;DOzqV5t@iKjad5Ls?r#$|4{+h;nf_wA(EX?}O@Az!6OoMTz zOKHW8;;$5+?v~+q%x4+?_A>a+{3%2n0bCeN<8yH+&TG8yQ<~ztWt!G|aT@DnJ)SJb zvXJt_rr zs6#3dkV#PkZfnI`!SKLncrZ2Y0+J0T~!^M zDU7@@dM^hCW|uff1G>JRd0oML>};upz%IjnrWxbXitx#ed*HYUB<~yzOn1&t&Z2|8 z0Y|?Z9o`o5-@~6VhVZy}JEEXdm<&1Eq@kCL&?a1kmgG>2L+bMM3nLKStI6x z1xoh_5d@%H=sa8*XsxDr_yjS~5y-t3qVVbVrcen`-kqL~1X?q?3PU~JOjdS!=q*)( zh!2>who>AVi>sM(oF?zVe%=9jmqJ+Pr^-TWXBRtZ439v(4;F5+16}8=-ktFB#S83+ zIp=m4svAUb+|mp&8p6#vkR9yu9`a2t&V)q}>hNhZY7710&6`&d{Zxi$`_FUw2p$0d zp1!^TPK-gPtRo*?ZJhw<&zv6$Lv841Kpdjt2I0vf11GZ`!-&N)97N%M>x1#zVe26~ zXMi?yrYqv4F_i7Gdq>Y|e@(p~{1qaWZ-mP+GI}BEEbT&gm$7?4pm2e+94pRc6!AS0 za1XawQCtsUmt z`fq=UqbAQn1X8(}5U~j$RUJ5Cg2!im8xkV&cQG(0AZG=Q>C^i{u0lS`i3kg>k9U!o zcQ28ZWqYN#;`fTiQkk)TD9b#iiG&y8z*L`j2XXj4gLPwte}vpDsw8s8;_LY5@$sII zh&3-1vO>H`N6mB4==x+77X*oeuz1kvS*0h_kP!R#`!x1hUuHgFq6?RDC`?U^ zNAaI7zYaj|B@ni&8|e6}vkpFSK4@H;Wz(z+FbUX3R0hT-X5ny(b1EQA9>b{p_uS=@ zFn~d=XQ!Wl+tf`fhw}**E)XWTz;VoEY$$pJo5)0rTrNGxG=n4d;rNzd1PT%fSzPE; z*0hK5wbStJkMD$*|CDkz+3e$8psJQJLm#MgzZ~y04PoRNxWf>el`NQLESS~c-ZeHF zu0@UX>kRf2op19Ra8)1`8KPI$(2Dfr%WDWoz|oH)qe#aGJX-QYdN`3=97g3sx@DbBlY=gNR_ zba@bi6^L`!Y5V+hPhZA0-%{L6H0pV2VHP7&q|DGP`jyr@%EIz|{N{e+9(t}_^e3YMf)^vuiu1ghwM1H|5f^VBI?&c~9#sOEpN%u&owvWww>e1VWIZ%McdjhLsc&e7 zFy@509VAVt4dg1DI3*R>=-{YYR6{*g@C5vbjXejxv~heacn+Gf4PE+r+!AK?6&=y9 z)kmCz4Ki7P;&tNaU|9#-`yj_!oJXtEsv2-JRCNY@genOkCX~8TDooVm6h|XAkAy5c zVRRcd;U2E-tiavf3_o>wG)$E(MazA92lrTA;q-hzE>bGPgR38e2Dp4`S=FMV(1Ua9 z`c6)A0KgU~|7&mlS$N_6Ghr1R`MYm^EBx$Nzsf-Fh5jxaLzlI{nV^H=sw_;*g}$Nw zu;0LudK0Cgw{1T>f92_LZG1XxVC7rFDHg5Smaqi(@-Oeg1;A*`GnOWlZ>9@6A>tPMe` zaDt12XQdzGoV=V$HnAbuWXwI-p^WyIi;NKQdUUOQ1Nxvb+~JC-`|A8VrH&qY!7j>; zU;*G+xJ3*ir5Ge!S^Px!=8488+(iyK`pY2K%J&|L7ZC?##lCWkA`&xIVb@+jWCf(B zuCiPeImv$0v>qF&I9CMYGpib$90Kc!L^Lqbv}v#bKba>5jL|E5X7 zcc!tf27jmT7r(RYsDB1Al|oAEm^*%!5k-&?M{>^7!Xe_b{`QM~=|c2tzxHbdl@to| zJMPY78_%9?!;=e(<@pWMrSeRd>T8^36_;ar-y2+%QeUPt#`)fSDflj3w(YY*XQ!63 z^ypdI_+7qL&VsE-Jj3{FX`KVNsM9TSj&q!iqWyv2dN^bl95IbI_aGVx684E$&1KmX zL!5eY-7&DKL4%8bDezu_J}c5J=I=iC09e(6$<|hI*T-De0$76c=ol_xj-wGl6?<&_ z4mbjoO27ap=}0n za+T{K*!1(LQDrSS)6LX@7RC_IS`d2*SS$FVvx%d(>+yO3$EG-Z^H={-oCD>w%dv4@ z0VzO4Vg4PT6jYDm+)5K&c!^_3yC}?yo)(0;5XaO0mr45zKmG!MfbUv7nq=9`pThJ| zpIva@gUgH=V&Q?mDKxU6rO?drr#7e+zuwG%7!5SUdtt2k37$!zP~#9f*l?#1HFwYE zk_ROGjQ|6Ih7)bg3!AdN)_nLMf8`&Be~O-GzOp-fjNbBhzgO7YrTptF5W#a(;I_3e z(!+*l2>SuJ!kZA<d`q&T%T_I@bP~OhXvF)P*V;o&^xG_V)MU1!50E8Ls{*#)B{pR#&E??(}P~ zyb!*8xi3^=q_v2*g?fnUrs@oClv;3IhF&82#8Ze|e}J9CO)SiHvDQ}aaqk$q)uEHf z+L5V84;K}WOcjztaPDapL@OJT7F7F`7Sv;;?IAy>tZ{i%2TM`Es6}U1w^@psH`#Qp zEWjye&N&Cm0HiwBO>snVaE=Lg;vKI9=gu$jOTt$Lj`LoGKk<~$ZotGB;s7sU-F%j3 zUWwOYz5axIigAMT+wYn$;TrS%oXWMn>Ai9OHlO7fQn~4FT*7O{#SJUL~=bWq3n_p@H6-&gVg1{8)I-iD`4~?;aJ86 z6>6B9EsP^;Qw0+6m8FLqTrdDjHa455wr_FnA7v70!JNDwDe1+Cly55Z}VP5NBZea8S33(cw~fy7oC- zX$rcjvv8a>}@3Ke;G2{Bk-(dF^Ii~ z)cvQU-v9XI%~0RQnqS88xk$BYn!4yy+LmE+UCoYg9&vwVEgetgnq2I;EAB7j<7Eds zxXkK~T+?Nc@dqyvl;lPIzeOxv?`CGE(W`=ej?V1t&N{5_j?fNb-D6TaSy^j76>dyFh;1Lb@>EO< zritRn4Af~kyJZh~NI>a?j0*sh&%1%OjtKyf#X{*W+CICETEi|nDXlCfP3%4zFn~Cz z*hL-VgHVc&$QGQLS6+E3oWS<~{Xh6d)J=K))z>1Cc+7Zg>h=mGB$1&m)iLJHsVkK#_w%ppNYTMg?qt3ru(K-(%r{ z(1CkgRlkpT5+8%4^{@tk@BGMM=*Hkg{jcI6f!x&H7{2xYeJdUu(LZvIbK-Gz#Ac@! z;!@FWL;!G`{Z_jCrv0dEt5ki{b`4Tv2rZLru^0)_6IOkH zH@Atp$xJwR>G?-p_&@ympT+s*K@e&D?60`VBUKp|`LVy^`$C$O4k&_KqEQ(0RLT_i zabeqmz^TG7EWWnTZ(|)`V_Z|Ku@i=C%NP&AQOxVK9GIyrDd-zprs1?`e2puf4;p}_ z=a`l@D&9_U-s5~?)9G)+Au1Qng*4BMPjkcHa+AFa+xokWxCL&sE~|vmij#LE5%8s- z=!xZ}Kl?2HyEtQik5h>@)_({m7N!Eyzb1@>-}wBiVSoMsoAqq?{Ii`Q^KuJDzQEId zKg4JQ*4eXRb_4fYhwE$_IdTIiHA35XZ&?b}GR6=SN)N z>E{lJBbW}l?ovH%X?hwCHa^WSUkDwYJ)!o1V|{_GmJ4{6!B}etBKCu8H<3Va1S#wK z^#{}+NAy`X-8HB(WT?A`W-!a)pn537W+WbW;r6|M<33}F`Vn)Ou8pd5m8e$aCmzOc zcfxU1>bC(i=K!3!i9}+!r8g3tYa2)gi-LrxZFTKZ1y4L9&JkA$Z%RQN4`EgKOayDn zqe_GM^uUqkjALgW@uXwxZ}Td_a06-{pZ#{6+h=P_8h7&;pMvE*n&YH3q-SxXzrD;~ zJhxJQc($v5siSr=p9z}P8;Gr0)Oq^|b;dt(tVUA=lW44)ef`$!m1SiDY|L)EP5 z_SMMn`G}Lg^%s8$PT@pUm@#9}V+{>0aWk!t|0Qr(1M_s7dN;zDT136E4R>5EoX$Cp z)WK6#X5M1dt)nVB*gG5zwes8LFdxyOeeW;WXrG6! zz*v8~HnjD3gik*FII6dnRxGnU##_n(YrIC2=!jO}cI${uai+PhBJ}q@74~HRGT0kT zBwa-9)uTKMV7&g~D^TQ{p_xhDhLxvBxZ2UJG{S{izpV8`gCHu{(EvaOF-%Q;X;_$> zh}3gm&ro#Hv_6j2F3zZ{K-6+eF94{&`pf@wxbVrl;o>j+OsL&iLY#9FUV!!ehrj!q z;h+6y|9SY;-~4(w_xe}D^>;r6fUCmAizA_%U0ok1uAD#D5yqyr!i_2PiDv76k{;;k<^-;Vu(FB6ek}Vc zaqYq?5&NHnH330a6YMrU70bz(fX4~wWH^KiDp1PVSi#MW z-WQ(35w+YO$&xG2e=gj-ek1(e*S-<{&M*Cg@L=YH&@|K&u3x=|YDRzf(a*hx+Qn)Z zL2vHG7ly+%3_Z?2dkKWgX+FTz21qE^T^n|=l9tuJi3-NZOQYfT!X&#M^ka2a-ON#P zaESyacXa}>^%H2UvvC57zXdLXX#_0WW4?N<4P9DRaGtz6_Yez0)F4XQB2i>H`pY~- zuPYt38w=sj5p93>qmOZJ{4pCN3^7nFm*CH_Xy@4(CLPqsk)i9IQxSmu8f%XybZJyl z>cW}cvs;vl5(y^=WI43@DU?{YzH(b_hi$YzB2}N|z80RDzsy?G+9t>_$W0Luzxl>V zG#o1sKXS}bz=(ZNCM#V6IzHQ9aPL^0>^J+*GusP#v1goFRz<&IIHrO2Y(jL7y>H~i ze^!tiYWvc7_>F|vycfqiKIuwj`CfumB(IgTqVGTYqdyAY{qA=or+jd5FzUd*{`%|T z!Gi};|4yRTa@2Kq?mDh6EX7FF`g;}68NZq8=kL@;f2Vq-_txFu+%hh`_ipgLmt~~) z#d#f5-`lUodliQVET-05XYtli6`p#;=V=kC#Q;Kw^85R1EEq?zopI5mou<)nODTun zs6#TLk60d}(bMmI;|~xMNZ(2JVmwu9)bUxS90yts01ccDS!M zZrtDy7dH2NU$OB&{xAOVqpsV9GwkVj(2}&*jfop3@EPzB1LGr}r~7$VSbV(;TaL-n zD!zlO7!%wso*+8BJG;iF+C_Fgo_oFz0aT8cn+ybPDV)PRDjXTSE}Y`0@|ce*%`&7h zmC37Hsx-b=@i66_-e|DPBpdyWu-`YFjkvioaF+~!h6plxmjA{l&wPyo#D(*Opb$B zP&Gh$=lZ&jfm>-M9zeDZ&<~sg4`NKYiA@FT>LEtP8>~r9%-xrU5#v|)!r_9@1)kgC zraBHe{I-i1n|nHerGo!w347t)0|mD6|9gFA92GP?Lx8iC3Usz`WG)Nz8|T$QKiAIS}`|St|aSe%8vnhutf+ZI>R1c}Meu}GM7-d)sOIXjZ-ZmA5o@BGP`DZaI$P?E{S5ii0p}zbYXR*ElvZcC5byyhLmoSMOe?aqc=!rg6+o zXT0l`LC&jj;s@bhyyr$f;X?6Q!ky-`jb0HZ&v268vOLrJEz3!1yr=r4yWf3sK3Se= zjrTj^JLCMeIKg+u``)_R=idFMeIqVPX)Hel4;tz0#f8+^Slm#%?ro2cV|0#dEe-{d zR(lUAE>s>I@=b6K$2H@py0g0{a!PfzSC1se`e;+5L@p2KbpX!3{dNe=;5!XdzxtIg z!9biuzcyf4+6m5>ryrN&MxYs@w46G!wTS9I{e3-nSz!Z?{(KD*;OWUR)B;-KeE$94 z`R(YfV07qQ=s5ozC%63&mu?u+kN!BWyRM>|&=@}d#+C5(ul#DVc6YFL}=1>0Yw<3@n?;r+4@2io9IlcgQjwA@%Zg6p zps{63p0#)F@vLX;@z@&4vOmu^PGfm?Jd)P-$SYZ^L`jTd1|vX_1d$t!2D*W6G&<+p z`~US&)U!Ts0k_|K_tvd=>eQ(d8$h%!#uX+)S04^|8Qh5_L=5HVHdG>d-M<&ajmT^4 z$`J9X;Rdc>Ca?fu7;DzV!4s3QW4ShNx%T$>?ce?V*#7pr;#)8LL;T?vzJa6VmiWIu z^ETX6MS{^-HkM@liXw zj1|7Jyx5fChAjqHDR7NP4F^fT1aJXT5n>7@tE(Bt!6ab&tN^&PX;HZm3ZRpy987=^ z)G<}L`TzOa*AusQcyuz3A37TA&vB~2YH&QN;;r|+Gb&L~KJ@zGnB;^!J~pK0R=j%R zMBH%0b#Oe_0_ar<@M=-kKF;R7G=7QT4;V1a^~U9`#zJ33m|uMB)^jR@XmmkK94SI{ zk(g|k$u`?|+pY6pKYf<&fds4I5~-8BmH-o@=PyMMu4zgu7;_M97YjV&AF6~QA=R&&v}vq&S?QeEdBKv_dOi2 zttAd_xvqoU$lT2>ld(u`L)=$_E1pEs+Ge=V2?jJ$D=mn)({DCaHysVpQa`CJA*ZYT z%>A_$IZ0sH&pbE2m)@n_CdVY-%b)f!f45%8MXrOFr~40n@PqNmPku5XNQqLPr}axa z%wt{Zaayk-N+rVFRD>D7C&G|&O(Hwran3E<-@=c5$(xhEedd+dgYC-w&B!|=b=Q>r z%D-)+?^<4Q8P=c6N#pB{t4S9|DX%)2xPS4vb?Y9e4!kxB+}Uqk&rBm?w=J#(^H^UK z90WfljHbs`!6}IL+mSwP-7*(FR}h!6;i~>4p*IWO+emmt+kE86t8wXUS8U(0HQI6G z*L|^||G0i*L0q>846TC8y91xLWN*>_2oEv>;#5hC%Cr<&fy|bFpPu1-EP=&N@_6@rI#_)0Dp zn2f`O6aFnxpK~Oc?{B~9g+!XakP7QT6`q_@J6+#b*NX2~F*X@y3hk#H%eDPn7AOpu zgiBo@n!oT4sx$;cP=bfDZpxGYY(hFX4RLwKaCoXY4L`oxjN(CqIQi#)f_M;};w9Rn9cKzrDXcTGL6(VK2&b5sw5P@T8 zoMD)YhDl>@ngNKh#e(Do>*wPp~-u6+VHLWSyB?0QVNytff+II8#-A{kp zZj);+;{~7DFZVd{h-=unb8f{`Cf8Gj0q5BH_cP-izgv#?E!)fQ84mn3k4d~&oUF%Z z8J=vv`>TENzHPG}zuPvG_bk&sS)Si>GVi~XjHEV%@$H7hP=iLHygj>i##2u{74LiB z`=ayondpU^ua0y(YJW!Py6)P2af$t8^ZM1%i^R}*+pvBu_h9HzmiqVlmi3UL;koTO zeezU1@x&91fe}*;#?j5#Ks=+CGC6K^RqQS%CYcx93!>W6*L#6Bt!8cNYgVsE;9d^k zO7O3RNvY&>l(r1@V9YpC4_pCjsJ^t|WvYQg)5*?baWk~q#5j8{>X6&6MRlce1g2pP z1Z)M~nN)v-p|ZRoW|p8O8&<$bi!spG1w&#g%Aa`rTTz2ik^nF~h_h=DxC?4*5Jh+< z=j-=_G}K=QsNIYOTJNjmryhf@I(DP$@XMe2WIXol6L1)oT*+Ee|Db zNCnnx=Xx&S+pj5Zyyx!t>KDEkx72TsFA z_=8XXUc@{1#t6P)hZdUR;m*!@{K_yu&2+V>Hcx0_?aNSy1u7>#%R3a5(EIC<>l z_{fJo9&K|tX1_cfBQsUFoT-W(yWtdrtk*ygkB-!W1eS;lwhHbtdLLN4*0dms5T_NT zAx;+4a3m^Gj@CU(IUH4iPJK>|D-1>;a0-M1tw7)c5TFI*0Q0m zFEsDziNH3S{H^gfM+p*Q7b^diO_9A?7;`RTY@>sO<*lyDj^PNfhwTeoeCqc6Mw zLad0_4jznEaE#Wo36FrRGUCY#UpHB9PX4xj$I!*BaZN%5{I;zX+_NvWEFM4ABW4I8 zKGk;xc2O4)0jombd%`TU1IDLclx_LmTY%G*5C=#l^_#w0ukZM~6t2b+-`N>>hx?3+ zB2Qh4Nx(2Ve5YRW$Vp1NNqp+R(sJeO6h1*5>34yHsj5Z#?WXK_a}_6HDyE?6>P*Lk#b^{&xuzY~k>Ae;jPSl2O*h4op+2(AGAF5GWKg~>y@<)rcB)A4cxlE5_z%^bR_68f7r zv?HF?Jy^j9v-Ntgog?q^;01IcFGgoiKk&UFYKRfLar<7l*_VMsBoB!EW-+GZB$k@1 z3e^>efy%2o+UqxLpiaVwf=fo>Y^_j78}6}`H2mZL`p03f!2oBYG5U|eDGDv%!xtG4;i9q<9dn6k48@9* z9$y+D7A>!a&0LFcXbj+ugO9$yapb-Zu4}9!;03zPWgJ>MnCnTnWu50vM;}r_Lk{b` zM&sF1@YcDm^XUMoD$Ix9eJAZ+L`{GoKx{RQ4G@UbqyFlc9w{mjK?~C`CEQEIgA$Qi zf!hy5wol+8qXw@S9`2NUY0+)OrCIvBh#%N_M6&a6?!aQa0a3{uiU%C9t?1<{#n3}S zM_X&GYuN&ki};vBlIs#I21pkUovQZrW7&S_(#vsyecy5WvG;u-I@zmxdwYwAE#Yj} zqU%z;V_B|!*S+t#M~Q#@ZazOVP7uF{!+b7|Fy%egb?sbOrtjq688&hwgq!@X-_7r* z`Ft;zVV&0Jr?|@UOyUUN_wt$V=6tzqpXEN}JoZJR-9xi=h-b{7llROk4mR1A;-o9J z5*B9%?%8yOR{_4b&~+|u!tLUYjq7ofhQS?h>U!U^duP1(+%xg*|MzQ2Z*>K=!!q2> z_4oJ1Uh3DTrylzz`(ywlZJp|nkQkQQKq(*n=!X+rJ@(iW?1PIOdeL{~VBLl>{51Nr z{V+DppBs+8u+a1c+}m`d`KTiTeu1UwDza0z(F9nH#-;Iu6qP#mo4py(al% ze){0kv1L0FZd7R&fvr6q7>&;jVF;)THqs4#q70Z(EQ|EL0ES zUT;s7fB2U^Nw`s5Y!CwMt~DEpK*FhwljRZ%yOISXcWG)ArESFiDM}L*xFU7^lj{3! z5>EoR?!P_iS6>rvx@TR|3B3L$oT_u`(>b_p(z3=^O_z|1;mB$_X z?uZR6_@6p(OFT38%W)W_@R7Z@M;juz=Q+7 zIR=QD^S+OM1kwDdD2GGRuzhtp4XQ%%p09oT4cNJU_cdue+)(nSE8yu5F$10Vy_Xk* zea@S?1^GPTOo$=@`(jTIi<5=X0P^Pq+stWsstva$C{6DfE{VVW^S_SMb#w9ld+r5y zmd5L+PB4xvb^xpo03Tp%7dcVYAhM}#;Pj5yheM2U%Z~PV>ja!I)}SdLS2(t*}4Ooat;`r{qglkz68JnNuBpJNNmpCsN9AVi^*z1=J+h$9fBO zTc=6n_oK+mGBUz+ZcLV$li$5;uj6BW`yuDS?(ozRl{#SN1%B;E=Il5=ugkrB^=NYalL>a2I})~zjqX{T!wTkoad9NowTQkL zO9ie3I}HKpT4}`R zW_|4jHh7ht@JO>!HYmaji@7{k$Rpgh#FM*6S{Z%Nkd zOBmFSpm$q~?%Fgk`1+}{v2KGpigHWK3HX8m8Tea?L=|h{;s8$1kxUJoA?`i%TbxRy zx)`&Z3WqDuEH~6s*8)G!9n;5mhy=d)>3#KXhv77~;Y#sxABS>W?DVnj8_*}7?u+=F zfA>dGzU95qjNa{)>DS|X-+4U#k6(Xt^y9O1pu7*A{ialPo^y3z^LHPBu2~`cRBg3OVmYHw%}c6ICil?ukL8%@HChX8g2MY zADya*%LAkF^uY%(Tp5NKK`jg5s>W`^1NyD|_oMe*pKLBhQ8jR^$0)M_6}+yqr=y{n zkix)%Ye0f|PN@THa!OGyeG$$|!0n7s!B`ifwE?*6fWxH+gn1&5RS+CPwE)MXoWqpF zv@6PJb=tHHqF?#MV^7A0jho}h>!&efJ3*ZoKo4Tr28~b)L9UUjmt0_(7(=M5sZTiq zLA_E!)HFDtb$HMzPPW-KD0kQAj;q{P@sRW2oOs_nu1(ji{SkNBM{QQbDc(14-m9#` z-x7)9GjWRVi&rE%eK+BTtHiSP+7{>9?>@60-%oH&9hR5NHLqog7ZPmo%yxL0&oaFH zp4;ZL;_`iN8MfK_@+Hh!zRx`%**86lh6EHZ@vi~)?>^Kl6mH90?E#WNjR<;i%xORxj1q9WQs6XQC;wgQwsw@ zJ0Icl__3qp!N3uzL22oDY=IM8S8L!Bd^A( z0t^t3_W*M@#9$9<4i`q^)&uv&J@?)f^SFRJvUo5~TsRcv0|4u)HmLGBbV-l(#Tq;g zs0-QzmvRMX&r|40RF|Ne#YuJwVzm~;Tg$>VX18Ld)%a)aJ$5?!>#v0?sr4MgjNacq z^i@U7H{7xx?*&-HL$&_e`+h!t;zJ*ZFMQ+gW8q|9Jlb$H7G8cP1ubY>i&F2aPsZ@( z{+MLYJ9gd_)0_-0PY%W!Sk3qS@1Kn?AABA~-$uL!RK%4@0vwFvrxy1n8?m4qI5`40 zlaRDn@Yk%vuPNn~m$Ohgk@Ss#z;WPQ#v&dieBNsp&&I^X0XPM>#F1BCi>Ds^LHy!x zd>UO2!gAsgqBzyUIcdkD&vFDT7lNO1(ggTSyD|<_#$h_ynpJRp{;|suosL z002M$NklU$YJC1|~`_{ec^6R{3| z=RD4*DZghOx$fK^%k}+?$o-yw=gq_4Ipz1v?-=-*FZ1Mb@;&o=S#R;D-_4Wn=konD zx{zbz=3x8$?xrV4rw+KTgF~fN?lSXIgY|V%J7MgUBIwt66mI}eKYKW>f$OfhHd--E zFfyHyXXNURB8LC|w;rS{Br&X+=bnEFhudSZYxlm`vu|%~Z(59vo3;?iW;fnMet@O< zmN;x9_S__ezYQe1|95R|A&KEE+Jaz0;0A4_$ziixf4I*wfV2E`slq=B7uVn+2dpJ3Y zPMX9p2TRw|6|C7yr*To0;qmI=8Gcpt<$2DeXOP0#&b0x2;khBri%m|XpYv6ihcp-H zbhaW6M9K}3S%dmS4;(v;I3nq4?WzO1>qA&b}0-9H6_-_rWEC1B)SsdURzF zSEe`S9BwSLU-)NR3N%D&gNI4yp3I4XU^|rvYVetGL|Rke6qb$NaUADrxR6(yov2~o zcMK%fEW8qezYLvrsE0ThfBrvO8iF-5?dQpBT5b&8XEz6%^Arl-fSj~Giti@K>2 z75nz>i+-cF)ve)>&G@nQ%Nkmf8^<%l!*4&1nU5;z_ZpYy}+)AW{3mj4;&|ROc=r)SCRn0Pldns#R6DnR~ zNFYW=;Plot&_>3NwF6HUzrRL}Gk8!P(t)KoN6>=q?vr@InBX9b8XM8k8WGj*+_@{B zI(&>n?UI!SHSqN(U_o~NQh2(8?ibD}WBwALpmmsEIN3e=V9)B)z`}JB> zoFwktU;I=@UyiElR8F!u)o0>alkg=T5ofuc#cL9`X`ccHgc4KnaA&@ybolYB+=}5FQ3_daiW*+SciEsp0@3d zh3)h59qY>N%Jp|3`o93vZ5ljs=+)PONkr+W9BtgN2IKfk9J*H*a3FNbPB@&L$XFK@ z=*2#d_`fX~i?_j;971xt0qN5`2e%rSdnIs99h1F#uStg+qg!boapL&vNgb&PU&13W z#|*J;`*v(mV#H#{HfE5+*Vb)2ld75FXSZ(O0x?Z^X9&^;R8v-i$Ic^lpGT#j0uL-B zxTmYFMcoBjaFKnpstzN34%&P6?1f03h(QiOi;Piq3HW1t8e6Fi(NXycyuxgao3G=b zHt|CAof~Ao>SSC8WA$1j0FAAPfTssz0Z~sq#OXLL5-M3lQtnd_9E%WNB8NT}WCywx zGovW4b6T9F0cD8Us_>^ei~p|6z5TJ3U;>8VYr*ogzpFP|vCJKXtJuKlYGrORF3b-{ z55(?IUh~%Y{PC_>MlWiZg}L2OXJcn$M^9&rZGqffLu4&$yn3(Kl(&mw{BN_ z^1hG7H=h4qj6t=}(uVCdn_^|0%@Yd0?!cAUy#-MkI#+uj{3@DniB;>M#o4s4VZqLp z!J)y&ozAC4`tukijS)HGe|+&D<1hZ=FJcwCu{&QioO2Mz1D(;+jOYaDaiz%Nx+T@n$qm|ftdY{(K&8jm=} zd7*douREJS)osPzvvWEPQUAZzS1C zB-^Fi9H0Ftq7tEduTaMiMOgODe&_tDj3Pv8SzeBhbE@diJee?+vuGdek7b)D6U&zE zvz*sF{?6rDj`jLG=gISApY5lY-+k9-=FM%i&$i3Ua`N~5X}+8+$CUe7oImF&exC2C zGUB_=ukTo<pE@1~A3PXkEgPZ>H#1Xn z94csgGFk-Ym(cyv;HMO#RJVQ?5!vb4U~YCiuAISZ3I~4i(j~-xV-UQz@5f;DRDrWD zoEN7h2}t28>A(V;Qh$tHVNQTur^az~?zjw?lG4?C6%erFc!gOmS%t635p;mr9Ko|+ z_@ggk0D3DH`j4R!#pnzk#(aHSlyD&EfuXRfWoxYFus(w?*PJB6ij(uFF{Lo)cVWtd zq@T{E*9>))AvRC#^*QUW05gU6=D;l(hEmxO!7!FnN@X&a_SZ6(Ab1TST>>FE3k(ZO zTIeTV)@dMq*t$>t>?h-2{oKdm?zi3=o8T6uwU77JNp$(34Px)6_3WQ|^3bBbp0>K? z3E(q=aSEyjGm8YBKmvE;?w?F+(eUD1H)52hM+kP~{~<{J`oqOzLs!|d7XJ76}@h9-#QD;Ohp zPvF<{0sZQIk-=e19x$e^j7BN@?Bo#KUiSau(02&JhnT*Tf+5% zOyNE2@qP1pS&n&qE^#Umoy(UB>KJkg9YN$ zzx+^)3_wTXs&LKrr8xikRCHm)wFF(byloyQ0ex{1m_B{_5Omxe2KWs`0z=HqA**~P z=`M0Et4AEd{@ZcWj$|cnOzJ9#j7r1~TJJWoD9hkPbs$C<_rwF>>CQtvofWu^C&pfh z*Pc2Q6*%@6V1_uA8Pj>E_~yhS?;IaM{k9>xo;w;p`|>By_XP8>0GIlR9tM&b#s8RkkIQfp z%hsV|d-h0t@M8y3#E7ZVi!n1;i0m5s*0~exVq@e5LLJ>d(I2W8iwv5{lIjOI`bOdha96Byd=qQb|l0k$L`Yehw z{SX7FTiku%4p{ON(Rq0;A;v*49cDJM83q4Fh|j%c&2bzbl$Vyd__S#i1fU@V ztB7*pqN<|q!%rTJ(F=WPk=D|NrS2;+)mnj(87Cj=YpiIDuE&||Mhs!Fl68^U-YXd9 zWa3&^UWP5LWwTQ?#0|CY;w2Wqa4ezwq^R6EzBB|k_s8EH_ifx8=U#q1j-Bm9Ul<>B zAlaJA)dlxGaHSUX;!u?4SRC$0#+}!Jd^Kayj&5JSqFzL&xE)43>9)_}Hy8wq-{hEj zO-~mH5V@7`0UYbvZ5cO2zGJz0t{eyF(DGf# zb>tNZE>u9UP8N)joL}1|k4B`TYQPfXs->mR#yQBjsAoXTDeu)XEjRZ;L|6eqkda%G zgVKlmJE@-lzqzlegIE7#MC}@~d_`-{nSBtEd*Amg%jb@T&-`v1d@kY?S({H-bsRE+ z^j}RG`I&9AT+8vw$?vw+WZk}>$HDx0ejGE~ z>XrLcoX_|3@0`zjIT@$hWPLu*?a05~U~MlC({l}Dh7j@Rd@H3GH9)j_tzO@r5O4~7 zfZxGOgGhS7U-s(4{SPNXPAlMA;HL`CLj$_(GdRMRi#joOnS++xUi7&*MD>DCzWKmG z)Ug`ha2GWHD#1uzJbe{j%Hyl|KM9u(oqu%62GOUjM1rNRek;(wxd5g$tYJ8|URrA)8@=IDoW>iGJGAxGqM{;$CqbE_?|4{khM4 zBg(J4o!~FsQQ0@b1_}XOy(U^1!=dgOLV=IQb!$cl5zbs8*~@UIe`?`ZJeTH*sw>DN zoETMzn(@?tD<{U*4O0KxO$`ORg9_Ha^In3^F3Z0FR}iEXFkr+%MoEMcMSP0hJ}@ZU z3G3?6R<Ph7+%mrU6KjdKZV4axCoK<4VyJ)(3QPYFWQ69stKacJLMUAol_S!oU$* zk3q|NJOt>f$T=7uV)LIwl#H&aFkVHu_P2}(V5Q)ensU@W*e}*%V==}7M^XMIIBm_i zPTPGzP8n5vi^tcuyS!_Ke0XtkF6+?t3O$mheYv| zIKpvDIFz+${)`jl*rq)Y7!gh+SnaoK)&sili1#EKEnj#Lj$GraNC`*cQwd4mQy|Um@wG}-?e?>9f?}=o5%cqTCQ_xy|&vcfA`&7xA(1YbCO7UfWe0@{k06+V)CAS zHLv4fABs~YYDA|`cOk)DhmJcq61rm_9!^v-T*E%TbtgVvIn4I=)kX__L^++n7nSki z^Dm@6uS0is+twYZtc=HrlNeFzT>#fyMkQ=RPkISo^txBuhy-CA#^DIGN3-tKAXG~^ za5k_mhG0H5VfbE+?s`=taD&149J=AQwHXn}oyJ zjBd^Zgm^W8sa|I}fM@)%*Uz8B3qg0>#EEr*=ei;(P6BcUP8USp^v&b%1ymRoIqm3% zWb@vQ@!G4eLiE?cA#4U2!3pi`j^0k(Z-D?G0}0K-=~;t<{W6?mP%ttGICn5LFuIEg zPv#JF(*TnWv8NzJuCRd`-@FEA!V+j&?o~lBcEWO3q&7d_7qydctyo01rxt`Z3DO+H zrNs^o8+bEG3q$u^8jQF}=mS$^AeZjj_kRZw!EoGu>w$R3+ux3o`09ihL>d|iRF=0P z3TukTpL{;L4nG;IH*95tz{(OAKb5*w0|88-|5Sz!UU8~G0b7ph3`Dv?DkNy95Ern` zMh_cU8&1C!S2B%>7@h~&i4aU_yxFwXF?CTVuK|cU@-t&6FQa=l%D*dED7yGXB&a6F z(%_Y(MzBKLs&rw+<|~paL#(>Q2EF9&Mm3dif9CO9sLL_mw@wk0gnKU~gXKH+{Dndww@MmTk-HHJKJvEDL;>Lx#Bl*LmgpQ-Kg4$KxFxP zYMDew-3>~07RR`&s~cq9k+>}yZ@Ec27S64Nw0*9{9o{goD|>JT_)}}%GuhKmJq5Sn z1c#<8Y|^a>HYH@;uqB{vn+GJ@DeP)+=vq(*t)rtrz}g>;PYqO4+&}M2(AHxWzsy>( z9lDGwg&;F*X$1#cmI&TPIP@$b+MO*J`7JHr{GL9HV$4~F563fS#}S>k#cJZK|H0?J z9F=?SjK&!ps84KWZHp%^N8PsFF)_?o4&xO8BDQLOd(4gFGZzL5$IN8JR7SsqvuV_} z981UCkk`UPJ%@q@aJchimmVK3p(ZteR~wB4omX{)>)ChS``-7) zj&0jGxU`^OxG7d)=`FLsXkyx#7@)unz6bTOXVDGzfdAw(&nDgUn|E!FJMjg+0VBY5 z>(=6ZXP1j94!`m`qSJNp-uLXqF?}EHMim7DRIb{zqFcQ97}>3AsUbG5z6l0H1-@vJ zXmS7-raC*j=o3UV95G?88kM^_jLr-|aJK6L{lU-?VyP09hlB$-Oo$Js8AE?NC-z&{ zgz8YP-msaqRTjtKwy_;0#=vE4SZa_`mY|;ELB2S-R)j&MxrZk4s?Yn+AuVdm^+kX38oQ!z2@4D-8C)$89 z(}mcwWlIVaaQ5`sIEh=VjXUJwym*$|9+yvT_6AkOefZvjLAui z039>K#h*H%jw?Y~xOcf9cVpGeb`xu*ea+_h_rLS|@zDME$9sP5-^7I5n2oR+~hR{`qv57^uh{}L5sdc+G2{E|HWG{`; zZp19;wxfSIgTWE*6d*M9hb1SmtPbFTSlGB`Q+(q)_s6gN=5NH4&mD~WA9*Amd*X4< z@)%d4<0G-$bKzWk>ks}67dYt1?B5*!_~7^BOJDs`T=%xy;aIA)j$RBCZ+ONU{3w<* zqEoaUHw%N8aYF+~0^ruAgSwZCIGnD4pq@gxSp{=NFS=%GVMF=OqYuUigR+Jw7e9FR zI|(SKnaJPy)t`C;cGiO|auUc~U{1ah=Y&*(Jmmlm4-Uf39f(&UVAVk@1xcwBRm((! z9IXzCW5gnwBF`m=x+&T<&7_V%yuuKK(+Y7!eXCmPV)vdMap<+9 zoQy$`l)E^|B4r*{uU;G7C{ZuqEL#7OX(2D5Ls>G1qV?D1O83Rn_E%8}`Rbue=fstvk^P zBjCdHNUY&xWc*@-U=$}6`xiI`R>GaqV*@5uh)D66uyZ$#m$#zN0z%b53;424Cdb$B z-kX67q_uSguqg6aU_PJ&x_Ub-rZw5(jO$VkLye&=F_5X|k&_i{ded#Lld@R8dkl9llFzQkm1 zx4-?a8j5=Vj>+;I;iFMs8bz&Vb33|$z^<^>*w%`eY$wRJmwe6@hYfUMS61{-TG$BP zxaJ8&Qoe~e-yDppA*!rHPT+NWaBL58^gI9O@3O8-<5t$EvCP$D*S(C~1joboBwF2k z+-Tjft>1B*1E)%iPJxI0U7Umo=Und^t~bZOu}RlOz=j+`=3s@>^<3cPg)p>+b&N`^ z-v>B=L1+$MI2Ai_O1_Hm_`~1*Z&A7Fj#y&TA3=Y&axL&%eM8KjemWK#ZjHLO?J?cd zALlOh#m75Zu}p@`qxCa$>X>I&dD>ant^@}d?N%eQo`g`GfT)~7wMUEWdhm*PL4Jd6 zUSz$g({0}+5*P3qvCJ3?n z0A59$IC}wtvIWT}5=^+4Z5`LdbLWQQ=`%k-9f6qlv{V0_MpQfW@~gl{O>9BTfA?GN zitDb~2iJco)?nlD{EM$Zc+bGSx;C0Inm)wPL*^X^-5+;Rh$2PC0JURK951sI2>W9`weS6+EJxnO4`PVL!n^gx{iqNu#~G}Ys~`%UJH4B@5f`+@L8vV5 zzH{f}1MmAl96xy)u?A5ZAbRH!^9)a)ify}E_B!wqTX6bEO9g*!bDVFl$sjvuD2 z%_t&YI2}!h!2arO@MZCm4WpZ{EJ zx^WBoX^6n#6m)D@hu$qnnNvACPO^?$UJGZn8qs$-?kR93Q;tZd7LiUB+)gdZEAe$^ ze+1M@xDgKe41>RI_jYuVIB|4ef^!NWt|<_10;WkTTSHMgAkr?nQ(_75jZK)#Qb%d$i$ z)ojv^MKSSadwj<+)N%9>^V!{XE{Wa%1SAt2ir52nbEDYIa$%#VlsKlhD z{$X~K0jB;z$5G*GV8a7wAxh9+=TNx70l2(k7|zT#tmQE%8ySx?r$#Z{s*m2DS)8ly zj%E(vpZgDg5w%<18TI%i9VTpdDeo>#LIhR7HQL-BQ$$Ui3b-8fWp=tO)?4N!+3t(+@~g+v{LcY2wqYJTu0%~Wjdc(eY!7L^bWd1S zQizPV!2b0b1VJeW=}lX31qqj|x3n()>^lde>OqYC=&OX0?bTQLcaL9*Z5!9)(&{2a z@8u4+*uBLnQqcxoB1KpI+5TUr2z6ekY~?n81vEmvYjICkEh1MBm*gsIEvL4l2*KYKu*(4r8$)8AH{DLs>lx2)$!KFn{5% z{wxkY{$yP2Ivr0u{W#bqFqGXHyKdYJLkpkMM~`8c-h|f{bb3Gg=|4zHxkkF`9PEjC zkk~xpTj+gWyQ=R2kvMf3C%K4$-hazGV&mFP&`z8f(61?j>hJ148~gDZaEb7DtvCd) zCcNsN9ot#gEAhxfkHxQj`q!fbmiD&x4e<(kIbZqOKgGF=FU8L5ufr|K38J!a3P1#L zaSf+Cj23DUYaCsRxT1SDJ_M0f`pyGH+&UW#5G(B))+XW=XhM~MRzl&Iqieg&RfW5f zhE1!Z3Z1V>HjZhC#-&*nDZ~Uacz{nw?`Q{&W=P4oXO%O zpb5AFr&scWONR8FS<%0qoZTIJcSp&d-4LoEMhG^aOJI4L9UR0@8VeB!On%j7AihRM z2?Yq(vV@2<@R?Ag2Qd(|AQ==Pc3Wh;=1}r4L)Wsky*&ZLT9BGv1Dt%h3`PReIlq%W z43X(ZTh2y0CpQHSu5qlV;Fh>J)d>2VBa{_jJ z&7+$vkz|6Iv=J13+aLQ;Ou#ANn=(bIbIT)sQ~Zci?jgslhx>>&tYT z<(QL2$Npu&`Wy3S-?^vZnCsAdi*PS%IN%lDDTwpe!A1D{zyEtgcs=ovpZ>|jMU$8m z))e*U@p8@=VGj7)G?QQsyu(k&-^;YbA<;R_n}q%#9V0jGOidIJj|;9YBgQf>fxj zCc5zhxpl`HRHB;Wum0`7kD49V(m*!J@pDl%(G$ykjNi4_#*D!VaM{B)9gC~rQbBw6 zb)Ai&{v$D1vkvbtsQ!ST9XBO*i*}m*W`XbGMAfUN!BrCUMuw8unnj%ASdGvhlWSYm zFvarXLb<3)fJVk9cvj$$>vh6$EO4d~qfUauz!!~dzK)^q=xWfYWTrCu&dS2`%IdV~ z1|rbnREugs(&6W}@S$JaWe7i@IsKcODX6SWqWd?Ap&6?$tqonA>Cs@BchVYX)Az8w zfNjPQhASN~bn1ce8H}&EjqWpt3ijrmyWwEb{uLNQClLECBh9@2mK$Ro(k9_&8cy*V zjJ~dLh#DOn$6xnp@G?w{{u42Gg=lF@7-4r5bW5c>7nU27jm9kaUz|ULG|iz;25YFQ zHRBqm6uX8J86_}TREtP!hVSA=JvJx-sIwo;%>X_|XTj}8YSMFup~e?!moQkIgf-!{ zu=WZ#N`l7u%y=WiyEw?X758{Bkr?us_{p*JnR&zwes>-{$moj7=NV_1$2BMJ7Js;g z{PezX=cl;Bwn?;_B))8;?J`fsLD`7RJm$4t>#;nO>)W#2M|{^dS&n&3?w7g!-m~xa z$wR8`FquEMBi-OnGb%E(sCV{3$liJ90WADs5+V+4Ze1PEA9@j^z5OZcm%sdXanp@N z>bqu7f_2qco_*%&)Se1()B+OTc035QptCCBneY%(tN>Lb^a-RyqBqBI9*;Vu6^tdi z?*|Ut9uGhKa0;%n$oiA$RtMV%rB?`6wNyp03&z)SW$rjGJCU}YI&~s(W(SAH;v`H@ ziQzhE1)~<$vu{^3Pd5^9VfYGmLM=q_gP<+NgHUhxF%F-z@e@DuG29WJkIKf16iRpC zQg7&=T+UHh4JrinH8}FeLJJ-bQLP~GJe(y&&SK_!vbN`hzZyNrQ!l(4YZsehwu{hq zoU}J?UL7aS9E%^j{od$2bS~ch_7CE^gD4G5-tgs1NhI}w13wq<|G@j=um1Y;oTP|8 zf)m=``i=jHmw~Bxl_(6?z4)^>_l?rGyrgeFx1-U z*dPS-Nx09q#ZxbwO&$a;^_|QxlRgzKdb%_Tn28&keu21X1N38BSQvlhRV@c2l)?>A&8mtv3dV9tb@@}@um%p` zERv?C#O0iT4ZjMjzGXNtx`6RS<-*f{Z#f&!+yn$E!4GQOSOLTmI0P;j7mkY}Awk-0 z+gxm=wAp(i34!)#&(Xw*y&cQwBd-$2`1H$h>dhD9ngiFyrq(sFaC$hd$BV?Scia`v z9>&Q!0KW>3uvs4f`AcqlQsc-Cy#$N{C2%}b*)j0&zI5TE<5mkZ0!8d#~R{vXnD zelB7% zk4WC<_RF!ioV+Rc+xjGyeJ>+k`zoyEKKqXSFi&n@{_Q=Jd5V+wtv~1YGxx{#*oItw z@q3GS!tnVU7eM3poK_$}EZck5=~evQcERII|0Em=?PCo>;A(k4rP>a8Y>S7%MUZ19 ziyvCc93WkeT;P})^wDjz?r2_k;e}+Br6Jbk-t$<3qgM#LD*CezdE;~a&Lc|pK${3$ zhytJ<(eOyD!o$ka3Sx5t!Du0Wn9ay`DEZMMSngEUxvuEJ8u_N1ZUMd<(k5Qm&`y%$&7Pi%bWx+4!hCo@7nUU~{M0JRdm7uRe{Y1Vw1%x8+^N{y@`i`I*ee>i;20Gp z35G@0>VzrAPa`g>OJk-V;yI*f2CA_Sj^iThsUF)1lW^x8TE3ioIc9P*D`6}Y4n*pr z<1qlPmhEk#ZAQ2fKWCUOfk~u$I60EmV^U?!H7VCqmu>3rj)13pUP2wVVT|!xV!tT^ zACDtWo?>5c%vU&wyGMxM#vwq4rV5tvmgiU`oW`8EE`)F0ZyD`v3c`C499ap`G*4c~ z(Eb{5K^)>$oMZx6mgNegnPK3%GWovv#XKJTBz7GK*L~_6_w)OXpKZ5HRpPwN>t0|U z$Jq7cZx1dKpVALm6~X)Vxv zZ)}Ic95~_P-ZeQvHKH8ysp%@BwVLL(^5S*%UY5dUG6p>Vde3zU^8Vrqisgj!j$Q;*~BW z8;!Wr+8ARq=aFm>DtQIH+x!3NYv@_+i6!D$pC7ms3sA7rM4wW`T_aHGv>hk7mzy~C ztXmaNzV>3g@9y_d;N_^qwb2Mbu$`5=gkQN6U9UzX+``e(0dy={;^0$H$FKa_uVW~6 z0(UTzaq7`0;*PhzErkxx_rwq!km0@o#LcU4(EWOR z`V&7Nzw}4HjUFio2=0OBn0Y?c!&rk(&?HeN7FgU(A~lG?1&D^Jk;!zLuSPc()RF+k zxXqrfoup+%Co2qK4LWNR!{c%A$g}Z@4}CE9accS0r+&q8eIqRZi~?0&xEUz@^x}^g zDH(A|#0u1&K0R^QK}f0xs;{#_!c&$IuC^8eOQfYT_VNrNVu5R|huvHh>6EjPHR3s- zl{|C6@BkcfV`J-}xB?NEoN|$G1^p3G&$Dq)gX9}1PXiJWQY99p>Ie_o4$5^gc!?NH zwp)bYW#3$w0-nU0mXa>;H63uW$=|xVA-3$?8h`TVe;B`f@267ajZ3`)v2QKzI1o2p zxNsqDE~>^Ar#|#`-C)3E#0iJPjnTjq7W{Qs^j5I(gEmsV)}NDelNbAn>Ju!kGB)kh zMh+ylGq+b{e*XN~m`0@e-~ajxNnyNo?V7lb1%SXhxh!)5ib%Zt?z?_kPc7q->-N*j zadAPVMMa~AhjHTuvEexQd2Iosa+V-?MSODXE!R(xpTv7k z8Oi0}e%dxu-U!TN{l4pW=ge`iOv}#*)lcu`_kCuY{q21bvnl^hKlqdTZM!Yk&A@vZ zUff`;*Y|Cc^_VZW-S(KQ&oX?TH-X$1@8$M5PPWG@r`!hbxv80_z*XWTNODtf3@p#G zeV+T1%aG&)r2PBFMJ1^(<|)pf=7>I;>`S3Ph0R4BRqk@hl`hPy?UOoLq5fs^`@Yj; zdu^wjp=4Of+BNz7x##g&h~BiKG$Y@2gYY+QSeG`LG#=_q0)uai1=5c(jG7YR2{9}| zqlXnYTn}8s;MuQ!^{a_X;`+P|RV7su&Uax^+}e)hA@KS55{Jf?xc&Cq;lvH3zB_i# zm40ncoIF(#Yxha{)O=}drREcNxHa)l*{ps>a4s7^=R%dsFs8YMO?})+P zrTEfc{|zV0O)<4$SJaJxLmHU{hM;}}ZhT77SFMEj9=IIy=T0L4L+5px11N1@nre`$G~+pxPqEP z242M)8@NJX7YLTbS!FsI>NFk_4qD9X+qDM5ZqYert!6igb6UaO)kyly%SnV;sI$UWOaUxVR^ps;IXHi}^@y;B98cb;n zVHUZL$OX*88D~FE{Y*K2_(%9QUxs_jcWrt}%n9qZ!~2eveNqS3v6eV>y;+6_ZQrph ziBt1QlqE4YW246a=TDrmckkZxzR#`KPm}F)e7#K8X?d3GJ#m)btuwbT<2mcItUTY= z<-Lr*a(U*-{jhA`&;7SPpW9z?jIe3HtnWwD2?)}T);2tz)ZlGkEp!fsb>tsFx4sI= zt&)^Yn>NJZBS%t5>!U}H#?K-3aUH80uOE9O0xqyNET5jTHM9T2T+^mVddOrDi)rXR ziF*%q)&WT1x(dP(iN@}|dy+~`Z|{Y4aFpn-Zz{nCiJ(>BKRp07Kx``=QgTqr8tun6 zXveO0Xod4I%%GJZkOzs-l@17EYhZg6I%oRwdHlqe;4<_=+_3*mcsgi_^Ke{e8{1;* z)>g_R(8L(ON3g%aqty&{Smj@T>O1kh=N^nL+jqt3%iXbD%O;QBs2jBLzE|M%$(3CI zu{S^^U+x)(-3xWx)D9I~7i)Iyi&HPX5_jEnAf5(+wr$)B*AqmBNM^^{jq%w155#-k z_hZpqUxrfo1;AV5pDUdHvXiaW+nR1b;gl$TxP*JYg{Og&I_H%Ckjk0|Odah#&oXnwYr*K8Zh{5TDI76ps5;nEm6g?1(AXcto zF)I=-gS$6@s|Y#M)nUzWzM62UBavLf0xZP~LM4Fd zA~CsO1sWHTi$;X7m`-GDV06?|ojh)Ht0q;0KKQXVwp{H2JTQj3;04;SJEBU1&;YdeAbbP1?%#6 zAMle2C&wd?k)P%%g_|#O^7kZTEr-JQoImeRa-a~YWwA0h6W7(li0{KsPvh)&QzB%+ z1V5~+uo?KfIHfY_XGYW#jUqLZV<7SsA=>uTPS%=;)63_!x0ulMx9zpOj9_z{9Fts* zpY|^kJl2uh=DYrObFn<{J6GPbPM?eDEYEu;>oTQHk!RLv-r{-idCuo^%a&7+`(nTS z?lb%3*!aG6`MWszu6_9bOL=U3Za(vS<=;wHIMa`Y4Hlc-IH;rfNG#yIDmcikMvj=mUMw?XKEGnWv}`ktOa>`U?! z3NcXwaWU3k;7EFJ9#tskhQjSaWp54ZN-%t`8~$M*SS{l-4FiIS+n!{a3LboF}CMs?A9VtA60VWLVsUJNWHd zDNgoXoM3w$?@T;OFxg)TBIm<=mf<19H6kpF8_e%_*K@`}mhX4VbWgK({J}kAC)v}(d-YzTv1u*z)A^o@i8F5KV%u%RG#N~d2EqUp8e#I($xec2^rn5L3Wk~LO1pOL zh7KWe8Z=WQL}V@Wq2oA)l&KHqR1Ir&+qNC(a@WKQPd<$#AW%6#LIM5ap70WO^tj&!42;OR;s|t#M_7z2NlGQ$P<>XYH-hDKVo;wv7O2z~}<~Frp z@H9M#I2o&59Qd!_uq`&XcA^x_K+cm1;#<{rC zdp`c;H~&*H+(0-M#4~9TGs_w9{4_0H<&^kc_av$txEbn&pqzS2K@6qk=nAtfln|(3 z0s_}X-llwi2_+8!+vr{QW! z>#DkyL`fixIZhml{ zUAI5_=Fbxzww<+d~`wxu~e~wIeYGw`DE9=_G`;#!WiF%)vMt z;tGq!!^I4UnqLKCnuV_W8j%rz+iBaZ*ObT0-^J~;4wFQ?n^yM2=w=}TElwVCEHjM-l#lH- zIbL4N?AAWdSH5o^+b8o>H(JSGD5RVOtm`)?Icx%({)QzAr#O@@vqsaHz@byeUl&x5 zJn~4Iw-yfjrNHh7-~V>T579Ah1chJq!+hUOMc7p5aSqPNcfR{j+tFvyy!+knj=k6JjgzQsJ@ohwFyz2cvmTKsC*OG)4X$@^#MbTGAW9@% z3Y+O#4w%(!IJ1-Uu?Bs)&FePhE~U?jdHhgLBcY*R>QNd7a(qOXLT8j1<<&JD#HKo; zuXi+V*t02)A*%fD=O0Df&D`y|8Qsl(`U0%3;9e0mr?D9r9n?2@@<`nK;~V2=|Mf05 zt?_7Y+R7oIEH-buAxhdFjXU3bTddw(h)CqTE9#e1W0H8(lZXUGZ4-pZL>s=M+2~dc z;J1|UC(e=qpg4Oa|^X>x~mxzPRV_xy%06xvd2buV^otEdPM6UHXUS8JW z`{F6vs7D9OFrUwDk3_AX;yc&0gtX<`7TaLC)}0B`j6bZ$@0ROWic`(+Z}FYwne0n$ zTf!NXXMNtwm+wee3jaTv8p`nla^?^|M@HkGyRT2}uY~}A{`r?t`)MPRAn?Z=zxmEP z!f09ST!`<-fQv~~Ch?Mlw7hNY)`Yh_;4QeP@5K*12P^w9iaR>}!dDYwxDRhX)iv%~ zr5u{ypT>9+zxk`zHlgm&N>HZm)Gv*_lsvUz5Zwu0k^y$xEw?0>YZLgJEkW&IU>UcT zz;oZgMGjxpctlv07(LDCmJc(=s<>>})SP_Lwl-grJS+A0^WzsdT<0;y)%d%|T!Do}xV!5XuqJ|-X`b|!;Y>Ku;)fI|jMeD|CQ%^}m`Wf}(mx2q1Z@2BnH!K?G-iM>g8(I` zO*hRIVs~Rp7!N%2QvBRcz9W_4A2;cLDdh#4tWU4j34}`_ByL;!q5$$9Y&H{!tpN9)C@6-1O4 z3P^s_md$KbYwifO&2`u0|w!Whdn9qFIQ)k+gMDRu9p9peZ)k*%p zl=58KF6Y7I93=Q)EF|1)V@8rbvmY5Y%;#^*@p9aXi9!iMf7?b8rSEz9p5=O9__J>N zY<}C4>oHI6vu*QPVQvaOY8?m5w+()GJmhq^VF(YFYgyh;V@4aT+d55_pP#!K_{`16 z%Vd4_-SUc)_bt=QvivmpX?r=PrMj&@w?F64zpcyXxeVX;x7QNBF_$4QG(u3!Z2yw@ zjF5@`)}i>rk35X1SqJm$sBS6VcK2Hn!P?VvjjlPjkBkF+0Y8A zA%oZ)?B04ExS%v{IdDT@!@6NdE{d*XLP9mbgl|}5RQCNK~ zQjF0-<_}$Y`rJQ2z#SM2x-RRv&=0Jxg<(U;+jG6~l`sE28g#3H7yZu`aCja&+nM0% z>J8_~WZQ*Be@OsHIF|T_%l!%nE5H~(e8)0;$K-e6Kb6I^43B=Qy5e)|H95C*r|=Gy zm7ogZS>N|fa&v8m$?{SYc-QZiXFi|jI#R}~dGo#encHce+;8i$Jw7Xbp1=F~FD1+L zGP#CbN3K`#zH8ij!o4`eK1x`+-u<14K=FzDhWW%18P~aHY?Cy=2hT;G@2v`p8FM6qS~u7t9Ad`J9c9>058x8ot9Yujw6M6~y9i* ztjq7V$MS89Wm|V~+Ol(R96oj`cJJC62M@oNq%arH_2b@h9n6{5c=XXH;^w4>JQI6S z2|fJMa~Sv;_yHybQ_+v!?1c;6NkTD!`zs|C9;Q7gTKDcXds1JnyY|M|uzoYR>3mWr z)Ih5OCYNEUXTcq>A3YQAxaTdbkIpFDTriAG#6D7G)e}^kbbfU$>H)448>T)C{5r6o z(Ie7^joa|-(~Y_hbBJ+cTU!UZy+|XF8r*c#P4Uu8hhhln>Xyyxp_7)7+IJ@Ww`c4A z=sGco&t!tnpsWA3yKiF;=kPp(JCH^Y*GZIuOV%|<>*h_#7^MW!b)zS12s{*3qhSGe zCJ>Kp1P>S{cJe|)4WY$a2<1A7GX6NOpHLuY$<}~a$0ksgM_epEQuN8WAg$CqkvQv015#~&jkX9Kw{EazQ2cHg$u;fEkuec zO4gB6F;M02g{A2JXsv}$R&-j_eyUq4QEEAPv1XBrz?ulttB6G-Ad_X8?4yg08>x*F zxSp0B2RAX>p#GNS9q6dd#fz`L%pAj|2T3%tfQEsC;?&mC9y@pJ#>sgn#w>?o@4mfoNeurAcLoui z>IEW$F`OwoE`Fy+5SRu1>p2#7CZ-$*^@Z(@8(~^Gkvxm zxb1deZa6K{OP4tLF$T`Tl?e>W(nbl91~Hrv5#uTHaSWD#J;ff?5WjLrXW{6WCmA*R z3D#CuIn5(&b(3{|{Ov)23`NKaL=9}E_qp%bdL`Fd43r$13`51^mJy!wluz$zo+!h5 zL~@Rc&n(;ey)qFgGW2&bfhR&WugKMT&#-9yxn0)bdybXQt>5H#FWZ&ij{CXnoX@%~ zOJwXk`rP_V8P0syaaIgy9)J5ze%E}Cr_cP%?I_+1%#-0b6<+kmXSOl7Ge0uF$?d@U z{B57DKR@$%y3hOyVF?F33%N=)s3moAq*X5xuRS`N@xi zgS0wUb*T!+-rLjW=-4<%ruKH+CLxLV!4G~Aci(+i96^6gqSoiuD@RIVSfW`AV2w^! zA?}AMha~F~B6sUYeFr=%C&g$u8ZSu*tYVX&!aZ?cFV~GPci|Z*3sRo#r8R1c5wm$aXxfnnF^Ebp8BJX9G782Vd1iEQPGU8@8H+-4#MMOA!kwdDuk@W^1 z5=U#@E}Vw3 zC*ry9AB(rX=ikJ-%{$`ssV@51PNXU~(;hgqsC#hW5MG<$IIB)Dg`QANO)GQ6VRo?> zs6_aOfrcEAh#2 zmGG5HQ z8)FXXkpY-wRJP)ewjCFm(@2_Lg81%egLvjpJB~zP74E25~HdL`x8d&x#Z=&}m2X)iZiIE}cFRtFPOR%N2+O5Z?-fK@G@sb`fsN0^$-P zCRLZgeXB>cU>+SN7DgqyKXoA4C0snMzytOq$<`xeB3j1cmB0#R5YHPo;>(UuuGMr% zgqlRjS0~mo1P}qrlsK?1R1u=OArKk@KBcEcTLQ zTnye{0su?`LRLp`VQAg#Le$TzdHtReo$yreyI$UR|Mk1&`{`mc`Q7?_-_P8B@0++w zSro>VrZo4IpXc1)*6Wq#nrDuUzeS!IA)C+kI-VwBzu)VSA51;3G^1gYkQ$oy7@7YK5_}%3F z;$$CkGOy45H2FQxZ@!oF`dJuD^SQ1H%seN>lk$BZdt6WqG*l&O9J82B+ zFnF@8_rCjG5Mb(U!a)S)bvIWACqm=SwX4@8u8w|_wSC%;%naE^!P!;HN&ICpj}W34=kLQj)}haxvwsI0r`F(M`@W9sttVu-Y}96i!tcx`KE&m>MXLo9~>94}EM;3|xeOAecxs3=ehc#c3sQv5%iT1=2)KfVKtY zFCgkR7>vfKy0#K_3{WDzFn~ZBJN6(gs~cMv;_SJL@y)Luj$7ZdCT_cP4+q$e82kU~ zI=A1tk0JnXY{$n*Y^Qb-JGOJN8=DlGv3=QCyw1*?D%fS*JFq8o0AELsH}9(@3xoO*`3+h+1XiKdbI$@ zlg0KjH$KOTB9lGllf&1zKZ%Lh4m=ECLb0;A7Fy<|dF(&I|DMk7av!rd?PXn-UuW!j zj3D2;zfukl9^ybBY;hml;&2|!R}OU7qb=Z+#AxY7U8}0E_bwV(5My@Hq|OeRBxEB)~}z^fhto%_Ujyr#J6X2!#I_>k_alm%WpbsG0opP`NI23NJVT_Ei$6YB>L?vbwMUUC9E zZM{Bd+BrOYBkI)O-(L<7^aXxrSgAO~eJh@XrZ^1&)q1l%avH(lmx+zU4X2UheBI_=qh#**vq3t?L@hcLj#N z$Wn{G-DbDgEs8T{cR8-JIjW!29d0&OOXpx8K4F*3L<@$xY__Vx)OK)kg6^AkVVij5 z#F29CH)l&@KTAK_C$ckDt=&zBi!=gaFay~B4^g?i850xwo$)=wH8uxuAB2r?=;0V19MKZ? zXK2JA{3*Nz=!-WP0R3t9(G+JwYqR4r$udhPXkE|}F94$^E1u-jg7J8?J+r?hX0Q^C zxHNx{#uX3ZNWAJ2%b&ujj7?b7ju-;>;@qaU3lrav!eO?J`B%BB$Fizn7DGuyge)npB zGH=uA@Y;MW$3eq)8O%d`Wx2v3v$iaM2EW-x8BCL9q%X$o;|X_OGmTgACVYm(aXdVI zUUwylka4zbGigxG6ph{JsXg-pcaDn+J>NYjX)|0pliJ8F&rJVX^L;3!X`pfuDH$<^4+`+NfD|5gJ+`zjJ8@Y=YFP8Uy@yl}I!pG&^AHM}1 zu*rqCcmmxuW1qg=jjZ6@sD5m3Nv!)NTud`B6*K93o|Bz$*4ul%!5WMA@X+hxD>%0u*H>B0V+v>)Hd zL|$Bh4|;oAFUymEh!=nI zMz6*dCesVE^daqdHBNdk(C*cDrm;Nf&$f}5rQm2j!epKbyYf)uG>G-euU z&UDtv``{hqE4=0HIXV#;zVLMvWiRsu#{n5u)SkW0` zf(V^9u@X+-Ub=HT1b9zoo5zq_0r19+8_>xtueYiCff3{^4w&xxdy^4(1+SU;`Xl6s0CxLF__qDILKNKLNw@2VBJIXSf zLfgr24s$~H32bgmVn4gT{Og}rD7RWpeGOZBcve#rJN8>!**#3;9jIv6k#@&9WBFG< zeZNe>JbwMR^JN_kf(p|8yVzL8a*Eok-~I{4&7c6^FKz7jZa@>DyMijh=^}?7GoLCUxG3So6q%O8~7JP z3gvDrTftj`N7PA}`p=~zp~=*~(}8w3W&{%TrAwFUvneCDZiH(Mg_<@TnJ+Wb5?7Yl zN++LT`Cp>niDrFvie+UcMheOvi7VXJL+A0WFzDFb3Ou%jLZo%|-W{;**dSUzO$%fO z580htLCCnpEK)|+h|sN_pg7Tf@CD+8Ei3nylgvoLRnrLH8QNGykjd%a*8IhL2=(Av zH#hF)USlV;xXd!=0IRQeYSk#`rSOe7Y5%OgxP1WezQ#D`fMDRzSJ=I&bs>Z zeZps1zVlgzZJ7=(2HVFrH!tHEOzY45EGq{Hlw-$^F+fhogut@Jr$0~`1A%pOfUFPID&`-J2*M~1ni{cNXLW)( z9W>rmu3Y-8eDaqYW&7;4QhnpSvNbbamd8FVO<#ExI(@k`%zPT&2{vZ7m*cN-%;OIa zmBmMxx409(!m-zSSiyFb-a)(3SJ1L*CUEs1*Wl@U;WG+qYGD_^l}q?)gFGCiW}0I= z>}FYia&i;_ok=GL=d4#XJ416rzg~UNSw27a`*QqCr^^e++p)pDSGGFnSF8k7R;SCu ze}6#y(`8`r2%A4{vTDMZ{8;kqAvd>y{txD)$+-gt)IM3;ZUAnurJG}EXR6!Z=P9R@&MzThe4V$ zA1A@am#;YSb!@T>BWj?OPnBKI)S|56bUMUTX1GgtR?eop=MSKb>cSdfr zS7^DM`06QSiKcSq%$d@I068{38hCJ1XjMO~eH@U%7`})ZfOT=z#}hsEZ(U)mo14e) zGm~JCI@ZnH;Ls6p)D9224egAScYna%5>DURk7o76E3ZcR)4;N)b0206BX}s7i8{K9 zHHMJeiQ7JLZ2jfq)0i6czt~x>{`Cq1>~4;HKTaNyGOI0>ZIyBlvs8UP&&)2CgSg9U z#_rY)@`HHCYQrL+rKz>tAAeYGjr<{SGs5`piFf}26#$uDqc6Wy00000NkvXXu0mjf DUU1h& literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/drop-down-triangle-dark.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/drop-down-triangle-dark.png new file mode 100755 index 0000000000000000000000000000000000000000..9af2042ab80f7860305fc89a0c9ad89ad41bd8aa GIT binary patch literal 1091 zcmbVL&rj1(9Pa{CLIgRY@$f8((S)r(wzXZe!G3gu28LuTaX0DO2P>>UXy07n;?Tsz ziyrh3FnaK&7vsf)7$t!iuSPk0AYRmyL=E`5ALxN#V$=4$_kG{b=llEi?99YK|Ji0y#G49!lx(pGhz(w6ml3!lDB!R9a$t$q}U9hvTs!y&taBgj; zq^>Qiag7`w0|`&W1O`M3@Qj-2ie8dz@rrowizyPcRM2vgY&%sh%z~`tKoAQ@LMqKL zfaAhUG{$kvC}3%ZrD*(eAtoxuIFaQ+=OM8*M_Uk!QodsgpOR!1AzP%VMxzmKM8cM{ zNHOtv+~;7~5Y`B}t0q#skm-(e86@bcj&38}GJ(&iRIEBmlGxLB2!>rK91@#uCs8C`wJT z)VcvpBuhyW--IV3p}5X zFieh(b5dRq(lpBm`AjZDcd@eRBE?i;*RGE3cCh@hSTXBB1zAqXvTEH9n5|mKa;ugN zvU41`SWr~m^aYpv0=46nprc=dTHdh?(8{o=AK}5jBX481|H&GKouT~p_^VyIBHV-i z_OSW!;c$GQiD$;a!||(r?;Rej6c5 z4i2v0dNgs@34Hw7{BTYleDl3`X@9eMvN=Em9-M!e`h05WZQvUO&x1?*TPcEmHJsXf wx_XR86YxWr?#Ix9+UjBmUA=Glg#{$-zJh-9RL6T literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/drop-down-triangle.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/drop-down-triangle.png new file mode 100755 index 0000000000000000000000000000000000000000..cb1c968e10703f7ee0028092736559e73ca4c261 GIT binary patch literal 2892 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 + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + eJzsvemOJMmRJvgE9g6+PxogB1NBU1PTw7iDBcLj6OEM2V0g2ceiMSgks6LJnM6jkJVFLvfpV75P +RFTV3D2yIo8iie0KrcoIF1dTM9NDVI5PRP/u//jyN19cf/3mdw9fxKv5MP3d3928fXj27s3bnx9I +Pfzi5cvvvn33FqSf/Pqnh5CvZql0/Yv6lVX854e337548/rn/Ooqypf3uPonv/j22e8eXr58OPzy +2euv3/3h2cuHtz89/OSn8v1vX7x7+SA1/vDs1e++e/v7h7dX3/7x9z/1W0tbt8/eyffrz5afhXhY +fj7Hw5e/wtfPXv/x2bffvvh/H3CzWHGv45vvXn/94vXvj2/+HyEevojrIW6HL4p89d9f/Prh2/d8 +f/vm+XevHl6/+/Ltm+cP33578+blm7ff/vxw8+dnrw+/evZ7+ebZ4f+WN3jzp8Px5bPn/zHJW6ev +7l+8fJAXfPXs3SEs6IvrX4Tlq+N3L15+/Q/fvfrdg7x63kiOX7HJf/pW2pJm8TfI5atfvBLKbx7e +vZPnkhuiP3/998fxMYTI8pN/+/XD71+w+6Vb/tdPrdm3b7559eztf+DawxfrfJD/7I6/fXj1zUvp +Pb7uMl+lwxf8t/9p9eQtWOeLJVfplZIPca6HmKp+3/vm4Y8vHv7088M/vHn9oB1w/fbdb3QI1nWe +9V/95tffyRj/0+sX7+TBMkib9sCv3nz98FLqt+vvXz7ji7OE/q9W+O0zmRPvZOzevPzuHWdW9TtI +D//y2Z8fMExBb/CP3zy8/u2bf+YzfrEEaWfZrrbDssobhWVbD6Gy/QWPus3tnqH/q02jITTj7WOG +fCnj9I9vX/z+xeuffxGr9HVcZh3Cv3/74us+guFQ7X9p/KoO/2/+vz6tvPi7dw+v7ell3tz8apgH +89WvfiN3vXv99c2bV+j9bzHBZQK8lrnx8s3v9bv2N7+Ry7/7Rt+An7+Sgfry7YvXaHP6B35Tv/ry +5Xfy1d+/ffPdN794/e9vpp/o0v7nh+eyfmUsvz784+/+t3yQ9cm5efjt22fPpQH53OpcPXvxzU/f +25y83NuHg34pV/Kj//7+q28f/l1WVb9cqXev//jw8s03Q7ONIlzl8C/P3n7z/U1/+fLZ62dvD6S3 +ln/54o/yzTPpqd52pz2hUZkl30jn8BJWObnBeyoMXz3hRs/e/UEY0MPrr79tbevH/YMr7fvb+81z +zMG3h+Pb7779w+G3b968bM3uv2qtG5lU1P/buMeXvOD1P77WDjq/k1U4vZPwn7+5u0jtx+8gX/4t +t37z7OXLF79/++ybP7x4fukGF75vd9LvPmRi/fnV7968fPHtqz6fBsqXz96+e/H85cNv/vztu4dX +Tx7cw93XL4TJPbKM31vnN3969u75H3754ndvn7198fDe1YcB+PcXr7+Wuf+b7168e+gd9ObVN5BS +Dr/5w7NvHvga7/5wz5q/aQ2mr4T1j8z9iy/ew/VDPhxfD9///dtnX7+QDUWErr9/8/Lrh9eHX4O9 +T7tPsn2Vw/Hr6d+m2UpgWQ9/99Xx7fTfpvn0J5yUZSjRymol8X8vGf9P8msspZU6b7tyPZSjlBsr +t0O5m++n+d7L7sHGn2UocSjrriQtE3+VkKUU/q5D2XblOhxbuWnlGG6l+KfbST7ckXQb7scydh0f +zn/iUNahpCWjTPprKUOpyyZF/70eylHL9H9dGsvHRjPuxnMdRrWPrZSpDe86DLKO6ji6VQp+Y1Tr +bny3YYTl38mG2gf72IZZf2OU78bRln/1Z7441su0G+go44rfGFmMcWapHOVyMsLXVvZjK2OJX3cs +tyej6DeNHMM+Zig6SD5kmw2WDNBkY4SxurFyy3Jn5R7FVxZeZhzLwFFareMrO/TIRXLPvln48pmv +t/FVbvnEwZ4wc8rII0y8L+6zxBjXmGMRZWuLRym38V5GO6xxXde0lrWu23q9Htfb9W69l45cUkxr +yqmkLV2nY7pJd+l+kgcKMkvXnHLONW/5Oh/zTb7N9zIXgnTDWlLJpZatHMtNuS33Mk9CXepaU821 +1K1e12O9rXf1XubLMm1xWzdpZ6vbth23m+1uu5dJE67j9XqdrvN1vd6ur6+PUm6ub6/vOJMWeYH1 +mI7lWI+bfHU83hzvjvcyu8LE3o436026kQe42W6ub443Nze3N/cy2QJHYb1Nt/lWHu623m63x9ub +27vb+7tZxiXerXf5rtzVu+1O7nV3c3c73d3d3WNG3EuH3ad7edN7efb7aylyy3u58v7kR8ZyltFs +n++GcjuUm6Ecd+V6KJuXSf6pQylDybuShrIOJQ5FJuB0v7QysrDOfOfx0e/Gn9tdudEy8ddxKNdD +2XalDqUMJQ8lTXeplXVX4lCWoYShzGPRLp+s78enH39uhnLUwpW5G8f96O3HzEdrP0T7YZGhmIbR +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 + + + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_dark.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_dark.svg new file mode 100755 index 0000000..e698e19 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_dark.svg @@ -0,0 +1,1935 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzsvemSJLmRJvgE9g6+P1qEHJkKGgCDAcYdWZHwOHo4Q3aXkOxjpWWkJJkVTeZ0HiVZWeRyn371 ++1QVgLl7ZEUeRVK2K1CVEa4Og5nhUOjxqeLv/o8vf/PF9ddvfvfwRbqaD9Pf/d3N24dn7968/fmB +1MMvXr787tt3b0H6ya9/egjr1SyVrn9Rv7KK//zw9tsXb17/nF9dJfnyHlf/5BffPvvdw8uXD4df +Pnv99bs/PHv58Panh5/8VL7/7Yt3Lx+kxh+evfrdd29///D26ts//v6nfmtp6/bZO/l++Vn8WUiH ++PM5Hr78Fb5+9vqPz7799sX/+4CbpYp7Hd989/rrF69/f3zz/wjx8EXKh7Qdvijy1X9/8euHb9/z +/e2b59+9enj97su3b54/fPvtzZuXb95++/PDzZ+fvT786tnv5Ztnh/9b3uDNnw7Hl8+e/8ckb52/ +un/x8kFe8NWzd4cQ0RfXvwjxq+N3L15+/Q/fvfrdg7z6upGcvmKT//SttCXN4m+Qy1e/eCWU3zy8 +eyfPJTdEf/7674/jYwiR5Sf/9uuH379g90u3/K+fWrNv33zz6tnb/8C1hy+W+SD/2R1/+/Dqm5fS +e3zdOF/lwxf8t/9p9eQtWOeLuFbplbIe0lwPKVf9vvfNwx9fPPzp54d/ePP6QTvg+u273+gQLMs8 +67/6za+/kzH+p9cv3smDrSBt2gO/evP1w0up366/f/mML84S+r9a4bfPZE68k7F78/K7d5xZ1e8g +PfzLZ39+wDAFvcE/fvPw+rdv/pnP+EUM0k7crrZDXOSNQtyWQ6hsP+JRt7ndM/R/tWk0hGa8fcyQ +L2Wc/vHti9+/eP3zL1KVvk5x1iH8+7cvvu4jGA7V/pfGr+rw/+b/69PKi7979/Danl7mzc2vhnkw +X/3qN3LXu9df37x5hd7/FhNcJsBrmRsv3/xev2t/8xu5/Ltv9A34+SsZqC/fvniNNqd/4Df1qy9f +fidf/f3bN99984vX//5m+oku7X9+eC7rV8by68M//u5/ywdZn5ybh9++ffZcGpDPrc7Vsxff/PS9 +zcnLvX046JdyJT/67++/+vbh32VV9cuVevf6jw8v33wzNNsowlUO//Ls7Tff3/SXL5+9fvb2QHpr ++Zcv/ijfPJOe6m132hMalVnyjXQOL2GVkxu8p8Lw1RNu9OzdH4QBPbz++tvWtn7cP7jSvr+93zzH +HHx7OL797ts/HH775s3L1uz+q9a6kUlF/b+Ne3zJC17/42vtoPM7WYXTOwn/+Zu7i9R+/A7y5d9y +6zfPXr588fu3z775w4vnl25w4ft2J/3uQybWn1/97s3LF9++6vNpoHz57O27F89fPvzmz9++e3j1 +5ME93H39QpjcI8v4vXV+86dn757/4Zcvfvf22dsXD+9dfRiAf3/x+muZ+7/57sW7h95Bb159Aynl +8Js/PPvmga/x7g/3rPmb1mD+Slj/yNy/+OI9XD+sh+Pr4fu/f/vs6xeyoYjQ9fdvXn798Prwa7D3 +afdJtq9yOH49/ds0Wwksy+Hvvjq+nf7bNJ/+hJMSh5KsLFYy//ey4v9Jfo2ltFLnbVeuh3KUcmPl +dih38/0033vZPdj4E4eShrLsStYy8VcJq5TC33Uo265ch2MrN60cw60U/3Q7yYc7km7D/VjGruPD ++U8ayjKUHFeUSX/FMpQaNyn67/VQjlqm/+vSWD42mmk3nsswqn1spUxteJdhkHVUx9GtUvAbo1p3 +47sNIyz/TjbUPtjHNsz6G6N8N462/Ks/88WxjtNuoJOMK35jZDHGK0vlKJeTEb62sh9bGUv8umO5 +PRlFv2niGPYxQ9FB8iHbbLBkgCYbI4zVjZVbljsr9yi+svAy41gGjtJiHV/ZoUcuknv2TeTLr3y9 +ja9yyycO9oQrp4w8wsT74j4xpbSkNRVRtrZ0lHKb7mW0w5KWZclLWeqyLdfLcbld7pZ76ciYU17y +mkve8nU+5pt8l+8neaAgs3RZ87qudd3W6/W43qy3673MhSDdsJRc1lLLVo7lptyWe5knoca61FzX +WupWr+ux3ta7ei/zJU5b2pZN2tnqtm3H7Wa72+5l0oTrdL1c5+v1ul5v19fXRyk317fXd5xJUV5g +OeZjOdbjJl8djzfHu+O9zK4wsbfTzXKTb+QBbrab65vjzc3N7c29TLbAUVhu8+16Kw93W2+32+Pt +ze3d7f3dLOOS7pa79a7c1bvtTu51d3N3O93d3d1jRtxLh93ne3nTe3n2+2spcst7ufL+5EfGcpbR +bJ/vhnI7lJuhHHfleiibl0n+qUMpQ1l3JQ9lGUoaikzA6T62MrKwznzn8dHvxp/bXbnRMvHXcSjX +Q9l2pQ6lDGUdSp7ucivLrqShxKGEocxj0S6frO/Hpx9/boZy1MKVuRvH/ejtx8xHaz9E+2GRoZiG +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 +5+8WHNujgn37Jvf02foBF49O17EtRgdL6PPOr2X3eTnApGRT1pjj5tvyKZydOhfd8sG4HeMKh/VO +7013OIJF5f3+3OsnvTc1vMU23l1vVJ8w217gxTs3bjan2vPDR86ahVpD/2JkTVDjJsJv+qe1Z/an +yOaVZeNGuLhUMMvf2+8wpQ+OD548yfVhiTMCf1R/efbHf3725Y9ffXK/+fLzb9I/Pqvvfz14fP76 +i1e9333z6Hef3/3koNNsDP9gvv/rQ/P7L77+/vGfn6q/fHH0r0+efj24bGWPHsqn+R2h1O+TZHj4 +8+Grz5M/fH3/340/ff3l5xfDr4d/k/f27nx9/+h3Ay70zWj/1V//fvT1l6o8Puh89efWYaPxyaup +po7a/4D2ssNHd77I/vvx6PDnn/bVf9c/f3DePxrC4I5ef/Zn8/vLR4fqDz/u/9z95Me9O4dnyTen +M5H9ISvOsh/+/s9/PfjuoPHD/Ebjcl/89PWXbx799PUXw8b5Z4ef37l8dPdx+2zvDjHr0f+cPLs8 +PPvpx2y/+3X35Rdn+69HB6+z/xZj7PifPx62xNF/vv7yL5/8aPFAl4cH/3717z58+uN/Dp+0n/xu +v57//IcHx/Xf92wfXjbbl3t3ip/vftZ62NJ/v3vwWp3c//LBnfSPn+1/+/n/fPb1wSffPzooL//0 +5x+++f3r+61W8w1+6nz28OzotW1ZJPea2aDzh//5ovPvb9r73Tt/+aQ++Oxflw+Ojv/4H+z/p1/f +/+Z1unfH3P/hp68f9FqfnH/21dP797Lzf33VybJ7w7P0waD1RHz25gvhMbYOvxn+AGzLPimzH9Ok +/UXn4F4Txlc8/epu/fNyv5s9P7cU/OPoztcHT778/Y8PPy/0EMblyT/N7/+cHfT//dmXP7T/+YU8 +/f1PhPbPvTtA0J/Nn36PQ/JP86P5ew/59Of9N5+aupuaP7SPEvHT758e3mt++cdHv/vsvwfYisEf +/k1YqMjeneT0/z5R9PmzPz/60n368seHf7PFDz5/+D8WmfyHfAJT92Xy2Z///PBzefiXV185PD9+ +9eX99s/f/ptG0ncY8D3b164VKLT/je/AT6ED4u5XL7BQqQimf7d/eEKsPiyHf1Hmv83PrQffHf78 +2eHZvb/952Gz+ckf9s3p938vnt95+f2DZwf7zw/Pjjv/+fo/P33xau/O/2/vy7fTZ3IFn4B3CPsO +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 +wknerg== + + + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_light.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_light.svg new file mode 100755 index 0000000..27a1290 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/hamburger_light.svg @@ -0,0 +1,1936 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzsvemOJMmRJvgE9g6+PxogB1NBU1PTw7iDBcLj6OEs2V1gsad70RgUklnRZG7nUcjKai736Ve+ +T0RU1dw9siKPIontCq3KCBdXUzPTQ1SOT0T/7n/78qsvrr958/uHL+LVfJj+7u9u3j48e/fm7S8P +pB5+9fLl99+9ewvSz37780PIV7NUuv5V/doq/s+Ht9+9ePP6l/zqKsqX97j6Z7/67tnvH16+fDj8 ++tnrb9798dnLh7c/P/zs5/L97168e/kgNf747NXvv3/7h4e3X7988Yc/vrt69uLnfn9p8PbZO6m0 +/mL5RYiH5ZfzevjyN/j62ev/ePbddy/+3wfcMVbc8Pjm+9ffvHj9h+Ob/0eIhy9iOsTt8EWRr/77 +i98+fPee72/fPP/+1cPrd1++ffP84bvvbt68fPP2u18ebv787PXhN8/+IN88O/xf8hpv/nQ4vnz2 +/N8nefX09f2Llw/ylq+evTuEBR1y/auwfH38/sXLb/7h+1e/f5D3zxvJ8Ws2+U/fSVvSLP4GuXz9 +q1dC+erh3Tt5LrkhOvW3f38cH0OILD/7198+/OEFx0C65X/93Jp9++bbV8/e/juuPXyxzgf5z+74 +u4dX376U3uPrLvNVOnzBf/ufVk/egnW+WHKVXin5EOd6iKnq971vHv7jxcOffnn4hzevH7QDrt++ ++0qHYF3nWf/Vb377vQz0P71+8U4eLIO0aQ/85s03Dy+lfrv+/uUzvjhL6P9qhd89k4nxTsbuzcvv +33F6Vb+D9PCvn/35AcMU9Ab/+O3D69+9+Z98xi+WIO0s29V2WFZ5o7Bs6yFUtr/gUbe53TP0f7Vp +NIRmvH3MkC9lnP7x7Ys/vHj9yy9ilb6Oy6xD+PdvX3zTRzAcqv0vjV/V4f/N/9enlRd/9+7htT29 +zJub3wzzYL76zVdy17vX39y8eYXe/w4TXCbAa5kbL9/8Qb9rf/Mbufz7b/UN+PlrGagv3754jTan +f+A39esvX34vX/392zfff/ur1//2ZvqZru//+fBcFrGM5TeHf/z9/y0fZJFybh5+9/bZc2lAPrc6 +skS//fl7m5OXe/tw0C/lSn703z989e3Dv8mq6pcr9e71fzy8fPPt0GyjCGs5/POzt9/+cNNfvnz2 ++tnbA+mt5V+/+A/55pn0VG+7057QqMySb6VzeAmrnNzgPRWGr55wo2fv/igM6OH1N9+1tvXj/sGV +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 +8xm/zlGv8eucwWv86lmK7Pe2LO38fNRjvM/gMp+zPUe9ruvrPfhZQyXmECh9Pt0czCFP+XQQTBeV +X8g9uB/ja3A/5nMZ56jXBZ8zeN0czHgDgcTXtuT9r09HPcbX4znm61Huo94P/cs98M25nts9V1/P ++MzV52245urLeM/Vl/nM1eeo11x9zuA1V59nfG+734b7qMd4n8FlPmd7vY/nur7egy9vzuvmXM/4 +cmT223A7Msf4cmSO+VzGOep1wecMXjfnPON72/023Ec9xtfjOebrUZ738XroX+7Bz589kMY+Fu2z +BxLml1fRmGL/5JZgtpEe4222IO99VJYurff8H8ZPHsi97fYq7qMe4+sMjvk623PU67q+3IO/+zR5 +pt7XfT2OwvX7x6W4zvQy3ld1mc8duI567tV1Bvd9PY7Cve12Ke6jHuPrDI75Ottz1Ou6vtyD7zJN +ntn3dWuPr3CdwvEqrpO9jPeFXeZzE66jntt1ncF9a4+vcG+7vYr7qMf4OoNjvs72HPW6ri/34O/+ +yp7PAJ/OKF+GgjC/Pu+OUhV7BMfYBQP5NBTgUPUZ76GAzSxSfX+IYfw0FNzb7s/7Pg== + + + 6jG+zuCYr7M9R72u68s9+M6LkdetPd/tdQrnC79O9jLeF3aZz024jnpu13UG96093+297f7C76Me +4+sMjvk623PU67q+3IPvuRh53dfz0V6/fz7v60wv431Vl/ncgeuo515dZ3Df1/PR3tvuz/s+6jG+ +zuCYr7M9R72u68s98NQOshASOJ/8niF8/ifnyQr3t5t1jC+X7JiPh3KOevky5wxefs/XE3M4ZHxx +73nY8mntwxPQttdq4hhfK49jPo74Oerlso8vnv3rdHCK/1yh1n/4+z9/BVr/U+Kv5e8Wf/Ud+xSE +PbFWvGF/xBj7/vTlaCcU+3cOFuLd7Vq9U/lSztyRGesLs+cDECu9zk7tkxFr8trO3GEz1u+jfnsf +tSn9/z4DG/fcscb4tO2Q0vt91GN8ncExX2d7jnpd15d78N3mDvz7p1tLb6J8OgX6HXyxr5O9jPeF +XeZzE66jntt1ncF9a5t1tu9tp4Rq76Me4+sMjvk623PU67q+3IPvMnewauPTfeVp50+vLC+wfHpl +L+N9VZf53IHrqOdeXWdw31f8RO3907bTUobXUY/xdQbHfJ3tOep1XV/uwXcLZKEyyqNnWSccwRaB +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 +3x/Wu/nN/nv9H/gN+An3OrCRH2jT/wGF4u/k + + + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..f61967700d751bb13dc94c3f5d756686f4cc6d08 GIT binary patch literal 1023 zcmaJ=PfXKL9BxGCLKtvRBc5IgA!u0t4A!w`6UN%X;!2jWgn81gePa!@ue5KjaGQzA zb~W)LM^7edj8{p-NQ_=gG+s2u1M#lhxasTIh6iWU_PzJZ_kF*=ua#d}3JqQvq$nzs zU6u-D9U|ZPV1WD+FP==0Wem$DyoxHgt~!uP>8K1r)>PMF0jm1;)_a(ssDTNiSi&VG zCu+!KR3F25rcKyHX5O<^Z3ALZhUxyLWn^_vPA$TK6p9ED>@*s^I2%^kPSmSse2m-^; zMg@VN1`&>rupD`XFh46s1u+r>orfmg9K9kIq)f*bIVI^T#P;i1=H@yT5hLIq+qP4+APm- zeo9@SqWm9fnmx3O3-C1Fe+s+BZ5y%$=%SjVk;YZVeOI=acA$!pQ$%R9Tg7}8VdPek z4brOum{L^DuzbVSHbYUwtmR_W(qL9f(nNzX3|))}nUoacxmac~#`AI{#i!=xWG&FY<8uF0~ zhVOkE%2n?_SlAnF{T^$+X&eV~)b8#~qZDjDZOnz5BjY#DoV`rl3SMlqHsAUeo65>7 K(zC_ecmDuM!$9=_ literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg2x.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg2x.png new file mode 100755 index 0000000000000000000000000000000000000000..57663ca70301a8d569f0d5664f6ad989615f7e91 GIT binary patch literal 1124 zcmaJ=U2F_d6rQ4sQtB_XLT*M=6?SH4yE|*gE}hQo>V#>U?S@7w%+B1lqvoeGw|3h2 z$rhm=2#F96NGg%^fmewL(moXN;6=iN_zQ`Mp9jHH-KlPQuqHQi&pkQcch0%zyF;xl zTPrJSDhPt8l$ym1-k1CKoB;keb$#27w`!DXM{QOo$}0{ec+JW|AQ?&*%s@r!?|lFh z1TnK#&$gp>c{`_C2Br8hlxNr&O%RDKo~@`o5P=-*(#<6K`Sx8B=vtE88I?n_Ex>NQ zdBA~f11(u~pht~sARJ=CbOLYPBN9*J=VtOhUJ|)R+glvwc z^Z7iLZ=fuvi)P~SxX%#|2XREu?KhF)1xgYDoEfe^RO3vy-NfKB3y9L9Z zrZwHEYr+>sdx}jnRLF0s7%0pC4>gSGXcuMRpL+jE>}LCINN1pH^*JgYT<01;mCXqb zRFLIlEo*=A7F)Y5WVzjz4TLrp)XR#ho4#Y+Btn)s$#juos!$S>B<7%WUE{)Rnipds zA(n26F-$7VGyKMlsSq#lsYptQ#fwOq9RuNgB43+eK8m|&MZPlKLE9~V;Nww zX-+R)3ty6N3agc_rKu#A#>LS7X#W~@(S`Nno72L@hiU0U6YJfEW)Ja}<#bBA_y^WIsnAA!+%1uuHOa?irCpI~%iM(_Np&%@{L z1D9-k7v{?km-SYSuU}eouzKHu@kF4mcIZsw$MUi749;NOd6GkO)`q=SRtG_HC`BckFb%~l-S?}VA z@bY2(*VexI*J>8b*jBhzaiU{c_Hv{( zJaZG%Q-e|yQz{EjrrH1%&GK|{45_&FW||?_VFMmlUBOES?Yj791Y~3`NO_&PSEYM( z&cqMrpJ={l{vk0>{+rsWt!;6V=i1-zs#_9gbh>!n{TD)yZWK(;oT9coZd#C3s*`5w z9wSA+y*kHMNU;`rxw)(g6ga*xIp&$s^qpr?^@?x4O*ykhDvoK6)zdklixv9LNbNc) vV|`uk^NtUumcQrE2O8vVEB<6Z12aR+ah1}3{ct;=D;Ydp{an^LB{Ts5ZI)sk literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-sprites2x.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/light-sprites2x.png new file mode 100755 index 0000000000000000000000000000000000000000..a70f5dc87dd7dfd8dd41e26a60084e0fb8971b63 GIT binary patch literal 5351 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 XIAcdL`d-4HOCl|>u3F_|TjYNL)~HE) literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/pop-up-triangle-dark.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/pop-up-triangle-dark.png new file mode 100755 index 0000000000000000000000000000000000000000..53e79bc9c7ad81ee43975b8e14c773156aa47f9a GIT binary patch literal 1153 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 DJHr79 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search-bg2x.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search-bg2x.png new file mode 100755 index 0000000000000000000000000000000000000000..f88648051e896f0715e97a2cf18da0ad54e30e94 GIT binary patch literal 1800 zcmaJ?X;2eq7!Ef?qeMUy6xL7?s5yZI0^v#m!667qD%g01WCgUPPC<2safG!s$qkL=9r1WpEk@#49CoPyk9~>(*WZ z!!a0}FBGCwB$c1Ql)_4q#NtEJDOD&Mg9(q+sU*@&5CPIaxdLJlMp{o30ELW2ND1as z_$oG-q2TG&pirMElIk<1p)x{b1Q4!cq6A71kpMbn7NlY7ScG@HOmuHClL^2(7bKHK zcrPlIp9HXBH3$Tg0*O)zl?u@5Bx+DFolad0&?rm({Nl|-?mH0j9a|G%qJ`O#a02*6Kz zrzF;h)~P_U0Mx)*wG?e!x{oE4ipf@k5(HL@U^r{Cib)wT0&6m06~GqK0YAP(s(>s8 z|91#JpBWEn5D6p&<2ft>%0W^nWK23OhR)?s=#1Ds{|or5-a@pyQGPZtiKbGys!9@=rM<0aHc~_%@{lqy}j(#utcuurP*KID# zm~%+=MERh93kkDB>&gE8X85i*P8x7hJaeo--n zr%y^J`xO_Pi+ID5`tlNqf8EOk#F*M`9}-m585ue2;nezf-1^~|6Q$kJ1tpj3S zo*T!@CU6$M#s0AD-f0sy39Fw6?ac(HuW~$;UD{lzG|WAo7w)m-j-9(hUAg*!=b$(4 zRS3RiInM{&q3Y>o{Iv1ap04JuOU_o^?&9*d#DR#$p@kvFyoWpFP1bV3#VgIL$1Xs_ z&SR#$L&J`h7xH@gD*M~ChUaF6m95tLta<;F>#H|KW`FgRf7@v~wO4vJGM6wG!!#^6 zkDB5P!#l)RN^4!pOnGgaPM?3Uw9{!Q?NrcSyM0cZ7acXu7`!~1yuxcvd)|De0cTDb zs*O@S@!f6QY<91Ib7iJ@v1rMt);hBcrldY72+@v^Ty7?|CRV+j0;#^wjK+HE;`KjoVFUJRo;-&gb3geZ7W|A=0a~dY^&;yHsS>2Rx&&uC8>OU z^T7FBY-0PmoCbOO7)R_K;IOQqYwamv+GCSk-+EtA=R1v2ShBvl^7rjL*teuKyEblr z%eK3t`(UG?f2saj7a?RM@;>g`9UNFD1Qicuk3*#L4-gKmhP`*3C zU_abc#PymtjkHL-=J1ffzae>!XP38a1?;Lh`uB|4FWn9HJ&%(QKJENRwEo<$-&#+{ XgiV~}Q%AI;mVZ+`H<5ERW=;OTvxmH~ literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search.svg new file mode 100755 index 0000000..d18a4fa --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search.svg @@ -0,0 +1,11 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_bw.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_bw.svg new file mode 100755 index 0000000..9ab9e71 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_bw.svg @@ -0,0 +1,16 @@ + + + + + + +]> + + + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_dark.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_dark.svg new file mode 100755 index 0000000..9ab9e71 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_dark.svg @@ -0,0 +1,16 @@ + + + + + + +]> + + + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_light.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_light.svg new file mode 100755 index 0000000..0c0dff6 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/search_light.svg @@ -0,0 +1,11 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/spinner.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/spinner.png new file mode 100755 index 0000000000000000000000000000000000000000..ae457fafc91ad7d3941182cbe2bc6fb475b44447 GIT binary patch literal 2707 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 NX;eDpynATMe*xevX;%OM literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/spinner2x.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/spinner2x.png new file mode 100755 index 0000000000000000000000000000000000000000..3b77ee6fdf827eed9392ee9984e83bd976a49983 GIT binary patch literal 5201 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 OXJ%||^w_{V`hNgX6(mdm literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/package.json b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/package.json new file mode 100755 index 0000000..03c64ef --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/package.json @@ -0,0 +1,85 @@ +{ + "name": "topcoat", + "version": "0.7.5", + "description": "CSS for clean and fast web apps", + "main": "Gruntfile.js", + "directories": { + "doc": "doc", + "test": "test" + }, + "dependencies": { + "topcoat-utils": "~0.1.3", + "topcoat-radio-button-base": "~0.1.1", + "topcoat-button-base": "~0.6.0", + "topcoat-radio-button": "~0.1.2", + "topcoat-navigation-bar-base": "~0.4.0", + "topcoat-navigation-bar": "~0.4.2", + "topcoat-input-base": "~0.4.1", + "topcoat-list-base": "~0.4.1", + "topcoat-list": "~0.5.0", + "topcoat-search-input": "~0.3.0", + "topcoat-search-input-base": "~0.1.2", + "topcoat-checkbox": "~0.4.0", + "topcoat-checkbox-base": "~0.1.3", + "topcoat-button": "~0.5.3", + "topcoat-icon-button": "~0.3.3", + "topcoat-button-bar-base": "~0.1.1", + "topcoat-button-bar": "~0.1.0", + "topcoat-textarea": "~0.3.0", + "topcoat-theme": "~0.5.24", + "topcoat-text-input": "~0.3.4", + "topcoat-textarea-base": "~0.3.2", + "topcoat-notification": "~0.1.1", + "topcoat-notification-base": "0.0.1", + "topcoat-tab-bar": "~0.1.0", + "topcoat-switch": "~0.1.3", + "topcoat-switch-base": "~0.1.0", + "topcoat-range-base": "0.0.3", + "topcoat-range": "~0.1.0" + }, + "devDependencies": { + "grunt": "~0.4.1", + "grunt-contrib-copy": "~0.4.1", + "grunt-contrib-jade": "~0.4.0", + "grunt-contrib-watch": "~0.1.4", + "grunt-contrib-clean": "~0.4.1", + "grunt-exec": "~0.4.2", + "grunt-contrib-cssmin": "~0.5.0", + "jade": "~0.28.2", + "grunt-contrib-stylus": "~0.6.0", + "grunt-contrib-htmlmin": "~0.1.3", + "prompt": "*", + "csv": "*", + "topdoc-theme": "~0.2.7", + "grunt-topdoc": "~0.1.3", + "grunt-autoprefixer": "~0.2.20130806" + }, + "scripts": { + "test": "grunt test", + "prepublish": "grunt" + }, + "repository": { + "type": "git", + "url": "git://github.com/topcoat/topcoat.git" + }, + "bugs": { + "url": "https://github.com/topcoat/topcoat/issues" + }, + "license": { + "type": "Apache", + "url": "https://github.com/topcoat/topcoat/blob/master/LICENSE" + }, + "keywords": [ + "css", + "ui", + "ux", + "pattern", + "library", + "mobile", + "desktop", + "native", + "application", + "web", + "standards" + ] +} diff --git a/platforms/android/assets/www/cordova_plugins.js b/platforms/android/assets/www/cordova_plugins.js index ad14214..330a466 100644 --- a/platforms/android/assets/www/cordova_plugins.js +++ b/platforms/android/assets/www/cordova_plugins.js @@ -92,6 +92,30 @@ module.exports = [ "cordova.plugins.notification.local.core", "plugin.notification.local.core" ] + }, + { + "file": "plugins/cordova-plugin-device-tests/tests.js", + "id": "cordova-plugin-device-tests.tests" + }, + { + "file": "plugins/cordova-plugin-device-motion-tests/tests.js", + "id": "cordova-plugin-device-motion-tests.tests" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/tests.js", + "id": "cordova-plugin-test-framework.cdvtests" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/jasmine_helpers.js", + "id": "cordova-plugin-test-framework.jasmine_helpers" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/medic.js", + "id": "cordova-plugin-test-framework.medic" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/main.js", + "id": "cordova-plugin-test-framework.main" } ]; module.exports.metadata = @@ -106,7 +130,10 @@ module.exports.metadata = "cordova-plugin-device-motion": "1.2.0", "cordova-plugin-dialogs": "1.2.0", "cordova-plugin-whitelist": "1.2.1", - "de.appplant.cordova.plugin.local-notification": "0.8.4" + "de.appplant.cordova.plugin.local-notification": "0.8.4", + "cordova-plugin-device-tests": "1.1.2-dev", + "cordova-plugin-device-motion-tests": "1.2.1-dev", + "cordova-plugin-test-framework": "1.1.2-dev" }; // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/assets/www/help.html b/platforms/android/assets/www/help.html index c2b70a9..1e4191f 100644 --- a/platforms/android/assets/www/help.html +++ b/platforms/android/assets/www/help.html @@ -14,7 +14,7 @@ - +
      @@ -27,11 +27,11 @@ diff --git a/platforms/android/assets/www/index.html b/platforms/android/assets/www/index.html index c82a9dd..e029c01 100644 --- a/platforms/android/assets/www/index.html +++ b/platforms/android/assets/www/index.html @@ -35,7 +35,7 @@ - +
      @@ -48,11 +48,11 @@ @@ -71,7 +71,9 @@

      -

      +
      +

      +


      @@ -92,5 +94,27 @@

      + // Test the navigation bar by clicking on the 'REVIEW' link and checking the URL changes to '/review' + it('Has a working nav', function(done) { + var currentURL = this.driver.getCurrentUrl(); + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + setTimeout(restTest, 2000); + var currentURL = this.driver.getCurrentUrl(); + + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + diff --git a/platforms/android/assets/www/plugins/cordova-plugin-device-motion-tests/tests.js b/platforms/android/assets/www/plugins/cordova-plugin-device-motion-tests/tests.js new file mode 100644 index 0000000..892ca60 --- /dev/null +++ b/platforms/android/assets/www/plugins/cordova-plugin-device-motion-tests/tests.js @@ -0,0 +1,367 @@ +cordova.define("cordova-plugin-device-motion-tests.tests", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ +/* global Windows */ + +exports.defineAutoTests = function () { + var isWindows = (cordova.platformId === "windows") || (cordova.platformId === "windows8"), + // Checking existence of accelerometer for windows platform + // Assumed that accelerometer always exists on other platforms. Extend + // condition to support accelerometer check on other platforms + isAccelExist = isWindows ? Windows.Devices.Sensors.Accelerometer.getDefault() !== null : true; + + describe('Accelerometer (navigator.accelerometer)', function () { + var fail = function(done) { + expect(true).toBe(false); + done(); + }; + + // This timeout is here to lessen the load on native accelerometer + // intensive use of which can lead to occasional test failures + afterEach(function(done) { + setTimeout(function() { + done(); + }, 100); + }); + + it("accelerometer.spec.1 should exist", function () { + expect(navigator.accelerometer).toBeDefined(); + }); + + describe("getCurrentAcceleration", function() { + it("accelerometer.spec.2 should exist", function() { + expect(typeof navigator.accelerometer.getCurrentAcceleration).toBeDefined(); + expect(typeof navigator.accelerometer.getCurrentAcceleration == 'function').toBe(true); + }); + + it("accelerometer.spec.3 success callback should be called with an Acceleration object", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var win = function(a) { + expect(a).toBeDefined(); + expect(a.x).toBeDefined(); + expect(typeof a.x == 'number').toBe(true); + expect(a.y).toBeDefined(); + expect(typeof a.y == 'number').toBe(true); + expect(a.z).toBeDefined(); + expect(typeof a.z == 'number').toBe(true); + expect(a.timestamp).toBeDefined(); + expect(typeof a.timestamp).toBe('number'); + done(); + }; + + var onError = function(err){ + console.log(err); + console.log("Skipping gyroscope tests, marking all as pending."); + isAccelExist = false; + expect(true).toBe(true); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, onError); + }); + + it("accelerometer.spec.4 success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var reasonableThreshold = 15; + var win = function(a) { + expect(a.x).toBeLessThan(reasonableThreshold); + expect(a.x).toBeGreaterThan(reasonableThreshold * -1); + expect(a.y).toBeLessThan(reasonableThreshold); + expect(a.y).toBeGreaterThan(reasonableThreshold * -1); + expect(a.z).toBeLessThan(reasonableThreshold); + expect(a.z).toBeGreaterThan(reasonableThreshold * -1); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, fail.bind(null,done)); + }); + + it("accelerometer.spec.5 success callback Acceleration object should return a recent timestamp", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var veryRecently = (new Date()).getTime(); + // Need to check that dates returned are not vastly greater than a recent time stamp. + // In case the timestamps returned are ridiculously high + var reasonableTimeLimit = veryRecently + 5000; // 5 seconds from now + var win = function(a) { + expect(a.timestamp).toBeGreaterThan(veryRecently); + expect(a.timestamp).toBeLessThan(reasonableTimeLimit); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, fail.bind(null,done)); + }); + }); + + describe("watchAcceleration", function() { + var id; + + afterEach(function() { + navigator.accelerometer.clearWatch(id); + }); + + it("accelerometer.spec.6 should exist", function() { + expect(navigator.accelerometer.watchAcceleration).toBeDefined(); + expect(typeof navigator.accelerometer.watchAcceleration == 'function').toBe(true); + }); + + it("accelerometer.spec.7 success callback should be called with an Acceleration object", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var win = function(a) { + expect(a).toBeDefined(); + expect(a.x).toBeDefined(); + expect(typeof a.x == 'number').toBe(true); + expect(a.y).toBeDefined(); + expect(typeof a.y == 'number').toBe(true); + expect(a.z).toBeDefined(); + expect(typeof a.z == 'number').toBe(true); + expect(a.timestamp).toBeDefined(); + expect(typeof a.timestamp).toBe('number'); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.8 success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var reasonableThreshold = 15; + var win = function(a) { + expect(a.x).toBeLessThan(reasonableThreshold); + expect(a.x).toBeGreaterThan(reasonableThreshold * -1); + expect(a.y).toBeLessThan(reasonableThreshold); + expect(a.y).toBeGreaterThan(reasonableThreshold * -1); + expect(a.z).toBeLessThan(reasonableThreshold); + expect(a.z).toBeGreaterThan(reasonableThreshold * -1); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.9 success callback Acceleration object should return a recent timestamp", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var veryRecently = (new Date()).getTime(); + // Need to check that dates returned are not vastly greater than a recent time stamp. + // In case the timestamps returned are ridiculously high + var reasonableTimeLimit = veryRecently + 5000; // 5 seconds from now + var win = function(a) { + expect(a.timestamp).toBeGreaterThan(veryRecently); + expect(a.timestamp).toBeLessThan(reasonableTimeLimit); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.12 success callback should be preserved and called several times", function (done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var callbacksCallCount = 0, + callbacksCallTestCount = 3; + + var win = function (a) { + if (callbacksCallCount++ < callbacksCallTestCount) return; + expect(typeof a).toBe('object'); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null, done), { frequency: 100 }); + }); + }); + + describe("clearWatch", function() { + it("accelerometer.spec.10 should exist", function() { + expect(navigator.accelerometer.clearWatch).toBeDefined(); + expect(typeof navigator.accelerometer.clearWatch == 'function').toBe(true); + }); + + it("accelerometer.spec.11 should clear an existing watch", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var id; + + // expect win to get called exactly once + var win = function(a) { + // clear watch on first call + navigator.accelerometer.clearWatch(id); + // if win isn't called again in 201 ms we assume success + var tid = setTimeout(function() { + expect(true).toBe(true); + done(); + }, 101); + // if win is called again, clear the timeout and fail the test + win = function() { + clearTimeout(tid); + fail(done); + }; + }; + + // wrap the success call in a closure since the value of win changes between calls + id = navigator.accelerometer.watchAcceleration(function() { win(); }, fail.bind(null, done), {frequency:100}); + }); + }); + }); +}; + +/******************************************************************************/ +/******************************************************************************/ +/******************************************************************************/ + +exports.defineManualTests = function (contentEl, createActionButton) { + function roundNumber(num) { + var dec = 3; + var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec); + return result; + } + + var watchAccelId = null; + + /** + * Set accelerometer status + */ + function setAccelStatus(status) { + document.getElementById('accel_status').innerHTML = status; + } + + /** + * Stop watching the acceleration + */ + function stopAccel() { + console.log("stopAccel()"); + setAccelStatus("Stopped"); + if (watchAccelId) { + navigator.accelerometer.clearWatch(watchAccelId); + watchAccelId = null; + } + } + + /** + * Start watching acceleration + */ + var watchAccel = function () { + console.log("watchAccel()"); + + // Success callback + var success = function (a) { + document.getElementById('x').innerHTML = roundNumber(a.x); + document.getElementById('y').innerHTML = roundNumber(a.y); + document.getElementById('z').innerHTML = roundNumber(a.z); + }; + + // Fail callback + var fail = function (e) { + console.log("watchAccel fail callback with error code " + e); + stopAccel(); + setAccelStatus(e); + }; + + // Update acceleration every 1 sec + var opt = {}; + opt.frequency = 1000; + watchAccelId = navigator.accelerometer.watchAcceleration(success, fail, opt); + + setAccelStatus("Running"); + }; + + /** + * Get current acceleration + */ + var getAccel = function () { + console.log("getAccel()"); + + // Stop accel if running + stopAccel(); + + // Success callback + var success = function (a) { + document.getElementById('x').innerHTML = roundNumber(a.x); + document.getElementById('y').innerHTML = roundNumber(a.y); + document.getElementById('z').innerHTML = roundNumber(a.z); + console.log("getAccel success callback"); + }; + + // Fail callback + var fail = function (e) { + console.log("getAccel fail callback with error code " + e); + setAccelStatus(e); + }; + + // Make call + var opt = {}; + navigator.accelerometer.getCurrentAcceleration(success, fail, opt); + }; + + /******************************************************************************/ + + var accelerometer_tests = '
      ' + + 'Expected result: Will update the status box with X, Y, and Z values when pressed. Status will read "Stopped"' + + '

      ' + + 'Expected result: When pressed, will start a watch on the accelerometer and update X,Y,Z values when movement is sensed. Status will read "Running"' + + '

      ' + + 'Expected result: Will clear the accelerometer watch, so X,Y,Z values will no longer be updated. Status will read "Stopped"'; + + contentEl.innerHTML = '
      ' + + 'Status: Stopped' + + '' + + '' + + '' + + '' + + '
      X:
      Y:
      Z:
      ' + + accelerometer_tests; + + createActionButton('Get Acceleration', function () { + getAccel(); + }, 'getAcceleration'); + + createActionButton('Start Watch', function () { + watchAccel(); + }, 'watchAcceleration'); + + createActionButton('Clear Watch', function () { + stopAccel(); + }, 'clearAcceleration'); +}; + +}); diff --git a/platforms/android/assets/www/plugins/cordova-plugin-device-tests/tests.js b/platforms/android/assets/www/plugins/cordova-plugin-device-tests/tests.js new file mode 100644 index 0000000..9687554 --- /dev/null +++ b/platforms/android/assets/www/plugins/cordova-plugin-device-tests/tests.js @@ -0,0 +1,116 @@ +cordova.define("cordova-plugin-device-tests.tests", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ + +exports.defineAutoTests = function() { + describe('Device Information (window.device)', function () { + it("should exist", function() { + expect(window.device).toBeDefined(); + }); + + it("should contain a platform specification that is a string", function() { + expect(window.device.platform).toBeDefined(); + expect((String(window.device.platform)).length > 0).toBe(true); + }); + + it("should contain a version specification that is a string", function() { + expect(window.device.version).toBeDefined(); + expect((String(window.device.version)).length > 0).toBe(true); + }); + + it("should contain a UUID specification that is a string or a number", function() { + expect(window.device.uuid).toBeDefined(); + if (typeof window.device.uuid == 'string' || typeof window.device.uuid == 'object') { + expect((String(window.device.uuid)).length > 0).toBe(true); + } else { + expect(window.device.uuid > 0).toBe(true); + } + }); + + it("should contain a cordova specification that is a string", function() { + expect(window.device.cordova).toBeDefined(); + expect((String(window.device.cordova)).length > 0).toBe(true); + }); + + it("should depend on the presence of cordova.version string", function() { + expect(window.cordova.version).toBeDefined(); + expect((String(window.cordova.version)).length > 0).toBe(true); + }); + + it("should contain device.cordova equal to cordova.version", function() { + expect(window.device.cordova).toBe(window.cordova.version); + }); + + it("should contain a model specification that is a string", function() { + expect(window.device.model).toBeDefined(); + expect((String(window.device.model)).length > 0).toBe(true); + }); + + it("should contain a manufacturer property that is a string", function() { + expect(window.device.manufacturer).toBeDefined(); + expect((String(window.device.manufacturer)).length > 0).toBe(true); + }); + + it("should contain an isVirtual property that is a boolean", function() { + expect(window.device.isVirtual).toBeDefined(); + expect(typeof window.device.isVirtual).toBe("boolean"); + }); + + it("should contain a serial number specification that is a string", function() { + expect(window.device.serial).toBeDefined(); + expect((String(window.device.serial)).length > 0).toBe(true); + + }); + + }); +}; + +exports.defineManualTests = function(contentEl, createActionButton) { + var logMessage = function (message, color) { + var log = document.getElementById('info'); + var logLine = document.createElement('div'); + if (color) { + logLine.style.color = color; + } + logLine.innerHTML = message; + log.appendChild(logLine); + }; + + var clearLog = function () { + var log = document.getElementById('info'); + log.innerHTML = ''; + }; + + var device_tests = '

      Press Dump Device button to get device information

      ' + + '
      ' + + 'Expected result: Status box will get updated with device info. (i.e. platform, version, uuid, model, etc)'; + + contentEl.innerHTML = '
      ' + device_tests; + + createActionButton('Dump device', function() { + clearLog(); + logMessage(JSON.stringify(window.device, null, '\t')); + }, "dump_device"); +}; + +}); diff --git a/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js b/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js new file mode 100644 index 0000000..a77be0e --- /dev/null +++ b/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js @@ -0,0 +1,86 @@ +cordova.define("cordova-plugin-test-framework.jasmine_helpers", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint -W097 */ +'use strict'; + +exports.setUpJasmine = function() { + // Set up jasmine + var jasmine = jasmineRequire.core(jasmineRequire); + jasmineRequire.html(jasmine); + var jasmineEnv = jasmine.currentEnv_ = new jasmine.Env(); + + jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000; + jasmineEnv.catchExceptions(false); + + // Set up jasmine interface + var jasmineInterface = jasmineRequire.interface(jasmine, jasmineEnv); + + // Add Reporters + addJasmineReporters(jasmineInterface, jasmineEnv); + + // Add Spec Filter + jasmineEnv.specFilter = function(spec) { + //console.log(spec.getFullName()); + return true; + }; + + // Jasmine 2.2.0 moved this symbol, so we add a shim here. + jasmine.Expectation.addMatchers = jasmine.Expectation.addMatchers || function() { + return jasmine.addMatchers.apply(this, arguments); + }; + + return jasmineInterface; +}; + +function addJasmineReporters(jasmineInterface, jasmineEnv) { + jasmineInterface.jsApiReporter = new jasmineInterface.jasmine.JsApiReporter({ timer: new jasmineInterface.jasmine.Timer() }); + jasmineEnv.addReporter(jasmineInterface.jsApiReporter); + + jasmineInterface.htmlReporter = new jasmineInterface.jasmine.HtmlReporter({ + env: jasmineEnv, + queryString: function() { return null; }, + onRaiseExceptionsClick: function() { }, + getContainer: function() { return document.getElementById('content'); }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmineInterface.jasmine.Timer() + }); + jasmineInterface.htmlReporter.initialize(); + jasmineEnv.addReporter(jasmineInterface.htmlReporter); + + var medic = require('cordova-plugin-test-framework.medic'); + + if (medic.enabled) { + jasmineRequire.medic(jasmineInterface.jasmine); + jasmineInterface.MedicReporter = new jasmineInterface.jasmine.MedicReporter({ + env: jasmineEnv, + log: { logurl: medic.logurl }, + sha: medic.sha + }); + jasmineInterface.MedicReporter.initialize(); + jasmineEnv.addReporter(jasmineInterface.MedicReporter); + } + +} + +}); diff --git a/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/main.js b/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/main.js new file mode 100644 index 0000000..c3e1aa4 --- /dev/null +++ b/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/main.js @@ -0,0 +1,449 @@ +cordova.define("cordova-plugin-test-framework.main", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* global WinJS */ +/* jshint -W097 */ +'use strict'; + +var LOG_HEADER_HEIGHT = 20, + CONTENT_TOP_OFFSET = 30; + +var isWin = cordova.platformId === "windows", + isWP8 = cordova.platformId === "windowsphone"; + +/******************************************************************************/ + +function getMode(callback) { + var mode = localStorage.getItem('cdvtests-mode') || 'main'; + callback(mode); +} + +function setMode(mode) { + var handlers = { + 'main': runMain, + 'auto': runAutoTests, + 'manual': runManualTests + }; + if (!handlers.hasOwnProperty(mode)) { + console.error("Unsupported mode: " + mode); + console.error("Defaulting to 'main'"); + mode = 'main'; + } + + localStorage.setItem('cdvtests-mode', mode); + clearContent(); + + handlers[mode](); +} + +/******************************************************************************/ + +function clearContent() { + var content = document.getElementById('content'); + content.innerHTML = ''; + var log = document.getElementById('log--content'); + log.innerHTML = ''; + var buttons = document.getElementById('buttons'); + buttons.innerHTML = ''; + + setLogVisibility(false); +} + +/******************************************************************************/ + +function setTitle(title) { + var el = document.getElementById('title'); + el.textContent = title; +} + +/******************************************************************************/ + +function setLogVisibility(visible) { + if (visible) { + document.querySelector('body').classList.add('expanded-log'); + + if (isWin || isWP8) { + var h = document.querySelector('body').offsetHeight; + + document.getElementById('middle').style.height = (h * 0.6 - LOG_HEADER_HEIGHT - CONTENT_TOP_OFFSET) + "px"; + document.getElementById('middle').style.marginBottom = (h * 0.4) + "px"; + document.getElementById('middle').style.paddingBottom = (h * 0.4) + "px"; + } + } else { + document.querySelector('body').classList.remove('expanded-log'); + + if (isWin || isWP8) { + document.getElementById('middle').style.height = ""; + document.getElementById('middle').style.marginBottom = ""; + document.getElementById('middle').style.paddingBottom = ""; + } + } +} + +window.onresize = function (event) { + // Update content and log heights + if (isWin || isWP8) { + setLogVisibility(getLogVisibility()); + } +}; + +function getLogVisibility() { + var e = document.querySelector('body'); + return e.classList.contains('expanded-log'); +} + +function toggleLogVisibility() { + if (getLogVisibility()) { + setLogVisibility(false); + } else { + setLogVisibility(true); + } +} + +/******************************************************************************/ + +function attachEvents() { + document.getElementById('log--title').addEventListener('click', toggleLogVisibility); +} + +/******************************************************************************/ + +var origConsole = window.console; + +exports.wrapConsole = function() { + function appendToOnscreenLog(type, args) { + var el = document.getElementById('log--content'); + var div = document.createElement('div'); + div.classList.add('log--content--line'); + div.classList.add('log--content--line--' + type); + div.textContent = Array.prototype.slice.apply(args).map(function(arg) { + return (typeof arg === 'string') ? arg : JSON.stringify(arg); + }).join(' '); + el.appendChild(div); + // scroll to bottom + el.scrollTop = el.scrollHeight; + } + + function createCustomLogger(type) { + var medic = require('cordova-plugin-test-framework.medic'); + return function() { + origConsole[type].apply(origConsole, arguments); + // TODO: encode log type somehow for medic logs? + medic.log.apply(medic, arguments); + appendToOnscreenLog(type, arguments); + setLogVisibility(true); + }; + } + + window.console = { + log: createCustomLogger('log'), + warn: createCustomLogger('warn'), + error: createCustomLogger('error'), + }; +}; + +exports.unwrapConsole = function() { + window.console = origConsole; +}; + +/******************************************************************************/ + +function createActionButton(title, callback, appendTo) { + appendTo = appendTo ? appendTo : 'buttons'; + var buttons = document.getElementById(appendTo); + var div = document.createElement('div'); + var button = document.createElement('a'); + button.textContent = title; + button.onclick = function(e) { + e.preventDefault(); + callback(); + }; + button.classList.add('topcoat-button'); + div.appendChild(button); + buttons.appendChild(div); +} + +/******************************************************************************/ + +function setupAutoTestsEnablers(cdvtests) { + var enablerList = createEnablerList(); + + // Iterate over all the registered test modules + iterateAutoTests(cdvtests, function(api, testModule) { + // For "standard" plugins remove the common/repetitive bits of + // the api key, for use as the title. For third-party plugins, the full + // api will be used as the title + var title = api.replace(/org\.apache\.cordova\./i, '').replace(/\.tests.tests/i, ''); + + createEnablerCheckbox(api, title, testModule.getEnabled(), enablerList.id, toggleTestHandler); + }); + + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function createEnablerList() { + var buttons = document.getElementById('buttons'); + + var enablerContainer = document.createElement('div'); + enablerContainer.id = 'test-enablers-container'; + + // Create header to show count of enabled/total tests + var header = document.createElement('h3'); + header.id = 'tests-enabled'; + + // Create widget to show/hide list + var expander = document.createElement('span'); + expander.id = 'test-expander'; + expander.innerText = 'Show/hide tests to be run'; + expander.onclick = toggleEnablerVisibility; + + // Create list to contain checkboxes for each test + var enablerList = document.createElement('div'); + enablerList.id = "test-list"; + + // Create select/deselect all buttons (in button bar) + var checkButtonBar = document.createElement('ul'); + checkButtonBar.classList.add('topcoat-button-bar'); + + function createSelectToggleButton(title, selected) { + var barItem = document.createElement('li'); + barItem.classList.add('topcoat-button-bar__item'); + + var link = document.createElement('a'); + link.classList.add('topcoat-button-bar__button'); + link.innerText = title; + link.href = null; + link.onclick = function(e) { + e.preventDefault(); + toggleSelected(enablerList.id, selected); + return false; + }; + + barItem.appendChild(link); + checkButtonBar.appendChild(barItem); + } + createSelectToggleButton('Check all', true); + createSelectToggleButton('Uncheck all', false); + enablerList.appendChild(checkButtonBar); + + enablerContainer.appendChild(header); + enablerContainer.appendChild(expander); + enablerContainer.appendChild(enablerList); + + buttons.appendChild(enablerContainer); + + return enablerList; +} + +/******************************************************************************/ + +function updateEnabledTestCount() { + var enabledLabel = document.getElementById('tests-enabled'); + + // Determine how many tests are currently enabled + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + var total = 0; + var enabled = 0; + iterateAutoTests(cdvtests, function(api, testModule) { + total++; + if (testModule.getEnabled()) { + enabled++; + } + }); + + if (enabled == total) { + enabledLabel.innerText = 'Running All Tests.'; + } else { + enabledLabel.innerText = 'Running ' + enabled + ' of ' + total + ' Tests.'; + } +} + +/******************************************************************************/ + +function toggleSelected(containerId, newCheckedValue) { + [].forEach.call(document.getElementById(containerId).getElementsByTagName('input'), function(input) { + if (input.type !== 'checkbox') return; + input.checked = newCheckedValue; + toggleTestEnabled(input); + }); + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function toggleEnablerVisibility() { + var enablerList = document.getElementById('test-list'); + if (enablerList.classList.contains('expanded')) { + enablerList.classList.remove('expanded'); + } else { + enablerList.classList.add('expanded'); + } +} + +/******************************************************************************/ + +function createEnablerCheckbox(api, title, isEnabled, appendTo, callback) { + var container = document.getElementById(appendTo); + + var label = document.createElement('label'); + label.classList.add('topcoat-checkbox'); + + var checkbox = document.createElement('input'); + checkbox.type = "checkbox"; + checkbox.value = api; + checkbox.checked = isEnabled; + label.htmlFor = checkbox.id = 'enable_' + api; + + checkbox.onchange = function(e) { + e.preventDefault(); + callback(e); + }; + + var div = document.createElement('div'); + div.classList.add('topcoat-checkbox__checkmark'); + + var text = document.createElement('span'); + text.innerText = title; + + label.appendChild(checkbox); + label.appendChild(div); + label.appendChild(text); + + container.appendChild(label); +} + +/******************************************************************************/ + +function toggleTestHandler(event) { + var checkbox = event.target; + + toggleTestEnabled(checkbox); + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function toggleTestEnabled(checkbox) { + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.tests[checkbox.value].setEnabled(checkbox.checked); +} + +/******************************************************************************/ + +function iterateAutoTests(cdvtests, callback) { + Object.keys(cdvtests.tests).forEach(function(api) { + var testModule = cdvtests.tests[api]; + if (!testModule.hasOwnProperty('defineAutoTests')) { + return; + } + callback(api, testModule); + }); +} + +/******************************************************************************/ + +function runAutoTests() { + setTitle('Auto Tests'); + + createActionButton('Run', setMode.bind(null, 'auto')); + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'main')); + + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.init(); + setupAutoTestsEnablers(cdvtests); + + cdvtests.defineAutoTests(); + + // Run the tests! + var jasmineEnv = window.jasmine.getEnv(); + + jasmineEnv.execute(); +} + +/******************************************************************************/ + +function runManualTests() { + setTitle('Manual Tests'); + + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'main')); + + var contentEl = document.getElementById('content'); + var beforeEach = function(title) { + clearContent(); + setTitle(title || 'Manual Tests'); + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'manual')); + }; + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.defineManualTests(contentEl, beforeEach, createActionButton); +} + +/******************************************************************************/ + +function runMain() { + setTitle('Apache Cordova Plugin Tests'); + + createActionButton('Auto Tests', setMode.bind(null, 'auto')); + createActionButton('Manual Tests', setMode.bind(null, 'manual')); + createActionButton('Reset App', location.reload.bind(location)); + if (/showBack/.exec(location.hash)) { + createActionButton('Back', function() { + history.go(-1); + }); + } + + if (isWin && typeof WinJS !== 'undefined') { + var app = WinJS.Application; + app.addEventListener("error", function (err) { + // We do not want an unhandled exception to crash the test app + // Returning true marks it as being handled + return true; + }); + } +} + +/******************************************************************************/ + +exports.init = function() { + // TODO: have a way to opt-out of console wrapping in case line numbers are important. + // ...Or find a custom way to print line numbers using stack or something. + // make sure to always wrap when using medic. + attachEvents(); + exports.wrapConsole(); + + var medic = require('cordova-plugin-test-framework.medic'); + medic.load(function() { + if (medic.enabled) { + setMode('auto'); + } else { + getMode(setMode); + } + }); +}; + +/******************************************************************************/ + +}); diff --git a/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/medic.js b/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/medic.js new file mode 100644 index 0000000..c805a25 --- /dev/null +++ b/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/medic.js @@ -0,0 +1,66 @@ +cordova.define("cordova-plugin-test-framework.medic", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint -W097 */ +'use strict'; + +exports.logurl = 'http://127.0.0.1:7800'; + +exports.enabled = false; + +exports.log = function() { + if (!exports.enabled) + return; + var xhr = new XMLHttpRequest(); + xhr.open("POST", exports.logurl, true); + xhr.setRequestHeader("Content-Type", "text/plain"); + xhr.send(Array.prototype.slice.apply(arguments)); +}; + +exports.load = function (callback) { + var cfg = null; + + try { + // attempt to synchronously load medic config + var xhr = new XMLHttpRequest(); + xhr.open("GET", "../medic.json", false); + xhr.send(null); + cfg = JSON.parse(xhr.responseText); + } catch (ex) { } + + // config is available + if (cfg) { + exports.logurl = cfg.couchdb || cfg.logurl; + exports.sha = cfg.sha; + exports.enabled = true; + console.log('Loaded Medic Config: logurl=' + exports.logurl); + } else { + // config does not exist + console.log('Did not find medic config file'); + } + + setTimeout(function () { + callback(); + }, 0); +}; + +}); diff --git a/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/tests.js b/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/tests.js new file mode 100644 index 0000000..5c861b3 --- /dev/null +++ b/platforms/android/assets/www/plugins/cordova-plugin-test-framework/www/tests.js @@ -0,0 +1,138 @@ +cordova.define("cordova-plugin-test-framework.cdvtests", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ +/* jshint -W097 */ +'use strict'; + +exports.tests = Object.create(null); + +function TestModule(api) { + var name = api; + var enabled = true; + + var enabledPref = localStorage.getItem('cordova-tests-enabled-' + name); + if (enabledPref) + { + enabled = (enabledPref == true.toString()); + } + + this.getEnabled = function () { + return enabled; + }; + + this.setEnabled = function (isEnabled) { + enabled = isEnabled; + localStorage.setItem('cordova-tests-enabled-' + name, enabled); + }; +} + +function getTestsObject(api) { + exports.tests[api] = exports.tests[api] || new TestModule(api); + return exports.tests[api]; +} + +function requireAllTestModules() { + // This finds all js-modules named "tests" (regardless of plugins they came from) + var test_modules = cordova.require('cordova/plugin_list') + .map(function(jsmodule) { + return jsmodule.id; + }) + .filter(function(id) { + return /\.tests$/.test(id); + }); + + // Map auto / manual test definitions for each, but without actually running the handlers + test_modules.forEach(function(id) { + try { + var plugintests = cordova.require(id); + + if (plugintests.hasOwnProperty('defineAutoTests')) { + getTestsObject(id).defineAutoTests = function() { + describe(id + ' >>', plugintests.defineAutoTests.bind(plugintests)); + }; + } + + if (plugintests.hasOwnProperty('defineManualTests')) { + getTestsObject(id).defineManualTests = plugintests.defineManualTests.bind(plugintests); + } + } catch(ex) { + console.warn('Failed to load tests: ', id); + return; + } + }); +} + +function createJasmineInterface() { + var jasmine_helpers = require('cordova-plugin-test-framework.jasmine_helpers'); + var jasmineInterface = jasmine_helpers.setUpJasmine(); + return jasmineInterface; +} + +function attachJasmineInterfaceToGlobal() { + var jasmineInterface = createJasmineInterface(); + for (var property in jasmineInterface) { + window[property] = jasmineInterface[property]; + } +} + +function detachJasmineInterfaceFromGlobal() { + var jasmineInterface = createJasmineInterface(); + for (var property in jasmineInterface) { + delete window[property]; + } +} + +exports.defineAutoTests = function() { + requireAllTestModules(); + attachJasmineInterfaceToGlobal(); + + Object.keys(exports.tests).forEach(function(key) { + if (!exports.tests[key].getEnabled()) + return; + if (!exports.tests[key].hasOwnProperty('defineAutoTests')) + return; + exports.tests[key].defineAutoTests(); + }); +}; + +exports.defineManualTests = function(contentEl, beforeEach, createActionButton) { + requireAllTestModules(); + detachJasmineInterfaceFromGlobal(); + + Object.keys(exports.tests).forEach(function(key) { + if (!exports.tests[key].getEnabled()) + return; + if (!exports.tests[key].hasOwnProperty('defineManualTests')) + return; + createActionButton(key, function() { + beforeEach(key); + exports.tests[key].defineManualTests(contentEl, createActionButton); + }); + }); +}; + +exports.init = function() { + requireAllTestModules(); +}; + +}); diff --git a/platforms/android/assets/www/reports.html b/platforms/android/assets/www/reports.html index 80dacde..93f0fc1 100644 --- a/platforms/android/assets/www/reports.html +++ b/platforms/android/assets/www/reports.html @@ -25,7 +25,7 @@ - +
      diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 0475c84..7371a60 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -49,15 +49,15 @@ function stillRecordingNoiseLevelWarning() { //for some reason this nicer looking prompt broke (text input colour became white on white) //Ask the user for notes on their session. ---------------------------------------------------------------- -// function askUserNotes() { -// navigator.notification.prompt( -// 'This is an opportunity to enter any notes you wish to remember about this session', // message -// onPrompt, // callback to invoke -// 'User Notes', // title -// ['Ok'] // buttonLabels - -// ); -// } +function askUserNotes() { + navigator.notification.prompt( + 'This is an opportunity to enter any notes you wish to remember about this session', // message + onPrompt, // callback to invoke + 'User Notes', // title + ['Ok'] // buttonLabels + + ); +} function onPrompt(results) { userNotes = results.input1; diff --git a/platforms/android/assets/www/resources/js/mic.js b/platforms/android/assets/www/resources/js/mic.js index 944174c..2f67b54 100644 --- a/platforms/android/assets/www/resources/js/mic.js +++ b/platforms/android/assets/www/resources/js/mic.js @@ -87,7 +87,7 @@ function readMic(reading) { //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldMicIntervalNSBool") != null) { //console.log('running updateSampleR'); - updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); + //updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); } //This is so we can compare the values from this interval and the previous interval diff --git a/platforms/android/assets/www/resources/js/motion.js b/platforms/android/assets/www/resources/js/motion.js index 0c14952..750ae00 100644 --- a/platforms/android/assets/www/resources/js/motion.js +++ b/platforms/android/assets/www/resources/js/motion.js @@ -56,7 +56,7 @@ function onSuccessAcc(acceleration) { //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldAccelIntervalNSBool") != null) { //console.log('running updateSampleR'); - updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); + //updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); } //This is so we can compare the values from this interval and the previous interval if (typeof(Storage) !== "undefined") { diff --git a/platforms/android/assets/www/resources/js/study.js b/platforms/android/assets/www/resources/js/study.js index f451c00..cbc8f9a 100644 --- a/platforms/android/assets/www/resources/js/study.js +++ b/platforms/android/assets/www/resources/js/study.js @@ -245,8 +245,8 @@ function initialiseMonitoring() { totalDurationPaused = 0; - accelSampleRate = 30000; - micSampleRate = 30000; + accelSampleRate = 30000; //sampling rate for accelerometer + micSampleRate = 30000; //sampling rate for microphone micSteadyScoreCount = 0; micFluctuatingScoreCount = 0; accelSteadyScoreCount = 0; @@ -309,12 +309,12 @@ function disableWakeLock() { //for some reason the nicer looking prompt broke (text input colour became white on white) -function askUserNotes() { - userNotes = prompt("This is an opportunity to enter any notes you wish to remember about this session. If you have nothing to add then just click OK."); - localStorage.setItem("userNotes", userNotes); +// function askUserNotes() { +// userNotes = prompt("This is an opportunity to enter any notes you wish to remember about this session. If you have nothing to add then just click OK."); +// localStorage.setItem("userNotes", userNotes); - pushData(); -} +// pushData(); +// } // function getUserNotes() { // if (localStorage.getItem("userNotes") != null) { diff --git a/platforms/android/assets/www/schedule.html b/platforms/android/assets/www/schedule.html index 02b456e..3acaa6c 100644 --- a/platforms/android/assets/www/schedule.html +++ b/platforms/android/assets/www/schedule.html @@ -14,7 +14,7 @@ - +
      diff --git a/platforms/android/assets/www/settings.html b/platforms/android/assets/www/settings.html index 2592c82..99e7afa 100644 --- a/platforms/android/assets/www/settings.html +++ b/platforms/android/assets/www/settings.html @@ -25,7 +25,7 @@ - +
      diff --git a/platforms/android/platform_www/cdvtests/index.html b/platforms/android/platform_www/cdvtests/index.html new file mode 100644 index 0000000..68460bc --- /dev/null +++ b/platforms/android/platform_www/cdvtests/index.html @@ -0,0 +1,63 @@ + + + + + + + + Cordova tests + + + + + + + + + + + + + + + + + + + +
      +
      +
      +
      +
      +
      +
      Log
      +
      +
      + + diff --git a/platforms/android/platform_www/cdvtests/jasmine-2.2.0/boot.js b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/boot.js new file mode 100755 index 0000000..e8ddd55 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/boot.js @@ -0,0 +1,121 @@ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +(function() { + + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + window.jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. + */ + jasmineRequire.html(jasmine); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = jasmineRequire.interface(jasmine, env); + + /** + * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + if (typeof window == "undefined" && typeof exports == "object") { + extend(exports, jasmineInterface); + } else { + extend(window, jasmineInterface); + } + + /** + * ## Runner Parameters + * + * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. + */ + + var queryString = new jasmine.QueryString({ + getWindowLocation: function() { return window.location; } + }); + + var catchingExceptions = queryString.getParam("catch"); + env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions); + + /** + * ## Reporters + * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). + */ + var htmlReporter = new jasmine.HtmlReporter({ + env: env, + onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); }, + addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, + getContainer: function() { return document.body; }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmine.Timer() + }); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); + env.addReporter(htmlReporter); + + /** + * Filter which specs will be run by matching the start of the full name against the `spec` query param. + */ + var specFilter = new jasmine.HtmlSpecFilter({ + filterString: function() { return queryString.getParam("spec"); } + }); + + env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + + /** + * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. + */ + window.setTimeout = window.setTimeout; + window.setInterval = window.setInterval; + window.clearTimeout = window.clearTimeout; + window.clearInterval = window.clearInterval; + + /** + * ## Execution + * + * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. + */ + var currentWindowOnload = window.onload; + + window.onload = function() { + if (currentWindowOnload) { + currentWindowOnload(); + } + htmlReporter.initialize(); + env.execute(); + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + +}()); diff --git a/platforms/android/platform_www/cdvtests/jasmine-2.2.0/console.js b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/console.js new file mode 100755 index 0000000..e154806 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/console.js @@ -0,0 +1,190 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== 'undefined' && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().console = function(jRequire, j$) { + j$.ConsoleReporter = jRequire.ConsoleReporter(); +}; + +getJasmineRequireObj().ConsoleReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function ConsoleReporter(options) { + var print = options.print, + showColors = options.showColors || false, + onComplete = options.onComplete || function() {}, + timer = options.timer || noopTimer, + specCount, + failureCount, + failedSpecs = [], + pendingCount, + ansi = { + green: '\x1B[32m', + red: '\x1B[31m', + yellow: '\x1B[33m', + none: '\x1B[0m' + }, + failedSuites = []; + + print('ConsoleReporter is deprecated and will be removed in a future version.'); + + this.jasmineStarted = function() { + specCount = 0; + failureCount = 0; + pendingCount = 0; + print('Started'); + printNewline(); + timer.start(); + }; + + this.jasmineDone = function() { + printNewline(); + for (var i = 0; i < failedSpecs.length; i++) { + specFailureDetails(failedSpecs[i]); + } + + if(specCount > 0) { + printNewline(); + + var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' + + failureCount + ' ' + plural('failure', failureCount); + + if (pendingCount) { + specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount); + } + + print(specCounts); + } else { + print('No specs found'); + } + + printNewline(); + var seconds = timer.elapsed() / 1000; + print('Finished in ' + seconds + ' ' + plural('second', seconds)); + printNewline(); + + for(i = 0; i < failedSuites.length; i++) { + suiteFailureDetails(failedSuites[i]); + } + + onComplete(failureCount === 0); + }; + + this.specDone = function(result) { + specCount++; + + if (result.status == 'pending') { + pendingCount++; + print(colored('yellow', '*')); + return; + } + + if (result.status == 'passed') { + print(colored('green', '.')); + return; + } + + if (result.status == 'failed') { + failureCount++; + failedSpecs.push(result); + print(colored('red', 'F')); + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + failureCount++; + failedSuites.push(result); + } + }; + + return this; + + function printNewline() { + print('\n'); + } + + function colored(color, str) { + return showColors ? (ansi[color] + str + ansi.none) : str; + } + + function plural(str, count) { + return count == 1 ? str : str + 's'; + } + + function repeat(thing, times) { + var arr = []; + for (var i = 0; i < times; i++) { + arr.push(thing); + } + return arr; + } + + function indent(str, spaces) { + var lines = (str || '').split('\n'); + var newArr = []; + for (var i = 0; i < lines.length; i++) { + newArr.push(repeat(' ', spaces).join('') + lines[i]); + } + return newArr.join('\n'); + } + + function specFailureDetails(result) { + printNewline(); + print(result.fullName); + + for (var i = 0; i < result.failedExpectations.length; i++) { + var failedExpectation = result.failedExpectations[i]; + printNewline(); + print(indent(failedExpectation.message, 2)); + print(indent(failedExpectation.stack, 2)); + } + + printNewline(); + } + + function suiteFailureDetails(result) { + for (var i = 0; i < result.failedExpectations.length; i++) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', 'AfterAll ' + result.failedExpectations[i].message)); + + } + printNewline(); + } + } + + return ConsoleReporter; +}; diff --git a/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine-html.js b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine-html.js new file mode 100755 index 0000000..bee5a04 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine-html.js @@ -0,0 +1,416 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +jasmineRequire.html = function(j$) { + j$.ResultsNode = jasmineRequire.ResultsNode(); + j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); + j$.QueryString = jasmineRequire.QueryString(); + j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); +}; + +jasmineRequire.HtmlReporter = function(j$) { + + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + function HtmlReporter(options) { + var env = options.env || {}, + getContainer = options.getContainer, + createElement = options.createElement, + createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, + addToExistingQueryString = options.addToExistingQueryString || defaultQueryString, + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0, + htmlReporterMain, + symbols, + failedSuites = []; + + this.initialize = function() { + clearPrior(); + htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'}, + createDom('div', {className: 'banner'}, + createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}), + createDom('span', {className: 'version'}, j$.version) + ), + createDom('ul', {className: 'symbol-summary'}), + createDom('div', {className: 'alert'}), + createDom('div', {className: 'results'}, + createDom('div', {className: 'failures'}) + ) + ); + getContainer().appendChild(htmlReporterMain); + + symbols = find('.symbol-summary'); + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + var summary = createDom('div', {className: 'summary'}); + + var topResults = new j$.ResultsNode({}, '', null), + currentParent = topResults; + + this.suiteStarted = function(result) { + currentParent.addChild(result, 'suite'); + currentParent = currentParent.last(); + }; + + this.suiteDone = function(result) { + if (result.status == 'failed') { + failedSuites.push(result); + } + + if (currentParent == topResults) { + return; + } + + currentParent = currentParent.parent; + }; + + this.specStarted = function(result) { + currentParent.addChild(result, 'spec'); + }; + + var failures = []; + this.specDone = function(result) { + if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') { + console.error('Spec \'' + result.fullName + '\' has no expectations.'); + } + + if (result.status != 'disabled') { + specsExecuted++; + } + + symbols.appendChild(createDom('li', { + className: noExpectations(result) ? 'empty' : result.status, + id: 'spec_' + result.id, + title: result.fullName + } + )); + + if (result.status == 'failed') { + failureCount++; + + var failure = + createDom('div', {className: 'spec-detail failed'}, + createDom('div', {className: 'description'}, + createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName) + ), + createDom('div', {className: 'messages'}) + ); + var messages = failure.childNodes[1]; + + for (var i = 0; i < result.failedExpectations.length; i++) { + var expectation = result.failedExpectations[i]; + messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message)); + messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack)); + } + + failures.push(failure); + } + + if (result.status == 'pending') { + pendingSpecCount++; + } + }; + + this.jasmineDone = function() { + var banner = find('.banner'); + banner.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's')); + + var alert = find('.alert'); + + alert.appendChild(createDom('span', { className: 'exceptions' }, + createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions'), + createDom('input', { + className: 'raise', + id: 'raise-exceptions', + type: 'checkbox' + }) + )); + var checkbox = find('#raise-exceptions'); + + checkbox.checked = !env.catchingExceptions(); + checkbox.onclick = onRaiseExceptionsClick; + + if (specsExecuted < totalSpecsDefined) { + var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all'; + alert.appendChild( + createDom('span', {className: 'bar skipped'}, + createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage) + ) + ); + } + var statusBarMessage = ''; + var statusBarClassName = 'bar '; + + if (totalSpecsDefined > 0) { + statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount); + if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); } + statusBarClassName += (failureCount > 0) ? 'failed' : 'passed'; + } else { + statusBarClassName += 'skipped'; + statusBarMessage += 'No specs found'; + } + + alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage)); + + for(i = 0; i < failedSuites.length; i++) { + var failedSuite = failedSuites[i]; + for(var j = 0; j < failedSuite.failedExpectations.length; j++) { + var errorBarMessage = 'AfterAll ' + failedSuite.failedExpectations[j].message; + var errorBarClassName = 'bar errored'; + alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage)); + } + } + + var results = find('.results'); + results.appendChild(summary); + + summaryList(topResults, summary); + + function summaryList(resultsTree, domParent) { + var specListNode; + for (var i = 0; i < resultsTree.children.length; i++) { + var resultNode = resultsTree.children[i]; + if (resultNode.type == 'suite') { + var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id}, + createDom('li', {className: 'suite-detail'}, + createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description) + ) + ); + + summaryList(resultNode, suiteListNode); + domParent.appendChild(suiteListNode); + } + if (resultNode.type == 'spec') { + if (domParent.getAttribute('class') != 'specs') { + specListNode = createDom('ul', {className: 'specs'}); + domParent.appendChild(specListNode); + } + var specDescription = resultNode.result.description; + if(noExpectations(resultNode.result)) { + specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription; + } + if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') { + specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason; + } + specListNode.appendChild( + createDom('li', { + className: resultNode.result.status, + id: 'spec-' + resultNode.result.id + }, + createDom('a', {href: specHref(resultNode.result)}, specDescription) + ) + ); + } + } + } + + if (failures.length) { + alert.appendChild( + createDom('span', {className: 'menu bar spec-list'}, + createDom('span', {}, 'Spec List | '), + createDom('a', {className: 'failures-menu', href: '#'}, 'Failures'))); + alert.appendChild( + createDom('span', {className: 'menu bar failure-list'}, + createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'), + createDom('span', {}, ' | Failures '))); + + find('.failures-menu').onclick = function() { + setMenuModeTo('failure-list'); + }; + find('.spec-list-menu').onclick = function() { + setMenuModeTo('spec-list'); + }; + + setMenuModeTo('failure-list'); + + var failureNode = find('.failures'); + for (var i = 0; i < failures.length; i++) { + failureNode.appendChild(failures[i]); + } + } + }; + + return this; + + function find(selector) { + return getContainer().querySelector('.jasmine_html-reporter ' + selector); + } + + function clearPrior() { + // return the reporter + var oldReporter = find(''); + + if(oldReporter) { + getContainer().removeChild(oldReporter); + } + } + + function createDom(type, attrs, childrenVarArgs) { + var el = createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(createTextNode(child)); + } else { + if (child) { + el.appendChild(child); + } + } + } + + for (var attr in attrs) { + if (attr == 'className') { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; + } + + function pluralize(singular, count) { + var word = (count == 1 ? singular : singular + 's'); + + return '' + count + ' ' + word; + } + + function specHref(result) { + return addToExistingQueryString('spec', result.fullName); + } + + function defaultQueryString(key, value) { + return '?' + key + '=' + value; + } + + function setMenuModeTo(mode) { + htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode); + } + + function noExpectations(result) { + return (result.failedExpectations.length + result.passedExpectations.length) === 0 && + result.status === 'passed'; + } + } + + return HtmlReporter; +}; + +jasmineRequire.HtmlSpecFilter = function() { + function HtmlSpecFilter(options) { + var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; + } + + return HtmlSpecFilter; +}; + +jasmineRequire.ResultsNode = function() { + function ResultsNode(result, type, parent) { + this.result = result; + this.type = type; + this.parent = parent; + + this.children = []; + + this.addChild = function(result, type) { + this.children.push(new ResultsNode(result, type, this)); + }; + + this.last = function() { + return this.children[this.children.length - 1]; + }; + } + + return ResultsNode; +}; + +jasmineRequire.QueryString = function() { + function QueryString(options) { + + this.navigateWithNewParam = function(key, value) { + options.getWindowLocation().search = this.fullStringWithNewParam(key, value); + }; + + this.fullStringWithNewParam = function(key, value) { + var paramMap = queryStringToParamMap(); + paramMap[key] = value; + return toQueryString(paramMap); + }; + + this.getParam = function(key) { + return queryStringToParamMap()[key]; + }; + + return this; + + function toQueryString(paramMap) { + var qStrPairs = []; + for (var prop in paramMap) { + qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop])); + } + return '?' + qStrPairs.join('&'); + } + + function queryStringToParamMap() { + var paramStr = options.getWindowLocation().search.substring(1), + params = [], + paramMap = {}; + + if (paramStr.length > 0) { + params = paramStr.split('&'); + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + var value = decodeURIComponent(p[1]); + if (value === 'true' || value === 'false') { + value = JSON.parse(value); + } + paramMap[decodeURIComponent(p[0])] = value; + } + } + + return paramMap; + } + + } + + return QueryString; +}; diff --git a/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine.css b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine.css new file mode 100755 index 0000000..ecc5f5e --- /dev/null +++ b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine.css @@ -0,0 +1,62 @@ +body { overflow-y: scroll; } + +.jasmine_html-reporter { background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333; } +.jasmine_html-reporter a { text-decoration: none; } +.jasmine_html-reporter a:hover { text-decoration: underline; } +.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; } +.jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; } +.jasmine_html-reporter .banner { position: relative; } +.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAZCAMAAACGusnyAAACdlBMVEX/////AP+AgICqVaqAQICZM5mAVYCSSZKAQICOOY6ATYCLRouAQICJO4mSSYCIRIiPQICHPIeOR4CGQ4aMQICGPYaLRoCFQ4WKQICPPYWJRYCOQoSJQICNPoSIRICMQoSHQICHRICKQoOHQICKPoOJO4OJQYOMQICMQ4CIQYKLQICIPoKLQ4CKQICNPoKJQISMQ4KJQoSLQYKJQISLQ4KIQoSKQYKIQICIQISMQoSKQYKLQIOLQoOJQYGLQIOKQIOMQoGKQYOLQYGKQIOLQoGJQYOJQIOKQYGJQIOKQoGKQIGLQIKLQ4KKQoGLQYKJQIGKQYKJQIGKQIKJQoGKQYKLQIGKQYKLQIOJQoKKQoOJQYKKQIOJQoKKQoOKQIOLQoKKQYOLQYKJQIOKQoKKQYKKQoKJQYOKQYKLQIOKQoKLQYOKQYKLQIOJQoGKQYKJQYGJQoGKQYKLQoGLQYGKQoGJQYKKQYGJQIKKQoGJQYKLQIKKQYGLQYKKQYGKQYGKQYKJQYOKQoKJQYOKQYKLQYOLQYOKQYKLQYOKQoKKQYKKQYOKQYOJQYKKQYKLQYKKQIKKQoKKQYKKQYKKQoKJQIKKQYKLQYKKQYKKQIKKQYKKQYKKQYKKQIKKQYKJQYGLQYGKQYKKQYKKQYGKQIKKQYGKQYOJQoKKQYOLQYKKQYOKQoKKQYKKQoKKQYKKQYKJQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKJQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKmIDpEAAAA0XRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAiIyQlJycoKissLS4wMTQ1Njc4OTo7PDw+P0BCQ0RISUpLTE1OUFNUVVdYWFlaW15fYGFiY2ZnaGlqa2xtb3BxcnN0dnh5ent8fX5/gIGChIWIioyNjo+QkZOUlZaYmZqbnJ2eoKGio6WmqKmsra6vsLGztre4ubq7vL2+wMHDxMjJysvNzs/Q0dLU1tfY2dvc3t/g4eLj5ebn6Onq6+zt7u/w8vP09fb3+Pn6+/z9/vkVQXAAAAMaSURBVHhe5dXxV1N1GMfxz2ABbDgIAm5VDJOyVDIJLUMaVpBWUZUaGbmqoGpZRSiGiRWp6KoZ5AB0ZY50RImZQIlahKkMYXv/R90dBvET/rJfOr3Ouc8v99zPec59zvf56j+vYKlViSf7250X4Mr3O29Tgq08BdGB4DhcekEJ5YkQKFsgWZdtj9JpV+I8xPjLFqkrsEIqO8PHSpis36jWazcqjEsfJjkvRssVU37SdIOu4XCf5vEJPsnwJpnRNU9JmxhMk8l1gehIrq7hTFjzOD+Vf88629qKMJVNltInFeRexRQyJlNeqd1iGDlSzrIUIyXbyFfm3RYprcQRe7lqtWyGYbfc6dT0R2vmdOOkX3u55C1rP37ftiH+tDby4r/RBT0w8TyEkr+epB9XgPDmSYYWbrhCuFYaIyw3fDQAXTnSkh+ANofiHmWf9l+FY1I90FdQTetstO00o23novzVsJ7uB3/C5TkbjRwZ5JerwV4iRWq9HFbFMaK/d0TYqayRiQPuIxxS3Bu8JWU90/60tKi7vkhaznez0a/TbVOKj5CaOZh6fWG6/Lyv9B/ZLR1gw/S/fpbeVD3MCW1li6SvWDOn65tr99/uvWtBS0XDm4s1t+sOHpG0kpBKx/l77wOSnxLpcx6TXmXLTPQOKYOf9Q1dfr8/SJ2mFdCvl1Yl93DiHUZvXeLJbGSzYu5gVJ2slbSakOR8dxCq5adQ2oFLqsE9Ex3L4qQO0eOPeU5x56bypXp4onSEb5OkICX6lDat55TeoztNKQcJaakrz9KCb95oD69IKq+yKW4XPjknaS52V0TZqE2cTtXjcHSCRmUO88e+85hj3EP74i9p8pylw7lxgMDyyl6OV7ZejnjNMfatu87LxRbH0IS35gt2a4ZjmGpVBdKK3Wr6INk8jWWSGqbA55CKgjBRC6E9w78ydTg3ABS3AFV1QN0Y4Aa2pgEjWnQURj9L0ayK6R2ysEqxHUKzYnLvvyU+i9KM2JHJzE4vyZOyDcOwOsySajeLPc8sNvPJkFlyJd20wpqAzZeAfZ3oWybxd+P/3j+SG3uSBdf2VQAAAABJRU5ErkJggg==') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; } +.jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; } +.jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; } +.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; } +.jasmine_html-reporter .version { color: #aaa; } +.jasmine_html-reporter .banner { margin-top: 14px; } +.jasmine_html-reporter .duration { color: #aaa; float: right; } +.jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; } +.jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; } +.jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: "\02022"; } +.jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; } +.jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; } +.jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; } +.jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; } +.jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; } +.jasmine_html-reporter .symbol-summary li.empty { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.empty:before { color: #ba9d37; content: "\02022"; } +.jasmine_html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; } +.jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +.jasmine_html-reporter .bar.failed { background-color: #ca3a11; } +.jasmine_html-reporter .bar.passed { background-color: #007069; } +.jasmine_html-reporter .bar.skipped { background-color: #bababa; } +.jasmine_html-reporter .bar.errored { background-color: #ca3a11; } +.jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaa; } +.jasmine_html-reporter .bar.menu a { color: #333; } +.jasmine_html-reporter .bar a { color: white; } +.jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; } +.jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; } +.jasmine_html-reporter .running-alert { background-color: #666; } +.jasmine_html-reporter .results { margin-top: 14px; } +.jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } +.jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } +.jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } +.jasmine_html-reporter.showDetails .summary { display: none; } +.jasmine_html-reporter.showDetails #details { display: block; } +.jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } +.jasmine_html-reporter .summary { margin-top: 14px; } +.jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } +.jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; } +.jasmine_html-reporter .summary li.passed a { color: #007069; } +.jasmine_html-reporter .summary li.failed a { color: #ca3a11; } +.jasmine_html-reporter .summary li.empty a { color: #ba9d37; } +.jasmine_html-reporter .summary li.pending a { color: #ba9d37; } +.jasmine_html-reporter .description + .suite { margin-top: 0; } +.jasmine_html-reporter .suite { margin-top: 14px; } +.jasmine_html-reporter .suite a { color: #333; } +.jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; } +.jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; } +.jasmine_html-reporter .failures .spec-detail .description a { color: white; } +.jasmine_html-reporter .result-message { padding-top: 14px; color: #333; white-space: pre; } +.jasmine_html-reporter .result-message span.result { display: block; } +.jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine.js b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine.js new file mode 100755 index 0000000..6bf3f02 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine.js @@ -0,0 +1,3048 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +var getJasmineRequireObj = (function (jasmineGlobal) { + var jasmineRequire; + + if (typeof module !== 'undefined' && module.exports) { + jasmineGlobal = global; + jasmineRequire = exports; + } else { + if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') { + jasmineGlobal = window; + } + jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {}; + } + + function getJasmineRequire() { + return jasmineRequire; + } + + getJasmineRequire().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$, jasmineGlobal); + j$.util = jRequire.util(); + j$.Any = jRequire.Any(); + j$.Anything = jRequire.Anything(j$); + j$.CallTracker = jRequire.CallTracker(); + j$.MockDate = jRequire.MockDate(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.ArrayContaining = jRequire.ArrayContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(j$); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyRegistry = jRequire.SpyRegistry(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.StringMatching = jRequire.StringMatching(j$); + j$.Suite = jRequire.Suite(); + j$.Timer = jRequire.Timer(); + j$.version = jRequire.version(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; + }; + + return getJasmineRequire; +})(this); + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + 'toBe', + 'toBeCloseTo', + 'toBeDefined', + 'toBeFalsy', + 'toBeGreaterThan', + 'toBeLessThan', + 'toBeNaN', + 'toBeNull', + 'toBeTruthy', + 'toBeUndefined', + 'toContain', + 'toEqual', + 'toHaveBeenCalled', + 'toHaveBeenCalledWith', + 'toMatch', + 'toThrow', + 'toThrowError' + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = function(j$, jasmineGlobal) { + j$.unimplementedMethod_ = function() { + throw new Error('unimplemented method'); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { + return jasmineGlobal; + }; + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_('Array', value); + }; + + j$.isString_ = function(value) { + return j$.isA_('String', value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_('Number', value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.fnNameFor = function(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.anything = function() { + return new j$.Anything(); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.stringMatching = function(expected) { + return new j$.StringMatching(expected); + }; + + j$.arrayContaining = function(sample) { + return new j$.ArrayContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + var callData = { + object: this, + args: Array.prototype.slice.apply(arguments) + }; + + callTracker.track(callData); + var returnValue = spyStrategy.exec.apply(this, arguments); + callData.returnValue = returnValue; + + return returnValue; + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) { + methodNames = baseName; + baseName = 'unknown'; + } + + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw 'createSpyObj requires a non-empty array of method names to create spies for'; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; +}; + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(//g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + util.arrayContains = function(array, search) { + var i = array.length; + while (i--) { + if (array[i] === search) { + return true; + } + } + return false; + }; + + util.clone = function(obj) { + if (Object.prototype.toString.apply(obj) === '[object Array]') { + return obj.slice(); + } + + var cloned = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + cloned[prop] = obj[prop]; + } + } + + return cloned; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.queueableFn = attrs.queueableFn; + this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; }; + this.userContext = attrs.userContext || function() { return {}; }; + this.onStart = attrs.onStart || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + + if (!this.queueableFn.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [], + passedExpectations: [], + pendingReason: '' + }; + } + + Spec.prototype.addExpectationResult = function(passed, data) { + var expectationResult = this.expectationResultFactory(data); + if (passed) { + this.result.passedExpectations.push(expectationResult); + } else { + this.result.failedExpectations.push(expectationResult); + } + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.markedPending || this.disabled) { + complete(); + return; + } + + var fns = this.beforeAndAfterFns(); + var allFns = fns.befores.concat(this.queueableFn).concat(fns.afters); + + this.queueRunnerFactory({ + queueableFns: allFns, + onException: function() { self.onException.apply(self, arguments); }, + onComplete: complete, + userContext: this.userContext() + }); + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.onException = function onException(e) { + if (Spec.isPendingSpecException(e)) { + this.pend(extractCustomPendingMessage(e)); + return; + } + + this.addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: e + }); + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function(message) { + this.markedPending = true; + if (message) { + this.result.pendingReason = message; + } + }; + + Spec.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.isExecutable = function() { + return !this.disabled && !this.markedPending; + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + var extractCustomPendingMessage = function(e) { + var fullMessage = e.toString(), + boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage), + boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length; + + return fullMessage.substr(boilerplateEnd); + }; + + Spec.pendingSpecExceptionMessage = '=> marked Pending'; + + Spec.isPendingSpecException = function(e) { + return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Spec = jasmineRequire.Spec; +} + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global)); + + var runnableLookupTable = {}; + var runnableResources = {}; + + var currentSpec = null; + var currentlyExecutingSuites = []; + var currentDeclarationSuite = null; + + var currentSuite = function() { + return currentlyExecutingSuites[currentlyExecutingSuites.length - 1]; + }; + + var currentRunnable = function() { + return currentSpec || currentSuite(); + }; + + var reporter = new j$.ReportDispatcher([ + 'jasmineStarted', + 'jasmineDone', + 'suiteStarted', + 'suiteDone', + 'specStarted', + 'specDone' + ]); + + this.specFilter = function() { + return true; + }; + + this.addCustomEqualityTester = function(tester) { + if(!currentRunnable()) { + throw new Error('Custom Equalities must be added in a before function or a spec'); + } + runnableResources[currentRunnable().id].customEqualityTesters.push(tester); + }; + + this.addMatchers = function(matchersToAdd) { + if(!currentRunnable()) { + throw new Error('Matchers must be added in a before function or a spec'); + } + var customMatchers = runnableResources[currentRunnable().id].customMatchers; + for (var matcherName in matchersToAdd) { + customMatchers[matcherName] = matchersToAdd[matcherName]; + } + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: runnableResources[spec.id].customEqualityTesters, + customMatchers: runnableResources[spec.id].customMatchers, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var defaultResourcesForRunnable = function(id, parentRunnableId) { + var resources = {spies: [], customEqualityTesters: [], customMatchers: {}}; + + if(runnableResources[parentRunnableId]){ + resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters); + resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers); + } + + runnableResources[id] = resources; + }; + + var clearResourcesForRunnable = function(id) { + spyRegistry.clearSpies(); + delete runnableResources[id]; + }; + + var beforeAndAfterFns = function(suite, runnablesExplictlySet) { + return function() { + var befores = [], + afters = [], + beforeAlls = [], + afterAlls = []; + + while(suite) { + befores = befores.concat(suite.beforeFns); + afters = afters.concat(suite.afterFns); + + if (runnablesExplictlySet()) { + beforeAlls = beforeAlls.concat(suite.beforeAllFns); + afterAlls = afterAlls.concat(suite.afterAllFns); + } + + suite = suite.parentSuite; + } + return { + befores: beforeAlls.reverse().concat(befores.reverse()), + afters: afters.concat(afterAlls) + }; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + var maximumSpecCallbackDepth = 20; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + options.timer = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}; + options.fail = self.fail; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory + }); + runnableLookupTable[topSuite.id] = topSuite; + defaultResourcesForRunnable(topSuite.id); + currentDeclarationSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + if(runnablesToRun) { + runnablesExplictlySet = true; + } else if (focusedRunnables.length) { + runnablesExplictlySet = true; + runnablesToRun = focusedRunnables; + } else { + runnablesToRun = [topSuite.id]; + } + + var allFns = []; + for(var i = 0; i < runnablesToRun.length; i++) { + var runnable = runnableLookupTable[runnablesToRun[i]]; + allFns.push((function(runnable) { return { fn: function(done) { runnable.execute(done); } }; })(runnable)); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + queueRunnerFactory({queueableFns: allFns, onComplete: reporter.jasmineDone}); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + var spyRegistry = new j$.SpyRegistry({currentSpies: function() { + if(!currentRunnable()) { + throw new Error('Spies must be created in a before function or a spec'); + } + return runnableResources[currentRunnable().id].spies; + }}); + + this.spyOn = function() { + return spyRegistry.spyOn.apply(spyRegistry, arguments); + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentDeclarationSuite, + queueRunner: queueRunnerFactory, + onStart: suiteStarted, + expectationFactory: expectationFactory, + expectationResultFactory: expectationResultFactory, + runnablesExplictlySetGetter: runnablesExplictlySetGetter, + resultCallback: function(attrs) { + if (!suite.disabled) { + clearResourcesForRunnable(suite.id); + } + currentlyExecutingSuites.pop(); + reporter.suiteDone(attrs); + } + }); + + runnableLookupTable[suite.id] = suite; + return suite; + + function suiteStarted(suite) { + currentlyExecutingSuites.push(suite); + defaultResourcesForRunnable(suite.id, suite.parentSuite.id); + reporter.suiteStarted(suite.result); + } + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + addSpecsToSuite(suite, specDefinitions); + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = this.describe(description, specDefinitions); + suite.disable(); + return suite; + }; + + var focusedRunnables = []; + + this.fdescribe = function(description, specDefinitions) { + var suite = suiteFactory(description); + suite.isFocused = true; + + focusedRunnables.push(suite.id); + unfocusAncestor(); + addSpecsToSuite(suite, specDefinitions); + + return suite; + }; + + function addSpecsToSuite(suite, specDefinitions) { + var parentSuite = currentDeclarationSuite; + parentSuite.addChild(suite); + currentDeclarationSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + self.it('encountered a declaration exception', function() { + throw declarationError; + }); + } + + currentDeclarationSuite = parentSuite; + } + + function findFocusedAncestor(suite) { + while (suite) { + if (suite.isFocused) { + return suite.id; + } + suite = suite.parentSuite; + } + + return null; + } + + function unfocusAncestor() { + var focusedAncestor = findFocusedAncestor(currentDeclarationSuite); + if (focusedAncestor) { + for (var i = 0; i < focusedRunnables.length; i++) { + if (focusedRunnables[i] === focusedAncestor) { + focusedRunnables.splice(i, 1); + break; + } + } + } + } + + var runnablesExplictlySet = false; + + var runnablesExplictlySetGetter = function(){ + return runnablesExplictlySet; + }; + + var specFactory = function(description, fn, suite, timeout) { + totalSpecsDefined++; + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeAndAfterFns: beforeAndAfterFns(suite, runnablesExplictlySetGetter), + expectationFactory: expectationFactory, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + userContext: function() { return suite.clonedSharedUserContext(); }, + queueableFn: { + fn: fn, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + } + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function specResultCallback(result) { + clearResourcesForRunnable(spec.id); + currentSpec = null; + reporter.specDone(result); + } + + function specStarted(spec) { + currentSpec = spec; + defaultResourcesForRunnable(spec.id, suite.id); + reporter.specStarted(spec.result); + } + }; + + this.it = function(description, fn, timeout) { + var spec = specFactory(description, fn, currentDeclarationSuite, timeout); + currentDeclarationSuite.addChild(spec); + return spec; + }; + + this.xit = function() { + var spec = this.it.apply(this, arguments); + spec.pend(); + return spec; + }; + + this.fit = function(){ + var spec = this.it.apply(this, arguments); + + focusedRunnables.push(spec.id); + unfocusAncestor(); + return spec; + }; + + this.expect = function(actual) { + if (!currentRunnable()) { + throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); + } + + return currentRunnable().expect(actual); + }; + + this.beforeEach = function(beforeEachFunction, timeout) { + currentDeclarationSuite.beforeEach({ + fn: beforeEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.beforeAll = function(beforeAllFunction, timeout) { + currentDeclarationSuite.beforeAll({ + fn: beforeAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterEach = function(afterEachFunction, timeout) { + currentDeclarationSuite.afterEach({ + fn: afterEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterAll = function(afterAllFunction, timeout) { + currentDeclarationSuite.afterAll({ + fn: afterAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.pending = function(message) { + var fullMessage = j$.Spec.pendingSpecExceptionMessage; + if(message) { + fullMessage += message; + } + throw fullMessage; + }; + + this.fail = function(error) { + var message = 'Failed'; + if (error) { + message += ': '; + message += error.message || error; + } + + currentRunnable().addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + message: message, + error: error && error.message ? error : null + }); + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = 'loaded'; + + this.started = false; + this.finished = false; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function() { + this.finished = true; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = [], + suites_hash = {}; + + this.suiteStarted = function(result) { + suites_hash[result.id] = result; + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + this.suiteResults = function(index, length) { + return suites.slice(index, index + length); + }; + + function storeSuite(result) { + suites.push(result); + suites_hash[result.id] = result; + } + + this.suites = function() { + return suites_hash; + }; + + var specs = []; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionScheduler, mockDate) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + timer; + + + self.install = function() { + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + installed = true; + + return self; + }; + + self.uninstall = function() { + delayedFunctionScheduler.reset(); + mockDate.uninstall(); + replace(global, realTimingFunctions); + + timer = realTimingFunctions; + installed = false; + }; + + self.mockDate = function(initialDate) { + mockDate.install(initialDate); + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + mockDate.tick(millis); + delayedFunctionScheduler.tick(millis); + } else { + throw new Error('Mock clock is not installed, use jasmine.clock().install()'); + } + }; + + return self; + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, n); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + self.reset = function() { + currentTime = 0; + scheduledLookup = []; + scheduledFunctions = {}; + delayedFnCount = 0; + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function forEachFunction(funcsToRun, callback) { + for (var i = 0; i < funcsToRun.length; ++i) { + callback(funcsToRun[i]); + } + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + forEachFunction(funcsToRun, function(funcToRun) { + if (funcToRun.recurring) { + reschedule(funcToRun); + } + }); + + forEachFunction(funcsToRun, function(funcToRun) { + funcToRun.funcToCall.apply(null, funcToRun.params || []); + }); + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = ''; + + if (error.name && error.message) { + message += error.name + ': ' + error.message; + } else { + message += error.toString() + ' thrown'; + } + + if (error.fileName || error.sourceURL) { + message += ' in ' + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += ' (line ' + (error.line || error.lineNumber) + ')'; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + var customMatchers = options.customMatchers || {}; + for (var matcherName in customMatchers) { + this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]); + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ''; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + if (Object.prototype.toString.apply(result.message) === '[object Function]') { + message = result.message(); + } else { + message = result.message; + } + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + var result = { + matcherName: options.matcherName, + message: message(), + stack: stack(), + passed: options.passed + }; + + if(!result.passed) { + result.expected = options.expected; + result.actual = options.actual; + } + + return result; + + function message() { + if (options.passed) { + return 'Passed.'; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ''; + } + + function stack() { + if (options.passed) { + return ''; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().MockDate = function() { + function MockDate(global) { + var self = this; + var currentTime = 0; + + if (!global || !global.Date) { + self.install = function() {}; + self.tick = function() {}; + self.uninstall = function() {}; + return self; + } + + var GlobalDate = global.Date; + + self.install = function(mockDate) { + if (mockDate instanceof GlobalDate) { + currentTime = mockDate.getTime(); + } else { + currentTime = new GlobalDate().getTime(); + } + + global.Date = FakeDate; + }; + + self.tick = function(millis) { + millis = millis || 0; + currentTime = currentTime + millis; + }; + + self.uninstall = function() { + currentTime = 0; + global.Date = GlobalDate; + }; + + createDateProperties(); + + return self; + + function FakeDate() { + switch(arguments.length) { + case 0: + return new GlobalDate(currentTime); + case 1: + return new GlobalDate(arguments[0]); + case 2: + return new GlobalDate(arguments[0], arguments[1]); + case 3: + return new GlobalDate(arguments[0], arguments[1], arguments[2]); + case 4: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]); + case 5: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4]); + case 6: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5]); + default: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5], arguments[6]); + } + } + + function createDateProperties() { + FakeDate.prototype = GlobalDate.prototype; + + FakeDate.now = function() { + if (GlobalDate.now) { + return currentTime; + } else { + throw new Error('Browser does not support Date.now()'); + } + }; + + FakeDate.toSource = GlobalDate.toSource; + FakeDate.toString = GlobalDate.toString; + FakeDate.parse = GlobalDate.parse; + FakeDate.UTC = GlobalDate.UTC; + } + } + + return MockDate; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + this.seen = []; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === 0 && 1/value === -Infinity) { + this.emitScalar('-0'); + } else if (value === j$.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar('spy on ' + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (j$.util.arrayContains(this.seen, value)) { + this.emitScalar(''); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + this.seen.push(value); + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + this.seen.pop(); + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append('\'' + value + '\''); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Array'); + return; + } + var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); + this.append('[ '); + for (var i = 0; i < length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + if(array.length > length){ + this.append(', ...'); + } + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null'; + this.append(constructorName); + + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + return; + } + + var self = this; + this.append('({ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.append(property); + self.append(': '); + if (isGetter) { + self.append(''); + } else { + self.format(obj[property]); + } + }); + + this.append(' })'); + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function(j$) { + + function once(fn) { + var called = false; + return function() { + if (!called) { + called = true; + fn(); + } + }; + } + + function QueueRunner(attrs) { + this.queueableFns = attrs.queueableFns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.userContext = attrs.userContext || {}; + this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + this.fail = attrs.fail || function() {}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.queueableFns, 0); + }; + + QueueRunner.prototype.run = function(queueableFns, recursiveIndex) { + var length = queueableFns.length, + self = this, + iterativeIndex; + + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var queueableFn = queueableFns[iterativeIndex]; + if (queueableFn.fn.length > 0) { + attemptAsync(queueableFn); + return; + } else { + attemptSync(queueableFn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(queueableFn) { + try { + queueableFn.fn.call(self.userContext); + } catch (e) { + handleException(e, queueableFn); + } + } + + function attemptAsync(queueableFn) { + var clearTimeout = function () { + Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]); + }, + next = once(function () { + clearTimeout(timeoutId); + self.run(queueableFns, iterativeIndex + 1); + }), + timeoutId; + + next.fail = function() { + self.fail.apply(null, arguments); + next(); + }; + + if (queueableFn.timeout) { + timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { + var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'); + onException(error, queueableFn); + next(); + }, queueableFn.timeout()]]); + } + + try { + queueableFn.fn.call(self.userContext, next); + } catch (e) { + handleException(e, queueableFn); + next(); + } + } + + function onException(e, queueableFn) { + self.onException(e); + } + + function handleException(e, queueableFn) { + onException(e, queueableFn); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyRegistry = function(j$) { + + function SpyRegistry(options) { + options = options || {}; + var currentSpies = options.currentSpies || function() { return []; }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); + } + + if (j$.util.isUndefined(methodName)) { + throw new Error('No method name supplied'); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + currentSpies().push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + this.clearSpies = function() { + var spies = currentSpies(); + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + }; + } + + return SpyRegistry; +}; + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || 'unknown', + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.returnValues = function() { + var values = Array.prototype.slice.call(arguments); + plan = function () { + return values.shift(); + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function() { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.onStart = attrs.onStart || function() {}; + this.resultCallback = attrs.resultCallback || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.expectationFactory = attrs.expectationFactory; + this.expectationResultFactory = attrs.expectationResultFactory; + this.runnablesExplictlySetGetter = attrs.runnablesExplictlySetGetter || function() {}; + + this.beforeFns = []; + this.afterFns = []; + this.beforeAllFns = []; + this.afterAllFns = []; + this.queueRunner = attrs.queueRunner || function() {}; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [] + }; + } + + Suite.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.beforeAll = function(fn) { + this.beforeAllFns.push(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.afterAll = function(fn) { + this.afterAllFns.push(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'finished'; + } + }; + + Suite.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.disabled) { + complete(); + return; + } + + var allFns = []; + + for (var i = 0; i < this.children.length; i++) { + allFns.push(wrapChildAsAsync(this.children[i])); + } + + if (this.isExecutable()) { + allFns = this.beforeAllFns.concat(allFns); + allFns = allFns.concat(this.afterAllFns); + } + + this.queueRunner({ + queueableFns: allFns, + onComplete: complete, + userContext: this.sharedUserContext(), + onException: function() { self.onException.apply(self, arguments); } + }); + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + + function wrapChildAsAsync(child) { + return { fn: function(done) { child.execute(done); } }; + } + }; + + Suite.prototype.isExecutable = function() { + var runnablesExplicitlySet = this.runnablesExplictlySetGetter(); + return !runnablesExplicitlySet && hasExecutableChild(this.children); + }; + + Suite.prototype.sharedUserContext = function() { + if (!this.sharedContext) { + this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {}; + } + + return this.sharedContext; + }; + + Suite.prototype.clonedSharedUserContext = function() { + return clone(this.sharedUserContext()); + }; + + Suite.prototype.onException = function() { + if(isAfterAll(this.children)) { + var data = { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: arguments[0] + }; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.onException.apply(child, arguments); + } + } + }; + + Suite.prototype.addExpectationResult = function () { + if(isAfterAll(this.children) && isFailure(arguments)){ + var data = arguments[1]; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.addExpectationResult.apply(child, arguments); + } + } + }; + + function isAfterAll(children) { + return children && children[0].result.status; + } + + function isFailure(args) { + return !args[0]; + } + + function hasExecutableChild(children) { + var foundActive = false; + for (var i = 0; i < children.length; i++) { + if (children[i].isExecutable()) { + foundActive = true; + break; + } + } + return foundActive; + } + + function clone(obj) { + var clonedObj = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + clonedObj[prop] = obj[prop]; + } + } + + return clonedObj; + } + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + var defaultNow = (function(Date) { + return function() { return new Date().getTime(); }; + })(Date); + + function Timer(options) { + options = options || {}; + + var now = options.now || defaultNow, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().Any = function() { + + function Any(expectedObject) { + this.expectedObject = expectedObject; + } + + Any.prototype.asymmetricMatch = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return ''; + }; + + return Any; +}; + +getJasmineRequireObj().Anything = function(j$) { + + function Anything() {} + + Anything.prototype.asymmetricMatch = function(other) { + return !j$.util.isUndefined(other) && other !== null; + }; + + Anything.prototype.jasmineToString = function() { + return ''; + }; + + return Anything; +}; + +getJasmineRequireObj().ArrayContaining = function(j$) { + function ArrayContaining(sample) { + this.sample = sample; + } + + ArrayContaining.prototype.asymmetricMatch = function(other) { + var className = Object.prototype.toString.call(this.sample); + if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); } + + for (var i = 0; i < this.sample.length; i++) { + var item = this.sample[i]; + if (!j$.matchersUtil.contains(other, item)) { + return false; + } + } + + return true; + }; + + ArrayContaining.prototype.jasmineToString = function () { + return ''; + }; + + return ArrayContaining; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + ObjectContaining.prototype.asymmetricMatch = function(other) { + if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } + + for (var property in this.sample) { + if (!Object.prototype.hasOwnProperty.call(other, property) || + !j$.matchersUtil.equals(this.sample[property], other[property])) { + return false; + } + } + + return true; + }; + + ObjectContaining.prototype.jasmineToString = function() { + return ''; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().StringMatching = function(j$) { + + function StringMatching(expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + this.regexp = new RegExp(expected); + } + + StringMatching.prototype.asymmetricMatch = function(other) { + return this.regexp.test(other); + }; + + StringMatching.prototype.jasmineToString = function() { + return ''; + }; + + return StringMatching; +}; + +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if ((Object.prototype.toString.apply(haystack) === '[object Array]') || + (!!haystack && !haystack.indexOf)) + { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + + return !!haystack && haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = 'Expected ' + + j$.pp(actual) + + (isNot ? ' not ' : ' ') + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ','; + } + message += ' ' + j$.pp(expected[i]); + } + } + + return message + '.'; + } + }; + + function isAsymmetric(obj) { + return obj && j$.isA_('Function', obj.asymmetricMatch); + } + + function asymmetricMatch(a, b) { + var asymmetricA = isAsymmetric(a), + asymmetricB = isAsymmetric(b); + + if (asymmetricA && asymmetricB) { + return undefined; + } + + if (asymmetricA) { + return a.asymmetricMatch(b); + } + + if (asymmetricB) { + return b.asymmetricMatch(a); + } + } + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + var asymmetricResult = asymmetricMatch(a, b); + if (!j$.util.isUndefined(asymmetricResult)) { + return asymmetricResult; + } + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + + var aIsDomNode = j$.isDomNode(a); + var bIsDomNode = j$.isDomNode(b); + if (aIsDomNode && bIsDomNode) { + // At first try to use DOM3 method isEqualNode + if (a.isEqualNode) { + return a.isEqualNode(b); + } + // IE8 doesn't support isEqualNode, try to use outerHTML && innerText + var aIsElement = a instanceof Element; + var bIsElement = b instanceof Element; + if (aIsElement && bIsElement) { + return a.outerHTML == b.outerHTML; + } + if (aIsElement || bIsElement) { + return false; + } + return a.innerText == b.innerText && a.textContent == b.textContent; + } + if (aIsDomNode || bIsDomNode) { + return false; + } + + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + // Compare array lengths to determine if a deep comparison is necessary. + if (className == '[object Array]' && a.length !== b.length) { + result = false; + } + + if (result) { + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && + isFunction(bCtor) && (bCtor instanceof bCtor))) { + return false; + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = 'Expected actual not to be NaN.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called.' : + 'Expected spy ' + actual.and.identity() + ' to have been called.'; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util, customEqualityTesters) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { + result.pass = true; + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; + } else { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function(j$) { + + function toMatch() { + return { + compare: function(actual, expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = 'Expected function to throw an exception.'; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; + } else { + result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError (util) { + return { + compare: function(actual) { + var threw = false, + pass = {pass: true}, + fail = {pass: false}, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + var errorMatcher = getMatcher.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + fail.message = 'Expected function to throw an Error.'; + return fail; + } + + if (!(thrown instanceof Error)) { + fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; + return fail; + } + + if (errorMatcher.hasNoSpecifics()) { + pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.'; + return pass; + } + + if (errorMatcher.matches(thrown)) { + pass.message = function() { + return 'Expected function not to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + '.'; + }; + return pass; + } else { + fail.message = function() { + return 'Expected function to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + + ', but it threw ' + errorMatcher.thrownDescription(thrown) + '.'; + }; + return fail; + } + } + }; + + function getMatcher() { + var expected = null, + errorType = null; + + if (arguments.length == 2) { + expected = arguments[1]; + if (isAnErrorType(expected)) { + errorType = expected; + expected = null; + } + } else if (arguments.length > 2) { + errorType = arguments[1]; + expected = arguments[2]; + if (!isAnErrorType(errorType)) { + throw new Error('Expected error type is not an Error.'); + } + } + + if (expected && !isStringOrRegExp(expected)) { + if (errorType) { + throw new Error('Expected error message is not a string or RegExp.'); + } else { + throw new Error('Expected is not an Error, string, or RegExp.'); + } + } + + function messageMatch(message) { + if (typeof expected == 'string') { + return expected == message; + } else { + return expected.test(message); + } + } + + return { + errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception', + thrownDescription: function(thrown) { + var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception', + thrownMessage = ''; + + if (expected) { + thrownMessage = ' with message ' + j$.pp(thrown.message); + } + + return thrownName + thrownMessage; + }, + messageDescription: function() { + if (expected === null) { + return ''; + } else if (expected instanceof RegExp) { + return ' with a message matching ' + j$.pp(expected); + } else { + return ' with message ' + j$.pp(expected); + } + }, + hasNoSpecifics: function() { + return expected === null && errorType === null; + }, + matches: function(error) { + return (errorType === null || error.constructor === errorType) && + (expected === null || messageMatch(error.message)); + } + }; + } + + function isStringOrRegExp(potential) { + return potential instanceof RegExp || (typeof potential == 'string'); + } + + function isAnErrorType(type) { + if (typeof type !== 'function') { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + + return toThrowError; +}; + +getJasmineRequireObj().interface = function(jasmine, env) { + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + fdescribe: function(description, specDefinitions) { + return env.fdescribe(description, specDefinitions); + }, + + it: function() { + return env.it.apply(env, arguments); + }, + + xit: function() { + return env.xit.apply(env, arguments); + }, + + fit: function() { + return env.fit.apply(env, arguments); + }, + + beforeEach: function() { + return env.beforeEach.apply(env, arguments); + }, + + afterEach: function() { + return env.afterEach.apply(env, arguments); + }, + + beforeAll: function() { + return env.beforeAll.apply(env, arguments); + }, + + afterAll: function() { + return env.afterAll.apply(env, arguments); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending.apply(env, arguments); + }, + + fail: function() { + return env.fail.apply(env, arguments); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }), + + jasmine: jasmine + }; + + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + jasmine.clock = function() { + return env.clock; + }; + + return jasmineInterface; +}; + +getJasmineRequireObj().version = function() { + return '2.2.0'; +}; diff --git a/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine_favicon.png b/platforms/android/platform_www/cdvtests/jasmine-2.2.0/jasmine_favicon.png new file mode 100755 index 0000000000000000000000000000000000000000..3b84583be4b9d5ae9cd5cae07b2dbaa5ebb0ad1c GIT binary patch literal 1486 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0VDb;}332@o1PuQh8X8uGu4-^- zn3*=SA+%wV=cI;&hMB$%-Lc(MLmN8%IwwUpbcA;F2Q;)twND9bn-tpC9oR4-vb8I; zp+Bg#FSKP+P(yD-%f!%zo}iZgh=%Ua=KkP@iNVbiLYsSn8~VeW`+}P$1~&ACHcbd_ z=nZb_32o{NZkZ6&1k^hrxT!a&r8lIdAIJ@9nh?|iRMsET+#A%`AKKg-(%2K)*cZ|~ zA-J&*$PEUH08MM`4Q=iVY3vVfhN$TUscGs5sR8P31X|G_+SnTcv<0XVC=Rr!u|K4# zHyCJU6UYRR;%2BtKv^I=q#2|DECn_k@wXU|=@ zeD&J(8#iy=zH|5fgNKiwJbm`!<*V0k-oF3v@zdvTKYsrD^Y>rGdNDU(R>|^oaSW-5 z%f0Y2x+hSk{p0&HA;E60Oq1S3r7U;(X3MH#?W9nxXzk)srlC4P;cZYe&v*G}mgi%< ze(bTl{@&_)cX8b-kvX%ff9D22e*M~7edm|;|Jb8m2JBzkzKiSBKR0n*?XSyM6fxZY zJ4bb;vGKRiKP(ztq3sJx9iq$Re`-EEQU0KE$sdyqayzp6H-7x+oGKZ_6;hQ_Y|p&y z7o`N7g@ z8Yl1HKL;mFo4BdxljF1}KbfMR6nNdLyPnEap1MqBdI?{g$L58$P8+wftLX5R70)7n`#pwItnbma$w{%`M(`wpsu2rJ60rdGCc> z+~lm)viMYM`=uXwK_$`#_UtRZMO=2-IV)l2vc~)doyPvg-RmxtACQ#v{7}5$&isV+ zPws~n?@yNGy#H1=vTI?;CAl9~9#VgqJ+7`4y~R+Wyj0U+){?lm9r6mtf0gl_VmUW^ z%eje%?jM%^eLuUg#ybXaQM{yQy&8UgiQ`HQ+=iTpjfd0iJ@ ssyFi&dF4%9dEry;pNN)Q>$jg_dr3r;PHA*CFc&d+y85}Sb4q9e0J812W&i*H literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/jasmine-medic.js b/platforms/android/platform_www/cdvtests/jasmine-medic.js new file mode 100644 index 0000000..4194f3a --- /dev/null +++ b/platforms/android/platform_www/cdvtests/jasmine-medic.js @@ -0,0 +1,123 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* global device */ + +jasmineRequire.medic = function(j$) { + j$.MedicReporter = jasmineRequire.MedicReporter(j$); +}; + +jasmineRequire.MedicReporter = function(j$) { + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + var platformMap = { + 'ipod touch':'ios', + 'iphone':'ios' + }; + + function MedicReporter(options) { + var logoptions = options.log || { logurl: 'http://127.0.0.1:5984/' }, // TODO: http://localhost:6800 + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0; + + + var serverurl = logoptions.logurl; + + this.initialize = function() { + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + this.suiteStarted = function(result) { + }; + + this.suiteDone = function(result) { + + }; + + this.specStarted = function(result) { + // Start timing this spec + }; + + this.specDone = function(result) { + if (result.status != "disabled") { + specsExecuted++; + } + if (result.status == "failed") { + failureCount++; + results.push(result); + } + if (result.status == "pending") { + pendingSpecCount++; + } + }; + + var buildResults = function(){ + var json ={specs:specsExecuted, failures:failureCount, results: results}; + return json; + }; + + this.jasmineDone = function() { + var p = 'Desktop'; + var devmodel='none'; + var version = cordova.version; + if(typeof device != 'undefined') { + p = device.platform.toLowerCase(); + devmodel=device.model || device.name; + version = device.version.toLowerCase(); + } + + this.postTests({ + mobilespec:buildResults(), + platform:(platformMap.hasOwnProperty(p) ? platformMap[p] : p), + version:version, + sha: options.sha, + timestamp:Math.round(Math.floor((new Date()).getTime() / 1000)), + model:devmodel + }); + + }; + + this.postTests = function(json) { + console.log('posting tests'); + + var xhr = new XMLHttpRequest(); + var doc_id = [options.sha, json.version, json.model].map(encodeURIComponent).join('__'); + var doc_url = serverurl + '/mobilespec_results/' + doc_id; + xhr.open("PUT", doc_url, true); + xhr.setRequestHeader("Content-Type","application/json"); + xhr.send(JSON.stringify(json)); + }; + return this; + } + + return MedicReporter; +}; diff --git a/platforms/android/platform_www/cdvtests/main-bootstrap.js b/platforms/android/platform_www/cdvtests/main-bootstrap.js new file mode 100644 index 0000000..58624b7 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/main-bootstrap.js @@ -0,0 +1,26 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +document.addEventListener("deviceready", function() { + 'use strict'; + + cordova.require('cordova-plugin-test-framework.main').init(); +}); diff --git a/platforms/android/platform_www/cdvtests/main.css b/platforms/android/platform_www/cdvtests/main.css new file mode 100644 index 0000000..9223dbd --- /dev/null +++ b/platforms/android/platform_www/cdvtests/main.css @@ -0,0 +1,148 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +*, *:before, *:after { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +html, body { + height: 100%; + width: 100%; + margin: 0; + padding: 0; +} + +#title { + position: fixed; + height: 30px; + width: 100%; + top: 0; + z-index: 1000; + + background-color: #75B2F0; + font-size: 25px; + text-align: center; + font-weight: bold; + white-space: nowrap; +} + +#middle { + position: absolute; + top: 30px; + bottom: 20px; + padding-bottom: 40%; + width: 100%; + overflow-y: auto; + overflow-x: auto; +} + +#log { + position: fixed; + height: 20px; + width: 100%; + bottom: 0; + z-index: 1000; + border-top: 2px solid #777; + transition: 0.25s ease; +} + +body.expanded-log #middle { + margin-bottom: 40%; +} + +body.expanded-log #log { + height: 40%; +} + +#log--title { + position: absolute; + top: 0; + height: 20px; + width: 100%; + background-color: #93AAC2; +} + +#log--content { + position: absolute; + top: 20px; + bottom: 0; + width: 100%; + overflow-x: none; + overflow-y: auto; + background-color: white; +} + +.log--content--line { + border-bottom: 1px solid #ccc; + white-space: pre; +} + +.log--content--line--log { + background-color: white; +} + +.log--content--line--warn { + background-color: #FCFFA6; +} + +.log--content--line--error { + background-color: #FFA6A6; +} + +#info{ + background:#ffa; + border: 1px solid #ffd324; + -webkit-border-radius: 5px; + border-radius: 5px; + clear:both; + margin:15px 6px 0; + min-width:295px; + max-width:97%; + padding:4px 0px 2px 10px; + word-wrap:break-word; + margin-bottom:10px; + display:inline-block; + min-height: 160px; + max-height: 300px; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +#test-enablers-container { + margin: 10px 5px; +} + +#test-expander { + text-decoration: underline; +} + +#test-list { + display: none; +} + +#test-list.expanded { + display: inherit; +} + +#test-list label { + display: block; +} diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/.gitignore b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/.gitignore new file mode 100755 index 0000000..f678651 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/.gitignore @@ -0,0 +1,6 @@ +node_modules +npm-debug.log +tmp +.DS_Store +src/ +.tern-port diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/Gruntfile.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/Gruntfile.js new file mode 100755 index 0000000..1952688 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/Gruntfile.js @@ -0,0 +1,277 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/*global module:false, require:false, process:false*/ + +var path = require('path'), + os = require('os'), + chromiumSrc = process.env.CHROMIUM_SRC || ""; + + +module.exports = function(grunt) { + 'use strict'; + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + + stylus: { + options: { + paths: grunt.file.expand(__dirname + '/node_modules/topcoat-*/src/') + /* FIXME: Utils is the last needing to be moved out of mixins + * folder + */ + .concat(grunt.file.expand(__dirname + '/node_modules/topcoat-utils/src/mixins/')), + compress: false + }, + + mobilelight: { + options: { + import: ['theme-topcoat-mobile-light', 'utils'] + }, + + files: [{ + src: 'node_modules/topcoat-*/src/**/*.styl', + dest: 'css/topcoat-mobile-light.css' + }] + }, + + mobiledark: { + options: { + import: ['theme-topcoat-mobile-dark', 'utils'] + }, + + files: [{ + src: 'node_modules/topcoat-*/src/**/*.styl', + dest: 'css/topcoat-mobile-dark.css' + }] + }, + + desktoplight: { + options: { + import: ['theme-topcoat-desktop-light', 'utils'] + }, + files: [{ + src: [ + 'node_modules/topcoat-*/src/**/*.styl', + '!node_modules/topcoat-navigation-bar/src/*.styl', + '!node_modules/topcoat-list/src/*.styl' + ], + dest: 'css/topcoat-desktop-light.css' + }] + }, + + desktopdark: { + options: { + import: ['theme-topcoat-desktop-dark', 'utils'] + }, + + files: [{ + src: [ + 'node_modules/topcoat-*/src/**/*.styl', + '!node_modules/topcoat-navigation-bar/src/*.styl', + '!node_modules/topcoat-list/src/*.styl' + ], + dest: 'css/topcoat-desktop-dark.css' + }] + } + }, + + topdoc: { + usageguides: { + options: { + source: 'css', + destination: 'demo', + template: 'node_modules/topdoc-theme/', + templateData: { + "title": "Topcoat", + "subtitle": "CSS for clean and fast web apps", + "download": { + "url": "https://github.com/topcoat/topcoat/archive/v0.7.0.zip", + "label": "Download" + }, + "homeURL": "http://topcoat.io", + "siteNav": [ + { + "url": "http://topcoat.io/topcoat", + "text": "Demo" + }, + { + "url": "http://bench.topcoat.io/", + "text": "Benchmarks" + }, + { + "url": "http://topcoat.io/blog", + "text": "Blog" + } + ] + } + } + } + }, + + autoprefixer: { + dist: { + options: { + /* + * Add target browsers here + * https://github.com/ai/autoprefixer#browsers + * browsers: ['android 4'] + */ + }, + files: [{ + src: 'css/topcoat-desktop-dark.css', + dest: 'css/topcoat-desktop-dark.css' + }, + { + src: 'css/topcoat-desktop-light.css', + dest: 'css/topcoat-desktop-light.css' + }, + { + src: 'css/topcoat-mobile-dark.css', + dest: 'css/topcoat-mobile-dark.css' + }, + { + src: 'css/topcoat-mobile-light.css', + dest: 'css/topcoat-mobile-light.css' + }] + } + + }, + + cssmin: { + minify: { + expand: true, + cwd: 'css', + src: ['*.css', '!*.min.css'], + dest: 'css', + ext: '.min.css' + } + }, + + htmlmin: { + telemetry: { + options: { + removeComments: true, + collapseWhitespace: true + }, + files: [{ + expand: true, + src: ['dev/test/**/topcoat/*.html'], + dest: '', + ext: '.test.html', + }], + }, + }, + + clean: { + release: ['css'] + }, + + copy: { + release: { + files: [{ + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/font/**', + dest: 'font' + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/img/*', + dest: 'img' + }] + }, + + telemetry: { + files: [{ + expand: true, + cwd: 'dev/test/perf/telemetry/perf/', + src: ['**'], + dest: path.join(chromiumSrc, 'tools/perf/') + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/font/**', + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/font') + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/img/*', + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/img') + }, { + src: ['css/**'], + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/') + }] + } + }, + + jshint: { + options: { + curly: true, + eqeqeq: true, + immed: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + unused: true, + boss: true, + eqnull: true, + browser: true, + globals: { + jQuery: true + } + }, + gruntfile: { + src: 'Gruntfile.js' + }, + lib_test: { + src: ['dev/lib/**/*.js', 'dev/test/**/*.js'] + } + }, + + watch: { + files: ['src/**/*.styl'], + tasks: ['compile'] + } + + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-jade'); + grunt.loadNpmTasks('grunt-contrib-stylus'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-exec'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-topdoc'); + grunt.loadNpmTasks('grunt-contrib-cssmin'); + grunt.loadNpmTasks('grunt-contrib-htmlmin'); + grunt.loadNpmTasks('grunt-autoprefixer'); + + //Load local tasks + grunt.loadTasks('dev/tasks'); + + // Default task. + grunt.registerTask('default', ['clean', 'stylus', 'autoprefixer', 'cssmin', 'topdoc', 'copy:release']); + grunt.registerTask('release', ['default', 'clean:src']); + grunt.registerTask('compile', ['topcoat:compile', 'topdoc', 'copy:release']); + + grunt.registerTask('telemetry', '', function(platform, theme) { + if (chromiumSrc === "") grunt.fail.warn("Set CHROMIUM_SRC to point to the correct location\n"); + grunt.task.run('check_chromium_src', 'perf:'.concat(platform || 'mobile').concat(':').concat(theme || 'light'), 'htmlmin:telemetry', 'copy:telemetry'); + }); +}; diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/LICENSE b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/LICENSE new file mode 100755 index 0000000..242fd8a --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/LICENSE @@ -0,0 +1,203 @@ +Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/NOTICE b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/NOTICE new file mode 100755 index 0000000..3c8ddfa --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/NOTICE @@ -0,0 +1,193 @@ +Topcoat is licensed under the Apache license version 2.0, January 2004 (see LICENSE file). + +Topcoat uses the following third party libraries that may have licenses +differing from that of Topcoat itself. You can find the libraries and their +respective licenses below. + + - Source Code Pro ./src/font/SourceCodePro + + https://github.com/adobe/source-code-pro + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is available with a FAQ at: http://scripts.sil.org/OFL + +- Source Sans Pro ./src/font/SourceSansPro + + https://github.com/adobe/source-sans-pro + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is available with a FAQ at: http://scripts.sil.org/OFL + +The following frameworks and libraries are provided just for testing and benchmarking and, as provided, should not be included as part of Topcoat output. + + - Bootstrap - ./test/third-party/bootstrap + + https://github.com/twitter/bootstrap + + Copyright 2012 Twitter, Inc + Licensed under the Apache License v2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + - jQuery - ./test/third-party/jquery-1.8.2.js + + https://github.com/jquery/jquery + + Copyright 2011, John Resig + Dual licensed under the MIT or GPL Version 2 licenses. + http://jquery.org/license + + Includes Sizzle.js + http://sizzlejs.com/ + Copyright 2011, The Dojo Foundation + Released under the MIT, BSD, and GPL Licenses. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + - Modernizr - ./test/third-party/modernizr + + https://github.com/Modernizr/Modernizr + + Modernizr is available under the MIT license + + Copyright (c) 2009–2011 + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + - Benchmark.js - ./test/third-party/benchmarkjs + + https://github.com/alexanderbeletsky/benchmark-js + + Copyright 2010-2012 Mathias Bynens + Based on JSLitmus.js, copyright Robert Kieffer + Modified by John-David Dalton + Available under MIT license + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - normalize.css - ./test/third-party/normalize + + Copyright (c) Nicolas Gallagher and Jonathan Neal + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - Foundation - ./test/third-party/foundation + + Copyright (c) 2012 Mark Hayes + + MIT License + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - ua-parser ./test/third-party/ua-parser + + https://github.com/faisalman/ua-parser-js + + Copyright © 2012 Faisalman + Dual licensed under GPLv2 & MIT + Copyright © 2012 Faisalman + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + - HTML5 boilerplate + + https://github.com/h5bp/html5-boilerplate + + Copyright (c) HTML5 Boilerplate + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - classList - ./test/third-party/classlist + + http://purl.eligrey.com/github/classList.js/blob/master/classList.js + + This software is dedicated to the public domain. No warranty is expressed or implied. + Use this software at your own risk. + + - fastclick - ./test/third-party/fastclick + + https://github.com/ftlabs/fastclick + + Copyright (C) 2012 The Financial Times Ltd. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/README.md b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/README.md new file mode 100755 index 0000000..a89dad2 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/README.md @@ -0,0 +1,89 @@ +# Topcoat + +CSS for clean and fast web apps + +--- + +## Usage + +* [Download Topcoat](https://github.com/topcoat/topcoat/archive/0.7.0.zip) + +* Open index.html to view the usage guides. +* Copy your desired theme CSS from the `css/` folder into your project +* Copy the `img/` and `font/` folders into your project ( Feel free to only + copy the images and font weights you intend to use ) +* Link the CSS into your page + +```css + +``` + +_*Alternatively incorporate the css into your build process if you are so +inclined._ + +--- + +## Contributing + +Start by checking out our [Backlog](http://huboard.com/topcoat/topcoat/backlog). (Pls file issues against this repo.) + +* [Fill out the CLA here](http://topcoat.io/dev/topcoat-cla.html) +* [fork](https://help.github.com/articles/fork-a-repo) the repo +* Create a branch + + git checkout -b my_branch + +* Add your changes following the [coding guidelines](https://github.com/topcoat/topcoat/wiki/Coding-Guidelines) +* Commit your changes + + git commit -am "Added some awesome stuff" + +* Push your branch + + git push origin my_branch + +* make a [pull request](https://help.github.com/articles/using-pull-requests) + +For the details see our [Engineering Practices](https://github.com/topcoat/topcoat/wiki/Engineering-Practices). + +### Testing + +For performance tests, see [dev/test/perf/telemetry/](https://github.com/topcoat/topcoat/tree/master/dev/test/perf/telemetry). + +### Building + +Topcoat uses [Grunt](http://gruntjs.com/) to build + +* Open the terminal from the topcoat directory + + cd topcoat + +* Install [npm](http://nodejs.org/download/) +_*comes packaged with node._ +* Install its command line interface (CLI) globally + + npm install -g grunt-cli + +* Install dependencies with npm + + npm install + + +_*Topcoat uses Grunt 0.4.0. You might want to [read](http://gruntjs.com/getting-started) more on their website if you haven't upgraded since a lot has changed._ + +* Type `grunt` in the command line to build the css. +* The results will be built into the release folder. +* Alternatively type `grunt watch` to have the build run automatically when you make changes to +source files. + +--- + +## Release notes +See [Release Notes](https://github.com/topcoat/topcoat/releases/). + +--- + +## License + +[Apache license](https://raw.github.com/topcoat/topcoat/master/LICENSE) + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/contributors.txt b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/contributors.txt new file mode 100755 index 0000000..e4cd8b7 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/contributors.txt @@ -0,0 +1,7 @@ +# Github accounts of the people who signed the TopCoat CLA (http://topcoat.io/dev/topcoat-cla.html). +# CLA needs to be signed before accepting pull requests. +@yourpalsonja +@noformnocontent +@jrowny +@aparticulate +@jlembeck diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.css new file mode 100755 index 0000000..e590e11 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.css @@ -0,0 +1,3450 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
      +
      + +
      +
      + +
      +
      + +
      +
      + examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
      +
      + +
      +
      + +
      +
      + +
      +
      + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
      +
      + + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 1rem; +} + +input[type="checkbox"] { + height: 1rem; + width: 1rem; + margin-top: 0; + margin-right: -1rem; + margin-bottom: -1rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 1rem; +} + +.topcoat-checkbox__checkmark:before { + width: 1rem; + height: 1rem; + background: #595b5b; + border: 1px solid #303233; + border-radius: 3px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-checkbox__checkmark { + width: 1rem; + height: 1rem; +} + +.topcoat-checkbox__checkmark:after { + top: 2px; + left: 1px; + opacity: 0; + width: 14px; + height: 4px; + background: transparent; + border: 7px solid #fff; + border-width: 3px; + border-top: none; + border-right: none; + border-radius: 1px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.25rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: baseline; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-icon-button:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 1.688rem; + height: 1.688rem; + line-height: 1.688rem; +} + +.topcoat-icon-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 0.81406rem; + height: 0.81406rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 1.06344rem; + height: 1.06344rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
      +
      + + +
      +
      + + +
      +
      + + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.063rem; + width: 1.063rem; + margin-top: 0; + margin-right: -1.063rem; + margin-bottom: -1.063rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #c6c8c8; + line-height: 1.063rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.063rem; + height: 1.063rem; + background: #595b5b; + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.063rem; + height: 1.063rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.313rem; + height: 0.313rem; + background: #fff; + border: 1px solid rgba(255,255,255,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 0.313rem; + left: 0.313rem; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 4px; + border: 1px solid #303233; + background-color: #424546; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-moz-range-track { + border-radius: 4px; + border: 1px solid #303233; + background-color: #424546; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 4px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range::-moz-range-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 4px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 1.313rem; + font-size: 12px; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + padding: 0 0 0 1.3rem; + border-radius: 15px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 12px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 1.688rem; + font-size: 0.875rem; + font-weight: 400; + padding: 0 0 0 1.8rem; + border-radius: 25px; + background-position: 1.2em center; + background-size: 0.875rem; +} + +.topcoat-search-input--large:disabled { + color: #fff; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
      +
      + +
      +
      + + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 12px; + padding: 0 0.563rem; + border-radius: 4px; + border: 1px solid #303233; + overflow: hidden; + width: 3.5rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 2.6rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #5dc1ff; + background-color: #404141; + right: 0.8rem; + padding-left: 0.75rem; +} + +.topcoat-switch__toggle { + line-height: 1.313rem; + height: 1.313rem; + width: 1rem; + border-radius: 4px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #595b5b; + border: 1px solid #303233; + margin-left: -0.6rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #727373; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #404141; + left: 0.8rem; + padding-left: 0.6rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 1.85rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
      + + + +
      + examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 0.563rem; + height: 1.313rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border-top: 1px solid #303233; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #5dc1ff; + background-color: #404141; + box-shadow: inset 0 0 2px #313231; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
      +
      + +
      +
      + + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 1.313rem; + font-size: 12px; + letter-spacing: 0; + padding: 0 0.563rem; + border: 1px solid #303233; + border-radius: 4px; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
      +
      + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 1.688rem; + font-size: 0.875rem; +} + +.topcoat-text-input--large:disabled { + color: #fff; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 1rem; + font-size: 1rem; + font-weight: 400; + border-radius: 4px; + line-height: 1.313rem; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + letter-spacing: 0; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 1.3rem; + line-height: 1.688rem; +} + +.topcoat-textarea--large:disabled { + color: #fff; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #fff; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #4b4d4e; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_light.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.min.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.min.css new file mode 100755 index 0000000..1623395 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-dark.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:1rem}input[type=checkbox]{height:1rem;width:1rem;margin-top:0;margin-right:-1rem;margin-bottom:-1rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:1rem}.topcoat-checkbox__checkmark:before{width:1rem;height:1rem;background:#595b5b;border:1px solid #303233;border-radius:3px;box-shadow:inset 0 1px #727373}.topcoat-checkbox__checkmark{width:1rem;height:1rem}.topcoat-checkbox__checkmark:after{top:2px;left:1px;opacity:0;width:14px;height:4px;background:transparent;border:7px solid #fff;border-width:3px;border-top:0;border-right:0;border-radius:1px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .25rem;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:baseline;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#646666}.topcoat-icon-button:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:1.688rem;height:1.688rem;line-height:1.688rem}.topcoat-icon-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:.81406rem;height:.81406rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:1.06344rem;height:1.06344rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.063rem;width:1.063rem;margin-top:0;margin-right:-1.063rem;margin-bottom:-1.063rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#c6c8c8;line-height:1.063rem}.topcoat-radio-button__checkmark:before{width:1.063rem;height:1.063rem;background:#595b5b;border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-radio-button__checkmark{position:relative;width:1.063rem;height:1.063rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.313rem;height:.313rem;background:#fff;border:1px solid rgba(255,255,255,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:.313rem;left:.313rem}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:4px;border:1px solid #303233;background-color:#424546;height:.5rem;border-radius:15px}.topcoat-range::-moz-range-track{border-radius:4px;border:1px solid #303233;background-color:#424546;height:.5rem;border-radius:15px}.topcoat-range::-webkit-slider-thumb{height:1.313rem;width:.75rem;background-color:#595b5b;border:1px solid #303233;border-radius:4px;box-shadow:inset 0 1px #727373}.topcoat-range::-moz-range-thumb{height:1.313rem;width:.75rem;background-color:#595b5b;border:1px solid #303233;border-radius:4px;box-shadow:inset 0 1px #727373}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:1.313rem;font-size:12px;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;padding:0 0 0 1.3rem;border-radius:15px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:12px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input:disabled::-moz-placeholder{color:#fff}.topcoat-search-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-search-input--large{line-height:1.688rem;font-size:.875rem;font-weight:400;padding:0 0 0 1.8rem;border-radius:25px;background-position:1.2em center;background-size:.875rem}.topcoat-search-input--large:disabled{color:#fff}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#fff}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:12px;padding:0 .563rem;border-radius:4px;border:1px solid #303233;overflow:hidden;width:3.5rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:2.6rem}.topcoat-switch__toggle:before{content:'ON';color:#5dc1ff;background-color:#404141;right:.8rem;padding-left:.75rem}.topcoat-switch__toggle{line-height:1.313rem;height:1.313rem;width:1rem;border-radius:4px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#595b5b;border:1px solid #303233;margin-left:-.6rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #727373;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#404141;left:.8rem;padding-left:.6rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:1.85rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 .563rem;height:1.313rem;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border-top:1px solid #303233}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#5dc1ff;background-color:#404141;box-shadow:inset 0 0 2px #313231}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:1.313rem;font-size:12px;letter-spacing:0;padding:0 .563rem;border:1px solid #303233;border-radius:4px;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input:disabled::-moz-placeholder{color:#fff}.topcoat-text-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:1.688rem;font-size:.875rem}.topcoat-text-input--large:disabled{color:#fff}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:1rem;font-size:1rem;font-weight:400;border-radius:4px;line-height:1.313rem;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;letter-spacing:0}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea:disabled::-moz-placeholder{color:#fff}.topcoat-textarea:disabled:-ms-input-placeholder{color:#fff}.topcoat-textarea--large{font-size:1.3rem;line-height:1.688rem}.topcoat-textarea--large:disabled{color:#fff}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea--large:disabled::-moz-placeholder{color:#fff}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#fff}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#4b4d4e;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_light.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.css new file mode 100755 index 0000000..0da42ea --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.css @@ -0,0 +1,3450 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
      +
      + +
      +
      + +
      +
      + +
      +
      + examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
      +
      + +
      +
      + +
      +
      + +
      +
      + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
      +
      + + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 1rem; +} + +input[type="checkbox"] { + height: 1rem; + width: 1rem; + margin-top: 0; + margin-right: -1rem; + margin-bottom: -1rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 1rem; +} + +.topcoat-checkbox__checkmark:before { + width: 1rem; + height: 1rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 3px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-checkbox__checkmark { + width: 1rem; + height: 1rem; +} + +.topcoat-checkbox__checkmark:after { + top: 2px; + left: 1px; + opacity: 0; + width: 14px; + height: 4px; + background: transparent; + border: 7px solid #666; + border-width: 3px; + border-top: none; + border-right: none; + border-radius: 1px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.25rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-icon-button:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 1.688rem; + height: 1.688rem; + line-height: 1.688rem; +} + +.topcoat-icon-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 0.81406rem; + height: 0.81406rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 1.06344rem; + height: 1.06344rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
      +
      + + +
      +
      + + +
      +
      + + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.063rem; + width: 1.063rem; + margin-top: 0; + margin-right: -1.063rem; + margin-bottom: -1.063rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #454545; + line-height: 1.063rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.063rem; + height: 1.063rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.063rem; + height: 1.063rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.313rem; + height: 0.313rem; + background: #666; + border: 1px solid rgba(0,0,0,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 0.313rem; + left: 0.313rem; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 4px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-moz-range-track { + border-radius: 4px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 4px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range::-moz-range-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 4px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 1.313rem; + font-size: 12px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + padding: 0 0 0 1.3rem; + border-radius: 15px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 12px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 1.688rem; + font-size: 0.875rem; + font-weight: 400; + padding: 0 0 0 1.8rem; + border-radius: 25px; + background-position: 1.2em center; + background-size: 0.875rem; +} + +.topcoat-search-input--large:disabled { + color: #000; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
      +
      + +
      +
      + + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 12px; + padding: 0 0.563rem; + border-radius: 4px; + border: 1px solid #a5a8a8; + overflow: hidden; + width: 3.5rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 2.6rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #0083e8; + background-color: #e0f0fa; + right: 0.8rem; + padding-left: 0.75rem; +} + +.topcoat-switch__toggle { + line-height: 1.313rem; + height: 1.313rem; + width: 1rem; + border-radius: 4px; + color: #454545; + text-shadow: 0 1px #fff; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + margin-left: -0.6rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #fff; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #d3d7d7; + left: 0.8rem; + padding-left: 0.6rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 1.85rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
      + + + +
      + examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 0.563rem; + height: 1.313rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border-top: 1px solid #a5a8a8; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #0083e8; + background-color: #e0f0fa; + box-shadow: inset 0 0 2px #c0ced8; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
      +
      + +
      +
      + + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 1.313rem; + font-size: 12px; + letter-spacing: 0; + padding: 0 0.563rem; + border: 1px solid #a5a8a8; + border-radius: 4px; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
      +
      + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 1.688rem; + font-size: 0.875rem; +} + +.topcoat-text-input--large:disabled { + color: #000; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 1rem; + font-size: 1rem; + font-weight: 400; + border-radius: 4px; + line-height: 1.313rem; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + letter-spacing: 0; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 1.3rem; + line-height: 1.688rem; +} + +.topcoat-textarea--large:disabled { + color: #000; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #000; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #dfe2e2; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_dark.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.min.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.min.css new file mode 100755 index 0000000..e682662 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-desktop-light.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:1rem}input[type=checkbox]{height:1rem;width:1rem;margin-top:0;margin-right:-1rem;margin-bottom:-1rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:1rem}.topcoat-checkbox__checkmark:before{width:1rem;height:1rem;background:#e5e9e8;border:1px solid #a5a8a8;border-radius:3px;box-shadow:inset 0 1px #fff}.topcoat-checkbox__checkmark{width:1rem;height:1rem}.topcoat-checkbox__checkmark:after{top:2px;left:1px;opacity:0;width:14px;height:4px;background:transparent;border:7px solid #666;border-width:3px;border-top:0;border-right:0;border-radius:1px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .25rem;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:baseline;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#edf1f1}.topcoat-icon-button:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:1.688rem;height:1.688rem;line-height:1.688rem}.topcoat-icon-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:.81406rem;height:.81406rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:1.06344rem;height:1.06344rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.063rem;width:1.063rem;margin-top:0;margin-right:-1.063rem;margin-bottom:-1.063rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#454545;line-height:1.063rem}.topcoat-radio-button__checkmark:before{width:1.063rem;height:1.063rem;background:#e5e9e8;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-radio-button__checkmark{position:relative;width:1.063rem;height:1.063rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.313rem;height:.313rem;background:#666;border:1px solid rgba(0,0,0,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:.313rem;left:.313rem}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:4px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:.5rem;border-radius:15px}.topcoat-range::-moz-range-track{border-radius:4px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:.5rem;border-radius:15px}.topcoat-range::-webkit-slider-thumb{height:1.313rem;width:.75rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:4px;box-shadow:inset 0 1px #fff}.topcoat-range::-moz-range-thumb{height:1.313rem;width:.75rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:4px;box-shadow:inset 0 1px #fff}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:1.313rem;font-size:12px;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;padding:0 0 0 1.3rem;border-radius:15px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:12px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input:disabled::-moz-placeholder{color:#000}.topcoat-search-input:disabled:-ms-input-placeholder{color:#000}.topcoat-search-input--large{line-height:1.688rem;font-size:.875rem;font-weight:400;padding:0 0 0 1.8rem;border-radius:25px;background-position:1.2em center;background-size:.875rem}.topcoat-search-input--large:disabled{color:#000}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input--large:disabled::-moz-placeholder{color:#000}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#000}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:12px;padding:0 .563rem;border-radius:4px;border:1px solid #a5a8a8;overflow:hidden;width:3.5rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:2.6rem}.topcoat-switch__toggle:before{content:'ON';color:#0083e8;background-color:#e0f0fa;right:.8rem;padding-left:.75rem}.topcoat-switch__toggle{line-height:1.313rem;height:1.313rem;width:1rem;border-radius:4px;color:#454545;text-shadow:0 1px #fff;background-color:#e5e9e8;border:1px solid #a5a8a8;margin-left:-.6rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #fff;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#d3d7d7;left:.8rem;padding-left:.6rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:1.85rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 .563rem;height:1.313rem;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border-top:1px solid #a5a8a8}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#0083e8;background-color:#e0f0fa;box-shadow:inset 0 0 2px #c0ced8}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:1.313rem;font-size:12px;letter-spacing:0;padding:0 .563rem;border:1px solid #a5a8a8;border-radius:4px;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input:disabled::-moz-placeholder{color:#000}.topcoat-text-input:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:1.688rem;font-size:.875rem}.topcoat-text-input--large:disabled{color:#000}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input--large:disabled::-moz-placeholder{color:#000}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:1rem;font-size:1rem;font-weight:400;border-radius:4px;line-height:1.313rem;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;letter-spacing:0}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea:disabled::-moz-placeholder{color:#000}.topcoat-textarea:disabled:-ms-input-placeholder{color:#000}.topcoat-textarea--large{font-size:1.3rem;line-height:1.688rem}.topcoat-textarea--large:disabled{color:#000}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea--large:disabled::-moz-placeholder{color:#000}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#000}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#dfe2e2;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_dark.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.css new file mode 100755 index 0000000..0d3aa5f --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.css @@ -0,0 +1,3700 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
      +
      + +
      +
      + +
      +
      + +
      +
      + examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
      +
      + +
      +
      + +
      +
      + +
      +
      + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
      +
      + + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 2rem; +} + +input[type="checkbox"] { + height: 2rem; + width: 2rem; + margin-top: 0; + margin-right: -2rem; + margin-bottom: -2rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 2rem; +} + +.topcoat-checkbox__checkmark:before { + width: 2rem; + height: 2rem; + background: #595b5b; + border: 1px solid #303233; + border-radius: 3px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-checkbox__checkmark { + width: 2rem; + height: 2rem; +} + +.topcoat-checkbox__checkmark:after { + top: 1px; + left: 2px; + opacity: 0; + width: 28px; + height: 11px; + background: transparent; + border: 7px solid #fff; + border-width: 7px; + border-top: none; + border-right: none; + border-radius: 2px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.75rem; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: baseline; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-icon-button:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 4.375rem; + height: 4.375rem; + line-height: 4.375rem; +} + +.topcoat-icon-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 1.62rem; + height: 1.62rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 2.499999998125rem; + height: 2.499999998125rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list, +.topcoat-list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header, +.topcoat-list__header { + margin: 0; +} + +.list__container, +.topcoat-list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item, +.topcoat-list__item { + margin: 0; + padding: 0; +} + +/* topdoc + name: List + description: Topcoat default list skin + markup: +
      +

      Category

      +
        +
      • + Item +
      • +
      • + Item +
      • +
      • + Item +
      • +
      +
      + tags: + - mobile + - list +*/ + +.topcoat-list { + border-top: 1px solid #2f3234; + border-bottom: 1px solid #5e6061; + background-color: #444849; +} + +.topcoat-list__header { + padding: 4px 20px; + font-size: 0.9em; + font-weight: 400; + background-color: #3b3e40; + color: #868888; + text-shadow: 0 -1px 0 rgba(0,0,0,0.3); + border-top: solid 1px rgba(255,255,255,0.1); + border-bottom: solid 1px rgba(255,255,255,0.05); +} + +.topcoat-list__container { + border-top: 1px solid #2f3234; + color: #c6c8c8; +} + +.topcoat-list__item { + padding: 1.25rem; + border-top: 1px solid #5e6061; + border-bottom: 1px solid #2f3234; +} + +.topcoat-list__item:first-child { + border-top: 1px solid rgba(0,0,0,0.05); +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar, +.topcoat-navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item, +.topcoat-navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title, +.topcoat-navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* topdoc + name: Navigation Bar + description: A place where navigation goes to drink + markup: +
      +
      +

      Header

      +
      +
      + tags: + - desktop + - light + - mobile + - navigation + - bar +*/ + +.topcoat-navigation-bar { + height: 4.375rem; + padding-left: 1rem; + padding-right: 1rem; + background: #595b5b; + color: #fff; + box-shadow: inset 0 -1px #333434, 0 1px rgba(0,0,0,0.15); +} + +.topcoat-navigation-bar__item { + margin: 0; + line-height: 4.375rem; + vertical-align: top; +} + +.topcoat-navigation-bar__title { + font-size: 1.3rem; + font-weight: 400; + color: #fff; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
      +
      + + +
      +
      + + +
      +
      + + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.875rem; + width: 1.875rem; + margin-top: 0; + margin-right: -1.875rem; + margin-bottom: -1.875rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #c6c8c8; + line-height: 1.875rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.875rem; + height: 1.875rem; + background: #595b5b; + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.875rem; + height: 1.875rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.875rem; + height: 0.875rem; + background: #fff; + border: 1px solid rgba(255,255,255,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 7px; + left: 7px; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 6px; + border: 1px solid #303233; + background-color: #424546; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-moz-range-track { + border-radius: 6px; + border: 1px solid #303233; + background-color: #424546; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 3rem; + width: 2rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 6px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range::-moz-range-thumb { + height: 3rem; + width: 2rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 6px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 3rem; + font-size: 16px; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + padding: 0 0 0 2rem; + border-radius: 30px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 16px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 4.375rem; + font-size: 1.3rem; + font-weight: 200; + padding: 0 0 0 2.9rem; + border-radius: 40px; + background-position: 1.2em center; + background-size: 1.3rem; +} + +.topcoat-search-input--large:disabled { + color: #fff; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
      +
      + +
      +
      + + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 16px; + padding: 0 1.25rem; + border-radius: 6px; + border: 1px solid #303233; + overflow: hidden; + width: 6rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 5rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #5dc1ff; + background-color: #404141; + right: 1rem; + padding-left: 1.5rem; +} + +.topcoat-switch__toggle { + line-height: 3rem; + height: 3rem; + width: 2rem; + border-radius: 6px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #595b5b; + border: 1px solid #303233; + margin-left: -1.3rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #727373; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #404141; + left: 1rem; + padding-left: 2rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 2.7rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
      + + + +
      + examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 1.25rem; + height: 3rem; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border-top: 1px solid #303233; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #5dc1ff; + background-color: #404141; + box-shadow: inset 0 0 2px #313231; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
      +
      + +
      +
      + + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 3rem; + font-size: 16px; + letter-spacing: 1px; + padding: 0 1.25rem; + border: 1px solid #303233; + border-radius: 6px; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
      +
      + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 4.375rem; + font-size: 1.3rem; +} + +.topcoat-text-input--large:disabled { + color: #fff; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 2rem; + font-size: 2.5rem; + font-weight: 200; + border-radius: 6px; + line-height: 3rem; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + letter-spacing: 1px; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 3rem; + line-height: 4.375rem; +} + +.topcoat-textarea--large:disabled { + color: #fff; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #fff; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #4b4d4e; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_light.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.min.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.min.css new file mode 100755 index 0000000..2ce6f11 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-dark.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:2rem}input[type=checkbox]{height:2rem;width:2rem;margin-top:0;margin-right:-2rem;margin-bottom:-2rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:2rem}.topcoat-checkbox__checkmark:before{width:2rem;height:2rem;background:#595b5b;border:1px solid #303233;border-radius:3px;box-shadow:inset 0 1px #727373}.topcoat-checkbox__checkmark{width:2rem;height:2rem}.topcoat-checkbox__checkmark:after{top:1px;left:2px;opacity:0;width:28px;height:11px;background:transparent;border:7px solid #fff;border-width:7px;border-top:0;border-right:0;border-radius:2px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .75rem;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:baseline;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#646666}.topcoat-icon-button:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:4.375rem;height:4.375rem;line-height:4.375rem}.topcoat-icon-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:1.62rem;height:1.62rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:2.499999998125rem;height:2.499999998125rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.list,.topcoat-list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header,.topcoat-list__header{margin:0}.list__container,.topcoat-list__container{padding:0;margin:0;list-style-type:none}.list__item,.topcoat-list__item{margin:0;padding:0}.topcoat-list{border-top:1px solid #2f3234;border-bottom:1px solid #5e6061;background-color:#444849}.topcoat-list__header{padding:4px 20px;font-size:.9em;font-weight:400;background-color:#3b3e40;color:#868888;text-shadow:0 -1px 0 rgba(0,0,0,.3);border-top:solid 1px rgba(255,255,255,.1);border-bottom:solid 1px rgba(255,255,255,.05)}.topcoat-list__container{border-top:1px solid #2f3234;color:#c6c8c8}.topcoat-list__item{padding:1.25rem;border-top:1px solid #5e6061;border-bottom:1px solid #2f3234}.topcoat-list__item:first-child{border-top:1px solid rgba(0,0,0,.05)}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.navigation-bar,.topcoat-navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item,.topcoat-navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title,.topcoat-navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.topcoat-navigation-bar{height:4.375rem;padding-left:1rem;padding-right:1rem;background:#595b5b;color:#fff;box-shadow:inset 0 -1px #333434,0 1px rgba(0,0,0,.15)}.topcoat-navigation-bar__item{margin:0;line-height:4.375rem;vertical-align:top}.topcoat-navigation-bar__title{font-size:1.3rem;font-weight:400;color:#fff}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.875rem;width:1.875rem;margin-top:0;margin-right:-1.875rem;margin-bottom:-1.875rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#c6c8c8;line-height:1.875rem}.topcoat-radio-button__checkmark:before{width:1.875rem;height:1.875rem;background:#595b5b;border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-radio-button__checkmark{position:relative;width:1.875rem;height:1.875rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.875rem;height:.875rem;background:#fff;border:1px solid rgba(255,255,255,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:7px;left:7px}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:6px;border:1px solid #303233;background-color:#424546;height:1rem;border-radius:30px}.topcoat-range::-moz-range-track{border-radius:6px;border:1px solid #303233;background-color:#424546;height:1rem;border-radius:30px}.topcoat-range::-webkit-slider-thumb{height:3rem;width:2rem;background-color:#595b5b;border:1px solid #303233;border-radius:6px;box-shadow:inset 0 1px #727373}.topcoat-range::-moz-range-thumb{height:3rem;width:2rem;background-color:#595b5b;border:1px solid #303233;border-radius:6px;box-shadow:inset 0 1px #727373}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:3rem;font-size:16px;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;padding:0 0 0 2rem;border-radius:30px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:16px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input:disabled::-moz-placeholder{color:#fff}.topcoat-search-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-search-input--large{line-height:4.375rem;font-size:1.3rem;font-weight:200;padding:0 0 0 2.9rem;border-radius:40px;background-position:1.2em center;background-size:1.3rem}.topcoat-search-input--large:disabled{color:#fff}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#fff}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:16px;padding:0 1.25rem;border-radius:6px;border:1px solid #303233;overflow:hidden;width:6rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:5rem}.topcoat-switch__toggle:before{content:'ON';color:#5dc1ff;background-color:#404141;right:1rem;padding-left:1.5rem}.topcoat-switch__toggle{line-height:3rem;height:3rem;width:2rem;border-radius:6px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#595b5b;border:1px solid #303233;margin-left:-1.3rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #727373;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#404141;left:1rem;padding-left:2rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:2.7rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 1.25rem;height:3rem;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border-top:1px solid #303233}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#5dc1ff;background-color:#404141;box-shadow:inset 0 0 2px #313231}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:3rem;font-size:16px;letter-spacing:1px;padding:0 1.25rem;border:1px solid #303233;border-radius:6px;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input:disabled::-moz-placeholder{color:#fff}.topcoat-text-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:4.375rem;font-size:1.3rem}.topcoat-text-input--large:disabled{color:#fff}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:2rem;font-size:2.5rem;font-weight:200;border-radius:6px;line-height:3rem;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;letter-spacing:1px}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea:disabled::-moz-placeholder{color:#fff}.topcoat-textarea:disabled:-ms-input-placeholder{color:#fff}.topcoat-textarea--large{font-size:3rem;line-height:4.375rem}.topcoat-textarea--large:disabled{color:#fff}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea--large:disabled::-moz-placeholder{color:#fff}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#fff}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#4b4d4e;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_light.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.css new file mode 100755 index 0000000..6735055 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.css @@ -0,0 +1,3700 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
      +
      + +
      +
      + +
      +
      + +
      +
      + examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
      +
      + +
      +
      + +
      +
      + +
      +
      + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
      +
      + + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 2rem; +} + +input[type="checkbox"] { + height: 2rem; + width: 2rem; + margin-top: 0; + margin-right: -2rem; + margin-bottom: -2rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 2rem; +} + +.topcoat-checkbox__checkmark:before { + width: 2rem; + height: 2rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 3px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-checkbox__checkmark { + width: 2rem; + height: 2rem; +} + +.topcoat-checkbox__checkmark:after { + top: 1px; + left: 2px; + opacity: 0; + width: 28px; + height: 11px; + background: transparent; + border: 7px solid #666; + border-width: 7px; + border-top: none; + border-right: none; + border-radius: 2px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.75rem; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-icon-button:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 4.375rem; + height: 4.375rem; + line-height: 4.375rem; +} + +.topcoat-icon-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 1.62rem; + height: 1.62rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 2.499999998125rem; + height: 2.499999998125rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list, +.topcoat-list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header, +.topcoat-list__header { + margin: 0; +} + +.list__container, +.topcoat-list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item, +.topcoat-list__item { + margin: 0; + padding: 0; +} + +/* topdoc + name: List + description: Topcoat default list skin + markup: +
      +

      Category

      +
        +
      • + Item +
      • +
      • + Item +
      • +
      • + Item +
      • +
      +
      + tags: + - mobile + - list +*/ + +.topcoat-list { + border-top: 1px solid #bcbfbf; + border-bottom: 1px solid #eff1f1; + background-color: #dfe2e2; +} + +.topcoat-list__header { + padding: 4px 20px; + font-size: 0.9em; + font-weight: 400; + background-color: #cccfcf; + color: #656565; + text-shadow: 0 1px 0 rgba(255,255,255,0.5); + border-top: 1px solid rgba(255,255,255,0.5); + border-bottom: 1px solid rgba(255,255,255,0.23); +} + +.topcoat-list__container { + border-top: 1px solid #bcbfbf; + color: #454545; +} + +.topcoat-list__item { + padding: 1.25rem; + border-top: 1px solid #eff1f1; + border-bottom: 1px solid #bcbfbf; +} + +.topcoat-list__item:first-child { + border-top: 1px solid rgba(0,0,0,0.05); +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar, +.topcoat-navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item, +.topcoat-navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title, +.topcoat-navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* topdoc + name: Navigation Bar + description: A place where navigation goes to drink + markup: +
      +
      +

      Header

      +
      +
      + tags: + - desktop + - light + - mobile + - navigation + - bar +*/ + +.topcoat-navigation-bar { + height: 4.375rem; + padding-left: 1rem; + padding-right: 1rem; + background: #e5e9e8; + color: #000; + box-shadow: inset 0 -1px #b9bcbc, 0 1px #d4d6d6; +} + +.topcoat-navigation-bar__item { + margin: 0; + line-height: 4.375rem; + vertical-align: top; +} + +.topcoat-navigation-bar__title { + font-size: 1.3rem; + font-weight: 400; + color: #000; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
      +
      + + +
      +
      + + +
      +
      + + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.875rem; + width: 1.875rem; + margin-top: 0; + margin-right: -1.875rem; + margin-bottom: -1.875rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #454545; + line-height: 1.875rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.875rem; + height: 1.875rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.875rem; + height: 1.875rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.875rem; + height: 0.875rem; + background: #666; + border: 1px solid rgba(0,0,0,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 7px; + left: 7px; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 6px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-moz-range-track { + border-radius: 6px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 3rem; + width: 2rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 6px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range::-moz-range-thumb { + height: 3rem; + width: 2rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 6px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 3rem; + font-size: 16px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + padding: 0 0 0 2rem; + border-radius: 30px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 16px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 4.375rem; + font-size: 1.3rem; + font-weight: 200; + padding: 0 0 0 2.9rem; + border-radius: 40px; + background-position: 1.2em center; + background-size: 1.3rem; +} + +.topcoat-search-input--large:disabled { + color: #000; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
      +
      + +
      +
      + + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 16px; + padding: 0 1.25rem; + border-radius: 6px; + border: 1px solid #a5a8a8; + overflow: hidden; + width: 6rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 5rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #0083e8; + background-color: #e0f0fa; + right: 1rem; + padding-left: 1.5rem; +} + +.topcoat-switch__toggle { + line-height: 3rem; + height: 3rem; + width: 2rem; + border-radius: 6px; + color: #454545; + text-shadow: 0 1px #fff; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + margin-left: -1.3rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #fff; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #d3d7d7; + left: 1rem; + padding-left: 2rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 2.7rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
      + + + +
      + examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 1.25rem; + height: 3rem; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border-top: 1px solid #a5a8a8; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #0083e8; + background-color: #e0f0fa; + box-shadow: inset 0 0 2px #c0ced8; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
      +
      + +
      +
      + + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 3rem; + font-size: 16px; + letter-spacing: 1px; + padding: 0 1.25rem; + border: 1px solid #a5a8a8; + border-radius: 6px; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
      +
      + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 4.375rem; + font-size: 1.3rem; +} + +.topcoat-text-input--large:disabled { + color: #000; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 2rem; + font-size: 2.5rem; + font-weight: 200; + border-radius: 6px; + line-height: 3rem; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + letter-spacing: 1px; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
      +
      + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 3rem; + line-height: 4.375rem; +} + +.topcoat-textarea--large:disabled { + color: #000; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #000; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #dfe2e2; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_dark.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.min.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.min.css new file mode 100755 index 0000000..7692377 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/css/topcoat-mobile-light.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:2rem}input[type=checkbox]{height:2rem;width:2rem;margin-top:0;margin-right:-2rem;margin-bottom:-2rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:2rem}.topcoat-checkbox__checkmark:before{width:2rem;height:2rem;background:#e5e9e8;border:1px solid #a5a8a8;border-radius:3px;box-shadow:inset 0 1px #fff}.topcoat-checkbox__checkmark{width:2rem;height:2rem}.topcoat-checkbox__checkmark:after{top:1px;left:2px;opacity:0;width:28px;height:11px;background:transparent;border:7px solid #666;border-width:7px;border-top:0;border-right:0;border-radius:2px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .75rem;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:baseline;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#edf1f1}.topcoat-icon-button:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:4.375rem;height:4.375rem;line-height:4.375rem}.topcoat-icon-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:1.62rem;height:1.62rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:2.499999998125rem;height:2.499999998125rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.list,.topcoat-list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header,.topcoat-list__header{margin:0}.list__container,.topcoat-list__container{padding:0;margin:0;list-style-type:none}.list__item,.topcoat-list__item{margin:0;padding:0}.topcoat-list{border-top:1px solid #bcbfbf;border-bottom:1px solid #eff1f1;background-color:#dfe2e2}.topcoat-list__header{padding:4px 20px;font-size:.9em;font-weight:400;background-color:#cccfcf;color:#656565;text-shadow:0 1px 0 rgba(255,255,255,.5);border-top:1px solid rgba(255,255,255,.5);border-bottom:1px solid rgba(255,255,255,.23)}.topcoat-list__container{border-top:1px solid #bcbfbf;color:#454545}.topcoat-list__item{padding:1.25rem;border-top:1px solid #eff1f1;border-bottom:1px solid #bcbfbf}.topcoat-list__item:first-child{border-top:1px solid rgba(0,0,0,.05)}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.navigation-bar,.topcoat-navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item,.topcoat-navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title,.topcoat-navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.topcoat-navigation-bar{height:4.375rem;padding-left:1rem;padding-right:1rem;background:#e5e9e8;color:#000;box-shadow:inset 0 -1px #b9bcbc,0 1px #d4d6d6}.topcoat-navigation-bar__item{margin:0;line-height:4.375rem;vertical-align:top}.topcoat-navigation-bar__title{font-size:1.3rem;font-weight:400;color:#000}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.875rem;width:1.875rem;margin-top:0;margin-right:-1.875rem;margin-bottom:-1.875rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#454545;line-height:1.875rem}.topcoat-radio-button__checkmark:before{width:1.875rem;height:1.875rem;background:#e5e9e8;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-radio-button__checkmark{position:relative;width:1.875rem;height:1.875rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.875rem;height:.875rem;background:#666;border:1px solid rgba(0,0,0,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:7px;left:7px}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:6px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:1rem;border-radius:30px}.topcoat-range::-moz-range-track{border-radius:6px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:1rem;border-radius:30px}.topcoat-range::-webkit-slider-thumb{height:3rem;width:2rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:6px;box-shadow:inset 0 1px #fff}.topcoat-range::-moz-range-thumb{height:3rem;width:2rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:6px;box-shadow:inset 0 1px #fff}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:3rem;font-size:16px;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;padding:0 0 0 2rem;border-radius:30px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:16px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input:disabled::-moz-placeholder{color:#000}.topcoat-search-input:disabled:-ms-input-placeholder{color:#000}.topcoat-search-input--large{line-height:4.375rem;font-size:1.3rem;font-weight:200;padding:0 0 0 2.9rem;border-radius:40px;background-position:1.2em center;background-size:1.3rem}.topcoat-search-input--large:disabled{color:#000}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input--large:disabled::-moz-placeholder{color:#000}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#000}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:16px;padding:0 1.25rem;border-radius:6px;border:1px solid #a5a8a8;overflow:hidden;width:6rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:5rem}.topcoat-switch__toggle:before{content:'ON';color:#0083e8;background-color:#e0f0fa;right:1rem;padding-left:1.5rem}.topcoat-switch__toggle{line-height:3rem;height:3rem;width:2rem;border-radius:6px;color:#454545;text-shadow:0 1px #fff;background-color:#e5e9e8;border:1px solid #a5a8a8;margin-left:-1.3rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #fff;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#d3d7d7;left:1rem;padding-left:2rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:2.7rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 1.25rem;height:3rem;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border-top:1px solid #a5a8a8}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#0083e8;background-color:#e0f0fa;box-shadow:inset 0 0 2px #c0ced8}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:3rem;font-size:16px;letter-spacing:1px;padding:0 1.25rem;border:1px solid #a5a8a8;border-radius:6px;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input:disabled::-moz-placeholder{color:#000}.topcoat-text-input:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:4.375rem;font-size:1.3rem}.topcoat-text-input--large:disabled{color:#000}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input--large:disabled::-moz-placeholder{color:#000}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:2rem;font-size:2.5rem;font-weight:200;border-radius:6px;line-height:3rem;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;letter-spacing:1px}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea:disabled::-moz-placeholder{color:#000}.topcoat-textarea:disabled:-ms-input-placeholder{color:#000}.topcoat-textarea--large{font-size:3rem;line-height:4.375rem}.topcoat-textarea--large:disabled{color:#000}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea--large:disabled::-moz-placeholder{color:#000}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#000}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#dfe2e2;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_dark.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/brackets.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/brackets.css new file mode 100755 index 0000000..8e32479 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/brackets.css @@ -0,0 +1,69 @@ +/** + * Brackets theme + * + * @author Garth Braithwaite + * @version 0.0.1 + */ +pre { + word-wrap: break-word; + padding: 6px 10px; + line-height: 19px; + margin-bottom: 20px; +} + +pre, code { + font-family: source-code-pro, 'Source Code Pro', Courier, monospace; + color: #535353; +} + +pre, pre code { + font-size: 13px; +} + +pre .comment { + color: #A2A2A2; +} + +pre .support { + color: #0086B3; +} + +pre .tag, pre .tag-name { + color: #446FBD; +} + +pre .css-property { + color: #8757AD; +} + +pre .css-value, pre .support.namespace { + color: #F18900; +} +pre .vendor-prefix { + color: #535353; +} +pre .constant.numeric, pre .keyword.unit { + color: #738D00; +} +pre .hex-color { + color: #F18900; +} +pre .entity.class { + color: #5585C4; +} + +pre .entity.id, pre .entity.function { + color: #900; +} + +pre .attribute, pre .variable { + color: #738D00; +} + +pre .string, pre .support.value { + color: #8757AD; +} + +pre .regexp { + color: #535353; +} \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/main.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/main.css new file mode 100755 index 0000000..2d0bda3 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/main.css @@ -0,0 +1,508 @@ +html,body{ + margin:0; + padding:0; + height: 100%; +} +body { + font-family: source-sans-pro, sans-serif; + position: relative; + -webkit-font-smoothing: antialiased; +} +body.light { + background: #F4F4F4; +} +body.dark { + color: #F0F1F1; + background: #4A4D4E; +} +body.light { + color: #181919; +} + +h1 { + font-weight: 600; +} +#wrapper { + width: 100%; + overflow-x: hidden; + background: inherit; + position: relative; +} +#site { + width: 100%; + position: relative; + z-index: 10; + background: inherit; + left: 0; + transition: all 0.2s ease-out; + -webkit-transition: all 0.2s ease-out; + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); +} +#site:before{ + position: absolute; + content: ''; + left: -4px; + height: 100%; + width: 4px; + background: #3B3E3E; +} +#site.open { + transform: translate3d(250px, 0, 0); + -webkit-transform: translate3d(250px, 0, 0); +} +pre { + font-family: source-code-pro, sans-serif; + font-size: 12px; +} +/* Main Header */ +#main-header { + color: #373435; + background: #fff; + height: 98px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px 20px; + position: relative; +} +#main-header hgroup { + text-align: center; +} +#main-header hgroup h1 { + font-size: 40px; + margin: 5px 0 0; + letter-spacing: -.065em; + line-height: 1.1em; +} +#main-header hgroup a { + color: #464646; + text-decoration: none; +} +#main-header hgroup a:hover { + color: #000; +} +#main-header hgroup p { + font-size: 13px; + color: #999; + margin: 0; +} +#main-header nav { + display: none; +} +#slide-menu-button { + position: absolute; + top: 20px; + left: 20px; + display: inline-block; + vertical-align: top; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-background-clip: padding; + -moz-background-clip: padding; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + padding: 0 0.5rem; + line-height: 2rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + -webkit-box-shadow: inset 0 1px #fff; + box-shadow: inset 0 1px #fff; + -webkit-border-radius: 3px; + border-radius: 3px; + width: 2.6rem; + height: 2.6rem; + line-height: 2.6rem; + border: 1px solid transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +#slide-menu:disabled, +#slide-menu.is-disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} +#slide-menu-button:active, +#slide-menu-button.is-active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + -webkit-box-shadow: inset 0 1px rgba(0,0,0,0.12); + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} +#slide-menu-button span { + background-repeat: no-repeat; + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWw0KCTwhRU5USVRZIG5zX2V4dGVuZCAiaHR0cDovL25zLmFkb2JlLmNvbS9FeHRlbnNpYmlsaXR5LzEuMC8iPg0KCTwhRU5USVRZIG5zX2FpICJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlSWxsdXN0cmF0b3IvMTAuMC8iPg0KCTwhRU5USVRZIG5zX2dyYXBocyAiaHR0cDovL25zLmFkb2JlLmNvbS9HcmFwaHMvMS4wLyI+DQoJPCFFTlRJVFkgbnNfdmFycyAiaHR0cDovL25zLmFkb2JlLmNvbS9WYXJpYWJsZXMvMS4wLyI+DQoJPCFFTlRJVFkgbnNfaW1yZXAgImh0dHA6Ly9ucy5hZG9iZS5jb20vSW1hZ2VSZXBsYWNlbWVudC8xLjAvIj4NCgk8IUVOVElUWSBuc19zZncgImh0dHA6Ly9ucy5hZG9iZS5jb20vU2F2ZUZvcldlYi8xLjAvIj4NCgk8IUVOVElUWSBuc19jdXN0b20gImh0dHA6Ly9ucy5hZG9iZS5jb20vR2VuZXJpY0N1c3RvbU5hbWVzcGFjZS8xLjAvIj4NCgk8IUVOVElUWSBuc19hZG9iZV94cGF0aCAiaHR0cDovL25zLmFkb2JlLmNvbS9YUGF0aC8xLjAvIj4NCl0+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zOng9IiZuc19leHRlbmQ7IiB4bWxuczppPSImbnNfYWk7IiB4bWxuczpncmFwaD0iJm5zX2dyYXBoczsiDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDAgNDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQwIDQwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzd2l0Y2g+DQoJPGZvcmVpZ25PYmplY3QgcmVxdWlyZWRFeHRlbnNpb25zPSImbnNfYWk7IiB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj4NCgkJPGk6cGdmUmVmICB4bGluazpocmVmPSIjYWRvYmVfaWxsdXN0cmF0b3JfcGdmIj4NCgkJPC9pOnBnZlJlZj4NCgk8L2ZvcmVpZ25PYmplY3Q+DQoJPGcgaTpleHRyYW5lb3VzPSJzZWxmIj4NCgkJPGcgb3BhY2l0eT0iMC43Ij4NCgkJCTxnIG9wYWNpdHk9IjAuNzUiPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRkZGRkZGIiBkPSJNMzksMTF2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwxMywzOSwxMi41MiwzOSwxMXoiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMTBWOWMwLTEuNDctMC40OC0yLTItMkgzQzEuNDcsNywxLDcuNTIsMSw5djFjMCwxLjU1LDAuNTIsMiwyLDJoMzQNCgkJCQkJQzM4LjUsMTIsMzksMTEuNTIsMzksMTB6Ii8+DQoJCQk8L2c+DQoJCTwvZz4NCgkJPGcgb3BhY2l0eT0iMC43Ij4NCgkJCTxnIG9wYWNpdHk9IjAuNzUiPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRkZGRkZGIiBkPSJNMzksMjJ2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwyNCwzOSwyMy41MiwzOSwyMnoiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMjF2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MWMwLDEuNTUsMC41MiwyLDIsMmgzNA0KCQkJCQlDMzguNSwyMywzOSwyMi41MiwzOSwyMXoiLz4NCgkJCTwvZz4NCgkJPC9nPg0KCQk8ZyBvcGFjaXR5PSIwLjciPg0KCQkJPGcgb3BhY2l0eT0iMC43NSI+DQoJCQkJPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiNGRkZGRkYiIGQ9Ik0zOSwzM3YtMWMwLTEuNDcxLTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwzNSwzOSwzNC41MiwzOSwzM3oiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMzJ2LTFjMC0xLjQ3MS0wLjQ4LTItMi0ySDNjLTEuNTMsMC0yLDAuNTItMiwydjFjMCwxLjU1LDAuNTIsMiwyLDJoMzQNCgkJCQkJQzM4LjUsMzQsMzksMzMuNTIsMzksMzJ6Ii8+DQoJCQk8L2c+DQoJCTwvZz4NCgk8L2c+DQo8L3N3aXRjaD4NCjxpOnBnZiAgaWQ9ImFkb2JlX2lsbHVzdHJhdG9yX3BnZiI+DQoJPCFbQ0RBVEFbDQoJZUp6c3ZlbVNKTG1SSnZnRTlnNitQMXFFSEprS0dnQ0RBY1lkV1pId09IbzRRM2FYa094anBXV2tKSmtWVGVaMEhpVlpXZVJ5bjM3MQorMVFWZ0xsN1pFVWVSVksySzFDVkVhNE9nNW5oVU9qeHFlTHYvbzh2Zi9QRjlkZHZmdmZ3UmJxYUQ5UGYvZDNOMjRkbjc5NjgvZm1CCjFNTXZYcjc4N3R0M2IwSDZ5YTkvZWdqcjFTeVZybjlSdjdLSy8venc5dHNYYjE3L25GOWRKZm55SGxmLzVCZmZQdnZkdzh1WEQ0ZGYKUG52OTlicy9QSHY1OFBhbmg1LzhWTDcvN1l0M0x4K2t4aCtldmZyZGQyOS8vL0QyNnRzLy92Nm5mbXRwNi9iWk8vbCsrVm44V1VpSAorUE01SHI3OEZiNSs5dnFQejc3OTlzWC8rNENicFlwN0hkOTg5L3JyRjY5L2Yzenovd2p4OEVYS2g3UWR2aWp5MVg5LzhldUhiOS96Ci9lMmI1OSs5ZW5qOTdzdTNiNTQvZlB2dHpadVhiOTUrKy9QRHpaK2Z2VDc4NnRudjVadG5oLzliM3VETm53N0hsOCtlLzhja2I1Mi8KdW4veDhrRmU4Tld6ZDRjUTBSZlh2d2p4cStOM0wxNSsvUS9mdmZyZGc3ejZ1cEdjdm1LVC8vU3R0Q1hONG0rUXkxZS9lQ1dVM3p5OApleWZQSlRkRWYvNzY3NC9qWXdpUjVTZi85dXVIMzc5ZzkwdTMvSytmV3JOdjMzeno2dG5iLzhDMWh5K1crU0QvMlIxLysvRHFtNWZTCmUzemRPRi9sd3hmOHQvOXA5ZVF0V09lTHVGYnBsYkllMGx3UEtWZjl2dmZOd3g5ZlBQenA1NGQvZVBQNlFUdmcrdTI3MytnUUxNczgKNjcvNnphKy9rekgrcDljdjNzbURyU0J0MmdPL2V2UDF3MHVwMzY2L2YvbU1MODRTK3I5YTRiZlBaRTY4azdGNzgvSzdkNXhaMWU4ZwpQZnpMWjM5K3dEQUZ2Y0UvZnZQdytyZHYvcG5QK0VVTTBrN2NyclpEWE9TTlF0eVdRNmhzUCtKUnQ3bmRNL1IvdFdrMGhHYThmY3lRCkwyV2Mvdkh0aTkrL2VQM3pMMUtWdms1eDFpSDgrN2N2dnU0akdBN1YvcGZHcitydy8rYi82OVBLaTc5NzkvRGFubDdtemMydmhua3cKWC8zcU4zTFh1OWRmMzd4NWhkNy9GaE5jSnNCcm1Sc3YzL3hldjJ0Lzh4dTUvTHR2OUEzNCtTc1pxQy9mdm5pTk5xZC80RGYxcXk5ZgpmaWRmL2YzYk45OTk4NHZYLy81bStva3U3WDkrZUM3clY4Ynk2OE0vL3U1L3l3ZFpuNXliaDkrK2ZmWmNHcERQcmM3VnN4ZmYvUFM5Cnpjbkx2WDA0NkpkeUpULzY3KysvK3ZiaDMyVlY5Y3VWZXZmNmp3OHYzM3d6Tk5zb3dsVU8vL0xzN1RmZjMvU1hMNSs5ZnZiMlFIcHIKK1pjdi9pamZQSk9lNm0xMzJoTWFsVm55alhRT0wyR1ZreHU4cDhMdzFSTnU5T3pkSDRRQlBieisrdHZXdG43Y1A3alN2cis5M3p6SApISHg3T0w3OTd0cy9ISDc3NXMzTDF1eitxOWE2a1VsRi9iK05lM3pKQzE3LzQydnRvUE03V1lYVE93bi8rWnU3aTlSKy9BN3k1ZDl5CjZ6ZlBYcjU4OGZ1M3o3NzV3NHZubDI1dzRmdDJKLzN1UXliV24xLzk3czNMRjkrKzZ2TnBvSHo1N08yN0Y4OWZQdnptejkrK2UzajEKNU1FOTNIMzlRcGpjSTh2NHZYVis4NmRuNzU3LzRaY3ZmdmYyMmRzWEQrOWRmUmlBZjMveCttdVorNy81N3NXN2g5NUJiMTU5QXlubAo4SnMvUFB2bWdhL3g3Zy8zclBtYjFtRCtTbGoveU55LytPSTlYRCtzaCtQcjRmdS9mL3ZzNnhleW9ZalE5ZmR2WG43OThQcndhN0QzCmFmZEp0cTl5T0g0OS9kczBXd2tzeStIdnZqcStuZjdiTkovK2hKTVNoNUtzTEZZeS8vZXk0djlKZm8ybHRGTG5iVmV1aDNLVWNtUGwKZGloMzgvMDAzM3ZaUGRqNEU0ZVNockxzU3RZeThWY0pxNVRDMzNVbzI2NWNoMk1yTjYwY3c2MFUvM1E3eVljN2ttN0QvVmpHcnVQRAorVThheWpLVUhGZVVTWC9GTXBRYU55bjY3L1ZRamxxbS8rdlNXRDQybW1rM25zc3dxbjFzcFV4dGVKZGhrSFZVeDlHdFV2QWJvMXAzCjQ3c05JeXovVGpiVVB0akhOc3o2RzZOOE40NjIvS3MvODhXeGp0TnVvSk9NSzM1alpESEdLMHZsS0plVEViNjJzaDliR1V2OHVtTzUKUFJsRnYybmlHUFl4UTlGQjhpSGJiTEJrZ0NZYkk0elZqWlZibGpzcjl5aStzdkF5NDFnR2p0SmlIVi9ab1VjdWtudjJUZVRMcjN5OQpqYTl5eXljTzlvUXJwNHc4d3NUNzRqNHhwYlNrTlJWUnRyWjBsSEtiN21XMHc1S1daY2xMV2VxeUxkZkxjYmxkN3BaNzZjaVlVMTd5Cm1rdmU4blUrNXB0OGwrOG5lYUFnczNSWjg3cXVkZDNXNi9XNDNxeTM2NzNNaFNEZHNKUmMxbExMVm83bHB0eVdlNWtub2NhNjFGelgKV3VwV3IrdXgzdGE3ZWkvekpVNWIycFpOMnRucXRtM0g3V2E3Mis1bDBvVHJkTDFjNSt2MXVsNXYxOWZYUnlrMzE3ZlhkNXhKVVY1ZwpPZVpqT2RiakpsOGRqemZIdStPOXpLNHdzYmZUelhLVGIrUUJicmFiNjV2anpjM043YzI5VExiQVVWaHU4KzE2S3c5M1cyKzMyK1B0CnplM2Q3ZjNkTE9PUzdwYTc5YTdjMWJ2dFR1NTFkM04zTzkzZDNkMWpSdHhMaDkzbmUzblRlM24yKzJzcGNzdDd1ZkwrNUVmR2NwYlIKYkovdmhuSTdsSnVoSEhmbGVpaWJsMG4rcVVNcFExbDNKUTlsR1VvYWlrekE2VDYyTXJLd3puem44ZEh2eHAvYlhiblJNdkhYY1NqWApROWwycFE2bERHVWRTcDd1Y2l2THJxU2h4S0dFb2N4ajBTNmZyTy9IcHg5L2JvWnkxTUtWdVJ2SC9lanR4OHhIYXo5RSsyR1JvWmlHCjBkZ1B3YjdqOTkxdDNYelN0K3pQcVhYcHZpUDN2YmZ2c1pOKzJuZk5kTklqMmh2WFZqYVdhcVZZV1ZteWxZVWxXWWtUMTU1dG1jcjYKMi9UM045TjcrYytSNWRyS3hsS3R5TnFlNUovVlNyYXlzQ1FyeW5xZDBRc0g5Ykc4NC9nZE9WNlY0NU01SUJpRW1kMSt5MjYrWnE4Vwo5dVBDZmd2c3B6dDJ6SkVkVVNlK2VlYTc0Z1ZudnRBdFgrQ2FqMXo0aEF1ZlNKNURac3VkZE9hTjhLMXI0VjlWK05ncTNHd1JyaGFGCm04K1RUS1E3NmVVYllYclh3djdxZFJGR21JVWhKdGxSZ3V5dzl6TGl0OUlkeCsxYTJHYmRpakRRTEl3MHlSWVVaRCsrbDRsd0s5MTAKRkc2NzFUb0o0MTJGQVM4MUNTc09zbkhmeXd5NWxUNDhsbXRoMWJVVVlkcFptSGNTRmg1a283K1h1WE1ySFhzVUJyOEpveS9DN3JPdwovU1RNUDZ6ekpOUDRUc2I0UmphR2E5a2dxbXdUYTg2eVlTVFpPSUxJRHZjeTNXNWxMSTZ5cVd5eXVaUmxsVzFta2UwbXlxWXp5N3kvCmsxbHhJeHZSdFd4SWRaS2RhVTFaOXFna2UxVVFXZVZlWnVpdERCOTJVV3lyMkdpemJHN1lpRU9jQTdoc0UyaXRGdXA1TGRhVEJhV2IKT3VRMzdQd2JKUU9WRkVSMjRIeDQ1SFpzaGczNDVmMWlpQjJ4TTRiN2dkVXJTOWhrVW1XWlVFRW0wNldwRkcyUDRPNkRIOTJCQXRjbApkcUhNMWVzN2tlMUYySXBrdHhFaGdQZkdmdGMydTFWbVdiMnczYVcyM1dHenU4WU5lWEdUR0pMSm9NV2xCZ29OZHhRYmdna091WWtPCjEyTzNveGNncDgzMzJxUjhvREIzeTQ5WUxicFdmRU5zdXlpLzU1dnpyWFVZcmltVjNLWGR5RklrREUzb1VRbFBCUitWNUc0b2lOOUoKMDhHRWJIMGRsNXBOU3FaYXdhYThvZDRNRzJGdjZNVVhlMElmZVJ3b0hhU2RzRUJKSWNuSUY1a0JSODZGRStuQXV5TGJCdUFjWitRNQpmYXAwdmpOeUh2SWU3ZUlMN0dqUGpiNlBGMm5YbjZ6R1QxNk14eWIrZXVtS1ROMnBPTVhVSGkxNXB4bVp0alRaSC82akF2bE9SOTJyCllMN0hOQVd0U2Zvc3gybW4yTjFRZ25hbEFMKzNrMUpQU2xjaTlhOTFjald6bGVXc3BMTVNMeFQ3bVhhYTdwbENoeFUzQ21udDkrM0YKSW54aWFwcjJqU2xqUjlYT0xwYnQwVkpkNzVzR0pWL0wrc1RTVmNvOGxtbi9zUmtiK3QvbkpUMVNPQ21tT1Q2eFhPcmdDMlY2WXNVbgovMXpTM1QvcDU3TTE2UHRpYUQycU1xcUwyYmRXVk1KeW80UWJLYXJwd203RXNKVSttZHJzeTl2TkluMzZuNjVtbDFCOTlZNEw5cWpyCjJGWDY4OVZhbWdsZ3RaS2JnYURiaHRLNFFLZnZYNW55VnpOTGRQUFV5WEwwQlhrN0RVYXQwY2gxdkxnY2p6dlQyUG1DTkdQSzZmcXMKT3l0YnQ4NjRoZWJTRW0yZnA3T1ZlYm9JenhmbGU4dDBaakM4dEZMZnQzNVBsdWMwMkNBL2VRMi9ieDMvOVpmZFoyL3drb2c2YWovbgorby9LSStmNmowc2hNM1RvTzBvYm0ybCtxOGtic1drLzk0UEVVWFlTUnh3MG9CdlJnYWdCVGFJQ1FRbFNGUWhLMEV3TlNIV2dHeHAvClZBK3FUUTlLcGdkQkU3b1JMZWhJUGFqU2xMUk1WSVVDRjhjOXRlSmIzRUd1cjZJSnFTNEViU2lxTmtSOTZOYjBvU1Axb1VwOUNCb1IKT0ZlWVRDbTZwNFlMdFVnVkk2aEdsYW9SbEtPRnlsSGdVcnFuaG5SRERRazZFclNrSW5kRlZWR0VKbEdVRXRsaG9Hbm1qdXJTcmFoTApVSmlnTWtGcGd0cFVsa3pGQ2FwVElxZWFxVDdkbTJKOTFES0ozQWJKRGJKYm9meTJvbjdDVDZEODFMazRaRm9kaXk2bHFXUldxVUNoCkxGUGoxR2RTMXlCanVTVlZmNDhNZUJTUktBOU5neEMwWTZwbmpITW51ZXg0NUk0alRqdVpCT1dFdDExa2ErK1JJTTRsaHFleGlVZloKeCtkY3g2WXRhaG5OVk9QUDNpdzNtQnIzdGpEZlZ5ZjdJKzVLMnBXOTJTMmZsSFZYeXJRejVaV2RrYTlTVWRxWDY1TnlQQzFUczNsNQp1VDByNXovMzU4WG4yRFR1MVBmaFFva1hTN3BZekpKM1h2SWpaWDIwTkZ2dXREUHNGcHFiMzFlMjd5blgwODZjZkxrY24xakkzS2VkCjVmcDk1ZlpwWmJwQXZEU0lUeTdUbzE5OTVNLzVKdnF4RFpuaFptN3FaelNQaFpiRmlwb3ozYnhackxqMWM3Tml0dEhKVEtYKzQ3eWgKTHhzZkQrZXNyaUs3Sk85V1dyWFpMaE9OUmxyV1Z0ek1XMXZackZ5M2NyekFvK1JuT21OUWwxaFROOTFmNWtZREg1b2VZVUtQY1ovSAp1TTdBYVk2MDRUek9hOTdEWTNaTXhSakw5RjZlY29HVGZCOExtZDdQTjU3QU1rNVl3elJ5aVk5bURjTjZmNHd4UEpFTm5LLzh4OWZ4Cis4dGZhQjEva0ExMVowVVZrZTFHaloxMHdrTE9Tc3N5aWFTM0RyN1lvM0FDOWNmTzVwR0ZUemJUSzF0Rm9IVFA3QzE4czdLNXFITTIKVVJTRmc3Wk1sRS9kU3dzLzdSMDl0ZXFyVFpBdTZhL0ZEM3kyMXhTQTRiZkZBbExmTGJ5M0VDenB3WjNveEsyUXRPbklQUW8zdW0zdQozRm5FUDBpUzhPa3U4bmlRa0F2RjhrMUU5R3Y2ZDIrRVg5eVpsM2UrRHBQSThaSHlQTnk5Y1BpdTE0V1Mvalk0ZnVuNmxZTHBDRUV3CjBNQ1k2QWFHSXhnQ2VhRTd1RTdIalQ1aDlRcmZrQmRoYWQvVFB6dzNsdXZNMXRtc3M5Zk9WbzJqVG8yVmRoYnFyTE16emM0ck80L3MKdkhIa2lMZFQ0NE1qLyt0OGI4L3JSaFkzc3JXQm1VMERIOXV6cmhObWRVSHlPZWRIZzB4eldXNTVqTXVjaUIxam1kN0hOYjZYVFR4eApnLy9ZZFd5RzYzK2JSbEJ4T0VUNWF6M1UrV3FSNVhJbzZVb1dTRVRWMzB4Lzk5VlRxaDYvUFcveEtrdkZQQjlxdUJJOWNIMjB1ZE42CmFPc3FyR1ZiZ253Wm9OMUdSeW5uV3VNaWY1UWM3ZXNZOHJvZFVFRWJpVmRwemt1NzJTYzN4S2VaUlRQTnE5U2FaWkd2dUU2VWExRysKMmRhMjVIa2pkbHFZNHBMbGo0amZZV2dyWGMzQ1Z2cERmYWIyOU5uV1dSZ3Eyc3Boem9YWFZXSEUycGFvaUZYYmo4SlIwWmFNVzk1MgpiZVY1M29abit6enRmZndveG5KVlU5clFVczFsKzhTaFBHM3R3a3kxSjkrMksrSG5qMDNUZlNWcDVYamJJSTZPVkx3TVh2ekh0OC8vCjhPTHJuMDcrQjREOURiSjR0YTVCOWttTVk0cWxyQVF3eXVKaTkrSnJqUHh1MmRvVkI3OUM0eERzaW9OZFljdFVIbGlVOWVHVlB1SmkKN2JDblhvaHVXdGFybERDOVArTEcrK3MvcEp0Lzh4OS9sajdHdjNMaG9oMzgzM3ovdWJkZEo5cCtrODJmV1d4M3ViWU41WFowUE50bQpzUmdXU25ZRFNrS3lGd1REZVMwVUVZRDBPbEkwdUtkVlNFV0NsY0xBTmNXQU8rNFNBSHBoMzljOS81cld2dHRUWUtPQ0dOMGpwUFp0Ck5aTmpMNTROQUtvdVhVZHcwaXZjUUhINU1hemtwWi9IMGJDajhUcWJVWVpXUWtWT0VEdlIwQk9uaHNKaUtBckZVUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJR0pLQ3BzSTdBMVBjWkhYcnZoOGVNcUJEbm9RTkdYMnpUUkFLQmgwWXdRTWRQbkNqMHM0QUlWaWFkTE01ak9CV3h3bGlyQ0VKSWIxVwpSeEZTWmxVTVlhV2NDdmtVMG1tV2ZvQkllaU9UYmFZWW1nMHdlRnZVUDQ1dU5keEZSMTdzZ0J0bU81eWIxL09HMWtFMUJ4WXoreTNtCk1RaG1DSDh5WU9aSmFCa0ZCSFR6dHpyY28yS2JETk4wMjNCTTE0WmVjbk40TnBpU3dwTm1Da1YzT3kvNkFCUnRVRkUxbjZvL1BEV3QKSWxPeldLbGRGR29ZbGRiZ2Erb1pSeG9XYmllS2xmZFVPTHJLb2VoUGpKdnFIYXA1ZE4yRDJvZmhRUlVSQ3YwREdzZzZVUW1wVkVKYwpEYm5kcVNJbnlvanBJaGg2UjQxU0gzR05aRHBSU1RBbk5nT1MzbENxdm10dzBraUZ4RUdsbzBaeVE0M2tEZ0xwWkFwSkdoU1NZc3JJCmtjcklMWlVSQlp4MlBXUVo5QkRvSUUwTG1Xamo2R3JJdVNLU1RSR2hLdEwwa0NOMUVXb2l5b2NNY0dmNDV3R2tTRS9oK2Q5MzdlODkKMWF6bWs4R281WVA1SXUrNlY5TC9Hbjgza1BVSXFsZUR2RUdzUTdQUXA0YXc3Ny9UN3ZkaTdOZmgyTG5oN3RYNEwxeHgyaUh2SFg5Zgo3Ri8xR3VpLzZzenQvMTd2ZkF5M0J0VTIvRDJCUDNBVUQxanRqdFJPNXNKWURhdTltaTlhUFIwZFZFOC95RFRncy91UzYwc3RFUkJ6CnVzdzRZd2lja2RYLy9qMW05QkdjK2dzZTh5Nll0M0owTVlUbWxoZ2RGT2NPMFhPZjZ1SmVqbE5IN1BtbjhmZnAzeU10ZThSQUR3MVoKSHNWdVBJN3NTTHUvMHpSOFdFNWNOcU1qNTdMUHVuL2ZQTmpUbWE5SCs2NjdsSHV2OWg3dWc5QTlNRHRrNnZFQ01yVVlLTFhEVVIySQphaEJVNWZUYzRXV1BuOGdicnJuUjYxWmZhTXpJNUNmSnRuemQ5UGN1MGV2bUVpMWtWdVlXblNnRmROL29MUjlPdHozZCtIenJhNXRmCjIvNThBeVJtbEp1Z2JJT1Q3WVBqVGpqdWhTTjJkSThlM2VOSEc0SjBVc0hIUEtTbkdOTEhVS1R2d1pGT0EzVHRvOEJyUWJueU9WcDgKS044UEdPK1diN09GVHcwbmZZNlVMczJvdmtkTEQzaHBLd05jZWpwRFROL3VFTk9QejhwcS9vTjFQemVuQVMwOVlxWG5ObEh2emE2awpiNmJ0SDl1YzFWbTdjYS9qM0oxcytxN2NDdnNrVGdZSlZGNnVybHlmMEhmV1hUZURyMThudDVUSlpuaXhXYjVTV2FDSW9xeVhIRnczCkN2VUw2N1MvNDlUbjVGY014Q1VuM1dsSXhHbTU3QW1NcDhiOXM2Q0ppOEVUZXp6L1dTREZkQjVOY1FMM3Z4eFVjUjVZWVhFQTA4WG8KaW5MaXNWMVAvTG1QQjFtazZkRTRpL0NlbGZQWXVwR1ZNMTFjUE1mQm1kVFh6N2lHaHBXMHM5NWRiU0prcGt6RkdlSTdyQjdDS0NwMAo2amtJczhxMGpZZ1dYVmVvMTNtTElaZWRHVU5xZHhQZjUycVBWcCs2cmx1Z2RyK0pJRnpOa0NJZm02VkdMVnpkWnJSZWlmeFUrOU44CmRBdThmMW1Tc0Q3WXBsSVIxbS9YaGxCRTdzY2I0aSs4YWwyRVp3NHZrVmU1TkhSRDVTYzNwRGF3T3FmRWZzeHBxelQ2eVQ1YlUwKzcKVUhBOWpHdmF1OWJNZHBYelBCcFJQcjJsRHpLbmZQZnExY05iV0ZUMER4ckJ6R28xU0g0dWtJMVMxUmhHV1Jwa3o3Rit4eFlFZStlaQp1NEtBSWRHNmVKMmJERjJhcE53akdUMFVkUlNGZTlncDFiMXBpRnFzRGFYWkEwb1YwYW40enNkMXpreXRrNEx3TkVqQ3FuSnVnMFI4CnRLM3N6alZQMFQySlhqSUFLTnVoOW9rTm5YcmlSTUJUSWZ4SkZWRlhSbysrUHhwdmNnK0ZDbnZSY05lbURHZHJOZWVKMmlxaFhMUkQKVkZOWnRkZ3U1Y0ZEdVczR3piUHNJS0tHSVowYVdEMjFrbHZwUDZXVjJzcDFLOGRlcHZWbUtOM2J2bmU1akRET3NDdHBLT3k3cVN5dAo1RjA1LzZrblpidFFycWR5ZlZadUhpbTM3eW5OYlRSZDlsbFR1Zi9Rd29rODFmZzV5bmtNYm8vQ0xTME85OWhYYWRqSGsxUXV5bU9QCkpzWlNuRXdkM2NXa2NKbmREL3BsZHcxdkZnZHpPMWhxRmw4ZnNNOU10aVp1NkIyY1c3QnV0bkRkU25QYnRVM25POXBpTUlFVHpZN1oKNWlZc01VZk94RnZNUUhjTFI4Nmo3aEsrcGt2WXhvOVl5VUJ0SU5FKzVyYVhTbU12YkM4UU9HaDNtYzN1a21sMVVSZncxaHpBdDJiOQpCUU9NRk9LNjFRWGkzdGJzTHZUOVR0L2ovdTBPNEcyd3Vkd3dLaGdHenp2REVUYmY3M1RpL0YwcEczZUVqVHVCVmVMdFVKb09vZW5nCkdZN1ZkT0lFWG5kUW1lME1LTE56Q0EvSW1JYUpVVzFrRDRKeHNld1U2M0tPY1RuSDA5MU1GMUF0RjlFc285eDZqbXJwWmJvZ0dWOUUKeUQwQklMZGNSdEk5aHFKN2I2R21Ic2FZWFkvVzlTaGRqOC90c2JuK0RGM3FONUYrRU5vcG91K2piM3NjczB2V1hZcnVnYlpOUUI0RQo0bHNGUmUwRGE3dVlleDVPMjFYREU3VncxQWVuQytyZ1pSUEZtU3A0b2dlYUpqaGRVQVgzeXVCZUhkd3JoTlZNb2FWdGRubHFhbUZYCkRWMDVqQzN0eGp5b2lQZURvbmpYRklNV0ZUejVqYS83ejlaS2JhWHZYWDBienEwc3ZVeW1WM2J0TWc0NlpoaDF6VUhqN0dYVXhEaWUKMDZERDNPeks4YXhjbjVSTFAzVWlPOTJYaXpzM1RUMlBseVlHVGYzUGs3SjhjT0VPTm0zcGM1UVBqOVorZjd3MlF5U25reGpKODVqdApmYVRrUG01N2pOdzI1OXpVREhhanNlN09wbWszMU8zTWRPcXJhOTQ2OTlkZCsvZ1dHeC90MEhnU3kzRFRQRlhiU1VSRDZyWTZzOWJkCmxkdUpLLzdJNmIrWkE2dFFPSFhYcFJydXV2Tnk3Nzdza1E2RnNtMmVMTnhCdlpoeEYvSndSMzYxRDN6WUtKU1VadURMSnA2M0dJZ0oKMWo3YSsrNXRrN3VsM2UvR09NVVlFcUZCRVNvT2VXaUVCa2VvV2tFM3hOU2lKTzVOLzFEdXFVenVTR3ZodFZrTVBYQmlESjFZVFpNdwpKU1dsaWJxUGg2U0dDN0Z4ajBYSGVaekZQaUoybTB6OTJnWUI5TEdnMkY2V1N3R3lIaVo3L25NZXgvWlkrTlFGSVB4MFJycjdtUEkrCmhCWEJLSFVIaXJqOHZRRXU4bHhGdVNQbVJnVGF6UUFUR2JhSDBLMFF6ZVp3Z3ZQNGlLcy94RHJ3VDY5ZlAzdjE4UFhoOTBZNmhKOU8KbDRnZDYzSWg0MDl1dXNhUTlTYzhIcmV1NGUvM0hyMCtHUXoxRklLNkQrTGZnMC9WQjZ6KzMrc2Q1bFRVaXFrQlRyZTllNnViT0pZegpKY2tmM0lQdSsrT2Z2c0J4MGpjd284VlRzeEc4QjBrNzlmZDUrZ01mN1lGN2pvQ3h0M2Y5UFZtSGg5M2pqcHJkWThrVExnTi8wOVM3CnZ5Y08ra0VTbEh5bTlDVFg5MU5QVC9LRFpsVDU4WUgxZ1FjYmQxcEtucEdJTmhhMU9rTVhMelREWHFuaDZjSWZGeG5pWjJoS3VLT20KM3lXbE5iMmpmUm9IbmVlTFBGVEkwblRlY2RGbzREQ3M1eHZDR3hLeEJ4dlhMVGhNSWhaZ282WHpUaGFvbWwwcWw2UkNtRFFWMnZYVQpFRXlSN0svUVZuZzdKRDl6QkpNRDZudnFzMkl3ZW9Mb0hhMHlOYmpLSHFwaVFKVWRjRDZieldRUG5COHRKM2ZiL2RUTUp3cGNpYWF2CkxHWkljU2o5YWtxUHEwRmR0L0FmVTU4bXM3VW8xdjdXZ0M1ajZRRWh1NUQxbml0eFg2YW0xZldTTHBibGtaTDNaVG9ockU4cTVmRXkKUGZwVi9iZ3lmVURsQzhyZmVabWVWdTNwNWNjR0wxUm9Vb0pMWVd2aklpcDdSVW9DWlpkck1SSmRWTGpwcXpHM0MxazFYVStheTZqSgpWOWpleCt5S2lRYmIxZUJ6RnNQVFFITWRNTmRDZDZhR2xmUEluWDNjVG1NNUFNbWRSZTRvVUc1dHhscmhQNVBOeEJ0enFONVpFTWRzCmNUekIxQk9IenVVV3orUEZiUS82Y3owWlovRis3WFlPdDM1MHcwaVBFdW1HbEhCYXBqRi8wTTRxazNiYzdyemtzMEplT0EyMm45TnkKd2NmeFNPazJwVHFOSDU1VXppdzgreko5WDRVUExVOXQ4TWsvMDlPci9xZHA4REVPQXAzaXp1RHBtVnJFdGZxR1dxNngxWlFHVDlJSwovbUVxMmdTaGhCN1QyREswUWplN2I3anF2TXZPcXE0ZWg5eU9icDZMSE1SNWlFTnRMMFQvWGVRaXprY0tzZ29xTTduZWNSSTFpSi95CmtzNVBvcGxjT2xmSlpvOHMwOEJZL0tmUDBUMWYyU0ZEVGdFd3ptR21NeWJ6R0xPSmo1UVRqak05a1FGOUh6dHFaWHJmbHg5UjNzdmoKUHFyODJPQmZvTUVQaVU1NThzLzdHdHpqaHRPWldhVHM3RGhtdzVtYVZXU1hPWEVNczZIZFJzMGdMaFc1ZTNzMTB4TUJJU29ZVFJaNwpVTGxPWUhlNmI5TFJRbHZ4Nk1xK3AzU1VMSUtra0dsQXhpZGFRckVRRTUzWGluUUFLNEhkVzEya3dBb2t1cTJ6Z1IzQVp0UWpCdGVwCnNxclVmTlpaZWRGa2JPakdRcGJnVzUzTmJhM0ZGN21QcGZNcmQwdDFNQnVWcDRrYVZOZVRSa1ZvMUc3MkNzbXAwRHI4S0lMNDlrSTUKejZhaW51RDV2U1ZPTi9ISlpYbEttWjVXN1daOWFwbWVYdlUvVFlOdTFybzlTejU3bERsYjdySXNPbVJqdmJYRVhTc1RkczFNMVhXawpqV3FsZlNwWWFxNmp6REs2dG1DVWdra0s5aWc0cytESVVpZVdnc3h2bVg1TG9lWFo4MjdSVTlYU0Q5ZmkwVlJUQTVFL0pmWHdhZkxoCmxuNjRZOGNuOHpLNWg4bTlTOGtnNUtFNWxXNEhJUG4xa0YycnU1SG9RcHJNZytUdW83M3J5QjFIM1duVVhVYWp3eWgxYjlFME9vdDIKanFKVE45R3BrK2dSLzlCMDRpQjZ6RDIwY3c2OXp6TTBQZVlZdXVRVWVvSWZpTEU1VHkwM1R5blQwNm85WW9tNlVLYW5WLzFQMCtDUApIT1JIRHZJakIvbmJYWjkvK3czK3lFRis1Q0EvY3BDLzNmWDV0OTlnOTNWZlBMbnU2VVM0eWt0Y2F0am91bDYyd29RcVdlWVlLS1ZrCmRYMkhHZEZURi83Z24rc0ZyL2xuYmRVYzZNZ3NFOUloaDZ0WmVOam9Sai81eHV2TFBlV0xOVndoYnYrUWxxczE5UHhPNzZteHY3NUkKcXptdU9GTTR4YTFjdVA2MFJydStsQXMrLzVIOGlXNy9lTm50SCtIMlQrNzJiOW5FN2s2Z3liY25FT1ZIQzNlczY5dXpjdk5oUlpzNQpoU0hqNTMwK2x6UHZrRVloZDZESmJIRHgyNFlUUHo5NnFaN0gyYmd4Y1R4R3JneWdzdkhreGZIVXhaUHlOOWRNVDJKejB6TDdkVHVYCnpRVWRpdjM0N01aV0sxeENRaGdXd3ZPNnRPTnk3SlNhZGk2UHAvRG9TV2Zxa0c3R2s4MThhb1dSa2FXMUtxY3BLZU1ZYk9FOTg4SmMKYVhVSmlYblI1cnhzYzd6d3gyWHN6K2RyVXFOTDh4d0RXeE5aU1p1Rml4eFF5em1zaTZFNkRjK1poSWZXaXV2NzQzemM5WHJ2ei9JcQpuNzF2UHBFRlhtU0E4Y094bzNlR1o3eHc0bEhEalJxTWNYTFk1ZmZoSnNzWmJ2SVMyUE1FcmFwN1AwN2JmRS9ybDkvaU1vaDA5ejZUCnY5TEhRQ2kvRjk0blBOWGpCVDUzVEFMdk1IbEV3dnRhL3dCNDRyNzlGdkd3NXlwMWdPbnRlTVBwRno4NHlpOWRtdXRwTjljTlp4WlAKTXI2T1NaWjBTN2hyYVY1N2t0YzhISSttR2M2T0U3TmtNNlJ2Q09mcnFWelhsc0wxMnVMMGRON1NQYVh4eHBFcVhxYTZWd3pLczlGWgpkYlJnNGp0enlYZFlUeHJpaE9IQXF0T3F3Y0F3NFNQbTk4N2llNVBoQ1RNZFdXTWNwbWRJd3l4djJWMU84N3VNR1Y0aW5lOHpYZktlCjVXWE04eklFa0V5UFJaQzBzekU4Z0tSNkFNbm5ndE5lWG0xUGg5T2V6TzBQelpXd1h3QWZjelgzSXJsdW5wSDlJSVdRbU5CUnJ4UnUKdGRaMXpKazUzTzVETHZxMGRWWXZMclM2U3c3Wk1xQjVEclF4RzdQRFJVMnE0dUNmWlg1MitHb0hjalFJcTE1dzExQ3Y4d0FONlpmNgp4ZkxEQzNaNUJHL01FNXk0Z0k3bSswMjJVdlFPajV4RGVUbDcwRi9pZ2k2Nm9oL0cyTWpUYkRtWDh1V0VDL2x5TEZmTzFBTE1YS1B3CkVFY1BhOVFkYTFmbEF4THFXRURqN1k3VENLK1o3TGdkanpMMFdMWFlZOVgwdnYwZStlS2Q0bnRTOTdTN2RjNDJuY1RGUlp0QWMyTncKT2o2MEpFWmhEWGM4WkdqajZVTHBHS1FQYjVrM2M1V25pSEpQbkI2MDBXeVlwSWs3Sm4vTXdnSm4yZ2MzbVZSWkpsZVllUFRQVVdaYwpFZmFkWkduZU04cnRta2Y2WURMb0FaR1hKYXNubks3NS9jRWhsaFArTkNQODhwL3d2bTA1RGFrY1cxNzVob3QzL05aajdHelAwQWg0Cm4zWnBCanEyZllTdmorRDBFV1BlY04zSzVOSU9kSHNoWC81NytPWXA1MFFXcTQ3OUg0RC9sNkgvYTN2VnNvT2RLZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJVUhISW5abDNHUno2OHozR29FOVpkTVA5NmhDTVdMd091K3Z3dXZNUWhRN05aU2JaUElLRVRuTEtFaDMweUU2UXovWUNRSC91Sm1KKwpNckUrTjhUNEpPSjZBT2U1STRSbklXQUhJQjFnY2hKeE54dmhOSURKQU4raVR6YWVmZnhwUngvclVhdlRwNXkxNmljUy8vaGtIL1ZrCmc1aTR5dFNQVlBERHZGSEJYK2Q1Z2NSM0pjc2paUVpIYVI2cjh6OTZucThxa3R1UXkvOHpONnVDNVRKSDVnVFBhd2pNUUNiZEoxMUwKcWJHbzhTUWgxWHU4OEVkcmNvMVhtNmpRdzVOKzFtYlZIUE5wOW5Gdk1seGg4LzFzWnZlVFpyVlBaeVFleFRzTFYrR0w1VENuamFNegpyMVZmbnNuOUwveHhVWkQvVEExK2twQy9YSkx4bDUzZG5HbVRrTDJuV3BMMmV5Wm9kK2FJOU96M2xwZ0g3Rm1USU9zZWVXZWJZaklsCkhOdmVOcG4rZmR2MDczRGpCNU12N1hnVnp5L2VEbFlaejFVWkRxV1NoVHp0VDZNNk9ZaHFmd2pWaUFQZkgwQTFIRVUxcGhwOC81bDUKVHl2MzA0Y2RhZlQ5NWEvZm9OcmxOQlh2UHY0Sk5qZFkydlNjZEpYeVhNSTd0a1JXaVZuaENwTWkzOWdHem1oczNjRWh6MW5TcXBaUApmTEhzYkc0NHVlRXVjVzlJMzBpVHlkTFNxUkh2T3pWemlhWkFtaTF0VmFUQkJJNXdUN3hXTGNkWmoxanFnTnJCWFhLU2pPejByRy9tCnU3cGM4c1d5VEhXNVdOYVBMZFBIWC9xWkd0U3AwYk91ZVNvNlQ3V3Y1MjE2WXNOaS8yOEQzVk0xdzhDYlBNdHpwTHRqVE1vOC9vdmYKWTVMcmVVaDNQUUxabjRSMy82aWZIeHQ4d2dWMkNNWXNxL0ZHQkhtY2hvdHpjR2VlZm52a3FiY1E5Q0tGUEloNEVQQWczaTA4em5ibQpRYmFRN0VhNWpvaVZ4OFM2UWJCcm90MnRJUyt1TFl1OG56M3J4MFdrYVRqRTIxUGo5NHo2NHltejQ0bmIyOW1VYnhraDkrZlZ2LzlVCitpY2RXdjE5eDh2LzhHUDUyUnRVVTh5Tm5RT2RhWklad1YzVjBoNW8wb09XOGVEOWg1cE03UUNQZFc5MDJsbTRqME9DSkxkd2U1S2sKMGNnZDZqeVpwZnZlOHVuZG1yMzd4bXpleHhiNzZSdEpUNWpaZjRhTW45TkozczNscktSSFNyeGNwa2UrQ0I5YnBvKy85RE0xcUZpSAo3aE1ZdlFMdUZ3aG5DQWpIUDR3SGovZmNlQ0kzeGwxYXZKNGsvU2taOGZZNThaajV5ME5YVWl0ajlNc2UrWFVTU0hQeHNNeTc2YkdvCm5EUHN5dFBLemZUOUlKY1BLMy85QmtjRDMxOWRLdjRoR255dmJqRTk4c1hsUXdmT3M2ZVBXZFNwRlUwWGp5Qll6N0pMN2pOTWhyT0YKNU12b09Oa2EybXp0ck9hTlczYkhHZGtCRnhkUzNJUVRiczhrLzJEM2lSYjVld1B6cWswK3lXNStMNDk5SkNkZmhYZkhxdnZLWDEwcQovcFFHTDZzSXl5TTZoV2tjMDVrS2NxYXNuR1JVSG1GaFhmdHBHdEhVMGtENzNxVlpwSFYzVVhsSGM4M2VHQmo2U0Myc1dDTEFoYUplCnBLQUZoTUx0UktudnhwTCtGUU5DTThXZlpmYURpVStCenpEd3didzNFOTE4STFxanluOXExVlBoN3pnMXVZOFNuOGw1a084ZzFVR00KZy9CMlRWMERjbGo2aTBmUy90amcyYzllUDdOQTQ2bDk4TE4zNG9uQ3QxY0VIUlNVMmxFK2UwMXptd1pWczU2b21tV25wRm94VmVVVApPK2JzNXkvUzRQdFZnOGVPSzdReVhUd1M2dlJNcDFHZGFWck9XUzlTSzVvTXVUa2VYbkF6NERidkcyQXJ0R1I2eVE0Rlc0ZVVlcFlEClVKUHF1UmR4OUNPK3o1TjRudEN3cHpQa1FRSmI4eHJ0ODNqZE1OTk9wR1VKU2ZsNURxR2VZdm5YbG9vL3BjRkhkSWRIaW1rYzA1a0sKY3E2czdKV1pRYys1ZEpEQTFNOE5zSEswckNMOWVJQzdJYi9JM0hLTXZDZkx5R1BlMDlGMzZtZU5iK1l4N1FmN1JUdGNYQS8wdTU1MgpwdXhvaHV4S3Y5OE43ZGVCbnI4c0R3eDd0VUpLL3VwUzhRL1I0SHQxaSttUkx4NVhZTzR1NlR4ZEk1cUdMUHk5akFwVlY3TThKMERYCnhWWnpJNVNlcG44eUphNGYxMzQwUmU4OFkvOTRZbnNIK2EzbVNqRG53ZVJZdjdQemNmVWs5blYzTnU3TjNlMEo2cXdJUndJK1ROZ1cKVHU1dHVERjM4VUhEejlsY1BhVmU0YURmUTFtdVFpNkRVKzdUbXFGcks4OXhJNDU2RG5IbGNUekNNMFBXM0k1TDJtSWdtaG40NnRHWApGOUpoS1ZmQ2x2dkRmSEpMZXZyUkI3MVNMWWU0WEpYZGMzeDBDNS9rVE11WG5HbDVoMHk5aUhzNTNhK2VuQXgyV1U0Uk1LY1ltRENjCnc0cjhUME9XV3o4bzBrOGc4bi83QVlmNzR5RzdpSlZPUDA4NzBXQTgyZkZVU0lEQUpjSldPN2ZYTVp3ZkR1RTBkZkVrSCtwMDNCOTUKM0pPcFAyWWZKQ0oxUEwvaGZqaG83ZndBaDIwNEpHMS9oTVBTam5DSTA2T25PSFFOL0hvd1QwSFlEUHU4clpFbmlNMnhsdUtuWnEyegpMS0RJdUFJZUdCOGV6ZFQ2NFJmck9WdXlKT2gybGpteHhHSlhWbzlaMkJUSGVobVcraEhYZnRwYXV3Z0R6ei9pd0gvRWdmK0lBLytzCk9QQjF1N1RTaEhvV1hSU2VFRjMwZUc1NjArZytzMG1tN1RSUG5HMVBTT0h0azdjZkYzUnI1Nno2a1VIOTBLRGFEZzFhaDhPTCtvR2gKT0JucGhQZC9NQ2ZkemNLUHVsclBTemc3UzJFMzRSNzcvcFBtVnJrb01wWDh2c2kxUjZPKzNuUHl3UTUzZkRta3JNc3U2NldwT3pUdgpGb3E4QzFoN05FNnROMWhQWXRST1R3NDRlOXJMNFdtUFQ5N0htZVZ1Q2ovT2ZaL0tmOSt6S3A3RzBwK1VKLy8weE5ZZ214SzFDNW16CkVOWkJtZGR0c3lsdWJMYk45ZE16UlUvV3lTZTM5YmtqM2Y3bER5L2VQZnpYdy9IbHMrZi9JY3RpOS9FdmNRckl1ZG5zSTg4Qm1jNFMKem5xNmFrODNPNmFhdlczSENlNXpWWHVPMlJ1Z3J1NHN2V3djOE9oN3JQemo2ZkhINVBqSGpvLy9GUGovelpEeG52ai82ZU1EQUt5MApGSkNlcVBIVTdISmlOZmtoejFjNXM2eCs5QWtyazZxcGo4d1V6OTJaN1NoS25TdzlQN0dMd0QxSHNZaStHME1BWFBpOXN3TlBuNURuCi9DUS9zVmtOMzJjeGZGcTh4ZmxoQ3g4YmNiRlBMZEFQV3poTklYRjdJVW5CazZiQ1I1eGNNMyt1czJ1bUN4TmhGNnBELzk4NEVjWXoKU1gwYURNbXEzemNWdmk5aDlUNWR0Wm1ScC9wcEFTNm5rK0oyK3ZnUWwyR0tEQk5sZXVSWWpuMDZpczhuUFpzTS9aZHI4SkpuNnRMQgoyR1hQM2FZTHpPMkNmbkV4OC9BKzc3QUZGRTJmR0ZGVU5LYW9oeFJOSHg5VFpKNkZveG9mYUhaSXQ4c2thMk9mZHVUdVF1S1JIK3JvCm9vOHgxVjA4dkdqNkVHTmR3L0k1a3M4VHQ5MzIxRzJUbVNXWXZhMGxiN3Q5VXZxMmZmSTJpMGFhUGkwY1NhTjZEYlhLZUtUcDR3T1MKaUZnRm5tRTFwQ3BBcXJLYzdrL1N3NVFMR1dSK25Bby9Ub1VmcDhLUFUrR3h0RkVma0ZUcExEL1VoMS83UTVtY2hQRFZQN3g1L2VYYgpGNi9mdlhqOSt5KytHSFR0OFl2cEg3N0JOMG0vK2ZMWnUzY1BiMStMRW43OThzL2ZmdnRNMUcvNzQ3QnRWOXVhRm5oT2wzVk5oN2dzClY3S055eDlodlpLNXRQSkpyL252di81SmZuM0hQOTNuK0s5LzVzZi9JWC8rYnlIK1NWNys4S3ZEdi8yditmQzFYdkpyK2VYMzhDWVAKcjRSNGRxUERMMGVxUDg4dmgrc3YwWFpYdjViL2YzYjk5dDN0aStmdlhyeDUvZXp0bnc4L3A4bmlaOGMzYjE3SzIvL0NldUtydTY5Zgp2SHZ6OXF2anMrZi9JYjMxMVc5ZnZIejQ2dGNQejkvOTlQQmY1WUwvVS82M1YvMHYzN0dCVzc3TlAzSTZSQndWcURiSUVETW54aUlUCm9sclNQenRBdGZwWmdjdFc1N1FkL3ZVWkc5cDFYQXJoYWs2cmpIdTlTaUxaYThmSXEwVVJ1QTU1dTFwRnBEcklpcitTcHZJaEZ4elcKS3U5Y3BYcU42WkR6VlpDMWRYaU95MnEra3NWYkR6bGVyUWdCRmNuL2FwRlZkVmkyS3hINmNYYnNlaFZrQVI2V2RDVnJMZHBsMjlVcwpYT0dRNU12Q3hvdmVMZGFySEdIUXIvTlYzamFab3VVcXdmakt5OHB5SlNxSTFGb1JtQ3QzVytVdTg3SWVVdFJuQWlIbHVoMlN2SVpJCnQzcVpFRU9vNVNERFhJT00vVnF1SUcvQ1A3NGhTbFMwSUJuT1hFQ0lxZHFycmZNVmxKTERzbDdoN0o5RGxLNEpzaFlQUzdoS290OGMKV28yVXJ4YS9LRnlKb0xxMng0NXJScTQwVFptRzVHVHJlcldFYlRtRUxFTXFnNkJYclZkYlNPc0JOd2gxNHdOSmk5SldYWEFlYms1WAp4Z1NFeWZoRjhqYnNzaS9DbGJBb2RIV3FWM091NGJCSUh3cjdFNEk4QmVaRElEdkplcDMwT1NDZWgxRHNOUlpoS1J1ZVdVWWNuU3VmCkY0VERZcnczRzdDRW1TLzlLYS9LMFVRclhCWnl6N3pLZTZaRngydkpWL0trTmw0cFhNbmZNb2RXNmRjZzd5V1hWMUVuRHVzaTQ1YmwKbGt1VW0waTdxOXhNaGxZdmt5a1hwT01PWlVXMGRtVW5DbmRlY0puc1NFS1FSWmx5a0haV21XV2h0RWtscTJSRlc0ajZQYVJaWG1pVApjYStMakxNTWsweDh6bUNaa3NMdmRjVGtzYTdXV2ZwY1ppQ2NUREtWY0RONXN5cFhaNWxUU1dZYnAzU0pPdXQ0bVF5d0tEYVJrZGRGCk9pQ2g5K1JlOHV4elR2Rnd0c3B3MWI5elFkOXl5Q3RUMmFFKzE4bXJrU2dUQy9rSU9WczJCRjNMdE1JYlJIYkEzRDdyNUpISGtxMjYKMTVHVkkwcmQwSWdSL0ZZK3U1VW9jM2RiVWN1YWtibkdGMnYzY2tLYnFYaWdYc3ZmbzdWejhtTCszaW1nSTJSWVNwSTFML1BxMVk2NAo2THhLTWl0bFA5NUFrTzFWT0lTdzJpeWoyQWc2YURMTGdxeU1YbXZSdS9aMm5HQjMwOHVjR0s5RVk1VkJhKzJFcTBWR2Y3aWJFZlF5CmY2Wld5NSs2dFhQeWJ2N1MvK1dmNUo5L2V2SUc4WXR2di9yVk05bFRiOTU4OCtldjN2dzdONHkvZi92bXUyOTBoN2g4eGE4ZnZubDQKOXU3aDY2L2tGcnVkWkR2ODVLZUhmLzJYQzN1S1RJeTh6c1FVQ1YvWjZQR2NTNUdld1c0aXJLakVQTzRtUmMvbDF0MWtxVmRseTdJeApZc0VzT25NN0Via0o0Q3FWQ1NKNnYweGxtU2hWZUt6MHN0WkFRbHdSOXRoRlFkaEtCRkVtaTE0bXF4RlJCNGVTdGZGRzJLd0dMM05pCm1EZTdMbUtYbHAwNWhOVW93dnZXdUEwVVhybllEdDdyeWNUVmVuUFZCMnVVcmVvbXp3dWRLRXlHODd5OWNRWEQydzVuM2JKZjcyRkIKZndnVHFWRzZWYmpLcXgxUjVBOXdyQ0RzY0JHaDF6bFd3RllqbzJJZjlRMlF2M2p0VmRDRlNYYWwxa1lqMkoxYVI1TVlaREFyN3VUTgp6THBNMjYzbXZtejc0N1JLL3NDdG1aUFgyazM4M1pSTGFhNExrR3F6N0E5MERzMjVoTlV5SGMvTTZWblZ6eTUvYkl2czJEcmhvdXlkCjdORzh3QUdibFZWaTVRSjBsNE9JRmNKdjR5emY1aXdNR1ZNSzIvVXNlNDNzQjNqV09SaXZuSVU3cjdLU3VWV0FXd1ZoMzlqc3RrVzIKMWlxYm42emtUVGFmd3lhN2dFZ1NlaGwyQUhtNVRaaURNUDREOXpYWmZUWVJla1M3a00vQ0I0S0lNYktIYkZ1MDdVaUlKVmZkUjRUcgpIQ0prRzlHWTBKc2l6SUVnMWF1SUc4STE1clRZWlVKYzVJME9zdWZCOXNtYnJWVkVCOWxFNndLSjZMUS9UbllXTEE3c3JYTGZQTXY5ClgrMkllRi9zeFBLZWVVbWNScGcxVVhoY1FKZmI1K2ZleDZYR1hrZjJlT1FvNlkwNHdXNmxWemxSUmxpMHYwTnJwcUJybDdYZnl3bDYKbVQxUXIrV1AzTm81ZWJIZFhBdUg2MjgrbWJVRlNJK3laVUx3a0wxZkYya2paaGtsR1Z4NThxdFFaYTdJc0ZYTVlQQVNVVlJySXlpUApFc2xZNXNCUVMzcHhGY21vdCtNRXU1dGU1c1J5QlFYODBOc1JrVG5MOFBlN0dVRXY4MmRxdGZ5cFd6c243OVo2VDNVcjl0NG5yOVVnClV5VkQzc1dVRWE3SURvU09nRTEzbGJFUmVUTUlLeGZobFk4V1NzUktGVFlqUTRTbHUyRmg2SHlRU1FaR0s0dzNZNWFMNUhzVnNaNWsKK3ErekxJeFE0VUplWXlPd0l5RHJ6MnV2Skt1R2ZEc2w1L2RHRUkxbDRPNUdGT0ZsWFdYMUJ3aVc1T2FMWFNiU1VDM1lGSVR0T25zUAowQnVLek5sQVhzUFdSWW9xM0hXeUNyU2RFbVg2TG41bG80cEVEQ01JZDUwTjR3S1dDbmZJQWExdklsWjJDcStVSFhhck12eTluanhqCnljdkNMWS9xeTBBUmpXRUwyYTUwS2htSWFGL29yTVRueDVyTkFUckJDaTgrbmovb0lQRktXWEdKYzFqMnlCWHlqUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJak8xVldyRGJ5R3ljWlorUVVmVjlOSlRlUTNHV01STEd5dWxIaFV3K3lBVTFzRjdCcXA2dEorYXRiNXdjZll4am1JRytBcGg0aGxKUQpPQUJsa1hVZFpIdEcyQnk0Y0oyRExSLzVzS3p5Z0tLOUpqQi8yYVNrdTRUamI3UGUvM1NHbm16VDBCMDRTUU51VTB5NjZWU0loL0xXCkt6aFlVVjVBMWgyRVhTTUhTNmY0QkZuQTRZZDZVVjUvRFVOVGpXQjMxQXNiVlRvaUNUOFltaElwZEpWbE05elNLSHBsZTdSV3J6MTkKYSt2MExiMFhSRFBWM3NHTW5uTlVLUjFqV3pPWWlGTkZEeGJCZXdaRnhuL0xPMHBSTFV2SG8xR3hzbW8rREczSmVnZ1lrWDVQbytpVgo2U29LS3gvcnlTNEwrTlhRVnFQczd0bW83ZGxhVyszNVQ5K3o5WUNzRXZhTktMTFVURi90aUVEVVo2eXdwTDI4VkZYQ2crZ0dDYlBRCkNjNk1rSFdtMTFxckRtdHJweEhzYnM5dHVpa3h5UlNCbU52YWlmWkM3VzVHMFBYdHo5UnErVk43TzZmdjlyaTA5aW5tSnVpSXM1QkgKK3hMWUd4UXROeTlCSGNpQVdMcDVLU3dpZ1ltV3RUTXZRU2lWdlc5cjVpVlZHSVFMdUhrSkl1bzhMOHZPdklTMk5naHNibDRDcitUZAozTHdVYUw0UVBqR2FsOGd0d2ZQY3ZDUnZmZ1h6ZFRNdmdSRGozcm9VNHFKU25GbVh3RjFsZXcvTnVrVFdKMHJIenJwRXZpbkNZN011ClljT1FUbHVhZGFuVjZOWWxzTXhscWYycFF4UlJhS3RyTXkrRktITi8yeG1YUUNwVk9MUWJsNW9rNE9ZbHJMQ2E2cll6TDRIeDVpUjgKdXBtWFpCRnRFVlkwc3k1aFVjbnVzVE11eWRMTE0zck9iRXV5L0dYZVJqY3R5Y2UwMENqWVRVdmdCd2tIcEpobFNacElhZDNjc0NSOApXd2FxN094S0ltWXpNNTZibFRaS3lLVlpsV1Jud0p3ZGJVcmtmVnNKemFhRXJvTVE2U1lsdWZjVlhBQTdrMUtRdTNKSnVVa3B5SFROCkFDSzc5aVhjbHJOMk5Da0ZLSytsVzVTd2ZjNTFYWnBGS2RTb3MzaTBLR0dub2xqckZpVzVyMnpLOHNodVVqcGJXQ2Q3RitOdHdySXoKS1RXaVc0TXdIV29XR2RqTVJTRXk5V0FlVFVyWXJTS0VPNjhUWUxTRXVjMGJjY0pvNU9sRU13VzFadHhZMU80MW1wVGFBL1ZhL2g3ZQp6dW1MamJ4YTVLRmxaMUxxUkRNRmdTK21MVGRia2NpY0NKdmFkaFlsY0ZTRSt3eTFacjFwYjhZSmc0Mm5FODBTMU5zeFcxRy8yMkJSCmFvL1VLdmt6dDJaTzN1eHYzYUQwOGRxOUxQQll5WVhNT1BkcXBNcFNwb0d1dVJGazR3YW9WQWhCcHd2WVVNNW1PWVpLc1VScTVtbWIKNFQyUWpoWkpFWmZsWk9aSmJzVlNRN1lOZHhDWS9SL0duU3lNcEpueFJjWGdXaFIySWs4ZFF5T29CUjRDZXVtVllGa3ZJc0xYYW40RgpKMnlidHQvczd5QmlOY3dySGxJMk0rRTRHMVVFQ2lNd3hzWjFJT2pMVmRFMnVJUzlXdXU3WUNicTg5NDhNUTZVV2UyYjJBUkVDRkk3ClZLY0tVeFFaZmxFckxqMEhNWnB6QUh4eHphRlR0T2ZnaEVqcldDK3FwMkJveXlsK1R6ZGJHN1dZUzY2MUJkMkpvOWZ1NlJTOTBwK3QKMWV0djVXMmR2ZWNQSXVvMEl6L2szSFhkbHIwdkRTb0tPWGR6cHFHZWFQT2xlOU1nbSthOHVsL00zR215VTRzSWlDdmRueWJhdmV6RAo5TERaU3NDMkl2SjkzbnZVS09NbDNxRzQwTG5xM0cwK05XZ09JaGI1bWpHbkdsVGN0V0FTdVZjTjNJM1AxdHhxMkpPNmhjdjlhdGk2CkFxWjA4NnlKdkNDRG4zSjNyY0VLSUpQZGg5QThaOURHUkJ3czNia202MEJ1empYb2RXQkJXVXk0Ynl1enZZTjcyS2d5eWExR0YxdFMKMTg3T3gwYkpNeSt4T2RuZzJscmt6czNMRmloNkxIc3ZHNVZycUNITnl3YlJVM2FqT0xqWkZuU0lTUUhkenliN21MNlJPOW9DOWxFWgpyZVpxbzdraEIzZlFtYThOTDY0K0ZYZTJRVDNmSXVhM3U5dlFnZlBpN00vOWJWUnZOcnlqTzl6aW5DQmVidDNqSmt4VUpCL2JrSnJMCkxkSkZVa1AzdWZGS3ZHOXp1c0d5Mm1hUE85M1FYQzF4N1Y0MzJDbXBwRFMvbTJ4dElxaVpnYWM1M21LRVJpZzdaUE84UlhER1FLZWEKODdVdzY5emMrZDVnRXFLWTZjNDNLSmVMOVBmaGZHRSs0bjdEOTF4V3IvYlVLaHR6M0xvRERvWU12a3h6aXpYS3pnazMxRE1IMjlCVwpvOWc5ZDQ0NE1JS2E2ZnkxdHFESTBzRGI3dGtvTzEvY1VLODlmMnZyOUQzUDNIRlJ1aXBMcCszOWNUREFjTzQxNTFjTXN0R1cwRjFrClR0ZzU1SG90MjMrR2hockZicmh6eVdHRU00VGszaFRVa2hDSEd4cGg1NVBydGRxVHQ0Wk8zL0QvdDBKVVNFSE5sU0hCS0dqVEdic2gKOVRwOExkb2hkdFlaUmpxbzM5S24wR1JwYnlaRnVCOHBybWlxZzIxRnZBNGxFV0hvQzJ3dXdpbDBMc3F0MU9EbkZOV1lrbnIwZWoyNAozQ2pHZzZQa0RRelJlRmJJWUwxK3BXZzFkcVZzU0x5blhEa25tRzFnSk1WK2RQYWFKeHBRZ2o0RkcxbWUrM1k4VUlOdU5tZ0hGbWxZClliZEE1ZzRmQTh5VVRsSE5SQlpQbXRlaG5uQ2VDald2TjlVcGMyYzBuU3F2b050M2Eyc1JkaERETXR6VEtjOXRKUGxvdlpvL2ZXdnEKN0MwZmwyMCtoNThYL2h2T2daMmpGM1pjSFYvMzlNS01QOE9EMDF5OVFRUWgyQXIydmw1YWlubWx1M0hCTkhTV05Vckt3NXhxMU1YbgpsTHQ3WTNiTzZPN2VSdG01ZTNzOTkrTkdyb0EwVWxMcGs2cFRNWlI1ZFBCaUY1dXpqZEcraHg3eCtVYUl3c2pwLzJwUGhROGdydDNyCjIzWk1kOFkyd3M3ejI2dTVWN2MzMVNsMnk1MzNseHNyRmZqV0Z1UmpXdGI4bGs3WU9ZQ0hhdTNwVzFPbmIva0QrSURCcjRRdjFMMlcKMktpdUpUWnJvR3VKbUJZMHFveGFJcmlIaVBxeGFZbFFxRUlWSnVoYUlpd090QmVPV21LejQ3bVcyTXh4cmdEQ0RGM1dXSFphSW5TLwplVkFsWVNKYlpESzdrdWlmUngzUmFVMUZoSmw2aFgrdjZYNzArS1Z0M2V1SXNHS1ZCYy9XNnJXZWN4M3h2QzlQN1VpcldpeDJPbUtuCnVsNUhzd3htVmRQOThNZWFjdG5yaUxUNnBDVU85VUpWbTE5dnExRkdmVzJnbWw3WDIzTGRyOTl6MUJIN3MvVjY3YTFhVzZmdmVkbWgKL0NtbThDVWJMQVdHWnpoOVgrMnB4WlNlWlhFbjRhb2FCRmJWREptbFVkd2VUZ3ZuVUE4N09seHp2YTFHc1hzNjh6RHFabGFFMXBacwpSTUxGMXVHZVRuRmp1cmtxVzczMi9LMnQwL2Y4UWJ6TEVldVU3bG5aQ0NqZVUyb1h0V0VyaEJoRkZSeGlvaVc3ME15ZmtDb0pYTHdVCkd2NEIzZGdjMXlHVGc3NG9HTlJqVUxhcElvZDBzR2hKa1dDRkxVWjlXZHJtSE9RUTRYekVacXkyR01JZXNPQ2djbUVxUURMVkxvZkcKMkd4TndLbHNVUkU0OHJLSnV2NmFpbDVadG5XaGQ1V0dYdlNyZEpiTmFhajRDVzhsKzc3cTNmQjBWVkxnaUlZT3Z4VzFHMEtJRXYzUQp0RHRSNFdUVENIUitLNEIycHZ6SHpVOEJ1Q0ttdzl3T0tTeTRnaEhBVm1HdkZxV2JMNENkcDlMbHVHSVJWY1Y5cmh0VTJES3JmcXhhCnN6UnJHbXlBd2hjelR5YUhaNHNXY05qVFJPcE1ORHFrNUpwdnB1MS80V05WSGNsRk1RSVVDbFdIUEowREo1cGRYQlUvZ2l1V3NoaTgKdVZQZGJJQlpRME92OUVrQnNKN2FxYnJpamFKekpDa2VaNmdubTJLb2VXeXJVZXllZW1XakpvTy85cmFpYnBYRFBXUGZQSWRuYS9YYQo4N2UyVHQvekI1RUNZM1pBd0Z5NkZOaW84S3BUR1Y2Q3dlTjhDV0tZU01oWGN6UVhCeVpVWFdGbmhTMWxVUnk5eW9Telh3ZDFrZjVBClVkcWFOQVpoczFEN2dDaW81Z2JYUHFDR3VHNGNYVG5vRWlCOEw1aW92VjdaSENxNDZSMDRLeFc2c0kwU1lEbWhnaE5xWDhpc1ZIbTEKVVdUWk5BbXdVMHR5R1pPK00vaWRrVnNtY3RvckRyR09Jbkl4R0FxTWZmcXdxeitzL0tHM3JMTzlwbE9jTjVRZFZlMkYyQ0ZnTHd5MAp3SGxiMjZBOWdmdndZU0crNjJ0dU5paUFYT2lnekI0RElHd2orVDA1ditlbHFqMUlybEsrcXlKK3RQVUxOcHBpcG9tUUJrMi9VdGxJCkVjMGNGclE1V25lczJhMHIyYlhCMlBWUzJxd1dDQVR3OE5MRUhseHJCRHVsUVFES3JzNkQ4V0VYUXdOU2g2UTFyczNzYUZQMGZLNmYKc0JaTVNRRFo4REkwbmIzYVUyVnJxWXVhUE5hbDZsZ3RzRGxpYzlDdWQ0b3VCK25vQXQ3WjZ4WDFwUTV0TlVvYXpIV2RtbkhVVlRnTQpiY0VxQkl4OHY2ZFI5TXIyYksxZWUvN1cxdWw3Tm9lYlRGdDZ0ekRmdVZXOTJsTTNOV01DckVLM0dPd0htWjZNRldoSTRsMk1va2lICm9OaWRvWjZzMTVoM2JUV0szZE92TkdveEMxZHJDLzVTbURyN1BaMmlWL3F6OVhydCtWdGJwKy9aZWtBR1pzdllja1g1SXl6eDFZNksKcmJuUVhEKzd2UVFqeWIyd0VnSFJDTDdpWjdyL2U3VUZ5ZWJTMEZTaitDMzF5a2FGK0VPZm9iY0ZLRVVKL1k3MldSbUZQNWRYNmkvawo3Wnk5b3I4ODdLMlZxQytndXBNNVhBZnFBdWxYb1hvaVRLcWpnWkkxektLeHB0SXB5bnRnMG9DSjNLa0VkZkd4dksyQll2ZlVLeHMxCm1tRFgyNElmQUs2SGZrK2pQTGVudFdkcjlkcnpXMXZuNzlsNklNRzlHeFhQSklxTCtjOGFGZlkxQ09IZ2hETm1uaXczaW1vQS82WjUKQzUzeTNNUVN1dmlIZW9CQndEdlltbW9VdjZXTENFWTFxMFZ2UzFnbjBKVDlsa1pRRjRFOW1GZnFMK1R0bkwzaUQ2RFBOd3d6ZGdwNgp2SGFnYm14VkszT0pPcW9iVzlDYTRTaHlXRGRNRXFtNi9kMkIzUkQwMWF2Z3lHN2dzRFBzYkEzYUhVVVV5RnNOYlFnQUZZS2tDZG5JCnNkM29LSFZvT3JnYk5WTjJINDJCdTJrR1dkYWxvN3NwNUFCMjB1RGQ0S2RwTzRGMzQ4MElXR3I0YnRqRjdFYW5uWE82RHhrUUduOVEKLzlwQnZLSERKRlZkREZMTm5Sclkwb2E4YnBUbjN1M2c5ME05dzNBUGJUbkY3K2xxa0ZHcjltSnJTdTVFSDJpL3BWTmNFdFJINi9YYQpTM2xUcDI5NVdUMy9ISGh2ZXIyaW96MDdWVkVhRFZ5Tk9TV1RaK3NZN0VaUmM0VkJ0WWQ2aHVidVRUV0MzVkV2YkZUWnhWZkNhbHRUCnhlekEvWlpsTUJmM1IydjEydE8zdGs3ZnNuRXptRzdoN0lQYUxwekNzQmVOS2dKVW5nTWlBa1hJS21ycEMrWkRuR2NQL3dpMnNjSm0KVzVaMUhlcWwyWUNhcmFWRzhUczZVMUlxVEd4QWVmVzJNS0dXYmJ5blUxU3MweWRydGRxenQ1Yk8zdkVITVUwMFdESFdFS0hVSS9TZApzaGhOaG81OXgwTEppVjR1QTc5RHgra2hrSTUrcHljUExLREIzeUhuYkNYR2puOXZGQlZ2RkFEZnF6bTJIY0syMmNDZHNvVlIzekVxCmVTbms0UWFDcDlDbzZvaWg0TUZDbTJ6ZFlQQndscXNLNGZCMjlENGx5RTVaWVdEd0t4dFZwSms1MHFkaE1IamdlK2ltYnpENFJsSHgKeDJEd3ZaN0QyMk14cEVHbnVObkJCU2VqaGl1Q2doMEZIK25tQVVUQVVmQkE1cXp0WVIwRkR6ZUUyc2tjQlEvM1FpcHI3aWg0NkJKZAorWEFVUE56c2hFODBGRHgxamhSVHg4R2o5YVo4TkJ3OFVBZTB0emdNSGlOQXZ0cHc4TmhJa0RqSEJDUUR3a01SWCtzQWhNZEd4V2M0Cm43SW5kbUJIaVdNUUE0SXBYdTJwb29MaDZPS0dPT2M3YndNVzNnaytTWWhmNzdVTTRqNDAxQ2gyUTcyd1VWMnhhMDBCT0JWSDlIMmoKNkpYK1lMMWVlL2pXMXVsTE5rbmZJZUtBZVMzQkF4MGR2dDZvRGVLTzJVOW55VURKUThoSHA4SndCY2RmYnd1Q05tRS83WjVHMFNzTgp2ajdVTTRqNzBGYWo3TzdacU8zWldsdnQrVS9mcy9XQXc4VXhkOHJpMXV0T0ZSWkdJSXdEejBXQXZab0pyM1o4ZXFNNGF5S012ZGR6CnBIdHZxMVBzbnMrbkFSRlAzWVNHbE43V2JHL1c3MmtVWGUzdDJWcTk5dnplMXRsN1BpN3hmZzVjL0E0czVzRDRoaFZyeVBpR0ZXdlEKK0IxV3JHSGpHMWFzZ2VNYlZxejV3M1pZc1FhUGIxaXhobzl2V0xFR2tOOWh4UnBDdm1IRkdrUytZY1VjSTcrRGlqV1FmSU9LTlpoOApnNG8xLzlvT0t0Wmc4QTBxMXBEeURTclc2NHhRc2VhZWE2L1E0UElOSzlidzhnTlNyQUhtRzFLc0krWWRLOVlnOHlOV3JFSG1HMWJNCklmTU5LdFl3OHlOU3JJSG1IU2ptcVBtR0UzUGMvQTRuNXNENUJoTno1SHhEaVRsMmZnY1NjL0I4dzRnNWVyNUJ4QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJREQ2L0E0ZzEvSHdEaURtQXZ1SERHb0oreEljMUJIM0RoelVJZlhkak80aCtodzl6RkgyRGh6VVlmWU9ITlJ6OURoN1dnUFFOSHRhUQo5QTBmZHI0V1QzMmdCam5mNGNNR3FtRzZHbmk5NGI0YXhuMkhEMnRRK0Y3UDBmSzlyVTRac0ZvRDFUQmRyYTJHKzJyMzNPSEQyck1OCjlkcnplMXRuN3preWYzcVNkdml3Z1dxd0xvZXlPL0NyNGQxSGVGaER4ZmRhaHBzZjJtbVVBYTAxVUEzVjFac3k0RmUvNFFBUGEwL1YKS3JYbmJ1MmN2dDhsOWJKN0VtRnVFeFpoOXA1R2hTV2hxSlNWeVZBS29qZk0rbElEVjZOUlZQMTNMdC9yQ1pkS1N4amJhaFM3WnpNYwpLRlZXRkZqNTBKWnQrY005QnlGZ2VEYXYxNS9mMnpwN3o3WWVQa1hCUGtuWlJLMHVMV3FjS1ZqeHIvYlVvRkUyc01VVUlDWXhXSE5TCllaZTdmYU80RWNhVXFWWXZHTkNsTjlVb2Rzdm5ackF6YXRKZzFhR3RqTDA5ai9jMGlsN3BqOWFxdGFkdlRaMitaZS9MajljdjRRbWMKaStvY0lqT2FOTnFwc0cweGVRV1E1dGloQVRDbjRKOW5VeVdkb3BxWEorcG85UmhTbDllaHJVNnhleXBIZCtvMksvUzN0eVdVc29IUgp0SHM2UmUvcHo5YnIrZlAzdGs3ZnN6R2twWnFrZ1kwSEMrWFZub3JlTmZUWmxyT2xEZ0dDT2VnNVNGdW42SHNBRDFQaldFOTJHaHBNCmUxdU5ZdmYwUGExUjYwb0luN2NGQzFvZDdxaWY5U3AvTHE4enZJKzFjdnFHbjJVUmh0TkZLQktZK3RDU2dvdGU3YWtBUlVIZGh0MlUKbnRNbFdPS0poSEF3V0NxZDB0YlNHdU5ZVHg0Z09pQkQyMm9VdTZlYmZScFZrMlMxcGhiR3Z3eDNWSUl2ZTNzd3J6VzhrYlp6K29xOQpJejlCZ0QvaFpxcStNUXJUUWhkZjdhbUFuQ1dOYjlaWWRCbldBbTgrbFhNSzRFNVJaVzFXQ0VhclZoMy8ycHJxRkx1bE8zK05LbnBWCm9KempUY0hNYWlLQTNkRW96MDNGdFNkcjlkclR0NlpPMy9JSG1aU3drTUJQTEtJL3NqS2FZOG1KaSs1UzhQSFVMWVVEbElpcU9oTTUKclgzV2R4SlpyOGo5V3AxVlhUaTlFU2ZZclZ3NVY2SXM1SVZPY0crbWFMaEV2MWNaSXJYYkF4VVBxdkJIdG5iT1hxeTdVcVBxd0JzQwpXdHlQMklqU1cvT3F6czhVNVRFMlROaWtEbFdxc1U1UXhycXBBdHRxQVk1UVZRUFFkaHJCN3FhWE9SR1RBeXlwdFlQMXMyM0QzWXpnCnJsZDlwbGJMbjlyYk9YMjNIMkw1Y1p1RnlBSjFnMTZqVjNzcTVMdlZRbVVpSEVGUVZPYW8wb1JtUm5PSzg3RTFwVFRXdzl0dmVXeXIKVWV5ZXpzZU1XaFRTUGJSVlRhem85Nnc5c2Nid2JLMWVlLzdXMXVsN2ZnNXg0cVF2WTFZak5PVnRHRWRmN2Fnd3RzQWpEQVZ0aWJPYQp6U2hmUnpldkdFRUZUcmpRbG0yb05hdTNiR2pJS1g1RHZiQlJJOS9rMEp1aUhTZlY0WTVPMFN2OXdYcTk5a3F0cmRPWC9DRmtYRERPCjFSTEdCTWVJZEdJMFVBT2N0VVFMdG5nMm9GRFcxQW1xd3FVclpPa2ZxMkdOTWF0SGE2cFI3STZ1L0JrVnJoRmlIRnRiU0Y0YTZuQkwKSStpRjdjbGFOWC80MXRMSkszNytDVWtiekd6eDFMSkFISVBjcURBMlpaVzNwQTIxQjJyd0hqeVdXMW83UmQrSytYTzNzZDVNODhYUQpsQlBzam43ZDdCTnlKZ3JVR3hLS2FORExjRU9uZVAvcmcvVjY3ZUZiVzZjditYbTJWaUI3a29hK01pengxWTVZUFNuQmF1WkR4dm9zCmFzOUZzdjVPVWVGaThVeDhyWjVJV1VncU5MVFZLSFpMdDhNb1ZmcU11ZFI2VzNIV3dKOStUNmM4dDRmVlordjE3UEY3VXljdjZWMzMKMmNLNkhnL1grbHcrUTBBamsxbDhHNW9ad0s4RnE4N0J6UEtpY3dIT3g3SE1BR1Zsc0xvUnlsd1JlMUZ6UnpJWEdyaFNCeklYakViYQp3NWhsN29zUUVEdUtHZWtiS3h3TURtSmVrWU9CcU9ZQnc0eXdyUlhENHhCbUdFcm5VanVDR1U2SVV0SWV3QXl6OCt6SUp1YmpKVVF4CmRmaHlKZ0I5RDE2V204MGNhY2N1TXp3eXJoMjd2QUl3UU4yM1k1Y0xBVnhMaHk2WFRkWXRzY3lHWEthSVRPUGdBRnlHQ1hjcnk5cVIKeTRHUVF6cFV6WWxJcE15NmJYdnNNdEF5RWJab2h5NURGbHRTQnk2ZmpmYmU0bGhoZEFZYkdtSExuV2dXYk9SZDVDZzZHQmtoM2FtRQpQV2E1d0Erd2JwMVk1TmtxRkZadnB4TUc4SEFuR3NhNHQyTXc1SDYzQWEzY244bHJ0YWUyZHM3ZTdYSC95aWVoT2VJZXBReUNBNVFoCnpqZHdjczA3V0hKaHJFaHFxR1RoejhpQzB6REp6Q01UOTRoaytEK0M1ZGtqSUJtaWN3Y1pZMmFqaVJHS0xPdDNnOTI3RVJOU3hBMzQKWWdRZG5XQ1EwMGlaTy9CNDNpT081dzQxQmc2NFlzY3lwSEdFL25HQ000WUMzVEhHMFI3RGtjTkltclN1ZTN6eHdpeDFuWWFFNmRHdwpwUVFYTDliSUNDMDJkQU0vWiszVEJpa0daSUJaT3djM09lWmZ5VXZIRTFkN0VrY1RZeDdOS2V6QnhLWGF3allzTWZwbFJCSXozK3k2Cnh4RUxDOGtobEE0amhqRjRYVHVJdUJZYnYrSHhBZ1BiNGJweUNERm5uS09IZDlOdnY3YkJjaFp6ZmpYY2NDY2ExSmM1aG9BUmNqUXcKbVBFcFpoaHpjNmtEc1FBSEgwSnZwaE1HOEc0bkdzYTN0Mk13NEhhekFTemNuOGlJL1ptdG1iTTM4eGVIQlMzbnZBY0tkNkpqZTJtWgpIdEMvQU9LWEU0eXdDSnNsYkNORVdIYlJkV3lsRVhZQVlTYzZwdGZiYWJCZnU5a09IR3dQNUxUK3hOYksyWHY1Q3lkRy9BNGczVmNqCjBiRzhXRnRrR3c3M1RjamFXOVk5S2hoV3IxQ0hTdGloNktiMFpwd3dJblE3MFlDODNvd2hmZHV0Qmpod2V4NnYwOTdDMnpoOUxYOWYKNUdJSzg3YUhBbmVpb1hmUmoyR0UvV2JHSGc2SVgyN3h3UHBUWC9SYWNFMVNxL1IyR21FQTVIYWk0WFo3T3didDdYY2JFTUQ5bWJ4VwplMnB2NS9UZC9LVmg1c25NOXptZ2Z4dlJFYnV5T0xiRVBEWUc2b1hwcWRCelBXQi9oWmt0c1F4RXVEZDVpbmhyeHdrakVMY1REYS9iCjJqRkViN3ZaZ1BwdFQrUjEybnQ0STZjdmRza1pCcWQzWk9ENUNCZnNWQWY1SWE0MExCNGFEQ0NnN0w0NHIydVBGNFRmT1pUWWlSWHAKbGJjQmQ5Z0lJM1N2RVIzaDE5cHhFR0M3MjRnVTdBL2wxUDdnM3RMNUMzNTJyZUtqazBVODhnVEw0V2UvZVAzdXdpRWorUFhzZHk4Zgo5RUYrK2ViNVYvL3o0Yy9hZHA0UFAvdjF3N05MUjVQY3ZuajExWmNQYjU4L3ZINDMxSC9zSGwrK2ZmamppNGMvZmZYck4zLzYxbDR2Cndac2t1dTFqTitDWkovLzk0Y1h2Ly9EdTBRN3hxbSsrK1VvNjh2N3RtOWZmVy9lWEQvLys3c21WOFpMU0t5OGV2djJBZDd4NTg5TGYKVWNPNzF2ZS80Nys4K1ByZEh5Nk81WjJla1hQMyttdTc3dUtaT2YvanhSOGZmanJwTCtwWHE4N1BsVEhmVURLMnFxanBXRU9hTHA2WApvd2pwRHpzMngyN2xEVGVNMHU1MlBQZW1VZHRqL2JKZmY0bTJ1L292Y1dvT1RjbXlJOHc0ZGpndU9HVUtta1VOY2RZemlhT2ZTYnpzCmtxbGt6ZFdMVklDTFp3RUhFZUlsc25jamxTVUlBUUVKY0tHck9nNEwvMXlWNEJpa2hmaHMwR0tsSlhXMnRpdHlWS2s5Q2tkYmdkZEIKcGJtWjFNQWVxZHdGUUJJWHVoY1RzamdWWkdHQVVpL2Jjb0g1SElMdzRyWXFwTUFBbEF6RXpZNUFJQ1JMQ01haGhZQWRUd2hFQ3JYTApBSHhFcHJHY0ZiMVVlQUJLTW0wUFFnQ1F5U1NrMk41TTA3d25XSzREUmFRUTRERkJSbFB1blRRZndpa2dleXBmVFBiakxVY2lsVGErClBXQ1kwSjQycGtaTlNtREdOeWhmaXdNZ1IrcXlCcjB3TFp0U01zY2pCOHVSTmRQZzFxL01sWHRTbE02aER1ckNPK3BsQzhqU2pOSm8KZlZsdDVKQWZIRkVIT1BNcGE1Z3dqVjNJTmJGcURpOHEvOGh4c2phaEUvRVFWQVNRMVduVkJLR3NGdVlrMG1wV1ZQVUt4QzhzQ3lVNQprSDlkN2ZRSmhycXV3YXlyVEdFd3cvR21ZZGg2bGdid0RzSFRicTRPZ0E2dW5hL29DcWJXZzN1bExrWlpsQUl2Uzd0eW9TMDA0RkN4CnhZelB6QlNNL0ZrODFCNzNaR1FXS05HTkhaQ1VWdGVKbzQwMkE5QkpLQ3JMemV5S3dQTVhITThUVEVhUVd5NDBCcFZWVlM1MHh4S3AKeUsyVy8ydzJXeGpuRGhDTUplbjRwbG8xbzF4ZE1LUXp6RVVLSzAzSmp2TGdZS3N4RWI2NVJlT25Tb1FVeE1Tc20wbzdoY3V5MnRJaApaZldIQlZUT3JzdXNvMWthMFhyT0NtNWxQQVVvbEVuMEtoaUNZRUxDaUZkRE9Hb3l3aG51T0xpenEybTBHeXpwVXZmR0wxeEVLOTJZCktGNFJlbWxHbnBJTmpuVUZqeEUxaUNqL1pmV0FOc2o5U0hFQ3d4YVJkck9HMUFCd1hLTTZKWm44aExoQ2d4V1F5T1M1Z0JSR2JSdlQKa29BNGpkaWJvZUx4OCtJdWF2aUFnV09Vc1Nyb1NuajRrSWR1WTlwVVRWT29pVHZ4aFkwZHN3MGtwQkNHUGNwRGxMQzRLck56V0xCSwpLcFZLc1Bja2lVaGJCUU5mWkVqUXFtSVpMRExNSXh5Z3BraUhnckNHSHM1RUhBS0lTTElubnd1ODUyaUd3RU1RbHFSWmZaMVRhSEJNCkptZE9jektJUGhLelZXWVZEblFKVjdQa2dRUG9teVZDRUtEK3pveFhxMW9IVm9scUFMUWxiVkN2UXpJWEMybEFrWlpaRnhrSU5HTEQKdkxJQmpENzdVVlpDV0wwN1pvVFV5N2NnSnJ0TWRJRmx1S3hxaGc1ditMbDF2bXpWdEFnSERDUkdkczB5VVdEZUsxa0JDclRzbDAyVgpQWDJ6b0hjcmlGaUpodXFFcmdCblJad1YwWmxnZlFNY2YvYjhqQ0RTbWdHZ0g4NGdtMjN2RW9Md1REWDVzQjBRaHF1WXZYS0ZsMVF0ClFGUkRVQ2RWaS9xck9HNEx1NDIvR0x6TWtYMnJRTmd0Z2FGdVBHbGkwZkJsT3VIaGNGa2RoRlJ3N2dOdUJUZ09RL0ZocXlzOENhdFoKaUFQU0M4SlEyeGdYaUZIbTRySnFYOU9PSFBWNE9OSFJpMEduTnhKd2NHWmo2d1ZyRVVUYVZ0ZFY4MG5pc2hLTXdMdXRnRXZIeGw4MwpwTENVM3l1Vk9SaXB6Wklyb29vNllXS0JwU3JUa0VZR2doRkdzdUNLclhkVHY2MXM5eHpZVEIvQ3V1cThLZ3c2eXJZckY1czE0WXBKCmgyREh0ZVdoVytZaTAzTUxIRUx1MHJyL2J6QVlaUjBpeS9QRzhFV01ZU0U4QjViN2xXTVdRdW9DRWF6dm9JR0Q4Zk9zSXkyclQwRlEKekdzaGhGUWNrdDJhUWk3MHF2anBLdXVObVVyMWtUZlIrZkFLb3RzdCtsN1Nvem8vbUNtNDBMcTNJR0VpWEhMWUVDRENWYVo4WHRlVwpBMTYyTFRoYVlSU2UxYVBCWEZFRjdHSFZKQzA3NlhCdjZxTUVBTVJUZ0tYYmo0OVlORFl2RW1uS25UMXVBQTBIWktQWHdHbHVHWkg1Cm9HT1RKVFFrV0hnbHVEWUpnTVVqYVJLRkpSQVlFeHZBbFQxVUFpbytUWExZREt0NktXWWVMb1VVNWJySmg1bmF1QktlbXpDZnNNQmEKTGFUY1o1TE5ESjViTlVFZ2pLNUpYanpZbHNVMWcyaXRUUmMzd2QwTWg4VldZNEg5QkxkRktFMk82Vjh0a3hBeXFabllNVmZHUHJYUApnY0Y3aTVxblhGclJTRkhJUlVWcmFXd3F6MmhSdVNjdWpHMFJucHNkZExocUFpZ0UvWWFzdWhORlJ6cXY0dkFaWndPRTNDUlZTRm9MCnBNdW81ajZjTTR2TS95SzRhbFRhd25QL3pLeWdqNWhvZ29hbExVZXpWaUVWS2dpMFdVQk13bGpncXRsVDB5UEFEU2RVTWRlTkdibDQKWHVFQ3pxblpGTWo4MHFMN29MNVhWYjh5WmpuTldSbHhYWW5aNFkyelJIV2VZaDNYMGlXM2pkdXNlbVR3RVNPQlBLRTBsNjRRZXlzMwpTM29yL0NJKzlycjVlMFFlZW9iUGVWVmNRMFpPTFJEbUpuc1huVkxJeDB1K2duRVNNUVpwK210U3ZxSkhCVmExVHQrWXhCN1FaNWxLCmtPSlhaMGhQMENMSnhCYUQ3Qyt5V2tTRHM4dG1qZFNqWXBBTVRJbUZpOUN3T0d0V1gxMzlRZTJnejkxZWdhZ0VFQXR0VDFWRGQwSEkKbVBZSlRrcnNscGl6S2JUTFpvQlRzZlhRYmdZQ1lPV0tWOWU0a0FCeHRjejZic3JHZ3ZYMnFqckVzbWlpWlRoVTY2cm52N0dMc1BpMgo1SHpNd1ByY0hDT2RRTVVlVWZSTnkxYVhjZnFnRVhndldjZ2JRazViTGNTWFluOGk5d0dEb0swUHZwbEJMT1FwUE1KSVpXaTRPTUFPCnNKMHYyYlk5NW9TS1BPMGl1V1FDWW9GUEdjU0VaR3VJZ2VlYVFseGtVQUpqN3hHSFZ1YlNMbU5LdkdXeGtRVUIxZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJSS9aTDBDUjNqRGNGb1hvd1FWQ1pLek4zY3FZQmxUb0ZHUVJkM0ZGUHZnRXZoaExHWGhUWkVaN0ZqRk9HWm0yNkFNbTlVTnRWbTU5TQpQdDNRRzF1TWxmY0NqVXNST1JXd1BFQ29ub2t5ckhtL2ZZT0ljUVlNZUU3WmFnVVNSSWpRM0d3SURNYm42cjJJL0FMZ1o1aTUwQ2d4CnJzd2dMWE9hOGtzbklDallkOVJHcktiK01TNEFtK1ZNK1JkQld5cUI2V2Vkd0NZcXRUcW1vbENKWnk0eUovRG9Fdy8vTWlMc0VWQkkKTkZ1cE5MMUFyV01DZVp1S0N5QldwUjlic2lFMWh4RFZheWdxWVZseFVDM0VIR0JMSVRhRHdhQS9NQmp1VVpkbkJFMGtaOVhxOUlqWgpZajZZdWRxeE9BVWRWOXBWaEFtZ3FaeFVYU051QW9NUnF4RVFOdzM1cmpFcjVHaUFNQXVuN0x3YXdoWkhDU1RxUlNvSmtETXdwV1N5CldSWEJ1bVprdmI2YWJWWWg3MnMwaVJ6TGlWeUlsaGUvRjlZWTVBRllYbGEzUkZma1NDNG1nczZXa0JLWGJRNjhuemROWEFoaXBHSzYKRWIrRjlPTWJkRzljQlFzTXdzLzZhZ25ndGppMDFLM2kwSldnVFNKbjM2cjRMazFzdG5ZNUhrTk5TRklzTHBjRmxRcHhIRTNRcEtYYwpiSG5hVURJdWpEZzNhS3pZYklzbHVTTjZPTklVcFI3eEJkQU9rVm0yWlppTkdrT0VPSExXNFZnQUNMMmdWM0VSeEdHaytVN05ONTRVClRFQXBLbW5lTHoweU9xaWV4MG5PZk9LQnpFeFo4T3laQ01BanpGdkc5TzhJbWl1YTlhYXN1clBQalhzNEVkbGc2NktJLzFVVHB0dVEKTVJ5VG92b1ZqcXR2REorVENLR0lxMlZaMWJ5TnhUZ2xDSHFBbEdwVmZobWxmYzJkWWZsZ0dlcGZiTVBGM3Nma1RnV1NrMGNZVURLRApxVUoySnd0ZzVBR1ZjR3U2U0w0aStBOWhqMUQ5Zk92VWVBK2tmY3FLdEZGZEI5YkNUZkc4ekE3dkJGZHRhTG5zdFRZMWRjR1dvaDViCkl5REdLM3RZWHlQQ0pKbzFsYURzTUh4SW5Xa25JblJ6S1NOeGt5YUJTenJsTkdlN0IzU0ZsVllnaEpQektFL0MweXBQbHkvS0FaajYKczZxeXhEQjdIa3dRZzJLZWtCRlk4NmtqNHBEWitiT2RneEJydC9HQnV1YWdySDlGZjRHU0dZUWR3YkVRaDRSOG1Nd2tBTXJzUnhvdQo4RSt1eS81S1pyelhPMVM5TXVwSlRnZ0x0QVhDTy9CSUw3cXE3Q3dCUm90aDkxdXh4d0J6VEhRcldBNzJBYjVscWhhbmk0U1ZtNTQ0ClFPY2k0S0FsSVdtOGNJdEZVMWxYYllsM0JGT2gyNXh2d0JnT2c4ZVFzZ1E5OTRDSEl1SEN6WlBKQU9hQ0JVNXE1b0VKWEZuUmtvTW0KUFJkbFcycngzYlBmVWZHbXEvSjNWRXVjR1h4V0tGQUlNVTEyZWhQdEszcGxVS2xKeFlYTUNMcUVjRnV5NDhRVEJUSmtSWVY5eHR6eQpmeVl6aTJJOVlESUNSOHk4M1VoM2ptNUdWbFVhYTVGUDE4MmZpTFBUb3luQTloZkdzbTRhNlFJS2hWdUF3dFh5ek9UcmF3OTVVWE1xCnFNdHFvVEUwcGVJdDhxYXdjMEtLUUtHVzdsZFM2Z00xYjhndmlyWjRZQkl6Q0ZXTjR1UE1URHlDd1pQdDRRQ2pXVE9KeHh3dDFRNE4KM3B4anErWUYwc0FCSlBpTTdmelh0cEt3c2RCSUNHc1dQS1VCRTV6V0hNQUtvU0dGVmYwZ3o4MHNwc2Jhc0JydUI1b1JKVU9leWFmUgp4bnhXbVBCcTdOY3RtclNYWmk5V1VuQU5USFl4V3Q1SENxSlpWNExiajNSNEdZU0hidVZwa3BzeUM0TFlFSi9IblFkTFlZVWdvR2F1Cll1dUJ4d3hpR1NDUkdLTVlFTEZjR1NNY2JNV2owZGt0OXJCd01tYUduY0lnTmlna1NUZG0zWkZ4RENWRHUyYUc1dmVVaXlLQmE3MUkKT1hjek9ZcGJlc2xHNFJTR2xMNzU3Z1UvQ1RHNGNGVkE5NGw2Z2JvekNINkFrVlFHZDZWem40NXh2aWZlUGxmMVE2UjUxaXMxSC9ScwpFZzRNYXJTM1NnL1E2dGFzYkJYbmJtNDAxOEV1eUx4WUc3UFJHcUVtaG8xdnZwWm5TejZEb0JreVpiUkNDekJCWjVadGN0Rmc4N1ZOCkd6Z0YwRkpXNlFHcG9MZ1NObU13V01iVU16azJhN1ozUXdwb0pueVpaelVQWVQ0anBuSGpPWWNhU0VwbVR5U1pzemo0UWhpbEg1SHgKSzJzVXVaMGVSZTJMQkdSVVFZUitzY3d6SkJKM2dGMk5TWnV3NUMzK2ZsMDBsY3MybDZLRTBCZFR6WHBvZEt5enZoeWNGWnM1NXhqWQpnRFd6QWF4aEJoWXMxWFhORFBkUksyeWNkUVV5RGFqMUNHWmhTU3FINkpMUHFxUUJGTWk4WG9oSUxmb1p6ampHMU1OMXdwaGpQNWdLCldXZXBNU1owdzhxRVo0VFpBVHFjRnczRnA0a0JhUmFhV1RyaTNFTkNVK2VDOTRMRUNJNVF6VlRDWUppWktkZ0p1dE1oc3h6cU1GOFcKTytXYSt4a01uQ25idG9RRnpIdTUwd0tpTHhRUUVHZWVqRlBVRmtCME16OFdlRHJ3ZlV6OUlnb1loYWNNYUtML1RXWWpDTzFlUE4rQgpXWWg4ejRXcEI2dWVWbVJNdmtVejZXd01EeEk1QS9ZaWZCS0oxMC9ScVhyTVljSkprSmxWbUU4RWVTQUNSRlVRa0xkemcwSElNOUNSCldQVm9NOWdoMlF6Q2pYQW9PUUdSdUJVaXZkVWg1RGZEdDVHckpSWm02ZHJVMUVaemZxSTh3M3hBVzlJS0t2WlVOWDhqeWV2TXpNeVIKbS9oV1RRb2lSSGlqMHltN21RVEVpc1RNSUdZNFI3SmxLTjQyOVJZUkMwQm5hSEY5bGpTNCsrRkI1VjZCcHBtdWVtYWMya2JLdXRveAp2OElJL2MyQ0JaWWhXVUtraFErdVVtRjNZRG96N2dmTk1XN21pRElIR2tTNnlMQmlSSEJ4azBIZVhjbzJ6TGNFRlFQb2NUOStkcXZ0CktKM0lYQlB3U2dwdnJLeEdHQU44cjdCQWtzQXdrVUFvUVd6WDJlbWRzeHBwMlJLVFo0S1hzV3R3UjBaSGc5THVDT3VGWmpPQmZvYVYKdmJqQVFIeDUxTnphVEpXMVZiVkNxa1NYZFlyakphbkI2Q0ZTTVpxbVd6V0ZsQjBTQUVPcU0yVjR0UFVvY0lUSll2WEFaSWpnT3owRgpCZ3VJWnMyc0NTbGxoZmZ6OGJLZSs0aHpXS3VlbmFWcHYxblBLRVhUelVXRWZiUUw5UnlVZ0FRb21GNmdLT2dxS1pEdFhLeHZBais0Cjl1SUtyMldnaUE3ZkFpQVJNUWNnTU1RZ204aUdjNC9odlZnUndPazhPNmg0QnNPYmN2WkF2Q01QbUxPTHVCMkJrTmJVcmlLMEY4UmcKMndnTXMyZ2FXamsvMDAyMWRsV0ZxUWZnUTRlUkppZjFDV3E0dzZLeUZSMXdVanZ4R0dNVFEyaC9wZWtuV01UaEJ1NjN3cDVnc29XNgpyWXhBY1FENVQ4eHJxcldRdlFGOXNVTEsxZUFqQnZjai9mcnN4a3NRMGExNVZyQXJuRUdZaW5sV095M2NJMjVnODlQc1M5U3RFYUgrCk5PaVZxT1l6cTBTM0dseE5hTFRCQkpDSkRkb0hnSm0wK0RMN3JOcW9hWFpDVkN6MkN2dXNNbzZkZU9kMW1PY0dNTTFnRVMxT2dGcm4KUGRGb21QQ1dVSUI3c09nUUZGUGdyS2NPNndUdHdFUTdkcThFWVVmZUlnRmNEeE9URTNCMFc5NWFyeXNOTzNyUndDa0NTUUgyaVlxcwpwLzF4MlpxSEV6U3VidEN5T2NxWjBCUnVNNGJLZ0lBdXhqay84M0RaU2xWOE01c1Aya0ZjTmpZakluZVJ2MkhUeTdxaHVTN3FoUWVSCmJqYmtDZ3c4djdxc2tBMEw3Qmx3Y0ppcmdvWUFnSklnSVM5dUNnR2hiZ3pVS2ZRNEZRckF0TEtYNHNlcEZNcS9CejBpYzJVbDJveHoKTk1CeHNmTVFRU2d0Z2Q5bWJ0ZG8vc095cVdPTkcxTFFaeVFPQkpmTjN2bEZoWWtGY0I0SWdpMkR5YXFpSHQ2VVo5WnVDbjI1c1htNApZRElnQkZMdk5Xc3dRSXFLU0NOaFU0UDE3R0FIbU80aFZnTHZ0M3JVSVNBUnpEdFFOR2ROVXV0MDNQcEY5TXZDOGgxV0RTK2krNTFKCnZQU2pNR28yMm4xMnF5WVRTY21zUy9CSkUrbXp3UE5UdEU4NXl0QlQzZnNHNkF6U1E5RTl0Rm82R2pBcytvOFd2WnM4S1M3YjZPL3gKUjZSZ0E4OW1XdFc1UE5QS0xmMnRjQ0VMa3NRRWIyZHhnd2cyZ2ZTSmpBb0FBYUtvaHNJc1l6dVp5cUhlemR5WWNQSGxUYk4yMGVzego5K1UvR3dCbVZpdEh2dEtWeDM3RDZXK0VhU0VuTURkcEkraTZCNTlrRWtlcnRSWFZ3WkRES2xkTm9FbVZTWGFaa2p5b2tVSTNUS2ZxCkdlTm54TWtqdjFvRkQ5elV4OEF0MXAzUVc5S3NJTEJPWmp1NmsyWitaREtqcTJxemc5WVQ1WDduWnpBMzg2MW1ndmRVOHcwOGtKdUcKNUVhQXM2WDBJenVVdGhsUWtEcFE1Und1SmVpT1VQUkFTZ1dBNno2Q2ljMHNpNHI0aHBiSGhSNGRmb0dVdlp2R1E5RGE1OG9KMVF3egprT0d6bmtRQ1FZS1cyRVY5bExocWJrbEtrUU5uMDZZb3NEQXpHNjhpdStmbnhPUndNbnRyVDIzS1BRQkdGRFVxV040eDV2VW94VUJGCkdXZjZJWjR2dHplclNMR0pFS2pWY3FwU2g0SG1VSG5HQzRGbTdLRE5UNXhnSmhYVVRyb0I4cEFxb0tXaTZVdUVJa0UxNUJIcUxvSEMKOXFnbitITFdzQlk1SWV3akJDeEZneHZDWlQwbnZ4dmkxakxqTThpY296bWRSR2FqL2ZCTW9ybVpIazJ0TFdNYXFpWkt3RkhwczhhVAp0ampTTmNMSndUT2xrRFBCUXRGbE05N25TQ2dha2djWDMyeEhncE5JcitOcUdDWGE4UUpycmVDOHRNL1Y5dEcxUENKMEFJTmNGOHQ4CnpLWVRBNGMwYThKR1R5RVd1cW12UWRWK2VHY1g1cXd5SFJQUldKVFFreDI1dFl5R1Vod3FzNUMyQXFqQnBFdXpFc3lBYU9rSGw5RisKdUtpVkJpbUI0ZDlrMC9EWmd4QldKWkEza0ZDN0RaQmdNTFJOTUZiUTdIVTB6VUs4aHBjSmJoK1lwOXQ3bWN3Sk9TRkZtM3FLalNESQpBRE9CZkFsNnJyUENrWWo5Z3A5aGVPZnhZOFh5SlBESTVFMFhsRisxQXRVVHpTb1RtZTBOWjdwdUNvUWdBYndDUnNoNWRURjBNOXhECjBPVkExQnNNamN4RVVUVGRGblVvV1hmQjhRR3doOUUyU0tzbHN3QXVXZ3ZaekxkcVdTaVlNSFV3aUFLL1JkZExNcUVjK3RhcURodGQKQ0xObWN5SjJaZW5tSG1ZbjRacGNOTHRYMVJNN2RlR3pCdmhRNUVSZisyV0V6OHdHaXd4bVZFWDNMWXZkRFh3WWhPUWFGeTJDUERwRwp6WDlNdU16emUwSFE3QjF4b2ZCOTFYWUtzSjJDUXl2QkpyRHhRdEtrS29xd1NhSk9ZR1RpUTIvcXpPUldodWhpV00wd0pMQlRBUVBLCnpJTVJjRXZJSjBoblNWQlE2c1kyRU1uazBJOUVCZ0Y4dUhLR3lZNjhhZ2o5eWxSdnlPYmJRL1RwZjRocW1XQ1lQVStjVFlvSUpTRXgKcmJaMnRGOUZOekVHRml1YWFUY1pseG9Ndm9JRFkyQW5nU2RzZFZrS2x3VXlhd1VJSTgwbkRJdUlOaU40cDVobEQrdHh6aDExTjhOTQp4VVc2YXBZRldnMnh0TG1kTVN0Q1prUWNoWmwyR2JZemdLNW1WVlVJU2t6R1pFQ2dGNUlFOTB6aEZIakloUERZRWhCUVljZVR3Uk8rCkpsdUdKVU1HeW1IV2RjWVg0em5TOEYxbU5RTEJMMWF4Z3VEdGhyY2RmakVDeW9CVkMzNVVLb2haRVczcTBZUDNEQ1lwd2lJWHZZeG0KQ2RTQWdPeVhFUkVBWXJXazNCVG0xbVIrTVJBZzZSTTQ2VEpwUmhiQVRLNUxwQmloWS9BWE1TYzFVLzh0RGFIQVphN3ZWdFVwQXcyRgorb0NpNnhaRzNCUGdCSWdQdkMvQWUzZWNWcVRXc0FZREpPUHp4cytLZWxrdERuY05LcmZxUlVsZEpraEFIaFlGUFJGK1BGNG1mQ3BxCnV3M3l1REo0WDFURmpNZDJRVDlIUTNtVW9odHVKdGR5alNYb3ZmSmlBYjFBWmNKQUNLOGdnN2JYVE1WNnJicDhuOXRJYzVVQkVNeGcKLzlWMkpRQ0NpWFdEUUw0cVRxbzduUEdFVldHUnE5YWhWN0hCSkVFb0NsZk9jenZTYVRZVmZjWnkzNmpWVUVLam5ZMEtTOVUwRG5sVAoyNFFLamFwVHJXWmQxRlBqWU1OY0ZWeEpOQzRVUXpDSTFOd25XWkdyWUNQMG9PRVVKZHdkekFiVEJRUTZKRUJ3dSs4TVVLVThMMmcwCktNMW1aVWN6MVE1ald2MW1henRVYmxNUElUQmZ0TmE3alI5Mkp0ZURHVFlNRnp2ZVhUa2o1bVdnOXI0UjFLMnVESTQwYlZYY1REQ3IKOHRhZDFKRDJkTTY0M1h2Vy9HUU5JUnd0WG9OQnk5bWxscWl1eDlVUVp0anRaK0JUMXVyaUgxWlg1bHhZSGNjSElrTjVRT1ErRkZOTApCWUJRSVNVczJyRGJJSHBUT0hpQlFnQU1Ld2liNWltaUZqNEZvd21PdG9lblZVM2hhNXNoS2cvVGtWczVJU0xOVGdtcG9BTEJPWTNKClVXaURHd0pFTnA1cys4cW12WjhKZjI1WHV4QjI5Wk12bURGUFJ2Mm5oNS85NXQzYkY2OS9mL2pKOFhqOS9QbDNydz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJZnYzbTNUUFUzY1ZiMlVra2tCWUllb0JWRkZhTVYwYXRqTU1Jczh0UXhiTHVoRmxSZlJRUW1DNGFsbE1INzlCVVJyd0VxSFZSUVlJWQpWNDE1TVZ3K3BWVkd0NFFXenJBcXVnOVd4SVcyZHQ2VFVUQlFDVGN6OHFuUDBTZ3FUbmhpNGw1djArbk8zQitxTkxrakNzZVpGUmNDClZ5Z2U2b3dqMjZEYVJCYzVUbFlGcTFmRDQ2Ymh1bXVLcm00Rm5jdzhNSFpXVVl5cFRFZ0lSaUVPK2VUQ1dYZE5VSW1uSVNXdmFqVzIKSUltZ2dSdWcwQVRodXBxR00xVUZEK1BwS1h6Q0dZbFo1NThCTEFkRGNUbDNnYU8rRW8ra1dYNEpxWUZITE5zNEZzWjdsS3VtOHVyWgowSlZFNHZoQXdHRGpjN0JSWllRU3JscVczSzVLd0RreTlkNmlWeEVSQUoxK0NScmZRQTY3R1hwRzN3eWFYT0JKZzBYZkxLblJvN2pOCkdad0tIQmJiVllOeEVITTFjM0VTNk1wYTVEQlJ6WG9rSUpaanRmUWxUWXJFazRPb1V4dlltc0IyVmtyamlIeUVZUXMxZkhlanNzcTkKSVN2N0FpUU9DdVpxU1VIMHNFaDFaTkVaZStQYTYycEpYbmdjdEdYVDhCaHY5WWNHNXZsTFFLZjdWVXhVd3hRUm1MMVVjVFl5cG9WRwpBUUNqd0dIV2ViQjJKME1acjdPeFJvaDlNSUtnRmtlUi9vaUV6M1gydE1TZ3dWS0YvVzJlRnp1eE0zUDdoeVdOclVBU1hvTyttRjQxClcxOW4wMFdpaFNvV0lBTWhwRU9hWm1ZT1FJeXJPWGlBVjREd3lTMTRVNTZucHVwTndmaVJhRTdZRExlT3pzZXBHNGdQYVpXd3E2NkIKNlN6VWd3dUJCT2R6QU9UdmNremtzQXZEZ1pFOTgraU9XZ3FubWU2dHlCa1BPWmZ4WmY1aUFNbERuYTIrR2lHb2NWa1ZjMFh6UEpxTgpNZml4SFYrRlREbFlSVEJTY3c4RUFSQUJuSlNRWjIxSDB3aXRxZ2k0NTVBcDlwSDlpV1lLcE1TQTFGUm1sV3pnRXl4b0J5bldaN01SCndla21NaGJXaDd5NWVzbVdxbExDRE9nYXozRkJoRUJkMUJYTm15MUpaVWpLRWxpTndDWHprUllGbkpNQWl3ekVoSWF4V2VpcUpWSGgKUUt5MU1WRUJUZHBzZU5FMENUUXQ2R1ZaK1JyVGVLSzdnV1dEL1I2eVBGMDRUaERCa0NZWnZjeUp5WFQreFVJcmNEb0U0SStSR0d6RgpSYmY0RXNDa0tKUzFXbjcrZkNHNHRnNEVoSHU2U3VuRW10VmtIK2ttbUl1NjZ6SDdmVDdDSGJINXdiQUF3aU9lRmhZOFFyRFdXZk9pClFSUmtaQmQwQnh5NFNjM09XUSs4Y0VrSFFKY3huSENyaW1VMHI5R1ZWakxIcmNXUmNMYmpmSGEweFNxeUNEaldhOVMxUU13Z3hxeHgKSzZ6d2pUN2l4VmVWMm5CbjErY2hrbURoYmJScTM5aEFpd1FWV0FuR2pJelpGUFVpWFRGTVdhamU3NmJSZ01pejl1QVM1enNnTVhwbQpSS0ZLdW93bmluUnJ0N2pxU0tXb3Npa0Nxa2xBQWhxNHlNbTlHV0hFQ2t0Ykwram5va2V0WStMQlEwZlFsdXp6Q3Y4Q0VqMVZUWlRSCjlBVU1zd0lEWjZRaldUVVRNcVZQSE15UXNwNTB4VTBYUm1wSURNcXVOc1hjYk5WV05RQmQ2bzVHREF0Nk5qSGVWTStUYUZJUXJFb0kKQnlSVnA2TzZCK21maHA1REF1RjVjRkM3dnNiVzZxcjFvb0w3cW1xK3BQQVZrMFd5a05JQmREUnlNSW5acHNjTnAyQnlEUFlWUFpJdQpyN3FqTzRZak9kRElJQnJFblFDS3p1Zms0Q1ZHRFN2ODBJSGRQS2lJMHltbzQ0UUU5YjliaEF1dkk5QW5MRDNtbkZRT0QrelZ5NnlaCjdEY2U2QUNLOXVpc0hJK1Via1FyYW9RUGxCWTJUV1ZLVHNIOEs2b0tSUFhJV1F4RWJydXBScHJEeXNaM0FxYU51RHVBQXkwcFBUTWoKTzZHWnhHZ2M5MXF6UVJZQ0FYbkxTSUZlc05VZTFtalUxZUpWTWUwQVR3bDZXSUxLdG51NSszUEs5Z1RhODBDWnFwTlprNmtGRGZXQwpqTXM0ZHFDTUNUSkk1ZzNER1M4RXppMmFhWW5xbnNaaVlZMXB2QWlQaDZGMkE5Mnk2a25yM1BxVjBmdlpGYXNleUtLeGhKckdrSjZ1Cm1ldUdXUTJoZjJuK2c5UXUybGE2ZXZ5aW9zbi92R2tsekhUaE5FbVE5Nkx6STNxbXhhQ3dMOEFlNlE5ajRDQW5qZHJQK0dhQW0xY2UKT3FOdWMvZ2hwTW1LQ1UrRXB3Rytrcmw1ZUM4R3oyMTh4Sll4a2VkSEppN3NhSGtsNExnbTB0c0RMN0s1bzhMTUdEYW1qcU1yS3FxNwpHNFNBN2tnOWFCTDNTbkR6SlpvS1VZY29wLzZFMVZLWHpXb0U0bFhZd25oRU5mUnBUWkdta2YwZVA0ZlFGM2o2Z2JOb0VTOHczK01rCmxzMWlDb0RPd01sQ1FLZlJUb1Z6WUdnMnBybkNyMW9zRlJkcy83TW12YXpBSzh5UWl2RmVPRmNjeG0rbVUyaEJiSXRCTElEbFYzOGQKOFBBdzdzSWgyK0lWT0lteFFIcHdQcWpvU2JoQWFmZml3ZVdhRjJUbFpnZEtRUmcrOG5ndUxRUU9salBJNEYvTVYzcHVBUzN1UG84UQpSQ2kzRmNHTEFwT241ZllWZ2xES3RaaVJqY2NzV1pDYWhxVERSdGloMTNva0djOEVObE1Zb3ZXWXNpSXIrb2FFaGNjTnEvSFVMeXRRCmFLRHB1Uk9abHVxd2VpNkhhcGtuTEtWb000WnhPSXZucDRqcU1RUjhudmxBc3UxUmhlZ0d0U2N1bk9zeFdrNUxxRnF3aFFFTHFPYnUKMlk1aGpZUGRyUUp3eVVOVHpUY09WSUllbGFyUVp4S2dMc2N4WWdBZS9aWEhBeUcyU0kvOFlob1JNT3hpWjN0eGprYW1wZWdISkcvMAowRzBlSG1vcFBia3QyM0ZMeUNyaS9Qakd4b3dSTEF6aENob2hTV1JKTXNNb3Zkd3crS2JZTlY3NjFBSGVCSkZCUnZTOEp6cFg2RlpVCllNQkt3emxOQ00wNldJVUpwcWpCaFMzT083bGR0bGpLQnh4cDBHZElVR050V2kzWFY0dk5UYW90YVl3a3BEQ3pwdlBkbGszUmRqeG0KZ2FHd0NMeExCTWtraTZnbHM4WmhnL1BjczRRd3BDdDU2RGxNeE5pK2s2bG1yQUhzSmhDVHBaMzNaeG1yMDZaNFl6Yk9sSEtiNWU5QQovSzRzdUxScERvaG0zNGFFbExBRlIzMHp5a0xKWEg4TUJhL3FBaUNhU2tjdHFzZVlpejdZSWR0WWFkbGkyZ0VneE5URGtxeXpNNE5WCk5UamtqV1hBeXJJcUxDUWpoUWVHWXpHdkRXcmtHdHRsQkd1RHFORTVGbFdmMVVYR3p6QkE1S0lHQ0wwS1JneGhUSm53WVEzK1ZKQ0YKNTZGWkxDOERRbEFoaXV1WVlXWEJDYUV4S2F5RXZZbEdWdXhOYWRIbG1zdGdnNGViaFdrM2k2cThJTkJRQUFMRG5rQ0F1d1VFTjRXQgpTRUVEYlRFYUdDSElzSHVDNEhkVDdGaFJDT0Z6MndtcExpNUluVkUxU2JuT3E4cmNJZ1FjZ2w4bHk3bkFxd0x6a1NzeEdWSWYxamxtCkc5cXFmUTZNblN2TmF3VWlJaFU4b0k0RVFyYUtoNFBDMVErSFZORVZySmNWVFJDQVkrMnE1ZDZtWVk1WldSbkl1ZXFaS3d3VG5vM1AKUWNUVm1MZk1OSmR4dHMwNWVWenJxdkJyQUluY2trTEJEUlp0T0ZZM2srU1NmbGF2RlQ1elVnZDF2ZmxWUEVNQ2dYcmNITkJNcGY5MgowVTlFSXlVTGlsUFJKU2lhQ0lwRlpBeFBOZ1JRdEN4QzBjS3QzQmZtUWhuVHBqQkVwMnFjVE1vODlWcGRuMFRIenJRbURqc01zQ1E0Cnd5SzZQMmkyQS9nWWx4Y3RpTUk4dW5rZXdoMXBGV1dnbGFzMW1OUHcrMVlMV1NLU0tKb2R3OStOOHBOSVlSdDBEb3BsZElRdjVxVmgKYUhaUzNnZ0Frb3BscTA3czZObU0wV0hnc1J4TGlubFp3MW9vMExmREFqYzlhaHRTTGIxL09MR1pSNlFWZW9jMVZ4Q3owUTdDRWd5ZApWVkU2QkJ4VGRNYk90aWx1aHArWjc2anF1dk9yRnJxQUZVWFB6endCemxNL25RcmduMVc2QngvR0lvZnFuS0tmUWltekN4T0pKMkN1CjZzWGtIbHV5SjdLYURZQ2FOVXVCTXZsWjVUWFk4UmloRERNZ0pPVjEwWEJvcG5MQS9zVjBVS1duckdJWUY0aVc3NEdHWHJTZG5VRGYKV3U3cURkcW1teDhlNTNtMkF3L2dMV0F1ZUNJR2c2WnhBa1RmTVNqME5xNmFGbzN2eStNR3dURmhUNG5aY3VtcXM0MmYxUUUzTjErdgpWdHFLZFlnR2srclJMN2g1VUF1ZHUrMVV4QTYybzZBV0pqRXNkRkFHQVpCSEZCZk9FbTVTQUVEMGxnRlVzNi9EKzBlRG5OVWlBUndGCnpUaWdBWjQwS2lERjlFU2U4d2VyUkxIVUtjemJpeTJtakxsVVNsV0JwdFhDOVhDU0VaaUhTZXlFdW95WEdaRjUwNkVQVk4yK2dZZGcKNHZOcTV3TTVRV1czcXRieFZtdWIxVHlNb0J0R1NEZkMzR0ZialZnOWl5OE1vd0Q4MUdUeVZiVk1HalVPSHRxYWxFTlVwcU93dE1SYQphU21ySGxUQWNPMjZFMHVUeHRIVmFNSDUxU0JCZ0NDU3JlRm1SUzlyTm13OEVyTVhnQWhJSE1PL0VFbk1rNVpYd3djQ3hGM05EY0xwCmlDUkZLMDEwbWs5bVM1cVNOVjJwYXNjUXBVcERZNE84a0lqRmh5R2lvQXdDWE5nNEFwVU1HeW4xNEJsaW5udGZubHN5ci9GR1l4OVIKamZBSTRqTnpGbTVKc1N0b3BxVlZNakVFUGg4bVRFVzJzVVJ2VmJaZGI3UDFTdHVKSS9Rd0gydFdJNUpIaWpIcUNKTzNNR0ZVVUdOVQpOU2VYM2k2bzFhWGFoczdMQU9tQUNSMTZLd2dVQWFzRlVmdGw5QzJEQ0E4c0E4cG05blZtWEdMVUdCSm1kc3ZkU1JoaDUwSW1MNDB2ClhEU1BCM1pYWmxSZ3gvSTR2RmhVbGRWWHN4UmlvS3FDczdseUJRb01qUm9ZaDBRc01GVTRPRm9mcTI1bXdLanFKbWNlQVZJcW55SXEKREpaV2phMjV3Nkx1eVNGcUh2VkV6VkVEVXV2WVRGRTNzWTY0TzFBQlFiVGM2ZlFyY1JzMElKSzZZbzJnN3hmY0JMSnE0QUFXSVBnNQp3SEFVWWJET21DSFBLY29VaWlWbWJQWGdRb0ZLUjlHSitLQ3FhaGllc3dYY0VPeTlXREN4YXRCMDlDd2FKY3lNRTd6U0k0azd2cnIyCllHSlZJOERQNkV5RnlrWWhDTW5YR0dRYjY0QzRRYlJYc0hlazEwdlY2RTJQMEtINjNTbGhpQzNveEtnNTBvdW0rWUdEbFc5RTRITDIKQ0J4WU45aXA4R1VsbW8xTlZZRXUyUklQcWdpVExYNk5kczVTTzhySHdyMFh5eEFCdlVnVE9FS3kzelRUa3NvbnRJWDYwYzY1YUZCKwpDRXUvZzZXUnROUXJyTVB6NVlDcHlFMm5ORUFGckxtYUxtdmROTW9aa1ovY2xRbWpZdUtOZVFUWEI0WDdZL2xEaitPekJxdW1xZmVECkpqWmtoN1hEeDRMQ3BCaWFSZUVhYVU0V0U3V29wREV6Z1JvUHErTGg5RXBtZFYySC9rZDRTMUdQdDY3aWJFQksrdE5kd09ZWkJId3UKYzBVeWZSVlkzYlphMU1pcGJIVHpHUVd2Ly9KSUN1Y1BidWl2bjR6NkpOdnV4K1haUFQzUGJkWFR2OGVzdTFpcG9kU1dkRGZ5U0tyVQpjdTdDNEl0RHJzYVV1MmxUOTZLbjNNV2hvNWovbm5GMzVUa2k2NWh3RjdvMFpyRG4yNFZHS3ZkdDZYYWhRMVU5VXJCbDI0Mk1hVmxhCnNsMTh4cU42cmwxOFhqUkRiMHUxeTJ0Q2JwbDIwVzRwVzB1MEd4bXp2a3V6QzRTaXBmU2pReEYyVmxqUE5jbHVOdVRXa0dNWG1HbUsKd0paaUY0R1NNS2g0aHQzRkVGRzdCTHNqa2ZsMWwyVEpXejI5N3BMVWZMdkxycnNrUmZLMzVMckk1UDcvc2ZkdXU3NGt5WG5mRS9RNwo3QnNEdG9HaEtzK1psMUpiaG1XM1pFR3daQW1HUWRETmxrU0RQU05RbEFtL3ZkZDNpTXlzdFhvb0Nkd0NmS0VMY25yRnJxcC9IVE1qCkk3NzRCUmRSd2RhdHpuNi8wTHBNc3VVUlpOMXFoWS9CdXMzVDZNM1ZoYVJTN0ZkamRZTjF0cW02aU5qb2c3K2d1b2hhNURJT1U1ZTkKZWVZNlNGMG00MHQ1RTNXYmkwTTJVTGNWYWUwMlQ1ZUczdDQ0M1ZiTVdRaWFMbzZUNTJIcE5vdklYaWhkdE1RUnVVQWtYZWdmQzFONApCdWxpWlNhVXdzWFJaZnF6OUlQUlpjSFFPQkRkUGtQQ2RERjA0ZkVYQzVZNGQ0NGh6V2tRZERFSGkrQi9BWFE1VmZkNitMbXMzQXBVCk1UNnhxTzk2MFhPallzbjRYQlNKemNQTzVaOHV6TjNSZVhpM3ludWFuSXVPTUpwQkRjNGRsU0dpRzVzN0hLa0lhaTU2SFdDbURHZ3UKa3V3b3lMcVp1Y3VOTlFLWnV4SXpKUUhNeForY0JTNHdHblpaTldpNUsybCtNU3dYN2hOV0p6Y3JkM2JsSVFPVml5OFlxODRnNWVLOApxL2Jkb0Z5SXN4QlBDVTR1UzJMeHFRUW5sek1jSVc0M2NaalRYaDJiazh0Wno4UmJjbkl0SWlzdlRpNDFaUGpJemNtbGdpeEpDcW4xCkpBelVMODRiWHRXMU5nMU9MdTc3WTIzb293dzQ4OHNYSlhlNXkwNVFjdlVacXcwVksxQTRJeU80ZFdOeVpaeHIwdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJYkdHZ0dyeHZ1dGFqd2UzRzVQSmRvZHphbUZ4Nkt4UmtYYnN4OG5oamNwZnB6a0hKQmJzaDZaT2dDQlg2L2FZRjEyYmtycXhmQ2tTdQpGMEFCeUYzVCtxbUxqd3NiUHFiQTR5S3FnTnJ0b09QaU5GcTUyYmpJdUROV0lqUXVYdjFIQjZYdUZXSTVDbG9QR0hlaHFxMmx6Y1hsCnkxT0Rpb3U1RWl1K2k0a0xQcW5iK3pBODI1WWNyQ0RpdGtObjJ5TlFzKzR2ZUxoZ0Z1QkhBNGZicFBpN1liaE5ZYTlBNGFLK0Y3OFMKSkZ6OHpWKzVTSHBJVUVBc0hCemNIazJPbkl1QXMxREdEY0h0YnRRVEROenV4R0FnY0JIdnhpdHpFM0JaUzl0SEFIQ2hSL0pycjFrdApLWTEzNDIrclMzbUNmZ3ZPR2ZWOWh0K0tmMWRlN050cXZFaXdiNnVyVkFKOWk3K0Jjcm5KdC9zNEJ0OHl3UUhaczhDM3Rhb1kvdWJlCkZnK09nYjFGRkxxV0h0UmIrRkR0NlMvcUxWZEVxd1QwTm5jOTkyRGVmbmJOSWh3cEVUQW01MW5leUZzVVJTQTBaZUl0YUJGTmZGc0MKYjV1N0M5NjhXOElobnJseHQ4M2xTa0c3eFQ2Wkl0dFRPSXVWaHRwRGluV0wzK25zNUM2SWJjdGFGMXlnVzZJUkxocHVOUjAzTUxmSQpVeVB5ZEZGdVVXZGVSdDJRVzFSc00zNXN4bTEwRnJzUnR3QjQ0cFV5MGJhNVdldjVrMEs1bTI4TGhIRTVkTnVXbmIwMDNCWi9zNFQ1Cll0dFc1NWNEYmN2dkUwWGRJdHZ1UHkrd2JaMUt3Z1hZOW1PaHBNSlh3MXFhS3dodXJDMXkyNkI3QnRhMnVZWWdxTGJ3UW5IWGI2Z3QKM0poZU45SVdJd21URjBiYTRwK2JPTGliYUl0VElVL09RRnNreWxBQUhEemJWaG5MdTJtMk1QR0xNczRXZitPdUI4MFd3d2ZrSGpmTQpGZzRYNGFCbTJVS01oekJMc0d5QlZXbUNxdS9KQVRsSERySWkyVUtiaU1CRWdHeEp2eXoxeGJHbGt1SGpKZ1hHdGpvWUVCUmJnR2N4Ck9OOFFXeUFWTDRSdGRVNDVDTFlnVWZKRHZnQzJoZjFFOHViWEVqejU4WG9FdmhaL3AxVmU5TnE4eEc4TGVHMVc4Qy9RdFpuUThCZTQKdHJoMXNMbTFoZW1ydkxHMWhjclEvS0xXSW1XV1ZmVEVpbUpRbUhWZVV2MTB3TUxYQzFtTEZFUStGRnNvTXJpcUMyQXRKQVZFZXI2QQp0Ui92S3g2MWdiV1k0L1NFUE5XakdyKythYlVvTFdqandHcmgrai9qc0dvZnljOWZxRnFnMXNZNHBGcmNuSXRUKzNDWXV5bTFtSmhRCml4bVVXa2dlaTlvUnFpYU43ZWhmaUZxZ1pqRXZiRVF0MGhLaXlJcFF1NFFWZWdGcWtUbDd4Z2JVb2l6bTBHbXpaWGozbElvVVpoTDkKbElJQ2JsUHlRZE11ZFVCOW9XbVJOVVloVDVCcFVkSFcxZ0hUeHQ4M2x6WnNnYVZkV3N1Yk9BditKOWJZRjVRV0ZaVm9wQnhiMFBtdgpHMG03Lzc2SXRHRUxJQzNxZlhEVXphUDFhM2JqYUJmTHhldW0wYUo4SGk1S3dHZ2ZMb0VGeTlpYXhhMHJDaG90NUIyRVdRU045cUZXCnJMeHB0UGc2S1JJSkd1M3ZtRmJDV2pSd3RBOHJac1VDM2dNT3lqOTd1V2kwOEtyd2Q2RGF1ajd6bTBVTHNpRkFRa2JSZnJ3c0hBTTMKaXBZcXgvSW0wV0tXZnRJRzBRSm5NeEcvREJBdFJnaUdRRzRRTGJ1bnozbEF0QS9vejRqTUI0a1dxMklNakRlSVZoU3RkRGkwai9seApnYUZGa0tYTUY0VVdJV05FbFFKQ0M1bk0wMG93YURIdVBDTy9FTFNZVVRycVNrMmdCVlNBWlVOUk1JTlFVU2t2L214dUd2ck5uMlZsCnM0cVhtV25IMzFQYy9aMXF3bUZLR3hzK2k1eXlRRUxXYkRhRmRpNzBMUHl3cmlKY2NwdllkMm5XRFo2RnlCQkJtSnM3RzdiQXprSWEKTW1mYTFGbmVFS0kzams0Y0FpTzhLOEdjaFJRQVkyQWdaL0h2N0E1eEVXZGhtK3k5STBsTGNSMTM4R2FSWWMvdFJadEZucDFNV2NObQp5ekxjMUt4Wk1HeGR1YnlyK0twMUlVR2F4Y2pHUllRUnNxMG9WWDl6WnVHd0kxNFhOc1R2eUtBelpUYit2aUd6MjJiR0xKcnpQa3ppCjZqMzY3TEtHUTR1QXNLbGNGMkpXRFRGRzM0alpWRjFNdFJHemtDSUloM1VJczZrNGk3c0pzOWhLdUZHTGVmQzlNT0J4QTJacFRSY2wKRmdiaFJvTXZtMWdSMk1hYkx3dnBBMHV4cnoyN2FQNmJMMHZMek9YTmw4WHhLRi9jZkZuQlFsYzVmRmxwWWNvbndDemg0c1VKREdhNApTM1plSWdDelJLZU9OTitBV1ZxRkhEVmdGdi9Cbk9ZR3pQSS9tRjY2Q2JNQ3k1WjVDTE84T2tSbk5tR1cvNVNNNU4wUXF6eGRQUmVFCldXYWYrR0lFWVphUGhwQzBtekNMQkpGU1VTYk00ajQ5ZFpaRG1OV1RaK0xySXN3eUw4WklZUkJteVRaRlZYa2daZ21pWitqeVJzemkKQjFEMnNnbXpPQi9seDRJd3kwTXkvSG9UWmlsc1lwUXhDTFBFNFdmM0xaYk1NcHY0OVNMTVNoTFZEMkNXQm5ZT0NjQXNMT0lTM1lSWgp3bG1adnd6Q0xHS1ZpdnNHWVphQlAyVVlMOElzTTJQNmtFeVlaWXhuK1Q2eGVtMDFRWFplZ0Zrd0Y2UkJGbDhXREVRQ3N3TXZpMFpWCmFwVjI0V1ZYaStwUzgyVzUxVGgwV1J4bU9lMjU0YklJMmZEQkJsdVdnU2tWVlpndGkrdWdFdW5GbGwzTFgwS2daVmNTejIrVFpaRWMKU1BYTmxVV2NVTzNEakpXZFJiaXhUWldGQWV2TkYxUjI1bWlhWnFZc0RLSUNHaW1yN0VWNUUyVlJvcTN5VVFObEdUNUQxbjREWlpuUApiMk84Z2JLODVQejBBNVRsbytOWEdFQlpjREFSbDd4NXNzdTFpTWJKSWxiRjRMOXBzdmk3OXBzbEN3dGxKVWJKNGdDUG9tc2t5UksyCitmRTkzU0RaeEt4N1Nwc2txemk1a3d3c0lNRHNKNHppUlpMbElFWVljNUJrZWRPclhoVnhHbkNqTUtyZktGa0cxSWNhR3hJbFN3T2kKYllHU3BjRUUybzJTVlE2bTVZMlNWWnBram8yU1ZmNWx6UmRLRnFkTWVWaWdaRmx1dy9yYWFQU0ljbE44SHpkTGxpME9vQ0VJbGl5RwpkbjVyWnNueW5yQlc3bUxKMG9qNHVWbXl6SXdqQWgwc1dSaVlSTGhac2pBR2daWXNXUm9RVndtV0xBMXNTM2F4WkNsNXBLYkdNRmwyCkJNSFhIekJaREI5VUhOdzBXY2tnODl3MFdXNkYyU3Rvc2lrN1ozSFRaR0ZrZWlGb3Nsc3NLWnBzSXJ4bnRCZE5Ga2I2RWtHVHBRRmgKdktESjBzRG1NQmRORnFNMktibUd5WXJvdjFMUVpObmFHd1BXelpPRmtXV3lBWlJOcElhV3VZR3lOTENLK3dMS3lvaGtoWUd5UEE0TApEZzJVaFlFczl4c295MDRJeUxZSFVGYkZFbmtGVUpaOVFQa09YMEJaMWNZQXpXcWdMTnJWY05JT29peVV6eFMyM2tSWnlxR05rU1pSCk5sV2pmVTJVNWQ5OHB5K2tMSTJRQ0FSU1ZxcnFyQXdST1Z6OE5XcVRicVNzWk5UNnJpblFZT09mcFZwQUVtVzNRdm9teXRLdGExbUQKbkFTZUlQSFRtUW1pTEVUMFQvb0VsSVV4c1JneWlMS3dlSXA2b2dkOFBYbkdqWlJOcDMyQmtiSThGbnRHQkZJV29uaXFMRjlJV1Z5agovS3hBeW5JK1ZvTFdoRGE0TitNVFVaWktKNWFYQlZFVys2bWdMWWl5dUJFaUc5eEVXVWpZVFhVM1VSWXZGaitLQU1xbTVvNlJMNkFzCnkyV29DQW1nTEx0d0tUVnJvQ3g5Y1FDU2JxQnNpb3ozQnNyS2NuQ3lYMTM0N2R4akxIMmtGTjg0V1VFUzhxYkpZbXlsTk5vMFdUMzQKbFY0NFdScmhpd1ZPRm9lbWdEbDRzakJ3VnJwNXNreVR6N0Z4c3Z3YnMxVHdaR1hvNjhXVHhZOGhqUnc0V1g0UEFralNqOExNWUJUWgpscXNodjRZU2xjREpNaStaK3ViRVloU2FiYjVnc2hqUG5GbWtyVWRyVGFGa093YVlaNzVJc3JBOVpyNU9iVUpNaVRpeVVPZk9GMFdXCm5lZytibHRBWkx0ckE3MEovc1NRY0NOa3UxdTZCa0VXMktoSFFXSEVpTkFxRnRQRHhZOGxqSFhWTUxIWGErdWJIaHQvWC9EWWJUSTcKZG5yT0RTb3NXS2tzMHJuSXNhTXBhcnkzS1FLRUJEZzIvcjY0c2R0a2JPekh1VlBuYUdyc2ZBU3R1cUN4UWNzTlp1eDhOTFFGTW5ZKwpiaGgxRVdPeGo4bXZqTTFNQzBpQ0Z6c2Z2Ym8zTG5hNEJVN1FZcGtiVTRpS3RGalFCTWpOdTJDeGhJaVd1Vm14QVJVTlZDd0MwQjhECndRMktoUW1mVW9CaThUZHlvY0dKSFNLMzNwVFlZYWxYUUdLSHU1Y0VJNVpCNnR4ZmlOaHVEeUVRc2ZqY0prdkU1Y0dONkJad0VXSUQKR3hXQVdEUzhRVFl6K0xBOUszbC80V0ZwS25uVFliRUxrWVNHd3dMNnd3em9nY09DaUZYR1JzTWltWW1Vczhpd2dHR3hIMWw5NWJkWQo3Qk5jV0NSbUtWY3hGblo0VFhoVFlkbk9sQldtZ3NKMnJYRUNDZHNOL2J1SnNEeVJ1bm13YkROOWFMQ2RZYS82Z3NHeXVBdHZvbG13CjNjVE9RTUh1UXh3UWJIZCtMeml3dzBtVFozL0Vvc0NDU29GUUJDQ3dHSlBTaFh5ZDBTYmpRc0JDeDhYVlNXeXp0RndLQUN4SlYwUzcKSHY0cmlSV29JVk1xQ1g5MjNpUFJYNmYxQ2pmOWRSbzBHL0JYcU4xWnZXVDJLMUMyS05PN3lLK0xvZDJ5d2E5WWJiTEJnd3VDNCs4TAorN3BOcHI2QzY5SkY5aHRXam5HZGNUTmZsNkV3Z1h6Rk9veWZheUJmaVRkb2FoYTFrYTh3U2xHc2lCVjFIUXdlalNoZDZacktMK0lyCmdVaEQ4VWI1RTVCYlVVdHE1Q3Uzb056MFFyNWlDdU9vSGNoWE9KUmw4MTVuMFJPL2NhOVlKcUhTUDJpdlBKdEhHNm5pRjM3Q05LSjEKMXczQVZjQ1ZCdTVWYm9JZ3VXclRsZHdwOXNhOTJsVW9HL2NLQTBlendMM1N3UExsQy9kS1A0c25idHdyOFFrWWVvTDMrc1hsK1BHSAovNks4VjRiUXdQQzVlYTgwSXNvWXZGZUYxVXJlZ0ZkR3kwaDN2NGl2RElwQWVCTEVWMkllZUhBUlgxZlZ1M0FEWDNIQlhKMEg4SFV2CkJBUDRpckFYKzN2ZXdGZTFQcFREUXVJckRUam51Z042WFk1QXZlTjVvbFFFOEZVUnRkNDI4SlUxZlNTMVg4QlhCcFllSjdNa0srb1MKa0FmeGxmRUxacXN2NU90MkRJMTg1ZnRub1lEcTR1bktJa04vSVY5dkkyUHV5Ukh3UUw0UzZkQ1VwdG5JVndyTklXSUo1R3NpYkRmbgpqWHcxdEtLOGtLOVVDRklQWU9Tcm1HQ3RiT1FySGlFWE9UZnlGZVVaV0VJRzhSVmxSVVFtcTVwMXVhbkd6WHVGSnNsUWFYck44RWt4CkNnVHVsYkdqcWk1L0cvZkthRWRYUTJQeEJ4NzM2UXpjS3cxTmxYbW45b1hHMmpmdWxjZEJoRE53ci95MVBGKzBWOGJvMkJ2WnRGY3UKQnl2ckwxalB4d2dUYVlNSDlvb3dqUHMwc3pvSXpDYXNFUVAxeXRLSlhGK2tWeFFORVJwcjBPdVk0cllGNTNXNFNPdkd2TUpXVkpGSQpWZnR3dldoQVhvZS9oaHZ5Q2wzYU10TVZRa2pSTW9Qd09yb2lPVGZnZFRSWDI1dnZPb2FLVUUxM1JZaUZyUElMN29wK0RSaFRBKzdhCmw3dGJtdTNhSFd1NzBhNWdEaUZvRkdUWHJnaGVjRjNKS0JydGhYVmw4eEJrcGtSMXhSSHdoZ1hVbGYyUXgzZ3hYYnVyTDZPTUZUMHMKc2lyWFdiT0dNOGQ2K3lhNnN2OXdMUnZveWtMcm5EZlBGYXdvT0hrM3poVXViOVk1TVZtR0xvRkZsMEdZYTNVVjRNMXl4ZHJSemV2cApZTmE1QWJBTStlTnZ1T0EzeUpVTnpVZmVIRmYyeXNsbFkxd0JJSVZ5NWFhNG92NlJMcmNocnExcG0yQzRRdG1DdGZHTmNJVU5ybndnClhLR0lhVUt2Y2pVSnhZeHBiYnQ2dkZVbEpBTGcycXJrc05jK3JDQzY4YTJvQjJmSnU1a1Y0WVFIdmhXMUpKZy9iM29yUUJQNG5ZQzMKdHJsNzBuTE1SeFVNeWJvWHV4VTJmRHFCYm0yZVhvTGNpdk1vSnNSRnJoWXljSVRhREc1RlFuRWNkUitJQUVYaTJZMXB3WlV1MXdvQQpYSXJGRGN2cHpXeWRiaVIvSTF1WFZ6ZUJiRjN1MHhQRVZtaDZpWGk3Z0swUWpMS0kwYnhXbHRDc3RYR3QwQ2NqQUhmUldpVmozcXpXCjVUQjJvRnJ4ZC94S2tGb1ptSWVySGFUV0NLRUhxQlYxUGVBZzNKeFcxT2h4N1dsTTZ6TEdMeWl0eS9IY0c5S0tuSURlakFnb3UySTcKeEtxaU9lWHhnclRTU0t5dzVWT0pHTTFjTjZTVjRXejRxamVrbFEydUVmb0xTQ3NtZHNNQnlXaE4wWjdnWXJTZUk1blJDZ01STk1GbwpwWG9mUVltYjBRb3ZKbDRJcGFuZ2dMTjN0aG10VHMydUY2T1ZuaGRiUDVqUnlnd2tacDFndEg1eDJDSlk5ZjBZcmNzdFcxNklWa1JkCktmUVBRaXVpcmxHOHdQVU1wdlJrWXV1V3N5eFN5Z3h0eFhBQmd3cEJUV2ZGYmt5ZzNIQldGaVhLcXlhYWRRVmZOUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaUtzS2wxMm9WcjIyOFAxWWNoaWJvV3ZUOU5xRWhmRW5yM09CV2VtR00xOGZZRll1ZHBoYURqQXJRM2l1NGR0NFZZYnhXQnRwTGl2UApDN1hTbTh0S0I1ZmtyYzg3OWlxZHZkb2NzeUptam04Ynkwb0xPN0hlV0ZidXdGb1lZMWw1MFpoTWpHWGRmOTlZVm9aeldhMXZMS3NxCmMyZmRXRmJtcjFoZGNHRlpHZnhtZzdnUnNyVkh5czdnc3RMenpRS3NucHBDZUU0NWJTd3JZdThzT2pLVmxmOWVoSURkVkZhZUVlNWMKVUZsVDlCRUlLaXZGK3hoRWJ5b3JqZnlvVFdXbGdVT0txYXdjekZBN2NGTlo2ZTNodklQS0NnT3JZNFBLQ2dQVjVqZVZsWXRLanYyaQpzbExac0JReTBxOWpkSmhLQ0cwcUt4ZVp1R3VCWmNWN0RkRitVRm1WV3l6MVJXVWxUd0pJZzZDeUtzR2QrcWF5SWpiUE1lV21zaExvCjBRUmQxVmdJeHQ0OFVGWkY5RFZlYlNvclZRd0lGQVdWbFlZaUNpc0NXTnlyS25Cekt0cWhpZUs5TnBXVlhMcWtZTjRRNGkzcEJ0MVUKVmdnZUVPb0xLQ3R6YmZNd1dhR0RZZERpWnJLQ3A4WDA5TjRLbmdPQkM0YXlJdTNCOStPR3NzTEk1cXlDc2dJR1JIY2dvS3hJenpCQwpkRU5aeVI3RGtqT2dyRERRWXdzb0t3MlFTdDlRVmdKNldNOXZLS3VJUFI5M002Q3MzSTIxTGhlVU5UVzdhUUZsUlYwcmx4VUJaVlh6CmJqQ0VENVNWYVN2V214akt5cE91OGdVSVpRVytqYUNBaThrS20zN0xUTlpFVWsydG04bEtBK0ltTjVNVlJtTEhnc25LclhqOVpyTHkKd0VtYytNMWtSZjVQbkFveldmRmtpYThLSnVzMjNFeldZelNURlFkblFDSm9xNG42NGp4ZlRGWmtUT2wwN2EyeUZqQ0JaTjEvWDBUVwpzQVdRTlJIU0JTbUNnYXo3WmJ5QnJNeDhvaTQ3Z0t3c0ZVWnlPb0NzVEdPWmdIKzZ1OE80NUo3cEMwWVNDNnVTQUxJeUdhVy9kNTBEClgvU3FtOTlVZ3Z5SUIwRkVBLzRWNjhlYngwcThWWk1QcWV4eENkWmJBRmtad3BrM2o1Vkl3Q2RMVWpQMGFhZ3FQbmlzL0ppY1BMNDYKVEZTNUJ1YXg0dStPQkY3d1dHR2dwM1B6V0dGa29ENTRyRFM0R1NsNXJEUThPazQ5MzBwV210UkVWbVpYS1hJS0lpdjBhaXlKZXhGWgo4Wmk3T2VzRVlyS0NmNmdmS0lHc2xHOFJHSElCV2FrVHlJS2c2NHZHK2xuWlhBTlo4ZGF4ODlPTHlBb3IrY0NieUVvTEhzbEdzdEpDClFkdU5aT1h4Mk9vOGtLeFV6TEVxTlpDc3NEQnVkU0ZaNldBeSsya2tLd2xXZytxaklJY2treUl2SnV1MmJTWXJKeVBxTW9QSnluczEKeXljb0s2eDZwUXhsaFlHTC9RMWw1U2JVek54UVZscjVoQUxLS3Z6WE1LWlZ1TTZzRWU4RlphV0k3akZycVd2bTdCb3FOcFNWakFLbAo4eThvS3dPMnJFOE9LQ3RySUtsVk0yNlZiejJ2KzRLeWN0R1NqbTFGTDdSQUFHN0RUV1E5Um9OMjBNSkMxQkR6V0wvNDJOL1ZqZis0CkUxV1lpWU5qVlZWNTJqUldlT3RjWVFXTUZaSGNYdDhzVmdTSldGNXJGR3VYdW5xVFdLZEsyRjhnMWcvYklERFZTRlhJSmhBc0RCQXIKVnMxbzBITnpXTEdPNi9jdUErckVEV0cxM3ZQRllFVXRJSW9FakdCRmV3MXhTRVJnUmJ5eXBmb0NzRUp5alFwNzgxY1Ira0xOYk5CTgpnWldGL09QR3I4STJpV1FWZlJWQnVtZHU5aXBVOVNpV3VkR3JVR2Vqd0NMUXEvaDdJY1J2OGlyK1JubnZUVjRsdlBialF3anlLclRuClVERHNVNFBJbHF1Umd4SmpNZ1J1c2JDclVGY1hmTzB1N1FLVmJ1RUdYZEJWS0crSWw5YUFXcGJHOTBDdWxzNlcyQmR2RlI1RXhuTEIKdUZYMlhudktwcTJDYWxlZitZYXRsaUk5d0dhdFFndmVpR1IxU1FRTUtDQjZrVlpoaEdRMFFLdUZoUHQ4T0tzRkViVlMzcGpWc3FRawpKV1VWbVZBeU5mMmlJTlhNRmdrWFk3V2FMUmVJVmNiQTF0aUVWU3pZdWE2OUFLdUlUcERuRXJHcXg5UUM0MVc3UlZZM1hSVTI2b3dNClY4VStTNWxKUlVvZjh3Y3V0R3F6eENuSXFzM3Q1d0tzMm1LcU9XQlZxRTRZU0RkWUZaSUl2S2ZHcXNJNUhPa0ZWVVVnbEFrdU0xV0gKRVRPQlZCMHM5SHNCVlpFQXo2S2xrcWM2alBZSm5DcDJBWUxncHFsQzZjTDhsMkdxbU0zQlh6WkxGVElzMWlsY0tGVmNIaWJwSUtuaQo4cGxCZFhnUzRVT0VXbStPS2dKdjBDMEdScFhaYXBFVG1hM3JLdFMvR2FyZFBQOUFxRWFKY0JCVXUrdi9iNEFxR3g2VXRmbXB1K2pUCitOVEMwdVQwb3FkV002OENuZ3JJSjlKalpxZTJzdkdSRzUxS2tFU3VtNXphM0ZZb3dLbk5Lc1dibXdwYkVRQ1ZxbHBTSlhyZTFOUlcKQkpxL3FhblZBdnVBcHNLTFl0YzBKODlRL2NTZWZoY3lsYUtEVVRZeEZhUU9mRGdHcHVJT1FFbDU4MUpoZTFiZnVGVGdGNmZFTjZTbApGcVkrMGd1V0dpaVZZS1VXbGwvblFLWGl6NHlydWtpcHVCdVBoRU1FcFJhOGVpS1pNTUZmV0psZlhwaFVWUDJ3N2t1RkZTVnIrZ2hJCkttcUt5SFc5R0ttc0FjaHRJMUpGdmxxYmtJbzhaUjh2UG1ydUtySU1QQ3IrQmpRazZLajQrNm5yQlVmTnlJTTg3YkJSUVJaU2grbkIKcHJDVkgvcE5SaVVnM1RhQVVTSGdRSTR2d0toNFdiTUFwNXVMMm9BMmVnNFdGWE1qbk1LZ29pSSs5SWlsdXFHb2l6WGo2VEJSS3lzdQpEeElWNDVaZW8wTkViY0xkYkNKcThwUnBJQ3BlaFpwZU9GUzhRWEEzZ29ZSzNTVFNGMEZEeGF6SXk3MWdxS0FrUVA4UUxGUUVFSldpCnhFU0RMSHNlbjBpb1VNKzBBMExGbWwwL1F2SUxXMitXL01hZ2ZyeFlnRTFzQ3FvRm94dUNDbDF2TFc4R0tzSVBwUjRFS3FhT2NnQ28KeUhDbS91YWZJdnE4NXNHZjRsVmwyd0RUVHo4bS9xcUt5QU0vTFhKZWduMmFQVE1IK3BSbHZYaUxMdklweEJWOWJPNHBGaEFrNFFYMgpGS1ZBVC9wRVBRVUF2bTdvS1JKbGoxd3FESjFjdWxBdGV6RlBKVlZnWTNaSlloRkRkS3RsS1VjZWxycktvZHpRVTBUVFJZczI5UlFHCm9lRU41L25pNTM1UEp4ckQ1dkQ2TktDblVBVkFjUlhNMDBBbkJmSVV1YXNwU3VrbW5tSWxEaGxrQUU5UjhneWhTUEJPU1J5bzY0VTcKeFNnRVg4RzAwMlpTWThCTzhmZVlMOVJwYzRZN1NLZklEaUx1SHFCVDBrTWc0NzA0cDYySk5oS0JZaUNTNEcwRXdCVEFEK2VuTnVWMApwcDBCcFEyTFpkNEJWUzBDVFlQVitJMDRoUTAzTWdpbnk1aDlBMDVCaHRTL2Jyd3BJdG1ZOVlKdWlpb1lCcmE4RFJKbnlDemRiTk01CjFkWXowS1lCOWd4bTZaaEtWOXhnVTRUWDRGK0VyVThKUVFOckduL2ZWTk93QmRSMGVIWU5YT25vV2tUZVRGTW9MSXZrVzdUTnBOQnEKRUUzMzN4ZlFOR3pCTXlXRGRkV05NeDFHS053MFUwaE1TVEl4ekJSQU13UjZBMlpLd0ZrZUw1YnBjQy9hUUprT2ExMENYSXBYdStUeApBcGtDQm1yOEtZVmUwelR2d0poQzZSYlV6cUNZSXI1V0ZDOWtMSUovbDBNeFpSd3h2UmltMDVDWlFKaE90OW9KZ3FrYjI5NzhVc1lzCld3MThLWE9jSWlkeHJsTU90Tjd3MHFEMkJMdDBUamVEQ1hUcDlNZjNJcGRPWmlPbDMzSlJFa3RjQWx5S3Y3UEN4WnRiU2x1YUcxc0sKMWl0RUMwRXRSWDBLZkxBYldycE94ekJXZGhFRk8xSXdTMW5sa1YvRVV1Q0JFQVVLWUNuZU9lbm16U3VOMXI4dlhPa01BR1BRU2xlcwpWZ0pXeXJLck50K3NVcE5vTjZrVTU3UDY0WlNpNklTVmVEZW1GR0ZCb3Fvejc1UEtFZ0pTdW85d0lVcG41QkJOS0oxT3NRU1BORDd0Cm0wOEsyYVBvcDhLVHpxUWJ0N0dqbzVwQWR0TkplNkJDdzRoTUMvR2JacE5TUFR6ckcwMDYzSlI2azBuSnhlamxnRW5IYytwUFE5bzcKbmxPQktyVGE0ODRlUVNYOU1LZ3U4NGFTZGtkN041TzBQMUU0NmJMYmJiaUlwTWNtSUdrM29HVURNVWRXZWMrTFIwckpTdjIyYWFRbwpLd21NRzUySzZ1cW5GNHUwcnFnTU5vcVUrdlFlSFpla0xJOFdUenRuaU94T0tvb0E2dGd6eUh1bWFsUW52bDhRMG1hOXdHYVFJcW5WCjJpYVFqcURnM2dCUzVBOGhJdy8rS0ZkRDNnaTFvU1FnbW9vV0tncVVBeFdEN2xoZVc3TlVUSnM5V3JONldyelFveFdMNndDWjRrYkQKb0pwb2swZXI1WHczZUJRTjczVFdUclpGcmlld281K2RreCsvbytQelg2bWpmeXQxbFAyWEtETEFTUG94eGtveVc1cTcwNUpxMTVQYgpNaTF0eDFjVUt3bkd5MmtJU1RDMFdYTzZ1enNodWs4Y2YycDFCYXl1RUwycmEwbW90VWh5ZVJqY2hxYldJOUs2Y3c3RDRJMzFYc1kvCnNhajBPYlFBZ1psQm84TnlDQlpxdk1TeWZvUUxVS3VxUlYrem5UMGZKR3lKQ2NmS2hDdEtrOHZUbUxJSTU3d2M1SXVyYkducVRDWlkKT3FRTVkvV1IrRTVqVklFT2lyd3UxT0xDSjlUeTBXMEZNZ3RiY1JjSUJ4NXErNnppelpiazZLQ1Q3V2x5ZjZ4WmdaelVYRUlKQyt2ZgptV2tsTkF1V2tzNmVoTWpSMnJwSXcrNWJnVFVwTGhnV3lqZ1JnWjRCNW0vdUtjMG1yMWoyc20zNzR0bGlQYzlBKzZOUmt3MWxJLy9lCnEvS3BiQTNIeW5rV01pVjEwUDJZaXh2YmhaUEppSDV5VWJ6RUh1T2RDMGpNSXl4cnFPSTNveXN4V2FQc3YwUGxPMUErc1ZCU201NXEKNjNCL0hTWmRZRUhva245WC9WMERza2pqVkVQdHhsWTUzYzIxWU9rdEd2NGdza3hMTDZjNXZBQnRrTkJTUzRWSHJqWk1qemlncVR1dgpyajBqSjhibFJkSjJEenRoUUJHYjJTRWJqZGZaamFvcjE0NlhvRTVEcGRCemdEQlVQaWFFcnRGMVFDZzFURC9FRjB5WGpPRVc4bkVyCndXQXhLRytzV2xRTlIwb1JqK1czT3YwcDBaTGliT0gxZVQ5a1B2QTNpMUo0ZkZiL3c0SUJIcFlVMkFCOHQ2eW14aFAzOGJzS3kvQlcKRkR3QlVOV25wTXpqa29wdzlRUDFORHNRNC9OU25XNm1wUzUyVkhaZktIdzJZM3F5aHBXQ0RWcEI5S05sOEJjNmtWVTB3S25PcktqWQpUUWNmbFVMRFNnaFRWaEcvRHNXd1gzN2M0MUtXcVBSZUx2Q0VWZG80RWsxTjExZUpPQzRJdXEwc1dZN2pGVS9Jb0hFODlZOUVySVF0CkJ6QXFaM1dsWm5OME1OMzNyYVVWekZGWSticnd2V0dPRGt2bXhaYmRybC9rTm8rakVHeUR6VzZPUTJFb2JpZTBQMzRoOFkxcmtqNm0KTWM4b3dnN09LSDVtM3djR0RPazdJRjZCcDFNNStBM0RWVUFMd09pZzZ5ekV1ckg3QW1vM3NLTTJtNGJBOGJIeU8xZ3FRTkV6V2RKdwpKUzU0a2p0U2t4Y0R6WVArbHRBTmY2ZTRPNCsxdG9tUVhlOG56RW5zNTZyNmZlU2YvVHdvZXVBM2hlZTdXMEhnUk9uM0xFdUQwMXpDCkxPa0NrMzhReTFzeW5BQ0hXQVF6c25URmJ4RllFSURuODV1UG4rUlhpUVp5S3o5Ky96anRRU2YySkwzZ090YkFnT09xV0xiWEpFb0kKVnVUOThKdHFQem1ZeVM2MHlNZWs1bXpGbnRuNERDaXgyR05zRllQNndheGxiNjVaQWl5WmxLelV1T1V1SEhqSmxLeGpzZDNRUUZjUQprTU00cithZ3JWOGpIcXhVUERaeXUvRzN6Z0h6Q2ZrbzNkSmZXa3BNMGFoZDVMcUdWaVRadXh1NzhVZ01FWEllaVY4c2dXM29XY215ClJKK1pYNFpieTdFbkMxWW1pQlFoVm9XM2xZaGlEajZqUzYzTzdpWHNGMENRYnRORC96alM0ay9xdlVQTUFQSVR6ZTNEYnhVNTZ1d0UKRVBYbncwTXhCRnNmbzZnZkwyWjcrUk5ZZWFCYWFEaU1DOHZIeUsvVEp6dUZmZDlXMThNa1FTSThrVFdUbnpuK0E0YkhiOEhIRGEyeQpKTDdzaGVITi9aTStISlE5dVBIVnhCMkFxNXZQbnFWaWliRXRYeVFFK1hwN2t1RWIxV0p3M2d6a1ErZ3Jza2RORlNMNTUzQXB1U3lCCmxYVXNzS1FzSi9OaitIQXowSmN6R2lGUVNYbnBWbVMxdENMRDcxY2JwUlNCZGVJbEl6QXhhMG1kcUdQdDdvS2QyRmYzOGxMVWh4ZFcKUWdwZ1lXMHNjQlYweG1DaDMxc0VkZk9lVFJoNnJaeVRlakdKRmZTeHRsNjl5STl3NXhOYjVGS0Jvekx6dFIxQ3FIeC9TelhkS3JvWgpraS9RUnJpT3pRMW9VWUgxdUxWRkk1bWNQYit5bTFSQmRRUkYyZWhSM2djVkpGOU02TXo0aEhxZ2FtNExrV0RhTStadzBocTdGR29mCkE1dXVxaWg4Z2ZOZmNyTVlxOFQ1TS8vMXN4M2RRc3dUeVBsdG1IREFxYWVaNDNsWnB0Qnc0U0lUVllHUGgxck5GZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJSFp1eFpxNXNwVmhVMVVIV3hneVZXSGRiRWpUaVh1eWloZi9BODRXRlZLL3Vya25jTWI0aDF0dXcvV0ZSTW9lV0lzUGlDOWRkK3FlTwpyZEVqcXdWMmkzMDBLT0lNTGo4Ri9sa3RUeGRIMHVHYzZoNmROS25YakdFQmYydENRc3FTelRxenlXV0RKSys2OTlQNWt4eis2UGg5Ckx2ZDhtZXJYU1lrcUxXMnZBWVpmT3haT1BSS29VUkNNampVMVY0MU42cW5kbldENjBhc0hpa2YxYmxVMUYyR3hPQnVwY0R4a3Q4MGwKcWVmVGg1MVZKREFmdDA1YkpEaHgzWlRWSldlaHowSmliaTFwTXVvdEpJTE12dUpMUnNkVVlpaVE3R1MzbnlPMURDb1RaTWhyQzlXbQpwVW1UMGZDa0pyL1R6VllaYU9HZUxESkdKSHQvSkRYRkkraGUyWkJ1eW04RDhWZXNRR3YyUGVzSVBBVUFwamkwdzVtNDlQaVFOVVl5CkJ3VjlGVlhNMjZMc1UxWHEvbXlIVlJWblFjQjA2cU1JbHQ2ZmZybXJGb045M08vbFR3bFJKRG9TVkZlU0cwVGRwK2dzOFRrajFjUkEKR1FBcUkzaHUxVEFXSnY5SUhFcTVCM2FsN0QybHZpTzBoUUhrYWRZMFhxUktQQXZZY0VzV092emEwOTRmbENqNWNRa29heS9BTzhpcwpIWEVkSkY0THJoWjVYeW5oS21yRFU1S09UMEtBVy84bzJNZ3laYm9IZTRoRldESjhobWF3SHFzRDZEUGszSUtLMXo3NURGUnFWSGtwCm81cTdwMGdqa2J2VGJaZndqVFRyb3JSajk2QklLY0RrODFZamVNclVlUTdiZ2dhZU1mUWM2L1NpRlZGWGptS0E4M1BhaGw1U0hxRXQKZXRIRFp6dmJlWFZGcHdsNTY4dENXWWwzREdOcm9oWVRpOGNmd0tmT0JlOStYVUVxZ1JPaEo0bGdQRTZXZlhTYk9EdWRrdGhzaU5GagpVajd2Vjl2bDd5eHMwejJMZU92eTN4UjFQY1JJVGxucXhzWGdzVlU5Sk5KZWhlTnBlclJVRmRCU3U1Mi9QZHFCOUVWbm14TDJxU29CCjl3VmJwb0VpZmxVTVRFbzFlcmdoRjA2cUc5UmsrckttdXBnVUxoMVlJc0VoREVUYkhXTEI5MGdmaEtGTkJsWWgrb1lRbUJiditlRVYKNlFkempjYXNXSnB3dUs2VVpJcWpCRkFMREE4bGNOaVJzU1d5UnZaM0JjZ1JoZkpKcEdrMk1lMTJyTkxqdVA2Z3l3dE1TeXc2S0NrZQpmai9zSWliN3FSRDBONDU5MlpNNkFrTWw2dHNRTnFha0dwMXZOUElqUU0zN0NrYm5sRitnR0RGSkJWdk1qcWlQUExLVzdJcm9FZUh0Cm0wa3V5KzdVbGtmb2dHRWQxVDRmVy9JV3Z6MTBBaC81TUlyYXdZSm5wdkg4OFRCRDRWT1ZBSnoxRFA0RUN1ZWowZTFIOUQzd2JDdXAKQlJTUkluYlFteitWNWp0V0l0VXpJc2dDZ2c3Zk1sZ2Z0MWNYdTRvNnlhVEhwU1VUOGZreHZ0WUlmN0p1R29NY0FXbGRGczNzTEpzZwpNZlRxOGNOWG5EY0dEenMxa2NONm9lb1lpd2l2SGZwangza0ZOQTdOeFpScUFacHRhSGgwbjU4cUxTbm11WjNzb0NWV1pidkptcmZiCnFaUEJzUE5sZ1pSdjlmQW50eFh4WVhvK3cwZ1hWQUx5WmZ6czVNY2FJS05PdXFJNkhzSTh2Sk5xa1lYTUUzdXhkd1hBY2hERU1xWUgKek50WjMrRGlOcHlpdVd5dnhybmxZaGxJeGdjMmliMW9lazAvdmdINUFMbk1IZDJFc1l1T2dmRUluUkdnT0N2a2xLaldFb2FLQkJBTgoxWmNQSzdYb3J4M0pRT1B4ay83T1ZLM0FiUWs5TFE3UDhuYktEeEZPd051OUdETEtVZ0hqSXVCOEkwekttWVNYQ0NqVzRHYndhSGxCCkpnaGxLcGJ3azhVdHgza0sxUnBKV0lWZzRBVWdwZ0ZHTHRzWUY0UHRZRUVyRlJwMmp5K29wL0NPOFhEb1ZseTYwcENaZmhmQ3FMQ2cKSm9BWDJhd1M0Uzh5WUY2YXBnVnN4KzVVT2xmOGI1WG1FQmZMd0pGMmRHa2JubmRMRkc3QzI2WHFjMEJOakFmZkFqR3dSSXptbmtSUgo4NUtTWHNlY3ExQUtrQXFpYzFCV0tsY1h1V08vZkxORUkxaEtSZkRKTEQ3QlIrNTBSajBFdys0WUk2dFQrckFxbGd3ckF0eXdLSTZNClBpc1FLTUhBakFBSGo1WDJqblFxYzNWREVCNEtDMGRZV0hqSW4wekxCc3V2TWpXcE9NV2FsTFptSkozQmZyNWtET1VPVlVqalRyTUIKV29UODlvYzBFTDVRbkE3Z2FDTERHWjBxVWl6RE1sWWc5b3ZEMUNpN2U1Z3VLQ0xsY1RNK3kwZmR6bUhvdWU3OUdHWnZpdVp4RzRiRgpRYUJRWUsxWWgwc21SV0RTbncyUUtPcFRvRGp4MGxpeEVFNWlGSnJ2SlI3eHNKd1BjZWNlMlFVQ1J0bHFHR0UwaEZSYlJwd0kzYTE0CnFvUWVSOStCSkJJampSQkZzdjB0c1VPd2NPS0dHSWowSXZqS0pWakswQU5CazVIcGU3UGRzUjB3V056cElQa0ZoaCsvRzBJUlJjSkcKNGxuTHJDeTI3VkNxcUxEeGVKY0tLTWRJek12RXhSTXNBdnhQemRwVGl1WEhEaEVicWo1WnFSM0dEM2UwY0E3RlRCbDlWSjlYcDRBNgovSEgxb3NXckNjOXVmOCt3RHNic3B3cGxlU3dGdkRGZ1JKUGFvUjF6dkR4cys3QVl2YVNQd2J0U0krZUVjWVl2Q0hsRmVFYVBWUjg1CkcyekdwQk5DV3JnSEJLNDgwSWJ4WVQwZThnRlZXVEhXb1lzZEk5K1BPYlE1dVZVUis4NFc3VWdTR2U5U01rT0tWbkxVY1dXTG1aUEgKc0xYSFJMYk1ibmhqMkpMUHA4VysyTHhMT1MzblYzUU9VMW1yWXNUTkE1R0UyenZoNVJKSEdpVmovQ1NReldJT2ZpNlA4Ymc5YkNSSwp2bkowNHNXSGx0ek5PV01TOUxjb0MyV1UvRjRyazBOUTBVVjdBSkMxdEU1MUVVT204cmRvTzdZZjRUYU1mS0I3NHc3RlEwQU90M2hGCmJ4VW9ZUmlhVzQ3bFlPanRqOFlETmliUW80U3NudTJ5bThCUm1WRHU0ZWd0SjdyaS9CVi9jU2R5aWpHcUNtRmpkQ3pSWWhZV3FBZGgKVVIzWExLZTZFMVo1SWxQcW1FeXR0cnRvNzU4a0NZUXRzM3ZNemhCc2N4VktPU0xlVC9oYlU0K2NpNGlNU0ZIbU5VSStxOTNRTFlkOQprNk1iSnZnZk5YdllhM2hMWVdtUHR1bWhrSmQxNnBheDB3RVBOYm9zSE9Qd2U2M29GOWY1eFNyQkp4SlRLK0c5UmNpSEl4UUtDZVVmCmRIVld4TGx6RzdsS1U1Ri9waFRnem1RU0NKMEVvdTlFTnNqU2dKSWlrZ1ByTEYzakRRdW1ZRm5QZEhLUGVUVnNzNW9ubDNoekNJU0IKLzRFRkYyY2FOc2h5VnJCandRWkw3MDVQVTZtc1BhMnZoSlZkVzNCTkpIbHh4S3FrbUdVVjR5dHA1N3dqSEVLaG5xQ201aVNGT0FsOQpJNHdreUdaa1JIN2EwR1RROCs0ZkJrMmlqV3JNeXZTK3BscjJ4WUNoTVUrN2JnMCtlcElOcGFRWmdlYVJHcWVwUjRzNC9tS21LMEk0CmdYK3hHZnlBbkNHckUra1NLczN2WmltWkRhbTZoMWVFVXVVVEdzeUNTWUVMSTdvc0hLblo1NGJ1TWpsYStNVU5mczRoNDhYQVZCQUwKd1Z1MkhuaEx1U2pmblJtWXhidU04aHZYdE1EWUpoNFRmRlZVUFdRR1psSFh3ODFzR1J3R0VBc3FWb2RsYWlpeXRtdDh5MGhnbXJKOApMQi8xays5VndWNHZZTEN2ZTJuOThTcHp2WUFxcCtxVzB1d1pCd3R4VTRqcXkrbER6cDFwbTY2S1FBM1p5UTA5Ui9lY2tGaU5oTDlaCmJBMERwek51TWNiYSt6MXdZbWh0bm9XV3MvNE1CTkNnMUYwL2F4N3NTQ0VDdzkycktYR3FoQVdiZURGZC9RaThVVjJiSXFkbVNuYkkKc0hwU0lwcjEzVWpjVVVjSkIyT244ZzUrSExKWlpadGp1MUhqM3FDTkR1SWh3eFF6Q2o5cXhGMWg1YjFHSVZqMmR1SVFFeVR6eU5JaQpGTGpkZmxnNTFhb0JkeDZSQkx1Mll5NkxHYmorNkVscXoyYWlDTVRuakdBSE1CYmhOQVhGZ0tYa2ZCTVdPVkpGenMvWmJqV0RUcUQrCjREUGNGc0JyVXNEWWp2VnhGNW5sK1ozMTVUeHQ4Qks0YUE2TDdtMVJvUDVzbHQzWG9FWnQ0N1l3Y2g3NGdHT3RiSStjU1BqMW1RMDIKdVovVEFkUTJUNHBZZVU1S2pOdzZBQloyRzJDZVFpazZrdzhSU1Q0Um9obmRjeEZmN3Q2T2ZSZGhZYU1mNXU1WERrdEUwV2Mxb2FZdApkZXBoQmh3dUFLb0IwYXdJZVFuQzh4Q0VacDZHMFFpa1FoZzJhaEdjZ1dYNlpGbUx4WHcrRXpWcVUrNjNZT2xieFlOREp6am1MeGtLCmgyd0hFMUhhL1hsUkN4Zk9XMkliWHpjOVY5SVZWQSttSDBuMktqcFhkWlhBc1dwQWxJWmNGbWFveVBKbkRoVWhwdExsYU9LcStZbVQKZStncmJGSklJeUNWOVh1UGtCL01QZkEvWUZGb0ZHOUxqay9rTWJFWERHd0lFN2dkRmR1YW9CUXVwcm9WaG5MdHFBdzNyQWdOa1ZMYwpSRkNmVlBQQXdrWXg2RDEwOHB2ZGpaQnJjUWlNRFphVFV4bFVIdTBHeCtnTGtnTzlQY3dwaGRYYmVSRkh5MHdLWkdmSmx3RjlDR0pPCkVKUnBaVFlOb1cwT0dMQ3dtcnN2QTRvU0tRMDdxTFJFUEsvUzd0QlNvc0tmYit0OXFIUnViQ1NBNGJhanlEZU55SUhSeVVqM0NCSVcKWGlhVFRtN1RrclNka1JrQ2ZDSWNpV29TRGlWaDBRaGlrTzdaYmczWHhaS3loYk9BVW1adFlsVGJnNVp4K1VXWlJGckVUY0IvUE5Jcwo2Q285dGNlT1JCR0pFYy9sWlltZU10bEphTWoxT2Rkd214aXowTUtBeXdFK2twRzlhbWRmbWNubC9qR0FEQnNkeEMvcnN1cVRqVWZtCmNKaTNhQW9hRWI5OXVtdlNNS0dKTklFUTNHaGVvSEs4S0tHSVNSdGIwQlc1akNXVk8rdzR5QWVMRVFodTRBcUxVcjNZcGg1TkZEbHAKUEJ3ZEoxaThIeWNXR2pneVpKRE12TnR1UHpRaU9sTEVVbVAwSE9velNjRndBMW1DNnA1UnVFWTFla0orSHplYnkwSGVhTWFCNGRiawpwSzRLdUYzRmJidHA1SVd6VXIzSys2UGdqUllzOWFnaG8wNUxFZmF5OTFTdGRkRWJSUU5IVjhUVEtUWExGbzlTRTFCYi9PVGpma1QxCmlRNXZ6c3NoVlBsSXpQZDJzMzc4NGI4bzVKZUJTREtYMlk3VVFBaGFsYTN0RnBVeFBKbVM1VHJGb2NoNS9vNGxxb1JVa0o0K1hkRVYKSHg5cTRhYm9sZDRRc0YreXV5YlRzU3RURXRnUEIxM0JMUzJVZTlieU9STXgwT1dMblRod1VhMFAwNFdMN0laSU5iY2RJNjEyYnRvcgpSbG9WaXFMV2lKMEI4UU1VUjZBSUZ4bTNYS0xNSHBiK25GQ25SSDJzVGs1eWUxa2pnVkwyeG9XbytsTlRackgyUllaenpNNjVqQm9rCnIvM0JKK0Nna04wTU9yR3dPODM5NXRnNk5TWFJ3b3dERkN5c0w4K1A5WFRVdEpTeDkxUVpSSEVraXVKY050b2dmWGhLbktzUmhzWGwKTTF6bUZhcVRwTStHWWtZQytWRGhrSmZjZHE3OXNNME1SVVptdlFKY1pFWnJzY0lOWUJ0MTRrd3NQTTMxTW5nTU94WU1KWjRTVXRrTApDcXlKdXhOWittUWVGUTFLVnRSUDFJbWpONHlOTDk3ajdHbnhhTUZ0T0lJUnNUMVBoTXo5eGg2cllaT2p5a3dXeithZjVJQU95NGhWCkk4T2lReWZDSUNoamFvZzAwdEladVJyR1EzRFBHTkNoeWw4Nk5SWVN3eFBtb2hvM1EwS2cxYUpkbW52YWNLWkVhU0hiaDVYb05JTlcKOGl6UEttNktxMm9CU3JqeUNUMG1Ncnk2MnFwMXlyaEk5U3lhQ3RnN01ybHFqb2FZMVhkTldISDRoUUt6NnNZdWxBVW5JYXYwMEhqegpZMDhsMzFrYVFORklFNm8zTVc5U05hdUxqZ0VKa1NWTDB5MXdhckppSENwY3d1U1JuS1dxZkRqVWlhK0dLdGhZL0R5TTFMRkxBcGVPCmpxWENvbmx5Wkl0WE1Wdms4TkJnNVR6SkZ1aGVjRW1GV21zNE01SEVoV1VuRE1ld3M0ck1ZYlpJbGUxUmtPZXM1RkNoOW5GWUV2VEUKazRUb2pUbEsvQ1JYQlZnRThYTnJydnpuZjhpVHpScFYrSk93TnNzVWxRVkZxcEZCT2NwaG5kSlg3emxZU25RSWc0YURRd2JGaTltNgpUenFZbE14YU5LQzFDU1d6b2N2R2VnTWNVNnllS2ZtakNEQS8xZ3F3S0dIVUVJYVlES1Bybkc1MmlQVVYxekRxU0Y4NXJnOXEwaURFCklwWnBwR3YxMDQzeEJMS051blVZbGd4U0krRmtPSGlpQmlESGUwYytMQVRSc0xZbW9acmFzOTE3c2hlV0RyNWxydUpnSjViQWNZWHYKdFFrenQxU05ERS9yNmxrUnk2M2tYNlMra1F0M3R3Q2hINDRwaU9FUUNzU0dQdm1mL1JMb282UmNIT2ZUWTlLalhCejVhYXdldXZWdApKNVBmdTVvTkRvY3FPRkZUemJIVnNiQU02OXBUdUNCY0xpZ3FnVEd0NkxmbEpFSjIzTGplbXBEdVJkNDVIRjh2RFlmRHJoalNKYmFZClRhcGFDclc1MG9XR1BUekp4MDNnWWVUS25Ma0luZ0paV0k4VTNzenR5TEw5M21qUGhPWUFqSzA5VGxWd08rWWdPQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaS9nblNRQ0trWm41Vmk2UG1mYUliRWxpU0xDcUVtck5KdWtPYjRRRzJPNENVc2hCV1F6d1JNUExuaFMvNHh6RjE2N1BMUUNBMDZrMwpxdS9FQVVJd0krVEVEc2VwUWVXWW11eC9kcVpGbGFYRFNrRzRGK3dRejZjclB4UzA3NmFIbFVPakNhdXF4c1owTVFDaWlhd0x4Uyt3CnBUQmhEejc2anJ4Y3gydnFlc3hRNGRQMERaSW5oZWsvSzNLMEpPQlNNaUZxS0dDbG84NWMrWlIrZlRJa3g0YXl5ZUtwWGZNQUQ1S2kKV0dqTStRc2xKc2Z1TU1WWGJ6VGlqOThQWVV6bnBEQU12UlMzK2RYV3FVS2ZGUjdjMFBLWWxsNGRuaWYvQ0h1R3NvcHhSS2EzOHVOVwp6K3h4dVJ4MmJxN3VvUGZNNnFtMjYyUzY5SnA2NE15a0RSY3FaZDVDaDBHYmt6MjB5R2xCZVZ2dTkzYkdJTE1BVEF1N25lbERBN0FWCkxpaW9aYzJPZVNGOHBJcDZ4WlVnNWdvRlo1M3lZOGY3SGJKOXVnTGIxTFR6M0FhOTN4SEIyT1NHQmU4OUg2YzBrM1ZOdExCUkJYTGwKcXJsSnJnZEs3RHU4RjVNdW1SdFNrUE5mMVduaFVRaDFXMWcrYUxVc2RoUW9FWmt4cmwrU2RVMU1reTQvemFFNm9xSElVenhOTHExWgpSRld6OGh4ODZEQTBQMTZWd21ISDJkUGVrVDNuYUUxT2tFaUQ4UURqclY5VXc1M0graVZkWkRGSEVDNmZMckk0cERNalVvOEJqU015CnhwSlF6bEFWOThqWWxYSmRNYTBSM0NVRGk0Tmd5UDNzS0lBaUFzMTYxNWNiRWNMQ0pRRUNOTjErejU0aHViVFduRkk5eXFXaDlrYUkKVmVra01KSlFlamJkSy96SFdHMTNWYVFtcHMyeU93MGhXakpSVTZKRXRGVURDeVVNc2FNSzVORUJpYm1yN0s2dmlUUjhOcW9vSG9JUQp1TnU1Z2hJNmMxZzVqRUpVejVET2VQeHdtZFZSZEt6V1VFN0F5UEFjNWtoOEVEQU1COUVZU2VTUjZJaWpvSCsvNk9XSisxKzlQc3BSClBndFZNbUtMMU16d2hxRVU5ekZNRktJUVJXTTU1Q2NOamc3d0w1VnZJSk9rR0U5WWxFbWlTUExhREZtZG5wUjNVQjRkM2s1MmRmSDIKa3pLWjE1alJrYjVBK0JLSG1tUG9UZFJVM1F5WlNHd2VFSmVKa2dxdXcxZDh2V0NnNlNNY0ZnZWdydysxMEtzckhCdDdLcUtOK25wTwpwckFRcW9HMmdpdnJXSHBuWVhsbS9DYjhTTlpYWWQyTEgxaEtjc0hocHUrRS9LdjRIS01yOWNRN3kzS0NLVjM0aDB1c1BLUmFxUU5jCkFibGh4dUtiMVNYd0swWUVNMUN3RUlWcVRCRkRuSzR6cXlwSW9JV2hKcm9mTWRQVklqb3RyRXlNY2pQZWpLb1VBSSt0QWFvcVVLSWQKbXhzb1l5d2puQS95UTZZL1FOMUFubXdiNWxDb1NUdHVhM2Jnb2thUkRuZzdVTFRtbW81QWZwY3VRYlVrNzI5dlYyS1ZOc25CcUxjRgpWY214L04zVzFaVHR5T3hQU0tIQlVpWDNmbVdaV2lzdDB0RlZIV1NoMTVCc3JyT3V2bk84VnBWaHAzYXE2Z2FGSnBUWnorSkhvaytmCkxXSHNBRDdhYjR5bVI3bUxrL2hOektFbndnZ3pMS3MydVp5WlVoeFlxUDJFOTdwSFBCUnEwTGZ0SVVjWUNuTXpZOG1BQk55ZHpNeXcKOHdBLytpVmdFeG5OcGtsU3lnZThIR1pFK1huaEV3eEp3bDVzd1RxclZSeXFSbFRzTE1sQ1Z4dExuNUZETXJhSnBIRHJwby9IckRJcwphMGtHd1NrZEJvNzRWUm54dUVncGg1YVZtc3hvNE1HZzhEWDdFMUY5TGFLK3NZQ2h1cEFlRERJQjFJcEIvcG5zNVM5MGc4ZWd5SmtkCmJ3VTlFdzE0SzdvekRZOEVKVGtKRHdJK2xVbUlXSFVKQWVwMnQ0b2JrTUhhOU1JcVF5dTlRSkc2a0hrSENRYnkyRHRLVFFSL1RtTE4KcWFVNi9UbGVaWEYxRkxlSnB1SDBjQkd2MFdSSHQwdk53bkRaTExhaitKRktNYm9OTWZac2E3S3FocnFoVW4xcWZKTFV5OHAxM3lMLwpUTG51SEphYWNzSnhPcHdoVm82NXJMNmpMckFlbWdLdGZFNVE1bUdsZ1B1L0VDR0NSWW92Uk1Rb21zdFhUU0Yxbml4K0p5ODM2Wjg1CnFtQU9ubHFIWk9VOEtZekZpamltYUxFVEVQYmlSWDA0WlZ6MElVZzhxVXVCakl3WEhwWWQ3bnZXWmFWU1JrclhJa0xCc2VTcE1LMzIKM05idVNtdW9idEtRZGtIdjRoZFAvM3V1SmxoNUlWalIxSHZOQWtwMnFXbWlRQXZOQUI1ZW94bzlPNzBJdlRZVkN0Z214ZEl6dTRFdApXeUJBOUlVNkM5VVdwQmFsTnQzdVJQSUV3YVU1RWNGdWQ2ejZWb3JhMVVVT21nVW1ZN2dLVERmdEF4a1prcy9QZmtNOUNQYnhaWG5VClcyNkhodm1MU2c4bExiQVJucVdtajcxcmxndFpsMG9TR0JQa05TSS93bXc3TmYyUGFralY0M2tvQ293SUtNVjg2dFFjTld6VkJjZzgKLzZ5S0U0SjYxQlN2RkVOVmtCS09wcy9hc3ptSmw1MkZMaTBTZUJ0bzB0aTFtVmM0UWxpS1gyUmxGbjZIMjBpc2RzNXpXb21DTC9uWgo4UC9IM2gxRU5ta3FYRWlPQldwVVZidFp1d1VZSU1qdmVxbEtNa3ZsOFZSd2dsWmdoV3ozSnY0azJ6Z3dLZ2xXMHpnMUMwcVVwV1J5CkFDcEx1ak94OU1rWlMyVVNJQkFpMmpNME1iRFdvUWlyUXRycFVkeVEyL0F0aHdBc25mSSsrYVpJSnpMU2loOWdIQVlXNGxOcU1sME0KSzRtZHNBWFNwamdsckZRdnlwMVMzUDdxWHQybVJJM2pqU2wxNDg4SVNGT0hEY203YWk2SlJMY21jYkxhVWQremZKUytlbzY0WHArbQp6TU5DTVFjc1BOdmNGQ21PUFlXeHg5SWtNdmNLMU9jV1BKTXA4Z3E3b0tRUWZTQ3lwMmM4Z3RDU25YbEZVUm9CT1UzVEd6OVdKQXNVCkw2MzZIdkE5alNnOVoyQVB5U21GL0I5LzdoRGE3MWdpcWp1VnZFeVNKMEFyUXRvT0cvQlpQTUo2eUhKWGtVQmNRYmtMa2FwWnRaM3EKVXg5d1hPN0pkN2d3U2hSUmMrUXF1bXFvWGIxYzFPazRFYnY3cUNxWkRXVlNET2MvK2xtcTlBa2ZrZGdIMFJ1cE9nUk1rUUhEM0RXZgo1Ym5pcWN5UFp1VmNwSDl3VG9vcFdnazF1akxIZFgvUXNMSWJBR0ZjVmIrZ01xRWFnZWhoRGdvdDUvMUpEazhEQ0V6Nndha3B6MXJECnFXZ1hqN2s0cjhEclpHMGZia045RkdaalF3d21TRkg2bjF3cnJtRWY5YnoxNXU4OEtxb2lYZ0dTR1FaOHExZU4zSVFhWHNwSm84ME0KNDlKREdqWnEwM2w4MW53QlVrQU5DYXJPVzdGaGR3Vng0UXFzS1ZWZEpCMHRmclBETmMwZlRremxqYUJpVGc4ek95M1Bpc2NpL3BFKwp6QjdzQm9oRytYSjJGTkh0WWFSN2RZbTZwY1NuM3kzaVlTVlQxWDFTZmd0N3JxRGdicDRWcktyd0NvcEVkNEtSRmtaUitsQVVSWHVpCjBSVGpsNCs3QWxSM0lHVC9FR3BJYXBCS1VOU0VsWUFlWnJTd2FLNW40bmFjOHhCVWRxa3lQL0Urcm53RThwdGNKOEU2dTc5a0JqcHcKcnF5bTQ3ZHRsa2VMS0IrczlHaG9aU0Y3cVk3dm9yR1JmdEZLd1NFWjZjK2VaYldjSlVUajhXeWsxMjVhMVlONEdBZThhdndJOTBRcwpTdFdSdy9LaXBNb1MzamQxVlFzMVNuVThMSFpVdjVLbzVKUkFxY25pV21WMENtUWViK2lyMTU3RFlBeUlwZkhDUXNiS1lRcXZ4Mk92CjU0bFhuYUpkK1V2bFQ2TE1NaTIycFhyc0FOUVM1ZGZkMm4xa3B5TXV4TTRiak9qRFNnUUNZcVkyS05tWDNER1k4OXF6TDdJTGo4OXAKa3RlR1EwMlZGeks3UXpsSFNyWkVxVWxPbG9XaEtHbWs0dm1rdWdpZVpLNGN4WHlSU0F5ZlVOd2gxbjh0MVcwWHVrY3M0OUtFSzJFOQoxazk3NXNJMERKNnJLa0xiOE1UOERGZUUxaHBUdGNrZTdhcStWUk1FTGt5bXBtcTkrRmhKa0QzMWhDUk1hNHQ5bFhMYzBKRWk1ZUk1CmJBbkdvV1FXT1FORkEreDBmWUtBRzdpYlpKVDdGQWZIYXFpWmhCRnRxcDVpWm4zUHNxd3p5aUtIS0lrS09WZHpmeWRtNEZrdnpkcGgKT0tiYlQwT1lkM28ycGpxZDdueFhHVHpkRlJvbzI0Tmw2NzlDMThIeXVFZFYya3FINTRDc2ZWa1lmTmRsaCtTYVh1TVAxVzB5Q2NzMwpEUEkwbmtTdzhaQ2RNelR1Q1pWeUZabERFOFpqWHhFaHk4ZlNZWUZYMlJ1cnFPSmQweUlzbXlzQlZBbGRJVmdEZTZMMk9qaldNdjdOCldjbDZWbUQ0QlFrc0VNT3EwaHlyMUJmdG9vY3p1cUtub1VWaWlJU1l0dTNHRTlLalE5TXpqcmpvcWRmRnI0Z3NaUW9QQjRGanBkRzkKMFJweGIxemp6SUFWNVpmcjBmb2lVcDV5K3RmaitRbmI4UjFIRkxKVTdTazhCU3piMlVCVFNrN1hLNkRvU0o4cTZPanRhT0V3aEtPSApxSVIzZ0N1azZYVXRybFY1eEdua1VHS0hPRU9YRG9TSUdPalNydTNZQ3BwbFBzdFNoRzFCZE96czJhTjg3VEg3Y01wRlVHSTJLOGVyCjVYdFk1RHRPcFEzT2RnenZONlZaV3IzL2ZvNzBibHQ1dFp6WUlQT21RZ3VpUy9wMU0rZ3lLMTk1NzJCMzAxcGNkdFM5V1lLb2h3WlMKQjliTFBTNEdBeUhhM2IyZFJGd3JtV0tBbnh6ZWN3ZjFpV2dicmtBVTRTb1pwWWI0TVZFbWtJQ3lKR0E1YWNTM2xVUm1SU0pGWkFvbQo4c29TZ1BJMTVtaEZWbnBNM3l2SVlKT05WZjIyTTdxN05PYXZBRS9QSlEvOVovK2VFL0pMSVUzZVRLWlRZVEdHUzZvaTdIZ2dadUh2CnJDa0NFSzVESEQ2MndjMjZTVXBtc1ZsQmFIVVF4bThLak8xNlJsYkJzVVFwa2RXV3JJZFpUaExxSjVQRjg4ditBdmVrdm1aUjhVK0QKL00vbCt2L1lVV2w3WkJyR1Vya2dWUnRzWnV4aUs5WXM4ZGl0bjJRcis2TWdLdVNDMkNxOERVSklwSWlJY1RxSDFZNUdBbE9jMVZqUApPN3dDVzE0RnNteU9wVW1zNDJTWlVOOXFlcDBab3YxczY3SWtReUFuZzV1VlIrTWJGZEU1bWpURm5wemxZYVZPbWhaaUlkR0phWmVZCnhyRm0zTmkwSWh0ZEg1TjNsdk54TEdTbTd4Zmp4N2JvTXBOaU9pelg1bmI0VEI4RkR1VW56ZDNjeHhZTkg4TXcxYjBkWmhnRytPR0oKMGhtbjlyOHJ3NzhydlZnandIQXJWTCtQNElTUE1tNkRrQlh1cHdMNGNVdng1Nm1DMTVvR2d4K1QwMlFXV2ZxaDJuQnVFd3Nyb0lBWQpEQzJ1S3RMS24vWGJMdjQvbG53WHF4eHJrcENWV256bnczbEoxTEczWGZyVjVsWUhFUzdEcERRNVRUMGZXS2o4b3VheVNrWnQwenFxCks1TUtxa0VvV0tXSnVsclZ3OFA0bnVWNGIwOTdUMElsYUkxZkVQazFtMFRFYmRRZXFxZ0xXY3pOaXQrbllpUWRrRUVzejRjbnhWbWQKRXJlbTJxdGRrSkdNUkNXSUUyTklNemcrcy9uaEVQNUVLRklFZGtMbXcyVWpyeDMza1k0OHdGY3FCL2Rxa1hpTlFuWEFrSHBSZXo3cQpFM21lUUh2TWJSaitvcHMxc1pRb3hJREhsVjVjZ0laK1pnbUhhekpaRC9EWnovcnhPenB4LzVXai9iZHl0S1BDNElYUlJwUXNEU1d4CkdXRkVUSnZSR0VPMEVjMW14T05tYUpmbHpHc3d0RUdGWDEzbFd5eW1nTHRMdXZ4TjBFWjVKc3VlRE5DT3psT2JuNDNsR3Z2djNQanMKdkpRdzNmUnNNbU00ODBjZCt2SVljN096dVZ0U3BRcmpjamo0c0Y5Qi9FaGVLbGE3dWRuMUNiU21zZG1JRERGYkVOVHNadjNjQzVvZApmV2syTTV0RWUyYzRxYkdwMXFPOWlObkhhR0IyZGRQTXpjc0dtcEF3aVJ1WERiUlJMV0pqY3lxdVJTdTJEY3V1Vmc2OFdObE1ObVpWCkozT2dxS0dvQ2xKMmkvbjJBbVZEQml1ZXM0UGNBUkRjbUd5V0NGUVJmcU1ndncxWFl3Y2tHOFhTSEZHRGtVMHBReWx2UkhaekFkRW0KWktPM1dyWXdINTIvaXVvV2J6NDIyNitab1UwaE13NlM1NEZqTjh2M1hteHNBdUJhT1doc3hKL1VVczlrYkt6K2hrOXdZMktaQ3k3OQpjTEZaZEtiY0hCT0lmWVppN0lKaW85OU5zVHlNTXl2b3RNOVF0US9qYXBpaXlkdStpZGljeUxzdzJRUmlzeDdRNkhIaTY2SnM4SVhECmpxcTN6Y01tWlBqYmhtSHp6NlZuczRITnFDcFRBdGdvYkpHVlJZY2dDWHRVMFZCdUR2WndtR1Jqc0Q5V05FeCtiUXIyY20rL0Z3UWIKcXdWMlJBd0c5bExUd0NCZ3I2UWw0Z3VBVFVHTjlxRjdoU1B6dFF2NjlYSS80UmY4ZW5ablpZTjlEVUJFSjU3YjZPdXh4Tng2a2EvWApWRS9qRGI1bTFWbkpxaUZnZ0pjTkpVUkN2Sm5pYkROUkpTSVdKeDBKVStHckRiNkdSZG1ORzN5ZDZFS25FSld5MDBWMGlRbndOUzBTCmxNNmI3ZGE5REE3d05kYlBUMmlHa2IzQ29vY3B5QnQ3dmFyVGFvRzlSajhPYlJiWWF6YkVZT3p0NWw3TE9sWHZxZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaE0yVExQWWZodEE5cm5pOHVkZXdEaW5vemIxbW01RHVza2J2cDFqcHpiMWU1cmx2N0hVMEVRcnFOZW8xbXRkeUczcU4rV0o1WmMrQQpzOWRWbTNpOVpnalhMdUExakV5QkJ1OGFjWTJSODdlTnU4YlpOS24vZGlVekdqd3JiR1BXOVJvbWk0Wk9lUTBuSDI3U05kYTZUTzBFCjZIbzIxY2dHNWhwbHU0Wnlic2gxZDV1bXpiaHVTeDdiUmx5M2kzRzRoNjVtWmFZQjF3Qnk4S2VEYjkya3lIelJyWnZqY3NHMmJ0TjAKMFVCYnc3Qi9LYkt1U01kUTdoMWc2Mmo0R1Z4cjZoejFLVzJxTlhNVDFDa2FhdDBqYXhwTTZ6YjhTdDFJYXlTREZLTnlWZ1Fhc1AyRgpjSEpNVG5IZVBPc2FsVitCczY1UGFEQ2R0VWM1WkhNUng0WlpWME4zTnN5NlJnMVRzS3hoR0cxOGU2R3N6N0ZNc21iK2QraXJvdXFYCkpUS3NuRDhnYXl6cXBzVm1YRFFnbDZoaUlXT3M0YXlSZzMxanJITS9CVVNrV0dkT1pQTHhwS3Y1N0FsR0tGVmFic3o0NGl4ZkRHdlUKeDNEdEdBaHJRRkthZWRVa1dHT0daMlRoQmxpVGlQSW9qazU2U0l0aXQ4Qlh0K1k4NEUydnhpcUhTTm1BVitQWG1FOE5Kalc3K0tVMwp1WnBRa0J0d1hZTjRIZHpxNkNMN3dsWWo1YUtVcnFuVmRVVlkzTkJxSk9NWTY3eVoxWUJpODgwTFFEVk9xUm5uR0FicEdHOWdOWkRsClJZZGltU0QranBwVzVudGhVQkgrQmF1dWthY1BWald1bFpORm9LcVA0U0pWc3lLeXBrT3FidEhIUGtEVkxRcEpiazUxaTI1VndhbHUKVVVvU21Pcm1ibmczcFpvbEh6SXhFbzdWbjlJMlpsUmpBK1ZmTDBRMXpvaDNMUWpWSUV1d1NqMEExYTBxRm5uanFXSFRoMmcrTlF5YQpONHlueGlCRWljMU5weWFVaEJoZnc2a2htbVRvT2VEVUFCQ3BxdWxpVXlORnE3SGJhT3JhTEdJTk1qVSthR2JxYmpBMUZTT1BzcUtzCmRhZ09XbXdzZFlscDlxWlNJd2wvTTZsclpPY0RTVjJDVG40VHFVdG9Td0pJalFha0tsMDBqNW9kU1MwODJEanFqREtVcE4xRWNGR3IKdnMyaXprc3hvNXRFWFpqUWxEeWQza1JoWms5MU9nemVsbUp5NzRXaFJybThJdWltVU9kZFhCbHdhY0JzMHZyMllsQjM1NzNDOW5DRgptWVZ0OEpvWUdVMTNQVGdFYWk3UDJpRlE5eWpqRTMvNmNjTHVoWjkyYmVxaFR6OU9TRzM0Tk1iM21qK3hweDh4L1E1Nit2bVROM2dhCmZsVjZZNmN4QjZKbjhNWk9WelpsbFk1ZVZZOVZ1ZHViT1QwWmhHN2ZEblA2RVJicklLZVgweW92NHZSeUVqQ0kwMXkvSE53MC9od3oKdmVmeGJBMzRoazF6cTVJdjFqUzZSeHBIZlZqVGp0TnQxSFJYQ2ZraFRXL0REWnJleHVCTUw0Y21BaC9ORUdFYXg4QnpiQTYvN3EzcwpHRy9HOURFY3hQUzJCV0U2NzZyUEFFekhxM2p6cFZFTTBFZ2pGbDRhU3lXMkZ3cTY5TU5ZWktwdnVqU09rTnVZZ1pjV3BxRG1nNWZHCkI4MHV5aSs4OUVOSVl5a0hMLzA3SnQxcVQ0Y3ZEVkxCbU9aOTd4RUx6a2RuSGovdzBnWkhiTHAwRG1MMURaZkdLcHVwaW1CTEwvcXEKN1Z1d3BURVN6Zkx0alphR1o4Q0tkcE9sSC81a3Rab0JEaW5LeHovT3p6c0dXUnBlVVowenVBd2ZreUdHTHZiaTNHaHBPUVhTQW0yeQpOSW9sQVVFOFlHbmNxbVM1NHFPUGdHcnpGMVk2bTBpd3FkSm9TUDgwZ1NKSU1NQ3dKVVhSeFpTR1lLUzcxNEpHYllqcmpOVlE1Vld6ClJ1Y0dTcE0vMmkzR2xQNWJsV3liSncwRDVTQTNUaHJIS2sxdUZJVHp5TkYzcCs4bHlXMk9ZOTBzYWJpRzNiMHhpRlZoZWZqVXRiSUsKa05EWGtiKzlRTkxiR0J4cEtDSllUeHdZYWQ2aVZOOFVhV0pPeWpnUTZlS2lwTTJReGhZTStONElhUmo1VUlJZ0RTSENNK1lCU09QcwpyVTNaSlk2NEFBNU5RWTh1UzRqaURZK211bzArNVdGSDE5RG1CRG9hUlJOYy9nUVJHalFoeWlGdWNEVFdHTkVWazhiK0dCb1pzTkp0CnVLblJ4MmhvZEZ0V1h3UXorb3RUSFQ0M2hpQmo4aTVtdFByeWpINlkwZFRKc1d3dm1ORlVDRkltZnlHajhhRXlGckNSMGRoTUJPRlEKV0FGanpGalBSWXltTVYzY1o3M2NlVzFnZEdJQmFodHZZRFRlTDNJRXJoMjcrb0lZR00yL3AvbkV6OEd0RCtsUk56QWFNa2psRWdNWQpMVEZTK1VTTUp2U0JSYVZCaktha2tzSEZJRVlUNnNNYytrMk1wbFVNWVJPaitYaEdiNGNZVGVrSzgyNDNNcHBxbFZibVJrWlRxY0p3ClZDQ2p1VWt5WVB1dzR5Q3ZaN2c0a05GVXFqNnRibVEwVkRpaUZ0N0lhT3JhQlFNMk1qcVI3Y3NDQXlPajhVNktmSHNqb3lsc1pwQTAKa05Hd0VJS3dtZEZpSTVtVWZmb0ZKdlZYMnNob3FJK1VPUXhrTkhYQ2pEM2Z5R2lxeXhoaURXUTBHMll3dm1wa05BMTh6VzlrdEdScAovUkNqYWNDU2JST2pZV0hkNEFzWmpVc1MxRG1RMFJCcUsrWWR5R2pLa1pSN3ZaRFJiSzRiM3hGcnJSbTdVa2JReUdqRUpab3h0YUdXClIrQ01NZHdBUnE4bW9ldm1SYVBObnBvK0hsNzBhbEhHYkdBME54b0hGNDJqRU9oNTA2TFhqT2RxV0RRRGJvejhCaXdhbDBIUjF3c1cKaldLZ2lMS1RGWTFPN3VSckJpcWF2RjJWNGdRb0doRlJkVUUwSjNvVzRmdzJKcHJhbDZ3dzg2WkVvMCszMmo4YUVnMkRHSjFtUkdPMwphb3owUmtRallxY2laUk9pR1JTa3VpRUkwV3p5emJ6aFRZam1GZWRIU1EzbHBCNzNpTnFFYUZTOTlqcSt2UURSeTVXdG13L04xdHJPCmV4QjB5Szdmb2pkdk9EUnN4UlhOWkVQak1Bb0pDdzNOWHVDUGtKZEJoazRVSnlUakdOU0VKaWlvZ1liV1RPS09pQnNOTFE1Y2NUOVMKZGpzamIySHBXQUtMZ0pyQXNmMW1ROFBxQW1pem9XbEJzNWRnUTlNUVVPbk5ocWFWdFVuQmh1WVAxQmtrYUhqalRHaXQrZTNGaGtiQQptV0s4ellabWFZTUt1cU1BQkZYTi9HQnVPRFRMS2FoaURqZzBLaFNFN3dvNE5HK1FxaXd2T0hSUzhmdjZ0dUhRN0xmTkFIekFvVm5iCjhKZ09zK0hRckM3WldHbkFvV2xoSENqZzBMU29zK0lGaDZZU1ZTb2wwNkhaVTZpNXBsS3lEUEFpdXNzSU54NWE2bFNTMDQySDVuYmsKRXdVZUd0T1IybnZmZUdoNk5XcDFhRHowVWJFR0hocVdHcFRualllR1ZVNkg4ZEEwTURvWmVHaGExSHpxd2tNekZzZXFVTk9oMWRuRApNaUNoZXhCbTR1QjJBNks1T0tKQUpBalJpZEJmWS9ERmlXbHVoZjRpUk12S1Q5ZUVhQjVMOWFzaVJNT2diZzQzSVpvdFVpaGFDRUswCkZnRm1SbXNwWE1aaHFHOUN0SXFubW5SMVV5VTl4WE45SUtLNVlKa3UrdCtJYU1xMHhaTTNJcHBLYm4wV1JrVFRvZy9nWWtUVFN0RkYKTUtJbGxjOW1BVlF2d0V3MHVCalJFc2JyY0ZwTnd4OVpKdEVURWIwVjd5OUVOTDFDOW04T1JEUnVtUVNGZ1loV05PTVRJWm9SRGRYVwpHaEhOY0FhbnVHQkVLOERSamU4SVJuUTY3VXpNaUhaMFpCNUdOQ01xTS9BZCt6Yy9ybEorV2pDaTZRVXF1UjByVnN5dm54SFJXQXhJClNCSWNTVmJhcUFpVWlHaVMyWko3S1c5RU5BTy82dkpnUkRSZU13SW9naENkV3JUTHZRalJMSitpeWlZSTBXd05LSTJRQ2RIMDVIT3EKYjBKMDJvS0JJRVRMY3ZqUVgxY0FlMjJBMGZjSnVYL3dvWkVFWk5vdThOQ0o1SXRIb0NQNWQ4QUJrdmgyODZGcHBUVFlmR2djWDVMegpBRVRESWxuNkRZaUdWWEptODZGcFVGclFnR2habVBDNkFOSDRSYmFtQ2o0MEVwUE1Cd1FlR3BtOGdQZHRQRFR6a0N4VENqNzA2dFk3CkJ2WVpRMXdrd1RZZGVwVEl5TnJZbzhOd3NLRTdxc1Vka3Qxb2FCZ2ZzNXM1czhBZzFJN0IwSkJTVDBXd3RtdlBkcHJVV1pzSzNhUFUKTkxicTFSbXNtd25kM2Z0Nkk2Rkhjc0lxU00vb3E4MHA1Z1pDazZpODZqR3lOM2FUUHB3NDZHMjRhZERIYUJqMDlIeStJYytBT2FtQwo2MEpCaithdytONnFDSHV6U2REYmNJT2dqMUVjNk5HdFBnME1OS2dTQkx2ZEZPaU54QTRJTkVMUFRBa0ZBeG9HTmErN0VORFlMVGpPCkRCN04wTzRFQUhvK2Z0MXYvdk9JRmx1QmZ3YkVSWDBEalg4R3RVUjB5b3YrVFBTdkEzU01wMndXY0xDZlJ4SlM4U0kvdzdRc2V5TUUKQ0lZYURlSXh2UXhEbUcvczgzZ2luV3ZxODNCRHBBMTlob0Yxb1RmenVkc1AyY3huQkVCWm94SEk1eEVmN1VFK2I2UmFFSjhCWldOYQpPSURQNElSdUZuWmdpV2tzTWpJaGo5M0VBalh0K2NNZ1R1Rk5lKzVKZVYrem5oR1FaVm8vVU0rNllCbnVYS0Rxd1FMMGpIUzMrbkdaCjh6eThTbjFobnRuM2VkVkRlZTVhZVczR2N3L0k1bzE0NWluVkEzakdEV1lGalBITytMdll1MjFuSDJGK0F1N2NBNmtiYk9mcktKdnMKM0NNekdtRG5FU21rb0RqdmNlREdPZ09ZcURKZVU1MHg1cVViNFR5alYrTE5kSjdkWXZTOTFUS3lQWWpPa1BJMWs1b0Q2RXk4NWF5SAo1d3hEOTAwa3pubUdoT1RHT2MvZ1J3Zk5HWFVPVE00RnpCbkVhdmJqdkZET2k1SHNja2pPV0NvejcyV1E4Lzc3NWpnZm96SE9RTHBFCmYyRldiczFpWXQ4TmNWN0JTUXFHTTlhUyt1cUQ0WnlvYlhjenU4MXdobFVMbUlpNlVYMURrdWJPcTJONVpEanpidUVMYVJPQlZJRncKaG1Xd2ppQVl6dHlHSC9waE9HTUcxZlFRREdjMGVIZXBMdEw4V05Qd2hiajV6UitYUjY3SXhqZnpsSGgzQTkvTWd2NFp2T1ZkUkFLbgprUmNkL0daVzlFOURzTlZaTUVYWDdadmZ6R2ZKUWduem0vbEtOQU9pSlY1T1ZqTysrTTFzRXhsWG9GQTNQRDBPWlFZNGYvV0RmdnpoCnZ5akFtWEZCVXE1dWdET3RsRGdFd0ZuUndwSVBzSmxoUURXTHVCRE9ERmRSSHhRSVp6eFgvNElSenVBeDhnVzVDYzY0Y2hVWUJzSDUKckdhRDRLeHZlbW9DUFlGWmRueTFENlhNV283Nnk3WmpsdDNPU0h2RkxNVmgyUVJuR0tRYUNJSXppMGZWOGVFaU9PTXFwVTRMZ2pOZQpPMEdiQXVFTTEwNkNzcHZoZkR6WVlEano5UXlwaGdnUFpGSU1wYkEydy9teW11SE03cjBNL1FmREdSYkp3MjZHTTNFUFZCd0Z3emtSCnErMEtldlVTaDZDV3c4dk5jTVliYXpXR0djN1U1YW42MVF4blBGK1ZJOThNWjFTbmtlZ1ZDR2VVYWdtWDdnTHI1UVkvTDRBejFHWEIKbDZmSER6ZWFRMGZ3bS9HZWNIMXk4NXNaNE9Gd0hmeG1CbmpFSmZCb1FVdHpEZWlwbHFMVnJYMnA0K1N4V0NRZC9HYitaSlp3WitPYgpHYWlNWnZRcU9Yc2VSUUUzdm5uTllHd2ZlalBLYVlSWE5yeDVEcTEyTjd1WjVUVTg4d3Zkakc0d0FrR2IzQXpwSkN2MUE5dzhvdkx2CjVqYVA3dUV4c00wamlwZUQyanppNDdtb3pWallMQ09hR1JRWkp0c0dzaG5rUE03N043RjV0Q0JJR05nOGhzdWlqV3NHSW94Qm1rTnIKUnRzWURzMUJhNmFzZ2lYL2hqVjNCeDlmckdaUXVoZzNDMVJ6TDI2OVkxQXpzVjVENWRDYjA4eE9SNDl3enJ3c0hJYXZZRkNhMlgxKwpLSm04MDNJOUtvQ2p0SnBpUDBNWVdCZUpxNmlQR0FrYjBjd3U3MVdmTlFOUVNOVHhXd3BBTTZocjlFQnZQak95ZHdRakI1NFpFQUhHCnhJTE9YS1A4OUlZelF6WTFTcWp4SVBNTHJ6RFF6TVF3ckZCM1dqUU12UTlMNHdQTXpGWmZ1Und1TS9qQlZCZmRXR1pVNEdxTllDcHoKYTk0cW9NeFlGN0hFOEdZeXc4Z0ZTRENaSVYxcTVpaHoxUXh4azBpSkY1SVowd1RCOUVGa2J0V0Z0ZGR1cW1pOWVjeGNpaEhnWUc3TApYamNFanhuS0VzN1NONDRaVjhCZkN4cHptNmU3TnljVDFGV0pvSDNCbU52d2x4WXM1aGF6VjZDWWNUN0ZqTWFkQk1lc3dnS1RJREZqCktocVhxTE5OZDd1NE1jeHczclg4TjRVWnB5WkloQ0hNRURuTnRGNE01aFdMdEdBd3J4YTk5NHhnWHQycDQ0dkFEQzJ4Q21rTllGN2QKUHg3OFpVRWJ3ekMzVGxqTm5BeGZYczRGYlBZeURQRmJHNzNNUkFmWEJvRmVqbVRFSmk5RDVFWHF4dzFlbmlNNktwaTd2QUt3R2RqbApGWUh3aTdxTVJJdmVtNzRqOHNFY0NEVXoxeitVdzkvVVpWcEZFN2NNTHBHRGE4V2R2Y2RxanNsTlhZWjFzZUEvcU10a1JQbTlrQ0JpCk4wRzVvY3ZYNFF4ZGhrWG9wb0F1cCtSQ3R4ZDBXU3VmdFE1MG1mbG15azREdWl5UWdaVmxoMDhQUDVEQ3pvQXVNdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJemNzNUxhRExYejNJQ09wOVAranljck9wRjNONUxRRVdObklaVmZPc2p3bmlNcHlIWkFUejFob2hIY09VVWZDV1lWQnBzbkhMMkkwSgpxcHUyek1MWWVsakxLNERKZ1ZCV1FQRmlMK3Q5aGtpVEphK3hHYmlQNUFZSGFmbEtuRjJrWlM0TnFJc0kwaklYWkV6aEIybVpZVTZYCmtHNWNNa09kQWs4YnRNd3pVNWU4Y2FLYVJ0dDkyck1ieXF2KzhUQ282R2RFaVVkMjZjbkZXV1k5aCtxdHpGbm1aUS9XVjVtenZDMDMKWnhrN2ltd1NuR1Y4a2FUN2I4NHl2S3FxcXBXTHN3eXIydmtHWnhrV1NuazNhSmtPT0IvUkRWcW1sNWExR1JPRW9EU296RTJZWlc3QQpSM1pqbG5saWpDUUhaam50bmlTQldXWXBDQWZkQzdOTVkzVVhCdEhVWU5Gc0pjd3lCejBXbzl5WVpUcVkyVUw5b2hWRlVzbjJ4aXpECm9qS0ZHN1BNSmJEbURHT1dFd3ZoaW5TOU9nbU1IU3hkdURITFhCUlREeDJjWmF4a1dRTVNtR1VsZFV0OVk1WVpOeUdwSXpETFhDS3AKVzRReHkyU2pWY3MrVDhROWgxWTZNTXRrbzAxdnhrZWJnd0oyWTVhcEptRjB6SmhsR29xaHlnemdjVWVobmkvTU1qS1d2di9HTEVNTwpvczVOZ1ZuR05ycGhOMmFaYU1VZVF6eFRuY3ZoOGhWc3B1VVl6QTFaSmsyTGxUVjd1OVlzdEEvS010YU5lbmx1eWpMankyUTlCbVVaClBxWWNqYUFzSTNhZ09OaE5XUmJYYUk1RFdhYjJUNStnS2N1MFVFcC9VNWFscE96elVKYkZ1Q0pNeEpSbDdxa3lxNHV5ekJCNXdMWVgKcGU3SnE1MmdMSE1oS1hqNFJWbVdmSExOUTFubTZVZlJLaW5MQ0dBSmYzRkJsbUgwTHdxeXpEQ1hUc3lRWlZvWUVMb2h5N0NLOVdmSQpNamZUdlRCa21jZE9iaXV4SWN0YzNZak5Fb3pMc295R00yVDVHRzdJOG1VMVpCay9vQ2hMd0pNWkxsSUMvNElzWTZrbzcyNXZsNzIwCkNzYnlNVnlJNVcwTXdqTFhjOHJWbTdDODM5Y1hZWm1wWnhJR2dyRE1rbmVxQm9Ld3pPUmh0TTdZZWtsYWwzMUJmZlhJSG5LMUpNSXkKYzREeFp4VFBTS251cDJHdVkzT1dMUURMM0lZcjNodXdMRUh5VElldzdDREhQSVJsUnFybUo4QXlzWjFQam5ZRnlYa2hJaDhDc015dgpMekw2VnplYmFzY2pBTXV3OUdKMWdFaW9yY3FkZWdHV0dSc2ljU0FBeTdSb0hoTmdtUVlKRFM3Q01tOC9NOWFCV0dhcW00SzFRQ3dqCkVLQkt6aHV4VExTVnV6T1FhZ3VWV1ZlM1FCT1dNZGFwdmRsTldLYXVJMGZ6Qkk0Q2NIMlVYVGRobVRHVGt2SWJzUXdybWVBYnNVd0wKSDFJd2xtbWhRUEZtTFBONFZPVUVZNW1SRTVWWHI3aE1GL2E4R010MGFMTjdTVGc0WnU3T2hpd3prZEJHOUdhSW9XZGJBN0xNR1c3MQplaURMdkdmc0xYOVRsbUhWaXhhVVpWaWtsQXJLTXJlaEJPcW1MTlBLUnhXVVpSSDJSaitVWmNvSTFjdmpLbm1qTkpMMTFFRlpobktICnc4cW1MRE03UTRmMnBpd3phczJLKzZBc3M0Q1hDc1NnSjhPZFlJdXpGMldaSzZkMEdWZW9NUUxLdVEwM1l2a1lUYUpDYnh6eGNneFkKL3VMVmY5ZUZBMi8zMHc1R0RXdUd3cHVidm0yOE1wNXdtWHJFb2l0M2R4dDd3Wlc3bWF1YnJkd2RNTjVvNVdsVXc0dXNQQjBaM0lCawoxNmtmc3ZLTWQrNEdLMDlHNHU2OXhNVGRWT1hwOHBJWFZCbEZZMVErbWFuTU42VGxRQ3BETmNKSTlVMVVEdER0QmlwRHU4VWhMVURGCjJmV3ZOMDhadG1uR3Nwb3VkUEYzQXFiTVBOSXFiNVp5ZHVYTVppbkR3SFphZ1ZLbXB0NGg4UTFESTUwYXF4aWhsTkVSWTZ4MG5lQ0sKdGU4RlVrYmhBc0d3d1ZFT1BOTEdLSmRvOUh4VGxDR2NZb2c0SU1yVUI5ZDVHTXJBSjYwWFFMbTBjQ0xOVHk3UmxEZnd5VXd3T1FHNgo2Y2xJUXlzN1pYZ3lLZ0thR2NzTTZ4WFRPbTUwTW15azhRVTV1WVRRTDhESnlFa2htdkxpSnFNVUp2cm1jbnBGcWtFWlI3OUJLRG9SCklmdUNKdGRnT1FZem1WRzlOUTR5R1hvUFpvbHZZaklTT1BTNkE1Z01DVXEzSTA5SlViZDI3b1ZMN2srUUVFMUx4bTZNakFjc0dRZG0KYU81bUpUZEwxallxdVVYUHpTQWxOODlTTDFJeVd0eEZZb0drWkdoWW1Pb3pKeG41NTZGLzM3TXBWMW1QdmlHc2ZvZEpUTUZJUmxmMQpyckQ0cnBqQXNpK0hiQXNmeXpBRmEvT1JzUmY3b2R4NFpBUmNsRUUwSFJtT0FSbnNBVWVHdms0bExSY2JHZGZhWFF0QlNDb0ZLazBCCmRRYXFJRDFnZ1BrR0k2dGlySDdiWEdScUJwem1ZZWF6QzF6eGdpTDNhQWtTVE9SZC9oNUk1RzRveG91SXpBWXFQSmFCeUtkWTJUemsKNGdMWUZ3NjVCaDR5YU1nZzlETFZHRERrVmc3b05WaklCSzF3eGFLSy9CWk56NEtFM0VLdGVvT1FZU3pFR1p1RFRQWUsxeS9HSU9PMwoySmJpeGlCWEYyTnNDaks4TkhXR2RDS1N1ZXVscGRkbUlDT0x3Ynh3SUpCQnRlRjNGZ1RrRW0zWGJ3QnkyYzM3ekQ5R2hZWkltc1lmCmsyWm1odkdtSDI4WVVjQ1B5NGlwejZrNUdBaHF2ZEhIZk8wc0RlTzhBclljNWRzQlB0Njg3NXQ3akpveTFSdTZLS2RrVDB1aUhtY2sKcEl4c3Zwb0xPVTRWekdQa1padTNVaSsvTGhibkRUek9YYXIrelR1R2dSQjk0WTV6Tk1hOGFjY2YwenlyQ3cvc3VKb01HYXpqeGdGVgpOWDRiZGN6V0NtSEVYSWo1Z1VXdVFUckdPNTJOSzk2ZzQ0Wkt0NmVlc2tJTW00T2ZrREhIaUM0OTVpTnZ5dkZpTWpSOTI1RGo2azdlCm0zRThWQUw2Umh4L1RKakxnamNoanBPbjVTQWNXMmY2NGh0UExxTnN4TFFsR1o0b3lNeVNUWUo5bmJTTGRURmdJbWxKVVUyNDhmUkMKTHVER0VTZC9vNDJsK3pwazR4R3RDZ3cyenRIaTlzVTE3cXF5T0ZoakN4TTMxWmhKQUpVcEhxZ3hreDVSbFlqRnI2R2ptMmlNdHlJWgo5TENCeGlnSlcrWTZrR2VNOTlrTEVYMGxIUHUwcHRrMDQyS3ZLV0RHT1h5QVlCbXpSdDBqYnFDTVVlL1dWVzFKVHdtTEdyNlNtMk9NCmdqT2psQytNc1NYZFFURnVEQktrQXpIbXFvcGxxamZFV0FxU1VRN0VHQkhVajNWYVB4Ump5am1mc0lUc2lWclIySTQxQkxEVTZuSXgKUHJpdi92ZjM5TzR4K281WVNKdGlYS2NiVGdiRU9GaGxtMkhjY2tocEw0UXhBZ2pGMUVsNjFjQmRVTTBUQUdNU09Lb05JWlVIOGtKTgpndXRtWUFpcUd2VGlscDNKdTlqRkxiUUZSaGNqM1VxOVo1Q0xrYU9VQnZ3Q0Y3ZG1mSTlqNTFDTDBzTXhrUmo5aHlPeEY5amltU0s1CkxCc1JzWFVjYVBGS0NpQzhtTVV3c21vaWtNVXIrbmNFc1JnZ1YyK3dYZlNWUEtjR3JoakZXQXJlZVN2OEE5TnhONng0VHJkRURsYngKcHZNR2doaG9DcnFYTjZsNFBQWm93Z2loTUhOeHdTbmVoaHRUSE1aTktSNmV3VGQ5R0NKZXJuNXZTREhFdHdyazJEaVQ0YVJDRko4LwpMMEp4R0RlZ21IRGxWUStmZUFSVzVNWVRRNHdzTXBEcHhLTTVZeDEwWWhpbWVickhLNDFlMzhFbUhxRk9DaER4YU01aDNtUmljS2NDCmFZelhld2IyUDdqRStHdzJlamV3eExQWm1RNHNNUTNsd2hJemZwM2VVT0laSkNjemlhZmJnUVdTT0ZxSDMwQmljQmlWblRhUEdKcE0KSmhxTkk0YjZrdmZ3cGhGdllGYkFpSWxjWkRyTUxPTHBEL1dGSWthcFVqSWhORXJuMU1RMFNNUXdaRWZQTjRpWVJzeEV3U0VHMDRrSwpFbU9JVjdFRGVGT0kxOTBXRVI0TFVjOGpIUWd4Uys3eUcwRU1QQmREWEVFZ1J2cGVsUm9HRUVlejlSZC9lQVpITmZERHk4dXFUUjltCmxTQnh4QWMrYk5iMFJnL2poRlkvNE9GVkpObDljWWZ4dWJGWUxyRERLMHBoZ2pwOEhXWXpoMmNrWkFNNVBKMmEybnpoR0FaZXdHR28KWFVVME5tOFk1TEErTG83d3FCNUxiOXh3RC9adkdKRzFacXc3WU1QVW5NLzZaZzBqZ2ZTNDZUQkNIZmc3R1VnOEpjQncyZlFGR2taaQpLa3FuUlVOOGxIVFltR0drdUpwNzFXMHRUM2VnZTBPR2V4U1dCV040RzI3RThER2FNTndOTjlwOFd5eHBrMm0yR3pBTUtEN3h1VjZRCm9LQXAwSXYwVktxTDhsNXdZWkNqVk5SdXRqQldQQUpXR2kyTXRWQk9iN0F3VmxPcDlNTVZ4cG9yOE1QOHlxckZCQytxY0xNb1kwT0YKZ1JscTdTQ0ZSOUN0RDFFWWdpWWlKUU1vekxXWlM5dFkxa3h5YVpsdm5EQzlzZFFPVFZncjJYNWd3bHpyanZ4bUNXTlZ2SXdtNXEyRwpRUVg5UmdsWEt6TmZKR0VBcE9LOCtYMUVIbXh6aEQ4N09qOStSeWZxLzM4WTRTOTQ0RDl5NVBydDcvMmozLy8xZldBYzZBOS94Zi81CnMvL3JMMy9SRC96MGg1Ly85SC81NWYvVnNkdno3ZS85czEvKzdDOS9ZNi8vNFM5Ky9kTi8rc3RmL2Z6TDcvLzYydjZQL2NZLy9hdGYKL3ArLytPVnYvdlNmL2VGdi9yM3B4MUczOE1kKzRILzdpNDlUK3A5KytZdC84Mi8vK28veWttUFRQL3k3UC8yNFFmL2pYLzNoOS8vUgpiWC82NVYvLzlYL3l4cmpJajd2eUY3LzgrLytNYS96eEQzKzVyeEZWM1IvRDR0OTZqZi83WC96NVgvL2IzM3lXLy9DSC8rYnYvNlB5CnAvL3c5My91L2ZCM3c5OS8ray8rOFB0Lyt2R1MvZlhIZS9hNzM4bjhEMzc1TngvWGRmM0RELy9rMytGZnB2N2xIL3pWZi9qMy96YU8KODkvK2sxLys1cHYvK0piK3V4K2ViMy8vNC8vKzVkLzg4QjkrZUlHaG4yLy84OGQvL044ZnByLzVWci85NDIvL3gvLzVmUHR6YlBuUApmdmpkQktPUS8rL1gvUWZxZ3JDUS93a1cvRUZ4N2g4emYrenkwMzJjbjM3NC9jZXgvOWNmNEZ3endmVkFmNWIxSDFoK1Fwby9vTndGCkRPaGp5ZmV4OHNKL2ZJekRuUmJHNXY3bG4rR1lrTkpYMUgweGlKVSt4aG1lSmNaM2xHb2ZNNHhWMkt1SkFNTEhEOVpQeHE1MmNELy8KOERZREZmSHhDKytqb3BqbFkreDVuNEdOT3NDUU9QNjlyWU5QNzZNZTQrc01qdms2MjNQVTY3cSszSU9mZi9qWFB3Q3N0T0JrZ2lySwpmQmpVUFFWVEsybmhINjcyUkluRXgvSVhtWEFVSUMwVWNYN2MxL1I4KzhmN0VjS1BUY1FuUDM0Rk9EdTAyd3dqWk1YUUlLcHIyY2RNCjlEWW1wVDk0YVpmNUVTWGlkZFNQNldqaEpYaWRRUmgvL3UwVCs4dVBLNDUvWVAwVEpybE1rRTRjdTl4bW53V1dySk5GRkwyblQwYnIKaC9ZWjIweVFWLy8yT21yRGVxR1ViNjh6Q09QUHYzMWlQdVAvK2dMLzhSZTR6cHBOU3B1TXBIeXN1NEd3UVRGQnhidjdNUTRRQnRpZgpnZGc2NFFFWUxEUTJBSE9ITFA2blcwdEJSV3J2VTRBb2dVdWkrMlF2NDMxaGwvbmNoT3VvNTNaZFozRGYydWpmOE41MmtxdjI2YWpICitEcURZNzdPOWh6MXVxNHY5K0R2T0RiOGpxY3lRTHo3ZEY5eDJ0QnJ2SDRmRjRnby9ldE1MK045VlpmNTNJSHJxT2RlWFdkdzMxZjgKQkZ6bjk3YkladVpQcit4bGZKM0JNVjluZTQ1NlhkZVhlL0JkWGxsMjlYcmE1L0VMZ3c0cTFsN2pWMlBZcXJ6SHI4dDRqMStYK1l4Zgo1NmpYK0hYTzREVis5U3hGOW50YmxuWitQdW94M21kd21jL1pucU5lMS9YMUh2eXNvUkp6Q0pRK24yNE81cENuZkRvSXBvdktMK1FlCjNJL3hOYmdmODdtTWM5VHJnczhadkc0T1pyeUJRT0pyVy9MKzE2ZWpIdVByOFJ6ejlTajNVZStIL3VVZStPWmN6KzJlcTY5bmZPYnEKOHpaY2MvVmx2T2ZxeTN6bTZuUFVhNjQrWi9DYXE4OHp2cmZkYjhOOTFHTzh6K0F5bjdPOTNzZHpYVi92d1pjMzUzVnpybWQ4T1RMNwpiYmdkbVdOOE9UTEhmQzdqSFBXNjRITUdyNXR6bnZHOTdYNGI3cU1lNCt2eEhQUDFLTS83ZUQzMEwvZmc1ODhlU0dNZmkvYlpBd256Cnk2dG9UTEYvY2tzdzIwaVA4VFpia1BjK0trdVgxbnYrRCtNbkQrVGVkbnNWOTFHUDhYVUd4M3lkN1RucWRWMWY3c0hmZlpvOFUrL3IKdmg1SDRmcjk0MUpjWjNvWjc2dTZ6T2NPWEVjOTkrbzZnL3UrSGtmaDNuYTdGUGRSai9GMUJzZDhuZTA1Nm5WZFgrN0JkNWtteit6Nwp1clhIVjdoTzRYZ1YxOGxleHZ2Q0x2TzVDZGRSeisyNnp1Qyt0Y2RYdUxmZFhzVjkxR044bmNFeFgyZDdqbnBkMTVkNzhIZC9aYzluCmdFOW5sQzlEUVpoZm4zZEhxWW85Z21Qc2dvRjhHZ3B3cVBxTTkxREFaaGFwdmovRU1INGFDdTV0OStkOUgvVVlYdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJWjNETTE5bWVvMTdYOWVVZWZPZkZ5T3ZXbnUvMk9vWHpoVjhuZXhudkM3dk01eVpjUnoyMzZ6cUQrOWFlNy9iZWRuL2g5MUdQOFhVRwp4M3lkN1RucWRWMWY3c0gzWEl5ODd1djVhSy9mUDUvM2RhYVg4YjZxeTN6dXdIWFVjNit1TTdqdjYvbG83MjMzNTMwZjlSaGZaM0RNCjE5bWVvMTdYOWVVZWVHb0hXUWdKbkU5K3p4QSsvNVB6WklYNzI4MDZ4cGRMZHN6SFF6bEh2WHlaY3dZdnYrZnJpVGtjTXI2NDl6eHMKK2JUMjRRbG8yMnMxY1l5dmxjY3hIMGY4SFBWeTJjY1h6LzUxT2pqRmY2NVE2ei84L1orL0FxMy9LZkhYOG5lTHYvcU9mUXJDbmxncgozckEvWW94OWYvcHl0Qk9LL1RzSEMvSHVkcTNlcVh3cForN0lqUFdGMmZNQmlKVmVaNmYyeVlnMWVXMW43ckFaNi9kUnY3MlAycFQrCmY1K0JqWHZ1V0dOODJuWkk2ZjArNmpHK3p1Q1lyN005UjcydTY4czkrRzV6Qi83OTA2MmxOMUUrblFMOURyN1kxOGxleHZ2Q0x2TzUKQ2RkUnorMjZ6dUMrdGMwNjIvZTJVMEsxOTFHUDhYVUd4M3lkN1RucWRWMWY3c0YzbVR0WXRmSHB2dkswODZkWGxoZFlQcjJ5bC9HKwpxc3Q4N3NCMTFIT3Zyak80N3l0K292YithZHRwS2NQcnFNZjRPb05qdnM3MkhQVzZyaS8zNExzRnNsQVo1ZEd6ckJPT1lJdkFiZjZkClJ0dzhhZ3ptWlh3eW1oYTh3eEUyUHlvWWVSMlZnM2VhMzE1bkVNWWRqb0JvOGIxdGtScjJmZFJqdk0vZ01wK3pQVWU5cnV2clBiakMKRVUyZTczMXpPSmUyVHdmaHROblQrK2N1NDMxcWwvbGN4am5xZGNIbkRGNDNCelAvbk92VHRrVWxZZStqSHVQcjhSeno5U2ozVWUrSAovdVVlZkljVjkzNDVJbHQ1V1R6aHYxOUN1d2J2aDJYanA5ZmwzbmEvQXZkUmp6RjlmbGZIU1ZEdFJ4U25lRm5Pd2E1WDRmenNkY3Z1ClU3eHU3N1h0ZmhEM1VZOHhmWDVqZklyZjhjT1BYL3YwNFlmNWRZTjREYXQrTXZwNlA5M011RGV2bzM2S1Erb012c1FoOVNRL3hTSDEKME82akh1TjlCcGY1bk8wMW5KenIrbm9Qdm56NHI1dHpmYUxuSU9mUlhEOTNHZTlUdTh6bk1zNVJQOFVoZFFaZjRwQjZoejdGSWV2bgptM01aWDQvbm1LOUhlWWFUNjZGL3VRZmZZU0pQMGkxK3VxL1YzVHZmOTlYZDY5NzM5UmhmOS9XWXp4MDRSLzJVcU5ZWmZFbFV2MC9zClNsU1B2bGNYTVFYZzJDbmZacDlGbiszVEZIQ01yeW5nbU05Z2ZZNTZEZXZuREY1VHdOY1QrejdEd3ZhTXcrWDd0RG9JODh2anB5Zm8KNU1BeDJoUDh0RHFRMzdxRHpENnFQZHozR2RqNGFYVndiN3M5L3Z1b3gvZzZnMk8renZZYzlicXVML2ZnK3dTWjVSYS83dXR4NHEvZgpQKzcrZGFhWDhiNnF5M3p1d0hYVWM2K3VNN2p2NjNIaTcyMjN1MzhmOVJoZlozRE0xOW1lbzE3WDllVWVmSzhnc3ozajE2MDlmdngxCkNzZmp2MDcyTXQ0WGRwblBUYmlPZW03WGRRYjNyVDErL0wzdDl2anZveDdqNnd5TytUcmJjOVRydXI3Y2crOFRaTzRSaFpzajljOUQKUVpoZm56ZGpZUG5UVU1CNFdadWZod0ljQ28yRTNrZEZGTzc5R2NyMGFSZzQyKzBQK3o3ZU1iNSsrNWl2OHp6SHZLN295OVYvNXhEQgo2NmFlTC9ZNmhmTnRYeWQ3R2U4THU4em5KbHhIalp0MS9mNjVxZWRyUGR2dHIvbyszakcrZnZ1WXIvTTh4N3l1Nk12VmY4L2d3T3VPCm5nLzErdjN6U1Y5bmVobnZxN3JNNXc1Y1I0MDdkZjMrdWFQbkl6M2I3WS81UHQ0eHZuNzdtSy96UE1lOHJ1akwxZi84bngvOS9PZS8KLy8yZi9mckxuMzhicjhqbmYwYnNzK1lGYVMyazV2Z1BNR2wraFJXNE45U3pIL05Qbjh6dFk5SFRxOHpuR0w5dDNZZjRQYy90ZXdoVApYK2N5MUlKN256bmNRSnJseThrNGJIdjZyTGExNTJOaFFXTjZxRytYbWJXR05MTkYrK2NyOTYvOUJEK3pFdVVHTGdCNmxINmNlcDgrCkRkUzNmTHpxTkpQQUxDUDlRUDBrcWdwa0pMSkJQemhMbk1kZ1AwQnQybVAzanlGcCtkSlFSaVBqeHdyVXY4OWF2OWo5K2ZnUS9mc2YKYjVvdmVlMkRLdEl2bzI4TldSQnhGOWpTeDNjc04yL0ptbTM5UHFveGZMOHdubXJMUkxxbHpPUWk2cmJnZWZxazBKRlZScFRmK2FxZQpNSDQ0OXVmeTBSalo1Lzh4SHNlbWJYai9jd00rUFlBZjlXVHl3dzVpdEdmMGF2N1ZWcmFTcHJVcGxDL3JTUDQ1ZmVNeXJoWGI1dDYvCi9kWlI0OWZtbjlUMCtCK2VqNFdCZjI3dTE3R3JlNnFOV1FjQjdHcHVtMTREZzBGL2pQM0hpQzJmN0UzWnhVZkhaSmp4dDM0L1Rnek4KWVBTRTBXYWtGcDhZY0p5NnVLWWlVaHRSKzJmamFtRjhZc1BGK3h1YkxwOXY3M3QzRkJqS0JvVDJiLzcrZit6NXNORUt6ZXhuRUErSQp3RlZ2WGVOWlZML1BiTGd3LzdZSDlBQTNuUDJkZmJ4YU1kS2gyVW4zUzQxMXFXMTdhR0R2WEJqQjBXditKTmd5N01mWVArVnNNMG9DCjQ2RHhwZGFoczMzWURPTExkNzZFRHRQdkkxTm8yOXpuMVBmdTcvUDNoU1hVdHlYZmRiYUEvelhNVCt1WCtTZWJpYXlSK1dNMStzM0cKN2tmTTFoTzJvUkJkeGhUajQ5ZGY4MEFJTGdES1RmVVBZTjM5YW5NQ25rU0h3WXRnWTA3K0tqaDgyUWpJc0o3YzhnY0FhNHJ4TFkweAp2T25UWTNRaGM4REc5SGgwWUdvNURoQVBzK3RSeDdZamJnNGV4bTlld1hsMXh0TThtTEtUWGJ3NnJGV1Z1UTNQZXl6STJXYmdER3ljCmNjVWx4dU12eDQxSE9sV0FyWnUya3VlMlpCcTB6TlgzY3FvUzA4K3B0REEyRHpDRFk4RW40OHc5NzcxekdOdGEzMzd6NTMxZTZBUFMKdTZiMDUxRk14ZGJxTDRQUm1EQjZXbGdqNVczci9nUldxejR2ZHV2TVBmYlhKNlFXbmkxKzY5ci8rdms0cmUxcGdEQ2FQQVV2QUJwawpiQ3ZHRVJobjgzTm9WWGVMeHNldkNFSDhYNHhsZVdiODhsdCsvUWtnS2I1bkJYbWlYOFA4ekI3bXdXdWpjYVRmTU9ZUnhuai9VWFpaCnVzZlpqS1lETm83d3VQQ3AvT1lKK082d0VWb002dXlTK0t2Tk9SZWZCRWtZTXNhOGp6ZXNaaHViUHhaOGJUNHhTYTFHekVJbE52MVkKVmVUM3JQTDFCTTUzeFQ0akdoTFgzSjhWdTk3RWlOajhxYkFOaDQwbHZwK1AxN1Nlc1ROR1ZLNUlQWHBxZW53SVMyMnhxZWJjTDc5Lwo3dGo3Z24vOURXdjlqVnZ6TVhyOXE3amxvNGNaczhwUFlVWnJKcG5yRTNlSHpXTmtMSG4ra1Z1dXQyeXFiU2x2SlNlUlg4T2N3azFnCnRiMk1wTHZLT0hRZldQd2JiZ1lCS2ovK0VPWmNZdHVSWXR2Wi9HTk43OExYRTRneks1TEllSnpQZnBqczlWNUx2RkRObjJFQmd6S0YKZVNUOVhoRml6a2FOUlYrUDZ4OUV4ZmFZNjlyNlY1dkRKMmppSmRyWTloQ3A3K1hEMXNyK3RSYnpHOHg1blRQcnNTMGJHK2drMGd4agppZy9XbzZSL0MyT2dqeHUvVld1TGcyclErWHIrY1dHZ2J6emorckZmd3h4dUdLdWlaUHVZWDFaTTVuT0ZjV3lmc1V3UFhEQzNlQklzCkU3Y3hMbUZsVGE2d1BUR1FrTXo3NDIrZmxrZStpYTQyc1lDaDkvQ3J6ZWxKSHRXSEozNFlTN0ZuUmVLSmpSNDB3TGZ0OXF5bWNVSTYKYnRJUzRzTlllNDhmKzFqU2Yvdk5NN2g5dnZnNStORXh3SEM5ZHp3NUcvTzR2TFBmSGg5c0JZN0wxaGJ6ZTdncDJIL0ZvUE5IUEw0eAp0eU9adHNjNFJoaWY0NGUrVHYrOCtuUXFOUkd1dUs1b2R5TnppMitOMkM5TjhaT1VjZG02YjRHUDhKdUg5ZStoajBiekJYOThnZlpHCjBPOWlMMGNuOENRL2hmbXA0M29ZUHNLb05ZeHkrTDRjTmk0dmlZYjErZkt5ZUFOeUV6U0N3N2E5WjFJeFpVdzlKaEIrS3ZFQ2svUW0KTXhhQk5xNjhEMURpQVBtSjUwNmN3WSsvZlY3bkN5QSswUzl3S2VjTHVONXJyV0cvdnV6LzZtL2Y5blhjZi9IeGcvLzlmNkFmZ2llNAovQVRwcVB4cU0yTWtOc3Y1WEJoK2l1OStEQk5zNFJhL09CNnZ1OUVldWxhL2NzUjdhZE0wVXR5a3NjSklKaFYvS2NXeWNMSi9RYnlECm5uUUFYdW5KSHdJYlBNaEl1SitNTlc3eVhBcXY2SzE0dFBZaG1pVU93RmZGUm9TRS9aanJPWVB6SlgxNGFIRW5XdzczWWE0bkJxUDgKSkwrcDlrdDgxejErRHF2SlpRelBGWlRPMzN3NnNUdFYxL3FTUGFiU3VIek1qdzh0NzkvM2htbFB4YS9CN0ZrZU40ZldhdlFIZ0JtUwpMVUlzUThRLzdUKzBMS3M3cm1WanhNU2VHbGZQNXVNeWdtd1J1N01wbDNZSE52QW5tL3Z4bjNLT084QndudzVCTWY0bkk1c094WEZqCm1UTGtUc3Y0NGR2NldwTlgzOU5YbzZPMnZUdkRVSDRBK3ZweFVpc21BNzVNY2N6WVhjVE4rUGxZVVFONEdWZkZodHArVzNNY2dDdEMKais5eFRoOXJtSFZ0R0VjbHprbmZ3SGoyK2RkNFYrWlNGQVN0SWVIdzdjRkwrL2Y3dFh6OHJOSERjUHBPalRTbmphM0h3MmE4VUFkbwplOGdmNnM0dTQxbysxK0xRR1VoSkk4V1lXTUpabWVnc0VZZGx1RURHUEZNOGdPR0p0d3FPcnhONHdpdEF4OXhTWXJUSGZLd2JXLytrCjFVOURMWmxLeGMrZ3lBa0NRNzV1WDMrVnVDOVZuZjg4TmloSUFVNVRibkd1Y0VYOFF5M09kWnpIRFZ6TW5INWVYZE14anByaWpXOTEKeGxrOS9VbVhNUTdBVm1lK3J1bTVsQTJSNHoyeUl6ZEpieDZmWHMxOFhRR2ZzUTZicnhlK1o0M0UwKzNpUER3cUxEdXprTXIrcFlqcgpUaEQvWW5BaWNROUdFRnppVko4d3hWZUlTZDhmNFRDNU4zd3l4NFRHQ2Z1TlAzRlllcHlBaGRsUDNyRHVlU0E4eXc5ckhmc3I4ZzM0Clk4ZTBaem5VV0dIdlgrTXI2SzBYYjNzQzdsdzRlTXZWWTJJdXBlOERuQmhjckRySFdSTVp6Z3NqSnJWOUExTHlYUjJhQVgydTAyTWUKZXNpbEo4SVZjdnJIRUxIVkg1eEdZclNUV1BHdytabnBxSWlzeDB6UWNuRjhpQTN0NG8wamtSTkd0SnlJRXl0ZVlZeXFySnVudmVvNQorc05jZWpoTzRTdU84aWZka2VLNWwrTURYWGhqd3h4ZjEyQy90ZmhtS0xxaGtSQXgvNWFtVGRLQlp6eFpMRWgxZ0x5RDgwQnZhdHdICjRLbUhCeDNCWDlBQjkvRFFQbFk1K3dEaE8yQ0k3RzI3amdNZ2MyMDk4dHhtemlQMjBWSTlqdVp2KzUrRXV2ckYwZlNOUTZTMXg0N1MKdy9qRTlORkxPQkFmWmc3bEh2ODFKckt0eTlxdjR6ckdKKzc1TTN3QXRFR2Y4ZWFSOHZhVHpXY0VqVFV2eElNbEZnUGtVOGxJRXBzbgpDM1lvMEFIR2RpSStwb2djQjlnZmVzU1MwTW5RVXdpQXFSRkx3Z0hLZnFFMXJtUFRGZ3VYK002Nm1VSWVKMHJlKzNPNXBQMzdpbTE1CjZSNFVGRHpyVTExdy9JQ3pYeHkwTTZ3eFVueDhXbjd1NkNMZFl1RkNud3JHRGE5U0FGQm4yMVZsWm1PTUlLd3pDLzl3UFRNTzhPekoKVllNcWRpOWxSNEdxWGE3dUZKWEgyaWNlR0ZDdjhTTEVZTjNWZTZxRzEremR0eDlaKzdQMlVjTzUwT3BSTmhMci9FdDZCL0E3MitGYwpaZXpkQ1dDTGp6L3ZreW85bmxlTXk5MWtQRCtESEtmRmhoYTZWNGlBN3VQbUZ0UEZxaHdYZTFPSGFXN0xrVUxHbUxCdnB3Zm0wajIzCnNsdk5UemFIM3oyMVhJQVJoT1BoUmNLSHQ5bHRqRWtmdzBmeE5BSnozdDlvejluYlB2dkQ1UkFJSXpwaHJIQXh0VkNWdWZad01MencKak5LaTk1c0JldWJhazN0NHpwMkl1bmkyOWpyWStpL2M2VjZWaWUxWjVWa2U4Q00yakFPTVdJM0dSQTR1K2Q1MkpFM1BhTnkraC91NQo5MDg3YkFqZlh1NEZhKzduL2tBMW52VUh6YzlqS0NnUk1rRnZ6QkYrVjNPMjhjTTQrZ2x0K0t4Y1Z1YlpjZFo5Z0RialN5Z2Erc2oyCm0vdWo4YkJ4d216K05tSi9FcmM5dHpXUHlSQkE5cGdnbVdpRkVWVGZ4eTlNVEdQTmlRRVA2dUc0d0h4bVFyeTBQOWxjOGhPclZTeW0Kdy96c1lFN3ZXbTAxbjd3TzhXZ04yWEE2TVVhc0h1Tko2MmoyR1c2cElyMTlSMzA4cFA1T1lkcDZ1NmtSR1g5bThvWHBVb3VwOFR3aAp1K21rd2JjZUgwek16czNOVlR6NE55OVZBSUhmdHpEbVp4anovc0sxMUFTMTd3blhONVY5QjgrSE1HUFhlV0ljTTg3ejJkUHlUSEZHCllHK2YyNmxmZVhaQXg3RHREeU1BaWc1cFd2TEJlUXN3YzZUQlpQYmNTU1IrZklQaDhLQzliTjNSdlNlOGVZTEY0dz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJdUI5UElRSmJRK2hoMzM0Tnh1RHg1NUNkSkh0WDdEVVdRL0ZVYnNUbXNTTlFqZ3JVZHNVUGxpTjUwU1hBeHNqT1YxTmcrV001NnliVwphZ1MwN3pUL3J2dWlZbndIZUQ5dkI5ZnBPR3hiOTFRdzlhSVEwYi9kNjVUMi9vOUZMZmh0amZuc2JyeUhNRHdnR2JzanNYWU45VmkyCmN6alZhTnViOXIwcFdtVDVvRSs0T1FsQnB4OWoveDNWSVJCWXhxZEZzREdWRmNZMFkrVkdUeTBDY3ZQWmQzcHB2QVdyY2p2TlZCajgKN285SDlNRDhDbGVQcTBjWlc4cWZyd3NBOXUwNjdWaEpQUU91b3hhL1U3eDA3a1dHbzEwSTltK1p3RmxuSW80YVg4WU95ajlxa1BpYQpjcGlXeU8vWXFzeHhZZWQrbDdVWGxIWnliSXdCM3owVFphMGVnYVlXdDc5amp1WjhSVHdWR2J0ajJjQzlacDhBRUxKN2Vvc29QUkcrCjRmNVovRU1lYkd6WVl1SEVCdUF4T2JHM3ZIZmZBWXltbTFxc0x2TFB4MHFpM0Q3U2JCcEdQb3lNWHR1ZlV2UUFMZE42eExDSUs5Y0IKMEY0Z1hoZjY4RExXczU1VHhoOHQ5cmJNNm1PSkdQdlhLOXdWVThXSE1hMklBRVdTb1h5ODdqdHNUKzlZQjhCWHRGZHpVdzU4S1hJVgpkQUpacnhBeVdjOStnMklZNFA1N1JWb2o1MFVKNXZGSGJhekhHMjFuOTdiMnp6OG52M2FrV21VcXFTaVNmOGpnMm9yRHhzM3VFRDJzCmZkd1B6Mk03RFR2RmZQei94eTR0K3JLUGU2RWZhZXUrWXNBY3JVU0t1NjBZYjJPaHo3NkFFUkk1TDFaV2FrWFdPRmY0WXR2cDhPQlMKM0wzTXYxL1BBYzRhYWorWExOMmMzeXl0Zk5GUDU0bnh1WTRucmlEZEFTK0hrR0RjOFI5R0VuVFU0Mk1PYUpQaUFCeldYODRZT3Y3RQp1cWdVWi80VGN2ZzdZcHpxM2o4UyttN3I0VzFQeWp2dVMySkhLTnYydC9WZ3RvbmZ6d3BWb012ZEUyL1JJMmVTc3ExSXp1UWMzbWhlClhDTyt2b3g4Ui9LTDE3QXc3dFg4Y1lQUW4zUkZSS0dYV00xL21NdStMWFhya3ZLU1BNN20wTVNGbnN5OU9XUnNPdzFFYlVVSTVVYUoKUVkvaHRKOXNQbTRPeTNYQ2ZBSkp1WjF0VnppRFQ1UFVBai9uaSt0YXkzakwwbXc4amxLZWV3SEJsbFo4T3pJKzRkQWZ6YWw1SHUweQpaZ3dRSi9aUDg3ak5YNDBmRC9wZmVOc1dHWUZsalJyYlVLVklFL1FTUnJiVDFaYW9Zb3ZmWWxkVVhTM2NJQmtqYnNvK05TTU9zRU9CClIvbVd4M1pBaG54akdQc1ZzaXJkZWtkMG00Nmg4NFFqY3Q5KzRjbFU1SHVlS1UrSm81WTlTN2tkZ013blpzWEE0MDgyaC9CaDdLZzgKRy9SVW41anl6dG1kOVh5dU1TV3dCWEI0S3pVcFVZNmZ5aUUxWkVCRFc0WUdjbHdyYkpqM29pSWxUUjh3bnNCaGt5NkFYWU4zc21WRgpoamkzVzhNY0F0R0szNDJiK1AreDk3WHRiZHpHb3VmemZSNzlCL2EyYnB3bXBCZFlBTHNiSjIwc3lYYWR5ckZyNWNVOWJhcERrU3ViCk1VV3FKT1hFK2VQMzQ3a3pBd3dBdmk5bFN5SnA5c1VpaDhBQU13QUdnNW5Cd01WNFNHVTl5QTVyeGlRb0gzV0Vvc2N4VVpIRjJpSlYKTHJaVDJjY2xuWkR6ODFCRlpqc241L0VWbVpTM2VwbzVDTVJuQWgzS2hBV2ZsRDZPSTdNTzlDTUh6aFJIcUJvWDZDTFJsTWhIZWVVOApCUkpQeDF3L1k3c2NQdDBvZUxwUUxua0g5R0plT1pNVUFuM2tBRVhGV2dUQ1Iwc0V3eDRBcFdMaklybkI2amJhMUZ0SWhYZnR5Y1JtClhROHM1TmhVSmJKSm9aaFlvNVVGdXBnVGZDYlFtemhTTHpkRWlCak03TE1rRmtpaGFCWm9NZ2JxbkoxcjVOZndrWDNldWNaR1BIcUUKbEtNTEtiV01CZEliaTJGcVdRU1pmZi9hclRwN0doUE9VZWZZYVBWSWtVVnVZM3AxeVllRmVzcG9OK05vMHl6M3prempnaE9OalZOMAprOVk2cU9oVnk4eUoxQ0xqdVlSbGplRTRlcmRoUmpHc3h2dVRoWWtGZFNwQ3ZHcnVLQXVCNUZTV3lSWE95dzFBZXFMWmtoQWp3QVhCCnM5bnVnOEk5VGVFa2o0Y1Y3T0tqc0d5dW4yamVyNVQwbldXL0c0WWhXaE9EMFA3NGpJOWY4ekZKdUhnZnl4bkZiZ1NCd29mRk9zY2sKNFpPZ0diTUx4S2gwd05SSkRtZm9aTHpCSFVablprYkE0ZFBzVEVKZzdqY2dIMWlySXc5VllzKysrTTZKYngvV3RXMGZYN3VRdkZ1aQo4ZExXVjk1UmpmY1NiQndOdm5YcHdob1FhQmdyekh3NXhWazhmZk5oTjVXK01jRGx4WnppMEdDWVVTS2FuWXlBM2x0eGE1OE45ZlNHCnJRL1F3ZGRlR0J5V1E2cFVBUE0raWo1ZTYyY1NvSDhIRjZxd1J6aDhwOTQ1YS9FeFNNb0U0c29heGt1dk5GcWdOOEJ6aUQvQ0ZKK3IKM1B1d0RxMzNnN0NqUzZUV05PdGtuWnNJcWUyTGxmWVo3MWY4T3E5VFNtMVJhZk5jV1ozT0JVMUxlc1dROTBXT0twWTJ1TkFpZFpHVgpJdlp6K2ttUFQwejZRemdmb1FWS2NGYUoyWDJLUlROdnN5eHNGQWdDdGRjdGZFQzZqRHdvaVJ0dllSVm0yL3ZNS2tjaXNZNWNOMTBFCno2SWtzck56L0NXKzVaSDdaWkM0VzBTRnRSdTZrZVoxUVBIZU9WOUFLUXpIYzhFMFk2VUw5NXAvY0ZtdlNyRjVKSEZQUjduZFJuSnMKS3MxZVMxWWMyK29Wamx6N0tGaS9nMUVRVWQyRnJ1WFI1bUdyNTlZNzRCYUg1S0tzeDZIV2FsV2JKSThGdHpZQkFia2luRERVcmlnSgpDamQ5N0RZeDc3WkVjQUNoZmRuZHhNcDlzQ3Z1OTRhdlc4Z3NrTW9HYWdRTDlyOUk3YTltQkpkZnFxeHFnbGk5QjEvNWUwWDRzQXlqCjlYSDRXYlFoc2M2WlpKR3pqTjdIc1FqUXBzUENyQWozdzlDMHg5SFFIUEdReE1ZVjRaejFpRUJ5VUIvczNLbnZtSDErMHdzZDExdk4KeDAwaG1kM1NCR1U2Qy9YcHdVWGJBY054TzhSRzZUYWF0SmczdUc3R1NDOXlaS3FpS1ZNNEJCUXp5SmNjS0FHY2JjNmY0bkFxdTdPMAo4YzRLQkdxdmlBamg1N2V6c2hucmplRUpydDB4MEZnaDY0QStSTm80cDN0UzJIZDRDYWo4aFNrRU8rK1VzU1kzQjVRY2o4MHEvYXpiCkYyN2xLaVpCUzA5WFhyRDZIMkV0Y3U0QjN3L0RrcWxoWU02bkxSUW9obnRBandOWklNY2FHL3NNa0FVYWQydzJWZ2d4QXZLbldMRE8KM1BnS3diWmhaNG16UlRsWXlkaGJVN1lnV3hxTjlSc2V1UHJrc1NRd1Nnekd5dTV5ekNpWm1nRE8rWGpKZDUwQVNJRzh5dCtUc0VDVApGVzQ1cE9IeUVOcFU4b3g1YXhnQmgwWVpLK0FkMXN6ZnMvRDNFbEhZRytZWTM2MmhmWWxQMkh4RXArZkFEZk9yQ0pzVis4S01EY2x3Cm14VnJuc3JaTUxGNjdxZDk2alYxTkhaeCsvVE1tZHMvL1UwSXIzU2hHNGVCdEJueFhpdWRwZzdkY3Q1QWZBZzdaeDAxMVlwM2NPbWMKMGlZNmc1QmlrUHZCTFZnem9CeWxLcjZMc2VBK2xPU3JqdVF2dFVBT2hhRFhibGx0eTNtdzBpd29YWEFBWVFLODBtWVM3aE41c3B6YQphdGdZa3JENFJLZ3pXMmovbG8xVmtpVVB0MDBrTTZaUUc3c1pXS0RSR2ZkS2E1NFlicGJZTGpnN01LcjV6a0dFWGNnWnFFSVBOQjhPCjUxK1hZeFhSK0VBeVBGTW8xc2hGNms5TGlXZGhjT2NKcDdNcmUwdWdZSUtENHpHNmhrZE9UT2F0YyttSTNGOVE5QmM3SFRnVGZuNHIKUHB3RmtlWk1PaUlmVy9nY3VJZmdqT1ZrbGl0dWl3M2Z4bDdENUpiNGdpNnBraTFHSUpnSlh1L0w3ZHV3YnJkd0N6eW5KeE1kVWhOMQp3Ri9zby90S1J3NmNKaXdvS1pDVzBYcUpsdVRjRm5zRWpGV2dHRy9xVDR3eTk1ZmtWRmhoeXQ5OVU4YmZ2UEZlZUJHMGllaHlZdTZ0CmxzWjdzTEZiWHFnSDh3MGlVTXhGVnNnQWFEU1BMYXVwTSs3Wk9iQ0xJRGIybnR0NFdXTXRQUmFZdXhCb1krMmNiRThRZmd2aElEV1IKMitnY08rT1Vab09FczZXNjYxNWNuM0wvaDBWcWdieFRPS3NWQS8ya1Q5bXZobWFLY0QrVGRlcWk0YStHRmU3YUJGbytKTjhPTFRnQwpHODBrTEdRVGR6aEdJNHZNK2FxS2xteGtrZjQybnZSSENnQUxMN3pEdVE3QlJlYVhqTC9qelRKU0ZuYXJSSmdMUXpPUmpZVEFPZ2JQCkxEdXpaRUF3VnBhN2xlWGFuNW10OUpUQ3FpUmpITVRIRlhsSGtKcERWUW1hOHc2ZVNHOXRDOWZpNmJLZ0JXWUpLMTFTMm10ZUFHUjMKWVh6UlVlSWpodHdhNytzU1BibWVYenBueTZCSWVhTVEzak9HQnNQQzMrZDFZWWI0ckxTL3V3NHJLbk5BY3R3NEVyd0RJWTF1YUJYdQpEQXZBUEdmMWpQWTNMcGt3MEhzWHNhenhWNTU0enFUK1pJWjNZKzNxd2pjaEN6WWVKWkVabEk0amRzbzd1NTd5c1VQYTV6REFoOXo1CmJsYnVUNVpvbk0zODN1RUhCaDl5bHJ3dnBnVmpEVWZMeE4zNGxtamY4SHNFcmhoR1MrWWVaVy9lZXdlSzltdE9Xd1d4VG1icklLUlQKTGRqdWJkd2xMTHlSbndack9vVkcyT1lTdzZaNzZXK0lzZjBOamZ4K0VFTkFnRVM3VzhSRU8yUFE3dWN2ZithR2ZTSjhZMWpiZ0NQMgpLR2gvWTVFamdoQm9XSFJ6akw3RVFBYkRVd05uTHlNb25LVnFyQWVGUDVOd3BBbTZhaFJQWkZXd2xvM2VIczFya1I0VnQ4QndTWTdOCnhua3NqaEsyYVdHNkJwMTZpWjV3MlZUd0ZVYStaVGMvM3dNN1lMUS9SOHFjNzVGcGVvaVR5MFdUMEZmV25IK0JacjUzZGlVOGpUT1YKTWxIc2V0QStRUWMveG03SHhYdUt3bG5lWlhCWVVKK0RET0tjQWVqYmN6R3FtQmRDYzFxSmNNL1NuVzNucHBvd3prS2tmV0FnT2gxegpuNGNnRVp4cmdyWEFlRlR3eFhxdGZWOVRMbHV3R2t3M2QyMUJ0dnk1WkFOY1h4dSsvbGs0YXhRaVZTb2VBd3MwN2s2UXRpZEdSaEN1ClZYTllUaHFPYWJyaHRBU3NML2dlTG1rc3ZyN3pxbWtNOEdGWE1Qa1ZDT2p1VXdDTVVrTW92aGp1UGNrcDAwOWI0SkVEODdrY0pZYkgKQ2dzZ1k2QU51MFd2dGVadVNSMDg1TnJuUzZBWUFVYkxKMVh0cjFjQ01OTktNVEJMUGRCMWxwUis3emYzYzlCcFA0alRlQWE0S1l3RgppMEt4ZU9mcGl1NTQ3Zk1jT0w1STlwQWJObFZqTUlGa2ZZVGN6Tjd0SCs0UDI3V0tSWFBKbmRlS2d4RVNrekhReHlSUjNBSFhWKzVHCklyK2RiSUZ1TDhVK0dXWnFHdWFLOUs0RjkrcTdBL29iek01RU8rdkN2d1ZuT1NlWFlUOGhCa240MVdhY1RvdWhIMTZJMHJwbEJPR0kKeHZHaStFQzE1T1dldW1nMURCTGg1VXAzcmpoMGhHOWphT3NyY3ZVRmI4VSt6aWIxT29xMmxsTkdRRWNIVzFaN0JHSFQ0bHRWc3k2SAp1N0x1YUlHN1F5NTlVQXp0ZHVOTEhpK2Q4eW1DWFVHcGlzNWNwTUZidk1ydlpYaGU1ZXFxOE9mRGxIRVdMbjdIYnZ4Y20wM3k3c0JqCmdXem8xdmFoYVF1a3kyQ09yTUo0QlBSeXRwT0RCUmVWL3BLL3RwNC9Lc2pYd3BYM3BXRUlWUkRaN2hvZ0FqUFd3S1h6cGFYYVBtZHUKRVlTSUZPMVZsMmdRdFhYbVdtQWlHQ3NsUkhWck1OU1hJZWNRWDhKREJCbXJqMlM4WUREYjhJTktoQmdNVDI0T2NNQVlNSmM0UnR0bgp0VDI1eWllb2NOWTFCRW8rekxMMmhWajVXT0FOSGRnK0wwUDdxcUhqQ3lkd1VPNE1oZUZxR2VzTU1tSHRGY0ZlOGFFSXB5TUgxczYxCnJuMHdiR3E4ZVJFWngwRjRmUCtCUm9NSEVTM1VmbTVrZkZjaGpTTS82R2FGQmRKdEtHWk02b0JCZmZSbkU0UTZodzJnVFZ3Z0lzYWcKZXNXQnc5am1aNUF3UEk4eTNqZlFzczl5RC9iRm5JRWVRZUhQN1FET0ZmY3JrM3hvU3d0TzU2VHhxR2haVTNoUGJUamlBekQzaHp2cAo0eHNMNnd0MlN6SHpzWlFoSFFOTEtEeUsrbk9CaUNJc3M1eVhRdWJTZmlBQ3IvMFo1N0ZBWU1vSDdOeTc1MVRpVFZzaHA1WUtsNjl4Cjl0aHBPRCtoaE00SzFuVmRwRFpkNEdmYm1NZzFJK0RBRTJObERTTmdLV21zRk9leTNxeUVscVIvN00xRVVhY3cyVVR6dEpmT2VJSFoKQmdyMjFKS0gzRFltZkxTejl2ZTM4VUs5NWdPZU1vYXYzcy9NVTVGRzlza2s4U0hNS3RWZXNiZUdLWXhMVnB6anp0OXhSS2czbExCYgptNHI2ODRKTFVVVEpwN080Sll0QVJjbFVjdWxqb0lPeldtYzJya21GNkJzVEJSQUJtT05NUXNZcHhPb1RRSkd0eUFMWmRVdG5tOXdqClVJblhvS1JrQkR6bmpMMEtVS2U0ZE9sOHN0cWFnQzBDN1NOd3RZM0lPM0pndmlha3ZmVmJhVGEyaEF4ekNvZFordz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJNHhYTGI0VlRUZmw5eVlTeVh0U2prdktESzZ1OGM0UXNqWFVic1MrOGNRK2RJeGFvbkhLTWRtYjI5S25NTG0wM2E1VXJLbjNNQXp2MwpWZWFqeTdTMW8zUDlZUEpMM0kxMVJPQ042aXBKR0t2eGxramFqUmxCSmpsVlZPb1ViT1hDOGxWc25sUzV2MTZnYmRBQ0krRHJnZHE2ClhQamFBbnNGM1pIZG91Q0R1clkzV3kxUTVrSFdpM0FkUXBvZ2tyU3pJNm5jK3lhMERWRjNRTzltNDZ0MUNtV3FGd2dwWDFoVGhRMkEKY3R4MUlUeXFpSncrSnMwWmcwNjl3eUcxOFFrS1hWK1M5UnMrZkdDNmRpbjk2WmNka3pxSlVzQzVHenA0K0dHaG1EclJBY0RDRzFISQpZWHZncW1mZXI1bmtWaUFBa0ROQ09JbGlnZXdZMWRhV3p3aGtFYlpYd2JkYWd0NlRPWE1nQUhQRG94RHVmbUJacGtvSEFncldPL24rCmxvNlBkR1RwNStxNW5reG9xTVBWVTdyOTUyQWg4eUdwYXJhKzhMbWtjQnUyR3o0bDNPY3pyY3VWQjdEUWZlMTduM3FzMmtaWUlWRFoKNkRNcmQ0eFBjY1hDSDg5amZNa1Y4eGFiekNzY2ZCMHF6RmN0RmRlWFB1eFArS3RxbUF0TDhtQlRrSjhGY3U4TjV5UFRYbUNReW00cgpHNS8yUmR0SW1pTUhscEkzVUhkdXdJeG1pYzlJNXBSK0JFcldwRlVZVXVQRnNmYVplYlNKNW85MFNoQ1d6SVNiS0ltUG0wU3dZSjFQCjV0WUJnNWZKQkV2TjFLVzEwb1p2MHVNNVBhclBWKzIwdlczQWROSDFHTmJqY29laEVJWjc0QzZwWWJDTVR5eVhzLzFDWjlGSlVSVCsKVnA3TGoySkw4NDI0M01iMnVMS09Cem1lRi9pa21QTjFYZ1Jyemh2SmpuMmQrN0IzWktLMUZ1RmR2OEx2YU40d28xR1J5L2lvNkt6QgpKdkZpeU9XZnNzQ2N4U09wZ1ZRZmJ6RjZrVWNYNzQ4Y09KdytpUGQxdWtmSjdsRE52akVqdkJQTW5WMHNXc0hCTTdyaEwzRUdzNHd6CkpDUE03NGJLYjVKR2VGMUgrL1JRQmswbG5HK1M4MndZNFNNWXRKVjhqQ0FzVGZLSFc2S2t0ZXJhS2VPc05VYmF5NWRPNHRpNVpWTHIKV2JZTU5LeVpFWmpYcHQwT1Rlb3ZQbXViamF4dXI5eEtOa0dDdXNCTUNUZHh0UlVUUnc2Y3kzeGl2aGh0WTAwY1pRbGZVaGFLWjJ4MApxZHhFcDMxSzcxdW51OXVaNEFYcW9ueE1jTmRwdTh4cy9aQmhGMXZWWERRWEV4WUV2SlB1VFJBVXNzRDFNejhHOW9pRVY5cUQzOWdkCkdoQ1lDWC91WVhNTFhYL1A0elhBbC8yRkMyclEzdmxoQ3NwUzZHYTc0TGJZZGE5dHVnbEdtOHZDSDZCenpubVFSRVorVHErRWFSTzAKOFhZTmUwYktaSlNKa1NKV0NDK21idkNtUUZZK01NMkRadXNTQjR3QU1DUWJwY1hMQ0RJdlkwbFMySTZsTmlUYmtwRVduRlBDeXowWApRNWNwbTREYnpUaGVjVkNTZzI1MGRLY2NTa3QvK0JMYUpTRlJVVXBrWjU3S1VPVk8vVEdQRTNBb20rVEVpZFBDVGRtTVpLUGt5V1ZOCjE1bTJkeGpkZ05uOUtBUFJ6WjJsK0J5TEZrOEFpdXVuVms5Qm9HWlhxbklPL2N3RUJuZ0RYMmFpaEsycDA2S3pMSElyQ1plMUtzdDgKWWhSdGc0SXNnaXlLWUVoZHh0Y3M5eWx4dFUzMFo0RjhGZFVkWlN5Q1BOcm5OQWV5Wm5sa05jdGRMQkVCL2VHVGsySHdpYVZRSWJFTQpweFF4L3VvTUF2M0IxU2U4eU5tSGlTY0xsazFRTkZpR09JWXlLNkpvQk1xelpJRmFlMCtadit5RW1XRWttMmdwbTJMSWJPTXo1cnA0ClF3UjZ0ZHhaY3pPMEh2aTAwNFl2MldJYW5jemJocHdYRllBcVJMYTRTNXM1SHQ1OWVzU1FyeWZ4dVV1MFRlVmhnWm5rSUNCUldQRUUKd09DbUNxb09ndjJ4anpYdFBMSFhhQzFXbDNNRGdWNWtCTmJtd2tjZEI4TU1wUkZpTGtwM1ZzaEZISnRUOERrSXdkNmFXTGd6VXg0dQp3bW1iaHF4T09Zc1NyK21RRXNBSVFrTEozSXJZWFBpNFJEdzE1dHlCTkFuV3ZUeDBJSUJaelVDa0tXc1UybDNkeFpKZUxaTSt2UStWCjVXVkFKMnZYMmNJYmxKMUZHMU14OGRLa2JkcldsLzd5cnJaSE9nZFVYckYwbHhrcGxSTjNsT09yRVNpOVBvRm5sU01IOXJ1QmRyZHMKRWViRkk0c21BSEllRWxSKzJOMmFvNEJXdnF6aHNsbkJDNG50d1FBTWpwSW9KWnVNWEIwc3MvTTAwcjRveFlNRmh2eWxSSXRGZ0ZZWgp2Nk1uWEoram9aMVRZYksrRDdSQmFPWXpWNGVXQk0vQjNOMGZBeUEvRWVEeVhuTjk2YlUvc2gwNm9KOXFMdmxkNnFORVlpbElZSi8xCm5KTUtwdDR2UEk3QXUyOXlIMHVjcHo0bFJGUldScm82WjNqQkFmREdWUm5OaThLa1hrK3pkNWNRcVRmc2NUSXRHaFJtUU1oN2hYd3gKcktjSVRocVorbXhpSVNJRmdHeUlOWGJ6WXdSaEsrS1luRnpGeHFQY09wc3dvWnBQOTA5UG4xc0V5c2R6NHc1bHpRdDViR1ppZDIrTwpoaWpXVVh6TUFlYXY4MWRUcEJKY256SWhxZGh5ZzhBUURPR2pWQkJCTURlNnpSVGJ5dmtjeXlsdXFBTitaQVdibVhMalUxR0YzUUN6CjdSVXNYM25ud3J4OFJ2aStzcEtSWjFIb1lwSTVkcG1RY05pTFRBeVU5bFlpbnlZb056NWJGRTZ1akRQTm9VR2VsUlFPZE1mc3R6NWsKcitBc21GRjRoTC9YbnhmK0htWXdNQ05RcC83TW5qQ0M2QkVGdzJweFFVK3orRGxyVjBjaHJBRkVXVXVaMVFhS2NLNElrUmhGR3FsRAp1Wk10Q0N5OFI4YWR3UUNZaDRBL3pWWllCQWMzaFkvSExKVDN1cU9OS01rOU9OTWNXc1ZpRHpVcDd6TFVMdmtReldudkFHTDloZVFYCnN5c2NibmkxT1EzRVlxVm9LTGJSR0VlRThkZXFYVVNvUld2c25VWVZXOU9KZGN4d3VzeHFnU0Q0T1RiTU82SEkyR3ppWWJUOXdtd0sKYkh0M3I5RlljT0N2ZFBtSDZQcUVkOHk0b05JaTg5ZjF0RFZXSHpnRVJaWk02QXFZbmNjYnJsMk9Uc3cySVRsckFCMUxiWDJYQmNXcApGVzUrNUQ2aGl1R2NRcHlWMFZJbzJDZzNMMlYvbW5LR0JYNkxoakxyV0lxZEU2L0lRbUt1M0R1ajZVNlJ6OE9ZUlp4U0lSY1FaMHFtCnkwS2M1SVB5aEFlMityektxWTAvUVF3NVh3dmttdzUwcWNXbjB4UjhjNVd2cDlteTdzMkJ6TDg0RStYa3hRdGdmSW1kOWdhZUJibFAKMmVXenlaTVE0T1JIV1NKNElvSVU1cWJjL1JZc3FUZ1RRT0ZqMFFzWFFPNEl0eFlGUkJDeVdXWitkcHB3b1paVFY1QVAxRi93VnpuWApWNFZQNE9RT3VXVHQ5d2thL2MwcG1qdDhiNGZNZUE3b2N6VFFWUW9MVEhOT29oVTg0cVErZXdRdUJvYzJBbjRveFVzdTdZTXMzWXpnCmRhLzlGWEM2cE9qa2hyK09xMTAwZlRILzdRcWZTNXoxMkVJMWZBSlpUaElCc0pBQ2k2NHJIRGpCVldTY0Y0WHZpaGNxem1mcER2UUkKZEJsZzNMTnRYazRhbndEVk9TUlFKQ3UrVWxpd25FWWxKRXhPUGg4Z1dETUZWZ2tycEw5eEdsSVRJVEF0L0pwaEpiSUlJYVdaVjhJSwoxRmo1cWgyY0U1UURxcHdUUmxORU9TTlF2RzdKdEdoaDRRWS8rNDBMWVUrbGJwbjVJUlRldmg1eXJTQ0N6TThCdTMvVDVzWEpta1RtCkpRU0FDNTlvMWFXcktVU2M1MVZuRFBUWk5LbFRYRDljZGN5ZERST0JCVjlMejl6UkZZRDhva2h1azEwd2duQi96eWtnQUl1U1VMa1kKcWdJOXJueTFOZHlKS1pJb01RM2QySEJsQmFmbzVFd1NtQWZjTUsvOVUxdEZlT1lxOTJrWXB0T0wvMlB2YkUvVURwM2lHaVN5d2czeQpmQWJZOElrbUJ1YXpnRjZaazlFTmJBNnZHTXVPUzIrcTFlT3prOHZnM09MNm5yNm9xQXJKS3p6T0NRSmM2bms2S2ZLVllweEdqakswCjFQSUZaT1VQb0J4NWt6VmNBalE4RmFjc0pCUnJBWFNBOWhja25VaWtvdjd1c2JzMGhEaDk3bXE2VWVZUkpEeWJwZFBsaEErMnhUdVAKR2RlZjZEN1RsZHBKUUFLTFRLTThZa1hCYm5GMmVDQlFlL3UxTXczSXlENUhPZEVQcHVwek5wbzg5UmZldFQzTjF2bXM1RjB6bkFpVwp3TjVqVlBnekdDZlFEdFpqQXZJWmxqYWpDSUdjYnN5N2dVUkFPczRCWk0yZnZ0OUwzSnllT21PZU05aUg2ZWFhVWFYQk51dkNSeENvCnh1SnkvQkV0dkdsUzhCbVhuN0h6MFQ3elQzalN2NmpHbmg4NjR2cUQ2N0lqcWpUZUlzT3pKQ1FlZENlT21mU0haOW9tN2xnc2VVY3YKOWZmSTNEVVpCRXAyNFpJZVVGOTh5V0xtSFltUWZvVURCOGFCbkpwbnhwV1FNMmU0RHVsZ0tkWGp1UWZQU0VVc295ZllDbmF4VCtNNAo4bSt3VGVTTzREZlkwb0szWE9tQ3BNZHlSMUNpZFFmVUxLYkkyblhBQ0xSUDJzSzN0RXg0R3BMdllNeEtYc0hQc2sya1B1Qm4yYlJYCk1WS2ZVQlBBSVJrWDU2ZENvRTlBUkM2S21YaTV3ZFRlR0ozWUhCRHNjM2R4Vm5vQyt1eE1ibnJPVDNNUVV2aWxMbUNjRVBpVUFESFEKNXpOZ1BXRzZYMGZoNWFLeHZHejhjQkZmR1VhdzVyeHVRWkhtQ0V6MG9mbnNWeG1JbUphckh4SW9zQjBvRFJkZFFyNy9HWG5oN01LYgp5dnQwN3NEK1lqMWZMcE9adjdxUk5WekVrc3lpYS9uQlhJSFZNMVpPcFl0N3dLYUt4QVBkdmFDcDlxUG5aOXlwT0xjaHMrSGxKZW5CCkNiK2NGTXJ5YXhiemt5R3l1eVAzQVpzSWpFdldaNzlUTTdOYlIvNXB6cEE2bFk3Ri9EUW5CemI0WFZWbTNpU1grU3VuOHpsWkdNNlYKeFR1NHpDUEZrNU41VEhlQTN5Y2lOWXdQc2tiNHQyUHp3ajgyNHRPZ0U5Z1hkdStTRUpCbk5SK0ZreXpLZEJFZUg1aHFMVHhoTzFIYwpkOE1uMTZVem5lK0dUMnFnWE5aT0JHWWgzWWd4ODdyQkRZYUUxM1NUYUVtRG1UOHArL2VXTXA5NHlyOEdONFUxdkFMRjkwZHc1WXZ3CjhpZm5PblZKc3Z6empab2xxUmFDVTM4WTVWOEZkamxCcC9HeUNFeHNXaVA3QTZwKzV3NmNwUDZwME55L1laZjdqSytjMUIweGUxSkMKdXRMNVBRN1puL2o1QXhFbmx1ZUhnS1k3eGoyV0RjbUdaSm53VzZ4Q2VEZVQyN2c1RFVBUkxJWjgzUnZUc0hDZ1dlS3lEU0lDeFc4bwpKb2tJdC9qVGNJT04zL1FVM2lRVll2dW0raFUyR1JPaXgvaE5XN3h6WDdEN2g1MXRWSlNOLzduMk1CL1BRUWxOZUl2SWZEUWxSNTRnCnNQQldlbmNVbTJxZlpYWnExN2RpNitJNVF3VjcwQ2djNzhpQjB4RGVKMU8rM3loOVVBajNkd290TjZkdDFLamQ2WXgvMnhkVHhiR0cKRVI2ZVFMRGdrNzcwcjM5TUkyRzVhYUlRQXUySk1UNjd0YlladFRucG5uZXhrU0ovTkJQRmtYL2pMbWliZEgyQW4vZ0tGOWpDeFExTQovNXNHejdUZ21HS0tjN2VvMDR5QkUzaDV6eXA4dm1wbjVqOTM0RlJ6bUFiN25URzRVZm43SjRYbTRFWmp2SldlRFZCWU5IaDkrYlhBCndsc0JkY2hyUE5VQjFrdVR5TjFDRjRiT0hUZzhSb3ZCcHh6L0VSNEpwY2pnbzlrNGp1Z3grYUoyOTlQYXl4L0hQczE3WUY0ajhPVGIKZnUvNW9OTWJkWHF2Nm5VTHBuZm40eC8ydnIzQVgwUmlmenIrNGZHalRoZlE3TjN6SDJ0ZjdOMTcrZlRvMjM2N3hJK0huZGFvMCs4MQpCKzhXL1hDL2R2Zlg4MjRQZnFwRHR3YWQwOHRST2Z5MDl2bmV2UWVEUVhPaVJPdDFwOXNlbEQzOFhkYnVQZW1Od20vNHoramRSWW0vCjNRVk41TTZudFh2Zjl6b3RBQjhEM3Q2cjhhSnZtOTFMVy9hWFRudjBlbkhoWHZPY3lrSlhYT25QMTVtaTEyWG4xZXRSWlpLNCtJM1QKMUQvOXVXeU45dnVYdlRiMGI3Ly9hMVVDejJpK1FkSFJzREtWWTNWdW5OUUhUMDRlZEM5ZU4wOUVWUm83YlNpNWhDWXNjK09rVkorSAo3eW9QenJ1MXBtUEp2SXpvK0pYL0x1N3V1b2pKMGVYZzlMSmI5bHBsVlZiWXFoVzV3ZTNjOU1EQ0VhOHFQYWZOWWZsb1VQN25FcGhRCmZicE8xTHB4Q21WVjhucVg1ODlhbytiYnNycWNqS3ZjT0dHOS92R29NMm90Mlk0RGZVTXEvVjJudXdLQlkzVnVuRUpjY2xXcEc1VEQKeTI3MWZaeUxWNUZBYzdvdUZuUjk5bTRVYmNybGR4WEZTZWp6QXZhdjhiaDBla3NXWUx4Rlk5a2JuMldkWGxWYStoZmxvRG5xRHlvVApGQ3JjT0ZYSC9jdEJxM3c4YUY2ODdyU3FEOVlLWTNXTGkrZWdmMzdSSDNaR0s2eWQ2K2dIYWNsVnUzRHZzRHlyM2Q4ZEFkZVBvdDBSCmNBYVZhM0lFVkxzajRBeENka2ZBV3hHVFo0TW1hUHZkYi91ZDRaWWRBaXRiV2piekRGaFppdXpPZ0xzejRPNE11QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJT3dQdXpvQzdNK0RIZGdaVVczY0dYSUdpVFRrRHdzRm92M3hiZG85Zk45djlYN2JBUTFhWDIzSkFXb1dTclQwaVZkYTBoNlAyWWZtMgowOFFPcmFDS3hwVnVmSVJQdTVkTFJQMEgwRVZ2UlVjZ1k4dTJhUWlQbTVmRFlhZloyMTg2Yk91b1lGZGVTZTNxWXJHOTFvZnZkbldwCjJQNzFGZ2pwbjUwTnk5SHkyYlI1UW1BVndiWXBxLzhaamRibXJmc3VhcFlZWGRqcWQvdURMMzU1dmZTSUUyK3E3N3JWclkydTlJM1AKdHNvQko4UEx3Vm16VlI2M21xdFFOVmJweG9rYlhwU3RaNWRMNXQxT1FveEppQnYzRFZhZWdEQ1lsOTNtNE9HdkYvMWUyYXMrVHRNVgpiNTdLVllrODZQZUdvK1lWaUF3Vk4rbWtBc2MxK0U5Vkp2MVdtU3UvM2NiUlU2eEN5NW9mby9VS3BIendjL1MxcUNMUCs1M2U2R2dWCkE5UDEyQ3JMWTdkaWo1eU9zWG5hMFpXT3F6dnZ3MjE0SDdaVUUxcVJyRTA1TGwzQm5iSXVNcUh5YnZGbWlVNFVqUVVXdmZrNGpNcUUKTExHcHhJU29kZFk5MzZUVkNVblhtcERxZTh5YjI5aGlWcFphNjc1bk5nZWQwZXZ6Y2xUZHNiMUplMmUzTTNyZTdDdzdpMjNlNXJtTApTS2k0aFc3T09YcDFxL2ltak9mVGN2Q3FSRTV1bmtxMHF2elk0aUc1dm43c0FvOCtqSTRsZG9GSDZ4OTQ5SEZkUGpubzk3djdnN0w4CnJiTHJiWDBEckZhWWpPdHVHYTVNeU5iR1Y3VTczV1oxZi9BbUhYa3EyM00zNjZ4enZaRlY2enBHSkEwckVuSWJRbEUwS3FlRkdEVGIKbmN2cVd4Y1h2ejBWdVQrNGVOM3Y5bDlWRnVicmMyelpYdWwyL1hlWTFsWVVyTGxNcTM2TGFTZlRkakx0S3ZyM3RnVHlubGIyaG15SwpFRnZoQnVPYUM3SFZMZ0t0SXNWdWFjbHZhdmp1OXVZSXFMeTdiR2FPZ01wUnlic2NBZE1FM202T2dOUHFpcyttYkV6VjVmbTY3MHlWCngyWlRkcVpOenRxd0pOd21FZ0tyM2JtNHBjc1dLMHl1dFE5b09hMDhOanNodHI1anMrNUdnZ2VWWFVFSHI1dTlYdGs5THJ0bGF4VWoKMjNURkd5ZnlSV1UzMFZXSm5LNTRhOXZSWVdkNDBXMjJ5dk95TjNyYXZOaThQZW04Q2FncXU1TTM0cXhVNC8vV3BqNktzWTlWcWFaUAoxZFZ4TG43emdyS3lzV3RqTnJIcW9uL2RON0hWY21sdWdDWitnRGVrbjFZUUgrc285cXJmejl6RVRDbVZyU2tiSXdlcXI1NTFsd09WCngrWWE1TUM2ckw2emxZSzd6anJkN2lyQmE5M2JVRHFXcUFlUmZSWWZwYXB1bDdXbGIvN0dTbVd4RnlqenpYOUwvYTlJNFVTdFd6RFEKOWlyUHhHYXJkWGwrdVR4S0lpWXZxbkx6VnZYS3M3SmRQVW1UTFh2anRBeEtPbWhWSHFwMnV6UHF2RjFob0h5RjliM25kamJvbjFlWApoRlI0ZlQwNW8zNzFrMlQvRmdocGRuOXB2cXU4Z0VBMUdqVUhLNmxTdHZ3dDNHN3JsYzNLMTRWYXpXN3JhYi82bFkrb3dpMmRUSnE5Cnp2a0tFdnFhN3Foc2R2cTdlcjR0WVRPdFhkak11aDZGcWcvTnBwaEVkbUV6OHpidzJ3cWIyZmIzRmF0blU5c0Z6c3l5MDkxbTRFeHIKNndKblZwRG82NzQzN1FKbjFtaC9xcXlOYmtiZ3pBcVRhKzBEWjFwYkZ6aXpSVUpzRnppekM1elpCYzdzQW1ldUdEZ2pQcGJBbWRiVwpCYzZzSVByWGZSUGJCYzZzazlqYjZzQ1oxdFlGenF5d2V0WmREdHhtNE13bXVJZzJKL3huaGFGY2RWTGUwbEJ1Y0xMQ0ZRTFNkb094CnVYazlObWNzcnE4ZnQ5dUhyVWtaK2VESnlTR2xDanBaemI2MFpVR3MyNXN1NldieVJLL3I1ZHVQSVQzUFRyNVZrbTltSjk5MjhtMUQKNUZ2bHVicVRienY1OW5BQWdJOWJmU3VSQlR2cHRpSFNiYWU5N2FUYml0THRvMWJlZHRKdGs2VGJUbmZiU2JmSzBpMTJHNTJzNWh6ZgpNaUZYbWZnUDRvdmVLQy9oYmhHdHNJaXlqM2tSVlNaK3Q0aDJpeWkrNTUzVWRPVkFRRXYyaXhWaUFhTWFONjZPZlZ5dmJUM3YvRnAyCm4zZWI3MDVXdTQrNVpYSndVSjczbDZXTDJPV2t3WTdjVms2YWlrSmtsNUJtTVhtM21aQkdWSitUdTR3MHQ1aVJabHR6bnd3dk1QdEoKVmJyZUsvZkpEVlBXNmJYTHMwNXY2ZnZYOGFoZGxNM1I0UXJMTEtweDg1S2pKdTdMcENZMC9KdlU0UC8zNFRQOHZROC8xSzc5UHNxdApIRnRXVG1TekxxclV6UjRwYnpwZWRvVzMxamZsbHNBV1BwYTV5akI5cEJjR05zTnpzKzRYNEpjdGhNMTBzN1g2NXhmOUlXZ1R6eTZYCnlLL05rM1lyaVlZTmliTS80UEhhUExsUTJZajRab2w5S2hvTExIcno5cGJLaEN4eFhNV0VxTnZRdFNzVHNpUXNKeVlrWFd0Q3F1OHkKYjI1ams3bVNncmJ1TzJkejBCbTlQaTlIMWJXQlRkMUJ0eTRINVZYVWc0OXhLOTBjOThlVnB1dW1ET251RnVMTy83enpQeThpZEMzOAp6NnZsWE56NW4zZis1NTMvK2NPVHVmTS9VOUdkLzNubmYvN2dkTjNnMnhzNy8vT0hWemZSQXkyVCt5dXBuanVmODg3bi9MN0U3WHpPClZ6TTNyUEV3N1h6T2ErVUFhSGZPemk2SDVVRy9CNnBCci9yeW1hcDM0NVB1WGRudDluK3BTbWUzOCtyMUNINnZ0ekFKYVdVeUo2dmQKL1BaYldieGZEczVBS1Q1ZTdTR0FzVXJyNjZheXdubzEyc2JxM0RocGJuMXMyK1oxclNFRTZ6MUVXL3dzOGM0RXQrNG11RlcycjUwZApibzN0Y0x1WGlYZDJ1SjBkYm1lSHUrSng1LzZyUVZuMjdvTWFWdDRIaWp1dit2ZmZkdnJkY25SL1VMYnY5d2ZOM2pJLys4NUFkOU01CmJpcGJUTXN1ZkZuSlBCZlZ1UG10TEs5TVdQTzN6dm5sYU1tTGxySGc1L0szWnYwNTdKQlo0d2pWcmx1T25UbTB4NVFqcHdGdTNnSUEKeWJUdFZocXgxV2FhNFVYWkFvVjVzTHNTc2RiMmpCVW1vUnZRaDc5ZXdGbHJCYXZ2ZE1WYmlHUllsY3FWYmR2VEZYZkduSjB4WjJmTQoyUmx6ZHNhY25URm5aOHpaR1hNK0FIMW91ckhHSEdmWkladk96cGl6M21mWm5USG5mWXc1dDZGbmJWdGMwaHBacG83ZE9XbHpUVk5iCmViMTRPeE56YkxFUjZncWtiY29GMUExT3oxRTloOEl1UGNlNkViTG02VG1xRTdMbTZUbFdEYUZiKzcxenUxTnpkRHVqNTgzT01rdjQKNW0yZ04vTTJ6bTRMdlQ0NXQ5dEMxMDJwV2ZNdGRHc3lYRjFKK2Q5dG8rdXdqVzVkZHF0VjlZT1BjUXZkbkVDQWxhZnBwZ3puTHF2Vgo5bVcxK3JoU1B4Mi9icmI3djN6Yzd3NVZUbnExUzF5d0h0ckJUU1F1dUtVZFpiTXYrMWQrRHJSZCtUVmFLbnJqTTZ3NklVdTJoNWlRClgyK0JrUDdaMmJBYzRXd2FsTzJWVnN5bUNJTnR6Q1gvakVidG96b2pYSDJpYnNxZ1h1R3dzQzZEczlWbTdkMGhidnNPY1VJbGQ2ck8KMDE4NjdSV0N5RnpwbXpjenA5VXBlbDJ1RXBQbGk5Kzhjdkl4SHJXdkljWHlEZE5TRjdyeVZLeXU1OStHbXI4S0pkVVYvVjgzeS94aApkdWFQelRyeDdNd2YvZlZVay9OdE1YOVVKMlJuL3RpWlAzYm1qNTM1WTJmKytJakdaV2YrV0hQengwZDJzQjQxVjRqdjJrWVA5dG1nCjJSbzF1OS8yTzlWRDRHM2xpbVBNTGQxMHRHdWpjaWFaMCthd2ZEUW8vM05aOWxyVnRldUpXamR2MWFzY3o5dTdQSDhHWS94MmhhdlYKY1pVYnA2elhQeDUxUnEwbGh0WFl1SUNsdit0MFZ5QndyTTZOVTlpcWJNbmJsTE5FNi9vQzlOWjJiSGJKdERjby85SUtRbjZYcm1neAplYmVacm1pWHJXaUZnYnE5YkVVcmFGOW5nLzU1ZGVGQmhXK0JuTW92VkkzNjFUWGovaTJRc3NzalJadjhMby9VL0R4U3QySk5Xam1iCjByVllrcjY3SEp4ZWRrRkYyRmhUNHk0UHpBWmN2bHZoakxFaHB1QXIzRTdibVdFWFduZTJMZ3B0QllwMlVXZ3pxTHgxWTNuWUhFK1cKWEt6ZmdFaTA2cE54dmVQUXF0T3h0VkZvbzRwSzI2WTVNSkl0OTJCVURoWGFPVENtQ2J4ZEJ3WXV1V3QzWWR5U0tyczdBKzdPZ0d1MgpoSGFud0pYNnNUc0Y3azZCTjBqVFIzc0tyS3lmN2s2QmEwUEgxcDRDdHplUXJYSkdpYzA4QmxZbWIzY00zQjBEZDhmQTNURndLUzI3ClkrRHVHTGhWeDBDOWRjZkFGU2phSFFOblVIbnJ4OEFmKy8zMnEwR3p1bEJlMnpOZ1hXekxLWEFWU3JiMkhGajVPTEhMU2JFZVYwZHUKNW9yc0dnL1VwcnphdDlrWk5uWUpSaGNSc3N1d2NldFNZTTBsV3I5Q1pvM05rMmtmTEYvSVRWdTd1NkIvMTF2OWJuL3d4V20zMlhwegp2MlpCL1l0bXF6TjY5OFVLWnVQaDZGMjN1aG5jbGI3NW1HbWtkZHNFeEVwRWJjcWFlb1FUY2ZPVzFQdmswZG5aVG0vRGRycjlDc1JxCjhtSE5OWWdoWlRFOTJFYVJ0OEh2RzFaTzNPRGVTVDNvOStqeDl1cG5pOGw2Tno3eGZubTl3dVhKcm5zSXZsNWg3VVZVVGxhN2NTSXIKQitNTUx3ZG56Vlo1M0dxdW92V05WYnA1ZjhGcWduMDEyc2JxM0RocEt6NC92Q2s3MXpZZGZWZDlJWHA3ODhLWXlrbW55aTU4V2NtMApIdFc0ZWZtU1ZoYWZ6ZDg2NTVjcnVGaDkrUnNuaXJhazI4eG1kQzJxMW1HSDFJaWpWWnpDMTVRdDROREtoU08zOVcrZTdyZFRqRFpkCk1ickN5OHM3RGVJVzlwZksreVlQNk1OZkwvcTljb1ZqMW5URjlkWFN1YThybnlXbksrNjBwNTMyZEgzYTAwNTV1amJsNmRndDVjM1YKbm5aUjFodmpLZGhpTmVrS3BHMXhIUG02eUliS3F0Q2JKU1dqc2NDaU4zLzlyREloUytJTllrTFVXaE95SkxsUlRFaTYxb1JVMzJ2ZQozTVpXczZwWmRlMzN6dWFnTTNwOVhxN3dvc1FtN2FIZHp1aDVzN1Bzc0xaNUcraFdQOUd6d1Z0b2RUbTMyMExYVGFsWjh5MjBPaUZyCnZvVmVTZm5mYmFPN2JmVDI2Zm9ZZDlETk1WWHZIcFZjWTgxb1c1ZmFocjRudVM3VFlsc3pJRzE5SXR6ZFUzNmJtd0twYXBxZ3pWUG8KcnVUZTJveU5acE56TzUwM0FWWGwzQ0tiSU45RkxYSC9uZlhKUTZxU1RKK3Fpdzh1ZnVOa1A0YXF3K1d4WnBzbk9GWVhpWnNpTitqdQowdE1LQzNBZEJjZFdKMGJaNWt1QVc3d1JiM1pLa1hybGM4bTY1eFNwYjAxU2tXZGJmeWQ0bTQxeW01cU80K3F6YnYzZE1kc1pFWWhtCmZSeXY3MjRpaGZHNm55dzJSVHhzY0RTRHFQNGk5aWJxMy9GeXFuemxjRlBXMDFWa3hhWXNxYzNXd0hGa1hwNlZnMGVkd2RhWlVkWkIKaXEvTE9JK2FwOVg1c0FrMlQxbXI3UE1oMm45WXphZzVWdWYyRW9GZDlsb3ZOaytvYk4xa2EyUzFwUFp4VExmSHUrbDIrOU5OZkN6QwpiZitXQTFYb1BJU1h2YjhiTkh2RHMrcXZYYXpQN0w5aTlQM09hSEpiUmhNN1lOdW9jRi9sTUxFcHg3d050cHhRTk42RGJ2ZmFwOXZtCkhJZXV0ZzQzWmE1dWFCam9kZlRoS2s5WTNYbndSQ1FuRDN0dC81UVZnalJDVHI3dDk1NERDc3JIVkxmZy9mSlZweGYvc1BmdEJlRlEKOXFmamQrZW4vZTdlM1FmdGR1MVI4MjEvZ0VKa0w2azlnUCsvL0dYdkV2NmIxSjd0SlExVFpIQ3FiUWlWcTh6RzdEU0VTYkpjd1FlVApKVHJQNFVPZUc1bnAyc3ZtWG9qeGVma092bndESDM0RzBDODFrZFNlMXY3NVUxSnJZd3N2OXVwSlF5a2o4NkltUlNQWFN0Zk85K3JDCk5FU1JLQ2pjRUZxb1dsMnFoaTdTdklhbHBjaWhqYnJVV0RHdDFZdUdFYmt3dFlPOUFCT3lZZklrcXgzdFlkVk1GMUJWSm8wa1VRVjkKa0Zyamg3U1I1QWJRaTZ5Ukdwa1NKRFdGcUxXb0R6cHpNSWRVTjNKcHBJVkFWd2tpbE5JQmd2V1NScEZMRlpVcUdsS1pCTnVURFNscQpkVUNUNU5pK3lCdENxQlI3N3JsUUY2SUJ6UnJvdW1vVXd1aFE3R2d2YjZTSTBPS0JocElpU1VORFFnRmRjY3V0UFFBVktiYnB5MmdZCnJWd0dxb0JNWlFvWmt5NEsrSVRNWnY3QTM5eGtXV0FoRG9kT1plRHp3WjRIOFhBY0VVZ1ZORUxhQ0MycFdxb05BUklGTXdZQkVzZW0KZ000ZzB3aFBrZVRZVmlOTnRDRThSYU1vbElsQktjNjFGRkRqNE9aWlVVdEZJODBLb0QwRHBoaVRJNEQ3azBvcHNZc2VCTDB1OGxSWgpQREI1TGNzSWhHeVJCQ2pzTU1EVUVCb0hENHFtS1l3YThBZG1weWdNZ1ZRS0k0VFRRSnZNQXNaR2dnR3RQZWhYWWxJZFFDbndRbVRZClVvYWpxbXZSSElBQk5pS2xpYUdnUHlyblVraGZrU1JwRWZDRVNSZ2F3OGxMREk1S1FRZUV5RUtuY1ZvbE1Lc2l3Zz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJY0sya1F1cEFmUjE1WnFRT0RLcW5NcXd4Z2tBblBZeVpEZXNPYWhwZ2dXakl4Q1FXZ1lHeFF0NklBbm5qeWVVK3d1QkRZYTJ6bXN5aApycW1waGxFNVRDQnBZTVVBd3cwc0NLVjFEWlo1a2lvSkZUd0VhRWhTYkJmNkM0c2lqU0N3SGtWUlNJbWdYQUE2WFA0UzBjS2NTZU9PCnNBUTYyRHZiKzM2UGhGZDd6OVR1ZmxwNytlUGVuWk5ab2dxZ1Z4UldVSE9HdUVMbzFRU1c3Y2xWUkJiV3ZJclFpamtTaWEwN0o5T0MKNjg3SnlxTHJ6c21WaEJkVXU0cjR1bk15UTRCWjRNb2lqS3BOQ2pFQVRvdXhPeWRYRW1SUWJWcVVFYTdWaFJudzZ5cmk3TTdKRlFVYQpUSm9yaVRRN3ZhOGcxT3lLdW9wWWc1b3pCQnRDcnlEYVlQeFhGVzUzVHFiRkd3elhsSUM3YzNJVkVYZm5wQWZhNjkwSHZYNnZWa2hECk1zNHBlMUM5S05JQ1dDMThzRGJvZElRTW1BYnp4ZVFGU2orR3dKQVdLcVhWRDNJQVZwU1lCZUo2UjZST3dtUkpaNEZ3a1Jja05MamUKTklSNGxwRnU0SG93RFFtMWFCQnhlS1lnb2ZsSjJvNW1id0hUTEFpd2lHSVlwV2syQkdCb0JJZHVpaFVSTUhRNTFKNEZDK1NIL3N5Qwp4WFduMlJKZ2NXZW1XUk5OSGVMTDl3Q0JRK05vN0d4TWdnWFdURkZUTU9FTlNFT2xZZlZSZTFKSmU0aTQ5NkpzZG0zSU5WUUFsRTlFCitoeE9vK1dnVnh4M096YnpLcHhhSGc4NjdiK1ZGRHQ1NTBTN00xZFUrQVdjWllhakFjVkhmT2VPWDhERzJyMzlmcjg3VnZKaEQrM0wKank4N2JYdllCZnFtMFdHV3pjRW9JSUpqMThsZXdiUEFuOERzMlduR2FXci9jalRxOTA3NmIrRjRGeCttL25RSmZEdDBpMnpPQVVtTgpuNCtTMnFzOWtCaEpJbkNQeFRXWDB3YzgyZmhQSUdhay9iMXVkd3FaNUxnbjRaZk1LbWcxcTVUSkd2MkkyR3dsM1BrTGxOQXdNQUpWCk1QcDd4RzNTWnl3SnV3Wjg1dnE2UmhoQnA2WVdqdmE0MlFKT2g2NDRkaWZxT1NwVkNSQ2ZDcWg0am45Z1dtall6VUVvRzQyYmVjTEYKNFpQdFNPTElkQit3WUlZOWdCNG5FcVU0NFRDNDZSQmFwRlRZRHRFSC9GWExyT2FyZ3FKVHMzeHpUZFFKdGU5bVlvOGIxQi84eGtpdwpDWXY1d0JKd3RMZC9pbXZnK3g2ZTBOdTFWNE5tdTFQQ05Fby9wVUd0RnpqQUlycnRJbXI3ci9DY2wrQi9VS21CM2hnOE5CTUFtc3NGClNQTmNBRWRlbm84VjFETUxTdEJiOWxzVk1lNVh3UWpuZWNTSXc3Uy92L2VuNzJIR3czYWl3elNOMkhRZU04OTlxTS84RkhOK2JFeVkKbjNYSDBMSGhuQnByT3dzT3duU1kvc3R6cDdzWFRha3d6OXdNNFFrU0QyMDg1QkdSclhtRExDc1BNaFFDVFcrTTB6a09pWmdjNUhSbQpRZFRlSmdaNVBzYjlLaGlGRWRFZ3o1SGNxZ1pUUVlEdWVRTkNXdHlXa0Q0WWxPM09xSGJRSExUbkN1bHJNM3RKUStzVlJzeDlza3RGCkZuVHdrMVowQ3diUUYrTUVPUjYxVWxMNTdUZjRBcnFhKzBybkZ2cmdrYmtQaUJUYWtxaFoycjhrNnZpM3FJcEZZMlY3d0Q3V3N1dVEKKzhCWW92NDdxbGpvZ3hZQXhjL3Bid1pyRGRRTjZmNktBZ3ZEdndmRUMvaUFyQWcvMXFNNmRZc0hTeFp4MzZhK1VkL09YREhiNlhQMwp6VmhXMCtIQkllVVAxSnFodjhTak9uVW0vam11NTdBZDdFV05ISTAxaVYwQU1UcFhQUUxOcUFhYXZCRGJyQXNkTmtmbG8wN1piVStyClEzYUphV0VVTFRLVkNnWDZaZlFoeWJRQzdSYktKSEJDbmZXQjFoeXN3R3FyTGlQVm8yN3NmZ01EakpNaDR6OFpEUmdneTNScWNJRnIKYVpUMmQxVkJNMDV4bjB3YVdacEpQYjNlNFF5SDJMTWFUYkhNYmpPRy85Z1pDZHJkSHU2K3RodlVNUDVGclZyN1AyYStlcUVYN2p6dwpBKzVjdWhhMkFSRDRDcVIrbHVHR2srQjVSTTh1a2NQQkVuZUdoVGoyRitPQTAwYllXNGllYzA4ZS9sV1dQaFdvdlpJV3RhQ0xaaW1aCnlWSXl6Vkl5ZFVUbUpWR0dtbmtkTFJKSUthcWpqbUwrSytiVGFvcEFySnBKYkk1VEF2K0tMTVhtbFNNU1ZhcjRoMXc1eXFZcjdNK3MKWU9MeGdsK2twVUphSWhMYmQvZEhMcWFnanROblpTSWlmVVdrRThSa2k0aFpVSEdTS0cySjBwWW9OeUR1ejRJcFNFU2w3MGVTR1M5UQpKRlZKTW90SVN0MTBFMjY2Q1RmTjB2RDNRMDIzSko1dTJUZzhGOVBVSlBGc215Zy9TWVMwTkVoTFFtSjc3djU4d01tV3pGc3h5WndWCms4eGJNYk9Jc081S083bEV6YkhmL2ZsZ2t5dFp0bDZTT2VzbFdiWmVwa2hLN055U2RncEpPNk1TLytjRHpTdVR4WU9pSnVENUZDRmMKZm45VytZbitTK28rYWJjMG14TDM3NGViVXVPOXo4YmhNMWJGZU8remhiMG5xeXJOSEZtelBMZi9mcWk1Tk43M2FIYmJ6azh2aC9ITwpUMVlZNnozSm4vTTlKMzYwLzBNV1Yvdm5ROHdkTllmN2FnNzMxUnp1cStuKzQ5elJORk0welpyVS9mc0I1NDZhTS9QVm5KbXY1c3o4CkdiM1gxSHVyUTFxZTIzOC8yTnk1TnM1Lzd3OFUvdkNkTkFvcGhmQXVDUFNzQ0kxbmNGQzdCVVdPS0s5MnhTdkZxMkRDcXZPQWpYYVoKYzk1WGVKY1IvRWZ5UVUzVUhseFEwNnJtbFhvOFFyaElsWXoxKzFpeGQrcitIUDVtaS9YMUNha3NzbkZkTTdWellsS3BJTFYwUnRGQwpXZFcyR3RaSmpXTWVWcU9YMjR0U3FDd1MvaWR0V0p2aHRoNW9CLzJMZHYrWEdlWjlzaDBsT0lsV3NQSUx0dktUcVZPamQwaVRsL3A4CkNuTGtJWFhUVVBRaEF1WGt0VlZrN3RRWnVhaVZxKzVLTU9CZ0Q3M0xOcmFnOElpOE5kVERNQ3dBaXVtQU8wQk13TVd3ME0xRklJK0sKbXl0Y0dkOG5CbEI0QnpWU2VEUk1IRU9ZZXNZNnlUSTBRTTJjc25kUmFHZEpWcGhQUTV6ZS92NkRWdXZ5L0VWLzVHL2FRdVc0WnUzZQp0LzNSaTdMVkg3UmhuZHQ1U0hvNC9ERXBuS0ZOYW5BUnBVVmlwaGJBd1lNbmo1MWsrTzZzUHpqblhFTTBDMkdPdHZ1bjVjbURKOFVKCmRQZDQ5SzVibm9TbW83bUtMYjVzbzhpUlZ6ZzZ3eXBtZnliSlJ1WjY3cWNkam5haUMrTkJNQ0ZzbWF4aDZBY1BDR3oyb0docUJoaFcKcENHM2lPR0RtMkYrSHVaK1Bwa3dvUmtSMXBOMkhpbzMzQVhYUjhUNTVMSTQyTXVuMWc1RG1BaEd5bFFhUDVVOFRaTzhxV2F2V0RBagpyTlFYTkV1RHFQVWZKSm5walNBUFJDNjBYWWkwQVdDRUM0Yk16S3VVQWxraXlhTmF1Qk9zMnRKK2haWnlNZDZJMnhwMnEyek9LdnZUCm5FMXp4NXNmcHp5TWs2djJmRzlxYVllRjdCZi9oSENZRWlEeGZoZUV5a3pZdElTYWxHRlRjbTZKN0l1MndBVWdMMW1uWk8ra0RKb3AKbGlabFZ4Q1pESm1XZnBNYlpSVmY1M0xSbHMwVE9GYWpsRTdnbUNRU2JXS3V3S0ZLS21IUnhyVkl0SzNZMG42Rmx2Smt2SkdQVXJRdApkbTZQTGQ5d2JrTlBxY3JSaTJOU2dUNVJBNmMxc3AzclBEVUNmd2ovbjNhVTBuR09GNUZ3aStoOEwrV1ZMUHk2U3ZCNFFlVzZNNm9jCnpWZjMzRkFueTBhTE9EVFBMOTdJc3d6RC9OeWZCUDFCN3M4V2U4b2ZkYnJuRXdjZGY5aFpjTWFaOUw3aElVZWtHUHdLekVNbGcxekMKY0VadHlCeGozUnpvS0lEd0EwWERIdm1LTTBDaDRoa2R2RENFTXlseVVsT2xrZVR5WXhDS1BTV290bWprR0VJOURlRnFjN1U5NVZhSQptcmxDWk43QStBQ01PaFUyK01nMHNqU25HQ1ZvQUlPSDRRQU8vUkVKbXRBSzNBSmtnWkpRWVNjeFVEblZqVlFxT2JPcVRGRFlwN0tXClM0bEIxWVpzZGhnSW5hTXpYamVVelBTY1ZnM00zRUpyYkRWdEpLbWt3S0Nza1JsUjBPYWxSWnJrczZ2cUhCRkxNalRqRm9JMUsvVlgKYUJBR1Jsc1BZMUlBZjZHN2ozeU1VUkFoYzliY3ZhZk40UnY2NUUvOFQzcHc4aDZWN1FsRHdFRzNjM0hSd2JkbXg4Q0huU0d1RVZmNgo1VmZ3enlYOG42NUh3Y3d1ditBdk5PZGZOSWQwcCtvRU9nVlM4akhKNy9KdGgyNHh2NnU5L0JZQS8vVERYU2U3Ty8zekU4Wk5wR2h6CmZ2bDZmaGtFMlhMMmYzazBmMVNON0U3WW5UdlVsOFBtcVBrRkxDT1o3YjE4OG4vKzY3My84Ly8rZCs1Ly9oLytQdi9uLy8zZm0vbDkKVHNkM3YrOSsvNjkxbUorTGYxKzJ2dDd2UHlnV1lKdEdvWUJ5N0s4c3RnRG1oZGEzYzBLTmd1WlExQjVkL3ZiYnV4cEsxVWdidUhPQwo0dGZyQkNjdlA3TUt6R0Ewb1hzY2RYcHZXSmJlSjRRbkU2aXNNSk1vUFpmcEEyUFI5ZDlQYWhJVHNmY290UDkwU1gxNWNFRUMvaG45Cit3cEJVMm9GM2hlWlVpd2lZS1JIaE9vemdYSDFNMEl4cFY1RXdLQk8yT2o4Y1JVandJS1NjZWNFMUF5a2FsVkZBM1M5SzZzYW9NdGUKWGRuQWl5bFhWamZ3NXRCVkZZNkt2WjZwY3R3NWVVVFRoYzV6WkpPWnAzRHc5WGZRQVI0OHFUMjRIUFZyZG9GMWZpdkQ2V0hxelBYcwpkRmdPM3BidEU5RHNUMnloWWJRc3dsMmJ3dDIxQ2U2Q3hNZWJKbW1HQnhyNElIV1NtK2dEZXNRVWhrSlAvbDNwdHJYQUF4cmVUSU1QClVoWTJmQ0dDSlJnRENYL3p4RTd3WE9VVUZ5M3NMd3c0c0JwMWtxb0FPeUtZRkVyRkZXVURCaWVQY0VjQTZvQkY1V0N5SVhEZ2pzWmgKYVVhdUIwWU9IN1RLTEM3YkJZWWdMdUhiSVpEMVBGaHlRa1ZQc1VjZVFhZ0xCek40WlE4WXpyMVR6ekJPMGFoUTVYd2NaaEhqM0JVNgpianhyNUhRWkxlbzBMT1BDNVBsWXIzR3RtandtdDJpSUxNdlNDSGtNNFY0SG1PLzFHTXlObzBQdUI4cDNJUnBpN21rMHdwNGNYekdRCjdIREhBQjdoS1Y1UmRLNkMzNVVSWXh5TVlaWklCZUpYNlRSaWhFSjVvTEl4RnVxR3pvdVlYVWQ3ZEdjMXlTSzJBcVRJa25qY0l3QXoKMElNQy95SVFrZWdSZXk3NDVpUDIrVzVHL1BQRStKcUJZSWM4QmpEL3BqaEYvTU9wanZjT1kvN0ZNRGUxR3lMbmxlU21QM1FpVitQcgpCcGNiYkl4ai9KTjRqem1McGlwQU1ySlBCZXd4aERrWVlJR0ZNWXpJOU1nOUozd1hZaW5EWFkybERCTVVwSXdubXFWTUJQQlNacEpiCnlFTVpNY2V4TUFZUmpiaC81anBpZy9CM29UMy9RTVRBYmpRdWVOQnNtWTd4RkdPSVpacEhTM2dNNHZnWHdUei94bUJJWWtET1hBaGQKQ1B6elBRM3M4OVF3S05Cck1jZmZIZSttdUlTc2d3MjRNT09zaTBGRW5nWU1PdWFVaGlhVUdaTitDamE5UkdZeDUxSWdKVWtqeHFVTgpvMENGQ29oamdHTmJBSG11eFNBa3plTmwybjNiZ1dXK2g0RmxuZ29HQlRvdDN2aTdZOWtVZDVCbE9VZ0VxY2UyakJoRWxPV1JxQ1RhCmMwQXBUQjZ6TEd2SU5FdGpqbVdnSjJUeFZtZ2FPV2hyT3VDTkFZNWpBZVE1Rm9PUU1vK1hTZWVtQThOOC93TERQQTBNQ2xSYXRQRjMKeDdBcDN0QnVLK3psNkloaE1ZZ0lFeUpzM1haNUN0QWM4N0h0UWVENlVXTWN3NWJUV0FoaTEraEN1MGNjQVJ6SEFzaHpMQVloYVI0dgowKzdianBZbDl6Q3d6RlBocTNrNkhkN291MlBaRkhmc3J1RFVGc3BIa1dleGhsZUF5cGc3UFlCVW9xSUJla0VlRkR6K0h1bDNESXJVCnUxRExLV2tCcndOdzI1RnlSd2NrazhXNm5aQjg3SEtJNGEvSzNJWkRqVE1nS0hZTWlmUzZVSXNwOTNnRGdObyttT1lPc1l6Vms0aGwKRFBLa3NlYmppWGZhVWNReTFxRWlsckdpNVd1eEt1YnhNaUJpbVFjRmxrVWdTeG9qOXNSejR4SExYQThqbGpFUnZwYW5uUEZHQUdiWgpKSGZHZExlSVpRenlwTEd5NDRsbmpTamlHU3RPRWM5WXUvTFZuUHJsOGJydkVjY1lFaGdXSUpZdVJ1b3A1NFlqZm5IM0lvWXhDYjZhCnA1c1JSd0JtMkNSdnhwUzFlRms2VUZnK2JwOE5DOHlwUHhIRFdFdUtHTWFxbEsvR3lwWkh6SUNJWlI0VWVCYUJMRzJNMkZQUGpjZnIKMG5VeFhwaU9qTEF3bVhhL01BUEFMOHdKL3NUYVdlQ1o5Qnl5bExFMnc2U3p3aE1ZNXRXaXdEQ3ZPekhJYTFlTTFnTUN3d0xJTXl3RwpFVjBlTVZQdUd3OE00eDRHZmpFTkRKR0JmWVExK3U2WU5jbVhXQjBMdkdJSUU4VnFERlBObWs3Z0ZhdERnVldzTVRHRU5Tckd5ZDhECm56ekVzeW1DRUQyTWsrbmxWZ09QdUdlQlI5eDNobmhxSGM3b3UrUFJKRDlpL1N2d2lDRk1UKzdGdnFXWGxadkFJdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJcHdBRkZyR0t4QkJXb1JnbGZ3OHM4aERQb2doQzVEQk9KdGMxR2pqRS9Rb2N5b1BnSm9pbjFhR012anNPVFhJalZyZ0NoeGpDNUxDaQo0bGVjMDJVQ2gxamhDU3hpbmNqWGNUcVR4K20rQnhaNWlHZFJCTEZtV1llVDZlVldvNVhtZWhaNHhIMzNkWmhheGhtK094NU44bVB4CmxkN3I4bFVtMXVMOXdWeVdwa2IvL0lSM21OTmt0c3ZTbDBHUUxXZi9yZUN5aERGOVg0K2w4NnJ3Ly80M2ZIL2ZILzlyL0gvOGFmZWYKM1gvOGYyYk1vZi82TUxOdi9vOVgvYy9IN2hja24rQXN4OFlFdExKcnczbnpKcHdiRm5vRjk0YXRPT25nbUlDdTRPTEFtbE5PRGt2cgpWZHdjczNoblUzemh2c00rcTl3eDIvbGUwUUVDRldlNFFDYWcxWjBnVUhHR0d3U2dWM1NFVU0wcFY4Z0V0TG96aE9pYWRJY1E4Q29PCmtWbThtOC8wV1k2U0NlZ0tyaEtvT2NOWlF0QXJ1RXVvM3FURFpCeFkzV1ZDUkUwNVRRaDZGYmZKTE00dDRQSU1kOG9FZEFXSENxYWQKbkhhcEVQUktUaFdxT2VWV21ZQldkNndRWVZPdUZZSmV4Ymt5aTN2ek9UM0Q2VElPck94MndWU0owNDRYU3FCNEpkY0wxcHgydmt4QQpxN3RmTUZ2bmxBTUdTVjNkQlRPRGEvTVpQTU0xTXc2czdKekJtT2NwOXd4ZStMeUNnd2FyVGJsb3hvRlZuVFJJelpTYkJvR3JPMnBtCmNHcytZMmM0Y01hQmxWMDRHQVl6NmNTaHBMcXJ1M0V3SEdmS2tUTU9yT2pLUVZxbW5Ea0lYTjJkTTROWEM3U0thVGZQT0xDeW93ZXEKVGJ0NkNMaTZzNGVxVGJwN3hvRlZIVDVFemFUTGg0QXJPMzFtY0d2Um5qYmxESXFBSzdpRElwMDRtSFVpbFhnVmwxQ2srZ2J6emppdwpzbHNvS01QQnloUHB3bUlGMTlBTWJpMWc3TFRMS0FLdTREU0sxTjR4eGw3RmNSUXB0Mk9NdllyektPaTdZNHk5aWdOcEJyY3E2THBqCmpMMktheW5TYzhjNHU3cDdLYWl6WTJ5OWdvc3BVbkRIMkhvVk45TU1YbFZRYnNjRndSVWNVSkZpTzhiV3F6aWhJdlYxakxOWGNVUkYKR3UyNEtMaUNNMm9HdjVacnN6Rm5WM2RUUlpwc3pOWXJ1YW9pZlRWbTY1WGNWVUdGamJtNnVzdHFtay9MMWRlWW82czdzNExxR2pOMApkWWRXMEZCalpxN3UxQW82YTh6SjFSMWIwL3hacnEvR25GemQ1ZVYxMVppUnE3dTlna29hTTNKbDExZFFVbU0rcnU3K211Yk9jZ1UxCjV1UHFqckdnbk1hTVhOMDVGblRRbUpHck84aUNWaHB6Y25VbjJUUi81bk55WGphRWE0KzZ6eGRkTWx6MVJ1eGYrK2ZsWk5Mb2lVaisKNjhvY25hcEdsdEtEUEtrb0tLK3hCTW1hNGhzeTlHQ09wcEFDQnVIN01pckZyTWdpblEvQ1YwRVNROG14NkpxMHZXRUJ3RFNsZ0E3YgpKdG4vVWlta0RRNHVHaExJcUZFcG0zOWFnc0lqcmRhUW9HSVN3d2diWG9FaFFKRlBBNmhXUXBlNENYZUVlWkptaWcxSmJEVjg1b0xZCndLa1VIT0JvTCtSVzhEM01YVHI1R1NCZnJVNlk4M1FHQkJXdVJORTFkTThtQVdlM3JLQkUwYTVIb2RSRUg1ZmtnOFkzblVBYWFWcFgKb3FheVJxWXhzWUxHNTVTS2JVNnA5YnpaSzdzbkI5MytzTFJQWnp5YlRxMjE2dXNaUHErV29hRkNrd1pNRWpUVTEyeEszc0lGeE5rbgpzd3I2SDM2bGQ0SHdkaEtGNHRsa3pwU2d3LzdDTmFnRUphbXEyUXdjdGhVYmpHdkxnblpTQzU4UlgyR1RPMGN0UlMxR0hlVzg2VG1sCm5NdWhsS0JEQS81Vm1NMEQ0RG4yRC84UUdReXZoOEwxbk5xMEdmbU82Qy8rSk8yYlM3YUMvYkdlRXgzMW5EcnZmNGtxNUpZZithSmsKZDVXZnZoQTJSL3hZcWpsS1lacE12b29nWmhhVWlaak1jemNmNDM0VmpBS0UzOVRURjFtWVlzUWJtOHQ2ak45MVluaGdxMk5UM2ZJcAovUEZERWczVTJBakcvNFl5b2FJZFNvdlBqV2ZVYnRRZE41anYrM0FGWmlDV3lUaWZNSnRLVmt5bUl5eG1GeXp5eVNHYWozRy9Fa2FUCnpzd1lhWk0ydm5mNkVkbkk2VjRveUc1VUpGMDhxNUpvQytYZktFUXlsNFdvMmQvb2VRRCtCTCtrTUZZVXp6ZU9hbUZTa2l6WHNCRlYKU2twU1o0VGN3TGx2YWtaL1p2UTZGSnBDdGFDUEV1OTlpa0s5WCtJVWpmZG8zVC9xZlJKRWl0dmR6YTZmd0EzWXJ2c1gzMThzZU9OcQoxUlNZUGp0TVN0bW8wRVpEMlg5c1RsSlNwTkx3VWZxUDlhaEVQYzBibVgxcHFxNHdDMm5kUDNSbHY5ckliUHhJc2M3MEtUeVVSWlhwCi9TeEVTYzlWOGFjajN5MzdCWXJpQTFqd1pReUhRMzJ3eDgwZDdVWDlRSVhYVmNRdXhvVHlYbzhNcUtjRllUbDNuOXhUVnZReFBKeUUKeVM3OWswcVdCZlNjbFhRZkhaUHNBMHlXak1TeGlDcFNQY1Nacy9MaG1zV3UrQjc0RXZoMkV1WFh0QThxTVRNU3o2T0VSeWg4c3QzdwpuVHVLaGpheFRCVCtqUzFQSFhhRnlUN2dqbnlZbDdaeS80d0Q3dEpDNWcwOTc2MnRtVVZudjdZMUYrdjBlMXV6aTg1NmNTdFNPMkttCm5jZmNqSGdjR0I4R0l4cWp3R3RtTlE4cEQzbVlhQk1qRVk5UjFKSDNWeTd3RGF1SkhWNFdsblZqNzJKaCtubDZoR05tWWRqaHAvSWQKTDhTOFh4WHorQnRaWVltZDcwMnN2WWwxNmFkdTNjL2R5WFVXcjBBM1hBZlJhbzJXY0QwYTdqa01GKy94REpreU14Z3U3TXVvY3dwTApkSjR1ZjQ0c1lONnZpbm1jNGUrbHpOSENxbU82YnpmQU9LK0ZuYjBTbjRiTEdYcm04MzA3bnVGLzNYdENNa0tvL09qUFhIWDBlL2hrCmZ6NExJMG12cFBwcVlteWtKOGY4Ykg2QzdTSlRwZ2FuRkdDSTJ1WmNjODlCd3h3dFZpaXV6N1NHWXFHUmFIeWMrWHpQcGpjeEF0OHQKQnJtUUpvSk9YRm1DRDdQaTYyRDhtUjZ0TnlZTGtDTVBRYU1wZWxnaUNLcmVNSWt4elM2KzMwdHZkS09keDAwVFkrM2RCenh0UUd2SQpETnFPOGtaU2FHdVhLMHhtRFc1VVpBckFPSTVzTXQreFZ1cVQvYWhQZHZWZ3J6NU5UejBtMkZyL3hobFNqOWxWanpuWnN1L1V3VWxECjB4RVluNWZUalRSVHRYL1lsK3B5KzNxeXg0bFpPaWtLenZESEEwZVorOHFFQnNKbmZmV0ZBeDZ5TE1adFJNMkhidG1YNzdpL01TbHYKbmFvR0RNNDB4Zk9BY3BlYWxDNFNKWXBpcVJ6a3lFTmtabTNqUjlQVjdMMHRYNHg2Zis0aE5JejJjbkRtaHpYNkhnM0hIQURqUEpwcQpoY1FmbGduTjFzZStNdzZCV1U2RmIzVGlhNHdPSCs4enhFQW44dHczTnh3WlZuU200MW5mZmVsNlFFUmZHbHFsQlVQcWFCZEdneWk5CktwNkZJYU12RFMyVkVpamxKNzlvN2txb1BvRTV0SHBRNGRrK0JZUnJZWkhsNlZZYloxOGNINC9KWTdkclhxY2d4cWZYWUwyUllhdEkKYzVjWXhvSmd1U3JjQzBIWVpLa21QMWxPUGdtMGhoV0NYTGtXMEtJbkRaUXdvVWpodkxRZUNRTzRvZGFlQndGKysvYTdRNElkeUlVSQo3VENndGVmNzRzdHdiejJTU1lwYTh3d3U5MTQrUGZyK3lXSHRpOXJkVm1mUTZwWW42Y21uTmJwU0FTTUY1ZUhIc1ZzVk1Cb2duM0pCCkxsMlRxWlRlT2trYUtlaGdxZkV3OHUwb1NiSXV3NmZvRTNLNXFBUjFWMHpVSlZFR3B6Q1k2RnBPYVZBVjBvYS9KWGgrZ0xKSjZ2aU0KVDVvRE9sRW9HMUZvTlA2VTRQclJRdHBMN0JhR3dqTXp4anFEb0M4aUo0dGFnWkVHTmZ5YlpXZzhNN1E3VFJKeU1FVWFTcG9DSDduUApaVVF1TEZ3WVVCMlZBbGxwaWdRblltNW90T3FZYWR3R1JzTnZtVWtwRHNvb2RKalZjZUVMbmJ0K1d4ak9BMGtaMmdRSVQ1UFM5TWs0CjZNRHVuZkJMU205aWozZm9ZS3FMQzNRN2dWbU8wNXFDM1N0REk1MUFucEFocVNoMHZzMlM1YmhzRGxxdloyUVd2bWJwQWxzWExuRmsKc1JJdWJWSU9lMnRCenZGQ3A0YjBMbkxpWVF3aUJUckQ1cXFFOVg0TG9hMXdFVW9sR09xY0ZETExNQ0YxQnZNWW94QndvdU1Mc0RDeApDcE1VQ0xDMkg5eHpNUGNkckMvWVJrbEd3VWNCNnhMVDFtTzRHS0tCNnRBTGxFcEt1dldTcFFtNkFWeVRXS2xBeHoyY1ptQm1rcElGClBjMEtQUFJubU9HUXVvUEpEclY5UHpkTGhNMXZXR1JBSHI1aGF5alNHeVBQSkFHQUl4YlBCSGU2TkhXbkxtVVYwZldzR1prYTdiWFYKWnphRWFiV0J4T2lycVJGQzRPcGpSTkdWazZOa3d4aFhIU2VvTlQxU0ZLdTIrbGpaWU5lSjBYTEpLVmNkcnhuY1FseTR1M3hQWTBDRApjK2NrRE05N0RBdVFBRUlON1FDWjhqR3ZlTUFRTlR3OUZOcGZja20xZFV6WmtFaE92V25TcEVDTkc1UlI1WURqS09mQnp1aE15aFI4Ckg4VjFaQzZiNHArdVcyem9oaUJIUDdJYlJqcWxiVWZyUkVZZzBBcFRlaVZDWU41TWVybElGclIxNEFOYm9JL2lsWEk4aVNsN0FOTVkKZlFSSGtqU2g0MVZTb09NZmtHRXdCbXhZV2ttVjJ5clN3SGFwOE9WcEc3Mk9FeW1qd0FDODFRQVRML3ArUUdrYmNNOWxpR3lBcGx2ZwplQmlhaXJCdlpUaFkwRzBwaFV1aGd0RStDdHJBeFVXdlp4VGFuaGxncWtsQmk4THUwaGd1ckFHUHpYVUNyQ1NER0V4VmpWT1VJdGNUCmlzQjNYSm5pM01IZUl6ck9oeDlTRzJ0OERuc3Q5TThFQ0xRTzJBci8rRGllZHh2S0dEcDZHbVZjdmhVWVdMcGtadDhBQjRnUXVhSGEKN2hZVExIK0Z2OEFjVURtdUlFbzVVdVM0VXVHb29QSFpYL2lScWtsWTlpUllwRlBXOEoyQnRDQ25BTXdscmRHM2x5clkrdUd2SUFFQwo2cDBRTXZWRHdkOVJFMGh5bUJRZWdyUGFHQnlTSkpYb2RFZ3hISWVDWnV4N1dERGNDblVRTkpuaDZjbytOYUFLVkZkTlErblVwclFGClFXUjFVNHBNZ1Vya3A3T3gvTnFHaTlrNjJHQkNsemFBOVlJZWhiT0JYSmdCUW9CaTdKTGgyZ0FnSENHaExNaFlZWWVDUm9RUm1ScTAKZytseFhCenBnbjVQR0NpQm1WQXIrQlFWdmNBM3NmM01WcVZBM1VhdEMwNW5hUUVEcXpCRVc5dUR2ZFJiL2N6NjhlcytKWlNvSFRRSApNK3huMTI0NkV3MGJZb2ltWG1kTFNJUjlqaTJSYkUxSVJIVHNsNWtOS2hObzFrM0l0WVlkS3hCaXp4VVlJb1lQU0tLYlBLRkllb1RrClpBUWpPenJPZXcvQ2JjWG1yQUZJUnRFRzBCYU12aXpjZDl4UFFCZUhobE9xZ1FDWDdNeDJqaUZIRWNUWVorc2NTRkNXNVFJUEJOYlkKVTJocGJkdnVxbVhhOE1adXJJYStBR0tOaDZCbEg1WldqZ1kxaG1FMlk0bnhHNEM1U0FraEEraVZHMUkzUFFoNmhBSWtvRUhEczBWagptK0x2MXBKbnlWQytkUWRDUzQ3N2FxOGVLYjZPQ3BLSk5obURCNUdVcUVTYWFFc3JMTWN6elYrQjNhNGJEdUM2Q1VzT3pqM0dmMDJwCjBkWWVmNGZXOFFhS3IyeG56dGcwT3JBWm9BcVprdHhPckNxQlVUaHdFc1ZBMWdiTVYyM0R1U3lFaGlpbnQzKzUzalRFWTBJaFpkeFoKbHN1ZG8vRE44a0pFTlFNRTFNczhzV2tTWFRWNm1naDBuUmptSzZKTnJHSHZiSUo4VmJpM0EvN2NZWU50TmNzb0t0Q0RRbWU1M2pTRQpNWEd1UDlxR1F2YzlDSmNWWUkzbXNxUWd4bmd4QnZSVG1Kd0VyK2R1ZFpJR3lrK3AyQVl5WnpmVytQaE9EVlpiWm1pL2NkOFZMU1U4ClVEaEF6aTA0QkRUN1NkR3dUYmp2WkhMSU1EYzZGeENvL0dLSXBzZkFnTkFHUTdnWERnVjNjb0lNdEw1QTVVeEhoRUhWSWsxOEZWU3EKWVhRWUlYL2xGdm03NnhKWGRsMTJ1RDFGNkhWQ3M2a0RwSUthNE1yOGxYSHpkOWMwVjNZZEcrOTNhNEZoQVVwSVVKZzBLRUVaR3FkZwpiOWNKMlN3em5jaHQzZzIvYTU3dU53ZjFVZk4wT2tCbGxhQVVjdDJqaS9MY2ZpU1hPR21sS1lXQm9rbEkyMWdBL0VCT0c1TFg5SlY4CmU3Ujc4RmVzcFhQN0ZjYlJGbVdrSG1Bc0t2Y1ZWcVlUM1ZMUGcxQ1Y2R3R1TjB4RUtXM01DWWFpK043UXQ2aXo5QjMzQWhsOWhxckMKZlNYdkQrT2tMN2FMZFN1NS9jNmlKNzY1YnMxeFgrdnFFUnpDZFZ3N0FvTWJQd2RsMVQwc2k5bis5V1JBQnowUmxpK3BLUk5ONjNMQwp0NzFDcS90WGFIWEdTM01UOFI5ak0rSjhiM3JHak0ybmVLNU56VVEvUjYxVE1KNjhZL05haDdFZG0yalRrMUdOVGIzM0QxRmdacWN6CldLWThzNVBwSVNaK1prdHF3aUZtMWhDdjBPcitGVnFkTWNRdVhoVWxzQ0NsdXpCMHJRKzBiMG1SeVVXQ2xpazNCdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJYkRoQ1VrelBDUjZKOHhuckxyeVh6S1duSWFIR21XMGpuVzZEYTUxUFlNVnYrUlRHYVVpb3NTQ3lBWFJ6MnB2b0w5bys4RFU5dWZXUAo2bjFYL2pwNk1DaWJKMmY5MXVWd1lvY2lEOXNMUEsvbHhnZzZwT1Y0b2NhZTJDZzBCclFiUlRjMmM1bnF0UGJ5d2V4TkRlWlRJVktRCkVWTjdXNFlPWEtYdDVoYStITGt2ZGZkdCtvdjdQS1JwWTBLVEtDNXptTHEvN0dVWVpLUGN2aG0rSExrdmRmZHQrb3Y3UEp5cjBxRHIKRmhRWWN1SFdDano2SlpRWUprOXV3Z2Q3WTVPRnNyZWRmTnZ2VVRnTTlMZGUzd3NKSCtNZjlyNjl3Rjl5Kzh2ejdpWDgrK3owNTdJMQoyck8zNUdyN2c4dmg2OXJUWnEvNXFoelVuZzNhcUE4dC9LMW1menhvZHJzZGtPUVhyenN0Vi9JN29QNWVMYTFkakJxMUYvM0xYdnZlCmRObFBhL1c5dStNVlJMS3d4bmhoWGJzZ0ZGRGhVYmM1NHZJd0daNzFnSjJ2eHdvZnZHNE9XdjFtdDFhdlBTOTdyVTZYaXhPS3RpMDYKVnFFNSttUUluM3V2TGtzdTZ3WnBFajJod0Nya2hoM2UrN1RXc0t5R3NSbGo5QWNlc0tsZXc1REUzWWF2bUhrVDl5VDcveFQzRHp3MwpZeEJNN2NHVGsvMEJUTjV1U1JpT09xZXdlazRPanFHa09VR09uaEJoei9zWWFIVkRKTTBaYktBa25ocjRGZWNLL2MvK1B5Z015YUsrClhxbnBkS0psT0lpTnRadGNVN3VhMnNXUm9HYmhnRVlORmZTL0NvMSt5SUdadGFwd3VrMHVLNENCV0t1eGZwZmRxL0YvY1h6dTFWejQKWk5pQ2hQK1VvQko0TTlUTVdjaEVrVjNFam81dnkxKzRjRTJNZjAybnZ1Si9jWm1wRkZRU1dqdTQzalI4a1JnRUFkcGhXa2pMZzJRdQpEejdzaUJiMkYzN21lYmgzNzIrOS9pODkrZ0liNWQwSDNYZkRZZlBrOGZHbnRYdmZ3b2pCcG5QdkFleWtiMHN1Y3UrZ2YzNkJVLzlSCnB3dUVZaVVZOUU2dlpndFlxRlhlNzdraW40UHVldStIenJBRCt4MGluTVp3UEdxMjNxeUFZYjg1N0xUaTZvUCttN0o2ZlVrL2RKOE4KWEVYQXVPaXA3WHUybU9OQXJiSnQyL2tlN2gyV1o3WDd0YjNhM1FnUGJ1ZjNhOVJzN2Y1ZTdkN3o1bUEwZzdLRGZxOTkyUmxWSVdvQgpGaVIyQmU0dTVBWGlDcHg0eGxQbTArbUpXL3VuUUR1VS9ZRSttU1RQUWVYQ3hGVmE2NElTTnZ4VXUxamxKV2d4emxIZkcrU250eHA5ClB5d2Z2aTE3ejlydGlteStUZ2JoTnB2a2lzTFg0Y1JXME9QeE9oUDJhVDZqOGVZdWFPTndqcVpuKy9KQ0NWQlJWL0doZkNpdUxHRFEKZnJmc3RUOFVod2paeXFzcGtCZnF6eVZrNzk3RFg4dldKZmFCZnFDNlU4S3VoKzdDZFpaejc5K0hpWEcwMjUwVGU4L096b2JsNkZNYQpnRG4xWFlVbjNlNGxuV3I2ZzBiekF0VHNlM1lud3B6eWpuMTN4NURXam9DVnRZZG5aN0JSUWVudk9xT3JDTjY3enk1SFF6Z2ZSZDdlCnc4N3dvdHQ4Wjc5K2VvM0MyUzhiQzdka1Blblo3bFFTS3B1MlpqNzBKdlRCSisrMVNta3llS1JGbmtlYTJHMEk0YTJaUlZ0RVUrWGQKcEphYWRMMTNsSjNtdkRhYTgwcTIvQThpaGNTSFVBV3RSbkE0NkYvVWpsODMyLzFmRmlzUVdOQ1dhelE3c3pXSE1WeGVWMWpJVEUvSgpSYk16Y0tTaEJiZDJGMS9OK1hTT2hQZG5GUEYrVEIyMnV0Um9sbkNyN2ViZ2paUHpGdkM2UC9pTkFHaGZjN0QrUmJNMU5neVh3L0w1CjhkRis5M0l3VnZjMEFNZ2UzQm9PV3ZIMzAyNlB4ZzJPRU01Z1RFTml0YTNhdzE4dm1pQmQ5OHV6L3FDcy9WQU9oaTRxN3BZM216RUgKNVMySTVrS2E5UmJOTzJWL3ArenZsUDJiMlhtdks1eDFkd3JZblFMYzVaTHIyMnBtaW5seVI5VU8rb01lN1BnZlNzeFBJSzJvbXpVRQpCclk2WlFZRGVpNkg4NmI1N2tDek5RZWFxM0ppWjZ4ZVJiRGs2NjNEN2xiam1xeEdWSEtTTk1NZ092Z2dkVUxPSmY2QUZnYUY5MnNtCi82NloyOG51VlBFRGs0djJOU3BuanlGemJRMlB5dWJvTmZLNTJsNkdVWmc2NTczc3hjSzk3Q09TUXNWT0N1MmswRWJwQkdzZ1NYSzgKZUx1VEpFNlM3SGN2eTlxMzVicDc0RzlabEdBb2R5b1QrOGFPeUdSV3VHajdFTWVkYVludnlZVElrWW1BYmdIREtpaWcyK2pwWUc3eAova0xvTm5paUU1TmhtSDlEWmpJM05pKzdTQXFLNWNicjY4TG1mNlRJTzJSTldraGg1ckpHYkJOcmpESDRTZ2ZNRzYwemtidnBrZ0pMCk1sUUJOWnU1c2dJL3plVUpKcGZjRnBaa3VhRzUwVkNTbmg1eEJqKzZBWUVzUVhzZnpxSE1vTVZ2TGtzd3ljclc4Q1RQMGpRWEZJK2EKRkJuZkV3SVd1WUEwV0Y1UzY3bThVQitHRVIvY0dIWXJLeTQxT3FWd2VwM1NnNzU0d2NzSzZrWnFweFJtRkRBcUl6R05VYjl5TG1PdgpaNFpkcjJNdnVnRjJEUTZLclpnajJxUjVnZk1nVFZKTWp1MFdtOTJYTUJtQXdGdHNxQ1NtbU1ocDN1d3dHemc3cE41TmoyWFRRNms4Cnh3MUs0bzBBT3pjMDc5Z0dVeVBpMU5EV1JETm5hbVNiT0RXdWRXYnNEc3M3QTNvNGNCNjhIdlRobVBuWHpxdlhYZmovYUtQT25ldmkKbFY5OFJXMmhUY1ZXb3RKWWVLNWRaUnI1MVdOSzdqMStkdnJ6QzVnTlg5VGkyM08xWlhUY2l5OWFZUTVkMTQ4UWcvV2c5NnBidmlnQgpHOHljNy9yNGs0L3pPdXdBS2NUWmlmS0g1UVhNNWVHejNsaTRGemxaZStXUXpFR0ZCMU9Oc1lJRSthRTU2UGhFWjJORTNmdSsxMm4xCjIyWDE2SmtYMVdNUTU5NFNUNlFTQmEzZzFmYWVaSkpiWTRReDJ6eHZsckJ1Wm1YR1BGYjMxdmM4bDVyM2hqYTkyOUYxdFV6b3VKMFYKQlQwWHJXQ1dpWlFDYnREbWdQcU9zOHhNZnBnLzBUQXIxZXJUN0VZT25WYWF1R0E0dkVMNm9lSXZ4bEJXc3pNclhodm4zYzQ1Y2dCegpKbUtxYmc1Q1BSdFNmQ3duRy9pNU43cW91QzUyd24rKzhKZWJLUHpkTW5NUjBYTlhYbXBrYm5ZaXZwcUlsMlNBM3F3VDcvV2RhUlprClRKc1RUckIvQ210cFJqNm9KRm1ZRVlwU0pHMVEyS1c4cG5qNGozMld1TGZrdG1lUzZCdU4vdDZBTVU3ejZ4L2lqODAyTW40RGEzUE0KSXJ2SW50dGF6dXRqckZ6UCs0alo4dnVJTjNIOWsyOHE2cW1iaXRsNzNGVFVremNWeGNSTlJiSFJOeFZ2VFF4L0ErSjJsM3RwSjRJcgo1MTdDQ1RNejh4Sm1YTUkzTStuZnBKYnFOR3VrR0JZa2lpSTFqVlFrK2lOSXZBUlN0S0JRcUtTUU5rU2pLQXkrdTBCME4zSmpNQlA2CjdlVDUrTmhrMjdOTDdQcmpidjhYVE5TNVdkNjNuWXpicVpuT3h1OW44WHRybVRHcWFrcm03YXFRNzZNZnlwMCtlQldaK1UrQU5pKzcKbzU4aWFYbmNPYi9vZW1rNUo3SEorenQyWnhFbzNOUjREdUo0RlBXYThvbys3TFZEVnRHbHFVbWZON3ZsYUZSUzM1K2ZWdTd0M1gvRworYlYvK3BTb2Z2bmIzaVI4NzNscm1pMTNmM3pkR1pYMnQrb0xCd1lUOWc3R09ETkgyTjBYai9kckw4cTJRNTBZZXNHVlNoc3RWTzdWCk15NzdqN0tMeTk0V056SXo1REFJdGl3dTkzaFFsajFYVEl1c3NJbnRHMExxMUlhNmU5S3c5TUc3SmhmTzg5UlFPR0ZtQ21HaWhMcSsKTUY2L2NJV2xLZXdWUUh6WjBtWHpGMk9GbnpaZmxiMVIwNVVIcFFvb1JPcXl2TWhJcTVLWnBMc0lpY21VdTVSZ2NncUZGWHc3UWRqNApWMEw1bFNqUzJ1T3YwcUsyLzVYU3pMWUVxaHFiZDE1SlJmaFRTYzhGSjBsU1VBTE5BcEZSNG9ZRVgrQWpoekpGeVZtMEVoajArQ3VaCkE5clUrQ0hMb0doS0kydnl6TjZIVEJKaHg1cWpuVlBmelRGOEFIcjhWWkZFK0xBdThKYWl4aE44bHhtUTVOcG9kNmx5S3RwWEVOMGUKSC9aUHdMK0FNQWtJcFZBVW9vOVBEdUk0WkNLMVVlcUFXNlgwbzRGcFdSaUtFQlFwTU4waDFOaEI3UEQrVjdwZ2hFcUwxUFVuRlhtdQpIQ1lYN1Y2aytCK2FSc1JNeGlTUmRTbnhMdVdSeGljSmM4dXdsS0pYWVdLbk5yQTU1OFNsR1haeENwMmdrWUJoak5CcHZLSWg3RjJOCjFFNmNJa2x6TzZtMXU0ZWFNZWVBV1lrdWVNS29CQWt0c0h1RzhXWEtDR3NlQjBRWlRRZDhTUU1qS0J2U3h0SGlBM0J1cGtqTFFZdFAKMDBEa0F0QmxpaGVOU2ZGVk1KeXFHcTlJVUU5VElOamVLdEdaMURSN3BNMFBZaEZSdHhUeTN6RC9nUTVhSG1tcThCVTVaQnFsd1lXRgpsaGh0eHhYRElCUnlRTnE4cnhHeUJIbW1lVlZrc05TMDdRRE0zU3kzekJjOGhwNDZPNUV0bWxSNTRvVHdpSEtsNko1TWtlVFVLNlV6ClRjRVpPQUV6MnkxL3FjaE1kY3ZnWWhVNlk2bTFXZ0lWd0tMc1ZNVmVTY21yS2M5MFNyelIwaWp2Nm9qQ1F2Z2FRdWlJU0xFamVjN2MKTG1DeDJOV3RGVFdmcEtwUU5neWZIaXJ4bWJZVGZNbE42Q3dNcHV1WkFieUs2Rk8yWXlTdVlieGdmZEdhVTFvU1JzRTNSUktlOWFuRgo2R1k5VFhvVUYraXU1RW1xSlhVQ3hJUndpNm13VTFWS2l2bFZRVHBpN0l5OWdtSm5mWUtMRWdZRWU4WURxUXF0cVE5QWVVRkJOYmlhCkVrdXd2UU1WaVIrV2ErN2FENittak1XdlVMeWFRUHdnT2lJcWt3bE5BNEZ2cU52NDlNSWtGTGhFRDZZblBEWHc3ZlBIWHlIRmhSY2EKQW1hYVphQXFwSDNmSnM4a3pZZlVyZnZBUHRzL0ZocVMrVmNrWWNmTjZPR2NCRjlXNWFVUTlnRXJYakhDQ0tkUHZBMmtOQTVTOEM0bgpjMXg3c0hxVkpQbU43OXJhWFRyajZXRndwMEQrZWZLQW16aHBjNXI3bmxNZ2xSVXRPc0NaMnRrTGROQzhNTG05YVc4c2xBU0d3a25qCmVhOXg2eE9wb3RXWmVkR1kyb0VERHRIR0RkeTJLd3prV0VGeTIyOVZMTWpUZUt2Q1o2dGhxOEloelQzU1RKTWlBc2lVSUtUQS9aeHcKd1Fhc0NKbVhhVzVBcE9ZOEFJQTB4NjdTaWpYYXM5RmtWcnJsOUZJcTNYNnhHbFFpQkYwbzhoTGNYMnBRTWhvZEZPTEFBRzFvbWJEUQpUSVV1eUVLakNwRmJ3WjNDN2tYVHA4Z0xDaWZqWE5uS2loWHNQYUR4VzRUQlpTeG95OGtsb3pVeXRmTS9Vd21oelZVQ24ybUhNSUlHCm0zZWVsUGRhdDNmRU93OXRQRjc0cGZaeFpMeGdLQkppQXJBVEh4Q25TM2ZFQkRmbXVPMjRPU1hHaHd1bktPM2JYck9BTWJJM3NnQzMKWlMxTWZhdFhBVlB3eFdkY21idzd1Z1VKU3ltd3RrQU9XTVl5WDFXV1dXR1l3VzVrN0NMTUJDMUxBMnViMkNpNXI0S1hWZUtDOFFncgo4VFVscVdzWGszWE1ramI5ZWMycXg1R3VQY3NoTzE0NDREaCs4MjVwVlN3VGFqd2J0RjUzMmtzcnVXS3VIcXUvKzYrcDBjdnpjejRlCkxtclhGcHVKNG5HLzJ5NTd0UmNVVzdVRVQxd1drYzAzMmtZSTBEaHJDMUtWUlRuMkp5cTVvbllYdS90NDBIeEgyYUNldjFycDBHUDMKV3BTZ2ZoK1QyaTVtZkMrVGtHallmbWk5dzduQkJuZWlnaVZtZkhCaUdlZVJ4Tm5wdDM5VEtDdWdVbnRmRjlZekxYa041eGVhaU9ILwpUbTlESlVLalJOSXMySTFPTTlwVU5DajZ0S0hDSGtwQnBpQ1liTWRTN3Mva0I0czBvN1dJU25ubVJTY0lYMUltdEVCaGdCK1NMQ05rCkVyWmIyczJVLzMrOFcrTy9LTmhZQXNHbXIwaVFvM0FwZFB3aHliVGI5TGxia3g4Y1lra1NrODQxOEMrdmJBbVNsOGhVV1c3Rklld2UKMm02NFJVNXFqdkgvSDl0OGREcStuOEd4alFTcmhIT1hzUW9QakxVOU4yVGNwY2tQRG1ObWQwalNKVEtXT3JDOUdPcWJRQTBzb3c4NgpkY2ZYM1AvZnpZdEUwYmFQZ2h2KzVWTk1yblJoSDAwUUtjMHpVSjR6NDg0MTNKZkpENndBSkhTWXdma3J3MEhyU3VsdzZOaEdlb25DCmdZVi9lVzM5V0o3V0R2cmQvZ0RPNmYzTEM3L0szR1FHQ2EzNDZoc2ZaaUlOdTRnVk1wTjZGVnQ2UlE4a2ZwS3hHWUhXQmVrNWJxUE8KV0EyUUZpTlBGYXRDMFo2ZGVSMEt5RXhwL3dBZW1kUVpHK1lkVXJXZU9xVGFQdGlSTEhCRXBVTWg4REViMGhUakE0aEZJWkdjTkhRQwpGbU5tdlRHcHpQQm1tOVVSN1ROMGZNMXRyQStTNW1uR1MwbkNTdGMwcTJTR3pNTG1UV2FjRXNmWDVTSkYwL0VrTDhMOEVoYlo4MzF2Cm8ySlQxQ3J2NWh4MWhxUFlQRGNlTXpEdDdJalRYY3k0aVJROHYvRUxQRk4yTldyMUtxLytpQ1IrUWhEUi9CZjA2QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJY2pUcTk5d3p0OU1QMzA2OU0zajNlZi9pKzR2eFdrZzFVT3kvUDIvMnl1N0pRYmMvTEczQlo2NWNjMVErNnBUZE5oZDgxT21ldzU4WAp4MGp5Y2RtRTdSb1pNeWpiblJHK1JJOFBhMDI4VEgvM3I4QTBlb0N1WFh2VWZOc2ZrREh2THBINjZlUmJlSmJHK2J4eTQza0lwSjJYCnZSSDByNGtQQi9MMzJoZjBMYklSMjBlSnJWVjd2MXVXN2FQeWJQUkRFNjFvdGNrWC9wTGFXUmRmZ2VyQkhMZ1lsTU55OExhc0llRVgKMklmaDRncXRidWVpMXVxamtmZlgyZ0E2MmUrNUdsbjAzR0JjWTlBY3dteXJ2eTFiSTVCRnA4MXVzOWR5dmJyN3o2ZkEwY3Z6Mm90eQoyTzllT3FPcHo2OExpRVROMDN4Y2ppNHZLSnpjNG4yT1hSL1YwUERzdWh5aVNJQ0R0YWZsOEhYdEJUWGUrWTBNcjFFenRrYWFqTldBClpYRnhPVnBTSndsVVRuWHVxTmw3ZGRsOFZkWmdMbDVlMlBMZTJRRExEWWgvVVY1Y2RvY3h0bWpRWHVCeWkwWnQvTmZ2K2hmUmIvZGUKUGozNnR0OHVaODZGKzdXN3Y1NTNlL0J6SGRnMTZKekNnbmZEZE8vQkFKUXVXK3VhVVh3QS9GRXAwSmk3N1VIcEdNY3VHLzRWL3huNQpkeWp2L3JFM1BIbmJIQXp2UjlNcEx2bzJNSkxnd3pubGVuNTJ1WjRNeDc1dEtIZDYvVjVaZ1RIZGZ1dE4yYTdDR1M3NWdTYm1WZWs2CjdmVGEwRkZSZ1RhWUhMQm1yZkJZVGw5YytnTU4vM3R5UWl6a1JDWDZPL2pBYTVXSnYzUlVOMm1oZi9HMjhsTEhvcmM4bzVFOFVHOUcKL2ZQYmxXVFhOdysvR0RaUm1VQVZCNVpZMWVsNDdldmlHQjhqV0p1dWJNTXFIWjc5c3NhNzhTMHZneUcrNGIzaG8xeUhjN014ckxMTwpvL1NYVHB0dUN5OGRYMWZ3ZGdWd05acGVseTVqeDFLaXVPVHRVaVhSNDdHTXFIZFY2SGwzMjZUa3VwRExLUG0xa2ppNWJVcjhpWHNlCkdhZjlFZWdCZUxCL051aTg2dlNxVURWZFp3MzJmQkoyeC8zTFFhdmN4MERZVzkvMFlXdTY3UzZjbDZObUczU2c5KzFIOFo3OStIM2IKbVRTcXpLNm84T2V6dHFLeHVYUmNkdi9hSEIzMlcwZjlWck9MWjZraC9UNXIzdm15UUVzNWVISVlsNHgvL2c3MUkyelY5VjZvUnRKSQpvcTYvZWZEazBXVzN5M1lhRjdRSnY5b0t5bHRubnNNdkZ5V0ZlajhlZE5vbnVHUWVOVnVsejNTQVEreGVjWHZlNy9SR3lNMnBXc2RBCldiRGQwRUJNRnZtKzEzRzkxWGt5cjNVeUJEMzhkZVJadTZBczlqUXVxblNPd24xbTQ0KzYvZjdBaHUxUldkemRza1ZsOS8zTVdGcjAKQlJzQUZwVWt3cUlPNkxsa0VjNW5GODFXWi9SdU1VY0paK2lvTkJpdk5yc284aXB1UFM5eXNhQm9RS3JtOC8rSFR2a0x6TFhEem5BVQpMSnRHNjNRQllzK3JISk1UVVVES3NwazFJbk1rRlZqR09oTDNFNXhieEdUMzlCck44YmtMNHFEc2RnOUFXcnVDNlZ5Y1dQQzQ4eHVQCnh2eHUvclUvNlB6VzcvMDFVb21RYlhyUk1Idkd5VG1sdnZPeWJuN0RoR21TUWQ3YWJTTGJkYk0zNnRTYTNVNXpPRjB1dG5IM0wwZmQKVHErc2pjcGZlUlY2TTNIQk5tc1VTSCsvQkd5amQ3V2o4bTNaSGQ4NUFLVThPYjdvajhocDk3VGZYbUs2NXphSGRLdGl1RXlnRWRFVApFaTJwMVRXYndPZFBQYzRrUTVQbGgyYXZNM3dOcEVRemtWeCtlU3JNVWt6WWgrZmRacS9FU1JJTHJZVnJtMnBRY0h3SG1ZZExvWXlXClQxWXNYejRCejNmOWk3anJWZGRmUUxCUEtsV013MlNBQXhGVndUR0xnVm1ocXpFUVYvWnEvTHZzbGdPcitqM3B0Y3Rmajh0V3Y5ZGUKcmM2anptQzRwQm1hR3ZPSGFWNDFUODc3RGE1SGM4V3g5ZlduaGpiTFJMV2h0ZTYyNlpGbHlnOEcvUXYwVnRyTFpOT21pUW5OS1JjMApwYktwZHFPeEdXL0FKVlI2NnE1UGd5NzBZREE2N1RjSDdacVlUcjhVT2MyOHZIand3b2tRa0FvcUZncXcvci9ydjdDTld1TDd3NDdmCmpDVDNvM29WTVNIWW5neTVyODVqL2UyMHRzc2xZcFZ4Z21tcFA2ZGZOTnZ0Q1lGOVRvOXFqSUdHSUdzblFDQ2MyWnZKRzB6N290TVkKRittdGZuZmdWZEVIVDJvUExrZDk3elFzSnpDU201RFY1TnFiWHIvMUJnUjM3WlVOeVZoUXREUHNnOWd0YTZkNFdjY2x5Um9yWE5RdQptaGV3RHd3NzU1ZmRabkJReW1qbkdRMmF2ZUZGRTA0SHJYZlFacWNOcGJtTFdpcVpSMldiUEY5YUZEUWlvZVhJZXp5bldFVlVyeUtkCmExblpBVy94c1RJd282U0lPcmkwYU5TQnBXVjlCNFJKODlTWDVEUEVRYlAzdGprTUdvNFlHNy9uN0ZESCtJVGF3M1puMUxTQ2JVSVQKSTQrdWxUZVJVL2MrL3V3dmVrMU04Y2w3WUJNZWJ5RnJNQmtmY3g0YXZLcG1YZUNMbk42MjBoSHFFYkRDcUJKMWZMTFNlRXVpOXZENQo4Y3BOMlZyTDIxclZ3ODZ6OC9pSHg0LzZ2VkhRQU5Qd0F3eExxelBtZG5jUDZ2N3dHUHZ3ckdkekdFNys5ckk1dVVpcHd2bEYxKzlTCkU2M2o0VFppVzFUdCthdXpjZm9BZHZqZDRYUkJsQ2QvS3djVHl4bCtlTmdER2U1RlFkVHd3L1BUc20wbDBMaW9ndDhvTk9lN2FTdlQKMUFHak4wWHJWSkhYL1YvKzJtbFBFSDRFN2JKMGZ1TElXUjdZUWZOdVFUREh1RWFPVWhaVjhRZW9pc2NjOEdVSTN3RUdweHk0NEpRWApjWERLVk5GblRucytqclhuWkY2cDc3eGVIMGU1VUJITDlucy8yUENXL1RpOFJVd1VmVFlSWTFNbC9BV1hUR1UyWWVFbGZMSVlxekhLCmxsM0txZkZpczFsbHkxVGpsY00zUHlDcHFQWDZJV0NwMXVsUlFCSnFHS3haTFJHYnJxMTd3Zmg1NytmK2FZUFFOYnRkM2hHR2swYXoKcVFvZ2lXQ0hmVFZCd3p5OGkwc04zM1F1VG9FamI4YWx4R1N4QVp3Y0I4TVNxUmtzTGduN1dSQlRkNmVWd01ueVRIWkUwWDIvcXlHagp2K21mUHVtZDlXdkI0TGFFMGZONmR0b1puVGN4OUd4Uzd0dTlJaTUrOGVyOFRlTVVOOHYrMlZuRG1yUGRQajYzK0Rrb3djUEo0clBZClBvNzhjbGpDYmtNYnMxK2dUaUd0L1ZpZTN2c0JSRi8vM3RNKzdPZmxUNHZaaWF3dmlUTmptdlpVQjRhamJxTnRtNkJKd2tPNlpMU3cKbWlzZjdMRlY2bHkweitIbmJxOXlweTdhbFpIYk1BVmZZOWJZWDF3TVhMRUZZd0psWE90dW5JV2NPZEpRTG5JUlpzWGNVckhQVGVUegpTblhPWVRFM3VuQ09xMVp5MU9jQXYwSXRMamtJeldkNmJpOXQyWGpHM29YSkJ4SzFYVHQ5VnpzY2RON1NZMzRMQmdHeDlPS2RZYnFoCjFnVFg1aGVLbWJZQVZUK3lIUzVBTmxGc2F0Q3BGQjFXRm91MGRqbnN2T3JOT096TUZMbW56cm0wQ0NNVjdKOTFKczMyczJYNDBFcXUKeWlKMWJEaW1xZTRPR3VmZXpqZXZSS3Zmd3lSdGVGcGRRQXVXOUZ2aXFiMzBaTSt4TTBzUDJvMytBSlgzNXJUZVBWbndESlFGenNKRwo4YXd6UzEyNEUvNml1VUN0dm1vc25IeXVqQXU5RXNuY1VrUDB0VEN1cGVYZUxxWngyTHJvdHQ3TmwwcTJUS3MzYVFpYkxET0NzMTUwClZwOURINHhUdDNteG5BK3UzSUsrMHc1Vzl0QU50a2p1WXFraEoveFlPbk9wdUpYVFlXRlVxUU5UZm9TWllseFA4R21sZVhzMGlIaFUKRjhkbDBZSU5la21aMXFCL3NhUUlLbXNkVUYrV0ZCdEVtVHFXTllvR2c5UG1ZTGhnSE1kVmpMQzlWQ2c4aWtoYVZqYmFZeXJvUmFFYgpGUXI3YmxRb0czVmoxaW82NjQwYTdlNWlrV2ZMWEF6TytyMUY4ZzZMRFM5UGVUMm1zOFpvQ0lSNk44dk1VUnlDS29ySzY4SWl2ZkpWCk0xaHQ1eFRDRXdnb3RNUEZzd2JMd1hiVFc0eXJLeEJiMDN2YVpvLy9zREY4M1lSRFFMbUFTMWlvSEtIUGlIUDRSeGJmaVlManBiSloKY3Y3WGk4YlkvUTNxMnF4U2cwbmRudXhIczBxK21uRUttRlhPN1lMQndUWnJmb1Z5MWltMnVHUzNzMEJrUUFGMC9qWEhEdEp6Q3ZZdgpXZ3VrQ2hVWUxoaHhLdEMrWEdnVFdDQjVvZnBpTlFOT2RNUGxld1NWT3J2c3RSYk1FbHZHV1NONHBpelpHS2hPczlkalcvdnMwelNWClduWTBhSjFINnRMZDd4dkhqWnE5NUFpbjNIYnRYM2VQZjN6Mi9GK2YxdDdLSlllemM5RG1JcFZ2bGc0SlpmQjQ1ZjA0YzdyRDE2ZGEKNSs4V0hOdWpnbjM3SnZmMDJmb0JGNDlPMTdFdFJnZEw2UFBPcjJYM2VUbkFwR1JUMXBqajV0dnlLWnlkT2hmZDhzRzRIZU1LaC9WTwo3MDEzT0lKRjVmMyszT3NudlRjMXZNVTIzbDF2Vko4dzIxN2d4VHMzYmphbjJ2UERSODZhaFZwRC8ySmtUVkRqSnNKditxZTFaL2FuCnlPYVZaZU5HdUxoVU1NdmYyKzh3cFErT0Q1NDh5ZlZoaVRNQ2YxUi9lZmJIZjM3MjVZOWZmWEsvK2ZMemI5SS9QcXZ2ZnoxNGZQNzYKaTFlOTMzM3o2SGVmMy8za29OTnNEUDlndnYvclEvUDdMNzcrL3ZHZm42cS9mSEgwcjArZWZqMjRiR1dQSHNxbitSMmgxTytUWkhqNAo4K0dyejVNL2ZIMy8zNDAvZmYzbDV4ZkRyNGQvay9mMjdueDkvK2gzQXk3MHpXai8xVi8vZnZUMWw2bzhQdWg4OWVmV1lhUHh5YXVwCnBvN2EvNEQyc3NOSGQ3N0kvdnZ4NlBEbm4vYlZmOWMvZjNEZVB4ckM0STVlZi9abjgvdkxSNGZxRHovdS85ejk1TWU5TzRkbnlUZW4KTTVIOUlTdk9zaC8rL3M5L1BmanVvUEhEL0ViamNsLzg5UFdYYng3OTlQVVh3OGI1WjRlZjM3bDhkUGR4KzJ6dkRqSHIwZitjUExzOApQUHZweDJ5LyszWDM1UmRuKzY5SEI2K3oveFpqN1BpZlB4NjJ4TkYvdnY3eUw1LzhhUEZBbDRjSC8zNzE3ejU4K3VOL0RwKzBuL3h1CnY1Ny8vSWNIeC9YZjkyd2ZYamJibDN0M2lwL3ZmdFo2Mk5KL3YzdndXcDNjLy9MQm5mU1BuKzEvKy9uL2ZQYjF3U2ZmUHpvb0wvLzAKNXgrKytmM3IrNjFXOHcxKzZuejI4T3pvdFcxWkpQZWEyYUR6aC8vNW92UHZiOXI3M1R0LythUSsrT3hmbHcrT2p2LzRIK3ovcDEvZgovK1oxdW5mSDNQL2hwNjhmOUZxZm5ILzIxZFA3OTdMemYzM1Z5Yko3dzdQMHdhRDFSSHoyNWd2aE1iWU92eG4rQUd6TFBpbXpIOU9rCi9VWG40RjRUeGxjOC9lcHUvZk55djVzOVA3Y1UvT1BvenRjSFQ3NzgvWThQUHkvMEVNYmx5VC9ONy8rY0hmVC8vZG1YUDdULytZVTgKL2YxUGhQYlB2VHRBMEovTm4zNlBRL0pQODZQNWV3LzU5T2Y5TjUrYXVwdWFQN1NQRXZIVDc1OGUzbXQrK2NkSHYvdnN2d2ZZaXNFZgovazFZcU1qZW5lVDAvejVSOVBtelB6LzYwbjM2OHNlSGY3UEZEejUvK0Q4V21meUhmQUpUOTJYeTJaLy8vUEJ6ZWZpWFYxODVQRDkrCjllWDk5cy9mL3B0RzBuY1k4RDNiMTY0VktMVC9qZS9BVDZFRDR1NVhMN0JRcVFpbWY3ZC9lRUtzUGl5SGYxSG12ODNQclFmZkhmNzgKMmVIWnZiLzk1Mkd6K2NrZjlzM3A5Mzh2bnQ5NStmMkRad2Y3encvUGpqdi8rZm8vUDMzeGF1L08vMi92eTdmVFozSUZuNEIzQ1BzTwp0dG1Yc0dNZ1FCSUlFQ0FKTzRFRXdrNzM5UHh4bjMycXlydnhDbngzenAwejV6djlhNEtOVktXU1ZKSktLdVdDdmRhUUltWS9QT3NYCmg3aTdrd3Qyc3k5azRmZDltUC81RGZzVDMzL1dCWm4vZHVHQWdLbFJKTktjYlRsODBiZjlYelg3VW5OVnlZSnpWcVZvd3hDYTRuMncKK3FlZHIrRk9kOFo3YWtLcGNIU2NTYlJPcG16cjZYUytuSnFJc2p3Nk1BdlJQUmdaVUc5QWNsN3lKNE8xMko5WkY4UW9tUzVnNUdjbQpnRmdnT1VxU0JjQWRMbzg3dDQwTnhHc2xwQ3gvWVptRm9EZ252VHllRVpYQVhQaDBlcXFWc3NNbkhIRk0wcjFMakVqSGQ5V1h4Wkt0ClB1RzBESkxVUUlUa0NKK2JzVG5wc08yYytXVzR1U3E2YXo2UzQxUWdBTDB0MURCdnhSbmswQXdRcWo4Ym1KclptVjhzaThkSVl0cHUKWmlOOTRsMjhCcS9sZFVjQTIxUXFlajJUbU5TU3hGYnphdDVnemJicU16ZlFNS2xZSVZmcnJhUkdpOTdrdlZmcVJiNkIwQlFKakNnRgo2NWVjYzNvbG5hL3JCRmtJOVFsM3FqVHlHcXpjdk1Dc3B0OWtzUkNLNU1MZWx3NVNPRDY4M1BFZ3BBWC9hT2ZLL1o1bWY3bjFwclBOCnRwWmRDd0JSZGJNQWRrWFA5cGtnYmQ3SVI3YjV2YlNEbjMzWmNtRjNiVWxwUzJmaDIxNE9nOUZ1bDVRV0xIYTZaUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJUm9VREJOV3ZWb0RNTEI2N1VNR1BDcFBnOGozYnRrNlB3dmRzMldicll4MzlYWHVUU0tOeEd3SEF3ajNmUG1ISjNNcXgreUdUSmR6QgowKzM5cG12TXB3bllTM2pLR3NjbTU2TGpjZi9PN1RTaXA0Q1RIYWZJQWd4di9uYnhQRHB5SnlySGI2Q3hwK1pRRGordlA3SnZvNmM4Ci9UU1dIV1dTNWJ3UHZETHFBQzFRcytYdy9ubVlmVHUzZ3R4VDlETFFZK0NMdjh4aEdyZFJxOFdYVDM4dm1YN0pieUxONzRVRG53emEKMllETmFDbENuczdqcFh3dEF6K2xzS2NTL29qTkovRTA3bkhrMCt4M0tlNFhCaXYzSnZvVy9wbURxakNQZm9qK0RML1ZpQVo4K2tqOQpta0dRaDkvbEtHRFpwSmVNaEx5RkpqSHM3NHJ3bFNSNkdmNVpNRmpaNGVYZ1M4OGNIQW9MeENjRWtXRUhuMkova1VDdndORzhvaUd4CjA4MmlnUmlzYUpyVWhPR2dJcS9sZWd0K2wwREFPQ3dJaEpoRXpKREZTTkdmTEx3M0dndjdhL1NiQkh5T3BwSG1TSWxlUjhPanFMaFoKSkJvc0NkNFFQVmtzU2RIU2dkVVhMcFRFMGw2eEVLSmxvTEZRdjRIRTRtQ2phU0E2Q2NueGlHYkYvWW1Bc1poTEVtUElTTTRscGI0awoxSkRSSnhZaWhWVDRKOFVXUVBQTE1ZWXNXOENYYSt5c09GYVJKQlo2QURqNWtsaVAxRnlSNUREa2VPVG1ERjkra1NLcVNGSlpBajVTCkZCTk5FOUVrTGdTUkZvNG16MkttZUZxRUZMM01TUjNnWkc2MUJLdWE0cmdXdlE0cGtaVVFsUVE3d2xkV2VWQk1paDdRc28vQTZpZTEKTXI4Z2tpTXFJc2cwajBrcFFEUTFWalQxc1NHMUpLd01VZG9TamJFWmp1TE9GL1NKSWorY0JobzgvS2N2TlAxYzJWYW51aUV6OW5rTApXUHJmQkgvRGlHVTNZSzljMU1oUnZSY25qUzRmMk1YZ3ZLTE1idSsxQU11bHNNcThtOXVML005Z21DbE9WM3NidFpYeHpJblE2VlhlCm5lR2JIZTUzNU00QVgwem8wS0NCRmhaZVo1b3kvVjRyems5dWp4TjRXNWc1MDdFN1l2bmx1ZGt2Vkt2N0hIOUN1ZUU4Mjl3VVhqSnYKZzhNRVdMRHJ6Qjh1eE9KR3ZrUDhHVnNQazk0UnVSVS85WnVjSDhBSjdleUtVMC9Mbnd0N0NDL1BiOFJ6azBWaDdpcVdPZHNLV2twUAo1eGhIR05vSys0eSs4RnczdmhFQlhGUG8yOGJXNVBhYk1zOHVBSFNENEdmZXJiL2UvTXpDY1FGTENWanJvZjR0em9rRzF3UmFTamM2Ckp4cGNFOXJxWXpuVUM2ZEd1Y3dDMzNldzRqeVU2TnAzS05OcjBMYXVhUHVvKzVSRFppeEhKdzdVLzF1ZUJYS2tHWCtxL0ZtbzVzSjIKZ01BNXlUVXlINjVjdy9wMVF1WXdWQlVSQ1RyeGZSSEU5cWx3MVZlby9FYkdITm1BWndFSlI1TS91eWxIT3V0YUsvdlNyZ0oyQjlKSgpNU2MzRURtbmdxSm5LaHgyc1FKUXlxM0RpdzlrL1J1c25QMS9PZEQ1UzZHMHNzNkJlRFdTTUtneEJaODhwOUxPTkluRjNJbmdzeEJzClRjWkpTZG9wRFZQS3ZxMHpidkRyeFI2Zk50TXZSS1p0ak5HZWFzczFCOFJhQlZXY2ZxSy9NdWVYbjhZNEdQQnd5S3orbHc5TTF3ZGsKUDdlcXU0RWo4dm9kWkFVa0RoMkRRVzVGUEJxNUJ5eXpZL0haM3hxRHkvUWs4SkhET1RKWi9QU3hVQ0xrNE10bEpvdWJNNUJLd2hyNwppMUtjNWJINFA2S1JhZTBwMTNqTmdOMmk5L2RNRC9UY3MyWWJ6MjhkNkdzekQ5NS9BelNOdHpZc3NqcFBYckhhenJjdUhWL21CeEZtCldpcEZ1TytOMldCbFdaTE1IQTdMZGpCZWYwOGpCQWtzblJoQjd5NlBmY2Z5RlI3c2wxMnVuQXVlY3hqdWFSK05nalg0R0dSamlhcVgKZmRBSzduMC9XZVNMRlQyWmcrbXBUTHFjbmlCUVYrL0F2L0hNTm1CM2FwTGswR2xjd3BrR01zbkpZSk41YjdodDhhWDc3UWRzZnJGZgp4T2M4N1h3UndDaDdDMDhIMTRqaXNVdU9NUlpUMUp1cy9BcUFhWk5lSXB5MW9SMFF4bUhVNURmQUJSMlZwWmMzRUNpOXdCWGNmdWQvCmpqOWhHRlh3ZmpTeHArSStMNEtvd2N2bmdXMFl3YzdOU0c4QW1DL1ZOWG9samtlTndPWW5uYjNYVTdiYXcyZlVNajVXbjJlRjJWL00Kd3pDZnd3VDg5RFJXeUpmTjFHYmszUnBUUGlvUVFFWFAzaDlEOGZuSU5xZnBWSDcxNTlhK0pnNkF2bTJRMldHd1VoaWYyOUd2NG5CZwovUUNEWHhneis5ekF3ZTVZUzVidmdOWU5XNnlBRXJFSzNITVd4WW0vL3lPMFlaREcva0MrTzcxZjF4YkFVb3E4MTNkdndyMmJlak9TCkRCVG54Y0hMWkFoc2t3UlVPTi9PNHRTTmZXYURqbGdEcUwvM0tHVUwwT2dENWt3eTNiWVZLbjgvSDdsUXArdkxObHl2aTJ5ejVRYWUKUmNsYStvcmtWdmpzd0RkVnFBM2wwVitvZk5SYzBOaG9vbGVBZGs2K1NRMCsyckpaM3NpaDJkWXJmQU42NWRaUmk2Znc1SEE2a0hIRAp5ajZ5SkJiV0ZlQ0ptQ254YlhsYlNpQU5nazIwZVN5NlhlRnYvdllHMTJvM3pBMHlIY3ZweEdLdWdTVmVHTU9uR3RrRW5CeHErYnlDClIzWWpWdmtvSldrUTdQNktJclQxMysvditJKzlVUWNtblNkTEZucGxsOVRVQk8rRjNBWnI0bXY3OGFuMFVzY1ZlWjRtWGtTdkpPWUQKNXdyRjBlTFBpOFJQMGJQdDQwQXpodkRzVzRqOEt2MmRYSGI0M2krallTNjR5SHdFZTBsOVNSa3k2WEMzbEgvT2Q5SWkzcUJQTHc3RwpEMkEyNzV0Z2tUTjdublZJZzhKOGdMenZPNE1WSFlCSXJJRVB5R2MxSEg0azkrVmtZVjBMY1VZd3ZZZ0RzN0h3L1RiYTVuOU1saEJnCjdPQkxkcE9xYktWNENLNExaTHFYN1hRWHEzLzc4ZXhMdkZqTkpISTd2dVZOanl6cHlCeThzVFBVeVpsczVHdjJYUGlPamZ6Ri92eGsKRTlFejludXd0OEMrUCtobHQ4c1hGNkNZa0ZsWWN3bjkrY2tOSGd3cVhlRnhTZW94SEpCaWtOZ3FXMnhsSTdFbU1odUhoZS9HRWV6SQpsS3FnUjFzMmsvbnMxNExNWnhiTnN1VVJyMlJqL2xWVytwV3M2emZUYVZYR1pMSnc0bzBHYUdLektSTi9ueTh5MGQxaGlPS1NsMWlBClErZENhd1c0NkhXcGRhYVVtU2VFa2l5dDYzL3VWS1JVQnZ2THZwL29zUXNWQUlxeWVJUmgrZ2Jnamw5YnB2UGRPdk5ncDhKUDU0S3YKT2ZObTRzKy9LNTV4RHY1cGhVM2tKazhmdmJEaXVzOUM3elgzQjNZL0FmbnRhLzl5UGhneHBKNEgrZVFvdjV3TDVjSHhXUEJNeUdMUwphYkcyQVMvMjlybS9sMVRva2w4YUpyQjlyZnJRVWtyZ0RxRG5nbFpncXJYOGhlL1dBVGg3MlBjZlR3SXJ4NjlSeVVvYXE1bURlWEFxCmZHOFBQZ21HallGZGMrR0VaenRkTXYrZERuRGlRL3N2MERpSXdFQXNaV0tSbHU3dkQwYUVWc3RDS1dXZEF4TWpGcVppc05OTy84aUMKVFpDT3l1d2RPcGVmVUVkMEMvUGtBTG9LWnpmbkFES25QQUdYd3hrTkhSTHZ3Q29xL1daZjhGd0F1Tm5wVlNhWjJwbjVzc2lZUWVEVAp6TStqSW5iMDlNT3BkckNZRFhtckRhZ284RXNzNkNVMDBBRkp0Q1QzSkJOWjJ4U25vUTNBN1BVNUpZaGx6MGJlNmlSWWc5NXJkcHY5CmRraGpBWlN2UnVWQU9JRDFoQzNpZFhjQTdLUXRtMUdUcEFyWW5sb1hPY1puZysvWUNRaHhhNVBGaURUWkFFdzF3b3JUM2lGVXlKUjMKZStabHp4WWFkR0dLa1VxOXpCb2RITkxXaGZ2eHFmL0VvdzdZZGI1eTYwakdnbHdKK2lBekRBOFhJcTR6MUJmTnVQYzdlV0JueWc5QgoxTXRPTExkZTcwWWlCNTdqTWQ2MlBTbE9zS1NkYjhIVEVNUFVnK3g2UEllbkVtWjRXSU5sbTl2YXFlQjUyYzhZUzJsMVprZk4zMThRCkZsdHhhZ3AvQVUvR2VDQ0wwV1paYkd6c3k4MGFjcFFUMzM4MkczRGJmOE9jTFNSaEFkU0J4aTc2MEdJRExBbzJSZUs5Nkg2eHV3RUIKQjE2bDkxSjFJSVpWQzhCTStxUXdHNndzN3ZkTWNrMDYrVGE0R05pYnZOeEJFZDdubjR1eEVkcFEzS2xqUDhZcFI2QXQ0WlFlSFExbgpEM29vei80ZmN6eEpHN1RNUytSdzdROERIUmxlWnlMZFJURWJMUjFQOE9qYlN6cWV2SjA4M3Y0N0p1WngyeCtZYzlQSng1emEveUVyCkV1cms5SFF1MUpibmJIU3lXL0MyQktSdys0MXhHZGg2V3l6eGZaNGZ4S3AzNnlyNGViOWdENFlSMHhpczRUMGVld1AyOWh0SlpoYUEKeWQvT3JaazYvNGFSMDR2b0FQMkFPbUNmZHdMWUk4bDY5czJUQWV1eWNHMzRXQkJ6RnFkbjB6QWI5ZnBNMENBTWk5Z0xiRWViZVM2NAptczNDbmZaWEp4cEo1OHY1NWNmTUJEMHNVeWJaQ0F3SzFXclN4QjRXaTM4RzdERnliQ3RtRWw5dFlIWkdHbTZNOE95blFNdjNWMkRQCi9kNWxtK3ZRdTBBSmo3dVpvN05yS2xTZkFvRHR6Ym1kbEVKbFR1MWYrNUhXOEx3eFdNR2IrY2ZDSWhRMkpUM256NTl3YXU4cUFpL0kKdFNlVDVKVG1SbFkvc2FxSjBVbTBIanZTVHNXcnpmMllpWmdLS0hjQURPUXJIM21iYlpQQUd0OVpCbDR1dUJtZnphYXRPREYydmViVwpYcnhWNnZhN0c3QXVweHdYemFOZWVSNU16dVRvNjd5RTJSWjI1QnQ1TjU1V0VDMEVmN0V4ZUxNMHRScmZmdTg3V1BpMkk3dVpMSTZzCmJoTkFIQkIvYUEvazVWZ0l3SGFBOFRvNEF3TDJyRUN0TmM3Y1U0ckgzck90ZHFURjBTNjJ5dnpXd016LzNnVWhTMGpsMFR2WW9uYlkKTVlzbG4zZThtQ2dpVnM2ZWJCVmNQLzVwMHRPcjVySlJUd1hDcy8yQXVTQlpaUTBpT2NvemkwTmJlRVZnVE9XbTJaZHFHUjZYTG5xUQpEb1JnU0EwVDJCem1ING54Ky9ZWGVLLys0cStWTE1hMlA4VkJkOWtHQ3NmYmszaDlGRzYvZlB6U0dxWkdmc3JDSnAybnhMWTREVHRECnViclQrUlBaVkJwdTZJbUxvOUVOc08vWFNUdGdaMHUvNk8xRkY3bmdlOERMVy8yZmdXZVJiUldPcnZDK09rNC9BdC9ZQVp5ckpDN0UKeDBKeFBRSjVtY1JYajRXdm41Nlp4MmdzSE9UV2d6M25UdzVFb0pGZlptYmVRbVdkZnhkdCtSalIrRFNUam1vdUN0Ymx0ZS9aOHVZdgppSU9IV2Mzd0EvM1BVSEhTS29ZNHpTakEzSWVHUTNtR0F0Wk1oS1FmUXpFVjZDTUhzSmt3NWhJdmprZS9udXdtYlh3bFI0NHZBZ3JEClorSEorSTF4dzJOZ0R3ZUp5a3U1R1k1MzJ4TXdsemxKbTRpQTFXaHQ4WVF0d09vRE04OEpFSHp5WS9YaHVQbExVMnBSS0RaMEYrdnUKR0pBNnR3ZklVT3RZbktiS0FGVGJ0clBFMnNVUFMyenhEbnhrTUxJeWpNdjdCdG5XY25xQ1kveXZGSnVDSjh4N0s2Q3J3elJrK1RrKwpLdXYxR1NXNGJ3OFB2QWFlT3F2WlpMS1NOVitqTHAwUURGTUxYd3ZrRUYyQlU5aitlME5kRGl2K3NXUnlzdlpyNTZXU09Sbk1UUDArCmowcXdpQi9RSkQvZVVhWDhQL09qSWh5Q2dvTXlUQ3ViS1lDRExyNVkveWdWbUdpNTNFY3lBWjhaT0hXTEUzblkvbVVQcDM5dkQ2dWMKU3ZFajgwUFlneWZQWmEvVE54VEpaN015djJzZGZ2N2dkU01LNmVjc1VjZUxlWVZmZWlFL0RlYW1lNjJ2OG1lcE5JVG1mTUVickJJOQpHRm9BTW1vZFJKTXJlM0MwbG9DQkhzYUgrY05wT1grZ0t4a2Z3TkpBSGpvKy9IczUzendjeC8rQ1FqYmVQUENGRWZMTHcvZ0l2K1p5ClpKbjdRSHdQN1NNQ0NmNFZBdnZQOXZ5d0E5ejlBS1JzVHJFcVFrMkJXOERlNUQ4Q1JKNEhnSXo5NlFhTS8rRzBoU0NtODRjZlZFNDkKZmxpUC93T3ZLUm52ZG9CdEtRaytucWRMT0x6S3BvQ3E4RGd3RkxZTklORVpqRzc3emFIL09UNmNOeXZZTk5pbnJHSVlzUUdncDRlZgpuWEk1QUVON0VvajQrM3dDTDJCVFgxYXFLOFlQVTE2dDlDcGJlcTQrQktTb2N2d1NJRm1OMERvQWFySlhpMGkvR0VRMG9JdVF0WEpmCmphdFpWVUQvZGhwdlpyQnppVUxsQmdPMnZ0MXNwNmdMakx3T1ZzSkY3UURnTVdCY1doSENuVU9ERGhUbzRPejBzSjJNVDdYeGYrWU0KZ1lPYVJzMVRaOVVmNXJvcmdwRFpOVmd0eUUyMkFvdHhzNVB0dnpUc0dJZ0Y1QlNvUHBYTjF5UGE1SVdpZEg2N21hSGl5OG9NVVB6bgorNGVwTWRDdzA4ZzNkRkhlb29VRUUzTkhXQWZCdUNYU1gvekNxZ0wyaWoycXFFQ3lLNHpZVU5IUUlVWjE0VGtTY05NSUtoSU9zcWs4CnA4a1ZUWXAzM2ZmNXJieWlMc1pBR1lQZGhMNTNraE5kamVoNHYzN1dla2tCODF1NlhmcC91Qi9xRXlSdEtwRm1SQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJV0RBbU50RVVyUm5xNWdXNEN0eTlPakkvVUxwTVVrbEdSRVlaeDF1S2xoeEVNejdOVzh2ejMyUXovbGxyTU0xb3dXbnhMZ3BUMzhxQQpLWUtJME9KVk94TWh0Zm1BdCtlOGE3TVVkNkMzOHdTdTZIWnpha0lPMG1iRlNzbWlWR0VvMzlJRDBFWDNjMmsxemJsU1JPV3BJeTRUCnpWM24zc3ZUa0hwRS9XSUQxcklSaXJTYVdEL3BrMFBXa0FjK0szaUIwczE1MXAwVVZhL0J1NitnNFl2dWh0Nk54ZTRhZmNNV3hSb24KbHZFU2wwNXVndTFOSit5Z0JzZEpkVmFEdHhReHp3eG8vUHh2Skl2RzNLblFLT0pPZHlaK3pPK3VlOTNwNVNrQVB4SEJaQ01lWUI4MAoyRS9vUVNLUWJwMXloZTlZYVZVMk54L0g4T3dxeFQ0bDNJL044TkxvREpRZmpWNi92V213R3QycFZkTG9mTzdIako3bEQzZzArdllaCjNlZjRtOUZUN3hhTVhxeE9ZUDdIbmdPaER4bnp6a2J3U0J6cllIQ0ZWVEQ5TWtvRmN0RkFOTndQLy9WUjRnWUtpSEJQc2ZKd25qZFkKRDRmVTR5VHIyVDAvWmFxeFl5cGFUcjc3eUcwLzJDa2VQdnRZb1UvMld1Umo5bkdLdTdLUkRZMGxZR200ODE1WEUrQ3JoZVdtUzAzSQpGNmpGTElCaUZ5L1Zqb2RENHRnQ1NEd1Z6Qjk4bzZiQmpld1lKVThkWXJCZDJiQ1pEVWVZWHppd2h5L3NtQVN3bzJkM3FtUzBvWW1qCmRTbXNmUDVqdEJTTTdoTy80TS9TR3Z5NlZ4QWkvVHg4MVQ4YjBraExrVUVvWGhuNEpKRU9MTTgxZzFXRWxrTWEvcW1Xck5KSWswYkgKNFloYkQ5SklYL0hQb0ltSXV6aWtCaXVIOW1qMzFMMHlTRU5MeDlqZUswb2pEVG8vM1VsaUlUMVRFemtJR3F6bTltNWRrNW9yUnVhcQpHUm1rWWJObGMzQSt5aUR0RFREeSsvbU5RNHFLTEZtMEpXUFNoajhOVzVKSVMyV2lKVXRlb3A5cWpSQlN3SXVUb25CTjN3RW5mNTVUCk5ZaldlYm1xamw3Z1k0MDdBZExnOW9LVmFsaU9SdnBxdDR1UWhrSi93eDJIbE9Oa0N1M3c4TFhjdEdTUVpzYmhDR25CSlpFTzBxT20KSE5LeXdXb0pPQktmMG5OTkdyK081dVc4S1kyMGtYZW05cGEvbWhSU2QySWRUM0ZJd2JvSVdjbVY3bWRlcEpFR2V6Mk1qR0hQa2toTgo1Q0ppYWY0UkwxSklEVmFNL1BvaVplWWFObHRYbTNwZUR1a1lLM2xHSFdta0pTeHJuenNpUFlUVVlCVVQrR1QycEdta1BhOURST0QwCmMvQ1JKbS94YzBVS2tQYVRXQzNpeFNGU2x3aXB3WG8wbGVmYmNIUHNKUURheUU3TXY3V1AvbGdHYWRnY1djM0lnUnpTQWxaM2ZjVVEKVXNoam9ybFc5dkhNNytHNUtZbjBMV0VQeUNLdHp0OENtQlJTcVBtREgxN3NiZWcwU2MzMWFLcVc1ODhmZmFkREVtbkh2bG5JSW4xYgpOa1lUaE5SZ3ZaenJSd25yVkhkSmFhUzFnTFZOWnBLUDBraDNUeVlwcEVBblE3U2RZY2wwa2lId3h3djJucTRXcEpIV1U4WGhvUEgxCkpZbjA2MlZWUVVqaC9uSTUxOTllYUViS0lQMk1ZbC9IdFZjYTZmUHY3dThsRmcySWtNSlVBb2gyV1BGdVpBbDhzTDY1alRKSWUyMnMKK1BQM0pJazArdXcxR1ROZlhxREhBTnI0WGl3MDUyRmtTQ09kQkp3aW9YSDJhMk1YUWtyWVU0NnljS1kxYk9TS1p5RlNENGNVWUlGbwpBZGpmUGFQMEh3OWlwTWV0N1pGR2VrcTdSVE0xZm80L25CVFNYQSt2Q0JXaDUzQnNwNHdBQzBEcnU5UktGUythSzBDYVAxMm93cklwClRDRk40MVd2U0JGNmRzRm5hcWNKV09MNUtrSUtzZEJvTFlmRGVMS0JTREVSMHNNaE85OHkvUHRrRkNFOWhuN2o5RTZUampkOEl2S2EKdHZOUnkwRGJEL1B4TUN3Y1ZMbHRHMnpqc2s5N0RmeXZJL2QwaVpWSDFqUDM5RUx6QTlWYnNNbjhHcXlCeloxbnh2VTdqNGllaHFQNApzRVUvUGE2aUYxSVozaXhOWGFubmxGSjhyY1EvWlo5R0NWZHpKUDkwT1I3WVdZcGRQczhTdHY1VTltbk52VWtUOGs4bkw5OEo3cW1JClltSHppMms2S2N2OE9scTJsWlB0SS9YMDI3NlBpWDdiZHY4d3h1azNib3BmVUt3OWVYcmJTRDJudEZ6QnZUcklQbjIzVHZ4RythZWYKaGZnalF6R0o1eVBySUdLUmZmcDdldDJWWlordU9rU3V3VDI5b05qZmlrd041SDROaHRSSWhHU2ZQaEhCVkZlZVl0YnBadkpXay91MQp6V2lyZkxwa254YXo5Y2xjOXVrVGtUYmg4aFRMR2dtTE15N3pORlRHaW84dVpzNXhSMEwwMU4xcUhOUDAwN3d2S1piS2NtdFVjbVc1CjU4RmowTk1VZW1CNWJHYi95TlA2WjJSZHc2YzcyaDBsaHlGSzllUzJ4MmZxazBDUEVTY0w5RER6UnU5VHJBYzh6TjhXL01jSHZ5T04KbmtJekQvOTVSLzRiNjcxUk9vTEdOMjdtR00xM01CSDJ4MWN2cmMrQm55T3d4MUxtZ0IzODhPa1B5UWIwZEhnUzRhOUhOM2JneDNiUApRTFdhYkFEZmQ1TEZaL2IvUEU2Y1FEdVppb2Z6eU9jVnFOdUR5V0RsMENKUFJ3WnAyQXo5bkE5cHBNRmVYeFlwMkVSK2NaRTl4cDhyCjhuUmtrY0l0YnlxSGRNWkhHbndEUGpJUGJmUTU5OFpET3JQWnpCeFNaUDJ6U0FNaThrTHJuNTFwYVMxQTZ1d2g3NVdQVmtEZ1IwSVcKS2JMK1paQUNmeEJZL3dNT0taaUxZSzVmc2tnQmdZOUJlYVRRK3BkRmFyQkMrMzhwUGRlazBhZUV0R2FYUllwc0NnNHBsSDBCV21oVAp0QVNyT284eDZORW5laUdjK2Y3c1Q4dDdnL1BmaGkvN01tK0d6ZnRCc2Z1aStsNW9TZk1kclMxeVlNNmZXVnBiWG9qdXlQRUhxZFBrCkJXaFM1UGxBS3hmYlcwWWs4VEMxMGNQOWs5bzVaaTNhV1ljNmlmTDNVenRuY3NkQ2RDQVFxVmpaOG90R2tZcVZQZ3BBY1kyTEVIT0EKVTAwMCtsVFJTdi9qcVc5cEJNZ0VaaEN3dGlVWUQ1amM0NDU2U1JSOUFtb3Y1MS9PQzFiMm55YmZZcVpqWmkvc3l3V0lwY1NmN3VncApUY2VVd0pEYnIrQUxHelJvenk2R09wVGRUcXRqM2d4ZWJVSUNzaEUzTUdEc0tXUzFvbjhnUTc0THZTU3BRYTFpRmRHZytFTWFudTJBCmRlc2V3cDdHZUhFMFVUZ1FrUnhveTY5enJxcEdkUGdQUFhqS21aZVluOTBvT3orRGxac2gra2QyQlpuMWV6T3ByNStablorTDVqR3AKR1VManRhMUFMTzNydDBYOFNYa1dHb21sQUF4MzVYNUpXVkFHTGV6T0VDdmgxY1ZaSEY4SmRtU0tzMHFmZS8yVWw2UTdNRzc2TkNmZgpUSGtpMTQ4OUtkUGRJRThzb2VweFhxcWVRVkdvZWdLeXFzZWd4cnJGejhxQlQwQjJ5QUlDMmlqVkkwMjdBYnlLaGlHd3pIZzhSUS8xCkQwMDdmQ05OdTU3WEtLdTI1YVFTeGVNa3A5WXo2WjhhZnhkRGt3dWtPNjI2R3FsTFZSdDltaUE1a0lKYk5DditMc2FiMWZ6Vlo2TlgKLzBLTkZnR1d6bGJYaEtRMERPQWQ0TTUxZWJSbHhaRFA1eU9uRFF5dVc1QlpKczhPSDF2c1pUUUdLczUvSldFdytWMTZ1WFUvTXB6RAo0MlFVMUpFR2htc0ZKZ1VLMFoxM3l1TzZsTHN4cVZYdWxLVU83SlZqVS9lc3VKWm0zTlBHUGZDZkR6ZnZrT0tDTFlCbWRCU3JVc3NKCktNWmZVUGdQV0ZBdUVIM0pHMkIrckJhODVJMlhCanNrM3JqUVhFNGx5WkdsU3BPajNDUXoyUHpVOWw5WVlaZEx3bmw4ZGZmbGtzeEsKYWxhWVZ0V3ppaDROVnRtTlNZUE55TDBNckptUGsreTJaTERxV2Q4U3BFbFp2L1VrSmZ1emtsQlBTeENydnVVMlhvVWhuZEpQc252bApTNU1lanhhVERneEozcUJqbHM1ZzFiYUN3TXRYTkN6VWJIN0JDbTZzaW9hRmp2VXJ2ZjV4b0NoT3ZnSFkyMGJEdU9CVloxcUFDVGNVCnZlTmlUbmhwWUQxbEowYlBKUGxXM2MwVUd4N3VTREdoUnRNNXJwMHdEak9LSEM0YzExUHFlS1YxTERoL0FlTXBTem1EY2dhdDVBWk4KNUxwTG80b2U0eG5ZMGxKNVNwdnVKcFc1N3Q2aXoxR216bU12VnJJTWoweHFIRzJnSjY2Zk9qMlRUYXZ6d2RxV1l1cWtqdXkyckJwRwprRFlNeXlLbElDa3Y2c3VVT2lxN2VLS0IwSng4T1JRVkxhQnBJQ0xiOGpxYXFJZzlieUNVait5VzJhSVdaUmk2L3REaGsxT0hrc0lrCkl6YTNoL2c2VG55OGdEYjRWSUU4WDlTQlFDYW9BU3hCbzRJTkk2aytaQVNrb214MkdLeDZCbVcrVWdFSXRTVVV1YStUVlhsYjFxb0EKS3B3QzBPcnZ5OC9Qcm9Ia0JtMUVGOWdLNnZFTXNTWFB4ZnArSy9CUTcvMGVURlU0NGNXdlk0blRESUpjT0VuSFI4WW5CN3kvREdqbApUL3JFU29sWTJrVmMxdTFCWGhJZ2xrNFJGeENMRlhIMGk0QWx0dklMQmZ3SnprVW80cEpldDNwMENYQ3RTVnVFUkNtVzhDUU95WXBICm94U1NGVVZJL3A2RUZyeU1VNndla2dWVDR3a1N2ZnE2d3lSUE1DK2hyalc4d1hwSjRxRThuWVhiOGhYaERjQUhld0pOQ0dXcVhLeVcKOXJVUzdha3ljUitEVlNsSzkvY0VEM2Q3TjhWOUlGblVZMzBpVlNBVHI0SFVDV3ZpWko3ZUZFUWFkZ0pUT25NV205S0FEK1NEaWJSTwoxbUJNUXlwWHhhYTBIdHBSOWhnYWoxVjVQRnJqQzRGME8ySVhjUVRQRjlPMUVWWkZsdkIxOGhKdk9KV25wczduVlc3elkvZVhLNkxSCnU2cDQzNU9ia01HcXdPbUFkNFNiM2pVS0lOMjJoZ3dxYTY2Tk1FT1ZJTDFCdE5YSjJiS0FPcUtOVG0wZjR0dXkxRng0V3gwOHJMTHoKOHpmZ3JNQjNXcGhCVnVwNG5Kd0g0L0hwaTNsZnpybjdKclhiQ1U5Rk5SOUJBbUJ5OFZhcGFDdmxXY2pGV3lFd0hjSW43UzhCb1RGWQpiejZrUUt1bXZPVVpOTU1ST3BMNlJrT2ZpVk53YnBWQUNncnJUWEpRR0oyc0I0NytmWS8xOXlXQUNVNEk5VzJpd3ZOQk83SXVQQTZoCnhabEhhYXAzT1dISW8rUlRnMVZkRERWc054QVk0ZE45eGlkalJNQmNUcGNtVXZMTXovaGVzSXVKTmRweDVielFhTWVWK0FCUGcwYVQKakpEa0FXRXkrMXMxV3B2VGFJejNxc2VDRndOVDEyZ0dqU2RJRU5qMUdvMlZ5bEpuZXdlTkJsWk5TcVBwbG4wQVI3OUd1NGhkVUhCdQoxMmdReXUxbnJ3aU93bW1RSitkZ1QzSDhCcXVVTlNEWWhEcGJKUSthZjNRb2JhTUVQVTFodmlYd2VTNWk0L0M3V3c5Z21mM2wyNzZYClYwTWFMYk04a1BPWGs1UXdVeEY0ZldvV0FPc1lkU2xaZzFWV3pWNlovU0FVNWc3eXBRV2UrRFVHQ2xnMVVWS1RuSVpSaDZQTnRKZUYKZ3VJd0FNN3RLUkFJaW94RExUcDVWNGNqUEhUWEdGNldPRTFBd080UnE2YjJRakEvTjdRdWhMc2grTlo3aTMzUFk5S3hxWG04MmVQcgp2bXVOWnZGaUY3Szc0YnN1KzE0NUJndUIzVzdmZis2bDlrSzl1eGhjTmYwaHJjdGRETUs1eGI3blFXSDN3dXQzTVFSSHdyNlhnc0o2CnJ6Snd0TzZHeW5zaDBqQ2YrNXQzUThGZU9CU2ZFeU1zNE51N3BDTkIvU09aaDBYdmxZTGtLUzROUTlZV0dCNFVsb1JQU28rRzA3ZHUKOTVaWXRTak9ENERkS3QyOGNVbkl0bkt1dFFMRk5KbTd6RXBDTEhJZUVWaExueVk1VnpnOXpRTjZkdndLa1NzTjZYU2lJY2x5Qk1ydApVUlV2OGNhVTkza3Z0cVc4ejYvSnI5U3dNUkc1N2t3MlBVOCtjMDNHM3djakk3U1JVb053VFk3M3k3WUZ3R1RQYnRob2o5YUVlZ0FzCllFbFVhL2VJa0FDS1JmU1pHREk1aUhBbGh6NU5NVmdLbUl5dzl4U1RieW1PTUREeGUwMkQwc2dSRjhKRjc4aVU2SEw3V1NwVTMwaDYKRnZRYW9HcTU0OExvM1RTR1JrOW5VRFI2czRFQnJKc3JTbFhRVVRlMzNGNUR4OS9GTGl2b1JCVkRWOWZRS1ZmUUlaMThoeG82V2FTbwpnazYyV2xCbkRaMXlCUjIvV3ZDV0dqcmxDanFCMVhkRERaMXlCWjJnV3ZDR0dqcmxDanFGYWtGZE5YVEtGWFNvV3ZBT05YVEs3OUcxCjFUZlgwRjBJcnFDQ2p2VXNicXloVTY2Z1EvYVllZzJkSUNGWm9jTHMxVTVLV2R2eU9mRHlsVUNpWkJjTlE1S005QmJVRTdkZDJ1cWwKU0pHUGZIVXliRUZzL1VvRUI3UkdlajhLd3QxZTM5THh6dmdLNG9TTnErbVVjQW5ZVlZncnl1N3hEaTNGWVBQZmVVY3RpQ0k4NDFNQwpwcHlIcFcxK0tOYW5Wam1uZVg2aXlOV2x2R2dudWwvL2tHUXFIMVVpVjBwRGtpcVpnM1BSVlRTblNkY1VSYWtnWEc2UHZnS3FrNjVVCkVDcC9URElaUkgvWVdDNW9qRzRHdXpsZTFmT2FsYWRtMEZqc0pzeUUxQnNZUkp3TTF2eldpREZWN0NaM2JDUDBrZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJMUlyZDVQMVQ1UU1IbnJZc0tpYURDRnhUTlRla0tLcG1FRlFLYXdNbVRNSENMMDlzSnNSZXJmSlJtODRhazdxY1hpU1ZjbTd2SkNDZgpRcW1yeEJUVnZ0VTFWaDJxKy9hQVdGSm4yYXc5ZGhrNlV3c2NycUk3VVpnRS9MWXRtVFI3eFlsVlNkYnNrcTBDNDFsSzRqb3dWYk5MCmN4M2ZXUzBIWGtjZDMwU3Qvc1VzQ0ZySmw2YkpGOEVvbTlLWE9mRDJ4NlZaYmxBWnFSSk4rZlZUellIWG5FVXdLd2tqbUpMcnA3V08KTDNwUXE0bFJZZ1poZGpvRWRyY0swUU4zOGlGWG1hSUhtRHJIYTZlWU1NQjZJOFZVeTBTMVQ1TFRhRmRSVEJqNEpYTGRubGVZNkZRVwpKZFpMVkhKcHMyVXZZcjZYYmhZcjZrM3B1S1Z5dlp3SWhBeUFsVW00STB1QUdCRURIUDR6VXBUdXNnWm5qL1g0Vkp5OVJWbXpzeWNIClFKeWplQVVJdGF0UndEcXp0MnBvSzVXN2FvV0dtUHIrd3BnMDBtSUJTOXpVZ3d3R3haQTByRXFUY2VJdTJGNnBSczZnVXVhczRjZ1QKVFVqNXloUERoWHVsWUVmR2p4ZXAvSTdDU1FQSmVTY2pjcHo4VzlFWDNwRndsU2hMU2FWQTdrTHJ5RmRFblNSMzh5dnNzWXBXaWVmawpYZFllKzYzb0MrL0lsOW1KTTRpdXB0TlNKZEpnRUxrUzhpeWdNeUlqR0pLZ0hoa01pdEFUL2xBWWtsQ1kxWGN4QlRvRnRRNUpPVHRkCnZTaE9hVWppdXp0OG92Z3ZWWkowajRqTUU0ckkzSmlsQml4aGk0YUlESDNHcDFLZVk0bjdiTGRFWkhqKy90UHRFUmtBd0tHUTNhR2oKRE8yYWlNeEZ0ZUR0RVJsWWhpYUt5TWhWcEtyVjV3VjFSV1FrNC94UEdzcHp0Qlhud0JJOUlIRHFuS3d0ZlErMjZzQ0V4bktWTTVibAo4OGExR011QmROdHQxc0FNeWpXSnUrcDlNaG5ndXNRYjl2c0VkY0RVNGc2Vm5GNHRaV2hYSnJEejl4ZFlRQ1lmWGRKUlBuYVJ1aUJaCkxhaFdWNmM3YWZZeVF4WFYxV25NMTFPc3ErT1ZqaXBVQ3FzSFFhdUtsMVR4cEpkbld5cW02cjFlM2tVS3Y5TzQwVEUxNzNLSlNmZXAKaDROWTdwRlRwMXdQcC8vK3NXdnE0YVN5b0YvLzdsMFBkME9kaFk1Nk9LVU0xZnZWdzhHbzlZMFNxS0VlVHVKR1VOa2lydXZyNFFUWgpVTXh2N1BldWh4UGZPMHBWeE4yN0hrNzFsb0M3MU1NSlRxdzBwRnBlVnc4bjlzWGtqblZnSmR2dGxmVndnN3RiVGlRQUpjeUpsTE10CnRlUkVkcmFhY2lMVlpQKzRDdHhxQnVSUmdzVHQxZWdJamtkdDlUWEMwVkpISWd1RnNzY1FuRHRVY2wxa01pamt3S3RyTkZoY0p4OFEKdTh4MzV2V3lrY2w0dHU5ZEZ4blA5cjNLUW9pRVVEYmEwKzNjSW9aYzhSRXZxbkNyR0FKZ2l0ZktTT2t4V1RIczdiU0tvWUkxRHVtdAp6MStVWkxUNzNBYU00T2dUSDVsNlpBRG5Mb1dRQmIrMlhVd1ZqdnlWd0RLM2FjbWxXVjllQ2F4Nkc1b3dLaTI2cmRIcHVZeGh3ZUl6CjVZdWRWQjFxdGlJVk4xMmJJTUticzl6RndsZFZwSTVOUXcxRnBCb3JVc2VtaVphUWdVcXAzMTBxVWovMzk2bEloWER1VVpFSzY4VnUKcjBpRlVPNVJrUXJoYUxzR1d1UVNTK1gxSVFHUnZ6UlZkNUtSMDB1dnZsQU11emVMb2FnVVRscVAzYnNVRHVYeksyYjAzS01VVG5KZAo3bDRLZDMzY1VrZ3haZDlkaDE5NVF5a2MvdzRpVkF6M2o1VENTVVFWL29GU09PbjRtRWIvcktka0dQSlZBZi8rWktYQ3A2VnNycXFXCkcrR0Y5bGplcCtJV2FVMzBncUJDbWlLS0dnTElFSmo4elhZNmJaaUxTNGIxSGk3d3F0RjdHbzl3bEc3bkJhcGNhc3Zqc0tnWE40dnIKNmo1bHI4TVJidzVNZEZSaWUrRGtGM2FOODBqaG85Y0F0YmhNdlN4TDY4NTRXRERQemtVeVpza015RmJxdFpqeG4reEE4NU90ZEtTSAoyb1lYK3NWREpsc090NTd5T2Q4MG44LzVxN0FKd2R1TzJZNnNhK0dRNllpVHNCWkxxdW9NZWtsMGpkS0hmTjFadEJGLzViT1hzTmd0Ck1YMnA4NFBQUEtTaHBjdWFORzdsS3V5Q3ZhNVNzZHZNTDRzVUkxczVwUW83Njh0UGZTeUhkS1NBdE9TTjhaQ0thN0hpN2lNdkNpY3UKZGd0Mmx6VzJNNkdvQk16a1VDcDJ3MzBpcE1KK2ZJay91UXE3c05tOEQ1OC81WXJkUHBTcXp2NlVLK3kyclpZc1VsdHR2cHpKSVowcgo5K05yZE9XUkZwOC9TckxrdFd3Q2lhRWMwb2F3d2c2dEtoQllldGJvRTgzbmNZM3ZKYVRlbzZJS2dqZURuelZORUlQT1YrbzlldXVzCmhTVU0wV2ZHUzBxUjU3VjRRMVdLSFd0SXVSVmFzTzROTlJmQkdkR3JiWHVmMGg3MURGVngxRVMrajlWZXc1QjQ1MklLZzFKTFRsWEwKODZDODEzdDJrcE5xT3lKeHA0cUc2SkpTSnpsZFViaVBndVlVU1pWcVNIUW5wSTY4UHJVbWNvcDVmZHI1U2FXSm5PejhwUHErcVRVYgowVG8vOVY0RG1vbXUxbWRFZEpmYURmM2p0TXRMYVM3ZmlFZzIzVlZyQXpybFNPODExWFRYeFdIMFZ0TkorUUZNTDg3N1ZkTnB2Qi9tCnhtbzZxWmlnV0Y1dXI2YVRxcVc3dHZKUnZwcE9LaFl2bldsL1N6V2RnQ3kwekVyZVAzWlROWjBVS0pVYlFxNm9wcnR5UjlaWlRTZDEKVHNQdWxYZXJwcE9xcGVQNysvZXBwcE9xcGRPWTI2T2ptazRxMXM1MFlMOWZOWjNVNnFKSTcxMnI2YVNNRzM3dTZIMnE2YVJxNldSdQptNytobXU1eVNFdXp2S1YwYlRXZGxIRnFzTjY3bWs1cS9TU3lvVzZzcGhPRFV1MHBmRlUxblp4dGVkOXFPdTBVdTZXYVRnUktmQ1orCnAycTZxeWltdTVwT3NjYnFidFYwMHJYVjk2Nm1rd0lBc055NW1rN3F0RVNVQTMrSGFqb3A5U0QwWHU5UlRhZHlNbktuYWpyMS9lVWUKMVhSU3hPQ3M4WHRWMDZsVmN0Mm5tazZxbGs2Mkg5L3REcUNYY3dBRi9jVjBYZDBrMzhYcnNrbWx1RGVIeHNLbnZZcXdDNGdmM01yMQpzcm0rWDkzRmtFN3dsT2ZlL2Vya3JRdHRkRHE1N2Jyb3hGRkprQWtKYXpKVkRRdU5MQ0FvVUpDcGVwWWJsR2hJV2xXQmh1NXl3b09wCnE0WUVLUVlHcGF2dHN0S1FwQk1wWkRXTUFwMFUyaTdMcUV5NGl3azlvalQrZEJSNVJBRkxiS2ZTMkZ3NU1zZDJ5MUpxZEhkem16dmUKUFZjYVRmSnIydHpKZHBlcmFxcFYwdGptVHE2U1Mxc2huYVlFQ2VYOFpLN1IzVzFyVmVydHRIU1pVWXhTYVdwenB4cFJoSVM1dWMwZApiY01vTjdxN3VjMGRWZnVtMHVoTzIrSFJybnFIZTY0QzZUYXV2SWphNnl5cWQwdFIybFU1ay92cVdoNHd0VWVuVnY2VVBlV0JEZXBVCmN3L1YrQk9XMFVIbldURUNyNm1RVGt0R3MwRzl3bEEraVVOemZTSEFvcEIycUNPSkRGSkhOdlFuNUdSdEhiWUFack5kWEU4RUwwMlYKbmJQVTNWQnk1ejJsMTc4ckM3c0UyVkNBcVZUeXdUVm5Rd0ZRcXZsam1yT2hBREJ0R2QzS2ljMUk5OTJsOHZIMm94RFlVVkRoT25CNgo5VFhDMGRUYlZRb0tMN1ByN1I0U2lLQmNWTEpMVmdxcjE3SWpZSm9LYStWNlFJZ0xhOTgybDRXMWI1djczUW9JZ2QybGtUSGlNVEJhCkxjcU12M2ZKa3JJbFJVclZmcTlLT2RTdXl5TmRXSWwzbVVHdDZJbkw1VkRQajZ1N1ZLYXdOeC9ydHlRdVFkWE85K3BnQ0I2OHloOFIKYTViOXRxNUcxWEtuYjdEeDJzM21CQVZGS2F0VEI1dzczQkpBd2JtMVd6VUZoUkZDcVJzTzllV3F0alVVTXVnNjRYVzZKY1N3bzZHUQpRVk1FL3VZT2QweDlwVnlQdXl2RVVDSzU0dHErMWZvNjNDbFZQdDRnaGd5ajBSM3U3dElwVDdXZVNGdW52RnZyaWRoT2ViZUxvVUtICk8yRmRrcGI2a0dzNjNDbjFlNFU5N3ZSM3VOTjZxem1zZnJxOXNQWnp6NWs1Y3Q2cjVzSmFBRXpkekRGb01YU28zblRYRmRhS0t4OUQKdDhhUFlIMWhYYkljV3Q4OVZ3ak9GWHJ6NG80SUNPY3U5WngxVEpzdnBncEh2aFpXVk1Sa1VMdG1BclhMMDFQZkxsWEV4RDhWaFFyQwpjeUdHY1lmS1FtaUlhekY5M3pTV01Xa3BZckkvRHNTZUtHOFgwMUxHSkp5a1N1eVVBOFd1aTJ3WlU5eWhxVUpkMFcxbnBUTHUwQ0tWCldvcVk3SThic2ZGOXJWL1oxVlhFSkpkQkJIc25LdXkwK2d6RExsM0RlOE90L0NMRFVPS3l4RzZQNmdGeGp4clh2RS8rVmpIb3YranQKU0tlcjNTTWlwYnc5MXJ2ZjFWUTlkUHAycHhyWG51elZWUHB0bU1sUlY3dEhsVTU1L2l0clhIbnl5YVpoYUtoNlZxOXhCVVBTWFBXcwpWT05LUjREZ1F0UWkwdmdZMHc5V3ZKVWZXNFVWbnMvNW45NEw1dm5UbThGYVNMdmZXby9ia1RzTVBwVmVVWFVmMmYwa1o0UTlaU3BRCkd3OEs3ZkppeC9RblFSSGVjN3JKUnlxb2h6TllqK1pPNzVVZnFoTDJZWXZuUDNveTlYQk8rU0s4dzNrVXg0VTZXVlNHaDdua2F2L0MKWmt1azZmeVNLOEw3bEVVSzVtSWlkd0hadVdJbGM3OHRpOVJlbWZnV2NuM1luQnhTdHBLTEkvQnJpT0FoRlphbUhlMFJHOWRITUNDcQpjblE2MGg5ckthUUdLeVN3dU9lY29BeHZMSzc5NDVPM21ueVZRUm8yVzRQUGhSRVhneFZYeEEwVmtKWXNZWG1rcFlhNUw0VVU5WDJMCmxnV2xsV0trVGFVK2d0V09QTkppc1UwS01yc0FXZ3Q4N21FLzBVV1laOWVqWDdqNk11OEY4cGpzZS96NlNtemtpbWMxUUhUSHQ2Y2kKdDAyQ09mZUNZcU9UUGF5aG96M0N6VE92RUNkbU56cU5hWk9BcUNFbk9nMFNkREZUVDV6VXNEY0QySS9pd2liVkNJbDhTZEpsYXBYcwprQ0FueXc4cXI2VzBTYjJ3Nlhpdnppd29vS3ZTbVVWckpLbWduRm9sdTNRWG5Wa0FnamM5S1doS1ZYZWlteWR2cUVwVHlkQ2txR1RRCnhrK2lReSs5ODJPajFyRHVUbmVYUlpraFhXUnBpZVZGTTlGMVpXa1pyRXFEa284VDZ4c1MwSmJ5ZVZyMGVDNXlZMFhxcXZpWmNna1AKcjR1WFBWT3VjeVVBN0lxR3E2OVZZckNENHIwdWIreDVqZHB1T05SUWphUVlYdFo2eWpNbzNuSVRMVmVUZUhGbDNGWEZidEpIMXJydQp0UjRVcjR3c0MyL1JoRldBdDE1Q0szVlhuR3k5bUpyWGNubFhuSUlESkIwZkV5YU5TQnl4amtsZC9RN2tOUXg1Tng5NVRJbzF6TFduCjNsVEJuWndjb3hNcjlmWjFncEdKNC96cUlUdlVqMDgycWhMY1h5UVFyS0lIL2ZhSVRPOG4rMk5YL25CUVh5SFpSVCtMRzlxeUtWY3kKNmFxeGl1bTY1NEEzSkZIOXk2eWtGRHRXdGNZRlErS2w2dE9uMVR5cDFWa0t1TEpvS09YazMzT2xVQXFvMXRKWVpmMjRrL2RaU2IxUQpSek16aVBvYVMzYVowUUZNcll1T1hWeGRxd0JNdEt2Y1JqSFZXaDd0a3hTZVhONUlNZFYrT3Jvb1ZndCt5Z0M3S0JlV3NnNXBpbDFaCkJhaTFCbER6UFNSeUJXS2FhZ0FWc3RNMVZBRnFyUUc4akNmcnFRTFVXZ1BJditGUWZ4V2cxaHBBRkxXK3VncFF3Q29LSHFZNEQxWmYKRmFEV0drQklzZXVyQURsNkt1c05ZWTJWM2lwQXJUV0FySTk4VlJXZ3pKQXVhZ0Q1NTVYVWVDNW5kWHRUUHUwZDJXNXB5c2VieXovWQpsTzhpcXZDUE5PVlQ2OGgybjZaOFZNMklzb0Z5ZTFNK2cxWENLcng3VTc3TC9zai9SRk0rK2Y3STkyektwNmwvNVMxTitmaFJCVGlvCnNPeWdhQktwbFFiTGQvVzcvVzZvcDN2Y0RhV3hyNSttdTZGdTd1dkhtOW9kN29hUzYrdW5MMC9wMnI1K3lsMzlycm9iU3FLdm4zSlUKU05vVDE5L1hUNXI1Rk8rR3VxS3Zuem9uMzZPdm4zSm1DQnU1dXJHdm4xb2wxNTBDdW9wZC9ReFdYUUZkMmI1K3lsTVR4UzZ1N3VzbgpHTWhGVjc4ck9vQkk5dlZUbnBCVWh1bzFmZjBreXhHVmJqWFhUaGpObGJLU2QwRmYwZGRQK2VZdjlrejh4cjUraWh0ZEh1MWlkK2pyCnB4d1cxblVEbFVKZlAyVlhWeklMK29xK2ZsSmxrcHpvM2RhUDd3NDE3N3I2K2lsRGdYSCtlL1QxVXo1UU1XaUdjMHZodTdnaTlkcSsKZmhLbUpxK3JINzg3QTNaRFh6K1JHR0xDcm42Q083dDBsNmRnYkY4LzFiclh1L1QxVSs3cXgzTHlqWDM5bEJPdWVSV3BOL1gxNCtxMwpwSGhSZE0vVjFYMzlsQW1JTE5nNzlQVlRrTFhqS25DbmZud3VaU2lhKy9HcHRKUFQzSS92cHI1K0xCUko4ZEZielhIUjEwK2g3a0UxCjIzYXV0Nitmc2lVUGJ6eTRSMTgvdVQyOGMzbVNlRjM5bGdaem5qbEpWQk5EdGI1K3l1Zk53aXlDNi92NkNha3Q5Zz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJRnEvdHg2Y3ZTVU8rSDk4ZHhJZnQ2bmQ3UHo0dFJVeHF0emRjNW1yb2E4VW5ya2k5cmErZklMQjkwZFdQcWhpNnZhOGZXeXFsMUZmMAo1cjUreW1hT0RJL3A3dXVuM05YdjVsdWI2TDUrTjhiNk5QYjEwMUQzZW9lK2ZzcGQvWFQzNDd1cUNsZWtMUy83K2wxZkRNL3I2c2ZECmNsTmZ2OHRRTXIrcm45d3RaM3I3K2ltbmQ0bDJzYXY3K2lrbk9vbGlTbGYzOVpOWUYxNVhQK1Y3NGJUMzlicytiaW1rbVA2YUp4bS8KOG9hK2ZwemlrdXJxZDNYMm9LaXZueUpIOERxQTNOYlhUOWt3cEx6WDIvdjZLUmZFMGp2eXpYMzloSk1VZC9XN3NNYzAzMlFsN09zbgpid1JSTm96S1RWWWErL3Bwc21GdTd1dkhYOG5MQXh5RjZsb1orWlR1NjZlOE9TaFdjZDZ0SUpiYTkvMFMyME5meVVaN2FVdG5mSWp2CmxWcFNOeXFLOWtyd3JYeG9Wem54WGxTMktPQW1oc2U0MDV2VTQ0NWZCMC9GcG1oVURzRU82ZHR5aE1IOEwvTXdTODluZ1NkYU84TGEKTitLNE5JSnQ1Y25vL25pMllQN3VLa0s5Qk91cGpKWjZxdUxESEJ1amYvcXhDd1lPeXljeXRmNktOZG91aC9mUGFjL3RjMWg1OFp3MQo3OCs1c1BGelBBdUFUNk9NTlJSTmxHMzFsMzB6dEYvMVBneldTTWdYbkViclpOZFg5UjJNb1ZvcE9NbzFWKzMwN0swZWZsKzI1cytoCmZjY3gvN2E4WjUzQndxK3AxYXl1NHV0a2R6dFBPemI3WVdSdlBXUTI0V2ZqKzNQYWJnazRTbUhyOTBlbDRqd3Z6Ui9CN2VjOFRzcysKcXUxTXRWdHZIYVBQUGNnWWljVys0MDRHN0JtTXpGVnpHUGs5ZmNKS1lWdnpjQmpGSElkajlMMXlOQS9DazJObzh2SEtWbHEyM0k5Kwo3N3N2VUl1Wm1MSzNYLy9oK0xtRnplWmlacXEyK2xLSENPcExFLzNhTUphZE5uYlFvV1piUU1KK2t1Y1JiblZsTTdVbktXSWhZb0RwCm5teHdYUUlXbyt4Y1VVV2pZMnlmdjVvNy9WYktzam40U1JzUlhKek42NWx4Qml0Sm41amlVT1Bac3dzK3czeTErZ2JWSkJxelpLdGwKeFN6ekdmTDNYN2RDazMwbkVoOHd0ZGM4cjJpT2k3ZnlwZ2JVbWhRZFVtRnIvbXl3RnZya3ZJc2FhT2EvU3MxdStEay9NMlg4cCtSVAp4bitjSmNpWWVmVmFmTThFQm9Cc20xUnAzZWwrWnN0aDR3VEE2ZXdac0ZUN1RBZnVYa1ZnS1dOdmtFblVqQWMwcSt6ZkZuSnl0dnIrClBuUVhPOTB5L0FRbS9McjJ3YUpkRCtYV3AwSzlBL0tjTVAvSkFiTVJoaWRLRS90RFBqdnpDWGVnMkRHZ1NHUUQvb3k0VU5VdlVEaVYKSGZqejBZTTBqTmtPZHJHUEEvZ2k3Mk4rU1BySklsR1BBckJsekYzd1dNK2tvMXlwNEI3NzhxODRYZTFqbUQ4VmNhS0J3c0Y5NGE0OApuc2ovalAwNGVQRG81ajBZVy9LUEJpdnpLTy9sSGhHNWZqdk5QS2l3K0twOGZGNUxaY2tRNXRrSlZNWjJoWmRxcGpIN25adDcyV0RGClN3UGZsSDNrNWNFcDdlSVkvTTVQMjBlaFp3eFdHZjNoNVhDTmdIOFNGT3pKd01yQ2JyaXBWeVk3SEZyb0RTOHZCbXNoN0NrSFRMZHEKK0tpWHB1RThoTlBBWUhMWUFaK1dYOUNmTk5ocC93T24xNnBIdXYzMXQxVUFQRzE1MEZQQ0dZN1BHS1F0SDRNRmMxcWlHTEYrc3hZOQpNU2ZnRHF4ajRmdjdJd2Q5TEVjeHcwWDhpQTc1QUloK2l0a2w0QW56eHJWRHhIZ1FjYi81bUhTM0U0ZHdxaDE4emthK1pnNG9kVG5DCjJYOHpJbGFCRk90OUVPekNqd0tXWkhKRURwMGZWY0o1bnEyWXFiOTd1QVVqQ3VWSHlOUHZQb3BFaFg0Rmh4dTVoU2hNWDBMMHAzV2IKb0QrZFB3YTBiVWtVbmVNaC9ZbFloQ0NJRUFWaTJNOUFpSDBmck5mWUVzTjFEYU4rUFR3M2FkZ2paNWZsdGo3Qkc4MG9NZnRGRHhERgora0ZXS2llOHVZemVqWG00MHlSZ21rSXp0L1l0WE5uWDZYZXRVSzBZM3poRndoN201Tm5nZ0kwWGMrQk9Fbk1CNjdreVo4Yno1VWZUCkNOaUlkaENOTm1CTGZJVG9UNFh4RC90ZWdINnY4NWNWaitZbDMvb2lDMnZUTk50c2Zkb04xdUxFbTNtSG0zVVM1YlBSc24vYWhTbFoKRkpvT3drTmdtMEJ2c21ydFVtOHl1eGpVbkNLOUdmOTYyVHFLNzduNlU4NjVQc0JMQ3NMbFhCSHp0UzcxcHJqdHNCMU5IS2kxS0xxaQoxc21lOFFIMVQwK2p1M0pUcTVyckRvNllmMlh5K1g5TXI3YUFKZlozd2pDSDcwanJNYUF0VVNJNGlyZUNQNE5PVk9hTUZ6OHo4TSs0Ckd3YzdSd29xUXVnak13di9DWDdUZ1NxbDdFTjJIVXk5OGFGSUJGUkNNTkpROXN2RWxNcVl4T3JEQjFVSHpIM2R3em9MYkROaUZyVHEKb25TSUoyK2RzTjk1Nk8vYU9PVHBLdUNOU0tlY0g2MnlNNEZXcldGWWFGS0ZDMUhGK2Rvd3R3OGpPM254QW5VZlFORGJvcTBGVHYwegpDNy9ER2ZPc0ZxRXBVU0s5NkJYZ3lUWDM0TSthbjRFTmRTa2NEZENsbkxLbU5CK1lDMUNwWHMyc1JGbDRGeWNNZEhSRjNLQVdOYlIrCjlQL1NjWDdFYU5qY0ZQSnpaaVg2RHQ1YTBNQm0xazBCdkg1dzg4MGNCQ0taZnVNQnFIeDZmRUlBeTFSNzZLTHkrcG9uYUdDMkJSZEoKMUk3d096UDRMbnFtckV4Ym4zamltZHFVMlpWOEtiSUFHcGNBemhRQU1CY0tSTmxXNWx1OWdPZmQ4RVlFdEFiQUVIOG1ZSGtyMkpnOApaVGY4NUdPLzg3UGZnWFh4dk8yaGZYQ2dtQjJ3ZlorM2k5azQyd3YyekI0eEp0WWp3VmhYd0NpYldKcWZ3R0FJbHNROW8ra05BMDZJCnVtNGladVI2UjhOZTVFYnFKb29lc2pQcHZ0M3I5alBmQndGYko3MHVPV2ZWemR4dFVmN3ltWDdiWUFadUVpRDFlWkZZWDE1NlFWZjQKTWhRTFJGNVd0TlZMbkhITzRFWE53cUhiWUdKR3c3c0R4TVVqd2NjaE1PRmRRY0tTd0pudnp3YW93ZzRSd2VjVkVBRVYxMUZFR1BDSgpRQ3dhaUFqd1FaOVBBbEhyY2lEeEhBbTRmdUpDSW95VHp4d1JBaDlyUE1wclp2VjFuUGo0U0duRC8wdVdCT0srMVQ2Tys3dkdyYjlJCkVlR1E2MzFvNHdOME5UOWk3TE9SSTRIQmFnd2VQMndzRWJvS2ZBQXZMR1dvK0NuRlNySUF1RHlsM2s2Wkc5VjRFVWFKNWNZQTVVWEwKTklhSEs2ZkJSRWhRT09LMmFTd2xWNE5iQzBvcWxhYngrcm03amFkZmgzdFdXNHBBYUtNRUFERS9LazhEQUhCWkVDY3pJTkw1L1ZZQQpZbXRVSDRPaWRqcVlFQUJFc2Q0ZkJ3SXIxM3RUL3B1OVQ1Wi9lN3lGeDhpdnNqRG04dnAzTTQraDY4QnY0N0g1NlJZUUFNRGFlRE9QCmRUWTM4bGh2Szhkam1rRk1EdW9NMGhmdzJNVTBsamVTOG5WMTVuanNPaEM5b1FaeDdUTFJIbWtRRTNuZHAyME1jeDRwS1lycFhZM2UKVWwzaStXTUFjN2tZeGVyRzFlaHR6aUpTTWhUVFBvMkRpbXhJalVGUW01RHFuVTIzTVhiZmJGYmZrWW5qSndmQ2FPOHMzL2dnSnBOcgo5d0IyUjU3TTkycVVVQm5EVWtZK3dSaDQybEtKRXBQVjhWWnRPZG1jTk94RUN2dlFaSDlXSG9PNnRweWNqZncvcDJhVDRFK2JtWWwwCmxpa2ZFaDdMeFhoaGI4ZUhLd2hXM3pPY2RZMmUvYTVtOU5TN0w1UVJDSDdEUmNxNjBPTUw4MXd6bEU4eFAyV2l5QzVsWXpnRG5qYzUKdHZ4OVVoRVErMk12Uk5XOVFxOTc2SUcraXBlSlZuNGU0WjlzQUs1c1p6ODVLTWR1Zmx4QmE3eE0rYnZ3NE4rRHZHNzZ6N3pQUjduYgpURTR2OUxCWmR6eVE3dXh5ak5zYmRMREJSQ2MvZUJrN3NjRzlxcHYvb09abXc0WlZyeUNpNkJsRTJCQk1sY1AzRmJBa0Zsa0czd3ZPCkVZWU9VWlFlWGR4My9PaG9LZS9oUFJCRVIwc1ZId3dPdVFEdFB0MlVyLzExL0FXOFUycmk2TTlBdW0wRWY3NW1PTmhET216eFNpSnEKdTRDL01NOGh0d0NlMDBBdm9SWUZWdnZMQWNyTDY0c2Z4alk4QU1IZUF2NXNJN0F1S2lUaWYvMElzSkZKdHp0bFRwcmhVemRBNEFORwpTNi9HaFc1SERKWVJvSEc0N3kzNHgwbGJmTEd4dHcxV01sa00vdkxDNjFUd3ZkUnQ4SS9mbVRONDlyUW9Cc2E0eVV0QmxJSkg1U21wClFHUnV1a1FRblUvUlJpeGFJalAyZWF0UW1UMGFhYSs2MThVWlZtbnhBMzdPOVJEc2xYU0VxRGNPc2xNZkF5eW5HTDFna3hjVUV2SFEKNGZWSjIwOEhlU2RkREovVUtrN3c2UU9uNDFHVEFaR0tWUWl3VnBOeGdQazBDMUlSZUErOXRLc21ndWhGUitUZ3p5NFRsRnQ5WU15bgpBY2R0RThLZXJxWG8wYXhtQWQ2RGdURXdwT09TOWIyVm5jdnFMNHk4dGtBdUdvZ201Z1BuZDM0WkpsOXk2Nmc1S2hWcG9TYkUvVU5sCmJIT2htbFBYeHlLZG9vdzd5Q3luQVlhWDhJd0RmQnJqektjWkZ3S2Uwa0drMDIvd1lqU2hVNGQwT1ZPSlNNZHJxcE9qdWpWR0JVTnQKdzJNRWV5cTVRMGoydjhLMExIWXhNM0pTbGVPRCtxT0RMTVYweEFmMVJ3ZWw3dXRUaXcvcWp3NUNpdW1ORCtxUERsS2NyQzgreUk4TwpadjhyWllqaUVmd0IvZU52bnRmenc4dmhaL0d6ZWZBWUVnWi90b0xqN2Mxc1N4N204OWI4ZjUwSzIrbjViNzQ1UGNRZi9ObTNmS1VTCkRSWG0wKzFzL29DU21VS2pDS3MydkRTMzB2ek5QOUlXaEJoUnNEeFgrSTZWVm1WejgzRmMrTVo2S1o1WVVGYktyclUzZXBhL1piQ2gKdXFjK3RLdCtHRDBFK1daMGxJOGUrR2VQMnVVcElra2VyQ0t0NURJWDVvZmN1ZWl1MTk1RnB3UW9HQk1idFVwZ2V5aSs1K2JOalArNApTUHJMMlg2MTBDYzdieG4vQ2RzeUFVRjRuaW5JSHVDZGVrc2NrZ05ENW1Rek9wUFBRYVBYYisvQXcvSUNtSXVsRVBVYlBjNU1Cbjc3ClpIUTNUTTl3ZnMvd1Fkcm96UVptMEdvb0cxMTdNekRMeHZzb1gxWFlDRGN0Y3R4V1J3Nkh6SEsvYnBHYU5WRG54N2huc1VpaFl3TmEKWDBMeFF5Y1pqUGo1MFo4d3BkRkJmL3FkSStQQVNWc0Q5ajFzSVZOMjAzL0dIVjdLa0tHQ3p2Q0dHQnJFZHp0K1lpUzVnbkduajN3OQpydU1va3p2SU5GaGxqeks1QnplYkNkUXg4SUNQK3g4d0UxQmFIbTBvL0hObWdzR3F2SzNmeDB5Z1F0dWFJVjVwSmdCRGh6VVUvamt6CkFSbzZqS0h3ejVrSllDNnNvZkRQbVFrOGVabitjMmFDd2NvWkNtSXpRVGtqaE01Q3JNWGxOZ2RhL2J1K3lETjBwWmEvd0pYcURJcEEKS2I1M2pjN252b1BXbStmNEsxU3BaYUJMMHkyajgyZWRNbm8zalUrb1MyTndYN0NJM1N0cXdSNTdsS29EUXBOMUlJSGpEalhmZHZSTAo0NzJYU2Z3SU9yakVEelpYdzA1NWYwQmJ1bWx0Q1U5WWVOcVMzc3J0aEQxai9FTExEclZsM3VkQnQwOFRYK2RreGYvVFBma293K1BICkUzZWp0QzJneDRwUFVrWG53Tzk2cm9wV0h6NW9BeXlSQTZkYUtUMzJSWXVBU0sraWJCU2dVdUhJSFBBNFk1VmJtemFrMFBuQ09CdUcKNyt5VjRrN0lHM1ZrakNBRE5FcWQ1dU9sdGlQS1dqRzBTVlJhQkNIRm5uMjBSV0xKK0F0UHlTMEc0THhnbFBMa2FleFNtMEFMQWY1eAo4NnA2MkRSVzdpUVNLSE51OTBXTWVGR2d3WjcvaTFxcVVtbHB4VUZJZERqSXBlVlI1NHRlL3ZuaU5Gb1ZuUzhhalNjSEd6ODd2bDZjCkx3WmRKVit3bkdXTzJ4NjNUT3Ntd1VHb3Q4NGRCUkdPV0M4Z09BZ05tNDNXbktYQWdKamFMazVTYzM0ZUFKenNsbkIwNEVzbk5OQmkKRHpnZG1leituMVM3aUl3RHlHZ3B4T2ZNZDUwOTgxM3Y0UDk1MmJpNVJBdkVjZ0p6bnc2dENNT09Xa04rU0lYQkNkSG5udlQxK3E3TQp1MnZNSEVFaU81bytmVE5ZeFllUTZGYjA2NDhnblZLbmJ6QWtwUG44RGI4NVZMZUs3aGdpWkFJOElxQlRZWm9JUVQ5SEJEaWFGZThJCkV0MmtKMGNDSm9TYWpxODJEQkZjb2lOSTc0MUgwWThuN25oZWU5aVZ4d2ZwK090SncxRTBuV0lvZFJoTkZ4WlRWRVRueDFLc3BIQ2EKVFpkRUFnQmc5VFZ5NHdVSTFOUk4yeGlvMUp4TEVLZ2gxUzNUUUFuOGpFanhqclIxVEtNZDkrdEtETGlVU2svczVMcUZwNkZMN1JZQgpvQ21tbFJMUUEvZXFUZVB5YUo5ZkpJTjdkbmxNY2hvYVNRbFRLSEVFNEdncWxYTnV0cFdId1FvVEh2YThONEhiNzZUZkpIOXh0MFRUCkQ1clB4MFA3alR3R0RCVEhiVHhXQy9vNEFMSThwZ2hpa01GdTVUSDcwbkViajJFYnB3eVBhUVpSYzN0VUdZUVBBQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJVFVMSVk0T0k3NWJWQVA3OG8xOEtBT0F4clNCS05aTzZ1RW9Eb05OWW9jR25XZmRKajJIZ2t5WWxIQU82bEZ4MU5ZQ0JxU3J4U21PQQpTY3k3K0cyckFhMWFaVktpL1VWcEdtVXZxVTgyTHNZUXJ1SFFHcjlCTnNycEpxRXloa1BLai9OMjVITHc1R3NuZVNBbUErdHRlOEJrCjRYWXpPN0xpS0JUR3NNUGxtVW8wQmxyMnhhT1lXaUxlbXpoaTZuMzAzWlprQmhQY0pVVmNkZ3lzdGtRSm55SGNnWXhFcnY4WVFoLzEKR3FmQlF0bzk3QmJPNDFJdC8vVVVNOU1oZzFDR2lTUlJJZjZuUDJHZU9sVTZZYkJLRlUvY3UzUUNZcmtzbnRCZE9zR0dRNldQSmRHNgphRHFZRkI5TDhoN3M4Z3YyZ1NpbUR3T296ekNxd1B1MjdXQ1BEWjQ5L0FlTElGdVRBTDFsNENWQnZVS2x6RVAxQURrWm5RTnNrYVRDClB4c3V3ZEVwa0IxSTJ3YnRlZ01tanRQZWhxZU96c2R6a0M4aEt6WDhkQkZGdWdMSjFxREJUaHR0QkRiQWl6S1dod2Y2Z05ucERWTFcKZU12TFA3aExaeEs2ay9BdkRtRllMNTV3bHNrazVTWGREV0tqOXNpZE5ZUk9yNVo1NmFzZlhSaXMyYmV6NWFmWW43M0NrNk1XenZFdgo4WFVlWk9pWVJHOFFZRU9SUVg3QlJEckNzc3E3bDY2YWFPU2hYbm4zTTJ6L2pxR0VoaS9vY3I3alRIVHBIWjBTd05PRTl3RDdLVWlCCktDYit3dURQUGcxeE9FVUwzMmVQOGZzWSt3bm5yejY4VTV5dFNlZ0grTFVVaFpXRmlUTCtocGk1OU1PeVZTcHV1Um9WQTMzQkNWZXYKd3E5UytmSnhTQU0yNXdzazZoZjRwL2NPb3c5Zk9QdUo0TDlYWHdUaGQwRnVORUQybWZFMHlGR25seSs0bzA2U0xOWTdVU2E0K1JmQwo1cE40R0hLb2o0MVQ5S2txeVA4ZjYvc2ZHK3ZiL2xmS2tBQ1RxZUQ0c0xpWjhjOGNEVllyK09adGZqcnY0QXVoWVc2KytOblV4ditaCkh3ejRBL1VmQnY2RC8wWmlEemdSZlNCQ0lmQkhDSDVibXhnYzZOMEgzUGxRQTd2TDBKODluQW8vMDlQUGRqTSsvT2NoRHIvcTFtdnQKU3VFaC9rQzlPd1R2Smg0Y1lEVFlFTHdOSGpuaFFlY1FqSEJvd0I2eTRIL2RmeHZPNEQvczRjV0FQV0QwQU9CLzNiRUJvMGNFM3ZvUAorT01KZlBnRlgvMzdBY2NlNmc4Zlg5akRESXk4MnpRRVlnOWVISC80b3o1Z0QydjBJZW9MRVRFd2t3RDRnTWRDNEl1SFFBVCtPelVFCjRQK3REYmd2R01FSUhQNkJVKzlqR0FFL0FoaFRBNDZBcnRIL0U3NVFNQWJlb2wveDRvR0hBUG9Yd0lxZ0R3QW5BRUE5aVZHL0lCN28KZ1UwTjM0WTJuSjh2QWdrS1VhQVpnYUdqMmMwTTRRZUg4Nkg3emxBQ3ZBZkhoZm5Da1ZnNEdrQWZNSUlnd0ljWWhvZURERmxFTk9LSQpnZEhFaU5HMGlJaHBFVUcwaUZDMGlQQnBFWUVFaUhDMGlOR2t3R2hTNEdKU0VJZ1VCRU1LZ2lNRlF3Q1dGQmhOaWhnOTNiWTBIOUg4CkFjakFYLzlMYWxtSDdHU3BqM0M2MUNlRkNZTVhxQ2xiaDRxVEJvL3BhVk9mRkNZT1FESlRCeDhWSm04ZHlvbE85bkFZVXgrQnZEeGsKejZmdFEzTjhQTTBQUC85Nzduend2NTBPUDVzRkpUMUFvbWJieVh5WXJjU0dMNVBqL1BDditXeFluZjluU0wxMDVBa1pEdDdkYkRjUApnWENBNWk4dHNzYnlFZUE0aW84SW5HWWtQQVlKRytYb2lzY1FZZkVZeFVwNGpNOUw0QytjL2czOFFPQVVMeEVFeFV0RVFFUlNJZ2hKCkN2NmxlQWw4WUhnSlBvbFJ2NEJvNmNIOXR3c1d3V2daZ3RFeWVGUk1FRXJONExTZXdRV0tCa2VhQnYwR0VZVFdNd1N0WndpeG5pR1EKbmlFWVBVTndlb1lJMEVUZ0VRVC9KOFFMVFpuK2lMSHlwVGh0SkdGbzRqd1JrNW82RWl3MGVlcVR3dlFwRVVNRVlFUk1qZ1QvdzRRcwpFS0I1S2tEUVBCWEFJSEVESEhFREdDSnVBS040S29EeGVTb0F3YUxmd0hkeEJBZHhWU0JBY1ZVZ0tDSnJJQVRKQ3Y2bHVBcDhZTGdxClFKRVIvb0loYVNEdzN5OW1BVWJ2QkJpOVE4UkVKQ0VvdlVQUWVvY1E2QjBDNlIzNEc0WWt0T1lKMEpvbklOWThBYVI1QW96bUNYQ2EKSnhDa3ljQWpDZkZQQ0JxYU5QMFJad1ZOY2VKSTBJaVlVTkNrSjQ4RUxFQXdvcVpFQUVyVUVBa1lVWk1qd3Y5dFVhdmxLRnNXV0xiSQo0dlFDLzlyNk9sN01XNGZ4enhwWXRvdmorRi96aC9GbXN6Mk5UL01kZVBLd09NeVBwKzFoL25CY2J2OE52d0UvWVY0SE52SUxhZmcvCndrbmVyZz09DQoJXV0+DQo8L2k6cGdmPg0KPC9zdmc+DQo=); + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + vertical-align: middle; + width: 1.3rem; + height: 1.3rem; +} +#download-btn { + display: none; +} +/* Content */ +#content { + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; +} +/* Code */ +#content section.code { + display: none; + background: #FFF; + border: 1px solid #E0E0E0; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 15px; + font-size: 12px; + -moz-border-radius: 1px; + -webkit-border-radius: 1px; + border-radius: 1px; + font-weight: 400; +} +article.component { + padding: 0 0 10px; +} +#content section.code h3 { + margin: 0; + font-size: 12px; + color: #000; + font-weight: 400; +} +#content header h2 { + font-weight: 300; + margin: 10px 0 25px; + font-size: 20px; + position: relative; + display: inline-block; + padding-right: 10px; +} +body.light #content header h2 { + background: #F4F4F4; +} +body.dark #content header h2 { + background: #4A4D4E; +} +#content header{ + position: relative; +} +#content header:before { + content: ''; + width: 100%; + display: block; + position: absolute; + left: 0; + top: 23px; +} +body.light #content header:before { + border-bottom: 1px solid #E0E0E0; +} +body.dark #content header:before { + border-bottom: 1px solid #58595A; +} +#content pre { + padding: 0; + margin: 2px 0 10px; +} +.showcode { + margin: 10px 0; +} +.showcode a, section.examples a { + color: #288edf; + text-decoration: none; +} +.showcode a:hover, section.examples a:hover { + text-decoration: underline; +} +section.examples ul { + margin: 0 0 20px; + padding: 0 0 0 20px; +} +section.examples h4 { + margin-bottom: 5px; +} +section.examples li { + color: #58595A; +} +/* Side Nav */ +#sideNav { + background: #4A4D4E; + position: absolute; + width: 100%; + z-index: 1; + height: 100%; + left: 0; +} +#sideNav ul { + list-style: none; + margin: 0; + padding: 0; +} +#sideNav li a { + color: #F0F1F1; + display: block; + height: 46px; + font-size: 16px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 12px 0 0 20px; + text-decoration: none; +} +#sideNav nav.site, #sideNav .combo { + border-bottom: 1px solid #58595A; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px; + display: block; +} +#pageNav li { + border-bottom: 1px solid #58595A; +} + +select.docNav { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #595B5B; + background-image: none; + box-shadow: 0 0 0 1px #303233; + border: none; + border-top: 2px solid #666767; + color: #FFF; + text-shadow: 0 -1px 0 #000; + overflow: hidden; + font-size: 14px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; + -webkit-appearance: none; + -moz-appearance: button; +} +@media screen and (min-width: 650px) { + #site.open { + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); + } + #main-header nav { + display: inline-block; + position: absolute; + right: 0; + top: 40px; + } + #main-header ul { + list-style: none; + } + #main-header nav li { + display: inline-block; + margin: 0 18px; + } + #main-header nav li#download-btn { + display: none; + } + #main-header nav li a { + text-decoration: none; + font-size: 20px; + color: #7F7F7F; + } + #main-header nav li.selected a { + color: #373435; + } + #slide-menu-button{ + display: none; + } + #main-header hgroup { + text-align: left; + position: absolute; + display: inline-block; + top: 24px; + } + #main-header hgroup h1 { + font-size: 60px; + } + #main-header hgroup p { + font-size: 15px; + } + #main-header { + color: #373435; + background: #fff; + height: 148px; + } + #content { + padding-left: 240px; + } + /* Side Nav */ + #sideNav { + background: transparent; + width: 220px; + z-index: 20; + left: 10px; + top: 150px; + height: auto; + } + #sideNav nav.site { + display: none; + } + #sideNav .combo { + border-bottom: none; + padding: 36px 0; + } + #sideNav li a { + padding: 12px 0 0 10px; + } + body.light #sideNav li a { + color: #797B7B; + } + body.light #pageNav li { + border-bottom: 1px solid #E0E0E0; + } + select.docNav { + background: #595B5B; + box-shadow: 0 0 0 1px #303233; + border: none; + border-top: 2px solid #666767; + color: #FFF; + text-shadow: 0 -1px 0 #000; + padding: 3px 20px 4px 8px; + -webkit-appearance: none; + } + body.light select.docNav { + box-shadow: 0 0 0 1px #949696; + background: #DDE1E1; + border-top: 1px solid #FFF; + color: #454545; + text-shadow: 0 -1px 0 #FFF; + width: 192px; + } +} +@media screen and (min-width: 880px) { + #content { + padding-left: 300px; + } + #sideNav li a { + display: block; + height: 60px; + padding: 22px 0 0 10px; + text-decoration: none; + } + #content header h2 { + font-size: 28px; + } + #content header:before { + top: 30px; + } + section.code div { + display: inline-block; + width: 48%; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + section.code div:first-child { + padding-right: 5px; + } + section.code div:last-child { + padding-left: 5px; + } + .max-width { + max-width: 1180px; + position: relative; + margin: 0 auto; + } + header#main-header .max-width { + top: -10px; + } + #main-header nav li a { + font-size: 22px; + } + #main-header nav { + display: inline-block; + } + + #main-header nav li { + margin: 0 25px; + } + #main-header nav li:last-child { + margin-right: 0; + } +} +@media screen and (min-width: 940px) { + #main-header nav li#download-btn { + display: inline-block; + } + #main-header nav li a#download-btn{ + position:relative; + top: -15px; + display:inline-block; + box-sizing:border-box; + -moz-box-sizing:border-box; + background-clip:padding-box; + font:inherit; + background:transparent; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + text-overflow:ellipsis; + white-space:nowrap; + overflow:hidden; + font-size:16px; + line-height:3rem; + letter-spacing:1px; + color:#454545; + text-shadow:0 1px #fff; + vertical-align:top; + background-color:#e5e9e8; + box-shadow:inset 0 1px #fff; + border:1px solid #a5a8a8; + border-radius:6px; + margin:0; + padding:0 1.25rem; + } + #main-header nav li a#download-btn, #main-header nav li a#download-btn:hover { + border:1px solid #143250; + background-color:#288edf; + box-shadow:inset 0 1px rgba(255,255,255,0.36); + color:#fff; + font-weight:500; + text-shadow:0 -1px rgba(0,0,0,0.36); + } + #main-header nav li a#download-btn:hover { + background-color:#2f9cf3; + } + #main-header nav li a#download-btn:active, #main-header nav li a#download-btn.is-active { + background-color:#0380e8; + box-shadow:inset 0 1px rgba(0,0,0,0.12); + } + #main-header nav li a#download-btn:disabled, #main-header nav li a#download-btn.is-disabled { + opacity:.3; + cursor:default; + pointer-events:none; + } +} + + + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/theme.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/theme.css new file mode 100755 index 0000000..7f1ec6c --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/css/theme.css @@ -0,0 +1,28 @@ +pre { + padding: 0; + font-family: 'Monaco', 'Source Code Pro', monospace; + font-size: 1em; +} +.rainbow { + border-spacing: 0; + border-collapse: collapse; +} +.rainbow .line:hover { + background-color: #171b1c; +} +.rainbow .line:hover .line-number { + background-color: #101313; +} +.rainbow .line .line-number { + text-align: right; + background-color: #1b2022; + padding-left: 0.8em; + padding-right: 0.8em; +} +.rainbow .line .line-number:before { + content: attr(data-line-number); +} +.rainbow .line .line-code { + padding-left: 1em; + width: 100%; +} diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..9e9e4de2601568908009b24f1cbc8adff31884ac GIT binary patch literal 23949 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..6eb48e7d492e4290175c03218b5530a9d9220182 GIT binary patch literal 52660 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 Xh{gj8fogTf@X6E(R$0P<_m%o@fv!po literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..2383f47354b74e261bb9874faa5d6d0fe38d507c GIT binary patch literal 27068 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 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..bda2005c0248244ab89377c7c8c04934b4c1a825 GIT binary patch literal 23716 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 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg new file mode 100755 index 0000000..e031390 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..0959ecefeed75716d0f3abf3b4b4db05ac27e574 GIT binary patch literal 51876 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..e1662862ad90f40280557d27588b9a580c62cf6e GIT binary patch literal 52456 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 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..ddf5d1161fe34430599417adaff8b81e0d389fee GIT binary patch literal 23974 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 az1cE(_pEhtM`Eix*%hwY$Pr;>Pu6HLI=^QC literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg new file mode 100755 index 0000000..317e536 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..6d97e7b25735500915d68a9f6b59091f2e8ea85e GIT binary patch literal 51960 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 BzAOL$ literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..d8443157822bdeb5eaf31bdb9de6e5b569044f7e GIT binary patch literal 27048 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 + + + + + Topcoat + + + + + + + +

      + +
      +
      +
      +
      +

      Topcoat

      +

      CSS for clean and fast web apps

      +
      + +
      +
      +
      +
      +
      +

      Button Bar

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-button-bar">
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">One</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">Two</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">Three</button>
        </div>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button-bar > .topcoat-button-bar__item:first-child {
      +  border-top-left-radius: 4px;
      +  border-bottom-left-radius: 4px;
      +}
      +
      +.topcoat-button-bar > .topcoat-button-bar__item:last-child {
      +  border-top-right-radius: 4px;
      +  border-bottom-right-radius: 4px;
      +}
      +
      +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
      +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
      +  border-right: none;
      +}
      +
      +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
      +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
      +  border-left: none;
      +}
      +
      +.topcoat-button-bar__button {
      +  border-radius: inherit;
      +}
      +
      +.topcoat-button-bar__button:focus,
      +.topcoat-button-bar__button--large:focus {
      +  z-index: 1;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Button Bar

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-button-bar">
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">One</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">Two</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">Three</button>
        </div>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button-bar__button--large {
      +  border-radius: inherit;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-button,
      +.topcoat-button--quiet,
      +.topcoat-button--large,
      +.topcoat-button--large--quiet,
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-button:disabled,
      +.topcoat-button--quiet:disabled,
      +.topcoat-button--large:disabled,
      +.topcoat-button--large--quiet:disabled,
      +.topcoat-button--cta:disabled,
      +.topcoat-button--large--cta:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Button

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button">Button</button>
      <button class="topcoat-button" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button,
      +.topcoat-button--quiet,
      +.topcoat-button--large,
      +.topcoat-button--large--quiet,
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  padding: 0 0.563rem;
      +  font-size: 12px;
      +  line-height: 1.313rem;
      +  letter-spacing: 0;
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  vertical-align: top;
      +  background-color: #595b5b;
      +  box-shadow: inset 0 1px #727373;
      +  border: 1px solid #303233;
      +  border-radius: 4px;
      +}
      +
      +.topcoat-button:hover,
      +.topcoat-button--quiet:hover,
      +.topcoat-button--large:hover,
      +.topcoat-button--large--quiet:hover {
      +  background-color: #646666;
      +}
      +
      +.topcoat-button:active,
      +.topcoat-button--large:active {
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +.topcoat-button:focus,
      +.topcoat-button--quiet:focus,
      +.topcoat-button--large:focus,
      +.topcoat-button--large--quiet:focus,
      +.topcoat-button--cta:focus,
      +.topcoat-button--large--cta:focus {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +  outline: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Quiet Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--quiet">Button</button>
      <button class="topcoat-button--quiet" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-button--quiet:hover,
      +.topcoat-button--large--quiet:hover {
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-button--quiet:active,
      +.topcoat-button--large--quiet:active {
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  background-color: #404141;
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large" >Button</button>
      <button class="topcoat-button--large" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large,
      +.topcoat-button--large--quiet {
      +  font-size: 0.875rem;
      +  font-weight: 600;
      +  line-height: 1.688rem;
      +  padding: 0 0.875rem;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Quiet Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large--quiet" >Button</button>
      <button class="topcoat-button--large--quiet" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Call To Action Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--cta" >Button</button>
      <button class="topcoat-button--cta" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  border: 1px solid #143250;
      +  background-color: #288edf;
      +  box-shadow: inset 0 1px rgba(255,255,255,0.36);
      +  color: #fff;
      +  font-weight: 500;
      +  text-shadow: 0 -1px rgba(0,0,0,0.36);
      +}
      +
      +.topcoat-button--cta:hover,
      +.topcoat-button--large--cta:hover {
      +  background-color: #509bef;
      +}
      +
      +.topcoat-button--cta:active,
      +.topcoat-button--large--cta:active {
      +  background-color: #1976c3;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Call To Action Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large--cta" >Button</button>
      <button class="topcoat-button--large--cta" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large--cta {
      +  font-size: 0.875rem;
      +  font-weight: 600;
      +  line-height: 1.688rem;
      +  padding: 0 0.875rem;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="checkbox"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.checkbox {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox__label {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.checkbox:before,
      +.checkbox:after {
      +  content: '';
      +  position: absolute;
      +}
      +
      +.checkbox:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="checkbox"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.checkbox,
      +.topcoat-checkbox__checkmark {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox__label,
      +.topcoat-checkbox {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox--disabled,
      +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.checkbox:before,
      +.checkbox:after,
      +.topcoat-checkbox__checkmark:before,
      +.topcoat-checkbox__checkmark:after {
      +  content: '';
      +  position: absolute;
      +}
      +
      +.checkbox:before,
      +.topcoat-checkbox__checkmark:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Checkbox

      +
      +


      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <label class="topcoat-checkbox">
        <input type="checkbox">
        <div class="topcoat-checkbox__checkmark"></div>
        Default
      </label>
      <br>
      <br>
      <label class="topcoat-checkbox">
        <input type="checkbox" disabled>
        <div class="topcoat-checkbox__checkmark"></div>
        Disabled
      </label>
      +
      +
      +

      CSS

      +
      
      +.topcoat-checkbox__checkmark {
      +  height: 1rem;
      +}
      +
      +input[type="checkbox"] {
      +  height: 1rem;
      +  width: 1rem;
      +  margin-top: 0;
      +  margin-right: -1rem;
      +  margin-bottom: -1rem;
      +  margin-left: 0;
      +}
      +
      +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
      +  opacity: 1;
      +}
      +
      +.topcoat-checkbox {
      +  line-height: 1rem;
      +}
      +
      +.topcoat-checkbox__checkmark:before {
      +  width: 1rem;
      +  height: 1rem;
      +  background: #595b5b;
      +  border: 1px solid #303233;
      +  border-radius: 3px;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-checkbox__checkmark {
      +  width: 1rem;
      +  height: 1rem;
      +}
      +
      +.topcoat-checkbox__checkmark:after {
      +  top: 2px;
      +  left: 1px;
      +  opacity: 0;
      +  width: 14px;
      +  height: 4px;
      +  background: transparent;
      +  border: 7px solid #fff;
      +  border-width: 3px;
      +  border-top: none;
      +  border-right: none;
      +  border-radius: 1px;
      +  -webkit-transform: rotate(-50deg);
      +  -ms-transform: rotate(-50deg);
      +  transform: rotate(-50deg);
      +}
      +
      +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-icon-button,
      +.topcoat-icon-button--quiet,
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-icon-button:disabled,
      +.topcoat-icon-button--quiet:disabled,
      +.topcoat-icon-button--large:disabled,
      +.topcoat-icon-button--large--quiet:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button">
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button" disabled>
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button,
      +.topcoat-icon-button--quiet,
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  padding: 0 0.25rem;
      +  line-height: 1.313rem;
      +  letter-spacing: 0;
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  vertical-align: baseline;
      +  background-color: #595b5b;
      +  box-shadow: inset 0 1px #727373;
      +  border: 1px solid #303233;
      +  border-radius: 4px;
      +}
      +
      +.topcoat-icon-button:hover,
      +.topcoat-icon-button--quiet:hover,
      +.topcoat-icon-button--large:hover,
      +.topcoat-icon-button--large--quiet:hover {
      +  background-color: #646666;
      +}
      +
      +.topcoat-icon-button:active {
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +.topcoat-icon-button:focus,
      +.topcoat-icon-button--quiet:focus,
      +.topcoat-icon-button--quiet:hover:focus,
      +.topcoat-icon-button--large:focus,
      +.topcoat-icon-button--large--quiet:focus,
      +.topcoat-icon-button--large--quiet:hover:focus {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +  outline: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Quiet Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--quiet">
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--quiet" disabled>
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-icon-button--quiet:hover,
      +.topcoat-icon-button--large--quiet:hover {
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-icon-button--quiet:active,
      +.topcoat-icon-button--large--quiet:active {
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  background-color: #404141;
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--large">
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--large" disabled>
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  width: 1.688rem;
      +  height: 1.688rem;
      +  line-height: 1.688rem;
      +}
      +
      +.topcoat-icon-button--large:active {
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Quiet Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--large--quiet">
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--large--quiet" disabled>
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--large--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-icon,
      +.topcoat-icon--large {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  overflow: hidden;
      +  width: 0.81406rem;
      +  height: 0.81406rem;
      +  vertical-align: middle;
      +  top: -1px;
      +}
      +
      +.topcoat-icon--large {
      +  width: 1.06344rem;
      +  height: 1.06344rem;
      +  top: -2px;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.input {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.input:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.list {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  overflow: auto;
      +  -webkit-overflow-scrolling: touch;
      +}
      +
      +.list__header {
      +  margin: 0;
      +}
      +
      +.list__container {
      +  padding: 0;
      +  margin: 0;
      +  list-style-type: none;
      +}
      +
      +.list__item {
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.navigation-bar {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  word-spacing: 0;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.navigation-bar__item {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +}
      +
      +.navigation-bar__title {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.notification {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.notification,
      +.topcoat-notification {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Notification

      +
      +
      1
      +
      + +
      +
      +

      HTML

      +
      <span class="topcoat-notification">1</span>
      +
      +
      +

      CSS

      +
      
      +.topcoat-notification {
      +  padding: 0.15em 0.5em 0.2em;
      +  border-radius: 2px;
      +  background-color: #ec514e;
      +  color: #fff;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="radio"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.radio-button {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button__label {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button:before,
      +.radio-button:after {
      +  content: '';
      +  position: absolute;
      +  border-radius: 100%;
      +}
      +
      +.radio-button:after {
      +  top: 50%;
      +  left: 50%;
      +  -webkit-transform: translate(-50%, -50%);
      +  -ms-transform: translate(-50%, -50%);
      +  transform: translate(-50%, -50%);
      +}
      +
      +.radio-button:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.radio-button--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="radio"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.radio-button,
      +.topcoat-radio-button__checkmark {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button__label,
      +.topcoat-radio-button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button:before,
      +.radio-button:after,
      +.topcoat-radio-button__checkmark:before,
      +.topcoat-radio-button__checkmark:after {
      +  content: '';
      +  position: absolute;
      +  border-radius: 100%;
      +}
      +
      +.radio-button:after,
      +.topcoat-radio-button__checkmark:after {
      +  top: 50%;
      +  left: 50%;
      +  -webkit-transform: translate(-50%, -50%);
      +  -ms-transform: translate(-50%, -50%);
      +  transform: translate(-50%, -50%);
      +}
      +
      +.radio-button:before,
      +.topcoat-radio-button__checkmark:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.radio-button--disabled,
      +input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Radio Button

      +
      +






      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <!-- NO LABEL -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
      </label>
      <br>
      <br>
      <!-- LEFT LABEL -->
      <label class="topcoat-radio-button">
        Left label
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
      </label>
      <br>
      <br>
      <!-- RIGHT LABEL -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
        Right label
      </label>
      <br>
      <br>
      <!-- DISABLED -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat" Disabled>
        <div class="topcoat-radio-button__checkmark"></div>
        Disabled
      </label>
      +
      +
      +

      CSS

      +
      
      +input[type="radio"] {
      +  height: 1.063rem;
      +  width: 1.063rem;
      +  margin-top: 0;
      +  margin-right: -1.063rem;
      +  margin-bottom: -1.063rem;
      +  margin-left: 0;
      +}
      +
      +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
      +  opacity: 1;
      +}
      +
      +.topcoat-radio-button {
      +  color: #c6c8c8;
      +  line-height: 1.063rem;
      +}
      +
      +.topcoat-radio-button__checkmark:before {
      +  width: 1.063rem;
      +  height: 1.063rem;
      +  background: #595b5b;
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-radio-button__checkmark {
      +  position: relative;
      +  width: 1.063rem;
      +  height: 1.063rem;
      +}
      +
      +.topcoat-radio-button__checkmark:after {
      +  opacity: 0;
      +  width: 0.313rem;
      +  height: 0.313rem;
      +  background: #fff;
      +  border: 1px solid rgba(255,255,255,0.1);
      +  box-shadow: 0 1px rgba(255,255,255,0.5);
      +  -webkit-transform: none;
      +  -ms-transform: none;
      +  transform: none;
      +  top: 0.313rem;
      +  left: 0.313rem;
      +}
      +
      +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +.range {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +.range__thumb {
      +  cursor: pointer;
      +}
      +
      +.range__thumb--webkit {
      +  cursor: pointer;
      +  -webkit-appearance: none;
      +}
      +
      +.range:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +.range,
      +.topcoat-range {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +.range__thumb,
      +.topcoat-range::-moz-range-thumb {
      +  cursor: pointer;
      +}
      +
      +.range__thumb--webkit,
      +.topcoat-range::-webkit-slider-thumb {
      +  cursor: pointer;
      +  -webkit-appearance: none;
      +}
      +
      +.range:disabled,
      +.topcoat-range:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Range

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <input type="range" class="topcoat-range">
      <input type="range" class="topcoat-range" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-range {
      +  border-radius: 4px;
      +  border: 1px solid #303233;
      +  background-color: #424546;
      +  height: 0.5rem;
      +  border-radius: 15px;
      +}
      +
      +.topcoat-range::-moz-range-track {
      +  border-radius: 4px;
      +  border: 1px solid #303233;
      +  background-color: #424546;
      +  height: 0.5rem;
      +  border-radius: 15px;
      +}
      +
      +.topcoat-range::-webkit-slider-thumb {
      +  height: 1.313rem;
      +  width: 0.75rem;
      +  background-color: #595b5b;
      +  border: 1px solid #303233;
      +  border-radius: 4px;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-range::-moz-range-thumb {
      +  height: 1.313rem;
      +  width: 0.75rem;
      +  background-color: #595b5b;
      +  border: 1px solid #303233;
      +  border-radius: 4px;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-range:focus::-webkit-slider-thumb {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-range:focus::-moz-range-thumb {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.search-input {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +input[type="search"]::-webkit-search-cancel-button {
      +  -webkit-appearance: none;
      +}
      +
      +.search-input:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.search-input,
      +.topcoat-search-input,
      +.topcoat-search-input--large {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +input[type="search"]::-webkit-search-cancel-button {
      +  -webkit-appearance: none;
      +}
      +
      +.search-input:disabled,
      +.topcoat-search-input:disabled,
      +.topcoat-search-input--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Search Input

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <input type="search" value="" placeholder="search" class="topcoat-search-input">
      <input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-search-input,
      +.topcoat-search-input--large {
      +  line-height: 1.313rem;
      +  font-size: 12px;
      +  border: 1px solid #303233;
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +  color: #c6c8c8;
      +  padding: 0 0 0 1.3rem;
      +  border-radius: 15px;
      +  background-image: url("../img/search.svg");
      +  background-position: 1em center;
      +  background-repeat: no-repeat;
      +  background-size: 12px;
      +}
      +
      +.topcoat-search-input:focus,
      +.topcoat-search-input--large:focus {
      +  background-image: url("../img/search_dark.svg");
      +  background-color: #646666;
      +  color: #fff;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-search-input::-webkit-search-cancel-button,
      +.topcoat-search-input::-webkit-search-decoration,
      +.topcoat-search-input--large::-webkit-search-cancel-button,
      +.topcoat-search-input--large::-webkit-search-decoration {
      +  margin-right: 5px;
      +}
      +
      +.topcoat-search-input:focus::-webkit-input-placeholder,
      +.topcoat-search-input:focus::-webkit-input-placeholder {
      +  color: #c6c8c8;
      +}
      +
      +.topcoat-search-input:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Search Input

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <input type="search" value="" placeholder="search" class="topcoat-search-input--large">
      <input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-search-input--large {
      +  line-height: 1.688rem;
      +  font-size: 0.875rem;
      +  font-weight: 400;
      +  padding: 0 0 0 1.8rem;
      +  border-radius: 25px;
      +  background-position: 1.2em center;
      +  background-size: 0.875rem;
      +}
      +
      +.topcoat-search-input--large:disabled {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input--large:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input--large:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input--large:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.switch {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch__input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.switch__toggle {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.switch__toggle:before,
      +.switch__toggle:after {
      +  content: '';
      +  position: absolute;
      +  z-index: -1;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.switch,
      +.topcoat-switch {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch__input,
      +.topcoat-switch__input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.switch__toggle,
      +.topcoat-switch__toggle {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.switch__toggle:before,
      +.switch__toggle:after,
      +.topcoat-switch__toggle:before,
      +.topcoat-switch__toggle:after {
      +  content: '';
      +  position: absolute;
      +  z-index: -1;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch--disabled,
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Switch

      +
      +




      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input">
        <div class="topcoat-switch__toggle"></div>
      </label>
      <br>
      <br>
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input" checked>
        <div class="topcoat-switch__toggle"></div>
      </label>
      <br>
      <br>
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input" disabled>
        <div class="topcoat-switch__toggle"></div>
      </label>
      +
      +
      +

      CSS

      +
      
      +.topcoat-switch {
      +  font-size: 12px;
      +  padding: 0 0.563rem;
      +  border-radius: 4px;
      +  border: 1px solid #303233;
      +  overflow: hidden;
      +  width: 3.5rem;
      +}
      +
      +.topcoat-switch__toggle:before,
      +.topcoat-switch__toggle:after {
      +  top: -1px;
      +  width: 2.6rem;
      +}
      +
      +.topcoat-switch__toggle:before {
      +  content: 'ON';
      +  color: #5dc1ff;
      +  background-color: #404141;
      +  right: 0.8rem;
      +  padding-left: 0.75rem;
      +}
      +
      +.topcoat-switch__toggle {
      +  line-height: 1.313rem;
      +  height: 1.313rem;
      +  width: 1rem;
      +  border-radius: 4px;
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  background-color: #595b5b;
      +  border: 1px solid #303233;
      +  margin-left: -0.6rem;
      +  margin-bottom: -1px;
      +  margin-top: -1px;
      +  box-shadow: inset 0 1px #727373;
      +  -webkit-transition: margin-left 0.05s ease-in-out;
      +  transition: margin-left 0.05s ease-in-out;
      +}
      +
      +.topcoat-switch__toggle:after {
      +  content: 'OFF';
      +  background-color: #404141;
      +  left: 0.8rem;
      +  padding-left: 0.6rem;
      +}
      +
      +.topcoat-switch__input:checked + .topcoat-switch__toggle {
      +  margin-left: 1.85rem;
      +}
      +
      +.topcoat-switch__input:focus + .topcoat-switch__toggle {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
      +  background: transparent;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-tab-bar__button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-tab-bar__button:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.button-bar,
      +.topcoat-tab-bar {
      +  display: table;
      +  table-layout: fixed;
      +  white-space: nowrap;
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +.button-bar__item,
      +.topcoat-tab-bar__item {
      +  display: table-cell;
      +  width: auto;
      +  border-radius: 0;
      +}
      +
      +.button-bar__item > input,
      +.topcoat-tab-bar__item > input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.button-bar__button {
      +  border-radius: inherit;
      +}
      +
      +.button-bar__item:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Tab Bar

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-tab-bar">
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">One</button>
        </label>
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">Two</button>
        </label>
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">Three</button>
        </label>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-tab-bar__button {
      +  padding: 0 0.563rem;
      +  height: 1.313rem;
      +  line-height: 1.313rem;
      +  letter-spacing: 0;
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  vertical-align: top;
      +  background-color: #595b5b;
      +  box-shadow: inset 0 1px #727373;
      +  border-top: 1px solid #303233;
      +}
      +
      +.topcoat-tab-bar__button:active,
      +.topcoat-tab-bar__button--large:active,
      +:checked + .topcoat-tab-bar__button {
      +  color: #5dc1ff;
      +  background-color: #404141;
      +  box-shadow: inset 0 0 2px #313231;
      +}
      +
      +.topcoat-tab-bar__button:focus,
      +.topcoat-tab-bar__button--large:focus {
      +  z-index: 1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.input,
      +.topcoat-text-input,
      +.topcoat-text-input--large {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.input:disabled,
      +.topcoat-text-input:disabled,
      +.topcoat-text-input--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Text input

      +
      +




      +
      + +
      +
      +

      HTML

      +
      <input type="text" class="topcoat-text-input" placeholder="text" value="">
      <br>
      <br>
      <input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
      <br>
      <br>
      <input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
      +
      +
      +

      CSS

      +
      
      +.topcoat-text-input,
      +.topcoat-text-input--large {
      +  line-height: 1.313rem;
      +  font-size: 12px;
      +  letter-spacing: 0;
      +  padding: 0 0.563rem;
      +  border: 1px solid #303233;
      +  border-radius: 4px;
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +  color: #c6c8c8;
      +  vertical-align: top;
      +}
      +
      +.topcoat-text-input:focus,
      +.topcoat-text-input--large:focus {
      +  background-color: #646666;
      +  color: #fff;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-text-input:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input:invalid {
      +  border: 1px solid #d83b75;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Text Input

      +
      +




      +
      + +
      +
      +

      HTML

      +
      <input type="text" class="topcoat-text-input--large" value="" placeholder="text">
      <br>
      <br>
      <input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
      <br>
      <br>
      <input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
      +
      +
      +

      CSS

      +
      
      +.topcoat-text-input--large {
      +  line-height: 1.688rem;
      +  font-size: 0.875rem;
      +}
      +
      +.topcoat-text-input--large:disabled {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input--large:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input--large:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input--large:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input--large:invalid {
      +  border: 1px solid #d83b75;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.textarea {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  vertical-align: top;
      +  resize: none;
      +  outline: none;
      +}
      +
      +.textarea:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.textarea,
      +.topcoat-textarea,
      +.topcoat-textarea--large {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  vertical-align: top;
      +  resize: none;
      +  outline: none;
      +}
      +
      +.textarea:disabled,
      +.topcoat-textarea:disabled,
      +.topcoat-textarea--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Textarea

      +
      +


      +
      + +
      +
      +

      HTML

      +
      <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
      <br>
      <br>
      <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
      +
      +
      +

      CSS

      +
      
      +.topcoat-textarea,
      +.topcoat-textarea--large {
      +  padding: 1rem;
      +  font-size: 1rem;
      +  font-weight: 400;
      +  border-radius: 4px;
      +  line-height: 1.313rem;
      +  border: 1px solid #303233;
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +  color: #c6c8c8;
      +  letter-spacing: 0;
      +}
      +
      +.topcoat-textarea:focus,
      +.topcoat-textarea--large:focus {
      +  background-color: #646666;
      +  color: #fff;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-textarea:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Textarea

      +
      +


      +
      + +
      +
      +

      HTML

      +
      <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
      <br>
      <br>
      <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
      +
      +
      +

      CSS

      +
      
      +.topcoat-textarea--large {
      +  font-size: 1.3rem;
      +  line-height: 1.688rem;
      +}
      +
      +.topcoat-textarea--large:disabled {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea--large:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea--large:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea--large:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Regular.otf");
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Light.otf");
      +  font-weight: 200;
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Semibold.otf");
      +  font-weight: 600;
      +}
      +
      +body {
      +  margin: 0;
      +  padding: 0;
      +  background: #4b4d4e;
      +  color: #000;
      +  font: 16px "Source Sans", helvetica, arial, sans-serif;
      +  font-weight: 200;
      +}
      +
      +:focus {
      +  outline-color: transparent;
      +  outline-style: none;
      +}
      +
      +.topcoat-icon--menu-stack {
      +  background: url("../img/hamburger_light.svg") no-repeat;
      +  background-size: cover;
      +}
      +
      +.quarter {
      +  width: 25%;
      +}
      +
      +.half {
      +  width: 50%;
      +}
      +
      +.three-quarters {
      +  width: 75%;
      +}
      +
      +.third {
      +  width: 33.333%;
      +}
      +
      +.two-thirds {
      +  width: 66.666%;
      +}
      +
      +.full {
      +  width: 100%;
      +}
      +
      +.left {
      +  text-align: left;
      +}
      +
      +.center {
      +  text-align: center;
      +}
      +
      +.right {
      +  text-align: right;
      +}
      +
      +.reset-ui {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +/* This file should include color and image variables corresponding to the dark theme */
      +
      +/* Call To Action */
      +
      +/* Icons */
      +
      +/* Navigation Bar */
      +
      +/* Text Input */
      +
      +/* Search Input */
      +
      +/* List */
      +
      +/* Checkbox */
      +
      +/* Overlay */
      +
      +/* Progress bar */
      +
      +/* Checkbox */
      +
      +/* Radio Button */
      +
      +/* Tab bar */
      +
      +/* Switch */
      +
      +/* Icon Button */
      +
      +/* Navigation bar */
      +
      +/* List */
      +
      +/* Search Input */
      +
      +/* Textarea */
      +
      +/* Checkbox */
      +
      +/* Radio */
      +
      +/* Range input */
      +
      +/* Search Input */
      +
      +/* Switch */
      +
      +/* This file should include color and image variables corresponding to the light theme */
      +
      +/* Call To Action */
      +
      +/* Icons */
      +
      +/* Navigation Bar */
      +
      +/* Text Input */
      +
      +/* List */
      +
      +/* Overlay */
      +
      +/* Progress bar */
      +
      +/* Checkbox */
      +
      +/* Range input */
      +
      +/* Radio Button */
      +
      +/* Tab bar */
      +
      +/* Switch */
      +
      +/* Containers */
      +
      +/* Icon Button */
      +
      +/* Navigation bar */
      +
      +/* List */
      +
      +/* Search Input */
      +
      +/* Text Area */
      +
      +/* Checkbox */
      +
      +/* Radio */
      +
      +/* Range input */
      +
      +/* Search Input */
      +
      +/* Switch */
      +
      +/* Text Input */
      +
      +/* Radio input */
      +
      +/* Overlay */
      +
      +/* Textarea */
      +
      +/* Progress bar container */
      +
      +/* Progress bar progress */
      +
      +/* Search input */
      +
      +/* Switch */
      +
      +/* Notification */
      +
      +
      +
      +
      +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/main.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/main.js new file mode 100755 index 0000000..6dcdbd8 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/main.js @@ -0,0 +1,44 @@ +window.onload = function(){ + var showCodeDivs = document.getElementsByClassName('showcode'); + for (var i = showCodeDivs.length - 1; i >= 0; i--) { + showCodeDivs[i].firstChild.onclick = function(e) { + var element = e.target.parentNode.nextSibling.nextSibling; + var style = window.getComputedStyle(element); + if(style.getPropertyValue('display') == 'none'){ + e.target.innerHTML = 'Hide code snippets'; + element.style.display = 'block'; + } else { + e.target.innerHTML = 'Show code snippets'; + element.style.display = 'none'; + } + return false; + }; + }; + var slideMenuButton = document.getElementById('slide-menu-button'); + slideMenuButton.onclick = function(e) { + var site = document.getElementById('site'); + var cl = site.classList; + if (cl.contains('open')) { + cl.remove('open'); + } else { + cl.add('open'); + } + }; + var docNavs = document.getElementsByClassName('docNav'); + for (var j = docNavs.length - 1; j >= 0; j--) { + docNavs[j].onchange = function(e){ + window.location.href = e.target[e.target.selectedIndex].value; + }; + }; + var pageNav = document.getElementById('pageNav'); + var pageLinks = pageNav.getElementsByTagName('a'); + for (var k = pageLinks.length - 1; k >= 0; k--) { + pageLinks[k].onclick = function(e) { + var site = document.getElementById('site'); + var cl = site.classList; + if (cl.contains('open')) { + cl.remove('open'); + } + }; + }; +} \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/rainbow-custom.min.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/rainbow-custom.min.js new file mode 100755 index 0000000..a25e178 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/js/rainbow-custom.min.js @@ -0,0 +1,11 @@ +/* Rainbow v1.2 rainbowco.de | included languages: html, css */ +window.Rainbow=function(){function q(a){var b,c=a.getAttribute&&a.getAttribute("data-language")||0;if(!c){a=a.attributes;for(b=0;b=f[d][c])delete f[d][c],delete j[d][c];if(a>=c&&ac&&b'+b+""}function s(a,b,c,i){var e=a.exec(c);if(e){++t;!b.name&&"string"==typeof b.matches[0]&&(b.name=b.matches[0],delete b.matches[0]);var k=e[0],g=e.index,u=e[0].length+g,h=function(){function e(){s(a,b,c,i)}t%100>0?e():setTimeout(e,0)};if(C(g,u))h();else{var m=v(b.matches),l=function(a,c,i){if(a>=c.length)i(k);else{var d=e[c[a]];if(d){var g=b.matches[c[a]],f=g.language,h=g.name&&g.matches? +g.matches:g,j=function(b,d,g){var f;f=0;var h;for(h=1;h/g,">").replace(/&(?![\w\#]+;)/g, +"&"),b,c)}function o(a,b,c){if(b + + + + + Topcoat + + + + + + + +
      + +
      +
      +
      +
      +

      Topcoat

      +

      CSS for clean and fast web apps

      +
      + +
      +
      +
      +
      +
      +

      Button Bar

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-button-bar">
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">One</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">Two</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">Three</button>
        </div>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button-bar > .topcoat-button-bar__item:first-child {
      +  border-top-left-radius: 4px;
      +  border-bottom-left-radius: 4px;
      +}
      +
      +.topcoat-button-bar > .topcoat-button-bar__item:last-child {
      +  border-top-right-radius: 4px;
      +  border-bottom-right-radius: 4px;
      +}
      +
      +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
      +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
      +  border-right: none;
      +}
      +
      +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
      +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
      +  border-left: none;
      +}
      +
      +.topcoat-button-bar__button {
      +  border-radius: inherit;
      +}
      +
      +.topcoat-button-bar__button:focus,
      +.topcoat-button-bar__button--large:focus {
      +  z-index: 1;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Button Bar

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-button-bar">
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">One</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">Two</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">Three</button>
        </div>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button-bar__button--large {
      +  border-radius: inherit;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-button,
      +.topcoat-button--quiet,
      +.topcoat-button--large,
      +.topcoat-button--large--quiet,
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-button:disabled,
      +.topcoat-button--quiet:disabled,
      +.topcoat-button--large:disabled,
      +.topcoat-button--large--quiet:disabled,
      +.topcoat-button--cta:disabled,
      +.topcoat-button--large--cta:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Button

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button">Button</button>
      <button class="topcoat-button" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button,
      +.topcoat-button--quiet,
      +.topcoat-button--large,
      +.topcoat-button--large--quiet,
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  padding: 0 0.563rem;
      +  font-size: 12px;
      +  line-height: 1.313rem;
      +  letter-spacing: 0;
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  vertical-align: top;
      +  background-color: #e5e9e8;
      +  box-shadow: inset 0 1px #fff;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 4px;
      +}
      +
      +.topcoat-button:hover,
      +.topcoat-button--quiet:hover,
      +.topcoat-button--large:hover,
      +.topcoat-button--large--quiet:hover {
      +  background-color: #edf1f1;
      +}
      +
      +.topcoat-button:active,
      +.topcoat-button--large:active {
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +.topcoat-button:focus,
      +.topcoat-button--quiet:focus,
      +.topcoat-button--large:focus,
      +.topcoat-button--large--quiet:focus,
      +.topcoat-button--cta:focus,
      +.topcoat-button--large--cta:focus {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +  outline: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Quiet Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--quiet">Button</button>
      <button class="topcoat-button--quiet" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-button--quiet:hover,
      +.topcoat-button--large--quiet:hover {
      +  text-shadow: 0 1px #fff;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-button--quiet:active,
      +.topcoat-button--large--quiet:active {
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  background-color: #d3d7d7;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large" >Button</button>
      <button class="topcoat-button--large" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large,
      +.topcoat-button--large--quiet {
      +  font-size: 0.875rem;
      +  font-weight: 600;
      +  line-height: 1.688rem;
      +  padding: 0 0.875rem;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Quiet Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large--quiet" >Button</button>
      <button class="topcoat-button--large--quiet" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Call To Action Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--cta" >Button</button>
      <button class="topcoat-button--cta" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  border: 1px solid #143250;
      +  background-color: #288edf;
      +  box-shadow: inset 0 1px rgba(255,255,255,0.36);
      +  color: #fff;
      +  font-weight: 500;
      +  text-shadow: 0 -1px rgba(0,0,0,0.36);
      +}
      +
      +.topcoat-button--cta:hover,
      +.topcoat-button--large--cta:hover {
      +  background-color: #509bef;
      +}
      +
      +.topcoat-button--cta:active,
      +.topcoat-button--large--cta:active {
      +  background-color: #0380e8;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Call To Action Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large--cta" >Button</button>
      <button class="topcoat-button--large--cta" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large--cta {
      +  font-size: 0.875rem;
      +  font-weight: 600;
      +  line-height: 1.688rem;
      +  padding: 0 0.875rem;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="checkbox"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.checkbox {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox__label {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.checkbox:before,
      +.checkbox:after {
      +  content: '';
      +  position: absolute;
      +}
      +
      +.checkbox:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="checkbox"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.checkbox,
      +.topcoat-checkbox__checkmark {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox__label,
      +.topcoat-checkbox {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox--disabled,
      +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.checkbox:before,
      +.checkbox:after,
      +.topcoat-checkbox__checkmark:before,
      +.topcoat-checkbox__checkmark:after {
      +  content: '';
      +  position: absolute;
      +}
      +
      +.checkbox:before,
      +.topcoat-checkbox__checkmark:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Checkbox

      +
      +


      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <label class="topcoat-checkbox">
        <input type="checkbox">
        <div class="topcoat-checkbox__checkmark"></div>
        Default
      </label>
      <br>
      <br>
      <label class="topcoat-checkbox">
        <input type="checkbox" disabled>
        <div class="topcoat-checkbox__checkmark"></div>
        Disabled
      </label>
      +
      +
      +

      CSS

      +
      
      +.topcoat-checkbox__checkmark {
      +  height: 1rem;
      +}
      +
      +input[type="checkbox"] {
      +  height: 1rem;
      +  width: 1rem;
      +  margin-top: 0;
      +  margin-right: -1rem;
      +  margin-bottom: -1rem;
      +  margin-left: 0;
      +}
      +
      +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
      +  opacity: 1;
      +}
      +
      +.topcoat-checkbox {
      +  line-height: 1rem;
      +}
      +
      +.topcoat-checkbox__checkmark:before {
      +  width: 1rem;
      +  height: 1rem;
      +  background: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 3px;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-checkbox__checkmark {
      +  width: 1rem;
      +  height: 1rem;
      +}
      +
      +.topcoat-checkbox__checkmark:after {
      +  top: 2px;
      +  left: 1px;
      +  opacity: 0;
      +  width: 14px;
      +  height: 4px;
      +  background: transparent;
      +  border: 7px solid #666;
      +  border-width: 3px;
      +  border-top: none;
      +  border-right: none;
      +  border-radius: 1px;
      +  -webkit-transform: rotate(-50deg);
      +  -ms-transform: rotate(-50deg);
      +  transform: rotate(-50deg);
      +}
      +
      +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-icon-button,
      +.topcoat-icon-button--quiet,
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-icon-button:disabled,
      +.topcoat-icon-button--quiet:disabled,
      +.topcoat-icon-button--large:disabled,
      +.topcoat-icon-button--large--quiet:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button">
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button" disabled>
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button,
      +.topcoat-icon-button--quiet,
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  padding: 0 0.25rem;
      +  line-height: 1.313rem;
      +  letter-spacing: 0;
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  vertical-align: baseline;
      +  background-color: #e5e9e8;
      +  box-shadow: inset 0 1px #fff;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 4px;
      +}
      +
      +.topcoat-icon-button:hover,
      +.topcoat-icon-button--quiet:hover,
      +.topcoat-icon-button--large:hover,
      +.topcoat-icon-button--large--quiet:hover {
      +  background-color: #edf1f1;
      +}
      +
      +.topcoat-icon-button:active {
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +.topcoat-icon-button:focus,
      +.topcoat-icon-button--quiet:focus,
      +.topcoat-icon-button--quiet:hover:focus,
      +.topcoat-icon-button--large:focus,
      +.topcoat-icon-button--large--quiet:focus,
      +.topcoat-icon-button--large--quiet:hover:focus {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +  outline: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Quiet Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--quiet">
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--quiet" disabled>
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-icon-button--quiet:hover,
      +.topcoat-icon-button--large--quiet:hover {
      +  text-shadow: 0 1px #fff;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-icon-button--quiet:active,
      +.topcoat-icon-button--large--quiet:active {
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  background-color: #d3d7d7;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--large">
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--large" disabled>
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  width: 1.688rem;
      +  height: 1.688rem;
      +  line-height: 1.688rem;
      +}
      +
      +.topcoat-icon-button--large:active {
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Quiet Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--large--quiet">
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--large--quiet" disabled>
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--large--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-icon,
      +.topcoat-icon--large {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  overflow: hidden;
      +  width: 0.81406rem;
      +  height: 0.81406rem;
      +  vertical-align: middle;
      +  top: -1px;
      +}
      +
      +.topcoat-icon--large {
      +  width: 1.06344rem;
      +  height: 1.06344rem;
      +  top: -2px;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.input {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.input:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.list {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  overflow: auto;
      +  -webkit-overflow-scrolling: touch;
      +}
      +
      +.list__header {
      +  margin: 0;
      +}
      +
      +.list__container {
      +  padding: 0;
      +  margin: 0;
      +  list-style-type: none;
      +}
      +
      +.list__item {
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.navigation-bar {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  word-spacing: 0;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.navigation-bar__item {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +}
      +
      +.navigation-bar__title {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.notification {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.notification,
      +.topcoat-notification {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Notification

      +
      +
      1
      +
      + +
      +
      +

      HTML

      +
      <span class="topcoat-notification">1</span>
      +
      +
      +

      CSS

      +
      
      +.topcoat-notification {
      +  padding: 0.15em 0.5em 0.2em;
      +  border-radius: 2px;
      +  background-color: #ec514e;
      +  color: #fff;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="radio"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.radio-button {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button__label {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button:before,
      +.radio-button:after {
      +  content: '';
      +  position: absolute;
      +  border-radius: 100%;
      +}
      +
      +.radio-button:after {
      +  top: 50%;
      +  left: 50%;
      +  -webkit-transform: translate(-50%, -50%);
      +  -ms-transform: translate(-50%, -50%);
      +  transform: translate(-50%, -50%);
      +}
      +
      +.radio-button:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.radio-button--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="radio"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.radio-button,
      +.topcoat-radio-button__checkmark {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button__label,
      +.topcoat-radio-button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button:before,
      +.radio-button:after,
      +.topcoat-radio-button__checkmark:before,
      +.topcoat-radio-button__checkmark:after {
      +  content: '';
      +  position: absolute;
      +  border-radius: 100%;
      +}
      +
      +.radio-button:after,
      +.topcoat-radio-button__checkmark:after {
      +  top: 50%;
      +  left: 50%;
      +  -webkit-transform: translate(-50%, -50%);
      +  -ms-transform: translate(-50%, -50%);
      +  transform: translate(-50%, -50%);
      +}
      +
      +.radio-button:before,
      +.topcoat-radio-button__checkmark:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.radio-button--disabled,
      +input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Radio Button

      +
      +






      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <!-- NO LABEL -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
      </label>
      <br>
      <br>
      <!-- LEFT LABEL -->
      <label class="topcoat-radio-button">
        Left label
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
      </label>
      <br>
      <br>
      <!-- RIGHT LABEL -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
        Right label
      </label>
      <br>
      <br>
      <!-- DISABLED -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat" Disabled>
        <div class="topcoat-radio-button__checkmark"></div>
        Disabled
      </label>
      +
      +
      +

      CSS

      +
      
      +input[type="radio"] {
      +  height: 1.063rem;
      +  width: 1.063rem;
      +  margin-top: 0;
      +  margin-right: -1.063rem;
      +  margin-bottom: -1.063rem;
      +  margin-left: 0;
      +}
      +
      +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
      +  opacity: 1;
      +}
      +
      +.topcoat-radio-button {
      +  color: #454545;
      +  line-height: 1.063rem;
      +}
      +
      +.topcoat-radio-button__checkmark:before {
      +  width: 1.063rem;
      +  height: 1.063rem;
      +  background: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-radio-button__checkmark {
      +  position: relative;
      +  width: 1.063rem;
      +  height: 1.063rem;
      +}
      +
      +.topcoat-radio-button__checkmark:after {
      +  opacity: 0;
      +  width: 0.313rem;
      +  height: 0.313rem;
      +  background: #666;
      +  border: 1px solid rgba(0,0,0,0.1);
      +  box-shadow: 0 1px rgba(255,255,255,0.5);
      +  -webkit-transform: none;
      +  -ms-transform: none;
      +  transform: none;
      +  top: 0.313rem;
      +  left: 0.313rem;
      +}
      +
      +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +.range {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +.range__thumb {
      +  cursor: pointer;
      +}
      +
      +.range__thumb--webkit {
      +  cursor: pointer;
      +  -webkit-appearance: none;
      +}
      +
      +.range:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +.range,
      +.topcoat-range {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +.range__thumb,
      +.topcoat-range::-moz-range-thumb {
      +  cursor: pointer;
      +}
      +
      +.range__thumb--webkit,
      +.topcoat-range::-webkit-slider-thumb {
      +  cursor: pointer;
      +  -webkit-appearance: none;
      +}
      +
      +.range:disabled,
      +.topcoat-range:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Range

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <input type="range" class="topcoat-range">
      <input type="range" class="topcoat-range" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-range {
      +  border-radius: 4px;
      +  border: 1px solid #a5a8a8;
      +  background-color: #d3d7d7;
      +  height: 0.5rem;
      +  border-radius: 15px;
      +}
      +
      +.topcoat-range::-moz-range-track {
      +  border-radius: 4px;
      +  border: 1px solid #a5a8a8;
      +  background-color: #d3d7d7;
      +  height: 0.5rem;
      +  border-radius: 15px;
      +}
      +
      +.topcoat-range::-webkit-slider-thumb {
      +  height: 1.313rem;
      +  width: 0.75rem;
      +  background-color: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 4px;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-range::-moz-range-thumb {
      +  height: 1.313rem;
      +  width: 0.75rem;
      +  background-color: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 4px;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-range:focus::-webkit-slider-thumb {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-range:focus::-moz-range-thumb {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.search-input {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +input[type="search"]::-webkit-search-cancel-button {
      +  -webkit-appearance: none;
      +}
      +
      +.search-input:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.search-input,
      +.topcoat-search-input,
      +.topcoat-search-input--large {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +input[type="search"]::-webkit-search-cancel-button {
      +  -webkit-appearance: none;
      +}
      +
      +.search-input:disabled,
      +.topcoat-search-input:disabled,
      +.topcoat-search-input--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Search Input

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <input type="search" value="" placeholder="search" class="topcoat-search-input">
      <input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-search-input,
      +.topcoat-search-input--large {
      +  line-height: 1.313rem;
      +  font-size: 12px;
      +  border: 1px solid #a5a8a8;
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +  color: #454545;
      +  padding: 0 0 0 1.3rem;
      +  border-radius: 15px;
      +  background-image: url("../img/search.svg");
      +  background-position: 1em center;
      +  background-repeat: no-repeat;
      +  background-size: 12px;
      +}
      +
      +.topcoat-search-input:focus,
      +.topcoat-search-input--large:focus {
      +  background-image: url("../img/search_dark.svg");
      +  background-color: #edf1f1;
      +  color: #000;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-search-input::-webkit-search-cancel-button,
      +.topcoat-search-input::-webkit-search-decoration,
      +.topcoat-search-input--large::-webkit-search-cancel-button,
      +.topcoat-search-input--large::-webkit-search-decoration {
      +  margin-right: 5px;
      +}
      +
      +.topcoat-search-input:focus::-webkit-input-placeholder,
      +.topcoat-search-input:focus::-webkit-input-placeholder {
      +  color: #c6c8c8;
      +}
      +
      +.topcoat-search-input:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-search-input:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-search-input:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Search Input

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <input type="search" value="" placeholder="search" class="topcoat-search-input--large">
      <input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-search-input--large {
      +  line-height: 1.688rem;
      +  font-size: 0.875rem;
      +  font-weight: 400;
      +  padding: 0 0 0 1.8rem;
      +  border-radius: 25px;
      +  background-position: 1.2em center;
      +  background-size: 0.875rem;
      +}
      +
      +.topcoat-search-input--large:disabled {
      +  color: #000;
      +}
      +
      +.topcoat-search-input--large:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-search-input--large:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-search-input--large:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.switch {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch__input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.switch__toggle {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.switch__toggle:before,
      +.switch__toggle:after {
      +  content: '';
      +  position: absolute;
      +  z-index: -1;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.switch,
      +.topcoat-switch {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch__input,
      +.topcoat-switch__input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.switch__toggle,
      +.topcoat-switch__toggle {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.switch__toggle:before,
      +.switch__toggle:after,
      +.topcoat-switch__toggle:before,
      +.topcoat-switch__toggle:after {
      +  content: '';
      +  position: absolute;
      +  z-index: -1;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch--disabled,
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Switch

      +
      +




      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input">
        <div class="topcoat-switch__toggle"></div>
      </label>
      <br>
      <br>
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input" checked>
        <div class="topcoat-switch__toggle"></div>
      </label>
      <br>
      <br>
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input" disabled>
        <div class="topcoat-switch__toggle"></div>
      </label>
      +
      +
      +

      CSS

      +
      
      +.topcoat-switch {
      +  font-size: 12px;
      +  padding: 0 0.563rem;
      +  border-radius: 4px;
      +  border: 1px solid #a5a8a8;
      +  overflow: hidden;
      +  width: 3.5rem;
      +}
      +
      +.topcoat-switch__toggle:before,
      +.topcoat-switch__toggle:after {
      +  top: -1px;
      +  width: 2.6rem;
      +}
      +
      +.topcoat-switch__toggle:before {
      +  content: 'ON';
      +  color: #0083e8;
      +  background-color: #e0f0fa;
      +  right: 0.8rem;
      +  padding-left: 0.75rem;
      +}
      +
      +.topcoat-switch__toggle {
      +  line-height: 1.313rem;
      +  height: 1.313rem;
      +  width: 1rem;
      +  border-radius: 4px;
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  background-color: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  margin-left: -0.6rem;
      +  margin-bottom: -1px;
      +  margin-top: -1px;
      +  box-shadow: inset 0 1px #fff;
      +  -webkit-transition: margin-left 0.05s ease-in-out;
      +  transition: margin-left 0.05s ease-in-out;
      +}
      +
      +.topcoat-switch__toggle:after {
      +  content: 'OFF';
      +  background-color: #d3d7d7;
      +  left: 0.8rem;
      +  padding-left: 0.6rem;
      +}
      +
      +.topcoat-switch__input:checked + .topcoat-switch__toggle {
      +  margin-left: 1.85rem;
      +}
      +
      +.topcoat-switch__input:focus + .topcoat-switch__toggle {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
      +  background: transparent;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-tab-bar__button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-tab-bar__button:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.button-bar,
      +.topcoat-tab-bar {
      +  display: table;
      +  table-layout: fixed;
      +  white-space: nowrap;
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +.button-bar__item,
      +.topcoat-tab-bar__item {
      +  display: table-cell;
      +  width: auto;
      +  border-radius: 0;
      +}
      +
      +.button-bar__item > input,
      +.topcoat-tab-bar__item > input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.button-bar__button {
      +  border-radius: inherit;
      +}
      +
      +.button-bar__item:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Tab Bar

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-tab-bar">
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">One</button>
        </label>
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">Two</button>
        </label>
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">Three</button>
        </label>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-tab-bar__button {
      +  padding: 0 0.563rem;
      +  height: 1.313rem;
      +  line-height: 1.313rem;
      +  letter-spacing: 0;
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  vertical-align: top;
      +  background-color: #e5e9e8;
      +  box-shadow: inset 0 1px #fff;
      +  border-top: 1px solid #a5a8a8;
      +}
      +
      +.topcoat-tab-bar__button:active,
      +.topcoat-tab-bar__button--large:active,
      +:checked + .topcoat-tab-bar__button {
      +  color: #0083e8;
      +  background-color: #e0f0fa;
      +  box-shadow: inset 0 0 2px #c0ced8;
      +}
      +
      +.topcoat-tab-bar__button:focus,
      +.topcoat-tab-bar__button--large:focus {
      +  z-index: 1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.input,
      +.topcoat-text-input,
      +.topcoat-text-input--large {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.input:disabled,
      +.topcoat-text-input:disabled,
      +.topcoat-text-input--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Text input

      +
      +




      +
      + +
      +
      +

      HTML

      +
      <input type="text" class="topcoat-text-input" placeholder="text" value="">
      <br>
      <br>
      <input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
      <br>
      <br>
      <input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
      +
      +
      +

      CSS

      +
      
      +.topcoat-text-input,
      +.topcoat-text-input--large {
      +  line-height: 1.313rem;
      +  font-size: 12px;
      +  letter-spacing: 0;
      +  padding: 0 0.563rem;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 4px;
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +  color: #454545;
      +  vertical-align: top;
      +}
      +
      +.topcoat-text-input:focus,
      +.topcoat-text-input--large:focus {
      +  background-color: #edf1f1;
      +  color: #000;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-text-input:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input:invalid {
      +  border: 1px solid #d83b75;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Text Input

      +
      +




      +
      + +
      +
      +

      HTML

      +
      <input type="text" class="topcoat-text-input--large" value="" placeholder="text">
      <br>
      <br>
      <input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
      <br>
      <br>
      <input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
      +
      +
      +

      CSS

      +
      
      +.topcoat-text-input--large {
      +  line-height: 1.688rem;
      +  font-size: 0.875rem;
      +}
      +
      +.topcoat-text-input--large:disabled {
      +  color: #000;
      +}
      +
      +.topcoat-text-input--large:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input--large:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input--large:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input--large:invalid {
      +  border: 1px solid #d83b75;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.textarea {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  vertical-align: top;
      +  resize: none;
      +  outline: none;
      +}
      +
      +.textarea:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.textarea,
      +.topcoat-textarea,
      +.topcoat-textarea--large {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  vertical-align: top;
      +  resize: none;
      +  outline: none;
      +}
      +
      +.textarea:disabled,
      +.topcoat-textarea:disabled,
      +.topcoat-textarea--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Textarea

      +
      +


      +
      + +
      +
      +

      HTML

      +
      <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
      <br>
      <br>
      <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
      +
      +
      +

      CSS

      +
      
      +.topcoat-textarea,
      +.topcoat-textarea--large {
      +  padding: 1rem;
      +  font-size: 1rem;
      +  font-weight: 400;
      +  border-radius: 4px;
      +  line-height: 1.313rem;
      +  border: 1px solid #a5a8a8;
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +  color: #454545;
      +  letter-spacing: 0;
      +}
      +
      +.topcoat-textarea:focus,
      +.topcoat-textarea--large:focus {
      +  background-color: #edf1f1;
      +  color: #000;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-textarea:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-textarea:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-textarea:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Textarea

      +
      +


      +
      + +
      +
      +

      HTML

      +
      <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
      <br>
      <br>
      <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
      +
      +
      +

      CSS

      +
      
      +.topcoat-textarea--large {
      +  font-size: 1.3rem;
      +  line-height: 1.688rem;
      +}
      +
      +.topcoat-textarea--large:disabled {
      +  color: #000;
      +}
      +
      +.topcoat-textarea--large:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-textarea--large:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-textarea--large:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Regular.otf");
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Light.otf");
      +  font-weight: 200;
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Semibold.otf");
      +  font-weight: 600;
      +}
      +
      +body {
      +  margin: 0;
      +  padding: 0;
      +  background: #dfe2e2;
      +  color: #000;
      +  font: 16px "Source Sans", helvetica, arial, sans-serif;
      +  font-weight: 200;
      +}
      +
      +:focus {
      +  outline-color: transparent;
      +  outline-style: none;
      +}
      +
      +.topcoat-icon--menu-stack {
      +  background: url("../img/hamburger_dark.svg") no-repeat;
      +  background-size: cover;
      +}
      +
      +.quarter {
      +  width: 25%;
      +}
      +
      +.half {
      +  width: 50%;
      +}
      +
      +.three-quarters {
      +  width: 75%;
      +}
      +
      +.third {
      +  width: 33.333%;
      +}
      +
      +.two-thirds {
      +  width: 66.666%;
      +}
      +
      +.full {
      +  width: 100%;
      +}
      +
      +.left {
      +  text-align: left;
      +}
      +
      +.center {
      +  text-align: center;
      +}
      +
      +.right {
      +  text-align: right;
      +}
      +
      +.reset-ui {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +/* This file should include color and image variables corresponding to the dark theme */
      +
      +/* Call To Action */
      +
      +/* Icons */
      +
      +/* Navigation Bar */
      +
      +/* Text Input */
      +
      +/* Search Input */
      +
      +/* List */
      +
      +/* Checkbox */
      +
      +/* Overlay */
      +
      +/* Progress bar */
      +
      +/* Checkbox */
      +
      +/* Radio Button */
      +
      +/* Tab bar */
      +
      +/* Switch */
      +
      +/* Icon Button */
      +
      +/* Navigation bar */
      +
      +/* List */
      +
      +/* Search Input */
      +
      +/* Textarea */
      +
      +/* Checkbox */
      +
      +/* Radio */
      +
      +/* Range input */
      +
      +/* Search Input */
      +
      +/* Switch */
      +
      +/* This file should include color and image variables corresponding to the light theme */
      +
      +/* Call To Action */
      +
      +/* Icons */
      +
      +/* Navigation Bar */
      +
      +/* Text Input */
      +
      +/* List */
      +
      +/* Overlay */
      +
      +/* Progress bar */
      +
      +/* Checkbox */
      +
      +/* Range input */
      +
      +/* Radio Button */
      +
      +/* Tab bar */
      +
      +/* Switch */
      +
      +/* Containers */
      +
      +/* Icon Button */
      +
      +/* Navigation bar */
      +
      +/* List */
      +
      +/* Search Input */
      +
      +/* Text Area */
      +
      +/* Checkbox */
      +
      +/* Radio */
      +
      +/* Range input */
      +
      +/* Search Input */
      +
      +/* Switch */
      +
      +/* Text Input */
      +
      +/* Radio input */
      +
      +/* Overlay */
      +
      +/* Textarea */
      +
      +/* Progress bar container */
      +
      +/* Progress bar progress */
      +
      +/* Search input */
      +
      +/* Switch */
      +
      +/* Notification */
      +
      +
      +
      +
      +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-dark.html b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-dark.html new file mode 100755 index 0000000..327aeae --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-dark.html @@ -0,0 +1,3417 @@ + + + + + + Topcoat + + + + + + + +
      + +
      +
      +
      +
      +

      Topcoat

      +

      CSS for clean and fast web apps

      +
      + +
      +
      +
      +
      +
      +

      Button Bar

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-button-bar">
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">One</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">Two</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">Three</button>
        </div>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button-bar > .topcoat-button-bar__item:first-child {
      +  border-top-left-radius: 6px;
      +  border-bottom-left-radius: 6px;
      +}
      +
      +.topcoat-button-bar > .topcoat-button-bar__item:last-child {
      +  border-top-right-radius: 6px;
      +  border-bottom-right-radius: 6px;
      +}
      +
      +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
      +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
      +  border-right: none;
      +}
      +
      +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
      +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
      +  border-left: none;
      +}
      +
      +.topcoat-button-bar__button {
      +  border-radius: inherit;
      +}
      +
      +.topcoat-button-bar__button:focus,
      +.topcoat-button-bar__button--large:focus {
      +  z-index: 1;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Button Bar

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-button-bar">
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">One</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">Two</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">Three</button>
        </div>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button-bar__button--large {
      +  border-radius: inherit;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-button,
      +.topcoat-button--quiet,
      +.topcoat-button--large,
      +.topcoat-button--large--quiet,
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-button:disabled,
      +.topcoat-button--quiet:disabled,
      +.topcoat-button--large:disabled,
      +.topcoat-button--large--quiet:disabled,
      +.topcoat-button--cta:disabled,
      +.topcoat-button--large--cta:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Button

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button">Button</button>
      <button class="topcoat-button" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button,
      +.topcoat-button--quiet,
      +.topcoat-button--large,
      +.topcoat-button--large--quiet,
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  padding: 0 1.25rem;
      +  font-size: 16px;
      +  line-height: 3rem;
      +  letter-spacing: 1px;
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  vertical-align: top;
      +  background-color: #595b5b;
      +  box-shadow: inset 0 1px #727373;
      +  border: 1px solid #303233;
      +  border-radius: 6px;
      +}
      +
      +.topcoat-button:hover,
      +.topcoat-button--quiet:hover,
      +.topcoat-button--large:hover,
      +.topcoat-button--large--quiet:hover {
      +  background-color: #646666;
      +}
      +
      +.topcoat-button:active,
      +.topcoat-button--large:active {
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +.topcoat-button:focus,
      +.topcoat-button--quiet:focus,
      +.topcoat-button--large:focus,
      +.topcoat-button--large--quiet:focus,
      +.topcoat-button--cta:focus,
      +.topcoat-button--large--cta:focus {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +  outline: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Quiet Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--quiet">Button</button>
      <button class="topcoat-button--quiet" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-button--quiet:hover,
      +.topcoat-button--large--quiet:hover {
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-button--quiet:active,
      +.topcoat-button--large--quiet:active {
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  background-color: #404141;
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large" >Button</button>
      <button class="topcoat-button--large" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large,
      +.topcoat-button--large--quiet {
      +  font-size: 1.3rem;
      +  font-weight: 400;
      +  line-height: 4.375rem;
      +  padding: 0 1.25rem;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Quiet Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large--quiet" >Button</button>
      <button class="topcoat-button--large--quiet" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Call To Action Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--cta" >Button</button>
      <button class="topcoat-button--cta" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  border: 1px solid #143250;
      +  background-color: #288edf;
      +  box-shadow: inset 0 1px rgba(255,255,255,0.36);
      +  color: #fff;
      +  font-weight: 500;
      +  text-shadow: 0 -1px rgba(0,0,0,0.36);
      +}
      +
      +.topcoat-button--cta:hover,
      +.topcoat-button--large--cta:hover {
      +  background-color: #509bef;
      +}
      +
      +.topcoat-button--cta:active,
      +.topcoat-button--large--cta:active {
      +  background-color: #1976c3;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Call To Action Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large--cta" >Button</button>
      <button class="topcoat-button--large--cta" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large--cta {
      +  font-size: 1.3rem;
      +  font-weight: 400;
      +  line-height: 4.375rem;
      +  padding: 0 1.25rem;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="checkbox"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.checkbox {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox__label {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.checkbox:before,
      +.checkbox:after {
      +  content: '';
      +  position: absolute;
      +}
      +
      +.checkbox:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="checkbox"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.checkbox,
      +.topcoat-checkbox__checkmark {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox__label,
      +.topcoat-checkbox {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox--disabled,
      +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.checkbox:before,
      +.checkbox:after,
      +.topcoat-checkbox__checkmark:before,
      +.topcoat-checkbox__checkmark:after {
      +  content: '';
      +  position: absolute;
      +}
      +
      +.checkbox:before,
      +.topcoat-checkbox__checkmark:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Checkbox

      +
      +


      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <label class="topcoat-checkbox">
        <input type="checkbox">
        <div class="topcoat-checkbox__checkmark"></div>
        Default
      </label>
      <br>
      <br>
      <label class="topcoat-checkbox">
        <input type="checkbox" disabled>
        <div class="topcoat-checkbox__checkmark"></div>
        Disabled
      </label>
      +
      +
      +

      CSS

      +
      
      +.topcoat-checkbox__checkmark {
      +  height: 2rem;
      +}
      +
      +input[type="checkbox"] {
      +  height: 2rem;
      +  width: 2rem;
      +  margin-top: 0;
      +  margin-right: -2rem;
      +  margin-bottom: -2rem;
      +  margin-left: 0;
      +}
      +
      +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
      +  opacity: 1;
      +}
      +
      +.topcoat-checkbox {
      +  line-height: 2rem;
      +}
      +
      +.topcoat-checkbox__checkmark:before {
      +  width: 2rem;
      +  height: 2rem;
      +  background: #595b5b;
      +  border: 1px solid #303233;
      +  border-radius: 3px;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-checkbox__checkmark {
      +  width: 2rem;
      +  height: 2rem;
      +}
      +
      +.topcoat-checkbox__checkmark:after {
      +  top: 1px;
      +  left: 2px;
      +  opacity: 0;
      +  width: 28px;
      +  height: 11px;
      +  background: transparent;
      +  border: 7px solid #fff;
      +  border-width: 7px;
      +  border-top: none;
      +  border-right: none;
      +  border-radius: 2px;
      +  -webkit-transform: rotate(-50deg);
      +  -ms-transform: rotate(-50deg);
      +  transform: rotate(-50deg);
      +}
      +
      +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-icon-button,
      +.topcoat-icon-button--quiet,
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-icon-button:disabled,
      +.topcoat-icon-button--quiet:disabled,
      +.topcoat-icon-button--large:disabled,
      +.topcoat-icon-button--large--quiet:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button">
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button" disabled>
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button,
      +.topcoat-icon-button--quiet,
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  padding: 0 0.75rem;
      +  line-height: 3rem;
      +  letter-spacing: 1px;
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  vertical-align: baseline;
      +  background-color: #595b5b;
      +  box-shadow: inset 0 1px #727373;
      +  border: 1px solid #303233;
      +  border-radius: 6px;
      +}
      +
      +.topcoat-icon-button:hover,
      +.topcoat-icon-button--quiet:hover,
      +.topcoat-icon-button--large:hover,
      +.topcoat-icon-button--large--quiet:hover {
      +  background-color: #646666;
      +}
      +
      +.topcoat-icon-button:active {
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +.topcoat-icon-button:focus,
      +.topcoat-icon-button--quiet:focus,
      +.topcoat-icon-button--quiet:hover:focus,
      +.topcoat-icon-button--large:focus,
      +.topcoat-icon-button--large--quiet:focus,
      +.topcoat-icon-button--large--quiet:hover:focus {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +  outline: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Quiet Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--quiet">
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--quiet" disabled>
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-icon-button--quiet:hover,
      +.topcoat-icon-button--large--quiet:hover {
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-icon-button--quiet:active,
      +.topcoat-icon-button--large--quiet:active {
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  background-color: #404141;
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--large">
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--large" disabled>
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  width: 4.375rem;
      +  height: 4.375rem;
      +  line-height: 4.375rem;
      +}
      +
      +.topcoat-icon-button--large:active {
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Quiet Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--large--quiet">
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--large--quiet" disabled>
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--large--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-icon,
      +.topcoat-icon--large {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  overflow: hidden;
      +  width: 1.62rem;
      +  height: 1.62rem;
      +  vertical-align: middle;
      +  top: -1px;
      +}
      +
      +.topcoat-icon--large {
      +  width: 2.499999998125rem;
      +  height: 2.499999998125rem;
      +  top: -2px;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.input {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.input:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.list {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  overflow: auto;
      +  -webkit-overflow-scrolling: touch;
      +}
      +
      +.list__header {
      +  margin: 0;
      +}
      +
      +.list__container {
      +  padding: 0;
      +  margin: 0;
      +  list-style-type: none;
      +}
      +
      +.list__item {
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.list,
      +.topcoat-list {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  overflow: auto;
      +  -webkit-overflow-scrolling: touch;
      +}
      +
      +.list__header,
      +.topcoat-list__header {
      +  margin: 0;
      +}
      +
      +.list__container,
      +.topcoat-list__container {
      +  padding: 0;
      +  margin: 0;
      +  list-style-type: none;
      +}
      +
      +.list__item,
      +.topcoat-list__item {
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      List

      +
      +

      Category

      • Item
      • Item
      • Item
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-list">
        <h3 class="topcoat-list__header">Category</h3>
        <ul class="topcoat-list__container">
          <li class="topcoat-list__item">
            Item
          </li>
          <li class="topcoat-list__item">
            Item
          </li>
          <li class="topcoat-list__item">
            Item
          </li>
        </ul>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-list {
      +  border-top: 1px solid #2f3234;
      +  border-bottom: 1px solid #5e6061;
      +  background-color: #444849;
      +}
      +
      +.topcoat-list__header {
      +  padding: 4px 20px;
      +  font-size: 0.9em;
      +  font-weight: 400;
      +  background-color: #3b3e40;
      +  color: #868888;
      +  text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
      +  border-top: solid 1px rgba(255,255,255,0.1);
      +  border-bottom: solid 1px rgba(255,255,255,0.05);
      +}
      +
      +.topcoat-list__container {
      +  border-top: 1px solid #2f3234;
      +  color: #c6c8c8;
      +}
      +
      +.topcoat-list__item {
      +  padding: 1.25rem;
      +  border-top: 1px solid #5e6061;
      +  border-bottom: 1px solid #2f3234;
      +}
      +
      +.topcoat-list__item:first-child {
      +  border-top: 1px solid rgba(0,0,0,0.05);
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.navigation-bar {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  word-spacing: 0;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.navigation-bar__item {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +}
      +
      +.navigation-bar__title {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.navigation-bar,
      +.topcoat-navigation-bar {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  word-spacing: 0;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.navigation-bar__item,
      +.topcoat-navigation-bar__item {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +}
      +
      +.navigation-bar__title,
      +.topcoat-navigation-bar__title {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +
      +
      +
      +
      + +
      +
      +

      Notification

      +
      +
      1
      +
      + +
      +
      +

      HTML

      +
      <span class="topcoat-notification">1</span>
      +
      +
      +

      CSS

      +
      
      +.topcoat-notification {
      +  padding: 0.15em 0.5em 0.2em;
      +  border-radius: 2px;
      +  background-color: #ec514e;
      +  color: #fff;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="radio"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.radio-button {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button__label {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button:before,
      +.radio-button:after {
      +  content: '';
      +  position: absolute;
      +  border-radius: 100%;
      +}
      +
      +.radio-button:after {
      +  top: 50%;
      +  left: 50%;
      +  -webkit-transform: translate(-50%, -50%);
      +  -ms-transform: translate(-50%, -50%);
      +  transform: translate(-50%, -50%);
      +}
      +
      +.radio-button:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.radio-button--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="radio"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.radio-button,
      +.topcoat-radio-button__checkmark {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button__label,
      +.topcoat-radio-button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button:before,
      +.radio-button:after,
      +.topcoat-radio-button__checkmark:before,
      +.topcoat-radio-button__checkmark:after {
      +  content: '';
      +  position: absolute;
      +  border-radius: 100%;
      +}
      +
      +.radio-button:after,
      +.topcoat-radio-button__checkmark:after {
      +  top: 50%;
      +  left: 50%;
      +  -webkit-transform: translate(-50%, -50%);
      +  -ms-transform: translate(-50%, -50%);
      +  transform: translate(-50%, -50%);
      +}
      +
      +.radio-button:before,
      +.topcoat-radio-button__checkmark:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.radio-button--disabled,
      +input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Radio Button

      +
      +






      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <!-- NO LABEL -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
      </label>
      <br>
      <br>
      <!-- LEFT LABEL -->
      <label class="topcoat-radio-button">
        Left label
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
      </label>
      <br>
      <br>
      <!-- RIGHT LABEL -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
        Right label
      </label>
      <br>
      <br>
      <!-- DISABLED -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat" Disabled>
        <div class="topcoat-radio-button__checkmark"></div>
        Disabled
      </label>
      +
      +
      +

      CSS

      +
      
      +input[type="radio"] {
      +  height: 1.875rem;
      +  width: 1.875rem;
      +  margin-top: 0;
      +  margin-right: -1.875rem;
      +  margin-bottom: -1.875rem;
      +  margin-left: 0;
      +}
      +
      +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
      +  opacity: 1;
      +}
      +
      +.topcoat-radio-button {
      +  color: #c6c8c8;
      +  line-height: 1.875rem;
      +}
      +
      +.topcoat-radio-button__checkmark:before {
      +  width: 1.875rem;
      +  height: 1.875rem;
      +  background: #595b5b;
      +  border: 1px solid #303233;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-radio-button__checkmark {
      +  position: relative;
      +  width: 1.875rem;
      +  height: 1.875rem;
      +}
      +
      +.topcoat-radio-button__checkmark:after {
      +  opacity: 0;
      +  width: 0.875rem;
      +  height: 0.875rem;
      +  background: #fff;
      +  border: 1px solid rgba(255,255,255,0.1);
      +  box-shadow: 0 1px rgba(255,255,255,0.5);
      +  -webkit-transform: none;
      +  -ms-transform: none;
      +  transform: none;
      +  top: 7px;
      +  left: 7px;
      +}
      +
      +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +.range {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +.range__thumb {
      +  cursor: pointer;
      +}
      +
      +.range__thumb--webkit {
      +  cursor: pointer;
      +  -webkit-appearance: none;
      +}
      +
      +.range:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +.range,
      +.topcoat-range {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +.range__thumb,
      +.topcoat-range::-moz-range-thumb {
      +  cursor: pointer;
      +}
      +
      +.range__thumb--webkit,
      +.topcoat-range::-webkit-slider-thumb {
      +  cursor: pointer;
      +  -webkit-appearance: none;
      +}
      +
      +.range:disabled,
      +.topcoat-range:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Range

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <input type="range" class="topcoat-range">
      <input type="range" class="topcoat-range" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-range {
      +  border-radius: 6px;
      +  border: 1px solid #303233;
      +  background-color: #424546;
      +  height: 1rem;
      +  border-radius: 30px;
      +}
      +
      +.topcoat-range::-moz-range-track {
      +  border-radius: 6px;
      +  border: 1px solid #303233;
      +  background-color: #424546;
      +  height: 1rem;
      +  border-radius: 30px;
      +}
      +
      +.topcoat-range::-webkit-slider-thumb {
      +  height: 3rem;
      +  width: 2rem;
      +  background-color: #595b5b;
      +  border: 1px solid #303233;
      +  border-radius: 6px;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-range::-moz-range-thumb {
      +  height: 3rem;
      +  width: 2rem;
      +  background-color: #595b5b;
      +  border: 1px solid #303233;
      +  border-radius: 6px;
      +  box-shadow: inset 0 1px #727373;
      +}
      +
      +.topcoat-range:focus::-webkit-slider-thumb {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-range:focus::-moz-range-thumb {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.search-input {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +input[type="search"]::-webkit-search-cancel-button {
      +  -webkit-appearance: none;
      +}
      +
      +.search-input:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.search-input,
      +.topcoat-search-input,
      +.topcoat-search-input--large {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +input[type="search"]::-webkit-search-cancel-button {
      +  -webkit-appearance: none;
      +}
      +
      +.search-input:disabled,
      +.topcoat-search-input:disabled,
      +.topcoat-search-input--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Search Input

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <input type="search" value="" placeholder="search" class="topcoat-search-input">
      <input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-search-input,
      +.topcoat-search-input--large {
      +  line-height: 3rem;
      +  font-size: 16px;
      +  border: 1px solid #303233;
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +  color: #c6c8c8;
      +  padding: 0 0 0 2rem;
      +  border-radius: 30px;
      +  background-image: url("../img/search.svg");
      +  background-position: 1em center;
      +  background-repeat: no-repeat;
      +  background-size: 16px;
      +}
      +
      +.topcoat-search-input:focus,
      +.topcoat-search-input--large:focus {
      +  background-image: url("../img/search_dark.svg");
      +  background-color: #646666;
      +  color: #fff;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-search-input::-webkit-search-cancel-button,
      +.topcoat-search-input::-webkit-search-decoration,
      +.topcoat-search-input--large::-webkit-search-cancel-button,
      +.topcoat-search-input--large::-webkit-search-decoration {
      +  margin-right: 5px;
      +}
      +
      +.topcoat-search-input:focus::-webkit-input-placeholder,
      +.topcoat-search-input:focus::-webkit-input-placeholder {
      +  color: #c6c8c8;
      +}
      +
      +.topcoat-search-input:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Search Input

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <input type="search" value="" placeholder="search" class="topcoat-search-input--large">
      <input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-search-input--large {
      +  line-height: 4.375rem;
      +  font-size: 1.3rem;
      +  font-weight: 200;
      +  padding: 0 0 0 2.9rem;
      +  border-radius: 40px;
      +  background-position: 1.2em center;
      +  background-size: 1.3rem;
      +}
      +
      +.topcoat-search-input--large:disabled {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input--large:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input--large:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-search-input--large:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.switch {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch__input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.switch__toggle {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.switch__toggle:before,
      +.switch__toggle:after {
      +  content: '';
      +  position: absolute;
      +  z-index: -1;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.switch,
      +.topcoat-switch {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch__input,
      +.topcoat-switch__input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.switch__toggle,
      +.topcoat-switch__toggle {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.switch__toggle:before,
      +.switch__toggle:after,
      +.topcoat-switch__toggle:before,
      +.topcoat-switch__toggle:after {
      +  content: '';
      +  position: absolute;
      +  z-index: -1;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch--disabled,
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Switch

      +
      +




      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input">
        <div class="topcoat-switch__toggle"></div>
      </label>
      <br>
      <br>
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input" checked>
        <div class="topcoat-switch__toggle"></div>
      </label>
      <br>
      <br>
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input" disabled>
        <div class="topcoat-switch__toggle"></div>
      </label>
      +
      +
      +

      CSS

      +
      
      +.topcoat-switch {
      +  font-size: 16px;
      +  padding: 0 1.25rem;
      +  border-radius: 6px;
      +  border: 1px solid #303233;
      +  overflow: hidden;
      +  width: 6rem;
      +}
      +
      +.topcoat-switch__toggle:before,
      +.topcoat-switch__toggle:after {
      +  top: -1px;
      +  width: 5rem;
      +}
      +
      +.topcoat-switch__toggle:before {
      +  content: 'ON';
      +  color: #5dc1ff;
      +  background-color: #404141;
      +  right: 1rem;
      +  padding-left: 1.5rem;
      +}
      +
      +.topcoat-switch__toggle {
      +  line-height: 3rem;
      +  height: 3rem;
      +  width: 2rem;
      +  border-radius: 6px;
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  background-color: #595b5b;
      +  border: 1px solid #303233;
      +  margin-left: -1.3rem;
      +  margin-bottom: -1px;
      +  margin-top: -1px;
      +  box-shadow: inset 0 1px #727373;
      +  -webkit-transition: margin-left 0.05s ease-in-out;
      +  transition: margin-left 0.05s ease-in-out;
      +}
      +
      +.topcoat-switch__toggle:after {
      +  content: 'OFF';
      +  background-color: #404141;
      +  left: 1rem;
      +  padding-left: 2rem;
      +}
      +
      +.topcoat-switch__input:checked + .topcoat-switch__toggle {
      +  margin-left: 2.7rem;
      +}
      +
      +.topcoat-switch__input:focus + .topcoat-switch__toggle {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
      +  background: transparent;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-tab-bar__button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-tab-bar__button:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.button-bar,
      +.topcoat-tab-bar {
      +  display: table;
      +  table-layout: fixed;
      +  white-space: nowrap;
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +.button-bar__item,
      +.topcoat-tab-bar__item {
      +  display: table-cell;
      +  width: auto;
      +  border-radius: 0;
      +}
      +
      +.button-bar__item > input,
      +.topcoat-tab-bar__item > input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.button-bar__button {
      +  border-radius: inherit;
      +}
      +
      +.button-bar__item:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Tab Bar

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-tab-bar">
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">One</button>
        </label>
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">Two</button>
        </label>
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">Three</button>
        </label>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-tab-bar__button {
      +  padding: 0 1.25rem;
      +  height: 3rem;
      +  line-height: 3rem;
      +  letter-spacing: 1px;
      +  color: #c6c8c8;
      +  text-shadow: 0 -1px rgba(0,0,0,0.69);
      +  vertical-align: top;
      +  background-color: #595b5b;
      +  box-shadow: inset 0 1px #727373;
      +  border-top: 1px solid #303233;
      +}
      +
      +.topcoat-tab-bar__button:active,
      +.topcoat-tab-bar__button--large:active,
      +:checked + .topcoat-tab-bar__button {
      +  color: #5dc1ff;
      +  background-color: #404141;
      +  box-shadow: inset 0 0 2px #313231;
      +}
      +
      +.topcoat-tab-bar__button:focus,
      +.topcoat-tab-bar__button--large:focus {
      +  z-index: 1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.input,
      +.topcoat-text-input,
      +.topcoat-text-input--large {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.input:disabled,
      +.topcoat-text-input:disabled,
      +.topcoat-text-input--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Text input

      +
      +




      +
      + +
      +
      +

      HTML

      +
      <input type="text" class="topcoat-text-input" placeholder="text" value="">
      <br>
      <br>
      <input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
      <br>
      <br>
      <input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
      +
      +
      +

      CSS

      +
      
      +.topcoat-text-input,
      +.topcoat-text-input--large {
      +  line-height: 3rem;
      +  font-size: 16px;
      +  letter-spacing: 1px;
      +  padding: 0 1.25rem;
      +  border: 1px solid #303233;
      +  border-radius: 6px;
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +  color: #c6c8c8;
      +  vertical-align: top;
      +}
      +
      +.topcoat-text-input:focus,
      +.topcoat-text-input--large:focus {
      +  background-color: #646666;
      +  color: #fff;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-text-input:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input:invalid {
      +  border: 1px solid #d83b75;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Text Input

      +
      +




      +
      + +
      +
      +

      HTML

      +
      <input type="text" class="topcoat-text-input--large" value="" placeholder="text">
      <br>
      <br>
      <input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
      <br>
      <br>
      <input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
      +
      +
      +

      CSS

      +
      
      +.topcoat-text-input--large {
      +  line-height: 4.375rem;
      +  font-size: 1.3rem;
      +}
      +
      +.topcoat-text-input--large:disabled {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input--large:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input--large:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input--large:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-text-input--large:invalid {
      +  border: 1px solid #d83b75;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.textarea {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  vertical-align: top;
      +  resize: none;
      +  outline: none;
      +}
      +
      +.textarea:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.textarea,
      +.topcoat-textarea,
      +.topcoat-textarea--large {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  vertical-align: top;
      +  resize: none;
      +  outline: none;
      +}
      +
      +.textarea:disabled,
      +.topcoat-textarea:disabled,
      +.topcoat-textarea--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Textarea

      +
      +


      +
      + +
      +
      +

      HTML

      +
      <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
      <br>
      <br>
      <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
      +
      +
      +

      CSS

      +
      
      +.topcoat-textarea,
      +.topcoat-textarea--large {
      +  padding: 2rem;
      +  font-size: 2.5rem;
      +  font-weight: 200;
      +  border-radius: 6px;
      +  line-height: 3rem;
      +  border: 1px solid #303233;
      +  background-color: #404141;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
      +  color: #c6c8c8;
      +  letter-spacing: 1px;
      +}
      +
      +.topcoat-textarea:focus,
      +.topcoat-textarea--large:focus {
      +  background-color: #646666;
      +  color: #fff;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-textarea:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Textarea

      +
      +


      +
      + +
      +
      +

      HTML

      +
      <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
      <br>
      <br>
      <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
      +
      +
      +

      CSS

      +
      
      +.topcoat-textarea--large {
      +  font-size: 3rem;
      +  line-height: 4.375rem;
      +}
      +
      +.topcoat-textarea--large:disabled {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea--large:disabled::-webkit-input-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea--large:disabled::-moz-placeholder {
      +  color: #fff;
      +}
      +
      +.topcoat-textarea--large:disabled:-ms-input-placeholder {
      +  color: #fff;
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Regular.otf");
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Light.otf");
      +  font-weight: 200;
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Semibold.otf");
      +  font-weight: 600;
      +}
      +
      +body {
      +  margin: 0;
      +  padding: 0;
      +  background: #4b4d4e;
      +  color: #000;
      +  font: 16px "Source Sans", helvetica, arial, sans-serif;
      +  font-weight: 200;
      +}
      +
      +:focus {
      +  outline-color: transparent;
      +  outline-style: none;
      +}
      +
      +.topcoat-icon--menu-stack {
      +  background: url("../img/hamburger_light.svg") no-repeat;
      +  background-size: cover;
      +}
      +
      +.quarter {
      +  width: 25%;
      +}
      +
      +.half {
      +  width: 50%;
      +}
      +
      +.three-quarters {
      +  width: 75%;
      +}
      +
      +.third {
      +  width: 33.333%;
      +}
      +
      +.two-thirds {
      +  width: 66.666%;
      +}
      +
      +.full {
      +  width: 100%;
      +}
      +
      +.left {
      +  text-align: left;
      +}
      +
      +.center {
      +  text-align: center;
      +}
      +
      +.right {
      +  text-align: right;
      +}
      +
      +.reset-ui {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +/* This file should include color and image variables corresponding to the dark theme */
      +
      +/* Call To Action */
      +
      +/* Icons */
      +
      +/* Navigation Bar */
      +
      +/* Text Input */
      +
      +/* Search Input */
      +
      +/* List */
      +
      +/* Checkbox */
      +
      +/* Overlay */
      +
      +/* Progress bar */
      +
      +/* Checkbox */
      +
      +/* Radio Button */
      +
      +/* Tab bar */
      +
      +/* Switch */
      +
      +/* Icon Button */
      +
      +/* Navigation bar */
      +
      +/* List */
      +
      +/* Search Input */
      +
      +/* Textarea */
      +
      +/* Checkbox */
      +
      +/* Radio */
      +
      +/* Range input */
      +
      +/* Search Input */
      +
      +/* Switch */
      +
      +/* This file should include color and image variables corresponding to the light theme */
      +
      +/* Call To Action */
      +
      +/* Icons */
      +
      +/* Navigation Bar */
      +
      +/* Text Input */
      +
      +/* List */
      +
      +/* Overlay */
      +
      +/* Progress bar */
      +
      +/* Checkbox */
      +
      +/* Range input */
      +
      +/* Radio Button */
      +
      +/* Tab bar */
      +
      +/* Switch */
      +
      +/* Containers */
      +
      +/* Icon Button */
      +
      +/* Navigation bar */
      +
      +/* List */
      +
      +/* Search Input */
      +
      +/* Text Area */
      +
      +/* Checkbox */
      +
      +/* Radio */
      +
      +/* Range input */
      +
      +/* Search Input */
      +
      +/* Switch */
      +
      +/* Text Input */
      +
      +/* Radio input */
      +
      +/* Overlay */
      +
      +/* Textarea */
      +
      +/* Progress bar container */
      +
      +/* Progress bar progress */
      +
      +/* Search input */
      +
      +/* Switch */
      +
      +/* Notification */
      +
      +
      +
      +
      +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-light.html b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-light.html new file mode 100755 index 0000000..f67a519 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/demo/topcoat-mobile-light.html @@ -0,0 +1,3417 @@ + + + + + + Topcoat + + + + + + + +
      + +
      +
      +
      +
      +

      Topcoat

      +

      CSS for clean and fast web apps

      +
      + +
      +
      +
      +
      +
      +

      Button Bar

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-button-bar">
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">One</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">Two</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button">Three</button>
        </div>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button-bar > .topcoat-button-bar__item:first-child {
      +  border-top-left-radius: 6px;
      +  border-bottom-left-radius: 6px;
      +}
      +
      +.topcoat-button-bar > .topcoat-button-bar__item:last-child {
      +  border-top-right-radius: 6px;
      +  border-bottom-right-radius: 6px;
      +}
      +
      +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
      +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
      +  border-right: none;
      +}
      +
      +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
      +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
      +  border-left: none;
      +}
      +
      +.topcoat-button-bar__button {
      +  border-radius: inherit;
      +}
      +
      +.topcoat-button-bar__button:focus,
      +.topcoat-button-bar__button--large:focus {
      +  z-index: 1;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Button Bar

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-button-bar">
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">One</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">Two</button>
        </div>
        <div class="topcoat-button-bar__item">
          <button class="topcoat-button-bar__button--large">Three</button>
        </div>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button-bar__button--large {
      +  border-radius: inherit;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-button,
      +.topcoat-button--quiet,
      +.topcoat-button--large,
      +.topcoat-button--large--quiet,
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-button:disabled,
      +.topcoat-button--quiet:disabled,
      +.topcoat-button--large:disabled,
      +.topcoat-button--large--quiet:disabled,
      +.topcoat-button--cta:disabled,
      +.topcoat-button--large--cta:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Button

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button">Button</button>
      <button class="topcoat-button" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button,
      +.topcoat-button--quiet,
      +.topcoat-button--large,
      +.topcoat-button--large--quiet,
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  padding: 0 1.25rem;
      +  font-size: 16px;
      +  line-height: 3rem;
      +  letter-spacing: 1px;
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  vertical-align: top;
      +  background-color: #e5e9e8;
      +  box-shadow: inset 0 1px #fff;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 6px;
      +}
      +
      +.topcoat-button:hover,
      +.topcoat-button--quiet:hover,
      +.topcoat-button--large:hover,
      +.topcoat-button--large--quiet:hover {
      +  background-color: #edf1f1;
      +}
      +
      +.topcoat-button:active,
      +.topcoat-button--large:active {
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +.topcoat-button:focus,
      +.topcoat-button--quiet:focus,
      +.topcoat-button--large:focus,
      +.topcoat-button--large--quiet:focus,
      +.topcoat-button--cta:focus,
      +.topcoat-button--large--cta:focus {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +  outline: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Quiet Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--quiet">Button</button>
      <button class="topcoat-button--quiet" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-button--quiet:hover,
      +.topcoat-button--large--quiet:hover {
      +  text-shadow: 0 1px #fff;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-button--quiet:active,
      +.topcoat-button--large--quiet:active {
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  background-color: #d3d7d7;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large" >Button</button>
      <button class="topcoat-button--large" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large,
      +.topcoat-button--large--quiet {
      +  font-size: 1.3rem;
      +  font-weight: 400;
      +  line-height: 4.375rem;
      +  padding: 0 1.25rem;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Quiet Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large--quiet" >Button</button>
      <button class="topcoat-button--large--quiet" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Call To Action Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--cta" >Button</button>
      <button class="topcoat-button--cta" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--cta,
      +.topcoat-button--large--cta {
      +  border: 1px solid #143250;
      +  background-color: #288edf;
      +  box-shadow: inset 0 1px rgba(255,255,255,0.36);
      +  color: #fff;
      +  font-weight: 500;
      +  text-shadow: 0 -1px rgba(0,0,0,0.36);
      +}
      +
      +.topcoat-button--cta:hover,
      +.topcoat-button--large--cta:hover {
      +  background-color: #509bef;
      +}
      +
      +.topcoat-button--cta:active,
      +.topcoat-button--large--cta:active {
      +  background-color: #0380e8;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Call To Action Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-button--large--cta" >Button</button>
      <button class="topcoat-button--large--cta" disabled>Button</button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-button--large--cta {
      +  font-size: 1.3rem;
      +  font-weight: 400;
      +  line-height: 4.375rem;
      +  padding: 0 1.25rem;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="checkbox"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.checkbox {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox__label {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.checkbox:before,
      +.checkbox:after {
      +  content: '';
      +  position: absolute;
      +}
      +
      +.checkbox:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="checkbox"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.checkbox,
      +.topcoat-checkbox__checkmark {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox__label,
      +.topcoat-checkbox {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.checkbox--disabled,
      +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.checkbox:before,
      +.checkbox:after,
      +.topcoat-checkbox__checkmark:before,
      +.topcoat-checkbox__checkmark:after {
      +  content: '';
      +  position: absolute;
      +}
      +
      +.checkbox:before,
      +.topcoat-checkbox__checkmark:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Checkbox

      +
      +


      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <label class="topcoat-checkbox">
        <input type="checkbox">
        <div class="topcoat-checkbox__checkmark"></div>
        Default
      </label>
      <br>
      <br>
      <label class="topcoat-checkbox">
        <input type="checkbox" disabled>
        <div class="topcoat-checkbox__checkmark"></div>
        Disabled
      </label>
      +
      +
      +

      CSS

      +
      
      +.topcoat-checkbox__checkmark {
      +  height: 2rem;
      +}
      +
      +input[type="checkbox"] {
      +  height: 2rem;
      +  width: 2rem;
      +  margin-top: 0;
      +  margin-right: -2rem;
      +  margin-bottom: -2rem;
      +  margin-left: 0;
      +}
      +
      +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
      +  opacity: 1;
      +}
      +
      +.topcoat-checkbox {
      +  line-height: 2rem;
      +}
      +
      +.topcoat-checkbox__checkmark:before {
      +  width: 2rem;
      +  height: 2rem;
      +  background: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 3px;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-checkbox__checkmark {
      +  width: 2rem;
      +  height: 2rem;
      +}
      +
      +.topcoat-checkbox__checkmark:after {
      +  top: 1px;
      +  left: 2px;
      +  opacity: 0;
      +  width: 28px;
      +  height: 11px;
      +  background: transparent;
      +  border: 7px solid #666;
      +  border-width: 7px;
      +  border-top: none;
      +  border-right: none;
      +  border-radius: 2px;
      +  -webkit-transform: rotate(-50deg);
      +  -ms-transform: rotate(-50deg);
      +  transform: rotate(-50deg);
      +}
      +
      +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-icon-button,
      +.topcoat-icon-button--quiet,
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-icon-button:disabled,
      +.topcoat-icon-button--quiet:disabled,
      +.topcoat-icon-button--large:disabled,
      +.topcoat-icon-button--large--quiet:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button">
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button" disabled>
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button,
      +.topcoat-icon-button--quiet,
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  padding: 0 0.75rem;
      +  line-height: 3rem;
      +  letter-spacing: 1px;
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  vertical-align: baseline;
      +  background-color: #e5e9e8;
      +  box-shadow: inset 0 1px #fff;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 6px;
      +}
      +
      +.topcoat-icon-button:hover,
      +.topcoat-icon-button--quiet:hover,
      +.topcoat-icon-button--large:hover,
      +.topcoat-icon-button--large--quiet:hover {
      +  background-color: #edf1f1;
      +}
      +
      +.topcoat-icon-button:active {
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +.topcoat-icon-button:focus,
      +.topcoat-icon-button--quiet:focus,
      +.topcoat-icon-button--quiet:hover:focus,
      +.topcoat-icon-button--large:focus,
      +.topcoat-icon-button--large--quiet:focus,
      +.topcoat-icon-button--large--quiet:hover:focus {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +  outline: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Quiet Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--quiet">
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--quiet" disabled>
        <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-icon-button--quiet:hover,
      +.topcoat-icon-button--large--quiet:hover {
      +  text-shadow: 0 1px #fff;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-icon-button--quiet:active,
      +.topcoat-icon-button--large--quiet:active {
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  background-color: #d3d7d7;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--large">
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--large" disabled>
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--large,
      +.topcoat-icon-button--large--quiet {
      +  width: 4.375rem;
      +  height: 4.375rem;
      +  line-height: 4.375rem;
      +}
      +
      +.topcoat-icon-button--large:active {
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Quiet Icon Button

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <button class="topcoat-icon-button--large--quiet">
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      <button class="topcoat-icon-button--large--quiet" disabled>
        <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
      </button>
      +
      +
      +

      CSS

      +
      
      +.topcoat-icon-button--large--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.topcoat-icon,
      +.topcoat-icon--large {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  overflow: hidden;
      +  width: 1.62rem;
      +  height: 1.62rem;
      +  vertical-align: middle;
      +  top: -1px;
      +}
      +
      +.topcoat-icon--large {
      +  width: 2.499999998125rem;
      +  height: 2.499999998125rem;
      +  top: -2px;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.input {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.input:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.list {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  overflow: auto;
      +  -webkit-overflow-scrolling: touch;
      +}
      +
      +.list__header {
      +  margin: 0;
      +}
      +
      +.list__container {
      +  padding: 0;
      +  margin: 0;
      +  list-style-type: none;
      +}
      +
      +.list__item {
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.list,
      +.topcoat-list {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  overflow: auto;
      +  -webkit-overflow-scrolling: touch;
      +}
      +
      +.list__header,
      +.topcoat-list__header {
      +  margin: 0;
      +}
      +
      +.list__container,
      +.topcoat-list__container {
      +  padding: 0;
      +  margin: 0;
      +  list-style-type: none;
      +}
      +
      +.list__item,
      +.topcoat-list__item {
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      List

      +
      +

      Category

      • Item
      • Item
      • Item
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-list">
        <h3 class="topcoat-list__header">Category</h3>
        <ul class="topcoat-list__container">
          <li class="topcoat-list__item">
            Item
          </li>
          <li class="topcoat-list__item">
            Item
          </li>
          <li class="topcoat-list__item">
            Item
          </li>
        </ul>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-list {
      +  border-top: 1px solid #bcbfbf;
      +  border-bottom: 1px solid #eff1f1;
      +  background-color: #dfe2e2;
      +}
      +
      +.topcoat-list__header {
      +  padding: 4px 20px;
      +  font-size: 0.9em;
      +  font-weight: 400;
      +  background-color: #cccfcf;
      +  color: #656565;
      +  text-shadow: 0 1px 0 rgba(255,255,255,0.5);
      +  border-top: 1px solid rgba(255,255,255,0.5);
      +  border-bottom: 1px solid rgba(255,255,255,0.23);
      +}
      +
      +.topcoat-list__container {
      +  border-top: 1px solid #bcbfbf;
      +  color: #454545;
      +}
      +
      +.topcoat-list__item {
      +  padding: 1.25rem;
      +  border-top: 1px solid #eff1f1;
      +  border-bottom: 1px solid #bcbfbf;
      +}
      +
      +.topcoat-list__item:first-child {
      +  border-top: 1px solid rgba(0,0,0,0.05);
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.navigation-bar {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  word-spacing: 0;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.navigation-bar__item {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +}
      +
      +.navigation-bar__title {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.navigation-bar,
      +.topcoat-navigation-bar {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  word-spacing: 0;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.navigation-bar__item,
      +.topcoat-navigation-bar__item {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +}
      +
      +.navigation-bar__title,
      +.topcoat-navigation-bar__title {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +
      +
      +
      +
      + +
      +
      +

      Notification

      +
      +
      1
      +
      + +
      +
      +

      HTML

      +
      <span class="topcoat-notification">1</span>
      +
      +
      +

      CSS

      +
      
      +.topcoat-notification {
      +  padding: 0.15em 0.5em 0.2em;
      +  border-radius: 2px;
      +  background-color: #ec514e;
      +  color: #fff;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="radio"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.radio-button {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button__label {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button:before,
      +.radio-button:after {
      +  content: '';
      +  position: absolute;
      +  border-radius: 100%;
      +}
      +
      +.radio-button:after {
      +  top: 50%;
      +  left: 50%;
      +  -webkit-transform: translate(-50%, -50%);
      +  -ms-transform: translate(-50%, -50%);
      +  transform: translate(-50%, -50%);
      +}
      +
      +.radio-button:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.radio-button--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +input[type="radio"] {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.radio-button,
      +.topcoat-radio-button__checkmark {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button__label,
      +.topcoat-radio-button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.radio-button:before,
      +.radio-button:after,
      +.topcoat-radio-button__checkmark:before,
      +.topcoat-radio-button__checkmark:after {
      +  content: '';
      +  position: absolute;
      +  border-radius: 100%;
      +}
      +
      +.radio-button:after,
      +.topcoat-radio-button__checkmark:after {
      +  top: 50%;
      +  left: 50%;
      +  -webkit-transform: translate(-50%, -50%);
      +  -ms-transform: translate(-50%, -50%);
      +  transform: translate(-50%, -50%);
      +}
      +
      +.radio-button:before,
      +.topcoat-radio-button__checkmark:before {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.radio-button--disabled,
      +input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Radio Button

      +
      +






      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <!-- NO LABEL -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
      </label>
      <br>
      <br>
      <!-- LEFT LABEL -->
      <label class="topcoat-radio-button">
        Left label
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
      </label>
      <br>
      <br>
      <!-- RIGHT LABEL -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat">
        <div class="topcoat-radio-button__checkmark"></div>
        Right label
      </label>
      <br>
      <br>
      <!-- DISABLED -->
      <label class="topcoat-radio-button">
        <input type="radio" name="topcoat" Disabled>
        <div class="topcoat-radio-button__checkmark"></div>
        Disabled
      </label>
      +
      +
      +

      CSS

      +
      
      +input[type="radio"] {
      +  height: 1.875rem;
      +  width: 1.875rem;
      +  margin-top: 0;
      +  margin-right: -1.875rem;
      +  margin-bottom: -1.875rem;
      +  margin-left: 0;
      +}
      +
      +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
      +  opacity: 1;
      +}
      +
      +.topcoat-radio-button {
      +  color: #454545;
      +  line-height: 1.875rem;
      +}
      +
      +.topcoat-radio-button__checkmark:before {
      +  width: 1.875rem;
      +  height: 1.875rem;
      +  background: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-radio-button__checkmark {
      +  position: relative;
      +  width: 1.875rem;
      +  height: 1.875rem;
      +}
      +
      +.topcoat-radio-button__checkmark:after {
      +  opacity: 0;
      +  width: 0.875rem;
      +  height: 0.875rem;
      +  background: #666;
      +  border: 1px solid rgba(0,0,0,0.1);
      +  box-shadow: 0 1px rgba(255,255,255,0.5);
      +  -webkit-transform: none;
      +  -ms-transform: none;
      +  transform: none;
      +  top: 7px;
      +  left: 7px;
      +}
      +
      +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +.range {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +.range__thumb {
      +  cursor: pointer;
      +}
      +
      +.range__thumb--webkit {
      +  cursor: pointer;
      +  -webkit-appearance: none;
      +}
      +
      +.range:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +/*
      +Copyright 2012 Adobe Systems Inc.;
      +Licensed under the Apache License, Version 2.0 (the "License");
      +you may not use this file except in compliance with the License.
      +You may obtain a copy of the License at
      +
      +http://www.apache.org/licenses/LICENSE-2.0
      +
      +Unless required by applicable law or agreed to in writing, software
      +distributed under the License is distributed on an "AS IS" BASIS,
      +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +See the License for the specific language governing permissions and
      +limitations under the License.
      +*/
      +
      +.range,
      +.topcoat-range {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +.range__thumb,
      +.topcoat-range::-moz-range-thumb {
      +  cursor: pointer;
      +}
      +
      +.range__thumb--webkit,
      +.topcoat-range::-webkit-slider-thumb {
      +  cursor: pointer;
      +  -webkit-appearance: none;
      +}
      +
      +.range:disabled,
      +.topcoat-range:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Range

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <input type="range" class="topcoat-range">
      <input type="range" class="topcoat-range" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-range {
      +  border-radius: 6px;
      +  border: 1px solid #a5a8a8;
      +  background-color: #d3d7d7;
      +  height: 1rem;
      +  border-radius: 30px;
      +}
      +
      +.topcoat-range::-moz-range-track {
      +  border-radius: 6px;
      +  border: 1px solid #a5a8a8;
      +  background-color: #d3d7d7;
      +  height: 1rem;
      +  border-radius: 30px;
      +}
      +
      +.topcoat-range::-webkit-slider-thumb {
      +  height: 3rem;
      +  width: 2rem;
      +  background-color: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 6px;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-range::-moz-range-thumb {
      +  height: 3rem;
      +  width: 2rem;
      +  background-color: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 6px;
      +  box-shadow: inset 0 1px #fff;
      +}
      +
      +.topcoat-range:focus::-webkit-slider-thumb {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-range:focus::-moz-range-thumb {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.search-input {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +input[type="search"]::-webkit-search-cancel-button {
      +  -webkit-appearance: none;
      +}
      +
      +.search-input:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.search-input,
      +.topcoat-search-input,
      +.topcoat-search-input--large {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +  -webkit-appearance: none;
      +}
      +
      +input[type="search"]::-webkit-search-cancel-button {
      +  -webkit-appearance: none;
      +}
      +
      +.search-input:disabled,
      +.topcoat-search-input:disabled,
      +.topcoat-search-input--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Search Input

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <input type="search" value="" placeholder="search" class="topcoat-search-input">
      <input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-search-input,
      +.topcoat-search-input--large {
      +  line-height: 3rem;
      +  font-size: 16px;
      +  border: 1px solid #a5a8a8;
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +  color: #454545;
      +  padding: 0 0 0 2rem;
      +  border-radius: 30px;
      +  background-image: url("../img/search.svg");
      +  background-position: 1em center;
      +  background-repeat: no-repeat;
      +  background-size: 16px;
      +}
      +
      +.topcoat-search-input:focus,
      +.topcoat-search-input--large:focus {
      +  background-image: url("../img/search_dark.svg");
      +  background-color: #edf1f1;
      +  color: #000;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-search-input::-webkit-search-cancel-button,
      +.topcoat-search-input::-webkit-search-decoration,
      +.topcoat-search-input--large::-webkit-search-cancel-button,
      +.topcoat-search-input--large::-webkit-search-decoration {
      +  margin-right: 5px;
      +}
      +
      +.topcoat-search-input:focus::-webkit-input-placeholder,
      +.topcoat-search-input:focus::-webkit-input-placeholder {
      +  color: #c6c8c8;
      +}
      +
      +.topcoat-search-input:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-search-input:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-search-input:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Search Input

      +
      +
      +
      + +
      +
      +

      HTML

      +
      <input type="search" value="" placeholder="search" class="topcoat-search-input--large">
      <input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
      +
      +
      +

      CSS

      +
      
      +.topcoat-search-input--large {
      +  line-height: 4.375rem;
      +  font-size: 1.3rem;
      +  font-weight: 200;
      +  padding: 0 0 0 2.9rem;
      +  border-radius: 40px;
      +  background-position: 1.2em center;
      +  background-size: 1.3rem;
      +}
      +
      +.topcoat-search-input--large:disabled {
      +  color: #000;
      +}
      +
      +.topcoat-search-input--large:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-search-input--large:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-search-input--large:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.switch {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch__input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.switch__toggle {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.switch__toggle:before,
      +.switch__toggle:after {
      +  content: '';
      +  position: absolute;
      +  z-index: -1;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch--disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.switch,
      +.topcoat-switch {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch__input,
      +.topcoat-switch__input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.switch__toggle,
      +.topcoat-switch__toggle {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +}
      +
      +.switch__toggle:before,
      +.switch__toggle:after,
      +.topcoat-switch__toggle:before,
      +.topcoat-switch__toggle:after {
      +  content: '';
      +  position: absolute;
      +  z-index: -1;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +}
      +
      +.switch--disabled,
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Switch

      +
      +




      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input">
        <div class="topcoat-switch__toggle"></div>
      </label>
      <br>
      <br>
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input" checked>
        <div class="topcoat-switch__toggle"></div>
      </label>
      <br>
      <br>
      <label class="topcoat-switch">
        <input type="checkbox" class="topcoat-switch__input" disabled>
        <div class="topcoat-switch__toggle"></div>
      </label>
      +
      +
      +

      CSS

      +
      
      +.topcoat-switch {
      +  font-size: 16px;
      +  padding: 0 1.25rem;
      +  border-radius: 6px;
      +  border: 1px solid #a5a8a8;
      +  overflow: hidden;
      +  width: 6rem;
      +}
      +
      +.topcoat-switch__toggle:before,
      +.topcoat-switch__toggle:after {
      +  top: -1px;
      +  width: 5rem;
      +}
      +
      +.topcoat-switch__toggle:before {
      +  content: 'ON';
      +  color: #0083e8;
      +  background-color: #e0f0fa;
      +  right: 1rem;
      +  padding-left: 1.5rem;
      +}
      +
      +.topcoat-switch__toggle {
      +  line-height: 3rem;
      +  height: 3rem;
      +  width: 2rem;
      +  border-radius: 6px;
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  background-color: #e5e9e8;
      +  border: 1px solid #a5a8a8;
      +  margin-left: -1.3rem;
      +  margin-bottom: -1px;
      +  margin-top: -1px;
      +  box-shadow: inset 0 1px #fff;
      +  -webkit-transition: margin-left 0.05s ease-in-out;
      +  transition: margin-left 0.05s ease-in-out;
      +}
      +
      +.topcoat-switch__toggle:after {
      +  content: 'OFF';
      +  background-color: #d3d7d7;
      +  left: 1rem;
      +  padding-left: 2rem;
      +}
      +
      +.topcoat-switch__input:checked + .topcoat-switch__toggle {
      +  margin-left: 2.7rem;
      +}
      +
      +.topcoat-switch__input:focus + .topcoat-switch__toggle {
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
      +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
      +  background: transparent;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.button,
      +.topcoat-tab-bar__button {
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +  text-decoration: none;
      +}
      +
      +.button--quiet {
      +  background: transparent;
      +  border: 1px solid transparent;
      +  box-shadow: none;
      +}
      +
      +.button--disabled,
      +.topcoat-tab-bar__button:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +.button-bar,
      +.topcoat-tab-bar {
      +  display: table;
      +  table-layout: fixed;
      +  white-space: nowrap;
      +  margin: 0;
      +  padding: 0;
      +}
      +
      +.button-bar__item,
      +.topcoat-tab-bar__item {
      +  display: table-cell;
      +  width: auto;
      +  border-radius: 0;
      +}
      +
      +.button-bar__item > input,
      +.topcoat-tab-bar__item > input {
      +  position: absolute;
      +  overflow: hidden;
      +  padding: 0;
      +  border: 0;
      +  opacity: 0.001;
      +  z-index: 1;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.button-bar__button {
      +  border-radius: inherit;
      +}
      +
      +.button-bar__item:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Tab Bar

      +
      +
      +
      +

      Examples

      + +
      +
      + +
      +
      +

      HTML

      +
      <div class="topcoat-tab-bar">
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">One</button>
        </label>
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">Two</button>
        </label>
        <label class="topcoat-tab-bar__item">
          <input type="radio" name="tab-bar">
          <button class="topcoat-tab-bar__button">Three</button>
        </label>
      </div>
      +
      +
      +

      CSS

      +
      
      +.topcoat-tab-bar__button {
      +  padding: 0 1.25rem;
      +  height: 3rem;
      +  line-height: 3rem;
      +  letter-spacing: 1px;
      +  color: #454545;
      +  text-shadow: 0 1px #fff;
      +  vertical-align: top;
      +  background-color: #e5e9e8;
      +  box-shadow: inset 0 1px #fff;
      +  border-top: 1px solid #a5a8a8;
      +}
      +
      +.topcoat-tab-bar__button:active,
      +.topcoat-tab-bar__button--large:active,
      +:checked + .topcoat-tab-bar__button {
      +  color: #0083e8;
      +  background-color: #e0f0fa;
      +  box-shadow: inset 0 0 2px #c0ced8;
      +}
      +
      +.topcoat-tab-bar__button:focus,
      +.topcoat-tab-bar__button--large:focus {
      +  z-index: 1;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.input,
      +.topcoat-text-input,
      +.topcoat-text-input--large {
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  vertical-align: top;
      +  outline: none;
      +}
      +
      +.input:disabled,
      +.topcoat-text-input:disabled,
      +.topcoat-text-input--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Text input

      +
      +




      +
      + +
      +
      +

      HTML

      +
      <input type="text" class="topcoat-text-input" placeholder="text" value="">
      <br>
      <br>
      <input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
      <br>
      <br>
      <input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
      +
      +
      +

      CSS

      +
      
      +.topcoat-text-input,
      +.topcoat-text-input--large {
      +  line-height: 3rem;
      +  font-size: 16px;
      +  letter-spacing: 1px;
      +  padding: 0 1.25rem;
      +  border: 1px solid #a5a8a8;
      +  border-radius: 6px;
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +  color: #454545;
      +  vertical-align: top;
      +}
      +
      +.topcoat-text-input:focus,
      +.topcoat-text-input--large:focus {
      +  background-color: #edf1f1;
      +  color: #000;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-text-input:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input:invalid {
      +  border: 1px solid #d83b75;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Text Input

      +
      +




      +
      + +
      +
      +

      HTML

      +
      <input type="text" class="topcoat-text-input--large" value="" placeholder="text">
      <br>
      <br>
      <input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
      <br>
      <br>
      <input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
      +
      +
      +

      CSS

      +
      
      +.topcoat-text-input--large {
      +  line-height: 4.375rem;
      +  font-size: 1.3rem;
      +}
      +
      +.topcoat-text-input--large:disabled {
      +  color: #000;
      +}
      +
      +.topcoat-text-input--large:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input--large:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input--large:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-text-input--large:invalid {
      +  border: 1px solid #d83b75;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.textarea {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  vertical-align: top;
      +  resize: none;
      +  outline: none;
      +}
      +
      +.textarea:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +/**
      +*
      +* Copyright 2012 Adobe Systems Inc.;
      +*
      +* Licensed under the Apache License, Version 2.0 (the "License");
      +* you may not use this file except in compliance with the License.
      +* You may obtain a copy of the License at
      +*
      +* http://www.apache.org/licenses/LICENSE-2.0
      +*
      +* Unless required by applicable law or agreed to in writing, software
      +* distributed under the License is distributed on an "AS IS" BASIS,
      +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +* See the License for the specific language governing permissions and
      +* limitations under the License.
      +*
      +*/
      +
      +.textarea,
      +.topcoat-textarea,
      +.topcoat-textarea--large {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  vertical-align: top;
      +  resize: none;
      +  outline: none;
      +}
      +
      +.textarea:disabled,
      +.topcoat-textarea:disabled,
      +.topcoat-textarea--large:disabled {
      +  opacity: 0.3;
      +  cursor: default;
      +  pointer-events: none;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Textarea

      +
      +


      +
      + +
      +
      +

      HTML

      +
      <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
      <br>
      <br>
      <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
      +
      +
      +

      CSS

      +
      
      +.topcoat-textarea,
      +.topcoat-textarea--large {
      +  padding: 2rem;
      +  font-size: 2.5rem;
      +  font-weight: 200;
      +  border-radius: 6px;
      +  line-height: 3rem;
      +  border: 1px solid #a5a8a8;
      +  background-color: #d3d7d7;
      +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
      +  color: #454545;
      +  letter-spacing: 1px;
      +}
      +
      +.topcoat-textarea:focus,
      +.topcoat-textarea--large:focus {
      +  background-color: #edf1f1;
      +  color: #000;
      +  border: 1px solid #0940fd;
      +  box-shadow: 0 0 0 2px #6fb5f1;
      +}
      +
      +.topcoat-textarea:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-textarea:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-textarea:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +
      +
      +
      +
      +
      +
      +

      Large Textarea

      +
      +


      +
      + +
      +
      +

      HTML

      +
      <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
      <br>
      <br>
      <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
      +
      +
      +

      CSS

      +
      
      +.topcoat-textarea--large {
      +  font-size: 3rem;
      +  line-height: 4.375rem;
      +}
      +
      +.topcoat-textarea--large:disabled {
      +  color: #000;
      +}
      +
      +.topcoat-textarea--large:disabled::-webkit-input-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-textarea--large:disabled::-moz-placeholder {
      +  color: #000;
      +}
      +
      +.topcoat-textarea--large:disabled:-ms-input-placeholder {
      +  color: #000;
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Regular.otf");
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Light.otf");
      +  font-weight: 200;
      +}
      +
      +@font-face {
      +  font-family: "Source Sans";
      +  src: url("../font/SourceSansPro-Semibold.otf");
      +  font-weight: 600;
      +}
      +
      +body {
      +  margin: 0;
      +  padding: 0;
      +  background: #dfe2e2;
      +  color: #000;
      +  font: 16px "Source Sans", helvetica, arial, sans-serif;
      +  font-weight: 200;
      +}
      +
      +:focus {
      +  outline-color: transparent;
      +  outline-style: none;
      +}
      +
      +.topcoat-icon--menu-stack {
      +  background: url("../img/hamburger_dark.svg") no-repeat;
      +  background-size: cover;
      +}
      +
      +.quarter {
      +  width: 25%;
      +}
      +
      +.half {
      +  width: 50%;
      +}
      +
      +.three-quarters {
      +  width: 75%;
      +}
      +
      +.third {
      +  width: 33.333%;
      +}
      +
      +.two-thirds {
      +  width: 66.666%;
      +}
      +
      +.full {
      +  width: 100%;
      +}
      +
      +.left {
      +  text-align: left;
      +}
      +
      +.center {
      +  text-align: center;
      +}
      +
      +.right {
      +  text-align: right;
      +}
      +
      +.reset-ui {
      +  -moz-box-sizing: border-box;
      +  box-sizing: border-box;
      +  background-clip: padding-box;
      +  position: relative;
      +  display: inline-block;
      +  vertical-align: top;
      +  padding: 0;
      +  margin: 0;
      +  font: inherit;
      +  color: inherit;
      +  background: transparent;
      +  border: none;
      +  cursor: default;
      +  -webkit-user-select: none;
      +  -moz-user-select: none;
      +  -ms-user-select: none;
      +  user-select: none;
      +  text-overflow: ellipsis;
      +  white-space: nowrap;
      +  overflow: hidden;
      +}
      +
      +/* This file should include color and image variables corresponding to the dark theme */
      +
      +/* Call To Action */
      +
      +/* Icons */
      +
      +/* Navigation Bar */
      +
      +/* Text Input */
      +
      +/* Search Input */
      +
      +/* List */
      +
      +/* Checkbox */
      +
      +/* Overlay */
      +
      +/* Progress bar */
      +
      +/* Checkbox */
      +
      +/* Radio Button */
      +
      +/* Tab bar */
      +
      +/* Switch */
      +
      +/* Icon Button */
      +
      +/* Navigation bar */
      +
      +/* List */
      +
      +/* Search Input */
      +
      +/* Textarea */
      +
      +/* Checkbox */
      +
      +/* Radio */
      +
      +/* Range input */
      +
      +/* Search Input */
      +
      +/* Switch */
      +
      +/* This file should include color and image variables corresponding to the light theme */
      +
      +/* Call To Action */
      +
      +/* Icons */
      +
      +/* Navigation Bar */
      +
      +/* Text Input */
      +
      +/* List */
      +
      +/* Overlay */
      +
      +/* Progress bar */
      +
      +/* Checkbox */
      +
      +/* Range input */
      +
      +/* Radio Button */
      +
      +/* Tab bar */
      +
      +/* Switch */
      +
      +/* Containers */
      +
      +/* Icon Button */
      +
      +/* Navigation bar */
      +
      +/* List */
      +
      +/* Search Input */
      +
      +/* Text Area */
      +
      +/* Checkbox */
      +
      +/* Radio */
      +
      +/* Range input */
      +
      +/* Search Input */
      +
      +/* Switch */
      +
      +/* Text Input */
      +
      +/* Radio input */
      +
      +/* Overlay */
      +
      +/* Textarea */
      +
      +/* Progress bar container */
      +
      +/* Progress bar progress */
      +
      +/* Search input */
      +
      +/* Switch */
      +
      +/* Notification */
      +
      +
      +
      +
      +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/build/styleguide.css b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/build/styleguide.css new file mode 100755 index 0000000..bcbf2a8 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/build/styleguide.css @@ -0,0 +1,495 @@ +/*! +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +/* Styleguide CSS here pls ------------------------------------------------------------------------------- */ + +html { + height: 100%; + width: 100%; + position: absolute; +} + +body { + color: #444; + font: 14px "source-sans-pro", "source", helvetica, arial, sans-serif; + line-height: 21px; + margin: 0; + padding: 0; + -webkit-font-smoothing: subpixel-antialiased; +} + +.guides { +/* border: 1px solid red;*/ +} + +.space { + height: 90px; +} + +#container { + min-width: 600px; +} + +#test-container { + padding: 0 120px 30px 30px ; +} + +h1,h2,h3,h4,h5,h6 { + color: #000; + font-family: "source-l", helvetica, arial, sans-serif; + font-weight: normal; + margin: 0; +} + +h4 { + border-bottom: 1px solid #d7d7d7; + font-size: 30px; + margin: 20px 0; +} + +h5 { + font-size: 21px; +} + +h4 span { + background: #fff; + padding: 0 7px 0 0; + position: relative; + bottom: -10px; +} + +.tabular { + border: 1px solid rgba(0,0,0,0.09); + border-spacing: 0; + margin: 14px 0; +} + +th, td, .tabular td.var { + border-bottom: 1px solid #eee; + font-size: 15px; + font-weight: normal; + padding: 5px 10px; + text-align: left; +} + +th { + white-space: nowrap; +} + +.tabular tr:last-child td { + border: none; +} + +.tabular td { + font-size: 12px; + padding: 10px; +} + +.images { + width: 100% !important; +} + +.images td, +.images th { + border-right: 1px solid #eee !important; + padding: 18px; + text-align: center; + vertical-align: top; +} + +.images th { + padding: 9px; +} + +.images tr:last-child td, +.images tr th:last-child { + border-right: none !important; +} + +.images img { + width: 300px; +} + +header { + background: #3a3f42 url("../img/bg_dark.png") repeat-x; + bottom: 0; + cursor: default; + left: 0; + overflow-y: scroll; + padding: 0 0 30px 0; + position: absolute; + top: 0; + width: 220px; +} + +#main { + bottom: 0; + left: 220px; + margin: 0; + overflow-y: scroll; + padding: 0 100px 60px 40px; + position: absolute; + right: 0; + top: 0; +} + +header hgroup { + padding: 15px; +} + +header hgroup { + border-bottom: 1px solid rgba(0,0,0,0.36); + box-shadow: 0px 1px 0px rgba(255,255,255,0.11); +} + +header h1 { + color: #fff; + font-size: 18px; + text-shadow: 0 -1px 0 #000; +} + +header h2 { + color: #c7c7c7; + font-size: 12px; + text-shadow: 0 -1px 0 #000; +} + +header h3 { + color: #A4B4B7; + font-size: 14px; + text-shadow: 0 -1px 0 #000; + margin: 15px 0 5px 15px; +} + +header ul { + list-style: none; + margin: 0; + padding: 0; + width: 100%; +} + +header a { + box-sizing: border-box; + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #bbb; + display: block; + font-size: 14px; + height: 24px; + line-height: 24px; + padding: 0 15px 0 30px; + text-shadow: 0 1px 0 #000; +} + +header a:link, +header a:visited { + color: #c7c7c7; + text-decoration: none; +} + +header .selected { + background: rgba(112,112,112,0.24); + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #fff !important; +} + + +header a:hover { + background: rgba(112,112,112,0.24); + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #fff !important; +} + +header a:focus { + border: 1px solid #0940fd; + -webkit-box-shadow: 0 0 4px #0088ff; + box-shadow: 0 0 4px #0088ff; + outline: none; + margin-left: 4px; + margin-right: 4px; + padding: 0 10px 0 25px; + background: rgba(112,112,112,0.24); + color: #fff !important; +} + +header a:active { + background: rgba(0,0,0,0.24); + border-top: 1px solid rgba(0,0,0,0.2); + border-bottom: 1px solid rgba(255,255,255,0.15); + color: #fff; +} + +h4:target span { + -webkit-animation: highlight 5s ease; + -moz-animation: highlight 5s ease; +} + + @-webkit-keyframes highlight { + 0% { color: #0083E8; text-shadow: 0 0 4px rgba(0,136,255,.69); } + 100% { color: #000; text-shadow: none; } + } + +.preview { + border-spacing: 0; + width: auto; +} + +.preview td { + padding: 15px 30px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.bg-light { + background: #f8f8f8; + border: 1px solid rgba(0,0,0,0.09); + font-size: 12px; +} + +.fonts.tabular { + width: 100%; +} + +.fonts.tabular th.bg-white { + border-bottom: 1px solid rgba(0,0,0,0.09); +} + +.fonts.tabular th.bg-lightgray { + border-bottom: 1px solid #bdbdbd; +} + +.fonts.tabular th.bg-slategray { + border-bottom: 1px solid #5c6061; +} + +.fonts.tabular td { + vertical-align: top; + width: 33%; +} + + +/* Selection ------------------------------------------------------------------------------- */ + +::selection { + background: #e0f0fa; + color: #000; +} + +header { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Scrollbars ------------------------------------------------------------------------------- */ + +::-webkit-scrollbar { + height: 8px; + width: 8px; +} + +::-webkit-scrollbar-track { + background: rgba(0,0,0,0.1); + box-shadow: inset 0 0 6px rgba(0,0,0,0); + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0); + border-radius: 4px; + -webkit-border-radius: 4px; +} + +::-webkit-scrollbar-thumb { + border-radius: 4px; + -webkit-border-radius: 4px; + border: 1px solid rgba(255,255,255,0.15); + background: rgba(0,0,0,0.3); + box-shadow: inset 0 0 6px rgba(0,0,0,0); + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0); +} + +::-webkit-scrollbar-thumb:window-inactive { + background: rgba(0,0,0,0.1); +} + + +/* Scrollbars ------------------------------------------------------------------------------- */ + + +/* Container */ +.modal { + /* Overlay page content */ + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.6); + z-index: 10000; + + /* Transition opacity on open */ + -webkit-transition: opacity 200ms ease-in; + transition: opacity 200ms ease-in; + + /* Hide for now */ + opacity: 0; + pointer-events: none; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Show modal */ +.modal:target { + opacity: 1; + pointer-events: auto; +} + +/* Hide modal */ +.modal:active { + opacity: 0; +} + +/* Content */ +.modal > div { + width: 65%; + background: #fff; + position: relative; + margin: 10% auto; + + /* Default minimise animation */ + -webkit-animation: minimise 500ms linear; + + /* Prettify */ + padding: 12px 15px; + border-radius: 4px; + box-shadow: 0 15px 36px rgba(0,0,0,0.6); + background: #fff; + text-shadow: 0 1px 0 #fff; +} + +/* Override animation on modal open */ +.modal:target > div { + -webkit-animation-name: bounce; + -moz-animation-name: bounce; +} + +.modal h1 { + font-size: 24px; + padding: 0 0 10px; +} + +@-webkit-keyframes bounce { + 0% { + -webkit-transform: scale3d(1,1,1); + } + 55% { + -webkit-transform: scale3d(1,1,1); + } + 100% { + -webkit-transform: scale3d(1,1,1); + } +/* 0% { + -webkit-transform: scale3d(0.1,0.1,1); + box-shadow: 0 3px 20px rgba(0,0,0,0.9); + } + 55% { + -webkit-transform: scale3d(1,1,1); + box-shadow: 0 10px 20px rgba(0,0,0,0); + } + 75% { + -webkit-transform: scale3d(0.95,0.95,1); + box-shadow: 0 0 20px rgba(0,0,0,0.9); + } + 100% { + -webkit-transform: scale3d(1,1,1); + box-shadow: 0 3px 20px rgba(0,0,0,0.9); + } +*/ +} + +@-webkit-keyframes minimise { + 0% { + -webkit-transform: scale3d(1,1,1); + } + 100% { + -webkit-transform: scale3d(0.1,0.1,1); + } +} + +/* Modal close link */ +.modal a[href="#close"] { + position: absolute; + right: 0; + top: 0; + color: transparent; +} + +/* Reset native styles */ + .modal a[href="#close"]:focus { + outline: none; +} + +/* Create close button */ +.modal a[href="#close"]:after { + content: url("../img/close_modal.png"); + display: block; + + /* Position */ + position: absolute; + right: 15px; + top: 15px; + + /* Style */ + font-size: 12px; + text-decoration: none; + text-shadow: none; + text-align: center; + font-weight: bold; + background: #fff; +} + +.modal a[href="#close"]:focus:after, +.modal a[href="#close"]:hover:after { + +} + +.modal a[href="#close"]:focus:after { + outline: 1px solid #000; +} + +.modal a[href="#close"] { + text-shadow: none !important; +} + +/* Open modal */ +a.openmodal { + display: block; + text-align: center; +} + +a.openmodal:hover, +a.openmodal:focus { + +} \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/build/styleguide.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/build/styleguide.js new file mode 100755 index 0000000..67f89bf --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/build/styleguide.js @@ -0,0 +1,10 @@ +if (!document.querySelector('override')) { + var head = document.querySelector('head'); + var link = document.createElement('link'); + link.id = 'override'; + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = '../../release/css/' + location.href.split('/').pop().split('.')[0] + '.css'; + link.media = 'all'; + head.appendChild(link); +} \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js new file mode 100755 index 0000000..6c472dd --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js @@ -0,0 +1,13 @@ +var chromiumSrc = process.env.CHROMIUM_SRC; + +module.exports = function(grunt) { + + grunt.registerTask('check_chromium_src', "Internal task to store CHROMIUM_SRC env var into chromiumSrc", function() { + if (!chromiumSrc) { + grunt.fail.warn("Please set the CHROMIUM_SRC env var to the root of your chromium sources(ends in /src)"); + } else { + grunt.log.writeln("CHROMIUM_SRC points to " + chromiumSrc.cyan); + } + }); + +} diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrygentest.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrygentest.js new file mode 100755 index 0000000..2b0bb0c --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrygentest.js @@ -0,0 +1,98 @@ +var fs = require("fs"), + jade = require("jade"), + path = require("path"); + +module.exports = function (grunt) { + + var TELEMETRY_DIR = 'dev/test/perf/telemetry/perf/page_sets/', + MASTER_JADE = 'topcoat_telemetry.jade'; + + grunt.registerTask('perf', 'Generates performance test', function (platform, theme) { + + var perfJades = findAllPerfJadeFileInSrc(); + + var targetPlatform = platform || 'mobile', + targetTheme = theme || 'light'; + + var targetCSS = prepareCSS(targetPlatform, targetTheme); + + var jadeCompileData = {}; + + grunt.util._.forEach(perfJades, function (jadePath) { + + var jadeFileName = path.basename(jadePath).split('.')[0]; + + prepareJadeCompileData(jadeCompileData, jadePath, + jadeFileName, targetPlatform, targetTheme, targetCSS); + + createTelemetryJSON(jadeFileName); + }); + batchCompileJade(jadeCompileData); + }); + + var findAllPerfJadeFileInSrc = function () { + + var jades = grunt.file.expand('node_modules/topcoat-*/test/perf/topcoat_*.jade') + .concat('node_modules/topcoat-checkbox/test/perf/checkbox-test.jade'); + + if (jades.length === 0){ + throw new Error("ERROR: No jade file is found in src/../test/perf/"); + } + + return jades; + }; + + var prepareCSS = function(platform, theme) { + + return "release/css/topcoat-" + platform + "-" + theme + ".min.css"; + }; + + var prepareJadeCompileData = function (jadeCompileData, jadePath, + caseName, platform, theme, css) { + + var jadeContent = fs.readFileSync(jadePath, "utf8"), + getHtml = jade.compile(jadeContent); + + jadeCompileData[caseName] = { + options: { + data: { + platform: platform, + theme: theme, + css: css, + name: caseName, + componentHTML: getHtml() + } + }, + src: TELEMETRY_DIR + "topcoat/" + MASTER_JADE, + dest: TELEMETRY_DIR + "topcoat/" + caseName + ".test.html" + }; + }; + + var createTelemetryJSON = function (caseName) { + + var jsonContent = { + "description": "Test", + "archive_data_file": "../data/topcoat_buttons.json", + "pages": [ + { + "url": "file:///topcoat/" + caseName + ".test.html", + "smoothness": { + "action": "scrolling_action" + } + } + ] + }; + + var jsonFilePATH = TELEMETRY_DIR + caseName + '.test.json'; + + fs.writeFileSync( + jsonFilePATH, + JSON.stringify(jsonContent, null, 4), + 'utf8'); + }; + + var batchCompileJade = function(data){ + grunt.config('jade', data); + grunt.task.run('jade'); + }; +}; diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrysubmit.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrysubmit.js new file mode 100755 index 0000000..f9f6fb2 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/tasks/telemetrysubmit.js @@ -0,0 +1,101 @@ +module.exports = function(grunt) { + + grunt.registerTask('telemetry-submit', 'Submit telemetry test results', function(gitCWD) { + + var exec = require("child_process").exec, + commandToBeExecuted = 'git log --pretty=format:"%H %ci" | head -n 1', + done = this.async(); + + var part1 = { + properties: { + path: { + message: 'Path to telemetry output file', + required: true + }, + device: { + message: 'Device on which the test ran', + required: true + } + } + }; + + var part2 = { + properties: { + test: { + message: 'What is the name of the test?', + required: true, + default: '' + }, + type: { + message: 'Is it a test (nightly) ?', + required: true, + default: 'Yes' + } + } + }; + + exec(commandToBeExecuted, { cwd: gitCWD }, function(error, stdout, stderr) { + if (error) { + grunt.log.error('Error'); + console.log(error); + done(); + } else { + + var path = grunt.option('path') + , device = grunt.option('device') + , test = grunt.option('test') + // use env variables to overwrite the location + // where the test results end up, for CI example + , host = process.env.TOPCOAT_BENCHMARK_SERVER + , port = process.env.TOPCOAT_BENCHMARK_PORT + , type = grunt.option('type') + , date = grunt.option('date') + , snapshot + , submitData = require('../test/perf/telemetry/lib/submitData') + , fileName = require('../test/perf/telemetry/lib/extractFileName') + , prompt = require('prompt') + ; + + if (!path || !test || !device) { + // Dummy test to see if it was called without arguments + // in this case we request the user for data + + prompt.start(); + prompt.get(part1, function (err, result) { + var options = result; + + part2.properties.test.default = fileName(result.path); + + prompt.get(part2, function (err, result) { + for (var i in result) + options[i] = result[i]; + + if (options.type.match(/y/gi)) + options.date = 'snapshot ' + new Date().toISOString(); + else + options.date = stdout; + + submitData(options.date, options.path, { + device: options.device, + test: options.test + }, { + host : host, + port : port + }); + }); + }); + } else { + // This is in case for automated tasks that submits the data + submitData(stdout, path, { + device: device, + test: test + }, { + host : host, + port : port + }); + } + } + }); + + }); +}; \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/README.md b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/README.md new file mode 100755 index 0000000..0fc795e --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/README.md @@ -0,0 +1,79 @@ +Performance tests based on chromium telemetry (see https://github.com/topcoat/topcoat/wiki/Measuring-performance for details) + +# Preparing to run the tests +A few steps are required before you can run the telemetry tests. + +First of all, you need to download chromium source code locally, as described on http://www.chromium.org/developers/how-tos/get-the-code. No need to compile, just download it. +Then export the location for the 'src' folder in the CHROMIUM_SRC environment variable, like in +``` +export CHROMIUM_SRC = /Users/cataling/work/chromium/home/src_tarball/tarball/chromium/src/ +``` + +Then you need to manually patch a little bit two of the benchmark files (the patches are just one liners, it they get bigger we'll just duplicate the benchmarks in topcoat). Locate the files named `loading_benchmark.py` and `smoothness_benchmark.py` in `$CHROMIUM_SRC/tools/perf/perf_tools`. Inside, look for the method `MeasurePage`, and find an appropriate place to paste `results.Add("UserAgent", "", tab.EvaluateJavaScript("navigator.userAgent"));`. This makes the benchmarks include the user agent string as part of their output, and we need this info to submit the results to the server. + +NOTE: we should make a patch for these modifications + +Next you can prepare the telemetry tests: +``` +grunt telemetry +``` +This does few things: +* it generates html snippets based on grunt template from test/perf/topcoat-*.test.jade of each of Topcoat component. So make sure you build Topcoat first, by ```grunt default```, so that Topcoat components are downloaded into the src folder; +* then it uses that html snippet to generate the actual test file from topcoat/test/perf /telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade; +* last, it copies those test files to the right location in chromium telemetry tests. + +# Running performance tests locally +You can run a telemetry test with: +``` +cd $CHROMIUM_SRC/tools/perf +./run_multipage_benchmarks --browser=system loading_benchmark page_sets/topcoat_buttons-base.test.json -o /tmp/loading_benchmark_topcoat_buttons-base.txt +./run_multipage_benchmarks --browser=system smoothness_benchmark page_sets/topcoat_buttons-base.test.json -o /tmp/smoothness_benchmark_topcoat_buttons-base.txt +``` +We store the benchmark output in a file - the next script will take this output and push it to the server + +For steps of running performance tests on Android: +https://github.com/topcoat/topcoat/wiki/Running-TopCoat-Performance-Test-on-Android + +# Pushing benchmark results to the server + +There is a grunt task that automates the process `$ grunt telemetry-submit --path=test_results.txt --type=sha|snapshot [--device] [--test]` + +Device is an optional parameter and sets the device on which the test ran. +For `type snapshot` you have to send in a date param as well. You have to use: `date -u +"%Y-%m-%dT%H:%M:%SZ"` + +Type is either `sha` or `snapshot`. + + * `sha` is for running the tests on a stable version (in black) + * `snapshot` is for running custom nightly builds of topcoat (in red) + * ![x axis perf view](http://i.imgur.com/DrKxFlI.png) + +Test is an optional parameter and it overrides the default test name ( which is the name of the file from path ). + +There is a `settings.js` file located under `/test/perf/telemetry/lib/` where you can change the address where to submit. It is currently set for http://bench.topcoat.io/v2/benchmark + +If you set an `TOPCOAT_BENCHMARK_SERVER` and `TOPCOAT_BENCHMARK_PORT` env variables you can override the default settings. + +You can view the results at http://bench.topcoat.io + +# Running all tests +There's also a handy script to run all the performance tests and push the results on the server. +It's located at `https://github.com/topcoat/topcoat/blob/master/test/perf/telemetry/bin/runAll.py`. +Check out the script for details on how to run it. + +# Adding a new performance test +Before adding new tests, you should make yourself comfortable with the chromium telemetry framework and running telemetry tests in chrome. + +Topcoat performance tests are located in `test/perf/telemetry/perf/page_sets` (the folder convention matches the one from chromium telemetry tests). When building telemetry with `grunt telemetry` this folder is copied over `page_sets` in chromium src. There is one .json file that describes each test, its structure is as required by chromium telemetry framework. You will need to add a new json file to describe your test - just start from an existing ones. + +The files for the tests are located under the `topcoat` folder. You can either add html file directly, or use jade. Jade files are converted to html when you run `grunt telemetry`. The html files will be generated under `page_sets` in chromium src. Currently, if you're adding a jade file you need to manually add it to `Gruntfile.js` (just look up where topcoat_buttons.jade is added). If future we'll get rid of this. + +Inside the test files (html or jade) you can reference the topcoat assets (css, fonts, images) under "./release/". The whole `./release` folder under topcoat root and all the components are copied there by `grunt telemetry`. + +In the json file you can reference the test file to load using `file:///topcoat/` URLs. Use .html here even if you use .jade for tests - you want to reference the generated html file, not the jade template. When running the tests, telemetry will instantiate a local HTTP server and rewrite the URLs, they will not be loaded with the file protocol. + +From telemetry we're currently using loading and smoothness benchmarks. The runAll.sh script currently runs these two benchmarks on all the .json tests under page_sets. + +Note 1: runAll.py uses CEF ([chromium embedding framework](https://code.google.com/p/chromiumembedded/)) to run the tests on desktop (Win and Mac) by default. This is because the target for TopCoat are web applications, not web sites, and CEF is the preferred way to develop web applications on desktop. +We're currently using a custom CEF build because telemetry does not work in CEF by default. A patch has been submitted to CEF upstream (https://code.google.com/p/chromiumembedded/issues/detail?id=917&sort=-id) to fix this. + +Note 2: part of this will probably change when we switch to the new components/themes architecture. diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py new file mode 100755 index 0000000..3dd8aba --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py @@ -0,0 +1,200 @@ +# Copyright 2012 Adobe Systems Inc.; +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# Runs all the telemetry tests and pushes results to the server +# +# Make sure to run in from its folder! +# +# Env vars used: +# - TestHelper.CHROMIUM_SRC: path to chromium src +# - DEVICE_NAME: a label to identify the machine running the tests when submitting results +# - CEF_HOME: path to CEF binaries (needed only if USE_CEF is set to True) +# - USE_CEF: if run with CEF, set this to 'True' +# + +import os +import sys +import shutil +import subprocess +import glob +import platform +import shutil + + +class TestHelper(): + GRUNT = "grunt" + RESULTS_DIR = "/tmp/topcoat-telemetry" + BROWSER = "system" + BROWSER_EXEC = None + SUBMIT_TYPE = "SHA" + + CHROMIUM_SRC = os.environ.get("CHROMIUM_SRC") + DEVICE_NAME = os.environ.get("DEVICE_NAME") + CEF_HOME = os.environ.get("CEF_HOME") + USE_CEF = os.environ.get("USE_CEF") + + @staticmethod + def init(targetPlatform, targetTheme): + TestHelper._checkEnvVars() + TestHelper._prepareProperties() + TestHelper._prepareResultsDir() + TestHelper._cleanTelemetryTests() + TestHelper._prepareTelemetryTests(targetPlatform, targetTheme) + + @staticmethod + def _getPlatform(): + p = platform.platform().lower() + if p.find('windows') != -1: return "Win" + if p.find('darwin') != -1: return "Mac" + if p.find('linux') != -1: return "Lin" + + @staticmethod + def _checkEnvVars(): + if not TestHelper.DEVICE_NAME: + raise RuntimeError("Please set DEVICE_NAME env var (no spaces allowed yet)") + + if not TestHelper.CHROMIUM_SRC: + raise RuntimeError("Please set CHROMIUM_SRC env var.") + + if not TestHelper.USE_CEF: + raise RuntimeError("Please set USE_CEF env var.") + + if (TestHelper.USE_CEF == 'True') and (not TestHelper.CEF_HOME): + raise RuntimeError("Please set CEF_HOME if you set USE_CEF to True") + + @staticmethod + def _prepareProperties(): + p = TestHelper._getPlatform() + + if p == "Win": + TestHelper.GRUNT = "grunt.cmd" + TestHelper.RESULTS_DIR = "C:\\tmp\\topcoat-telemetry" + TestHelper.BROWSER = "exact" + TestHelper.BROWSER_EXEC = "%s\\app\\cefclient.exe" % TestHelper.CEF_HOME + + if p == "Mac": + if TestHelper.USE_CEF: + TestHelper.BROWSER = "exact" + TestHelper.BROWSER_EXEC = "%s/app/cefclient.app/Contents/MacOS/cefclient" % TestHelper.CEF_HOME + + if p == "Lin": + TestHelper.BROWSER = "android-chrome-beta" + + @staticmethod + def _prepareResultsDir(): + print "runAll.py: Preparing results dir %s" % TestHelper.RESULTS_DIR + if os.path.isdir(TestHelper.RESULTS_DIR): + shutil.rmtree(TestHelper.RESULTS_DIR) + os.makedirs(TestHelper.RESULTS_DIR) + + @staticmethod + def _prepareTelemetryTests(targetPlatform, targetTheme): + print "runAll.py: Preparing telemetry tests" + subprocess.check_call([TestHelper.GRUNT, 'telemetry:'+targetPlatform+':'+targetTheme]) + + @staticmethod + def _cleanTelemetryTests(): + print "runAll.py: clean up CHROMIUM_SRC/tools/perf/page_sets/topcoat" + path = TestHelper.CHROMIUM_SRC + "tools/perf/page_sets/topcoat" + if os.path.exists(path): + shutil.rmtree(path) + + @staticmethod + def runTests(user_defined_test_list, how_many_rounds_to_run_the_test): + print "runAll.py: Running telemetry tests, results in %s" % TestHelper.RESULTS_DIR + + telemetry_tests = ["loading_benchmark", "smoothness_benchmark"] + + if user_defined_test_list and len(user_defined_test_list) != 0: + topcoat_test_files = user_defined_test_list + else: + topcoat_test_files = glob.glob(os.getcwd() + "/../perf/page_sets/*.json") + + def genCmd(): + cmd = [ + "python", + TestHelper.CHROMIUM_SRC + "/tools/perf/run_multipage_benchmarks", + "--browser=" + TestHelper.BROWSER, + telemetry_test, + TestHelper.CHROMIUM_SRC + "tools/perf/page_sets/%s" % topcoat_test_file, + "-o", TestHelper.RESULTS_DIR + "/%s_%s-%s.txt" % (telemetry_test, topcoat_test_name, test_round) + ] + if TestHelper.BROWSER_EXEC: + cmd.insert(3, "--browser-executable=" + TestHelper.BROWSER_EXEC) + return cmd + + for tf in topcoat_test_files: + topcoat_test_file = tf.split(os.sep)[-1] + topcoat_test_name = topcoat_test_file.split(".")[0] + print "runAll.py: Running tests for %s" % topcoat_test_name + + for telemetry_test in telemetry_tests: + for test_round in range(how_many_rounds_to_run_the_test): + cmd = genCmd() + subprocess.check_call(cmd) + + @staticmethod + def submitResults(git_cwd): + print "runAll.py: Pushing telemetry data to the server" + result_files = glob.glob(TestHelper.RESULTS_DIR + "/*.txt") + for rf in result_files: + subprocess.check_call([ + TestHelper.GRUNT, + "telemetry-submit:" + git_cwd, + "--path=" + rf, + "--device=" + TestHelper.DEVICE_NAME, + "--test=" + rf.split(os.sep)[-1][:-6], + "--type=" + TestHelper.SUBMIT_TYPE + ]) + + +if __name__ == "__main__": + + # Usage: + # ./python runAll.py --platform=VALUE --theme=VALUE [--gitCWD=VALUE] [--test=VALUE] [--round=VALUE] + # --platform= desktop or mobile + # --theme= light or dark + # [optional] --gitCWD=PATH_WHERE_YOU_WANT_TO_RUN_GIT_LOG, e.g. src/skins/button + # [optional] --test=ONE_OR_MORE_TESTS_YOU_WANT_TO_RUN, e.g. topcoat_button.test.json + # [optional] --test=HOW_MANY_ROUNDS_TO_RUN_THE_TEST, default is 1. + + platfrm = theme = git_cwd = test_list = None + test_round = 1 + + args = sys.argv[1:] + + for arg in args: + arg_key, arg_val = arg.split('=') + if arg_key == '--platform': + platfrm = arg_val + elif arg_key == '--theme': + theme = arg_val + elif arg_key == '--gitCWD': + git_cwd = arg_val + elif arg_key == '--test': + test_list = arg_val.split(',') + elif arg_key == '--round': + test_round = int(arg_val) + else: + print "%s is not recognized." + + if not platform or not theme: + raise RuntimeError("ERROR: --platform and --theme must be set.") + + if not git_cwd: + git_cwd = '' + + TestHelper.init(platfrm, theme) + TestHelper.runTests(test_list, test_round) + TestHelper.submitResults(git_cwd) \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh new file mode 100755 index 0000000..aa088c0 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh @@ -0,0 +1,105 @@ +#!/bin/sh +# Copyright 2012 Adobe Systems Inc.; +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# Runs all the telemetry tests and pushes results to the server +# +# Make sure to run in from its folder! +# +# Env vars used: +# - CHROMIUM_SRC: path to chromium src +# - DEVICE_NAME: a label to identify the machine running the tests when submitting results +# - CEF_HOME: path to CEF binaries (needed only if USE_CEF is set to True) +# + +RESULTS_DIR=/tmp/topcoat-telemetry +USE_CEF=true + +function checkEnvVars() { + if [ -z "$DEVICE_NAME" ] + then + echo "Please set DEVICE_NAME env var (no spaces allowed yet)" + exit 1 + fi + + if [ -z "$CHROMIUM_SRC" ] + then + echo "Please set CHROMIUM_SRC env var" + exit 1 + fi + + if ($USE_CEF) + then + if [ -z "$CEF_HOME" ] + then + echo "You need to set CEF_HOME if yout set USE_CEF to True" + exit 1 + fi + fi +} + +function prepareResultsDir() { + echo "runAll.sh: Preparing results dir $RESULTS_DIR" + rm -rf $RESULTS_DIR + mkdir $RESULTS_DIR +} + +function prepareTelemetryTests() { + echo "runAll.sh: Preparing telemetry tests" + grunt telemetry +} + +function runTests() { + echo "runAll.sh: Running telemetry tests, resuls in $RESULTS_DIR" + + if ($USE_CEF) + then + browserParams="--browser=exact --browser-executable=$CEF_HOME/app/cefclient.app/Contents/MacOS/cefclient" + else + browserParams="--browser=system" + fi + + testFiles=$(ls ../perf/page_sets/*.json); + + currentDir=`pwd` + cd $CHROMIUM_SRC/tools/perf + + for test in $testFiles + do + testFileBaseName=$(basename $test) #ends with .json + testName=$(echo $testFileBaseName | cut -d '.' -f 1) + echo "runAll.sh: Running tests for $testName" + ./run_multipage_benchmarks $browserParams loading_benchmark page_sets/$testFileBaseName -o $RESULTS_DIR/loading_benchmark_$testName.txt + ./run_multipage_benchmarks $browserParams smoothness_benchmark page_sets/$testFileBaseName -o $RESULTS_DIR/smoothness_benchmark_$testName.txt + done + + cd $currentDir +} + +function submitResults() { + echo "runAll.sh: Pushing telemetry data to the server" + + for resultFile in $RESULTS_DIR/* + do + grunt telemetry-submit --path=$resultFile --device $DEVICE_NAME + done +} + + +checkEnvVars +prepareResultsDir +prepareTelemetryTests +runTests +submitResults + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js new file mode 100755 index 0000000..b5d0594 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js @@ -0,0 +1,56 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +"use strict"; + +var parseCSV = function(file, cb) { + + var fs = require('fs') + , filename = file + , csv = require('csv') + ; + + var header = []; + var values = []; + var json = {}; + + csv() + .from.stream(fs.createReadStream(file)) + .transform(function(row, index){ + //in case there are blank lines in between key & value on Win7 + if (row[0] == ""){ + return null; + }else{ + return row; + } + }) + .on('record', function(row,index){ + if (index === 0) + header.push(row); + else + values.push(row); + }) + .on('end', function(count){ + header[0].forEach(function (h, idx) { + json[h] = values[0][idx]; + }); + cb(json); + }) + .on('error', function(error){ + console.log(error.message); + }); +}; + +module.exports = parseCSV; \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js new file mode 100755 index 0000000..f3446e5 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js @@ -0,0 +1,12 @@ +var extractFileName = function (path) { + if (path.split('/').length > 1) { + sep = '/'; + } else if (path.split('\\').length > 1) { + sep = '\\'; + } else { + throw new Error('ERROR: the separator in test result file path is neither "/" nor "\\".'); + } + return path.split(sep).pop().split('.')[0]; +}; + +module.exports = extractFileName; \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js new file mode 100755 index 0000000..b701064 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js @@ -0,0 +1,31 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +function settings (contentLength) { + var post_options = { + host: 'localhost', + port: '3000', + path: '/v2/benchmark', + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': contentLength + } + }; + + return post_options; +} + +module.exports = settings; diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js new file mode 100755 index 0000000..d3f732d --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js @@ -0,0 +1,61 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +var submitData = function (stdout, path, args, destination) { + var querystring = require('querystring'); + var http = require('http'); + var fs = require('fs'); + var parse = require('./csvToJSON'); + var postOptions = require('./settings'); + var fileName = require('./extractFileName.js'); + + var post_data = {}; + console.log(path); + parse(path, function (j) { + post_data = { + resultName : j + }; + + var version = stdout.split(' '); + + post_data.commit = version.shift(); + post_data.date = version.join(' '); + post_data.test = args.test || fileName(path); + post_data.device = args.device || 'device?'; + post_data = querystring.stringify({data : JSON.stringify(post_data)}); + post_options = postOptions(post_data.length); + if (destination.host && destination.port) { + var location = destination.host.split('/'); + + post_options.host = location.shift(); + post_options.port = destination.port; + } + // Set up the request + var post_req = http.request(post_options, function(res) { + res.setEncoding('utf8'); + res.on('data', function(chunk) { + console.log(chunk); + }); + }); + + // post the data + post_req.write(post_data); + post_req.end(); + + }); + +}; + +module.exports = submitData; \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade new file mode 100755 index 0000000..c38b00f --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade @@ -0,0 +1,17 @@ +repeats = 200 + +doctype 5 +html + head + meta(charset="utf-8") + meta(name="format-detection", content="telephone=no") + meta(name="viewport", content="user-scalable=no, initial-scale=1, maximum-scale=1, width=device-width, height=device-width, target-densitydpi=device-dpi") + + title #{name} test + | + + body + -while (repeats > 0) + -var repeats = repeats - 1 + p + | !{componentHTML} diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/LICENSE.txt b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/LICENSE.txt new file mode 100755 index 0000000..d154618 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Black.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Black.otf new file mode 100755 index 0000000000000000000000000000000000000000..ba47f3db43526fb256b02073eb102750867745f8 GIT binary patch literal 88472 zcmdqK349aP+Bke>vbC8sUD8x&NgDR8l>=EsLxhk)X&D)&;B}!p2+3?CEmZH>)8-COiuGeltgqS?b zz!=wSXZI1pctaq?;H3eRKNvg4!H#Vd%$^* zifY%4mX$Lj31=)MM0H=abw;i1ID+Cb;Y(R#t+qY?Y~xFC4)}(2sz!2 z-$Xde3VGvV_Il6p*6!bH`D66DjPQ6B{$QN!{olVMgdcZn z_pMd@F$#&@W8cstpU95GiHsj7TR;@h_W^z!oM*EmH<`q6Cb%m2_{!umo|nUkijYo7 z6a7m`Pc=isB=P(|Zz&NY7dVx0EAS?FiGKv|ftCpA#l3kOKaOA!IHD(Jcbf;u6WnbX z=|QaSw!B>*1xY3g-Pe^wM_zWfRb(o8$KCcJp#E)DK%&siWNjceL^s#n=7^wMiZu3MN+~97@NM`T?cU#`BkAgUY-*8`7l3x0u?zV~?)t9>4J|r%rhr8`dI)#jL zw*?XtQtNK}b$=n`ad%rwG6#A31Q6q(P44S~L_O$b)&?FU2EFEPb0lQY&+ax)LI$hd zZ5in|*pz0kZE{qWSGY_uQPEKm_#IS6Y~}S;R!4MXRCMfMG_Ap`8}@=u z1866>k(X*7V{MxqldHmJDypdj7EKlxa0^Y^$<2MxdVX zqP5CtH(493l~vZ_DjO4z)s&Gk+GKSNGP$MbEOAuUx}1^D%Bo1aqkLdqMh+qv@ZbOW zsVNir=3G-oUT&c&Co9dIYcaRy!8E`WlVHlQ6+7y!jwbN1sKoz=DE-v=1?H4dsX1m8 zw#`&-2kz0vQK)|ssHqRI+1G?>aM?{xS7kN$r3*x4cT|-&R)Wu#+8RKXwbeE-B7jn2 zuL2>W!&f%gOl4?VwGR6})FMpP_R`8SG&-aWZ~`xm%Hnzq7f5ndlgSDeZm%iFBWMB6LEJTV zm&s|b0#j|mi`7nBRRe?&6Y7j2ivV&M*pY3JP>Hn$$teb>sX{_* z)y1~bQfzgk!X2$BHX0fboYUieZUL796;>C;(gtViXiokmx zXsoa|f&n=wvB)ye>#$YXtX^kFVpt%>7>G9J7CM9Lu+`O9I&9Sbz<}IJ21UR%D=5?x zF}zX4RB8vR5t+5N7Nie-sr>9E^%M%VNMNPjiK0cfV9EvHa8l`L#~`x{C?vCTvkJ5F zaxH%9ZW(Cvp5WCD$S4DILL>;uX`^0JR#^ok+-8)ixLrQY1jXANeVl#oL_V5P35du6 zv}1xo%W|5W^(7T35#SRooY@8-Wa*V6i~v)p1dDP&jpH# z>D^gtD{&h(LvON{x!lni!mPVAaAHP8xdJx~ejd~el{MBXPn>HH9c6?e1mXq81Wnr@9xrrfi1t{i`n~Q`4bcY;*;-1S%Vm!Ml~>tZU=9%` zumWd&F@z&mJzg*k7~lyTc#FmwJLC|!ObwUC)plfiBJCf90J>>1l~h=3Ks4oGaE@v# z#zF^P#(?QD#g5`Y(>2xD8cnvEhDwLM2Ib7yO{sTP*d2dn(pgy!;SFK|BC=r%{JR`t zWi_^4wvvjP$`a5`qXX(0s9-!rOf48OD5SB%4m!Ych6OOUS$Cj{5|D2$7?owQfKQlu znbPud(>?x?Z*x>vI%&xUrV90u4LAe>Y9Jm)uo#YM1fp}fjb;oKqZ_-u*aa?)qObxL zwGbDWcsrn{gCG{M2;2mb1$sghwo!mI2D)Q1Tx}l+SxSL8Th%dS*Vo*R;Iw+Uoh|=> z7R&MvUNGu4f6q1&`#yJQphUmVgTpLtiZdd651;UcUV>p#y0F^Kj(px=f z#A`zs`AxUI2nPJowjr*1vYb1E04!To8P!Zo-+w>$jzaaoyPZqg3yx+statC6L8ysg zj&`RIn-y{~RUcXsD3qmAs2ZSR!0T*I0Rb9{IvS*07}eTGeJ6Be$;}<-N=#PJ2!Ou9|jv1fgO zEQ`kVrL_(AM8e&!{YT{V7MlUE5ZA76M^AzR4?NjjQve!@5)@o*cR_5h)s)&DAURN- zwG;{vS0$WasQIHWLDv~2wp!}eFf*;OH$p8{&P0AY5`u5HqvK9AW70;^wjbjm;{|%quE1L63rz+`{oNdoZQsjyGjz<)%lN%;R7tX0e#^3QSp} z@^iAxa4jo0EvG0wD|dt`6~^V};iPa>Rv`c_%%elypt8&`F2e-Gq-6r+l+>)8titgT zri`q@T!fhcKvPWlDFuaDX+=3H1*ZI>0$ATP1B`S4o12xJQ2^kr5hhE%IV}qtAiAsq za~co`Jwe>SJX{4xP-Ixlql@4I^z)zq9b}p*=|FP|{GW#A!8pzZ4iQdaUIEC!P0H9T zi#fuSQjldqC1e!jjRN4H3Xl=9S7mjudF5R4x0|3D; za{t^n@{a2?INKRmWh=K1pp`;Op>Hv7oR`44iPBX{ zTlsL!4p&kEiWTlor(?^ZFP=Mq(nv~gEExM9uXFUG@u z4m@MnYvAfYz~+E^$Rm!yHp-(OMj~yMw0GoxMNK|nL;adSpJ+pwZm4LVF0ipdfPElo zr2j=yDKN{7q!d)cJr`JLEl_~E|KGE36X`>J=0BsUFZHNKD%T3&>W@BPA{js}O3y@c zfvaku-$Z(Mu#?_Y9w{K3|HP+IbM3wA|9jTsN7MvAg&=1}y;nxaTNy~J5oG0{vSK~Z z+c1jM&$cNaSOZm!!VHiHL2i%r%KKQ&DbT$eyP7bs@mW`S% z2fZ-ed*ZmqQvcpUF%B_p_60~DZ*Wm7!aQ9Gv4rJIjNxcSXaiN?6KGE?&*C@cVzkRz z8hcnIVmSrv7h?`uq9?;w(*7p!K~L1G1*mp14WN`zn?uj>P*D$1S#^N%&BL2_EZV9K z;3Ksx1KR*H-gi(~9;sjr;K_UF=g2R5w+X1j9EOzv#sP$bcaidH%0J6!EH5Eto^gyq zMtcK{V)8)$Dx)-^#5{dbHW*phJr<*xG%^3O9NI`@RSES{4}X|9F;AmCvKq<>_nD@U zb`N~il!p=)D;UgL+Sdh`S(Sp(uolL71Og_RM*2eqzmPTGOmXP@z)^_1ecf#WXv~UPWrz3i8k4O@+aB5eokZ>|XRj69X*`o7 z*3*rE8)fWhCs_|AOuk4R$`)+`rP(pFdnDua1e5@)13l5Bqouc}7h%_d{wk@Au=Zl{ zk42#Nc7sqcKjR4WY38AStTFCXi8u?5iGdcxds) zNDudz)0x$JeA#Q?$g{WNLB0?_%D1CUw~rU;kd-nZ=jOtv5I&fPEi{^RYgZpx0CIcV z>*kh58HLXL6*=+HgxW$YWVr;R18Ncb{aK^!y_n4d|5(3g0vz;sNuPNa zdM&de%z-F(&kTx5l|>vUz{D8tu@Rvi6?Q zQPqrbnFl~)2dQ!9XZOcrDZoWEh7 zFp*yHNu%xbKjn{nN>MdX?WEFRl(DGF){k)Bh8kxQKsr4Ylcz%TWDsT(IE%GW+xBRX z<;{+~3 zhzsdO+hpR}}+3XEx{wOD; z<&SX)C5pXqMuc9_J{K`B`n$Nz>Qzr2!0J-;v-WckMi=S}SARX+$58J7d%XX-?pU5c zU;3+g$zNF-QT%nwi);rD5?QjQa!`@yz9p%jCZYU#! zi~fokmr1;1#l>Q*qn-c6x}yhXvcL1v|HfAsMz8%909_sD%H9a&S)Xq||6p?(lnz=0 z&gsxLF&239HOd*Sj^(I3XTy&9&r|7nECM~j0skRwtj6-ze`(ZCI(kX_*^0+YMqj7p6zz9qY-zz6eas`v_Ens>2R=jd^zdr@&$9})g2!^QXEx8`E#n4bDdUoP zFlJ`dKSl<$0$d9~&qtqOUWeYwRzOf2><&f`^p(G}cm{O_Sey;)0=2+!vuCDAUn6K0 zJq>FTFNbJP9cw~n2X~goe=27dCB0bgENRq*Ck}b~vUQ68&V#(UHok-H{IwQQYN!|V zAr`k#YfKw=s;00%iOY+E)WZz|FQl?Ye0>om$1nApR8vf29KO^eV<|K zXo-J?u|0f`g|(kQ{QrNQ?5}OYYej{(XF0hf<@S1*=c&z|stl%S^eN20m;qz&Adx%7ZnUEO-uYhK~v6x+(My-tR^u*;u$+2v6wq z;5P$>(1XD!fPVM{Z#-N<*!Zi2TzZxb{c`~pTCbUmqd3d}4e{jxKEyo=uHutF#EJcI z1oBY?=hz+r*HYd1a$ywW#r`-SMV%p~g>c=AwIfvsnc+jqm}Js`2S#%Wz{Y382x~mW zk1L{ufY(DON)9Pafloes7rgO!7(5DvFDZu8L2{QacwmhWKuwnBLFH= zz@B$9S>YTyA8=!j5kOZVr2;V_ci0o9QV93)7cV#-v1Ze&j53r7Y8h$qLc#oxxEUQN z|1oZO_)7ugKL`Fp$jn0iOb7lJBM-u)Oygb)M5@yP3(|{x zdv)HPUX=Wwb#Nye@Yoc>LhYbDa;Ow6AU`u`1R=32I3BGB?K{maK?ajqH%ishm&uT= zWT5^=gEpDm8N5GofqadnGV@BE$r&j`J3)+|RT8g`5hv2@p$BaiZOP*aUa6p$Ati_j zb&Y3;0X+dNDGy|d_dH(6aCr1sM8|rd;<%3T^>~Y?pJ&{^ix5mk9^44q%R5>J%92rt zT4vJtd$=rm{m*~rGmzFco_6yoyyH<^zo0xPHXe1!2Q9>=lL&AIx?U zlPCy^?U<=KlcXrHFt|Ayf6Oob;CJ#*@K5svJnYUVzi~y}SKJr;7JeJw z!avSG!~M+t!d;Vv!*5KI$s^=(ZVcDP-QfPoeaC&neao-nU*R4iAMy9{P27*%PuzBH z2QP3px$n6j_y}$kC4M$6n}<4$Dijf@E`K;^B?ga z@E`MU61nOos5%6UKm`&W2zZCXzWAx6naqY!ufRU{^W;-Hf}aIhg-%y z%x&g&b02eGfcC@qL_Q69;>Yt=-p1ScCVmmW6gc0_@8w_Q5AjDpA{Y73U{}9J<}cI9 z!el*UePofcXxULinjy+6i{o;* z3b$M~al63kKj*&YJ5jmhgIvb7lgkn+m*@EX{6YR@{#DS$Wf_qvK`uccm+rD&x8*Vd z2$tt`E885(skXd|NK1JqgI=xt=fdJk;|j$mLY80JmH? zlnV#%gt&DKJ_kWYWGjz9z6*#J?|{da5jt+C)!?f!0+{;s~2b1VB+=B<=lLvO|3 zintYiE9{o$7Q96R{xsnK2!a0H`ux_lTc6yz0Fck#dgu46*MbPSriD)+eEhE-y!z7B zy`H`uk5@jt(wUIY;KTkdAGtE&%8JVeuA~xj`5E{;efi1D7cYNw`Gd>w=8Ma3Uw-rQ z>C0;`wO#u0(s!2^UY>h-@a6c+rb|y=dg9UsLM}Prv*^;SOA{^)zm)Vz_lv<7l^5j~ z$;ZEc4DY=7c=yNSKic(?P5BJrxDb#_41Df}PdYaezVC(4I`{xq?kFF}Pv#$DH1RKh zcf14^@F9BmB>9}j-ao~blKWLv^NN;Z?jG)f*LACPO@bcp`HLHzfD41n>!2V?+@ z|7*Bm{3?jq4v78``?;muV-SxA!<$&{Cf`D3e3Rrs9L?uAQozZ`XpScqPEN*fDsm6! zM<#JvGMV!y7t%CQEtmbks zgOF$7y(&AnDP%i0mF(t9$sW!|_HyOqIj)Qx;Ht@sTopOW)sug4jpR5tgS^5ukrP}q zIm68(=efn?Lv9)Qh+N`Uk}KRQa+!OSY~jX|H@W#_DEW@GaQ(>|ZWMWyYau7OndCKY z7CFVuCa-g?q>3|;ZQLaCJXb+p;%dO|%lPShwL1fS43_)>Kb0@%s~|Ug%3tO`=F$W$(nSh*ll%;`u87febyJ+VP7DC6!TGr0&diyJ^5<8sMbE|09^^2vH`G}*uv zkd2&$Y~l*Z6WloRBsZQs#Z4evxryXy?jCZQn?v5<=90I#1>|jRA$bQP$-CSla+bS~ zyw5#IE^-f(PvGr0pK_0IztT!U!a4!!0jwB)fZ9ZWsw9-3#P{HP^2Pid$jdwUmHcX` zH(uah!AcPSZta7*2tpG*Y4^nuIS=uS3ue1QI=mJIuSfp+FY>F%{o1A>zuw?~{Z-bc zlP}S5gKze@QS|FfMVF{={kz1L2c9+%a%52uL?b}q17)2aO1AD$nngp&G7JPd3X1xP zuy}<(Hf$ub$bDofSxq*OC&>=-9C;DSkQ3xBC_^rSvt9?4+~5eO;hok#CZ3mG6}AmA@oEDt}%6j{JT3r}EF`-^zcMOA21$s|Z$vDtajTE20%i ziZn&8qDXO%VydD{QLS((S`_mX_bVP!tWi9n*sj>GIIK9XIH`D3@t)#i#b=7I72hlV zrT9%LR|?7?r9s(4*g~T%W6s%KRPRR2)DraG(oP<2`LrRqD?FREKUN*_O;V4pCbZa#f| zqI?p4hWeO&a(pa46MU>b6+Y8_oIWi+_xU{Jv)1PcpB+AXeGd7Y@Ojhcg3l$NuY7*= zk$mO8e!d~T;l6!*qkZFiQ+%_0i+m^hmigL!XZkMmeb9HM??&IJefRht@ICH(#`nDM zMc=Ew*L{EVy`h$=1$D5xi@K+JfI411Or5D7tsbu~QCF)Q)C<%r)Em@KtM{l6sE?^n ztIw$~s;{ZPQ{NDHAwUQh`U!Eu5Wy^r62=Nsg-W4LXb~0)ONDj9cHsr#sBlVnNBBVa zO!!9lMfgpl(gbQkHGMRRnp91WX1r#K#-^FBsnaxSW@+YY?$<2StkkU4Y}Rbm?9}Yl z9MBxmoY0)syra3Gxv2R}^Ofd1%`bk$Pw>0T&*0bHueV>MUyNU}-!Q*4zma~U{l@uC z@hkJI_G|Q;?YGEph2L7gr~IDw+wHgC?;n1z`@Q4$zTc;QU;2IL_b}^G zduaP>W3VggU*mt5ztO+1f0X}V|5X1`{)PTi{LB37{Ac*j_kX~DrT;qrt^UvY zAMiiwf7<_D{}22x`G4X6Pyb*1Zw9CWv;mz1OaZ+EVggbEasnm>lm*lW%n4W)@L0gM zfae2_2fP_@G2qJpF^~@o4D1rvKQJNC9GD+CC2(3`Q{cS7#eok8t_j={xGV65z{7#B z1fC9jH}HeNOMzbm{xk5Gz?(s`Aazh+P^X~qpk6@(g5rV(2c-sO1?2~g4VoNe3#tlo z1~muG4Z1IASw}&M+8*>=(1D<%K_`RW40kIVb^;7lb`Wk(`ex`oD{sH}R{c8P2{Zsm#`seir_5aYH(!Z_0p#MaFP5+Jl zC;hJ>T!>GIe@IA(A*5T#ypWS2ABS8|fgS7c28fhm2fR-OUXl|Pot6%VXmd&wJH)U< z96KbiLlQfrutORJf*D4 zHY2UX3RI+(+FjNXcxRI{&?>liY>`KoFUC%Qp-r1K*3CCZ)(xzWG3yT3@hW*+RpVE zm=vby6yy@L!mK3)xr8(15)O>Z6nCs()|<-4rLu9UY+P!h)$97vNl_(~rV=j$B~&pb zw}~wEC@R_<#lS~plv3BX(K|LqHoV&mB9`s;FiKV`qb`+Em&%5xx_!%SzKpswMqOH> zjZs(bC8(T2E^iMRJT|u6OIHknii%30u3zCDNoj~-kYiFS!1dw%E#Ug_MhgtGI4C*> zi2|cx=9$I_PD`z1WVjEJrPDe<1vgKeUJh^ls;Pqa5LA}H%MKxaR#A$ofKUoDmYGs4 zQ&cR29Lq!z7h6Mz)OeVPiuU+DBR7tXic7As;u}Qag(ej?dpok@GVFhL1Lj-qgy9Zh z?kJJY#7tcz+Du&p4$1c0ZjjChOJ_PtXF4)79hq@31cX!vC7PbZCptW|N1Nl>;CMDT zKEp}-IsYKDcmxW5&Lok*U?;@7JaD3-6DXpXXa+8UflFYtBqzd~nm~E*`WLD^<|Y^r z>i;YWbUaWhIvyO*!{LA)4hOe~GdY_R>)q~fTM}kQpP3P1W<;175gE~q)ZrT`gN3f@yAV+7J+!5UAZm#l)jw!hxE2Ogs%1G4V)Z zR16g%91toTn0OP}y(GjD6_bSA!U4H}0}IK?W^1I?N(qG{r2&p!lHr7k8jc>epvmM8 z4Jvs!qU;OdAl0qCJgRPb1#bNc1$4J&jaPBi+-;a5qvta8f;RQax}|0ggL{ zMOuM?cA)}J+{Agq1qFx!1AAgs+*JXdPOp@~ zYuH!=UW-T@&dM3=2*Iz0wru!jRN8`9T(M3lq9_`h;oYjJteEI%R8LHFOqA6XSpu)g zv%-s39hJ`Mk=BYPaCJr`4#Jm*;)@>K^f~Km;RRl{NIW8a^hoK$7Nw6ikUnf6ee_7_ z!xp0tTa-R*z)NNzlG(~!v@1QMFK=R}K$pFgHsSRv)mGY~vcearF^c<#PLs(LzrdE!bqVV2jcMCIn_?i^L<+LXVUdY*AWh z18Knq(n61v7HlzEutjOXhL@JxXN(ql%4oqRqXk=bM`;_;QNoP zRq)m%dZe!vn?akkm6bJRAXrxu42%Nspd44FwF+Jk3YT5TPZhj(7~jB0AxB{z0%uQf z)`J7#E9Bq>R;BeNSSLUzh=o^hK}iCy)1v3eQC5e;-dJDD&SL0Usl5^Fm6&)s4~&UV zqafpHy%Lic9|Q03vX-+U@wDKJiBDx+QWNRDQZ}5{U@#oB3LG%2KpLTE3DNW{F>v zOhQ6RmAx6>FKENFs8~!qaA3KK7IaZDbS?)6mQ`q77ZpS2OmJXnD2*oFm^4hLaFJ%C z*eIIQ-~gcyxr7-TO>c1UUZI&THY&z@h2n;22b5%XtU!Tw^Z>?JIUgyTa&cu9h2b2Lz^A%xbfhfcC_KC8xL)E z9OK4=ciLGEqIKH|ZFa;0$#H2Q1s*fO>}mnio`pCUmTMsU6YB4rzKdTi}f0OJMlu3<54P{t_6z1conx z@t45xB{2TzA`J{+{3S4abOI6+pUC8y$nYgH{t_9!M20Vs@t4T(B{F=83?H4p02GEV zk>N{Z{3SAci40#NlV=jcm&EWTF?>l3UlPNY#PB6Cd~|9Q6Q9KJB{BYz7``Nik4~GQ z3&TgJO>oBWB{O`<3?E&-fjWiZOJ?|z8NOtO4`#0Do5>7cGQ*e5@Fg>R$&9~bhA)}% zmyGzJ2EuW0h@<}`!vFT$`@L_y{D1pjgZRU%@3;VbTp10&7Mlpa4ckLrC!fP3$6Rg! zx1R6JkAmNE-I4{uZ*>O9M#@TMb7han-jaPRyCe^k50GceN6Ve?knWKDr2Gx}dHEH2 zoBXCCL=mnSq!_8Ffd_DN6!$4sDBe=Mueh%GRq?x0sq|Iql%YzO@-gKW=Ah$MBC_iG>3uG2mR50GBc9@D<2eM@@|9w2?I{aJg%-_O6Re=IyWO7YKx zM@JU_@&1$j?fx$R7XMcN<^HSvxA;E~kB(0HzvKUr|7ZT!{eSdt^Zz}74+wQ5WQPGZn?agaDj z3c42Tz>XGI7{2=fu&Yod+)%g%d!Dl<;0pai}=-ogc&mV_P?A z(9HyuWkyM1Ve{VO#-j$6ASSKR@7%Uk)Gjk-s~X|8^d({CO{*Ud7cMS)Yx~*IW7a(q z{Lrp3QE_6?MzNEj>E8PLjDr5Ma_`F3t2RBkZS3K&(}!OYxi#VO%96RWTN~=Cj!X#4 z9)FL-%?j6wgRh?b>e_(a36F!LdQgr>~Q zNo%%;OW}5X^!JrwfS4x=?}_A#VSA)bM&WWu+ZeHj^o-~u&Vb{LAH+>!kDED4LF|_- zChGnb(AS{*c~gSYQomyJnq|vZJraKJmQDAs4-4eFQ{<%m3NiJDQA(2Xm4nyzU12sZ zQjQUONu2nCLP}K%x;N*f8+7OAv`v#jRd6zEyke1ZU-^`c7(v2c1#R+z15<(5g|;@x7Zep2P`cf)m`&pE&E**#A(dyGOr)s6M@>%s*6 zsuinOE;l~8U~TKn(AL(uP0h0(S!>k2pQ6@XmHJ2;{kT_(KfZYUg+qtxHdL%PE>r2= z-@azk+8v><6zob(&o3`1-rTya5&6Gb(^A!B4b>jmwde5R@;zh6mfOaU-(@=zF6bwY z2BIgP5Pj6wr2vI^xAM9{t3P-`5u+BS&!087#ctbI6jn5TO3&8t%gXI5)~sB+b&vH} zm~bYftpc>yNBmvv1L~`gdWe0b-=#j_GCv-=@R_JmTkmbEE(+3I-CtBIu>UD=9BGiK?Jvfh`FPXIr;H;+qG+frZkP~e9(VAOUle<-8BY!glLksgaI0`3`9#`Jr(WH<>kztX>)i%HUvcE6`=1Z{=)}vf zh3mdNY2B4&)P3LDbpQSH!*#nK+^i7q`c85xb>GjH5*4~HTh!VEtt)5E3azVbowUff zDogRhvd_S)_Bl6Kt}+TwZZ1C-wtwHw&sK(~DeD%t&TXly-&GVg#abCV7o5jr%2o?v zpSCLf!*d>KZVWAUv`$-Kd~90z!)0M^$3JZV312?*){j4CosN&s%I?wQ%!te3*W^u2 z>rS6uzk2=p^|Q0Ho0^-#g~Xd+@LtEi*-h0UG>F$A6m;s-AUb|HB6bnD9D__~5RGDI zahVt_=)oFerBsC&08SL#sJBQy3fswxvyOy`BR>C73=bDtbJfB)weC=!bY9tAt(!SR z-Bzg7HJ@0&Z||8=27N!ZSQ^p~xZx+ik(4)OYG&T^r6-mzU$SJmaZ#?#np*86yw}F- z#e$o>IK1sX>35|t+K?+=)~|eV&8c-CtU1$pnR4yOb$72BwQ_Q&Lv8;0M-1XfrFP#a z#ZSt?Vkd>v1qiDZsW)(3KCl)8ih22R_p=cr^gRs4*?unv0E)jg*V6ig~O#0@VEtY?(A}D zCYbAclz|ieQ9YEt=ZWJt!Kke$s3y2Kl$Xk^_w=WYpSbjZfXE?3i(Ks zpA|y{{R!n;yP7PP^6C-cqm^yE^e?^CReVVC`p$i?eHkhyNScF^$td0Xn^7Dt)|^s` za;Zk4Z54wdfN4Y`8o6U)w3sbM$;3BAAARNIjn|sPpWCtXu^nOicQ#rwiyMl=#pbp# z`h8PU_e6wAU8OLImzt$!F)UWpiGd>bk=RA-5_?i2#rZDl)NoP%@X7seh3(x}U%v(D ztSwRt2e$9rzkmA9Ny5>PwuKM{_9(??+j=Q}x>*ikV1-J0_GT{yxH_-ge_XLlx!3;+SIW>FTp*L(gtId*rln;4#IBAtl2k5~|%P_E4;{ zH>{WxHax97d1Ck?u%Oi!#iTDev9G8+FA6d^{!2gR`3a|=-LdxZr;JOLE2`{mA2CTQ|(BUm7lj&Mqv?2o;qp_3PHJePxBws%o9nGOsCY z#+(&v!nOL(AV*&eeapUQe93gX&AP+6%eZ98;w53QR#wz()Pi|FI|tJ|gy^*fXxFMC z`itog{$)V{|K6KWsSX3mKYQ9BE^Zs9e`U*t&1*I;nzPC%sZ~vLW-e+Dvo~xy5iV)( z*PD)Kee(3PYd3F3UaEnYPX{XJPE*{ceA-dHswymH#7Kz?*Nz$uVQ!>a&@&$zrmUXd z(r68{wrt!sKYUm{+{E&teYpWKNPJ!-((_8~aJ94m-0*rxTM?*jTia4;I0Wo|YN_-w z!%i_>%oNiFiGOkACnxv6@aD^ry3N60a7!__iD|C91tF;XFg zqVYv~&$P-REA~&i7ABk&b3yAcvOm$;3J4}hOfZSe*z)y*k{naF;}hIQDV@o zJ8uwzj)Cb$h{J^wAz*m}l<&_H&GRonNPk%>+9~-e-c#-reUFJnilxf=!)8h5p`p?M z(Flooh-$1<(Ub@hYWlQLtWZcpfEnp|iHN}JwPUB(e;0I%oR~vyk!y2^Nz~|`783-K z^cKl}`YnhbtDb!1kyWe0RzEziAzZpDhR`dIu388ExcT(fzr@p(gI$W|6?AuDhbvNKyfX%kGdT+Sc&k(Nr z6;I(RUV&mTKzy^mva+FJUeQ9I)Q?r#8#DD{59O!m_DW@m1bmevt4jIbrk`Y4F z*@Jseotn58LUPHdQ3p#{NM5^T%eu7?l3Se4<`xLa$F`?^8g}Ls*vf(Mo(C1rjMC*>aT-sNJ9LMl`) zmtqvcVi?;~%o39tVXBc19+NKgm6E~*ao}|hqPF%62#LaZQS}xlzKvp9CqRz-9TJ?r zmqA!(*ajNjrmQ}!5WwDEQwf{i1Ul6Byc2CMoRpb%qWF|?>4S@xhAkrC{cgXAhhj<^nXqW6@wx!N?m$qPd8^6KOd;rwsZHkm%@(ksx1&K z7#_ng+49P3Tl$ zV8sxgIhcg4mWe|Jy!td;Z8Hi|+|Aw3sHM2y2z(zEqYZ*Zeez}xy%^U;F+++|0zVfG z;JOeo2Z=%b#ZE$%`W^5BHJCSqQ!x&7ZW803QR_CL-|tr|!K=eT>PIULf}(NOl#;wq zbY`QlDb;ZJJ>guc$OS58iU0UOCf+B^{zV~m1?xi34;Q4`w%yV> z0M)7&q?aIoLj`o;9;kj^I(>T5i`m(eCTAP9*CmbOE2TE*G=x?${@l^c+fNuLeyXUq zO`nw?*0YBo^-4~y9y`)_xw~TL{$1-2gdN@{=-Xa;gG!n^O9u?Ip!{l~A`3W*v3qyQYLqnSzD3 zu&JSq2WQjAim5p55{*#l0s&I(4RTd2p3}3yBZvy|oTPv%;hdN+or5|f45K4BLEF+s zL8|y}YJ+fds!}_(dGnTq;X{-o9z0;V4w*SLNX!>2EaGqpGf>;5w%z*pPa%X%I8g*x zLOJnUF;R9Tq-`daik-~w2vWWnD#)aJ zK?+ihub$8}Y?e<~5#s*coHz@DTw7n!2xr~Z5Za_A;uuKIA7F0Y4L?T~QVe1(xYeU# zKk?p1VYT6~AS!o>THywP96Glpw1xS5Zc9{JSXx7G2jRorm;;81+X;xj5xYM5Yu%(3qfMES}GC;>83*Gn^VO&Ky_3p z+{ig+5YTSLqvBm^rNAu~L(kCvWkO@nlVZYQG2}3$)AuGSw(MKKd{5Z%{b2SXo@4OV z2zS39d4Ry?7gz`6R;vj7>&(w_+$KVvC*0-`a)7{&67EF;TNSti{;*oeo#M$$gnL5< zdx~JA32b11?M2+%YS^U1eWZoWgWT7?u(gsL{zWh7Buyq%9@RBeN_B<1wz}HYW5Hf|xMiH`#$Z~s;nLKP~k=4sdD6A$@y_%Tz}Z_bvNuc9?g|-bzC#I0d~FV_^y0EJ{C5oxcGnY zr}(q{SFq(I61JJt$exu)$%o4=a=Uz{e2ILU{2%hu3Z25KSghEh*aaIrepSkp`N}fb zy0HjWnV(m_tNcbKQ*~91QB70LR6V4Ud}4iSeUABj4(rNh-$vLB@u9kxdbau(AxD@j z)CzNjmBLO~ExsgN5q{SAXu>p+nvoi-#-&-Jc|!A&=Dg;nUnp!hnCREy_nhA;ze|3S zHe4I8&DYjy@6$e^ec3v+U9^w0S5!# z3-~9j!uElc*XF?Gu+sW!;1&3}{#`)>gN6l-4k`|s8MG#7Z_x3ev+xsqNf)9Uq#L7~ z0Y9xj6x=JgC3r{hzTlVjoW6^GlKzbTQ~mcLeL~D3&X7eR8$$MloW3jduE}@Jxa;A& ze(&VpX?UmcogAGObb6%IQ=RsAdZ)9hb4cgjol`oG?p)mY#m=9FDnh4*&J2At^s~^L zVXCm8u;F17!xo0E4BHy^V%QsDABKG$cB6~BOZP5=yI8tZb!qLgyvq|^Ug~nF%T>cr z!+1lzVYy+4;j+=k7;BtoTyH#X{3g6t_|))K;m5*%hTY4VurK#Q*MP1wyLIihrrY&y zH@o|FH+E0x{z&&Hy1&q4V2_j@1wCv%8hd=!g7(x;-2tIq>{R`q$d&+C1z_D%0Qrf+56mcC2+9_{;H-*5Zg>esnnVn1iU z$NTN<_e#IZ{l4w5>>t@br+-=h*8Y3?pN_aIVpK#;#L|eJ5${C&G9YZgkO9vPI5yy& z0hb4S9~l_gCvtdXUgYFRN95wjU6E%ae;ueF7&UNhRPQKDR9RF@)JsvnME8&05dBp2 z>F9T(+hP)9#>LEtSsn9Y?10#!*yh*`ak{w3xQF7l$GsBwX*?g_B|ahE5^s-R7r#IL zMnX!$q=cq~Jqd3me46l6Vo+jI;`+qb65mU_l4MG{Cuwog+N2#xhm+1F{hS<}9G5&H zd3N$M$!C(k86+DNIw)yS(V({m_Z^%(cLHpT`9pRM`FUu<(CI_Z z4T~8zeb|ZN{f7@9K4tjq;p>MV9R6*}T`9v;s!|rG>`S?vYD}G&x-#`x>Q8CC(#EGf znD%jcVEU5urRl5EpG!ZTel`8NSz#VwzLJrUk(n_)<6y>jBjQFRj3^&bIpX!q(9DR; zQJI@F-_7chWrTm0H9zZxtRq>UW_>@h_ek@|>X9o)UdfKk9+o{WdqQ@3_WbN6*=w>l zXYbBFl6^M&^XxCPzs~+9`=8n0XaAUeGbb!(U`}<;(>W(|u8ztWwRP07QE!dx;TU?eF%RI{imWM5CESoH^Sl+Unw|s25 zV)@GQo#kJa-wNf0>cYUn(8BJ8g9|eY^9#onPA#k~tSf9PoLhK*;qt;Yg=-7f7j7)v zTzI~yb5UwhPSL_K!^V`3Suy6~*x<1v#%>>bVeALv)Z=2u)s8zgUNJsn{EYEmOh}w? z|Ad1R-kb2<#NiWDC+?c~#XS@5IW;MKQq!cLCXbqYVoLRt<5Sb7uC|6)4-^kCezHVS zGO1)*Nn^=^l079~mll;iVw2etZM$tBmHC!A%U&q^xa^bipz^}<$>ojZkC&gRkXH<; zsHu3o;##G$a#-c~%Kg()r#&-WH@#u{{^{4N3ab`YJyq>ry`uW%>aS};YEo*()i`TT z)%;@T>|yra_Eh^s`@QzZ?Pu)Y){dy1SNm37U|qMm#Jc3VjJn#o$LiMAZK&H-cckuI z-TAur>praeuI`pY@3_m+#}VU5b!0n6Ir1E%9a9|e&*VC0IhHuqIbLwQ=y=WXf#XZZ z4^GZ`m$R!g)|ukWb{09|*IUl{&gIVi&W~Kau0&UftIE~jTHw0Zb)V}2*Hf-Dt_!a3 z>jUb0)eomR7!P=Bocz50JPs2idhMl{$O<}^Iou&3d*hAWMHHDU(W>xcD&C$&{&EuOJn^!b%Y~IoQV)JXw?>Ap*mRf>Z z!dm*a3~MQ9DQT%`nbWeQ<=$Rh zIs3!epU=M8s%Y)rn$S9;)!I6{b#?2rt*2YRYP~T>J11gJ=A5Z>TIXz>b8OC)xn!

      8Wc&+}CCU`jEs&%D@qL+549E1WlFUd_B& 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

      5F3@lk=wUo4h}Sj4dZPqpjX68^CY3bERopSoeA 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⋘kI`WEq$ellKm7mq2TD_fz zAkvd7L6biiX>xbwNp|Jlg?3ZlEIxUqgZuGcs!aF)D>jXaf^<5!(mW}B{K1p{-#GyN zciiXaN*xBRxju8B+lwncB~pls9o1CYx~-c6Y}B)U zUUx04e$ussnCs2E^~<+y7F))NPs|BNpcWpb6J zwz@LK^&{a*ToTkTvSK9#_ne7Iw<{*y@W71BvY7ko)U`vqT5h#GOEKwxJ1&$SIR2K4 z|Aj%OvYOsbPwQs>;d{F69yX`~XV3d%-x;$fIb+kD;_rKVwyza@F@BU?-0Sf5 zTi$hfY+=^pt9sD)sHN?kr%bF;VO|;U%^m$`?@O8EInHBI22clic(`r5DXwE!V#AU3F&5+yRA6F3s84vPnSw zE8Ckiua>;R@_eN#XF52Zp6f7hcE`G>8sB*0aV>0(V_w}?Rc_{*KRdddq;Ib{&pmAF z^FI43$3?07e2=#GZ+6Z#Zbh>F;*_I3VkY-rnKSR}#y1Q04m?q@$Kk{t{+q1LyH2yR zZ_=~-;+Zv9Hkof{vRqdC_<}WU=UsM9lv-dk;5lqvn0Qk6eC1%Po7?;NrO)}?)F;H^@2y~u@+K9X(G$)IC_8i z=r4;}1kJzJJ>qmh1=CPn#KW_-)ouG!IGa7FK7Vsp=XNz3bO{LrtCA3CzH@hcLd?C+{_~534cErCaJHM_ zG4jj2HI`*w=)G38|2TL0fW4}OOCttNiI*NayUeLg!PDyZJij0G4)ol#f7(RJSibzA zst>njR2ki}M_K>*=VvwxJYhE^rFwb$>Cs=gxwk6SYH;IN#>{W>l#6GQJ-$uI6~*!fkLdpW+zM|UT&Fx}XmmBVs1wBLMP#rOXS7EdcR!*<$h zCp?O~#++OnEoyo|MVii#|PD(imhnKgjsoTHN*N-f0E~00GDZ0ssI2 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf new file mode 100755 index 0000000000000000000000000000000000000000..5cb8e5fb97423708576a22c0496cc62aef8866bc GIT binary patch literal 84636 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 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Light.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Light.otf new file mode 100755 index 0000000000000000000000000000000000000000..e3c0a7492fd2233e1328ed072111c0df84ed9bcb GIT binary patch literal 88152 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 Z2%EhkErP322FqK>?y}MNI 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 D{gKXx literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Regular.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Regular.otf new file mode 100755 index 0000000000000000000000000000000000000000..40208be604a26af38c4dedb943c11c5a2e45aad3 GIT binary patch literal 89600 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 Vd^)H~a&+r1-Cfd$w_U+7{~wtKlK21s literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Semibold.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceCodePro-Semibold.otf new file mode 100755 index 0000000000000000000000000000000000000000..65b82d105c5d6cfd4abaf63846ad71bd650a2a53 GIT binary patch literal 89576 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 Clv%m} literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Black.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Black.otf new file mode 100755 index 0000000000000000000000000000000000000000..13338c22b5b10c678c960aef42aa3995ac238a7c GIT binary patch literal 98472 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%0Di9AI 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 LW7(w#;t2Ua82QPZ literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Bold.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Bold.otf new file mode 100755 index 0000000000000000000000000000000000000000..8998f3de6e545d65c4a7048dd56e678ae3bf4f38 GIT binary patch literal 104072 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 E0H_sezW@LL literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..071d0c398eb8a00c9533afc192952cf4d3e2c8ed GIT binary patch literal 101848 zcmdqK2YeLO_BeiLHakgXl1;K<10?KbKsq6$K&T3-B#=fDO6Z%-robi}b~lX{nxa$- zKB*Fl^xmXOQ$a)oMMM!Pc154%JtjE#_@6U(hfNfp@Av+{@8|dV{m|XHbLZZ3Pe140 zoqLm&mzPC!WCqcY@d@#{$@5z-*-e;9{~(0)NlZx*7mRxT7eWT!C*v31z`)$03IDp(ks(a`O@#RQ zW#x8@86EnF1&(}Cz=uBd$z=CE|dokV&T~x_{5b!g-?pl1!&(E z?%S4>xoQp+rKb_5#bto^X_>jELemRDF{$vym7B|~%aa@IaKDR?e&!0h)Ae9Gi2?jS zf#)J&u&IyZvUumkaRL4QNi>?Tp@y9A_rOQJKIrtX54{#?-U5DT2x5Z&pr7Wge|<=Z z*B*F244!{YPCd9tAL6&BCn4EH(+i4T%$w{{q9uf#$BuaL6B&$GlEjQ9F^mYcg11KF zrSWCG;Km!;BTmY{_@snnrZo{|mi^%Yha)nb0Oc3(A#;;m0v8c*BBTxT^21(_<3sr1 zcK~_ZU1o_u(%oeZX-9^;%U&dmOm&yFqz`$?UFJwLa>-rxCgaH$?y?UFWs==xU*gA% zbC(6ul9}i(`v<+w%yE}>q-}62Edx?~u+3d&h!9-mE(31CGu>qk@eN)8G%;SjK*8kT z7u{usn3@H+%Pa|L*416skU`B7-DNKl*KDD?tR=2yr`=_abTssIm%Yge!#H=@hjb4K zcb9!hi;!G*Ss*bX6WwM1#}uqW7Ug<_h^Y%8@yM@GfQ_C*EhOB-PuXwntiq`BZpRzmXcx{Hna z53@R)rS@`>!pY9XLR3`W61&S{FR#M8$evMs%ght4c2`lPt+XH}vPWc(Ua>K~A2pnN zpi-x37F`Z=p|#BHm?+wd{tdxmX}Rbsv5G^>OM!eb*9BaF?&XEu><-ZmPaLAfURmyP zlvgwu9Gcr2TVlV6Fs;#gl+AC@u$lCu*7GlRo zLh2MDR+qX;9!f_{v6s8VOz<#b2g-mBk>dX}C;WMTKCc8Atqh)PFLG6z9aa%4Kq;){ zPGDtac_Ag zORKD65o%F|!#=@kaXBLt5S10+66Ypv6&IP>G%aQMT2JX3%hZc`;r=3UCkXF1NcxC;G&K zTC6N{T5VO}Eku-=GFSwlYq7x?*s;781mP&HqHIU9fkPH^IigblMq@)ntYrn(!a^)H z#lr2Fl+hF~fZ&{}`MDWf2w0e1%192k3l}j10qb#Ni)16Vzel7I&I$`W&jH60do?JK zLqQfv27Db>o7L)P-g~#svg7RMZ`io zV2y*BD=L8d&{pA}-BPJQQ8W@rsdOT1(JZKN0XW>0IvNp3^#bz3w9K@;w5-frf4)r$ z>b&Z_+5j3wpiVdlLULLaD=8|q0SXTZr6LwRt~?b4Z*_EZc6t>0s74lGkppnYScID8 z6rGip666Tbi5gCI0|ul~Rv9n?RG}0!%I(RhFx*rtHmGQM8#O|EVnAamkX2Of&I+r= zt=M#U(Ol$mduMR7?x^I%;D>w#YAF0H2v?=$W}E8g8be1Op$h?jfj$9*-GrU!0V?d} z01ed6DK<8xKj$GGHAA&RcZ6s>sv>@m`ILe8K}9wfD#qoqM}Wv}Ru`y4ga}&TtSkU` zBAunh;NHL&;6PR^fqfT)uPno|%W5ep zFSUSdsvVHJK(eCdD;1!`Adu=3JIDYt7wW*=YTX1Y1%d43oQ$;GT(AkTy_lGlnWWlB zw$)Kq>QwSGP*q5UtUw_kP!9eug8Fa_BjBBjtxCi|Ho8Z*7r4NrkrigZq5}K^Wp9(= zl}_M`s0XeE&jKyM3tJU{iVt-AWTVl3gNHa>U zwnC?p9AG~j06-LgM}q{7I(9(96VL5{th(0Ovq-=0Zq7T%~Y> zuIBf)1Wju!)(XX}&6bJf_G-wbiYdz5{0V!J1 zgL0<{iEcNBsU?u%aZ`$az(m%q+u*cqKyq27Q^~IyM@^6gBu^l`Kc-349V(sNOl;hd zwpT(N5a4KHo#0jf=X0_qoKRSlhao339`i8wJksqlAgKiBi8)^-Xaq{4%3ccDev#^F zQ823eQC;=Jv=$6s0iTqXo0uM-mXVwT&{LD?lr1+aC2x3qPO_MmD`w|p4NFT(P7>S1 z=fZuP2yu8?UTW6RJP}&t#AoK^!|Xwf&&(GGr)4HZh{+>hCYGBkX61-!8QJM+$xxS; znV3E_DJ^rLm;n7Uvv5+Fk(LKQ^Rkq#Zcu5-&@V*z-FdprsTjV$r;Ho?*u@JS=sqHX#-R9BA`?s!KLjGC=o*<2EhK17@5=Eln6Y;Pd z1EqLUNbID5SfQLtYKfD$pj-x5k))AwVu7a)QlWgCm1l({Qt4+SHn`@HQc_Gx;0gA~ zfxb@oI7k(IW6NCVSqb+RxW^I9025ngL!F%@z{dvda4Z)*vjH>ON`#=?Jn0ly?@ zl?KxGW+{U1};l%i6Fmu48%1^hGv zCsB50C{KhsJB;|>Nmv9dk#ZMMhjJSVccpNLGDSY3tndyci4rX&-C#5a+##LV2g}Hl zN_dL6l`5?x|0{jVhA}D?ZA${4i6qqx6}8RN;EiPZ{UOMt51+m1+509)jqNHT${GQeLX9hzuL z2ZbO1x9fyI;R$~7fO}M|6D|#&(T+tef zLG!bqfBHiTx|07B{~`Z8lE?;co~h841=l<%rGu0bmD*hR{xdmWv_Z?Ra5_3L(#iXX?6lg zsx`P2EyAc>3LXNzB=yXwMW_Q9T~VLVGDPJYBQxq{h2l}Df1!~A^%tW$Y9jVUNTo_7 z7r_QqUsM54>|_E!u_!u+mZM@(2~cUSfL=?b&C?fk)#`>zW2+S)<8y}sOXZ3gV5`v# ztyGONB4CG+sTe3ln?wBYDPmrx&`;wOjW&pxYIhVvihC9GqWnPnDpGJl?x<~%H|Q7W zGwOLMH!-Tx$XKoTDvM&JDt+h!F#4iC(u~Rp !)L#gmlQYt3YS5TN0N?R9R>N6pI8DLX=F#< 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�T>kZe&r8tZo6BIDswE2 zX~0b#?ZiC(8j7CC?Xd6*E&(&V%nSI~Gte^E;Tsk^b2OgTO0khMC$@JQ;1oEE{v{*e zVEJ_#d_$N0QlG7eQmf-5uk6_w9T{tKKgrDw3JRTJoa!Byc_#f-PIUOZz_sSX$GKQP zw;1?vaII>noY}4wt-Ht?KZLdq;U(uVeq)Gtl!viVvs&u6ZFe{wOG%GO-fUjRFC53+ zrwjsd^klUco*_J6H;qU%q@i_lhq23EAHQ zX{JtsI#&t5cKMp_C?)ABugF*Kw`+t_Bp;BLX@`QBr~Lb`An{4jMT9#P7smB`T- zag7_mFN@=LtXv-vZ(O@>e%MO09a0%yyLp4U+|(U@rKd{>!k*=V=fx6&8PyG2)KS0g zu*3P-j+FHqlR$RU=bmvOD9!lv)c%54^EtZ5sm|&m$uB5! z+vT*wnbw~8A~~;@pVw^kq=B;Tj*hmz(!Y>1$dyY2CW14bKBu$hxV| zIG4F|gJvK^Wy!KovqyK%vN1Mnqw(5~tn=&5I~4QpLSa7&cOp&@T>Tp z{{^1!KT>tB3Xg|lD}oD$C=xB9bxe!)imUxGvJ;(7LwXeB7R+229Bgoo^~%~1y=-Z? zX~`vS;k;iLg&F70UAlJZ;uVXRnXf8eu-d<&&qFiq73Wu?(+gRQV;xW2v?*e}al`6h z-_QlK7g)@b)WO_yUSr9oO~`f_w=%>pbfIOT1+QQY24(3qmRlCNBx;@Es890XaT7hK zx|+6!`fnU#baI*Q;f}XIMW@A?c&5>=p|v$ie$86@jLB=jYzZ(g-V?ohG3& z-kL6{940i-77u(U*y8z-_Ctv*xX$!sEi6n0eztD%`Pc#u87uZ$7tiPc;{t=Qc-_g@?^lamx69#)#nOo%HQRUfUnc%UW%d33+4j3BL5zC= zSJlznj!p3q$;LG+7lo}hZ@tScn-jWZmT{u1_Y`j|ZqaE;He&)pnwDRni5GNNe@lL% z-w30^lr0B*GL3nMcAwqnmM}TSJT1a&ZL}e3ZA5(1rhtH0)1IT;CXWdl9F3g@jp{Ql z*>k(EIdw+N+(3hWaInWT@5p#Bh$2&H`8DcyO?T}jq$5#Uh)3W94Z{;B<|ZbsSP^3i z%;gr$p1Z(e^tY_puwv25C9BK{$j^S0Uw@5j$DX-u!%u5IVnI+R+&Ap%(z>g&!c8Fy@c5I*wZy6gDf+FnE*O;fx*eo0G9M{yGMD z?bHg`Zgf}Z8a(2eMjP)3x5475&v#aT9$Nz;*1VDkZ?d>&|M%YP_WmdD$`iFsIJugB>_3$K%=Z(XdpN z5olJCy>yPB_zD^ftnvI#0xKMZ!Yll%SLhb*J}87PY5A4&$F5z{W#1qXqDTQ;3Z4(& z=P+S{#ebqHsV}!SK4R4dW7;Oa!Dh8TKR?vs>Tc+^dC;AQ`FH7GrrN!wQ9rF3AYoU>`mBcU-n?jpwahB8rdTR$B)$*^*W!krfE zH)EQ?f90(3P-dNdUS{H~snaJJy4?&t@Zd$-?Tl#~Yppc_&T-|u9;51iX7dM~ah@_ObZSZ2pZmMm*Gyt3LGsRik zVR@zId8&P0_xvhVyrL&hrKWV}(#40@hi7$Y-Kk5{_Sqw@AknY8lp5>lHfriPr%8TE zTla0w*uxBD-{&(`=Mg*>-Vs(R<)>%TmD3|naNE;196Vu2nin6s!F29u|BIdbaFNrd zzz1*Qq|ksV=HaJ1^~oH_xlEXW1bZGUyuy7=Jq8``a`_ZDGcjdOsxd8Xb&_)VFB4bJQW%qrnJ1@U6-{;p1LmPhEHQ zHq25j)G-P9hMk)??@ddc?vh~AY=~6NTE*MRd#u-(N(=bed*<$$w`T@b`2qG;$f5QZ4_!h8_ZP_9Ytk!U z(F_S0YE=h*am>=_rBUU{m0ypkHj%%Ubl~6_$9M%4 z_0(M^gC1VWBPF+(nQ7UE8yP1~#F<{hjxjyJ%Q7|W2yOczW?p1S^vqk=e(>1py4i7c zO#Tn;dH=c`o=8!p%4%DKDxB`{d!PvqC12-be$QU9FE(>?CA)ofF=mGfpj9X{!_R(_ zau0@VU!{>0%y*jaUmteak!o{JE#o@FeH^kAtXLUho=}(bPfVScY$QG#;Y>TsXK6Bf z%sr-ns|AnOnA6<;h%GzQjnR?w=0c-%V;2VTS%jzCDo+TSz5A=i@#xcP->tqyMnC%_ z^n*A}DTCK*BGxUOA8uCV;_ksqEh|D-S8~ge=4=Q{*kT~Ve){s}b`ymylYDo0Z*`5^ zN%lXC;$16;EDK&5w761o0XK?w$CPb83u@sOYN(;=_VyyFoqX#pPdE75mK{gtyjt9AeEI@K2Uz?#eN0(;4i*Uy7Azh*V^^0&aHdf0vQ>!-39C{-?BX)DLdC7!l`~#)Ur4`mrc|6>A_`u=JhxY4~ zWOV@9BU|tc=t9>V;E-Oo0{?5k!dYQ~<<(l%r8WE5ORH0Trp$CUX3;V!ZBwvYxVbXF zI+LUAH6^gB7yo;3#~t;J=;}1JQok_E2<`-!+;2XZd=e5sA?x!V@_<75C*wby0)@U@j<-f)e1ziOP?)D!#6&nldxo2ow^YxdH|B(C=RiTjNg2gklX zxjJiWYD%SJl*y?B!1i$8jlNiZcxxLu*UCy$Hq6|2-atPcqzVrt zHy+xHwS+0;PG#<1JW5}5xoCev8IQb!u|?lY#dgT*@1uSJ9v#~eO+*y8Y_@c#Y%~#c_ELBe(T5={iD?9pXrPFL}b%nRpujxVCr*9~a z$GF&@QuL#r?jU=LCyaO~Cy`O^RKzv4QQz=m_$%_d+PKdqX6bfS+qH6=)&6dZrGHD; zSq}HM4pHMMFpS)8FQkQ))Gw!n)#=)|VQ3}0;<6z{4m#CMIjC2SAu;lQESSO|DlrH} z|5z69!%i69Ql3@(8V{lK#Z&PVwBl5e%3p`1TNz5*{Jy8#spZ?NU#gW&;{CcOdfzmO z*^gwqBLBy722=cr**WADQd(KOU*-U9Y$+?c;@7Z^+tB<}=C63lSP{kNJd)|Q`Ve|U zy08e3)YSBS&2%x;s?ff$sG=A}#!vyVx?f7-s66>Lk2icAI5A57rFflm_U_3CKC-9! zb*Lj4UU2}-2#}t{HdhdCt0}$2HdeJ4y<3#m-j{Aar22*SMRi{xV&?l$IA|{}K9i2{ zK60BLF?r`bWRrCJs^8pPF?< zlVeQuqa5JT!7L*E;a3QW_z;2zkJIzqZ&I&^NG|b;vKX4}R&5&fR-dHHlzm$owRxZG zCF6be^tH7=cMr!Uu3D2ctMDU{f(whWaKH1OaYtE$Xl(k zzfkFfeDn!X@yU^qKd;I32QZDfJ?~wj55DJ*+cq<#m-+x3Z!`p1m@Nu_EO+O=0*%-Tr9>?NWMyB-Z;~RwUVD?tq{dyTF89 z*WgO9Jzqy|&?33LkY2%Os$D*O82i*v`>1W|;87e%>Hx4l)D2T4Rl*|;^tIAbcUq~Z zr&x-F2cG)Vh4ZQm5f}e;I}hKIs`yp4I}&Tc9S{GV?~e25I#oZJe;f`N*dka>rKgm! zEqV8@DaqrUT-}|WQt(KD`mt=rw#_KpiZVBpdF(cm2RUoasvZ76_TB?7s$=Z~K6B3Q z0(+JPc3DK0WwFHAUF;fr@4d%{D2P-k_O7udmZ-4>1-l|DcEy6R#oiN9u@mdYs8P=1 zlI-`N*DyRmlQ76dMB*94EY=vNw-(3cLIZ%OMYu>BVX6|%IJ z8q1%;2VQ-xG8d_SJIT9`e42~ZySKG|I|TaLtU(IaKuc?Q9_fShwTEU%2WfJj;qBYS z`o#gO?`E2u?`G)>+^fivD`5{w6AOS`fJ63>QUw`H5do<$sRT>1ZV$;9D|jwe-@(?p zJy}3$h_hj&ifEZ2d&`(gSxxqqkyctyvntpvt+N>McJ8IQY$>ZvxeS5+7`*plZiG!p zl0MO}%c|dl`4TLxWh_QaYQf_H2JGoHTf<$hN&a|4FjrSxmfZ1v-Pr0bweB7u7a!VM?`QqK%ymESGB({S4;_&>GFHz##@J&74O)u) zD(s^q_|V$^S1CQeB}$=!?2X-Y>UbURCYe5%W@cG@h;Xcl6p;X8rn=bLTHJ zPWx3pW6I*`99_lHxb)qoPqQD>^JNu^Q!Sov+KEK z?sIK#tTz|eoj-J7cN$hwwMn&)9}l~se|0AZM~=N}Tr1YFYjBG%=}KN?Mp*ZZFZ3mv z*T6v6yTs|*zd`N}PAc}-9o@bsb&vkY*3d3p!~1pZJaG510Y+`4HME4TPt2AbJ6CPY z*t&Iazjemo*db8^^y=GF@vfC%!Seq%UmL7`f7GP%W7bN=7Mzd|Te$M8wfgPbQ+Lp1 z-M%=_50Q>~MQiH~dB2dT;nDgbBa=2Qp0i|5vQdpSBwh-AjU#;=x1 zo49%N*_}UKJh*P~pzn?KhV*LRQ9sXuQ+z8oF4>?zxxQDEh-rf-hZzsV^j+6cZ!J~{ zfL>YPr*pXE-{_WA*P(l2crT;6ina2KyfH6Hgk^*&F(SC9e(d;JvnCtWFKgn|lKzcelbNRkeI-dnbm7twYqRF_Ti!^OYg10- zSH=RYrN|pSHo#bS{?Rn14i>G{QaQS9vdJsl;Br8i>|@!a`2J=S3j~AJQdke?pOfPZ z!7AN`Giy$+JLft_@lCTi?Pj-5u}<=}PC?l5bZ>BTT$gbXGtQr+l86A?Pcbrv?2bEs z-A@X-1HxBa-P@_E)w5k-vDyI`Jf$Q>ip1jp`W(gS!@vA4Vfp9t3JJhz{=vmZ6GO^g5)Ya}?NJxESB>zmw0AQeEgB zN%`#+qidlSwqPYJ#klJU>OD9zPx@ z@4o+y+?9+{bx9^jJ8_52{iF?PtMy3>Mn|_E*r;kfV~o{bC-s%|r$O|*-;F*8>y|P# zwALOH(8oF|Vnq0eK_iN$RbRGX*>_0`ik3Ow^ZvQxThcQF2H%kni^Xmz{eYNtKP|=j z*n{!O(url#@nmuqA9lMz0FH#7K{xH&Y2VKGliIk}s5bO`0=i%$j4ATDZ)gGk?yv0Y4tO zy7jL9=GCx{M~vToHD~f^$F{vU*8(kz{{+?ss)vb8jBmBNYz zpD!w~i=cSx%U0NBg<4WSTHG zsC_1l#|P~Z!U2n?&N^NiA&qxYTm4^3m&ts(SHH$f9rl=4v6>(Yq>{C&Ts`B|h0{{e zQy0nBD@P@-qgSxQK=ReK=$3iy`k{m8&SmzfQ@4Bf7RJ-EwDs$@Zi`+wBs@B1;Gp#} zn{Z8lOyX|e#FD?V#!X25=c?Dj2P?NbwIt4{ZvJYY)bs|)#OQcckW!>uI%`vFJ*lZn zA8Vox7akuzBbTOFN4m7>ELZ=&!m^w!x2zVV&6XWH>-YId@)?%Zvs~~^KMAg@a^Sc| zkQzvGtYu4+C7E@yJYQ8=XIV2#0Y6K?lGdg9OXTX8^DKMtnle+c9Drn|{OQsv`HcKM zvlN!;(i*tVr>;5J$tzXUNng20L#-;g^^|oj?pB45)fiq8WHt83sDDqkB-wM6o(#ba zmZkDp`KxERNZ;o#MTRWh@3S1?dq#I1_MuDxL!qCna91ZG8;RI#k37xFU*lrW&=SiG zVF|>UTBcdo$Y)vh%uwV*K!YPcmU_rgFdcP)P(HcQk<3KmYAp;J| z=5NoRXxZ-4CI5-ea$a%rlH6j+KkkABOzOTzM;$G#6;-YBFRVpcS^Zq6DJI+)aW?8k znI68oOsi@wEg=U&WtpDpQb=elAP`a#z>q)+d@-Cgs?D;l?z|3NJ0T~1z>TlTu_ z*}r$^?sQl6i{W|Q$(X!4f)oM?7Dc43_>#~cd#QbzUGcS6$G*!NR&0H@PDWZ|Zx6c` zeh+D7lwE5|vdUc5M`EN1YeZhCMw)n4;<9iEePUiK?6k`N-evBjgn4oLpvLW*cKl%| z7A$@~CuxlqnajDv9qror4W1S^F*0EH2>Hs*s}3LbyAgS`^67wHn_ZsfxehdnZz@S*A#DwOSelx@;kWe(!aq0!QZ zlQhw?_C&2&)@6vP8Uzg-Zmp|`wXHsMK~jAgTL?n%cF|liW7wPx*)SUxuP|J;T!3sz zYyk8-LKjuPvRsIQ9a6-|zDa-_29_oS!Ckgo`iV#h=ooHOu`X|Aa9+0T!s%TiO+9=4 zoFF}3W}pQdXb}Y{7w0Q4Th3AG49g%kQhI1P=a9j0nM(gr?I%*h7Z5{KU&rJtr|!qs zDfMNX_9MSN6YLVRQdguM*kY`&2v4LEvD9akvr*KCDCy&)%DhfEi8V>;A>7XElw>%o z+<+?CK&yl~?2~2-`|>(>tQ5clhiQc1-!EUOv*Gveln2oev7OgPk zb;ODH5DA}NQ}a5%#-~$XD7~3sV_rvgF9W+eFYgNo>Ii%xT*&*vE_ILHy-@Ub;dI^)VFr7{ ztz_+{US`N^L$43sNbfU|isrRRLB&l#Gftqbh&+p!Ik^gx^Exen!wgEtyC~tZ8Xb!o zm5$)nBKy62XO-2Zlfvq}PBUT1{GwbVb^pj!}#ts~d5DktI zsamc8Nd^yebH~jdKi+R}WMt2&0UceWq6-cmyXcoZEqPK3CJ?x%5}&oJ2m`F69E58f zf{M0wr8SMW*dg@l(JfnIr793|h^ByfD9mbH4@CNzg*xmCrir8dVq(X)vtR2P2S+>U z_jw^yqJ$6WRT~)Lf6^ZOU=^PU_{vFT$i2rAkZM4zx?I7kvtp;4!7y?1j7j!;a8tKs zq#3I#1}C=a*aBO`BYz^+N>_z1t$CN6Ix)BLAQOo+l-w>$E<%h` z43gZsR52cckSJ^5`WiCcetFHdypD4XCk&}}`A0<^@{g)PJP|H4G)TWfJgBSo!sWb& zZ?Cb@KEhcudXdcu!&bWxq-O{g1R+RMX)qc;ZnptBvrBMR=XLzl%{Ijph~g@uxUXnO z6Lw=_kyyHit*%J7!^^yf^wW4}$hPAWIp& zl{yq_vnkS7c?;-eb@Zi{T~?RkxU3EroY5orniduf9M|N{ek+(V1%fG`D=B$9;_-!# z^KZn5N^Oe$Dmxk&Qo5xX*b3G@Z$zQ18>ozKl!%7Km95h5`$A}5r=|u8cicJet3D_R z?0P#yqA@g(vatiYOkO>^JWG7?z-W!ufO(d`j4r*R;^l zb=?7kpchQfIwRb|_0ks<*l6W~PbO`xF=0w|L8vp9OS;2K`@wa`sr7D5!<}K_glAi z(TTYM(+;V(1I}oPKhF^^i0j0C&8_DS z5P@_hGkABt4L^#{6g0wUVTQ0sxGY>1{*)1!TvlFIOV(2sCrg&4$++M!b(dQ% zzq-6|C9Wl0%euC5?daOwwXf>{*CDQ>T+g}QcYWjL;-+&O;5O84q}w>R6K+@CuDjh= z%9NtgQ`tqiNVx_QvUV!>Dvv2oDK99miSA-av7A^%Y$Uc9JBxF~BypvTb1#dA)5tY$ z8nwn-LU`e?#6(V9`3ahge*shV#z^EAnt)tZf(Et*}L1DeB{ zbDHa#2by0sd0M$vsrA(QY6G>UwB@wbwe_{FwC%K=wLP?bv;)|h&cH~l=|s>qo!Lv~ zCL51Qd(Ro#T2INR#!XL1^sBkK@68{NrtjQ?okik(h)DS=d`fV%pS9xkM%Y_yynA2j zy*=Qn1+Oi*q)U|Ia6pm@lJ%6jNFMdF@mk=JIBWH|T3d28GJ&s7ajkFVkBaMjEX8o@ z^rLq*i`vNZxK;?ZJ2S zQW^6jNo4o&8C!3Y|K0ok#Ci2~!DX;vDQ(g+{fpCB__$z{QY>?DH*5)O!mz&a9f$QP zI!!S%WBT!_yAq@XU#q`D%ozW~5@yz4bR>EYM5Ph_ud zkz4oukh*>QI!LK}_>->d`sj80{0?qjzhh5IRB(@&u*jh}?)Q6@J=Lv3`DRvmkL3flgwm}*j~Ya^ZC?dfMyl?fH8XLe z#`ndI{(MRP&*YejQUJZ(DnpupyQ-_ot)DAQ)=JSm{$dgCB!_d90skaUev4eIdW-`b2EMwD{}A-z+xn+q!wlTK(=-k=;5) zH0b~l$Ce?wZ81If)zRZyhM%>eb+Oeis}gpj76CCq7@WNMp`gKChYbufN=4V6KYvxf zW!3Pg<#_*dJJjl4CcOd$XI4b}4JZ&SMo*rJ!g{HT&Z@iJK;o|*+^{Y^pwn&nU%Oz& zD9Rft#R6Fx3#lxPWiyuPB~1>Mr7^=UO9NlDt*sT}%Bspiz3UjHF%XS6cib#YTEnBG z`%Vs65*slehhpC4TQT$NxAKfcr~Hj2Gh7ck8(XE;@Jx>ZpGh>NwZesIqHg=$)HAEGm|7H@znjg*V(Oe~ zzKg9`nZd<`Xz@k(9_xZztg*T#xrhyM{5Gz4A!#G{GB2JEVbVs#k;5hp*IVmao9H6f zrH{fXC+lY^_8=H;|3+t(m5<62_cv<%AEgqGEbWB`s z@u(N9PAk>TmCxb~m`5Xnm5+40mA+$P^5%e;lk#!HMou1~?-RLl|2IadgW}tT3pb_u zor^hEyK>o@R#m{SCv`M1mT8&XCN35$vyJR~7$!$_m3 z+qOP!>$>5|k)ctM17njDH=rJTw%YBYA1Kx1dmBVuId+>`6~}FAQ{!fg9O>77edwi) ztLA34hLk@aHpB_;U_~KVPB3pGDm6a$w`z+g&E&c9#*j-9^-`S+;5e{Vu!K z{#`bF=rHc=h~p0vtuUGn#9QobJ-H+f*xGyeWYSW5WaqNHe+ugr;+wbxb_-?IEJp$ z)j4u=@O8bU|2<36osP(8zmAFJxVvfpkGK6E)<0o&Y1wvkzt#a~tH{@EOI?zx-@73; zq~pL|Rv+W=ve=R*xor&Z(!O7CvwnTo?};?3sl=;q3M5_)VG^%WPa4GjO7vKey$9*> zkRjR_7n|YE42+~L4PtwPQJs7I=J}Plp(zQ6?SkZ@&_gNaKf-Osud3lPZQN%3YK9>{ z=A+WdUqLvz1+vLsO;>J9-!gP8Sg~NJE)X7W#D&I)1m0dwSJq}10^thS@Y)6ucV*?y z4iLAFR*H%?*b#_a{;D`}IMJ}J3$}GPmt=CW?Ax;tKUmy!^z;MU{f$WmJNY z>JJ%=)|v|I@%$1a%gZ5LB?5c-u+b|`s*a6)DX-*>6l#cW#-d7RpBskN!!{Y!8*m1w zn-qY0q8&y|;_}1B*#Sjt$e6O z_Ki!Y@0|(R*)l46?5N?!OH0zX9MEq_nm7Vq;R+-zB~eLBVrWk#m0Jcm8G2D@Y*;0U z+1Wo^dq*p=H*_PG;i7Q7UIFPH`1-66Co8ukZZ)bkxZ4rj9)rEvO{6e<7m!JASVoP( z_kqUNFl#lex4TIu<8upk$QUkvW_8C|mKqt=FF^fQDD@YS zyq@AKgV5+`xx^9ECJi@k#=&1H9^XUp5$Xv({9ZU1EMK)NX>OYShqUMp4Z8Mi*F9wY zo+0?$Q-)r8iPI-IODc-=D;w_E6n7dj8W}>3;--vUqEy#fdYEN|ROjpA;tb_RqsRo& zBmWRP8Su4IgjBHlhyFD|XCgK=JjaJ!KO7PWO&B`9>*R55eeWs6SIVgV$3aK*TI<_N z(Row)t;F*o8AkEqwjHUv_1`DYoU+&`j$fw~OGtCGq|P`cWR^VfCfHhC|w)sFW3$(SLfV6ik|P^0ipy`#ph+xc$DB(=DUrdW4Wgp? z7qpQirCi*-Gc9?Ae&cZ^?)K>1DXd4AfXs0*n;YsocMc1t--gAmO10yvFfrvWf}T1_ zZ@_MgBc!-&Ri}+uvw+=85w(8Vz`c5Hg#BKM4!G&iaTQlY^oXr}^x7!Ly%aip&GG3| z$y(B{(embNItEZ#2H(?dS{m7_OqdjetwC&e4n~1g=kA>Fp>%hS$mIS#W^(_w zQMrF&U&DP%7x|Utd-k66gD|OySfb0jtcw~qb_}wdEmc)sR-`UkvgCWc*1TCMc7}w| zbD2sjH!DD`Tci{rq@tNMQB0q>K=Lv4vM$|g$4C2Nse!B;yifM-p$U|#|U05NNR47vMg#*U1t3^lPQMY+zY(uBj9YQ0d+++4->2%;iq2FRycS*jlbHsw;G!?*tX4jE^=x|6m*`jz4v&ib z@~eRM3K6%>_l792W=s^Ai$a{X9HKbIr#@08#T{J!EB1;A89hWV?%8({b&h4ZGDM{J z9AM9`<2J`ssh&>EJaY1Tx@0vWy6}?K#PyxU@dh;nGwa01Y{E0bKH*uNl7tD*SUTYm z>DlfH>}W%!0(bkPYXYZ?;?qAw>90HWGr2 zL?%iRa?iyxh7n1kR9e}A1*g zUr(Po)o7JX7o8$A)nk+zaZogyBCf}*v4rBJRm1@%k*;318z!b*@!N^Ef+T#*Lekc* zUY{DbG&Ul3XmsT2v1^QKT?S-2A|p~crEdF%)a~nst%wSVjtq&W6Hc{MTWL+kms5A8 zy1%lRLfp7}@$$6+L(j^mOrYCzFk?&+tq=p*07b_&r?hUck*MmhycWa7osut|Oi2M4 zsqs=(aL{tcZ;qpu;v7Zn;?<+q=^x(3EBm#uT^+;4(QB0An$v#iF>A#ay1GYhg<&8J z%)KaiAB#93QqfNixlc@Nlqi)lNJ??Fl88G{35sSIxumLwClEWjM5Je=2Ss2iJ;Erm zTNiPwY&^SF_R2z3b5Vszg^ty-%hg(;uaTbgY&FF2beM>5LxFP9oZqsni+EbPfkwWo+!?kC zt%|Q>ow5w~@ufwS8kT#B#r7tc7u2(k5@#uPw#6qe)oSIjYKp|Ri*lBD}$(+trW*3#*B;>v6XC`TvW_onshM3 z?`8j6R#EI`z{CXnG14zl%mAlP8snEZX0jMHe%!dRdJ%n0fY`8S_?XoF<}E)TFp7{* zG5gIJa{sPyUsQDHh;eh!G3+%HL&mI8CSY_%uQu=n8rp@Rs4}T=m+sBUl1a_2?70aYL1`+RK6<_1nh>D=? zb{Xhfk6MwED;ImO%NQcA-JF&xavZ;iGjPYDm$V(`dvpGL4X!3X7`g}NPb|KY#0?N_V|jPzTJAI93r>wNYF@_$AfCrGJedHu z^)?HM;VSXPxX;P&TpixbwIEMyS>$)yO|lZedU(zg6KYo;0j2T6ptSyv!1#djf)kWpIwRjnTtmhmlt=#4c**%t zo_imBEu;lLWGLm}N6M4`2JE~{`T1i2FN4pWVEj&b{*$mhC2qEBcD(Hyoc#kS%6&%G z09xD6z#|7X5d-H@(09=O<0BBNa}lgxp?%BW11AI^tluYqI9Xpc0r{tW)&$!V2ez>O zi}qn30Ur#%=-b|d8-1qz-M@_*h~r~GA4>aCCsimw14GfjcK~_;Gr5u^+V9?ZJEa<(+3IT^2=~tO49WXKuEK4x|x( z&V!Y0B;5YsN&#B(hwXRZIn1um^PpD-LV(Wzkq>~sQCu_h!@rZqwx_(vc|oWCE0a51 zcc(w-fq*l<2Z-xW06L4Wlii;!pZOck)g!lAy6^hCgLGKB@K=KKB_(XXICbFy*Oav8 zDga(&Ki3QGXoK5G@+VM&3kD)!4hAA%=E-+}Cs!KKle5szLT|to1B#OiTya5w{)a;^ z!L=r>FgD+{T_i2JnxwVuHfd%11Nwc^g7brZowT&=gB-jbaPP|WUECn@i0cT5B#$F} zf37K?0^S0Uzm6E|TJVz){{XI>&fDc9d!Qm2iFz1;dW^JPA%ksK3-oaGH<9QohuH1_*AR~5{;(b7ezaW$ zb|F0x;d;RT8-)9#Ko3V9MsjtKmIC2y2v-W>auDWEARFQ8BHT>)DUW?Avfvxm#Q<*!z*8TsdwBh3zB> zVdmPHXO$z=KMgyS^CYn-{~vfZa7DO0u0DxInw_|onCEpsTs-N>$w@iHg?JfSLGQ^` zBb_-<8aL_9^+o%-017)TqW=FtynkTs^@r^S^qLNP0<$~d=g`a8-B3S&a82!!2hzykaUyaYA^ zJKenOeI02r`=5{&f%$#? zBJA?vrh#sy?=om>4)tgMLkLdAjM*H|6$h#zmeyPwsG;}~E($-M8-pL=mUAgk*WyRG zQ`~8&_wgg(7W79125^Zt@rK!#_`<9wdZ=Yc8K`B!JA{~s3Fh|TB|^HB?odO)e>@pO z#=^XSEQGq4EQY#-EP;IzNrJkJEQ8H@vH@x)IRy16ISTs|PuO{**YV~2IDb%1AZm)zhut?pT5`^XbK^wLo%7(lI4!3GeH7*NczZN*#kdk& z$>89~1nxRh?}Y@%58|FM^?680R4kWERl*O9j)@{_rh13Q1&0tnrk0Eh4+|z0nOZeE zF)EJKW@>{NXrvia+r-2Tj3%9!+9Q_Q_hst9c%(~)Fm+gbcyuV4#MJ5W@una$o2d(+ zRwhfCngX>7SQl2D?GYMLUn(eAPGgDQD_VPlDY2PywM(I$6 zQwZfL9A#=YR4?IYs>+m5H8L4f{h(@Ppk)?ML0H7eBSowYIP@auMQWl)Xn{>!y|@9~ z5H5}z#ZBdAa|^*QYq`zbF76=s?i}|sMxzIa4|x{;M5&?6ER2o_e9_YJ;G6Px8&Z|o z5cJe61W$8?5SSg=^_t9G;H&d3Fmtrq4RGj79r_N3e$Jtvap<)CG%n}!J^M387iKS% zw&y{pXV>Ko?Dq0j9FeCW=PLAy9pI)!P5W^ELP?GXr=j=Ya}k#3-w35RUXT^?QJ(oI z%Y2{*fRBpr`3Ph_{Fx6wsQGwz-~}bCCthAtUJq$EVfoP6>rP%BHYR4{15;V#r4-tt zHrIq}hgre^E|MF@P2lEX{8-DSa~T|MZyEYFUVwj?(C;`*=;3%;&ocCKPP?@Qrc(u` zJf{iOMDvCa=EQF6Xd|SR9-=6QlcjPK9Y~(qxl#< zmLJN;@$q~DpU4m6hw~%&k=V32njgcD<;U^k`3d|)eiA>KpTd8|PvxhfT)D`fi4Wo{ z^Hun&d^J#R4ZbE{i?74iw% zpgAHdkA8v3SliQk=JXnj1%!6{XwGx^uN#OLu= z{tw+f{WlLh=RMI6N(6W!5|ogVnPYwGvRZgj8IOfAXK8`uuO&Cxior^s^HZY zTsO?h;y{77bxN49r4Rnks6gCs=wJpNuiy?jsC7sHqL#)$UiQj*`-O zg+FGiASfcoo75t*2+xSYk={eJl9GnQ^8*&npRe%uOM%+?9BEY|7&C zouD{6x+*dEPkrZIAP_SF{NY`I>h^bmw>HlCzH7vwxM;32Q)@;A$3<}UnA#>PA}WIG z#nk@s;iCp|p-dfuxQKmL$5c8e#`uILpmD$ZL>$j@%qls|XE@B1J@Nh#2Ivc~Yu+Xl{$2fG%D^WzED1~%T5|^4~X0o?nJm8O1H`f4%fFtiQPMQQO%nQi> zgih1IjDw{|_1TW+_jNiJQ}@54r(osm0_NS>DBmOQ8TX2N1IAMj713a(9Y9Lrt(3w< zs>7}hX+&C(cBBjGMf&5tG!lp-Bgi;11;74eCYehX;*E4A-b6QJ?vR1G!EwwtE`erm zaTiDq_Xx2+A>mPC9il8?}#JpM=$?+U+32yuw?=hd(u!F%K9hhHF>$(Q0m<6JD( zK`>(QsZd8VbvjcUGW&W|CBvu<8Nk#Grp{;TNT!Zp>Q1IErz-cHnfEYtEwiyP^C70D zGIbMEXEHT`--`IdnVIE*JZ0wLO#PCn(M)Z{a`l+M4*w0P83m>0hV*@$G-9s5P#f+s ze+lXn=K32eMJQ8SGj%Xidob0PsXkQYBz`{PX~As1U}`#3tMe|fFT>1%ROOrTyI`}8 z=8A8^^0tzx*;M5YF`xSh9RV|$*_*jmXXX-2jpuJ8hFJPWRCQR@aqy|4vu^N+FM|Rz zPCsy8DfC5^;Y$AqDNa=mt3Ob&js*1_Q#UYmCsnI9sM-$pD)e%c!xw*m2HbSaeHL&_ zxfHyoq(R??Sv7U&E-kENHR|M{I9w z_mIb5ZBI}pB~$&G8bDP}VrnR}spBv|hW!c}ij-tFX6D+0*_3DMXAYm#k3Wn5B~!04 zpL*u{EA!cf*`H%-7E@m{*B4B^&D3X1y~Wg_OkHm)f;>EB=AKlwy|igz^Bc42N>!4` z%qN&y+ExlSU8u@+XEr;Tx|OLG+kMzyp=Q#N*_>nQ6q_3MyP17irWRvr6Q=fOvCXv6 z+DNito>ci@W%`z>!s-L15l{5O_BmE@JcnSkCcG#A71R)ZAyP`FHW>NdAmqZz%UMV} z)s;f%QdmtYUNBQ`z%|3FTqivDz?$el7C-2Vq`@b_Iy9xezRX;Xsf;#Be`YR5Rk{)h zHH)cjm^z87qz+Y0_bS(ct79awpr)lLn(xdtl$MgGoj>G=%==m6BDd$q& z{R_P;x0v<^++6-5M}pXj44I7?O#`8uFi;pKEEZM@JA`w>9pR-+CR5A&WtC+$Wu0XG zaWwB6*-}}GY^^L^c3hStdm?)!SI9l(e)2$hDS3H$J$Vy(CwUL~5cwGSJb8*dRen@{ zOKwqU6y+7o6#W&W6blra6(ue-j&@jY+1if%1%fNzZ3Lbvs98E$9XZn-^I z@=9-IDP>J%D`jtGv~q%So^rKvm-49clJbu7nKEBgivD6L(InOun~3ei9%87NAWjnJ zip#|`F+)5mUKgLM6e@pJWmQd8JyjD`D^&+oH&t)d0M%esv?@V0N;N?>RrQT(o@%k` zoGM%OM1>2<+ymWfyLWMqcAt*Jefx2=FUS3*np3OQfjHRLMBPf=LETN=TRlKMSRJiS zP>)hiP)}8Vqn@W;tX{5Otxi>^t9RkR-(mF$^)2-y9Qe!kP&*Gjnainjc=P1v)o(nybJXdCPqRc&o;18p;H8*L{X;p?j%s2!q>)sEACqg|?9uid3Rs{L8}Nc+ZH z7P@x2F1lX2{<=_Iq%KZ3MYmA5UYDUeqr0Vh?!)_>@ww!a zGert@WODSSCw5=Ols z+cU0;Ef=n4xGab5J-k5r*mm+|u~VfS*3)IYk+~g0s5fxW!5dQ%+jE4>MMyI#2Uj1& zV6>$pOmT!MjyJ^;wkz=eJ3{-|cH_y6r>6)F;bq9p3D}NCZj#{A0WPEA684dlWL#0C zNAqVy-pb;=?!(;Bw4TAuh2=XJPxtVIRc+)f9qAlJ*fdAZN~3o-;%kxuab`PmZidZK zhkF3xfIFUwI?C>2TgR6`p38FOVN)41_HwrC_@YnCl?A_V%S>yH#-nB-3G$JI)KKH7 z4O%~_Pt>Tr6=*I~QSMVHcNXWuLTfGyF?%CsBVv}Zm=Cd9Lme=C`cCZhOVfA)zamnl?Px?9 z>~)J0!bT1%aMBH}G5ABAwEoc6tQPQn!BKMYAJE{Zsq_C_lK!vWK)LVsM}PO}!=B^s z*}U!B{vDH(PXfR-O2*TFwU?wEdh{RkqMzJG(Vos|JmB-;s1U; z{B>HQ{ong@_K(@o_l$RE`yblypmKYwe=LUojGgmMg1*oEH_RWed!$5n6Z|t3d7_;D z?%U0O&xW@0A;;U(KQ`0%YrMa5D!lXFL_b8|g7>lU^z9oL?ce_Wr@u~l|Bg=q`vjF} zjnWvi8sO{kf8vR@lXI?Nf3y61HqLnzegA&{J@mif=Ioutg5LS#CMUPpM;1H(Q1d^2 z>wlLjXq%-oiu>PIY43yC3!S;J_k0)j?()B9Q<*biP2`R38FsUqNfZzb!~n6tP#_M7 z2NHlpU>GnQ7y*m~MggONF~C@0955c3089iX0UHp1DzFhq12zGhfh|Bfuoc(_YzKA# zJAqxmZeS0v7svqi0sDaiz(F7rGjwO)O-K&b-elwsPS)H7?g2U2bu7nIE=)P(7w8XA z``=;@w1V7%`yK49x(86#2iOJvE!O0yOD$A=Zu+_>?LA) z1>^!2v>Ji>61@n_BoEZ|E%s^)@A$BXvEb~{8&+=Y`ynshiN)z+#@_yy$p7!}xL!v% zTK4BC4-NM_QhEivM%i+qODre3j?`&g7s{U_O=Zp66vz%a{l8)qc&tpq7lX7T1C-dx0+%l*pnw)LD0ak~PZfClhJiaJ{g=L5GQnE(1>KYdZy z``LDI{@61g02qNlfc8zrp?`+2S!JP@2dX1n4WK4a3#biz0n`EN0`-9UKm(v5&UF+NCr}X6~Ibh6|fpu1FQu$p`JDaTYz+6E3ggN4(vqz?E-cK zdw{(_2FkDx*bf{44g#6LA>aq#FmMDo3LFED13v;MfRn%};52XsI18Ku&I1>Ki)f=u zz-8bH@DtkVXW%N31zZEJ12=$dAP4RA3-ADV2s{EF15bdbfEoA|cn16iJO^F?FM;2I zSHNok=gIIr`2lAE@_;vh703s0c8mKHu;C0B&RP%x@PGiw06CxlTmV3BDI27Mpz?IqH%4~3DHn=hyT$v57%m!CxgDbPamD%9RY;a{ZxH21DnGLSY23KZ- zE3?6s+2G1-aAh{QG88Uc-gCO}i58PFVP z0ki~K0j+_t$isc~nmI`87vKT#5O@SU2A%*<0WospQqJ7(~X8N6c#@0h_mX7G*~ykiFMn87<{@QxY0V+QY-!8>N~jv2gT z2Je``J7(~X8N6c#@0h_mX7G*~ykiFMn87<{@QxY0V+QY-!8>N~jv2gT2Je``JNP<> zb8F>+1~4}S8Uc-gCO}i58PFVP0ki~K0j+^HKwF?4&>rXjbObs9oq;YuSD+iv9SFra zzc64h5Dp9hB7jJ^MFG)33=j(p1>%5sAOZNhv$F3{u7wD{7}x-$0vmxeU=y$z*aD;j zTY+uBc3=mv6W9gp2KE4Zfec_Dupc-890W3ff3lXxwE~|eVT8>BuO7t+n}yLe9n?G! zZ+~X4GN`O7sJSag0k}#TNVKm9YXp)7|BnzWS7DkgSj3!wa zO|meWWMMSP!f29((Ig9_Nft(vEQ}^u7)`P;nq*-#$--!oh0!Dnqe&JS zFq&jxG|9qfk_Dbk2hXO1XVby6>EPLP@N7DGHXS^h&fUe_s6022Ovc=33h)&$6_|$B zoDR$YW&&RW-vG0K*}!)Qa|kDEe*g{xM}VWiG2l4xBX-BQV)jVqnK$VS6tgNi8*|PF zvk4t<|5Hp+8Uu{t)LgyQz@V2S((< zjGrUD!v1M!%?`$s$`?N<5zCf5yB=aA$cGkWlO-K0(N6%Usbcwv8E~yK2 zx`T_e<J0gzi_-?_oGmctg03DFJeh5ntFhlym=4+Y zgKN|A`vy1)8=Au;%vsoi(fpPaGTU7RXyIn*ZQZg84Cyq!W}&nT6J{RAz&Eg`hjw&VIyu9ijKq0LUTZXx9Gk z^lI>N(-F%(gnD7a=!(9oP`wpOkj6xNDcVNR|NbAXFBVIo^4O03tMRciA_m(!XGoOZ zK}`-D?*bRBH58cb^z-q4w1LytzoxT#L2JL;LWSc1rM#lgsN;g16n1BBIIYffd+jRW zJNw&ZGg_XP`H%x-Z`})% zZf_5iuwd+A{w>1TZ+FD%lm%py##wv%K@Q$V%uH|7WAipzCYqx{xx_oy$Nx0gaYcDrhVyM4e9>Q_zqc_LSQfXN zoHH_eo<8*F9H&^R%~(0a--mSbPh)Y;*dXZyWn%rvM`Ce|L!a&g=sN(*Ng=Lql%rrY zD#(jHl@G=WXNg!zoF)3u7aQ-9T8=$_r~0<-7#G4C`ctQCAsy%Jm^2WMNdxg`(m?2m zQ+nP4r%0L1ld4SSNp+mi90U0+RN6^RoXJ_seZi!i)M3(2>M?02^_iTL2Ba)jKN>Q5 zCXJaqlV(hkNpmL2q$QJN(uPSdY0IRSv}4jsIxx8?Rces2 zkf~A=Ie`p9oLgJS)n@tmg5{?UPQ-73%q5&hgJdi!N2NZ}B7!GW`aOu!CEM5y%~(JW&=`xRk)@*i!iE z!5OW=7j1DmuK^bZ`7$lJq4;&+#zAgIM{W*kz86Y%nj6Ah#4(zMIR9$oj*|+cBF;Zi z2{JjP2ARkGLd!-PqHIfWau1SXNHdh`N75W}08ZiT9##NI7w8 zhE_Pw>dgI@pqcGl1lA%?aU;2l++CFEK1!0pN^+2ulDWeU_aecM7k)~7Inuza#ZP2?mI{=pgD)Ta)M&pV zpg=lP@q~1nq6p!Kp9U?eM+krXydm+%0Kbs?2Va5s>2b2T80_eoXm8L!3FwpxN}vYI zz+4v6xO{Lnhst!QfFG3%P!TSb@S`+nf_)Hv_R~8RK<`zU?0~9puZEuqZO{=V?F4EP zSWC#!5@S)uarn7#kXN2^xU^M@dwQoXDwZV zwRB0ebbZ(~AnhSPtpi$J&w30W(u4HDdQx99kSjw5kwK6Q7>aexvN(S_2Jwu=Y20#T zGMS2Re$%iDR*B33t(X{J`!K%tW~ae@7en4@gE@}j-J1VyfN}8 zR}|D_!=6AHFXuj^oWYgiU2vxIbIKnuyYX%?t9TU`h^xrlxnjJUSHtW930=i-eoY5i zoS;9h2&F%$pg*YK9)!J(b5ozAHE4_QpcYDnRQ>^#fIulv%cu=fcJQOpeZ1j|QkcLf zOvWfo&L~X5C@g?cm z^o*+f8C9tnRe3O~@?>*xFGf{H^rBUfFG^JgNIqzd+)&ygjH(EuDlMpIEo>;o@Qh*v zP|O9Cl2VLDrmA!*|BoQYIA{Vwxl*n2d|mpGcbKcTiklg}~-jOcRp}7nNXSnK+9xO`O3`oXBnH8Jcjt?#!{HvhrU~ zXfpcG=0m)@w(HPbG++MpTy9ONefZw3&v%WOr2J->PuM+v({A@QGjoOf(98L*70&F8 z?>Tx#c9rPRUVS^&*fHSZyq?v(ziyh=b6eYzD;F;q+$b)&_TYOFUoS6S;nm`HOOJ2a zo|Ce%PU*}Ncdy2+e(BjcZ1eCf9WlytWYxs`riph zr<6)5IkouUgoN1Il`4hAMOGY!CW%K8D~7~GRZ57DuMiSk5%wk@8t5|`h03HnXRMlxFL{{2V%2d+%Y$8*A9r4D5#K*o9u}Mv1^PsWGuu)@zDS$qE$v_#awI;71 z4^%571Vxw54TCCFF&U`4TIM73-m&||jFzSPKOFQVeslKanrAb+&xlu z;}*}~>h<%S-)28ad$q8m>cXtsL7m$7-7I-ZmIWBBX*vk7VC(_8$|pI*R%tFs?1-F{b}DuFQ?tg>ji?sxL95@ZGSkGb3$aVD zhCw=$mbQSaR@Hq_d;-LJ1U3$i9Tenk(oky`t=J?nZa{GKu<*#pLC)qZS|S6fm@VgXQWL_e7>XIi`zeVWQGMFST)f9`o6qV zRW?pB&FC@in;Q`~t1tJ+yl5Wra`@VDF?BNMZ*k8U{3>$6sRNxVY-~~Y^{$`#^waan zZz@Futd>?SUF&y(zdOE7r~B&u<_7-b_PXDy|KpC^(+>0-H6*B_uw}R>booIU zee};`t#0mh@mf@T%#C`VUkn&wP7XTx;z9AEH;!&^-gv2Bzm$NvIelM08}nl9#sOr` z>$c*p3&p#w|L*MO>BBZZ%W(far|q>A>)@2l-d}8=_QO6$hjPO-G3#$~J*6FcH{@zk zfcbgCnHo|%qpY^6rm1>L)s)IpO`qzF?6gvtR2nyAT@$5L!)NdHOYihBM1g(@p1fqB z%+*CrMV$04XjSN8Kxj291XZY3rEvSxjs)F!tBAZOJq|bV51KJ@Nx6lYlhVk~{%y{t z&+HL>+qKN9z9&x2*FKbWa{sOQ=asmc={YCow_AFp_yC<$zech4u|X4Fd|h+e_D7Ev zaetogy0BfzOB+6KH)`|l;D*1KJ@@eBwZ1p^mHVpR&Sg8V-R*8WxZ~Kk*XLEspD+5e z+~qGi>Gd@~m+H4NO_E&(AMbPUvG4VZ%S(-Yw69gM9%s))e9`K?9GfPdD#XYCXsmVc zps4kEJJ!Y}#wP@}8!&xi3x*a z;vm##U|?eWpum{u$dN%!O^s<-L0iWeB(QO0aD04VmB0>(10usi0z1ToLp0FHcRPl_ zhW5A;M$+N68Xe+I)q{dS8qOiUN_A6>pz6+U;Qv#F{b$|JmXfZnWkyw7-d~mau=N-1 zvd8SN)6{=oxjTQB;q$t?t{V82?(^3#Hk}BX(Wm&MvZ-quZJ%S=+jaNW-L1F(IcJ

      Jv&&bdeknIcpZxUoif<2BX_?hHWJssh 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 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf new file mode 100755 index 0000000000000000000000000000000000000000..43e0c69ff3d98460951c3edd92c3817d076f9597 GIT binary patch literal 94560 zcmdqK349aP+Bke>vbC8u-3Uud(kc5|y3hix2whSLbfXKU>}i{(p-bAPrIbZL^dc%E zDi;wE3f5R_t!%Q1h+ITOFCriypdu%{nK@+S5(2!Z6!?ZLPAJfQc4Q{f$pIqLdItj($b!sZ60@E zf2W}*C;yR0DILF<54M(GWd z%@5k_E;D3!m!9r2OLSd;DJqarn3UUk>2Nrb+SyR0E^>T}#>FEYGq z7kAm4bniOeUFJws*V*o}Z|_IDKH)Cw$oM#;yX;SlamDU(0O=C<04)QJUE-d0ml@JE z?qzqGh4NeOvVsK0oo(WyA|fM(;CB?CP~<4E^4ayy8f&?eH&+xosw*AUmKtkOIG<2f z#%I}WB{fby%j&dN&xOitM{RW>46sx<`OInuZ<<$AZAryWSyo$ZnWZ{1JR&+e9`!1o z_QkHybEu~$v}PolCR?kWc1HzI2V`brAtEBa#8Fe|sF;g);UgmA%Ppl=M@?~fnY|z? zJSIG5WOUT1zk=(=&F=f^|WlA4;zxM9QU>gvKR$lUNkNBOXt`buk( zqq4plIrX3MpC52nNCSuPb@rN)I}+hj92GTuI(Q+zKV?AwaQ=Ur6TVtsZB7X=TADoD zQCw4JskZV^QD!f+Rycu`wG~CcJmhV*IhD_-v{um0skFlo-Xs6W@H_C_!x2)UqtXs= z3an+0x*;eMthAIl9lT|(#a?D9D6>*dSooBLNxY>dj(0Q6Sy*katZ{}r?PcMPYTK}k zlvJEx=zssmS1S>bX-el)GSYMSRCAIkJ=@fg27V|X70ahs3#w}^)%76ah!Ot}r}Wik zW|rjcY%6bb0QIQO$kabElpg?O4&+e`H4ffcV=o75tN|7|s>_P%>_t|-$T}Bz zSy^rceE}$ijxt~(+PZzNl`lpus;qX*u@=@ihe#l5E5Q@gNV7?;h1FK*3l?iFE`|mP z6-yzSnY~bwPno^KR%?f;3jug}c`eu!m<^R3-~`a;A|4jLxY`OAkf;OIqPQBA7tkz4 zW2`H&7nVraIQeo*J&2!omH<&jR0GNp2;4x=N=tQ31^AE>dnMHa$y}XoT>=iJq=LGD z@;D_D?kFbG0#yzKT??8z1ejG@1gbWKFLxB#i&5ziH<%M>skRr?qGv#q%j$UxXt<-o zhF6dR+ylES95uYtQ3k47kCo+4YuQ}z7Cg#KnrsN5TUZ8j;J}J{5Ja_oE@eBC4IC=8 zR3JJ9U^Hcjh_$@HT2zFk&RDn|lQf&;1rVH5Ha|CmivSBtjWkoW+imlhrGWLgu|={G z+dm@G0cVK?o_4^o#8C$dR4pNkBm=(H)-tQbW9*0w^_l4IP{-U%r*NySRkikNtE7LR zKyD#}AfV0y0+l_6$BXbq4!{~Gvs6|B_o1)EKSyD$1Vz$FAf?uctVOe+!Uf=PW3TQ& zAk_=V9nIhTZ$y( zs&Nbfk(XI(Kplqgpass_0&qt)wOGLq9V)vGY?6G917ZkNONvYVY6rAsPx}WZfNbjd z!V*gbu*L=oS6yyFUs#RR=rCnf?92{SUB1Fv$6G7r+N&KE$Y)A!LTycnqx#Q8I_)-a zZ{Q1XA}f}_zHQ(u%duQzEi9?97lLf+sv&iOWJS(bDnW@sAax}UkO5{c)PcFxx)W9s z0-2_)G;?+~*aY8?Ps&J7mhB_cT3v2;N;w*+Dx^YIpb!wK0Dm}y`fv;*;GJz&DPkZS z-LpFiYQUtC6&Apv68r*XZ>Q;{LEww12d)Rt0zJVCTP1*!4|MxvsO{(oX-EM-Th`fS z*H+x|-~b9@&tFUnYJqW1HuYjqV@Dk#3k)lQpyjA=#$m<~Ign4cLbByHl}^ZmTdI~7 z#|{c$hmjE8YC$3%9YW8~-?1VX@JHPSzbZ#LcLV`g*0N$rGEoEn_1L>oC&RlFOFA-6 zifowL-aUdyDuyxI9YU-Yh{cllP?JEQG?YTt02u?;({vUbG$eJBld3_l*3s)bp(71$ zZa-JVyE%%Uum(KjPzyvsp4saY!03Zs$qd|g39XlZ5iRTVL);-3JGekE# z`0lxOYaNZ4I5}u+wIrWtP!GqSMEciKfq@eCe|Fn6en6yg^458kz(0G9WY;y29)U%5 zFhjTfp|hbLxEf+SI9kd7CEXDT4NLAQ13kbExczhmW-$;=(K_5d0T>C<30Q*h5F-Y9 z>`E8~J_=QV21F#AM$zE|rQ8O4BI0h-{^R6Q6I}sN7uTV0XG?+v4=mZ8Q@}LRlpx@8 zM-BJ}YekWx8aM}{vlKxBQe%f3bTxmpCFnY@&{`>(wWYAM!chmgl#R0djwb}$?tsVL zaK@mGtnGkwHBB&~7IKPzAs|UBVkmbyk?3|~m|6lE9ycZV2TWw$x(!ad3`j1obxQeF z$EXRifaD2;_vbW;x`zeq>jDC#?m;m%t~Rvy)O2%xR`9fIi+tmu%S? zDLHuwStj0`&1Yt1Og1N*lKEZ<*>K-$2%l%p8K04x!$Xg(g!G(zSUvCw>G}Lbb9(X+ z-ZTYPV%gbzMiy^Q%S<(!pw670l$x7tP9Mi7!npJdTok66a{y>ghBVX-%4~vhDLf#P zG#(%)B$`vrIr&5Q6mw2G!b}0634CTkR*pF-H#H%P&&-n8lQ4 zf^{bVO3KL0&oYl2pECpo6HS190<1JCIzYI@z#)8cLR!K&q(Fv?-P{y-IDniQXG%9^C8Q4F zvolReW-I{f%vq)+KoEKYyMcJ91xS!&WSb`CLIw1brvMp@H%X`i&I#}@3DtvAoDLKs zoScj-;DH;JJae{b2%nH;&PE}mWM!lQa1aIX2x-g(7D880Gm0;Y1?#X)TEpK_2giGVfNEuwSh@IF-3AEsdEEwyAPc@kf-`F!7M%Kc8A>88(7J!L8Goj7_ zR}+~BW2>P)^$sM2VuMj-P+JW+hXdBp@HZZ?O(uyjCcYC~87hT2^sX@J*bHg(WC=qj z%;x}X_)arq0%W-+0_Kee+8lr(@}UB#lH0<`2&uIka4ZFQ*rymUEd!_p!0T`lBYj2! z-ce-K{}|uSe6veDv%u_>S4A)*&Rh+1^DuWYeE&C+AllWQ!RQ=IL zc#;CxBKLTb4pfx`{ygd5Nn`p;{P_R6PWTcn!A}lwk7~4sa-^*ocu)r%sFpZDd!Rj` z??A6XwGuTA^&d4)*4u3GRjF{FAxR%K+5;K=iU$IEzq{E#dYM1t*Lild7PJJ^_ev;J ze9(86K~0?`XKE#KPYbj-p$)BPE`028Zvp>M24i>_fwqP^ftH;DHZw^o*MO$;f6y=| z%!=Av2_u|d`BYkSP7XLF3RnJkA75Hi692Af}{3N!DzXtPSKs zWiNYYSyTVLhN5?&(i{koWNWCAvC0H_7EC3t*I7TzHQaQ@-fE`9A%mUEn5I<~1%*!SEX`G_b1~HTEj$%l0 zp9`ZXKhVC4C7h5ua$n>PdKTJ7Jul@ZMpYUa>m*-QC|RjYANl}{zNn8hb87FyVvO7^gnpC`dBzF}5{($B zn*HRTa%DYg~CU%BpI@q+4soH2Q5>*)6>cG%WA`pJ4j zH5fU9yg=Nk9FRLWcgJj-2Yjg(BbWckTUpvNZ~q-f?#^dAJK}S<@sy94G1mcZD6i@c zoRy_a`HR>iZ&4?Zo4lLfG_oV_kVcOsAO~o6Cwq_1n%)s#gk1&j>=KVKqoV$gdZ3Pa zgHSO(;|R2AYN3D3G47U&AO{>U3VAJ4W&t~{1gfa+(zq|{p96HW7Uqy~@%TuYdW`8* zYh_#Z=r_{r$#{^izmkB*UnE0RN`aW04xb$OU>wetyh*PP`B64N?x=gc+}tPzOwl{Z z9FlQDX`vR-f5v^;%c8}j7GVrTzRT+( z%2n!doB$JjxU3^op0W?`=r_=-pf!5dtR4!{$Dmh0icw!X=VTo%qqD53$3Y+Hkxj4v zXdUoZvXHH#qrE#p^DtI-_Sh&FnR>(!B~2|%mM6_-JFk_{vm@4M6I5TRY&znf0UXEG z6><+F(I4}AZ$S`q`m;Bn?f#N{)+hq+D#p_(Onmm59L6|xQBL) zo*41R-iRr+1JwRMW?+;9vi$y52nRjgIgZCQdeZg!>}cPh~{p+?ABfwGo; zm<;pZQ;#}HXQFu#-pe^~y*p>Y^#LtY`N9S6v z<^2S?4@N-`Y`K+EO4mLAGis@~kk@lE^)jc>4&~K^%vqcZ@kQOFGIqkwguEJwlwx%{ zP)m0)I!Bei);pRlp{95CI0ywjInIuA($yQT{E<(H%OCv^auj>xis+BAh+5IV^V>9E zmGc0am!h3@T!T=&P+qvdD^njOQUBl1`=85>#tF2gzgn04mByi_QEmEf)*#5;f3*t1 zoC|HYqxDgZku4OZDeD*AYrqwOr$3b$?(WJNG~KC_v8JQ%mV1Z8h#Z)ku740B(kXKY zbwXYT(k!sEj>|NXHPIJ%;x$SSwT{N9yGO&$ z@lVe5WQ{<3sfNEe7tOIe`CpQxC!O>1j;kfv2B>{d7&IHe{W>`&qX(DwV(8jbjvbxz z1gep!-?EnANNSn#ZxU2nuqWlE9MzG_C`XwpS=t@s1-WYh$d1=S0j1@Aq)mSYXt1>Jd~miM3RXW$GnpK*Vm&eT~G|7ymL@MR6_xPJKm z|32AY>x4&(a_+2h(n-Rd{V@4go4aKhRMKcu7=JMqRDfitkC0_G7g}+T7BvZdjfejo zJ6(BC^LuW${W33FqQ zae!Bjgayuo)L~ELN)EK+(=9k2XPqe3Qp}JiC}qUO0|nzh&Q0+^{!ezp!zVY8{#5vj zkg10J84rBIA_My1tOy&Qtf9O|uHkQ*RIey^sKh-Qh*&4XEQl}C?U8v$e3A2imciY0 zK-MXQh0;NOq)J@K2L72qA_$4r;CR#?)bAuW2PsUd-N;qBFXbWK$w2u{0%=mdQ+R)* z0_n<=c;?|cXK{;9|MRDJ zhDo`N4SXU#;eg}Ip@cb`XIEZ+=1YE(%ygIM$g-vAjJrkhGeBiPNg34QUIpf$bp2(y zYpo4t#D3`4X=FFUd%OzzVY|?`e2MfXFT4@mg{YY}X!9n5yG4Gd87lwfABH8YiXFzT zWH&J%vP!lG8_f1*o0)djpAp$m<|K29In8{;oMFx~=a`R~^UMY2H|BSCEBh+Djb+)P z@P@a7DB*2wHM}wH1sG@vM|>bU=!hTjCjlgo1d%R8Pr8zB@Q!p3cz-&C4PnFBp6qLE zclL9j!9a{86eJr4aiBNpL;Aw*Uw`;LW*`|v27@jR1vw0Z=Pn}Qxr}HsoW!sOmS>GD zyg?5;LZd-n^T@;GN%98yl6*nFB43j$~EFk_iSCYecM z%9%2zf~jQtu#d2-*~i#^Y&W()V`T@i1K7drW%gTk7iisc?Cb1Kc00R+UB&Ka-(U~1 z|6upA2iOvJ4$OUv$zT;M!|r9@WS?O7um@Qk>&M(y42P#jMv*7TMkbRDWP?~Q)|*wc z8uk_TJo7L)%WhyFXMI>-<{4%^+n4RiYFUnLAR{4yjUZFOk7D*U7i9l9Sq-zSBKyee zWG^$A{er#5UT42!Z?NC9Ke9itKe1mDrDg|+TFu~_@M_@FC^8mc%qH{6edGZ72RT7L zBA)_RZjfJ@!AvA$X3`idb04#cd4g$RUIl4hVXlEZMzE9EeAWU|-Ola?st>U5u@~9P z@SeSo!cP&T2vPJ=3{ZqCA{B2Mk_=`;njzDWWtd`^W_Z@H$*|ApXACp;H4Zk$8_mW- zqr>>1ah35&<67f$#+$r`*Ym-=k?#eso(5SMl}yVtxhx82=RCz(3Es_?P)@ z{7!yvSWsBEFg~nTSii9Fu$-`&VNdpAd#QW*^$P5z?-kt3*lTdF@x5mEvi9B7cYEJm zefRf0*!S(e@AeDmH>ZD4|16QceH(bjgSNzhT}=ZkTR=9EH_2i0Avr@n0}c6+2uwIL zoJnOenG%T)o0wMSeda6X8_-7&AGWc(K-O=tZ?k9FOA4Y;10Mo`54{!r?(kt8@F4^E zF!>H2e2l!Yk8zMO)|hCVYAiD@F+OH|LgK?F;6otao$tx>5+9=YQNV{vzJ_1KFX30Z z`S1eY%x?ug?CHdZ?67HJkGuI00DS0ihYv--hi!dd>-&1&H-QgF`}w>1K#&j27D8?x zgwHAW_K4eWNtM09E{$^Y?cZ*<-~Qz` zoaAu(o7-RiE`B+HkT2nEi7)%Zr|%ahzWCsaqjKNQ*UwLV-j$Hc;d1SzbDvjz{?etB zpXU>D=}q{&acSSBpDz7)>4!_-!`+ojUtaqB(zZ*1mwYaHUwZb^)0eU?rCu8G+3TO} z`)ns6pRIt;bDur+S=DEGpJiMee9>?*sy02}Z!@ZhsVi?^OHm{Cp>$-qAnHzE&|DJRN$KF=z^Pp5*Xo(#Tv3V0~otw1k#i9F1< zkmtx=$;-U~-s*G43f}t`_-`e6aP;3icyRRJPcm`rD@+D>?sD|q%tOpm;7{YpRdNsc z26EP$pw;b=J^Th))@{hzekWO=*SU;>Ok=#sbVf^NFdQjnx{!QELu`zmlrUY1o#{sA zFx^Q7)00#&p`@1SP3oAwWFa$<%wqQ#FG`wC}s?KiZPKjObU8_;$o(dCMKV}$V??IaCXTnaNftOjD@r^v&n0WjqGHK z$$rK`4lq^ZO{SV0WSrzJriQ%BEF>qH2gw;`1vyJDGONg^%xdxp^ElbWOd`jaMdV&M z+ohiANB+)?BZrt;@(gw-?dVt=OCx(3)w^j z>ty5Dcy=DU7UKOO_GPveyvqCRc`1tn@A1lR;5xLDZX&)>sxWEo&&x8dJe7$c*j7;)>!s#m@>+$tt~-{>pAjqq47Zh%#Ckr%X_e zS7sbQ>YnP}>OtyA^+@#?b&7hTI!m3eo~^d2E7Y~>1?v0N z52;tF|E}Jk-lBd*y;J?V`jGlv^#|%R>QB^Ps=rnLq`s*k8nuSgbk~Gx`e}x0hHK(A zi5jyeQa(Nt;XY3|cJpjoAPTJxNyN%N{^m*x%4Va+kkY0U-AWz9F58=5wa zsQKNC@$&Wx@G^S!^NRF}^Gfl`@S5Uf@tWgR?p5ox$m?ORC%iUzz2NnV*G{iDypDK% z;C0UHbFXV&KYRV=t@ifw?(QAtJ;*!SJJvhNd!l!q_iXPH?<(*6yq9{f@Luh`)_aq8 zllM07ecp$>k9dFJeb)Ok?{B<+@^05EwK{EgZJ2hDHcA_(P1dGqCu?VFOSIM61=oXvfD7UJa6`EmZVYGUvbfotgPYGi zz^&xga2q%m_bRuCJIEd5PII4d-*Tdl+Q;9ghfkQ#K%Z!zdwfhjX+C*A7N0pj^L&>3 zJmK@KPoqzZ&rY8MKJWOP@Hyvm+2^{?uf9s(AYY^J0N)tjc;5uyalUE3*}nO{vwW?- zrM^|Zb-s&ym-(*nUFEyRcfD_eugkZ^cf0Q%-vhpfeUJH`@V(%B#rH?wHs9ZMN}ZR^ zPZy*M*73SNy1}|A-6-8y-8fykZi;S}u0&U(Tc}&ETcKO6ds??e*R0#7+oO9^cU1R* z?u_m;-4)$;x?gm^`>FhV{DS;~{lfeP_zm-m^&9P%>^IRb%P-$=wx7+f!mrkEq2DsU zhy7OjJ?*#A?*+dWza4)2{ND0A>UYZTyx&)T*Ztc3Zu@Kf1N?jX_x2C>kMSStKh8hP zKi|K|ztn%O|04f~{8#xuC#GjE+r}Se7c!4^@e&07@DiP2~|yfkacnhexGLL()A% zhQ~CyBN@^=?mg?H_GD|JOjfhN+q{vYgCQ%k9Qx+yu7A8|z$rM)d z$P74(qCy&#OwmZDgOllC6CG^A!4aTcSrUp_9u#9Jpcpzhh7OJ~WlR0C|G$Ht z_Iyu^G}}n`a5`xUUS2WQv7SYUyC*6ifmYbOKTdQlV;+fK{UgoSdTP(r5AgL$DOk-|IJ70D8cG(}Lj5h+EIm0P72 zIM)Zg5}b(zUdeiAn1oLvMJth_l}Lvtx~<8rw-l`;idNDHD@DuZLC7XSwsnLIRvvBh z;1z|SA|hfXD=+bklyHcmkfRbyz{=s=53q7L2?0^YL6L4tNuro0CEDry?n`*loKE1t zqDPe4;Fze2GI(*_URWk^uS`Ov3^0^HMpNa9rlN_akfSLNhDTROLn>tKBO+xJr+5yh zqlS;Fu;3|^Z~{h&)j{!f{8{6v8M(uN+fBJ0LNaBnWDSuf$r|7?%5g{IlPN~YR4U0- zDkdrw6AlL3Ppp=(m2P52RLe+5nquhS7&pTr9<9)Cf4!2gC&jg-GI}7J;^3`)5v|je#`L#^8d+3>P$JxVVj(GT1bt zmWsIc4kt_$KNCg5M3FF2BvK;lB-^f&2(0rESSQ7*%Cswt!9 zOJL@ARA#V!$^=PaBBEj>ZH|gTq#~kXBa3Gh7tg9Ohg;0jL~xa0z|}J)+(@i~tBe*D zDc`V84%y)ri6coVQX$fmG*T`kKsU;laEk^0x#zOD=dyI13r?p3u|Ox!TyC!gb&{0e zigJ>tGr4C;h?EP_av?@8jF1bXW$^3?~ubxLsSg1rX@qNZ`he zoX43+kkOrBPfTyzQ$^7kWTz4iul-x7vBTBf5e?owK03)gE?OodS|%eJ$S8A`S)3)| zmSTW1-&*YmudJvo2cIcjYwGBIO$qoFsiqiC38Mu#wNENI?epjrd~AhOvf?2FQVC9A zqManjHEzgwMaa@sf{Y~zvQ$9GSU||qRf3Eq3K>fhWGqOK!C^``;}s!GR|ztfB*;<$ zA!7j{OIHapmMCN_NszIC>KGx#D>$hXZ6zu)5^W_aGAhDS6J7`>&q3l=ij-AOPurrK92m8+!h zYUvveBZaxBGSy1uxzcx?^iB1#UMkO*zOB^9;vhJL3)Wgvt+TMCj$-YUF5twV2lyZS zHq}bWRS{Au26q?|qoN{X zs7HchISXmUC_I=74hpiAL3#s+mf)d5mNGbMNV-aAam|y8m3DhYF>tr09tK7Lc#u$y z-BJdpYC?4l5>*E0^5U^|666RB$zaa0&RVb{Ja-LFeJZLg#9RrCJsQrff_x0lppx!K zMOdn<9d)&p^e#%eD{|CfvKAF1Ep($|k|dBZQqC4NA|?tBzOvZpkQgb=jfzR6T@pt~ zZAEmrlz_r;T!X*`<1EBi=`J=>x*HLRp*SiwHlfTh9}eZS;$1{Erde>IVOq*&Bch}= zD_k%+hYQVgq$OfRl!O^vr2Hc)3G)iL!!!iep*SC2z_}rnP?Q2bTs$?>Vjwyq%2OlF z4U1S$jg;|3M-2DWNXbuhM69OGJBo4?#WTu-XB5RV%7bT=#OUZ~ zH?u|pS#AzU#XGY`;BALa9k_}uZoH*p=P_=%U`q$tfY@bdQqeO8Z{1_0V&@h&SFxo7 zXYtl8NvY@=6YH5rDt2yh&x0);aKl^oJW{dq823Eb(m`uzqJo^KsY?X4DLBa(LQtVK z96dq>1|WA?I1Kp5pDk~rncXo3pTXlRT-)()g!9sR6A6MR3EC9 z>JW95I$oWw&Q@2#ru2OEGWAOJdf1TOrG7(wPW_EWrJ1E!0vpVaXx3|9(d>k6!l6RhHCq0BeWy5CfE$NX)CnzwVPoBc)#|9R^WPYePP2ljVtFCaQAZ! z+zZ@G+&0+eJ;i;={leY$QTlK`ePDZcgwJT7@jlr;Q+-N&s(j}AEb&?6^Ni0%pO<}h z`RwyK>~qxTxX&q{&wYOJx#g?#<$VYFM){6{4PLWvhHtL#4Buj3hwnV!hhby)8Q)F5 zFZk~AeG9g8&-;Gvd(HPJ-`?uhO~-9_D3y6<(jbhrJKe%`aRV#M{Kg3rnATN+x8nFdjva8>9M zD*UWox%QDYYl4MdrgI`2)_<@VVQg;H3%WJu&Rh!l^2jR&PB^t#FGL7Rp{G#voKNlnTynpD`9os`iFHP^<)V_K7&$Lc63jKr$ zdXZ#Y7P<<$bJuR{-&H^DV5qolwSnuc)#-Pw+qH3j@c!(LlU5p6RH+WGXkJhnT<%z4 zU2No<6}v9$C+$CJxgH|;Up)Q&jq%$OUk>fNM>Ty@%1al6&m7%<<@iB|Wvg*xgKCF0 z?bY~@u=t5X2c9cBR2_O_hU)$DLyqX+5#uI>#hY3WO+$Ds2lcj{N6Jrze1GWZiK`zvt3Bi}npFcgVCCtbvgnPPfRbLj~UB727{Oz$y zy>7;uS?gweDZbZzr&{3Ks#T@xNb#e^vlbUFw)9x8Uc7Vh_Qkt~2_JR0sE2i^UwWtB zuI7Z1`qKvvo!D-?QFz1FJ9tc5+Tekv_b(cQ&I)BhoIa*y*w$;oCl4Mxb9w*7gh{1& zlV%u$z7QW3NBUWT$;2qx5cCmy0!B^8xiX<{=V&u3z)Ap1b zmurH)$S5^Uj1Jaa>)O=Ds-v~sIBn3`1Vhjl6W}@?u7$O>!n|PJalu<3am;%9*pb%l z`;9Br+~Woz_R`_j!~2bO8&%o)c@9&EIAGWU!xhlsAxHN+EUlp+-0k*BTgQZm_lWGf zTJE}VuU_=uGwJ&K`?nt2hd}f$^;ID_Q#-n^YPov!jaRhm^`dI>_d@6cp{L$@$F(=) zr=1CdhfW$ZI#dX6JEdhFBI-nTnE1Sybw*@`E?3TdDyW4n6HkcBv`kyh%uwOs zN3VSLbI8tZ^|lv7b$ZM8!_#hr2;|}kfxR;BNc{RxU`N}D%?IDO6nrh=(9ncjo5f<> zSgYFJdT_V)VE&l+T(dYNv|JPPvk-fH;;=|_M&z)(oja|ex-fM@T~lkz#)gIsp^F-t zm$^c&oIHK)pmUGi6)JeS#Nj}Y)wR=hJmloz0~ar6?@20kE?ry~x=!e#67F${lht)% z>c&N?4GoPOw}u?qZZS`^%*xKSxwck;nVSpV`ucC7JGQ;_^wyB0&9kzzZ8LI1ueY)K zb+xrm+Ct*vCy8;Q?(n#aCk`AsdD3z)zQDGid`_s)_3`)i9}aOfEM2?-$lce{wC8y6 z)&(1D>lQ7pt=+J6{bP?k^5{xqHk{9IGjjU0(p`rRweC6i{*IjR$3qK>%I>p<^c6?y z7d132YYjPn{;&`y=q4Q>Wy;G=O4^xwen;#2rk6v-u78`5KPkjfyJl^Ds7@%lS)pIE zXw~Ay!Pc^xarYZH6&L({X2@ED+naH&$J4ajtIuce3)%b3-d9$JI@R{&fJ_MI9#vRc zo4d@oLcFD(VBnh98G?SCJ;V_7!)GH5L04yIX`wV5>s*GQ>$As!(+m`p`iu?J8utb7 zY;D@LXRE_vuZRDr!^rLIDwMf~wf%6#C6+m^wEr*+%!Y^&`UO?0(me<3-VYJ9$4?8& zQ0}y0!-jQR8td29Pc>8-xee>Vr7l=kU%y~cU2Th@MRC2WFhDKLz5;%EiZErE&|RDz zDh^OL|K_7_`$14@gv@hdpqMBojuyL$nW3DJF1)Nar5*nC(vgEFPaesM9g#N46v{Ph z*xGa;_(=ZtiD}a;lPp`DEwx}|+^SK#wBV#r*m=nG9y>JZqWwr%}qJbtq|NraG623s8LmAv()E?a0|7Ur|BEj zUka?ss@Ca+N|#uv=4{KHw!Dx$XKU*+r`EE%CHn;MewKRZ4lQ@W(A-t-;!;4wdR)J&b;}l4=qmNQ+={_|CqdKRSTTPwY94C4SO1Ph8$iu zD>qc^vuL8-6g+8r=^^9lM*S?u#y$J?Gz;C=g^EODv)UGvhUg&Psj|=2e|kCi@`g_j zoiWzK?U?fTuwaoi#UC1D)YaE7;tu>0D*U6I+a%uS5{jAytxMSKTHxYr4^|cChU8Xl zZ+!;HZq7Iz!hN*Z_4rN$r=MmopD`}jy1uSqzdIkR8{B1FN6V_KWLQ>Ko1jwRfTHZ1@XQY1dFR}ylZhC=V}YCQrFg3Ew(N5 zs=cV;;K6}aYd1B3++6B2Cu$65Ol5{)`vD_=A&Yy^aB|DegBvz3U%Jt_rct$~*15Va zWSnKz&`|D$rO;=@JT0eksky*|&BBEy2%qTQXR8macz?w~<0|z5v5zpIJxaAzE%a}T zdPC?_V_1>9!kib}KD+tmfIN-ZtG!R2I0$@lt}saK)z(Lqr{)%q23rL{&B9l0YVj-R zSPH5Ds!Q8Olu3)L~#q}gB^HP;@n_~uwf z9NE@SA$DH{$w%$F#bD4N$3<(W8Wz_YbtML13uZ?*i_68C>TSS;8hy~$!c5_n4XzCh z>l+~|uW+o$cLa-%YlJRc2eu8bQ;To6k5w%YUKgh{2~)0Xbc{$&fvQ;4R|l6FT6<&W zwP8b|w!R)LFjO4UwbMN)>iTsX8y2huFS59{ZasA27FQd%EkfoNu2E=r1@3=J8}!9_ zj=9#PxT59SCpWcC7St|LEx>~xjl$S1LR@2@@b{)gO+jDpgo@xsVP+$MMn z8QON2tGVk(^;Y$lBCBdt>m=^qrxtn%!-cu+Mv$NQKwGR(BK!^1N&KSSU$vsmAH}h8 zfnXFys$3coE_L;Szc?IBcJb3d+_|5?QH<-Y68NqzwREFngpZmP+b`-fnh)Afga}?c zFa8wTHovreu0~`F^G8f7Y&dK;a$5{ScR*bT7UIO`R4r<8g7BIUE@Y}~YREeNp<2Ny z4hWy=A*W@cl%;beh~4wV2ZlmT8#aJOwKWOFE~c$#v!am`vrY(MbGfzwVyvoJBR+6d z?0!JCN+WbXAUtptYTB_uXVQvA+@_DU+#3erspghuF7SGj@NyHU4>~(K0hBuE#nGo# zA1JbUET{E}`*KK)lW61l>+pmPSoh{dJb8i-( z)q-xRIWcmJmJ2-IEW82`g;Y&T>(-6UAt#%%M@P??l;*ImZL){zj16_F{o4<=9tpXz z%RGuZrETJNZkco-glk^iENp6C+#K`;NPNnEMyPQqE_1U=9kVRK+_i!Fw52n$>*`jo zf+TwX;Ui5gi_2TMFTjP(ZJW7~JFgYaHgUpLVTp^`ezQoiU09;OS>*byNUcNl)0su^ z;d_l5ZFV+ul9HD-aSB*SMM<4} zI3eMT_IQ(mYun5SUQLRfSa=`oUk@l$LXoJ1xE^8Ba*B&>f75SN zZxOmbc?>uM9`=$zz$}0(O*fSwR;&7wNXiTxtdItZ;h|iUP~=i@;!Kwi%N@IXOu;!f zKui{wZko$=@V%mzV??i$S_RiEyxR=4d>{lfoU6$d$U%hCuhQ(><2rCTn0p$M76>3r zOWObir#W_X*KTb~UKlLhCW%8D+W0MP#w~$dp{s8HVx#Ujv+I~*7r~;ZjAsz^$9{EuV zVI~Xi!H&703qsFQP0+Vsth<`FH? z)`4RNhKy|D;9)~Tdi5ZQJ;*Bro+KskUlO(uW;sJz3A4f%-uZxs6q&Ue0*`}lW0;ME z>>$jhu4E5^2W**L1Rh{ycI(KaggL^(1IEm|3V5KA>|@}?2(q6r|MZ3@RhhFocsqc( z;tlUgz$3WK4MGkP=Ett^!T<~ZbKcv8)hfvm0`GMYcwBq~VFL&`M&J=q@;)K&5;l+_ z@4@>wzVNaJ`6pp}Y2ZBrcvzGjMBvp6c5qjCcoLrGWfKWGP1qzAJYUJ0z2V&uHk*a_ z5!lH}a-NX047ota$Aq2cO`c>}s}3HxWNQ>;4Poc0;1Owf`j@>A9(O0~;;!U#!os87 zmkGO82~TCR&oabC$Y#PmrzGVJyCsHb2nq0J&l%wT8+Z+egfQ^ZH~v42v+=zMcpU=X zX~IWP69_yK3QvB*Yt!(|Gdwg5r)|P(Oz@N_D-hTyA}a_yEziPhMb!iz)rKc?i8pQ` z!Q;ndI)VQX5#H`0GYCA_4KG;0J3sI^Fubb-k9Cum2z!&jGo)l4VQ&$5t%nuyr31Eo z1bKwO+cEG;iy|hJG!S?*3jdqO0s^nFDsl)H#cYPa!~63I>{yZY zglr-3<_WC1_}Xd_D8l>j-#32Fu#Ao|!Y*KJ)-b-mV&?H1UrPq&fX^1C^^J=m?G+rDl` zx_#VD?B2V(sr$6<&h8I)|ET+w?mu?_tw*;W<9ihKsOqt#$Lb!g9y@y+?s2BakHKES zp}{f1*}-#y?+;!R>YVWJ1X7kVPRch8zv~yeH||zh^?vSv?o`T-WnZ&#w$Y zhIqqF!xF<0V^?E>aaU+|=!>DRg&qw(7kZsn@%{M({zZN_e}w;pzY*pYW(bQ8n-FFR zn-}(U*vnxj!fwFJH*vjI_IkG02fdlzBYP+IuISy``$X?w`b70v(C48(fA8~rpM!nQ z_W82U4}DdA!}}KYeYEf2;RT(OeLwH}Yd@}E-+rck)B7##_hi4f`+ePC(Vy?1*Z;x( zjs4&0e|12}fFT1$56B)+HsJmNe;?2^;Pn9?4ETD0IM6Wgo`KT`&L4PvkZn-ypoa&& zH0Z5C-wjp_o;0|8@cO}f2Y))mcgWBoqlaV-DH?KY$TvfNAL=)>a_I7*KZkb-9~_<- zJ~O-~{E_e%!cT|)GR$vS zuSC8cc|7v-$Qw~4s!LSAsF6{bQP!v>QBOp@5VbGrpV8x^AB=uFx@EX}xMBF*;k$?b z8j~F}Bc?27Va#JOEiv!JoQwG(mWk~i8xdO?yCn9R*d4JaV#N_*BjQHP90af%`g{A`JM&)az0P~*-}}J5Pu{!X-mUk(b?*mbx{L`KGjL4An7A?KG1+5m zV`|4N8}rPVgJUj@)sM{>yLs$y3BCz^6Jiof3DXmt3HK*Fov=A!Yr?H#vEwwY3^%|Fpo0h|K>2+Jlj0STx-71yu$p1xxw6Q-eEpq zK4Ly@K4-pczHSyKkO|%s0w#2yFmOWTgpm^xCXAnuIbq6#*%L}8R8Ckh;eiROCOkc% zX~OmiuTMBK;e!e1CS0CyeS$ENnW&hkny8uRJuzZp*~IM=4@?wNUrjxl`c+zJnmNsx z_Ilb!X=l?(dQy5_`q2zFBR-=j@s zo;7w>)vSNcW@d-ZUT*QT#93xq9=5bt{$csNAhKX)L21DQ1*;2QD)>jicZFPGOyTUp zcZ%4ejH1;=8;V{ldb{YOqTj9ktufX_Yp&I5U1)vOy3Xpd9&3tS#n?Ba6qv zGe-5r4-~I1USI4g-c$UK;)}(<*ch9yt($GIEy0#%%d-{Rs%#5wkJ&cbT5Nl5@7O-H z{aVtsWNgWtk|#=DEZJ6ax#YGz#2#hOv`@9$?Mv-X+h4W+)BgP&^_;*t#yNxMq|Paw zvtrJMIosyEH|Lu5HYGmVR5NF7qzq%5-G`kTEs4ebvHT+baCJ z9oAlL$u|eIC#$!%f1+=DStEptn^pU|!op^=s{Lh+_^m~MLr6aMOO4@Z*!N}$X+d~SWoA7Ly_SZ*>w1L-}VF9+LIq2tWU4>M& zFzD+0Lg1COg9F#$R%QFSjoS~N2o}hw17dfhI9A;(?$ry=34ySRJ#LL0Hfe^~Clr1# z_)0IlEAY5$+3Vu8{-QD_Uo?j5zFDhf4zxrWbb?`vmbnf)7%2wbWG$|(!?n7{Acy?e zCA{QvueF7bVH-u-J^zi2Hlc* z+Q$sKPo6dafQJpb2OjxKYlp52HqAZV+V&iPZE71|VbEQL_NF#S>xXG|HVI})iz3XR z`wT$tc0rN~!-cO}q~-1IV_J#Gul2hO0_?;#3(SjRd%q2Cf?+)F1jehq1ATD@w0sO~tj zLbw3iI$eaXXK01{#IN;YrtnYISgr1L;NAIV;o|`Y-J6@{-t>Vjpa+^2^R>EC19P<* z$?2ojJ@d$pw%c{g%CXbzTGvK((Ce#qsaC4(dk#Kp$go-RLswo?33JLdO}}-~ z3$JSq9yzpGYt7!UFFRCs-x@8fuVS?TVuLp5^(ES%g$oTqujd+cFDyQ4fTgK|H|WH| zO>^6%}pGKF~2k^Vzj!MhG&2o(V!D%)D5jh zR}7vmtBzUQ)=MEw?%Jvr#!Ek1iE8oP1vBcWEx=!`7VNCww_p!!U%iWJd_c==xv3m# z(2WOff*un|k1q?xjZGVxHo8EKH##s{mwu zV}0X-#!*5S)ZszmJe6*v7Le$p=&RMGKH_SNb1{v=w|NF|n)`pEZga=0S}~|SD@^OD z`n^#r`q3)EzlnBx;^y=ERqAsIHQK>HWoifS(9WbC4xfi@EZpSiCfvHYTW?>!z*!p- z^xbG}(C^P1c5U3Zb!Diyvi(&AfBYCD3^-*FKD$|_@27?Bzkb@O?M2vf#wAVC#@>8f zFIGB)O0~GSy$o9pz*a<`MuqUr&A0S345yoq>|7lxE^Xh7ZQC0JFWk)7@(Xl$>gLCK z*OpqF)maD6!fo8zx}~8hR5U7gwl?qEXKS|1vX@Sq)>67FR19bzkE8dy3EO;gsvdT% z%GJ_Vmb8&|t+z^4AbD>}`(rua25OGM6rxWu3=|Rpr`=$R_thGPv=<;Of&FQ4Qy@g4 zpr6}PZ~hM39YNnF^@bhBzEA33HAD`q(N1x*vqMMz=HK;6xOw<#Zx!qsc>S@fw&`di z(-sC3{c`i+R72GAKY-FUy=xGR_Zxz~7k<1oKwrLm!2;m?m1Wv3>UG+n+pQaBz|Td` zZEpqvbQg&pu{e3W#z6P4RAOlR4iAASW{Ji>iTV6*A0p8Q8joCMgnq#2Z*Td-e#oey zWri=;>az_eS`MK|7Pr4f#U*!p?dCT9sH?DzdUdGk+}%0~_W~RHH3}*q@WGp}rWyoh z>0RLc)VKvUb%D%oK;D#U;NDP&KPR5tgWg2K7a82}A;0m3`W@;M~@# zT^k$MtX*f+317l*AX8nRx&(;mZQ;!dAzyexe^xN=y13{3&NDq$wfjI)GFN{=EB>fy z_mUtALBd>>P%qAf-;dO~Z{C#l)gXoo&o?RB{&qwEAN*hpT2Lew3Jg3T5&LlHoHW(e zrGpF`O4k@S?>_m&8!fvI^thAVw5i+X<{0o+kTQiRgOJ*$i_&7vR!kkB;@h^l@mjb) za01boavZ9jZR@Ew889;fU>g!=4Ep5f0z?li3w=71*x@6xCiAIgwgz@q>H zuSp2JbUoD|W+zGY?*axdfh!SU{}xn$VRl@iR!LrDXUy;Uky$D<;EKxoAH8 ze>i&+fGDf=e;kCF!FO4HHbIx=2=R7M3 zmKInVS7>DGsiTo3GcuVJiZ4AK>9nTR776W%rd(;oy?mTA^Q>5|@T-)*&DK_v93?ZQ z^y0JqGxTUnTDJD4L?^a%(>RL>MVeao6nkKb)0(*U8a5ew%^2zKY!t{n(LIojI|lzh z82lE}J(hG~OOMg-glCJ7jM&CE5%r|6h4e*w1e<#@g3dP*|7L>!Y#n!2%KBB)iz5N{ zhk&~&lDr1VJgNh=BW{PL0;GZNqFhc|nKUEicX^v!ahF$&1nF0ATi+};6xY`)q{l;6 zX)4Da5g>ipzSztIxwrYr46V(4eFLAEbIp7$M|~L*MQg9q-Qt#R zF_}%+1!)+b8#_+ zEpeK-jkorQb-QGli!I%p_uvyYEHqI%a=+)?3I(H-n=V(2VK_1Un%9p({qqrHp1DvD zoE7YSgkHVRlj)*}eqG+nS$q7-lQ3Z;k4+Z%+??AVPZ002(O@5B>b@|Jtf!q~xb<|A zkxWF=8v>GE{Yyy``KX>8L(P-wkiQg`=WT(Jf1|5bZ=IWz(+DcK?5N&{39GwI%I(?LUFBFMt6|gCIudQ z+xX_k9+_?-QRGR!d77qKC#FJyk!?8XsrtM1AZ8`B`3R8GMp!3eP7i^a%2QwI$gBTT zX`TKQ@ldY9!nU{@4r=1Yp1Y$#x!F(Z(5AgCRYO}@7h#=-as`iCnww#rmrepWRQ$h|6^MY{#^I?Io-j>UQo<$iB|Ja^?6=po zP49opS1acg>eZk8`m;v8EGBd6P}$LWQ}=r6Jh|@1p~ce;6Z*;2pX9__evr-ivO4md zu37E!!HUcCzlIXi6R=*`a6T~G<<@iVgVK0YFAg@*Q>*Hy9BaVHGL!>_xIE|?oX^tyqY9_`!RvUQE{9%I)y{+aj!neEDtOdV z_BU~qkxP3r@xPQ8QT{iS7yq_A`RyQ=`v0*!mI@FcSSkY;{*TGA7+!cX=fB`!0}hXY zgRKdNL;O8f^3No3_|tdPWp?HKnbh)`>yr zTOO*tpWL1DmlB|Bd)jMdoUjQ{pd%|ybftWbxa4WYPuXFl(mD&LArcrxWM`2PrFa*o zA<}SYH6@v?vqo@7n`nQejT1;4ydK^b-8BFI^nhbxN_=X9Z*F+`+1Eg^j3_?*_S_w< zq-3mDz0hC}o{XWdK6ldsNxTApkg|ptkRKpE#%*!5hL_STq%+d|>2aJ+BNK)9S6ST| zbuPZ1r+ypcfH*)-1~=3~Bf4~fk5Nwt)A4DMGBQ1)VDbp9`tVS{sr@Gh=9VthM@P&2 z4xNgu(LJoc`0%D*1NFetdzFlrH3a*V_14jT!#Xm>3Oj2N4+Xpdz+Y5<_YOEYx5=bT z{y3-wR})LzB&b)AJ?>UlveaZ-7)h2saeZH*{(143mN$`l#l8xe>S>9OPy!W+>z{Z$ z*Y)EdZdjc$5_JOz5H=?}@yFSP*z*}4Cs9Ay9K}Dw=p>OK*Pi{pC|&8{jB0D)hT4hB za7Mk|GJnJF^pm*LyRbXm^vs14jWspsuQP?U{vLB;K$y>BU|kNq=r)UPIYN{NDP}0PZVZ9Bkys z-b(h9+&;*W-T3))GbSqpq7nd1zKG$;S4AvGnqCb3!W;{7{w)r8dI4Oqzd4#O0Ma9L z07u3&cealO*A1)dB#!kxk6j1AGQ`ddCx2jhHGhcnrL|Qmy_6+hIoZRW1*IHg$?e9n z>CKUS&1zyS|O66LT8PZlSkmLE7g9e!_mI`qYb<}C&`P3I5X zm0CA4vBn>?J#rpoigR!unZ<=>C$WT_(9kh!2T%po>1f+QP!1Zq&QL-2Xo`v~#u^>zb_FV5 z(+##HdFrOrR4tu-59*@>@uwBDVj+urLaS={hza3PqyLMv0eqOb!TgId2(n(h>Wx$~ z#SG!Zeh4R)K{&C$3tuMA#WqtP-Ohz@Hy`pf=AyNHx}ZLg1d!!PfH{!Vg)b5pFXhx_ z4x`wo50h{ZXA2ba%CInY3TgqcVE`4n@anQF;@jO=L!1c>9YxM+=9tADAuTAVurB^$}uzASGqO1+6vdr|EHTH6_vff|SU4K02SsBgG$Mad-r55hgU~V(+|;Y92C$K=d#- z)<`DhVm*~~V7=_XdfB0=o(5A{aWt>~a#ub}{1jDmV7>Mj!-d8j3D6-e@aR z8q8rUS7f=sPzq!yz0Oby1WM{FNert@F8;}f7==21B;PW_m+uqqZ*8(3a<4pNSd;D} z^N$Gj$B~{ll#9;FH>i&l7nGJ5_2i`DpUuA1mnFL|>Y!DTYstJLmeoFioD`g-MlY6- zz+8Q#B4Dfk&ItYF86!h|?bcvh$>$noJyzXhJw_KtclSpn456yV!s=?he_pBIbzL3A z6ZrL3JG2VF|-yi8U(8DgS@~-X!17A*s=xLgtYl z21_8VY8eK-Ew6GUoc!5|zXXxynSJVG5NfVjjTPw2i?hhd81B+hp6NjXcD&`fpl(Ed zDe@bAG1p|V%>yMF?c|aL))exNA@8y;Pik$gqEIK(+nr{D(sv}$M__M?1Mh3>iqWvS zU~fvU#jZ|(F0c9kX$8ZhL$nq30HbxN;&WcI(d$76)DN{w0t*dka`h^v=q_H8Urd+f zDxML(QaAEVF#l8->nTq2=9hvQ&U$Z`&(iJW8);CM^3s?zrM^bK8O$J^Er2|YgS3bV zbHTp#nHKxzh(qzWgYbT8DuYV3R@PS_JQqWAzV}XkDd6v(w>2c z*kEB~4Z!=_=5}Hg&t#R5H-#%wst5TTSLjmyW+hj#mNyIFDFAjCIfwK9KS?<6@3ZqB z#a?};Lz~GrGfPEh}XQb@*W_=j{F{({r+k5twkI}I7oSs_MHKe2=1DEw18 z3XzYau-t5Kn;u8@N91dqfd4s;vw$9FC!oD6E1SnuZvl10I%FT#!Q3`>{Ozsd(b<{8 zBY~+nOSYo9IcZyS^pVk_U^TDjOh>L+3@;dtZq4`y!_l9<#?A>uiyl1XAhKXfIuOHu zj8CoOjL>ga|IrR&^xt+sjDD{j#OS~6ScsmtgBbl@y9vm6J6Y_2$w3vZYLD@a7Sf6p z`gH&bJvhj0t_CohtAi-?>i|}0#RNWCe616Y0^`w2CHP5FffcO416E)KEAW67SkY7< zgFM#25@jQI6~!7o_-L{HU{(QVf|&mgX5RH1Gw-^`%)5SL=3Rd@n|D!H(E|%AkiQA_ z;$!@VwR|pX?U5_W{5l0?Zf{1JU#FnVBUiL`do%j$n|QATz^v<~p~(nEfI?)Sp?x$4U| zxh{_|CVyf`E@MQH*~Q}azGa`V4_xw_Aa$pam%6bUdYRVqeTX}T9UpR3xB1p!mc9}^ zabXvD;s6%c*I_f#WDMHMSf*{!UCEj=u&p`8qZ8ZS? z;f^~_tJ@J_;UUl5XFuG-V%RBZVzd-O2?1s>61?~V{Ll9o8chSjbUT)rfu;H|G&|mA znjMF;nnz>(UXJ0)R67LH>pe*NpM3n>^LM>ei{qVi9@b;>=aoNTl-&sr2AbTg5OQW8 zR6>X=9UH^Z(V&`l)e{@5`DPtUSJ}ESCOeHg&NV5Jlra^Oycb%eafLkeOMvhOi~7NE zPW^KwTV_qkL~F9=h{L(wL_QM(L;C&sIm?%Bm8YsH%MIpHvIVTb*PS=%Tkj!Y}%kpT(>RTKpucUe_vu6eJ*LRY`6F@%@*|?=(RL{!ISfB z=KfZ>g=DhDCa~234B1M))U5gfg%~mt>jjxudv}BbYx(Vh`b<)D{(+<~_)}~hUSUV} znWQBvDnLLTND5p%FBAmS8HwR#$7h6aRZuT)E_fLg_q6SOZpP3^r&@+V8_Qim{e3g& zF@R1cs!sfwXL=`5+P9lQSZ!lj|ISFv4SR!ZM>Ydo0zkg)*C?KBIm?mpr`>RLkbg;i zy<8`*9nO$h(w<$K zQraVObp^Mo=_;2}U}^;t=NqP}MS5CDcUBqkVuT86vtPH%1k5T+9!O4MizD5BpGxH$ z$qzFC+H#%R%<4;>xW+18eOJ0mFX1k|o60I{zDvIqwwl$C0YiRhxk{1U%LGFl^pzxa z;x3S@p}0nqaE%h_A@NNUk=BBueS`*cAG7=Oe4;5f8$@EVM0f#%{bDb%t!7Wi$Nn%q zYB%zgt^q;WdExrF-I|pLSC>|5NxS-+4@-(-mzW_CxObij1hRZ4$_hgKclqk(bK|pT znu8496}I05PzF#kT&p4NF5bNV@Irq` z0NRatrEB-mu#nYtD&Mn*q|8If1}k-gShXCcfK36Ei0eBPPt~ zAEv(_2GwT}wmm_?8pMHc3E{G>j?u($3Gs9-kxw&wvbluOkbQc|FF*0Qw&O1(o)gb% z>;|Nds8$wj&wp-a$$L9E!JaNHw|^6xwGULCmKp0UoR+>`b_xo1}l$&TeV z5+t6l<8Mn!ZtemJ1nYKL99L4DZMa!vIZgChGPvhWDxVJ{E)0sRJ|-?K$X`p{i4CKN z`FL0_jUHyJ>qs_w|DdJ@i%^_2w6An5e97TWH4BPtQ3Qi_e#ta1u`0p(91@$>VoMaH^0PzE=JHJD^uf+75 z8QE=DzdJ0hm2PV!g6OuV5repPFhBh`hXF=Pci{}i_a||h=6~~H5gT2&u{pq{~-unJs!@JXNWN9Jop~V|2 z)NkB^uuOA^J}z1oo_{2^OxI9VS#Kbt=+Y3Py7Dmpk@kXr#faWs*%POBO;+ z@xeYQDw2NpaQD7~8+OAgae>M0cXnL_lBJ27&1su9>oSF{+f0UJqikJV)VesGXF_qc zfm|Y;VC_dbL@74V4x^!aa1j@z`sny9zmtjjut|6}{*4b1bzos6Q!N4xXw0rCd6}t7 zp0aIxZlvfdg*>u>2^0@j3;~sN;|UHd`ilL!Zc(u$0k&^(UE6y^KC-xdV%a0?x2V5C z5!+01up4Y#UeLiLb3yC) zBtR@n0?7U(z~I)cU^j6oyNM-c8Nfjk-V^e1(U`#Z0(cyt%K&_j5r@d{WqP5duO&(m zIh+wCO?4btp3Mc1uvW^**n4k*eWp0P!as! zywJwIn=4p`{Ka09!Pw8p=wfLwJw^K{t9Nxvy}-OP2es`kO>!$Jxc*}=VZZz~Hsh^3 zvLL2V9Vm6Vi>2_NYlpFQQ;7)q=n1eN9$f?VOLI%nr)V_~3L8zd^IanUZ6Ocu1Au@e z4r}*&p#3FA<1z#AWv37@1<{TCi9#)SbjV+W{9`P?52L@ot>c;h0tPXg@d+;v;?u{- z;MzL)8H)N?u^G0;%z%?VR;VwJ^Ij0{t$S^00IyJehGm9{I4Z6ZFOSBU1#q9i&5%|~ zJVqY<#FNCGNMG}O`o-t&7~mpTduJxuaH9!9L%!L zMuTMmFs!qyAd?%|In5s;&o)dMN9LHDa)ay}1xYVKd=Q6)-(=+A6C7z>P>IWVzAK&v*1fC_5U7r1mIXS?WR7)DCw>WCDWuhk zw`1MNS&RB$R}R9v^C|Xps|{MDI|K$h*18h&i{jY6zeAVpQdh3t`XM%}4SV$xXu@X| zph=GP4R79_a?5O2iYDX4qgv<0T0zhvlX?liPiP#NmA;nk8EY8g~mI^}>;=oZTA| z_vqD^z!y>9&4`NJ60I8(5YXMwQ!xqm(kZ(`h`1C~`_!9R`bjg z(fV4%lY!4XAXQ&K;91#O?96!Atog^QRYqqKx%?^O=w!2s8sjBhi|j#$w$!{~}J-QK{V1&v5Hryu!0_t3hlh!S1t;0`n%DX^QR5xoZ9aI)P(( zu}5C##z zR7;U{Q81bRUF80YJTzkY0;WqXsg@ox78mb_eqiIX9*dwq*kAtlOZxBDIa$YEn}3@l zalgm0GYg#Nz1SMFu{HMg=IvZ?^?~giGGD6XPOatl3Tl%FApAT4V)E$C-<2Mt`Nwhc zm^^Uw01{L}x%pchmInp(o+JRzN&@hnq~5$bKMBMuo~MB7WkO>IkUJll2YU0rNpDnS zfK(_qpQ+>aF`5MVfvoiYrqbc$Cy)!{I6JveZvKst3ugp%{&7GqI1b4C=8uD1 zKxOh5x`bscG4jEj$4bXx0Ku}ep!P-Sz9{Sq950e(?9Ge9xLyGfDSVImS@o=TRPHOi zeUU%=ua&oEZ(!Cg6SJX%xhUs@a=ED3)X1sL(o5Kcm#{gN!Od>sD%T4un6MJi^I3Nf zpt}Th;Z>aPAaR%hJBe|a?Q@W~3y|}60WxnFARVPga{ewnlJl-IUbECa#_ek9;Y?O{ zFIM+V)ZH|*7n7Qv&8Yn!hn-9nM?v_OpJbQ5{a4VD;%5-T2CYO_0_zJ480-|P--9b9GDWpbODK<-i< zKUq4?-({rK#SR>VZ7+~g`OTyh&iRYDSN`GnU(5({tc;& zokO;S)wgvV&W^iD?CMCe-yKO^nHXcY_$77#z`)$X><+U0Ca7-!>VgDxgTd?;&voJf zu~=HaI)Mxo)HeZgQ3AQyl|L+g#8~d?`x`m+&8rMl+9%JUr2ge2@z7wFC+*ZYE;{eh+&C9$oo9;&IR;_t~*zV*5e_!7N`J0v$^2Inzcd+IO>Z)OC{s~tDybINzQ{HO+nIqiFrG8m z!cqfJ$dGua_B_Trm9k+rD`oeQ7^os~k{GDT(t90<{tsiE-h(=GptwTwHE(kjM7`od zsZ6!M#Y~YTK~Vba6-(SSPu@hO3e~S*xVo4e3(Qpl84G#ks!Yw$aaA|Zl^;8K)KD_u z{GhstF7p@84xgd(61Qur^UJC$vga)r=jH!~pFX;5^|3FtqSm%uv-sl$djmf|e&+LQ z#+xn?^5{WJM)^6Gr=b5B2+GrfH_$bN0j;uWD(lYZLCD zuQ+h5M1O4Ik;uZ;E~*{3ILA^m`36K(5?qP8o@SP#WQiByU<2&xMLD{JE;&tA#MNMO z?&}TmXD*pr_2|~Es?KySo$E~<`WjR_U|M(7!i!=GXFE#!C{#N(aHD;K{O0Y3FVoJb zXc=7zsKj`#{#Aa*k32aA%g4$Den;X*{Do26jsmW{o+mqo@H;@Ph`3y5L2YoB`-dE` zb1O9Rb^QQpBI`}$XOm+wKvxEHhk-cw9E|$=0EoLmgN`BY3B=u~o2MP|S|IKQ#Jf+n zBW`(g|Gq^+d@^n?55l`UQ(5=GIeU719B@G=C zc3}wqG&>c!i)~HxEqQ2YYHFx~cz_0O`;c(j-VO`+{=~=7~ zHer2Ua5~+B_0s|VNWxkgUSQ21#Q2sN`38({3)V$;tlwJ1(e%W6$C^5)8lxmnNl&SB zB(7$sD%xv{lt)h4v&F&4w`rZ3&;>w9cB`q2HLI^a65)#NsdvWmbL|JwCRE2s)tnK?> zc=bW%Hd3!%0nd?GfuZ7ndbnJYN=%0W)YqD5`3BoW*;I42LcK6s{9cnQd6|sXt9M1g zOO#%{5Xcz~s!38~{h)l=t?s5-{Wf_Gt(oMpBufJXyLq-|0NVliherLz_upL{PF0Lhkj#mnt zZis7-;^_ZZ)Ax<06r!aaSbDnn-f725oQ&6`S+S3h;tSL z`&Sbf((SUAE^)(I>77l5sT=$Jm;I9gu>@iV3c5f<$D$lGF8v~J+^EM z<({FDJq;7Kj+m@fi^1{1p89BLD%WNP2N^uqd5zJcX7Z9bvs(Q?YE)3v+1gN}y%%a4r;ms>%PpB<;|x<%JSS^?wuKcW!bxXHVsfbO zm@PhD+Hvurll7_|bg=cY<5u#k(^fiI1D^`#tdGH{Q{CX{`x?{Z)sgZhkTigh^AZd_ z-wZ?cYE0saNV#o~vu&A4T&7Ts6<3lqj>Hp(t2>ATOJnu0oJ`+q*Ynop_K!}v2j6)q z-TNEYMPCo|9U@cB5e2*+XJDC6AA!bG#mAp;NIffvZ`jkTYcx=rN`+fZSvfLu zco@3Tcc>?IL4{^i_>qZ>G7)#F!bwn=%p>hE&YzI>8d&JwmtUwTs;~9Q9|Oa2ux00J z$f)az(?!v~lY=6?4D@Pl1gDxvzBj@!zus77bj&neGhGobVlU1i-)rtQUWBu3mtpli zdkz~3hOkTH=zH)-I&?zqojWykSFY5I>)m^T=TL*!X^pAAR9-j|t}p$s%W}44hrJ};-e#DlEZ;?NAcA{@I-r`_)PoM7Yb5kP>!}F}HP<#)+`D1ULKh6-@X*S-00+n*s=-%;(@Qcp z)-hk~<#Y?4T8(76j0})R(dEl{_WOouh&+e9A-iH4hP=7cxhOhUMh86o-9Pe%JO<-3 zDDsNjY=VXG8>~D_QS}f#Oq}SU>BFgdShrX5;*_tr9^#a5@Ix~UX`;uwytwf-q_QH;M8Sa2Mn+ z{i@)_w*DNg631WT#W&yK@oUmmj{G=>>p>@(I66r}hzzde=_nvXM}31I5<+y+yKqts zg#7mMQO}@5C*^ZU2ReX&q8-p7vrlj+#n7RX*74(j4V|=sPiM%`^(T0`o*_fmS3tRu zAw%D|#?vkg8R~JBqkDl&qKQkiqjI^DcMn1Bo4(=Q*}x>e%U1&n!tDhq@(dn{`CK)_ zBJo{rCvXrQPH^rFgT!_GJs^;{0gOb3faeL`lQr*I!TYer*Ina{tm)LNTxT>)wwpMz zU20mqTZyL%MuF`920x@xAlu)CGZM5fw!^dxe5QS}J)c7kFaQik4zg)coq!>SG!A4t zro|a}knNb3=?oDPc!DQ^3>6Ys!IPy78S?Qpo*ZT9kX@LT;qV*A2XV3d9KO$ITot(M zf>RaQp~;b_3vcn!LjGwkGR%->kr5~sn`{GfcshtVdB&3p9-d1~S=qUUglt({OjJUM z&NHC0v9YxBbU{{fY_1_QTb30QnYBPS($l+R$7=6u22~&OfsyRr2Q?fNF2s2zITH_& z<%r88sk=OFhAcNcVrQsswAa+0v{l*EYlbwVW^`EP^@{>;pwkrLp%JmzIwhQ=`5aFs zk`KH&nlB#BB^`{8H8|;KTUThd#wDi3>HH%@rW(8y^HOCoM<|?69ln@5x>iw`Ddc5k zY}mj=!2iZW0o>sMW za6rho2_d;(7$V=(_?Cn<-l{AsFAL8Zt5-ivdP6=hJ~KBvW9QCohUCob4OzOA$4XAa z>vL?Tq0ZO^`f*8H5)#r^=_dQn^9spcw(A`O;xar;TAdsl8>NlTh|5d{v4f@~V&kJC zwd!A!pf@~S;~$z|R-SJzJyN)IwqJ1QJcFu(nGF6LhHHgsHDMB)LXUs5u+re^BYS1ZLY%0Ybhgr?JS$EssoqrC1Kj{4V`Q)qZ6|DCuopU?y8 zblC>-3u~erv+G!8!ut7I6PghxY=f@a7JW*tEH#DcswJmv$ux*>0Mo1DR}7F@vv?fi z$Xa<(p(#tyRb~cz8|YjUS*vJHsOF+dJ%d7^DyT0`49{Mm3kr`8k2GwMZzz$)$W>j; zoLN`hG!`Mz7>nkd*k_lsD+a+?p8Bh8B zK>C{-6>eXMojYS47UpFcO@`E|vYy3kJvKJ7^*BobyqGV0nkpU>9INa*M-B4@Y$e>X<2xa)Le44o!i)g3Qjn z2|qN({^fKwT%6yMO8U};QA1EN`q~V#P!=Zlp$nt!-#+*b$FNN$JIGnI`H|CB)MJ*H zUn#77i!Yc_K9sFX2lCo|(g%S4Bg5flTpm{DSC48Qf*e=T5lqc)E7|9iOZsTmMani{ zf--cKdFAC<22eD=0#h$KCpjW9A~_shs}ju#dCA6+WKKIUJ=@U>>sHGA<0HdDbZgh9 zrLO~zz?=2z6Qg4mNpi{pG9<}J=gP?}vPYIh7e|2tq_gN=8IG&+8`6O_&FThLfcFjT zn`+w%Z>}Yyy_8YQGU8YU4kt|IOGZWvo1`-tlolN7S6Utt2j9v;^CIKoqYOI{bRpNc zvp{#Dz-LUVfv%CK#&6n?to6<9|446i9v4|rV<3y=!!`s3P1UJ_xIQ=nh#NFq_d!$d zbxlIFEXG`rP^4=tExTwSKgTHS3qP{y1n%CGEqqgsDbJAVCyP}~4hf#LBy3wwg#Hmx zVHZ@?OQ-U9b}D0a;QVPmDR7!&ruvI>jpPk@0XLD?u(JBV=&PcT<cQg) z%YRdtl2|(IG=*NP<>p?!6lV%o_qIY_0b-}J;k*x zHDBL`d%?qAWSX|7w7kwDM28fh0r*zh#Yk|K$dWqj*zde zh&^^<59jl#-^aeuoEHL1;5N7~-?B12YQ+VPQH!seE||z|a1mDsPG&3o_Kl~vK@3Kc z*T>M;@i%=PD*Sjt(NP!J-vi~)xx0#fzj)|tpH}2f@@yFVXO&Oar^rXl{3lU7>>k3-H40s z!qNQ7FEGnjOyI~6XGu|EAlAnRM5gJzed>3_NlRMQe0O8Jo(!b7HA^Gruk_pKB6d-f zZ2Uatv*lUY?UwCZBuw7yLYyP1Owl=M$Vl+OX#0lYq*bz>I+;i-Mb+k`rq2(6jo$M% z5B{{{e;h6+IlvNjqO}v~gV=3hx*>~4P}Lg4dN0`$ITN|xQ$*0uWc`yPM~~6P#-(qK zHzY>OlC!c?a&D-!*GU^!NMU`}nmg)++obuJbLpv~{K7rl z;*UbNziCL2PsUhXQ+yb+<*g6iatW3`74R$JAm5y{IXMaIbkh+sSExmVkR#01!7^}F z?t<4$9k>Em(&YmKeMe3%xqIO=W$2ewr5izqqacF+-s<)sXJnd z4=KVrS*U4@7)HBAl5YNr^xiUaXhgQ3Zpdg)>OfUhUbo5$jLp|;t~guXC|P&0{k_}t z$W&{(a-S2&YHCTWA}w)qVuChlW70;f>$hn;%_Fi>F@DwLr9GOubNl35({>wZB09Uyhsu8)*NQA$4$WXK7~xFBOGbly!j&w=N_EC`DJzSy@>8d zcy(k?;TJ_kdTDO{As4a{5~n1#F&wciJn&@L^NEH!el&$BiKmu~s)lf}RVJ35?NiO0 zbKYFx|E`PpNb%*ygOS1_tbKdUF83q49^qN7mJf;#6dcE%#z=vnhc%u9WF~jPteS$e z(AFyQBC0#PY}5_|0>iK^O?E4&!?*zGoQ{sXEGI$qFpH$Jh#VoUK05c!W+HppV)Bx& zEe-#C;ioR77aIz}+6u>Odox)NY+ujPki*xxYuBOT8%_fi9ev>u>GyKkkd|NcYpCym z$yY-LYI9O|rWo~+$+9gmo8sf4zD_%McSjT>p8X*=!QOh$coTn>LC+Q>BI=(gJpxPU z(P^AG+#RoU>x5^a1~RAyJLp^K&{E!wC!_cVJ&J#b7{%U?q-+z6jCHF(CLqWNc{9fi zrw`%`sn@`j>~0N04Jlee4bjUAv7Oir&byv?fHf(~tsb)ewmn|Z>--cCe+A00w?C=d zWPE3p*bdAFsWx(`g!F*MA~+?xH6hR-G}^>zFn}cAWw6&Oz*{ho8!Jko5!xK>1`fy6 ztB%);KWfym9%f@+j#*cp7d~&^yr5wQFpF0mU&uwr$!0T4-{Q=?yi%>juV8XOaAa7N zUOZ6!9G+BVM|Asf3DZ@_n^47Yd9VhXa240EAUltnP|aqDk~0@HXu|el3y{716{W{f zoHS7$xmCsnHeYU)tn=akR_&ijl^B6x9JHFhLcIs2djI3_f2#P;B-C67Y;9on*oXB1 zf(BWeFclwV0---CQDJWml>bYSme`a*2paR;V2#%7`zb763Pk7J{ z3t=fv{{;TuO07LUj^=0wwDy~gy!pVsgs2{rub zff}A9p@u&_nrmq4?rLaOsbFp)bytNE^yMn(0U+?(KXw=NJvR0V+#D+q5Y7zCn`tIG zjVuhO3+c2-G7TG*L9nnYdE~67kYg01*w(R3batvEdJU7f!E2*Ob`IRpj>6ZdSo{K4 z4(YKm$QgyNQDDClc`ZC?5_jlSF0??!yT3Rbeln%*(`odS)N8Ao*|CQF=u|@v;~~^YmX?ur zZ}DZcT_atJElzuhDm*AujeN~DO`f~~jA*df@tXUcc*xLkDwop2;HuYMMn8(gJG>+H zkkNLL(D=jX>^50UjzwZSCkr{Yj1BTABs8=nik+5mIdqAXgXxfZf$0$8z1mDx+j_`V zry!^v52=V8M$b6!+x|-<)dcJ8+7p z_X0ey)ys~A`qm89jhyT=#GnowX7R3LG*%!K#~UijOKNnDM`n(lu)t@umtVp4382mB z9O|N(;di9AwzQzCs${{0GJ|)pub-Dr1$A0xWVl~&xh=UlKA+>a(Y*n?)=i=^KuuA*fNUfkKt*r6Pzmxgbt{7K$?2dJJTkMmAQOiNp*hg)g{blIf!Q0s014iye*PTEr0)*JjD-YO6Z~Uj4*f zmcLB{shUFrc`J{jZxMH!gG@zyQR1=SSdsUzlJu#3nCDdNP8Q|LhgFPxNQOh+c^w2s z57Og0ltsqV;Ul{a^U+6>MJC!KT~TAH!Ki4-oQ}jDyZE(^kekn;eQJ8vOxACpJ)kT? zT}{k-C95c+NPRV{uO>=dY_bhU@UR_t;G^T4$uF{WQDw5d7NsB`&_96BRHobl*H7+n zO;24R_*x;lKUtAy-E5l!St2xpUSl4$$pFl1d+{^P?*(PWMdpYhR5pRS4(g{T2;!@W zj*gBE()rFSB635a;=%nNh=HiJx8{|2PxbesUG(&XV&z*aS4G8T#V>vE`uIuw}!Rty%;iOT+*4;yHQRrt~x| z#CHSXNqY|d45YnqB22?$sTU+&@`q&&r}cjF2|mLXyrLU2vY^`6uz{@7q^72&8^}b( z*7U9ETl7^G7YnZG8ZU;1>-#B3wzXrthNAC!pJ#sw+Ts z;#Ig4hL!&(v9aV`x*D*N;$}I;PZUP7RNtv+4FrC>&;sf}laaQ~3W}Oh2CaaHGZiO* zhhsSz?o>|R(7+1P1GGC!?n2f(W|DWE5D^ddA+FF;WB*rCSD7mCj_KO(*KwAa8}B!= ztx4Y07<04p%+c9VQPHvCVbD@EP`UH9dN4_UA6Y$Q$jGT3sY5+D)+T2N`)}SnU2+=2 z|Ni~G0=%#Z6+~}@E~;ZWq)!&7Mnv$%M(qMEA?gvOA+zO0WiqUZDGI+Jnd)|#xD0z^ zqm!}h2zR>-j?VGBp+Q6Ditc2t&0S`j9f=G<+~`;(E_139zU1v6g42yF8nJ^yd@|xk#8n!KdMWCc`N9P8ecRHvcz`Zt zpnzm8<)Eb;L^c(d()VR);>J|DZ7JOhWLc&N3BVO{KqJ0H&~OI@4sA^nzy^iA1f-YO zk_GW{wc`aW6pPcNY>jwX{L*$=Vf!vZBmN>UDwSDXY(FXdgRuetdigVPSu?P;Q?|zT zCE&Ah-E`6s#46V((|Bef##hsL21k^O<9c_%pUmf~Jmq2;%B}$QfRXHnzjD zIh+ompLo(Fv=nj6@4nAvv{X5?v|B+37uEJyEGhDC9%&E0N(n*9}X1zLp38n8=-lb;bJdeqB<{r|Bxp=*1~dx^bo&?BI^U_v95p`>v{1P*zgQI4|{0wmu~!d))d&NE1bvx zsj>6od06T6LLfi#DWXpI0@4SVVVfh=prNSFQV&2e{k(Vvme^z_n7pXy%nBsj1;w}q z6yvAjU0B?}qBV*vb|c3H^+K|Gj7Ghy*@d}Kd4M|)YXL{;y|*lmJ5rKo2$4ga0rw!P z@A(nvT`udKb?zg_jzsU2W}TbLeb4(Ly#XV@lEabwyAh8=j4{~T%bch~(->R#2tV*6 ztaD*C!N!1cYz*K!N>E^6TEOU#GczbmbaU`Me6o;x3$;xHCJ@U)dQ4%WA%-`2M< z0T`0+c=5b*FU}fhbfnHkCu^W{i%W6V@oAootwt9H6{&70$XC%xfqTH>sKS}Md)CZNymZ?l{eD%%-MJ# z6iJ#tq@e}KMyG4=;5mW$DX&L(g^7>g7`GnbLRI1+i(|0K$!HDK1VqIJ1#3fg#^z@3 z+?JaYw>7~YQrNt6Z$XY;Wo>V9%rH4cK`Xq(m{nA$El9|Yj!#IAj>%fL(;k&OJYhu$ zg4c@ENH515f>SEYf9tlDnyR!}DVd2``lxuBJcu9uyjAe5@*Pj-V+lbu8%v0+gvf`sjbdw~!6dDY=dC!gQmT*+2gyG_ z>zonbg?HBQ!I;A5>^K3Q_h=0tZastazqo2-rBGQybE&`Ba9Q6kKYn!$XYF8i>`A_G>M5R`!CSYpfEu027wUx<5GDgrb#_TE?$rya-N`*dfx?u; z4I)$ZLX?1KqFs^=$wJtW>`HAZ{~nU1cpQ=!e3X{_;G?N(DC%_*SYxZ!?y_hbcE|YEw%4Gmf!%(%qj)BihtY({JmMdIkAa`G9|VUxTjw_WXl~BM=B_3V z-|-RFK4*Blfye_c3=uIfzAPq20G+6@2deOqP67#do^{7rUNRARzy(M_Hf|xvM%a+& zAaPMyjzI}nd1sbKO8}^>#SZb~ZYD4bO=WU9+A^ylk%bVhH9KMcz9EPF!@_kMz z;^7!hJV5$I8QpvY^{yNo?#!%W;YLi&RUQ$$cBp6r`!6v=T$$03QJJwdqclTK*JLP= z@=nIZjIxX^8O0ecG$Nz5e%GP}uB|t@Dhs({WudEUak^_8ae?L=wL=|?VA%(8IX58y zXRYJQj=db0Ii@&%<7h#w%4x0MX|<(Qc`MP$$w}?h$*I57LZ^?MOit&W9h^Hj4|1OF zyx2L{dB5{X=SJu2&OggK%lgQs$`;F($x;!ia<8mVc3Aec+)1vG|4ZIU-cSCje5Tw_ zzEr+RzF+>e{G9v;`EPQna8Ue9Fclc`CASq5a+EvHo#1XLWy*gk-IZD;uk5Vsq3o|5q#UaBQO;E^RjyR7Qm#>^DYqy; zQ|2oVDa(|V%4%h;^14z~+LZrsb#;B&wX5h+jWU+gln8@iffwd zHrFiIT-QUcU%FPfo^q{qz2JJ)^+(tHuD`dDw`twxZQN>23-y2N@>OY~ zQPKKA` z{_%*o;7SHwCF8K0KglWoYBFZG7gK7wj;!aNb0T6OuZt&|48|8n z#CWgO?~Giwbt&AtJRQ(GOX_@!48<9Tcb}NZ_25+CrL*8_ZsPKcvYo{lWr&ND;g_)> z!;iGJEpLaMK2o%{LAEaO;}XWjk7FUJ>ewI9QeE0XiN(RzC2m}tJtw}7{TYOeFuC$t z*#%hmxAVI&WQgAw@btB1W3EAH?G;pWhcCjLu*mBU7c{}kpd@qQiFFUgQ*4I;??{)% z1Vqh?3P4LyB{4^$OFELJ_Tg?PQzFEm!(SthAQ?);^6J!z)M|aY{31N89JakJ%d_@~ zuzAR*rg^7<#UURJzQAGzG^6BA&h9o~ zSXcmy5`Q6&YmS}OS*EndsGh;uJ(MZyALemgm+^gx7SXez?xT5X;`_gP<4`D%^Edkw zRduN;zfd2SBl|yieKaVWgAqZatSOR_lCifR{GYhnKZD8sz7fKo-yhYTzM^dmDD(`N z7Y4!$%>KNbJfT2Wo*&{pVTL!=Q+I>%PMPMP9BRQ@8X>Zujl8vtXHj`Hc^QRS#oCg9 zEWb2;YP75*H8&w#8y%Ank*rq*MOXUi7Q_aGq#APMdFh$CIXa~#xUgd0L*4!R7hyxt zVMsM~@DE+RD$I~WHp-v|NI#cH)1$_CnXw=*t5kR2;)R{+FmlYG{{Dr9AqEu`iR)@) z2YDq}c{ShsrX{LjCDdI{Cq3z5M)39?EFj=1nev&KTGG`QAEQjzIhRjRUP_$IE8z$J zf8bT=AA&}?;RyS?1B?ZUQbCW^8H;|gvKaE2(y+V*3&O(u{qw?Vx!i(+++0D(jSdNk zj*bAPg}Hf0jCxCSb;4Bbyage?-XTRrdSw%VtJ2gH=gKQ@@f*6z`YNuu&mbFPuv+Oy zvUoCHiB{yA8KwU9brmI+BT=S+T$mgv()Pf@~u!d zd~~0*b;+V1ML{4th|0q|C(~{&%0mb>!FDmZD!)}wmRGFH+M1e@X;5m4vW4O!+Wh#e z==gZVbw**eI@_Tpn%maS7Hd91Ltw>_3A(}%%D=zMv>w$e8_O><->dsrqV#Fs>` zAgY>>&Rr)!4vNt8a^{;#Sq{%v%Ig&ozCH`W{pJOk3Ze~4sKFsb=svDSd|d;*9=%=L z5_&yQ^to<`NYzjWyE;&=38zzfh%A?!ZB~_Q(HMeG_FN5hT3mnces#kY()xG@+CAMc zcGlG8vvpupuF!<$6-8I+po#Brlk6cgN3)kfuh#~_7SX+W4B=`j^S?R*MW%NL4ezC! z7o3&PwCoRRItN|2bF1=VJ&_&nP7NQT!fBC#Op7~76Z+W~(G@xfrdvI&u>Z)Rh-lc> z;z^vVzs~>auz_ye*#Ff|x}e2b`O6I|CeBBUGv$FuUYS!h5pL5mIOW#(1hB_v%v&%c z+>k0)!k!gjZ|F&@YdF^6o4k^FnsUHu%Qa>Sl_mWz>Iw>tWky5HPFX;7RD8sYfSaRr zA;D3;QJ8KzpLC<`AcXQD-AFq!p9IowIJQ0TryKayfqKCm+Oycr&>HUt11lA_!W627 z`|W=CqXoBXie3p$1>EPr@wR5+ea{m(u5dfFl3OZD%|~?g`71d%sk2m+n4x{1KZ6UX z?Ca|rGSx?46(3SKQs?Ir;=h1(15cDj(jG#f3fjKqw`w7$^6O}zCj_M-O0JX%fZIX_ z$Vws_4XHIz8xyr-^HIA!8m{7`Aub7m!3j{r?AkqP8V6ZyJv@{(HaC@53Rd@6rR3V#ZcDE8wYys`Rz}IyXCvc-6a3e?s1L>vxzY%yH$*ELpUj7} zYPJ$m3fQ$iwfKCe*^Y8L34ny+U&P&R@~K?Mv6I>!3@&m@M21;wD#)ymyfk{Rn-T4= zRl=hB|F!oW08t(L-ZQhy0=s~eWho1|A|fK_Qbbf#?1)AU)|gljQL%sm_D*cE_g;uK z7)4|68e{Al%ZAuuZy_6_24O|xe!rRBr6}g+<-Xka?)&Z@esku`nf`AxbIuuddMn=g zr;iuqrvC?N`Tvk$b&s)MdMhUXobG++RdTxgPC+tMCjKL6y{v-c-K;ylQuPbNJB|JB zDaN*vD`=)%;d&T50)6NC)$lcgh7TW`mbPr{s#(x1vwWtu9nhmknvKI|*@A+Z+pz>$ zt)Pd^ir1=?0=+d@Ft+Wh+T&j>w{fV84Q9pO+ls8Qzj=?$QjE>@R)otP@Fs*bOJUeo z8C^JQ*)o{2iD@VS7b+$8vOSw>cX+UdJ0F1xifJ z6nv+gm!U%yKdc)ZScWM zWm{6ZZEmKn^g)YCikC;*K>+#xPZl2{l>Ur5f0zNI;4AFRkV>itSjh`XWNuN+S{qX8jv6#c+g6L zCwY(gSIt!Mfqd*xg&|-A9%d>krlb9-kA#13!Pr;@VOKh$~grZs}qT>trZ0ar|mZ6e5K$o zO)qxcpeRV1mSu=Qe6%)7;kspuVSb;wyY)o{x8oS5YGefgw@%^Ja`&41Uj>v` zto3#nou&Ta%$Wl6OZ=&@_@p!iwmys7ptzm+$Xk)QO|IBo{&VSoG{xix_@oEjAG1z@ zhoPAG)g4f`em9@tc&EYI;q$>Koblbf%hrO1sw~AY`NiMx-!1Szw-iHX%N3YW6}T&g z;OjC)R>4}d@ig8(do>d;P#wjE?Fny1_5p7N{tux%OL2Y&h+$=)c%oVOCOU4IBQ3G(0tOJp2u|?T&E(=ZCoEA0n7*IV+h{{AT1k*`PUDp#kmPy>{6qNG?v7^&bK5x(80Erh- zi9X`}R1)Yj-fsduP&eLx|0G1;^ZqXjpb4joz+B=B`pAGb03)}Jc{oc=e)OjZBlU3p z5D1{fbd2Nu{1&9h{(BqXN6wS~6ow&v zSpbi7KDU7L`X7PIK`DS=z)RiPC=$ix0Bq8-;4009C4pCaAC z^+#DaNg{<_;kxCop_=5AKTa!jRVeYtxdZTl3C7n#e{mgF2EZHLxo#^1PF&yp)9^zc zWdS;rm4MKtT%W!V(6e0ET7W*R$8|fWky*D_6X(~YBGsdi60P-d+m@{JDh6+yq-MoNV7kZyg@#1(4GmP z(*&IT(FP8*MWPYy5og42OdWBZ2mWy&odF-9C*TbDiE|%fLvDcA`@m-La|Vf}i%C6! zD`@|763FhuM%;ye3UOqeFrMf{d?mgJdo23L4`~Ado=2$JuQi{;&0!*(=tx5#kSxX{ zi^br-O|%z2vg zE$20UZ38p}c(^mbdB3Uo%)|J-Sipz0GJax##D@e*$AHfHq@_eI5Gc+*B-DHk1&mV1_SWAi;;XAWOxN4#L81EHt7)5l2fgFaG%mwaKnr=y>56K6I- z@RARBxf<(_@nwIEXVHFsMju50j&wQl>jb?Yh;$}I;ml#V=3_(^Y;G(Ei!l~Lt~JmT zQILx`$Wt87LcYjUjNMiuos#SWa)6Z_kV-F%iyaC26Y%8M2%m4hzZ~aT90=I$rz+7M|Fv0BS*VBR70FQGM;PE)lo3RaNjvc^8z>-gQ_&Io490tHr z&OZ1p;Q3qtEamXBc)6BxEcsckSK{7c;O#T7HwVwhQty&y%l*5!f07)>*bB8HXsP&7 zxOT#K16sxxr~%F0g0zI&3kM|wa4<3o2SvYU!d;JplGEf2+}fJHqV+`D1hx9S#3{=r&51&?N|24nAUZ1zmxV zFK8CropdMM!x*1adJH2RhKH#q31#=81u1*Np1{qMgb;}&OcI9i62n+3Pg0Ihi6=s- z2<7eNkdt)Qim=8_Tec$({o~V#IvaEm>ZX+pw) zfh3>1l=Vzb89*I`tL&8;pFll@>(@W2cRZ~o-0K_d4X4|LyC-dM zk2HEnxX0244@{${g?mZ#m8nk|{HFdbCw$zMaw@>JddpAIUpzKiHa$fqbR@?_u&MbX&}Rwa@|lNe~N&ZGzFOH#=QGKtJ23n4G-NjBL<4ngkD!?xVS zxLfp)JE<;g_AQ2-_#DE4sjB0Pi(1;jbB8Dg2*RX3$g82|? z#H=E%>Y?n$q8_fMzO#xzh*pHC;0r`u{6UM_7{#@MJ?Mea+YmC2%q7b~g{@>C;q;b5 zw=oIg!w0=%_Cdoj-p^8KIZN33BH!sE-%E=R-NfsL6wr1&1p_tgxVB@3T=R*Zlybdi zDuJTS=J*|p!g%?nJc>%?S`BF>;EZtqYy!$4=wl|`LmXIV_A&c}bzxmuH`blSvmPvg z^J z2$L?C&PA*#MPUrJ@n-#4e>Q+6vlKRv4PvP*jis}}YzQ05hOyyzsbwS^#YVF+Y%Ckc z#{bcj)p)o0PH0c*$_ zvBsJu1xHb75cC3-3fgl@NP7@DY{4mdnx3I&={b6yen&4bSUwmf zChd$dSQgz#zoeV!W|~d6(5>_($DE?x`wW$>*#vA0rNp#PYUZ{;tE(Z zQh{4DQXT0W$QZh!L@!$U@DF;h>{9+qEdmWnx8t4OnoOV3=kzz4M_eMRpKU5OS~oJB^4wUC6y$VB~>I< zCBb;j33ga&2kjgH4H6DnjUgRKPiV|>(3i{cqSPK}$_wNgxerO|2dmH6AlQ4xhQQLx z!2d15LG|d5^bxK;2Cs*(`t&A7t1`$%D{xjcy+wb*RTs!W7;8Xp(_CD2g*=3_hV%~o z8CTsP8#P!XdKV*38RRGqoYLx3j8?%=)C#Kui|8U;BL{PNk3c0kPlxM=BApit{_Cwk?^H%v z)hVnF^xY6*Yp#J8^1jc$}A?XDQz9zld8}^3u0VN4Z0yP=w3yMlfKTuUh`h&7IWB{luC&{3& z9Z3O|m1H0&ts;X!ZBLR4ihGeXP~C^5gYp_O7}WPAL%;!kWGJ}6p9}*h1d!q2hCng` z91%oDf-9<#Q4%e910#ND0x$GcWza}Rzo$9$2YQ8GrPt_ndV_O};1~WHB{;WC>j%px zEZ|?_PH-Hzu5yh1HJuVE6RA}W%0WwH7pkkEZ!JGsS6Y`#w;j1FBxw?&VjfBV z6=z00IC;9}Iwh%`ren3qPWHPM4aAM_gmu&>kn_NfXuPxj_;i`n| zF5EcbMsk-76#iDi4H9lA;novwv~V@%kX^{%hWp7I5fUN%df^`-{Evm3BSM^oD;0H1 zW!I3_j{E5-?k74v11AP?cc2JKW|^Ws+)Wno=Zp9%;mSqKBf>o|+)>b|6x85t*KwD& z5&mPsy)E1;++|G}YR*J`$Uq)~-si3}o+ncB)a*wHR)BaPDn*E#9fe=c_7Pe;yEbwF z&+}0`flP78FrxH?booQqgyJs$QLHF(*G9Oe5Yt?fub}W15V*C6)t)4B^A!@i9ATx= zkW9xMWHIJ~E6G~unXPbl6>;SOV&co`;7|*1nmH5vI-ROY@MeJEPDjC?0qAWLj}~z# za@Yv2a|A!h!Nn$SjfQVNN<@o{xoC^Y)d+tp;RbM*3>5yB!i^Lmdf|^2u9t8-3pawh zBvttRgli*0o(lgM;eROHDKppF1xW{%t&;S^>4HA;b=A z1)SoJ(3z$YkuSfdc!oibVHSZoI9my~mk3#i(I%}$YVk3hg@*!=IsoGpKiG3E#!OLI zO^<=rZif|tR-`*-nt`GO&P~TS*U(Yi#n_koqlFtGTrn%7W4NDWh>%F(W{Qv}!WC(2 z#zw9eH4vH`D+_!SLjEOZUe@1Vo%VV`-c;T{=R#LwZe`XXR_9wW@8^*s7IPcdLa~o2+(OowT}S zb;IhR)l;i{nT^arrjhx}qGYXPePlyq6J#r8d+;HJ-dbj@v94|1&N|t8iuG#i1J*g# zPi^Ejem3=NI@zS!Ot)EYbHwJn%?+De8-uOP*2^~3HpaHAZGYPlwo_~u+ODKud#1v-xHrZd|`ju{(^mu z{SEuO_K)#-L!N!1196Z!*x?fgcl@(OKZigEtwU3XPaIMmrZ}v0*x_)k94Y5tu4TCq z<-RDF<0y3ub?ojq)A4}gX~!#$4;}NI2I^{UscFJ|ib9&=!(z&5?OXm*G-JMgNCpa&3{=#{m^I7Mc z&QD#Ki_*p4CDJ9<B@!5 zOyx%94&@=`N#!Nw4dp}SQ)Qv6)YZY&-PPAM$Th+>+BMd-ooiRuKCY>*qg-dYE_Pk* zy2*8y>k-$}t~%F;t_GD{<)x~oidHpMwN%BaI;pya`SZyaI5AP?pE6^+O4TuOSd?;o^C_jrnoJ2+vIl0?Sk7~w>)>5 zyVBj)UF%-Yy`_6+_df1J+$Xrtb)kjQcqXU zRWDYrRIgQURBu)9QXfzsRi9L!SL@W*)VI|S)q3@FwL$&HOX?-}a`aMpd3pJIg?n}O z>hCqlE7NP6m)@(;+s@m^+s`}JyN~xI@3r3hyz_iyK3+bdJ~2M6e7gG#@tNRr-sgtz zT;Jus>no1)?_7C863MRWvSTfyQmDs__PFR){g5gcxHyR>W`j4A0hn{ zq&SN75lFAWYLY31{;d=$#JYr7;UbpIoIj@trxvd(?=KZmlu@FyDA82gYse=Xu{qs% zU-SB#>W)=PhItHfJ8Je-01X*p@Z2%q5xxqb1gCLTP}H7k&>~;-NJXp(_~AKsCA1FD zvN32vm;-%}AUKYvxWrsAQuO?)io3mb*}mmT-* zSwQi8;NRc(?i{9ge)H#jm<@uJL-T!?drgeiq zp!M3yJa=#kFJVk)QFjBmsSaen5X<05A)f4a@=N0`q|Rzye?) zun1TTECH4R%Yfwo){x0cU=@%Fd=9Jz)&OgPb-;Sy74RDP9e4v6vA#+G3NSzdppDcD zkO9^J+DmN#IiLXS0DHgzC2-^sJ32Xv31KGe9U@PzyunpJ_>;QHGyMW!m9$+u957-YJ z01g6&fWyEM;A`M0@C|Sb_!c-0oIwBo-CF1G%U?=wq7Aoz+eQPu58k(>KjP}9@iszp z5t>i$;CvV7`}l71A?*4b<6USyOFGk?e7r+*6I3wel#lp%JU1R++<8*s4$sMShv#At zckbia$U|5V2b8WyXf8taC|!@zmm@bly$9S!Egs;ET3)DRyaScGBXs>}-BZi?Ub-pPF z+|5JT`Qom=D7`7|UEIyZ-CS|kl6yXK=B4wyyeAEK2J;;Cw$#gf7ya-Ip{6@{X9Q)x zFy2I3JuMLF_4FlLggoBrhbN+)deKHxUi$ZxV1*vKi~hPV+HSxTiHgRVh+9@D=RZ6@ zAeHd6BM4Z4ubg;D*|88S-bcAN zQSN;_v3QQM&k`@=YiN1{G`#_u-T+O16ZMIKrZ+&-8%PB5s|iE`wSd|{9Uuy*3-I?O z>I3|Jj|Mw(Sak8EHIuod_U z*amC|cB1cg0lR@cz+PY<`fxvR05}L70uBR5fUkk0z&F4#;9KB0Z~{09oB~b*XMnT7 zIp93-9dH4-2wVa#13KV)&?yJ_0k{HO1+D?tfg8Ym(C`895O@SU27Ur^fu8|A@C)z+ z_!W2xJOiEszX5r`3m_jT01UuOpb&Tk9(WD>4!i-3kUD&u2CHg-RW-n>8emlou&M@F zRRgT50an!jt7?E%HNdJGU{wvUss>n91FWh6R@DHjYJgQWz^WQxRSn?h7+6mOtfv9i z(*Wyffb}%MdKzFo4X~aDSWg42rvcW}0PAUh^)$eG8elyQu$~53PXnwc-fsfh0_}kI zKnI{BumEK&#Cb8W1e#+hunbrZWFc%L@FlPb*bHO?TY#;=SHL!4JFo-T3G4!P1ABnI zz&>Cffm4Mlz$K9aVrSx3E9y@cJz=PJ!D4@+0jFG^pG7r zWJeF#(L;9hkR3f_2k(LczX5r`3jkIKvZIIW=pj3L$c`Seql4_|AUit9jt;V;gY4)a zJ37dY4zi?R=vZI6S=pZ{f$c_%Oql4_|AUit9jt;V;gY4)aJ37dY4ziC}1=&1{e#B1I7axz(SO}7{~%P0$&1~ zfXzTQum#u(d?O!+Hr`SXghh?RT7aH}!qS9;v)e;12EhvMMEqUAZeS0v7eMK- zEIL>g9W09umPH54qJw48!LsOJS#+>0I#?DREQ=17MF-2GgJsddvglx0bg(QsSQZ^D ziw>4W2g{;^WzoU1T!Lk}1j}*>mgN#;Hyg5>4cX0x>}ErDvmv|Lklk#^ZZ^3C&FG4e zh6->4+yM{36Ho&|`0Dyoj0`6L6M;#Q~C;b-r=?4>hQdauio#o5uPN+ErZh((y$pmLB8pbDMuy zci?h_ks4es_d@caf%1eL<(cHvB2AW3c;b?NQ)b02GTjsOME;hzCVuBvykAXecA{X8lw~-{P9h()#M1xp{RLW@YJ;>z?I~Ht zpY>zE4ah%W)<|eU35ttc~nD|%eddBWLQy)-j+(!SBdxv4t!_f z%X}{5ML*{vUy{FAz0( zjBgmsKhCql8_sKH;s{fHMQAahzA>NqNhm`Ea~2j zTQWrGQ}jIA@DF}(%U8*M6m|xh3{r2_ti_o@qDx5E+qEj0tDv-?Y;o$p?kmn2R4-+R zgk}-kB*M+T`F73TEtzxMyP=#DEunu*Q6pcW`5S*2k%^zN5OpfErk29rcUMq=k6vdv8gRX#I13m-m$=mbgYPT+5fmjiqwoe1epmU%0PiF1Wg4%JW?dY>6k* z3f?cB7I_s>gtti4rC7V0vgIX~Xb}(mgBIQ9xd25rK*TT6YLsCv0d}TDIFBcO`2Je# z5=F!=QC?z~D83T`zFOelM2o$!!tn)PFMQX>cfqQO?>IB@bp_uAs}8;aJ%g|P_%2xW z#4cF%#r{{(Vz;XXVxOx+47_amZc=0V0urSyLY`T;kKHKvZV`y30r)rW z*4Pa}it(g9(mA3vHn>v}-x6`jP~$7g7O-X?koF{+^v2F(&B-7fZO9lh7Q6F~$G%E! z$t+OdBa%t6a{<1yE>BL=U|Nkl6nl$3rZwqY@{{=1x(Qmh1YgT8M_ppkx)b;o`$ru8 zut&&4{4=I!OhVJ~)wPUHW;V=*PGKsB^$u2^m8Vl#1y+GhV>8%nI-T8QH|cED-@8;B z_-q76;3FM^TwWKw2Jlb9WIr774Y!GjKGYNn~73C0l!Zm)*0>NtYHd0K>r;HZYLv_laVhC>T34@X!H z9N0q^J1I&K4iwsp zmhOXuJ3x*uK*BEKTWu%uJ@(>sAwOa-0VQa72c>Z7mx!G@TuC7gFZ}NoBk|x{e2_|@ zF8V_3-BBLja-+?H(td){l|bqG2#Kbxi5tFnZ-ba0(hm3njqi=;hA+9hV0Er5?MbTA zM4Cu6_y)NjzO3sH+NvPO86=o~N+*%(bTZcDLg*~;eyEUaH}DPCFvUJ0ZgerETqX9^ z^WmI?93Tw{;d`>E>F@Ln_D?ZVBX)U_GAmM<%LLw&wr19(3YQG{ZJ90ncG#hy0<&lK z*e%k5Ily0zm4n}rfzq4{@tqpD5H7e7F60JjZ?RjTErS$uJ)jc2$oItIUr=-Y;~dBJ z3+FbzP!DsH^C=Kp#-m($ArNmloC4_RW z!U`u24{%Xc_&INR2;Nc)-trQ>WhZ#cUhtNK;4NptTjd3Bl@q+>4GYi$HR2pb1#eNo zTaMr%{w+4=8z;dx4199|HRl}TCOAeWIK~=WQiztk0#A4do>0;t8iZBKYS3V6a6>(~ z(V)GDpuJkq-b+y34ph&;S9zS?&Vt_M1iiiK0<6XQ2zq-6N_&9P%dsNLY3w0r>?vqm zLD1M!(AZYcST1O+5Hywx8Y={iT?LIbg2t|b#u`Cm7v_omdwiJ}_8InNKG=)SSI}54 zXsm#C2g`#31T=KiCk&#Eut6ZsklrE;8H?sOREro;|6j zYBSW6WVV5mVkQ;XQ)`x)p&p8$G)8HNLTf9ts_GzNo>oK~FOyf5LF6)OGAhk%tNlu1fCiPAZ(lk#_s1{OHTZP|{xcFLbXxb$WNYu1Vj~_5FDY>_% zZDQ(>q=dvYO``@{A2<7uP;Cuuh*tbM^UILXF#Of1RijpCZI9B0dTZ6DLX~ZY4~S1r zPfXA>N=Y4Pj{K$gVNqfI~x@%a5eEJYo@4IaC zZu@mp^Cho)U4Cs7e0FErMc#W>G)!Gp zyU*Qz(^mQh=Phov^!S$T_cOnY3OHQx&JU?;pF6hgojr8Rhp_F0t{Hz%JN~xT4sG*x z!SgyPg9QoWSLLNa+CXhUrhlg2B;P*i=>uz5ubzhi(;&AZypQK}c|z)|=mVkgBB09lM`>*4)4Qqr}{_>>HOO z&mHbKH>D&Iz;BWaN{P?njg@x~+iA1&RO*1;w~jb0USH$blv9`T2Rv)x`Re zi;tE~yHo#Qt#Nj}&RHM$WO2Lo^Y=MkY&Gr67b%Hnd)uxaH!AM2gCwWlh~rl7`jeX) zj_gVR)n(f8(@Ka-=LR9JS{F_M8yCBdiD~KB=1J2ieqdsVQtQlvtz8t22dDOk zPacxgzki~ITyhs#yFT$l(-T9?!lrOhngTS95>wNYdL<>8gsr@wC*)jZzRg7~%_8I` z+15gmwc*9G%`d|&vi-Lxlnm-yvRAk?XV7v)n}J<(I7elj-nRDaIn5UN=+8Dy9{hAi zt7o^qE_b+h{J}Lny{_$lc{=RN3EIy(jhTME-;WV1%N@R`ANG9c`Y|a{hv#jv-`6Lv z|NPSj~bn5iLZ>Ck4-0R?{ojRrr zJ{+~te{z@8j;>LwCgisJTAqCD&9|{X?zMJW!J?adl3 z_3W1EGy8tm7f(h#8~tSuI_t#;iklaFJAAR=T=tY9*-!S_|91a_tC_F*WM(VtY@ht~ zezQWkt{s2nFG@Y<9g`Ze(aIqFj1p}F9#&pjTN|m3$PCX6ouqxAGBWW>NmgmpK&U3p zsos^|(o3Z@43$AIA(E36oVnIR>t^9^iHjXH3>YmkI3&16SV{VGMFKS*+wWy=r=yL% zLOvV5r0T-M8JlR1SIcu-r*=xdWm9EM*ORB`xjd4_+5g(Ca&;29_5P`Ot(NM1d$<z>smzrbSNP{`m1C^5(nt3tRbJ%BtLIME36Z2EPTKe{||<*B|#+omg+@ik(;Q zbTl5?@$Hxw-`TBvy68>S%XQ+^>d49k^<%Xe(#w$J{bo6Kzjkq@|LDj2V=HtzceY=h z*tcq|9e=un9RHE6HOrvFMOAETQwOJ|Yg#3y4^2t!7Xpf)%cKgIkbs0LnozAaLSu<( zGS@JHO;b`e@q^R*q@-e#x1O58X^EPYy8xax$*07lPun29))?!K`d=Ge@72RK{=4q>Yp>ii-2SGAP2F}bKQ}-9QM-x$530^mulo7L z=W~vRHNVm*p>JG^OS2vi{P2T|pCyevF))Ao4d?XhBfGTdaCzZj*P)+p&0AgR`4+Fa zz1<(=$)vx|-g}?i|FQN?43ROsx?6r6JSWV<+bjA^x}Qgd zc~_NhHU-9=nDxE1`TZFQ&89>peR}3ivx8N~wElKMw!;eD#YRVZr`=Q9jCoLhRob2~ z`FCCFhfiKO^-0^um0Zp0XPb8X7Hv5$%wjxarIkRDlpaq&+6P!hA=FM9ukH4Em&}i~ zA89*k+pBEBcfAv<_fG1Cv2J;-wRz|)RnB^F*>lpS88iER^WC_ZpH8@03zwnCe5)L>SMhcz81Qa^i-gKkD~C)!P2ns8%7{5*G4~R^i5Eo?ooCTaWLq zcrLD9H}}Sp;DbZ+*A4fL)F0cBIm~%;4~HfLdw%<9QLo^|wqv?&$vGR4_?&LE@oaYU z<;ziXJKH2_?61}vkQ`;7eC45RPPF@8!`Hvuy53;p?S-0C=X$zEjz2a3$?6GJ6fP+< zuiO1tiCtei&7<+91|zJJVmr0&etJwsUj^G($*tDT>ti2HNDN#s_28tNUB|0F4R$Xuo^Lg_N=Hp?O0+r`$l;|?8nm0!q}JRZ{s3w6yHCoS4wJfQhbP$V0VnUY}&>rYhqK< z5<@C#EAV)7rDublDLqi`aE#H=7|f!~bDG4SAzoTf(Nd*L^JHW-K#aXCQA6r!qr_d8 z8jX{BC#A>t*EDZjq@;s2A0#EDrlh6xO4qc7Gc-OmQPTlc>S@YkNT{U>l0T}#AI^{N zZTi?DJ!;SHeeK#e30~bX598Rb%6Z5Y=w zCn+!@Z|36zej9c!TT*}Pu-K4<8iftZ=ft;I^eDe&m#>pd`Xqyn!~kz7X1!dai0M(O zkpt!?(fn3&Z%#cadEhCh)gs@;v>fm=KPL0|>jmbl*T*EM(1cpMN%#!RqNx~FdHoR!iUIjs!yJirkR>^$Uy0g;KRNxXV@aiDWwa(fDZaD- zlxR(2s9Iv0h8aT-3^>v?fcl0$Ej{k1i{?MjQZf!dKR{wZ~09(bBEM3O$ zo4UDQB)LI7ZL1#jX*KEl^0Qvdcj-H=U7zsEJ?#c{ZnpZscZ+A``L}#FOxyTs^`{Gt zMLUL1`KDII<*NsN{P7sq{B_ea?jLI!b3{@xcj8aICNvmXm~~_7%h!(;HO}Q;)_JLK zeVH9C%liFVpW##NwpNGa(reh$|P4%-Ax#N59@5ckjM*OF69jXD-Tl73*|!hc-hd$Dr@ISu@6w2OBGOcAjvQL#nWbw5nqANrH7W5KWY zPxz17?6LUG7b`~3&yVQm_`~4w+Og6;W6x9_>~qfBX8Nt9`5S7kSw3>y?Im}f)cl~^ z`8vuclXMqeRIYKLk|J`$^n?{|Yi!nix%Jh#zCAKpeqZ65`s%ZL6Y5M2Y(4Sg*|hbk z4MQBqR+fx9ls#tj*FV0rI-rhOp7iL*+Nh`oq~5KC55B!We^5?)tepDCMn~=Z+&{~1 z!+>!!XIC2e-QoIPKUZH^_+awT<2yTS8&Rj7wypYBk8q>U#k|h*0wz9a>DFq@$G@+g zw`AH_#D@j<10x-98w2Xm1Xw#y3aAir8{(bGgzHa|9r@(WwX=^ zSAN@e$b^rVZ=O@Q>6dx?x}2=g_Gm`ige}hYZ6-UZ>$ZzqI5lW_-MOANORcJ%n71xw z&gGB{$xMusr!q>l<4^6JX`ZqivSv8Ey2nQo_%ONik>3a zNPj3A_1uM$^^5C<%97mqJowZ0{;?D(4H=Z@nX_^>{nkCyq$wnkgAICE(T)|J10 zW1F?-bVsL~&0CD?uiI4R_rfYam9({34wQ}`cjji!_`vWX!x~hd@nq?v;JaVvoqO=; zVf_^MgvfhsLe958<8Ze11lNfvrv|F-b_&n(sCszGFI~TwJ>^Q_(hX-8eAM;Mjyt2S z*~V>iD7W>BLl0Gl^z`uk&yA0V?m4(??wUc3;<_Ac<-hv!b$L#ugPy5j0rM7)+?#dw z3#V@uq($BejlRS_&!A(WBu5rkUKWx;`y;3i=aAli%cGVu9`KYPUl*-=acv|ailPf^ z3Nl$9S=m~JloJnZYKDb`M1*TY!aKi1f@acDKe_8>*$%f^CW(8Ylh&@a?fAPSm{{)N zC%<;wUODaQoTVRiSUC3R$rH`)Bv|LDQuhyk6xu@8{v+?-=8YOn`W}h;Icxcyb3X)5 zN+0EE)4_e(kb_TJJ9yN(v}yg+I!?LKA5PlS?v49hm&Ms%{~9ZsL#B9CRL`mMdv2r7 mM*Wc=2F%`L+vxE28o$gQ)_2OooRD!ny3~H8j5#@xkpBnKEJTg~ literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..01ac8765b95426f579ff5b485e27b30b07469ac2 GIT binary patch literal 92880 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

      !t{peCIc;ta!T`}Ookd2rM3qoZ6sEdSke(| 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 LuQU3NA>{u6ogZx( literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-It.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-It.otf new file mode 100755 index 0000000000000000000000000000000000000000..51577d6d0262b323103ae6fc13a88c9c73d388a4 GIT binary patch literal 100556 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 RROFJB&iwh+8Nge17yw?P4&VR) literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Light.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-Light.otf new file mode 100755 index 0000000000000000000000000000000000000000..9d8fb28c11a430bda05269b3e36951b84c88806d GIT binary patch literal 98972 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 YT$ig$-89DX+DUzQsIMkO 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�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 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..8a668e48720053d578b77bec94cf7b9ea462ed66 GIT binary patch literal 100000 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
    1. Rf2JCSvKD8bR~ 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

        inDi=hMy`~8 z2>b&8P3Qx00A3>SC>C?l1fzTcEocI(u@tf_B_`XnJ?VWv4!VxGu`yTlqcVPcKe^Bw zi7|$fvtmJ1CtW&+IH8zXLG+z_vK2oUZ&vOd&&1bD$d;IBp&odmQ8f>5&~=xe9DuiU z(htUi-pzK6r4vn1aif6KL?*|{%`suE+NJ|AC|O6-gAqo&IA0hv2zg9sPG&I9sLe!^ z>(%ZkK*pQ3$A8HdcDy%o?bLIpc6jgi@2P{&gUp&zoBpkC_iD(;4P-rVY{vI@14?ff zTyTL-I_ad~e6J!mY}lZyuZEL(>Z$teZ+{zTR80pky&_Co>-*VsvS!VifD+)2>pz2L z4+1~OgVssQR!!HP~KNF^uB+&88a+xsVdC-vl!Tk>c=b`k3&=c;YU=PlB#v5oue<@^a5?r zsM1T1)7ZMR5Ol1(Yj^3a%JVcj?<6f=IYV8K??6UC$A~2iR!KTpwV2Uz37eFb%{U_* zRL2p;5!-VV(2+tPir7XDzmgvs!8r;&H}$(PFlW`ZG(uk@-f{d|B`u1m_I|R45lc6M zV;!rYSL@7QlCv5JoiqVo6wthXTc z?>y44()m~l5(}X?q@uyaN&t0ZMqZ(wd*L}HnRv7!jug0MdZBf{7Ok19TQ_Xi z&+neDH))+`5!EtI($zu)z9M~AmD+?>@IB~aNBT%{+zQw(&(=s6!PbtTts=6(+@;gC ziB!qY4#w!D)fZ{o&gazwKso356LtHx+x67`r?jHvQ~+hXnp%5QK^vIPaN4JDgc}{v zNB@O7hr7QQt47W^S^RjPC}#LPCX5~cdrf0qFg7v)vK4b?6Q^+!@OzwQK&=V4?oMRL z|KsgF0Q9P=wg2ax-g`@CCYed^y+9Ib=uH6uQNfE10Tr)Z&}+S11;nctv4A3?f=H8& z5CS9+5=if5lF9Vmd;NaT2?xe}w)_46_nzdPx1IN#efHUVt+m&B*0YFSOu^fH=#2_6 zt%MX|S%@G%`!MWdkS$IEj>F>$mlnp87x~D18^@HG9chIX#ojpIOZ3L5zqdCW3#X6j zTt6#M)R}WxXpwhtq;^CHW1%o4aVr+(lZ4!j#P_iP$0OC(h}<4kKFTg1nz0-dTm+*y zx(}EXRCm#g87F$R06Vf$PD!Og9SjEbgwZFY#;c*b9+U$M806$tEH-ZY;}T1tV9?Zb7-K$qnm?9!f-vNayJ&VU^nXbDSwPVdXWIN%M>0Yd@L-YoO}H#gfu zu}}l`lWaCb^|561>L|`3dt5ghJfe$kxE(kjFc<{LD1_26B(Mzv*-K%Z45AAL@t{tE z{iJ;NW^Fr6GM%xGd-o`%WV~+u>ErtMAN^jJUcFNP`Qa-xMB-i=x-g!52QndGB>G3! zYS>j0MxFa=n8ivw(H@x3^z{1e`rQ*RYEnikUd(J9MiG7X>KorV+$TTz$-t3f9b}zj zJ>y&z>oJF=ty4l>66%?;eQ(3j-}_;`vP%Z<6~GSS{M4Ye-nB|eQa<3+*^1ZVSB^Re9fT_w-N8Q zcuf0PHe~%eJVtOJ{v@ZQ1uujC!H{(uj88Sr)W>LI<!9p03A$9 z%F*6~$kWp4`s42&(rfEq)6DsERNs}XLk;+voczpB8{yd=PQ=>^9L!*+W^`y5Mr%L` zik;x-cTZg}i&B_~FieX|CNQr1htPlMZM?!uVks;rQ-VQIYaS~Nm?ITm1 z&@~4c#z-9*bTSPqaWG`j@Ld*+PbW&%rX0REM4-2?nG<3(0zJsabK`K8JKhA>eF(Gx z1fp+HJfHa{cxBvAN9Im~@(PUI_Sza1v!c9y`Xmj%QK#zNZR*M+1GOTJ!YX*L=XHIk&!V4T_0SyLr2+zSNo!Y`c=)p@9-+WYMB%K_=fcnBGZVqm`|Ad3^oe%zh ze&K-@4)E}K>?z!b4)1%AIqYxzsY4l_@SX(zjr-q5u8m!<9zF2F`p%wQTefV`k|j$t zd-m+$cOC#smo5!fm&W~i;(4HZQu^7G!w;X+=L!XZCy(!~+vIlp{C@AreSAN)j!aU) zNvqX($F0Cd?$FXJpzB)2xyX8t!lREhB~6IaGcWAHJ2j-D>=YeoBJ&<1`;@p^jU(hf z9?Pz0cSH}qvICsknX`QHkl62Xys$%k>(NnYL~UaG-eVnub)I|E>j_7YiRTkOg}n zD{4m6Uh|sfoi-h5kgkt?{WQ(Ks#a?+xkul)YL=F*%vXLXS>oGv=)tA)G<;g3PFnw_ zn)~Y1Wk?RI>$4J1&>zdIHFeG`#lu57b!mofz3Ceox8W@f@7|-!zI3T_9^J30x4mDR zHoT$xe!dI7X4pDuE}05%#CwKg7JB2E~(&*mt*#;%QWt zX;Kdu=+{$vbY%?5MfH99@s3syBSUKb!$B~pZz*r~T%EY!RI0V5YU08|Eg(cVgaK6E zR;3Ml-^3d@Ne?{oXn?KEnsbUyo-qelQ=HnE7wz>GD*fIkbk=Kxw^lu)nVLoeI@L7T z2!Nnln^dXU%7b1$4+L=>{?|?&D9nQ1t4DQjR5KpSHQLF-4fc!(xYxX;i(y-UbpeRO zV9Hx6Su|T$erTEQ-Twwe-cSrqTM&4Jy2n>4(g{opJAZc>6{pINDE50NsdPNv^rM9O zNz19A@I)WpY3L<_h(LBK)z)Ut4{-k7c#ZEbdoGygo~!@5?DBUyZlH=HE3j?kl%y-C z8`g`hP=rON!x+J$6>s}68Cp?+_tQ}gKB|= z#EYX=3ZP7jN(=DMSzD`=-#SqvRQZcxF<{H}SSen=M7Cjn7(!q#q$7F0*8lAdunwn8 zq&?sWu>*#o1M48dxn@U=uDJH!iOkH#!``QKN+n0QS0fmI?HKeuIF%wSSckyIzC<$g z(S3V0oIDZUVoDFg{4s!q>cqJS_veL2_o?*hPwS~$zpT?1PgM-MI}U(%8}}xi#r@yg zhM?}UhaQuFp7Oq<+O=z+EC_^oRA34bV^zy5IeJtbVaxvhE2VKDdA9hxax9GSp4hPu73l!eiPA^93*X707C5nvqA-sgDeI+3P#=(zIA{!8x^P}HE@IIg5u!TV-`K8Vl5lNcm!xLn zaqrRMsguxM$p88lXs=+UIk-nBl$2`byj&HQoQ`MzN~Y?uxzj=dXD{B$@g%%vHOR!z8#Gcp(e2+8IuvfLY@Rn`FiAmgD5PuxIFjcS@|RlR?^;t@*7FIM^7 zL_Daz>4SsK!8tvEj|n3SC04NvVDs8ic8HscagJBfg$)M!`7Jl5tsTlC+eEe)Hh>q_h$1iRsThf&80rqWZNb zx{on-%NS1;4Lnjg@59ryzDye*=+pNc^}BFafJ@99o*^6Q*K^{o_Ts3p^y^BYLYStttOK6Q_0x4>*clD zceI98Vga6@h{hGq#b99^C1zu|;^`b_qW3?c?2ZhbSv*CXdMZ_3JVA-&FiIq|sN;A8 z9Z*9}W;NT|4rlB{;1PI?P&i#tc(C!D^LM+4|9vKaudbUf0}ssp`Idx;{lh+x@RM>(M_Q(a(Pj*79Yd z7_4?XfMW6&ahg)RUqn;(J%+ags84bSf$#ZB zI;~JsVOf}Q<{A3kk6%_D2Ji?;a!E-j(ViKqAFkDUJdVrfQV63pTe}|~)E$3%UfVEk zGV*eiIR%VjLL;z&$x0>JXZ!A2RY5Pdr7EIBR6{F<@@FATB~!qi$F71NixAa)_r0K7 zfBcdTSK;}jGFA#4%w5BK6_XdwO8;EQ3L=`v0w)^5`qZB1wRLx;zI^_Pin@A{V(Q@g zBvEYa_Whr}s7@BuG3hhFgLdi!AP*teBVDqhBRm6wm`&qp4EUpQ9_p)Z&<6%WO@SRLws8m1j~1n6c4C~F#zjGXo)2@m)Z zb_;JbjGCAhB1J*xYKb0T%;Md96uBSG-9 zUtOh5dQ%G1GPQc3q6lNHzsUad_6mVq>K?i8CBO$$5#(fNhL3-O@RY8$j z-i~6-8d5Nfaf{l$i;3{&;@bKu%0uyI7^qEmC!Pa9ersfLHKX`L0-8LOlFDd>VDX2pWZDCioc z&t}nI2@i6lQ_FgQ31PGyifIEX0&N*{bf}TVW=Rsv7+ec|GRisJUgKa5gBanx;bcKg z_P^+`|D89EV)ik1Kp9~WAVUZfmjnO#z}0x*^XF1{uLmw_Wc?5kBzQR^c(fzFHxwpG z&dW!*Wavm$nPSGx0v<%s5FiN=ic}0ad6bGriS$PY^mgjZ(K%Ot3H<(($P6N5VCNI@ z_F}31-3yIlaq98bZ-Wk}1STMrEjx6y3V9AJ$ef-w+33!{IF=c4tShX~N=r-O>pnTq zCDvuuB{ssm*{}?Cqo1vB{P5=HWeaEFZ^u&fkTGtaX{~73+OFgWLum z%llgIS?Adp_5Myy_VNARI?vyQ2Ip8E80yJT&$^9c+v7Hc?e}x2Q+UVrL*lo+qHR5Q1l=gmAsUK&{L=ucgfJ*%O=l2C|?V;a?Vx#o+Z+{2; zI#GO*$p&m+vYF2|4yR;H7v&`f`&Y*&NHw$pM;mgyIO)p{OTpSD!#Bp zSru($m=ZqPQh}iFQPvbzKOB1kbZL6mDldywWkoqF2?khGD|`&?!QjgV zPSDv{qa)i7;Yo#T9&e(BsBdsk4wr#A1dO4fzJXO~6x^j`*wrB1S=DxS0OYQ!RY@tP z1o+zK76vM^tQ$l3|7CN(gaJb8f(hpdX~WjP@!<93G#K66pa1;l0Nd(G5l&bSav#&r-u&8zs0D(JV;{%oHPGFk z``A9GzYm3jf9KD9&;9txPk!Q$g6&uDJ4a`pc)kig{}r8g*|1(D`}bE{qIChd&HUM% zGk=e^ZNMc6FDI#R{)yVLy;FNySoG{$r#8x7Hh0%> zO(c>GCFtz)ma+h%kOV8#*S26-aNnaC&n`opG_ioNB8wwJVo^|Jbq#EzB;^T^Kc^8I z&(x`>ov2Tu_}=%;yVOh=b$%u*$i`|l#*R}atQm0>LfEqIO>M;+`|ba@AUNhj4{g>D zKC~1?`GR(oT&ErqsCuc05))5Yhp_C}ZF&(jVU*A7Xz!ui>vEmIz>Cf+=e|`#T+avOw?)pdHS_BfH49~{^&ss zUSA4MsZcQ$FY5O5p4Q^i<5lvf4T@ggtws!m-~RGxDGw}SQUUiJj~JoJ9=xUL%tvDp z|LrLX0o-_#*3^{4ol4^6>67%{%!r;@`zoQMwTfgQ7zytvc{*N36x3j+j_hv4@ZEYPOj6U#ztEiS%uL3Zq*$HIE z62?m7+Pd>G9&Oaz`gMr2P*Zkk1Ws)Uzwp7ca-S>4B(RXh`&(a! zN30dyf+rQoL9NTZV${0Kb0*1QBX}9xdpm&3Fkj#*A4Z>4H#F-2QJ5|&+V%HRR<KAtdJse>e#&~DTbcZw3mP=Pg5B06@mc`c7ckC3(j zWZ;FJJ#pLhz|Y}`W-&bS4_FGKOshtJM&m`_ymvb|#ulwwbOJIC;Yn}>r*KduZV=D9 zVTIvl@2B;X^@#iU|=%}FemdB6vl(+D;``-`ix$s{2*~Vt5@BD0Nf}cZ! z)B4k!k7wQG_ttgcd2G{Ir}{g8=HFVU`L&Hwf9K7gTknO(@bSkQvNjZLgj!d6bGwg! z`1A1G-aoLFIIgeZt+(FNYp=Z)K>xgt&uwT!xH*9;5!l*0?Euf;gA*~9FnSa^vz4S{ zZzEW=Z9PD2fZ%ju)5Jg#IY`b)KZaohx2F}e6)tPCFt(E?^FKtVl@L%+g@HC*iwmUROy4IryPBgJr6H6W6x2JjxH*rf`!h+ zOWN2;J`MUKnR7iwvg^^>W|ht&(U-pM!!uhZi1{(A;Q5Hj3YpSUS&^_4Biq_d&QJOt}GE)WPj}Sym{ItMJ zmw=mgxIIo2dh>%$9b{!6Ascdp3+pB{7R{=znC!KIPB`_z$9hn)pjR|0vb`v!I1C13 zP7l^>RyhKm!|M`?gC}e+S2ZOv6ToBb+|$F&N!EU{$a9i234^s!QjE}f;h+}Gg2#0a zctkK*F)$^hGf47CHW&mRuxZmKR>&~g6;03-D*t#;H8-}Xok2c`0B0GEo0-yN?Q|?5 zzEp&M4W8U=CU+klQicw>}O+Ndq5n&{k`8D|DAvD z&%)#Qb@=e4^WgTR@gNId+rad-8bjiR!fm(Rrj;vK1`{Zpc%B@_xSC?ig2H{}&+LKq z@eNq_=2frH?Q>Z;c;a{hd$RgF3m6-@KCWMT0J$xG?>2a{`Ppq7yZzwN0)5~cCvg8; zHSf&Dy6YEzrkKPO{p`7|Dq1&9O&MfXmtr7IOHpldozn42MNsZ*_w7`D%`0GCCd1|U zYckrCwRP=l`soc{(~d)lnow~JF_)-(`l>&sS2uj><9cQ73tIQYdZm}lQZDp7d4w^lswjp~-=zs@ zP)xo2obo1=z!#dYtgRKm2;!mgfF%M!F%KoY?6V)#))mV&zbG{BT zt5?rc*@lDaKD=q+vu$vT89J(^cAsvAeHAnRNrojD0}q)5l|Q;8B}bsH^XNT_2iVtN*xsvF1eQ z>et`{n=43`$pa3w@h~t3uwFwYYL9Bft(T%Iu%pked0iJQIa5_BRAd8Q)YgU((pe1# zxI$BBoCnmXN&Ph#aA}zsr;L@MBH#lKSM{l-e6yaZ-pe@4g~BXPdDCVAQ=*18yvz~2 zaRUG?hvEB+O1?;g<&RQUb~078Rx3Ii1$87tw|w?Y78|c zGD)BO)O%&By|Y$M21|-@nwzDmxg-=0vN*?6A5Wr76Gc#>df~=xpn4yk*Ms<83lxtR z)_%f7e6O`y&i!n~v<1D4d5cFR8eDWXNt4O%RexNvT5$%9kiZm;oJlMNOHA@hO!FJ+ zc(Y!6lFruAgK^rn`+i;jsdIJ1=^s)>Uxhk=R4vU|p*z16r_DpiEEoe8XHLayO+YEWsDY}coSoglNb=ap5qzEJXg+89=pYnV3*E9F`Y8aO(ae_pCEYx zyo;?>FcRbBZM-eSp>R#xCL_{zv!0{ z?(xgehFnPh4L~zjUjyeP)uK8hg!DVXlry(tFkX9LC1^*EbOIS@?8NXVZ(<}Vmqh^h zJ3`wTzLt(kJi*Z_F2tieOquB+N>k%8|CbM~#Gq|cRbwYu=6slKQt%MPfm82LKFO$e z4;;|d3BXLaoTiEvP2AP4L#xJ<#-*~x6)*KILFkexrKy)-n?{Sg}8;j!XaBt{`e zV_8g(5HU_<;o#_yPv@~hL z)VccT^tluZI##4$?VIa@L^dDe<>%K2Wn(WP5zF?)+4<+Hp`%XIu(ReaoQoHf>i~nA zjB%Wn2Uj|I10%=<_d%`~!f!`+V`onb>;hkZ6!zs1HdzJ^9-ku$@9D!2Bft6Xl8fG} z$yqr8JaPoRIAhLKu7A3k>zatZSLg_*iyfB>hxtTuclPQRciyGbR-UASm>YCxTj8N~<4MYo2khx%$%0-&Ju@0ZAsYWVgY|iLlOj{<)y`cnar-UOd1rb=hrh zLmK0C0McD2quD4+Bm;by6>D`hzh&Y@@GQ*25KK#p4}j(~z=3oUdUWE!e`oU`AG`VH zjNSg3@56nw}e>JS*1z>V@JiRTSC?IO znMzAb1L5F7>DT_fkLB}Pn0O-kH-7Jl;7E=kZ)Fm=6TdB67LE4paqYDMjB)#)n>_2{}vD)TJV;oddM zjJ%@XeD&+P;o(1O7%I2-eDG2wy|PxPoi#^8D;BEan_meg|AOz{sjUw_4U<3~?%){8 zwKnOwwHQixx#rHEfj7>W-b|(DOjp4SCOIp^$&**;m6%Nk_GFbEI-o<_!AY_(>W6*f zK*Is}CPy&L8kL9_t{)n%-tmPj*_yOJ002M$Nkl(nRmmS}5Al}bNEK?4#s_Pw=DPu*XoYtEjn zRTD1LvLqHXT_km-Y}8L*JfN?9;UvBJ)ON-j7-$ql;y{)97);Nkd{SK65iJ!2P!2;8Nc66fr36Q!brvJ zVqx3@Fkk>k2;~w3Uv)Haf>g+~nzRtp_IK@d2yc>K^D&0Hz_Oy(qlp|v58{PwazfV( z&`sPtDv@=r*{Z&Uguqiy)K|atjHVXkYv!a$&`l*XwxExRp8>}w;|7^?1eqNh)l33c zs^;XaVEkcRGhZG49>U3BFIW!-Wir^cgf!$P?-^}@17U2(Fr4-B@sv?n+#vPw&q~$IL@%0iB{>F!lJyHPN?*5ujy*Zn7-&cD!5M)*mMg<@DY4-FIUUNL4IZ;GZK!suy6MlDz?ezTPe;ODyVffto#s-!{|1P#;ePf%# zI>t^BfA5E1dpvpby|ClN`pEak`q6qQ)M0+_N4Wpk2KaO9Nb5lV#s;g;?_>EqHYh`# zXG7U-@qRX5-6n70@!bwT{NBg&aeQ5V@Aigm_H($eUt90mc=fZLM!s%4ljKPg8kClUKv4`i zoVR>Vki`A$^UuOJo{23mQN<(y7Uqq^FouBuymTMO%7FT`hv<4T*FU*nB8gT+c$wRA zv?DvS0GZfBo(lAQ+-GCPQ}DF*;r&l!QI$YcEr{d>5eydd*b@cCC4ph=nU&6YFU2Nt z#N1GTSQb($+eFyXskcYy&0>*f+9{=5gswXvpd;e!QDyMB6KrkvQF?5MEOB?ZZ^#H9&~^lcw=U+lKf{V-)d%Rio7V_XLj^`z zzWO^T7I|$IhhYSk$Dy|?ZuzDziMm=dzi^h4i{dnc&#S8mU6)6zt{HDB)p~lsz>ea% zt?5nFezJDcCeGD=y|PKO5O8KYcxlHA>MF0)%8M@7lv7Su1=y?(h{2-~ydw9u@ZAJh9;F@+G6N|Y_*g<9_i z?s)~urg0?ZbnD1#8I-Fn)^{FkC5%ksQ`w*j(cl01NVQEKU3Bqzgul*KZtG5+e#=d| zg-qH9Z~L|`{>pds;qzB=kv)3-i~p`!D_1Gyz3*33Z57It)i(n5L%FVru}Y~^gWU(30l%|Ai@{UT>z16M9S3@JsI?4yI|d27 ztiADesWhR?sA|XEiIDYt-ESV%=P&M6GIPHI{N%#f#oE(&6k4c=%4@h6Nrd0mij zr5@Q9;a!y-lWmbeM+5IEyDnLcRTrqztz!0cq^fjq9zHZ zBpAZZW}r=3%A>sQ3g)+?JR_q8IuWTkp)e0`24OG8NLvq3D3Xy<@YoH3wTgnuEFP@s zP$uYBs&%Cz8%N?u>_Coe`p6nB#Xxm`RPYHiMTa=oc%COBX{1v9m)7WrsXuy+_XZxHC#^${E2)P6O$d# zFSX)fO-f87LC0p`vCZr=t*ytr!luONJ^-DZ4apJ~P$d|WWf%y^3P<8x_+^;>8o@vw z?glPHWCO1T5CbxT$8k(JB>Ulg970YbjENp#{6#~FgL9y_GgWJIXXxXpo3*il`9wlU zR(>8F$&j8y-!uXpQ$L9#{oP#6bSug_U(QY#gHjF)oG^5!KNo?hl<1gU4@#yoG&L z2cS`!241=!9PJOZx$`g_(wx7Xm?g$)+c^gw}fH;88c=C z2AvI2>niJ-aPw>LZ(U2i>HYj0Km6LC`TG6d*JvH;YbY%(4d8&*?cUGVH+J)J z!)qSEli3ArRvOn4w1YY6N?8MpQ}g0?;2m}Q%L(@zA~}ORgj5`PKBx8jKtsExQJ7`X zr@p{ql1N%7vK6^E#Qg0dPsovrcrevngzkNOS6)qFL7B?JKM~xzApnkABn;w3M|Vc0 z(kJ}hedX(R|GB?XCLo76r|(1eFc^Bg!Ob9-%QYFMi%J9FubI%zCr)B=1)jt7Hb(?m^U{x!91AY3xZDJ zGk1bJ%?${$Oy3?5HU#|{HY=M~AzT!K6lYbixzYYE96&yv38;6s9MZH#DupyAXwxf) zm6jU^tq-Kh)p%Md85)DKPlZY+7OQ(oGG30NT)c5LgoeT7p>z(H0U&OK{Q!dI?z(*% zD(`?}aWeC-h42Uh*I_I0T0^wQo#f5uc6*~RY`leHDE!=Q^rO!LAl!2P?^R>?)qnRn z?1TTWzYE*xzV#L!*8|0`Jt_R!My4l)4cnZ`8~2BW!TO~vK?Z1B2o{qSTA2WZ&e!NK|SiOAQXfI6bWB{Q_* zf|DQ|=++4&{q4rUdGPsdDsO>se%D@suvPjAi@|rz)(nJbPHvX=r8Q^@VSDIc^}f%4 zTKE6!7gV=#r*f84`0nvv=)@0Qp^o{BNscMgFMsopzVX#db@1Q5tp~u&&6~WEq`<9! z)>mlf#tl0EtaNqkgbNgAfx?1PRUfWb``$|Z?$@{KtdoDB%vnGM4(_LFPZ7eumdVOO zf$@_8r)W2cJDCfUwUPv<7a_=>4HmHv&eFz;HWol~HR@J5rs2)7sa5NZ3 zqA3X^d?M+zkkDV0pALUK6xSqv;{kwXA0*}w!yVnwZQ!|QYs3xZ}o-^G~zla6XF zKG`_rYY)&9FA#@Ve3`n&xHTk_C-JfNV<-(p6_GRs>&A{Z70E56EH1E>J!Sg%H-4mF z|L4tW?0z{YbztbxGm2i;b+xf|^2IJJUH9s)*Zg*MdFL7#!kr+VBF z4j(VPqS4*XP9L@hp78R}2+>mGfpM4jfK7A-l^7CVQ!p^Pn#$GDR25uO6yu_Y{)xr; zwB_Z^Dx(O^ykb1M&IgIZxc7LCV}Za}8HO&?_r|8>nm1n7zr3$lAN{wx_5ANQC{hZ9 zYLK$*{n!vJ(o)DI-~Gyt|Et@KgSF9SL&xwm8)s(9+03HWddDz7dq%BWLW3|g=sf1U zg@)x={bL;z>c`_x8vf4b^|AeIW6|fbLF?oDn6`PwdO^L9oqD0s85*|7AK&kN4%-#s zBitv{m;OFeay+*V#n-eq zYU-4!Dk&*t?jQ3mr!pP_O4GJR78J1I02K=LeP=_H+76M|0iks)B}C!BMNVitFOxoTW@{XXJZY2+Zh3Lfopc3P0cC@yv~jQ1Qe!x z=Kk=*ZOVuunn2?1^ZPcc<{*6C+>7b6v-SA1Pcz)})t%d?w0f#+viM%UrbYM0lq2bg z4#l}lAlneDDvO`s0uUrVurU-43q*MDhd1Ax@HuRNjlw8rC9;jZdH(*L&+ur?Nt}p+ zI-(nYyGP5wM9n=)xL`6jomE3(bs~axSe=C_6i8r&m4juiF$F;o)cL zRQma6Ht!$y!9TPA@%w~*5`G>YYwYL8zxF=<%n#q6@U@R&437s`_?=f+UfG$?&YZBn z`qi)W-S2)^u6`0uL?6SG#P8idHg=7n^=JOhcqBg?KkI#byxQ8@0CVfmhXcIW7f&AZ4~ zT3}ZnN_U(t{O(uu%k#ddT@$M`o7HLU_7P1Xi7Be#apipw<7;Fkp1f#n>ub~9`*QRc z7}8ooHOMQrWAntXdg1bnO)Ar*>67%EA8*y9z7CZx*`dgUX?Su;Ji!YV)0v|qFTRHN zD@R#XfM>=NaxbR*Z7ZHcreQ)kfAa7oVT8^HH+NqBTBY6{(HD-Kufpqr7kqWTa9UH! zmAXh*pQrXCO=^GscUqSQdj*)z1Uxz&7-ETuz;ECPbp@#iMhKFJuq6~$8F1c$onJg< zgpd#(Pb#nsv%;Q4d+KU;AV4#*f52L^qK&EDOF}3zW;Bz^c!b@L0O2W`r5C>cex38N zFDs^Gl13(iy+2x}w)8IL50G#cT}mMVJl_ZERfdOhTv4h@i;)lL)1>py*2p+$u?Vf^ zy2IYy=Bz3tfh$R~in(uKkn_NZMMjV%BsElZq>`Y(yg<&lf}ayaaZ@3vJ(pQnIAIjt z!IXHs6c|t`ETTv7Dm8Wyt|heZMSeHNfDLj0M=Hf^g|kHj>R5nbMB)p^7ol%bh5*7r z-~@@f9Fi@Tl)4WJt2n%8!>PxVqpbiZ+l(?_29U2-6y6dE@%B_!D7A1pkeNc*9nyhn z%+}M7ysVecIZdaXQ=%Ka94Y!sPm!zLC=r)Xd)qa9GsaomWxTQRx_aAUON=?0hFnKn@iG6@0G zheKT*iqC~A4V-N^(1U)A@M!dq=Se(H3=YXuMgmlUucPGUrdl8vU?B#$4iM?ud@xHd z9e7UPy8eR!*?i66qsphfBP6j@)i$XZ=8+cWbQJ^VvfgyPLh{n`fn1fvHtUx?2l37> zv>QCobCzYtayD~|>bP^e6VUYOawYH59ziEY!_pV>Rscp4+`u#o61vE?p z%%M@jAA`UcOas<~u`!B#7`wTTtt%Xo4~-mCL)vg#zkYqdO5pu%*oFqBbx`QJ3=LQ7 zr%*5Yc)ow$!e_ts_s4HOr$4um=7*1Gy=NoJ&o(ISq;Y#}czGWmGkhF>yyM@8=Rf{; zVH*u!@U>Z|T8CP9JA&%-TW9<8upMKMU07VGWS}+!@LF%$zFEKf!-E=MTtq>bERCBy zLCdC|8XU_}aOeL(HbWvFb{mkNVa9PZ5i_`HFl1Taam_eDnV&!-kQHep0k(jfb)ULD z;XMkCbzjR6cA(oez;R=6Xm}Chs)-f?zBegEO2TV)yA$X~_n|l22u>b#IcwW?QJg1{ z>rDi&-P+KouF7^jxc+Gt`7@O^ZLU@=FVKQg7V!J)^wc9Sa#Jz(BgJ|{+hNw;srOOr zWkvDH$~_GTLHye{*_|5RBtHio&Ud~jH_VOng?abj+2bYn?c0OI7NI{vDcB<$+{m{F zmA{E#DEF~?n6m0j9bCCcn|AKhMR`d&v4s$8Q!F7j_y_sdPi7gp(uyKWxfum;u)0Bo zhju9|cY@w{?PbkgPGZoRl(%K|kpL#DrLA9SC4l<-2xT$g+*u=p?v1I^BNz?V3*|D&uWz^!hi44<8ODj+qP=ELae*6-=3eiykHE)!qXSJP?%F z^Q1a*+!>>z zJDRj~)k3}a#AE7cC?_*NMP*Jc1i#$dw4d^J+-Js77m6|w+v&Y`eop^&{T*8KLXRfz zdP$d%X+Py7@56gvt;aXML3ptQfyo#f$LG~CIsk@iQdYJeeC8!378YstlsS59%SKH* znNqQFDO&sTK}|jd%BA(|)QhM8#MP@*xqgo-soFJ2=q$EBTWxXMv_6uD)s(7BGESz9 zXhe(BNP6r_)&8Hqs@XT80Vd4Uw&&JpLH=}Ie9LNm@w&&fqi6(AYNlRDPE_7w2lcVC zGWC5q5zpo#bu=1G)2$k^cunh^(uPFHcy~~C#E%1dK~e&=M%$S17u>Q%*`qILVQGeD z^DLr$)R;!OF$^mIBVY ztFc)HrKLLY{EHPwiRmGP?=YFs-GsImPFt)4e||_Oo_@MIaG5o3uTUbCc)cuoW71eC zfmJMsnW9tiW^{23m@Re22R^8K8n^2scdyaVfktqQ@W@tIDkW_m_&mI%c!6K9X&}3N ziJpGo8zhzj^#D?oXwTF9OVzaI1?A2RN1Jr}IfaCSQJXdh@lsW^kj%t<8NiTZ2;o_` zQgXRNj6Cp7fj1f1X2oIrWgNvdk_bt6Vi*jQ)EOI}sWgneQ9M{Z9o@=K%mtqtqen1V z(_y>K!~ko?T*YTfP-}u-08sD&l^|!5^$_M6dA8chzElt()0@Z#m2Zsqw7KfJY8Mt} zVIYp8@o@DQaW6P$J1~LK7HGISSUk>{s)9Mob;UOy)xp)*sDKb&V@EH{2pAm{vFIi{ zKMDgjk$E-L(~biG1qk#aip9b+4?l}XCqpHt!T|94E;^u9C!M;C(%;qOEWF!qxL*Sv zR~#rD^H@mMNnp+&7=Xeq1~!Lb6rw%HF@^TNuYAji`1=H$ZtXb#9!jO7U9 zrj_%=lNH=)5IMSFa(izXwiOn$Jdkvwzz>ry;1IGH_)Dut~4DiZ&#tQ z)Hp)UNt>g};ls2WBY{54AxW%%fG?T}r;Z1Tfo^hMgk3Z)Tj}s<&>uVxp!a;gjzt^C z^xJ>qrDgK*+dt9;5paQ+(Arg2LwhLgN&h7B+#5^8jbu0by<94I1S2&TXv!!a*kKp* zVO&}FIs4nj#SjZI8#AWD?BjlolDO4_&df+Abj+eNl9|p=Sn!hc6@_DBw2i3A z2iNM;mz~NnfE+M^lH4ae;(;-YA`^c0;0rqRbe|5r{uB|9B8@*OQ#D%~l|!Dv*=Ma% zV@-!9PAt`{>tFwiOAjN4p^;{9tRJ3_PD-|M<%c5{p>DHLXP3G( zwqM7-_Wu68k8LB(MzP!Aee96&vHZEW5Etw7`h0%2e*0_pG57(0d>ns2_MCnnwkdoL zugylXZ7v_zGRV0q*16WRj+pM*vnM=s@ce~u+zd31L{eaWC$3nbd5afPZE{`!6Kn+j z7R|gIVg(X!nFdvy?Y2NCGuBgqez}sB-}`zJ>8BWENrn^o*w1YqW`Ps7-EEC!thrAD z|wm+u|eYAb5>~_7IrYH-|p7%V&8ttD)ksnk^=;Sz>?W@vwb{Y zn8T5+!_aqh)stkiL6@z%P+!|f2{$}j2@ntDp)2D!22~X?TqpwxCs=bEA?T^IHF547 z?b*9U2X-ISoJA`Tq<9c}~braah9rbnlK>noV{>=o6c?ewvNV9?c@2KV6u`m1w*f3TCSQa z)AS%7x{L4mw&EKI;bO$ajMtT%R5YW@D_+3kH& z!+<_}?J6~mL;tr7YQjOhGS8H&BD+l`i%XQ!%Dm03BRSH5c=&$16I2N6LC4nDwXuGi z=KSj>Jw1}I^FFX#_KQbpr|fe{gp8p@o^*FNS^7j!GLmMzgm z=f6i=P^hye08=RkW7SAjbjq-1#`oyr1_gFHWf8~U*COjyDAd~l#ju`upo)Dr<1jK_L-V{<|&k+ooJm5 z7ilf4eky|zYK}vwJ^r)rYUY_|hQke}8&=?GY2_=@l+4QN+;JtYc!WLPE$ zUlE*D38w5`79^Mw2-XT+skwX}(FR^8A~3UKQq)SqSY(J~IL}}H+kgSzdGPjW^)Y%D6qZqY0lhwwn#>0kjr$Z=xv zLOYRZh@{3?%D5V98G#EH^T)R|FkYRgK8kXTAXZ~BJV)xtpTP4L2h<`Ksx167I3|ds z!RLz|inWE|MS0(SO#`ZlZdEfnB?sl1g7KI}n^H+MNDo6(WWvWQ1jw}G|kZ~*Ze{QA6u&CL@EaLr{F;+6kG(=-ueb5G~rP%Vc}I( zrtQrX=U_gxlh~L-lGtOk^ILE}_Ym1@rBi%ec5gU>*Kg;C?-6p*8QnGt?A`SHvD<$~ zu8)=DV~_FoUI$4#FjQ3568fiqB0ybSY0Jug7~^ylTw-DlY%GkaesT>w=3}6XGb=$K z9@bIgdcmmZzv&VRrw*hGn43`HlO~-c$e9uR~qv{d_ON z`w{ka__?3M&ENT92xGzf^f77ZU1SXJ`R9F%$@Ts7wI(8Cz35HAsCBJ@4!D>{!0mgnuy^lX zz47dx;C|on#~W!AbDZA|66ql(3C{L_A@!=}4@)g=Qj<2m@b8MefHye=r`wS8KhEvH z!430GbK`trBhETFZVNlhA4k~N+XxMJL%rGHb@eX)zMsaXXOG92fYPS%hgra17aRe$gtM>?{>JA1 z_($76+UFmA@8gI2_}Pz8fQIiqz-)9{5ExfuMeIsj-aG-!E9Z%6BlMw%9-k@YuF)uO2BY16DFlC-*ey6%tue`t$KF z0FK9CD2J|T{bs7r5CSiN9REERpQ_v`7wD-c)+l{^wAO9MuszbJtT}NUW1=b#Zr9Xw zymJtw&ze?>x9Yu=N}ZxbBr#ONdXWXb@4C`)y8G2<)kvuP^1|_YcI`FlT9If90c9Ru%B2-X03Db47Ax)qCdbVcHny-dGzN~_cgZj>6_v_Tv zvvuAlS4b61Br?c{%HjVbT2Fn$h|P{yfc{lgjn19$P~zp0adkgO9Io~m7y zhxORrw^+fGP?MFfR2BgiQvJTC4iS+gwrKS!djI8D=-`fhno~GY2afL4#7Md(CQt+; zg6EHUJ8SX+jDww8QIfCnQ(>B@g*Q5NVo;!9+~NyZbz{t6)JG6ttz_#%<3K?Ps2ZZ1z_X@n-Oi_V^J8!6tKned zxrv070p{@tasd=Qp#L~Ll^h2TY#i2B#P9%M5Ghn{@_sRd#5`{j;4*X;EK(9#fkB2* z8AIsJ|Ds9$8HEqieAcPZn*qzmK%I;_w;=B!!EYQ&x=m&H(hVm7HLD*{xy&$(6Y$DD zIQnwH&ne&w4#V3(ayif_3r6Im<)@9O5zgCL*NBnAqMYIoLm1)-sWtF<;!%v`5Kryb z-S=$Jr?0w@gqIq9@6JEzp`WkS>F2G|+tIjKq@2giN)R zj|A))$ap?;C9Y90!p-Y;fqUe@)5cLwmIXvXI_JSCLIyh-i-{OKw+>L%3=_W-n3qd< zcXbhEppdRMn1P7^V@-Kq>W-|4j$$Agk71-*Sx1lS3q?(Or)ajwptx1 zuhOE$lZaRhsiCbw6N+-Q_0OBY!Q+_eZPRpc%%iYA}Hww&uqc(-`>$Oa_sxR_j?y|Fn4)1TjUujk19B`y?EYftkbWQJh6?7e6EW zAMY|)onfMWVc&#fJM1GbW_uV1PAoL!DIVGCDtv}u`F%g*D1aAnZMFlQJnf zLisK|(|k~gL@j%<5tB*QhV%cJ;c4=JUz8i~K|gey(PV)hbP$aRpF>ILj)*hnj7GX- zYYbk6I35&~4LT7&A%YstPq@JDy7m_BT}G9qOVd^JYP*UdTJNHYOmh$36T)qA=&WO502fnmM-3s+ zJmAcYXyY!48x>3fyag$|k7cD92OW%!GJigje5@ai4T5)vPB<9DPmX`@{g40b`1gP7 zx8di1@7c%qpdZ^V-!s4WWcPQzP8+husd}?f>Pc^?fLD7H;ZO5-{`{J2t_iAqtXZ=r z@UnU$gvnfypncRd?-S)vS$ZKL$ka zgei(WGNQ@z@p6D?DXTrGtmtBRTsz3*@75(Z%p*B(6kIbNgDwE}umxm|&d}vI%~iql zOtt>;RRD3Vnu)fn*|bkTzxRHXE;?B!fqOi9G(~xEVs;JgS95C&m39adWyGmq?rc@= z*{`~)gZl2R--ASX8rV9xfcI0l11+#}MxS0OuTX7UrM`E~zi4s>yss#V+$_9F!`Vu& zZ^ksKhToIbaK{9FXUA?}1yi7W>(d5kwWh>@+s$p!#y>s|7cAVdr(Zx5JK!|e&R>2oPudO$IjXQQMbme;&pHZ!8DpgH= zyXr7LlSyc6Zmy)N$|{vyF;m|>DMqh<=3zbZ^pkp=wq;Qt`tn&&7=e`=Vm?Hp=o7lZ zM>bR_YFx6qlG;dGtI(v}Q`DF>K`SW8VE&CAHM{gye3go(j#JtWynF?O@ChB`&t)co zRm6C(Uuxp)nL7KNbAk#n=@^0IG6(h2+A5XcMNh^%+c^v+RT`DbYBqDuXO(@@XQ*YL zsO9-H_4@7xI4nCfZ%UTZ2|Et&CQNtYHZstQ7?+uNHOa!K1Zu+U`Fj0{C)M%!CY}GS z-zw>(r5G9%I>C6!#2ejVCh2#F}&P*o+Ojdj9xZe{ z-q{}T(A`Jt^f2rKS%kYTCTc(+l94f@&vVE20w{Qiged?C5NqMZ;T3!~N^fsbZymHi zg|;g=r-ix~_y|qEj}XGQ_cOV_QoV?vZb}@Frk4T-U>wnRgVnpapAD+WSfCsK?Oy%n zu_GG6ZJ0V?xt@6HH64EQ1WM9Q)#2J+&7D$+8QrBje)=Q*T@hC1PUgc)LpQjWtIn4a%} z(FDZ6az7f_ML$VDLwjq3u;fqz-cb509(t~5LZ0!3L|5>*54NHB`@3*g4C^pe>+Gb6 zwf6`L#Cl{+O?RK#C|};uLuqg1w~a{CGLCe<#WiK=5<-jDeuR?EKvOnQDmr8Eh^{$z zHpMp5i4YJ80?!vqg{cYASt?t1kj!e5)sjfM#1mMQSfsMLb!wT4lBCb4GDb2}XQ-fK zMAg<;T)*+1&Yv*z0BXvg1hO@Wu%~5gPypiHZu^^ZFWe=R*P(no{(ZRL-+K1%9J#Eg zXb4=8tTFI>;Rzqc+aB~kA>dIKUlB08_`fh>Yz$$HcH$69p#Vp5zFH4eV#G7nn5VH^ zLlj2w5c8rR>~Rt_OFca`iic-=09KQcctZ41so1C_)!>=z!x7LxqE8XIBfZFjSjw(* zLmW8+yMyrxS3XH$N7M`~p)j$K`(di9K@vFg|Kbv@SM2$;zVckO zKCuq6o(id?tb;=Mfcq`fGvQ}r4;c1uFfQq{v0K>ZV?XnLKAw$4x5WmeZ5}&n+y;N| z=g`6B*M4~OZ~WVTcJr~^hOuo6qn$R|?F_OWeGz$PJ!^+i7}@l>#%`U!EJoZe7L~>i zn>V|H$XIq}7L;XRgt^D=PxE)bNTk{ri|o165yRx>QfUT)gcJHg{Lh=$pNKdn zHWob>)=ucsH@&wTpe`$YSGwxv(S{}M!8+Jl3C3^}ow!Mvr=CciMF7k>+3G*gtZB2y zLDd81t`qDN;-4w2iDaZ_L(lN_tG|lJ5OQI>6VY%;j>jk&scTl@f++|}JZO`Olt-v{ zG}~Ek0Fp7%lJPRxaE*ngCNNOxV6QTKO@7z_^h(v&5*X%we*5Ny*XL^tH(%f1+K&J3 zZ@oYM^S^aG_wm@x@BQ1czYiB3?pI%*1+1|#7himFK!|LTWaC@CoplzJWej{zeowyV zpMO3GLzpVdlgUEED^E{kdttqgfA3@3(;5;zdqwE;`h51t`n}uai7~cqVcR2_Q?&V^ zwL0t5uj`B7x=0(oJX1?gzEisoFffa=@n{yPrJ<6_GSIg)9aUFtjgkxVNi=EFq_pvr z9){9m&lcVHdGM`_(Pc{}VUUdI)bCxQU)}Uuy}mC`mz)9iiv)*p@I)TLP>6~U`eC)! zhKH}a37$-Zgoa82rSADv3D0GB>pCX5F@(`to|>TN+psJMNj(4JCVk+-OE7>)r0FP7 zPGY&5aU5(s!nlN{Z7`uzHC!Qbz|NjXKhf@|b~b6++~r!nYyw%*2S~(eP-jE7 z*1?OKg-|R@KcZ?fY;%^Kr&JRAgNZYZuzfM@x&L;ZwdX))dtTd{c(60NXWcJdgA4~@f%Lok5#Gz!^`xweJ|k^#9#sU8awF>#WlT#VcA1i zDgi?_3C#3a2&{o%ETj^m8tSL02^iuO6jT$*O}!YsoqPVM;pTl>dywqq#lxCQqTRa9 zJJkf{F@+?9T9j%{-rx~_+N|k z{_FZx^daO4^I0%9B!WpM2Bkym-qfuRzo6^!+TU?$!8?8C7wO3J<>rb>FGc{T#q2OUz#5kk648|6`07R5pHIYIO-6Lf1 zMnSt~&j;r;eiT!~8UlIif-zhh3+kRsN^uXPXc#2X{S?K(nvE;Yp+E(7=`$CSOqZgc zKlUUZ;VJOCHcc&<`NnuwuX zHU{GsJd`I~_;qz{`+0CZ{^RqH5FT_`I)aRkCxNX8KGz6x-J*U3!!kM#U4Tc{h6_t+ z;0m1E5jm_G)&#-tBZQG7d^XrXxm{!y&N{^qff8`U z5boC?%WFwSYD7M9CX^lW8K-azAxbA5efW|Ey7Iz>nvhHRao|F6%)vP5qBuMWp!T9w zs-Jt9#5uF^GFDX9Q=+m-D@*3+RgCX=93-28&OAHXpj(qyss{+kEASMbLa4p(7xtn1GxQYt(AG_UjMYVdt0%Ik?^O4Q>mX!#@1BMDb;M_9UMF_QH z4BEEw95)oej(Cr!Sd2hB^9&Dh`+S{_LIt)Uwt(Lcalc1cSo-?CY!9o`neD>HXcVFS zL0BqAfLx6_YGuP0xR5dOqz%ws7Go@q4MlaIM!602shJV_z&1pX^X08?0cXijTs!at z0prICaE8O4{iMGeWvEH2mR+_dBlc+rdITe$ek&7Vjq8>KfhQ48ZID%!| z34wGM!rSh1d)!94kMWb$*3<xHuh+ZiX8+Q;Vn9 z=(L}GPF>abHMmDETRS+3^MI2$aHxzDc7VX+_Nuo5Pk@CW?J}zY_lRl~jZ6xR4}?#I zmAZ+QjRR?=6m4=^B9o^OEG85sSyXia?CuHU0sH)#{|W|!|9Db((1!x)|4{ZGa8{M) z+V{Qt^xhjYFchf@C}IP9$Jld@F>*9&G`^-8Q_V3a$JCQ(a$IH;e@lkRno~ z!wkbPFunJ-+xNfLuyo6t{J!s7uxIbR_Nvc%p69;qcHM~s#qHFtX66nqt=9llyJ?*U zz_E*aTz9>@ulwEY^g5Qd)qvAAxPw5)*Fe*6>J%Cj8gvQEjgINGG54hjN1a;N=(dl0 z{eQUsm-c_YxrVQWHlw`CD#i}mmN)OTsW-eptZJhZGaXDXopAfoKi;o7Xg41}$BH|m zwjaXef4uRMed+Qq1BhaF{0)$p7hTD~Ot-_W>uh|t$9{Ahm8kNGA?@w9Dkk$NrDCZI zX9FaSL>lU_zF<{E$onTxHSeB!00S|ytsjz5!^Ga)w{&9KQ>tls#^ zYD+1~v9fAF+nE>H757#k;K%LEZGQnY@q7qFh-DNzaZ69v=h&JfnU-1Tx5wW}F}0Gr zM9Gv6VnrH+cWcAe-{AUfvume(!DfmI=&?880d2HbuD{3@o-_}TN@5F?Rgo>*EO5pQ z1_#MV(E&m-DDu(JL4pcYG%dK{N6Rg%pZMRRDOQLzDggOjHx}lx!@Id3_(uT^qlN6> z1^DKltgyXk+2h`J+qi10UGv3Dv21r!ovIIEnP#~u6iUsJ^03F=*z~An;~wtEYTis$ zzQe&<_>_~Zk$A)r%8yzT7B}k6_mD*N>h?Z+Zg0EYusFlczq-&SpLYi!Gl#R0#X4h& zJ@DwT{rPVz?eEX_+D-WzE%Qov1_0$Fl-q^D&`(1cyV%aR**4wwK$!)EB8jWa zHsc^C2#TKQCq5B=VjoJB|1ehFdJ0AmW-``FzW~4i1R^5f-(~sAoIKkAkKRL&;x}q@y}QRQHZ_F7eT_k;s~f1 z!ZJG2iHk6ogev%o`>_B*pznp!OWfb1ik0;%3~b!0h_OCrPQEQWWrj_iLWVSRPZM*3 zD6PB*)2NeRLJTry(>NCTwJB)gR!<{OLhJ#{hAo#GwXILL9>h`{9X4o|m!PssI2$07*na zR7nv)xdDJjF#9TFT$Rv5$gjwF7cta?+W2tyQZCn9NWW%0kvER@t=W=L2zna{smVdX zBfeJ!CdQ%f^Q31h{1guYan~^RL>Svq$q+(E0`!5{7%{bk40u>Ssk90U?*JYsl%^DZ zr+SkQO0qD@alB{Dw!<_sk0H#ZqtNnBlC8jg3S*&*HcsPv2nCjCPUn6-qh<76_(^f2 zjzS~kBMc}ASaAgR(Z*A|3bbhvc$K`8g;4D;`6B=+SthV1`J>NTFZrV9p?4P;O7^*O zQpZdDtnXU1E>X6+`|39tbtG412$GzW{MUJ1;H+zs?3QuIJ(qhd{pK$2dEIw+z1|bo zXH-sv-sg8N^86{;gj_c>sUh5ECnlI!usQF}W`USY+-` z0`!Hl+8rR2ot*?gn(WlKmCL28qs^)&VHqu|pfM*NbU>C{H4qJz%x7+$PP^BpPM>Oj z`ptdzrv0hP{(0)}yf-~#RI#kxhKClj>X ziNH=tJ|B=rhAc$Qnw0eb6Bl(5Jy3OI=YcbT+zzd47nqagCQGHhYti=7UNsnXJau*# zeCinL6xvqr`mV)Y?|k8p`C-dz^|uxFB9_=2ZiVu!3eZGGc@A14jbxkGZLllP zKHKuxu5qBzM&Pzwd2qGGmO_`Y0#LW$eJea}u65qAf(aWNS7r!zBm3jx>coZUWdH@x zTI6aWLI@PJnR6ykjZD~od9s@fY=?&aK;gPZfza0-z8Q6UnS7aZ8GOQ87uNYbgI3z;eJbr zwpj7xd3Jo#h|ND?%+9HvLwxLM94{N9a@quCPPMBQ@-s#ZWipvpUR;2gdm3$ES2z5s zG24<7=wP_M0Dydq1SkfTW#bO(>q?@aK?}5I#A^}{?gR9u6lK#VRolIlaYyAKo=Lo^ z4?>KH-SUmEGhTLEW9>(_e#b_8{#_-kr2^Ure}ILcv$es=Hctfz`?+V(1@V!ifN78o zR+7&w8W)aaL9ijH;`DWoz#4I>$`~F;F$fZ~rV2QLJXmj;5B$(!$;~)~%Q}6G@D)Hz zoO_}hI6~8-jQDXZEGUR0-6Uv{m^Rwc&h2s?lsN82$qbKByru<(FcVOWP%42Y?fiMU zwrpXc9Z#a>DA%d7%I#R^*Bd^j9Q1(psPX5mU)fT)(nnC&6tTlqUkKS{yIQAVwHJvMYi|!nz=| z$K#Y%i6KCN#EgFe0VUON;fj?AQf@U`Yt8L_cKIb|+e1I$ z$_ZKVl8`wLJB060xB217?LUB}cP3$YoL;tEDGBL>3J&&Attsm;&$_|}C>e|G70(PZ zl=&ky#(km0?fhu7O)7`yq-+My30Kz9rG-#78CoPmB*PRwAQ_`YKvtaNmt1lQ)e@&T zUPTu~N*=m~nxlvMzhsWP{@8a{Ht85To@AMpW962~fI*6-I8E_#`az!CT@qJ{K5-{&r9A$o%)`HsRVU`Q9 zO*b?TtyEi?T)V^G`P%KTN`)4xIkTFVO z<(8IV+<2|lPel@eMRnpJHxn3Q5YxV@^)2qk7}uohROb-L3bBq$x5I4^enTCSnSNgo#hg)zVyW`k792w0#8ZT(GD81@1H$wXX~G zw7=R`*QjG?(R*TtaMvfU6L@tdYVKQ~)wcSs_!%vaJ@%O60@1nTiV^#O28PbB$wAkp zkN~~D|NZYf6N4rZSzX_M|9$5g1yEJ=KpjLtRvMvL2-MaB=h6;Ep`~-{C2*^2)x@LN z9k(Mp7j*QG2M)=xkygt`$c>SRvi74!`_Uf{*j?9GSbs{?ig-qTCThnxUk*gk}gsNyPOF5z|@Csu~~b6DE( z5a6rm?}M&rm}kK?4&xD^e-rC92q;6VRA-_6m9%ntIny!EsJWB&q^Ea!0kD2zS&!_t zeSH_$3EcB0Vk+w!+o69VUb}>(H7JD+cQ#uGO4ZuU5!;76@)GuP_wiG0DVErcv8Ay0l+wF zfvMaR)p}My+$ZWB%BjPN%UH^yPmH8k3szx2{T9|CVn4Gii}>@=o;IEXPXfzN_h8sg zz5HA&$Iai}jcX9=cP85dvJzuP(Kdzx!|Y_+2*;c7OqZW^5R0u|e*6w0jV1U57P3 z@qumVCs}l5HNyIc%^jUilGdqM#eBB0t=2Ar-o-;Nd)~HkMHwV_r9$*_$oisPs43Y- z^f~T4ly8)!r~na)m2@ico~H2Kiv=yx%5x>uBL;n07{(1h@8iUX4pUm&4~^7tYa`pC ze2=HttFOLq2dR+950+d|0_#MYbXbYoq>j6yhF*6Df7)OP- z+jNc)Q6d)OBMvx;qqrym!-qtQ$sNf2iU}VWjwP}(&jN*1JtSt`kEvB$xM3>x2pPrb zcV5^Yd{Cfy2AF#(HbB0Vg-{my2<7q@RA6Cb2#)Wv{@O+xO)4=z;UtTT%j{IFt>-O( z(~|Iok#Le7=l~2e-}_L4g7AeiNEoFO)EG2qFU4ufC?a6y4Tr4Rj{yX$Y}Y`H%3f(U8{qnfC@ExEuCq{Z-%A5bAW(s94uJImfHjY5juSvv zDRdRk(c|dbsmIx?E9%HJf6Y=cc=dhoxZ7+_Qn3<@Cr_U2$PY&rBX=Yp1-6v0A(H?@t{xr=^F+(zF8{t{oV9828K{p`LUd%VQ&`h4tm?(goq z&Y^p9fxGTkKwiv18#ZhpQT;eme##kVoZ;@`ygMEM+CUao9Yc${rf{0>GI3l>HtVG} z)4Q(8-N)JSm_Pb0L|@inH5%MSl&AuqiHnY-Eo5?I(&)y@nT`cy zbcpyXPSn{;;=_X3w*S|US~Vo;%@yVFnrB%RLUW*X%x=2>`!@fArS{s?8TR#CuCmS! zsz^VJQL-MxbcPwid3wIGIM=^+945cJM=nZ1V&E;ZMzT7eJHwrHJaY_P&D8K zN|j8d!6r+mfT9aD^$-OP-G{06)it^UQ^$9YrO!HM;=6v+OWLXiuLirDrKwm}u?Fmf zPgg|>1e}$@s7fXRp$Zkyz3co62N2NI%eA7a?y{~$*RSi+xpkciH_&-BsI;vXDJJ?| z{XmQRS=XiZ(DrU;bvDp8d04s{h~LYpqBP+(_ST!5?d~5vV^8mz0Wc#`fIbqzvKE1G zdk_>gN~he`c*tIS=|#JYdpJ0)!YYV=oYdT6>)zR6!&#Gf*4@^XKWLSG03-xiD&QoB z)nPmuz_N}7u9YBoSu0Rnk}!b|LxmLYZKILp!lV!2>J9}*?3~FVd$kThg-Ity=}DZ0 z@JBK`1B(B)=AbRQc0O^`SWXKf)(pu0Gw%37EIrx2nHIwJJmaJ(b`}a<3Ouv^@fzEV zRWG`0z~+|-+4-Z+ztj*SQ zc*t!s=l#CF++lbBbrZz+pCja<-)0`b{S9C8C@c*=z_X|E0D<(x_VF)H#(I>j?GSxF zj=82km*gH7>_0iY4B)}Wo%m0|5zTk3K%EDNBQ4w#4xPmrUF zq&gTa$BtC*C`fZEIZGINGbsZB6jYLL4#7R^Y2O1~6@m%i(oI#a($qQj{VKoxbPM&o zlNzkHakCwlUv2ww&2MU`wN3A@vPvvc^A;~N@3tdW4dH!i=BXq%9klqy754V}0~970 zvZd8it$<<{o?w$DPq`f_>LD4Y&vJ-Ww)TDY;tKJYEh<@vLzeD==LL=}Ec>`ViP_8! z6_fbG{8G(+u}a+IT*u$HTmQ-=VC!VN5r5DoEUg`FR4&5W^rZcTM8A+hOoml9+3N5- zNI?!{0`O5Vm@TkGwpc2PWt>>uVMxP0%#Vu1AEHW5QVJ{|$4w?#m3UpY9_C(p2#JZK zKn4K0Vdhc)kN_@9Aw%%smX9rM5@44wtTBk_JtU9$M@%jQwavg}NN z43^d*fD_>jO&!dmAt|L;(m8gRghOMzYQ7OqrKFoP-vl@jS@=>00$7)OVYHZ8T4ej6 zvrB@eYiug6MhqM=?x(MVdU?Kddl$xpAqu1{!XuXz&bH^q8*MQP@Bs249K%J;oP>>w z=Z1^}RQj=`gt4%C0UM5xMHVJ5JtU{0nOg`eXOy{R6#71INuhc3^RV>8Uki;_2FX`B z#o4wS3+>l`@<*FooMu1!;a6;01zt^#CmHIOav^34&g(D_$b*CICGd>7iU2GOMBFrO z&3crHBwWCwWmQ7Z}1t%6mrLY;7~#sP!xHt z;`vn^cCs(Sil;Ls(hDt&M=JtvE~a2hIsrOC;#)Ja$-?LI0j)M*EKPi1vhyT}5oc1m0XT)ju{ zPv_9_o$IBi=uS0-X`KrQ^{&OeFLkSbwz${J!6tyPGXf?yc77wg(>Wgslk?6w1V*D^ zF85qouk&aDI&&TLZN{tbs1;S~521DQ|O~VLrTVn{o zEP}+lDD&Dk0!QQtQ*F=2RaliK*})?XR#raA_UzkYQ>rH0A;43NTDwVms4#KfY4-Wk zp0$^s|D*Xja5O-)o&ne8l(SB-wpb5IKJ)E`l`q&|?t9GMdF6R39}y7FSwa043fTB9D)(PNhP^tsFgGI;E%UzrY%y;dtV{6gzwXfdqy6Y|n%wB!<)y_cQwr!hZ zB^B`0xn)IluU*G*fwRD^&Mi=?K{IF09Ov4!kF2uVPS@dHmy`toTfMaCnEI@H(Q))y z+iU;CCD?Gp`UnH4+x4M6_gtC%@a849bzjW>_WaW}9pO5JQ1Re;PY&VE<@rQNlnErK z+cR&zOwvKbPCtH$ttZ**gUrKLR8CeRoQR5LtBeuvmB#Z^$yY${5L7XPyqZvMh7kN& z`P6;q-kb%&6vX1{MTmRhlN6Ovbpe!YSb!gnO#<$aaOekMP^Qw-5whc@)>O0J8jg?* zg;8ZLid}jWiW_mf8CYk^;2ZWA0uXZRoJ5}fktQk&L6ZfLJcE9mhHxA~pa!6h2}Gcb zitS`RpM-TEH$4-(=NI3z^zXi55B+R~?K=H5Tel_0Dvtm3nd_QI<`e-i!}QhjZQsGy zt*W?-b251yBBu4DdJ7Wcsi`JH$ipa>sPws&DiH?QZLzeOShbGy65mQzJJ>^Uj}0hi z>16yzK^%PzyP>zioy*mPu?h|nQWL`45{(h-u8AW?W^=p=+}LBYPrMxKCm^i_%L||< z<{>_ID8+WZvyGw+#kM@pV|TBNT4C`?RyST@TX#Nh-zu%JomkG^TKTcv{)O{wZuVvp zL#9~OIrD7orj7RAGcQ=m3;@lHa}1-lZG8VQAPKgS8<$)0j8knenRwg{FVb$ZB9UZ; zOFmmB;%J^d{=2{0=~JQ7InnIRa|vfE0jMV|>I?n!MP-o3ur&KpJcJl^;JU_oHL1dq zpmXzgu|%9ghl4C##sy{%g4N`0$4FDZ6oc3FA#R%;d2}%#fe*`3e9+r0ui|G^m(|}VQL}P zGe&aS@IaS&vS3*N=tlsE=_G{^$brROE?GTLU<%<=aR75{xR*o=f@|oXiHoO?vE2p? z!WHgC>GV?XULgd!Hit%vIWLAKlG124-pD*ge+x~?<1=A9RJ>AhhUE}0KsZW-c7(&r z0mD&191aRg*>l)NWf5=2(%#%??{BynV+L8p{Q$%6kkvE+hP}j`rsF;jkj8~&H-gm| zFTSN_kwk~mq!HpK3o8KxyPPxj{oKm{0lxW^ozB5{@()T>pOaN)TZTI<4Ua)5OcGfn zpY$OWFRwbz-iFcU!ptmdf#0@#AZYUniflDqv zYxwLqHDdGpvcSR%;}yk+Fl;g$(njrt@qjSsnBC=We{mzH#fn zQ6%6DKtDH$f=m_+^C2Ix#*u4Sj#D}U zHvP*B?6zy?;D3M}hWlH5^UaCf%@!`CFv%Nl*s^8IZ2kK6j(1No#tp+$Vw1d!k}m>z zlDU#auCYZ2lWf#-th{tqCah2V{n+2!?~-R)w5?t`wk!MG^;+l3V`t-k^5>tO>)6fQ z!4!u!q7a7Tu$y}8dS7taSkC6f#$E7t%CSuy+K zH~-UKed>7|Lz|9|rdUaFg%#v;94=l|A_59rJNFCcXBr6^4D=KRqk{3pu^2+DR;e<9 zMlTbQxE?*@h!(#FHAx&y2m*qU2$l(4sS)UE4(_i5%t1dy<(*7I#3%f~wE}eOJfOcg3ly zLoZpf#J=>UFF6{m;#tKkAgk%qPe1Kwu!_Ugb{a5x&6qL6DO;!O6yQ~|maa!&SMje} zuj6YHkwz?V>ROj|92ZDyGSMrsgC-7o-A@>Bw3y_IqN)-*=h8X0vG%atfU?tyqSTN= zd@}yUBqm}nf-{>$i&WgGZ3uit&HVMfw}?#**_xKol>~Xy6acdm+nG{q7)Rzt({~=Su+eF9VcEf)J0Nac01N(%2~ED zRMO%$^ArTt+(`f!EV@`Ghe#Aj^;V)dk&FSce=M@!x*vbVBByapT}`(3hr8_BUz}pk ztr6$Or%MpQA{QwpN6Tv7Z)NkQSmfXl>#uL5Ka+`?L%Pr;`YGocA_JIs4*cHSa}%+6 zjVLYfIfgdjb-=2VdH@9>yM)+Bl9xIGb5NJP1QbeT>?Q-|VqKJKMqlgY-m$S-7Rh7& z^h(N}5=+=I#b%+{rJ@9+Gv+!0z37-sTc5DaO`GkGtu3~qcber< zYyRfBxpv(L2P|{aR-2WZY`wUjQz2ZxbpArSl(9D%PTsM#&31UpA8pxpzG9xDskn>f z$sjp|M9cWX;{cAO);3meg($d~@@?GLXm9=IZ}#ll$J-N=M#6DLL`#KCwP}t6yIg9LFK(O>x1bh@LbrX|f z2HCA46uwc8HP%OA24b@R^5?x4@fTV{q|a)B)gkQTCo*3iU`9I3Yc}7N`1Ug2h$3_- zvMO)$%jyc~2?hZ!^yLve49OWN(<8WiF_|ewGA00tM+y5YU>%kb z&KF~Dj}FL6_USTqpu>imdN?czD;qT_J8BQR+W zy~c5k%8eh!x};<=XMW>3h`8UK>)e)0L-QKsI@CUjWs}D;iGCBoO+Uu7@d4<zJv~e5K-%`mg)nu*N!)$i8zc`;w!N5+je{7$DZmSOgl2x)qr-$~c=$|HPX_ zaRPZ8M?3K{5*Hf*+{HU63yZ-*8CK$e^^#{x8*@OY%nMg$m=>D}%a$E^riAxZg zI2mAE+#&b67MBq~#R%Mc(E7x7(0a9oi=@PH8DTr&!V+UGm!S9M)IOndVOP7Sw5LqLj)s}Wp-u} zbAF6?mU8wX>4IdGw8Bz?z{xs9C`17-a_x>VXwx&$2r&=Wv>mW2GQ->ZNOMpu4()Lm z%h|WS|8+~nH7d79HnB;&>$`2ioD1z@EQ>o=K8I{hVIb_a8Rsu?ZY;)wNR~y73E9g7 z)y=7M$IwtSGa$1;dsjezI#fpi0^|pzb)pF-C!twlnMj4md}I`tI1eWa7qABlRVEr= z80wl4_!cvBOPxk`|EM#o(bNgt4x$FsdUXl`T%BLv1z6?Amn%T75yg?JbgS06ok;s= z64oL>D(k3wZ1-Kix#!Y=*0azx2t*2KN>fuDYF%BObNqYmxyJ#s8UzByIUXCT(GKos zcYr$w=Fjl>5hz$@S~0-0?Y(9je0_sGhXrwWsMT^wph4qcV#e)=nMQHaF(yjZK)a!& zkf=Se{u#S$xYOp&xquR$B=wc2(O-xy?m+t@7PE`by%28?lVqYko1P6f9M5wIbCwq& z9>z_U3g8^aO*Xl-#CC7qW})7=Eh+*a0usDT=w1M56c;F28mJWbh0N~k=#cMCw^aZ%<=Vql7SLugjISERwA{@ugFla@d}F5I6r_pS2|R)a|hiwVl?D^ox0kp$$yM z5X3pi$d2X{L)%Q458yN{9U+8}1I0VkH>v3moez+xh_y5Y5UfHVeKp-SJ`F*P^=`Dg z9>Io18O%F?6)(=X$s?H~k7Tt@D29M27Ag){2brDo7gSpsahEAr$O^Dzc62vjrJ8Kn z;Td+~saR*Ct@du)H2d#2=h%g3EwY!-`^dh%w#S~T%d<U*ugZMBoHSZH<7 z1s>T~hx?ZpQMuC?LkxbbX@EeInBuUhcmh~tRrv|v86l=$z}m|*^JNle4kg$KbV(t& zO%*l}B3vZSI2!7rFBRfemWP3HB9D^?z!QOv&O^+90B{pVphT3QpyQZFIi$gz4kGzq{}QVzleebv|e|cGv;F$Ap9hq zg^(4gC`+HibIx?;CNHs}Z~oyULW=^nznsKQtd4o9 zRC#KSIx&}@Pc5+Zy>%F2Lbia|{Qf$x{Y7ow-@}|w0wMF9O0ha~82v|acVZpU+!o`+ zx_1>jNL(;JJK+Tm?G~12l`kLSniY!Si^$bUzlRAS(zb&{HA3Nf;H$-gnVFwz`IWi$ z_?z3UGyG?J;GQo!)?YtLobonQ{Y#((Y)pc(&#I^5Daru6aSbXYA)(F>@V#Pr$4nc> zQg1LRgfdY)xJDvCP(}gPTFWne|7(A3oqNUgL7?TT&K>VP!}a# z>9bz${plFGmk@p0UEDU%diVMwc>N~!ow)Cb`{#JXCOGRg2k5vUCoKY{`lm!styj{O zXtLaG#1#uzbWiF0?tW2NiW3TObVz9*-J7mU)w}fB4T+G^QuxFzdFvcQ=i}P-;=Vmr z3`Ghd?@U@5mXTLxSp?iCXOfIUY?e1U3kwr87q}yn8Bkur4SZD9Qr+-WG<}Bxi^(pD zlgAlgK29D{06p(%Op3)R*~ATET_OHwZ}V>J*|EdPAk!p1zYIZER$_HnUjk{+N%XYi zs#Q#*+3ZsnKx}K4TbO2bo8Py=A!4}DLc|}&of5+e-yH*1F+IZo(lK1jqSo@07#2VP zMQ}Z01H~=P&5D`^U>!!w33RfiWl5DqRf>lefm>apK(vl65UiK>(=}+{TW-0rQ`gHxDS$vbN3pad8MuGJ{yVBn6JY*XIN`=uJ zl6r8-Gtp;R6bdBi@3 z+N!+=mn0K@5Sp}1?zfom5G6$@13ETBe}f-U?cnhzS=EfGzzPkfs1?&Uv~GaJjsk?J zpYtH~Et5_M{IS|WzZDa|)71op4gh?&VTo*R$Gu5xYj5lz zNsT?WuV%Wv{%EavP_}|tHR5f1tRM&1{=j+?yLxfU&b8m;wyem*%}2lOUxmfwuUqZS z3pRbG*=pf&ZBk4kAprxiTq_7shg%aN z;2|_7LcDAgCE5%71msvZD~Q3jnv{vvf_TNA?iOgTkQ6A1nm75A&}w{aW6nUKQ?2s=b7F*CfGG2jT#y1% zelpr)T&sunata&J?|Qb>I!Te<4DJI47jFY&k$J$w93RKEO}MQ2QC5oII%JE2AKEm! zV{G?;6;L<43rk}E!Fnr0hGftle&*r;mzUZ)1w zIkG~^T`p_XD6ak>3Q}*~VSDy>Z`CBD5O-HT;XzHalio-kTBW!iMLg=#Q}*CT$>_%Ph1eOv8H#sTot#;C~ zB{qXtZQn4SOMrPq34lT3k!hbrC(b2N(CpFszhwQTN%jhgLrrt5-TwRkuoYW&+eJ73 z%!aqVWGCHHWp5mM+K#_`Mq;x$u5uY+R1FDuOxvWI4 zx8Hu-DJFF6b+~vy*R91-fEmxq15!Cxj$VOBeHMUJPLiY4O7Rh(!rKB z_8CEO)N54Ogx47I+<9>|Lzp>A`^pi6ivbrNM^r;7@k);{ zf+b6XNg0pg-_uEgSTxCe0?aa&(B$HZi_rjP@J2*f%_N|>B#}|);*tvja>emT1dDaP z_pwcaF!%_(b{>*tVjV|p$+v%IxjFf8dy=glEPxoD_*4S=`-qJ^?W*Or=B3|TAyB-p z4-UkRebj!wl8eNe8EIl-DTAVil6eS}KDY!^G|BQg;?Je#HI@tyAbOZzJvJZDdzl(f#YC0j6!#`ShC_QSTar0;bL@cTBq*mw0hVU#_I+fZ|8b2KWlp#0Q_HQqa2nU&YSop*5@H<`K#!2Q9A>`|@pmFvA4hO_ z)1Wf~cy-}bC`w03n=#EAn?9lslhH^!=LFiVu>)5;y(5kXpc5`w;3xorc!IDU08Xj%2CZ%#LDqx4_SOqNJNx|Y z=C8=I{ym2*L^4(KiB|(g#_YstSP{t54pJ*VSg1svOzSz+i3Ru5Wgpr5$q0;o-1my8 zoLbB?&L|_12?auBcJU^JaXE%Q?zYr(r@>tbGeH;6p@&JU1chK9R>7@1tRuU_em;D* z#V2DyIk=4}tB{9>03bnAQG_1CBAS9&xp)?HN1$S>m|~&A462?&l0R5v1>O|SJ!Taz z{N5J$Hjy+(Oe(Rx&9K>f5$Y*es0N$kxFC1Y@5~Myq{0zI=mWTdf48^~a`P&C`SmW_ zj_0KkTA{_r(2GvUvjPaJhX7#VS?6K_&$Aq|>_?Ii+>tiQ#O7eh14!hO+5GXVHhKQ- z_T_6U?WSiwZ!iAvO?zQgg*|xD4*S9#>6VhY`_o3_)3k-#Y)^5>sxBu<>+TQi9XrIU z%OVS_d2V~mJC@^6oAtqhfUb^ZlUWYyrXS0_2SsCWsKK6iql9^8y2V%QuoK_jVUOH+ zqkZ8G+_3c6&342{Lj$aK+Bz((Ti|{Tb04^SI9vuX{H;*`K|R<<1uvUJau^ZTupeMc zB2jD5&i~5k_NO2H0Z_4<=Qs;cLCP8TJvs*LghDG$yT?(aoyi#&u&1CBYZ@Mf0TgpM zLE`|uDE+p)GR=-ku+^b29P4Mkr?hYg9^#9d58H6+Dr?;}nGuHf0if(B-o5hp0;_+2&=y}= zh4+AXPUg3mgckEpM8cT4DMpA_fNP4vqpPyNK@2Bx*ajHr^bh9kL1MR)GMVcSSpk)v zp8WTXHWlk(oOvOP)gu?nra7y_&{zbdRr@xRH=bAZl-}_#b=osc+koljoxp6D^X85&|b~WQ=)&5FC|I z9+vljFq0^AkWWdY%%g*y3jH9rggL>31vW(cdQq>2iS?htr>bM+2u+ErtZ z9wZ@gRi-V!BgY>9&g<6FQ)Cxhm`qG8jL77>T?x^kDMY2cF>|ZVV-CeYuzUx?$lX{oTll;@M z-EH+*vRvoUHAxO?kxbRK>ASXdx7TsqW4r6zclS5#ug_W}D1t?Xq~%V zgubEAYF>A}dww;e65ic=;4UTrDSh2Nrb1tIT=%=%Ztiy#PjG%eiWNSI&joWT%u~-q zaj`mwti`&kI7(d{URFv3tQ2H}GkEgnrXH=f!7rAjR^?jiHC2 z-;?NU0z`4Dt3;XT6i_}1(&SOO!x+Fv_Ut3Uro*b|%m?g_*p7`KAV@~6o5`cJqKc+K z`)7dn5o?=)dq0UvIQ`vSmQTFY!n2m}AeltD(zd!oOkNWYQRkhojFQlVW)S2d`T)HV zhzQfTzTgn<2&{OiSoOxb>a3LHlr&;}#}C$6h*tUW?A7bGV>W-`&!&I)~`4G}vluYn|KQca8~M?w0PD&G)!1uFqSLYd2ibI_f6-kNNfj1eTMa5^$?SZxcFXCIt_o;Iv# zgran`TN~DvK|(~-AA;PoVz~VX+;l7wg_+sb)lEENzSoM$3?9dwh7@rC2l}ObE*B18 z_%g>}#R%Z84JUWnSg6BR9ZItj$ibs!A)C#yrgg8k`opVib!!IItf=&qvJRIX)JWM~ zl%s66Y6M0Onfax~F`F@I5MEoTbm~X#$UpYk=2wUjKk*b2!T?AVHCT{YAx0q1+3Q$z z;vSNe7NB7zEUPwrBzS3YgwwQ?Qp|^>R9o>4`T8KF(BuL37(xPD;86qA$Ogv{JZea4&EznK8WkbD< z@7-<{*DbKphIj4H$Nkz)w^i`%4%z`|tPavA{DkLZKzCG70E@_^3@a}t^B#Vk5T27! zG~@!5|FpAD`kt-*&20P6r|-0;H|p%#`|9nl_tx7jKf&rw)^*z&8Zu#7w-kz` zbE0a`gsf(}y9|ne86f7oPJL~w9P-akCdt2<1`B&OdJJxF_@d_|QE<;)t z31;+98>_Kfzj?8h%?a2GA3R~pzkCDbL17*lXijJ~J~DPVf%EQ^fn-c7=FPE)$YKM2 zl3^l_mo0`XdxT0(5h`oNFhWH3wNbtpMGDHfu~B3N34mk`S;e9EZ9Isjk&v;zFMq2Pem<}8_Je|vqU4P^nf#t1(n{?(ZixdzQ6jtp|H2gP1<0GH^*zcD5>@91}# zMn|!*rZdKywzt~O&ATjz5Tg%B$}J^SESMU$24Y_$WY*V^9NZW3*vh?I?Se_Oson$k zF+j41_|jgI{UpyES%T2y4q#ePfgTm_0hnWv0_P$lnERQx5*HtHxUL%r06L+)6n`Or z%1g1v?z}#cj6(YcuuO|zT_JgVj`{IS!nhI4KtUmF?VjJhhB68lYO3f3G5+`j^vuqg zeSm$;RZVBv%|~KYExv6N>$WYYx)?F#r%d>yv_ZM zSc+|<^V=v2gxT@+>*6bU`K`)$uzwS(8|3odE?3!eU^-I<&N9F|LR>Q{RF$H z&m3KJ9LZnF3{|~SxSgKAWTxJAd|8DhBelQ2>$CRLKJIetu@k>*JAK!ZczrsS`mpeV z3}6D#N<5bbRp(Uf>kd5B+Fyl+5*M|RuG_sPR|abvt#jK)-`zIT`LyVGbS-V@yqsbO zeAYS@xrlI0?!D=_dOmtd?(4f2eRkI$`|e@}_g=NV``Nt~C6SF2FYdm=e0E>s{HE=6 zF6TU)%RTov_)ZpJL3V{6=tZw^Ug4wjgELv_0AoO$zW`biAB6i5v|gEu8thu9hE(i> zOw;L^5Qej_pDH8iuox5;qTvHvRg1i}sewvK9h7A(Ge4Sgj9~hvJ=?9j4Z0(&9#dw{ zfn=Saa?Hd*V(&C5ip)8iWGwV!%bYqHGd0vyEuFSwpoIr6}b2(6YG|ln`a$NB3;B6 zatpKylZ*Hl;|ThMMXnCTw5o$hD^zC|(38fb2PsSE!Gi~#_1aAXQk_8q@yREjbZ9a} zP^{ttvS_OFstxskw68u3w918|*r4xz_q+D+!w=i-x8Lqug@COFmO8rtrH(D&DbT7; zt=~1+bu9wB8VJk_t~vk!KmbWZK~&P<1V}Z(y3b1ob33`yN!VV;bUT_lyIwlJJD|0X zJLt5p`%*`9`-^^e*K2!s>A{L}E|#fkvh<_1?QlU7h|iC`NmyW$n4mdNi0i}f!@H<= z)NKSxCI*?@t-8lik{p22cGZnPu#`$Xo}E6cs4TL40^WT*d$~)Ld?D+$(3= z08QU$H^NWlVFkRPF^dG5mBc_0;|}m*!23Gdj*@ESw)n$0?9QZ@Y~x$0wu_`Ns?lOO zrUn)6YxGO{6>SbRQv{_mf(6x!mao`5%^)3n$&yEFE(MtFppw~p*KD@hwk`JVK`7BG z0n`AT-fdJ88aa%RTVtd9-vb;RuxJS}zmb2~H8Z|!H~-fkZPkCzv{^UYMBjPVe!uK} zd;ZQLyBwvX^{aEN{qox_i7~Cq}-7A_4taVw;(BZcUqM zxo{;f%9uiuo;)*D<|0w}KzkF(dTG{|7b3p9$C)El1SKyWIx}7wgta8o(G?Rauft#z zx_W>(%1RpZSUxn71tdHd6_fObv8Rua0kKk$2s>ItsNn1>%NxSu zmmRXJ&zVjSrJeZ`LElZK8wBw(BoW?GJ+;#A`o$ym=ha*7xtEt)=|v~o-&Xv)J^J=$ z+qSXRh8vIAl#_0=StnFmP5gCR{2!AnXD&&m35z_ElAQ`od-vUUotRI_HOVf?NP$<$ zLjhbFYP3kssXqv0y7J1EKZ)P9jk{j^N%raGF8WQ!a>1!QlE44`@13ME$vs`$*T4RC zhaEvOR{LtbE2|4RyznppK{76PDr2fRg}ynPT0gn za!yoJBgiPd^jR+@{y8tk(YSyga#}BacE1atx`5EVPQ6QRyI4TVqWe;)fL{7ei%uw# zw1e8hZBw^xv`#M_OKs%dpWgM|#Rj6Jb3za}9`>nEfhgN4D%VF9lRn>J z2;FmS?xK@zs3gVCoAnjg3o@;>yV>dvH(GiARO-2>SpBY*w)e%~+Qr}b6IL$8_tXT0>WAp#I8l|e+^`5VG1>P;)y5h-h1zLv^0TVxiEBG4R}2-okxRF z173q)$I?|Q~sr?^-FU3C%{?CN)&LyNZ2XSXxDeI#-F#E$Fi zbo9>v33KNWMghka9Z zg$ov6Zuw>T*3b;lp%XW>cM!LYOBl)>KmB1CD=e8=(5#_MVI@_mxdDJ)DuAYHS|M~g zxZXUOHlwT@7iBH&1yw45^ZScC?Y?(n^fxS1VXV=qMe-Hd`j#oSzAFe7PrEIu^x8tK zs{J_1{fDJ& zSz$?sjv#2L*0m7ML&9zPiCf8#M*)7>vDP|Ey6kA9@z#VA*VfPk9DBI&L? zK5m0}K`__IKqr^Mk`Zo?H|s!naj&8zUCQgxO=Dl_#1$P z_bTn92YzXlc7OtvifQJVCoJ{%H1NEMzb!`D+}mM!#Ed4bZ?eZutF(_lXrt^f0Y=O< zYkL9BVB@QIp#h9wt~KsQhau%$-# zaMZqQrx__-Tm=dNc2-EH0G)n<7P@KK5ULv-)cn##n8F~+Y2DU6Ht(Vnt$5~i>)6w1 zDOqHcV`+<{=rJohAW;gm2THTyabl^-9QWbkjgy2JMJe)(W93GvJ9GK%R$uoKMLs^V zf4oP$EWjnuij|&_nSdA1*VtOSzQQGfM5jragAevI^UTvT~%p*`{C-?ZU!WaY~V8VXSD|)M|NWR1@k;@*3yWyyFNf zK8v>$eGUF%GSH6-LPhR57AW4m1lcB$(Lc~XZkyh!u~}s)_7T?gVrbsdC@OMRQ6*f& zyRmQvY(`Fjt)N<2GGQz^STQ^BCbYp^kWZ3ldLLF`zVnk-@sw|8dm;Dy?yES^X<{E zA5SRCetVO!y;j>xjIQ4v`NeX2F*zm73qctln1@u3)+dGx?&9q~ueC#UJvRT(P-VXH zzhu$BY5#H4la_>+Cpo9gTDR8NN0D9j3oPqDyZguVb7F@Q7Rf!yI2m#T)|9ZMb;`4l z1y-O^;8n6l;7TvaAoWklFBx4D7qxLBX3=kn-xHskK1*Io)=6&Z*y2lf!{}t76048o zo)%rFj3VlHI=7a@WB;@7&PGT79D8oyVo8k1ofy zfmSnu-Jd^sm+GeL(6x^_<7MLfItNnX)9tu0;W`~x|Fme_YjN95^lyoao6Jc`Sx_uO zRVO+2=G+75T@PD;NH?N~pNuO+Ze9TnO>`N=Z(%30F*@Ofl^g8T3(r9VB}uTEhrAQ^!(3p6Vy*{Zb8tJC`RL@Ly2X*KHK)uCd;2eo#vrlE16Qw#8+qC zkkpTo(VAB^-HxzN&H0PVXim`eummO9*ojg~w8b6BVd zTyNNAL&O7CFSyvUvf&HGDsy1_8id0IhyymU@i;JDkn+q%cjr9*~taI{ha zGZ_KAcsSM81&1tC)Mz{-(anhGP2E(^3=O1+v@~^Ktf(Q#&xffdlwY;bPB?S1H2@5& zOP~qs-HTNxW_c(rV+h(*logT1_mk9DKvIJ^97W64cBIwHPdkp-F$N=osE-hlsKiLoMX^p5IL+gd+tZ`RC&fV=|w9|RbbTA2lH=5NojPUweL?k}{h!79rkhII;{ z@sy0icFk#CyFBB7`AQMCeQk959Lx82S}f0ORso?9G90|Q3I*;Xa3`QW8|&WTIDHOb z2#Z2;Rx*{VsH9VY{f_vg#Knt}g&CD5fOSHys}O>b!1Z_%AeQ)Eq#d&klY4y|R&3mn z@V+XpHHa`DJB$?!JNJ_?Erg*TYYl(Eu4KIv&q_T!%qjVRGZL~GsbP&)&duQyy`U?EvVgRjE7=ibW6?vLl6Y<0@O*K^h!A2Ec|?0(#7- z)nl=#A_3{iGYjn66=Az}NuS+6?H!wYccU$wQf}P<|C4j(+UxJVV3$08l6}0X-XUOr z|7D2P%jp+oA6o4z8?B-qFAX}ygTE@WL-F(MN-UZ~K*b0JUA;j3#Ndn2tQ~gR@{{er z1Al{sX|lC2-*o`nPX62#w!Qf+8)oc#)3LZ?Ssf!@IwFo%0D-Dj4I`+6fV45Jadb-D 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 DUU1h& literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/drop-down-triangle-dark.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/drop-down-triangle-dark.png new file mode 100755 index 0000000000000000000000000000000000000000..9af2042ab80f7860305fc89a0c9ad89ad41bd8aa GIT binary patch literal 1091 zcmbVL&rj1(9Pa{CLIgRY@$f8((S)r(wzXZe!G3gu28LuTaX0DO2P>>UXy07n;?Tsz ziyrh3FnaK&7vsf)7$t!iuSPk0AYRmyL=E`5ALxN#V$=4$_kG{b=llEi?99YK|Ji0y#G49!lx(pGhz(w6ml3!lDB!R9a$t$q}U9hvTs!y&taBgj; zq^>Qiag7`w0|`&W1O`M3@Qj-2ie8dz@rrowizyPcRM2vgY&%sh%z~`tKoAQ@LMqKL zfaAhUG{$kvC}3%ZrD*(eAtoxuIFaQ+=OM8*M_Uk!QodsgpOR!1AzP%VMxzmKM8cM{ zNHOtv+~;7~5Y`B}t0q#skm-(e86@bcj&38}GJ(&iRIEBmlGxLB2!>rK91@#uCs8C`wJT z)VcvpBuhyW--IV3p}5X zFieh(b5dRq(lpBm`AjZDcd@eRBE?i;*RGE3cCh@hSTXBB1zAqXvTEH9n5|mKa;ugN zvU41`SWr~m^aYpv0=46nprc=dTHdh?(8{o=AK}5jBX481|H&GKouT~p_^VyIBHV-i z_OSW!;c$GQiD$;a!||(r?;Rej6c5 z4i2v0dNgs@34Hw7{BTYleDl3`X@9eMvN=Em9-M!e`h05WZQvUO&x1?*TPcEmHJsXf wx_XR86YxWr?#Ix9+UjBmUA=Glg#{$-zJh-9RL6T literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/drop-down-triangle.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/drop-down-triangle.png new file mode 100755 index 0000000000000000000000000000000000000000..cb1c968e10703f7ee0028092736559e73ca4c261 GIT binary patch literal 2892 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 + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + eJzsvemOJMmRJvgE9g6+PxogB1NBU1PTw7iDBcLj6OEM2V0g2ceiMSgks6LJnM6jkJVFLvfpV75P +RFTV3D2yIo8iie0KrcoIF1dTM9NDVI5PRP/u//jyN19cf/3mdw9fxKv5MP3d3928fXj27s3bnx9I +Pfzi5cvvvn33FqSf/Pqnh5CvZql0/Yv6lVX854e337548/rn/Ooqypf3uPonv/j22e8eXr58OPzy +2euv3/3h2cuHtz89/OSn8v1vX7x7+SA1/vDs1e++e/v7h7dX3/7x9z/1W0tbt8/eyffrz5afhXhY +fj7Hw5e/wtfPXv/x2bffvvh/H3CzWHGv45vvXn/94vXvj2/+HyEevojrIW6HL4p89d9f/Prh2/d8 +f/vm+XevHl6/+/Ltm+cP33578+blm7ff/vxw8+dnrw+/evZ7+ebZ4f+WN3jzp8Px5bPn/zHJW6ev +7l+8fJAXfPXs3SEs6IvrX4Tlq+N3L15+/Q/fvfrdg7x63kiOX7HJf/pW2pJm8TfI5atfvBLKbx7e +vZPnkhuiP3/998fxMYTI8pN/+/XD71+w+6Vb/tdPrdm3b7559eztf+DawxfrfJD/7I6/fXj1zUvp +Pb7uMl+lwxf8t/9p9eQtWOeLJVfplZIPca6HmKp+3/vm4Y8vHv7088M/vHn9oB1w/fbdb3QI1nWe +9V/95tffyRj/0+sX7+TBMkib9sCv3nz98FLqt+vvXz7ji7OE/q9W+O0zmRPvZOzevPzuHWdW9TtI +D//y2Z8fMExBb/CP3zy8/u2bf+YzfrEEaWfZrrbDssobhWVbD6Gy/QWPus3tnqH/q02jITTj7WOG +fCnj9I9vX/z+xeuffxGr9HVcZh3Cv3/74us+guFQ7X9p/KoO/2/+vz6tvPi7dw+v7ell3tz8apgH +89WvfiN3vXv99c2bV+j9bzHBZQK8lrnx8s3v9bv2N7+Ry7/7Rt+An7+Sgfry7YvXaHP6B35Tv/ry +5Xfy1d+/ffPdN794/e9vpp/o0v7nh+eyfmUsvz784+/+t3yQ9cm5efjt22fPpQH53OpcPXvxzU/f +25y83NuHg34pV/Kj//7+q28f/l1WVb9cqXev//jw8s03Q7ONIlzl8C/P3n7z/U1/+fLZ62dvD6S3 +ln/54o/yzTPpqd52pz2hUZkl30jn8BJWObnBeyoMXz3hRs/e/UEY0MPrr79tbevH/YMr7fvb+81z +zMG3h+Pb7779w+G3b968bM3uv2qtG5lU1P/buMeXvOD1P77WDjq/k1U4vZPwn7+5u0jtx+8gX/4t +t37z7OXLF79/++ybP7x4fukGF75vd9LvPmRi/fnV7968fPHtqz6fBsqXz96+e/H85cNv/vztu4dX +Tx7cw93XL4TJPbKM31vnN3969u75H3754ndvn7198fDe1YcB+PcXr7+Wuf+b7168e+gd9ObVN5BS +Dr/5w7NvHvga7/5wz5q/aQ2mr4T1j8z9iy/ew/VDPhxfD9///dtnX7+QDUWErr9/8/Lrh9eHX4O9 +T7tPsn2Vw/Hr6d+m2UpgWQ9/99Xx7fTfpvn0J5yUZSjRymol8X8vGf9P8msspZU6b7tyPZSjlBsr +t0O5m++n+d7L7sHGn2UocSjrriQtE3+VkKUU/q5D2XblOhxbuWnlGG6l+KfbST7ckXQb7scydh0f +zn/iUNahpCWjTPprKUOpyyZF/70eylHL9H9dGsvHRjPuxnMdRrWPrZSpDe86DLKO6ji6VQp+Y1Tr +bny3YYTl38mG2gf72IZZf2OU78bRln/1Z7441su0G+go44rfGFmMcWapHOVyMsLXVvZjK2OJX3cs +tyej6DeNHMM+Zig6SD5kmw2WDNBkY4SxurFyy3Jn5R7FVxZeZhzLwFFareMrO/TIRXLPvln48pmv +t/FVbvnEwZ4wc8rII0y8L+6zxBjXmGMRZWuLRym38V5GO6xxXde0lrWu23q9Htfb9W69l45cUkxr +yqmkLV2nY7pJd+l+kgcKMkvXnHLONW/5Oh/zTb7N9zIXgnTDWlLJpZatHMtNuS33Mk9CXepaU821 +1K1e12O9rXf1XubLMm1xWzdpZ6vbth23m+1uu5dJE67j9XqdrvN1vd6ur6+PUm6ub6/vOJMWeYH1 +mI7lWI+bfHU83hzvjvcyu8LE3o436026kQe42W6ub443Nze3N/cy2QJHYb1Nt/lWHu623m63x9ub +27vb+7tZxiXerXf5rtzVu+1O7nV3c3c73d3d3WNG3EuH3ad7edN7efb7aylyy3u58v7kR8ZyltFs +n++GcjuUm6Ecd+V6KJuXSf6pQylDybuShrIOJQ5FJuB0v7QysrDOfOfx0e/Gn9tdudEy8ddxKNdD +2XalDqUMJQ8lTXeplXVX4lCWoYShzGPRLp+s78enH39uhnLUwpW5G8f96O3HzEdrP0T7YZGhmIbR +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 + + + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_dark.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_dark.svg new file mode 100755 index 0000000..e698e19 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_dark.svg @@ -0,0 +1,1935 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzsvemSJLmRJvgE9g6+P1qEHJkKGgCDAcYdWZHwOHo4Q3aXkOxjpWWkJJkVTeZ0HiVZWeRyn371 ++1QVgLl7ZEUeRVK2K1CVEa4Og5nhUOjxqeLv/o8vf/PF9ddvfvfwRbqaD9Pf/d3N24dn7968/fmB +1MMvXr787tt3b0H6ya9/egjr1SyVrn9Rv7KK//zw9tsXb17/nF9dJfnyHlf/5BffPvvdw8uXD4df +Pnv99bs/PHv58Panh5/8VL7/7Yt3Lx+kxh+evfrdd29///D26ts//v6nfmtp6/bZO/l++Vn8WUiH ++PM5Hr78Fb5+9vqPz7799sX/+4CbpYp7Hd989/rrF69/f3zz/wjx8EXKh7Qdvijy1X9/8euHb9/z +/e2b59+9enj97su3b54/fPvtzZuXb95++/PDzZ+fvT786tnv5Ztnh/9b3uDNnw7Hl8+e/8ckb52/ +un/x8kFe8NWzd4cQ0RfXvwjxq+N3L15+/Q/fvfrdg7z6upGcvmKT//SttCXN4m+Qy1e/eCWU3zy8 +eyfPJTdEf/7674/jYwiR5Sf/9uuH379g90u3/K+fWrNv33zz6tnb/8C1hy+W+SD/2R1/+/Dqm5fS +e3zdOF/lwxf8t/9p9eQtWOeLuFbplbIe0lwPKVf9vvfNwx9fPPzp54d/ePP6QTvg+u273+gQLMs8 +67/6za+/kzH+p9cv3smDrSBt2gO/evP1w0up366/f/mML84S+r9a4bfPZE68k7F78/K7d5xZ1e8g +PfzLZ39+wDAFvcE/fvPw+rdv/pnP+EUM0k7crrZDXOSNQtyWQ6hsP+JRt7ndM/R/tWk0hGa8fcyQ +L2Wc/vHti9+/eP3zL1KVvk5x1iH8+7cvvu4jGA7V/pfGr+rw/+b/69PKi7979/Danl7mzc2vhnkw +X/3qN3LXu9df37x5hd7/FhNcJsBrmRsv3/xev2t/8xu5/Ltv9A34+SsZqC/fvniNNqd/4Df1qy9f +fidf/f3bN99984vX//5m+oku7X9+eC7rV8by68M//u5/ywdZn5ybh9++ffZcGpDPrc7Vsxff/PS9 +zcnLvX046JdyJT/67++/+vbh32VV9cuVevf6jw8v33wzNNsowlUO//Ls7Tff3/SXL5+9fvb2QHpr ++Zcv/ijfPJOe6m132hMalVnyjXQOL2GVkxu8p8Lw1RNu9OzdH4QBPbz++tvWtn7cP7jSvr+93zzH +HHx7OL797ts/HH775s3L1uz+q9a6kUlF/b+Ne3zJC17/42vtoPM7WYXTOwn/+Zu7i9R+/A7y5d9y +6zfPXr588fu3z775w4vnl25w4ft2J/3uQybWn1/97s3LF9++6vNpoHz57O27F89fPvzmz9++e3j1 +5ME93H39QpjcI8v4vXV+86dn757/4Zcvfvf22dsXD+9dfRiAf3/x+muZ+7/57sW7h95Bb159Aynl +8Js/PPvmga/x7g/3rPmb1mD+Slj/yNy/+OI9XD+sh+Pr4fu/f/vs6xeyoYjQ9fdvXn798Prwa7D3 +afdJtq9yOH49/ds0Wwksy+Hvvjq+nf7bNJ/+hJMSh5KsLFYy//ey4v9Jfo2ltFLnbVeuh3KUcmPl +dih38/0033vZPdj4E4eShrLsStYy8VcJq5TC33Uo265ch2MrN60cw60U/3Q7yYc7km7D/VjGruPD ++U8ayjKUHFeUSX/FMpQaNyn67/VQjlqm/+vSWD42mmk3nsswqn1spUxteJdhkHVUx9GtUvAbo1p3 +47sNIyz/TjbUPtjHNsz6G6N8N462/Ks/88WxjtNuoJOMK35jZDHGK0vlKJeTEb62sh9bGUv8umO5 +PRlFv2niGPYxQ9FB8iHbbLBkgCYbI4zVjZVbljsr9yi+svAy41gGjtJiHV/ZoUcuknv2TeTLr3y9 +ja9yyycO9oQrp4w8wsT74j4xpbSkNRVRtrZ0lHKb7mW0w5KWZclLWeqyLdfLcbld7pZ76ciYU17y +mkve8nU+5pt8l+8neaAgs3RZ87qudd3W6/W43qy3673MhSDdsJRc1lLLVo7lptyWe5knoca61FzX +WupWr+ux3ta7ei/zJU5b2pZN2tnqtm3H7Wa72+5l0oTrdL1c5+v1ul5v19fXRyk317fXd5xJUV5g +OeZjOdbjJl8djzfHu+O9zK4wsbfTzXKTb+QBbrab65vjzc3N7c29TLbAUVhu8+16Kw93W2+32+Pt +ze3d7f3dLOOS7pa79a7c1bvtTu51d3N3O93d3d1jRtxLh93ne3nTe3n2+2spcst7ufL+5EfGcpbR +bJ/vhnI7lJuhHHfleiibl0n+qUMpQ1l3JQ9lGUoaikzA6T62MrKwznzn8dHvxp/bXbnRMvHXcSjX +Q9l2pQ6lDGUdSp7ucivLrqShxKGEocxj0S6frO/Hpx9/boZy1MKVuRvH/ejtx8xHaz9E+2GRoZiG +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 +5+8WHNujgn37Jvf02foBF49O17EtRgdL6PPOr2X3eTnApGRT1pjj5tvyKZydOhfd8sG4HeMKh/VO +7013OIJF5f3+3OsnvTc1vMU23l1vVJ8w217gxTs3bjan2vPDR86ahVpD/2JkTVDjJsJv+qe1Z/an +yOaVZeNGuLhUMMvf2+8wpQ+OD548yfVhiTMCf1R/efbHf3725Y9ffXK/+fLzb9I/Pqvvfz14fP76 +i1e9333z6Hef3/3koNNsDP9gvv/rQ/P7L77+/vGfn6q/fHH0r0+efj24bGWPHsqn+R2h1O+TZHj4 +8+Grz5M/fH3/340/ff3l5xfDr4d/k/f27nx9/+h3Ay70zWj/1V//fvT1l6o8Puh89efWYaPxyaup +po7a/4D2ssNHd77I/vvx6PDnn/bVf9c/f3DePxrC4I5ef/Zn8/vLR4fqDz/u/9z95Me9O4dnyTen +M5H9ISvOsh/+/s9/PfjuoPHD/Ebjcl/89PWXbx799PUXw8b5Z4ef37l8dPdx+2zvDjHr0f+cPLs8 +PPvpx2y/+3X35Rdn+69HB6+z/xZj7PifPx62xNF/vv7yL5/8aPFAl4cH/3717z58+uN/Dp+0n/xu +v57//IcHx/Xf92wfXjbbl3t3ip/vftZ62NJ/v3vwWp3c//LBnfSPn+1/+/n/fPb1wSffPzooL//0 +5x+++f3r+61W8w1+6nz28OzotW1ZJPea2aDzh//5ovPvb9r73Tt/+aQ++Oxflw+Ojv/4H+z/p1/f +/+Z1unfH3P/hp68f9FqfnH/21dP797Lzf33VybJ7w7P0waD1RHz25gvhMbYOvxn+AGzLPimzH9Ok +/UXn4F4Txlc8/epu/fNyv5s9P7cU/OPoztcHT778/Y8PPy/0EMblyT/N7/+cHfT//dmXP7T/+YU8 +/f1PhPbPvTtA0J/Nn36PQ/JP86P5ew/59Of9N5+aupuaP7SPEvHT758e3mt++cdHv/vsvwfYisEf +/k1YqMjeneT0/z5R9PmzPz/60n368seHf7PFDz5/+D8WmfyHfAJT92Xy2Z///PBzefiXV185PD9+ +9eX99s/f/ptG0ncY8D3b164VKLT/je/AT6ED4u5XL7BQqQimf7d/eEKsPiyHf1Hmv83PrQffHf78 +2eHZvb/952Gz+ckf9s3p938vnt95+f2DZwf7zw/Pjjv/+fo/P33xau/O/2/vy7fTZ3IFn4B3CPsO +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 +wknerg== + + + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_light.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_light.svg new file mode 100755 index 0000000..27a1290 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/hamburger_light.svg @@ -0,0 +1,1936 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzsvemOJMmRJvgE9g6+PxogB1NBU1PTw7iDBcLj6OEs2V1gsad70RgUklnRZG7nUcjKai736Ve+ +T0RU1dw9siKPIontCq3KCBdXUzPTQ1SOT0T/7n/78qsvrr958/uHL+LVfJj+7u9u3j48e/fm7S8P +pB5+9fLl99+9ewvSz37780PIV7NUuv5V/doq/s+Ht9+9ePP6l/zqKsqX97j6Z7/67tnvH16+fDj8 ++tnrb9798dnLh7c/P/zs5/L97168e/kgNf747NXvv3/7h4e3X7988Yc/vrt69uLnfn9p8PbZO6m0 +/mL5RYiH5ZfzevjyN/j62ev/ePbddy/+3wfcMVbc8Pjm+9ffvHj9h+Ob/0eIhy9iOsTt8EWRr/77 +i98+fPee72/fPP/+1cPrd1++ffP84bvvbt68fPP2u18ebv787PXhN8/+IN88O/xf8hpv/nQ4vnz2 +/N8nefX09f2Llw/ylq+evTuEBR1y/auwfH38/sXLb/7h+1e/f5D3zxvJ8Ws2+U/fSVvSLP4GuXz9 +q1dC+erh3Tt5LrkhOvW3f38cH0OILD/7198+/OEFx0C65X/93Jp9++bbV8/e/juuPXyxzgf5z+74 +u4dX376U3uPrLvNVOnzBf/ufVk/egnW+WHKVXin5EOd6iKnq971vHv7jxcOffnn4hzevH7QDrt++ ++0qHYF3nWf/Vb377vQz0P71+8U4eLIO0aQ/85s03Dy+lfrv+/uUzvjhL6P9qhd89k4nxTsbuzcvv +33F6Vb+D9PCvn/35AcMU9Ab/+O3D69+9+Z98xi+WIO0s29V2WFZ5o7Bs6yFUtr/gUbe53TP0f7Vp +NIRmvH3MkC9lnP7x7Ys/vHj9yy9ilb6Oy6xD+PdvX3zTRzAcqv0vjV/V4f/N/9enlRd/9+7htT29 +zJub3wzzYL76zVdy17vX39y8eYXe/w4TXCbAa5kbL9/8Qb9rf/Mbufz7b/UN+PlrGagv3754jTan +f+A39esvX34vX/392zfff/ur1//2ZvqZru//+fBcFrGM5TeHf/z9/y0fZJFybh5+9/bZc2lAPrc6 +skS//fl7m5OXe/tw0C/lSn703z989e3Dv8mq6pcr9e71fzy8fPPt0GyjCGs5/POzt9/+cNNfvnz2 ++tnbA+mt5V+/+A/55pn0VG+7057QqMySb6VzeAmrnNzgPRWGr55wo2fv/igM6OH1N9+1tvXj/sGV +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 +8xm/zlGv8eucwWv86lmK7Pe2LO38fNRjvM/gMp+zPUe9ruvrPfhZQyXmECh9Pt0czCFP+XQQTBeV +X8g9uB/ja3A/5nMZ56jXBZ8zeN0czHgDgcTXtuT9r09HPcbX4znm61Huo94P/cs98M25nts9V1/P ++MzV52245urLeM/Vl/nM1eeo11x9zuA1V59nfG+734b7qMd4n8FlPmd7vY/nur7egy9vzuvmXM/4 +cmT223A7Msf4cmSO+VzGOep1wecMXjfnPON72/023Ec9xtfjOebrUZ738XroX+7Bz589kMY+Fu2z +BxLml1fRmGL/5JZgtpEe4222IO99VJYurff8H8ZPHsi97fYq7qMe4+sMjvk623PU67q+3IO/+zR5 +pt7XfT2OwvX7x6W4zvQy3ld1mc8duI567tV1Bvd9PY7Cve12Ke6jHuPrDI75Ottz1Ou6vtyD7zJN +ntn3dWuPr3CdwvEqrpO9jPeFXeZzE66jntt1ncF9a4+vcG+7vYr7qMf4OoNjvs72HPW6ri/34O/+ +yp7PAJ/OKF+GgjC/Pu+OUhV7BMfYBQP5NBTgUPUZ76GAzSxSfX+IYfw0FNzb7s/7Pg== + + + 6jG+zuCYr7M9R72u68s9+M6LkdetPd/tdQrnC79O9jLeF3aZz024jnpu13UG96093+297f7C76Me +4+sMjvk623PU67q+3IPvuRh53dfz0V6/fz7v60wv431Vl/ncgeuo515dZ3Df1/PR3tvuz/s+6jG+ +zuCYr7M9R72u68s98NQOshASOJ/8niF8/ifnyQr3t5t1jC+X7JiPh3KOevky5wxefs/XE3M4ZHxx +73nY8mntwxPQttdq4hhfK49jPo74Oerlso8vnv3rdHCK/1yh1n/4+z9/BVr/U+Kv5e8Wf/Ud+xSE +PbFWvGF/xBj7/vTlaCcU+3cOFuLd7Vq9U/lSztyRGesLs+cDECu9zk7tkxFr8trO3GEz1u+jfnsf +tSn9/z4DG/fcscb4tO2Q0vt91GN8ncExX2d7jnpd15d78N3mDvz7p1tLb6J8OgX6HXyxr5O9jPeF +XeZzE66jntt1ncF9a5t1tu9tp4Rq76Me4+sMjvk623PU67q+3IPvMnewauPTfeVp50+vLC+wfHpl +L+N9VZf53IHrqOdeXWdw31f8RO3907bTUobXUY/xdQbHfJ3tOep1XV/uwXcLZKEyyqNnWSccwRaB +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 +3x/Wu/nN/nv9H/gN+An3OrCRH2jT/wGF4u/k + + + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..f61967700d751bb13dc94c3f5d756686f4cc6d08 GIT binary patch literal 1023 zcmaJ=PfXKL9BxGCLKtvRBc5IgA!u0t4A!w`6UN%X;!2jWgn81gePa!@ue5KjaGQzA zb~W)LM^7edj8{p-NQ_=gG+s2u1M#lhxasTIh6iWU_PzJZ_kF*=ua#d}3JqQvq$nzs zU6u-D9U|ZPV1WD+FP==0Wem$DyoxHgt~!uP>8K1r)>PMF0jm1;)_a(ssDTNiSi&VG zCu+!KR3F25rcKyHX5O<^Z3ALZhUxyLWn^_vPA$TK6p9ED>@*s^I2%^kPSmSse2m-^; zMg@VN1`&>rupD`XFh46s1u+r>orfmg9K9kIq)f*bIVI^T#P;i1=H@yT5hLIq+qP4+APm- zeo9@SqWm9fnmx3O3-C1Fe+s+BZ5y%$=%SjVk;YZVeOI=acA$!pQ$%R9Tg7}8VdPek z4brOum{L^DuzbVSHbYUwtmR_W(qL9f(nNzX3|))}nUoacxmac~#`AI{#i!=xWG&FY<8uF0~ zhVOkE%2n?_SlAnF{T^$+X&eV~)b8#~qZDjDZOnz5BjY#DoV`rl3SMlqHsAUeo65>7 K(zC_ecmDuM!$9=_ literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg2x.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-combo-box-bg2x.png new file mode 100755 index 0000000000000000000000000000000000000000..57663ca70301a8d569f0d5664f6ad989615f7e91 GIT binary patch literal 1124 zcmaJ=U2F_d6rQ4sQtB_XLT*M=6?SH4yE|*gE}hQo>V#>U?S@7w%+B1lqvoeGw|3h2 z$rhm=2#F96NGg%^fmewL(moXN;6=iN_zQ`Mp9jHH-KlPQuqHQi&pkQcch0%zyF;xl zTPrJSDhPt8l$ym1-k1CKoB;keb$#27w`!DXM{QOo$}0{ec+JW|AQ?&*%s@r!?|lFh z1TnK#&$gp>c{`_C2Br8hlxNr&O%RDKo~@`o5P=-*(#<6K`Sx8B=vtE88I?n_Ex>NQ zdBA~f11(u~pht~sARJ=CbOLYPBN9*J=VtOhUJ|)R+glvwc z^Z7iLZ=fuvi)P~SxX%#|2XREu?KhF)1xgYDoEfe^RO3vy-NfKB3y9L9Z zrZwHEYr+>sdx}jnRLF0s7%0pC4>gSGXcuMRpL+jE>}LCINN1pH^*JgYT<01;mCXqb zRFLIlEo*=A7F)Y5WVzjz4TLrp)XR#ho4#Y+Btn)s$#juos!$S>B<7%WUE{)Rnipds zA(n26F-$7VGyKMlsSq#lsYptQ#fwOq9RuNgB43+eK8m|&MZPlKLE9~V;Nww zX-+R)3ty6N3agc_rKu#A#>LS7X#W~@(S`Nno72L@hiU0U6YJfEW)Ja}<#bBA_y^WIsnAA!+%1uuHOa?irCpI~%iM(_Np&%@{L z1D9-k7v{?km-SYSuU}eouzKHu@kF4mcIZsw$MUi749;NOd6GkO)`q=SRtG_HC`BckFb%~l-S?}VA z@bY2(*VexI*J>8b*jBhzaiU{c_Hv{( zJaZG%Q-e|yQz{EjrrH1%&GK|{45_&FW||?_VFMmlUBOES?Yj791Y~3`NO_&PSEYM( z&cqMrpJ={l{vk0>{+rsWt!;6V=i1-zs#_9gbh>!n{TD)yZWK(;oT9coZd#C3s*`5w z9wSA+y*kHMNU;`rxw)(g6ga*xIp&$s^qpr?^@?x4O*ykhDvoK6)zdklixv9LNbNc) vV|`uk^NtUumcQrE2O8vVEB<6Z12aR+ah1}3{ct;=D;Ydp{an^LB{Ts5ZI)sk literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-sprites2x.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/light-sprites2x.png new file mode 100755 index 0000000000000000000000000000000000000000..a70f5dc87dd7dfd8dd41e26a60084e0fb8971b63 GIT binary patch literal 5351 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 XIAcdL`d-4HOCl|>u3F_|TjYNL)~HE) literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/pop-up-triangle-dark.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/pop-up-triangle-dark.png new file mode 100755 index 0000000000000000000000000000000000000000..53e79bc9c7ad81ee43975b8e14c773156aa47f9a GIT binary patch literal 1153 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 DJHr79 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search-bg2x.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search-bg2x.png new file mode 100755 index 0000000000000000000000000000000000000000..f88648051e896f0715e97a2cf18da0ad54e30e94 GIT binary patch literal 1800 zcmaJ?X;2eq7!Ef?qeMUy6xL7?s5yZI0^v#m!667qD%g01WCgUPPC<2safG!s$qkL=9r1WpEk@#49CoPyk9~>(*WZ z!!a0}FBGCwB$c1Ql)_4q#NtEJDOD&Mg9(q+sU*@&5CPIaxdLJlMp{o30ELW2ND1as z_$oG-q2TG&pirMElIk<1p)x{b1Q4!cq6A71kpMbn7NlY7ScG@HOmuHClL^2(7bKHK zcrPlIp9HXBH3$Tg0*O)zl?u@5Bx+DFolad0&?rm({Nl|-?mH0j9a|G%qJ`O#a02*6Kz zrzF;h)~P_U0Mx)*wG?e!x{oE4ipf@k5(HL@U^r{Cib)wT0&6m06~GqK0YAP(s(>s8 z|91#JpBWEn5D6p&<2ft>%0W^nWK23OhR)?s=#1Ds{|or5-a@pyQGPZtiKbGys!9@=rM<0aHc~_%@{lqy}j(#utcuurP*KID# zm~%+=MERh93kkDB>&gE8X85i*P8x7hJaeo--n zr%y^J`xO_Pi+ID5`tlNqf8EOk#F*M`9}-m585ue2;nezf-1^~|6Q$kJ1tpj3S zo*T!@CU6$M#s0AD-f0sy39Fw6?ac(HuW~$;UD{lzG|WAo7w)m-j-9(hUAg*!=b$(4 zRS3RiInM{&q3Y>o{Iv1ap04JuOU_o^?&9*d#DR#$p@kvFyoWpFP1bV3#VgIL$1Xs_ z&SR#$L&J`h7xH@gD*M~ChUaF6m95tLta<;F>#H|KW`FgRf7@v~wO4vJGM6wG!!#^6 zkDB5P!#l)RN^4!pOnGgaPM?3Uw9{!Q?NrcSyM0cZ7acXu7`!~1yuxcvd)|De0cTDb zs*O@S@!f6QY<91Ib7iJ@v1rMt);hBcrldY72+@v^Ty7?|CRV+j0;#^wjK+HE;`KjoVFUJRo;-&gb3geZ7W|A=0a~dY^&;yHsS>2Rx&&uC8>OU z^T7FBY-0PmoCbOO7)R_K;IOQqYwamv+GCSk-+EtA=R1v2ShBvl^7rjL*teuKyEblr z%eK3t`(UG?f2saj7a?RM@;>g`9UNFD1Qicuk3*#L4-gKmhP`*3C zU_abc#PymtjkHL-=J1ffzae>!XP38a1?;Lh`uB|4FWn9HJ&%(QKJENRwEo<$-&#+{ XgiV~}Q%AI;mVZ+`H<5ERW=;OTvxmH~ literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search.svg new file mode 100755 index 0000000..d18a4fa --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search.svg @@ -0,0 +1,11 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_bw.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_bw.svg new file mode 100755 index 0000000..9ab9e71 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_bw.svg @@ -0,0 +1,16 @@ + + + + + + +]> + + + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_dark.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_dark.svg new file mode 100755 index 0000000..9ab9e71 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_dark.svg @@ -0,0 +1,16 @@ + + + + + + +]> + + + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_light.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_light.svg new file mode 100755 index 0000000..0c0dff6 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/search_light.svg @@ -0,0 +1,11 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/spinner.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/spinner.png new file mode 100755 index 0000000000000000000000000000000000000000..ae457fafc91ad7d3941182cbe2bc6fb475b44447 GIT binary patch literal 2707 zcmaJ@dpwkB8-5uvO-_|l64T&g!<@_v#&OJyOfoD}MhRo)WrpTpW-t_qSVlSKlt?0n zNa17KHitr4ebFjKZM12V3TY{2+i$d6`~9)|y}$Q;pXa%M_jTRZefZB0xWo#fgs|0G$8; zV#Z@IrA+UgM7EHRWUcxjWqgqW4FFEAG7*a%1xn#zU<6O#jF`LJg@E%o&WHfKH`-f7 z2Dv=X1TpBJKxeQMqSy``gsThONk&u<@IfgHF5~YPNQg3L#3x>&V!vueA>f}}q*2a@ zKSVLTec@!G7=+`Iwl-`u1_LJ$kQf}EK)_hTv1kkyg;u--8w`$!ClIlA@IN1fBAS>J zPV}RA{25Deaz=2aQV|h_ii?Xw#@Ql;;s_MR!NFmb1BGp zY%xzHN)1-|GDtw8c;nG^*>$yg#328mux>9eD^_y2e0^S^jY zq<-LEdjFPK!iX1vC_hjlj1jXHjSDwj4J9Iy#UM*66f=av{hzDo%N0t660T4LC;JoN zmfkEjPq1qE>J!4-n@AH#q$~j&q*0s^3JxTX$06Ez*g9ZHSiGGFNl|wymV_bM+f&gb zGKq?#lI>OtJ^Pwt2lfaeNdp7cd=ry^V8JV z1Ay8Z8imA=jUQnSW*Jkp=VnTUA!FXL8Z<_(HeOptH|%KtJrY%0#RRURuJXO-M_?!c zHnY|4^~(V-q&z3}oeCy$xbLm0Hrvcow6WmjY)8&q*-}7G#cZjNkYs}2wQpqPx3Zar znVHk6bGxz+^*l!%IX5`^C}##cR~UD0%4tk=QPzb|_vbo;Q2a_8Wz z)_!FlZ#c4g`#@dt`H1dO(U$hx&(8Ud7DQBHmyLt6A7?@itC@DFICNgA9qks}VQ}Qo zMwO=2-QY*f;`w9uPNyG)zT^+PSRzRsk{*jGNEumYfqyX~VeL56F;3Cp5V9 z@5~Cd16vkU-s$f6XcVN}vfkhxvn6-RFi7-dvMm0i6VqMliN*D6R{e(UjkyRb-Q{V$ zkt4F)$2e%G1+$3JL6~!NqzZaxj`mm9) z*V3bMu@vABG%@^OwKU7@Drb#LC`ewDqY`68b7l9&BE9rU{mQ-31NsZ*3wbBsYn1*j z+uP}Fl$cv=_CuXQ3E<;q!y)83j+y&^LydOQ4ZT{YOd1NQYpiM*ZEj@mCtSrP-5O>1X}WiSyX$ zBgftDx>dEdYWWlytmr{6(u9?X4 zeL=IS&tb`d6Ny~cJ$udOa$_$z<7Y3Q>~&FVjAQSvp5Kfx*XUfj_^nR@|`7So+kiF3h^C}!oDYK_hleS?bp+?+BKUc?Qh3b0TZ4if<4C&=7%L$L*0W}}T zDj~j?qILAvSsl^-`bE&w>q+?#!{v)w(L7AqtEpqqbU8T*(OhO}m2tmUed=IHaW*)* z+!*p|T|Tfc2Uqq@UVxgf=7+AWH#tCLKV6~Xh{Jb0en_p=XHq%Dar^ntnSF&WcpBTJXn_a=Ev^iB{lQ)>6wpRGIZ?l znZ!5<*Dz6z42#&_5p&+43sSylXvs%IhGAUI%P16 zbNOaf{0}{rTC*EcncbjqYJ$?~zS0y-a*1^P3Tt>{r)m{GL&)D!m=(B(M5<8!N#lf( zhc+zvZHJ|832Y^$gZmDEyzPrnXM~?7h1ZiSBXSK6;0+?fXS6q1nsx9ebCTOjW8~>+ zZNXuNsR#42+J4-TajKi{)>-ToVC7?VW7m|bd@#3`boulFlV5G4YwjakQp+F{sk9{n z!R$4w|3G%&NqJH8BD0EmFJ{@V8g0T3sHdBBZE4m~Y<}tiyQ%VE|DM3Mp}m`axI1NJ z+?kG>Xbhbo^Nr<=?dB6VUCs3qzrEt7hrZ?Z8$D>vO#Dl^$(l7VWqPA${*`9x1V892 zx8ULv@~804&rk3-2Yt{9>Swe&?2cUj2sV~egdRm<^p}Ze8c^S_T}r$6hB@M{qZ3*n zix1!*SdWgy#>7WAKeeKoG zdj8t+%aNh(x$MP`$!9Ii=3@hek)g%iAxghLvhLIM7K>^^Ynv#~r*`{4F{lQu2Av0; zElxY?woJcl@jX7)lbv!%rR#a%OdhWa#2PLSYm2RFQifivJ#xRxWleGj`5fi8B=8M{ ze5+XL7ksj%9kt{-#3!stc>dtQA=Kt8wZ&5a1kmI;z3(&Q7pz_r NX;eDpynATMe*xevX;%OM literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/spinner2x.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/spinner2x.png new file mode 100755 index 0000000000000000000000000000000000000000..3b77ee6fdf827eed9392ee9984e83bd976a49983 GIT binary patch literal 5201 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 OXJ%||^w_{V`hNgX6(mdm literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/package.json b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/package.json new file mode 100755 index 0000000..03c64ef --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/package.json @@ -0,0 +1,85 @@ +{ + "name": "topcoat", + "version": "0.7.5", + "description": "CSS for clean and fast web apps", + "main": "Gruntfile.js", + "directories": { + "doc": "doc", + "test": "test" + }, + "dependencies": { + "topcoat-utils": "~0.1.3", + "topcoat-radio-button-base": "~0.1.1", + "topcoat-button-base": "~0.6.0", + "topcoat-radio-button": "~0.1.2", + "topcoat-navigation-bar-base": "~0.4.0", + "topcoat-navigation-bar": "~0.4.2", + "topcoat-input-base": "~0.4.1", + "topcoat-list-base": "~0.4.1", + "topcoat-list": "~0.5.0", + "topcoat-search-input": "~0.3.0", + "topcoat-search-input-base": "~0.1.2", + "topcoat-checkbox": "~0.4.0", + "topcoat-checkbox-base": "~0.1.3", + "topcoat-button": "~0.5.3", + "topcoat-icon-button": "~0.3.3", + "topcoat-button-bar-base": "~0.1.1", + "topcoat-button-bar": "~0.1.0", + "topcoat-textarea": "~0.3.0", + "topcoat-theme": "~0.5.24", + "topcoat-text-input": "~0.3.4", + "topcoat-textarea-base": "~0.3.2", + "topcoat-notification": "~0.1.1", + "topcoat-notification-base": "0.0.1", + "topcoat-tab-bar": "~0.1.0", + "topcoat-switch": "~0.1.3", + "topcoat-switch-base": "~0.1.0", + "topcoat-range-base": "0.0.3", + "topcoat-range": "~0.1.0" + }, + "devDependencies": { + "grunt": "~0.4.1", + "grunt-contrib-copy": "~0.4.1", + "grunt-contrib-jade": "~0.4.0", + "grunt-contrib-watch": "~0.1.4", + "grunt-contrib-clean": "~0.4.1", + "grunt-exec": "~0.4.2", + "grunt-contrib-cssmin": "~0.5.0", + "jade": "~0.28.2", + "grunt-contrib-stylus": "~0.6.0", + "grunt-contrib-htmlmin": "~0.1.3", + "prompt": "*", + "csv": "*", + "topdoc-theme": "~0.2.7", + "grunt-topdoc": "~0.1.3", + "grunt-autoprefixer": "~0.2.20130806" + }, + "scripts": { + "test": "grunt test", + "prepublish": "grunt" + }, + "repository": { + "type": "git", + "url": "git://github.com/topcoat/topcoat.git" + }, + "bugs": { + "url": "https://github.com/topcoat/topcoat/issues" + }, + "license": { + "type": "Apache", + "url": "https://github.com/topcoat/topcoat/blob/master/LICENSE" + }, + "keywords": [ + "css", + "ui", + "ux", + "pattern", + "library", + "mobile", + "desktop", + "native", + "application", + "web", + "standards" + ] +} diff --git a/platforms/android/platform_www/cordova_plugins.js b/platforms/android/platform_www/cordova_plugins.js index ad14214..330a466 100644 --- a/platforms/android/platform_www/cordova_plugins.js +++ b/platforms/android/platform_www/cordova_plugins.js @@ -92,6 +92,30 @@ module.exports = [ "cordova.plugins.notification.local.core", "plugin.notification.local.core" ] + }, + { + "file": "plugins/cordova-plugin-device-tests/tests.js", + "id": "cordova-plugin-device-tests.tests" + }, + { + "file": "plugins/cordova-plugin-device-motion-tests/tests.js", + "id": "cordova-plugin-device-motion-tests.tests" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/tests.js", + "id": "cordova-plugin-test-framework.cdvtests" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/jasmine_helpers.js", + "id": "cordova-plugin-test-framework.jasmine_helpers" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/medic.js", + "id": "cordova-plugin-test-framework.medic" + }, + { + "file": "plugins/cordova-plugin-test-framework/www/main.js", + "id": "cordova-plugin-test-framework.main" } ]; module.exports.metadata = @@ -106,7 +130,10 @@ module.exports.metadata = "cordova-plugin-device-motion": "1.2.0", "cordova-plugin-dialogs": "1.2.0", "cordova-plugin-whitelist": "1.2.1", - "de.appplant.cordova.plugin.local-notification": "0.8.4" + "de.appplant.cordova.plugin.local-notification": "0.8.4", + "cordova-plugin-device-tests": "1.1.2-dev", + "cordova-plugin-device-motion-tests": "1.2.1-dev", + "cordova-plugin-test-framework": "1.1.2-dev" }; // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/platform_www/plugins/cordova-plugin-device-motion-tests/tests.js b/platforms/android/platform_www/plugins/cordova-plugin-device-motion-tests/tests.js new file mode 100644 index 0000000..892ca60 --- /dev/null +++ b/platforms/android/platform_www/plugins/cordova-plugin-device-motion-tests/tests.js @@ -0,0 +1,367 @@ +cordova.define("cordova-plugin-device-motion-tests.tests", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ +/* global Windows */ + +exports.defineAutoTests = function () { + var isWindows = (cordova.platformId === "windows") || (cordova.platformId === "windows8"), + // Checking existence of accelerometer for windows platform + // Assumed that accelerometer always exists on other platforms. Extend + // condition to support accelerometer check on other platforms + isAccelExist = isWindows ? Windows.Devices.Sensors.Accelerometer.getDefault() !== null : true; + + describe('Accelerometer (navigator.accelerometer)', function () { + var fail = function(done) { + expect(true).toBe(false); + done(); + }; + + // This timeout is here to lessen the load on native accelerometer + // intensive use of which can lead to occasional test failures + afterEach(function(done) { + setTimeout(function() { + done(); + }, 100); + }); + + it("accelerometer.spec.1 should exist", function () { + expect(navigator.accelerometer).toBeDefined(); + }); + + describe("getCurrentAcceleration", function() { + it("accelerometer.spec.2 should exist", function() { + expect(typeof navigator.accelerometer.getCurrentAcceleration).toBeDefined(); + expect(typeof navigator.accelerometer.getCurrentAcceleration == 'function').toBe(true); + }); + + it("accelerometer.spec.3 success callback should be called with an Acceleration object", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var win = function(a) { + expect(a).toBeDefined(); + expect(a.x).toBeDefined(); + expect(typeof a.x == 'number').toBe(true); + expect(a.y).toBeDefined(); + expect(typeof a.y == 'number').toBe(true); + expect(a.z).toBeDefined(); + expect(typeof a.z == 'number').toBe(true); + expect(a.timestamp).toBeDefined(); + expect(typeof a.timestamp).toBe('number'); + done(); + }; + + var onError = function(err){ + console.log(err); + console.log("Skipping gyroscope tests, marking all as pending."); + isAccelExist = false; + expect(true).toBe(true); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, onError); + }); + + it("accelerometer.spec.4 success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var reasonableThreshold = 15; + var win = function(a) { + expect(a.x).toBeLessThan(reasonableThreshold); + expect(a.x).toBeGreaterThan(reasonableThreshold * -1); + expect(a.y).toBeLessThan(reasonableThreshold); + expect(a.y).toBeGreaterThan(reasonableThreshold * -1); + expect(a.z).toBeLessThan(reasonableThreshold); + expect(a.z).toBeGreaterThan(reasonableThreshold * -1); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, fail.bind(null,done)); + }); + + it("accelerometer.spec.5 success callback Acceleration object should return a recent timestamp", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var veryRecently = (new Date()).getTime(); + // Need to check that dates returned are not vastly greater than a recent time stamp. + // In case the timestamps returned are ridiculously high + var reasonableTimeLimit = veryRecently + 5000; // 5 seconds from now + var win = function(a) { + expect(a.timestamp).toBeGreaterThan(veryRecently); + expect(a.timestamp).toBeLessThan(reasonableTimeLimit); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, fail.bind(null,done)); + }); + }); + + describe("watchAcceleration", function() { + var id; + + afterEach(function() { + navigator.accelerometer.clearWatch(id); + }); + + it("accelerometer.spec.6 should exist", function() { + expect(navigator.accelerometer.watchAcceleration).toBeDefined(); + expect(typeof navigator.accelerometer.watchAcceleration == 'function').toBe(true); + }); + + it("accelerometer.spec.7 success callback should be called with an Acceleration object", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var win = function(a) { + expect(a).toBeDefined(); + expect(a.x).toBeDefined(); + expect(typeof a.x == 'number').toBe(true); + expect(a.y).toBeDefined(); + expect(typeof a.y == 'number').toBe(true); + expect(a.z).toBeDefined(); + expect(typeof a.z == 'number').toBe(true); + expect(a.timestamp).toBeDefined(); + expect(typeof a.timestamp).toBe('number'); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.8 success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var reasonableThreshold = 15; + var win = function(a) { + expect(a.x).toBeLessThan(reasonableThreshold); + expect(a.x).toBeGreaterThan(reasonableThreshold * -1); + expect(a.y).toBeLessThan(reasonableThreshold); + expect(a.y).toBeGreaterThan(reasonableThreshold * -1); + expect(a.z).toBeLessThan(reasonableThreshold); + expect(a.z).toBeGreaterThan(reasonableThreshold * -1); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.9 success callback Acceleration object should return a recent timestamp", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var veryRecently = (new Date()).getTime(); + // Need to check that dates returned are not vastly greater than a recent time stamp. + // In case the timestamps returned are ridiculously high + var reasonableTimeLimit = veryRecently + 5000; // 5 seconds from now + var win = function(a) { + expect(a.timestamp).toBeGreaterThan(veryRecently); + expect(a.timestamp).toBeLessThan(reasonableTimeLimit); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.12 success callback should be preserved and called several times", function (done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var callbacksCallCount = 0, + callbacksCallTestCount = 3; + + var win = function (a) { + if (callbacksCallCount++ < callbacksCallTestCount) return; + expect(typeof a).toBe('object'); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null, done), { frequency: 100 }); + }); + }); + + describe("clearWatch", function() { + it("accelerometer.spec.10 should exist", function() { + expect(navigator.accelerometer.clearWatch).toBeDefined(); + expect(typeof navigator.accelerometer.clearWatch == 'function').toBe(true); + }); + + it("accelerometer.spec.11 should clear an existing watch", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var id; + + // expect win to get called exactly once + var win = function(a) { + // clear watch on first call + navigator.accelerometer.clearWatch(id); + // if win isn't called again in 201 ms we assume success + var tid = setTimeout(function() { + expect(true).toBe(true); + done(); + }, 101); + // if win is called again, clear the timeout and fail the test + win = function() { + clearTimeout(tid); + fail(done); + }; + }; + + // wrap the success call in a closure since the value of win changes between calls + id = navigator.accelerometer.watchAcceleration(function() { win(); }, fail.bind(null, done), {frequency:100}); + }); + }); + }); +}; + +/******************************************************************************/ +/******************************************************************************/ +/******************************************************************************/ + +exports.defineManualTests = function (contentEl, createActionButton) { + function roundNumber(num) { + var dec = 3; + var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec); + return result; + } + + var watchAccelId = null; + + /** + * Set accelerometer status + */ + function setAccelStatus(status) { + document.getElementById('accel_status').innerHTML = status; + } + + /** + * Stop watching the acceleration + */ + function stopAccel() { + console.log("stopAccel()"); + setAccelStatus("Stopped"); + if (watchAccelId) { + navigator.accelerometer.clearWatch(watchAccelId); + watchAccelId = null; + } + } + + /** + * Start watching acceleration + */ + var watchAccel = function () { + console.log("watchAccel()"); + + // Success callback + var success = function (a) { + document.getElementById('x').innerHTML = roundNumber(a.x); + document.getElementById('y').innerHTML = roundNumber(a.y); + document.getElementById('z').innerHTML = roundNumber(a.z); + }; + + // Fail callback + var fail = function (e) { + console.log("watchAccel fail callback with error code " + e); + stopAccel(); + setAccelStatus(e); + }; + + // Update acceleration every 1 sec + var opt = {}; + opt.frequency = 1000; + watchAccelId = navigator.accelerometer.watchAcceleration(success, fail, opt); + + setAccelStatus("Running"); + }; + + /** + * Get current acceleration + */ + var getAccel = function () { + console.log("getAccel()"); + + // Stop accel if running + stopAccel(); + + // Success callback + var success = function (a) { + document.getElementById('x').innerHTML = roundNumber(a.x); + document.getElementById('y').innerHTML = roundNumber(a.y); + document.getElementById('z').innerHTML = roundNumber(a.z); + console.log("getAccel success callback"); + }; + + // Fail callback + var fail = function (e) { + console.log("getAccel fail callback with error code " + e); + setAccelStatus(e); + }; + + // Make call + var opt = {}; + navigator.accelerometer.getCurrentAcceleration(success, fail, opt); + }; + + /******************************************************************************/ + + var accelerometer_tests = '
        ' + + 'Expected result: Will update the status box with X, Y, and Z values when pressed. Status will read "Stopped"' + + '

        ' + + 'Expected result: When pressed, will start a watch on the accelerometer and update X,Y,Z values when movement is sensed. Status will read "Running"' + + '

        ' + + 'Expected result: Will clear the accelerometer watch, so X,Y,Z values will no longer be updated. Status will read "Stopped"'; + + contentEl.innerHTML = '
        ' + + 'Status: Stopped' + + '' + + '' + + '' + + '' + + '
        X:
        Y:
        Z:
        ' + + accelerometer_tests; + + createActionButton('Get Acceleration', function () { + getAccel(); + }, 'getAcceleration'); + + createActionButton('Start Watch', function () { + watchAccel(); + }, 'watchAcceleration'); + + createActionButton('Clear Watch', function () { + stopAccel(); + }, 'clearAcceleration'); +}; + +}); diff --git a/platforms/android/platform_www/plugins/cordova-plugin-device-tests/tests.js b/platforms/android/platform_www/plugins/cordova-plugin-device-tests/tests.js new file mode 100644 index 0000000..9687554 --- /dev/null +++ b/platforms/android/platform_www/plugins/cordova-plugin-device-tests/tests.js @@ -0,0 +1,116 @@ +cordova.define("cordova-plugin-device-tests.tests", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ + +exports.defineAutoTests = function() { + describe('Device Information (window.device)', function () { + it("should exist", function() { + expect(window.device).toBeDefined(); + }); + + it("should contain a platform specification that is a string", function() { + expect(window.device.platform).toBeDefined(); + expect((String(window.device.platform)).length > 0).toBe(true); + }); + + it("should contain a version specification that is a string", function() { + expect(window.device.version).toBeDefined(); + expect((String(window.device.version)).length > 0).toBe(true); + }); + + it("should contain a UUID specification that is a string or a number", function() { + expect(window.device.uuid).toBeDefined(); + if (typeof window.device.uuid == 'string' || typeof window.device.uuid == 'object') { + expect((String(window.device.uuid)).length > 0).toBe(true); + } else { + expect(window.device.uuid > 0).toBe(true); + } + }); + + it("should contain a cordova specification that is a string", function() { + expect(window.device.cordova).toBeDefined(); + expect((String(window.device.cordova)).length > 0).toBe(true); + }); + + it("should depend on the presence of cordova.version string", function() { + expect(window.cordova.version).toBeDefined(); + expect((String(window.cordova.version)).length > 0).toBe(true); + }); + + it("should contain device.cordova equal to cordova.version", function() { + expect(window.device.cordova).toBe(window.cordova.version); + }); + + it("should contain a model specification that is a string", function() { + expect(window.device.model).toBeDefined(); + expect((String(window.device.model)).length > 0).toBe(true); + }); + + it("should contain a manufacturer property that is a string", function() { + expect(window.device.manufacturer).toBeDefined(); + expect((String(window.device.manufacturer)).length > 0).toBe(true); + }); + + it("should contain an isVirtual property that is a boolean", function() { + expect(window.device.isVirtual).toBeDefined(); + expect(typeof window.device.isVirtual).toBe("boolean"); + }); + + it("should contain a serial number specification that is a string", function() { + expect(window.device.serial).toBeDefined(); + expect((String(window.device.serial)).length > 0).toBe(true); + + }); + + }); +}; + +exports.defineManualTests = function(contentEl, createActionButton) { + var logMessage = function (message, color) { + var log = document.getElementById('info'); + var logLine = document.createElement('div'); + if (color) { + logLine.style.color = color; + } + logLine.innerHTML = message; + log.appendChild(logLine); + }; + + var clearLog = function () { + var log = document.getElementById('info'); + log.innerHTML = ''; + }; + + var device_tests = '

        Press Dump Device button to get device information

        ' + + '
        ' + + 'Expected result: Status box will get updated with device info. (i.e. platform, version, uuid, model, etc)'; + + contentEl.innerHTML = '
        ' + device_tests; + + createActionButton('Dump device', function() { + clearLog(); + logMessage(JSON.stringify(window.device, null, '\t')); + }, "dump_device"); +}; + +}); diff --git a/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js b/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js new file mode 100644 index 0000000..a77be0e --- /dev/null +++ b/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js @@ -0,0 +1,86 @@ +cordova.define("cordova-plugin-test-framework.jasmine_helpers", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint -W097 */ +'use strict'; + +exports.setUpJasmine = function() { + // Set up jasmine + var jasmine = jasmineRequire.core(jasmineRequire); + jasmineRequire.html(jasmine); + var jasmineEnv = jasmine.currentEnv_ = new jasmine.Env(); + + jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000; + jasmineEnv.catchExceptions(false); + + // Set up jasmine interface + var jasmineInterface = jasmineRequire.interface(jasmine, jasmineEnv); + + // Add Reporters + addJasmineReporters(jasmineInterface, jasmineEnv); + + // Add Spec Filter + jasmineEnv.specFilter = function(spec) { + //console.log(spec.getFullName()); + return true; + }; + + // Jasmine 2.2.0 moved this symbol, so we add a shim here. + jasmine.Expectation.addMatchers = jasmine.Expectation.addMatchers || function() { + return jasmine.addMatchers.apply(this, arguments); + }; + + return jasmineInterface; +}; + +function addJasmineReporters(jasmineInterface, jasmineEnv) { + jasmineInterface.jsApiReporter = new jasmineInterface.jasmine.JsApiReporter({ timer: new jasmineInterface.jasmine.Timer() }); + jasmineEnv.addReporter(jasmineInterface.jsApiReporter); + + jasmineInterface.htmlReporter = new jasmineInterface.jasmine.HtmlReporter({ + env: jasmineEnv, + queryString: function() { return null; }, + onRaiseExceptionsClick: function() { }, + getContainer: function() { return document.getElementById('content'); }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmineInterface.jasmine.Timer() + }); + jasmineInterface.htmlReporter.initialize(); + jasmineEnv.addReporter(jasmineInterface.htmlReporter); + + var medic = require('cordova-plugin-test-framework.medic'); + + if (medic.enabled) { + jasmineRequire.medic(jasmineInterface.jasmine); + jasmineInterface.MedicReporter = new jasmineInterface.jasmine.MedicReporter({ + env: jasmineEnv, + log: { logurl: medic.logurl }, + sha: medic.sha + }); + jasmineInterface.MedicReporter.initialize(); + jasmineEnv.addReporter(jasmineInterface.MedicReporter); + } + +} + +}); diff --git a/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/main.js b/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/main.js new file mode 100644 index 0000000..c3e1aa4 --- /dev/null +++ b/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/main.js @@ -0,0 +1,449 @@ +cordova.define("cordova-plugin-test-framework.main", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* global WinJS */ +/* jshint -W097 */ +'use strict'; + +var LOG_HEADER_HEIGHT = 20, + CONTENT_TOP_OFFSET = 30; + +var isWin = cordova.platformId === "windows", + isWP8 = cordova.platformId === "windowsphone"; + +/******************************************************************************/ + +function getMode(callback) { + var mode = localStorage.getItem('cdvtests-mode') || 'main'; + callback(mode); +} + +function setMode(mode) { + var handlers = { + 'main': runMain, + 'auto': runAutoTests, + 'manual': runManualTests + }; + if (!handlers.hasOwnProperty(mode)) { + console.error("Unsupported mode: " + mode); + console.error("Defaulting to 'main'"); + mode = 'main'; + } + + localStorage.setItem('cdvtests-mode', mode); + clearContent(); + + handlers[mode](); +} + +/******************************************************************************/ + +function clearContent() { + var content = document.getElementById('content'); + content.innerHTML = ''; + var log = document.getElementById('log--content'); + log.innerHTML = ''; + var buttons = document.getElementById('buttons'); + buttons.innerHTML = ''; + + setLogVisibility(false); +} + +/******************************************************************************/ + +function setTitle(title) { + var el = document.getElementById('title'); + el.textContent = title; +} + +/******************************************************************************/ + +function setLogVisibility(visible) { + if (visible) { + document.querySelector('body').classList.add('expanded-log'); + + if (isWin || isWP8) { + var h = document.querySelector('body').offsetHeight; + + document.getElementById('middle').style.height = (h * 0.6 - LOG_HEADER_HEIGHT - CONTENT_TOP_OFFSET) + "px"; + document.getElementById('middle').style.marginBottom = (h * 0.4) + "px"; + document.getElementById('middle').style.paddingBottom = (h * 0.4) + "px"; + } + } else { + document.querySelector('body').classList.remove('expanded-log'); + + if (isWin || isWP8) { + document.getElementById('middle').style.height = ""; + document.getElementById('middle').style.marginBottom = ""; + document.getElementById('middle').style.paddingBottom = ""; + } + } +} + +window.onresize = function (event) { + // Update content and log heights + if (isWin || isWP8) { + setLogVisibility(getLogVisibility()); + } +}; + +function getLogVisibility() { + var e = document.querySelector('body'); + return e.classList.contains('expanded-log'); +} + +function toggleLogVisibility() { + if (getLogVisibility()) { + setLogVisibility(false); + } else { + setLogVisibility(true); + } +} + +/******************************************************************************/ + +function attachEvents() { + document.getElementById('log--title').addEventListener('click', toggleLogVisibility); +} + +/******************************************************************************/ + +var origConsole = window.console; + +exports.wrapConsole = function() { + function appendToOnscreenLog(type, args) { + var el = document.getElementById('log--content'); + var div = document.createElement('div'); + div.classList.add('log--content--line'); + div.classList.add('log--content--line--' + type); + div.textContent = Array.prototype.slice.apply(args).map(function(arg) { + return (typeof arg === 'string') ? arg : JSON.stringify(arg); + }).join(' '); + el.appendChild(div); + // scroll to bottom + el.scrollTop = el.scrollHeight; + } + + function createCustomLogger(type) { + var medic = require('cordova-plugin-test-framework.medic'); + return function() { + origConsole[type].apply(origConsole, arguments); + // TODO: encode log type somehow for medic logs? + medic.log.apply(medic, arguments); + appendToOnscreenLog(type, arguments); + setLogVisibility(true); + }; + } + + window.console = { + log: createCustomLogger('log'), + warn: createCustomLogger('warn'), + error: createCustomLogger('error'), + }; +}; + +exports.unwrapConsole = function() { + window.console = origConsole; +}; + +/******************************************************************************/ + +function createActionButton(title, callback, appendTo) { + appendTo = appendTo ? appendTo : 'buttons'; + var buttons = document.getElementById(appendTo); + var div = document.createElement('div'); + var button = document.createElement('a'); + button.textContent = title; + button.onclick = function(e) { + e.preventDefault(); + callback(); + }; + button.classList.add('topcoat-button'); + div.appendChild(button); + buttons.appendChild(div); +} + +/******************************************************************************/ + +function setupAutoTestsEnablers(cdvtests) { + var enablerList = createEnablerList(); + + // Iterate over all the registered test modules + iterateAutoTests(cdvtests, function(api, testModule) { + // For "standard" plugins remove the common/repetitive bits of + // the api key, for use as the title. For third-party plugins, the full + // api will be used as the title + var title = api.replace(/org\.apache\.cordova\./i, '').replace(/\.tests.tests/i, ''); + + createEnablerCheckbox(api, title, testModule.getEnabled(), enablerList.id, toggleTestHandler); + }); + + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function createEnablerList() { + var buttons = document.getElementById('buttons'); + + var enablerContainer = document.createElement('div'); + enablerContainer.id = 'test-enablers-container'; + + // Create header to show count of enabled/total tests + var header = document.createElement('h3'); + header.id = 'tests-enabled'; + + // Create widget to show/hide list + var expander = document.createElement('span'); + expander.id = 'test-expander'; + expander.innerText = 'Show/hide tests to be run'; + expander.onclick = toggleEnablerVisibility; + + // Create list to contain checkboxes for each test + var enablerList = document.createElement('div'); + enablerList.id = "test-list"; + + // Create select/deselect all buttons (in button bar) + var checkButtonBar = document.createElement('ul'); + checkButtonBar.classList.add('topcoat-button-bar'); + + function createSelectToggleButton(title, selected) { + var barItem = document.createElement('li'); + barItem.classList.add('topcoat-button-bar__item'); + + var link = document.createElement('a'); + link.classList.add('topcoat-button-bar__button'); + link.innerText = title; + link.href = null; + link.onclick = function(e) { + e.preventDefault(); + toggleSelected(enablerList.id, selected); + return false; + }; + + barItem.appendChild(link); + checkButtonBar.appendChild(barItem); + } + createSelectToggleButton('Check all', true); + createSelectToggleButton('Uncheck all', false); + enablerList.appendChild(checkButtonBar); + + enablerContainer.appendChild(header); + enablerContainer.appendChild(expander); + enablerContainer.appendChild(enablerList); + + buttons.appendChild(enablerContainer); + + return enablerList; +} + +/******************************************************************************/ + +function updateEnabledTestCount() { + var enabledLabel = document.getElementById('tests-enabled'); + + // Determine how many tests are currently enabled + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + var total = 0; + var enabled = 0; + iterateAutoTests(cdvtests, function(api, testModule) { + total++; + if (testModule.getEnabled()) { + enabled++; + } + }); + + if (enabled == total) { + enabledLabel.innerText = 'Running All Tests.'; + } else { + enabledLabel.innerText = 'Running ' + enabled + ' of ' + total + ' Tests.'; + } +} + +/******************************************************************************/ + +function toggleSelected(containerId, newCheckedValue) { + [].forEach.call(document.getElementById(containerId).getElementsByTagName('input'), function(input) { + if (input.type !== 'checkbox') return; + input.checked = newCheckedValue; + toggleTestEnabled(input); + }); + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function toggleEnablerVisibility() { + var enablerList = document.getElementById('test-list'); + if (enablerList.classList.contains('expanded')) { + enablerList.classList.remove('expanded'); + } else { + enablerList.classList.add('expanded'); + } +} + +/******************************************************************************/ + +function createEnablerCheckbox(api, title, isEnabled, appendTo, callback) { + var container = document.getElementById(appendTo); + + var label = document.createElement('label'); + label.classList.add('topcoat-checkbox'); + + var checkbox = document.createElement('input'); + checkbox.type = "checkbox"; + checkbox.value = api; + checkbox.checked = isEnabled; + label.htmlFor = checkbox.id = 'enable_' + api; + + checkbox.onchange = function(e) { + e.preventDefault(); + callback(e); + }; + + var div = document.createElement('div'); + div.classList.add('topcoat-checkbox__checkmark'); + + var text = document.createElement('span'); + text.innerText = title; + + label.appendChild(checkbox); + label.appendChild(div); + label.appendChild(text); + + container.appendChild(label); +} + +/******************************************************************************/ + +function toggleTestHandler(event) { + var checkbox = event.target; + + toggleTestEnabled(checkbox); + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function toggleTestEnabled(checkbox) { + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.tests[checkbox.value].setEnabled(checkbox.checked); +} + +/******************************************************************************/ + +function iterateAutoTests(cdvtests, callback) { + Object.keys(cdvtests.tests).forEach(function(api) { + var testModule = cdvtests.tests[api]; + if (!testModule.hasOwnProperty('defineAutoTests')) { + return; + } + callback(api, testModule); + }); +} + +/******************************************************************************/ + +function runAutoTests() { + setTitle('Auto Tests'); + + createActionButton('Run', setMode.bind(null, 'auto')); + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'main')); + + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.init(); + setupAutoTestsEnablers(cdvtests); + + cdvtests.defineAutoTests(); + + // Run the tests! + var jasmineEnv = window.jasmine.getEnv(); + + jasmineEnv.execute(); +} + +/******************************************************************************/ + +function runManualTests() { + setTitle('Manual Tests'); + + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'main')); + + var contentEl = document.getElementById('content'); + var beforeEach = function(title) { + clearContent(); + setTitle(title || 'Manual Tests'); + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'manual')); + }; + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.defineManualTests(contentEl, beforeEach, createActionButton); +} + +/******************************************************************************/ + +function runMain() { + setTitle('Apache Cordova Plugin Tests'); + + createActionButton('Auto Tests', setMode.bind(null, 'auto')); + createActionButton('Manual Tests', setMode.bind(null, 'manual')); + createActionButton('Reset App', location.reload.bind(location)); + if (/showBack/.exec(location.hash)) { + createActionButton('Back', function() { + history.go(-1); + }); + } + + if (isWin && typeof WinJS !== 'undefined') { + var app = WinJS.Application; + app.addEventListener("error", function (err) { + // We do not want an unhandled exception to crash the test app + // Returning true marks it as being handled + return true; + }); + } +} + +/******************************************************************************/ + +exports.init = function() { + // TODO: have a way to opt-out of console wrapping in case line numbers are important. + // ...Or find a custom way to print line numbers using stack or something. + // make sure to always wrap when using medic. + attachEvents(); + exports.wrapConsole(); + + var medic = require('cordova-plugin-test-framework.medic'); + medic.load(function() { + if (medic.enabled) { + setMode('auto'); + } else { + getMode(setMode); + } + }); +}; + +/******************************************************************************/ + +}); diff --git a/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/medic.js b/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/medic.js new file mode 100644 index 0000000..c805a25 --- /dev/null +++ b/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/medic.js @@ -0,0 +1,66 @@ +cordova.define("cordova-plugin-test-framework.medic", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint -W097 */ +'use strict'; + +exports.logurl = 'http://127.0.0.1:7800'; + +exports.enabled = false; + +exports.log = function() { + if (!exports.enabled) + return; + var xhr = new XMLHttpRequest(); + xhr.open("POST", exports.logurl, true); + xhr.setRequestHeader("Content-Type", "text/plain"); + xhr.send(Array.prototype.slice.apply(arguments)); +}; + +exports.load = function (callback) { + var cfg = null; + + try { + // attempt to synchronously load medic config + var xhr = new XMLHttpRequest(); + xhr.open("GET", "../medic.json", false); + xhr.send(null); + cfg = JSON.parse(xhr.responseText); + } catch (ex) { } + + // config is available + if (cfg) { + exports.logurl = cfg.couchdb || cfg.logurl; + exports.sha = cfg.sha; + exports.enabled = true; + console.log('Loaded Medic Config: logurl=' + exports.logurl); + } else { + // config does not exist + console.log('Did not find medic config file'); + } + + setTimeout(function () { + callback(); + }, 0); +}; + +}); diff --git a/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/tests.js b/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/tests.js new file mode 100644 index 0000000..5c861b3 --- /dev/null +++ b/platforms/android/platform_www/plugins/cordova-plugin-test-framework/www/tests.js @@ -0,0 +1,138 @@ +cordova.define("cordova-plugin-test-framework.cdvtests", function(require, exports, module) { +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ +/* jshint -W097 */ +'use strict'; + +exports.tests = Object.create(null); + +function TestModule(api) { + var name = api; + var enabled = true; + + var enabledPref = localStorage.getItem('cordova-tests-enabled-' + name); + if (enabledPref) + { + enabled = (enabledPref == true.toString()); + } + + this.getEnabled = function () { + return enabled; + }; + + this.setEnabled = function (isEnabled) { + enabled = isEnabled; + localStorage.setItem('cordova-tests-enabled-' + name, enabled); + }; +} + +function getTestsObject(api) { + exports.tests[api] = exports.tests[api] || new TestModule(api); + return exports.tests[api]; +} + +function requireAllTestModules() { + // This finds all js-modules named "tests" (regardless of plugins they came from) + var test_modules = cordova.require('cordova/plugin_list') + .map(function(jsmodule) { + return jsmodule.id; + }) + .filter(function(id) { + return /\.tests$/.test(id); + }); + + // Map auto / manual test definitions for each, but without actually running the handlers + test_modules.forEach(function(id) { + try { + var plugintests = cordova.require(id); + + if (plugintests.hasOwnProperty('defineAutoTests')) { + getTestsObject(id).defineAutoTests = function() { + describe(id + ' >>', plugintests.defineAutoTests.bind(plugintests)); + }; + } + + if (plugintests.hasOwnProperty('defineManualTests')) { + getTestsObject(id).defineManualTests = plugintests.defineManualTests.bind(plugintests); + } + } catch(ex) { + console.warn('Failed to load tests: ', id); + return; + } + }); +} + +function createJasmineInterface() { + var jasmine_helpers = require('cordova-plugin-test-framework.jasmine_helpers'); + var jasmineInterface = jasmine_helpers.setUpJasmine(); + return jasmineInterface; +} + +function attachJasmineInterfaceToGlobal() { + var jasmineInterface = createJasmineInterface(); + for (var property in jasmineInterface) { + window[property] = jasmineInterface[property]; + } +} + +function detachJasmineInterfaceFromGlobal() { + var jasmineInterface = createJasmineInterface(); + for (var property in jasmineInterface) { + delete window[property]; + } +} + +exports.defineAutoTests = function() { + requireAllTestModules(); + attachJasmineInterfaceToGlobal(); + + Object.keys(exports.tests).forEach(function(key) { + if (!exports.tests[key].getEnabled()) + return; + if (!exports.tests[key].hasOwnProperty('defineAutoTests')) + return; + exports.tests[key].defineAutoTests(); + }); +}; + +exports.defineManualTests = function(contentEl, beforeEach, createActionButton) { + requireAllTestModules(); + detachJasmineInterfaceFromGlobal(); + + Object.keys(exports.tests).forEach(function(key) { + if (!exports.tests[key].getEnabled()) + return; + if (!exports.tests[key].hasOwnProperty('defineManualTests')) + return; + createActionButton(key, function() { + beforeEach(key); + exports.tests[key].defineManualTests(contentEl, createActionButton); + }); + }); +}; + +exports.init = function() { + requireAllTestModules(); +}; + +}); diff --git a/plugins/android.json b/plugins/android.json index 6b60434..02ff33c 100644 --- a/plugins/android.json +++ b/plugins/android.json @@ -36,6 +36,15 @@ }, "de.appplant.cordova.plugin.local-notification": { "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-device-tests": { + "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-device-motion-tests": { + "PACKAGE_NAME": "com.adamdon.sw" + }, + "cordova-plugin-test-framework": { + "PACKAGE_NAME": "com.adamdon.sw" } }, "dependent_plugins": {} diff --git a/plugins/cordova-plugin-device-motion-tests/plugin.xml b/plugins/cordova-plugin-device-motion-tests/plugin.xml new file mode 100644 index 0000000..40463ea --- /dev/null +++ b/plugins/cordova-plugin-device-motion-tests/plugin.xml @@ -0,0 +1,29 @@ + + + + + Cordova Device Motion Plugin Tests + Apache 2.0 + + + + diff --git a/plugins/cordova-plugin-device-motion-tests/tests.js b/plugins/cordova-plugin-device-motion-tests/tests.js new file mode 100644 index 0000000..73587e7 --- /dev/null +++ b/plugins/cordova-plugin-device-motion-tests/tests.js @@ -0,0 +1,364 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ +/* global Windows */ + +exports.defineAutoTests = function () { + var isWindows = (cordova.platformId === "windows") || (cordova.platformId === "windows8"), + // Checking existence of accelerometer for windows platform + // Assumed that accelerometer always exists on other platforms. Extend + // condition to support accelerometer check on other platforms + isAccelExist = isWindows ? Windows.Devices.Sensors.Accelerometer.getDefault() !== null : true; + + describe('Accelerometer (navigator.accelerometer)', function () { + var fail = function(done) { + expect(true).toBe(false); + done(); + }; + + // This timeout is here to lessen the load on native accelerometer + // intensive use of which can lead to occasional test failures + afterEach(function(done) { + setTimeout(function() { + done(); + }, 100); + }); + + it("accelerometer.spec.1 should exist", function () { + expect(navigator.accelerometer).toBeDefined(); + }); + + describe("getCurrentAcceleration", function() { + it("accelerometer.spec.2 should exist", function() { + expect(typeof navigator.accelerometer.getCurrentAcceleration).toBeDefined(); + expect(typeof navigator.accelerometer.getCurrentAcceleration == 'function').toBe(true); + }); + + it("accelerometer.spec.3 success callback should be called with an Acceleration object", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var win = function(a) { + expect(a).toBeDefined(); + expect(a.x).toBeDefined(); + expect(typeof a.x == 'number').toBe(true); + expect(a.y).toBeDefined(); + expect(typeof a.y == 'number').toBe(true); + expect(a.z).toBeDefined(); + expect(typeof a.z == 'number').toBe(true); + expect(a.timestamp).toBeDefined(); + expect(typeof a.timestamp).toBe('number'); + done(); + }; + + var onError = function(err){ + console.log(err); + console.log("Skipping gyroscope tests, marking all as pending."); + isAccelExist = false; + expect(true).toBe(true); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, onError); + }); + + it("accelerometer.spec.4 success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var reasonableThreshold = 15; + var win = function(a) { + expect(a.x).toBeLessThan(reasonableThreshold); + expect(a.x).toBeGreaterThan(reasonableThreshold * -1); + expect(a.y).toBeLessThan(reasonableThreshold); + expect(a.y).toBeGreaterThan(reasonableThreshold * -1); + expect(a.z).toBeLessThan(reasonableThreshold); + expect(a.z).toBeGreaterThan(reasonableThreshold * -1); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, fail.bind(null,done)); + }); + + it("accelerometer.spec.5 success callback Acceleration object should return a recent timestamp", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var veryRecently = (new Date()).getTime(); + // Need to check that dates returned are not vastly greater than a recent time stamp. + // In case the timestamps returned are ridiculously high + var reasonableTimeLimit = veryRecently + 5000; // 5 seconds from now + var win = function(a) { + expect(a.timestamp).toBeGreaterThan(veryRecently); + expect(a.timestamp).toBeLessThan(reasonableTimeLimit); + done(); + }; + + navigator.accelerometer.getCurrentAcceleration(win, fail.bind(null,done)); + }); + }); + + describe("watchAcceleration", function() { + var id; + + afterEach(function() { + navigator.accelerometer.clearWatch(id); + }); + + it("accelerometer.spec.6 should exist", function() { + expect(navigator.accelerometer.watchAcceleration).toBeDefined(); + expect(typeof navigator.accelerometer.watchAcceleration == 'function').toBe(true); + }); + + it("accelerometer.spec.7 success callback should be called with an Acceleration object", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var win = function(a) { + expect(a).toBeDefined(); + expect(a.x).toBeDefined(); + expect(typeof a.x == 'number').toBe(true); + expect(a.y).toBeDefined(); + expect(typeof a.y == 'number').toBe(true); + expect(a.z).toBeDefined(); + expect(typeof a.z == 'number').toBe(true); + expect(a.timestamp).toBeDefined(); + expect(typeof a.timestamp).toBe('number'); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.8 success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var reasonableThreshold = 15; + var win = function(a) { + expect(a.x).toBeLessThan(reasonableThreshold); + expect(a.x).toBeGreaterThan(reasonableThreshold * -1); + expect(a.y).toBeLessThan(reasonableThreshold); + expect(a.y).toBeGreaterThan(reasonableThreshold * -1); + expect(a.z).toBeLessThan(reasonableThreshold); + expect(a.z).toBeGreaterThan(reasonableThreshold * -1); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.9 success callback Acceleration object should return a recent timestamp", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var veryRecently = (new Date()).getTime(); + // Need to check that dates returned are not vastly greater than a recent time stamp. + // In case the timestamps returned are ridiculously high + var reasonableTimeLimit = veryRecently + 5000; // 5 seconds from now + var win = function(a) { + expect(a.timestamp).toBeGreaterThan(veryRecently); + expect(a.timestamp).toBeLessThan(reasonableTimeLimit); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null,done), {frequency:100}); + }); + + it("accelerometer.spec.12 success callback should be preserved and called several times", function (done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var callbacksCallCount = 0, + callbacksCallTestCount = 3; + + var win = function (a) { + if (callbacksCallCount++ < callbacksCallTestCount) return; + expect(typeof a).toBe('object'); + done(); + }; + + id = navigator.accelerometer.watchAcceleration(win, fail.bind(null, done), { frequency: 100 }); + }); + }); + + describe("clearWatch", function() { + it("accelerometer.spec.10 should exist", function() { + expect(navigator.accelerometer.clearWatch).toBeDefined(); + expect(typeof navigator.accelerometer.clearWatch == 'function').toBe(true); + }); + + it("accelerometer.spec.11 should clear an existing watch", function(done) { + // skip the test if Accelerometer doesn't exist on this device + if (!isAccelExist) { + pending(); + } + var id; + + // expect win to get called exactly once + var win = function(a) { + // clear watch on first call + navigator.accelerometer.clearWatch(id); + // if win isn't called again in 201 ms we assume success + var tid = setTimeout(function() { + expect(true).toBe(true); + done(); + }, 101); + // if win is called again, clear the timeout and fail the test + win = function() { + clearTimeout(tid); + fail(done); + }; + }; + + // wrap the success call in a closure since the value of win changes between calls + id = navigator.accelerometer.watchAcceleration(function() { win(); }, fail.bind(null, done), {frequency:100}); + }); + }); + }); +}; + +/******************************************************************************/ +/******************************************************************************/ +/******************************************************************************/ + +exports.defineManualTests = function (contentEl, createActionButton) { + function roundNumber(num) { + var dec = 3; + var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec); + return result; + } + + var watchAccelId = null; + + /** + * Set accelerometer status + */ + function setAccelStatus(status) { + document.getElementById('accel_status').innerHTML = status; + } + + /** + * Stop watching the acceleration + */ + function stopAccel() { + console.log("stopAccel()"); + setAccelStatus("Stopped"); + if (watchAccelId) { + navigator.accelerometer.clearWatch(watchAccelId); + watchAccelId = null; + } + } + + /** + * Start watching acceleration + */ + var watchAccel = function () { + console.log("watchAccel()"); + + // Success callback + var success = function (a) { + document.getElementById('x').innerHTML = roundNumber(a.x); + document.getElementById('y').innerHTML = roundNumber(a.y); + document.getElementById('z').innerHTML = roundNumber(a.z); + }; + + // Fail callback + var fail = function (e) { + console.log("watchAccel fail callback with error code " + e); + stopAccel(); + setAccelStatus(e); + }; + + // Update acceleration every 1 sec + var opt = {}; + opt.frequency = 1000; + watchAccelId = navigator.accelerometer.watchAcceleration(success, fail, opt); + + setAccelStatus("Running"); + }; + + /** + * Get current acceleration + */ + var getAccel = function () { + console.log("getAccel()"); + + // Stop accel if running + stopAccel(); + + // Success callback + var success = function (a) { + document.getElementById('x').innerHTML = roundNumber(a.x); + document.getElementById('y').innerHTML = roundNumber(a.y); + document.getElementById('z').innerHTML = roundNumber(a.z); + console.log("getAccel success callback"); + }; + + // Fail callback + var fail = function (e) { + console.log("getAccel fail callback with error code " + e); + setAccelStatus(e); + }; + + // Make call + var opt = {}; + navigator.accelerometer.getCurrentAcceleration(success, fail, opt); + }; + + /******************************************************************************/ + + var accelerometer_tests = '
        ' + + 'Expected result: Will update the status box with X, Y, and Z values when pressed. Status will read "Stopped"' + + '

        ' + + 'Expected result: When pressed, will start a watch on the accelerometer and update X,Y,Z values when movement is sensed. Status will read "Running"' + + '

        ' + + 'Expected result: Will clear the accelerometer watch, so X,Y,Z values will no longer be updated. Status will read "Stopped"'; + + contentEl.innerHTML = '
        ' + + 'Status: Stopped' + + '' + + '' + + '' + + '' + + '
        X:
        Y:
        Z:
        ' + + accelerometer_tests; + + createActionButton('Get Acceleration', function () { + getAccel(); + }, 'getAcceleration'); + + createActionButton('Start Watch', function () { + watchAccel(); + }, 'watchAcceleration'); + + createActionButton('Clear Watch', function () { + stopAccel(); + }, 'clearAcceleration'); +}; diff --git a/plugins/cordova-plugin-device-tests/plugin.xml b/plugins/cordova-plugin-device-tests/plugin.xml new file mode 100644 index 0000000..89c75a0 --- /dev/null +++ b/plugins/cordova-plugin-device-tests/plugin.xml @@ -0,0 +1,31 @@ + + + + + Cordova Device Plugin Tests + Apache 2.0 + + + + diff --git a/plugins/cordova-plugin-device-tests/tests.js b/plugins/cordova-plugin-device-tests/tests.js new file mode 100644 index 0000000..ac9a281 --- /dev/null +++ b/plugins/cordova-plugin-device-tests/tests.js @@ -0,0 +1,113 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ + +exports.defineAutoTests = function() { + describe('Device Information (window.device)', function () { + it("should exist", function() { + expect(window.device).toBeDefined(); + }); + + it("should contain a platform specification that is a string", function() { + expect(window.device.platform).toBeDefined(); + expect((String(window.device.platform)).length > 0).toBe(true); + }); + + it("should contain a version specification that is a string", function() { + expect(window.device.version).toBeDefined(); + expect((String(window.device.version)).length > 0).toBe(true); + }); + + it("should contain a UUID specification that is a string or a number", function() { + expect(window.device.uuid).toBeDefined(); + if (typeof window.device.uuid == 'string' || typeof window.device.uuid == 'object') { + expect((String(window.device.uuid)).length > 0).toBe(true); + } else { + expect(window.device.uuid > 0).toBe(true); + } + }); + + it("should contain a cordova specification that is a string", function() { + expect(window.device.cordova).toBeDefined(); + expect((String(window.device.cordova)).length > 0).toBe(true); + }); + + it("should depend on the presence of cordova.version string", function() { + expect(window.cordova.version).toBeDefined(); + expect((String(window.cordova.version)).length > 0).toBe(true); + }); + + it("should contain device.cordova equal to cordova.version", function() { + expect(window.device.cordova).toBe(window.cordova.version); + }); + + it("should contain a model specification that is a string", function() { + expect(window.device.model).toBeDefined(); + expect((String(window.device.model)).length > 0).toBe(true); + }); + + it("should contain a manufacturer property that is a string", function() { + expect(window.device.manufacturer).toBeDefined(); + expect((String(window.device.manufacturer)).length > 0).toBe(true); + }); + + it("should contain an isVirtual property that is a boolean", function() { + expect(window.device.isVirtual).toBeDefined(); + expect(typeof window.device.isVirtual).toBe("boolean"); + }); + + it("should contain a serial number specification that is a string", function() { + expect(window.device.serial).toBeDefined(); + expect((String(window.device.serial)).length > 0).toBe(true); + + }); + + }); +}; + +exports.defineManualTests = function(contentEl, createActionButton) { + var logMessage = function (message, color) { + var log = document.getElementById('info'); + var logLine = document.createElement('div'); + if (color) { + logLine.style.color = color; + } + logLine.innerHTML = message; + log.appendChild(logLine); + }; + + var clearLog = function () { + var log = document.getElementById('info'); + log.innerHTML = ''; + }; + + var device_tests = '

        Press Dump Device button to get device information

        ' + + '
        ' + + 'Expected result: Status box will get updated with device info. (i.e. platform, version, uuid, model, etc)'; + + contentEl.innerHTML = '
        ' + device_tests; + + createActionButton('Dump device', function() { + clearLog(); + logMessage(JSON.stringify(window.device, null, '\t')); + }, "dump_device"); +}; diff --git a/plugins/cordova-plugin-test-framework/LICENSE b/plugins/cordova-plugin-test-framework/LICENSE new file mode 100644 index 0000000..37ec93a --- /dev/null +++ b/plugins/cordova-plugin-test-framework/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/plugins/cordova-plugin-test-framework/NOTICE b/plugins/cordova-plugin-test-framework/NOTICE new file mode 100755 index 0000000..f961b33 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/NOTICE @@ -0,0 +1,199 @@ +Apache Cordova +Copyright 2014 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +Topcoat is licensed under the Apache license version 2.0, January 2004 (see LICENSE file). + +Topcoat uses the following third party libraries that may have licenses +differing from that of Topcoat itself. You can find the libraries and their +respective licenses below. + + - Source Code Pro ./src/font/SourceCodePro + + https://github.com/adobe/source-code-pro + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is available with a FAQ at: http://scripts.sil.org/OFL + +- Source Sans Pro ./src/font/SourceSansPro + + https://github.com/adobe/source-sans-pro + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is available with a FAQ at: http://scripts.sil.org/OFL + +The following frameworks and libraries are provided just for testing and benchmarking and, as provided, should not be included as part of Topcoat output. + + - Bootstrap - ./test/third-party/bootstrap + + https://github.com/twitter/bootstrap + + Copyright 2012 Twitter, Inc + Licensed under the Apache License v2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + - jQuery - ./test/third-party/jquery-1.8.2.js + + https://github.com/jquery/jquery + + Copyright 2011, John Resig + Dual licensed under the MIT or GPL Version 2 licenses. + http://jquery.org/license + + Includes Sizzle.js + http://sizzlejs.com/ + Copyright 2011, The Dojo Foundation + Released under the MIT, BSD, and GPL Licenses. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + - Modernizr - ./test/third-party/modernizr + + https://github.com/Modernizr/Modernizr + + Modernizr is available under the MIT license + + Copyright (c) 2009–2011 + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + - Benchmark.js - ./test/third-party/benchmarkjs + + https://github.com/alexanderbeletsky/benchmark-js + + Copyright 2010-2012 Mathias Bynens + Based on JSLitmus.js, copyright Robert Kieffer + Modified by John-David Dalton + Available under MIT license + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - normalize.css - ./test/third-party/normalize + + Copyright (c) Nicolas Gallagher and Jonathan Neal + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - Foundation - ./test/third-party/foundation + + Copyright (c) 2012 Mark Hayes + + MIT License + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - ua-parser ./test/third-party/ua-parser + + https://github.com/faisalman/ua-parser-js + + Copyright © 2012 Faisalman + Dual licensed under GPLv2 & MIT + Copyright © 2012 Faisalman + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + - HTML5 boilerplate + + https://github.com/h5bp/html5-boilerplate + + Copyright (c) HTML5 Boilerplate + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - classList - ./test/third-party/classlist + + http://purl.eligrey.com/github/classList.js/blob/master/classList.js + + This software is dedicated to the public domain. No warranty is expressed or implied. + Use this software at your own risk. + + - fastclick - ./test/third-party/fastclick + + https://github.com/ftlabs/fastclick + + Copyright (C) 2012 The Financial Times Ltd. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/cordova-plugin-test-framework/README.md b/plugins/cordova-plugin-test-framework/README.md new file mode 100644 index 0000000..7da78d8 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/README.md @@ -0,0 +1,145 @@ + + +[![Build Status](https://travis-ci.org/apache/cordova-plugin-test-framework.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-test-framework) + +# Cordova Plugin Test Framework + +The `cordova-plugin-test-framework` plugin does two things: + +1. [Defines the interface for cordova plugins to write tests](#interface) +2. [Provides a test harness for actually running those tests](#harness) + +Tests run directly inside existing cordova projects, so you can rapidly switch between testing and development. You can also be sure that your test suite is testing the exact versions of plugins and platforms that your app is using. + +# TLDR; Try it + +1. Use your existing cordova app, or create a new one. +2. Plugins bundle their tests using a nested plugin in a `/tests` directory. To make this interesting, add some of these plugins and their respective tests. Here are a few examples: + + cordova plugin add http://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git + cordova plugin add http://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git#:/tests + + cordova plugin add http://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git + cordova plugin add http://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git#:/tests + + cordova plugin add http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git + cordova plugin add http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation#:/tests + +3. Follow the docs for [Setting up the test harness](#harness). + + +
        +## Writing Plugin Tests + +### Where do tests live? + +Add a directory named `tests` to the root of your plugin. Within this directory, create a nested `plugin.xml` for the tests plugin. It should have a plugin id with the form `plugin-id-tests` (e.g. the `cordova-plugin-device` plugin has the nested id `cordova-plugin-device-tests`) and should contain a `` named `tests`. E.g: + +``` + + +``` + +For example, the `cordova-plugin-device` plugin has this nested [`plugin.xml`](https://github.com/apache/cordova-plugin-device/blob/master/tests/plugin.xml). + +The `cordova-plugin-test-framework` plugin will automatically find all `tests` modules across all plugins for which the nested tests plugin is installed. + +### Defining Auto Tests + +Simply export a function named `defineAutoTests`, which (gasp!) defines your auto-tests when run. Use the [`jasmine-2.0`](http://jasmine.github.io/2.0/introduction.html) format. E.g.: + +``` +exports.defineAutoTests = function() { + + describe('awesome tests', function() { + it('do something sync', function() { + expect(1).toBe(1); + ... + }); + + it('do something async', function(done) { + setTimeout(function() { + expect(1).toBe(1); + ... + done(); + }, 100); + }); + }); + + describe('more awesome tests', function() { + ... + }); + +}; +``` + +Note: Your tests will automatically be labeled with your plugin id, so do not prefix your test descriptions. + + +### Defining Manual Tests + +Simply export a function named `defineManualTests`, which (gasp!) defines your manual-tests when run. Manual tests do *not* use jasmine-2.0, and success/failure results are not officially reported in any standard way. Instead, create buttons to run arbitrary javascript when clicked, and display output to user using `console` or by manipulating a provided DOM element. E.g.: + +``` +exports.defineManualTests = function(contentEl, createActionButton) { + + createActionButton('Simple Test', function() { + console.log(JSON.stringify(foo, null, '\t')); + }); + + createActionButton('Complex Test', function() { + contentEl.innerHTML = ...; + }); + +}; +``` + +Note: Your tests will automatically be labeled with your plugin id, so do not prefix your test descriptions. + + + +### Example + +See: [`cordova-plugin-device` tests](https://github.com/apache/cordova-plugin-device/blob/master/tests/tests.js). + + +## Running Plugin Tests + +1. Use your existing cordova app, or create a new one. +2. Add this plugin: + + cordova plugin add http://git-wip-us.apache.org/repos/asf/cordova-plugin-test-framework.git + +3. Change the start page in `config.xml` with `` or navigate to `cdvtests/index.html` from within your app. +4. Thats it! + + +## FAQ + +* Q: Should I add `cordova-plugin-test-framework` as a `` of my plugin? + * A: No. The end-user should decide if they want to install the test framework, not your plugin (most users won't). + +* Q: What do I do if my plugin tests must have very large assets? + * A: Don't bundle those assets with your plugin. If you can, have your tests fail gracefully if those assets don't don't exist (perhaps log a warning, perhaps fail a single asset-checking test, and skip the rest). Then, ideally download those assets automatically into local storage the first time tests run. Or create a manual test step to download and install assets. As a final alternative, split those test assets into a separate plugin, and instruct users to install that plugin to run your full test suite. + +* Q: Should I ship my app with the test framework plugin installed? + * A: Not likely. If you want, you can. Then your app could even embed a link to the test page (`cdvtests/index.html`) from a help section of your app, to give end users a way to run your test suite out in the feild. That may help diagnose causes of issues within your app. Maybe. diff --git a/plugins/cordova-plugin-test-framework/RELEASENOTES.md b/plugins/cordova-plugin-test-framework/RELEASENOTES.md new file mode 100644 index 0000000..a13efd9 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/RELEASENOTES.md @@ -0,0 +1,45 @@ + +# Release Notes + +### 1.1.1 (Jan 15, 2016) +* CB-10318 Do not wrap test title + +### 1.1.0 (Nov 18, 2015) +* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest +* [CB-8973](https://issues.apache.org/jira/browse/CB-8973): Changed the functionality of making the `log` appear and disappear +* Ensure `WinJS` is available when adding **Windows** unhandled error hook + +### 1.0.1 (Jun 17, 2015) +* added ratignore file + +### 1.0.0 (Apr 15, 2015) +* [CB-8746](https://issues.apache.org/jira/browse/CB-8746) gave plugin major version bump +* [CB-8683](https://issues.apache.org/jira/browse/CB-8683) changed plugin-id to pacakge-name +* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) Updated Readme +* [CB-8528](https://issues.apache.org/jira/browse/CB-8528) Add a shim for `jasmine.Expectation.addMatchers` being moved in jasmine 2.2.0 +* [CB-8528](https://issues.apache.org/jira/browse/CB-8528) Update test framework plugin to use Jasmine 2.2.0 (close #11) +* Close already merged PR (close #10) +* [CB-8538](https://issues.apache.org/jira/browse/CB-8538) Added package.json file +* [CB-8385](https://issues.apache.org/jira/browse/CB-8385) Ensure plugin-test-framework trigger tests only once + +### 0.0.1 (Feb 04, 2015) +* Initial release diff --git a/plugins/cordova-plugin-test-framework/package.json b/plugins/cordova-plugin-test-framework/package.json new file mode 100644 index 0000000..7460f62 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/package.json @@ -0,0 +1,27 @@ +{ + "name": "cordova-plugin-test-framework", + "version": "1.1.2-dev", + "description": "Cordova Test Framework Plugin", + "cordova": { + "id": "cordova-plugin-test-framework", + "platforms": [] + }, + "repository": { + "type": "git", + "url": "https://github.com/apache/cordova-plugin-test-framework" + }, + "keywords": [ + "cordova", + "test", + "ecosystem:cordova" + ], + "scripts": { + "test": "npm run jshint", + "jshint": "jshint www" + }, + "author": "Apache Software Foundation", + "license": "Apache 2.0", + "devDependencies": { + "jshint": "^2.6.0" + } +} diff --git a/plugins/cordova-plugin-test-framework/plugin.xml b/plugins/cordova-plugin-test-framework/plugin.xml new file mode 100644 index 0000000..b5a4029 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/plugin.xml @@ -0,0 +1,40 @@ + + + + + Test Framework + Cordova Test Framework Plugin + Apache 2.0 + cordova,test + + + + + + + + + + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/index.html b/plugins/cordova-plugin-test-framework/www/assets/index.html new file mode 100644 index 0000000..68460bc --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/index.html @@ -0,0 +1,63 @@ + + + + + + + + Cordova tests + + + + + + + + + + + + + + + + + + + +
        +
        +
        +
        +
        +
        +
        Log
        +
        +
        + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/boot.js b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/boot.js new file mode 100755 index 0000000..e8ddd55 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/boot.js @@ -0,0 +1,121 @@ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +(function() { + + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + window.jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. + */ + jasmineRequire.html(jasmine); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = jasmineRequire.interface(jasmine, env); + + /** + * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + if (typeof window == "undefined" && typeof exports == "object") { + extend(exports, jasmineInterface); + } else { + extend(window, jasmineInterface); + } + + /** + * ## Runner Parameters + * + * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. + */ + + var queryString = new jasmine.QueryString({ + getWindowLocation: function() { return window.location; } + }); + + var catchingExceptions = queryString.getParam("catch"); + env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions); + + /** + * ## Reporters + * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). + */ + var htmlReporter = new jasmine.HtmlReporter({ + env: env, + onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); }, + addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, + getContainer: function() { return document.body; }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmine.Timer() + }); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); + env.addReporter(htmlReporter); + + /** + * Filter which specs will be run by matching the start of the full name against the `spec` query param. + */ + var specFilter = new jasmine.HtmlSpecFilter({ + filterString: function() { return queryString.getParam("spec"); } + }); + + env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + + /** + * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. + */ + window.setTimeout = window.setTimeout; + window.setInterval = window.setInterval; + window.clearTimeout = window.clearTimeout; + window.clearInterval = window.clearInterval; + + /** + * ## Execution + * + * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. + */ + var currentWindowOnload = window.onload; + + window.onload = function() { + if (currentWindowOnload) { + currentWindowOnload(); + } + htmlReporter.initialize(); + env.execute(); + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + +}()); diff --git a/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/console.js b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/console.js new file mode 100755 index 0000000..e154806 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/console.js @@ -0,0 +1,190 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== 'undefined' && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().console = function(jRequire, j$) { + j$.ConsoleReporter = jRequire.ConsoleReporter(); +}; + +getJasmineRequireObj().ConsoleReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function ConsoleReporter(options) { + var print = options.print, + showColors = options.showColors || false, + onComplete = options.onComplete || function() {}, + timer = options.timer || noopTimer, + specCount, + failureCount, + failedSpecs = [], + pendingCount, + ansi = { + green: '\x1B[32m', + red: '\x1B[31m', + yellow: '\x1B[33m', + none: '\x1B[0m' + }, + failedSuites = []; + + print('ConsoleReporter is deprecated and will be removed in a future version.'); + + this.jasmineStarted = function() { + specCount = 0; + failureCount = 0; + pendingCount = 0; + print('Started'); + printNewline(); + timer.start(); + }; + + this.jasmineDone = function() { + printNewline(); + for (var i = 0; i < failedSpecs.length; i++) { + specFailureDetails(failedSpecs[i]); + } + + if(specCount > 0) { + printNewline(); + + var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' + + failureCount + ' ' + plural('failure', failureCount); + + if (pendingCount) { + specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount); + } + + print(specCounts); + } else { + print('No specs found'); + } + + printNewline(); + var seconds = timer.elapsed() / 1000; + print('Finished in ' + seconds + ' ' + plural('second', seconds)); + printNewline(); + + for(i = 0; i < failedSuites.length; i++) { + suiteFailureDetails(failedSuites[i]); + } + + onComplete(failureCount === 0); + }; + + this.specDone = function(result) { + specCount++; + + if (result.status == 'pending') { + pendingCount++; + print(colored('yellow', '*')); + return; + } + + if (result.status == 'passed') { + print(colored('green', '.')); + return; + } + + if (result.status == 'failed') { + failureCount++; + failedSpecs.push(result); + print(colored('red', 'F')); + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + failureCount++; + failedSuites.push(result); + } + }; + + return this; + + function printNewline() { + print('\n'); + } + + function colored(color, str) { + return showColors ? (ansi[color] + str + ansi.none) : str; + } + + function plural(str, count) { + return count == 1 ? str : str + 's'; + } + + function repeat(thing, times) { + var arr = []; + for (var i = 0; i < times; i++) { + arr.push(thing); + } + return arr; + } + + function indent(str, spaces) { + var lines = (str || '').split('\n'); + var newArr = []; + for (var i = 0; i < lines.length; i++) { + newArr.push(repeat(' ', spaces).join('') + lines[i]); + } + return newArr.join('\n'); + } + + function specFailureDetails(result) { + printNewline(); + print(result.fullName); + + for (var i = 0; i < result.failedExpectations.length; i++) { + var failedExpectation = result.failedExpectations[i]; + printNewline(); + print(indent(failedExpectation.message, 2)); + print(indent(failedExpectation.stack, 2)); + } + + printNewline(); + } + + function suiteFailureDetails(result) { + for (var i = 0; i < result.failedExpectations.length; i++) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', 'AfterAll ' + result.failedExpectations[i].message)); + + } + printNewline(); + } + } + + return ConsoleReporter; +}; diff --git a/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine-html.js b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine-html.js new file mode 100755 index 0000000..bee5a04 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine-html.js @@ -0,0 +1,416 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +jasmineRequire.html = function(j$) { + j$.ResultsNode = jasmineRequire.ResultsNode(); + j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); + j$.QueryString = jasmineRequire.QueryString(); + j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); +}; + +jasmineRequire.HtmlReporter = function(j$) { + + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + function HtmlReporter(options) { + var env = options.env || {}, + getContainer = options.getContainer, + createElement = options.createElement, + createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, + addToExistingQueryString = options.addToExistingQueryString || defaultQueryString, + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0, + htmlReporterMain, + symbols, + failedSuites = []; + + this.initialize = function() { + clearPrior(); + htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'}, + createDom('div', {className: 'banner'}, + createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}), + createDom('span', {className: 'version'}, j$.version) + ), + createDom('ul', {className: 'symbol-summary'}), + createDom('div', {className: 'alert'}), + createDom('div', {className: 'results'}, + createDom('div', {className: 'failures'}) + ) + ); + getContainer().appendChild(htmlReporterMain); + + symbols = find('.symbol-summary'); + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + var summary = createDom('div', {className: 'summary'}); + + var topResults = new j$.ResultsNode({}, '', null), + currentParent = topResults; + + this.suiteStarted = function(result) { + currentParent.addChild(result, 'suite'); + currentParent = currentParent.last(); + }; + + this.suiteDone = function(result) { + if (result.status == 'failed') { + failedSuites.push(result); + } + + if (currentParent == topResults) { + return; + } + + currentParent = currentParent.parent; + }; + + this.specStarted = function(result) { + currentParent.addChild(result, 'spec'); + }; + + var failures = []; + this.specDone = function(result) { + if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') { + console.error('Spec \'' + result.fullName + '\' has no expectations.'); + } + + if (result.status != 'disabled') { + specsExecuted++; + } + + symbols.appendChild(createDom('li', { + className: noExpectations(result) ? 'empty' : result.status, + id: 'spec_' + result.id, + title: result.fullName + } + )); + + if (result.status == 'failed') { + failureCount++; + + var failure = + createDom('div', {className: 'spec-detail failed'}, + createDom('div', {className: 'description'}, + createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName) + ), + createDom('div', {className: 'messages'}) + ); + var messages = failure.childNodes[1]; + + for (var i = 0; i < result.failedExpectations.length; i++) { + var expectation = result.failedExpectations[i]; + messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message)); + messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack)); + } + + failures.push(failure); + } + + if (result.status == 'pending') { + pendingSpecCount++; + } + }; + + this.jasmineDone = function() { + var banner = find('.banner'); + banner.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's')); + + var alert = find('.alert'); + + alert.appendChild(createDom('span', { className: 'exceptions' }, + createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions'), + createDom('input', { + className: 'raise', + id: 'raise-exceptions', + type: 'checkbox' + }) + )); + var checkbox = find('#raise-exceptions'); + + checkbox.checked = !env.catchingExceptions(); + checkbox.onclick = onRaiseExceptionsClick; + + if (specsExecuted < totalSpecsDefined) { + var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all'; + alert.appendChild( + createDom('span', {className: 'bar skipped'}, + createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage) + ) + ); + } + var statusBarMessage = ''; + var statusBarClassName = 'bar '; + + if (totalSpecsDefined > 0) { + statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount); + if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); } + statusBarClassName += (failureCount > 0) ? 'failed' : 'passed'; + } else { + statusBarClassName += 'skipped'; + statusBarMessage += 'No specs found'; + } + + alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage)); + + for(i = 0; i < failedSuites.length; i++) { + var failedSuite = failedSuites[i]; + for(var j = 0; j < failedSuite.failedExpectations.length; j++) { + var errorBarMessage = 'AfterAll ' + failedSuite.failedExpectations[j].message; + var errorBarClassName = 'bar errored'; + alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage)); + } + } + + var results = find('.results'); + results.appendChild(summary); + + summaryList(topResults, summary); + + function summaryList(resultsTree, domParent) { + var specListNode; + for (var i = 0; i < resultsTree.children.length; i++) { + var resultNode = resultsTree.children[i]; + if (resultNode.type == 'suite') { + var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id}, + createDom('li', {className: 'suite-detail'}, + createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description) + ) + ); + + summaryList(resultNode, suiteListNode); + domParent.appendChild(suiteListNode); + } + if (resultNode.type == 'spec') { + if (domParent.getAttribute('class') != 'specs') { + specListNode = createDom('ul', {className: 'specs'}); + domParent.appendChild(specListNode); + } + var specDescription = resultNode.result.description; + if(noExpectations(resultNode.result)) { + specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription; + } + if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') { + specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason; + } + specListNode.appendChild( + createDom('li', { + className: resultNode.result.status, + id: 'spec-' + resultNode.result.id + }, + createDom('a', {href: specHref(resultNode.result)}, specDescription) + ) + ); + } + } + } + + if (failures.length) { + alert.appendChild( + createDom('span', {className: 'menu bar spec-list'}, + createDom('span', {}, 'Spec List | '), + createDom('a', {className: 'failures-menu', href: '#'}, 'Failures'))); + alert.appendChild( + createDom('span', {className: 'menu bar failure-list'}, + createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'), + createDom('span', {}, ' | Failures '))); + + find('.failures-menu').onclick = function() { + setMenuModeTo('failure-list'); + }; + find('.spec-list-menu').onclick = function() { + setMenuModeTo('spec-list'); + }; + + setMenuModeTo('failure-list'); + + var failureNode = find('.failures'); + for (var i = 0; i < failures.length; i++) { + failureNode.appendChild(failures[i]); + } + } + }; + + return this; + + function find(selector) { + return getContainer().querySelector('.jasmine_html-reporter ' + selector); + } + + function clearPrior() { + // return the reporter + var oldReporter = find(''); + + if(oldReporter) { + getContainer().removeChild(oldReporter); + } + } + + function createDom(type, attrs, childrenVarArgs) { + var el = createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(createTextNode(child)); + } else { + if (child) { + el.appendChild(child); + } + } + } + + for (var attr in attrs) { + if (attr == 'className') { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; + } + + function pluralize(singular, count) { + var word = (count == 1 ? singular : singular + 's'); + + return '' + count + ' ' + word; + } + + function specHref(result) { + return addToExistingQueryString('spec', result.fullName); + } + + function defaultQueryString(key, value) { + return '?' + key + '=' + value; + } + + function setMenuModeTo(mode) { + htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode); + } + + function noExpectations(result) { + return (result.failedExpectations.length + result.passedExpectations.length) === 0 && + result.status === 'passed'; + } + } + + return HtmlReporter; +}; + +jasmineRequire.HtmlSpecFilter = function() { + function HtmlSpecFilter(options) { + var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; + } + + return HtmlSpecFilter; +}; + +jasmineRequire.ResultsNode = function() { + function ResultsNode(result, type, parent) { + this.result = result; + this.type = type; + this.parent = parent; + + this.children = []; + + this.addChild = function(result, type) { + this.children.push(new ResultsNode(result, type, this)); + }; + + this.last = function() { + return this.children[this.children.length - 1]; + }; + } + + return ResultsNode; +}; + +jasmineRequire.QueryString = function() { + function QueryString(options) { + + this.navigateWithNewParam = function(key, value) { + options.getWindowLocation().search = this.fullStringWithNewParam(key, value); + }; + + this.fullStringWithNewParam = function(key, value) { + var paramMap = queryStringToParamMap(); + paramMap[key] = value; + return toQueryString(paramMap); + }; + + this.getParam = function(key) { + return queryStringToParamMap()[key]; + }; + + return this; + + function toQueryString(paramMap) { + var qStrPairs = []; + for (var prop in paramMap) { + qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop])); + } + return '?' + qStrPairs.join('&'); + } + + function queryStringToParamMap() { + var paramStr = options.getWindowLocation().search.substring(1), + params = [], + paramMap = {}; + + if (paramStr.length > 0) { + params = paramStr.split('&'); + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + var value = decodeURIComponent(p[1]); + if (value === 'true' || value === 'false') { + value = JSON.parse(value); + } + paramMap[decodeURIComponent(p[0])] = value; + } + } + + return paramMap; + } + + } + + return QueryString; +}; diff --git a/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine.css b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine.css new file mode 100755 index 0000000..ecc5f5e --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine.css @@ -0,0 +1,62 @@ +body { overflow-y: scroll; } + +.jasmine_html-reporter { background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333; } +.jasmine_html-reporter a { text-decoration: none; } +.jasmine_html-reporter a:hover { text-decoration: underline; } +.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; } +.jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; } +.jasmine_html-reporter .banner { position: relative; } +.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,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') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; } +.jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; } +.jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; } +.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; } +.jasmine_html-reporter .version { color: #aaa; } +.jasmine_html-reporter .banner { margin-top: 14px; } +.jasmine_html-reporter .duration { color: #aaa; float: right; } +.jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; } +.jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; } +.jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: "\02022"; } +.jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; } +.jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; } +.jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; } +.jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; } +.jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; } +.jasmine_html-reporter .symbol-summary li.empty { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.empty:before { color: #ba9d37; content: "\02022"; } +.jasmine_html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; } +.jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +.jasmine_html-reporter .bar.failed { background-color: #ca3a11; } +.jasmine_html-reporter .bar.passed { background-color: #007069; } +.jasmine_html-reporter .bar.skipped { background-color: #bababa; } +.jasmine_html-reporter .bar.errored { background-color: #ca3a11; } +.jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaa; } +.jasmine_html-reporter .bar.menu a { color: #333; } +.jasmine_html-reporter .bar a { color: white; } +.jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; } +.jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; } +.jasmine_html-reporter .running-alert { background-color: #666; } +.jasmine_html-reporter .results { margin-top: 14px; } +.jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } +.jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } +.jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } +.jasmine_html-reporter.showDetails .summary { display: none; } +.jasmine_html-reporter.showDetails #details { display: block; } +.jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } +.jasmine_html-reporter .summary { margin-top: 14px; } +.jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } +.jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; } +.jasmine_html-reporter .summary li.passed a { color: #007069; } +.jasmine_html-reporter .summary li.failed a { color: #ca3a11; } +.jasmine_html-reporter .summary li.empty a { color: #ba9d37; } +.jasmine_html-reporter .summary li.pending a { color: #ba9d37; } +.jasmine_html-reporter .description + .suite { margin-top: 0; } +.jasmine_html-reporter .suite { margin-top: 14px; } +.jasmine_html-reporter .suite a { color: #333; } +.jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; } +.jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; } +.jasmine_html-reporter .failures .spec-detail .description a { color: white; } +.jasmine_html-reporter .result-message { padding-top: 14px; color: #333; white-space: pre; } +.jasmine_html-reporter .result-message span.result { display: block; } +.jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine.js b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine.js new file mode 100755 index 0000000..6bf3f02 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine.js @@ -0,0 +1,3048 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +var getJasmineRequireObj = (function (jasmineGlobal) { + var jasmineRequire; + + if (typeof module !== 'undefined' && module.exports) { + jasmineGlobal = global; + jasmineRequire = exports; + } else { + if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') { + jasmineGlobal = window; + } + jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {}; + } + + function getJasmineRequire() { + return jasmineRequire; + } + + getJasmineRequire().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$, jasmineGlobal); + j$.util = jRequire.util(); + j$.Any = jRequire.Any(); + j$.Anything = jRequire.Anything(j$); + j$.CallTracker = jRequire.CallTracker(); + j$.MockDate = jRequire.MockDate(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.ArrayContaining = jRequire.ArrayContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(j$); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyRegistry = jRequire.SpyRegistry(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.StringMatching = jRequire.StringMatching(j$); + j$.Suite = jRequire.Suite(); + j$.Timer = jRequire.Timer(); + j$.version = jRequire.version(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; + }; + + return getJasmineRequire; +})(this); + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + 'toBe', + 'toBeCloseTo', + 'toBeDefined', + 'toBeFalsy', + 'toBeGreaterThan', + 'toBeLessThan', + 'toBeNaN', + 'toBeNull', + 'toBeTruthy', + 'toBeUndefined', + 'toContain', + 'toEqual', + 'toHaveBeenCalled', + 'toHaveBeenCalledWith', + 'toMatch', + 'toThrow', + 'toThrowError' + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = function(j$, jasmineGlobal) { + j$.unimplementedMethod_ = function() { + throw new Error('unimplemented method'); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { + return jasmineGlobal; + }; + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_('Array', value); + }; + + j$.isString_ = function(value) { + return j$.isA_('String', value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_('Number', value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.fnNameFor = function(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.anything = function() { + return new j$.Anything(); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.stringMatching = function(expected) { + return new j$.StringMatching(expected); + }; + + j$.arrayContaining = function(sample) { + return new j$.ArrayContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + var callData = { + object: this, + args: Array.prototype.slice.apply(arguments) + }; + + callTracker.track(callData); + var returnValue = spyStrategy.exec.apply(this, arguments); + callData.returnValue = returnValue; + + return returnValue; + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) { + methodNames = baseName; + baseName = 'unknown'; + } + + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw 'createSpyObj requires a non-empty array of method names to create spies for'; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; +}; + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(//g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + util.arrayContains = function(array, search) { + var i = array.length; + while (i--) { + if (array[i] === search) { + return true; + } + } + return false; + }; + + util.clone = function(obj) { + if (Object.prototype.toString.apply(obj) === '[object Array]') { + return obj.slice(); + } + + var cloned = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + cloned[prop] = obj[prop]; + } + } + + return cloned; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.queueableFn = attrs.queueableFn; + this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; }; + this.userContext = attrs.userContext || function() { return {}; }; + this.onStart = attrs.onStart || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + + if (!this.queueableFn.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [], + passedExpectations: [], + pendingReason: '' + }; + } + + Spec.prototype.addExpectationResult = function(passed, data) { + var expectationResult = this.expectationResultFactory(data); + if (passed) { + this.result.passedExpectations.push(expectationResult); + } else { + this.result.failedExpectations.push(expectationResult); + } + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.markedPending || this.disabled) { + complete(); + return; + } + + var fns = this.beforeAndAfterFns(); + var allFns = fns.befores.concat(this.queueableFn).concat(fns.afters); + + this.queueRunnerFactory({ + queueableFns: allFns, + onException: function() { self.onException.apply(self, arguments); }, + onComplete: complete, + userContext: this.userContext() + }); + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.onException = function onException(e) { + if (Spec.isPendingSpecException(e)) { + this.pend(extractCustomPendingMessage(e)); + return; + } + + this.addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: e + }); + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function(message) { + this.markedPending = true; + if (message) { + this.result.pendingReason = message; + } + }; + + Spec.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.isExecutable = function() { + return !this.disabled && !this.markedPending; + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + var extractCustomPendingMessage = function(e) { + var fullMessage = e.toString(), + boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage), + boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length; + + return fullMessage.substr(boilerplateEnd); + }; + + Spec.pendingSpecExceptionMessage = '=> marked Pending'; + + Spec.isPendingSpecException = function(e) { + return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Spec = jasmineRequire.Spec; +} + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global)); + + var runnableLookupTable = {}; + var runnableResources = {}; + + var currentSpec = null; + var currentlyExecutingSuites = []; + var currentDeclarationSuite = null; + + var currentSuite = function() { + return currentlyExecutingSuites[currentlyExecutingSuites.length - 1]; + }; + + var currentRunnable = function() { + return currentSpec || currentSuite(); + }; + + var reporter = new j$.ReportDispatcher([ + 'jasmineStarted', + 'jasmineDone', + 'suiteStarted', + 'suiteDone', + 'specStarted', + 'specDone' + ]); + + this.specFilter = function() { + return true; + }; + + this.addCustomEqualityTester = function(tester) { + if(!currentRunnable()) { + throw new Error('Custom Equalities must be added in a before function or a spec'); + } + runnableResources[currentRunnable().id].customEqualityTesters.push(tester); + }; + + this.addMatchers = function(matchersToAdd) { + if(!currentRunnable()) { + throw new Error('Matchers must be added in a before function or a spec'); + } + var customMatchers = runnableResources[currentRunnable().id].customMatchers; + for (var matcherName in matchersToAdd) { + customMatchers[matcherName] = matchersToAdd[matcherName]; + } + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: runnableResources[spec.id].customEqualityTesters, + customMatchers: runnableResources[spec.id].customMatchers, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var defaultResourcesForRunnable = function(id, parentRunnableId) { + var resources = {spies: [], customEqualityTesters: [], customMatchers: {}}; + + if(runnableResources[parentRunnableId]){ + resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters); + resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers); + } + + runnableResources[id] = resources; + }; + + var clearResourcesForRunnable = function(id) { + spyRegistry.clearSpies(); + delete runnableResources[id]; + }; + + var beforeAndAfterFns = function(suite, runnablesExplictlySet) { + return function() { + var befores = [], + afters = [], + beforeAlls = [], + afterAlls = []; + + while(suite) { + befores = befores.concat(suite.beforeFns); + afters = afters.concat(suite.afterFns); + + if (runnablesExplictlySet()) { + beforeAlls = beforeAlls.concat(suite.beforeAllFns); + afterAlls = afterAlls.concat(suite.afterAllFns); + } + + suite = suite.parentSuite; + } + return { + befores: beforeAlls.reverse().concat(befores.reverse()), + afters: afters.concat(afterAlls) + }; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + var maximumSpecCallbackDepth = 20; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + options.timer = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}; + options.fail = self.fail; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory + }); + runnableLookupTable[topSuite.id] = topSuite; + defaultResourcesForRunnable(topSuite.id); + currentDeclarationSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + if(runnablesToRun) { + runnablesExplictlySet = true; + } else if (focusedRunnables.length) { + runnablesExplictlySet = true; + runnablesToRun = focusedRunnables; + } else { + runnablesToRun = [topSuite.id]; + } + + var allFns = []; + for(var i = 0; i < runnablesToRun.length; i++) { + var runnable = runnableLookupTable[runnablesToRun[i]]; + allFns.push((function(runnable) { return { fn: function(done) { runnable.execute(done); } }; })(runnable)); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + queueRunnerFactory({queueableFns: allFns, onComplete: reporter.jasmineDone}); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + var spyRegistry = new j$.SpyRegistry({currentSpies: function() { + if(!currentRunnable()) { + throw new Error('Spies must be created in a before function or a spec'); + } + return runnableResources[currentRunnable().id].spies; + }}); + + this.spyOn = function() { + return spyRegistry.spyOn.apply(spyRegistry, arguments); + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentDeclarationSuite, + queueRunner: queueRunnerFactory, + onStart: suiteStarted, + expectationFactory: expectationFactory, + expectationResultFactory: expectationResultFactory, + runnablesExplictlySetGetter: runnablesExplictlySetGetter, + resultCallback: function(attrs) { + if (!suite.disabled) { + clearResourcesForRunnable(suite.id); + } + currentlyExecutingSuites.pop(); + reporter.suiteDone(attrs); + } + }); + + runnableLookupTable[suite.id] = suite; + return suite; + + function suiteStarted(suite) { + currentlyExecutingSuites.push(suite); + defaultResourcesForRunnable(suite.id, suite.parentSuite.id); + reporter.suiteStarted(suite.result); + } + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + addSpecsToSuite(suite, specDefinitions); + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = this.describe(description, specDefinitions); + suite.disable(); + return suite; + }; + + var focusedRunnables = []; + + this.fdescribe = function(description, specDefinitions) { + var suite = suiteFactory(description); + suite.isFocused = true; + + focusedRunnables.push(suite.id); + unfocusAncestor(); + addSpecsToSuite(suite, specDefinitions); + + return suite; + }; + + function addSpecsToSuite(suite, specDefinitions) { + var parentSuite = currentDeclarationSuite; + parentSuite.addChild(suite); + currentDeclarationSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + self.it('encountered a declaration exception', function() { + throw declarationError; + }); + } + + currentDeclarationSuite = parentSuite; + } + + function findFocusedAncestor(suite) { + while (suite) { + if (suite.isFocused) { + return suite.id; + } + suite = suite.parentSuite; + } + + return null; + } + + function unfocusAncestor() { + var focusedAncestor = findFocusedAncestor(currentDeclarationSuite); + if (focusedAncestor) { + for (var i = 0; i < focusedRunnables.length; i++) { + if (focusedRunnables[i] === focusedAncestor) { + focusedRunnables.splice(i, 1); + break; + } + } + } + } + + var runnablesExplictlySet = false; + + var runnablesExplictlySetGetter = function(){ + return runnablesExplictlySet; + }; + + var specFactory = function(description, fn, suite, timeout) { + totalSpecsDefined++; + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeAndAfterFns: beforeAndAfterFns(suite, runnablesExplictlySetGetter), + expectationFactory: expectationFactory, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + userContext: function() { return suite.clonedSharedUserContext(); }, + queueableFn: { + fn: fn, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + } + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function specResultCallback(result) { + clearResourcesForRunnable(spec.id); + currentSpec = null; + reporter.specDone(result); + } + + function specStarted(spec) { + currentSpec = spec; + defaultResourcesForRunnable(spec.id, suite.id); + reporter.specStarted(spec.result); + } + }; + + this.it = function(description, fn, timeout) { + var spec = specFactory(description, fn, currentDeclarationSuite, timeout); + currentDeclarationSuite.addChild(spec); + return spec; + }; + + this.xit = function() { + var spec = this.it.apply(this, arguments); + spec.pend(); + return spec; + }; + + this.fit = function(){ + var spec = this.it.apply(this, arguments); + + focusedRunnables.push(spec.id); + unfocusAncestor(); + return spec; + }; + + this.expect = function(actual) { + if (!currentRunnable()) { + throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); + } + + return currentRunnable().expect(actual); + }; + + this.beforeEach = function(beforeEachFunction, timeout) { + currentDeclarationSuite.beforeEach({ + fn: beforeEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.beforeAll = function(beforeAllFunction, timeout) { + currentDeclarationSuite.beforeAll({ + fn: beforeAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterEach = function(afterEachFunction, timeout) { + currentDeclarationSuite.afterEach({ + fn: afterEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterAll = function(afterAllFunction, timeout) { + currentDeclarationSuite.afterAll({ + fn: afterAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.pending = function(message) { + var fullMessage = j$.Spec.pendingSpecExceptionMessage; + if(message) { + fullMessage += message; + } + throw fullMessage; + }; + + this.fail = function(error) { + var message = 'Failed'; + if (error) { + message += ': '; + message += error.message || error; + } + + currentRunnable().addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + message: message, + error: error && error.message ? error : null + }); + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = 'loaded'; + + this.started = false; + this.finished = false; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function() { + this.finished = true; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = [], + suites_hash = {}; + + this.suiteStarted = function(result) { + suites_hash[result.id] = result; + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + this.suiteResults = function(index, length) { + return suites.slice(index, index + length); + }; + + function storeSuite(result) { + suites.push(result); + suites_hash[result.id] = result; + } + + this.suites = function() { + return suites_hash; + }; + + var specs = []; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionScheduler, mockDate) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + timer; + + + self.install = function() { + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + installed = true; + + return self; + }; + + self.uninstall = function() { + delayedFunctionScheduler.reset(); + mockDate.uninstall(); + replace(global, realTimingFunctions); + + timer = realTimingFunctions; + installed = false; + }; + + self.mockDate = function(initialDate) { + mockDate.install(initialDate); + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + mockDate.tick(millis); + delayedFunctionScheduler.tick(millis); + } else { + throw new Error('Mock clock is not installed, use jasmine.clock().install()'); + } + }; + + return self; + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, n); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + self.reset = function() { + currentTime = 0; + scheduledLookup = []; + scheduledFunctions = {}; + delayedFnCount = 0; + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function forEachFunction(funcsToRun, callback) { + for (var i = 0; i < funcsToRun.length; ++i) { + callback(funcsToRun[i]); + } + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + forEachFunction(funcsToRun, function(funcToRun) { + if (funcToRun.recurring) { + reschedule(funcToRun); + } + }); + + forEachFunction(funcsToRun, function(funcToRun) { + funcToRun.funcToCall.apply(null, funcToRun.params || []); + }); + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = ''; + + if (error.name && error.message) { + message += error.name + ': ' + error.message; + } else { + message += error.toString() + ' thrown'; + } + + if (error.fileName || error.sourceURL) { + message += ' in ' + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += ' (line ' + (error.line || error.lineNumber) + ')'; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + var customMatchers = options.customMatchers || {}; + for (var matcherName in customMatchers) { + this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]); + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ''; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + if (Object.prototype.toString.apply(result.message) === '[object Function]') { + message = result.message(); + } else { + message = result.message; + } + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + var result = { + matcherName: options.matcherName, + message: message(), + stack: stack(), + passed: options.passed + }; + + if(!result.passed) { + result.expected = options.expected; + result.actual = options.actual; + } + + return result; + + function message() { + if (options.passed) { + return 'Passed.'; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ''; + } + + function stack() { + if (options.passed) { + return ''; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().MockDate = function() { + function MockDate(global) { + var self = this; + var currentTime = 0; + + if (!global || !global.Date) { + self.install = function() {}; + self.tick = function() {}; + self.uninstall = function() {}; + return self; + } + + var GlobalDate = global.Date; + + self.install = function(mockDate) { + if (mockDate instanceof GlobalDate) { + currentTime = mockDate.getTime(); + } else { + currentTime = new GlobalDate().getTime(); + } + + global.Date = FakeDate; + }; + + self.tick = function(millis) { + millis = millis || 0; + currentTime = currentTime + millis; + }; + + self.uninstall = function() { + currentTime = 0; + global.Date = GlobalDate; + }; + + createDateProperties(); + + return self; + + function FakeDate() { + switch(arguments.length) { + case 0: + return new GlobalDate(currentTime); + case 1: + return new GlobalDate(arguments[0]); + case 2: + return new GlobalDate(arguments[0], arguments[1]); + case 3: + return new GlobalDate(arguments[0], arguments[1], arguments[2]); + case 4: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]); + case 5: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4]); + case 6: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5]); + default: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5], arguments[6]); + } + } + + function createDateProperties() { + FakeDate.prototype = GlobalDate.prototype; + + FakeDate.now = function() { + if (GlobalDate.now) { + return currentTime; + } else { + throw new Error('Browser does not support Date.now()'); + } + }; + + FakeDate.toSource = GlobalDate.toSource; + FakeDate.toString = GlobalDate.toString; + FakeDate.parse = GlobalDate.parse; + FakeDate.UTC = GlobalDate.UTC; + } + } + + return MockDate; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + this.seen = []; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === 0 && 1/value === -Infinity) { + this.emitScalar('-0'); + } else if (value === j$.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar('spy on ' + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (j$.util.arrayContains(this.seen, value)) { + this.emitScalar(''); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + this.seen.push(value); + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + this.seen.pop(); + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append('\'' + value + '\''); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Array'); + return; + } + var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); + this.append('[ '); + for (var i = 0; i < length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + if(array.length > length){ + this.append(', ...'); + } + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null'; + this.append(constructorName); + + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + return; + } + + var self = this; + this.append('({ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.append(property); + self.append(': '); + if (isGetter) { + self.append(''); + } else { + self.format(obj[property]); + } + }); + + this.append(' })'); + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function(j$) { + + function once(fn) { + var called = false; + return function() { + if (!called) { + called = true; + fn(); + } + }; + } + + function QueueRunner(attrs) { + this.queueableFns = attrs.queueableFns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.userContext = attrs.userContext || {}; + this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + this.fail = attrs.fail || function() {}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.queueableFns, 0); + }; + + QueueRunner.prototype.run = function(queueableFns, recursiveIndex) { + var length = queueableFns.length, + self = this, + iterativeIndex; + + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var queueableFn = queueableFns[iterativeIndex]; + if (queueableFn.fn.length > 0) { + attemptAsync(queueableFn); + return; + } else { + attemptSync(queueableFn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(queueableFn) { + try { + queueableFn.fn.call(self.userContext); + } catch (e) { + handleException(e, queueableFn); + } + } + + function attemptAsync(queueableFn) { + var clearTimeout = function () { + Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]); + }, + next = once(function () { + clearTimeout(timeoutId); + self.run(queueableFns, iterativeIndex + 1); + }), + timeoutId; + + next.fail = function() { + self.fail.apply(null, arguments); + next(); + }; + + if (queueableFn.timeout) { + timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { + var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'); + onException(error, queueableFn); + next(); + }, queueableFn.timeout()]]); + } + + try { + queueableFn.fn.call(self.userContext, next); + } catch (e) { + handleException(e, queueableFn); + next(); + } + } + + function onException(e, queueableFn) { + self.onException(e); + } + + function handleException(e, queueableFn) { + onException(e, queueableFn); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyRegistry = function(j$) { + + function SpyRegistry(options) { + options = options || {}; + var currentSpies = options.currentSpies || function() { return []; }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); + } + + if (j$.util.isUndefined(methodName)) { + throw new Error('No method name supplied'); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + currentSpies().push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + this.clearSpies = function() { + var spies = currentSpies(); + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + }; + } + + return SpyRegistry; +}; + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || 'unknown', + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.returnValues = function() { + var values = Array.prototype.slice.call(arguments); + plan = function () { + return values.shift(); + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function() { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.onStart = attrs.onStart || function() {}; + this.resultCallback = attrs.resultCallback || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.expectationFactory = attrs.expectationFactory; + this.expectationResultFactory = attrs.expectationResultFactory; + this.runnablesExplictlySetGetter = attrs.runnablesExplictlySetGetter || function() {}; + + this.beforeFns = []; + this.afterFns = []; + this.beforeAllFns = []; + this.afterAllFns = []; + this.queueRunner = attrs.queueRunner || function() {}; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [] + }; + } + + Suite.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.beforeAll = function(fn) { + this.beforeAllFns.push(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.afterAll = function(fn) { + this.afterAllFns.push(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'finished'; + } + }; + + Suite.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.disabled) { + complete(); + return; + } + + var allFns = []; + + for (var i = 0; i < this.children.length; i++) { + allFns.push(wrapChildAsAsync(this.children[i])); + } + + if (this.isExecutable()) { + allFns = this.beforeAllFns.concat(allFns); + allFns = allFns.concat(this.afterAllFns); + } + + this.queueRunner({ + queueableFns: allFns, + onComplete: complete, + userContext: this.sharedUserContext(), + onException: function() { self.onException.apply(self, arguments); } + }); + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + + function wrapChildAsAsync(child) { + return { fn: function(done) { child.execute(done); } }; + } + }; + + Suite.prototype.isExecutable = function() { + var runnablesExplicitlySet = this.runnablesExplictlySetGetter(); + return !runnablesExplicitlySet && hasExecutableChild(this.children); + }; + + Suite.prototype.sharedUserContext = function() { + if (!this.sharedContext) { + this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {}; + } + + return this.sharedContext; + }; + + Suite.prototype.clonedSharedUserContext = function() { + return clone(this.sharedUserContext()); + }; + + Suite.prototype.onException = function() { + if(isAfterAll(this.children)) { + var data = { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: arguments[0] + }; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.onException.apply(child, arguments); + } + } + }; + + Suite.prototype.addExpectationResult = function () { + if(isAfterAll(this.children) && isFailure(arguments)){ + var data = arguments[1]; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.addExpectationResult.apply(child, arguments); + } + } + }; + + function isAfterAll(children) { + return children && children[0].result.status; + } + + function isFailure(args) { + return !args[0]; + } + + function hasExecutableChild(children) { + var foundActive = false; + for (var i = 0; i < children.length; i++) { + if (children[i].isExecutable()) { + foundActive = true; + break; + } + } + return foundActive; + } + + function clone(obj) { + var clonedObj = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + clonedObj[prop] = obj[prop]; + } + } + + return clonedObj; + } + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + var defaultNow = (function(Date) { + return function() { return new Date().getTime(); }; + })(Date); + + function Timer(options) { + options = options || {}; + + var now = options.now || defaultNow, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().Any = function() { + + function Any(expectedObject) { + this.expectedObject = expectedObject; + } + + Any.prototype.asymmetricMatch = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return ''; + }; + + return Any; +}; + +getJasmineRequireObj().Anything = function(j$) { + + function Anything() {} + + Anything.prototype.asymmetricMatch = function(other) { + return !j$.util.isUndefined(other) && other !== null; + }; + + Anything.prototype.jasmineToString = function() { + return ''; + }; + + return Anything; +}; + +getJasmineRequireObj().ArrayContaining = function(j$) { + function ArrayContaining(sample) { + this.sample = sample; + } + + ArrayContaining.prototype.asymmetricMatch = function(other) { + var className = Object.prototype.toString.call(this.sample); + if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); } + + for (var i = 0; i < this.sample.length; i++) { + var item = this.sample[i]; + if (!j$.matchersUtil.contains(other, item)) { + return false; + } + } + + return true; + }; + + ArrayContaining.prototype.jasmineToString = function () { + return ''; + }; + + return ArrayContaining; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + ObjectContaining.prototype.asymmetricMatch = function(other) { + if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } + + for (var property in this.sample) { + if (!Object.prototype.hasOwnProperty.call(other, property) || + !j$.matchersUtil.equals(this.sample[property], other[property])) { + return false; + } + } + + return true; + }; + + ObjectContaining.prototype.jasmineToString = function() { + return ''; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().StringMatching = function(j$) { + + function StringMatching(expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + this.regexp = new RegExp(expected); + } + + StringMatching.prototype.asymmetricMatch = function(other) { + return this.regexp.test(other); + }; + + StringMatching.prototype.jasmineToString = function() { + return ''; + }; + + return StringMatching; +}; + +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if ((Object.prototype.toString.apply(haystack) === '[object Array]') || + (!!haystack && !haystack.indexOf)) + { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + + return !!haystack && haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = 'Expected ' + + j$.pp(actual) + + (isNot ? ' not ' : ' ') + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ','; + } + message += ' ' + j$.pp(expected[i]); + } + } + + return message + '.'; + } + }; + + function isAsymmetric(obj) { + return obj && j$.isA_('Function', obj.asymmetricMatch); + } + + function asymmetricMatch(a, b) { + var asymmetricA = isAsymmetric(a), + asymmetricB = isAsymmetric(b); + + if (asymmetricA && asymmetricB) { + return undefined; + } + + if (asymmetricA) { + return a.asymmetricMatch(b); + } + + if (asymmetricB) { + return b.asymmetricMatch(a); + } + } + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + var asymmetricResult = asymmetricMatch(a, b); + if (!j$.util.isUndefined(asymmetricResult)) { + return asymmetricResult; + } + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + + var aIsDomNode = j$.isDomNode(a); + var bIsDomNode = j$.isDomNode(b); + if (aIsDomNode && bIsDomNode) { + // At first try to use DOM3 method isEqualNode + if (a.isEqualNode) { + return a.isEqualNode(b); + } + // IE8 doesn't support isEqualNode, try to use outerHTML && innerText + var aIsElement = a instanceof Element; + var bIsElement = b instanceof Element; + if (aIsElement && bIsElement) { + return a.outerHTML == b.outerHTML; + } + if (aIsElement || bIsElement) { + return false; + } + return a.innerText == b.innerText && a.textContent == b.textContent; + } + if (aIsDomNode || bIsDomNode) { + return false; + } + + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + // Compare array lengths to determine if a deep comparison is necessary. + if (className == '[object Array]' && a.length !== b.length) { + result = false; + } + + if (result) { + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && + isFunction(bCtor) && (bCtor instanceof bCtor))) { + return false; + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = 'Expected actual not to be NaN.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called.' : + 'Expected spy ' + actual.and.identity() + ' to have been called.'; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util, customEqualityTesters) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { + result.pass = true; + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; + } else { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function(j$) { + + function toMatch() { + return { + compare: function(actual, expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = 'Expected function to throw an exception.'; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; + } else { + result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError (util) { + return { + compare: function(actual) { + var threw = false, + pass = {pass: true}, + fail = {pass: false}, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + var errorMatcher = getMatcher.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + fail.message = 'Expected function to throw an Error.'; + return fail; + } + + if (!(thrown instanceof Error)) { + fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; + return fail; + } + + if (errorMatcher.hasNoSpecifics()) { + pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.'; + return pass; + } + + if (errorMatcher.matches(thrown)) { + pass.message = function() { + return 'Expected function not to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + '.'; + }; + return pass; + } else { + fail.message = function() { + return 'Expected function to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + + ', but it threw ' + errorMatcher.thrownDescription(thrown) + '.'; + }; + return fail; + } + } + }; + + function getMatcher() { + var expected = null, + errorType = null; + + if (arguments.length == 2) { + expected = arguments[1]; + if (isAnErrorType(expected)) { + errorType = expected; + expected = null; + } + } else if (arguments.length > 2) { + errorType = arguments[1]; + expected = arguments[2]; + if (!isAnErrorType(errorType)) { + throw new Error('Expected error type is not an Error.'); + } + } + + if (expected && !isStringOrRegExp(expected)) { + if (errorType) { + throw new Error('Expected error message is not a string or RegExp.'); + } else { + throw new Error('Expected is not an Error, string, or RegExp.'); + } + } + + function messageMatch(message) { + if (typeof expected == 'string') { + return expected == message; + } else { + return expected.test(message); + } + } + + return { + errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception', + thrownDescription: function(thrown) { + var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception', + thrownMessage = ''; + + if (expected) { + thrownMessage = ' with message ' + j$.pp(thrown.message); + } + + return thrownName + thrownMessage; + }, + messageDescription: function() { + if (expected === null) { + return ''; + } else if (expected instanceof RegExp) { + return ' with a message matching ' + j$.pp(expected); + } else { + return ' with message ' + j$.pp(expected); + } + }, + hasNoSpecifics: function() { + return expected === null && errorType === null; + }, + matches: function(error) { + return (errorType === null || error.constructor === errorType) && + (expected === null || messageMatch(error.message)); + } + }; + } + + function isStringOrRegExp(potential) { + return potential instanceof RegExp || (typeof potential == 'string'); + } + + function isAnErrorType(type) { + if (typeof type !== 'function') { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + + return toThrowError; +}; + +getJasmineRequireObj().interface = function(jasmine, env) { + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + fdescribe: function(description, specDefinitions) { + return env.fdescribe(description, specDefinitions); + }, + + it: function() { + return env.it.apply(env, arguments); + }, + + xit: function() { + return env.xit.apply(env, arguments); + }, + + fit: function() { + return env.fit.apply(env, arguments); + }, + + beforeEach: function() { + return env.beforeEach.apply(env, arguments); + }, + + afterEach: function() { + return env.afterEach.apply(env, arguments); + }, + + beforeAll: function() { + return env.beforeAll.apply(env, arguments); + }, + + afterAll: function() { + return env.afterAll.apply(env, arguments); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending.apply(env, arguments); + }, + + fail: function() { + return env.fail.apply(env, arguments); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }), + + jasmine: jasmine + }; + + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + jasmine.clock = function() { + return env.clock; + }; + + return jasmineInterface; +}; + +getJasmineRequireObj().version = function() { + return '2.2.0'; +}; diff --git a/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine_favicon.png b/plugins/cordova-plugin-test-framework/www/assets/jasmine-2.2.0/jasmine_favicon.png new file mode 100755 index 0000000000000000000000000000000000000000..3b84583be4b9d5ae9cd5cae07b2dbaa5ebb0ad1c GIT binary patch literal 1486 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0VDb;}332@o1PuQh8X8uGu4-^- zn3*=SA+%wV=cI;&hMB$%-Lc(MLmN8%IwwUpbcA;F2Q;)twND9bn-tpC9oR4-vb8I; zp+Bg#FSKP+P(yD-%f!%zo}iZgh=%Ua=KkP@iNVbiLYsSn8~VeW`+}P$1~&ACHcbd_ z=nZb_32o{NZkZ6&1k^hrxT!a&r8lIdAIJ@9nh?|iRMsET+#A%`AKKg-(%2K)*cZ|~ zA-J&*$PEUH08MM`4Q=iVY3vVfhN$TUscGs5sR8P31X|G_+SnTcv<0XVC=Rr!u|K4# zHyCJU6UYRR;%2BtKv^I=q#2|DECn_k@wXU|=@ zeD&J(8#iy=zH|5fgNKiwJbm`!<*V0k-oF3v@zdvTKYsrD^Y>rGdNDU(R>|^oaSW-5 z%f0Y2x+hSk{p0&HA;E60Oq1S3r7U;(X3MH#?W9nxXzk)srlC4P;cZYe&v*G}mgi%< ze(bTl{@&_)cX8b-kvX%ff9D22e*M~7edm|;|Jb8m2JBzkzKiSBKR0n*?XSyM6fxZY zJ4bb;vGKRiKP(ztq3sJx9iq$Re`-EEQU0KE$sdyqayzp6H-7x+oGKZ_6;hQ_Y|p&y z7o`N7g@ z8Yl1HKL;mFo4BdxljF1}KbfMR6nNdLyPnEap1MqBdI?{g$L58$P8+wftLX5R70)7n`#pwItnbma$w{%`M(`wpsu2rJ60rdGCc> z+~lm)viMYM`=uXwK_$`#_UtRZMO=2-IV)l2vc~)doyPvg-RmxtACQ#v{7}5$&isV+ zPws~n?@yNGy#H1=vTI?;CAl9~9#VgqJ+7`4y~R+Wyj0U+){?lm9r6mtf0gl_VmUW^ z%eje%?jM%^eLuUg#ybXaQM{yQy&8UgiQ`HQ+=iTpjfd0iJ@ ssyFi&dF4%9dEry;pNN)Q>$jg_dr3r;PHA*CFc&d+y85}Sb4q9e0J812W&i*H literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/jasmine-medic.js b/plugins/cordova-plugin-test-framework/www/assets/jasmine-medic.js new file mode 100644 index 0000000..4194f3a --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/jasmine-medic.js @@ -0,0 +1,123 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* global device */ + +jasmineRequire.medic = function(j$) { + j$.MedicReporter = jasmineRequire.MedicReporter(j$); +}; + +jasmineRequire.MedicReporter = function(j$) { + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + var platformMap = { + 'ipod touch':'ios', + 'iphone':'ios' + }; + + function MedicReporter(options) { + var logoptions = options.log || { logurl: 'http://127.0.0.1:5984/' }, // TODO: http://localhost:6800 + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0; + + + var serverurl = logoptions.logurl; + + this.initialize = function() { + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + this.suiteStarted = function(result) { + }; + + this.suiteDone = function(result) { + + }; + + this.specStarted = function(result) { + // Start timing this spec + }; + + this.specDone = function(result) { + if (result.status != "disabled") { + specsExecuted++; + } + if (result.status == "failed") { + failureCount++; + results.push(result); + } + if (result.status == "pending") { + pendingSpecCount++; + } + }; + + var buildResults = function(){ + var json ={specs:specsExecuted, failures:failureCount, results: results}; + return json; + }; + + this.jasmineDone = function() { + var p = 'Desktop'; + var devmodel='none'; + var version = cordova.version; + if(typeof device != 'undefined') { + p = device.platform.toLowerCase(); + devmodel=device.model || device.name; + version = device.version.toLowerCase(); + } + + this.postTests({ + mobilespec:buildResults(), + platform:(platformMap.hasOwnProperty(p) ? platformMap[p] : p), + version:version, + sha: options.sha, + timestamp:Math.round(Math.floor((new Date()).getTime() / 1000)), + model:devmodel + }); + + }; + + this.postTests = function(json) { + console.log('posting tests'); + + var xhr = new XMLHttpRequest(); + var doc_id = [options.sha, json.version, json.model].map(encodeURIComponent).join('__'); + var doc_url = serverurl + '/mobilespec_results/' + doc_id; + xhr.open("PUT", doc_url, true); + xhr.setRequestHeader("Content-Type","application/json"); + xhr.send(JSON.stringify(json)); + }; + return this; + } + + return MedicReporter; +}; diff --git a/plugins/cordova-plugin-test-framework/www/assets/main-bootstrap.js b/plugins/cordova-plugin-test-framework/www/assets/main-bootstrap.js new file mode 100644 index 0000000..58624b7 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/main-bootstrap.js @@ -0,0 +1,26 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +document.addEventListener("deviceready", function() { + 'use strict'; + + cordova.require('cordova-plugin-test-framework.main').init(); +}); diff --git a/plugins/cordova-plugin-test-framework/www/assets/main.css b/plugins/cordova-plugin-test-framework/www/assets/main.css new file mode 100644 index 0000000..9223dbd --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/main.css @@ -0,0 +1,148 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +*, *:before, *:after { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +html, body { + height: 100%; + width: 100%; + margin: 0; + padding: 0; +} + +#title { + position: fixed; + height: 30px; + width: 100%; + top: 0; + z-index: 1000; + + background-color: #75B2F0; + font-size: 25px; + text-align: center; + font-weight: bold; + white-space: nowrap; +} + +#middle { + position: absolute; + top: 30px; + bottom: 20px; + padding-bottom: 40%; + width: 100%; + overflow-y: auto; + overflow-x: auto; +} + +#log { + position: fixed; + height: 20px; + width: 100%; + bottom: 0; + z-index: 1000; + border-top: 2px solid #777; + transition: 0.25s ease; +} + +body.expanded-log #middle { + margin-bottom: 40%; +} + +body.expanded-log #log { + height: 40%; +} + +#log--title { + position: absolute; + top: 0; + height: 20px; + width: 100%; + background-color: #93AAC2; +} + +#log--content { + position: absolute; + top: 20px; + bottom: 0; + width: 100%; + overflow-x: none; + overflow-y: auto; + background-color: white; +} + +.log--content--line { + border-bottom: 1px solid #ccc; + white-space: pre; +} + +.log--content--line--log { + background-color: white; +} + +.log--content--line--warn { + background-color: #FCFFA6; +} + +.log--content--line--error { + background-color: #FFA6A6; +} + +#info{ + background:#ffa; + border: 1px solid #ffd324; + -webkit-border-radius: 5px; + border-radius: 5px; + clear:both; + margin:15px 6px 0; + min-width:295px; + max-width:97%; + padding:4px 0px 2px 10px; + word-wrap:break-word; + margin-bottom:10px; + display:inline-block; + min-height: 160px; + max-height: 300px; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +#test-enablers-container { + margin: 10px 5px; +} + +#test-expander { + text-decoration: underline; +} + +#test-list { + display: none; +} + +#test-list.expanded { + display: inherit; +} + +#test-list label { + display: block; +} diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/.gitignore b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/.gitignore new file mode 100755 index 0000000..f678651 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/.gitignore @@ -0,0 +1,6 @@ +node_modules +npm-debug.log +tmp +.DS_Store +src/ +.tern-port diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/Gruntfile.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/Gruntfile.js new file mode 100755 index 0000000..1952688 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/Gruntfile.js @@ -0,0 +1,277 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/*global module:false, require:false, process:false*/ + +var path = require('path'), + os = require('os'), + chromiumSrc = process.env.CHROMIUM_SRC || ""; + + +module.exports = function(grunt) { + 'use strict'; + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + + stylus: { + options: { + paths: grunt.file.expand(__dirname + '/node_modules/topcoat-*/src/') + /* FIXME: Utils is the last needing to be moved out of mixins + * folder + */ + .concat(grunt.file.expand(__dirname + '/node_modules/topcoat-utils/src/mixins/')), + compress: false + }, + + mobilelight: { + options: { + import: ['theme-topcoat-mobile-light', 'utils'] + }, + + files: [{ + src: 'node_modules/topcoat-*/src/**/*.styl', + dest: 'css/topcoat-mobile-light.css' + }] + }, + + mobiledark: { + options: { + import: ['theme-topcoat-mobile-dark', 'utils'] + }, + + files: [{ + src: 'node_modules/topcoat-*/src/**/*.styl', + dest: 'css/topcoat-mobile-dark.css' + }] + }, + + desktoplight: { + options: { + import: ['theme-topcoat-desktop-light', 'utils'] + }, + files: [{ + src: [ + 'node_modules/topcoat-*/src/**/*.styl', + '!node_modules/topcoat-navigation-bar/src/*.styl', + '!node_modules/topcoat-list/src/*.styl' + ], + dest: 'css/topcoat-desktop-light.css' + }] + }, + + desktopdark: { + options: { + import: ['theme-topcoat-desktop-dark', 'utils'] + }, + + files: [{ + src: [ + 'node_modules/topcoat-*/src/**/*.styl', + '!node_modules/topcoat-navigation-bar/src/*.styl', + '!node_modules/topcoat-list/src/*.styl' + ], + dest: 'css/topcoat-desktop-dark.css' + }] + } + }, + + topdoc: { + usageguides: { + options: { + source: 'css', + destination: 'demo', + template: 'node_modules/topdoc-theme/', + templateData: { + "title": "Topcoat", + "subtitle": "CSS for clean and fast web apps", + "download": { + "url": "https://github.com/topcoat/topcoat/archive/v0.7.0.zip", + "label": "Download" + }, + "homeURL": "http://topcoat.io", + "siteNav": [ + { + "url": "http://topcoat.io/topcoat", + "text": "Demo" + }, + { + "url": "http://bench.topcoat.io/", + "text": "Benchmarks" + }, + { + "url": "http://topcoat.io/blog", + "text": "Blog" + } + ] + } + } + } + }, + + autoprefixer: { + dist: { + options: { + /* + * Add target browsers here + * https://github.com/ai/autoprefixer#browsers + * browsers: ['android 4'] + */ + }, + files: [{ + src: 'css/topcoat-desktop-dark.css', + dest: 'css/topcoat-desktop-dark.css' + }, + { + src: 'css/topcoat-desktop-light.css', + dest: 'css/topcoat-desktop-light.css' + }, + { + src: 'css/topcoat-mobile-dark.css', + dest: 'css/topcoat-mobile-dark.css' + }, + { + src: 'css/topcoat-mobile-light.css', + dest: 'css/topcoat-mobile-light.css' + }] + } + + }, + + cssmin: { + minify: { + expand: true, + cwd: 'css', + src: ['*.css', '!*.min.css'], + dest: 'css', + ext: '.min.css' + } + }, + + htmlmin: { + telemetry: { + options: { + removeComments: true, + collapseWhitespace: true + }, + files: [{ + expand: true, + src: ['dev/test/**/topcoat/*.html'], + dest: '', + ext: '.test.html', + }], + }, + }, + + clean: { + release: ['css'] + }, + + copy: { + release: { + files: [{ + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/font/**', + dest: 'font' + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/img/*', + dest: 'img' + }] + }, + + telemetry: { + files: [{ + expand: true, + cwd: 'dev/test/perf/telemetry/perf/', + src: ['**'], + dest: path.join(chromiumSrc, 'tools/perf/') + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/font/**', + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/font') + }, { + expand: true, + flatten: true, + src: 'node_modules/topcoat-theme/img/*', + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/img') + }, { + src: ['css/**'], + dest: path.join(chromiumSrc, 'tools/perf/page_sets/topcoat/release/') + }] + } + }, + + jshint: { + options: { + curly: true, + eqeqeq: true, + immed: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + unused: true, + boss: true, + eqnull: true, + browser: true, + globals: { + jQuery: true + } + }, + gruntfile: { + src: 'Gruntfile.js' + }, + lib_test: { + src: ['dev/lib/**/*.js', 'dev/test/**/*.js'] + } + }, + + watch: { + files: ['src/**/*.styl'], + tasks: ['compile'] + } + + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-jade'); + grunt.loadNpmTasks('grunt-contrib-stylus'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-exec'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-topdoc'); + grunt.loadNpmTasks('grunt-contrib-cssmin'); + grunt.loadNpmTasks('grunt-contrib-htmlmin'); + grunt.loadNpmTasks('grunt-autoprefixer'); + + //Load local tasks + grunt.loadTasks('dev/tasks'); + + // Default task. + grunt.registerTask('default', ['clean', 'stylus', 'autoprefixer', 'cssmin', 'topdoc', 'copy:release']); + grunt.registerTask('release', ['default', 'clean:src']); + grunt.registerTask('compile', ['topcoat:compile', 'topdoc', 'copy:release']); + + grunt.registerTask('telemetry', '', function(platform, theme) { + if (chromiumSrc === "") grunt.fail.warn("Set CHROMIUM_SRC to point to the correct location\n"); + grunt.task.run('check_chromium_src', 'perf:'.concat(platform || 'mobile').concat(':').concat(theme || 'light'), 'htmlmin:telemetry', 'copy:telemetry'); + }); +}; diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/LICENSE b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/LICENSE new file mode 100755 index 0000000..242fd8a --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/LICENSE @@ -0,0 +1,203 @@ +Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/NOTICE b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/NOTICE new file mode 100755 index 0000000..3c8ddfa --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/NOTICE @@ -0,0 +1,193 @@ +Topcoat is licensed under the Apache license version 2.0, January 2004 (see LICENSE file). + +Topcoat uses the following third party libraries that may have licenses +differing from that of Topcoat itself. You can find the libraries and their +respective licenses below. + + - Source Code Pro ./src/font/SourceCodePro + + https://github.com/adobe/source-code-pro + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is available with a FAQ at: http://scripts.sil.org/OFL + +- Source Sans Pro ./src/font/SourceSansPro + + https://github.com/adobe/source-sans-pro + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is available with a FAQ at: http://scripts.sil.org/OFL + +The following frameworks and libraries are provided just for testing and benchmarking and, as provided, should not be included as part of Topcoat output. + + - Bootstrap - ./test/third-party/bootstrap + + https://github.com/twitter/bootstrap + + Copyright 2012 Twitter, Inc + Licensed under the Apache License v2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + - jQuery - ./test/third-party/jquery-1.8.2.js + + https://github.com/jquery/jquery + + Copyright 2011, John Resig + Dual licensed under the MIT or GPL Version 2 licenses. + http://jquery.org/license + + Includes Sizzle.js + http://sizzlejs.com/ + Copyright 2011, The Dojo Foundation + Released under the MIT, BSD, and GPL Licenses. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + - Modernizr - ./test/third-party/modernizr + + https://github.com/Modernizr/Modernizr + + Modernizr is available under the MIT license + + Copyright (c) 2009–2011 + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + - Benchmark.js - ./test/third-party/benchmarkjs + + https://github.com/alexanderbeletsky/benchmark-js + + Copyright 2010-2012 Mathias Bynens + Based on JSLitmus.js, copyright Robert Kieffer + Modified by John-David Dalton + Available under MIT license + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - normalize.css - ./test/third-party/normalize + + Copyright (c) Nicolas Gallagher and Jonathan Neal + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - Foundation - ./test/third-party/foundation + + Copyright (c) 2012 Mark Hayes + + MIT License + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - ua-parser ./test/third-party/ua-parser + + https://github.com/faisalman/ua-parser-js + + Copyright © 2012 Faisalman + Dual licensed under GPLv2 & MIT + Copyright © 2012 Faisalman + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + - HTML5 boilerplate + + https://github.com/h5bp/html5-boilerplate + + Copyright (c) HTML5 Boilerplate + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + - classList - ./test/third-party/classlist + + http://purl.eligrey.com/github/classList.js/blob/master/classList.js + + This software is dedicated to the public domain. No warranty is expressed or implied. + Use this software at your own risk. + + - fastclick - ./test/third-party/fastclick + + https://github.com/ftlabs/fastclick + + Copyright (C) 2012 The Financial Times Ltd. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/README.md b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/README.md new file mode 100755 index 0000000..a89dad2 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/README.md @@ -0,0 +1,89 @@ +# Topcoat + +CSS for clean and fast web apps + +--- + +## Usage + +* [Download Topcoat](https://github.com/topcoat/topcoat/archive/0.7.0.zip) + +* Open index.html to view the usage guides. +* Copy your desired theme CSS from the `css/` folder into your project +* Copy the `img/` and `font/` folders into your project ( Feel free to only + copy the images and font weights you intend to use ) +* Link the CSS into your page + +```css + +``` + +_*Alternatively incorporate the css into your build process if you are so +inclined._ + +--- + +## Contributing + +Start by checking out our [Backlog](http://huboard.com/topcoat/topcoat/backlog). (Pls file issues against this repo.) + +* [Fill out the CLA here](http://topcoat.io/dev/topcoat-cla.html) +* [fork](https://help.github.com/articles/fork-a-repo) the repo +* Create a branch + + git checkout -b my_branch + +* Add your changes following the [coding guidelines](https://github.com/topcoat/topcoat/wiki/Coding-Guidelines) +* Commit your changes + + git commit -am "Added some awesome stuff" + +* Push your branch + + git push origin my_branch + +* make a [pull request](https://help.github.com/articles/using-pull-requests) + +For the details see our [Engineering Practices](https://github.com/topcoat/topcoat/wiki/Engineering-Practices). + +### Testing + +For performance tests, see [dev/test/perf/telemetry/](https://github.com/topcoat/topcoat/tree/master/dev/test/perf/telemetry). + +### Building + +Topcoat uses [Grunt](http://gruntjs.com/) to build + +* Open the terminal from the topcoat directory + + cd topcoat + +* Install [npm](http://nodejs.org/download/) +_*comes packaged with node._ +* Install its command line interface (CLI) globally + + npm install -g grunt-cli + +* Install dependencies with npm + + npm install + + +_*Topcoat uses Grunt 0.4.0. You might want to [read](http://gruntjs.com/getting-started) more on their website if you haven't upgraded since a lot has changed._ + +* Type `grunt` in the command line to build the css. +* The results will be built into the release folder. +* Alternatively type `grunt watch` to have the build run automatically when you make changes to +source files. + +--- + +## Release notes +See [Release Notes](https://github.com/topcoat/topcoat/releases/). + +--- + +## License + +[Apache license](https://raw.github.com/topcoat/topcoat/master/LICENSE) + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/contributors.txt b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/contributors.txt new file mode 100755 index 0000000..e4cd8b7 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/contributors.txt @@ -0,0 +1,7 @@ +# Github accounts of the people who signed the TopCoat CLA (http://topcoat.io/dev/topcoat-cla.html). +# CLA needs to be signed before accepting pull requests. +@yourpalsonja +@noformnocontent +@jrowny +@aparticulate +@jlembeck diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-dark.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-dark.css new file mode 100755 index 0000000..e590e11 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-dark.css @@ -0,0 +1,3450 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
        +
        + +
        +
        + +
        +
        + +
        +
        + examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
        +
        + +
        +
        + +
        +
        + +
        +
        + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
        +
        + + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 1rem; +} + +input[type="checkbox"] { + height: 1rem; + width: 1rem; + margin-top: 0; + margin-right: -1rem; + margin-bottom: -1rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 1rem; +} + +.topcoat-checkbox__checkmark:before { + width: 1rem; + height: 1rem; + background: #595b5b; + border: 1px solid #303233; + border-radius: 3px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-checkbox__checkmark { + width: 1rem; + height: 1rem; +} + +.topcoat-checkbox__checkmark:after { + top: 2px; + left: 1px; + opacity: 0; + width: 14px; + height: 4px; + background: transparent; + border: 7px solid #fff; + border-width: 3px; + border-top: none; + border-right: none; + border-radius: 1px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.25rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: baseline; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 4px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-icon-button:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 1.688rem; + height: 1.688rem; + line-height: 1.688rem; +} + +.topcoat-icon-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 0.81406rem; + height: 0.81406rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 1.06344rem; + height: 1.06344rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
        +
        + + +
        +
        + + +
        +
        + + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.063rem; + width: 1.063rem; + margin-top: 0; + margin-right: -1.063rem; + margin-bottom: -1.063rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #c6c8c8; + line-height: 1.063rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.063rem; + height: 1.063rem; + background: #595b5b; + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.063rem; + height: 1.063rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.313rem; + height: 0.313rem; + background: #fff; + border: 1px solid rgba(255,255,255,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 0.313rem; + left: 0.313rem; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 4px; + border: 1px solid #303233; + background-color: #424546; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-moz-range-track { + border-radius: 4px; + border: 1px solid #303233; + background-color: #424546; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 4px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range::-moz-range-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 4px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 1.313rem; + font-size: 12px; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + padding: 0 0 0 1.3rem; + border-radius: 15px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 12px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 1.688rem; + font-size: 0.875rem; + font-weight: 400; + padding: 0 0 0 1.8rem; + border-radius: 25px; + background-position: 1.2em center; + background-size: 0.875rem; +} + +.topcoat-search-input--large:disabled { + color: #fff; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
        +
        + +
        +
        + + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 12px; + padding: 0 0.563rem; + border-radius: 4px; + border: 1px solid #303233; + overflow: hidden; + width: 3.5rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 2.6rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #5dc1ff; + background-color: #404141; + right: 0.8rem; + padding-left: 0.75rem; +} + +.topcoat-switch__toggle { + line-height: 1.313rem; + height: 1.313rem; + width: 1rem; + border-radius: 4px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #595b5b; + border: 1px solid #303233; + margin-left: -0.6rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #727373; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #404141; + left: 0.8rem; + padding-left: 0.6rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 1.85rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
        + + + +
        + examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 0.563rem; + height: 1.313rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border-top: 1px solid #303233; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #5dc1ff; + background-color: #404141; + box-shadow: inset 0 0 2px #313231; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
        +
        + +
        +
        + + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 1.313rem; + font-size: 12px; + letter-spacing: 0; + padding: 0 0.563rem; + border: 1px solid #303233; + border-radius: 4px; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
        +
        + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 1.688rem; + font-size: 0.875rem; +} + +.topcoat-text-input--large:disabled { + color: #fff; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 1rem; + font-size: 1rem; + font-weight: 400; + border-radius: 4px; + line-height: 1.313rem; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + letter-spacing: 0; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 1.3rem; + line-height: 1.688rem; +} + +.topcoat-textarea--large:disabled { + color: #fff; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #fff; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #4b4d4e; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_light.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-dark.min.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-dark.min.css new file mode 100755 index 0000000..1623395 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-dark.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:1rem}input[type=checkbox]{height:1rem;width:1rem;margin-top:0;margin-right:-1rem;margin-bottom:-1rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:1rem}.topcoat-checkbox__checkmark:before{width:1rem;height:1rem;background:#595b5b;border:1px solid #303233;border-radius:3px;box-shadow:inset 0 1px #727373}.topcoat-checkbox__checkmark{width:1rem;height:1rem}.topcoat-checkbox__checkmark:after{top:2px;left:1px;opacity:0;width:14px;height:4px;background:transparent;border:7px solid #fff;border-width:3px;border-top:0;border-right:0;border-radius:1px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .25rem;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:baseline;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:4px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#646666}.topcoat-icon-button:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:1.688rem;height:1.688rem;line-height:1.688rem}.topcoat-icon-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:.81406rem;height:.81406rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:1.06344rem;height:1.06344rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.063rem;width:1.063rem;margin-top:0;margin-right:-1.063rem;margin-bottom:-1.063rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#c6c8c8;line-height:1.063rem}.topcoat-radio-button__checkmark:before{width:1.063rem;height:1.063rem;background:#595b5b;border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-radio-button__checkmark{position:relative;width:1.063rem;height:1.063rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.313rem;height:.313rem;background:#fff;border:1px solid rgba(255,255,255,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:.313rem;left:.313rem}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:4px;border:1px solid #303233;background-color:#424546;height:.5rem;border-radius:15px}.topcoat-range::-moz-range-track{border-radius:4px;border:1px solid #303233;background-color:#424546;height:.5rem;border-radius:15px}.topcoat-range::-webkit-slider-thumb{height:1.313rem;width:.75rem;background-color:#595b5b;border:1px solid #303233;border-radius:4px;box-shadow:inset 0 1px #727373}.topcoat-range::-moz-range-thumb{height:1.313rem;width:.75rem;background-color:#595b5b;border:1px solid #303233;border-radius:4px;box-shadow:inset 0 1px #727373}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:1.313rem;font-size:12px;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;padding:0 0 0 1.3rem;border-radius:15px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:12px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input:disabled::-moz-placeholder{color:#fff}.topcoat-search-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-search-input--large{line-height:1.688rem;font-size:.875rem;font-weight:400;padding:0 0 0 1.8rem;border-radius:25px;background-position:1.2em center;background-size:.875rem}.topcoat-search-input--large:disabled{color:#fff}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#fff}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:12px;padding:0 .563rem;border-radius:4px;border:1px solid #303233;overflow:hidden;width:3.5rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:2.6rem}.topcoat-switch__toggle:before{content:'ON';color:#5dc1ff;background-color:#404141;right:.8rem;padding-left:.75rem}.topcoat-switch__toggle{line-height:1.313rem;height:1.313rem;width:1rem;border-radius:4px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#595b5b;border:1px solid #303233;margin-left:-.6rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #727373;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#404141;left:.8rem;padding-left:.6rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:1.85rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 .563rem;height:1.313rem;line-height:1.313rem;letter-spacing:0;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border-top:1px solid #303233}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#5dc1ff;background-color:#404141;box-shadow:inset 0 0 2px #313231}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:1.313rem;font-size:12px;letter-spacing:0;padding:0 .563rem;border:1px solid #303233;border-radius:4px;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input:disabled::-moz-placeholder{color:#fff}.topcoat-text-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:1.688rem;font-size:.875rem}.topcoat-text-input--large:disabled{color:#fff}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:1rem;font-size:1rem;font-weight:400;border-radius:4px;line-height:1.313rem;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;letter-spacing:0}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea:disabled::-moz-placeholder{color:#fff}.topcoat-textarea:disabled:-ms-input-placeholder{color:#fff}.topcoat-textarea--large{font-size:1.3rem;line-height:1.688rem}.topcoat-textarea--large:disabled{color:#fff}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea--large:disabled::-moz-placeholder{color:#fff}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#fff}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#4b4d4e;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_light.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-light.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-light.css new file mode 100755 index 0000000..0da42ea --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-light.css @@ -0,0 +1,3450 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
        +
        + +
        +
        + +
        +
        + +
        +
        + examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
        +
        + +
        +
        + +
        +
        + +
        +
        + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 0.563rem; + font-size: 12px; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 0.875rem; + font-weight: 600; + line-height: 1.688rem; + padding: 0 0.875rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
        +
        + + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 1rem; +} + +input[type="checkbox"] { + height: 1rem; + width: 1rem; + margin-top: 0; + margin-right: -1rem; + margin-bottom: -1rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 1rem; +} + +.topcoat-checkbox__checkmark:before { + width: 1rem; + height: 1rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 3px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-checkbox__checkmark { + width: 1rem; + height: 1rem; +} + +.topcoat-checkbox__checkmark:after { + top: 2px; + left: 1px; + opacity: 0; + width: 14px; + height: 4px; + background: transparent; + border: 7px solid #666; + border-width: 3px; + border-top: none; + border-right: none; + border-radius: 1px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.25rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 4px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-icon-button:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 1.688rem; + height: 1.688rem; + line-height: 1.688rem; +} + +.topcoat-icon-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 0.81406rem; + height: 0.81406rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 1.06344rem; + height: 1.06344rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
        +
        + + +
        +
        + + +
        +
        + + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.063rem; + width: 1.063rem; + margin-top: 0; + margin-right: -1.063rem; + margin-bottom: -1.063rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #454545; + line-height: 1.063rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.063rem; + height: 1.063rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.063rem; + height: 1.063rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.313rem; + height: 0.313rem; + background: #666; + border: 1px solid rgba(0,0,0,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 0.313rem; + left: 0.313rem; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 4px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-moz-range-track { + border-radius: 4px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 0.5rem; + border-radius: 15px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 4px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range::-moz-range-thumb { + height: 1.313rem; + width: 0.75rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 4px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 1.313rem; + font-size: 12px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + padding: 0 0 0 1.3rem; + border-radius: 15px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 12px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 1.688rem; + font-size: 0.875rem; + font-weight: 400; + padding: 0 0 0 1.8rem; + border-radius: 25px; + background-position: 1.2em center; + background-size: 0.875rem; +} + +.topcoat-search-input--large:disabled { + color: #000; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
        +
        + +
        +
        + + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 12px; + padding: 0 0.563rem; + border-radius: 4px; + border: 1px solid #a5a8a8; + overflow: hidden; + width: 3.5rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 2.6rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #0083e8; + background-color: #e0f0fa; + right: 0.8rem; + padding-left: 0.75rem; +} + +.topcoat-switch__toggle { + line-height: 1.313rem; + height: 1.313rem; + width: 1rem; + border-radius: 4px; + color: #454545; + text-shadow: 0 1px #fff; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + margin-left: -0.6rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #fff; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #d3d7d7; + left: 0.8rem; + padding-left: 0.6rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 1.85rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
        + + + +
        + examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 0.563rem; + height: 1.313rem; + line-height: 1.313rem; + letter-spacing: 0; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border-top: 1px solid #a5a8a8; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #0083e8; + background-color: #e0f0fa; + box-shadow: inset 0 0 2px #c0ced8; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
        +
        + +
        +
        + + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 1.313rem; + font-size: 12px; + letter-spacing: 0; + padding: 0 0.563rem; + border: 1px solid #a5a8a8; + border-radius: 4px; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
        +
        + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 1.688rem; + font-size: 0.875rem; +} + +.topcoat-text-input--large:disabled { + color: #000; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 1rem; + font-size: 1rem; + font-weight: 400; + border-radius: 4px; + line-height: 1.313rem; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + letter-spacing: 0; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 1.3rem; + line-height: 1.688rem; +} + +.topcoat-textarea--large:disabled { + color: #000; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #000; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #dfe2e2; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_dark.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-light.min.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-light.min.css new file mode 100755 index 0000000..e682662 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-desktop-light.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 .563rem;font-size:12px;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:.875rem;font-weight:600;line-height:1.688rem;padding:0 .875rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:1rem}input[type=checkbox]{height:1rem;width:1rem;margin-top:0;margin-right:-1rem;margin-bottom:-1rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:1rem}.topcoat-checkbox__checkmark:before{width:1rem;height:1rem;background:#e5e9e8;border:1px solid #a5a8a8;border-radius:3px;box-shadow:inset 0 1px #fff}.topcoat-checkbox__checkmark{width:1rem;height:1rem}.topcoat-checkbox__checkmark:after{top:2px;left:1px;opacity:0;width:14px;height:4px;background:transparent;border:7px solid #666;border-width:3px;border-top:0;border-right:0;border-radius:1px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .25rem;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:baseline;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:4px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#edf1f1}.topcoat-icon-button:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:1.688rem;height:1.688rem;line-height:1.688rem}.topcoat-icon-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:.81406rem;height:.81406rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:1.06344rem;height:1.06344rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.063rem;width:1.063rem;margin-top:0;margin-right:-1.063rem;margin-bottom:-1.063rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#454545;line-height:1.063rem}.topcoat-radio-button__checkmark:before{width:1.063rem;height:1.063rem;background:#e5e9e8;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-radio-button__checkmark{position:relative;width:1.063rem;height:1.063rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.313rem;height:.313rem;background:#666;border:1px solid rgba(0,0,0,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:.313rem;left:.313rem}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:4px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:.5rem;border-radius:15px}.topcoat-range::-moz-range-track{border-radius:4px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:.5rem;border-radius:15px}.topcoat-range::-webkit-slider-thumb{height:1.313rem;width:.75rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:4px;box-shadow:inset 0 1px #fff}.topcoat-range::-moz-range-thumb{height:1.313rem;width:.75rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:4px;box-shadow:inset 0 1px #fff}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:1.313rem;font-size:12px;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;padding:0 0 0 1.3rem;border-radius:15px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:12px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input:disabled::-moz-placeholder{color:#000}.topcoat-search-input:disabled:-ms-input-placeholder{color:#000}.topcoat-search-input--large{line-height:1.688rem;font-size:.875rem;font-weight:400;padding:0 0 0 1.8rem;border-radius:25px;background-position:1.2em center;background-size:.875rem}.topcoat-search-input--large:disabled{color:#000}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input--large:disabled::-moz-placeholder{color:#000}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#000}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:12px;padding:0 .563rem;border-radius:4px;border:1px solid #a5a8a8;overflow:hidden;width:3.5rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:2.6rem}.topcoat-switch__toggle:before{content:'ON';color:#0083e8;background-color:#e0f0fa;right:.8rem;padding-left:.75rem}.topcoat-switch__toggle{line-height:1.313rem;height:1.313rem;width:1rem;border-radius:4px;color:#454545;text-shadow:0 1px #fff;background-color:#e5e9e8;border:1px solid #a5a8a8;margin-left:-.6rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #fff;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#d3d7d7;left:.8rem;padding-left:.6rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:1.85rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 .563rem;height:1.313rem;line-height:1.313rem;letter-spacing:0;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border-top:1px solid #a5a8a8}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#0083e8;background-color:#e0f0fa;box-shadow:inset 0 0 2px #c0ced8}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:1.313rem;font-size:12px;letter-spacing:0;padding:0 .563rem;border:1px solid #a5a8a8;border-radius:4px;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input:disabled::-moz-placeholder{color:#000}.topcoat-text-input:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:1.688rem;font-size:.875rem}.topcoat-text-input--large:disabled{color:#000}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input--large:disabled::-moz-placeholder{color:#000}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:1rem;font-size:1rem;font-weight:400;border-radius:4px;line-height:1.313rem;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;letter-spacing:0}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea:disabled::-moz-placeholder{color:#000}.topcoat-textarea:disabled:-ms-input-placeholder{color:#000}.topcoat-textarea--large{font-size:1.3rem;line-height:1.688rem}.topcoat-textarea--large:disabled{color:#000}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea--large:disabled::-moz-placeholder{color:#000}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#000}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#dfe2e2;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_dark.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-dark.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-dark.css new file mode 100755 index 0000000..0d3aa5f --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-dark.css @@ -0,0 +1,3700 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
        +
        + +
        +
        + +
        +
        + +
        +
        + examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
        +
        + +
        +
        + +
        +
        + +
        +
        + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #1976c3; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
        +
        + + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 2rem; +} + +input[type="checkbox"] { + height: 2rem; + width: 2rem; + margin-top: 0; + margin-right: -2rem; + margin-bottom: -2rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 2rem; +} + +.topcoat-checkbox__checkmark:before { + width: 2rem; + height: 2rem; + background: #595b5b; + border: 1px solid #303233; + border-radius: 3px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-checkbox__checkmark { + width: 2rem; + height: 2rem; +} + +.topcoat-checkbox__checkmark:after { + top: 1px; + left: 2px; + opacity: 0; + width: 28px; + height: 11px; + background: transparent; + border: 7px solid #fff; + border-width: 7px; + border-top: none; + border-right: none; + border-radius: 2px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.75rem; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: baseline; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border: 1px solid #303233; + border-radius: 6px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #646666; +} + +.topcoat-icon-button:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 -1px rgba(0,0,0,0.69); + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #404141; + border: 1px solid #303233; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 4.375rem; + height: 4.375rem; + line-height: 4.375rem; +} + +.topcoat-icon-button--large:active { + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 1.62rem; + height: 1.62rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 2.499999998125rem; + height: 2.499999998125rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list, +.topcoat-list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header, +.topcoat-list__header { + margin: 0; +} + +.list__container, +.topcoat-list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item, +.topcoat-list__item { + margin: 0; + padding: 0; +} + +/* topdoc + name: List + description: Topcoat default list skin + markup: +
        +

        Category

        +
          +
        • + Item +
        • +
        • + Item +
        • +
        • + Item +
        • +
        +
        + tags: + - mobile + - list +*/ + +.topcoat-list { + border-top: 1px solid #2f3234; + border-bottom: 1px solid #5e6061; + background-color: #444849; +} + +.topcoat-list__header { + padding: 4px 20px; + font-size: 0.9em; + font-weight: 400; + background-color: #3b3e40; + color: #868888; + text-shadow: 0 -1px 0 rgba(0,0,0,0.3); + border-top: solid 1px rgba(255,255,255,0.1); + border-bottom: solid 1px rgba(255,255,255,0.05); +} + +.topcoat-list__container { + border-top: 1px solid #2f3234; + color: #c6c8c8; +} + +.topcoat-list__item { + padding: 1.25rem; + border-top: 1px solid #5e6061; + border-bottom: 1px solid #2f3234; +} + +.topcoat-list__item:first-child { + border-top: 1px solid rgba(0,0,0,0.05); +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar, +.topcoat-navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item, +.topcoat-navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title, +.topcoat-navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* topdoc + name: Navigation Bar + description: A place where navigation goes to drink + markup: +
        +
        +

        Header

        +
        +
        + tags: + - desktop + - light + - mobile + - navigation + - bar +*/ + +.topcoat-navigation-bar { + height: 4.375rem; + padding-left: 1rem; + padding-right: 1rem; + background: #595b5b; + color: #fff; + box-shadow: inset 0 -1px #333434, 0 1px rgba(0,0,0,0.15); +} + +.topcoat-navigation-bar__item { + margin: 0; + line-height: 4.375rem; + vertical-align: top; +} + +.topcoat-navigation-bar__title { + font-size: 1.3rem; + font-weight: 400; + color: #fff; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
        +
        + + +
        +
        + + +
        +
        + + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.875rem; + width: 1.875rem; + margin-top: 0; + margin-right: -1.875rem; + margin-bottom: -1.875rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #c6c8c8; + line-height: 1.875rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.875rem; + height: 1.875rem; + background: #595b5b; + border: 1px solid #303233; + box-shadow: inset 0 1px #727373; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.875rem; + height: 1.875rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.875rem; + height: 0.875rem; + background: #fff; + border: 1px solid rgba(255,255,255,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 7px; + left: 7px; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 6px; + border: 1px solid #303233; + background-color: #424546; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-moz-range-track { + border-radius: 6px; + border: 1px solid #303233; + background-color: #424546; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 3rem; + width: 2rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 6px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range::-moz-range-thumb { + height: 3rem; + width: 2rem; + background-color: #595b5b; + border: 1px solid #303233; + border-radius: 6px; + box-shadow: inset 0 1px #727373; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 3rem; + font-size: 16px; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + padding: 0 0 0 2rem; + border-radius: 30px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 16px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 4.375rem; + font-size: 1.3rem; + font-weight: 200; + padding: 0 0 0 2.9rem; + border-radius: 40px; + background-position: 1.2em center; + background-size: 1.3rem; +} + +.topcoat-search-input--large:disabled { + color: #fff; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
        +
        + +
        +
        + + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 16px; + padding: 0 1.25rem; + border-radius: 6px; + border: 1px solid #303233; + overflow: hidden; + width: 6rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 5rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #5dc1ff; + background-color: #404141; + right: 1rem; + padding-left: 1.5rem; +} + +.topcoat-switch__toggle { + line-height: 3rem; + height: 3rem; + width: 2rem; + border-radius: 6px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + background-color: #595b5b; + border: 1px solid #303233; + margin-left: -1.3rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #727373; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #404141; + left: 1rem; + padding-left: 2rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 2.7rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
        + + + +
        + examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 1.25rem; + height: 3rem; + line-height: 3rem; + letter-spacing: 1px; + color: #c6c8c8; + text-shadow: 0 -1px rgba(0,0,0,0.69); + vertical-align: top; + background-color: #595b5b; + box-shadow: inset 0 1px #727373; + border-top: 1px solid #303233; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #5dc1ff; + background-color: #404141; + box-shadow: inset 0 0 2px #313231; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
        +
        + +
        +
        + + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 3rem; + font-size: 16px; + letter-spacing: 1px; + padding: 0 1.25rem; + border: 1px solid #303233; + border-radius: 6px; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
        +
        + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 4.375rem; + font-size: 1.3rem; +} + +.topcoat-text-input--large:disabled { + color: #fff; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #fff; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 2rem; + font-size: 2.5rem; + font-weight: 200; + border-radius: 6px; + line-height: 3rem; + border: 1px solid #303233; + background-color: #404141; + box-shadow: inset 0 1px rgba(0,0,0,0.18); + color: #c6c8c8; + letter-spacing: 1px; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #646666; + color: #fff; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #fff; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 3rem; + line-height: 4.375rem; +} + +.topcoat-textarea--large:disabled { + color: #fff; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #fff; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #fff; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #4b4d4e; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_light.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-dark.min.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-dark.min.css new file mode 100755 index 0000000..2ce6f11 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-dark.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#646666}.topcoat-button:active,.topcoat-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#1976c3;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:2rem}input[type=checkbox]{height:2rem;width:2rem;margin-top:0;margin-right:-2rem;margin-bottom:-2rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:2rem}.topcoat-checkbox__checkmark:before{width:2rem;height:2rem;background:#595b5b;border:1px solid #303233;border-radius:3px;box-shadow:inset 0 1px #727373}.topcoat-checkbox__checkmark{width:2rem;height:2rem}.topcoat-checkbox__checkmark:after{top:1px;left:2px;opacity:0;width:28px;height:11px;background:transparent;border:7px solid #fff;border-width:7px;border-top:0;border-right:0;border-radius:2px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .75rem;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:baseline;background-color:#595b5b;box-shadow:inset 0 1px #727373;border:1px solid #303233;border-radius:6px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#646666}.topcoat-icon-button:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 -1px rgba(0,0,0,.69);border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#404141;border:1px solid #303233;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:4.375rem;height:4.375rem;line-height:4.375rem}.topcoat-icon-button--large:active{background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:1.62rem;height:1.62rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:2.499999998125rem;height:2.499999998125rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.list,.topcoat-list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header,.topcoat-list__header{margin:0}.list__container,.topcoat-list__container{padding:0;margin:0;list-style-type:none}.list__item,.topcoat-list__item{margin:0;padding:0}.topcoat-list{border-top:1px solid #2f3234;border-bottom:1px solid #5e6061;background-color:#444849}.topcoat-list__header{padding:4px 20px;font-size:.9em;font-weight:400;background-color:#3b3e40;color:#868888;text-shadow:0 -1px 0 rgba(0,0,0,.3);border-top:solid 1px rgba(255,255,255,.1);border-bottom:solid 1px rgba(255,255,255,.05)}.topcoat-list__container{border-top:1px solid #2f3234;color:#c6c8c8}.topcoat-list__item{padding:1.25rem;border-top:1px solid #5e6061;border-bottom:1px solid #2f3234}.topcoat-list__item:first-child{border-top:1px solid rgba(0,0,0,.05)}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.navigation-bar,.topcoat-navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item,.topcoat-navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title,.topcoat-navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.topcoat-navigation-bar{height:4.375rem;padding-left:1rem;padding-right:1rem;background:#595b5b;color:#fff;box-shadow:inset 0 -1px #333434,0 1px rgba(0,0,0,.15)}.topcoat-navigation-bar__item{margin:0;line-height:4.375rem;vertical-align:top}.topcoat-navigation-bar__title{font-size:1.3rem;font-weight:400;color:#fff}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.875rem;width:1.875rem;margin-top:0;margin-right:-1.875rem;margin-bottom:-1.875rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#c6c8c8;line-height:1.875rem}.topcoat-radio-button__checkmark:before{width:1.875rem;height:1.875rem;background:#595b5b;border:1px solid #303233;box-shadow:inset 0 1px #727373}.topcoat-radio-button__checkmark{position:relative;width:1.875rem;height:1.875rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.875rem;height:.875rem;background:#fff;border:1px solid rgba(255,255,255,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:7px;left:7px}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:6px;border:1px solid #303233;background-color:#424546;height:1rem;border-radius:30px}.topcoat-range::-moz-range-track{border-radius:6px;border:1px solid #303233;background-color:#424546;height:1rem;border-radius:30px}.topcoat-range::-webkit-slider-thumb{height:3rem;width:2rem;background-color:#595b5b;border:1px solid #303233;border-radius:6px;box-shadow:inset 0 1px #727373}.topcoat-range::-moz-range-thumb{height:3rem;width:2rem;background-color:#595b5b;border:1px solid #303233;border-radius:6px;box-shadow:inset 0 1px #727373}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:3rem;font-size:16px;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;padding:0 0 0 2rem;border-radius:30px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:16px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input:disabled::-moz-placeholder{color:#fff}.topcoat-search-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-search-input--large{line-height:4.375rem;font-size:1.3rem;font-weight:200;padding:0 0 0 2.9rem;border-radius:40px;background-position:1.2em center;background-size:1.3rem}.topcoat-search-input--large:disabled{color:#fff}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-search-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#fff}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:16px;padding:0 1.25rem;border-radius:6px;border:1px solid #303233;overflow:hidden;width:6rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:5rem}.topcoat-switch__toggle:before{content:'ON';color:#5dc1ff;background-color:#404141;right:1rem;padding-left:1.5rem}.topcoat-switch__toggle{line-height:3rem;height:3rem;width:2rem;border-radius:6px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);background-color:#595b5b;border:1px solid #303233;margin-left:-1.3rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #727373;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#404141;left:1rem;padding-left:2rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:2.7rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 1.25rem;height:3rem;line-height:3rem;letter-spacing:1px;color:#c6c8c8;text-shadow:0 -1px rgba(0,0,0,.69);vertical-align:top;background-color:#595b5b;box-shadow:inset 0 1px #727373;border-top:1px solid #303233}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#5dc1ff;background-color:#404141;box-shadow:inset 0 0 2px #313231}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:3rem;font-size:16px;letter-spacing:1px;padding:0 1.25rem;border:1px solid #303233;border-radius:6px;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input:disabled::-moz-placeholder{color:#fff}.topcoat-text-input:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:4.375rem;font-size:1.3rem}.topcoat-text-input--large:disabled{color:#fff}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-text-input--large:disabled::-moz-placeholder{color:#fff}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#fff}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:2rem;font-size:2.5rem;font-weight:200;border-radius:6px;line-height:3rem;border:1px solid #303233;background-color:#404141;box-shadow:inset 0 1px rgba(0,0,0,.18);color:#c6c8c8;letter-spacing:1px}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#646666;color:#fff;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea:disabled::-moz-placeholder{color:#fff}.topcoat-textarea:disabled:-ms-input-placeholder{color:#fff}.topcoat-textarea--large{font-size:3rem;line-height:4.375rem}.topcoat-textarea--large:disabled{color:#fff}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#fff}.topcoat-textarea--large:disabled::-moz-placeholder{color:#fff}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#fff}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#4b4d4e;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_light.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-light.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-light.css new file mode 100755 index 0000000..6735055 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-light.css @@ -0,0 +1,3700 @@ +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled, +.topcoat-button-bar__button:disabled, +.topcoat-button-bar__button--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta, +.topcoat-button-bar__button, +.topcoat-button-bar__button--large { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover, +.topcoat-button-bar__button:hover, +.topcoat-button-bar__button--large:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active, +.topcoat-button-bar__button:active, +.topcoat-button-bar__button--large:active, +:checked + .topcoat-button-bar__button { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus, +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button-bar__button--large { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +.button-bar, +.topcoat-button-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-button-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-button-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button Bar + description: Component of grouped buttons + modifiers: + :disabled: Disabled state + markup: +
        +
        + +
        +
        + +
        +
        + +
        +
        + examples: + mobile button bar: http://codepen.io/Topcoat/pen/kdKyg + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar +*/ + +.topcoat-button-bar > .topcoat-button-bar__item:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +.topcoat-button-bar > .topcoat-button-bar__item:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large { + border-right: none; +} + +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button, +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large { + border-left: none; +} + +.topcoat-button-bar__button { + border-radius: inherit; +} + +.topcoat-button-bar__button:focus, +.topcoat-button-bar__button--large:focus { + z-index: 1; +} + +/* topdoc + name: Large Button Bar + description: A button bar, only larger + modifiers: + :disabled: Disabled state + markup: +
        +
        + +
        +
        + +
        +
        + +
        +
        + tags: + - desktop + - light + - dark + - mobile + - button + - group + - bar + - large +*/ + +.topcoat-button-bar__button--large { + border-radius: inherit; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-button:disabled, +.topcoat-button--quiet:disabled, +.topcoat-button--large:disabled, +.topcoat-button--large--quiet:disabled, +.topcoat-button--cta:disabled, +.topcoat-button--large--cta:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Button + description: A simple button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile button: http://codepen.io/Topcoat/pen/DpKtf + tags: + - desktop + - light + - mobile + - button +*/ + +.topcoat-button, +.topcoat-button--quiet, +.topcoat-button--large, +.topcoat-button--large--quiet, +.topcoat-button--cta, +.topcoat-button--large--cta { + padding: 0 1.25rem; + font-size: 16px; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-button:hover, +.topcoat-button--quiet:hover, +.topcoat-button--large:hover, +.topcoat-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-button:active, +.topcoat-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-button:focus, +.topcoat-button--quiet:focus, +.topcoat-button--large:focus, +.topcoat-button--large--quiet:focus, +.topcoat-button--cta:focus, +.topcoat-button--large--cta:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Button + description: A simple, yet quiet button + modifiers: + :active: Quiet button active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - quiet +*/ + +.topcoat-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-button--quiet:hover, +.topcoat-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-button--quiet:active, +.topcoat-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Button + description: A big ol button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large +*/ + +.topcoat-button--large, +.topcoat-button--large--quiet { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/* topdoc + name: Large Quiet Button + description: A large, yet quiet button + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - quiet +*/ + +.topcoat-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +/* topdoc + name: Call To Action Button + description: A CALL TO ARMS, er, ACTION! + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - call to action +*/ + +.topcoat-button--cta, +.topcoat-button--large--cta { + border: 1px solid #143250; + background-color: #288edf; + box-shadow: inset 0 1px rgba(255,255,255,0.36); + color: #fff; + font-weight: 500; + text-shadow: 0 -1px rgba(0,0,0,0.36); +} + +.topcoat-button--cta:hover, +.topcoat-button--large--cta:hover { + background-color: #509bef; +} + +.topcoat-button--cta:active, +.topcoat-button--large--cta:active { + background-color: #0380e8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Call To Action Button + description: Like call to action, but bigger + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - large + - call to action +*/ + +.topcoat-button--large--cta { + font-size: 1.3rem; + font-weight: 400; + line-height: 4.375rem; + padding: 0 1.25rem; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after { + content: ''; + position: absolute; +} + +.checkbox:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="checkbox"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.checkbox, +.topcoat-checkbox__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox__label, +.topcoat-checkbox { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.checkbox--disabled, +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.checkbox:before, +.checkbox:after, +.topcoat-checkbox__checkmark:before, +.topcoat-checkbox__checkmark:after { + content: ''; + position: absolute; +} + +.checkbox:before, +.topcoat-checkbox__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +/* topdoc + name: Checkbox + description: Default skin for Topcoat checkbox + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
        +
        + + examples: + mobile checkbox: http://codepen.io/Topcoat/pen/piHcs + tags: + - desktop + - light + - mobile + - checkbox +*/ + +.topcoat-checkbox__checkmark { + height: 2rem; +} + +input[type="checkbox"] { + height: 2rem; + width: 2rem; + margin-top: 0; + margin-right: -2rem; + margin-bottom: -2rem; + margin-left: 0; +} + +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after { + opacity: 1; +} + +.topcoat-checkbox { + line-height: 2rem; +} + +.topcoat-checkbox__checkmark:before { + width: 2rem; + height: 2rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 3px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-checkbox__checkmark { + width: 2rem; + height: 2rem; +} + +.topcoat-checkbox__checkmark:after { + top: 1px; + left: 2px; + opacity: 0; + width: 28px; + height: 11px; + background: transparent; + border: 7px solid #666; + border-width: 7px; + border-top: none; + border-right: none; + border-radius: 2px; + -webkit-transform: rotate(-50deg); + -ms-transform: rotate(-50deg); + transform: rotate(-50deg); +} + +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-icon-button:disabled, +.topcoat-icon-button--quiet:disabled, +.topcoat-icon-button--large:disabled, +.topcoat-icon-button--large--quiet:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Icon Button + description: Like button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon +*/ + +.topcoat-icon-button, +.topcoat-icon-button--quiet, +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + padding: 0 0.75rem; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border: 1px solid #a5a8a8; + border-radius: 6px; +} + +.topcoat-icon-button:hover, +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large:hover, +.topcoat-icon-button--large--quiet:hover { + background-color: #edf1f1; +} + +.topcoat-icon-button:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +.topcoat-icon-button:focus, +.topcoat-icon-button--quiet:focus, +.topcoat-icon-button--quiet:hover:focus, +.topcoat-icon-button--large:focus, +.topcoat-icon-button--large--quiet:focus, +.topcoat-icon-button--large--quiet:hover:focus { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; + outline: 0; +} + +/* topdoc + name: Quiet Icon Button + description: Like quiet button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - quiet +*/ + +.topcoat-icon-button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon-button--quiet:hover, +.topcoat-icon-button--large--quiet:hover { + text-shadow: 0 1px #fff; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-icon-button--quiet:active, +.topcoat-icon-button--large--quiet:active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Icon Button + description: Like large button, but it has an icon. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large +*/ + +.topcoat-icon-button--large, +.topcoat-icon-button--large--quiet { + width: 4.375rem; + height: 4.375rem; + line-height: 4.375rem; +} + +.topcoat-icon-button--large:active { + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} + +/* topdoc + name: Large Quiet Icon Button + description: Like large button, but it has an icon and this one is quiet. + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + markup: + + + tags: + - desktop + - light + - mobile + - button + - icon + - large + - quiet +*/ + +.topcoat-icon-button--large--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.topcoat-icon, +.topcoat-icon--large { + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + width: 1.62rem; + height: 1.62rem; + vertical-align: middle; + top: -1px; +} + +.topcoat-icon--large { + width: 2.499999998125rem; + height: 2.499999998125rem; + top: -2px; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header { + margin: 0; +} + +.list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item { + margin: 0; + padding: 0; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.list, +.topcoat-list { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.list__header, +.topcoat-list__header { + margin: 0; +} + +.list__container, +.topcoat-list__container { + padding: 0; + margin: 0; + list-style-type: none; +} + +.list__item, +.topcoat-list__item { + margin: 0; + padding: 0; +} + +/* topdoc + name: List + description: Topcoat default list skin + markup: +
        +

        Category

        +
          +
        • + Item +
        • +
        • + Item +
        • +
        • + Item +
        • +
        +
        + tags: + - mobile + - list +*/ + +.topcoat-list { + border-top: 1px solid #bcbfbf; + border-bottom: 1px solid #eff1f1; + background-color: #dfe2e2; +} + +.topcoat-list__header { + padding: 4px 20px; + font-size: 0.9em; + font-weight: 400; + background-color: #cccfcf; + color: #656565; + text-shadow: 0 1px 0 rgba(255,255,255,0.5); + border-top: 1px solid rgba(255,255,255,0.5); + border-bottom: 1px solid rgba(255,255,255,0.23); +} + +.topcoat-list__container { + border-top: 1px solid #bcbfbf; + color: #454545; +} + +.topcoat-list__item { + padding: 1.25rem; + border-top: 1px solid #eff1f1; + border-bottom: 1px solid #bcbfbf; +} + +.topcoat-list__item:first-child { + border-top: 1px solid rgba(0,0,0,0.05); +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.navigation-bar, +.topcoat-navigation-bar { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + white-space: nowrap; + overflow: hidden; + word-spacing: 0; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.navigation-bar__item, +.topcoat-navigation-bar__item { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; +} + +.navigation-bar__title, +.topcoat-navigation-bar__title { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* topdoc + name: Navigation Bar + description: A place where navigation goes to drink + markup: +
        +
        +

        Header

        +
        +
        + tags: + - desktop + - light + - mobile + - navigation + - bar +*/ + +.topcoat-navigation-bar { + height: 4.375rem; + padding-left: 1rem; + padding-right: 1rem; + background: #e5e9e8; + color: #000; + box-shadow: inset 0 -1px #b9bcbc, 0 1px #d4d6d6; +} + +.topcoat-navigation-bar__item { + margin: 0; + line-height: 4.375rem; + vertical-align: top; +} + +.topcoat-navigation-bar__title { + font-size: 1.3rem; + font-weight: 400; + color: #000; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.notification, +.topcoat-notification { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +/* topdoc + name: Notification + description: Notification badge + markup: + 1 + tags: + - desktop + - light + - mobile + - notification +*/ + +.topcoat-notification { + padding: 0.15em 0.5em 0.2em; + border-radius: 2px; + background-color: #ec514e; + color: #fff; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +input[type="radio"] { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.radio-button, +.topcoat-radio-button__checkmark { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button__label, +.topcoat-radio-button { + position: relative; + display: inline-block; + vertical-align: top; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-button:before, +.radio-button:after, +.topcoat-radio-button__checkmark:before, +.topcoat-radio-button__checkmark:after { + content: ''; + position: absolute; + border-radius: 100%; +} + +.radio-button:after, +.topcoat-radio-button__checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.radio-button:before, +.topcoat-radio-button__checkmark:before { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.radio-button--disabled, +input[type="radio"]:disabled + .topcoat-radio-button__checkmark { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Radio Button + description: A button that can play music, but usually just plays ads. + modifiers: + markup: + + +
        +
        + + +
        +
        + + +
        +
        + + + examples: + Mobile Radio Button: http://codepen.io/Topcoat/pen/HDcJj + tags: + - desktop + - light + - mobile + - Radio +*/ + +input[type="radio"] { + height: 1.875rem; + width: 1.875rem; + margin-top: 0; + margin-right: -1.875rem; + margin-bottom: -1.875rem; + margin-left: 0; +} + +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after { + opacity: 1; +} + +.topcoat-radio-button { + color: #454545; + line-height: 1.875rem; +} + +.topcoat-radio-button__checkmark:before { + width: 1.875rem; + height: 1.875rem; + background: #e5e9e8; + border: 1px solid #a5a8a8; + box-shadow: inset 0 1px #fff; +} + +.topcoat-radio-button__checkmark { + position: relative; + width: 1.875rem; + height: 1.875rem; +} + +.topcoat-radio-button__checkmark:after { + opacity: 0; + width: 0.875rem; + height: 0.875rem; + background: #666; + border: 1px solid rgba(0,0,0,0.1); + box-shadow: 0 1px rgba(255,255,255,0.5); + -webkit-transform: none; + -ms-transform: none; + transform: none; + top: 7px; + left: 7px; +} + +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb { + cursor: pointer; +} + +.range__thumb--webkit { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.range, +.topcoat-range { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +.range__thumb, +.topcoat-range::-moz-range-thumb { + cursor: pointer; +} + +.range__thumb--webkit, +.topcoat-range::-webkit-slider-thumb { + cursor: pointer; + -webkit-appearance: none; +} + +.range:disabled, +.topcoat-range:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Range + description: Range input + modifiers: + :active: Active state + :disabled: Disabled state + :hover: Hover state + :focus: Focused + markup: + + + examples: + mobile range: http://codepen.io/Topcoat/pen/BskEn + tags: + - desktop + - mobile + - range +*/ + +.topcoat-range { + border-radius: 6px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-moz-range-track { + border-radius: 6px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + height: 1rem; + border-radius: 30px; +} + +.topcoat-range::-webkit-slider-thumb { + height: 3rem; + width: 2rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 6px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range::-moz-range-thumb { + height: 3rem; + width: 2rem; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + border-radius: 6px; + box-shadow: inset 0 1px #fff; +} + +.topcoat-range:focus::-webkit-slider-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-range:focus::-moz-range-thumb { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.search-input, +.topcoat-search-input, +.topcoat-search-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.search-input:disabled, +.topcoat-search-input:disabled, +.topcoat-search-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Search Input + description: A text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form +*/ + +.topcoat-search-input, +.topcoat-search-input--large { + line-height: 3rem; + font-size: 16px; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + padding: 0 0 0 2rem; + border-radius: 30px; + background-image: url("../img/search.svg"); + background-position: 1em center; + background-repeat: no-repeat; + background-size: 16px; +} + +.topcoat-search-input:focus, +.topcoat-search-input--large:focus { + background-image: url("../img/search_dark.svg"); + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-search-input::-webkit-search-cancel-button, +.topcoat-search-input::-webkit-search-decoration, +.topcoat-search-input--large::-webkit-search-cancel-button, +.topcoat-search-input--large::-webkit-search-decoration { + margin-right: 5px; +} + +.topcoat-search-input:focus::-webkit-input-placeholder, +.topcoat-search-input:focus::-webkit-input-placeholder { + color: #c6c8c8; +} + +.topcoat-search-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Search Input + description: A large text input designed for searching. + modifiers: + :disabled: Disabled state + markup: + + + tags: + - desktop + - light + - mobile + - text + - input + - search + - form + - large +*/ + +.topcoat-search-input--large { + line-height: 4.375rem; + font-size: 1.3rem; + font-weight: 200; + padding: 0 0 0 2.9rem; + border-radius: 40px; + background-position: 1.2em center; + background-size: 1.3rem; +} + +.topcoat-search-input--large:disabled { + color: #000; +} + +.topcoat-search-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-search-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.switch, +.topcoat-switch { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch__input, +.topcoat-switch__input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.switch__toggle, +.topcoat-switch__toggle { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch__toggle:before, +.switch__toggle:after, +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + content: ''; + position: absolute; + z-index: -1; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; +} + +.switch--disabled, +.topcoat-switch__input:disabled + .topcoat-switch__toggle { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Switch + description: Default skin for Topcoat switch + modifiers: + :focus: Focus state + :disabled: Disabled state + markup: + +
        +
        + +
        +
        + + examples: + mobile switch: http://codepen.io/Topcoat/pen/upxds + tags: + - desktop + - light + - mobile + - switch +*/ + +.topcoat-switch { + font-size: 16px; + padding: 0 1.25rem; + border-radius: 6px; + border: 1px solid #a5a8a8; + overflow: hidden; + width: 6rem; +} + +.topcoat-switch__toggle:before, +.topcoat-switch__toggle:after { + top: -1px; + width: 5rem; +} + +.topcoat-switch__toggle:before { + content: 'ON'; + color: #0083e8; + background-color: #e0f0fa; + right: 1rem; + padding-left: 1.5rem; +} + +.topcoat-switch__toggle { + line-height: 3rem; + height: 3rem; + width: 2rem; + border-radius: 6px; + color: #454545; + text-shadow: 0 1px #fff; + background-color: #e5e9e8; + border: 1px solid #a5a8a8; + margin-left: -1.3rem; + margin-bottom: -1px; + margin-top: -1px; + box-shadow: inset 0 1px #fff; + -webkit-transition: margin-left 0.05s ease-in-out; + transition: margin-left 0.05s ease-in-out; +} + +.topcoat-switch__toggle:after { + content: 'OFF'; + background-color: #d3d7d7; + left: 1rem; + padding-left: 2rem; +} + +.topcoat-switch__input:checked + .topcoat-switch__toggle { + margin-left: 2.7rem; +} + +.topcoat-switch__input:focus + .topcoat-switch__toggle { + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after, +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before { + background: transparent; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.button, +.topcoat-tab-bar__button { + position: relative; + display: inline-block; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + text-decoration: none; +} + +.button--quiet { + background: transparent; + border: 1px solid transparent; + box-shadow: none; +} + +.button--disabled, +.topcoat-tab-bar__button:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +.button-bar, +.topcoat-tab-bar { + display: table; + table-layout: fixed; + white-space: nowrap; + margin: 0; + padding: 0; +} + +.button-bar__item, +.topcoat-tab-bar__item { + display: table-cell; + width: auto; + border-radius: 0; +} + +.button-bar__item > input, +.topcoat-tab-bar__item > input { + position: absolute; + overflow: hidden; + padding: 0; + border: 0; + opacity: 0.001; + z-index: 1; + vertical-align: top; + outline: none; +} + +.button-bar__button { + border-radius: inherit; +} + +.button-bar__item:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Tab Bar + description: Component of tab buttons + modifiers: + :disabled: Disabled state + markup: +
        + + + +
        + examples: + mobile tab bar: http://codepen.io/Topcoat/pen/rJICF + tags: + - desktop + - light + - dark + - mobile + - tab + - group + - bar +*/ + +.topcoat-tab-bar__button { + padding: 0 1.25rem; + height: 3rem; + line-height: 3rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: top; + background-color: #e5e9e8; + box-shadow: inset 0 1px #fff; + border-top: 1px solid #a5a8a8; +} + +.topcoat-tab-bar__button:active, +.topcoat-tab-bar__button--large:active, +:checked + .topcoat-tab-bar__button { + color: #0083e8; + background-color: #e0f0fa; + box-shadow: inset 0 0 2px #c0ced8; +} + +.topcoat-tab-bar__button:focus, +.topcoat-tab-bar__button--large:focus { + z-index: 1; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.input, +.topcoat-text-input, +.topcoat-text-input--large { + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + vertical-align: top; + outline: none; +} + +.input:disabled, +.topcoat-text-input:disabled, +.topcoat-text-input--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Text input + description: Topdoc text input + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
        +
        + +
        +
        + + tags: + - desktop + - mobile + - text + - input +*/ + +.topcoat-text-input, +.topcoat-text-input--large { + line-height: 3rem; + font-size: 16px; + letter-spacing: 1px; + padding: 0 1.25rem; + border: 1px solid #a5a8a8; + border-radius: 6px; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + vertical-align: top; +} + +.topcoat-text-input:focus, +.topcoat-text-input--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-text-input:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input:invalid { + border: 1px solid #d83b75; +} + +/* topdoc + name: Large Text Input + description: A bigger input, still for text. + modifiers: + :disabled: Disabled state + :focus: Focused + :invalid: Hover state + markup: + +
        +
        + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - large +*/ + +.topcoat-text-input--large { + line-height: 4.375rem; + font-size: 1.3rem; +} + +.topcoat-text-input--large:disabled { + color: #000; +} + +.topcoat-text-input--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-text-input--large:disabled:-ms-input-placeholder { + color: #000; +} + +.topcoat-text-input--large:invalid { + border: 1px solid #d83b75; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* +* Copyright 2012 Adobe Systems Inc.; +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +.textarea, +.topcoat-textarea, +.topcoat-textarea--large { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + vertical-align: top; + resize: none; + outline: none; +} + +.textarea:disabled, +.topcoat-textarea:disabled, +.topcoat-textarea--large:disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} + +/* topdoc + name: Textarea + description: A whole area, just for text. + modifiers: + :disabled: Disabled state + markup: + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea, +.topcoat-textarea--large { + padding: 2rem; + font-size: 2.5rem; + font-weight: 200; + border-radius: 6px; + line-height: 3rem; + border: 1px solid #a5a8a8; + background-color: #d3d7d7; + box-shadow: inset 0 1px rgba(0,0,0,0.12); + color: #454545; + letter-spacing: 1px; +} + +.topcoat-textarea:focus, +.topcoat-textarea--large:focus { + background-color: #edf1f1; + color: #000; + border: 1px solid #0940fd; + box-shadow: 0 0 0 2px #6fb5f1; +} + +.topcoat-textarea:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea:disabled:-ms-input-placeholder { + color: #000; +} + +/* topdoc + name: Large Textarea + description: A whole area, just for text; now available in large. + modifiers: + :disabled: Disabled state + markup: + +
        +
        + + tags: + - desktop + - light + - mobile + - form + - input + - textarea +*/ + +.topcoat-textarea--large { + font-size: 3rem; + line-height: 4.375rem; +} + +.topcoat-textarea--large:disabled { + color: #000; +} + +.topcoat-textarea--large:disabled::-webkit-input-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled::-moz-placeholder { + color: #000; +} + +.topcoat-textarea--large:disabled:-ms-input-placeholder { + color: #000; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Regular.otf"); +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Light.otf"); + font-weight: 200; +} + +@font-face { + font-family: "Source Sans"; + src: url("../font/SourceSansPro-Semibold.otf"); + font-weight: 600; +} + +body { + margin: 0; + padding: 0; + background: #dfe2e2; + color: #000; + font: 16px "Source Sans", helvetica, arial, sans-serif; + font-weight: 200; +} + +:focus { + outline-color: transparent; + outline-style: none; +} + +.topcoat-icon--menu-stack { + background: url("../img/hamburger_dark.svg") no-repeat; + background-size: cover; +} + +.quarter { + width: 25%; +} + +.half { + width: 50%; +} + +.three-quarters { + width: 75%; +} + +.third { + width: 33.333%; +} + +.two-thirds { + width: 66.666%; +} + +.full { + width: 100%; +} + +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.reset-ui { + -moz-box-sizing: border-box; + box-sizing: border-box; + background-clip: padding-box; + position: relative; + display: inline-block; + vertical-align: top; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + border: none; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* This file should include color and image variables corresponding to the dark theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* Search Input */ + +/* List */ + +/* Checkbox */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Textarea */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* This file should include color and image variables corresponding to the light theme */ + +/* Call To Action */ + +/* Icons */ + +/* Navigation Bar */ + +/* Text Input */ + +/* List */ + +/* Overlay */ + +/* Progress bar */ + +/* Checkbox */ + +/* Range input */ + +/* Radio Button */ + +/* Tab bar */ + +/* Switch */ + +/* Containers */ + +/* Icon Button */ + +/* Navigation bar */ + +/* List */ + +/* Search Input */ + +/* Text Area */ + +/* Checkbox */ + +/* Radio */ + +/* Range input */ + +/* Search Input */ + +/* Switch */ + +/* Text Input */ + +/* Radio input */ + +/* Overlay */ + +/* Textarea */ + +/* Progress bar container */ + +/* Progress bar progress */ + +/* Search input */ + +/* Switch */ + +/* Notification */ \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-light.min.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-light.min.css new file mode 100755 index 0000000..7692377 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/css/topcoat-mobile-light.min.css @@ -0,0 +1 @@ +.button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled,.topcoat-button-bar__button:disabled,.topcoat-button-bar__button--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta,.topcoat-button-bar__button,.topcoat-button-bar__button--large{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover,.topcoat-button-bar__button:hover,.topcoat-button-bar__button--large:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active,.topcoat-button-bar__button:active,.topcoat-button-bar__button--large:active,:checked+.topcoat-button-bar__button{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus,.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button-bar__button--large{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.button-bar,.topcoat-button-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-button-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-button-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button-bar>.topcoat-button-bar__item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.topcoat-button-bar>.topcoat-button-bar__item:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.topcoat-button-bar__item:first-child>.topcoat-button-bar__button,.topcoat-button-bar__item:first-child>.topcoat-button-bar__button--large{border-right:0}.topcoat-button-bar__item:last-child>.topcoat-button-bar__button,.topcoat-button-bar__item:last-child>.topcoat-button-bar__button--large{border-left:0}.topcoat-button-bar__button{border-radius:inherit}.topcoat-button-bar__button:focus,.topcoat-button-bar__button--large:focus{z-index:1}.topcoat-button-bar__button--large{border-radius:inherit}.button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled{opacity:.3;cursor:default;pointer-events:none}.button,.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-button:disabled,.topcoat-button--quiet:disabled,.topcoat-button--large:disabled,.topcoat-button--large--quiet:disabled,.topcoat-button--cta:disabled,.topcoat-button--large--cta:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-button,.topcoat-button--quiet,.topcoat-button--large,.topcoat-button--large--quiet,.topcoat-button--cta,.topcoat-button--large--cta{padding:0 1.25rem;font-size:16px;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-button:hover,.topcoat-button--quiet:hover,.topcoat-button--large:hover,.topcoat-button--large--quiet:hover{background-color:#edf1f1}.topcoat-button:active,.topcoat-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button:focus,.topcoat-button--quiet:focus,.topcoat-button--large:focus,.topcoat-button--large--quiet:focus,.topcoat-button--cta:focus,.topcoat-button--large--cta:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--quiet:hover,.topcoat-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-button--quiet:active,.topcoat-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large,.topcoat-button--large--quiet{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}.topcoat-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-button--cta,.topcoat-button--large--cta{border:1px solid #143250;background-color:#288edf;box-shadow:inset 0 1px rgba(255,255,255,.36);color:#fff;font-weight:500;text-shadow:0 -1px rgba(0,0,0,.36)}.topcoat-button--cta:hover,.topcoat-button--large--cta:hover{background-color:#509bef}.topcoat-button--cta:active,.topcoat-button--large--cta:active{background-color:#0380e8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-button--large--cta{font-size:1.3rem;font-weight:400;line-height:4.375rem;padding:0 1.25rem}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after{content:'';position:absolute}.checkbox:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}input[type=checkbox]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.checkbox,.topcoat-checkbox__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox__label,.topcoat-checkbox{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox--disabled,input[type=checkbox]:disabled+.topcoat-checkbox__checkmark{opacity:.3;cursor:default;pointer-events:none}.checkbox:before,.checkbox:after,.topcoat-checkbox__checkmark:before,.topcoat-checkbox__checkmark:after{content:'';position:absolute}.checkbox:before,.topcoat-checkbox__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.topcoat-checkbox__checkmark{height:2rem}input[type=checkbox]{height:2rem;width:2rem;margin-top:0;margin-right:-2rem;margin-bottom:-2rem;margin-left:0}input[type=checkbox]:checked+.topcoat-checkbox__checkmark:after{opacity:1}.topcoat-checkbox{line-height:2rem}.topcoat-checkbox__checkmark:before{width:2rem;height:2rem;background:#e5e9e8;border:1px solid #a5a8a8;border-radius:3px;box-shadow:inset 0 1px #fff}.topcoat-checkbox__checkmark{width:2rem;height:2rem}.topcoat-checkbox__checkmark:after{top:1px;left:2px;opacity:0;width:28px;height:11px;background:transparent;border:7px solid #666;border-width:7px;border-top:0;border-right:0;border-radius:2px;-webkit-transform:rotate(-50deg);-ms-transform:rotate(-50deg);transform:rotate(-50deg)}input[type=checkbox]:focus+.topcoat-checkbox__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.button,.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-icon-button:disabled,.topcoat-icon-button--quiet:disabled,.topcoat-icon-button--large:disabled,.topcoat-icon-button--large--quiet:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-icon-button,.topcoat-icon-button--quiet,.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{padding:0 .75rem;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:baseline;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border:1px solid #a5a8a8;border-radius:6px}.topcoat-icon-button:hover,.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large:hover,.topcoat-icon-button--large--quiet:hover{background-color:#edf1f1}.topcoat-icon-button:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button:focus,.topcoat-icon-button--quiet:focus,.topcoat-icon-button--quiet:hover:focus,.topcoat-icon-button--large:focus,.topcoat-icon-button--large--quiet:focus,.topcoat-icon-button--large--quiet:hover:focus{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1;outline:0}.topcoat-icon-button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon-button--quiet:hover,.topcoat-icon-button--large--quiet:hover{text-shadow:0 1px #fff;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-icon-button--quiet:active,.topcoat-icon-button--large--quiet:active{color:#454545;text-shadow:0 1px #fff;background-color:#d3d7d7;border:1px solid #a5a8a8;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large,.topcoat-icon-button--large--quiet{width:4.375rem;height:4.375rem;line-height:4.375rem}.topcoat-icon-button--large:active{background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12)}.topcoat-icon-button--large--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.topcoat-icon,.topcoat-icon--large{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:1.62rem;height:1.62rem;vertical-align:middle;top:-1px}.topcoat-icon--large{width:2.499999998125rem;height:2.499999998125rem;top:-2px}.input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled{opacity:.3;cursor:default;pointer-events:none}.list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header{margin:0}.list__container{padding:0;margin:0;list-style-type:none}.list__item{margin:0;padding:0}.list,.topcoat-list{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:auto;-webkit-overflow-scrolling:touch}.list__header,.topcoat-list__header{margin:0}.list__container,.topcoat-list__container{padding:0;margin:0;list-style-type:none}.list__item,.topcoat-list__item{margin:0;padding:0}.topcoat-list{border-top:1px solid #bcbfbf;border-bottom:1px solid #eff1f1;background-color:#dfe2e2}.topcoat-list__header{padding:4px 20px;font-size:.9em;font-weight:400;background-color:#cccfcf;color:#656565;text-shadow:0 1px 0 rgba(255,255,255,.5);border-top:1px solid rgba(255,255,255,.5);border-bottom:1px solid rgba(255,255,255,.23)}.topcoat-list__container{border-top:1px solid #bcbfbf;color:#454545}.topcoat-list__item{padding:1.25rem;border-top:1px solid #eff1f1;border-bottom:1px solid #bcbfbf}.topcoat-list__item:first-child{border-top:1px solid rgba(0,0,0,.05)}.navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.navigation-bar,.topcoat-navigation-bar{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;white-space:nowrap;overflow:hidden;word-spacing:0;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navigation-bar__item,.topcoat-navigation-bar__item{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0}.navigation-bar__title,.topcoat-navigation-bar__title{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.topcoat-navigation-bar{height:4.375rem;padding-left:1rem;padding-right:1rem;background:#e5e9e8;color:#000;box-shadow:inset 0 -1px #b9bcbc,0 1px #d4d6d6}.topcoat-navigation-bar__item{margin:0;line-height:4.375rem;vertical-align:top}.topcoat-navigation-bar__title{font-size:1.3rem;font-weight:400;color:#000}.notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.notification,.topcoat-notification{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.topcoat-notification{padding:.15em .5em .2em;border-radius:2px;background-color:#ec514e;color:#fff}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after{content:'';position:absolute;border-radius:100%}.radio-button:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.radio-button,.topcoat-radio-button__checkmark{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button__label,.topcoat-radio-button{position:relative;display:inline-block;vertical-align:top;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-button:before,.radio-button:after,.topcoat-radio-button__checkmark:before,.topcoat-radio-button__checkmark:after{content:'';position:absolute;border-radius:100%}.radio-button:after,.topcoat-radio-button__checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.radio-button:before,.topcoat-radio-button__checkmark:before{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.radio-button--disabled,input[type=radio]:disabled+.topcoat-radio-button__checkmark{opacity:.3;cursor:default;pointer-events:none}input[type=radio]{height:1.875rem;width:1.875rem;margin-top:0;margin-right:-1.875rem;margin-bottom:-1.875rem;margin-left:0}input[type=radio]:checked+.topcoat-radio-button__checkmark:after{opacity:1}.topcoat-radio-button{color:#454545;line-height:1.875rem}.topcoat-radio-button__checkmark:before{width:1.875rem;height:1.875rem;background:#e5e9e8;border:1px solid #a5a8a8;box-shadow:inset 0 1px #fff}.topcoat-radio-button__checkmark{position:relative;width:1.875rem;height:1.875rem}.topcoat-radio-button__checkmark:after{opacity:0;width:.875rem;height:.875rem;background:#666;border:1px solid rgba(0,0,0,.1);box-shadow:0 1px rgba(255,255,255,.5);-webkit-transform:none;-ms-transform:none;transform:none;top:7px;left:7px}input[type=radio]:focus+.topcoat-radio-button__checkmark:before{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb{cursor:pointer}.range__thumb--webkit{cursor:pointer;-webkit-appearance:none}.range:disabled{opacity:.3;cursor:default;pointer-events:none}.range,.topcoat-range{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}.range__thumb,.topcoat-range::-moz-range-thumb{cursor:pointer}.range__thumb--webkit,.topcoat-range::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none}.range:disabled,.topcoat-range:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-range{border-radius:6px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:1rem;border-radius:30px}.topcoat-range::-moz-range-track{border-radius:6px;border:1px solid #a5a8a8;background-color:#d3d7d7;height:1rem;border-radius:30px}.topcoat-range::-webkit-slider-thumb{height:3rem;width:2rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:6px;box-shadow:inset 0 1px #fff}.topcoat-range::-moz-range-thumb{height:3rem;width:2rem;background-color:#e5e9e8;border:1px solid #a5a8a8;border-radius:6px;box-shadow:inset 0 1px #fff}.topcoat-range:focus::-webkit-slider-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-range:focus::-moz-range-thumb{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.search-input{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled{opacity:.3;cursor:default;pointer-events:none}.search-input,.topcoat-search-input,.topcoat-search-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.search-input:disabled,.topcoat-search-input:disabled,.topcoat-search-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-search-input,.topcoat-search-input--large{line-height:3rem;font-size:16px;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;padding:0 0 0 2rem;border-radius:30px;background-image:url(../img/search.svg);background-position:1em center;background-repeat:no-repeat;background-size:16px}.topcoat-search-input:focus,.topcoat-search-input--large:focus{background-image:url(../img/search_dark.svg);background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-search-input::-webkit-search-cancel-button,.topcoat-search-input::-webkit-search-decoration,.topcoat-search-input--large::-webkit-search-cancel-button,.topcoat-search-input--large::-webkit-search-decoration{margin-right:5px}.topcoat-search-input:focus::-webkit-input-placeholder,.topcoat-search-input:focus::-webkit-input-placeholder{color:#c6c8c8}.topcoat-search-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input:disabled::-moz-placeholder{color:#000}.topcoat-search-input:disabled:-ms-input-placeholder{color:#000}.topcoat-search-input--large{line-height:4.375rem;font-size:1.3rem;font-weight:200;padding:0 0 0 2.9rem;border-radius:40px;background-position:1.2em center;background-size:1.3rem}.topcoat-search-input--large:disabled{color:#000}.topcoat-search-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-search-input--large:disabled::-moz-placeholder{color:#000}.topcoat-search-input--large:disabled:-ms-input-placeholder{color:#000}.switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled{opacity:.3;cursor:default;pointer-events:none}.switch,.topcoat-switch{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch__input,.topcoat-switch__input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.switch__toggle,.topcoat-switch__toggle{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch__toggle:before,.switch__toggle:after,.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{content:'';position:absolute;z-index:-1;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box}.switch--disabled,.topcoat-switch__input:disabled+.topcoat-switch__toggle{opacity:.3;cursor:default;pointer-events:none}.topcoat-switch{font-size:16px;padding:0 1.25rem;border-radius:6px;border:1px solid #a5a8a8;overflow:hidden;width:6rem}.topcoat-switch__toggle:before,.topcoat-switch__toggle:after{top:-1px;width:5rem}.topcoat-switch__toggle:before{content:'ON';color:#0083e8;background-color:#e0f0fa;right:1rem;padding-left:1.5rem}.topcoat-switch__toggle{line-height:3rem;height:3rem;width:2rem;border-radius:6px;color:#454545;text-shadow:0 1px #fff;background-color:#e5e9e8;border:1px solid #a5a8a8;margin-left:-1.3rem;margin-bottom:-1px;margin-top:-1px;box-shadow:inset 0 1px #fff;-webkit-transition:margin-left .05s ease-in-out;transition:margin-left .05s ease-in-out}.topcoat-switch__toggle:after{content:'OFF';background-color:#d3d7d7;left:1rem;padding-left:2rem}.topcoat-switch__input:checked+.topcoat-switch__toggle{margin-left:2.7rem}.topcoat-switch__input:focus+.topcoat-switch__toggle{border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-switch__input:disabled+.topcoat-switch__toggle:after,.topcoat-switch__input:disabled+.topcoat-switch__toggle:before{background:transparent}.button,.topcoat-tab-bar__button{position:relative;display:inline-block;vertical-align:top;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-decoration:none}.button--quiet{background:transparent;border:1px solid transparent;box-shadow:none}.button--disabled,.topcoat-tab-bar__button:disabled{opacity:.3;cursor:default;pointer-events:none}.button-bar,.topcoat-tab-bar{display:table;table-layout:fixed;white-space:nowrap;margin:0;padding:0}.button-bar__item,.topcoat-tab-bar__item{display:table-cell;width:auto;border-radius:0}.button-bar__item>input,.topcoat-tab-bar__item>input{position:absolute;overflow:hidden;padding:0;border:0;opacity:.001;z-index:1;vertical-align:top;outline:0}.button-bar__button{border-radius:inherit}.button-bar__item:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-tab-bar__button{padding:0 1.25rem;height:3rem;line-height:3rem;letter-spacing:1px;color:#454545;text-shadow:0 1px #fff;vertical-align:top;background-color:#e5e9e8;box-shadow:inset 0 1px #fff;border-top:1px solid #a5a8a8}.topcoat-tab-bar__button:active,.topcoat-tab-bar__button--large:active,:checked+.topcoat-tab-bar__button{color:#0083e8;background-color:#e0f0fa;box-shadow:inset 0 0 2px #c0ced8}.topcoat-tab-bar__button:focus,.topcoat-tab-bar__button--large:focus{z-index:1}.input,.topcoat-text-input,.topcoat-text-input--large{padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;vertical-align:top;outline:0}.input:disabled,.topcoat-text-input:disabled,.topcoat-text-input--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-text-input,.topcoat-text-input--large{line-height:3rem;font-size:16px;letter-spacing:1px;padding:0 1.25rem;border:1px solid #a5a8a8;border-radius:6px;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;vertical-align:top}.topcoat-text-input:focus,.topcoat-text-input--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-text-input:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input:disabled::-moz-placeholder{color:#000}.topcoat-text-input:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input:invalid{border:1px solid #d83b75}.topcoat-text-input--large{line-height:4.375rem;font-size:1.3rem}.topcoat-text-input--large:disabled{color:#000}.topcoat-text-input--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-text-input--large:disabled::-moz-placeholder{color:#000}.topcoat-text-input--large:disabled:-ms-input-placeholder{color:#000}.topcoat-text-input--large:invalid{border:1px solid #d83b75}.textarea{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled{opacity:.3;cursor:default;pointer-events:none}.textarea,.topcoat-textarea,.topcoat-textarea--large{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;vertical-align:top;resize:none;outline:0}.textarea:disabled,.topcoat-textarea:disabled,.topcoat-textarea--large:disabled{opacity:.3;cursor:default;pointer-events:none}.topcoat-textarea,.topcoat-textarea--large{padding:2rem;font-size:2.5rem;font-weight:200;border-radius:6px;line-height:3rem;border:1px solid #a5a8a8;background-color:#d3d7d7;box-shadow:inset 0 1px rgba(0,0,0,.12);color:#454545;letter-spacing:1px}.topcoat-textarea:focus,.topcoat-textarea--large:focus{background-color:#edf1f1;color:#000;border:1px solid #0940fd;box-shadow:0 0 0 2px #6fb5f1}.topcoat-textarea:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea:disabled::-moz-placeholder{color:#000}.topcoat-textarea:disabled:-ms-input-placeholder{color:#000}.topcoat-textarea--large{font-size:3rem;line-height:4.375rem}.topcoat-textarea--large:disabled{color:#000}.topcoat-textarea--large:disabled::-webkit-input-placeholder{color:#000}.topcoat-textarea--large:disabled::-moz-placeholder{color:#000}.topcoat-textarea--large:disabled:-ms-input-placeholder{color:#000}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Regular.otf)}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Light.otf);font-weight:200}@font-face{font-family:"Source Sans";src:url(../font/SourceSansPro-Semibold.otf);font-weight:600}body{margin:0;padding:0;background:#dfe2e2;color:#000;font:16px "Source Sans",helvetica,arial,sans-serif;font-weight:200}:focus{outline-color:transparent;outline-style:none}.topcoat-icon--menu-stack{background:url(../img/hamburger_dark.svg) no-repeat;background-size:cover}.quarter{width:25%}.half{width:50%}.three-quarters{width:75%}.third{width:33.333%}.two-thirds{width:66.666%}.full{width:100%}.left{text-align:left}.center{text-align:center}.right{text-align:right}.reset-ui{-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;position:relative;display:inline-block;vertical-align:top;padding:0;margin:0;font:inherit;color:inherit;background:transparent;border:0;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/brackets.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/brackets.css new file mode 100755 index 0000000..8e32479 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/brackets.css @@ -0,0 +1,69 @@ +/** + * Brackets theme + * + * @author Garth Braithwaite + * @version 0.0.1 + */ +pre { + word-wrap: break-word; + padding: 6px 10px; + line-height: 19px; + margin-bottom: 20px; +} + +pre, code { + font-family: source-code-pro, 'Source Code Pro', Courier, monospace; + color: #535353; +} + +pre, pre code { + font-size: 13px; +} + +pre .comment { + color: #A2A2A2; +} + +pre .support { + color: #0086B3; +} + +pre .tag, pre .tag-name { + color: #446FBD; +} + +pre .css-property { + color: #8757AD; +} + +pre .css-value, pre .support.namespace { + color: #F18900; +} +pre .vendor-prefix { + color: #535353; +} +pre .constant.numeric, pre .keyword.unit { + color: #738D00; +} +pre .hex-color { + color: #F18900; +} +pre .entity.class { + color: #5585C4; +} + +pre .entity.id, pre .entity.function { + color: #900; +} + +pre .attribute, pre .variable { + color: #738D00; +} + +pre .string, pre .support.value { + color: #8757AD; +} + +pre .regexp { + color: #535353; +} \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/main.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/main.css new file mode 100755 index 0000000..2d0bda3 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/main.css @@ -0,0 +1,508 @@ +html,body{ + margin:0; + padding:0; + height: 100%; +} +body { + font-family: source-sans-pro, sans-serif; + position: relative; + -webkit-font-smoothing: antialiased; +} +body.light { + background: #F4F4F4; +} +body.dark { + color: #F0F1F1; + background: #4A4D4E; +} +body.light { + color: #181919; +} + +h1 { + font-weight: 600; +} +#wrapper { + width: 100%; + overflow-x: hidden; + background: inherit; + position: relative; +} +#site { + width: 100%; + position: relative; + z-index: 10; + background: inherit; + left: 0; + transition: all 0.2s ease-out; + -webkit-transition: all 0.2s ease-out; + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); +} +#site:before{ + position: absolute; + content: ''; + left: -4px; + height: 100%; + width: 4px; + background: #3B3E3E; +} +#site.open { + transform: translate3d(250px, 0, 0); + -webkit-transform: translate3d(250px, 0, 0); +} +pre { + font-family: source-code-pro, sans-serif; + font-size: 12px; +} +/* Main Header */ +#main-header { + color: #373435; + background: #fff; + height: 98px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px 20px; + position: relative; +} +#main-header hgroup { + text-align: center; +} +#main-header hgroup h1 { + font-size: 40px; + margin: 5px 0 0; + letter-spacing: -.065em; + line-height: 1.1em; +} +#main-header hgroup a { + color: #464646; + text-decoration: none; +} +#main-header hgroup a:hover { + color: #000; +} +#main-header hgroup p { + font-size: 13px; + color: #999; + margin: 0; +} +#main-header nav { + display: none; +} +#slide-menu-button { + position: absolute; + top: 20px; + left: 20px; + display: inline-block; + vertical-align: top; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-background-clip: padding; + -moz-background-clip: padding; + background-clip: padding-box; + padding: 0; + margin: 0; + font: inherit; + color: inherit; + background: transparent; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + padding: 0 0.5rem; + line-height: 2rem; + letter-spacing: 1px; + color: #454545; + text-shadow: 0 1px #fff; + vertical-align: baseline; + -webkit-box-shadow: inset 0 1px #fff; + box-shadow: inset 0 1px #fff; + -webkit-border-radius: 3px; + border-radius: 3px; + width: 2.6rem; + height: 2.6rem; + line-height: 2.6rem; + border: 1px solid transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +#slide-menu:disabled, +#slide-menu.is-disabled { + opacity: 0.3; + cursor: default; + pointer-events: none; +} +#slide-menu-button:active, +#slide-menu-button.is-active { + color: #454545; + text-shadow: 0 1px #fff; + background-color: #d3d7d7; + border: 1px solid #a5a8a8; + -webkit-box-shadow: inset 0 1px rgba(0,0,0,0.12); + box-shadow: inset 0 1px rgba(0,0,0,0.12); +} +#slide-menu-button span { + background-repeat: no-repeat; + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWw0KCTwhRU5USVRZIG5zX2V4dGVuZCAiaHR0cDovL25zLmFkb2JlLmNvbS9FeHRlbnNpYmlsaXR5LzEuMC8iPg0KCTwhRU5USVRZIG5zX2FpICJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlSWxsdXN0cmF0b3IvMTAuMC8iPg0KCTwhRU5USVRZIG5zX2dyYXBocyAiaHR0cDovL25zLmFkb2JlLmNvbS9HcmFwaHMvMS4wLyI+DQoJPCFFTlRJVFkgbnNfdmFycyAiaHR0cDovL25zLmFkb2JlLmNvbS9WYXJpYWJsZXMvMS4wLyI+DQoJPCFFTlRJVFkgbnNfaW1yZXAgImh0dHA6Ly9ucy5hZG9iZS5jb20vSW1hZ2VSZXBsYWNlbWVudC8xLjAvIj4NCgk8IUVOVElUWSBuc19zZncgImh0dHA6Ly9ucy5hZG9iZS5jb20vU2F2ZUZvcldlYi8xLjAvIj4NCgk8IUVOVElUWSBuc19jdXN0b20gImh0dHA6Ly9ucy5hZG9iZS5jb20vR2VuZXJpY0N1c3RvbU5hbWVzcGFjZS8xLjAvIj4NCgk8IUVOVElUWSBuc19hZG9iZV94cGF0aCAiaHR0cDovL25zLmFkb2JlLmNvbS9YUGF0aC8xLjAvIj4NCl0+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zOng9IiZuc19leHRlbmQ7IiB4bWxuczppPSImbnNfYWk7IiB4bWxuczpncmFwaD0iJm5zX2dyYXBoczsiDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDAgNDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQwIDQwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzd2l0Y2g+DQoJPGZvcmVpZ25PYmplY3QgcmVxdWlyZWRFeHRlbnNpb25zPSImbnNfYWk7IiB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj4NCgkJPGk6cGdmUmVmICB4bGluazpocmVmPSIjYWRvYmVfaWxsdXN0cmF0b3JfcGdmIj4NCgkJPC9pOnBnZlJlZj4NCgk8L2ZvcmVpZ25PYmplY3Q+DQoJPGcgaTpleHRyYW5lb3VzPSJzZWxmIj4NCgkJPGcgb3BhY2l0eT0iMC43Ij4NCgkJCTxnIG9wYWNpdHk9IjAuNzUiPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRkZGRkZGIiBkPSJNMzksMTF2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwxMywzOSwxMi41MiwzOSwxMXoiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMTBWOWMwLTEuNDctMC40OC0yLTItMkgzQzEuNDcsNywxLDcuNTIsMSw5djFjMCwxLjU1LDAuNTIsMiwyLDJoMzQNCgkJCQkJQzM4LjUsMTIsMzksMTEuNTIsMzksMTB6Ii8+DQoJCQk8L2c+DQoJCTwvZz4NCgkJPGcgb3BhY2l0eT0iMC43Ij4NCgkJCTxnIG9wYWNpdHk9IjAuNzUiPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRkZGRkZGIiBkPSJNMzksMjJ2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwyNCwzOSwyMy41MiwzOSwyMnoiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMjF2LTFjMC0xLjQ3LTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MWMwLDEuNTUsMC41MiwyLDIsMmgzNA0KCQkJCQlDMzguNSwyMywzOSwyMi41MiwzOSwyMXoiLz4NCgkJCTwvZz4NCgkJPC9nPg0KCQk8ZyBvcGFjaXR5PSIwLjciPg0KCQkJPGcgb3BhY2l0eT0iMC43NSI+DQoJCQkJPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiNGRkZGRkYiIGQ9Ik0zOSwzM3YtMWMwLTEuNDcxLTAuNDgtMi0yLTJIM2MtMS41MywwLTIsMC41Mi0yLDJ2MQ0KCQkJCQljMCwxLjU1LDAuNTIsMiwyLDJoMzRDMzguNSwzNSwzOSwzNC41MiwzOSwzM3oiLz4NCgkJCTwvZz4NCgkJCTxnPg0KCQkJCTxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzksMzJ2LTFjMC0xLjQ3MS0wLjQ4LTItMi0ySDNjLTEuNTMsMC0yLDAuNTItMiwydjFjMCwxLjU1LDAuNTIsMiwyLDJoMzQNCgkJCQkJQzM4LjUsMzQsMzksMzMuNTIsMzksMzJ6Ii8+DQoJCQk8L2c+DQoJCTwvZz4NCgk8L2c+DQo8L3N3aXRjaD4NCjxpOnBnZiAgaWQ9ImFkb2JlX2lsbHVzdHJhdG9yX3BnZiI+DQoJPCFbQ0RBVEFbDQoJZUp6c3ZlbVNKTG1SSnZnRTlnNitQMXFFSEprS0dnQ0RBY1lkV1pId09IbzRRM2FYa094anBXV2tKSmtWVGVaMEhpVlpXZVJ5bjM3MQorMVFWZ0xsN1pFVWVSVksySzFDVkVhNE9nNW5oVU9qeHFlTHYvbzh2Zi9QRjlkZHZmdmZ3UmJxYUQ5UGYvZDNOMjRkbjc5NjgvZm1CCjFNTXZYcjc4N3R0M2IwSDZ5YTkvZWdqcjFTeVZybjlSdjdLSy8venc5dHNYYjE3L25GOWRKZm55SGxmLzVCZmZQdnZkdzh1WEQ0ZGYKUG52OTlicy9QSHY1OFBhbmg1LzhWTDcvN1l0M0x4K2t4aCtldmZyZGQyOS8vL0QyNnRzLy92Nm5mbXRwNi9iWk8vbCsrVm44V1VpSAorUE01SHI3OEZiNSs5dnFQejc3OTlzWC8rNENicFlwN0hkOTg5L3JyRjY5L2Yzenovd2p4OEVYS2g3UWR2aWp5MVg5LzhldUhiOS96Ci9lMmI1OSs5ZW5qOTdzdTNiNTQvZlB2dHpadVhiOTUrKy9QRHpaK2Z2VDc4NnRudjVadG5oLzliM3VETm53N0hsOCtlLzhja2I1Mi8KdW4veDhrRmU4Tld6ZDRjUTBSZlh2d2p4cStOM0wxNSsvUS9mdmZyZGc3ejZ1cEdjdm1LVC8vU3R0Q1hONG0rUXkxZS9lQ1dVM3p5OApleWZQSlRkRWYvNzY3NC9qWXdpUjVTZi85dXVIMzc5ZzkwdTMvSytmV3JOdjMzeno2dG5iLzhDMWh5K1crU0QvMlIxLysvRHFtNWZTCmUzemRPRi9sd3hmOHQvOXA5ZVF0V09lTHVGYnBsYkllMGx3UEtWZjl2dmZOd3g5ZlBQenA1NGQvZVBQNlFUdmcrdTI3MytnUUxNczgKNjcvNnphKy9rekgrcDljdjNzbURyU0J0MmdPL2V2UDF3MHVwMzY2L2YvbU1MODRTK3I5YTRiZlBaRTY4azdGNzgvSzdkNXhaMWU4ZwpQZnpMWjM5K3dEQUZ2Y0UvZnZQdytyZHYvcG5QK0VVTTBrN2NyclpEWE9TTlF0eVdRNmhzUCtKUnQ3bmRNL1IvdFdrMGhHYThmY3lRCkwyV2Mvdkh0aTkrL2VQM3pMMUtWdms1eDFpSDgrN2N2dnU0akdBN1YvcGZHcitydy8rYi82OVBLaTc5NzkvRGFubDdtemMydmhua3cKWC8zcU4zTFh1OWRmMzd4NWhkNy9GaE5jSnNCcm1Sc3YzL3hldjJ0Lzh4dTUvTHR2OUEzNCtTc1pxQy9mdm5pTk5xZC80RGYxcXk5ZgpmaWRmL2YzYk45OTk4NHZYLy81bStva3U3WDkrZUM3clY4Ynk2OE0vL3U1L3l3ZFpuNXliaDkrK2ZmWmNHcERQcmM3VnN4ZmYvUFM5Cnpjbkx2WDA0NkpkeUpULzY3KysvK3ZiaDMyVlY5Y3VWZXZmNmp3OHYzM3d6Tk5zb3dsVU8vL0xzN1RmZjMvU1hMNSs5ZnZiMlFIcHIKK1pjdi9pamZQSk9lNm0xMzJoTWFsVm55alhRT0wyR1ZreHU4cDhMdzFSTnU5T3pkSDRRQlBieisrdHZXdG43Y1A3alN2cis5M3p6SApISHg3T0w3OTd0cy9ISDc3NXMzTDF1eitxOWE2a1VsRi9iK05lM3pKQzE3LzQydnRvUE03V1lYVE93bi8rWnU3aTlSKy9BN3k1ZDl5CjZ6ZlBYcjU4OGZ1M3o3NzV3NHZubDI1dzRmdDJKLzN1UXliV24xLzk3czNMRjkrKzZ2TnBvSHo1N08yN0Y4OWZQdnptejkrK2UzajEKNU1FOTNIMzlRcGpjSTh2NHZYVis4NmRuNzU3LzRaY3ZmdmYyMmRzWEQrOWRmUmlBZjMveCttdVorNy81N3NXN2g5NUJiMTU5QXlubAo4SnMvUFB2bWdhL3g3Zy8zclBtYjFtRCtTbGoveU55LytPSTlYRCtzaCtQcjRmdS9mL3ZzNnhleW9ZalE5ZmR2WG43OThQcndhN0QzCmFmZEp0cTl5T0g0OS9kczBXd2tzeStIdnZqcStuZjdiTkovK2hKTVNoNUtzTEZZeS8vZXk0djlKZm8ybHRGTG5iVmV1aDNLVWNtUGwKZGloMzgvMDAzM3ZaUGRqNEU0ZVNockxzU3RZeThWY0pxNVRDMzNVbzI2NWNoMk1yTjYwY3c2MFUvM1E3eVljN2ttN0QvVmpHcnVQRAorVThheWpLVUhGZVVTWC9GTXBRYU55bjY3L1ZRamxxbS8rdlNXRDQybW1rM25zc3dxbjFzcFV4dGVKZGhrSFZVeDlHdFV2QWJvMXAzCjQ3c05JeXovVGpiVVB0akhOc3o2RzZOOE40NjIvS3MvODhXeGp0TnVvSk9NSzM1alpESEdLMHZsS0plVEViNjJzaDliR1V2OHVtTzUKUFJsRnYybmlHUFl4UTlGQjhpSGJiTEJrZ0NZYkk0elZqWlZibGpzcjl5aStzdkF5NDFnR2p0SmlIVi9ab1VjdWtudjJUZVRMcjN5OQpqYTl5eXljTzlvUXJwNHc4d3NUNzRqNHhwYlNrTlJWUnRyWjBsSEtiN21XMHc1S1daY2xMV2VxeUxkZkxjYmxkN3BaNzZjaVlVMTd5Cm1rdmU4blUrNXB0OGwrOG5lYUFnczNSWjg3cXVkZDNXNi9XNDNxeTM2NzNNaFNEZHNKUmMxbExMVm83bHB0eVdlNWtub2NhNjFGelgKV3VwV3IrdXgzdGE3ZWkvekpVNWIycFpOMnRucXRtM0g3V2E3Mis1bDBvVHJkTDFjNSt2MXVsNXYxOWZYUnlrMzE3ZlhkNXhKVVY1ZwpPZVpqT2RiakpsOGRqemZIdStPOXpLNHdzYmZUelhLVGIrUUJicmFiNjV2anpjM043YzI5VExiQVVWaHU4KzE2S3c5M1cyKzMyK1B0CnplM2Q3ZjNkTE9PUzdwYTc5YTdjMWJ2dFR1NTFkM04zTzkzZDNkMWpSdHhMaDkzbmUzblRlM24yKzJzcGNzdDd1ZkwrNUVmR2NwYlIKYkovdmhuSTdsSnVoSEhmbGVpaWJsMG4rcVVNcFExbDNKUTlsR1VvYWlrekE2VDYyTXJLd3puem44ZEh2eHAvYlhiblJNdkhYY1NqWApROWwycFE2bERHVWRTcDd1Y2l2THJxU2h4S0dFb2N4ajBTNmZyTy9IcHg5L2JvWnkxTUtWdVJ2SC9lanR4OHhIYXo5RSsyR1JvWmlHCjBkZ1B3YjdqOTkxdDNYelN0K3pQcVhYcHZpUDN2YmZ2c1pOKzJuZk5kTklqMmh2WFZqYVdhcVZZV1ZteWxZVWxXWWtUMTU1dG1jcjYKMi9UM045TjcrYytSNWRyS3hsS3R5TnFlNUovVlNyYXlzQ1FyeW5xZDBRc0g5Ykc4NC9nZE9WNlY0NU01SUJpRW1kMSt5MjYrWnE4Vwo5dVBDZmd2c3B6dDJ6SkVkVVNlK2VlYTc0Z1ZudnRBdFgrQ2FqMXo0aEF1ZlNKNURac3VkZE9hTjhLMXI0VjlWK05ncTNHd1JyaGFGCm04K1RUS1E3NmVVYllYclh3djdxZFJGR21JVWhKdGxSZ3V5dzl6TGl0OUlkeCsxYTJHYmRpakRRTEl3MHlSWVVaRCsrbDRsd0s5MTAKRkc2NzFUb0o0MTJGQVM4MUNTc09zbkhmeXd5NWxUNDhsbXRoMWJVVVlkcFptSGNTRmg1a283K1h1WE1ySFhzVUJyOEpveS9DN3JPdwovU1RNUDZ6ekpOUDRUc2I0UmphR2E5a2dxbXdUYTg2eVlTVFpPSUxJRHZjeTNXNWxMSTZ5cVd5eXVaUmxsVzFta2UwbXlxWXp5N3kvCmsxbHhJeHZSdFd4SWRaS2RhVTFaOXFna2UxVVFXZVZlWnVpdERCOTJVV3lyMkdpemJHN1lpRU9jQTdoc0UyaXRGdXA1TGRhVEJhV2IKT3VRMzdQd2JKUU9WRkVSMjRIeDQ1SFpzaGczNDVmMWlpQjJ4TTRiN2dkVXJTOWhrVW1XWlVFRW0wNldwRkcyUDRPNkRIOTJCQXRjbApkcUhNMWVzN2tlMUYySXBrdHhFaGdQZkdmdGMydTFWbVdiMnczYVcyM1dHenU4WU5lWEdUR0pMSm9NV2xCZ29OZHhRYmdna091WWtPCjEyTzNveGNncDgzMzJxUjhvREIzeTQ5WUxicFdmRU5zdXlpLzU1dnpyWFVZcmltVjNLWGR5RklrREUzb1VRbFBCUitWNUc0b2lOOUoKMDhHRWJIMGRsNXBOU3FaYXdhYThvZDRNRzJGdjZNVVhlMElmZVJ3b0hhU2RzRUJKSWNuSUY1a0JSODZGRStuQXV5TGJCdUFjWitRNQpmYXAwdmpOeUh2SWU3ZUlMN0dqUGpiNlBGMm5YbjZ6R1QxNk14eWIrZXVtS1ROMnBPTVhVSGkxNXB4bVp0alRaSC82akF2bE9SOTJyCllMN0hOQVd0U2Zvc3gybW4yTjFRZ25hbEFMKzNrMUpQU2xjaTlhOTFjald6bGVXc3BMTVNMeFQ3bVhhYTdwbENoeFUzQ21udDkrM0YKSW54aWFwcjJqU2xqUjlYT0xwYnQwVkpkNzVzR0pWL0wrc1RTVmNvOGxtbi9zUmtiK3QvbkpUMVNPQ21tT1Q2eFhPcmdDMlY2WXNVbgovMXpTM1QvcDU3TTE2UHRpYUQycU1xcUwyYmRXVk1KeW80UWJLYXJwd203RXNKVSttZHJzeTl2TkluMzZuNjVtbDFCOTlZNEw5cWpyCjJGWDY4OVZhbWdsZ3RaS2JnYURiaHRLNFFLZnZYNW55VnpOTGRQUFV5WEwwQlhrN0RVYXQwY2gxdkxnY2p6dlQyUG1DTkdQSzZmcXMKT3l0YnQ4NjRoZWJTRW0yZnA3T1ZlYm9JenhmbGU4dDBaakM4dEZMZnQzNVBsdWMwMkNBL2VRMi9ieDMvOVpmZFoyL3drb2c2YWovbgorby9LSStmNmowc2hNM1RvTzBvYm0ybCtxOGtic1drLzk0UEVVWFlTUnh3MG9CdlJnYWdCVGFJQ1FRbFNGUWhLMEV3TlNIV2dHeHAvClZBK3FUUTlLcGdkQkU3b1JMZWhJUGFqU2xMUk1WSVVDRjhjOXRlSmIzRUd1cjZJSnFTNEViU2lxTmtSOTZOYjBvU1Axb1VwOUNCb1IKT0ZlWVRDbTZwNFlMdFVnVkk2aEdsYW9SbEtPRnlsSGdVcnFuaG5SRERRazZFclNrSW5kRlZWR0VKbEdVRXRsaG9Hbm1qdXJTcmFoTApVSmlnTWtGcGd0cFVsa3pGQ2FwVElxZWFxVDdkbTJKOTFES0ozQWJKRGJKYm9meTJvbjdDVDZEODFMazRaRm9kaXk2bHFXUldxVUNoCkxGUGoxR2RTMXlCanVTVlZmNDhNZUJTUktBOU5neEMwWTZwbmpITW51ZXg0NUk0alRqdVpCT1dFdDExa2ErK1JJTTRsaHFleGlVZloKeCtkY3g2WXRhaG5OVk9QUDNpdzNtQnIzdGpEZlZ5ZjdJKzVLMnBXOTJTMmZsSFZYeXJRejVaV2RrYTlTVWRxWDY1TnlQQzFUczNsNQp1VDByNXovMzU4WG4yRFR1MVBmaFFva1hTN3BZekpKM1h2SWpaWDIwTkZ2dXREUHNGcHFiMzFlMjd5blgwODZjZkxrY24xakkzS2VkCjVmcDk1ZlpwWmJwQXZEU0lUeTdUbzE5OTVNLzVKdnF4RFpuaFptN3FaelNQaFpiRmlwb3ozYnhackxqMWM3Tml0dEhKVEtYKzQ3eWgKTHhzZkQrZXNyaUs3Sk85V1dyWFpMaE9OUmxyV1Z0ek1XMXZackZ5M2NyekFvK1JuT21OUWwxaFROOTFmNWtZREg1b2VZVUtQY1ovSAp1TTdBYVk2MDRUek9hOTdEWTNaTXhSakw5RjZlY29HVGZCOExtZDdQTjU3QU1rNVl3elJ5aVk5bURjTjZmNHd4UEpFTm5LLzh4OWZ4Cis4dGZhQjEva0ExMVowVVZrZTFHaloxMHdrTE9Tc3N5aWFTM0RyN1lvM0FDOWNmTzVwR0ZUemJUSzF0Rm9IVFA3QzE4czdLNXFITTIKVVJTRmc3Wk1sRS9kU3dzLzdSMDl0ZXFyVFpBdTZhL0ZEM3kyMXhTQTRiZkZBbExmTGJ5M0VDenB3WjNveEsyUXRPbklQUW8zdW0zdQozRm5FUDBpUzhPa3U4bmlRa0F2RjhrMUU5R3Y2ZDIrRVg5eVpsM2UrRHBQSThaSHlQTnk5Y1BpdTE0V1Mvalk0ZnVuNmxZTHBDRUV3CjBNQ1k2QWFHSXhnQ2VhRTd1RTdIalQ1aDlRcmZrQmRoYWQvVFB6dzNsdXZNMXRtc3M5Zk9WbzJqVG8yVmRoYnFyTE16emM0ck80L3MKdkhIa2lMZFQ0NE1qLyt0OGI4L3JSaFkzc3JXQm1VMERIOXV6cmhObWRVSHlPZWRIZzB4eldXNTVqTXVjaUIxam1kN0hOYjZYVFR4eApnLy9ZZFd5RzYzK2JSbEJ4T0VUNWF6M1UrV3FSNVhJbzZVb1dTRVRWMzB4Lzk5VlRxaDYvUFcveEtrdkZQQjlxdUJJOWNIMjB1ZE42CmFPc3FyR1ZiZ253Wm9OMUdSeW5uV3VNaWY1UWM3ZXNZOHJvZFVFRWJpVmRwemt1NzJTYzN4S2VaUlRQTnE5U2FaWkd2dUU2VWExRysKMmRhMjVIa2pkbHFZNHBMbGo0amZZV2dyWGMzQ1Z2cERmYWIyOU5uV1dSZ3Eyc3Boem9YWFZXSEUycGFvaUZYYmo4SlIwWmFNVzk1MgpiZVY1M29abit6enRmZndveG5KVlU5clFVczFsKzhTaFBHM3R3a3kxSjkrMksrSG5qMDNUZlNWcDVYamJJSTZPVkx3TVh2ekh0OC8vCjhPTHJuMDcrQjREOURiSjR0YTVCOWttTVk0cWxyQVF3eXVKaTkrSnJqUHh1MmRvVkI3OUM0eERzaW9OZFljdFVIbGlVOWVHVlB1SmkKN2JDblhvaHVXdGFybERDOVArTEcrK3MvcEp0Lzh4OS9sajdHdjNMaG9oMzgzM3ovdWJkZEo5cCtrODJmV1d4M3ViWU41WFowUE50bQpzUmdXU25ZRFNrS3lGd1REZVMwVUVZRDBPbEkwdUtkVlNFV0NsY0xBTmNXQU8rNFNBSHBoMzljOS81cld2dHRUWUtPQ0dOMGpwUFp0Ck5aTmpMNTROQUtvdVhVZHcwaXZjUUhINU1hemtwWi9IMGJDajhUcWJVWVpXUWtWT0VEdlIwQk9uaHNKaUtBckZVUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJR0pLQ3BzSTdBMVBjWkhYcnZoOGVNcUJEbm9RTkdYMnpUUkFLQmgwWXdRTWRQbkNqMHM0QUlWaWFkTE01ak9CV3h3bGlyQ0VKSWIxVwpSeEZTWmxVTVlhV2NDdmtVMG1tV2ZvQkllaU9UYmFZWW1nMHdlRnZVUDQ1dU5keEZSMTdzZ0J0bU81eWIxL09HMWtFMUJ4WXoreTNtCk1RaG1DSDh5WU9aSmFCa0ZCSFR6dHpyY28yS2JETk4wMjNCTTE0WmVjbk40TnBpU3dwTm1Da1YzT3kvNkFCUnRVRkUxbjZvL1BEV3QKSWxPeldLbGRGR29ZbGRiZ2Erb1pSeG9XYmllS2xmZFVPTHJLb2VoUGpKdnFIYXA1ZE4yRDJvZmhRUlVSQ3YwREdzZzZVUW1wVkVKYwpEYm5kcVNJbnlvanBJaGg2UjQxU0gzR05aRHBSU1RBbk5nT1MzbENxdm10dzBraUZ4RUdsbzBaeVE0M2tEZ0xwWkFwSkdoU1NZc3JJCmtjcklMWlVSQlp4MlBXUVo5QkRvSUUwTG1Xamo2R3JJdVNLU1RSR2hLdEwwa0NOMUVXb2l5b2NNY0dmNDV3R2tTRS9oK2Q5MzdlODkKMWF6bWs4R281WVA1SXUrNlY5TC9Hbjgza1BVSXFsZUR2RUdzUTdQUXA0YXc3Ny9UN3ZkaTdOZmgyTG5oN3RYNEwxeHgyaUh2SFg5Zgo3Ri8xR3VpLzZzenQvMTd2ZkF5M0J0VTIvRDJCUDNBVUQxanRqdFJPNXNKWURhdTltaTlhUFIwZFZFOC95RFRncy91UzYwc3RFUkJ6CnVzdzRZd2lja2RYLy9qMW05QkdjK2dzZTh5Nll0M0owTVlUbWxoZ2RGT2NPMFhPZjZ1SmVqbE5IN1BtbjhmZnAzeU10ZThSQUR3MVoKSHNWdVBJN3NTTHUvMHpSOFdFNWNOcU1qNTdMUHVuL2ZQTmpUbWE5SCs2NjdsSHV2OWg3dWc5QTlNRHRrNnZFQ01yVVlLTFhEVVIySQphaEJVNWZUYzRXV1BuOGdicnJuUjYxWmZhTXpJNUNmSnRuemQ5UGN1MGV2bUVpMWtWdVlXblNnRmROL29MUjlPdHozZCtIenJhNXRmCjIvNThBeVJtbEp1Z2JJT1Q3WVBqVGpqdWhTTjJkSThlM2VOSEc0SjBVc0hIUEtTbkdOTEhVS1R2d1pGT0EzVHRvOEJyUWJueU9WcDgKS044UEdPK1diN09GVHcwbmZZNlVMczJvdmtkTEQzaHBLd05jZWpwRFROL3VFTk9QejhwcS9vTjFQemVuQVMwOVlxWG5ObEh2emE2awpiNmJ0SDl1YzFWbTdjYS9qM0oxcytxN2NDdnNrVGdZSlZGNnVybHlmMEhmV1hUZURyMThudDVUSlpuaXhXYjVTV2FDSW9xeVhIRnczCkN2VUw2N1MvNDlUbjVGY014Q1VuM1dsSXhHbTU3QW1NcDhiOXM2Q0ppOEVUZXp6L1dTREZkQjVOY1FMM3Z4eFVjUjVZWVhFQTA4WG8KaW5MaXNWMVAvTG1QQjFtazZkRTRpL0NlbGZQWXVwR1ZNMTFjUE1mQm1kVFh6N2lHaHBXMHM5NWRiU0prcGt6RkdlSTdyQjdDS0NwMAo2amtJczhxMGpZZ1dYVmVvMTNtTElaZWRHVU5xZHhQZjUycVBWcCs2cmx1Z2RyK0pJRnpOa0NJZm02VkdMVnpkWnJSZWlmeFUrOU44CmRBdThmMW1Tc0Q3WXBsSVIxbS9YaGxCRTdzY2I0aSs4YWwyRVp3NHZrVmU1TkhSRDVTYzNwRGF3T3FmRWZzeHBxelQ2eVQ1YlUwKzcKVUhBOWpHdmF1OWJNZHBYelBCcFJQcjJsRHpLbmZQZnExY05iV0ZUMER4ckJ6R28xU0g0dWtJMVMxUmhHV1Jwa3o3Rit4eFlFZStlaQp1NEtBSWRHNmVKMmJERjJhcE53akdUMFVkUlNGZTlncDFiMXBpRnFzRGFYWkEwb1YwYW40enNkMXpreXRrNEx3TkVqQ3FuSnVnMFI4CnRLM3N6alZQMFQySlhqSUFLTnVoOW9rTm5YcmlSTUJUSWZ4SkZWRlhSbysrUHhwdmNnK0ZDbnZSY05lbURHZHJOZWVKMmlxaFhMUkQKVkZOWnRkZ3U1Y0ZEdVczR3piUHNJS0tHSVowYVdEMjFrbHZwUDZXVjJzcDFLOGRlcHZWbUtOM2J2bmU1akRET3NDdHBLT3k3cVN5dAo1RjA1LzZrblpidFFycWR5ZlZadUhpbTM3eW5OYlRSZDlsbFR1Zi9Rd29rODFmZzV5bmtNYm8vQ0xTME85OWhYYWRqSGsxUXV5bU9QCkpzWlNuRXdkM2NXa2NKbmREL3BsZHcxdkZnZHpPMWhxRmw4ZnNNOU10aVp1NkIyY1c3QnV0bkRkU25QYnRVM25POXBpTUlFVHpZN1oKNWlZc01VZk94RnZNUUhjTFI4Nmo3aEsrcGt2WXhvOVl5VUJ0SU5FKzVyYVhTbU12YkM4UU9HaDNtYzN1a21sMVVSZncxaHpBdDJiOQpCUU9NRk9LNjFRWGkzdGJzTHZUOVR0L2ovdTBPNEcyd3Vkd3dLaGdHenp2REVUYmY3M1RpL0YwcEczZUVqVHVCVmVMdFVKb09vZW5nCkdZN1ZkT0lFWG5kUW1lME1LTE56Q0EvSW1JYUpVVzFrRDRKeHNld1U2M0tPY1RuSDA5MU1GMUF0RjlFc285eDZqbXJwWmJvZ0dWOUUKeUQwQklMZGNSdEk5aHFKN2I2R21Ic2FZWFkvVzlTaGRqOC90c2JuK0RGM3FONUYrRU5vcG91K2piM3NjczB2V1hZcnVnYlpOUUI0RQo0bHNGUmUwRGE3dVlleDVPMjFYREU3VncxQWVuQytyZ1pSUEZtU3A0b2dlYUpqaGRVQVgzeXVCZUhkd3JoTlZNb2FWdGRubHFhbUZYCkRWMDVqQzN0eGp5b2lQZURvbmpYRklNV0ZUejVqYS83ejlaS2JhWHZYWDBienEwc3ZVeW1WM2J0TWc0NlpoaDF6VUhqN0dYVXhEaWUKMDZERDNPeks4YXhjbjVSTFAzVWlPOTJYaXpzM1RUMlBseVlHVGYzUGs3SjhjT0VPTm0zcGM1UVBqOVorZjd3MlF5U25reGpKODVqdApmYVRrUG01N2pOdzI1OXpVREhhanNlN09wbWszMU8zTWRPcXJhOTQ2OTlkZCsvZ1dHeC90MEhnU3kzRFRQRlhiU1VSRDZyWTZzOWJkCmxkdUpLLzdJNmIrWkE2dFFPSFhYcFJydXV2Tnk3Nzdza1E2RnNtMmVMTnhCdlpoeEYvSndSMzYxRDN6WUtKU1VadURMSnA2M0dJZ0oKMWo3YSsrNXRrN3VsM2UvR09NVVlFcUZCRVNvT2VXaUVCa2VvV2tFM3hOU2lKTzVOLzFEdXFVenVTR3ZodFZrTVBYQmlESjFZVFpNdwpKU1dsaWJxUGg2U0dDN0Z4ajBYSGVaekZQaUoybTB6OTJnWUI5TEdnMkY2V1N3R3lIaVo3L25NZXgvWlkrTlFGSVB4MFJycjdtUEkrCmhCWEJLSFVIaXJqOHZRRXU4bHhGdVNQbVJnVGF6UUFUR2JhSDBLMFF6ZVp3Z3ZQNGlLcy94RHJ3VDY5ZlAzdjE4UFhoOTBZNmhKOU8KbDRnZDYzSWg0MDl1dXNhUTlTYzhIcmV1NGUvM0hyMCtHUXoxRklLNkQrTGZnMC9WQjZ6KzMrc2Q1bFRVaXFrQlRyZTllNnViT0pZegpKY2tmM0lQdSsrT2Z2c0J4MGpjd284VlRzeEc4QjBrNzlmZDUrZ01mN1lGN2pvQ3h0M2Y5UFZtSGg5M2pqcHJkWThrVExnTi8wOVM3CnZ5Y08ra0VTbEh5bTlDVFg5MU5QVC9LRFpsVDU4WUgxZ1FjYmQxcEtucEdJTmhhMU9rTVhMelREWHFuaDZjSWZGeG5pWjJoS3VLT20KM3lXbE5iMmpmUm9IbmVlTFBGVEkwblRlY2RGbzREQ3M1eHZDR3hLeEJ4dlhMVGhNSWhaZ282WHpUaGFvbWwwcWw2UkNtRFFWMnZYVQpFRXlSN0svUVZuZzdKRDl6QkpNRDZudnFzMkl3ZW9Mb0hhMHlOYmpLSHFwaVFKVWRjRDZieldRUG5COHRKM2ZiL2RUTUp3cGNpYWF2CkxHWkljU2o5YWtxUHEwRmR0L0FmVTU4bXM3VW8xdjdXZ0M1ajZRRWh1NUQxbml0eFg2YW0xZldTTHBibGtaTDNaVG9ockU4cTVmRXkKUGZwVi9iZ3lmVURsQzhyZmVabWVWdTNwNWNjR0wxUm9Vb0pMWVd2aklpcDdSVW9DWlpkck1SSmRWTGpwcXpHM0MxazFYVStheTZqSgpWOWpleCt5S2lRYmIxZUJ6RnNQVFFITWRNTmRDZDZhR2xmUEluWDNjVG1NNUFNbWRSZTRvVUc1dHhscmhQNVBOeEJ0enFONVpFTWRzCmNUekIxQk9IenVVV3orUEZiUS82Y3owWlovRis3WFlPdDM1MHcwaVBFdW1HbEhCYXBqRi8wTTRxazNiYzdyemtzMEplT0EyMm45TnkKd2NmeFNPazJwVHFOSDU1VXppdzgreko5WDRVUExVOXQ4TWsvMDlPci9xZHA4REVPQXAzaXp1RHBtVnJFdGZxR1dxNngxWlFHVDlJSwovbUVxMmdTaGhCN1QyREswUWplN2I3anF2TXZPcXE0ZWg5eU9icDZMSE1SNWlFTnRMMFQvWGVRaXprY0tzZ29xTTduZWNSSTFpSi95CmtzNVBvcGxjT2xmSlpvOHMwOEJZL0tmUDBUMWYyU0ZEVGdFd3ptR21NeWJ6R0xPSmo1UVRqak05a1FGOUh6dHFaWHJmbHg5UjNzdmoKUHFyODJPQmZvTUVQaVU1NThzLzdHdHpqaHRPWldhVHM3RGhtdzVtYVZXU1hPWEVNczZIZFJzMGdMaFc1ZTNzMTB4TUJJU29ZVFJaNwpVTGxPWUhlNmI5TFJRbHZ4Nk1xK3AzU1VMSUtra0dsQXhpZGFRckVRRTUzWGluUUFLNEhkVzEya3dBb2t1cTJ6Z1IzQVp0UWpCdGVwCnNxclVmTlpaZWRGa2JPakdRcGJnVzUzTmJhM0ZGN21QcGZNcmQwdDFNQnVWcDRrYVZOZVRSa1ZvMUc3MkNzbXAwRHI4S0lMNDlrSTUKejZhaW51RDV2U1ZPTi9ISlpYbEttWjVXN1daOWFwbWVYdlUvVFlOdTFybzlTejU3bERsYjdySXNPbVJqdmJYRVhTc1RkczFNMVhXawpqV3FsZlNwWWFxNmp6REs2dG1DVWdra0s5aWc0cytESVVpZVdnc3h2bVg1TG9lWFo4MjdSVTlYU0Q5ZmkwVlJUQTVFL0pmWHdhZkxoCmxuNjRZOGNuOHpLNWg4bTlTOGtnNUtFNWxXNEhJUG4xa0YycnU1SG9RcHJNZytUdW83M3J5QjFIM1duVVhVYWp3eWgxYjlFME9vdDIKanFKVE45R3BrK2dSLzlCMDRpQjZ6RDIwY3c2OXp6TTBQZVlZdXVRVWVvSWZpTEU1VHkwM1R5blQwNm85WW9tNlVLYW5WLzFQMCtDUApIT1JIRHZJakIvbmJYWjkvK3czK3lFRis1Q0EvY3BDLzNmWDV0OTlnOTNWZlBMbnU2VVM0eWt0Y2F0am91bDYyd29RcVdlWVlLS1ZrCmRYMkhHZEZURi83Z24rc0ZyL2xuYmRVYzZNZ3NFOUloaDZ0WmVOam9Sai81eHV2TFBlV0xOVndoYnYrUWxxczE5UHhPNzZteHY3NUkKcXptdU9GTTR4YTFjdVA2MFJydStsQXMrLzVIOGlXNy9lTm50SCtIMlQrNzJiOW5FN2s2Z3liY25FT1ZIQzNlczY5dXpjdk5oUlpzNQpoU0hqNTMwK2x6UHZrRVloZDZESmJIRHgyNFlUUHo5NnFaN0gyYmd4Y1R4R3JneWdzdkhreGZIVXhaUHlOOWRNVDJKejB6TDdkVHVYCnpRVWRpdjM0N01aV0sxeENRaGdXd3ZPNnRPTnk3SlNhZGk2UHAvRG9TV2Zxa0c3R2s4MThhb1dSa2FXMUtxY3BLZU1ZYk9FOTg4SmMKYVhVSmlYblI1cnhzYzd6d3gyWHN6K2RyVXFOTDh4d0RXeE5aU1p1Rml4eFF5em1zaTZFNkRjK1poSWZXaXV2NzQzemM5WHJ2ei9JcQpuNzF2UHBFRlhtU0E4Y094bzNlR1o3eHc0bEhEalJxTWNYTFk1ZmZoSnNzWmJ2SVMyUE1FcmFwN1AwN2JmRS9ybDkvaU1vaDA5ejZUCnY5TEhRQ2kvRjk0blBOWGpCVDUzVEFMdk1IbEV3dnRhL3dCNDRyNzlGdkd3NXlwMWdPbnRlTVBwRno4NHlpOWRtdXRwTjljTlp4WlAKTXI2T1NaWjBTN2hyYVY1N2t0YzhISSttR2M2T0U3TmtNNlJ2Q09mcnFWelhsc0wxMnVMMGRON1NQYVh4eHBFcVhxYTZWd3pLczlGWgpkYlJnNGp0enlYZFlUeHJpaE9IQXF0T3F3Y0F3NFNQbTk4N2llNVBoQ1RNZFdXTWNwbWRJd3l4djJWMU84N3VNR1Y0aW5lOHpYZktlCjVXWE04eklFa0V5UFJaQzBzekU4Z0tSNkFNbm5ndE5lWG0xUGg5T2V6TzBQelpXd1h3QWZjelgzSXJsdW5wSDlJSVdRbU5CUnJ4UnUKdGRaMXpKazUzTzVETHZxMGRWWXZMclM2U3c3Wk1xQjVEclF4RzdQRFJVMnE0dUNmWlg1MitHb0hjalFJcTE1dzExQ3Y4d0FONlpmNgp4ZkxEQzNaNUJHL01FNXk0Z0k3bSswMjJVdlFPajV4RGVUbDcwRi9pZ2k2Nm9oL0cyTWpUYkRtWDh1V0VDL2x5TEZmTzFBTE1YS1B3CkVFY1BhOVFkYTFmbEF4THFXRURqN1k3VENLK1o3TGdkanpMMFdMWFlZOVgwdnYwZStlS2Q0bnRTOTdTN2RjNDJuY1RGUlp0QWMyTncKT2o2MEpFWmhEWGM4WkdqajZVTHBHS1FQYjVrM2M1V25pSEpQbkI2MDBXeVlwSWs3Sm4vTXdnSm4yZ2MzbVZSWkpsZVllUFRQVVdaYwpFZmFkWkduZU04cnRta2Y2WURMb0FaR1hKYXNubks3NS9jRWhsaFArTkNQODhwL3d2bTA1RGFrY1cxNzVob3QzL05aajdHelAwQWg0Cm4zWnBCanEyZllTdmorRDBFV1BlY04zSzVOSU9kSHNoWC81NytPWXA1MFFXcTQ3OUg0RC9sNkgvYTN2VnNvT2RLZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJVUhISW5abDNHUno2OHozR29FOVpkTVA5NmhDTVdMd091K3Z3dXZNUWhRN05aU2JaUElLRVRuTEtFaDMweUU2UXovWUNRSC91Sm1KKwpNckUrTjhUNEpPSjZBT2U1STRSbklXQUhJQjFnY2hKeE54dmhOSURKQU4raVR6YWVmZnhwUngvclVhdlRwNXkxNmljUy8vaGtIL1ZrCmc1aTR5dFNQVlBERHZGSEJYK2Q1Z2NSM0pjc2paUVpIYVI2cjh6OTZucThxa3R1UXkvOHpONnVDNVRKSDVnVFBhd2pNUUNiZEoxMUwKcWJHbzhTUWgxWHU4OEVkcmNvMVhtNmpRdzVOKzFtYlZIUE5wOW5Gdk1seGg4LzFzWnZlVFpyVlBaeVFleFRzTFYrR0w1VENuamFNegpyMVZmbnNuOUwveHhVWkQvVEExK2twQy9YSkx4bDUzZG5HbVRrTDJuV3BMMmV5Wm9kK2FJOU96M2xwZ0g3Rm1USU9zZWVXZWJZaklsCkhOdmVOcG4rZmR2MDczRGpCNU12N1hnVnp5L2VEbFlaejFVWkRxV1NoVHp0VDZNNk9ZaHFmd2pWaUFQZkgwQTFIRVUxcGhwOC81bDUKVHl2MzA0Y2RhZlQ5NWEvZm9OcmxOQlh2UHY0Sk5qZFkydlNjZEpYeVhNSTd0a1JXaVZuaENwTWkzOWdHem1oczNjRWh6MW5TcXBaUApmTEhzYkc0NHVlRXVjVzlJMzBpVHlkTFNxUkh2T3pWemlhWkFtaTF0VmFUQkJJNXdUN3hXTGNkWmoxanFnTnJCWFhLU2pPejByRy9tCnU3cGM4c1d5VEhXNVdOYVBMZFBIWC9xWkd0U3AwYk91ZVNvNlQ3V3Y1MjE2WXNOaS8yOEQzVk0xdzhDYlBNdHpwTHRqVE1vOC9vdmYKWTVMcmVVaDNQUUxabjRSMy82aWZIeHQ4d2dWMkNNWXNxL0ZHQkhtY2hvdHpjR2VlZm52a3FiY1E5Q0tGUEloNEVQQWczaTA4em5ibQpRYmFRN0VhNWpvaVZ4OFM2UWJCcm90MnRJUyt1TFl1OG56M3J4MFdrYVRqRTIxUGo5NHo2NHltejQ0bmIyOW1VYnhraDkrZlZ2LzlVCitpY2RXdjE5eDh2LzhHUDUyUnRVVTh5Tm5RT2RhWklad1YzVjBoNW8wb09XOGVEOWg1cE03UUNQZFc5MDJsbTRqME9DSkxkd2U1S2sKMGNnZDZqeVpwZnZlOHVuZG1yMzd4bXpleHhiNzZSdEpUNWpaZjRhTW45TkozczNscktSSFNyeGNwa2UrQ0I5YnBvKy85RE0xcUZpSAo3aE1ZdlFMdUZ3aG5DQWpIUDR3SGovZmNlQ0kzeGwxYXZKNGsvU2taOGZZNThaajV5ME5YVWl0ajlNc2UrWFVTU0hQeHNNeTc2YkdvCm5EUHN5dFBLemZUOUlKY1BLMy85QmtjRDMxOWRLdjRoR255dmJqRTk4c1hsUXdmT3M2ZVBXZFNwRlUwWGp5Qll6N0pMN2pOTWhyT0YKNU12b09Oa2EybXp0ck9hTlczYkhHZGtCRnhkUzNJUVRiczhrLzJEM2lSYjVld1B6cWswK3lXNStMNDk5SkNkZmhYZkhxdnZLWDEwcQovcFFHTDZzSXl5TTZoV2tjMDVrS2NxYXNuR1JVSG1GaFhmdHBHdEhVMGtENzNxVlpwSFYzVVhsSGM4M2VHQmo2U0Myc1dDTEFoYUplCnBLQUZoTUx0UktudnhwTCtGUU5DTThXZlpmYURpVStCenpEd3didzNFOTE4STFxanluOXExVlBoN3pnMXVZOFNuOGw1a084ZzFVR00KZy9CMlRWMERjbGo2aTBmUy90amcyYzllUDdOQTQ2bDk4TE4zNG9uQ3QxY0VIUlNVMmxFK2UwMXptd1pWczU2b21tV25wRm94VmVVVApPK2JzNXkvUzRQdFZnOGVPSzdReVhUd1M2dlJNcDFHZGFWck9XUzlTSzVvTXVUa2VYbkF6NERidkcyQXJ0R1I2eVE0Rlc0ZVVlcFlEClVKUHF1UmR4OUNPK3o1TjRudEN3cHpQa1FRSmI4eHJ0ODNqZE1OTk9wR1VKU2ZsNURxR2VZdm5YbG9vL3BjRkhkSWRIaW1rYzA1a0sKY3E2czdKV1pRYys1ZEpEQTFNOE5zSEswckNMOWVJQzdJYi9JM0hLTXZDZkx5R1BlMDlGMzZtZU5iK1l4N1FmN1JUdGNYQS8wdTU1MgpwdXhvaHV4S3Y5OE43ZGVCbnI4c0R3eDd0VUpLL3VwUzhRL1I0SHQxaSttUkx4NVhZTzR1NlR4ZEk1cUdMUHk5akFwVlY3TThKMERYCnhWWnpJNVNlcG44eUphNGYxMzQwUmU4OFkvOTRZbnNIK2EzbVNqRG53ZVJZdjdQemNmVWs5blYzTnU3TjNlMEo2cXdJUndJK1ROZ1cKVHU1dHVERjM4VUhEejlsY1BhVmU0YURmUTFtdVFpNkRVKzdUbXFGcks4OXhJNDU2RG5IbGNUekNNMFBXM0k1TDJtSWdtaG40NnRHWApGOUpoS1ZmQ2x2dkRmSEpMZXZyUkI3MVNMWWU0WEpYZGMzeDBDNS9rVE11WG5HbDVoMHk5aUhzNTNhK2VuQXgyV1U0Uk1LY1ltRENjCnc0cjhUME9XV3o4bzBrOGc4bi83QVlmNzR5RzdpSlZPUDA4NzBXQTgyZkZVU0lEQUpjSldPN2ZYTVp3ZkR1RTBkZkVrSCtwMDNCOTUKM0pPcFAyWWZKQ0oxUEwvaGZqaG83ZndBaDIwNEpHMS9oTVBTam5DSTA2T25PSFFOL0hvd1QwSFlEUHU4clpFbmlNMnhsdUtuWnEyegpMS0RJdUFJZUdCOGV6ZFQ2NFJmck9WdXlKT2gybGpteHhHSlhWbzlaMkJUSGVobVcraEhYZnRwYXV3Z0R6ei9pd0gvRWdmK0lBLytzCk9QQjF1N1RTaEhvV1hSU2VFRjMwZUc1NjArZytzMG1tN1RSUG5HMVBTT0h0azdjZkYzUnI1Nno2a1VIOTBLRGFEZzFhaDhPTCtvR2gKT0JucGhQZC9NQ2ZkemNLUHVsclBTemc3UzJFMzRSNzcvcFBtVnJrb01wWDh2c2kxUjZPKzNuUHl3UTUzZkRta3JNc3U2NldwT3pUdgpGb3E4QzFoN05FNnROMWhQWXRST1R3NDRlOXJMNFdtUFQ5N0htZVZ1Q2ovT2ZaL0tmOSt6S3A3RzBwK1VKLy8weE5ZZ214SzFDNW16CkVOWkJtZGR0c3lsdWJMYk45ZE16UlUvV3lTZTM5YmtqM2Y3bER5L2VQZnpYdy9IbHMrZi9JY3RpOS9FdmNRckl1ZG5zSTg4Qm1jNFMKem5xNmFrODNPNmFhdlczSENlNXpWWHVPMlJ1Z3J1NHN2V3djOE9oN3JQemo2ZkhINVBqSGpvLy9GUGovelpEeG52ai82ZU1EQUt5MApGSkNlcVBIVTdISmlOZmtoejFjNXM2eCs5QWtyazZxcGo4d1V6OTJaN1NoS25TdzlQN0dMd0QxSHNZaStHME1BWFBpOXN3TlBuNURuCi9DUS9zVmtOMzJjeGZGcTh4ZmxoQ3g4YmNiRlBMZEFQV3poTklYRjdJVW5CazZiQ1I1eGNNMyt1czJ1bUN4TmhGNnBELzk4NEVjWXoKU1gwYURNbXEzemNWdmk5aDlUNWR0Wm1ScC9wcEFTNm5rK0oyK3ZnUWwyR0tEQk5sZXVSWWpuMDZpczhuUFpzTS9aZHI4SkpuNnRMQgoyR1hQM2FZTHpPMkNmbkV4OC9BKzc3QUZGRTJmR0ZGVU5LYW9oeFJOSHg5VFpKNkZveG9mYUhaSXQ4c2thMk9mZHVUdVF1S1JIK3JvCm9vOHgxVjA4dkdqNkVHTmR3L0k1a3M4VHQ5MzIxRzJUbVNXWXZhMGxiN3Q5VXZxMmZmSTJpMGFhUGkwY1NhTjZEYlhLZUtUcDR3T1MKaUZnRm5tRTFwQ3BBcXJLYzdrL1N3NVFMR1dSK25Bby9Ub1VmcDhLUFUrR3h0RkVma0ZUcExEL1VoMS83UTVtY2hQRFZQN3g1L2VYYgpGNi9mdlhqOSt5KytHSFR0OFl2cEg3N0JOMG0vK2ZMWnUzY1BiMStMRW43OThzL2ZmdnRNMUcvNzQ3QnRWOXVhRm5oT2wzVk5oN2dzClY3S055eDlodlpLNXRQSkpyL252di81SmZuM0hQOTNuK0s5LzVzZi9JWC8rYnlIK1NWNys4S3ZEdi8yditmQzFYdkpyK2VYMzhDWVAKcjRSNGRxUERMMGVxUDg4dmgrc3YwWFpYdjViL2YzYjk5dDN0aStmdlhyeDUvZXp0bnc4L3A4bmlaOGMzYjE3SzIvL0NldUtydTY5Zgp2SHZ6OXF2anMrZi9JYjMxMVc5ZnZIejQ2dGNQejkvOTlQQmY1WUwvVS82M1YvMHYzN0dCVzc3TlAzSTZSQndWcURiSUVETW54aUlUCm9sclNQenRBdGZwWmdjdFc1N1FkL3ZVWkc5cDFYQXJoYWs2cmpIdTlTaUxaYThmSXEwVVJ1QTU1dTFwRnBEcklpcitTcHZJaEZ4elcKS3U5Y3BYcU42WkR6VlpDMWRYaU95MnEra3NWYkR6bGVyUWdCRmNuL2FwRlZkVmkyS3hINmNYYnNlaFZrQVI2V2RDVnJMZHBsMjlVcwpYT0dRNU12Q3hvdmVMZGFySEdIUXIvTlYzamFab3VVcXdmakt5OHB5SlNxSTFGb1JtQ3QzVytVdTg3SWVVdFJuQWlIbHVoMlN2SVpJCnQzcVpFRU9vNVNERFhJT00vVnF1SUcvQ1A3NGhTbFMwSUJuT1hFQ0lxZHFycmZNVmxKTERzbDdoN0o5RGxLNEpzaFlQUzdoS290OGMKV28yVXJ4YS9LRnlKb0xxMng0NXJScTQwVFptRzVHVHJlcldFYlRtRUxFTXFnNkJYclZkYlNPc0JOd2gxNHdOSmk5SldYWEFlYms1WAp4Z1NFeWZoRjhqYnNzaS9DbGJBb2RIV3FWM091NGJCSUh3cjdFNEk4QmVaRElEdkplcDMwT1NDZWgxRHNOUlpoS1J1ZVdVWWNuU3VmCkY0VERZcnczRzdDRW1TLzlLYS9LMFVRclhCWnl6N3pLZTZaRngydkpWL0trTmw0cFhNbmZNb2RXNmRjZzd5V1hWMUVuRHVzaTQ1YmwKbGt1VW0waTdxOXhNaGxZdmt5a1hwT01PWlVXMGRtVW5DbmRlY0puc1NFS1FSWmx5a0haV21XV2h0RWtscTJSRlc0ajZQYVJaWG1pVApjYStMakxNTWsweDh6bUNaa3NMdmRjVGtzYTdXV2ZwY1ppQ2NUREtWY0RONXN5cFhaNWxUU1dZYnAzU0pPdXQ0bVF5d0tEYVJrZGRGCk9pQ2g5K1JlOHV4elR2Rnd0c3B3MWI5elFkOXl5Q3RUMmFFKzE4bXJrU2dUQy9rSU9WczJCRjNMdE1JYlJIYkEzRDdyNUpISGtxMjYKMTVHVkkwcmQwSWdSL0ZZK3U1VW9jM2RiVWN1YWtibkdGMnYzY2tLYnFYaWdYc3ZmbzdWejhtTCszaW1nSTJSWVNwSTFML1BxMVk2NAo2THhLTWl0bFA5NUFrTzFWT0lTdzJpeWoyQWc2YURMTGdxeU1YbXZSdS9aMm5HQjMwOHVjR0s5RVk1VkJhKzJFcTBWR2Y3aWJFZlF5CmY2Wld5NSs2dFhQeWJ2N1MvK1dmNUo5L2V2SUc4WXR2di9yVk05bFRiOTU4OCtldjN2dzdONHkvZi92bXUyOTBoN2g4eGE4ZnZubDQKOXU3aDY2L2tGcnVkWkR2ODVLZUhmLzJYQzN1S1RJeTh6c1FVQ1YvWjZQR2NTNUdld1c0aXJLakVQTzRtUmMvbDF0MWtxVmRseTdJeApZc0VzT25NN0Via0o0Q3FWQ1NKNnYweGxtU2hWZUt6MHN0WkFRbHdSOXRoRlFkaEtCRkVtaTE0bXF4RlJCNGVTdGZGRzJLd0dMM05pCm1EZTdMbUtYbHAwNWhOVW93dnZXdUEwVVhybllEdDdyeWNUVmVuUFZCMnVVcmVvbXp3dWRLRXlHODd5OWNRWEQydzVuM2JKZjcyRkIKZndnVHFWRzZWYmpLcXgxUjVBOXdyQ0RzY0JHaDF6bFd3RllqbzJJZjlRMlF2M2p0VmRDRlNYYWwxa1lqMkoxYVI1TVlaREFyN3VUTgp6THBNMjYzbXZtejc0N1JLL3NDdG1aUFgyazM4M1pSTGFhNExrR3F6N0E5MERzMjVoTlV5SGMvTTZWblZ6eTUvYkl2czJEcmhvdXlkCjdORzh3QUdibFZWaTVRSjBsNE9JRmNKdjR5emY1aXdNR1ZNSzIvVXNlNDNzQjNqV09SaXZuSVU3cjdLU3VWV0FXd1ZoMzlqc3RrVzIKMWlxYm42emtUVGFmd3lhN2dFZ1NlaGwyQUhtNVRaaURNUDREOXpYWmZUWVJla1M3a00vQ0I0S0lNYktIYkZ1MDdVaUlKVmZkUjRUcgpIQ0prRzlHWTBKc2l6SUVnMWF1SUc4STE1clRZWlVKYzVJME9zdWZCOXNtYnJWVkVCOWxFNndLSjZMUS9UbllXTEE3c3JYTGZQTXY5ClgrMkllRi9zeFBLZWVVbWNScGcxVVhoY1FKZmI1K2ZleDZYR1hrZjJlT1FvNlkwNHdXNmxWemxSUmxpMHYwTnJwcUJybDdYZnl3bDYKbVQxUXIrV1AzTm81ZWJIZFhBdUg2MjgrbWJVRlNJK3laVUx3a0wxZkYya2paaGtsR1Z4NThxdFFaYTdJc0ZYTVlQQVNVVlJySXlpUApFc2xZNXNCUVMzcHhGY21vdCtNRXU1dGU1c1J5QlFYODBOc1JrVG5MOFBlN0dVRXY4MmRxdGZ5cFd6c243OVo2VDNVcjl0NG5yOVVnClV5VkQzc1dVRWE3SURvU09nRTEzbGJFUmVUTUlLeGZobFk4V1NzUktGVFlqUTRTbHUyRmg2SHlRU1FaR0s0dzNZNWFMNUhzVnNaNWsKK3ErekxJeFE0VUplWXlPd0l5RHJ6MnV2Skt1R2ZEc2w1L2RHRUkxbDRPNUdGT0ZsWFdYMUJ3aVc1T2FMWFNiU1VDM1lGSVR0T25zUAowQnVLek5sQVhzUFdSWW9xM0hXeUNyU2RFbVg2TG41bG80cEVEQ01JZDUwTjR3S1dDbmZJQWExdklsWjJDcStVSFhhck12eTluanhqCnljdkNMWS9xeTBBUmpXRUwyYTUwS2htSWFGL29yTVRueDVyTkFUckJDaTgrbmovb0lQRktXWEdKYzFqMnlCWHlqUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJak8xVldyRGJ5R3ljWlorUVVmVjlOSlRlUTNHV01STEd5dWxIaFV3K3lBVTFzRjdCcXA2dEorYXRiNXdjZll4am1JRytBcGg0aGxKUQpPQUJsa1hVZFpIdEcyQnk0Y0oyRExSLzVzS3p5Z0tLOUpqQi8yYVNrdTRUamI3UGUvM1NHbm16VDBCMDRTUU51VTB5NjZWU0loL0xXCkt6aFlVVjVBMWgyRVhTTUhTNmY0QkZuQTRZZDZVVjUvRFVOVGpXQjMxQXNiVlRvaUNUOFltaElwZEpWbE05elNLSHBsZTdSV3J6MTkKYSt2MExiMFhSRFBWM3NHTW5uTlVLUjFqV3pPWWlGTkZEeGJCZXdaRnhuL0xPMHBSTFV2SG8xR3hzbW8rREczSmVnZ1lrWDVQbytpVgo2U29LS3gvcnlTNEwrTlhRVnFQczd0bW83ZGxhVyszNVQ5K3o5WUNzRXZhTktMTFVURi90aUVEVVo2eXdwTDI4VkZYQ2crZ0dDYlBRCkNjNk1rSFdtMTFxckRtdHJweEhzYnM5dHVpa3h5UlNCbU52YWlmWkM3VzVHMFBYdHo5UnErVk43TzZmdjlyaTA5aW5tSnVpSXM1QkgKK3hMWUd4UXROeTlCSGNpQVdMcDVLU3dpZ1ltV3RUTXZRU2lWdlc5cjVpVlZHSVFMdUhrSkl1bzhMOHZPdklTMk5naHNibDRDcitUZAozTHdVYUw0UVBqR2FsOGd0d2ZQY3ZDUnZmZ1h6ZFRNdmdSRGozcm9VNHFKU25GbVh3RjFsZXcvTnVrVFdKMHJIenJwRXZpbkNZN011ClljT1FUbHVhZGFuVjZOWWxzTXhscWYycFF4UlJhS3RyTXkrRktITi8yeG1YUUNwVk9MUWJsNW9rNE9ZbHJMQ2E2cll6TDRIeDVpUjgKdXBtWFpCRnRFVlkwc3k1aFVjbnVzVE11eWRMTE0zck9iRXV5L0dYZVJqY3R5Y2UwMENqWVRVdmdCd2tIcEpobFNacElhZDNjc0NSOApXd2FxN094S0ltWXpNNTZibFRaS3lLVlpsV1Jud0p3ZGJVcmtmVnNKemFhRXJvTVE2U1lsdWZjVlhBQTdrMUtRdTNKSnVVa3B5SFROCkFDSzc5aVhjbHJOMk5Da0ZLSytsVzVTd2ZjNTFYWnBGS2RTb3MzaTBLR0dub2xqckZpVzVyMnpLOHNodVVqcGJXQ2Q3RitOdHdySXoKS1RXaVc0TXdIV29XR2RqTVJTRXk5V0FlVFVyWXJTS0VPNjhUWUxTRXVjMGJjY0pvNU9sRU13VzFadHhZMU80MW1wVGFBL1ZhL2g3ZQp6dW1MamJ4YTVLRmxaMUxxUkRNRmdTK21MVGRia2NpY0NKdmFkaFlsY0ZTRSt3eTFacjFwYjhZSmc0Mm5FODBTMU5zeFcxRy8yMkJSCmFvL1VLdmt6dDJaTzN1eHYzYUQwOGRxOUxQQll5WVhNT1BkcXBNcFNwb0d1dVJGazR3YW9WQWhCcHd2WVVNNW1PWVpLc1VScTVtbWIKNFQyUWpoWkpFWmZsWk9aSmJzVlNRN1lOZHhDWS9SL0duU3lNcEpueFJjWGdXaFIySWs4ZFF5T29CUjRDZXVtVllGa3ZJc0xYYW40RgpKMnlidHQvczd5QmlOY3dySGxJMk0rRTRHMVVFQ2lNd3hzWjFJT2pMVmRFMnVJUzlXdXU3WUNicTg5NDhNUTZVV2UyYjJBUkVDRkk3ClZLY0tVeFFaZmxFckxqMEhNWnB6QUh4eHphRlR0T2ZnaEVqcldDK3FwMkJveXlsK1R6ZGJHN1dZUzY2MUJkMkpvOWZ1NlJTOTBwK3QKMWV0djVXMmR2ZWNQSXVvMEl6L2szSFhkbHIwdkRTb0tPWGR6cHFHZWFQT2xlOU1nbSthOHVsL00zR215VTRzSWlDdmRueWJhdmV6RAo5TERaU3NDMkl2SjkzbnZVS09NbDNxRzQwTG5xM0cwK05XZ09JaGI1bWpHbkdsVGN0V0FTdVZjTjNJM1AxdHhxMkpPNmhjdjlhdGk2CkFxWjA4NnlKdkNDRG4zSjNyY0VLSUpQZGg5QThaOURHUkJ3czNia202MEJ1empYb2RXQkJXVXk0Ynl1enZZTjcyS2d5eWExR0YxdFMKMTg3T3gwYkpNeSt4T2RuZzJscmt6czNMRmloNkxIc3ZHNVZycUNITnl3YlJVM2FqT0xqWkZuU0lTUUhkenliN21MNlJPOW9DOWxFWgpyZVpxbzdraEIzZlFtYThOTDY0K0ZYZTJRVDNmSXVhM3U5dlFnZlBpN00vOWJWUnZOcnlqTzl6aW5DQmVidDNqSmt4VUpCL2JrSnJMCkxkSkZVa1AzdWZGS3ZHOXp1c0d5Mm1hUE85M1FYQzF4N1Y0MzJDbXBwRFMvbTJ4dElxaVpnYWM1M21LRVJpZzdaUE84UlhER1FLZWEKODdVdzY5emMrZDVnRXFLWTZjNDNLSmVMOVBmaGZHRSs0bjdEOTF4V3IvYlVLaHR6M0xvRERvWU12a3h6aXpYS3pnazMxRE1IMjlCVwpvOWc5ZDQ0NE1JS2E2ZnkxdHFESTBzRGI3dGtvTzEvY1VLODlmMnZyOUQzUDNIRlJ1aXBMcCszOWNUREFjTzQxNTFjTXN0R1cwRjFrClR0ZzU1SG90MjMrR2hockZicmh6eVdHRU00VGszaFRVa2hDSEd4cGg1NVBydGRxVHQ0Wk8zL0QvdDBKVVNFSE5sU0hCS0dqVEdic2gKOVRwOExkb2hkdFlaUmpxbzM5S24wR1JwYnlaRnVCOHBybWlxZzIxRnZBNGxFV0hvQzJ3dXdpbDBMc3F0MU9EbkZOV1lrbnIwZWoyNAozQ2pHZzZQa0RRelJlRmJJWUwxK3BXZzFkcVZzU0x5blhEa25tRzFnSk1WK2RQYWFKeHBRZ2o0RkcxbWUrM1k4VUlOdU5tZ0hGbWxZClliZEE1ZzRmQTh5VVRsSE5SQlpQbXRlaG5uQ2VDald2TjlVcGMyYzBuU3F2b050M2Eyc1JkaERETXR6VEtjOXRKUGxvdlpvL2ZXdnEKN0MwZmwyMCtoNThYL2h2T2daMmpGM1pjSFYvMzlNS01QOE9EMDF5OVFRUWgyQXIydmw1YWlubWx1M0hCTkhTV05Vckt3NXhxMU1YbgpsTHQ3WTNiTzZPN2VSdG01ZTNzOTkrTkdyb0EwVWxMcGs2cFRNWlI1ZFBCaUY1dXpqZEcraHg3eCtVYUl3c2pwLzJwUGhROGdydDNyCjIzWk1kOFkyd3M3ejI2dTVWN2MzMVNsMnk1MzNseHNyRmZqV0Z1UmpXdGI4bGs3WU9ZQ0hhdTNwVzFPbmIva0QrSURCcjRRdjFMMlcKMktpdUpUWnJvR3VKbUJZMHFveGFJcmlIaVBxeGFZbFFxRUlWSnVoYUlpd090QmVPV21LejQ3bVcyTXh4cmdEQ0RGM1dXSFphSW5TLwplVkFsWVNKYlpESzdrdWlmUngzUmFVMUZoSmw2aFgrdjZYNzArS1Z0M2V1SXNHS1ZCYy9XNnJXZWN4M3h2QzlQN1VpcldpeDJPbUtuCnVsNUhzd3htVmRQOThNZWFjdG5yaUxUNnBDVU85VUpWbTE5dnExRkdmVzJnbWw3WDIzTGRyOTl6MUJIN3MvVjY3YTFhVzZmdmVkbWgKL0NtbThDVWJMQVdHWnpoOVgrMnB4WlNlWlhFbjRhb2FCRmJWREptbFVkd2VUZ3ZuVUE4N09seHp2YTFHc1hzNjh6RHFabGFFMXBacwpSTUxGMXVHZVRuRmp1cmtxVzczMi9LMnQwL2Y4UWJ6TEVldVU3bG5aQ0NqZVUyb1h0V0VyaEJoRkZSeGlvaVc3ME15ZmtDb0pYTHdVCkd2NEIzZGdjMXlHVGc3NG9HTlJqVUxhcElvZDBzR2hKa1dDRkxVWjlXZHJtSE9RUTRYekVacXkyR01JZXNPQ2djbUVxUURMVkxvZkcKMkd4TndLbHNVUkU0OHJLSnV2NmFpbDVadG5XaGQ1V0dYdlNyZEpiTmFhajRDVzhsKzc3cTNmQjBWVkxnaUlZT3Z4VzFHMEtJRXYzUQp0RHRSNFdUVENIUitLNEIycHZ6SHpVOEJ1Q0ttdzl3T0tTeTRnaEhBVm1HdkZxV2JMNENkcDlMbHVHSVJWY1Y5cmh0VTJES3JmcXhhCnN6UnJHbXlBd2hjelR5YUhaNHNXY05qVFJPcE1ORHFrNUpwdnB1MS80V05WSGNsRk1RSVVDbFdIUEowREo1cGRYQlUvZ2l1V3NoaTgKdVZQZGJJQlpRME92OUVrQnNKN2FxYnJpamFKekpDa2VaNmdubTJLb2VXeXJVZXllZW1XakpvTy85cmFpYnBYRFBXUGZQSWRuYS9YYQo4N2UyVHQvekI1RUNZM1pBd0Z5NkZOaW84S3BUR1Y2Q3dlTjhDV0tZU01oWGN6UVhCeVpVWFdGbmhTMWxVUnk5eW9Telh3ZDFrZjVBClVkcWFOQVpoczFEN2dDaW81Z2JYUHFDR3VHNGNYVG5vRWlCOEw1aW92VjdaSENxNDZSMDRLeFc2c0kwU1lEbWhnaE5xWDhpc1ZIbTEKVVdUWk5BbXdVMHR5R1pPK00vaWRrVnNtY3RvckRyR09Jbkl4R0FxTWZmcXdxeitzL0tHM3JMTzlwbE9jTjVRZFZlMkYyQ0ZnTHd5MAp3SGxiMjZBOWdmdndZU0crNjJ0dU5paUFYT2lnekI0RElHd2orVDA1ditlbHFqMUlybEsrcXlKK3RQVUxOcHBpcG9tUUJrMi9VdGxJCkVjMGNGclE1V25lczJhMHIyYlhCMlBWUzJxd1dDQVR3OE5MRUhseHJCRHVsUVFES3JzNkQ4V0VYUXdOU2g2UTFyczNzYUZQMGZLNmYKc0JaTVNRRFo4REkwbmIzYVUyVnJxWXVhUE5hbDZsZ3RzRGxpYzlDdWQ0b3VCK25vQXQ3WjZ4WDFwUTV0TlVvYXpIV2RtbkhVVlRnTQpiY0VxQkl4OHY2ZFI5TXIyYksxZWUvN1cxdWw3Tm9lYlRGdDZ0ekRmdVZXOTJsTTNOV01DckVLM0dPd0htWjZNRldoSTRsMk1va2lICm9OaWRvWjZzMTVoM2JUV0szZE92TkdveEMxZHJDLzVTbURyN1BaMmlWL3F6OVhydCtWdGJwKy9aZWtBR1pzdllja1g1SXl6eDFZNksKcmJuUVhEKzd2UVFqeWIyd0VnSFJDTDdpWjdyL2U3VUZ5ZWJTMEZTaitDMzF5a2FGK0VPZm9iY0ZLRVVKL1k3MldSbUZQNWRYNmkvawo3Wnk5b3I4ODdLMlZxQytndXBNNVhBZnFBdWxYb1hvaVRLcWpnWkkxektLeHB0SXB5bnRnMG9DSjNLa0VkZkd4dksyQll2ZlVLeHMxCm1tRFgyNElmQUs2SGZrK2pQTGVudFdkcjlkcnpXMXZuNzlsNklNRzlHeFhQSklxTCtjOGFGZlkxQ09IZ2hETm1uaXczaW1vQS82WjUKQzUzeTNNUVN1dmlIZW9CQndEdlltbW9VdjZXTENFWTFxMFZ2UzFnbjBKVDlsa1pRRjRFOW1GZnFMK1R0bkwzaUQ2RFBOd3d6ZGdwNgp2SGFnYm14VkszT0pPcW9iVzlDYTRTaHlXRGRNRXFtNi9kMkIzUkQwMWF2Z3lHN2dzRFBzYkEzYUhVVVV5RnNOYlFnQUZZS2tDZG5JCnNkM29LSFZvT3JnYk5WTjJINDJCdTJrR1dkYWxvN3NwNUFCMjB1RGQ0S2RwTzRGMzQ4MElXR3I0YnRqRjdFYW5uWE82RHhrUUduOVEKLzlwQnZLSERKRlZkREZMTm5Sclkwb2E4YnBUbjN1M2c5ME05dzNBUGJUbkY3K2xxa0ZHcjltSnJTdTVFSDJpL3BWTmNFdFJINi9YYQpTM2xUcDI5NVdUMy9ISGh2ZXIyaW96MDdWVkVhRFZ5Tk9TV1RaK3NZN0VaUmM0VkJ0WWQ2aHVidVRUV0MzVkV2YkZUWnhWZkNhbHRUCnhlekEvWlpsTUJmM1IydjEydE8zdGs3ZnNuRXptRzdoN0lQYUxwekNzQmVOS2dKVW5nTWlBa1hJS21ycEMrWkRuR2NQL3dpMnNjSm0KVzVaMUhlcWwyWUNhcmFWRzhUczZVMUlxVEd4QWVmVzJNS0dXYmJ5blUxU3MweWRydGRxenQ1Yk8zdkVITVUwMFdESFdFS0hVSS9TZApzaGhOaG81OXgwTEppVjR1QTc5RHgra2hrSTUrcHljUExLREIzeUhuYkNYR2puOXZGQlZ2RkFEZnF6bTJIY0syMmNDZHNvVlIzekVxCmVTbms0UWFDcDlDbzZvaWg0TUZDbTJ6ZFlQQndscXNLNGZCMjlENGx5RTVaWVdEd0t4dFZwSms1MHFkaE1IamdlK2ltYnpENFJsSHgKeDJEd3ZaN0QyMk14cEVHbnVObkJCU2VqaGl1Q2doMEZIK25tQVVUQVVmQkE1cXp0WVIwRkR6ZUUyc2tjQlEvM1FpcHI3aWg0NkJKZAorWEFVUE56c2hFODBGRHgxamhSVHg4R2o5YVo4TkJ3OFVBZTB0emdNSGlOQXZ0cHc4TmhJa0RqSEJDUUR3a01SWCtzQWhNZEd4V2M0Cm43SW5kbUJIaVdNUUE0SXBYdTJwb29MaDZPS0dPT2M3YndNVzNnaytTWWhmNzdVTTRqNDAxQ2gyUTcyd1VWMnhhMDBCT0JWSDlIMmoKNkpYK1lMMWVlL2pXMXVsTE5rbmZJZUtBZVMzQkF4MGR2dDZvRGVLTzJVOW55VURKUThoSHA4SndCY2RmYnd1Q05tRS83WjVHMFNzTgp2ajdVTTRqNzBGYWo3TzdacU8zWldsdnQrVS9mcy9XQXc4VXhkOHJpMXV0T0ZSWkdJSXdEejBXQXZab0pyM1o4ZXFNNGF5S012ZGR6CnBIdHZxMVBzbnMrbkFSRlAzWVNHbE43V2JHL1c3MmtVWGUzdDJWcTk5dnplMXRsN1BpN3hmZzVjL0E0czVzRDRoaFZyeVBpR0ZXdlEKK0IxV3JHSGpHMWFzZ2VNYlZxejV3M1pZc1FhUGIxaXhobzl2V0xFR2tOOWh4UnBDdm1IRkdrUytZY1VjSTcrRGlqV1FmSU9LTlpoOApnNG8xLzlvT0t0Wmc4QTBxMXBEeURTclc2NHhRc2VhZWE2L1E0UElOSzlidzhnTlNyQUhtRzFLc0krWWRLOVlnOHlOV3JFSG1HMWJNCklmTU5LdFl3OHlOU3JJSG1IU2ptcVBtR0UzUGMvQTRuNXNENUJoTno1SHhEaVRsMmZnY1NjL0I4dzRnNWVyNUJ4QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJREQ2L0E0ZzEvSHdEaURtQXZ1SERHb0oreEljMUJIM0RoelVJZlhkak80aCtodzl6RkgyRGh6VVlmWU9ITlJ6OURoN1dnUFFOSHRhUQo5QTBmZHI0V1QzMmdCam5mNGNNR3FtRzZHbmk5NGI0YXhuMkhEMnRRK0Y3UDBmSzlyVTRac0ZvRDFUQmRyYTJHKzJyMzNPSEQyck1OCjlkcnplMXRuN3preWYzcVNkdml3Z1dxd0xvZXlPL0NyNGQxSGVGaER4ZmRhaHBzZjJtbVVBYTAxVUEzVjFac3k0RmUvNFFBUGEwL1YKS3JYbmJ1MmN2dDhsOWJKN0VtRnVFeFpoOXA1R2hTV2hxSlNWeVZBS29qZk0rbElEVjZOUlZQMTNMdC9yQ1pkS1N4amJhaFM3WnpNYwpLRlZXRkZqNTBKWnQrY005QnlGZ2VEYXYxNS9mMnpwN3o3WWVQa1hCUGtuWlJLMHVMV3FjS1ZqeHIvYlVvRkUyc01VVUlDWXhXSE5TCllaZTdmYU80RWNhVXFWWXZHTkNsTjlVb2Rzdm5ackF6YXRKZzFhR3RqTDA5ai9jMGlsN3BqOWFxdGFkdlRaMitaZS9MajljdjRRbWMKaStvY0lqT2FOTnFwc0cweGVRV1E1dGloQVRDbjRKOW5VeVdkb3BxWEorcG85UmhTbDllaHJVNnhleXBIZCtvMksvUzN0eVdVc29IUgp0SHM2UmUvcHo5YnIrZlAzdGs3ZnN6R2twWnFrZ1kwSEMrWFZub3JlTmZUWmxyT2xEZ0dDT2VnNVNGdW42SHNBRDFQaldFOTJHaHBNCmUxdU5ZdmYwUGExUjYwb0luN2NGQzFvZDdxaWY5U3AvTHE4enZJKzFjdnFHbjJVUmh0TkZLQktZK3RDU2dvdGU3YWtBUlVIZGh0MlUKbnRNbFdPS0poSEF3V0NxZDB0YlNHdU5ZVHg0Z09pQkQyMm9VdTZlYmZScFZrMlMxcGhiR3Z3eDNWSUl2ZTNzd3J6VzhrYlp6K29xOQpJejlCZ0QvaFpxcStNUXJUUWhkZjdhbUFuQ1dOYjlaWWRCbldBbTgrbFhNSzRFNVJaVzFXQ0VhclZoMy8ycHJxRkx1bE8zK05LbnBWCm9KempUY0hNYWlLQTNkRW96MDNGdFNkcjlkclR0NlpPMy9JSG1aU3drTUJQTEtJL3NqS2FZOG1KaSs1UzhQSFVMWVVEbElpcU9oTTUKclgzV2R4SlpyOGo5V3AxVlhUaTlFU2ZZclZ3NVY2SXM1SVZPY0crbWFMaEV2MWNaSXJYYkF4VVBxdkJIdG5iT1hxeTdVcVBxd0JzQwpXdHlQMklqU1cvT3F6czhVNVRFMlROaWtEbFdxc1U1UXhycXBBdHRxQVk1UVZRUFFkaHJCN3FhWE9SR1RBeXlwdFlQMXMyM0QzWXpnCnJsZDlwbGJMbjlyYk9YMjNIMkw1Y1p1RnlBSjFnMTZqVjNzcTVMdlZRbVVpSEVGUVZPYW8wb1JtUm5PSzg3RTFwVFRXdzl0dmVXeXIKVWV5ZXpzZU1XaFRTUGJSVlRhem85Nnc5c2Nid2JLMWVlLzdXMXVsN2ZnNXg0cVF2WTFZak5PVnRHRWRmN2Fnd3RzQWpEQVZ0aWJPYQp6U2hmUnpldkdFRUZUcmpRbG0yb05hdTNiR2pJS1g1RHZiQlJJOS9rMEp1aUhTZlY0WTVPMFN2OXdYcTk5a3F0cmRPWC9DRmtYRERPCjFSTEdCTWVJZEdJMFVBT2N0VVFMdG5nMm9GRFcxQW1xd3FVclpPa2ZxMkdOTWF0SGE2cFI3STZ1L0JrVnJoRmlIRnRiU0Y0YTZuQkwKSStpRjdjbGFOWC80MXRMSkszNytDVWtiekd6eDFMSkFISVBjcURBMlpaVzNwQTIxQjJyd0hqeVdXMW83UmQrSytYTzNzZDVNODhYUQpsQlBzam43ZDdCTnlKZ3JVR3hLS2FORExjRU9uZVAvcmcvVjY3ZUZiVzZjditYbTJWaUI3a29hK01pengxWTVZUFNuQmF1WkR4dm9zCmFzOUZzdjVPVWVGaThVeDhyWjVJV1VncU5MVFZLSFpMdDhNb1ZmcU11ZFI2VzNIV3dKOStUNmM4dDRmVlordjE3UEY3VXljdjZWMzMKMmNLNkhnL1grbHcrUTBBamsxbDhHNW9ad0s4RnE4N0J6UEtpY3dIT3g3SE1BR1Zsc0xvUnlsd1JlMUZ6UnpJWEdyaFNCeklYakViYQp3NWhsN29zUUVEdUtHZWtiS3h3TURtSmVrWU9CcU9ZQnc0eXdyUlhENHhCbUdFcm5VanVDR1U2SVV0SWV3QXl6OCt6SUp1YmpKVVF4CmRmaHlKZ0I5RDE2V204MGNhY2N1TXp3eXJoMjd2QUl3UU4yM1k1Y0xBVnhMaHk2WFRkWXRzY3lHWEthSVRPUGdBRnlHQ1hjcnk5cVIKeTRHUVF6cFV6WWxJcE15NmJYdnNNdEF5RWJab2h5NURGbHRTQnk2ZmpmYmU0bGhoZEFZYkdtSExuV2dXYk9SZDVDZzZHQmtoM2FtRQpQV2E1d0Erd2JwMVk1TmtxRkZadnB4TUc4SEFuR3NhNHQyTXc1SDYzQWEzY244bHJ0YWUyZHM3ZTdYSC95aWVoT2VJZXBReUNBNVFoCnpqZHdjczA3V0hKaHJFaHFxR1RoejhpQzB6REp6Q01UOTRoaytEK0M1ZGtqSUJtaWN3Y1pZMmFqaVJHS0xPdDNnOTI3RVJOU3hBMzQKWWdRZG5XQ1EwMGlaTy9CNDNpT081dzQxQmc2NFlzY3lwSEdFL25HQ000WUMzVEhHMFI3RGtjTkltclN1ZTN6eHdpeDFuWWFFNmRHdwpwUVFYTDliSUNDMDJkQU0vWiszVEJpa0daSUJaT3djM09lWmZ5VXZIRTFkN0VrY1RZeDdOS2V6QnhLWGF3allzTWZwbFJCSXozK3k2Cnh4RUxDOGtobEE0amhqRjRYVHVJdUJZYnYrSHhBZ1BiNGJweUNERm5uS09IZDlOdnY3YkJjaFp6ZmpYY2NDY2ExSmM1aG9BUmNqUXcKbVBFcFpoaHpjNmtEc1FBSEgwSnZwaE1HOEc0bkdzYTN0Mk13NEhhekFTemNuOGlJL1ptdG1iTTM4eGVIQlMzbnZBY0tkNkpqZTJtWgpIdEMvQU9LWEU0eXdDSnNsYkNORVdIYlJkV3lsRVhZQVlTYzZwdGZiYWJCZnU5a09IR3dQNUxUK3hOYksyWHY1Q3lkRy9BNGczVmNqCjBiRzhXRnRrR3c3M1RjamFXOVk5S2hoV3IxQ0hTdGloNktiMFpwd3dJblE3MFlDODNvd2hmZHV0Qmpod2V4NnYwOTdDMnpoOUxYOWYKNUdJSzg3YUhBbmVpb1hmUmoyR0UvV2JHSGc2SVgyN3h3UHBUWC9SYWNFMVNxL1IyR21FQTVIYWk0WFo3T3didDdYY2JFTUQ5bWJ4VwplMnB2NS9UZC9LVmg1c25NOXptZ2Z4dlJFYnV5T0xiRVBEWUc2b1hwcWRCelBXQi9oWmt0c1F4RXVEZDVpbmhyeHdrakVMY1REYS9iCjJqRkViN3ZaZ1BwdFQrUjEybnQ0STZjdmRza1pCcWQzWk9ENUNCZnNWQWY1SWE0MExCNGFEQ0NnN0w0NHIydVBGNFRmT1pUWWlSWHAKbGJjQmQ5Z0lJM1N2RVIzaDE5cHhFR0M3MjRnVTdBL2wxUDdnM3RMNUMzNTJyZUtqazBVODhnVEw0V2UvZVAzdXdpRWorUFhzZHk4Zgo5RUYrK2ViNVYvL3o0Yy9hZHA0UFAvdjF3N05MUjVQY3ZuajExWmNQYjU4L3ZINDMxSC9zSGwrK2ZmamppNGMvZmZYck4zLzYxbDR2Cndac2t1dTFqTitDWkovLzk0Y1h2Ly9EdTBRN3hxbSsrK1VvNjh2N3RtOWZmVy9lWEQvLys3c21WOFpMU0t5OGV2djJBZDd4NTg5TGYKVWNPNzF2ZS80Nys4K1ByZEh5Nk81WjJla1hQMyttdTc3dUtaT2YvanhSOGZmanJwTCtwWHE4N1BsVEhmVURLMnFxanBXRU9hTHA2WApvd2pwRHpzMngyN2xEVGVNMHU1MlBQZW1VZHRqL2JKZmY0bTJ1L292Y1dvT1RjbXlJOHc0ZGpndU9HVUtta1VOY2RZemlhT2ZTYnpzCmtxbGt6ZFdMVklDTFp3RUhFZUlsc25jamxTVUlBUUVKY0tHck9nNEwvMXlWNEJpa2hmaHMwR0tsSlhXMnRpdHlWS2s5Q2tkYmdkZEIKcGJtWjFNQWVxZHdGUUJJWHVoY1RzamdWWkdHQVVpL2Jjb0g1SElMdzRyWXFwTUFBbEF6RXpZNUFJQ1JMQ01haGhZQWRUd2hFQ3JYTApBSHhFcHJHY0ZiMVVlQUJLTW0wUFFnQ1F5U1NrMk41TTA3d25XSzREUmFRUTRERkJSbFB1blRRZndpa2dleXBmVFBiakxVY2lsVGErClBXQ1kwSjQycGtaTlNtREdOeWhmaXdNZ1IrcXlCcjB3TFp0U01zY2pCOHVSTmRQZzFxL01sWHRTbE02aER1ckNPK3BsQzhqU2pOSm8KZlZsdDVKQWZIRkVIT1BNcGE1Z3dqVjNJTmJGcURpOHEvOGh4c2phaEUvRVFWQVNRMVduVkJLR3NGdVlrMG1wV1ZQVUt4QzhzQ3lVNQprSDlkN2ZRSmhycXV3YXlyVEdFd3cvR21ZZGg2bGdid0RzSFRicTRPZ0E2dW5hL29DcWJXZzN1bExrWlpsQUl2Uzd0eW9TMDA0RkN4CnhZelB6QlNNL0ZrODFCNzNaR1FXS05HTkhaQ1VWdGVKbzQwMkE5QkpLQ3JMemV5S3dQTVhITThUVEVhUVd5NDBCcFZWVlM1MHh4S3AKeUsyVy8ydzJXeGpuRGhDTUplbjRwbG8xbzF4ZE1LUXp6RVVLSzAzSmp2TGdZS3N4RWI2NVJlT25Tb1FVeE1Tc20wbzdoY3V5MnRJaApaZldIQlZUT3JzdXNvMWthMFhyT0NtNWxQQVVvbEVuMEtoaUNZRUxDaUZkRE9Hb3l3aG51T0xpenEybTBHeXpwVXZmR0wxeEVLOTJZCktGNFJlbWxHbnBJTmpuVUZqeEUxaUNqL1pmV0FOc2o5U0hFQ3d4YVJkck9HMUFCd1hLTTZKWm44aExoQ2d4V1F5T1M1Z0JSR2JSdlQKa29BNGpkaWJvZUx4OCtJdWF2aUFnV09Vc1Nyb1NuajRrSWR1WTlwVVRWT29pVHZ4aFkwZHN3MGtwQkNHUGNwRGxMQzRLck56V0xCSwpLcFZLc1Bja2lVaGJCUU5mWkVqUXFtSVpMRExNSXh5Z3BraUhnckNHSHM1RUhBS0lTTElubnd1ODUyaUd3RU1RbHFSWmZaMVRhSEJNCkptZE9jektJUGhLelZXWVZEblFKVjdQa2dRUG9teVZDRUtEK3pveFhxMW9IVm9scUFMUWxiVkN2UXpJWEMybEFrWlpaRnhrSU5HTEQKdkxJQmpENzdVVlpDV0wwN1pvVFV5N2NnSnJ0TWRJRmx1S3hxaGc1ditMbDF2bXpWdEFnSERDUkdkczB5VVdEZUsxa0JDclRzbDAyVgpQWDJ6b0hjcmlGaUpodXFFcmdCblJad1YwWmxnZlFNY2YvYjhqQ0RTbWdHZ0g4NGdtMjN2RW9Md1REWDVzQjBRaHF1WXZYS0ZsMVF0ClFGUkRVQ2RWaS9xck9HNEx1NDIvR0x6TWtYMnJRTmd0Z2FGdVBHbGkwZkJsT3VIaGNGa2RoRlJ3N2dOdUJUZ09RL0ZocXlzOENhdFoKaUFQU0M4SlEyeGdYaUZIbTRySnFYOU9PSFBWNE9OSFJpMEduTnhKd2NHWmo2d1ZyRVVUYVZ0ZFY4MG5pc2hLTXdMdXRnRXZIeGw4MwpwTENVM3l1Vk9SaXB6Wklyb29vNllXS0JwU3JUa0VZR2doRkdzdUNLclhkVHY2MXM5eHpZVEIvQ3V1cThLZ3c2eXJZckY1czE0WXBKCmgyREh0ZVdoVytZaTAzTUxIRUx1MHJyL2J6QVlaUjBpeS9QRzhFV01ZU0U4QjViN2xXTVdRdW9DRWF6dm9JR0Q4Zk9zSXkyclQwRlEKekdzaGhGUWNrdDJhUWk3MHF2anBLdXVObVVyMWtUZlIrZkFLb3RzdCtsN1Nvem8vbUNtNDBMcTNJR0VpWEhMWUVDRENWYVo4WHRlVwpBMTYyTFRoYVlSU2UxYVBCWEZFRjdHSFZKQzA3NlhCdjZxTUVBTVJUZ0tYYmo0OVlORFl2RW1uS25UMXVBQTBIWktQWHdHbHVHWkg1Cm9HT1RKVFFrV0hnbHVEWUpnTVVqYVJLRkpSQVlFeHZBbFQxVUFpbytUWExZREt0NktXWWVMb1VVNWJySmg1bmF1QktlbXpDZnNNQmEKTGFUY1o1TE5ESjViTlVFZ2pLNUpYanpZbHNVMWcyaXRUUmMzd2QwTWg4VldZNEg5QkxkRktFMk82Vjh0a3hBeXFabllNVmZHUHJYUApnY0Y3aTVxblhGclJTRkhJUlVWcmFXd3F6MmhSdVNjdWpHMFJucHNkZExocUFpZ0UvWWFzdWhORlJ6cXY0dkFaWndPRTNDUlZTRm9MCnBNdW81ajZjTTR2TS95SzRhbFRhd25QL3pLeWdqNWhvZ29hbExVZXpWaUVWS2dpMFdVQk13bGpncXRsVDB5UEFEU2RVTWRlTkdibDQKWHVFQ3pxblpGTWo4MHFMN29MNVhWYjh5WmpuTldSbHhYWW5aNFkyelJIV2VZaDNYMGlXM2pkdXNlbVR3RVNPQlBLRTBsNjRRZXlzMwpTM29yL0NJKzlycjVlMFFlZW9iUGVWVmNRMFpPTFJEbUpuc1huVkxJeDB1K2duRVNNUVpwK210U3ZxSkhCVmExVHQrWXhCN1FaNWxLCmtPSlhaMGhQMENMSnhCYUQ3Qyt5V2tTRHM4dG1qZFNqWXBBTVRJbUZpOUN3T0d0V1gxMzlRZTJnejkxZWdhZ0VFQXR0VDFWRGQwSEkKbVBZSlRrcnNscGl6S2JUTFpvQlRzZlhRYmdZQ1lPV0tWOWU0a0FCeHRjejZic3JHZ3ZYMnFqckVzbWlpWlRoVTY2cm52N0dMc1BpMgo1SHpNd1ByY0hDT2RRTVVlVWZSTnkxYVhjZnFnRVhndldjZ2JRazViTGNTWFluOGk5d0dEb0swUHZwbEJMT1FwUE1KSVpXaTRPTUFPCnNKMHYyYlk5NW9TS1BPMGl1V1FDWW9GUEdjU0VaR3VJZ2VlYVFseGtVQUpqN3hHSFZ1YlNMbU5LdkdXeGtRVUIxZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJSS9aTDBDUjNqRGNGb1hvd1FWQ1pLek4zY3FZQmxUb0ZHUVJkM0ZGUHZnRXZoaExHWGhUWkVaN0ZqRk9HWm0yNkFNbTlVTnRWbTU5TQpQdDNRRzF1TWxmY0NqVXNST1JXd1BFQ29ub2t5ckhtL2ZZT0ljUVlNZUU3WmFnVVNSSWpRM0d3SURNYm42cjJJL0FMZ1o1aTUwQ2d4CnJzd2dMWE9hOGtzbklDallkOVJHcktiK01TNEFtK1ZNK1JkQld5cUI2V2Vkd0NZcXRUcW1vbENKWnk0eUovRG9Fdy8vTWlMc0VWQkkKTkZ1cE5MMUFyV01DZVp1S0N5QldwUjlic2lFMWh4RFZheWdxWVZseFVDM0VIR0JMSVRhRHdhQS9NQmp1VVpkbkJFMGtaOVhxOUlqWgpZajZZdWRxeE9BVWRWOXBWaEFtZ3FaeFVYU051QW9NUnF4RVFOdzM1cmpFcjVHaUFNQXVuN0x3YXdoWkhDU1RxUlNvSmtETXdwV1N5CldSWEJ1bVprdmI2YWJWWWg3MnMwaVJ6TGlWeUlsaGUvRjlZWTVBRllYbGEzUkZma1NDNG1nczZXa0JLWGJRNjhuemROWEFoaXBHSzYKRWIrRjlPTWJkRzljQlFzTXdzLzZhZ25ndGppMDFLM2kwSldnVFNKbjM2cjRMazFzdG5ZNUhrTk5TRklzTHBjRmxRcHhIRTNRcEtYYwpiSG5hVURJdWpEZzNhS3pZYklzbHVTTjZPTklVcFI3eEJkQU9rVm0yWlppTkdrT0VPSExXNFZnQUNMMmdWM0VSeEdHaytVN05ONTRVClRFQXBLbW5lTHoweU9xaWV4MG5PZk9LQnpFeFo4T3laQ01BanpGdkc5TzhJbWl1YTlhYXN1clBQalhzNEVkbGc2NktJLzFVVHB0dVEKTVJ5VG92b1ZqcXR2REorVENLR0lxMlZaMWJ5TnhUZ2xDSHFBbEdwVmZobWxmYzJkWWZsZ0dlcGZiTVBGM3Nma1RnV1NrMGNZVURLRApxVUoySnd0ZzVBR1ZjR3U2U0w0aStBOWhqMUQ5Zk92VWVBK2tmY3FLdEZGZEI5YkNUZkc4ekE3dkJGZHRhTG5zdFRZMWRjR1dvaDViCkl5REdLM3RZWHlQQ0pKbzFsYURzTUh4SW5Xa25JblJ6S1NOeGt5YUJTenJsTkdlN0IzU0ZsVllnaEpQektFL0MweXBQbHkvS0FaajYKczZxeXhEQjdIa3dRZzJLZWtCRlk4NmtqNHBEWitiT2RneEJydC9HQnV1YWdySDlGZjRHU0dZUWR3YkVRaDRSOG1Nd2tBTXJzUnhvdQo4RSt1eS81S1pyelhPMVM5TXVwSlRnZ0x0QVhDTy9CSUw3cXE3Q3dCUm90aDkxdXh4d0J6VEhRcldBNzJBYjVscWhhbmk0U1ZtNTQ0ClFPY2k0S0FsSVdtOGNJdEZVMWxYYllsM0JGT2gyNXh2d0JnT2c4ZVFzZ1E5OTRDSEl1SEN6WlBKQU9hQ0JVNXE1b0VKWEZuUmtvTW0KUFJkbFcycngzYlBmVWZHbXEvSjNWRXVjR1h4V0tGQUlNVTEyZWhQdEszcGxVS2xKeFlYTUNMcUVjRnV5NDhRVEJUSmtSWVY5eHR6eQpmeVl6aTJJOVlESUNSOHk4M1VoM2ptNUdWbFVhYTVGUDE4MmZpTFBUb3luQTloZkdzbTRhNlFJS2hWdUF3dFh5ek9UcmF3OTVVWE1xCnFNdHFvVEUwcGVJdDhxYXdjMEtLUUtHVzdsZFM2Z00xYjhndmlyWjRZQkl6Q0ZXTjR1UE1URHlDd1pQdDRRQ2pXVE9KeHh3dDFRNE4KM3B4anErWUYwc0FCSlBpTTdmelh0cEt3c2RCSUNHc1dQS1VCRTV6V0hNQUtvU0dGVmYwZ3o4MHNwc2Jhc0JydUI1b1JKVU9leWFmUgp4bnhXbVBCcTdOY3RtclNYWmk5V1VuQU5USFl4V3Q1SENxSlpWNExiajNSNEdZU0hidVZwa3BzeUM0TFlFSi9IblFkTFlZVWdvR2F1Cll1dUJ4d3hpR1NDUkdLTVlFTEZjR1NNY2JNV2owZGt0OXJCd01tYUduY0lnTmlna1NUZG0zWkZ4RENWRHUyYUc1dmVVaXlLQmE3MUkKT1hjek9ZcGJlc2xHNFJTR2xMNzU3Z1UvQ1RHNGNGVkE5NGw2Z2JvekNINkFrVlFHZDZWem40NXh2aWZlUGxmMVE2UjUxaXMxSC9ScwpFZzRNYXJTM1NnL1E2dGFzYkJYbmJtNDAxOEV1eUx4WUc3UFJHcUVtaG8xdnZwWm5TejZEb0JreVpiUkNDekJCWjVadGN0Rmc4N1ZOCkd6Z0YwRkpXNlFHcG9MZ1NObU13V01iVU16azJhN1ozUXdwb0pueVpaelVQWVQ0anBuSGpPWWNhU0VwbVR5U1pzemo0UWhpbEg1SHgKSzJzVXVaMGVSZTJMQkdSVVFZUitzY3d6SkJKM2dGMk5TWnV3NUMzK2ZsMDBsY3MybDZLRTBCZFR6WHBvZEt5enZoeWNGWnM1NXhqWQpnRFd6QWF4aEJoWXMxWFhORFBkUksyeWNkUVV5RGFqMUNHWmhTU3FINkpMUHFxUUJGTWk4WG9oSUxmb1p6ampHMU1OMXdwaGpQNWdLCldXZXBNU1owdzhxRVo0VFpBVHFjRnczRnA0a0JhUmFhV1RyaTNFTkNVK2VDOTRMRUNJNVF6VlRDWUppWktkZ0p1dE1oc3h6cU1GOFcKTytXYSt4a01uQ25idG9RRnpIdTUwd0tpTHhRUUVHZWVqRlBVRmtCME16OFdlRHJ3ZlV6OUlnb1loYWNNYUtML1RXWWpDTzFlUE4rQgpXWWg4ejRXcEI2dWVWbVJNdmtVejZXd01EeEk1QS9ZaWZCS0oxMC9ScVhyTVljSkprSmxWbUU4RWVTQUNSRlVRa0xkemcwSElNOUNSCldQVm9NOWdoMlF6Q2pYQW9PUUdSdUJVaXZkVWg1RGZEdDVHckpSWm02ZHJVMUVaemZxSTh3M3hBVzlJS0t2WlVOWDhqeWV2TXpNeVIKbS9oV1RRb2lSSGlqMHltN21RVEVpc1RNSUdZNFI3SmxLTjQyOVJZUkMwQm5hSEY5bGpTNCsrRkI1VjZCcHBtdWVtYWMya2JLdXRveAp2OElJL2MyQ0JaWWhXVUtraFErdVVtRjNZRG96N2dmTk1XN21pRElIR2tTNnlMQmlSSEJ4azBIZVhjbzJ6TGNFRlFQb2NUOStkcXZ0CktKM0lYQlB3U2dwdnJLeEdHQU44cjdCQWtzQXdrVUFvUVd6WDJlbWRzeHBwMlJLVFo0S1hzV3R3UjBaSGc5THVDT3VGWmpPQmZvYVYKdmJqQVFIeDUxTnphVEpXMVZiVkNxa1NYZFlyakphbkI2Q0ZTTVpxbVd6V0ZsQjBTQUVPcU0yVjR0UFVvY0lUSll2WEFaSWpnT3owRgpCZ3VJWnMyc0NTbGxoZmZ6OGJLZSs0aHpXS3VlbmFWcHYxblBLRVhUelVXRWZiUUw5UnlVZ0FRb21GNmdLT2dxS1pEdFhLeHZBais0Cjl1SUtyMldnaUE3ZkFpQVJNUWNnTU1RZ204aUdjNC9odlZnUndPazhPNmg0QnNPYmN2WkF2Q01QbUxPTHVCMkJrTmJVcmlLMEY4UmcKMndnTXMyZ2FXamsvMDAyMWRsV0ZxUWZnUTRlUkppZjFDV3E0dzZLeUZSMXdVanZ4R0dNVFEyaC9wZWtuV01UaEJ1NjN3cDVnc29XNgpyWXhBY1FENVQ4eHJxcldRdlFGOXNVTEsxZUFqQnZjai9mcnN4a3NRMGExNVZyQXJuRUdZaW5sV095M2NJMjVnODlQc1M5U3RFYUgrCk5PaVZxT1l6cTBTM0dseE5hTFRCQkpDSkRkb0hnSm0wK0RMN3JOcW9hWFpDVkN6MkN2dXNNbzZkZU9kMW1PY0dNTTFnRVMxT2dGcm4KUGRGb21QQ1dVSUI3c09nUUZGUGdyS2NPNndUdHdFUTdkcThFWVVmZUlnRmNEeE9URTNCMFc5NWFyeXNOTzNyUndDa0NTUUgyaVlxcwpwLzF4MlpxSEV6U3VidEN5T2NxWjBCUnVNNGJLZ0lBdXhqay84M0RaU2xWOE01c1Aya0ZjTmpZakluZVJ2MkhUeTdxaHVTN3FoUWVSCmJqYmtDZ3c4djdxc2tBMEw3Qmx3Y0ppcmdvWUFnSklnSVM5dUNnR2hiZ3pVS2ZRNEZRckF0TEtYNHNlcEZNcS9CejBpYzJVbDJveHoKTk1CeHNmTVFRU2d0Z2Q5bWJ0ZG8vc095cVdPTkcxTFFaeVFPQkpmTjN2bEZoWWtGY0I0SWdpMkR5YXFpSHQ2VVo5WnVDbjI1c1htNApZRElnQkZMdk5Xc3dRSXFLU0NOaFU0UDE3R0FIbU80aFZnTHZ0M3JVSVNBUnpEdFFOR2ROVXV0MDNQcEY5TXZDOGgxV0RTK2krNTFKCnZQU2pNR28yMm4xMnF5WVRTY21zUy9CSkUrbXp3UE5UdEU4NXl0QlQzZnNHNkF6U1E5RTl0Rm82R2pBcytvOFd2WnM4S1M3YjZPL3gKUjZSZ0E4OW1XdFc1UE5QS0xmMnRjQ0VMa3NRRWIyZHhnd2cyZ2ZTSmpBb0FBYUtvaHNJc1l6dVp5cUhlemR5WWNQSGxUYk4yMGVzego5K1UvR3dCbVZpdEh2dEtWeDM3RDZXK0VhU0VuTURkcEkraTZCNTlrRWtlcnRSWFZ3WkRES2xkTm9FbVZTWGFaa2p5b2tVSTNUS2ZxCkdlTm54TWtqdjFvRkQ5elV4OEF0MXAzUVc5S3NJTEJPWmp1NmsyWitaREtqcTJxemc5WVQ1WDduWnpBMzg2MW1ndmRVOHcwOGtKdUcKNUVhQXM2WDBJenVVdGhsUWtEcFE1Und1SmVpT1VQUkFTZ1dBNno2Q2ljMHNpNHI0aHBiSGhSNGRmb0dVdlp2R1E5RGE1OG9KMVF3egprT0d6bmtRQ1FZS1cyRVY5bExocWJrbEtrUU5uMDZZb3NEQXpHNjhpdStmbnhPUndNbnRyVDIzS1BRQkdGRFVxV040eDV2VW94VUJGCkdXZjZJWjR2dHplclNMR0pFS2pWY3FwU2g0SG1VSG5HQzRGbTdLRE5UNXhnSmhYVVRyb0I4cEFxb0tXaTZVdUVJa0UxNUJIcUxvSEMKOXFnbitITFdzQlk1SWV3akJDeEZneHZDWlQwbnZ4dmkxakxqTThpY296bWRSR2FqL2ZCTW9ybVpIazJ0TFdNYXFpWkt3RkhwczhhVAp0ampTTmNMSndUT2xrRFBCUXRGbE05N25TQ2dha2djWDMyeEhncE5JcitOcUdDWGE4UUpycmVDOHRNL1Y5dEcxUENKMEFJTmNGOHQ4CnpLWVRBNGMwYThKR1R5RVd1cW12UWRWK2VHY1g1cXd5SFJQUldKVFFreDI1dFl5R1Vod3FzNUMyQXFqQnBFdXpFc3lBYU9rSGw5RisKdUtpVkJpbUI0ZDlrMC9EWmd4QldKWkEza0ZDN0RaQmdNTFJOTUZiUTdIVTB6VUs4aHBjSmJoK1lwOXQ3bWN3Sk9TRkZtM3FLalNESQpBRE9CZkFsNnJyUENrWWo5Z3A5aGVPZnhZOFh5SlBESTVFMFhsRisxQXRVVHpTb1RtZTBOWjdwdUNvUWdBYndDUnNoNWRURjBNOXhECjBPVkExQnNNamN4RVVUVGRGblVvV1hmQjhRR3doOUUyU0tzbHN3QXVXZ3ZaekxkcVdTaVlNSFV3aUFLL1JkZExNcUVjK3RhcURodGQKQ0xObWN5SjJaZW5tSG1ZbjRacGNOTHRYMVJNN2RlR3pCdmhRNUVSZisyV0V6OHdHaXd4bVZFWDNMWXZkRFh3WWhPUWFGeTJDUERwRwp6WDlNdU16emUwSFE3QjF4b2ZCOTFYWUtzSjJDUXl2QkpyRHhRdEtrS29xd1NhSk9ZR1RpUTIvcXpPUldodWhpV00wd0pMQlRBUVBLCnpJTVJjRXZJSjBoblNWQlE2c1kyRU1uazBJOUVCZ0Y4dUhLR3lZNjhhZ2o5eWxSdnlPYmJRL1RwZjRocW1XQ1lQVStjVFlvSUpTRXgKcmJaMnRGOUZOekVHRml1YWFUY1pseG9Ndm9JRFkyQW5nU2RzZFZrS2x3VXlhd1VJSTgwbkRJdUlOaU40cDVobEQrdHh6aDExTjhOTQp4VVc2YXBZRldnMnh0TG1kTVN0Q1prUWNoWmwyR2JZemdLNW1WVlVJU2t6R1pFQ2dGNUlFOTB6aEZIakloUERZRWhCUVljZVR3Uk8rCkpsdUdKVU1HeW1IV2RjWVg0em5TOEYxbU5RTEJMMWF4Z3VEdGhyY2RmakVDeW9CVkMzNVVLb2haRVczcTBZUDNEQ1lwd2lJWHZZeG0KQ2RTQWdPeVhFUkVBWXJXazNCVG0xbVIrTVJBZzZSTTQ2VEpwUmhiQVRLNUxwQmloWS9BWE1TYzFVLzh0RGFIQVphN3ZWdFVwQXcyRgorb0NpNnhaRzNCUGdCSWdQdkMvQWUzZWNWcVRXc0FZREpPUHp4cytLZWxrdERuY05LcmZxUlVsZEpraEFIaFlGUFJGK1BGNG1mQ3BxCnV3M3l1REo0WDFURmpNZDJRVDlIUTNtVW9odHVKdGR5alNYb3ZmSmlBYjFBWmNKQUNLOGdnN2JYVE1WNnJicDhuOXRJYzVVQkVNeGcKLzlWMkpRQ0NpWFdEUUw0cVRxbzduUEdFVldHUnE5YWhWN0hCSkVFb0NsZk9jenZTYVRZVmZjWnkzNmpWVUVLam5ZMEtTOVUwRG5sVAoyNFFLamFwVHJXWmQxRlBqWU1OY0ZWeEpOQzRVUXpDSTFOd25XWkdyWUNQMG9PRVVKZHdkekFiVEJRUTZKRUJ3dSs4TVVLVThMMmcwCktNMW1aVWN6MVE1ald2MW1henRVYmxNUElUQmZ0TmE3alI5Mkp0ZURHVFlNRnp2ZVhUa2o1bVdnOXI0UjFLMnVESTQwYlZYY1REQ3IKOHRhZDFKRDJkTTY0M1h2Vy9HUU5JUnd0WG9OQnk5bWxscWl1eDlVUVp0anRaK0JUMXVyaUgxWlg1bHhZSGNjSElrTjVRT1ErRkZOTApCWUJRSVNVczJyRGJJSHBUT0hpQlFnQU1Ld2liNWltaUZqNEZvd21PdG9lblZVM2hhNXNoS2cvVGtWczVJU0xOVGdtcG9BTEJPWTNKClVXaURHd0pFTnA1cys4cW12WjhKZjI1WHV4QjI5Wk12bURGUFJ2Mm5oNS85NXQzYkY2OS9mL2pKOFhqOS9QbDNydz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJZnYzbTNUUFUzY1ZiMlVra2tCWUllb0JWRkZhTVYwYXRqTU1Jczh0UXhiTHVoRmxSZlJRUW1DNGFsbE1INzlCVVJyd0VxSFZSUVlJWQpWNDE1TVZ3K3BWVkd0NFFXenJBcXVnOVd4SVcyZHQ2VFVUQlFDVGN6OHFuUDBTZ3FUbmhpNGw1djArbk8zQitxTkxrakNzZVpGUmNDClZ5Z2U2b3dqMjZEYVJCYzVUbFlGcTFmRDQ2Ymh1bXVLcm00Rm5jdzhNSFpXVVl5cFRFZ0lSaUVPK2VUQ1dYZE5VSW1uSVNXdmFqVzIKSUltZ2dSdWcwQVRodXBxR00xVUZEK1BwS1h6Q0dZbFo1NThCTEFkRGNUbDNnYU8rRW8ra1dYNEpxWUZITE5zNEZzWjdsS3VtOHVyWgowSlZFNHZoQXdHRGpjN0JSWllRU3JscVczSzVLd0RreTlkNmlWeEVSQUoxK0NScmZRQTY3R1hwRzN3eWFYT0JKZzBYZkxLblJvN2pOCkdad0tIQmJiVllOeEVITTFjM0VTNk1wYTVEQlJ6WG9rSUpaanRmUWxUWXJFazRPb1V4dlltc0IyVmtyamlIeUVZUXMxZkhlanNzcTkKSVN2N0FpUU9DdVpxU1VIMHNFaDFaTkVaZStQYTYycEpYbmdjdEdYVDhCaHY5WWNHNXZsTFFLZjdWVXhVd3hRUm1MMVVjVFl5cG9WRwpBUUNqd0dIV2ViQjJKME1acjdPeFJvaDlNSUtnRmtlUi9vaUV6M1gydE1TZ3dWS0YvVzJlRnp1eE0zUDdoeVdOclVBU1hvTyttRjQxClcxOW4wMFdpaFNvV0lBTWhwRU9hWm1ZT1FJeXJPWGlBVjREd3lTMTRVNTZucHVwTndmaVJhRTdZRExlT3pzZXBHNGdQYVpXd3E2NkIKNlN6VWd3dUJCT2R6QU9UdmNremtzQXZEZ1pFOTgraU9XZ3FubWU2dHlCa1BPWmZ4WmY1aUFNbERuYTIrR2lHb2NWa1ZjMFh6UEpxTgpNZml4SFYrRlREbFlSVEJTY3c4RUFSQUJuSlNRWjIxSDB3aXRxZ2k0NTVBcDlwSDlpV1lLcE1TQTFGUm1sV3pnRXl4b0J5bldaN01SCndla21NaGJXaDd5NWVzbVdxbExDRE9nYXozRkJoRUJkMUJYTm15MUpaVWpLRWxpTndDWHprUllGbkpNQWl3ekVoSWF4V2VpcUpWSGgKUUt5MU1WRUJUZHBzZU5FMENUUXQ2R1ZaK1JyVGVLSzdnV1dEL1I2eVBGMDRUaERCa0NZWnZjeUp5WFQreFVJcmNEb0U0SStSR0d6RgpSYmY0RXNDa0tKUzFXbjcrZkNHNHRnNEVoSHU2U3VuRW10VmtIK2ttbUl1NjZ6SDdmVDdDSGJINXdiQUF3aU9lRmhZOFFyRFdXZk9pClFSUmtaQmQwQnh5NFNjM09XUSs4Y0VrSFFKY3huSENyaW1VMHI5R1ZWakxIcmNXUmNMYmpmSGEweFNxeUNEaldhOVMxUU13Z3hxeHgKSzZ6d2pUN2l4VmVWMm5CbjErY2hrbURoYmJScTM5aEFpd1FWV0FuR2pJelpGUFVpWFRGTVdhamU3NmJSZ01pejl1QVM1enNnTVhwbQpSS0ZLdW93bmluUnJ0N2pxU0tXb3Npa0Nxa2xBQWhxNHlNbTlHV0hFQ2t0Ykwram5va2V0WStMQlEwZlFsdXp6Q3Y4Q0VqMVZUWlRSCjlBVU1zd0lEWjZRaldUVVRNcVZQSE15UXNwNTB4VTBYUm1wSURNcXVOc1hjYk5WV05RQmQ2bzVHREF0Nk5qSGVWTStUYUZJUXJFb0kKQnlSVnA2TzZCK21maHA1REF1RjVjRkM3dnNiVzZxcjFvb0w3cW1xK3BQQVZrMFd5a05JQmREUnlNSW5acHNjTnAyQnlEUFlWUFpJdQpyN3FqTzRZak9kRElJQnJFblFDS3p1Zms0Q1ZHRFN2ODBJSGRQS2lJMHltbzQ0UUU5YjliaEF1dkk5QW5MRDNtbkZRT0QrelZ5NnlaCjdEY2U2QUNLOXVpc0hJK1Via1FyYW9RUGxCWTJUV1ZLVHNIOEs2b0tSUFhJV1F4RWJydXBScHJEeXNaM0FxYU51RHVBQXkwcFBUTWoKTzZHWnhHZ2M5MXF6UVJZQ0FYbkxTSUZlc05VZTFtalUxZUpWTWUwQVR3bDZXSUxLdG51NSszUEs5Z1RhODBDWnFwTlprNmtGRGZXQwpqTXM0ZHFDTUNUSkk1ZzNER1M4RXppMmFhWW5xbnNaaVlZMXB2QWlQaDZGMkE5Mnk2a25yM1BxVjBmdlpGYXNleUtLeGhKckdrSjZ1Cm1ldUdXUTJoZjJuK2c5UXUybGE2ZXZ5aW9zbi92R2tsekhUaE5FbVE5Nkx6STNxbXhhQ3dMOEFlNlE5ajRDQW5qZHJQK0dhQW0xY2UKT3FOdWMvZ2hwTW1LQ1UrRXB3Rytrcmw1ZUM4R3oyMTh4Sll4a2VkSEppN3NhSGtsNExnbTB0c0RMN0s1bzhMTUdEYW1qcU1yS3FxNwpHNFNBN2tnOWFCTDNTbkR6SlpvS1VZY29wLzZFMVZLWHpXb0U0bFhZd25oRU5mUnBUWkdta2YwZVA0ZlFGM2o2Z2JOb0VTOHczK01rCmxzMWlDb0RPd01sQ1FLZlJUb1Z6WUdnMnBybkNyMW9zRlJkcy83TW12YXpBSzh5UWl2RmVPRmNjeG0rbVUyaEJiSXRCTElEbFYzOGQKOFBBdzdzSWgyK0lWT0lteFFIcHdQcWpvU2JoQWFmZml3ZVdhRjJUbFpnZEtRUmcrOG5ndUxRUU9salBJNEYvTVYzcHVBUzN1UG84UQpSQ2kzRmNHTEFwT241ZllWZ2xES3RaaVJqY2NzV1pDYWhxVERSdGloMTNva0djOEVObE1Zb3ZXWXNpSXIrb2FFaGNjTnEvSFVMeXRRCmFLRHB1Uk9abHVxd2VpNkhhcGtuTEtWb000WnhPSXZucDRqcU1RUjhudmxBc3UxUmhlZ0d0U2N1bk9zeFdrNUxxRnF3aFFFTHFPYnUKMlk1aGpZUGRyUUp3eVVOVHpUY09WSUllbGFyUVp4S2dMc2N4WWdBZS9aWEhBeUcyU0kvOFlob1JNT3hpWjN0eGprYW1wZWdISkcvMAowRzBlSG1vcFBia3QyM0ZMeUNyaS9Qakd4b3dSTEF6aENob2hTV1JKTXNNb3Zkd3crS2JZTlY3NjFBSGVCSkZCUnZTOEp6cFg2RlpVCllNQkt3emxOQ00wNldJVUpwcWpCaFMzT083bGR0bGpLQnh4cDBHZElVR050V2kzWFY0dk5UYW90YVl3a3BEQ3pwdlBkbGszUmRqeG0KZ2FHd0NMeExCTWtraTZnbHM4WmhnL1BjczRRd3BDdDU2RGxNeE5pK2s2bG1yQUhzSmhDVHBaMzNaeG1yMDZaNFl6Yk9sSEtiNWU5QQovSzRzdUxScERvaG0zNGFFbExBRlIzMHp5a0xKWEg4TUJhL3FBaUNhU2tjdHFzZVlpejdZSWR0WWFkbGkyZ0VneE5URGtxeXpNNE5WCk5UamtqV1hBeXJJcUxDUWpoUWVHWXpHdkRXcmtHdHRsQkd1RHFORTVGbFdmMVVYR3p6QkE1S0lHQ0wwS1JneGhUSm53WVEzK1ZKQ0YKNTZGWkxDOERRbEFoaXV1WVlXWEJDYUV4S2F5RXZZbEdWdXhOYWRIbG1zdGdnNGViaFdrM2k2cThJTkJRQUFMRG5rQ0F1d1VFTjRXQgpTRUVEYlRFYUdDSElzSHVDNEhkVDdGaFJDT0Z6MndtcExpNUluVkUxU2JuT3E4cmNJZ1FjZ2w4bHk3bkFxd0x6a1NzeEdWSWYxamxtCkc5cXFmUTZNblN2TmF3VWlJaFU4b0k0RVFyYUtoNFBDMVErSFZORVZySmNWVFJDQVkrMnE1ZDZtWVk1WldSbkl1ZXFaS3d3VG5vM1AKUWNUVm1MZk1OSmR4dHMwNWVWenJxdkJyQUluY2trTEJEUlp0T0ZZM2srU1NmbGF2RlQ1elVnZDF2ZmxWUEVNQ2dYcmNITkJNcGY5MgowVTlFSXlVTGlsUFJKU2lhQ0lwRlpBeFBOZ1JRdEN4QzBjS3QzQmZtUWhuVHBqQkVwMnFjVE1vODlWcGRuMFRIenJRbURqc01zQ1E0Cnd5SzZQMmkyQS9nWWx4Y3RpTUk4dW5rZXdoMXBGV1dnbGFzMW1OUHcrMVlMV1NLU0tKb2R3OStOOHBOSVlSdDBEb3BsZElRdjVxVmgKYUhaUzNnZ0Frb3BscTA3czZObU0wV0hnc1J4TGlubFp3MW9vMExmREFqYzlhaHRTTGIxL09MR1pSNlFWZW9jMVZ4Q3owUTdDRWd5ZApWVkU2QkJ4VGRNYk90aWx1aHArWjc2anF1dk9yRnJxQUZVWFB6endCemxNL25RcmduMVc2QngvR0lvZnFuS0tmUWltekN4T0pKMkN1CjZzWGtIbHV5SjdLYURZQ2FOVXVCTXZsWjVUWFk4UmloRERNZ0pPVjEwWEJvcG5MQS9zVjBVS1duckdJWUY0aVc3NEdHWHJTZG5VRGYKV3U3cURkcW1teDhlNTNtMkF3L2dMV0F1ZUNJR2c2WnhBa1RmTVNqME5xNmFGbzN2eStNR3dURmhUNG5aY3VtcXM0MmYxUUUzTjErdgpWdHFLZFlnR2srclJMN2g1VUF1ZHUrMVV4QTYybzZBV0pqRXNkRkFHQVpCSEZCZk9FbTVTQUVEMGxnRlVzNi9EKzBlRG5OVWlBUndGCnpUaWdBWjQwS2lERjlFU2U4d2VyUkxIVUtjemJpeTJtakxsVVNsV0JwdFhDOVhDU0VaaUhTZXlFdW95WEdaRjUwNkVQVk4yK2dZZGcKNHZOcTV3TTVRV1czcXRieFZtdWIxVHlNb0J0R1NEZkMzR0ZialZnOWl5OE1vd0Q4MUdUeVZiVk1HalVPSHRxYWxFTlVwcU93dE1SYQphU21ySGxUQWNPMjZFMHVUeHRIVmFNSDUxU0JCZ0NDU3JlRm1SUzlyTm13OEVyTVhnQWhJSE1PL0VFbk1rNVpYd3djQ3hGM05EY0xwCmlDUkZLMDEwbWs5bVM1cVNOVjJwYXNjUXBVcERZNE84a0lqRmh5R2lvQXdDWE5nNEFwVU1HeW4xNEJsaW5udGZubHN5ci9GR1l4OVIKamZBSTRqTnpGbTVKc1N0b3BxVlZNakVFUGg4bVRFVzJzVVJ2VmJaZGI3UDFTdHVKSS9Rd0gydFdJNUpIaWpIcUNKTzNNR0ZVVUdOVQpOU2VYM2k2bzFhWGFoczdMQU9tQUNSMTZLd2dVQWFzRlVmdGw5QzJEQ0E4c0E4cG05blZtWEdMVUdCSm1kc3ZkU1JoaDUwSW1MNDB2ClhEU1BCM1pYWmxSZ3gvSTR2RmhVbGRWWHN4UmlvS3FDczdseUJRb01qUm9ZaDBRc01GVTRPRm9mcTI1bXdLanFKbWNlQVZJcW55SXEKREpaV2phMjV3Nkx1eVNGcUh2VkV6VkVEVXV2WVRGRTNzWTY0TzFBQlFiVGM2ZlFyY1JzMElKSzZZbzJnN3hmY0JMSnE0QUFXSVBnNQp3SEFVWWJET21DSFBLY29VaWlWbWJQWGdRb0ZLUjlHSitLQ3FhaGllc3dYY0VPeTlXREN4YXRCMDlDd2FKY3lNRTd6U0k0azd2cnIyCllHSlZJOERQNkV5RnlrWWhDTW5YR0dRYjY0QzRRYlJYc0hlazEwdlY2RTJQMEtINjNTbGhpQzNveEtnNTBvdW0rWUdEbFc5RTRITDIKQ0J4WU45aXA4R1VsbW8xTlZZRXUyUklQcWdpVExYNk5kczVTTzhySHdyMFh5eEFCdlVnVE9FS3kzelRUa3NvbnRJWDYwYzY1YUZCKwpDRXUvZzZXUnROUXJyTVB6NVlDcHlFMm5ORUFGckxtYUxtdmROTW9aa1ovY2xRbWpZdUtOZVFUWEI0WDdZL2xEaitPekJxdW1xZmVECkpqWmtoN1hEeDRMQ3BCaWFSZUVhYVU0V0U3V29wREV6Z1JvUHErTGg5RXBtZFYySC9rZDRTMUdQdDY3aWJFQksrdE5kd09ZWkJId3UKYzBVeWZSVlkzYlphMU1pcGJIVHpHUVd2Ly9KSUN1Y1BidWl2bjR6NkpOdnV4K1haUFQzUGJkWFR2OGVzdTFpcG9kU1dkRGZ5U0tyVQpjdTdDNEl0RHJzYVV1MmxUOTZLbjNNV2hvNWovbm5GMzVUa2k2NWh3RjdvMFpyRG4yNFZHS3ZkdDZYYWhRMVU5VXJCbDI0Mk1hVmxhCnNsMTh4cU42cmwxOFhqUkRiMHUxeTJ0Q2JwbDIwVzRwVzB1MEd4bXp2a3V6QzRTaXBmU2pReEYyVmxqUE5jbHVOdVRXa0dNWG1HbUsKd0paaUY0R1NNS2g0aHQzRkVGRzdCTHNqa2ZsMWwyVEpXejI5N3BMVWZMdkxycnNrUmZLMzVMckk1UDcvc2ZkdXU3NGt5WG5mRS9RNwo3QnNEdG9HaEtzK1psMUpiaG1XM1pFR3daQW1HUWRETmxrU0RQU05RbEFtL3ZkZDNpTXlzdFhvb0Nkd0NmS0VMY25yRnJxcC9IVE1qCkk3NzRCUmRSd2RhdHpuNi8wTHBNc3VVUlpOMXFoWS9CdXMzVDZNM1ZoYVJTN0ZkamRZTjF0cW02aU5qb2c3K2d1b2hhNURJT1U1ZTkKZWVZNlNGMG00MHQ1RTNXYmkwTTJVTGNWYWUwMlQ1ZUczdDQ0M1ZiTVdRaWFMbzZUNTJIcE5vdklYaWhkdE1RUnVVQWtYZWdmQzFONApCdWxpWlNhVXdzWFJaZnF6OUlQUlpjSFFPQkRkUGtQQ2RERjA0ZkVYQzVZNGQ0NGh6V2tRZERFSGkrQi9BWFE1VmZkNitMbXMzQXBVCk1UNnhxTzk2MFhPallzbjRYQlNKemNQTzVaOHV6TjNSZVhpM3ludWFuSXVPTUpwQkRjNGRsU0dpRzVzN0hLa0lhaTU2SFdDbURHZ3UKa3V3b3lMcVp1Y3VOTlFLWnV4SXpKUUhNeForY0JTNHdHblpaTldpNUsybCtNU3dYN2hOV0p6Y3JkM2JsSVFPVml5OFlxODRnNWVLOApxL2Jkb0Z5SXN4QlBDVTR1UzJMeHFRUW5sek1jSVc0M2NaalRYaDJiazh0Wno4UmJjbkl0SWlzdlRpNDFaUGpJemNtbGdpeEpDcW4xCkpBelVMODRiWHRXMU5nMU9MdTc3WTIzb293dzQ4OHNYSlhlNXkwNVFjdlVacXcwVksxQTRJeU80ZFdOeVpaeHIwdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJYkdHZ0dyeHZ1dGFqd2UzRzVQSmRvZHphbUZ4Nkt4UmtYYnN4OG5oamNwZnB6a0hKQmJzaDZaT2dDQlg2L2FZRjEyYmtycXhmQ2tTdQpGMEFCeUYzVCtxbUxqd3NiUHFiQTR5S3FnTnJ0b09QaU5GcTUyYmpJdUROV0lqUXVYdjFIQjZYdUZXSTVDbG9QR0hlaHFxMmx6Y1hsCnkxT0Rpb3U1RWl1K2k0a0xQcW5iK3pBODI1WWNyQ0RpdGtObjJ5TlFzKzR2ZUxoZ0Z1QkhBNGZicFBpN1liaE5ZYTlBNGFLK0Y3OFMKSkZ6OHpWKzVTSHBJVUVBc0hCemNIazJPbkl1QXMxREdEY0h0YnRRVEROenV4R0FnY0JIdnhpdHpFM0JaUzl0SEFIQ2hSL0pycjFrdApLWTEzNDIrclMzbUNmZ3ZPR2ZWOWh0K0tmMWRlN050cXZFaXdiNnVyVkFKOWk3K0Jjcm5KdC9zNEJ0OHl3UUhaczhDM3Rhb1kvdWJlCkZnK09nYjFGRkxxV0h0UmIrRkR0NlMvcUxWZEVxd1QwTm5jOTkyRGVmbmJOSWh3cEVUQW01MW5leUZzVVJTQTBaZUl0YUJGTmZGc0MKYjV1N0M5NjhXOElobnJseHQ4M2xTa0c3eFQ2Wkl0dFRPSXVWaHRwRGluV0wzK25zNUM2SWJjdGFGMXlnVzZJUkxocHVOUjAzTUxmSQpVeVB5ZEZGdVVXZGVSdDJRVzFSc00zNXN4bTEwRnJzUnR3QjQ0cFV5MGJhNVdldjVrMEs1bTI4TGhIRTVkTnVXbmIwMDNCWi9zNFQ1Cll0dFc1NWNEYmN2dkUwWGRJdHZ1UHkrd2JaMUt3Z1hZOW1PaHBNSlh3MXFhS3dodXJDMXkyNkI3QnRhMnVZWWdxTGJ3UW5IWGI2Z3QKM0poZU45SVdJd21URjBiYTRwK2JPTGliYUl0VElVL09RRnNreWxBQUhEemJWaG5MdTJtMk1QR0xNczRXZitPdUI4MFd3d2ZrSGpmTQpGZzRYNGFCbTJVS01oekJMc0d5QlZXbUNxdS9KQVRsSERySWkyVUtiaU1CRWdHeEp2eXoxeGJHbGt1SGpKZ1hHdGpvWUVCUmJnR2N4Ck9OOFFXeUFWTDRSdGRVNDVDTFlnVWZKRHZnQzJoZjFFOHViWEVqejU4WG9FdmhaL3AxVmU5TnE4eEc4TGVHMVc4Qy9RdFpuUThCZTQKdHJoMXNMbTFoZW1ydkxHMWhjclEvS0xXSW1XV1ZmVEVpbUpRbUhWZVV2MTB3TUxYQzFtTEZFUStGRnNvTXJpcUMyQXRKQVZFZXI2QQp0Ui92S3g2MWdiV1k0L1NFUE5XakdyKythYlVvTFdqandHcmgrai9qc0dvZnljOWZxRnFnMXNZNHBGcmNuSXRUKzNDWXV5bTFtSmhRCml4bVVXa2dlaTlvUnFpYU43ZWhmaUZxZ1pqRXZiRVF0MGhLaXlJcFF1NFFWZWdGcWtUbDd4Z2JVb2l6bTBHbXpaWGozbElvVVpoTDkKbElJQ2JsUHlRZE11ZFVCOW9XbVJOVVloVDVCcFVkSFcxZ0hUeHQ4M2x6WnNnYVZkV3N1Yk9BditKOWJZRjVRV0ZaVm9wQnhiMFBtdgpHMG03Lzc2SXRHRUxJQzNxZlhEVXphUDFhM2JqYUJmTHhldW0wYUo4SGk1S3dHZ2ZMb0VGeTlpYXhhMHJDaG90NUIyRVdRU045cUZXCnJMeHB0UGc2S1JJSkd1M3ZtRmJDV2pSd3RBOHJac1VDM2dNT3lqOTd1V2kwOEtyd2Q2RGF1ajd6bTBVTHNpRkFRa2JSZnJ3c0hBTTMKaXBZcXgvSW0wV0tXZnRJRzBRSm5NeEcvREJBdFJnaUdRRzRRTGJ1bnozbEF0QS9vejRqTUI0a1dxMklNakRlSVZoU3RkRGkwai9seApnYUZGa0tYTUY0VVdJV05FbFFKQ0M1bk0wMG93YURIdVBDTy9FTFNZVVRycVNrMmdCVlNBWlVOUk1JTlFVU2t2L214dUd2ck5uMlZsCnM0cVhtV25IMzFQYy9aMXF3bUZLR3hzK2k1eXlRRUxXYkRhRmRpNzBMUHl3cmlKY2NwdllkMm5XRFo2RnlCQkJtSnM3RzdiQXprSWEKTW1mYTFGbmVFS0kzams0Y0FpTzhLOEdjaFJRQVkyQWdaL0h2N0E1eEVXZGhtK3k5STBsTGNSMTM4R2FSWWMvdFJadEZucDFNV2NObQp5ekxjMUt4Wk1HeGR1YnlyK0twMUlVR2F4Y2pHUllRUnNxMG9WWDl6WnVHd0kxNFhOc1R2eUtBelpUYit2aUd6MjJiR0xKcnpQa3ppCjZqMzY3TEtHUTR1QXNLbGNGMkpXRFRGRzM0alpWRjFNdFJHemtDSUloM1VJczZrNGk3c0pzOWhLdUZHTGVmQzlNT0J4QTJacFRSY2wKRmdiaFJvTXZtMWdSMk1hYkx3dnBBMHV4cnoyN2FQNmJMMHZMek9YTmw4WHhLRi9jZkZuQlFsYzVmRmxwWWNvbndDemg0c1VKREdhNApTM1plSWdDelJLZU9OTitBV1ZxRkhEVmdGdi9Cbk9ZR3pQSS9tRjY2Q2JNQ3k1WjVDTE84T2tSbk5tR1cvNVNNNU4wUXF6eGRQUmVFCldXYWYrR0lFWVphUGhwQzBtekNMQkpGU1VTYk00ajQ5ZFpaRG1OV1RaK0xySXN3eUw4WklZUkJteVRaRlZYa2daZ21pWitqeVJzemkKQjFEMnNnbXpPQi9seDRJd3kwTXkvSG9UWmlsc1lwUXhDTFBFNFdmM0xaYk1NcHY0OVNMTVNoTFZEMkNXQm5ZT0NjQXNMT0lTM1lSWgp3bG1adnd6Q0xHS1ZpdnNHWVphQlAyVVlMOElzTTJQNmtFeVlaWXhuK1Q2eGVtMDFRWFplZ0Zrd0Y2UkJGbDhXREVRQ3N3TXZpMFpWCmFwVjI0V1ZYaStwUzgyVzUxVGgwV1J4bU9lMjU0YklJMmZEQkJsdVdnU2tWVlpndGkrdWdFdW5GbGwzTFgwS2daVmNTejIrVFpaRWMKU1BYTmxVV2NVTzNEakpXZFJiaXhUWldGQWV2TkYxUjI1bWlhWnFZc0RLSUNHaW1yN0VWNUUyVlJvcTN5VVFObEdUNUQxbjREWlpuUApiMk84Z2JLODVQejBBNVRsbytOWEdFQlpjREFSbDd4NXNzdTFpTWJKSWxiRjRMOXBzdmk3OXBzbEN3dGxKVWJKNGdDUG9tc2t5UksyCitmRTkzU0RaeEt4N1Nwc2txemk1a3d3c0lNRHNKNHppUlpMbElFWVljNUJrZWRPclhoVnhHbkNqTUtyZktGa0cxSWNhR3hJbFN3T2kKYllHU3BjRUUybzJTVlE2bTVZMlNWWnBram8yU1ZmNWx6UmRLRnFkTWVWaWdaRmx1dy9yYWFQU0ljbE44SHpkTGxpME9vQ0VJbGl5RwpkbjVyWnNueW5yQlc3bUxKMG9qNHVWbXl6SXdqQWgwc1dSaVlSTGhac2pBR2daWXNXUm9RVndtV0xBMXNTM2F4WkNsNXBLYkdNRmwyCkJNSFhIekJaREI5VUhOdzBXY2tnODl3MFdXNkYyU3Rvc2lrN1ozSFRaR0ZrZWlGb3Nsc3NLWnBzSXJ4bnRCZE5Ga2I2RWtHVHBRRmgKdktESjBzRG1NQmRORnFNMktibUd5WXJvdjFMUVpObmFHd1BXelpPRmtXV3lBWlJOcElhV3VZR3lOTENLK3dMS3lvaGtoWUd5UEE0TApEZzJVaFlFczl4c295MDRJeUxZSFVGYkZFbmtGVUpaOVFQa09YMEJaMWNZQXpXcWdMTnJWY05JT29peVV6eFMyM2tSWnlxR05rU1pSCk5sV2pmVTJVNWQ5OHB5K2tMSTJRQ0FSU1ZxcnFyQXdST1Z6OE5XcVRicVNzWk5UNnJpblFZT09mcFZwQUVtVzNRdm9teXRLdGExbUQKbkFTZUlQSFRtUW1pTEVUMFQvb0VsSVV4c1JneWlMS3dlSXA2b2dkOFBYbkdqWlJOcDMyQmtiSThGbnRHQkZJV29uaXFMRjlJV1Z5agovS3hBeW5JK1ZvTFdoRGE0TitNVFVaWktKNWFYQlZFVys2bWdMWWl5dUJFaUc5eEVXVWpZVFhVM1VSWXZGaitLQU1xbTVvNlJMNkFzCnkyV29DQW1nTEx0d0tUVnJvQ3g5Y1FDU2JxQnNpb3ozQnNyS2NuQ3lYMTM0N2R4akxIMmtGTjg0V1VFUzhxYkpZbXlsTk5vMFdUMzQKbFY0NFdScmhpd1ZPRm9lbWdEbDRzakJ3VnJwNXNreVR6N0Z4c3Z3YnMxVHdaR1hvNjhXVHhZOGhqUnc0V1g0UEFralNqOExNWUJUWgpscXNodjRZU2xjREpNaStaK3ViRVloU2FiYjVnc2hqUG5GbWtyVWRyVGFGa093YVlaNzVJc3JBOVpyNU9iVUpNaVRpeVVPZk9GMFdXCm5lZytibHRBWkx0ckE3MEovc1NRY0NOa3UxdTZCa0VXMktoSFFXSEVpTkFxRnRQRHhZOGxqSFhWTUxIWGErdWJIaHQvWC9EWWJUSTcKZG5yT0RTb3NXS2tzMHJuSXNhTXBhcnkzS1FLRUJEZzIvcjY0c2R0a2JPekh1VlBuYUdyc2ZBU3R1cUN4UWNzTlp1eDhOTFFGTW5ZKwpiaGgxRVdPeGo4bXZqTTFNQzBpQ0Z6c2Z2Ym8zTG5hNEJVN1FZcGtiVTRpS3RGalFCTWpOdTJDeGhJaVd1Vm14QVJVTlZDd0MwQjhECndRMktoUW1mVW9CaThUZHlvY0dKSFNLMzNwVFlZYWxYUUdLSHU1Y0VJNVpCNnR4ZmlOaHVEeUVRc2ZqY0prdkU1Y0dONkJad0VXSUQKR3hXQVdEUzhRVFl6K0xBOUszbC80V0ZwS25uVFliRUxrWVNHd3dMNnd3em9nY09DaUZYR1JzTWltWW1Vczhpd2dHR3hIMWw5NWJkWQo3Qk5jV0NSbUtWY3hGblo0VFhoVFlkbk9sQldtZ3NKMnJYRUNDZHNOL2J1SnNEeVJ1bm13YkROOWFMQ2RZYS82Z3NHeXVBdHZvbG13CjNjVE9RTUh1UXh3UWJIZCtMeml3dzBtVFozL0Vvc0NDU29GUUJDQ3dHSlBTaFh5ZDBTYmpRc0JDeDhYVlNXeXp0RndLQUN4SlYwUzcKSHY0cmlSV29JVk1xQ1g5MjNpUFJYNmYxQ2pmOWRSbzBHL0JYcU4xWnZXVDJLMUMyS05PN3lLK0xvZDJ5d2E5WWJiTEJnd3VDNCs4TAorN3BOcHI2QzY5SkY5aHRXam5HZGNUTmZsNkV3Z1h6Rk9veWZheUJmaVRkb2FoYTFrYTh3U2xHc2lCVjFIUXdlalNoZDZacktMK0lyCmdVaEQ4VWI1RTVCYlVVdHE1Q3Uzb056MFFyNWlDdU9vSGNoWE9KUmw4MTVuMFJPL2NhOVlKcUhTUDJpdlBKdEhHNm5pRjM3Q05LSjEKMXczQVZjQ1ZCdTVWYm9JZ3VXclRsZHdwOXNhOTJsVW9HL2NLQTBlendMM1N3UExsQy9kS1A0c25idHdyOFFrWWVvTDMrc1hsK1BHSAovNks4VjRiUXdQQzVlYTgwSXNvWXZGZUYxVXJlZ0ZkR3kwaDN2NGl2RElwQWVCTEVWMkllZUhBUlgxZlZ1M0FEWDNIQlhKMEg4SFV2CkJBUDRpckFYKzN2ZXdGZTFQcFREUXVJckRUam51Z042WFk1QXZlTjVvbFFFOEZVUnRkNDI4SlUxZlNTMVg4QlhCcFllSjdNa0srb1MKa0FmeGxmRUxacXN2NU90MkRJMTg1ZnRub1lEcTR1bktJa04vSVY5dkkyUHV5Ukh3UUw0UzZkQ1VwdG5JVndyTklXSUo1R3NpYkRmbgpqWHcxdEtLOGtLOVVDRklQWU9Tcm1HQ3RiT1FySGlFWE9UZnlGZVVaV0VJRzhSVmxSVVFtcTVwMXVhbkd6WHVGSnNsUWFYck44RWt4CkNnVHVsYkdqcWk1L0cvZkthRWRYUTJQeEJ4NzM2UXpjS3cxTmxYbW45b1hHMmpmdWxjZEJoRE53ci95MVBGKzBWOGJvMkJ2WnRGY3UKQnl2ckwxalB4d2dUYVlNSDlvb3dqUHMwc3pvSXpDYXNFUVAxeXRLSlhGK2tWeFFORVJwcjBPdVk0cllGNTNXNFNPdkd2TUpXVkpGSQpWZnR3dldoQVhvZS9oaHZ5Q2wzYU10TVZRa2pSTW9Qd09yb2lPVGZnZFRSWDI1dnZPb2FLVUUxM1JZaUZyUElMN29wK0RSaFRBKzdhCmw3dGJtdTNhSFd1NzBhNWdEaUZvRkdUWHJnaGVjRjNKS0JydGhYVmw4eEJrcGtSMXhSSHdoZ1hVbGYyUXgzZ3hYYnVyTDZPTUZUMHMKc2lyWFdiT0dNOGQ2K3lhNnN2OXdMUnZveWtMcm5EZlBGYXdvT0hrM3poVXViOVk1TVZtR0xvRkZsMEdZYTNVVjRNMXl4ZHJSemV2cApZTmE1QWJBTStlTnZ1T0EzeUpVTnpVZmVIRmYyeXNsbFkxd0JJSVZ5NWFhNG92NlJMcmNocnExcG0yQzRRdG1DdGZHTmNJVU5ybndnClhLR0lhVUt2Y2pVSnhZeHBiYnQ2dkZVbEpBTGcycXJrc05jK3JDQzY4YTJvQjJmSnU1a1Y0WVFIdmhXMUpKZy9iM29yUUJQNG5ZQzMKdHJsNzBuTE1SeFVNeWJvWHV4VTJmRHFCYm0yZVhvTGNpdk1vSnNSRnJoWXljSVRhREc1RlFuRWNkUitJQUVYaTJZMXB3WlV1MXdvQQpYSXJGRGN2cHpXeWRiaVIvSTF1WFZ6ZUJiRjN1MHhQRVZtaDZpWGk3Z0swUWpMS0kwYnhXbHRDc3RYR3QwQ2NqQUhmUldpVmozcXpXCjVUQjJvRnJ4ZC94S2tGb1ptSWVySGFUV0NLRUhxQlYxUGVBZzNKeFcxT2h4N1dsTTZ6TEdMeWl0eS9IY0c5S0tuSURlakFnb3UySTcKeEtxaU9lWHhnclRTU0t5dzVWT0pHTTFjTjZTVjRXejRxamVrbFEydUVmb0xTQ3NtZHNNQnlXaE4wWjdnWXJTZUk1blJDZ01STk1GbwpwWG9mUVltYjBRb3ZKbDRJcGFuZ2dMTjN0aG10VHMydUY2T1ZuaGRiUDVqUnlnd2tacDFndEg1eDJDSlk5ZjBZcmNzdFcxNklWa1JkCktmUVBRaXVpcmxHOHdQVU1wdlJrWXV1V3N5eFN5Z3h0eFhBQmd3cEJUV2ZGYmt5ZzNIQldGaVhLcXlhYWRRVmZOUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaUtzS2wxMm9WcjIyOFAxWWNoaWJvV3ZUOU5xRWhmRW5yM09CV2VtR00xOGZZRll1ZHBoYURqQXJRM2l1NGR0NFZZYnhXQnRwTGl2UApDN1hTbTh0S0I1ZmtyYzg3OWlxZHZkb2NzeUptam04Ynkwb0xPN0hlV0ZidXdGb1lZMWw1MFpoTWpHWGRmOTlZVm9aeldhMXZMS3NxCmMyZmRXRmJtcjFoZGNHRlpHZnhtZzdnUnNyVkh5czdnc3RMenpRS3NucHBDZUU0NWJTd3JZdThzT2pLVmxmOWVoSURkVkZhZUVlNWMKVUZsVDlCRUlLaXZGK3hoRWJ5b3JqZnlvVFdXbGdVT0txYXdjekZBN2NGTlo2ZTNodklQS0NnT3JZNFBLQ2dQVjVqZVZsWXRLanYyaQpzbExac0JReTBxOWpkSmhLQ0cwcUt4ZVp1R3VCWmNWN0RkRitVRm1WV3l6MVJXVWxUd0pJZzZDeUtzR2QrcWF5SWpiUE1lV21zaExvCjBRUmQxVmdJeHQ0OFVGWkY5RFZlYlNvclZRd0lGQVdWbFlZaUNpc0NXTnlyS25Cekt0cWhpZUs5TnBXVlhMcWtZTjRRNGkzcEJ0MVUKVmdnZUVPb0xLQ3R6YmZNd1dhR0RZZERpWnJLQ3A4WDA5TjRLbmdPQkM0YXlJdTNCOStPR3NzTEk1cXlDc2dJR1JIY2dvS3hJenpCQwpkRU5aeVI3RGtqT2dyRERRWXdzb0t3MlFTdDlRVmdKNldNOXZLS3VJUFI5M002Q3MzSTIxTGhlVU5UVzdhUUZsUlYwcmx4VUJaVlh6CmJqQ0VENVNWYVN2V214akt5cE91OGdVSVpRVytqYUNBaThrS20zN0xUTlpFVWsydG04bEtBK0ltTjVNVlJtTEhnc25LclhqOVpyTHkKd0VtYytNMWtSZjVQbkFveldmRmtpYThLSnVzMjNFeldZelNURlFkblFDSm9xNG42NGp4ZlRGWmtUT2wwN2EyeUZqQ0JaTjEvWDBUVwpzQVdRTlJIU0JTbUNnYXo3WmJ5QnJNeDhvaTQ3Z0t3c0ZVWnlPb0NzVEdPWmdIKzZ1OE80NUo3cEMwWVNDNnVTQUxJeUdhVy9kNTBEClgvU3FtOTlVZ3Z5SUIwRkVBLzRWNjhlYngwcThWWk1QcWV4eENkWmJBRmtad3BrM2o1Vkl3Q2RMVWpQMGFhZ3FQbmlzL0ppY1BMNDYKVEZTNUJ1YXg0dStPQkY3d1dHR2dwM1B6V0dGa29ENTRyRFM0R1NsNXJEUThPazQ5MzBwV210UkVWbVpYS1hJS0lpdjBhaXlKZXhGWgo4Wmk3T2VzRVlyS0NmNmdmS0lHc2xHOFJHSElCV2FrVHlJS2c2NHZHK2xuWlhBTlo4ZGF4ODlPTHlBb3IrY0NieUVvTEhzbEdzdEpDClFkdU5aT1h4Mk9vOGtLeFV6TEVxTlpDc3NEQnVkU0ZaNldBeSsya2tLd2xXZytxaklJY2treUl2SnV1MmJTWXJKeVBxTW9QSnluczEKeXljb0s2eDZwUXhsaFlHTC9RMWw1U2JVek54UVZscjVoQUxLS3Z6WE1LWlZ1TTZzRWU4RlphV0k3akZycVd2bTdCb3FOcFNWakFLbAo4eThvS3dPMnJFOE9LQ3RySUtsVk0yNlZiejJ2KzRLeWN0R1NqbTFGTDdSQUFHN0RUV1E5Um9OMjBNSkMxQkR6V0wvNDJOL1ZqZis0CkUxV1lpWU5qVlZWNTJqUldlT3RjWVFXTUZaSGNYdDhzVmdTSldGNXJGR3VYdW5xVFdLZEsyRjhnMWcvYklERFZTRlhJSmhBc0RCQXIKVnMxbzBITnpXTEdPNi9jdUErckVEV0cxM3ZQRllFVXRJSW9FakdCRmV3MXhTRVJnUmJ5eXBmb0NzRUp5alFwNzgxY1Ira0xOYk5CTgpnWldGL09QR3I4STJpV1FWZlJWQnVtZHU5aXBVOVNpV3VkR3JVR2Vqd0NMUXEvaDdJY1J2OGlyK1JubnZUVjRsdlBialF3anlLclRuClVERHNVNFBJbHF1Umd4SmpNZ1J1c2JDclVGY1hmTzB1N1FLVmJ1RUdYZEJWS0crSWw5YUFXcGJHOTBDdWxzNlcyQmR2RlI1RXhuTEIKdUZYMlhudktwcTJDYWxlZitZYXRsaUk5d0dhdFFndmVpR1IxU1FRTUtDQjZrVlpoaEdRMFFLdUZoUHQ4T0tzRkViVlMzcGpWc3FRawpKV1VWbVZBeU5mMmlJTlhNRmdrWFk3V2FMUmVJVmNiQTF0aUVWU3pZdWE2OUFLdUlUcERuRXJHcXg5UUM0MVc3UlZZM1hSVTI2b3dNClY4VStTNWxKUlVvZjh3Y3V0R3F6eENuSXFzM3Q1d0tzMm1LcU9XQlZxRTRZU0RkWUZaSUl2S2ZHcXNJNUhPa0ZWVVVnbEFrdU0xV0gKRVRPQlZCMHM5SHNCVlpFQXo2S2xrcWM2alBZSm5DcDJBWUxncHFsQzZjTDhsMkdxbU0zQlh6WkxGVElzMWlsY0tGVmNIaWJwSUtuaQo4cGxCZFhnUzRVT0VXbStPS2dKdjBDMEdScFhaYXBFVG1hM3JLdFMvR2FyZFBQOUFxRWFKY0JCVXUrdi9iNEFxR3g2VXRmbXB1K2pUCitOVEMwdVQwb3FkV002OENuZ3JJSjlKalpxZTJzdkdSRzUxS2tFU3VtNXphM0ZZb3dLbk5Lc1dibXdwYkVRQ1ZxbHBTSlhyZTFOUlcKQkpxL3FhblZBdnVBcHNLTFl0YzBKODlRL2NTZWZoY3lsYUtEVVRZeEZhUU9mRGdHcHVJT1FFbDU4MUpoZTFiZnVGVGdGNmZFTjZTbApGcVkrMGd1V0dpaVZZS1VXbGwvblFLWGl6NHlydWtpcHVCdVBoRU1FcFJhOGVpS1pNTUZmV0psZlhwaFVWUDJ3N2t1RkZTVnIrZ2hJCkttcUt5SFc5R0ttc0FjaHRJMUpGdmxxYmtJbzhaUjh2UG1ydUtySU1QQ3IrQmpRazZLajQrNm5yQlVmTnlJTTg3YkJSUVJaU2grbkIKcHJDVkgvcE5SaVVnM1RhQVVTSGdRSTR2d0toNFdiTUFwNXVMMm9BMmVnNFdGWE1qbk1LZ29pSSs5SWlsdXFHb2l6WGo2VEJSS3lzdQpEeElWNDVaZW8wTkViY0xkYkNKcThwUnBJQ3BlaFpwZU9GUzhRWEEzZ29ZSzNTVFNGMEZEeGF6SXk3MWdxS0FrUVA4UUxGUUVFSldpCnhFU0RMSHNlbjBpb1VNKzBBMExGbWwwL1F2SUxXMitXL01hZ2ZyeFlnRTFzQ3FvRm94dUNDbDF2TFc4R0tzSVBwUjRFS3FhT2NnQ28KeUhDbS91YWZJdnE4NXNHZjRsVmwyd0RUVHo4bS9xcUt5QU0vTFhKZWduMmFQVE1IK3BSbHZYaUxMdklweEJWOWJPNHBGaEFrNFFYMgpGS1ZBVC9wRVBRVUF2bTdvS1JKbGoxd3FESjFjdWxBdGV6RlBKVlZnWTNaSlloRkRkS3RsS1VjZWxycktvZHpRVTBUVFJZczI5UlFHCm9lRU41L25pNTM1UEp4ckQ1dkQ2TktDblVBVkFjUlhNMDBBbkJmSVV1YXNwU3VrbW5tSWxEaGxrQUU5UjhneWhTUEJPU1J5bzY0VTcKeFNnRVg4RzAwMlpTWThCTzhmZVlMOVJwYzRZN1NLZklEaUx1SHFCVDBrTWc0NzA0cDYySk5oS0JZaUNTNEcwRXdCVEFEK2VuTnVWMApwcDBCcFEyTFpkNEJWUzBDVFlQVitJMDRoUTAzTWdpbnk1aDlBMDVCaHRTL2Jyd3BJdG1ZOVlKdWlpb1lCcmE4RFJKbnlDemRiTk01CjFkWXowS1lCOWd4bTZaaEtWOXhnVTRUWDRGK0VyVThKUVFOckduL2ZWTk93QmRSMGVIWU5YT25vV2tUZVRGTW9MSXZrVzdUTnBOQnEKRUUzMzN4ZlFOR3pCTXlXRGRkV05NeDFHS053MFUwaE1TVEl4ekJSQU13UjZBMlpLd0ZrZUw1YnBjQy9hUUprT2ExMENYSXBYdStUeApBcGtDQm1yOEtZVmUwelR2d0poQzZSYlV6cUNZSXI1V0ZDOWtMSUovbDBNeFpSd3h2UmltMDVDWlFKaE90OW9KZ3FrYjI5NzhVc1lzCld3MThLWE9jSWlkeHJsTU90Tjd3MHFEMkJMdDBUamVEQ1hUcDlNZjNJcGRPWmlPbDMzSlJFa3RjQWx5S3Y3UEN4WnRiU2x1YUcxc0sKMWl0RUMwRXRSWDBLZkxBYldycE94ekJXZGhFRk8xSXdTMW5sa1YvRVV1Q0JFQVVLWUNuZU9lbm16U3VOMXI4dlhPa01BR1BRU2xlcwpWZ0pXeXJLck50K3NVcE5vTjZrVTU3UDY0WlNpNklTVmVEZW1GR0ZCb3Fvejc1UEtFZ0pTdW85d0lVcG41QkJOS0oxT3NRU1BORDd0Cm0wOEsyYVBvcDhLVHpxUWJ0N0dqbzVwQWR0TkplNkJDdzRoTUMvR2JacE5TUFR6ckcwMDYzSlI2azBuSnhlamxnRW5IYytwUFE5bzcKbmxPQktyVGE0ODRlUVNYOU1LZ3U4NGFTZGtkN041TzBQMUU0NmJMYmJiaUlwTWNtSUdrM29HVURNVWRXZWMrTFIwckpTdjIyYWFRbwpLd21NRzUySzZ1cW5GNHUwcnFnTU5vcVUrdlFlSFpla0xJOFdUenRuaU94T0tvb0E2dGd6eUh1bWFsUW52bDhRMG1hOXdHYVFJcW5WCjJpYVFqcURnM2dCUzVBOGhJdy8rS0ZkRDNnaTFvU1FnbW9vV0tncVVBeFdEN2xoZVc3TlVUSnM5V3JONldyelFveFdMNndDWjRrYkQKb0pwb2swZXI1WHczZUJRTjczVFdUclpGcmlld281K2RreCsvbytQelg2bWpmeXQxbFAyWEtETEFTUG94eGtveVc1cTcwNUpxMTVQYgpNaTF0eDFjVUt3bkd5MmtJU1RDMFdYTzZ1enNodWs4Y2YycDFCYXl1RUwycmEwbW90VWh5ZVJqY2hxYldJOUs2Y3c3RDRJMzFYc1kvCnNhajBPYlFBZ1psQm84TnlDQlpxdk1TeWZvUUxVS3VxUlYrem5UMGZKR3lKQ2NmS2hDdEtrOHZUbUxJSTU3d2M1SXVyYkducVRDWlkKT3FRTVkvV1IrRTVqVklFT2lyd3UxT0xDSjlUeTBXMEZNZ3RiY1JjSUJ4NXErNnppelpiazZLQ1Q3V2x5ZjZ4WmdaelVYRUlKQyt2ZgptV2tsTkF1V2tzNmVoTWpSMnJwSXcrNWJnVFVwTGhnV3lqZ1JnWjRCNW0vdUtjMG1yMWoyc20zNzR0bGlQYzlBKzZOUmt3MWxJLy9lCnEvS3BiQTNIeW5rV01pVjEwUDJZaXh2YmhaUEppSDV5VWJ6RUh1T2RDMGpNSXl4cnFPSTNveXN4V2FQc3YwUGxPMUErc1ZCU201NXEKNjNCL0hTWmRZRUhva245WC9WMERza2pqVkVQdHhsWTUzYzIxWU9rdEd2NGdza3hMTDZjNXZBQnRrTkJTUzRWSHJqWk1qemlncVR1dgpyajBqSjhibFJkSjJEenRoUUJHYjJTRWJqZGZaamFvcjE0NlhvRTVEcGRCemdEQlVQaWFFcnRGMVFDZzFURC9FRjB5WGpPRVc4bkVyCndXQXhLRytzV2xRTlIwb1JqK1czT3YwcDBaTGliT0gxZVQ5a1B2QTNpMUo0ZkZiL3c0SUJIcFlVMkFCOHQ2eW14aFAzOGJzS3kvQlcKRkR3QlVOV25wTXpqa29wdzlRUDFORHNRNC9OU25XNm1wUzUyVkhaZktIdzJZM3F5aHBXQ0RWcEI5S05sOEJjNmtWVTB3S25PcktqWQpUUWNmbFVMRFNnaFRWaEcvRHNXd1gzN2M0MUtXcVBSZUx2Q0VWZG80RWsxTjExZUpPQzRJdXEwc1dZN2pGVS9Jb0hFODlZOUVySVF0CkJ6QXFaM1dsWm5OME1OMzNyYVVWekZGWSticnd2V0dPRGt2bXhaYmRybC9rTm8rakVHeUR6VzZPUTJFb2JpZTBQMzRoOFkxcmtqNm0KTWM4b3dnN09LSDVtM3djR0RPazdJRjZCcDFNNStBM0RWVUFMd09pZzZ5ekV1ckg3QW1vM3NLTTJtNGJBOGJIeU8xZ3FRTkV6V2RKdwpKUzU0a2p0U2t4Y0R6WVArbHRBTmY2ZTRPNCsxdG9tUVhlOG56RW5zNTZyNmZlU2YvVHdvZXVBM2hlZTdXMEhnUk9uM0xFdUQwMXpDCkxPa0NrMzhReTFzeW5BQ0hXQVF6c25URmJ4RllFSURuODV1UG4rUlhpUVp5S3o5Ky96anRRU2YySkwzZ090YkFnT09xV0xiWEpFb0kKVnVUOThKdHFQem1ZeVM2MHlNZWs1bXpGbnRuNERDaXgyR05zRllQNndheGxiNjVaQWl5WmxLelV1T1V1SEhqSmxLeGpzZDNRUUZjUQprTU00cithZ3JWOGpIcXhVUERaeXUvRzN6Z0h6Q2ZrbzNkSmZXa3BNMGFoZDVMcUdWaVRadXh1NzhVZ01FWEllaVY4c2dXM29XY215ClJKK1pYNFpieTdFbkMxWW1pQlFoVm9XM2xZaGlEajZqUzYzTzdpWHNGMENRYnRORC96alM0ay9xdlVQTUFQSVR6ZTNEYnhVNTZ1d0UKRVBYbncwTXhCRnNmbzZnZkwyWjcrUk5ZZWFCYWFEaU1DOHZIeUsvVEp6dUZmZDlXMThNa1FTSThrVFdUbnpuK0E0YkhiOEhIRGEyeQpKTDdzaGVITi9aTStISlE5dVBIVnhCMkFxNXZQbnFWaWliRXRYeVFFK1hwN2t1RWIxV0p3M2d6a1ErZ3Jza2RORlNMNTUzQXB1U3lCCmxYVXNzS1FzSi9OaitIQXowSmN6R2lGUVNYbnBWbVMxdENMRDcxY2JwUlNCZGVJbEl6QXhhMG1kcUdQdDdvS2QyRmYzOGxMVWh4ZFcKUWdwZ1lXMHNjQlYweG1DaDMxc0VkZk9lVFJoNnJaeVRlakdKRmZTeHRsNjl5STl3NXhOYjVGS0Jvekx6dFIxQ3FIeC9TelhkS3JvWgpraS9RUnJpT3pRMW9VWUgxdUxWRkk1bWNQYit5bTFSQmRRUkYyZWhSM2djVkpGOU02TXo0aEhxZ2FtNExrV0RhTStadzBocTdGR29mCkE1dXVxaWg4Z2ZOZmNyTVlxOFQ1TS8vMXN4M2RRc3dUeVBsdG1IREFxYWVaNDNsWnB0Qnc0U0lUVllHUGgxck5GZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJSFp1eFpxNXNwVmhVMVVIV3hneVZXSGRiRWpUaVh1eWloZi9BODRXRlZLL3Vya25jTWI0aDF0dXcvV0ZSTW9lV0lzUGlDOWRkK3FlTwpyZEVqcXdWMmkzMDBLT0lNTGo4Ri9sa3RUeGRIMHVHYzZoNmROS25YakdFQmYydENRc3FTelRxenlXV0RKSys2OTlQNWt4eis2UGg5Ckx2ZDhtZXJYU1lrcUxXMnZBWVpmT3haT1BSS29VUkNNampVMVY0MU42cW5kbldENjBhc0hpa2YxYmxVMUYyR3hPQnVwY0R4a3Q4MGwKcWVmVGg1MVZKREFmdDA1YkpEaHgzWlRWSldlaHowSmliaTFwTXVvdEpJTE12dUpMUnNkVVlpaVE3R1MzbnlPMURDb1RaTWhyQzlXbQpwVW1UMGZDa0pyL1R6VllaYU9HZUxESkdKSHQvSkRYRkkraGUyWkJ1eW04RDhWZXNRR3YyUGVzSVBBVUFwamkwdzVtNDlQaVFOVVl5CkJ3VjlGVlhNMjZMc1UxWHEvbXlIVlJWblFjQjA2cU1JbHQ2ZmZybXJGb045M08vbFR3bFJKRG9TVkZlU0cwVGRwK2dzOFRrajFjUkEKR1FBcUkzaHUxVEFXSnY5SUhFcTVCM2FsN0QybHZpTzBoUUhrYWRZMFhxUktQQXZZY0VzV092emEwOTRmbENqNWNRa29heS9BTzhpcwpIWEVkSkY0THJoWjVYeW5oS21yRFU1S09UMEtBVy84bzJNZ3laYm9IZTRoRldESjhobWF3SHFzRDZEUGszSUtLMXo3NURGUnFWSGtwCm81cTdwMGdqa2J2VGJaZndqVFRyb3JSajk2QklLY0RrODFZamVNclVlUTdiZ2dhZU1mUWM2L1NpRlZGWGptS0E4M1BhaGw1U0hxRXQKZXRIRFp6dmJlWFZGcHdsNTY4dENXWWwzREdOcm9oWVRpOGNmd0tmT0JlOStYVUVxZ1JPaEo0bGdQRTZXZlhTYk9EdWRrdGhzaU5GagpVajd2Vjl2bDd5eHMwejJMZU92eTN4UjFQY1JJVGxucXhzWGdzVlU5Sk5KZWhlTnBlclJVRmRCU3U1Mi9QZHFCOUVWbm14TDJxU29CCjl3VmJwb0VpZmxVTVRFbzFlcmdoRjA2cUc5UmsrckttdXBnVUxoMVlJc0VoREVUYkhXTEI5MGdmaEtGTkJsWWgrb1lRbUJiditlRVYKNlFkempjYXNXSnB3dUs2VVpJcWpCRkFMREE4bGNOaVJzU1d5UnZaM0JjZ1JoZkpKcEdrMk1lMTJyTkxqdVA2Z3l3dE1TeXc2S0NrZQpmai9zSWliN3FSRDBONDU5MlpNNkFrTWw2dHNRTnFha0dwMXZOUElqUU0zN0NrYm5sRitnR0RGSkJWdk1qcWlQUExLVzdJcm9FZUh0Cm0wa3V5KzdVbGtmb2dHRWQxVDRmVy9JV3Z6MTBBaC81TUlyYXdZSm5wdkg4OFRCRDRWT1ZBSnoxRFA0RUN1ZWowZTFIOUQzd2JDdXAKQlJTUkluYlFteitWNWp0V0l0VXpJc2dDZ2c3Zk1sZ2Z0MWNYdTRvNnlhVEhwU1VUOGZreHZ0WUlmN0p1R29NY0FXbGRGczNzTEpzZwpNZlRxOGNOWG5EY0dEenMxa2NONm9lb1lpd2l2SGZwangza0ZOQTdOeFpScUFacHRhSGgwbjU4cUxTbm11WjNzb0NWV1pidkptcmZiCnFaUEJzUE5sZ1pSdjlmQW50eFh4WVhvK3cwZ1hWQUx5WmZ6czVNY2FJS05PdXFJNkhzSTh2Sk5xa1lYTUUzdXhkd1hBY2hERU1xWUgKek50WjMrRGlOcHlpdVd5dnhybmxZaGxJeGdjMmliMW9lazAvdmdINUFMbk1IZDJFc1l1T2dmRUluUkdnT0N2a2xLaldFb2FLQkJBTgoxWmNQSzdYb3J4M0pRT1B4ay83T1ZLM0FiUWs5TFE3UDhuYktEeEZPd051OUdETEtVZ0hqSXVCOEkwekttWVNYQ0NqVzRHYndhSGxCCkpnaGxLcGJ3azhVdHgza0sxUnBKV0lWZzRBVWdwZ0ZHTHRzWUY0UHRZRUVyRlJwMmp5K29wL0NPOFhEb1ZseTYwcENaZmhmQ3FMQ2cKSm9BWDJhd1M0Uzh5WUY2YXBnVnN4KzVVT2xmOGI1WG1FQmZMd0pGMmRHa2JubmRMRkc3QzI2WHFjMEJOakFmZkFqR3dSSXptbmtSUgo4NUtTWHNlY3ExQUtrQXFpYzFCV0tsY1h1V08vZkxORUkxaEtSZkRKTEQ3QlIrNTBSajBFdys0WUk2dFQrckFxbGd3ckF0eXdLSTZNClBpc1FLTUhBakFBSGo1WDJqblFxYzNWREVCNEtDMGRZV0hqSW4wekxCc3V2TWpXcE9NV2FsTFptSkozQmZyNWtET1VPVlVqalRyTUIKV29UODlvYzBFTDVRbkE3Z2FDTERHWjBxVWl6RE1sWWc5b3ZEMUNpN2U1Z3VLQ0xsY1RNK3kwZmR6bUhvdWU3OUdHWnZpdVp4RzRiRgpRYUJRWUsxWWgwc21SV0RTbncyUUtPcFRvRGp4MGxpeEVFNWlGSnJ2SlI3eHNKd1BjZWNlMlFVQ1J0bHFHR0UwaEZSYlJwd0kzYTE0CnFvUWVSOStCSkJJampSQkZzdjB0c1VPd2NPS0dHSWowSXZqS0pWakswQU5CazVIcGU3UGRzUjB3V056cElQa0ZoaCsvRzBJUlJjSkcKNGxuTHJDeTI3VkNxcUxEeGVKY0tLTWRJek12RXhSTXNBdnhQemRwVGl1WEhEaEVicWo1WnFSM0dEM2UwY0E3RlRCbDlWSjlYcDRBNgovSEgxb3NXckNjOXVmOCt3RHNic3B3cGxlU3dGdkRGZ1JKUGFvUjF6dkR4cys3QVl2YVNQd2J0U0krZUVjWVl2Q0hsRmVFYVBWUjg1CkcyekdwQk5DV3JnSEJLNDgwSWJ4WVQwZThnRlZXVEhXb1lzZEk5K1BPYlE1dVZVUis4NFc3VWdTR2U5U01rT0tWbkxVY1dXTG1aUEgKc0xYSFJMYk1ibmhqMkpMUHA4VysyTHhMT1MzblYzUU9VMW1yWXNUTkE1R0UyenZoNVJKSEdpVmovQ1NReldJT2ZpNlA4Ymc5YkNSSwp2bkowNHNXSGx0ek5PV01TOUxjb0MyV1UvRjRyazBOUTBVVjdBSkMxdEU1MUVVT204cmRvTzdZZjRUYU1mS0I3NHc3RlEwQU90M2hGCmJ4VW9ZUmlhVzQ3bFlPanRqOFlETmliUW80U3NudTJ5bThCUm1WRHU0ZWd0SjdyaS9CVi9jU2R5aWpHcUNtRmpkQ3pSWWhZV3FBZGgKVVIzWExLZTZFMVo1SWxQcW1FeXR0cnRvNzU4a0NZUXRzM3ZNemhCc2N4VktPU0xlVC9oYlU0K2NpNGlNU0ZIbU5VSStxOTNRTFlkOQprNk1iSnZnZk5YdllhM2hMWVdtUHR1bWhrSmQxNnBheDB3RVBOYm9zSE9Qd2U2M29GOWY1eFNyQkp4SlRLK0c5UmNpSEl4UUtDZVVmCmRIVld4TGx6RzdsS1U1Ri9waFRnem1RU0NKMEVvdTlFTnNqU2dKSWlrZ1ByTEYzakRRdW1ZRm5QZEhLUGVUVnNzNW9ubDNoekNJU0IKLzRFRkYyY2FOc2h5VnJCandRWkw3MDVQVTZtc1BhMnZoSlZkVzNCTkpIbHh4S3FrbUdVVjR5dHA1N3dqSEVLaG5xQ201aVNGT0FsOQpJNHdreUdaa1JIN2EwR1RROCs0ZkJrMmlqV3JNeXZTK3BscjJ4WUNoTVUrN2JnMCtlcElOcGFRWmdlYVJHcWVwUjRzNC9tS21LMEk0CmdYK3hHZnlBbkNHckUra1NLczN2WmltWkRhbTZoMWVFVXVVVEdzeUNTWUVMSTdvc0hLblo1NGJ1TWpsYStNVU5mczRoNDhYQVZCQUwKd1Z1MkhuaEx1U2pmblJtWXhidU04aHZYdE1EWUpoNFRmRlZVUFdRR1psSFh3ODFzR1J3R0VBc3FWb2RsYWlpeXRtdDh5MGhnbXJKOApMQi8xays5VndWNHZZTEN2ZTJuOThTcHp2WUFxcCtxVzB1d1pCd3R4VTRqcXkrbER6cDFwbTY2S1FBM1p5UTA5Ui9lY2tGaU5oTDlaCmJBMERwek51TWNiYSt6MXdZbWh0bm9XV3MvNE1CTkNnMUYwL2F4N3NTQ0VDdzkycktYR3FoQVdiZURGZC9RaThVVjJiSXFkbVNuYkkKc0hwU0lwcjEzVWpjVVVjSkIyT244ZzUrSExKWlpadGp1MUhqM3FDTkR1SWh3eFF6Q2o5cXhGMWg1YjFHSVZqMmR1SVFFeVR6eU5JaQpGTGpkZmxnNTFhb0JkeDZSQkx1Mll5NkxHYmorNkVscXoyYWlDTVRuakdBSE1CYmhOQVhGZ0tYa2ZCTVdPVkpGenMvWmJqV0RUcUQrCjREUGNGc0JyVXNEWWp2VnhGNW5sK1ozMTVUeHQ4Qks0YUE2TDdtMVJvUDVzbHQzWG9FWnQ0N1l3Y2g3NGdHT3RiSStjU1BqMW1RMDIKdVovVEFkUTJUNHBZZVU1S2pOdzZBQloyRzJDZVFpazZrdzhSU1Q0Um9obmRjeEZmN3Q2T2ZSZGhZYU1mNXU1WERrdEUwV2Mxb2FZdApkZXBoQmh3dUFLb0IwYXdJZVFuQzh4Q0VacDZHMFFpa1FoZzJhaEdjZ1dYNlpGbUx4WHcrRXpWcVUrNjNZT2xieFlOREp6am1MeGtLCmgyd0hFMUhhL1hsUkN4Zk9XMkliWHpjOVY5SVZWQSttSDBuMktqcFhkWlhBc1dwQWxJWmNGbWFveVBKbkRoVWhwdExsYU9LcStZbVQKZStncmJGSklJeUNWOVh1UGtCL01QZkEvWUZGb0ZHOUxqay9rTWJFWERHd0lFN2dkRmR1YW9CUXVwcm9WaG5MdHFBdzNyQWdOa1ZMYwpSRkNmVlBQQXdrWXg2RDEwOHB2ZGpaQnJjUWlNRFphVFV4bFVIdTBHeCtnTGtnTzlQY3dwaGRYYmVSRkh5MHdLWkdmSmx3RjlDR0pPCkVKUnBaVFlOb1cwT0dMQ3dtcnN2QTRvU0tRMDdxTFJFUEsvUzd0QlNvc0tmYit0OXFIUnViQ1NBNGJhanlEZU55SUhSeVVqM0NCSVcKWGlhVFRtN1RrclNka1JrQ2ZDSWNpV29TRGlWaDBRaGlrTzdaYmczWHhaS3loYk9BVW1adFlsVGJnNVp4K1VXWlJGckVUY0IvUE5Jcwo2Q285dGNlT1JCR0pFYy9sWlltZU10bEphTWoxT2Rkd214aXowTUtBeXdFK2twRzlhbWRmbWNubC9qR0FEQnNkeEMvcnN1cVRqVWZtCmNKaTNhQW9hRWI5OXVtdlNNS0dKTklFUTNHaGVvSEs4S0tHSVNSdGIwQlc1akNXVk8rdzR5QWVMRVFodTRBcUxVcjNZcGg1TkZEbHAKUEJ3ZEoxaThIeWNXR2pneVpKRE12TnR1UHpRaU9sTEVVbVAwSE9velNjRndBMW1DNnA1UnVFWTFla0orSHplYnkwSGVhTWFCNGRiawpwSzRLdUYzRmJidHA1SVd6VXIzSys2UGdqUllzOWFnaG8wNUxFZmF5OTFTdGRkRWJSUU5IVjhUVEtUWExGbzlTRTFCYi9PVGpma1QxCmlRNXZ6c3NoVlBsSXpQZDJzMzc4NGI4bzVKZUJTREtYMlk3VVFBaGFsYTN0RnBVeFBKbVM1VHJGb2NoNS9vNGxxb1JVa0o0K1hkRVYKSHg5cTRhYm9sZDRRc0YreXV5YlRzU3RURXRnUEIxM0JMUzJVZTlieU9STXgwT1dMblRod1VhMFAwNFdMN0laSU5iY2RJNjEyYnRvcgpSbG9WaXFMV2lKMEI4UU1VUjZBSUZ4bTNYS0xNSHBiK25GQ25SSDJzVGs1eWUxa2pnVkwyeG9XbytsTlRackgyUllaenpNNjVqQm9rCnIvM0JKK0Nna04wTU9yR3dPODM5NXRnNk5TWFJ3b3dERkN5c0w4K1A5WFRVdEpTeDkxUVpSSEVraXVKY050b2dmWGhLbktzUmhzWGwKTTF6bUZhcVRwTStHWWtZQytWRGhrSmZjZHE3OXNNME1SVVptdlFKY1pFWnJzY0lOWUJ0MTRrd3NQTTMxTW5nTU94WU1KWjRTVXRrTApDcXlKdXhOWittUWVGUTFLVnRSUDFJbWpONHlOTDk3ajdHbnhhTUZ0T0lJUnNUMVBoTXo5eGg2cllaT2p5a3dXeithZjVJQU95NGhWCkk4T2lReWZDSUNoamFvZzAwdEladVJyR1EzRFBHTkNoeWw4Nk5SWVN3eFBtb2hvM1EwS2cxYUpkbW52YWNLWkVhU0hiaDVYb05JTlcKOGl6UEttNktxMm9CU3JqeUNUMG1Ncnk2MnFwMXlyaEk5U3lhQ3RnN01ybHFqb2FZMVhkTldISDRoUUt6NnNZdWxBVW5JYXYwMEhqegpZMDhsMzFrYVFORklFNm8zTVc5U05hdUxqZ0VKa1NWTDB5MXdhckppSENwY3d1U1JuS1dxZkRqVWlhK0dLdGhZL0R5TTFMRkxBcGVPCmpxWENvbmx5Wkl0WE1Wdms4TkJnNVR6SkZ1aGVjRW1GV21zNE01SEVoV1VuRE1ld3M0ck1ZYlpJbGUxUmtPZXM1RkNoOW5GWUV2VEUKazRUb2pUbEsvQ1JYQlZnRThYTnJydnpuZjhpVHpScFYrSk93TnNzVWxRVkZxcEZCT2NwaG5kSlg3emxZU25RSWc0YURRd2JGaTltNgpUenFZbE14YU5LQzFDU1d6b2N2R2VnTWNVNnllS2ZtakNEQS8xZ3F3S0dIVUVJYVlES1Bybkc1MmlQVVYxekRxU0Y4NXJnOXEwaURFCklwWnBwR3YxMDQzeEJMS051blVZbGd4U0krRmtPSGlpQmlESGUwYytMQVRSc0xZbW9acmFzOTE3c2hlV0RyNWxydUpnSjViQWNZWHYKdFFrenQxU05ERS9yNmxrUnk2M2tYNlMra1F0M3R3Q2hINDRwaU9FUUNzU0dQdm1mL1JMb282UmNIT2ZUWTlLalhCejVhYXdldXZWdApKNVBmdTVvTkRvY3FPRkZUemJIVnNiQU02OXBUdUNCY0xpZ3FnVEd0NkxmbEpFSjIzTGplbXBEdVJkNDVIRjh2RFlmRHJoalNKYmFZClRhcGFDclc1MG9XR1BUekp4MDNnWWVUS25Ma0luZ0paV0k4VTNzenR5TEw5M21qUGhPWUFqSzA5VGxWd08rWWdPQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaS9nblNRQ0trWm41Vmk2UG1mYUliRWxpU0xDcUVtck5KdWtPYjRRRzJPNENVc2hCV1F6d1JNUExuaFMvNHh6RjE2N1BMUUNBMDZrMwpxdS9FQVVJd0krVEVEc2VwUWVXWW11eC9kcVpGbGFYRFNrRzRGK3dRejZjclB4UzA3NmFIbFVPakNhdXF4c1owTVFDaWlhd0x4Uyt3CnBUQmhEejc2anJ4Y3gydnFlc3hRNGRQMERaSW5oZWsvSzNLMEpPQlNNaUZxS0dDbG84NWMrWlIrZlRJa3g0YXl5ZUtwWGZNQUQ1S2kKV0dqTStRc2xKc2Z1TU1WWGJ6VGlqOThQWVV6bnBEQU12UlMzK2RYV3FVS2ZGUjdjMFBLWWxsNGRuaWYvQ0h1R3NvcHhSS2EzOHVOVwp6K3h4dVJ4MmJxN3VvUGZNNnFtMjYyUzY5SnA2NE15a0RSY3FaZDVDaDBHYmt6MjB5R2xCZVZ2dTkzYkdJTE1BVEF1N25lbERBN0FWCkxpaW9aYzJPZVNGOHBJcDZ4WlVnNWdvRlo1M3lZOGY3SGJKOXVnTGIxTFR6M0FhOTN4SEIyT1NHQmU4OUg2YzBrM1ZOdExCUkJYTGwKcXJsSnJnZEs3RHU4RjVNdW1SdFNrUE5mMVduaFVRaDFXMWcrYUxVc2RoUW9FWmt4cmwrU2RVMU1reTQvemFFNm9xSElVenhOTHExWgpSRld6OGh4ODZEQTBQMTZWd21ISDJkUGVrVDNuYUUxT2tFaUQ4UURqclY5VXc1M0graVZkWkRGSEVDNmZMckk0cERNalVvOEJqU015CnhwSlF6bEFWOThqWWxYSmRNYTBSM0NVRGk0Tmd5UDNzS0lBaUFzMTYxNWNiRWNMQ0pRRUNOTjErejU0aHViVFduRkk5eXFXaDlrYUkKVmVra01KSlFlamJkSy96SFdHMTNWYVFtcHMyeU93MGhXakpSVTZKRXRGVURDeVVNc2FNSzVORUJpYm1yN0s2dmlUUjhOcW9vSG9JUQp1TnU1Z2hJNmMxZzVqRUpVejVET2VQeHdtZFZSZEt6V1VFN0F5UEFjNWtoOEVEQU1COUVZU2VTUjZJaWpvSCsvNk9XSisxKzlQc3BSClBndFZNbUtMMU16d2hxRVU5ekZNRktJUVJXTTU1Q2NOamc3d0w1VnZJSk9rR0U5WWxFbWlTUExhREZtZG5wUjNVQjRkM2s1MmRmSDIKa3pLWjE1alJrYjVBK0JLSG1tUG9UZFJVM1F5WlNHd2VFSmVKa2dxdXcxZDh2V0NnNlNNY0ZnZWdydysxMEtzckhCdDdLcUtOK25wTwpwckFRcW9HMmdpdnJXSHBuWVhsbS9DYjhTTlpYWWQyTEgxaEtjc0hocHUrRS9LdjRIS01yOWNRN3kzS0NLVjM0aDB1c1BLUmFxUU5jCkFibGh4dUtiMVNYd0swWUVNMUN3RUlWcVRCRkRuSzR6cXlwSW9JV2hKcm9mTWRQVklqb3RyRXlNY2pQZWpLb1VBSSt0QWFvcVVLSWQKbXhzb1l5d2puQS95UTZZL1FOMUFubXdiNWxDb1NUdHVhM2Jnb2thUkRuZzdVTFRtbW81QWZwY3VRYlVrNzI5dlYyS1ZOc25CcUxjRgpWY214L04zVzFaVHR5T3hQU0tIQlVpWDNmbVdaV2lzdDB0RlZIV1NoMTVCc3JyT3V2bk84VnBWaHAzYXE2Z2FGSnBUWnorSkhvaytmCkxXSHNBRDdhYjR5bVI3bUxrL2hOektFbndnZ3pMS3MydVp5WlVoeFlxUDJFOTdwSFBCUnEwTGZ0SVVjWUNuTXpZOG1BQk55ZHpNeXcKOHdBLytpVmdFeG5OcGtsU3lnZThIR1pFK1huaEV3eEp3bDVzd1RxclZSeXFSbFRzTE1sQ1Z4dExuNUZETXJhSnBIRHJwby9IckRJcwphMGtHd1NrZEJvNzRWUm54dUVncGg1YVZtc3hvNE1HZzhEWDdFMUY5TGFLK3NZQ2h1cEFlRERJQjFJcEIvcG5zNVM5MGc4ZWd5SmtkCmJ3VTlFdzE0SzdvekRZOEVKVGtKRHdJK2xVbUlXSFVKQWVwMnQ0b2JrTUhhOU1JcVF5dTlRSkc2a0hrSENRYnkyRHRLVFFSL1RtTE4KcWFVNi9UbGVaWEYxRkxlSnB1SDBjQkd2MFdSSHQwdk53bkRaTExhaitKRktNYm9OTWZac2E3S3FocnFoVW4xcWZKTFV5OHAxM3lMLwpUTG51SEphYWNzSnhPcHdoVm82NXJMNmpMckFlbWdLdGZFNVE1bUdsZ1B1L0VDR0NSWW92Uk1Rb21zdFhUU0Yxbml4K0p5ODM2Wjg1CnFtQU9ubHFIWk9VOEtZekZpamltYUxFVEVQYmlSWDA0WlZ6MElVZzhxVXVCakl3WEhwWWQ3bnZXWmFWU1JrclhJa0xCc2VTcE1LMzIKM05idVNtdW9idEtRZGtIdjRoZFAvM3V1SmxoNUlWalIxSHZOQWtwMnFXbWlRQXZOQUI1ZW94bzlPNzBJdlRZVkN0Z214ZEl6dTRFdApXeUJBOUlVNkM5VVdwQmFsTnQzdVJQSUV3YVU1RWNGdWQ2ejZWb3JhMVVVT21nVW1ZN2dLVERmdEF4a1prcy9QZmtNOUNQYnhaWG5VClcyNkhodm1MU2c4bExiQVJucVdtajcxcmxndFpsMG9TR0JQa05TSS93bXc3TmYyUGFralY0M2tvQ293SUtNVjg2dFFjTld6VkJjZzgKLzZ5S0U0SjYxQlN2RkVOVmtCS09wcy9hc3ptSmw1MkZMaTBTZUJ0bzB0aTFtVmM0UWxpS1gyUmxGbjZIMjBpc2RzNXpXb21DTC9uWgo4UC9IM2gxRU5ta3FYRWlPQldwVVZidFp1d1VZSU1qdmVxbEtNa3ZsOFZSd2dsWmdoV3ozSnY0azJ6Z3dLZ2xXMHpnMUMwcVVwV1J5CkFDcEx1ak94OU1rWlMyVVNJQkFpMmpNME1iRFdvUWlyUXRycFVkeVEyL0F0aHdBc25mSSsrYVpJSnpMU2loOWdIQVlXNGxOcU1sME0KSzRtZHNBWFNwamdsckZRdnlwMVMzUDdxWHQybVJJM2pqU2wxNDg4SVNGT0hEY203YWk2SlJMY21jYkxhVWQremZKUytlbzY0WHArbQp6TU5DTVFjc1BOdmNGQ21PUFlXeHg5SWtNdmNLMU9jV1BKTXA4Z3E3b0tRUWZTQ3lwMmM4Z3RDU25YbEZVUm9CT1UzVEd6OVdKQXNVCkw2MzZIdkE5alNnOVoyQVB5U21GL0I5LzdoRGE3MWdpcWp1VnZFeVNKMEFyUXRvT0cvQlpQTUo2eUhKWGtVQmNRYmtMa2FwWnRaM3EKVXg5d1hPN0pkN2d3U2hSUmMrUXF1bXFvWGIxYzFPazRFYnY3cUNxWkRXVlNET2MvK2xtcTlBa2ZrZGdIMFJ1cE9nUk1rUUhEM0RXZgo1Ym5pcWN5UFp1VmNwSDl3VG9vcFdnazF1akxIZFgvUXNMSWJBR0ZjVmIrZ01xRWFnZWhoRGdvdDUvMUpEazhEQ0V6Nndha3B6MXJECnFXZ1hqN2s0cjhEclpHMGZia045RkdaalF3d21TRkg2bjF3cnJtRWY5YnoxNXU4OEtxb2lYZ0dTR1FaOHExZU4zSVFhWHNwSm84ME0KNDlKREdqWnEwM2w4MW53QlVrQU5DYXJPVzdGaGR3Vng0UXFzS1ZWZEpCMHRmclBETmMwZlRremxqYUJpVGc4ek95M1Bpc2NpL3BFKwp6QjdzQm9oRytYSjJGTkh0WWFSN2RZbTZwY1NuM3kzaVlTVlQxWDFTZmd0N3JxRGdicDRWcktyd0NvcEVkNEtSRmtaUitsQVVSWHVpCjBSVGpsNCs3QWxSM0lHVC9FR3BJYXBCS1VOU0VsWUFlWnJTd2FLNW40bmFjOHhCVWRxa3lQL0Urcm53RThwdGNKOEU2dTc5a0JqcHcKcnF5bTQ3ZHRsa2VMS0IrczlHaG9aU0Y3cVk3dm9yR1JmdEZLd1NFWjZjK2VaYldjSlVUajhXeWsxMjVhMVlONEdBZThhdndJOTBRcwpTdFdSdy9LaXBNb1MzamQxVlFzMVNuVThMSFpVdjVLbzVKUkFxY25pV21WMENtUWViK2lyMTU3RFlBeUlwZkhDUXNiS1lRcXZ4Mk92CjU0bFhuYUpkK1V2bFQ2TE1NaTIycFhyc0FOUVM1ZGZkMm4xa3B5TXV4TTRiak9qRFNnUUNZcVkyS05tWDNER1k4OXF6TDdJTGo4OXAKa3RlR1EwMlZGeks3UXpsSFNyWkVxVWxPbG9XaEtHbWs0dm1rdWdpZVpLNGN4WHlSU0F5ZlVOd2gxbjh0MVcwWHVrY3M0OUtFSzJFOQoxazk3NXNJMERKNnJLa0xiOE1UOERGZUUxaHBUdGNrZTdhcStWUk1FTGt5bXBtcTkrRmhKa0QzMWhDUk1hNHQ5bFhMYzBKRWk1ZUk1CmJBbkdvV1FXT1FORkEreDBmWUtBRzdpYlpKVDdGQWZIYXFpWmhCRnRxcDVpWm4zUHNxd3p5aUtIS0lrS09WZHpmeWRtNEZrdnpkcGgKT0tiYlQwT1lkM28ycGpxZDdueFhHVHpkRlJvbzI0Tmw2NzlDMThIeXVFZFYya3FINTRDc2ZWa1lmTmRsaCtTYVh1TVAxVzB5Q2NzMwpEUEkwbmtTdzhaQ2RNelR1Q1pWeUZabERFOFpqWHhFaHk4ZlNZWUZYMlJ1cnFPSmQweUlzbXlzQlZBbGRJVmdEZTZMMk9qaldNdjdOCldjbDZWbUQ0QlFrc0VNT3EwaHlyMUJmdG9vY3p1cUtub1VWaWlJU1l0dTNHRTlLalE5TXpqcmpvcWRmRnI0Z3NaUW9QQjRGanBkRzkKMFJweGIxemp6SUFWNVpmcjBmb2lVcDV5K3RmaitRbmI4UjFIRkxKVTdTazhCU3piMlVCVFNrN1hLNkRvU0o4cTZPanRhT0V3aEtPSApxSVIzZ0N1azZYVXRybFY1eEdua1VHS0hPRU9YRG9TSUdPalNydTNZQ3BwbFBzdFNoRzFCZE96czJhTjg3VEg3Y01wRlVHSTJLOGVyCjVYdFk1RHRPcFEzT2RnenZONlZaV3IzL2ZvNzBibHQ1dFp6WUlQT21RZ3VpUy9wMU0rZ3lLMTk1NzJCMzAxcGNkdFM5V1lLb2h3WlMKQjliTFBTNEdBeUhhM2IyZFJGd3JtV0tBbnh6ZWN3ZjFpV2dicmtBVTRTb1pwWWI0TVZFbWtJQ3lKR0E1YWNTM2xVUm1SU0pGWkFvbQo4c29TZ1BJMTVtaEZWbnBNM3l2SVlKT05WZjIyTTdxN05PYXZBRS9QSlEvOVovK2VFL0pMSVUzZVRLWlRZVEdHUzZvaTdIZ2dadUh2CnJDa0NFSzVESEQ2MndjMjZTVXBtc1ZsQmFIVVF4bThLak8xNlJsYkJzVVFwa2RXV3JJZFpUaExxSjVQRjg4ditBdmVrdm1aUjhVK0QKL00vbCt2L1lVV2w3WkJyR1Vya2dWUnRzWnV4aUs5WXM4ZGl0bjJRcis2TWdLdVNDMkNxOERVSklwSWlJY1RxSDFZNUdBbE9jMVZqUApPN3dDVzE0RnNteU9wVW1zNDJTWlVOOXFlcDBab3YxczY3SWtReUFuZzV1VlIrTWJGZEU1bWpURm5wemxZYVZPbWhaaUlkR0phWmVZCnhyRm0zTmkwSWh0ZEg1TjNsdk54TEdTbTd4Zmp4N2JvTXBOaU9pelg1bmI0VEI4RkR1VW56ZDNjeHhZTkg4TXcxYjBkWmhnRytPR0oKMGhtbjlyOHJ3NzhydlZnandIQXJWTCtQNElTUE1tNkRrQlh1cHdMNGNVdng1Nm1DMTVvR2d4K1QwMlFXV2ZxaDJuQnVFd3Nyb0lBWQpEQzJ1S3RMS24vWGJMdjQvbG53WHF4eHJrcENWV256bnczbEoxTEczWGZyVjVsWUhFUzdEcERRNVRUMGZXS2o4b3VheVNrWnQwenFxCks1TUtxa0VvV0tXSnVsclZ3OFA0bnVWNGIwOTdUMElsYUkxZkVQazFtMFRFYmRRZXFxZ0xXY3pOaXQrbllpUWRrRUVzejRjbnhWbWQKRXJlbTJxdGRrSkdNUkNXSUUyTklNemcrcy9uaEVQNUVLRklFZGtMbXcyVWpyeDMza1k0OHdGY3FCL2Rxa1hpTlFuWEFrSHBSZXo3cQpFM21lUUh2TWJSaitvcHMxc1pRb3hJREhsVjVjZ0laK1pnbUhhekpaRC9EWnovcnhPenB4LzVXai9iZHl0S1BDNElYUlJwUXNEU1d4CkdXRkVUSnZSR0VPMEVjMW14T05tYUpmbHpHc3d0RUdGWDEzbFd5eW1nTHRMdXZ4TjBFWjVKc3VlRE5DT3psT2JuNDNsR3Z2djNQanMKdkpRdzNmUnNNbU00ODBjZCt2SVljN096dVZ0U3BRcmpjamo0c0Y5Qi9FaGVLbGE3dWRuMUNiU21zZG1JRERGYkVOVHNadjNjQzVvZApmV2syTTV0RWUyYzRxYkdwMXFPOWlObkhhR0IyZGRQTXpjc0dtcEF3aVJ1WERiUlJMV0pqY3lxdVJTdTJEY3V1Vmc2OFdObE1ObVpWCkozT2dxS0dvQ2xKMmkvbjJBbVZEQml1ZXM0UGNBUkRjbUd5V0NGUVJmcU1ndncxWFl3Y2tHOFhTSEZHRGtVMHBReWx2UkhaekFkRW0KWktPM1dyWXdINTIvaXVvV2J6NDIyNitab1UwaE13NlM1NEZqTjh2M1hteHNBdUJhT1doc3hKL1VVczlrYkt6K2hrOXdZMktaQ3k3OQpjTEZaZEtiY0hCT0lmWVppN0lKaW85OU5zVHlNTXl2b3RNOVF0US9qYXBpaXlkdStpZGljeUxzdzJRUmlzeDdRNkhIaTY2SnM4SVhECmpxcTN6Y01tWlBqYmhtSHp6NlZuczRITnFDcFRBdGdvYkpHVlJZY2dDWHRVMFZCdUR2WndtR1Jqc0Q5V05FeCtiUXIyY20rL0Z3UWIKcXdWMlJBd0c5bExUd0NCZ3I2UWw0Z3VBVFVHTjlxRjdoU1B6dFF2NjlYSS80UmY4ZW5ablpZTjlEVUJFSjU3YjZPdXh4Tng2a2EvWApWRS9qRGI1bTFWbkpxaUZnZ0pjTkpVUkN2Sm5pYkROUkpTSVdKeDBKVStHckRiNkdSZG1ORzN5ZDZFS25FSld5MDBWMGlRbndOUzBTCmxNNmI3ZGE5REE3d05kYlBUMmlHa2IzQ29vY3B5QnQ3dmFyVGFvRzlSajhPYlJiWWF6YkVZT3p0NWw3TE9sWHZxZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJaE0yVExQWWZodEE5cm5pOHVkZXdEaW5vemIxbW01RHVza2J2cDFqcHpiMWU1cmx2N0hVMEVRcnFOZW8xbXRkeUczcU4rV0o1WmMrQQpzOWRWbTNpOVpnalhMdUExakV5QkJ1OGFjWTJSODdlTnU4YlpOS24vZGlVekdqd3JiR1BXOVJvbWk0Wk9lUTBuSDI3U05kYTZUTzBFCjZIbzIxY2dHNWhwbHU0Wnlic2gxZDV1bXpiaHVTeDdiUmx5M2kzRzRoNjVtWmFZQjF3Qnk4S2VEYjkya3lIelJyWnZqY3NHMmJ0TjAKMFVCYnc3Qi9LYkt1U01kUTdoMWc2Mmo0R1Z4cjZoejFLVzJxTlhNVDFDa2FhdDBqYXhwTTZ6YjhTdDFJYXlTREZLTnlWZ1Fhc1AyRgpjSEpNVG5IZVBPc2FsVitCczY1UGFEQ2R0VWM1WkhNUng0WlpWME4zTnN5NlJnMVRzS3hoR0cxOGU2R3N6N0ZNc21iK2QraXJvdXFYCkpUS3NuRDhnYXl6cXBzVm1YRFFnbDZoaUlXT3M0YXlSZzMxanJITS9CVVNrV0dkT1pQTHhwS3Y1N0FsR0tGVmFic3o0NGl4ZkRHdlUKeDNEdEdBaHJRRkthZWRVa1dHT0daMlRoQmxpVGlQSW9qazU2U0l0aXQ4Qlh0K1k4NEUydnhpcUhTTm1BVitQWG1FOE5Kalc3K0tVMwp1WnBRa0J0d1hZTjRIZHpxNkNMN3dsWWo1YUtVcnFuVmRVVlkzTkJxSk9NWTY3eVoxWUJpODgwTFFEVk9xUm5uR0FicEdHOWdOWkRsClJZZGltU0QranBwVzVudGhVQkgrQmF1dWthY1BWald1bFpORm9LcVA0U0pWc3lLeXBrT3FidEhIUGtEVkxRcEpiazUxaTI1VndhbHUKVVVvU21Pcm1ibmczcFpvbEh6SXhFbzdWbjlJMlpsUmpBK1ZmTDBRMXpvaDNMUWpWSUV1d1NqMEExYTBxRm5uanFXSFRoMmcrTlF5YQpONHlueGlCRWljMU5weWFVaEJoZnc2a2htbVRvT2VEVUFCQ3BxdWxpVXlORnE3SGJhT3JhTEdJTk1qVSthR2JxYmpBMUZTT1BzcUtzCmRhZ09XbXdzZFlscDlxWlNJd2wvTTZsclpPY0RTVjJDVG40VHFVdG9Td0pJalFha0tsMDBqNW9kU1MwODJEanFqREtVcE4xRWNGR3IKdnMyaXprc3hvNXRFWFpqUWxEeWQza1JoWms5MU9nemVsbUp5NzRXaFJybThJdWltVU9kZFhCbHdhY0JzMHZyMllsQjM1NzNDOW5DRgptWVZ0OEpvWUdVMTNQVGdFYWk3UDJpRlE5eWpqRTMvNmNjTHVoWjkyYmVxaFR6OU9TRzM0Tk1iM21qK3hweDh4L1E1Nit2bVROM2dhCmZsVjZZNmN4QjZKbjhNWk9WelpsbFk1ZVZZOVZ1ZHViT1QwWmhHN2ZEblA2RVJicklLZVgweW92NHZSeUVqQ0kwMXkvSE53MC9od3oKdmVmeGJBMzRoazF6cTVJdjFqUzZSeHBIZlZqVGp0TnQxSFJYQ2ZraFRXL0REWnJleHVCTUw0Y21BaC9ORUdFYXg4QnpiQTYvN3EzcwpHRy9HOURFY3hQUzJCV0U2NzZyUEFFekhxM2p6cFZFTTBFZ2pGbDRhU3lXMkZ3cTY5TU5ZWktwdnVqU09rTnVZZ1pjV3BxRG1nNWZHCkI4MHV5aSs4OUVOSVl5a0hMLzA3SnQxcVQ0Y3ZEVkxCbU9aOTd4RUx6a2RuSGovdzBnWkhiTHAwRG1MMURaZkdLcHVwaW1CTEwvcXEKN1Z1d3BURVN6Zkx0alphR1o4Q0tkcE9sSC81a3Rab0JEaW5LeHovT3p6c0dXUnBlVVowenVBd2ZreUdHTHZiaTNHaHBPUVhTQW0yeQpOSW9sQVVFOFlHbmNxbVM1NHFPUGdHcnpGMVk2bTBpd3FkSm9TUDgwZ1NKSU1NQ3dKVVhSeFpTR1lLUzcxNEpHYllqcmpOVlE1Vld6ClJ1Y0dTcE0vMmkzR2xQNWJsV3liSncwRDVTQTNUaHJIS2sxdUZJVHp5TkYzcCs4bHlXMk9ZOTBzYWJpRzNiMHhpRlZoZWZqVXRiSUsKa05EWGtiKzlRTkxiR0J4cEtDSllUeHdZYWQ2aVZOOFVhV0pPeWpnUTZlS2lwTTJReGhZTStONElhUmo1VUlJZ0RTSENNK1lCU09QcwpyVTNaSlk2NEFBNU5RWTh1UzRqaURZK211bzArNVdGSDE5RG1CRG9hUlJOYy9nUVJHalFoeWlGdWNEVFdHTkVWazhiK0dCb1pzTkp0CnVLblJ4MmhvZEZ0V1h3UXorb3RUSFQ0M2hpQmo4aTVtdFByeWpINlkwZFRKc1d3dm1ORlVDRkltZnlHajhhRXlGckNSMGRoTUJPRlEKV0FGanpGalBSWXltTVYzY1o3M2NlVzFnZEdJQmFodHZZRFRlTDNJRXJoMjcrb0lZR00yL3AvbkV6OEd0RCtsUk56QWFNa2psRWdNWQpMVEZTK1VTTUp2U0JSYVZCaktha2tzSEZJRVlUNnNNYytrMk1wbFVNWVJPaitYaEdiNGNZVGVrSzgyNDNNcHBxbFZibVJrWlRxY0p3ClZDQ2p1VWt5WVB1dzR5Q3ZaN2c0a05GVXFqNnRibVEwVkRpaUZ0N0lhT3JhQlFNMk1qcVI3Y3NDQXlPajhVNktmSHNqb3lsc1pwQTAKa05Hd0VJS3dtZEZpSTVtVWZmb0ZKdlZYMnNob3FJK1VPUXhrTkhYQ2pEM2Z5R2lxeXhoaURXUTBHMll3dm1wa05BMTh6VzlrdEdScAovUkNqYWNDU2JST2pZV0hkNEFzWmpVc1MxRG1RMFJCcUsrWWR5R2pLa1pSN3ZaRFJiSzRiM3hGcnJSbTdVa2JReUdqRUpab3h0YUdXClIrQ01NZHdBUnE4bW9ldm1SYVBObnBvK0hsNzBhbEhHYkdBME54b0hGNDJqRU9oNTA2TFhqT2RxV0RRRGJvejhCaXdhbDBIUjF3c1cKaldLZ2lMS1RGWTFPN3VSckJpcWF2RjJWNGdRb0doRlJkVUUwSjNvVzRmdzJKcHJhbDZ3dzg2WkVvMCszMmo4YUVnMkRHSjFtUkdPMwphb3owUmtRallxY2laUk9pR1JTa3VpRUkwV3p5emJ6aFRZam1GZWRIU1EzbHBCNzNpTnFFYUZTOTlqcSt2UURSeTVXdG13L04xdHJPCmV4QjB5Szdmb2pkdk9EUnN4UlhOWkVQak1Bb0pDdzNOWHVDUGtKZEJoazRVSnlUakdOU0VKaWlvZ1liV1RPS09pQnNOTFE1Y2NUOVMKZGpzamIySHBXQUtMZ0pyQXNmMW1ROFBxQW1pem9XbEJzNWRnUTlNUVVPbk5ocWFWdFVuQmh1WVAxQmtrYUhqalRHaXQrZTNGaGtiQQptV0s4ellabWFZTUt1cU1BQkZYTi9HQnVPRFRMS2FoaURqZzBLaFNFN3dvNE5HK1FxaXd2T0hSUzhmdjZ0dUhRN0xmTkFIekFvVm5iCjhKZ09zK0hRckM3WldHbkFvV2xoSENqZzBMU29zK0lGaDZZU1ZTb2wwNkhaVTZpNXBsS3lEUEFpdXNzSU54NWE2bFNTMDQySDVuYmsKRXdVZUd0T1IybnZmZUdoNk5XcDFhRHowVWJFR0hocVdHcFRualllR1ZVNkg4ZEEwTURvWmVHaGExSHpxd2tNekZzZXFVTk9oMWRuRApNaUNoZXhCbTR1QjJBNks1T0tKQUpBalJpZEJmWS9ERmlXbHVoZjRpUk12S1Q5ZUVhQjVMOWFzaVJNT2diZzQzSVpvdFVpaGFDRUswCkZnRm1SbXNwWE1aaHFHOUN0SXFubW5SMVV5VTl4WE45SUtLNVlKa3UrdCtJYU1xMHhaTTNJcHBLYm4wV1JrVFRvZy9nWWtUVFN0RkYKTUtJbGxjOW1BVlF2d0V3MHVCalJFc2JyY0ZwTnd4OVpKdEVURWIwVjd5OUVOTDFDOW04T1JEUnVtUVNGZ1loV05PTVRJWm9SRGRYVwpHaEhOY0FhbnVHQkVLOERSamU4SVJuUTY3VXpNaUhaMFpCNUdOQ01xTS9BZCt6Yy9ybEorV2pDaTZRVXF1UjByVnN5dm54SFJXQXhJClNCSWNTVmJhcUFpVWlHaVMyWko3S1c5RU5BTy82dkpnUkRSZU13SW9naENkV3JUTHZRalJMSitpeWlZSTBXd05LSTJRQ2RIMDVIT3EKYjBKMDJvS0JJRVRMY3ZqUVgxY0FlMjJBMGZjSnVYL3dvWkVFWk5vdThOQ0o1SXRIb0NQNWQ4QUJrdmgyODZGcHBUVFlmR2djWDVMegpBRVRESWxuNkRZaUdWWEptODZGcFVGclFnR2habVBDNkFOSDRSYmFtQ2o0MEVwUE1Cd1FlR3BtOGdQZHRQRFR6a0N4VENqNzA2dFk3CkJ2WVpRMXdrd1RZZGVwVEl5TnJZbzhOd3NLRTdxc1Vka3Qxb2FCZ2ZzNXM1czhBZzFJN0IwSkJTVDBXd3RtdlBkcHJVV1pzSzNhUFUKTkxicTFSbXNtd25kM2Z0Nkk2Rkhjc0lxU00vb3E4MHA1Z1pDazZpODZqR3lOM2FUUHB3NDZHMjRhZERIYUJqMDlIeStJYytBT2FtQwo2MEpCaithdytONnFDSHV6U2REYmNJT2dqMUVjNk5HdFBnME1OS2dTQkx2ZEZPaU54QTRJTkVMUFRBa0ZBeG9HTmErN0VORFlMVGpPCkRCN04wTzRFQUhvK2Z0MXYvdk9JRmx1QmZ3YkVSWDBEalg4R3RVUjB5b3YrVFBTdkEzU01wMndXY0xDZlJ4SlM4U0kvdzdRc2V5TUUKQ0lZYURlSXh2UXhEbUcvczgzZ2luV3ZxODNCRHBBMTlob0Yxb1RmenVkc1AyY3huQkVCWm94SEk1eEVmN1VFK2I2UmFFSjhCWldOYQpPSURQNElSdUZuWmdpV2tzTWpJaGo5M0VBalh0K2NNZ1R1Rk5lKzVKZVYrem5oR1FaVm8vVU0rNllCbnVYS0Rxd1FMMGpIUzMrbkdaCjh6eThTbjFobnRuM2VkVkRlZTVhZVczR2N3L0k1bzE0NWluVkEzakdEV1lGalBITytMdll1MjFuSDJGK0F1N2NBNmtiYk9mcktKdnMKM0NNekdtRG5FU21rb0RqdmNlREdPZ09ZcURKZVU1MHg1cVViNFR5alYrTE5kSjdkWXZTOTFUS3lQWWpPa1BJMWs1b0Q2RXk4NWF5SAo1d3hEOTAwa3pubUdoT1RHT2MvZ1J3Zk5HWFVPVE00RnpCbkVhdmJqdkZET2k1SHNja2pPV0NvejcyV1E4Lzc3NWpnZm96SE9RTHBFCmYyRldiczFpWXQ4TmNWN0JTUXFHTTlhUyt1cUQ0WnlvYlhjenU4MXdobFVMbUlpNlVYMURrdWJPcTJONVpEanpidUVMYVJPQlZJRncKaG1Xd2ppQVl6dHlHSC9waE9HTUcxZlFRREdjMGVIZXBMdEw4V05Qd2hiajV6UitYUjY3SXhqZnpsSGgzQTkvTWd2NFp2T1ZkUkFLbgprUmNkL0daVzlFOURzTlZaTUVYWDdadmZ6R2ZKUWduem0vbEtOQU9pSlY1T1ZqTysrTTFzRXhsWG9GQTNQRDBPWlFZNGYvV0RmdnpoCnZ5akFtWEZCVXE1dWdET3RsRGdFd0ZuUndwSVBzSmxoUURXTHVCRE9ERmRSSHhRSVp6eFgvNElSenVBeDhnVzVDYzY0Y2hVWUJzSDUKckdhRDRLeHZlbW9DUFlGWmRueTFENlhNV283Nnk3WmpsdDNPU0h2RkxNVmgyUVJuR0tRYUNJSXppMGZWOGVFaU9PTXFwVTRMZ2pOZQpPMEdiQXVFTTEwNkNzcHZoZkR6WVlEano5UXlwaGdnUFpGSU1wYkEydy9teW11SE03cjBNL1FmREdSYkp3MjZHTTNFUFZCd0Z3emtSCnErMEtldlVTaDZDV3c4dk5jTVliYXpXR0djN1U1YW42MVF4blBGK1ZJOThNWjFTbmtlZ1ZDR2VVYWdtWDdnTHI1UVkvTDRBejFHWEIKbDZmSER6ZWFRMGZ3bS9HZWNIMXk4NXNaNE9Gd0hmeG1CbmpFSmZCb1FVdHpEZWlwbHFMVnJYMnA0K1N4V0NRZC9HYitaSlp3WitPYgpHYWlNWnZRcU9Yc2VSUUUzdm5uTllHd2ZlalBLYVlSWE5yeDVEcTEyTjd1WjVUVTg4d3Zkakc0d0FrR2IzQXpwSkN2MUE5dzhvdkx2CjVqYVA3dUV4c00wamlwZUQyanppNDdtb3pWallMQ09hR1JRWkp0c0dzaG5rUE03N043RjV0Q0JJR05nOGhzdWlqV3NHSW94Qm1rTnIKUnRzWURzMUJhNmFzZ2lYL2hqVjNCeDlmckdaUXVoZzNDMVJ6TDI2OVkxQXpzVjVENWRDYjA4eE9SNDl3enJ3c0hJYXZZRkNhMlgxKwpLSm04MDNJOUtvQ2p0SnBpUDBNWVdCZUpxNmlQR0FrYjBjd3U3MVdmTlFOUVNOVHhXd3BBTTZocjlFQnZQak95ZHdRakI1NFpFQUhHCnhJTE9YS1A4OUlZelF6WTFTcWp4SVBNTHJ6RFF6TVF3ckZCM1dqUU12UTlMNHdQTXpGWmZ1Und1TS9qQlZCZmRXR1pVNEdxTllDcHoKYTk0cW9NeFlGN0hFOEdZeXc4Z0ZTRENaSVYxcTVpaHoxUXh4azBpSkY1SVowd1RCOUVGa2J0V0Z0ZGR1cW1pOWVjeGNpaEhnWUc3TApYamNFanhuS0VzN1NONDRaVjhCZkN4cHptNmU3TnljVDFGV0pvSDNCbU52d2x4WXM1aGF6VjZDWWNUN0ZqTWFkQk1lc3dnS1RJREZqCktocVhxTE5OZDd1NE1jeHczclg4TjRVWnB5WkloQ0hNRURuTnRGNE01aFdMdEdBd3J4YTk5NHhnWHQycDQ0dkFEQzJ4Q21rTllGN2QKUHg3OFpVRWJ3ekMzVGxqTm5BeGZYczRGYlBZeURQRmJHNzNNUkFmWEJvRmVqbVRFSmk5RDVFWHF4dzFlbmlNNktwaTd2QUt3R2RqbApGWUh3aTdxTVJJdmVtNzRqOHNFY0NEVXoxeitVdzkvVVpWcEZFN2NNTHBHRGE4V2R2Y2RxanNsTlhZWjFzZUEvcU10a1JQbTlrQ0JpCk4wRzVvY3ZYNFF4ZGhrWG9wb0F1cCtSQ3R4ZDBXU3VmdFE1MG1mbG15azREdWl5UWdaVmxoMDhQUDVEQ3pvQXVNdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJemNzNUxhRExYejNJQ09wOVAranljck9wRjNONUxRRVdObklaVmZPc2p3bmlNcHlIWkFUejFob2hIY09VVWZDV1lWQnBzbkhMMkkwSgpxcHUyek1MWWVsakxLNERKZ1ZCV1FQRmlMK3Q5aGtpVEphK3hHYmlQNUFZSGFmbEtuRjJrWlM0TnFJc0kwaklYWkV6aEIybVpZVTZYCmtHNWNNa09kQWs4YnRNd3pVNWU4Y2FLYVJ0dDkyck1ieXF2KzhUQ282R2RFaVVkMjZjbkZXV1k5aCtxdHpGbm1aUS9XVjVtenZDMDMKWnhrN2ltd1NuR1Y4a2FUN2I4NHl2S3FxcXBXTHN3eXIydmtHWnhrV1NuazNhSmtPT0IvUkRWcW1sNWExR1JPRW9EU296RTJZWlc3QQpSM1pqbG5saWpDUUhaam50bmlTQldXWXBDQWZkQzdOTVkzVVhCdEhVWU5Gc0pjd3lCejBXbzl5WVpUcVkyVUw5b2hWRlVzbjJ4aXpECm9qS0ZHN1BNSmJEbURHT1dFd3ZoaW5TOU9nbU1IU3hkdURITFhCUlREeDJjWmF4a1dRTVNtR1VsZFV0OVk1WVpOeUdwSXpETFhDS3AKVzRReHkyU2pWY3MrVDhROWgxWTZNTXRrbzAxdnhrZWJnd0oyWTVhcEptRjB6SmhsR29xaHlnemdjVWVobmkvTU1qS1d2di9HTEVNTwpvczVOZ1ZuR05ycGhOMmFaYU1VZVF6eFRuY3ZoOGhWc3B1VVl6QTFaSmsyTGxUVjd1OVlzdEEvS010YU5lbmx1eWpMankyUTlCbVVaClBxWWNqYUFzSTNhZ09OaE5XUmJYYUk1RFdhYjJUNStnS2N1MFVFcC9VNWFscE96elVKYkZ1Q0pNeEpSbDdxa3lxNHV5ekJCNXdMWVgKcGU3SnE1MmdMSE1oS1hqNFJWbVdmSExOUTFubTZVZlJLaW5MQ0dBSmYzRkJsbUgwTHdxeXpEQ1hUc3lRWlZvWUVMb2h5N0NLOVdmSQpNamZUdlRCa21jZE9iaXV4SWN0YzNZak5Fb3pMc295R00yVDVHRzdJOG1VMVpCay9vQ2hMd0pNWkxsSUMvNElzWTZrbzcyNXZsNzIwCkNzYnlNVnlJNVcwTXdqTFhjOHJWbTdDODM5Y1hZWm1wWnhJR2dyRE1rbmVxQm9Ld3pPUmh0TTdZZWtsYWwzMUJmZlhJSG5LMUpNSXkKYzREeFp4VFBTS251cDJHdVkzT1dMUURMM0lZcjNodXdMRUh5VElldzdDREhQSVJsUnFybUo4QXlzWjFQam5ZRnlYa2hJaDhDc015dgpMekw2VnplYmFzY2pBTXV3OUdKMWdFaW9yY3FkZWdHV0dSc2ljU0FBeTdSb0hoTmdtUVlKRFM3Q01tOC9NOWFCV0dhcW00SzFRQ3dqCkVLQkt6aHV4VExTVnV6T1FhZ3VWV1ZlM1FCT1dNZGFwdmRsTldLYXVJMGZ6Qkk0Q2NIMlVYVGRobVRHVGt2SWJzUXdybWVBYnNVd0wKSDFJd2xtbWhRUEZtTFBONFZPVUVZNW1SRTVWWHI3aE1GL2E4R010MGFMTjdTVGc0WnU3T2hpd3prZEJHOUdhSW9XZGJBN0xNR1c3MQplaURMdkdmc0xYOVRsbUhWaXhhVVpWaWtsQXJLTXJlaEJPcW1MTlBLUnhXVVpSSDJSaitVWmNvSTFjdmpLbm1qTkpMMTFFRlpobktICnc4cW1MRE03UTRmMnBpd3phczJLKzZBc3M0Q1hDc1NnSjhPZFlJdXpGMldaSzZkMEdWZW9NUUxLdVEwM1l2a1lUYUpDYnh6eGNneFkKL3VMVmY5ZUZBMi8zMHc1R0RXdUd3cHVidm0yOE1wNXdtWHJFb2l0M2R4dDd3Wlc3bWF1YnJkd2RNTjVvNVdsVXc0dXNQQjBaM0lCawoxNmtmc3ZLTWQrNEdLMDlHNHU2OXhNVGRWT1hwOHBJWFZCbEZZMVErbWFuTU42VGxRQ3BETmNKSTlVMVVEdER0QmlwRHU4VWhMVURGCjJmV3ZOMDhadG1uR3Nwb3VkUEYzQXFiTVBOSXFiNVp5ZHVYTVppbkR3SFphZ1ZLbXB0NGg4UTFESTUwYXF4aWhsTkVSWTZ4MG5lQ0sKdGU4RlVrYmhBc0d3d1ZFT1BOTEdLSmRvOUh4VGxDR2NZb2c0SU1yVUI5ZDVHTXJBSjYwWFFMbTBjQ0xOVHk3UmxEZnd5VXd3T1FHNgo2Y2xJUXlzN1pYZ3lLZ0thR2NzTTZ4WFRPbTUwTW15azhRVTV1WVRRTDhESnlFa2htdkxpSnFNVUp2cm1jbnBGcWtFWlI3OUJLRG9SCklmdUNKdGRnT1FZem1WRzlOUTR5R1hvUFpvbHZZaklTT1BTNkE1Z01DVXEzSTA5SlViZDI3b1ZMN2srUUVFMUx4bTZNakFjc0dRZG0KYU81bUpUZEwxallxdVVYUHpTQWxOODlTTDFJeVd0eEZZb0drWkdoWW1Pb3pKeG41NTZGLzM3TXBWMW1QdmlHc2ZvZEpUTUZJUmxmMQpyckQ0cnBqQXNpK0hiQXNmeXpBRmEvT1JzUmY3b2R4NFpBUmNsRUUwSFJtT0FSbnNBVWVHdms0bExSY2JHZGZhWFF0QlNDb0ZLazBCCmRRYXFJRDFnZ1BrR0k2dGlySDdiWEdScUJwem1ZZWF6QzF6eGdpTDNhQWtTVE9SZC9oNUk1RzRveG91SXpBWXFQSmFCeUtkWTJUemsKNGdMWUZ3NjVCaDR5YU1nZzlETFZHRERrVmc3b05WaklCSzF3eGFLSy9CWk56NEtFM0VLdGVvT1FZU3pFR1p1RFRQWUsxeS9HSU9PMwoySmJpeGlCWEYyTnNDaks4TkhXR2RDS1N1ZXVscGRkbUlDT0x3Ynh3SUpCQnRlRjNGZ1RrRW0zWGJ3QnkyYzM3ekQ5R2hZWkltc1lmCmsyWm1odkdtSDI4WVVjQ1B5NGlwejZrNUdBaHF2ZEhIZk8wc0RlTzhBclljNWRzQlB0Njg3NXQ3akpveTFSdTZLS2RrVDB1aUhtY2sKcEl4c3Zwb0xPVTRWekdQa1padTNVaSsvTGhibkRUek9YYXIrelR1R2dSQjk0WTV6Tk1hOGFjY2YwenlyQ3cvc3VKb01HYXpqeGdGVgpOWDRiZGN6V0NtSEVYSWo1Z1VXdVFUckdPNTJOSzk2ZzQ0Wkt0NmVlc2tJTW00T2ZrREhIaUM0OTVpTnZ5dkZpTWpSOTI1RGo2azdlCm0zRThWQUw2Umh4L1RKakxnamNoanBPbjVTQWNXMmY2NGh0UExxTnN4TFFsR1o0b3lNeVNUWUo5bmJTTGRURmdJbWxKVVUyNDhmUkMKTHVER0VTZC9vNDJsK3pwazR4R3RDZ3cyenRIaTlzVTE3cXF5T0ZoakN4TTMxWmhKQUpVcEhxZ3hreDVSbFlqRnI2R2ptMmlNdHlJWgo5TENCeGlnSlcrWTZrR2VNOTlrTEVYMGxIUHUwcHRrMDQyS3ZLV0RHT1h5QVlCbXpSdDBqYnFDTVVlL1dWVzFKVHdtTEdyNlNtMk9NCmdqT2psQytNc1NYZFFURnVEQktrQXpIbXFvcGxxamZFV0FxU1VRN0VHQkhVajNWYVB4Ump5am1mc0lUc2lWclIySTQxQkxEVTZuSXgKUHJpdi92ZjM5TzR4K281WVNKdGlYS2NiVGdiRU9GaGxtMkhjY2tocEw0UXhBZ2pGMUVsNjFjQmRVTTBUQUdNU09Lb05JWlVIOGtKTgpndXRtWUFpcUd2VGlscDNKdTlqRkxiUUZSaGNqM1VxOVo1Q0xrYU9VQnZ3Q0Y3ZG1mSTlqNTFDTDBzTXhrUmo5aHlPeEY5amltU0s1CkxCc1JzWFVjYVBGS0NpQzhtTVV3c21vaWtNVXIrbmNFc1JnZ1YyK3dYZlNWUEtjR3JoakZXQXJlZVN2OEE5TnhONng0VHJkRURsYngKcHZNR2doaG9DcnFYTjZsNFBQWm93Z2loTUhOeHdTbmVoaHRUSE1aTktSNmV3VGQ5R0NKZXJuNXZTREhFdHdyazJEaVQ0YVJDRko4LwpMMEp4R0RlZ21IRGxWUStmZUFSVzVNWVRRNHdzTXBEcHhLTTVZeDEwWWhpbWVickhLNDFlMzhFbUhxRk9DaER4YU01aDNtUmljS2NDCmFZelhld2IyUDdqRStHdzJlamV3eExQWm1RNHNNUTNsd2hJemZwM2VVT0laSkNjemlhZmJnUVdTT0ZxSDMwQmljQmlWblRhUEdKcE0KSmhxTkk0YjZrdmZ3cGhGdllGYkFpSWxjWkRyTUxPTHBEL1dGSWthcFVqSWhORXJuMU1RMFNNUXdaRWZQTjRpWVJzeEV3U0VHMDRrSwpFbU9JVjdFRGVGT0kxOTBXRVI0TFVjOGpIUWd4Uys3eUcwRU1QQmREWEVFZ1J2cGVsUm9HRUVlejlSZC9lQVpITmZERHk4dXFUUjltCmxTQnh4QWMrYk5iMFJnL2poRlkvNE9GVkpObDljWWZ4dWJGWUxyRERLMHBoZ2pwOEhXWXpoMmNrWkFNNVBKMmEybnpoR0FaZXdHR28KWFVVME5tOFk1TEErTG83d3FCNUxiOXh3RC9adkdKRzFacXc3WU1QVW5NLzZaZzBqZ2ZTNDZUQkNIZmc3R1VnOEpjQncyZlFGR2taaQpLa3FuUlVOOGxIVFltR0drdUpwNzFXMHRUM2VnZTBPR2V4U1dCV040RzI3RThER2FNTndOTjlwOFd5eHBrMm0yR3pBTUtEN3h1VjZRCm9LQXAwSXYwVktxTDhsNXdZWkNqVk5SdXRqQldQQUpXR2kyTXRWQk9iN0F3VmxPcDlNTVZ4cG9yOE1QOHlxckZCQytxY0xNb1kwT0YKZ1JscTdTQ0ZSOUN0RDFFWWdpWWlKUU1vekxXWlM5dFkxa3h5YVpsdm5EQzlzZFFPVFZncjJYNWd3bHpyanZ4bUNXTlZ2SXdtNXEyRwpRUVg5UmdsWEt6TmZKR0VBcE9LOCtYMUVIbXh6aEQ4N09qOStSeWZxLzM4WTRTOTQ0RDl5NVBydDcvMmozLy8xZldBYzZBOS94Zi81CnMvL3JMMy9SRC96MGg1Ly85SC81NWYvVnNkdno3ZS85czEvKzdDOS9ZNi8vNFM5Ky9kTi8rc3RmL2Z6TDcvLzYydjZQL2NZLy9hdGYKL3ArLytPVnYvdlNmL2VGdi9yM3B4MUczOE1kKzRILzdpNDlUK3A5KytZdC84Mi8vK28veWttUFRQL3k3UC8yNFFmL2pYLzNoOS8vUgpiWC82NVYvLzlYL3l4cmpJajd2eUY3LzgrLytNYS96eEQzKzVyeEZWM1IvRDR0OTZqZi83WC96NVgvL2IzM3lXLy9DSC8rYnYvNlB5CnAvL3c5My91L2ZCM3c5OS8ray8rOFB0Lyt2R1MvZlhIZS9hNzM4bjhEMzc1TngvWGRmM0RELy9rMytGZnB2N2xIL3pWZi9qMy96YU8KODkvK2sxLys1cHYvK0piK3V4K2ViMy8vNC8vKzVkLzg4QjkrZUlHaG4yLy84OGQvL044ZnByLzVWci85NDIvL3gvLzVmUHR6YlBuUApmdmpkQktPUS8rL1gvUWZxZ3JDUS93a1cvRUZ4N2g4emYrenkwMzJjbjM3NC9jZXgvOWNmNEZ3endmVkFmNWIxSDFoK1Fwby9vTndGCkRPaGp5ZmV4OHNKL2ZJekRuUmJHNXY3bG4rR1lrTkpYMUgweGlKVSt4aG1lSmNaM2xHb2ZNNHhWMkt1SkFNTEhEOVpQeHE1MmNELy8KOERZREZmSHhDKytqb3BqbFkreDVuNEdOT3NDUU9QNjlyWU5QNzZNZTQrc01qdms2MjNQVTY3cSszSU9mZi9qWFB3Q3N0T0JrZ2lySwpmQmpVUFFWVEsybmhINjcyUkluRXgvSVhtWEFVSUMwVWNYN2MxL1I4KzhmN0VjS1BUY1FuUDM0Rk9EdTAyd3dqWk1YUUlLcHIyY2RNCjlEWW1wVDk0YVpmNUVTWGlkZFNQNldqaEpYaWRRUmgvL3UwVCs4dVBLNDUvWVAwVEpybE1rRTRjdTl4bW53V1dySk5GRkwyblQwYnIKaC9ZWjIweVFWLy8yT21yRGVxR1ViNjh6Q09QUHYzMWlQdVAvK2dMLzhSZTR6cHBOU3B1TXBIeXN1NEd3UVRGQnhidjdNUTRRQnRpZgpnZGc2NFFFWUxEUTJBSE9ITFA2blcwdEJSV3J2VTRBb2dVdWkrMlF2NDMxaGwvbmNoT3VvNTNaZFozRGYydWpmOE41MmtxdjI2YWpICitEcURZNzdPOWh6MXVxNHY5K0R2T0RiOGpxY3lRTHo3ZEY5eDJ0QnJ2SDRmRjRnby9ldE1MK045VlpmNTNJSHJxT2RlWFdkdzMxZjgKQkZ6bjk3YkladVpQcit4bGZKM0JNVjluZTQ1NlhkZVhlL0JkWGxsMjlYcmE1L0VMZ3c0cTFsN2pWMlBZcXJ6SHI4dDRqMStYK1l4Zgo1NmpYK0hYTzREVis5U3hGOW50YmxuWitQdW94M21kd21jL1pucU5lMS9YMUh2eXNvUkp6Q0pRK24yNE81cENuZkRvSXBvdktMK1FlCjNJL3hOYmdmODdtTWM5VHJnczhadkc0T1pyeUJRT0pyVy9MKzE2ZWpIdVByOFJ6ejlTajNVZStIL3VVZStPWmN6KzJlcTY5bmZPYnEKOHpaY2MvVmx2T2ZxeTN6bTZuUFVhNjQrWi9DYXE4OHp2cmZkYjhOOTFHTzh6K0F5bjdPOTNzZHpYVi92d1pjMzUzVnpybWQ4T1RMNwpiYmdkbVdOOE9UTEhmQzdqSFBXNjRITUdyNXR6bnZHOTdYNGI3cU1lNCt2eEhQUDFLTS83ZUQzMEwvZmc1ODhlU0dNZmkvYlpBd256Cnk2dG9UTEYvY2tzdzIwaVA4VFpia1BjK0trdVgxbnYrRCtNbkQrVGVkbnNWOTFHUDhYVUd4M3lkN1RucWRWMWY3c0hmZlpvOFUrL3IKdmg1SDRmcjk0MUpjWjNvWjc2dTZ6T2NPWEVjOTkrbzZnL3UrSGtmaDNuYTdGUGRSai9GMUJzZDhuZTA1Nm5WZFgrN0JkNWtteit6Nwp1clhIVjdoTzRYZ1YxOGxleHZ2Q0x2TzVDZGRSeisyNnp1Qyt0Y2RYdUxmZFhzVjkxR044bmNFeFgyZDdqbnBkMTVkNzhIZC9aYzluCmdFOW5sQzlEUVpoZm4zZEhxWW85Z21Qc2dvRjhHZ3B3cVBxTTkxREFaaGFwdmovRU1INGFDdTV0OStkOUgvVVlYdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJWjNETTE5bWVvMTdYOWVVZWZPZkZ5T3ZXbnUvMk9vWHpoVjhuZXhudkM3dk01eVpjUnoyMzZ6cUQrOWFlNy9iZWRuL2g5MUdQOFhVRwp4M3lkN1RucWRWMWY3c0gzWEl5ODd1djVhSy9mUDUvM2RhYVg4YjZxeTN6dXdIWFVjNit1TTdqdjYvbG83MjMzNTMwZjlSaGZaM0RNCjE5bWVvMTdYOWVVZWVHb0hXUWdKbkU5K3p4QSsvNVB6WklYNzI4MDZ4cGRMZHN6SFF6bEh2WHlaY3dZdnYrZnJpVGtjTXI2NDl6eHMKK2JUMjRRbG8yMnMxY1l5dmxjY3hIMGY4SFBWeTJjY1h6LzUxT2pqRmY2NVE2ei84L1orL0FxMy9LZkhYOG5lTHYvcU9mUXJDbmxncgozckEvWW94OWYvcHl0Qk9LL1RzSEMvSHVkcTNlcVh3cForN0lqUFdGMmZNQmlKVmVaNmYyeVlnMWVXMW43ckFaNi9kUnY3MlAycFQrCmY1K0JqWHZ1V0dOODJuWkk2ZjArNmpHK3p1Q1lyN005UjcydTY4czkrRzV6Qi83OTA2MmxOMUUrblFMOURyN1kxOGxleHZ2Q0x2TzUKQ2RkUnorMjZ6dUMrdGMwNjIvZTJVMEsxOTFHUDhYVUd4M3lkN1RucWRWMWY3c0YzbVR0WXRmSHB2dkswODZkWGxoZFlQcjJ5bC9HKwpxc3Q4N3NCMTFIT3Zyak80N3l0K292YithZHRwS2NQcnFNZjRPb05qdnM3MkhQVzZyaS8zNExzRnNsQVo1ZEd6ckJPT1lJdkFiZjZkClJ0dzhhZ3ptWlh3eW1oYTh3eEUyUHlvWWVSMlZnM2VhMzE1bkVNWWRqb0JvOGIxdGtScjJmZFJqdk0vZ01wK3pQVWU5cnV2clBiakMKRVUyZTczMXpPSmUyVHdmaHROblQrK2N1NDMxcWwvbGN4am5xZGNIbkRGNDNCelAvbk92VHRrVWxZZStqSHVQcjhSeno5U2ozVWUrSAovdVVlZkljVjkzNDVJbHQ1V1R6aHYxOUN1d2J2aDJYanA5ZmwzbmEvQXZkUmp6RjlmbGZIU1ZEdFJ4U25lRm5Pd2E1WDRmenNkY3Z1ClU3eHU3N1h0ZmhEM1VZOHhmWDVqZklyZjhjT1BYL3YwNFlmNWRZTjREYXQrTXZwNlA5M011RGV2bzM2S1Erb012c1FoOVNRL3hTSDEKME82akh1TjlCcGY1bk8wMW5KenIrbm9Qdm56NHI1dHpmYUxuSU9mUlhEOTNHZTlUdTh6bk1zNVJQOFVoZFFaZjRwQjZoejdGSWV2bgptM01aWDQvbm1LOUhlWWFUNjZGL3VRZmZZU0pQMGkxK3VxL1YzVHZmOTlYZDY5NzM5UmhmOS9XWXp4MDRSLzJVcU5ZWmZFbFV2MC9zClNsU1B2bGNYTVFYZzJDbmZacDlGbiszVEZIQ01yeW5nbU05Z2ZZNTZEZXZuREY1VHdOY1QrejdEd3ZhTXcrWDd0RG9JODh2anB5Zm8KNU1BeDJoUDh0RHFRMzdxRHpENnFQZHozR2RqNGFYVndiN3M5L3Z1b3gvZzZnMk8renZZYzlicXVML2ZnK3dTWjVSYS83dXR4NHEvZgpQKzcrZGFhWDhiNnF5M3p1d0hYVWM2K3VNN2p2NjNIaTcyMjN1MzhmOVJoZlozRE0xOW1lbzE3WDllVWVmSzhnc3ozajE2MDlmdngxCkNzZmp2MDcyTXQ0WGRwblBUYmlPZW03WGRRYjNyVDErL0wzdDl2anZveDdqNnd5TytUcmJjOVRydXI3Y2crOFRaTzRSaFpzajljOUQKUVpoZm56ZGpZUG5UVU1CNFdadWZod0ljQ28yRTNrZEZGTzc5R2NyMGFSZzQyKzBQK3o3ZU1iNSsrNWl2OHp6SHZLN295OVYvNXhEQgo2NmFlTC9ZNmhmTnRYeWQ3R2U4THU4em5KbHhIalp0MS9mNjVxZWRyUGR2dHIvbyszakcrZnZ1WXIvTTh4N3l1Nk12VmY4L2d3T3VPCm5nLzErdjN6U1Y5bmVobnZxN3JNNXc1Y1I0MDdkZjMrdWFQbkl6M2I3WS81UHQ0eHZuNzdtSy96UE1lOHJ1akwxZi84bngvOS9PZS8KLy8yZi9mckxuMzhicjhqbmYwYnNzK1lGYVMyazV2Z1BNR2wraFJXNE45U3pIL05Qbjh6dFk5SFRxOHpuR0w5dDNZZjRQYy90ZXdoVApYK2N5MUlKN256bmNRSnJseThrNGJIdjZyTGExNTJOaFFXTjZxRytYbWJXR05MTkYrK2NyOTYvOUJEK3pFdVVHTGdCNmxINmNlcDgrCkRkUzNmTHpxTkpQQUxDUDlRUDBrcWdwa0pMSkJQemhMbk1kZ1AwQnQybVAzanlGcCtkSlFSaVBqeHdyVXY4OWF2OWo5K2ZnUS9mc2YKYjVvdmVlMkRLdEl2bzI4TldSQnhGOWpTeDNjc04yL0ptbTM5UHFveGZMOHdubXJMUkxxbHpPUWk2cmJnZWZxazBKRlZScFRmK2FxZQpNSDQ0OXVmeTBSalo1Lzh4SHNlbWJYai9jd00rUFlBZjlXVHl3dzVpdEdmMGF2N1ZWcmFTcHJVcGxDL3JTUDQ1ZmVNeXJoWGI1dDYvCi9kWlI0OWZtbjlUMCtCK2VqNFdCZjI3dTE3R3JlNnFOV1FjQjdHcHVtMTREZzBGL2pQM0hpQzJmN0UzWnhVZkhaSmp4dDM0L1Rnek4KWVBTRTBXYWtGcDhZY0p5NnVLWWlVaHRSKzJmamFtRjhZc1BGK3h1YkxwOXY3M3QzRkJqS0JvVDJiLzcrZit6NXNORUt6ZXhuRUErSQp3RlZ2WGVOWlZML1BiTGd3LzdZSDlBQTNuUDJkZmJ4YU1kS2gyVW4zUzQxMXFXMTdhR0R2WEJqQjBXditKTmd5N01mWVArVnNNMG9DCjQ2RHhwZGFoczMzWURPTExkNzZFRHRQdkkxTm8yOXpuMVBmdTcvUDNoU1hVdHlYZmRiYUEvelhNVCt1WCtTZWJpYXlSK1dNMStzM0cKN2tmTTFoTzJvUkJkeGhUajQ5ZGY4MEFJTGdES1RmVVBZTjM5YW5NQ25rU0h3WXRnWTA3K0tqaDgyUWpJc0o3YzhnY0FhNHJ4TFkweAp2T25UWTNRaGM4REc5SGgwWUdvNURoQVBzK3RSeDdZamJnNGV4bTlld1hsMXh0TThtTEtUWGJ3NnJGV1Z1UTNQZXl6STJXYmdER3ljCmNjVWx4dU12eDQxSE9sV0FyWnUya3VlMlpCcTB6TlgzY3FvUzA4K3B0REEyRHpDRFk4RW40OHc5NzcxekdOdGEzMzd6NTMxZTZBUFMKdTZiMDUxRk14ZGJxTDRQUm1EQjZXbGdqNVczci9nUldxejR2ZHV2TVBmYlhKNlFXbmkxKzY5ci8rdms0cmUxcGdEQ2FQQVV2QUJwawpiQ3ZHRVJobjgzTm9WWGVMeHNldkNFSDhYNHhsZVdiODhsdCsvUWtnS2I1bkJYbWlYOFA4ekI3bXdXdWpjYVRmTU9ZUnhuai9VWFpaCnVzZlpqS1lETm83d3VQQ3AvT1lKK082d0VWb002dXlTK0t2Tk9SZWZCRWtZTXNhOGp6ZXNaaHViUHhaOGJUNHhTYTFHekVJbE52MVkKVmVUM3JQTDFCTTUzeFQ0akdoTFgzSjhWdTk3RWlOajhxYkFOaDQwbHZwK1AxN1Nlc1ROR1ZLNUlQWHBxZW53SVMyMnhxZWJjTDc5Lwo3dGo3Z24vOURXdjlqVnZ6TVhyOXE3amxvNGNaczhwUFlVWnJKcG5yRTNlSHpXTmtMSG4ra1Z1dXQyeXFiU2x2SlNlUlg4T2N3azFnCnRiMk1wTHZLT0hRZldQd2JiZ1lCS2ovK0VPWmNZdHVSWXR2Wi9HTk43OExYRTRneks1TEllSnpQZnBqczlWNUx2RkRObjJFQmd6S0YKZVNUOVhoRml6a2FOUlYrUDZ4OUV4ZmFZNjlyNlY1dkRKMmppSmRyWTloQ3A3K1hEMXNyK3RSYnpHOHg1blRQcnNTMGJHK2drMGd4agppZy9XbzZSL0MyT2dqeHUvVld1TGcyclErWHIrY1dHZ2J6emorckZmd3h4dUdLdWlaUHVZWDFaTTVuT0ZjV3lmc1V3UFhEQzNlQklzCkU3Y3hMbUZsVGE2d1BUR1FrTXo3NDIrZmxrZStpYTQyc1lDaDkvQ3J6ZWxKSHRXSEozNFlTN0ZuUmVLSmpSNDB3TGZ0OXF5bWNVSTYKYnRJUzRzTlllNDhmKzFqU2Yvdk5NN2g5dnZnNStORXh3SEM5ZHp3NUcvTzR2TFBmSGg5c0JZN0wxaGJ6ZTdncDJIL0ZvUE5IUEw0eAp0eU9adHNjNFJoaWY0NGUrVHYrOCtuUXFOUkd1dUs1b2R5TnppMitOMkM5TjhaT1VjZG02YjRHUDhKdUg5ZStoajBiekJYOThnZlpHCjBPOWlMMGNuOENRL2hmbXA0M29ZUHNLb05ZeHkrTDRjTmk0dmlZYjErZkt5ZUFOeUV6U0N3N2E5WjFJeFpVdzlKaEIrS3ZFQ2svUW0KTXhhQk5xNjhEMURpQVBtSjUwNmN3WSsvZlY3bkN5QSswUzl3S2VjTHVONXJyV0cvdnV6LzZtL2Y5blhjZi9IeGcvLzlmNkFmZ2llNAovQVRwcVB4cU0yTWtOc3Y1WEJoK2l1OStEQk5zNFJhL09CNnZ1OUVldWxhL2NzUjdhZE0wVXR5a3NjSklKaFYvS2NXeWNMSi9RYnlECm5uUUFYdW5KSHdJYlBNaEl1SitNTlc3eVhBcXY2SzE0dFBZaG1pVU93RmZGUm9TRS9aanJPWVB6SlgxNGFIRW5XdzczWWE0bkJxUDgKSkwrcDlrdDgxejErRHF2SlpRelBGWlRPMzN3NnNUdFYxL3FTUGFiU3VIek1qdzh0NzkvM2htbFB4YS9CN0ZrZU40ZldhdlFIZ0JtUwpMVUlzUThRLzdUKzBMS3M3cm1WanhNU2VHbGZQNXVNeWdtd1J1N01wbDNZSE52QW5tL3Z4bjNLT084QndudzVCTWY0bkk1c094WEZqCm1UTGtUc3Y0NGR2NldwTlgzOU5YbzZPMnZUdkRVSDRBK3ZweFVpc21BNzVNY2N6WVhjVE4rUGxZVVFONEdWZkZodHArVzNNY2dDdEMKais5eFRoOXJtSFZ0R0VjbHprbmZ3SGoyK2RkNFYrWlNGQVN0SWVIdzdjRkwrL2Y3dFh6OHJOSERjUHBPalRTbmphM0h3MmE4VUFkbwplOGdmNnM0dTQxbysxK0xRR1VoSkk4V1lXTUpabWVnc0VZZGx1RURHUEZNOGdPR0p0d3FPcnhONHdpdEF4OXhTWXJUSGZLd2JXLytrCjFVOURMWmxLeGMrZ3lBa0NRNzV1WDMrVnVDOVZuZjg4TmloSUFVNVRibkd1Y0VYOFF5M09kWnpIRFZ6TW5INWVYZE14anByaWpXOTEKeGxrOS9VbVhNUTdBVm1lK3J1bTVsQTJSNHoyeUl6ZEpieDZmWHMxOFhRR2ZzUTZicnhlK1o0M0UwKzNpUER3cUxEdXprTXIrcFlqcgpUaEQvWW5BaWNROUdFRnppVko4d3hWZUlTZDhmNFRDNU4zd3l4NFRHQ2Z1TlAzRlllcHlBaGRsUDNyRHVlU0E4eXc5ckhmc3I4ZzM0Clk4ZTBaem5VV0dIdlgrTXI2SzBYYjNzQzdsdzRlTXZWWTJJdXBlOERuQmhjckRySFdSTVp6Z3NqSnJWOUExTHlYUjJhQVgydTAyTWUKZXNpbEo4SVZjdnJIRUxIVkg1eEdZclNUV1BHdytabnBxSWlzeDB6UWNuRjhpQTN0NG8wamtSTkd0SnlJRXl0ZVlZeXFySnVudmVvNQorc05jZWpoTzRTdU84aWZka2VLNWwrTURYWGhqd3h4ZjEyQy90ZmhtS0xxaGtSQXgvNWFtVGRLQlp6eFpMRWgxZ0x5RDgwQnZhdHdICjRLbUhCeDNCWDlBQjkvRFFQbFk1K3dEaE8yQ0k3RzI3amdNZ2MyMDk4dHhtemlQMjBWSTlqdVp2KzUrRXV2ckYwZlNOUTZTMXg0N1MKdy9qRTlORkxPQkFmWmc3bEh2ODFKckt0eTlxdjR6ckdKKzc1TTN3QXRFR2Y4ZWFSOHZhVHpXY0VqVFV2eElNbEZnUGtVOGxJRXBzbgpDM1lvMEFIR2RpSStwb2djQjlnZmVzU1MwTW5RVXdpQXFSRkx3Z0hLZnFFMXJtUFRGZ3VYK002Nm1VSWVKMHJlKzNPNXBQMzdpbTE1CjZSNFVGRHpyVTExdy9JQ3pYeHkwTTZ3eFVueDhXbjd1NkNMZFl1RkNud3JHRGE5U0FGQm4yMVZsWm1PTUlLd3pDLzl3UFRNTzhPekoKVllNcWRpOWxSNEdxWGE3dUZKWEgyaWNlR0ZDdjhTTEVZTjNWZTZxRzEremR0eDlaKzdQMlVjTzUwT3BSTmhMci9FdDZCL0E3MitGYwpaZXpkQ1dDTGp6L3ZreW85bmxlTXk5MWtQRCtESEtmRmhoYTZWNGlBN3VQbUZ0UEZxaHdYZTFPSGFXN0xrVUxHbUxCdnB3Zm0wajIzCnNsdk5UemFIM3oyMVhJQVJoT1BoUmNLSHQ5bHRqRWtmdzBmeE5BSnozdDlvejluYlB2dkQ1UkFJSXpwaHJIQXh0VkNWdWZad01MencKak5LaTk1c0JldWJhazN0NHpwMkl1bmkyOWpyWStpL2M2VjZWaWUxWjVWa2U4Q00yakFPTVdJM0dSQTR1K2Q1MkpFM1BhTnkraC91NQo5MDg3YkFqZlh1NEZhKzduL2tBMW52VUh6YzlqS0NnUk1rRnZ6QkYrVjNPMjhjTTQrZ2x0K0t4Y1Z1YlpjZFo5Z0RialN5Z2Erc2oyCm0vdWo4YkJ4d216K05tSi9FcmM5dHpXUHlSQkE5cGdnbVdpRkVWVGZ4eTlNVEdQTmlRRVA2dUc0d0h4bVFyeTBQOWxjOGhPclZTeW0Kdy96c1lFN3ZXbTAxbjd3TzhXZ04yWEE2TVVhc0h1Tko2MmoyR1c2cElyMTlSMzA4cFA1T1lkcDZ1NmtSR1g5bThvWHBVb3VwOFR3aAp1K21rd2JjZUgwek16czNOVlR6NE55OVZBSUhmdHpEbVp4anovc0sxMUFTMTd3blhONVY5QjgrSE1HUFhlV0ljTTg3ejJkUHlUSEZHCllHK2YyNmxmZVhaQXg3RHREeU1BaWc1cFd2TEJlUXN3YzZUQlpQYmNTU1IrZklQaDhLQzliTjNSdlNlOGVZTEY0dz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJdUI5UElRSmJRK2hoMzM0Tnh1RHg1NUNkSkh0WDdEVVdRL0ZVYnNUbXNTTlFqZ3JVZHNVUGxpTjUwU1hBeHNqT1YxTmcrV001NnliVwphZ1MwN3pUL3J2dWlZbndIZUQ5dkI5ZnBPR3hiOTFRdzlhSVEwYi9kNjVUMi9vOUZMZmh0amZuc2JyeUhNRHdnR2JzanNYWU45VmkyCmN6alZhTnViOXIwcFdtVDVvRSs0T1FsQnB4OWoveDNWSVJCWXhxZEZzREdWRmNZMFkrVkdUeTBDY3ZQWmQzcHB2QVdyY2p2TlZCajgKN285SDlNRDhDbGVQcTBjWlc4cWZyd3NBOXUwNjdWaEpQUU91b3hhL1U3eDA3a1dHbzEwSTltK1p3RmxuSW80YVg4WU95ajlxa1BpYQpjcGlXeU8vWXFzeHhZZWQrbDdVWGxIWnliSXdCM3owVFphMGVnYVlXdDc5amp1WjhSVHdWR2J0ajJjQzlacDhBRUxKN2Vvc29QUkcrCjRmNVovRU1lYkd6WVl1SEVCdUF4T2JHM3ZIZmZBWXltbTFxc0x2TFB4MHFpM0Q3U2JCcEdQb3lNWHR1ZlV2UUFMZE42eExDSUs5Y0IKMEY0Z1hoZjY4RExXczU1VHhoOHQ5cmJNNm1PSkdQdlhLOXdWVThXSE1hMklBRVdTb1h5ODdqdHNUKzlZQjhCWHRGZHpVdzU4S1hJVgpkQUpacnhBeVdjOStnMklZNFA1N1JWb2o1MFVKNXZGSGJhekhHMjFuOTdiMnp6OG52M2FrV21VcXFTaVNmOGpnMm9yRHhzM3VFRDJzCmZkd1B6Mk03RFR2RmZQei94eTR0K3JLUGU2RWZhZXUrWXNBY3JVU0t1NjBZYjJPaHo3NkFFUkk1TDFaV2FrWFdPRmY0WXR2cDhPQlMKM0wzTXYxL1BBYzRhYWorWExOMmMzeXl0Zk5GUDU0bnh1WTRucmlEZEFTK0hrR0RjOFI5R0VuVFU0Mk1PYUpQaUFCeldYODRZT3Y3RQp1cWdVWi80VGN2ZzdZcHpxM2o4UyttN3I0VzFQeWp2dVMySkhLTnYydC9WZ3RvbmZ6d3BWb012ZEUyL1JJMmVTc3ExSXp1UWMzbWhlClhDTyt2b3g4Ui9LTDE3QXc3dFg4Y1lQUW4zUkZSS0dYV00xL21NdStMWFhya3ZLU1BNN20wTVNGbnN5OU9XUnNPdzFFYlVVSTVVYUoKUVkvaHRKOXNQbTRPeTNYQ2ZBSkp1WjF0VnppRFQ1UFVBai9uaSt0YXkzakwwbXc4amxLZWV3SEJsbFo4T3pJKzRkQWZ6YWw1SHUweQpaZ3dRSi9aUDg3ak5YNDBmRC9wZmVOc1dHWUZsalJyYlVLVklFL1FTUnJiVDFaYW9Zb3ZmWWxkVVhTM2NJQmtqYnNvK05TTU9zRU9CClIvbVd4M1pBaG54akdQc1ZzaXJkZWtkMG00Nmg4NFFqY3Q5KzRjbFU1SHVlS1UrSm81WTlTN2tkZ013blpzWEE0MDgyaC9CaDdLZzgKRy9SVW41anl6dG1kOVh5dU1TV3dCWEI0S3pVcFVZNmZ5aUUxWkVCRFc0WUdjbHdyYkpqM29pSWxUUjh3bnNCaGt5NkFYWU4zc21WRgpoamkzVzhNY0F0R0szNDJiK1AreDk3WHRiZHpHb3VmemZSNzlCL2EyYnB3bXBCZFlBTHNiSjIwc3lYYWR5ckZyNWNVOWJhcERrU3ViCk1VV3FKT1hFK2VQMzQ3a3pBd3dBdmk5bFN5SnA5c1VpaDhBQU13QUdnNW5Cd01WNFNHVTl5QTVyeGlRb0gzV0Vvc2N4VVpIRjJpSlYKTHJaVDJjY2xuWkR6ODFCRlpqc241L0VWbVpTM2VwbzVDTVJuQWgzS2hBV2ZsRDZPSTdNTzlDTUh6aFJIcUJvWDZDTFJsTWhIZWVVOApCUkpQeDF3L1k3c2NQdDBvZUxwUUxua0g5R0plT1pNVUFuM2tBRVhGV2dUQ1Iwc0V3eDRBcFdMaklybkI2amJhMUZ0SWhYZnR5Y1JtClhROHM1TmhVSmJKSm9aaFlvNVVGdXBnVGZDYlFtemhTTHpkRWlCak03TE1rRmtpaGFCWm9NZ2JxbkoxcjVOZndrWDNldWNaR1BIcUUKbEtNTEtiV01CZEliaTJGcVdRU1pmZi9hclRwN0doUE9VZWZZYVBWSWtVVnVZM3AxeVllRmVzcG9OK05vMHl6M3prempnaE9OalZOMAprOVk2cU9oVnk4eUoxQ0xqdVlSbGplRTRlcmRoUmpHc3h2dVRoWWtGZFNwQ3ZHcnVLQXVCNUZTV3lSWE95dzFBZXFMWmtoQWp3QVhCCnM5bnVnOEk5VGVFa2o0Y1Y3T0tqc0d5dW4yamVyNVQwbldXL0c0WWhXaE9EMFA3NGpJOWY4ekZKdUhnZnl4bkZiZ1NCd29mRk9zY2sKNFpPZ0diTUx4S2gwd05SSkRtZm9aTHpCSFVablprYkE0ZFBzVEVKZzdqY2dIMWlySXc5VllzKysrTTZKYngvV3RXMGZYN3VRdkZ1aQo4ZExXVjk1UmpmY1NiQndOdm5YcHdob1FhQmdyekh3NXhWazhmZk5oTjVXK01jRGx4WnppMEdDWVVTS2FuWXlBM2x0eGE1OE45ZlNHCnJRL1F3ZGRlR0J5V1E2cFVBUE0raWo1ZTYyY1NvSDhIRjZxd1J6aDhwOTQ1YS9FeFNNb0U0c29heGt1dk5GcWdOOEJ6aUQvQ0ZKK3IKM1B1d0RxMzNnN0NqUzZUV05PdGtuWnNJcWUyTGxmWVo3MWY4T3E5VFNtMVJhZk5jV1ozT0JVMUxlc1dROTBXT0twWTJ1TkFpZFpHVgpJdlp6K2ttUFQwejZRemdmb1FWS2NGYUoyWDJLUlROdnN5eHNGQWdDdGRjdGZFQzZqRHdvaVJ0dllSVm0yL3ZNS2tjaXNZNWNOMTBFCno2SWtzck56L0NXKzVaSDdaWkM0VzBTRnRSdTZrZVoxUVBIZU9WOUFLUXpIYzhFMFk2VUw5NXAvY0ZtdlNyRjVKSEZQUjduZFJuSnMKS3MxZVMxWWMyK29Wamx6N0tGaS9nMUVRVWQyRnJ1WFI1bUdyNTlZNzRCYUg1S0tzeDZIV2FsV2JKSThGdHpZQkFia2luRERVcmlnSgpDamQ5N0RZeDc3WkVjQUNoZmRuZHhNcDlzQ3Z1OTRhdlc4Z3NrTW9HYWdRTDlyOUk3YTltQkpkZnFxeHFnbGk5QjEvNWUwWDRzQXlqCjlYSDRXYlFoc2M2WlpKR3pqTjdIc1FqUXBzUENyQWozdzlDMHg5SFFIUEdReE1ZVjRaejFpRUJ5VUIvczNLbnZtSDErMHdzZDExdk4KeDAwaG1kM1NCR1U2Qy9YcHdVWGJBY054TzhSRzZUYWF0SmczdUc3R1NDOXlaS3FpS1ZNNEJCUXp5SmNjS0FHY2JjNmY0bkFxdTdPMAo4YzRLQkdxdmlBamg1N2V6c2hucmplRUpydDB4MEZnaDY0QStSTm80cDN0UzJIZDRDYWo4aFNrRU8rK1VzU1kzQjVRY2o4MHEvYXpiCkYyN2xLaVpCUzA5WFhyRDZIMkV0Y3U0QjN3L0RrcWxoWU02bkxSUW9obnRBandOWklNY2FHL3NNa0FVYWQydzJWZ2d4QXZLbldMRE8KM1BnS3diWmhaNG16UlRsWXlkaGJVN1lnV3hxTjlSc2V1UHJrc1NRd1Nnekd5dTV5ekNpWm1nRE8rWGpKZDUwQVNJRzh5dCtUc0VDVApGVzQ1cE9IeUVOcFU4b3g1YXhnQmgwWVpLK0FkMXN6ZnMvRDNFbEhZRytZWTM2MmhmWWxQMkh4RXArZkFEZk9yQ0pzVis4S01EY2x3Cm14VnJuc3JaTUxGNjdxZDk2alYxTkhaeCsvVE1tZHMvL1UwSXIzU2hHNGVCdEJueFhpdWRwZzdkY3Q1QWZBZzdaeDAxMVlwM2NPbWMKMGlZNmc1QmlrUHZCTFZnem9CeWxLcjZMc2VBK2xPU3JqdVF2dFVBT2hhRFhibGx0eTNtdzBpd29YWEFBWVFLODBtWVM3aE41c3B6YQphdGdZa3JENFJLZ3pXMmovbG8xVmtpVVB0MDBrTTZaUUc3c1pXS0RSR2ZkS2E1NFlicGJZTGpnN01LcjV6a0dFWGNnWnFFSVBOQjhPCjUxK1hZeFhSK0VBeVBGTW8xc2hGNms5TGlXZGhjT2NKcDdNcmUwdWdZSUtENHpHNmhrZE9UT2F0YyttSTNGOVE5QmM3SFRnVGZuNHIKUHB3RmtlWk1PaUlmVy9nY3VJZmdqT1ZrbGl0dWl3M2Z4bDdENUpiNGdpNnBraTFHSUpnSlh1L0w3ZHV3YnJkd0N6eW5KeE1kVWhOMQp3Ri9zby90S1J3NmNKaXdvS1pDVzBYcUpsdVRjRm5zRWpGV2dHRy9xVDR3eTk1ZmtWRmhoeXQ5OVU4YmZ2UEZlZUJHMGllaHlZdTZ0CmxzWjdzTEZiWHFnSDh3MGlVTXhGVnNnQWFEU1BMYXVwTSs3Wk9iQ0xJRGIybnR0NFdXTXRQUmFZdXhCb1krMmNiRThRZmd2aElEV1IKMitnY08rT1Vab09FczZXNjYxNWNuM0wvaDBWcWdieFRPS3NWQS8ya1Q5bXZobWFLY0QrVGRlcWk0YStHRmU3YUJGbytKTjhPTFRnQwpHODBrTEdRVGR6aEdJNHZNK2FxS2xteGtrZjQybnZSSENnQUxMN3pEdVE3QlJlYVhqTC9qelRKU0ZuYXJSSmdMUXpPUmpZVEFPZ2JQCkxEdXpaRUF3VnBhN2xlWGFuNW10OUpUQ3FpUmpITVRIRlhsSGtKcERWUW1hOHc2ZVNHOXRDOWZpNmJLZ0JXWUpLMTFTMm10ZUFHUjMKWVh6UlVlSWpodHdhNytzU1BibWVYenBueTZCSWVhTVEzak9HQnNQQzMrZDFZWWI0ckxTL3V3NHJLbk5BY3R3NEVyd0RJWTF1YUJYdQpEQXZBUEdmMWpQWTNMcGt3MEhzWHNhenhWNTU0enFUK1pJWjNZKzNxd2pjaEN6WWVKWkVabEk0amRzbzd1NTd5c1VQYTV6REFoOXo1CmJsYnVUNVpvbk0zODN1RUhCaDl5bHJ3dnBnVmpEVWZMeE4zNGxtamY4SHNFcmhoR1MrWWVaVy9lZXdlSzltdE9Xd1d4VG1icklLUlQKTGRqdWJkd2xMTHlSbndack9vVkcyT1lTdzZaNzZXK0lzZjBOamZ4K0VFTkFnRVM3VzhSRU8yUFE3dWN2ZithR2ZTSjhZMWpiZ0NQMgpLR2gvWTVFamdoQm9XSFJ6akw3RVFBYkRVd05uTHlNb25LVnFyQWVGUDVOd3BBbTZhaFJQWkZXd2xvM2VIczFya1I0VnQ4QndTWTdOCnhua3NqaEsyYVdHNkJwMTZpWjV3MlZUd0ZVYStaVGMvM3dNN1lMUS9SOHFjNzVGcGVvaVR5MFdUMEZmV25IK0JacjUzZGlVOGpUT1YKTWxIc2V0QStRUWMveG03SHhYdUt3bG5lWlhCWVVKK0RET0tjQWVqYmN6R3FtQmRDYzFxSmNNL1NuVzNucHBvd3prS2tmV0FnT2gxegpuNGNnRVp4cmdyWEFlRlR3eFhxdGZWOVRMbHV3R2t3M2QyMUJ0dnk1WkFOY1h4dSsvbGs0YXhRaVZTb2VBd3MwN2s2UXRpZEdSaEN1ClZYTllUaHFPYWJyaHRBU3NML2dlTG1rc3ZyN3pxbWtNOEdGWE1Qa1ZDT2p1VXdDTVVrTW92aGp1UGNrcDAwOWI0SkVEODdrY0pZYkgKQ2dzZ1k2QU51MFd2dGVadVNSMDg1TnJuUzZBWUFVYkxKMVh0cjFjQ01OTktNVEJMUGRCMWxwUis3emYzYzlCcFA0alRlQWE0S1l3RgppMEt4ZU9mcGl1NTQ3Zk1jT0w1STlwQWJObFZqTUlGa2ZZVGN6Tjd0SCs0UDI3V0tSWFBKbmRlS2d4RVNrekhReHlSUjNBSFhWKzVHCklyK2RiSUZ1TDhVK0dXWnFHdWFLOUs0RjkrcTdBL29iek01RU8rdkN2d1ZuT1NlWFlUOGhCa240MVdhY1RvdWhIMTZJMHJwbEJPR0kKeHZHaStFQzE1T1dldW1nMURCTGg1VXAzcmpoMGhHOWphT3NyY3ZVRmI4VSt6aWIxT29xMmxsTkdRRWNIVzFaN0JHSFQ0bHRWc3k2SAp1N0x1YUlHN1F5NTlVQXp0ZHVOTEhpK2Q4eW1DWFVHcGlzNWNwTUZidk1ydlpYaGU1ZXFxOE9mRGxIRVdMbjdIYnZ4Y20wM3k3c0JqCmdXem8xdmFoYVF1a3kyQ09yTUo0QlBSeXRwT0RCUmVWL3BLL3RwNC9Lc2pYd3BYM3BXRUlWUkRaN2hvZ0FqUFd3S1h6cGFYYVBtZHUKRVlTSUZPMVZsMmdRdFhYbVdtQWlHQ3NsUkhWck1OU1hJZWNRWDhKREJCbXJqMlM4WUREYjhJTktoQmdNVDI0T2NNQVlNSmM0UnR0bgp0VDI1eWllb2NOWTFCRW8rekxMMmhWajVXT0FOSGRnK0wwUDdxcUhqQ3lkd1VPNE1oZUZxR2VzTU1tSHRGY0ZlOGFFSXB5TUgxczYxCnJuMHdiR3E4ZVJFWngwRjRmUCtCUm9NSEVTM1VmbTVrZkZjaGpTTS82R2FGQmRKdEtHWk02b0JCZmZSbkU0UTZodzJnVFZ3Z0lzYWcKZXNXQnc5am1aNUF3UEk4eTNqZlFzczl5RC9iRm5JRWVRZUhQN1FET0ZmY3JrM3hvU3d0TzU2VHhxR2haVTNoUGJUamlBekQzaHp2cAo0eHNMNnd0MlN6SHpzWlFoSFFOTEtEeUsrbk9CaUNJc3M1eVhRdWJTZmlBQ3IvMFo1N0ZBWU1vSDdOeTc1MVRpVFZzaHA1WUtsNjl4Cjl0aHBPRCtoaE00SzFuVmRwRFpkNEdmYm1NZzFJK0RBRTJObERTTmdLV21zRk9leTNxeUVscVIvN00xRVVhY3cyVVR6dEpmT2VJSFoKQmdyMjFKS0gzRFltZkxTejl2ZTM4VUs5NWdPZU1vYXYzcy9NVTVGRzlza2s4U0hNS3RWZXNiZUdLWXhMVnB6anp0OXhSS2czbExCYgptNHI2ODRKTFVVVEpwN080Sll0QVJjbFVjdWxqb0lPeldtYzJya21GNkJzVEJSQUJtT05NUXNZcHhPb1RRSkd0eUFMWmRVdG5tOXdqClVJblhvS1JrQkR6bmpMMEtVS2U0ZE9sOHN0cWFnQzBDN1NOd3RZM0lPM0pndmlha3ZmVmJhVGEyaEF4ekNvZFordz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJNHhYTGI0VlRUZmw5eVlTeVh0U2prdktESzZ1OGM0UXNqWFVic1MrOGNRK2RJeGFvbkhLTWRtYjI5S25NTG0wM2E1VXJLbjNNQXp2MwpWZWFqeTdTMW8zUDlZUEpMM0kxMVJPQ042aXBKR0t2eGxramFqUmxCSmpsVlZPb1ViT1hDOGxWc25sUzV2MTZnYmRBQ0krRHJnZHE2ClhQamFBbnNGM1pIZG91Q0R1clkzV3kxUTVrSFdpM0FkUXBvZ2tyU3pJNm5jK3lhMERWRjNRTzltNDZ0MUNtV3FGd2dwWDFoVGhRMkEKY3R4MUlUeXFpSncrSnMwWmcwNjl3eUcxOFFrS1hWK1M5UnMrZkdDNmRpbjk2WmNka3pxSlVzQzVHenA0K0dHaG1EclJBY0RDRzFISQpZWHZncW1mZXI1bmtWaUFBa0ROQ09JbGlnZXdZMWRhV3p3aGtFYlpYd2JkYWd0NlRPWE1nQUhQRG94RHVmbUJacGtvSEFncldPL24rCmxvNlBkR1RwNStxNW5reG9xTVBWVTdyOTUyQWg4eUdwYXJhKzhMbWtjQnUyR3o0bDNPY3pyY3VWQjdEUWZlMTduM3FzMmtaWUlWRFoKNkRNcmQ0eFBjY1hDSDg5amZNa1Y4eGFiekNzY2ZCMHF6RmN0RmRlWFB1eFArS3RxbUF0TDhtQlRrSjhGY3U4TjV5UFRYbUNReW00cgpHNS8yUmR0SW1pTUhscEkzVUhkdXdJeG1pYzlJNXBSK0JFcldwRlVZVXVQRnNmYVplYlNKNW85MFNoQ1d6SVNiS0ltUG0wU3dZSjFQCjV0WUJnNWZKQkV2TjFLVzEwb1p2MHVNNVBhclBWKzIwdlczQWROSDFHTmJqY29laEVJWjc0QzZwWWJDTVR5eVhzLzFDWjlGSlVSVCsKVnA3TGoySkw4NDI0M01iMnVMS09Cem1lRi9pa21QTjFYZ1Jyemh2SmpuMmQrN0IzWktLMUZ1RmR2OEx2YU40d28xR1J5L2lvNkt6QgpKdkZpeU9XZnNzQ2N4U09wZ1ZRZmJ6RjZrVWNYNzQ4Y09KdytpUGQxdWtmSjdsRE52akVqdkJQTW5WMHNXc0hCTTdyaEwzRUdzNHd6CkpDUE03NGJLYjVKR2VGMUgrL1JRQmswbG5HK1M4MndZNFNNWXRKVjhqQ0FzVGZLSFc2S2t0ZXJhS2VPc05VYmF5NWRPNHRpNVpWTHIKV2JZTU5LeVpFWmpYcHQwT1Rlb3ZQbXViamF4dXI5eEtOa0dDdXNCTUNUZHh0UlVUUnc2Y3kzeGl2aGh0WTAwY1pRbGZVaGFLWjJ4MApxZHhFcDMxSzcxdW51OXVaNEFYcW9ueE1jTmRwdTh4cy9aQmhGMXZWWERRWEV4WUV2SlB1VFJBVXNzRDFNejhHOW9pRVY5cUQzOWdkCkdoQ1lDWC91WVhNTFhYL1A0elhBbC8yRkMyclEzdmxoQ3NwUzZHYTc0TGJZZGE5dHVnbEdtOHZDSDZCenpubVFSRVorVHErRWFSTzAKOFhZTmUwYktaSlNKa1NKV0NDK21idkNtUUZZK01NMkRadXNTQjR3QU1DUWJwY1hMQ0RJdlkwbFMySTZsTmlUYmtwRVduRlBDeXowWApRNWNwbTREYnpUaGVjVkNTZzI1MGRLY2NTa3QvK0JMYUpTRlJVVXBrWjU3S1VPVk8vVEdQRTNBb20rVEVpZFBDVGRtTVpLUGt5V1ZOCjE1bTJkeGpkZ05uOUtBUFJ6WjJsK0J5TEZrOEFpdXVuVms5Qm9HWlhxbklPL2N3RUJuZ0RYMmFpaEsycDA2S3pMSElyQ1plMUtzdDgKWWhSdGc0SXNnaXlLWUVoZHh0Y3M5eWx4dFUzMFo0RjhGZFVkWlN5Q1BOcm5OQWV5Wm5sa05jdGRMQkVCL2VHVGsySHdpYVZRSWJFTQpweFF4L3VvTUF2M0IxU2U4eU5tSGlTY0xsazFRTkZpR09JWXlLNkpvQk1xelpJRmFlMCtadit5RW1XRWttMmdwbTJMSWJPTXo1cnA0ClF3UjZ0ZHhaY3pPMEh2aTAwNFl2MldJYW5jemJocHdYRllBcVJMYTRTNXM1SHQ1OWVzU1FyeWZ4dVV1MFRlVmhnWm5rSUNCUldQRUUKd09DbUNxb09ndjJ4anpYdFBMSFhhQzFXbDNNRGdWNWtCTmJtd2tjZEI4TU1wUkZpTGtwM1ZzaEZISnRUOERrSXdkNmFXTGd6VXg0dQp3bW1iaHF4T09Zc1NyK21RRXNBSVFrTEozSXJZWFBpNFJEdzE1dHlCTkFuV3ZUeDBJSUJaelVDa0tXc1UybDNkeFpKZUxaTSt2UStWCjVXVkFKMnZYMmNJYmxKMUZHMU14OGRLa2JkcldsLzd5cnJaSE9nZFVYckYwbHhrcGxSTjNsT09yRVNpOVBvRm5sU01IOXJ1QmRyZHMKRWViRkk0c21BSEllRWxSKzJOMmFvNEJXdnF6aHNsbkJDNG50d1FBTWpwSW9KWnVNWEIwc3MvTTAwcjRveFlNRmh2eWxSSXRGZ0ZZWgp2Nk1uWEoram9aMVRZYksrRDdSQmFPWXpWNGVXQk0vQjNOMGZBeUEvRWVEeVhuTjk2YlUvc2gwNm9KOXFMdmxkNnFORVlpbElZSi8xCm5KTUtwdDR2UEk3QXUyOXlIMHVjcHo0bFJGUldScm82WjNqQkFmREdWUm5OaThLa1hrK3pkNWNRcVRmc2NUSXRHaFJtUU1oN2hYd3gKcktjSVRocVorbXhpSVNJRmdHeUlOWGJ6WXdSaEsrS1luRnpGeHFQY09wc3dvWnBQOTA5UG4xc0V5c2R6NHc1bHpRdDViR1ppZDIrTwpoaWpXVVh6TUFlYXY4MWRUcEJKY256SWhxZGh5ZzhBUURPR2pWQkJCTURlNnpSVGJ5dmtjeXlsdXFBTitaQVdibVhMalUxR0YzUUN6CjdSVXNYM25ud3J4OFJ2aStzcEtSWjFIb1lwSTVkcG1RY05pTFRBeVU5bFlpbnlZb056NWJGRTZ1akRQTm9VR2VsUlFPZE1mc3R6NWsKcitBc21GRjRoTC9YbnhmK0htWXdNQ05RcC83TW5qQ0M2QkVGdzJweFFVK3orRGxyVjBjaHJBRkVXVXVaMVFhS2NLNElrUmhGR3FsRAp1Wk10Q0N5OFI4YWR3UUNZaDRBL3pWWllCQWMzaFkvSExKVDN1cU9OS01rOU9OTWNXc1ZpRHpVcDd6TFVMdmtReldudkFHTDloZVFYCnN5c2NibmkxT1EzRVlxVm9LTGJSR0VlRThkZXFYVVNvUld2c25VWVZXOU9KZGN4d3VzeHFnU0Q0T1RiTU82SEkyR3ppWWJUOXdtd0sKYkh0M3I5RlljT0N2ZFBtSDZQcUVkOHk0b05JaTg5ZjF0RFZXSHpnRVJaWk02QXFZbmNjYnJsMk9Uc3cySVRsckFCMUxiWDJYQmNXcApGVzUrNUQ2aGl1R2NRcHlWMFZJbzJDZzNMMlYvbW5LR0JYNkxoakxyV0lxZEU2L0lRbUt1M0R1ajZVNlJ6OE9ZUlp4U0lSY1FaMHFtCnkwS2M1SVB5aEFlMityektxWTAvUVF3NVh3dmttdzUwcWNXbjB4UjhjNVd2cDlteTdzMkJ6TDg0RStYa3hRdGdmSW1kOWdhZUJibFAKMmVXenlaTVE0T1JIV1NKNElvSVU1cWJjL1JZc3FUZ1RRT0ZqMFFzWFFPNEl0eFlGUkJDeVdXWitkcHB3b1paVFY1QVAxRi93VnpuWApWNFZQNE9RT3VXVHQ5d2thL2MwcG1qdDhiNGZNZUE3b2N6VFFWUW9MVEhOT29oVTg0cVErZXdRdUJvYzJBbjRveFVzdTdZTXMzWXpnCmRhLzlGWEM2cE9qa2hyK09xMTAwZlRILzdRcWZTNXoxMkVJMWZBSlpUaElCc0pBQ2k2NHJIRGpCVldTY0Y0WHZpaGNxem1mcER2UUkKZEJsZzNMTnRYazRhbndEVk9TUlFKQ3UrVWxpd25FWWxKRXhPUGg4Z1dETUZWZ2tycEw5eEdsSVRJVEF0L0pwaEpiSUlJYVdaVjhJSwoxRmo1cWgyY0U1UURxcHdUUmxORU9TTlF2RzdKdEdoaDRRWS8rNDBMWVUrbGJwbjVJUlRldmg1eXJTQ0N6TThCdTMvVDVzWEpta1RtCkpRU0FDNTlvMWFXcktVU2M1MVZuRFBUWk5LbFRYRDljZGN5ZERST0JCVjlMejl6UkZZRDhva2h1azEwd2duQi96eWtnQUl1U1VMa1kKcWdJOXJueTFOZHlKS1pJb01RM2QySEJsQmFmbzVFd1NtQWZjTUsvOVUxdEZlT1lxOTJrWXB0T0wvMlB2YkUvVURwM2lHaVN5d2czeQpmQWJZOElrbUJ1YXpnRjZaazlFTmJBNnZHTXVPUzIrcTFlT3prOHZnM09MNm5yNm9xQXJKS3p6T0NRSmM2bms2S2ZLVllweEdqakswCjFQSUZaT1VQb0J4NWt6VmNBalE4RmFjc0pCUnJBWFNBOWhja25VaWtvdjd1c2JzMGhEaDk3bXE2VWVZUkpEeWJwZFBsaEErMnhUdVAKR2RlZjZEN1RsZHBKUUFLTFRLTThZa1hCYm5GMmVDQlFlL3UxTXczSXlENUhPZEVQcHVwek5wbzg5UmZldFQzTjF2bXM1RjB6bkFpVwp3TjVqVlBnekdDZlFEdFpqQXZJWmxqYWpDSUdjYnN5N2dVUkFPczRCWk0yZnZ0OUwzSnllT21PZU05aUg2ZWFhVWFYQk51dkNSeENvCnh1SnkvQkV0dkdsUzhCbVhuN0h6MFQ3elQzalN2NmpHbmg4NjR2cUQ2N0lqcWpUZUlzT3pKQ1FlZENlT21mU0haOW9tN2xnc2VVY3YKOWZmSTNEVVpCRXAyNFpJZVVGOTh5V0xtSFltUWZvVURCOGFCbkpwbnhwV1FNMmU0RHVsZ0tkWGp1UWZQU0VVc295ZllDbmF4VCtNNAo4bSt3VGVTTzREZlkwb0szWE9tQ3BNZHlSMUNpZFFmVUxLYkkyblhBQ0xSUDJzSzN0RXg0R3BMdllNeEtYc0hQc2sya1B1Qm4yYlJYCk1WS2ZVQlBBSVJrWDU2ZENvRTlBUkM2S21YaTV3ZFRlR0ozWUhCRHNjM2R4Vm5vQyt1eE1ibnJPVDNNUVV2aWxMbUNjRVBpVUFESFEKNXpOZ1BXRzZYMGZoNWFLeHZHejhjQkZmR1VhdzVyeHVRWkhtQ0V6MG9mbnNWeG1JbUphckh4SW9zQjBvRFJkZFFyNy9HWG5oN01LYgp5dnQwN3NEK1lqMWZMcE9adjdxUk5WekVrc3lpYS9uQlhJSFZNMVpPcFl0N3dLYUt4QVBkdmFDcDlxUG5aOXlwT0xjaHMrSGxKZW5CCkNiK2NGTXJ5YXhiemt5R3l1eVAzQVpzSWpFdldaNzlUTTdOYlIvNXB6cEE2bFk3Ri9EUW5CemI0WFZWbTNpU1grU3VuOHpsWkdNNlYKeFR1NHpDUEZrNU41VEhlQTN5Y2lOWXdQc2tiNHQyUHp3ajgyNHRPZ0U5Z1hkdStTRUpCbk5SK0ZreXpLZEJFZUg1aHFMVHhoTzFIYwpkOE1uMTZVem5lK0dUMnFnWE5aT0JHWWgzWWd4ODdyQkRZYUUxM1NUYUVtRG1UOHArL2VXTXA5NHlyOEdONFUxdkFMRjkwZHc1WXZ3CjhpZm5PblZKc3Z6empab2xxUmFDVTM4WTVWOEZkamxCcC9HeUNFeHNXaVA3QTZwKzV3NmNwUDZwME55L1laZjdqSytjMUIweGUxSkMKdXRMNVBRN1puL2o1QXhFbmx1ZUhnS1k3eGoyV0RjbUdaSm53VzZ4Q2VEZVQyN2c1RFVBUkxJWjgzUnZUc0hDZ1dlS3lEU0lDeFc4bwpKb2tJdC9qVGNJT04zL1FVM2lRVll2dW0raFUyR1JPaXgvaE5XN3h6WDdEN2g1MXRWSlNOLzduMk1CL1BRUWxOZUl2SWZEUWxSNTRnCnNQQldlbmNVbTJxZlpYWnExN2RpNitJNVF3VjcwQ2djNzhpQjB4RGVKMU8rM3loOVVBajNkd290TjZkdDFLamQ2WXgvMnhkVHhiR0cKRVI2ZVFMRGdrNzcwcjM5TUkyRzVhYUlRQXUySk1UNjd0YlladFRucG5uZXhrU0ovTkJQRmtYL2pMbWliZEgyQW4vZ0tGOWpDeFExTQovNXNHejdUZ21HS0tjN2VvMDR5QkUzaDV6eXA4dm1wbjVqOTM0RlJ6bUFiN25URzRVZm43SjRYbTRFWmp2SldlRFZCWU5IaDkrYlhBCndsc0JkY2hyUE5VQjFrdVR5TjFDRjRiT0hUZzhSb3ZCcHh6L0VSNEpwY2pnbzlrNGp1Z3grYUoyOTlQYXl4L0hQczE3WUY0ajhPVGIKZnUvNW9OTWJkWHF2Nm5VTHBuZm40eC8ydnIzQVgwUmlmenIrNGZHalRoZlE3TjN6SDJ0ZjdOMTcrZlRvMjM2N3hJK0huZGFvMCs4MQpCKzhXL1hDL2R2Zlg4MjRQZnFwRHR3YWQwOHRST2Z5MDl2bmV2UWVEUVhPaVJPdDFwOXNlbEQzOFhkYnVQZW1Od20vNHoramRSWW0vCjNRVk41TTZudFh2Zjl6b3RBQjhEM3Q2cjhhSnZtOTFMVy9hWFRudjBlbkhoWHZPY3lrSlhYT25QMTVtaTEyWG4xZXRSWlpLNCtJM1QKMUQvOXVXeU45dnVYdlRiMGI3Ly9hMVVDejJpK1FkSFJzREtWWTNWdW5OUUhUMDRlZEM5ZU4wOUVWUm83YlNpNWhDWXNjK09rVkorSAo3eW9QenJ1MXBtUEp2SXpvK0pYL0x1N3V1b2pKMGVYZzlMSmI5bHBsVlZiWXFoVzV3ZTNjOU1EQ0VhOHFQYWZOWWZsb1VQN25FcGhRCmZicE8xTHB4Q21WVjhucVg1ODlhbytiYnNycWNqS3ZjT0dHOS92R29NMm90Mlk0RGZVTXEvVjJudXdLQlkzVnVuRUpjY2xXcEc1VEQKeTI3MWZaeUxWNUZBYzdvdUZuUjk5bTRVYmNybGR4WEZTZWp6QXZhdjhiaDBla3NXWUx4Rlk5a2JuMldkWGxWYStoZmxvRG5xRHlvVApGQ3JjT0ZYSC9jdEJxM3c4YUY2ODdyU3FEOVlLWTNXTGkrZWdmMzdSSDNaR0s2eWQ2K2dIYWNsVnUzRHZzRHlyM2Q4ZEFkZVBvdDBSCmNBYVZhM0lFVkxzajRBeENka2ZBV3hHVFo0TW1hUHZkYi91ZDRaWWRBaXRiV2piekRGaFppdXpPZ0xzejRPNE11QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJT3dQdXpvQzdNK0RIZGdaVVczY0dYSUdpVFRrRHdzRm92M3hiZG85Zk45djlYN2JBUTFhWDIzSkFXb1dTclQwaVZkYTBoNlAyWWZtMgowOFFPcmFDS3hwVnVmSVJQdTVkTFJQMEgwRVZ2UlVjZ1k4dTJhUWlQbTVmRFlhZloyMTg2Yk91b1lGZGVTZTNxWXJHOTFvZnZkbldwCjJQNzFGZ2pwbjUwTnk5SHkyYlI1UW1BVndiWXBxLzhaamRibXJmc3VhcFlZWGRqcWQvdURMMzU1dmZTSUUyK3E3N3JWclkydTlJM1AKdHNvQko4UEx3Vm16VlI2M21xdFFOVmJweG9rYlhwU3RaNWRMNXQxT1FveEppQnYzRFZhZWdEQ1lsOTNtNE9HdkYvMWUyYXMrVHRNVgpiNTdLVllrODZQZUdvK1lWaUF3Vk4rbWtBc2MxK0U5Vkp2MVdtU3UvM2NiUlU2eEN5NW9mby9VS3BIendjL1MxcUNMUCs1M2U2R2dWCkE5UDEyQ3JMWTdkaWo1eU9zWG5hMFpXT3F6dnZ3MjE0SDdaVUUxcVJyRTA1TGwzQm5iSXVNcUh5YnZGbWlVNFVqUVVXdmZrNGpNcUUKTExHcHhJU29kZFk5MzZUVkNVblhtcERxZTh5YjI5aGlWcFphNjc1bk5nZWQwZXZ6Y2xUZHNiMUplMmUzTTNyZTdDdzdpMjNlNXJtTApTS2k0aFc3T09YcDFxL2ltak9mVGN2Q3FSRTV1bmtxMHF2elk0aUc1dm43c0FvOCtqSTRsZG9GSDZ4OTQ5SEZkUGpubzk3djdnN0w4CnJiTHJiWDBEckZhWWpPdHVHYTVNeU5iR1Y3VTczV1oxZi9BbUhYa3EyM00zNjZ4enZaRlY2enBHSkEwckVuSWJRbEUwS3FlRkdEVGIKbmN2cVd4Y1h2ejBWdVQrNGVOM3Y5bDlWRnVicmMyelpYdWwyL1hlWTFsWVVyTGxNcTM2TGFTZlRkakx0S3ZyM3RnVHlubGIyaG15SwpFRnZoQnVPYUM3SFZMZ0t0SXNWdWFjbHZhdmp1OXVZSXFMeTdiR2FPZ01wUnlic2NBZE1FM202T2dOUHFpcyttYkV6VjVmbTY3MHlWCngyWlRkcVpOenRxd0pOd21FZ0tyM2JtNHBjc1dLMHl1dFE5b09hMDhOanNodHI1anMrNUdnZ2VWWFVFSHI1dTlYdGs5THJ0bGF4VWoKMjNURkd5ZnlSV1UzMFZXSm5LNTRhOXZSWVdkNDBXMjJ5dk95TjNyYXZOaThQZW04Q2FncXU1TTM0cXhVNC8vV3BqNktzWTlWcWFaUAoxZFZ4TG43emdyS3lzV3RqTnJIcW9uL2RON0hWY21sdWdDWitnRGVrbjFZUUgrc285cXJmejl6RVRDbVZyU2tiSXdlcXI1NTFsd09WCngrWWE1TUM2ckw2emxZSzd6anJkN2lyQmE5M2JVRHFXcUFlUmZSWWZwYXB1bDdXbGIvN0dTbVd4RnlqenpYOUwvYTlJNFVTdFd6RFEKOWlyUHhHYXJkWGwrdVR4S0lpWXZxbkx6VnZYS3M3SmRQVW1UTFh2anRBeEtPbWhWSHFwMnV6UHF2RjFob0h5RjliM25kamJvbjFlWApoRlI0ZlQwNW8zNzFrMlQvRmdocGRuOXB2cXU4Z0VBMUdqVUhLNmxTdHZ3dDNHN3JsYzNLMTRWYXpXN3JhYi82bFkrb3dpMmRUSnE5Cnp2a0tFdnFhN3Foc2R2cTdlcjR0WVRPdFhkak11aDZGcWcvTnBwaEVkbUV6OHpidzJ3cWIyZmIzRmF0blU5c0Z6c3l5MDkxbTRFeHIKNndKblZwRG82NzQzN1FKbjFtaC9xcXlOYmtiZ3pBcVRhKzBEWjFwYkZ6aXpSVUpzRnppekM1elpCYzdzQW1ldUdEZ2pQcGJBbWRiVwpCYzZzSVByWGZSUGJCYzZzazlqYjZzQ1oxdFlGenF5d2V0WmREdHhtNE13bXVJZzJKL3huaGFGY2RWTGUwbEJ1Y0xMQ0ZRTFNkb094CnVYazlObWNzcnE4ZnQ5dUhyVWtaK2VESnlTR2xDanBaemI2MFpVR3MyNXN1NldieVJLL3I1ZHVQSVQzUFRyNVZrbTltSjk5MjhtMUQKNUZ2bHVicVRienY1OW5BQWdJOWJmU3VSQlR2cHRpSFNiYWU5N2FUYml0THRvMWJlZHRKdGs2VGJUbmZiU2JmSzBpMTJHNTJzNWh6ZgpNaUZYbWZnUDRvdmVLQy9oYmhHdHNJaXlqM2tSVlNaK3Q0aDJpeWkrNTUzVWRPVkFRRXYyaXhWaUFhTWFONjZPZlZ5dmJUM3YvRnAyCm4zZWI3MDVXdTQrNVpYSndVSjczbDZXTDJPV2t3WTdjVms2YWlrSmtsNUJtTVhtM21aQkdWSitUdTR3MHQ1aVJabHR6bnd3dk1QdEoKVmJyZUsvZkpEVlBXNmJYTHMwNXY2ZnZYOGFoZGxNM1I0UXJMTEtweDg1S2pKdTdMcENZMC9KdlU0UC8zNFRQOHZROC8xSzc5UHNxdApIRnRXVG1TekxxclV6UjRwYnpwZWRvVzMxamZsbHNBV1BwYTV5akI5cEJjR05zTnpzKzRYNEpjdGhNMTBzN1g2NXhmOUlXZ1R6eTZYCnlLL05rM1lyaVlZTmliTS80UEhhUExsUTJZajRab2w5S2hvTExIcno5cGJLaEN4eFhNV0VxTnZRdFNzVHNpUXNKeVlrWFd0Q3F1OHkKYjI1ams3bVNncmJ1TzJkejBCbTlQaTlIMWJXQlRkMUJ0eTRINVZYVWc0OXhLOTBjOThlVnB1dW1ET251RnVMTy83enpQeThpZEMzOAp6NnZsWE56NW4zZis1NTMvK2NPVHVmTS9VOUdkLzNubmYvN2dkTjNnMnhzNy8vT0hWemZSQXkyVCt5dXBuanVmODg3bi9MN0U3WHpPClZ6TTNyUEV3N1h6T2ErVUFhSGZPemk2SDVVRy9CNnBCci9yeW1hcDM0NVB1WGRudDluK3BTbWUzOCtyMUNINnZ0ekFKYVdVeUo2dmQKL1BaYldieGZEczVBS1Q1ZTdTR0FzVXJyNjZheXdubzEyc2JxM0RocGJuMXMyK1oxclNFRTZ6MUVXL3dzOGM0RXQrNG11RlcycjUwZApibzN0Y0x1WGlYZDJ1SjBkYm1lSHUrSng1LzZyUVZuMjdvTWFWdDRIaWp1dit2ZmZkdnJkY25SL1VMYnY5d2ZOM2pJLys4NUFkOU01CmJpcGJUTXN1ZkZuSlBCZlZ1UG10TEs5TVdQTzN6dm5sYU1tTGxySGc1L0szWnYwNTdKQlo0d2pWcmx1T25UbTB4NVFqcHdGdTNnSUEKeWJUdFZocXgxV2FhNFVYWkFvVjVzTHNTc2RiMmpCVW1vUnZRaDc5ZXdGbHJCYXZ2ZE1WYmlHUllsY3FWYmR2VEZYZkduSjB4WjJmTQoyUmx6ZHNhY25URm5aOHpaR1hNK0FIMW91ckhHSEdmWkladk96cGl6M21mWm5USG5mWXc1dDZGbmJWdGMwaHBacG83ZE9XbHpUVk5iCmViMTRPeE56YkxFUjZncWtiY29GMUExT3oxRTloOEl1UGNlNkViTG02VG1xRTdMbTZUbFdEYUZiKzcxenUxTnpkRHVqNTgzT01rdjQKNW0yZ04vTTJ6bTRMdlQ0NXQ5dEMxMDJwV2ZNdGRHc3lYRjFKK2Q5dG8rdXdqVzVkZHF0VjlZT1BjUXZkbkVDQWxhZnBwZ3puTHF2Vgo5bVcxK3JoU1B4Mi9icmI3djN6Yzd3NVZUbnExUzF5d0h0ckJUU1F1dUtVZFpiTXYrMWQrRHJSZCtUVmFLbnJqTTZ3NklVdTJoNWlRClgyK0JrUDdaMmJBYzRXd2FsTzJWVnN5bUNJTnR6Q1gvakVidG96b2pYSDJpYnNxZ1h1R3dzQzZEczlWbTdkMGhidnNPY1VJbGQ2ck8KMDE4NjdSV0N5RnpwbXpjenA5VXBlbDJ1RXBQbGk5Kzhjdkl4SHJXdkljWHlEZE5TRjdyeVZLeXU1OStHbXI4S0pkVVYvVjgzeS94aApkdWFQelRyeDdNd2YvZlZVay9OdE1YOVVKMlJuL3RpWlAzYm1qNTM1WTJmKytJakdaV2YrV0hQengwZDJzQjQxVjRqdjJrWVA5dG1nCjJSbzF1OS8yTzlWRDRHM2xpbVBNTGQxMHRHdWpjaWFaMCthd2ZEUW8vM05aOWxyVnRldUpXamR2MWFzY3o5dTdQSDhHWS94MmhhdlYKY1pVYnA2elhQeDUxUnEwbGh0WFl1SUNsdit0MFZ5QndyTTZOVTlpcWJNbmJsTE5FNi9vQzlOWjJiSGJKdERjby85SUtRbjZYcm1neAplYmVacm1pWHJXaUZnYnE5YkVVcmFGOW5nLzU1ZGVGQmhXK0JuTW92VkkzNjFUWGovaTJRc3NzalJadjhMby9VL0R4U3QySk5Xam1iCjByVllrcjY3SEp4ZWRrRkYyRmhUNHk0UHpBWmN2bHZoakxFaHB1QXIzRTdibVdFWFduZTJMZ3B0QllwMlVXZ3pxTHgxWTNuWUhFK1cKWEt6ZmdFaTA2cE54dmVQUXF0T3h0VkZvbzRwSzI2WTVNSkl0OTJCVURoWGFPVENtQ2J4ZEJ3WXV1V3QzWWR5U0tyczdBKzdPZ0d1MgpoSGFud0pYNnNUc0Y3azZCTjBqVFIzc0tyS3lmN2s2QmEwUEgxcDRDdHplUXJYSkdpYzA4QmxZbWIzY00zQjBEZDhmQTNURndLUzI3ClkrRHVHTGhWeDBDOWRjZkFGU2phSFFOblVIbnJ4OEFmKy8zMnEwR3p1bEJlMnpOZ1hXekxLWEFWU3JiMkhGajVPTEhMU2JFZVYwZHUKNW9yc0dnL1VwcnphdDlrWk5uWUpSaGNSc3N1d2NldFNZTTBsV3I5Q1pvM05rMmtmTEYvSVRWdTd1NkIvMTF2OWJuL3d4V20zMlhwegp2MlpCL1l0bXF6TjY5OFVLWnVQaDZGMjN1aG5jbGI3NW1HbWtkZHNFeEVwRWJjcWFlb1FUY2ZPVzFQdmswZG5aVG0vRGRycjlDc1JxCjhtSE5OWWdoWlRFOTJFYVJ0OEh2RzFaTzNPRGVTVDNvOStqeDl1cG5pOGw2Tno3eGZubTl3dVhKcm5zSXZsNWg3VVZVVGxhN2NTSXIKQitNTUx3ZG56Vlo1M0dxdW92V05WYnA1ZjhGcWduMDEyc2JxM0RocEt6NC92Q2s3MXpZZGZWZDlJWHA3ODhLWXlrbW55aTU4V2NtMApIdFc0ZWZtU1ZoYWZ6ZDg2NTVjcnVGaDkrUnNuaXJhazI4eG1kQzJxMW1HSDFJaWpWWnpDMTVRdDROREtoU08zOVcrZTdyZFRqRFpkCk1ickN5OHM3RGVJVzlwZksreVlQNk1OZkwvcTljb1ZqMW5URjlkWFN1YThybnlXbksrNjBwNTMyZEgzYTAwNTV1amJsNmRndDVjM1YKbm5aUjFodmpLZGhpTmVrS3BHMXhIUG02eUliS3F0Q2JKU1dqc2NDaU4zLzlyREloUytJTllrTFVXaE95SkxsUlRFaTYxb1JVMzJ2ZQozTVpXczZwWmRlMzN6dWFnTTNwOVhxN3dvc1FtN2FIZHp1aDVzN1Bzc0xaNUcraFdQOUd6d1Z0b2RUbTMyMExYVGFsWjh5MjBPaUZyCnZvVmVTZm5mYmFPN2JmVDI2Zm9ZZDlETk1WWHZIcFZjWTgxb1c1ZmFocjRudVM3VFlsc3pJRzE5SXR6ZFUzNmJtd0twYXBxZ3pWUG8KcnVUZTJveU5acE56TzUwM0FWWGwzQ0tiSU45RkxYSC9uZlhKUTZxU1RKK3Fpdzh1ZnVOa1A0YXF3K1d4WnBzbk9GWVhpWnNpTitqdQowdE1LQzNBZEJjZFdKMGJaNWt1QVc3d1JiM1pLa1hybGM4bTY1eFNwYjAxU2tXZGJmeWQ0bTQxeW01cU80K3F6YnYzZE1kc1pFWWhtCmZSeXY3MjRpaGZHNm55dzJSVHhzY0RTRHFQNGk5aWJxMy9GeXFuemxjRlBXMDFWa3hhWXNxYzNXd0hGa1hwNlZnMGVkd2RhWlVkWkIKaXEvTE9JK2FwOVg1c0FrMlQxbXI3UE1oMm45WXphZzVWdWYyRW9GZDlsb3ZOaytvYk4xa2EyUzFwUFp4VExmSHUrbDIrOU5OZkN6QwpiZitXQTFYb1BJU1h2YjhiTkh2RHMrcXZYYXpQN0w5aTlQM09hSEpiUmhNN1lOdW9jRi9sTUxFcHg3d050cHhRTk42RGJ2ZmFwOXZtCkhJZXV0ZzQzWmE1dWFCam9kZlRoS2s5WTNYbndSQ1FuRDN0dC81UVZnalJDVHI3dDk1NERDc3JIVkxmZy9mSlZweGYvc1BmdEJlRlEKOXFmamQrZW4vZTdlM1FmdGR1MVI4MjEvZ0VKa0w2azlnUCsvL0dYdkV2NmIxSjd0SlExVFpIQ3FiUWlWcTh6RzdEU0VTYkpjd1FlVApKVHJQNFVPZUc1bnAyc3ZtWG9qeGVma092bndESDM0RzBDODFrZFNlMXY3NVUxSnJZd3N2OXVwSlF5a2o4NkltUlNQWFN0Zk85K3JDCk5FU1JLQ2pjRUZxb1dsMnFoaTdTdklhbHBjaWhqYnJVV0RHdDFZdUdFYmt3dFlPOUFCT3lZZklrcXgzdFlkVk1GMUJWSm8wa1VRVjkKa0Zyamg3U1I1QWJRaTZ5Ukdwa1NKRFdGcUxXb0R6cHpNSWRVTjNKcHBJVkFWd2tpbE5JQmd2V1NScEZMRlpVcUdsS1pCTnVURFNscQpkVUNUNU5pK3lCdENxQlI3N3JsUUY2SUJ6UnJvdW1vVXd1aFE3R2d2YjZTSTBPS0JocElpU1VORFFnRmRjY3V0UFFBVktiYnB5MmdZCnJWd0dxb0JNWlFvWmt5NEsrSVRNWnY3QTM5eGtXV0FoRG9kT1plRHp3WjRIOFhBY0VVZ1ZORUxhQ0MycFdxb05BUklGTXdZQkVzZW0KZ000ZzB3aFBrZVRZVmlOTnRDRThSYU1vbElsQktjNjFGRkRqNE9aWlVVdEZJODBLb0QwRHBoaVRJNEQ3azBvcHNZc2VCTDB1OGxSWgpQREI1TGNzSWhHeVJCQ2pzTU1EVUVCb0hENHFtS1l3YThBZG1weWdNZ1ZRS0k0VFRRSnZNQXNaR2dnR3RQZWhYWWxJZFFDbndRbVRZClVvYWpxbXZSSElBQk5pS2xpYUdnUHlyblVraGZrU1JwRWZDRVNSZ2F3OGxMREk1S1FRZUV5RUtuY1ZvbE1Lc2l3Zz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJY0sya1F1cEFmUjE1WnFRT0RLcW5NcXd4Z2tBblBZeVpEZXNPYWhwZ2dXakl4Q1FXZ1lHeFF0NklBbm5qeWVVK3d1QkRZYTJ6bXN5aApycW1waGxFNVRDQnBZTVVBd3cwc0NLVjFEWlo1a2lvSkZUd0VhRWhTYkJmNkM0c2lqU0N3SGtWUlNJbWdYQUE2WFA0UzBjS2NTZU9PCnNBUTYyRHZiKzM2UGhGZDd6OVR1ZmxwNytlUGVuWk5ab2dxZ1Z4UldVSE9HdUVMbzFRU1c3Y2xWUkJiV3ZJclFpamtTaWEwN0o5T0MKNjg3SnlxTHJ6c21WaEJkVXU0cjR1bk15UTRCWjRNb2lqS3BOQ2pFQVRvdXhPeWRYRW1SUWJWcVVFYTdWaFJudzZ5cmk3TTdKRlFVYQpUSm9yaVRRN3ZhOGcxT3lLdW9wWWc1b3pCQnRDcnlEYVlQeFhGVzUzVHFiRkd3elhsSUM3YzNJVkVYZm5wQWZhNjkwSHZYNnZWa2hECk1zNHBlMUM5S05JQ1dDMThzRGJvZElRTW1BYnp4ZVFGU2orR3dKQVdLcVhWRDNJQVZwU1lCZUo2UjZST3dtUkpaNEZ3a1Jja05MamUKTklSNGxwRnU0SG93RFFtMWFCQnhlS1lnb2ZsSjJvNW1id0hUTEFpd2lHSVlwV2syQkdCb0JJZHVpaFVSTUhRNTFKNEZDK1NIL3N5Qwp4WFduMlJKZ2NXZW1XUk5OSGVMTDl3Q0JRK05vN0d4TWdnWFdURkZUTU9FTlNFT2xZZlZSZTFKSmU0aTQ5NkpzZG0zSU5WUUFsRTlFCitoeE9vK1dnVnh4M096YnpLcHhhSGc4NjdiK1ZGRHQ1NTBTN00xZFUrQVdjWllhakFjVkhmT2VPWDhERzJyMzlmcjg3VnZKaEQrM0wKank4N2JYdllCZnFtMFdHV3pjRW9JSUpqMThsZXdiUEFuOERzMlduR2FXci9jalRxOTA3NmIrRjRGeCttL25RSmZEdDBpMnpPQVVtTgpuNCtTMnFzOWtCaEpJbkNQeFRXWDB3YzgyZmhQSUdhay9iMXVkd3FaNUxnbjRaZk1LbWcxcTVUSkd2MkkyR3dsM1BrTGxOQXdNQUpWCk1QcDd4RzNTWnl3SnV3Wjg1dnE2UmhoQnA2WVdqdmE0MlFKT2g2NDRkaWZxT1NwVkNSQ2ZDcWg0am45Z1dtall6VUVvRzQyYmVjTEYKNFpQdFNPTElkQit3WUlZOWdCNG5FcVU0NFRDNDZSQmFwRlRZRHRFSC9GWExyT2FyZ3FKVHMzeHpUZFFKdGU5bVlvOGIxQi84eGtpdwpDWXY1d0JKd3RMZC9pbXZnK3g2ZTBOdTFWNE5tdTFQQ05Fby9wVUd0RnpqQUlycnRJbXI3ci9DY2wrQi9VS21CM2hnOE5CTUFtc3NGClNQTmNBRWRlbm84VjFETUxTdEJiOWxzVk1lNVh3UWpuZWNTSXc3Uy92L2VuNzJIR3czYWl3elNOMkhRZU04OTlxTS84RkhOK2JFeVkKbjNYSDBMSGhuQnByT3dzT3duU1kvc3R6cDdzWFRha3d6OXdNNFFrU0QyMDg1QkdSclhtRExDc1BNaFFDVFcrTTB6a09pWmdjNUhSbQpRZFRlSmdaNVBzYjlLaGlGRWRFZ3o1SGNxZ1pUUVlEdWVRTkNXdHlXa0Q0WWxPM09xSGJRSExUbkN1bHJNM3RKUStzVlJzeDlza3RGCkZuVHdrMVowQ3diUUYrTUVPUjYxVWxMNTdUZjRBcnFhKzBybkZ2cmdrYmtQaUJUYWtxaFoycjhrNnZpM3FJcEZZMlY3d0Q3V3N1dVEKKzhCWW92NDdxbGpvZ3hZQXhjL3Bid1pyRGRRTjZmNktBZ3ZEdndmRUMvaUFyQWcvMXFNNmRZc0hTeFp4MzZhK1VkL09YREhiNlhQMwp6VmhXMCtIQkllVVAxSnFodjhTak9uVW0vam11NTdBZDdFV05ISTAxaVYwQU1UcFhQUUxOcUFhYXZCRGJyQXNkTmtmbG8wN1piVStyClEzYUphV0VVTFRLVkNnWDZaZlFoeWJRQzdSYktKSEJDbmZXQjFoeXN3R3FyTGlQVm8yN3NmZ01EakpNaDR6OFpEUmdneTNScWNJRnIKYVpUMmQxVkJNMDV4bjB3YVdacEpQYjNlNFF5SDJMTWFUYkhNYmpPRy85Z1pDZHJkSHU2K3RodlVNUDVGclZyN1AyYStlcUVYN2p6dwpBKzVjdWhhMkFSRDRDcVIrbHVHR2srQjVSTTh1a2NQQkVuZUdoVGoyRitPQTAwYllXNGllYzA4ZS9sV1dQaFdvdlpJV3RhQ0xaaW1aCnlWSXl6Vkl5ZFVUbUpWR0dtbmtkTFJKSUthcWpqbUwrSytiVGFvcEFySnBKYkk1VEF2K0tMTVhtbFNNU1ZhcjRoMXc1eXFZcjdNK3MKWU9MeGdsK2twVUphSWhMYmQvZEhMcWFnanROblpTSWlmVVdrRThSa2k0aFpVSEdTS0cySjBwWW9OeUR1ejRJcFNFU2w3MGVTR1M5UQpKRlZKTW90SVN0MTBFMjY2Q1RmTjB2RDNRMDIzSko1dTJUZzhGOVBVSlBGc215Zy9TWVMwTkVoTFFtSjc3djU4d01tV3pGc3h5WndWCms4eGJNYk9Jc081S083bEV6YkhmL2ZsZ2t5dFp0bDZTT2VzbFdiWmVwa2hLN055U2RncEpPNk1TLytjRHpTdVR4WU9pSnVENUZDRmMKZm45VytZbitTK28rYWJjMG14TDM3NGViVXVPOXo4YmhNMWJGZU8remhiMG5xeXJOSEZtelBMZi9mcWk1Tk43M2FIYmJ6azh2aC9ITwpUMVlZNnozSm4vTTlKMzYwLzBNV1Yvdm5ROHdkTllmN2FnNzMxUnp1cStuKzQ5elJORk0welpyVS9mc0I1NDZhTS9QVm5KbXY1c3o4CkdiM1gxSHVyUTFxZTIzOC8yTnk1TnM1Lzd3OFUvdkNkTkFvcGhmQXVDUFNzQ0kxbmNGQzdCVVdPS0s5MnhTdkZxMkRDcXZPQWpYYVoKYzk1WGVKY1IvRWZ5UVUzVUhseFEwNnJtbFhvOFFyaElsWXoxKzFpeGQrcitIUDVtaS9YMUNha3NzbkZkTTdWellsS3BJTFYwUnRGQwpXZFcyR3RaSmpXTWVWcU9YMjR0U3FDd1MvaWR0V0p2aHRoNW9CLzJMZHYrWEdlWjlzaDBsT0lsV3NQSUx0dktUcVZPamQwaVRsL3A4CkNuTGtJWFhUVVBRaEF1WGt0VlZrN3RRWnVhaVZxKzVLTU9CZ0Q3M0xOcmFnOElpOE5kVERNQ3dBaXVtQU8wQk13TVd3ME0xRklJK0sKbXl0Y0dkOG5CbEI0QnpWU2VEUk1IRU9ZZXNZNnlUSTBRTTJjc25kUmFHZEpWcGhQUTV6ZS92NkRWdXZ5L0VWLzVHL2FRdVc0WnUzZQp0LzNSaTdMVkg3UmhuZHQ1U0hvNC9ERXBuS0ZOYW5BUnBVVmlwaGJBd1lNbmo1MWsrTzZzUHpqblhFTTBDMkdPdHZ1bjVjbURKOFVKCmRQZDQ5SzVibm9TbW83bUtMYjVzbzhpUlZ6ZzZ3eXBtZnliSlJ1WjY3cWNkam5haUMrTkJNQ0ZzbWF4aDZBY1BDR3oyb0docUJoaFcKcENHM2lPR0RtMkYrSHVaK1Bwa3dvUmtSMXBOMkhpbzMzQVhYUjhUNTVMSTQyTXVuMWc1RG1BaEd5bFFhUDVVOFRaTzhxV2F2V0RBagpyTlFYTkV1RHFQVWZKSm5walNBUFJDNjBYWWkwQVdDRUM0Yk16S3VVQWxraXlhTmF1Qk9zMnRKK2haWnlNZDZJMnhwMnEyek9LdnZUCm5FMXp4NXNmcHp5TWs2djJmRzlxYVllRjdCZi9oSENZRWlEeGZoZUV5a3pZdElTYWxHRlRjbTZKN0l1MndBVWdMMW1uWk8ra0RKb3AKbGlabFZ4Q1pESm1XZnBNYlpSVmY1M0xSbHMwVE9GYWpsRTdnbUNRU2JXS3V3S0ZLS21IUnhyVkl0SzNZMG42Rmx2Smt2SkdQVXJRdApkbTZQTGQ5d2JrTlBxY3JSaTJOU2dUNVJBNmMxc3AzclBEVUNmd2ovbjNhVTBuR09GNUZ3aStoOEwrV1ZMUHk2U3ZCNFFlVzZNNm9jCnpWZjMzRkFueTBhTE9EVFBMOTdJc3d6RC9OeWZCUDFCN3M4V2U4b2ZkYnJuRXdjZGY5aFpjTWFaOUw3aElVZWtHUHdLekVNbGcxekMKY0VadHlCeGozUnpvS0lEd0EwWERIdm1LTTBDaDRoa2R2RENFTXlseVVsT2xrZVR5WXhDS1BTV290bWprR0VJOURlRnFjN1U5NVZhSQptcmxDWk43QStBQ01PaFUyK01nMHNqU25HQ1ZvQUlPSDRRQU8vUkVKbXRBSzNBSmtnWkpRWVNjeFVEblZqVlFxT2JPcVRGRFlwN0tXClM0bEIxWVpzZGhnSW5hTXpYamVVelBTY1ZnM00zRUpyYkRWdEpLbWt3S0Nza1JsUjBPYWxSWnJrczZ2cUhCRkxNalRqRm9JMUsvVlgKYUJBR1Jsc1BZMUlBZjZHN2ozeU1VUkFoYzliY3ZhZk40UnY2NUUvOFQzcHc4aDZWN1FsRHdFRzNjM0hSd2JkbXg4Q0huU0d1RVZmNgo1VmZ3enlYOG42NUh3Y3d1ditBdk5PZGZOSWQwcCtvRU9nVlM4akhKNy9KdGgyNHh2NnU5L0JZQS8vVERYU2U3Ty8zekU4Wk5wR2h6CmZ2bDZmaGtFMlhMMmYzazBmMVNON0U3WW5UdlVsOFBtcVBrRkxDT1o3YjE4OG4vKzY3My84Ly8rZCs1Ly9oLytQdi9uLy8zZm0vbDkKVHNkM3YrOSsvNjkxbUorTGYxKzJ2dDd2UHlnV1lKdEdvWUJ5N0s4c3RnRG1oZGEzYzBLTmd1WlExQjVkL3ZiYnV4cEsxVWdidUhPQwo0dGZyQkNjdlA3TUt6R0Ewb1hzY2RYcHZXSmJlSjRRbkU2aXNNSk1vUFpmcEEyUFI5ZDlQYWhJVHNmY290UDkwU1gxNWNFRUMvaG45Cit3cEJVMm9GM2hlWlVpd2lZS1JIaE9vemdYSDFNMEl4cFY1RXdLQk8yT2o4Y1JVandJS1NjZWNFMUF5a2FsVkZBM1M5SzZzYW9NdGUKWGRuQWl5bFhWamZ3NXRCVkZZNkt2WjZwY3R3NWVVVFRoYzV6WkpPWnAzRHc5WGZRQVI0OHFUMjRIUFZyZG9GMWZpdkQ2V0hxelBYcwpkRmdPM3BidEU5RHNUMnloWWJRc3dsMmJ3dDIxQ2U2Q3hNZWJKbW1HQnhyNElIV1NtK2dEZXNRVWhrSlAvbDNwdHJYQUF4cmVUSU1QClVoWTJmQ0dDSlJnRENYL3p4RTd3WE9VVUZ5M3NMd3c0c0JwMWtxb0FPeUtZRkVyRkZXVURCaWVQY0VjQTZvQkY1V0N5SVhEZ2pzWmgKYVVhdUIwWU9IN1RLTEM3YkJZWWdMdUhiSVpEMVBGaHlRa1ZQc1VjZVFhZ0xCek40WlE4WXpyMVR6ekJPMGFoUTVYd2NaaEhqM0JVNgpianhyNUhRWkxlbzBMT1BDNVBsWXIzR3RtandtdDJpSUxNdlNDSGtNNFY0SG1PLzFHTXlObzBQdUI4cDNJUnBpN21rMHdwNGNYekdRCjdIREhBQjdoS1Y1UmRLNkMzNVVSWXh5TVlaWklCZUpYNlRSaWhFSjVvTEl4RnVxR3pvdVlYVWQ3ZEdjMXlTSzJBcVRJa25qY0l3QXoKMElNQy95SVFrZWdSZXk3NDVpUDIrVzVHL1BQRStKcUJZSWM4QmpEL3BqaEYvTU9wanZjT1kvN0ZNRGUxR3lMbmxlU21QM1FpVitQcgpCcGNiYkl4ai9KTjRqem1McGlwQU1ySlBCZXd4aERrWVlJR0ZNWXpJOU1nOUozd1hZaW5EWFkybERCTVVwSXdubXFWTUJQQlNacEpiCnlFTVpNY2V4TUFZUmpiaC81anBpZy9CM29UMy9RTVRBYmpRdWVOQnNtWTd4RkdPSVpacEhTM2dNNHZnWHdUei94bUJJWWtET1hBaGQKQ1B6elBRM3M4OVF3S05Cck1jZmZIZSttdUlTc2d3MjRNT09zaTBGRW5nWU1PdWFVaGlhVUdaTitDamE5UkdZeDUxSWdKVWtqeHFVTgpvMENGQ29oamdHTmJBSG11eFNBa3plTmwybjNiZ1dXK2g0RmxuZ29HQlRvdDN2aTdZOWtVZDVCbE9VZ0VxY2UyakJoRWxPV1JxQ1RhCmMwQXBUQjZ6TEd2SU5FdGpqbVdnSjJUeFZtZ2FPV2hyT3VDTkFZNWpBZVE1Rm9PUU1vK1hTZWVtQThOOC93TERQQTBNQ2xSYXRQRjMKeDdBcDN0QnVLK3psNkloaE1ZZ0lFeUpzM1haNUN0QWM4N0h0UWVENlVXTWN3NWJUV0FoaTEraEN1MGNjQVJ6SEFzaHpMQVloYVI0dgowKzdianBZbDl6Q3d6RlBocTNrNkhkN291MlBaRkhmc3J1RFVGc3BIa1dleGhsZUF5cGc3UFlCVW9xSUJla0VlRkR6K0h1bDNESXJVCnUxRExLV2tCcndOdzI1RnlSd2NrazhXNm5aQjg3SEtJNGEvSzNJWkRqVE1nS0hZTWlmUzZVSXNwOTNnRGdObyttT1lPc1l6Vms0aGwKRFBLa3NlYmppWGZhVWNReTFxRWlsckdpNVd1eEt1YnhNaUJpbVFjRmxrVWdTeG9qOXNSejR4SExYQThqbGpFUnZwYW5uUEZHQUdiWgpKSGZHZExlSVpRenlwTEd5NDRsbmpTamlHU3RPRWM5WXUvTFZuUHJsOGJydkVjY1lFaGdXSUpZdVJ1b3A1NFlqZm5IM0lvWXhDYjZhCnA1c1JSd0JtMkNSdnhwUzFlRms2VUZnK2JwOE5DOHlwUHhIRFdFdUtHTWFxbEsvR3lwWkh6SUNJWlI0VWVCYUJMRzJNMkZQUGpjZnIKMG5VeFhwaU9qTEF3bVhhL01BUEFMOHdKL3NUYVdlQ1o5Qnl5bExFMnc2U3p3aE1ZNXRXaXdEQ3ZPekhJYTFlTTFnTUN3d0xJTXl3RwpFVjBlTVZQdUd3OE00eDRHZmpFTkRKR0JmWVExK3U2WU5jbVhXQjBMdkdJSUU4VnFERlBObWs3Z0ZhdERnVldzTVRHRU5Tckd5ZDhECm56ekVzeW1DRUQyTWsrbmxWZ09QdUdlQlI5eDNobmhxSGM3b3UrUFJKRDlpL1N2d2lDRk1UKzdGdnFXWGxadkFJdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJcHdBRkZyR0t4QkJXb1JnbGZ3OHM4aERQb2doQzVEQk9KdGMxR2pqRS9Rb2N5b1BnSm9pbjFhR012anNPVFhJalZyZ0NoeGpDNUxDaQo0bGVjMDJVQ2gxamhDU3hpbmNqWGNUcVR4K20rQnhaNWlHZFJCTEZtV1llVDZlVldvNVhtZWhaNHhIMzNkWmhheGhtK094NU44bVB4CmxkN3I4bFVtMXVMOXdWeVdwa2IvL0lSM21OTmt0c3ZTbDBHUUxXZi9yZUN5aERGOVg0K2w4NnJ3Ly80M2ZIL2ZILzlyL0gvOGFmZWYKM1gvOGYyYk1vZi82TUxOdi9vOVgvYy9IN2hja24rQXN4OFlFdExKcnczbnpKcHdiRm5vRjk0YXRPT25nbUlDdTRPTEFtbE5PRGt2cgpWZHdjczNoblUzemh2c00rcTl3eDIvbGUwUUVDRldlNFFDYWcxWjBnVUhHR0d3U2dWM1NFVU0wcFY4Z0V0TG96aE9pYWRJY1E4Q29PCmtWbThtOC8wV1k2U0NlZ0tyaEtvT2NOWlF0QXJ1RXVvM3FURFpCeFkzV1ZDUkUwNVRRaDZGYmZKTE00dDRQSU1kOG9FZEFXSENxYWQKbkhhcEVQUktUaFdxT2VWV21ZQldkNndRWVZPdUZZSmV4Ymt5aTN2ek9UM0Q2VElPck94MndWU0owNDRYU3FCNEpkY0wxcHgydmt4QQpxN3RmTUZ2bmxBTUdTVjNkQlRPRGEvTVpQTU0xTXc2czdKekJtT2NwOXd4ZStMeUNnd2FyVGJsb3hvRlZuVFJJelpTYkJvR3JPMnBtCmNHcytZMmM0Y01hQmxWMDRHQVl6NmNTaHBMcXJ1M0V3SEdmS2tUTU9yT2pLUVZxbW5Ea0lYTjJkTTROWEM3U0thVGZQT0xDeW93ZXEKVGJ0NkNMaTZzNGVxVGJwN3hvRlZIVDVFemFUTGg0QXJPMzFtY0d2Um5qYmxESXFBSzdpRElwMDRtSFVpbFhnVmwxQ2srZ2J6emppdwpzbHNvS01QQnloUHB3bUlGMTlBTWJpMWc3TFRMS0FLdTREU0sxTjR4eGw3RmNSUXB0Mk9NdllyektPaTdZNHk5aWdOcEJyY3E2THBqCmpMMktheW5TYzhjNHU3cDdLYWl6WTJ5OWdvc3BVbkRIMkhvVk45TU1YbFZRYnNjRndSVWNVSkZpTzhiV3F6aWhJdlYxakxOWGNVUkYKR3UyNEtMaUNNMm9HdjVacnN6Rm5WM2RUUlpwc3pOWXJ1YW9pZlRWbTY1WGNWVUdGamJtNnVzdHFtay9MMWRlWW82czdzNExxR2pOMApkWWRXMEZCalpxN3UxQW82YTh6SjFSMWIwL3hacnEvR25GemQ1ZVYxMVppUnE3dTlna29hTTNKbDExZFFVbU0rcnU3K211Yk9jZ1UxCjV1UHFqckdnbk1hTVhOMDVGblRRbUpHck84aUNWaHB6Y25VbjJUUi81bk55WGphRWE0KzZ6eGRkTWx6MVJ1eGYrK2ZsWk5Mb2lVaisKNjhvY25hcEdsdEtEUEtrb0tLK3hCTW1hNGhzeTlHQ09wcEFDQnVIN01pckZyTWdpblEvQ1YwRVNROG14NkpxMHZXRUJ3RFNsZ0E3YgpKdG4vVWlta0RRNHVHaExJcUZFcG0zOWFnc0lqcmRhUW9HSVN3d2diWG9FaFFKRlBBNmhXUXBlNENYZUVlWkptaWcxSmJEVjg1b0xZCndLa1VIT0JvTCtSVzhEM01YVHI1R1NCZnJVNlk4M1FHQkJXdVJORTFkTThtQVdlM3JLQkUwYTVIb2RSRUg1ZmtnOFkzblVBYWFWcFgKb3FheVJxWXhzWUxHNTVTS2JVNnA5YnpaSzdzbkI5MytzTFJQWnp5YlRxMjE2dXNaUHErV29hRkNrd1pNRWpUVTEyeEszc0lGeE5rbgpzd3I2SDM2bGQ0SHdkaEtGNHRsa3pwU2d3LzdDTmFnRUphbXEyUXdjdGhVYmpHdkxnblpTQzU4UlgyR1RPMGN0UlMxR0hlVzg2VG1sCm5NdWhsS0JEQS81Vm1NMEQ0RG4yRC84UUdReXZoOEwxbk5xMEdmbU82Qy8rSk8yYlM3YUMvYkdlRXgzMW5EcnZmNGtxNUpZZithSmsKZDVXZnZoQTJSL3hZcWpsS1lacE12b29nWmhhVWlaak1jemNmNDM0VmpBS0UzOVRURjFtWVlzUWJtOHQ2ak45MVluaGdxMk5UM2ZJcAovUEZERWczVTJBakcvNFl5b2FJZFNvdlBqV2ZVYnRRZE41anYrM0FGWmlDV3lUaWZNSnRLVmt5bUl5eG1GeXp5eVNHYWozRy9Fa2FUCnpzd1lhWk0ydm5mNkVkbkk2VjRveUc1VUpGMDhxNUpvQytYZktFUXlsNFdvMmQvb2VRRCtCTCtrTUZZVXp6ZU9hbUZTa2l6WHNCRlYKU2twU1o0VGN3TGx2YWtaL1p2UTZGSnBDdGFDUEV1OTlpa0s5WCtJVWpmZG8zVC9xZlJKRWl0dmR6YTZmd0EzWXJ2c1gzMThzZU9OcQoxUlNZUGp0TVN0bW8wRVpEMlg5c1RsSlNwTkx3VWZxUDlhaEVQYzBibVgxcHFxNHdDMm5kUDNSbHY5ckliUHhJc2M3MEtUeVVSWlhwCi9TeEVTYzlWOGFjajN5MzdCWXJpQTFqd1pReUhRMzJ3eDgwZDdVWDlRSVhYVmNRdXhvVHlYbzhNcUtjRllUbDNuOXhUVnZReFBKeUUKeVM3OWswcVdCZlNjbFhRZkhaUHNBMHlXak1TeGlDcFNQY1Nacy9MaG1zV3UrQjc0RXZoMkV1WFh0QThxTVRNU3o2T0VSeWg4c3QzdwpuVHVLaGpheFRCVCtqUzFQSFhhRnlUN2dqbnlZbDdaeS80d0Q3dEpDNWcwOTc2MnRtVVZudjdZMUYrdjBlMXV6aTg1NmNTdFNPMkttCm5jZmNqSGdjR0I4R0l4cWp3R3RtTlE4cEQzbVlhQk1qRVk5UjFKSDNWeTd3RGF1SkhWNFdsblZqNzJKaCtubDZoR05tWWRqaHAvSWQKTDhTOFh4WHorQnRaWVltZDcwMnN2WWwxNmFkdTNjL2R5WFVXcjBBM1hBZlJhbzJXY0QwYTdqa01GKy94REpreU14Z3U3TXVvY3dwTApkSjR1ZjQ0c1lONnZpbm1jNGUrbHpOSENxbU82YnpmQU9LK0ZuYjBTbjRiTEdYcm04MzA3bnVGLzNYdENNa0tvL09qUFhIWDBlL2hrCmZ6NExJMG12cFBwcVlteWtKOGY4Ykg2QzdTSlRwZ2FuRkdDSTJ1WmNjODlCd3h3dFZpaXV6N1NHWXFHUmFIeWMrWHpQcGpjeEF0OHQKQnJtUUpvSk9YRm1DRDdQaTYyRDhtUjZ0TnlZTGtDTVBRYU1wZWxnaUNLcmVNSWt4elM2KzMwdHZkS09keDAwVFkrM2RCenh0UUd2SQpETnFPOGtaU2FHdVhLMHhtRFc1VVpBckFPSTVzTXQreFZ1cVQvYWhQZHZWZ3J6NU5UejBtMkZyL3hobFNqOWxWanpuWnN1L1V3VWxECjB4RVluNWZUalRSVHRYL1lsK3B5KzNxeXg0bFpPaWtLenZESEEwZVorOHFFQnNKbmZmV0ZBeDZ5TE1adFJNMkhidG1YNzdpL01TbHYKbmFvR0RNNDB4Zk9BY3BlYWxDNFNKWXBpcVJ6a3lFTmtabTNqUjlQVjdMMHRYNHg2Zis0aE5JejJjbkRtaHpYNkhnM0hIQURqUEpwcQpoY1FmbGduTjFzZStNdzZCV1U2RmIzVGlhNHdPSCs4enhFQW44dHczTnh3WlZuU200MW5mZmVsNlFFUmZHbHFsQlVQcWFCZEdneWk5CktwNkZJYU12RFMyVkVpamxKNzlvN2txb1BvRTV0SHBRNGRrK0JZUnJZWkhsNlZZYloxOGNINC9KWTdkclhxY2d4cWZYWUwyUllhdEkKYzVjWXhvSmd1U3JjQzBIWVpLa21QMWxPUGdtMGhoV0NYTGtXMEtJbkRaUXdvVWpodkxRZUNRTzRvZGFlQndGKysvYTdRNElkeUlVSQo3VENndGVmNzRzdHdiejJTU1lwYTh3d3U5MTQrUGZyK3lXSHRpOXJkVm1mUTZwWW42Y21uTmJwU0FTTUY1ZUhIc1ZzVk1Cb2duM0pCCkxsMlRxWlRlT2trYUtlaGdxZkV3OHUwb1NiSXV3NmZvRTNLNXFBUjFWMHpVSlZFR3B6Q1k2RnBPYVZBVjBvYS9KWGgrZ0xKSjZ2aU0KVDVvRE9sRW9HMUZvTlA2VTRQclJRdHBMN0JhR3dqTXp4anFEb0M4aUo0dGFnWkVHTmZ5YlpXZzhNN1E3VFJKeU1FVWFTcG9DSDduUApaVVF1TEZ3WVVCMlZBbGxwaWdRblltNW90T3FZYWR3R1JzTnZtVWtwRHNvb2RKalZjZUVMbmJ0K1d4ak9BMGtaMmdRSVQ1UFM5TWs0CjZNRHVuZkJMU205aWozZm9ZS3FMQzNRN2dWbU8wNXFDM1N0REk1MUFucEFocVNoMHZzMlM1YmhzRGxxdloyUVd2bWJwQWxzWExuRmsKc1JJdWJWSU9lMnRCenZGQ3A0YjBMbkxpWVF3aUJUckQ1cXFFOVg0TG9hMXdFVW9sR09xY0ZETExNQ0YxQnZNWW94QndvdU1Mc0RDeApDcE1VQ0xDMkg5eHpNUGNkckMvWVJrbEd3VWNCNnhMVDFtTzRHS0tCNnRBTGxFcEt1dldTcFFtNkFWeVRXS2xBeHoyY1ptQm1rcElGClBjMEtQUFJubU9HUXVvUEpEclY5UHpkTGhNMXZXR1JBSHI1aGF5alNHeVBQSkFHQUl4YlBCSGU2TkhXbkxtVVYwZldzR1prYTdiWFYKWnphRWFiV0J4T2lycVJGQzRPcGpSTkdWazZOa3d4aFhIU2VvTlQxU0ZLdTIrbGpaWU5lSjBYTEpLVmNkcnhuY1FseTR1M3hQWTBDRApjK2NrRE05N0RBdVFBRUlON1FDWjhqR3ZlTUFRTlR3OUZOcGZja20xZFV6WmtFaE92V25TcEVDTkc1UlI1WURqS09mQnp1aE15aFI4Ckg4VjFaQzZiNHArdVcyem9oaUJIUDdJYlJqcWxiVWZyUkVZZzBBcFRlaVZDWU41TWVybElGclIxNEFOYm9JL2lsWEk4aVNsN0FOTVkKZlFSSGtqU2g0MVZTb09NZmtHRXdCbXhZV2ttVjJ5clN3SGFwOE9WcEc3Mk9FeW1qd0FDODFRQVRML3ArUUdrYmNNOWxpR3lBcGx2ZwplQmlhaXJCdlpUaFkwRzBwaFV1aGd0RStDdHJBeFVXdlp4VGFuaGxncWtsQmk4THUwaGd1ckFHUHpYVUNyQ1NER0V4VmpWT1VJdGNUCmlzQjNYSm5pM01IZUl6ck9oeDlTRzJ0OERuc3Q5TThFQ0xRTzJBci8rRGllZHh2S0dEcDZHbVZjdmhVWVdMcGtadDhBQjRnUXVhSGEKN2hZVExIK0Z2OEFjVURtdUlFbzVVdVM0VXVHb29QSFpYL2lScWtsWTlpUllwRlBXOEoyQnRDQ25BTXdscmRHM2x5clkrdUd2SUFFQwo2cDBRTXZWRHdkOVJFMGh5bUJRZWdyUGFHQnlTSkpYb2RFZ3hISWVDWnV4N1dERGNDblVRTkpuaDZjbytOYUFLVkZkTlErblVwclFGClFXUjFVNHBNZ1Vya3A3T3gvTnFHaTlrNjJHQkNsemFBOVlJZWhiT0JYSmdCUW9CaTdKTGgyZ0FnSENHaExNaFlZWWVDUm9RUm1ScTAKZytseFhCenBnbjVQR0NpQm1WQXIrQlFWdmNBM3NmM01WcVZBM1VhdEMwNW5hUUVEcXpCRVc5dUR2ZFJiL2N6NjhlcytKWlNvSFRRSApNK3huMTI0NkV3MGJZb2ltWG1kTFNJUjlqaTJSYkUxSVJIVHNsNWtOS2hObzFrM0l0WVlkS3hCaXp4VVlJb1lQU0tLYlBLRkllb1RrClpBUWpPenJPZXcvQ2JjWG1yQUZJUnRFRzBCYU12aXpjZDl4UFFCZUhobE9xZ1FDWDdNeDJqaUZIRWNUWVorc2NTRkNXNVFJUEJOYlkKVTJocGJkdnVxbVhhOE1adXJJYStBR0tOaDZCbEg1WldqZ1kxaG1FMlk0bnhHNEM1U0FraEEraVZHMUkzUFFoNmhBSWtvRUhEczBWagptK0x2MXBKbnlWQytkUWRDUzQ3N2FxOGVLYjZPQ3BLSk5obURCNUdVcUVTYWFFc3JMTWN6elYrQjNhNGJEdUM2Q1VzT3pqM0dmMDJwCjBkWWVmNGZXOFFhS3IyeG56dGcwT3JBWm9BcVprdHhPckNxQlVUaHdFc1ZBMWdiTVYyM0R1U3lFaGlpbnQzKzUzalRFWTBJaFpkeFoKbHN1ZG8vRE44a0pFTlFNRTFNczhzV2tTWFRWNm1naDBuUmptSzZKTnJHSHZiSUo4VmJpM0EvN2NZWU50TmNzb0t0Q0RRbWU1M2pTRQpNWEd1UDlxR1F2YzlDSmNWWUkzbXNxUWd4bmd4QnZSVG1Kd0VyK2R1ZFpJR3lrK3AyQVl5WnpmVytQaE9EVlpiWm1pL2NkOFZMU1U4ClVEaEF6aTA0QkRUN1NkR3dUYmp2WkhMSU1EYzZGeENvL0dLSXBzZkFnTkFHUTdnWERnVjNjb0lNdEw1QTVVeEhoRUhWSWsxOEZWU3EKWVhRWUlYL2xGdm03NnhKWGRsMTJ1RDFGNkhWQ3M2a0RwSUthNE1yOGxYSHpkOWMwVjNZZEcrOTNhNEZoQVVwSVVKZzBLRUVaR3FkZwpiOWNKMlN3em5jaHQzZzIvYTU3dU53ZjFVZk4wT2tCbGxhQVVjdDJqaS9MY2ZpU1hPR21sS1lXQm9rbEkyMWdBL0VCT0c1TFg5SlY4CmU3Ujc4RmVzcFhQN0ZjYlJGbVdrSG1Bc0t2Y1ZWcVlUM1ZMUGcxQ1Y2R3R1TjB4RUtXM01DWWFpK043UXQ2aXo5QjMzQWhsOWhxckMKZlNYdkQrT2tMN2FMZFN1NS9jNmlKNzY1YnMxeFgrdnFFUnpDZFZ3N0FvTWJQd2RsMVQwc2k5bis5V1JBQnowUmxpK3BLUk5ONjNMQwp0NzFDcS90WGFIWEdTM01UOFI5ak0rSjhiM3JHak0ybmVLNU56VVEvUjYxVE1KNjhZL05haDdFZG0yalRrMUdOVGIzM0QxRmdacWN6CldLWThzNVBwSVNaK1prdHF3aUZtMWhDdjBPcitGVnFkTWNRdVhoVWxzQ0NsdXpCMHJRKzBiMG1SeVVXQ2xpazNCdz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJYkRoQ1VrelBDUjZKOHhuckxyeVh6S1duSWFIR21XMGpuVzZEYTUxUFlNVnYrUlRHYVVpb3NTQ3lBWFJ6MnB2b0w5bys4RFU5dWZXUAo2bjFYL2pwNk1DaWJKMmY5MXVWd1lvY2lEOXNMUEsvbHhnZzZwT1Y0b2NhZTJDZzBCclFiUlRjMmM1bnF0UGJ5d2V4TkRlWlRJVktRCkVWTjdXNFlPWEtYdDVoYStITGt2ZGZkdCtvdjdQS1JwWTBLVEtDNXptTHEvN0dVWVpLUGN2aG0rSExrdmRmZHQrb3Y3UEp5cjBxRHIKRmhRWWN1SFdDano2SlpRWUprOXV3Z2Q3WTVPRnNyZWRmTnZ2VVRnTTlMZGUzd3NKSCtNZjlyNjl3Rjl5Kzh2ejdpWDgrK3owNTdJMQoyck8zNUdyN2c4dmg2OXJUWnEvNXFoelVuZzNhcUE4dC9LMW1menhvZHJzZGtPUVhyenN0Vi9JN29QNWVMYTFkakJxMUYvM0xYdnZlCmRObFBhL1c5dStNVlJMS3d4bmhoWGJzZ0ZGRGhVYmM1NHZJd0daNzFnSjJ2eHdvZnZHNE9XdjFtdDFhdlBTOTdyVTZYaXhPS3RpMDYKVnFFNSttUUluM3V2TGtzdTZ3WnBFajJod0Nya2hoM2UrN1RXc0t5R3NSbGo5QWNlc0tsZXc1REUzWWF2bUhrVDl5VDcveFQzRHp3MwpZeEJNN2NHVGsvMEJUTjV1U1JpT09xZXdlazRPanFHa09VR09uaEJoei9zWWFIVkRKTTBaYktBa25ocjRGZWNLL2MvK1B5Z015YUsrClhxbnBkS0psT0lpTnRadGNVN3VhMnNXUm9HYmhnRVlORmZTL0NvMSt5SUdadGFwd3VrMHVLNENCV0t1eGZwZmRxL0YvY1h6dTFWejQKWk5pQ2hQK1VvQko0TTlUTVdjaEVrVjNFam81dnkxKzRjRTJNZjAybnZ1Si9jWm1wRkZRU1dqdTQzalI4a1JnRUFkcGhXa2pMZzJRdQpEejdzaUJiMkYzN21lYmgzNzIrOS9pODkrZ0liNWQwSDNYZkRZZlBrOGZHbnRYdmZ3b2pCcG5QdkFleWtiMHN1Y3UrZ2YzNkJVLzlSCnB3dUVZaVVZOUU2dlpndFlxRlhlNzdraW40UHVldStIenJBRCt4MGluTVp3UEdxMjNxeUFZYjg1N0xUaTZvUCttN0o2ZlVrL2RKOE4KWEVYQXVPaXA3WHUybU9OQXJiSnQyL2tlN2gyV1o3WDd0YjNhM1FnUGJ1ZjNhOVJzN2Y1ZTdkN3o1bUEwZzdLRGZxOTkyUmxWSVdvQgpGaVIyQmU0dTVBWGlDcHg0eGxQbTArbUpXL3VuUUR1VS9ZRSttU1RQUWVYQ3hGVmE2NElTTnZ4VXUxamxKV2d4emxIZkcrU250eHA5ClB5d2Z2aTE3ejlydGlteStUZ2JoTnB2a2lzTFg0Y1JXME9QeE9oUDJhVDZqOGVZdWFPTndqcVpuKy9KQ0NWQlJWL0doZkNpdUxHRFEKZnJmc3RUOFVod2paeXFzcGtCZnF6eVZrNzk3RFg4dldKZmFCZnFDNlU4S3VoKzdDZFpaejc5K0hpWEcwMjUwVGU4L096b2JsNkZNYQpnRG4xWFlVbjNlNGxuV3I2ZzBiekF0VHNlM1lud3B6eWpuMTN4NURXam9DVnRZZG5aN0JSUWVudk9xT3JDTjY3enk1SFF6Z2ZSZDdlCnc4N3dvdHQ4Wjc5K2VvM0MyUzhiQzdka1Blblo3bFFTS3B1MlpqNzBKdlRCSisrMVNta3llS1JGbmtlYTJHMEk0YTJaUlZ0RVUrWGQKcEphYWRMMTNsSjNtdkRhYTgwcTIvQThpaGNTSFVBV3RSbkE0NkYvVWpsODMyLzFmRmlzUVdOQ1dhelE3c3pXSE1WeGVWMWpJVEUvSgpSYk16Y0tTaEJiZDJGMS9OK1hTT2hQZG5GUEYrVEIyMnV0Um9sbkNyN2ViZ2paUHpGdkM2UC9pTkFHaGZjN0QrUmJNMU5neVh3L0w1CjhkRis5M0l3VnZjMEFNZ2UzQm9PV3ZIMzAyNlB4ZzJPRU01Z1RFTml0YTNhdzE4dm1pQmQ5OHV6L3FDcy9WQU9oaTRxN3BZM216RUgKNVMySTVrS2E5UmJOTzJWL3ArenZsUDJiMlhtdks1eDFkd3JZblFMYzVaTHIyMnBtaW5seVI5VU8rb01lN1BnZlNzeFBJSzJvbXpVRQpCclk2WlFZRGVpNkg4NmI1N2tDek5RZWFxM0ppWjZ4ZVJiRGs2NjNEN2xiam1xeEdWSEtTTk1NZ092Z2dkVUxPSmY2QUZnYUY5MnNtCi82NloyOG51VlBFRGs0djJOU3BuanlGemJRMlB5dWJvTmZLNTJsNkdVWmc2NTczc3hjSzk3Q09TUXNWT0N1MmswRWJwQkdzZ1NYSzgKZUx1VEpFNlM3SGN2eTlxMzVicDc0RzlabEdBb2R5b1QrOGFPeUdSV3VHajdFTWVkYVludnlZVElrWW1BYmdIREtpaWcyK2pwWUc3eAova0xvTm5paUU1TmhtSDlEWmpJM05pKzdTQXFLNWNicjY4TG1mNlRJTzJSTldraGg1ckpHYkJOcmpESDRTZ2ZNRzYwemtidnBrZ0pMCk1sUUJOWnU1c2dJL3plVUpKcGZjRnBaa3VhRzUwVkNTbmg1eEJqKzZBWUVzUVhzZnpxSE1vTVZ2TGtzd3ljclc4Q1RQMGpRWEZJK2EKRkJuZkV3SVd1WUEwV0Y1UzY3bThVQitHRVIvY0dIWXJLeTQxT3FWd2VwM1NnNzU0d2NzSzZrWnFweFJtRkRBcUl6R05VYjl5TG1PdgpaNFpkcjJNdnVnRjJEUTZLclpnajJxUjVnZk1nVFZKTWp1MFdtOTJYTUJtQXdGdHNxQ1NtbU1ocDN1d3dHemc3cE41TmoyWFRRNms4Cnh3MUs0bzBBT3pjMDc5Z0dVeVBpMU5EV1JETm5hbVNiT0RXdWRXYnNEc3M3QTNvNGNCNjhIdlRobVBuWHpxdlhYZmovYUtQT25ldmkKbFY5OFJXMmhUY1ZXb3RKWWVLNWRaUnI1MVdOSzdqMStkdnJ6QzVnTlg5VGkyM08xWlhUY2l5OWFZUTVkMTQ4UWcvV2c5NnBidmlnQgpHOHljNy9yNGs0L3pPdXdBS2NUWmlmS0g1UVhNNWVHejNsaTRGemxaZStXUXpFR0ZCMU9Oc1lJRSthRTU2UGhFWjJORTNmdSsxMm4xCjIyWDE2SmtYMVdNUTU5NFNUNlFTQmEzZzFmYWVaSkpiWTRReDJ6eHZsckJ1Wm1YR1BGYjMxdmM4bDVyM2hqYTkyOUYxdFV6b3VKMFYKQlQwWHJXQ1dpWlFDYnREbWdQcU9zOHhNZnBnLzBUQXIxZXJUN0VZT25WYWF1R0E0dkVMNm9lSXZ4bEJXc3pNclhodm4zYzQ1Y2dCegpKbUtxYmc1Q1BSdFNmQ3duRy9pNU43cW91QzUyd24rKzhKZWJLUHpkTW5NUjBYTlhYbXBrYm5ZaXZwcUlsMlNBM3F3VDcvV2RhUlprClRKc1RUckIvQ210cFJqNm9KRm1ZRVlwU0pHMVEyS1c4cG5qNGozMld1TGZrdG1lUzZCdU4vdDZBTVU3ejZ4L2lqODAyTW40RGEzUE0KSXJ2SW50dGF6dXRqckZ6UCs0alo4dnVJTjNIOWsyOHE2cW1iaXRsNzNGVFVremNWeGNSTlJiSFJOeFZ2VFF4L0ErSjJsM3RwSjRJcgo1MTdDQ1RNejh4Sm1YTUkzTStuZnBKYnFOR3VrR0JZa2lpSTFqVlFrK2lOSXZBUlN0S0JRcUtTUU5rU2pLQXkrdTBCME4zSmpNQlA2CjdlVDUrTmhrMjdOTDdQcmpidjhYVE5TNVdkNjNuWXpicVpuT3h1OW44WHRybVRHcWFrcm03YXFRNzZNZnlwMCtlQldaK1UrQU5pKzcKbzU4aWFYbmNPYi9vZW1rNUo3SEorenQyWnhFbzNOUjREdUo0RlBXYThvbys3TFZEVnRHbHFVbWZON3ZsYUZSUzM1K2ZWdTd0M1gvRworYlYvK3BTb2Z2bmIzaVI4NzNscm1pMTNmM3pkR1pYMnQrb0xCd1lUOWc3R09ETkgyTjBYai9kckw4cTJRNTBZZXNHVlNoc3RWTzdWCk15NzdqN0tMeTk0V056SXo1REFJdGl3dTkzaFFsajFYVEl1c3NJbnRHMExxMUlhNmU5S3c5TUc3SmhmTzg5UlFPR0ZtQ21HaWhMcSsKTUY2L2NJV2xLZXdWUUh6WjBtWHpGMk9GbnpaZmxiMVIwNVVIcFFvb1JPcXl2TWhJcTVLWnBMc0lpY21VdTVSZ2NncUZGWHc3UWRqNApWMEw1bFNqUzJ1T3YwcUsyLzVYU3pMWUVxaHFiZDE1SlJmaFRTYzhGSjBsU1VBTE5BcEZSNG9ZRVgrQWpoekpGeVZtMEVoajArQ3VaCkE5clUrQ0hMb0doS0kydnl6TjZIVEJKaHg1cWpuVlBmelRGOEFIcjhWWkZFK0xBdThKYWl4aE44bHhtUTVOcG9kNmx5S3RwWEVOMGUKSC9aUHdMK0FNQWtJcFZBVW9vOVBEdUk0WkNLMVVlcUFXNlgwbzRGcFdSaUtFQlFwTU4waDFOaEI3UEQrVjdwZ2hFcUwxUFVuRlhtdQpIQ1lYN1Y2aytCK2FSc1JNeGlTUmRTbnhMdVdSeGljSmM4dXdsS0pYWVdLbk5yQTU1OFNsR1haeENwMmdrWUJoak5CcHZLSWg3RjJOCjFFNmNJa2x6TzZtMXU0ZWFNZWVBV1lrdWVNS29CQWt0c0h1RzhXWEtDR3NlQjBRWlRRZDhTUU1qS0J2U3h0SGlBM0J1cGtqTFFZdFAKMDBEa0F0QmxpaGVOU2ZGVk1KeXFHcTlJVUU5VElOamVLdEdaMURSN3BNMFBZaEZSdHhUeTN6RC9nUTVhSG1tcThCVTVaQnFsd1lXRgpsaGh0eHhYRElCUnlRTnE4cnhHeUJIbW1lVlZrc05TMDdRRE0zU3kzekJjOGhwNDZPNUV0bWxSNTRvVHdpSEtsNko1TWtlVFVLNlV6ClRjRVpPQUV6MnkxL3FjaE1kY3ZnWWhVNlk2bTFXZ0lWd0tMc1ZNVmVTY21yS2M5MFNyelIwaWp2Nm9qQ1F2Z2FRdWlJU0xFamVjN2MKTG1DeDJOV3RGVFdmcEtwUU5neWZIaXJ4bWJZVGZNbE42Q3dNcHV1WkFieUs2Rk8yWXlTdVlieGdmZEdhVTFvU1JzRTNSUktlOWFuRgo2R1k5VFhvVUYraXU1RW1xSlhVQ3hJUndpNm13VTFWS2l2bFZRVHBpN0l5OWdtSm5mWUtMRWdZRWU4WURxUXF0cVE5QWVVRkJOYmlhCkVrdXd2UU1WaVIrV2ErN2FENittak1XdlVMeWFRUHdnT2lJcWt3bE5BNEZ2cU52NDlNSWtGTGhFRDZZblBEWHc3ZlBIWHlIRmhSY2EKQW1hYVphQXFwSDNmSnM4a3pZZlVyZnZBUHRzL0ZocVMrVmNrWWNmTjZPR2NCRjlXNWFVUTlnRXJYakhDQ0tkUHZBMmtOQTVTOEM0bgpjMXg3c0hxVkpQbU43OXJhWFRyajZXRndwMEQrZWZLQW16aHBjNXI3bmxNZ2xSVXRPc0NaMnRrTGROQzhNTG05YVc4c2xBU0d3a25qCmVhOXg2eE9wb3RXWmVkR1kyb0VERHRIR0RkeTJLd3prV0VGeTIyOVZMTWpUZUt2Q1o2dGhxOEloelQzU1RKTWlBc2lVSUtUQS9aeHcKd1Fhc0NKbVhhVzVBcE9ZOEFJQTB4NjdTaWpYYXM5RmtWcnJsOUZJcTNYNnhHbFFpQkYwbzhoTGNYMnBRTWhvZEZPTEFBRzFvbWJEUQpUSVV1eUVLakNwRmJ3WjNDN2tYVHA4Z0xDaWZqWE5uS2loWHNQYUR4VzRUQlpTeG95OGtsb3pVeXRmTS9Vd21oelZVQ24ybUhNSUlHCm0zZWVsUGRhdDNmRU93OXRQRjc0cGZaeFpMeGdLQkppQXJBVEh4Q25TM2ZFQkRmbXVPMjRPU1hHaHd1bktPM2JYck9BTWJJM3NnQzMKWlMxTWZhdFhBVlB3eFdkY21idzd1Z1VKU3ltd3RrQU9XTVl5WDFXV1dXR1l3VzVrN0NMTUJDMUxBMnViMkNpNXI0S1hWZUtDOFFncgo4VFVscVdzWGszWE1ramI5ZWMycXg1R3VQY3NoTzE0NDREaCs4MjVwVlN3VGFqd2J0RjUzMmtzcnVXS3VIcXUvKzYrcDBjdnpjejRlCkxtclhGcHVKNG5HLzJ5NTd0UmNVVzdVRVQxd1drYzAzMmtZSTBEaHJDMUtWUlRuMkp5cTVvbllYdS90NDBIeEgyYUNldjFycDBHUDMKV3BTZ2ZoK1QyaTVtZkMrVGtHallmbWk5dzduQkJuZWlnaVZtZkhCaUdlZVJ4Tm5wdDM5VEtDdWdVbnRmRjlZekxYa041eGVhaU9ILwpUbTlESlVLalJOSXMySTFPTTlwVU5DajZ0S0hDSGtwQnBpQ1liTWRTN3Mva0I0czBvN1dJU25ubVJTY0lYMUltdEVCaGdCK1NMQ05rCkVyWmIyczJVLzMrOFcrTy9LTmhZQXNHbXIwaVFvM0FwZFB3aHliVGI5TGxia3g4Y1lra1NrODQxOEMrdmJBbVNsOGhVV1c3Rklld2UKMm02NFJVNXFqdkgvSDl0OGREcStuOEd4alFTcmhIT1hzUW9QakxVOU4yVGNwY2tQRG1ObWQwalNKVEtXT3JDOUdPcWJRQTBzb3c4NgpkY2ZYM1AvZnpZdEUwYmFQZ2h2KzVWTk1yblJoSDAwUUtjMHpVSjR6NDg0MTNKZkpENndBSkhTWXdma3J3MEhyU3VsdzZOaEdlb25DCmdZVi9lVzM5V0o3V0R2cmQvZ0RPNmYzTEM3L0szR1FHQ2EzNDZoc2ZaaUlOdTRnVk1wTjZGVnQ2UlE4a2ZwS3hHWUhXQmVrNWJxUE8KV0EyUUZpTlBGYXRDMFo2ZGVSMEt5RXhwL3dBZW1kUVpHK1lkVXJXZU9xVGFQdGlSTEhCRXBVTWg4REViMGhUakE0aEZJWkdjTkhRQwpGbU5tdlRHcHpQQm1tOVVSN1ROMGZNMXRyQStTNW1uR1MwbkNTdGMwcTJTR3pNTG1UV2FjRXNmWDVTSkYwL0VrTDhMOEVoYlo4MzF2Cm8ySlQxQ3J2NWh4MWhxUFlQRGNlTXpEdDdJalRYY3k0aVJROHYvRUxQRk4yTldyMUtxLytpQ1IrUWhEUi9CZjA2QT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJY2pUcTk5d3p0OU1QMzA2OU0zajNlZi9pKzR2eFdrZzFVT3kvUDIvMnl1N0pRYmMvTEczQlo2NWNjMVErNnBUZE5oZDgxT21ldzU4WAp4MGp5Y2RtRTdSb1pNeWpiblJHK1JJOFBhMDI4VEgvM3I4QTBlb0N1WFh2VWZOc2ZrREh2THBINjZlUmJlSmJHK2J4eTQza0lwSjJYCnZSSDByNGtQQi9MMzJoZjBMYklSMjBlSnJWVjd2MXVXN2FQeWJQUkRFNjFvdGNrWC9wTGFXUmRmZ2VyQkhMZ1lsTU55OExhc0llRVgKMklmaDRncXRidWVpMXVxamtmZlgyZ0E2MmUrNUdsbjAzR0JjWTlBY3dteXJ2eTFiSTVCRnA4MXVzOWR5dmJyN3o2ZkEwY3Z6Mm90eQoyTzllT3FPcHo2OExpRVROMDN4Y2ppNHZLSnpjNG4yT1hSL1YwUERzdWh5aVNJQ0R0YWZsOEhYdEJUWGUrWTBNcjFFenRrYWFqTldBClpYRnhPVnBTSndsVVRuWHVxTmw3ZGRsOFZkWmdMbDVlMlBMZTJRRExEWWgvVVY1Y2RvY3h0bWpRWHVCeWkwWnQvTmZ2K2hmUmIvZGUKUGozNnR0OHVaODZGKzdXN3Y1NTNlL0J6SGRnMTZKekNnbmZEZE8vQkFKUXVXK3VhVVh3QS9GRXAwSmk3N1VIcEdNY3VHLzRWL3huNQpkeWp2L3JFM1BIbmJIQXp2UjlNcEx2bzJNSkxnd3pubGVuNTJ1WjRNeDc1dEtIZDYvVjVaZ1RIZGZ1dE4yYTdDR1M3NWdTYm1WZWs2CjdmVGEwRkZSZ1RhWUhMQm1yZkJZVGw5YytnTU4vM3R5UWl6a1JDWDZPL2pBYTVXSnYzUlVOMm1oZi9HMjhsTEhvcmM4bzVFOFVHOUcKL2ZQYmxXVFhOdysvR0RaUm1VQVZCNVpZMWVsNDdldmlHQjhqV0p1dWJNTXFIWjc5c3NhNzhTMHZneUcrNGIzaG8xeUhjN014ckxMTwpvL1NYVHB0dUN5OGRYMWZ3ZGdWd05acGVseTVqeDFLaXVPVHRVaVhSNDdHTXFIZFY2SGwzMjZUa3VwRExLUG0xa2ppNWJVcjhpWHNlCkdhZjlFZWdCZUxCL051aTg2dlNxVURWZFp3MzJmQkoyeC8zTFFhdmN4MERZVzkvMFlXdTY3UzZjbDZObUczU2c5KzFIOFo3OStIM2IKbVRTcXpLNm84T2V6dHFLeHVYUmNkdi9hSEIzMlcwZjlWck9MWjZraC9UNXIzdm15UUVzNWVISVlsNHgvL2c3MUkyelY5VjZvUnRKSQpvcTYvZWZEazBXVzN5M1lhRjdRSnY5b0t5bHRubnNNdkZ5V0ZlajhlZE5vbnVHUWVOVnVsejNTQVEreGVjWHZlNy9SR3lNMnBXc2RBCldiRGQwRUJNRnZtKzEzRzkxWGt5cjNVeUJEMzhkZVJadTZBczlqUXVxblNPd24xbTQ0KzYvZjdBaHUxUldkemRza1ZsOS8zTVdGcjAKQlJzQUZwVWt3cUlPNkxsa0VjNW5GODFXWi9SdU1VY0paK2lvTkJpdk5yc284aXB1UFM5eXNhQm9RS3JtOC8rSFR2a0x6TFhEem5BVQpMSnRHNjNRQllzK3JISk1UVVVES3NwazFJbk1rRlZqR09oTDNFNXhieEdUMzlCck44YmtMNHFEc2RnOUFXcnVDNlZ5Y1dQQzQ4eHVQCnh2eHUvclUvNlB6VzcvMDFVb21RYlhyUk1Idkd5VG1sdnZPeWJuN0RoR21TUWQ3YWJTTGJkYk0zNnRTYTNVNXpPRjB1dG5IM0wwZmQKVHErc2pjcGZlUlY2TTNIQk5tc1VTSCsvQkd5amQ3V2o4bTNaSGQ4NUFLVThPYjdvajhocDk3VGZYbUs2NXphSGRLdGl1RXlnRWRFVApFaTJwMVRXYndPZFBQYzRrUTVQbGgyYXZNM3dOcEVRemtWeCtlU3JNVWt6WWgrZmRacS9FU1JJTHJZVnJtMnBRY0h3SG1ZZExvWXlXClQxWXNYejRCejNmOWk3anJWZGRmUUxCUEtsV013MlNBQXhGVndUR0xnVm1ocXpFUVYvWnEvTHZzbGdPcitqM3B0Y3Rmajh0V3Y5ZGUKcmM2anptQzRwQm1hR3ZPSGFWNDFUODc3RGE1SGM4V3g5ZlduaGpiTFJMV2h0ZTYyNlpGbHlnOEcvUXYwVnRyTFpOT21pUW5OS1JjMApwYktwZHFPeEdXL0FKVlI2NnE1UGd5NzBZREE2N1RjSDdacVlUcjhVT2MyOHZIand3b2tRa0FvcUZncXcvci9ydjdDTld1TDd3NDdmCmpDVDNvM29WTVNIWW5neTVyODVqL2UyMHRzc2xZcFZ4Z21tcFA2ZGZOTnZ0Q1lGOVRvOXFqSUdHSUdzblFDQ2MyWnZKRzB6N290TVkKRittdGZuZmdWZEVIVDJvUExrZDk3elFzSnpDU201RFY1TnFiWHIvMUJnUjM3WlVOeVZoUXREUHNnOWd0YTZkNFdjY2x5Um9yWE5RdQptaGV3RHd3NzU1ZmRabkJReW1qbkdRMmF2ZUZGRTA0SHJYZlFacWNOcGJtTFdpcVpSMldiUEY5YUZEUWlvZVhJZXp5bldFVlVyeUtkCmExblpBVy94c1RJd282U0lPcmkwYU5TQnBXVjlCNFJKODlTWDVEUEVRYlAzdGprTUdvNFlHNy9uN0ZESCtJVGF3M1puMUxTQ2JVSVQKSTQrdWxUZVJVL2MrL3V3dmVrMU04Y2w3WUJNZWJ5RnJNQmtmY3g0YXZLcG1YZUNMbk42MjBoSHFFYkRDcUJKMWZMTFNlRXVpOXZENQo4Y3BOMlZyTDIxclZ3ODZ6OC9pSHg0LzZ2VkhRQU5Qd0F3eExxelBtZG5jUDZ2N3dHUHZ3ckdkekdFNys5ckk1dVVpcHd2bEYxKzlTCkU2M2o0VFppVzFUdCthdXpjZm9BZHZqZDRYUkJsQ2QvS3djVHl4bCtlTmdER2U1RlFkVHd3L1BUc20wbDBMaW9ndDhvTk9lN2FTdlQKMUFHak4wWHJWSkhYL1YvKzJtbFBFSDRFN2JKMGZ1TElXUjdZUWZOdVFUREh1RWFPVWhaVjhRZW9pc2NjOEdVSTN3RUdweHk0NEpRWApjWERLVk5GblRucytqclhuWkY2cDc3eGVIMGU1VUJITDlucy8yUENXL1RpOFJVd1VmVFlSWTFNbC9BV1hUR1UyWWVFbGZMSVlxekhLCmxsM0txZkZpczFsbHkxVGpsY00zUHlDcHFQWDZJV0NwMXVsUlFCSnFHS3haTFJHYnJxMTd3Zmg1NytmK2FZUFFOYnRkM2hHR2swYXoKcVFvZ2lXQ0hmVFZCd3p5OGkwc04zM1F1VG9FamI4YWx4R1N4QVp3Y0I4TVNxUmtzTGduN1dSQlRkNmVWd01ueVRIWkUwWDIvcXlHagp2K21mUHVtZDlXdkI0TGFFMGZONmR0b1puVGN4OUd4Uzd0dTlJaTUrOGVyOFRlTVVOOHYrMlZuRG1yUGRQajYzK0Rrb3djUEo0clBZClBvNzhjbGpDYmtNYnMxK2dUaUd0L1ZpZTN2c0JSRi8vM3RNKzdPZmxUNHZaaWF3dmlUTmptdlpVQjRhamJxTnRtNkJKd2tPNlpMU3cKbWlzZjdMRlY2bHkweitIbmJxOXlweTdhbFpIYk1BVmZZOWJZWDF3TVhMRUZZd0psWE90dW5JV2NPZEpRTG5JUlpzWGNVckhQVGVUegpTblhPWVRFM3VuQ09xMVp5MU9jQXYwSXRMamtJeldkNmJpOXQyWGpHM29YSkJ4SzFYVHQ5VnpzY2RON1NZMzRMQmdHeDlPS2RZYnFoCjFnVFg1aGVLbWJZQVZUK3lIUzVBTmxGc2F0Q3BGQjFXRm91MGRqbnN2T3JOT096TUZMbW56cm0wQ0NNVjdKOTFKczMyczJYNDBFcXUKeWlKMWJEaW1xZTRPR3VmZXpqZXZSS3Zmd3lSdGVGcGRRQXVXOUZ2aXFiMzBaTSt4TTBzUDJvMytBSlgzNXJUZVBWbndESlFGenNKRwo4YXd6UzEyNEUvNml1VUN0dm1vc25IeXVqQXU5RXNuY1VrUDB0VEN1cGVYZUxxWngyTHJvdHQ3TmwwcTJUS3MzYVFpYkxET0NzMTUwClZwOURINHhUdDNteG5BK3UzSUsrMHc1Vzl0QU50a2p1WXFraEoveFlPbk9wdUpYVFlXRlVxUU5UZm9TWllseFA4R21sZVhzMGlIaFUKRjhkbDBZSU5la21aMXFCL3NhUUlLbXNkVUYrV0ZCdEVtVHFXTllvR2c5UG1ZTGhnSE1kVmpMQzlWQ2c4aWtoYVZqYmFZeXJvUmFFYgpGUXI3YmxRb0czVmoxaW82NjQwYTdlNWlrV2ZMWEF6TytyMUY4ZzZMRFM5UGVUMm1zOFpvQ0lSNk44dk1VUnlDS29ySzY4SWl2ZkpWCk0xaHQ1eFRDRXdnb3RNUEZzd2JMd1hiVFc0eXJLeEJiMDN2YVpvLy9zREY4M1lSRFFMbUFTMWlvSEtIUGlIUDRSeGJmaVlManBiSloKY3Y3WGk4YlkvUTNxMnF4U2cwbmRudXhIczBxK21uRUttRlhPN1lMQndUWnJmb1Z5MWltMnVHUzNzMEJrUUFGMC9qWEhEdEp6Q3ZZdgpXZ3VrQ2hVWUxoaHhLdEMrWEdnVFdDQjVvZnBpTlFOT2RNUGxld1NWT3J2c3RSYk1FbHZHV1NONHBpelpHS2hPczlkalcvdnMwelNWClduWTBhSjFINnRMZDd4dkhqWnE5NUFpbjNIYnRYM2VQZjN6Mi9GK2YxdDdLSlllemM5RG1JcFZ2bGc0SlpmQjQ1ZjA0YzdyRDE2ZGEKNSs4V0hOdWpnbjM3SnZmMDJmb0JGNDlPMTdFdFJnZEw2UFBPcjJYM2VUbkFwR1JUMXBqajV0dnlLWnlkT2hmZDhzRzRIZU1LaC9WTwo3MDEzT0lKRjVmMyszT3NudlRjMXZNVTIzbDF2Vko4dzIxN2d4VHMzYmphbjJ2UERSODZhaFZwRC8ySmtUVkRqSnNKditxZTFaL2FuCnlPYVZaZU5HdUxoVU1NdmYyKzh3cFErT0Q1NDh5ZlZoaVRNQ2YxUi9lZmJIZjM3MjVZOWZmWEsvK2ZMemI5SS9QcXZ2ZnoxNGZQNzYKaTFlOTMzM3o2SGVmMy8za29OTnNEUDlndnYvclEvUDdMNzcrL3ZHZm42cS9mSEgwcjArZWZqMjRiR1dQSHNxbitSMmgxTytUWkhqNAo4K0dyejVNL2ZIMy8zNDAvZmYzbDV4ZkRyNGQvay9mMjdueDkvK2gzQXk3MHpXai8xVi8vZnZUMWw2bzhQdWg4OWVmV1lhUHh5YXVwCnBvN2EvNEQyc3NOSGQ3N0kvdnZ4NlBEbm4vYlZmOWMvZjNEZVB4ckM0STVlZi9abjgvdkxSNGZxRHovdS85ejk1TWU5TzRkbnlUZW4KTTVIOUlTdk9zaC8rL3M5L1BmanVvUEhEL0ViamNsLzg5UFdYYng3OTlQVVh3OGI1WjRlZjM3bDhkUGR4KzJ6dkRqSHIwZitjUExzOApQUHZweDJ5LyszWDM1UmRuKzY5SEI2K3oveFpqN1BpZlB4NjJ4TkYvdnY3eUw1LzhhUEZBbDRjSC8zNzE3ejU4K3VOL0RwKzBuL3h1CnY1Ny8vSWNIeC9YZjkyd2ZYamJibDN0M2lwL3ZmdFo2Mk5KL3YzdndXcDNjLy9MQm5mU1BuKzEvKy9uL2ZQYjF3U2ZmUHpvb0wvLzAKNXgrKytmM3IrNjFXOHcxKzZuejI4T3pvdFcxWkpQZWEyYUR6aC8vNW92UHZiOXI3M1R0LythUSsrT3hmbHcrT2p2LzRIK3ovcDEvZgovK1oxdW5mSDNQL2hwNjhmOUZxZm5ILzIxZFA3OTdMemYzM1Z5Yko3dzdQMHdhRDFSSHoyNWd2aE1iWU92eG4rQUd6TFBpbXpIOU9rCi9VWG40RjRUeGxjOC9lcHUvZk55djVzOVA3Y1UvT1BvenRjSFQ3NzgvWThQUHkvMEVNYmx5VC9ONy8rY0hmVC8vZG1YUDdULytZVTgKL2YxUGhQYlB2VHRBMEovTm4zNlBRL0pQODZQNWV3LzU5T2Y5TjUrYXVwdWFQN1NQRXZIVDc1OGUzbXQrK2NkSHYvdnN2d2ZZaXNFZgovazFZcU1qZW5lVDAvejVSOVBtelB6LzYwbjM2OHNlSGY3UEZEejUvK0Q4V21meUhmQUpUOTJYeTJaLy8vUEJ6ZWZpWFYxODVQRDkrCjllWDk5cy9mL3B0RzBuY1k4RDNiMTY0VktMVC9qZS9BVDZFRDR1NVhMN0JRcVFpbWY3ZC9lRUtzUGl5SGYxSG12ODNQclFmZkhmNzgKMmVIWnZiLzk1Mkd6K2NrZjlzM3A5Mzh2bnQ5NStmMkRad2Y3encvUGpqdi8rZm8vUDMzeGF1L08vMi92eTdmVFozSUZuNEIzQ1BzTwp0dG1Yc0dNZ1FCSUlFQ0FKTzRFRXdrNzM5UHh4bjMycXlydnhDbngzenAwejV6djlhNEtOVktXU1ZKSktLdVdDdmRhUUltWS9QT3NYCmg3aTdrd3Qyc3k5azRmZDltUC81RGZzVDMzL1dCWm4vZHVHQWdLbFJKTktjYlRsODBiZjlYelg3VW5OVnlZSnpWcVZvd3hDYTRuMncKK3FlZHIrRk9kOFo3YWtLcGNIU2NTYlJPcG16cjZYUytuSnFJc2p3Nk1BdlJQUmdaVUc5QWNsN3lKNE8xMko5WkY4UW9tUzVnNUdjbQpnRmdnT1VxU0JjQWRMbzg3dDQwTnhHc2xwQ3gvWVptRm9EZ252VHllRVpYQVhQaDBlcXFWc3NNbkhIRk0wcjFMakVqSGQ5V1h4Wkt0ClB1RzBESkxVUUlUa0NKK2JzVG5wc08yYytXVzR1U3E2YXo2UzQxUWdBTDB0MURCdnhSbmswQXdRcWo4Ym1KclptVjhzaThkSVl0cHUKWmlOOTRsMjhCcS9sZFVjQTIxUXFlajJUbU5TU3hGYnphdDVnemJicU16ZlFNS2xZSVZmcnJhUkdpOTdrdlZmcVJiNkIwQlFKakNnRgo2NWVjYzNvbG5hL3JCRmtJOVFsM3FqVHlHcXpjdk1Dc3B0OWtzUkNLNU1MZWx3NVNPRDY4M1BFZ3BBWC9hT2ZLL1o1bWY3bjFwclBOCnRwWmRDd0JSZGJNQWRrWFA5cGtnYmQ3SVI3YjV2YlNEbjMzWmNtRjNiVWxwUzJmaDIxNE9nOUZ1bDVRV0xIYTZaUT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJUm9VREJOV3ZWb0RNTEI2N1VNR1BDcFBnOGozYnRrNlB3dmRzMldicll4MzlYWHVUU0tOeEd3SEF3ajNmUG1ISjNNcXgreUdUSmR6QgowKzM5cG12TXB3bllTM2pLR3NjbTU2TGpjZi9PN1RTaXA0Q1RIYWZJQWd4di9uYnhQRHB5SnlySGI2Q3hwK1pRRGordlA3SnZvNmM4Ci9UU1dIV1dTNWJ3UHZETHFBQzFRcytYdy9ubVlmVHUzZ3R4VDlETFFZK0NMdjh4aEdyZFJxOFdYVDM4dm1YN0pieUxONzRVRG53emEKMllETmFDbENuczdqcFh3dEF6K2xzS2NTL29qTkovRTA3bkhrMCt4M0tlNFhCaXYzSnZvVy9wbURxakNQZm9qK0RML1ZpQVo4K2tqOQpta0dRaDkvbEtHRFpwSmVNaEx5RkpqSHM3NHJ3bFNSNkdmNVpNRmpaNGVYZ1M4OGNIQW9MeENjRWtXRUhuMkova1VDdndORzhvaUd4CjA4MmlnUmlzYUpyVWhPR2dJcS9sZWd0K2wwREFPQ3dJaEpoRXpKREZTTkdmTEx3M0dndjdhL1NiQkh5T3BwSG1TSWxlUjhPanFMaFoKSkJvc0NkNFFQVmtzU2RIU2dkVVhMcFRFMGw2eEVLSmxvTEZRdjRIRTRtQ2phU0E2Q2NueGlHYkYvWW1Bc1poTEVtUElTTTRscGI0awoxSkRSSnhZaWhWVDRKOFVXUVBQTE1ZWXNXOENYYSt5c09GYVJKQlo2QURqNWtsaVAxRnlSNUREa2VPVG1ERjkra1NLcVNGSlpBajVTCkZCTk5FOUVrTGdTUkZvNG16MkttZUZxRUZMM01TUjNnWkc2MUJLdWE0cmdXdlE0cGtaVVFsUVE3d2xkV2VWQk1paDdRc28vQTZpZTEKTXI4Z2tpTXFJc2cwajBrcFFEUTFWalQxc1NHMUpLd01VZG9TamJFWmp1TE9GL1NKSWorY0JobzgvS2N2TlAxYzJWYW51aUV6OW5rTApXUHJmQkgvRGlHVTNZSzljMU1oUnZSY25qUzRmMk1YZ3ZLTE1idSsxQU11bHNNcThtOXVML005Z21DbE9WM3NidFpYeHpJblE2VlhlCm5lR2JIZTUzNU00QVgwem8wS0NCRmhaZVo1b3kvVjRyems5dWp4TjRXNWc1MDdFN1l2bmx1ZGt2Vkt2N0hIOUN1ZUU4Mjl3VVhqSnYKZzhNRVdMRHJ6Qjh1eE9KR3ZrUDhHVnNQazk0UnVSVS85WnVjSDhBSjdleUtVMC9Mbnd0N0NDL1BiOFJ6azBWaDdpcVdPZHNLV2twUAo1eGhIR05vSys0eSs4RnczdmhFQlhGUG8yOGJXNVBhYk1zOHVBSFNENEdmZXJiL2UvTXpDY1FGTENWanJvZjR0em9rRzF3UmFTamM2Ckp4cGNFOXJxWXpuVUM2ZEd1Y3dDMzNldzRqeVU2TnAzS05OcjBMYXVhUHVvKzVSRFppeEhKdzdVLzF1ZUJYS2tHWCtxL0ZtbzVzSjIKZ01BNXlUVXlINjVjdy9wMVF1WXdWQlVSQ1RyeGZSSEU5cWx3MVZlby9FYkdITm1BWndFSlI1TS91eWxIT3V0YUsvdlNyZ0oyQjlKSgpNU2MzRURtbmdxSm5LaHgyc1FKUXlxM0RpdzlrL1J1c25QMS9PZEQ1UzZHMHNzNkJlRFdTTUtneEJaODhwOUxPTkluRjNJbmdzeEJzClRjWkpTZG9wRFZQS3ZxMHpidkRyeFI2Zk50TXZSS1p0ak5HZWFzczFCOFJhQlZXY2ZxSy9NdWVYbjhZNEdQQnd5S3orbHc5TTF3ZGsKUDdlcXU0RWo4dm9kWkFVa0RoMkRRVzVGUEJxNUJ5eXpZL0haM3hxRHkvUWs4SkhET1RKWi9QU3hVQ0xrNE10bEpvdWJNNUJLd2hyNwppMUtjNWJINFA2S1JhZTBwMTNqTmdOMmk5L2RNRC9UY3MyWWJ6MjhkNkdzekQ5NS9BelNOdHpZc3NqcFBYckhhenJjdUhWL21CeEZtCldpcEZ1TytOMldCbFdaTE1IQTdMZGpCZWYwOGpCQWtzblJoQjd5NlBmY2Z5RlI3c2wxMnVuQXVlY3hqdWFSK05nalg0R0dSamlhcVgKZmRBSzduMC9XZVNMRlQyWmcrbXBUTHFjbmlCUVYrL0F2L0hNTm1CM2FwTGswR2xjd3BrR01zbkpZSk41YjdodDhhWDc3UWRzZnJGZgp4T2M4N1h3UndDaDdDMDhIMTRqaXNVdU9NUlpUMUp1cy9BcUFhWk5lSXB5MW9SMFF4bUhVNURmQUJSMlZwWmMzRUNpOXdCWGNmdWQvCmpqOWhHRlh3ZmpTeHArSStMNEtvd2N2bmdXMFl3YzdOU0c4QW1DL1ZOWG9samtlTndPWW5uYjNYVTdiYXcyZlVNajVXbjJlRjJWL00Kd3pDZnd3VDg5RFJXeUpmTjFHYmszUnBUUGlvUVFFWFAzaDlEOGZuSU5xZnBWSDcxNTlhK0pnNkF2bTJRMldHd1VoaWYyOUd2NG5CZwovUUNEWHhneis5ekF3ZTVZUzVidmdOWU5XNnlBRXJFSzNITVd4WW0vL3lPMFlaREcva0MrTzcxZjF4YkFVb3E4MTNkdndyMmJlak9TCkRCVG54Y0hMWkFoc2t3UlVPTi9PNHRTTmZXYURqbGdEcUwvM0tHVUwwT2dENWt3eTNiWVZLbjgvSDdsUXArdkxObHl2aTJ5ejVRYWUKUmNsYStvcmtWdmpzd0RkVnFBM2wwVitvZk5SYzBOaG9vbGVBZGs2K1NRMCsyckpaM3NpaDJkWXJmQU42NWRaUmk2Znc1SEE2a0hIRAp5ajZ5SkJiV0ZlQ0ptQ254YlhsYlNpQU5nazIwZVN5NlhlRnYvdllHMTJvM3pBMHlIY3ZweEdLdWdTVmVHTU9uR3RrRW5CeHErYnlDClIzWWpWdmtvSldrUTdQNktJclQxMysvditJKzlVUWNtblNkTEZucGxsOVRVQk8rRjNBWnI0bXY3OGFuMFVzY1ZlWjRtWGtTdkpPWUQKNXdyRjBlTFBpOFJQMGJQdDQwQXpodkRzVzRqOEt2MmRYSGI0M2krallTNjR5SHdFZTBsOVNSa3k2WEMzbEgvT2Q5SWkzcUJQTHc3RwpEMkEyNzV0Z2tUTjdublZJZzhKOGdMenZPNE1WSFlCSXJJRVB5R2MxSEg0azkrVmtZVjBMY1VZd3ZZZ0RzN0h3L1RiYTVuOU1saEJnCjdPQkxkcE9xYktWNENLNExaTHFYN1hRWHEzLzc4ZXhMdkZqTkpISTd2dVZOanl6cHlCeThzVFBVeVpsczVHdjJYUGlPamZ6Ri92eGsKRTlFejludXd0OEMrUCtobHQ4c1hGNkNZa0ZsWWN3bjkrY2tOSGd3cVhlRnhTZW94SEpCaWtOZ3FXMnhsSTdFbU1odUhoZS9HRWV6SQpsS3FnUjFzMmsvbnMxNExNWnhiTnN1VVJyMlJqL2xWVytwV3M2emZUYVZYR1pMSnc0bzBHYUdLektSTi9ueTh5MGQxaGlPS1NsMWlBClErZENhd1c0NkhXcGRhYVVtU2VFa2l5dDYzL3VWS1JVQnZ2THZwL29zUXNWQUlxeWVJUmgrZ2Jnamw5YnB2UGRPdk5ncDhKUDU0S3YKT2ZObTRzKy9LNTV4RHY1cGhVM2tKazhmdmJEaXVzOUM3elgzQjNZL0FmbnRhLzl5UGhneHBKNEgrZVFvdjV3TDVjSHhXUEJNeUdMUwphYkcyQVMvMjlybS9sMVRva2w4YUpyQjlyZnJRVWtyZ0RxRG5nbFpncXJYOGhlL1dBVGg3MlBjZlR3SXJ4NjlSeVVvYXE1bURlWEFxCmZHOFBQZ21HallGZGMrR0VaenRkTXYrZERuRGlRL3N2MERpSXdFQXNaV0tSbHU3dkQwYUVWc3RDS1dXZEF4TWpGcVppc05OTy84aUMKVFpDT3l1d2RPcGVmVUVkMEMvUGtBTG9LWnpmbkFES25QQUdYd3hrTkhSTHZ3Q29xL1daZjhGd0F1Tm5wVlNhWjJwbjVzc2lZUWVEVAp6TStqSW5iMDlNT3BkckNZRFhtckRhZ284RXNzNkNVMDBBRkp0Q1QzSkJOWjJ4U25vUTNBN1BVNUpZaGx6MGJlNmlSWWc5NXJkcHY5CmRraGpBWlN2UnVWQU9JRDFoQzNpZFhjQTdLUXRtMUdUcEFyWW5sb1hPY1puZysvWUNRaHhhNVBGaURUWkFFdzF3b3JUM2lGVXlKUjMKZStabHp4WWFkR0dLa1VxOXpCb2RITkxXaGZ2eHFmL0VvdzdZZGI1eTYwakdnbHdKK2lBekRBOFhJcTR6MUJmTnVQYzdlV0JueWc5QgoxTXRPTExkZTcwWWlCNTdqTWQ2MlBTbE9zS1NkYjhIVEVNUFVnK3g2UEllbkVtWjRXSU5sbTl2YXFlQjUyYzhZUzJsMVprZk4zMThRCkZsdHhhZ3AvQVUvR2VDQ0wwV1paYkd6c3k4MGFjcFFUMzM4MkczRGJmOE9jTFNSaEFkU0J4aTc2MEdJRExBbzJSZUs5Nkg2eHV3RUIKQjE2bDkxSjFJSVpWQzhCTStxUXdHNndzN3ZkTWNrMDYrVGE0R05pYnZOeEJFZDdubjR1eEVkcFEzS2xqUDhZcFI2QXQ0WlFlSFExbgpEM29vei80ZmN6eEpHN1RNUytSdzdROERIUmxlWnlMZFJURWJMUjFQOE9qYlN6cWV2SjA4M3Y0N0p1WngyeCtZYzlQSng1emEveUVyCkV1cms5SFF1MUpibmJIU3lXL0MyQktSdys0MXhHZGg2V3l6eGZaNGZ4S3AzNnlyNGViOWdENFlSMHhpczRUMGVld1AyOWh0SlpoYUEKeWQvT3JaazYvNGFSMDR2b0FQMkFPbUNmZHdMWUk4bDY5czJUQWV1eWNHMzRXQkJ6RnFkbjB6QWI5ZnBNMENBTWk5Z0xiRWViZVM2NAptczNDbmZaWEp4cEo1OHY1NWNmTUJEMHNVeWJaQ0F3SzFXclN4QjRXaTM4RzdERnliQ3RtRWw5dFlIWkdHbTZNOE95blFNdjNWMkRQCi9kNWxtK3ZRdTBBSmo3dVpvN05yS2xTZkFvRHR6Ym1kbEVKbFR1MWYrNUhXOEx3eFdNR2IrY2ZDSWhRMkpUM256NTl3YXU4cUFpL0kKdFNlVDVKVG1SbFkvc2FxSjBVbTBIanZTVHNXcnpmMllpWmdLS0hjQURPUXJIM21iYlpQQUd0OVpCbDR1dUJtZnphYXRPREYydmViVwpYcnhWNnZhN0c3QXVweHdYemFOZWVSNU16dVRvNjd5RTJSWjI1QnQ1TjU1V0VDMEVmN0V4ZUxNMHRScmZmdTg3V1BpMkk3dVpMSTZzCmJoTkFIQkIvYUEvazVWZ0l3SGFBOFRvNEF3TDJyRUN0TmM3Y1U0ckgzck90ZHFURjBTNjJ5dnpXd016LzNnVWhTMGpsMFR2WW9uYlkKTVlzbG4zZThtQ2dpVnM2ZWJCVmNQLzVwMHRPcjVySlJUd1hDcy8yQXVTQlpaUTBpT2NvemkwTmJlRVZnVE9XbTJaZHFHUjZYTG5xUQpEb1JnU0EwVDJCem1ING54Ky9ZWGVLLys0cStWTE1hMlA4VkJkOWtHQ3NmYmszaDlGRzYvZlB6U0dxWkdmc3JDSnAybnhMWTREVHRECnViclQrUlBaVkJwdTZJbUxvOUVOc08vWFNUdGdaMHUvNk8xRkY3bmdlOERMVy8yZmdXZVJiUldPcnZDK09rNC9BdC9ZQVp5ckpDN0UKeDBKeFBRSjVtY1JYajRXdm41Nlp4MmdzSE9UV2d6M25UdzVFb0pGZlptYmVRbVdkZnhkdCtSalIrRFNUam1vdUN0Ymx0ZS9aOHVZdgppSU9IV2Mzd0EvM1BVSEhTS29ZNHpTakEzSWVHUTNtR0F0Wk1oS1FmUXpFVjZDTUhzSmt3NWhJdmprZS9udXdtYlh3bFI0NHZBZ3JEClorSEorSTF4dzJOZ0R3ZUp5a3U1R1k1MzJ4TXdsemxKbTRpQTFXaHQ4WVF0d09vRE04OEpFSHp5WS9YaHVQbExVMnBSS0RaMEYrdnUKR0pBNnR3ZklVT3RZbktiS0FGVGJ0clBFMnNVUFMyenhEbnhrTUxJeWpNdjdCdG5XY25xQ1kveXZGSnVDSjh4N0s2Q3J3elJrK1RrKwpLdXYxR1NXNGJ3OFB2QWFlT3F2WlpMS1NOVitqTHAwUURGTUxYd3ZrRUYyQlU5aitlME5kRGl2K3NXUnlzdlpyNTZXU09Sbk1UUDArCmowcXdpQi9RSkQvZVVhWDhQL09qSWh5Q2dvTXlUQ3ViS1lDRExyNVkveWdWbUdpNTNFY3lBWjhaT0hXTEUzblkvbVVQcDM5dkQ2dWMKU3ZFajgwUFlneWZQWmEvVE54VEpaN015djJzZGZ2N2dkU01LNmVjc1VjZUxlWVZmZWlFL0RlYW1lNjJ2OG1lcE5JVG1mTUVickJJOQpHRm9BTW1vZFJKTXJlM0MwbG9DQkhzYUgrY05wT1grZ0t4a2Z3TkpBSGpvKy9IczUzendjeC8rQ1FqYmVQUENGRWZMTHcvZ0l2K1p5ClpKbjdRSHdQN1NNQ0NmNFZBdnZQOXZ5d0E5ejlBS1JzVHJFcVFrMkJXOERlNUQ4Q1JKNEhnSXo5NlFhTS8rRzBoU0NtODRjZlZFNDkKZmxpUC93T3ZLUm52ZG9CdEtRaytucWRMT0x6S3BvQ3E4RGd3RkxZTklORVpqRzc3emFIL09UNmNOeXZZTk5pbnJHSVlzUUdncDRlZgpuWEk1QUVON0VvajQrM3dDTDJCVFgxYXFLOFlQVTE2dDlDcGJlcTQrQktTb2N2d1NJRm1OMERvQWFySlhpMGkvR0VRMG9JdVF0WEpmCmphdFpWVUQvZGhwdlpyQnppVUxsQmdPMnZ0MXNwNmdMakx3T1ZzSkY3UURnTVdCY1doSENuVU9ERGhUbzRPejBzSjJNVDdYeGYrWU0KZ1lPYVJzMVRaOVVmNXJvcmdwRFpOVmd0eUUyMkFvdHhzNVB0dnpUc0dJZ0Y1QlNvUHBYTjF5UGE1SVdpZEg2N21hSGl5OG9NVVB6bgorNGVwTWRDdzA4ZzNkRkhlb29VRUUzTkhXQWZCdUNYU1gvekNxZ0wyaWoycXFFQ3lLNHpZVU5IUUlVWjE0VGtTY05NSUtoSU9zcWs4CnA4a1ZUWXAzM2ZmNXJieWlMc1pBR1lQZGhMNTNraE5kamVoNHYzN1dla2tCODF1NlhmcC91Qi9xRXlSdEtwRm1SQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJV0RBbU50RVVyUm5xNWdXNEN0eTlPakkvVUxwTVVrbEdSRVlaeDF1S2xoeEVNejdOVzh2ejMyUXovbGxyTU0xb3dXbnhMZ3BUMzhxQQpLWUtJME9KVk94TWh0Zm1BdCtlOGE3TVVkNkMzOHdTdTZIWnpha0lPMG1iRlNzbWlWR0VvMzlJRDBFWDNjMmsxemJsU1JPV3BJeTRUCnpWM24zc3ZUa0hwRS9XSUQxcklSaXJTYVdEL3BrMFBXa0FjK0szaUIwczE1MXAwVVZhL0J1NitnNFl2dWh0Nk54ZTRhZmNNV3hSb24KbHZFU2wwNXVndTFOSit5Z0JzZEpkVmFEdHhReHp3eG8vUHh2Skl2RzNLblFLT0pPZHlaK3pPK3VlOTNwNVNrQVB4SEJaQ01lWUI4MAoyRS9vUVNLUWJwMXloZTlZYVZVMk54L0g4T3dxeFQ0bDNJL044TkxvREpRZmpWNi92V213R3QycFZkTG9mTzdIako3bEQzZzArdllaCjNlZjRtOUZUN3hhTVhxeE9ZUDdIbmdPaER4bnp6a2J3U0J6cllIQ0ZWVEQ5TWtvRmN0RkFOTndQLy9WUjRnWUtpSEJQc2ZKd25qZFkKRDRmVTR5VHIyVDAvWmFxeFl5cGFUcjc3eUcwLzJDa2VQdnRZb1UvMld1Umo5bkdLdTdLUkRZMGxZR200ODE1WEUrQ3JoZVdtUzAzSQpGNmpGTElCaUZ5L1Zqb2RENHRnQ1NEd1Z6Qjk4bzZiQmpld1lKVThkWXJCZDJiQ1pEVWVZWHppd2h5L3NtQVN3bzJkM3FtUzBvWW1qCmRTbXNmUDVqdEJTTTdoTy80TS9TR3Z5NlZ4QWkvVHg4MVQ4YjBraExrVUVvWGhuNEpKRU9MTTgxZzFXRWxrTWEvcW1Xck5KSWswYkgKNFloYkQ5SklYL0hQb0ltSXV6aWtCaXVIOW1qMzFMMHlTRU5MeDlqZUswb2pEVG8vM1VsaUlUMVRFemtJR3F6bTltNWRrNW9yUnVhcQpHUm1rWWJObGMzQSt5aUR0RFREeSsvbU5RNHFLTEZtMEpXUFNoajhOVzVKSVMyV2lKVXRlb3A5cWpSQlN3SXVUb25CTjN3RW5mNTVUCk5ZaldlYm1xamw3Z1k0MDdBZExnOW9LVmFsaU9SdnBxdDR1UWhrSi93eDJIbE9Oa0N1M3c4TFhjdEdTUVpzYmhDR25CSlpFTzBxT20KSE5LeXdXb0pPQktmMG5OTkdyK081dVc4S1kyMGtYZW05cGEvbWhSU2QySWRUM0ZJd2JvSVdjbVY3bWRlcEpFR2V6Mk1qR0hQa2toTgo1Q0ppYWY0UkwxSklEVmFNL1BvaVplWWFObHRYbTNwZUR1a1lLM2xHSFdta0pTeHJuenNpUFlUVVlCVVQrR1QycEdta1BhOURST0QwCmMvQ1JKbS94YzBVS2tQYVRXQzNpeFNGU2x3aXB3WG8wbGVmYmNIUHNKUURheUU3TXY3V1AvbGdHYWRnY1djM0lnUnpTQWxaM2ZjVVEKVXNoam9ybFc5dkhNNytHNUtZbjBMV0VQeUNLdHp0OENtQlJTcVBtREgxN3NiZWcwU2MzMWFLcVc1ODhmZmFkREVtbkh2bG5JSW4xYgpOa1lUaE5SZ3ZaenJSd25yVkhkSmFhUzFnTFZOWnBLUDBraDNUeVlwcEVBblE3U2RZY2wwa2lId3h3djJucTRXcEpIV1U4WGhvUEgxCkpZbjA2MlZWUVVqaC9uSTUxOTllYUViS0lQMk1ZbC9IdFZjYTZmUHY3dThsRmcySWtNSlVBb2gyV1BGdVpBbDhzTDY1alRKSWUyMnMKK1BQM0pJazArdXcxR1ROZlhxREhBTnI0WGl3MDUyRmtTQ09kQkp3aW9YSDJhMk1YUWtyWVU0NnljS1kxYk9TS1p5RlNENGNVWUlGbwpBZGpmUGFQMEh3OWlwTWV0N1pGR2VrcTdSVE0xZm80L25CVFNYQSt2Q0JXaDUzQnNwNHdBQzBEcnU5UktGUythSzBDYVAxMm93cklwClRDRk40MVd2U0JGNmRzRm5hcWNKV09MNUtrSUtzZEJvTFlmRGVMS0JTREVSMHNNaE85OHkvUHRrRkNFOWhuN2o5RTZUampkOEl2S2EKdHZOUnkwRGJEL1B4TUN3Y1ZMbHRHMnpqc2s5N0RmeXZJL2QwaVpWSDFqUDM5RUx6QTlWYnNNbjhHcXlCeloxbnh2VTdqNGllaHFQNApzRVUvUGE2aUYxSVozaXhOWGFubmxGSjhyY1EvWlo5R0NWZHpKUDkwT1I3WVdZcGRQczhTdHY1VTltbk52VWtUOGs4bkw5OEo3cW1JClltSHppMms2S2N2OE9scTJsWlB0SS9YMDI3NlBpWDdiZHY4d3h1azNib3BmVUt3OWVYcmJTRDJudEZ6QnZUcklQbjIzVHZ4RythZWYKaGZnalF6R0o1eVBySUdLUmZmcDdldDJWWlordU9rU3V3VDI5b05qZmlrd041SDROaHRSSWhHU2ZQaEhCVkZlZVl0YnBadkpXay91MQp6V2lyZkxwa254YXo5Y2xjOXVrVGtUYmg4aFRMR2dtTE15N3pORlRHaW84dVpzNXhSMEwwMU4xcUhOUDAwN3d2S1piS2NtdFVjbVc1CjU4RmowTk1VZW1CNWJHYi95TlA2WjJSZHc2YzcyaDBsaHlGSzllUzJ4MmZxazBDUEVTY0w5RER6UnU5VHJBYzh6TjhXL01jSHZ5T04KbmtJekQvOTVSLzRiNjcxUk9vTEdOMjdtR00xM01CSDJ4MWN2cmMrQm55T3d4MUxtZ0IzODhPa1B5UWIwZEhnUzRhOUhOM2JneDNiUApRTFdhYkFEZmQ1TEZaL2IvUEU2Y1FEdVppb2Z6eU9jVnFOdUR5V0RsMENKUFJ3WnAyQXo5bkE5cHBNRmVYeFlwMkVSK2NaRTl4cDhyCjhuUmtrY0l0YnlxSGRNWkhHbndEUGpJUGJmUTU5OFpET3JQWnpCeFNaUDJ6U0FNaThrTHJuNTFwYVMxQTZ1d2g3NVdQVmtEZ1IwSVcKS2JMK1paQUNmeEJZL3dNT0taaUxZSzVmc2tnQmdZOUJlYVRRK3BkRmFyQkMrMzhwUGRlazBhZUV0R2FYUllwc0NnNHBsSDBCV21oVAp0QVNyT284eDZORW5laUdjK2Y3c1Q4dDdnL1BmaGkvN01tK0d6ZnRCc2Z1aStsNW9TZk1kclMxeVlNNmZXVnBiWG9qdXlQRUhxZFBrCkJXaFM1UGxBS3hmYlcwWWs4VEMxMGNQOWs5bzVaaTNhV1ljNmlmTDNVenRuY3NkQ2RDQVFxVmpaOG90R2tZcVZQZ3BBY1kyTEVIT0EKVTAwMCtsVFJTdi9qcVc5cEJNZ0VaaEN3dGlVWUQ1amM0NDU2U1JSOUFtb3Y1MS9PQzFiMm55YmZZcVpqWmkvc3l3V0lwY1NmN3VncApUY2VVd0pEYnIrQUxHelJvenk2R09wVGRUcXRqM2d4ZWJVSUNzaEUzTUdEc0tXUzFvbjhnUTc0THZTU3BRYTFpRmRHZytFTWFudTJBCmRlc2V3cDdHZUhFMFVUZ1FrUnhveTY5enJxcEdkUGdQUFhqS21aZVluOTBvT3orRGxac2gra2QyQlpuMWV6T3ByNStablorTDVqR3AKR1VManRhMUFMTzNydDBYOFNYa1dHb21sQUF4MzVYNUpXVkFHTGV6T0VDdmgxY1ZaSEY4SmRtU0tzMHFmZS8yVWw2UTdNRzc2TkNmZgpUSGtpMTQ4OUtkUGRJRThzb2VweFhxcWVRVkdvZWdLeXFzZWd4cnJGejhxQlQwQjJ5QUlDMmlqVkkwMjdBYnlLaGlHd3pIZzhSUS8xCkQwMDdmQ05OdTU3WEtLdTI1YVFTeGVNa3A5WXo2WjhhZnhkRGt3dWtPNjI2R3FsTFZSdDltaUE1a0lKYk5DditMc2FiMWZ6Vlo2TlgKLzBLTkZnR1d6bGJYaEtRMERPQWQ0TTUxZWJSbHhaRFA1eU9uRFF5dVc1QlpKczhPSDF2c1pUUUdLczUvSldFdytWMTZ1WFUvTXB6RAo0MlFVMUpFR2htc0ZKZ1VLMFoxM3l1TzZsTHN4cVZYdWxLVU83SlZqVS9lc3VKWm0zTlBHUGZDZkR6ZnZrT0tDTFlCbWRCU3JVc3NKCktNWmZVUGdQV0ZBdUVIM0pHMkIrckJhODVJMlhCanNrM3JqUVhFNGx5WkdsU3BPajNDUXoyUHpVOWw5WVlaZEx3bmw4ZGZmbGtzeEsKYWxhWVZ0V3ppaDROVnRtTlNZUE55TDBNckptUGsreTJaTERxV2Q4U3BFbFp2L1VrSmZ1emtsQlBTeENydnVVMlhvVWhuZEpQc252bApTNU1lanhhVERneEozcUJqbHM1ZzFiYUN3TXRYTkN6VWJIN0JDbTZzaW9hRmp2VXJ2ZjV4b0NoT3ZnSFkyMGJEdU9CVloxcUFDVGNVCnZlTmlUbmhwWUQxbEowYlBKUGxXM2MwVUd4N3VTREdoUnRNNXJwMHdEak9LSEM0YzExUHFlS1YxTERoL0FlTXBTem1EY2dhdDVBWk4KNUxwTG80b2U0eG5ZMGxKNVNwdnVKcFc1N3Q2aXoxR216bU12VnJJTWoweHFIRzJnSjY2Zk9qMlRUYXZ6d2RxV1l1cWtqdXkyckJwRwprRFlNeXlLbElDa3Y2c3VVT2lxN2VLS0IwSng4T1JRVkxhQnBJQ0xiOGpxYXFJZzlieUNVait5VzJhSVdaUmk2L3REaGsxT0hrc0lrCkl6YTNoL2c2VG55OGdEYjRWSUU4WDlTQlFDYW9BU3hCbzRJTkk2aytaQVNrb214MkdLeDZCbVcrVWdFSXRTVVV1YStUVlhsYjFxb0EKS3B3QzBPcnZ5OC9Qcm9Ia0JtMUVGOWdLNnZFTXNTWFB4ZnArSy9CUTcvMGVURlU0NGNXdlk0blRESUpjT0VuSFI4WW5CN3kvREdqbApUL3JFU29sWTJrVmMxdTFCWGhJZ2xrNFJGeENMRlhIMGk0QWx0dklMQmZ3SnprVW80cEpldDNwMENYQ3RTVnVFUkNtVzhDUU95WXBICm94U1NGVVZJL3A2RUZyeU1VNndla2dWVDR3a1N2ZnE2d3lSUE1DK2hyalc4d1hwSjRxRThuWVhiOGhYaERjQUhld0pOQ0dXcVhLeVcKOXJVUzdha3ljUitEVlNsSzkvY0VEM2Q3TjhWOUlGblVZMzBpVlNBVHI0SFVDV3ZpWko3ZUZFUWFkZ0pUT25NV205S0FEK1NEaWJSTwoxbUJNUXlwWHhhYTBIdHBSOWhnYWoxVjVQRnJqQzRGME8ySVhjUVRQRjlPMUVWWkZsdkIxOGhKdk9KV25wczduVlc3elkvZVhLNkxSCnU2cDQzNU9ia01HcXdPbUFkNFNiM2pVS0lOMjJoZ3dxYTY2Tk1FT1ZJTDFCdE5YSjJiS0FPcUtOVG0wZjR0dXkxRng0V3gwOHJMTHoKOHpmZ3JNQjNXcGhCVnVwNG5Kd0g0L0hwaTNsZnpybjdKclhiQ1U5Rk5SOUJBbUJ5OFZhcGFDdmxXY2pGV3lFd0hjSW43UzhCb1RGWQpiejZrUUt1bXZPVVpOTU1ST3BMNlJrT2ZpVk53YnBWQUNncnJUWEpRR0oyc0I0NytmWS8xOXlXQUNVNEk5VzJpd3ZOQk83SXVQQTZoCnhabEhhYXAzT1dISW8rUlRnMVZkRERWc054QVk0ZE45eGlkalJNQmNUcGNtVXZMTXovaGVzSXVKTmRweDVielFhTWVWK0FCUGcwYVQKakpEa0FXRXkrMXMxV3B2VGFJejNxc2VDRndOVDEyZ0dqU2RJRU5qMUdvMlZ5bEpuZXdlTkJsWk5TcVBwbG4wQVI3OUd1NGhkVUhCdQoxMmdReXUxbnJ3aU93bW1RSitkZ1QzSDhCcXVVTlNEWWhEcGJKUSthZjNRb2JhTUVQVTFodmlYd2VTNWk0L0M3V3c5Z21mM2wyNzZYClYwTWFMYk04a1BPWGs1UXdVeEY0ZldvV0FPc1lkU2xaZzFWV3pWNlovU0FVNWc3eXBRV2UrRFVHQ2xnMVVWS1RuSVpSaDZQTnRKZUYKZ3VJd0FNN3RLUkFJaW94RExUcDVWNGNqUEhUWEdGNldPRTFBd080UnE2YjJRakEvTjdRdWhMc2grTlo3aTMzUFk5S3hxWG04MmVQcgp2bXVOWnZGaUY3Szc0YnN1KzE0NUJndUIzVzdmZis2bDlrSzl1eGhjTmYwaHJjdGRETUs1eGI3blFXSDN3dXQzTVFSSHdyNlhnc0o2CnJ6Snd0TzZHeW5zaDBqQ2YrNXQzUThGZU9CU2ZFeU1zNE51N3BDTkIvU09aaDBYdmxZTGtLUzROUTlZV0dCNFVsb1JQU28rRzA3ZHUKOTVaWXRTak9ENERkS3QyOGNVbkl0bkt1dFFMRk5KbTd6RXBDTEhJZUVWaExueVk1VnpnOXpRTjZkdndLa1NzTjZYU2lJY2x5Qk1ydApVUlV2OGNhVTkza3Z0cVc4ejYvSnI5U3dNUkc1N2t3MlBVOCtjMDNHM3djakk3U1JVb053VFk3M3k3WUZ3R1RQYnRob2o5YUVlZ0FzCllFbFVhL2VJa0FDS1JmU1pHREk1aUhBbGh6NU5NVmdLbUl5dzl4U1RieW1PTUREeGUwMkQwc2dSRjhKRjc4aVU2SEw3V1NwVTMwaDYKRnZRYW9HcTU0OExvM1RTR1JrOW5VRFI2czRFQnJKc3JTbFhRVVRlMzNGNUR4OS9GTGl2b1JCVkRWOWZRS1ZmUUlaMThoeG82V2FTbwpnazYyV2xCbkRaMXlCUjIvV3ZDV0dqcmxDanFCMVhkRERaMXlCWjJnV3ZDR0dqcmxDanFGYWtGZE5YVEtGWFNvV3ZBT05YVEs3OUcxCjFUZlgwRjBJcnFDQ2p2VXNicXloVTY2Z1EvYVllZzJkSUNGWm9jTHMxVTVLV2R2eU9mRHlsVUNpWkJjTlE1S005QmJVRTdkZDJ1cWwKU0pHUGZIVXliRUZzL1VvRUI3UkdlajhLd3QxZTM5THh6dmdLNG9TTnErbVVjQW5ZVlZncnl1N3hEaTNGWVBQZmVVY3RpQ0k4NDFNQwpwcHlIcFcxK0tOYW5Wam1uZVg2aXlOV2x2R2dudWwvL2tHUXFIMVVpVjBwRGtpcVpnM1BSVlRTblNkY1VSYWtnWEc2UHZnS3FrNjVVCkVDcC9URElaUkgvWVdDNW9qRzRHdXpsZTFmT2FsYWRtMEZqc0pzeUUxQnNZUkp3TTF2eldpREZWN0NaM2JDUDBrZz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJMUlyZDVQMVQ1UU1IbnJZc0tpYURDRnhUTlRla0tLcG1FRlFLYXdNbVRNSENMMDlzSnNSZXJmSlJtODRhazdxY1hpU1ZjbTd2SkNDZgpRcW1yeEJUVnZ0VTFWaDJxKy9hQVdGSm4yYXc5ZGhrNlV3c2NycUk3VVpnRS9MWXRtVFI3eFlsVlNkYnNrcTBDNDFsSzRqb3dWYk5MCmN4M2ZXUzBIWGtjZDMwU3Qvc1VzQ0ZySmw2YkpGOEVvbTlLWE9mRDJ4NlZaYmxBWnFSSk4rZlZUellIWG5FVXdLd2tqbUpMcnA3V08KTDNwUXE0bFJZZ1poZGpvRWRyY0swUU4zOGlGWG1hSUhtRHJIYTZlWU1NQjZJOFZVeTBTMVQ1TFRhRmRSVEJqNEpYTGRubGVZNkZRVwpKZFpMVkhKcHMyVXZZcjZYYmhZcjZrM3B1S1Z5dlp3SWhBeUFsVW00STB1QUdCRURIUDR6VXBUdXNnWm5qL1g0Vkp5OVJWbXpzeWNIClFKeWplQVVJdGF0UndEcXp0MnBvSzVXN2FvV0dtUHIrd3BnMDBtSUJTOXpVZ3d3R3haQTByRXFUY2VJdTJGNnBSczZnVXVhczRjZ1QKVFVqNXloUERoWHVsWUVmR2p4ZXAvSTdDU1FQSmVTY2pjcHo4VzlFWDNwRndsU2hMU2FWQTdrTHJ5RmRFblNSMzh5dnNzWXBXaWVmawpYZFllKzYzb0MrL0lsOW1KTTRpdXB0TlNKZEpnRUxrUzhpeWdNeUlqR0pLZ0hoa01pdEFUL2xBWWtsQ1kxWGN4QlRvRnRRNUpPVHRkCnZTaE9hVWppdXp0OG92Z3ZWWkowajRqTUU0ckkzSmlsQml4aGk0YUlESDNHcDFLZVk0bjdiTGRFWkhqKy90UHRFUmtBd0tHUTNhR2oKRE8yYWlNeEZ0ZUR0RVJsWWhpYUt5TWhWcEtyVjV3VjFSV1FrNC94UEdzcHp0Qlhud0JJOUlIRHFuS3d0ZlErMjZzQ0V4bktWTTVibAo4OGExR011QmROdHQxc0FNeWpXSnUrcDlNaG5ndXNRYjl2c0VkY0RVNGc2Vm5GNHRaV2hYSnJEejl4ZFlRQ1lmWGRKUlBuYVJ1aUJaCkxhaFdWNmM3YWZZeVF4WFYxV25NMTFPc3ErT1ZqaXBVQ3FzSFFhdUtsMVR4cEpkbld5cW02cjFlM2tVS3Y5TzQwVEUxNzNLSlNmZXAKaDROWTdwRlRwMXdQcC8vK3NXdnE0YVN5b0YvLzdsMFBkME9kaFk1Nk9LVU0xZnZWdzhHbzlZMFNxS0VlVHVKR1VOa2lydXZyNFFUWgpVTXh2N1BldWh4UGZPMHBWeE4yN0hrNzFsb0M3MU1NSlRxdzBwRnBlVnc4bjlzWGtqblZnSmR2dGxmVndnN3RiVGlRQUpjeUpsTE10CnRlUkVkcmFhY2lMVlpQKzRDdHhxQnVSUmdzVHQxZWdJamtkdDlUWEMwVkpISWd1RnNzY1FuRHRVY2wxa01pamt3S3RyTkZoY0p4OFEKdTh4MzV2V3lrY2w0dHU5ZEZ4blA5cjNLUW9pRVVEYmEwKzNjSW9aYzhSRXZxbkNyR0FKZ2l0ZktTT2t4V1RIczdiU0tvWUkxRHVtdAp6MStVWkxUNzNBYU00T2dUSDVsNlpBRG5Mb1dRQmIrMlhVd1ZqdnlWd0RLM2FjbWxXVjllQ2F4Nkc1b3dLaTI2cmRIcHVZeGh3ZUl6CjVZdWRWQjFxdGlJVk4xMmJJTUticzl6RndsZFZwSTVOUXcxRnBCb3JVc2VtaVphUWdVcXAzMTBxVWovMzk2bEloWER1VVpFSzY4VnUKcjBpRlVPNVJrUXJoYUxzR1d1UVNTK1gxSVFHUnZ6UlZkNUtSMDB1dnZsQU11emVMb2FnVVRscVAzYnNVRHVYeksyYjAzS01VVG5KZAo3bDRLZDMzY1VrZ3haZDlkaDE5NVF5a2MvdzRpVkF6M2o1VENTVVFWL29GU09PbjRtRWIvcktka0dQSlZBZi8rWktYQ3A2VnNycXFXCkcrR0Y5bGplcCtJV2FVMzBncUJDbWlLS0dnTElFSmo4elhZNmJaaUxTNGIxSGk3d3F0RjdHbzl3bEc3bkJhcGNhc3Zqc0tnWE40dnIKNmo1bHI4TVJidzVNZEZSaWUrRGtGM2FOODBqaG85Y0F0YmhNdlN4TDY4NTRXRERQemtVeVpza015RmJxdFpqeG4reEE4NU90ZEtTSAoyb1lYK3NWREpsc090NTd5T2Q4MG44LzVxN0FKd2R1TzJZNnNhK0dRNllpVHNCWkxxdW9NZWtsMGpkS0hmTjFadEJGLzViT1hzTmd0Ck1YMnA4NFBQUEtTaHBjdWFORzdsS3V5Q3ZhNVNzZHZNTDRzVUkxczVwUW83Njh0UGZTeUhkS1NBdE9TTjhaQ0thN0hpN2lNdkNpY3UKZGd0Mmx6VzJNNkdvQk16a1VDcDJ3MzBpcE1KK2ZJay91UXE3c05tOEQ1OC81WXJkUHBTcXp2NlVLK3kyclpZc1VsdHR2cHpKSVowcgo5K05yZE9XUkZwOC9TckxrdFd3Q2lhRWMwb2F3d2c2dEtoQllldGJvRTgzbmNZM3ZKYVRlbzZJS2dqZURuelZORUlQT1YrbzlldXVzCmhTVU0wV2ZHUzBxUjU3VjRRMVdLSFd0SXVSVmFzTzROTlJmQkdkR3JiWHVmMGg3MURGVngxRVMrajlWZXc1QjQ1MklLZzFKTFRsWEwKODZDODEzdDJrcE5xT3lKeHA0cUc2SkpTSnpsZFViaVBndVlVU1pWcVNIUW5wSTY4UHJVbWNvcDVmZHI1U2FXSm5PejhwUHErcVRVYgowVG8vOVY0RG1vbXUxbWRFZEpmYURmM2p0TXRMYVM3ZmlFZzIzVlZyQXpybFNPODExWFRYeFdIMFZ0TkorUUZNTDg3N1ZkTnB2Qi9tCnhtbzZxWmlnV0Y1dXI2YVRxcVc3dHZKUnZwcE9LaFl2bldsL1N6V2RnQ3kwekVyZVAzWlROWjBVS0pVYlFxNm9wcnR5UjlaWlRTZDEKVHNQdWxYZXJwcE9xcGVQNysvZXBwcE9xcGRPWTI2T2ptazRxMXM1MFlMOWZOWjNVNnFKSTcxMnI2YVNNRzM3dTZIMnE2YVJxNldSdQptNytobXU1eVNFdXp2S1YwYlRXZGxIRnFzTjY3bWs1cS9TU3lvVzZzcGhPRFV1MHBmRlUxblp4dGVkOXFPdTBVdTZXYVRnUktmQ1orCnAycTZxeWltdTVwT3NjYnFidFYwMHJYVjk2Nm1rd0lBc055NW1rN3F0RVNVQTMrSGFqb3A5U0QwWHU5UlRhZHlNbktuYWpyMS9lVWUKMVhSU3hPQ3M4WHRWMDZsVmN0Mm5tazZxbGs2Mkg5L3REcUNYY3dBRi9jVjBYZDBrMzhYcnNrbWx1RGVIeHNLbnZZcXdDNGdmM01yMQpzcm0rWDkzRmtFN3dsT2ZlL2Vya3JRdHRkRHE1N2Jyb3hGRkprQWtKYXpKVkRRdU5MQ0FvVUpDcGVwWWJsR2hJV2xXQmh1NXl3b09wCnE0WUVLUVlHcGF2dHN0S1FwQk1wWkRXTUFwMFUyaTdMcUV5NGl3azlvalQrZEJSNVJBRkxiS2ZTMkZ3NU1zZDJ5MUpxZEhkem16dmUKUFZjYVRmSnIydHpKZHBlcmFxcFYwdGptVHE2U1Mxc2huYVlFQ2VYOFpLN1IzVzFyVmVydHRIU1pVWXhTYVdwenB4cFJoSVM1dWMwZApiY01vTjdxN3VjMGRWZnVtMHVoTzIrSFJybnFIZTY0QzZUYXV2SWphNnl5cWQwdFIybFU1ay92cVdoNHd0VWVuVnY2VVBlV0JEZXBVCmN3L1YrQk9XMFVIbldURUNyNm1RVGt0R3MwRzl3bEEraVVOemZTSEFvcEIycUNPSkRGSkhOdlFuNUdSdEhiWUFack5kWEU4RUwwMlYKbmJQVTNWQnk1ejJsMTc4ckM3c0UyVkNBcVZUeXdUVm5Rd0ZRcXZsam1yT2hBREJ0R2QzS2ljMUk5OTJsOHZIMm94RFlVVkRoT25CNgo5VFhDMGRUYlZRb0tMN1ByN1I0U2lLQmNWTEpMVmdxcjE3SWpZSm9LYStWNlFJZ0xhOTgybDRXMWI1djczUW9JZ2QybGtUSGlNVEJhCkxjcU12M2ZKa3JJbFJVclZmcTlLT2RTdXl5TmRXSWwzbVVHdDZJbkw1VkRQajZ1N1ZLYXdOeC9ydHlRdVFkWE85K3BnQ0I2OHloOFIKYTViOXRxNUcxWEtuYjdEeDJzM21CQVZGS2F0VEI1dzczQkpBd2JtMVd6VUZoUkZDcVJzTzllV3F0alVVTXVnNjRYVzZKY1N3bzZHUQpRVk1FL3VZT2QweDlwVnlQdXl2RVVDSzU0dHErMWZvNjNDbFZQdDRnaGd5ajBSM3U3dElwVDdXZVNGdW52RnZyaWRoT2ViZUxvVUtICk8yRmRrcGI2a0dzNjNDbjFlNFU5N3ZSM3VOTjZxem1zZnJxOXNQWnp6NWs1Y3Q2cjVzSmFBRXpkekRGb01YU28zblRYRmRhS0t4OUQKdDhhUFlIMWhYYkljV3Q4OVZ3ak9GWHJ6NG80SUNPY3U5WngxVEpzdnBncEh2aFpXVk1Sa1VMdG1BclhMMDFQZkxsWEV4RDhWaFFyQwpjeUdHY1lmS1FtaUlhekY5M3pTV01Xa3BZckkvRHNTZUtHOFgwMUxHSkp5a1N1eVVBOFd1aTJ3WlU5eWhxVUpkMFcxbnBUTHUwQ0tWCldvcVk3SThic2ZGOXJWL1oxVlhFSkpkQkJIc25LdXkwK2d6RExsM0RlOE90L0NMRFVPS3l4RzZQNmdGeGp4clh2RS8rVmpIb3YranQKU0tlcjNTTWlwYnc5MXJ2ZjFWUTlkUHAycHhyWG51elZWUHB0bU1sUlY3dEhsVTU1L2l0clhIbnl5YVpoYUtoNlZxOXhCVVBTWFBXcwpWT05LUjREZ1F0UWkwdmdZMHc5V3ZKVWZXNFVWbnMvNW45NEw1dm5UbThGYVNMdmZXby9ia1RzTVBwVmVVWFVmMmYwa1o0UTlaU3BRCkd3OEs3ZkppeC9RblFSSGVjN3JKUnlxb2h6TllqK1pPNzVVZnFoTDJZWXZuUDNveTlYQk8rU0s4dzNrVXg0VTZXVlNHaDdua2F2L0MKWmt1azZmeVNLOEw3bEVVSzVtSWlkd0hadVdJbGM3OHRpOVJlbWZnV2NuM1luQnhTdHBLTEkvQnJpT0FoRlphbUhlMFJHOWRITUNDcQpjblE2MGg5ckthUUdLeVN3dU9lY29BeHZMSzc5NDVPM21ueVZRUm8yVzRQUGhSRVhneFZYeEEwVmtKWXNZWG1rcFlhNUw0VVU5WDJMCmxnV2xsV0trVGFVK2d0V09QTkppc1UwS01yc0FXZ3Q4N21FLzBVV1laOWVqWDdqNk11OEY4cGpzZS96NlNtemtpbWMxUUhUSHQ2Y2kKdDAyQ09mZUNZcU9UUGF5aG96M0N6VE92RUNkbU56cU5hWk9BcUNFbk9nMFNkREZUVDV6VXNEY0QySS9pd2liVkNJbDhTZEpsYXBYcwprQ0FueXc4cXI2VzBTYjJ3Nlhpdnppd29vS3ZTbVVWckpLbWduRm9sdTNRWG5Wa0FnamM5S1doS1ZYZWlteWR2cUVwVHlkQ2txR1RRCnhrK2lReSs5ODJPajFyRHVUbmVYUlpraFhXUnBpZVZGTTlGMVpXa1pyRXFEa284VDZ4c1MwSmJ5ZVZyMGVDNXlZMFhxcXZpWmNna1AKcjR1WFBWT3VjeVVBN0lxR3E2OVZZckNENHIwdWIreDVqZHB1T05SUWphUVlYdFo2eWpNbzNuSVRMVmVUZUhGbDNGWEZidEpIMXJydQp0UjRVcjR3c0MyL1JoRldBdDE1Q0szVlhuR3k5bUpyWGNubFhuSUlESkIwZkV5YU5TQnl4amtsZC9RN2tOUXg1Tng5NVRJbzF6TFduCjNsVEJuWndjb3hNcjlmWjFncEdKNC96cUlUdlVqMDgycWhMY1h5UVFyS0lIL2ZhSVRPOG4rMk5YL25CUVh5SFpSVCtMRzlxeUtWY3kKNmFxeGl1bTY1NEEzSkZIOXk2eWtGRHRXdGNZRlErS2w2dE9uMVR5cDFWa0t1TEpvS09YazMzT2xVQXFvMXRKWVpmMjRrL2RaU2IxUQpSek16aVBvYVMzYVowUUZNcll1T1hWeGRxd0JNdEt2Y1JqSFZXaDd0a3hTZVhONUlNZFYrT3Jvb1ZndCt5Z0M3S0JlV3NnNXBpbDFaCkJhaTFCbER6UFNSeUJXS2FhZ0FWc3RNMVZBRnFyUUc4akNmcnFRTFVXZ1BJditGUWZ4V2cxaHBBRkxXK3VncFF3Q29LSHFZNEQxWmYKRmFEV0drQklzZXVyQURsNkt1c05ZWTJWM2lwQXJUV0FySTk4VlJXZ3pKQXVhZ0Q1NTVYVWVDNW5kWHRUUHUwZDJXNXB5c2VieXovWQpsTzhpcXZDUE5PVlQ2OGgybjZaOFZNMklzb0Z5ZTFNK2cxWENLcng3VTc3TC9zai9SRk0rK2Y3STkyektwNmwvNVMxTitmaFJCVGlvCnNPeWdhQktwbFFiTGQvVzcvVzZvcDN2Y0RhV3hyNSttdTZGdTd1dkhtOW9kN29hUzYrdW5MMC9wMnI1K3lsMzlycm9iU3FLdm4zSlUKU05vVDE5L1hUNXI1Rk8rR3VxS3Zuem9uMzZPdm4zSm1DQnU1dXJHdm4xb2wxNTBDdW9wZC9ReFdYUUZkMmI1K3lsTVR4UzZ1N3VzbgpHTWhGVjc4ck9vQkk5dlZUbnBCVWh1bzFmZjBreXhHVmJqWFhUaGpObGJLU2QwRmYwZGRQK2VZdjlrejh4cjUraWh0ZEh1MWlkK2pyCnB4d1cxblVEbFVKZlAyVlhWeklMK29xK2ZsSmxrcHpvM2RhUDd3NDE3N3I2K2lsRGdYSCtlL1QxVXo1UU1XaUdjMHZodTdnaTlkcSsKZmhLbUpxK3JINzg3QTNaRFh6K1JHR0xDcm42Q083dDBsNmRnYkY4LzFiclh1L1QxVSs3cXgzTHlqWDM5bEJPdWVSV3BOL1gxNCtxMwpwSGhSZE0vVjFYMzlsQW1JTE5nNzlQVlRrTFhqS25DbmZud3VaU2lhKy9HcHRKUFQzSS92cHI1K0xCUko4ZEZielhIUjEwK2g3a0UxCjIzYXV0Nitmc2lVUGJ6eTRSMTgvdVQyOGMzbVNlRjM5bGdaem5qbEpWQk5EdGI1K3l1Zk53aXlDNi92NkNha3Q5Zz09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJRnEvdHg2Y3ZTVU8rSDk4ZHhJZnQ2bmQ3UHo0dFJVeHF0emRjNW1yb2E4VW5ya2k5cmErZklMQjkwZFdQcWhpNnZhOGZXeXFsMUZmMAo1cjUreW1hT0RJL3A3dXVuM05YdjVsdWI2TDUrTjhiNk5QYjEwMUQzZW9lK2ZzcGQvWFQzNDd1cUNsZWtMUy83K2wxZkRNL3I2c2ZECmNsTmZ2OHRRTXIrcm45d3RaM3I3K2ltbmQ0bDJzYXY3K2lrbk9vbGlTbGYzOVpOWUYxNVhQK1Y3NGJUMzlicytiaW1rbVA2YUp4bS8KOG9hK2ZwemlrdXJxZDNYMm9LaXZueUpIOERxQTNOYlhUOWt3cEx6WDIvdjZLUmZFMGp2eXpYMzloSk1VZC9XN3NNYzAzMlFsN09zbgpid1JSTm96S1RWWWErL3Bwc21GdTd1dkhYOG5MQXh5RjZsb1orWlR1NjZlOE9TaFdjZDZ0SUpiYTkvMFMyME5meVVaN2FVdG5mSWp2CmxWcFNOeXFLOWtyd3JYeG9Wem54WGxTMktPQW1oc2U0MDV2VTQ0NWZCMC9GcG1oVURzRU82ZHR5aE1IOEwvTXdTODluZ1NkYU84TGEKTitLNE5JSnQ1Y25vL25pMllQN3VLa0s5Qk91cGpKWjZxdUxESEJ1amYvcXhDd1lPeXljeXRmNktOZG91aC9mUGFjL3RjMWg1OFp3MQo3OCs1c1BGelBBdUFUNk9NTlJSTmxHMzFsMzB6dEYvMVBneldTTWdYbkViclpOZFg5UjJNb1ZvcE9NbzFWKzMwN0swZWZsKzI1cytoCmZjY3gvN2E4WjUzQndxK3AxYXl1NHV0a2R6dFBPemI3WVdSdlBXUTI0V2ZqKzNQYWJnazRTbUhyOTBlbDRqd3Z6Ui9CN2VjOFRzcysKcXUxTXRWdHZIYVBQUGNnWWljVys0MDRHN0JtTXpGVnpHUGs5ZmNKS1lWdnpjQmpGSElkajlMMXlOQS9DazJObzh2SEtWbHEyM0k5Kwo3N3N2VUl1Wm1MSzNYLy9oK0xtRnplWmlacXEyK2xLSENPcExFLzNhTUphZE5uYlFvV1piUU1KK2t1Y1JiblZsTTdVbktXSWhZb0RwCm5teHdYUUlXbyt4Y1VVV2pZMnlmdjVvNy9WYktzam40U1JzUlhKek42NWx4Qml0Sm41amlVT1Bac3dzK3czeTErZ2JWSkJxelpLdGwKeFN6ekdmTDNYN2RDazMwbkVoOHd0ZGM4cjJpT2k3ZnlwZ2JVbWhRZFVtRnIvbXl3RnZya3ZJc2FhT2EvU3MxdStEay9NMlg4cCtSVAp4bitjSmNpWWVmVmFmTThFQm9Cc20xUnAzZWwrWnN0aDR3VEE2ZXdac0ZUN1RBZnVYa1ZnS1dOdmtFblVqQWMwcSt6ZkZuSnl0dnIrClBuUVhPOTB5L0FRbS9McjJ3YUpkRCtYV3AwSzlBL0tjTVAvSkFiTVJoaWRLRS90RFBqdnpDWGVnMkRHZ1NHUUQvb3k0VU5VdlVEaVYKSGZqejBZTTBqTmtPZHJHUEEvZ2k3Mk4rU1BySklsR1BBckJsekYzd1dNK2tvMXlwNEI3NzhxODRYZTFqbUQ4VmNhS0J3c0Y5NGE0OApuc2ovalAwNGVQRG81ajBZVy9LUEJpdnpLTy9sSGhHNWZqdk5QS2l3K0twOGZGNUxaY2tRNXRrSlZNWjJoWmRxcGpIN25adDcyV0RGClN3UGZsSDNrNWNFcDdlSVkvTTVQMjBlaFp3eFdHZjNoNVhDTmdIOFNGT3pKd01yQ2JyaXBWeVk3SEZyb0RTOHZCbXNoN0NrSFRMZHEKK0tpWHB1RThoTlBBWUhMWUFaK1dYOUNmTk5ocC93T24xNnBIdXYzMXQxVUFQRzE1MEZQQ0dZN1BHS1F0SDRNRmMxcWlHTEYrc3hZOQpNU2ZnRHF4ajRmdjdJd2Q5TEVjeHcwWDhpQTc1QUloK2l0a2w0QW56eHJWRHhIZ1FjYi81bUhTM0U0ZHdxaDE4emthK1pnNG9kVG5DCjJYOHpJbGFCRk90OUVPekNqd0tXWkhKRURwMGZWY0o1bnEyWXFiOTd1QVVqQ3VWSHlOUHZQb3BFaFg0Rmh4dTVoU2hNWDBMMHAzV2IKb0QrZFB3YTBiVWtVbmVNaC9ZbFloQ0NJRUFWaTJNOUFpSDBmck5mWUVzTjFEYU4rUFR3M2FkZ2paNWZsdGo3Qkc4MG9NZnRGRHhERgora0ZXS2llOHVZemVqWG00MHlSZ21rSXp0L1l0WE5uWDZYZXRVSzBZM3poRndoN201Tm5nZ0kwWGMrQk9Fbk1CNjdreVo4Yno1VWZUCkNOaUlkaENOTm1CTGZJVG9UNFh4RC90ZWdINnY4NWNWaitZbDMvb2lDMnZUTk50c2Zkb04xdUxFbTNtSG0zVVM1YlBSc24vYWhTbFoKRkpvT3drTmdtMEJ2c21ydFVtOHl1eGpVbkNLOUdmOTYyVHFLNzduNlU4NjVQc0JMQ3NMbFhCSHp0UzcxcHJqdHNCMU5IS2kxS0xxaQoxc21lOFFIMVQwK2p1M0pUcTVyckRvNllmMlh5K1g5TXI3YUFKZlozd2pDSDcwanJNYUF0VVNJNGlyZUNQNE5PVk9hTUZ6OHo4TSs0Ckd3YzdSd29xUXVnak13di9DWDdUZ1NxbDdFTjJIVXk5OGFGSUJGUkNNTkpROXN2RWxNcVl4T3JEQjFVSHpIM2R3em9MYkROaUZyVHEKb25TSUoyK2RzTjk1Nk8vYU9PVHBLdUNOU0tlY0g2MnlNNEZXcldGWWFGS0ZDMUhGK2Rvd3R3OGpPM254QW5VZlFORGJvcTBGVHYwegpDNy9ER2ZPc0ZxRXBVU0s5NkJYZ3lUWDM0TSthbjRFTmRTa2NEZENsbkxLbU5CK1lDMUNwWHMyc1JGbDRGeWNNZEhSRjNLQVdOYlIrCjlQL1NjWDdFYU5qY0ZQSnpaaVg2RHQ1YTBNQm0xazBCdkg1dzg4MGNCQ0taZnVNQnFIeDZmRUlBeTFSNzZLTHkrcG9uYUdDMkJSZEoKMUk3d096UDRMbnFtckV4Ym4zamltZHFVMlpWOEtiSUFHcGNBemhRQU1CY0tSTmxXNWx1OWdPZmQ4RVlFdEFiQUVIOG1ZSGtyMkpnOApaVGY4NUdPLzg3UGZnWFh4dk8yaGZYQ2dtQjJ3ZlorM2k5azQyd3YyekI0eEp0WWp3VmhYd0NpYldKcWZ3R0FJbHNROW8ra05BMDZJCnVtNGladVI2UjhOZTVFYnFKb29lc2pQcHZ0M3I5alBmQndGYko3MHVPV2ZWemR4dFVmN3ltWDdiWUFadUVpRDFlWkZZWDE1NlFWZjQKTWhRTFJGNVd0TlZMbkhITzRFWE53cUhiWUdKR3c3c0R4TVVqd2NjaE1PRmRRY0tTd0pudnp3YW93ZzRSd2VjVkVBRVYxMUZFR1BDSgpRQ3dhaUFqd1FaOVBBbEhyY2lEeEhBbTRmdUpDSW95VHp4d1JBaDlyUE1wclp2VjFuUGo0U0duRC8wdVdCT0srMVQ2Tys3dkdyYjlJCkVlR1E2MzFvNHdOME5UOWk3TE9SSTRIQmFnd2VQMndzRWJvS2ZBQXZMR1dvK0NuRlNySUF1RHlsM2s2Wkc5VjRFVWFKNWNZQTVVWEwKTklhSEs2ZkJSRWhRT09LMmFTd2xWNE5iQzBvcWxhYngrcm03amFkZmgzdFdXNHBBYUtNRUFERS9LazhEQUhCWkVDY3pJTkw1L1ZZQQpZbXRVSDRPaWRqcVlFQUJFc2Q0ZkJ3SXIxM3RUL3B1OVQ1Wi9lN3lGeDhpdnNqRG04dnAzTTQraDY4QnY0N0g1NlJZUUFNRGFlRE9QCmRUWTM4bGh2Szhkam1rRk1EdW9NMGhmdzJNVTBsamVTOG5WMTVuanNPaEM5b1FaeDdUTFJIbWtRRTNuZHAyME1jeDRwS1lycFhZM2UKVWwzaStXTUFjN2tZeGVyRzFlaHR6aUpTTWhUVFBvMkRpbXhJalVGUW01RHFuVTIzTVhiZmJGYmZrWW5qSndmQ2FPOHMzL2dnSnBOcgo5d0IyUjU3TTkycVVVQm5EVWtZK3dSaDQybEtKRXBQVjhWWnRPZG1jTk94RUN2dlFaSDlXSG9PNnRweWNqZncvcDJhVDRFK2JtWWwwCmxpa2ZFaDdMeFhoaGI4ZUhLd2hXM3pPY2RZMmUvYTVtOU5TN0w1UVJDSDdEUmNxNjBPTUw4MXd6bEU4eFAyV2l5QzVsWXpnRG5qYzUKdHZ4OVVoRVErMk12Uk5XOVFxOTc2SUcraXBlSlZuNGU0WjlzQUs1c1p6ODVLTWR1Zmx4QmE3eE0rYnZ3NE4rRHZHNzZ6N3pQUjduYgpURTR2OUxCWmR6eVE3dXh5ak5zYmRMREJSQ2MvZUJrN3NjRzlxcHYvb09abXc0WlZyeUNpNkJsRTJCQk1sY1AzRmJBa0Zsa0czd3ZPCkVZWU9VWlFlWGR4My9PaG9LZS9oUFJCRVIwc1ZId3dPdVFEdFB0MlVyLzExL0FXOFUycmk2TTlBdW0wRWY3NW1PTmhET216eFNpSnEKdTRDL01NOGh0d0NlMDBBdm9SWUZWdnZMQWNyTDY0c2Z4alk4QU1IZUF2NXNJN0F1S2lUaWYvMElzSkZKdHp0bFRwcmhVemRBNEFORwpTNi9HaFc1SERKWVJvSEc0N3kzNHgwbGJmTEd4dHcxV01sa00vdkxDNjFUd3ZkUnQ4SS9mbVRONDlyUW9Cc2E0eVV0QmxJSkg1U21wClFHUnV1a1FRblUvUlJpeGFJalAyZWF0UW1UMGFhYSs2MThVWlZtbnhBMzdPOVJEc2xYU0VxRGNPc2xNZkF5eW5HTDFna3hjVUV2SFEKNGZWSjIwOEhlU2RkREovVUtrN3c2UU9uNDFHVEFaR0tWUWl3VnBOeGdQazBDMUlSZUErOXRLc21ndWhGUitUZ3p5NFRsRnQ5WU15bgpBY2R0RThLZXJxWG8wYXhtQWQ2RGdURXdwT09TOWIyVm5jdnFMNHk4dGtBdUdvZ201Z1BuZDM0WkpsOXk2Nmc1S2hWcG9TYkUvVU5sCmJIT2htbFBYeHlLZG9vdzd5Q3luQVlhWDhJd0RmQnJqektjWkZ3S2Uwa0drMDIvd1lqU2hVNGQwT1ZPSlNNZHJxcE9qdWpWR0JVTnQKdzJNRWV5cTVRMGoydjhLMExIWXhNM0pTbGVPRCtxT0RMTVYweEFmMVJ3ZWw3dXRUaXcvcWp3NUNpdW1ORCtxUERsS2NyQzgreUk4TwpadjhyWllqaUVmd0IvZU52bnRmenc4dmhaL0d6ZWZBWUVnWi90b0xqN2Mxc1N4N204OWI4ZjUwSzIrbjViNzQ1UGNRZi9ObTNmS1VTCkRSWG0wKzFzL29DU21VS2pDS3MydkRTMzB2ek5QOUlXaEJoUnNEeFgrSTZWVm1WejgzRmMrTVo2S1o1WVVGYktyclUzZXBhL1piQ2gKdXFjK3RLdCtHRDBFK1daMGxJOGUrR2VQMnVVcElra2VyQ0t0NURJWDVvZmN1ZWl1MTk1RnB3UW9HQk1idFVwZ2V5aSs1K2JOalArNApTUHJMMlg2MTBDYzdieG4vQ2RzeUFVRjRuaW5JSHVDZGVrc2NrZ05ENW1Rek9wUFBRYVBYYisvQXcvSUNtSXVsRVBVYlBjNU1Cbjc3ClpIUTNUTTl3ZnMvd1Fkcm96UVptMEdvb0cxMTdNekRMeHZzb1gxWFlDRGN0Y3R4V1J3Nkh6SEsvYnBHYU5WRG54N2huc1VpaFl3TmEKWDBMeFF5Y1pqUGo1MFo4d3BkRkJmL3FkSStQQVNWc0Q5ajFzSVZOMjAzL0dIVjdLa0tHQ3p2Q0dHQnJFZHp0K1lpUzVnbkduajN3OQpydU1va3p2SU5GaGxqeks1QnplYkNkUXg4SUNQK3g4d0UxQmFIbTBvL0hObWdzR3F2SzNmeDB5Z1F0dWFJVjVwSmdCRGh6VVUvamt6CkFSbzZqS0h3ejVrSllDNnNvZkRQbVFrOGVabitjMmFDd2NvWkNtSXpRVGtqaE01Q3JNWGxOZ2RhL2J1K3lETjBwWmEvd0pYcURJcEEKS2I1M2pjN252b1BXbStmNEsxU3BaYUJMMHkyajgyZWRNbm8zalUrb1MyTndYN0NJM1N0cXdSNTdsS29EUXBOMUlJSGpEalhmZHZSTAo0NzJYU2Z3SU9yakVEelpYdzA1NWYwQmJ1bWx0Q1U5WWVOcVMzc3J0aEQxai9FTExEclZsM3VkQnQwOFRYK2RreGYvVFBma293K1BICkUzZWp0QzJneDRwUFVrWG53Tzk2cm9wV0h6NW9BeXlSQTZkYUtUMzJSWXVBU0sraWJCU2dVdUhJSFBBNFk1VmJtemFrMFBuQ09CdUcKNyt5VjRrN0lHM1ZrakNBRE5FcWQ1dU9sdGlQS1dqRzBTVlJhQkNIRm5uMjBSV0xKK0F0UHlTMEc0THhnbFBMa2FleFNtMEFMQWY1eAo4NnA2MkRSVzdpUVNLSE51OTBXTWVGR2d3WjcvaTFxcVVtbHB4VUZJZERqSXBlVlI1NHRlL3ZuaU5Gb1ZuUzhhalNjSEd6ODd2bDZjCkx3WmRKVit3bkdXTzJ4NjNUT3Ntd1VHb3Q4NGRCUkdPV0M4Z09BZ05tNDNXbktYQWdKamFMazVTYzM0ZUFKenNsbkIwNEVzbk5OQmkKRHpnZG1leituMVM3aUl3RHlHZ3B4T2ZNZDUwOTgxM3Y0UDk1MmJpNVJBdkVjZ0p6bnc2dENNT09Xa04rU0lYQkNkSG5udlQxK3E3TQp1MnZNSEVFaU81bytmVE5ZeFllUTZGYjA2NDhnblZLbmJ6QWtwUG44RGI4NVZMZUs3aGdpWkFJOElxQlRZWm9JUVQ5SEJEaWFGZThJCkV0MmtKMGNDSm9TYWpxODJEQkZjb2lOSTc0MUgwWThuN25oZWU5aVZ4d2ZwK090SncxRTBuV0lvZFJoTkZ4WlRWRVRueDFLc3BIQ2EKVFpkRUFnQmc5VFZ5NHdVSTFOUk4yeGlvMUp4TEVLZ2gxUzNUUUFuOGpFanhqclIxVEtNZDkrdEtETGlVU2svczVMcUZwNkZMN1JZQgpvQ21tbFJMUUEvZXFUZVB5YUo5ZkpJTjdkbmxNY2hvYVNRbFRLSEVFNEdncWxYTnV0cFdId1FvVEh2YThONEhiNzZUZkpIOXh0MFRUCkQ1clB4MFA3alR3R0RCVEhiVHhXQy9vNEFMSThwZ2hpa01GdTVUSDcwbkViajJFYnB3eVBhUVpSYzN0VUdZUVBBQT09DQoJXV0+DQoJPCFbQ0RBVEFbDQoJVFVMSVk0T0k3NWJWQVA3OG8xOEtBT0F4clNCS05aTzZ1RW9Eb05OWW9jR25XZmRKajJIZ2t5WWxIQU82bEZ4MU5ZQ0JxU3J4U21PQQpTY3k3K0cyckFhMWFaVktpL1VWcEdtVXZxVTgyTHNZUXJ1SFFHcjlCTnNycEpxRXloa1BLai9OMjVITHc1R3NuZVNBbUErdHRlOEJrCjRYWXpPN0xpS0JUR3NNUGxtVW8wQmxyMnhhT1lXaUxlbXpoaTZuMzAzWlprQmhQY0pVVmNkZ3lzdGtRSm55SGNnWXhFcnY4WVFoLzEKR3FmQlF0bzk3QmJPNDFJdC8vVVVNOU1oZzFDR2lTUlJJZjZuUDJHZU9sVTZZYkJLRlUvY3UzUUNZcmtzbnRCZE9zR0dRNldQSmRHNgphRHFZRkI5TDhoN3M4Z3YyZ1NpbUR3T296ekNxd1B1MjdXQ1BEWjQ5L0FlTElGdVRBTDFsNENWQnZVS2x6RVAxQURrWm5RTnNrYVRDClB4c3V3ZEVwa0IxSTJ3YnRlZ01tanRQZWhxZU96c2R6a0M4aEt6WDhkQkZGdWdMSjFxREJUaHR0QkRiQWl6S1dod2Y2Z05ucERWTFcKZU12TFA3aExaeEs2ay9BdkRtRllMNTV3bHNrazVTWGREV0tqOXNpZE5ZUk9yNVo1NmFzZlhSaXMyYmV6NWFmWW43M0NrNk1XenZFdgo4WFVlWk9pWVJHOFFZRU9SUVg3QlJEckNzc3E3bDY2YWFPU2hYbm4zTTJ6L2pxR0VoaS9vY3I3alRIVHBIWjBTd05PRTl3RDdLVWlCCktDYit3dURQUGcxeE9FVUwzMmVQOGZzWSt3bm5yejY4VTV5dFNlZ0grTFVVaFpXRmlUTCtocGk1OU1PeVZTcHV1Um9WQTMzQkNWZXYKd3E5UytmSnhTQU0yNXdzazZoZjRwL2NPb3c5Zk9QdUo0TDlYWHdUaGQwRnVORUQybWZFMHlGR25seSs0bzA2U0xOWTdVU2E0K1JmQwo1cE40R0hLb2o0MVQ5S2txeVA4ZjYvc2ZHK3ZiL2xmS2tBQ1RxZUQ0c0xpWjhjOGNEVllyK09adGZqcnY0QXVoWVc2KytOblV4ditaCkh3ejRBL1VmQnY2RC8wWmlEemdSZlNCQ0lmQkhDSDVibXhnYzZOMEgzUGxRQTd2TDBKODluQW8vMDlQUGRqTSsvT2NoRHIvcTFtdnQKU3VFaC9rQzlPd1R2Smg0Y1lEVFlFTHdOSGpuaFFlY1FqSEJvd0I2eTRIL2RmeHZPNEQvczRjV0FQV0QwQU9CLzNiRUJvMGNFM3ZvUAorT01KZlBnRlgvMzdBY2NlNmc4Zlg5akRESXk4MnpRRVlnOWVISC80b3o1Z0QydjBJZW9MRVRFd2t3RDRnTWRDNEl1SFFBVCtPelVFCjRQK3REYmd2R01FSUhQNkJVKzlqR0FFL0FoaFRBNDZBcnRIL0U3NVFNQWJlb2wveDRvR0hBUG9Yd0lxZ0R3QW5BRUE5aVZHL0lCN28KZ1UwTjM0WTJuSjh2QWdrS1VhQVpnYUdqMmMwTTRRZUg4Nkg3emxBQ3ZBZkhoZm5Da1ZnNEdrQWZNSUlnd0ljWWhvZURERmxFTk9LSQpnZEhFaU5HMGlJaHBFVUcwaUZDMGlQQnBFWUVFaUhDMGlOR2t3R2hTNEdKU0VJZ1VCRU1LZ2lNRlF3Q1dGQmhOaWhnOTNiWTBIOUg4CkFjakFYLzlMYWxtSDdHU3BqM0M2MUNlRkNZTVhxQ2xiaDRxVEJvL3BhVk9mRkNZT1FESlRCeDhWSm04ZHlvbE85bkFZVXgrQnZEeGsKejZmdFEzTjhQTTBQUC85Nzduend2NTBPUDVzRkpUMUFvbWJieVh5WXJjU0dMNVBqL1BDditXeFluZjluU0wxMDVBa1pEdDdkYkRjUApnWENBNWk4dHNzYnlFZUE0aW84SW5HWWtQQVlKRytYb2lzY1FZZkVZeFVwNGpNOUw0QytjL2czOFFPQVVMeEVFeFV0RVFFUlNJZ2hKCkN2NmxlQWw4WUhnSlBvbFJ2NEJvNmNIOXR3c1d3V2daZ3RFeWVGUk1FRXJONExTZXdRV0tCa2VhQnYwR0VZVFdNd1N0WndpeG5pR1EKbmlFWVBVTndlb1lJMEVUZ0VRVC9KOFFMVFpuK2lMSHlwVGh0SkdGbzRqd1JrNW82RWl3MGVlcVR3dlFwRVVNRVlFUk1qZ1QvdzRRcwpFS0I1S2tEUVBCWEFJSEVESEhFREdDSnVBS040S29EeGVTb0F3YUxmd0hkeEJBZHhWU0JBY1ZVZ0tDSnJJQVRKQ3Y2bHVBcDhZTGdxClFKRVIvb0loYVNEdzN5OW1BVWJ2QkJpOVE4UkVKQ0VvdlVQUWVvY1E2QjBDNlIzNEc0WWt0T1lKMEpvbklOWThBYVI1QW96bUNYQ2EKSnhDa3ljQWpDZkZQQ0JxYU5QMFJad1ZOY2VKSTBJaVlVTkNrSjQ4RUxFQXdvcVpFQUVyVUVBa1lVWk1qd3Y5dFVhdmxLRnNXV0xiSQo0dlFDLzlyNk9sN01XNGZ4enhwWXRvdmorRi96aC9GbXN6Mk5UL01kZVBLd09NeVBwKzFoL25CY2J2OE52d0UvWVY0SE52SUxhZmcvCndrbmVyZz09DQoJXV0+DQo8L2k6cGdmPg0KPC9zdmc+DQo=); + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + position: relative; + display: inline-block; + vertical-align: top; + overflow: hidden; + vertical-align: middle; + width: 1.3rem; + height: 1.3rem; +} +#download-btn { + display: none; +} +/* Content */ +#content { + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; +} +/* Code */ +#content section.code { + display: none; + background: #FFF; + border: 1px solid #E0E0E0; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 15px; + font-size: 12px; + -moz-border-radius: 1px; + -webkit-border-radius: 1px; + border-radius: 1px; + font-weight: 400; +} +article.component { + padding: 0 0 10px; +} +#content section.code h3 { + margin: 0; + font-size: 12px; + color: #000; + font-weight: 400; +} +#content header h2 { + font-weight: 300; + margin: 10px 0 25px; + font-size: 20px; + position: relative; + display: inline-block; + padding-right: 10px; +} +body.light #content header h2 { + background: #F4F4F4; +} +body.dark #content header h2 { + background: #4A4D4E; +} +#content header{ + position: relative; +} +#content header:before { + content: ''; + width: 100%; + display: block; + position: absolute; + left: 0; + top: 23px; +} +body.light #content header:before { + border-bottom: 1px solid #E0E0E0; +} +body.dark #content header:before { + border-bottom: 1px solid #58595A; +} +#content pre { + padding: 0; + margin: 2px 0 10px; +} +.showcode { + margin: 10px 0; +} +.showcode a, section.examples a { + color: #288edf; + text-decoration: none; +} +.showcode a:hover, section.examples a:hover { + text-decoration: underline; +} +section.examples ul { + margin: 0 0 20px; + padding: 0 0 0 20px; +} +section.examples h4 { + margin-bottom: 5px; +} +section.examples li { + color: #58595A; +} +/* Side Nav */ +#sideNav { + background: #4A4D4E; + position: absolute; + width: 100%; + z-index: 1; + height: 100%; + left: 0; +} +#sideNav ul { + list-style: none; + margin: 0; + padding: 0; +} +#sideNav li a { + color: #F0F1F1; + display: block; + height: 46px; + font-size: 16px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 12px 0 0 20px; + text-decoration: none; +} +#sideNav nav.site, #sideNav .combo { + border-bottom: 1px solid #58595A; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px; + display: block; +} +#pageNav li { + border-bottom: 1px solid #58595A; +} + +select.docNav { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #595B5B; + background-image: none; + box-shadow: 0 0 0 1px #303233; + border: none; + border-top: 2px solid #666767; + color: #FFF; + text-shadow: 0 -1px 0 #000; + overflow: hidden; + font-size: 14px; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; + -webkit-appearance: none; + -moz-appearance: button; +} +@media screen and (min-width: 650px) { + #site.open { + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); + } + #main-header nav { + display: inline-block; + position: absolute; + right: 0; + top: 40px; + } + #main-header ul { + list-style: none; + } + #main-header nav li { + display: inline-block; + margin: 0 18px; + } + #main-header nav li#download-btn { + display: none; + } + #main-header nav li a { + text-decoration: none; + font-size: 20px; + color: #7F7F7F; + } + #main-header nav li.selected a { + color: #373435; + } + #slide-menu-button{ + display: none; + } + #main-header hgroup { + text-align: left; + position: absolute; + display: inline-block; + top: 24px; + } + #main-header hgroup h1 { + font-size: 60px; + } + #main-header hgroup p { + font-size: 15px; + } + #main-header { + color: #373435; + background: #fff; + height: 148px; + } + #content { + padding-left: 240px; + } + /* Side Nav */ + #sideNav { + background: transparent; + width: 220px; + z-index: 20; + left: 10px; + top: 150px; + height: auto; + } + #sideNav nav.site { + display: none; + } + #sideNav .combo { + border-bottom: none; + padding: 36px 0; + } + #sideNav li a { + padding: 12px 0 0 10px; + } + body.light #sideNav li a { + color: #797B7B; + } + body.light #pageNav li { + border-bottom: 1px solid #E0E0E0; + } + select.docNav { + background: #595B5B; + box-shadow: 0 0 0 1px #303233; + border: none; + border-top: 2px solid #666767; + color: #FFF; + text-shadow: 0 -1px 0 #000; + padding: 3px 20px 4px 8px; + -webkit-appearance: none; + } + body.light select.docNav { + box-shadow: 0 0 0 1px #949696; + background: #DDE1E1; + border-top: 1px solid #FFF; + color: #454545; + text-shadow: 0 -1px 0 #FFF; + width: 192px; + } +} +@media screen and (min-width: 880px) { + #content { + padding-left: 300px; + } + #sideNav li a { + display: block; + height: 60px; + padding: 22px 0 0 10px; + text-decoration: none; + } + #content header h2 { + font-size: 28px; + } + #content header:before { + top: 30px; + } + section.code div { + display: inline-block; + width: 48%; + vertical-align: top; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + section.code div:first-child { + padding-right: 5px; + } + section.code div:last-child { + padding-left: 5px; + } + .max-width { + max-width: 1180px; + position: relative; + margin: 0 auto; + } + header#main-header .max-width { + top: -10px; + } + #main-header nav li a { + font-size: 22px; + } + #main-header nav { + display: inline-block; + } + + #main-header nav li { + margin: 0 25px; + } + #main-header nav li:last-child { + margin-right: 0; + } +} +@media screen and (min-width: 940px) { + #main-header nav li#download-btn { + display: inline-block; + } + #main-header nav li a#download-btn{ + position:relative; + top: -15px; + display:inline-block; + box-sizing:border-box; + -moz-box-sizing:border-box; + background-clip:padding-box; + font:inherit; + background:transparent; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + text-overflow:ellipsis; + white-space:nowrap; + overflow:hidden; + font-size:16px; + line-height:3rem; + letter-spacing:1px; + color:#454545; + text-shadow:0 1px #fff; + vertical-align:top; + background-color:#e5e9e8; + box-shadow:inset 0 1px #fff; + border:1px solid #a5a8a8; + border-radius:6px; + margin:0; + padding:0 1.25rem; + } + #main-header nav li a#download-btn, #main-header nav li a#download-btn:hover { + border:1px solid #143250; + background-color:#288edf; + box-shadow:inset 0 1px rgba(255,255,255,0.36); + color:#fff; + font-weight:500; + text-shadow:0 -1px rgba(0,0,0,0.36); + } + #main-header nav li a#download-btn:hover { + background-color:#2f9cf3; + } + #main-header nav li a#download-btn:active, #main-header nav li a#download-btn.is-active { + background-color:#0380e8; + box-shadow:inset 0 1px rgba(0,0,0,0.12); + } + #main-header nav li a#download-btn:disabled, #main-header nav li a#download-btn.is-disabled { + opacity:.3; + cursor:default; + pointer-events:none; + } +} + + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/theme.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/theme.css new file mode 100755 index 0000000..7f1ec6c --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/css/theme.css @@ -0,0 +1,28 @@ +pre { + padding: 0; + font-family: 'Monaco', 'Source Code Pro', monospace; + font-size: 1em; +} +.rainbow { + border-spacing: 0; + border-collapse: collapse; +} +.rainbow .line:hover { + background-color: #171b1c; +} +.rainbow .line:hover .line-number { + background-color: #101313; +} +.rainbow .line .line-number { + text-align: right; + background-color: #1b2022; + padding-left: 0.8em; + padding-right: 0.8em; +} +.rainbow .line .line-number:before { + content: attr(data-line-number); +} +.rainbow .line .line-code { + padding-left: 1em; + width: 100%; +} diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..9e9e4de2601568908009b24f1cbc8adff31884ac GIT binary patch literal 23949 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..6eb48e7d492e4290175c03218b5530a9d9220182 GIT binary patch literal 52660 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 Xh{gj8fogTf@X6E(R$0P<_m%o@fv!po literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcecodepro-regular-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..2383f47354b74e261bb9874faa5d6d0fe38d507c GIT binary patch literal 27068 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 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..bda2005c0248244ab89377c7c8c04934b4c1a825 GIT binary patch literal 23716 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 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg new file mode 100755 index 0000000..e031390 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.svg @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-light-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..0959ecefeed75716d0f3abf3b4b4db05ac27e574 GIT binary patch literal 51876 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
        + +
        +
        +
        +
        +

        Topcoat

        +

        CSS for clean and fast web apps

        +
        + +
        +
        +
        +
        +
        +

        Button Bar

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-button-bar">
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">One</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">Two</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">Three</button>
          </div>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button-bar > .topcoat-button-bar__item:first-child {
        +  border-top-left-radius: 4px;
        +  border-bottom-left-radius: 4px;
        +}
        +
        +.topcoat-button-bar > .topcoat-button-bar__item:last-child {
        +  border-top-right-radius: 4px;
        +  border-bottom-right-radius: 4px;
        +}
        +
        +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
        +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
        +  border-right: none;
        +}
        +
        +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
        +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
        +  border-left: none;
        +}
        +
        +.topcoat-button-bar__button {
        +  border-radius: inherit;
        +}
        +
        +.topcoat-button-bar__button:focus,
        +.topcoat-button-bar__button--large:focus {
        +  z-index: 1;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Button Bar

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-button-bar">
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">One</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">Two</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">Three</button>
          </div>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button-bar__button--large {
        +  border-radius: inherit;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-button,
        +.topcoat-button--quiet,
        +.topcoat-button--large,
        +.topcoat-button--large--quiet,
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-button:disabled,
        +.topcoat-button--quiet:disabled,
        +.topcoat-button--large:disabled,
        +.topcoat-button--large--quiet:disabled,
        +.topcoat-button--cta:disabled,
        +.topcoat-button--large--cta:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Button

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button">Button</button>
        <button class="topcoat-button" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button,
        +.topcoat-button--quiet,
        +.topcoat-button--large,
        +.topcoat-button--large--quiet,
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  padding: 0 0.563rem;
        +  font-size: 12px;
        +  line-height: 1.313rem;
        +  letter-spacing: 0;
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  vertical-align: top;
        +  background-color: #595b5b;
        +  box-shadow: inset 0 1px #727373;
        +  border: 1px solid #303233;
        +  border-radius: 4px;
        +}
        +
        +.topcoat-button:hover,
        +.topcoat-button--quiet:hover,
        +.topcoat-button--large:hover,
        +.topcoat-button--large--quiet:hover {
        +  background-color: #646666;
        +}
        +
        +.topcoat-button:active,
        +.topcoat-button--large:active {
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +.topcoat-button:focus,
        +.topcoat-button--quiet:focus,
        +.topcoat-button--large:focus,
        +.topcoat-button--large--quiet:focus,
        +.topcoat-button--cta:focus,
        +.topcoat-button--large--cta:focus {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +  outline: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Quiet Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--quiet">Button</button>
        <button class="topcoat-button--quiet" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-button--quiet:hover,
        +.topcoat-button--large--quiet:hover {
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-button--quiet:active,
        +.topcoat-button--large--quiet:active {
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  background-color: #404141;
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large" >Button</button>
        <button class="topcoat-button--large" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large,
        +.topcoat-button--large--quiet {
        +  font-size: 0.875rem;
        +  font-weight: 600;
        +  line-height: 1.688rem;
        +  padding: 0 0.875rem;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Quiet Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large--quiet" >Button</button>
        <button class="topcoat-button--large--quiet" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Call To Action Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--cta" >Button</button>
        <button class="topcoat-button--cta" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  border: 1px solid #143250;
        +  background-color: #288edf;
        +  box-shadow: inset 0 1px rgba(255,255,255,0.36);
        +  color: #fff;
        +  font-weight: 500;
        +  text-shadow: 0 -1px rgba(0,0,0,0.36);
        +}
        +
        +.topcoat-button--cta:hover,
        +.topcoat-button--large--cta:hover {
        +  background-color: #509bef;
        +}
        +
        +.topcoat-button--cta:active,
        +.topcoat-button--large--cta:active {
        +  background-color: #1976c3;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Call To Action Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large--cta" >Button</button>
        <button class="topcoat-button--large--cta" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large--cta {
        +  font-size: 0.875rem;
        +  font-weight: 600;
        +  line-height: 1.688rem;
        +  padding: 0 0.875rem;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="checkbox"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.checkbox {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox__label {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.checkbox:before,
        +.checkbox:after {
        +  content: '';
        +  position: absolute;
        +}
        +
        +.checkbox:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="checkbox"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.checkbox,
        +.topcoat-checkbox__checkmark {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox__label,
        +.topcoat-checkbox {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox--disabled,
        +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.checkbox:before,
        +.checkbox:after,
        +.topcoat-checkbox__checkmark:before,
        +.topcoat-checkbox__checkmark:after {
        +  content: '';
        +  position: absolute;
        +}
        +
        +.checkbox:before,
        +.topcoat-checkbox__checkmark:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Checkbox

        +
        +


        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <label class="topcoat-checkbox">
          <input type="checkbox">
          <div class="topcoat-checkbox__checkmark"></div>
          Default
        </label>
        <br>
        <br>
        <label class="topcoat-checkbox">
          <input type="checkbox" disabled>
          <div class="topcoat-checkbox__checkmark"></div>
          Disabled
        </label>
        +
        +
        +

        CSS

        +
        
        +.topcoat-checkbox__checkmark {
        +  height: 1rem;
        +}
        +
        +input[type="checkbox"] {
        +  height: 1rem;
        +  width: 1rem;
        +  margin-top: 0;
        +  margin-right: -1rem;
        +  margin-bottom: -1rem;
        +  margin-left: 0;
        +}
        +
        +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
        +  opacity: 1;
        +}
        +
        +.topcoat-checkbox {
        +  line-height: 1rem;
        +}
        +
        +.topcoat-checkbox__checkmark:before {
        +  width: 1rem;
        +  height: 1rem;
        +  background: #595b5b;
        +  border: 1px solid #303233;
        +  border-radius: 3px;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-checkbox__checkmark {
        +  width: 1rem;
        +  height: 1rem;
        +}
        +
        +.topcoat-checkbox__checkmark:after {
        +  top: 2px;
        +  left: 1px;
        +  opacity: 0;
        +  width: 14px;
        +  height: 4px;
        +  background: transparent;
        +  border: 7px solid #fff;
        +  border-width: 3px;
        +  border-top: none;
        +  border-right: none;
        +  border-radius: 1px;
        +  -webkit-transform: rotate(-50deg);
        +  -ms-transform: rotate(-50deg);
        +  transform: rotate(-50deg);
        +}
        +
        +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-icon-button,
        +.topcoat-icon-button--quiet,
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-icon-button:disabled,
        +.topcoat-icon-button--quiet:disabled,
        +.topcoat-icon-button--large:disabled,
        +.topcoat-icon-button--large--quiet:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button">
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button" disabled>
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button,
        +.topcoat-icon-button--quiet,
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  padding: 0 0.25rem;
        +  line-height: 1.313rem;
        +  letter-spacing: 0;
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  vertical-align: baseline;
        +  background-color: #595b5b;
        +  box-shadow: inset 0 1px #727373;
        +  border: 1px solid #303233;
        +  border-radius: 4px;
        +}
        +
        +.topcoat-icon-button:hover,
        +.topcoat-icon-button--quiet:hover,
        +.topcoat-icon-button--large:hover,
        +.topcoat-icon-button--large--quiet:hover {
        +  background-color: #646666;
        +}
        +
        +.topcoat-icon-button:active {
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +.topcoat-icon-button:focus,
        +.topcoat-icon-button--quiet:focus,
        +.topcoat-icon-button--quiet:hover:focus,
        +.topcoat-icon-button--large:focus,
        +.topcoat-icon-button--large--quiet:focus,
        +.topcoat-icon-button--large--quiet:hover:focus {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +  outline: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Quiet Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--quiet">
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--quiet" disabled>
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-icon-button--quiet:hover,
        +.topcoat-icon-button--large--quiet:hover {
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-icon-button--quiet:active,
        +.topcoat-icon-button--large--quiet:active {
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  background-color: #404141;
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--large">
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--large" disabled>
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  width: 1.688rem;
        +  height: 1.688rem;
        +  line-height: 1.688rem;
        +}
        +
        +.topcoat-icon-button--large:active {
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Quiet Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--large--quiet">
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--large--quiet" disabled>
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--large--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-icon,
        +.topcoat-icon--large {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  overflow: hidden;
        +  width: 0.81406rem;
        +  height: 0.81406rem;
        +  vertical-align: middle;
        +  top: -1px;
        +}
        +
        +.topcoat-icon--large {
        +  width: 1.06344rem;
        +  height: 1.06344rem;
        +  top: -2px;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.input {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.input:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.list {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  overflow: auto;
        +  -webkit-overflow-scrolling: touch;
        +}
        +
        +.list__header {
        +  margin: 0;
        +}
        +
        +.list__container {
        +  padding: 0;
        +  margin: 0;
        +  list-style-type: none;
        +}
        +
        +.list__item {
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.navigation-bar {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  word-spacing: 0;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.navigation-bar__item {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +}
        +
        +.navigation-bar__title {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.notification {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.notification,
        +.topcoat-notification {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Notification

        +
        +
        1
        +
        + +
        +
        +

        HTML

        +
        <span class="topcoat-notification">1</span>
        +
        +
        +

        CSS

        +
        
        +.topcoat-notification {
        +  padding: 0.15em 0.5em 0.2em;
        +  border-radius: 2px;
        +  background-color: #ec514e;
        +  color: #fff;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="radio"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.radio-button {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button__label {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button:before,
        +.radio-button:after {
        +  content: '';
        +  position: absolute;
        +  border-radius: 100%;
        +}
        +
        +.radio-button:after {
        +  top: 50%;
        +  left: 50%;
        +  -webkit-transform: translate(-50%, -50%);
        +  -ms-transform: translate(-50%, -50%);
        +  transform: translate(-50%, -50%);
        +}
        +
        +.radio-button:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.radio-button--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="radio"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.radio-button,
        +.topcoat-radio-button__checkmark {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button__label,
        +.topcoat-radio-button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button:before,
        +.radio-button:after,
        +.topcoat-radio-button__checkmark:before,
        +.topcoat-radio-button__checkmark:after {
        +  content: '';
        +  position: absolute;
        +  border-radius: 100%;
        +}
        +
        +.radio-button:after,
        +.topcoat-radio-button__checkmark:after {
        +  top: 50%;
        +  left: 50%;
        +  -webkit-transform: translate(-50%, -50%);
        +  -ms-transform: translate(-50%, -50%);
        +  transform: translate(-50%, -50%);
        +}
        +
        +.radio-button:before,
        +.topcoat-radio-button__checkmark:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.radio-button--disabled,
        +input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Radio Button

        +
        +






        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <!-- NO LABEL -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
        </label>
        <br>
        <br>
        <!-- LEFT LABEL -->
        <label class="topcoat-radio-button">
          Left label
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
        </label>
        <br>
        <br>
        <!-- RIGHT LABEL -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
          Right label
        </label>
        <br>
        <br>
        <!-- DISABLED -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat" Disabled>
          <div class="topcoat-radio-button__checkmark"></div>
          Disabled
        </label>
        +
        +
        +

        CSS

        +
        
        +input[type="radio"] {
        +  height: 1.063rem;
        +  width: 1.063rem;
        +  margin-top: 0;
        +  margin-right: -1.063rem;
        +  margin-bottom: -1.063rem;
        +  margin-left: 0;
        +}
        +
        +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
        +  opacity: 1;
        +}
        +
        +.topcoat-radio-button {
        +  color: #c6c8c8;
        +  line-height: 1.063rem;
        +}
        +
        +.topcoat-radio-button__checkmark:before {
        +  width: 1.063rem;
        +  height: 1.063rem;
        +  background: #595b5b;
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-radio-button__checkmark {
        +  position: relative;
        +  width: 1.063rem;
        +  height: 1.063rem;
        +}
        +
        +.topcoat-radio-button__checkmark:after {
        +  opacity: 0;
        +  width: 0.313rem;
        +  height: 0.313rem;
        +  background: #fff;
        +  border: 1px solid rgba(255,255,255,0.1);
        +  box-shadow: 0 1px rgba(255,255,255,0.5);
        +  -webkit-transform: none;
        +  -ms-transform: none;
        +  transform: none;
        +  top: 0.313rem;
        +  left: 0.313rem;
        +}
        +
        +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +.range {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +.range__thumb {
        +  cursor: pointer;
        +}
        +
        +.range__thumb--webkit {
        +  cursor: pointer;
        +  -webkit-appearance: none;
        +}
        +
        +.range:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +.range,
        +.topcoat-range {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +.range__thumb,
        +.topcoat-range::-moz-range-thumb {
        +  cursor: pointer;
        +}
        +
        +.range__thumb--webkit,
        +.topcoat-range::-webkit-slider-thumb {
        +  cursor: pointer;
        +  -webkit-appearance: none;
        +}
        +
        +.range:disabled,
        +.topcoat-range:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Range

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <input type="range" class="topcoat-range">
        <input type="range" class="topcoat-range" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-range {
        +  border-radius: 4px;
        +  border: 1px solid #303233;
        +  background-color: #424546;
        +  height: 0.5rem;
        +  border-radius: 15px;
        +}
        +
        +.topcoat-range::-moz-range-track {
        +  border-radius: 4px;
        +  border: 1px solid #303233;
        +  background-color: #424546;
        +  height: 0.5rem;
        +  border-radius: 15px;
        +}
        +
        +.topcoat-range::-webkit-slider-thumb {
        +  height: 1.313rem;
        +  width: 0.75rem;
        +  background-color: #595b5b;
        +  border: 1px solid #303233;
        +  border-radius: 4px;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-range::-moz-range-thumb {
        +  height: 1.313rem;
        +  width: 0.75rem;
        +  background-color: #595b5b;
        +  border: 1px solid #303233;
        +  border-radius: 4px;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-range:focus::-webkit-slider-thumb {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-range:focus::-moz-range-thumb {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.search-input {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +input[type="search"]::-webkit-search-cancel-button {
        +  -webkit-appearance: none;
        +}
        +
        +.search-input:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.search-input,
        +.topcoat-search-input,
        +.topcoat-search-input--large {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +input[type="search"]::-webkit-search-cancel-button {
        +  -webkit-appearance: none;
        +}
        +
        +.search-input:disabled,
        +.topcoat-search-input:disabled,
        +.topcoat-search-input--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Search Input

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <input type="search" value="" placeholder="search" class="topcoat-search-input">
        <input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-search-input,
        +.topcoat-search-input--large {
        +  line-height: 1.313rem;
        +  font-size: 12px;
        +  border: 1px solid #303233;
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +  color: #c6c8c8;
        +  padding: 0 0 0 1.3rem;
        +  border-radius: 15px;
        +  background-image: url("../img/search.svg");
        +  background-position: 1em center;
        +  background-repeat: no-repeat;
        +  background-size: 12px;
        +}
        +
        +.topcoat-search-input:focus,
        +.topcoat-search-input--large:focus {
        +  background-image: url("../img/search_dark.svg");
        +  background-color: #646666;
        +  color: #fff;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-search-input::-webkit-search-cancel-button,
        +.topcoat-search-input::-webkit-search-decoration,
        +.topcoat-search-input--large::-webkit-search-cancel-button,
        +.topcoat-search-input--large::-webkit-search-decoration {
        +  margin-right: 5px;
        +}
        +
        +.topcoat-search-input:focus::-webkit-input-placeholder,
        +.topcoat-search-input:focus::-webkit-input-placeholder {
        +  color: #c6c8c8;
        +}
        +
        +.topcoat-search-input:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Search Input

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <input type="search" value="" placeholder="search" class="topcoat-search-input--large">
        <input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-search-input--large {
        +  line-height: 1.688rem;
        +  font-size: 0.875rem;
        +  font-weight: 400;
        +  padding: 0 0 0 1.8rem;
        +  border-radius: 25px;
        +  background-position: 1.2em center;
        +  background-size: 0.875rem;
        +}
        +
        +.topcoat-search-input--large:disabled {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input--large:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input--large:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input--large:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.switch {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch__input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.switch__toggle {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.switch__toggle:before,
        +.switch__toggle:after {
        +  content: '';
        +  position: absolute;
        +  z-index: -1;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.switch,
        +.topcoat-switch {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch__input,
        +.topcoat-switch__input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.switch__toggle,
        +.topcoat-switch__toggle {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.switch__toggle:before,
        +.switch__toggle:after,
        +.topcoat-switch__toggle:before,
        +.topcoat-switch__toggle:after {
        +  content: '';
        +  position: absolute;
        +  z-index: -1;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch--disabled,
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Switch

        +
        +




        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input">
          <div class="topcoat-switch__toggle"></div>
        </label>
        <br>
        <br>
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input" checked>
          <div class="topcoat-switch__toggle"></div>
        </label>
        <br>
        <br>
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input" disabled>
          <div class="topcoat-switch__toggle"></div>
        </label>
        +
        +
        +

        CSS

        +
        
        +.topcoat-switch {
        +  font-size: 12px;
        +  padding: 0 0.563rem;
        +  border-radius: 4px;
        +  border: 1px solid #303233;
        +  overflow: hidden;
        +  width: 3.5rem;
        +}
        +
        +.topcoat-switch__toggle:before,
        +.topcoat-switch__toggle:after {
        +  top: -1px;
        +  width: 2.6rem;
        +}
        +
        +.topcoat-switch__toggle:before {
        +  content: 'ON';
        +  color: #5dc1ff;
        +  background-color: #404141;
        +  right: 0.8rem;
        +  padding-left: 0.75rem;
        +}
        +
        +.topcoat-switch__toggle {
        +  line-height: 1.313rem;
        +  height: 1.313rem;
        +  width: 1rem;
        +  border-radius: 4px;
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  background-color: #595b5b;
        +  border: 1px solid #303233;
        +  margin-left: -0.6rem;
        +  margin-bottom: -1px;
        +  margin-top: -1px;
        +  box-shadow: inset 0 1px #727373;
        +  -webkit-transition: margin-left 0.05s ease-in-out;
        +  transition: margin-left 0.05s ease-in-out;
        +}
        +
        +.topcoat-switch__toggle:after {
        +  content: 'OFF';
        +  background-color: #404141;
        +  left: 0.8rem;
        +  padding-left: 0.6rem;
        +}
        +
        +.topcoat-switch__input:checked + .topcoat-switch__toggle {
        +  margin-left: 1.85rem;
        +}
        +
        +.topcoat-switch__input:focus + .topcoat-switch__toggle {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
        +  background: transparent;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-tab-bar__button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-tab-bar__button:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.button-bar,
        +.topcoat-tab-bar {
        +  display: table;
        +  table-layout: fixed;
        +  white-space: nowrap;
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +.button-bar__item,
        +.topcoat-tab-bar__item {
        +  display: table-cell;
        +  width: auto;
        +  border-radius: 0;
        +}
        +
        +.button-bar__item > input,
        +.topcoat-tab-bar__item > input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.button-bar__button {
        +  border-radius: inherit;
        +}
        +
        +.button-bar__item:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Tab Bar

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-tab-bar">
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">One</button>
          </label>
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">Two</button>
          </label>
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">Three</button>
          </label>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-tab-bar__button {
        +  padding: 0 0.563rem;
        +  height: 1.313rem;
        +  line-height: 1.313rem;
        +  letter-spacing: 0;
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  vertical-align: top;
        +  background-color: #595b5b;
        +  box-shadow: inset 0 1px #727373;
        +  border-top: 1px solid #303233;
        +}
        +
        +.topcoat-tab-bar__button:active,
        +.topcoat-tab-bar__button--large:active,
        +:checked + .topcoat-tab-bar__button {
        +  color: #5dc1ff;
        +  background-color: #404141;
        +  box-shadow: inset 0 0 2px #313231;
        +}
        +
        +.topcoat-tab-bar__button:focus,
        +.topcoat-tab-bar__button--large:focus {
        +  z-index: 1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.input,
        +.topcoat-text-input,
        +.topcoat-text-input--large {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.input:disabled,
        +.topcoat-text-input:disabled,
        +.topcoat-text-input--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Text input

        +
        +




        +
        + +
        +
        +

        HTML

        +
        <input type="text" class="topcoat-text-input" placeholder="text" value="">
        <br>
        <br>
        <input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
        <br>
        <br>
        <input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
        +
        +
        +

        CSS

        +
        
        +.topcoat-text-input,
        +.topcoat-text-input--large {
        +  line-height: 1.313rem;
        +  font-size: 12px;
        +  letter-spacing: 0;
        +  padding: 0 0.563rem;
        +  border: 1px solid #303233;
        +  border-radius: 4px;
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +  color: #c6c8c8;
        +  vertical-align: top;
        +}
        +
        +.topcoat-text-input:focus,
        +.topcoat-text-input--large:focus {
        +  background-color: #646666;
        +  color: #fff;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-text-input:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input:invalid {
        +  border: 1px solid #d83b75;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Text Input

        +
        +




        +
        + +
        +
        +

        HTML

        +
        <input type="text" class="topcoat-text-input--large" value="" placeholder="text">
        <br>
        <br>
        <input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
        <br>
        <br>
        <input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
        +
        +
        +

        CSS

        +
        
        +.topcoat-text-input--large {
        +  line-height: 1.688rem;
        +  font-size: 0.875rem;
        +}
        +
        +.topcoat-text-input--large:disabled {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input--large:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input--large:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input--large:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input--large:invalid {
        +  border: 1px solid #d83b75;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.textarea {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  vertical-align: top;
        +  resize: none;
        +  outline: none;
        +}
        +
        +.textarea:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.textarea,
        +.topcoat-textarea,
        +.topcoat-textarea--large {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  vertical-align: top;
        +  resize: none;
        +  outline: none;
        +}
        +
        +.textarea:disabled,
        +.topcoat-textarea:disabled,
        +.topcoat-textarea--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Textarea

        +
        +


        +
        + +
        +
        +

        HTML

        +
        <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
        <br>
        <br>
        <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
        +
        +
        +

        CSS

        +
        
        +.topcoat-textarea,
        +.topcoat-textarea--large {
        +  padding: 1rem;
        +  font-size: 1rem;
        +  font-weight: 400;
        +  border-radius: 4px;
        +  line-height: 1.313rem;
        +  border: 1px solid #303233;
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +  color: #c6c8c8;
        +  letter-spacing: 0;
        +}
        +
        +.topcoat-textarea:focus,
        +.topcoat-textarea--large:focus {
        +  background-color: #646666;
        +  color: #fff;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-textarea:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Textarea

        +
        +


        +
        + +
        +
        +

        HTML

        +
        <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
        <br>
        <br>
        <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
        +
        +
        +

        CSS

        +
        
        +.topcoat-textarea--large {
        +  font-size: 1.3rem;
        +  line-height: 1.688rem;
        +}
        +
        +.topcoat-textarea--large:disabled {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea--large:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea--large:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea--large:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Regular.otf");
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Light.otf");
        +  font-weight: 200;
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Semibold.otf");
        +  font-weight: 600;
        +}
        +
        +body {
        +  margin: 0;
        +  padding: 0;
        +  background: #4b4d4e;
        +  color: #000;
        +  font: 16px "Source Sans", helvetica, arial, sans-serif;
        +  font-weight: 200;
        +}
        +
        +:focus {
        +  outline-color: transparent;
        +  outline-style: none;
        +}
        +
        +.topcoat-icon--menu-stack {
        +  background: url("../img/hamburger_light.svg") no-repeat;
        +  background-size: cover;
        +}
        +
        +.quarter {
        +  width: 25%;
        +}
        +
        +.half {
        +  width: 50%;
        +}
        +
        +.three-quarters {
        +  width: 75%;
        +}
        +
        +.third {
        +  width: 33.333%;
        +}
        +
        +.two-thirds {
        +  width: 66.666%;
        +}
        +
        +.full {
        +  width: 100%;
        +}
        +
        +.left {
        +  text-align: left;
        +}
        +
        +.center {
        +  text-align: center;
        +}
        +
        +.right {
        +  text-align: right;
        +}
        +
        +.reset-ui {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +/* This file should include color and image variables corresponding to the dark theme */
        +
        +/* Call To Action */
        +
        +/* Icons */
        +
        +/* Navigation Bar */
        +
        +/* Text Input */
        +
        +/* Search Input */
        +
        +/* List */
        +
        +/* Checkbox */
        +
        +/* Overlay */
        +
        +/* Progress bar */
        +
        +/* Checkbox */
        +
        +/* Radio Button */
        +
        +/* Tab bar */
        +
        +/* Switch */
        +
        +/* Icon Button */
        +
        +/* Navigation bar */
        +
        +/* List */
        +
        +/* Search Input */
        +
        +/* Textarea */
        +
        +/* Checkbox */
        +
        +/* Radio */
        +
        +/* Range input */
        +
        +/* Search Input */
        +
        +/* Switch */
        +
        +/* This file should include color and image variables corresponding to the light theme */
        +
        +/* Call To Action */
        +
        +/* Icons */
        +
        +/* Navigation Bar */
        +
        +/* Text Input */
        +
        +/* List */
        +
        +/* Overlay */
        +
        +/* Progress bar */
        +
        +/* Checkbox */
        +
        +/* Range input */
        +
        +/* Radio Button */
        +
        +/* Tab bar */
        +
        +/* Switch */
        +
        +/* Containers */
        +
        +/* Icon Button */
        +
        +/* Navigation bar */
        +
        +/* List */
        +
        +/* Search Input */
        +
        +/* Text Area */
        +
        +/* Checkbox */
        +
        +/* Radio */
        +
        +/* Range input */
        +
        +/* Search Input */
        +
        +/* Switch */
        +
        +/* Text Input */
        +
        +/* Radio input */
        +
        +/* Overlay */
        +
        +/* Textarea */
        +
        +/* Progress bar container */
        +
        +/* Progress bar progress */
        +
        +/* Search input */
        +
        +/* Switch */
        +
        +/* Notification */
        +
        +
        +
        +
        +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/main.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/main.js new file mode 100755 index 0000000..6dcdbd8 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/main.js @@ -0,0 +1,44 @@ +window.onload = function(){ + var showCodeDivs = document.getElementsByClassName('showcode'); + for (var i = showCodeDivs.length - 1; i >= 0; i--) { + showCodeDivs[i].firstChild.onclick = function(e) { + var element = e.target.parentNode.nextSibling.nextSibling; + var style = window.getComputedStyle(element); + if(style.getPropertyValue('display') == 'none'){ + e.target.innerHTML = 'Hide code snippets'; + element.style.display = 'block'; + } else { + e.target.innerHTML = 'Show code snippets'; + element.style.display = 'none'; + } + return false; + }; + }; + var slideMenuButton = document.getElementById('slide-menu-button'); + slideMenuButton.onclick = function(e) { + var site = document.getElementById('site'); + var cl = site.classList; + if (cl.contains('open')) { + cl.remove('open'); + } else { + cl.add('open'); + } + }; + var docNavs = document.getElementsByClassName('docNav'); + for (var j = docNavs.length - 1; j >= 0; j--) { + docNavs[j].onchange = function(e){ + window.location.href = e.target[e.target.selectedIndex].value; + }; + }; + var pageNav = document.getElementById('pageNav'); + var pageLinks = pageNav.getElementsByTagName('a'); + for (var k = pageLinks.length - 1; k >= 0; k--) { + pageLinks[k].onclick = function(e) { + var site = document.getElementById('site'); + var cl = site.classList; + if (cl.contains('open')) { + cl.remove('open'); + } + }; + }; +} \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/rainbow-custom.min.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/rainbow-custom.min.js new file mode 100755 index 0000000..a25e178 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/js/rainbow-custom.min.js @@ -0,0 +1,11 @@ +/* Rainbow v1.2 rainbowco.de | included languages: html, css */ +window.Rainbow=function(){function q(a){var b,c=a.getAttribute&&a.getAttribute("data-language")||0;if(!c){a=a.attributes;for(b=0;b=f[d][c])delete f[d][c],delete j[d][c];if(a>=c&&ac&&b'+b+""}function s(a,b,c,i){var e=a.exec(c);if(e){++t;!b.name&&"string"==typeof b.matches[0]&&(b.name=b.matches[0],delete b.matches[0]);var k=e[0],g=e.index,u=e[0].length+g,h=function(){function e(){s(a,b,c,i)}t%100>0?e():setTimeout(e,0)};if(C(g,u))h();else{var m=v(b.matches),l=function(a,c,i){if(a>=c.length)i(k);else{var d=e[c[a]];if(d){var g=b.matches[c[a]],f=g.language,h=g.name&&g.matches? +g.matches:g,j=function(b,d,g){var f;f=0;var h;for(h=1;h/g,">").replace(/&(?![\w\#]+;)/g, +"&"),b,c)}function o(a,b,c){if(b + + + + + Topcoat + + + + + + + +
        + +
        +
        +
        +
        +

        Topcoat

        +

        CSS for clean and fast web apps

        +
        + +
        +
        +
        +
        +
        +

        Button Bar

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-button-bar">
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">One</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">Two</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">Three</button>
          </div>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button-bar > .topcoat-button-bar__item:first-child {
        +  border-top-left-radius: 4px;
        +  border-bottom-left-radius: 4px;
        +}
        +
        +.topcoat-button-bar > .topcoat-button-bar__item:last-child {
        +  border-top-right-radius: 4px;
        +  border-bottom-right-radius: 4px;
        +}
        +
        +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
        +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
        +  border-right: none;
        +}
        +
        +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
        +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
        +  border-left: none;
        +}
        +
        +.topcoat-button-bar__button {
        +  border-radius: inherit;
        +}
        +
        +.topcoat-button-bar__button:focus,
        +.topcoat-button-bar__button--large:focus {
        +  z-index: 1;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Button Bar

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-button-bar">
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">One</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">Two</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">Three</button>
          </div>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button-bar__button--large {
        +  border-radius: inherit;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-button,
        +.topcoat-button--quiet,
        +.topcoat-button--large,
        +.topcoat-button--large--quiet,
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-button:disabled,
        +.topcoat-button--quiet:disabled,
        +.topcoat-button--large:disabled,
        +.topcoat-button--large--quiet:disabled,
        +.topcoat-button--cta:disabled,
        +.topcoat-button--large--cta:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Button

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button">Button</button>
        <button class="topcoat-button" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button,
        +.topcoat-button--quiet,
        +.topcoat-button--large,
        +.topcoat-button--large--quiet,
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  padding: 0 0.563rem;
        +  font-size: 12px;
        +  line-height: 1.313rem;
        +  letter-spacing: 0;
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  vertical-align: top;
        +  background-color: #e5e9e8;
        +  box-shadow: inset 0 1px #fff;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 4px;
        +}
        +
        +.topcoat-button:hover,
        +.topcoat-button--quiet:hover,
        +.topcoat-button--large:hover,
        +.topcoat-button--large--quiet:hover {
        +  background-color: #edf1f1;
        +}
        +
        +.topcoat-button:active,
        +.topcoat-button--large:active {
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +.topcoat-button:focus,
        +.topcoat-button--quiet:focus,
        +.topcoat-button--large:focus,
        +.topcoat-button--large--quiet:focus,
        +.topcoat-button--cta:focus,
        +.topcoat-button--large--cta:focus {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +  outline: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Quiet Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--quiet">Button</button>
        <button class="topcoat-button--quiet" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-button--quiet:hover,
        +.topcoat-button--large--quiet:hover {
        +  text-shadow: 0 1px #fff;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-button--quiet:active,
        +.topcoat-button--large--quiet:active {
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  background-color: #d3d7d7;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large" >Button</button>
        <button class="topcoat-button--large" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large,
        +.topcoat-button--large--quiet {
        +  font-size: 0.875rem;
        +  font-weight: 600;
        +  line-height: 1.688rem;
        +  padding: 0 0.875rem;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Quiet Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large--quiet" >Button</button>
        <button class="topcoat-button--large--quiet" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Call To Action Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--cta" >Button</button>
        <button class="topcoat-button--cta" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  border: 1px solid #143250;
        +  background-color: #288edf;
        +  box-shadow: inset 0 1px rgba(255,255,255,0.36);
        +  color: #fff;
        +  font-weight: 500;
        +  text-shadow: 0 -1px rgba(0,0,0,0.36);
        +}
        +
        +.topcoat-button--cta:hover,
        +.topcoat-button--large--cta:hover {
        +  background-color: #509bef;
        +}
        +
        +.topcoat-button--cta:active,
        +.topcoat-button--large--cta:active {
        +  background-color: #0380e8;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Call To Action Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large--cta" >Button</button>
        <button class="topcoat-button--large--cta" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large--cta {
        +  font-size: 0.875rem;
        +  font-weight: 600;
        +  line-height: 1.688rem;
        +  padding: 0 0.875rem;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="checkbox"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.checkbox {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox__label {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.checkbox:before,
        +.checkbox:after {
        +  content: '';
        +  position: absolute;
        +}
        +
        +.checkbox:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="checkbox"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.checkbox,
        +.topcoat-checkbox__checkmark {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox__label,
        +.topcoat-checkbox {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox--disabled,
        +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.checkbox:before,
        +.checkbox:after,
        +.topcoat-checkbox__checkmark:before,
        +.topcoat-checkbox__checkmark:after {
        +  content: '';
        +  position: absolute;
        +}
        +
        +.checkbox:before,
        +.topcoat-checkbox__checkmark:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Checkbox

        +
        +


        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <label class="topcoat-checkbox">
          <input type="checkbox">
          <div class="topcoat-checkbox__checkmark"></div>
          Default
        </label>
        <br>
        <br>
        <label class="topcoat-checkbox">
          <input type="checkbox" disabled>
          <div class="topcoat-checkbox__checkmark"></div>
          Disabled
        </label>
        +
        +
        +

        CSS

        +
        
        +.topcoat-checkbox__checkmark {
        +  height: 1rem;
        +}
        +
        +input[type="checkbox"] {
        +  height: 1rem;
        +  width: 1rem;
        +  margin-top: 0;
        +  margin-right: -1rem;
        +  margin-bottom: -1rem;
        +  margin-left: 0;
        +}
        +
        +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
        +  opacity: 1;
        +}
        +
        +.topcoat-checkbox {
        +  line-height: 1rem;
        +}
        +
        +.topcoat-checkbox__checkmark:before {
        +  width: 1rem;
        +  height: 1rem;
        +  background: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 3px;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-checkbox__checkmark {
        +  width: 1rem;
        +  height: 1rem;
        +}
        +
        +.topcoat-checkbox__checkmark:after {
        +  top: 2px;
        +  left: 1px;
        +  opacity: 0;
        +  width: 14px;
        +  height: 4px;
        +  background: transparent;
        +  border: 7px solid #666;
        +  border-width: 3px;
        +  border-top: none;
        +  border-right: none;
        +  border-radius: 1px;
        +  -webkit-transform: rotate(-50deg);
        +  -ms-transform: rotate(-50deg);
        +  transform: rotate(-50deg);
        +}
        +
        +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-icon-button,
        +.topcoat-icon-button--quiet,
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-icon-button:disabled,
        +.topcoat-icon-button--quiet:disabled,
        +.topcoat-icon-button--large:disabled,
        +.topcoat-icon-button--large--quiet:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button">
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button" disabled>
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button,
        +.topcoat-icon-button--quiet,
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  padding: 0 0.25rem;
        +  line-height: 1.313rem;
        +  letter-spacing: 0;
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  vertical-align: baseline;
        +  background-color: #e5e9e8;
        +  box-shadow: inset 0 1px #fff;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 4px;
        +}
        +
        +.topcoat-icon-button:hover,
        +.topcoat-icon-button--quiet:hover,
        +.topcoat-icon-button--large:hover,
        +.topcoat-icon-button--large--quiet:hover {
        +  background-color: #edf1f1;
        +}
        +
        +.topcoat-icon-button:active {
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +.topcoat-icon-button:focus,
        +.topcoat-icon-button--quiet:focus,
        +.topcoat-icon-button--quiet:hover:focus,
        +.topcoat-icon-button--large:focus,
        +.topcoat-icon-button--large--quiet:focus,
        +.topcoat-icon-button--large--quiet:hover:focus {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +  outline: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Quiet Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--quiet">
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--quiet" disabled>
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-icon-button--quiet:hover,
        +.topcoat-icon-button--large--quiet:hover {
        +  text-shadow: 0 1px #fff;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-icon-button--quiet:active,
        +.topcoat-icon-button--large--quiet:active {
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  background-color: #d3d7d7;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--large">
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--large" disabled>
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  width: 1.688rem;
        +  height: 1.688rem;
        +  line-height: 1.688rem;
        +}
        +
        +.topcoat-icon-button--large:active {
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Quiet Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--large--quiet">
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--large--quiet" disabled>
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--large--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-icon,
        +.topcoat-icon--large {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  overflow: hidden;
        +  width: 0.81406rem;
        +  height: 0.81406rem;
        +  vertical-align: middle;
        +  top: -1px;
        +}
        +
        +.topcoat-icon--large {
        +  width: 1.06344rem;
        +  height: 1.06344rem;
        +  top: -2px;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.input {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.input:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.list {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  overflow: auto;
        +  -webkit-overflow-scrolling: touch;
        +}
        +
        +.list__header {
        +  margin: 0;
        +}
        +
        +.list__container {
        +  padding: 0;
        +  margin: 0;
        +  list-style-type: none;
        +}
        +
        +.list__item {
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.navigation-bar {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  word-spacing: 0;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.navigation-bar__item {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +}
        +
        +.navigation-bar__title {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.notification {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.notification,
        +.topcoat-notification {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Notification

        +
        +
        1
        +
        + +
        +
        +

        HTML

        +
        <span class="topcoat-notification">1</span>
        +
        +
        +

        CSS

        +
        
        +.topcoat-notification {
        +  padding: 0.15em 0.5em 0.2em;
        +  border-radius: 2px;
        +  background-color: #ec514e;
        +  color: #fff;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="radio"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.radio-button {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button__label {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button:before,
        +.radio-button:after {
        +  content: '';
        +  position: absolute;
        +  border-radius: 100%;
        +}
        +
        +.radio-button:after {
        +  top: 50%;
        +  left: 50%;
        +  -webkit-transform: translate(-50%, -50%);
        +  -ms-transform: translate(-50%, -50%);
        +  transform: translate(-50%, -50%);
        +}
        +
        +.radio-button:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.radio-button--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="radio"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.radio-button,
        +.topcoat-radio-button__checkmark {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button__label,
        +.topcoat-radio-button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button:before,
        +.radio-button:after,
        +.topcoat-radio-button__checkmark:before,
        +.topcoat-radio-button__checkmark:after {
        +  content: '';
        +  position: absolute;
        +  border-radius: 100%;
        +}
        +
        +.radio-button:after,
        +.topcoat-radio-button__checkmark:after {
        +  top: 50%;
        +  left: 50%;
        +  -webkit-transform: translate(-50%, -50%);
        +  -ms-transform: translate(-50%, -50%);
        +  transform: translate(-50%, -50%);
        +}
        +
        +.radio-button:before,
        +.topcoat-radio-button__checkmark:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.radio-button--disabled,
        +input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Radio Button

        +
        +






        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <!-- NO LABEL -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
        </label>
        <br>
        <br>
        <!-- LEFT LABEL -->
        <label class="topcoat-radio-button">
          Left label
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
        </label>
        <br>
        <br>
        <!-- RIGHT LABEL -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
          Right label
        </label>
        <br>
        <br>
        <!-- DISABLED -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat" Disabled>
          <div class="topcoat-radio-button__checkmark"></div>
          Disabled
        </label>
        +
        +
        +

        CSS

        +
        
        +input[type="radio"] {
        +  height: 1.063rem;
        +  width: 1.063rem;
        +  margin-top: 0;
        +  margin-right: -1.063rem;
        +  margin-bottom: -1.063rem;
        +  margin-left: 0;
        +}
        +
        +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
        +  opacity: 1;
        +}
        +
        +.topcoat-radio-button {
        +  color: #454545;
        +  line-height: 1.063rem;
        +}
        +
        +.topcoat-radio-button__checkmark:before {
        +  width: 1.063rem;
        +  height: 1.063rem;
        +  background: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-radio-button__checkmark {
        +  position: relative;
        +  width: 1.063rem;
        +  height: 1.063rem;
        +}
        +
        +.topcoat-radio-button__checkmark:after {
        +  opacity: 0;
        +  width: 0.313rem;
        +  height: 0.313rem;
        +  background: #666;
        +  border: 1px solid rgba(0,0,0,0.1);
        +  box-shadow: 0 1px rgba(255,255,255,0.5);
        +  -webkit-transform: none;
        +  -ms-transform: none;
        +  transform: none;
        +  top: 0.313rem;
        +  left: 0.313rem;
        +}
        +
        +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +.range {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +.range__thumb {
        +  cursor: pointer;
        +}
        +
        +.range__thumb--webkit {
        +  cursor: pointer;
        +  -webkit-appearance: none;
        +}
        +
        +.range:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +.range,
        +.topcoat-range {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +.range__thumb,
        +.topcoat-range::-moz-range-thumb {
        +  cursor: pointer;
        +}
        +
        +.range__thumb--webkit,
        +.topcoat-range::-webkit-slider-thumb {
        +  cursor: pointer;
        +  -webkit-appearance: none;
        +}
        +
        +.range:disabled,
        +.topcoat-range:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Range

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <input type="range" class="topcoat-range">
        <input type="range" class="topcoat-range" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-range {
        +  border-radius: 4px;
        +  border: 1px solid #a5a8a8;
        +  background-color: #d3d7d7;
        +  height: 0.5rem;
        +  border-radius: 15px;
        +}
        +
        +.topcoat-range::-moz-range-track {
        +  border-radius: 4px;
        +  border: 1px solid #a5a8a8;
        +  background-color: #d3d7d7;
        +  height: 0.5rem;
        +  border-radius: 15px;
        +}
        +
        +.topcoat-range::-webkit-slider-thumb {
        +  height: 1.313rem;
        +  width: 0.75rem;
        +  background-color: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 4px;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-range::-moz-range-thumb {
        +  height: 1.313rem;
        +  width: 0.75rem;
        +  background-color: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 4px;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-range:focus::-webkit-slider-thumb {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-range:focus::-moz-range-thumb {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.search-input {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +input[type="search"]::-webkit-search-cancel-button {
        +  -webkit-appearance: none;
        +}
        +
        +.search-input:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.search-input,
        +.topcoat-search-input,
        +.topcoat-search-input--large {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +input[type="search"]::-webkit-search-cancel-button {
        +  -webkit-appearance: none;
        +}
        +
        +.search-input:disabled,
        +.topcoat-search-input:disabled,
        +.topcoat-search-input--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Search Input

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <input type="search" value="" placeholder="search" class="topcoat-search-input">
        <input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-search-input,
        +.topcoat-search-input--large {
        +  line-height: 1.313rem;
        +  font-size: 12px;
        +  border: 1px solid #a5a8a8;
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +  color: #454545;
        +  padding: 0 0 0 1.3rem;
        +  border-radius: 15px;
        +  background-image: url("../img/search.svg");
        +  background-position: 1em center;
        +  background-repeat: no-repeat;
        +  background-size: 12px;
        +}
        +
        +.topcoat-search-input:focus,
        +.topcoat-search-input--large:focus {
        +  background-image: url("../img/search_dark.svg");
        +  background-color: #edf1f1;
        +  color: #000;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-search-input::-webkit-search-cancel-button,
        +.topcoat-search-input::-webkit-search-decoration,
        +.topcoat-search-input--large::-webkit-search-cancel-button,
        +.topcoat-search-input--large::-webkit-search-decoration {
        +  margin-right: 5px;
        +}
        +
        +.topcoat-search-input:focus::-webkit-input-placeholder,
        +.topcoat-search-input:focus::-webkit-input-placeholder {
        +  color: #c6c8c8;
        +}
        +
        +.topcoat-search-input:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-search-input:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-search-input:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Search Input

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <input type="search" value="" placeholder="search" class="topcoat-search-input--large">
        <input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-search-input--large {
        +  line-height: 1.688rem;
        +  font-size: 0.875rem;
        +  font-weight: 400;
        +  padding: 0 0 0 1.8rem;
        +  border-radius: 25px;
        +  background-position: 1.2em center;
        +  background-size: 0.875rem;
        +}
        +
        +.topcoat-search-input--large:disabled {
        +  color: #000;
        +}
        +
        +.topcoat-search-input--large:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-search-input--large:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-search-input--large:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.switch {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch__input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.switch__toggle {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.switch__toggle:before,
        +.switch__toggle:after {
        +  content: '';
        +  position: absolute;
        +  z-index: -1;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.switch,
        +.topcoat-switch {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch__input,
        +.topcoat-switch__input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.switch__toggle,
        +.topcoat-switch__toggle {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.switch__toggle:before,
        +.switch__toggle:after,
        +.topcoat-switch__toggle:before,
        +.topcoat-switch__toggle:after {
        +  content: '';
        +  position: absolute;
        +  z-index: -1;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch--disabled,
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Switch

        +
        +




        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input">
          <div class="topcoat-switch__toggle"></div>
        </label>
        <br>
        <br>
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input" checked>
          <div class="topcoat-switch__toggle"></div>
        </label>
        <br>
        <br>
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input" disabled>
          <div class="topcoat-switch__toggle"></div>
        </label>
        +
        +
        +

        CSS

        +
        
        +.topcoat-switch {
        +  font-size: 12px;
        +  padding: 0 0.563rem;
        +  border-radius: 4px;
        +  border: 1px solid #a5a8a8;
        +  overflow: hidden;
        +  width: 3.5rem;
        +}
        +
        +.topcoat-switch__toggle:before,
        +.topcoat-switch__toggle:after {
        +  top: -1px;
        +  width: 2.6rem;
        +}
        +
        +.topcoat-switch__toggle:before {
        +  content: 'ON';
        +  color: #0083e8;
        +  background-color: #e0f0fa;
        +  right: 0.8rem;
        +  padding-left: 0.75rem;
        +}
        +
        +.topcoat-switch__toggle {
        +  line-height: 1.313rem;
        +  height: 1.313rem;
        +  width: 1rem;
        +  border-radius: 4px;
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  background-color: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  margin-left: -0.6rem;
        +  margin-bottom: -1px;
        +  margin-top: -1px;
        +  box-shadow: inset 0 1px #fff;
        +  -webkit-transition: margin-left 0.05s ease-in-out;
        +  transition: margin-left 0.05s ease-in-out;
        +}
        +
        +.topcoat-switch__toggle:after {
        +  content: 'OFF';
        +  background-color: #d3d7d7;
        +  left: 0.8rem;
        +  padding-left: 0.6rem;
        +}
        +
        +.topcoat-switch__input:checked + .topcoat-switch__toggle {
        +  margin-left: 1.85rem;
        +}
        +
        +.topcoat-switch__input:focus + .topcoat-switch__toggle {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
        +  background: transparent;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-tab-bar__button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-tab-bar__button:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.button-bar,
        +.topcoat-tab-bar {
        +  display: table;
        +  table-layout: fixed;
        +  white-space: nowrap;
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +.button-bar__item,
        +.topcoat-tab-bar__item {
        +  display: table-cell;
        +  width: auto;
        +  border-radius: 0;
        +}
        +
        +.button-bar__item > input,
        +.topcoat-tab-bar__item > input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.button-bar__button {
        +  border-radius: inherit;
        +}
        +
        +.button-bar__item:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Tab Bar

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-tab-bar">
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">One</button>
          </label>
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">Two</button>
          </label>
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">Three</button>
          </label>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-tab-bar__button {
        +  padding: 0 0.563rem;
        +  height: 1.313rem;
        +  line-height: 1.313rem;
        +  letter-spacing: 0;
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  vertical-align: top;
        +  background-color: #e5e9e8;
        +  box-shadow: inset 0 1px #fff;
        +  border-top: 1px solid #a5a8a8;
        +}
        +
        +.topcoat-tab-bar__button:active,
        +.topcoat-tab-bar__button--large:active,
        +:checked + .topcoat-tab-bar__button {
        +  color: #0083e8;
        +  background-color: #e0f0fa;
        +  box-shadow: inset 0 0 2px #c0ced8;
        +}
        +
        +.topcoat-tab-bar__button:focus,
        +.topcoat-tab-bar__button--large:focus {
        +  z-index: 1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.input,
        +.topcoat-text-input,
        +.topcoat-text-input--large {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.input:disabled,
        +.topcoat-text-input:disabled,
        +.topcoat-text-input--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Text input

        +
        +




        +
        + +
        +
        +

        HTML

        +
        <input type="text" class="topcoat-text-input" placeholder="text" value="">
        <br>
        <br>
        <input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
        <br>
        <br>
        <input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
        +
        +
        +

        CSS

        +
        
        +.topcoat-text-input,
        +.topcoat-text-input--large {
        +  line-height: 1.313rem;
        +  font-size: 12px;
        +  letter-spacing: 0;
        +  padding: 0 0.563rem;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 4px;
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +  color: #454545;
        +  vertical-align: top;
        +}
        +
        +.topcoat-text-input:focus,
        +.topcoat-text-input--large:focus {
        +  background-color: #edf1f1;
        +  color: #000;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-text-input:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input:invalid {
        +  border: 1px solid #d83b75;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Text Input

        +
        +




        +
        + +
        +
        +

        HTML

        +
        <input type="text" class="topcoat-text-input--large" value="" placeholder="text">
        <br>
        <br>
        <input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
        <br>
        <br>
        <input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
        +
        +
        +

        CSS

        +
        
        +.topcoat-text-input--large {
        +  line-height: 1.688rem;
        +  font-size: 0.875rem;
        +}
        +
        +.topcoat-text-input--large:disabled {
        +  color: #000;
        +}
        +
        +.topcoat-text-input--large:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input--large:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input--large:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input--large:invalid {
        +  border: 1px solid #d83b75;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.textarea {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  vertical-align: top;
        +  resize: none;
        +  outline: none;
        +}
        +
        +.textarea:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.textarea,
        +.topcoat-textarea,
        +.topcoat-textarea--large {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  vertical-align: top;
        +  resize: none;
        +  outline: none;
        +}
        +
        +.textarea:disabled,
        +.topcoat-textarea:disabled,
        +.topcoat-textarea--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Textarea

        +
        +


        +
        + +
        +
        +

        HTML

        +
        <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
        <br>
        <br>
        <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
        +
        +
        +

        CSS

        +
        
        +.topcoat-textarea,
        +.topcoat-textarea--large {
        +  padding: 1rem;
        +  font-size: 1rem;
        +  font-weight: 400;
        +  border-radius: 4px;
        +  line-height: 1.313rem;
        +  border: 1px solid #a5a8a8;
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +  color: #454545;
        +  letter-spacing: 0;
        +}
        +
        +.topcoat-textarea:focus,
        +.topcoat-textarea--large:focus {
        +  background-color: #edf1f1;
        +  color: #000;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-textarea:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-textarea:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-textarea:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Textarea

        +
        +


        +
        + +
        +
        +

        HTML

        +
        <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
        <br>
        <br>
        <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
        +
        +
        +

        CSS

        +
        
        +.topcoat-textarea--large {
        +  font-size: 1.3rem;
        +  line-height: 1.688rem;
        +}
        +
        +.topcoat-textarea--large:disabled {
        +  color: #000;
        +}
        +
        +.topcoat-textarea--large:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-textarea--large:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-textarea--large:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Regular.otf");
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Light.otf");
        +  font-weight: 200;
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Semibold.otf");
        +  font-weight: 600;
        +}
        +
        +body {
        +  margin: 0;
        +  padding: 0;
        +  background: #dfe2e2;
        +  color: #000;
        +  font: 16px "Source Sans", helvetica, arial, sans-serif;
        +  font-weight: 200;
        +}
        +
        +:focus {
        +  outline-color: transparent;
        +  outline-style: none;
        +}
        +
        +.topcoat-icon--menu-stack {
        +  background: url("../img/hamburger_dark.svg") no-repeat;
        +  background-size: cover;
        +}
        +
        +.quarter {
        +  width: 25%;
        +}
        +
        +.half {
        +  width: 50%;
        +}
        +
        +.three-quarters {
        +  width: 75%;
        +}
        +
        +.third {
        +  width: 33.333%;
        +}
        +
        +.two-thirds {
        +  width: 66.666%;
        +}
        +
        +.full {
        +  width: 100%;
        +}
        +
        +.left {
        +  text-align: left;
        +}
        +
        +.center {
        +  text-align: center;
        +}
        +
        +.right {
        +  text-align: right;
        +}
        +
        +.reset-ui {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +/* This file should include color and image variables corresponding to the dark theme */
        +
        +/* Call To Action */
        +
        +/* Icons */
        +
        +/* Navigation Bar */
        +
        +/* Text Input */
        +
        +/* Search Input */
        +
        +/* List */
        +
        +/* Checkbox */
        +
        +/* Overlay */
        +
        +/* Progress bar */
        +
        +/* Checkbox */
        +
        +/* Radio Button */
        +
        +/* Tab bar */
        +
        +/* Switch */
        +
        +/* Icon Button */
        +
        +/* Navigation bar */
        +
        +/* List */
        +
        +/* Search Input */
        +
        +/* Textarea */
        +
        +/* Checkbox */
        +
        +/* Radio */
        +
        +/* Range input */
        +
        +/* Search Input */
        +
        +/* Switch */
        +
        +/* This file should include color and image variables corresponding to the light theme */
        +
        +/* Call To Action */
        +
        +/* Icons */
        +
        +/* Navigation Bar */
        +
        +/* Text Input */
        +
        +/* List */
        +
        +/* Overlay */
        +
        +/* Progress bar */
        +
        +/* Checkbox */
        +
        +/* Range input */
        +
        +/* Radio Button */
        +
        +/* Tab bar */
        +
        +/* Switch */
        +
        +/* Containers */
        +
        +/* Icon Button */
        +
        +/* Navigation bar */
        +
        +/* List */
        +
        +/* Search Input */
        +
        +/* Text Area */
        +
        +/* Checkbox */
        +
        +/* Radio */
        +
        +/* Range input */
        +
        +/* Search Input */
        +
        +/* Switch */
        +
        +/* Text Input */
        +
        +/* Radio input */
        +
        +/* Overlay */
        +
        +/* Textarea */
        +
        +/* Progress bar container */
        +
        +/* Progress bar progress */
        +
        +/* Search input */
        +
        +/* Switch */
        +
        +/* Notification */
        +
        +
        +
        +
        +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-mobile-dark.html b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-mobile-dark.html new file mode 100755 index 0000000..327aeae --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-mobile-dark.html @@ -0,0 +1,3417 @@ + + + + + + Topcoat + + + + + + + +
        + +
        +
        +
        +
        +

        Topcoat

        +

        CSS for clean and fast web apps

        +
        + +
        +
        +
        +
        +
        +

        Button Bar

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-button-bar">
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">One</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">Two</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">Three</button>
          </div>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button-bar > .topcoat-button-bar__item:first-child {
        +  border-top-left-radius: 6px;
        +  border-bottom-left-radius: 6px;
        +}
        +
        +.topcoat-button-bar > .topcoat-button-bar__item:last-child {
        +  border-top-right-radius: 6px;
        +  border-bottom-right-radius: 6px;
        +}
        +
        +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
        +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
        +  border-right: none;
        +}
        +
        +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
        +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
        +  border-left: none;
        +}
        +
        +.topcoat-button-bar__button {
        +  border-radius: inherit;
        +}
        +
        +.topcoat-button-bar__button:focus,
        +.topcoat-button-bar__button--large:focus {
        +  z-index: 1;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Button Bar

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-button-bar">
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">One</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">Two</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">Three</button>
          </div>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button-bar__button--large {
        +  border-radius: inherit;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-button,
        +.topcoat-button--quiet,
        +.topcoat-button--large,
        +.topcoat-button--large--quiet,
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-button:disabled,
        +.topcoat-button--quiet:disabled,
        +.topcoat-button--large:disabled,
        +.topcoat-button--large--quiet:disabled,
        +.topcoat-button--cta:disabled,
        +.topcoat-button--large--cta:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Button

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button">Button</button>
        <button class="topcoat-button" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button,
        +.topcoat-button--quiet,
        +.topcoat-button--large,
        +.topcoat-button--large--quiet,
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  padding: 0 1.25rem;
        +  font-size: 16px;
        +  line-height: 3rem;
        +  letter-spacing: 1px;
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  vertical-align: top;
        +  background-color: #595b5b;
        +  box-shadow: inset 0 1px #727373;
        +  border: 1px solid #303233;
        +  border-radius: 6px;
        +}
        +
        +.topcoat-button:hover,
        +.topcoat-button--quiet:hover,
        +.topcoat-button--large:hover,
        +.topcoat-button--large--quiet:hover {
        +  background-color: #646666;
        +}
        +
        +.topcoat-button:active,
        +.topcoat-button--large:active {
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +.topcoat-button:focus,
        +.topcoat-button--quiet:focus,
        +.topcoat-button--large:focus,
        +.topcoat-button--large--quiet:focus,
        +.topcoat-button--cta:focus,
        +.topcoat-button--large--cta:focus {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +  outline: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Quiet Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--quiet">Button</button>
        <button class="topcoat-button--quiet" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-button--quiet:hover,
        +.topcoat-button--large--quiet:hover {
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-button--quiet:active,
        +.topcoat-button--large--quiet:active {
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  background-color: #404141;
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large" >Button</button>
        <button class="topcoat-button--large" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large,
        +.topcoat-button--large--quiet {
        +  font-size: 1.3rem;
        +  font-weight: 400;
        +  line-height: 4.375rem;
        +  padding: 0 1.25rem;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Quiet Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large--quiet" >Button</button>
        <button class="topcoat-button--large--quiet" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Call To Action Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--cta" >Button</button>
        <button class="topcoat-button--cta" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  border: 1px solid #143250;
        +  background-color: #288edf;
        +  box-shadow: inset 0 1px rgba(255,255,255,0.36);
        +  color: #fff;
        +  font-weight: 500;
        +  text-shadow: 0 -1px rgba(0,0,0,0.36);
        +}
        +
        +.topcoat-button--cta:hover,
        +.topcoat-button--large--cta:hover {
        +  background-color: #509bef;
        +}
        +
        +.topcoat-button--cta:active,
        +.topcoat-button--large--cta:active {
        +  background-color: #1976c3;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Call To Action Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large--cta" >Button</button>
        <button class="topcoat-button--large--cta" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large--cta {
        +  font-size: 1.3rem;
        +  font-weight: 400;
        +  line-height: 4.375rem;
        +  padding: 0 1.25rem;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="checkbox"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.checkbox {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox__label {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.checkbox:before,
        +.checkbox:after {
        +  content: '';
        +  position: absolute;
        +}
        +
        +.checkbox:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="checkbox"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.checkbox,
        +.topcoat-checkbox__checkmark {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox__label,
        +.topcoat-checkbox {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox--disabled,
        +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.checkbox:before,
        +.checkbox:after,
        +.topcoat-checkbox__checkmark:before,
        +.topcoat-checkbox__checkmark:after {
        +  content: '';
        +  position: absolute;
        +}
        +
        +.checkbox:before,
        +.topcoat-checkbox__checkmark:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Checkbox

        +
        +


        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <label class="topcoat-checkbox">
          <input type="checkbox">
          <div class="topcoat-checkbox__checkmark"></div>
          Default
        </label>
        <br>
        <br>
        <label class="topcoat-checkbox">
          <input type="checkbox" disabled>
          <div class="topcoat-checkbox__checkmark"></div>
          Disabled
        </label>
        +
        +
        +

        CSS

        +
        
        +.topcoat-checkbox__checkmark {
        +  height: 2rem;
        +}
        +
        +input[type="checkbox"] {
        +  height: 2rem;
        +  width: 2rem;
        +  margin-top: 0;
        +  margin-right: -2rem;
        +  margin-bottom: -2rem;
        +  margin-left: 0;
        +}
        +
        +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
        +  opacity: 1;
        +}
        +
        +.topcoat-checkbox {
        +  line-height: 2rem;
        +}
        +
        +.topcoat-checkbox__checkmark:before {
        +  width: 2rem;
        +  height: 2rem;
        +  background: #595b5b;
        +  border: 1px solid #303233;
        +  border-radius: 3px;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-checkbox__checkmark {
        +  width: 2rem;
        +  height: 2rem;
        +}
        +
        +.topcoat-checkbox__checkmark:after {
        +  top: 1px;
        +  left: 2px;
        +  opacity: 0;
        +  width: 28px;
        +  height: 11px;
        +  background: transparent;
        +  border: 7px solid #fff;
        +  border-width: 7px;
        +  border-top: none;
        +  border-right: none;
        +  border-radius: 2px;
        +  -webkit-transform: rotate(-50deg);
        +  -ms-transform: rotate(-50deg);
        +  transform: rotate(-50deg);
        +}
        +
        +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-icon-button,
        +.topcoat-icon-button--quiet,
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-icon-button:disabled,
        +.topcoat-icon-button--quiet:disabled,
        +.topcoat-icon-button--large:disabled,
        +.topcoat-icon-button--large--quiet:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button">
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button" disabled>
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button,
        +.topcoat-icon-button--quiet,
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  padding: 0 0.75rem;
        +  line-height: 3rem;
        +  letter-spacing: 1px;
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  vertical-align: baseline;
        +  background-color: #595b5b;
        +  box-shadow: inset 0 1px #727373;
        +  border: 1px solid #303233;
        +  border-radius: 6px;
        +}
        +
        +.topcoat-icon-button:hover,
        +.topcoat-icon-button--quiet:hover,
        +.topcoat-icon-button--large:hover,
        +.topcoat-icon-button--large--quiet:hover {
        +  background-color: #646666;
        +}
        +
        +.topcoat-icon-button:active {
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +.topcoat-icon-button:focus,
        +.topcoat-icon-button--quiet:focus,
        +.topcoat-icon-button--quiet:hover:focus,
        +.topcoat-icon-button--large:focus,
        +.topcoat-icon-button--large--quiet:focus,
        +.topcoat-icon-button--large--quiet:hover:focus {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +  outline: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Quiet Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--quiet">
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--quiet" disabled>
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-icon-button--quiet:hover,
        +.topcoat-icon-button--large--quiet:hover {
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-icon-button--quiet:active,
        +.topcoat-icon-button--large--quiet:active {
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  background-color: #404141;
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--large">
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--large" disabled>
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  width: 4.375rem;
        +  height: 4.375rem;
        +  line-height: 4.375rem;
        +}
        +
        +.topcoat-icon-button--large:active {
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Quiet Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--large--quiet">
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--large--quiet" disabled>
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--large--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-icon,
        +.topcoat-icon--large {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  overflow: hidden;
        +  width: 1.62rem;
        +  height: 1.62rem;
        +  vertical-align: middle;
        +  top: -1px;
        +}
        +
        +.topcoat-icon--large {
        +  width: 2.499999998125rem;
        +  height: 2.499999998125rem;
        +  top: -2px;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.input {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.input:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.list {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  overflow: auto;
        +  -webkit-overflow-scrolling: touch;
        +}
        +
        +.list__header {
        +  margin: 0;
        +}
        +
        +.list__container {
        +  padding: 0;
        +  margin: 0;
        +  list-style-type: none;
        +}
        +
        +.list__item {
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.list,
        +.topcoat-list {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  overflow: auto;
        +  -webkit-overflow-scrolling: touch;
        +}
        +
        +.list__header,
        +.topcoat-list__header {
        +  margin: 0;
        +}
        +
        +.list__container,
        +.topcoat-list__container {
        +  padding: 0;
        +  margin: 0;
        +  list-style-type: none;
        +}
        +
        +.list__item,
        +.topcoat-list__item {
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        List

        +
        +

        Category

        • Item
        • Item
        • Item
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-list">
          <h3 class="topcoat-list__header">Category</h3>
          <ul class="topcoat-list__container">
            <li class="topcoat-list__item">
              Item
            </li>
            <li class="topcoat-list__item">
              Item
            </li>
            <li class="topcoat-list__item">
              Item
            </li>
          </ul>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-list {
        +  border-top: 1px solid #2f3234;
        +  border-bottom: 1px solid #5e6061;
        +  background-color: #444849;
        +}
        +
        +.topcoat-list__header {
        +  padding: 4px 20px;
        +  font-size: 0.9em;
        +  font-weight: 400;
        +  background-color: #3b3e40;
        +  color: #868888;
        +  text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
        +  border-top: solid 1px rgba(255,255,255,0.1);
        +  border-bottom: solid 1px rgba(255,255,255,0.05);
        +}
        +
        +.topcoat-list__container {
        +  border-top: 1px solid #2f3234;
        +  color: #c6c8c8;
        +}
        +
        +.topcoat-list__item {
        +  padding: 1.25rem;
        +  border-top: 1px solid #5e6061;
        +  border-bottom: 1px solid #2f3234;
        +}
        +
        +.topcoat-list__item:first-child {
        +  border-top: 1px solid rgba(0,0,0,0.05);
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.navigation-bar {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  word-spacing: 0;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.navigation-bar__item {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +}
        +
        +.navigation-bar__title {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.navigation-bar,
        +.topcoat-navigation-bar {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  word-spacing: 0;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.navigation-bar__item,
        +.topcoat-navigation-bar__item {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +}
        +
        +.navigation-bar__title,
        +.topcoat-navigation-bar__title {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +
        +
        +
        +
        + +
        +
        +

        Notification

        +
        +
        1
        +
        + +
        +
        +

        HTML

        +
        <span class="topcoat-notification">1</span>
        +
        +
        +

        CSS

        +
        
        +.topcoat-notification {
        +  padding: 0.15em 0.5em 0.2em;
        +  border-radius: 2px;
        +  background-color: #ec514e;
        +  color: #fff;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="radio"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.radio-button {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button__label {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button:before,
        +.radio-button:after {
        +  content: '';
        +  position: absolute;
        +  border-radius: 100%;
        +}
        +
        +.radio-button:after {
        +  top: 50%;
        +  left: 50%;
        +  -webkit-transform: translate(-50%, -50%);
        +  -ms-transform: translate(-50%, -50%);
        +  transform: translate(-50%, -50%);
        +}
        +
        +.radio-button:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.radio-button--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="radio"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.radio-button,
        +.topcoat-radio-button__checkmark {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button__label,
        +.topcoat-radio-button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button:before,
        +.radio-button:after,
        +.topcoat-radio-button__checkmark:before,
        +.topcoat-radio-button__checkmark:after {
        +  content: '';
        +  position: absolute;
        +  border-radius: 100%;
        +}
        +
        +.radio-button:after,
        +.topcoat-radio-button__checkmark:after {
        +  top: 50%;
        +  left: 50%;
        +  -webkit-transform: translate(-50%, -50%);
        +  -ms-transform: translate(-50%, -50%);
        +  transform: translate(-50%, -50%);
        +}
        +
        +.radio-button:before,
        +.topcoat-radio-button__checkmark:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.radio-button--disabled,
        +input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Radio Button

        +
        +






        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <!-- NO LABEL -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
        </label>
        <br>
        <br>
        <!-- LEFT LABEL -->
        <label class="topcoat-radio-button">
          Left label
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
        </label>
        <br>
        <br>
        <!-- RIGHT LABEL -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
          Right label
        </label>
        <br>
        <br>
        <!-- DISABLED -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat" Disabled>
          <div class="topcoat-radio-button__checkmark"></div>
          Disabled
        </label>
        +
        +
        +

        CSS

        +
        
        +input[type="radio"] {
        +  height: 1.875rem;
        +  width: 1.875rem;
        +  margin-top: 0;
        +  margin-right: -1.875rem;
        +  margin-bottom: -1.875rem;
        +  margin-left: 0;
        +}
        +
        +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
        +  opacity: 1;
        +}
        +
        +.topcoat-radio-button {
        +  color: #c6c8c8;
        +  line-height: 1.875rem;
        +}
        +
        +.topcoat-radio-button__checkmark:before {
        +  width: 1.875rem;
        +  height: 1.875rem;
        +  background: #595b5b;
        +  border: 1px solid #303233;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-radio-button__checkmark {
        +  position: relative;
        +  width: 1.875rem;
        +  height: 1.875rem;
        +}
        +
        +.topcoat-radio-button__checkmark:after {
        +  opacity: 0;
        +  width: 0.875rem;
        +  height: 0.875rem;
        +  background: #fff;
        +  border: 1px solid rgba(255,255,255,0.1);
        +  box-shadow: 0 1px rgba(255,255,255,0.5);
        +  -webkit-transform: none;
        +  -ms-transform: none;
        +  transform: none;
        +  top: 7px;
        +  left: 7px;
        +}
        +
        +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +.range {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +.range__thumb {
        +  cursor: pointer;
        +}
        +
        +.range__thumb--webkit {
        +  cursor: pointer;
        +  -webkit-appearance: none;
        +}
        +
        +.range:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +.range,
        +.topcoat-range {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +.range__thumb,
        +.topcoat-range::-moz-range-thumb {
        +  cursor: pointer;
        +}
        +
        +.range__thumb--webkit,
        +.topcoat-range::-webkit-slider-thumb {
        +  cursor: pointer;
        +  -webkit-appearance: none;
        +}
        +
        +.range:disabled,
        +.topcoat-range:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Range

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <input type="range" class="topcoat-range">
        <input type="range" class="topcoat-range" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-range {
        +  border-radius: 6px;
        +  border: 1px solid #303233;
        +  background-color: #424546;
        +  height: 1rem;
        +  border-radius: 30px;
        +}
        +
        +.topcoat-range::-moz-range-track {
        +  border-radius: 6px;
        +  border: 1px solid #303233;
        +  background-color: #424546;
        +  height: 1rem;
        +  border-radius: 30px;
        +}
        +
        +.topcoat-range::-webkit-slider-thumb {
        +  height: 3rem;
        +  width: 2rem;
        +  background-color: #595b5b;
        +  border: 1px solid #303233;
        +  border-radius: 6px;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-range::-moz-range-thumb {
        +  height: 3rem;
        +  width: 2rem;
        +  background-color: #595b5b;
        +  border: 1px solid #303233;
        +  border-radius: 6px;
        +  box-shadow: inset 0 1px #727373;
        +}
        +
        +.topcoat-range:focus::-webkit-slider-thumb {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-range:focus::-moz-range-thumb {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.search-input {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +input[type="search"]::-webkit-search-cancel-button {
        +  -webkit-appearance: none;
        +}
        +
        +.search-input:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.search-input,
        +.topcoat-search-input,
        +.topcoat-search-input--large {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +input[type="search"]::-webkit-search-cancel-button {
        +  -webkit-appearance: none;
        +}
        +
        +.search-input:disabled,
        +.topcoat-search-input:disabled,
        +.topcoat-search-input--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Search Input

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <input type="search" value="" placeholder="search" class="topcoat-search-input">
        <input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-search-input,
        +.topcoat-search-input--large {
        +  line-height: 3rem;
        +  font-size: 16px;
        +  border: 1px solid #303233;
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +  color: #c6c8c8;
        +  padding: 0 0 0 2rem;
        +  border-radius: 30px;
        +  background-image: url("../img/search.svg");
        +  background-position: 1em center;
        +  background-repeat: no-repeat;
        +  background-size: 16px;
        +}
        +
        +.topcoat-search-input:focus,
        +.topcoat-search-input--large:focus {
        +  background-image: url("../img/search_dark.svg");
        +  background-color: #646666;
        +  color: #fff;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-search-input::-webkit-search-cancel-button,
        +.topcoat-search-input::-webkit-search-decoration,
        +.topcoat-search-input--large::-webkit-search-cancel-button,
        +.topcoat-search-input--large::-webkit-search-decoration {
        +  margin-right: 5px;
        +}
        +
        +.topcoat-search-input:focus::-webkit-input-placeholder,
        +.topcoat-search-input:focus::-webkit-input-placeholder {
        +  color: #c6c8c8;
        +}
        +
        +.topcoat-search-input:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Search Input

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <input type="search" value="" placeholder="search" class="topcoat-search-input--large">
        <input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-search-input--large {
        +  line-height: 4.375rem;
        +  font-size: 1.3rem;
        +  font-weight: 200;
        +  padding: 0 0 0 2.9rem;
        +  border-radius: 40px;
        +  background-position: 1.2em center;
        +  background-size: 1.3rem;
        +}
        +
        +.topcoat-search-input--large:disabled {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input--large:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input--large:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-search-input--large:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.switch {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch__input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.switch__toggle {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.switch__toggle:before,
        +.switch__toggle:after {
        +  content: '';
        +  position: absolute;
        +  z-index: -1;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.switch,
        +.topcoat-switch {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch__input,
        +.topcoat-switch__input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.switch__toggle,
        +.topcoat-switch__toggle {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.switch__toggle:before,
        +.switch__toggle:after,
        +.topcoat-switch__toggle:before,
        +.topcoat-switch__toggle:after {
        +  content: '';
        +  position: absolute;
        +  z-index: -1;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch--disabled,
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Switch

        +
        +




        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input">
          <div class="topcoat-switch__toggle"></div>
        </label>
        <br>
        <br>
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input" checked>
          <div class="topcoat-switch__toggle"></div>
        </label>
        <br>
        <br>
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input" disabled>
          <div class="topcoat-switch__toggle"></div>
        </label>
        +
        +
        +

        CSS

        +
        
        +.topcoat-switch {
        +  font-size: 16px;
        +  padding: 0 1.25rem;
        +  border-radius: 6px;
        +  border: 1px solid #303233;
        +  overflow: hidden;
        +  width: 6rem;
        +}
        +
        +.topcoat-switch__toggle:before,
        +.topcoat-switch__toggle:after {
        +  top: -1px;
        +  width: 5rem;
        +}
        +
        +.topcoat-switch__toggle:before {
        +  content: 'ON';
        +  color: #5dc1ff;
        +  background-color: #404141;
        +  right: 1rem;
        +  padding-left: 1.5rem;
        +}
        +
        +.topcoat-switch__toggle {
        +  line-height: 3rem;
        +  height: 3rem;
        +  width: 2rem;
        +  border-radius: 6px;
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  background-color: #595b5b;
        +  border: 1px solid #303233;
        +  margin-left: -1.3rem;
        +  margin-bottom: -1px;
        +  margin-top: -1px;
        +  box-shadow: inset 0 1px #727373;
        +  -webkit-transition: margin-left 0.05s ease-in-out;
        +  transition: margin-left 0.05s ease-in-out;
        +}
        +
        +.topcoat-switch__toggle:after {
        +  content: 'OFF';
        +  background-color: #404141;
        +  left: 1rem;
        +  padding-left: 2rem;
        +}
        +
        +.topcoat-switch__input:checked + .topcoat-switch__toggle {
        +  margin-left: 2.7rem;
        +}
        +
        +.topcoat-switch__input:focus + .topcoat-switch__toggle {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
        +  background: transparent;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-tab-bar__button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-tab-bar__button:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.button-bar,
        +.topcoat-tab-bar {
        +  display: table;
        +  table-layout: fixed;
        +  white-space: nowrap;
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +.button-bar__item,
        +.topcoat-tab-bar__item {
        +  display: table-cell;
        +  width: auto;
        +  border-radius: 0;
        +}
        +
        +.button-bar__item > input,
        +.topcoat-tab-bar__item > input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.button-bar__button {
        +  border-radius: inherit;
        +}
        +
        +.button-bar__item:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Tab Bar

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-tab-bar">
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">One</button>
          </label>
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">Two</button>
          </label>
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">Three</button>
          </label>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-tab-bar__button {
        +  padding: 0 1.25rem;
        +  height: 3rem;
        +  line-height: 3rem;
        +  letter-spacing: 1px;
        +  color: #c6c8c8;
        +  text-shadow: 0 -1px rgba(0,0,0,0.69);
        +  vertical-align: top;
        +  background-color: #595b5b;
        +  box-shadow: inset 0 1px #727373;
        +  border-top: 1px solid #303233;
        +}
        +
        +.topcoat-tab-bar__button:active,
        +.topcoat-tab-bar__button--large:active,
        +:checked + .topcoat-tab-bar__button {
        +  color: #5dc1ff;
        +  background-color: #404141;
        +  box-shadow: inset 0 0 2px #313231;
        +}
        +
        +.topcoat-tab-bar__button:focus,
        +.topcoat-tab-bar__button--large:focus {
        +  z-index: 1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.input,
        +.topcoat-text-input,
        +.topcoat-text-input--large {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.input:disabled,
        +.topcoat-text-input:disabled,
        +.topcoat-text-input--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Text input

        +
        +




        +
        + +
        +
        +

        HTML

        +
        <input type="text" class="topcoat-text-input" placeholder="text" value="">
        <br>
        <br>
        <input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
        <br>
        <br>
        <input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
        +
        +
        +

        CSS

        +
        
        +.topcoat-text-input,
        +.topcoat-text-input--large {
        +  line-height: 3rem;
        +  font-size: 16px;
        +  letter-spacing: 1px;
        +  padding: 0 1.25rem;
        +  border: 1px solid #303233;
        +  border-radius: 6px;
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +  color: #c6c8c8;
        +  vertical-align: top;
        +}
        +
        +.topcoat-text-input:focus,
        +.topcoat-text-input--large:focus {
        +  background-color: #646666;
        +  color: #fff;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-text-input:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input:invalid {
        +  border: 1px solid #d83b75;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Text Input

        +
        +




        +
        + +
        +
        +

        HTML

        +
        <input type="text" class="topcoat-text-input--large" value="" placeholder="text">
        <br>
        <br>
        <input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
        <br>
        <br>
        <input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
        +
        +
        +

        CSS

        +
        
        +.topcoat-text-input--large {
        +  line-height: 4.375rem;
        +  font-size: 1.3rem;
        +}
        +
        +.topcoat-text-input--large:disabled {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input--large:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input--large:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input--large:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-text-input--large:invalid {
        +  border: 1px solid #d83b75;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.textarea {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  vertical-align: top;
        +  resize: none;
        +  outline: none;
        +}
        +
        +.textarea:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.textarea,
        +.topcoat-textarea,
        +.topcoat-textarea--large {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  vertical-align: top;
        +  resize: none;
        +  outline: none;
        +}
        +
        +.textarea:disabled,
        +.topcoat-textarea:disabled,
        +.topcoat-textarea--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Textarea

        +
        +


        +
        + +
        +
        +

        HTML

        +
        <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
        <br>
        <br>
        <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
        +
        +
        +

        CSS

        +
        
        +.topcoat-textarea,
        +.topcoat-textarea--large {
        +  padding: 2rem;
        +  font-size: 2.5rem;
        +  font-weight: 200;
        +  border-radius: 6px;
        +  line-height: 3rem;
        +  border: 1px solid #303233;
        +  background-color: #404141;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.18);
        +  color: #c6c8c8;
        +  letter-spacing: 1px;
        +}
        +
        +.topcoat-textarea:focus,
        +.topcoat-textarea--large:focus {
        +  background-color: #646666;
        +  color: #fff;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-textarea:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Textarea

        +
        +


        +
        + +
        +
        +

        HTML

        +
        <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
        <br>
        <br>
        <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
        +
        +
        +

        CSS

        +
        
        +.topcoat-textarea--large {
        +  font-size: 3rem;
        +  line-height: 4.375rem;
        +}
        +
        +.topcoat-textarea--large:disabled {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea--large:disabled::-webkit-input-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea--large:disabled::-moz-placeholder {
        +  color: #fff;
        +}
        +
        +.topcoat-textarea--large:disabled:-ms-input-placeholder {
        +  color: #fff;
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Regular.otf");
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Light.otf");
        +  font-weight: 200;
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Semibold.otf");
        +  font-weight: 600;
        +}
        +
        +body {
        +  margin: 0;
        +  padding: 0;
        +  background: #4b4d4e;
        +  color: #000;
        +  font: 16px "Source Sans", helvetica, arial, sans-serif;
        +  font-weight: 200;
        +}
        +
        +:focus {
        +  outline-color: transparent;
        +  outline-style: none;
        +}
        +
        +.topcoat-icon--menu-stack {
        +  background: url("../img/hamburger_light.svg") no-repeat;
        +  background-size: cover;
        +}
        +
        +.quarter {
        +  width: 25%;
        +}
        +
        +.half {
        +  width: 50%;
        +}
        +
        +.three-quarters {
        +  width: 75%;
        +}
        +
        +.third {
        +  width: 33.333%;
        +}
        +
        +.two-thirds {
        +  width: 66.666%;
        +}
        +
        +.full {
        +  width: 100%;
        +}
        +
        +.left {
        +  text-align: left;
        +}
        +
        +.center {
        +  text-align: center;
        +}
        +
        +.right {
        +  text-align: right;
        +}
        +
        +.reset-ui {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +/* This file should include color and image variables corresponding to the dark theme */
        +
        +/* Call To Action */
        +
        +/* Icons */
        +
        +/* Navigation Bar */
        +
        +/* Text Input */
        +
        +/* Search Input */
        +
        +/* List */
        +
        +/* Checkbox */
        +
        +/* Overlay */
        +
        +/* Progress bar */
        +
        +/* Checkbox */
        +
        +/* Radio Button */
        +
        +/* Tab bar */
        +
        +/* Switch */
        +
        +/* Icon Button */
        +
        +/* Navigation bar */
        +
        +/* List */
        +
        +/* Search Input */
        +
        +/* Textarea */
        +
        +/* Checkbox */
        +
        +/* Radio */
        +
        +/* Range input */
        +
        +/* Search Input */
        +
        +/* Switch */
        +
        +/* This file should include color and image variables corresponding to the light theme */
        +
        +/* Call To Action */
        +
        +/* Icons */
        +
        +/* Navigation Bar */
        +
        +/* Text Input */
        +
        +/* List */
        +
        +/* Overlay */
        +
        +/* Progress bar */
        +
        +/* Checkbox */
        +
        +/* Range input */
        +
        +/* Radio Button */
        +
        +/* Tab bar */
        +
        +/* Switch */
        +
        +/* Containers */
        +
        +/* Icon Button */
        +
        +/* Navigation bar */
        +
        +/* List */
        +
        +/* Search Input */
        +
        +/* Text Area */
        +
        +/* Checkbox */
        +
        +/* Radio */
        +
        +/* Range input */
        +
        +/* Search Input */
        +
        +/* Switch */
        +
        +/* Text Input */
        +
        +/* Radio input */
        +
        +/* Overlay */
        +
        +/* Textarea */
        +
        +/* Progress bar container */
        +
        +/* Progress bar progress */
        +
        +/* Search input */
        +
        +/* Switch */
        +
        +/* Notification */
        +
        +
        +
        +
        +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-mobile-light.html b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-mobile-light.html new file mode 100755 index 0000000..f67a519 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/topcoat-mobile-light.html @@ -0,0 +1,3417 @@ + + + + + + Topcoat + + + + + + + +
        + +
        +
        +
        +
        +

        Topcoat

        +

        CSS for clean and fast web apps

        +
        + +
        +
        +
        +
        +
        +

        Button Bar

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-button-bar">
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">One</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">Two</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button">Three</button>
          </div>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button-bar > .topcoat-button-bar__item:first-child {
        +  border-top-left-radius: 6px;
        +  border-bottom-left-radius: 6px;
        +}
        +
        +.topcoat-button-bar > .topcoat-button-bar__item:last-child {
        +  border-top-right-radius: 6px;
        +  border-bottom-right-radius: 6px;
        +}
        +
        +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button,
        +.topcoat-button-bar__item:first-child > .topcoat-button-bar__button--large {
        +  border-right: none;
        +}
        +
        +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button,
        +.topcoat-button-bar__item:last-child > .topcoat-button-bar__button--large {
        +  border-left: none;
        +}
        +
        +.topcoat-button-bar__button {
        +  border-radius: inherit;
        +}
        +
        +.topcoat-button-bar__button:focus,
        +.topcoat-button-bar__button--large:focus {
        +  z-index: 1;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Button Bar

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-button-bar">
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">One</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">Two</button>
          </div>
          <div class="topcoat-button-bar__item">
            <button class="topcoat-button-bar__button--large">Three</button>
          </div>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button-bar__button--large {
        +  border-radius: inherit;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-button,
        +.topcoat-button--quiet,
        +.topcoat-button--large,
        +.topcoat-button--large--quiet,
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-button:disabled,
        +.topcoat-button--quiet:disabled,
        +.topcoat-button--large:disabled,
        +.topcoat-button--large--quiet:disabled,
        +.topcoat-button--cta:disabled,
        +.topcoat-button--large--cta:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Button

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button">Button</button>
        <button class="topcoat-button" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button,
        +.topcoat-button--quiet,
        +.topcoat-button--large,
        +.topcoat-button--large--quiet,
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  padding: 0 1.25rem;
        +  font-size: 16px;
        +  line-height: 3rem;
        +  letter-spacing: 1px;
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  vertical-align: top;
        +  background-color: #e5e9e8;
        +  box-shadow: inset 0 1px #fff;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 6px;
        +}
        +
        +.topcoat-button:hover,
        +.topcoat-button--quiet:hover,
        +.topcoat-button--large:hover,
        +.topcoat-button--large--quiet:hover {
        +  background-color: #edf1f1;
        +}
        +
        +.topcoat-button:active,
        +.topcoat-button--large:active {
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +.topcoat-button:focus,
        +.topcoat-button--quiet:focus,
        +.topcoat-button--large:focus,
        +.topcoat-button--large--quiet:focus,
        +.topcoat-button--cta:focus,
        +.topcoat-button--large--cta:focus {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +  outline: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Quiet Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--quiet">Button</button>
        <button class="topcoat-button--quiet" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-button--quiet:hover,
        +.topcoat-button--large--quiet:hover {
        +  text-shadow: 0 1px #fff;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-button--quiet:active,
        +.topcoat-button--large--quiet:active {
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  background-color: #d3d7d7;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large" >Button</button>
        <button class="topcoat-button--large" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large,
        +.topcoat-button--large--quiet {
        +  font-size: 1.3rem;
        +  font-weight: 400;
        +  line-height: 4.375rem;
        +  padding: 0 1.25rem;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Quiet Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large--quiet" >Button</button>
        <button class="topcoat-button--large--quiet" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Call To Action Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--cta" >Button</button>
        <button class="topcoat-button--cta" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--cta,
        +.topcoat-button--large--cta {
        +  border: 1px solid #143250;
        +  background-color: #288edf;
        +  box-shadow: inset 0 1px rgba(255,255,255,0.36);
        +  color: #fff;
        +  font-weight: 500;
        +  text-shadow: 0 -1px rgba(0,0,0,0.36);
        +}
        +
        +.topcoat-button--cta:hover,
        +.topcoat-button--large--cta:hover {
        +  background-color: #509bef;
        +}
        +
        +.topcoat-button--cta:active,
        +.topcoat-button--large--cta:active {
        +  background-color: #0380e8;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Call To Action Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-button--large--cta" >Button</button>
        <button class="topcoat-button--large--cta" disabled>Button</button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-button--large--cta {
        +  font-size: 1.3rem;
        +  font-weight: 400;
        +  line-height: 4.375rem;
        +  padding: 0 1.25rem;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="checkbox"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.checkbox {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox__label {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.checkbox:before,
        +.checkbox:after {
        +  content: '';
        +  position: absolute;
        +}
        +
        +.checkbox:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="checkbox"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.checkbox,
        +.topcoat-checkbox__checkmark {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox__label,
        +.topcoat-checkbox {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.checkbox--disabled,
        +input[type="checkbox"]:disabled + .topcoat-checkbox__checkmark {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.checkbox:before,
        +.checkbox:after,
        +.topcoat-checkbox__checkmark:before,
        +.topcoat-checkbox__checkmark:after {
        +  content: '';
        +  position: absolute;
        +}
        +
        +.checkbox:before,
        +.topcoat-checkbox__checkmark:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Checkbox

        +
        +


        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <label class="topcoat-checkbox">
          <input type="checkbox">
          <div class="topcoat-checkbox__checkmark"></div>
          Default
        </label>
        <br>
        <br>
        <label class="topcoat-checkbox">
          <input type="checkbox" disabled>
          <div class="topcoat-checkbox__checkmark"></div>
          Disabled
        </label>
        +
        +
        +

        CSS

        +
        
        +.topcoat-checkbox__checkmark {
        +  height: 2rem;
        +}
        +
        +input[type="checkbox"] {
        +  height: 2rem;
        +  width: 2rem;
        +  margin-top: 0;
        +  margin-right: -2rem;
        +  margin-bottom: -2rem;
        +  margin-left: 0;
        +}
        +
        +input[type="checkbox"]:checked + .topcoat-checkbox__checkmark:after {
        +  opacity: 1;
        +}
        +
        +.topcoat-checkbox {
        +  line-height: 2rem;
        +}
        +
        +.topcoat-checkbox__checkmark:before {
        +  width: 2rem;
        +  height: 2rem;
        +  background: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 3px;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-checkbox__checkmark {
        +  width: 2rem;
        +  height: 2rem;
        +}
        +
        +.topcoat-checkbox__checkmark:after {
        +  top: 1px;
        +  left: 2px;
        +  opacity: 0;
        +  width: 28px;
        +  height: 11px;
        +  background: transparent;
        +  border: 7px solid #666;
        +  border-width: 7px;
        +  border-top: none;
        +  border-right: none;
        +  border-radius: 2px;
        +  -webkit-transform: rotate(-50deg);
        +  -ms-transform: rotate(-50deg);
        +  transform: rotate(-50deg);
        +}
        +
        +input[type="checkbox"]:focus + .topcoat-checkbox__checkmark:before {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-icon-button,
        +.topcoat-icon-button--quiet,
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-icon-button:disabled,
        +.topcoat-icon-button--quiet:disabled,
        +.topcoat-icon-button--large:disabled,
        +.topcoat-icon-button--large--quiet:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button">
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button" disabled>
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button,
        +.topcoat-icon-button--quiet,
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  padding: 0 0.75rem;
        +  line-height: 3rem;
        +  letter-spacing: 1px;
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  vertical-align: baseline;
        +  background-color: #e5e9e8;
        +  box-shadow: inset 0 1px #fff;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 6px;
        +}
        +
        +.topcoat-icon-button:hover,
        +.topcoat-icon-button--quiet:hover,
        +.topcoat-icon-button--large:hover,
        +.topcoat-icon-button--large--quiet:hover {
        +  background-color: #edf1f1;
        +}
        +
        +.topcoat-icon-button:active {
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +.topcoat-icon-button:focus,
        +.topcoat-icon-button--quiet:focus,
        +.topcoat-icon-button--quiet:hover:focus,
        +.topcoat-icon-button--large:focus,
        +.topcoat-icon-button--large--quiet:focus,
        +.topcoat-icon-button--large--quiet:hover:focus {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +  outline: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Quiet Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--quiet">
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--quiet" disabled>
          <span class="topcoat-icon" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-icon-button--quiet:hover,
        +.topcoat-icon-button--large--quiet:hover {
        +  text-shadow: 0 1px #fff;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-icon-button--quiet:active,
        +.topcoat-icon-button--large--quiet:active {
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  background-color: #d3d7d7;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--large">
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--large" disabled>
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--large,
        +.topcoat-icon-button--large--quiet {
        +  width: 4.375rem;
        +  height: 4.375rem;
        +  line-height: 4.375rem;
        +}
        +
        +.topcoat-icon-button--large:active {
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Quiet Icon Button

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <button class="topcoat-icon-button--large--quiet">
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        <button class="topcoat-icon-button--large--quiet" disabled>
          <span class="topcoat-icon--large" style="background-color:#A5A7A7;"></span>
        </button>
        +
        +
        +

        CSS

        +
        
        +.topcoat-icon-button--large--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.topcoat-icon,
        +.topcoat-icon--large {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  overflow: hidden;
        +  width: 1.62rem;
        +  height: 1.62rem;
        +  vertical-align: middle;
        +  top: -1px;
        +}
        +
        +.topcoat-icon--large {
        +  width: 2.499999998125rem;
        +  height: 2.499999998125rem;
        +  top: -2px;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.input {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.input:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.list {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  overflow: auto;
        +  -webkit-overflow-scrolling: touch;
        +}
        +
        +.list__header {
        +  margin: 0;
        +}
        +
        +.list__container {
        +  padding: 0;
        +  margin: 0;
        +  list-style-type: none;
        +}
        +
        +.list__item {
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.list,
        +.topcoat-list {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  overflow: auto;
        +  -webkit-overflow-scrolling: touch;
        +}
        +
        +.list__header,
        +.topcoat-list__header {
        +  margin: 0;
        +}
        +
        +.list__container,
        +.topcoat-list__container {
        +  padding: 0;
        +  margin: 0;
        +  list-style-type: none;
        +}
        +
        +.list__item,
        +.topcoat-list__item {
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        List

        +
        +

        Category

        • Item
        • Item
        • Item
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-list">
          <h3 class="topcoat-list__header">Category</h3>
          <ul class="topcoat-list__container">
            <li class="topcoat-list__item">
              Item
            </li>
            <li class="topcoat-list__item">
              Item
            </li>
            <li class="topcoat-list__item">
              Item
            </li>
          </ul>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-list {
        +  border-top: 1px solid #bcbfbf;
        +  border-bottom: 1px solid #eff1f1;
        +  background-color: #dfe2e2;
        +}
        +
        +.topcoat-list__header {
        +  padding: 4px 20px;
        +  font-size: 0.9em;
        +  font-weight: 400;
        +  background-color: #cccfcf;
        +  color: #656565;
        +  text-shadow: 0 1px 0 rgba(255,255,255,0.5);
        +  border-top: 1px solid rgba(255,255,255,0.5);
        +  border-bottom: 1px solid rgba(255,255,255,0.23);
        +}
        +
        +.topcoat-list__container {
        +  border-top: 1px solid #bcbfbf;
        +  color: #454545;
        +}
        +
        +.topcoat-list__item {
        +  padding: 1.25rem;
        +  border-top: 1px solid #eff1f1;
        +  border-bottom: 1px solid #bcbfbf;
        +}
        +
        +.topcoat-list__item:first-child {
        +  border-top: 1px solid rgba(0,0,0,0.05);
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.navigation-bar {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  word-spacing: 0;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.navigation-bar__item {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +}
        +
        +.navigation-bar__title {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.navigation-bar,
        +.topcoat-navigation-bar {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  word-spacing: 0;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.navigation-bar__item,
        +.topcoat-navigation-bar__item {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +}
        +
        +.navigation-bar__title,
        +.topcoat-navigation-bar__title {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +
        +
        +
        +
        + +
        +
        +

        Notification

        +
        +
        1
        +
        + +
        +
        +

        HTML

        +
        <span class="topcoat-notification">1</span>
        +
        +
        +

        CSS

        +
        
        +.topcoat-notification {
        +  padding: 0.15em 0.5em 0.2em;
        +  border-radius: 2px;
        +  background-color: #ec514e;
        +  color: #fff;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="radio"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.radio-button {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button__label {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button:before,
        +.radio-button:after {
        +  content: '';
        +  position: absolute;
        +  border-radius: 100%;
        +}
        +
        +.radio-button:after {
        +  top: 50%;
        +  left: 50%;
        +  -webkit-transform: translate(-50%, -50%);
        +  -ms-transform: translate(-50%, -50%);
        +  transform: translate(-50%, -50%);
        +}
        +
        +.radio-button:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.radio-button--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +input[type="radio"] {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.radio-button,
        +.topcoat-radio-button__checkmark {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button__label,
        +.topcoat-radio-button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.radio-button:before,
        +.radio-button:after,
        +.topcoat-radio-button__checkmark:before,
        +.topcoat-radio-button__checkmark:after {
        +  content: '';
        +  position: absolute;
        +  border-radius: 100%;
        +}
        +
        +.radio-button:after,
        +.topcoat-radio-button__checkmark:after {
        +  top: 50%;
        +  left: 50%;
        +  -webkit-transform: translate(-50%, -50%);
        +  -ms-transform: translate(-50%, -50%);
        +  transform: translate(-50%, -50%);
        +}
        +
        +.radio-button:before,
        +.topcoat-radio-button__checkmark:before {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.radio-button--disabled,
        +input[type="radio"]:disabled + .topcoat-radio-button__checkmark {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Radio Button

        +
        +






        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <!-- NO LABEL -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
        </label>
        <br>
        <br>
        <!-- LEFT LABEL -->
        <label class="topcoat-radio-button">
          Left label
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
        </label>
        <br>
        <br>
        <!-- RIGHT LABEL -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat">
          <div class="topcoat-radio-button__checkmark"></div>
          Right label
        </label>
        <br>
        <br>
        <!-- DISABLED -->
        <label class="topcoat-radio-button">
          <input type="radio" name="topcoat" Disabled>
          <div class="topcoat-radio-button__checkmark"></div>
          Disabled
        </label>
        +
        +
        +

        CSS

        +
        
        +input[type="radio"] {
        +  height: 1.875rem;
        +  width: 1.875rem;
        +  margin-top: 0;
        +  margin-right: -1.875rem;
        +  margin-bottom: -1.875rem;
        +  margin-left: 0;
        +}
        +
        +input[type="radio"]:checked + .topcoat-radio-button__checkmark:after {
        +  opacity: 1;
        +}
        +
        +.topcoat-radio-button {
        +  color: #454545;
        +  line-height: 1.875rem;
        +}
        +
        +.topcoat-radio-button__checkmark:before {
        +  width: 1.875rem;
        +  height: 1.875rem;
        +  background: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-radio-button__checkmark {
        +  position: relative;
        +  width: 1.875rem;
        +  height: 1.875rem;
        +}
        +
        +.topcoat-radio-button__checkmark:after {
        +  opacity: 0;
        +  width: 0.875rem;
        +  height: 0.875rem;
        +  background: #666;
        +  border: 1px solid rgba(0,0,0,0.1);
        +  box-shadow: 0 1px rgba(255,255,255,0.5);
        +  -webkit-transform: none;
        +  -ms-transform: none;
        +  transform: none;
        +  top: 7px;
        +  left: 7px;
        +}
        +
        +input[type="radio"]:focus + .topcoat-radio-button__checkmark:before {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +.range {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +.range__thumb {
        +  cursor: pointer;
        +}
        +
        +.range__thumb--webkit {
        +  cursor: pointer;
        +  -webkit-appearance: none;
        +}
        +
        +.range:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +/*
        +Copyright 2012 Adobe Systems Inc.;
        +Licensed under the Apache License, Version 2.0 (the "License");
        +you may not use this file except in compliance with the License.
        +You may obtain a copy of the License at
        +
        +http://www.apache.org/licenses/LICENSE-2.0
        +
        +Unless required by applicable law or agreed to in writing, software
        +distributed under the License is distributed on an "AS IS" BASIS,
        +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +See the License for the specific language governing permissions and
        +limitations under the License.
        +*/
        +
        +.range,
        +.topcoat-range {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +.range__thumb,
        +.topcoat-range::-moz-range-thumb {
        +  cursor: pointer;
        +}
        +
        +.range__thumb--webkit,
        +.topcoat-range::-webkit-slider-thumb {
        +  cursor: pointer;
        +  -webkit-appearance: none;
        +}
        +
        +.range:disabled,
        +.topcoat-range:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Range

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <input type="range" class="topcoat-range">
        <input type="range" class="topcoat-range" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-range {
        +  border-radius: 6px;
        +  border: 1px solid #a5a8a8;
        +  background-color: #d3d7d7;
        +  height: 1rem;
        +  border-radius: 30px;
        +}
        +
        +.topcoat-range::-moz-range-track {
        +  border-radius: 6px;
        +  border: 1px solid #a5a8a8;
        +  background-color: #d3d7d7;
        +  height: 1rem;
        +  border-radius: 30px;
        +}
        +
        +.topcoat-range::-webkit-slider-thumb {
        +  height: 3rem;
        +  width: 2rem;
        +  background-color: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 6px;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-range::-moz-range-thumb {
        +  height: 3rem;
        +  width: 2rem;
        +  background-color: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 6px;
        +  box-shadow: inset 0 1px #fff;
        +}
        +
        +.topcoat-range:focus::-webkit-slider-thumb {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-range:focus::-moz-range-thumb {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.search-input {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +input[type="search"]::-webkit-search-cancel-button {
        +  -webkit-appearance: none;
        +}
        +
        +.search-input:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.search-input,
        +.topcoat-search-input,
        +.topcoat-search-input--large {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +  -webkit-appearance: none;
        +}
        +
        +input[type="search"]::-webkit-search-cancel-button {
        +  -webkit-appearance: none;
        +}
        +
        +.search-input:disabled,
        +.topcoat-search-input:disabled,
        +.topcoat-search-input--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Search Input

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <input type="search" value="" placeholder="search" class="topcoat-search-input">
        <input type="search" value="" placeholder="search" class="topcoat-search-input" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-search-input,
        +.topcoat-search-input--large {
        +  line-height: 3rem;
        +  font-size: 16px;
        +  border: 1px solid #a5a8a8;
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +  color: #454545;
        +  padding: 0 0 0 2rem;
        +  border-radius: 30px;
        +  background-image: url("../img/search.svg");
        +  background-position: 1em center;
        +  background-repeat: no-repeat;
        +  background-size: 16px;
        +}
        +
        +.topcoat-search-input:focus,
        +.topcoat-search-input--large:focus {
        +  background-image: url("../img/search_dark.svg");
        +  background-color: #edf1f1;
        +  color: #000;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-search-input::-webkit-search-cancel-button,
        +.topcoat-search-input::-webkit-search-decoration,
        +.topcoat-search-input--large::-webkit-search-cancel-button,
        +.topcoat-search-input--large::-webkit-search-decoration {
        +  margin-right: 5px;
        +}
        +
        +.topcoat-search-input:focus::-webkit-input-placeholder,
        +.topcoat-search-input:focus::-webkit-input-placeholder {
        +  color: #c6c8c8;
        +}
        +
        +.topcoat-search-input:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-search-input:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-search-input:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Search Input

        +
        +
        +
        + +
        +
        +

        HTML

        +
        <input type="search" value="" placeholder="search" class="topcoat-search-input--large">
        <input type="search" value="" placeholder="search" class="topcoat-search-input--large" disabled>
        +
        +
        +

        CSS

        +
        
        +.topcoat-search-input--large {
        +  line-height: 4.375rem;
        +  font-size: 1.3rem;
        +  font-weight: 200;
        +  padding: 0 0 0 2.9rem;
        +  border-radius: 40px;
        +  background-position: 1.2em center;
        +  background-size: 1.3rem;
        +}
        +
        +.topcoat-search-input--large:disabled {
        +  color: #000;
        +}
        +
        +.topcoat-search-input--large:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-search-input--large:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-search-input--large:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.switch {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch__input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.switch__toggle {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.switch__toggle:before,
        +.switch__toggle:after {
        +  content: '';
        +  position: absolute;
        +  z-index: -1;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch--disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.switch,
        +.topcoat-switch {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch__input,
        +.topcoat-switch__input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.switch__toggle,
        +.topcoat-switch__toggle {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +}
        +
        +.switch__toggle:before,
        +.switch__toggle:after,
        +.topcoat-switch__toggle:before,
        +.topcoat-switch__toggle:after {
        +  content: '';
        +  position: absolute;
        +  z-index: -1;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +}
        +
        +.switch--disabled,
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Switch

        +
        +




        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input">
          <div class="topcoat-switch__toggle"></div>
        </label>
        <br>
        <br>
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input" checked>
          <div class="topcoat-switch__toggle"></div>
        </label>
        <br>
        <br>
        <label class="topcoat-switch">
          <input type="checkbox" class="topcoat-switch__input" disabled>
          <div class="topcoat-switch__toggle"></div>
        </label>
        +
        +
        +

        CSS

        +
        
        +.topcoat-switch {
        +  font-size: 16px;
        +  padding: 0 1.25rem;
        +  border-radius: 6px;
        +  border: 1px solid #a5a8a8;
        +  overflow: hidden;
        +  width: 6rem;
        +}
        +
        +.topcoat-switch__toggle:before,
        +.topcoat-switch__toggle:after {
        +  top: -1px;
        +  width: 5rem;
        +}
        +
        +.topcoat-switch__toggle:before {
        +  content: 'ON';
        +  color: #0083e8;
        +  background-color: #e0f0fa;
        +  right: 1rem;
        +  padding-left: 1.5rem;
        +}
        +
        +.topcoat-switch__toggle {
        +  line-height: 3rem;
        +  height: 3rem;
        +  width: 2rem;
        +  border-radius: 6px;
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  background-color: #e5e9e8;
        +  border: 1px solid #a5a8a8;
        +  margin-left: -1.3rem;
        +  margin-bottom: -1px;
        +  margin-top: -1px;
        +  box-shadow: inset 0 1px #fff;
        +  -webkit-transition: margin-left 0.05s ease-in-out;
        +  transition: margin-left 0.05s ease-in-out;
        +}
        +
        +.topcoat-switch__toggle:after {
        +  content: 'OFF';
        +  background-color: #d3d7d7;
        +  left: 1rem;
        +  padding-left: 2rem;
        +}
        +
        +.topcoat-switch__input:checked + .topcoat-switch__toggle {
        +  margin-left: 2.7rem;
        +}
        +
        +.topcoat-switch__input:focus + .topcoat-switch__toggle {
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle:after,
        +.topcoat-switch__input:disabled + .topcoat-switch__toggle:before {
        +  background: transparent;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.button,
        +.topcoat-tab-bar__button {
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +  text-decoration: none;
        +}
        +
        +.button--quiet {
        +  background: transparent;
        +  border: 1px solid transparent;
        +  box-shadow: none;
        +}
        +
        +.button--disabled,
        +.topcoat-tab-bar__button:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +.button-bar,
        +.topcoat-tab-bar {
        +  display: table;
        +  table-layout: fixed;
        +  white-space: nowrap;
        +  margin: 0;
        +  padding: 0;
        +}
        +
        +.button-bar__item,
        +.topcoat-tab-bar__item {
        +  display: table-cell;
        +  width: auto;
        +  border-radius: 0;
        +}
        +
        +.button-bar__item > input,
        +.topcoat-tab-bar__item > input {
        +  position: absolute;
        +  overflow: hidden;
        +  padding: 0;
        +  border: 0;
        +  opacity: 0.001;
        +  z-index: 1;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.button-bar__button {
        +  border-radius: inherit;
        +}
        +
        +.button-bar__item:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Tab Bar

        +
        +
        +
        +

        Examples

        + +
        +
        + +
        +
        +

        HTML

        +
        <div class="topcoat-tab-bar">
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">One</button>
          </label>
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">Two</button>
          </label>
          <label class="topcoat-tab-bar__item">
            <input type="radio" name="tab-bar">
            <button class="topcoat-tab-bar__button">Three</button>
          </label>
        </div>
        +
        +
        +

        CSS

        +
        
        +.topcoat-tab-bar__button {
        +  padding: 0 1.25rem;
        +  height: 3rem;
        +  line-height: 3rem;
        +  letter-spacing: 1px;
        +  color: #454545;
        +  text-shadow: 0 1px #fff;
        +  vertical-align: top;
        +  background-color: #e5e9e8;
        +  box-shadow: inset 0 1px #fff;
        +  border-top: 1px solid #a5a8a8;
        +}
        +
        +.topcoat-tab-bar__button:active,
        +.topcoat-tab-bar__button--large:active,
        +:checked + .topcoat-tab-bar__button {
        +  color: #0083e8;
        +  background-color: #e0f0fa;
        +  box-shadow: inset 0 0 2px #c0ced8;
        +}
        +
        +.topcoat-tab-bar__button:focus,
        +.topcoat-tab-bar__button--large:focus {
        +  z-index: 1;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.input,
        +.topcoat-text-input,
        +.topcoat-text-input--large {
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  vertical-align: top;
        +  outline: none;
        +}
        +
        +.input:disabled,
        +.topcoat-text-input:disabled,
        +.topcoat-text-input--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Text input

        +
        +




        +
        + +
        +
        +

        HTML

        +
        <input type="text" class="topcoat-text-input" placeholder="text" value="">
        <br>
        <br>
        <input type="text" class="topcoat-text-input" placeholder="text" value="" disabled>
        <br>
        <br>
        <input type="text" class="topcoat-text-input" placeholder="text" value="fail" pattern="not-fail">
        +
        +
        +

        CSS

        +
        
        +.topcoat-text-input,
        +.topcoat-text-input--large {
        +  line-height: 3rem;
        +  font-size: 16px;
        +  letter-spacing: 1px;
        +  padding: 0 1.25rem;
        +  border: 1px solid #a5a8a8;
        +  border-radius: 6px;
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +  color: #454545;
        +  vertical-align: top;
        +}
        +
        +.topcoat-text-input:focus,
        +.topcoat-text-input--large:focus {
        +  background-color: #edf1f1;
        +  color: #000;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-text-input:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input:invalid {
        +  border: 1px solid #d83b75;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Text Input

        +
        +




        +
        + +
        +
        +

        HTML

        +
        <input type="text" class="topcoat-text-input--large" value="" placeholder="text">
        <br>
        <br>
        <input type="text" class="topcoat-text-input--large" value="" placeholder="text" disabled>
        <br>
        <br>
        <input type="text" class="topcoat-text-input--large" placeholder="text" value="fail" pattern="not-fail">
        +
        +
        +

        CSS

        +
        
        +.topcoat-text-input--large {
        +  line-height: 4.375rem;
        +  font-size: 1.3rem;
        +}
        +
        +.topcoat-text-input--large:disabled {
        +  color: #000;
        +}
        +
        +.topcoat-text-input--large:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input--large:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input--large:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-text-input--large:invalid {
        +  border: 1px solid #d83b75;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.textarea {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  vertical-align: top;
        +  resize: none;
        +  outline: none;
        +}
        +
        +.textarea:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +/**
        +*
        +* Copyright 2012 Adobe Systems Inc.;
        +*
        +* Licensed under the Apache License, Version 2.0 (the "License");
        +* you may not use this file except in compliance with the License.
        +* You may obtain a copy of the License at
        +*
        +* http://www.apache.org/licenses/LICENSE-2.0
        +*
        +* Unless required by applicable law or agreed to in writing, software
        +* distributed under the License is distributed on an "AS IS" BASIS,
        +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        +* See the License for the specific language governing permissions and
        +* limitations under the License.
        +*
        +*/
        +
        +.textarea,
        +.topcoat-textarea,
        +.topcoat-textarea--large {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  vertical-align: top;
        +  resize: none;
        +  outline: none;
        +}
        +
        +.textarea:disabled,
        +.topcoat-textarea:disabled,
        +.topcoat-textarea--large:disabled {
        +  opacity: 0.3;
        +  cursor: default;
        +  pointer-events: none;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Textarea

        +
        +


        +
        + +
        +
        +

        HTML

        +
        <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea"></textarea>
        <br>
        <br>
        <textarea class="topcoat-textarea" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
        +
        +
        +

        CSS

        +
        
        +.topcoat-textarea,
        +.topcoat-textarea--large {
        +  padding: 2rem;
        +  font-size: 2.5rem;
        +  font-weight: 200;
        +  border-radius: 6px;
        +  line-height: 3rem;
        +  border: 1px solid #a5a8a8;
        +  background-color: #d3d7d7;
        +  box-shadow: inset 0 1px rgba(0,0,0,0.12);
        +  color: #454545;
        +  letter-spacing: 1px;
        +}
        +
        +.topcoat-textarea:focus,
        +.topcoat-textarea--large:focus {
        +  background-color: #edf1f1;
        +  color: #000;
        +  border: 1px solid #0940fd;
        +  box-shadow: 0 0 0 2px #6fb5f1;
        +}
        +
        +.topcoat-textarea:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-textarea:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-textarea:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +
        +
        +
        +
        +
        +
        +

        Large Textarea

        +
        +


        +
        + +
        +
        +

        HTML

        +
        <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea"></textarea>
        <br>
        <br>
        <textarea class="topcoat-textarea--large" rows="6" cols="36" placeholder="Textarea" disabled></textarea>
        +
        +
        +

        CSS

        +
        
        +.topcoat-textarea--large {
        +  font-size: 3rem;
        +  line-height: 4.375rem;
        +}
        +
        +.topcoat-textarea--large:disabled {
        +  color: #000;
        +}
        +
        +.topcoat-textarea--large:disabled::-webkit-input-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-textarea--large:disabled::-moz-placeholder {
        +  color: #000;
        +}
        +
        +.topcoat-textarea--large:disabled:-ms-input-placeholder {
        +  color: #000;
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Regular.otf");
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Light.otf");
        +  font-weight: 200;
        +}
        +
        +@font-face {
        +  font-family: "Source Sans";
        +  src: url("../font/SourceSansPro-Semibold.otf");
        +  font-weight: 600;
        +}
        +
        +body {
        +  margin: 0;
        +  padding: 0;
        +  background: #dfe2e2;
        +  color: #000;
        +  font: 16px "Source Sans", helvetica, arial, sans-serif;
        +  font-weight: 200;
        +}
        +
        +:focus {
        +  outline-color: transparent;
        +  outline-style: none;
        +}
        +
        +.topcoat-icon--menu-stack {
        +  background: url("../img/hamburger_dark.svg") no-repeat;
        +  background-size: cover;
        +}
        +
        +.quarter {
        +  width: 25%;
        +}
        +
        +.half {
        +  width: 50%;
        +}
        +
        +.three-quarters {
        +  width: 75%;
        +}
        +
        +.third {
        +  width: 33.333%;
        +}
        +
        +.two-thirds {
        +  width: 66.666%;
        +}
        +
        +.full {
        +  width: 100%;
        +}
        +
        +.left {
        +  text-align: left;
        +}
        +
        +.center {
        +  text-align: center;
        +}
        +
        +.right {
        +  text-align: right;
        +}
        +
        +.reset-ui {
        +  -moz-box-sizing: border-box;
        +  box-sizing: border-box;
        +  background-clip: padding-box;
        +  position: relative;
        +  display: inline-block;
        +  vertical-align: top;
        +  padding: 0;
        +  margin: 0;
        +  font: inherit;
        +  color: inherit;
        +  background: transparent;
        +  border: none;
        +  cursor: default;
        +  -webkit-user-select: none;
        +  -moz-user-select: none;
        +  -ms-user-select: none;
        +  user-select: none;
        +  text-overflow: ellipsis;
        +  white-space: nowrap;
        +  overflow: hidden;
        +}
        +
        +/* This file should include color and image variables corresponding to the dark theme */
        +
        +/* Call To Action */
        +
        +/* Icons */
        +
        +/* Navigation Bar */
        +
        +/* Text Input */
        +
        +/* Search Input */
        +
        +/* List */
        +
        +/* Checkbox */
        +
        +/* Overlay */
        +
        +/* Progress bar */
        +
        +/* Checkbox */
        +
        +/* Radio Button */
        +
        +/* Tab bar */
        +
        +/* Switch */
        +
        +/* Icon Button */
        +
        +/* Navigation bar */
        +
        +/* List */
        +
        +/* Search Input */
        +
        +/* Textarea */
        +
        +/* Checkbox */
        +
        +/* Radio */
        +
        +/* Range input */
        +
        +/* Search Input */
        +
        +/* Switch */
        +
        +/* This file should include color and image variables corresponding to the light theme */
        +
        +/* Call To Action */
        +
        +/* Icons */
        +
        +/* Navigation Bar */
        +
        +/* Text Input */
        +
        +/* List */
        +
        +/* Overlay */
        +
        +/* Progress bar */
        +
        +/* Checkbox */
        +
        +/* Range input */
        +
        +/* Radio Button */
        +
        +/* Tab bar */
        +
        +/* Switch */
        +
        +/* Containers */
        +
        +/* Icon Button */
        +
        +/* Navigation bar */
        +
        +/* List */
        +
        +/* Search Input */
        +
        +/* Text Area */
        +
        +/* Checkbox */
        +
        +/* Radio */
        +
        +/* Range input */
        +
        +/* Search Input */
        +
        +/* Switch */
        +
        +/* Text Input */
        +
        +/* Radio input */
        +
        +/* Overlay */
        +
        +/* Textarea */
        +
        +/* Progress bar container */
        +
        +/* Progress bar progress */
        +
        +/* Search input */
        +
        +/* Switch */
        +
        +/* Notification */
        +
        +
        +
        +
        +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/build/styleguide.css b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/build/styleguide.css new file mode 100755 index 0000000..bcbf2a8 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/build/styleguide.css @@ -0,0 +1,495 @@ +/*! +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +/* Styleguide CSS here pls ------------------------------------------------------------------------------- */ + +html { + height: 100%; + width: 100%; + position: absolute; +} + +body { + color: #444; + font: 14px "source-sans-pro", "source", helvetica, arial, sans-serif; + line-height: 21px; + margin: 0; + padding: 0; + -webkit-font-smoothing: subpixel-antialiased; +} + +.guides { +/* border: 1px solid red;*/ +} + +.space { + height: 90px; +} + +#container { + min-width: 600px; +} + +#test-container { + padding: 0 120px 30px 30px ; +} + +h1,h2,h3,h4,h5,h6 { + color: #000; + font-family: "source-l", helvetica, arial, sans-serif; + font-weight: normal; + margin: 0; +} + +h4 { + border-bottom: 1px solid #d7d7d7; + font-size: 30px; + margin: 20px 0; +} + +h5 { + font-size: 21px; +} + +h4 span { + background: #fff; + padding: 0 7px 0 0; + position: relative; + bottom: -10px; +} + +.tabular { + border: 1px solid rgba(0,0,0,0.09); + border-spacing: 0; + margin: 14px 0; +} + +th, td, .tabular td.var { + border-bottom: 1px solid #eee; + font-size: 15px; + font-weight: normal; + padding: 5px 10px; + text-align: left; +} + +th { + white-space: nowrap; +} + +.tabular tr:last-child td { + border: none; +} + +.tabular td { + font-size: 12px; + padding: 10px; +} + +.images { + width: 100% !important; +} + +.images td, +.images th { + border-right: 1px solid #eee !important; + padding: 18px; + text-align: center; + vertical-align: top; +} + +.images th { + padding: 9px; +} + +.images tr:last-child td, +.images tr th:last-child { + border-right: none !important; +} + +.images img { + width: 300px; +} + +header { + background: #3a3f42 url("../img/bg_dark.png") repeat-x; + bottom: 0; + cursor: default; + left: 0; + overflow-y: scroll; + padding: 0 0 30px 0; + position: absolute; + top: 0; + width: 220px; +} + +#main { + bottom: 0; + left: 220px; + margin: 0; + overflow-y: scroll; + padding: 0 100px 60px 40px; + position: absolute; + right: 0; + top: 0; +} + +header hgroup { + padding: 15px; +} + +header hgroup { + border-bottom: 1px solid rgba(0,0,0,0.36); + box-shadow: 0px 1px 0px rgba(255,255,255,0.11); +} + +header h1 { + color: #fff; + font-size: 18px; + text-shadow: 0 -1px 0 #000; +} + +header h2 { + color: #c7c7c7; + font-size: 12px; + text-shadow: 0 -1px 0 #000; +} + +header h3 { + color: #A4B4B7; + font-size: 14px; + text-shadow: 0 -1px 0 #000; + margin: 15px 0 5px 15px; +} + +header ul { + list-style: none; + margin: 0; + padding: 0; + width: 100%; +} + +header a { + box-sizing: border-box; + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #bbb; + display: block; + font-size: 14px; + height: 24px; + line-height: 24px; + padding: 0 15px 0 30px; + text-shadow: 0 1px 0 #000; +} + +header a:link, +header a:visited { + color: #c7c7c7; + text-decoration: none; +} + +header .selected { + background: rgba(112,112,112,0.24); + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #fff !important; +} + + +header a:hover { + background: rgba(112,112,112,0.24); + border-top: 1px solid rgba(0,0,0,0); + border-bottom: 1px solid rgba(0,0,0,0); + color: #fff !important; +} + +header a:focus { + border: 1px solid #0940fd; + -webkit-box-shadow: 0 0 4px #0088ff; + box-shadow: 0 0 4px #0088ff; + outline: none; + margin-left: 4px; + margin-right: 4px; + padding: 0 10px 0 25px; + background: rgba(112,112,112,0.24); + color: #fff !important; +} + +header a:active { + background: rgba(0,0,0,0.24); + border-top: 1px solid rgba(0,0,0,0.2); + border-bottom: 1px solid rgba(255,255,255,0.15); + color: #fff; +} + +h4:target span { + -webkit-animation: highlight 5s ease; + -moz-animation: highlight 5s ease; +} + + @-webkit-keyframes highlight { + 0% { color: #0083E8; text-shadow: 0 0 4px rgba(0,136,255,.69); } + 100% { color: #000; text-shadow: none; } + } + +.preview { + border-spacing: 0; + width: auto; +} + +.preview td { + padding: 15px 30px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.bg-light { + background: #f8f8f8; + border: 1px solid rgba(0,0,0,0.09); + font-size: 12px; +} + +.fonts.tabular { + width: 100%; +} + +.fonts.tabular th.bg-white { + border-bottom: 1px solid rgba(0,0,0,0.09); +} + +.fonts.tabular th.bg-lightgray { + border-bottom: 1px solid #bdbdbd; +} + +.fonts.tabular th.bg-slategray { + border-bottom: 1px solid #5c6061; +} + +.fonts.tabular td { + vertical-align: top; + width: 33%; +} + + +/* Selection ------------------------------------------------------------------------------- */ + +::selection { + background: #e0f0fa; + color: #000; +} + +header { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Scrollbars ------------------------------------------------------------------------------- */ + +::-webkit-scrollbar { + height: 8px; + width: 8px; +} + +::-webkit-scrollbar-track { + background: rgba(0,0,0,0.1); + box-shadow: inset 0 0 6px rgba(0,0,0,0); + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0); + border-radius: 4px; + -webkit-border-radius: 4px; +} + +::-webkit-scrollbar-thumb { + border-radius: 4px; + -webkit-border-radius: 4px; + border: 1px solid rgba(255,255,255,0.15); + background: rgba(0,0,0,0.3); + box-shadow: inset 0 0 6px rgba(0,0,0,0); + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0); +} + +::-webkit-scrollbar-thumb:window-inactive { + background: rgba(0,0,0,0.1); +} + + +/* Scrollbars ------------------------------------------------------------------------------- */ + + +/* Container */ +.modal { + /* Overlay page content */ + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.6); + z-index: 10000; + + /* Transition opacity on open */ + -webkit-transition: opacity 200ms ease-in; + transition: opacity 200ms ease-in; + + /* Hide for now */ + opacity: 0; + pointer-events: none; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Show modal */ +.modal:target { + opacity: 1; + pointer-events: auto; +} + +/* Hide modal */ +.modal:active { + opacity: 0; +} + +/* Content */ +.modal > div { + width: 65%; + background: #fff; + position: relative; + margin: 10% auto; + + /* Default minimise animation */ + -webkit-animation: minimise 500ms linear; + + /* Prettify */ + padding: 12px 15px; + border-radius: 4px; + box-shadow: 0 15px 36px rgba(0,0,0,0.6); + background: #fff; + text-shadow: 0 1px 0 #fff; +} + +/* Override animation on modal open */ +.modal:target > div { + -webkit-animation-name: bounce; + -moz-animation-name: bounce; +} + +.modal h1 { + font-size: 24px; + padding: 0 0 10px; +} + +@-webkit-keyframes bounce { + 0% { + -webkit-transform: scale3d(1,1,1); + } + 55% { + -webkit-transform: scale3d(1,1,1); + } + 100% { + -webkit-transform: scale3d(1,1,1); + } +/* 0% { + -webkit-transform: scale3d(0.1,0.1,1); + box-shadow: 0 3px 20px rgba(0,0,0,0.9); + } + 55% { + -webkit-transform: scale3d(1,1,1); + box-shadow: 0 10px 20px rgba(0,0,0,0); + } + 75% { + -webkit-transform: scale3d(0.95,0.95,1); + box-shadow: 0 0 20px rgba(0,0,0,0.9); + } + 100% { + -webkit-transform: scale3d(1,1,1); + box-shadow: 0 3px 20px rgba(0,0,0,0.9); + } +*/ +} + +@-webkit-keyframes minimise { + 0% { + -webkit-transform: scale3d(1,1,1); + } + 100% { + -webkit-transform: scale3d(0.1,0.1,1); + } +} + +/* Modal close link */ +.modal a[href="#close"] { + position: absolute; + right: 0; + top: 0; + color: transparent; +} + +/* Reset native styles */ + .modal a[href="#close"]:focus { + outline: none; +} + +/* Create close button */ +.modal a[href="#close"]:after { + content: url("../img/close_modal.png"); + display: block; + + /* Position */ + position: absolute; + right: 15px; + top: 15px; + + /* Style */ + font-size: 12px; + text-decoration: none; + text-shadow: none; + text-align: center; + font-weight: bold; + background: #fff; +} + +.modal a[href="#close"]:focus:after, +.modal a[href="#close"]:hover:after { + +} + +.modal a[href="#close"]:focus:after { + outline: 1px solid #000; +} + +.modal a[href="#close"] { + text-shadow: none !important; +} + +/* Open modal */ +a.openmodal { + display: block; + text-align: center; +} + +a.openmodal:hover, +a.openmodal:focus { + +} \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/build/styleguide.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/build/styleguide.js new file mode 100755 index 0000000..67f89bf --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/build/styleguide.js @@ -0,0 +1,10 @@ +if (!document.querySelector('override')) { + var head = document.querySelector('head'); + var link = document.createElement('link'); + link.id = 'override'; + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = '../../release/css/' + location.href.split('/').pop().split('.')[0] + '.css'; + link.media = 'all'; + head.appendChild(link); +} \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js new file mode 100755 index 0000000..6c472dd --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/checkchromiumsrc.js @@ -0,0 +1,13 @@ +var chromiumSrc = process.env.CHROMIUM_SRC; + +module.exports = function(grunt) { + + grunt.registerTask('check_chromium_src', "Internal task to store CHROMIUM_SRC env var into chromiumSrc", function() { + if (!chromiumSrc) { + grunt.fail.warn("Please set the CHROMIUM_SRC env var to the root of your chromium sources(ends in /src)"); + } else { + grunt.log.writeln("CHROMIUM_SRC points to " + chromiumSrc.cyan); + } + }); + +} diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/telemetrygentest.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/telemetrygentest.js new file mode 100755 index 0000000..2b0bb0c --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/telemetrygentest.js @@ -0,0 +1,98 @@ +var fs = require("fs"), + jade = require("jade"), + path = require("path"); + +module.exports = function (grunt) { + + var TELEMETRY_DIR = 'dev/test/perf/telemetry/perf/page_sets/', + MASTER_JADE = 'topcoat_telemetry.jade'; + + grunt.registerTask('perf', 'Generates performance test', function (platform, theme) { + + var perfJades = findAllPerfJadeFileInSrc(); + + var targetPlatform = platform || 'mobile', + targetTheme = theme || 'light'; + + var targetCSS = prepareCSS(targetPlatform, targetTheme); + + var jadeCompileData = {}; + + grunt.util._.forEach(perfJades, function (jadePath) { + + var jadeFileName = path.basename(jadePath).split('.')[0]; + + prepareJadeCompileData(jadeCompileData, jadePath, + jadeFileName, targetPlatform, targetTheme, targetCSS); + + createTelemetryJSON(jadeFileName); + }); + batchCompileJade(jadeCompileData); + }); + + var findAllPerfJadeFileInSrc = function () { + + var jades = grunt.file.expand('node_modules/topcoat-*/test/perf/topcoat_*.jade') + .concat('node_modules/topcoat-checkbox/test/perf/checkbox-test.jade'); + + if (jades.length === 0){ + throw new Error("ERROR: No jade file is found in src/../test/perf/"); + } + + return jades; + }; + + var prepareCSS = function(platform, theme) { + + return "release/css/topcoat-" + platform + "-" + theme + ".min.css"; + }; + + var prepareJadeCompileData = function (jadeCompileData, jadePath, + caseName, platform, theme, css) { + + var jadeContent = fs.readFileSync(jadePath, "utf8"), + getHtml = jade.compile(jadeContent); + + jadeCompileData[caseName] = { + options: { + data: { + platform: platform, + theme: theme, + css: css, + name: caseName, + componentHTML: getHtml() + } + }, + src: TELEMETRY_DIR + "topcoat/" + MASTER_JADE, + dest: TELEMETRY_DIR + "topcoat/" + caseName + ".test.html" + }; + }; + + var createTelemetryJSON = function (caseName) { + + var jsonContent = { + "description": "Test", + "archive_data_file": "../data/topcoat_buttons.json", + "pages": [ + { + "url": "file:///topcoat/" + caseName + ".test.html", + "smoothness": { + "action": "scrolling_action" + } + } + ] + }; + + var jsonFilePATH = TELEMETRY_DIR + caseName + '.test.json'; + + fs.writeFileSync( + jsonFilePATH, + JSON.stringify(jsonContent, null, 4), + 'utf8'); + }; + + var batchCompileJade = function(data){ + grunt.config('jade', data); + grunt.task.run('jade'); + }; +}; diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/telemetrysubmit.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/telemetrysubmit.js new file mode 100755 index 0000000..f9f6fb2 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/tasks/telemetrysubmit.js @@ -0,0 +1,101 @@ +module.exports = function(grunt) { + + grunt.registerTask('telemetry-submit', 'Submit telemetry test results', function(gitCWD) { + + var exec = require("child_process").exec, + commandToBeExecuted = 'git log --pretty=format:"%H %ci" | head -n 1', + done = this.async(); + + var part1 = { + properties: { + path: { + message: 'Path to telemetry output file', + required: true + }, + device: { + message: 'Device on which the test ran', + required: true + } + } + }; + + var part2 = { + properties: { + test: { + message: 'What is the name of the test?', + required: true, + default: '' + }, + type: { + message: 'Is it a test (nightly) ?', + required: true, + default: 'Yes' + } + } + }; + + exec(commandToBeExecuted, { cwd: gitCWD }, function(error, stdout, stderr) { + if (error) { + grunt.log.error('Error'); + console.log(error); + done(); + } else { + + var path = grunt.option('path') + , device = grunt.option('device') + , test = grunt.option('test') + // use env variables to overwrite the location + // where the test results end up, for CI example + , host = process.env.TOPCOAT_BENCHMARK_SERVER + , port = process.env.TOPCOAT_BENCHMARK_PORT + , type = grunt.option('type') + , date = grunt.option('date') + , snapshot + , submitData = require('../test/perf/telemetry/lib/submitData') + , fileName = require('../test/perf/telemetry/lib/extractFileName') + , prompt = require('prompt') + ; + + if (!path || !test || !device) { + // Dummy test to see if it was called without arguments + // in this case we request the user for data + + prompt.start(); + prompt.get(part1, function (err, result) { + var options = result; + + part2.properties.test.default = fileName(result.path); + + prompt.get(part2, function (err, result) { + for (var i in result) + options[i] = result[i]; + + if (options.type.match(/y/gi)) + options.date = 'snapshot ' + new Date().toISOString(); + else + options.date = stdout; + + submitData(options.date, options.path, { + device: options.device, + test: options.test + }, { + host : host, + port : port + }); + }); + }); + } else { + // This is in case for automated tasks that submits the data + submitData(stdout, path, { + device: device, + test: test + }, { + host : host, + port : port + }); + } + } + }); + + }); +}; \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/README.md b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/README.md new file mode 100755 index 0000000..0fc795e --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/README.md @@ -0,0 +1,79 @@ +Performance tests based on chromium telemetry (see https://github.com/topcoat/topcoat/wiki/Measuring-performance for details) + +# Preparing to run the tests +A few steps are required before you can run the telemetry tests. + +First of all, you need to download chromium source code locally, as described on http://www.chromium.org/developers/how-tos/get-the-code. No need to compile, just download it. +Then export the location for the 'src' folder in the CHROMIUM_SRC environment variable, like in +``` +export CHROMIUM_SRC = /Users/cataling/work/chromium/home/src_tarball/tarball/chromium/src/ +``` + +Then you need to manually patch a little bit two of the benchmark files (the patches are just one liners, it they get bigger we'll just duplicate the benchmarks in topcoat). Locate the files named `loading_benchmark.py` and `smoothness_benchmark.py` in `$CHROMIUM_SRC/tools/perf/perf_tools`. Inside, look for the method `MeasurePage`, and find an appropriate place to paste `results.Add("UserAgent", "", tab.EvaluateJavaScript("navigator.userAgent"));`. This makes the benchmarks include the user agent string as part of their output, and we need this info to submit the results to the server. + +NOTE: we should make a patch for these modifications + +Next you can prepare the telemetry tests: +``` +grunt telemetry +``` +This does few things: +* it generates html snippets based on grunt template from test/perf/topcoat-*.test.jade of each of Topcoat component. So make sure you build Topcoat first, by ```grunt default```, so that Topcoat components are downloaded into the src folder; +* then it uses that html snippet to generate the actual test file from topcoat/test/perf /telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade; +* last, it copies those test files to the right location in chromium telemetry tests. + +# Running performance tests locally +You can run a telemetry test with: +``` +cd $CHROMIUM_SRC/tools/perf +./run_multipage_benchmarks --browser=system loading_benchmark page_sets/topcoat_buttons-base.test.json -o /tmp/loading_benchmark_topcoat_buttons-base.txt +./run_multipage_benchmarks --browser=system smoothness_benchmark page_sets/topcoat_buttons-base.test.json -o /tmp/smoothness_benchmark_topcoat_buttons-base.txt +``` +We store the benchmark output in a file - the next script will take this output and push it to the server + +For steps of running performance tests on Android: +https://github.com/topcoat/topcoat/wiki/Running-TopCoat-Performance-Test-on-Android + +# Pushing benchmark results to the server + +There is a grunt task that automates the process `$ grunt telemetry-submit --path=test_results.txt --type=sha|snapshot [--device] [--test]` + +Device is an optional parameter and sets the device on which the test ran. +For `type snapshot` you have to send in a date param as well. You have to use: `date -u +"%Y-%m-%dT%H:%M:%SZ"` + +Type is either `sha` or `snapshot`. + + * `sha` is for running the tests on a stable version (in black) + * `snapshot` is for running custom nightly builds of topcoat (in red) + * ![x axis perf view](http://i.imgur.com/DrKxFlI.png) + +Test is an optional parameter and it overrides the default test name ( which is the name of the file from path ). + +There is a `settings.js` file located under `/test/perf/telemetry/lib/` where you can change the address where to submit. It is currently set for http://bench.topcoat.io/v2/benchmark + +If you set an `TOPCOAT_BENCHMARK_SERVER` and `TOPCOAT_BENCHMARK_PORT` env variables you can override the default settings. + +You can view the results at http://bench.topcoat.io + +# Running all tests +There's also a handy script to run all the performance tests and push the results on the server. +It's located at `https://github.com/topcoat/topcoat/blob/master/test/perf/telemetry/bin/runAll.py`. +Check out the script for details on how to run it. + +# Adding a new performance test +Before adding new tests, you should make yourself comfortable with the chromium telemetry framework and running telemetry tests in chrome. + +Topcoat performance tests are located in `test/perf/telemetry/perf/page_sets` (the folder convention matches the one from chromium telemetry tests). When building telemetry with `grunt telemetry` this folder is copied over `page_sets` in chromium src. There is one .json file that describes each test, its structure is as required by chromium telemetry framework. You will need to add a new json file to describe your test - just start from an existing ones. + +The files for the tests are located under the `topcoat` folder. You can either add html file directly, or use jade. Jade files are converted to html when you run `grunt telemetry`. The html files will be generated under `page_sets` in chromium src. Currently, if you're adding a jade file you need to manually add it to `Gruntfile.js` (just look up where topcoat_buttons.jade is added). If future we'll get rid of this. + +Inside the test files (html or jade) you can reference the topcoat assets (css, fonts, images) under "./release/". The whole `./release` folder under topcoat root and all the components are copied there by `grunt telemetry`. + +In the json file you can reference the test file to load using `file:///topcoat/` URLs. Use .html here even if you use .jade for tests - you want to reference the generated html file, not the jade template. When running the tests, telemetry will instantiate a local HTTP server and rewrite the URLs, they will not be loaded with the file protocol. + +From telemetry we're currently using loading and smoothness benchmarks. The runAll.sh script currently runs these two benchmarks on all the .json tests under page_sets. + +Note 1: runAll.py uses CEF ([chromium embedding framework](https://code.google.com/p/chromiumembedded/)) to run the tests on desktop (Win and Mac) by default. This is because the target for TopCoat are web applications, not web sites, and CEF is the preferred way to develop web applications on desktop. +We're currently using a custom CEF build because telemetry does not work in CEF by default. A patch has been submitted to CEF upstream (https://code.google.com/p/chromiumembedded/issues/detail?id=917&sort=-id) to fix this. + +Note 2: part of this will probably change when we switch to the new components/themes architecture. diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py new file mode 100755 index 0000000..3dd8aba --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.py @@ -0,0 +1,200 @@ +# Copyright 2012 Adobe Systems Inc.; +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# Runs all the telemetry tests and pushes results to the server +# +# Make sure to run in from its folder! +# +# Env vars used: +# - TestHelper.CHROMIUM_SRC: path to chromium src +# - DEVICE_NAME: a label to identify the machine running the tests when submitting results +# - CEF_HOME: path to CEF binaries (needed only if USE_CEF is set to True) +# - USE_CEF: if run with CEF, set this to 'True' +# + +import os +import sys +import shutil +import subprocess +import glob +import platform +import shutil + + +class TestHelper(): + GRUNT = "grunt" + RESULTS_DIR = "/tmp/topcoat-telemetry" + BROWSER = "system" + BROWSER_EXEC = None + SUBMIT_TYPE = "SHA" + + CHROMIUM_SRC = os.environ.get("CHROMIUM_SRC") + DEVICE_NAME = os.environ.get("DEVICE_NAME") + CEF_HOME = os.environ.get("CEF_HOME") + USE_CEF = os.environ.get("USE_CEF") + + @staticmethod + def init(targetPlatform, targetTheme): + TestHelper._checkEnvVars() + TestHelper._prepareProperties() + TestHelper._prepareResultsDir() + TestHelper._cleanTelemetryTests() + TestHelper._prepareTelemetryTests(targetPlatform, targetTheme) + + @staticmethod + def _getPlatform(): + p = platform.platform().lower() + if p.find('windows') != -1: return "Win" + if p.find('darwin') != -1: return "Mac" + if p.find('linux') != -1: return "Lin" + + @staticmethod + def _checkEnvVars(): + if not TestHelper.DEVICE_NAME: + raise RuntimeError("Please set DEVICE_NAME env var (no spaces allowed yet)") + + if not TestHelper.CHROMIUM_SRC: + raise RuntimeError("Please set CHROMIUM_SRC env var.") + + if not TestHelper.USE_CEF: + raise RuntimeError("Please set USE_CEF env var.") + + if (TestHelper.USE_CEF == 'True') and (not TestHelper.CEF_HOME): + raise RuntimeError("Please set CEF_HOME if you set USE_CEF to True") + + @staticmethod + def _prepareProperties(): + p = TestHelper._getPlatform() + + if p == "Win": + TestHelper.GRUNT = "grunt.cmd" + TestHelper.RESULTS_DIR = "C:\\tmp\\topcoat-telemetry" + TestHelper.BROWSER = "exact" + TestHelper.BROWSER_EXEC = "%s\\app\\cefclient.exe" % TestHelper.CEF_HOME + + if p == "Mac": + if TestHelper.USE_CEF: + TestHelper.BROWSER = "exact" + TestHelper.BROWSER_EXEC = "%s/app/cefclient.app/Contents/MacOS/cefclient" % TestHelper.CEF_HOME + + if p == "Lin": + TestHelper.BROWSER = "android-chrome-beta" + + @staticmethod + def _prepareResultsDir(): + print "runAll.py: Preparing results dir %s" % TestHelper.RESULTS_DIR + if os.path.isdir(TestHelper.RESULTS_DIR): + shutil.rmtree(TestHelper.RESULTS_DIR) + os.makedirs(TestHelper.RESULTS_DIR) + + @staticmethod + def _prepareTelemetryTests(targetPlatform, targetTheme): + print "runAll.py: Preparing telemetry tests" + subprocess.check_call([TestHelper.GRUNT, 'telemetry:'+targetPlatform+':'+targetTheme]) + + @staticmethod + def _cleanTelemetryTests(): + print "runAll.py: clean up CHROMIUM_SRC/tools/perf/page_sets/topcoat" + path = TestHelper.CHROMIUM_SRC + "tools/perf/page_sets/topcoat" + if os.path.exists(path): + shutil.rmtree(path) + + @staticmethod + def runTests(user_defined_test_list, how_many_rounds_to_run_the_test): + print "runAll.py: Running telemetry tests, results in %s" % TestHelper.RESULTS_DIR + + telemetry_tests = ["loading_benchmark", "smoothness_benchmark"] + + if user_defined_test_list and len(user_defined_test_list) != 0: + topcoat_test_files = user_defined_test_list + else: + topcoat_test_files = glob.glob(os.getcwd() + "/../perf/page_sets/*.json") + + def genCmd(): + cmd = [ + "python", + TestHelper.CHROMIUM_SRC + "/tools/perf/run_multipage_benchmarks", + "--browser=" + TestHelper.BROWSER, + telemetry_test, + TestHelper.CHROMIUM_SRC + "tools/perf/page_sets/%s" % topcoat_test_file, + "-o", TestHelper.RESULTS_DIR + "/%s_%s-%s.txt" % (telemetry_test, topcoat_test_name, test_round) + ] + if TestHelper.BROWSER_EXEC: + cmd.insert(3, "--browser-executable=" + TestHelper.BROWSER_EXEC) + return cmd + + for tf in topcoat_test_files: + topcoat_test_file = tf.split(os.sep)[-1] + topcoat_test_name = topcoat_test_file.split(".")[0] + print "runAll.py: Running tests for %s" % topcoat_test_name + + for telemetry_test in telemetry_tests: + for test_round in range(how_many_rounds_to_run_the_test): + cmd = genCmd() + subprocess.check_call(cmd) + + @staticmethod + def submitResults(git_cwd): + print "runAll.py: Pushing telemetry data to the server" + result_files = glob.glob(TestHelper.RESULTS_DIR + "/*.txt") + for rf in result_files: + subprocess.check_call([ + TestHelper.GRUNT, + "telemetry-submit:" + git_cwd, + "--path=" + rf, + "--device=" + TestHelper.DEVICE_NAME, + "--test=" + rf.split(os.sep)[-1][:-6], + "--type=" + TestHelper.SUBMIT_TYPE + ]) + + +if __name__ == "__main__": + + # Usage: + # ./python runAll.py --platform=VALUE --theme=VALUE [--gitCWD=VALUE] [--test=VALUE] [--round=VALUE] + # --platform= desktop or mobile + # --theme= light or dark + # [optional] --gitCWD=PATH_WHERE_YOU_WANT_TO_RUN_GIT_LOG, e.g. src/skins/button + # [optional] --test=ONE_OR_MORE_TESTS_YOU_WANT_TO_RUN, e.g. topcoat_button.test.json + # [optional] --test=HOW_MANY_ROUNDS_TO_RUN_THE_TEST, default is 1. + + platfrm = theme = git_cwd = test_list = None + test_round = 1 + + args = sys.argv[1:] + + for arg in args: + arg_key, arg_val = arg.split('=') + if arg_key == '--platform': + platfrm = arg_val + elif arg_key == '--theme': + theme = arg_val + elif arg_key == '--gitCWD': + git_cwd = arg_val + elif arg_key == '--test': + test_list = arg_val.split(',') + elif arg_key == '--round': + test_round = int(arg_val) + else: + print "%s is not recognized." + + if not platform or not theme: + raise RuntimeError("ERROR: --platform and --theme must be set.") + + if not git_cwd: + git_cwd = '' + + TestHelper.init(platfrm, theme) + TestHelper.runTests(test_list, test_round) + TestHelper.submitResults(git_cwd) \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh new file mode 100755 index 0000000..aa088c0 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/bin/runAll.sh @@ -0,0 +1,105 @@ +#!/bin/sh +# Copyright 2012 Adobe Systems Inc.; +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# Runs all the telemetry tests and pushes results to the server +# +# Make sure to run in from its folder! +# +# Env vars used: +# - CHROMIUM_SRC: path to chromium src +# - DEVICE_NAME: a label to identify the machine running the tests when submitting results +# - CEF_HOME: path to CEF binaries (needed only if USE_CEF is set to True) +# + +RESULTS_DIR=/tmp/topcoat-telemetry +USE_CEF=true + +function checkEnvVars() { + if [ -z "$DEVICE_NAME" ] + then + echo "Please set DEVICE_NAME env var (no spaces allowed yet)" + exit 1 + fi + + if [ -z "$CHROMIUM_SRC" ] + then + echo "Please set CHROMIUM_SRC env var" + exit 1 + fi + + if ($USE_CEF) + then + if [ -z "$CEF_HOME" ] + then + echo "You need to set CEF_HOME if yout set USE_CEF to True" + exit 1 + fi + fi +} + +function prepareResultsDir() { + echo "runAll.sh: Preparing results dir $RESULTS_DIR" + rm -rf $RESULTS_DIR + mkdir $RESULTS_DIR +} + +function prepareTelemetryTests() { + echo "runAll.sh: Preparing telemetry tests" + grunt telemetry +} + +function runTests() { + echo "runAll.sh: Running telemetry tests, resuls in $RESULTS_DIR" + + if ($USE_CEF) + then + browserParams="--browser=exact --browser-executable=$CEF_HOME/app/cefclient.app/Contents/MacOS/cefclient" + else + browserParams="--browser=system" + fi + + testFiles=$(ls ../perf/page_sets/*.json); + + currentDir=`pwd` + cd $CHROMIUM_SRC/tools/perf + + for test in $testFiles + do + testFileBaseName=$(basename $test) #ends with .json + testName=$(echo $testFileBaseName | cut -d '.' -f 1) + echo "runAll.sh: Running tests for $testName" + ./run_multipage_benchmarks $browserParams loading_benchmark page_sets/$testFileBaseName -o $RESULTS_DIR/loading_benchmark_$testName.txt + ./run_multipage_benchmarks $browserParams smoothness_benchmark page_sets/$testFileBaseName -o $RESULTS_DIR/smoothness_benchmark_$testName.txt + done + + cd $currentDir +} + +function submitResults() { + echo "runAll.sh: Pushing telemetry data to the server" + + for resultFile in $RESULTS_DIR/* + do + grunt telemetry-submit --path=$resultFile --device $DEVICE_NAME + done +} + + +checkEnvVars +prepareResultsDir +prepareTelemetryTests +runTests +submitResults + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js new file mode 100755 index 0000000..b5d0594 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/csvToJSON.js @@ -0,0 +1,56 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +"use strict"; + +var parseCSV = function(file, cb) { + + var fs = require('fs') + , filename = file + , csv = require('csv') + ; + + var header = []; + var values = []; + var json = {}; + + csv() + .from.stream(fs.createReadStream(file)) + .transform(function(row, index){ + //in case there are blank lines in between key & value on Win7 + if (row[0] == ""){ + return null; + }else{ + return row; + } + }) + .on('record', function(row,index){ + if (index === 0) + header.push(row); + else + values.push(row); + }) + .on('end', function(count){ + header[0].forEach(function (h, idx) { + json[h] = values[0][idx]; + }); + cb(json); + }) + .on('error', function(error){ + console.log(error.message); + }); +}; + +module.exports = parseCSV; \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js new file mode 100755 index 0000000..f3446e5 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/extractFileName.js @@ -0,0 +1,12 @@ +var extractFileName = function (path) { + if (path.split('/').length > 1) { + sep = '/'; + } else if (path.split('\\').length > 1) { + sep = '\\'; + } else { + throw new Error('ERROR: the separator in test result file path is neither "/" nor "\\".'); + } + return path.split(sep).pop().split('.')[0]; +}; + +module.exports = extractFileName; \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js new file mode 100755 index 0000000..b701064 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/settings.js @@ -0,0 +1,31 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +function settings (contentLength) { + var post_options = { + host: 'localhost', + port: '3000', + path: '/v2/benchmark', + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': contentLength + } + }; + + return post_options; +} + +module.exports = settings; diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js new file mode 100755 index 0000000..d3f732d --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/lib/submitData.js @@ -0,0 +1,61 @@ +/* +Copyright 2012 Adobe Systems Inc.; +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +var submitData = function (stdout, path, args, destination) { + var querystring = require('querystring'); + var http = require('http'); + var fs = require('fs'); + var parse = require('./csvToJSON'); + var postOptions = require('./settings'); + var fileName = require('./extractFileName.js'); + + var post_data = {}; + console.log(path); + parse(path, function (j) { + post_data = { + resultName : j + }; + + var version = stdout.split(' '); + + post_data.commit = version.shift(); + post_data.date = version.join(' '); + post_data.test = args.test || fileName(path); + post_data.device = args.device || 'device?'; + post_data = querystring.stringify({data : JSON.stringify(post_data)}); + post_options = postOptions(post_data.length); + if (destination.host && destination.port) { + var location = destination.host.split('/'); + + post_options.host = location.shift(); + post_options.port = destination.port; + } + // Set up the request + var post_req = http.request(post_options, function(res) { + res.setEncoding('utf8'); + res.on('data', function(chunk) { + console.log(chunk); + }); + }); + + // post the data + post_req.write(post_data); + post_req.end(); + + }); + +}; + +module.exports = submitData; \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade new file mode 100755 index 0000000..c38b00f --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/dev/test/perf/telemetry/perf/page_sets/topcoat/topcoat_telemetry.jade @@ -0,0 +1,17 @@ +repeats = 200 + +doctype 5 +html + head + meta(charset="utf-8") + meta(name="format-detection", content="telephone=no") + meta(name="viewport", content="user-scalable=no, initial-scale=1, maximum-scale=1, width=device-width, height=device-width, target-densitydpi=device-dpi") + + title #{name} test + | + + body + -while (repeats > 0) + -var repeats = repeats - 1 + p + | !{componentHTML} diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/LICENSE.txt b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/LICENSE.txt new file mode 100755 index 0000000..d154618 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Black.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Black.otf new file mode 100755 index 0000000000000000000000000000000000000000..ba47f3db43526fb256b02073eb102750867745f8 GIT binary patch literal 88472 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

        8Wc&+}CCU`jEs&%D@qL+549E1WlFUd_B& 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

        5F3@lk=wUo4h}Sj4dZPqpjX68^CY3bERopSoeA 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⋘kI`WEq$ellKm7mq2TD_fz zAkvd7L6biiX>xbwNp|Jlg?3ZlEIxUqgZuGcs!aF)D>jXaf^<5!(mW}B{K1p{-#GyN zciiXaN*xBRxju8B+lwncB~pls9o1CYx~-c6Y}B)U zUUx04e$ussnCs2E^~<+y7F))NPs|BNpcWpb6J zwz@LK^&{a*ToTkTvSK9#_ne7Iw<{*y@W71BvY7ko)U`vqT5h#GOEKwxJ1&$SIR2K4 z|Aj%OvYOsbPwQs>;d{F69yX`~XV3d%-x;$fIb+kD;_rKVwyza@F@BU?-0Sf5 zTi$hfY+=^pt9sD)sHN?kr%bF;VO|;U%^m$`?@O8EInHBI22clic(`r5DXwE!V#AU3F&5+yRA6F3s84vPnSw zE8Ckiua>;R@_eN#XF52Zp6f7hcE`G>8sB*0aV>0(V_w}?Rc_{*KRdddq;Ib{&pmAF z^FI43$3?07e2=#GZ+6Z#Zbh>F;*_I3VkY-rnKSR}#y1Q04m?q@$Kk{t{+q1LyH2yR zZ_=~-;+Zv9Hkof{vRqdC_<}WU=UsM9lv-dk;5lqvn0Qk6eC1%Po7?;NrO)}?)F;H^@2y~u@+K9X(G$)IC_8i z=r4;}1kJzJJ>qmh1=CPn#KW_-)ouG!IGa7FK7Vsp=XNz3bO{LrtCA3CzH@hcLd?C+{_~534cErCaJHM_ zG4jj2HI`*w=)G38|2TL0fW4}OOCttNiI*NayUeLg!PDyZJij0G4)ol#f7(RJSibzA zst>njR2ki}M_K>*=VvwxJYhE^rFwb$>Cs=gxwk6SYH;IN#>{W>l#6GQJ-$uI6~*!fkLdpW+zM|UT&Fx}XmmBVs1wBLMP#rOXS7EdcR!*<$h zCp?O~#++OnEoyo|MVii#|PD(imhnKgjsoTHN*N-f0E~00GDZ0ssI2 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-ExtraLight.otf new file mode 100755 index 0000000000000000000000000000000000000000..5cb8e5fb97423708576a22c0496cc62aef8866bc GIT binary patch literal 84636 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 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Light.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Light.otf new file mode 100755 index 0000000000000000000000000000000000000000..e3c0a7492fd2233e1328ed072111c0df84ed9bcb GIT binary patch literal 88152 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 Z2%EhkErP322FqK>?y}MNI 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 D{gKXx literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Regular.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Regular.otf new file mode 100755 index 0000000000000000000000000000000000000000..40208be604a26af38c4dedb943c11c5a2e45aad3 GIT binary patch literal 89600 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 Vd^)H~a&+r1-Cfd$w_U+7{~wtKlK21s literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Semibold.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceCodePro-Semibold.otf new file mode 100755 index 0000000000000000000000000000000000000000..65b82d105c5d6cfd4abaf63846ad71bd650a2a53 GIT binary patch literal 89576 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 Clv%m} literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Black.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Black.otf new file mode 100755 index 0000000000000000000000000000000000000000..13338c22b5b10c678c960aef42aa3995ac238a7c GIT binary patch literal 98472 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%0Di9AI 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 LW7(w#;t2Ua82QPZ literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Bold.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Bold.otf new file mode 100755 index 0000000000000000000000000000000000000000..8998f3de6e545d65c4a7048dd56e678ae3bf4f38 GIT binary patch literal 104072 zcmdqK2Y6J~_9(v3nU>5+CS@2(!ps~(2}lSjBoKPa1Og!mDfBi;CIymAm{dYZD1wR? z5KuaT^o|s%DxxBy*b4}FK}8X}pgVX_{%f5*he;Igz3=|t?|a{SNoLMIyR5bL>U*D( z^z7_(VjvAfMJ6T0XW16ES^g~H>NXQXdM73)i(wspFC}EqD}=l|J}E0@(82)`UeJD( zkl^iul5EL6%X_^_xK3*5|MQ@X^sKW5hxQRJ8qNo;AC#4o@W;EIIcRSr#K$K+t9#VA z@@2_{a2e2lQeLUOeEd0UIU)Tn6XJcg$YIZyTq(~%+qdwEErJT&vlev$@9$|5Bi8^VFT+OeD!&{KBG5!g2)F+JsD9W8AN=+s{oG}qs7b23tRn4! zG}cE=T968NSwni01@5wz1d^BBWgVGB-glS1NDvq8E_)LnZkW3)kT%?CciA`K70%@@ z8%PIZEGq*-y>X1Y%n`wu?=JIDcDl=6r^{aH$PX9eOG?Dd;=-cJ3Nh1B;c!($WtOwbl?MatWffwE%bDOT z$&U<=h>q@qn$d@~Vk5M5!$zo2Pq6)Il!z@O9IlFDXPL-`XJla^BBD=`vog@J506(z-aj=Tz1q zO!P=TGWKP(~DhRk+|g-)0~sxvb6FANns!!)~yD27U>SW#JA zT2%tdEY>((CHXbQ`3^DPQ4PE-FLi*v0F*pu2`~|@ytvvS7N8cDyPT69d6gAmGKi{j z@Bx)FHn}y=<$%6mtB!&KXpl*<=b@Pu=gIOZDK0ClDhAYf0KBxc3Tz6@hRF_S0_fF9 zhg~diIp6>ib)s4nxIlS<%qeJ$HATgFMKU!NVyS%^h+nKIf=T5w4Jbt*Z~{Hc?XJo) z@E%3QeZ|DNK$R0gSAnL60kf*|LDj;#?>X@7946e&DwW`?Vko6A~$Sq_L1k~9=UYtby2Z~-`+6uX*Ckm&_vfhlPz*(vF1S-$#^WYl@Zd4&KO1)xrd1R+&8 zWGg8sE&&qmPn3yR^tkfDAb5wXb48a2k&kMW2P|>{?HG$tvns@js=OlP2+R{ToaqK2 zWHD7n7zV0P3>xM3WK0c32CxEb@S(A(~>9#qTknQt&>g$o72MxGJ4tAo3DNC8$G~2wG54l?(2uvI;B2Zrv2Oflacn zaY77%YFTlaUu{CR;%WcH1dz=%F|Wv82COLrg>#kK(HFX~8Xcyhip|-9swBuW8E6xMi)VLsZfn-I= zSIR+&K_E3nPLKg+F3f?s)w&r~G65O3%wZ{6Szr@lCowTSElIJD42P?NGvccAA**% ztfDt&43S;LGzTPGZc}MSJh&y7qBzB%0L3s8!dn$c#G^y#`NjKI1Oxu8+u&D~DCdqK z0LxKQAWJ5y%fBA`z}YGA?#Gg*jFTf9rnV1`AhL>KjCO|*haF9anlUZtr&cFb+My{MNC8v8tanf6AkL&{EJBcUMet9rv9&P zo5c@^G!>$wwjB6ZTq)aiC8S4SQBBOyZGY%&mgxB<7H zF2gJaqA6O3+a~}cAvys|FdkyWK#yGxqrgX@DzJcv(`He$M;AG_!JbIC+qD0TTyA13 z0OsPF^lffQkl=wOyK@RaBclWXmpUuKH#o}joi5-Uh|Zo52}orzoS>`uvn@f_+B`?O zY}WR?DP_(Y$fXJy%kO(aujSqWu+%)kBrZ>i78oPMrQhmlq6e{7!sca=OJO@$dv5C z={eaV^vH})%N`A@2QfZvv^X>+Eh$X2je?a}R+gBaDW(j|NKLUpT}oPFYEDv0+8{9j z#-*j>qHtJBHUP~|mxsDRrPyFxvIxW^4hG2a2`Q;5*`ve6~A4P-1$<=**NsgR{e6P&QPCiP@R)Nw#6} znM1>n!gQE&rYLs_2Py%EXd8ipvj)efri#dr`!K}8>8VN3JHZCj$HPjKkpmN#85kxe z#Se=ggfmd!VmJ2;JRCqy4YH-#GUHRj#H$nZN@#DI-&|Y++)2W=a+cAvrUB7yt)R z0FQ8vIlw~b3TnpaMX_KVw#jSw`w9WQaI~9oNw)Y@00?@K_Se4Q58RT$)lT;kN1?q0 z+Dl8aVDCxZ<|&CUfy}H7gOuGN?SPTDYurwjHUoQ>{9@< zC;_Os!0T`lBY%3qoT5nFe>9io^cTx~vIE9S;FTS?gmSS%c?#4y0o#8kJrO9xSy#f$ zP$oHWRt#q-FXUP!;J`DK5=twdbO&rMIKw&O7%U?{s-P8VE0%kQ|5v({0XV8;O-cfO ziDa-FDr!_E=v{BX-ksFQzv0kV(bjO8f>LO!1g$Lx3KD^$awsD`Oe6ny>byug%Ub@Q z(bPq@vKpDMMKG&B+l5Gyfm-CANYY?dr9i((LYrwxsLYT5+jYX1=m~zZfqP7&Ju}C- z6#x%vfCDa>1FQ$y5c&)B6ih2o(@_6W^Ax?!0{@f>=jpQaQKLPOQ=36RkM|&(N3Zi& z`kG@$Ye7pueJ_VHqX+$E3Dnfca%NVd^t3}u1+<~{RKuqj&h6k6N??o#Bhc1RC(yE! z!DfcbP!g zN{3@Mlu|)TiE?cgeE*#sM4%n5HC7($0B*U!51>{|lk3qF_mpS)e`1c^?(;YUEZGJ! z8wRl?6-tU`qht#~E==}{cUCm@-)ks(7beXv07)KrhKWGinj)07g#K zC$tPv{>G?_dRZ=e6y{%8q(J?}h>e} zmIt8MQs(9vi@NG?!)0;R0g$oXCBss0sRG)Wq%dwO@KI649B8fH}wae=!&-9)Gs0ZOgj({N)bH| zQlvF!;aYz^P4|!Y#W#-kerW7FKd4apmGcS}aw%{1_Nx3jm$r%(b zm&n|)%akFFC`*Lkp%l5NXm=U(KutnliJFXj#dbC)%s^3>QKOL`q8vex6P}qN#mL<} z=*Q-vU@Vg%v50|M-c;KaX;;WRKwU&_VBEo3VWdG{&3J@47q;cYuTuA~c)|2Q$(THI zYwGtIb=cNC`YC$DG#EL8yg=HS9FRMRyJ?0k0=-O&k;{MPts-rOxBreK59Tw&j`Tce zJmVu~$u&S5%FES+vx<}%f026RE$RevQ*`s2MRw#J&e3BD$N`q!Dc+;GrZ=S*VNV5k z#WIgDqhkJ#d7!3xgHSO(;|R2AW}$!1F&>nQAP1Z<3VE%}%no*34zpsq%i_MGe@@WN zD!`%8;_;En>@lV@tyOHpC`Iq2a7dvErG;9^VhMT&lp^-~t3;bxvG~BOd@#U4i$`3Y0Sd;v|BU;J zmqm+5Ey5Uxd{@>*jH}G!Q~*r$;fjthc`81Hnc_jj~6#f$Na<9Q5VP5` z`}*8ey74makRLAcpGXq@bfFBNMK{F2X5;{Dtd7O+LO8>Sj8??z(Wa0Kn7?Aafp${^ zZEV*C<-<78H145YqbElCu{To6>;Sd@&lwowfFi%Y=aq*8xKhi6bxaCG2VB2loDfMT z_$12Zq`$HovTiF9WO1|k z+;MjjJrin#q7^7>#fK>{|NZPyCmAM|7vZ^*15b13EVw>kWhOs`LQfuuqda*s>x)tF zL4FAPqVBWEfi_*zY_zhUp!C5g=z*=YvYE1V&;QzNnYU2ZbIR-$PN5wts|kg(hzsdO z-DEPZfSn0tH4-Vu>NJ=w+r?-eRsLS@Shj?k-rVCL6!heX9dWYN8?OA3Pe{w3{Sa~# zd*h1e&#{PE(ZBQCEMHaf0G5}coi$y9FuG7)xTmYkK1!bbe~ePxJ$rdb3){(HIWyBgrkx%h;OYS55Pla!f5gS)i=4#Xjt4?V|AW*bMm%ENL?3{9 zidPqf>6U?lr@R{G!A3d88pzf7R3`C8fIp_Eh<;njNWj$%0mp5H4DK^0DgTY|g0Pfc*F&RC$ zvKPbFrb_H+o+mJkMEzE@1V=KmN&Cmv~~tl z;dt|W^54zeGYX@Kg0*QD=jnl0#*`i&iT`y~!FKRiOjcI&%-^!vpf6>!WEPB(8Rd^& z614#L0?_i&W|-BXwXz)$lm=@-?}4`R?=+r4tpzXU0KGsdFx=>IrvMDxUqKDcm$N3% z3>E+D$qAVrJeVKiy%dpaC>OLL=C@F4 zOd1c$rm#QrnE!5##2}+4pe&ePAQn9L@LGvAXcuhfiCNx%vY&w%6h7nrKEu>p6aNll zQ}~L8HC;dazrRoR_d4OxqU`&toHP=De?LsQYV)8hgGm}~3ga)vf-;Z{^AU=ys-YG4 zXi<~U*Le8f)bso~`}uQLjpNX(DtQp+b1rCqOpz zU@$VFA6~&54K)ZG?=?u1&xS((G=PQLYa^p%95#T4_|gF%;vNRIc;ydqVm};#^T>g7 zEDwUZ1UJ4k7=?JTKdwhnW=Lr^)O)ZtrwSo6d`KDNOd`yI(Hsx3@!BxL8ZG0;9noyS ztI&y@LrUY}lL6nE(2Cb7b6^ynVQmf^GoT;4Zi$eQDx?i#w40(c5Mp`^jF#aQMMhEhLgc}~- zxqwr8#R>*KDa?Fv(Do}A;bN(vUqV!Y7{VNZ_c%E<*o<%mobIK;tlC&bNNgEPGg85*+9p9FJj&IF>26HeI z3$cQr+JRedPdbo}u$dPMmsh%whe%gYt!}{9?rkUsy z4+8^uj4UHBkn7|N@+G-Jz9QcciPLauPRn_5?KqJO;W}`=xp;0Mm%t@)iCigH!j*C5 zdLH}HPkJyj3586=J@B~No1d?0V+y?Ae4%j@{P{3Y%& za)DpRFX4T7Uv4$GhVRI?#3X3VD}&ME(g}`HB3> zb>$+t6mA&j;AU})xux7jZa+x#EAAVRM^An@Kbp6LR1fk;Vb(A5Z}M08&*9m2AC;fV zs0vnfP<2*?t0GmW%!%d{^DuLUInzAKJl4F{yup0J;%8}R>1gR{>0?Q;n(RgooEt+M2i>#56?u1(PD2gNt`N96YIrC#YN(Baih3d+$Qc84~U1wtjjoFcE1_sGZODrm^hgmU3r4=$C<;EH5E zY~c2B=eaMro1l*#J{;hWfUIBO&+r%cYbv7B0v`f_5A9W*?(<;~@F5-eFycNRd@Q1+ zgXJMhtR=xR#!_Nwuq?7HmHDs%_z)v*!`Dd5BFo&4Q=Ajk)96Cw9rg3k%y3AtAd zpXZ^VhEE#SC_neIL4TV3+?#OEcCY`vp7&16mF>YUElTsf-|yYM_shNS0oKiXH~x^W zcP8XIyuaakD1178@$MJzeDS){xB2n24?b&2$miio?X`=aP5o@=wf8?8O~|!V@Ok0d ziEFp6{e11mYd^r*SJ$pz`|R3*Yk}8%u6bWudu`>l%xkIFdR{$w^~BY~gj{_TKI^Y8 zzdH5m$gAmBx?V9~3BJDgb)s-4gW zJ`eg)J=LuC-}(7wKE0`bR(!3h2Y5R4l#hci3;}=nEqKZz@Oa1h0PvdMfge50NAc0% zJD=x6!K?kuNAi<-KmHkh6Tg{PfuBwVPdx&B^(gRAxcPuy?izWF-$T}u7ySYcW<={{IkgrK!auZU}JD}BfAsP4` zlBRo*g#AG>L9cT-6&cHUlX0A$jOPSWz_lQwIUOnFOr(fwNs75vWHQ&9lyPmzRL)AO zxb~!m>qusBT}Un0mCOXqnZbB~e>1!+-?vb;ZWEVG%?B>Rk16&?C$mNrxTroMu zO(yShbIE($Jn{iIpIqb?lB?WOGJt$X29oc=Z~p)Z{g05E{sd|B&ydjFf<*H+B%HrM zqWdc(bd(GsjbsAnLnd;*WD;i}cFvFFa{eTb3n2MiAaQU;Qpbgo>0D>Bf*VX$aw%jL zH-xO_hLSa0Dp|`7BkQ;{vXRRq&v02}6PHakb2(%SH-eny>d5Qdbn+%Qi=5}`3B0+5 zyv@xf?{IU-hui}433!i7+&{==ZV}%?j_@WqzU$>kFF;Pw5weL0zJl+~_u*^#6%g-V z=6Cb^z^k0+FUeUP80Wpikk35eha+kp{1#_qZ>VVcju5Qw_S+QlTM74DsSo+BjQ`E4 zYHXpFrr&MRR{h#>Nh2 zAw1$5C@q9i%g?I7O_E@XfN`(!Z}A`U zm-x^4uR(n&|2rtF9zt?k2*?jXTGC53K$WZ-rpi{0R!veBs>)PVsu`*|sz+4IRBKhw zsP?E1sZOX)t6o>Vt-7eXs`^Uxz3R3~QuAtWwZFQR+M@2L4pT>~d#mHsgVpKk5$bX3 zLUpOSMm;x@gXT9ar!{Cz+P2#E+K04}+FsfL+GOoeZKig#c9OPGTc)kjPS?)SKB8T$eM-Ad zyGgrOdsur?`?B_&_8slV+E2CDwcl!QY47NWPOB4it#wviCtWvP4_zN!f-Xguq07;Y z)8*+V>!#{zb+dHybc=N>b?bFIbo+HjbT8;$)xDwnPQ&`6)9W#>rC#g2wtDULI_&j=*K1zycwO}R%ec z_iNtocwg|o>V4DumiJw~T5r&|*0<9?q>s|~)+gzQ=||`%=!^6&{dE02{p0%O`t|y4 z`u+N&`qTP1^&jdl>p$1u)c>S!6ga_K2oQpW4nj8}Mi?NZ2${kp!70=U^Mrp0PYUaV zZNh%xnDCPDhVY^Asqn2J`DlIoecJf6^XcLf?bFxC<}=J^q>tTavQMqg0-vQmYkju( z?D0A5^PjBg*`c;7+3!+f)RNBd6nb@)#4o$6cT zJJWZr@1wqpeV_DQX5qwgOEwZY5aXD}Lq z45Fcfp{pUv5N8-@7-UE@j516#6d5WFGYkt1j~bpZtTb#g>@plM95b9Uyl!~M@Uh{l z;VZ-UhF=VS_-Xun{EU7wxGQTRn8Gdv99`k#` zZ>8VUep~(a_#N^);dk2ab-xe%F8O`w_nlv(-#vf5e}I2m|Mvdj{xSXo{RjDH`j7U{ z_n+cl?LX815&y;htNl0n@Ag0Ff875i|FiyY`+wwr#s7x?5B|ReZ~W0;K_i^0s8`82zWia)jXjKs@$jHBJoq1<>w?#4z`Ic*A`_F~5NV5#V23Dn=)n%L?9huH;@KgQ z9c=O;fsIRG;}Y1ogxGjzAv{k#CDEP-FD^;UD|W%lG73r@wTXFlK%bcJthDFBJ9;XU z#^|-l^xEzZW2hNf35=`+HavlmmB`3SWMm~WvJzu$jI2Q( zf(FTu2Q`HZ@1lwt5Q`UqN=h&yQ`|S#9oDPBO;R`8F7q-iHwCwjD<;zg-Hxn5`&f0D;-`J zQ6`T{Vq_$-!AWeejSaTp;0VyJOqs+?4~a1hPz)O!!v@FLvgCeQf8t6E0*#1@Wb=+? zuwxlvakgv^RJjg1GN`c(YOF0s7EBJCevT~h92dN5A?L50h?WUXLIwg~da^?tJ0!p% z(q?0vu*K#u5$4?IgpJW>W7usByNxjof>fBA#N#aC3}*=k zHp_UoTVQINz{Vx8aS3c(LQgy6K%PuYo`>>0St5D&smoU+6lsfKa3hlQWh-~cE%53c z^h)sBD)35<`@>{<5*S$tjI0DUJi%>EZoOq>B{H%Sdpa0dg&u+mWypn1A%m4i7kcQ5 zLQoMAv9gsHc}B`KL@~%w2}NM#@M;dQa(Gz*l8l2Q-IkKbC{0W#X87HQ@chZmz=1{g zoKgsHaw;o!lG~+>!=rVaonL>R;q+;TX&K_)3 zkGL{BzS0q1Qc>h^GJ2hV)p%w`?l9nXQ*MWl#271EL!?c%1~|ky?`wP#qbP|?p z5m(*kgpJW>V?@{(5jI9da%7Ec+cok8YdjOIQEY#j+&<0I0!Slmz1+hY(qtypVf z4eOMU9d4I7l9((PB5jGiltMgoV|)p>+u_fR%kIWyZ;A_EAO&K9P99utuLX6ol;DVR zQqbAlSmGm%XNl@S<035e#3%3ISO&kfFxQX*P z6B#nP6YPoUjT==I!=N~oaCkD`&Ws(7?v7~i?(xxy?s3t|G@_MhM8h;nDoX4XMd9`W zfKumhIm64#s!G9U%E!tYc3xQoenqY+fERhO0=!sHE>slPvLpD|GP&fy7X-*9cu5lL zBtx!rL&hUQmX9)IEXk1N0z$?DLY9v*WGperSdt-QL52(tQ>Gb@2w6VLkg+5~mJ0|O z3kX?0%8;?dAY(~}j0IH32svKCYedmjq9P;FR-z)KBJ7pndGK;L8F@ujIlPm~5spVh zE+1v&Sdx*;1w@VoL@pm?5l}$AiaSXj^KNJ>?QCvAo(c2E~{29mKPV76##cDr@_Do01pzX zEVh@xi!Y(N5+_vxug=9c%gK-xjl39$j)?Nq z$hct<>#315p6G}ko*Fs%iH?Z%)SxQ`1U)@9a%L1A(aTdK=NZuvah@8P?C6MiPmMf- z=!gVQje9bQo*J10(Gkh_Ya-b!WR^xm%PAhPl1)Tjd&3zcIf~I4<)Jf*(HZ5TGfHN3 zbhMjUys(SR?SXNv9@U#TGZ+aXxKj^o)u1;E{{XTikfCr3r0#>c%4%n~!nh!Imak!x9zbJWE|7m`%aUh9Lyy zIl|E+lwkmJm*ux<|4+XS+Vd8*|9!6%7xCrbZo-we}?Vs zews8*mSzcTSZ~)H)V9)g)Xs-Z=bhRE+9R;({GRrb_A_08u0&U^tI;jet<(Le`&IY5 z*D$XF*dTt)Yq8fxuY+DMdcEv*(_8Ir@b2!N1lzyW-ZNnPca!%%?<3x)z2DMv`u_Ss z`fU9Y*wo#rKLi`P@900#e=4*P+6l3O4YqGb2#*LGVB7XJ;h#dIkJ?A?WAq93>FhJy zXN=DrpCvx4d^Y-Q_u1`pz~=>@^RPwxkOR}F6(-Zxw{TsPb_{O+grYvtF)FUGI8U$Wm2*m51?H_BYrormcl~*PoqucpF8&d)&Dz^P1vXjpV3W1N zf4cu{{{{Yw{Gaq+0~@W|V5{|n|BL>w`M>G^32d|e>VFS5Spx!s0xSXT13Cx91SABc z2aF5I3z!@*HJ~=2K45;p!hj_Ks{@`6*cEUj;N^g~11<&pGvKR$9|CR%{1!+8wShvQ ze_(K+7}zy1DzIN*Lg3KA^uX*~v($@nU1`Xf^BeZQU>Wm;rmC>Gp&&SA^zM&lS?TlI zMJpC<+7d*AZ9hxxBtg=3mSQZl-3zAkPafPkUN6wE>rFI?`p_1%I9)F#O1_doDwc|= zuhfDjTB%VTo%tzkMO(gd@$)ZU?kBaBT4nW$vIUVKQi z?Zn}=hl5XTbWU7kl}6R{%4{Dbd_Yf|B)yF#ZBt8(4VD{yPQsHF==8#Lf#SD z!t#PyCmf|8K{qN&I-2z5mv`2d z?zUe3QgdYD;6vSmC7aaYd$T~rr%cc8*>QW7rH5|n)T-&l!9`W8cUgsxTQ>Hj{?aD; z5Oq;M$psTyMg8w~(+VmY)RGR-zD`d*`TVj|%TBaetX(>G`G_Y+zagD$O^0cz*By~| zG*6IToilh&@?2Y+1=?Bf!tePc`f6(_Kx>m;oi%7ya(yy1%y|cX-=2UCU9|%3KFqXk z`Ra9REDP2={pgk_e%zg5T*Z) zK2)kV?iKaM2{C$OSp<}`&Bh7BNi)zMYMk*Z%`h2HW|yffKK;nLV9H%PMYUVzZJM*%`pK_S z3QSC+|22$SUOM;m;S-jO8=BgRvbw_Hq2o?pyLR;Sd(Ui~Q?tqX)|Z++lSe(17A%=1 z-!Li8D)f9M<@(FVx9mS`S)>(4>(A4ND)qDzH6~Nh_^a62Y`lFc+-&@A;2 zsjkVnK~U8n1e z$4Yk5K>fBuL2nN|l$e%RJ${nqY>sB*x(#bL2k%%ved^?r8Dp)+8^d(xcGMM@y6Q?M zPhGvc!fK#S`cG4S*|yWCwr@RfV7qfJMj3}k9KWevGEz}ka<({GK0%&R;;SE8s6D? z{OmVDw7aA|Az3U^{qG{}OzSUcX@FF(5lqWuDUX~qH~&$K@pcc;gm+e+e)glF-7~jO zUuQ9xzJBKd`lIBJyLB5h0R7S1{lB(eQBN-4eM5M=CC$;&EZX8Wt)!Jwi|?heK%JI$ zzPrQJ7`07D`H#j*5mLm!9Jo1BFrC;91~GZpSj8Zyu@*Re@aW1-`>aK;Yi3kb%&!QZ zG(%hv^cI_aa%J>v(5NaVvIH!X>DlIgjno7V3PKDerEvemGxs(i6C zSnQH63Bz}d+go8>pcB3sX%>>|shW~6zolv+Ba-UpRny#CG>(Spjg=c)8V}_hd%y7K zVDQ1@1FHY$h|>uhtc!KV+PAkqd+K};RYjkdTJ;-RGJ3e>!${5EgL^g{4Ss%G*~C$W zxsuk}US~W+ExYrx#^e?c%Ne(Azr$+Sw`J>|y)WyFino;SvkDpYRG__Y(e8-v#>R^# z54yLg{>q3K8M+?<-7y*6xd)(|3h0U%x*LG5C~ItPIiTB$=u~@KHkN>)Jg23H8i#7W zxSKBd(^Wd@(A}XL;ZyTBG|nub{APgsq-q*2WNU6|!>Cpx8MVR!X#~}MMfLPa>Qi4M zpea5{{mer9kSm{dk!LxZrP;pmnRQ!&_id9XO($t`>L z3do-^df_|MMEkBEW?7GI-@A5K@QJ;y!HI<>6RkA2vD9=ZH*IgvU@1uQ6Q$Ww1@-O@ z-a+^6W!jns^@fS(XS*gATj@hjyz=}z!TS$ZS8TKzu040+{iW8y+9`AEswM_ctfRbn z>2qVR1q+(RS|LMEN5z}oSbl2#`JiKt9TLCDGHaOT`A1ea)CSen&lC31$4$VOZ95Jg zaPF|@-q0Vi(y;^dX{8VrcAP%@+Rp5ln3C*tt8h!NqS1PAoSn5oAN_e@#)hL9_0H>Q zH*m=(?I7&S^mAP|^XQ^HyJZ0cx!LDF)C&@K{%!ybZ4CH=>Y{e&UfA&TzBTI>JiOK- z9M+GWJVn170@|z1okt@$kGsvC$EmXodhpd6*;jXveYN5IW2Wp`uKbzxix$taOqGac z?$cWyJ`_xY4}VFCwQ;r-3c-SF42scCu5{Js%=Hqg8(UK!;n4OS2L;omDVkS4-+ht# z1W{q~#mvtweWqxR_I{>UR8VAP+yv0bV*S_P{!2DTg8N@c{Tn-jiw@nB^5gE!OO~zy z$DJzmtZpo%!xq*EFzsDCx3AfRF&T=xwyoK$gy*pziz(wB6DC?tx$HY^!9yk%<>p!! zXa#99U2=t{T;VqTLN&KlG>tAXUA^!Ig}Y??zY!bTf2hPs4WM2(Y22q}Z%#NOr)FKi@}6wmj0$18rG0UeUJBF-8{X9m zkeUYFfT`rr5#hgrE(e8+(g-Q%hD2zPm1@-)Wgk)y=Jt=yoY_85(ny-J_zbJztRB2i zr2f?f8yA@kTg^kX1rJx2P6(b*NxSJ6JvaD9uyD7&{!TAW8qk=cidkni3{1-#oVTfb zPX!uneHtXiBTfIL9oOw!cW})XBeK~sxnLHe--(%fi0P1Jt;1C5fl zX=togn$_5rj;1R$QjAs_DLt)uggz|`;HH_5X?fFZ;OIfxS+)8XQ{SWK^M44Y9p3zz z23i{jNuBTZ(e-eakC;4p!x5K7*#1t?sfl}Kj=!=%7*jZfb}*lW2t>PrmwQO)4LK3$ zMShuH*sFi_5QNt)`q4#G^n0f~Z#7)`?)B?e0%_?l-G4FO*ecXd(hC{p8`VPMaFD@p z^qwFyunUv%2KCoZPtd#~%hdGzUWnU8J4gQt;OMP8y)-?w((T`SX#@@g;{PG_R|!+* zn}r*@%t9}-Vdw7MTT8-eEAz)K!R=4i3SUOh;K=KN!gFuEzsM?lL`Cz2J(B-o%k+57 zD~I%kDRZZR`6()`RKv+%WxztZ@sBR3nN1PB_?k$1Xq7y33 zfgjU$!fX0h9)SqK(~-9zLxG!_XghuF0*l}@AGmE6&Y9!1LN%?Y-gGGS7HB^`XrhMd zbyCcnNz^zL?62)J*G8$qUo$P1RemMPMi?Ya29fWp-c7dY5-`Y0g&%%pFcCne3EvORpu$P zY2>rHFTAk-(2Fk?92_;ukvGy}xGCv1SG0yilbpXzIiaj?AhY|2w()7YO|w{c_i4IS z^QhJUPL>V?2e%s>_fb92x&!^ui-(S0e-d&GPH(uSI!srZZV7c;cFnhfq)f<#z~fXD zOnWwO+_}TGvA75}h)XtA?X?QkcZPqfrycZK;gHrgZ0;pTMKQ1<;bRow>PXC9BK= zL}&YCEA71G<>%j(qq9(xXO%K<(FwXMpyd6&)2liQQlL}5~?t$^k*SeqzNK9Ity5SKVR<_b$brEScDH0=z{ zsumh2-MTwTD{%7~KUE3!b)|(zg*%zlhZ72qjDYp$l$EZP+k!T%TfK49x*39MmRYz- z^%{U}NQTV>K_c1-|(g0N#R#tT_K1GNGM&M>Ou=y@utge5OLb0+9W!ERxO zYx>-2b<-_iSDUGcF0K)

        Vgv3)EY0u+knN=(mHO7r@(oq%{^a>|Xlh3W5GguX6WD z8rW`oVXN9tnjj6|a9^K=ghkJ#+z2*oU9$42wZX!YHvrH}0(b5w6(q2m zXt#g7qX92d2TT?wOxQO?&`9mHLQ;nLeIRvnjWAMw64OP2wz@?}Ql1lZw9^I6Wu4Ti zzednLP2<36RZDRi0hR-_PPg=)eFJzz4ZpweLwoGJ_6O3>V=5L90h9tBhdkNeD zPT=2n?jhU)j_f1cqrUL07TjUXt%v2=|pYJmUnn&T~Hz@-pFmZV3eZtW)L2{}jjK#sf#&&~P5LssN1!iVVK`5?H-n|}!Y zGb-V`wuC#M;VyhWfshXgpQwSGqxlqXc&3Zb;^8?WeuSD_BIE)`;6I&yLin-XWEsah z3~;wJU#TKb624Xgk2b(v`}{0;Ooj0EEy-tuhet9#C;SRE+)~Z2<;XTdo+12tH7Vuz zO)*4ANPstg(G1Vc!Q*ozn1fAR{GX+h@OdV9j0qks#9PPX3Ea;Ow{64Q3*cD=xY-|G zdJFITfLpwIO5pKs@+g6)TzGgK&_&=83%H}6cysWC1UxoC#t|}sz*Bi-Jp7YZ0uM&P zvwCnFKRjdzk7JOXgug@J25_>9@V^mw9FLdqVIlr*PqL7}Q*H1lnkvRhHWGNG5&tD> zE`cY>RXGG6vQmw}2W(U$z2J=xs!1Ht!vFsya5p(wL&zoqPuy_>Rq#|G*-FTELY^in z7;7N}Zc?`rRUSvy61XW{16C z#UD~>VEa2*6``7`dQ`OqHoxCjbL#f$e(G$s9q#yEu6|Daq9y>gze_cBngyC|aF6!a z+E{I>Hb?8!&eN{dzN`I7=L`2$*TVhNyL4}R@m{fBC0@^Yz2nV!_keqxU-JG*pQhg< z_zD&w9JaCT!W?0>a7cJgcoXhAzU?FUwD*bgN%JZ2ndP(0=Y-EUzQJ%0@e<#|zTX%E z;V$58!z{xJ!#=|ohTr^J!?yBnzZd+@`+efC_V4H)m;NA%kU@Le` zKt;eKaJTKL02*is91!RT+z@y!@Oz`d*xhI|jxm-RR~e5O-!{?~0WD%%3~Mp1#g-Nq zP2r~DrWabaYB{v!{Fbk^(zhDlYF(>4t-G|I*m_;-SK6rCWVe~pW(6+AMyCU|M^v%#+iUkd)It=P7(ZB5(9+dkX&jkcee!_8yN^UP<>Us`xemSwhO zjpc;pidAO~wf45=SRK}C>mutj*5lR>tv`s~Vmon|I0+sDd=ei0+biB`m({MO-LiHE z+uaCh8!{kdX2_=@ciV@yAKpH+K` z?ONXTnXWs!z7Q4~mK(M>>}C7E$3*$x$Ps z3ZrI4t&Dm#>g#B~=%LYN(VzBk^qAk{P>)Yy{9-1=ER1Q4C9#pQ{bNgF55!)L{iUa& zXUCqKdcNB8YA>$W)Ltuk{SntDE;=qft~73X+#_)-=) zC$djNpN)Oq?CaaNPv5$}`}#`#a{A5gx4Pf6{od^Nd4FyHPW^}UFYf7+8(o=N$!w5GI?Y2^+A0H?HY7vaNc0Y zVAtRe2HzZfFU31WOj(w)D&<(p#S}UuaL7YL(uYhKvSi4yp*cg>4&68O`=LLk`lSY> zPE36w_36|fhxHjYc-Vqrj}F^DZ0E4Xw1?6TrmNFU>7CP^=~L6^razp%JpI-5_tQU5 zzn#HlBxelH7?UwBV@k%_jGYsh9( zL0Q>Z4`(gTT9fr+*7dBfvcAsxJ?mb!G24_KlAV-2BKwK#H?zOa(d9UDUe39kb7KTQ zqSc7>5mQF&A311b&B!yOyhqI#b!v3-81N z$L<|_Z0yTp&yT${_M5T4jw9n*j|&+WF|NA1oa5@o%^SC9-0E>V#yvak*tmDc zT^x6P+z;cu#+$~AKehj!8<|_2yDayU+*`T7Ug8TTwpDDykJei2ZbqxuN9e#>WXM_X7Rbnm6P9}GHlAG62Foqr7cSv zO0Sm1mGvp>S2mz*r8C62)cIri!t&pyu5)?0R#aFk##hX)SX%LVrBK9t=?Ycs9yv@Lbr>PFYq*X^!*x9-Mt z_4KjR7ffG1ec$wx(?6d6(~Pz=;%4N}czDLunZYwB&)hll$jlFBUY+^y=rb)@$lp)rZ#G>Wk~^>KE4Ut-nzJW&N)We1l&@w}##g6C36< zJkhYR;Z(zghU*Q#G~Ao*J-gfNl-V<9KQ;U0?DuAWHT(9Qpg9BQl+0N<=cPGs&iQE0 z&vS0i`E_pS+yQe(%`KR_bnXjtKbxnT7d~&yyqWXX&3ksu z57QX#`Wa&N)XNNed(W8K>DMl#S~}ns?LxJI^YyUc=pdAE&ZHYj7MRLZRuRC@xnB-;ljcLW?BaqcE;^6 z8%uhcjcb$jhQWvqme8tpX2Uw5ZYr#WMpJJG$_BYx7F~CluW&^R5$LSM(!}o2Z6#K(G?SI`SQgtJXa~Bvf#?4 zr7`EO!8EVdHQyPWJ$%j4QY#JIcNuc-#2~odnI!qh*E>_MOTN@vX6bnByCiA}e*Vz% z6`QPvZ5xgvQ%2B^Dq7jNYn{Fk_8Cl4C|#u)Xf{k9Y35!7QO5xK4zO(iJlPD}&U6y+ z(4{wgJj%>HtXH)+8>TFzR!RS^K5%a1+s1M_yd|}1>F7J61}+o!mtN5r_tz%PN~uZo zTA;0Yf7bch_xjRTTEni1;dL{&^3K*!v!S}d%sth3NcB`p8mT=?+pONRYWJFhur;+d zZ}sH0#cxP$TGL)yX)wJE7g;Z8q)6>Z$!}Katl}BDa9y(Y(9AtEc4Se%)>51nE?m8< zG0+e_M>BxXP`zQC%gpUiRqY-9fZ3rAYnhi7S`|4>9Ebr+6+SNGY z&6ZRLd$KEDoMg5iI97Ee_}8DlgO;#?-%CE@$HBi5v@ZTwLkGg9DGj~*s)AoGRKl=^(`RPk`~fRR0|8Fc^EiNyAOX zQ59z6%0w9X%!Z3*+7WPey1&g`1y>wrzwx2oFaz6g`}-(ve_v>}{e2X-zYSZ=+zPWQ zL~odR!CbEh<1)=VXqvqDVC{3V6#83@-_maJAc&EprxxYo-udO(CpD7K?|lJnM=c$s zh7KT*?OQJBt;Wl4nan_lAcb#H3R3K)F4XVn@n?4JwmdulG?a$wjF<29h22l%xAkLk z^@sEG*XIO>bi#`>AShTdzXlUTvd>P`8&__kMvd{T11@IH{tU=IqUVlL%h%Mb>Ii)& z)!#64S3&E-^oE*x8p^I|*UA@RkHUqYTDSyzlwE-}3|$C&?yYLL6^#p2uth=pYiVrb zJh&7;M4B~g%&d|1Bk@xFi|~7LD4o?B_AU(@%z>Nklor|^+ zg1bI&WySVY+gEG@n_1&rUAo43BCa)!(!%D}!?Xikrjf$5#eEu_v&v>W0q)FgGq%s# zHt|wxDN0M*OLH`am-K-v8Xq?9|2WZPET1Z=!D!p-4R7nYXB$I?=^+R_51UI62kzX- zG_5pKAJ|wazncUhL1}5sxN~laSyDHvq`U7dHm%pgwd0xY`WI;1K-fOHTlkT&vC(kn zl4!%mPg$jTchAchPEe79jd1Y{>=85u+{rL~qnF0C zjMVSAn;^HpeS?FY&wZ-KzIR?SN&CX-KCM)EcSIBF=vQ~nnWjEGy{0I*csgAEu=dd= zEj>Kuv*6DUoqTVZRr>!pdk?TEuI>*Q#GTbif`-W$vzys9_MXIO?26qOYwS|22!c`- z5Kva^v0+6;5K-wx0Tn5V8hecjb}_bKjSbJ>ki6gT&MsI|zW?_<@AF1>?z!il+fTm} z%JWp{?1R4@w5Bc>u3xaBw6d#WY*dhs_srnwGiFA{ZI9Zt#i)E$^~~O#M~^sV^zG|B zY4D(ImovuRNSSwCa+ZGh7X*;k2t2mUym?c%hVCriF3(`+5&rz4j4Nq*R3g~ z)P|On^%09!o?I(!fwE&};5?|jrUvTrm8-rPEed5m^FxdIlbrCHjFM0m9}kU=P`YPl z+Lbj%xNl7QJEom%fmw#8a?u?8b0Zt1d?<~u_T+Egd?zYZxF3~|G=*H|1~FBFzHap{ zSnzJ|%DwQ;ELtkiwX!_%N7z0U8}1n@J^jxrJ0tHOv!<;NY-o8|j(93OpK3`^o(*Km zvt1H#Q~#^IV&bf+VIFlkWg}a^86$enpA{P9<(}cJA3M>t^IYR8Zd>@q^_$|8U9$Dr z8R={ob}045cd75orAp;_Rlnlj9g6>#Wh?z<*MSdK{2o#hf0)0u6iZdD1z!+a+%84nhee(aE!wM z-JpF_PNweJxOuz5meztR+D6{pH;xfP1Q4 zY9sqnH_^?*W%_V^^Zu$c)cLFT_f|MVWsmKX*+H*#QtC0~urh|KDjI4OV4TudlWkhh z>_JmzI|N7@QctfwoSa?o1!E?6(#MRSl*h`8!lidU&;q&UV(BdamCB1m^Oo(*pp>JL__$RkS6y#75r=oK6j>cLB{7-zn;DJJ`%Sa zo*j=W$DKzl0qaj)R1~ksEiY1=4Mo3nr6rTmNi+Nk~NMRN&gB5~i zEfd#H65devzglD1*dG3j2{#vB+d$OV$4&7c>p1Xdeoy9}y~~V{bpFA)4-$^LxGh2s zMawl|kA24h!0fE`Ay^^6Ztr5(UPsPne$XX8kgfFx(k<$;m_8RC)`wRC6~4FR^Oymo z)ms}njD-zKmjO6P1x_u82MRwW%)v)`pCtKXc@fs)2yBW#=}^f7DS^@lquLv_T3@;D zHB`u;FCR!tim11_K>kerRNSAPeSfX78wc(nG-#?@Hu!_r;14!LY|;yFUht|o_bb~j z7Kx6=1Y9!x!acZahW& z`9dt&bNb>kqwt#9m4bX+^=?7iQx+J7GRPAKiE2WegZ<^!**@ocQU|+7;5H#h3TI?D zxq+z6xJ5HKp@_WBi#<5u%tMFE zwAr=vZJQYxTL2g>mDLHbJ4bDmZ*U>JZQ)trUsa}{T)med7Vdi8ot0mzB|OXIJpG-= z{-_(2Kjmbadcz1MQwlZn!e-5zr4R6r*q$1bdSHu@dCzE>cn(U|NHkcEwj6ZZiDQkv z;yD{PuA38(0H zrLHKXY^CPQe$}+#gj3;)ug10~TkTy`Wxz{5yOchWsP~`!+Di-_+}s9GFbH@|y;#9w z<@5Jvq5F{d{u+t3=M`SG#JsndAJZ`%>Dy_PF3D4 z42ms9hQ_sMC>EF#5KRN3sNOtX#ENu&d%}+xixXZiM41oy%j)Q6NTsi$Q7skKcA?to z-n@`bA(&84bwZglDQg7lk~NYNnJaSvU_J(MA3Q`;?nL$;Z%!pm%=Go(;T znDPNYlH7z1cVEjHYS!G0my2&oxOm_HO5c}_1n=|s`EhdQ{@;xGqCWuv3#Q+|A?uN*!j4E(w8&V;43U6 z2DN7E%mdZ3~@AtxE$8@=xFe)`7=%0gvqh9(yTx zYBJC%^}XPwY-%dr*NJ2Q!6&X=~7eTaE3o1t@w{Y4?;;RsC#_C zDV~hlwd2$vb?voPYsvBwCf<)LFaDRRuTWJ+)mQ&ewe?$_!LI)g2(TbA0P2EdgqPD1 z$jE8Z-al>sg@!kvp&T^4siZ+=Eh;uAL-JVu0Xl~j(mPrP;f2!mPq%+T`5Y);0OfNF zO7n7gVA)G%vL0-fXwW~0kq94>^oZSwJbfC-zmyKa^Un^OjlvaC{DqH?Nz2<}B=N|V z`_!N5ZYyF{oL(t*)FIR`)yI9pNZnmp^v|@a+FVswP!+ne2Q(f~vUUI?3}Hg~OzHT6 zewS%~-+}+sthUf_PgSLbMpatO{(CLe7bcrscsEK{QUlCOWHa%ff&u!nLXed_f~k1YT2dM( z{Ap5Z{+Tj_#Wwt{{*VV$O>M@N5}ZKg8?%C2sb1CMh!1L1MfX2>>vOKk5D|BE!UIlt zqa<)l6^E)$0HfB#%fj`&+5k4jT46j3dr`Iu35~r`T~D zGIcvrw&d^63UuFXC@j$&8rmt*Ua#nzwo$B_pB#GD+gR+X`NeO?>Et*SI z9o|88j!yEIchN_7*TDH^0-)WsTHt-Z;9l<8f9pWH*VIi0IPiYDrj16}L{$Q^Tqo+r zd3%oYoVG66!yt_6@-4nk-f_b1H$BxpfAjT|zWbXb8L@9{HDo=lb)oXPUK!mEp0Ra} z74`|N=n4}BJf?CgZ$S?>=0BCcfNS9RI>0i@8LXC$$aATS*nqD z4rs?vje3+`k7|qqZrKFn$e&!DyhTbsr=)ZEv|E{vt!%m@8S!JXFPw_EdGCN^XN8_E zlNg1-l?3Isimb?t2~<*la=t0ytp1qVNOhIC#j3^YUtnA3F6PHloH%081b+C@&a6xS z0vXPt09$ZW{SajTZAwdVnFLj~P|D~lW8@iyH;h6IF!q)jjRDFa&8C}Y7RN25+2(Ax zA(o+ts+6ub7m;6vD3o6clP*~<8ANgbV9V=2Sh*UdIR1JQY93|~%7cO(Ck*(RkK2-# z7i*-C4(vZm19b1kEh02Y4P7)MbkX*~D9LULcF%BTx)m{3ar0H9}0OfgVc}1sQZJ@en5GPk2ZhhgeG>HnObUF!_ujokIa zEB$6CK>ls`82wa?%X(GW#ctAZbPx5~1^3Lt~ZV}ywD1IFC3!B88 zCp?TiIS{B}aAcdU(g+Nd zuk5CxXOa+PPK#j`wDUnitvlI?z^tQ^k?AT!?m&%=+Oa03ZT(n~Z*_R3hjra_C ztSH1l8;53?=*CL6K#$OfCrS2DkBeEMGvU)}QOW5AC=y^hWd~{+GoQ*W%6uRNz59s{ zmHAYjuqc40&>BYXt^*`mBFkcaI{esOna^BNY)tVfsEy{mZ&Q3vE@)W36YGB8X zqUuirtl2Gr+ZtXA_@f5Q(j@D8O*6_ zD1t7U;a=!SpIZNlzf$4bFE6A`V&mXpBYWz*58wYZ%osqPVq)6fxMTW~gGj}`&RE`! z`#ETFP>4=(rE0hVy5fJf;K`=Y6vXA$R5~~8F~xC|!FDnXd9WOZz;c`i%W()S$9WB; zvvOzgHTNAg)gUVJUtnmVe4!8j&-DkQ{!{KiTOM|4`izGwc8?;QDg>cI4k}C^D-W8@XsyO*alY}K8Y%i4!Za(u zrCI@SniU{ZtpMt7dLVb+gDNJ%k?Ub~pT{TSSWhw!J~&t`1>(5xi#GDm71o65{}4~j zqEpQw)o3Bu>VaHOJd>Sy{J3*w-@Z;02MpLd@yzOf8Ok)d^FV3%X=w!8^jrsjSx?oA zr3KVB5H#d~{;MD&2h?8$>a5GGx7>gAa$|u-se}LN2kuiH(wNdme*M z9fl%zyD-s2wh}(zUuy}U3nh#f0$z6<59g;m5(3y*?O|gTz{YA1#>xq^j9^zUD;E4B z_?w*hnF|dVr&DADS@u#muT(ktVZB_`8!mS`F9k!K4X}z^8L=)(k3o#v!t7}Nrag%~ zevy_(A=TzFSTEk|I)aZYd!G-AZh)YC&~u}KRJrJcoLztQYYy@+?8O#r2P6Q@1z<1$ za~nuGa;8|w2?6)u!u}O!QcR){T$0H<>z!u&j&|8(|8w0v4Wt`oO~ksK5PTN_427JN z!i$!gh)`O#yYB-%tJ;H%AsZhZFP5%7nv5y%ut)pJ_8`E+9uy?oH;}N#PDnp+f}j25 z`7;pVgc7y!WP7wOxSHJPd)_5MsX|{$q4N=l0<7mQU+PL+vE+OR!KRJa(E4Kq3cJ~6 z@@JcAw+Sm?23x*j$?iiZmKl3P2R_pe;Zr2?%XbZZpjR4FL-7PxG3fS|LAO^2-JT8l z3=;!QZ+6*Z-|VWxI+JAz`ZKG! zG(wqt8__OYJO5bA8h-ket*{Q2bSP<`-+M&W;pA1dSi;$) zV+X8oQ>7+jXTswRhNb??W`z5#3i!gu+oK{Kf$+2^jTTv|giQUxXs>Zdl`t}(!;rc< zM(OE;F^7INIPE$(wNQVU<#aHPrjK~aV2K=J<8(l-|Dja*e6W+Z!+1lEr$hWeeUCoK zzF?Fkr7?ZN!=cG+GOP>NFnHP&!FYaUuDEOUp6Ils!6mi-FVXr+qg!87^_d@<4Q-W= z3wVq7j@(%G7IChBr!>{PMtIHJl0R0#)8p+=++0^@f~p0u6}F@<(iWx#{u(?Ht)jw) zd>p)sGR;9o)A+3WLV)TDvjiZly?#7#>{FeS7?Ne=YEPnPquLh0ky{&H3N_$*8m4dCsvoBpI0qPw4O zsE7V1_l%O;yRvfP66X4CH&))i6TTf**qb_%GJv*;J$a#g1pk9nTw;gt&4iIC zdQ}Hw3uV~e*$jO(o<3)`oDnE_Qb%foHiV~fh(r@!d#C|I!jt=aIxt{z7{}8#9DsKj ziZ&G6Q$je)(Tc$J%Hrv)xOMrKhNy-+!j57}XPRrlhi)Ahr4$g03;Sge*s)KAN1!#F z64>4RJJsWbM zW$bP#ja$irf1n-t7GfDY;of+g)ug5DUMYL=-U#7ZsT?FWLzOcslpp@9AG2zxr|-&eqn|anb>M9`16duXiBhbiO}Z8okXqI9^tT-`tD7 z%x`WH{N`Tth2PxEsug~7i@M;`H;aMh0iq_CA)-up74D&$0)-ci-EOebbbd6CWi*`! zUlH0EoVopCy3`OKsr`}Zd{}87`!+6>_KWccG}BhiUKgc{OJe7UOC051M@{^o4+6@A&30CaUqWr?;C6a5{vVtSA-M(q^<6`Fr>JIEi6_Gi#u5G_ zFhJ|!K0bYMxlt&8&aC1FDHv?Y|LD`R|Fi1BB2n{9R_tW6gwdZNH+iL)L!Du2J+I)u zXVk;&zP+{&d?wHIJ6m1=3F53)O#x#G8ry;|SrwUJREJ30seJAg@wFd675)Ge_=jXU z?Wgh`uBhwD#COs>MJ5NZ_|-YMO+HP+W@;o{BrCqj?^6PPWm9Vk50k(dRW`l^0S8hs(9B0QNN}UT& zn~knk{LW(t5iSZpnThMAwFK`lFgwagXq@H+RCscBu&AA6i#O+st7zxqpOYK%%1O2_ z>*uOYpIJ{^TiiZhoT??rx3M7hF~Bo#!R)f0+M|;tD1V0Xl6|=EPQv+j-eX?P%EO#Q zk@3al)1EyFBLYa zC{uv)R1aR*c<;~P_L6b{*90rCkGuT?0Q!_Iatj36J}?7Ct60*2hS9XASd3gYN1lSb;s1s$%wV_qe z_M4=k*)Reh)ef4Bb*Vj?u2F2Yf}@&rVQcuRO$K4pOtRK2p1W|#e0}Jwwa}P4!9X0V zZd(heZZOZ*Cveog#vFBJ{?Ex%Bv%Qs^MQSMS17@*sFyR#VPRhTy^7$C z-v}}(t9Qcmo+odTiMjF$iKffy-q;S|kO!pYKFly#F2p30dJrX=a4CkU)`Tn4ky5zJ z3RfA@hwtIM&QQ|O^0f96Bcg;_p5`}DTR%YOFzBoALFcFhkRed_fV^Z$X4Zdmh%(^N>0<)NN{rNF%A_bOz(R^uR2O{ zqfMge1U!<<=TRdLyzHHd6KJy~Y_&2Ml|k6ohh+eP;u=h+>ic{Od694!RsN=VvUi`i zKYv8ASznOH3x#!g;etI~V~5a5cH%=oEVQIxxM#`0P^czgxPbf%+Zl5O=Cm`E1)Zs> z@B+0ThtZ{pC@C&Mfg>e2;`=LnFL9*Dv-#~f=$e_ya-%DYq)MWa>8dJflMVv3w1%nu z&GpLfmwPq`KCnzExce&9{QV#u2g?-3JiJc_^AVD8r!KU%Y67SWDw}c#+|NmBKU9Q~ z_~-)`Fm1*CC-70m0G%vEQ>QH)P=wU(k?^zn4i)Y68Z?9=WRFN)a5HDLHO$klb=08 ziNh(zL2Rf?4pi4h=IEFh9=L3}kFMRMVS}aztXdypa62O|h+e#9yY6Pj!DCyZ=g;0~ zpdPQpVY|l;*KC{Qw82pif5vLaBi3WfkhF0|#~}yD?=H~zWaP}s)mzeuT$pj#Z4Xpk z;PmnI4Sn?F-UAqlA((;BYJy0dFCm)QL5>)}LJb0bOFDSqKnhaQxDOj{5WI#@J@}hZ zX;MpR|FSs=7xyLpl4Tf{b;RSS{_q(lf(hxPm=Km}5yD8{7b4i8pFD<5G#qdlkq zc!5AGmgr1&%7GNNU9yXizJd1j86~|IC*hW84YlJe{Cg-eYv;*9Y`s_@Wawwz{*YR! zf|PH$D}#OoXc^G2{tit_DZl-np|(qThfh>4F4p=RIB_0;(mM={YfgDMLtO^cZ-BbY zf;x|9fQ43a)v__7aL>xJH!fJQ%`uXtyI?!Ws$vUSu|1@;FaLw#x@ZEjLMvdqXtJPt zciA(<<&;#!oFDsC1^f$uzXJ4&if*xsSLZL+LzsLQX~om4SbvXcsPd7>B=b45Es}Xc zR4OdLkN2MXm1^s#y;AL=@+tK1mL;Jyd)$&Vvk?0*J-}nqXr1tCp==|*n{$ZeAcFFP zr($+$D?`*X^{CXmR5-=XvAc*{IHkrd+(q2NMHaUpoY+yGR$;k9#Tq!~hhNn+!QDFq zT!kg$#XZ0=1h;|Ugo@xc5S&*LoC0gnQ+gMgxRQIgArpktR;0_gRl;BO7#8*HMV!UI(TkhWA5b=50c`~F|IKR@9p+$yf_ z3&;;~*ZBknj~zcDD%IKW!`B)iFMIMSpCb!A`n_jxjohgba_(;4d-S62e$TZ2v4&C6 zP7%qvZBZL`rlkh^q=R*NBCWvZ_0^b*%(wQ2tRvK0B1Go2G>N%fC}KyHnKQ7U}xaSFWTJIv}{If$Yv* zPRc!&73(?4AVhWV>D@)CO+A-))p_{`Oqn`u-L@$P!D&<@jS%IPyC>*~o<2Eo@xGB- zDm@pT)(IQ;T}gbX`>oG)BtC4@wYegqH!SRB|1}o)@;|HQCae1hf1$P1QQSr?mY#!K zotYOKXC85`rGK2ij36sJz=xI!DU@as)0W4tidj`nI5qvXX2I;43xf5Nd}9wG!4@`- z7M?J*!QccbwY$zoHjT52lUCT&Jh}IEe}jb~CYUIl7GAMo( zL^oGUt}L}zQ;8f^F~ago{z&DX%thxJf6SEpu8f01YMa(Y^gS2`cXMvWB$k`eo#kds zvgBrjs{iO!B!-freg=9-4|&qJxVD?1&P+9uXfJBaM1{TPNFu?X?20A=6yiiv={5uj zMn*LrO%1$3+8cdPajLno6xP^O)>ukKV;)xIe`OC;qE<{J>27kp!Swk^-UB7AD}MpX z{5)w2l=&0dFr7U4@2}L!_i=_!K6~QX)oAZAHESyUad}bYcywe3%4wDU8pqG&N$sgd zLrO%_P8M($VsB1MX%A{b>_JVQy`?KqYTFe}LiencFd86I;yDEdayAMzc9V^Y1{T^@ zZ6r7&&lgLOy_9S;aE1eEidIRS#76n=u zz00FTe@<@BX3DuRPrCfd17i`SLgoN62#`5uNcsu#UI=)m0JBEr(-!`*xyZLdRsI-+ zI#Ft!GpLgm(KDWhW962#Q=1J;IMYIXdtHlXF@h)S$59JuX+;!TFz%}9vb+3j7B6Iv zR<3hRdF7ZEC<5;yN8`cB-OS%>=}&CUnp3f|3L$c@GPk!{P$7ugB%*#^Wqssn9RUxY zf30p^ihhyX|4XIoxYhHdOQjeO*6J)PTFP$q*{1g;UYcb>MowJ##u8VYBPCgCgk_B&lwev#_YgwwncRG2V@K_6MITOD4w`BYF*>)WNQG8VnFRw zB%^?2y^LHz3}^&$5HBjUrl?XIK(O+9JbhDET}+VQlCr z>6!53!h}qBi;U@O5i#9W33Cbr%(MIza0_Y>BVrf7=)=GJp@}?qCO%wbR_k`KO2dOj zo(=h2VAg6aMYDuVmhZ~phP*dRcQlu*5tOZim0Pl5yzel_U01JV?L3^CGRHm9xHM$R ztYBUJNe)8|G)>+wx|~w#^%$Gt81K0CiyvF11SJN=1%9Da8?v(>)jgjvIeuK!h%XYo zCPhrr*K6DsQB93rw}g**qkFK3x1lCOOFLaNvWVD4 z)&NRBqFn>ybQU6AnK_d>zs;bj6)u>QXc~k&Y939aZ7$-hFTxaq^o-_MYwBT9g+Y(e zlI?#tNr*GWk(CC2ujPeIE4f)tEW4Qz8J%g?I;o-Bp#jNnsc&7tDmO1cTnB z{D`WOr->xDWZIo3QYq|-t=Kt-RDnZ_knOOMu-zW}a=1M8_Zew0OQdG31FR_~w%bi?yPMd4Hvy}I z6?XI`akpg7XItw%e-V%cp7M<3Nr_!hKNZ!TP~C@)p4v7BUmRUvrfdZP7F6);bB@CV`7QrTp7vCv@+b3j+b;9uX#pV1YUC#YNxT< z&aAd4tDVMbJDCu3S|FY^JB9S=Yi2;t7!OvRF*7vB2^iw|-6iSw4=sS*2<3~RdlG*S(u;KS$!=J1U zzo{Y_`bd+S4Bf##XS~GJR;|EOs}3U5kS+G4kjg4MvC7j}H?bgNbRhoa~uF&%vH)wD31nS`H?!89PVnQOTJ;w~Pvyh{}N}VhyCR2H-2f3q`Df zG!xdQkZyI98TZf`)l&p%-T#FccX=@L7;!M&#bDIsLYd2mlj%Vw@1%F0k+@^N5w08# z>Qw(HCiGyLe1!RrIGM~2B#v+(c@GU+E>9{PNX|%)9{FR|w#T3c!(-3`ml*V5dklIo zJmw0IR!7G$2NEZ&x0nh__DaIgf+=tynUsL!zF$hS=QFn)pf!7tV9_5!-h@VM?33+* z*ukDnoIRU3dmtWDfTeg9#=;60l0dkSjD-uyvfV>V%q}D+IdvxLs54PVoryYZCdL$~ zGx6>;ST@cKYU`tJoeMS5VscHim{}7oUZ{x{lh74xozyy(t&ZIFG#ej__sOlcfUiNBLF7RvteaxNz3u>yRR1XMQ0g^&TU&@b9GF`+(HK3Q{i?C{3~4!GE4F zU<_!Xy@dn4VsBwV3(cqT#R4#)FrWQ~OBY78vLOL5Y=x+~Rhc>KT_00rOAKsUmtjmr z;#IRXE8A?%x@@s#!6IrlW-+rN%vmQ99s^Kj#zGq`G;#>+T+sVHGb0g7cBu9%SPD@B zbzX_(`?HIGeFwFN`8%vuD0*csdTXqb$@mvBAXPc{n?#dUt5g=)IMpa+HeF`Q%SC%< z4MFx)PHRU`Wd^DIM2!*)yT~JLQMSf5mvMdIbFA;-6U0}f7v5${JZ$h;oFRw6f{g6qic}C&# zF*+$`Z;ww&+7K{xtgDx!mtl6?+_wHjT2(>&!%16dbJv|*9Q;u8Rzv)i%`8V-5< zGW~$58cVy+$vvRv-$7qXvPZZ6KFjkbeXPAi*dyu6-jO64|+L2Emh?4%vFzy8%X3py!$B&Q(XTgm~4+mi#1ePcNl2d;?%c(!{pK|IyQgiBeL{9xj z5|Zc-#{92lZoJ>Y#g@LSMU9agVrdK{qej%b+P(6Da7Nv!g_l+b7nolaS2lLfWryc> zyLRx@sU<&{8cV5=pZd|4hyjFR12gnnQjH|GQE{ z(KhR#)K+xY2ar|9!EL)zj7sAL!$$YiPo5aF)gSr7z?dUE;v?$S`nHU%I#Ox!X zK5W5_F;Z})6z+oDK4L~pdi-|7wJ8Vuhw4U5_Hh{DoN~y3%uRY4D)!qpcH4ekUh>wR zc?s@g+-FVo^)v`~m5s>jQvYF3WC_sSyYxq~L*Bp?1Jb}<-kp${cTD%H%Q>Z*!hhcv z&+w!>QyH7ZT#4;|f0?=mT7>kKSXwq5a%k7c{gk=Vwg6WDlTvGJ4>>c(Ty+%K7k ze+)U7EnBb}=ZP)oZY1j$m#;q15#R2bVq3WbQTqq6W)jg*}hxFKU&eCAnfofE2na&t%?3ooY=rLBTx@T&b_e^IOrD>?* z{`Wo8OxlhS7>4{uw8)VkU(vm6b{cJ)BdH6w8y2oy^qlWq*|7r<;IV`|P|c>6qXqps zr}nEo`t|MbDSZbRu6EL-BqyR@1@Y)t^U7|Guk6-AwuU>gZjH}^^kwN*hO^Yu+^za- z!PU2PYt2?jO%13Yx@E7_Ft50-6O{U)if1+3iRKlTkE5VxOMW~xQ;!0*Tj7q#H4sX* z_-mp+98NM3LtzOV0VmqcYG||g01$HxNm3X z{sI>@hx&+-J16clb}L^l3g=>YSszLRtS`f9uO*gvOX_8F`I`R?u10{W|RgYhS6aV z#vz^i2%IiU=n{Jd1NA*AN^FMo*sT5nRK$W<05rn5&9W20y*y?FaG)Y6D?r7X=7!}9 z2&5xq*Yl>Y1UK{`SR|2SN~xwhs3sQc_XUckTmQ+!oekH!Y2xDIqIc*s<7P~-R~r7b zSwVo2w;vvFsOXqM*kLBmdldT3T2Th#B-Jqz?RL>u-qc&zLB~NUE~a%jH=4RAHFU~H zw?>er@WhS-*@g~<8gFm!z{&baUR$z?sNpXGghmp!!LEir95eSJ!P19J(qk1>q1Q)v zHdMBw@%w*PPAnb63X|14B^0eV9N||m7$uYL)7RDqi{06ZkTa+%Z=?EIptiYyn%{Eg zY5YmCnWJO(7P|H+V~+1hPR`Gs5zb4yut82ie7!*zzhR$s&aKdvKKUG&m7=&3iiwa{uyR|=D_xp zbV{m26CPOamJN7xV1g(c9+Vq6+f%q-)vp81Uk5%YAIQF9Bm=Q|=%Tv07U23wvd*L^ z8#oTs5Q`2Uy?SlP5&LdK26yaqcu=9ywzX2{CNk4`+eG{%wv)YYB2&pirO%s&)>wfy zG*0Ow{=QSwooYclLv?jjH<=n;q*{ircWT-yk^{_}J#|XYT%~@oB0=+Hu8Q@_+vF-= ziNCvOiV3=(`qWcLJsqfiTapZ4yJ!lPTFKxd>*|!c9!jHbN-ec&^DAY;u2|ouDmJ$< z7*LHjEF1RhisA}W^+Ls5h^x!mW^XsKGr5*MQ(QYg|8p4Jo%DPXeTw)%q2%=(QL)OL za>sDuN+35ObmKweffc#ObeH@RMn~X=%8%HZaOudxeFeIM5gW4%(O3F&-%WI@W9+qd z(g2jZ>)H1_wTH#s0W&S(Tj<3!5Rrh*g+INQjouj#3>q3SZM=TsQSl4x{XMQLy!qK6A zo?Qp7a2T!|W(paPZZB0@m%XuGPx&_MmDV_Epv!urX~x-76JA*^K6(>^zb!!Vw9kfS z0_riRI9Ed99DF4AYsQuDu3A3kkvs+ySc{(1|L`op9+TBQ8w}ZV@%r6st&Z&({F1El z{4OY3-`Pl&)`gpmtzK>G^d4k2W^g@?Z5O%s|E#8&tX|=Lq>fBW7$$F|Hgj{N)hPR) z)hM=sJ@C@NJoTSf{GMWw+N=pvy0NJ9Fz~=_!px6=gsvgGFld$Agyu*QVT#=v_&2nP z(AW-cOIC~gOO?4Qp45r9copru}Gbc=PiAq5%vG4cx zNT&Hy_9gF&aH%vIF|`dlR`eT9`|avc>+G}FU(x+D zHraH=i@*M}sC;t0D^=aUYfIuzgTq-(fbWc1?)sswyU!j;%{dXbIdn#h@!&B{vd5&j zf%=AD+bh-0=&1K4`snI?hL7w@U%$M5#s=mGqgZ-BgDbh3{q#}S)MiGd0avPw5$U5O zZC+gPq_MsMql`*%v=>gyPw8YHRm(iEyCBax`QV9P_8mWP(1wB`G?De)VuZHxt%|{} zR%z81Q_kOQOI3_{Rof0aT2gZKXmRn8K`mPj9@N&@;gI;t(F87Wkme{i;j$)nUBu>C zUA9|{lc5#&OH=VcjCS+d&{-jKW(OE;AL0=Un*%Re-?qE|kZP6CwPunf3pm-^eGJNs2M zn-Q}7LcEllUy$#&eL|#he3Zs-?d+B7brGxA#%$R>YgUXQ`5}`Pc#*29JrH^7uj^|HqOgU!oxTcvgen`+rJs#it@*!+P zGhoFCSuR+cs@rO4U_ma2f8*bKkyxEc-vYPA09v&)OP={a+Uh zxtg^vE+gKsj1!6-*5!EpqJKp-eg_xnq8OlynyUP)j92tUJp>g!R4LypDnZn)DRnxzZ{7Ao zhABmwnQmj|OwcQzDmBi+;xiH_!>3R}_c&V*Po-K78|vf{8dnejx<_cf<$_hZgMBx6 z=<9aG(y0zgI^_;My=#A5=602A$F)1A9>nu0Pw!&{dMN_gDPxrB%8w9=kY8&*-5xIb z&5lmppIDR|vu;J$@jv!k6j?Tg6qjKO)KY-KCPa1W9o% zbHS>Y4&>G4_)Q{kvx75N11HDNs?D|W`Aw{^`Im_7%ky7*=3sH)Ti~M+lN(X z`yd!~e&8AKjna$f3nY0}7yK#eePCYFzftaKKP@W+yGa4&P6^A}4G zNM&`qO3DR#A)h7W(|O^|vmf*gFWY%bq7yKI z-IbJ8m3>fFMe_K``k+K_l9WNL4@yV$q3PedphO4p${^MSCEDBtr9bP!Ui1J+SPzuw zrM%KW+!D*jsXY+U1D_Dq15{CaFp+gYd8~FodCWSXJVpnUQ>+8Z#(M~7XB|*h-r>tX zV;u-RB866vkGNdWU#nsUmPGQk80n##q%(~0+n}4i{X5~ILHrp;cBq-^Um4L<0IF*- znnRZ&2>zc2J=9DwxigZ#RVn_K5&SLa9m2?+drvyVh+TSzS86d@Y55U}mUowak4wg* zS{`5HQ7z1O235H$(MAk7;SsQ5w zy?)i-IdS;%wIR8^O*0oS2r{lbhzDKoD<&>T8L`(x6B!-3DpsEy=kMa-=i@%bZ)1ut zga8nEqx8as0*P*kUfx>{&NFU~-i$Z8QlbLgTxSIP8lkY*BW|AV8Z%U{RQut3NDVcQ zb|}4a^vKmB#~k~qo~9Yoji**^&-_J?i)~gkLn$A=e_u+*g#_f-AX;%tM9h{AhK#_Z zuxUE)>HeP6W^A!6H_IDJo1-Gx8%jRGbA#~uk#Khdf9Lk`yc2m-(MY(kf8q53N%q2nuA5WSw`_X*pz9p8#*OxhO~C?tb7c?D5dk^ z@4&mMz}7FG+oa*`)QZ;=Khn|1cs=p9<@Ln&-|AXTZ|B^>fCT%r>YhZuimq|q>FIHC z={vj=TwT3AC#yw~I0ZfzuWrpgcu9BMC(YT_)7RA{(LcqoblH-n`bpmYqk{~#L-|p> zzciFroY_-}eQ#RtdilCkeeLTSw>oW{=WpkeHqoy>8w3@Eiz$hl@FeasZuL~nEqOw{uek8xnwS9Z4O8@ed-kud za0UH}jqx``7ytNkhvMRsA|n@sL>ZOZTK|xcxwr+C`4oQj%;Do#t+zg=YPVVD`|#e9 zLh{OMXRlcwMI$TAriiP8{ldNVE!}_YVGPweFVb|$R+hb_Wrwc~iPWZVh}^P1V$oux zkV6c>Cnt|x$vA%J(!g_evBg~-CkMmd1(`e+=0I*oVaL2iSnD) zbzX>%DQwyD`G%RDHR$rfMEyB=)h$SK!Jygj`Q z=`*KoMo_k=pSO>3F*kQNUK7Kh#OPBkgW~4r?QK}hh3(d~<81w<57)jRzAWM9pV3U; z8XuZ~wLfKYAkL*l+`JUPzf??E`&hZf)ca<|%AH53BTwkag}H$@OYrdqZ`P|P7P{4e ze#HsN8)G&b7Yx^odCu1D@nZ>b36W8AXGa>9&$R);v*xpPdsbe4-+C8%IGEcVm9TM} ze*FflL1WZi&5E$u%LDZ8ZvJD{&iukUqwJ>eA{tp_o%HDNBb$wsC;Fu2&D^8Eo45D) z5y!0)HX7X{+*e2IHb$(Cjg1Wr-fGy(_}j^wN9enZ8aHs*UhiGO#?)EKa|3k2v*-Bu zct&iQiuHb-!mm-UYu3NKwE0CA#Lg)rZl-QsxiZ=?^P*aowhxeZQ^wkG&kA$@#X>ogXRS4UFSz<8fj>K zWxTdy(#S%z7((kWS+AzwZ6Hvr2fx69Prd>F$_Yv{p9UC8ujdo-SZICD_D5QO1FDRw z){%0k%@YRu5f@K(k@q#rxX5o36gv%l!d*e#=A5U}IJmK95f}J$A~nX0xhRcivfm+3 zJ@Fg3@JK7xESkM#vzlSD;3ER|*^f*?Y&UG&uz0indU{rIiV?cp>!5zJ^5tBQuxa!0!W0*lIzMhs ziZgv#yB=9kOZaA|e!KaHrV+QAeNvCY z6Gu*6wT`(%+9x(JhlPu`E}kiU`QzDU6UWZ>b2X+9&}`hgC48HHcdY+dq(C3VEeu&4 zHdEJbPuHi0pRbCOLgLemc+q0)0>3~Hz3nJo8A-O+F5IMVZdxb4f;!md7Ws>AeKo!r z`Jw4x+)v~`Fj7%_?c8Y??>IlNb?*A!z4|w5S@1(~LR`e=t;R*}ng!Y^Gdvu9rmWgD z&4Ahd9D8E>zJl%B6E|(1KMQ-pO6wmSG7o#AydJHWC$LR{ivY9cE7$#%8lAV!xJ)|s z!lztUynYh0=8s1^bo_Bp+qNeMT{He#b&^-&p55_@8JTg@#*Otx&M6qlYCWe>&#iNi z@6aAEx|G}$e?6}WPD-1brcX^@9hqeOwdcjcfyXs5iR*Xl(d`c1F(bin?0EOW-n}%D z9&T&!P^4>E@Kj^(U%PiZIzZ#^89I5KZfwNlEz=AG2Wa3-+)X^PGb1;5Co=lGxHvet z>^zF6wqXvL*35sKznnzV>f;4ayA$-)y2l%#d~IMQkB5)Kq%5c8AJC*&Hm26s8U+3gIeW=6O%{!q4?q&63aw>-=k7`haz~5+EEaHCx(_QAbiP&StER+Wi4CLA#N_n#Nx8Z; zKd=3Hje%Hhk!Mgp&)>RW>(;%z&noXV-p2VHqF|ZE>JM&d*wU~tT~DWBgS-vYiP=G> z_4@VTue3M74rh8JAus}oHz8Z%d1KpN)MA*@0{`XkN<|~~Fa}atP|IJHmIv8?ZSmp> zdj`2NH(L23Xk75vpt0B-Gj|8?3Ene`zNoEQT}V@uUkHsfXI;or@bsf^L^mI=Ko|Yc zNtqXC8p*y$>Bs%NX35&MtCp-KGb63Of zl_pb-0~Tod9MJw8wq!0IOj^IA6K{eW@jb0oTwmJCBz1p6M<6=gJS1akz zRIAkV|E87ll}>4J>l>;SWN3c(F?8 zC0v%n;4CYYtO=N~##av$SnXkhlt#hE1>-ccxo-0{4T})9&@fctX8JfT{vu>)$g){0 z0~G7pVH=a@XXxq6jED5m24gHC8dm$dKDX+iCMP^LDO(^@gB)e~Q+qi)=wMTQIjWkQ=ge{%3kX_gjPc)-B zVMJ&>jUxGctyEX~>y)pLH7s#9geWyM`P}-_h(+rcZ&>_=uspOeen&h#6aGtb&Vet~ z#adFBTLhgb-hjnwwNY2<_JsA@!&9r#XN5{_Zc*f-$c2&BsBRG+9r=0Hl9j9W@@RQk z7_Q|Z^EJJ1Xv2fUgI5Gso56Kkpy~aGcFvIT&LgK+Gp|}}5)S7chWgOj`eG?{DYc<8 zB=?)l&C1o}aIwlPaUti5r&;1SWmu`WgWKSsapa~`2p*b9$Hn5!5i&X+?oFXzDWQY3 z9Vt`;qkSmXYrbaWuMS%EAH`HkrlZ$T>ypAlK#cepyWLfu0dK$45WGC*j1tw8ZqS zQS$=9NPR*J#60DbF-rYzR6j(!qOWGVm+$(q`VMXTDpeKR6MdfS+8GtU9T{NOxN828 z8*&#{YRMR71OT?vk)My7^1y|2*HI)MzYbz0&#w zdxuPBT}$6?^4(;tmyVvfiha3~scq95v3`lHUn7q@Y1My}r{?ZGxxM>-qVde(q1@7y zOIEJbty!`L=hGo{mK~!l{AoEj$gbp8FCaF+ZYS&oPgWz}d!~tU(XVrgEjQORbHPk~ zTZcltk)_MNR=g{Ire~rNX@0I>(+I9sld>G*N8+sYvwDVnB_3Awv`TI7@32VmV*8N$ zc$Y$)VSwLKgC|-5KgWMe``6}d%}lRG1&SkvVI5NHloKZe<`c=LkI2IUhk&9aasVe@r82aN89v=sC3IOaTwVt?ab(8n)?Vx&uXR~1s7 zCoARgR!MfQ_2ArP`kZO=YW2Rh7IVg0hl0^Sk6IY3c3m zZm=zD`Wye8K6!qI{YTheK)F$pP;51WHol{8sm{yOmB-@4vuXqNtf*F>OU+yKF}Gl) ze17(wChA$KZNyJ)i8icSdZ7_mTxF@f_<&VsRa-P?Rav!%Mo{LJQc@D1Ad&A9`c`S| z|MXY93(lSwN8I*9A(|FJsUz#!Xx*p#h7O-wt?ykWMJqRw8^ZZheSZBGr#{9mL=P)p zA!c3AygW`?pj6jP&{B(9LueL!jD#*0wP9ba5Z(HrR_MZ%hZM2oUI%}=au+&m8w@b* zQuvobHh5u+P6_wy$L0IRK`Bm;BUHUobxz1Ra4hf835#CId&K*CB^RTRH^!`2qTq_& zl-vj^%2Z#RcYpOwDHT2vBJ7_bjn|f_m`&UC37dm`+^2>(7=?8O1GLAJf~HLK4f62t z*_h&I>^Dj?D)o@pIsLWs&`NovOo}uLBkj{-Vwi5K|E?Ybpqm6Qto8FGIyDuAOTUs7^fno~H3t_eT{Pp*bg|c@Br6wB` zxg*(%F&X?+|1HoYzpl_Et8ak|WvVtT|2VW^6JwY*>~-=szKi{UiG3^eU}bLk&`_eO zpKdHHj8~V$w9>CjsXHNu%+;8<54DhN%&*6!o9Fw#bdlHUd^qalQ2r$jg+@yey;cyw z$41jG>Nvf3XnnQq)7*fco7FVI!)q;CuIOc&(y7^H_sn6md!WUhZSTNk7u} zHnd6ZCGJf_MoqV5Cnq-#KFwpVv4fH>I^&ObzB?O~CXfdJZAIqh=xe6daYFL)a(z|6%Vt0HQed|95up4!Avzdh`QC zY>0YTQL*>lYpf_Bf`Wj(_g>r8ls!D+{Xa8zhuHG+ z@?PG*{Ww0ev$NCZ`q;2D8X`2YNO@yUwa31C% zYm;m;2AaGjZ`Y&7x^AgQp}QB84+kZ8tieIY+((;f@;zvBN1ha>3PzllrNqZ~KjpDK z*mQc6YMp~r^MK>0URGpI^&EQo#mF3{!qf_{}xVIMA)n zD`*efnYuo8ldoIq$?bLYzDK{=eCJ3&owM@jVJX8BeBJtVjQuX$w_DeQy4~qJuk&w% ze>(xN(92#K#b1=0zLTIVs%yvCJ2rpcnGXD-+zhQOO1A-4=fpZJIH(Z&tT_uAzB08$ zjqF9Ut5?$%LmROm_ct^5CFR0oyv&pme#72y#T+9h{On9giV_)3UT)v8V9`qdQCO)v zbJ8@Zk{L5*DdtB;T#@W?s22t=CjJKqx8c}@;Ai6VutUsGmxpiooH146Fuv-CPt~_i zf;8!h@|D#uoQ=_Ae!*}btHbQ7Jt$VQb>C)P18|08{E?V0`?1?zUK_GHz^zB5;Hw*Y0(j5AE3%-#aa!Ut;W# zNMH5X>5>ComyCsArG!hS9(c2r+!d1^%SWzEoxa}pz@80s@eFF4f4;d?$^NyIngZ)$XG`WU76~GyoMqr>F?Wjz{bk~8|BseNyV?n?q2fmqG-~wdLNx{m0G*bcM6y;4cE+^ zId@(FUM&{SU$o#$|8pn5+x3I5{=4XQrvesCoj+xgkEx~IjF~fM_^Y?ztO$Fu)_6=< zi!CBjx@pa|yNKCKF1^9t_csbKl2_xqCb*;iswt(j#*G@&8dLh+#?Z$YA~(GO1;4SA zJWV0@u9;G$bh$OgJ%|zdCl+c<>C&1;_*if9lAH3eI6hy20(f1Ikl=2K^5PH;*8HZ| zylz4)aw#88osV}rDI}tigp@E{I}I{&Dmfud6i!G%8uSZOO%u^p(|%?%!1o2I-p?9L zjfR`Tp*#gYxw^!e+vlZ#b9cy|@6Slyr!mzyP3olCm4-RR!CRuDp~t>|+92%T_mxSC zA0ObwR8{FA*3>I1RmH+})sNLAMZj%Y-^;JB{&);?f=4+V?irK+NtiSJ-??QinJ3DAjm z;_vjjRj#$y1>N3=oh2myue~y*@Qae~b&1&D!T2MpUsTVSF7^ez6o}||&iKTRM*Prj z!=-U zgVIWg*^Q;2DWy2m11$PGB(>fkm5`fCg4RE~5VoMEG4sUp6GVSg*l5huJet1mzy+TR zeGgQg?%&C7|MKAp31f%%2~ZbQvv^x}Q;>r4r)Vn8kL=ybr`6uxKhF0*Vb^Eun$4S+ zuh|b>WY?foR2q$)8O9q-7a8um;-2bof+{lHIY}1;6#Ir%t4X0#g7F4Z`BBi)xKrvu zR!K4;)womhTJfdSgAJcdTaAXNn#xy%Itxh|&aaipUK=5s% zA{HGtHeT%q7o?8&t~5akr0K^QZ)6kbq{MDjEYUaKIG}|B6lg!Os6L4^W@0-kk*Z@m zDt(;!3AHD2MrfKRkncu83N>Dbjx^(CI#};YkM~VCUZw|sK*^AJh)7Fc3sTQIn)i+s zS#wBURiTcc;1uPZ&Rd&e#HVtxlKt}n8+ zJN2cK)-)EZrD1;)t?B&!xGg4S2&Q8B{jrCeR=g>IZWR=aH)K>@Kii;(g1O=W&N)O1y;wvgXWwo$o6OPl*=m`#=WZKc4U zwfSu;Y4dB`CNp0P1E5Rf4prs8-Q+aie^fpB=^0ds=I|-W*zk!X5||%)`to@t_A7)b zPfuTaQkgu>Uu_`)llq-Meka`K{;y(g>4%OUQ3k zcvSQ@C8HIr$TSKj7vpv4{(XjzqEIUOD^}z`vE8ud&>Cez6i&u4yw=i_-dq&4B`uKKP zbSP7>q|zXr$FRRpsEvCu$KK?uke)w7(_~0|j}AVa)($?9wtj8K)}%EFGiS`6HPe6o zrqtCtm)WcHy(Nx(c~*!u?$TV{n11-A&xw?@K7*5o#l)>2v3cIS*%-u3PaHNPdaS+L zSVxK>rzM3j$5==6bV1gxAAPosO&hbyzhrOuq6v#ejr8f8IIiCmeEHH6+RUb5H+n}@ePa6J919%#=+?)2@Z)slbR}h@Dldd8Ot)J6+4KX;aC&k4 zW%<-eHZ5ygR&L&z77(r&Vqqt2?y@9DHeS`V(BfE`7FvwUCsO@IY1ioK zQ6Nd2R>S-jmokdOZ(FcJfkw)>X2LO6Pxs-7nifhLP^qTzLeVPI_Md>^R0mTD-C-SB22&tF1yK=!eoE|_Zi$<%hdmId*mLGUg!`GUqo z6t`KBK-|}&r=iOgKZ9~{E@3K;7(@W$4at4y1$6z-1*Frpp624>mq zE_$f>w{AO4rHt31Mf=(q?781b4;(yC_j#vL724;mDztY}Et1!IW4k>~gB>A^Vf?iQ z7ZJK*e*5vDk`x-+s)PIdCU#1CS|(0OUlh<%;dXw=RCZ$F&O~-%;k8~kv2Ze89ZD#B z<~PMod%Dfuax%kY)KaLn7fw6Bt;n^UcRs>2RMQ*IC6p8LztI#^ygQ1);(5dyoTY9# z7X7xOS260>c;n_V9LPY%KBxWiWbFW~ANqFD@imux4$)H<=KGIpMXO{Y&Zi&GcFX6t zzswFzpYRVM4o9Yc%TA1EN2aqA;}4)~W6@f+)VrDjPD|n6x@97Adi26PcJu<>H_wh< zD7tSR)tN=BGm}q|42E?ByAslwECsU2KKE&Xokv87)wJ+Rc?G-#=Ve`;iJmBVZm zG}YnESC}f5RC2z`5r;@#aw8r*N4OGPS8g_UnfQ|!l0;I;dET2Z!-w;O`Hg}`XeM+N zdJFx9al%Gnr*K3#DV!7D$bw|$WR+y~WHV%QWXojV$=&3o@V0~v%llu;}GG{(xJD*0EZNZ#SWVs_BkAKIO~w@@RLK1!y6^9 zR4ZMTA<8Ps>dIQmM#^T&SmhYySIP|KG39k-w$cEl!Dg|HSXFExejyGJ2aCz#2yvpg zSX?je5ci3P#be?_6{k|D+*E$55~_x({;CAkaMf7VJk?fJrs{<1wCa}Xp(m4^cZg<@4c-Zl#;}geMjsR;tx%U$stMMO|Or zQr%wNMIEOeqn@u`tlp?TpgyI(q`sxjRvXkmsh_LgI?0?ookE-{In{J(=+xY)ol{q* zflgzb<~S{ITH^Gz(>AB0PM4f+INfo2;*{rPc9uIkI=eZ0I{P~pcMfr`;9SMIrgL5A zHqO1AtP#p69&OdA0L8=dI3roew!5cRu5M$@zQdC(bXNUpp7L2rfz&wTs5Z z$EBo8MVFc`OO4yl|0R z3S7B=s;Xh7QvCYds!OZBTX79ryjL|@S$kFUuiJQCH?7l1I)$lkJ|-(0;`)1_TnbU_ zkt)cg9uWO4#m{dn#iMf5-#~l-Z!p4X38}KK2)xG`A7Lj+B-kg-6`%< z79M;nwe`Rx;TVO~%@~f8-rAW$Ms^?3Yh*VRaKzD3nWK)hl|sBsVG5~hLAYGB=;P0G zE)7*hsrYj6b0GBbze??nPX^9bef&QM*4B!P4=y~o__+Oi#p2G3dVbY2)70Hds*A-D z#wl2Mpy**5HL3fwFDB7MCLW!1c>IwL(kL&SXy4H^YJ88$-PnW4N2ea1eB=xIprk^y zsPyYQeBF%zd_F8Cnw$^Tk+`de(vR--pRW)fN=-FI)jjEs*Q@_VdF@Vs&N$-(pygSG`^KapqlZnCF_FQ(CpztD;wZV!(c(*2X$ z!*?Gpx;=b3-5&lAx;@;NZV&Hn+a7)(ZTIK5hkrr0hhv%2eJJVp89F-df22+1=l7L~ z+_&fw5yy9rRPO8FZ*@0c5$6}a(qhVIuu>d5K3pkE&V4msgvg^$-yV6wSE};lx}*s( zjyEaoM9J4UTCMoa5m_N2ti1d(x3K*oV zlVl=Zt?DYp2<7`*Lvk#(K z>G&XuFLrc0K<%X!7B=>uu4s-)@!C?B+*DQ}+O$!tallMx<-5%i-`}-tmY9ys5+^>n zSzzt^u_E)xZy931WU6i6}1eVH6 zE$@@G7e8X%t_N0!?n+;|emy>Md^Hg3cH1d_>2|nkm+m8zdi(EeEMK)Xed#9Ot;@$G z;6x_RaUG%?`E=af>wgee847mcL{oLxxSCm>jS~(#WN;$bW%iq)C6dk9@%ZZb#V}O!sjH)6srPxBD&8C9KeNAF$=#&7C_kj~p6k5|;*i5g#=&+SkO?i_;*=i;qli$r+l5*df4f}UMDan*h-KzRV4qCP@ zElAwJSFD}CYdkv3ZK%dw;8C-`>l6xTEc-_=A(t9>qo;1G?KR3G;x zsN-JAv~gdGg7UYC&;l+FZ;zr^Qc4@7p{5P^1`>!*V)IQyrTGx(;xzvyZRObQ-7UWk zcGvf$yX&`Ncl|c(t{?FJ?s_qVXM-yVsD!r6jvzCQRi+pD#gnN`XP3gwtPSJ8$l% z+<)w2Sf{t{ys3npH=>V8W!ZUSJ4sy<2L90D3^=h5supMR7M|~`5Eb~0g2RFpYS-qe#2RV&ttP_W@9>b1|) zm7O9YmC!DJUvj`A2kf&=8PlOKslHv4V98$zb#z;<`kd&!LMwg|s}v8m zRf@Mzc_XDD5#NYK>&)ZuS3*P`P3D){`}8>DWO|%2<{hhGKqwSB<=gUlkK>>UPocFO zlKY08kt_PN`6l*a#(@=>QHi}RpE7aW6ndiE(v9L=oI5ruen4g?-!8p+=_Uq+**qUKs&q_fx|ZplN-fo2ZGl?8Dl*!?F)6 z#$WwdN;bG=S{7}kW{Re&_sU34J+yS#g*npkN^!p8M7UOLroAjm4jC8e=gmhk$C`DG z9N4w{EPP)k}`C#xE1F+Qr&!_bxszV6-A9r$cfje+A~?8 zcfja18>ix~;UW>o7Y!FT(qr3j6iD4WP`VT%4v&fH<)fzgA3tI0c;6J%&X&~~$JYc< zNns~KyJH{i1e2Y->{IEANoE%vHmqr+QXIcTDMD%SJ*9|Aq>;m?h(k8T#0*Ik!6e^O zCfVRW@I5BMhjX_3={a@=CD6T3OGM2*MVj=5RdI~S*f>Ke{-o`dAuh0%b zeqH>roJ9p9Hy)jOTLU$_ulplk_3|ygXE*h#SR%4_SJ9#v zajRCWUvL?(q>z91RfpwA3>Tpe0cT$)h=Y~t=cBaZ1e{5hm%ygB-t@-Q7G4;CQ%a6n zaXdCL-e-pE#$T}#RjMEs?g`xgi*;8Z2EX`7e@!?penl5^bXJJ2r=Z0ZNAZX;qwpO; zqzWgSE5w9B{c(=D=$b7xHk*56_);8-FdW>Pio!ifLbc!{+eZ444I_hnmgCR+M&j&q zsghP4J_gb;@Qf5Fc5aP!*X*z?-AOySy)Iq4BT8imMscNt>mJY%E1EQ};gARCkpUv0Wi(bn1R)qA7rV#AOTpSB0dz2c3d7;$ zPjPs;c$ljB7Bw%BjS2*34T(5Mue#WPouDcvN)?qNJ?73;r0Z(~L|1hG;xjp>-m!eU z%@^CQO#rJWPCR4GFp%44jEfC|sJXUi$JT?sC)P!_!5B=+c#7#~b#K~n(~lp{^ZZ$v zprT)pD$-#IT^5*&Re|EbDPtrDt#~C}D~?zXmTIhMDPm2LTbvizCiS)$P zmA)b*!>F-S#g-GaB0K5WSIlpR7hcRx9!$l|yp%48ZRO7~G6orYqtlXUmr-FNVjpCJlNK#%S6xNpRkn#&oaaBPzFb5XG0Io`4qDYjs>K+Cbz?>B%(;qtOp{(*bb?Nk zid%*lj}feNcMwELxd1f7SSbpuB+@zHo;ViWR8eHYQu5M@)|YuZb%S~Pn~HJR#lmqM zzng2zUBk7eIiK&rwd5Oe<@hA7As+<02#mpfD%X;P0w&IhkAj;F$Oo1ITk*UnyN2*F zxQ1{+d|A$mU&=M(%bJZsDCfvmhHfn+E3m^yh z8TSrAJ&POH2zH8)_u7%R<@->vdy!KXwlQtzPl2}mUq>k+>Ys$C^z zNNv#f8B1S5`wQZ4Hse~ERN$Nn`wrTFd;&s8t_kZ`Xy5V|Ayoe3u&l3|#}&6;!*Kj^QeJ>?&jfqT)J}4rqURy#RW8%Y{;~vX4O>y?~4W$Q6_= zos$8s!gMZ7sEx9rF3AYa2WScST2b734aT)1P!cGP`0D`0G1e&q1iA~5PzCbwVP2;sf!@|tq{1JBu8HDz5=G*~#)d4C%14ICn=BonK zU9h5_^;!~F`m7P4=K7dB*?>OUNA?5fBb4FF3$1~Q=z|*J+K$s&ufDMR3bk1LK?qMl z(+J{SxEXgn5dA|i z`m<2Td2gf<$}#@pHgG;%8pgR5f}u_0cHUk zfn@*qV!joVai#uj@p!{d zaRfLItMLWaAnMoaZP9M zGR}ChnGMiC0;rfRo8!44pbFeta4lg*<43qb`0?Br{0O(2ONF@!Kf+z)zJ>WCeuT@% zj}TZmp17m`C&Y_*!R||ZVU__$@g#(lg}aXEU~fa(!QO>*ff-Gr;WCDdg?%wu26H)C z4wsc=CCpW16NL`}W(O^}wHv*R2%k#ppnI2X>1({P@gH|NV~xd5&h`kmmuedANOyUcvl zuWxb`_l%jj{rU|` zg*0Yn%Y>x^z;u&=mRUT7VG$>fbj8A}C#U1Wxw>3au07YCi{u7!N!%!I8aIzy z0)E-VWpMksZ@9DE748nF=bj)waURPMJd#%?i*6Stfm6ji=^S1j(mV1GgmgcUsB@Y-yP%0<# zx)yhNbJ$ana}`&fYl~+})U*fZCj@gmI1RlApNFtK|3)au@q(;~k5J|#g!w=Z03YQ) z@Da#-_%Rbf*g}w(l4y$>Ttluk*A*=h z&kf@ya0|JWXoa2JA&$1U41F6fz&~v0cdRz_a6GMN8G1RJ+onR>#X?)Y&4y~Cc|!>F zb~FT!)=<&jj(%);@svWto`0 z>CS(__uzZ-z4+dIAHFXi$@k-<`53-G=AC%i68LDzx8hs#ZTPl)JH9>Nf$zw7;=A(Q z_|81~TG=er2aS6cu(&X8o6CwKF1&1|Y$1HjD0JhI8!aEl$Mb`*RxW{0KpTbY&r$NT^LLTy`v~ z4eRcz^AUV4z6RcSdEpj()aL8(b@_UHeZB$TkZ;5{=9}=%`4*t^X2?$vXpYE2(Jv4g zYkS%fvPez|S#W_|B;S%tsJJU@e<$(vp@tvkPCJK zCR+tZtfTZ4d0Bmy%4^(R&Hzq|gVg8wA&~bxKMayy0s3zV3aU-+lb>++1!z5tuS4|YDeiiJ?kntogEy-14ag&sgS$T9ld60}@+0{fcYVP# z)%ZrlKwjW368sa+HztqCFSzRmUaHPFAx}sy-n62@R}p-3*kZt6wfGjW^#`BT;G4o0 z#dqOrQi_Evpp-y+3iN)or@$CKRH#ZYw*CaKf=?O0{-wGVsv#YLH}Y=Rs zBN0I+C!DX0W@!2=^KKfzxJ6oQ0cp`=h+2oXYs@&bB2P9Qf)Hh9KF3NUBt&HF%l zASZkPo)NTYKi0#*j=3VFi(2UhmR`lLfsD8Kh=C7kYsq)A_!X+6q;y>2htVnsipcTi zwv;TzJz}t?_Y+!4NyFj(2@B`Pm;39bK<$)5S``SS4*I)coP#w7eu&#Z$G_+s<1p%@ z`3l01BO1s9f?je6>j~(nfsR*_*hreTPBHimvASw;M=(w-2{}?4rBX6~UM%L~tc2BB zd^K4P>a)@|2Os2eEl{d*TyK_oAC_8QmcK}p^%d6-t(M32N6Q(xD74-iE*dRZz{T)y z`M2Bvv?RyHqBVJLAX-$$#i3OdTs&IVo*RVLRdR#T!YVESt?bSvqNP2!A!uzME(tB} z$0eiH{kashd>}Uztsle<0|f+g!$Aclxe=g*(%eW;LkKqt6cNge233^j#t1sl21fko z3H(r3rO-yV$Zc|md`Gg#_v9|QN3bu66fk-rTqvd7Pf9;XJ|+SG5_N*&sB~3g?4SPL zyFegD0{Fwb0KHn?1>U*X#{2ehQAvZjip&fj)Hf-PtIf=ogW?9oaow5OCpmUh6c^3R zfryJ(Ms>`jV`9iBGy#qK{X1g4mt$1PVLZcOr0k6Mk3dj|WxPql5R7%$Rp@BFuCQF? zQ>@qhoB~B8imFHlC9%`#Hle?@{gFEL>vTmdD((^Eq-pRv2l#JXX&QfjI$ba`bCNrc z(f2LKNL}s-X-ry@_M|K6Mf#J0B#{im z`)NyDCy^Os9;i*}cnVp$gm6?Ie9L&r%)Z~^h zdkiycGneJeK8BgCnAwS$HJRC+-+-8_FnbU)HOy?mOiOIO%&uUjH_O!={w_lKQ#)D4 z>}uxzBmWpKPRu@&x?}d`2F$tCBnO!P%FOg&W-#-a$IKjNZssxCB!29v9W$pglQ2_c zra#RIYHL4y_GETvmbW3)M2a+5>CAK`RNBp9_OjIEerNVjWPiAVEN#_p;W*({eGc_X? zMx?UXf*4n?gxmY5&&|Pm$}+q!Za`186K{;~sP>O(wla5;(ky8AW14LYs-+Yg1iE7s z3+jIhs%;FKo`DcH>fHwVy+|6<5}BW&L_W-{!OWh_)G@OpHM!NyK9HGhn9CAocVuQu zW(F~H95cHxvlBJBRAz6&OiyNNnAw7vZp>W9Oc!R_Gt--ycFZinOjl-xQ+!u7>%>0s-`R4RhWgKbmENO*fQ1%qW6&6g#5@)0yPKnOJGlC zF5Bt5ehov792U|-d8HA$G)6+f7%Av58jIlSW6a!|>xj9A)?6RF!^X1|5Gm19S|fNr zfy*RjXX7Q(g4wq)b1r+jhuNDm^DJ{QF>^O_Sw_w3rE5%K`CyU(GZ%D}!~IvTG_Ais zJ%MpE9orV^abbVNT)_R+=TI3+7GlKGREQQ*glWQY;fi1o-pZV1C1v5V#4oO>uQ%|H^*+1-Eq6ScCYN!_NDFX+xM^^X1~Bb-Tt(_-ag0vjf1^| zheNPKRfnby-5uf`MmfxISmLn3VYkC^hbshuxN6f=+FjrNes=O*f)m+t86|G8CjZ#g) zez0Y#b*gQu{iJ{qK>K9IdPVJqhIPG_O>g?m((s`Wo9Oo6zY0mqd&pYd# zbDiI~$gn@l%O%Jq)TOFRU6$#gmCa>?b1ORmcs zSDCBY)yp-=HNv&CYohBc*A1@UxMsP&bW^#NbgS#u-7Up!o?DvRNw;jb7w(+9t9!6} zRrjXu-Q5Sc4|AX5zR*3*{Tui5?swb`?k_c*My>JFglNJwjWr!Lk(xx!IL#c*3Qd}3 zzvi^&hUTH>g{Htm>EY#3(xa|NYmXit13gA~O!HXmvCdzbF|E63}Nx4pNAcd&PP?{M$>-Yvbm zd-w4k?49DB?tR3sxnEnq&VD`oBK-#V4fad%8|62_Z<^m6zlDCw{8syI@JsjG>9^nS zh~G)S^L|(SZu#Byd+7JXFURktpV9BFR;KmP`e_?$`)fyOmudHFbNvT2xYg5~%XyoPT$uR148Q&I-6kTofOB6PB6YQmEi0NVnL`} z#6v?~LtF~Pg?U57@eH|mg?REfIr2ySoQJC(t_HZiV!6Hq*9FM+PCV&|Ckyao!Y6Vf zXSt|^^+T%=XMp(%QbND}QI2Ve@(@=ZEfwBpi^F$_`3+{0g76)&IC33~ckB`j};0(`L#L|he-KAmsj%{MTk;Ae>o^-fdHWp|XyXzM>j z$ZWV2Skt1kSJcnPckgokemMwYd5JVV7#%!CPGrbQAS?G%JTtKT(6&KN*)!U%EDWgm z338u9{Uhg;K0?@+OZv6R6WQ{qObp zuaEiuCq&Uv`5%vu|Mj|}z0121^`F1{xYv^74dt1IzS%fGi}e#9`+GNP|9{U$CH1G@ zH{QLI{CQgd-eQVjM(*>m{?C&q|3}x($M1{(O_z_~G~d0c{?W5fzr}vqm5z5TRQg9T z{&${z?me2O{(t+k&vQCThqdFyFs~DWzT!W2SER;1o`LxLT&PU2%x(NTHW{6BLQGGr zb3&IsF;hZ0@%_1z|CEbm4(9JRX-j*d-M!H6by>Ur`*-hViT>F3{!G!|e@Am;nTz^k z+xwhuX@O6<{q@U$u0{)l-4gdmyVwe#O!Zid41u6hxn4hc&R0dkX ze`}x(&=zP1!~g?;SYRL!2gCz|fcd}z;7ed3un1TTd<854mIBLw<-iKyYhWdSxo&(- zeZj2(Qh~L=I$%Ap0oVv^0!+wX0q{HU7BHLh2=)~a0`PzU$N)K@0PFyJzyVMKBA@~s z0X5(RI0G(#E8qsW0~!Exvcwbc0x%beZ^3!Q7pM!=1L^|}fQCRLpfS({XbLm~ngcC> zmOv|@HP8lV3$z2;108^lKqsIx&;^JFVt@faEHDs=114kN;}l>jFb$Xv%m8Krvw+#a z9AGXm4_JaQ%YfyWH(vpK4XgyVz%3ov3Ty+m0~x>$U?;E(*bVFf_5%BW{lEbr6F3MQ z0uBR5fTO@Sz%k%BZ~{09oB~b*XMnT7IkeZ`-Q)ay@ym!FWq1HQG(RB*%rD?8GdM&E zB~*E^J;SqCc$P25XGD?CBFceSvgy@sy^Qji*mojB4b}fLIIQBL_Zmkh7KWm4loa z;4_ar#ucd$llc%S0L({}Nxa6nOfiNGvaCEOftw}`wDn%PD6MDk&sj5ndF-v z(%gMeFWH508WAcFA*gQyd>UCz(D-Og*q%Ise?7`=FyBCGkKp$P{L=Al*FShdDHvZ( zxDwd)8VY>H1v8h=$0hJ~n3Z(^9+)p-m4zovFVujK`4D39;;zGf1Gov?0&c_o4)7h2 z1$+H`gchCm~rG0+5P3N!72gCpafLLH45C_BqgMj(K0^mzv zA+QKo415JF0hR*GfaSmn;A>zdunJfWtN~JiwZJ-HJ+J}T2y6njqmD9w9l%at7qA=H z1MEZH?FSA3nZQBd5bE$Sa0ECCd;=TmkeakmY*Nb9u;YJ!G~XGFuOs zt%uCkLuTtCv-ObKddO@&WVRkMTMwD7hs@SPX6qrd^^nmjrCklA|hOL@p!J>;z(@-_|fHVyJN4e}QI_28BcYz4Lf+kp&V2e1>^1?&d)0DFOb zz<%HWkO>?F4grUOBfwGM8{iml95?}-1Wo~`fiu8a;2i3d=Lx=u3+5?BY*_z_9tIi| zz_~}jwb|gmG=MV= z;7kKJ(*VvifHMu?OanO60M0akGY#NO131$FPB4HI4B!LP!Q5rhz)sK%Hrz&NNVG8h0Q0)dLTJhroW6EQ=G(JJI(T z(D&q`@5x2qlWQI0=Az%p#Td7M)3H)!p_ExDWfn@Ag;HjrlvyZc7D}0gQf8r)Stw-| zN|}XHW}%c>C}kE(nT1kjp_ExDWfn@Ag;Hjrlv&(Zr2iwN7nP8Zu;3j7c*g+VF@Sdr z;2i^a#{k|jfOibw9RqmB0NycxcMRYi19-;(-Z6l84B#CDc*g+V!PynQxB*QGyoa`jey2L6QC*33}_Ct09pdA zfYv}8pe@i2Xb*G%Is%=5&OjF+8sm)^U;q#c3j9moK706T$Qz;0j<112nZQBd5O5ec0vrXt0geI3ffK+<;1qBgI0Kvo&Y^u9F<$k6%@b=$yfEVMF(1cn z0WV0@x_D#D!44uB*9mKDhJd<1#Y;#TQY9BsB^Od97g8k`QY9BsB^Od97g8k`QY9Bs zB^Od97g8k`QY9BsB^Od97g8k`QY9BsB^Od97g8k`QY9BsB^Oe~2&rO(R53!T7{Ry4 z!MDf3x5vS^$HBM9!MDf3x5vS^$GIQOZ-@q?4D2E%o`4tN4fp`QKqyz2OviY01~3zt z1y#9zc2l4tNUW}r#+UYSH2^$e_9{G*)z=~@bd5zUedALgOlaDtE znnsZx+xZsSlyjNp?uFJ3#){-TbCww+Z8OHWuxFZg;`ahSBYK;E=?^^!`+FA-Dbx60 zm|vUmMt~TN|2#r-Hp@*eeCOJHv;5F_kSDVNW*&Ued&K|wKhQ77LgM=VAHrT_IV*hf zF0J={QeQR~tUk8>v2x*!$o#!|l=(4g4kbsva?C%Qx0>%F%?+?Ww)wVQE%~wC6}?*O z<t6F5 z*k}vGN6}Q_g4`C(V_|%l!?D_JSMWZgHhL}O?Du2)qdQwFg|$FywMablxh>72@qmtL z-$O@+9B4HgR7q*`A~Qea~O|3LL2Qxn_Xn) zCG!O2C=)&}nh)Wwt0Gh=oMzo+2!r{>?_@|v2T`eQXoOJbv> zBE13iZ>x(>g)QpFaztwrbpP-CnKvMgY}5+t`^*KjPCxgDdVdYyHk$mywk{fnt;UMF z724Yt+L)!VT-N$||Ec8;eQaSK-bo5G-6itT-yfCdBhR030F69hb+iB_pJASCPC#p) zHs80E3A2cw{tGVZ3|d2Z7zJlrC>7K~X_-j_(7Kh{anGoW*7N887$>4fvHcaL8MLI8 zK5b8JS6d%oy$`|F2W!NAa4n5ds~4^^>oaZjpEv^k#O^d&NAJS_85`|m5jGbyXP^B0e0=ZM z8`F+NW%9OhJv&Si94{?q4j&hcQ!)Q1p+EH`q11uqG`IFi~zgwtIon zQ@O%wmbO>XzOm4Aq2>K@7dq21S@xgIbs(t6{$0oqZAIx5xwO!ab5URK`>;HreekFL z%ySUO=V+W#-UrX{?qB$4dj@&^6mw~x{i8MZVf%hEp1a`O0r2|=y(UY*#hRhG) zM#m^0wSZarP&U&37QVNC91qHkeuKGRv|Mebr398*qjn2Nz<-gJvQZTakM^PR>Em+2 z{R3I?hvj-^NvmkNXfBGjpDizN#hb4!$3?E#z0Y)vaZJaUAJZ{L^;po|n^oYCYEr9= zU7FF@yGeDZRl^?NROpMMI@D@19cmFwhgxl>L#+rGoU1{~0mb3;;OB&tDI~H0d zseZI(Oeb1vrW36V(}~uO=|pSKw4rrm+R!>NZD^gblM&j41nh>z?h+aHJ8Gc2tUPpl zK)Zn8BDe}}f|uZpoH_w6$gLal?2P=Sa+RRn?OWuW>UXO`$|65iNjqq5t478mC*jD+ zVrZXTg8bBA`KbjBJ6pKgEI)OiGv_#FGpKg9dPs{vyDrtOM0dc_U92=$9)c&XRKte? zbZglg8wiPq=SXcS;@pDg&}Bk(jldVx79vLu?LgZyP6a({3WV~NoZRu zjr#WET5+8)PZ9&YbcGuM3v}aBvF$S!8UO;gi=-SWkA3@8 zGu=~CjV$E;K}$y(p>)f!S9&G#(j28bhkg6^q5CC{{K^YtDE99w$PC_|w`EfD z_y9hD%;t;n#mF3fF28`x<@LOte2JWE-^)GK5@*T11IxV^%e^1Vy_V&^9?N}mXvmm` zeA66%fi~I0#c}(%A5fMbk^60bGWRR3xo-h|8fG$(m+=lH0lEh?D1$feO~&)Syf2x+ zYk6qWM2;VjNyzOWj;aQst%f~HsChZ=?C_JJ#_e$@;s=da_}QT}j&O6vPXHCU;E5}K z0;tIi&#?&;&#~1Kt?hxI6I#m?zUX+!6*}^~;mZd^P`;2wrw1?=3fh`UPo zg@L{+so&Nr%GOv^OC1VT?m0KSb<6bj8M#G0=!Q7VTV~OeWL7anmuoSdq*J?N?%)?FHIj z0zXuzju%-5F85?w83UMB#&VP!;6gR}_>teqTj-WG<3I&J(3Tvl>cJV%=xfK@L1!rV z19k`KNe%(csh~*|+lisyTg|IscjBF3cjnPAQCfr!P|zYw&>~E555hj+AD~y@!MU^_ zaAFimH7Ze^N|XvI-O>Jq(j3(n=nmSV)JFSY57aEBHdzsBgRUU_6pY&37`1tW$^zj= zDa?*hmqtepFg88KjZ;BCqY+b5r)#452G_bMrT?^XJQdLQ!zSoWONq5=uFM% z%nNd$1xi7wjW9YRjLw`vPn+OEsmFy;4-e|OhWx*y8wH~qH_*x(aE%F+;ln6HLjs}K zsW|JUi<3|iiWyjFA3@txBeh}H1vU6EYVc#!pk;I*f(|C36)6QcG73;L3cz=8%rpBl z3h-fV?}N5qiFsh!>OQR1eOap)W3BGXTHT(tx&v!q`YM!V6=1?i)p#OH?VxL?3oYW}x6XfpA5=2XUmGYKOy&}xjvLv+mbd&h$sRB=U-g)G@jZ^cl zYwEjwpIJL^|J>eFr7R4vq=z5S276wqI0oV1s%(e^1A-in=PgFdh5r zPH)31R>FUk>Q$<$Yn2^*rB{pGjSY=&BOVVWv zAAcrkn%}6Tz;c02D(NP!DOywlnKN-Nr<*vFpE!}*(k(jWZmn5kM`abfp3rdg+a?3u zJGE}xM9jJQ^Od}CsZH#`UAg;5Oj6Dn<`MIV-+sVx zASETSMuiIflH$t`Lz5(RZ&yq8;Z-!q!)@5Nr(MABh36lun{FkMdIxu3N z{k{uHgAP16u3omO%IO&wZsZO6wS|xAc7D0#-0JH;eLee!I!CKdP(@$1JJMrW$4!e5 zIbUx*d+Y0js7o;p>n4n8|5Pp9i5qoR?v-1xk4!nnbuMi<{6StfeN!l$8E zj;E~i!7hF!+7P_e$-BT9 zZ|_|Hj}lcoeK+w9SoAbd&dQ=qj(LCeU~c=y4WxU6nmUGU_@K&k6K5A;m+tk#G&(oh z0`_jIE>X!TP#YH5pl@PSn7huEI@`I44TmO0_8mMdHa4VSP+lE!oE87T(r@lXaEf@ix7!WaI6>r9+uSf{NA( z<>pDmiPKFYN}f{GmW#VLT)G^%LpgTlw&_E2_qP7^!3n2hF@2A&@9%f_aQ?+gTc_w| zb{#k8UflhvtDTNr&l&M@_@;3Q5yuwoa6B~NRs7qR zN?*AycRi>dP$B)vk0)o%2{|>p*!1Y5le>0F7$I=bi>l9#qo^ZN) z)Ga_(Ll>^Anp!!v;xygoIwK3M6eX1g^;p+LDOFqIgMR6~9)>8;FTs#IwSeR{Zgv96ad#no*7L5_73FBakBKa#ap9u(a?-pSge zp~)$Mt)o(gCnUv%p+!(-GSMxpbiXoz6?M9*fi|BOaSajJI3X#p@6eP12}w{I*gtS+ za#Uc#;P{bYjdTrYSivpA79_AieBb2cz)FE_hepQ7_6uyA6bsdZBj4{B0_$1gN*PJT zYZWTubydT{KpHj?U#Y6DT3A(EH}L;dVgFh8vm@BvzRaj9tNWb{etrL`no_TS-F`l7X3wCfA?cgy@0o8r*y+Ho11o~RKQ%R{H#i=X{G+@5xW{$YBxhDqUhP?@^7JLMUUYa`LSyZIcIzhY z&^b|NX5$&TPC!TU{&)i1KFBr-Au3s4UGKF$Q@_x4({<5x@^Ap%#Y9zziH*isH$Z1+ z9XiY0=RdybGi}@4d2y$%P8fKrsaNP|@AA459>uNQQG7y7!h2(w3d53_8;$AR@MQeW zsLdzu=N!(}IsDe3`Wt>nrLd2B6)H>?1vl6Aj=Y-Xv#dg`XW7fk9UY#xab!?<&gspm zBV4yfsv9NtKl9Vl=yJ;(#`WHD=ThmYmn7ZZr-?p4f6T(}_OXGE-`5^AIKpvo))U2- zb-fN6PyGDgUcK~(O9C%k?ym`-cwzC2byLcSZVB`5sqUBH?`@dv-S9@eQS#X4UEB1z zIBwEFkxwt-S$*HV@jp$83i)c*(P{c#6FnxEbN*jDbMNnpCaqizd0y@#PoGPvNk04{ zm@lw(>YwLMtVXxb%?*sx*fy{Aa`gM9wXP0DecSo6`PhCNn|c)Pn5*7>BsHG5t!$1< z)wiiJ-(rn8jF*ILld#W-`Q+r)Y7x>LfANLRr!|7tR=iCH_8?frfW_KBXt5^xbPbnB zL2_ZA<*gtCDV7e5Vr>hxiZyEkOGvS16p~t$Tda_u1}?S|OB6s6T?}jmmzS5LMs!g@ zq5`lCG&C^O1NNrC<(eu+x#pao0_>;&8_uA9iV?6^0_&p~0J|lo@B$3fM=>;k7hrc$ zy#;Lhg3RX-=5kKV$xO>H%F9eN6a*)CV4I60I5AJbE5A6^P}x8cq>f8O$}uHB321L6 zu#E=v46qjk?bD>D7|Iw(fqg0>?3o8NDi_@Lf+;n$Gq3^63Y)rQre~HU<|uf&zzbel%qWt3gv=W72AW@!Jl&TO0bW#e$kTN5f6PWQi0dN24@tSD95}O^{cZGzy>Mja5 ze7|bjSB5RG;^gP|3TS_I-1KpY!DHt~Klon@?45u5nyFNn&atZ(g|n^V7P(F8o?f*g zws*4X)5ES|+Yj(>TEpM8E=2U4%QkJTs9ye}-^&|(u4QVOed&9#M`iie*)#1oRCpOC zoBnc=zn17d{rNYa*n^pn@}!Be8rZ-q2ljeFB?`EEgwk>V_Dvi>Qt~X82IdB)3yc>S zw&}xKD8Mbwg#ZY$DPpT!Pxf0m62VX8Po%Vl~hcO zVlw!WAhPTcE3^$l8NkoS;KT0Fk$gcVrC+020-#nYLS6F$T!L?5(Z)o zBIjqWd{wRX#rtGm|Md^7YVRLkT0R$;hB+aAbOJgG*uP^D0QMdc!xGXg;MN~-XU>1L zY!2?Yt$MwErng71>y3DcD65l?5}z82rrL?_kV&gsbfhGFHBY^b?jzUVs<)?Ro%9g6 zeeR}Kq1>O_a%UgDF`w3We)eu7H$m}$h|l)N6g4=xJ62w4`nx7x;v&NR&7Gbp8DEg4^`$tIJnpr0=g@=fJk|@2!l=4xSB)9>$L% zCO$H`Xx0?5yn*?&NOO>ad|8*G(vJT}l7AiOh}k<<1_(9nzAAgiExq2g+vw$$@bB-R99OGbD>>uein+B@zL{kUTrX`j zsAtKjKdoIVcUG38=YHmt<>rg$R5v`B`S6{&Z~QrHk#}uZE__ut-J{BFvAidFuJ~e( zrK>mmKAV-)h|vT=dlg{XmD+rS>LsWvg?w1OV8Gs=yt-2;(x%R_!oGD0lk-404YH;4blx#QA^M; zB1_QZf?@+LSh2^%WFRMnzqCcE1?biakAUV-kH{BFm z(U3P72X4KpvWOXoz`}=_3C>~$hA*(Z7i0mpmX`o~&xXL>Gf)87w-bQ1fqVnJJ#~$A zEs&bQSnCDkii6m8a+uOHlO;zIPkZcSTpP9`h5u&H#3Q@U@H|~xwLq!Rsbx zn`(Ati>-r3|7?Nt%4%o46;4l(kL~d>Ic0O>srj}1r3!mZUaQ?)$NT)~tnUlAC{8ra zZ+j83TeYTyFXCURbh7<9!RB(V+39LF14t0GR|Z+V_Yliv^7{ zfC-NiI%}c9XvoeC9C-mwdKgH;XAwA=4SA4S5G)2VNIY&sKHva1qJ1H1poGNZ0gYKM z6lmZBHR}^Wt!2>2wt|5&!f+Nt;J9+J&AvlUD=z;pP=C1mT1xQD|6TLGA=kCQ;Xszg z2H{itr=%GCe0G#$?)8kr`Fnq||IS&oET+k+PX6wfhMIR%H~7EwD4b{4a&%s)X3FN^ zIsZ(a->+RfQF(h|MW~34m%?-nqX5_oUDfY;0YUZV?#qT;JB`F6h;)BdRu>D zyHjnbqI{6@cfSkwEswuhix~y!GygY!J`j{6^WHS%T2EWlr%mlk6dzXa)tbGokpIQQ z6*tTlH!rk2ujHiEw9Wc^?BvXSPHPl3n*1I;7wZh;GreTyvFM+eP-|QZ^FE=MAqN%Z z-qgiu8*u(x!=Ty9GG(LU(N}2^c3)C=#2cmh{678gp%(|c>hX`i^(5I8EjD_`CNMAn E0H_sezW@LL literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-BoldIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..071d0c398eb8a00c9533afc192952cf4d3e2c8ed GIT binary patch literal 101848 zcmdqK2YeLO_BeiLHakgXl1;K<10?KbKsq6$K&T3-B#=fDO6Z%-robi}b~lX{nxa$- zKB*Fl^xmXOQ$a)oMMM!Pc154%JtjE#_@6U(hfNfp@Av+{@8|dV{m|XHbLZZ3Pe140 zoqLm&mzPC!WCqcY@d@#{$@5z-*-e;9{~(0)NlZx*7mRxT7eWT!C*v31z`)$03IDp(ks(a`O@#RQ zW#x8@86EnF1&(}Cz=uBd$z=CE|dokV&T~x_{5b!g-?pl1!&(E z?%S4>xoQp+rKb_5#bto^X_>jELemRDF{$vym7B|~%aa@IaKDR?e&!0h)Ae9Gi2?jS zf#)J&u&IyZvUumkaRL4QNi>?Tp@y9A_rOQJKIrtX54{#?-U5DT2x5Z&pr7Wge|<=Z z*B*F244!{YPCd9tAL6&BCn4EH(+i4T%$w{{q9uf#$BuaL6B&$GlEjQ9F^mYcg11KF zrSWCG;Km!;BTmY{_@snnrZo{|mi^%Yha)nb0Oc3(A#;;m0v8c*BBTxT^21(_<3sr1 zcK~_ZU1o_u(%oeZX-9^;%U&dmOm&yFqz`$?UFJwLa>-rxCgaH$?y?UFWs==xU*gA% zbC(6ul9}i(`v<+w%yE}>q-}62Edx?~u+3d&h!9-mE(31CGu>qk@eN)8G%;SjK*8kT z7u{usn3@H+%Pa|L*416skU`B7-DNKl*KDD?tR=2yr`=_abTssIm%Yge!#H=@hjb4K zcb9!hi;!G*Ss*bX6WwM1#}uqW7Ug<_h^Y%8@yM@GfQ_C*EhOB-PuXwntiq`BZpRzmXcx{Hna z53@R)rS@`>!pY9XLR3`W61&S{FR#M8$evMs%ght4c2`lPt+XH}vPWc(Ua>K~A2pnN zpi-x37F`Z=p|#BHm?+wd{tdxmX}Rbsv5G^>OM!eb*9BaF?&XEu><-ZmPaLAfURmyP zlvgwu9Gcr2TVlV6Fs;#gl+AC@u$lCu*7GlRo zLh2MDR+qX;9!f_{v6s8VOz<#b2g-mBk>dX}C;WMTKCc8Atqh)PFLG6z9aa%4Kq;){ zPGDtac_Ag zORKD65o%F|!#=@kaXBLt5S10+66Ypv6&IP>G%aQMT2JX3%hZc`;r=3UCkXF1NcxC;G&K zTC6N{T5VO}Eku-=GFSwlYq7x?*s;781mP&HqHIU9fkPH^IigblMq@)ntYrn(!a^)H z#lr2Fl+hF~fZ&{}`MDWf2w0e1%192k3l}j10qb#Ni)16Vzel7I&I$`W&jH60do?JK zLqQfv27Db>o7L)P-g~#svg7RMZ`io zV2y*BD=L8d&{pA}-BPJQQ8W@rsdOT1(JZKN0XW>0IvNp3^#bz3w9K@;w5-frf4)r$ z>b&Z_+5j3wpiVdlLULLaD=8|q0SXTZr6LwRt~?b4Z*_EZc6t>0s74lGkppnYScID8 z6rGip666Tbi5gCI0|ul~Rv9n?RG}0!%I(RhFx*rtHmGQM8#O|EVnAamkX2Of&I+r= zt=M#U(Ol$mduMR7?x^I%;D>w#YAF0H2v?=$W}E8g8be1Op$h?jfj$9*-GrU!0V?d} z01ed6DK<8xKj$GGHAA&RcZ6s>sv>@m`ILe8K}9wfD#qoqM}Wv}Ru`y4ga}&TtSkU` zBAunh;NHL&;6PR^fqfT)uPno|%W5ep zFSUSdsvVHJK(eCdD;1!`Adu=3JIDYt7wW*=YTX1Y1%d43oQ$;GT(AkTy_lGlnWWlB zw$)Kq>QwSGP*q5UtUw_kP!9eug8Fa_BjBBjtxCi|Ho8Z*7r4NrkrigZq5}K^Wp9(= zl}_M`s0XeE&jKyM3tJU{iVt-AWTVl3gNHa>U zwnC?p9AG~j06-LgM}q{7I(9(96VL5{th(0Ovq-=0Zq7T%~Y> zuIBf)1Wju!)(XX}&6bJf_G-wbiYdz5{0V!J1 zgL0<{iEcNBsU?u%aZ`$az(m%q+u*cqKyq27Q^~IyM@^6gBu^l`Kc-349V(sNOl;hd zwpT(N5a4KHo#0jf=X0_qoKRSlhao339`i8wJksqlAgKiBi8)^-Xaq{4%3ccDev#^F zQ823eQC;=Jv=$6s0iTqXo0uM-mXVwT&{LD?lr1+aC2x3qPO_MmD`w|p4NFT(P7>S1 z=fZuP2yu8?UTW6RJP}&t#AoK^!|Xwf&&(GGr)4HZh{+>hCYGBkX61-!8QJM+$xxS; znV3E_DJ^rLm;n7Uvv5+Fk(LKQ^Rkq#Zcu5-&@V*z-FdprsTjV$r;Ho?*u@JS=sqHX#-R9BA`?s!KLjGC=o*<2EhK17@5=Eln6Y;Pd z1EqLUNbID5SfQLtYKfD$pj-x5k))AwVu7a)QlWgCm1l({Qt4+SHn`@HQc_Gx;0gA~ zfxb@oI7k(IW6NCVSqb+RxW^I9025ngL!F%@z{dvda4Z)*vjH>ON`#=?Jn0ly?@ zl?KxGW+{U1};l%i6Fmu48%1^hGv zCsB50C{KhsJB;|>Nmv9dk#ZMMhjJSVccpNLGDSY3tndyci4rX&-C#5a+##LV2g}Hl zN_dL6l`5?x|0{jVhA}D?ZA${4i6qqx6}8RN;EiPZ{UOMt51+m1+509)jqNHT${GQeLX9hzuL z2ZbO1x9fyI;R$~7fO}M|6D|#&(T+tef zLG!bqfBHiTx|07B{~`Z8lE?;co~h841=l<%rGu0bmD*hR{xdmWv_Z?Ra5_3L(#iXX?6lg zsx`P2EyAc>3LXNzB=yXwMW_Q9T~VLVGDPJYBQxq{h2l}Df1!~A^%tW$Y9jVUNTo_7 z7r_QqUsM54>|_E!u_!u+mZM@(2~cUSfL=?b&C?fk)#`>zW2+S)<8y}sOXZ3gV5`v# ztyGONB4CG+sTe3ln?wBYDPmrx&`;wOjW&pxYIhVvihC9GqWnPnDpGJl?x<~%H|Q7W zGwOLMH!-Tx$XKoTDvM&JDt+h!F#4iC(u~Rp !)L#gmlQYt3YS5TN0N?R9R>N6pI8DLX=F#< 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�T>kZe&r8tZo6BIDswE2 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

        Jv&&bdeknIcpZxUoif<2BX_?hHWJssh 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 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-ExtraLight.otf new file mode 100755 index 0000000000000000000000000000000000000000..43e0c69ff3d98460951c3edd92c3817d076f9597 GIT binary patch literal 94560 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 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-ExtraLightIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..01ac8765b95426f579ff5b485e27b30b07469ac2 GIT binary patch literal 92880 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

        !t{peCIc;ta!T`}Ookd2rM3qoZ6sEdSke(| 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 LuQU3NA>{u6ogZx( literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-It.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-It.otf new file mode 100755 index 0000000000000000000000000000000000000000..51577d6d0262b323103ae6fc13a88c9c73d388a4 GIT binary patch literal 100556 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 RROFJB&iwh+8Nge17yw?P4&VR) literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Light.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-Light.otf new file mode 100755 index 0000000000000000000000000000000000000000..9d8fb28c11a430bda05269b3e36951b84c88806d GIT binary patch literal 98972 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 YT$ig$-89DX+DUzQsIMkO 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�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 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/font/SourceSansPro-SemiboldIt.otf new file mode 100755 index 0000000000000000000000000000000000000000..8a668e48720053d578b77bec94cf7b9ea462ed66 GIT binary patch literal 100000 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
      1. Rf2JCSvKD8bR~ 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

          inDi=hMy`~8 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%0D-Dj4I`+6fV45Jadb-D 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 DUU1h& literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/drop-down-triangle-dark.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/drop-down-triangle-dark.png new file mode 100755 index 0000000000000000000000000000000000000000..9af2042ab80f7860305fc89a0c9ad89ad41bd8aa GIT binary patch literal 1091 zcmbVL&rj1(9Pa{CLIgRY@$f8((S)r(wzXZe!G3gu28LuTaX0DO2P>>UXy07n;?Tsz ziyrh3FnaK&7vsf)7$t!iuSPk0AYRmyL=E`5ALxN#V$=4$_kG{b=llEi?99YK|Ji0y#G49!lx(pGhz(w6ml3!lDB!R9a$t$q}U9hvTs!y&taBgj; zq^>Qiag7`w0|`&W1O`M3@Qj-2ie8dz@rrowizyPcRM2vgY&%sh%z~`tKoAQ@LMqKL zfaAhUG{$kvC}3%ZrD*(eAtoxuIFaQ+=OM8*M_Uk!QodsgpOR!1AzP%VMxzmKM8cM{ zNHOtv+~;7~5Y`B}t0q#skm-(e86@bcj&38}GJ(&iRIEBmlGxLB2!>rK91@#uCs8C`wJT z)VcvpBuhyW--IV3p}5X zFieh(b5dRq(lpBm`AjZDcd@eRBE?i;*RGE3cCh@hSTXBB1zAqXvTEH9n5|mKa;ugN zvU41`SWr~m^aYpv0=46nprc=dTHdh?(8{o=AK}5jBX481|H&GKouT~p_^VyIBHV-i z_OSW!;c$GQiD$;a!||(r?;Rej6c5 z4i2v0dNgs@34Hw7{BTYleDl3`X@9eMvN=Em9-M!e`h05WZQvUO&x1?*TPcEmHJsXf wx_XR86YxWr?#Ix9+UjBmUA=Glg#{$-zJh-9RL6T literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/drop-down-triangle.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/drop-down-triangle.png new file mode 100755 index 0000000000000000000000000000000000000000..cb1c968e10703f7ee0028092736559e73ca4c261 GIT binary patch literal 2892 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 + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + eJzsvemOJMmRJvgE9g6+PxogB1NBU1PTw7iDBcLj6OEM2V0g2ceiMSgks6LJnM6jkJVFLvfpV75P +RFTV3D2yIo8iie0KrcoIF1dTM9NDVI5PRP/u//jyN19cf/3mdw9fxKv5MP3d3928fXj27s3bnx9I +Pfzi5cvvvn33FqSf/Pqnh5CvZql0/Yv6lVX854e337548/rn/Ooqypf3uPonv/j22e8eXr58OPzy +2euv3/3h2cuHtz89/OSn8v1vX7x7+SA1/vDs1e++e/v7h7dX3/7x9z/1W0tbt8/eyffrz5afhXhY +fj7Hw5e/wtfPXv/x2bffvvh/H3CzWHGv45vvXn/94vXvj2/+HyEevojrIW6HL4p89d9f/Prh2/d8 +f/vm+XevHl6/+/Ltm+cP33578+blm7ff/vxw8+dnrw+/evZ7+ebZ4f+WN3jzp8Px5bPn/zHJW6ev +7l+8fJAXfPXs3SEs6IvrX4Tlq+N3L15+/Q/fvfrdg7x63kiOX7HJf/pW2pJm8TfI5atfvBLKbx7e +vZPnkhuiP3/998fxMYTI8pN/+/XD71+w+6Vb/tdPrdm3b7559eztf+DawxfrfJD/7I6/fXj1zUvp +Pb7uMl+lwxf8t/9p9eQtWOeLJVfplZIPca6HmKp+3/vm4Y8vHv7088M/vHn9oB1w/fbdb3QI1nWe +9V/95tffyRj/0+sX7+TBMkib9sCv3nz98FLqt+vvXz7ji7OE/q9W+O0zmRPvZOzevPzuHWdW9TtI +D//y2Z8fMExBb/CP3zy8/u2bf+YzfrEEaWfZrrbDssobhWVbD6Gy/QWPus3tnqH/q02jITTj7WOG +fCnj9I9vX/z+xeuffxGr9HVcZh3Cv3/74us+guFQ7X9p/KoO/2/+vz6tvPi7dw+v7ell3tz8apgH +89WvfiN3vXv99c2bV+j9bzHBZQK8lrnx8s3v9bv2N7+Ry7/7Rt+An7+Sgfry7YvXaHP6B35Tv/ry +5Xfy1d+/ffPdN794/e9vpp/o0v7nh+eyfmUsvz784+/+t3yQ9cm5efjt22fPpQH53OpcPXvxzU/f +25y83NuHg34pV/Kj//7+q28f/l1WVb9cqXev//jw8s03Q7ONIlzl8C/P3n7z/U1/+fLZ62dvD6S3 +ln/54o/yzTPpqd52pz2hUZkl30jn8BJWObnBeyoMXz3hRs/e/UEY0MPrr79tbevH/YMr7fvb+81z +zMG3h+Pb7779w+G3b968bM3uv2qtG5lU1P/buMeXvOD1P77WDjq/k1U4vZPwn7+5u0jtx+8gX/4t +t37z7OXLF79/++ybP7x4fukGF75vd9LvPmRi/fnV7968fPHtqz6fBsqXz96+e/H85cNv/vztu4dX +Tx7cw93XL4TJPbKM31vnN3969u75H3754ndvn7198fDe1YcB+PcXr7+Wuf+b7168e+gd9ObVN5BS +Dr/5w7NvHvga7/5wz5q/aQ2mr4T1j8z9iy/ew/VDPhxfD9///dtnX7+QDUWErr9/8/Lrh9eHX4O9 +T7tPsn2Vw/Hr6d+m2UpgWQ9/99Xx7fTfpvn0J5yUZSjRymol8X8vGf9P8msspZU6b7tyPZSjlBsr +t0O5m++n+d7L7sHGn2UocSjrriQtE3+VkKUU/q5D2XblOhxbuWnlGG6l+KfbST7ckXQb7scydh0f +zn/iUNahpCWjTPprKUOpyyZF/70eylHL9H9dGsvHRjPuxnMdRrWPrZSpDe86DLKO6ji6VQp+Y1Tr +bny3YYTl38mG2gf72IZZf2OU78bRln/1Z7441su0G+go44rfGFmMcWapHOVyMsLXVvZjK2OJX3cs +tyej6DeNHMM+Zig6SD5kmw2WDNBkY4SxurFyy3Jn5R7FVxZeZhzLwFFareMrO/TIRXLPvln48pmv +t/FVbvnEwZ4wc8rII0y8L+6zxBjXmGMRZWuLRym38V5GO6xxXde0lrWu23q9Htfb9W69l45cUkxr +yqmkLV2nY7pJd+l+kgcKMkvXnHLONW/5Oh/zTb7N9zIXgnTDWlLJpZatHMtNuS33Mk9CXepaU821 +1K1e12O9rXf1XubLMm1xWzdpZ6vbth23m+1uu5dJE67j9XqdrvN1vd6ur6+PUm6ub6/vOJMWeYH1 +mI7lWI+bfHU83hzvjvcyu8LE3o436026kQe42W6ub443Nze3N/cy2QJHYb1Nt/lWHu623m63x9ub +27vb+7tZxiXerXf5rtzVu+1O7nV3c3c73d3d3WNG3EuH3ad7edN7efb7aylyy3u58v7kR8ZyltFs +n++GcjuUm6Ecd+V6KJuXSf6pQylDybuShrIOJQ5FJuB0v7QysrDOfOfx0e/Gn9tdudEy8ddxKNdD +2XalDqUMJQ8lTXeplXVX4lCWoYShzGPRLp+s78enH39uhnLUwpW5G8f96O3HzEdrP0T7YZGhmIbR +2A/BvuP33W3dfNK37M+pdem+I/e9t++xk37ad8100iPaG9dWNpZqpVjJLMnKyhKtLBPXnm2Zyvrb +9Pc303v5z5Hl2srGUq3I2p7kn2wlWVlZohVlvc7ohYP6WN5x/I4cr8rxSRwQDMLMbr9lN1+zVwv7 +cWW/BfbTHTvmyI6oE9888V3xgjNf6JYvcM1HLnzClU8kzyGz5U4680b41rXwryp8LAs3W4WrLcLN +50km0p308o0wvWthf/W6CCNMwhCj7ChBdth7GfFb6Y7jdi1ss25FGGgSRhplCwqyH9/LRLiVbjoK +t91qnYTxZmHAa43CioNs3PcyQ26lD4/lWlh1LUWYdhLmHYWFB9no72Xu3ErHHoXBb8Loi7D7JGw/ +CvMPeZ5kGt/JGN/IxnAtG0SVbSKnJBtGlI0jiOxwL9PtVsbiKJvKJptLWbNsM6tsN4tsOrPM+zuZ +FTeyEV3LhlQn2ZlyTLJHRdmrgsgq9zJDb2X4sItiW8VGm2Rzw0YcljmAyzaB1mqhntdiPVlQuqlD +fsPOv1EyUElBZAfOh0dux2bYgF/eL4bYsXTGcD+wemUJm0yqJBMqyGS6NJUW2yO4++BHd6DAdYld +KHH1+k5kexG2ItltRAjgvbHftc0uyyyrF7a72LY7bHbXuCEvbhJDNBm0uNRAoeGOYkMwwSE10eF6 +7Hb0AuS0+V6blA8U5m75EatF14pviG0X5fd8c761DsM1pZK7uBtZioShCT0q4ango5LcDQXxO2k6 +mJCtr+NSs0nJVCvYlDfUm2Ej7A29+GJP6COPA6WDtBMWKClEGfkiM+DIuXAiHXhXJNsAnOOMPKdP +lc53Rs5D3qNdfIEd7bnR9/Ei7fqT1fjJi/HYxF8vXZGpOxWnmNqjJe00I9OWJvvDf1Qg3+moexXM +95imoDVJn+U47RS7G0rQrhTg93ZS6knpSqT+lSdXM1tZz0o8K8uFYj/TTtM9U+iw4kYhrf2+vViE +T0xN074xZeyo2tnFsj1aqut906Dka8lPLF2lTGOZ9h+bsaH/fV7iI4WTYpqXJ5ZLHXyhTE+s+OSf +S7r7J/18tgZ9XwytR1VGdTH71opKWG6UcCNFNV3YjRi20idTm315u1mkT//T1ewSqq/eccEedR27 +Sn++WkszAWQrqRkIum0ojgt0+v6VKX81s0Q3T50sR1+Qt9Ng1BqNXMeLy/G4M42dL0gzppyuz7qz +snXrjFtoLi3R9nk6W5mni/B8Ub63TGcGw0sr9X3r92R5ToMN8pPX8PvW8V9/2X32Bi+JqKP2c67/ +qDxyrv+4FDJDh76jtLGZ5pdN3lia9nM/SBxlJ3EsgwZ0IzoQNaBJVCAoQaoCQQmaqQGpDnRD44/q +QbXpQdH0IGhCN6IFHakHVZqS1omqUODiuKdWfIs7yPVVNCHVhaANLaoNUR+6NX3oSH2oUh+CRgTO +FSZTiu6p4UItUsUIqlGlagTlaKVyFLiU7qkh3VBDgo4ELanIXVFVFKFJFKVIdhhomrmjunQr6hIU +JqhMUJqgNpU1UXGC6hTJqWaqT/emWB+1TCK3QXKD7FYov2XUj/gJlJ86F4dMq2PRpTSVzCoVKJR1 +apz6TOoaZCy3pOrvkQGPIhLloWkQgnZM9Yxx7iSXHY/cccRpJ5OgnPC2i2ztPRLEucTwNDbxKPv4 +nOvYtEUto5lq/Nmb5QZT494W5vvqZH8suxJ3ZW92Sycl70qZdqa8sjPyVSpK+3J9Uo6nZWo2Ly+3 +Z+X85/68+Bybxp36Plwoy8USLxaz5J2X9EjJj5Zmy512ht1Cc/P7yvY95XramZMvl+MTC5n7tLNc +v6/cPq1MF4iXBvHJZXr0q4/8Od9EP7YhM9zMTf1czGOhZbWi5kw3bxYrbv3crJhtdDJTqf84b+jL +xsfDOauryC7Ju5VWbbbrRKORltyKm3lrK5uV61aOF3iU/ExnDOoSa+qm+8vcaOBD0yNM6DHu8xjX +GTjNkTacx3nNe3jMjqkYY5ney1MucJLvYyHT+/nGE1jGCWuYRi7x0axhWO+PMYYnsoHzlf/4On5/ ++Qut4w+yoe6sqCKy3aixk05YyFlxXSeR9PLgiz0KJ1B/7GweWfhkE72yVQRK98zewjcrm4s6ZyNF +UThoy0T51L208NPe0VOrvtoI6ZL+WvzAZ3tNARh+Wywg9d3CewvBkh7ciU7cCkmbjtyjcKPb5s6d +RfyDJAmf7iqPBwm5UCzfRES/pn/3RvjFnXl55+swiRy/UJ6HuxcO33xdKOlvg+OXrl8pmI4QBAMN +jJFuYDiCIZAXuoPrdNzoE1av8A15EZb2Pf3Dc2O5zmydzTp77WzVOOrUWGlnoc46O9PsvLLzyM4b +R454OzU+OPK/zvf2vG5kcSNbG5jZNPCxPes6YVYXJJ9zfjTINJfllse4zInYMZbpfVzje9nEEzf4 +j13HZrj+t2kEFYfDIn/lQ52vVlkuhxKvZIEsqPqb6e++ekrV47fnLV4lqZjmQw1XogfmR5s7rYe2 +rkIu2xrkywDtdnGUcqp1WeWPkhb7egkpbwdU0EaWqzintd3skxvi08yimaYstWZZ5BnXiXItyjfb +2tY0b8ROC1Nck/yx4HcY2opXs7CV/lCfqT19tjwLQ0VbKcyp8LoqjFjbEhWxavuLcFS0JeOWtl1b +aZ634dk+T3sfP4pLuaoxbmipprJ94lCetnZhptqTb9uV8PPHpum+krRyvG0QR0cqXgYv/uPb5394 +8fVPJ/8DwP4GWbzKOcg+iXGMSymZAEZZXOxefI2R3y1bu+LgV2gcgl1xsCtsmcoDi7I+vNJHXKwd +9tQL0U1rvooR0/sjbry//kO6+Tf/8WfpY/wrF67awf/N959723UW22+S+TOL7S7XtqHcjo5n2yxW +w0LJbkBJSPaCYDivlSICkF5Higb3tAqpSJApDFxTDLjjLgGgF/Z93fOvae27PQU2KojRPUJq31Yz +Ofbi2QCg6tJ1BCe9wg0Ulx7DSl76eRwNOxqvkxllaCVU5ASxEw09cWooLIaiUByFIQ== + + + KWgqvDMwxU1St+774SEDOuRJ2JDRN9sEoWDQgRE80OEDNyrtDBCCtUk3m8MIbnWcIMYakhDSa3UU +IWVWxRBWyqmQTyGdJukHiKQ3MtlmiqHJAIO3Rf3j6FbDXXTkxQ64YbbDuXk9b2gdVHNgMbPfah6D +YIbwJwNmnoSWUUBAN3+rw31RbJNhmm4bjuna0EtuDk8GU1J40kyh6G7nRR+Aog0qquZT9YfHplUk +ahaZ2kWhhlFpDb6mnnGkYeF2olh5T4WjqxyK/sS4qd6hmkfXPah9GB5UEaHQP6CB5IlKSKUS4mrI +7U4VOVFGTBfB0DtqlPqIayTTiUqCObEZkPSGUvVdg5MuVEgcVDpqJDfUSO4gkE6mkMRBISmmjByp +jNxSGVHAaddD1kEPgQ7StJCJNo6uhpwrIskUEaoiTQ85UhehJqJ8yAB3hn8eQIr0FJ7/fdf+3lPN +aj4ZjFo+mC/yrnsl/a/xdwNZj6B6NcgbxDo0C31sCPv+O+5+r8Z+HY6dGu5ejf/CFacd8t7x98X+ +Va+B/qvO3P7v9c7HcGtQbcPfE/gDR/GA1e5I7WgujGxY7Wy+aPV0dFA9/SDTgM/uS64vtUhAzOky +44whcEZW//v3mNFHcOoveMy7YN7K0cUQmltidFCcO0TPfaqrezlOHbHnn8bfp3+PtOQRAz00ZH0U +u/E4siPu/o7T8GE9cdmMjpzLPuv+ffNgT2e+Hu277lLuvdp7uA9C98DskKnHC8jUYqDUDkd1IKpB +UJXTc4eXPX4ib7jmRq9bfaExI5GfRNvyddPfu0Svm0u0kFmZW3SiFNB9o7d8ON32dOPzra9tfm37 +8w2QmFFugrINTrYPjjvhuBeO2NE9enSPH20I0kkFH/OQnmJIH0ORvgdHOg3QtY8CrwXlyudo8aF8 +P2C8W77NFj41nPQ5Uro0o/oeLT3gpa0McOnpDDF9u0NMPz4rq/kP8n5uTgNaesRKz22i3ptdSd9M +2z+2OauzduNex7k72fTN3Ar7JI4GCVRerq5cn9B31l03g69fJ7eUyWZ4sVmeqSxQRFHWSw6uG4X6 +hXXa33Hqc/IrBuKSk+40JOK0XPYELqfG/bOgiYvBE3s8/1kgxXQeTXEC978cVHEeWGFxANPF6Ipy +4rHNJ/7cx4Ms4vRonEV4z8p5bN3IypkuLp7j4Ezq62dcQ8NK2lnvrjYRMmOi4gzxHVYPYRQVOvUc +hFkl2kZEi64Z6nXalpDKzowhtbuJ73O1R6tPzXkL1O43EYSrGVLkY7PUqIWr24zylchPtT/NR7fA ++5c1CuuDbSoWYf12bQhF5H68If7Cq9ZVeObwEinLpaEbKj+5IbWB1TlG9mOKW6XRT/bZGnvahYLr +YVzT3rVmtquU5tGI8uktfZA55btXrx7ewqKif9AIZlarQfJzgWyUqsYwytIge471O7Yg2DsX3RUE +DInWxevUZOjSJOUeyeihqKMo3MNOqe5NQ9RibSjNHlCqiE7Fdz6ucyZqnRSEp0ESVpVzGyTio21l +d655iu5J9JIBQNkOtU9s6NQTJwKeCuFPqoi6Mnr0/dF4k3soVNhbDHdtynCyVlOaqK0SykU7RDWV +VYvtUh48lNpm3DzLDiJqGNKpgdVjK6mV/lNaqa1ct3LsZco3Q+ne9r3LZYRxhl2JQ2HfTWVtJe3K ++U89KduFcj2V67Ny80i5fU9pbqPpss+ayv2HFk7kqS6fo5zH4PYo3NLicI99lYZ9PEnlojz2aGIs +xcnU0V1MCpfZ/aBfdtfwZnEwt4OlZvX1AfvMZGviht7BuQXrJgvXrTS3Xdt0vqMtBhM40uyYbG7C +EnPkTLzFDHS38MJ51F3C13QJ2/gRKxmoDUTax9z2Umnshe0FAgftLrPZXRKtLuoC3poD+Nasv2CA +C4W4bnWBuLc1uwt9v9P3uH+7A3gbbC43jAqGwfPOcITN9zudOH8zZeOOsHEnsEq8HUrTITQdPMOx +mk6cwHkHldnOgDI7h/CAjGmYGNVG9iAYF8tOsS7nGJdzPN3NdAHVchHNMsqt56iWXqYLkvFFhNwT +AHLrZSTdYyi69xZq6mGM2fVoXY/S9fjcHpvrz9ClfhPpB6GdIvo++rbHMbtk3aXoHmjbBORBIL5V +UNQ+sLaLuefhtF01PFELR31wuqAOXjZRnKmCJ3qgaYLTBVVwrwzu1cG9QljNFFraZpemphZ21dCV +w6Wl3ZgHFfF+UBTvmmLQooInv/F1/9laqa30vatvw6mVtZfJ9MquXS6DjhlGXXPQOHsZNTGO5zTo +MDe7cjwr1yfl0k+dyE735eLOTVPP46WJQVP/86SsH1y4g01b/Bzlw6O13x+vzRDJ6SRG8jxmex8p +uY/bHiO3zTk3NYPdaKy7s2naDXU7M5366pq3zv111z6+xcZHO3Q5iWW4aZ6q7SSiIXZbnVnr7srt +xBV/5PTfzIFVKJy661INd915uXdf9kiHQtk2TRbuoF7MZRfycEd+tQ982CiUlGbgSyaetxiICdY+ +2vvubZO7pd3vxjjFGBKhQREqDnlohAZHqFpBN8TUoiTuTf9Q7qlM7khr4bVZDD1wYgydyKZJmJIS +40Tdx0NSw4XYuMei4zzOYh8Ru02mfm2DAPpYUGwv66UAWQ+TPf85j2N7LHzqAhB+OiPdfUx5H8KK +YJS6A0Vc/t4AF2muotwRcyMC7WaAiQTbQ+hWiGZzOMF5fMTVH2Id+KfXr5+9evj68HsjHcJPp0vE +jnW5kPEnNV1jyPoTHo9b1/D3e49enwyGegpB3Qfx78Gn6gNW/+/1DnMqasXUAKfb3r3VTRzrmZLk +D+5B9/3xT1/gOOkbmNHiqdkI3oOknfr7PP2Bj/bAPUfA2Nu7/p6sw8PucUfN7rHkCZeBv3Hq3d8T +B/0gCUo+U3qS6/uppyf5QTOq/PjA+sCDjTuuJc1IRLsUtTpDFy80w16p4enCHxcZ4mdoSrijpt8l +pTW9o30aB53nizxUyNJ02nHRxcBhWM83hDdEYg82rltwmEgswEZL550sUDW7VC5JhTBpKrTrqSGY +FrK/Qlvh7ZD8zBFMDqjvqc+KwegJone0ytTgKnuoigFVdsD5ZDaTPXB+tJzcbfdTM58ocGUxfWU1 +Q4pD6bMpPa4Gdd3Cf0x9mszWolj7WwO6jKUHhOxC1nuuxH2ZmlbXS7xY1kdK2pfphJCfVMrjZXr0 +q/pxZfqAyheUv/MyPa3a08uPDV6o0KQEl8Jy4yIqey2UBMou1+JCdFHhpq/G3C5k1Xg9aS6jJl9h +ex+zK0YabLPB5yyGp4HmOmCuhe5MDSvnkTv7uJ3GcgCSO4vcUaBcbsZa4T+TzcQbc6jeWRDHbHE8 +wdQTh86lFs/jxW0P+nM9GWfxfu12Drd+dMNIjxLphpRwWqYxf9DOKhN33O68pLNCXjgNtp/TcsHH +8UjpNqU6jR+eVM4sPPsyfV+FDy1PbfDJP9PTq/6nafAxDgKd4s7g6YlaxLX6hlqusWxKgydpBf8w +FW2CUEKP6dIytEI3u2+46rTLzqquHofcjm6eixzEeYhDbS9E/13kIs5HCrIKKjO53nESNYif8pLO +TxYzuXSuksweWaaBsfhPn6N7vrJDhpwCYJzDTGdM5jFmszxSTjjO9EQG9H3sqJXpfV9+RHkvj/uo +8mODf4EGPyQ65ck/72twjxuOZ2aRsrPjmA1nalaRXebEMcyGdhs1g7hU5O7tbKYnAkJUMJos9qBy +ncDudN+ko5W24tGVfU/pKFoESSHTgIxPtIRiISY6rxXpAFYCu7e6SIEViHRbJwM7gM2oRwyuU2VV +sfmsk/KiydjQjYUswbc6m9taiy9yH0vnV+6W6mA2Kk8TNaiuJ42K0Kjd7BWSU6F1+FEE8e2Fcp5N +RT3B83vLMt0sTy7rU8r0tGo3+allenrV/zQNulnr9iz57FHmbLlLsuiQjfXWEndlJuyamarrSBtV +pn0qWGquo8wyurZglIJJCvYoOLPgyFInloLMb5l+S6HlyfNu0VPV0g/X4tFUUwORPyX18Gny4ZZ+ +uGPHJ/MyuYfJvUvRIOShOZVuByD59ZBdq7uR6EKazIPk7qO968gdR91p1F1Go8Modm/RNDqLdo6i +UzfRqZPoEf/QdOIgesw9tHMOvc8zND3mGLrkFHqCH4ixOU8tN08p09OqPWKJulCmp1f9T9Pgjxzk +Rw7yIwf5212ff/sN/shBfuQgP3KQv931+bffYPd1Xzy57ulEuMrLstaw0XW9boUJVZLMMVBKSer6 +DjOipy78wT/zBa/5Z23VHOjILBPiIYWrWXjY6EY/+cbryz3lixyuELd/iOtVDj2/03tq7K8v0mpa +Ms4UjstWLlx/WqNdX8oFn/9I/kS3/3LZ7b/A7R/d7d+yid2dQJNvTyDKjxbuWNe3Z+Xmw4o2cwpD +xs/7fC5n3iGNQu5Ak9ng4rcNJ35+9FI9j7NxY+J4jFwZQGXjyYvjqYsn5W+umZ7E5qZl9ut2LpsL +OhT78dmNrVa4hIQwLITndWnH5dgpNe1cHk/h0ZPO1CHdjCeb+dQKIyOLuSqnKTHhGGzhPfPKXGl1 +DZF50ea0bvNy4Y/L2J/P16RGl6Z5CWxNZCVtFi5yQC3nkFdDdRqeMwoPrRXX98f5uOv13p/lVT57 +33wiC7zIAJcPx47eGZ7xwolHDTdqMMbJYZffh5ssZ7jJS2DPE7Sq7v04bfM9rV9+i8sg0t37TP5K +HwOh/F54n/BUjxf43DEJvMPkEQnva/0D4In79lvEw56r1AGmt+MNp1/84Ci/eGmux91cN5zZcpLx +dUyypFvCXUvz2pO8puF4NM1wdpyYJZshfUM4X0/lmlsK12uL09N5S/eUxhsvVPES1b1iUJ6Nzqqj +BRPfmUu+w3riECcMB1adsgYDw4SPmN87i++NhidMdGSNcZieIQ2zvGV3Oc3vMmZ4Weh8n+mS9ywv +Y56XIYBkeiyCpJ2N4QEk1QNIPhec9vJqezqc9mRuf2iuhP0C+JiruRfJdfOM7AcxhMiEjnqlcKtc +85gzc7jdh1z0aeusXlxodZccsmVA8xxoYzZmh4uaVMXBP8v87PDVDuRoEFa94K6hXucBGtIv9Yvl +hxfs8gjemCc4cgEdzfcbbaXoHR45h/Jy9qC/xAVddEU/jLGRp9lyLuXLCRfy5ViunKkFmLlG4SGO +HtaoO9auygck1LGAxtsdpxFeM9lxOx5l6LFqS49V0/v2e6SLd1rek7qn3a1ztukkLm6xCTQ3Bqfj +Q0viIqzhjocMbTxdKB6D9OEt82ZmeYpF7onTgzaaDaM0ccfkj0lY4Ez74CaTKsnkChOP/jnKjCvC +vqMszXtGuV3zSB9MBj0g8rJk9YTTNb8/OMRywp9mhF//E963LachlWPLK99w8Y7feoyd7RkaAe/T +Ls1Ax7aP8PURnD5izBuuW5lc3IFuL+TLfw/fPOWcyGLVsf8D8P8y9D+3Vy072KkCFQ== + + + h9yZaZfBoT/fYwz6lEU33K8OwYjF67C7Dq87D1Ho0Fxmkk0jSOgkpyzRQY/sBOlsLwD0524i5icR +63NDjE8krgdwnjtCeFYCdgDSASYnEnezEU4DmAzwLfpk49nHn3b0sR61On3KWat+IvGPT/ZRTzaI +iVmm/kIFP8wbFfw8zyskvitZHjExOErzWJ3/0fN8VZHchlz+n7lZFSzXeWFO8JRDYAYy6T7pWkqN +RY0nEanelwt/tCbzcrWJCj086WdtVs0xn2Yf9ybDFTbfz2Z2P2lW+3RG4lG8s3AVvlgKc9w4OnOu ++vJM7n/hj4uC/Gdq8JOE/PWSjL/u7OZMm4TsPdWStN8zQbszR6Rnv7fEPGDPmgRZ98g72xSjKeHY +9rbJ9O/bpn+HGz+YfG3Hq3h+8XawyniuynAolSzkaX8a1clBVPtDqEYc+P4AquEoqjHV4PvPzHta +uZ8+7Eij7y9//QbVLqepePfxT7C5wdKm56SrlOcS3rElsorMCleYFPnGNnBGY+sODnnOkla1fOKr +ZWdzw8kNd4l7Q/ouNJmsLZ0a8b5TM5doCqTZ0lYtNJjAEe6J16rlOOsRSx1QO7hLTpKRnZ71zXxX +l0u6WNaprhdL/tgyffyln6lBnRo965qnovNU+3repic2LPb/NtA9VTMMvNGzPC90d4xJmcd/8XtM +cj0P6a5HIPuT8O4f9fNjg0+4wA7BmGU13oggj9NwcQ7uzNNvjzz1FoLeQiEPIh4EPIh3K4+znXmQ +LSS7Ua4jYuUxsW4Q7Jpod2vIi2vLIu9nz/pxEXEaDvH21Pg9o/54yux44vZ2NuVbRsj9efXvP5X+ +SYdWf9/x8j/8WH72BtUUc2PnQCeaZEZwV7W0B5r0oGU8eP+hJlM7wCPvjU47C/dxSJDkFm5PkjQa +uUOdJ7N031s+vVuzd9+YzfvYYj99I+kJM/vPkPFzOsm7uZ6V+EhZLpfpkS/Cx5bp4y/9TA0q1qH7 +BEavgPsFwhkCwvEP48HjPTeeyI3LLi1eT5L+lIx4+5x4zPzloSuxlTH6ZY/8OgmkuXhY5t30WFTO +GXblaeVm+n6Qy4eVv36Do4Hvry4V/xANvle3mB754vKhA+fZ08cs6tSKpotHEOSz7JL7DJPhbCH5 +MjpOtoY2WzvZvHHr7jgjO+DiQoqbcMLtmeQf7D7SIn9vYF61yUfZze/lsY/k5Fl491J1X/mrS8Wf +0uBlFWF9RKcwjWM6U0HOlJWTjMojLKxrP00jmloaaN+7NIu07i4q72iu2RsDQx+phRVLBLhS1Fso +aAGhcDtR6ruxpH/FgNBM8WeZ/WDiU+AzDHww781EN9+I1qjyn1r1VPg7Tk3uo8Rnch7kO0h1EOMg +vF1T14AcFv/ikbQ/Nnj2s9fPLNB4ah/87J3lROHbK4IOCortKJ+9prlNg6pZT1TNslNSrZiq8okd +c/bzF2nw/arBY8cVWpkuHgl1eqbTqM40LeesF6kVTYbcHA8vuBlwm/cNsBVaMr1oh4LlIaWe5QDU +pHruRRz9iO/zJJ4nNOzpDHmQwNa8Rvs8XjfMtLPQsoSk/DyHUE+x/GtLxZ/S4CO6wyPFNI7pTAU5 +V1b2ysyg51w6SGDq5wZYOVpWkX48wN2QX2RuOUbek2XkMe/p6Dv1s8Y385j2g/0WO1xcD/S7nnam +7MUM2ZV+vxvarwM9f0keGPZqhZT81aXiH6LB9+oW0yNfPK7A3F3SebpGNA1Z+HsZFaquZnlOgK6L +ZXMjlJ6mfzIlrh/XfjRF7zxj/3hiewf5ZXMlmPNgcqzf2fm4ehJ73p2Ne3N3e4I6K8KRgA8TtoWT +extuzF180PBTMldPqVc46PdQ1quQyuCU+7Rm6NpK87IRRz2HJfM4HuGZIWluxzVuSyCaGfjq0ZcX +4mEtV8KW+8N8ckt6+tEHvVIth2W9Krvn+OgWPsmZli4509IOmXoR93K6Xz05Gey6niJgTjEwYTiH +Ffmfhiy3flCkn0Dk//YDDvfHQ3YRK55+nnaiwXiy46mQAIFLhK12bq9jOD8cwmnq4kk+1Om4P/K4 +J1N/zD5IROp4fsP9cNDa+QEO23BI2v4Ih7Ud4bBMj57i0DXw68E8BWEz7PO2LjxBbF5qKX5qVp5l +AS2MK+CB8eHRTK0ffrGesyVLgm5nmRPrUuzK6jELm+JYL8NSP+LaT1trF2Hg6Ucc+I848B9x4J8V +B563SytNqGfRReEJ0UWP56Y3je4zm2TaTvPE2faEFN4+eftxQbd2zqofGdQPDart0KA8HF7UDwzF +yUgnvP+DOeluFn7U1XpewtlZCrsJ99j3nzS3ykWRqaT3Ra49GvX1npMPdrjjyyFlXXbJl6bu0Lxb +KNIuYO3ROLXeYD2JUTs9OeDsaS+Hpz0+eR9nlrsp/Dj3fSr/fc+qeBpLf1Ke/NMTW4NsStQuZM5C +WAdlzttmU9zYbJvrp2eKnqyTT27rc0e6/csfXrx7+K+H48tnz/9DlsXu41/iFJBzs9lHngMynSWc +9XTVnm52TDV7244T3Oeq9hyzN0Bd3Vl62WXAo++x8o+nxx+T4x87Pv5T4P83Q8Z74v+njw8AsNJS +QHqixlOzy4nV5Ic8X+XMsvrRJ6xMqqY+MlM8d2eyoyh1svT8xC4C9xzFIvpuDAFw4ffODjx9Qp7z +k/zEZjV8n8XwafEW54ctfGzExT61QD9s4TSFxO2FJAVPmgofcXLN/LnOrpkuTIRdqA79f+NEGM8k +9WkwJKt+31T4voTV+3TVZkae6qcFuJxOitvp40NchikyTJTpkWM59ukoPp/0bDL0X67BS56pSwdj +lz13my4wtwv6xcXMw/u8wxZQNH1iRFHRmKIeUjR9fEyReRaOanyg2SHerpOsjX3akbsLiUd+qKOL +PsZUd/HwoulDjHUNy+dIPk/cdttTt01mlmD2tpa87fZJ6dv2ydssGmn6tHAkjeo11CrjkaaPD0gi +YhV4hmxIVYBUZTndn6SHKRcyyPw4FX6cCj9OhR+nwmNpoz4gqdJZfqgPv/aHMjkJ4at/ePP6y7cv +Xr978fr3X3wx6NrjF9M/fINvon7z5bN37x7evhYl/Prln7/99pmo3/bHYduuthxXeE7XnONhWdcr +2cblj5CvZC5lPuk1//3XP8mv7/in+xz/9c/8+D/kz/8txD/Jyx9+dfi3/zUfvtZLfi2//B7e5OGV +EM9udPjlSPXn+eVw/SXa7urX8v/Prt++u33x/N2LN6+fvf3z4ec0Wfzs+ObNS3n7X1hPfHX39Yt3 +b95+dXz2/D+kt7767YuXD1/9+uH5u58e/qtc8H/K//aq/+U7NnDLt/lHTocFRwWqDTIsiRNjlQlR +LemfHaBa/azAdatz3A7/+owN7TouhnA1xyzjXq+iSPbaMfJqiwhch7RdZRGpDrLir6SpdEgFh7XK +O1epXpd4SOkqyNo6PMdlNV3J4q2HtFxlhICK5H+1yqo6rNuVCP04OzZfBVmAhzVeyVpb7LLtahau +cIjyZWHjRe+21Ku0wKBf56u0bTJFy1WE8ZWXlfVKVBCplRGYK3fLcpd5zYe46DOBEFPdDlFeQ6Rb +vUyIIdRykGGuQcY+lyvIm/CPb4gSFS1IhjMVEJZY7dXyfAWl5LDmK5z9c1ika4KsxcMarqLoN4dW +I6ar1S8KVyKo5vbYS07IlaYp05CcLOerNWzrISQZUhkEvSpfbSHmA24Q6sYHkhalrbriPNwUr4wJ +CJPxi+Rt2GVfhCthUejqWK/mVMNhlT4U9icEeQrMh0B2kvQ66XNAPA+h2GuswlI2PLOMODpXPq8I +h8V4bzZgETNf+lNelaOJVrgs5J4py3vGVcdrTVfypDZeMVzJ3zKHsvRrkPeSy6uoE4e8yrglueW6 +yE2k3Sw3k6HVy2TKBem4Q8mI1q7sROHOKy6THUkIsihjCtJOllkWSptUskoy2kLU7yHO8kKbjHtd +ZZxlmGTicwbLlBR+ryMmj3WVZ+lzmYFwMslUws3kzapcnWRORZltnNJl0VnHy2SARbFZGHldpAMi +ek/uJc8+p7gczlYZrvp3LuhbDnllKjvU5zp5NRJlYiEfIWfLhqBrmVZ4g4UdMLfPOnnksWSr7nVk +5YhSNzRiBL+Vz24lytzdMmpZMzLX+GLtXk5oMxUP1Gv5e7R2Tl7M3zsGdIQMS4my5mVevdoRV51X +UWal7McbCLK9CocQVptkFBtBB01mWZCV0WutetfejhPsbnqZE5cr0Vhl0Fo74WqV0R/uZgS9zJ+p +1fKnbu2cvJu/9H/5J/nnn568Qfzi269+9Uz21Js33/z5qzf/zg3j79+++e4b3SEuX/Hrh28enr17 ++PorucVuJ9kOP/np4V//5cKeIhMj5ZmYIuErGz2ecynSM9hNhBWVJY27SdFzuXU3WetV2ZJsjFgw +q87cTkRuArhKZYKI3i9TWSZKFR4rvaw1kBBXhD12URC2soAok0Uvk9WIqINDSdp4I2xWg5c5Mcyb +Xbdgl5adOYRsFOF9edkGCq9cbQfv9WTiar256oM1ylZ1k+eFThQmw3ne3riC4W2Hs27Zr/ewoj+E +idRFulW4yqsdUeQPcKwg7HAVodc5VsBWI6NiH/UNkL849yrowii7UmujEexOraNJDDKYFXfyZmZd +pu1Wc1+2/XFaJX/g1szJa+0m/m7KxTjXFUi1WfYHOofmVEK2TMczc3pW9bPLH9sqO7ZOuEX2TvZo +WuGATcoqsXIBuktBxArht8ss36YkDBlTCtv1LHuN7Ad41jkYr5yFO2dZydwqwK2CsG9sdtsqW2uV +zU9W8iabz2GTXUAkCb0MO4C83CbMQRj/gfua7D6bCD2iXchn4QNBxBjZQ7Ztse1IiCVV3UeE6xwW +yDaiMaE3RZgDQapXETeEa8xxtcuEuMobHWTPg+2TN8tVRAfZROsKiei0P052FiwO7K1y3zTL/V/t +iHhf7MTynmmNnEaYNYvwuIAut8/PvY9LXXod2eORo6Q34gS7lV7lRBlh0f4OrZmCrl1zv5cT9DJ7 +oF7LH7m1c/Jiu7kWDtfffDJrC5AeZcuE4CF7vy7SRkwySjK48uRXocpckWGrmMHgJaKo1kZQHiWS +scyBoZb0YhbJqLfjBLubXubEcgUF/NDbEZE5yfD3uxlBL/NnarX8qVs7J+/Wek91K/beJ6/VIFMl +Qd7FlBGuyA6EjoBNN8vYiLwZhJWL8MpHC2XBShU2I0OEpbthYeh8kEkGRiuMN2GWi+R7tWA9yfTP +syyMUOFCzksjsCMg68+5V5JVQ74do/N7I4jGMnB3I4rwkrOs/gDBktx8tctEGqoFm4KwXWfvAXpD +kTkbyGvYukhRhbtOUoG2UxaZvqtf2agiEcMIwl1nw7iApcIdckDrm4iVncIrZYfdqgx/ryfPWNK6 +csuj+jJQRGPYQrIrnUoGItoXOivy+bFmU4BOkOHFx/MHHSReKSsucg7LHpkh38jYXg== + + + xRW7jczGWfYJGVXfR0PpPbTMMkbCWDn9qJDJB7mgBtYrWNWz9cS89Y2To49xDDPQVwATz1AKCgeg +rLKug2zPCJsDF65zsOUjH9YsDyjaawTzl01Kuks4/jbr/U9n6Mk2Dd2BkzTgNsWkm06FeChvncHB +ivICsu4g7Bo5WDrFJ8gKDj/UW+T1cxiaagS7o17YqNIRUfjB0JRIoVmWzXBLo+iV7dFavfb0ra3T +t/ReEM1Uewczek6LSukY25rARJwqerAI3jMoMv5b2lGKalk6Ho2KlVXTYWhL1kPAiPR7GkWvjFeL +sPKxnuyygF8NbTXK7p6N2p6ttdWe//Q9Ww/IKmHfiCJLzfTVjghEfcIKi9rLa1UlPIhuEDELneDM +CFlneq1cdVhbO41gd3tu002JUaYIxNzWzmIv1O5mBF3f/kytlj+1t3P6bo9La59iboKOOAt5tC+B +vUHRcvMS1IEEiKWbl8IqEphoWTvzEoRS2fu2Zl5ShUG4gJuXIKLO87ruzEtoa4PA5uYl8Erezc1L +geYL4ROjeYncEjzPzUvy5lcwXzfzEgjLsrcuhWVVKc6sS+Cusr2HZl0i6xOlY2ddIt8U4bFZl7Bh +SKetzbrUanTrEljmutb+1GERUWiruZmXwiJzf9sZl0AqVTi0G5eaJODmJaywGuu2My+B8aYofLqZ +l2QRbQusaGZdwqKS3WNnXJKll2b0nNmWZPnLvF3ctCQf40qjYDctgR9EHJBiliVpIsa8uWFJ+LYM +VNnZlUTMZmY8NyttlJBLsyrJzoA5O9qUyPu2EppNCV0HIdJNSnLvK7gAdialIHflknKTUpDpmgBE +du1LuC1n7WhSClBeS7coYfuca16bRSnURWfxaFHCTkWx1i1Kcl/ZlOWR3aR0trBO9i7G24R1Z1Jq +RLcGYTrUJDKwmYvCwtSDaTQpYbdaINx5nQCjJcxt3ogTRiNPJ5opqDXjxqJ2r9Gk1B6o1/L38HZO +X2zk1SIPrTuTUieaKQh8MW6p2YpE5kTY1LazKIGjItxnqDXrTXszThhsPJ1olqDejtmK+t0Gi1J7 +pFbJn7k1c/Jmf+sGpY/X7mWBL5VcyIxzr0aqLGUa6JobQTZugEqFEHS6gA2lZJZjqBTrQs08bjO8 +B9LRIinishTNPMmtWGrItuEOArP/w7iThJE0M76oGFyLwk7kqZfQCGqBh4BeeiVY1ouI8LWaX8EJ +26btN/s7iFgNc8ZDymYmHGejikBhBMbYJQ8Efbkq2gaXsFdrfRfMRH3emyfGgTKrfRObgAhBaofq +VGGKIsOvasWl52BZzDkAvphT6BTtOTghYh7rLeopGNpyit/TzdZGLeaSa21Bd+LotXs6Ra/0Z2v1 ++lt5W2fv+YOIOs3IDzk3523d+9KgopBzN2ca6ok2X7o3DbJpStn9YuZOk51aREBc6f400e5lH6aH +zVYCthWR79Peo0YZL/IOxYXOrHO3+dSgOYhY5GvGnGpQcXPBJHKvGrgbn6251bAndQuX+9WwdQVM +6eZZE3lBBj+m7lqDFUAmuw+hec6gjYk4WLpzTdaB3Jxr0OvAgrKacN9WZnsH97BRZZJbjS62qK6d +nY+Nkmdal+Zkg2trlTs3L1ug6LHuvWxUrqGGNC8bRE/ZjZbBzbaiQ0wK6H422cf0jdzRFrCPymg1 +VxvNDSm4g858bXhx9am4sw3q+bZgfru7DR04r87+3N9G9WbDO7rDbZkjxMute9yEiYrkYxtSc7kt +dJHU0H1uvBLv25xusKy22eNONzRXy5K71w12Siopze8mW5sIambgaY63ZYFGKDtk87wt4IyBTjXn +a2HWubnzvcEkRDHTnW9QLlfp78P5wnzE/Ybvuaxe7alVNuZl6w44GDL4Ms0t1ig7J9xQzxxsQ1uN +YvfcOeLACGqi89fagiJLA2+7Z6PsfHFDvfb8ra3T9zxzxy3SVUk6be+PgwGGc685v5YgG20J3UXm +hJ1Drtey/WdoqFHshjuXHEY4QUjuTUEtCctwQyPsfHK9Vnvy1tDpG/7/VogKMai5MkQYBW06Yzek +XoevRTvEzjrDSAf1W/oUmiztzaQI9yPFFU11sGXE61ASEYa+wuYinELnotxKDX5OUY0pqkev14PL +jWI8OErawBCNZ4UE1utXilZjV8qGxHvKlXOE2QZGUuxHZ695ogFF6FOwkaW5b8cDNehmg3ZgkYYV +dgtk7vAxwEzpFNVMZPHEOQ/1hPNUqHm9qU6ZO6PpVHkF3b5bW6uwgyWswz2d8txGko/Wq/nTt6bO +3vJx2eZz+Hnhv+Ec2Dl6YcfV8XVPL8z4Mzw4zdUbRBCCrWDv66WlmFe6GxdMQ2dZo8Q0zKlGXX1O +ubt3Sc4Z3d3bKDt3b6/nftyFKyCOlFj6pOpUDGUaHbzYxeZkY7TvoUd8vgtEYeT0f7Wnwgew5O71 +bTumO2MbYef57dXcq9ub6hS75c77y42VCnxrC/IxLWt+SyfsHMBDtfb0ranTt/wBfMDgV8IX6l5L +bFTXEps10LVETAsaVUYtEdxDRP2laYlQqEIVJuhaIiwOtBeOWmKz47mW2MxxrgDCDF3yUnZaInS/ +eVAlYSJbZTK7kuifRx3RaU1FhJk6w7/XdD96/OKW9zoirFhlxbO1eq3nXEc878tTO1JWi8VOR+xU +1+tolsGsarof/sgxlb2OSKtPXJehXqhq8+ttNcqorw1U0+t6W6779XuOOmJ/tl6vvVVr6/Q9LzuU +P8UUviaDpcDwDKfvqz21mNKzru4kzKpBYFXNkFkaxe3htHAO9bCjwzXX22oUu6czD6NuZkVobclG +JFwsD/d0ihvTzVXZ6rXnb22dvucP4l1esE7pnpWNgOI9pXZRG7ZCiNGigsMSackuNPNHpEoCFy+F +hn9ANzbHdcjkoC8KBvUlKNtUkUM6WLSkhWCFbVn0ZWmbc5DDAucjNmO1xRD2gAUHlQtTAZKpdjk0 +xmZrAk5lWxSBIy8bqevnWPTKsuWV3lUaetGv0lk2p6HiR7yV7Puqd8PTVUmBIxo6/FbUbgghSvRD +0+5EhZNNI9D5rQDamfIfNz8F4IqYDnM7pLDgCkYAW4W9WpRuvgB2nkqXY8Yiqor7zBtU2DKrfqxa +szRrGmyAwrcknkwOzxYt4LCnidQZaXSI0TXfRNv/yseqOpKrYgQoFKoOeToHTjS7JSt+BFesZTV4 +c6e62QCzhoZe6ZMCYD21U3XFG0XnSFQ8zlBPNsVQ09hWo9g99cpGjQZ/7W0tulUO91z65jk8W6vX +nr+1dfqeP4gUuCQHBMylS4GNCq86leE1GDzOlyCGiYR0NS/m4sCEqhl2VthSVsXRq0w4+3VQF+kP +FKWtSWMQNgu1D4iCam5w7QNqiOvGiysHXQKE7wUTtdcrm0MFN70DZ6VCF7ZRAiwnVHBC7QuZlSqv +NoosmyYBdmqJLmPSdwa/M3LLLJz2ikOso4hcDIYCY58+bPaHlT/0lnW213SK84ayo6q9EDsE7IWB +Fjhvaxu0J3AfPizEd33NzQYFkAsdlNljAIRtRL8n5/e8VrUHyVXKd1XEX2z9go3GJdFESIOmX6ls +pIhmDgvavFh35OTWleTa4NL1UtqsVggE8PDSxB5cawQ7pUEAyq7Og/FhV0MDUoekNa7N7MWm6Plc +P2EtmJIAsuFlaDp7tafK1lJXNXnktepYrbA5YnPQrneKLgfp6ALe2esV9aUObTVKHMx1nZpw1FU4 +DG3BKgSMfL+nUfTK9mytXnv+1tbpezaHm0xbercw37lVvdpTNzVjAqxCtxjsB4mejAw0JPEuRlGk +Q1DszlBP1uuSdm01it3TrzRqMQtXawv+Upg6+z2dolf6s/V67flbW6fv2XpABmZL2HJF+SMs8dWO +iq250Fw/u70EI8m9sBIB0Qi+4me6/3u1Fcnm4tBUo/gt9cpGhfhDn6G3BShFCf2O9lkZhT+XV+ov +5O2cvaK/POytlagvoLqjOVwH6grpV6F6Ikyqo4GSNcyiS42lU5T3wKQBE7lTCeriY3lbA8XuqVc2 +6mKCXW8LfgC4Hvo9jfLcntaerdVrz29tnb9n64EI9+6ieCZRXMx/1qiwr0EIByecMfNkuVFUA/g3 +zlvolOcmltDFP9QDDALewdZUo/gtXUQwqlktelvCOoGm7Lc0groI7MG8Un8hb+fsFX8Afb5hmLFT +0OO1A3Vjq8rMJeqobmxBOcFR5LBumCRidfu7A7sh6KtXwZHdwGEn2NkatHsRUSBtNbQhAFQIkiZk +I8d2o6PUoengbtSMyX00Bu6mGWTNa0d3U8gB7KTBu8FP43YC78abEbDU8N2wi9mNTjvndB8yIDT+ +oP61g3hDh4mquhikmjs1sKUNed0oz73bwe+HeobhHtpyit/T1SCjVu3F1pTciT7QfkunuCSoj9br +tZfypk7f8rJ6/jnw3vR6LY727FRFaTRwNeaUTJ6tY7AbRc0VBtUe6hmauzfVCHZHvbBRZRfPhNW2 +porZgfsty2Au7o/W6rWnb22dvmXjZjDdwtkHtV04hWEvGlUEqDQHRASKkFXU0hfMhzjPHv4RbGOF +zbasOQ/14mxAzdZSo/gdnSkpFSY2oLx6W5hQ6zbe0ykq1umTtVrt2VtLZ+/4g5gmGqwYa4hQ6hH6 +TlmMJkPHvmOhpEgvl4HfoeP0EEhHv9OTBxbQ4O+Qc7ayLB3/3igq3igAvldzbDuEbbOBO2ULo75j +VPJSyMMNBE+hUdURQ8GDhTbZusHg4SxXFcLh7eh9SpCdkmFg8CsbVaSZeaFPw2DwwPfQTd9g8I2i +4o/B4Hs9h7cvxZAGneJmBxecjBquCAp2FPxCNw8gAo6CBzInt4d1FDzcEGoncxQ83Aux5NRR8NAl +uvLhKHi42QmfaCh46hxxiR0Hj9ab8tFw8EAd0N7iMHiMAPlqw8FjI0HiHBOQDAgPRTzXAQiPjYrP +cD5lT+zAjhLHIAYEU7zaU0UFw9HFDXHOd94GLLwTfJIQv95rGcR9aKhR7IZ6YaO6YteaAnBqGdH3 +jaJX+oP1eu3hW1unL9kkfYeIA+a1Bg90dPh6ozaIO2Y/nSUDJQ0hH50KwxUcf70tCNqE/bR7GkWv +NPj6UM8g7kNbjbK7Z6O2Z2tttec/fc/WAw4Xx9wpq1uvO1VYGIEwDjwXAfZqJrza8emN4qyJMPZe +z5Huva1OsXs+nwZEPHUTGlJ6W7O9Wb+nUXS1t2dr9drze1tn7/m4xPs5cPE7sJgD4xtWrCHjG1as +QeN3WLGGjW9YsQaOb1ix5g/bYcUaPL5hxRo+vmHFGkB+hxVrCPmGFWsQ+YYVc4z8DirWQPINKtZg +8g0q1vxrO6hYg8E3qFhDyjeoWK8zQsWae669QoPLN6xYw8sPSLEGmG9IsY6Yd6xYg8yPWLEGmW9Y +MYfMN6hYw8yPSLEGmnegmKPmG07McfM7nJgD5xtMzJHzDSXm2PkdSMzB8w0j5uj5Bg== + + + ETP4/A4g1vDzDSDmAPqGD2sI+hEf1hD0DR/WIPTdje0g+h0+zFH0DR7WYPQNHtZw9Dt4WAPSN3hY +Q9I3fNj5Wjz1gRrkfIcPG6iG6Wrg9Yb7ahj3HT6sQeF7PUfL97Y6ZcBqDVTDdLW2Gu6r3XOHD2vP +NtRrz+9tnb3nyPzpSdrhwwaqwbocyu7Ar4Z3H+FhDRXfaxlufminUQa01kA1VFdvyoBf/YYDPKw9 +VavUnru1c/p+l9TL7kmEuU1YhNl7GhWWhKJSViJDKYjeMOtLDVyNRlH137l8rydcKq5hbKtR7J7N +cKBUWVFg5UNbtuUP9xyEgOHZvF5/fm/r7D3bevgUBfskZRO1uriqcaZgxb/aU4NG2cAWU4CYxGDN +UYVd7vaN4kYYU6ZavWBAl95Uo9gtn5vBzqhRg1WHthL29jTe0yh6pT9aq9aevjV1+pa9Lz9ev4Qn +cC6qc4jMaNJop8K2xeQVQJpjhwbAnIJ/mk2VdIpqXp6oo9VjSF3KQ1udYvdUju7UbVbob29LKGUD +o2n3dIre05+t1/Pn722dvmdjSGs1SQMbDxbKqz0VvWvosy0lSx0CBHPQc5C2TtH3AB6mLmM92Wlo +MO1tNYrd0/e0Rq2ZED5vCxa0OtxRP+tV/lxeZ3gfa+X0DT/LIgyni1AkMPWhRQUXvdpTAYqCug27 +KT2na7DEExHhYLBUOqWtpbwsYz15gMUBGdpWo9g93ezTqJokqzW1Mv5luKMSfNnbg3mt4Y20ndNX +7B35CQL8CTdT9Y1RmBa6+GpPBeQsanyzxqLLsBZ486mcUwB3iiprs0IwWrXq+NfWVKfYLd35a1TR +qwLlHG8KZlYTAeyORnluKq49WavXnr41dfqWP8ikhIUEfmIR/ZGV0RxLTlx1l4KPp24xHKBEVNWZ +yGnts76TyHpF7tfqZHXh9EacYLdy5VyJspBXOsG9maLhEv1eZYjUbg9UPKjCH9naOXux7kpdVAfe +ENDifsRGlN6aszo/4yKPsWHCRnWoUo11gjLWTRXYVgtwhKoagLbTCHY3vcyJmBxgSa0drJ9tG+5m +BHe96jO1Wv7U3s7pu/0Qy4/bLEQWqBv0Gr3aUyHfZQuVWeAIgqIyLypNaGY0pzgfyzHGsR7efktj +W41i93Q+ZtSikO6hrWpiRb9n7Yk1hmdr9drzt7ZO3/NziBMnfbkkNUJT3oZx9NWOCmMLPMJQ0NZl +VrMZ5evFzStGUIETLrR1G2rN6i0bGnKK31AvbNSFb3LoTdGOE+twR6folf5gvV57pdbW6Uv+EDIu +GGe2hDHBMSKduBioAc5aogVbPBtQKDl2gqpw8QpZ+sdqWGPM6tGaahS7oyt/RoVrhBjH1haSl4Y6 +3NIIemF7slbNH761dPKKn39C0gYzWzy1LBDHIDcqjE1J5S1pQ+2BGrwHj+UWc6foWzF/7jbWm2m+ +GJpygt3Rr5t9Qs5EgXpDQhENeh1u6BTvf32wXq89fGvr9CU/z9YKZE/U0FeGJb7aEasnJchmPmSs +z6r2XCTr7xQVLlbPxNfqiZSFpEJDW41it3Q7jFKlz5hLrbe1zBr40+/plOf2sPpsvZ49fm/q5CW9 +6z5bWNfj4Vqfy2cIaGQ0i29DMwP4tWLVOZhZXnQuwPk4lhmgrARWN0KZK2IvaupI5kIDV+xA5oLR +iHsYs8x9EQKWjmJG+sYKB4ODmDNyMBDVPGCYEbaVMTwOYYahdC61I5jhhCgl7gHMMDvPjmxiPl5C +FGOHLycC0PfgZbnZzJF27DLDI5fcscsZgAHqvh27XAjgWjt0uWyybollNuQyRWQaBwfgMky4W1lz +Ry4HQg7pUDUnIpEyedv22GWgZRbYoh26DFlsjR24fDbae4tjhdEZbGiELXeiWbCRd5Gj6GBkhHTH +EvaY5QI/QN46scizVSis3k4nDODhTjSMcW/HYMj9bgNauT+T12pPbe2cvdvj/pVPQnMse5QyCA5Q +hjjfwMk17WDJhbEisaGShT8jC07DJDOPzLJHJMP/ESzPHgHJEJ07yBgzG02MUGRZvxvs3o0YkSJu +wBcj6OgEgxxHytyBx/MecTx3qDFwwBU7liGNF+gfJzhjKNAdY7zYYzhyGEmTct7ji1dmqes0JExf +DFtKcPFqjYzQYkM38HPSPm2QYkAGmLVzcJNj/pW0djxxtSdxNDHm0RzDHkxcqi1swxKjX0YkMfPN +5j2OWFhICqF0GDGMwTl3EHEtNn7D4wUGtsN15RBizjhHD++m335tg+Ws5vxquOFONKgvcwwBI+Ro +YDDjU8ww5uZaB2IBDj6E3kwnDODdTjSMb2/HYMDtZgNYuD+REfszWzNnb+YvDgtaSmkPFO5Ex/bS +Mj2gfwHELycYYRE2S9hGiLDsonlspRF2AGEnOqbX22mwX7vZDhxsD+S0/sTWytl7+QtHRvwOIN1X +I9GxvFhbZBsO943I2lvyHhUMq1eoQyXsUHRTejNOGBG6nWhAXm/GkL7tVgMcuD2P12lv4W2cvpa/ +L3IxhXnbQ4E70dC76Mcwwn4TYw8HxC+3eGD9qS96LbgmqVV6O40wAHI70XC7vR2D9va7DQjg/kxe +qz21t3P6bv7SMPMk5vsc0L+N6IhdWRxbZB4bA/XC9FTouR6wv8LM1qUMRLg3eYp4a8cJIxC3Ew2v +29oxRG+72YD6bU/kddp7eCOnL3bJGQan98LA8xEu2KkO8kNcaVg9NBhAQNl9cV7XHi8Iv3MoSydW +pFfeBtxhI4zQvUZ0hF9rx0GA7W4jUrA/lFP7g3tL5y/42bWKj04W8cgTrIef/eL1uwuHjODXs9+9 +fNAH+eWb51/9z4c/a9tpPvzs1w/PLh1Ncvvi1VdfPrx9/vD63VD/sXt8+fbhjy8e/vTVr9/86Vt7 +vQhvkui2j92AZ57894cXv//Du0c7xKu++eYr6cj7t29ef2/dXz78+7snV8ZLSq+8ePj2A97x5s1L +f0cN78rvf8d/efH1uz9cHMs7PSPn7vXXdt3FM3P+x4s/Pvx00l/Ur7LOz8yYbygZW1XU9FJDnC6e +l6MI6Q87Nsdu5Q03jNLudjz3plHbY/2yX3+Jtrv6L3FqDk3JsiPMOHZ4WXHKFDSLGpZZzyRe/Ezi +dZdMJWmuXqQCXD0LOIgQL5G9G6ksQQgISIALXdVxWPjnqgTHIK3EZ4O2VFpSZ2u7IkeV2qNwtBV4 +HVSam0kN7AuVuwBI4kr3YkQWp4IsDFDqZVsuMJ9DEF7dVoUUGICSgbjZEQiEZAnBOLQQsOMJgUih +dhmAj8g0lpKilwoPQImm7UEIADKZhLi0N9M07xGW60ARKQR4TJDRlHsnzYdwCsieyheT/XhLC5FK +G98eMExoTxtTo0YlMOMblK/VAZAjdc1BL4zrppTE8UjBcmTNNLj1K1PlnrRI51AHdeEd9ZIFZGlG +abS+Zhs55AdH1AHOfEoaJkxjF3JNZM3hReUfOU5yEzoRD0FFAFmdsiYIZbUwR5FWk6KqMxC/sCyU +6ED+nO30CYa65mDWVaYwmOF40zBsPUsDeIfgaTezA6CDa+cZXcHUenCv1NUoq1LgZWlXrrSFBhwq +tprxmZmCkT+Lh9rjnozMAmVxYwckpew68WKjzQB0EorKcjO7IvD8BcfzBJMR5JYrjUElq8qF7lgX +KnLZ8p/NZgvj3AGCsUQd31irZpSrK4Z0hrlIYaUx2lEeHGw1JsI3t2r8VFkgBTEx66bSTuGyrLZ0 +SMn+sIDK2XWJdTRLI1pPScGtjKcAhTKJXgVDEExIGPFqCEdNRjjDHQd3djWNdoMlXere+IWraKUb +E8UrQi/OyFOywbGu4DGiBhHlv2YPaIPcjxQnMGwRaTdrSA0Ax3VRpySTnxBXaLACEpk8F5DCRdvG +tCQgTiP2Zqh4/Ly6ixo+YOAYZawKuhIePuSh25g2VdMUauJOfGFjx2wDESmEYY/yECUsrsrsHBas +EkulEuw9SSLSVsHAtzAkKKtYBosM8wgHqCnSoSDk0MOZiEMAEUn25HOB9xzNEHgIwho1q69zCg2O +SeTMcY4G0UditsqswoEu4WqWPHAAfbNICALU35nxalXrwCpRDYC2xg3qdYjmYiENKNIy6yIDgUZs +mFc2gNFnP8pKCNm7Y0ZIvXwLYrTLRBdYh8uqZujwhp9b58tWTYtwwEBiZHOSiQLzXkkKUKBlv2yq +7OmbBb1bQcTKYqhO6ApwViyzIjojrG+A48+enxFEWjMA9MMZZLPtXUIQnqkmH7YDwnAVs1dmeEnV +AkQ1BHVitai/iuO2sNv4i8HLvLBvFQi7RTDUjSdNrBq+TCc8HC7ZQUgF5z7gVoDjMBQftrrCk7Ca +hTggvSAMtY1xgbjIXFyz9jXtyIseDyc6ejHo9EYCDs5sbL1gLYJI22rOmk8Sl5VgBN4tAy69NP66 +IYWl/M5U5mCkNkuuiCrqhFkKLFWJhjQyEIwwkgVXbL2b+m1lu+fAJvoQctZ5VRh0lGxXLjZrwhWT +DsGOa8tDt8xVpucWOITcpXX/32AwSjpElueN4YsYw0J4Diz3mWMWQuwCEazvoIGD8fOsIy2rT0FQ +zGshhFgckt2aQi70qvjpKuuNmUr1kTfR+fAKotut+l7Sozo/mCm40Lq3ImEiXHLYECDCVaZ8zrnl +gJdtC45WGIVn9WgwV1QBe8iapGUnHe5NfZQAgHgKsHT78RGrxuYtRJpyZ182gIYDstFr4DS3jIX5 +oJcmS2hIsPBKcG0SAItH0iQKSyAwJjaAK3uoBFR8muSwGVb1Usw8XAopynWTDzO1cSU8N2E+YoG1 +Wki5zySbCTy3aoJAGF2jvHiwLYtrBtFamy5ugrsZDoutxgL7CW5boDQ5pj9bJiFkUjOxY66MfWqf +A4P3VjVPubSikaKQi4rW0thUntGics+yMrZFeG5y0GHWBFAI+g1JdSeKjnReLcNnnA0QUpNUIWmt +kC4XNffhnFlk/hfBVaPSVp77Z2YFfcRIEzQsbWkxaxVSoYJAmwXEJIwFrpo9NT0C3HBCFXPdmJGL +5xWu4JyaTYHML666D+p7VfUrY5bTnJUQ1xWZHd44y6LOU6zjWrrktnGbVY8MPmIkkCeU5tIMsbdy +s6S3wi/iY+fN32PhoWf4nLLiGhJyaoEwN9m76JRCPl7yFYyTiDFI01+j8hU9KrCqdfrGJPaAPktU +ghS/OkN6ghZJJrYaZH+V1SIanF02a6QeFYNoYEosXISGLbNm9dXVH9QO+tztFYhKALHQ9lQ1dBeE +hGkf4aTEbok5G0O7bAY4FVsP7WYgAFaueHWNCwkQV8us76ZsLFhvZ9Uh1lUTLcOhWrOe/8YuwuLb +ovMxA+tzc1zoBCr2iKJvWra6hNMHjcB7yULeEHLaaiG+FPsTuQ8YBG198M0MYiFP4RFGKkPDxQF2 +gO18TbbtMSfUwtMuoksmIBb4lEGMSLaGGHiuKcRFBiUw9h5xaGUu7TKmxFtXG1kQYA== + + + PWK/BE1yx3hTEKoHEwSVuRJzJycaUKlTkEHQxb3oyTfgxVDC2IsiO8KzmHDK0KxNFyC5V2q7avOT +yacbemOLS+W9QONSRE4FLA8QqmeiDDntt28QMc6AAc8xWa1AgggRmpsNgcH4XL0XkV8A/AwzFxol +xpUZpGVOU37pBAQF+47aiNXUP8YFYLOcKf8iaEslMP2sE9hEpVbHVBQq8cxF5gQefeLhX0aEPQIK +iWYrlaZXqHVMIG9TcQXEqvRjSzak5hCieg1FJSwZB9VCzAG2FGIzGAz6A4PhHnV5RtBEclatTo+Y +LeaDmasdi1PQcaVdRZgAmkpR1TXiJjAYSzUC4qYh3zVmhRwNEGbhlJ2zIWxxlECkXqSSADkDU0pG +m1ULWNeMrNdXs80q5H1dTCLHciIXouXF74U1BnkAlpfsluiKHMnFRNDZElLiss2B9/OmiQtBXKiY +bsRvIf34Bt0bV8ECg/CzvloCuC0OLXWrOHQlaJPI2ZcV36WJzXKX4zHUhCQtxeWyoFIhjqMJmrSU +my1PG4rGhRHnBo0Vm22xJHdEDy80RalHfAW0Q2SWbR1mo8YQIY6cdTgWAEKv6FVcBHEYab5j841H +BRNQioqa90uPjA6q53GSM594IDNTFjx7JgLwCPOWMf07guaKZr0pWXf2uXEPJyIbbF0V8Z81YboN +GcMxKapf4bj6xvA5iRCKmC3LquZtLMYpQdADpFSr8sso7WvuDMsHy1D/Yhsu9j4mdyqQnDzCgJIZ +TBWyO1kAIw+ohFvTRfKM4D+EPUL1861T4z2Q9ikp0kZ1HVgLN8XzMju8E1y1oeWy19rU1AVbinps +jYAYr+RhfY0Ik2jSVIKyw/AhdaadiNDNpYzETZoELuqU05ztHtAVMq1ACCfnUZ6Ep1WeLl+UAzD1 +Z1VliWH2PJhgCYp5QkZgzaeOiENm5092DsJSu40P1JyCsv6M/gIlMQh7AcdCHBLyYTKTACizH2m4 +wj+Z1/2VzHivd6h65aInOSEs0BYI78AjveiqsrMEGC2G3S9jjwHmmOhWsBzsA3zLWC1OFwkrNz1x +gM5FwEFLRNJ44RarprKu2hLvCKZCtznfgDEcBo8hZQ167gEPRcKFmyeTAcwFC5zUxAMTuLIWSw4a +9VyUba3Fd89+R8WbZuXvqBY5M/isUKAQYhrt9CbaV/TKoFKTiguJEXQR4bZkx5EnCiTIigr7XFLL +/xnNLIr1gMkIHDHzdiPdOboZWVVprEU+XTd/Is5Oj6YA218Zy7pppAsoFG4BClfLM5Ov5x7youZU +UNdsoTE0peIt0qawc0KKQKGW7ldS6gM1bcgvirZ4YBIzCFWN4uPMjDyCwZPt4QCjWTOJL2mxVDs0 +eHOOZc0LpIEDSPC5tPNf20rCxkIjIaxZ8JQGTHBacwArhIYUsvpBnptZTI21IRvuB5oRJUOeyafR +xnxWmPDq0q9bNWkvzV6spOAamOyWxfI+UhBNuhLcfqTDyyA8dCtPk9yUWRDEhvg87jxYChmCgJq5 +iq0HHjOIZYBEYoxiQMRyZYxwsBWPRme32MPCyZgZdgqD2KCQRN2YdUfGMZQM7ZoZmt9TLooErvUW +yrmbyVHc0ksyCqcwpPTNdy/4SYjBhasCus+iF6g7g+AHGEllcDOd+3SM8z3x9qmqHyLOs16p+aBn +k3BgUKO9VXqAVrdmZas4d3OjuQ52QebF2piN1gg1Mmx887U8W/IZBM2QKaMVWoAJOrNsk6sGm+c2 +beAUQEtJpQekguJK2IzBYBlTz+TY5GTvhhTQTPgyz2oewnxGTOPGcw41kJTMnkgyZ3HwhTBKf0HG +r6RR5HZ6FLUvEpBRBRH6xTLPkEjcAXY1Jm3Ckrf4+7xqKpdtLkUJoS+mmvTQ6KXO+nJwVmzmnGNg +A9bMBrCGGViwVHNODPdRK+wy6wpkGlDrEczCElUO0SWfVEkDKJB5vRCRWvQznHGMqYfrhDHHfjAV +ss5SY4zohsyEZ4TZATqcVg3Fp4kBaRaaWXrBuYeEps4F7wWJERyhmqmEwTAzU7ATdKdDZjnUYb4s +dso19zMYOGOybQkLmPdypwVEXyggIM48GaeoLYDoZn4s8HTg+yX2iyhgFJ4yoIn+N5mNILR78XwH +ZiHyPRemHqx6WpEx+VbNpLMxPEjkDNiL8EkkXj9Fp+oxhxEnQSZWYT4R5IEIEFVBQN7ODQYhz0BH +YtWjzWCHZDMIN8Kh5ARE4laI9FaHkN8M3y5cLUthlq5NTW0050fKM8wHtEWtoGJPVfM3krzOzMy8 +cBPfqklBhAhvdDolN5OAWJGYGcQE50iyDMXbpt4iYgHoDC2uz5IGdz88qNwr0DTTVc+MU9tIydmO ++RVG6G8WLLAMyRIWWvjgKhV2B6Yz437QHJfNHFHmQINItzCsGBFc3GSQd5eyDfMtQcUAetyPn91q +O0pnYa4JeCWFN1ZWI4wBvldYIElgmEgglGBp19npnbMaadkSk2eCl7FrcEdGR4PS7gjrhWYzgX6G +lb26wEB8+aK5tZkqa6tqhVSJLukUx0tSg9FDpJbFNN2qKaTskAAYUp0pw6OtR4EjTBarByZDBN/p +KTBYQDRrJk1IKSu8n4+X9NxHnMNa9ewsTfvNekYpmm5uQdhHu1DPQQlIgILpBYqCrqIC2c7F+ibw +g2uvrvBaBorF4VsAJCLmAASGGCQT2XDuMbwXGQGczrODimcwvClnD8Q78oA5u4jbEQgxx3YVob0g +BttGYJhF09DK+ZluqtxVFaYegA8dRpoU1Seo4Q6rylZ0wEntyGOMTQyh/ZWmn2ARhxu4X4Y9wWQL +dVsZgeIA8p+Y11RrIXsD+iJDytXgIwb3I/367MZLENGtaVawK5xBmIppVjst3CNuYPPT7MuiWyNC +/WnQK4uaz6wS3WpwNaHRBhNAJjZoHwBm0uLL7LNqo6bZCVGx2Cvss8o4duKd12GeG8A0g0W0OAFq +nfdEo2HCW0IB7sGiQ1BMgbOeOqwTtAMj7di9EoQdeYsIcD1MTE7A0W1pa72uNOzoRQOnCCQF2GdR +ZD3tj+vWPJygcXWDlsxRzoSmcJsxVAYEdDHO+ZmHyzJV8c1sPmgHcdnYjIjcRf6GTS/rhua6qhce +RLrZkCsw8PzqkiEbFtgz4OAwVwUNAQAlQUJe3RQCQt0YqFPocSoUgGllL8WPUymUfw96RGZmJdqM +02KA42LnIYJQWgK/zdyui/kPy6aONW5IQZ+ROBBcNnvnFxUmVsB5IAi2DCZZRT28Kc+s3RT6cmPz +cMVkQAik3mvWYIC4KCKNhE0N1rODHWC6h1gJvF/2qENAIph3oGjOmqjW6WXrF9EvC8t3yBpeRPc7 +k3jpR2HUbLT77LImE4nRrEvwSRPps8LzU7RPOcrQU937BugM0kPRPZQtHQ0YFv1Hq95NnhSXbfT3 ++CNSsIFnM2Z1Ls+0ckt/K1zIgiQxwdtZ3CCCTSB9IqMCQIAoqqEw69hOonKodzM3Jlx8adOsXfT6 +zH35zwaAmdXKka505bHfcPobYVrICcxN2gi67sEnmcTRam1FdTDksEpVE2hSZZJdpkQPaqTQDdOp +esb4GXHyyK9WwQM39TFwi3Un9BY1Kwisk8mO7qSZH5nM6Kra7KD1SLnf+RnMzXyrmeA91XwDD+Sm +IbkR4Gwp/cgOpW0GFKQOVDmHSwm6IxQ9kFIB4LqPYGIzy6IivqHlcaEvDr9Ayt5N4yFo7XPlhGqG +GcjwWU8igSBBS+yqPkpcNbckpciBs2lTFFiYmY1Xkd3zc2RyOJm9tac25R4AI4oaFSzvGPN6lGKg +ooQz/RDPl9qbVaTYRAhUtpyq1GGgOVSe8UKgGTto8xMnmEkFtaNugDykCmipxfQlQpGgGvIIdZdA +YXvUE3w5a1iLnBD2EQKWFoMbwmU9R78b4tYS4zPInBdzOonMRvvhmURzMz2aWlvGNFRNlICj0meN +J21xpHmBk4NnSiFngoWiy2a8z5FQNCQPLr7ZjgQnkV7HbBgl2vECa2VwXtrnavvoWh4ROoBB5tUy +H7PpyMAhzZqw0VOIhW7qa1C1H97ZlTmrTMdENBYl9GhHbq2joRSHyqykZQA1mHRpVoIZEC394Dra +D1e10iAlMPybbBo+exBCVgJ5Awm12wAJBkPbBGMFzV5H0yzEa3iZ4PaBebq9l8mckBPiYlNPsREE +GWAmkC9Bz3VWOBKxX/AzDO88fqxYngQembzpgvKrMlA9i1llFmZ7w5mumwIhSACvgBFyzi6GboZ7 +CLociHqDoZGZKIqm26IOJesuOD4A9jDaBmm1ZBbAVWshm/lWLQsFE6YOBlHgt+h6iSaUQ9/K6rDR +hTBrNidiV9Zu7mF2Eq7JVbN7VT2xUxc+a4APLZzouV9G+MxssMhgRlV037ra3cCHQYiucdEiyKNj +1PzHhMs8vxcEzd6xrBS+r9pOAbZTcGgl2AQ2XkiaVEURNknUCYxMfOhNnZncyhBdDKsZhgR2KmBA +mXlwAdwS8gnSWRIUFLuxDUQyOfQjkUEAH2bOMNmRs4bQZ6Z6QzbfHqJP/8OilgmG2fPE2aiIUBIi +02prR/tVdBNjYLGimXaTcanB4Cs4MAZ2EnjCsstSuCyQWStAGGk+YVhEtBnBO8Use1iPc+qouxlm +Ki7SrFkWaDXE0uZ2xqwIiRFxFGbaZdjOALqaVVUhKDEakwGBXkgS3DOFU+AhE8JjS0BAhR1PBk/4 +mmwZlgwZKIdZ1xlfjOdIw3eZ1AgEv1jFCoK3G952+MUIKANWLfhRqSAmRbSpRw/eM5ikCItc9TKa +JVADArJfRkQAiNWSclOYy9H8YiBA0idw0mXShCyAiVyXSDFCx+AvYk5qpv5bG0KBy1zfrapTBhoK +9QFF162MuCfACRAfeF+A9+44rYVaQw4GSMbnjZ8V9ZItDjcHlVv1oqguEyQgD6uCngg/Hi8TPrVo +uw3ymBm8L6piwmO7oJ8WQ3mUohtuItdyjSXovdJqAb1AZcJACK8gg7ZzomKdqy7f5zbSXGUABDPY +P9uuBEAwsW4QyLPipLrDGU9YFRaZtQ69ig0mCUJRuHKa25FOs6noM5b7Rq2GEhrtbFRYqqZxSJva +JlRoVJ0qm3VRT42DDTMruJJoXCiGYBCxuU+SIlfBRuhBwylKuDuYDaYLCHRIgOB23xmgSnle0GhQ +ms3KjmaqHcaU/Wa5HSq3qYcQmC9a693GDzuT68EMG4aLHe+unBHzMlB73wjqVlcGR5q2Km4mmFVp +605qSHs6Z9zuPWt+soYQXixeg0HLyaWWRV2P2RBm2O1n4FNydfEPqytxLmTH8YHIUB4QuQ8tsaUC +QKiQElZt2G0QvSkcvEAhAIYVhE3zFFELn4LRBEfbw9OqpvDcZojKw3TkVk6IhWaniFRQgeCcxuQo +tMENASIbj7Z9JdPez4Q/t6tdCLv6yRfMmCej/tPDz37z7u2L178//OR4vH7+/LtXvw== + + + fvPuGeru4q3sJBJICwQ9wCoKK8Yro1bGYYTZZahiWXfCrKg+CghMFw3LqYN3aCojXgLUuqogQYyr +xrwYLp/SKqNbQgtnyIrugxVxpa2d92QUDFTCzYx86nM0iooTnpi419t0ujP3hypN7ojCcWbFhcAM +xUOdcWQbVJvoIsfJqmD1anjcNFw3x8XVraCTmQfGziqKMZUJCcEoxCGfXDjrrgkq8TSkpKxWYwuS +CBq4AQpNEK6raThTVfAwnp7CJ5yRmHX+GcByMBSXc1c46ivxSJrll5AaeMSSjWNhvEe5aiqvng1d +SSSODwQMNj4HG1VGKOGqdU3tqgicI1PvrXoVEQHQ6deg8Q3ksJuhZ/TNoMkFnjRY9M2iGj2K25zB +qcBhsV01GAcxVzMXJ4GurEUOs6hZjwTEcmRLX9KkSDw5iDq1ga0JbCdTGkfkIwxbqOG7G5VV7g1J +2RcgcVAwsyUF0cMi1ZFFZ+yNa6/ZkrzwOGjLpuEx3uoPDczzF4FO96uYqIYpIjB7qeJsZEwrjQIA +RoHD5HmwdkdDGefZWCPEPhhBUIujSH9ExOc6e1pi0GCpwv42z6ud2Jm4/cOSxlYgCeegL6ZXzdbX +yXSRxUIVC5CBENIhTTMzByDG1Rw8wCtA+OQWvCnPU1P1pmD8hWhO2Ay3js7HqRuID2mVsKvmwHQW +6sGFQILzOQDydzlm4bALw4GRPfHojloKp5nurcgZDzmX8WX+YgDJQ52tvhohqHFZFXNF8zyajTH4 +Szu+CplysIpgpOYeCAIgAjgpIc3ajqYRyqoIuOeQKfaR/YlmCqTEgNRUZpVs4BMsaAcp1mezEcHp +JjIW1oe8uXrJ1qpSwgzoGs9xQYRAXdUVzZutUWVIyhJYjcAl85FWBZyTAIsMxISGsVnpqiVR4UCs +tTFRAU3abHjVNAk0LehlSfka03iiu4Flg/0esjxdOE4QwZAmGb3MidF0/tVCK3A6BOCPCzHYiotu +8SWASVEoa7X8/PlCcG0dCAj3dJXSiTWpyX6hm2Au6q7H7Pf5CHfE5gfDAgiPeFpY8AjByrPmRYMo +yMgu6A44cJOanbMeeOGiDoAuYzjhsoplNK/RlVYSx63FkXC243x2tMUqsgg41nnRtUDMIMascSus +8I0+4tVXldpwZ9fnIZJg4W20at/YQIsEFVgJxoyE2bToRbpimLJQvd9NowGRZ+3BJc53QGL0xIhC +lXQZT7TQrd3iqhcqRZVNEVBNAhLQwEVO7s0II1ZY23pBPxc9ah0TDx46grZkn1f4F5DosWqijKYv +YJgVGDgjHUnWTMiUPnEwQ0x60hU3XRipITEou9oUc7NVW9UAdKk7GjEs6NnIeFM9T6JJQbAqIRyQ +VJ2O6h6kfxp6DgmE58FB7foaW6tZ6y0K7quq+ZLCV4wWyUJKB9DRyMEkZpseNxyDyTHYV/RIupR1 +R3cMR3SgkUE0iDsBFJ3PycGLjBpW+KEDu3lQEadTUMcJCep/twgXXkegT1h7zDmpHB7Yq9dZM9lv +PNABFO3RWTkeKd2IVtQIHygtbJrKlJyC+VdUFVjUI2cxEKntphppDisb3wmYNuLuAA60pPTMjOyE +ZhKjcdxrzQZZCATkrSMFesFWe1ijUbPFq2LaAZ4S9LAElW33cvfnlO0JtOeBMlUnsyZTCxrqBRmX +cexAGRNkEM0bhjNeCJxbNdMS1T2NxcIa03gRHg9D7Qa6ZdWT1rn1K6P3syuyHsiisYSaxpCerpnr +hlkNoX9p/oPYLtoyXT1+UdHkf960Ema6cJokyHvR+bF4psWgsC/AHukPY+AgJ43az/hmgJtXHjqj +bnP4IaTJiglPhKcBvqK5eXgvBs9tfMSWMZHnR0Yu7MXySsBxTaS3B14kc0eFmTFsTB1HV9Si7m4Q +Aroj9qBJ3CvCzRdpKkQdopz6E1ZLXTarEYhXYQvjEdXQpzVFmkb2e/wcQl/g6QfOokW8wHyPk1g2 +iykAOgMnCwGdRjsVzoGh2ZjmCr9qtVRcsP3PmvSyAq8wQyrGe+FccRi/mU6hBbGtBrEAll/9dcDD +w7gLh2yLV+AkxgLpwfmgoifhAqXdiweXa16QzM0OlIIwfOTxXFsIHCxnkMG/mK/03AJa3H0eIYhQ +biuCFwUmT8vtKwShlLmYkY3HLFmQmoakw0bYodd6JBnPBDZTGKL1mLIiKfqGhJXHDavx1C8rUGig +6bkTmZbqkD2XQ7XME5ZStBnDOJzF81Ms6jEEfJ75QJLtUYXoBrUnrpzry2I5LaFqwRYGLKCau2c7 +hnUZ7G4VgEsemmq+caAS9KhUhT6TAHV5GSMG4NHPPB4IsUV65BfTiIBhFzvbi3N0YVqKfkDyRg/d +5uGhltKT27Idt4SsIs6Pb2zMGMHCEK6gEZJElkQzjNLLDYNvXLrGS586wJsgMsiInvdI5wrdigoM +yDSc04TQrINVmGBcNLiwxXlHt8sWS/mAIw36DAlqrI3Zcn212Nyo2pLGSEIKM2s6323dFG3HYxYY +CovAu0iQTLSIWjJrHDY4zz1LCEO6ooeew0SM7TuaasYawG4CMVnaeX+WsTpuijdm40wpt1n+DsTv +yoKLm+aAaPZtSEgRW/Cib0ZZKJrrj6HgVV0ARFPpqC3qMeaiD3bINlZasph2AAgx9bAk6+zMIKsG +h7yxDFhZs8JCElJ4YDhW89qgRqpLu4xgbRA1Osei6pO6yPgZBohU1AChV8GIIYwpET6swZ8KsvA8 +NKvlZUAIKkRxHTOsLDghNCaFlbA30ciKvSmuulxTGWzwcLMw7WZRlRcEGgpAYNgTCHC3gOCmMBAp +aKAtRgMjBBl2TxD8boodKwohfG47IdXFFakzqiYp13lVmVuEgEPwq2g5F3hVYD5yJUZD6sM6x2xD +W7XPgbFzpXmtQESkggfUkUDIVvFwULj64ZAquoL1sqIJAnCsXbXc2zTMMSsrAzmznrnCMOHZ+BxE +XI15S0xzucy2OUePa80KvwaQyC0pFNxg0YZjdTNJLupn9VrhMyd1UNebX8UzJBCox80BzVT6b1f9 +RDRStKA4FV2CoomgWCyM4UmGAFosi9Bi4VbuC3OhjGlTGKJTNU4mJp56ra5PomNnWhOHHQZYEpxh +sbg/aLYD+BiXt1gQhXl00zyEO9IqykArV2swp+H3rRayRCTRYnYMfzfKTyKFbdA5KJbREb6al4ah +2VF5IwBIKpZlndiLZzNGh4HHciwp5iUNa6FA3w4L3PSobUi19P7hxGYekVboHdZcQcxGOwhLMHRW +RekQcEzRGTvbprgZfma+o6rrzq9a6QJWFD0/8wQ4T/10KoB/VukefBiLHKpzXPwUSpldmEg8ATOr +F5N7bEmeyGo2AGrSLAXK5GeV12DHY4QyzICQlPOq4dBM5YD9i+mgSk9ZxTAuEC3fAw29aDs5gb61 +1NUbtE03PzzO82wHHsBbwFzwRAwGTeMEiL5jUOhtzJoWje/L4wbBMWFPWZLl0lVnGz+rA25uvl6t +tBXrEA0m1aNfcPOgFjp326mIHWxHQS1MYljooAwCII8oLpwl3KQAgOgtA6hmX4f3jwY5q0UCOAqa +cUADPGlUQIrpiTznD1aJYqlTmLcXW0wZc6mUqgJNq4Xr4SQjMA+T2Al1HS8zIvOmQx+oun0DD8HE +59XOB3KCym5VreOt1jareRhBN4yQboS5w7YasXoWXxhGAfip0eSrapk06jJ4aGtUDlGZjsLSEmul +tWQ9qIDh2nUnlkaNo6uLBedXgwQBgki2hpsVvazZsPFIzF4AIiBxDP9CJDFPWs6GDwSIu5obhNMR +SYoyTXSaT2aLmpI1XqlqxxClSkNjg7yQiMWHIaKgDAJc2DgClQwbKfXgGWKee1+eWzSv8UZjH1GN +8AjiM3MWblGxK2impVUyMQQ+HyZMRbaxSG9Vsl1vs/VK24kj9DAfa1IjkkeKMeoIk7cwYVRQY1Q1 +J5feLqjVpdqGzssA6YAJHXorCBQBqwVR+2X0LYMIDywDymb2dWJc4qIxJMzslrqTcIGdC5m8NL5w +1Twe2F2ZUYEdy+PwlqKqrL6apRADVRWczZUrUGBo1MA4JGKBqcLB0fpYdTMDRlU3OfMIkFL5FIvC +YGnV2Jo7bNE9OSyaRz1Sc9SA1Do2U9RNrCPuDlRAEC13Ov1K3AYNiKSuWCPo+wU3gWQNHMACBD8H +GI4iDNYZM+Q5RZlCscSMrR5cKFDpKDoRH1RVDcNztoAbgr1XCyZWDZqOnlWjhJlxgld6JHHHV9ce +TKxqBPgZnalQ2SgEIfkag2yXOiBuEO0V7B3p9VI1etMjdKh+d0oYYgs6cdEc6UXT/MDByjcicDl5 +BA6sG+xU+LIizcamqkCXbIkHVYRJFr9GO2epHeVj4d6rZYiAXqQJHCHZb5ppSeUT2kL9aOdUNCg/ +hLXfwdJIWuoV1uH5csBUpKZTGqAC1lxNl5U3jXJG5Cd3ZcKomHhjHsH1QeH+WP7Q4/iswapp6v2g +iQ3ZYe3wsaAwKYZmUbhGmpPVRC0qacxMoMbDqng4vZJZXfPQ/whvKerx1lWcDEhJf7oL2DyDgM9l +rkimrwKr27JFjZzKRjefUfD6L4+kcP7ghv76yahPsu1+XJ7d0/Pcsp7+PWbdxUoNpbakuwuPpIot +5y4Mvjjkaky5Gzd1L3rKXRw6ivnvGXczzxHJY8Jd6NKYwZ5vFxqp3Lel24UOVfVIwZZtd2FMy9qS +7eIzHtVz7eLzqhl6W6pdXhNSy7SLdkvZWqLdhTHruzS7QChaSj86FGFnhfVck+wmQ24NOXaBmaYI +bCl2ESgJg4pn2F0NEbVLsDsSmV93jZa81dPrrlHNt7vsumtUJH9LrotM7v8fe++260uSnPc9Qb/D +vjFgGxiq8px5KbVlWHZLFgRLlmAYBN1sSTTYMwJFmfDbe32HyMxaq4eSwC3AF7ogp1fsqvrXMTMy +4otfcBEVbN3q7PcLrcskWx5B1q1W+Bis2zyN3lxdSCrFfjVWN1hnm6qLiI0++Auqi6hFLuMwddmb +Z66D1GUyvpQ3Ube5OGQDdVuR1m7zdGno7Y3TbcWchaDp4jh5HpZus4jshdJFSxyRC0TShf6xMIVn +kC5WZkIpXBxdpj9LPxhdFgyNA9HtMyRMF0MXHn+xYIlz5xjSnAZBF3OwCP4XQJdTda+Hn8vKrUAV +4xOL+q4XPTcqlozPRZHYPOxc/unC3B2dh3ervKfJuegIoxnU4NxRGSK6sbnDkYqg5qLXAWbKgOYi +yY6CrJuZu9xYI5C5KzFTEsBc/MlZ4AKjYZdVg5a7kuYXw3LhPmF1crNyZ1ceMlC5+IKx6gxSLs67 +at8NyoU4C/GU4OSyJBafSnByOcMR4nYThznt1bE5uZz1TLwlJ9cisvLi5FJDho/cnFwqyJKkkFpP +wkD94rzhVV1r0+Dk4r4/1oY+yoAzv3xRcpe77AQlV5+x2lCxAoUzMoJbNyZXxrk2zQ== + + + Fgaqwfumaz0a3G5MLt8Vyq2NyaW3QkHWtRsjjzcmd5nuHJRcsBuSPgmKUKHfb1pwbUbuyvqlQOR6 +ARSA3DWtn7r4uLDhYwo8LqIKqN0OOi5Oo5WbjYuMO2MlQuPi1X90UOpeIZajoPWAcReq2lraXFy+ +PDWouJgrseK7mLjgk7q9D8OzbcnBCiJuO3S2PQI16/6ChwtmAX40cLhNir8bhtsU9goULup78StB +wsXf/JWLpIcEBcTCwcHt0eTIuQg4C2XcENzuRj3BwO1ODAYCF/FuvDI3AZe1tH0EABd6JL/2mtWS +0ng3/ra6lCfot+CcUd9n+K34d+XFvq3GiwT7trpKJdC3+Bsol5t8u49j8C0THJA9C3xbq4rhb+5t +8eAY2FtEoWvpQb2FD9We/qLeckW0SkBvc9dzD+btZ9cswpESAWNynuWNvEVRBEJTJt6CFtHEtyXw +trm74M27JRzimRt321yuFLRb7JMpsj2Fs1hpqD2kWLf4nc5O7oLYtqx1wQW6JRrhouFW03EDc4s8 +NSJPF+UWdeZl1A25RcU248dm3EZnsRtxC4AnXikTbZubtZ4/KZS7+bZAGJdDt23Z2UvDbfE3S5gv +tm11fjnQtvw+UdQtsu3+8wLb1qkkXIBtPxZKKnw1rKW5guDG2iK3DbpnYG2bawiCagsvFHf9htrC +jel1I20xkjB5YaQt/rmJg7uJtjgV8uQMtEWiDAXAwbNtlbG8m2YLE78o42zxN+560GwxfEDuccNs +4XARDmqWLcR4CLMEyxZYlSao+p4ckHPkICuSLbSJCEwEyJb0y1JfHFsqGT5uUmBsq4MBQbEFeBaD +8w2xBVLxQthW55SDYAsSJT/kC2Bb2E8kb34twZMfr0fga/F3WuVFr81L/LaA12YF/wJdmwkNf4Fr +i1sHm1tbmL7KG1tbqAzNL2otUmZZRU+sKAaFWecl1U8HLHy9kLVIQeRDsYUig6u6ANZCUkCk5wtY ++/G+4lEbWIs5Tk/IUz2q8eubVovSgjYOrBau/zMOq/aR/PyFqgVqbYxDqsXNuTi1D4e5m1KLiQm1 +mEGpheSxqB2hatLYjv6FqAVqFvPCRtQiLSGKrAi1S1ihF6AWmbNnbEAtymIOnTZbhndPqUhhJtFP +KSjgNiUfNO1SB9QXmhZZYxTyBJkWFW1tHTBt/H1zacMWWNqltbyJs+B/Yo19QWlRUYlGyrEFnf+6 +kbT774tIG7YA0qLeB0fdPFq/ZjeOdrFcvG4aLcrn4aIEjPbhEliwjK1Z3LqioNFC3kGYRdBoH2rF +yptGi6+TIpGg0f6OaSWsRQNH+7BiVizgPeCg/LOXi0YLrwp/B6qt6zO/WbQgGwIkZBTtx8vCMXCj +aKlyLG8SLWbpJ20QLXA2E/HLANFihGAI5AbRsnv6nAdE+4D+jMh8kGixKsbAeINoRdFKh0P7mB8X +GFoEWcp8UWgRMkZUKSC0kMk8rQSDFuPOM/ILQYsZpaOu1ARaQAVYNhQFMwgVlfLiz+amod/8WVY2 +q3iZmXb8PcXd36kmHKa0seGzyCkLJGTNZlNo50LPwg/rKsIlt4l9l2bd4FmIDBGEubmzYQvsLKQh +c6ZNneUNIXrj6MQhMMK7EsxZSAEwBgZyFv/O7hAXcRa2yd47krQU13EHbxYZ9txetFnk2cmUNWy2 +LMNNzZoFw9aVy7uKr1oXEqRZjGxcRBgh24pS9TdnFg474nVhQ/yODDpTZuPvGzK7bWbMojnvwySu +3qPPLms4tAgIm8p1IWbVEGP0jZhN1cVUGzELKYJwWIcwm4qzuJswi62EG7WYB98LAx43YJbWdFFi +YRBuNPiyiRWBbbz5spA+sBT72rOL5r/5srTMXN58WRyP8sXNlxUsdJXDl5UWpnwCzBIuXpzAYIa7 +ZOclAjBLdOpI8w2YpVXIUQNm8R/MaW7ALP+D6aWbMCuwbJmHMMurQ3RmE2b5T8lI3g2xytPVc0GY +ZfaJL0YQZvloCEm7CbNIECkVZcIs7tNTZzmEWT15Jr4uwizzYowUBmGWbFNUlQdiliB6hi5vxCx+ +AGUvmzCL81F+LAizPCTDrzdhlsImRhmDMEscfnbfYskss4lfL8KsJFH9AGZpYOeQAMzCIi7RTZgl +nJX5yyDMIlapuG8QZhn4U4bxIswyM6YPyYRZxniW7xOr11YTZOcFmAVzQRpk8WXBQCQwO/CyaFSl +VmkXXna1qC41X5ZbjUOXxWGW054bLouQDR9ssGUZmFJRhdmyuA4qkV5s2bX8JQRadiXx/DZZFsmB +VN9cWcQJ1T7MWNlZhBvbVFkYsN58QWVnjqZpZsrCICqgkbLKXpQ3URYl2iofNVCW4TNk7TdQlvn8 +NsYbKMtLzk8/QFk+On6FAZQFBxNxyZsnu1yLaJwsYlUM/psmi79rv1mysFBWYpQsDvAoukaSLGGb +H9/TDZJNzLqntEmyipM7ycACAsx+wiheJFkOYoQxB0mWN73qVRGnATcKo/qNkmVAfaixIVGyNCDa +FihZGkyg3ShZ5WBa3ihZpUnm2ChZ5V/WfKFkccqUhwVKluU2rK+NRo8oN8X3cbNk2eIAGoJgyWJo +57dmlizvCWvlLpYsjYifmyXLzDgi0MGShYFJhJslC2MQaMmSpQFxlWDJ0sC2ZBdLlpJHamoMk2VH +EHz9AZPF8EHFwU2TlQwyz02T5VaYvYImm7JzFjdNFkamF4Imu8WSoskmwntGe9FkYaQvETRZGhDG +C5osDWwOc9FkMWqTkmuYrIj+KwVNlq29MWDdPFkYWSYbQNlEamiZGyhLA6u4L6CsjEhWGCjL47Dg +0EBZGMhyv4Gy7ISAbHsAZVUskVcAZdkHlO/wBZRVbQzQrAbKol0NJ+0gykL5TGHrTZSlHNoYaRJl +UzXa10RZ/s13+kLK0giJQCBlparOyhCRw8VfozbpRspKRq3vmgINNv5ZqgUkUXYrpG+iLN26ljXI +SeAJEj+dmSDKQkT/pE9AWRgTiyGDKAuLp6gnesDXk2fcSNl02hcYKctjsWdEIGUhiqfK8oWUxTXK +zwqkLOdjJWhNaIN7Mz4RZal0YnlZEGWxnwragiiLGyGywU2UhYTdVHcTZfFi8aMIoGxq7hj5Asqy +XIaKkADKsguXUrMGytIXByDpBsqmyHhvoKwsByf71YXfzj3G0kdK8Y2TFSQhb5osxlZKo02T1YNf +6YWTpRG+WOBkcWgKmIMnCwNnpZsnyzT5HBsny78xSwVPVoa+XjxZ/BjSyIGT5fcggCT9KMwMRpFt +uRryayhRCZws85Kpb04sRqHZ5gsmi/HMmUXaerTWFEq2Y4B55oskC9tj5uvUJsSUiCMLde58UWTZ +ie7jtgVEtrs20JvgTwwJN0K2u6VrEGSBjXoUFEaMCK1iMT1c/FjCWFcNE3u9tr7psfH3BY/dJrNj +p+fcoMKClcoinYscO5qixnubIkBIgGPj74sbu03Gxn6cO3WOpsbOR9CqCxobtNxgxs5HQ1sgY+fj +hlEXMRb7mPzK2My0gCR4sfPRq3vjYodb4AQtlrkxhahIiwVNgNy8CxZLiGiZmxUbUNFAxSIA/TEQ +3KBYmPApBSgWfyMXGpzYIXLrTYkdlnoFJHa4e0kwYhmkzv2FiO32EAIRi89tskRcHtyIbgEXITaw +UQGIRcMbZDODD9uzkvcXHpamkjcdFrsQSWg4LKA/zIAeOCyIWGVsNCySmUg5iwwLGBb7kdVXfovF +PsGFRWKWchVjYYfXhDcVlu1MWWEqKGzXGieQsN3Qv5sIyxOpmwfLNtOHBtsZ9qovGCyLu/AmmgXb +TewMFOw+xAHBduf3ggM7nDR59kcsCiyoFAhFAAKLMSldyNcZbTIuBCx0XFydxDZLy6UAwJJ0RbTr +4b+SWIEaMqWS8GfnPRL9dVqvcNNfp0GzAX+F2p3VS2a/AmWLMr2L/LoY2i0b/IrVJhs8uCA4/r6w +r9tk6iu4Ll1kv2HlGNcZN/N1GQoTyFesw/i5BvKVeIOmZlEb+QqjFMWKWFHXweDRiNKVrqn8Ir4S +iDQUb5Q/AbkVtaRGvnILyk0v5CumMI7agXyFQ1k273UWPfEb94plEir9g/bKs3m0kSp+4SdMI1p3 +3QBcBVxp4F7lJgiSqzZdyZ1ib9yrXYWyca8wcDQL3CsNLF++cK/0s3jixr0Sn4ChJ3ivX1yOH3/4 +L8p7ZQgNDJ+b90ojoozBe1VYreQNeGW0jHT3i/jKoAiEJ0F8JeaBBxfxdVW9CzfwFRfM1XkAX/dC +MICvCHuxv+cNfFXrQzksJL7SgHOuO6DX5QjUO54nSkUAXxVR620DX1nTR1L7BXxlYOlxMkuyoi4B +eRBfGb9gtvpCvm7H0MhXvn8WCqgunq4sMvQX8vU2MuaeHAEP5CuRDk1pmo18pdAcIpZAvibCdnPe +yFdDK8oL+UqFIPUARr6KCdbKRr7iEXKRcyNfUZ6BJWQQX1FWRGSyqlmXm2rcvFdokgyVptcMnxSj +QOBeGTuq6vK3ca+MdnQ1NBZ/4HGfzsC90tBUmXdqX2isfeNeeRxEOAP3yl/L80V7ZYyOvZFNe+Vy +sLL+gvV8jDCRNnhgrwjDuE8zq4PAbMIaMVCvLJ3I9UV6RdEQobEGvY4pbltwXoeLtG7MK2xFFYlU +tQ/XiwbkdfhruCGv0KUtM10hhBQtMwivoyuScwNeR3O1vfmuY6gI1XRXhFjIKr/grujXgDE14K59 +ubul2a7dsbYb7QrmEIJGQXbtiuAF15WMotFeWFc2D0FmSlRXHAFvWEBd2Q95jBfTtbv6MspY0cMi +q3KdNWs4c6y3b6Ir+w/XsoGuLLTOefNcwYqCk3fjXOHyZp0Tk2XoElh0GYS5VlcB3ixXrB3dvJ4O +Zp0bAMuQP/6GC36DXNnQfOTNcWWvnFw2xhUAUihXboor6h/pchvi2pq2CYYrlC1YG98IV9jgygfC +FYqYJvQqV5NQzJjWtqvHW1VCIgCurUoOe+3DCqIb34p6cJa8m1kRTnjgW1FLgvnzprcCNIHfCXhr +m7snLcd8VMGQrHuxW2HDpxPo1ubpJcitOI9iQlzkaiEDR6jN4FYkFMdR94EIUCSe3ZgWXOlyrQDA +pVjcsJzezNbpRvI3snV5dRPI1uU+PUFshaaXiLcL2ArBKIsYzWtlCc1aG9cKfTICcBetVTLmzWpd +DmMHqhV/x68EqZWBebjaQWqNEHqAWlHXAw7CzWlFjR7Xnsa0LmP8gtK6HM+9Ia3ICejNiICyK7ZD +rCqaUx4vSCuNxApbPpWI0cx1Q1oZzoavekNa2eAaob+AtGJiNxyQjNYU7QkuRus5khmtMBBBE4xW +qvcRlLgZrfBi4oVQmgoOOHtnm9Hq1Ox6MVrpebH1gxmtzEBi1glG6xeHLYJV34/Rutyy5YVoRdSV +Qv8gtCLqGsULXM9gSk8mtm45yyKlzNBWDBcwqBDUdFbsxgTKDWdlUaK8aqJZV/BVgw== + + + uKpw2YVq1WsL348lh7EZujZNr01YGH/yOheYlW448/UBZuVih6nlALMyhOcavo1XZRiPtZHmsvK8 +UCu9uax0cEne+rxjr9LZq80xK2Lm+LaxrLSwE+uNZeUOrIUxlpUXjcnEWNb9941lZTiX1frGsqoy +d9aNZWX+itUFF5aVwW82iBshW3uk7AwuKz3fLMDqqSmE55TTxrIi9s6iI1NZ+e9FCNhNZeUZ4c4F +lTVFH4GgslK8j0H0prLSyI/aVFYaOKSYysrBDLUDN5WV3h7OO6isMLA6NqisMFBtflNZuajk2C8q +K5UNSyEj/TpGh6mE0KaycpGJuxZYVrzXEO0HlVW5xVJfVFbyJIA0CCqrEtypbyorYvMcU24qK4Ee +TdBVjYVg7M0DZVVEX+PVprJSxYBAUVBZaSiisCKAxb2qAjenoh2aKN5rU1nJpUsK5g0h3pJu0E1l +heABob6AsjLXNg+TFToYBi1uJit4WkxP763gORC4YCgr0h58P24oK4xsziooK2BAdAcCyor0DCNE +N5SV7DEsOQPKCgM9toCy0gCp9A1lJaCH9fyGsorY83E3A8rK3VjrckFZU7ObFlBW1LVyWRFQVjXv +BkP4QFmZtmK9iaGsPOkqX4BQVuDbCAq4mKyw6bfMZE0k1dS6maw0IG5yM1lhJHYsmKzcitdvJisP +nMSJ30xW5P/EqTCTFU+W+Kpgsm7DzWQ9RjNZcXAGJIK2mqgvzvPFZEXGlE7X3iprARNI1v33RWQN +WwBZEyFdkCIYyLpfxhvIyswn6rIDyMpSYSSnA8jKNJYJ+Ke7O4xL7pm+YCSxsCoJICuTUfp71znw +Ra+6+U0lyI94EEQ04F+xfrx5rMRbNfmQyh6XYL0FkJUhnHnzWIkEfLIkNUOfhqrig8fKj8nJ46vD +RJVrYB4r/u5I4AWPFQZ6OjePFUYG6oPHSoObkZLHSsOj49TzrWSlSU1kZXaVIqcgskKvxpK4F5EV +j7mbs04gJiv4h/qBEshK+RaBIReQlTqBLAi6vmisn5XNNZAVbx07P72IrLCSD7yJrLTgkWwkKy0U +tN1IVh6Prc4DyUrFHKtSA8kKC+NWF5KVDiazn0aykmA1qD4KckgyKfJism7bZrJyMqIuM5isvFez +fIKywqpXylBWGLjY31BWbkLNzA1lpZVPKKCswn8NY1qF68wa8V5QVoroHrOWumbOrqFiQ1nJKFA6 +/4KyMmDL+uSAsrIGklo141b51vO6LygrFy3p2Fb0QgsE4DbcRNZjNGgHLSxEDTGP9YuP/V3d+I87 +UYWZODhWVZWnTWOFt84VVsBYEcnt9c1iRZCI5bVGsXapqzeJdaqE/QVi/bANAlONVIVsAsHCALFi +1YwGPTeHFeu4fu8yoE7cEFbrPV8MVtQCokjACFa01xCHRARWxCtbqi8AKyTXqLA3fxWhL9TMBt0U +WFnIP278KmyTSFbRVxGke+Zmr0JVj2KZG70KdTYKLAK9ir8XQvwmr+JvlPfe5FXCaz8+hCCvQnsO +BcM+NYhsuRo5KDEmQ+AWC7sKdXXB1+7SLlDpFm7QBV2F8oZ4aQ2oZWl8D+Rq6WyJffFW4UFkLBeM +W2Xvtads2iqodvWZb9hqKdIDbNYqtOCNSFaXRMCAAqIXaRVGSEYDtFpIuM+Hs1oQUSvljVktS0pS +UlaRCSVT0y8KUs1skXAxVqvZcoFYZQxsjU1YxYKd69oLsIroBHkuEat6TC0wXrVbZHXTVWGjzshw +VeyzlJlUpPQxf+BCqzZLnIKs2tx+LsCqLaaaA1aF6oSBdINVIYnAe2qsKpzDkV5QVQRCmeAyU3UY +MRNI1cFCvxdQFQnwLFoqearDaJ/AqWIXIAhumiqULsx/GaaK2Rz8ZbNUIcNincKFUsXlYZIOkiou +nxlUhycRPkSo9eaoIvAG3WJgVJmtFjmR2bquQv2bodrN8w+EapQIB0G1u/7/Bqiy4UFZm5+6iz6N +Ty0sTU4vemo18yrgqYB8Ij1mdmorGx+50akESeS6yanNbYUCnNqsUry5qbAVAVCpqiVVoudNTW1F +oPmbmlotsA9oKrwodk1z8gzVT+zpdyFTKToYZRNTQerAh2NgKu4AlJQ3LxW2Z/WNSwV+cUp8Q1pq +YeojvWCpgVIJVmph+XUOVCr+zLiqi5SKu/FIOERQasGrJ5IJE/yFlfnlhUlF1Q/rvlRYUbKmj4Ck +oqaIXNeLkcoagNw2IlXkq7UJqchT9vHio+auIsvAo+JvQEOCjoq/n7pecNSMPMjTDhsVZCF1mB5s +Clv5od9kVALSbQMYFQIO5PgCjIqXNQtwurmoDWij52BRMTfCKQwqKuJDj1iqG4q6WDOeDhO1suLy +IFExbuk1OkTUJtzNJqImT5kGouJVqOmFQ8UbBHcjaKjQTSJ9ETRUzIq83AuGCkoC9A/BQkUAUSlK +TDTIsufxiYQK9Uw7IFSs2fUjJL+w9WbJbwzqx4sF2MSmoFowuiGo0PXW8magIvxQ6kGgYuooB4CK +DGfqb/4pos9rHvwpXlW2DTD99GPir6qIPPDTIucl2KfZM3OgT1nWi7foIp9CXNHH5p5iAUESXmBP +UQr0pE/UUwDg64aeIlH2yKXC0MmlC9WyF/NUUgU2ZpckFjFEt1qWcuRhqascyg09RTRdtGhTT2EQ +Gt5wni9+7vd0ojFsDq9PA3oKVQAUV8E8DXRSIE+Ru5qilG7iKVbikEEG8BQlzxCKBO+UxIG6XrhT +jELwFUw7bSY1BuwUf4/5Qp02Z7iDdIrsIOLuATolPQQy3otz2ppoIxEoBiIJ3kYATAH8cH5qU05n +2hlQ2rBY5h1Q1SLQNFiN34hT2HAjg3C6jNk34BRkSP3rxpsiko1ZL+imqIJhYMvbIHGGzNLNNp1T +bT0DbRpgz2CWjql0xQ02RXgN/kXY+pQQNLCm8fdNNQ1bQE2HZ9fAlY6uReTNNIXCski+RdtMCq0G +0XT/fQFNwxY8UzJYV90402GEwk0zhcSUJBPDTAE0Q6A3YKYEnOXxYpkO96INlOmw1iXApXi1Sx4v +kClgoMafUug1TfMOjCmUbkHtDIop4mtF8ULGIvh3ORRTxhHTi2E6DZkJhOl0q50gmLqx7c0vZcyy +1cCXMscpchLnOuVA6w0vDWpPsEvndDOYQJdOf3wvculkNlL6LRclscQlwKX4OytcvLmltKW5saVg +vUK0ENRS1KfAB7uhpet0DGNlF1GwIwWzlFUe+UUsBR4IUaAAluKdk27evNJo/fvClc4AMAatdMVq +JWClLLtq880qNYl2k0pxPqsfTimKTliJd2NKERYkqjrzPqksISCl+wgXonRGDtGE0ukUS/BI49O+ ++aSQPYp+KjzpTLpxGzs6qglkN520Byo0jMi0EL9pNinVw7O+0aTDTak3mZRcjF4OmHQ8p/40pL3j +ORWoQqs97uwRVNIPg+oybyhpd7R3M0n7E4WTLrvdhotIemwCknYDWjYQc2SV97x4pJSs1G+bRoqy +ksC40amorn56sUjrispgo0ipT+/RcUnK8mjxtHOGyO6kogigjj2DvGeqRnXi+wUhbdYLbAYpklqt +bQLpCAruDSBF/hAy8uCPcjXkjVAbSgKiqWihokA5UDHojuW1NUvFtNmjNaunxQs9WrG4DpApbjQM +qok2ebRazneDR9HwTmftZFvkegI7+tk5+fE7Oj7/lTr6t1JH2X+JIgOMpB9jrCSzpbk7Lal2Pbkt +09J2fEWxkmC8nIaQBEObNae7uxOi+8Txp1ZXwOoK0bu6loRaiySXh8FtaGo9Iq075zAM3ljvZfwT +i0qfQwsQmBk0OiyHYKHGSyzrR7gAtapa9DXb2fNBwpaYcKxMuKI0uTyNKYtwzstBvrjKlqbOZIKl +Q8owVh+J7zRGFeigyOtCLS58Qi0f3VYgs7AVd4Fw4KG2zyrebEmODjrZnib3x5oVyEnNJZSwsP6d +mVZCs2Ap6exJiBytrYs07L4VWJPigmGhjBMR6Blg/uae0mzyimUv27Yvni3W8wy0Pxo12VA28u+9 +Kp/K1nCsnGchU1IH3Y+5uLFdOJmM6CcXxUvsMd65gMQ8wrKGKn4zuhKTNcr+O1S+A+UTCyW16am2 +DvfXYdIFFoQu+XfV3zUgizRONdRubJXT3VwLlt6i4Q8iy7T0cprDC9AGCS21VHjkasP0iAOauvPq +2jNyYlxeJG33sBMGFLGZHbLReJ3dqLpy7XgJ6jRUCj0HCEPlY0LoGl0HhFLD9EN8wXTJGG4hH7cS +DBaD8saqRdVwpBTxWH6r058SLSnOFl6f90PmA3+zKIXHZ/U/LBjgYUmBDcB3y2pqPHEfv6uwDG9F +wRMAVX1KyjwuqQhXP1BPswMxPi/V6WZa6mJHZfeFwmczpidrWCnYoBVEP1oGf6ETWUUDnOrMiord +dPBRKTSshDBlFfHrUAz75cc9LmWJSu/lAk9YpY0j0dR0fZWI44Kg28qS5The8YQMGsdT/0jESthy +AKNyVldqNkcH033fWlrBHIWVrwvfG+bosGRebNnt+kVu8zgKwTbY7OY4FIbidkL74xcS37gm6WMa +84wi7OCM4mf2fWDAkL4D4hV4OpWD3zBcBbQAjA66zkKsG7svoHYDO2qzaQgcHyu/g6UCFD2TJQ1X +4oInuSM1eTHQPOhvCd3wd4q781hrmwjZ9X7CnMR+rqrfR/7Zz4OiB35TeL67FQROlH7PsjQ4zSXM +ki4w+QexvCXDCXCIRTAjS1f8FoEFAXg+v/n4SX6VaCC38uP3j9MedGJP0guuYw0MOK6KZXtNooRg +Rd4Pv6n2k4OZ7EKLfExqzlbsmY3PgBKLPcZWMagfzFr25polwJJJyUqNW+7CgZdMyToW2w0NdAUB +OYzzag7a+jXiwUrFYyO3G3/rHDCfkI/SLf2lpcQUjdpFrmtoRZK9u7Ebj8QQIeeR+MUS2IaelSxL +9Jn5Zbi1HHuyYGWCSBFiVXhbiSjm4DO61OrsXsJ+AQTpNj30jyMt/qTeO8QMID/R3D78VpGjzk4A +UX8+PBRDsPUxivrxYraXP4GVB6qFhsO4sHyM/Dp9slPY9211PUwSJMITWTP5meM/YHj8Fnzc0CpL +4steGN7cP+nDQdmDG19N3AG4uvnsWSqWGNvyRUKQr7cnGb5RLQbnzUA+hL4ie9RUIZJ/DpeSyxJY +WccCS8pyMj+GDzcDfTmjEQKVlJduRVZLKzL8frVRShFYJ14yAhOzltSJOtbuLtiJfXUvL0V9eGEl +pAAW1sYCV0FnDBb6vUVQN+/ZhKHXyjmpF5NYQR9r69WL/Ah3PrFFLhU4KjNf2yGEyve3VNOtopsh ++QJthOvY3IAWFViPW1s0ksnZ8yu7SRVUR1CUjR7lfVBB8sWEzoxPqAeq5rYQCaY9Yw4nrbFLofYx +sOmqisIXOP8lN4uxSpw/818/29EtxDyBnN+GCQecepo5npdlCg0XLjJRFfh4qNVs0Q== + + + sRlr5spWikVVHWRtzFCJdbclQSPuxS5a+A88X1hI9erumsQd4xtivQ3bHxYlc2gpMiy+cN2lf+rY +Gj2yWmC32EeDIs7g8lPgn9XydHEkHc6p7tFJk3rNGBbwtyYkpCzZrDObXDZI8qp7P50/yeGPjt/n +cs+XqX6dlKjS0vYaYPi1Y+HUI4EaBcHoWFNz1dikntrdCaYfvXqgeFTvVlVzERaLs5EKx0N221yS +ej592FlFAvNx67RFghPXTVldchb6LCTm1pImo95CIsjsK75kdEwlhgLJTnb7OVLLoDJBhry2UG1a +mjQZDU9q8jvdbJWBFu7JImNEsvdHUlM8gu6VDemm/DYQf8UKtGbfs47AUwBgikM7nIlLjw9ZYyRz +UNBXUcW8Lco+VaXuz3ZYVXEWBEynPopg6f3pl7tqMdjH/V7+lBBFoiNBdSW5QdR9is4SnzNSTQyU +AaAygudWDWNh8o/EoZR7YFfK3lPqO0JbGECeZk3jRarEs4ANt2Shw6897f1BiZIfl4Cy9gK8g8za +EddB4rXgapH3lRKuojY8Jen4JAS49Y+CjSxTpnuwh1iEJcNnaAbrsTqAPkPOLah47ZPPQKVGlZcy +qrl7ijQSuTvddgnfSLMuSjt2D4qUAkw+bzWCp0yd57AtaOAZQ8+xTi9aEXXlKAY4P6dt6CXlEdqi +Fz18trOdV1d0mpC3viyUlXjHMLYmajGxePwBfOpc8O7XFaQSOBF6kgjG42TZR7eJs9Mpic2GGD0m +5fN+tV3+zsI23bOIty7/TVHXQ4zklKVuXAweW9VDIu1VOJ6mR0tVAS212/nbox1IX3S2KWGfqhJw +X7BlGijiV8XApFSjhxty4aS6QU2mL2uqi0nh0oElEhzCQLTdIRZ8j/RBGNpkYBWibwiBafGeH16R +fjDXaMyKpQmH60pJpjhKALXA8FAChx0ZWyJrZH9XgBxRKJ9EmmYT027HKj2O6w+6vMC0xKKDkuLh +98MuYrKfCkF/49iXPakjMFSivg1hY0qq0flGIz8C1LyvYHRO+QWKEZNUsMXsiPrII2vJrogeEd6+ +meSy7E5teYQOGNZR7fOxJW/x20Mn8JEPo6gdLHhmGs8fDzMUPlUJwFnP4E+gcD4a3X5E3wPPtpJa +QBEpYge9+VNpvmMlUj0jgiwg6PAtg/Vxe3Wxq6iTTHpcWjIRnx/ja43wJ+umMcgRkNZl0czOsgkS +Q68eP3zFeWPwsFMTOawXqo6xiPDaoT92nFdA49BcTKkWoNmGhkf3+anSkmKe28kOWmJVtpusebud +OhkMO18WSPlWD39yWxEfpuczjHRBJSBfxs9OfqwBMuqkK6rjIczDO6kWWcg8sRd7VwAsB0EsY3rA +vJ31DS5uwymay/ZqnFsuloFkfGCT2Ium1/TjG5APkMvc0U0Yu+gYGI/QGQGKs0JOiWotYahIANFQ +ffmwUov+2pEMNB4/6e9M1QrcltDT4vAsb6f8EOEEvN2LIaMsFTAuAs43wqScSXiJgGINbgaPlhdk +glCmYgk/WdxynKdQrZGEVQgGXgBiGmDkso1xMdgOFrRSoWH3+IJ6Cu8YD4duxaUrDZnpdyGMCgtq +AniRzSoR/iID5qVpWsB27E6lc8X/VmkOcbEMHGlHl7bhebdE4Sa8Xao+B9TEePAtEANLxGjuSRQ1 +Lynpdcy5CqUAqSA6B2WlcnWRO/bLN0s0gqVUBJ/M4hN85E5n1EMw7I4xsjqlD6tiybAiwA2L4sjo +swKBEgzMCHDwWGnvSKcyVzcE4aGwcISFhYf8ybRssPwqU5OKU6xJaWtG0hns50vGUO5QhTTuNBug +Rchvf0gD4QvF6QCOJjKc0akixTIsYwVivzhMjbK7h+mCIlIeN+OzfNTtHIae696PYfamaB63YVgc +BAoF1op1uGRSBCb92QCJoj4FihMvjRUL4SRGofle4hEPy/kQd+6RXSBglK2GEUZDSLVlxInQ3Yqn +Suhx9B1IIjHSCFEk298SOwQLJ26IgUgvgq9cgqUMPRA0GZm+N9sd2wGDxZ0Okl9g+PG7IRRRJGwk +nrXMymLbDqWKChuPd6mAcozEvExcPMEiwP/UrD2lWH7sELGh6pOV2mH8cEcL51DMlNFH9Xl1CqjD +H1cvWrya8Oz29wzrYMx+qlCWx1LAGwNGNKkd2jHHy8O2D4vRS/oYvCs1ck4YZ/iCkFeEZ/RY9ZGz +wWZMOiGkhXtA4MoDbRgf1uMhH1CVFWMdutgx8v2YQ5uTWxWx72zRjiSR8S4lM6RoJUcdV7aYOXkM +W3tMZMvshjeGLfl8WuyLzbuU03J+RecwlbUqRtw8EEm4vRNeLnGkUTLGTwLZLObg5/IYj9vDRqLk +K0cnXnxoyd2cMyZBf4uyUEbJ77UyOQQVXbQHAFlL61QXMWQqf4u2Y/sRbsPIB7o37lA8BORwi1f0 +VoEShqG55VgOht7+aDxgYwI9Ssjq2S67CRyVCeUejt5yoivOX/EXdyKnGKOqEDZGxxItZmGBehAW +1XHNcqo7YZUnMqWOydRqu4v2/kmSQNgyu8fsDME2V6GUI+L9hL819ci5iMiIFGVeI+Sz2g3dctg3 +Obphgv9Rs4e9hrcUlvZomx4KeVmnbhk7HfBQo8vCMQ6/14p+cZ1frBJ8IjG1Et5bhHw4QqGQUP5B +V2dFnDu3kas0FflnSgHuTCaB0Ekg+k5kgywNKCkiObDO0jXesGAKlvVMJ/eYV8M2q3lyiTeHQBj4 +H1hwcaZhgyxnBTsWbLD07vQ0lcra0/pKWNm1BddEkhdHrEqKWVYxvpJ2zjvCIRTqCWpqTlKIk9A3 +wkiCbEZG5KcNTQY97/5h0CTaqMasTO9rqmVfDBga87Tr1uCjJ9lQSpoRaB6pcZp6tIjjL2a6IoQT ++BebwQ/IGbI6kS6h0vxulpLZkKp7eEUoVT6hwSyYFLgwosvCkZp9buguk6OFX9zg5xwyXgxMBbEQ +vGXrgbeUi/LdmYFZvMsov3FNC4xt4jHBV0XVQ2ZgFnU93MyWwWEAsaBidVimhiJru8a3jASmKcvH +8lE/+V4V7PUCBvu6l9YfrzLXC6hyqm4pzZ5xsBA3hai+nD7k3Jm26aoI1JCd3NBzdM8JidVI+JvF +1jBwOuMWY6y93wMnhtbmWWg5689AAA1K3fWz5sGOFCIw3L2aEqdKWLCJF9PVj8Ab1bUpcmqmZIcM +qyclolnfjcQddZRwMHYq7+DHIZtVtjm2GzXuDdroIB4yTDGj8KNG3BVW3msUgmVvJw4xQTKPLC1C +gdvth5VTrRpw5xFJsGs75rKYgeuPnqT2bCaKQHzOCHYAYxFOU1AMWErON2GRI1Xk/JztVjPoBOoP +PsNtAbwmBYztWB93kVme31lfztMGL4GL5rDo3hYF6s9m2X0NatQ2bgsj54EPONbK9siJhF+f2WCT ++zkdQG3zpIiV56TEyK0DYGG3AeYplKIz+RCR5BMhmtE9F/Hl7u3YdxEWNvph7n7lsEQUfVYTatpS +px5mwOECoBoQzYqQlyA8D0Fo5mkYjUAqhGGjFsEZWKZPlrVYzOczUaM25X4Llr5VPDh0gmP+kqFw +yHYwEaXdnxe1cOG8JbbxddNzJV1B9WD6kWSvonNVVwkcqwZEachlYYaKLH/mUBFiKl2OJq6anzi5 +h77CJoU0AlJZv/cI+cHcA/8DFoVG8bbk+EQeE3vBwIYwgdtRsa0JSuFiqlthKNeOynDDitAQKcVN +BPVJNQ8sbBSD3kMnv9ndCLkWh8DYYDk5lUHl0W5wjL4gOdDbw5xSWL2dF3G0zKRAdpZ8GdCHIOYE +QZlWZtMQ2uaAAQurufsyoCiR0rCDSkvE8yrtDi0lKvz5tt6HSufGRgIYbjuKfNOIHBidjHSPIGHh +ZTLp5DYtSdsZmSHAJ8KRqCbhUBIWjSAG6Z7t1nBdLClbOAsoZdYmRrU9aBmXX5RJpEXcBPzHI82C +rtJTe+xIFJEY8Vxelugpk52Ehlyfcw23iTELLQy4HOAjGdmrdvaVmVzuHwPIsNFB/LIuqz7ZeGQO +h3mLpqAR8dunuyYNE5pIEwjBjeYFKseLEoqYtLEFXZHLWFK5w46DfLAYgeAGrrAo1Ytt6tFEkZPG +w9FxgsX7cWKhgSNDBsnMu+32QyOiI0UsNUbPoT6TFAw3kCWo7hmFa1SjJ+T3cbO5HOSNZhwYbk1O +6qqA21XctptGXjgr1au8PwreaMFSjxoy6rQUYS97T9VaF71RNHB0RTydUrNs8Sg1AbXFTz7uR1Sf +6PDmvBxClY/EfG8368cf/otCfhmIJHOZ7UgNhKBV2dpuURnDkylZrlMcipzn71iiSkgF6enTFV3x +8aEWbope6Q0B+yW7azIduzIlgf1w0BXc0kK5Zy2fMxEDXb7YiQMX1fowXbjIbohUc9sx0mrnpr1i +pFWhKGqN2BkQP0BxBIpwkXHLJcrsYenPCXVK1Mfq5CS3lzUSKGVvXIiqPzVlFmtfZDjH7JzLqEHy +2h98Ag4K2c2gEwu709xvjq1TUxItzDhAwcL68vxYT0dNSxl7T5VBFEeiKM5low3Sh6fEuRphWFw+ +w2VeoTpJ+mwoZiSQDxUOeclt59oP28xQZGTWK8BFZrQWK9wAtlEnzsTC01wvg8ewY8FQ4ikhlb2g +wJq4O5GlT+ZR0aBkRf1EnTh6w9j44j3OnhaPFtyGIxgR2/NEyNxv7LEaNjmqzGTxbP5JDuiwjFg1 +Miw6dCIMgjKmhkgjLZ2Rq2E8BPeMAR2q/KVTYyExPGEuqnEzJARaLdqluacNZ0qUFrJ9WIlOM2gl +z/Ks4qa4qhaghCuf0GMiw6urrVqnjItUz6KpgL0jk6vmaIhZfdeEFYdfKDCrbuxCWXASskoPjTc/ +9lTynaUBFI00oXoT8yZVs7roGJAQWbI03QKnJivGocIlTB7JWarKh0Od+Gqogo3Fz8NIHbskcOno +WCosmidHtngVs0UODw1WzpNsge4Fl1SotYYzE0lcWHbCcAw7q8gcZotU2R4Fec5KDhVqH4clQU88 +SYjemKPET3JVgEUQP7fmyn/+hzzZrFGFPwlrs0xRWVCkGhmUoxzWKX31noOlRIcwaDg4ZFC8mK37 +pINJyaxFA1qbUDIbumysN8AxxeqZkj+KAPNjrQCLEkYNYYjJMLrO6WaHWF9xDaOO9JXj+qAmDUIs +YplGulY/3RhPINuoW4dhySA1Ek6GgydqAHK8d+TDQhANa2sSqqk9270ne2Hp4FvmKg52YgkcV/he +mzBzS9XI8LSunhWx3Er+ReobuXB3CxD64ZiCGA6hQGzok//ZL4E+SsrFcT49Jj3KxZGfxuqhW992 +Mvm9q9ngcKiCEzXVHFsdC8uwrj2FC8LlgqISGNOKfltOImTHjeutCele5J3D8fXScDjsiiFdYovZ +pKqlUJsrXWjYw5N83AQeRq7MmYvgKZCF9UjhzdyOLNvvjfZMaA7A2NrjVAW3Yw6Csw== + + + iH+SBKAYmZlv5fKYaY/IliSGBKsqodZsku7wRmiA7S4ghRyUxQBPNLzsSfE7zlF87frcAgA4nXqj ++k4cIAQzQk7scJwaVI6pyf5nZ1pUWTqsFIR7wQ7xfLryQ0H7bnpYOTSasKpqbEwXAyCayLpQ/AJb +ChP24KPvyMt1vKauxwwVPk3fIHlSmP6zIkdLAi4lE6KGAlY66syVT+nXJ0NybCibLJ7aNQ/wICmK +hcacv1BicuwOU3z1RiP++P0QxnROCsPQS3GbX22dKvRZ4cENLY9p6dXhefKPsGcoqxhHZHorP271 +zB6Xy2Hn5uoOes+snmq7TqZLr6kHzkzacKFS5i10GLQ52UOLnBaUt+V+b2cMMgvAtLDbmT40AFvh +goJa1uyYF8JHqqhXXAlirlBw1ik/drzfIdunK7BNTTvPbdD7HRGMTW5Y8N7zcUozWddECxtVIFeu +mpvkeqDEvsN7MemSuSEFOf9VnRYehVC3heWDVstiR4ESkRnj+iVZ18Q06fLTHKojGoo8xdPk0ppF +VDUrz8GHDkPz41UpHHacPe0d2XOO1uQEiTQYDzDe+kU13HmsX9JFFnME4fLpIotDOjMi9RjQOCJj +LAnlDFVxj4xdKdcV0xrBXTKwOAiG3M+OAigi0Kx3fbkRISxcEiBA0+337BmSS2vNKdWjXBpqb4RY +lU4CIwmlZ9O9wn+M1XZXRWpi2iy70xCiJRM1JUpEWzWwUMIQO6pAHh2QmLvK7vqaSMNno4riIQiB +u50rKKEzh5XDKET1DOmMxw+XWR1Fx2oN5QSMDM9hjsQHAcNwEI2RRB6JjjgK+veLXp64/9Xroxzl +s1AlI7ZIzQxvGEpxH8NEIQpRNJZDftLg6AD/UvkGMkmK8YRFmSSKJK/NkNXpSXkH5dHh7WRXF28/ +KZN5jRkd6QuEL3GoOYbeRE3VzZCJxOYBcZkoqeA6fMXXCwaaPsJhcQD6+lALvbrCsbGnItqor+dk +CguhGmgruLKOpXcWlmfGb8KPZH0V1r34gaUkFxxu+k7Iv4rPMbpST7yzLCeY0oV/uMTKQ6qVOsAV +kBtmLL5ZXQK/YkQwAwULUajGFDHE6TqzqoIEWhhqovsRM10totPCysQoN+PNqEoB8NgaoKoCJdqx +uYEyxjLC+SA/ZPoD1A3kybZhDoWatOO2ZgcuahTpgLcDRWuu6Qjkd+kSVEvy/vZ2JVZpkxyMeltQ +lRzL321dTdmOzP6EFBosVXLvV5aptdIiHV3VQRZ6DcnmOuvqO8drVRl2aqeqblBoQpn9LH4k+vTZ +EsYO4KP9xmh6lLs4id/EHHoijDDDsmqTy5kpxYGF2k94r3vEQ6EGfdsecoShMDczlgxIwN3JzAw7 +D/CjXwI2kdFsmiSlfMDLYUaUnxc+wZAk7MUWrLNaxaFqRMXOkix0tbH0GTkkY5tICrdu+njMKsOy +lmQQnNJh4IhflRGPi5RyaFmpyYwGHgwKX7M/EdXXIuobCxiqC+nBIBNArRjkn8le/kI3eAyKnNnx +VtAz0YC3ojvT8EhQkpPwIOBTmYSIVZcQoG53q7gBGaxNL6wytNILFKkLmXeQYCCPvaPURPDnJNac +WqrTn+NVFldHcZtoGk4PF/EaTXZ0u9QsDJfNYjuKH6kUo9sQY8+2JqtqqBsq1afGJ0m9rFz3LfLP +lOvOYakpJxynwxli5ZjL6jvqAuuhKdDK5wRlHlYKuP8LESJYpPhCRIyiuXzVFFLnyeJ38nKT/pmj +CubgqXVIVs6TwlisiGOKFjsBYS9e1IdTxkUfgsSTuhTIyHjhYdnhvmddViplpHQtIhQcS54K02rP +be2utIbqJg1pF/QufvH0v+dqgpUXghVNvdcsoGSXmiYKtNAM4OE1qtGz04vQa1OhgG1SLD2zG9iy +BQJEX6izUG1BalFq0+1OJE8QXJoTEex2x6pvpahdXeSgWWAyhqvAdNM+kJEh+fzsN9SDYB9flke9 +5XZomL+o9FDSAhvhWWr62LtmuZB1qSSBMUFeI/IjzLZT0/+ohlQ9noeiwIiAUsynTs1Rw1ZdgMzz +z6o4IahHTfFKMVQFKeFo+qw9m5N42Vno0iKBt4EmjV2beYUjhKX4RVZm4Xe4jcRq5zynlSj4kp8N +/3/s3UFkk6bCheRYoEZVtZu1W4ABgvyul6oks1QeTwUnaAVWyHZv4k+yjQOjkmA1jVOzoERZSiYH +oLKkOxNLn5yxVCYBAiGiPUMTA2sdirAqpJ0exQ25Dd9yCMDSKe+Tb4p0IiOt+AHGYWAhPqUm08Ww +ktgJWyBtilPCSvWi3CnF7a/u1W1K1DjemFI3/oyANHXYkLyr5pJIdGsSJ6sd9T3LR+mr54jr9WnK +PCwUc8DCs81NkeLYUxh7LE0ic69AfW7BM5kir7ALSgrRByJ7esYjCC3ZmVcUpRGQ0zS98WNFskDx +0qrvAd/TiNJzBvaQnFLI//HnDqH9jiWiulPJyyR5ArQipO2wAZ/FI6yHLHcVCcQVlLsQqZpV26k+ +9QHH5Z58hwujRBE1R66iq4ba1ctFnY4TsbuPqpLZUCbFcP6jn6VKn/ARiX0QvZGqQ8AUGTDMXfNZ +niueyvxoVs5F+gfnpJiilVCjK3Nc9wcNK7sBEMZV9QsqE6oRiB7moNBy3p/k8DSAwKQfnJryrDWc +inbxmIvzCrxO1vbhNtRHYTY2xGCCFKX/ybXiGvZRz1tv/s6joiriFSCZYcC3etXITajhpZw02sww +Lj2kYaM2ncdnzRcgBdSQoOq8FRt2VxAXrsCaUtVF0tHiNztc0/zhxFTeCCrm9DCz0/KseCziH+nD +7MFugGiUL2dHEd0eRrpXl6hbSnz63SIeVjJV3Sflt7DnCgru5lnBqgqvoEh0JxhpYRSlD0VRtCca +TTF++bgrQHUHQvYPoYakBqkERU1YCehhRguL5nombsc5D0FllyrzE+/jykcgv8l1Eqyz+0tmoAPn +ymo6fttmebSI8sFKj4ZWFrKX6vguGhvpF60UHJKR/uxZVstZQjQez0Z67aZVPYiHccCrxo9wT8Si +VB05LC9KqizhfVNXtVCjVMfDYkf1K4lKTgmUmiyuVUanQObxhr567TkMxoBYGi8sZKwcpvB6PPZ6 +nnjVKdqVv1T+JMos02JbqscOQC1Rft2t3Ud2OuJC7LzBiD6sRCAgZmqDkn3JHYM5rz37Irvw+Jwm +eW041FR5IbM7lHOkZEuUmuRkWRiKkkYqnk+qi+BJ5spRzBeJxPAJxR1i/ddS3Xahe8QyLk24EtZj +/bRnLkzD4LmqIrQNT8zPcEVorTFVm+zRrupbNUHgwmRqqtaLj5UE2VNPSMK0tthXKccNHSlSLp7D +lmAcSmaRM1A0wE7XJwi4gbtJRrlPcXCshppJGNGm6ilm1vcsyzqjLHKIkqiQczX3d2IGnvXSrB2G +Y7r9NIR5p2djqtPpzneVwdNdoYGyPVi2/it0HSyPe1SlrXR4Dsjal4XBd112SK7pNf5Q3SaTsHzD +IE/jSQQbD9k5Q+OeUClXkTk0YTz2FRGyfCwdFniVvbGKKt41LcKyuRJAldAVgjWwJ2qvg2Mt49+c +laxnBYZfkMACMawqzbFKfdEuejijK3oaWiSGSIhp2248IT06ND3jiIueel38ishSpvBwEDhWGt0b +rRH3xjXODFhRfrkerS8i5Smnfz2en7Ad33FEIUvVnsJTwLKdDTSl5HS9AoqO9KmCjt6OFg5DOHqI +SngHuEKaXtfiWpVHnEYOJXaIM3TpQIiIgS7t2o6toFnmsyxF2BZEx86ePcrXHrMPp1wEJWazcrxa +vodFvuNU2uBsx/B+U5ql1fvv50jvtpVXy4kNMm8qtCC6pF83gy6z8pX3DnY3rcVlR92bJYh6aCB1 +YL3c42IwEKLd3dtJxLWSKQb4yeE9d1CfiLbhCkQRrpJRaogfE2UCCShLApaTRnxbSWRWJFJEpmAi +rywBKF9jjlZkpcf0vYIMNtlY1W87o7tLY/4K8PRc8tB/9u85Ib8U0uTNZDoVFmO4pCrCjgdiFv7O +miIA4TrE4WMb3KybpGQWmxWEVgdh/KbA2K5nZBUcS5QSWW3JepjlJKF+Mlk8v+wvcE/qaxYV/zTI +/1yu/48dlbZHpmEslQtStcFmxi62Ys0Sj936SbayPwqiQi6IrcLbIIREiogYp3NY7WgkMMVZjfW8 +wyuw5VUgy+ZYmsQ6TpYJ9a2m15kh2s+2LksyBHIyuFl5NL5REZ2jSVPsyVkeVuqkaSEWEp2Ydolp +HGvGjU0rstH1MXlnOR/HQmb6fjF+bIsuMymmw3JtbofP9FHgUH7S3M19bNHwMQxT3dthhmGAH54o +nXFq/7sy/LvSizUCDLdC9fsITvgo4zYIWeF+KoAftxR/nip4rWkw+DE5TWaRpR+qDec2sbACCojB +0OKqIq38Wb/t4v9jyXexyrEmCVmpxXc+nJdEHXvbpV9tbnUQ4TJMSpPT1POBhcovai6rZNQ2raO6 +MqmgGoSCVZqoq1U9PIzvWY739rT3JFSC1vgFkV+zSUTcRu2hirqQxdys+H0qRtIBGcTyfHhSnNUp +cWuqvdoFGclIVII4MYY0g+Mzmx8O4U+EIkVgJ2Q+XDby2nEf6cgDfKVycK8WidcoVAcMqRe156M+ +kecJtMfchuEvulkTS4lCDHhc6cUFaOhnlnC4JpP1AJ/9rB+/oxP3XznafytHOyoMXhhtRMnSUBKb +EUbEtBmNMUQb0WxGPG6GdlnOvAZDG1T41VW+xWIKuLuky98EbZRnsuzJAO3oPLX52Viusf/Ojc/O +SwnTTc8mM4Yzf9ShL48xNzubuyVVqjAuh4MP+xXEj+SlYrWbm12fQGsam43IELMFQc1u1s+9oNnR +l2Yzs0m0d4aTGptqPdqLmH2MBmZXN83cvGygCQmTuHHZQBvVIjY2p+JatGLbsOxq5cCLlc1kY1Z1 +MgeKGoqqIGW3mG8vUDZksOI5O8gdAMGNyWaJQBXhNwry23A1dkCyUSzNETUY2ZQylPJGZDcXEG1C +NnqrZQvz0fmrqG7x5mOz/ZoZ2hQy4yB5Hjh2s3zvxcYmAK6Vg8ZG/Ekt9UzGxupv+AQ3Jpa54NIP +F5tFZ8rNMYHYZyjGLig2+t0Uy8M4s4JO+wxV+zCuhimavO2biM2JvAuTTSA26wGNHie+LsoGXzjs +qHrbPGxChr9tGDb/XHo2G9iMqjIlgI3CFllZdAiSsEcVDeXmYA+HSTYG+2NFw+TXpmAv9/Z7QbCx +WmBHxGBgLzUNDAL2SloivgDYFNRoH7pXODJfu6BfL/cTfsGvZ3dWNtjXAER04rmNvh5LzK0X+XpN +9TTe4GtWnZWsGgIGeNlQQiTEmynONhNVImJx0pEwFb7a4GtYlN24wdeJLnQKUSk7XUSXmABf0yJB +6bzZbt3L4ABfY/38hGYY2SssepiCvLHXqzqtFthr9OPQZoG9ZkMMxt5u7rWsU/WuSg== + + + 2DzJYv9hCN3jisebew3rkILe3Gu2Cekua/R+ipXe3OtlnvvGXkcToaBeo16jeS23odeYL5ZX9gw4 +e121iddrhnDtAl7DyBRo8K4R1xg5f9u4a5xNk/pvVzKjwbPCNmZdr2GyaOiU13Dy4SZdY63L1E6A +rmdTjWxgrlG2ayjnhlx3t2najOu25LFtxHW7GId76GpWZhpwDSAHfzr41k2KzBfdujkuF2zrNk0X +DbQ1DPuXIuuKdAzl3gG2joafwbWmzlGf0qZaMzdBnaKh1j2ypsG0bsOv1I20RjJIMSpnRaAB218I +J8fkFOfNs65R+RU46/qEBtNZe5RDNhdxbJh1NXRnw6xr1DAFyxqG0ca3F8r6HMska+Z/h74qqn5Z +IsPK+QOyxqJuWmzGRQNyiSoWMsYazho52DfGOvdTQESKdeZEJh9PuprPnmCEUqXlxowvzvLFsEZ9 +DNeOgbAGJKWZV02CNWZ4RhZugDWJKI/i6KSHtCh2C3x1a84D3vRqrHKIlA14NX6N+dRgUrOLX3qT +qwkFuQHXNYjXwa2OLrIvbDVSLkrpmlpdV4TFDa1GMo6xzptZDSg237wAVOOUmnGOYZCO8QZWA1le +dCiWCeLvqGllvhcGFeFfsOoaefpgVeNaOVkEqvoYLlI1KyJrOqTqFn3sA1TdopDk5lS36FYVnOoW +pSSBqW7uhndTqlnyIRMj4Vj9KW1jRjU2UP71QlTjjHjXglANsgSr1ANQ3apikTeeGjZ9iOZTw6B5 +w3hqDEKU2Nx0akJJiPE1nBqiSYaeA04NAJGqmi42NVK0GruNpq7NItYgU+ODZqbuBlNTMfIoK8pa +h+qgxcZSl5hmbyo1kvA3k7pGdj6Q1CXo5DeRuoS2JIDUaECq0kXzqNmR1MKDjaPOKENJ2k0EF7Xq +2yzqvBQzuknUhQlNydPpTRRm9lSnw+BtKSb3XhhqlMsrgm4Kdd7FlQGXBswmrW8vBnV33itsD1eY +WdgGr4mR0XTXg0Og5vKsHQJ1jzI+8acfJ+xe+GnXph769OOE1IZPY3yv+RN7+hHT76Cnnz95g6fh +V6U3dhpzIHoGb+x0ZVNW6ehV9ViVu72Z05NB6PbtMKcfYbEOcno5rfIiTi8nAYM4zfXLwU3jzzHT +ex7P1oBv2DS3KvliTaN7pHHUhzXtON1GTXeVkB/S9DbcoOltDM70cmgi8NEMEaZxDDzH5vDr3sqO +8WZMH8NBTG9bEKbzrvoMwHS8ijdfGsUAjTRi4aWxVGJ7oaBLP4xFpvqmS+MIuY0ZeGlhCmo+eGl8 +0Oyi/MJLP4Q0lnLw0r9j0q32dPjSIBWMad73HrHgfHTm8QMvbXDEpkvnIFbfcGmsspmqCLb0oq/a +vgVbGiPRLN/eaGl4BqxoN1n64U9WqxngkKJ8/OP8vGOQpeEV1TmDy/AxGWLoYi/OjZaWUyAt0CZL +o1gSEMQDlsatSpYrPvoIqDZ/YaWziQSbKo2G9E8TKIIEAwxbUhRdTGkIRrp7LWjUhrjOWA1VXjVr +dG6gNPmj3WJM6b9VybZ50jBQDnLjpHGs0uRGQTiPHH13+l6S3OY41s2ShmvY3RuDWBWWh09dK6sA +CX0d+dsLJL2NwZGGIoL1xIGR5i1K9U2RJuakjAORLi5K2gxpbMGA742QhpEPJQjSECI8Yx6ANM7e +2pRd4ogL4NAU9OiyhCje8Giq2+hTHnZ0DW1OoKNRNMHlTxChQROiHOIGR2ONEV0xaeyPoZEBK92G +mxp9jIZGt2X1RTCjvzjV4XNjCDIm72JGqy/P6IcZTZ0cy/aCGU2FIGXyFzIaHypjARsZjc1EEA6F +FTDGjPVcxGga08V91sud1wZGJxagtvEGRuP9Ikfg2rGrL4iB0fx7mk/8HNz6kB51A6Mhg1QuMYDR +EiOVT8RoQh9YVBrEaEoqGVwMYjShPsyh38RoWsUQNjGaj2f0dojRlK4w73Yjo6lWaWVuZDSVKgxH +BTKamyQDtg87DvJ6hosDGU2l6tPqRkZDhSNq4Y2Mpq5dMGAjoxPZviwwMDIa76TItzcymsJmBkkD +GQ0LIQibGS02kknZp19gUn+ljYyG+kiZw0BGUyfM2PONjKa6jCHWQEazYQbjq0ZG08DX/EZGS5bW +DzGaBizZNjEaFtYNvpDRuCRBnQMZDaG2Yt6BjKYcSbnXCxnN5rrxHbHWmrErZQSNjEZcohlTG2p5 +BM4Yww1g9GoSum5eNNrsqenj4UWvFmXMBkZzo3Fw0TgKgZ43LXrNeK6GRTPgxshvwKJxGRR9vWDR +KAaKKDtZ0ejkTr5moKLJ21UpToCiERFVF0RzomcRzm9joql9yQozb0o0+nSr/aMh0TCI0WlGNHar +xkhvRDQidipSNiGaQUGqG4IQzSbfzBvehGhecX6U1FBO6nGPqE2IRtVrr+PbCxC9XNm6+dBsre28 +B0GH7PotevOGQ8NWXNFMNjQOo5Cw0NDsBf4IeRlk6ERxQjKOQU1ogoIaaGjNJO6IuNHQ4sAV9yNl +tzPyFpaOJbAIqAkc2282NKwugDYbmhY0ewk2NA0Bld5saFpZmxRsaP5AnUGChjfOhNaa315saASc +KcbbbGiWNqigOwpAUNXMD+aGQ7OcgirmgEOjQkH4roBD8wapyvKCQycVv69vGw7NftsMwAccmrUN +j+kwGw7N6pKNlQYcmhbGgQIOTYs6K15waCpRpVIyHZo9hZprKiXLAC+iu4xw46GlTiU53Xhobkc+ +UeChMR2pvfeNh6ZXo1aHxkMfFWvgoWGpQXneeGhY5XQYD00Do5OBh6ZFzacuPDRjcawKNR1anT0s +AxK6B2EmDm43IJqLIwpEghCdCP01Bl+cmOZW6C9CtKz8dE2I5rFUvypCNAzq5nATotkihaKFIERr +EWBmtJbCZRyG+iZEq3iqSVc3VdJTPNcHIpoLlumi/42IpkxbPHkjoqnk1mdhRDQt+gAuRjStFF0E +I1pS+WwWQPUCzESDixEtYbwOp9U0/JFlEj0R0Vvx/kJE0ytk/+ZAROOWSVAYiGhFMz4RohnRUG2t +EdEMZ3CKC0a0Ahzd+I5gRKfTzsSMaEdH5mFEM6IyA9+xf/PjKuWnBSOaXqCS27Fixfz6GRGNxYCE +JMGRZKWNikCJiCaZLbmX8kZEM/CrLg9GROM1I4AiCNGpRbvcixDN8imqbIIQzdaA0giZEE1PPqf6 +JkSnLRgIQrQshw/9dQWw1wYYfZ+Q+wcfGklApu0CD51IvngEOpJ/BxwgiW83H5pWSoPNh8bxJTkP +QDQskqXfgGhYJWc2H5oGpQUNiJaFCa8LEI1fZGuq4EMjMcl8QOChkckLeN/GQzMPyTKl4EOvbr1j +YJ8xxEUSbNOhR4mMrI09OgwHG7qjWtwh2Y2GhvExu5kzCwxC7RgMDSn1VARru/Zsp0mdtanQPUpN +Y6tencG6mdDdva83EnokJ6yC9Iy+2pxibiA0icqrHiN7Yzfpw4mD3oabBn2MhkFPz+cb8gyYkyq4 +LhT0aA6L762KsDebBL0NNwj6GMWBHt3q08BAgypBsNtNgd5I7IBAI/TMlFAwoGFQ87oLAY3dguPM +4NEM7U4AoOfj1/3mP49osRX4Z0Bc1DfQ+GdQS0SnvOjPRP86QMd4ymYBB/t5JCEVL/IzTMuyN0KA +YKjRIB7TyzCE+cY+jyfSuaY+DzdE2tBnGFgXejOfu/2QzXxGAJQ1GoF8HvHRHuTzRqoF8RlQNqaF +A/gMTuhmYQeWmMYiIxPy2E0sUNOePwziFN60556U9zXrGQFZpvUD9awLluHOBaoeLEDPSHerH5c5 +z8Or1BfmmX2fVz2U566V12Y894Bs3ohnnlI9gGfcYFbAGO+Mv4u923b2EeYn4M49kLrBdr6OssnO +PTKjAXYekUIKivMeB26sM4CJKuM11RljXroRzjN6Jd5M59ktRt9bLSPbg+gMKV8zqTmAzsRbznp4 +zjB030TinGdISG6c8wx+dNCcUefA5FzAnEGsZj/OC+W8GMkuh+SMpTLzXgY5779vjvMxGuMMpEv0 +F2bl1iwm9t0Q5xWcpGA4Yy2prz4Yzonadjez2wxnWLWAiagb1Tckae68OpZHhjPvFr6QNhFIFQhn +WAbrCILhzG34oR+GM2ZQTQ/BcEaDd5fqIs2PNQ1fiJvf/HF55IpsfDNPiXc38M0s6J/BW95FJHAa +edHBb2ZF/zQEW50FU3TdvvnNfJYslDC/ma9EMyBa4uVkNeOL38w2kXEFCnXD0+NQZoDzVz/oxx/+ +iwKcGRck5eoGONNKiUMAnBUtLPkAmxkGVLOIC+HMcBX1QYFwxnP1LxjhDB4jX5Cb4IwrV4FhEJzP +ajYIzvqmpybQE5hlx1f7UMqs5ai/bDtm2e2MtFfMUhyWTXCGQaqBIDizeFQdHy6CM65S6rQgOOO1 +E7QpEM5w7SQouxnOx4MNhjNfz5BqiPBAJsVQCmsznC+rGc7s3svQfzCcYZE87GY4E/dAxVEwnBOx +2q6gVy9xCGo5vNwMZ7yxVmOY4UxdnqpfzXDG81U58s1wRnUaiV6BcEaplnDpLrBebvDzAjhDXRZ8 +eXr8cKM5dAS/Ge8J1yc3v5kBHg7XwW9mgEdcAo8WtDTXgJ5qKVrd2pc6Th6LRdLBb+ZPZgl3Nr6Z +gcpoRq+Ss+dRFHDjm9cMxvahN6OcRnhlw5vn0Gp3s5tZXsMzv9DN6AYjELTJzZBOslI/wM0jKv9u +bvPoHh4D2zyieDmozSM+novajIXNMqKZQZFhsm0gm0HO47x/E5tHC4KEgc1juCzauGYgwhikObRm +tI3h0By0ZsoqWPJvWHN38PHFagali3GzQDX34tY7BjUT6zVUDr05zex09AjnzMvCYfgKBqWZ3eeH +ksk7LdejAjhKqyn2M4SBdZG4ivqIkbARzezyXvVZMwCFRB2/pQA0g7pGD/TmMyN7RzBy4JkBEWBM +LOjMNcpPbzgzZFOjhBoPMr/wCgPNTAzDCnWnRcPQ+7A0PsDMbPWVy+Eygx9MddGNZUYFrtYIpjK3 +5q0Cyox1EUsMbyYzjFyABJMZ0qVmjjJXzRA3iZR4IZkxTRBMH0TmVl1Ye+2mitabx8ylGAEO5rbs +dUPwmKEs4Sx945hxBfy1oDG3ebp7czJBXZUI2heMuQ1/acFibjF7BYoZ51PMaNxJcMwqLDAJEjOm +onGJOtt0t4sbwwznXct/U5hxaoJEGMIMkdNM68VgXrFICwbzatF7zwjm1Z06vgjM0BKrkNYA5tX9 +48FfFrQxDHPrhNXMyfDl5VzAZi/DEL+10ctMdHBtEOjlSEZs8jJEXqR+3ODlOaKjgrnLKwCbgV1e +EQi/qMtItOi96TsiH8yBUDNz/UM5/E1dplU0ccvgEjm4VtzZe6zmmNzUZVgXC/6DukxGlN8LCSJ2 +E5QbunwdztBlWIRuCuhySi50e0GXtfJZ60CXmW+m7DSgywIZWFl2+PTwAynsDOgy0w== + + + vJzTArr81YOMoN73gy4vN5t6MZfXEmBhI5dRNc/6mCAuw3lIRjBvrRHSMUwZBW8ZBpUmG7eM3Zig +umnLLIyth7W8ApgcCGUFFC/2st5niDRZ8hqbgftIbnCQlq/E2UVa5tKAuoggLXNBxhR+kJYZ5nQJ +6cYlM9Qp8LRByzwzdckbJ6pptN2nPbuhvOofD4OKfkaUeGSXnlycZdZzqN7KnGVe9mB9lTnL23Jz +lrGjyCbBWcYXSbr/5izDq6qqWrk4y7CqnW9wlmGhlHeDlumA8xHdoGV6aVmbMUEISoPK3IRZ5gZ8 +ZDdmmSfGSHJgltPuSRKYZZaCcNC9MMs0VndhEE0NFs1Wwixz0GMxyo1ZpoOZLdQvWlEklWxvzDIs +KlO4MctcAmvOMGY5sRCuSNerk8DYwdKFG7PMRTH10MFZxkqWNSCBWVZSt9Q3ZplxE5I6ArPMJZK6 +RRizTDZatezzRNxzaKUDs0w22vRmfLQ5KGA3ZplqEkbHjFmmoRiqzAAedxTq+cIsI2Pp+2/MMuQg +6twUmGVsoxt2Y5aJVuwxxDPVuRwuX8FmWo7B3JBl0rRYWbO3a81C+6AsY92ol+emLDO+TNZjUJbh +Y8rRCMoyYgeKg92UZXGN5jiUZWr/9AmaskwLpfQ3ZVlKyj4PZVmMK8JETFnmniqzuijLDJEHbHtR +6p682gnKMheSgodflGXJJ9c8lGWefhStkrKMAJbwFxdkGUb/oiDLDHPpxAxZpoUBoRuyDKtYf4Ys +czPdC0OWeezkthIbsszVjdgswbgsy2g4Q5aP4YYsX1ZDlvEDirIEPJnhIiXwL8gylory7vZ22Uur +YCwfw4VY3sYgLHM9p1y9Ccv7fX0Rlpl6JmEgCMsseadqIAjLTB5G64ytl6R12RfUV4/sIVdLIiwz +Bxh/RvGMlOp+GuY6NmfZArDMbbjivQHLEiTPdAjLDnLMQ1hmpGp+AiwT2/nkaFeQnBci8iEAy/z6 +IqN/dbOpdjwCsAxLL1YHiITaqtypF2CZsSESBwKwTIvmMQGWaZDQ4CIs8/YzYx2IZaa6KVgLxDIC +AarkvBHLRFu5OwOptlCZdXULNGEZY53am92EZeo6cjRP4CgA10fZdROWGTMpKb8Ry7CSCb4Ry7Tw +IQVjmRYKFG/GMo9HVU4wlhk5UXn1ist0Yc+LsUyHNruXhINj5u5syDITCW1Eb4YYerY1IMuc4Vav +B7LMe8be8jdlGVa9aEFZhkVKqaAscxtKoG7KMq18VEFZFmFv9ENZpoxQvTyukjdKI1lPHZRlKHc4 +rGzKMrMzdGhvyjKj1qy4D8oyC3ipQAx6MtwJtjh7UZa5ckqXcYUaI6Cc23Ajlo/RJCr0xhEvx4Dl +L179d1048HY/7WDUsGYovLnp28Yr4wmXqUcsunJ3t7EXXLmbubrZyt0B441WnkY1vMjK05HBDUh2 +nfohK894526w8mQk7t5LTNxNVZ4uL3lBlVE0RuWTmcp8Q1oOpDJUI4xU30TlAN1uoDK0WxzSAlSc +Xf9685Rhm2Ysq+lCF38nYMrMI63yZilnV85sljIMbKcVKGVq6h0S3zA00qmxihFKGR0xxkrXCa5Y ++14gZRQuEAwbHOXAI22McolGzzdFGcIphogDokx9cJ2HoQx80noBlEsLJ9L85BJNeQOfzASTE6Cb +now0tLJThiejIqCZscywXjGt40Ynw0YaX5CTSwj9ApyMnBSiKS9uMkphom8up1ekGpRx9BuEohMR +si9ocg2WYzCTGdVb4yCTofdglvgmJiOBQ687gMmQoHQ78pQUdWvnXrjk/gQJ0bRk7MbIeMCScWCG +5m5WcrNkbaOSW/TcDFJy8yz1IiWjxV0kFkhKhoaFqT5zkpF/Hvr3PZtylfXoG8Lqd5jEFIxkdFXv +Covvigks+3LItvCxDFOwNh8Ze7Efyo1HRsBFGUTTkeEYkMEecGTo61TScrGRca3dtRCEpFKg0hRQ +Z6AK0gMGmG8wsirG6rfNRaZmwGkeZj67wBUvKHKPliDBRN7l74FE7oZivIjIbKDCYxmIfIqVzUMu +LoB94ZBr4CGDhgxCL1ONAUNu5YBeg4VM0ApXLKrIb9H0LEjILdSqNwgZxkKcsTnIZK9w/WIMMn6L +bSluDHJ1McamIMNLU2dIJyKZu15aem0GMrIYzAsHAhlUG35nQUAu0Xb9BiCX3bzP/GNUaIikafwx +aWZmGG/68YYRBfy4jJj6nJqDgaDWG33M187SMM4rYMtRvh3g4837vrnHqClTvaGLckr2tCTqcUZC +ysjmq7mQ41TBPEZetnkr9fLrYnHewOPcperfvGMYCNEX7jhHY8ybdvwxzbO68MCOq8mQwTpuHFBV +47dRx2ytEEbMhZgfWOQapGO809m44g06bqh0e+opK8SwOfgJGXOM6NJjPvKmHC8mQ9O3DTmu7uS9 +GcdDJaBvxPHHhLkseBPiOHlaDsKxdaYvvvHkMspGTFuS4YmCzCzZJNjXSbtYFwMmkpYU1YQbTy/k +Am4ccfI32li6r0M2HtGqwGDjHC1uX1zjriqLgzW2MHFTjZkEUJnigRoz6RFViVj8Gjq6icZ4K5JB +DxtojJKwZa4DecZ4n70Q0VfCsU9rmk0zLvaaAmacwwcIljFr1D3iBsoY9W5d1Zb0lLCo4Su5OcYo +ODNK+cIYW9IdFOPGIEE6EGOuqlimekOMpSAZ5UCMEUH9WKf1QzGmnPMJS8ieqBWN7VhDAEutLhfj +g/vqf39P7x6j74iFtCnGdbrhZECMg1W2GcYth5T2QhgjgFBMnaRXDdwF1TwBMCaBo9oQUnkgL9Qk +uG4GhqCqQS9u2Zm8i13cQltgdDHSrdR7BrkYOUppwC9wcWvG9zh2DrUoPRwTidF/OBJ7gS2eKZLL +shERW8eBFq+kAMKLWQwjqyYCWbyif0cQiwFy9QbbRV/Jc2rgilGMpeCdt8I/MB13w4rndEvkYBVv +Om8giIGmoHt5k4rHY48mjBAKMxcXnOJtuDHFYdyU4uEZfNOHIeLl6veGFEN8q0COjTMZTipE8fnz +IhSHcQOKCVde9fCJR2BFbjwxxMgiA5lOPJoz1kEnhmGap3u80uj1HWziEeqkABGP5hzmTSYGdyqQ +xni9Z2D/g0uMz2ajdwNLPJud6cAS01AuLDHj1+kNJZ5BcjKTeLodWCCJo3X4DSQGh1HZafOIoclk +otE4YqgveQ9vGvEGZgWMmMhFpsPMIp7+UF8oYpQqJRNCo3ROTUyDRAxDdvR8g4hpxEwUHGIwnagg +MYZ4FTuAN4V43W0R4bEQ9TzSgRCz5C6/EcTAczHEFQRipO9VqWEAcTRbf/GHZ3BUAz+8vKza9GFW +CRJHfODDZk1v9DBOaPUDHl5Fkt0XdxifG4vlAju8ohQmqMPXYTZzeEZCNpDD06mpzReOYeAFHIba +VURj84ZBDuvj4giP6rH0xg33YP+GEVlrxroDNkzN+axv1jASSI+bDiPUgb+TgcRTAgyXTV+gYSSm +onRaNMRHSYeNGUaKq7lX3dbydAe6N2S4R2FZMIa34UYMH6MJw91wo823xZI2mWa7AcOA4hOf6wUJ +CpoCvUhPpboo7wUXBjlKRe1mC2PFI2Cl0cJYC+X0BgtjNZVKP1xhrLkCP8yvrFpM8KIKN4syNlQY +mKHWDlJ4BN36EIUhaCJSMoDCXJu5tI1lzSSXlvnGCdMbS+3QhLWS7QcmzLXuyG+WMFbFy2hi3moY +VNBvlHC1MvNFEgZAKs6b30fkwTZH+LOj8+N3dKL+/4cR/oIH/iNHrt/+3j/6/V/fB8aB/vBX/J8/ ++7/+8hf9wE9/+PlP/5df/l8duz3f/t4/++XP/vI39vof/uLXP/2nv/zVz7/8/q+v7f/Yb/zTv/rl +//mLX/7mT//ZH/7m35t+HHULf+wH/re/+Dil/+mXv/g3//av/ygvOTb9w7/7048b9D/+1R9+/x/d +9qdf/vVf/ydvjIv8uCt/8cu//8+4xh//8Jf7GlHV/TEs/q3X+L//xZ//9b/9zWf5D3/4b/7+Pyp/ ++g9//+feD383/P2n/+QPv/+nHy/ZX3+8Z7/7ncz/4Jd/83Fd1z/88E/+Hf5l6l/+wV/9h3//b+M4 +/+0/+eVvvvmPb+m/++H59vc//u9f/s0P/+GHFxj6+fY/f/zH//1h+ptv9ds//vZ//J/Ptz/Hlv/s +h99NMAr5/37df6AuCAv5n2DBHxTn/jHzxy4/3cf56Yfffxz7f/0BzjUTXA/0Z1n/geUnpPkDyl3A +gD6WfB8rL/zHxzjcaWFs7l/+GY4JKX1F3ReDWOljnOFZYnxHqfYxw1iFvZoIIHz8YP1k7GoH9/MP +bzNQER+/8D4qilk+xp73GdioAwyJ49/bOvj0Puoxvs7gmK+zPUe9ruvLPfj5h3/9A8BKC04mqKLM +h0HdUzC1khb+4WpPlEh8LH+RCUcB0kIR58d9Tc+3f7wfIfzYRHzy41eAs0O7zTBCVgwNorqWfcxE +b2NS+oOXdpkfUSJeR/2YjhZegtcZhPHn3z6xv/y44vgH1j9hkssE6cSxy232WWDJOllE0Xv6ZLR+ +aJ+xzQR59W+vozasF0r59jqDMP782yfmM/6vL/Aff4HrrNmktMlIyse6GwgbFBNUvLsf4wBhgP0Z +iK0THoDBQmMDMHfI4n+6tRRUpPY+BYgSuCS6T/Yy3hd2mc9NuI56btd1Bvetjf4N720nuWqfjnqM +rzM45utsz1Gv6/pyD/6OY8PveCoDxLtP9xWnDb3G6/dxgYjSv870Mt5XdZnPHbiOeu7VdQb3fcVP +wHV+b4tsZv70yl7G1xkc83W256jXdX25B9/llWVXr6d9Hr8w6KBi7TV+NYatynv8uoz3+HWZz/h1 +jnqNX+cMXuNXz1Jkv7dlaefnox7jfQaX+ZztOep1XV/vwc8aKjGHQOnz6eZgDnnKp4Nguqj8Qu7B +/Rhfg/sxn8s4R70u+JzB6+ZgxhsIJL62Je9/fTrqMb4ezzFfj3If9X7oX+6Bb8713O65+nrGZ64+ +b8M1V1/Ge66+zGeuPke95upzBq+5+jzje9v9NtxHPcb7DC7zOdvrfTzX9fUefHlzXjfnesaXI7Pf +htuROcaXI3PM5zLOUa8LPmfwujnnGd/b7rfhPuoxvh7PMV+P8ryP10P/cg9+/uyBNPaxaJ89kDC/ +vIrGFPsntwSzjfQYb7MFee+jsnRpvef/MH7yQO5tt1dxH/UYX2dwzNfZnqNe1/XlHvzdp8kz9b7u +63EUrt8/LsV1ppfxvqrLfO7AddRzr64zuO/rcRTubbdLcR/1GF9ncMzX2Z6jXtf15R58l2nyzL6v +W3t8hesUjldxnexlvC/sMp+bcB313K7rDO5be3yFe9vtVdxHPcbXGRzzdbbnqNd1fbkHf/dX9nwG ++HRG+TIUhPn1eXeUqtgjOMYuGMinoQCHqs94DwVsZpHq+0MM46eh4N52f973UY/xdQ== + + + Bsd8ne056nVdX+7Bd16MvG7t+W6vUzhf+HWyl/G+sMt8bsJ11HO7rjO4b+35bu9t9xd+H/UYX2dw +zNfZnqNe1/XlHnzPxcjrvp6P9vr983lfZ3oZ76u6zOcOXEc99+o6g/u+no/23nZ/3vdRj/F1Bsd8 +ne056nVdX+6Bp3aQhZDA+eT3DOHzPzlPVri/3axjfLlkx3w8lHPUy5c5Z/Dye76emMMh44t7z8OW +T2sfnoC2vVYTx/haeRzzccTPUS+XfXzx7F+ng1P85wq1/sPf//kr0PqfEn8tf7f4q+/YpyDsibXi +Dfsjxtj3py9HO6HYv3OwEO9u1+qdypdy5o7MWF+YPR+AWOl1dmqfjFiT13bmDpuxfh/12/uoTen/ +9xnYuOeONcanbYeU3u+jHuPrDI75Ottz1Ou6vtyD7zZ34N8/3Vp6E+XTKdDv4It9nexlvC/sMp+b +cB313K7rDO5b26yzfW87JVR7H/UYX2dwzNfZnqNe1/XlHnyXuYNVG5/uK087f3pleYHl0yt7Ge+r +usznDlxHPffqOoP7vuInau+ftp2WMryOeoyvMzjm62zPUa/r+nIPvlsgC5VRHj3LOuEItgjc5t9p +xM2jxmBexiejacE7HGHzo4KR11E5eKf57XUGYdzhCIgW39sWqWHfRz3G+wwu8znbc9Trur7egysc +0eT53jeHc2n7dBBOmz29f+4y3qd2mc9lnKNeF3zO4HVzMPPPuT5tW1QS9j7qMb4ezzFfj3If9X7o +X+7Bd1hx75cjspWXxRP++yW0a/B+WDZ+el3ubfcrcB/1GNPnd3WcBNV+RHGKl+Uc7HoVzs9et+w+ +xev2XtvuB3Ef9RjT5zfGp/gdP/z4tU8ffphfN4jXsOono6/3082Me/M66qc4pM7gSxxST/JTHFIP +7T7qMd5ncJnP2V7Dybmur/fgy4f/ujnXJ3oOch7N9XOX8T61y3wu4xz1UxxSZ/AlDql36FMcsn6+ +OZfx9XiO+XqUZzi5HvqXe/AdJvIk3eKn+1rdvfN9X9297n1fj/F1X4/53IFz1E+Jap3Bl0T1+8Su +RPXoe3URUwCOnfJt9ln02T5NAcf4mgKO+QzW56jXsH7O4DUFfD2x7zMsbM84XL5Pq4Mwvzx+eoJO +DhyjPcFPqwP5rTvI7KPaw32fgY2fVgf3ttvjv496jK8zOObrbM9Rr+v6cg++T5BZbvHrvh4n/vr9 +4+5fZ3oZ76u6zOcOXEc99+o6g/u+Hif+3na7+/dRj/F1Bsd8ne056nVdX+7B9woy2zN+3drjx1+n +cDz+62Qv431hl/nchOuo53ZdZ3Df2uPH39tuj/8+6jG+zuCYr7M9R72u68s9+D5B5h5RuDlS/zwU +hPn1eTMGlj8NBYyXtfl5KMCh0EjofVRE4d6foUyfhoGz3f6w7+Md4+u3j/k6z3PM64q+XP13DhG8 +bur5Yq9TON/2dbKX8b6wy3xuwnXUuFnX75+ber7Ws93+qu/jHePrt4/5Os9zzOuKvlz99wwOvO7o ++VCv3z+f9HWml/G+qst87sB11LhT1++fO3o+0rPd/pjv4x3j67eP+TrPc8zrir5c/c//+dHPf/77 +3//Zr7/8+bfxinz+Z8Q+a16Q1kJqjv8Ak+ZXWIF7Qz37Mf/0ydw+Fj29ynyO8dvWfYjf89y+hzD1 +dS5DLbj3mcMNpFm+nIzDtqfPalt7PhYWNKaH+naZWWtIM1u0f75y/9pP8DMrUW7gAqBH6cep9+nT +QH3Lx6tOMwnMMtIP1E+iqkBGIhv0g7PEeQz2A9SmPXb/GJKWLw1lNDJ+rED9+6z1i92fjw/Rv//x +pvmS1z6oIv0y+taQBRF3gS19fMdy85as2dbvoxrD9wvjqbZMpFvKTC6ibguep08KHVllRPmdr+oJ +44djfy4fjZF9/h/jcWzahvc/N+DTA/hRTyY/7CBGe0av5l9tZStpWptC+bKO5J/TNy7jWrFt7v3b +bx01fm3+SU2P/+H5WBj45+Z+Hbu6p9qYdRDArua26TUwGPTH2H+M2PLJ3pRdfHRMhhl/6/fjxNAM +Rk8YbUZq8YkBx6mLayoitRG1fzauFsYnNly8v7Hp8vn2vndHgaFsQGj/5u//x54PG63QzH4G8YAI +XPXWNZ5F9fvMhgvzb3tAD3DD2d/Zx6sVIx2anXS/1FiX2raHBvbOhREcveZPgi3Dfoz9U842oyQw +Dhpfah0624fNIL5850voMP0+MoW2zX1Ofe/+Pn9fWEJ9W/JdZwv4X8P8tH6Zf7KZyBqZP1aj32zs +fsRsPWEbCtFlTDE+fv01D4TgAqDcVP8A1t2vNifgSXQYvAg25uSvgsOXjYAM68ktfwCwphjf0hjD +mz49RhcyB2xMj0cHppbjAPEwux51bDvi5uBh/OYVnFdnPM2DKTvZxavDWlWZ2/C8x4KcbQbOwMYZ +V1xiPP5y3HikUwXYumkreW5LpkHLXH0vpyox/ZxKC2PzADM4Fnwyztzz3juHsa317Td/3ueFPiC9 +a0p/HsVUbK3+MhiNCaOnhTVS3rbuT2C16vNit87cY399Qmrh2eK3rv2vn4/T2p4GCKPJU/ACoEHG +tmIcgXE2P4dWdbdofPyKEMT/xViWZ8Yvv+XXnwCS4ntWkCf6NczP7GEevDYaR/oNYx5hjPcfZZel +e5zNaDpg4wiPC5/Kb56A7w4bocWgzi6Jv9qcc/FJkIQhY8z7eMNqtrH5Y8HX5hOT1GrELFRi049V +RX7PKl9P4HxX7DOiIXHN/Vmx602MiM2fCttw2Fji+/l4TesZO2NE5YrUo6emx4ew1Babas798vvn +jr0v+NffsNbfuDUfo9e/ils+epgxq/wUZrRmkrk+cXfYPEbGkucfueV6y6balvJWchL5Ncwp3ARW +28tIuquMQ/eBxb/hZhCg8uMPYc4lth0ptp3NP9b0Lnw9gTizIomMx/nsh8le77XEC9X8GRYwKFOY +R9LvFSHmbNRY9PW4/kFUbI+5rq1/tTl8giZeoo1tD5H6Xj5srexfazG/wZzXObMe27KxgU4izTCm ++GA9Svq3MAb6uPFbtbY4qAadr+cfFwb6xjOuH/s1zOGGsSpKto/5ZcVkPlcYx/YZy/TABXOLJ8Ey +cRvjElbW5ArbEwMJybw//vZpeeSb6GoTCxh6D7/anJ7kUX144oexFHtWJJ7Y6EEDfNtuz2oaJ6Tj +Ji0hPoy19/ixjyX9t988g9vni5+DHx0DDNd7x5OzMY/LO/vt8cFW4LhsbTG/h5uC/VcMOn/E4xtz +O5Jpe4xjhPE5fujr9M+rT6dSE+GK64p2NzK3+NaI/dIUP0kZl637FvgIv3lY/x76aDRf8McXaG8E +/S72cnQCT/JTmJ86rofhI4xawyiH78th4/KSaFifLy+LNyA3QSM4bNt7JhVTxtRjAuGnEi8wSW8y +YxFo48r7ACUOkJ947sQZ/Pjb53W+AOIT/QKXcr6A673WGvbry/6v/vZtX8f9Fx8/+N//B/oheILL +T5COyq82M0Zis5zPheGn+O7HMMEWbvGL4/G6G+2ha/UrR7yXNk0jxU0aK4xkUvGXUiwLJ/sXxDvo +SQfglZ78IbDBg4yE+8lY4ybPpfCK3opHax+iWeIAfFVsREjYj7meMzhf0oeHFney5XAf5npiMMpP +8ptqv8R33ePnsJpcxvBcQen8zacTu1N1rS/ZYyqNy8f8+NDy/n1vmPZU/BrMnuVxc2itRn8AmCHZ +IsQyRPzT/kPLsrrjWjZGTOypcfVsPi4jyBaxO5tyaXdgA3+yuR//Kee4Awz36RAU438ysulQHDeW +KUPutIwfvq2vNXn1PX01OmrbuzMM5Qegrx8ntWIy4MsUx4zdRdyMn48VNYCXcVVsqO23NccBuCL0 ++B7n9LGGWdeGcVTinPQNjGeff413ZS5FQdAaEg7fHry0f79fy8fPGj0Mp+/USHPa2Ho8bMYLdYC2 +h/yh7uwyruVzLQ6dgZQ0UoyJJZyVic4ScViGC2TMM8UDGJ54q+D4OoEnvAJ0zC0lRnvMx7qx9U9a +/TTUkqlU/AyKnCAw5Ov29VeJ+1LV+c9jg4IU4DTlFucKV8Q/1OJcx3ncwMXM6efVNR3jqCne+FZn +nNXTn3QZ4wBsdebrmp5L2RA53iM7cpP05vHp1czXFfAZ67D5euF71kg83S7Ow6PCsjMLqexfirju +BPEvBicS92AEwSVO9QlTfIWY9P0RDpN7wydzTGicsN/4E4elxwlYmP3kDeueB8Kz/LDWsb8i34A/ +dkx7lkONFfb+Nb6C3nrxtifgzoWDt1w9JuZS+j7AicHFqnOcNZHhvDBiUts3ICXf1aEZ0Oc6Peah +h1x6Ilwhp38MEVv9wWkkRjuJFQ+bn5mOish6zAQtF8eH2NAu3jgSOWFEy4k4seIVxqjKunnaq56j +P8ylh+MUvuIof9IdKZ57OT7QhTc2zPF1DfZbi2+GohsaCRHzb2naJB14xpPFglQHyDs4D/Smxn0A +nnp40BH8BR1wDw/tY5WzDxC+A4bI3rbrOAAy19Yjz23mPGIfLdXjaP62/0moq18cTd84RFp77Cg9 +jE9MH72EA/Fh5lDu8V9jItu6rP06rmN84p4/wwdAG/QZbx4pbz/ZfEbQWPNCPFhiMUA+lYwksXmy +YIcCHWBsJ+JjishxgP2hRywJnQw9hQCYGrEkHKDsF1rjOjZtsXCJ76ybKeRxouS9P5dL2r+v2JaX +7kFBwbM+1QXHDzj7xUE7wxojxcen5eeOLtItFi70qWDc8CoFAHW2XVVmNsYIwjqz8A/XM+MAz55c +Nahi91J2FKja5epOUXmsfeKBAfUaL0IM1l29p2p4zd59+5G1P2sfNZwLrR5lI7HOv6R3AL+zHc5V +xt6dALb4+PM+qdLjecW43E3G8zPIcVpsaKF7hQjoPm5uMV2synGxN3WY5rYcKWSMCft2emAu3XMr +u9X8ZHP43VPLBRhBOB5eJHx4m93GmPQxfBRPIzDn/Y32nL3tsz9cDoEwohPGChdTC1WZaw8HwwvP +KC16vxmgZ649uYfn3Imoi2drr4Ot/8Kd7lWZ2J5VnuUBP2LDOMCI1WhM5OCS721H0vSMxu17uJ97 +/7TDhvDt5V6w5n7uD1TjWX/Q/DyGghIhE/TGHOF3NWcbP4yjn9CGz8plZZ4dZ90HaDO+hKKhj2y/ +uT8aDxsnzOZvI/YncdtzW/OYDAFkjwmSiVYYQfV9/MLENNacGPCgHo4LzGcmxEv7k80lP7FaxWI6 +zM8O5vSu1VbzyesQj9aQDacTY8TqMZ60jmaf4ZYq0tt31MdD6u8Upq23mxqR8WcmX5gutZgazxOy +m04afOvxwcTs3NxcxYN/81IFEPh9C2N+hjHvL1xLTVD7nnB9U9l38HwIM3adJ8Yx4zyfPS3PFGcE +9va5nfqVZwd0DNv+MAKg6JCmJR+ctwAzRxpMZs+dROLHNxgOD9rL1h3de8KbJ1g8jg== + + + +/EUIrA1hB727ddgDB5/DtlJsnfFXmMxFE/lRmweOwLlqEBtV/xgOZIXXQJsjOx8NQWWP5azbmKt +RkD7TvPvui8qxneA9/N2cJ2Ow7Z1TwVTLwoR/du9Tmnv/1jUgt/WmM/uxnsIwwOSsTsSa9dQj2U7 +h1ONtr1p35uiRZYP+oSbkxB0+jH231EdAoFlfFoEG1NZYUwzVm701CIgN599p5fGW7Aqt9NMhcHv +/nhED8yvcPW4epSxpfz5ugBg367TjpXUM+A6avE7xUvnXmQ42oVg/5YJnHUm4qjxZeyg/KMGia8p +h2mJ/I6tyhwXdu53WXtBaSfHxhjw3TNR1uoRaGpx+zvmaM5XxFORsTuWDdxr9gkAIbunt4jSE+Eb +7p/FP+TBxoYtFk5sAB6TE3vLe/cdwGi6qcXqIv98rCTK7SPNpmHkw8jotf0pRQ/QMq1HDIu4ch0A +7QXidaEPL2M96zll/NFib8usPpaIsX+9wl0xVXwY04oIUCQZysfrvsP29I51AHxFezU35cCXIldB +J5D1CiGT9ew3KIYB7r9XpDVyXpRgHn/Uxnq80XZ2b2v//HPya0eqVaaSiiL5hwyurThs3OwO0cPa +x/3wPLbTsFPMx/9/7NKiL/u4F/qRtu4rBszRSqS424rxNhb67AsYIZHzYmWlVmSNc4Uvtp0ODy7F +3cv8+/Uc4Kyh9nPJ0s35zdLKF/10nhif63jiCtId8HIICcYd/2EkQUc9PuaANikOwGH95Yyh40+s +i0px5j8hh78jxqnu/SOh77Ye3vakvOO+JHaEsm1/Ww9mm/j9rFAFutw98RY9ciYp24rkTM7hjebF +NeLry8h3JL94DQvjXs0fNwj9SVdEFHqJ1fyHuezbUrcuKS/J42wOTVzoydybQ8a200DUVoRQbpQY +9BhO+8nm4+awXCfMJ5CU29l2hTP4NEkt8HO+uK61jLcszcbjKOW5FxBsacW3I+MTDv3RnJrn0S5j +xgBxYv80j9v81fjxoP+Ft22REVjWqLENVYo0QS9hZDtdbYkqtvgtdkXV1cINkjHipuxTM+IAOxR4 +lG95bAdkyDeGsV8hq9Ktd0S36Rg6Tzgi9+0XnkxFvueZ8pQ4atmzlNsByHxiVgw8/mRzCB/Gjsqz +QU/1iSnvnN1Zz+caUwJbAIe3UpMS5fipHFJDBjS0ZWggx7XChnkvKlLS9AHjCRw26QLYNXgnW1Zk +iHO7NcwhEK343biJ/x97X9vexm0sej7f59F/YG/rxmlCeoEFsLtx0saSbNepHLtWXtzTpjoUubIZ +U6RKUk6cP34/njszwADg+1K2JJJmXyxyCAwwA2AwmBkMXIyHVNaD7LBmTILyUUcoehwTFVmsLVLl +YjuVfVzSCTk/D1VktnNyHl+RSXmrp5mDQHwm0KFMWPBJ6eM4MutAP3LgTHGEqnGBLhJNiXyUV85T +IPF0zPUztsvh042CpwvlkndAL+aVM0kh0EcOUFSsRSB8tEQw7AFQKjYukhusbqNNvYVUeNeeTGzW +9cBCjk1VIpsUiok1WlmgiznBZwK9iSP1ckOEiMHMPktigRSKZoEmY6DO2blGfg0f2eeda2zEo0dI +ObqQUstYIL2xGKaWRZDZ96/dqrOnMeEcdY6NVo8UWeQ2pleXfFiop4x2M442zXLvzDQuONHYOEU3 +aa2Dil61zJxILTKeS1jWGI6jdxtmFMNqvD9ZmFhQpyLEq+aOshBITmWZXOG83ACkJ5otCTECXBA8 +m+0+KNzTFE7yeFjBLj4Ky+b6ieb9SknfWfa7YRiiNTEI7Y/P+Pg1H5OEi/exnFHsRhAofFisc0wS +PgmaMbtAjEoHTJ3kcIZOxhvcYXRmZgQcPs3OJATmfgPygbU68lAl9uyL75z49mFd2/bxtQvJuyUa +L2195R3VeC/BxtHgW5curAGBhrHCzJdTnMXTNx92U+kbA1xezCkODYYZJaLZyQjovRW39tlQT2/Y ++gAdfO2FwWE5pEoFMO+j6OO1fiYB+ndwoQp7hMN36p2zFh+DpEwgrqxhvPRKowV6AzyH+CNM8bnK +vQ/r0Ho/CDu6RGpNs07WuYmQ2r5YaZ/xfsWv8zql1BaVNs+V1elc0LSkVwx5X+SoYmmDCy1SF1kp +Yj+nn/T4xKQ/hPMRWqAEZ5WY3adYNPM2y8JGgSBQe93CB6TLyIOSuPEWVmG2vc+sciQS68h100Xw +LEoiOzvHX+JbHrlfBom7RVRYu6EbaV4HFO+d8wWUwnA8F0wzVrpwr/kHl/WqFJtHEvd0lNttJMem +0uy1ZMWxrV7hyLWPgvU7GAUR1V3oWh5tHrZ6br0DbnFILsp6HGqtVrVJ8lhwaxMQkCvCCUPtipKg +cNPHbhPzbksEBxDal91NrNwHu+J+b/i6hcwCqWygRrBg/4vU/mpGcPmlyqomiNV78JW/V4QPyzBa +H4efRRsS65xJFjnL6H0ciwBtOizMinA/DE17HA3NEQ9JbFwRzlmPCCQH9cHOnfqO2ec3vdBxvdV8 +3BSS2S1NUKazUJ8eXLQdMBy3Q2yUbqNJi3mD62aM9CJHpiqaMoVDQDGDfMmBEsDZ5vwpDqeyO0sb +76xAoPaKiBB+fjsrm7HeGJ7g2h0DjRWyDuhDpI1zuieFfYeXgMpfmEKw804Za3JzQMnx2KzSz7p9 +4VauYhK09HTlBav/EdYi5x7w/TAsmRoG5nzaQoFiuAf0OJAFcqyxsc8AWaBxx2ZjhRAjIH+KBevM +ja8QbBt2ljhblIOVjL01ZQuypdFYv+GBq08eSwKjxGCs7C7HjJKpCeCcj5d81wmAFMir/D0JCzRZ +4ZZDGi4PoU0lz5i3hhFwaJSxAt5hzfw9C38vEYW9YY7x3Rral/iEzUd0eg7cML+KsFmxL8zYkAy3 +WbHmqZwNE6vnftqnXlNHYxe3T8+cuf3T34TwShe6cRhImxHvtdJp6tAt5w3Eh7Bz1lFTrXgHl84p +baIzCCkGuR/cgjUDylGq4rsYC+5DSb7qSP5SC+RQCHrtltW2nAcrzYLSBQcQJsArbSbhPpEny6mt +ho0hCYtPhDqzhfZv2VglWfJw20QyYwq1sZuBBRqdca+05onhZontgrMDo5rvHETYhZyBKvRA8+Fw +/nU5VhGNDyTDM4VijVyk/rSUeBYGd55wOruytwQKJjg4HqNreOTEZN46l47I/QVFf7HTgTPh57fi +w1kQac6kI/Kxhc+BewjOWE5mueK22PBt7DVMbokv6JIq2WIEgpng9b7cvg3rdgu3wHN6MtEhNVEH +/MU+uq905MBpwoKSAmkZrZdoSc5tsUfAWAWK8ab+xChzf0lOhRWm/N03ZfzNG++FF0GbiC4n5t5q +abwHG7vlhXow3yACxVxkhQyARvPYspo6456dA7sIYmPvuY2XNdbSY4G5C4E21s7J9gThtxAOUhO5 +jc6xM05pNkg4W6q77sX1Kfd/WKQWyDuFs1ox0E/6lP1qaKYI9zNZpy4a/mpY4a5NoOVD8u3QgiOw +0UzCQjZxh2M0ssicr6poyUYW6W/jSX+kALDwwjuc6xBcZH7J+DveLCNlYbdKhLkwNBPZSAisY/DM +sjNLBgRjZblbWa79mdlKTymsSjLGQXxckXcEqTlUlaA57+CJ9Na2cC2eLgtaYJaw0iWlveYFQHYX +xhcdJT5iyK3xvi7Rk+v5pXO2DIqUNwrhPWNoMCz8fV4XZojPSvu767CiMgckx40jwTsQ0uiGVuHO +sADMc1bPaH/jkgkDvXcRyxp/5YnnTOpPZng31q4ufBOyYONREplB6Thip7yz6ykfO6R9DgN8yJ3v +ZuX+ZInG2czvHX5g8CFnyftiWjDWcLRM3I1vifYNv0fgimG0ZO5R9ua9d6Bov+a0VRDrZLYOQjrV +gu3exl3Cwhv5abCmU2iEbS4xbLqX/oYY29/QyO8HMQQESLS7RUy0Mwbtfv7yZ27YJ8I3hrUNOGKP +gvY3FjkiCIGGRTfH6EsMZDA8NXD2MoLCWarGelD4MwlHmqCrRvFEVgVr2ejt0bwW6VFxCwyX5Nhs +nMfiKGGbFqZr0KmX6AmXTQVfYeRbdvPzPbADRvtzpMz5Hpmmhzi5XDQJfWXN+Rdo5ntnV8LTOFMp +E8WuB+0TdPBj7HZcvKconOVdBocF9TnIIM4ZgL49F6OKeSE0p5UI9yzd2XZuqgnjLETaBwai0zH3 +eQgSwbkmWAuMRwVfrNfa9zXlsgWrwXRz1xZky59LNsD1teHrn4WzRiFSpeIxsEDj7gRpe2JkBOFa +NYflpOGYphtOS8D6gu/hksbi6zuvmsYAH3YFk1+BgO4+BcAoNYTii+Hek5wy/bQFHjkwn8tRYnis +sAAyBtqwW/Raa+6W1MFDrn2+BIoRYLR8UtX+eiUAM60UA7PUA11nSen3fnM/B532gziNZ4Cbwliw +KBSLd56u6I7XPs+B44tkD7lhUzUGE0jWR8jN7N3+4f6wXatYNJfcea04GCExGQN9TBLFHXB95W4k +8tvJFuj2UuyTYaamYa5I71pwr747oL/B7Ey0sy78W3CWc3IZ9hNikIRfbcbptBj64YUorVtGEI5o +HC+KD1RLXu6pi1bDIBFernTnikNH+DaGtr4iV1/wVuzjbFKvo2hrOWUEdHSwZbVHEDYtvlU163K4 +K+uOFrg75NIHxdBuN77k8dI5nyLYFZSq6MxFGrzFq/xehudVrq4Kfz5MGWfh4nfsxs+12STvDjwW +yIZubR+atkC6DObIKoxHQC9nOzlYcFHpL/lr6/mjgnwtXHlfGoZQBZHtrgEiMGMNXDpfWqrtc+YW +QYhI0V51iQZRW2euBSaCsVJCVLcGQ30Zcg7xJTxEkLH6SMYLBrMNP6hEiMHw5OYAB4wBc4ljtH1W +25OrfIIKZ11DoOTDLGtfiJWPBd7Qge3zMrSvGjq+cAIH5c5QGK6Wsc4gE9ZeEewVH4pwOnJg7Vzr +2gfDpsabF5FxHITH9x9oNHgQ0ULt50bGdxXSOPKDblZYIN2GYsakDhjUR382Qahz2ADaxAUiYgyq +Vxw4jG1+BgnD8yjjfQMt+yz3YF/MGegRFP7cDuBccb8yyYe2tOB0ThqPipY1hffUhiM+AHN/uJM+ +vrGwvmC3FDMfSxnSMbCEwqOoPxeIKMIyy3kpZC7tByLw2p9xHgsEpnzAzr17TiXetBVyaqlw+Rpn +j52G8xNK6KxgXddFatMFfraNiVwzAg48MVbWMAKWksZKcS7rzUpoSfrH3kwUdQqTTTRPe+mMF5ht +oGBPLXnIbWPCRztrf38bL9RrPuApY/jq/cw8FWlkn0wSH8KsUu0Ve2uYwrhkxTnu/B1HhHpDCbu1 +qag/L7gURZR8OotbsghUlEwllz4GOjirdWbjmlSIvjFRABGAOc4kZJxCrD4BFNmKLJBdt3S2yT0C +lXgNSkpGwHPO2KsAdYpLl84nq60J2CLQPgJX24i8Iwfma0LaW7+VZmNLyDCncJi1Pw== + + + XrH8VjjVlN+XTCjrRT0qKT+4sso7R8jSWLcR+8Ib99A5YoHKKcdoZ2ZPn8rs0nazVrmi0sc8sHNf +ZT66TFs7OtcPJr/E3VhHBN6orpKEsRpviaTdmBFkklNFpU7BVi4sX8XmSZX76wXaBi0wAr4eqK3L +ha8tsFfQHdktCj6oa3uz1QJlHmS9CNchpAkiSTs7ksq9b0LbEHUH9G42vlqnUKZ6gZDyhTVV2AAo +x10XwqOKyOlj0pwx6NQ7HFIbn6DQ9SVZv+HDB6Zrl9KfftkxqZMoBZy7oYOHHxaKqRMdACy8EYUc +tgeueub9mkluBQIAOSOEkygWyI5RbW35jEAWYXsVfKsl6D2ZMwcCMDc8CuHuB5ZlqnQgoGC9k+9v +6fhIR5Z+rp7ryYSGOlw9pdt/DhYyH5KqZusLn0sKt2G74VPCfT7Tulx5AAvd1773qceqbYQVApWN +PrNyx/gUVyz88TzGl1wxb7HJvMLB16HCfNVScX3pw/6Ev6qGubAkDzYF+Vkg995wPjLtBQap7Lay +8WlftI2kOXJgKXkDdecGzGiW+IxkTulHoGRNWoUhNV4ca5+ZR5to/kinBGHJTLiJkvi4SQQL1vlk +bh0weJlMsNRMXVorbfgmPZ7To/p81U7b2wZMF12PYT0udxgKYbgH7pIaBsv4xHI52y90Fp0UReFv +5bn8KLY034jLbWyPK+t4kON5gU+KOV/nRbDmvJHs2Ne5D3tHJlprEd71K/yO5g0zGhW5jI+Kzhps +Ei+GXP4pC8xZPJIaSPXxFqMXeXTx/siBw+mDeF+ne5TsDtXsGzPCO8Hc2cWiFRw8oxv+EmcwyzhD +MsL8bqj8JmmE13W0Tw9l0FTC+SY5z4YRPoJBW8nHCMLSJH+4JUpaq66dMs5aY6S9fOkkjp1bJrWe +ZctAw5oZgXlt2u3QpP7is7bZyOr2yq1kEySoC8yUcBNXWzFx5MC5zCfmi9E21sRRlvAlZaF4xkaX +yk102qf0vnW6u50JXqAuyscEd522y8zWDxl2sVXNRXMxYUHAO+neBEEhC1w/82Ngj0h4pT34jd2h +AYGZ8OceNrfQ9fc8XgN82V+4oAbtnR+moCyFbrYLbotd99qmm2C0uSz8ATrnnAdJZOTn9EqYNkEb +b9ewZ6RMRpkYKWKF8GLqBm8KZOUD0zxoti5xwAgAQ7JRWryMIPMyliSF7VhqQ7ItGWnBOSW83HMx +dJmyCbjdjOMVByU56EZHd8qhtPSHL6FdEhIVpUR25qkMVe7UH/M4AYeySU6cOC3clM1INkqeXNZ0 +nWl7h9ENmN2PMhDd3FmKz7Fo8QSguH5q9RQEanalKufQz0xggDfwZSZK2Jo6LTrLIreScFmrsswn +RtE2KMgiyKIIhtRlfM1ynxJX20R/FshXUd1RxiLIo31OcyBrlkdWs9zFEhHQHz45GQafWAoVEstw +ShHjr84g0B9cfcKLnH2YeLJg2QRFg2WIYyizIopGoDxLFqi195T5y06YGUayiZayKYbMNj5jros3 +RKBXy501N0PrgU87bfiSLabRybxtyHlRAahCZIu7tJnj4d2nRwz5ehKfu0TbVB4WmEkOAhKFFU8A +DG6qoOog2B/7WNPOE3uN1mJ1OTcQ6EVGYG0ufNRxMMxQGiHmonRnhVzEsTkFn4MQ7K2JhTsz5eEi +nLZpyOqUsyjxmg4pAYwgJJTMrYjNhY9LxFNjzh1Ik2Ddy0MHApjVDESaskah3dVdLOnVMunT+1BZ +XgZ0snadLbxB2Vm0MRUTL03apm196S/vanukc0DlFUt3mZFSOXFHOb4agdLrE3hWOXJgvxtod8sW +YV48smgCIOchQeWH3a05CmjlyxoumxW8kNgeDMDgKIlSssnI1cEyO08j7YtSPFhgyF9KtFgEaJXx +O3rC9Tka2jkVJuv7QBuEZj5zdWhJ8BzM3f0xAPITAS7vNdeXXvsj26ED+qnmkt+lPkokloIE9lnP +Oalg6v3C4wi8+yb3scR56lNCRGVlpKtzhhccAG9cldG8KEzq9TR7dwmResMeJ9OiQWEGhLxXyBfD +eorgpJGpzyYWIlIAyIZYYzc/RhC2Io7JyVVsPMqtswkTqvl0//T0uUWgfDw37lDWvJDHZiZ29+Zo +iGIdxcccYP46fzVFKsH1KROSii03CAzBED5KBREEc6PbTLGtnM+xnOKGOuBHVrCZKTc+FVXYDTDb +XsHylXcuzMtnhO8rKxl5FoUuJpljlwkJh73IxEBpbyXyaYJy47NF4eTKONMcGuRZSeFAd8x+60P2 +Cs6CGYVH+Hv9eeHvYQYDMwJ16s/sCSOIHlEwrBYX9DSLn7N2dRTCGkCUtZRZbaAI54oQiVGkkTqU +O9mCwMJ7ZNwZDIB5CPjTbIVFcHBT+HjMQnmvO9qIktyDM82hVSz2UJPyLkPtkg/RnPYOINZfSH4x +u8Lhhleb00AsVoqGYhuNcUQYf63aRYRatMbeaVSxNZ1Yxwyny6wWCIKfY8O8E4qMzSYeRtsvzKbA +tnf3Go0FB/5Kl3+Irk94x4wLKi0yf11PW2P1gUNQZMmEroDZebzh2uXoxGwTkrMG0LHU1ndZUJxa +4eZH7hOqGM4pxFkZLYWCjXLzUvanKWdY4LdoKLOOpdg58YosJObKvTOa7hT5PIxZxCkVcgFxpmS6 +LMRJPihPeGCrz6uc2vgTxJDztUC+6UCXWnw6TcE3V/l6mi3r3hzI/IszUU5evADGl9hpb+BZkPuU +XT6bPAkBTn6UJYInIkhhbsrdb8GSijMBFD4WvXAB5I5wa1FABCGbZeZnpwkXajl1BflA/QV/lXN9 +VfgETu6QS9Z+n6DR35yiucP3dsiM54A+RwNdpbDANOckWsEjTuqzR+BicGgj4IdSvOTSPsjSzQhe +99pfAadLik5u+Ou42kXTF/PfrvC5xFmPLVTDJ5DlJBEACymw6LrCgRNcRcZ5UfiueKHifJbuQI9A +lwHGPdvm5aTxCVCdQwJFsuIrhQXLaVRCwuTk8wGCNVNglbBC+hunITURAtPCrxlWIosQUpp5JaxA +jZWv2sE5QTmgyjlhNEWUMwLF65ZMixYWbvCz37gQ9lTqlpkfQuHt6yHXCiLI/Byw+zdtXpysSWRe +QgC48IlWXbqaQsR5XnXGQJ9NkzrF9cNVx9zZMBFY8LX0zB1dAcgviuQ22QUjCPf3nAICsCgJlYuh +KtDjyldbw52YIokS09CNDVdWcIpOziSBecAN89o/tVWEZ65yn4ZhOr34P/bO9kTt0CmuQSIr3CDP +Z4ANn2hiYD4L6JU5Gd3A5vCKsey49KZaPT47uQzOLa7v6YuKqpC8wuOcIMClnqeTIl8pxmnkKENL +LV9AVv4AypE3WcMlQMNTccpCQrEWQAdof0HSiUQq6u8eu0tDiNPnrqYbZR5BwrNZOl1O+GBbvPOY +cf2J7jNdqZ0EJLDINMojVhTsFmeHBwK1t18704CM7HOUE/1gqj5no8lTf+Fd29Nsnc9K3jXDiWAJ +7D1GhT+DcQLtYD0mIJ9haTOKEMjpxrwbSASk4xxA1vzp+73EzempM+Y5g32Ybq4ZVRpssy58BIFq +LC7HH9HCmyYFn3H5GTsf7TP/hCf9i2rs+aEjrj+4LjuiSuMtMjxLQuJBd+KYSX94pm3ijsWSd/RS +f4/MXZNBoGQXLukB9cWXLGbekQjpVzhwYBzIqXlmXAk5c4brkA6WUj2ee/CMVMQyeoKtYBf7NI4j +/wbbRO4IfoMtLXjLlS5Ieix3BCVad0DNYoqsXQeMQPukLXxLy4SnIfkOxqzkFfws20TqA36WTXsV +I/UJNQEcknFxfioE+gRE5KKYiZcbTO2N0YnNAcE+dxdnpSegz87kpuf8NAchhV/qAsYJgU8JEAN9 +PgPWE6b7dRReLhrLy8YPF/GVYQRrzusWFGmOwEQfms9+lYGIabn6IYEC24HScNEl5PufkRfOLryp +vE/nDuwv1vPlMpn5qxtZw0UsySy6lh/MFVg9Y+VUurgHbKpIPNDdC5pqP3p+xp2KcxsyG15ekh6c +8MtJoSy/ZjE/GSK7O3IfsInAuGR99js1M7t15J/mDKlT6VjMT3NyYIPfVWXmTXKZv3I6n5OF4VxZ +vIPLPFI8OZnHdAf4fSJSw/gga4R/OzYv/GMjPg06gX1h9y4JAXlW81E4yaJMF+HxganWwhO2E8V9 +N3xyXTrT+W74pAbKZe1EYBbSjRgzrxvcYEh4TTeJljSY+ZOyf28p84mn/GtwU1jDK1B8fwRXvggv +f3KuU5ckyz/fqFmSaiE49YdR/lVglxN0Gi+LwMSmNbI/oOp37sBJ6p8Kzf0bdrnP+MpJ3RGzJyWk +K53f45D9iZ8/EHFieX4IaLpj3GPZkGxIlgm/xSqEdzO5jZvTABTBYsjXvTENCweaJS7bICJQ/IZi +kohwiz8NN9j4TU/hTVIhtm+qX2GTMSF6jN+0xTv3Bbt/2NlGRdn4n2sP8/EclNCEt4jMR1Ny5AkC +C2+ld0exqfZZZqd2fSu2Lp4zVLAHjcLxjhw4DeF9MuX7jdIHhXB/p9Byc9pGjdqdzvi3fTFVHGsY +4eEJBAs+6Uv/+sc0EpabJgoh0J4Y47Nba5tRm5PueRcbKfJHM1Ec+TfugrZJ1wf4ia9wgS1c3MD0 +v2nwTAuOKaY4d4s6zRg4gZf3rMLnq3Zm/nMHTjWHabDfGYMblb9/UmgObjTGW+nZAIVFg9eXXwss +vBVQh7zGUx1gvTSJ3C10YejcgcNjtBh8yvEf4ZFQigw+mo3jiB6TL2p3P629/HHs07wH5jUCT77t +954POr1Rp/eqXrdgenc+/mHv2wv8RST2p+MfHj/qdAHN3j3/sfbF3r2XT4++7bdL/HjYaY06/V5z +8G7RD/drd3897/bgpzp0a9A5vRyVw09rn+/dezAYNCdKtF53uu1B2cPfZe3ek94o/Ib/jN5dlPjb +XdBE7nxau/d9r9MC8DHg7b0aL/q22b20ZX/ptEevFxfuNc+pLHTFlf58nSl6XXZevR5VJomL3zhN +/dOfy9Zov3/Za0P/9vu/ViXwjOYbFB0NK1M5VufGSX3w5ORB9+J180RUpbHThpJLaMIyN05K9Xn4 +rvLgvFtrOpbMy4iOX/nv4u6ui5gcXQ5OL7tlr1VWZYWtWpEb3M5NDywc8arSc9oclo8G5X8ugQnV +p+tErRunUFYlr3d5/qw1ar4tq8vJuMqNE9brH486o9aS7TjQN6TS33W6KxA4VufGKcQlV5W6QTm8 +7Fbfx7l4FQk0p+tiQddn70bRplx+V1GchD4vYP8aj0unt2QBxls0lr3xWdbpVaWlf1EOmqP+oDJB +ocKNU3Xcvxy0yseD5sXrTqv6YK0wVre4eA765xf9YWe0wtq5jn6Qlly1C/cOy7Pa/d0RcP0o2h0B +Z1C5JkdAtTsCziBkdwS8FTF5NmiCtt/9tt8ZbtkhsLKlZTPPgJWlyO4MuDsD7s6Auw== + + + M+DuDLg7A35sZ0C1dWfAFSjalDMgHIz2y7dl9/h1s93/ZQs8ZHW5LQekVSjZ2iNSZU17OGoflm87 +TezQCqpoXOnGR/i0e7lE1H8AXfRWdAQytmybhvC4eTkcdpq9/aXDto4KduWV1K4uFttrffhuV5eK +7V9vgZD+2dmwHC2fTZsnBFYRbJuy+p/RaG3euu+iZonRha1+tz/44pfXS4848ab6rlvd2uhK3/hs +qxxwMrwcnDVb5XGruQpVY5VunLjhRdl6drlk3u0kxJiEuHHfYOUJCIN52W0OHv560e+VverjNF3x +5qlclciDfm84al6ByFBxk04qcFyD/1Rl0m+VufLbbRw9xSq0rPkxWq9Aygc/R1+LKvK83+mNjlYx +MF2PrbI8div2yOkYm6cdXem4uvM+3Ib3YUs1oRXJ2pTj0hXcKesiEyrvFm+W6ETRWGDRm4/DqEzI +EptKTIhaZ93zTVqdkHStCam+x7y5jS1mZam17ntmc9AZvT4vR9Ud25u0d3Y7o+fNzrKz2OZtnruI +hIpb6Oaco1e3im/KeD4tB69K5OTmqUSryo8tHpLr68cu8OjD6FhiF3i0/oFHH9flk4N+v7s/KMvf +Krve1jfAaoXJuO6W4cqEbG18VbvTbVb3B2/SkaeyPXezzjrXG1m1rmNE0rAiIbchFEWjclqIQbPd +uay+dXHx21OR+4OL1/1u/1VlYb4+x5btlW7Xf4dpbUXBmsu06reYdjJtJ9Ouon9vSyDvaWVvyKYI +sRVuMK65EFvtItAqUuyWlvymhu9ub46AyrvLZuYIqByVvMsRME3g7eYIOK2u+GzKxlRdnq/7zlR5 +bDZlZ9rkrA1Lwm0iIbDanYtbumyxwuRa+4CW08pjsxNi6zs2624keFDZFXTwutnrld3jslu2VjGy +TVe8cSJfVHYTXZXI6Yq3th0ddoYX3WarPC97o6fNi83bk86bgKqyO3kjzko1/m9t6qMY+1iVavpU +XR3n4jcvKCsbuzZmE6su+td9E1stl+YGaOIHeEP6aQXxsY5ir/r9zE3MlFLZmrIxcqD66ll3OVB5 +bK5BDqzL6jtbKbjrrNPtrhK81r0NpWOJehDZZ/FRqup2WVv65m+sVBZ7gTLf/LfU/4oUTtS6BQNt +r/JMbLZal+eXy6MkYvKiKjdvVa88K9vVkzTZsjdOy6Ckg1bloWq3O6PO2xUGyldY33tuZ4P+eXVJ +SIXX15Mz6lc/SfZvgZBm95fmu8oLCFSjUXOwkiply9/C7bZe2ax8XajV7Lae9qtf+Ygq3NLJpNnr +nK8goa/pjspmp7+r59sSNtPahc2s61Go+tBsiklkFzYzbwO/rbCZbX9fsXo2tV3gzCw73W0GzrS2 +LnBmBYm+7nvTLnBmjfanytroZgTOrDC51j5wprV1gTNbJMR2gTO7wJld4MwucOaKgTPiYwmcaW1d +4MwKon/dN7Fd4Mw6ib2tDpxpbV3gzAqrZ93lwG0GzmyCi2hzwn9WGMpVJ+UtDeUGJytcISBtNxib +m9djc8bi+vpxu33YmpSRD56cHFKqoJPV7EtbFsS6vemSbiZP9Lpevv0Y0vPs5Fsl+WZ28m0n3zZE +vlWeqzv5tpNvDwcA+LjVtxJZsJNuGyLddtrbTrqtKN0+auVtJ902SbrtdLeddKss3WK30clqzvEt +E3KVif8gvuiN8hLuFtEKiyj7mBdRZeJ3i2i3iOJ73klNVw4EtGS/WCEWMKpx4+rYx/Xa1vPOr2X3 +ebf57mS1+5hbJgcH5Xl/WbqIXU4a7Mht5aSpKER2CWkWk3ebCWlE9Tm5y0hzixlptjX3yfACs59U +peu9cp/cMGWdXrs86/SWvn8dj9pF2RwdrrDMoho3Lzlq4r5MakLDv0kN/n8fPsPf+/BD7drvo9zK +sWXlRDbrokrd7JHypuNlV3hrfVNuCWzhY5mrDNNHemFgMzw3634BftlC2Ew3W6t/ftEfgjbx7HKJ +/No8abeSaNiQOPsDHq/NkwuVjYhvltinorHAojdvb6lMyBLHVUyIug1duzIhS8JyYkLStSak+i7z +5jY2mSspaOu+czYHndHr83JUXRvY1B1063JQXkU9+Bi30s1xf1xpum7KkO5uIe78zzv/8yJC18L/ +vFrOxZ3/eed/3vmfPzyZO/8zFd35n3f+5w9O1w2+vbHzP394dRM90DK5v5LqufM573zO70vczud8 +NXPDGg/Tzue8Vg6Adufs7HJYHvR7oBr0qi+fqXo3Puneld1u/5eqdHY7r16P4Pd6C5OQViZzstrN +b7+Vxfvl4AyU4uPVHgIYq7S+biorrFejbazOjZPm1se2bV7XGkKw3kO0xc8S70xw626CW2X72tnh +1tgOt3uZeGeH29nhdna4Kx537r8alGXvPqhh5X2guPOqf/9tp98tR/cHZft+f9DsLfOz7wx0N53j +prLFtOzCl5XMc1GNm9/K8sqENX/rnF+OlrxoGQt+Ln9r1p/DDpk1jlDtuuXYmUN7TDlyGuDmLQCQ +TNtupRFbbaYZXpQtUJgHuysRa23PWGESugF9+OsFnLVWsPpOV7yFSIZVqVzZtj1dcWfM2Rlzdsac +nTFnZ8zZGXN2xpydMecD0IemG2vMcZYdsunsjDnrfZbdGXPex5hzG3rWtsUlrZFl6tidkzbXNLWV +14u3MzHHFhuhrkDaplxA3eD0HNVzKOzSc6wbIWuenqM6IWuenmPVELq13zu3OzVHtzN63uwss4Rv +3gZ6M2/j7LbQ65Nzuy103ZSaNd9CtybD1ZWU/902ug7b6NZlt1pVP/gYt9DNCQRYeZpuynDuslpt +X1arjyv10/HrZrv/y8f97lDlpFe7xAXroR3cROKCW9pRNvuyf+XnQNuVX6Olojc+w6oTsmR7iAn5 +9RYI6Z+dDcsRzqZB2V5pxWyKMNjGXPLPaNQ+qjPC1SfqpgzqFQ4L6zI4W23W3h3itu8QJ1Ryp+o8 +/aXTXiGIzJW+eTNzWp2i1+UqMVm++M0rJx/jUfsaUizfMC11oStPxep6/m2o+atQUl3R/3WzzB9m +Z/7YrBPPzvzRX081Od8W80d1Qnbmj535Y2f+2Jk/duaPj2hcduaPNTd/fGQH61FzhfiubfRgnw2a +rVGz+22/Uz0E3lauOMbc0k1HuzYqZ5I5bQ7LR4PyP5dlr1Vdu56odfNWvcrxvL3L82cwxm9XuFod +V7lxynr941Fn1FpiWI2NC1j6u053BQLH6tw4ha3KlrxNOUu0ri9Ab23HZpdMe4PyL60g5HfpihaT +d5vpinbZilYYqNvLVrSC9nU26J9XFx5U+BbIqfxC1ahfXTPu3wIpuzxStMnv8kjNzyN1K9aklbMp +XYsl6bvLwellF1SEjTU17vLAbMDluxXOGBtiCr7C7bSdGXahdWfrotBWoGgXhTaDyls3lofN8WTJ +xfoNiESrPhnXOw6tOh1bG4U2qqi0bZoDI9lyD0blUKGdA2OawNt1YOCSu3YXxi2psrsz4O4MuGZL +aHcKXKkfu1Pg7hR4gzR9tKfAyvrp7hS4NnRs7SlwewPZKmeU2MxjYGXydsfA3TFwdwzcHQOX0rI7 +Bu6OgVt1DNRbdwxcgaLdMXAGlbd+DPyx32+/GjSrC+W1PQPWxbacAlehZGvPgZWPE7ucFOtxdeRm +rsiu8UBtyqt9m51hY5dgdBEhuwwbty4F1lyi9Stk1tg8mfbB8oXctLW7C/p3vdXv9gdfnHabrTf3 +axbUv2i2OqN3X6xgNh6O3nWrm8Fd6ZuPmUZat01ArETUpqypRzgRN29JvU8enZ3t9DZsp9uvQKwm +H9ZcgxhSFtODbRR5G/y+YeXEDe6d1IN+jx5vr362mKx34xPvl9crXJ7suofg6xXWXkTlZLUbJ7Jy +MM7wcnDWbJXHreYqWt9YpZv3F6wm2FejbazOjZO24vPDm7JzbdPRd9UXorc3L4ypnHSq7MKXlUzr +UY2bly9pZfHZ/K1zfrmCi9WXv3GiaEu6zWxG16JqHXZIjThaxSl8TdkCDq1cOHJb/+bpfjvFaNMV +oyu8vLzTIG5hf6m8b/KAPvz1ot8rVzhmTVdcXy2d+7ryWXK64k572mlP16c97ZSna1Oejt1S3lzt +aRdlvTGegi1Wk65A2hbHka+LbKisCr1ZUjIaCyx689fPKhOyJN4gJkStNSFLkhvFhKRrTUj1vebN +bWw1q5pV137vbA46o9fn5QovSmzSHtrtjJ43O8sOa5u3gW71Ez0bvIVWl3O7LXTdlJo130KrE7Lm +W+iVlP/dNrrbRm+fro9xB90cU/XuUck11oy2dalt6HuS6zIttjUD0tYnwt095be5KZCqpgnaPIXu +Su6tzdhoNjm303kTUFXOLbIJ8l3UEvffWZ88pCrJ9Km6+ODiN072Y6g6XB5rtnmCY3WRuClyg+4u +Pa2wANdRcGx1YpRtvgS4xRvxZqcUqVc+l6x7TpH61iQVebb1d4K32Si3qek4rj7r1t8ds50RgWjW +x/H67iZSGK/7yWJTxMMGRzOI6i9ib6L+HS+nylcON2U9XUVWbMqS2mwNHEfm5Vk5eNQZbJ0ZZR2k ++LqM86h5Wp0Pm2DzlLXKPh+i/YfVjJpjdW4vEdhlr/Vi84TK1k22RlZLah/HdHu8m263P93ExyLc +9m85UIXOQ3jZ+7tBszc8q/7axfrM/itG3++MJrdlNLEDto0K91UOE5tyzNtgywlF4z3odq99um3O +cehq63BT5uqGhoFeRx+u8oTVnQdPRHLysNf2T1khSCPk5Nt+7zmgoHxMdQveL191evEPe99eEA5l +fzp+d37a7+7dfdBu1x413/YHKET2ktoD+P/LX/Yu4b9J7dle0jBFBqfahlC5ymzMTkOYJMsVfDBZ +ovMcPuS5kZmuvWzuhRifl+/gyzfw4WcA/VITSe1p7Z8/JbU2tvBir540lDIyL2pSNHKtdO18ry5M +QxSJgsINoYWq1aVq6CLNa1haihzaqEuNFdNavWgYkQtTO9gLMCEbJk+y2tEeVs10AVVl0kgSVdAH +qTV+SBtJbgC9yBqpkSlBUlOIWov6oDMHc0h1I5dGWgh0lSBCKR0gWC9pFLlUUamiIZVJsD3ZkKJW +BzRJju2LvCGESrHnngt1IRrQrIGuq0YhjA7FjvbyRooILR5oKCmSNDQkFNAVt9zaA1CRYpu+jIbR +ymWgCshUppAx6aKAT8hs5g/8zU2WBRbicOhUBj4f7HkQD8cRgVRBI6SN0JKqpdoQIFEwYxAgcWwK +6AwyjfAUSY5tNdJEG8JTNIpCmRiU4lxLATUObp4VtVQ00qwA2jNgijE5Arg/qZQSu+hB0OsiT5XF +A5PXsoxAyBZJgMIOA0wNoXHwoGiawqgBf2B2isIQSKUwQjgNtMksYGwkGNDag34lJtUBlAIvRIYt +ZTiquhbNARhgI1KaGAr6o3IuhfQVSZIWAU+YhKExnLzE4KgUdECILHQap1UCsyoiDA== + + + 10oqpA7U15FnRurAoHoqwxojCHTSw5jZsO6gpgEWiIZMTGIRGBgr5I0okDeeXO4jDD4U1jqryRzq +mppqGJXDBJIGVgww3MCCUFrXYJknqZJQwUOAhiTFdqG/sCjSCALrURSFlAjKBaDD5S8RLcyZNO4I +S6CDvbO97/dIeLX3TO3up7WXP+7dOZklqgB6RWEFNWeIK4ReTWDZnlxFZGHNqwitmCOR2LpzMi24 +7pysLLrunFxJeEG1q4ivOyczBJgFrizCqNqkEAPgtBi7c3IlQQbVpkUZ4VpdmAG/riLO7pxcUaDB +pLmSSLPT+wpCza6oq4g1qDlDsCH0CqINxn9V4XbnZFq8wXBNCbg7J1cRcXdOeqC93n3Q6/dqhTQk +45yyB9WLIi2A1cIHa4NOR8iAaTBfTF6g9GMIDGmhUlr9IAdgRYlZIK53ROokTJZ0FggXeUFCg+tN +Q4hnGekGrgfTkFCLBhGHZwoSmp+k7Wj2FjDNggCLKIZRmmZDAIZGcOimWBEBQ5dD7VmwQH7ozyxY +XHeaLQEWd2aaNdHUIb58DxA4NI7GzsYkWGDNFDUFE96ANFQaVh+1J5W0h4h7L8pm14ZcQwVA+USk +z+E0Wg56xXG3YzOvwqnl8aDT/ltJsZN3TrQ7c0WFX8BZZjgaUHzEd+74BWys3dvv97tjJR/20L78 ++LLTtoddoG8aHWbZHIwCIjh2newVPAv8CcyenWacpvYvR6N+76T/Fo538WHqT5fAt0O3yOYckNT4 ++SipvdoDiZEkAvdYXHM5fcCTjf8EYkba3+t2p5BJjnsSfsmsglazSpms0Y+IzVbCnb9ACQ0DI1AF +o79H3CZ9xpKwa8Bnrq9rhBF0amrhaI+bLeB06Ipjd6Keo1KVAPGpgIrn+AemhYbdHISy0biZJ1wc +PtmOJI5M9wELZtgD6HEiUYoTDoObDqFFSoXtEH3AX7XMar4qKDo1yzfXRJ1Q+24m9rhB/cFvjASb +sJgPLAFHe/unuAa+7+EJvV17NWi2OyVMo/RTGtR6gQMsotsuorb/Cs95Cf4HlRrojcFDMwGguVyA +NM8FcOTl+VhBPbOgBL1lv1UR434VjHCeR4w4TPv7e3/6HmY8bCc6TNOITecx89yH+sxPMefHxoT5 +WXcMHRvOqbG2s+AgTIfpvzx3unvRlArzzM0QniDx0MZDHhHZmjfIsvIgQyHQ9MY4neOQiMlBTmcW +RO1tYpDnY9yvglEYEQ3yHMmtajAVBOieNyCkxW0J6YNB2e6MagfNQXuukL42s5c0tF5hxNwnu1Rk +QQc/aUW3YAB9MU6Q41ErJZXffoMvoKu5r3RuoQ8emfuASKEtiZql/Uuijn+Lqlg0VrYH7GMtuw65 +D4wl6r+jioU+aAFQ/Jz+ZrDWQN2Q7q8osDD8e0C8gA/IivBjPapTt3iwZBH3beob9e3MFbOdPnff +jGU1HR4cUv5ArRn6SzyqU2fin+N6DtvBXtTI0ViT2AUQo3PVI9CMaqDJC7HNutBhc1Q+6pTd9rQ6 +ZJeYFkbRIlOpUKBfRh+STCvQbqFMAifUWR9ozcEKrLbqMlI96sbuNzDAOBky/pPRgAGyTKcGF7iW +Rml/VxU04xT3yaSRpZnU0+sdznCIPavRFMvsNmP4j52RoN3t4e5ru0EN41/UqrX/Y+arF3rhzgM/ +4M6la2EbAIGvQOpnGW44CZ5H9OwSORwscWdYiGN/MQ44bYS9heg59+ThX2XpU4HaK2lRC7polpKZ +LCXTLCVTR2ReEmWomdfRIoGUojrqKOa/Yj6tpgjEqpnE5jgl8K/IUmxeOSJRpYp/yJWjbLrC/swK +Jh4v+EVaKqQlIrF9d3/kYgrqOH1WJiLSV0Q6QUy2iJgFFSeJ0pYobYlyA+L+LJiCRFT6fiSZ8QJF +UpUks4ik1E034aabcNMsDX8/1HRL4umWjcNzMU1NEs+2ifKTREhLg7QkJLbn7s8HnGzJvBWTzFkx +ybwVM4sI6660k0vUHPvdnw82uZJl6yWZs16SZetliqTEzi1pp5C0Myrxfz7QvDJZPChqAp5PEcLl +92eVn+i/pO6TdkuzKXH/frgpNd77bBw+Y1WM9z5b2HuyqtLMkTXLc/vvh5pL432PZrft/PRyGO/8 +ZIWx3pP8Od9z4kf7P2RxtX8+xNxRc7iv5nBfzeG+mu4/zh1NM0XTrEndvx9w7qg5M1/Nmflqzsyf +0XtNvbc6pOW5/feDzZ1r4/z3/kDhD99Jo5BSCO+CQM+K0HgGB7VbUOSI8mpXvFK8CiasOg/YaJc5 +532FdxnBfyQf1ETtwQU1rWpeqccjhItUyVi/jxV7p+7P4W+2WF+fkMoiG9c1UzsnJpUKUktnFC2U +VW2rYZ3UOOZhNXq5vSiFyiLhf9KGtRlu64F20L9o93+ZYd4n21GCk2gFK79gKz+ZOjV6hzR5qc+n +IEceUjcNRR8iUE5eW0XmTp2Ri1q56q4EAw720LtsYwsKj8hbQz0MwwKgmA64A8QEXAwL3VwE8qi4 +ucKV8X1iAIV3UCOFR8PEMYSpZ6yTLEMD1MwpexeFdpZkhfk0xOnt7z9otS7PX/RH/qYtVI5r1u59 +2x+9KFv9QRvWuZ2HpIfDH5PCGdqkBhdRWiRmagEcPHjy2EmG7876g3PONUSzEOZou39anjx4UpxA +d49H77rlSWg6mqvY4ss2ihx5haMzrGL2Z5JsZK7nftrhaCe6MB4EE8KWyRqGfvCAwGYPiqZmgGFF +GnKLGD64GebnYe7nkwkTmhFhPWnnoXLDXXB9RJxPLouDvXxq7TCEiWCkTKXxU8nTNMmbavaKBTPC +Sn1BszSIWv9BkpneCPJA5ELbhUgbAEa4YMjMvEopkCWSPKqFO8GqLe1XaCkX4424rWG3yuassj/N +2TR3vPlxysM4uWrP96aWdljIfvFPCIcpARLvd0GozIRNS6hJGTYl55bIvmgLXADyknVK9k7KoJli +aVJ2BZHJkGnpN7lRVvF1Lhdt2TyBYzVK6QSOSSLRJuYKHKqkEhZtXItE24ot7VdoKU/GG/koRdti +5/bY8g3nNvSUqhy9OCYV6BM1cFoj27nOUyPwh/D/aUcpHed4EQm3iM73Ul7Jwq+rBI8XVK47o8rR +fHXPDXWybLSIQ/P84o08yzDMz/1J0B/k/myxp/xRp3s+cdDxh50FZ5xJ7xseckSKwa/APFQyyCUM +Z9SGzDHWzYGOAgg/UDTska84AxQqntHBC0M4kyInNVUaSS4/BqHYU4Jqi0aOIdTTEK42V9tTboWo +mStE5g2MD8CoU2GDj0wjS3OKUYIGMHgYDuDQH5GgCa3ALUAWKAkVdhIDlVPdSKWSM6vKBIV9Kmu5 +lBhUbchmh4HQOTrjdUPJTM9p1cDMLbTGVtNGkkoKDMoamREFbV5apEk+u6rOEbEkQzNuIVizUn+F +BmFgtPUwJgXwF7r7yMcYBREyZ83de9ocvqFP/sT/pAcn71HZnjAEHHQ7FxcdfGt2DHzYGeIacaVf +fgX/XML/6XoUzOzyC/5Cc/5Fc0h3qk6gUyAlH5P8Lt926Bbzu9rLbwHwTz/cdbK70z8/YdxEijbn +l6/nl0GQLWf/l0fzR9XI7oTduUN9OWyOml/AMpLZ3ssn/+e/3vs//+9/5/7n/+Hv83/+3/+9md/n +dHz3++73/1qH+bn492Xr6/3+g2IBtmkUCijH/spiC2BeaH07J9QoaA5F7dHlb7+9q6FUjbSBOyco +fr1OcPLyM6vADEYTusdRp/eGZel9QngygcoKM4nSc5k+MBZd//2kJjERe49C+0+X1JcHFyTgn9G/ +rxA0pVbgfZEpxSICRnpEqD4TGFc/IxRT6kUEDOqEjc4fVzECLCgZd05AzUCqVlU0QNe7sqoBuuzV +lQ28mHJldQNvDl1V4ajY65kqx52TRzRd6DxHNpl5Cgdffwcd4MGT2oPLUb9mF1jntzKcHqbOXM9O +h+Xgbdk+Ac3+xBYaRssi3LUp3F2b4C5IfLxpkmZ4oIEPUie5iT6gR0xhKPTk35VuWws8oOHNNPgg +ZWHDFyJYgjGQ8DdP7ATPVU5x0cL+woADq1EnqQqwI4JJoVRcUTZgcPIIdwSgDlhUDiYbAgfuaByW +ZuR6YOTwQavM4rJdYAjiEr4dAlnPgyUnVPQUe+QRhLpwMINX9oDh3Dv1DOMUjQpVzsdhFjHOXaHj +xrNGTpfRok7DMi5Mno/1GteqyWNyi4bIsiyNkMcQ7nWA+V6Pwdw4OuR+oHwXoiHmnkYj7MnxFQPJ +DncM4BGe4hVF5yr4XRkxxsEYZolUIH6VTiNGKJQHKhtjoW7ovIjZdbRHd1aTLGIrQIosicc9AjAD +PSjwLwIRiR6x54JvPmKf72bEP0+MrxkIdshjAPNvilPEP5zqeO8w5l8Mc1O7IXJeSW76QydyNb5u +cLnBxjjGP4n3mLNoqgIkI/tUwB5DmIMBFlgYw4hMj9xzwnchljLc1VjKMEFByniiWcpEAC9lJrmF +PJQRcxwLYxDRiPtnriM2CH8X2vMPRAzsRuOCB82W6RhPMYZYpnm0hMcgjn8RzPNvDIYkBuTMhdCF +wD/f08A+Tw2DAr0Wc/zd8W6KS8g62IALM866GETkacCgY05paEKZMemnYNNLZBZzLgVSkjRiXNow +ClSogDgGOLYFkOdaDELSPF6m3bcdWOZ7GFjmqWBQoNPijb87lk1xB1mWg0SQemzLiEFEWR6JSqI9 +B5TC5DHLsoZMszTmWAZ6QhZvhaaRg7amA94Y4DgWQJ5jMQgp83iZdG46MMz3LzDM08CgQKVFG393 +DJviDe22wl6OjhgWg4gwIcLWbZenAM0xH9seBK4fNcYxbDmNhSB2jS60e8QRwHEsgDzHYhCS5vEy +7b7taFlyDwPLPBW+mqfT4Y2+O5ZNccfuCk5toXwUeRZreAWojLnTA0glKhqgF+RBwePvkX7HoEi9 +C7WckhbwOgC3HSl3dEAyWazbCcnHLocY/qrMbTjUOAOCYseQSK8LtZhyjzcAqO2Dae4Qy1g9iVjG +IE8aaz6eeKcdRSxjHSpiGStavharYh4vAyKWeVBgWQSypDFiTzw3HrHM9TBiGRPha3nKGW8EYJZN +cmdMd4tYxiBPGis7nnjWiCKeseIU8Yy1K1/NqV8er/secYwhgWEBYulipJ5ybjjiF3cvYhiT4Kt5 +uhlxBGCGTfJmTFmLl6UDheXj9tmwwJz6EzGMtaSIYaxK+WqsbHnEDIhY5kGBZxHI0saIPfXceLwu +XRfjhenICAuTafcLMwD8wpzgT6ydBZ5JzyFLGWszTDorPIFhXi0KDPO6E4O8dsVoPSAwLIA8w2IQ +0eURM+W+8cAw7mHgF9PAEBnYR1ij745Zk3yJ1bHAK4YwUazGMNWs6QResToUWMUaE0NYo2Kc/D3w +yUM8myII0cM4mV5uNfCIexZ4xH1niKfW4Yy+Ox5N8iPWvwKPGML05F7sW3pZuQk8cg== + + + ClBgEatIDGEVilHy98AiD/EsiiBEDuNkcl2jgUPcr8ChPAhugnhaHcrou+PQJDdihStwiCFMDisq +fsU5XSZwiBWewCLWiXwdpzN5nO57YJGHeBZFEGuWdTiZXm41WmmuZ4FH3Hdfh6llnOG749EkPxZf +6b0uX2ViLd4fzGVpavTPT3iHOU1muyx9GQTZcvbfCi5LGNP39Vg6rwr/73/D9/f98b/G/8efdv/Z +/cf/Z8Yc+q8PM/vm/3jV/3zsfkHyCc5ybExAK7s2nDdvwrlhoVdwb9iKkw6OCegKLg6sOeXksLRe +xc0xi3c2xRfuO+yzyh2zne8VHSBQcYYLZAJa3QkCFWe4QQB6RUcI1ZxyhUxAqztDiK5JdwgBr+IQ +mcW7+Uyf5SiZgK7gKoGaM5wlBL2Cu4TqTTpMxoHVXSZE1JTThKBXcZvM4twCLs9wp0xAV3CoYNrJ +aZcKQa/kVKGaU26VCWh1xwoRNuVaIehVnCuzuDef0zOcLuPAym4XTJU47XihBIpXcr1gzWnnywS0 +uvsFs3VOOWCQ1NVdMDO4Np/BM1wz48DKzhmMeZ5yz+CFzys4aLDalItmHFjVSYPUTLlpELi6o2YG +t+YzdoYDZxxY2YWDYTCTThxKqru6GwfDcaYcOePAiq4cpGXKmYPA1d05M3i1QKuYdvOMAys7eqDa +tKuHgKs7e6japLtnHFjV4UPUTLp8CLiy02cGtxbtaVPOoAi4gjso0omDWSdSiVdxCUWqbzDvjAMr +u4WCMhysPJEuLFZwDc3g1gLGTruMIuAKTqNI7R1j7FUcR5FyO8bYqziPgr47xtirOJBmcKuCrjvG +2Ku4liI9d4yzq7uXgjo7xtYruJgiBXeMrVdxM83gVQXldlwQXMEBFSm2Y2y9ihMqUl/HOHsVR1Sk +0Y6Lgis4o2bwa7k2G3N2dTdVpMnGbL2SqyrSV2O2XsldFVTYmKuru6ym+bRcfY05urozK6iuMUNX +d2gFDTVm5upOraCzxpxc3bE1zZ/l+mrMydVdXl5XjRm5utsrqKQxI1d2fQUlNebj6u6vae4sV1Bj +Pq7uGAvKaczI1Z1jQQeNGbm6gyxopTEnV3eSTfNnPifnZUO49qj7fNElw1VvxP61f15OJo2eiOS/ +rszRqWpkKT3Ik4qC8hpLkKwpviFDD+ZoCilgEL4vo1LMiizS+SB8FSQxlByLrknbGxYATFMK6LBt +kv0vlULa4OCiIYGMGpWy+aclKDzSag0JKiYxjLDhFRgCFPk0gGoldImbcEeYJ2mm2JDEVsNnLogN +nErBAY72Qm4F38PcpZOfAfLV6oQ5T2dAUOFKFF1D92wScHbLCkoU7XoUSk30cUk+aHzTCaSRpnUl +aiprZBoTK2h8TqnY5pRaz5u9snty0O0PS/t0xrPp1Fqrvp7h82oZGio0acAkQUN9zabkLVxAnH0y +q6D/4Vd6FwhvJ1Eonk3mTAk67C9cg0pQkqqazcBhW7HBuLYsaCe18BnxFTa5c9RS1GLUUc6bnlPK +uRxKCTo04F+F2TwAnmP/8A+RwfB6KFzPqU2bke+I/uJP0r65ZCvYH+s50VHPqfP+l6hCbvmRL0p2 +V/npC2FzxI+lmqMUpsnkqwhiZkGZiMk8d/Mx7lfBKED4TT19kYUpRryxuazH+F0nhge2OjbVLZ/C +Hz8k0UCNjWD8bygTKtqhtPjceEbtRt1xg/m+D1dgBmKZjPMJs6lkxWQ6wmJ2wSKfHKL5GPcrYTTp +zIyRNmnje6cfkY2c7oWC7EZF0sWzKom2UP6NQiRzWYia/Y2eB+BP8EsKY0XxfOOoFiYlyXING1Gl +pCR1RsgNnPumZvRnRq9DoSlUC/oo8d6nKNT7JU7ReI/W/aPeJ0GkuN3d7PoJ3IDtun/x/cWCN65W +TYHps8OklI0KbTSU/cfmJCVFKg0fpf9Yj0rU07yR2Zem6gqzkNb9Q1f2q43Mxo8U60yfwkNZVJne +z0KU9FwVfzry3bJfoCg+gAVfxnA41Ad73NzRXtQPVHhdRexiTCjv9ciAeloQlnP3yT1lRR/Dw0mY +7NI/qWRZQM9ZSffRMck+wGTJSByLqCLVQ5w5Kx+uWeyK74EvgW8nUX5N+6ASMyPxPEp4hMIn2w3f +uaNoaBPLROHf2PLUYVeY7APuyId5aSv3zzjgLi1k3tDz3tqaWXT2a1tzsU6/tzW76KwXtyK1I2ba +eczNiMeB8WEwojEKvGZW85DykIeJNjES8RhFHXl/5QLfsJrY4WVhWTf2Lhamn6dHOGYWhh1+Kt/x +Qsz7VTGPv5EVltj53sTam1iXfurW/dydXGfxCnTDdRCt1mgJ16PhnsNw8R7PkCkzg+HCvow6p7BE +5+ny58gC5v2qmMcZ/l7KHC2sOqb7dgOM81rY2SvxabicoWc+37fjGf7XvSckI4TKj/7MVUe/h0/2 +57MwkvRKqq8mxkZ6cszP5ifYLjJlanBKAYaobc419xw0zNFiheL6TGsoFhqJxseZz/dsehMj8N1i +kAtpIujElSX4MCu+Dsaf6dF6Y7IAOfIQNJqihyWCoOoNkxjT7OL7vfRGN9p53DQx1t59wNMGtIbM +oO0obySFtna5wmTW4EZFpgCM48gm8x1rpT7Zj/pkVw/26tP01GOCrfVvnCH1mF31mJMt+04dnDQ0 +HYHxeTndSDNV+4d9qS63ryd7nJilk6LgDH88cJS5r0xoIHzWV1844CHLYtxG1Hzoln35jvsbk/LW +qWrA4ExTPA8od6lJ6SJRoiiWykGOPERm1jZ+NF3N3tvyxaj35x5Cw2gvB2d+WKPv0XDMATDOo6lW +SPxhmdBsfew74xCY5VT4Rie+xujw8T5DDHQiz31zw5FhRWc6nvXdl64HRPSloVVaMKSOdmE0iNKr +4lkYMvrS0FIpgVJ+8ovmroTqE5hDqwcVnu1TQLgWFlmebrVx9sXx8Zg8drvmdQpifHoN1hsZtoo0 +d4lhLAiWq8K9EIRNlmryk+Xkk0BrWCHIlWsBLXrSQAkTihTOS+uRMIAbau15EOC3b787JNiBXIjQ +DgNae74vvgz31iOZpKg1z+By7+XTo++fHNa+qN1tdQatbnmSnnxaoysVMFJQHn4cu1UBowHyKRfk +0jWZSumtk6SRgg6WGg8j346SJOsyfIo+IZeLSlB3xURdEmVwCoOJruWUBlUhbfhbgucHKJukjs/4 +pDmgE4WyEYVG408Jrh8tpL3EbmEoPDNjrDMI+iJysqgVGGlQw79ZhsYzQ7vTJCEHU6ShpCnwkftc +RuTCwoUB1VEpkJWmSHAi5oZGq46Zxm1gNPyWmZTioIxCh1kdF77Queu3heE8kJShTYDwNClNn4yD +DuzeCb+k9Cb2eIcOprq4QLcTmOU4rSnYvTI00gnkCRmSikLn2yxZjsvmoPV6Rmbha5YusHXhEkcW +K+HSJuWwtxbkHC90akjvIicexiBSoDNsrkpY77cQ2goXoVSCoc5JIbMME1JnMI8xCgEnOr4ACxOr +MEmBAGv7wT0Hc9/B+oJtlGQUfBSwLjFtPYaLIRqoDr1AqaSkWy9ZmqAbwDWJlQp03MNpBmYmKVnQ +06zAQ3+GGQ6pO5jsUNv3c7NE2PyGRQbk4Ru2hiK9MfJMEgA4YvFMcKdLU3fqUlYRXc+akanRXlt9 +ZkOYVhtIjL6aGiEErj5GFF05OUo2jHHVcYJa0yNFsWqrj5UNdp0YLZecctXxmsEtxIW7y/c0BjQ4 +d07C8LzHsAAJINTQDpApH/OKBwxRw9NDof0ll1Rbx5QNieTUmyZNCtS4QRlVDjiOch7sjM6kTMH3 +UVxH5rIp/um6xYZuCHL0I7thpFPadrROZAQCrTClVyIE5s2kl4tkQVsHPrAF+iheKceTmLIHMI3R +R3AkSRM6XiUFOv4BGQZjwIallVS5rSINbJcKX5620es4kTIKDMBbDTDxou8HlLYB91yGyAZougWO +h6GpCPtWhoMF3ZZSuBQqGO2joA1cXPR6RqHtmQGmmhS0KOwujeHCGvDYXCfASjKIwVTVOEUpcj2h +CHzHlSnOHew9ouN8+CG1scbnsNdC/0yAQOuArfCPj+N5t6GMoaOnUcblW4GBpUtm9g1wgAiRG6rt +bjHB8lf4C8wBleMKopQjRY4rFY4KGp/9hR+pmoRlT4JFOmUN3xlIC3IKwFzSGn17qYKtH/4KEiCg +3gkhUz8U/B01gSSHSeEhOKuNwSFJUolOhxTDcShoxr6HBcOtUAdBkxmeruxTA6pAddU0lE5tSlsQ +RFY3pcgUqER+OhvLr224mK2DDSZ0aQNYL+hROBvIhRkgBCjGLhmuDQDCERLKgowVdihoRBiRqUE7 +mB7HxZEu6PeEgRKYCbWCT1HRC3wT289sVQrUbdS64HSWFjCwCkO0tT3YS73Vz6wfv+5TQonaQXMw +w3527aYz0bAhhmjqdbaERNjn2BLJ1oRERMd+mdmgMoFm3YRca9ixAiH2XIEhYviAJLrJE4qkR0hO +RjCyo+O89yDcVmzOGoBkFG0AbcHoy8J9x/0EdHFoOKUaCHDJzmznGHIUQYx9ts6BBGVZLvBAYI09 +hZbWtu2uWqYNb+zGaugLINZ4CFr2YWnlaFBjGGYzlhi/AZiLlBAygF65IXXTg6BHKEACGjQ8WzS2 +Kf5uLXmWDOVbdyC05Liv9uqR4uuoIJlokzF4EEmJSqSJtrTCcjzT/BXY7brhAK6bsOTg3GP815Qa +be3xd2gdb6D4ynbmjE2jA5sBqpApye3EqhIYhQMnUQxkbcB81Tacy0JoiHJ6+5frTUM8JhRSxp1l +udw5Ct8sL0RUM0BAvcwTmybRVaOniUDXiWG+ItrEGvbOJshXhXs74M8dNthWs4yiAj0odJbrTUMY +E+f6o20odN+DcFkB1mguSwpijBdjQD+FyUnweu5WJ2mg/JSKbSBzdmONj+/UYLVlhvYb913RUsID +hQPk3IJDQLOfFA3bhPtOJocMc6NzAYHKL4ZoegwMCG0whHvhUHAnJ8hA6wtUznREGFQt0sRXQaUa +RocR8ldukb+7LnFl12WH21OEXic0mzpAKqgJrsxfGTd/d01zZdex8X63FhgWoIQEhUmDEpShcQr2 +dp2QzTLTidzm3fC75ul+c1AfNU+nA1RWCUoh1z26KM/tR3KJk1aaUhgomoS0jQXAD+S0IXlNX8m3 +R7sHf8VaOrdfYRxtUUbqAcaicl9hZTrRLfU8CFWJvuZ2w0SU0sacYCiK7w19izpL33EvkNFnqCrc +V/L+ME76YrtYt5Lb7yx64pvr1hz3ta4ewSFcx7UjMLjxc1BW3cOymO1fTwZ00BNh+ZKaMtG0Lid8 +2yu0un+FVme8NDcR/zE2I873pmfM2HyK59rUTPRz1DoF48k7Nq91GNuxiTY9GdXY1Hv/EAVmdjqD +ZcozO5keYuJntqQmHGJmDfEKre5fodUZQ+ziVVECC1K6C0PX+kD7lhSZXCRomXJzwA== + + + hiMkxfSc4JE4n7HuwnvJXHoaEmqc2TbS6Ta41vkEVvyWT2GchoQaCyIbQDenvYn+ou0DX9OTW/+o +3nflr6MHg7J5ctZvXQ4ndijysL3A81pujKBDWo4XauyJjUJjQLtRdGMzl6lOay8fzN7UYD4VIgUZ +MbW3ZejAVdpubuHLkftSd9+mv7jPQ5o2JjSJ4jKHqfvLXoZBNsrtm+HLkftSd9+mv7jPw7kqDbpu +QYEhF26twKNfQolh8uQmfLA3Nlkoe9vJt/0ehcNAf+v1vZDwMf5h79sL/CW3vzzvXsK/z05/Lluj +PXtLrrY/uBy+rj1t9pqvykHt2aCN+tDC32r2x4Nmt9sBSX7xutNyJb8D6u/V0trFqFF70b/ste9N +l/20Vt+7O15BJAtrjBfWtQtCARUedZsjLg+T4VkP2Pl6rPDB6+ag1W92a/Xa87LX6nS5OKFo26Jj +FZqjT4bwuffqsuSybpAm0RMKrEJu2OG9T2sNy2oYmzFGf+ABm+o1DEncbfiKmTdxT7L/T3H/wHMz +BsHUHjw52R/A5O2WhOGocwqr5+TgGEqaE+ToCRH2vI+BVjdE0pzBBkriqYFfca7Q/+z/g8KQLOrr +lZpOJ1qGg9hYu8k1taupXRwJahYOaNRQQf+r0OiHHJhZqwqn2+SyAhiItRrrd9m9Gv8Xx+dezYVP +hi1I+E8JKoE3Q82chUwU2UXs6Pi2/IUL18T413TqK/4Xl5lKQSWhtYPrTcMXiUEQoB2mhbQ8SOby +4MOOaGF/4Weeh3v3/tbr/9KjL7BR3n3QfTccNk8eH39au/ctjBhsOvcewE76tuQi9w765xc49R91 +ukAoVoJB7/RqtoCFWuX9nivyOeiu937oDDuw3yHCaQzHo2brzQoY9pvDTiuuPui/KavXl/RD99nA +VQSMi57avmeLOQ7UKtu2ne/h3mF5Vrtf26vdjfDgdn6/Rs3W7u/V7j1vDkYzKDvo99qXnVEVohZg +QWJX4O5CXiCuwIlnPGU+nZ64tX8KtEPZH+iTSfIcVC5MXKW1Lihhw0+1i1VeghbjHPW9QX56q9H3 +w/Lh27L3rN2uyObrZBBus0muKHwdTmwFPR6vM2Gf5jMab+6CNg7naHq2Ly+UABV1FR/Kh+LKAgbt +d8te+0NxiJCtvJoCeaH+XEL27j38tWxdYh/oB6o7Jex66C5cZzn3/n2YGEe73Tmx9+zsbFiOPqUB +mFPfVXjS7V7SqaY/aDQvQM2+Z3cizCnv2Hd3DGntCFhZe3h2BhsVlP6uM7qK4L377HI0hPNR5O09 +7Awvus139uun1yic/bKxcEvWk57tTiWhsmlr5kNvQh988l6rlCaDR1rkeaSJ3YYQ3ppZtEU0Vd5N +aiot1ntH2WnOa6M5r2TL/yBSSHwIVdBqBIeD/kXt+HWz3f9lUoFIxhQILGjLNZqd2ZrDGC6vKyxk +pqfkotkZONLQglu7i6/mfDpHwvszing/pg5bXWo0S7jVdnPwxsl5C3jdH/xGALSvOVj/otkaG4bL +Yfn8+Gi/ezkYq3saAGQPbg0Hrfj7abdH4wZHCGcwpiGx2lbt4a8XTZCu++VZf1DWfigHQxcVt4Wb +TXXBXEiz3oJ5p+rvVP2dqn8z++51BbPuzgC7M4C7WnJ9W81MMU/OqNpBf9CD/f5DifkJpBU1s4bA +sFanymA4z+Vw3jTfHWe25jhzVU7sTNWrCJZ8vXXY3Wpck9WISk6SZhhCBx+kTsi1xB/QvqDwds3k +3zVzOtmdKn5ectG+RuXsMWSupeFR2Ry9Rj5X28swBlPnvJe9WLiXfURSaGfi3EmhzdIJ1kCS5Hjt +didJnCTZ716WtW/Ldfe/37IowUDuVCb2hR2RyaxwsfYhijvTEl+TCXEjE+HcAoZVUDi30dOh3OL9 +hdBt8EQnJsMg/4bMZG5sVnaRFBTJjZfXhc3+SHF3yJq0kMLMZY3YJtYYY/CNDpg3Wmcid9MlBZZk +qAJqNnNlBX6ayxNMLbktLMlyQ3OjoSQ9POIMfnT/AVmC9j6cQ5lBi99clmCKla3hSZ6laS4oGjUp +Mr4lBCxy4WiwvKTWc3mhPgwjPrgx7FZWXGp0SsH0OqXnfPF6lxXUjdROKcwnYFRGYhpjfuVcxl7P +DLtOFQKIvAYlYsvmiDZpXuA8SJMUU2O7xWb3JUwFIPAOGyqJKaZxmjc7zAbODql302PZ9FAqz3GD +kngfwM4NzTu2wcSIODW0NdHMmRrZJk6Na50Zu8PyzoAeDpwHrwd9OGb+tfPqdRf+P9qoc+e6eOUX +X1BbaFOxlag0Fp5rV5lGfvWYknuPn53+/AJmwxe1+O5cbRkd9+JrVphB1/UjRGA96L3qli9KwAYz +57s+/uSjvA47QApxdqL8YXkBc3n4rDcW7EVO1l45JHNQ4cFUY6wgQX5oDjo+zdkYUfe+73Va/XZZ +PXrmRfUIxLl3xBOpREEreLW9J5nk1hhhzDbPmyWsm1mZMY/VvfU9zyXmvaFN73Z0XS0TOm5nRUGP +RSuYZSKlgBu0OaC+4ywzkx/mTzTMSbX6NLuRQ6eVJi4YDi+Qfqj4izGU1ezMitfGebdzjhzAjImY +qJtDUM+GFB3LqQZ+7o0uKq6LnfCfL/zlJgp/t8xcPPTclZcamZudiK8m4iUZoDfrxHt9Z5oF+dLm +hBPsn8JampENKkkW5oOiBEkbFHYpx9N17WbJB5ol7iW57Zkk+kajvzdgjNP8+of4Y7ONjN+/2hyz +yC6y57aW8/oYK5feRhw/idzQbcRs+W3Em7j8yfcU9dQ9xew97inqyXuKYuKeotjdU7yKGP4GxO0u +89JOBFfOvIQTZmbeJcy3hC9m0r9JLdVp1kgxLEgURWoaqUj0R5B2CaRoQaFQSSFtiEZRGHx1gehu +5MZgHvTbyfLxscm2Z5fY9cfd/i+YpnOzvG87GbdTM52N38/i99YyY1TVlMzbVSHfRz+UO33wKjLz +nwBtXnZHP0XS8rhzftH10nJOWpP3d+zOIlC4qfEcxPEo6jVlFX3Ya4ecoksTkz5vdsvRqKS+Pz+t +3Nu7/4yza//0KVH98re9Sfje89Y0W+7++LozKu1v1RcODCbsHYxxZoawuy8e79delG2HOjH0fiuV +Nlqo3KtnXPYfZReXvS1uZGbIYRBsWVzu8aAse66YFllh09o3hNSpDXX3pGHpg3dNLpznqaFwwswU +wkTpdH1hvH7hCktT2CuA+K6ly+Uvxgo/bb4qe6OmKw9KFVCI1GV5kZFWJTNJdxESkyl3KcHkFAor ++HaCsPGvhPIrUaS1x1+lRW3/K6WZbQlUNTbrvJKK8KeSHgtOkqSg9JkFIqPEDQm+v0cOZYqSs2gl +MOjxVzIHtKnxQ5ZB0ZRG1uSZvQ+ZJMKONUc7p76bY/gA9PirIonwYV3gLUWNJ/gqMyDJtdHuUuVU +tK8guj0+7J+AfwFhEhBKoShEHx8cxHHIRGqj1AG3SulHA9OyMBQhKFJgukOosYPY4f2vdMEIlRap +608q8lw5TC7avUjxPzSNiJmMSSLrUuJdyiONDxLmlmEpRa/CxE5tYHPOaUsz7OIUOkEjAcMYodN4 +RUPYuxqpnThFkuZ2Umt3DzVjzgGzEl3whFEJElpg9wzjy5QR1jwOiDKaDviOBkZQNqSNo8Xn39xM +kZaDFp+mgcgFoMsULxqT4ptgOFU1XpGgnqZAsL1VojOpafZImx/EIqJuKeS/Yf4DHbQ80lThG3LI +NEqCCwstMdqOK4ZBKOSAtFlfI2QJ8kzzqshgqWnbAZi7WW6ZL3gMPXV2Ils0qfLECeER5UrRPZki +yalXSmeagjNwAma2W/5SkZnqlsHFKnTGUmu1BCqARdmpir2SkldTnumUeKOlUd7VEYWF8DWE0BGR +YkfynLldwGKxq1sraj5JVaFsGD49U+LzbCf4jpvQWRhM1zMDeBXRp2zHSFzDeMH6ojWntCSMgm+K +JDzrU4vRzXqa9Cgu0F3Jk1RL6gSICeEWU2GnqpQU86uCdMTYGXsFxc76BBclDAj2jAdSFVpTH4Dy +goJqcDUllmB7ByoSPyzX3LUfXk0Zi1+heDWB+EF0RFQmE5oGAl9Qt/HphUkocImeS094auDL54+/ +QooLLzQEzDTLQFVI+7pNnkmaD6lb94F9tn8sNCTzr0jCjpvRszkJvqvKSyHsA1a8YoQRTp94G0hp +HKTgXU7muPZg9SpJ8htftbW7dMbTw+BOgfzz5AE3cdLmNPc9p0AqK1p0gDO1sxfooHlhcnvT3lgo +CQyFk8bzXuPWJ1JFqzPzojG1Awccoo0buG1XGMixguS236pYkKfxVoWPVsNWhUOae6SZJkUEkClB +SIH7OeGCDVgRMi/T3IBIzXkAAGmOXaUVa7Rno8msdMvpnVS6/WI1qEQIulDkJbi/1KBkNDooxIEB +2tAyYaGZCl2QhUYVIreCO4Xdi6ZPkRcUTsaZspUVK9h7QOO3CIPLWNCWk0tGa2Rq53+mEkKbqwQ+ +0w5hBA027zwp77Vu74h3Htp4vPBL7dPIeMFQJMQEYCc+H06X7ogJbsxx23FzSowPF05R2re9ZgFj +ZG9kAW7LWpj6Vq8CpuB7z7gyeXd0CxKWUmBtgRywjGW+qiyzwjCD3cjYRZgJWpYG1jaxUXJfBS+r +xAXjEVbia0pS1y4m65glbfrzmlWPI117lkN2vHDAcfzm3dKqWCbUeDZove60l1ZyxVw9Vn/3X1Oj +l+fnfDxc1K4tNhPF4363XfZqLyi2agmeuCwim2+0jRCgcdYWpCqLMuxPVHJF7S529/Gg+Y6yQT1/ +tdKhx+61KEH9Pia1Xcz4WiYh0bD90HqHc4MN7kQFS8z44MQyziOJs9Nv/6ZQVkCl9r4urGda8hrO +LzQRw/+d3oZKhEaJpFmwG51mtKloUPRpQ4U9lIJMQTDZjqXcn8kPFmlGaxGV8syLThC+pExogcIA +PyRZRsgkbLe0myn//3i3xn9RsLEEgk1fkSBH4VLo+EOSabfpc7cmPzjEkiQmnWvgX17ZEiQvkamy +3IpD2D203XCLnNQc4/8/tvnodHw/g2MbCVYJ5y5jFR4Ya3tuyLhLkx8cxszukKRLZCx1YHsx1DeB +GlhGH3Tqjq+5/7+bF4mibR8FN/zLp5hc6cI+mSBSmmegPGfGnWu4L5MfWAFI6DCD81eGg9aV0uHQ +sY30EoUDC//y2vqxPK0d9Lv9AZzT+5cXfpW5yQwSWvHVNz7MRBp2EStkJvUqtvSKHkj8JGMzAq0L +0nPcRp2xGiAtRp4qVoWiPTvzOhSQmdL+ATwyqTM2zDukaj11SLV9sCNZ4IhKh0LgUzakKcYHEItC +Ijlp6AQsxsx6Y1KZ4c02qyPaR+j4mttYHyTN04yXkoSVrmlWyQyZhc2bzDgljq/LRYqm40lehPkl +LLLn+95GxaaoVV7NOeoMR7F5bjxmYNrZEae7mHETKXh+4/d3puxq1OpV3vwRSfyAIA== + + + ovkv6NHlaNTvuUdup5+9nXpl8O7z/sX3F+O1kGqg2H9/3uyV3ZODbn9Y2oLPXLnmqHzUKbttLvio +0z2HPy+OkeTjsgnbNTJmULY7I3yHHp/VmniX/u5fgWn0/Fy79qj5tj8gY95dIvXTyZfwLI3zeeXG +8xBIOy97I+hfE58N5O+1L+hbZCO2TxJbq/Z+tyzbR+XZ6IcmWtFqk+/7JbWzLr4B1YM5cDEoh+Xg +bVlDwi+wD8PFFVrdzkWt1Ucj76+1AXSy33M1suixwbjGoDmE2VZ/W7ZGIItOm91mr+V6dfefT4Gj +l+e1F+Ww3710RlOfXxcQiZqn+bgcXV5QOLnF+xy7Pqqh4dl1OUSRAAdrT8vh69oLarzzGxleo2Zs +jTQZqwHL4uJytKROEqic6txRs/fqsvmqrMFcvLyw5b2zAZYbEP+ivLjsDmNs0aC9wOUWjdr4r9/1 +L6Lf7r18evRtv13OnAv3a3d/Pe/24Oc6sGvQOYUF74bp3oMBKF221jWj+AD4o1KgMXfbg9Ixjl02 +/Cv+M/KvUN79Y2948rY5GN6PplNc9G1gJMGHc8r1/OxyPRmOfdtQ7vT6vbICY7r91puyXYUzXPID +Tcyr0nXa6bWho6ICbTA5YM1a4bGcvrj0Bxr+9+SEWMiJSvR38HnXKhN/6ahu0kL/4m3lpY5Fb3lG +I3mg3oz657crya5vHn4xbKIygSoOLLGq0/Ha18UxPkawNl3ZhlU6PPtljXfjW14GQ3zBe8NHuQ7n +ZmNYZZ1H6S+dNt0WXjq+ruDtCuBqNL0uXcaOpURxydulSqLHYxlR76rQ8+62Scl1IZdR8mslcXLb +lPgT9zwyTvsj0APwYP9s0HnV6VWharrOGuz5JOyO+5eDVrmPgbC3vunD1nTbXTgvR8026EDv24/i +Pfvx+7YzaVSZXVHhz2dtRWNz6bjs/rU5Ouy3jvqtZhfPUkP6fda882WBlnLw5DAuGf/8HepH2Krr +vVCNpJFEXX/z4Mmjy26X7TQuaBN+tRWUt848h18uSgr1fjzotE9wyTxqtkqf6QCH2L3h9rzf6Y2Q +m1O1joGyYLuhgZgs8n2v43qr82Re62QIevjryLN2QVnsaVxU6RyF+8zGH3X7/YEN26OyuLtli8ru ++5mxtOgLNgAsKkmERR3Qc8kinM8umq3O6N1ijhLO0FFpMF5tdlHkVdx6XuRiQdGAVM3n/w+d8heY +a4ed4ShYNo3W6QLEnlc5JieigJRlM2tE5kgqsIx1JO4nOLeIye7pNZrjcxfEQdntHoC0dgXTuTix +4HHnNx6N+d38a3/Q+a3f+2ukEiHb9KJh9oyTc0p952Xd/IYJ0ySDvLXbRLbrZm/UqTW7neZwulxs +4+5fjrqdXlkblb/yKvRm4oJt1iiQ/n4J2Ebvakfl27I7vnMASnlyfNEfkdPuab+9xHTPbQ7pVsVw +mUAjoickWlKrazaBz596nEmGJssPzV5n+BpIiWYiufzyVJilmLAPz7vNXomTJBZaC9c21aDg+A4y +D5dCGS2frFi+fAKe7/oXcderrr+AYJ9UqhiHyQAHIqqCYxYDs0JXYyCu7NX4d9ktB1b1e9Jrl78e +l61+r71anUedwXBJMzQ15g/TvGqenPcbXI/mimPr608NbZaJakNr3W3TI8uUHwz6F+ittJfJpk0T +E5pTLmhKZVPtRmMz3oBLqPTUXZ8GXejBYHTabw7aNTGdfilymnl58eCFEyEgFVQsFGD9f9d/YRu1 +xPeHHb8ZSe5H9SpiQrA9GXJfncf622ltl0vEKuME01J/Tr9ottsTAvucHtUYAw1B1k6AQDizN5M3 +mPZFpzEu0lv97sCrog+e1B5cjvreaVhOYCQ3IavJtTe9fusNCO7aKxuSsaBoZ9gHsVvWTvGyjkuS +NVa4qF00L2AfGHbOL7vN4KCU0c4zGjR7w4smnA5a76DNThtKcxe1VDKPyjZ5vrQoaERCy5H3eE6x +iqheRTrXsrID3uJjZWBGSRF1cGnRqANLy/oOCJPmqS/JZ4iDZu9tcxg0HDE2fs/ZoY7xCbWH7c6o +aQXbhCZGHl0rbyKn7n382V/0mpjik/fAJjzeQtZgMj7mPDR4Vc26wBc5vW2lI9QjYIVRJer4ZKXx +lkTt4fPjlZuytZa3taqHnWfn8Q+PH/V7o6ABpuEHGJZWZ8zt7h7U/eEx9uFZz+YwnPztZXNykVKF +84uu36UmWsfDbcS2qNrzV2fj9AHs8LvD6YIoT/5WDiaWM/zwsAcy3IuCqOGH56dl20qgcVEFv1Fo +znfTVqapA0ZvitapIq/7v/y1054g/AjaZen8xJGzPLCD5t2CYI5xjRylLKriD1AVjzngyxC+AwxO +OXDBKS/i4JSpos+c9nwca8/JvFLfeb0+jnKhIpbt936w4S37cXiLmCj6bCLGpkr4Cy6ZymzCwkv4 +ZDFWY5Qtu5RT48Vms8qWqcYrh29+QFJR6/VDwFKt06OAJNQwWLNaIjZdW/eC8fPez/3TBqFrdru8 +IwwnjWZTFUASwQ77aoKGeXgXlxq+6VycAkfejEuJyWIDODkOhiVSM1hcEvazIKbuTiuBk+WZ7Iii ++35XQ0Z/0z990jvr14LBbQmj5/XstDM6b2Lo2aTct3tFXPzi1fmbxilulv2zs4Y1Z7t9fG7xc1CC +h5PFZ7F9HPnlsITdhjZmv0CdQlr7sTy99wOIvv69p33Yz8ufFrMTWV8SZ8Y07akODEfdRts2QZOE +h3TJaGE1Vz7YY6vUuWifw8/dXuVOXbQrI7dhCr7GrLG/uBi4YgvGBMq41t04CzlzpKFc5CLMirml +Yp+byOeV6pzDYm504RxXreSozwF+hVpcchCaz/TcXtqy8Yy9C5MPJGq7dvqudjjovKXH/BYMAmLp +xTvDdEOtCa7NLxQzbQGqfmQ7XIBsotjUoFMpOqwsFmntcth51Ztx2Jkpck+dc2kRRirYP+tMmu1n +y/ChlVyVRerYcExT3R00zr2db16JVr+HSdrwtLqAFizpt8RTe+nJnmNnlh60G/0BKu/Nab17suAZ +KAuchY3iWWeWunAn/EVzgVp91Vg4+VwZF3olkrmlhuhrYVxLy71dTOOwddFtvZsvlWyZVm/SEDZZ +ZgRnveisPoc+GKdu82I5H1y5BX2nHazsoRtskdzFUkNO+LF05lJxK6fDwqhSB6b8CDPFuJ7g00rz +9mgQ8agujsuiBRv0kjKtQf9iSRFU1jqgviwpNogydSxrFA0Gp83BcME4jqsYYXupUHgUkbSsbLTH +VNCLQjcqFPbdqFA26sasVXTWGzXa3cUiz5a5GJz1e4vkHRYbXp7yekxnjdEQCPVulpmjOARVFJXX +hUV65atmsNrOKYQnEFBoh4tnDZaD7aa3GFdXILam97TNHv9hY/i6CYeAcgGXsFA5Qp8R5/CPLL4T +BcdLZbPk/K8XjbH7G9S1WaUGk7o92Y9mlXw14xQwq5zbBYODbdb8CuWsU2xxyW5ngciAAuj8a44d +pOcU7F+0FkgVKjBcMOJUoH250CawQPJC9cVqBpzohsv3CCp1dtlrLZgltoyzRvBMWbIxUJ1mr8e2 +9tmnaSq17GjQOo/UpbvfN44bNXvJEU657dq/7h7/+Oz5vz6tvZVLDmfnoM1FKt8sHRLK4PHK+3Hm +dIevT7XO3y04tkcF+/ZN7umz9QMuHp2uY1uMDpbQ551fy+7zcoBJyaasMcfNt+VTODt1Lrrlg3E7 +xhUO653em+5wBIvK+/251096b2p4i228u96oPmG2vcCLd27cbE6154ePnDULtYb+xciaoMZNhN/0 +T2vP7E+RzSvLxo1wcalglr+332FKHxwfPHmS68MSZwT+qP7y7I///OzLH7/65H7z5effpH98Vt// +evD4/PUXr3q/++bR7z6/+8lBp9kY/sF8/9eH5vdffP394z8/VX/54uhfnzz9enDZyh49lE/zO0Kp +3yfJ8PDnw1efJ3/4+v6/G3/6+svPL4ZfD/8m7+3d+fr+0e8GXOib0f6rv/796OsvVXl80Pnqz63D +RuOTV1NNHbX/Ae1lh4/ufJH99+PR4c8/7av/rn/+4Lx/NITBHb3+7M/m95ePDtUfftz/ufvJj3t3 +Ds+Sb05nIvtDVpxlP/z9n/968N1B44f5jcblvvjp6y/fPPrp6y+GjfPPDj+/c/no7uP22d4dYtaj +/zl5dnl49tOP2X736+7LL872X48OXmf/LcbY8T9/PGyJo/98/eVfPvnR4oEuDw/+/erfffj0x/8c +Pmk/+d1+Pf/5Dw+O67/v2T68bLYv9+4UP9/9rPWwpf9+9+C1Orn/5YM76R8/2//28//57OuDT75/ +dFBe/unPP3zz+9f3W63mG/zU+ezh2dFr27JI7jWzQecP//NF59/ftPe7d/7ySX3w2b8uHxwd//E/ +2P9Pv77/zet07465/8NPXz/otT45/+yrp/fvZef/+qqTZfeGZ+mDQeuJ+OzNF8JjbB1+M/wB2JZ9 +UmY/pkn7i87BvSaMr3j61d365+V+N3t+bin4x9Gdrw+efPn7Hx9+XughjMuTf5rf/zk76P/7sy9/ +aP/zC3n6+58I7Z97d4CgP5s//R6H5J/mR/P3HvLpz/tvPjV1NzV/aB8l4qffPz281/zyj49+99l/ +D7AVgz/8m7BQkb07yen/faLo82d/fvSl+/Tljw//ZosffP7wfywy+Q/5BKbuy+SzP//54efy8C+v +vnJ4fvzqy/vtn7/9N42k7zDge7avXStQaP8b34GfQgfE3a9eYKFSEUz/bv/whFh9WA7/osx/m59b +D747/Pmzw7N7f/vPw2bzkz/sm9Pv/148v/Py+wfPDvafH54dd/7z9X9++uL/t/fdy+nsyp9PwDuY +nGHI0WQGMGAbDBiwTcZgg8ncu+ef37OvpMnDaAJwtmq3tm7d78HMoJZarVZ3qz/qhc6cC/ZaQ4qZ +/fCsXxz6nJ1csJt9IQu/78P8z2/Ym/j+My/I/LfDBxiYGkUizdmWoxd92/9Vsy81R5Us2GdVijcM +oynZB7N/2nkaznRnvKcGlApHx5lE62TItp5O58uhiTjL4wMzEd2DnmnqDaycl/xJZy72Z+aFf5RM +FwjyMxNAIpAcJckCkA6Hy5nbxgbiuRJylj+xzERQkpNeHs+IS2AsfD491UrZ4ZMPSUzSuUuMSNt3 +1ZMlkq2+324aJKmOCNkRPjdjc9Jm2dnzy3BzVXTWPCQnqWAB9LZQw7wVZ1BCM2BR/VnA0Iz2/GJZ +PEYS03YzG+n738Vz8FpedwRtG0pFt2sSk5qS2GpezevM2VZ95gQaJhUr5Gq9lVRv0Zu890q9yDdY +NEU/4S8F65eSc3ol7a/rBFkI9f3OVGnk1pm5cYFRTb/JYiEUyYXdLx2kcDy+cseFiBa8o50j93ua +/eXWm84221p2TaCJqpNtYFd0bZ/9pMUd+cg2v5dW8LMvSy7srC0pbWkvfFvLYdDb7Q== + + + ktKCxU63zKhwQKD61QqQmcVjFyr4UWESXL5n2+bpUfieJdtsfayjv2t3Emk0biMAVLjn2ycimVvZ +dj9ksuSz8XR7v+kY83kC9hKesvYRk3PR9rh/53Ya0VMgybZTZAG6N3+7eB4dOROV4zfQ2FNjKOc7 +rz+yb6OnPP00lh1lkuW8B7wy6gAtULPkfP3zMPt2bgW5p+hloMfAF3+ZwzRuoWaLvz69vWT6Jb+J +NL8XNt9k0M4GLHpTEcp03lfK1zLwU4p4Kvkeifkknva5bPk0+12K+4XOzL2JvoV/5qAqzKMfoj/D +bzV/Az59pH7NEMjD73JUY9mkm4yE3IWmf9jfFeErSfQy/LOgM7Pdy8GXnrl2KCqQnrCJDNv5FPuL +BHoF9uYVdYkdbhZ1RGdGw6QGDDsVeS3XW/C7BGqMo4KaELOI6bKYKPqTbe+NpsL+Gv0mAZ+jYaQ5 +VqLXUfcoLm4WiQbLgjfET5ZKUjR1YPaFEyUxtVdMhGgaaCrUbyCzuLbRMBCfhOx4RKPi/kSNsZRL +En3ISI4lpTwlVJfRJ7ZFiqjwT0osgObHCQZWLODLNXZUnKhIMgs9AJJ8yaxHaqxo5TDseOTGDF9+ +kWKqaKWyDHykOCYaJuJJXNhEWtibPEuZkmkRUfQyt+qAJHOzJZjVFCe16HXIiazEUkmwPXxllQcl +pOgBvfZRs9pZLS8viOWIi6hlWsakFCAaGrs0tYkhNSXsGqK0JepjMxz12V/QJ4r9cBio8/CfvtD0 +c2RbneqGzFjnLWDpf/v5G0YsuwF75aJGjuq9OKl3eMAuBscVZXZ7twlYLoVV5t3YXuR/BsNMcbra +W6itjGdOhE6veHeGb3Y435E7A3wxoUODOlpYuO1pyvR7rdg/uT1O4G0RxkzHaovll+dmv1Ct7nP8 +AeWG82xzU3jJvA0OE2DBrjN/PiEVJ/Id4s/Eeph0j8it+KnXYP8ATmhnV5y6Wt5c2OV38/xGX26y +KMwdxTJnW0FL6ekc4xhDW2Gf0Ree68Y3IoBrCn3b2JrcflPm2UUD3SD4mXvrrTc/s7BfwFIC1nqo +f4tzosI1gZbSjc6JCteEtvpYCXXDoVEus8D3Haw4DyW69hzK9By0zSvaPuo+5ZAZy/GJa+r/Lc8C +OdKMP1X+LFRzYSsgYJ/kGpkPR65h/johcxiqiogEn/i+CBL7VLjqKVR+I2OObcCzgIyj2Z/dlCOd +da2VfWlXgbiD1UkJJ9cRnFNB8TMVDjvYBVDKrcOLD2T968yc/X/Z0flLobQyz8HyaiRhUGMKPrlO +pZ1hEos5E8FnYbM1jJOStFIappR9W2ec4NeLvW/aTL/4M219jPZUW445YNYqqOD0+/srY375qY+D +Dg+HzOx/ecBwPWDt51Z1J3BEXr+D7AKJQ8dgkFv5H/XcA1bYifjsb03AaXoS+MjhHJksfnrYViLk +4MthJIubM1iVfnPsL0pJlsvk/YhGprWnXOM1A3aL3t8z3dFzz5xtPL91oK/NPHj/DdA83lqIyOo8 +eSVqO8+6dHyZH0SU6VUpon1vyjozK5Jk5nBYtoPx+nsaEUgQ6cQIend54juWr/DaftnlyrngOUf4 +XO2jXjAHH4NsLFF1sw9awb3nJ4t8saIrczA8lUmH3RUE6uod+Deu2QbsTk2SHNr1SzjSQCY5GWwy +7w2nJb50vv2AzS/2i+Scp50vAhhld+Hp4BhRMnYpMfpiinqTXb+CxtStXn84a0E7IIzDKK3fABd0 +lF+9vI7A1Qtcwe13/uf4E4ZRBfdHk3gq7vOiFlV4+bxmG3qwczOrNwDMl+oavRL3RfXA5iftvddT +ttrzzahpfKw+zwqzv5iLET6bAfjpaaKQLxupzci91ac8VCCAip69P4bi85FlTvOp/OrNrT1NH2j0 +bYPMDp2Zovjcjn4VhwPzB+j8Qp/Z5wY2dsdasnIHtG7YZAaciFXgnrMoTrz9H6ENgzT2B/Ld6f26 +tgCWUuS9vnsT7t3Um5FkoDgvDl4mQ2CbJKDC+bYXp07iMxu0xRpA/b1HKVuAJh8wZpLptqVQ+fv5 +yIU6XU+24XhdZJstJ/AsSubSVyS38s0OfFOF2lAevYXKR80BjY0megVo5+SbVOejLYvpjRwaLb3C +N+BXbh01uQpPNrsNGTfs2keWxMK8AjIRMyS+TW9LCaJBsIk2j0WnI/zN397gXO2GuUGmYzqdWMo1 +MMULffhUI5tAkkMtj1vwyKonKh+lJN0Eu7+iCG399/s7/mNt1IFJ58qShV7ZITU0wXshp86c+Np+ +fMq91HFEnqeJF9ErifnAvkJxtPjzIvFTdG37PqAZQ77sW4j8Kv2dHFb43i+jYS6kyHgEe0l9SRky +6XC3lH/Od9Ii2aBPLw76D2A275tgkjN7nnVIN0V4AHvfdzozOgCRmAMPWJ/VcPiR3JeThXUtxBnB +9CQOjPrC99tom/8xmEJAsIMv2U2qspWSITgvUOhettNdrP7t9WVf4sVqJpHb8S1vumdJW+bgjp2h +Ts5kI1+z58J3bOQt9ucni4ifsd+DtQX2/UEvu12+OADHhMLCmkvoz0+u86BT6QpPSlKP4YCUgMRW +2WIrG4k1kdk4LHw3jmBHplQF3duykcxnvxZkPrNolk2Pvko25l1lpV/JOn4znVZlTCYLJ15vgCY2 +GjLx9/kiE90dhigueUkFOHQONFdAil6XakdKmXnCVpKldf3PmYqUymB/2fcTPXaiAkBRFo8wTN8A +0vFryXS+W2de26nw07ngac7cmfjz74pnnIN/WmEDucnTRy/sct1nofea+wO7n4D91rV3OR+MGFbP +g3x2lF/OhfLgeCy4JmQxaTeZ20AWe/vc30sqdCkvDQPYvlZ9aCklfDag54JmYKq1vIXv1gE4e8T3 +H28FVo5fo5KZ1FczB+PgVPjeHjwSAhsDu+bCDs92umT+Ox3glg/tv0DjIAIDsZSJRZq6vz+EP7Ra +Fkop8xyYGLEwFYOddvpHttkEaavM3qFz+Ql1RLcwTw6gq3B2cg4gc8oTcNjs0dAh8Q6sotJv9sWX +CwA3O73KJFM7I38tMmYQ+DTz8rhIHF39cKodLGZD7moDKgrfJRX0EurogPS3JPckA1nbFKehDaDs +9tglmGXNRt7qJJiD3mt2m/22SVMBnK9GcU3YgPVELOJ1ZwDspC2LXtVKFYg9NS84wWeD78QJLOLW +Jkv402QDCNWIKE57h1AhU97tmZddW2jQhSlBKvUya3RwSFsXzsen/hOPO2DX+cqtIxkTciXog8ww +PFyIOM5QXzTj7u/kgR0pPwRRL9uJ3Hq9G4kceE7GeNv2pDghkla+BU+3GKYeZNfjOTyVMMLDGiLb +3NZOBdfLfsZYSqsz22v+/oKoWIpTQ/gLeDL6A1mMNstiY2NfbtaQo5z4/rNYgNv+G+ZsIQkLoA40 +dtGDJhtQkbEpEu9F54vVCRg4cMu9l6qDZVg1AcqkR4qyzszSfs8k16Sdb4OLG3vDrzu4hPf552Js +hDYUZ+rYj3HKEWhLOKRHW8Pegx7Ks/fHGE/SBi3zEjlce8NAR4bXmUh3UcxGS8cTPPp2k7Yndyfv +a/8dE/O45Q+MuWnnU07t/5AVCXVyejoXastzNjrZLXhbAlK4/ca4DGy9LZH4Ps8PYtW7dRS8vF+w +B8NIaHTm8N4XewP29htJZhZAyN/OrZmy/IaR04v4AP2AOhCfdz+wR5L17JsrA+Zl4djwqSDhLE7P +hmE26vYYoEEYFokX2I4281xwNZuFO+2vTjSSzpfzy4+ZAXpYhkyyERgUqtWkgT0sFv8M2GPk2FLM +JL7awOyMNJyE37WfAi3fX4E993uXba5D7wIlPO5mjvauoVB9CgCxN+Z2UgqVObV/7Udaw/NGZwZv +5h8Li1DYkHSdP3/Cqb2jCLwgx55MklNaGln9xKomRifReuxIOxWvFudjJmIooNwB0JGvfORttk0C +a3xnGri54GZ8Npu24v6x4zW3dvtapW6/uwHzcspx0TzqlefB5EyOvs5LmG1hRb6Re+NqBdFE8Ceb +gDdLU7Px7XW/g4lv27KbyeLI6jZBiwP/H9oDeTkWgmY7wHgdnAEDe2ag1hpn7iklY+/ZVjvS4ngX +W2V+a2Dkf++CkCXk8ugdbFE74pglks87XkwUMStnTbYKjh/vNOnqVXPZqKsC27P8gLGgtcoaRDjO +M5NDW3hFYEzlptmXahkely56kA9+QZcaBrA5zD8S4/ftL/BevcVfM1mMbX+Kg+6yDRSOuyfx+ijc +fvn4pTVMjfzEtk3aT4ltcRq2h3J1u/0nsqk0nNATF0ejG2Dfr5NWIM6mftHdiy5ywfeAmzf7PwPX +ItsqHB3hfXWcfgS+sQ04V0mfkB7biuMRrJdJfPVY+PrpGXmCxraD3Hqw5/zhmgg08svMzF2orPPv +oi2f8Dc+jaStmouCeXntu7a88Qvi4GFWM/xA/zNUnLSKIU4zCij3oeFQnqGANRMh6cdQTAX6yAFi +Joy5xIvj0a8ru0nrX8mR7csPF8Nn4Un/TXDdY9oeDhKVl3IzHO+2J2Asc5I2EYGo0driiViA2Qdm +nh0Q+OTH6sNx45eq1KJQbOgs1p0xsOqcLrCGWsfiNFUGTbUtO1OsXfwwxRbvwEcGPSvDuLxnkG0t +pyfYx/9JsSl4wry3Aro6TEWWn+2jsl6fUYL79vDAK+CpEc2GyUpWfY26dEIwTC18LZBDdAVOYfvf +DXU5rPjHksnJ6q+dl0rmZCgz+H0elyCIH/AkP95RUP6f+VG2HT/VDsowrWymoB108cX6Rw5gouZy +H8kEfKbj1C1O5GH7lz2c/rs9rHIK4Efmh7AGT57LXqdvKMJnszK/ax1+/uB1IzLp5yxTx4t5hQ+9 +wA+Duele7av8Ucp1oTlf8Dorxw+GF4CNajvR5GAPttYSCNDD+DB/OC3nDzSS8QFMDZSh48N/l/PN +w3H8H7jIxpsH/mKE8vIwPsKvuRxZ5j4Qz0P7iJoE/wob+2d7ftgB6X4Aq2xOiSoiTTW3gLXJfwSE +XA+AGPvTDej/w2kLm5jOH34QnHr8sB7/A68pGe92QGypFXw8T5ewe5VNAaHwuGYoahvAojPo3fab +I/9zfDhvVrBosEdexTDLBjQ9Pfzs5OEADO9JsMTf5xN4AZvytFJVMX4YeLXcqyz0XLkLSFHl+BAg +rEZoHQA32atFpF8MIh7QIGS10lfjMKsy5N9O480MVi6RQW4wzda3m+0UVYHB62A5WtQOAB4DwaUV +Idw5VOhAgQ7OTg/byfhUG/8zZxgcVNVrnjqr/jDXXfn9mF2D1YLcYCsQjJudbP+jYsdAIoBToNpU +Nl+PqFsvFKfz280MgS8rM8Dxn+8fBmOgYqfBF3SR36KFDBNLR1gDw7gp0g5+YVUBe8UeBSqQrAoj +NlRUVIhRnHiOBdwwgrKMg2KKlzQcaFK8677Pb5UV5WUMlDHYTeh7J7mlq5Ic79fPag== + + + LylgfkuXS/+H+6G2haROJdKCCAFjYhNN1pqhbl6As8Ddq4P5gdxlknJrRGSUcbIla8lBMuPTvLU8 +/00245+1CtOMXjgt3kVhylsZMEUQE1o8tLM/pDQe8Pacd22W7A70dp7AGd1uTk0oQeqsWKm1KAUM +5Vt6oHXR/VxqTXMOiig/dCRlorFr3Ht5GlLLUr/YgNVshCKtJtZP2tYha8gDnxW8QOnmPOtOitBr +8O4raPiiu6F3Y7G7Rt+wRYnGiRW8xKWTm2Br0wkrqMF+UpXV4C1FzDMd6j//G0nQmDMVGkWc6c7E +S3iddbczvTwF4Cd/MNmIB9gHDfYTepAIpFunXOE7VlqVjc3HMTy7SrFP/c7HZniptwfKj3q319rU +mfXO1Cqptz/3Y3rX8gc8Gn179M5z/E3vqncLejdR9xPex54NkQ/p8/ZG8Og/1kHnCqtg+mWUCuSi +gWi4H/7ro8QNFBDhnhLl4TyvMx8OqcdJ1rV7fspUY8dUtJx895DbfrBTPHz2iUKf7LXIx+zj1OfI +RjY0lYCp4cy7HU1ArxbGDZcakCdQi5kAxy5eqh0Ph8SxBYi4KoQ3+EYNg+vZMUqeOv7BdmUhZhYf +ovzCNXv4Io5J0Hb07EyV9BY0cDQvhZXHe4yWgtF94hf8WVqDX/cKQqKfh6/6Z0OaaCkyCMUrA48k +0YHpuaYzi8hyRMM/1ZJZmmhSbzscfeaDNNFX32fQ4I87OKI6M0f2aHXV3RiioaVtbO0VpYkG7Z/O +pH8hPVIDOQjqzMb2bl2TGitB5qoZDNGw0bQ52B8xRHsDgvx+fuOIIpAlS7akT1p8T8OWJNFS2d/C +stffT7VGiCiQxUlROKfvQJI/z6kaJGu/nFVbL/Cx9tkB0eD2QpRqRI4m+mq1ioiGQn/DHUeUk2SK +7PDwtdy0MEQz43CENPkkiQ7SoyaOaFlnNgVsiU/psSb1X0fjct6UJtrI21N7019NiqgzsY6nOKJg +XoSi5Ej3My/SRIO9HkHGiGdJogZyETE1//wvUkR1ZoL8+iIxYw0bzatNPY8jOiZKrlFHmmiJyFrn +tkgPEdWZxQw+GV1pmmjPbRMxOP0cfKTZW/xckQKi/SRRi7h9kKhDRFRnPhrK8224OXb7AdnITiy/ +tY/+GEM0bIysZuQAR7RA1B1fMUQUyphorJV9PPN7eG5KEn1LWANYotX5W4CQIgo1f/DDTbwN7Qap +sR4N1fL8+aNvt0kS7Vg3CyzRt2VjNEFEdebLsX6UiE51l5QmWguY22Qm+ShNdPdkkCIKdDIk2xmW +DCcMgz9eiPd0tSBNtJ4qDgeNry9Jol8vqwoiCveXy7H+9kIzEkP0M0p8HdduaaLPv7u/l1g0ICIK +Uwkg2WHFvcEy+GB+c+oxRHttovjz9yRJNPrsNugzX26gxwDZ+F68aM7DyJAmOgnYRYvG3q+NHYio +35qylYUjrREjRzwLibo4ooAKJAua/d0zSv/xICZ63FoeaaKntFM0Uv3n+MNOEc31fBWhInQdju2U +HlABZD2XWqniRmMFRPOnC1VYNoQpomlf1S1ShK5d8JnaaQKmeL6KiEIqNFnT4TCebCBRQkT0cMjO +t4z8PulFRI+h3zi906TjDY+IvYbtfNTS0fbDfDwMCztVblsG2zj2aa/h++vgni6J8sh85p5eaH6g +egsWzK/BHFiceaZfv/OI6Gk46hu26KfHVfRiVYY3S0NX6jmlFF8r8U/s06jf0Rzhny7HAyvLscvn +Wb+lP8U+rTk3aT/+6eTlO8E9FXEsbHwxTCdlzK+jZUs52T5ST7+t+5jot23nD2OcfvsM8QuOtSdP +bxup55SWKzhXB+zTd/PEq8c//SzEHxmOSTwfmQcRE/bp7+l1V8Y+XXX8uQb39IJjfysyNcD9GnSp +kQhhnz75g6kunmPm6WbyVsP92qK3VD4d2KfFbH0yxz598qcNPjzHsnq/yR7HPA2VieKjgxlz3JYQ +PXW2Gsc0/TTvSYpXZbk1Kjmy3PPgMehqCj2wPDGzfuRp/TMyr+HTHe2OksMQpXpy2+Mz9Umgx/wn +E/Qw83r3U6wHPMzfFvzHA78j9a5CMw//eUf+G+u9UTqCpjdu5hjNdzD4rY+vblqfAz9HYI+ljAEr ++OHTH1ob0NPhrQhvPbqxAj+2ewaq1WAB9L6TLD2j9+dxYgfayVA8nEcet0DdHgw6M0cWeToYomEj +9HM+pIkGe30sUbCJ/PpE9hh/rMjTwRKFW94UR3TGJxp8Az4yj2z0OffGIzqzWIwcUWT9s0QDIvZC +658daWktIGrvIe+VT1bA4Ec/liiy/jFEgT8IrP8BRxSMRTDWLyxRwOBjEE8UWv9YojoztP+X0mNN +6j1yRGtWLFFkU3BE4doXkIU2RUswq/MYQx59oifCnu/P/tS8Nzj/bfhrH/Nm2LgfFLsviu+FlrTc +0doiB8b8maW15cXSHdn+IHeavABNijwfaOViecuIVjxMbXRx/6R2tlmLdtahTqL8/dTOntyxLdpQ +E6lY2fSLepGKlT4KQHGNi5BygFNNNPlU0Uz/46pvaQLIBGYIsLYl6A8Y3OOOekkUfQJqL+ddzgtm +9p8m32KmY2Yv7MsFSKXEH+7oKU3HlECX26/gCws0aM8OhjuU3U6rY94IXi1CBrIRN9Bh4ilkNqN/ +oEC+C70kqU6tYhVRp/hdGp6tQHTrLr81TfDiaKJwIGI50JZf51xVienwH7rzlDMvMT6rHjs+nZkb +IfoHO4PM/L0ZlOfPyI7PQcuY1Aih8dqWYZb6+dsi+aQ8C5XMkmnM58j9ktimdGrEnWFWwq1Jsji5 +EuzIlGSVPvfaOS/Jd2Dc9GlJvpnz/lw/9iTPdx2eWULVY79UPYOiUPUEsKpHpyS6xc/Kgc9AtssC +Bloo1SPNuwG8ioZhMKY/rqKL+ofmnW8jzbueW49V27hVieJxkkPrGbQPjb+LocEF0p1WXYnVpaqF +Pk2Q7EjBKRoVfxfjjWr+6rHQs3+hRouASmeraUBSGgbIDnDnujzessuQL+cjuwV0rlvATJNr5xub +rGXUByrOfyVjCPwuvdw6HxnJ4UkyCupIN+ZT25hUU4jvvFMex+W6G5Nq1538qgN75djQPcvOpdHn +avtc8J8PJ++Q4kIsgGa0FatS0wk4xp9Q+A+YUC4QfSkbYHysFryUjZcG2yVev9BYTiXJnqVKkyNu +kBlifmp7L6ywyynhPL6683JKZiUlK0yt6llFjzozdmNSYTNyLwNr5uOE3ZZ0Zi3zW4I8KWu3nqTW +/qwk1NMSzKpvuY1Xpkun9BN2r3xp0v1RY9KBLuENOmbqdGZ1Mwi8fFnDQsnmF8zgxixrWGiYv9Lr +H9cUJck3NPa2UdEveNWZmsaEG4rWfjEnvHRjPXknRssg+VbdzRwbHu7IMaFG09ivnTAOM4ocLhzX +U+p4pXUsOH8B/SlLOYM4g1Zyg/bnuku9gh7jGdjSq/KUNtxtVea6e5M2R5k6j72YyTI8MqlxvIGe +uHbu9AwWtc4Ha1uKuZM6stuyYhhB2jAsi5SC5HpRnqbUUd7FE3WEluTLrihoAVUdEdmW1/FEYdnz +OkL5yE7MFrUow9D1hwafnDqUFCYZsbk9/q/jxMMLaINPFSjzRQ0EMEENYAnqZWwYSfWBWSAVebND +Z9bSKeOVCkCoLeGS+zqZ5bdltQqgwikAtf4+fnxWFSzXqWO6wFZQjmeILXku1vdbgYd67/cQqsLJ +V/w6ljjNIMiFk3R8MD45kP1lQK180idWcsxSv8Sxbg/ykgCzNC5xAbPYJY5+ETDFVl7hAn+CYxEu +cUmvWzm6BKTWoC5CIhdLeBKHZMW9kQvJiiIkf09CCx7jFCuHZMHQeAuJnn3NYZInmJdQVxveYL0k +cVeezsJt+YrwBpCDvR8NCGWqXMyW+rkS7amYuI/OLBel+3uCh7u9m+I+kC3KsT6RKsDEayB3wqok +mac3BZGGncCUzpzFpjSQA3wwkdbJKoxpyOWq2JTWwjvKHkP9Mcv3R218IZBuR6wiieD5Ypo2wqrI +Er5uvcQbdvmhKct5ldv82P3limj0rire93AD0pllJB3IjnDTu0YBpNvmkE5hztUxZqgQpNeJtjqc +LQu4I9rolPYhvi1LjYW31cHDKis/fwOOCnynRhiwq44nyXnQH4+2mPflmLtvUrud8FRU9REkaAwX +b5WKtlKeBS7eChvTsPik/SWwaHTmmw8p0KzJb3k61e0IHUltvaHPxKl2bl2BVCusN8m1wuhkLe1o +3/dYf1+iMcEJobZNVHg+aEXWhcsmtDjzKE31LicMeZR8qjMrL0MV2w1szO/RfMaHMSJgLqdDFSt5 +5md8L9jFxBrtuLJfaLTjSnyAp0KjSUZI8oAxmf2tGq3NaTTGe9ViwYsbU9ZoOpUnSLCx6zUauypL +ne0dNBqYNSmNpnntg3a0a7SL2AXVzu0aDbZy+9krakfmNMiVs7GnOF6dWcoaEGxCna2cB80/OpS2 +UYKupjDfEvg8F7Fx+N2tB7DM/vJt3ePVkErLLA/W+ctJajFTEXhtahY01tFrUrI6M1bNXpn9IFzM +HeRLCzzxawwUMGuipCachlFuR51pj20FxWFAO7enQKBWMA616ORduR3hobvK8LLEaQJq7B6xamov +BONzQutCuBuCb9232Pc8IR0bmsebPb7uu9poFi92gd0N3zXZ9/IxWNjY7fb9515qL9S6i8FZ0x7S +utzFYDu32Pe8Vti98PpdDLUjYd9LtcJ6r5h21O6G8nsh0jCf+5t3Q8FeOBSfEyMq4Nu7pCNB/SOZ +h0XvlYLkKS4NA2sLDA8yU8JnpUvF6Vu3e0usWhTnB43durp5/ZJY2/K51jIcU2XuMjMJqeA8IjCX +HlXrXOb0NA/42fHKRK5UpNOJuoSVCJTbo7i8xBtT3uO+2JbyHq8qv1LFxuTPdWfY9Dx85hrG3wc9 +86tjpYrFNTneL9sWNIY9u2GjPWoT6kFjAVOiWrtHhARwLKLNxMDkIMKZHHpUxWCpxjCLvSebfEtJ +hI6J36vqlEqJuFhc9I5MLV1uP0uF6htJz4KeA4SWOy707k1jqHd1BkW9OxsYQNxcUQpBR93ccjuG +jr+LXSLoRIihqzF08gg6pJPvgKHDEkUIOixaUCOGTh5Bx0cL3oKhk0fQCay+GzB08gg6AVrwBgyd +PIJOBi2oCUMnj6BDaME7YOjk36Ox1Tdj6C4WrgBBx3oWN2Lo5BF0yB5TxtAJEpJlEGavVlLK2sbn +wOORQKJkFxVdkoz0FpQTtx3q8FKkyEe+Ohm2ILZ+JYIDaiO9HwXhbq9t6nhnfAVxwsbVfEo4BOIq +xIqye7xNDRhs/jvvKAVRhGd8co3J52GpGx+K9Skh51SPTxS5ulwv6pnu1d4lDPJRIXIl1yUpyBwc +iybQnCpdUxSlgnC5PdoAVCdNqSBU/phkMoj2sDEuaIxuBrs5XtVzG+WHplMJdhNmQg== + + + ag0MIkkGc35rxJgCu+GObYRekhLYDe+fyh848LRlUTYZROCaKrkhRRGaQYAUVteYMAXLd3liM/Hv +lZCP6nTWmNTk9KJViXN7JwF8CqUmiCnCvtVVog6VfXvALKmzbNYeuwydKQUOV9GdKEwCftuWTJq9 +4sSqhDW7sCgwnqUkxoEpml2qcXxnpRx4DTi+iRL+xSgIWuGhaXgQjLwpfZkDb31cGnGdykhBNPHz +p5gDrzqLYFYSRjAl508tji96UMLEyAmDMDsdNnY3hOiBO/nAIVO0NKYs8eo5Jgyw3sgxRZio+kFy +Gu0qjgkDv/5ct+cWJjqVRYn1EkgudbbsRcz30s1il3pTOm4pj5cTNYFpYGUQ7sgSTYz8Ax/8ZyS7 +ussqnD3W41Nw9hZl1c4ergFxjuIVTShdjQLmmb1VQx1U7qoZGhLK+wtj0kgvCwhxUw4y6GRD0hCV +hnHiLsReDiOnU4A5qzjyRAOSv/JEd+FeydiR8eNFKr+tcFLBct7JCE6SfyvawjsSrhJlKSkA5C60 +Dh4RdZLcza+wxypqVzy33rH22G9FW3gHD7MTZxBdzaelQqRBJ3Il8CKgMSIj6JIAjww65dcS/pDp +knAxK+9iMnwKqu2SfHa6MihOrkviuzs8ovgvBUm6R0TmCUVkbsxSA5awSUVEhj7jU4DnmOIeyy0R +GZ6//3R7RAY0YJPJ7tAAQ7smInOBFrw9IgNhaKKIDA6RqoTPC2qKyEjG+Z9UwHPUgXMgRA8sOGVJ +Vpe+B0t1EEJjucoZy/i8cTXGciDddhpVCIM8JnFXvU8mA5yXeMN6n6AOGFrcppDTqwaGdmUCO39/ +gQAyfHRJA3zsInVBEi2ohKvTnDR7maGKcHUq8/VkcXU86KgMUlg5CFqVvaSKt3p5tqVsqt7r5V2k +8DuVGx2DecclJt0HDwep3COnTh4Pp/3+sWvwcFJZ0K9/98bD3YCz0ICHk8tQvR8eDkatb1yBKvBw +EjeCYkFc1+PhBNlQzG+s98bDie8dpRBx98bDKd4ScBc8nODESkWq5XV4OLEvhjvWgUi225H1cIO7 +W04kaEqYE4mzLdXkRHa2qnIildb+cRW41QzIowSJ29HoqB2X0uyrbEcNjgTbCmWPoXbugOS6yGSQ +yYFX1mgQXIcPiF3mO/Nq2WAynq17x0XGs3WvMBGiRYiN9nQ7tyxDDnzEiyrcugxBY7LXykjpMewy +7O3ULkMZaxzyW5u/KClo97kNGLWjbflg8MignbsAIQtedbuYYjv4K4Ext2nh0qwvrwRWvA1NGJUW +3dZod13GsCD4TP5iJ0WHmkWk+gzXJojwxoy7WPgqROrYMFQBIlWJSB0bJmpCBgpQv7sgUj/390Gk +wnbugUiFeLHbEamwlXsgUmE76q6BFrnEUnl9aIHgL03VnGRkd9OzL1yG3ZuXoQgKJ63H7g2FQ/n8 +shk994DCSc7L3aFw18cthRyT9901+JU3QOH4dxAhMNy/AoWTiCr8C1A46fiYSv+sJ2cY8lUB//5k +OeDTEpurquZGeKE9lvcouEVqE71gUyFVEUUVAWTYGP5mO402zMUlw1oPF3ho9J7KIxy523mBKpfa +8jgqyuBmMa7uE3sdjnhzYKKjEtsDt35h1TiXFD16DlCJy9TLsrTujIcF4+xcJGOmzIBspV6LGe/J +CjQ/2UpHeqhseKFfPGSy5XDrKZ/zTPP5nLcKixC87ZjtyLwWdpmOOAmxWFKoM+gl0RilDzzuLNqI +v/LFSwh2S0xf6vzgM49oaOkwJ/VbHMIu2OvKgd1mXixRgmzl5BB25pef+hhHdCRDtOSO8YiKsVhx +55EXhROD3YLdZY2tTCiCgBlscmA3n0dEVFiPL/GHQ9iFjcZ9+PyJA7t9yKHO/uQRdttWC0vUUpsv +Zziic/l6fI0unmjx+aOEZa9pE0gMcUQbQoQdmlWwYOlRo0+0nMdVvpeQeo+KKgjeDH7WVLUYtL9S +79FbZy0sYYg+M15SijyvxRuqXOxYRcqt0IJ1bqixCM6IXi3b+0B7lDNUxVETfB2rvYou8c7FZDql +lJyqlOdBea/3rCQnVXZE4k4VFdEluUpymqJwHwXVKZIKaEh0J6SGvD6lInKyeX3q5UmhiBx2fFJ1 +35SKjagdn3KtAdVMV6ozIrpL7Yb6cerXS2mOL0SETXdVW4BOPtJ7DZruujiMVjSdlB/A1OK8H5pO +5f0wN6LppGKC4vVyO5pOCkt3LfIRj6aTisVLZ9rfgqYTsIVes5L3j92EppNqSuGGkCvQdFfuyBrR +dFLnNOxeeTc0nRSWju/v3wdNJ4WlU5nbowFNJxVrZyqw3w9NJzW7KNJ7VzSdlHHDzx29D5pOCkuH +uW3+BjTdZZeWRryldC2aTso41ZnvjaaTmj+JbKgb0XTiphRrCl+FpsPZlvdF06nn2C1oOlFT4jPx +O6HpruKYZjSdLMbqbmg6aWz1vdF0Ug0AKndG00mdlohy4O+AppNSD0Lv9R5oOoWTkTuh6ZT3l3ug +6aSYwVnj90LTKSG57oOmk8LSYevx3e4AujkHUFBfTNPVTfgqXpdFKsW1OVQCn/YKi13A/OAWV8vm ++np1F106wVOee9erw1sX6vh0clo18YnjkiATEmIyFQ0LlSIgAChgUM+4Tom6pFYVqKguJzyYuqpL +kGOgU5rKLst1STqRAqthZPgkU3YZozLhLib0iNK+p6PIIwqYYjuFwubykTm2WpZcobuby9zx7rlS +aZJfU+YOW12uqgqrpLLMHQ7JpQ5IpypBQj4/mSt0d9tclXo7NVVmZKNUqsrcKUYUIWNuLnNH2zDy +he5uLnNHYd8UCt2pOzzaVe9wz1Ug3fbJT6J6nEX1bilKuypncl+N5QFDe7SrlU/sKQ8sUKeYe6gk +nxBGB51n2Qi8KiCdmoxmnTLCEJ/EoRpfCKjIpB1qSCKD3MGG/oSSrK7CFqBstIrxRPDSVOyYpe6G +wp33lF7/rgR2CbKhgFAp5IOrzoYCTSnmj6nOhgKNqcvolk9sRrrvLsjH249CYEVBmevA6dlX2Y6q +2q5SrfAyu97usQJRKxdIdkmksDKWHTWmCliLqwEhBta+bS6BtW+b+90KCBu7SyFjJGOgt2qUGX/v +wrKyJcVKxXqvcjnUjssjXYjEu8yglvXEcTnU8+PqLsgU9uZj7ZbEZVO1870qGIIHr/gjYtVrv62p +UDXu9A0WXrvZnKBakcvq1NDOHW4JoNq5tVo11QqzCKVuONSWq9pWAWTQdMJrd0osw44KIIOqCPzN +Fe4YfCWuxt0Vy1AiueLautXaKtzJIR9vWIaMoNEV7u5SKU8RT6SuUt6teCK2Ut7ty1Cmwp0Ql6QG +H3JNhTu5eq+wxp32CndqbzWH6KfbgbWfe87MwXmvqoG1oDFlM0enxtChatNdB6wVIx9Dt8aPIL6w +LgmH1nbPFWrnCr15cUcEbOcueM46oc4XU2wHj4UVgZh0StdMoHJ5WvDtUiAm/qkoVBCui2UYtylM +hIq4FlP3TSWMSQ2Iyfo4EHuivF1MDYxJOEiF2CnXFDsvWBhT3KYKoS7rtrOrMm5TsyrVgJisjxux +8X2tX9nVBGLCZRDB2okyO602w7BLY3hvuJVfZBhKXJbY7VE1IO6Bcc178LeKQf9Fa0U6TeUeESvx +9ljvfldT9dDp250wrj3s1VTabZjJUVO5R4VKed4rMa689cmmYahAPStjXEGXVKOe5TCudAQITkQt +Ik2PMf0g4q382CqsfPmc9+m9YJw/venMhbTzrfW4HTnD4FPpFaH7yO4nOfNbU4YCtfGg0C4vdkx/ +EoDwntNNPlEBHk5nPho7vVd+qEpYhy2e/+hh8HB2PAjvcB7FfUKdLILhEQ4c9i9sNEWa9i8cCO8T +SxSMxUDuAtixEiVjv40laq1MPAtcHTY7R5RFcnEMfg35eUSF0LSjNWLh6ggGRChHuy39sZYiqjND +BotrzglgeGMx9o/P3mryFUM0bDQHnwsjLgYrRsQNZYiWTGE80VLD2Jciiuq+RcsCaKWYaFOujmC1 +gydaLLZJQWYXIGuCz13sJxqEeXY8eoWzj3kvkCew7/HxlcTIEc+qaNEZ356K3DYJxtwLio1O9rCG +jvYIN8+8TJyY3ehUpk0Cpobs6DRIUMVMOXFSxd4M2n4UA5sUIyR4SNJlahW2S1CS8Z3Kq4E2KQOb +jveqzIICugqVWdRGkgryqVXYqbuozAIIvGlJQZND3YlunrwBlaaQoUlxSadOnkSHXlrHx0atIe5O +c5VFTJcusrTE60U10zVlaenMcp3Cx4m1dQloS3yeFt2fi9xYkboqfqYcwsPr4mXNlOtcCdB2RcXV +1wox2EHxXpc39tx6dTccqkAjyYaX1Z7yDIq33ETLYRIvroy7CuwmfWSt6V7rQfHKyLLwFk2IArz1 +Elqpu+KweDElr+XyrjgZB0g6PiZMGpE4Yh2Tmuod4DUMeTcfeUyKNcy1p94U4A63jtGJlXL5OkHP +xHF+5ZAdqseHjaoE9xcJBKvoQbs9gqn9ZH3s4g8HtQHJLupZ3FCWTR7JpAljFdN0zwGvSyL8y6wk +FztWtMYFXeKl6tOn1bxVqxEKuDKpgHLy77mSgQIqlTRWmD/u5H1WUgbqqBYGUV1jySozGhpTqqJj +FaNrZRoT7Sq3cUwRy6N+kMKTyxs5plhPRxPHasFPTGMXcGEp65Dm2JUoQLUYQNX3kOAAYqowgDLZ +6SpQgGoxgJfxZC0oQLUYQP4Nh9pRgGoxgChqfTUKUCAqMh6mOA9WGwpQLQYQcux6FCDHT3m9IcRY +aUUBqsUAsj7yVShATJcuMID880qqP5ejur0on/qKbLcU5eON5V8syncRVfhXivIpVWS7T1E+CjMi +b6DcXpRPZ5awCu9elO+yPvK/UZQPXx/5nkX5VNWvvKUoHz+qADsVxnaKZpESNBhf1e/2u6Ge7nE3 +lMq6fqruhrq5rh9vaHe4GwpX109bntK1df3kq/pddTeURF0/+aiQtCeuva6ftPDJ3g11RV0/ZUm+ +R10/+cwQNnJ1Y10/JSTXnQK6slX9dGZNAV1sXT/5oYliF1fX9RN05KKq3xUVQCTr+skPSCpD9Zq6 +fpJwRLlbzdUzRjVSVvIu6Cvq+snf/MWeid9Y1092o8ujXewOdf3kw8KabqCSqesn7+pKZkFfUddP +CibJLb3b6vHdAfOuqa6ffCswzn+Pun7yByo61e3cAnwXI1KvresnYWryqvrxqzMQN9T1Ey1DQljV +T3Bnl2Z4CsHW9VPEvd6lrp98VT9Wkm+s6yefcM1DpN5U14/Db0nJouieq6vr+skzEFmwd6jrJ7PW +jqvAnerxOeRbUV2PT6GcnOp6fDfV9WNbkVw+WtEcF3X9ZHAPitm2c611/eQteXjjwT3q+uH28M7l +SeJ1+C0V5jxzkqi0DJXq+smfNwuzCK6v6yfktthbvLYen7YkDXw9vjssH7aq3+31+A== + + + 1ICYlG5vuMzV0FaKT4xIva2unyCwfVHVj0IM3V7Xj4VKydUVvbmun7yZg5ExzXX95Kv63XxrE13X +78ZYn8q6fipwr3eo6ydf1U9zPb6rULgibXlZ1+96MDyvqh+Pyk11/S5DyfyqfrhbzrTW9ZNP7xLt +YlfX9ZNPdBLFlK6u6ycxL7yqfvL3wqmv63d93FLIMe2YJ4xfeUNdP05xSVX1uzp7UFTXT1YieBVA +bqvrJ28YUt7r7XX95AGx9I58c10/4SDFVf0u7DHVN1kJ6/rhjSDKhlG4yUplXT9VNszNdf34M3l5 +gCODrsWsT+m6fvKbgyyK826AWGrf90psD305G+2lLZ3xIb5XakndqCjaK8G3+NCufOK9CLYokCZG +xrjTm9Tjjo+Dp2JTNCmbYIf0bDnGEN6XeZjl57PAE60dIfbNf1zqwbbypHd+PJsIb3cVoV6CeCq9 +qZ6qeAjbRu+dfuyCgcPyiUytv2KNtsPm/rNbc/scUV48Z437cy6s/xzPAuDTKGMORRNlS/1l3wzt +V70PnTkS8gSn0TrZ9VQ9B32oVgqOcs1VOz17q4ffl635c2jfsc2/Te9Ze7Dwa2g1q6v4OtndztO2 +zX4Y2ZsPmU34Wf/+nLaaArZS2Pz9UanYz0vjR3D7OY/Tax9hO1Pt1ltH73EOMnr/Yt9xJgPWDEHm +qjmC/J4+EaWwpXk4jGK2wzH6XjkaB+HJMTT5eGWRli3no9f97gnUYgYG9vbrPRw/t7DYXMxIYasv +dYgAX5ro14ax7LSxgw41WwIS1pM8j3xmRzZTe5JiFmIGGO7JAuclYNJjx4oQjbaxdf5q7PRbKdPm +4CUt/uDibFzP9DOIJH1iwKH6s2sXfIb5avUNwiTqs2SrZSZM8xny91+3QpN9J1o+YGiveR5ojou3 +8oYG1JoUH1Jhc/6sMxf65LyLCmjmv0rNbvg5PzNkvKfkU8Z7nCXImHH1WnzPBAaAbZtUad3pfmbL +Yf0EtNPZM81S5TNtPucqAqGMvUEmUdMf0Kiyf1soydnq+/vQWex0y/ATGPDr2gNBuy7KrU+Fegfk +ORHekw1mIwxPlCb2hjxW5pPPhmLHgCORDfgz4kCoX6BwKjvw56MLaRijFexiHwfwRd7D/JD0kkV/ +PQqaLRPOgst8Jm3lSsXnsi7/itPVPkZ4UxE76ijs3JfPkfcl8j9jrw88eHTyHoxN+UedmXmUd3OP +/Ll+O808qLD0qnx6blNlyTDm2Q5UxnblK9UMY/Y7J/eyzuwrDTxT9pGb105pFyfgd17aPgo9ExBl +9Ocrh2t++KefansyMLNtN5zUK5OdD1roDTcvBmvyW1M2mG7V8FAvTcN52E6DgMlhB9+0/IL+pJud +9j989Fz1SKe3/rYKgKctF3rqt4fjM4Zoy8NQIeymKOFfv5mLrpgdSAfRMfH9/ZGNPpajhOEifkSH +fECLXkrYJdoT5o2rb5HgtejzGo9JZztxCKfaweds5Gtmg6su57f33/RIVCDHeh9+duJHAVMyOSKH +9o+q336erZihv7u4CfMXyo9Qpt89FIsK/YoPbuQmf2H6EqI/rdt++tP5Y0Dblv6ifTykP/kXIdhE +iGpi2M/AFvseiNfY+ofrGkH9enhu0m2P7F1W2vp+Xm9GidkveoA41g+yq3LCG8voXZ+HO00Cpik0 +c2vPwpF9nX7XCtWK/o1TJOxhTp4NDlh4MQfuJDEXMJ8rc6Y/X140jIDF3w6i3gYsiY8Q/akw/mHf +C9Dvdf6y4t685FtfZGFtmGabrU+rzlycuDPvcLNOonw2eu2fdmFqLQpNB+EhsEWgN1m1dqk3mV0M +ak6R3ox/vWxtxfdc/SlnXx/gJQXhcq5IeFqXelNcdtiKBg7UWhRdUWtnz/iA+qeH0V05qVnNdQdH +wrsyeLw/hldLwBT7OxGEzXOk9RjQligRHMVbwZ9BO4I5+4qfGfhn3OkDO0cKKkLoIzMT/wl+04Eq +pexBdh1MvfGgSARUQjDSUPZiYkplQmL24YOqDea+7iHOgtiMmAmtOigd4sqbJ+x3Lvq7tg/KdBXI +RqRTzo9W2ZlAq9YIIjSpwomo+vjaMLcPIzt58QJ1HyDQ26KtBQ79Mwu/8zHmWS1Cc6JEutErwJNr +7sGfNS/TNtSlsDdAl3LKmtJ8YCxApbpVixJl4V2cMNDRFXGBWlTQ+tH7S8f5kaARc0PIy5mV6Dt4 +a0GDmJk3BfD6wck3c1ATyfQbr4HKp8sjbGCZag8dVF5f8wQNzLbgIonaEX5nBN9Fz5SVaen7n3im +NmV2JV+KbAONywbOVANgLFQTZUuZb/UCmXfCGxHQHABD/NkP4a1gY3KVnfCTh/3Oy34H5sX1tof2 +wYESdiD2fd4uZuFsL1gze8SYWI9+xroCRtnE1PwEBkOwJK4ZTW8YcEDUdRMxPVc7GtYi11M3UfSQ +nUnX7V63n/k+CNg66XnJ2atO5m6L8pfH8NsGI3CSgKjHjZb15aUXNMKX4Vgg8rKirV7/2ccZvKhY +OHQbDExveHeAOHgs+DgEJrwrSFgW2PP92QAh7BATPG4BExC4jmLCgM8E/6KBmAAf9PksEJUuByue +YwFXT1zIhHHymWNC4GPti/KKWX0dJx4+Udrw/8KyQFy32sNJf1e/9RYpJhxyvQ91coCu5keCfdZz +LNCZ9cHjh4VlQldGDuCFpQwXP6VECdsAl6fU28lLo5Iswigxrg9wvagZxvBw5TCYCAkKR9w2jKXk +bHBzQa1KuWG8fu5uk+nX4Z7VlqIm1HECNDE/yg8DNOAwIUlmmkjn91tBE1u9ch9ktdPBgBpAHOv9 +cU0Q5Xpvyn+z98nKb4838QT5VRbGXF7/bpYxdB34bTI2P93SBGhgrb9ZxjqbG2Wst8XJmOomJgdl +AekLZOxiGMsbWfm6OnMydl0TvaGK5dploj3STUzwuk9dH+Y8VlIc0zobvaXyiuf3AYzloherG2ej +tzmLWMlwTP0wDgprQ6oPAmxCqnc23CbYfaNReUf2Hz+5JvTWzvKN38Rkcu0ewO7Ik/leiRMKfVhi +1ifoA09bynFisjreqi0nm5OKnUhmH5rsz/J9UNaWk7Oe/+fUaBD8aTEykc4y5UPCY7kYL+xt+3AE +wey7hrOu3rXf1fSueveFMgLBb7hIWRd6fGGea4byKeanTBTZpWwMZ8DzJsemv08qAmJ97IUo3Cv0 +uocu6Ku4mWjl5xH+yQbgylb2k41y7ObHFbTGy5S/Cw/+Xcjrpv/MezyUu83k9EIPm3XHA+nOLse4 +vUEbG0y084OXsRMb3Ks6+Q9qTjZsWHULIoquQYQNwVQ5el8BU2KRZei9+DjG0CGK0qOD+44fHS3l +XbwHguhoqeKBwSEH4N2nk/K1v46/QHZKTR/6M5Bu68Gfrxmu7SEdtnglEbcdwF+Y55BbAM9poJdQ +iwKr/eUA18vrixfGNlyAwN4E/myjZh1USMT7+hFgI5NOZ8qYNMKnTkDAA4yWXo0L3Y4YKiPA43Df +XfCOk5b4YmNt68xkshj85YXXqeB7qdvgH78zZ/DsaVEM9HGTl2pRqj0qT0mhReamS9Si/SnaiEVL +ZMY6bxUqs0c97VX3uj5GVFr8gJ99PQR7JR0h6o2D7NDHgMopRk/Y5AWFRFx0eH3S9tJB3kmX8E1q +FTv49OGj41GTgT8Vq/jBXE3GAebTLEhF4F301K6aqEU3OiIHf3aZoNzqg2A+DThpm/it6VqK7s1q +FuA9GOgDQzouWd+b2bGs/sLIawvkooFoYj6wf+eXYfIlt44ao1KRFmpA3D9UxjYXqjl1PSzRKcq4 +g8JyGhC+ki9jA5/GPubTjAsBT+kg0uk3eNGb0KlDOuypRKTjNtTJUd0co4KhluExQjyVnCG09r/C +9FrsEkbkpMrHB7VHB1mOaYgPao8OSt3XpxQf1B4dhBzTGh/UHh2kJFlbfJAfHcz+T0oX9UV8D+gf +b/O8nh9eDj+Ln82DS5fQebMVn6+9mW3Jw3zemv+vU2E7Pf/NN6eH+IM3+5avVKKhwny6nc0fUDJT +aBRh1YabllZavvlH2oIQIwqW5wrfsdKqbGw+jgvfRC/FWxaUlbJr7fWu5W8ZbKjOqQftqh96l598 +09vKRxf8s0ft8hSTJA9WkVZyGAvzQ+5cdNZr76JTAhSMiY1aJbA9FN9z82bGe1wkveVsv1rok523 +jPdEbJmAIDzPFGQP8E69JQ7JgSFzsujtyeeg3u21duBheQGMxVSIevUueyYDv33SOxuGZzi+Z/gg +rXdnAzNoNZT1jr0RmGXjfZSvKix+J73kuK2OHA6Z6X7dIjWro86Pfa7FIoWODWh9CZcfOslglp8X +/QlTGm30p985Mg7stDVg3cMSMmUn/Wfc5qYMGSroDG+IoZv4bsdPzEquENzpI1+PazjK5A4ydWbs +USb34GYzgToGHvBp/wtmAkrLow2Ff89M0Jnlt/X7mAlUaFt1i1eaCcDQYQ2Ff89MgIYOYyj8e2YC +GAtrKPx7ZgJvvUz/PTNBZ+YMBbGZIJ8RQmch1uK4zYFW/44v8gxdqeUvcKU6gyJQiu9dvf25b6P1 +5jn+ClVqGejSdEtv/1mn9O5N4xPq0hjcF0xi94qasMceperAosna0ILjDjXfdvRL472bSfwI2rjE +DzZXw0p5f0BbOmltCU9YeNqS3sqtfmtG/4WmHWrLvMeFbp/2f52TFe9P9+ShDI8fV9yJ0raAHis+ +SYHOgd/1XBXNPnzQBlQiB061Unrsi14CIr2KslGASoU9s8HjjFVubdiQQueL4GwYvrNXituhbNSR +MYIM0Ch1mu8rtW1R1oqhTaLSIgg59uyhLRJTxlt4Sm4J0M4LQSlPnsYutf1oIsA/Th6qh01j5U4i +gTLndl8kiBcADfb8X1RSlUpLKw5CosNBLi2POl90888Xp9Gq6HxRrz/Z2PjZ8fXifDHoKHmC5Sxz +3Pa4ZUo3CQ5C3XXuKMhvi/UCgoPQsFFvzpkKTBNTy8VJas7La8BHdks+dOBLJzTQyx5IOjLZvT+p +dhEZB1DQUkjOme86e+a73sH787JxcokWSOQE5j4dWhGGHdWG/JAKgwOizz3p6/UdmXfHmDmCRHY0 +ffqmM4sPIdGt6NcfQdqlTt9gSEj1+Zvv5lDdKrpjmJAJ8JiAToVpJgS9HBNgb1a8I0h0kx6OBUwI +NR1fbRgmOERHkO4bj6IfT9zxvPqwK08O0vHXk4qjaDrFUOowmgYWU1xE58dSoiRzmk1DIkEDYPZV +SuNFE6iom7o+UKk5l02gglS3DAMl8DNLinekrWEY7bhXU2LA5ap0xU6OW2QautROUQM0x9RyAnrg +bqVhXB7t80EyPtcuT0gOQyUrYQqlDzVwNJTKOSdbykNnhgkPe96bwO2302+Svz6nRNEPWs7HQ+uN +MgYMFNttMlYLergGsDIm28QgQ9wqY9al7TYZIzZ2jIypbqLmdCkKCL8BNAihjA0ing== + + + W2YD+POPXqkGgIypbaJUMygvV+kG6DRWaPCp1n3SfRh4pFkJ+4AuJVecDWBgKq54uT7AJOZd/LbZ +gFatPCvR/iI3jLKb1LY2LvoQrvmgNX7D2iinm36FPhxSXh9vRy4HT552ktfEZGC+bQ+YLJxOZkeW +7YVMH3Y+vFCJ+kCvfXEvpqaI+yaJmLofPbclmcEEd8klju0Dqy1RwmfIZ0NGIld/DJGPuvXTYCHt +HHYL53Gplv96ihnpkEEow0SSqBD/058wT52CTujMUuCJe0MnIJVL8IRm6AQbDpU+lkTzoupgUnws +yXuwyy/YB6KYPgygPsOoAu/bto09Nnh28R8sgiwmAXrLwEuCeoVKmYfqAUoyOgfYopUK/2w4BEen +YO1A3jZo1xsIcZz2Nlx1dD6eg3IJRanhpUEU6QpkW4Nudtpoo2YDvChjeXigD5jt7iBljbfc/IO7 +dCahOQn/4hCG9eL99jKZpLyku7XYqD1yZw2h06tpXvrqRxc6c/btbPop9mev8OSo5ePk1/91HmTo +mERvEGBDkUE+YCIdYUXl3U2jJhp5qFfevYzYvxMooeELupzvPia69I5OCeBpwnuA/RSkmigm/sLg +zz7d4nCKJr7PHuP3CfaTjz/78E5xFpPQD/CxFIWViYky/oaYsfTDWJSKE4dR0dEXnHB4FT5K5cvD +EQ1Y7C+QqV/gn947jD58+dhPfv579UUQfhfkegPWPtOfBjnq9PIFZ9ROksV6J8oEN/9CxHwSD0MJ +9bBxij6Fgvz/sb7/a2N92/9J6RJgMBWfb1jczPhnjjqzGXzzNj+dd/CF0DA3X/xsauN/5ged74H6 +HwH+B/+NxB58/uiDPxQCf4Tgt7WJzobeffDZH2pgdxl6s4dT4Wd6+tluxod/HuLwq2691q4UHuIP +1LtD8G7iwQZ6QwzB2+CRHR50DkEPhzriIQv+3/2v7gz+86IjPJEQ4QfEPeFILBwNoA+E3+8HH2KE +LxxEnQM/GOsIuqfgj3/AH0/gwy/46r8PPuKh/vDxRTzMwIi6TV0g9uAG3/2hD7GHNfpvxBPyx8AA +A1FPyBcLgS8eAhH471QXgP9Z63yeYAR2Bfzho94nCD/8GAPv+FCTa/RfnycUjEUffPQbbp//IYD+ +BU1F0AdAEpChnsSoX9CfCPDSt64tzUiaQWAIaJQzXfjBZn/ovoOv2TFRH+GoqE8y4wIvUCMzD2XH +Bh7To6M+yYwPNMmMEHyUGaN5iBEWNEYfkI7NdvMQDMTQ+DTLAjvP4HVqnv0EPdG+KORIlGOIL4o4 +Av6Dphr8lzfX4C8f/Rv4wU9Qcw0eobn2+0W88AcgL8C/1FyDD8xcwycx6heQLN2562cbjYz+SLDT +LTs6NOFofLwZlxohmmc0RuqTzCipGUfjZGYcN9L/U3Me8NNzHvDRc+6PQa4EOK74Y4gr/hg15/4Y +f87BXz7qN/BdH2oHzXrAT816ICDiRyAI+QH+pWYdfGBmHT6JUb9geBHw3zDraGz0Rx8767LjQ7Pu +jwlnXXqMaLYDfmbe5cZJzTsaKTPvuLFqm/dajtqHwK6Edgs3sI3Nr+PFvHUY/6zBrrQ4jv8zfxhv +NtvT+DTfgScPi8P8eNoe5g/H5fa/8BvwE+Z1sL+9kLr/DTBb8Rk= + + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_dark.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_dark.svg new file mode 100755 index 0000000..e698e19 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_dark.svg @@ -0,0 +1,1935 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzsvemSJLmRJvgE9g6+P1qEHJkKGgCDAcYdWZHwOHo4Q3aXkOxjpWWkJJkVTeZ0HiVZWeRyn371 ++1QVgLl7ZEUeRVK2K1CVEa4Og5nhUOjxqeLv/o8vf/PF9ddvfvfwRbqaD9Pf/d3N24dn7968/fmB +1MMvXr787tt3b0H6ya9/egjr1SyVrn9Rv7KK//zw9tsXb17/nF9dJfnyHlf/5BffPvvdw8uXD4df +Pnv99bs/PHv58Panh5/8VL7/7Yt3Lx+kxh+evfrdd29///D26ts//v6nfmtp6/bZO/l++Vn8WUiH ++PM5Hr78Fb5+9vqPz7799sX/+4CbpYp7Hd989/rrF69/f3zz/wjx8EXKh7Qdvijy1X9/8euHb9/z +/e2b59+9enj97su3b54/fPvtzZuXb95++/PDzZ+fvT786tnv5Ztnh/9b3uDNnw7Hl8+e/8ckb52/ +un/x8kFe8NWzd4cQ0RfXvwjxq+N3L15+/Q/fvfrdg7z6upGcvmKT//SttCXN4m+Qy1e/eCWU3zy8 +eyfPJTdEf/7674/jYwiR5Sf/9uuH379g90u3/K+fWrNv33zz6tnb/8C1hy+W+SD/2R1/+/Dqm5fS +e3zdOF/lwxf8t/9p9eQtWOeLuFbplbIe0lwPKVf9vvfNwx9fPPzp54d/ePP6QTvg+u273+gQLMs8 +67/6za+/kzH+p9cv3smDrSBt2gO/evP1w0up366/f/mML84S+r9a4bfPZE68k7F78/K7d5xZ1e8g +PfzLZ39+wDAFvcE/fvPw+rdv/pnP+EUM0k7crrZDXOSNQtyWQ6hsP+JRt7ndM/R/tWk0hGa8fcyQ +L2Wc/vHti9+/eP3zL1KVvk5x1iH8+7cvvu4jGA7V/pfGr+rw/+b/69PKi7979/Danl7mzc2vhnkw +X/3qN3LXu9df37x5hd7/FhNcJsBrmRsv3/xev2t/8xu5/Ltv9A34+SsZqC/fvniNNqd/4Df1qy9f +fidf/f3bN99984vX//5m+oku7X9+eC7rV8by68M//u5/ywdZn5ybh9++ffZcGpDPrc7Vsxff/PS9 +zcnLvX046JdyJT/67++/+vbh32VV9cuVevf6jw8v33wzNNsowlUO//Ls7Tff3/SXL5+9fvb2QHpr ++Zcv/ijfPJOe6m132hMalVnyjXQOL2GVkxu8p8Lw1RNu9OzdH4QBPbz++tvWtn7cP7jSvr+93zzH +HHx7OL797ts/HH775s3L1uz+q9a6kUlF/b+Ne3zJC17/42vtoPM7WYXTOwn/+Zu7i9R+/A7y5d9y +6zfPXr588fu3z775w4vnl25w4ft2J/3uQybWn1/97s3LF9++6vNpoHz57O27F89fPvzmz9++e3j1 +5ME93H39QpjcI8v4vXV+86dn757/4Zcvfvf22dsXD+9dfRiAf3/x+muZ+7/57sW7h95Bb159Aynl +8Js/PPvmga/x7g/3rPmb1mD+Slj/yNy/+OI9XD+sh+Pr4fu/f/vs6xeyoYjQ9fdvXn798Prwa7D3 +afdJtq9yOH49/ds0Wwksy+Hvvjq+nf7bNJ/+hJMSh5KsLFYy//ey4v9Jfo2ltFLnbVeuh3KUcmPl +dih38/0033vZPdj4E4eShrLsStYy8VcJq5TC33Uo265ch2MrN60cw60U/3Q7yYc7km7D/VjGruPD ++U8ayjKUHFeUSX/FMpQaNyn67/VQjlqm/+vSWD42mmk3nsswqn1spUxteJdhkHVUx9GtUvAbo1p3 +47sNIyz/TjbUPtjHNsz6G6N8N462/Ks/88WxjtNuoJOMK35jZDHGK0vlKJeTEb62sh9bGUv8umO5 +PRlFv2niGPYxQ9FB8iHbbLBkgCYbI4zVjZVbljsr9yi+svAy41gGjtJiHV/ZoUcuknv2TeTLr3y9 +ja9yyycO9oQrp4w8wsT74j4xpbSkNRVRtrZ0lHKb7mW0w5KWZclLWeqyLdfLcbld7pZ76ciYU17y +mkve8nU+5pt8l+8neaAgs3RZ87qudd3W6/W43qy3673MhSDdsJRc1lLLVo7lptyWe5knoca61FzX +WupWr+ux3ta7ei/zJU5b2pZN2tnqtm3H7Wa72+5l0oTrdL1c5+v1ul5v19fXRyk317fXd5xJUV5g +OeZjOdbjJl8djzfHu+O9zK4wsbfTzXKTb+QBbrab65vjzc3N7c29TLbAUVhu8+16Kw93W2+32+Pt +ze3d7f3dLOOS7pa79a7c1bvtTu51d3N3O93d3d1jRtxLh93ne3nTe3n2+2spcst7ufL+5EfGcpbR +bJ/vhnI7lJuhHHfleiibl0n+qUMpQ1l3JQ9lGUoaikzA6T62MrKwznzn8dHvxp/bXbnRMvHXcSjX +Q9l2pQ6lDGUdSp7ucivLrqShxKGEocxj0S6frO/Hpx9/boZy1MKVuRvH/ejtx8xHaz9E+2GRoZiG +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 +5+8WHNujgn37Jvf02foBF49O17EtRgdL6PPOr2X3eTnApGRT1pjj5tvyKZydOhfd8sG4HeMKh/VO +7013OIJF5f3+3OsnvTc1vMU23l1vVJ8w217gxTs3bjan2vPDR86ahVpD/2JkTVDjJsJv+qe1Z/an +yOaVZeNGuLhUMMvf2+8wpQ+OD548yfVhiTMCf1R/efbHf3725Y9ffXK/+fLzb9I/Pqvvfz14fP76 +i1e9333z6Hef3/3koNNsDP9gvv/rQ/P7L77+/vGfn6q/fHH0r0+efj24bGWPHsqn+R2h1O+TZHj4 +8+Grz5M/fH3/340/ff3l5xfDr4d/k/f27nx9/+h3Ay70zWj/1V//fvT1l6o8Puh89efWYaPxyaup +po7a/4D2ssNHd77I/vvx6PDnn/bVf9c/f3DePxrC4I5ef/Zn8/vLR4fqDz/u/9z95Me9O4dnyTen +M5H9ISvOsh/+/s9/PfjuoPHD/Ebjcl/89PWXbx799PUXw8b5Z4ef37l8dPdx+2zvDjHr0f+cPLs8 +PPvpx2y/+3X35Rdn+69HB6+z/xZj7PifPx62xNF/vv7yL5/8aPFAl4cH/3717z58+uN/Dp+0n/xu +v57//IcHx/Xf92wfXjbbl3t3ip/vftZ62NJ/v3vwWp3c//LBnfSPn+1/+/n/fPb1wSffPzooL//0 +5x+++f3r+61W8w1+6nz28OzotW1ZJPea2aDzh//5ovPvb9r73Tt/+aQ++Oxflw+Ojv/4H+z/p1/f +/+Z1unfH3P/hp68f9FqfnH/21dP797Lzf33VybJ7w7P0waD1RHz25gvhMbYOvxn+AGzLPimzH9Ok +/UXn4F4Txlc8/epu/fNyv5s9P7cU/OPoztcHT778/Y8PPy/0EMblyT/N7/+cHfT//dmXP7T/+YU8 +/f1PhPbPvTtA0J/Nn36PQ/JP86P5ew/59Of9N5+aupuaP7SPEvHT758e3mt++cdHv/vsvwfYisEf +/k1YqMjeneT0/z5R9PmzPz/60n368seHf7PFDz5/+D8WmfyHfAJT92Xy2Z///PBzefiXV185PD9+ +9eX99s/f/ptG0ncY8D3b164VKLT/je/AT6ED4u5XL7BQqQimf7d/eEKsPiyHf1Hmv83PrQffHf78 +2eHZvb/952Gz+ckf9s3p938vnt95+f2DZwf7zw/Pjjv/+fo/P33xau/O/2/vy7fTZ3IFn4B3CPsO +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 +wknerg== + + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_light.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_light.svg new file mode 100755 index 0000000..27a1290 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/hamburger_light.svg @@ -0,0 +1,1936 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzsvemOJMmRJvgE9g6+PxogB1NBU1PTw7iDBcLj6OEs2V1gsad70RgUklnRZG7nUcjKai736Ve+ +T0RU1dw9siKPIontCq3KCBdXUzPTQ1SOT0T/7n/78qsvrr958/uHL+LVfJj+7u9u3j48e/fm7S8P +pB5+9fLl99+9ewvSz37780PIV7NUuv5V/doq/s+Ht9+9ePP6l/zqKsqX97j6Z7/67tnvH16+fDj8 ++tnrb9798dnLh7c/P/zs5/L97168e/kgNf747NXvv3/7h4e3X7988Yc/vrt69uLnfn9p8PbZO6m0 +/mL5RYiH5ZfzevjyN/j62ev/ePbddy/+3wfcMVbc8Pjm+9ffvHj9h+Ob/0eIhy9iOsTt8EWRr/77 +i98+fPee72/fPP/+1cPrd1++ffP84bvvbt68fPP2u18ebv787PXhN8/+IN88O/xf8hpv/nQ4vnz2 +/N8nefX09f2Llw/ylq+evTuEBR1y/auwfH38/sXLb/7h+1e/f5D3zxvJ8Ws2+U/fSVvSLP4GuXz9 +q1dC+erh3Tt5LrkhOvW3f38cH0OILD/7198+/OEFx0C65X/93Jp9++bbV8/e/juuPXyxzgf5z+74 +u4dX376U3uPrLvNVOnzBf/ufVk/egnW+WHKVXin5EOd6iKnq971vHv7jxcOffnn4hzevH7QDrt++ ++0qHYF3nWf/Vb377vQz0P71+8U4eLIO0aQ/85s03Dy+lfrv+/uUzvjhL6P9qhd89k4nxTsbuzcvv +33F6Vb+D9PCvn/35AcMU9Ab/+O3D69+9+Z98xi+WIO0s29V2WFZ5o7Bs6yFUtr/gUbe53TP0f7Vp +NIRmvH3MkC9lnP7x7Ys/vHj9yy9ilb6Oy6xD+PdvX3zTRzAcqv0vjV/V4f/N/9enlRd/9+7htT29 +zJub3wzzYL76zVdy17vX39y8eYXe/w4TXCbAa5kbL9/8Qb9rf/Mbufz7b/UN+PlrGagv3754jTan +f+A39esvX34vX/392zfff/ur1//2ZvqZru//+fBcFrGM5TeHf/z9/y0fZJFybh5+9/bZc2lAPrc6 +skS//fl7m5OXe/tw0C/lSn703z989e3Dv8mq6pcr9e71fzy8fPPt0GyjCGs5/POzt9/+cNNfvnz2 ++tnbA+mt5V+/+A/55pn0VG+7057QqMySb6VzeAmrnNzgPRWGr55wo2fv/igM6OH1N9+1tvXj/sGV +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 +8xm/zlGv8eucwWv86lmK7Pe2LO38fNRjvM/gMp+zPUe9ruvrPfhZQyXmECh9Pt0czCFP+XQQTBeV +X8g9uB/ja3A/5nMZ56jXBZ8zeN0czHgDgcTXtuT9r09HPcbX4znm61Huo94P/cs98M25nts9V1/P ++MzV52245urLeM/Vl/nM1eeo11x9zuA1V59nfG+734b7qMd4n8FlPmd7vY/nur7egy9vzuvmXM/4 +cmT223A7Msf4cmSO+VzGOep1wecMXjfnPON72/023Ec9xtfjOebrUZ738XroX+7Bz589kMY+Fu2z +BxLml1fRmGL/5JZgtpEe4222IO99VJYurff8H8ZPHsi97fYq7qMe4+sMjvk623PU67q+3IO/+zR5 +pt7XfT2OwvX7x6W4zvQy3ld1mc8duI567tV1Bvd9PY7Cve12Ke6jHuPrDI75Ottz1Ou6vtyD7zJN +ntn3dWuPr3CdwvEqrpO9jPeFXeZzE66jntt1ncF9a4+vcG+7vYr7qMf4OoNjvs72HPW6ri/34O/+ +yp7PAJ/OKF+GgjC/Pu+OUhV7BMfYBQP5NBTgUPUZ76GAzSxSfX+IYfw0FNzb7s/7Pg== + + + 6jG+zuCYr7M9R72u68s9+M6LkdetPd/tdQrnC79O9jLeF3aZz024jnpu13UG96093+297f7C76Me +4+sMjvk623PU67q+3IPvuRh53dfz0V6/fz7v60wv431Vl/ncgeuo515dZ3Df1/PR3tvuz/s+6jG+ +zuCYr7M9R72u68s98NQOshASOJ/8niF8/ifnyQr3t5t1jC+X7JiPh3KOevky5wxefs/XE3M4ZHxx +73nY8mntwxPQttdq4hhfK49jPo74Oerlso8vnv3rdHCK/1yh1n/4+z9/BVr/U+Kv5e8Wf/Ud+xSE +PbFWvGF/xBj7/vTlaCcU+3cOFuLd7Vq9U/lSztyRGesLs+cDECu9zk7tkxFr8trO3GEz1u+jfnsf +tSn9/z4DG/fcscb4tO2Q0vt91GN8ncExX2d7jnpd15d78N3mDvz7p1tLb6J8OgX6HXyxr5O9jPeF +XeZzE66jntt1ncF9a5t1tu9tp4Rq76Me4+sMjvk623PU67q+3IPvMnewauPTfeVp50+vLC+wfHpl +L+N9VZf53IHrqOdeXWdw31f8RO3907bTUobXUY/xdQbHfJ3tOep1XV/uwXcLZKEyyqNnWSccwRaB +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 +3x/Wu/nN/nv9H/gN+An3OrCRH2jT/wGF4u/k + + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-combo-box-bg.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-combo-box-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..f61967700d751bb13dc94c3f5d756686f4cc6d08 GIT binary patch literal 1023 zcmaJ=PfXKL9BxGCLKtvRBc5IgA!u0t4A!w`6UN%X;!2jWgn81gePa!@ue5KjaGQzA zb~W)LM^7edj8{p-NQ_=gG+s2u1M#lhxasTIh6iWU_PzJZ_kF*=ua#d}3JqQvq$nzs zU6u-D9U|ZPV1WD+FP==0Wem$DyoxHgt~!uP>8K1r)>PMF0jm1;)_a(ssDTNiSi&VG zCu+!KR3F25rcKyHX5O<^Z3ALZhUxyLWn^_vPA$TK6p9ED>@*s^I2%^kPSmSse2m-^; zMg@VN1`&>rupD`XFh46s1u+r>orfmg9K9kIq)f*bIVI^T#P;i1=H@yT5hLIq+qP4+APm- zeo9@SqWm9fnmx3O3-C1Fe+s+BZ5y%$=%SjVk;YZVeOI=acA$!pQ$%R9Tg7}8VdPek z4brOum{L^DuzbVSHbYUwtmR_W(qL9f(nNzX3|))}nUoacxmac~#`AI{#i!=xWG&FY<8uF0~ zhVOkE%2n?_SlAnF{T^$+X&eV~)b8#~qZDjDZOnz5BjY#DoV`rl3SMlqHsAUeo65>7 K(zC_ecmDuM!$9=_ literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-combo-box-bg2x.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-combo-box-bg2x.png new file mode 100755 index 0000000000000000000000000000000000000000..57663ca70301a8d569f0d5664f6ad989615f7e91 GIT binary patch literal 1124 zcmaJ=U2F_d6rQ4sQtB_XLT*M=6?SH4yE|*gE}hQo>V#>U?S@7w%+B1lqvoeGw|3h2 z$rhm=2#F96NGg%^fmewL(moXN;6=iN_zQ`Mp9jHH-KlPQuqHQi&pkQcch0%zyF;xl zTPrJSDhPt8l$ym1-k1CKoB;keb$#27w`!DXM{QOo$}0{ec+JW|AQ?&*%s@r!?|lFh z1TnK#&$gp>c{`_C2Br8hlxNr&O%RDKo~@`o5P=-*(#<6K`Sx8B=vtE88I?n_Ex>NQ zdBA~f11(u~pht~sARJ=CbOLYPBN9*J=VtOhUJ|)R+glvwc z^Z7iLZ=fuvi)P~SxX%#|2XREu?KhF)1xgYDoEfe^RO3vy-NfKB3y9L9Z zrZwHEYr+>sdx}jnRLF0s7%0pC4>gSGXcuMRpL+jE>}LCINN1pH^*JgYT<01;mCXqb zRFLIlEo*=A7F)Y5WVzjz4TLrp)XR#ho4#Y+Btn)s$#juos!$S>B<7%WUE{)Rnipds zA(n26F-$7VGyKMlsSq#lsYptQ#fwOq9RuNgB43+eK8m|&MZPlKLE9~V;Nww zX-+R)3ty6N3agc_rKu#A#>LS7X#W~@(S`Nno72L@hiU0U6YJfEW)Ja}<#bBA_y^WIsnAA!+%1uuHOa?irCpI~%iM(_Np&%@{L z1D9-k7v{?km-SYSuU}eouzKHu@kF4mcIZsw$MUi749;NOd6GkO)`q=SRtG_HC`BckFb%~l-S?}VA z@bY2(*VexI*J>8b*jBhzaiU{c_Hv{( zJaZG%Q-e|yQz{EjrrH1%&GK|{45_&FW||?_VFMmlUBOES?Yj791Y~3`NO_&PSEYM( z&cqMrpJ={l{vk0>{+rsWt!;6V=i1-zs#_9gbh>!n{TD)yZWK(;oT9coZd#C3s*`5w z9wSA+y*kHMNU;`rxw)(g6ga*xIp&$s^qpr?^@?x4O*ykhDvoK6)zdklixv9LNbNc) vV|`uk^NtUumcQrE2O8vVEB<6Z12aR+ah1}3{ct;=D;Ydp{an^LB{Ts5ZI)sk literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-sprites2x.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/light-sprites2x.png new file mode 100755 index 0000000000000000000000000000000000000000..a70f5dc87dd7dfd8dd41e26a60084e0fb8971b63 GIT binary patch literal 5351 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 XIAcdL`d-4HOCl|>u3F_|TjYNL)~HE) literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/pop-up-triangle-dark.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/pop-up-triangle-dark.png new file mode 100755 index 0000000000000000000000000000000000000000..53e79bc9c7ad81ee43975b8e14c773156aa47f9a GIT binary patch literal 1153 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 DJHr79 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search-bg2x.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search-bg2x.png new file mode 100755 index 0000000000000000000000000000000000000000..f88648051e896f0715e97a2cf18da0ad54e30e94 GIT binary patch literal 1800 zcmaJ?X;2eq7!Ef?qeMUy6xL7?s5yZI0^v#m!667qD%g01WCgUPPC<2safG!s$qkL=9r1WpEk@#49CoPyk9~>(*WZ z!!a0}FBGCwB$c1Ql)_4q#NtEJDOD&Mg9(q+sU*@&5CPIaxdLJlMp{o30ELW2ND1as z_$oG-q2TG&pirMElIk<1p)x{b1Q4!cq6A71kpMbn7NlY7ScG@HOmuHClL^2(7bKHK zcrPlIp9HXBH3$Tg0*O)zl?u@5Bx+DFolad0&?rm({Nl|-?mH0j9a|G%qJ`O#a02*6Kz zrzF;h)~P_U0Mx)*wG?e!x{oE4ipf@k5(HL@U^r{Cib)wT0&6m06~GqK0YAP(s(>s8 z|91#JpBWEn5D6p&<2ft>%0W^nWK23OhR)?s=#1Ds{|or5-a@pyQGPZtiKbGys!9@=rM<0aHc~_%@{lqy}j(#utcuurP*KID# zm~%+=MERh93kkDB>&gE8X85i*P8x7hJaeo--n zr%y^J`xO_Pi+ID5`tlNqf8EOk#F*M`9}-m585ue2;nezf-1^~|6Q$kJ1tpj3S zo*T!@CU6$M#s0AD-f0sy39Fw6?ac(HuW~$;UD{lzG|WAo7w)m-j-9(hUAg*!=b$(4 zRS3RiInM{&q3Y>o{Iv1ap04JuOU_o^?&9*d#DR#$p@kvFyoWpFP1bV3#VgIL$1Xs_ z&SR#$L&J`h7xH@gD*M~ChUaF6m95tLta<;F>#H|KW`FgRf7@v~wO4vJGM6wG!!#^6 zkDB5P!#l)RN^4!pOnGgaPM?3Uw9{!Q?NrcSyM0cZ7acXu7`!~1yuxcvd)|De0cTDb zs*O@S@!f6QY<91Ib7iJ@v1rMt);hBcrldY72+@v^Ty7?|CRV+j0;#^wjK+HE;`KjoVFUJRo;-&gb3geZ7W|A=0a~dY^&;yHsS>2Rx&&uC8>OU z^T7FBY-0PmoCbOO7)R_K;IOQqYwamv+GCSk-+EtA=R1v2ShBvl^7rjL*teuKyEblr z%eK3t`(UG?f2saj7a?RM@;>g`9UNFD1Qicuk3*#L4-gKmhP`*3C zU_abc#PymtjkHL-=J1ffzae>!XP38a1?;Lh`uB|4FWn9HJ&%(QKJENRwEo<$-&#+{ XgiV~}Q%AI;mVZ+`H<5ERW=;OTvxmH~ literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search.svg new file mode 100755 index 0000000..d18a4fa --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search.svg @@ -0,0 +1,11 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_bw.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_bw.svg new file mode 100755 index 0000000..9ab9e71 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_bw.svg @@ -0,0 +1,16 @@ + + + + + + +]> + + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_dark.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_dark.svg new file mode 100755 index 0000000..9ab9e71 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_dark.svg @@ -0,0 +1,16 @@ + + + + + + +]> + + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_light.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_light.svg new file mode 100755 index 0000000..0c0dff6 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/search_light.svg @@ -0,0 +1,11 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/spinner.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/spinner.png new file mode 100755 index 0000000000000000000000000000000000000000..ae457fafc91ad7d3941182cbe2bc6fb475b44447 GIT binary patch literal 2707 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 NX;eDpynATMe*xevX;%OM literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/spinner2x.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/spinner2x.png new file mode 100755 index 0000000000000000000000000000000000000000..3b77ee6fdf827eed9392ee9984e83bd976a49983 GIT binary patch literal 5201 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 OXJ%||^w_{V`hNgX6(mdm literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/package.json b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/package.json new file mode 100755 index 0000000..03c64ef --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/package.json @@ -0,0 +1,85 @@ +{ + "name": "topcoat", + "version": "0.7.5", + "description": "CSS for clean and fast web apps", + "main": "Gruntfile.js", + "directories": { + "doc": "doc", + "test": "test" + }, + "dependencies": { + "topcoat-utils": "~0.1.3", + "topcoat-radio-button-base": "~0.1.1", + "topcoat-button-base": "~0.6.0", + "topcoat-radio-button": "~0.1.2", + "topcoat-navigation-bar-base": "~0.4.0", + "topcoat-navigation-bar": "~0.4.2", + "topcoat-input-base": "~0.4.1", + "topcoat-list-base": "~0.4.1", + "topcoat-list": "~0.5.0", + "topcoat-search-input": "~0.3.0", + "topcoat-search-input-base": "~0.1.2", + "topcoat-checkbox": "~0.4.0", + "topcoat-checkbox-base": "~0.1.3", + "topcoat-button": "~0.5.3", + "topcoat-icon-button": "~0.3.3", + "topcoat-button-bar-base": "~0.1.1", + "topcoat-button-bar": "~0.1.0", + "topcoat-textarea": "~0.3.0", + "topcoat-theme": "~0.5.24", + "topcoat-text-input": "~0.3.4", + "topcoat-textarea-base": "~0.3.2", + "topcoat-notification": "~0.1.1", + "topcoat-notification-base": "0.0.1", + "topcoat-tab-bar": "~0.1.0", + "topcoat-switch": "~0.1.3", + "topcoat-switch-base": "~0.1.0", + "topcoat-range-base": "0.0.3", + "topcoat-range": "~0.1.0" + }, + "devDependencies": { + "grunt": "~0.4.1", + "grunt-contrib-copy": "~0.4.1", + "grunt-contrib-jade": "~0.4.0", + "grunt-contrib-watch": "~0.1.4", + "grunt-contrib-clean": "~0.4.1", + "grunt-exec": "~0.4.2", + "grunt-contrib-cssmin": "~0.5.0", + "jade": "~0.28.2", + "grunt-contrib-stylus": "~0.6.0", + "grunt-contrib-htmlmin": "~0.1.3", + "prompt": "*", + "csv": "*", + "topdoc-theme": "~0.2.7", + "grunt-topdoc": "~0.1.3", + "grunt-autoprefixer": "~0.2.20130806" + }, + "scripts": { + "test": "grunt test", + "prepublish": "grunt" + }, + "repository": { + "type": "git", + "url": "git://github.com/topcoat/topcoat.git" + }, + "bugs": { + "url": "https://github.com/topcoat/topcoat/issues" + }, + "license": { + "type": "Apache", + "url": "https://github.com/topcoat/topcoat/blob/master/LICENSE" + }, + "keywords": [ + "css", + "ui", + "ux", + "pattern", + "library", + "mobile", + "desktop", + "native", + "application", + "web", + "standards" + ] +} diff --git a/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js b/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js new file mode 100644 index 0000000..c007104 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/jasmine_helpers.js @@ -0,0 +1,83 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint -W097 */ +'use strict'; + +exports.setUpJasmine = function() { + // Set up jasmine + var jasmine = jasmineRequire.core(jasmineRequire); + jasmineRequire.html(jasmine); + var jasmineEnv = jasmine.currentEnv_ = new jasmine.Env(); + + jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000; + jasmineEnv.catchExceptions(false); + + // Set up jasmine interface + var jasmineInterface = jasmineRequire.interface(jasmine, jasmineEnv); + + // Add Reporters + addJasmineReporters(jasmineInterface, jasmineEnv); + + // Add Spec Filter + jasmineEnv.specFilter = function(spec) { + //console.log(spec.getFullName()); + return true; + }; + + // Jasmine 2.2.0 moved this symbol, so we add a shim here. + jasmine.Expectation.addMatchers = jasmine.Expectation.addMatchers || function() { + return jasmine.addMatchers.apply(this, arguments); + }; + + return jasmineInterface; +}; + +function addJasmineReporters(jasmineInterface, jasmineEnv) { + jasmineInterface.jsApiReporter = new jasmineInterface.jasmine.JsApiReporter({ timer: new jasmineInterface.jasmine.Timer() }); + jasmineEnv.addReporter(jasmineInterface.jsApiReporter); + + jasmineInterface.htmlReporter = new jasmineInterface.jasmine.HtmlReporter({ + env: jasmineEnv, + queryString: function() { return null; }, + onRaiseExceptionsClick: function() { }, + getContainer: function() { return document.getElementById('content'); }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmineInterface.jasmine.Timer() + }); + jasmineInterface.htmlReporter.initialize(); + jasmineEnv.addReporter(jasmineInterface.htmlReporter); + + var medic = require('cordova-plugin-test-framework.medic'); + + if (medic.enabled) { + jasmineRequire.medic(jasmineInterface.jasmine); + jasmineInterface.MedicReporter = new jasmineInterface.jasmine.MedicReporter({ + env: jasmineEnv, + log: { logurl: medic.logurl }, + sha: medic.sha + }); + jasmineInterface.MedicReporter.initialize(); + jasmineEnv.addReporter(jasmineInterface.MedicReporter); + } + +} diff --git a/plugins/cordova-plugin-test-framework/www/main.js b/plugins/cordova-plugin-test-framework/www/main.js new file mode 100644 index 0000000..954af80 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/main.js @@ -0,0 +1,446 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* global WinJS */ +/* jshint -W097 */ +'use strict'; + +var LOG_HEADER_HEIGHT = 20, + CONTENT_TOP_OFFSET = 30; + +var isWin = cordova.platformId === "windows", + isWP8 = cordova.platformId === "windowsphone"; + +/******************************************************************************/ + +function getMode(callback) { + var mode = localStorage.getItem('cdvtests-mode') || 'main'; + callback(mode); +} + +function setMode(mode) { + var handlers = { + 'main': runMain, + 'auto': runAutoTests, + 'manual': runManualTests + }; + if (!handlers.hasOwnProperty(mode)) { + console.error("Unsupported mode: " + mode); + console.error("Defaulting to 'main'"); + mode = 'main'; + } + + localStorage.setItem('cdvtests-mode', mode); + clearContent(); + + handlers[mode](); +} + +/******************************************************************************/ + +function clearContent() { + var content = document.getElementById('content'); + content.innerHTML = ''; + var log = document.getElementById('log--content'); + log.innerHTML = ''; + var buttons = document.getElementById('buttons'); + buttons.innerHTML = ''; + + setLogVisibility(false); +} + +/******************************************************************************/ + +function setTitle(title) { + var el = document.getElementById('title'); + el.textContent = title; +} + +/******************************************************************************/ + +function setLogVisibility(visible) { + if (visible) { + document.querySelector('body').classList.add('expanded-log'); + + if (isWin || isWP8) { + var h = document.querySelector('body').offsetHeight; + + document.getElementById('middle').style.height = (h * 0.6 - LOG_HEADER_HEIGHT - CONTENT_TOP_OFFSET) + "px"; + document.getElementById('middle').style.marginBottom = (h * 0.4) + "px"; + document.getElementById('middle').style.paddingBottom = (h * 0.4) + "px"; + } + } else { + document.querySelector('body').classList.remove('expanded-log'); + + if (isWin || isWP8) { + document.getElementById('middle').style.height = ""; + document.getElementById('middle').style.marginBottom = ""; + document.getElementById('middle').style.paddingBottom = ""; + } + } +} + +window.onresize = function (event) { + // Update content and log heights + if (isWin || isWP8) { + setLogVisibility(getLogVisibility()); + } +}; + +function getLogVisibility() { + var e = document.querySelector('body'); + return e.classList.contains('expanded-log'); +} + +function toggleLogVisibility() { + if (getLogVisibility()) { + setLogVisibility(false); + } else { + setLogVisibility(true); + } +} + +/******************************************************************************/ + +function attachEvents() { + document.getElementById('log--title').addEventListener('click', toggleLogVisibility); +} + +/******************************************************************************/ + +var origConsole = window.console; + +exports.wrapConsole = function() { + function appendToOnscreenLog(type, args) { + var el = document.getElementById('log--content'); + var div = document.createElement('div'); + div.classList.add('log--content--line'); + div.classList.add('log--content--line--' + type); + div.textContent = Array.prototype.slice.apply(args).map(function(arg) { + return (typeof arg === 'string') ? arg : JSON.stringify(arg); + }).join(' '); + el.appendChild(div); + // scroll to bottom + el.scrollTop = el.scrollHeight; + } + + function createCustomLogger(type) { + var medic = require('cordova-plugin-test-framework.medic'); + return function() { + origConsole[type].apply(origConsole, arguments); + // TODO: encode log type somehow for medic logs? + medic.log.apply(medic, arguments); + appendToOnscreenLog(type, arguments); + setLogVisibility(true); + }; + } + + window.console = { + log: createCustomLogger('log'), + warn: createCustomLogger('warn'), + error: createCustomLogger('error'), + }; +}; + +exports.unwrapConsole = function() { + window.console = origConsole; +}; + +/******************************************************************************/ + +function createActionButton(title, callback, appendTo) { + appendTo = appendTo ? appendTo : 'buttons'; + var buttons = document.getElementById(appendTo); + var div = document.createElement('div'); + var button = document.createElement('a'); + button.textContent = title; + button.onclick = function(e) { + e.preventDefault(); + callback(); + }; + button.classList.add('topcoat-button'); + div.appendChild(button); + buttons.appendChild(div); +} + +/******************************************************************************/ + +function setupAutoTestsEnablers(cdvtests) { + var enablerList = createEnablerList(); + + // Iterate over all the registered test modules + iterateAutoTests(cdvtests, function(api, testModule) { + // For "standard" plugins remove the common/repetitive bits of + // the api key, for use as the title. For third-party plugins, the full + // api will be used as the title + var title = api.replace(/org\.apache\.cordova\./i, '').replace(/\.tests.tests/i, ''); + + createEnablerCheckbox(api, title, testModule.getEnabled(), enablerList.id, toggleTestHandler); + }); + + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function createEnablerList() { + var buttons = document.getElementById('buttons'); + + var enablerContainer = document.createElement('div'); + enablerContainer.id = 'test-enablers-container'; + + // Create header to show count of enabled/total tests + var header = document.createElement('h3'); + header.id = 'tests-enabled'; + + // Create widget to show/hide list + var expander = document.createElement('span'); + expander.id = 'test-expander'; + expander.innerText = 'Show/hide tests to be run'; + expander.onclick = toggleEnablerVisibility; + + // Create list to contain checkboxes for each test + var enablerList = document.createElement('div'); + enablerList.id = "test-list"; + + // Create select/deselect all buttons (in button bar) + var checkButtonBar = document.createElement('ul'); + checkButtonBar.classList.add('topcoat-button-bar'); + + function createSelectToggleButton(title, selected) { + var barItem = document.createElement('li'); + barItem.classList.add('topcoat-button-bar__item'); + + var link = document.createElement('a'); + link.classList.add('topcoat-button-bar__button'); + link.innerText = title; + link.href = null; + link.onclick = function(e) { + e.preventDefault(); + toggleSelected(enablerList.id, selected); + return false; + }; + + barItem.appendChild(link); + checkButtonBar.appendChild(barItem); + } + createSelectToggleButton('Check all', true); + createSelectToggleButton('Uncheck all', false); + enablerList.appendChild(checkButtonBar); + + enablerContainer.appendChild(header); + enablerContainer.appendChild(expander); + enablerContainer.appendChild(enablerList); + + buttons.appendChild(enablerContainer); + + return enablerList; +} + +/******************************************************************************/ + +function updateEnabledTestCount() { + var enabledLabel = document.getElementById('tests-enabled'); + + // Determine how many tests are currently enabled + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + var total = 0; + var enabled = 0; + iterateAutoTests(cdvtests, function(api, testModule) { + total++; + if (testModule.getEnabled()) { + enabled++; + } + }); + + if (enabled == total) { + enabledLabel.innerText = 'Running All Tests.'; + } else { + enabledLabel.innerText = 'Running ' + enabled + ' of ' + total + ' Tests.'; + } +} + +/******************************************************************************/ + +function toggleSelected(containerId, newCheckedValue) { + [].forEach.call(document.getElementById(containerId).getElementsByTagName('input'), function(input) { + if (input.type !== 'checkbox') return; + input.checked = newCheckedValue; + toggleTestEnabled(input); + }); + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function toggleEnablerVisibility() { + var enablerList = document.getElementById('test-list'); + if (enablerList.classList.contains('expanded')) { + enablerList.classList.remove('expanded'); + } else { + enablerList.classList.add('expanded'); + } +} + +/******************************************************************************/ + +function createEnablerCheckbox(api, title, isEnabled, appendTo, callback) { + var container = document.getElementById(appendTo); + + var label = document.createElement('label'); + label.classList.add('topcoat-checkbox'); + + var checkbox = document.createElement('input'); + checkbox.type = "checkbox"; + checkbox.value = api; + checkbox.checked = isEnabled; + label.htmlFor = checkbox.id = 'enable_' + api; + + checkbox.onchange = function(e) { + e.preventDefault(); + callback(e); + }; + + var div = document.createElement('div'); + div.classList.add('topcoat-checkbox__checkmark'); + + var text = document.createElement('span'); + text.innerText = title; + + label.appendChild(checkbox); + label.appendChild(div); + label.appendChild(text); + + container.appendChild(label); +} + +/******************************************************************************/ + +function toggleTestHandler(event) { + var checkbox = event.target; + + toggleTestEnabled(checkbox); + updateEnabledTestCount(); +} + +/******************************************************************************/ + +function toggleTestEnabled(checkbox) { + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.tests[checkbox.value].setEnabled(checkbox.checked); +} + +/******************************************************************************/ + +function iterateAutoTests(cdvtests, callback) { + Object.keys(cdvtests.tests).forEach(function(api) { + var testModule = cdvtests.tests[api]; + if (!testModule.hasOwnProperty('defineAutoTests')) { + return; + } + callback(api, testModule); + }); +} + +/******************************************************************************/ + +function runAutoTests() { + setTitle('Auto Tests'); + + createActionButton('Run', setMode.bind(null, 'auto')); + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'main')); + + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.init(); + setupAutoTestsEnablers(cdvtests); + + cdvtests.defineAutoTests(); + + // Run the tests! + var jasmineEnv = window.jasmine.getEnv(); + + jasmineEnv.execute(); +} + +/******************************************************************************/ + +function runManualTests() { + setTitle('Manual Tests'); + + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'main')); + + var contentEl = document.getElementById('content'); + var beforeEach = function(title) { + clearContent(); + setTitle(title || 'Manual Tests'); + createActionButton('Reset App', location.reload.bind(location)); + createActionButton('Back', setMode.bind(null, 'manual')); + }; + var cdvtests = cordova.require('cordova-plugin-test-framework.cdvtests'); + cdvtests.defineManualTests(contentEl, beforeEach, createActionButton); +} + +/******************************************************************************/ + +function runMain() { + setTitle('Apache Cordova Plugin Tests'); + + createActionButton('Auto Tests', setMode.bind(null, 'auto')); + createActionButton('Manual Tests', setMode.bind(null, 'manual')); + createActionButton('Reset App', location.reload.bind(location)); + if (/showBack/.exec(location.hash)) { + createActionButton('Back', function() { + history.go(-1); + }); + } + + if (isWin && typeof WinJS !== 'undefined') { + var app = WinJS.Application; + app.addEventListener("error", function (err) { + // We do not want an unhandled exception to crash the test app + // Returning true marks it as being handled + return true; + }); + } +} + +/******************************************************************************/ + +exports.init = function() { + // TODO: have a way to opt-out of console wrapping in case line numbers are important. + // ...Or find a custom way to print line numbers using stack or something. + // make sure to always wrap when using medic. + attachEvents(); + exports.wrapConsole(); + + var medic = require('cordova-plugin-test-framework.medic'); + medic.load(function() { + if (medic.enabled) { + setMode('auto'); + } else { + getMode(setMode); + } + }); +}; + +/******************************************************************************/ diff --git a/plugins/cordova-plugin-test-framework/www/medic.js b/plugins/cordova-plugin-test-framework/www/medic.js new file mode 100644 index 0000000..47f261f --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/medic.js @@ -0,0 +1,63 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint -W097 */ +'use strict'; + +exports.logurl = 'http://127.0.0.1:7800'; + +exports.enabled = false; + +exports.log = function() { + if (!exports.enabled) + return; + var xhr = new XMLHttpRequest(); + xhr.open("POST", exports.logurl, true); + xhr.setRequestHeader("Content-Type", "text/plain"); + xhr.send(Array.prototype.slice.apply(arguments)); +}; + +exports.load = function (callback) { + var cfg = null; + + try { + // attempt to synchronously load medic config + var xhr = new XMLHttpRequest(); + xhr.open("GET", "../medic.json", false); + xhr.send(null); + cfg = JSON.parse(xhr.responseText); + } catch (ex) { } + + // config is available + if (cfg) { + exports.logurl = cfg.couchdb || cfg.logurl; + exports.sha = cfg.sha; + exports.enabled = true; + console.log('Loaded Medic Config: logurl=' + exports.logurl); + } else { + // config does not exist + console.log('Did not find medic config file'); + } + + setTimeout(function () { + callback(); + }, 0); +}; diff --git a/plugins/cordova-plugin-test-framework/www/tests.js b/plugins/cordova-plugin-test-framework/www/tests.js new file mode 100644 index 0000000..cea8898 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/tests.js @@ -0,0 +1,135 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/* jshint jasmine: true */ +/* jshint -W097 */ +'use strict'; + +exports.tests = Object.create(null); + +function TestModule(api) { + var name = api; + var enabled = true; + + var enabledPref = localStorage.getItem('cordova-tests-enabled-' + name); + if (enabledPref) + { + enabled = (enabledPref == true.toString()); + } + + this.getEnabled = function () { + return enabled; + }; + + this.setEnabled = function (isEnabled) { + enabled = isEnabled; + localStorage.setItem('cordova-tests-enabled-' + name, enabled); + }; +} + +function getTestsObject(api) { + exports.tests[api] = exports.tests[api] || new TestModule(api); + return exports.tests[api]; +} + +function requireAllTestModules() { + // This finds all js-modules named "tests" (regardless of plugins they came from) + var test_modules = cordova.require('cordova/plugin_list') + .map(function(jsmodule) { + return jsmodule.id; + }) + .filter(function(id) { + return /\.tests$/.test(id); + }); + + // Map auto / manual test definitions for each, but without actually running the handlers + test_modules.forEach(function(id) { + try { + var plugintests = cordova.require(id); + + if (plugintests.hasOwnProperty('defineAutoTests')) { + getTestsObject(id).defineAutoTests = function() { + describe(id + ' >>', plugintests.defineAutoTests.bind(plugintests)); + }; + } + + if (plugintests.hasOwnProperty('defineManualTests')) { + getTestsObject(id).defineManualTests = plugintests.defineManualTests.bind(plugintests); + } + } catch(ex) { + console.warn('Failed to load tests: ', id); + return; + } + }); +} + +function createJasmineInterface() { + var jasmine_helpers = require('cordova-plugin-test-framework.jasmine_helpers'); + var jasmineInterface = jasmine_helpers.setUpJasmine(); + return jasmineInterface; +} + +function attachJasmineInterfaceToGlobal() { + var jasmineInterface = createJasmineInterface(); + for (var property in jasmineInterface) { + window[property] = jasmineInterface[property]; + } +} + +function detachJasmineInterfaceFromGlobal() { + var jasmineInterface = createJasmineInterface(); + for (var property in jasmineInterface) { + delete window[property]; + } +} + +exports.defineAutoTests = function() { + requireAllTestModules(); + attachJasmineInterfaceToGlobal(); + + Object.keys(exports.tests).forEach(function(key) { + if (!exports.tests[key].getEnabled()) + return; + if (!exports.tests[key].hasOwnProperty('defineAutoTests')) + return; + exports.tests[key].defineAutoTests(); + }); +}; + +exports.defineManualTests = function(contentEl, beforeEach, createActionButton) { + requireAllTestModules(); + detachJasmineInterfaceFromGlobal(); + + Object.keys(exports.tests).forEach(function(key) { + if (!exports.tests[key].getEnabled()) + return; + if (!exports.tests[key].hasOwnProperty('defineManualTests')) + return; + createActionButton(key, function() { + beforeEach(key); + exports.tests[key].defineManualTests(contentEl, createActionButton); + }); + }); +}; + +exports.init = function() { + requireAllTestModules(); +}; diff --git a/plugins/fetch.json b/plugins/fetch.json index 4d81c59..a945a47 100644 --- a/plugins/fetch.json +++ b/plugins/fetch.json @@ -82,5 +82,32 @@ }, "is_top_level": false, "variables": {} + }, + "cordova-plugin-device-tests": { + "source": { + "type": "git", + "url": "http://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git", + "subdir": "tests" + }, + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-device-motion-tests": { + "source": { + "type": "git", + "url": "http://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git", + "subdir": "tests" + }, + "is_top_level": true, + "variables": {} + }, + "cordova-plugin-test-framework": { + "source": { + "type": "git", + "url": "http://git-wip-us.apache.org/repos/asf/cordova-plugin-test-framework.git", + "subdir": "." + }, + "is_top_level": true, + "variables": {} } } \ No newline at end of file diff --git a/spec/studywellUItest.js b/spec/studywellUItest.js new file mode 100644 index 0000000..a320a86 --- /dev/null +++ b/spec/studywellUItest.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/index.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('home'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/www/help.html b/www/help.html index c2b70a9..1e4191f 100644 --- a/www/help.html +++ b/www/help.html @@ -14,7 +14,7 @@ - + '),n=n.firstChild,d.getContainerElm().appendChild(n),setTimeout(function(){r.addClass(n,i+"in"),r.addClass(d.getEl(),i+"in")},0),c=!0),l.push(d),t()}}),d.on("close hide",function(e){if(e.control==d){for(var n=l.length;n--;)l[n]===d&&l.splice(n,1);t()}}),d.on("show",function(){d.parents().each(function(e){return e._fixed?(d.fixed(!0),!1):void 0})}),e.popover&&(d._preBodyHtml='
          ',d.addClass("popover").addClass("bottom").addClass(d.isRtl()?"end":"start"))},fixed:function(e){var t=this;if(t._fixed!=e){if(t._rendered){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.toggleClass("fixed",e),t._fixed=e}return t},show:function(){var e=this,t,n=e._super();for(t=s.length;t--&&s[t]!==e;);return-1===t&&s.push(e),n},hide:function(){return i(this),this._super()},hideAll:function(){u.hideAll()},close:function(){var e=this;return e.fire("close"),e.remove()},remove:function(){i(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return u.hideAll=function(){for(var e=s.length;e--;){var t=s[e];t&&t.settings.autohide&&(t.hide(),s.splice(e,1))}},u}),r(tt,[et,J,q,Y],function(e,t,n,r){var i=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.isRtl()&&n.addClass("rtl"),n.addClass("window"),n._fixed=!0,e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.addClass("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close()}),n.on("cancel",function(){n.close()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o,a;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=Math.max(0,a.w/2-t.w/2),t.y=Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
          '+e.encode(i.title)+'
          '),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
          '+o+'
          '+s+"
          "+a+"
          "},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.addClass("in")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new r(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t=e.classPrefix;e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),e._fullscreen&&(n.removeClass(document.documentElement,t+"fullscreen"),n.removeClass(document.body,t+"fullscreen"))},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});return i}),r(nt,[tt],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){i(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(rt,[tt,nt],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,i.open=function(t,r){var i;return n.editorManager.activeEditor=n,t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},n.nodeChanged(),i.renderTo().reflow()},i.alert=function(e,r,i){t.alert(e,function(){r?r.call(i||this):n.focus()})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)},i.getWindows=function(){return o}}}),r(it,[R,B,x,m,g,p],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function u(){function t(e){var t=new i(function(){});o.each(a.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&a.dom.setAttrib(e,"style",e.getAttribute("style"))}),t.observe(a.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null);var n=a.selection.getRng(),r=n.startContainer.parentNode;o.each(t.takeRecords(),function(e){if(q.isChildOf(e.target,a.getBody())){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}o.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),q.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),a.selection.setRng(n))}})}}),t.disconnect(),o.each(a.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")})}var n=a.getDoc(),r="data:text/mce-internal,",i=window.MutationObserver,s,l;i||(s=!0,i=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMSubtreeModified",e,!1),r.removeEventListener("DOMNodeInsertedIntoDocument",e,!1),r.removeEventListener("DOMNodeInserted",e,!1),r.removeEventListener("DOMAttrModified",t,!1)},this.takeRecords=function(){return n}}),a.on("keydown",function(n){var r=n.keyCode==U,i=e.metaKeyPressed(n);if(!c(n)&&(r||n.keyCode==V)){var o=a.selection.getRng(),s=o.startContainer,l=o.startOffset;if(!i&&o.collapsed&&3==s.nodeType&&(r?l0))return;n.preventDefault(),i&&a.selection.getSel().modify("extend",r?"forward":"backward","word"),t(r)}}),a.on("keypress",function(n){c(n)||$.isCollapsed()||!n.charCode||e.metaKeyPressed(n)||(n.preventDefault(),t(!0),a.selection.setContent(String.fromCharCode(n.charCode)))}),a.addCommand("Delete",function(){t()}),a.addCommand("ForwardDelete",function(){t(!0)}),s||(a.on("dragstart",function(e){var t;a.selection.isCollapsed()&&"IMG"==e.target.tagName&&$.select(e.target),l=$.getRng(),t=a.selection.getContent(),t.length>0&&e.dataTransfer.setData("URL","data:text/mce-internal,"+escape(t))}),a.on("drop",function(e){if(!c(e)){var i=e.dataTransfer.getData("URL");if(!i||-1==i.indexOf(r)||!n.caretRangeFromPoint)return;i=unescape(i.substr(r.length)),n.caretRangeFromPoint&&(e.preventDefault(),window.setTimeout(function(){var r=n.caretRangeFromPoint(e.x,e.y);l&&($.setRng(l),l=null),t(),$.setRng(r),a.insertContent(i)},0))}}),a.on("cut",function(e){!c(e)&&e.clipboardData&&(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",a.selection.getContent()),e.clipboardData.setData("text/plain",a.selection.getContent({format:"text"})),t(!0))}))}function d(){function e(e){var t=q.create("body"),n=e.cloneContents();return t.appendChild(n),$.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(a.getBody()),t.compareRanges(n,r)}var i=e(n),o=q.createRng();o.selectNode(a.getBody());var s=e(o);return i===s}a.on("keydown",function(e){var t=e.keyCode,r,i;if(!c(e)&&(t==U||t==V)){if(r=a.selection.isCollapsed(),i=a.getBody(),r&&!q.isEmpty(i))return;if(!r&&!n(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),i.firstChild&&q.isBlock(i.firstChild)?a.selection.setCursorLocation(i.firstChild,0):a.selection.setCursorLocation(i,0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(q.bind(a.getDoc(),"focusin",function(){$.setRng($.getRng())}),q.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getBody().focus(),$.setRng($.getRng()))}))}function h(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===V&&$.isCollapsed()&&0===$.getRng(!0).startOffset){var t=$.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return q.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(q.remove(n),e.preventDefault())}})}function m(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&$.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&q.hasClass(e,"mce-item-anchor")&&$.select(e),a.nodeChanged()})}function v(){function e(){var e=q.getAttribs($.getStart().cloneNode(!1));return function(){var t=$.getStart();t!==a.getBody()&&(q.setAttrib(t,"style",null),W(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!$.isCollapsed()&&q.getParent($.getStart(),q.isBlock)!=q.getParent($.getEnd(),q.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),q.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){if(!a.removed){var n=$.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)}},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===V&&$.isCollapsed()&&0===$.getRng(!0).startOffset){var t=$.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),q.addClass(a.getBody(),"mceHideBrInPre"),K.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),G.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){q.bind(a.getBody(),"mouseup",function(){var e,t=$.getNode();"IMG"==t.nodeName&&((e=q.getStyle(t,"width"))&&(q.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),q.setStyle(t,"width","")),(e=q.getStyle(t,"height"))&&(q.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),q.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=$.getRng(),r=n.startContainer,i=n.startOffset,o=q.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=q.createRng(),n.setStart(r,0),n.setEnd(r,0),$.setRng(n))}})}function N(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),j.object_resizing||s("enableObjectResizing",!1)}j.readonly||a.on("BeforeExecCommand MouseDown",e)}function E(){function e(){W(q.select("a"),function(e){var t=e.parentNode,n=q.getRoot();if(t.lastChild===e){for(;t&&!q.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}q.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function S(){j.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",j.forced_root_block)})}function k(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function T(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=V||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),q.remove(t.item(0)),a.undoManager.add()))})}function R(){var e;l()>=10&&(e="",W("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function A(){l()<9&&(K.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),G.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function B(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),q.unbind(r,"mouseup",n),q.unbind(r,"mousemove",t),a=o=0}var r=q.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,q.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(q.bind(r,"mouseup",n),q.bind(r,"mousemove",t),q.getRoot().focus(),a.select())}})}function D(){a.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||$.normalize()},!0)}function L(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function M(){a.inline||a.on("keydown",function(){document.activeElement==document.body&&a.getWin().focus()})}function H(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){"HTML"==e.target.nodeName&&(a.getBody().focus(),a.selection.normalize(),a.nodeChanged())}))}function P(){i.mac&&a.on("keydown",function(t){!e.metaKeyPressed(t)||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),a.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","word"))})}function O(){s("AutoUrlDetect",!1)}function I(){a.inline||a.on("focus blur beforegetcontent",function(){var e=a.dom.create("br");a.getBody().appendChild(e),e.parentNode.removeChild(e)},!0)}function F(){a.on("click",function(e){var t=e.target;do if("A"===t.tagName)return void e.preventDefault();while(t=t.parentNode)}),a.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function z(){a.on("init",function(){a.dom.bind(a.getBody(),"submit",function(e){e.preventDefault()})})}var W=o.each,V=e.BACKSPACE,U=e.DELETE,q=a.dom,$=a.selection,j=a.settings,K=a.parser,G=a.serializer,Y=i.gecko,X=i.ie,J=i.webkit;C(),_(),d(),D(),J&&(u(),p(),g(),S(),z(),i.iOS?(y(),M(),H(),F()):f()),X&&i.ie<11&&(h(),b(),x(),w(),T(),R(),A(),B()),i.ie>=11&&(H(),I()),i.ie&&(f(),O()),Y&&(h(),m(),v(),N(),E(),k(),L(),P())}}),r(ot,[W],function(e){function t(t){return t._eventDispatcher||(t._eventDispatcher=new e({scope:t,toggleEvent:function(n,r){e.isNative(n)&&t.toggleNativeEvent&&t.toggleNativeEvent(n,r)}})),t._eventDispatcher}return{fire:function(e,n,r){var i=this;if(i.removed&&"remove"!==e)return n;if(n=t(i).fire(e,n,r),r!==!1&&i.parent)for(var o=i.parent();o&&!n.isPropagationStopped();)o.fire(e,n,!1),o=o.parent();return n},on:function(e,n,r){return t(this).on(e,n,r)},off:function(e,n){return t(this).off(e,n)},hasEventListeners:function(e){return t(this).has(e)}}}),r(at,[ot,y,p],function(e,t,n){function r(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop/.test(t)?e.getDoc():e.getBody()}function i(e,t){var n=e.settings.event_root,i=e.editorManager,a=i.eventRootElm||r(e,t);if(n){if(i.rootEvents||(i.rootEvents={},i.on("RemoveEditor",function(){i.activeEditor||(o.unbind(a),delete i.rootEvents)})),i.rootEvents[t])return;a==e.getBody()&&(a=o.select(n)[0],i.eventRootElm=a),i.rootEvents[t]=!0,o.bind(a,t,function(e){for(var n=e.target,r=i.editors,a=r.length;a--;){var s=r[a].getBody();(s===n||o.isChildOf(n,s))&&(r[a].hidden||r[a].fire(t,e))}})}else e.dom.bind(a,t,function(n){e.hidden||e.fire(t,n)})}var o=t.DOM,a={bindPendingEventDelegates:function(){var e=this;n.each(e._pendingNativeEvents,function(t){i(e,t)})},toggleNativeEvent:function(e,t){var n=this;n.settings.readonly||"focus"!=e&&"blur"!=e&&(t?n.initialized?i(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&n.dom.unbind(r(n,e),e))}};return a=n.extend({},e,a)}),r(st,[p,g],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var u;return u=l,"string"==typeof l?l=function(){o.execCommand(u,!1,null)}:e.isArray(u)&&(l=function(){o.execCommand(u[0],u[1],u[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(lt,[y,C,x,k,S,D,M,H,P,O,I,F,b,l,rt,w,N,it,g,p,at,st],function(e,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v,y,b,C,x,w){function _(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=k({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.language=t.language||"en",n.languageLoad=t.language_load,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,r.fire("SetupEditor",i),i.execCallback("setup",i)}var N=e.DOM,E=n.ThemeManager,S=n.PluginManager,k=C.extend,T=C.each,R=C.explode,A=C.inArray,B=C.trim,D=C.resolve,L=h.Event,M=b.gecko,H=b.ie;return _.prototype={render:function(){function e(){N.unbind(window,"ready",e),n.render()}function t(){var e=p.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!E.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",E.load(r.theme,t)}C.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),T(r.external_plugins,function(e,t){S.load(t,e),r.plugins+=" "+t}),T(r.plugins.split(/[ ,]/),function(e){if(e=B(e),e&&!S.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=S.dependencies(e);T(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=S.createUrl(t,e),S.load(e.resource,e)})}else S.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!L.domLoaded)return void N.bind(window,"ready",e);if(n.getElement()&&b.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||N.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(N.insertAfter(N.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},N.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isNotDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new m(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=N.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=S.get(n),i,o;i=S.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=B(n),r&&-1===A(m,n)&&(T(S.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),m.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,p,h,m=[];if(t.rtl=this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||N.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=E.get(n.theme),t.theme=new c(t,E.urls[n.theme]),t.theme.init&&t.theme.init(t,E.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),T(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,p=/^[0-9\.]+(|px)$/i,p.test(""+i)&&(i=Math.max(parseInt(i,10),100)),p.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(N.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&T(R(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',h=0;h',t.loadedCSS[g]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),t.iframeHTML+='
          ";var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';if(document.domain!=location.hostname&&(u=v),s=N.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),H)try{t.getDoc()}catch(y){s.src=u=v}t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(N.get(l.editorContainer).style.display=t.orgDisplay),N.get(t.id).style.display="none",N.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,o=n.settings,f=N.get(n.id),p=n.getDoc(),h,m;o.inline||(n.getElement().style.visibility=n.orgVisibility),t||o.content_editable||(p.open(),p.write(n.iframeHTML),p.close()),o.content_editable&&(n.on("remove",function(){var e=this.getBody();N.removeClass(e,"mce-content-body"),N.removeClass(e,"mce-edit-focus"),N.setAttrib(e,"contentEditable",null)}),N.addClass(f,"mce-content-body"),n.contentDocument=p=o.content_document||document,n.contentWindow=o.content_window||window,n.bodyElement=f,o.content_document=o.content_window=null,o.root_name=f.nodeName.toLowerCase()),h=n.getBody(),h.disabled=!0,o.readonly||(n.inline&&"static"==N.getStyle(h,"position",!0)&&(h.style.position="relative"),h.contentEditable=n.getParam("content_editable_state",!0)),h.disabled=!1,n.schema=new g(o),n.dom=new e(p,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:o.force_hex_style_colors,class_filter:o.class_filter,update_styles:!0,root_element:o.content_editable?n.id:null,collect:o.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e) +}}),n.parser=new v(o,n.schema),n.parser.addAttributeFilter("src,href,style,tabindex",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)i=e[r],a=i.attr(t),s="data-mce-"+t,i.attributes.map[s]||("style"===t?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):"tabindex"===t?(i.attr(s,a),i.attr(t,null)):i.attr(s,n.convertURL(a,t,i.name)))}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,i,o=n.schema.getNonEmptyElements();t--;)i=e[t],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),n.serializer=new i(o,n),n.selection=new a(n.dom,n.getWin(),n.serializer,n),n.formatter=new s(n),n.undoManager=new l(n),n.forceBlocks=new u(n),n.enterKey=new c(n),n.editorCommands=new d(n),n.fire("PreInit"),o.browser_spellcheck||o.gecko_spellcheck||(p.body.spellcheck=!1,N.setAttrib(h,"spellcheck","false")),n.fire("PostRender"),n.quirks=y(n),o.directionality&&(h.dir=o.directionality),o.nowrap&&(h.style.whiteSpace="nowrap"),o.protect&&n.on("BeforeSetContent",function(e){T(o.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),o.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
          [\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,n.bindPendingEventDelegates(),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(m="",T(n.contentStyles,function(e){m+=e+"\r\n"}),n.dom.addStyle(m)),T(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),o.auto_focus&&setTimeout(function(){var e=n.editorManager.get(o.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),f=p=h=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;if(!e){if(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),M||i){if(l=n.getBody(),l.setActive)try{l.setActive()}catch(c){l.focus()}else l.focus();i&&r.normalize()}a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())}n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?D(r):0,n=D(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?T(r.split(r.indexOf("=")>0?/[;,](?![^=;,]*(?:[;,]|$))/:","),function(e){e=e.split("="),i[B(e[0])]=B(e.length>1?e[1]:e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;!e.initialized||e.settings.disable_nodechange||e.settings.readonly||(i=e.getBody(),n=t.getStart()||i,n=H&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:void r.push(e)}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=k({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(T(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),void i.fire("ExecCommand",{command:e,ui:t,value:n})))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=!0:(N.show(e.getContainer()),N.hide(e.id)),e.load(),e.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(e.hidden=!0,H&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e==e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(N.hide(e.getContainer()),N.setStyle(e.id,"display",e.orgDisplay)),e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=N.getParent(t.id,"form"))&&T(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=H&&11>H?"":'
          ',e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):H||(e='
          '),r.innerHTML=e,n.fire("SetContent",t)):("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=B(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?B(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=N.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return N.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=N.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),T(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;if(!e.removed){e.removed=1,e.save(),e.hasHiddenInput&&N.remove(e.getElement().nextSibling),e.inline||(H&&10>H&&e.getDoc().execCommand("SelectAll",!1,null),N.setStyle(e.id,"display",e.orgDisplay),e.getBody().onload=null,L.unbind(e.getWin()),L.unbind(e.getDoc()));var t=e.getContainer();L.unbind(e.getBody()),L.unbind(t),e.fire("remove"),e.editorManager.remove(e),N.remove(t),e.destroy()}},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e&&M&&(L.unbind(t.getDoc()),L.unbind(t.getWin()),L.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),N.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return M?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},k(_.prototype,x),_}),r(ct,[],function(){var e={};return{rtl:!1,add:function(t,n){for(var r in n)e[r]=n[r];this.rtl=this.rtl||"rtl"===e._dir},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(ut,[y,g],function(e,t){function n(e){function s(){try{return document.activeElement}catch(e){return document.body}}function l(e,t){if(t&&t.startContainer){if(!e.isChildOf(t.startContainer,e.getRoot())||!e.isChildOf(t.endContainer,e.getRoot()))return;return{startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset}}return t}function c(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function u(e){return!!a.getParent(e,n.isEditorUIElement)}function d(n){var d=n.editor;d.on("init",function(){(d.inline||t.ie)&&(d.on("nodechange keyup",function(){var e=document.activeElement;e&&e.id==d.id+"_ifr"&&(e=d.getBody()),d.dom.isChildOf(e,d.getBody())&&(d.lastRng=d.selection.getRng())}),t.webkit&&!r&&(r=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(d.lastRng=n)}},a.bind(document,"selectionchange",r)))}),d.on("setcontent",function(){d.lastRng=null}),d.on("mousedown",function(){d.selection.lastFocusBookmark=null}),d.on("focusin",function(){var t=e.focusedEditor;d.selection.lastFocusBookmark&&(d.selection.setRng(c(d,d.selection.lastFocusBookmark)),d.selection.lastFocusBookmark=null),t!=d&&(t&&t.fire("blur",{focusedEditor:d}),e.activeEditor=d,e.focusedEditor=d,d.fire("focus",{blurredEditor:t}),d.focus(!0)),d.lastRng=null}),d.on("focusout",function(){window.setTimeout(function(){var t=e.focusedEditor;u(s())||t!=d||(d.fire("blur",{focusedEditor:null}),e.focusedEditor=null,d.selection&&(d.selection.lastFocusBookmark=null))},0)}),i||(i=function(t){var n=e.activeEditor;n&&t.target.ownerDocument==document&&(n.selection&&(n.selection.lastFocusBookmark=l(n.dom,n.lastRng)),u(t.target)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},a.bind(document,"focusin",i)),d.inline&&!o&&(o=function(t){var n=e.activeEditor;if(n.inline&&!n.dom.isChildOf(t.target,n.getBody())){var r=n.selection.getRng();r.collapsed||(n.lastRng=r)}},a.bind(document,"mouseup",o))}function f(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(a.unbind(document,"selectionchange",r),a.unbind(document,"focusin",i),a.unbind(document,"mouseup",o),r=i=o=null)}e.on("AddEditor",d),e.on("RemoveEditor",f)}var r,i,o,a=e.DOM;return n.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},n}),r(dt,[lt,y,F,g,p,ot,ct,ut],function(e,t,n,r,i,o,a,s){function l(e){var t=g.editors,n;delete t[e.id];for(var r=0;r0&&f(d(c),function(n){u.get(n)?(m=new e(n,t,s),l.push(m),m.render()):f(document.forms,function(e){f(e.elements,function(e){e.name===n&&(n="mce_editor_"+h++,u.setAttrib(e,"id",n),r(n,t))})})});break;case"textareas":case"specific_textareas":f(u.select("textarea"),function(e){t.editor_deselector&&o(e,t.editor_deselector)||(!t.editor_selector||o(e,t.editor_selector))&&r(n(e),t)})}t.oninit&&(c=g=0,f(l,function(e){g++,e.initialized?c++:e.on("init",function(){c++,c==g&&i(t,"oninit")}),c==g&&i(t,"oninit")}))}var s=this,l=[],m;s.settings=t,u.bind(window,"ready",a)},get:function(e){return arguments.length?e in this.editors?this.editors[e]:null:this.editors},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),m||(m=function(){t.fire("BeforeUnload")},u.bind(window,"beforeunload",m)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i;{if(e)return"string"==typeof e?(e=e.selector||e,void f(u.select(e),function(e){t.remove(r[e.id])})):(i=e,r[i.id]?(l(i)&&t.fire("RemoveEditor",{editor:i}),r.length||u.unbind(window,"beforeunload",m),i.remove(),i):null);for(n=r.length-1;n>=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){f(this.editors,function(e){e.save()})},addI18n:function(e,t){a.add(e,t)},translate:function(e){return a.translate(e)}},p(g,o),g.setup(),window.tinymce=window.tinyMCE=g,g}),r(ft,[dt,p],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(pt,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(ht,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(mt,[ht,pt,p],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(gt,[y],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(vt,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),-1===r||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(u){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(yt,[y,l,b,C,p,g],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(bt,[z,p],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(Ct,[bt],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
          '+this._super(e)}})}),r(xt,[$,Q],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(wt,[$,xt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(_t,[wt],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},icon:function(e){var t=this,n=t.classPrefix;if("undefined"==typeof e)return t.settings.icon;if(t.settings.icon=e,e=e?n+"ico "+n+"i-"+t.settings.icon:"",t._rendered){var r=t.getEl().firstChild,i=r.getElementsByTagName("i")[0];e?(i&&i==r.firstChild||(i=document.createElement("i"),r.insertBefore(i,r.firstChild)),i.className=e):i&&r.removeChild(i),t.text(t._text)}return t},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},text:function(e){var t=this;if(t._rendered){var n=t.getEl().lastChild.lastChild;n&&(n.data=t.translate(e))}return t._super(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i;return i=e.settings.image,i?(r="none","string"!=typeof i&&(i=window.getSelection?i[0]:i[1]),i=" style=\"background-image: url('"+i+"')\""):i="",r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
          "}})}),r(Nt,[G],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
          '+(e.settings.html||"")+t.renderHtml(e)+"
          "}})}),r(Et,[wt],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
          '+e.encode(e._text)+"
          "}})}),r(St,[_t,et],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()}})}),r(kt,[St,y],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
          '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(Tt,[wt,j,q],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("combobox"),t.subinput=!0,t.ariaTarget="inp",e=t.settings,e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){for(var r=n.target,i=t.getEl();r&&r!=i;)r.id&&-1!=r.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),r=r.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){return e.preventDefault(),t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),e.placeholder&&(t.addClass("placeholder"),t.on("focusin",function(){t._hasOnChange||(n.on(t.getEl("inp"),"change",function(){t.fire("change")}),t._hasOnChange=!0),t.hasClass("placeholder")&&(t.getEl("inp").value="",t.removeClass("placeholder"))}),t.on("focusout",function(){0===t.value().length&&(t.getEl("inp").value=e.placeholder,t.addClass("placeholder"))}))},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName.toUpperCase()&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl("inp").disabled=e),t._super(e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-n.getSize(r).width-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),n.css(t.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return n.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},remove:function(){n.off(this.getEl("inp")),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e._text,(o||a)&&(s='
          ",e.addClass("has-open")),'
          "+s+"
          " +}})}),r(Rt,[wt],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.innerHtml(this._getPathHtml())},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
          '+e._getPathHtml()+"
          "},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
          '+t[n].name+"
          ";return i||(i='
          \xa0
          '),i}})}),r(At,[Rt,dt],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(Bt,[G],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
          '+(e.settings.title?'
          '+e.settings.title+"
          ":"")+'
          '+(e.settings.html||"")+t.renderHtml(e)+"
          "}})}),r(Dt,[G,Bt],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",id:n._id+"-l",text:i,flex:0,forId:n._id,disabled:n.disabled()}]}),r.type="formitem",n.aria("labelledby",n._id+"-l"),"undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(Lt,[Dt],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
          '+(e.settings.title?''+e.settings.title+"":"")+'
          '+(e.settings.html||"")+t.renderHtml(e)+"
          "}})}),r(Mt,[Tt],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(Ht,[Ct],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Pt,[Ct],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v=[],y,b,C,x,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",N="h",E="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",P="left",M="w",D="x",L="innerW",H="minW",O="right",I="deltaW",F="contentW"):(S="x",N="w",E="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",P="top",M="h",D="y",L="innerH",H="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],_=u=0,t=0,n=r.length;n>t;t++)p=r[t],h=p.layoutRect(),m=p.settings,g=m.flex,d-=n-1>t?c:0,g>0&&(u+=g,h[k]&&v.push(p),h.flex=g),d-=h[E],y=o[P]+h[H]+o[O],y>_&&(_=y);if(x={},x[E]=0>d?i[E]-d+i[A]:i[R]-d+i[A],x[H]=_+i[I],x[B]=i[R]-d,x[F]=_,x.minW=W(x.minW,i.maxW),x.minH=W(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;n>t;t++)p=v[t],h=p.layoutRect(),b=h[k],y=h[E]+h.flex*C,y>b?(d-=h[k]-h[E],u-=h.flex,h.flex=0,h.maxFlexSize=b):h.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[D]=o[P],t=0,n=r.length;n>t;t++)p=r[t],h=p.layoutRect(),y=h.maxFlexSize||h[E],"center"===s?x[D]=Math.round(i[L]/2-h[M]/2):"stretch"===s?(x[M]=z(h[H]||0,i[L]-o[P]-o[O]),x[D]=o[P]):"end"===s&&(x[D]=i[L]-h[M]-o.top),h.flex>0&&(y+=h.flex*C),x[N]=y,x[S]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(Ot,[bt],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(It,[$,wt,et,p,dt,g],function(e,t,n,r,i,o){function a(e){function t(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function r(e){e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function i(){function t(e){var n=[];if(e)return s(e,function(e){var o={text:e.title,icon:e.icon};if(e.items)o.menu=t(e.items);else{var a=e.format||"custom"+r++;e.format||(e.name=a,i.push(e)),o.format=a}n.push(o)}),n}function n(){var n;return n=t(e.settings.style_formats_merge?e.settings.style_formats?o.concat(e.settings.style_formats):o:e.settings.style_formats||o)}var r=0,i=[],o=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(i,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:n(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?e.formatter.getCssText(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&d(this.settings.format)}}}}function o(){return e.undoManager?e.undoManager.hasUndo():!1}function a(){return e.undoManager?e.undoManager.hasRedo():!1}function l(){var t=this;t.disabled(!o()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!o())})}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function u(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function d(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var f;f=i(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){d(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:l,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:c,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:l,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:c,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:u,cmd:"mceToggleVisualAid"}),s({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:f}),e.addButton("formatselect",function(){var n=[],i=r(e.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6");return s(i,function(t){n.push({text:t[0],value:t[1],textStyle:function(){return e.formatter.getCssText(t[1])}})}),{type:"listbox",text:i[0][0],values:n,fixedWidth:!0,onselect:d,onPostRender:t(n)}}),e.addButton("fontselect",function(){var n="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",i=[],o=r(e.settings.font_formats||n);return s(o,function(e){i.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:i,fixedWidth:!0,onPostRender:t(i,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var n=[],r="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||r;return s(i.split(" "),function(e){n.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:n,fixedWidth:!0,onPostRender:t(n,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:f})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Ft,[Ct],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v,y,b,C,x,w,_,N=[],E=[],S,k,T,R;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),d=0;r>d;d++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.minH,N[d]=S>N[d]?S:N[d],E[f]=k>E[f]?k:E[f];for(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=N[d]+(d>0?y:0),T-=(d>0?y:0)+N[d];for(R=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),R-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var A;A="start"==t.packV?0:R>0?Math.floor(R/n):0;var B=0,D=t.flexWidths;if(D)for(d=0;dd;d++)N[d]+=D?D[d]*L:L;for(h=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+A,d=0;r>d&&(u=i[f*r+d],u);d++)m=u.settings,c=u.layoutRect(),a=Math.max(N[d],c.startMinWidth),c.x=p,c.y=h,v=m.alignH||(C?C[d]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=m.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=h+s/2-c.h/2:"bottom"==v?c.y=h+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),p+=a+y,u.recalc&&u.recalc();h+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var M=e.parent();M&&(M._lastRect=null,M.recalc())}}})}),r(zt,[wt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(Wt,[wt,q],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.addClass("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(Vt,[G],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e._super()}})}),r(Ut,[Vt],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(qt,[_t,j,Ut],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
          '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n0&&(o=n[0].text,t._value=n[0].value),e.menu=n}e.text=e.text||o||n[0].text,t._super(e),t.addClass("listbox"),t.on("select",function(n){var r=n.control;a&&(n.lastControl=a),e.multiple?r.active(!r.active()):t.value(n.control.settings.value),a=r})},value:function(e){function t(e,n){e.items().each(function(e){r=e.value()===n,r&&(i=i||e.text()),e.active(r),e.menu&&t(e.menu,n)})}var n=this,r,i,o,a;if("undefined"!=typeof e){if(n.menu)t(n.menu,e);else for(o=n.settings.menu,a=0;a'+("-"!==o?'\xa0":"")+("-"!==o?''+o+"":"")+(l?'
          '+l+"
          ":"")+(r.menu?'
          ':"")+"
          @@ -27,11 +27,11 @@ diff --git a/www/index.html b/www/index.html index c82a9dd..e029c01 100644 --- a/www/index.html +++ b/www/index.html @@ -35,7 +35,7 @@ - +
          @@ -48,11 +48,11 @@ @@ -71,7 +71,9 @@

          -

          +
          +

          +


          @@ -92,5 +94,27 @@

          + // Test the navigation bar by clicking on the 'REVIEW' link and checking the URL changes to '/review' + it('Has a working nav', function(done) { + var currentURL = this.driver.getCurrentUrl(); + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + setTimeout(restTest, 2000); + var currentURL = this.driver.getCurrentUrl(); + + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + diff --git a/www/node_modules/.bin/jasmine b/www/node_modules/.bin/jasmine new file mode 120000 index 0000000..d2c1bff --- /dev/null +++ b/www/node_modules/.bin/jasmine @@ -0,0 +1 @@ +../jasmine/bin/jasmine.js \ No newline at end of file diff --git a/www/node_modules/.bin/rimraf b/www/node_modules/.bin/rimraf new file mode 120000 index 0000000..4cd49a4 --- /dev/null +++ b/www/node_modules/.bin/rimraf @@ -0,0 +1 @@ +../rimraf/bin.js \ No newline at end of file diff --git a/www/node_modules/adm-zip/.idea/scopes/scope_settings.xml b/www/node_modules/adm-zip/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..0d5175c --- /dev/null +++ b/www/node_modules/adm-zip/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/www/node_modules/adm-zip/MIT-LICENSE.txt b/www/node_modules/adm-zip/MIT-LICENSE.txt new file mode 100644 index 0000000..14c3ee5 --- /dev/null +++ b/www/node_modules/adm-zip/MIT-LICENSE.txt @@ -0,0 +1,21 @@ +Copyright (c) 2012 Another-D-Mention Software and other contributors, +http://www.another-d-mention.ro/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/www/node_modules/adm-zip/README.md b/www/node_modules/adm-zip/README.md new file mode 100644 index 0000000..030fab8 --- /dev/null +++ b/www/node_modules/adm-zip/README.md @@ -0,0 +1,64 @@ +# ADM-ZIP for NodeJS + +ADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). + +# Installation + +With [npm](http://npmjs.org) do: + + $ npm install adm-zip + +## What is it good for? +The library allows you to: + +* decompress zip files directly to disk or in memory buffers +* compress files and store them to disk in .zip format or in compressed buffers +* update content of/add new/delete files from an existing .zip + +# Dependencies +There are no other nodeJS libraries that ADM-ZIP is dependent of + +# Examples + +## Basic usage +```javascript + + var AdmZip = require('adm-zip'); + + // reading archives + var zip = new AdmZip("./my_file.zip"); + var zipEntries = zip.getEntries(); // an array of ZipEntry records + + zipEntries.forEach(function(zipEntry) { + console.log(zipEntry.toString()); // outputs zip entries information + if (zipEntry.entryName == "my_file.txt") { + console.log(zipEntry.data.toString('utf8')); + } + }); + // outputs the content of some_folder/my_file.txt + console.log(zip.readAsText("some_folder/my_file.txt")); + // extracts the specified file to the specified location + zip.extractEntryTo(/*entry name*/"some_folder/my_file.txt", /*target path*/"/home/me/tempfolder", /*maintainEntryPath*/false, /*overwrite*/true); + // extracts everything + zip.extractAllTo(/*target path*/"/home/me/zipcontent/", /*overwrite*/true); + + + // creating archives + var zip = new AdmZip(); + + // add file directly + zip.addFile("test.txt", new Buffer("inner content of the file"), "entry comment goes here"); + // add local file + zip.addLocalFile("/home/me/some_picture.png"); + // get everything as a buffer + var willSendthis = zip.toBuffer(); + // or write everything to disk + zip.writeZip(/*target file name*/"/home/me/files.zip"); + + + // ... more examples in the wiki +``` + +For more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki). + +[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip) diff --git a/www/node_modules/adm-zip/adm-zip.js b/www/node_modules/adm-zip/adm-zip.js new file mode 100644 index 0000000..46595fc --- /dev/null +++ b/www/node_modules/adm-zip/adm-zip.js @@ -0,0 +1,404 @@ +var fs = require("fs"), + pth = require("path"); + +fs.existsSync = fs.existsSync || pth.existsSync; + +var ZipEntry = require("./zipEntry"), + ZipFile = require("./zipFile"), + Utils = require("./util"); + +module.exports = function(/*String*/input) { + var _zip = undefined, + _filename = ""; + + if (input && typeof input === "string") { // load zip file + if (fs.existsSync(input)) { + _filename = input; + _zip = new ZipFile(input, Utils.Constants.FILE); + } else { + throw Utils.Errors.INVALID_FILENAME; + } + } else if(input && Buffer.isBuffer(input)) { // load buffer + _zip = new ZipFile(input, Utils.Constants.BUFFER); + } else { // create new zip file + _zip = new ZipFile(null, Utils.Constants.NONE); + } + + function getEntry(/*Object*/entry) { + if (entry && _zip) { + var item; + // If entry was given as a file name + if (typeof entry === "string") + item = _zip.getEntry(entry); + // if entry was given as a ZipEntry object + if (typeof entry === "object" && entry.entryName != undefined && entry.header != undefined) + item = _zip.getEntry(entry.entryName); + + if (item) { + return item; + } + } + return null; + } + + return { + /** + * Extracts the given entry from the archive and returns the content as a Buffer object + * @param entry ZipEntry object or String with the full path of the entry + * + * @return Buffer or Null in case of error + */ + readFile : function(/*Object*/entry) { + var item = getEntry(entry); + return item && item.getData() || null; + }, + + /** + * Asynchronous readFile + * @param entry ZipEntry object or String with the full path of the entry + * @param callback + * + * @return Buffer or Null in case of error + */ + readFileAsync : function(/*Object*/entry, /*Function*/callback) { + var item = getEntry(entry); + if (item) { + item.getDataAsync(callback); + } else { + callback(null,"getEntry failed for:" + entry) + } + }, + + /** + * Extracts the given entry from the archive and returns the content as plain text in the given encoding + * @param entry ZipEntry object or String with the full path of the entry + * @param encoding Optional. If no encoding is specified utf8 is used + * + * @return String + */ + readAsText : function(/*Object*/entry, /*String - Optional*/encoding) { + var item = getEntry(entry); + if (item) { + var data = item.getData(); + if (data && data.length) { + return data.toString(encoding || "utf8"); + } + } + return ""; + }, + + /** + * Asynchronous readAsText + * @param entry ZipEntry object or String with the full path of the entry + * @param callback + * @param encoding Optional. If no encoding is specified utf8 is used + * + * @return String + */ + readAsTextAsync : function(/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) { + var item = getEntry(entry); + if (item) { + item.getDataAsync(function(data) { + if (data && data.length) { + callback(data.toString(encoding || "utf8")); + } else { + callback(""); + } + }) + } else { + callback(""); + } + }, + + /** + * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory + * + * @param entry + */ + deleteFile : function(/*Object*/entry) { // @TODO: test deleteFile + var item = getEntry(entry); + if (item) { + _zip.deleteEntry(item.entryName); + } + }, + + /** + * Adds a comment to the zip. The zip must be rewritten after adding the comment. + * + * @param comment + */ + addZipComment : function(/*String*/comment) { // @TODO: test addZipComment + _zip.comment = comment; + }, + + /** + * Returns the zip comment + * + * @return String + */ + getZipComment : function() { + return _zip.comment || ''; + }, + + /** + * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment + * The comment cannot exceed 65535 characters in length + * + * @param entry + * @param comment + */ + addZipEntryComment : function(/*Object*/entry,/*String*/comment) { + var item = getEntry(entry); + if (item) { + item.comment = comment; + } + }, + + /** + * Returns the comment of the specified entry + * + * @param entry + * @return String + */ + getZipEntryComment : function(/*Object*/entry) { + var item = getEntry(entry); + if (item) { + return item.comment || ''; + } + return '' + }, + + /** + * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content + * + * @param entry + * @param content + */ + updateFile : function(/*Object*/entry, /*Buffer*/content) { + var item = getEntry(entry); + if (item) { + item.setData(content); + } + }, + + /** + * Adds a file from the disk to the archive + * + * @param localPath + */ + addLocalFile : function(/*String*/localPath, /*String*/zipPath) { + if (fs.existsSync(localPath)) { + if(zipPath){ + zipPath=zipPath.split("\\").join("/"); + if(zipPath.charAt(zipPath.length - 1) != "/"){ + zipPath += "/"; + } + }else{ + zipPath=""; + } + var p = localPath.split("\\").join("/").split("/").pop(); + + this.addFile(zipPath+p, fs.readFileSync(localPath), "", 0) + } else { + throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); + } + }, + + /** + * Adds a local directory and all its nested files and directories to the archive + * + * @param localPath + */ + addLocalFolder : function(/*String*/localPath, /*String*/zipPath) { + if(zipPath){ + zipPath=zipPath.split("\\").join("/"); + if(zipPath.charAt(zipPath.length - 1) != "/"){ + zipPath += "/"; + } + }else{ + zipPath=""; + } + localPath = localPath.split("\\").join("/"); //windows fix + if (localPath.charAt(localPath.length - 1) != "/") + localPath += "/"; + + if (fs.existsSync(localPath)) { + + var items = Utils.findFiles(localPath), + self = this; + + if (items.length) { + items.forEach(function(path) { + var p = path.split("\\").join("/").replace(localPath, ""); //windows fix + if (p.charAt(p.length - 1) !== "/") { + self.addFile(zipPath+p, fs.readFileSync(path), "", 0) + } else { + self.addFile(zipPath+p, new Buffer(0), "", 0) + } + }); + } + } else { + throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); + } + }, + + /** + * Allows you to create a entry (file or directory) in the zip file. + * If you want to create a directory the entryName must end in / and a null buffer should be provided. + * Comment and attributes are optional + * + * @param entryName + * @param content + * @param comment + * @param attr + */ + addFile : function(/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) { + var entry = new ZipEntry(); + entry.entryName = entryName; + entry.comment = comment || ""; + entry.attr = attr || 438; //0666; + if (entry.isDirectory && content.length) { + // throw Utils.Errors.DIRECTORY_CONTENT_ERROR; + } + entry.setData(content); + _zip.setEntry(entry); + }, + + /** + * Returns an array of ZipEntry objects representing the files and folders inside the archive + * + * @return Array + */ + getEntries : function() { + if (_zip) { + return _zip.entries; + } else { + return []; + } + }, + + /** + * Returns a ZipEntry object representing the file or folder specified by ``name``. + * + * @param name + * @return ZipEntry + */ + getEntry : function(/*String*/name) { + return getEntry(name); + }, + + /** + * Extracts the given entry to the given targetPath + * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted + * + * @param entry ZipEntry object or String with the full path of the entry + * @param targetPath Target folder where to write the file + * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder + * will be created in targetPath as well. Default is TRUE + * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. + * Default is FALSE + * + * @return Boolean + */ + extractEntryTo : function(/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) { + overwrite = overwrite || false; + maintainEntryPath = typeof maintainEntryPath == "undefined" ? true : maintainEntryPath; + + var item = getEntry(entry); + if (!item) { + throw Utils.Errors.NO_ENTRY; + } + + var target = pth.resolve(targetPath, maintainEntryPath ? item.entryName : pth.basename(item.entryName)); + + if (item.isDirectory) { + target = pth.resolve(target, ".."); + var children = _zip.getEntryChildren(item); + children.forEach(function(child) { + if (child.isDirectory) return; + var content = child.getData(); + if (!content) { + throw Utils.Errors.CANT_EXTRACT_FILE; + } + Utils.writeFileTo(pth.resolve(targetPath, maintainEntryPath ? child.entryName : child.entryName.substr(item.entryName.length)), content, overwrite); + }); + return true; + } + + var content = item.getData(); + if (!content) throw Utils.Errors.CANT_EXTRACT_FILE; + + if (fs.existsSync(targetPath) && !overwrite) { + throw Utils.Errors.CANT_OVERRIDE; + } + Utils.writeFileTo(target, content, overwrite); + + return true; + }, + + /** + * Extracts the entire archive to the given location + * + * @param targetPath Target location + * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. + * Default is FALSE + */ + extractAllTo : function(/*String*/targetPath, /*Boolean*/overwrite) { + overwrite = overwrite || false; + if (!_zip) { + throw Utils.Errors.NO_ZIP; + } + + _zip.entries.forEach(function(entry) { + if (entry.isDirectory) { + Utils.makeDir(pth.resolve(targetPath, entry.entryName.toString())); + return; + } + var content = entry.getData(); + if (!content) { + throw Utils.Errors.CANT_EXTRACT_FILE + "2"; + } + Utils.writeFileTo(pth.resolve(targetPath, entry.entryName.toString()), content, overwrite); + }) + }, + + /** + * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip + * + * @param targetFileName + * @param callback + */ + writeZip : function(/*String*/targetFileName, /*Function*/callback) { + if (arguments.length == 1) { + if (typeof targetFileName == "function") { + callback = targetFileName; + targetFileName = ""; + } + } + + if (!targetFileName && _filename) { + targetFileName = _filename; + } + if (!targetFileName) return; + + var zipData = _zip.compressToBuffer(); + if (zipData) { + Utils.writeFileTo(targetFileName, zipData, true); + } + }, + + /** + * Returns the content of the entire zip file as a Buffer object + * + * @return Buffer + */ + toBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { + this.valueOf = 2; + if (typeof onSuccess == "function") { + _zip.toAsyncBuffer(onSuccess,onFail,onItemStart,onItemEnd); + return null; + } + return _zip.compressToBuffer() + } + } +}; diff --git a/www/node_modules/adm-zip/headers/entryHeader.js b/www/node_modules/adm-zip/headers/entryHeader.js new file mode 100644 index 0000000..a29c70f --- /dev/null +++ b/www/node_modules/adm-zip/headers/entryHeader.js @@ -0,0 +1,261 @@ +var Utils = require("../util"), + Constants = Utils.Constants; + +/* The central directory file header */ +module.exports = function () { + var _verMade = 0x0A, + _version = 0x0A, + _flags = 0, + _method = 0, + _time = 0, + _crc = 0, + _compressedSize = 0, + _size = 0, + _fnameLen = 0, + _extraLen = 0, + + _comLen = 0, + _diskStart = 0, + _inattr = 0, + _attr = 0, + _offset = 0; + + var _dataHeader = {}; + + function setTime(val) { + var val = new Date(val); + _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980 + | (val.getMonth() + 1) << 21 // b05-08 month + | val.getDay() << 16 // b00-04 hour + + // 2 bytes time + | val.getHours() << 11 // b11-15 hour + | val.getMinutes() << 5 // b05-10 minute + | val.getSeconds() >> 1; // b00-04 seconds divided by 2 + } + + setTime(+new Date()); + + return { + get made () { return _verMade; }, + set made (val) { _verMade = val; }, + + get version () { return _version; }, + set version (val) { _version = val }, + + get flags () { return _flags }, + set flags (val) { _flags = val; }, + + get method () { return _method; }, + set method (val) { _method = val; }, + + get time () { return new Date( + ((_time >> 25) & 0x7f) + 1980, + ((_time >> 21) & 0x0f) - 1, + (_time >> 16) & 0x1f, + (_time >> 11) & 0x1f, + (_time >> 5) & 0x3f, + (_time & 0x1f) << 1 + ); + }, + set time (val) { + setTime(val); + }, + + get crc () { return _crc; }, + set crc (val) { _crc = val; }, + + get compressedSize () { return _compressedSize; }, + set compressedSize (val) { _compressedSize = val; }, + + get size () { return _size; }, + set size (val) { _size = val; }, + + get fileNameLength () { return _fnameLen; }, + set fileNameLength (val) { _fnameLen = val; }, + + get extraLength () { return _extraLen }, + set extraLength (val) { _extraLen = val; }, + + get commentLength () { return _comLen }, + set commentLength (val) { _comLen = val }, + + get diskNumStart () { return _diskStart }, + set diskNumStart (val) { _diskStart = val }, + + get inAttr () { return _inattr }, + set inAttr (val) { _inattr = val }, + + get attr () { return _attr }, + set attr (val) { _attr = val }, + + get offset () { return _offset }, + set offset (val) { _offset = val }, + + get encripted () { return (_flags & 1) == 1 }, + + get entryHeaderSize () { + return Constants.CENHDR + _fnameLen + _extraLen + _comLen; + }, + + get realDataOffset () { + return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen; + }, + + get dataHeader () { + return _dataHeader; + }, + + loadDataHeaderFromBinary : function(/*Buffer*/input) { + var data = input.slice(_offset, _offset + Constants.LOCHDR); + // 30 bytes and should start with "PK\003\004" + if (data.readUInt32LE(0) != Constants.LOCSIG) { + throw Utils.Errors.INVALID_LOC; + } + _dataHeader = { + // version needed to extract + version : data.readUInt16LE(Constants.LOCVER), + // general purpose bit flag + flags : data.readUInt16LE(Constants.LOCFLG), + // compression method + method : data.readUInt16LE(Constants.LOCHOW), + // modification time (2 bytes time, 2 bytes date) + time : data.readUInt32LE(Constants.LOCTIM), + // uncompressed file crc-32 value + crc : data.readUInt32LE(Constants.LOCCRC), + // compressed size + compressedSize : data.readUInt32LE(Constants.LOCSIZ), + // uncompressed size + size : data.readUInt32LE(Constants.LOCLEN), + // filename length + fnameLen : data.readUInt16LE(Constants.LOCNAM), + // extra field length + extraLen : data.readUInt16LE(Constants.LOCEXT) + } + }, + + loadFromBinary : function(/*Buffer*/data) { + // data should be 46 bytes and start with "PK 01 02" + if (data.length != Constants.CENHDR || data.readUInt32LE(0) != Constants.CENSIG) { + throw Utils.Errors.INVALID_CEN; + } + // version made by + _verMade = data.readUInt16LE(Constants.CENVEM); + // version needed to extract + _version = data.readUInt16LE(Constants.CENVER); + // encrypt, decrypt flags + _flags = data.readUInt16LE(Constants.CENFLG); + // compression method + _method = data.readUInt16LE(Constants.CENHOW); + // modification time (2 bytes time, 2 bytes date) + _time = data.readUInt32LE(Constants.CENTIM); + // uncompressed file crc-32 value + _crc = data.readUInt32LE(Constants.CENCRC); + // compressed size + _compressedSize = data.readUInt32LE(Constants.CENSIZ); + // uncompressed size + _size = data.readUInt32LE(Constants.CENLEN); + // filename length + _fnameLen = data.readUInt16LE(Constants.CENNAM); + // extra field length + _extraLen = data.readUInt16LE(Constants.CENEXT); + // file comment length + _comLen = data.readUInt16LE(Constants.CENCOM); + // volume number start + _diskStart = data.readUInt16LE(Constants.CENDSK); + // internal file attributes + _inattr = data.readUInt16LE(Constants.CENATT); + // external file attributes + _attr = data.readUInt32LE(Constants.CENATX); + // LOC header offset + _offset = data.readUInt32LE(Constants.CENOFF); + }, + + dataHeaderToBinary : function() { + // LOC header size (30 bytes) + var data = new Buffer(Constants.LOCHDR); + // "PK\003\004" + data.writeUInt32LE(Constants.LOCSIG, 0); + // version needed to extract + data.writeUInt16LE(_version, Constants.LOCVER); + // general purpose bit flag + data.writeUInt16LE(_flags, Constants.LOCFLG); + // compression method + data.writeUInt16LE(_method, Constants.LOCHOW); + // modification time (2 bytes time, 2 bytes date) + data.writeUInt32LE(_time, Constants.LOCTIM); + // uncompressed file crc-32 value + data.writeUInt32LE(_crc, Constants.LOCCRC); + // compressed size + data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); + // uncompressed size + data.writeUInt32LE(_size, Constants.LOCLEN); + // filename length + data.writeUInt16LE(_fnameLen, Constants.LOCNAM); + // extra field length + data.writeUInt16LE(_extraLen, Constants.LOCEXT); + return data; + }, + + entryHeaderToBinary : function() { + // CEN header size (46 bytes) + var data = new Buffer(Constants.CENHDR + _fnameLen + _extraLen + _comLen); + // "PK\001\002" + data.writeUInt32LE(Constants.CENSIG, 0); + // version made by + data.writeUInt16LE(_verMade, Constants.CENVEM); + // version needed to extract + data.writeUInt16LE(_version, Constants.CENVER); + // encrypt, decrypt flags + data.writeUInt16LE(_flags, Constants.CENFLG); + // compression method + data.writeUInt16LE(_method, Constants.CENHOW); + // modification time (2 bytes time, 2 bytes date) + data.writeUInt32LE(_time, Constants.CENTIM); + // uncompressed file crc-32 value + data.writeInt32LE(_crc, Constants.CENCRC, true); + // compressed size + data.writeUInt32LE(_compressedSize, Constants.CENSIZ); + // uncompressed size + data.writeUInt32LE(_size, Constants.CENLEN); + // filename length + data.writeUInt16LE(_fnameLen, Constants.CENNAM); + // extra field length + data.writeUInt16LE(_extraLen, Constants.CENEXT); + // file comment length + data.writeUInt16LE(_comLen, Constants.CENCOM); + // volume number start + data.writeUInt16LE(_diskStart, Constants.CENDSK); + // internal file attributes + data.writeUInt16LE(_inattr, Constants.CENATT); + // external file attributes + data.writeUInt32LE(_attr, Constants.CENATX); + // LOC header offset + data.writeUInt32LE(_offset, Constants.CENOFF); + // fill all with + data.fill(0x00, Constants.CENHDR); + return data; + }, + + toString : function() { + return '{\n' + + '\t"made" : ' + _verMade + ",\n" + + '\t"version" : ' + _version + ",\n" + + '\t"flags" : ' + _flags + ",\n" + + '\t"method" : ' + Utils.methodToString(_method) + ",\n" + + '\t"time" : ' + _time + ",\n" + + '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + + '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + + '\t"size" : ' + _size + " bytes,\n" + + '\t"fileNameLength" : ' + _fnameLen + ",\n" + + '\t"extraLength" : ' + _extraLen + " bytes,\n" + + '\t"commentLength" : ' + _comLen + " bytes,\n" + + '\t"diskNumStart" : ' + _diskStart + ",\n" + + '\t"inAttr" : ' + _inattr + ",\n" + + '\t"attr" : ' + _attr + ",\n" + + '\t"offset" : ' + _offset + ",\n" + + '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + + '}'; + } + } +}; diff --git a/www/node_modules/adm-zip/headers/index.js b/www/node_modules/adm-zip/headers/index.js new file mode 100644 index 0000000..b8c67b9 --- /dev/null +++ b/www/node_modules/adm-zip/headers/index.js @@ -0,0 +1,2 @@ +exports.EntryHeader = require("./entryHeader"); +exports.MainHeader = require("./mainHeader"); diff --git a/www/node_modules/adm-zip/headers/mainHeader.js b/www/node_modules/adm-zip/headers/mainHeader.js new file mode 100644 index 0000000..002bc8a --- /dev/null +++ b/www/node_modules/adm-zip/headers/mainHeader.js @@ -0,0 +1,80 @@ +var Utils = require("../util"), + Constants = Utils.Constants; + +/* The entries in the end of central directory */ +module.exports = function () { + var _volumeEntries = 0, + _totalEntries = 0, + _size = 0, + _offset = 0, + _commentLength = 0; + + return { + get diskEntries () { return _volumeEntries }, + set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; }, + + get totalEntries () { return _totalEntries }, + set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; }, + + get size () { return _size }, + set size (/*Number*/val) { _size = val; }, + + get offset () { return _offset }, + set offset (/*Number*/val) { _offset = val; }, + + get commentLength () { return _commentLength }, + set commentLength (/*Number*/val) { _commentLength = val; }, + + get mainHeaderSize () { + return Constants.ENDHDR + _commentLength; + }, + + loadFromBinary : function(/*Buffer*/data) { + // data should be 22 bytes and start with "PK 05 06" + if (data.length != Constants.ENDHDR || data.readUInt32LE(0) != Constants.ENDSIG) + throw Utils.Errors.INVALID_END; + + // number of entries on this volume + _volumeEntries = data.readUInt16LE(Constants.ENDSUB); + // total number of entries + _totalEntries = data.readUInt16LE(Constants.ENDTOT); + // central directory size in bytes + _size = data.readUInt32LE(Constants.ENDSIZ); + // offset of first CEN header + _offset = data.readUInt32LE(Constants.ENDOFF); + // zip file comment length + _commentLength = data.readUInt16LE(Constants.ENDCOM); + }, + + toBinary : function() { + var b = new Buffer(Constants.ENDHDR + _commentLength); + // "PK 05 06" signature + b.writeUInt32LE(Constants.ENDSIG, 0); + b.writeUInt32LE(0, 4); + // number of entries on this volume + b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); + // total number of entries + b.writeUInt16LE(_totalEntries, Constants.ENDTOT); + // central directory size in bytes + b.writeUInt32LE(_size, Constants.ENDSIZ); + // offset of first CEN header + b.writeUInt32LE(_offset, Constants.ENDOFF); + // zip file comment length + b.writeUInt16LE(_commentLength, Constants.ENDCOM); + // fill comment memory with spaces so no garbage is left there + b.fill(" ", Constants.ENDHDR); + + return b; + }, + + toString : function() { + return '{\n' + + '\t"diskEntries" : ' + _volumeEntries + ",\n" + + '\t"totalEntries" : ' + _totalEntries + ",\n" + + '\t"size" : ' + _size + " bytes,\n" + + '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + + '\t"commentLength" : 0x' + _commentLength + "\n" + + '}'; + } + } +}; \ No newline at end of file diff --git a/www/node_modules/adm-zip/methods/deflater.js b/www/node_modules/adm-zip/methods/deflater.js new file mode 100644 index 0000000..3267943 --- /dev/null +++ b/www/node_modules/adm-zip/methods/deflater.js @@ -0,0 +1,1578 @@ +/* + * $Id: rawdeflate.js,v 0.5 2013/04/09 14:25:38 dankogai Exp dankogai $ + * + * GNU General Public License, version 2 (GPL-2.0) + * http://opensource.org/licenses/GPL-2.0 + * Original: + * http://www.onicos.com/staff/iz/amuse/javascript/expert/deflate.txt + */ +function JSDeflater(/*inbuff*/inbuf) { + + /* Copyright (C) 1999 Masanao Izumo + * Version: 1.0.1 + * LastModified: Dec 25 1999 + */ + + var WSIZE = 32768, // Sliding Window size + zip_STORED_BLOCK = 0, + zip_STATIC_TREES = 1, + zip_DYN_TREES = 2, + zip_DEFAULT_LEVEL = 6, + zip_FULL_SEARCH = true, + zip_INBUFSIZ = 32768, // Input buffer size + zip_INBUF_EXTRA = 64, // Extra buffer + zip_OUTBUFSIZ = 1024 * 8, + zip_window_size = 2 * WSIZE, + MIN_MATCH = 3, + MAX_MATCH = 258, + zip_BITS = 16, + LIT_BUFSIZE = 0x2000, + zip_HASH_BITS = 13, + zip_DIST_BUFSIZE = LIT_BUFSIZE, + zip_HASH_SIZE = 1 << zip_HASH_BITS, + zip_HASH_MASK = zip_HASH_SIZE - 1, + zip_WMASK = WSIZE - 1, + zip_NIL = 0, // Tail of hash chains + zip_TOO_FAR = 4096, + zip_MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1, + zip_MAX_DIST = WSIZE - zip_MIN_LOOKAHEAD, + zip_SMALLEST = 1, + zip_MAX_BITS = 15, + zip_MAX_BL_BITS = 7, + zip_LENGTH_CODES = 29, + zip_LITERALS = 256, + zip_END_BLOCK = 256, + zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES, + zip_D_CODES = 30, + zip_BL_CODES = 19, + zip_REP_3_6 = 16, + zip_REPZ_3_10 = 17, + zip_REPZ_11_138 = 18, + zip_HEAP_SIZE = 2 * zip_L_CODES + 1, + zip_H_SHIFT = parseInt((zip_HASH_BITS + MIN_MATCH - 1) / MIN_MATCH); + + var zip_free_queue, zip_qhead, zip_qtail, zip_initflag, zip_outbuf = null, zip_outcnt, zip_outoff, zip_complete, + zip_window, zip_d_buf, zip_l_buf, zip_prev, zip_bi_buf, zip_bi_valid, zip_block_start, zip_ins_h, zip_hash_head, + zip_prev_match, zip_match_available, zip_match_length, zip_prev_length, zip_strstart, zip_match_start, zip_eofile, + zip_lookahead, zip_max_chain_length, zip_max_lazy_match, zip_compr_level, zip_good_match, zip_nice_match, + zip_dyn_ltree, zip_dyn_dtree, zip_static_ltree, zip_static_dtree, zip_bl_tree, zip_l_desc, zip_d_desc, zip_bl_desc, + zip_bl_count, zip_heap, zip_heap_len, zip_heap_max, zip_depth, zip_length_code, zip_dist_code, zip_base_length, + zip_base_dist, zip_flag_buf, zip_last_lit, zip_last_dist, zip_last_flags, zip_flags, zip_flag_bit, zip_opt_len, + zip_static_len, zip_deflate_data, zip_deflate_pos; + + var zip_DeflateCT = function () { + this.fc = 0; // frequency count or bit string + this.dl = 0; // father node in Huffman tree or length of bit string + }; + + var zip_DeflateTreeDesc = function () { + this.dyn_tree = null; // the dynamic tree + this.static_tree = null; // corresponding static tree or NULL + this.extra_bits = null; // extra bits for each code or NULL + this.extra_base = 0; // base index for extra_bits + this.elems = 0; // max number of elements in the tree + this.max_length = 0; // max bit length for the codes + this.max_code = 0; // largest code with non zero frequency + }; + + /* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ + var zip_DeflateConfiguration = function (a, b, c, d) { + this.good_length = a; // reduce lazy search above this match length + this.max_lazy = b; // do not perform lazy search above this match length + this.nice_length = c; // quit search above this match length + this.max_chain = d; + }; + + var zip_DeflateBuffer = function () { + this.next = null; + this.len = 0; + this.ptr = new Array(zip_OUTBUFSIZ); + this.off = 0; + }; + + /* constant tables */ + var zip_extra_lbits = new Array( + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0); + var zip_extra_dbits = new Array( + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13); + var zip_extra_blbits = new Array( + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7); + var zip_bl_order = new Array( + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); + var zip_configuration_table = new Array( + new zip_DeflateConfiguration(0, 0, 0, 0), + new zip_DeflateConfiguration(4, 4, 8, 4), + new zip_DeflateConfiguration(4, 5, 16, 8), + new zip_DeflateConfiguration(4, 6, 32, 32), + new zip_DeflateConfiguration(4, 4, 16, 16), + new zip_DeflateConfiguration(8, 16, 32, 32), + new zip_DeflateConfiguration(8, 16, 128, 128), + new zip_DeflateConfiguration(8, 32, 128, 256), + new zip_DeflateConfiguration(32, 128, 258, 1024), + new zip_DeflateConfiguration(32, 258, 258, 4096)); + + + /* routines (deflate) */ + + var zip_deflate_start = function (level) { + var i; + + if (!level) + level = zip_DEFAULT_LEVEL; + else if (level < 1) + level = 1; + else if (level > 9) + level = 9; + + zip_compr_level = level; + zip_initflag = false; + zip_eofile = false; + if (zip_outbuf != null) + return; + + zip_free_queue = zip_qhead = zip_qtail = null; + zip_outbuf = new Array(zip_OUTBUFSIZ); + zip_window = new Array(zip_window_size); + zip_d_buf = new Array(zip_DIST_BUFSIZE); + zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA); + zip_prev = new Array(1 << zip_BITS); + zip_dyn_ltree = new Array(zip_HEAP_SIZE); + for (i = 0; i < zip_HEAP_SIZE; i++) zip_dyn_ltree[i] = new zip_DeflateCT(); + zip_dyn_dtree = new Array(2 * zip_D_CODES + 1); + for (i = 0; i < 2 * zip_D_CODES + 1; i++) zip_dyn_dtree[i] = new zip_DeflateCT(); + zip_static_ltree = new Array(zip_L_CODES + 2); + for (i = 0; i < zip_L_CODES + 2; i++) zip_static_ltree[i] = new zip_DeflateCT(); + zip_static_dtree = new Array(zip_D_CODES); + for (i = 0; i < zip_D_CODES; i++) zip_static_dtree[i] = new zip_DeflateCT(); + zip_bl_tree = new Array(2 * zip_BL_CODES + 1); + for (i = 0; i < 2 * zip_BL_CODES + 1; i++) zip_bl_tree[i] = new zip_DeflateCT(); + zip_l_desc = new zip_DeflateTreeDesc(); + zip_d_desc = new zip_DeflateTreeDesc(); + zip_bl_desc = new zip_DeflateTreeDesc(); + zip_bl_count = new Array(zip_MAX_BITS + 1); + zip_heap = new Array(2 * zip_L_CODES + 1); + zip_depth = new Array(2 * zip_L_CODES + 1); + zip_length_code = new Array(MAX_MATCH - MIN_MATCH + 1); + zip_dist_code = new Array(512); + zip_base_length = new Array(zip_LENGTH_CODES); + zip_base_dist = new Array(zip_D_CODES); + zip_flag_buf = new Array(parseInt(LIT_BUFSIZE / 8)); + }; + + var zip_deflate_end = function () { + zip_free_queue = zip_qhead = zip_qtail = null; + zip_outbuf = null; + zip_window = null; + zip_d_buf = null; + zip_l_buf = null; + zip_prev = null; + zip_dyn_ltree = null; + zip_dyn_dtree = null; + zip_static_ltree = null; + zip_static_dtree = null; + zip_bl_tree = null; + zip_l_desc = null; + zip_d_desc = null; + zip_bl_desc = null; + zip_bl_count = null; + zip_heap = null; + zip_depth = null; + zip_length_code = null; + zip_dist_code = null; + zip_base_length = null; + zip_base_dist = null; + zip_flag_buf = null; + }; + + var zip_reuse_queue = function (p) { + p.next = zip_free_queue; + zip_free_queue = p; + }; + + var zip_new_queue = function () { + var p; + + if (zip_free_queue != null) { + p = zip_free_queue; + zip_free_queue = zip_free_queue.next; + } + else + p = new zip_DeflateBuffer(); + p.next = null; + p.len = p.off = 0; + + return p; + }; + + var zip_head1 = function (i) { + return zip_prev[WSIZE + i]; + }; + + var zip_head2 = function (i, val) { + return zip_prev[WSIZE + i] = val; + }; + + /* put_byte is used for the compressed output, put_ubyte for the + * uncompressed output. However unlzw() uses window for its + * suffix table instead of its output buffer, so it does not use put_ubyte + * (to be cleaned up). + */ + var zip_put_byte = function (c) { + zip_outbuf[zip_outoff + zip_outcnt++] = c; + if (zip_outoff + zip_outcnt == zip_OUTBUFSIZ) + zip_qoutbuf(); + }; + + /* Output a 16 bit value, lsb first */ + var zip_put_short = function (w) { + w &= 0xffff; + if (zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) { + zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff); + zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8); + } else { + zip_put_byte(w & 0xff); + zip_put_byte(w >>> 8); + } + }; + + /* ========================================================================== + * Insert string s in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of s are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ + var zip_INSERT_STRING = function () { + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) + ^ (zip_window[zip_strstart + MIN_MATCH - 1] & 0xff)) + & zip_HASH_MASK; + zip_hash_head = zip_head1(zip_ins_h); + zip_prev[zip_strstart & zip_WMASK] = zip_hash_head; + zip_head2(zip_ins_h, zip_strstart); + }; + + /* Send a code of the given tree. c and tree must not have side effects */ + var zip_SEND_CODE = function (c, tree) { + zip_send_bits(tree[c].fc, tree[c].dl); + }; + + /* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. dist_code[256] and dist_code[257] are never + * used. + */ + var zip_D_CODE = function (dist) { + return (dist < 256 ? zip_dist_code[dist] + : zip_dist_code[256 + (dist >> 7)]) & 0xff; + }; + + /* ========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ + var zip_SMALLER = function (tree, n, m) { + return tree[n].fc < tree[m].fc || + (tree[n].fc == tree[m].fc && zip_depth[n] <= zip_depth[m]); + }; + + /* ========================================================================== + * read string data + */ + var zip_read_buff = function (buff, offset, n) { + var i; + for (i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++) + buff[offset + i] = + zip_deflate_data[zip_deflate_pos++] & 0xff; + return i; + }; + + /* ========================================================================== + * Initialize the "longest match" routines for a new file + */ + var zip_lm_init = function () { + var j; + + /* Initialize the hash table. */ + for (j = 0; j < zip_HASH_SIZE; j++) + zip_prev[WSIZE + j] = 0; + zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy; + zip_good_match = zip_configuration_table[zip_compr_level].good_length; + if (!zip_FULL_SEARCH) + zip_nice_match = zip_configuration_table[zip_compr_level].nice_length; + zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain; + + zip_strstart = 0; + zip_block_start = 0; + + zip_lookahead = zip_read_buff(zip_window, 0, 2 * WSIZE); + if (zip_lookahead <= 0) { + zip_eofile = true; + zip_lookahead = 0; + return; + } + zip_eofile = false; + /* Make sure that we always have enough lookahead. This is important + * if input comes from a device such as a tty. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + + /* If lookahead < MIN_MATCH, ins_h is garbage, but this is + * not important since only literal bytes will be emitted. + */ + zip_ins_h = 0; + for (j = 0; j < MIN_MATCH - 1; j++) { + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK; + } + }; + + /* ========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + */ + var zip_longest_match = function (cur_match) { + var chain_length = zip_max_chain_length; // max hash chain length + var scanp = zip_strstart; // current string + var matchp; // matched string + var len; // length of current match + var best_len = zip_prev_length; // best match length so far + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL); + + var strendp = zip_strstart + MAX_MATCH; + var scan_end1 = zip_window[scanp + best_len - 1]; + var scan_end = zip_window[scanp + best_len]; + + /* Do not waste too much time if we already have a good match: */ + if (zip_prev_length >= zip_good_match) + chain_length >>= 2; + + do { + matchp = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2: + */ + if (zip_window[matchp + best_len] != scan_end || + zip_window[matchp + best_len - 1] != scan_end1 || + zip_window[matchp] != zip_window[scanp] || + zip_window[++matchp] != zip_window[scanp + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scanp += 2; + matchp++; + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + scanp < strendp); + + len = MAX_MATCH - (strendp - scanp); + scanp = strendp - MAX_MATCH; + + if (len > best_len) { + zip_match_start = cur_match; + best_len = len; + if (zip_FULL_SEARCH) { + if (len >= MAX_MATCH) break; + } else { + if (len >= zip_nice_match) break; + } + + scan_end1 = zip_window[scanp + best_len - 1]; + scan_end = zip_window[scanp + best_len]; + } + } while ((cur_match = zip_prev[cur_match & zip_WMASK]) > limit + && --chain_length != 0); + + return best_len; + }; + + /* ========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead, and sets eofile if end of input file. + * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0 + * OUT assertions: at least one byte has been read, or eofile is set; + * file reads are performed for at least two bytes (required for the + * translate_eol option). + */ + var zip_fill_window = function () { + var n, m; + + // Amount of free space at the end of the window. + var more = zip_window_size - zip_lookahead - zip_strstart; + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (more == -1) { + /* Very unlikely, but possible on 16 bit machine if strstart == 0 + * and lookahead == 1 (input done one byte at time) + */ + more--; + } else if (zip_strstart >= WSIZE + zip_MAX_DIST) { + /* By the IN assertion, the window is not empty so we can't confuse + * more == 0 with more == 64K on a 16 bit machine. + */ + for (n = 0; n < WSIZE; n++) + zip_window[n] = zip_window[n + WSIZE]; + + zip_match_start -= WSIZE; + zip_strstart -= WSIZE; + /* we now have strstart >= MAX_DIST: */ + zip_block_start -= WSIZE; + + for (n = 0; n < zip_HASH_SIZE; n++) { + m = zip_head1(n); + zip_head2(n, m >= WSIZE ? m - WSIZE : zip_NIL); + } + for (n = 0; n < WSIZE; n++) { + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + m = zip_prev[n]; + zip_prev[n] = (m >= WSIZE ? m - WSIZE : zip_NIL); + } + more += WSIZE; + } + // At this point, more >= 2 + if (!zip_eofile) { + n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more); + if (n <= 0) + zip_eofile = true; + else + zip_lookahead += n; + } + }; + + /* ========================================================================== + * Processes a new input file and return its compressed length. This + * function does not perform lazy evaluationof matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ + var zip_deflate_fast = function () { + while (zip_lookahead != 0 && zip_qhead == null) { + var flush; // set if current block must be flushed + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + zip_INSERT_STRING(); + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (zip_hash_head != zip_NIL && + zip_strstart - zip_hash_head <= zip_MAX_DIST) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + zip_match_length = zip_longest_match(zip_hash_head); + /* longest_match() sets match_start */ + if (zip_match_length > zip_lookahead) + zip_match_length = zip_lookahead; + } + if (zip_match_length >= MIN_MATCH) { + flush = zip_ct_tally(zip_strstart - zip_match_start, + zip_match_length - MIN_MATCH); + zip_lookahead -= zip_match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (zip_match_length <= zip_max_lazy_match) { + zip_match_length--; // string at strstart already in hash table + do { + zip_strstart++; + zip_INSERT_STRING(); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH + * these bytes are garbage, but it does not matter since + * the next lookahead bytes will be emitted as literals. + */ + } while (--zip_match_length != 0); + zip_strstart++; + } else { + zip_strstart += zip_match_length; + zip_match_length = 0; + zip_ins_h = zip_window[zip_strstart] & 0xff; + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[zip_strstart + 1] & 0xff)) & zip_HASH_MASK; + } + } else { + /* No match, output a literal byte */ + flush = zip_ct_tally(0, zip_window[zip_strstart] & 0xff); + zip_lookahead--; + zip_strstart++; + } + if (flush) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + } + }; + + var zip_deflate_better = function () { + /* Process the input block. */ + while (zip_lookahead != 0 && zip_qhead == null) { + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + zip_INSERT_STRING(); + + /* Find the longest match, discarding those <= prev_length. + */ + zip_prev_length = zip_match_length; + zip_prev_match = zip_match_start; + zip_match_length = MIN_MATCH - 1; + + if (zip_hash_head != zip_NIL && + zip_prev_length < zip_max_lazy_match && + zip_strstart - zip_hash_head <= zip_MAX_DIST) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + zip_match_length = zip_longest_match(zip_hash_head); + /* longest_match() sets match_start */ + if (zip_match_length > zip_lookahead) + zip_match_length = zip_lookahead; + + /* Ignore a length 3 match if it is too distant: */ + if (zip_match_length == MIN_MATCH && + zip_strstart - zip_match_start > zip_TOO_FAR) { + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + zip_match_length--; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (zip_prev_length >= MIN_MATCH && + zip_match_length <= zip_prev_length) { + var flush; // set if current block must be flushed + flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match, + zip_prev_length - MIN_MATCH); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. + */ + zip_lookahead -= zip_prev_length - 1; + zip_prev_length -= 2; + do { + zip_strstart++; + zip_INSERT_STRING(); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH + * these bytes are garbage, but it does not matter since the + * next lookahead bytes will always be emitted as literals. + */ + } while (--zip_prev_length != 0); + zip_match_available = 0; + zip_match_length = MIN_MATCH - 1; + zip_strstart++; + if (flush) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + } else if (zip_match_available != 0) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + if (zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + zip_strstart++; + zip_lookahead--; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + zip_match_available = 1; + zip_strstart++; + zip_lookahead--; + } + + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + } + }; + + var zip_init_deflate = function () { + if (zip_eofile) + return; + zip_bi_buf = 0; + zip_bi_valid = 0; + zip_ct_init(); + zip_lm_init(); + + zip_qhead = null; + zip_outcnt = 0; + zip_outoff = 0; + zip_match_available = 0; + + if (zip_compr_level <= 3) { + zip_prev_length = MIN_MATCH - 1; + zip_match_length = 0; + } + else { + zip_match_length = MIN_MATCH - 1; + zip_match_available = 0; + zip_match_available = 0; + } + + zip_complete = false; + }; + + /* ========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ + var zip_deflate_internal = function (buff, off, buff_size) { + var n; + + if (!zip_initflag) { + zip_init_deflate(); + zip_initflag = true; + if (zip_lookahead == 0) { // empty + zip_complete = true; + return 0; + } + } + + if ((n = zip_qcopy(buff, off, buff_size)) == buff_size) + return buff_size; + + if (zip_complete) + return n; + + if (zip_compr_level <= 3) // optimized for speed + zip_deflate_fast(); + else + zip_deflate_better(); + if (zip_lookahead == 0) { + if (zip_match_available != 0) + zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff); + zip_flush_block(1); + zip_complete = true; + } + return n + zip_qcopy(buff, n + off, buff_size - n); + }; + + var zip_qcopy = function (buff, off, buff_size) { + var n, i, j; + + n = 0; + while (zip_qhead != null && n < buff_size) { + i = buff_size - n; + if (i > zip_qhead.len) + i = zip_qhead.len; + for (j = 0; j < i; j++) + buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j]; + + zip_qhead.off += i; + zip_qhead.len -= i; + n += i; + if (zip_qhead.len == 0) { + var p; + p = zip_qhead; + zip_qhead = zip_qhead.next; + zip_reuse_queue(p); + } + } + + if (n == buff_size) + return n; + + if (zip_outoff < zip_outcnt) { + i = buff_size - n; + if (i > zip_outcnt - zip_outoff) + i = zip_outcnt - zip_outoff; + // System.arraycopy(outbuf, outoff, buff, off + n, i); + for (j = 0; j < i; j++) + buff[off + n + j] = zip_outbuf[zip_outoff + j]; + zip_outoff += i; + n += i; + if (zip_outcnt == zip_outoff) + zip_outcnt = zip_outoff = 0; + } + return n; + }; + + /* ========================================================================== + * Allocate the match buffer, initialize the various tables and save the + * location of the internal file attribute (ascii/binary) and method + * (DEFLATE/STORE). + */ + var zip_ct_init = function () { + var n; // iterates over tree elements + var bits; // bit counter + var length; // length value + var code; // code value + var dist; // distance index + + if (zip_static_dtree[0].dl != 0) return; // ct_init already called + + zip_l_desc.dyn_tree = zip_dyn_ltree; + zip_l_desc.static_tree = zip_static_ltree; + zip_l_desc.extra_bits = zip_extra_lbits; + zip_l_desc.extra_base = zip_LITERALS + 1; + zip_l_desc.elems = zip_L_CODES; + zip_l_desc.max_length = zip_MAX_BITS; + zip_l_desc.max_code = 0; + + zip_d_desc.dyn_tree = zip_dyn_dtree; + zip_d_desc.static_tree = zip_static_dtree; + zip_d_desc.extra_bits = zip_extra_dbits; + zip_d_desc.extra_base = 0; + zip_d_desc.elems = zip_D_CODES; + zip_d_desc.max_length = zip_MAX_BITS; + zip_d_desc.max_code = 0; + + zip_bl_desc.dyn_tree = zip_bl_tree; + zip_bl_desc.static_tree = null; + zip_bl_desc.extra_bits = zip_extra_blbits; + zip_bl_desc.extra_base = 0; + zip_bl_desc.elems = zip_BL_CODES; + zip_bl_desc.max_length = zip_MAX_BL_BITS; + zip_bl_desc.max_code = 0; + + // Initialize the mapping length (0..255) -> length code (0..28) + length = 0; + for (code = 0; code < zip_LENGTH_CODES - 1; code++) { + zip_base_length[code] = length; + for (n = 0; n < (1 << zip_extra_lbits[code]); n++) + zip_length_code[length++] = code; + } + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + zip_length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + zip_base_dist[code] = dist; + for (n = 0; n < (1 << zip_extra_dbits[code]); n++) { + zip_dist_code[dist++] = code; + } + } + dist >>= 7; // from now on, all distances are divided by 128 + for (; code < zip_D_CODES; code++) { + zip_base_dist[code] = dist << 7; + for (n = 0; n < (1 << (zip_extra_dbits[code] - 7)); n++) + zip_dist_code[256 + dist++] = code; + } + // Construct the codes of the static literal tree + for (bits = 0; bits <= zip_MAX_BITS; bits++) + zip_bl_count[bits] = 0; + n = 0; + while (n <= 143) { + zip_static_ltree[n++].dl = 8; + zip_bl_count[8]++; + } + while (n <= 255) { + zip_static_ltree[n++].dl = 9; + zip_bl_count[9]++; + } + while (n <= 279) { + zip_static_ltree[n++].dl = 7; + zip_bl_count[7]++; + } + while (n <= 287) { + zip_static_ltree[n++].dl = 8; + zip_bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + zip_gen_codes(zip_static_ltree, zip_L_CODES + 1); + + /* The static distance tree is trivial: */ + for (n = 0; n < zip_D_CODES; n++) { + zip_static_dtree[n].dl = 5; + zip_static_dtree[n].fc = zip_bi_reverse(n, 5); + } + + // Initialize the first block of the first file: + zip_init_block(); + }; + + /* ========================================================================== + * Initialize a new block. + */ + var zip_init_block = function () { + var n; // iterates over tree elements + + // Initialize the trees. + for (n = 0; n < zip_L_CODES; n++) zip_dyn_ltree[n].fc = 0; + for (n = 0; n < zip_D_CODES; n++) zip_dyn_dtree[n].fc = 0; + for (n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0; + + zip_dyn_ltree[zip_END_BLOCK].fc = 1; + zip_opt_len = zip_static_len = 0; + zip_last_lit = zip_last_dist = zip_last_flags = 0; + zip_flags = 0; + zip_flag_bit = 1; + }; + + /* ========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ + var zip_pqdownheap = function (tree, // the tree to restore + k) { // node to move down + var v = zip_heap[k]; + var j = k << 1; // left son of k + + while (j <= zip_heap_len) { + // Set j to the smallest of the two sons: + if (j < zip_heap_len && + zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j])) + j++; + + // Exit if v is smaller than both sons + if (zip_SMALLER(tree, v, zip_heap[j])) + break; + + // Exchange v with the smallest son + zip_heap[k] = zip_heap[j]; + k = j; + + // And continue down the tree, setting j to the left son of k + j <<= 1; + } + zip_heap[k] = v; + }; + + /* ========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ + var zip_gen_bitlen = function (desc) { // the tree descriptor + var tree = desc.dyn_tree; + var extra = desc.extra_bits; + var base = desc.extra_base; + var max_code = desc.max_code; + var max_length = desc.max_length; + var stree = desc.static_tree; + var h; // heap index + var n, m; // iterate over the tree elements + var bits; // bit length + var xbits; // extra bits + var f; // frequency + var overflow = 0; // number of elements with bit length too large + + for (bits = 0; bits <= zip_MAX_BITS; bits++) + zip_bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap + + for (h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) { + n = zip_heap[h]; + bits = tree[tree[n].dl].dl + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n].dl = bits; + // We overwrite tree[n].dl which is no longer needed + + if (n > max_code) + continue; // not a leaf node + + zip_bl_count[bits]++; + xbits = 0; + if (n >= base) + xbits = extra[n - base]; + f = tree[n].fc; + zip_opt_len += f * (bits + xbits); + if (stree != null) + zip_static_len += f * (stree[n].dl + xbits); + } + if (overflow == 0) + return; + + // This happens for example on obj2 and pic of the Calgary corpus + + // Find the first bit length which could increase: + do { + bits = max_length - 1; + while (zip_bl_count[bits] == 0) + bits--; + zip_bl_count[bits]--; // move one leaf down the tree + zip_bl_count[bits + 1] += 2; // move one overflow item as its brother + zip_bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = zip_bl_count[bits]; + while (n != 0) { + m = zip_heap[--h]; + if (m > max_code) + continue; + if (tree[m].dl != bits) { + zip_opt_len += (bits - tree[m].dl) * tree[m].fc; + tree[m].fc = bits; + } + n--; + } + } + }; + + /* ========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ + var zip_gen_codes = function (tree, // the tree to decorate + max_code) { // largest code with non zero frequency + var next_code = new Array(zip_MAX_BITS + 1); // next code value for each bit length + var code = 0; // running code value + var bits; // bit index + var n; // code index + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= zip_MAX_BITS; bits++) { + code = ((code + zip_bl_count[bits - 1]) << 1); + next_code[bits] = code; + } + + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + for (n = 0; n <= max_code; n++) { + var len = tree[n].dl; + if (len == 0) + continue; + // Now reverse the bits + tree[n].fc = zip_bi_reverse(next_code[len]++, len); + } + }; + + /* ========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ + var zip_build_tree = function (desc) { // the tree descriptor + var tree = desc.dyn_tree; + var stree = desc.static_tree; + var elems = desc.elems; + var n, m; // iterate over heap elements + var max_code = -1; // largest code with non zero frequency + var node = elems; // next internal node of the tree + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + zip_heap_len = 0; + zip_heap_max = zip_HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].fc != 0) { + zip_heap[++zip_heap_len] = max_code = n; + zip_depth[n] = 0; + } else + tree[n].dl = 0; + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (zip_heap_len < 2) { + var xnew = zip_heap[++zip_heap_len] = (max_code < 2 ? ++max_code : 0); + tree[xnew].fc = 1; + zip_depth[xnew] = 0; + zip_opt_len--; + if (stree != null) + zip_static_len -= stree[xnew].dl; + // new is 0 or 1 so it does not have extra bits + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = zip_heap_len >> 1; n >= 1; n--) + zip_pqdownheap(tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + do { + n = zip_heap[zip_SMALLEST]; + zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--]; + zip_pqdownheap(tree, zip_SMALLEST); + + m = zip_heap[zip_SMALLEST]; // m = node of next least frequency + + // keep the nodes sorted by frequency + zip_heap[--zip_heap_max] = n; + zip_heap[--zip_heap_max] = m; + + // Create a new node father of n and m + tree[node].fc = tree[n].fc + tree[m].fc; + if (zip_depth[n] > zip_depth[m] + 1) + zip_depth[node] = zip_depth[n]; + else + zip_depth[node] = zip_depth[m] + 1; + tree[n].dl = tree[m].dl = node; + + // and insert the new node in the heap + zip_heap[zip_SMALLEST] = node++; + zip_pqdownheap(tree, zip_SMALLEST); + + } while (zip_heap_len >= 2); + + zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + zip_gen_bitlen(desc); + + // The field len is now set, we can generate the bit codes + zip_gen_codes(tree, max_code); + }; + + /* ========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. Updates opt_len to take into account the repeat + * counts. (The contribution of the bit length codes will be added later + * during the construction of bl_tree.) + */ + var zip_scan_tree = function (tree,// the tree to be scanned + max_code) { // and its largest code of non zero frequency + var n; // iterates over all tree elements + var prevlen = -1; // last emitted length + var curlen; // length of current code + var nextlen = tree[0].dl; // length of next code + var count = 0; // repeat count of the current code + var max_count = 7; // max repeat count + var min_count = 4; // min repeat count + + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } + tree[max_code + 1].dl = 0xffff; // guard + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[n + 1].dl; + if (++count < max_count && curlen == nextlen) + continue; + else if (count < min_count) + zip_bl_tree[curlen].fc += count; + else if (curlen != 0) { + if (curlen != prevlen) + zip_bl_tree[curlen].fc++; + zip_bl_tree[zip_REP_3_6].fc++; + } else if (count <= 10) + zip_bl_tree[zip_REPZ_3_10].fc++; + else + zip_bl_tree[zip_REPZ_11_138].fc++; + count = 0; + prevlen = curlen; + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } else if (curlen == nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + }; + + /* ========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ + var zip_send_tree = function (tree, // the tree to be scanned + max_code) { // and its largest code of non zero frequency + var n; // iterates over all tree elements + var prevlen = -1; // last emitted length + var curlen; // length of current code + var nextlen = tree[0].dl; // length of next code + var count = 0; // repeat count of the current code + var max_count = 7; // max repeat count + var min_count = 4; // min repeat count + + /* tree[max_code+1].dl = -1; */ + /* guard already set */ + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[n + 1].dl; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { + zip_SEND_CODE(curlen, zip_bl_tree); + } while (--count != 0); + } else if (curlen != 0) { + if (curlen != prevlen) { + zip_SEND_CODE(curlen, zip_bl_tree); + count--; + } + // Assert(count >= 3 && count <= 6, " 3_6?"); + zip_SEND_CODE(zip_REP_3_6, zip_bl_tree); + zip_send_bits(count - 3, 2); + } else if (count <= 10) { + zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree); + zip_send_bits(count - 3, 3); + } else { + zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree); + zip_send_bits(count - 11, 7); + } + count = 0; + prevlen = curlen; + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } else if (curlen == nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + }; + + /* ========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ + var zip_build_bl_tree = function () { + var max_blindex; // index of last bit length code of non zero freq + + // Determine the bit length frequencies for literal and distance trees + zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code); + zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code); + + // Build the bit length tree: + zip_build_tree(zip_bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = zip_BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (zip_bl_tree[zip_bl_order[max_blindex]].dl != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + zip_opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + return max_blindex; + }; + + /* ========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ + var zip_send_all_trees = function (lcodes, dcodes, blcodes) { // number of codes for each tree + var rank; // index in bl_order + zip_send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt + zip_send_bits(dcodes - 1, 5); + zip_send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt + for (rank = 0; rank < blcodes; rank++) { + zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3); + } + + // send the literal tree + zip_send_tree(zip_dyn_ltree, lcodes - 1); + + // send the distance tree + zip_send_tree(zip_dyn_dtree, dcodes - 1); + }; + + /* ========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ + var zip_flush_block = function (eof) { // true if this is the last block for a file + var opt_lenb, static_lenb; // opt_len and static_len in bytes + var max_blindex; // index of last bit length code of non zero freq + var stored_len; // length of input block + + stored_len = zip_strstart - zip_block_start; + zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items + + // Construct the literal and distance trees + zip_build_tree(zip_l_desc); + zip_build_tree(zip_d_desc); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = zip_build_bl_tree(); + + // Determine the best encoding. Compute first the block length in bytes + opt_lenb = (zip_opt_len + 3 + 7) >> 3; + static_lenb = (zip_static_len + 3 + 7) >> 3; + if (static_lenb <= opt_lenb) + opt_lenb = static_lenb; + if (stored_len + 4 <= opt_lenb // 4: two words for the lengths + && zip_block_start >= 0) { + var i; + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + zip_send_bits((zip_STORED_BLOCK << 1) + eof, 3); + /* send block type */ + zip_bi_windup(); + /* align on byte boundary */ + zip_put_short(stored_len); + zip_put_short(~stored_len); + + // copy block + for (i = 0; i < stored_len; i++) + zip_put_byte(zip_window[zip_block_start + i]); + + } else if (static_lenb == opt_lenb) { + zip_send_bits((zip_STATIC_TREES << 1) + eof, 3); + zip_compress_block(zip_static_ltree, zip_static_dtree); + } else { + zip_send_bits((zip_DYN_TREES << 1) + eof, 3); + zip_send_all_trees(zip_l_desc.max_code + 1, + zip_d_desc.max_code + 1, + max_blindex + 1); + zip_compress_block(zip_dyn_ltree, zip_dyn_dtree); + } + + zip_init_block(); + + if (eof != 0) + zip_bi_windup(); + }; + + /* ========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ + var zip_ct_tally = function (dist, // distance of matched string + lc) { // match length-MIN_MATCH or unmatched char (if dist==0) + zip_l_buf[zip_last_lit++] = lc; + if (dist == 0) { + // lc is the unmatched char + zip_dyn_ltree[lc].fc++; + } else { + // Here, lc is the match length - MIN_MATCH + dist--; // dist = match distance - 1 + zip_dyn_ltree[zip_length_code[lc] + zip_LITERALS + 1].fc++; + zip_dyn_dtree[zip_D_CODE(dist)].fc++; + + zip_d_buf[zip_last_dist++] = dist; + zip_flags |= zip_flag_bit; + } + zip_flag_bit <<= 1; + + // Output the flags if they fill a byte + if ((zip_last_lit & 7) == 0) { + zip_flag_buf[zip_last_flags++] = zip_flags; + zip_flags = 0; + zip_flag_bit = 1; + } + // Try to guess if it is profitable to stop the current block here + if (zip_compr_level > 2 && (zip_last_lit & 0xfff) == 0) { + // Compute an upper bound for the compressed length + var out_length = zip_last_lit * 8; + var in_length = zip_strstart - zip_block_start; + var dcode; + + for (dcode = 0; dcode < zip_D_CODES; dcode++) { + out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]); + } + out_length >>= 3; + if (zip_last_dist < parseInt(zip_last_lit / 2) && + out_length < parseInt(in_length / 2)) + return true; + } + return (zip_last_lit == LIT_BUFSIZE - 1 || + zip_last_dist == zip_DIST_BUFSIZE); + /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ + }; + + /* ========================================================================== + * Send the block data compressed using the given Huffman trees + */ + var zip_compress_block = function (ltree, // literal tree + dtree) { // distance tree + var dist; // distance of matched string + var lc; // match length or unmatched char (if dist == 0) + var lx = 0; // running index in l_buf + var dx = 0; // running index in d_buf + var fx = 0; // running index in flag_buf + var flag = 0; // current flags + var code; // the code to send + var extra; // number of extra bits to send + + if (zip_last_lit != 0) do { + if ((lx & 7) == 0) + flag = zip_flag_buf[fx++]; + lc = zip_l_buf[lx++] & 0xff; + if ((flag & 1) == 0) { + zip_SEND_CODE(lc, ltree); + /* send a literal byte */ + } else { + // Here, lc is the match length - MIN_MATCH + code = zip_length_code[lc]; + zip_SEND_CODE(code + zip_LITERALS + 1, ltree); // send the length code + extra = zip_extra_lbits[code]; + if (extra != 0) { + lc -= zip_base_length[code]; + zip_send_bits(lc, extra); // send the extra length bits + } + dist = zip_d_buf[dx++]; + // Here, dist is the match distance - 1 + code = zip_D_CODE(dist); + zip_SEND_CODE(code, dtree); // send the distance code + extra = zip_extra_dbits[code]; + if (extra != 0) { + dist -= zip_base_dist[code]; + zip_send_bits(dist, extra); // send the extra distance bits + } + } // literal or match pair ? + flag >>= 1; + } while (lx < zip_last_lit); + + zip_SEND_CODE(zip_END_BLOCK, ltree); + }; + + /* ========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ + var zip_Buf_size = 16; // bit size of bi_buf + var zip_send_bits = function (value, // value to send + length) { // number of bits + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (zip_bi_valid > zip_Buf_size - length) { + zip_bi_buf |= (value << zip_bi_valid); + zip_put_short(zip_bi_buf); + zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid)); + zip_bi_valid += length - zip_Buf_size; + } else { + zip_bi_buf |= value << zip_bi_valid; + zip_bi_valid += length; + } + }; + + /* ========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ + var zip_bi_reverse = function (code, // the value to invert + len) { // its bit length + var res = 0; + do { + res |= code & 1; + code >>= 1; + res <<= 1; + } while (--len > 0); + return res >> 1; + }; + + /* ========================================================================== + * Write out any remaining bits in an incomplete byte. + */ + var zip_bi_windup = function () { + if (zip_bi_valid > 8) { + zip_put_short(zip_bi_buf); + } else if (zip_bi_valid > 0) { + zip_put_byte(zip_bi_buf); + } + zip_bi_buf = 0; + zip_bi_valid = 0; + }; + + var zip_qoutbuf = function () { + if (zip_outcnt != 0) { + var q, i; + q = zip_new_queue(); + if (zip_qhead == null) + zip_qhead = zip_qtail = q; + else + zip_qtail = zip_qtail.next = q; + q.len = zip_outcnt - zip_outoff; + for (i = 0; i < q.len; i++) + q.ptr[i] = zip_outbuf[zip_outoff + i]; + zip_outcnt = zip_outoff = 0; + } + }; + + function deflate(buffData, level) { + zip_deflate_data = buffData; + zip_deflate_pos = 0; + zip_deflate_start(level); + + var buff = new Array(1024), + pages = [], + totalSize = 0, + i; + + for (i = 0; i < 1024; i++) buff[i] = 0; + while ((i = zip_deflate_internal(buff, 0, buff.length)) > 0) { + var buf = new Buffer(buff.slice(0, i)); + pages.push(buf); + totalSize += buf.length; + } + + if (pages.length == 1) { + return pages[0]; + } + + var result = new Buffer(totalSize), + index = 0; + + for (i = 0; i < pages.length; i++) { + pages[i].copy(result, index); + index = index + pages[i].length + } + + return result; + } + + return { + deflate: function () { + return deflate(inbuf, 8); + } + } +} + +module.exports = function (/*Buffer*/inbuf) { + + var zlib = require("zlib"); + + return { + deflate: function () { + return new JSDeflater(inbuf).deflate(); + }, + + deflateAsync: function (/*Function*/callback) { + var tmp = zlib.createDeflateRaw({chunkSize:(parseInt(inbuf.length / 1024) + 1)*1024}), + parts = [], total = 0; + tmp.on('data', function(data) { + parts.push(data); + total += data.length; + }); + tmp.on('end', function() { + var buf = new Buffer(total), written = 0; + buf.fill(0); + + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + part.copy(buf, written); + written += part.length; + } + callback && callback(buf); + }); + tmp.end(inbuf); + } + } +}; diff --git a/www/node_modules/adm-zip/methods/index.js b/www/node_modules/adm-zip/methods/index.js new file mode 100644 index 0000000..ddcbba6 --- /dev/null +++ b/www/node_modules/adm-zip/methods/index.js @@ -0,0 +1,2 @@ +exports.Deflater = require("./deflater"); +exports.Inflater = require("./inflater"); \ No newline at end of file diff --git a/www/node_modules/adm-zip/methods/inflater.js b/www/node_modules/adm-zip/methods/inflater.js new file mode 100644 index 0000000..59536c9 --- /dev/null +++ b/www/node_modules/adm-zip/methods/inflater.js @@ -0,0 +1,448 @@ +var Buffer = require("buffer").Buffer; + +function JSInflater(/*Buffer*/input) { + + var WSIZE = 0x8000, + slide = new Buffer(0x10000), + windowPos = 0, + fixedTableList = null, + fixedTableDist, + fixedLookup, + bitBuf = 0, + bitLen = 0, + method = -1, + eof = false, + copyLen = 0, + copyDist = 0, + tblList, tblDist, bitList, bitdist, + + inputPosition = 0, + + MASK_BITS = [0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff], + LENS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], + LEXT = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99], + DISTS = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], + DEXT = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], + BITORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + + function HuffTable(clen, cnum, cval, blist, elist, lookupm) { + + this.status = 0; + this.root = null; + this.maxbit = 0; + + var el, f, tail, + offsets = [], + countTbl = [], + sTbl = [], + values = [], + tentry = {extra: 0, bitcnt: 0, lbase: 0, next: null}; + + tail = this.root = null; + for(var i = 0; i < 0x11; i++) { countTbl[i] = 0; sTbl[i] = 0; offsets[i] = 0; } + for(i = 0; i < 0x120; i++) values[i] = 0; + + el = cnum > 256 ? clen[256] : 16; + + var pidx = -1; + while (++pidx < cnum) countTbl[clen[pidx]]++; + + if(countTbl[0] == cnum) return; + + for(var j = 1; j <= 16; j++) if(countTbl[j] != 0) break; + var bitLen = j; + for(i = 16; i != 0; i--) if(countTbl[i] != 0) break; + var maxLen = i; + + lookupm < j && (lookupm = j); + + var dCodes = 1 << j; + for(; j < i; j++, dCodes <<= 1) + if((dCodes -= countTbl[j]) < 0) { + this.status = 2; + this.maxbit = lookupm; + return; + } + + if((dCodes -= countTbl[i]) < 0) { + this.status = 2; + this.maxbit = lookupm; + return; + } + + countTbl[i] += dCodes; + offsets[1] = j = 0; + pidx = 1; + var xp = 2; + while(--i > 0) offsets[xp++] = (j += countTbl[pidx++]); + pidx = 0; + i = 0; + do { + (j = clen[pidx++]) && (values[offsets[j]++] = i); + } while(++i < cnum); + cnum = offsets[maxLen]; + offsets[0] = i = 0; + pidx = 0; + + var level = -1, + w = sTbl[0] = 0, + cnode = null, + tblCnt = 0, + tblStack = []; + + for(; bitLen <= maxLen; bitLen++) { + var kccnt = countTbl[bitLen]; + while(kccnt-- > 0) { + while(bitLen > w + sTbl[1 + level]) { + w += sTbl[1 + level]; + level++; + tblCnt = (tblCnt = maxLen - w) > lookupm ? lookupm : tblCnt; + if((f = 1 << (j = bitLen - w)) > kccnt + 1) { + f -= kccnt + 1; + xp = bitLen; + while(++j < tblCnt) { + if((f <<= 1) <= countTbl[++xp]) break; + f -= countTbl[xp]; + } + } + if(w + j > el && w < el) j = el - w; + tblCnt = 1 << j; + sTbl[1 + level] = j; + cnode = []; + while (cnode.length < tblCnt) cnode.push({extra: 0, bitcnt: 0, lbase: 0, next: null}); + if (tail == null) { + tail = this.root = {next:null, list:null}; + } else { + tail = tail.next = {next:null, list:null} + } + tail.next = null; + tail.list = cnode; + + tblStack[level] = cnode; + + if(level > 0) { + offsets[level] = i; + tentry.bitcnt = sTbl[level]; + tentry.extra = 16 + j; + tentry.next = cnode; + j = (i & ((1 << w) - 1)) >> (w - sTbl[level]); + + tblStack[level-1][j].extra = tentry.extra; + tblStack[level-1][j].bitcnt = tentry.bitcnt; + tblStack[level-1][j].lbase = tentry.lbase; + tblStack[level-1][j].next = tentry.next; + } + } + tentry.bitcnt = bitLen - w; + if(pidx >= cnum) + tentry.extra = 99; + else if(values[pidx] < cval) { + tentry.extra = (values[pidx] < 256 ? 16 : 15); + tentry.lbase = values[pidx++]; + } else { + tentry.extra = elist[values[pidx] - cval]; + tentry.lbase = blist[values[pidx++] - cval]; + } + + f = 1 << (bitLen - w); + for(j = i >> w; j < tblCnt; j += f) { + cnode[j].extra = tentry.extra; + cnode[j].bitcnt = tentry.bitcnt; + cnode[j].lbase = tentry.lbase; + cnode[j].next = tentry.next; + } + for(j = 1 << (bitLen - 1); (i & j) != 0; j >>= 1) + i ^= j; + i ^= j; + while((i & ((1 << w) - 1)) != offsets[level]) { + w -= sTbl[level]; + level--; + } + } + } + + this.maxbit = sTbl[1]; + this.status = ((dCodes != 0 && maxLen != 1) ? 1 : 0); + } + + function addBits(n) { + while(bitLen < n) { + bitBuf |= input[inputPosition++] << bitLen; + bitLen += 8; + } + return bitBuf; + } + + function cutBits(n) { + bitLen -= n; + return bitBuf >>= n; + } + + function maskBits(n) { + while(bitLen < n) { + bitBuf |= input[inputPosition++] << bitLen; + bitLen += 8; + } + var res = bitBuf & MASK_BITS[n]; + bitBuf >>= n; + bitLen -= n; + return res; + } + + function codes(buff, off, size) { + var e, t; + if(size == 0) return 0; + + var n = 0; + for(;;) { + t = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; + e = t.extra; + while(e > 16) { + if(e == 99) return -1; + cutBits(t.bitcnt); + e -= 16; + t = t.next[addBits(e) & MASK_BITS[e]]; + e = t.extra; + } + cutBits(t.bitcnt); + if(e == 16) { + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = t.lbase; + if(n == size) return size; + continue; + } + if(e == 15) break; + + copyLen = t.lbase + maskBits(e); + t = tblDist.list[addBits(bitdist) & MASK_BITS[bitdist]]; + e = t.extra; + + while(e > 16) { + if(e == 99) return -1; + cutBits(t.bitcnt); + e -= 16; + t = t.next[addBits(e) & MASK_BITS[e]]; + e = t.extra + } + cutBits(t.bitcnt); + copyDist = windowPos - t.lbase - maskBits(e); + + while(copyLen > 0 && n < size) { + copyLen--; + copyDist &= WSIZE - 1; + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = slide[copyDist++]; + } + + if(n == size) return size; + } + + method = -1; // done + return n; + } + + function stored(buff, off, size) { + cutBits(bitLen & 7); + var n = maskBits(0x10); + if(n != ((~maskBits(0x10)) & 0xffff)) return -1; + copyLen = n; + + n = 0; + while(copyLen > 0 && n < size) { + copyLen--; + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = maskBits(8); + } + + if(copyLen == 0) method = -1; + return n; + } + + function fixed(buff, off, size) { + var fixed_bd = 0; + if(fixedTableList == null) { + var lengths = []; + + for(var symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8; + for(; symbol < 256; symbol++) lengths[symbol] = 9; + for(; symbol < 280; symbol++) lengths[symbol] = 7; + for(; symbol < 288; symbol++) lengths[symbol] = 8; + + fixedLookup = 7; + + var htbl = new HuffTable(lengths, 288, 257, LENS, LEXT, fixedLookup); + + if(htbl.status != 0) return -1; + + fixedTableList = htbl.root; + fixedLookup = htbl.maxbit; + + for(symbol = 0; symbol < 30; symbol++) lengths[symbol] = 5; + fixed_bd = 5; + + htbl = new HuffTable(lengths, 30, 0, DISTS, DEXT, fixed_bd); + if(htbl.status > 1) { + fixedTableList = null; + return -1; + } + fixedTableDist = htbl.root; + fixed_bd = htbl.maxbit; + } + + tblList = fixedTableList; + tblDist = fixedTableDist; + bitList = fixedLookup; + bitdist = fixed_bd; + return codes(buff, off, size); + } + + function dynamic(buff, off, size) { + var ll = new Array(0x023C); + + for (var m = 0; m < 0x023C; m++) ll[m] = 0; + + var llencnt = 257 + maskBits(5), + dcodescnt = 1 + maskBits(5), + bitlencnt = 4 + maskBits(4); + + if(llencnt > 286 || dcodescnt > 30) return -1; + + for(var j = 0; j < bitlencnt; j++) ll[BITORDER[j]] = maskBits(3); + for(; j < 19; j++) ll[BITORDER[j]] = 0; + + // build decoding table for trees--single level, 7 bit lookup + bitList = 7; + var hufTable = new HuffTable(ll, 19, 19, null, null, bitList); + if(hufTable.status != 0) + return -1; // incomplete code set + + tblList = hufTable.root; + bitList = hufTable.maxbit; + var lencnt = llencnt + dcodescnt, + i = 0, + lastLen = 0; + while(i < lencnt) { + var hufLcode = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; + j = hufLcode.bitcnt; + cutBits(j); + j = hufLcode.lbase; + if(j < 16) + ll[i++] = lastLen = j; + else if(j == 16) { + j = 3 + maskBits(2); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = lastLen; + } else if(j == 17) { + j = 3 + maskBits(3); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = 0; + lastLen = 0; + } else { + j = 11 + maskBits(7); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = 0; + lastLen = 0; + } + } + bitList = 9; + hufTable = new HuffTable(ll, llencnt, 257, LENS, LEXT, bitList); + bitList == 0 && (hufTable.status = 1); + + if (hufTable.status != 0) return -1; + + tblList = hufTable.root; + bitList = hufTable.maxbit; + + for(i = 0; i < dcodescnt; i++) ll[i] = ll[i + llencnt]; + bitdist = 6; + hufTable = new HuffTable(ll, dcodescnt, 0, DISTS, DEXT, bitdist); + tblDist = hufTable.root; + bitdist = hufTable.maxbit; + + if((bitdist == 0 && llencnt > 257) || hufTable.status != 0) return -1; + + return codes(buff, off, size); + } + + return { + inflate : function(/*Buffer*/outputBuffer) { + tblList = null; + + var size = outputBuffer.length, + offset = 0, i; + + while(offset < size) { + if(eof && method == -1) return; + if(copyLen > 0) { + if(method != 0) { + while(copyLen > 0 && offset < size) { + copyLen--; + copyDist &= WSIZE - 1; + windowPos &= WSIZE - 1; + outputBuffer[offset++] = (slide[windowPos++] = slide[copyDist++]); + } + } else { + while(copyLen > 0 && offset < size) { + copyLen--; + windowPos &= WSIZE - 1; + outputBuffer[offset++] = (slide[windowPos++] = maskBits(8)); + } + copyLen == 0 && (method = -1); // done + } + if (offset == size) return; + } + + if(method == -1) { + if(eof) break; + eof = maskBits(1) != 0; + method = maskBits(2); + tblList = null; + copyLen = 0; + } + switch(method) { + case 0: i = stored(outputBuffer, offset, size - offset); break; + case 1: i = tblList != null ? codes(outputBuffer, offset, size - offset) : fixed(outputBuffer, offset, size - offset); break; + case 2: i = tblList != null ? codes(outputBuffer, offset, size - offset) : dynamic(outputBuffer, offset, size - offset); break; + default: i = -1; break; + } + + if(i == -1) return; + offset += i; + } + } + }; +} + +module.exports = function(/*Buffer*/inbuf) { + var zlib = require("zlib"); + return { + inflateAsync : function(/*Function*/callback) { + var tmp = zlib.createInflateRaw(), + parts = [], total = 0; + tmp.on('data', function(data) { + parts.push(data); + total += data.length; + }); + tmp.on('end', function() { + var buf = new Buffer(total), written = 0; + buf.fill(0); + + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + part.copy(buf, written); + written += part.length; + } + callback && callback(buf); + }); + tmp.end(inbuf) + }, + + inflate : function(/*Buffer*/outputBuffer) { + var x = { + x: new JSInflater(inbuf) + }; + x.x.inflate(outputBuffer); + delete(x.x); + } + } +}; diff --git a/www/node_modules/adm-zip/package.json b/www/node_modules/adm-zip/package.json new file mode 100644 index 0000000..d1f56d4 --- /dev/null +++ b/www/node_modules/adm-zip/package.json @@ -0,0 +1,83 @@ +{ + "_args": [ + [ + "adm-zip@0.4.4", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver" + ] + ], + "_from": "adm-zip@0.4.4", + "_id": "adm-zip@0.4.4", + "_inCache": true, + "_installable": true, + "_location": "/adm-zip", + "_npmUser": { + "email": "iacob.campia@gmail.com", + "name": "cthackers" + }, + "_npmVersion": "1.3.24", + "_phantomChildren": {}, + "_requested": { + "name": "adm-zip", + "raw": "adm-zip@0.4.4", + "rawSpec": "0.4.4", + "scope": null, + "spec": "0.4.4", + "type": "version" + }, + "_requiredBy": [ + "/selenium-webdriver" + ], + "_resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", + "_shasum": "a61ed5ae6905c3aea58b3a657d25033091052736", + "_shrinkwrap": null, + "_spec": "adm-zip@0.4.4", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver", + "author": { + "email": "sy@another-d-mention.ro", + "name": "Nasca Iacob", + "url": "https://github.com/cthackers" + }, + "bugs": { + "email": "sy@another-d-mention.ro", + "url": "https://github.com/cthackers/adm-zip/issues" + }, + "dependencies": {}, + "description": "A Javascript implementation of zip for nodejs. Allows user to create or extract zip files both in memory or to/from disk", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "a61ed5ae6905c3aea58b3a657d25033091052736", + "tarball": "http://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz" + }, + "engines": { + "node": ">=0.3.0" + }, + "homepage": "http://github.com/cthackers/adm-zip", + "keywords": [ + "zip", + "methods", + "archive", + "unzip" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/cthackers/adm-zip/master/MIT-LICENSE.txt" + } + ], + "main": "adm-zip.js", + "maintainers": [ + { + "email": "iacob.campia@gmail.com", + "name": "cthackers" + } + ], + "name": "adm-zip", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/cthackers/adm-zip.git" + }, + "version": "0.4.4" +} diff --git a/www/node_modules/adm-zip/test/assets/attributes_test.zip b/www/node_modules/adm-zip/test/assets/attributes_test.zip new file mode 100644 index 0000000000000000000000000000000000000000..d57bfc075800e3f49b0a3e0ceca9a199d82c4c7f GIT binary patch literal 4189 zcmWIWW@h1H00FMbOb0LnN(cby#FCPt%%swi)Z%y`F3}HwtL8vcErLaLVsQ!{9hx|F z_@$OBgrruKD7fS&m*%GCmFSgJlprkrS%Kh!4ktSn++dSWwfX5n<3HEoL1F5d!{YZ9ZQq4O_y1vGVZ?B zJ#^AQp|`wthxz7%5Ba3t$7V}EX+F30^i`jQoJ+3XzF6@?jE#Brug)7a@vc^vdnV3p zsCuuv&L)dM*-GjhFU3~#KIo!)1&XS;j#R)5x}^WThE6#P&OS(!$pS}6lG<%w~-2i|^Ob$*)stiqPfm3lm-Z$$!M+Me_IWcT1XIJ0*Zx|n7|2W|ETsxzq zj#mOSe`*EIJJfdd$Gsy3B36^xc`X)3tn^nXKX6L;k5H-<^Z!`Qxa$g`DqULQGTDoK zJ~?Zhvds|;_u}2D(c%`Q+sHCMr0Kd#Si#hkA1Tojxof)?&%K~p_-+Xkn`m&9O8Xqm z6@05EnY#ZJ$@C6zw!0N@6cre?nemla=Pi^Cl@q{+43f zW#(?oJtrR|p>=YmMv_P5!EZILo+*KXy|#A_8a@tDvTciB)T*QDrsTc$gJiPTQu_t& zfuAL22$|}pEKd=1-{R+TVk%3aYW;=_s~(!%V+3U) z?1@s3m_!+0l$w~5pO;fPnmR{QCp}ZAI{wr-nk+{P&4DO12_(zn{M=Mn6J)e5AFa!& zU6(U5i7?=5xvKz6Ob`II;Xwes9nZy}02XItkYL!5|8C>gzh@X>w1M9C*&u#^H^K(Y z);_Wg*jf*uwm-5h1>LM0K&Haz3BqA32-%{^0J8<;+5{j*_Xo%pto;RiR>Pct>_N<4 z1+vx4u~?1T$3V94z`N1~Ag`g*$o66OL}2!TqUG-Wsog)=1&Ef@>M>m5khS34utU#XtM+<%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{NuAx$pN{9*kVW`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ymsIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`0xvl=zcl#0*)aeh#u_PJe%b694AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V literal 0 HcmV?d00001 diff --git a/www/node_modules/adm-zip/test/assets/fastest.zip b/www/node_modules/adm-zip/test/assets/fastest.zip new file mode 100644 index 0000000000000000000000000000000000000000..f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a GIT binary patch literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{NuAx$pN{9*kVW`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ymsIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`0xvl=zcl#0*)aeh#u_PJe%b694AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V literal 0 HcmV?d00001 diff --git a/www/node_modules/adm-zip/test/assets/linux_arc.zip b/www/node_modules/adm-zip/test/assets/linux_arc.zip new file mode 100644 index 0000000000000000000000000000000000000000..188eccbe8bdb2b5b288857de8a397b77ff8e7414 GIT binary patch literal 415 zcmWIWW@Zs#U|`^2P@7ZZFx{>BaWati9*FrEWEe_Pi%axDgkExfURr1fCj+yAMzOy( z5SLbPGcdBeU}j(d6I0I|@QcA+THb;_774De=Tl4Hi@R|&9D zj6iZrBZ!Iab5@AY(R>Xt6PKePW->4cF#L5~4Kp(|1ZWhb$~`W1-7 F004HEX6gU{ literal 0 HcmV?d00001 diff --git a/www/node_modules/adm-zip/test/assets/maximum.zip b/www/node_modules/adm-zip/test/assets/maximum.zip new file mode 100644 index 0000000000000000000000000000000000000000..86a8ec776107c075ce2c7f803472aa97dc25cbf7 GIT binary patch literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(yMz9sgOW(_5XqZ~qRqG+=fSD%&BaXj!8_Fg-RYh z!HeWd`ApTHdNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr literal 0 HcmV?d00001 diff --git a/www/node_modules/adm-zip/test/assets/normal.zip b/www/node_modules/adm-zip/test/assets/normal.zip new file mode 100644 index 0000000000000000000000000000000000000000..b4602c94ee000ee54c71c9302b9db956b3fd9f0e GIT binary patch literal 4170 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPvB~f#DxB1A{7ljTxCK zDXDoNXQu|9?VD{NuAx$pN{9*kVW@$~4X$#pJL>1_46YY#n?i+b*}Jo-uVy^_v)ZUoP&g=ls%;9f#N2_1;tU*kv)*ZNBCl z-}UVu)+enwT{LHlbnuJP1$KIJ-FhO{rpj7Rex&JGnEG-WWqgs{^slshzT@je^A-Oi zCUQ@GopEk{TH)oB8*WIdh93FC7A_`Qzw%tNY9D{vtTUpE7rxwiU2)>?c`8EDZ!i7{ zGxY9Z-~2JdG-8MRgHO9&ZGL*JY}SJna@@hTbt((L^dvX$`CL(P*RR0P?8RU4&%9rY zxp?oNvK17GVBY#bUT3l78jt4ppVs(H&ELHQu{H+UonPXJe ztl@Uscx;vL#?ujB`Ld6M#yB1HQkxi3}R?!ts-ccvbLyk&a;IDC*Jb4jE5a-Q>)q;Nxwq0jG zc(0h#Qs1cSsHtmuO6&y%QRiH)L#ITHf+m$q1RuVDn=hXZE~=bjfG!@G5q2Qp>W>+aV+kSs;^%VS4^2Aa^kAO zkIO&r{bPV-U(8ggM@*`WFG@{J$0osl=zcl#0*)a{tU8ZPJe%b694ABQdw$|a`!2=*a8asUjTMwi0S*r)PRvBpRTVVGKJ@p{@5n?S$BNv{o}|uL!iihYhd&$gLP`7AvNH2U`rIiL+P%Xt4?>UW<{dDQp(QA{s^q Vc(Ve1!oa`Wk(r-b2E=Vnm2Q0iJ5-rM<2kDhpf=eLwvlT`|@htI1E^_ zCf>_SRLS$?eMd zu|R=g!WhIu7>xX6pDB>V;77-Bz>*Xd;(q4yh)4V2!yrC5mT_h_LNjSR%ntp8;p71P zG>r$`M|%)VbM0ruqs*o7YBpl9=}t8^ZwN@h{7~i*T4PW=fhw`M^1~4N zY??6S@<^tkA{>lv(oZv7c)V6{Ls_h45yn+j;}*pBA9U^%khu?=0rG2Lt!-KK8tKppi=%L7C2 z=pGvNEFj?2l&+y(3p$$9XrpDdt{b|yr^qecGs$MlazF)Jbv(V%HB<-eu47xShWI9$ zHFdM)AVuqFrdLBMj)8UyZ@_JrgWkPT1O+OXKJ|>O0`JPY(;PiC9I1<7rsDKQw_9*%VW+hU+tveEf$d4 z(-e@~3G;(E3XiKwQdN?wl2nxhi-xpVNv^N2BvlEiHY3$$q}q&VYc?bQQ9{yq%x1^1 z>O7-Bb)Eq_tySll|KE9Liv>Q$8~*FMWBg?!;oexFlTb+if!d3y)1#W;wvw7*qGAKX3v z-NPq8Y!v81meHrXU}f~zOVIN@u`=)e?~^ZycjnDJ#6p%6db)E~@My_?S+P~Z!>4qKaHUqS5W=hw!VW9Lr!%lO~8e+hme*YU5<_*aqt^K)zY w<+H&u@KyG=02lJ%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(yMz9sgOW(_5XqZ~qRqG+=fSD%&BaXj!8_Fg-RYh z!HeWd`ApTHdNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr literal 0 HcmV?d00001 diff --git a/www/node_modules/adm-zip/test/index.js b/www/node_modules/adm-zip/test/index.js new file mode 100644 index 0000000..70acb51 --- /dev/null +++ b/www/node_modules/adm-zip/test/index.js @@ -0,0 +1,5 @@ +var Attr = require("../util").FileAttr, + Zip = require("../adm-zip"), + fs = require("fs"); + +//zip.addLocalFile("./test/readonly.txt"); diff --git a/www/node_modules/adm-zip/util/constants.js b/www/node_modules/adm-zip/util/constants.js new file mode 100644 index 0000000..0548054 --- /dev/null +++ b/www/node_modules/adm-zip/util/constants.js @@ -0,0 +1,84 @@ +module.exports = { + /* The local file header */ + LOCHDR : 30, // LOC header size + LOCSIG : 0x04034b50, // "PK\003\004" + LOCVER : 4, // version needed to extract + LOCFLG : 6, // general purpose bit flag + LOCHOW : 8, // compression method + LOCTIM : 10, // modification time (2 bytes time, 2 bytes date) + LOCCRC : 14, // uncompressed file crc-32 value + LOCSIZ : 18, // compressed size + LOCLEN : 22, // uncompressed size + LOCNAM : 26, // filename length + LOCEXT : 28, // extra field length + + /* The Data descriptor */ + EXTSIG : 0x08074b50, // "PK\007\008" + EXTHDR : 16, // EXT header size + EXTCRC : 4, // uncompressed file crc-32 value + EXTSIZ : 8, // compressed size + EXTLEN : 12, // uncompressed size + + /* The central directory file header */ + CENHDR : 46, // CEN header size + CENSIG : 0x02014b50, // "PK\001\002" + CENVEM : 4, // version made by + CENVER : 6, // version needed to extract + CENFLG : 8, // encrypt, decrypt flags + CENHOW : 10, // compression method + CENTIM : 12, // modification time (2 bytes time, 2 bytes date) + CENCRC : 16, // uncompressed file crc-32 value + CENSIZ : 20, // compressed size + CENLEN : 24, // uncompressed size + CENNAM : 28, // filename length + CENEXT : 30, // extra field length + CENCOM : 32, // file comment length + CENDSK : 34, // volume number start + CENATT : 36, // internal file attributes + CENATX : 38, // external file attributes (host system dependent) + CENOFF : 42, // LOC header offset + + /* The entries in the end of central directory */ + ENDHDR : 22, // END header size + ENDSIG : 0x06054b50, // "PK\005\006" + ENDSUB : 8, // number of entries on this disk + ENDTOT : 10, // total number of entries + ENDSIZ : 12, // central directory size in bytes + ENDOFF : 16, // offset of first CEN header + ENDCOM : 20, // zip file comment length + + /* Compression methods */ + STORED : 0, // no compression + SHRUNK : 1, // shrunk + REDUCED1 : 2, // reduced with compression factor 1 + REDUCED2 : 3, // reduced with compression factor 2 + REDUCED3 : 4, // reduced with compression factor 3 + REDUCED4 : 5, // reduced with compression factor 4 + IMPLODED : 6, // imploded + // 7 reserved + DEFLATED : 8, // deflated + ENHANCED_DEFLATED: 9, // enhanced deflated + PKWARE : 10,// PKWare DCL imploded + // 11 reserved + BZIP2 : 12, // compressed using BZIP2 + // 13 reserved + LZMA : 14, // LZMA + // 15-17 reserved + IBM_TERSE : 18, // compressed using IBM TERSE + IBM_LZ77 : 19, //IBM LZ77 z + + /* General purpose bit flag */ + FLG_ENC : 0, // encripted file + FLG_COMP1 : 1, // compression option + FLG_COMP2 : 2, // compression option + FLG_DESC : 4, // data descriptor + FLG_ENH : 8, // enhanced deflation + FLG_STR : 16, // strong encryption + FLG_LNG : 1024, // language encoding + FLG_MSK : 4096, // mask header values + + /* Load type */ + FILE : 0, + BUFFER : 1, + NONE : 2 +}; diff --git a/www/node_modules/adm-zip/util/errors.js b/www/node_modules/adm-zip/util/errors.js new file mode 100644 index 0000000..db5d69e --- /dev/null +++ b/www/node_modules/adm-zip/util/errors.js @@ -0,0 +1,35 @@ +module.exports = { + /* Header error messages */ + "INVALID_LOC" : "Invalid LOC header (bad signature)", + "INVALID_CEN" : "Invalid CEN header (bad signature)", + "INVALID_END" : "Invalid END header (bad signature)", + + /* ZipEntry error messages*/ + "NO_DATA" : "Nothing to decompress", + "BAD_CRC" : "CRC32 checksum failed", + "FILE_IN_THE_WAY" : "There is a file in the way: %s", + "UNKNOWN_METHOD" : "Invalid/unsupported compression method", + + /* Inflater error messages */ + "AVAIL_DATA" : "inflate::Available inflate data did not terminate", + "INVALID_DISTANCE" : "inflate::Invalid literal/length or distance code in fixed or dynamic block", + "TO_MANY_CODES" : "inflate::Dynamic block code description: too many length or distance codes", + "INVALID_REPEAT_LEN" : "inflate::Dynamic block code description: repeat more than specified lengths", + "INVALID_REPEAT_FIRST" : "inflate::Dynamic block code description: repeat lengths with no first length", + "INCOMPLETE_CODES" : "inflate::Dynamic block code description: code lengths codes incomplete", + "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths", + "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths", + "INVALID_STORE_BLOCK" : "inflate::Stored block length did not match one's complement", + "INVALID_BLOCK_TYPE" : "inflate::Invalid block type (type == 3)", + + /* ADM-ZIP error messages */ + "CANT_EXTRACT_FILE" : "Could not extract the file", + "CANT_OVERRIDE" : "Target file already exists", + "NO_ZIP" : "No zip file was loaded", + "NO_ENTRY" : "Entry doesn't exist", + "DIRECTORY_CONTENT_ERROR" : "A directory cannot have content", + "FILE_NOT_FOUND" : "File not found: %s", + "NOT_IMPLEMENTED" : "Not implemented", + "INVALID_FILENAME" : "Invalid filename", + "INVALID_FORMAT" : "Invalid or unsupported zip format. No END header found" +}; \ No newline at end of file diff --git a/www/node_modules/adm-zip/util/fattr.js b/www/node_modules/adm-zip/util/fattr.js new file mode 100644 index 0000000..2191ec1 --- /dev/null +++ b/www/node_modules/adm-zip/util/fattr.js @@ -0,0 +1,84 @@ +var fs = require("fs"), + pth = require("path"); + +fs.existsSync = fs.existsSync || pth.existsSync; + +module.exports = function(/*String*/path) { + + var _path = path || "", + _permissions = 0, + _obj = newAttr(), + _stat = null; + + function newAttr() { + return { + directory : false, + readonly : false, + hidden : false, + executable : false, + mtime : 0, + atime : 0 + } + } + + if (_path && fs.existsSync(_path)) { + _stat = fs.statSync(_path); + _obj.directory = _stat.isDirectory(); + _obj.mtime = _stat.mtime; + _obj.atime = _stat.atime; + _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); + _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); + _obj.hidden = pth.basename(_path)[0] === "."; + } else { + console.warn("Invalid path: " + _path) + } + + return { + + get directory () { + return _obj.directory; + }, + + get readOnly () { + return _obj.readonly; + }, + + get hidden () { + return _obj.hidden; + }, + + get mtime () { + return _obj.mtime; + }, + + get atime () { + return _obj.atime; + }, + + + get executable () { + return _obj.executable; + }, + + decodeAttributes : function(val) { + + }, + + encodeAttributes : function (val) { + + }, + + toString : function() { + return '{\n' + + '\t"path" : "' + _path + ",\n" + + '\t"isDirectory" : ' + _obj.directory + ",\n" + + '\t"isReadOnly" : ' + _obj.readonly + ",\n" + + '\t"isHidden" : ' + _obj.hidden + ",\n" + + '\t"isExecutable" : ' + _obj.executable + ",\n" + + '\t"mTime" : ' + _obj.mtime + "\n" + + '\t"aTime" : ' + _obj.atime + "\n" + + '}'; + } + } + +}; diff --git a/www/node_modules/adm-zip/util/index.js b/www/node_modules/adm-zip/util/index.js new file mode 100644 index 0000000..935fc1a --- /dev/null +++ b/www/node_modules/adm-zip/util/index.js @@ -0,0 +1,4 @@ +module.exports = require("./utils"); +module.exports.Constants = require("./constants"); +module.exports.Errors = require("./errors"); +module.exports.FileAttr = require("./fattr"); \ No newline at end of file diff --git a/www/node_modules/adm-zip/util/utils.js b/www/node_modules/adm-zip/util/utils.js new file mode 100644 index 0000000..b14db8c --- /dev/null +++ b/www/node_modules/adm-zip/util/utils.js @@ -0,0 +1,145 @@ +var fs = require("fs"), + pth = require('path'); + +fs.existsSync = fs.existsSync || pth.existsSync; + +module.exports = (function() { + + var crcTable = [], + Constants = require('./constants'), + Errors = require('./errors'), + + PATH_SEPARATOR = pth.normalize("/"); + + + function mkdirSync(/*String*/path) { + var resolvedPath = path.split(PATH_SEPARATOR)[0]; + path.split(PATH_SEPARATOR).forEach(function(name) { + if (!name || name.substr(-1,1) == ":") return; + resolvedPath += PATH_SEPARATOR + name; + var stat; + try { + stat = fs.statSync(resolvedPath); + } catch (e) { + fs.mkdirSync(resolvedPath); + } + if (stat && stat.isFile()) + throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath); + }); + } + + function findSync(/*String*/root, /*RegExp*/pattern, /*Boolean*/recoursive) { + if (typeof pattern === 'boolean') { + recoursive = pattern; + pattern = undefined; + } + var files = []; + fs.readdirSync(root).forEach(function(file) { + var path = pth.join(root, file); + + if (fs.statSync(path).isDirectory() && recoursive) + files = files.concat(findSync(path, pattern, recoursive)); + + if (!pattern || pattern.test(path)) { + files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : "")); + } + + }); + return files; + } + + return { + makeDir : function(/*String*/path) { + mkdirSync(path); + }, + + crc32 : function(buf) { + var b = new Buffer(4); + if (!crcTable.length) { + for (var n = 0; n < 256; n++) { + var c = n; + for (var k = 8; --k >= 0;) // + if ((c & 1) != 0) { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; } + if (c < 0) { + b.writeInt32LE(c, 0); + c = b.readUInt32LE(0); + } + crcTable[n] = c; + } + } + var crc = 0, off = 0, len = buf.length, c1 = ~crc; + while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8); + crc = ~c1; + b.writeInt32LE(crc & 0xffffffff, 0); + return b.readUInt32LE(0); + }, + + methodToString : function(/*Number*/method) { + switch (method) { + case Constants.STORED: + return 'STORED (' + method + ')'; + case Constants.DEFLATED: + return 'DEFLATED (' + method + ')'; + default: + return 'UNSUPPORTED (' + method + ')' + } + + }, + + writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) { + if (fs.existsSync(path)) { + if (!overwrite) + return false; // cannot overwite + + var stat = fs.statSync(path); + if (stat.isDirectory()) { + return false; + } + } + var folder = pth.dirname(path); + if (!fs.existsSync(folder)) { + mkdirSync(folder); + } + + var fd; + try { + fd = fs.openSync(path, 'w', 438); // 0666 + } catch(e) { + fs.chmodSync(path, 438); + fd = fs.openSync(path, 'w', 438); + } + if (fd) { + fs.writeSync(fd, content, 0, content.length, 0); + fs.closeSync(fd); + } + fs.chmodSync(path, attr || 438); + return true; + }, + + findFiles : function(/*String*/path) { + return findSync(path, true); + }, + + getAttributes : function(/*String*/path) { + + }, + + setAttributes : function(/*String*/path) { + + }, + + toBuffer : function(input) { + if (Buffer.isBuffer(input)) { + return input; + } else { + if (input.length == 0) { + return new Buffer(0) + } + return new Buffer(input, 'utf8'); + } + }, + + Constants : Constants, + Errors : Errors + } +})(); diff --git a/www/node_modules/adm-zip/zipEntry.js b/www/node_modules/adm-zip/zipEntry.js new file mode 100644 index 0000000..02c3172 --- /dev/null +++ b/www/node_modules/adm-zip/zipEntry.js @@ -0,0 +1,224 @@ +var Utils = require("./util"), + Headers = require("./headers"), + Constants = Utils.Constants, + Methods = require("./methods"); + +module.exports = function (/*Buffer*/input) { + + var _entryHeader = new Headers.EntryHeader(), + _entryName = new Buffer(0), + _comment = new Buffer(0), + _isDirectory = false, + uncompressedData = null, + _extra = new Buffer(0); + + function getCompressedDataFromZip() { + if (!input || !Buffer.isBuffer(input)) { + return new Buffer(0); + } + _entryHeader.loadDataHeaderFromBinary(input); + return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize) + } + + function crc32OK(data) { + // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written + if (_entryHeader.flags & 0x8 != 0x8) { + if (Utils.crc32(data) != _entryHeader.crc) { + return false; + } + } else { + // @TODO: load and check data descriptor header + // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure + // (optionally preceded by a 4-byte signature) immediately after the compressed data: + } + return true; + } + + function decompress(/*Boolean*/async, /*Function*/callback) { + if (_isDirectory) { + if (async && callback) { + callback(new Buffer(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error. + } + return new Buffer(0); + } + + var compressedData = getCompressedDataFromZip(); + if (compressedData.length == 0) { + if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error. + return compressedData; + } + + var data = new Buffer(_entryHeader.size); + data.fill(0); + + switch (_entryHeader.method) { + case Utils.Constants.STORED: + compressedData.copy(data); + if (!crc32OK(data)) { + if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error + return Utils.Errors.BAD_CRC; + } else {//si added otherwise did not seem to return data. + if (async && callback) callback(data); + return data; + } + break; + case Utils.Constants.DEFLATED: + var inflater = new Methods.Inflater(compressedData); + if (!async) { + inflater.inflate(data); + if (!crc32OK(data)) { + console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString()) + } + return data; + } else { + inflater.inflateAsync(function(result) { + result.copy(data, 0); + if (crc32OK(data)) { + if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error + } else { //si added otherwise did not seem to return data. + if (callback) callback(data); + } + }) + } + break; + default: + if (async && callback) callback(new Buffer(0), Utils.Errors.UNKNOWN_METHOD); + return Utils.Errors.UNKNOWN_METHOD; + } + } + + function compress(/*Boolean*/async, /*Function*/callback) { + if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { + // no data set or the data wasn't changed to require recompression + if (async && callback) callback(getCompressedDataFromZip()); + return getCompressedDataFromZip(); + } + + if (uncompressedData.length && !_isDirectory) { + var compressedData; + // Local file header + switch (_entryHeader.method) { + case Utils.Constants.STORED: + _entryHeader.compressedSize = _entryHeader.size; + + compressedData = new Buffer(uncompressedData.length); + uncompressedData.copy(compressedData); + + if (async && callback) callback(compressedData); + return compressedData; + + break; + default: + case Utils.Constants.DEFLATED: + + var deflater = new Methods.Deflater(uncompressedData); + if (!async) { + var deflated = deflater.deflate(); + _entryHeader.compressedSize = deflated.length; + return deflated; + } else { + deflater.deflateAsync(function(data) { + compressedData = new Buffer(data.length); + _entryHeader.compressedSize = data.length; + data.copy(compressedData); + callback && callback(compressedData); + }) + } + deflater = null; + break; + } + } else { + if (async && callback) { + callback(new Buffer(0)); + } else { + return new Buffer(0); + } + } + } + + return { + get entryName () { return _entryName.toString(); }, + get rawEntryName() { return _entryName; }, + set entryName (val) { + _entryName = Utils.toBuffer(val); + var lastChar = _entryName[_entryName.length - 1]; + _isDirectory = (lastChar == 47) || (lastChar == 92); + _entryHeader.fileNameLength = _entryName.length; + }, + + get extra () { return _extra; }, + set extra (val) { + _extra = val; + _entryHeader.extraLength = val.length; + }, + + get comment () { return _comment.toString(); }, + set comment (val) { + _comment = Utils.toBuffer(val); + _entryHeader.commentLength = _comment.length; + }, + + get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); }, + get isDirectory () { return _isDirectory }, + + getCompressedData : function() { + return compress(false, null) + }, + + getCompressedDataAsync : function(/*Function*/callback) { + compress(true, callback) + }, + + setData : function(value) { + uncompressedData = Utils.toBuffer(value); + if (!_isDirectory && uncompressedData.length) { + _entryHeader.size = uncompressedData.length; + _entryHeader.method = Utils.Constants.DEFLATED; + _entryHeader.crc = Utils.crc32(value); + } else { // folders and blank files should be stored + _entryHeader.method = Utils.Constants.STORED; + } + }, + + getData : function() { + return decompress(false, null); + }, + + getDataAsync : function(/*Function*/callback) { + decompress(true, callback) + }, + + set header(/*Buffer*/data) { + _entryHeader.loadFromBinary(data); + }, + + get header() { + return _entryHeader; + }, + + packHeader : function() { + var header = _entryHeader.entryHeaderToBinary(); + // add + _entryName.copy(header, Utils.Constants.CENHDR); + if (_entryHeader.extraLength) { + _extra.copy(header, Utils.Constants.CENHDR + _entryName.length) + } + if (_entryHeader.commentLength) { + _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length); + } + return header; + }, + + toString : function() { + return '{\n' + + '\t"entryName" : "' + _entryName.toString() + "\",\n" + + '\t"name" : "' + _entryName.toString().split("/").pop() + "\",\n" + + '\t"comment" : "' + _comment.toString() + "\",\n" + + '\t"isDirectory" : ' + _isDirectory + ",\n" + + '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t") + ",\n" + + '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + + '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + + '}'; + } + } +}; diff --git a/www/node_modules/adm-zip/zipFile.js b/www/node_modules/adm-zip/zipFile.js new file mode 100644 index 0000000..f066d7e --- /dev/null +++ b/www/node_modules/adm-zip/zipFile.js @@ -0,0 +1,311 @@ +var ZipEntry = require("./zipEntry"), + Headers = require("./headers"), + Utils = require("./util"); + +module.exports = function(/*String|Buffer*/input, /*Number*/inputType) { + var entryList = [], + entryTable = {}, + _comment = new Buffer(0), + filename = "", + fs = require("fs"), + inBuffer = null, + mainHeader = new Headers.MainHeader(); + + if (inputType == Utils.Constants.FILE) { + // is a filename + filename = input; + inBuffer = fs.readFileSync(filename); + readMainHeader(); + } else if (inputType == Utils.Constants.BUFFER) { + // is a memory buffer + inBuffer = input; + readMainHeader(); + } else { + // none. is a new file + } + + function readEntries() { + entryTable = {}; + entryList = new Array(mainHeader.diskEntries); // total number of entries + var index = mainHeader.offset; // offset of first CEN header + for(var i = 0; i < entryList.length; i++) { + + var tmp = index, + entry = new ZipEntry(inBuffer); + entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); + + entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); + + if (entry.header.extraLength) { + entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); + } + + if (entry.header.commentLength) + entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); + + index += entry.header.entryHeaderSize; + + entryList[i] = entry; + entryTable[entry.entryName] = entry; + } + } + + function readMainHeader() { + var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size + n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length + endOffset = 0; // Start offset of the END header + + for (i; i >= n; i--) { + if (inBuffer[i] != 0x50) continue; // quick check that the byte is 'P' + if (inBuffer.readUInt32LE(i) == Utils.Constants.ENDSIG) { // "PK\005\006" + endOffset = i; + break; + } + } + if (!endOffset) + throw Utils.Errors.INVALID_FORMAT; + + mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR)); + if (mainHeader.commentLength) { + _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR); + } + readEntries(); + } + + return { + /** + * Returns an array of ZipEntry objects existent in the current opened archive + * @return Array + */ + get entries () { + return entryList; + }, + + /** + * Archive comment + * @return {String} + */ + get comment () { return _comment.toString(); }, + set comment(val) { + mainHeader.commentLength = val.length; + _comment = val; + }, + + /** + * Returns a reference to the entry with the given name or null if entry is inexistent + * + * @param entryName + * @return ZipEntry + */ + getEntry : function(/*String*/entryName) { + return entryTable[entryName] || null; + }, + + /** + * Adds the given entry to the entry list + * + * @param entry + */ + setEntry : function(/*ZipEntry*/entry) { + entryList.push(entry); + entryTable[entry.entryName] = entry; + mainHeader.totalEntries = entryList.length; + }, + + /** + * Removes the entry with the given name from the entry list. + * + * If the entry is a directory, then all nested files and directories will be removed + * @param entryName + */ + deleteEntry : function(/*String*/entryName) { + var entry = entryTable[entryName]; + if (entry && entry.isDirectory) { + var _self = this; + this.getEntryChildren(entry).forEach(function(child) { + if (child.entryName != entryName) { + _self.deleteEntry(child.entryName) + } + }) + } + entryList.splice(entryList.indexOf(entry), 1); + delete(entryTable[entryName]); + mainHeader.totalEntries = entryList.length; + }, + + /** + * Iterates and returns all nested files and directories of the given entry + * + * @param entry + * @return Array + */ + getEntryChildren : function(/*ZipEntry*/entry) { + if (entry.isDirectory) { + var list = [], + name = entry.entryName, + len = name.length; + + entryList.forEach(function(zipEntry) { + if (zipEntry.entryName.substr(0, len) == name) { + list.push(zipEntry); + } + }); + return list; + } + return [] + }, + + /** + * Returns the zip file + * + * @return Buffer + */ + compressToBuffer : function() { + if (entryList.length > 1) { + entryList.sort(function(a, b) { + var nameA = a.entryName.toLowerCase(); + var nameB = b.entryName.toLowerCase(); + if (nameA < nameB) {return -1} + if (nameA > nameB) {return 1} + return 0; + }); + } + + var totalSize = 0, + dataBlock = [], + entryHeaders = [], + dindex = 0; + + mainHeader.size = 0; + mainHeader.offset = 0; + + entryList.forEach(function(entry) { + entry.header.offset = dindex; + + // compress data and set local and entry header accordingly. Reason why is called first + var compressedData = entry.getCompressedData(); + // data header + var dataHeader = entry.header.dataHeaderToBinary(); + var postHeader = new Buffer(entry.entryName + entry.extra.toString()); + var dataLength = dataHeader.length + postHeader.length + compressedData.length; + + dindex += dataLength; + + dataBlock.push(dataHeader); + dataBlock.push(postHeader); + dataBlock.push(compressedData); + + var entryHeader = entry.packHeader(); + entryHeaders.push(entryHeader); + mainHeader.size += entryHeader.length; + totalSize += (dataLength + entryHeader.length); + }); + + totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length + // point to end of data and begining of central directory first record + mainHeader.offset = dindex; + + dindex = 0; + var outBuffer = new Buffer(totalSize); + dataBlock.forEach(function(content) { + content.copy(outBuffer, dindex); // write data blocks + dindex += content.length; + }); + entryHeaders.forEach(function(content) { + content.copy(outBuffer, dindex); // write central directory entries + dindex += content.length; + }); + + var mh = mainHeader.toBinary(); + if (_comment) { + _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment + } + + mh.copy(outBuffer, dindex); // write main header + + return outBuffer + }, + + toAsyncBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { + if (entryList.length > 1) { + entryList.sort(function(a, b) { + var nameA = a.entryName.toLowerCase(); + var nameB = b.entryName.toLowerCase(); + if (nameA > nameB) {return -1} + if (nameA < nameB) {return 1} + return 0; + }); + } + + var totalSize = 0, + dataBlock = [], + entryHeaders = [], + dindex = 0; + + mainHeader.size = 0; + mainHeader.offset = 0; + + var compress=function(entryList){ + var self=arguments.callee; + var entry; + if(entryList.length){ + var entry=entryList.pop(); + var name=entry.entryName + entry.extra.toString(); + if(onItemStart)onItemStart(name); + entry.getCompressedDataAsync(function(compressedData){ + if(onItemEnd)onItemEnd(name); + + entry.header.offset = dindex; + // data header + var dataHeader = entry.header.dataHeaderToBinary(); + var postHeader = new Buffer(name); + var dataLength = dataHeader.length + postHeader.length + compressedData.length; + + dindex += dataLength; + + dataBlock.push(dataHeader); + dataBlock.push(postHeader); + dataBlock.push(compressedData); + + var entryHeader = entry.packHeader(); + entryHeaders.push(entryHeader); + mainHeader.size += entryHeader.length; + totalSize += (dataLength + entryHeader.length); + + if(entryList.length){ + self(entryList); + }else{ + + + totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length + // point to end of data and begining of central directory first record + mainHeader.offset = dindex; + + dindex = 0; + var outBuffer = new Buffer(totalSize); + dataBlock.forEach(function(content) { + content.copy(outBuffer, dindex); // write data blocks + dindex += content.length; + }); + entryHeaders.forEach(function(content) { + content.copy(outBuffer, dindex); // write central directory entries + dindex += content.length; + }); + + var mh = mainHeader.toBinary(); + if (_comment) { + _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment + } + + mh.copy(outBuffer, dindex); // write main header + + onSuccess(outBuffer); + } + }); + } + }; + + compress(entryList); + } + } +}; diff --git a/www/node_modules/balanced-match/.npmignore b/www/node_modules/balanced-match/.npmignore new file mode 100644 index 0000000..fd4f2b0 --- /dev/null +++ b/www/node_modules/balanced-match/.npmignore @@ -0,0 +1,2 @@ +node_modules +.DS_Store diff --git a/www/node_modules/balanced-match/.travis.yml b/www/node_modules/balanced-match/.travis.yml new file mode 100644 index 0000000..6e5919d --- /dev/null +++ b/www/node_modules/balanced-match/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/www/node_modules/balanced-match/LICENSE.md b/www/node_modules/balanced-match/LICENSE.md new file mode 100644 index 0000000..2cdc8e4 --- /dev/null +++ b/www/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/www/node_modules/balanced-match/Makefile b/www/node_modules/balanced-match/Makefile new file mode 100644 index 0000000..fa5da71 --- /dev/null +++ b/www/node_modules/balanced-match/Makefile @@ -0,0 +1,6 @@ + +test: + @node_modules/.bin/tape test/*.js + +.PHONY: test + diff --git a/www/node_modules/balanced-match/README.md b/www/node_modules/balanced-match/README.md new file mode 100644 index 0000000..421f3aa --- /dev/null +++ b/www/node_modules/balanced-match/README.md @@ -0,0 +1,89 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/www/node_modules/balanced-match/example.js b/www/node_modules/balanced-match/example.js new file mode 100644 index 0000000..c02ad34 --- /dev/null +++ b/www/node_modules/balanced-match/example.js @@ -0,0 +1,5 @@ +var balanced = require('./'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); + diff --git a/www/node_modules/balanced-match/index.js b/www/node_modules/balanced-match/index.js new file mode 100644 index 0000000..75f3d71 --- /dev/null +++ b/www/node_modules/balanced-match/index.js @@ -0,0 +1,50 @@ +module.exports = balanced; +function balanced(a, b, str) { + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i < str.length && i >= 0 && ! result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/www/node_modules/balanced-match/package.json b/www/node_modules/balanced-match/package.json new file mode 100644 index 0000000..6ae13e8 --- /dev/null +++ b/www/node_modules/balanced-match/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + "balanced-match@^0.3.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/brace-expansion" + ] + ], + "_from": "balanced-match@>=0.3.0 <0.4.0", + "_id": "balanced-match@0.3.0", + "_inCache": true, + "_installable": true, + "_location": "/balanced-match", + "_nodeVersion": "4.2.1", + "_npmUser": { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "name": "balanced-match", + "raw": "balanced-match@^0.3.0", + "rawSpec": "^0.3.0", + "scope": null, + "spec": ">=0.3.0 <0.4.0", + "type": "range" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz", + "_shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756", + "_shrinkwrap": null, + "_spec": "balanced-match@^0.3.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/brace-expansion", + "author": { + "email": "mail@juliangruber.com", + "name": "Julian Gruber", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/balanced-match/issues" + }, + "dependencies": {}, + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "devDependencies": { + "tape": "~4.2.2" + }, + "directories": {}, + "dist": { + "shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756", + "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz" + }, + "gitHead": "a7114b0986554787e90b7ac595a043ca75ea77e5", + "homepage": "https://github.com/juliangruber/balanced-match", + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "email": "julian@juliangruber.com", + "name": "juliangruber" + } + ], + "name": "balanced-match", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "scripts": { + "test": "make test" + }, + "testling": { + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ], + "files": "test/*.js" + }, + "version": "0.3.0" +} diff --git a/www/node_modules/balanced-match/test/balanced.js b/www/node_modules/balanced-match/test/balanced.js new file mode 100644 index 0000000..f5e98e3 --- /dev/null +++ b/www/node_modules/balanced-match/test/balanced.js @@ -0,0 +1,84 @@ +var test = require('tape'); +var balanced = require('..'); + +test('balanced', function(t) { + t.deepEqual(balanced('{', '}', 'pre{in{nest}}post'), { + start: 3, + end: 12, + pre: 'pre', + body: 'in{nest}', + post: 'post' + }); + t.deepEqual(balanced('{', '}', '{{{{{{{{{in}post'), { + start: 8, + end: 11, + pre: '{{{{{{{{', + body: 'in', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre{body{in}post'), { + start: 8, + end: 11, + pre: 'pre{body', + body: 'in', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre}{in{nest}}post'), { + start: 4, + end: 13, + pre: 'pre}', + body: 'in{nest}', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre{body}between{body2}post'), { + start: 3, + end: 8, + pre: 'pre', + body: 'body', + post: 'between{body2}post' + }); + t.notOk(balanced('{', '}', 'nope'), 'should be notOk'); + t.deepEqual(balanced('', '', 'preinnestpost'), { + start: 3, + end: 19, + pre: 'pre', + body: 'innest', + post: 'post' + }); + t.deepEqual(balanced('', '', 'preinnestpost'), { + start: 7, + end: 23, + pre: 'pre
          ', + body: 'innest', + post: 'post' + }); + t.deepEqual(balanced('{{', '}}', 'pre{{{in}}}post'), { + start: 3, + end: 9, + pre: 'pre', + body: '{in}', + post: 'post' + }); + t.deepEqual(balanced('{{{', '}}', 'pre{{{in}}}post'), { + start: 3, + end: 8, + pre: 'pre', + body: 'in', + post: '}post' + }); + t.deepEqual(balanced('{', '}', 'pre{{first}in{second}post'), { + start: 4, + end: 10, + pre: 'pre{', + body: 'first', + post: 'in{second}post' + }); + t.deepEqual(balanced('', 'prepost'), { + start: 3, + end: 4, + pre: 'pre', + body: '', + post: 'post' + }); + t.end(); +}); diff --git a/www/node_modules/brace-expansion/.npmignore b/www/node_modules/brace-expansion/.npmignore new file mode 100644 index 0000000..353546a --- /dev/null +++ b/www/node_modules/brace-expansion/.npmignore @@ -0,0 +1,3 @@ +test +.gitignore +.travis.yml diff --git a/www/node_modules/brace-expansion/README.md b/www/node_modules/brace-expansion/README.md new file mode 100644 index 0000000..1793929 --- /dev/null +++ b/www/node_modules/brace-expansion/README.md @@ -0,0 +1,122 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/www/node_modules/brace-expansion/example.js b/www/node_modules/brace-expansion/example.js new file mode 100644 index 0000000..60ecfc7 --- /dev/null +++ b/www/node_modules/brace-expansion/example.js @@ -0,0 +1,8 @@ +var expand = require('./'); + +console.log(expand('http://any.org/archive{1996..1999}/vol{1..4}/part{a,b,c}.html')); +console.log(expand('http://www.numericals.com/file{1..100..10}.txt')); +console.log(expand('http://www.letters.com/file{a..z..2}.txt')); +console.log(expand('mkdir /usr/local/src/bash/{old,new,dist,bugs}')); +console.log(expand('chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}')); + diff --git a/www/node_modules/brace-expansion/index.js b/www/node_modules/brace-expansion/index.js new file mode 100644 index 0000000..932718f --- /dev/null +++ b/www/node_modules/brace-expansion/index.js @@ -0,0 +1,191 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = /^(.*,)+(.+)?$/.test(m.body); + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + diff --git a/www/node_modules/brace-expansion/package.json b/www/node_modules/brace-expansion/package.json new file mode 100644 index 0000000..034c59e --- /dev/null +++ b/www/node_modules/brace-expansion/package.json @@ -0,0 +1,104 @@ +{ + "_args": [ + [ + "brace-expansion@^1.0.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/minimatch" + ] + ], + "_from": "brace-expansion@>=1.0.0 <2.0.0", + "_id": "brace-expansion@1.1.3", + "_inCache": true, + "_installable": true, + "_location": "/brace-expansion", + "_nodeVersion": "5.5.0", + "_npmOperationalInternal": { + "host": "packages-6-west.internal.npmjs.com", + "tmp": "tmp/brace-expansion-1.1.3.tgz_1455216688668_0.948847763473168" + }, + "_npmUser": { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + "_npmVersion": "3.3.12", + "_phantomChildren": {}, + "_requested": { + "name": "brace-expansion", + "raw": "brace-expansion@^1.0.0", + "rawSpec": "^1.0.0", + "scope": null, + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/minimatch" + ], + "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz", + "_shasum": "46bff50115d47fc9ab89854abb87d98078a10991", + "_shrinkwrap": null, + "_spec": "brace-expansion@^1.0.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/minimatch", + "author": { + "email": "mail@juliangruber.com", + "name": "Julian Gruber", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/brace-expansion/issues" + }, + "dependencies": { + "balanced-match": "^0.3.0", + "concat-map": "0.0.1" + }, + "description": "Brace expansion as known from sh/bash", + "devDependencies": { + "tape": "4.4.0" + }, + "directories": {}, + "dist": { + "shasum": "46bff50115d47fc9ab89854abb87d98078a10991", + "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz" + }, + "gitHead": "f0da1bb668e655f67b6b2d660c6e1c19e2a6f231", + "homepage": "https://github.com/juliangruber/brace-expansion", + "keywords": [], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + { + "email": "isaacs@npmjs.com", + "name": "isaacs" + } + ], + "name": "brace-expansion", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "scripts": { + "gentest": "bash test/generate.sh", + "test": "tape test/*.js" + }, + "testling": { + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ], + "files": "test/*.js" + }, + "version": "1.1.3" +} diff --git a/www/node_modules/concat-map/.travis.yml b/www/node_modules/concat-map/.travis.yml new file mode 100644 index 0000000..f1d0f13 --- /dev/null +++ b/www/node_modules/concat-map/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/www/node_modules/concat-map/LICENSE b/www/node_modules/concat-map/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/www/node_modules/concat-map/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/www/node_modules/concat-map/README.markdown b/www/node_modules/concat-map/README.markdown new file mode 100644 index 0000000..408f70a --- /dev/null +++ b/www/node_modules/concat-map/README.markdown @@ -0,0 +1,62 @@ +concat-map +========== + +Concatenative mapdashery. + +[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map) + +[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map) + +example +======= + +``` js +var concatMap = require('concat-map'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); +``` + +*** + +``` +[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ] +``` + +methods +======= + +``` js +var concatMap = require('concat-map') +``` + +concatMap(xs, fn) +----------------- + +Return an array of concatenated elements by calling `fn(x, i)` for each element +`x` and each index `i` in the array `xs`. + +When `fn(x, i)` returns an array, its result will be concatenated with the +result array. If `fn(x, i)` returns anything else, that value will be pushed +onto the end of the result array. + +install +======= + +With [npm](http://npmjs.org) do: + +``` +npm install concat-map +``` + +license +======= + +MIT + +notes +===== + +This module was written while sitting high above the ground in a tree. diff --git a/www/node_modules/concat-map/example/map.js b/www/node_modules/concat-map/example/map.js new file mode 100644 index 0000000..3365621 --- /dev/null +++ b/www/node_modules/concat-map/example/map.js @@ -0,0 +1,6 @@ +var concatMap = require('../'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); diff --git a/www/node_modules/concat-map/index.js b/www/node_modules/concat-map/index.js new file mode 100644 index 0000000..b29a781 --- /dev/null +++ b/www/node_modules/concat-map/index.js @@ -0,0 +1,13 @@ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; diff --git a/www/node_modules/concat-map/package.json b/www/node_modules/concat-map/package.json new file mode 100644 index 0000000..a9ec9a4 --- /dev/null +++ b/www/node_modules/concat-map/package.json @@ -0,0 +1,109 @@ +{ + "_args": [ + [ + "concat-map@0.0.1", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/brace-expansion" + ] + ], + "_from": "concat-map@0.0.1", + "_id": "concat-map@0.0.1", + "_inCache": true, + "_installable": true, + "_location": "/concat-map", + "_npmUser": { + "email": "mail@substack.net", + "name": "substack" + }, + "_npmVersion": "1.3.21", + "_phantomChildren": {}, + "_requested": { + "name": "concat-map", + "raw": "concat-map@0.0.1", + "rawSpec": "0.0.1", + "scope": null, + "spec": "0.0.1", + "type": "version" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "_shrinkwrap": null, + "_spec": "concat-map@0.0.1", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/brace-expansion", + "author": { + "email": "mail@substack.net", + "name": "James Halliday", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/node-concat-map/issues" + }, + "dependencies": {}, + "description": "concatenative mapdashery", + "devDependencies": { + "tape": "~2.4.0" + }, + "directories": { + "example": "example", + "test": "test" + }, + "dist": { + "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + }, + "homepage": "https://github.com/substack/node-concat-map", + "keywords": [ + "concat", + "concatMap", + "map", + "functional", + "higher-order" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "email": "mail@substack.net", + "name": "substack" + } + ], + "name": "concat-map", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/substack/node-concat-map.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "browsers": { + "chrome": [ + 10, + 22 + ], + "ff": [ + 3.5, + 10, + 15 + ], + "ie": [ + 6, + 7, + 8, + 9 + ], + "opera": [ + 12 + ], + "safari": [ + 5.1 + ] + }, + "files": "test/*.js" + }, + "version": "0.0.1" +} diff --git a/www/node_modules/concat-map/test/map.js b/www/node_modules/concat-map/test/map.js new file mode 100644 index 0000000..fdbd702 --- /dev/null +++ b/www/node_modules/concat-map/test/map.js @@ -0,0 +1,39 @@ +var concatMap = require('../'); +var test = require('tape'); + +test('empty or not', function (t) { + var xs = [ 1, 2, 3, 4, 5, 6 ]; + var ixes = []; + var ys = concatMap(xs, function (x, ix) { + ixes.push(ix); + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; + }); + t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); + t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); + t.end(); +}); + +test('always something', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('scalars', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : x; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('undefs', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function () {}); + t.same(ys, [ undefined, undefined, undefined, undefined ]); + t.end(); +}); diff --git a/www/node_modules/exit/.jshintrc b/www/node_modules/exit/.jshintrc new file mode 100644 index 0000000..2b7e39b --- /dev/null +++ b/www/node_modules/exit/.jshintrc @@ -0,0 +1,14 @@ +{ + "curly": true, + "eqeqeq": true, + "immed": true, + "latedef": "nofunc", + "newcap": true, + "noarg": true, + "sub": true, + "undef": true, + "unused": true, + "boss": true, + "eqnull": true, + "node": true +} diff --git a/www/node_modules/exit/.npmignore b/www/node_modules/exit/.npmignore new file mode 100644 index 0000000..e69de29 diff --git a/www/node_modules/exit/.travis.yml b/www/node_modules/exit/.travis.yml new file mode 100644 index 0000000..42d4302 --- /dev/null +++ b/www/node_modules/exit/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - 0.8 + - '0.10' +before_script: + - npm install -g grunt-cli diff --git a/www/node_modules/exit/Gruntfile.js b/www/node_modules/exit/Gruntfile.js new file mode 100644 index 0000000..ff37751 --- /dev/null +++ b/www/node_modules/exit/Gruntfile.js @@ -0,0 +1,48 @@ +'use strict'; + +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + nodeunit: { + files: ['test/**/*_test.js'], + }, + jshint: { + options: { + jshintrc: '.jshintrc' + }, + gruntfile: { + src: 'Gruntfile.js' + }, + lib: { + src: ['lib/**/*.js'] + }, + test: { + src: ['test/**/*.js'] + }, + }, + watch: { + gruntfile: { + files: '<%= jshint.gruntfile.src %>', + tasks: ['jshint:gruntfile'] + }, + lib: { + files: '<%= jshint.lib.src %>', + tasks: ['jshint:lib', 'nodeunit'] + }, + test: { + files: '<%= jshint.test.src %>', + tasks: ['jshint:test', 'nodeunit'] + }, + }, + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-nodeunit'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + + // Default task. + grunt.registerTask('default', ['jshint', 'nodeunit']); + +}; diff --git a/www/node_modules/exit/LICENSE-MIT b/www/node_modules/exit/LICENSE-MIT new file mode 100644 index 0000000..bb2aad6 --- /dev/null +++ b/www/node_modules/exit/LICENSE-MIT @@ -0,0 +1,22 @@ +Copyright (c) 2013 "Cowboy" Ben Alman + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/www/node_modules/exit/README.md b/www/node_modules/exit/README.md new file mode 100644 index 0000000..20c364e --- /dev/null +++ b/www/node_modules/exit/README.md @@ -0,0 +1,75 @@ +# exit [![Build Status](https://secure.travis-ci.org/cowboy/node-exit.png?branch=master)](http://travis-ci.org/cowboy/node-exit) + +A replacement for process.exit that ensures stdio are fully drained before exiting. + +To make a long story short, if `process.exit` is called on Windows, script output is often truncated when pipe-redirecting `stdout` or `stderr`. This module attempts to work around this issue by waiting until those streams have been completely drained before actually calling `process.exit`. + +See [Node.js issue #3584](https://github.com/joyent/node/issues/3584) for further reference. + +Tested in OS X 10.8, Windows 7 on Node.js 0.8.25 and 0.10.18. + +Based on some code by [@vladikoff](https://github.com/vladikoff). + +## Getting Started +Install the module with: `npm install exit` + +```javascript +var exit = require('exit'); + +// These lines should appear in the output, EVEN ON WINDOWS. +console.log("omg"); +console.error("yay"); + +// process.exit(5); +exit(5); + +// These lines shouldn't appear in the output. +console.log("wtf"); +console.error("bro"); +``` + +## Don't believe me? Try it for yourself. + +In Windows, clone the repo and cd to the `test\fixtures` directory. The only difference between [log.js](test/fixtures/log.js) and [log-broken.js](test/fixtures/log-broken.js) is that the former uses `exit` while the latter calls `process.exit` directly. + +This test was done using cmd.exe, but you can see the same results using `| grep "std"` in either PowerShell or git-bash. + +``` +C:\node-exit\test\fixtures>node log.js 0 10 stdout stderr 2>&1 | find "std" +stdout 0 +stderr 0 +stdout 1 +stderr 1 +stdout 2 +stderr 2 +stdout 3 +stderr 3 +stdout 4 +stderr 4 +stdout 5 +stderr 5 +stdout 6 +stderr 6 +stdout 7 +stderr 7 +stdout 8 +stderr 8 +stdout 9 +stderr 9 + +C:\node-exit\test\fixtures>node log-broken.js 0 10 stdout stderr 2>&1 | find "std" + +C:\node-exit\test\fixtures> +``` + +## Contributing +In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). + +## Release History +2013-11-26 - v0.1.2 - Fixed a bug with hanging processes. +2013-09-26 - v0.1.1 - Fixed some bugs. It seems to actually work now! +2013-09-20 - v0.1.0 - Initial release. + +## License +Copyright (c) 2013 "Cowboy" Ben Alman +Licensed under the MIT license. diff --git a/www/node_modules/exit/lib/exit.js b/www/node_modules/exit/lib/exit.js new file mode 100644 index 0000000..2883e05 --- /dev/null +++ b/www/node_modules/exit/lib/exit.js @@ -0,0 +1,41 @@ +/* + * exit + * https://github.com/cowboy/node-exit + * + * Copyright (c) 2013 "Cowboy" Ben Alman + * Licensed under the MIT license. + */ + +'use strict'; + +module.exports = function exit(exitCode, streams) { + if (!streams) { streams = [process.stdout, process.stderr]; } + var drainCount = 0; + // Actually exit if all streams are drained. + function tryToExit() { + if (drainCount === streams.length) { + process.exit(exitCode); + } + } + streams.forEach(function(stream) { + // Count drained streams now, but monitor non-drained streams. + if (stream.bufferSize === 0) { + drainCount++; + } else { + stream.write('', 'utf-8', function() { + drainCount++; + tryToExit(); + }); + } + // Prevent further writing. + stream.write = function() {}; + }); + // If all streams were already drained, exit now. + tryToExit(); + // In Windows, when run as a Node.js child process, a script utilizing + // this library might just exit with a 0 exit code, regardless. This code, + // despite the fact that it looks a bit crazy, appears to fix that. + process.on('exit', function() { + process.exit(exitCode); + }); +}; diff --git a/www/node_modules/exit/package.json b/www/node_modules/exit/package.json new file mode 100644 index 0000000..ea2795d --- /dev/null +++ b/www/node_modules/exit/package.json @@ -0,0 +1,95 @@ +{ + "_args": [ + [ + "exit@^0.1.2", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine" + ] + ], + "_from": "exit@>=0.1.2 <0.2.0", + "_id": "exit@0.1.2", + "_inCache": true, + "_installable": true, + "_location": "/exit", + "_npmUser": { + "email": "cowboy@rj3.net", + "name": "cowboy" + }, + "_npmVersion": "1.3.11", + "_phantomChildren": {}, + "_requested": { + "name": "exit", + "raw": "exit@^0.1.2", + "rawSpec": "^0.1.2", + "scope": null, + "spec": ">=0.1.2 <0.2.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine" + ], + "_resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "_shasum": "0632638f8d877cc82107d30a0fff1a17cba1cd0c", + "_shrinkwrap": null, + "_spec": "exit@^0.1.2", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine", + "author": { + "name": "\"Cowboy\" Ben Alman", + "url": "http://benalman.com/" + }, + "bugs": { + "url": "https://github.com/cowboy/node-exit/issues" + }, + "dependencies": {}, + "description": "A replacement for process.exit that ensures stdio are fully drained before exiting.", + "devDependencies": { + "grunt": "~0.4.1", + "grunt-contrib-jshint": "~0.6.4", + "grunt-contrib-nodeunit": "~0.2.0", + "grunt-contrib-watch": "~0.5.3", + "which": "~1.0.5" + }, + "directories": {}, + "dist": { + "shasum": "0632638f8d877cc82107d30a0fff1a17cba1cd0c", + "tarball": "http://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + }, + "engines": { + "node": ">= 0.8.0" + }, + "homepage": "https://github.com/cowboy/node-exit", + "keywords": [ + "exit", + "process", + "stdio", + "stdout", + "stderr", + "drain", + "flush", + "3584" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/cowboy/node-exit/blob/master/LICENSE-MIT" + } + ], + "main": "lib/exit", + "maintainers": [ + { + "email": "cowboy@rj3.net", + "name": "cowboy" + } + ], + "name": "exit", + "optionalDependencies": {}, + "readme": "# exit [![Build Status](https://secure.travis-ci.org/cowboy/node-exit.png?branch=master)](http://travis-ci.org/cowboy/node-exit)\n\nA replacement for process.exit that ensures stdio are fully drained before exiting.\n\nTo make a long story short, if `process.exit` is called on Windows, script output is often truncated when pipe-redirecting `stdout` or `stderr`. This module attempts to work around this issue by waiting until those streams have been completely drained before actually calling `process.exit`.\n\nSee [Node.js issue #3584](https://github.com/joyent/node/issues/3584) for further reference.\n\nTested in OS X 10.8, Windows 7 on Node.js 0.8.25 and 0.10.18.\n\nBased on some code by [@vladikoff](https://github.com/vladikoff).\n\n## Getting Started\nInstall the module with: `npm install exit`\n\n```javascript\nvar exit = require('exit');\n\n// These lines should appear in the output, EVEN ON WINDOWS.\nconsole.log(\"omg\");\nconsole.error(\"yay\");\n\n// process.exit(5);\nexit(5);\n\n// These lines shouldn't appear in the output.\nconsole.log(\"wtf\");\nconsole.error(\"bro\");\n```\n\n## Don't believe me? Try it for yourself.\n\nIn Windows, clone the repo and cd to the `test\\fixtures` directory. The only difference between [log.js](test/fixtures/log.js) and [log-broken.js](test/fixtures/log-broken.js) is that the former uses `exit` while the latter calls `process.exit` directly.\n\nThis test was done using cmd.exe, but you can see the same results using `| grep \"std\"` in either PowerShell or git-bash.\n\n```\nC:\\node-exit\\test\\fixtures>node log.js 0 10 stdout stderr 2>&1 | find \"std\"\nstdout 0\nstderr 0\nstdout 1\nstderr 1\nstdout 2\nstderr 2\nstdout 3\nstderr 3\nstdout 4\nstderr 4\nstdout 5\nstderr 5\nstdout 6\nstderr 6\nstdout 7\nstderr 7\nstdout 8\nstderr 8\nstdout 9\nstderr 9\n\nC:\\node-exit\\test\\fixtures>node log-broken.js 0 10 stdout stderr 2>&1 | find \"std\"\n\nC:\\node-exit\\test\\fixtures>\n```\n\n## Contributing\nIn lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).\n\n## Release History\n2013-11-26 - v0.1.2 - Fixed a bug with hanging processes. \n2013-09-26 - v0.1.1 - Fixed some bugs. It seems to actually work now! \n2013-09-20 - v0.1.0 - Initial release.\n\n## License\nCopyright (c) 2013 \"Cowboy\" Ben Alman \nLicensed under the MIT license.\n", + "readmeFilename": "README.md", + "repository": { + "type": "git", + "url": "git://github.com/cowboy/node-exit.git" + }, + "scripts": { + "test": "grunt nodeunit" + }, + "version": "0.1.2" +} diff --git a/www/node_modules/exit/test/exit_test.js b/www/node_modules/exit/test/exit_test.js new file mode 100644 index 0000000..a91afb9 --- /dev/null +++ b/www/node_modules/exit/test/exit_test.js @@ -0,0 +1,121 @@ +'use strict'; + +/* + ======== A Handy Little Nodeunit Reference ======== + https://github.com/caolan/nodeunit + + Test methods: + test.expect(numAssertions) + test.done() + Test assertions: + test.ok(value, [message]) + test.equal(actual, expected, [message]) + test.notEqual(actual, expected, [message]) + test.deepEqual(actual, expected, [message]) + test.notDeepEqual(actual, expected, [message]) + test.strictEqual(actual, expected, [message]) + test.notStrictEqual(actual, expected, [message]) + test.throws(block, [error], [message]) + test.doesNotThrow(block, [error], [message]) + test.ifError(value) +*/ + +var fs = require('fs'); +var exec = require('child_process').exec; + +var _which = require('which').sync; +function which(command) { + try { + _which(command); + return command; + } catch (err) { + return false; + } +} + +// Look for grep first (any OS). If not found (but on Windows) look for find, +// which is Windows' horribly crippled grep alternative. +var grep = which('grep') || process.platform === 'win32' && which('find'); + +exports['exit'] = { + setUp: function(done) { + this.origCwd = process.cwd(); + process.chdir('test/fixtures'); + done(); + }, + tearDown: function(done) { + process.chdir(this.origCwd); + done(); + }, + 'grep': function(test) { + test.expect(1); + // Many unit tests depend on this. + test.ok(grep, 'A suitable "grep" or "find" program was not found in the PATH.'); + test.done(); + }, + // The rest of the tests are built dynamically, to keep things sane. +}; + +// A few helper functions. +function normalizeLineEndings(s) { + return s.replace(/\r?\n/g, '\n'); +} + +// Capture command output, normalizing captured stdout to unix file endings. +function run(command, callback) { + exec(command, function(error, stdout) { + callback(error ? error.code : 0, normalizeLineEndings(stdout)); + }); +} + +// Read a fixture file, normalizing file contents to unix file endings. +function fixture(filename) { + return normalizeLineEndings(String(fs.readFileSync(filename))); +} + +function buildTests() { + // Build individual unit tests for command output. + var counts = [10, 100, 1000]; + var outputs = [' stdout stderr', ' stdout', ' stderr']; + var pipes = ['', ' | ' + grep + ' "std"']; + counts.forEach(function(count) { + outputs.forEach(function(output) { + pipes.forEach(function(pipe) { + var command = 'node log.js 0 ' + count + output + ' 2>&1' + pipe; + exports['exit']['output (' + command + ')'] = function(test) { + test.expect(2); + run(command, function(code, actual) { + var expected = fixture(count + output.replace(/ /g, '-') + '.txt'); + // Sometimes, the actual file lines are out of order on Windows. + // But since the point of this lib is to drain the buffer and not + // guarantee output order, we only test the length. + test.equal(actual.length, expected.length, 'should be the same length.'); + // The "fail" lines in log.js should NOT be output! + test.ok(actual.indexOf('fail') === -1, 'should not output after exit is called.'); + test.done(); + }); + }; + }); + }); + }); + + // Build individual unit tests for exit codes. + var codes = [0, 1, 123]; + codes.forEach(function(code) { + var command = 'node log.js ' + code + ' 10 stdout stderr'; + exports['exit']['exit code (' + command + ')'] = function(test) { + test.expect(1); + run(command, function(actual) { + // The specified exit code should be passed through. + test.equal(actual, code, 'should exit with ' + code + ' error code.'); + test.done(); + }); + }; + }); +} + +// Don't bother building tests if grep wasn't found, otherwise everything will +// fail and the error will get lost. +if (grep) { + buildTests(); +} diff --git a/www/node_modules/exit/test/fixtures/10-stderr.txt b/www/node_modules/exit/test/fixtures/10-stderr.txt new file mode 100644 index 0000000..2859200 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/10-stderr.txt @@ -0,0 +1,10 @@ +stderr 0 +stderr 1 +stderr 2 +stderr 3 +stderr 4 +stderr 5 +stderr 6 +stderr 7 +stderr 8 +stderr 9 diff --git a/www/node_modules/exit/test/fixtures/10-stdout-stderr.txt b/www/node_modules/exit/test/fixtures/10-stdout-stderr.txt new file mode 100644 index 0000000..9de8616 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/10-stdout-stderr.txt @@ -0,0 +1,20 @@ +stdout 0 +stderr 0 +stdout 1 +stdout 2 +stderr 1 +stdout 3 +stderr 2 +stderr 3 +stdout 4 +stderr 4 +stdout 5 +stderr 5 +stdout 6 +stderr 6 +stdout 7 +stderr 7 +stdout 8 +stderr 8 +stdout 9 +stderr 9 diff --git a/www/node_modules/exit/test/fixtures/10-stdout.txt b/www/node_modules/exit/test/fixtures/10-stdout.txt new file mode 100644 index 0000000..1ce90dc --- /dev/null +++ b/www/node_modules/exit/test/fixtures/10-stdout.txt @@ -0,0 +1,10 @@ +stdout 0 +stdout 1 +stdout 2 +stdout 3 +stdout 4 +stdout 5 +stdout 6 +stdout 7 +stdout 8 +stdout 9 diff --git a/www/node_modules/exit/test/fixtures/100-stderr.txt b/www/node_modules/exit/test/fixtures/100-stderr.txt new file mode 100644 index 0000000..3a78c85 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/100-stderr.txt @@ -0,0 +1,100 @@ +stderr 0 +stderr 1 +stderr 2 +stderr 3 +stderr 4 +stderr 5 +stderr 6 +stderr 7 +stderr 8 +stderr 9 +stderr 10 +stderr 11 +stderr 12 +stderr 13 +stderr 14 +stderr 15 +stderr 16 +stderr 17 +stderr 18 +stderr 19 +stderr 20 +stderr 21 +stderr 22 +stderr 23 +stderr 24 +stderr 25 +stderr 26 +stderr 27 +stderr 28 +stderr 29 +stderr 30 +stderr 31 +stderr 32 +stderr 33 +stderr 34 +stderr 35 +stderr 36 +stderr 37 +stderr 38 +stderr 39 +stderr 40 +stderr 41 +stderr 42 +stderr 43 +stderr 44 +stderr 45 +stderr 46 +stderr 47 +stderr 48 +stderr 49 +stderr 50 +stderr 51 +stderr 52 +stderr 53 +stderr 54 +stderr 55 +stderr 56 +stderr 57 +stderr 58 +stderr 59 +stderr 60 +stderr 61 +stderr 62 +stderr 63 +stderr 64 +stderr 65 +stderr 66 +stderr 67 +stderr 68 +stderr 69 +stderr 70 +stderr 71 +stderr 72 +stderr 73 +stderr 74 +stderr 75 +stderr 76 +stderr 77 +stderr 78 +stderr 79 +stderr 80 +stderr 81 +stderr 82 +stderr 83 +stderr 84 +stderr 85 +stderr 86 +stderr 87 +stderr 88 +stderr 89 +stderr 90 +stderr 91 +stderr 92 +stderr 93 +stderr 94 +stderr 95 +stderr 96 +stderr 97 +stderr 98 +stderr 99 diff --git a/www/node_modules/exit/test/fixtures/100-stdout-stderr.txt b/www/node_modules/exit/test/fixtures/100-stdout-stderr.txt new file mode 100644 index 0000000..65f35f4 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/100-stdout-stderr.txt @@ -0,0 +1,200 @@ +stdout 0 +stderr 0 +stdout 1 +stderr 1 +stdout 2 +stderr 2 +stdout 3 +stderr 3 +stdout 4 +stderr 4 +stdout 5 +stderr 5 +stdout 6 +stderr 6 +stdout 7 +stderr 7 +stdout 8 +stderr 8 +stdout 9 +stderr 9 +stdout 10 +stderr 10 +stdout 11 +stderr 11 +stdout 12 +stderr 12 +stdout 13 +stderr 13 +stdout 14 +stderr 14 +stdout 15 +stderr 15 +stdout 16 +stderr 16 +stdout 17 +stderr 17 +stdout 18 +stderr 18 +stdout 19 +stderr 19 +stdout 20 +stderr 20 +stdout 21 +stderr 21 +stdout 22 +stderr 22 +stdout 23 +stderr 23 +stdout 24 +stderr 24 +stdout 25 +stderr 25 +stdout 26 +stderr 26 +stdout 27 +stderr 27 +stdout 28 +stderr 28 +stdout 29 +stderr 29 +stdout 30 +stderr 30 +stdout 31 +stderr 31 +stdout 32 +stderr 32 +stdout 33 +stderr 33 +stdout 34 +stderr 34 +stdout 35 +stderr 35 +stdout 36 +stderr 36 +stdout 37 +stderr 37 +stdout 38 +stderr 38 +stdout 39 +stderr 39 +stdout 40 +stderr 40 +stdout 41 +stderr 41 +stdout 42 +stderr 42 +stdout 43 +stderr 43 +stdout 44 +stderr 44 +stdout 45 +stderr 45 +stdout 46 +stderr 46 +stdout 47 +stderr 47 +stdout 48 +stderr 48 +stdout 49 +stderr 49 +stdout 50 +stderr 50 +stdout 51 +stderr 51 +stdout 52 +stderr 52 +stdout 53 +stderr 53 +stdout 54 +stderr 54 +stdout 55 +stderr 55 +stdout 56 +stderr 56 +stdout 57 +stderr 57 +stdout 58 +stderr 58 +stdout 59 +stderr 59 +stdout 60 +stderr 60 +stdout 61 +stderr 61 +stdout 62 +stderr 62 +stdout 63 +stderr 63 +stdout 64 +stderr 64 +stdout 65 +stderr 65 +stdout 66 +stderr 66 +stdout 67 +stderr 67 +stdout 68 +stderr 68 +stdout 69 +stderr 69 +stdout 70 +stderr 70 +stdout 71 +stderr 71 +stdout 72 +stderr 72 +stdout 73 +stderr 73 +stdout 74 +stderr 74 +stdout 75 +stderr 75 +stdout 76 +stderr 76 +stdout 77 +stderr 77 +stdout 78 +stderr 78 +stdout 79 +stderr 79 +stdout 80 +stderr 80 +stdout 81 +stderr 81 +stdout 82 +stderr 82 +stdout 83 +stderr 83 +stdout 84 +stderr 84 +stdout 85 +stderr 85 +stdout 86 +stderr 86 +stdout 87 +stderr 87 +stdout 88 +stderr 88 +stdout 89 +stderr 89 +stdout 90 +stderr 90 +stdout 91 +stderr 91 +stdout 92 +stderr 92 +stdout 93 +stderr 93 +stdout 94 +stderr 94 +stdout 95 +stderr 95 +stdout 96 +stderr 96 +stdout 97 +stderr 97 +stdout 98 +stderr 98 +stdout 99 +stderr 99 diff --git a/www/node_modules/exit/test/fixtures/100-stdout.txt b/www/node_modules/exit/test/fixtures/100-stdout.txt new file mode 100644 index 0000000..5d9cac2 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/100-stdout.txt @@ -0,0 +1,100 @@ +stdout 0 +stdout 1 +stdout 2 +stdout 3 +stdout 4 +stdout 5 +stdout 6 +stdout 7 +stdout 8 +stdout 9 +stdout 10 +stdout 11 +stdout 12 +stdout 13 +stdout 14 +stdout 15 +stdout 16 +stdout 17 +stdout 18 +stdout 19 +stdout 20 +stdout 21 +stdout 22 +stdout 23 +stdout 24 +stdout 25 +stdout 26 +stdout 27 +stdout 28 +stdout 29 +stdout 30 +stdout 31 +stdout 32 +stdout 33 +stdout 34 +stdout 35 +stdout 36 +stdout 37 +stdout 38 +stdout 39 +stdout 40 +stdout 41 +stdout 42 +stdout 43 +stdout 44 +stdout 45 +stdout 46 +stdout 47 +stdout 48 +stdout 49 +stdout 50 +stdout 51 +stdout 52 +stdout 53 +stdout 54 +stdout 55 +stdout 56 +stdout 57 +stdout 58 +stdout 59 +stdout 60 +stdout 61 +stdout 62 +stdout 63 +stdout 64 +stdout 65 +stdout 66 +stdout 67 +stdout 68 +stdout 69 +stdout 70 +stdout 71 +stdout 72 +stdout 73 +stdout 74 +stdout 75 +stdout 76 +stdout 77 +stdout 78 +stdout 79 +stdout 80 +stdout 81 +stdout 82 +stdout 83 +stdout 84 +stdout 85 +stdout 86 +stdout 87 +stdout 88 +stdout 89 +stdout 90 +stdout 91 +stdout 92 +stdout 93 +stdout 94 +stdout 95 +stdout 96 +stdout 97 +stdout 98 +stdout 99 diff --git a/www/node_modules/exit/test/fixtures/1000-stderr.txt b/www/node_modules/exit/test/fixtures/1000-stderr.txt new file mode 100644 index 0000000..d637510 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/1000-stderr.txt @@ -0,0 +1,1000 @@ +stderr 0 +stderr 1 +stderr 2 +stderr 3 +stderr 4 +stderr 5 +stderr 6 +stderr 7 +stderr 8 +stderr 9 +stderr 10 +stderr 11 +stderr 12 +stderr 13 +stderr 14 +stderr 15 +stderr 16 +stderr 17 +stderr 18 +stderr 19 +stderr 20 +stderr 21 +stderr 22 +stderr 23 +stderr 24 +stderr 25 +stderr 26 +stderr 27 +stderr 28 +stderr 29 +stderr 30 +stderr 31 +stderr 32 +stderr 33 +stderr 34 +stderr 35 +stderr 36 +stderr 37 +stderr 38 +stderr 39 +stderr 40 +stderr 41 +stderr 42 +stderr 43 +stderr 44 +stderr 45 +stderr 46 +stderr 47 +stderr 48 +stderr 49 +stderr 50 +stderr 51 +stderr 52 +stderr 53 +stderr 54 +stderr 55 +stderr 56 +stderr 57 +stderr 58 +stderr 59 +stderr 60 +stderr 61 +stderr 62 +stderr 63 +stderr 64 +stderr 65 +stderr 66 +stderr 67 +stderr 68 +stderr 69 +stderr 70 +stderr 71 +stderr 72 +stderr 73 +stderr 74 +stderr 75 +stderr 76 +stderr 77 +stderr 78 +stderr 79 +stderr 80 +stderr 81 +stderr 82 +stderr 83 +stderr 84 +stderr 85 +stderr 86 +stderr 87 +stderr 88 +stderr 89 +stderr 90 +stderr 91 +stderr 92 +stderr 93 +stderr 94 +stderr 95 +stderr 96 +stderr 97 +stderr 98 +stderr 99 +stderr 100 +stderr 101 +stderr 102 +stderr 103 +stderr 104 +stderr 105 +stderr 106 +stderr 107 +stderr 108 +stderr 109 +stderr 110 +stderr 111 +stderr 112 +stderr 113 +stderr 114 +stderr 115 +stderr 116 +stderr 117 +stderr 118 +stderr 119 +stderr 120 +stderr 121 +stderr 122 +stderr 123 +stderr 124 +stderr 125 +stderr 126 +stderr 127 +stderr 128 +stderr 129 +stderr 130 +stderr 131 +stderr 132 +stderr 133 +stderr 134 +stderr 135 +stderr 136 +stderr 137 +stderr 138 +stderr 139 +stderr 140 +stderr 141 +stderr 142 +stderr 143 +stderr 144 +stderr 145 +stderr 146 +stderr 147 +stderr 148 +stderr 149 +stderr 150 +stderr 151 +stderr 152 +stderr 153 +stderr 154 +stderr 155 +stderr 156 +stderr 157 +stderr 158 +stderr 159 +stderr 160 +stderr 161 +stderr 162 +stderr 163 +stderr 164 +stderr 165 +stderr 166 +stderr 167 +stderr 168 +stderr 169 +stderr 170 +stderr 171 +stderr 172 +stderr 173 +stderr 174 +stderr 175 +stderr 176 +stderr 177 +stderr 178 +stderr 179 +stderr 180 +stderr 181 +stderr 182 +stderr 183 +stderr 184 +stderr 185 +stderr 186 +stderr 187 +stderr 188 +stderr 189 +stderr 190 +stderr 191 +stderr 192 +stderr 193 +stderr 194 +stderr 195 +stderr 196 +stderr 197 +stderr 198 +stderr 199 +stderr 200 +stderr 201 +stderr 202 +stderr 203 +stderr 204 +stderr 205 +stderr 206 +stderr 207 +stderr 208 +stderr 209 +stderr 210 +stderr 211 +stderr 212 +stderr 213 +stderr 214 +stderr 215 +stderr 216 +stderr 217 +stderr 218 +stderr 219 +stderr 220 +stderr 221 +stderr 222 +stderr 223 +stderr 224 +stderr 225 +stderr 226 +stderr 227 +stderr 228 +stderr 229 +stderr 230 +stderr 231 +stderr 232 +stderr 233 +stderr 234 +stderr 235 +stderr 236 +stderr 237 +stderr 238 +stderr 239 +stderr 240 +stderr 241 +stderr 242 +stderr 243 +stderr 244 +stderr 245 +stderr 246 +stderr 247 +stderr 248 +stderr 249 +stderr 250 +stderr 251 +stderr 252 +stderr 253 +stderr 254 +stderr 255 +stderr 256 +stderr 257 +stderr 258 +stderr 259 +stderr 260 +stderr 261 +stderr 262 +stderr 263 +stderr 264 +stderr 265 +stderr 266 +stderr 267 +stderr 268 +stderr 269 +stderr 270 +stderr 271 +stderr 272 +stderr 273 +stderr 274 +stderr 275 +stderr 276 +stderr 277 +stderr 278 +stderr 279 +stderr 280 +stderr 281 +stderr 282 +stderr 283 +stderr 284 +stderr 285 +stderr 286 +stderr 287 +stderr 288 +stderr 289 +stderr 290 +stderr 291 +stderr 292 +stderr 293 +stderr 294 +stderr 295 +stderr 296 +stderr 297 +stderr 298 +stderr 299 +stderr 300 +stderr 301 +stderr 302 +stderr 303 +stderr 304 +stderr 305 +stderr 306 +stderr 307 +stderr 308 +stderr 309 +stderr 310 +stderr 311 +stderr 312 +stderr 313 +stderr 314 +stderr 315 +stderr 316 +stderr 317 +stderr 318 +stderr 319 +stderr 320 +stderr 321 +stderr 322 +stderr 323 +stderr 324 +stderr 325 +stderr 326 +stderr 327 +stderr 328 +stderr 329 +stderr 330 +stderr 331 +stderr 332 +stderr 333 +stderr 334 +stderr 335 +stderr 336 +stderr 337 +stderr 338 +stderr 339 +stderr 340 +stderr 341 +stderr 342 +stderr 343 +stderr 344 +stderr 345 +stderr 346 +stderr 347 +stderr 348 +stderr 349 +stderr 350 +stderr 351 +stderr 352 +stderr 353 +stderr 354 +stderr 355 +stderr 356 +stderr 357 +stderr 358 +stderr 359 +stderr 360 +stderr 361 +stderr 362 +stderr 363 +stderr 364 +stderr 365 +stderr 366 +stderr 367 +stderr 368 +stderr 369 +stderr 370 +stderr 371 +stderr 372 +stderr 373 +stderr 374 +stderr 375 +stderr 376 +stderr 377 +stderr 378 +stderr 379 +stderr 380 +stderr 381 +stderr 382 +stderr 383 +stderr 384 +stderr 385 +stderr 386 +stderr 387 +stderr 388 +stderr 389 +stderr 390 +stderr 391 +stderr 392 +stderr 393 +stderr 394 +stderr 395 +stderr 396 +stderr 397 +stderr 398 +stderr 399 +stderr 400 +stderr 401 +stderr 402 +stderr 403 +stderr 404 +stderr 405 +stderr 406 +stderr 407 +stderr 408 +stderr 409 +stderr 410 +stderr 411 +stderr 412 +stderr 413 +stderr 414 +stderr 415 +stderr 416 +stderr 417 +stderr 418 +stderr 419 +stderr 420 +stderr 421 +stderr 422 +stderr 423 +stderr 424 +stderr 425 +stderr 426 +stderr 427 +stderr 428 +stderr 429 +stderr 430 +stderr 431 +stderr 432 +stderr 433 +stderr 434 +stderr 435 +stderr 436 +stderr 437 +stderr 438 +stderr 439 +stderr 440 +stderr 441 +stderr 442 +stderr 443 +stderr 444 +stderr 445 +stderr 446 +stderr 447 +stderr 448 +stderr 449 +stderr 450 +stderr 451 +stderr 452 +stderr 453 +stderr 454 +stderr 455 +stderr 456 +stderr 457 +stderr 458 +stderr 459 +stderr 460 +stderr 461 +stderr 462 +stderr 463 +stderr 464 +stderr 465 +stderr 466 +stderr 467 +stderr 468 +stderr 469 +stderr 470 +stderr 471 +stderr 472 +stderr 473 +stderr 474 +stderr 475 +stderr 476 +stderr 477 +stderr 478 +stderr 479 +stderr 480 +stderr 481 +stderr 482 +stderr 483 +stderr 484 +stderr 485 +stderr 486 +stderr 487 +stderr 488 +stderr 489 +stderr 490 +stderr 491 +stderr 492 +stderr 493 +stderr 494 +stderr 495 +stderr 496 +stderr 497 +stderr 498 +stderr 499 +stderr 500 +stderr 501 +stderr 502 +stderr 503 +stderr 504 +stderr 505 +stderr 506 +stderr 507 +stderr 508 +stderr 509 +stderr 510 +stderr 511 +stderr 512 +stderr 513 +stderr 514 +stderr 515 +stderr 516 +stderr 517 +stderr 518 +stderr 519 +stderr 520 +stderr 521 +stderr 522 +stderr 523 +stderr 524 +stderr 525 +stderr 526 +stderr 527 +stderr 528 +stderr 529 +stderr 530 +stderr 531 +stderr 532 +stderr 533 +stderr 534 +stderr 535 +stderr 536 +stderr 537 +stderr 538 +stderr 539 +stderr 540 +stderr 541 +stderr 542 +stderr 543 +stderr 544 +stderr 545 +stderr 546 +stderr 547 +stderr 548 +stderr 549 +stderr 550 +stderr 551 +stderr 552 +stderr 553 +stderr 554 +stderr 555 +stderr 556 +stderr 557 +stderr 558 +stderr 559 +stderr 560 +stderr 561 +stderr 562 +stderr 563 +stderr 564 +stderr 565 +stderr 566 +stderr 567 +stderr 568 +stderr 569 +stderr 570 +stderr 571 +stderr 572 +stderr 573 +stderr 574 +stderr 575 +stderr 576 +stderr 577 +stderr 578 +stderr 579 +stderr 580 +stderr 581 +stderr 582 +stderr 583 +stderr 584 +stderr 585 +stderr 586 +stderr 587 +stderr 588 +stderr 589 +stderr 590 +stderr 591 +stderr 592 +stderr 593 +stderr 594 +stderr 595 +stderr 596 +stderr 597 +stderr 598 +stderr 599 +stderr 600 +stderr 601 +stderr 602 +stderr 603 +stderr 604 +stderr 605 +stderr 606 +stderr 607 +stderr 608 +stderr 609 +stderr 610 +stderr 611 +stderr 612 +stderr 613 +stderr 614 +stderr 615 +stderr 616 +stderr 617 +stderr 618 +stderr 619 +stderr 620 +stderr 621 +stderr 622 +stderr 623 +stderr 624 +stderr 625 +stderr 626 +stderr 627 +stderr 628 +stderr 629 +stderr 630 +stderr 631 +stderr 632 +stderr 633 +stderr 634 +stderr 635 +stderr 636 +stderr 637 +stderr 638 +stderr 639 +stderr 640 +stderr 641 +stderr 642 +stderr 643 +stderr 644 +stderr 645 +stderr 646 +stderr 647 +stderr 648 +stderr 649 +stderr 650 +stderr 651 +stderr 652 +stderr 653 +stderr 654 +stderr 655 +stderr 656 +stderr 657 +stderr 658 +stderr 659 +stderr 660 +stderr 661 +stderr 662 +stderr 663 +stderr 664 +stderr 665 +stderr 666 +stderr 667 +stderr 668 +stderr 669 +stderr 670 +stderr 671 +stderr 672 +stderr 673 +stderr 674 +stderr 675 +stderr 676 +stderr 677 +stderr 678 +stderr 679 +stderr 680 +stderr 681 +stderr 682 +stderr 683 +stderr 684 +stderr 685 +stderr 686 +stderr 687 +stderr 688 +stderr 689 +stderr 690 +stderr 691 +stderr 692 +stderr 693 +stderr 694 +stderr 695 +stderr 696 +stderr 697 +stderr 698 +stderr 699 +stderr 700 +stderr 701 +stderr 702 +stderr 703 +stderr 704 +stderr 705 +stderr 706 +stderr 707 +stderr 708 +stderr 709 +stderr 710 +stderr 711 +stderr 712 +stderr 713 +stderr 714 +stderr 715 +stderr 716 +stderr 717 +stderr 718 +stderr 719 +stderr 720 +stderr 721 +stderr 722 +stderr 723 +stderr 724 +stderr 725 +stderr 726 +stderr 727 +stderr 728 +stderr 729 +stderr 730 +stderr 731 +stderr 732 +stderr 733 +stderr 734 +stderr 735 +stderr 736 +stderr 737 +stderr 738 +stderr 739 +stderr 740 +stderr 741 +stderr 742 +stderr 743 +stderr 744 +stderr 745 +stderr 746 +stderr 747 +stderr 748 +stderr 749 +stderr 750 +stderr 751 +stderr 752 +stderr 753 +stderr 754 +stderr 755 +stderr 756 +stderr 757 +stderr 758 +stderr 759 +stderr 760 +stderr 761 +stderr 762 +stderr 763 +stderr 764 +stderr 765 +stderr 766 +stderr 767 +stderr 768 +stderr 769 +stderr 770 +stderr 771 +stderr 772 +stderr 773 +stderr 774 +stderr 775 +stderr 776 +stderr 777 +stderr 778 +stderr 779 +stderr 780 +stderr 781 +stderr 782 +stderr 783 +stderr 784 +stderr 785 +stderr 786 +stderr 787 +stderr 788 +stderr 789 +stderr 790 +stderr 791 +stderr 792 +stderr 793 +stderr 794 +stderr 795 +stderr 796 +stderr 797 +stderr 798 +stderr 799 +stderr 800 +stderr 801 +stderr 802 +stderr 803 +stderr 804 +stderr 805 +stderr 806 +stderr 807 +stderr 808 +stderr 809 +stderr 810 +stderr 811 +stderr 812 +stderr 813 +stderr 814 +stderr 815 +stderr 816 +stderr 817 +stderr 818 +stderr 819 +stderr 820 +stderr 821 +stderr 822 +stderr 823 +stderr 824 +stderr 825 +stderr 826 +stderr 827 +stderr 828 +stderr 829 +stderr 830 +stderr 831 +stderr 832 +stderr 833 +stderr 834 +stderr 835 +stderr 836 +stderr 837 +stderr 838 +stderr 839 +stderr 840 +stderr 841 +stderr 842 +stderr 843 +stderr 844 +stderr 845 +stderr 846 +stderr 847 +stderr 848 +stderr 849 +stderr 850 +stderr 851 +stderr 852 +stderr 853 +stderr 854 +stderr 855 +stderr 856 +stderr 857 +stderr 858 +stderr 859 +stderr 860 +stderr 861 +stderr 862 +stderr 863 +stderr 864 +stderr 865 +stderr 866 +stderr 867 +stderr 868 +stderr 869 +stderr 870 +stderr 871 +stderr 872 +stderr 873 +stderr 874 +stderr 875 +stderr 876 +stderr 877 +stderr 878 +stderr 879 +stderr 880 +stderr 881 +stderr 882 +stderr 883 +stderr 884 +stderr 885 +stderr 886 +stderr 887 +stderr 888 +stderr 889 +stderr 890 +stderr 891 +stderr 892 +stderr 893 +stderr 894 +stderr 895 +stderr 896 +stderr 897 +stderr 898 +stderr 899 +stderr 900 +stderr 901 +stderr 902 +stderr 903 +stderr 904 +stderr 905 +stderr 906 +stderr 907 +stderr 908 +stderr 909 +stderr 910 +stderr 911 +stderr 912 +stderr 913 +stderr 914 +stderr 915 +stderr 916 +stderr 917 +stderr 918 +stderr 919 +stderr 920 +stderr 921 +stderr 922 +stderr 923 +stderr 924 +stderr 925 +stderr 926 +stderr 927 +stderr 928 +stderr 929 +stderr 930 +stderr 931 +stderr 932 +stderr 933 +stderr 934 +stderr 935 +stderr 936 +stderr 937 +stderr 938 +stderr 939 +stderr 940 +stderr 941 +stderr 942 +stderr 943 +stderr 944 +stderr 945 +stderr 946 +stderr 947 +stderr 948 +stderr 949 +stderr 950 +stderr 951 +stderr 952 +stderr 953 +stderr 954 +stderr 955 +stderr 956 +stderr 957 +stderr 958 +stderr 959 +stderr 960 +stderr 961 +stderr 962 +stderr 963 +stderr 964 +stderr 965 +stderr 966 +stderr 967 +stderr 968 +stderr 969 +stderr 970 +stderr 971 +stderr 972 +stderr 973 +stderr 974 +stderr 975 +stderr 976 +stderr 977 +stderr 978 +stderr 979 +stderr 980 +stderr 981 +stderr 982 +stderr 983 +stderr 984 +stderr 985 +stderr 986 +stderr 987 +stderr 988 +stderr 989 +stderr 990 +stderr 991 +stderr 992 +stderr 993 +stderr 994 +stderr 995 +stderr 996 +stderr 997 +stderr 998 +stderr 999 diff --git a/www/node_modules/exit/test/fixtures/1000-stdout-stderr.txt b/www/node_modules/exit/test/fixtures/1000-stdout-stderr.txt new file mode 100644 index 0000000..4fde2b4 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/1000-stdout-stderr.txt @@ -0,0 +1,2000 @@ +stdout 0 +stderr 0 +stdout 1 +stderr 1 +stdout 2 +stderr 2 +stdout 3 +stderr 3 +stdout 4 +stderr 4 +stdout 5 +stderr 5 +stdout 6 +stderr 6 +stdout 7 +stderr 7 +stdout 8 +stderr 8 +stdout 9 +stderr 9 +stdout 10 +stderr 10 +stdout 11 +stderr 11 +stdout 12 +stderr 12 +stdout 13 +stderr 13 +stdout 14 +stderr 14 +stdout 15 +stderr 15 +stdout 16 +stderr 16 +stdout 17 +stderr 17 +stdout 18 +stderr 18 +stdout 19 +stderr 19 +stdout 20 +stderr 20 +stdout 21 +stderr 21 +stdout 22 +stderr 22 +stdout 23 +stderr 23 +stdout 24 +stderr 24 +stdout 25 +stderr 25 +stdout 26 +stderr 26 +stdout 27 +stderr 27 +stdout 28 +stderr 28 +stdout 29 +stderr 29 +stdout 30 +stderr 30 +stdout 31 +stderr 31 +stdout 32 +stderr 32 +stdout 33 +stderr 33 +stdout 34 +stderr 34 +stdout 35 +stderr 35 +stdout 36 +stderr 36 +stdout 37 +stderr 37 +stdout 38 +stderr 38 +stdout 39 +stderr 39 +stdout 40 +stderr 40 +stdout 41 +stderr 41 +stdout 42 +stderr 42 +stdout 43 +stderr 43 +stdout 44 +stderr 44 +stdout 45 +stderr 45 +stdout 46 +stderr 46 +stdout 47 +stderr 47 +stdout 48 +stderr 48 +stdout 49 +stderr 49 +stdout 50 +stderr 50 +stdout 51 +stderr 51 +stdout 52 +stderr 52 +stdout 53 +stderr 53 +stdout 54 +stderr 54 +stdout 55 +stderr 55 +stdout 56 +stderr 56 +stdout 57 +stderr 57 +stdout 58 +stderr 58 +stdout 59 +stderr 59 +stdout 60 +stderr 60 +stdout 61 +stderr 61 +stdout 62 +stderr 62 +stdout 63 +stderr 63 +stdout 64 +stderr 64 +stdout 65 +stderr 65 +stdout 66 +stderr 66 +stdout 67 +stderr 67 +stdout 68 +stderr 68 +stdout 69 +stderr 69 +stdout 70 +stderr 70 +stdout 71 +stderr 71 +stdout 72 +stderr 72 +stdout 73 +stderr 73 +stdout 74 +stderr 74 +stdout 75 +stderr 75 +stdout 76 +stderr 76 +stdout 77 +stderr 77 +stdout 78 +stderr 78 +stdout 79 +stderr 79 +stdout 80 +stderr 80 +stdout 81 +stderr 81 +stdout 82 +stderr 82 +stdout 83 +stderr 83 +stdout 84 +stderr 84 +stdout 85 +stderr 85 +stdout 86 +stderr 86 +stdout 87 +stderr 87 +stdout 88 +stderr 88 +stdout 89 +stderr 89 +stdout 90 +stderr 90 +stdout 91 +stderr 91 +stdout 92 +stderr 92 +stdout 93 +stderr 93 +stdout 94 +stderr 94 +stdout 95 +stderr 95 +stdout 96 +stderr 96 +stdout 97 +stderr 97 +stdout 98 +stderr 98 +stdout 99 +stderr 99 +stdout 100 +stderr 100 +stdout 101 +stderr 101 +stdout 102 +stderr 102 +stdout 103 +stderr 103 +stdout 104 +stderr 104 +stdout 105 +stderr 105 +stdout 106 +stderr 106 +stdout 107 +stderr 107 +stdout 108 +stderr 108 +stdout 109 +stderr 109 +stdout 110 +stderr 110 +stdout 111 +stderr 111 +stdout 112 +stderr 112 +stdout 113 +stderr 113 +stdout 114 +stderr 114 +stdout 115 +stderr 115 +stdout 116 +stderr 116 +stdout 117 +stderr 117 +stdout 118 +stderr 118 +stdout 119 +stderr 119 +stdout 120 +stderr 120 +stdout 121 +stderr 121 +stdout 122 +stderr 122 +stdout 123 +stderr 123 +stdout 124 +stderr 124 +stdout 125 +stderr 125 +stdout 126 +stderr 126 +stdout 127 +stderr 127 +stdout 128 +stderr 128 +stdout 129 +stderr 129 +stdout 130 +stderr 130 +stdout 131 +stderr 131 +stdout 132 +stderr 132 +stdout 133 +stderr 133 +stdout 134 +stderr 134 +stdout 135 +stderr 135 +stdout 136 +stderr 136 +stdout 137 +stderr 137 +stdout 138 +stderr 138 +stdout 139 +stderr 139 +stdout 140 +stderr 140 +stdout 141 +stderr 141 +stdout 142 +stderr 142 +stdout 143 +stderr 143 +stdout 144 +stderr 144 +stdout 145 +stderr 145 +stdout 146 +stderr 146 +stdout 147 +stderr 147 +stdout 148 +stderr 148 +stdout 149 +stderr 149 +stdout 150 +stderr 150 +stdout 151 +stderr 151 +stdout 152 +stderr 152 +stdout 153 +stderr 153 +stdout 154 +stderr 154 +stdout 155 +stderr 155 +stdout 156 +stderr 156 +stdout 157 +stderr 157 +stdout 158 +stderr 158 +stdout 159 +stderr 159 +stdout 160 +stderr 160 +stdout 161 +stderr 161 +stdout 162 +stderr 162 +stdout 163 +stderr 163 +stdout 164 +stderr 164 +stdout 165 +stderr 165 +stdout 166 +stderr 166 +stdout 167 +stderr 167 +stdout 168 +stderr 168 +stdout 169 +stderr 169 +stdout 170 +stderr 170 +stdout 171 +stderr 171 +stdout 172 +stderr 172 +stdout 173 +stderr 173 +stdout 174 +stderr 174 +stdout 175 +stderr 175 +stdout 176 +stderr 176 +stdout 177 +stderr 177 +stdout 178 +stderr 178 +stdout 179 +stderr 179 +stdout 180 +stderr 180 +stdout 181 +stderr 181 +stdout 182 +stderr 182 +stdout 183 +stderr 183 +stdout 184 +stderr 184 +stdout 185 +stderr 185 +stdout 186 +stderr 186 +stdout 187 +stderr 187 +stdout 188 +stderr 188 +stdout 189 +stderr 189 +stdout 190 +stderr 190 +stdout 191 +stderr 191 +stdout 192 +stderr 192 +stdout 193 +stderr 193 +stdout 194 +stderr 194 +stdout 195 +stderr 195 +stdout 196 +stderr 196 +stdout 197 +stderr 197 +stdout 198 +stderr 198 +stdout 199 +stderr 199 +stdout 200 +stderr 200 +stdout 201 +stderr 201 +stdout 202 +stderr 202 +stdout 203 +stderr 203 +stdout 204 +stderr 204 +stdout 205 +stderr 205 +stdout 206 +stderr 206 +stdout 207 +stderr 207 +stdout 208 +stderr 208 +stdout 209 +stderr 209 +stdout 210 +stderr 210 +stdout 211 +stderr 211 +stdout 212 +stderr 212 +stdout 213 +stderr 213 +stdout 214 +stderr 214 +stdout 215 +stderr 215 +stdout 216 +stderr 216 +stdout 217 +stderr 217 +stdout 218 +stderr 218 +stdout 219 +stderr 219 +stdout 220 +stderr 220 +stdout 221 +stderr 221 +stdout 222 +stderr 222 +stdout 223 +stderr 223 +stdout 224 +stderr 224 +stdout 225 +stderr 225 +stdout 226 +stderr 226 +stdout 227 +stderr 227 +stdout 228 +stderr 228 +stdout 229 +stderr 229 +stdout 230 +stderr 230 +stdout 231 +stderr 231 +stdout 232 +stderr 232 +stdout 233 +stderr 233 +stdout 234 +stderr 234 +stdout 235 +stderr 235 +stdout 236 +stderr 236 +stdout 237 +stderr 237 +stdout 238 +stderr 238 +stdout 239 +stderr 239 +stdout 240 +stderr 240 +stdout 241 +stderr 241 +stdout 242 +stderr 242 +stdout 243 +stderr 243 +stdout 244 +stderr 244 +stdout 245 +stderr 245 +stdout 246 +stderr 246 +stdout 247 +stderr 247 +stdout 248 +stderr 248 +stdout 249 +stderr 249 +stdout 250 +stderr 250 +stdout 251 +stderr 251 +stdout 252 +stderr 252 +stdout 253 +stderr 253 +stdout 254 +stderr 254 +stdout 255 +stderr 255 +stdout 256 +stderr 256 +stdout 257 +stderr 257 +stdout 258 +stderr 258 +stdout 259 +stderr 259 +stdout 260 +stderr 260 +stdout 261 +stderr 261 +stdout 262 +stderr 262 +stdout 263 +stderr 263 +stdout 264 +stderr 264 +stdout 265 +stderr 265 +stdout 266 +stderr 266 +stdout 267 +stderr 267 +stdout 268 +stderr 268 +stdout 269 +stderr 269 +stdout 270 +stderr 270 +stdout 271 +stderr 271 +stdout 272 +stderr 272 +stdout 273 +stderr 273 +stdout 274 +stderr 274 +stdout 275 +stderr 275 +stdout 276 +stderr 276 +stdout 277 +stderr 277 +stdout 278 +stderr 278 +stdout 279 +stderr 279 +stdout 280 +stderr 280 +stdout 281 +stderr 281 +stdout 282 +stderr 282 +stdout 283 +stderr 283 +stdout 284 +stderr 284 +stdout 285 +stderr 285 +stdout 286 +stderr 286 +stdout 287 +stderr 287 +stdout 288 +stderr 288 +stdout 289 +stderr 289 +stdout 290 +stderr 290 +stdout 291 +stderr 291 +stdout 292 +stderr 292 +stdout 293 +stderr 293 +stdout 294 +stderr 294 +stdout 295 +stderr 295 +stdout 296 +stderr 296 +stdout 297 +stderr 297 +stdout 298 +stderr 298 +stdout 299 +stderr 299 +stdout 300 +stderr 300 +stdout 301 +stderr 301 +stdout 302 +stderr 302 +stdout 303 +stderr 303 +stdout 304 +stderr 304 +stdout 305 +stderr 305 +stdout 306 +stderr 306 +stdout 307 +stderr 307 +stdout 308 +stderr 308 +stdout 309 +stderr 309 +stdout 310 +stderr 310 +stdout 311 +stderr 311 +stdout 312 +stderr 312 +stdout 313 +stderr 313 +stdout 314 +stderr 314 +stdout 315 +stderr 315 +stdout 316 +stderr 316 +stdout 317 +stderr 317 +stdout 318 +stderr 318 +stdout 319 +stderr 319 +stdout 320 +stderr 320 +stdout 321 +stderr 321 +stdout 322 +stderr 322 +stdout 323 +stderr 323 +stdout 324 +stderr 324 +stdout 325 +stderr 325 +stdout 326 +stderr 326 +stdout 327 +stderr 327 +stdout 328 +stderr 328 +stdout 329 +stderr 329 +stdout 330 +stderr 330 +stdout 331 +stderr 331 +stdout 332 +stderr 332 +stdout 333 +stderr 333 +stdout 334 +stderr 334 +stdout 335 +stderr 335 +stdout 336 +stderr 336 +stdout 337 +stderr 337 +stdout 338 +stderr 338 +stdout 339 +stderr 339 +stdout 340 +stderr 340 +stdout 341 +stderr 341 +stdout 342 +stderr 342 +stdout 343 +stderr 343 +stdout 344 +stderr 344 +stdout 345 +stderr 345 +stdout 346 +stderr 346 +stdout 347 +stderr 347 +stdout 348 +stderr 348 +stdout 349 +stderr 349 +stdout 350 +stderr 350 +stdout 351 +stderr 351 +stdout 352 +stderr 352 +stdout 353 +stderr 353 +stdout 354 +stderr 354 +stdout 355 +stderr 355 +stdout 356 +stderr 356 +stdout 357 +stderr 357 +stdout 358 +stderr 358 +stdout 359 +stderr 359 +stdout 360 +stderr 360 +stdout 361 +stderr 361 +stdout 362 +stderr 362 +stdout 363 +stderr 363 +stdout 364 +stderr 364 +stdout 365 +stderr 365 +stdout 366 +stderr 366 +stdout 367 +stderr 367 +stdout 368 +stderr 368 +stdout 369 +stderr 369 +stdout 370 +stderr 370 +stdout 371 +stderr 371 +stdout 372 +stderr 372 +stdout 373 +stderr 373 +stdout 374 +stderr 374 +stdout 375 +stderr 375 +stdout 376 +stderr 376 +stdout 377 +stderr 377 +stdout 378 +stderr 378 +stdout 379 +stderr 379 +stdout 380 +stderr 380 +stdout 381 +stderr 381 +stdout 382 +stderr 382 +stdout 383 +stderr 383 +stdout 384 +stderr 384 +stdout 385 +stderr 385 +stdout 386 +stderr 386 +stdout 387 +stderr 387 +stdout 388 +stderr 388 +stdout 389 +stderr 389 +stdout 390 +stderr 390 +stdout 391 +stderr 391 +stdout 392 +stderr 392 +stdout 393 +stderr 393 +stdout 394 +stderr 394 +stdout 395 +stderr 395 +stdout 396 +stderr 396 +stdout 397 +stderr 397 +stdout 398 +stderr 398 +stdout 399 +stderr 399 +stdout 400 +stderr 400 +stdout 401 +stderr 401 +stdout 402 +stderr 402 +stdout 403 +stderr 403 +stdout 404 +stderr 404 +stdout 405 +stderr 405 +stdout 406 +stderr 406 +stdout 407 +stderr 407 +stdout 408 +stderr 408 +stdout 409 +stderr 409 +stdout 410 +stderr 410 +stdout 411 +stderr 411 +stdout 412 +stderr 412 +stdout 413 +stderr 413 +stdout 414 +stderr 414 +stdout 415 +stderr 415 +stdout 416 +stderr 416 +stdout 417 +stderr 417 +stdout 418 +stderr 418 +stdout 419 +stderr 419 +stdout 420 +stderr 420 +stdout 421 +stderr 421 +stdout 422 +stderr 422 +stdout 423 +stderr 423 +stdout 424 +stderr 424 +stdout 425 +stderr 425 +stdout 426 +stderr 426 +stdout 427 +stderr 427 +stdout 428 +stderr 428 +stdout 429 +stderr 429 +stdout 430 +stderr 430 +stdout 431 +stderr 431 +stdout 432 +stderr 432 +stdout 433 +stderr 433 +stdout 434 +stderr 434 +stdout 435 +stderr 435 +stdout 436 +stderr 436 +stdout 437 +stderr 437 +stdout 438 +stderr 438 +stdout 439 +stderr 439 +stdout 440 +stderr 440 +stdout 441 +stderr 441 +stdout 442 +stderr 442 +stdout 443 +stderr 443 +stdout 444 +stderr 444 +stdout 445 +stderr 445 +stdout 446 +stderr 446 +stdout 447 +stderr 447 +stdout 448 +stderr 448 +stdout 449 +stderr 449 +stdout 450 +stderr 450 +stdout 451 +stderr 451 +stdout 452 +stderr 452 +stdout 453 +stderr 453 +stdout 454 +stderr 454 +stdout 455 +stderr 455 +stdout 456 +stderr 456 +stdout 457 +stderr 457 +stdout 458 +stderr 458 +stdout 459 +stderr 459 +stdout 460 +stderr 460 +stdout 461 +stderr 461 +stdout 462 +stderr 462 +stdout 463 +stderr 463 +stdout 464 +stderr 464 +stdout 465 +stderr 465 +stdout 466 +stderr 466 +stdout 467 +stderr 467 +stdout 468 +stderr 468 +stdout 469 +stderr 469 +stdout 470 +stderr 470 +stdout 471 +stderr 471 +stdout 472 +stderr 472 +stdout 473 +stderr 473 +stdout 474 +stderr 474 +stdout 475 +stderr 475 +stdout 476 +stderr 476 +stdout 477 +stderr 477 +stdout 478 +stderr 478 +stdout 479 +stderr 479 +stdout 480 +stderr 480 +stdout 481 +stderr 481 +stdout 482 +stderr 482 +stdout 483 +stderr 483 +stdout 484 +stderr 484 +stdout 485 +stderr 485 +stdout 486 +stderr 486 +stdout 487 +stderr 487 +stdout 488 +stderr 488 +stdout 489 +stderr 489 +stdout 490 +stderr 490 +stdout 491 +stderr 491 +stdout 492 +stderr 492 +stdout 493 +stderr 493 +stdout 494 +stderr 494 +stdout 495 +stderr 495 +stdout 496 +stderr 496 +stdout 497 +stderr 497 +stdout 498 +stderr 498 +stdout 499 +stderr 499 +stdout 500 +stderr 500 +stdout 501 +stderr 501 +stdout 502 +stderr 502 +stdout 503 +stderr 503 +stdout 504 +stderr 504 +stdout 505 +stderr 505 +stdout 506 +stderr 506 +stdout 507 +stderr 507 +stdout 508 +stderr 508 +stdout 509 +stderr 509 +stdout 510 +stderr 510 +stdout 511 +stderr 511 +stdout 512 +stderr 512 +stdout 513 +stderr 513 +stdout 514 +stderr 514 +stdout 515 +stderr 515 +stdout 516 +stderr 516 +stdout 517 +stderr 517 +stdout 518 +stderr 518 +stdout 519 +stderr 519 +stdout 520 +stderr 520 +stdout 521 +stderr 521 +stdout 522 +stderr 522 +stdout 523 +stderr 523 +stdout 524 +stderr 524 +stdout 525 +stderr 525 +stdout 526 +stderr 526 +stdout 527 +stderr 527 +stdout 528 +stderr 528 +stdout 529 +stderr 529 +stdout 530 +stderr 530 +stdout 531 +stderr 531 +stdout 532 +stderr 532 +stdout 533 +stderr 533 +stdout 534 +stderr 534 +stdout 535 +stderr 535 +stdout 536 +stderr 536 +stdout 537 +stderr 537 +stdout 538 +stderr 538 +stdout 539 +stderr 539 +stdout 540 +stderr 540 +stdout 541 +stderr 541 +stdout 542 +stderr 542 +stdout 543 +stderr 543 +stdout 544 +stderr 544 +stdout 545 +stderr 545 +stdout 546 +stderr 546 +stdout 547 +stderr 547 +stdout 548 +stderr 548 +stdout 549 +stderr 549 +stdout 550 +stderr 550 +stdout 551 +stderr 551 +stdout 552 +stderr 552 +stdout 553 +stderr 553 +stdout 554 +stderr 554 +stdout 555 +stderr 555 +stdout 556 +stderr 556 +stdout 557 +stderr 557 +stdout 558 +stderr 558 +stdout 559 +stderr 559 +stdout 560 +stderr 560 +stdout 561 +stderr 561 +stdout 562 +stderr 562 +stdout 563 +stderr 563 +stdout 564 +stderr 564 +stdout 565 +stderr 565 +stdout 566 +stderr 566 +stdout 567 +stderr 567 +stdout 568 +stderr 568 +stdout 569 +stderr 569 +stdout 570 +stderr 570 +stdout 571 +stderr 571 +stdout 572 +stderr 572 +stdout 573 +stderr 573 +stdout 574 +stderr 574 +stdout 575 +stderr 575 +stdout 576 +stderr 576 +stdout 577 +stderr 577 +stdout 578 +stderr 578 +stdout 579 +stderr 579 +stdout 580 +stderr 580 +stdout 581 +stderr 581 +stdout 582 +stderr 582 +stdout 583 +stderr 583 +stdout 584 +stderr 584 +stdout 585 +stderr 585 +stdout 586 +stderr 586 +stdout 587 +stderr 587 +stdout 588 +stderr 588 +stdout 589 +stderr 589 +stdout 590 +stderr 590 +stdout 591 +stderr 591 +stdout 592 +stderr 592 +stdout 593 +stderr 593 +stdout 594 +stderr 594 +stdout 595 +stderr 595 +stdout 596 +stderr 596 +stdout 597 +stderr 597 +stdout 598 +stderr 598 +stdout 599 +stderr 599 +stdout 600 +stderr 600 +stdout 601 +stderr 601 +stdout 602 +stderr 602 +stdout 603 +stderr 603 +stdout 604 +stderr 604 +stdout 605 +stderr 605 +stdout 606 +stderr 606 +stdout 607 +stderr 607 +stdout 608 +stderr 608 +stdout 609 +stderr 609 +stdout 610 +stderr 610 +stdout 611 +stderr 611 +stdout 612 +stderr 612 +stdout 613 +stderr 613 +stdout 614 +stderr 614 +stdout 615 +stderr 615 +stdout 616 +stderr 616 +stdout 617 +stderr 617 +stdout 618 +stderr 618 +stdout 619 +stderr 619 +stdout 620 +stderr 620 +stdout 621 +stderr 621 +stdout 622 +stderr 622 +stdout 623 +stderr 623 +stdout 624 +stderr 624 +stdout 625 +stderr 625 +stdout 626 +stderr 626 +stdout 627 +stderr 627 +stdout 628 +stderr 628 +stdout 629 +stderr 629 +stdout 630 +stderr 630 +stdout 631 +stderr 631 +stdout 632 +stderr 632 +stdout 633 +stderr 633 +stdout 634 +stderr 634 +stdout 635 +stderr 635 +stdout 636 +stderr 636 +stdout 637 +stderr 637 +stdout 638 +stderr 638 +stdout 639 +stderr 639 +stdout 640 +stderr 640 +stdout 641 +stderr 641 +stdout 642 +stderr 642 +stdout 643 +stderr 643 +stdout 644 +stderr 644 +stdout 645 +stderr 645 +stdout 646 +stderr 646 +stdout 647 +stderr 647 +stdout 648 +stderr 648 +stdout 649 +stderr 649 +stdout 650 +stderr 650 +stdout 651 +stderr 651 +stdout 652 +stderr 652 +stdout 653 +stderr 653 +stdout 654 +stderr 654 +stdout 655 +stderr 655 +stdout 656 +stderr 656 +stdout 657 +stderr 657 +stdout 658 +stderr 658 +stdout 659 +stderr 659 +stdout 660 +stderr 660 +stdout 661 +stderr 661 +stdout 662 +stderr 662 +stdout 663 +stderr 663 +stdout 664 +stderr 664 +stdout 665 +stderr 665 +stdout 666 +stderr 666 +stdout 667 +stderr 667 +stdout 668 +stderr 668 +stdout 669 +stderr 669 +stdout 670 +stderr 670 +stdout 671 +stderr 671 +stdout 672 +stderr 672 +stdout 673 +stderr 673 +stdout 674 +stderr 674 +stdout 675 +stderr 675 +stdout 676 +stderr 676 +stdout 677 +stderr 677 +stdout 678 +stderr 678 +stdout 679 +stderr 679 +stdout 680 +stderr 680 +stdout 681 +stderr 681 +stdout 682 +stderr 682 +stdout 683 +stderr 683 +stdout 684 +stderr 684 +stdout 685 +stderr 685 +stdout 686 +stderr 686 +stdout 687 +stderr 687 +stdout 688 +stderr 688 +stdout 689 +stderr 689 +stdout 690 +stderr 690 +stdout 691 +stderr 691 +stdout 692 +stderr 692 +stdout 693 +stderr 693 +stdout 694 +stderr 694 +stdout 695 +stderr 695 +stdout 696 +stderr 696 +stdout 697 +stderr 697 +stdout 698 +stderr 698 +stdout 699 +stderr 699 +stdout 700 +stderr 700 +stdout 701 +stderr 701 +stdout 702 +stderr 702 +stdout 703 +stderr 703 +stdout 704 +stderr 704 +stdout 705 +stderr 705 +stdout 706 +stderr 706 +stdout 707 +stderr 707 +stdout 708 +stderr 708 +stdout 709 +stderr 709 +stdout 710 +stderr 710 +stdout 711 +stderr 711 +stdout 712 +stderr 712 +stdout 713 +stderr 713 +stdout 714 +stderr 714 +stdout 715 +stderr 715 +stdout 716 +stderr 716 +stdout 717 +stderr 717 +stdout 718 +stderr 718 +stdout 719 +stderr 719 +stdout 720 +stderr 720 +stdout 721 +stderr 721 +stdout 722 +stderr 722 +stdout 723 +stderr 723 +stdout 724 +stderr 724 +stdout 725 +stderr 725 +stdout 726 +stderr 726 +stdout 727 +stderr 727 +stdout 728 +stderr 728 +stdout 729 +stderr 729 +stdout 730 +stderr 730 +stdout 731 +stderr 731 +stdout 732 +stderr 732 +stdout 733 +stderr 733 +stdout 734 +stderr 734 +stdout 735 +stderr 735 +stdout 736 +stderr 736 +stdout 737 +stderr 737 +stdout 738 +stderr 738 +stdout 739 +stderr 739 +stdout 740 +stderr 740 +stdout 741 +stderr 741 +stdout 742 +stderr 742 +stdout 743 +stderr 743 +stdout 744 +stderr 744 +stdout 745 +stderr 745 +stdout 746 +stderr 746 +stdout 747 +stderr 747 +stdout 748 +stderr 748 +stdout 749 +stderr 749 +stdout 750 +stderr 750 +stdout 751 +stderr 751 +stdout 752 +stderr 752 +stdout 753 +stderr 753 +stdout 754 +stderr 754 +stdout 755 +stderr 755 +stdout 756 +stderr 756 +stdout 757 +stderr 757 +stdout 758 +stderr 758 +stdout 759 +stderr 759 +stdout 760 +stderr 760 +stdout 761 +stderr 761 +stdout 762 +stderr 762 +stdout 763 +stderr 763 +stdout 764 +stderr 764 +stdout 765 +stderr 765 +stdout 766 +stderr 766 +stdout 767 +stderr 767 +stdout 768 +stderr 768 +stdout 769 +stderr 769 +stdout 770 +stderr 770 +stdout 771 +stderr 771 +stdout 772 +stderr 772 +stdout 773 +stderr 773 +stdout 774 +stderr 774 +stdout 775 +stderr 775 +stdout 776 +stderr 776 +stdout 777 +stderr 777 +stdout 778 +stderr 778 +stdout 779 +stderr 779 +stdout 780 +stderr 780 +stdout 781 +stderr 781 +stdout 782 +stderr 782 +stdout 783 +stderr 783 +stdout 784 +stderr 784 +stdout 785 +stderr 785 +stdout 786 +stderr 786 +stdout 787 +stderr 787 +stdout 788 +stderr 788 +stdout 789 +stderr 789 +stdout 790 +stderr 790 +stdout 791 +stderr 791 +stdout 792 +stderr 792 +stdout 793 +stderr 793 +stdout 794 +stderr 794 +stdout 795 +stderr 795 +stdout 796 +stderr 796 +stdout 797 +stderr 797 +stdout 798 +stderr 798 +stdout 799 +stderr 799 +stdout 800 +stderr 800 +stdout 801 +stderr 801 +stdout 802 +stderr 802 +stdout 803 +stderr 803 +stdout 804 +stderr 804 +stdout 805 +stderr 805 +stdout 806 +stderr 806 +stdout 807 +stderr 807 +stdout 808 +stderr 808 +stdout 809 +stderr 809 +stdout 810 +stderr 810 +stdout 811 +stderr 811 +stdout 812 +stderr 812 +stdout 813 +stderr 813 +stdout 814 +stderr 814 +stdout 815 +stderr 815 +stdout 816 +stderr 816 +stdout 817 +stderr 817 +stdout 818 +stderr 818 +stdout 819 +stderr 819 +stdout 820 +stderr 820 +stdout 821 +stderr 821 +stdout 822 +stderr 822 +stdout 823 +stderr 823 +stdout 824 +stderr 824 +stdout 825 +stderr 825 +stdout 826 +stderr 826 +stdout 827 +stderr 827 +stdout 828 +stderr 828 +stdout 829 +stderr 829 +stdout 830 +stderr 830 +stdout 831 +stderr 831 +stdout 832 +stderr 832 +stdout 833 +stderr 833 +stdout 834 +stderr 834 +stdout 835 +stderr 835 +stdout 836 +stderr 836 +stdout 837 +stderr 837 +stdout 838 +stderr 838 +stdout 839 +stderr 839 +stdout 840 +stderr 840 +stdout 841 +stderr 841 +stdout 842 +stderr 842 +stdout 843 +stderr 843 +stdout 844 +stderr 844 +stdout 845 +stderr 845 +stdout 846 +stderr 846 +stdout 847 +stderr 847 +stdout 848 +stderr 848 +stdout 849 +stderr 849 +stdout 850 +stderr 850 +stdout 851 +stderr 851 +stdout 852 +stderr 852 +stdout 853 +stderr 853 +stdout 854 +stderr 854 +stdout 855 +stderr 855 +stdout 856 +stderr 856 +stdout 857 +stderr 857 +stdout 858 +stderr 858 +stdout 859 +stderr 859 +stdout 860 +stderr 860 +stdout 861 +stderr 861 +stdout 862 +stderr 862 +stdout 863 +stderr 863 +stdout 864 +stderr 864 +stdout 865 +stderr 865 +stdout 866 +stderr 866 +stdout 867 +stderr 867 +stdout 868 +stderr 868 +stdout 869 +stderr 869 +stdout 870 +stderr 870 +stdout 871 +stderr 871 +stdout 872 +stderr 872 +stdout 873 +stderr 873 +stdout 874 +stderr 874 +stdout 875 +stderr 875 +stdout 876 +stderr 876 +stdout 877 +stderr 877 +stdout 878 +stderr 878 +stdout 879 +stderr 879 +stdout 880 +stderr 880 +stdout 881 +stderr 881 +stdout 882 +stderr 882 +stdout 883 +stderr 883 +stdout 884 +stderr 884 +stdout 885 +stderr 885 +stdout 886 +stderr 886 +stdout 887 +stderr 887 +stdout 888 +stderr 888 +stdout 889 +stderr 889 +stdout 890 +stderr 890 +stdout 891 +stderr 891 +stdout 892 +stderr 892 +stdout 893 +stderr 893 +stdout 894 +stderr 894 +stdout 895 +stderr 895 +stdout 896 +stderr 896 +stdout 897 +stderr 897 +stdout 898 +stderr 898 +stdout 899 +stderr 899 +stdout 900 +stderr 900 +stdout 901 +stderr 901 +stdout 902 +stderr 902 +stdout 903 +stderr 903 +stdout 904 +stderr 904 +stdout 905 +stderr 905 +stdout 906 +stderr 906 +stdout 907 +stderr 907 +stdout 908 +stderr 908 +stdout 909 +stderr 909 +stdout 910 +stderr 910 +stdout 911 +stderr 911 +stdout 912 +stderr 912 +stdout 913 +stderr 913 +stdout 914 +stderr 914 +stdout 915 +stderr 915 +stdout 916 +stderr 916 +stdout 917 +stderr 917 +stdout 918 +stderr 918 +stdout 919 +stderr 919 +stdout 920 +stderr 920 +stdout 921 +stderr 921 +stdout 922 +stderr 922 +stdout 923 +stderr 923 +stdout 924 +stderr 924 +stdout 925 +stderr 925 +stdout 926 +stderr 926 +stdout 927 +stderr 927 +stdout 928 +stderr 928 +stdout 929 +stderr 929 +stdout 930 +stderr 930 +stdout 931 +stderr 931 +stdout 932 +stderr 932 +stdout 933 +stderr 933 +stdout 934 +stderr 934 +stdout 935 +stderr 935 +stdout 936 +stderr 936 +stdout 937 +stderr 937 +stdout 938 +stderr 938 +stdout 939 +stderr 939 +stdout 940 +stderr 940 +stdout 941 +stderr 941 +stdout 942 +stderr 942 +stdout 943 +stderr 943 +stdout 944 +stderr 944 +stdout 945 +stderr 945 +stdout 946 +stderr 946 +stdout 947 +stderr 947 +stdout 948 +stderr 948 +stdout 949 +stderr 949 +stdout 950 +stderr 950 +stdout 951 +stderr 951 +stdout 952 +stderr 952 +stdout 953 +stderr 953 +stdout 954 +stderr 954 +stdout 955 +stderr 955 +stdout 956 +stderr 956 +stdout 957 +stderr 957 +stdout 958 +stderr 958 +stdout 959 +stderr 959 +stdout 960 +stderr 960 +stdout 961 +stderr 961 +stdout 962 +stderr 962 +stdout 963 +stderr 963 +stdout 964 +stderr 964 +stdout 965 +stderr 965 +stdout 966 +stderr 966 +stdout 967 +stderr 967 +stdout 968 +stderr 968 +stdout 969 +stderr 969 +stdout 970 +stderr 970 +stdout 971 +stderr 971 +stdout 972 +stderr 972 +stdout 973 +stderr 973 +stdout 974 +stderr 974 +stdout 975 +stderr 975 +stdout 976 +stderr 976 +stdout 977 +stderr 977 +stdout 978 +stderr 978 +stdout 979 +stderr 979 +stdout 980 +stderr 980 +stdout 981 +stderr 981 +stdout 982 +stderr 982 +stdout 983 +stderr 983 +stdout 984 +stderr 984 +stdout 985 +stderr 985 +stdout 986 +stderr 986 +stdout 987 +stderr 987 +stdout 988 +stderr 988 +stdout 989 +stderr 989 +stdout 990 +stderr 990 +stdout 991 +stderr 991 +stdout 992 +stderr 992 +stdout 993 +stderr 993 +stdout 994 +stderr 994 +stdout 995 +stderr 995 +stdout 996 +stderr 996 +stdout 997 +stderr 997 +stdout 998 +stderr 998 +stdout 999 +stderr 999 diff --git a/www/node_modules/exit/test/fixtures/1000-stdout.txt b/www/node_modules/exit/test/fixtures/1000-stdout.txt new file mode 100644 index 0000000..d3649d0 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/1000-stdout.txt @@ -0,0 +1,1000 @@ +stdout 0 +stdout 1 +stdout 2 +stdout 3 +stdout 4 +stdout 5 +stdout 6 +stdout 7 +stdout 8 +stdout 9 +stdout 10 +stdout 11 +stdout 12 +stdout 13 +stdout 14 +stdout 15 +stdout 16 +stdout 17 +stdout 18 +stdout 19 +stdout 20 +stdout 21 +stdout 22 +stdout 23 +stdout 24 +stdout 25 +stdout 26 +stdout 27 +stdout 28 +stdout 29 +stdout 30 +stdout 31 +stdout 32 +stdout 33 +stdout 34 +stdout 35 +stdout 36 +stdout 37 +stdout 38 +stdout 39 +stdout 40 +stdout 41 +stdout 42 +stdout 43 +stdout 44 +stdout 45 +stdout 46 +stdout 47 +stdout 48 +stdout 49 +stdout 50 +stdout 51 +stdout 52 +stdout 53 +stdout 54 +stdout 55 +stdout 56 +stdout 57 +stdout 58 +stdout 59 +stdout 60 +stdout 61 +stdout 62 +stdout 63 +stdout 64 +stdout 65 +stdout 66 +stdout 67 +stdout 68 +stdout 69 +stdout 70 +stdout 71 +stdout 72 +stdout 73 +stdout 74 +stdout 75 +stdout 76 +stdout 77 +stdout 78 +stdout 79 +stdout 80 +stdout 81 +stdout 82 +stdout 83 +stdout 84 +stdout 85 +stdout 86 +stdout 87 +stdout 88 +stdout 89 +stdout 90 +stdout 91 +stdout 92 +stdout 93 +stdout 94 +stdout 95 +stdout 96 +stdout 97 +stdout 98 +stdout 99 +stdout 100 +stdout 101 +stdout 102 +stdout 103 +stdout 104 +stdout 105 +stdout 106 +stdout 107 +stdout 108 +stdout 109 +stdout 110 +stdout 111 +stdout 112 +stdout 113 +stdout 114 +stdout 115 +stdout 116 +stdout 117 +stdout 118 +stdout 119 +stdout 120 +stdout 121 +stdout 122 +stdout 123 +stdout 124 +stdout 125 +stdout 126 +stdout 127 +stdout 128 +stdout 129 +stdout 130 +stdout 131 +stdout 132 +stdout 133 +stdout 134 +stdout 135 +stdout 136 +stdout 137 +stdout 138 +stdout 139 +stdout 140 +stdout 141 +stdout 142 +stdout 143 +stdout 144 +stdout 145 +stdout 146 +stdout 147 +stdout 148 +stdout 149 +stdout 150 +stdout 151 +stdout 152 +stdout 153 +stdout 154 +stdout 155 +stdout 156 +stdout 157 +stdout 158 +stdout 159 +stdout 160 +stdout 161 +stdout 162 +stdout 163 +stdout 164 +stdout 165 +stdout 166 +stdout 167 +stdout 168 +stdout 169 +stdout 170 +stdout 171 +stdout 172 +stdout 173 +stdout 174 +stdout 175 +stdout 176 +stdout 177 +stdout 178 +stdout 179 +stdout 180 +stdout 181 +stdout 182 +stdout 183 +stdout 184 +stdout 185 +stdout 186 +stdout 187 +stdout 188 +stdout 189 +stdout 190 +stdout 191 +stdout 192 +stdout 193 +stdout 194 +stdout 195 +stdout 196 +stdout 197 +stdout 198 +stdout 199 +stdout 200 +stdout 201 +stdout 202 +stdout 203 +stdout 204 +stdout 205 +stdout 206 +stdout 207 +stdout 208 +stdout 209 +stdout 210 +stdout 211 +stdout 212 +stdout 213 +stdout 214 +stdout 215 +stdout 216 +stdout 217 +stdout 218 +stdout 219 +stdout 220 +stdout 221 +stdout 222 +stdout 223 +stdout 224 +stdout 225 +stdout 226 +stdout 227 +stdout 228 +stdout 229 +stdout 230 +stdout 231 +stdout 232 +stdout 233 +stdout 234 +stdout 235 +stdout 236 +stdout 237 +stdout 238 +stdout 239 +stdout 240 +stdout 241 +stdout 242 +stdout 243 +stdout 244 +stdout 245 +stdout 246 +stdout 247 +stdout 248 +stdout 249 +stdout 250 +stdout 251 +stdout 252 +stdout 253 +stdout 254 +stdout 255 +stdout 256 +stdout 257 +stdout 258 +stdout 259 +stdout 260 +stdout 261 +stdout 262 +stdout 263 +stdout 264 +stdout 265 +stdout 266 +stdout 267 +stdout 268 +stdout 269 +stdout 270 +stdout 271 +stdout 272 +stdout 273 +stdout 274 +stdout 275 +stdout 276 +stdout 277 +stdout 278 +stdout 279 +stdout 280 +stdout 281 +stdout 282 +stdout 283 +stdout 284 +stdout 285 +stdout 286 +stdout 287 +stdout 288 +stdout 289 +stdout 290 +stdout 291 +stdout 292 +stdout 293 +stdout 294 +stdout 295 +stdout 296 +stdout 297 +stdout 298 +stdout 299 +stdout 300 +stdout 301 +stdout 302 +stdout 303 +stdout 304 +stdout 305 +stdout 306 +stdout 307 +stdout 308 +stdout 309 +stdout 310 +stdout 311 +stdout 312 +stdout 313 +stdout 314 +stdout 315 +stdout 316 +stdout 317 +stdout 318 +stdout 319 +stdout 320 +stdout 321 +stdout 322 +stdout 323 +stdout 324 +stdout 325 +stdout 326 +stdout 327 +stdout 328 +stdout 329 +stdout 330 +stdout 331 +stdout 332 +stdout 333 +stdout 334 +stdout 335 +stdout 336 +stdout 337 +stdout 338 +stdout 339 +stdout 340 +stdout 341 +stdout 342 +stdout 343 +stdout 344 +stdout 345 +stdout 346 +stdout 347 +stdout 348 +stdout 349 +stdout 350 +stdout 351 +stdout 352 +stdout 353 +stdout 354 +stdout 355 +stdout 356 +stdout 357 +stdout 358 +stdout 359 +stdout 360 +stdout 361 +stdout 362 +stdout 363 +stdout 364 +stdout 365 +stdout 366 +stdout 367 +stdout 368 +stdout 369 +stdout 370 +stdout 371 +stdout 372 +stdout 373 +stdout 374 +stdout 375 +stdout 376 +stdout 377 +stdout 378 +stdout 379 +stdout 380 +stdout 381 +stdout 382 +stdout 383 +stdout 384 +stdout 385 +stdout 386 +stdout 387 +stdout 388 +stdout 389 +stdout 390 +stdout 391 +stdout 392 +stdout 393 +stdout 394 +stdout 395 +stdout 396 +stdout 397 +stdout 398 +stdout 399 +stdout 400 +stdout 401 +stdout 402 +stdout 403 +stdout 404 +stdout 405 +stdout 406 +stdout 407 +stdout 408 +stdout 409 +stdout 410 +stdout 411 +stdout 412 +stdout 413 +stdout 414 +stdout 415 +stdout 416 +stdout 417 +stdout 418 +stdout 419 +stdout 420 +stdout 421 +stdout 422 +stdout 423 +stdout 424 +stdout 425 +stdout 426 +stdout 427 +stdout 428 +stdout 429 +stdout 430 +stdout 431 +stdout 432 +stdout 433 +stdout 434 +stdout 435 +stdout 436 +stdout 437 +stdout 438 +stdout 439 +stdout 440 +stdout 441 +stdout 442 +stdout 443 +stdout 444 +stdout 445 +stdout 446 +stdout 447 +stdout 448 +stdout 449 +stdout 450 +stdout 451 +stdout 452 +stdout 453 +stdout 454 +stdout 455 +stdout 456 +stdout 457 +stdout 458 +stdout 459 +stdout 460 +stdout 461 +stdout 462 +stdout 463 +stdout 464 +stdout 465 +stdout 466 +stdout 467 +stdout 468 +stdout 469 +stdout 470 +stdout 471 +stdout 472 +stdout 473 +stdout 474 +stdout 475 +stdout 476 +stdout 477 +stdout 478 +stdout 479 +stdout 480 +stdout 481 +stdout 482 +stdout 483 +stdout 484 +stdout 485 +stdout 486 +stdout 487 +stdout 488 +stdout 489 +stdout 490 +stdout 491 +stdout 492 +stdout 493 +stdout 494 +stdout 495 +stdout 496 +stdout 497 +stdout 498 +stdout 499 +stdout 500 +stdout 501 +stdout 502 +stdout 503 +stdout 504 +stdout 505 +stdout 506 +stdout 507 +stdout 508 +stdout 509 +stdout 510 +stdout 511 +stdout 512 +stdout 513 +stdout 514 +stdout 515 +stdout 516 +stdout 517 +stdout 518 +stdout 519 +stdout 520 +stdout 521 +stdout 522 +stdout 523 +stdout 524 +stdout 525 +stdout 526 +stdout 527 +stdout 528 +stdout 529 +stdout 530 +stdout 531 +stdout 532 +stdout 533 +stdout 534 +stdout 535 +stdout 536 +stdout 537 +stdout 538 +stdout 539 +stdout 540 +stdout 541 +stdout 542 +stdout 543 +stdout 544 +stdout 545 +stdout 546 +stdout 547 +stdout 548 +stdout 549 +stdout 550 +stdout 551 +stdout 552 +stdout 553 +stdout 554 +stdout 555 +stdout 556 +stdout 557 +stdout 558 +stdout 559 +stdout 560 +stdout 561 +stdout 562 +stdout 563 +stdout 564 +stdout 565 +stdout 566 +stdout 567 +stdout 568 +stdout 569 +stdout 570 +stdout 571 +stdout 572 +stdout 573 +stdout 574 +stdout 575 +stdout 576 +stdout 577 +stdout 578 +stdout 579 +stdout 580 +stdout 581 +stdout 582 +stdout 583 +stdout 584 +stdout 585 +stdout 586 +stdout 587 +stdout 588 +stdout 589 +stdout 590 +stdout 591 +stdout 592 +stdout 593 +stdout 594 +stdout 595 +stdout 596 +stdout 597 +stdout 598 +stdout 599 +stdout 600 +stdout 601 +stdout 602 +stdout 603 +stdout 604 +stdout 605 +stdout 606 +stdout 607 +stdout 608 +stdout 609 +stdout 610 +stdout 611 +stdout 612 +stdout 613 +stdout 614 +stdout 615 +stdout 616 +stdout 617 +stdout 618 +stdout 619 +stdout 620 +stdout 621 +stdout 622 +stdout 623 +stdout 624 +stdout 625 +stdout 626 +stdout 627 +stdout 628 +stdout 629 +stdout 630 +stdout 631 +stdout 632 +stdout 633 +stdout 634 +stdout 635 +stdout 636 +stdout 637 +stdout 638 +stdout 639 +stdout 640 +stdout 641 +stdout 642 +stdout 643 +stdout 644 +stdout 645 +stdout 646 +stdout 647 +stdout 648 +stdout 649 +stdout 650 +stdout 651 +stdout 652 +stdout 653 +stdout 654 +stdout 655 +stdout 656 +stdout 657 +stdout 658 +stdout 659 +stdout 660 +stdout 661 +stdout 662 +stdout 663 +stdout 664 +stdout 665 +stdout 666 +stdout 667 +stdout 668 +stdout 669 +stdout 670 +stdout 671 +stdout 672 +stdout 673 +stdout 674 +stdout 675 +stdout 676 +stdout 677 +stdout 678 +stdout 679 +stdout 680 +stdout 681 +stdout 682 +stdout 683 +stdout 684 +stdout 685 +stdout 686 +stdout 687 +stdout 688 +stdout 689 +stdout 690 +stdout 691 +stdout 692 +stdout 693 +stdout 694 +stdout 695 +stdout 696 +stdout 697 +stdout 698 +stdout 699 +stdout 700 +stdout 701 +stdout 702 +stdout 703 +stdout 704 +stdout 705 +stdout 706 +stdout 707 +stdout 708 +stdout 709 +stdout 710 +stdout 711 +stdout 712 +stdout 713 +stdout 714 +stdout 715 +stdout 716 +stdout 717 +stdout 718 +stdout 719 +stdout 720 +stdout 721 +stdout 722 +stdout 723 +stdout 724 +stdout 725 +stdout 726 +stdout 727 +stdout 728 +stdout 729 +stdout 730 +stdout 731 +stdout 732 +stdout 733 +stdout 734 +stdout 735 +stdout 736 +stdout 737 +stdout 738 +stdout 739 +stdout 740 +stdout 741 +stdout 742 +stdout 743 +stdout 744 +stdout 745 +stdout 746 +stdout 747 +stdout 748 +stdout 749 +stdout 750 +stdout 751 +stdout 752 +stdout 753 +stdout 754 +stdout 755 +stdout 756 +stdout 757 +stdout 758 +stdout 759 +stdout 760 +stdout 761 +stdout 762 +stdout 763 +stdout 764 +stdout 765 +stdout 766 +stdout 767 +stdout 768 +stdout 769 +stdout 770 +stdout 771 +stdout 772 +stdout 773 +stdout 774 +stdout 775 +stdout 776 +stdout 777 +stdout 778 +stdout 779 +stdout 780 +stdout 781 +stdout 782 +stdout 783 +stdout 784 +stdout 785 +stdout 786 +stdout 787 +stdout 788 +stdout 789 +stdout 790 +stdout 791 +stdout 792 +stdout 793 +stdout 794 +stdout 795 +stdout 796 +stdout 797 +stdout 798 +stdout 799 +stdout 800 +stdout 801 +stdout 802 +stdout 803 +stdout 804 +stdout 805 +stdout 806 +stdout 807 +stdout 808 +stdout 809 +stdout 810 +stdout 811 +stdout 812 +stdout 813 +stdout 814 +stdout 815 +stdout 816 +stdout 817 +stdout 818 +stdout 819 +stdout 820 +stdout 821 +stdout 822 +stdout 823 +stdout 824 +stdout 825 +stdout 826 +stdout 827 +stdout 828 +stdout 829 +stdout 830 +stdout 831 +stdout 832 +stdout 833 +stdout 834 +stdout 835 +stdout 836 +stdout 837 +stdout 838 +stdout 839 +stdout 840 +stdout 841 +stdout 842 +stdout 843 +stdout 844 +stdout 845 +stdout 846 +stdout 847 +stdout 848 +stdout 849 +stdout 850 +stdout 851 +stdout 852 +stdout 853 +stdout 854 +stdout 855 +stdout 856 +stdout 857 +stdout 858 +stdout 859 +stdout 860 +stdout 861 +stdout 862 +stdout 863 +stdout 864 +stdout 865 +stdout 866 +stdout 867 +stdout 868 +stdout 869 +stdout 870 +stdout 871 +stdout 872 +stdout 873 +stdout 874 +stdout 875 +stdout 876 +stdout 877 +stdout 878 +stdout 879 +stdout 880 +stdout 881 +stdout 882 +stdout 883 +stdout 884 +stdout 885 +stdout 886 +stdout 887 +stdout 888 +stdout 889 +stdout 890 +stdout 891 +stdout 892 +stdout 893 +stdout 894 +stdout 895 +stdout 896 +stdout 897 +stdout 898 +stdout 899 +stdout 900 +stdout 901 +stdout 902 +stdout 903 +stdout 904 +stdout 905 +stdout 906 +stdout 907 +stdout 908 +stdout 909 +stdout 910 +stdout 911 +stdout 912 +stdout 913 +stdout 914 +stdout 915 +stdout 916 +stdout 917 +stdout 918 +stdout 919 +stdout 920 +stdout 921 +stdout 922 +stdout 923 +stdout 924 +stdout 925 +stdout 926 +stdout 927 +stdout 928 +stdout 929 +stdout 930 +stdout 931 +stdout 932 +stdout 933 +stdout 934 +stdout 935 +stdout 936 +stdout 937 +stdout 938 +stdout 939 +stdout 940 +stdout 941 +stdout 942 +stdout 943 +stdout 944 +stdout 945 +stdout 946 +stdout 947 +stdout 948 +stdout 949 +stdout 950 +stdout 951 +stdout 952 +stdout 953 +stdout 954 +stdout 955 +stdout 956 +stdout 957 +stdout 958 +stdout 959 +stdout 960 +stdout 961 +stdout 962 +stdout 963 +stdout 964 +stdout 965 +stdout 966 +stdout 967 +stdout 968 +stdout 969 +stdout 970 +stdout 971 +stdout 972 +stdout 973 +stdout 974 +stdout 975 +stdout 976 +stdout 977 +stdout 978 +stdout 979 +stdout 980 +stdout 981 +stdout 982 +stdout 983 +stdout 984 +stdout 985 +stdout 986 +stdout 987 +stdout 988 +stdout 989 +stdout 990 +stdout 991 +stdout 992 +stdout 993 +stdout 994 +stdout 995 +stdout 996 +stdout 997 +stdout 998 +stdout 999 diff --git a/www/node_modules/exit/test/fixtures/create-files.sh b/www/node_modules/exit/test/fixtures/create-files.sh new file mode 100755 index 0000000..6a526de --- /dev/null +++ b/www/node_modules/exit/test/fixtures/create-files.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +rm 10*.txt +for n in 10 100 1000; do + node log.js 0 $n stdout stderr &> $n-stdout-stderr.txt + node log.js 0 $n stdout &> $n-stdout.txt + node log.js 0 $n stderr &> $n-stderr.txt +done diff --git a/www/node_modules/exit/test/fixtures/log-broken.js b/www/node_modules/exit/test/fixtures/log-broken.js new file mode 100644 index 0000000..74c8f12 --- /dev/null +++ b/www/node_modules/exit/test/fixtures/log-broken.js @@ -0,0 +1,23 @@ +var errorCode = process.argv[2]; +var max = process.argv[3]; +var modes = process.argv.slice(4); + +function stdout(message) { + if (modes.indexOf('stdout') === -1) { return; } + process.stdout.write('stdout ' + message + '\n'); +} + +function stderr(message) { + if (modes.indexOf('stderr') === -1) { return; } + process.stderr.write('stderr ' + message + '\n'); +} + +for (var i = 0; i < max; i++) { + stdout(i); + stderr(i); +} + +process.exit(errorCode); + +stdout('fail'); +stderr('fail'); diff --git a/www/node_modules/exit/test/fixtures/log.js b/www/node_modules/exit/test/fixtures/log.js new file mode 100644 index 0000000..8a9ed9a --- /dev/null +++ b/www/node_modules/exit/test/fixtures/log.js @@ -0,0 +1,25 @@ +var exit = require('../../lib/exit'); + +var errorCode = process.argv[2]; +var max = process.argv[3]; +var modes = process.argv.slice(4); + +function stdout(message) { + if (modes.indexOf('stdout') === -1) { return; } + process.stdout.write('stdout ' + message + '\n'); +} + +function stderr(message) { + if (modes.indexOf('stderr') === -1) { return; } + process.stderr.write('stderr ' + message + '\n'); +} + +for (var i = 0; i < max; i++) { + stdout(i); + stderr(i); +} + +exit(errorCode); + +stdout('fail'); +stderr('fail'); diff --git a/www/node_modules/glob/LICENSE b/www/node_modules/glob/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/www/node_modules/glob/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/www/node_modules/glob/README.md b/www/node_modules/glob/README.md new file mode 100644 index 0000000..9dd9384 --- /dev/null +++ b/www/node_modules/glob/README.md @@ -0,0 +1,365 @@ +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +![](oh-my-glob.gif) + +## Usage + +Install with npm + +``` +npm i glob +``` + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Glob Primer + +"Globs" are the patterns you type when you do stuff like `ls *.js` on +the command line, or put `build/*` in a `.gitignore` file. + +Before parsing the path part patterns, braced sections are expanded +into a set. Braced sections start with `{` and end with `}`, with any +number of comma-delimited sections within. Braced sections may contain +slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in a +path portion: + +* `*` Matches 0 or more characters in a single path portion +* `?` Matches 1 character +* `[...]` Matches a range of characters, similar to a RegExp range. + If the first character of the range is `!` or `^` then it matches + any character not in the range. +* `!(pattern|pattern|pattern)` Matches anything that does not match + any of the patterns provided. +* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the + patterns provided. +* `+(pattern|pattern|pattern)` Matches one or more occurrences of the + patterns provided. +* `*(a|b|c)` Matches zero or more occurrences of the patterns provided +* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided +* `**` If a "globstar" is alone in a path portion, then it matches + zero or more directories and subdirectories searching for matches. + It does not crawl symlinked directories. + +### Dots + +If a file or directory path portion has a `.` as the first character, +then it will not match any glob pattern unless that pattern's +corresponding path part also has a `.` as its first character. + +For example, the pattern `a/.*/c` would match the file at `a/.b/c`. +However the pattern `a/*/c` would not, because `*` does not start with +a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has no +slashes in it, then it will seek for any file anywhere in the tree +with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. This +differs from the shell, where the pattern itself is returned. For +example: + + $ echo a*s*d*f + a*s*d*f + +To get the bash-style behavior, set the `nonull:true` in the options. + +### See Also: + +* `man sh` +* `man bash` (Search for "Pattern Matching") +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob.hasMagic(pattern, [options]) + +Returns `true` if there are any special characters in the pattern, and +`false` otherwise. + +Note that the options affect the results. If `noext:true` is set in +the options object, then `+(a|b)` will not be considered a magic +pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` +then that is considered magical, unless `nobrace:true` is set in the +options. + +## glob(pattern, [options], cb) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* `cb` `{Function}` + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* return: `{Array}` filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instantiating the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` `{String}` pattern to search for +* `options` `{Object}` +* `cb` `{Function}` Called when an error occurs, or matches are found + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `'FILE'` - Path exists, and is not a directory + * `'DIR'` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` +* `statCache` Cache of `fs.stat` results, to prevent statting the same + path multiple times. +* `symlinks` A record of which paths are symbolic links, which is + relevant in resolving `**` patterns. +* `realpathCache` An optional object which is passed to `fs.realpath` + to minimize unnecessary syscalls. It is stored on the instantiated + Glob object, and may be re-used. + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the specific + thing that matched. It is not deduplicated or resolved to a realpath. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `pause` Temporarily stop the search +* `resume` Resume the search +* `abort` Stop the search forever + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the Glob object, as well. + +If you are running many `glob` operations, you can pass a Glob object +as the `options` argument to a subsequent operation to shortcut some +`stat` and `readdir` calls. At the very least, you may pass in shared +`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that +parallel glob operations will be sped up by sharing information about +the filesystem. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. +* `silent` When an unusual error is encountered when attempting to + read a directory, a warning will be printed to stderr. Set the + `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered when attempting to + read a directory, the process will just continue on in search of + other matches. Set the `strict` option to raise an error in these + cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary + to set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `symlinks` A cache of known symbolic links. You may pass in a + previously generated `symlinks` object to save `lstat` calls when + resolving `**` matches. +* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. Set this + flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `debug` Set to enable debug logging in minimatch and glob. +* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. +* `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) +* `noext` Do not match `+(a|b)` "extglob" patterns. +* `nocase` Perform a case-insensitive match. Note: on + case-insensitive filesystems, non-magic patterns will match by + default, since `stat` and `readdir` will not raise errors. +* `matchBase` Perform a basename-only match if the pattern does not + contain any slash characters. That is, `*.js` would be treated as + equivalent to `**/*.js`, matching all js files in all directories. +* `nodir` Do not match directories, only files. (Note: to match + *only* directories, simply put a `/` at the end of the pattern.) +* `ignore` Add a pattern or an array of glob patterns to exclude matches. + Note: `ignore` patterns are *always* in `dot:true` mode, regardless + of any other settings. +* `follow` Follow symlinked directories when expanding `**` patterns. + Note that this can result in a lot of duplicate references in the + presence of cyclic links. +* `realpath` Set to true to call `fs.realpath` on all of the results. + In the case of a symlink that cannot be resolved, the full absolute + path to the matched entry is returned (though it will usually be a + broken symlink) + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.3, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +Note that symlinked directories are not crawled as part of a `**`, +though their contents may match against subsequent portions of the +pattern. This prevents infinite loops and duplicates and the like. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if it +started with a `#` character, or a "negated" pattern if it started +with a `!` character. + +These options were deprecated in version 5, and removed in version 6. + +To specify things that should not match, use the `ignore` option. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. + +## Contributing + +Any change to behavior (including bugfixes) must come with a test. + +Patches that fail tests or reduce performance will be rejected. + +``` +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# to benchmark against bash/zsh +npm run bench + +# to profile javascript +npm run prof +``` diff --git a/www/node_modules/glob/changelog.md b/www/node_modules/glob/changelog.md new file mode 100644 index 0000000..4163677 --- /dev/null +++ b/www/node_modules/glob/changelog.md @@ -0,0 +1,67 @@ +## 7.0 + +- Raise error if `options.cwd` is specified, and not a directory + +## 6.0 + +- Remove comment and negation pattern support +- Ignore patterns are always in `dot:true` mode + +## 5.0 + +- Deprecate comment and negation patterns +- Fix regression in `mark` and `nodir` options from making all cache + keys absolute path. +- Abort if `fs.readdir` returns an error that's unexpected +- Don't emit `match` events for ignored items +- Treat ENOTSUP like ENOTDIR in readdir + +## 4.5 + +- Add `options.follow` to always follow directory symlinks in globstar +- Add `options.realpath` to call `fs.realpath` on all results +- Always cache based on absolute path + +## 4.4 + +- Add `options.ignore` +- Fix handling of broken symlinks + +## 4.3 + +- Bump minimatch to 2.x +- Pass all tests on Windows + +## 4.2 + +- Add `glob.hasMagic` function +- Add `options.nodir` flag + +## 4.1 + +- Refactor sync and async implementations for performance +- Throw if callback provided to sync glob function +- Treat symbolic links in globstar results the same as Bash 4.3 + +## 4.0 + +- Use `^` for dependency versions (bumped major because this breaks + older npm versions) +- Ensure callbacks are only ever called once +- switch to ISC license + +## 3.x + +- Rewrite in JavaScript +- Add support for setting root, cwd, and windows support +- Cache many fs calls +- Add globstar support +- emit match events + +## 2.x + +- Use `glob.h` and `fnmatch.h` from NetBSD + +## 1.x + +- `glob.h` static binding. diff --git a/www/node_modules/glob/common.js b/www/node_modules/glob/common.js new file mode 100644 index 0000000..58dc41e --- /dev/null +++ b/www/node_modules/glob/common.js @@ -0,0 +1,235 @@ +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern, { dot: true }) + } + + return { + matcher: new Minimatch(pattern, { dot: true }), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = path.resolve(options.cwd) + self.changedCwd = self.cwd !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + self.cwdAbs = makeAbs(self, self.cwd) + self.nomount = !!options.nomount + + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} diff --git a/www/node_modules/glob/glob.js b/www/node_modules/glob/glob.js new file mode 100644 index 0000000..4dba04a --- /dev/null +++ b/www/node_modules/glob/glob.js @@ -0,0 +1,782 @@ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin + } + + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin +} + +glob.hasMagic = function (pattern, options_) { + var options = extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + var n = this.minimatch.set.length + this._processing = 0 + this.matches = new Array(n) + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + var sync = true + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + sync = false + + function done () { + --self._processing + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + self._finish() + } + } + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + fs.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (this.matches[index][e]) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = this._makeAbs(e) + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + if (this.mark) + e = this._mark(e) + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er) + return cb() + + var isSym = lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && !stat.isDirectory()) + return cb(null, false, stat) + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return cb() + + return cb(null, c, stat) +} diff --git a/www/node_modules/glob/package.json b/www/node_modules/glob/package.json new file mode 100644 index 0000000..3638792 --- /dev/null +++ b/www/node_modules/glob/package.json @@ -0,0 +1,102 @@ +{ + "_args": [ + [ + "glob@^7.0.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/rimraf" + ] + ], + "_from": "glob@>=7.0.0 <8.0.0", + "_id": "glob@7.0.3", + "_inCache": true, + "_installable": true, + "_location": "/glob", + "_nodeVersion": "5.6.0", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/glob-7.0.3.tgz_1457166529288_0.7840580905321985" + }, + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "3.7.3", + "_phantomChildren": {}, + "_requested": { + "name": "glob", + "raw": "glob@^7.0.0", + "rawSpec": "^7.0.0", + "scope": null, + "spec": ">=7.0.0 <8.0.0", + "type": "range" + }, + "_requiredBy": [ + "/rimraf" + ], + "_resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz", + "_shasum": "0aa235931a4a96ac13d60ffac2fb877bd6ed4f58", + "_shrinkwrap": null, + "_spec": "glob@^7.0.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/rimraf", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/node-glob/issues" + }, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "description": "a little globber", + "devDependencies": { + "mkdirp": "0", + "rimraf": "^2.2.8", + "tap": "^5.7.0", + "tick": "0.0.6" + }, + "directories": {}, + "dist": { + "shasum": "0aa235931a4a96ac13d60ffac2fb877bd6ed4f58", + "tarball": "http://registry.npmjs.org/glob/-/glob-7.0.3.tgz" + }, + "engines": { + "node": "*" + }, + "files": [ + "glob.js", + "sync.js", + "common.js" + ], + "gitHead": "2fc2278ab857c7df117213a2fb431de090be6353", + "homepage": "https://github.com/isaacs/node-glob#readme", + "license": "ISC", + "main": "glob.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "glob", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "scripts": { + "bench": "bash benchmark.sh", + "benchclean": "node benchclean.js", + "prepublish": "npm run benchclean", + "prof": "bash prof.sh && cat profile.txt", + "profclean": "rm -f v8.log profile.txt", + "test": "tap test/*.js --cov", + "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js" + }, + "version": "7.0.3" +} diff --git a/www/node_modules/glob/sync.js b/www/node_modules/glob/sync.js new file mode 100644 index 0000000..301577a --- /dev/null +++ b/www/node_modules/glob/sync.js @@ -0,0 +1,467 @@ +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = fs.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this.matches[index][e] = true + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + var abs = this._makeAbs(e) + if (this.mark) + e = this._mark(e) + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[this._makeAbs(e)] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + // lstat failed, doesn't exist + return null + } + + var isSym = lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this.matches[index][prefix] = true +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + return false + } + + if (lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} diff --git a/www/node_modules/inflight/.eslintrc b/www/node_modules/inflight/.eslintrc new file mode 100644 index 0000000..b7a1550 --- /dev/null +++ b/www/node_modules/inflight/.eslintrc @@ -0,0 +1,17 @@ +{ + "env" : { + "node" : true + }, + "rules" : { + "semi": [2, "never"], + "strict": 0, + "quotes": [1, "single", "avoid-escape"], + "no-use-before-define": 0, + "curly": 0, + "no-underscore-dangle": 0, + "no-lonely-if": 1, + "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}], + "no-mixed-requires": 0, + "space-infix-ops": 0 + } +} diff --git a/www/node_modules/inflight/LICENSE b/www/node_modules/inflight/LICENSE new file mode 100644 index 0000000..05eeeb8 --- /dev/null +++ b/www/node_modules/inflight/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/www/node_modules/inflight/README.md b/www/node_modules/inflight/README.md new file mode 100644 index 0000000..6dc8929 --- /dev/null +++ b/www/node_modules/inflight/README.md @@ -0,0 +1,37 @@ +# inflight + +Add callbacks to requests in flight to avoid async duplication + +## USAGE + +```javascript +var inflight = require('inflight') + +// some request that does some stuff +function req(key, callback) { + // key is any random string. like a url or filename or whatever. + // + // will return either a falsey value, indicating that the + // request for this key is already in flight, or a new callback + // which when called will call all callbacks passed to inflightk + // with the same key + callback = inflight(key, callback) + + // If we got a falsey value back, then there's already a req going + if (!callback) return + + // this is where you'd fetch the url or whatever + // callback is also once()-ified, so it can safely be assigned + // to multiple events etc. First call wins. + setTimeout(function() { + callback(null, key) + }, 100) +} + +// only assigns a single setTimeout +// when it dings, all cbs get called +req('foo', cb1) +req('foo', cb2) +req('foo', cb3) +req('foo', cb4) +``` diff --git a/www/node_modules/inflight/inflight.js b/www/node_modules/inflight/inflight.js new file mode 100644 index 0000000..8bc96cb --- /dev/null +++ b/www/node_modules/inflight/inflight.js @@ -0,0 +1,44 @@ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} diff --git a/www/node_modules/inflight/package.json b/www/node_modules/inflight/package.json new file mode 100644 index 0000000..90db3b2 --- /dev/null +++ b/www/node_modules/inflight/package.json @@ -0,0 +1,86 @@ +{ + "_args": [ + [ + "inflight@^1.0.4", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/glob" + ] + ], + "_from": "inflight@>=1.0.4 <2.0.0", + "_id": "inflight@1.0.4", + "_inCache": true, + "_installable": true, + "_location": "/inflight", + "_nodeVersion": "0.10.32", + "_npmUser": { + "email": "ogd@aoaioxxysz.net", + "name": "othiym23" + }, + "_npmVersion": "2.1.3", + "_phantomChildren": {}, + "_requested": { + "name": "inflight", + "raw": "inflight@^1.0.4", + "rawSpec": "^1.0.4", + "scope": null, + "spec": ">=1.0.4 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", + "_shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a", + "_shrinkwrap": null, + "_spec": "inflight@^1.0.4", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/glob", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/inflight/issues" + }, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + }, + "description": "Add callbacks to requests in flight to avoid async duplication", + "devDependencies": { + "tap": "^0.4.10" + }, + "directories": {}, + "dist": { + "shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a", + "tarball": "http://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz" + }, + "gitHead": "c7b5531d572a867064d4a1da9e013e8910b7d1ba", + "homepage": "https://github.com/isaacs/inflight", + "license": "ISC", + "main": "inflight.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + }, + { + "email": "ogd@aoaioxxysz.net", + "name": "othiym23" + }, + { + "email": "me@re-becca.org", + "name": "iarna" + } + ], + "name": "inflight", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inflight.git" + }, + "scripts": { + "test": "tap test.js" + }, + "version": "1.0.4" +} diff --git a/www/node_modules/inflight/test.js b/www/node_modules/inflight/test.js new file mode 100644 index 0000000..2bb75b3 --- /dev/null +++ b/www/node_modules/inflight/test.js @@ -0,0 +1,97 @@ +var test = require('tap').test +var inf = require('./inflight.js') + + +function req (key, cb) { + cb = inf(key, cb) + if (cb) setTimeout(function () { + cb(key) + cb(key) + }) + return cb +} + +test('basic', function (t) { + var calleda = false + var a = req('key', function (k) { + t.notOk(calleda) + calleda = true + t.equal(k, 'key') + if (calledb) t.end() + }) + t.ok(a, 'first returned cb function') + + var calledb = false + var b = req('key', function (k) { + t.notOk(calledb) + calledb = true + t.equal(k, 'key') + if (calleda) t.end() + }) + + t.notOk(b, 'second should get falsey inflight response') +}) + +test('timing', function (t) { + var expect = [ + 'method one', + 'start one', + 'end one', + 'two', + 'tick', + 'three' + ] + var i = 0 + + function log (m) { + t.equal(m, expect[i], m + ' === ' + expect[i]) + ++i + if (i === expect.length) + t.end() + } + + function method (name, cb) { + log('method ' + name) + process.nextTick(cb) + } + + var one = inf('foo', function () { + log('start one') + var three = inf('foo', function () { + log('three') + }) + if (three) method('three', three) + log('end one') + }) + + method('one', one) + + var two = inf('foo', function () { + log('two') + }) + if (two) method('one', two) + + process.nextTick(log.bind(null, 'tick')) +}) + +test('parameters', function (t) { + t.plan(8) + + var a = inf('key', function (first, second, third) { + t.equal(first, 1) + t.equal(second, 2) + t.equal(third, 3) + }) + t.ok(a, 'first returned cb function') + + var b = inf('key', function (first, second, third) { + t.equal(first, 1) + t.equal(second, 2) + t.equal(third, 3) + }) + t.notOk(b, 'second should get falsey inflight response') + + setTimeout(function () { + a(1, 2, 3) + }) +}) diff --git a/www/node_modules/inherits/LICENSE b/www/node_modules/inherits/LICENSE new file mode 100644 index 0000000..dea3013 --- /dev/null +++ b/www/node_modules/inherits/LICENSE @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + diff --git a/www/node_modules/inherits/README.md b/www/node_modules/inherits/README.md new file mode 100644 index 0000000..b1c5665 --- /dev/null +++ b/www/node_modules/inherits/README.md @@ -0,0 +1,42 @@ +Browser-friendly inheritance fully compatible with standard node.js +[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). + +This package exports standard `inherits` from node.js `util` module in +node environment, but also provides alternative browser-friendly +implementation through [browser +field](https://gist.github.com/shtylman/4339901). Alternative +implementation is a literal copy of standard one located in standalone +module to avoid requiring of `util`. It also has a shim for old +browsers with no `Object.create` support. + +While keeping you sure you are using standard `inherits` +implementation in node.js environment, it allows bundlers such as +[browserify](https://github.com/substack/node-browserify) to not +include full `util` package to your client code if all you need is +just `inherits` function. It worth, because browser shim for `util` +package is large and `inherits` is often the single function you need +from it. + +It's recommended to use this package instead of +`require('util').inherits` for any code that has chances to be used +not only in node.js but in browser too. + +## usage + +```js +var inherits = require('inherits'); +// then use exactly as the standard one +``` + +## note on version ~1.0 + +Version ~1.0 had completely different motivation and is not compatible +neither with 2.0 nor with standard node.js `inherits`. + +If you are using version ~1.0 and planning to switch to ~2.0, be +careful: + +* new version uses `super_` instead of `super` for referencing + superclass +* new version overwrites current prototype while old one preserves any + existing fields on it diff --git a/www/node_modules/inherits/inherits.js b/www/node_modules/inherits/inherits.js new file mode 100644 index 0000000..29f5e24 --- /dev/null +++ b/www/node_modules/inherits/inherits.js @@ -0,0 +1 @@ +module.exports = require('util').inherits diff --git a/www/node_modules/inherits/inherits_browser.js b/www/node_modules/inherits/inherits_browser.js new file mode 100644 index 0000000..c1e78a7 --- /dev/null +++ b/www/node_modules/inherits/inherits_browser.js @@ -0,0 +1,23 @@ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} diff --git a/www/node_modules/inherits/package.json b/www/node_modules/inherits/package.json new file mode 100644 index 0000000..722bcd1 --- /dev/null +++ b/www/node_modules/inherits/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "inherits@2", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/glob" + ] + ], + "_from": "inherits@>=2.0.0 <3.0.0", + "_id": "inherits@2.0.1", + "_inCache": true, + "_installable": true, + "_location": "/inherits", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "1.3.8", + "_phantomChildren": {}, + "_requested": { + "name": "inherits", + "raw": "inherits@2", + "rawSpec": "2", + "scope": null, + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "_shrinkwrap": null, + "_spec": "inherits@2", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/glob", + "browser": "./inherits_browser.js", + "bugs": { + "url": "https://github.com/isaacs/inherits/issues" + }, + "dependencies": {}, + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "homepage": "https://github.com/isaacs/inherits#readme", + "keywords": [ + "inheritance", + "class", + "klass", + "oop", + "object-oriented", + "inherits", + "browser", + "browserify" + ], + "license": "ISC", + "main": "./inherits.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "inherits", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inherits.git" + }, + "scripts": { + "test": "node test" + }, + "version": "2.0.1" +} diff --git a/www/node_modules/inherits/test.js b/www/node_modules/inherits/test.js new file mode 100644 index 0000000..fc53012 --- /dev/null +++ b/www/node_modules/inherits/test.js @@ -0,0 +1,25 @@ +var inherits = require('./inherits.js') +var assert = require('assert') + +function test(c) { + assert(c.constructor === Child) + assert(c.constructor.super_ === Parent) + assert(Object.getPrototypeOf(c) === Child.prototype) + assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) + assert(c instanceof Child) + assert(c instanceof Parent) +} + +function Child() { + Parent.call(this) + test(this) +} + +function Parent() {} + +inherits(Child, Parent) + +var c = new Child +test(c) + +console.log('ok') diff --git a/www/node_modules/jasmine-core/.npmignore b/www/node_modules/jasmine-core/.npmignore new file mode 100644 index 0000000..82d86f3 --- /dev/null +++ b/www/node_modules/jasmine-core/.npmignore @@ -0,0 +1,28 @@ +dist/ +grunt/ +node_modules +pkg/ +release_notes/ +spec/ +src/ +Gemfile +Gemfile.lock +Rakefile +jasmine-core.gemspec +.bundle/ +.gitignore +.gitmodules +.idea +.jshintrc +.rspec +.sass-cache/ +.travis.yml +*.sh +*.py +Gruntfile.js +lib/jasmine-core.rb +lib/jasmine-core/boot/ +lib/jasmine-core/spec +lib/jasmine-core/version.rb +lib/jasmine-core/*.py +sauce_connect.log diff --git a/www/node_modules/jasmine-core/CONTRIBUTING.md b/www/node_modules/jasmine-core/CONTRIBUTING.md new file mode 100644 index 0000000..8d990ff --- /dev/null +++ b/www/node_modules/jasmine-core/CONTRIBUTING.md @@ -0,0 +1,130 @@ +# Developing for Jasmine Core + +We welcome your contributions! Thanks for helping make Jasmine a better project for everyone. Please review the backlog and discussion lists before starting work. What you're looking for may already have been done. If it hasn't, the community can help make your contribution better. If you want to contribute but don't know what to work on, [issues tagged ready for work](https://github.com/jasmine/jasmine/labels/ready%20for%20work) should have enough detail to get started. + +## Links + +- [Jasmine Google Group](http://groups.google.com/group/jasmine-js) +- [Jasmine-dev Google Group](http://groups.google.com/group/jasmine-js-dev) +- [Jasmine on PivotalTracker](https://www.pivotaltracker.com/n/projects/10606) + +## General Workflow + +Please submit pull requests via feature branches using the semi-standard workflow of: + +```bash +git clone git@github.com:yourUserName/jasmine.git # Clone your fork +cd jasmine # Change directory +git remote add upstream https://github.com/jasmine/jasmine.git # Assign original repository to a remote named 'upstream' +git fetch upstream # Pull in changes not present in your local repository +git checkout -b my-new-feature # Create your feature branch +git commit -am 'Add some feature' # Commit your changes +git push origin my-new-feature # Push to the branch +``` + +Once you've pushed a feature branch to your forked repo, you're ready to open a pull request. We favor pull requests with very small, single commits with a single purpose. + +## Background + +### Directory Structure + +* `/src` contains all of the source files + * `/src/console` - Node.js-specific files + * `/src/core` - generic source files + * `/src/html` - browser-specific files +* `/spec` contains all of the tests + * mirrors the source directory + * there are some additional files +* `/dist` contains the standalone distributions as zip files +* `/lib` contains the generated files for distribution as the Jasmine Rubygem and the Python package + +### Self-testing + +Note that Jasmine tests itself. The files in `lib` are loaded first, defining the reference `jasmine`. Then the files in `src` are loaded, defining the reference `j$`. So there are two copies of the code loaded under test. + +The tests should always use `j$` to refer to the objects and functions that are being tested. But the tests can use functions on `jasmine` as needed. _Be careful how you structure any new test code_. Copy the patterns you see in the existing code - this ensures that the code you're testing is not leaking into the `jasmine` reference and vice-versa. + +### `boot.js` + +__This is new for Jasmine 2.0.__ + +This file does all of the setup necessary for Jasmine to work. It loads all of the code, creates an `Env`, attaches the global functions, and builds the reporter. It also sets up the execution of the `Env` - for browsers this is in `window.onload`. While the default in `lib` is appropriate for browsers, projects may wish to customize this file. + +For example, for Jasmine development there is a different `dev_boot.js` for Jasmine development that does more work. + +### Compatibility + +* Browser Minimum + * IE8 + * Firefox 3.x + * Chrome ?? + * Safari 5 + +## Development + +All source code belongs in `src/`. The `core/` directory contains the bulk of Jasmine's functionality. This code should remain browser- and environment-agnostic. If your feature or fix cannot be, as mentioned above, please degrade gracefully. Any code that should only be in a non-browser environment should live in `src/console/`. Any code that depends on a browser (specifically, it expects `window` to be the global or `document` is present) should live in `src/html/`. + +### Install Dependencies + +Jasmine Core relies on Ruby and Node.js. + +To install the Ruby dependencies, you will need Ruby, Rubygems, and Bundler available. Then: + + $ bundle + +...will install all of the Ruby dependencies. If the ffi gem fails to build its native extensions, you may need to manually install some system dependencies. On Ubuntu: + + $ apt-get install gcc ruby ruby-dev libxml2 libxml2-dev libxslt1-dev + +...should get you to the point that `bundle` can install everything. + +To install the Node dependencies, you will need Node.js, Npm, and [Grunt](http://gruntjs.com/), the [grunt-cli](https://github.com/gruntjs/grunt-cli) and ensure that `grunt` is on your path. + + $ npm install --local + +...will install all of the node modules locally. Now run + + $ grunt + +...if you see that JSHint runs, your system is ready. + +### How to write new Jasmine code + +Or, How to make a successful pull request + +* _Do not change the public interface_. Lots of projects depend on Jasmine and if you aren't careful you'll break them +* _Be environment agnostic_ - server-side developers are just as important as browser developers +* _Be browser agnostic_ - if you must rely on browser-specific functionality, please write it in a way that degrades gracefully +* _Write specs_ - Jasmine's a testing framework; don't add functionality without test-driving it +* _Write code in the style of the rest of the repo_ - Jasmine should look like a cohesive whole +* _Ensure the *entire* test suite is green_ in all the big browsers, Node, and JSHint - your contribution shouldn't break Jasmine for other users + +Follow these tips and your pull request, patch, or suggestion is much more likely to be integrated. + +### Running Specs + +Jasmine uses the [Jasmine Ruby gem](http://github.com/jasmine/jasmine-gem) to test itself in browser. + + $ bundle exec rake jasmine + +...and then visit `http://localhost:8888` to run specs. + +Jasmine uses the [Jasmine NPM package](http://github.com/jasmine/jasmine-npm) to test itself in a Node.js/npm environment. + + $ grunt execSpecsInNode + +...and then the results will print to the console. All specs run except those that expect a browser (the specs in `spec/html` are ignored). + +## Before Committing or Submitting a Pull Request + +1. Ensure all specs are green in browser *and* node +1. Ensure JSHint is green with `grunt jshint` +1. Build `jasmine.js` with `grunt buildDistribution` and run all specs again - this ensures that your changes self-test well + +## Submitting a Pull Request +1. Revert your changes to `jasmine.js` and `jasmine-html.js` + * We do this because `jasmine.js` and `jasmine-html.js` are auto-generated (as you've seen in the previous steps) and accepting multiple pull requests when this auto-generated file changes causes lots of headaches +1. When we accept your pull request, we will generate these files as a separate commit and merge the entire branch into master + +Note that we use Travis for Continuous Integration. We only accept green pull requests. + diff --git a/www/node_modules/jasmine-core/MANIFEST.in b/www/node_modules/jasmine-core/MANIFEST.in new file mode 100644 index 0000000..4d58eed --- /dev/null +++ b/www/node_modules/jasmine-core/MANIFEST.in @@ -0,0 +1,5 @@ +recursive-include . *.py +include lib/jasmine-core/*.js +include lib/jasmine-core/*.css +include images/*.png +include package.json diff --git a/www/node_modules/jasmine-core/MIT.LICENSE b/www/node_modules/jasmine-core/MIT.LICENSE new file mode 100644 index 0000000..aff8ed4 --- /dev/null +++ b/www/node_modules/jasmine-core/MIT.LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2008-2014 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/www/node_modules/jasmine-core/README.md b/www/node_modules/jasmine-core/README.md new file mode 100644 index 0000000..74d90d4 --- /dev/null +++ b/www/node_modules/jasmine-core/README.md @@ -0,0 +1,76 @@ +[](http://jasmine.github.io) + +[![Build Status](https://travis-ci.org/jasmine/jasmine.svg?branch=master)](https://travis-ci.org/jasmine/jasmine) +[![Code Climate](https://codeclimate.com/github/pivotal/jasmine.svg)](https://codeclimate.com/github/pivotal/jasmine) + +======= + +**A JavaScript Testing Framework** + +Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, [Node.js](http://nodejs.org) projects, or anywhere that JavaScript can run. + +Documentation & guides live here: [http://jasmine.github.io](http://jasmine.github.io/) +For a quick start guide of Jasmine 2.0, see the beginning of [http://jasmine.github.io/2.0/introduction.html](http://jasmine.github.io/2.0/introduction.html) + +Upgrading from Jasmine 1.x? Check out the [2.0 release notes](https://github.com/jasmine/jasmine/blob/v2.0.0/release_notes/20.md) for a list of what's new (including breaking interface changes). You can also read the [upgrade guide](http://jasmine.github.io/2.0/upgrading.html). + +## Contributing + +Please read the [contributors' guide](https://github.com/jasmine/jasmine/blob/master/CONTRIBUTING.md) + +## Installation + +For the Jasmine NPM module:
          +[https://github.com/jasmine/jasmine-npm](https://github.com/jasmine/jasmine-npm) + +For the Jasmine Ruby Gem:
          +[https://github.com/jasmine/jasmine-gem](https://github.com/jasmine/jasmine-gem) + +For the Jasmine Python Egg:
          +[https://github.com/jasmine/jasmine-py](https://github.com/jasmine/jasmine-py) + +To install Jasmine standalone on your local box: + +* Download the standalone distribution for your desired release from the [releases page](https://github.com/jasmine/jasmine/releases) +* Create a Jasmine directory in your project - `mkdir my-project/jasmine` +* Move the dist to your project directory - `mv jasmine/dist/jasmine-standalone-2.0.0.zip my-project/jasmine` +* Change directory - `cd my-project/jasmine` +* Unzip the dist - `unzip jasmine-standalone-2.0.0.zip` + +Add the following to your HTML file: + +```html + + + + + + +``` + +## Supported environments + +Jasmine tests itself across many browsers (Safari, Chrome, Firefox, PhantomJS, and new Internet Explorer) as well as node. To see the exact version tests are run against look at our [.travis.yml](https://github.com/jasmine/jasmine/blob/master/.travis.yml) + + +## Support + +* Search past discussions: [http://groups.google.com/group/jasmine-js](http://groups.google.com/group/jasmine-js) +* Send an email to the list: [jasmine-js@googlegroups.com](mailto:jasmine-js@googlegroups.com) +* View the project backlog at Pivotal Tracker: [http://www.pivotaltracker.com/projects/10606](http://www.pivotaltracker.com/projects/10606) +* Follow us on Twitter: [@JasmineBDD](http://twitter.com/JasmineBDD) + +## Maintainers + +* [Davis W. Frank](mailto:dwfrank@pivotal.io), Pivotal Labs +* [Rajan Agaskar](mailto:rajan@pivotal.io), Pivotal Labs +* [Gregg Van Hove](mailto:gvanhove@pivotal.io), Pivotal Labs +* [Greg Cobb](mailto:gcobb@pivotal.io), Pivotal Labs +* [Chris Amavisca](mailto:camavisca@pivotal.io), Pivotal Labs + +### Maintainers Emeritus + +* [Christian Williams](mailto:antixian666@gmail.com), Cloud Foundry +* Sheel Choksi + +Copyright (c) 2008-2015 Pivotal Labs. This software is licensed under the MIT License. diff --git a/www/node_modules/jasmine-core/RELEASE.md b/www/node_modules/jasmine-core/RELEASE.md new file mode 100644 index 0000000..e5273b0 --- /dev/null +++ b/www/node_modules/jasmine-core/RELEASE.md @@ -0,0 +1,73 @@ +# How to work on a Jasmine Release + +## Development +___Jasmine Core Maintainers Only___ + +Follow the instructions in `CONTRIBUTING.md` during development. + +### Git Rules + +Please work on feature branches. + +Please attempt to keep commits to `master` small, but cohesive. If a feature is contained in a bunch of small commits (e.g., it has several wip commits or small work), please squash them when merging back to `master`. + +### Version + +We attempt to stick to [Semantic Versioning](http://semver.org/). Most of the time, development should be against a new minor version - fixing bugs and adding new features that are backwards compatible. + +The current version lives in the file `/package.json`. This version will be the version number that is currently released. When releasing a new version, update `package.json` with the new version and `grunt build:copyVersionToGem` to update the gem version number. + +This version is used by both `jasmine.js` and the `jasmine-core` Ruby gem. + +Note that Jasmine should only use the "patch" version number in the following cases: + +* Changes related to packaging for a specific platform (npm, gem, or pip). +* Fixes for regressions. + +When jasmine-core revs its major or minor version, the binding libraries should also rev to that version. + +## Release + +When ready to release - specs are all green and the stories are done: + +1. Update the release notes in `release_notes` - use the Anchorman gem to generate the markdown file and edit accordingly +1. Update the version in `package.json` to a release candidate +1. Update any links or top-level landing page for the Github Pages + +### Build standalone distribution + +1. Build the standalone distribution with `grunt buildStandaloneDist` + +### Release the Python egg + +1. `python setup.py register sdist upload` You will need pypi credentials to upload the egg. + +### Release the Ruby gem + +1. Copy version to the Ruby gem with `grunt build:copyVersionToGem` +1. __NOTE__: You will likely need to point to a local jasmine gem in order to run tests locally. _Do not_ push this version of the Gemfile. +1. __NOTE__: You will likely need to push a new jasmine gem with a dependent version right after this release. +1. Push these changes to GitHub and verify that this SHA is green +1. `rake release` - tags the repo with the version, builds the `jasmine-core` gem, pushes the gem to Rubygems.org. In order to release you will have to ensure you have rubygems creds locally. + +### Release the NPM + +1. `npm adduser` to save your credentials locally +1. `npm publish .` to publish what's in `package.json` + +### Release the docs + +Probably only need to do this when releasing a minor version, and not a patch version. + +1. `cp -R edge ${version}` to copy the current edge docs to the new version +1. Add a link to the new version in `index.html` + +### Finally + +1. Visit the [Releases page for Jasmine](https://github.com/jasmine/jasmine/releases), find the tag just pushed. + 1. Paste in a link to the correct release notes for this release. The link should reference the blob and tag correctly, and the markdown file for the notes. + 1. If it is a pre-release, mark it as such. + 1. Attach the standalone zipfile + + +There should be a post to Pivotal Labs blog and a tweet to that link. diff --git a/www/node_modules/jasmine-core/bower.json b/www/node_modules/jasmine-core/bower.json new file mode 100644 index 0000000..c69673f --- /dev/null +++ b/www/node_modules/jasmine-core/bower.json @@ -0,0 +1,40 @@ +{ + "name": "jasmine-core", + "homepage": "http://jasmine.github.io", + "authors": [ + "slackersoft " + ], + "description": "Official packaging of Jasmine's core files", + "keywords": [ + "test", + "jasmine", + "tdd", + "bdd" + ], + "license": "MIT", + "moduleType": "globals", + "main": "lib/jasmine-core/jasmine.js", + "ignore": [ + "**/.*", + "dist", + "grunt", + "node_modules", + "pkg", + "release_notes", + "spec", + "src", + "Gemfile", + "Gemfile.lock", + "Rakefile", + "jasmine-core.gemspec", + "*.sh", + "*.py", + "Gruntfile.js", + "lib/jasmine-core.rb", + "lib/jasmine-core/boot/", + "lib/jasmine-core/spec", + "lib/jasmine-core/version.rb", + "lib/jasmine-core/*.py", + "sauce_connect.log" + ] +} diff --git a/www/node_modules/jasmine-core/images/jasmine-horizontal.png b/www/node_modules/jasmine-core/images/jasmine-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..ca287ff6235cb545659a77b21b5516b571d32815 GIT binary patch literal 1714 zcmaKscUV(b7{;R%6%|~7Y^W3v6v4$#$YPHo5SEo$T3Lb`h9Gz|2)Vf-KoD6Xiikj2 z0tHbK6@3s@$RELIyv?E~>Mm3ue`7vG2s!tX(Iue#1sdsZE== zY~3a;BfDKrUO`bwSw&TChx!j1T3S1GcJ0>PqrdmSK?6f0V-r&|Gn_e|NFrO?*xK1U zI6AqwQrtZ}JiQKk`}q3#2mJEu(V*av(6I1`<0np1qhe0Q#+{B&I0Mn>%tSVao6Ji| zO-nzUaV{%6C-;2bg^QO8E?+4sE-5RosI0nHQ&)ez;l|BdjkoXIZNC4o^-GvOI=jJ~yEdIIl>GPMrmX~A*5g3e^f(@DA z8sk0se8$}+Qm$pD!*^Av(Yn>gC>ztOUH3`ok`&xh-410a$TyT;4ED6x$%17{CQ9W; zFw{UEl?-R&VJ~LMM!&ePR{hFrX0|O?`G=9w9m(jDY3FuVU}n{3IhDx!{QbBk?O*o@JYiOF}o5QSl}se{4nq*ZM&-yX)YOHo0>4>8+8p3G0fAH})QLM&=o3 zI!tH6`_O%?Usk*P{+76g;NL@8e)WBm z&*rT{#;C)EK5-2rx*_HXgLU68*BZzz*mdG{HwE?G zhNll;ju?0IRUv~Ufl6Thf=^yI%UVG-=sIg+QlKe>K zZ+E?SSOhmJxjooh&=gI6RZ^A)i%qL5Irk~v(g?&pU9PPyzIof)t3A4=tMX}>3nwKt z$2coC-tWejTb1*wJ-W)i&GStO=LTG{k0rtak-|!k{a2@QLly_88$$?o7R|ZH!TKpF zm9$!Zs%^_s+>1j?4-M+B{* zKiBwA`?}_pWz^=Rj+~C(TsnHy={3!+^e%Rra+{z~s%tpql;iR7qS-64F$Gj+czU6l z#;3Ce<>O}uE}J@NuayWY+11fa4<9(XsnS}fvReDtcAT+R(4HuFa!;|tdB^9&5mdTm zpwwK;?YXRgKGJ7_UeN6ME6okZp*ypWym{_*-n^J6dl$-YwzoZyZRupzk8OwwVFhFb zQ^dPD{lTBqdd!jo`3gmM##1?T{X-irVVj%wMH(4mr0X%1NPNHC(3-lURq9?;X-jjv zt}@P~a&?vMHDzLr|B3fa8aSkz`zo#Vv7=sVdbMP8mC0j%upxr&*ljS^n(BE%qrdiE n4)i1wiqD%ktT_`s{B^*buNcP{f4M*be*qX93rBJV(U<-=9$g`{ literal 0 HcmV?d00001 diff --git a/www/node_modules/jasmine-core/images/jasmine-horizontal.svg b/www/node_modules/jasmine-core/images/jasmine-horizontal.svg new file mode 100644 index 0000000..ba8990e --- /dev/null +++ b/www/node_modules/jasmine-core/images/jasmine-horizontal.svg @@ -0,0 +1,102 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/www/node_modules/jasmine-core/images/jasmine_favicon.png b/www/node_modules/jasmine-core/images/jasmine_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3b84583be4b9d5ae9cd5cae07b2dbaa5ebb0ad1c GIT binary patch literal 1486 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0VDb;}332@o1PuQh8X8uGu4-^- zn3*=SA+%wV=cI;&hMB$%-Lc(MLmN8%IwwUpbcA;F2Q;)twND9bn-tpC9oR4-vb8I; zp+Bg#FSKP+P(yD-%f!%zo}iZgh=%Ua=KkP@iNVbiLYsSn8~VeW`+}P$1~&ACHcbd_ z=nZb_32o{NZkZ6&1k^hrxT!a&r8lIdAIJ@9nh?|iRMsET+#A%`AKKg-(%2K)*cZ|~ zA-J&*$PEUH08MM`4Q=iVY3vVfhN$TUscGs5sR8P31X|G_+SnTcv<0XVC=Rr!u|K4# zHyCJU6UYRR;%2BtKv^I=q#2|DECn_k@wXU|=@ zeD&J(8#iy=zH|5fgNKiwJbm`!<*V0k-oF3v@zdvTKYsrD^Y>rGdNDU(R>|^oaSW-5 z%f0Y2x+hSk{p0&HA;E60Oq1S3r7U;(X3MH#?W9nxXzk)srlC4P;cZYe&v*G}mgi%< ze(bTl{@&_)cX8b-kvX%ff9D22e*M~7edm|;|Jb8m2JBzkzKiSBKR0n*?XSyM6fxZY zJ4bb;vGKRiKP(ztq3sJx9iq$Re`-EEQU0KE$sdyqayzp6H-7x+oGKZ_6;hQ_Y|p&y z7o`N7g@ z8Yl1HKL;mFo4BdxljF1}KbfMR6nNdLyPnEap1MqBdI?{g$L58$P8+wftLX5R70)7n`#pwItnbma$w{%`M(`wpsu2rJ60rdGCc> z+~lm)viMYM`=uXwK_$`#_UtRZMO=2-IV)l2vc~)doyPvg-RmxtACQ#v{7}5$&isV+ zPws~n?@yNGy#H1=vTI?;CAl9~9#VgqJ+7`4y~R+Wyj0U+){?lm9r6mtf0gl_VmUW^ z%eje%?jM%^eLuUg#ybXaQM{yQy&8UgiQ`HQ+=iTpjfd0iJ@ ssyFi&dF4%9dEry;pNN)Q>$jg_dr3r;PHA*CFc&d+y85}Sb4q9e0J812W&i*H literal 0 HcmV?d00001 diff --git a/www/node_modules/jasmine-core/jasmine_core.egg-info/PKG-INFO b/www/node_modules/jasmine-core/jasmine_core.egg-info/PKG-INFO new file mode 100644 index 0000000..fe5901a --- /dev/null +++ b/www/node_modules/jasmine-core/jasmine_core.egg-info/PKG-INFO @@ -0,0 +1,30 @@ +Metadata-Version: 1.1 +Name: jasmine-core +Version: 2.2.1 +Summary: Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, Node.js (http://nodejs.org) projects, or anywhere that JavaScript can run. +Home-page: http://jasmine.github.io +Author: Pivotal Labs +Author-email: jasmine-js@googlegroups.com +License: MIT +Description: UNKNOWN +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Environment :: Web Environment +Classifier: Framework :: Django +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Software Development :: Build Tools +Classifier: Topic :: Software Development :: Quality Assurance +Classifier: Topic :: Software Development :: Testing diff --git a/www/node_modules/jasmine-core/jasmine_core.egg-info/SOURCES.txt b/www/node_modules/jasmine-core/jasmine_core.egg-info/SOURCES.txt new file mode 100644 index 0000000..cf3dcc8 --- /dev/null +++ b/www/node_modules/jasmine-core/jasmine_core.egg-info/SOURCES.txt @@ -0,0 +1,18 @@ +MANIFEST.in +package.json +images/__init__.py +images/jasmine-horizontal.png +images/jasmine_favicon.png +jasmine_core.egg-info/PKG-INFO +jasmine_core.egg-info/SOURCES.txt +jasmine_core.egg-info/dependency_links.txt +jasmine_core.egg-info/requires.txt +jasmine_core.egg-info/top_level.txt +lib/jasmine-core/__init__.py +lib/jasmine-core/boot.js +lib/jasmine-core/core.py +lib/jasmine-core/jasmine-html.js +lib/jasmine-core/jasmine.css +lib/jasmine-core/jasmine.js +lib/jasmine-core/json2.js +lib/jasmine-core/node_boot.js \ No newline at end of file diff --git a/www/node_modules/jasmine-core/jasmine_core.egg-info/dependency_links.txt b/www/node_modules/jasmine-core/jasmine_core.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/www/node_modules/jasmine-core/jasmine_core.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/www/node_modules/jasmine-core/jasmine_core.egg-info/requires.txt b/www/node_modules/jasmine-core/jasmine_core.egg-info/requires.txt new file mode 100644 index 0000000..119bcbe --- /dev/null +++ b/www/node_modules/jasmine-core/jasmine_core.egg-info/requires.txt @@ -0,0 +1,2 @@ +glob2>=0.4.1 +ordereddict==1.1 diff --git a/www/node_modules/jasmine-core/jasmine_core.egg-info/top_level.txt b/www/node_modules/jasmine-core/jasmine_core.egg-info/top_level.txt new file mode 100644 index 0000000..fb7d8b2 --- /dev/null +++ b/www/node_modules/jasmine-core/jasmine_core.egg-info/top_level.txt @@ -0,0 +1 @@ +jasmine_core diff --git a/www/node_modules/jasmine-core/lib/console/console.js b/www/node_modules/jasmine-core/lib/console/console.js new file mode 100644 index 0000000..e154806 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/console/console.js @@ -0,0 +1,190 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== 'undefined' && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().console = function(jRequire, j$) { + j$.ConsoleReporter = jRequire.ConsoleReporter(); +}; + +getJasmineRequireObj().ConsoleReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function ConsoleReporter(options) { + var print = options.print, + showColors = options.showColors || false, + onComplete = options.onComplete || function() {}, + timer = options.timer || noopTimer, + specCount, + failureCount, + failedSpecs = [], + pendingCount, + ansi = { + green: '\x1B[32m', + red: '\x1B[31m', + yellow: '\x1B[33m', + none: '\x1B[0m' + }, + failedSuites = []; + + print('ConsoleReporter is deprecated and will be removed in a future version.'); + + this.jasmineStarted = function() { + specCount = 0; + failureCount = 0; + pendingCount = 0; + print('Started'); + printNewline(); + timer.start(); + }; + + this.jasmineDone = function() { + printNewline(); + for (var i = 0; i < failedSpecs.length; i++) { + specFailureDetails(failedSpecs[i]); + } + + if(specCount > 0) { + printNewline(); + + var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' + + failureCount + ' ' + plural('failure', failureCount); + + if (pendingCount) { + specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount); + } + + print(specCounts); + } else { + print('No specs found'); + } + + printNewline(); + var seconds = timer.elapsed() / 1000; + print('Finished in ' + seconds + ' ' + plural('second', seconds)); + printNewline(); + + for(i = 0; i < failedSuites.length; i++) { + suiteFailureDetails(failedSuites[i]); + } + + onComplete(failureCount === 0); + }; + + this.specDone = function(result) { + specCount++; + + if (result.status == 'pending') { + pendingCount++; + print(colored('yellow', '*')); + return; + } + + if (result.status == 'passed') { + print(colored('green', '.')); + return; + } + + if (result.status == 'failed') { + failureCount++; + failedSpecs.push(result); + print(colored('red', 'F')); + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + failureCount++; + failedSuites.push(result); + } + }; + + return this; + + function printNewline() { + print('\n'); + } + + function colored(color, str) { + return showColors ? (ansi[color] + str + ansi.none) : str; + } + + function plural(str, count) { + return count == 1 ? str : str + 's'; + } + + function repeat(thing, times) { + var arr = []; + for (var i = 0; i < times; i++) { + arr.push(thing); + } + return arr; + } + + function indent(str, spaces) { + var lines = (str || '').split('\n'); + var newArr = []; + for (var i = 0; i < lines.length; i++) { + newArr.push(repeat(' ', spaces).join('') + lines[i]); + } + return newArr.join('\n'); + } + + function specFailureDetails(result) { + printNewline(); + print(result.fullName); + + for (var i = 0; i < result.failedExpectations.length; i++) { + var failedExpectation = result.failedExpectations[i]; + printNewline(); + print(indent(failedExpectation.message, 2)); + print(indent(failedExpectation.stack, 2)); + } + + printNewline(); + } + + function suiteFailureDetails(result) { + for (var i = 0; i < result.failedExpectations.length; i++) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', 'AfterAll ' + result.failedExpectations[i].message)); + + } + printNewline(); + } + } + + return ConsoleReporter; +}; diff --git a/www/node_modules/jasmine-core/lib/jasmine-core.js b/www/node_modules/jasmine-core/lib/jasmine-core.js new file mode 100644 index 0000000..fe0ecd8 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core.js @@ -0,0 +1,37 @@ +module.exports = require("./jasmine-core/jasmine.js"); +module.exports.boot = require('./jasmine-core/node_boot.js'); + +var path = require('path'), + fs = require('fs'); + +var rootPath = path.join(__dirname, "jasmine-core"), + bootFiles = ['boot.js'], + nodeBootFiles = ['node_boot.js'], + cssFiles = [], + jsFiles = [], + jsFilesToSkip = ['jasmine.js'].concat(bootFiles, nodeBootFiles); + +fs.readdirSync(rootPath).forEach(function(file) { + if(fs.statSync(path.join(rootPath, file)).isFile()) { + switch(path.extname(file)) { + case '.css': + cssFiles.push(file); + break; + case '.js': + if (jsFilesToSkip.indexOf(file) < 0) { + jsFiles.push(file); + } + break; + } + } +}); + +module.exports.files = { + path: rootPath, + bootDir: rootPath, + bootFiles: bootFiles, + nodeBootFiles: nodeBootFiles, + cssFiles: cssFiles, + jsFiles: ['jasmine.js'].concat(jsFiles), + imagesDir: path.join(__dirname, '../images') +}; diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/boot.js b/www/node_modules/jasmine-core/lib/jasmine-core/boot.js new file mode 100644 index 0000000..a1002de --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/boot.js @@ -0,0 +1,152 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +(function() { + + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + window.jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. + */ + jasmineRequire.html(jasmine); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = jasmineRequire.interface(jasmine, env); + + /** + * Add all of the Jasmine global/public interface to the global scope, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + extend(window, jasmineInterface); + + /** + * ## Runner Parameters + * + * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. + */ + + var queryString = new jasmine.QueryString({ + getWindowLocation: function() { return window.location; } + }); + + var catchingExceptions = queryString.getParam("catch"); + env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions); + + var throwingExpectationFailures = queryString.getParam("throwFailures"); + env.throwOnExpectationFailure(throwingExpectationFailures); + + var random = queryString.getParam("random"); + env.randomizeTests(random); + + var seed = queryString.getParam("seed"); + if (seed) { + env.seed(seed); + } + + /** + * ## Reporters + * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). + */ + var htmlReporter = new jasmine.HtmlReporter({ + env: env, + onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); }, + onThrowExpectationsClick: function() { queryString.navigateWithNewParam("throwFailures", !env.throwingExpectationFailures()); }, + onRandomClick: function() { queryString.navigateWithNewParam("random", !env.randomTests()); }, + addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, + getContainer: function() { return document.body; }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmine.Timer() + }); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); + env.addReporter(htmlReporter); + + /** + * Filter which specs will be run by matching the start of the full name against the `spec` query param. + */ + var specFilter = new jasmine.HtmlSpecFilter({ + filterString: function() { return queryString.getParam("spec"); } + }); + + env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + + /** + * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. + */ + window.setTimeout = window.setTimeout; + window.setInterval = window.setInterval; + window.clearTimeout = window.clearTimeout; + window.clearInterval = window.clearInterval; + + /** + * ## Execution + * + * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. + */ + var currentWindowOnload = window.onload; + + window.onload = function() { + if (currentWindowOnload) { + currentWindowOnload(); + } + htmlReporter.initialize(); + env.execute(); + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + +}()); diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js b/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js new file mode 100644 index 0000000..fe95f89 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js @@ -0,0 +1,24 @@ +function Player() { +} +Player.prototype.play = function(song) { + this.currentlyPlayingSong = song; + this.isPlaying = true; +}; + +Player.prototype.pause = function() { + this.isPlaying = false; +}; + +Player.prototype.resume = function() { + if (this.isPlaying) { + throw new Error("song is already playing"); + } + + this.isPlaying = true; +}; + +Player.prototype.makeFavorite = function() { + this.currentlyPlayingSong.persistFavoriteStatus(true); +}; + +module.exports = Player; diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js b/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js new file mode 100644 index 0000000..3415bb8 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js @@ -0,0 +1,9 @@ +function Song() { +} + +Song.prototype.persistFavoriteStatus = function(value) { + // something complicated + throw new Error("not yet implemented"); +}; + +module.exports = Song; diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/helpers/jasmine_examples/SpecHelper.js b/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/helpers/jasmine_examples/SpecHelper.js new file mode 100644 index 0000000..578b3e8 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/helpers/jasmine_examples/SpecHelper.js @@ -0,0 +1,15 @@ +beforeEach(function () { + jasmine.addMatchers({ + toBePlaying: function () { + return { + compare: function (actual, expected) { + var player = actual; + + return { + pass: player.currentlyPlayingSong === expected && player.isPlaying + } + } + }; + } + }); +}); diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/jasmine_examples/PlayerSpec.js b/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/jasmine_examples/PlayerSpec.js new file mode 100644 index 0000000..80f149e --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/jasmine_examples/PlayerSpec.js @@ -0,0 +1,60 @@ +describe("Player", function() { + var Player = require('../../lib/jasmine_examples/Player'); + var Song = require('../../lib/jasmine_examples/Song'); + var player; + var song; + + beforeEach(function() { + player = new Player(); + song = new Song(); + }); + + it("should be able to play a Song", function() { + player.play(song); + expect(player.currentlyPlayingSong).toEqual(song); + + //demonstrates use of custom matcher + expect(player).toBePlaying(song); + }); + + describe("when song has been paused", function() { + beforeEach(function() { + player.play(song); + player.pause(); + }); + + it("should indicate that the song is currently paused", function() { + expect(player.isPlaying).toBeFalsy(); + + // demonstrates use of 'not' with a custom matcher + expect(player).not.toBePlaying(song); + }); + + it("should be possible to resume", function() { + player.resume(); + expect(player.isPlaying).toBeTruthy(); + expect(player.currentlyPlayingSong).toEqual(song); + }); + }); + + // demonstrates use of spies to intercept and test method calls + it("tells the current song if the user has made it a favorite", function() { + spyOn(song, 'persistFavoriteStatus'); + + player.play(song); + player.makeFavorite(); + + expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true); + }); + + //demonstrates use of expected exceptions + describe("#resume", function() { + it("should throw an exception if song is already playing", function() { + player.play(song); + + expect(function() { + player.resume(); + }).toThrowError("song is already playing"); + }); + }); +}); diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/PlayerSpec.js b/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/PlayerSpec.js new file mode 100644 index 0000000..f17521f --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/PlayerSpec.js @@ -0,0 +1,58 @@ +describe("Player", function() { + var player; + var song; + + beforeEach(function() { + player = new Player(); + song = new Song(); + }); + + it("should be able to play a Song", function() { + player.play(song); + expect(player.currentlyPlayingSong).toEqual(song); + + //demonstrates use of custom matcher + expect(player).toBePlaying(song); + }); + + describe("when song has been paused", function() { + beforeEach(function() { + player.play(song); + player.pause(); + }); + + it("should indicate that the song is currently paused", function() { + expect(player.isPlaying).toBeFalsy(); + + // demonstrates use of 'not' with a custom matcher + expect(player).not.toBePlaying(song); + }); + + it("should be possible to resume", function() { + player.resume(); + expect(player.isPlaying).toBeTruthy(); + expect(player.currentlyPlayingSong).toEqual(song); + }); + }); + + // demonstrates use of spies to intercept and test method calls + it("tells the current song if the user has made it a favorite", function() { + spyOn(song, 'persistFavoriteStatus'); + + player.play(song); + player.makeFavorite(); + + expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true); + }); + + //demonstrates use of expected exceptions + describe("#resume", function() { + it("should throw an exception if song is already playing", function() { + player.play(song); + + expect(function() { + player.resume(); + }).toThrowError("song is already playing"); + }); + }); +}); diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/SpecHelper.js b/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/SpecHelper.js new file mode 100644 index 0000000..126752d --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/SpecHelper.js @@ -0,0 +1,15 @@ +beforeEach(function () { + jasmine.addMatchers({ + toBePlaying: function () { + return { + compare: function (actual, expected) { + var player = actual; + + return { + pass: player.currentlyPlayingSong === expected && player.isPlaying + }; + } + }; + } + }); +}); diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Player.js b/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Player.js new file mode 100644 index 0000000..fcce826 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Player.js @@ -0,0 +1,22 @@ +function Player() { +} +Player.prototype.play = function(song) { + this.currentlyPlayingSong = song; + this.isPlaying = true; +}; + +Player.prototype.pause = function() { + this.isPlaying = false; +}; + +Player.prototype.resume = function() { + if (this.isPlaying) { + throw new Error("song is already playing"); + } + + this.isPlaying = true; +}; + +Player.prototype.makeFavorite = function() { + this.currentlyPlayingSong.persistFavoriteStatus(true); +}; \ No newline at end of file diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Song.js b/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Song.js new file mode 100644 index 0000000..a8a3f2d --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Song.js @@ -0,0 +1,7 @@ +function Song() { +} + +Song.prototype.persistFavoriteStatus = function(value) { + // something complicated + throw new Error("not yet implemented"); +}; \ No newline at end of file diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js b/www/node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js new file mode 100644 index 0000000..da23532 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js @@ -0,0 +1,473 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +jasmineRequire.html = function(j$) { + j$.ResultsNode = jasmineRequire.ResultsNode(); + j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); + j$.QueryString = jasmineRequire.QueryString(); + j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); +}; + +jasmineRequire.HtmlReporter = function(j$) { + + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + function HtmlReporter(options) { + var env = options.env || {}, + getContainer = options.getContainer, + createElement = options.createElement, + createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, + onThrowExpectationsClick = options.onThrowExpectationsClick || function() {}, + onRandomClick = options.onRandomClick || function() {}, + addToExistingQueryString = options.addToExistingQueryString || defaultQueryString, + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0, + htmlReporterMain, + symbols, + failedSuites = []; + + this.initialize = function() { + clearPrior(); + htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'}, + createDom('div', {className: 'jasmine-banner'}, + createDom('a', {className: 'jasmine-title', href: 'http://jasmine.github.io/', target: '_blank'}), + createDom('span', {className: 'jasmine-version'}, j$.version) + ), + createDom('ul', {className: 'jasmine-symbol-summary'}), + createDom('div', {className: 'jasmine-alert'}), + createDom('div', {className: 'jasmine-results'}, + createDom('div', {className: 'jasmine-failures'}) + ) + ); + getContainer().appendChild(htmlReporterMain); + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + var summary = createDom('div', {className: 'jasmine-summary'}); + + var topResults = new j$.ResultsNode({}, '', null), + currentParent = topResults; + + this.suiteStarted = function(result) { + currentParent.addChild(result, 'suite'); + currentParent = currentParent.last(); + }; + + this.suiteDone = function(result) { + if (result.status == 'failed') { + failedSuites.push(result); + } + + if (currentParent == topResults) { + return; + } + + currentParent = currentParent.parent; + }; + + this.specStarted = function(result) { + currentParent.addChild(result, 'spec'); + }; + + var failures = []; + this.specDone = function(result) { + if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') { + console.error('Spec \'' + result.fullName + '\' has no expectations.'); + } + + if (result.status != 'disabled') { + specsExecuted++; + } + + if (!symbols){ + symbols = find('.jasmine-symbol-summary'); + } + + symbols.appendChild(createDom('li', { + className: noExpectations(result) ? 'jasmine-empty' : 'jasmine-' + result.status, + id: 'spec_' + result.id, + title: result.fullName + } + )); + + if (result.status == 'failed') { + failureCount++; + + var failure = + createDom('div', {className: 'jasmine-spec-detail jasmine-failed'}, + createDom('div', {className: 'jasmine-description'}, + createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName) + ), + createDom('div', {className: 'jasmine-messages'}) + ); + var messages = failure.childNodes[1]; + + for (var i = 0; i < result.failedExpectations.length; i++) { + var expectation = result.failedExpectations[i]; + messages.appendChild(createDom('div', {className: 'jasmine-result-message'}, expectation.message)); + messages.appendChild(createDom('div', {className: 'jasmine-stack-trace'}, expectation.stack)); + } + + failures.push(failure); + } + + if (result.status == 'pending') { + pendingSpecCount++; + } + }; + + this.jasmineDone = function(doneResult) { + var banner = find('.jasmine-banner'); + var alert = find('.jasmine-alert'); + var order = doneResult && doneResult.order; + alert.appendChild(createDom('span', {className: 'jasmine-duration'}, 'finished in ' + timer.elapsed() / 1000 + 's')); + + banner.appendChild( + createDom('div', { className: 'jasmine-run-options' }, + createDom('span', { className: 'jasmine-trigger' }, 'Options'), + createDom('div', { className: 'jasmine-payload' }, + createDom('div', { className: 'jasmine-exceptions' }, + createDom('input', { + className: 'jasmine-raise', + id: 'jasmine-raise-exceptions', + type: 'checkbox' + }), + createDom('label', { className: 'jasmine-label', 'for': 'jasmine-raise-exceptions' }, 'raise exceptions')), + createDom('div', { className: 'jasmine-throw-failures' }, + createDom('input', { + className: 'jasmine-throw', + id: 'jasmine-throw-failures', + type: 'checkbox' + }), + createDom('label', { className: 'jasmine-label', 'for': 'jasmine-throw-failures' }, 'stop spec on expectation failure')), + createDom('div', { className: 'jasmine-random-order' }, + createDom('input', { + className: 'jasmine-random', + id: 'jasmine-random-order', + type: 'checkbox' + }), + createDom('label', { className: 'jasmine-label', 'for': 'jasmine-random-order' }, 'run tests in random order')) + ) + )); + + var raiseCheckbox = find('#jasmine-raise-exceptions'); + + raiseCheckbox.checked = !env.catchingExceptions(); + raiseCheckbox.onclick = onRaiseExceptionsClick; + + var throwCheckbox = find('#jasmine-throw-failures'); + throwCheckbox.checked = env.throwingExpectationFailures(); + throwCheckbox.onclick = onThrowExpectationsClick; + + var randomCheckbox = find('#jasmine-random-order'); + randomCheckbox.checked = env.randomTests(); + randomCheckbox.onclick = onRandomClick; + + var optionsMenu = find('.jasmine-run-options'), + optionsTrigger = optionsMenu.querySelector('.jasmine-trigger'), + optionsPayload = optionsMenu.querySelector('.jasmine-payload'), + isOpen = /\bjasmine-open\b/; + + optionsTrigger.onclick = function() { + if (isOpen.test(optionsPayload.className)) { + optionsPayload.className = optionsPayload.className.replace(isOpen, ''); + } else { + optionsPayload.className += ' jasmine-open'; + } + }; + + if (specsExecuted < totalSpecsDefined) { + var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all'; + alert.appendChild( + createDom('span', {className: 'jasmine-bar jasmine-skipped'}, + createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage) + ) + ); + } + var statusBarMessage = ''; + var statusBarClassName = 'jasmine-bar '; + + if (totalSpecsDefined > 0) { + statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount); + if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); } + statusBarClassName += (failureCount > 0) ? 'jasmine-failed' : 'jasmine-passed'; + } else { + statusBarClassName += 'jasmine-skipped'; + statusBarMessage += 'No specs found'; + } + + var seedBar; + if (order && order.random) { + seedBar = createDom('span', {className: 'jasmine-seed-bar'}, + ', randomized with seed ', + createDom('a', {title: 'randomized with seed ' + order.seed, href: seedHref(order.seed)}, order.seed) + ); + } + + alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage, seedBar)); + + for(i = 0; i < failedSuites.length; i++) { + var failedSuite = failedSuites[i]; + for(var j = 0; j < failedSuite.failedExpectations.length; j++) { + var errorBarMessage = 'AfterAll ' + failedSuite.failedExpectations[j].message; + var errorBarClassName = 'jasmine-bar jasmine-errored'; + alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage)); + } + } + + var results = find('.jasmine-results'); + results.appendChild(summary); + + summaryList(topResults, summary); + + function summaryList(resultsTree, domParent) { + var specListNode; + for (var i = 0; i < resultsTree.children.length; i++) { + var resultNode = resultsTree.children[i]; + if (resultNode.type == 'suite') { + var suiteListNode = createDom('ul', {className: 'jasmine-suite', id: 'suite-' + resultNode.result.id}, + createDom('li', {className: 'jasmine-suite-detail'}, + createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description) + ) + ); + + summaryList(resultNode, suiteListNode); + domParent.appendChild(suiteListNode); + } + if (resultNode.type == 'spec') { + if (domParent.getAttribute('class') != 'jasmine-specs') { + specListNode = createDom('ul', {className: 'jasmine-specs'}); + domParent.appendChild(specListNode); + } + var specDescription = resultNode.result.description; + if(noExpectations(resultNode.result)) { + specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription; + } + if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') { + specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason; + } + specListNode.appendChild( + createDom('li', { + className: 'jasmine-' + resultNode.result.status, + id: 'spec-' + resultNode.result.id + }, + createDom('a', {href: specHref(resultNode.result)}, specDescription) + ) + ); + } + } + } + + if (failures.length) { + alert.appendChild( + createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-spec-list'}, + createDom('span', {}, 'Spec List | '), + createDom('a', {className: 'jasmine-failures-menu', href: '#'}, 'Failures'))); + alert.appendChild( + createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-failure-list'}, + createDom('a', {className: 'jasmine-spec-list-menu', href: '#'}, 'Spec List'), + createDom('span', {}, ' | Failures '))); + + find('.jasmine-failures-menu').onclick = function() { + setMenuModeTo('jasmine-failure-list'); + }; + find('.jasmine-spec-list-menu').onclick = function() { + setMenuModeTo('jasmine-spec-list'); + }; + + setMenuModeTo('jasmine-failure-list'); + + var failureNode = find('.jasmine-failures'); + for (var i = 0; i < failures.length; i++) { + failureNode.appendChild(failures[i]); + } + } + }; + + return this; + + function find(selector) { + return getContainer().querySelector('.jasmine_html-reporter ' + selector); + } + + function clearPrior() { + // return the reporter + var oldReporter = find(''); + + if(oldReporter) { + getContainer().removeChild(oldReporter); + } + } + + function createDom(type, attrs, childrenVarArgs) { + var el = createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(createTextNode(child)); + } else { + if (child) { + el.appendChild(child); + } + } + } + + for (var attr in attrs) { + if (attr == 'className') { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; + } + + function pluralize(singular, count) { + var word = (count == 1 ? singular : singular + 's'); + + return '' + count + ' ' + word; + } + + function specHref(result) { + return addToExistingQueryString('spec', result.fullName); + } + + function seedHref(seed) { + return addToExistingQueryString('seed', seed); + } + + function defaultQueryString(key, value) { + return '?' + key + '=' + value; + } + + function setMenuModeTo(mode) { + htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode); + } + + function noExpectations(result) { + return (result.failedExpectations.length + result.passedExpectations.length) === 0 && + result.status === 'passed'; + } + } + + return HtmlReporter; +}; + +jasmineRequire.HtmlSpecFilter = function() { + function HtmlSpecFilter(options) { + var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; + } + + return HtmlSpecFilter; +}; + +jasmineRequire.ResultsNode = function() { + function ResultsNode(result, type, parent) { + this.result = result; + this.type = type; + this.parent = parent; + + this.children = []; + + this.addChild = function(result, type) { + this.children.push(new ResultsNode(result, type, this)); + }; + + this.last = function() { + return this.children[this.children.length - 1]; + }; + } + + return ResultsNode; +}; + +jasmineRequire.QueryString = function() { + function QueryString(options) { + + this.navigateWithNewParam = function(key, value) { + options.getWindowLocation().search = this.fullStringWithNewParam(key, value); + }; + + this.fullStringWithNewParam = function(key, value) { + var paramMap = queryStringToParamMap(); + paramMap[key] = value; + return toQueryString(paramMap); + }; + + this.getParam = function(key) { + return queryStringToParamMap()[key]; + }; + + return this; + + function toQueryString(paramMap) { + var qStrPairs = []; + for (var prop in paramMap) { + qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop])); + } + return '?' + qStrPairs.join('&'); + } + + function queryStringToParamMap() { + var paramStr = options.getWindowLocation().search.substring(1), + params = [], + paramMap = {}; + + if (paramStr.length > 0) { + params = paramStr.split('&'); + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + var value = decodeURIComponent(p[1]); + if (value === 'true' || value === 'false') { + value = JSON.parse(value); + } + paramMap[decodeURIComponent(p[0])] = value; + } + } + + return paramMap; + } + + } + + return QueryString; +}; diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.css b/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.css new file mode 100644 index 0000000..6319982 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.css @@ -0,0 +1,58 @@ +body { overflow-y: scroll; } + +.jasmine_html-reporter { background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333; } +.jasmine_html-reporter a { text-decoration: none; } +.jasmine_html-reporter a:hover { text-decoration: underline; } +.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; } +.jasmine_html-reporter .jasmine-banner, .jasmine_html-reporter .jasmine-symbol-summary, .jasmine_html-reporter .jasmine-summary, .jasmine_html-reporter .jasmine-result-message, .jasmine_html-reporter .jasmine-spec .jasmine-description, .jasmine_html-reporter .jasmine-spec-detail .jasmine-description, .jasmine_html-reporter .jasmine-alert .jasmine-bar, .jasmine_html-reporter .jasmine-stack-trace { padding-left: 9px; padding-right: 9px; } +.jasmine_html-reporter .jasmine-banner { position: relative; } +.jasmine_html-reporter .jasmine-banner .jasmine-title { background: url('data:image/png;base64,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') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; } +.jasmine_html-reporter .jasmine-banner .jasmine-version { margin-left: 14px; position: relative; top: 6px; } +.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; } +.jasmine_html-reporter .jasmine-version { color: #aaa; } +.jasmine_html-reporter .jasmine-banner { margin-top: 14px; } +.jasmine_html-reporter .jasmine-duration { color: #fff; float: right; line-height: 28px; padding-right: 9px; } +.jasmine_html-reporter .jasmine-symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; } +.jasmine_html-reporter .jasmine-symbol-summary li { display: inline-block; height: 10px; width: 14px; font-size: 16px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed { font-size: 14px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed:before { color: #007069; content: "\02022"; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed { line-height: 9px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-disabled { font-size: 14px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-disabled:before { color: #bababa; content: "\02022"; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending { line-height: 17px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending:before { color: #ba9d37; content: "*"; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty { font-size: 14px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty:before { color: #ba9d37; content: "\02022"; } +.jasmine_html-reporter .jasmine-run-options { float: right; margin-right: 5px; border: 1px solid #8a4182; color: #8a4182; position: relative; line-height: 20px; } +.jasmine_html-reporter .jasmine-run-options .jasmine-trigger { cursor: pointer; padding: 8px 16px; } +.jasmine_html-reporter .jasmine-run-options .jasmine-payload { position: absolute; display: none; right: -1px; border: 1px solid #8a4182; background-color: #eee; white-space: nowrap; padding: 4px 8px; } +.jasmine_html-reporter .jasmine-run-options .jasmine-payload.jasmine-open { display: block; } +.jasmine_html-reporter .jasmine-bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +.jasmine_html-reporter .jasmine-bar.jasmine-failed { background-color: #ca3a11; } +.jasmine_html-reporter .jasmine-bar.jasmine-passed { background-color: #007069; } +.jasmine_html-reporter .jasmine-bar.jasmine-skipped { background-color: #bababa; } +.jasmine_html-reporter .jasmine-bar.jasmine-errored { background-color: #ca3a11; } +.jasmine_html-reporter .jasmine-bar.jasmine-menu { background-color: #fff; color: #aaa; } +.jasmine_html-reporter .jasmine-bar.jasmine-menu a { color: #333; } +.jasmine_html-reporter .jasmine-bar a { color: white; } +.jasmine_html-reporter.jasmine-spec-list .jasmine-bar.jasmine-menu.jasmine-failure-list, .jasmine_html-reporter.jasmine-spec-list .jasmine-results .jasmine-failures { display: none; } +.jasmine_html-reporter.jasmine-failure-list .jasmine-bar.jasmine-menu.jasmine-spec-list, .jasmine_html-reporter.jasmine-failure-list .jasmine-summary { display: none; } +.jasmine_html-reporter .jasmine-results { margin-top: 14px; } +.jasmine_html-reporter .jasmine-summary { margin-top: 14px; } +.jasmine_html-reporter .jasmine-summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } +.jasmine_html-reporter .jasmine-summary ul.jasmine-suite { margin-top: 7px; margin-bottom: 7px; } +.jasmine_html-reporter .jasmine-summary li.jasmine-passed a { color: #007069; } +.jasmine_html-reporter .jasmine-summary li.jasmine-failed a { color: #ca3a11; } +.jasmine_html-reporter .jasmine-summary li.jasmine-empty a { color: #ba9d37; } +.jasmine_html-reporter .jasmine-summary li.jasmine-pending a { color: #ba9d37; } +.jasmine_html-reporter .jasmine-summary li.jasmine-disabled a { color: #bababa; } +.jasmine_html-reporter .jasmine-description + .jasmine-suite { margin-top: 0; } +.jasmine_html-reporter .jasmine-suite { margin-top: 14px; } +.jasmine_html-reporter .jasmine-suite a { color: #333; } +.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail { margin-bottom: 28px; } +.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description { background-color: #ca3a11; } +.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description a { color: white; } +.jasmine_html-reporter .jasmine-result-message { padding-top: 14px; color: #333; white-space: pre; } +.jasmine_html-reporter .jasmine-result-message span.jasmine-result { display: block; } +.jasmine_html-reporter .jasmine-stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.js b/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.js new file mode 100644 index 0000000..bea469d --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.js @@ -0,0 +1,3454 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +var getJasmineRequireObj = (function (jasmineGlobal) { + var jasmineRequire; + + if (typeof module !== 'undefined' && module.exports) { + if (typeof global !== 'undefined') { + jasmineGlobal = global; + } else { + jasmineGlobal = {}; + } + jasmineRequire = exports; + } else { + if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') { + jasmineGlobal = window; + } + jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {}; + } + + function getJasmineRequire() { + return jasmineRequire; + } + + getJasmineRequire().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$, jasmineGlobal); + j$.util = jRequire.util(); + j$.errors = jRequire.errors(); + j$.Any = jRequire.Any(j$); + j$.Anything = jRequire.Anything(j$); + j$.CallTracker = jRequire.CallTracker(); + j$.MockDate = jRequire.MockDate(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.ArrayContaining = jRequire.ArrayContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(j$); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyRegistry = jRequire.SpyRegistry(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.StringMatching = jRequire.StringMatching(j$); + j$.Suite = jRequire.Suite(j$); + j$.Timer = jRequire.Timer(); + j$.TreeProcessor = jRequire.TreeProcessor(); + j$.version = jRequire.version(); + j$.Order = jRequire.Order(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; + }; + + return getJasmineRequire; +})(this); + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + 'toBe', + 'toBeCloseTo', + 'toBeDefined', + 'toBeFalsy', + 'toBeGreaterThan', + 'toBeLessThan', + 'toBeNaN', + 'toBeNull', + 'toBeTruthy', + 'toBeUndefined', + 'toContain', + 'toEqual', + 'toHaveBeenCalled', + 'toHaveBeenCalledWith', + 'toHaveBeenCalledTimes', + 'toMatch', + 'toThrow', + 'toThrowError' + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = function(j$, jasmineGlobal) { + j$.unimplementedMethod_ = function() { + throw new Error('unimplemented method'); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { + return jasmineGlobal; + }; + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_('Array', value); + }; + + j$.isString_ = function(value) { + return j$.isA_('String', value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_('Number', value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.fnNameFor = function(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.anything = function() { + return new j$.Anything(); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.stringMatching = function(expected) { + return new j$.StringMatching(expected); + }; + + j$.arrayContaining = function(sample) { + return new j$.ArrayContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + var callData = { + object: this, + args: Array.prototype.slice.apply(arguments) + }; + + callTracker.track(callData); + var returnValue = spyStrategy.exec.apply(this, arguments); + callData.returnValue = returnValue; + + return returnValue; + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) { + methodNames = baseName; + baseName = 'unknown'; + } + + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw 'createSpyObj requires a non-empty array of method names to create spies for'; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; +}; + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(//g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + util.arrayContains = function(array, search) { + var i = array.length; + while (i--) { + if (array[i] === search) { + return true; + } + } + return false; + }; + + util.clone = function(obj) { + if (Object.prototype.toString.apply(obj) === '[object Array]') { + return obj.slice(); + } + + var cloned = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + cloned[prop] = obj[prop]; + } + } + + return cloned; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.queueableFn = attrs.queueableFn; + this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; }; + this.userContext = attrs.userContext || function() { return {}; }; + this.onStart = attrs.onStart || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure; + + if (!this.queueableFn.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [], + passedExpectations: [], + pendingReason: '' + }; + } + + Spec.prototype.addExpectationResult = function(passed, data, isError) { + var expectationResult = this.expectationResultFactory(data); + if (passed) { + this.result.passedExpectations.push(expectationResult); + } else { + this.result.failedExpectations.push(expectationResult); + + if (this.throwOnExpectationFailure && !isError) { + throw new j$.errors.ExpectationFailed(); + } + } + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete, enabled) { + var self = this; + + this.onStart(this); + + if (!this.isExecutable() || this.markedPending || enabled === false) { + complete(enabled); + return; + } + + var fns = this.beforeAndAfterFns(); + var allFns = fns.befores.concat(this.queueableFn).concat(fns.afters); + + this.queueRunnerFactory({ + queueableFns: allFns, + onException: function() { self.onException.apply(self, arguments); }, + onComplete: complete, + userContext: this.userContext() + }); + + function complete(enabledAgain) { + self.result.status = self.status(enabledAgain); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.onException = function onException(e) { + if (Spec.isPendingSpecException(e)) { + this.pend(extractCustomPendingMessage(e)); + return; + } + + if (e instanceof j$.errors.ExpectationFailed) { + return; + } + + this.addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: e + }, true); + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function(message) { + this.markedPending = true; + if (message) { + this.result.pendingReason = message; + } + }; + + Spec.prototype.getResult = function() { + this.result.status = this.status(); + return this.result; + }; + + Spec.prototype.status = function(enabled) { + if (this.disabled || enabled === false) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.isExecutable = function() { + return !this.disabled; + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + var extractCustomPendingMessage = function(e) { + var fullMessage = e.toString(), + boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage), + boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length; + + return fullMessage.substr(boilerplateEnd); + }; + + Spec.pendingSpecExceptionMessage = '=> marked Pending'; + + Spec.isPendingSpecException = function(e) { + return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Spec = jasmineRequire.Spec; +} + +/*jshint bitwise: false*/ + +getJasmineRequireObj().Order = function() { + function Order(options) { + this.random = 'random' in options ? options.random : true; + var seed = this.seed = options.seed || generateSeed(); + this.sort = this.random ? randomOrder : naturalOrder; + + function naturalOrder(items) { + return items; + } + + function randomOrder(items) { + var copy = items.slice(); + copy.sort(function(a, b) { + return jenkinsHash(seed + a.id) - jenkinsHash(seed + b.id); + }); + return copy; + } + + function generateSeed() { + return String(Math.random()).slice(-5); + } + + // Bob Jenkins One-at-a-Time Hash algorithm is a non-cryptographic hash function + // used to get a different output when the key changes slighly. + // We use your return to sort the children randomly in a consistent way when + // used in conjunction with a seed + + function jenkinsHash(key) { + var hash, i; + for(hash = i = 0; i < key.length; ++i) { + hash += key.charCodeAt(i); + hash += (hash << 10); + hash ^= (hash >> 6); + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + return hash; + } + + } + + return Order; +}; + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + this.clock = new j$.Clock(global, function () { return new j$.DelayedFunctionScheduler(); }, new j$.MockDate(global)); + + var runnableLookupTable = {}; + var runnableResources = {}; + + var currentSpec = null; + var currentlyExecutingSuites = []; + var currentDeclarationSuite = null; + var throwOnExpectationFailure = false; + var random = false; + var seed = null; + + var currentSuite = function() { + return currentlyExecutingSuites[currentlyExecutingSuites.length - 1]; + }; + + var currentRunnable = function() { + return currentSpec || currentSuite(); + }; + + var reporter = new j$.ReportDispatcher([ + 'jasmineStarted', + 'jasmineDone', + 'suiteStarted', + 'suiteDone', + 'specStarted', + 'specDone' + ]); + + this.specFilter = function() { + return true; + }; + + this.addCustomEqualityTester = function(tester) { + if(!currentRunnable()) { + throw new Error('Custom Equalities must be added in a before function or a spec'); + } + runnableResources[currentRunnable().id].customEqualityTesters.push(tester); + }; + + this.addMatchers = function(matchersToAdd) { + if(!currentRunnable()) { + throw new Error('Matchers must be added in a before function or a spec'); + } + var customMatchers = runnableResources[currentRunnable().id].customMatchers; + for (var matcherName in matchersToAdd) { + customMatchers[matcherName] = matchersToAdd[matcherName]; + } + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: runnableResources[spec.id].customEqualityTesters, + customMatchers: runnableResources[spec.id].customMatchers, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var defaultResourcesForRunnable = function(id, parentRunnableId) { + var resources = {spies: [], customEqualityTesters: [], customMatchers: {}}; + + if(runnableResources[parentRunnableId]){ + resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters); + resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers); + } + + runnableResources[id] = resources; + }; + + var clearResourcesForRunnable = function(id) { + spyRegistry.clearSpies(); + delete runnableResources[id]; + }; + + var beforeAndAfterFns = function(suite) { + return function() { + var befores = [], + afters = []; + + while(suite) { + befores = befores.concat(suite.beforeFns); + afters = afters.concat(suite.afterFns); + + suite = suite.parentSuite; + } + + return { + befores: befores.reverse(), + afters: afters + }; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + var maximumSpecCallbackDepth = 20; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + this.throwOnExpectationFailure = function(value) { + throwOnExpectationFailure = !!value; + }; + + this.throwingExpectationFailures = function() { + return throwOnExpectationFailure; + }; + + this.randomizeTests = function(value) { + random = !!value; + }; + + this.randomTests = function() { + return random; + }; + + this.seed = function(value) { + if (value) { + seed = value; + } + return seed; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + options.timeout = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}; + options.fail = self.fail; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory + }); + runnableLookupTable[topSuite.id] = topSuite; + defaultResourcesForRunnable(topSuite.id); + currentDeclarationSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + if(!runnablesToRun) { + if (focusedRunnables.length) { + runnablesToRun = focusedRunnables; + } else { + runnablesToRun = [topSuite.id]; + } + } + + var order = new j$.Order({ + random: random, + seed: seed + }); + + var processor = new j$.TreeProcessor({ + tree: topSuite, + runnableIds: runnablesToRun, + queueRunnerFactory: queueRunnerFactory, + nodeStart: function(suite) { + currentlyExecutingSuites.push(suite); + defaultResourcesForRunnable(suite.id, suite.parentSuite.id); + reporter.suiteStarted(suite.result); + }, + nodeComplete: function(suite, result) { + if (!suite.disabled) { + clearResourcesForRunnable(suite.id); + } + currentlyExecutingSuites.pop(); + reporter.suiteDone(result); + }, + orderChildren: function(node) { + return order.sort(node.children); + } + }); + + if(!processor.processTree().valid) { + throw new Error('Invalid order: would cause a beforeAll or afterAll to be run multiple times'); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + processor.execute(function() { + reporter.jasmineDone({ + order: order + }); + }); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + var spyRegistry = new j$.SpyRegistry({currentSpies: function() { + if(!currentRunnable()) { + throw new Error('Spies must be created in a before function or a spec'); + } + return runnableResources[currentRunnable().id].spies; + }}); + + this.spyOn = function() { + return spyRegistry.spyOn.apply(spyRegistry, arguments); + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentDeclarationSuite, + expectationFactory: expectationFactory, + expectationResultFactory: expectationResultFactory, + throwOnExpectationFailure: throwOnExpectationFailure + }); + + runnableLookupTable[suite.id] = suite; + return suite; + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + if (specDefinitions.length > 0) { + throw new Error('describe does not expect a done parameter'); + } + if (currentDeclarationSuite.markedPending) { + suite.pend(); + } + addSpecsToSuite(suite, specDefinitions); + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = suiteFactory(description); + suite.pend(); + addSpecsToSuite(suite, specDefinitions); + return suite; + }; + + var focusedRunnables = []; + + this.fdescribe = function(description, specDefinitions) { + var suite = suiteFactory(description); + suite.isFocused = true; + + focusedRunnables.push(suite.id); + unfocusAncestor(); + addSpecsToSuite(suite, specDefinitions); + + return suite; + }; + + function addSpecsToSuite(suite, specDefinitions) { + var parentSuite = currentDeclarationSuite; + parentSuite.addChild(suite); + currentDeclarationSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + self.it('encountered a declaration exception', function() { + throw declarationError; + }); + } + + currentDeclarationSuite = parentSuite; + } + + function findFocusedAncestor(suite) { + while (suite) { + if (suite.isFocused) { + return suite.id; + } + suite = suite.parentSuite; + } + + return null; + } + + function unfocusAncestor() { + var focusedAncestor = findFocusedAncestor(currentDeclarationSuite); + if (focusedAncestor) { + for (var i = 0; i < focusedRunnables.length; i++) { + if (focusedRunnables[i] === focusedAncestor) { + focusedRunnables.splice(i, 1); + break; + } + } + } + } + + var specFactory = function(description, fn, suite, timeout) { + totalSpecsDefined++; + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeAndAfterFns: beforeAndAfterFns(suite), + expectationFactory: expectationFactory, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + userContext: function() { return suite.clonedSharedUserContext(); }, + queueableFn: { + fn: fn, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }, + throwOnExpectationFailure: throwOnExpectationFailure + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function specResultCallback(result) { + clearResourcesForRunnable(spec.id); + currentSpec = null; + reporter.specDone(result); + } + + function specStarted(spec) { + currentSpec = spec; + defaultResourcesForRunnable(spec.id, suite.id); + reporter.specStarted(spec.result); + } + }; + + this.it = function(description, fn, timeout) { + var spec = specFactory(description, fn, currentDeclarationSuite, timeout); + if (currentDeclarationSuite.markedPending) { + spec.pend(); + } + currentDeclarationSuite.addChild(spec); + return spec; + }; + + this.xit = function() { + var spec = this.it.apply(this, arguments); + spec.pend('Temporarily disabled with xit'); + return spec; + }; + + this.fit = function(description, fn, timeout){ + var spec = specFactory(description, fn, currentDeclarationSuite, timeout); + currentDeclarationSuite.addChild(spec); + focusedRunnables.push(spec.id); + unfocusAncestor(); + return spec; + }; + + this.expect = function(actual) { + if (!currentRunnable()) { + throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); + } + + return currentRunnable().expect(actual); + }; + + this.beforeEach = function(beforeEachFunction, timeout) { + currentDeclarationSuite.beforeEach({ + fn: beforeEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.beforeAll = function(beforeAllFunction, timeout) { + currentDeclarationSuite.beforeAll({ + fn: beforeAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterEach = function(afterEachFunction, timeout) { + currentDeclarationSuite.afterEach({ + fn: afterEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterAll = function(afterAllFunction, timeout) { + currentDeclarationSuite.afterAll({ + fn: afterAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.pending = function(message) { + var fullMessage = j$.Spec.pendingSpecExceptionMessage; + if(message) { + fullMessage += message; + } + throw fullMessage; + }; + + this.fail = function(error) { + var message = 'Failed'; + if (error) { + message += ': '; + message += error.message || error; + } + + currentRunnable().addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + message: message, + error: error && error.message ? error : null + }); + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = 'loaded'; + + this.started = false; + this.finished = false; + this.runDetails = {}; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function(runDetails) { + this.finished = true; + this.runDetails = runDetails; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = [], + suites_hash = {}; + + this.suiteStarted = function(result) { + suites_hash[result.id] = result; + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + this.suiteResults = function(index, length) { + return suites.slice(index, index + length); + }; + + function storeSuite(result) { + suites.push(result); + suites_hash[result.id] = result; + } + + this.suites = function() { + return suites_hash; + }; + + var specs = []; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionSchedulerFactory, mockDate) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + delayedFunctionScheduler, + timer; + + + self.install = function() { + if(!originalTimingFunctionsIntact()) { + throw new Error('Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?'); + } + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + delayedFunctionScheduler = delayedFunctionSchedulerFactory(); + installed = true; + + return self; + }; + + self.uninstall = function() { + delayedFunctionScheduler = null; + mockDate.uninstall(); + replace(global, realTimingFunctions); + + timer = realTimingFunctions; + installed = false; + }; + + self.withMock = function(closure) { + this.install(); + try { + closure(); + } finally { + this.uninstall(); + } + }; + + self.mockDate = function(initialDate) { + mockDate.install(initialDate); + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + mockDate.tick(millis); + delayedFunctionScheduler.tick(millis); + } else { + throw new Error('Mock clock is not installed, use jasmine.clock().install()'); + } + }; + + return self; + + function originalTimingFunctionsIntact() { + return global.setTimeout === realTimingFunctions.setTimeout && + global.clearTimeout === realTimingFunctions.clearTimeout && + global.setInterval === realTimingFunctions.setInterval && + global.clearInterval === realTimingFunctions.clearInterval; + } + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, n); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function forEachFunction(funcsToRun, callback) { + for (var i = 0; i < funcsToRun.length; ++i) { + callback(funcsToRun[i]); + } + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + forEachFunction(funcsToRun, function(funcToRun) { + if (funcToRun.recurring) { + reschedule(funcToRun); + } + }); + + forEachFunction(funcsToRun, function(funcToRun) { + funcToRun.funcToCall.apply(null, funcToRun.params || []); + }); + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = ''; + + if (error.name && error.message) { + message += error.name + ': ' + error.message; + } else { + message += error.toString() + ' thrown'; + } + + if (error.fileName || error.sourceURL) { + message += ' in ' + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += ' (line ' + (error.line || error.lineNumber) + ')'; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + var customMatchers = options.customMatchers || {}; + for (var matcherName in customMatchers) { + this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]); + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ''; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + if (Object.prototype.toString.apply(result.message) === '[object Function]') { + message = result.message(); + } else { + message = result.message; + } + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + var result = { + matcherName: options.matcherName, + message: message(), + stack: stack(), + passed: options.passed + }; + + if(!result.passed) { + result.expected = options.expected; + result.actual = options.actual; + } + + return result; + + function message() { + if (options.passed) { + return 'Passed.'; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ''; + } + + function stack() { + if (options.passed) { + return ''; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().MockDate = function() { + function MockDate(global) { + var self = this; + var currentTime = 0; + + if (!global || !global.Date) { + self.install = function() {}; + self.tick = function() {}; + self.uninstall = function() {}; + return self; + } + + var GlobalDate = global.Date; + + self.install = function(mockDate) { + if (mockDate instanceof GlobalDate) { + currentTime = mockDate.getTime(); + } else { + currentTime = new GlobalDate().getTime(); + } + + global.Date = FakeDate; + }; + + self.tick = function(millis) { + millis = millis || 0; + currentTime = currentTime + millis; + }; + + self.uninstall = function() { + currentTime = 0; + global.Date = GlobalDate; + }; + + createDateProperties(); + + return self; + + function FakeDate() { + switch(arguments.length) { + case 0: + return new GlobalDate(currentTime); + case 1: + return new GlobalDate(arguments[0]); + case 2: + return new GlobalDate(arguments[0], arguments[1]); + case 3: + return new GlobalDate(arguments[0], arguments[1], arguments[2]); + case 4: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]); + case 5: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4]); + case 6: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5]); + default: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5], arguments[6]); + } + } + + function createDateProperties() { + FakeDate.prototype = GlobalDate.prototype; + + FakeDate.now = function() { + if (GlobalDate.now) { + return currentTime; + } else { + throw new Error('Browser does not support Date.now()'); + } + }; + + FakeDate.toSource = GlobalDate.toSource; + FakeDate.toString = GlobalDate.toString; + FakeDate.parse = GlobalDate.parse; + FakeDate.UTC = GlobalDate.UTC; + } + } + + return MockDate; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + this.seen = []; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === 0 && 1/value === -Infinity) { + this.emitScalar('-0'); + } else if (value === j$.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar('spy on ' + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (value.toString && typeof value === 'object' && !(value instanceof Array) && value.toString !== Object.prototype.toString) { + this.emitScalar(value.toString()); + } else if (j$.util.arrayContains(this.seen, value)) { + this.emitScalar(''); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + this.seen.push(value); + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + this.seen.pop(); + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append('\'' + value + '\''); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Array'); + return; + } + var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); + this.append('[ '); + for (var i = 0; i < length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + if(array.length > length){ + this.append(', ...'); + } + + var self = this; + var first = array.length === 0; + this.iterateObject(array, function(property, isGetter) { + if (property.match(/^\d+$/)) { + return; + } + + if (first) { + first = false; + } else { + self.append(', '); + } + + self.formatProperty(array, property, isGetter); + }); + + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null'; + this.append(constructorName); + + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + return; + } + + var self = this; + this.append('({ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.formatProperty(obj, property, isGetter); + }); + + this.append(' })'); + }; + + StringPrettyPrinter.prototype.formatProperty = function(obj, property, isGetter) { + this.append(property); + this.append(': '); + if (isGetter) { + this.append(''); + } else { + this.format(obj[property]); + } + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function(j$) { + + function once(fn) { + var called = false; + return function() { + if (!called) { + called = true; + fn(); + } + }; + } + + function QueueRunner(attrs) { + this.queueableFns = attrs.queueableFns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.userContext = attrs.userContext || {}; + this.timeout = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + this.fail = attrs.fail || function() {}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.queueableFns, 0); + }; + + QueueRunner.prototype.run = function(queueableFns, recursiveIndex) { + var length = queueableFns.length, + self = this, + iterativeIndex; + + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var queueableFn = queueableFns[iterativeIndex]; + if (queueableFn.fn.length > 0) { + attemptAsync(queueableFn); + return; + } else { + attemptSync(queueableFn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(queueableFn) { + try { + queueableFn.fn.call(self.userContext); + } catch (e) { + handleException(e, queueableFn); + } + } + + function attemptAsync(queueableFn) { + var clearTimeout = function () { + Function.prototype.apply.apply(self.timeout.clearTimeout, [j$.getGlobal(), [timeoutId]]); + }, + next = once(function () { + clearTimeout(timeoutId); + self.run(queueableFns, iterativeIndex + 1); + }), + timeoutId; + + next.fail = function() { + self.fail.apply(null, arguments); + next(); + }; + + if (queueableFn.timeout) { + timeoutId = Function.prototype.apply.apply(self.timeout.setTimeout, [j$.getGlobal(), [function() { + var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'); + onException(error); + next(); + }, queueableFn.timeout()]]); + } + + try { + queueableFn.fn.call(self.userContext, next); + } catch (e) { + handleException(e, queueableFn); + next(); + } + } + + function onException(e) { + self.onException(e); + } + + function handleException(e, queueableFn) { + onException(e); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyRegistry = function(j$) { + + function SpyRegistry(options) { + options = options || {}; + var currentSpies = options.currentSpies || function() { return []; }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); + } + + if (j$.util.isUndefined(methodName)) { + throw new Error('No method name supplied'); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var descriptor; + try { + descriptor = Object.getOwnPropertyDescriptor(obj, methodName); + } catch(e) { + // IE 8 doesn't support `definePropery` on non-DOM nodes + } + + if (descriptor && !(descriptor.writable || descriptor.set)) { + throw new Error(methodName + ' is not declared writable or has no setter'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + currentSpies().push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + this.clearSpies = function() { + var spies = currentSpies(); + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + }; + } + + return SpyRegistry; +}; + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || 'unknown', + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.returnValues = function() { + var values = Array.prototype.slice.call(arguments); + plan = function () { + return values.shift(); + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function(j$) { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.expectationFactory = attrs.expectationFactory; + this.expectationResultFactory = attrs.expectationResultFactory; + this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure; + + this.beforeFns = []; + this.afterFns = []; + this.beforeAllFns = []; + this.afterAllFns = []; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [] + }; + } + + Suite.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.pend = function(message) { + this.markedPending = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.beforeAll = function(fn) { + this.beforeAllFns.push(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.afterAll = function(fn) { + this.afterAllFns.push(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'finished'; + } + }; + + Suite.prototype.isExecutable = function() { + return !this.disabled; + }; + + Suite.prototype.canBeReentered = function() { + return this.beforeAllFns.length === 0 && this.afterAllFns.length === 0; + }; + + Suite.prototype.getResult = function() { + this.result.status = this.status(); + return this.result; + }; + + Suite.prototype.sharedUserContext = function() { + if (!this.sharedContext) { + this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {}; + } + + return this.sharedContext; + }; + + Suite.prototype.clonedSharedUserContext = function() { + return clone(this.sharedUserContext()); + }; + + Suite.prototype.onException = function() { + if (arguments[0] instanceof j$.errors.ExpectationFailed) { + return; + } + + if(isAfterAll(this.children)) { + var data = { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: arguments[0] + }; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.onException.apply(child, arguments); + } + } + }; + + Suite.prototype.addExpectationResult = function () { + if(isAfterAll(this.children) && isFailure(arguments)){ + var data = arguments[1]; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + if(this.throwOnExpectationFailure) { + throw new j$.errors.ExpectationFailed(); + } + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + try { + child.addExpectationResult.apply(child, arguments); + } catch(e) { + // keep going + } + } + } + }; + + function isAfterAll(children) { + return children && children[0].result.status; + } + + function isFailure(args) { + return !args[0]; + } + + function clone(obj) { + var clonedObj = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + clonedObj[prop] = obj[prop]; + } + } + + return clonedObj; + } + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + var defaultNow = (function(Date) { + return function() { return new Date().getTime(); }; + })(Date); + + function Timer(options) { + options = options || {}; + + var now = options.now || defaultNow, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().TreeProcessor = function() { + function TreeProcessor(attrs) { + var tree = attrs.tree, + runnableIds = attrs.runnableIds, + queueRunnerFactory = attrs.queueRunnerFactory, + nodeStart = attrs.nodeStart || function() {}, + nodeComplete = attrs.nodeComplete || function() {}, + orderChildren = attrs.orderChildren || function(node) { return node.children; }, + stats = { valid: true }, + processed = false, + defaultMin = Infinity, + defaultMax = 1 - Infinity; + + this.processTree = function() { + processNode(tree, false); + processed = true; + return stats; + }; + + this.execute = function(done) { + if (!processed) { + this.processTree(); + } + + if (!stats.valid) { + throw 'invalid order'; + } + + var childFns = wrapChildren(tree, 0); + + queueRunnerFactory({ + queueableFns: childFns, + userContext: tree.sharedUserContext(), + onException: function() { + tree.onException.apply(tree, arguments); + }, + onComplete: done + }); + }; + + function runnableIndex(id) { + for (var i = 0; i < runnableIds.length; i++) { + if (runnableIds[i] === id) { + return i; + } + } + } + + function processNode(node, parentEnabled) { + var executableIndex = runnableIndex(node.id); + + if (executableIndex !== undefined) { + parentEnabled = true; + } + + parentEnabled = parentEnabled && node.isExecutable(); + + if (!node.children) { + stats[node.id] = { + executable: parentEnabled && node.isExecutable(), + segments: [{ + index: 0, + owner: node, + nodes: [node], + min: startingMin(executableIndex), + max: startingMax(executableIndex) + }] + }; + } else { + var hasExecutableChild = false; + + var orderedChildren = orderChildren(node); + + for (var i = 0; i < orderedChildren.length; i++) { + var child = orderedChildren[i]; + + processNode(child, parentEnabled); + + if (!stats.valid) { + return; + } + + var childStats = stats[child.id]; + + hasExecutableChild = hasExecutableChild || childStats.executable; + } + + stats[node.id] = { + executable: hasExecutableChild + }; + + segmentChildren(node, orderedChildren, stats[node.id], executableIndex); + + if (!node.canBeReentered() && stats[node.id].segments.length > 1) { + stats = { valid: false }; + } + } + } + + function startingMin(executableIndex) { + return executableIndex === undefined ? defaultMin : executableIndex; + } + + function startingMax(executableIndex) { + return executableIndex === undefined ? defaultMax : executableIndex; + } + + function segmentChildren(node, orderedChildren, nodeStats, executableIndex) { + var currentSegment = { index: 0, owner: node, nodes: [], min: startingMin(executableIndex), max: startingMax(executableIndex) }, + result = [currentSegment], + lastMax = defaultMax, + orderedChildSegments = orderChildSegments(orderedChildren); + + function isSegmentBoundary(minIndex) { + return lastMax !== defaultMax && minIndex !== defaultMin && lastMax < minIndex - 1; + } + + for (var i = 0; i < orderedChildSegments.length; i++) { + var childSegment = orderedChildSegments[i], + maxIndex = childSegment.max, + minIndex = childSegment.min; + + if (isSegmentBoundary(minIndex)) { + currentSegment = {index: result.length, owner: node, nodes: [], min: defaultMin, max: defaultMax}; + result.push(currentSegment); + } + + currentSegment.nodes.push(childSegment); + currentSegment.min = Math.min(currentSegment.min, minIndex); + currentSegment.max = Math.max(currentSegment.max, maxIndex); + lastMax = maxIndex; + } + + nodeStats.segments = result; + } + + function orderChildSegments(children) { + var specifiedOrder = [], + unspecifiedOrder = []; + + for (var i = 0; i < children.length; i++) { + var child = children[i], + segments = stats[child.id].segments; + + for (var j = 0; j < segments.length; j++) { + var seg = segments[j]; + + if (seg.min === defaultMin) { + unspecifiedOrder.push(seg); + } else { + specifiedOrder.push(seg); + } + } + } + + specifiedOrder.sort(function(a, b) { + return a.min - b.min; + }); + + return specifiedOrder.concat(unspecifiedOrder); + } + + function executeNode(node, segmentNumber) { + if (node.children) { + return { + fn: function(done) { + nodeStart(node); + + queueRunnerFactory({ + onComplete: function() { + nodeComplete(node, node.getResult()); + done(); + }, + queueableFns: wrapChildren(node, segmentNumber), + userContext: node.sharedUserContext(), + onException: function() { + node.onException.apply(node, arguments); + } + }); + } + }; + } else { + return { + fn: function(done) { node.execute(done, stats[node.id].executable); } + }; + } + } + + function wrapChildren(node, segmentNumber) { + var result = [], + segmentChildren = stats[node.id].segments[segmentNumber].nodes; + + for (var i = 0; i < segmentChildren.length; i++) { + result.push(executeNode(segmentChildren[i].owner, segmentChildren[i].index)); + } + + if (!stats[node.id].executable) { + return result; + } + + return node.beforeAllFns.concat(result).concat(node.afterAllFns); + } + } + + return TreeProcessor; +}; + +getJasmineRequireObj().Any = function(j$) { + + function Any(expectedObject) { + if (typeof expectedObject === 'undefined') { + throw new TypeError( + 'jasmine.any() expects to be passed a constructor function. ' + + 'Please pass one or use jasmine.anything() to match any object.' + ); + } + this.expectedObject = expectedObject; + } + + Any.prototype.asymmetricMatch = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return ''; + }; + + return Any; +}; + +getJasmineRequireObj().Anything = function(j$) { + + function Anything() {} + + Anything.prototype.asymmetricMatch = function(other) { + return !j$.util.isUndefined(other) && other !== null; + }; + + Anything.prototype.jasmineToString = function() { + return ''; + }; + + return Anything; +}; + +getJasmineRequireObj().ArrayContaining = function(j$) { + function ArrayContaining(sample) { + this.sample = sample; + } + + ArrayContaining.prototype.asymmetricMatch = function(other) { + var className = Object.prototype.toString.call(this.sample); + if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); } + + for (var i = 0; i < this.sample.length; i++) { + var item = this.sample[i]; + if (!j$.matchersUtil.contains(other, item)) { + return false; + } + } + + return true; + }; + + ArrayContaining.prototype.jasmineToString = function () { + return ''; + }; + + return ArrayContaining; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + function getPrototype(obj) { + if (Object.getPrototypeOf) { + return Object.getPrototypeOf(obj); + } + + if (obj.constructor.prototype == obj) { + return null; + } + + return obj.constructor.prototype; + } + + function hasProperty(obj, property) { + if (!obj) { + return false; + } + + if (Object.prototype.hasOwnProperty.call(obj, property)) { + return true; + } + + return hasProperty(getPrototype(obj), property); + } + + ObjectContaining.prototype.asymmetricMatch = function(other) { + if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } + + for (var property in this.sample) { + if (!hasProperty(other, property) || + !j$.matchersUtil.equals(this.sample[property], other[property])) { + return false; + } + } + + return true; + }; + + ObjectContaining.prototype.jasmineToString = function() { + return ''; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().StringMatching = function(j$) { + + function StringMatching(expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + this.regexp = new RegExp(expected); + } + + StringMatching.prototype.asymmetricMatch = function(other) { + return this.regexp.test(other); + }; + + StringMatching.prototype.jasmineToString = function() { + return ''; + }; + + return StringMatching; +}; + +getJasmineRequireObj().errors = function() { + function ExpectationFailed() {} + + ExpectationFailed.prototype = new Error(); + ExpectationFailed.prototype.constructor = ExpectationFailed; + + return { + ExpectationFailed: ExpectationFailed + }; +}; +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if ((Object.prototype.toString.apply(haystack) === '[object Array]') || + (!!haystack && !haystack.indexOf)) + { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + + return !!haystack && haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = 'Expected ' + + j$.pp(actual) + + (isNot ? ' not ' : ' ') + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ','; + } + message += ' ' + j$.pp(expected[i]); + } + } + + return message + '.'; + } + }; + + function isAsymmetric(obj) { + return obj && j$.isA_('Function', obj.asymmetricMatch); + } + + function asymmetricMatch(a, b) { + var asymmetricA = isAsymmetric(a), + asymmetricB = isAsymmetric(b); + + if (asymmetricA && asymmetricB) { + return undefined; + } + + if (asymmetricA) { + return a.asymmetricMatch(b); + } + + if (asymmetricB) { + return b.asymmetricMatch(a); + } + } + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + var asymmetricResult = asymmetricMatch(a, b); + if (!j$.util.isUndefined(asymmetricResult)) { + return asymmetricResult; + } + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + + var aIsDomNode = j$.isDomNode(a); + var bIsDomNode = j$.isDomNode(b); + if (aIsDomNode && bIsDomNode) { + // At first try to use DOM3 method isEqualNode + if (a.isEqualNode) { + return a.isEqualNode(b); + } + // IE8 doesn't support isEqualNode, try to use outerHTML && innerText + var aIsElement = a instanceof Element; + var bIsElement = b instanceof Element; + if (aIsElement && bIsElement) { + return a.outerHTML == b.outerHTML; + } + if (aIsElement || bIsElement) { + return false; + } + return a.innerText == b.innerText && a.textContent == b.textContent; + } + if (aIsDomNode || bIsDomNode) { + return false; + } + + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + // Compare array lengths to determine if a deep comparison is necessary. + if (className == '[object Array]' && a.length !== b.length) { + result = false; + } + + if (result) { + // Objects with different constructors are not equivalent, but `Object`s + // or `Array`s from different frames are. + if (className !== '[object Array]') { + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor && + isFunction(bCtor) && bCtor instanceof bCtor)) { + return false; + } + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = 'Expected actual not to be NaN.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called.' : + 'Expected spy ' + actual.and.identity() + ' to have been called.'; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledTimes = function(j$) { + + function toHaveBeenCalledTimes() { + return { + compare: function(actual, expected) { + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + var args = Array.prototype.slice.call(arguments, 0), + result = { pass: false }; + + if(!expected){ + throw new Error('Expected times failed is required as an argument.'); + } + + actual = args[0]; + var calls = actual.calls.count(); + var timesMessage = expected === 1 ? 'once' : expected + ' times'; + result.pass = calls === expected; + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called ' + timesMessage + '. It was called ' + calls + ' times.' : + 'Expected spy ' + actual.and.identity() + ' to have been called ' + timesMessage + '. It was called ' + calls + ' times.'; + return result; + } + }; + } + + return toHaveBeenCalledTimes; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util, customEqualityTesters) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { + result.pass = true; + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; + } else { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function(j$) { + + function toMatch() { + return { + compare: function(actual, expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = 'Expected function to throw an exception.'; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; + } else { + result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError () { + return { + compare: function(actual) { + var threw = false, + pass = {pass: true}, + fail = {pass: false}, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + var errorMatcher = getMatcher.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + fail.message = 'Expected function to throw an Error.'; + return fail; + } + + if (!(thrown instanceof Error)) { + fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; + return fail; + } + + if (errorMatcher.hasNoSpecifics()) { + pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.'; + return pass; + } + + if (errorMatcher.matches(thrown)) { + pass.message = function() { + return 'Expected function not to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + '.'; + }; + return pass; + } else { + fail.message = function() { + return 'Expected function to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + + ', but it threw ' + errorMatcher.thrownDescription(thrown) + '.'; + }; + return fail; + } + } + }; + + function getMatcher() { + var expected = null, + errorType = null; + + if (arguments.length == 2) { + expected = arguments[1]; + if (isAnErrorType(expected)) { + errorType = expected; + expected = null; + } + } else if (arguments.length > 2) { + errorType = arguments[1]; + expected = arguments[2]; + if (!isAnErrorType(errorType)) { + throw new Error('Expected error type is not an Error.'); + } + } + + if (expected && !isStringOrRegExp(expected)) { + if (errorType) { + throw new Error('Expected error message is not a string or RegExp.'); + } else { + throw new Error('Expected is not an Error, string, or RegExp.'); + } + } + + function messageMatch(message) { + if (typeof expected == 'string') { + return expected == message; + } else { + return expected.test(message); + } + } + + return { + errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception', + thrownDescription: function(thrown) { + var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception', + thrownMessage = ''; + + if (expected) { + thrownMessage = ' with message ' + j$.pp(thrown.message); + } + + return thrownName + thrownMessage; + }, + messageDescription: function() { + if (expected === null) { + return ''; + } else if (expected instanceof RegExp) { + return ' with a message matching ' + j$.pp(expected); + } else { + return ' with message ' + j$.pp(expected); + } + }, + hasNoSpecifics: function() { + return expected === null && errorType === null; + }, + matches: function(error) { + return (errorType === null || error instanceof errorType) && + (expected === null || messageMatch(error.message)); + } + }; + } + + function isStringOrRegExp(potential) { + return potential instanceof RegExp || (typeof potential == 'string'); + } + + function isAnErrorType(type) { + if (typeof type !== 'function') { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + + return toThrowError; +}; + +getJasmineRequireObj().interface = function(jasmine, env) { + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + fdescribe: function(description, specDefinitions) { + return env.fdescribe(description, specDefinitions); + }, + + it: function() { + return env.it.apply(env, arguments); + }, + + xit: function() { + return env.xit.apply(env, arguments); + }, + + fit: function() { + return env.fit.apply(env, arguments); + }, + + beforeEach: function() { + return env.beforeEach.apply(env, arguments); + }, + + afterEach: function() { + return env.afterEach.apply(env, arguments); + }, + + beforeAll: function() { + return env.beforeAll.apply(env, arguments); + }, + + afterAll: function() { + return env.afterAll.apply(env, arguments); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending.apply(env, arguments); + }, + + fail: function() { + return env.fail.apply(env, arguments); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }), + + jasmine: jasmine + }; + + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + jasmine.clock = function() { + return env.clock; + }; + + return jasmineInterface; +}; + +getJasmineRequireObj().version = function() { + return '2.4.1'; +}; diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/json2.js b/www/node_modules/jasmine-core/lib/jasmine-core/json2.js new file mode 100644 index 0000000..deb88ec --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/json2.js @@ -0,0 +1,489 @@ +/* + json2.js + 2014-02-04 + + Public Domain. + + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + + See http://www.JSON.org/js.html + + + This code should be minified before deployment. + See http://javascript.crockford.com/jsmin.html + + USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + NOT CONTROL. + + + This file creates a global JSON object containing two methods: stringify + and parse. + + JSON.stringify(value, replacer, space) + value any JavaScript value, usually an object or array. + + replacer an optional parameter that determines how object + values are stringified for objects. It can be a + function or an array of strings. + + space an optional parameter that specifies the indentation + of nested structures. If it is omitted, the text will + be packed without extra whitespace. If it is a number, + it will specify the number of spaces to indent at each + level. If it is a string (such as '\t' or ' '), + it contains the characters used to indent at each level. + + This method produces a JSON text from a JavaScript value. + + When an object value is found, if the object contains a toJSON + method, its toJSON method will be called and the result will be + stringified. A toJSON method does not serialize: it returns the + value represented by the name/value pair that should be serialized, + or undefined if nothing should be serialized. The toJSON method + will be passed the key associated with the value, and this will be + bound to the value + + For example, this would serialize Dates as ISO strings. + + Date.prototype.toJSON = function (key) { + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + You can provide an optional replacer method. It will be passed the + key and value of each member, with this bound to the containing + object. The value that is returned from your method will be + serialized. If your method returns undefined, then the member will + be excluded from the serialization. + + If the replacer parameter is an array of strings, then it will be + used to select the members to be serialized. It filters the results + such that only members with keys listed in the replacer array are + stringified. + + Values that do not have JSON representations, such as undefined or + functions, will not be serialized. Such values in objects will be + dropped; in arrays they will be replaced with null. You can use + a replacer function to replace those with JSON values. + JSON.stringify(undefined) returns undefined. + + The optional space parameter produces a stringification of the + value that is filled with line breaks and indentation to make it + easier to read. + + If the space parameter is a non-empty string, then that string will + be used for indentation. If the space parameter is a number, then + the indentation will be that many spaces. + + Example: + + text = JSON.stringify(['e', {pluribus: 'unum'}]); + // text is '["e",{"pluribus":"unum"}]' + + + text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); + // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' + + text = JSON.stringify([new Date()], function (key, value) { + return this[key] instanceof Date ? + 'Date(' + this[key] + ')' : value; + }); + // text is '["Date(---current time---)"]' + + + JSON.parse(text, reviver) + This method parses a JSON text to produce an object or array. + It can throw a SyntaxError exception. + + The optional reviver parameter is a function that can filter and + transform the results. It receives each of the keys and values, + and its return value is used instead of the original value. + If it returns what it received, then the structure is not modified. + If it returns undefined then the member is deleted. + + Example: + + // Parse the text. Values that look like ISO date strings will + // be converted to Date objects. + + myData = JSON.parse(text, function (key, value) { + var a; + if (typeof value === 'string') { + a = +/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); + if (a) { + return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], + +a[5], +a[6])); + } + } + return value; + }); + + myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { + var d; + if (typeof value === 'string' && + value.slice(0, 5) === 'Date(' && + value.slice(-1) === ')') { + d = new Date(value.slice(5, -1)); + if (d) { + return d; + } + } + return value; + }); + + + This is a reference implementation. You are free to copy, modify, or + redistribute. +*/ + +/*jslint evil: true, regexp: true */ + +/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, + call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf +*/ + + +// Create a JSON object only if one does not already exist. We create the +// methods in a closure to avoid creating global variables. + +if (typeof JSON !== 'object') { + JSON = {}; +} + +(function () { + 'use strict'; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + if (typeof Date.prototype.toJSON !== 'function') { + + Date.prototype.toJSON = function () { + + return isFinite(this.valueOf()) + ? this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z' + : null; + }; + + String.prototype.toJSON = + Number.prototype.toJSON = + Boolean.prototype.toJSON = function () { + return this.valueOf(); + }; + } + + var cx, + escapable, + gap, + indent, + meta, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' + ? c + : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 + ? '[]' + : gap + ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' + : '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 + ? '{}' + : gap + ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' + : '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== 'function') { + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + } + + +// If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== 'function') { + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + JSON.parse = function (text, reviver) { + +// The parse method takes a text and an optional reviver function, and returns +// a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + +// The walk method is used to recursively walk the resulting structure so +// that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + +// Parsing happens in four stages. In the first stage, we replace certain +// Unicode characters with escape sequences. JavaScript handles many characters +// incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + +// In the second stage, we run the text against regular expressions that look +// for non-JSON patterns. We are especially concerned with '()' and 'new' +// because they can cause invocation, and '=' because it can cause mutation. +// But just to be safe, we want to reject all unexpected forms. + +// We split the second stage into 4 regexp operations in order to work around +// crippling inefficiencies in IE's and Safari's regexp engines. First we +// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we +// replace all simple value tokens with ']' characters. Third, we delete all +// open brackets that follow a colon or comma or that begin the text. Finally, +// we look to see that the remaining characters are only whitespace or ']' or +// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + +// In the third stage we use the eval function to compile the text into a +// JavaScript structure. The '{' operator is subject to a syntactic ambiguity +// in JavaScript: it can begin a block or an object literal. We wrap the text +// in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + +// In the optional fourth stage, we recursively walk the new structure, passing +// each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' + ? walk({'': j}, '') + : j; + } + +// If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + } +}()); diff --git a/www/node_modules/jasmine-core/lib/jasmine-core/node_boot.js b/www/node_modules/jasmine-core/lib/jasmine-core/node_boot.js new file mode 100644 index 0000000..a0fc4a2 --- /dev/null +++ b/www/node_modules/jasmine-core/lib/jasmine-core/node_boot.js @@ -0,0 +1,41 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +module.exports = function(jasmineRequire) { + var jasmine = jasmineRequire.core(jasmineRequire); + + var consoleFns = require('../console/console.js'); + consoleFns.console(consoleFns, jasmine); + + var env = jasmine.getEnv(); + + var jasmineInterface = jasmineRequire.interface(jasmine, env); + + extend(global, jasmineInterface); + + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + + return jasmine; +}; diff --git a/www/node_modules/jasmine-core/package.json b/www/node_modules/jasmine-core/package.json new file mode 100644 index 0000000..5ca02ee --- /dev/null +++ b/www/node_modules/jasmine-core/package.json @@ -0,0 +1,90 @@ +{ + "_args": [ + [ + "jasmine-core@~2.4.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine" + ] + ], + "_from": "jasmine-core@>=2.4.0 <2.5.0", + "_id": "jasmine-core@2.4.1", + "_inCache": true, + "_installable": true, + "_location": "/jasmine-core", + "_nodeVersion": "0.12.7", + "_npmUser": { + "email": "gregg@slackersoft.net", + "name": "slackersoft" + }, + "_npmVersion": "2.12.1", + "_phantomChildren": {}, + "_requested": { + "name": "jasmine-core", + "raw": "jasmine-core@~2.4.0", + "rawSpec": "~2.4.0", + "scope": null, + "spec": ">=2.4.0 <2.5.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine" + ], + "_resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.4.1.tgz", + "_shasum": "6f83ab3a0f16951722ce07d206c773d57cc838be", + "_shrinkwrap": null, + "_spec": "jasmine-core@~2.4.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine", + "bugs": { + "url": "https://github.com/jasmine/jasmine/issues" + }, + "dependencies": {}, + "description": "Official packaging of Jasmine's core files for use by Node.js projects.", + "devDependencies": { + "glob": "~5.0.13", + "grunt": "~0.4.1", + "grunt-cli": "^0.1.13", + "grunt-contrib-compass": "~0.6.0", + "grunt-contrib-compress": "~0.5.2", + "grunt-contrib-concat": "~0.3.0", + "grunt-contrib-jshint": "~0.7.0", + "jasmine": "git://github.com/jasmine/jasmine-npm.git", + "load-grunt-tasks": "^0.4.0", + "shelljs": "~0.1.4", + "temp": "~0.8.1" + }, + "directories": {}, + "dist": { + "shasum": "6f83ab3a0f16951722ce07d206c773d57cc838be", + "tarball": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.4.1.tgz" + }, + "gitHead": "a95c2cfe3f80921ec6bc061d5fcc0b2368586666", + "homepage": "http://jasmine.github.io", + "keywords": [ + "test", + "jasmine", + "tdd", + "bdd" + ], + "license": "MIT", + "main": "./lib/jasmine-core.js", + "maintainers": [ + { + "email": "dwfrank@pivotallabs.com", + "name": "dwfrank" + }, + { + "email": "gregg@slackersoft.net", + "name": "slackersoft" + } + ], + "name": "jasmine-core", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jasmine/jasmine.git" + }, + "scripts": { + "test": "grunt jshint execSpecsInNode" + }, + "version": "2.4.1" +} diff --git a/www/node_modules/jasmine-core/requirements.txt b/www/node_modules/jasmine-core/requirements.txt new file mode 100644 index 0000000..591279c --- /dev/null +++ b/www/node_modules/jasmine-core/requirements.txt @@ -0,0 +1 @@ +ordereddict==1.1 diff --git a/www/node_modules/jasmine/.travis.yml b/www/node_modules/jasmine/.travis.yml new file mode 100644 index 0000000..ba260f3 --- /dev/null +++ b/www/node_modules/jasmine/.travis.yml @@ -0,0 +1,5 @@ +--- +language: node_js +sudo: false +before_script: + - npm install git+https://github.com/jasmine/jasmine.git diff --git a/www/node_modules/jasmine/Gruntfile.js b/www/node_modules/jasmine/Gruntfile.js new file mode 100644 index 0000000..f5af99e --- /dev/null +++ b/www/node_modules/jasmine/Gruntfile.js @@ -0,0 +1,44 @@ +module.exports = function(grunt) { + var pkg = require("./package.json"); + global.jasmineVersion = pkg.version; + var versionString = 'v' + pkg.version; + + grunt.initConfig({ + pkg: pkg, + jshint: {all: ['lib/**/*.js', 'spec/**/*.js']} + }); + + var shell = require('shelljs'); + function runCommands(commands, done) { + var command = commands.shift(); + + if (command) { + shell.exec(command, function(exitCode) { + if (exitCode !== 0) { + grunt.fail.fatal("Command `" + command + "` failed", exitCode); + done(); + } else { + runCommands(commands, done); + } + }); + } else { + done(); + } + } + + // depend on jshint:all, specs? + grunt.registerTask('release', + 'Create tag ' + versionString + ' and push jasmine-' + pkg.version + ' to NPM', + function() { + var done = this.async(), + commands = ['git tag ' + versionString, 'git push origin master --tags', 'npm publish']; + + runCommands(commands, done); + }); + + grunt.loadNpmTasks('grunt-contrib-jshint'); + + grunt.loadTasks('tasks'); + + grunt.registerTask('default', ['jshint:all', 'specs']); +}; diff --git a/www/node_modules/jasmine/README.md b/www/node_modules/jasmine/README.md new file mode 100644 index 0000000..26a517a --- /dev/null +++ b/www/node_modules/jasmine/README.md @@ -0,0 +1,48 @@ +[![Build Status](https://travis-ci.org/jasmine/jasmine-npm.png?branch=master)](https://travis-ci.org/jasmine/jasmine-npm) + +# The Jasmine Module + +The [Jasmine](https://github.com/jasmine/jasmine) module is a package of helper code for developing Jasmine projects for Node.js. + +## Contents + +This module allows you to run Jasmine specs for your Node.js code. The output will be displayed in your terminal. + +## Installation + +`npm install -g jasmine` + +## Initializing + +To initialize a project for Jasmine + +`jasmine init` + +To seed your project with some examples + +`jasmine examples` + +## Usage + +To run your test suite + +`jasmine` + +## Configuration + +Customize `spec/support/jasmine.json` to enumerate the source and spec files you would like the Jasmine runner to include. +You may use dir glob strings. +More information on the format of `jasmine.json` can be found in [the documentation](http://jasmine.github.io/2.3/node.html#section-Configuration) + +Alternatively, you may specify the path to your `jasmine.json` by setting an environment variable: + +`jasmine JASMINE_CONFIG_PATH=relative/path/to/your/jasmine.json` + +## Support + +Jasmine Mailing list: [jasmine-js@googlegroups.com](mailto:jasmine-js@googlegroups.com) +Twitter: [@jasminebdd](http://twitter.com/jasminebdd) + +Please file issues here at Github + +Copyright (c) 2008-2013 Pivotal Labs. This software is licensed under the MIT License. diff --git a/www/node_modules/jasmine/bin/jasmine.js b/www/node_modules/jasmine/bin/jasmine.js new file mode 100755 index 0000000..5b514ea --- /dev/null +++ b/www/node_modules/jasmine/bin/jasmine.js @@ -0,0 +1,11 @@ +#!/usr/bin/env node + +var path = require('path'), + Command = require('../lib/command.js'), + Jasmine = require('../lib/jasmine.js'); + +var jasmine = new Jasmine({ projectBaseDir: path.resolve() }); +var examplesDir = path.join(__dirname, '..', 'node_modules', 'jasmine-core', 'lib', 'jasmine-core', 'example', 'node_example'); +var command = new Command(path.resolve(), examplesDir, console.log); + +command.run(jasmine, process.argv.slice(2)); \ No newline at end of file diff --git a/www/node_modules/jasmine/lib/command.js b/www/node_modules/jasmine/lib/command.js new file mode 100644 index 0000000..700a2f9 --- /dev/null +++ b/www/node_modules/jasmine/lib/command.js @@ -0,0 +1,220 @@ +var path = require('path'), + fs = require('fs'); + +exports = module.exports = Command; + +var subCommands = { + init: { + description: 'initialize jasmine', + action: initJasmine + }, + examples: { + description: 'install examples', + action: installExamples + }, + help: { + description: 'show help', + action: help, + alias: '-h' + }, + version: { + description: 'show jasmine and jasmine-core versions', + action: version, + alias: '-v' + } +}; + +function Command(projectBaseDir, examplesDir, print) { + this.projectBaseDir = projectBaseDir; + this.specDir = path.join(projectBaseDir, 'spec'); + + var command = this; + + this.run = function(jasmine, commands) { + setEnvironmentVariables(commands); + + var commandToRun; + Object.keys(subCommands).forEach(function(cmd) { + var commandObject = subCommands[cmd]; + if (commands.indexOf(cmd) >= 0) { + commandToRun = commandObject; + } else if(commandObject.alias && commands.indexOf(commandObject.alias) >= 0) { + commandToRun = commandObject; + } + }); + + if (commandToRun) { + commandToRun.action({projectBaseDir: command.projectBaseDir, specDir: command.specDir, examplesDir: examplesDir, print: print}); + } else { + runJasmine(jasmine, parseOptions(commands)); + } + }; +} + +function isFileArg(arg) { + return arg.indexOf('--') !== 0 && !isEnvironmentVariable(arg); +} + +function parseOptions(argv) { + var files = [], + color = process.stdout.isTTY || false, + filter, + stopOnFailure, + random = false, + seed; + + argv.forEach(function(arg) { + if (arg === '--no-color') { + color = false; + } else if (arg.match("^--filter=")) { + filter = arg.match("^--filter=(.*)")[1]; + } else if (arg.match("^--stop-on-failure=")) { + stopOnFailure = arg.match("^--stop-on-failure=(.*)")[1] === 'true'; + } else if (arg.match("^--random=")) { + random = arg.match("^--random=(.*)")[1] === 'true'; + } else if (arg.match("^--seed=")) { + seed = arg.match("^--seed=(.*)")[1]; + } else if (isFileArg(arg)) { + files.push(arg); + } + }); + return { + color: color, + filter: filter, + stopOnFailure: stopOnFailure, + files: files, + random: random, + seed: seed + }; +} + +function runJasmine(jasmine, env) { + jasmine.loadConfigFile(process.env.JASMINE_CONFIG_PATH); + if (env.stopOnFailure !== undefined) { + jasmine.stopSpecOnExpectationFailure(env.stopOnFailure); + } + if (env.seed !== undefined) { + jasmine.seed(env.seed); + } + + jasmine.randomizeTests(env.random); + jasmine.showColors(env.color); + jasmine.execute(env.files, env.filter); +} + +function initJasmine(options) { + var print = options.print; + var specDir = options.specDir; + makeDirStructure(path.join(specDir, 'support/')); + if(!fs.existsSync(path.join(specDir, 'support/jasmine.json'))) { + fs.writeFileSync(path.join(specDir, 'support/jasmine.json'), fs.readFileSync(path.join(__dirname, '../lib/examples/jasmine.json'), 'utf-8')); + } + else { + print('spec/support/jasmine.json already exists in your project.'); + } +} + +function installExamples(options) { + var specDir = options.specDir; + var projectBaseDir = options.projectBaseDir; + var examplesDir = options.examplesDir; + + makeDirStructure(path.join(specDir, 'support')); + makeDirStructure(path.join(specDir, 'jasmine_examples')); + makeDirStructure(path.join(specDir, 'helpers', 'jasmine_examples')); + makeDirStructure(path.join(projectBaseDir, 'lib', 'jasmine_examples')); + + copyFiles( + path.join(examplesDir, 'spec', 'helpers', 'jasmine_examples'), + path.join(specDir, 'helpers', 'jasmine_examples'), + new RegExp(/[Hh]elper\.js/) + ); + + copyFiles( + path.join(examplesDir, 'lib', 'jasmine_examples'), + path.join(projectBaseDir, 'lib', 'jasmine_examples'), + new RegExp(/\.js/) + ); + + copyFiles( + path.join(examplesDir, 'spec', 'jasmine_examples'), + path.join(specDir, 'jasmine_examples'), + new RegExp(/[Ss]pec.js/) + ); +} + +function help(options) { + var print = options.print; + print('Usage: jasmine [command] [options] [files]'); + print(''); + print('Commands:'); + Object.keys(subCommands).forEach(function(cmd) { + var commandNameText = cmd; + if(subCommands[cmd].alias) { + commandNameText = commandNameText + ',' + subCommands[cmd].alias; + } + print('%s\t%s', lPad(commandNameText, 10), subCommands[cmd].description); + }); + print(''); + print('If no command is given, jasmine specs will be run'); + print(''); + print(''); + + print('Options:'); + print('%s\tturn off color in spec output', lPad('--no-color', 18)); + print('%s\tfilter specs to run only those that match the given string', lPad('--filter=', 18)); + print('%s\t[true|false] stop spec execution on expectation failure. This takes precedence over the stopSpecOnExpectationFailure option in jasmine.json', lPad('--stop-on-failure=', 18)); + print(''); + print('The path to your jasmine.json can be configured by setting the JASMINE_CONFIG_PATH environment variable'); +} + +function version(options) { + var print = options.print; + print('jasmine v' + require('../package.json').version); + print('jasmine-core v' + require('../node_modules/jasmine-core/package.json').version); +} + +function lPad(str, length) { + if (str.length >= length) { + return str; + } else { + return lPad(' ' + str, length); + } +} + +function copyFiles(srcDir, destDir, pattern) { + var srcDirFiles = fs.readdirSync(srcDir); + srcDirFiles.forEach(function(file) { + if (file.search(pattern) !== -1) { + fs.writeFileSync(path.join(destDir, file), fs.readFileSync(path.join(srcDir, file))); + } + }); +} + +function makeDirStructure(absolutePath) { + var splitPath = absolutePath.split(path.sep); + splitPath.forEach(function(dir, index) { + if(index > 1) { + var fullPath = path.join(splitPath.slice(0, index).join('/'), dir); + if (!fs.existsSync(fullPath)) { + fs.mkdirSync(fullPath); + } + } + }); +} + +function isEnvironmentVariable(command) { + var envRegExp = /(.*)=(.*)/; + return command.match(envRegExp); +} + +function setEnvironmentVariables(commands) { + commands.forEach(function (command) { + var regExpMatch = isEnvironmentVariable(command); + if(regExpMatch) { + var key = regExpMatch[1]; + var value = regExpMatch[2]; + process.env[key] = value; + } + }); +} diff --git a/www/node_modules/jasmine/lib/examples/jasmine.json b/www/node_modules/jasmine/lib/examples/jasmine.json new file mode 100644 index 0000000..3ea3166 --- /dev/null +++ b/www/node_modules/jasmine/lib/examples/jasmine.json @@ -0,0 +1,11 @@ +{ + "spec_dir": "spec", + "spec_files": [ + "**/*[sS]pec.js" + ], + "helpers": [ + "helpers/**/*.js" + ], + "stopSpecOnExpectationFailure": false, + "random": false +} diff --git a/www/node_modules/jasmine/lib/exit.js b/www/node_modules/jasmine/lib/exit.js new file mode 100644 index 0000000..d2a6de6 --- /dev/null +++ b/www/node_modules/jasmine/lib/exit.js @@ -0,0 +1,17 @@ +module.exports = function(exitCode, platform, nodeVersion, exit, nodeExit) { + if(isWindows(platform) && olderThan12(nodeVersion)) { + nodeExit(exitCode); + } + else { + exit(exitCode); + } +}; + +function isWindows(platform) { + return /^win/.test(platform); +} + +function olderThan12(nodeVersion) { + var version = nodeVersion.split('.'); + return parseInt(version[0].substr(1), 10) <= 0 && parseInt(version[1], 10) < 12; +} \ No newline at end of file diff --git a/www/node_modules/jasmine/lib/filters/console_spec_filter.js b/www/node_modules/jasmine/lib/filters/console_spec_filter.js new file mode 100644 index 0000000..e3cf6bd --- /dev/null +++ b/www/node_modules/jasmine/lib/filters/console_spec_filter.js @@ -0,0 +1,10 @@ +module.exports = exports = ConsoleSpecFilter; + +function ConsoleSpecFilter(options) { + var filterString = options && options.filterString && options.filterString.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; +} \ No newline at end of file diff --git a/www/node_modules/jasmine/lib/jasmine.js b/www/node_modules/jasmine/lib/jasmine.js new file mode 100644 index 0000000..67ffeb3 --- /dev/null +++ b/www/node_modules/jasmine/lib/jasmine.js @@ -0,0 +1,170 @@ +var path = require('path'), + util = require('util'), + glob = require('glob'), + exit = require('./exit'), + ExitCodeReporter = require('./reporters/exit_code_reporter'), + ConsoleSpecFilter = require('./filters/console_spec_filter'); + +module.exports = Jasmine; +module.exports.ConsoleReporter = require('./reporters/console_reporter'); + +function Jasmine(options) { + options = options || {}; + var jasmineCore = options.jasmineCore || require('jasmine-core'); + this.jasmineCorePath = path.join(jasmineCore.files.path, 'jasmine.js'); + this.jasmine = jasmineCore.boot(jasmineCore); + this.projectBaseDir = options.projectBaseDir || path.resolve(); + this.printDeprecation = options.printDeprecation || require('./printDeprecation'); + this.specFiles = []; + this.helperFiles = []; + this.env = this.jasmine.getEnv(); + this.reportersCount = 0; + this.exitCodeReporter = new ExitCodeReporter(); + this.onCompleteCallbackAdded = false; + this.exit = exit; + this.showingColors = true; +} + +Jasmine.prototype.randomizeTests = function(value) { + this.env.randomizeTests(value); +}; + +Jasmine.prototype.seed = function(value) { + this.env.seed(value); +}; + +Jasmine.prototype.showColors = function(value) { + this.showingColors = value; +}; + +Jasmine.prototype.addSpecFile = function(filePath) { + this.specFiles.push(filePath); +}; + +Jasmine.prototype.addReporter = function(reporter) { + this.env.addReporter(reporter); + this.reportersCount++; +}; + +Jasmine.prototype.configureDefaultReporter = function(options) { + options.timer = options.timer || new this.jasmine.Timer(); + options.print = options.print || function() { + process.stdout.write(util.format.apply(this, arguments)); + }; + options.showColors = options.hasOwnProperty('showColors') ? options.showColors : true; + options.jasmineCorePath = options.jasmineCorePath || this.jasmineCorePath; + + if(options.onComplete) { + this.printDeprecation('Passing in an onComplete function to configureDefaultReporter is deprecated.'); + } + var consoleReporter = new module.exports.ConsoleReporter(options); + this.addReporter(consoleReporter); + this.defaultReporterAdded = true; +}; + +Jasmine.prototype.addMatchers = function(matchers) { + this.jasmine.Expectation.addMatchers(matchers); +}; + +Jasmine.prototype.loadSpecs = function() { + this.specFiles.forEach(function(file) { + require(file); + }); +}; + +Jasmine.prototype.loadHelpers = function() { + this.helperFiles.forEach(function(file) { + require(file); + }); +}; + +Jasmine.prototype.loadConfigFile = function(configFilePath) { + var absoluteConfigFilePath = path.resolve(this.projectBaseDir, configFilePath || 'spec/support/jasmine.json'); + var config = require(absoluteConfigFilePath); + this.loadConfig(config); +}; + +Jasmine.prototype.loadConfig = function(config) { + var jasmineRunner = this; + jasmineRunner.specDir = config.spec_dir; + + if(config.helpers) { + config.helpers.forEach(function(helperFile) { + var filePaths = glob.sync(path.join(jasmineRunner.projectBaseDir, jasmineRunner.specDir, helperFile)); + filePaths.forEach(function(filePath) { + if(jasmineRunner.helperFiles.indexOf(filePath) === -1) { + jasmineRunner.helperFiles.push(filePath); + } + }); + }); + } + + this.env.throwOnExpectationFailure(config.stopSpecOnExpectationFailure); + this.env.randomizeTests(config.random); + + if(config.spec_files) { + jasmineRunner.addSpecFiles(config.spec_files); + } +}; + +Jasmine.prototype.addSpecFiles = function(files) { + var jasmineRunner = this; + + files.forEach(function(specFile) { + var filePaths = glob.sync(path.join(jasmineRunner.projectBaseDir, jasmineRunner.specDir, specFile)); + filePaths.forEach(function(filePath) { + if(jasmineRunner.specFiles.indexOf(filePath) === -1) { + jasmineRunner.specFiles.push(filePath); + } + }); + }); +}; + +Jasmine.prototype.onComplete = function(onCompleteCallback) { + this.exitCodeReporter.onComplete(onCompleteCallback); + this.onCompleteCallbackAdded = true; +}; + +Jasmine.prototype.stopSpecOnExpectationFailure = function(value) { + this.env.throwOnExpectationFailure(value); +}; + +Jasmine.prototype.execute = function(files, filterString) { + this.loadHelpers(); + + if(this.reportersCount === 0) { + this.configureDefaultReporter({ showColors: this.showingColors }); + } + + if(filterString) { + var specFilter = new ConsoleSpecFilter({ + filterString: filterString + }); + this.env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + } + + if (files && files.length > 0) { + this.specDir = ''; + this.specFiles = []; + this.addSpecFiles(files); + } + + this.loadSpecs(); + + if(!this.onCompleteCallbackAdded && this.defaultReporterAdded) { + var jasmineRunner = this; + this.exitCodeReporter.onComplete(function(passed) { + if(passed) { + jasmineRunner.exit(0, process.platform, process.version, process.exit, require('exit')); + } + else { + jasmineRunner.exit(1, process.platform, process.version, process.exit, require('exit')); + } + }); + } + + this.addReporter(this.exitCodeReporter); + this.env.execute(); +}; diff --git a/www/node_modules/jasmine/lib/printDeprecation.js b/www/node_modules/jasmine/lib/printDeprecation.js new file mode 100644 index 0000000..0755b2e --- /dev/null +++ b/www/node_modules/jasmine/lib/printDeprecation.js @@ -0,0 +1,3 @@ +module.exports = function(message) { + console.warn('Deprecation warning: ' + message); +}; \ No newline at end of file diff --git a/www/node_modules/jasmine/lib/reporters/console_reporter.js b/www/node_modules/jasmine/lib/reporters/console_reporter.js new file mode 100644 index 0000000..f1ac0c6 --- /dev/null +++ b/www/node_modules/jasmine/lib/reporters/console_reporter.js @@ -0,0 +1,208 @@ +module.exports = exports = ConsoleReporter; + +var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } +}; + +function ConsoleReporter(options) { + var print = options.print, + showColors = options.showColors || false, + timer = options.timer || noopTimer, + jasmineCorePath = options.jasmineCorePath, + printDeprecation = options.printDeprecation || require('../printDeprecation'), + specCount, + executableSpecCount, + failureCount, + failedSpecs = [], + pendingSpecs = [], + ansi = { + green: '\x1B[32m', + red: '\x1B[31m', + yellow: '\x1B[33m', + none: '\x1B[0m' + }, + failedSuites = [], + stackFilter = options.stackFilter || defaultStackFilter; + + if(options.onComplete) { + printDeprecation('Passing in an onComplete function to the ConsoleReporter is deprecated.'); + } + var onComplete = options.onComplete || function() {}; + + this.jasmineStarted = function() { + specCount = 0; + executableSpecCount = 0; + failureCount = 0; + print('Started'); + printNewline(); + timer.start(); + }; + + this.jasmineDone = function(result) { + printNewline(); + printNewline(); + if(failedSpecs.length > 0) { + print('Failures:'); + } + for (var i = 0; i < failedSpecs.length; i++) { + specFailureDetails(failedSpecs[i], i + 1); + } + + if (pendingSpecs.length > 0) { + print("Pending:"); + } + for(i = 0; i < pendingSpecs.length; i++) { + pendingSpecDetails(pendingSpecs[i], i + 1); + } + + if(specCount > 0) { + printNewline(); + + if(executableSpecCount !== specCount) { + print('Ran ' + executableSpecCount + ' of ' + specCount + plural(' spec', specCount)); + printNewline(); + } + var specCounts = executableSpecCount + ' ' + plural('spec', executableSpecCount) + ', ' + + failureCount + ' ' + plural('failure', failureCount); + + if (pendingSpecs.length) { + specCounts += ', ' + pendingSpecs.length + ' pending ' + plural('spec', pendingSpecs.length); + } + + print(specCounts); + } else { + print('No specs found'); + } + + printNewline(); + var seconds = timer.elapsed() / 1000; + print('Finished in ' + seconds + ' ' + plural('second', seconds)); + printNewline(); + + for(i = 0; i < failedSuites.length; i++) { + suiteFailureDetails(failedSuites[i]); + } + + if (result && result.order && result.order.random) { + print('Randomized with seed ' + result.order.seed); + printNewline(); + } + + onComplete(failureCount === 0); + }; + + this.specDone = function(result) { + specCount++; + + if (result.status == 'pending') { + pendingSpecs.push(result); + executableSpecCount++; + print(colored('yellow', '*')); + return; + } + + if (result.status == 'passed') { + executableSpecCount++; + print(colored('green', '.')); + return; + } + + if (result.status == 'failed') { + failureCount++; + failedSpecs.push(result); + executableSpecCount++; + print(colored('red', 'F')); + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + failureCount++; + failedSuites.push(result); + } + }; + + return this; + + function printNewline() { + print('\n'); + } + + function colored(color, str) { + return showColors ? (ansi[color] + str + ansi.none) : str; + } + + function plural(str, count) { + return count == 1 ? str : str + 's'; + } + + function repeat(thing, times) { + var arr = []; + for (var i = 0; i < times; i++) { + arr.push(thing); + } + return arr; + } + + function indent(str, spaces) { + var lines = (str || '').split('\n'); + var newArr = []; + for (var i = 0; i < lines.length; i++) { + newArr.push(repeat(' ', spaces).join('') + lines[i]); + } + return newArr.join('\n'); + } + + function defaultStackFilter(stack) { + var filteredStack = stack.split('\n').filter(function(stackLine) { + return stackLine.indexOf(jasmineCorePath) === -1; + }).join('\n'); + return filteredStack; + } + + function specFailureDetails(result, failedSpecNumber) { + printNewline(); + print(failedSpecNumber + ') '); + print(result.fullName); + + for (var i = 0; i < result.failedExpectations.length; i++) { + var failedExpectation = result.failedExpectations[i]; + printNewline(); + print(indent('Message:', 2)); + printNewline(); + print(colored('red', indent(failedExpectation.message, 4))); + printNewline(); + print(indent('Stack:', 2)); + printNewline(); + print(indent(stackFilter(failedExpectation.stack), 4)); + } + + printNewline(); + } + + function suiteFailureDetails(result) { + for (var i = 0; i < result.failedExpectations.length; i++) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', 'AfterAll ' + result.failedExpectations[i].message)); + + } + printNewline(); + } + + function pendingSpecDetails(result, pendingSpecNumber) { + printNewline(); + printNewline(); + print(pendingSpecNumber + ') '); + print(result.fullName); + printNewline(); + var pendingReason = "No reason given"; + if (result.pendingReason && result.pendingReason !== '') { + pendingReason = result.pendingReason; + } + print(indent(colored('yellow', pendingReason), 2)); + printNewline(); + } +} diff --git a/www/node_modules/jasmine/lib/reporters/exit_code_reporter.js b/www/node_modules/jasmine/lib/reporters/exit_code_reporter.js new file mode 100644 index 0000000..354a83e --- /dev/null +++ b/www/node_modules/jasmine/lib/reporters/exit_code_reporter.js @@ -0,0 +1,24 @@ +module.exports = function() { + var results = true; + var onCompleteCallback = function() {}; + + this.onComplete = function(callback) { + onCompleteCallback = callback; + }; + + this.jasmineDone = function() { + onCompleteCallback(results); + }; + + this.specDone = function(result) { + if(result.status === 'failed') { + results = false; + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + results = false; + } + }; +}; \ No newline at end of file diff --git a/www/node_modules/jasmine/node_modules/glob/.npmignore b/www/node_modules/jasmine/node_modules/glob/.npmignore new file mode 100644 index 0000000..2af4b71 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/.npmignore @@ -0,0 +1,2 @@ +.*.swp +test/a/ diff --git a/www/node_modules/jasmine/node_modules/glob/.travis.yml b/www/node_modules/jasmine/node_modules/glob/.travis.yml new file mode 100644 index 0000000..baa0031 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - 0.8 diff --git a/www/node_modules/jasmine/node_modules/glob/LICENSE b/www/node_modules/jasmine/node_modules/glob/LICENSE new file mode 100644 index 0000000..0c44ae7 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Isaac Z. Schlueter ("Author") +All rights reserved. + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/www/node_modules/jasmine/node_modules/glob/README.md b/www/node_modules/jasmine/node_modules/glob/README.md new file mode 100644 index 0000000..cc69164 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/README.md @@ -0,0 +1,250 @@ +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +## Attention: node-glob users! + +The API has changed dramatically between 2.x and 3.x. This library is +now 100% JavaScript, and the integer flags have been replaced with an +options object. + +Also, there's an event emitter class, proper tests, and all the other +things you've come to expect from node modules. + +And best of all, no compilation! + +## Usage + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Features + +Please see the [minimatch +documentation](https://github.com/isaacs/minimatch) for more details. + +Supports these glob features: + +* Brace Expansion +* Extended glob matching +* "Globstar" `**` matching + +See: + +* `man sh` +* `man bash` +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob(pattern, [options], cb) + +* `pattern` {String} Pattern to be matched +* `options` {Object} +* `cb` {Function} + * `err` {Error | null} + * `matches` {Array} filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` {String} Pattern to be matched +* `options` {Object} +* return: {Array} filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instanting the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` {String} pattern to search for +* `options` {Object} +* `cb` {Function} Called when an error occurs, or matches are found + * `err` {Error | null} + * `matches` {Array} filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `error` The error encountered. When an error is encountered, the + glob object is in an undefined state, and should be discarded. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `statCache` Collection of all the stat results the glob search + performed. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `1` - Path exists, and is not a directory + * `2` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the matched. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `abort` Stop the search. + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the glob object, as well. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. It will cause + ELOOP to be triggered one level sooner in the case of cyclical + symbolic links. +* `silent` When an unusual error is encountered + when attempting to read a directory, a warning will be printed to + stderr. Set the `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered + when attempting to read a directory, the process will just continue on + in search of other matches. Set the `strict` option to raise an error + in these cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary to + set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `sync` Perform a synchronous glob search. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. + Set this flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `nocase` Perform a case-insensitive match. Note that case-insensitive + filesystems will sometimes result in glob returning results that are + case-insensitively matched anyway, since readdir and stat will not + raise an error. +* `debug` Set to enable debug logging in minimatch and glob. +* `globDebug` Set to enable debug logging in glob, but not minimatch. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. diff --git a/www/node_modules/jasmine/node_modules/glob/examples/g.js b/www/node_modules/jasmine/node_modules/glob/examples/g.js new file mode 100644 index 0000000..be122df --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/examples/g.js @@ -0,0 +1,9 @@ +var Glob = require("../").Glob + +var pattern = "test/a/**/[cg]/../[cg]" +console.log(pattern) + +var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) { + console.log("matches", matches) +}) +console.log("after") diff --git a/www/node_modules/jasmine/node_modules/glob/examples/usr-local.js b/www/node_modules/jasmine/node_modules/glob/examples/usr-local.js new file mode 100644 index 0000000..327a425 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/examples/usr-local.js @@ -0,0 +1,9 @@ +var Glob = require("../").Glob + +var pattern = "{./*/*,/*,/usr/local/*}" +console.log(pattern) + +var mg = new Glob(pattern, {mark: true}, function (er, matches) { + console.log("matches", matches) +}) +console.log("after") diff --git a/www/node_modules/jasmine/node_modules/glob/glob.js b/www/node_modules/jasmine/node_modules/glob/glob.js new file mode 100644 index 0000000..f646c44 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/glob.js @@ -0,0 +1,728 @@ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// readdir(PREFIX) as ENTRIES +// If fails, END +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $]) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $]) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + + + +module.exports = glob + +var fs = require("fs") +, minimatch = require("minimatch") +, Minimatch = minimatch.Minimatch +, inherits = require("inherits") +, EE = require("events").EventEmitter +, path = require("path") +, isDir = {} +, assert = require("assert").ok + +function glob (pattern, options, cb) { + if (typeof options === "function") cb = options, options = {} + if (!options) options = {} + + if (typeof options === "number") { + deprecated() + return + } + + var g = new Glob(pattern, options, cb) + return g.sync ? g.found : g +} + +glob.fnmatch = deprecated + +function deprecated () { + throw new Error("glob's interface has changed. Please see the docs.") +} + +glob.sync = globSync +function globSync (pattern, options) { + if (typeof options === "number") { + deprecated() + return + } + + options = options || {} + options.sync = true + return glob(pattern, options) +} + +this._processingEmitQueue = false + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (!(this instanceof Glob)) { + return new Glob(pattern, options, cb) + } + + if (typeof options === "function") { + cb = options + options = null + } + + if (typeof cb === "function") { + this.on("error", cb) + this.on("end", function (matches) { + cb(null, matches) + }) + } + + options = options || {} + + this._endEmitted = false + this.EOF = {} + this._emitQueue = [] + + this.paused = false + this._processingEmitQueue = false + + this.maxDepth = options.maxDepth || 1000 + this.maxLength = options.maxLength || Infinity + this.cache = options.cache || {} + this.statCache = options.statCache || {} + + this.changedCwd = false + var cwd = process.cwd() + if (!options.hasOwnProperty("cwd")) this.cwd = cwd + else { + this.cwd = options.cwd + this.changedCwd = path.resolve(options.cwd) !== cwd + } + + this.root = options.root || path.resolve(this.cwd, "/") + this.root = path.resolve(this.root) + if (process.platform === "win32") + this.root = this.root.replace(/\\/g, "/") + + this.nomount = !!options.nomount + + if (!pattern) { + throw new Error("must provide pattern") + } + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + this.strict = options.strict !== false + this.dot = !!options.dot + this.mark = !!options.mark + this.sync = !!options.sync + this.nounique = !!options.nounique + this.nonull = !!options.nonull + this.nosort = !!options.nosort + this.nocase = !!options.nocase + this.stat = !!options.stat + + this.debug = !!options.debug || !!options.globDebug + if (this.debug) + this.log = console.error + + this.silent = !!options.silent + + var mm = this.minimatch = new Minimatch(pattern, options) + this.options = mm.options + pattern = this.pattern = mm.pattern + + this.error = null + this.aborted = false + + // list of all the patterns that ** has resolved do, so + // we can avoid visiting multiple times. + this._globstars = {} + + EE.call(this) + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + this.minimatch.set.forEach(iterator.bind(this)) + function iterator (pattern, i, set) { + this._process(pattern, 0, i, function (er) { + if (er) this.emit("error", er) + if (-- n <= 0) this._finish() + }) + } +} + +Glob.prototype.log = function () {} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + + var nou = this.nounique + , all = nou ? [] : {} + + for (var i = 0, l = this.matches.length; i < l; i ++) { + var matches = this.matches[i] + this.log("matches[%d] =", i, matches) + // do like the shell, and spit out the literal glob + if (!matches) { + if (this.nonull) { + var literal = this.minimatch.globSet[i] + if (nou) all.push(literal) + else all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) all.push.apply(all, m) + else m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) all = Object.keys(all) + + if (!this.nosort) { + all = all.sort(this.nocase ? alphasorti : alphasort) + } + + if (this.mark) { + // at *some* point we statted all of these + all = all.map(this._mark, this) + } + + this.log("emitting end", all) + + this.EOF = this.found = all + this.emitMatch(this.EOF) +} + +function alphasorti (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return alphasort(a, b) +} + +function alphasort (a, b) { + return a > b ? 1 : a < b ? -1 : 0 +} + +Glob.prototype._mark = function (p) { + var c = this.cache[p] + var m = p + if (c) { + var isDir = c === 2 || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + this.statCache[m] = this.statCache[p] + this.cache[m] = this.cache[p] + } + } + + return m +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit("abort") +} + +Glob.prototype.pause = function () { + if (this.paused) return + if (this.sync) + this.emit("error", new Error("Can't pause/resume sync glob")) + this.paused = true + this.emit("pause") +} + +Glob.prototype.resume = function () { + if (!this.paused) return + if (this.sync) + this.emit("error", new Error("Can't pause/resume sync glob")) + this.paused = false + this.emit("resume") + this._processEmitQueue() + //process.nextTick(this.emit.bind(this, "resume")) +} + +Glob.prototype.emitMatch = function (m) { + this.log('emitMatch', m) + this._emitQueue.push(m) + this._processEmitQueue() +} + +Glob.prototype._processEmitQueue = function (m) { + this.log("pEQ paused=%j processing=%j m=%j", this.paused, + this._processingEmitQueue, m) + var done = false + while (!this._processingEmitQueue && + !this.paused) { + this._processingEmitQueue = true + var m = this._emitQueue.shift() + this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m) + if (!m) { + this.log(">processEmitQueue, falsey m") + this._processingEmitQueue = false + break + } + + if (m === this.EOF || !(this.mark && !this.stat)) { + this.log("peq: unmarked, or eof") + next.call(this, 0, false) + } else if (this.statCache[m]) { + var sc = this.statCache[m] + var exists + if (sc) + exists = sc.isDirectory() ? 2 : 1 + this.log("peq: stat cached") + next.call(this, exists, exists === 2) + } else { + this.log("peq: _stat, then next") + this._stat(m, next) + } + + function next(exists, isDir) { + this.log("next", m, exists, isDir) + var ev = m === this.EOF ? "end" : "match" + + // "end" can only happen once. + assert(!this._endEmitted) + if (ev === "end") + this._endEmitted = true + + if (exists) { + // Doesn't mean it necessarily doesn't exist, it's possible + // we just didn't check because we don't care that much, or + // this is EOF anyway. + if (isDir && !m.match(/\/$/)) { + m = m + "/" + } else if (!isDir && m.match(/\/$/)) { + m = m.replace(/\/+$/, "") + } + } + this.log("emit", ev, m) + this.emit(ev, m) + this._processingEmitQueue = false + if (done && m !== this.EOF && !this.paused) + this._processEmitQueue() + } + } + done = true +} + +Glob.prototype._process = function (pattern, depth, index, cb_) { + assert(this instanceof Glob) + + var cb = function cb (er, res) { + assert(this instanceof Glob) + if (this.paused) { + if (!this._processQueue) { + this._processQueue = [] + this.once("resume", function () { + var q = this._processQueue + this._processQueue = null + q.forEach(function (cb) { cb() }) + }) + } + this._processQueue.push(cb_.bind(this, er, res)) + } else { + cb_.call(this, er, res) + } + }.bind(this) + + if (this.aborted) return cb() + + if (depth > this.maxDepth) return cb() + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === "string") { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + prefix = pattern.join("/") + this._stat(prefix, function (exists, isDir) { + // either it's there, or it isn't. + // nothing more to do, either way. + if (exists) { + if (prefix && isAbsolute(prefix) && !this.nomount) { + if (prefix.charAt(0) === "/") { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + } + } + + if (process.platform === "win32") + prefix = prefix.replace(/\\/g, "/") + + this.matches[index] = this.matches[index] || {} + this.matches[index][prefix] = true + this.emitMatch(prefix) + } + return cb() + }) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's "absolute" like /foo/bar, + // or "relative" like "../baz" + prefix = pattern.slice(0, n) + prefix = prefix.join("/") + break + } + + // get the list of entries. + var read + if (prefix === null) read = "." + else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) { + if (!prefix || !isAbsolute(prefix)) { + prefix = path.join("/", prefix) + } + read = prefix = path.resolve(prefix) + + // if (process.platform === "win32") + // read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/") + + this.log('absolute: ', prefix, this.root, pattern, read) + } else { + read = prefix + } + + this.log('readdir(%j)', read, this.cwd, this.root) + + return this._readdir(read, function (er, entries) { + if (er) { + // not a directory! + // this means that, whatever else comes after this, it can never match + return cb() + } + + // globstar is special + if (pattern[n] === minimatch.GLOBSTAR) { + // test without the globstar, and with every child both below + // and replacing the globstar. + var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ] + entries.forEach(function (e) { + if (e.charAt(0) === "." && !this.dot) return + // instead of the globstar + s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))) + // below the globstar + s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n))) + }, this) + + s = s.filter(function (pattern) { + var key = gsKey(pattern) + var seen = !this._globstars[key] + this._globstars[key] = true + return seen + }, this) + + if (!s.length) + return cb() + + // now asyncForEach over this + var l = s.length + , errState = null + s.forEach(function (gsPattern) { + this._process(gsPattern, depth + 1, index, function (er) { + if (errState) return + if (er) return cb(errState = er) + if (--l <= 0) return cb() + }) + }, this) + + return + } + + // not a globstar + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = pattern[n] + var rawGlob = pattern[n]._glob + , dotOk = this.dot || rawGlob.charAt(0) === "." + + entries = entries.filter(function (e) { + return (e.charAt(0) !== "." || dotOk) && + e.match(pattern[n]) + }) + + // If n === pattern.length - 1, then there's no need for the extra stat + // *unless* the user has specified "mark" or "stat" explicitly. + // We know that they exist, since the readdir returned them. + if (n === pattern.length - 1 && + !this.mark && + !this.stat) { + entries.forEach(function (e) { + if (prefix) { + if (prefix !== "/") e = prefix + "/" + e + else e = prefix + e + } + if (e.charAt(0) === "/" && !this.nomount) { + e = path.join(this.root, e) + } + + if (process.platform === "win32") + e = e.replace(/\\/g, "/") + + this.matches[index] = this.matches[index] || {} + this.matches[index][e] = true + this.emitMatch(e) + }, this) + return cb.call(this) + } + + + // now test all the remaining entries as stand-ins for that part + // of the pattern. + var l = entries.length + , errState = null + if (l === 0) return cb() // no matches possible + entries.forEach(function (e) { + var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)) + this._process(p, depth + 1, index, function (er) { + if (errState) return + if (er) return cb(errState = er) + if (--l === 0) return cb.call(this) + }) + }, this) + }) + +} + +function gsKey (pattern) { + return '**' + pattern.map(function (p) { + return (p === minimatch.GLOBSTAR) ? '**' : (''+p) + }).join('/') +} + +Glob.prototype._stat = function (f, cb) { + assert(this instanceof Glob) + var abs = f + if (f.charAt(0) === "/") { + abs = path.join(this.root, f) + } else if (this.changedCwd) { + abs = path.resolve(this.cwd, f) + } + + if (f.length > this.maxLength) { + var er = new Error("Path name too long") + er.code = "ENAMETOOLONG" + er.path = f + return this._afterStat(f, abs, cb, er) + } + + this.log('stat', [this.cwd, f, '=', abs]) + + if (!this.stat && this.cache.hasOwnProperty(f)) { + var exists = this.cache[f] + , isDir = exists && (Array.isArray(exists) || exists === 2) + if (this.sync) return cb.call(this, !!exists, isDir) + return process.nextTick(cb.bind(this, !!exists, isDir)) + } + + var stat = this.statCache[abs] + if (this.sync || stat) { + var er + try { + stat = fs.statSync(abs) + } catch (e) { + er = e + } + this._afterStat(f, abs, cb, er, stat) + } else { + fs.stat(abs, this._afterStat.bind(this, f, abs, cb)) + } +} + +Glob.prototype._afterStat = function (f, abs, cb, er, stat) { + var exists + assert(this instanceof Glob) + + if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) { + this.log("should be ENOTDIR, fake it") + + er = new Error("ENOTDIR, not a directory '" + abs + "'") + er.path = abs + er.code = "ENOTDIR" + stat = null + } + + var emit = !this.statCache[abs] + this.statCache[abs] = stat + + if (er || !stat) { + exists = false + } else { + exists = stat.isDirectory() ? 2 : 1 + if (emit) + this.emit('stat', f, stat) + } + this.cache[f] = this.cache[f] || exists + cb.call(this, !!exists, exists === 2) +} + +Glob.prototype._readdir = function (f, cb) { + assert(this instanceof Glob) + var abs = f + if (f.charAt(0) === "/") { + abs = path.join(this.root, f) + } else if (isAbsolute(f)) { + abs = f + } else if (this.changedCwd) { + abs = path.resolve(this.cwd, f) + } + + if (f.length > this.maxLength) { + var er = new Error("Path name too long") + er.code = "ENAMETOOLONG" + er.path = f + return this._afterReaddir(f, abs, cb, er) + } + + this.log('readdir', [this.cwd, f, abs]) + if (this.cache.hasOwnProperty(f)) { + var c = this.cache[f] + if (Array.isArray(c)) { + if (this.sync) return cb.call(this, null, c) + return process.nextTick(cb.bind(this, null, c)) + } + + if (!c || c === 1) { + // either ENOENT or ENOTDIR + var code = c ? "ENOTDIR" : "ENOENT" + , er = new Error((c ? "Not a directory" : "Not found") + ": " + f) + er.path = f + er.code = code + this.log(f, er) + if (this.sync) return cb.call(this, er) + return process.nextTick(cb.bind(this, er)) + } + + // at this point, c === 2, meaning it's a dir, but we haven't + // had to read it yet, or c === true, meaning it's *something* + // but we don't have any idea what. Need to read it, either way. + } + + if (this.sync) { + var er, entries + try { + entries = fs.readdirSync(abs) + } catch (e) { + er = e + } + return this._afterReaddir(f, abs, cb, er, entries) + } + + fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb)) +} + +Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) { + assert(this instanceof Glob) + if (entries && !er) { + this.cache[f] = entries + // if we haven't asked to stat everything for suresies, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. This also gets us one step + // further into ELOOP territory. + if (!this.mark && !this.stat) { + entries.forEach(function (e) { + if (f === "/") e = f + e + else e = f + "/" + e + this.cache[e] = true + }, this) + } + + return cb.call(this, er, entries) + } + + // now handle errors, and cache the information + if (er) switch (er.code) { + case "ENOTDIR": // totally normal. means it *does* exist. + this.cache[f] = 1 + return cb.call(this, er) + case "ENOENT": // not terribly unusual + case "ELOOP": + case "ENAMETOOLONG": + case "UNKNOWN": + this.cache[f] = false + return cb.call(this, er) + default: // some unusual error. Treat as failure. + this.cache[f] = false + if (this.strict) this.emit("error", er) + if (!this.silent) console.error("glob error", er) + return cb.call(this, er) + } +} + +var isAbsolute = process.platform === "win32" ? absWin : absUnix + +function absWin (p) { + if (absUnix(p)) return true + // pull off the device/UNC bit from a windows path. + // from node's lib/path.js + var splitDeviceRe = + /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/ + , result = splitDeviceRe.exec(p) + , device = result[1] || '' + , isUnc = device && device.charAt(1) !== ':' + , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute + + return isAbsolute +} + +function absUnix (p) { + return p.charAt(0) === "/" || p === "" +} diff --git a/www/node_modules/jasmine/node_modules/glob/package.json b/www/node_modules/jasmine/node_modules/glob/package.json new file mode 100644 index 0000000..93bb56a --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/package.json @@ -0,0 +1,83 @@ +{ + "_args": [ + [ + "glob@^3.2.11", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine" + ] + ], + "_from": "glob@>=3.2.11 <4.0.0", + "_id": "glob@3.2.11", + "_inCache": true, + "_installable": true, + "_location": "/jasmine/glob", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "1.4.10", + "_phantomChildren": {}, + "_requested": { + "name": "glob", + "raw": "glob@^3.2.11", + "rawSpec": "^3.2.11", + "scope": null, + "spec": ">=3.2.11 <4.0.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine" + ], + "_resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "_shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d", + "_shrinkwrap": null, + "_spec": "glob@^3.2.11", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/node-glob/issues" + }, + "dependencies": { + "inherits": "2", + "minimatch": "0.3" + }, + "description": "a little globber", + "devDependencies": { + "mkdirp": "0", + "rimraf": "1", + "tap": "~0.4.0" + }, + "directories": {}, + "dist": { + "shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d", + "tarball": "http://registry.npmjs.org/glob/-/glob-3.2.11.tgz" + }, + "engines": { + "node": "*" + }, + "gitHead": "73f57e99510582b2024b762305970ebcf9b70aa2", + "homepage": "https://github.com/isaacs/node-glob", + "license": "BSD", + "main": "glob.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "glob", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "scripts": { + "test": "tap test/*.js", + "test-regen": "TEST_REGEN=1 node test/00-setup.js" + }, + "version": "3.2.11" +} diff --git a/www/node_modules/jasmine/node_modules/glob/test/00-setup.js b/www/node_modules/jasmine/node_modules/glob/test/00-setup.js new file mode 100644 index 0000000..245afaf --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/00-setup.js @@ -0,0 +1,176 @@ +// just a little pre-run script to set up the fixtures. +// zz-finish cleans it up + +var mkdirp = require("mkdirp") +var path = require("path") +var i = 0 +var tap = require("tap") +var fs = require("fs") +var rimraf = require("rimraf") + +var files = +[ "a/.abcdef/x/y/z/a" +, "a/abcdef/g/h" +, "a/abcfed/g/h" +, "a/b/c/d" +, "a/bc/e/f" +, "a/c/d/c/b" +, "a/cb/e/f" +] + +var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c") +var symlinkFrom = "../.." + +files = files.map(function (f) { + return path.resolve(__dirname, f) +}) + +tap.test("remove fixtures", function (t) { + rimraf(path.resolve(__dirname, "a"), function (er) { + t.ifError(er, "remove fixtures") + t.end() + }) +}) + +files.forEach(function (f) { + tap.test(f, function (t) { + var d = path.dirname(f) + mkdirp(d, 0755, function (er) { + if (er) { + t.fail(er) + return t.bailout() + } + fs.writeFile(f, "i like tests", function (er) { + t.ifError(er, "make file") + t.end() + }) + }) + }) +}) + +if (process.platform !== "win32") { + tap.test("symlinky", function (t) { + var d = path.dirname(symlinkTo) + console.error("mkdirp", d) + mkdirp(d, 0755, function (er) { + t.ifError(er) + fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) { + t.ifError(er, "make symlink") + t.end() + }) + }) + }) +} + +;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) { + w = "/tmp/glob-test/" + w + tap.test("create " + w, function (t) { + mkdirp(w, function (er) { + if (er) + throw er + t.pass(w) + t.end() + }) + }) +}) + + +// generate the bash pattern test-fixtures if possible +if (process.platform === "win32" || !process.env.TEST_REGEN) { + console.error("Windows, or TEST_REGEN unset. Using cached fixtures.") + return +} + +var spawn = require("child_process").spawn; +var globs = + // put more patterns here. + // anything that would be directly in / should be in /tmp/glob-test + ["test/a/*/+(c|g)/./d" + ,"test/a/**/[cg]/../[cg]" + ,"test/a/{b,c,d,e,f}/**/g" + ,"test/a/b/**" + ,"test/**/g" + ,"test/a/abc{fed,def}/g/h" + ,"test/a/abc{fed/g,def}/**/" + ,"test/a/abc{fed/g,def}/**///**/" + ,"test/**/a/**/" + ,"test/+(a|b|c)/a{/,bc*}/**" + ,"test/*/*/*/f" + ,"test/**/f" + ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**" + ,"{./*/*,/tmp/glob-test/*}" + ,"{/tmp/glob-test/*,*}" // evil owl face! how you taunt me! + ,"test/a/!(symlink)/**" + ] +var bashOutput = {} +var fs = require("fs") + +globs.forEach(function (pattern) { + tap.test("generate fixture " + pattern, function (t) { + var cmd = "shopt -s globstar && " + + "shopt -s extglob && " + + "shopt -s nullglob && " + + // "shopt >&2; " + + "eval \'for i in " + pattern + "; do echo $i; done\'" + var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) }) + var out = [] + cp.stdout.on("data", function (c) { + out.push(c) + }) + cp.stderr.pipe(process.stderr) + cp.on("close", function (code) { + out = flatten(out) + if (!out) + out = [] + else + out = cleanResults(out.split(/\r*\n/)) + + bashOutput[pattern] = out + t.notOk(code, "bash test should finish nicely") + t.end() + }) + }) +}) + +tap.test("save fixtures", function (t) { + var fname = path.resolve(__dirname, "bash-results.json") + var data = JSON.stringify(bashOutput, null, 2) + "\n" + fs.writeFile(fname, data, function (er) { + t.ifError(er) + t.end() + }) +}) + +function cleanResults (m) { + // normalize discrepancies in ordering, duplication, + // and ending slashes. + return m.map(function (m) { + return m.replace(/\/+/g, "/").replace(/\/$/, "") + }).sort(alphasort).reduce(function (set, f) { + if (f !== set[set.length - 1]) set.push(f) + return set + }, []).sort(alphasort).map(function (f) { + // de-windows + return (process.platform !== 'win32') ? f + : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') + }) +} + +function flatten (chunks) { + var s = 0 + chunks.forEach(function (c) { s += c.length }) + var out = new Buffer(s) + s = 0 + chunks.forEach(function (c) { + c.copy(out, s) + s += c.length + }) + + return out.toString().trim() +} + +function alphasort (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return a > b ? 1 : a < b ? -1 : 0 +} diff --git a/www/node_modules/jasmine/node_modules/glob/test/bash-comparison.js b/www/node_modules/jasmine/node_modules/glob/test/bash-comparison.js new file mode 100644 index 0000000..239ed1a --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/bash-comparison.js @@ -0,0 +1,63 @@ +// basic test +// show that it does the same thing by default as the shell. +var tap = require("tap") +, child_process = require("child_process") +, bashResults = require("./bash-results.json") +, globs = Object.keys(bashResults) +, glob = require("../") +, path = require("path") + +// run from the root of the project +// this is usually where you're at anyway, but be sure. +process.chdir(path.resolve(__dirname, "..")) + +function alphasort (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return a > b ? 1 : a < b ? -1 : 0 +} + +globs.forEach(function (pattern) { + var expect = bashResults[pattern] + // anything regarding the symlink thing will fail on windows, so just skip it + if (process.platform === "win32" && + expect.some(function (m) { + return /\/symlink\//.test(m) + })) + return + + tap.test(pattern, function (t) { + glob(pattern, function (er, matches) { + if (er) + throw er + + // sort and unmark, just to match the shell results + matches = cleanResults(matches) + + t.deepEqual(matches, expect, pattern) + t.end() + }) + }) + + tap.test(pattern + " sync", function (t) { + var matches = cleanResults(glob.sync(pattern)) + + t.deepEqual(matches, expect, "should match shell") + t.end() + }) +}) + +function cleanResults (m) { + // normalize discrepancies in ordering, duplication, + // and ending slashes. + return m.map(function (m) { + return m.replace(/\/+/g, "/").replace(/\/$/, "") + }).sort(alphasort).reduce(function (set, f) { + if (f !== set[set.length - 1]) set.push(f) + return set + }, []).sort(alphasort).map(function (f) { + // de-windows + return (process.platform !== 'win32') ? f + : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/') + }) +} diff --git a/www/node_modules/jasmine/node_modules/glob/test/bash-results.json b/www/node_modules/jasmine/node_modules/glob/test/bash-results.json new file mode 100644 index 0000000..8051c72 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/bash-results.json @@ -0,0 +1,351 @@ +{ + "test/a/*/+(c|g)/./d": [ + "test/a/b/c/./d" + ], + "test/a/**/[cg]/../[cg]": [ + "test/a/abcdef/g/../g", + "test/a/abcfed/g/../g", + "test/a/b/c/../c", + "test/a/c/../c", + "test/a/c/d/c/../c", + "test/a/symlink/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c" + ], + "test/a/{b,c,d,e,f}/**/g": [], + "test/a/b/**": [ + "test/a/b", + "test/a/b/c", + "test/a/b/c/d" + ], + "test/**/g": [ + "test/a/abcdef/g", + "test/a/abcfed/g" + ], + "test/a/abc{fed,def}/g/h": [ + "test/a/abcdef/g/h", + "test/a/abcfed/g/h" + ], + "test/a/abc{fed/g,def}/**/": [ + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcfed/g" + ], + "test/a/abc{fed/g,def}/**///**/": [ + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcfed/g" + ], + "test/**/a/**/": [ + "test/a", + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcfed", + "test/a/abcfed/g", + "test/a/b", + "test/a/b/c", + "test/a/bc", + "test/a/bc/e", + "test/a/c", + "test/a/c/d", + "test/a/c/d/c", + "test/a/cb", + "test/a/cb/e", + "test/a/symlink", + "test/a/symlink/a", + "test/a/symlink/a/b", + "test/a/symlink/a/b/c", + "test/a/symlink/a/b/c/a", + "test/a/symlink/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b" + ], + "test/+(a|b|c)/a{/,bc*}/**": [ + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcdef/g/h", + "test/a/abcfed", + "test/a/abcfed/g", + "test/a/abcfed/g/h" + ], + "test/*/*/*/f": [ + "test/a/bc/e/f", + "test/a/cb/e/f" + ], + "test/**/f": [ + "test/a/bc/e/f", + "test/a/cb/e/f" + ], + "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [ + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c" + ], + "{./*/*,/tmp/glob-test/*}": [ + "./examples/g.js", + "./examples/usr-local.js", + "./node_modules/inherits", + "./node_modules/minimatch", + "./node_modules/mkdirp", + "./node_modules/rimraf", + "./node_modules/tap", + "./test/00-setup.js", + "./test/a", + "./test/bash-comparison.js", + "./test/bash-results.json", + "./test/cwd-test.js", + "./test/globstar-match.js", + "./test/mark.js", + "./test/new-glob-optional-options.js", + "./test/nocase-nomagic.js", + "./test/pause-resume.js", + "./test/readme-issue.js", + "./test/root-nomount.js", + "./test/root.js", + "./test/stat.js", + "./test/zz-cleanup.js", + "/tmp/glob-test/asdf", + "/tmp/glob-test/bar", + "/tmp/glob-test/baz", + "/tmp/glob-test/foo", + "/tmp/glob-test/quux", + "/tmp/glob-test/qwer", + "/tmp/glob-test/rewq" + ], + "{/tmp/glob-test/*,*}": [ + "/tmp/glob-test/asdf", + "/tmp/glob-test/bar", + "/tmp/glob-test/baz", + "/tmp/glob-test/foo", + "/tmp/glob-test/quux", + "/tmp/glob-test/qwer", + "/tmp/glob-test/rewq", + "examples", + "glob.js", + "LICENSE", + "node_modules", + "package.json", + "README.md", + "test" + ], + "test/a/!(symlink)/**": [ + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcdef/g/h", + "test/a/abcfed", + "test/a/abcfed/g", + "test/a/abcfed/g/h", + "test/a/b", + "test/a/b/c", + "test/a/b/c/d", + "test/a/bc", + "test/a/bc/e", + "test/a/bc/e/f", + "test/a/c", + "test/a/c/d", + "test/a/c/d/c", + "test/a/c/d/c/b", + "test/a/cb", + "test/a/cb/e", + "test/a/cb/e/f" + ] +} diff --git a/www/node_modules/jasmine/node_modules/glob/test/cwd-test.js b/www/node_modules/jasmine/node_modules/glob/test/cwd-test.js new file mode 100644 index 0000000..352c27e --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/cwd-test.js @@ -0,0 +1,55 @@ +var tap = require("tap") + +var origCwd = process.cwd() +process.chdir(__dirname) + +tap.test("changing cwd and searching for **/d", function (t) { + var glob = require('../') + var path = require('path') + t.test('.', function (t) { + glob('**/d', function (er, matches) { + t.ifError(er) + t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) + t.end() + }) + }) + + t.test('a', function (t) { + glob('**/d', {cwd:path.resolve('a')}, function (er, matches) { + t.ifError(er) + t.like(matches, [ 'b/c/d', 'c/d' ]) + t.end() + }) + }) + + t.test('a/b', function (t) { + glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) { + t.ifError(er) + t.like(matches, [ 'c/d' ]) + t.end() + }) + }) + + t.test('a/b/', function (t) { + glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) { + t.ifError(er) + t.like(matches, [ 'c/d' ]) + t.end() + }) + }) + + t.test('.', function (t) { + glob('**/d', {cwd: process.cwd()}, function (er, matches) { + t.ifError(er) + t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) + t.end() + }) + }) + + t.test('cd -', function (t) { + process.chdir(origCwd) + t.end() + }) + + t.end() +}) diff --git a/www/node_modules/jasmine/node_modules/glob/test/globstar-match.js b/www/node_modules/jasmine/node_modules/glob/test/globstar-match.js new file mode 100644 index 0000000..9b234fa --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/globstar-match.js @@ -0,0 +1,19 @@ +var Glob = require("../glob.js").Glob +var test = require('tap').test + +test('globstar should not have dupe matches', function(t) { + var pattern = 'a/**/[gh]' + var g = new Glob(pattern, { cwd: __dirname }) + var matches = [] + g.on('match', function(m) { + console.error('match %j', m) + matches.push(m) + }) + g.on('end', function(set) { + console.error('set', set) + matches = matches.sort() + set = set.sort() + t.same(matches, set, 'should have same set of matches') + t.end() + }) +}) diff --git a/www/node_modules/jasmine/node_modules/glob/test/mark.js b/www/node_modules/jasmine/node_modules/glob/test/mark.js new file mode 100644 index 0000000..bf411c0 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/mark.js @@ -0,0 +1,118 @@ +var test = require("tap").test +var glob = require('../') +process.chdir(__dirname) + +// expose timing issues +var lag = 5 +glob.Glob.prototype._stat = function(o) { return function(f, cb) { + var args = arguments + setTimeout(function() { + o.call(this, f, cb) + }.bind(this), lag += 5) +}}(glob.Glob.prototype._stat) + + +test("mark, with **", function (t) { + glob("a/*b*/**", {mark: true}, function (er, results) { + if (er) + throw er + var expect = + [ 'a/abcdef/', + 'a/abcdef/g/', + 'a/abcdef/g/h', + 'a/abcfed/', + 'a/abcfed/g/', + 'a/abcfed/g/h', + 'a/b/', + 'a/b/c/', + 'a/b/c/d', + 'a/bc/', + 'a/bc/e/', + 'a/bc/e/f', + 'a/cb/', + 'a/cb/e/', + 'a/cb/e/f' ] + + t.same(results, expect) + t.end() + }) +}) + +test("mark, no / on pattern", function (t) { + glob("a/*", {mark: true}, function (er, results) { + if (er) + throw er + var expect = [ 'a/abcdef/', + 'a/abcfed/', + 'a/b/', + 'a/bc/', + 'a/c/', + 'a/cb/' ] + + if (process.platform !== "win32") + expect.push('a/symlink/') + + t.same(results, expect) + t.end() + }).on('match', function(m) { + t.similar(m, /\/$/) + }) +}) + +test("mark=false, no / on pattern", function (t) { + glob("a/*", function (er, results) { + if (er) + throw er + var expect = [ 'a/abcdef', + 'a/abcfed', + 'a/b', + 'a/bc', + 'a/c', + 'a/cb' ] + + if (process.platform !== "win32") + expect.push('a/symlink') + t.same(results, expect) + t.end() + }).on('match', function(m) { + t.similar(m, /[^\/]$/) + }) +}) + +test("mark=true, / on pattern", function (t) { + glob("a/*/", {mark: true}, function (er, results) { + if (er) + throw er + var expect = [ 'a/abcdef/', + 'a/abcfed/', + 'a/b/', + 'a/bc/', + 'a/c/', + 'a/cb/' ] + if (process.platform !== "win32") + expect.push('a/symlink/') + t.same(results, expect) + t.end() + }).on('match', function(m) { + t.similar(m, /\/$/) + }) +}) + +test("mark=false, / on pattern", function (t) { + glob("a/*/", function (er, results) { + if (er) + throw er + var expect = [ 'a/abcdef/', + 'a/abcfed/', + 'a/b/', + 'a/bc/', + 'a/c/', + 'a/cb/' ] + if (process.platform !== "win32") + expect.push('a/symlink/') + t.same(results, expect) + t.end() + }).on('match', function(m) { + t.similar(m, /\/$/) + }) +}) diff --git a/www/node_modules/jasmine/node_modules/glob/test/new-glob-optional-options.js b/www/node_modules/jasmine/node_modules/glob/test/new-glob-optional-options.js new file mode 100644 index 0000000..3e7dc5a --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/new-glob-optional-options.js @@ -0,0 +1,10 @@ +var Glob = require('../glob.js').Glob; +var test = require('tap').test; + +test('new glob, with cb, and no options', function (t) { + new Glob(__filename, function(er, results) { + if (er) throw er; + t.same(results, [__filename]); + t.end(); + }); +}); diff --git a/www/node_modules/jasmine/node_modules/glob/test/nocase-nomagic.js b/www/node_modules/jasmine/node_modules/glob/test/nocase-nomagic.js new file mode 100644 index 0000000..2503f23 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/nocase-nomagic.js @@ -0,0 +1,113 @@ +var fs = require('fs'); +var test = require('tap').test; +var glob = require('../'); + +test('mock fs', function(t) { + var stat = fs.stat + var statSync = fs.statSync + var readdir = fs.readdir + var readdirSync = fs.readdirSync + + function fakeStat(path) { + var ret + switch (path.toLowerCase()) { + case '/tmp': case '/tmp/': + ret = { isDirectory: function() { return true } } + break + case '/tmp/a': + ret = { isDirectory: function() { return false } } + break + } + return ret + } + + fs.stat = function(path, cb) { + var f = fakeStat(path); + if (f) { + process.nextTick(function() { + cb(null, f) + }) + } else { + stat.call(fs, path, cb) + } + } + + fs.statSync = function(path) { + return fakeStat(path) || statSync.call(fs, path) + } + + function fakeReaddir(path) { + var ret + switch (path.toLowerCase()) { + case '/tmp': case '/tmp/': + ret = [ 'a', 'A' ] + break + case '/': + ret = ['tmp', 'tMp', 'tMP', 'TMP'] + } + return ret + } + + fs.readdir = function(path, cb) { + var f = fakeReaddir(path) + if (f) + process.nextTick(function() { + cb(null, f) + }) + else + readdir.call(fs, path, cb) + } + + fs.readdirSync = function(path) { + return fakeReaddir(path) || readdirSync.call(fs, path) + } + + t.pass('mocked') + t.end() +}) + +test('nocase, nomagic', function(t) { + var n = 2 + var want = [ '/TMP/A', + '/TMP/a', + '/tMP/A', + '/tMP/a', + '/tMp/A', + '/tMp/a', + '/tmp/A', + '/tmp/a' ] + glob('/tmp/a', { nocase: true }, function(er, res) { + if (er) + throw er + t.same(res.sort(), want) + if (--n === 0) t.end() + }) + glob('/tmp/A', { nocase: true }, function(er, res) { + if (er) + throw er + t.same(res.sort(), want) + if (--n === 0) t.end() + }) +}) + +test('nocase, with some magic', function(t) { + t.plan(2) + var want = [ '/TMP/A', + '/TMP/a', + '/tMP/A', + '/tMP/a', + '/tMp/A', + '/tMp/a', + '/tmp/A', + '/tmp/a' ] + glob('/tmp/*', { nocase: true }, function(er, res) { + if (er) + throw er + t.same(res.sort(), want) + }) + glob('/tmp/*', { nocase: true }, function(er, res) { + if (er) + throw er + t.same(res.sort(), want) + }) +}) diff --git a/www/node_modules/jasmine/node_modules/glob/test/pause-resume.js b/www/node_modules/jasmine/node_modules/glob/test/pause-resume.js new file mode 100644 index 0000000..e1ffbab --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/pause-resume.js @@ -0,0 +1,73 @@ +// show that no match events happen while paused. +var tap = require("tap") +, child_process = require("child_process") +// just some gnarly pattern with lots of matches +, pattern = "test/a/!(symlink)/**" +, bashResults = require("./bash-results.json") +, patterns = Object.keys(bashResults) +, glob = require("../") +, Glob = glob.Glob +, path = require("path") + +// run from the root of the project +// this is usually where you're at anyway, but be sure. +process.chdir(path.resolve(__dirname, "..")) + +function alphasort (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return a > b ? 1 : a < b ? -1 : 0 +} + +function cleanResults (m) { + // normalize discrepancies in ordering, duplication, + // and ending slashes. + return m.map(function (m) { + return m.replace(/\/+/g, "/").replace(/\/$/, "") + }).sort(alphasort).reduce(function (set, f) { + if (f !== set[set.length - 1]) set.push(f) + return set + }, []).sort(alphasort).map(function (f) { + // de-windows + return (process.platform !== 'win32') ? f + : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') + }) +} + +var globResults = [] +tap.test("use a Glob object, and pause/resume it", function (t) { + var g = new Glob(pattern) + , paused = false + , res = [] + , expect = bashResults[pattern] + + g.on("pause", function () { + console.error("pause") + }) + + g.on("resume", function () { + console.error("resume") + }) + + g.on("match", function (m) { + t.notOk(g.paused, "must not be paused") + globResults.push(m) + g.pause() + t.ok(g.paused, "must be paused") + setTimeout(g.resume.bind(g), 10) + }) + + g.on("end", function (matches) { + t.pass("reached glob end") + globResults = cleanResults(globResults) + matches = cleanResults(matches) + t.deepEqual(matches, globResults, + "end event matches should be the same as match events") + + t.deepEqual(matches, expect, + "glob matches should be the same as bash results") + + t.end() + }) +}) + diff --git a/www/node_modules/jasmine/node_modules/glob/test/readme-issue.js b/www/node_modules/jasmine/node_modules/glob/test/readme-issue.js new file mode 100644 index 0000000..0b4e0be --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/readme-issue.js @@ -0,0 +1,36 @@ +var test = require("tap").test +var glob = require("../") + +var mkdirp = require("mkdirp") +var fs = require("fs") +var rimraf = require("rimraf") +var dir = __dirname + "/package" + +test("setup", function (t) { + mkdirp.sync(dir) + fs.writeFileSync(dir + "/package.json", "{}", "ascii") + fs.writeFileSync(dir + "/README", "x", "ascii") + t.pass("setup done") + t.end() +}) + +test("glob", function (t) { + var opt = { + cwd: dir, + nocase: true, + mark: true + } + + glob("README?(.*)", opt, function (er, files) { + if (er) + throw er + t.same(files, ["README"]) + t.end() + }) +}) + +test("cleanup", function (t) { + rimraf.sync(dir) + t.pass("clean") + t.end() +}) diff --git a/www/node_modules/jasmine/node_modules/glob/test/root-nomount.js b/www/node_modules/jasmine/node_modules/glob/test/root-nomount.js new file mode 100644 index 0000000..3ac5979 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/root-nomount.js @@ -0,0 +1,39 @@ +var tap = require("tap") + +var origCwd = process.cwd() +process.chdir(__dirname) + +tap.test("changing root and searching for /b*/**", function (t) { + var glob = require('../') + var path = require('path') + t.test('.', function (t) { + glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) { + t.ifError(er) + t.like(matches, []) + t.end() + }) + }) + + t.test('a', function (t) { + glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) { + t.ifError(er) + t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) + t.end() + }) + }) + + t.test('root=a, cwd=a/b', function (t) { + glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) { + t.ifError(er) + t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) + t.end() + }) + }) + + t.test('cd -', function (t) { + process.chdir(origCwd) + t.end() + }) + + t.end() +}) diff --git a/www/node_modules/jasmine/node_modules/glob/test/root.js b/www/node_modules/jasmine/node_modules/glob/test/root.js new file mode 100644 index 0000000..95c23f9 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/root.js @@ -0,0 +1,46 @@ +var t = require("tap") + +var origCwd = process.cwd() +process.chdir(__dirname) + +var glob = require('../') +var path = require('path') + +t.test('.', function (t) { + glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) { + t.ifError(er) + t.like(matches, []) + t.end() + }) +}) + + +t.test('a', function (t) { + console.error("root=" + path.resolve('a')) + glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) { + t.ifError(er) + var wanted = [ + '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' + ].map(function (m) { + return path.join(path.resolve('a'), m).replace(/\\/g, '/') + }) + + t.like(matches, wanted) + t.end() + }) +}) + +t.test('root=a, cwd=a/b', function (t) { + glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) { + t.ifError(er) + t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) { + return path.join(path.resolve('a'), m).replace(/\\/g, '/') + })) + t.end() + }) +}) + +t.test('cd -', function (t) { + process.chdir(origCwd) + t.end() +}) diff --git a/www/node_modules/jasmine/node_modules/glob/test/stat.js b/www/node_modules/jasmine/node_modules/glob/test/stat.js new file mode 100644 index 0000000..6291711 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/stat.js @@ -0,0 +1,32 @@ +var glob = require('../') +var test = require('tap').test +var path = require('path') + +test('stat all the things', function(t) { + var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname }) + var matches = [] + g.on('match', function(m) { + matches.push(m) + }) + var stats = [] + g.on('stat', function(m) { + stats.push(m) + }) + g.on('end', function(eof) { + stats = stats.sort() + matches = matches.sort() + eof = eof.sort() + t.same(stats, matches) + t.same(eof, matches) + var cache = Object.keys(this.statCache) + t.same(cache.map(function (f) { + return path.relative(__dirname, f) + }).sort(), matches) + + cache.forEach(function(c) { + t.equal(typeof this.statCache[c], 'object') + }, this) + + t.end() + }) +}) diff --git a/www/node_modules/jasmine/node_modules/glob/test/zz-cleanup.js b/www/node_modules/jasmine/node_modules/glob/test/zz-cleanup.js new file mode 100644 index 0000000..e085f0f --- /dev/null +++ b/www/node_modules/jasmine/node_modules/glob/test/zz-cleanup.js @@ -0,0 +1,11 @@ +// remove the fixtures +var tap = require("tap") +, rimraf = require("rimraf") +, path = require("path") + +tap.test("cleanup fixtures", function (t) { + rimraf(path.resolve(__dirname, "a"), function (er) { + t.ifError(er, "removed") + t.end() + }) +}) diff --git a/www/node_modules/jasmine/node_modules/minimatch/.npmignore b/www/node_modules/jasmine/node_modules/minimatch/.npmignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/www/node_modules/jasmine/node_modules/minimatch/LICENSE b/www/node_modules/jasmine/node_modules/minimatch/LICENSE new file mode 100644 index 0000000..05a4010 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/LICENSE @@ -0,0 +1,23 @@ +Copyright 2009, 2010, 2011 Isaac Z. Schlueter. +All rights reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/www/node_modules/jasmine/node_modules/minimatch/README.md b/www/node_modules/jasmine/node_modules/minimatch/README.md new file mode 100644 index 0000000..5b3967e --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/README.md @@ -0,0 +1,218 @@ +# minimatch + +A minimal matching utility. + +[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch) + + +This is the matching library used internally by npm. + +Eventually, it will replace the C binding in node-glob. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Usage + +```javascript +var minimatch = require("minimatch") + +minimatch("bar.foo", "*.foo") // true! +minimatch("bar.foo", "*.bar") // false! +minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +* Brace Expansion +* Extended glob matching +* "Globstar" `**` matching + +See: + +* `man sh` +* `man bash` +* `man 3 fnmatch` +* `man 5 gitignore` + +## Minimatch Class + +Create a minimatch object by instanting the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require("minimatch").Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +* `pattern` The original pattern the minimatch object represents. +* `options` The options supplied to the constructor. +* `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +* `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +* `negate` True if the pattern is negated. +* `comment` True if the pattern is a comment. +* `empty` True if the pattern is `""`. + +### Methods + +* `makeRe` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +* `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +* `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. + +All other methods are internal, and will be called as necessary. + +## Functions + +The top-level exported function has a `cache` property, which is an LRU +cache set to store 100 items. So, calling these methods repeatedly +with the same pattern and options will use the same Minimatch object, +saving the cost of parsing it multiple times. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, "*.js", { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) +``` + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between minimatch and other +implementations, and are intentional. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. diff --git a/www/node_modules/jasmine/node_modules/minimatch/minimatch.js b/www/node_modules/jasmine/node_modules/minimatch/minimatch.js new file mode 100644 index 0000000..4539678 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/minimatch.js @@ -0,0 +1,1061 @@ +;(function (require, exports, module, platform) { + +if (module) module.exports = minimatch +else exports.minimatch = minimatch + +if (!require) { + require = function (id) { + switch (id) { + case "sigmund": return function sigmund (obj) { + return JSON.stringify(obj) + } + case "path": return { basename: function (f) { + f = f.split(/[\/\\]/) + var e = f.pop() + if (!e) e = f.pop() + return e + }} + case "lru-cache": return function LRUCache () { + // not quite an LRU, but still space-limited. + var cache = {} + var cnt = 0 + this.set = function (k, v) { + cnt ++ + if (cnt >= 100) cache = {} + cache[k] = v + } + this.get = function (k) { return cache[k] } + } + } + } +} + +minimatch.Minimatch = Minimatch + +var LRU = require("lru-cache") + , cache = minimatch.cache = new LRU({max: 100}) + , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} + , sigmund = require("sigmund") + +var path = require("path") + // any single thing other than / + // don't need to escape / when using new RegExp() + , qmark = "[^/]" + + // * => any number of characters + , star = qmark + "*?" + + // ** when dots are allowed. Anything goes, except .. and . + // not (^ or / followed by one or two dots followed by $ or /), + // followed by anything, any number of times. + , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" + + // not a ^ or / followed by a dot, + // followed by anything, any number of times. + , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" + + // characters that need to be escaped in RegExp. + , reSpecials = charSet("().*{}+?[]^$\\!") + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split("").reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} + + +function minimatch (p, pattern, options) { + if (typeof pattern !== "string") { + throw new TypeError("glob pattern string required") + } + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === "#") { + return false + } + + // "" only matches "" + if (pattern.trim() === "") return p === "" + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options, cache) + } + + if (typeof pattern !== "string") { + throw new TypeError("glob pattern string required") + } + + if (!options) options = {} + pattern = pattern.trim() + + // windows: need to use /, not \ + // On other platforms, \ is a valid (albeit bad) filename char. + if (platform === "win32") { + pattern = pattern.split("\\").join("/") + } + + // lru storage. + // these things aren't particularly big, but walking down the string + // and turning it into a regexp can get pretty costly. + var cacheKey = pattern + "\n" + sigmund(options) + var cached = minimatch.cache.get(cacheKey) + if (cached) return cached + minimatch.cache.set(cacheKey, this) + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function() {} + +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return + + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === "#") { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = console.error + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return -1 === s.indexOf(false) + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + , negate = false + , options = this.options + , negateOffset = 0 + + if (options.nonegate) return + + for ( var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === "!" + ; i ++) { + negate = !negate + negateOffset ++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return new Minimatch(pattern, options).braceExpand() +} + +Minimatch.prototype.braceExpand = braceExpand +function braceExpand (pattern, options) { + options = options || this.options + pattern = typeof pattern === "undefined" + ? this.pattern : pattern + + if (typeof pattern === "undefined") { + throw new Error("undefined pattern") + } + + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + var escaping = false + + // examples and comments refer to this crazy pattern: + // a{b,c{d,e},{f,g}h}x{y,z} + // expected: + // abxy + // abxz + // acdxy + // acdxz + // acexy + // acexz + // afhxy + // afhxz + // aghxy + // aghxz + + // everything before the first \{ is just a prefix. + // So, we pluck that off, and work with the rest, + // and then prepend it to everything we find. + if (pattern.charAt(0) !== "{") { + this.debug(pattern) + var prefix = null + for (var i = 0, l = pattern.length; i < l; i ++) { + var c = pattern.charAt(i) + this.debug(i, c) + if (c === "\\") { + escaping = !escaping + } else if (c === "{" && !escaping) { + prefix = pattern.substr(0, i) + break + } + } + + // actually no sets, all { were escaped. + if (prefix === null) { + this.debug("no sets") + return [pattern] + } + + var tail = braceExpand.call(this, pattern.substr(i), options) + return tail.map(function (t) { + return prefix + t + }) + } + + // now we have something like: + // {b,c{d,e},{f,g}h}x{y,z} + // walk through the set, expanding each part, until + // the set ends. then, we'll expand the suffix. + // If the set only has a single member, then'll put the {} back + + // first, handle numeric sets, since they're easier + var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/) + if (numset) { + this.debug("numset", numset[1], numset[2]) + var suf = braceExpand.call(this, pattern.substr(numset[0].length), options) + , start = +numset[1] + , end = +numset[2] + , inc = start > end ? -1 : 1 + , set = [] + for (var i = start; i != (end + inc); i += inc) { + // append all the suffixes + for (var ii = 0, ll = suf.length; ii < ll; ii ++) { + set.push(i + suf[ii]) + } + } + return set + } + + // ok, walk through the set + // We hope, somewhat optimistically, that there + // will be a } at the end. + // If the closing brace isn't found, then the pattern is + // interpreted as braceExpand("\\" + pattern) so that + // the leading \{ will be interpreted literally. + var i = 1 // skip the \{ + , depth = 1 + , set = [] + , member = "" + , sawEnd = false + , escaping = false + + function addMember () { + set.push(member) + member = "" + } + + this.debug("Entering for") + FOR: for (i = 1, l = pattern.length; i < l; i ++) { + var c = pattern.charAt(i) + this.debug("", i, c) + + if (escaping) { + escaping = false + member += "\\" + c + } else { + switch (c) { + case "\\": + escaping = true + continue + + case "{": + depth ++ + member += "{" + continue + + case "}": + depth -- + // if this closes the actual set, then we're done + if (depth === 0) { + addMember() + // pluck off the close-brace + i ++ + break FOR + } else { + member += c + continue + } + + case ",": + if (depth === 1) { + addMember() + } else { + member += c + } + continue + + default: + member += c + continue + } // switch + } // else + } // for + + // now we've either finished the set, and the suffix is + // pattern.substr(i), or we have *not* closed the set, + // and need to escape the leading brace + if (depth !== 0) { + this.debug("didn't close", pattern) + return braceExpand.call(this, "\\" + pattern, options) + } + + // x{y,z} -> ["xy", "xz"] + this.debug("set", set) + this.debug("suffix", pattern.substr(i)) + var suf = braceExpand.call(this, pattern.substr(i), options) + // ["b", "c{d,e}","{f,g}h"] -> + // [["b"], ["cd", "ce"], ["fh", "gh"]] + var addBraces = set.length === 1 + this.debug("set pre-expanded", set) + set = set.map(function (p) { + return braceExpand.call(this, p, options) + }, this) + this.debug("set expanded", set) + + + // [["b"], ["cd", "ce"], ["fh", "gh"]] -> + // ["b", "cd", "ce", "fh", "gh"] + set = set.reduce(function (l, r) { + return l.concat(r) + }) + + if (addBraces) { + set = set.map(function (s) { + return "{" + s + "}" + }) + } + + // now attach the suffixes. + var ret = [] + for (var i = 0, l = set.length; i < l; i ++) { + for (var ii = 0, ll = suf.length; ii < ll; ii ++) { + ret.push(set[i] + suf[ii]) + } + } + return ret +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + var options = this.options + + // shortcuts + if (!options.noglobstar && pattern === "**") return GLOBSTAR + if (pattern === "") return "" + + var re = "" + , hasMagic = !!options.nocase + , escaping = false + // ? => one single character + , patternListStack = [] + , plType + , stateChar + , inClass = false + , reClassStart = -1 + , classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + , patternStart = pattern.charAt(0) === "." ? "" // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))" + : "(?!\\.)" + , self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case "*": + re += star + hasMagic = true + break + case "?": + re += qmark + hasMagic = true + break + default: + re += "\\"+stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for ( var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i ++ ) { + + this.debug("%s\t%s %s %j", pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += "\\" + c + escaping = false + continue + } + + SWITCH: switch (c) { + case "/": + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + + case "\\": + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case "?": + case "*": + case "+": + case "@": + case "!": + this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === "!" && i === classStart + 1) c = "^" + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case "(": + if (inClass) { + re += "(" + continue + } + + if (!stateChar) { + re += "\\(" + continue + } + + plType = stateChar + patternListStack.push({ type: plType + , start: i - 1 + , reStart: re.length }) + // negation is (?:(?!js)[^/]*) + re += stateChar === "!" ? "(?:(?!" : "(?:" + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ")": + if (inClass || !patternListStack.length) { + re += "\\)" + continue + } + + clearStateChar() + hasMagic = true + re += ")" + plType = patternListStack.pop().type + // negation is (?:(?!js)[^/]*) + // The others are (?:) + switch (plType) { + case "!": + re += "[^/]*?)" + break + case "?": + case "+": + case "*": re += plType + case "@": break // the default anyway + } + continue + + case "|": + if (inClass || !patternListStack.length || escaping) { + re += "\\|" + escaping = false + continue + } + + clearStateChar() + re += "|" + continue + + // these are mostly the same in regexp and glob + case "[": + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += "\\" + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case "]": + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += "\\" + c + escaping = false + continue + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === "^" && inClass)) { + re += "\\" + } + + re += c + + } // switch + } // for + + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + var cs = pattern.substr(classStart + 1) + , sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + "\\[" + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + var pl + while (pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + 3) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = "\\" + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + "|" + }) + + this.debug("tail=%j\n %s", tail, tail) + var t = pl.type === "*" ? star + : pl.type === "?" ? qmark + : "\\" + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + + t + "\\(" + + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += "\\\\" + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case ".": + case "[": + case "(": addPatternStart = true + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== "" && hasMagic) re = "(?=.)" + re + + if (addPatternStart) re = patternStart + re + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [ re, hasMagic ] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? "i" : "" + , regExp = new RegExp("^" + re + "$", flags) + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) return this.regexp = false + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + , flags = options.nocase ? "i" : "" + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === "string") ? regExpEscape(p) + : p._src + }).join("\\\/") + }).join("|") + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = "^(?:" + re + ")$" + + // can match anything, as long as it's not this. + if (this.negate) re = "^(?!" + re + ").*$" + + try { + return this.regexp = new RegExp(re, flags) + } catch (ex) { + return this.regexp = false + } +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = match +function match (f, partial) { + this.debug("match", f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === "" + + if (f === "/" && partial) return true + + var options = this.options + + // windows: need to use /, not \ + // On other platforms, \ is a valid (albeit bad) filename char. + if (platform === "win32") { + f = f.split("\\").join("/") + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, "split", f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, "set", set) + + // Find the basename of the path by looking for the last non-empty segment + var filename; + for (var i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (var i = 0, l = set.length; i < l; i ++) { + var pattern = set[i], file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug("matchOne", + { "this": this + , file: file + , pattern: pattern }) + + this.debug("matchOne", file.length, pattern.length) + + for ( var fi = 0 + , pi = 0 + , fl = file.length + , pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi ++, pi ++ ) { + + this.debug("matchOne loop") + var p = pattern[pi] + , f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + , pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for ( ; fi < fl; fi ++) { + if (file[fi] === "." || file[fi] === ".." || + (!options.dot && file[fi].charAt(0) === ".")) return false + } + return true + } + + // ok, let's see if we can swallow whatever we can. + WHILE: while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', + file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === "." || swallowee === ".." || + (!options.dot && swallowee.charAt(0) === ".")) { + this.debug("dot detected!", file, fr, pattern, pr) + break WHILE + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr ++ + } + } + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug("\n>>> no match, partial?", file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === "string") { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug("string match", p, f, hit) + } else { + hit = f.match(p) + this.debug("pattern match", p, f, hit) + } + + if (!hit) return false + } + + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === "") + return emptyFileEnd + } + + // should be unreachable. + throw new Error("wtf?") +} + + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, "$1") +} + + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") +} + +})( typeof require === "function" ? require : null, + this, + typeof module === "object" ? module : null, + typeof process === "object" ? process.platform : "win32" + ) diff --git a/www/node_modules/jasmine/node_modules/minimatch/package.json b/www/node_modules/jasmine/node_modules/minimatch/package.json new file mode 100644 index 0000000..ac23beb --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/package.json @@ -0,0 +1,82 @@ +{ + "_args": [ + [ + "minimatch@0.3", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine/node_modules/glob" + ] + ], + "_from": "minimatch@>=0.3.0 <0.4.0", + "_id": "minimatch@0.3.0", + "_inCache": true, + "_installable": true, + "_location": "/jasmine/minimatch", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "1.4.10", + "_phantomChildren": {}, + "_requested": { + "name": "minimatch", + "raw": "minimatch@0.3", + "rawSpec": "0.3", + "scope": null, + "spec": ">=0.3.0 <0.4.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine/glob" + ], + "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "_shasum": "275d8edaac4f1bb3326472089e7949c8394699dd", + "_shrinkwrap": null, + "_spec": "minimatch@0.3", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine/node_modules/glob", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me" + }, + "bugs": { + "url": "https://github.com/isaacs/minimatch/issues" + }, + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "description": "a glob matcher in javascript", + "devDependencies": { + "tap": "" + }, + "directories": {}, + "dist": { + "shasum": "275d8edaac4f1bb3326472089e7949c8394699dd", + "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz" + }, + "engines": { + "node": "*" + }, + "homepage": "https://github.com/isaacs/minimatch", + "license": { + "type": "MIT", + "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" + }, + "main": "minimatch.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "minimatch", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "0.3.0" +} diff --git a/www/node_modules/jasmine/node_modules/minimatch/test/basic.js b/www/node_modules/jasmine/node_modules/minimatch/test/basic.js new file mode 100644 index 0000000..ae7ac73 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/test/basic.js @@ -0,0 +1,399 @@ +// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test +// +// TODO: Some of these tests do very bad things with backslashes, and will +// most likely fail badly on windows. They should probably be skipped. + +var tap = require("tap") + , globalBefore = Object.keys(global) + , mm = require("../") + , files = [ "a", "b", "c", "d", "abc" + , "abd", "abe", "bb", "bcd" + , "ca", "cb", "dd", "de" + , "bdir/", "bdir/cfile"] + , next = files.concat([ "a-b", "aXb" + , ".x", ".y" ]) + + +var patterns = + [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test" + , ["a*", ["a", "abc", "abd", "abe"]] + , ["X*", ["X*"], {nonull: true}] + + // allow null glob expansion + , ["X*", []] + + // isaacs: Slightly different than bash/sh/ksh + // \\* is not un-escaped to literal "*" in a failed match, + // but it does make it get treated as a literal star + , ["\\*", ["\\*"], {nonull: true}] + , ["\\**", ["\\**"], {nonull: true}] + , ["\\*\\*", ["\\*\\*"], {nonull: true}] + + , ["b*/", ["bdir/"]] + , ["c*", ["c", "ca", "cb"]] + , ["**", files] + + , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] + , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] + + , "legendary larry crashes bashes" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] + + , "character classes" + , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] + , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", + "bdir/", "ca", "cb", "dd", "de"]] + , ["a*[^c]", ["abd", "abe"]] + , function () { files.push("a-b", "aXb") } + , ["a[X-]b", ["a-b", "aXb"]] + , function () { files.push(".x", ".y") } + , ["[^a-c]*", ["d", "dd", "de"]] + , function () { files.push("a*b/", "a*b/ooo") } + , ["a\\*b/*", ["a*b/ooo"]] + , ["a\\*?/*", ["a*b/ooo"]] + , ["*\\\\!*", [], {null: true}, ["echo !7"]] + , ["*\\!*", ["echo !7"], null, ["echo !7"]] + , ["*.\\*", ["r.*"], null, ["r.*"]] + , ["a[b]c", ["abc"]] + , ["a[\\b]c", ["abc"]] + , ["a?c", ["abc"]] + , ["a\\*c", [], {null: true}, ["abc"]] + , ["", [""], { null: true }, [""]] + + , "http://www.opensource.apple.com/source/bash/bash-23/" + + "bash/tests/glob-test" + , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } + , ["*/man*/bash.*", ["man/man1/bash.1"]] + , ["man/man1/bash.1", ["man/man1/bash.1"]] + , ["a***c", ["abc"], null, ["abc"]] + , ["a*****?c", ["abc"], null, ["abc"]] + , ["?*****??", ["abc"], null, ["abc"]] + , ["*****??", ["abc"], null, ["abc"]] + , ["?*****?c", ["abc"], null, ["abc"]] + , ["?***?****c", ["abc"], null, ["abc"]] + , ["?***?****?", ["abc"], null, ["abc"]] + , ["?***?****", ["abc"], null, ["abc"]] + , ["*******c", ["abc"], null, ["abc"]] + , ["*******?", ["abc"], null, ["abc"]] + , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["[-abc]", ["-"], null, ["-"]] + , ["[abc-]", ["-"], null, ["-"]] + , ["\\", ["\\"], null, ["\\"]] + , ["[\\\\]", ["\\"], null, ["\\"]] + , ["[[]", ["["], null, ["["]] + , ["[", ["["], null, ["["]] + , ["[*", ["[abc"], null, ["[abc"]] + , "a right bracket shall lose its special meaning and\n" + + "represent itself in a bracket expression if it occurs\n" + + "first in the list. -- POSIX.2 2.8.3.2" + , ["[]]", ["]"], null, ["]"]] + , ["[]-]", ["]"], null, ["]"]] + , ["[a-\z]", ["p"], null, ["p"]] + , ["??**********?****?", [], { null: true }, ["abc"]] + , ["??**********?****c", [], { null: true }, ["abc"]] + , ["?************c****?****", [], { null: true }, ["abc"]] + , ["*c*?**", [], { null: true }, ["abc"]] + , ["a*****c*?**", [], { null: true }, ["abc"]] + , ["a********???*******", [], { null: true }, ["abc"]] + , ["[]", [], { null: true }, ["a"]] + , ["[abc", [], { null: true }, ["["]] + + , "nocase tests" + , ["XYZ", ["xYz"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + , ["ab*", ["ABC"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + + // [ pattern, [matches], MM opts, files, TAP opts] + , "onestar/twostar" + , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] + , ["{/?,*}", ["/a", "bb"], {null: true} + , ["/a", "/b/b", "/a/b/c", "bb"]] + + , "dots should not match unless requested" + , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] + + // .. and . can only match patterns starting with ., + // even when options.dot is set. + , function () { + files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] + } + , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] + , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] + , ["a/*/b", ["a/c/b"], {dot:false}] + , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] + + + // this also tests that changing the options needs + // to change the cache key, even if the pattern is + // the same! + , ["**", ["a/b","a/.d",".a/.d"], { dot: true } + , [ ".a/.d", "a/.d", "a/b"]] + + , "paren sets cannot contain slashes" + , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] + + // brace sets trump all else. + // + // invalid glob pattern. fails on bash4 and bsdglob. + // however, in this implementation, it's easier just + // to do the intuitive thing, and let brace-expansion + // actually come before parsing any extglob patterns, + // like the documentation seems to say. + // + // XXX: if anyone complains about this, either fix it + // or tell them to grow up and stop complaining. + // + // bash/bsdglob says this: + // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] + // but we do this instead: + , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] + + // test partial parsing in the presence of comment/negation chars + , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] + , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] + + // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. + , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" + , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] + , {} + , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] + + + // crazy nested {,,} and *(||) tests. + , function () { + files = [ "a", "b", "c", "d" + , "ab", "ac", "ad" + , "bc", "cb" + , "bc,d", "c,db", "c,d" + , "d)", "(b|c", "*(b|c" + , "b|c", "b|cc", "cb|c" + , "x(a|b|c)", "x(a|c)" + , "(a|b|c)", "(a|c)"] + } + , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] + , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] + // a + // *(b|c) + // *(b|d) + , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] + , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] + + + // test various flag settings. + , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] + , { noext: true } ] + , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} + , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] + , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] + + + // begin channelling Boole and deMorgan... + , "negation tests" + , function () { + files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] + } + + // anything that is NOT a* matches. + , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] + + // anything that IS !a* matches. + , ["!a*", ["!ab", "!abc"], {nonegate: true}] + + // anything that IS a* matches + , ["!!a*", ["a!b"]] + + // anything that is NOT !a* matches + , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] + + // negation nestled within a pattern + , function () { + files = [ "foo.js" + , "foo.bar" + // can't match this one without negative lookbehind. + , "foo.js.js" + , "blar.js" + , "foo." + , "boo.js.boo" ] + } + , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] + + // https://github.com/isaacs/minimatch/issues/5 + , function () { + files = [ 'a/b/.x/c' + , 'a/b/.x/c/d' + , 'a/b/.x/c/d/e' + , 'a/b/.x' + , 'a/b/.x/' + , 'a/.x/b' + , '.x' + , '.x/' + , '.x/a' + , '.x/a/b' + , 'a/.x/b/.x/c' + , '.x/.x' ] + } + , ["**/.x/**", [ '.x/' + , '.x/a' + , '.x/a/b' + , 'a/.x/b' + , 'a/b/.x/' + , 'a/b/.x/c' + , 'a/b/.x/c/d' + , 'a/b/.x/c/d/e' ] ] + + ] + +var regexps = + [ '/^(?:(?=.)a[^/]*?)$/', + '/^(?:(?=.)X[^/]*?)$/', + '/^(?:(?=.)X[^/]*?)$/', + '/^(?:\\*)$/', + '/^(?:(?=.)\\*[^/]*?)$/', + '/^(?:\\*\\*)$/', + '/^(?:(?=.)b[^/]*?\\/)$/', + '/^(?:(?=.)c[^/]*?)$/', + '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', + '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/', + '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/', + '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/', + '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/', + '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/', + '/^(?:(?=.)a[^/]*?[^c])$/', + '/^(?:(?=.)a[X-]b)$/', + '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/', + '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/', + '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/', + '/^(?:(?=.)a[b]c)$/', + '/^(?:(?=.)a[b]c)$/', + '/^(?:(?=.)a[^/]c)$/', + '/^(?:a\\*c)$/', + 'false', + '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/', + '/^(?:man\\/man1\\/bash\\.1)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', + '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/', + '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', + '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[-abc])$/', + '/^(?:(?!\\.)(?=.)[abc-])$/', + '/^(?:\\\\)$/', + '/^(?:(?!\\.)(?=.)[\\\\])$/', + '/^(?:(?!\\.)(?=.)[\\[])$/', + '/^(?:\\[)$/', + '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[\\]])$/', + '/^(?:(?!\\.)(?=.)[\\]-])$/', + '/^(?:(?!\\.)(?=.)[a-z])$/', + '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', + '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', + '/^(?:\\[\\])$/', + '/^(?:\\[abc)$/', + '/^(?:(?=.)XYZ)$/i', + '/^(?:(?=.)ab[^/]*?)$/i', + '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i', + '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/', + '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/', + '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', + '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/', + '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', + '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/', + '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', + '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/', + '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', + '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/', + '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/', + '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/', + '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', + '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/', + '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/', + '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/', + '/^(?:(?=.)a[^/]b)$/', + '/^(?:(?=.)#[^/]*?)$/', + '/^(?!^(?:(?=.)a[^/]*?)$).*$/', + '/^(?:(?=.)\\!a[^/]*?)$/', + '/^(?:(?=.)a[^/]*?)$/', + '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/', + '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ] +var re = 0; + +tap.test("basic tests", function (t) { + var start = Date.now() + + // [ pattern, [matches], MM opts, files, TAP opts] + patterns.forEach(function (c) { + if (typeof c === "function") return c() + if (typeof c === "string") return t.comment(c) + + var pattern = c[0] + , expect = c[1].sort(alpha) + , options = c[2] || {} + , f = c[3] || files + , tapOpts = c[4] || {} + + // options.debug = true + var m = new mm.Minimatch(pattern, options) + var r = m.makeRe() + var expectRe = regexps[re++] + tapOpts.re = String(r) || JSON.stringify(r) + tapOpts.files = JSON.stringify(f) + tapOpts.pattern = pattern + tapOpts.set = m.set + tapOpts.negated = m.negate + + var actual = mm.match(f, pattern, options) + actual.sort(alpha) + + t.equivalent( actual, expect + , JSON.stringify(pattern) + " " + JSON.stringify(expect) + , tapOpts ) + + t.equal(tapOpts.re, expectRe, tapOpts) + }) + + t.comment("time=" + (Date.now() - start) + "ms") + t.end() +}) + +tap.test("global leak test", function (t) { + var globalAfter = Object.keys(global) + t.equivalent(globalAfter, globalBefore, "no new globals, please") + t.end() +}) + +function alpha (a, b) { + return a > b ? 1 : -1 +} diff --git a/www/node_modules/jasmine/node_modules/minimatch/test/brace-expand.js b/www/node_modules/jasmine/node_modules/minimatch/test/brace-expand.js new file mode 100644 index 0000000..7ee278a --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/test/brace-expand.js @@ -0,0 +1,33 @@ +var tap = require("tap") + , minimatch = require("../") + +tap.test("brace expansion", function (t) { + // [ pattern, [expanded] ] + ; [ [ "a{b,c{d,e},{f,g}h}x{y,z}" + , [ "abxy" + , "abxz" + , "acdxy" + , "acdxz" + , "acexy" + , "acexz" + , "afhxy" + , "afhxz" + , "aghxy" + , "aghxz" ] ] + , [ "a{1..5}b" + , [ "a1b" + , "a2b" + , "a3b" + , "a4b" + , "a5b" ] ] + , [ "a{b}c", ["a{b}c"] ] + ].forEach(function (tc) { + var p = tc[0] + , expect = tc[1] + t.equivalent(minimatch.braceExpand(p), expect, p) + }) + console.error("ending") + t.end() +}) + + diff --git a/www/node_modules/jasmine/node_modules/minimatch/test/caching.js b/www/node_modules/jasmine/node_modules/minimatch/test/caching.js new file mode 100644 index 0000000..0fec4b0 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/test/caching.js @@ -0,0 +1,14 @@ +var Minimatch = require("../minimatch.js").Minimatch +var tap = require("tap") +tap.test("cache test", function (t) { + var mm1 = new Minimatch("a?b") + var mm2 = new Minimatch("a?b") + t.equal(mm1, mm2, "should get the same object") + // the lru should drop it after 100 entries + for (var i = 0; i < 100; i ++) { + new Minimatch("a"+i) + } + mm2 = new Minimatch("a?b") + t.notEqual(mm1, mm2, "cache should have dropped") + t.end() +}) diff --git a/www/node_modules/jasmine/node_modules/minimatch/test/defaults.js b/www/node_modules/jasmine/node_modules/minimatch/test/defaults.js new file mode 100644 index 0000000..75e0571 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/test/defaults.js @@ -0,0 +1,274 @@ +// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test +// +// TODO: Some of these tests do very bad things with backslashes, and will +// most likely fail badly on windows. They should probably be skipped. + +var tap = require("tap") + , globalBefore = Object.keys(global) + , mm = require("../") + , files = [ "a", "b", "c", "d", "abc" + , "abd", "abe", "bb", "bcd" + , "ca", "cb", "dd", "de" + , "bdir/", "bdir/cfile"] + , next = files.concat([ "a-b", "aXb" + , ".x", ".y" ]) + +tap.test("basic tests", function (t) { + var start = Date.now() + + // [ pattern, [matches], MM opts, files, TAP opts] + ; [ "http://www.bashcookbook.com/bashinfo" + + "/source/bash-1.14.7/tests/glob-test" + , ["a*", ["a", "abc", "abd", "abe"]] + , ["X*", ["X*"], {nonull: true}] + + // allow null glob expansion + , ["X*", []] + + // isaacs: Slightly different than bash/sh/ksh + // \\* is not un-escaped to literal "*" in a failed match, + // but it does make it get treated as a literal star + , ["\\*", ["\\*"], {nonull: true}] + , ["\\**", ["\\**"], {nonull: true}] + , ["\\*\\*", ["\\*\\*"], {nonull: true}] + + , ["b*/", ["bdir/"]] + , ["c*", ["c", "ca", "cb"]] + , ["**", files] + + , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] + , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] + + , "legendary larry crashes bashes" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] + + , "character classes" + , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] + , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", + "bdir/", "ca", "cb", "dd", "de"]] + , ["a*[^c]", ["abd", "abe"]] + , function () { files.push("a-b", "aXb") } + , ["a[X-]b", ["a-b", "aXb"]] + , function () { files.push(".x", ".y") } + , ["[^a-c]*", ["d", "dd", "de"]] + , function () { files.push("a*b/", "a*b/ooo") } + , ["a\\*b/*", ["a*b/ooo"]] + , ["a\\*?/*", ["a*b/ooo"]] + , ["*\\\\!*", [], {null: true}, ["echo !7"]] + , ["*\\!*", ["echo !7"], null, ["echo !7"]] + , ["*.\\*", ["r.*"], null, ["r.*"]] + , ["a[b]c", ["abc"]] + , ["a[\\b]c", ["abc"]] + , ["a?c", ["abc"]] + , ["a\\*c", [], {null: true}, ["abc"]] + , ["", [""], { null: true }, [""]] + + , "http://www.opensource.apple.com/source/bash/bash-23/" + + "bash/tests/glob-test" + , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } + , ["*/man*/bash.*", ["man/man1/bash.1"]] + , ["man/man1/bash.1", ["man/man1/bash.1"]] + , ["a***c", ["abc"], null, ["abc"]] + , ["a*****?c", ["abc"], null, ["abc"]] + , ["?*****??", ["abc"], null, ["abc"]] + , ["*****??", ["abc"], null, ["abc"]] + , ["?*****?c", ["abc"], null, ["abc"]] + , ["?***?****c", ["abc"], null, ["abc"]] + , ["?***?****?", ["abc"], null, ["abc"]] + , ["?***?****", ["abc"], null, ["abc"]] + , ["*******c", ["abc"], null, ["abc"]] + , ["*******?", ["abc"], null, ["abc"]] + , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["[-abc]", ["-"], null, ["-"]] + , ["[abc-]", ["-"], null, ["-"]] + , ["\\", ["\\"], null, ["\\"]] + , ["[\\\\]", ["\\"], null, ["\\"]] + , ["[[]", ["["], null, ["["]] + , ["[", ["["], null, ["["]] + , ["[*", ["[abc"], null, ["[abc"]] + , "a right bracket shall lose its special meaning and\n" + + "represent itself in a bracket expression if it occurs\n" + + "first in the list. -- POSIX.2 2.8.3.2" + , ["[]]", ["]"], null, ["]"]] + , ["[]-]", ["]"], null, ["]"]] + , ["[a-\z]", ["p"], null, ["p"]] + , ["??**********?****?", [], { null: true }, ["abc"]] + , ["??**********?****c", [], { null: true }, ["abc"]] + , ["?************c****?****", [], { null: true }, ["abc"]] + , ["*c*?**", [], { null: true }, ["abc"]] + , ["a*****c*?**", [], { null: true }, ["abc"]] + , ["a********???*******", [], { null: true }, ["abc"]] + , ["[]", [], { null: true }, ["a"]] + , ["[abc", [], { null: true }, ["["]] + + , "nocase tests" + , ["XYZ", ["xYz"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + , ["ab*", ["ABC"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + + // [ pattern, [matches], MM opts, files, TAP opts] + , "onestar/twostar" + , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] + , ["{/?,*}", ["/a", "bb"], {null: true} + , ["/a", "/b/b", "/a/b/c", "bb"]] + + , "dots should not match unless requested" + , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] + + // .. and . can only match patterns starting with ., + // even when options.dot is set. + , function () { + files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] + } + , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] + , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] + , ["a/*/b", ["a/c/b"], {dot:false}] + , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] + + + // this also tests that changing the options needs + // to change the cache key, even if the pattern is + // the same! + , ["**", ["a/b","a/.d",".a/.d"], { dot: true } + , [ ".a/.d", "a/.d", "a/b"]] + + , "paren sets cannot contain slashes" + , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] + + // brace sets trump all else. + // + // invalid glob pattern. fails on bash4 and bsdglob. + // however, in this implementation, it's easier just + // to do the intuitive thing, and let brace-expansion + // actually come before parsing any extglob patterns, + // like the documentation seems to say. + // + // XXX: if anyone complains about this, either fix it + // or tell them to grow up and stop complaining. + // + // bash/bsdglob says this: + // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] + // but we do this instead: + , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] + + // test partial parsing in the presence of comment/negation chars + , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] + , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] + + // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. + , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" + , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] + , {} + , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] + + + // crazy nested {,,} and *(||) tests. + , function () { + files = [ "a", "b", "c", "d" + , "ab", "ac", "ad" + , "bc", "cb" + , "bc,d", "c,db", "c,d" + , "d)", "(b|c", "*(b|c" + , "b|c", "b|cc", "cb|c" + , "x(a|b|c)", "x(a|c)" + , "(a|b|c)", "(a|c)"] + } + , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] + , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] + // a + // *(b|c) + // *(b|d) + , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] + , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] + + + // test various flag settings. + , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] + , { noext: true } ] + , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} + , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] + , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] + + + // begin channelling Boole and deMorgan... + , "negation tests" + , function () { + files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] + } + + // anything that is NOT a* matches. + , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] + + // anything that IS !a* matches. + , ["!a*", ["!ab", "!abc"], {nonegate: true}] + + // anything that IS a* matches + , ["!!a*", ["a!b"]] + + // anything that is NOT !a* matches + , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] + + // negation nestled within a pattern + , function () { + files = [ "foo.js" + , "foo.bar" + // can't match this one without negative lookbehind. + , "foo.js.js" + , "blar.js" + , "foo." + , "boo.js.boo" ] + } + , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] + + ].forEach(function (c) { + if (typeof c === "function") return c() + if (typeof c === "string") return t.comment(c) + + var pattern = c[0] + , expect = c[1].sort(alpha) + , options = c[2] + , f = c[3] || files + , tapOpts = c[4] || {} + + // options.debug = true + var Class = mm.defaults(options).Minimatch + var m = new Class(pattern, {}) + var r = m.makeRe() + tapOpts.re = String(r) || JSON.stringify(r) + tapOpts.files = JSON.stringify(f) + tapOpts.pattern = pattern + tapOpts.set = m.set + tapOpts.negated = m.negate + + var actual = mm.match(f, pattern, options) + actual.sort(alpha) + + t.equivalent( actual, expect + , JSON.stringify(pattern) + " " + JSON.stringify(expect) + , tapOpts ) + }) + + t.comment("time=" + (Date.now() - start) + "ms") + t.end() +}) + +tap.test("global leak test", function (t) { + var globalAfter = Object.keys(global) + t.equivalent(globalAfter, globalBefore, "no new globals, please") + t.end() +}) + +function alpha (a, b) { + return a > b ? 1 : -1 +} diff --git a/www/node_modules/jasmine/node_modules/minimatch/test/extglob-ending-with-state-char.js b/www/node_modules/jasmine/node_modules/minimatch/test/extglob-ending-with-state-char.js new file mode 100644 index 0000000..6676e26 --- /dev/null +++ b/www/node_modules/jasmine/node_modules/minimatch/test/extglob-ending-with-state-char.js @@ -0,0 +1,8 @@ +var test = require('tap').test +var minimatch = require('../') + +test('extglob ending with statechar', function(t) { + t.notOk(minimatch('ax', 'a?(b*)')) + t.ok(minimatch('ax', '?(a*|b)')) + t.end() +}) diff --git a/www/node_modules/jasmine/package.json b/www/node_modules/jasmine/package.json new file mode 100644 index 0000000..5b20c3a --- /dev/null +++ b/www/node_modules/jasmine/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + "jasmine", + "/Users/adamdon/Desktop/studywell/studywell/sw/www" + ] + ], + "_from": "jasmine@latest", + "_id": "jasmine@2.4.1", + "_inCache": true, + "_installable": true, + "_location": "/jasmine", + "_nodeVersion": "0.12.7", + "_npmUser": { + "email": "gregg@slackersoft.net", + "name": "slackersoft" + }, + "_npmVersion": "2.12.1", + "_phantomChildren": { + "inherits": "2.0.1", + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + }, + "_requested": { + "name": "jasmine", + "raw": "jasmine", + "rawSpec": "", + "scope": null, + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.4.1.tgz", + "_shasum": "9016dda453213d27ac6d43dc4ea97315a189085e", + "_shrinkwrap": null, + "_spec": "jasmine", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www", + "bin": { + "jasmine": "./bin/jasmine.js" + }, + "bugs": { + "url": "https://github.com/jasmine/jasmine-npm/issues" + }, + "dependencies": { + "exit": "^0.1.2", + "glob": "^3.2.11", + "jasmine-core": "~2.4.0" + }, + "description": "Command line jasmine", + "devDependencies": { + "grunt": "^0.4.2", + "grunt-cli": "^0.1.13", + "grunt-contrib-jshint": "^0.11.0", + "shelljs": "^0.3.0" + }, + "directories": {}, + "dist": { + "shasum": "9016dda453213d27ac6d43dc4ea97315a189085e", + "tarball": "http://registry.npmjs.org/jasmine/-/jasmine-2.4.1.tgz" + }, + "gitHead": "17344da242f81c61e4d19a895960bf9414fae07d", + "homepage": "http://jasmine.github.io/", + "keywords": [ + "test", + "jasmine", + "tdd", + "bdd" + ], + "license": "MIT", + "main": "./lib/jasmine.js", + "maintainers": [ + { + "email": "gregg@slackersoft.net", + "name": "slackersoft" + }, + { + "email": "dwfrank@pivotallabs.com", + "name": "dwfrank" + }, + { + "email": "chris.amavisca@gmail.com", + "name": "amavisca" + } + ], + "name": "jasmine", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jasmine/jasmine-npm.git" + }, + "scripts": { + "test": "grunt && ./bin/jasmine.js" + }, + "version": "2.4.1" +} diff --git a/www/node_modules/jasmine/tasks/jasmine.js b/www/node_modules/jasmine/tasks/jasmine.js new file mode 100644 index 0000000..b137c18 --- /dev/null +++ b/www/node_modules/jasmine/tasks/jasmine.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports = function(grunt) { + var Jasmine = require('../lib/jasmine'); + + grunt.registerTask('specs', function() { + var jasmine = new Jasmine(); + var done = this.async(); + + jasmine.loadConfigFile(process.env.JASMINE_CONFIG_PATH || './spec/support/jasmine.json'); + jasmine.onComplete(done); + jasmine.execute(); + }); +}; diff --git a/www/node_modules/lodash/LICENSE b/www/node_modules/lodash/LICENSE new file mode 100644 index 0000000..bcbe13d --- /dev/null +++ b/www/node_modules/lodash/LICENSE @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright 2012-2016 The Dojo Foundation +Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/www/node_modules/lodash/README.md b/www/node_modules/lodash/README.md new file mode 100644 index 0000000..56a419b --- /dev/null +++ b/www/node_modules/lodash/README.md @@ -0,0 +1,40 @@ +# lodash v4.6.1 + +The [lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. + +## Installation + +Using npm: +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash +``` + +In Node.js: +```js +// Load the full build. +var _ = require('lodash'); +// Load the core build. +var _ = require('lodash/core'); +// Load the fp build for immutable auto-curried iteratee-first data-last methods. +var _ = require('lodash/fp'); + +// Load a method category. +var array = require('lodash/array'); +var object = require('lodash/fp/object'); + +// Load a single method for smaller builds with browserify/rollup/webpack. +var chunk = require('lodash/chunk'); +var extend = require('lodash/fp/extend'); +``` + +See the [package source](https://github.com/lodash/lodash/tree/4.6.1-npm) for more details. + +**Note:**
          +Don’t assign values to the [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL.
          +Install [n_](https://www.npmjs.com/package/n_) for a REPL that includes lodash by default. + +## Support + +Tested in Chrome 47-48, Firefox 43-44, IE 9-11, Edge 13, Safari 8-9, Node.js 0.10, 0.12, 4, & 5, & PhantomJS 1.9.8.
          +Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/www/node_modules/lodash/_Hash.js b/www/node_modules/lodash/_Hash.js new file mode 100644 index 0000000..8647d16 --- /dev/null +++ b/www/node_modules/lodash/_Hash.js @@ -0,0 +1,18 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Creates an hash object. + * + * @private + * @constructor + * @returns {Object} Returns the new hash object. + */ +function Hash() {} + +// Avoid inheriting from `Object.prototype` when possible. +Hash.prototype = nativeCreate ? nativeCreate(null) : objectProto; + +module.exports = Hash; diff --git a/www/node_modules/lodash/_LazyWrapper.js b/www/node_modules/lodash/_LazyWrapper.js new file mode 100644 index 0000000..ad01ef8 --- /dev/null +++ b/www/node_modules/lodash/_LazyWrapper.js @@ -0,0 +1,27 @@ +var baseCreate = require('./_baseCreate'), + baseLodash = require('./_baseLodash'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ +function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; +} + +LazyWrapper.prototype = baseCreate(baseLodash.prototype); +LazyWrapper.prototype.constructor = LazyWrapper; + +module.exports = LazyWrapper; diff --git a/www/node_modules/lodash/_LodashWrapper.js b/www/node_modules/lodash/_LodashWrapper.js new file mode 100644 index 0000000..7c255b2 --- /dev/null +++ b/www/node_modules/lodash/_LodashWrapper.js @@ -0,0 +1,22 @@ +var baseCreate = require('./_baseCreate'), + baseLodash = require('./_baseLodash'); + +/** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + */ +function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; +} + +LodashWrapper.prototype = baseCreate(baseLodash.prototype); +LodashWrapper.prototype.constructor = LodashWrapper; + +module.exports = LodashWrapper; diff --git a/www/node_modules/lodash/_Map.js b/www/node_modules/lodash/_Map.js new file mode 100644 index 0000000..b73f29a --- /dev/null +++ b/www/node_modules/lodash/_Map.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; diff --git a/www/node_modules/lodash/_MapCache.js b/www/node_modules/lodash/_MapCache.js new file mode 100644 index 0000000..2652843 --- /dev/null +++ b/www/node_modules/lodash/_MapCache.js @@ -0,0 +1,32 @@ +var mapClear = require('./_mapClear'), + mapDelete = require('./_mapDelete'), + mapGet = require('./_mapGet'), + mapHas = require('./_mapHas'), + mapSet = require('./_mapSet'); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function MapCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.clear(); + while (++index < length) { + var entry = values[index]; + this.set(entry[0], entry[1]); + } +} + +// Add functions to the `MapCache`. +MapCache.prototype.clear = mapClear; +MapCache.prototype['delete'] = mapDelete; +MapCache.prototype.get = mapGet; +MapCache.prototype.has = mapHas; +MapCache.prototype.set = mapSet; + +module.exports = MapCache; diff --git a/www/node_modules/lodash/_Reflect.js b/www/node_modules/lodash/_Reflect.js new file mode 100644 index 0000000..1de7475 --- /dev/null +++ b/www/node_modules/lodash/_Reflect.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Reflect = root.Reflect; + +module.exports = Reflect; diff --git a/www/node_modules/lodash/_Set.js b/www/node_modules/lodash/_Set.js new file mode 100644 index 0000000..b3c8dcb --- /dev/null +++ b/www/node_modules/lodash/_Set.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); + +module.exports = Set; diff --git a/www/node_modules/lodash/_SetCache.js b/www/node_modules/lodash/_SetCache.js new file mode 100644 index 0000000..5d9d620 --- /dev/null +++ b/www/node_modules/lodash/_SetCache.js @@ -0,0 +1,25 @@ +var MapCache = require('./_MapCache'), + cachePush = require('./_cachePush'); + +/** + * + * Creates a set cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.__data__ = new MapCache; + while (++index < length) { + this.push(values[index]); + } +} + +// Add functions to the `SetCache`. +SetCache.prototype.push = cachePush; + +module.exports = SetCache; diff --git a/www/node_modules/lodash/_Stack.js b/www/node_modules/lodash/_Stack.js new file mode 100644 index 0000000..345577e --- /dev/null +++ b/www/node_modules/lodash/_Stack.js @@ -0,0 +1,32 @@ +var stackClear = require('./_stackClear'), + stackDelete = require('./_stackDelete'), + stackGet = require('./_stackGet'), + stackHas = require('./_stackHas'), + stackSet = require('./_stackSet'); + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function Stack(values) { + var index = -1, + length = values ? values.length : 0; + + this.clear(); + while (++index < length) { + var entry = values[index]; + this.set(entry[0], entry[1]); + } +} + +// Add functions to the `Stack` cache. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +module.exports = Stack; diff --git a/www/node_modules/lodash/_Symbol.js b/www/node_modules/lodash/_Symbol.js new file mode 100644 index 0000000..a013f7c --- /dev/null +++ b/www/node_modules/lodash/_Symbol.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; diff --git a/www/node_modules/lodash/_Uint8Array.js b/www/node_modules/lodash/_Uint8Array.js new file mode 100644 index 0000000..2fb30e1 --- /dev/null +++ b/www/node_modules/lodash/_Uint8Array.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; diff --git a/www/node_modules/lodash/_WeakMap.js b/www/node_modules/lodash/_WeakMap.js new file mode 100644 index 0000000..567f86c --- /dev/null +++ b/www/node_modules/lodash/_WeakMap.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); + +module.exports = WeakMap; diff --git a/www/node_modules/lodash/_addMapEntry.js b/www/node_modules/lodash/_addMapEntry.js new file mode 100644 index 0000000..0112ef7 --- /dev/null +++ b/www/node_modules/lodash/_addMapEntry.js @@ -0,0 +1,15 @@ +/** + * Adds the key-value `pair` to `map`. + * + * @private + * @param {Object} map The map to modify. + * @param {Array} pair The key-value pair to add. + * @returns {Object} Returns `map`. + */ +function addMapEntry(map, pair) { + // Don't return `Map#set` because it doesn't return the map instance in IE 11. + map.set(pair[0], pair[1]); + return map; +} + +module.exports = addMapEntry; diff --git a/www/node_modules/lodash/_addSetEntry.js b/www/node_modules/lodash/_addSetEntry.js new file mode 100644 index 0000000..7b75c13 --- /dev/null +++ b/www/node_modules/lodash/_addSetEntry.js @@ -0,0 +1,14 @@ +/** + * Adds `value` to `set`. + * + * @private + * @param {Object} set The set to modify. + * @param {*} value The value to add. + * @returns {Object} Returns `set`. + */ +function addSetEntry(set, value) { + set.add(value); + return set; +} + +module.exports = addSetEntry; diff --git a/www/node_modules/lodash/_apply.js b/www/node_modules/lodash/_apply.js new file mode 100644 index 0000000..22d4f8a --- /dev/null +++ b/www/node_modules/lodash/_apply.js @@ -0,0 +1,22 @@ +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + var length = args.length; + switch (length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +module.exports = apply; diff --git a/www/node_modules/lodash/_arrayAggregator.js b/www/node_modules/lodash/_arrayAggregator.js new file mode 100644 index 0000000..562eeb3 --- /dev/null +++ b/www/node_modules/lodash/_arrayAggregator.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; +} + +module.exports = arrayAggregator; diff --git a/www/node_modules/lodash/_arrayConcat.js b/www/node_modules/lodash/_arrayConcat.js new file mode 100644 index 0000000..96e7741 --- /dev/null +++ b/www/node_modules/lodash/_arrayConcat.js @@ -0,0 +1,25 @@ +/** + * Creates a new array concatenating `array` with `other`. + * + * @private + * @param {Array} array The first array to concatenate. + * @param {Array} other The second array to concatenate. + * @returns {Array} Returns the new concatenated array. + */ +function arrayConcat(array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength); + + while (++index < length) { + result[index] = array[index]; + } + while (++othIndex < othLength) { + result[index++] = other[othIndex]; + } + return result; +} + +module.exports = arrayConcat; diff --git a/www/node_modules/lodash/_arrayEach.js b/www/node_modules/lodash/_arrayEach.js new file mode 100644 index 0000000..c302e63 --- /dev/null +++ b/www/node_modules/lodash/_arrayEach.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; diff --git a/www/node_modules/lodash/_arrayEachRight.js b/www/node_modules/lodash/_arrayEachRight.js new file mode 100644 index 0000000..5318585 --- /dev/null +++ b/www/node_modules/lodash/_arrayEachRight.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEachRight(array, iteratee) { + var length = array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEachRight; diff --git a/www/node_modules/lodash/_arrayEvery.js b/www/node_modules/lodash/_arrayEvery.js new file mode 100644 index 0000000..d3ba018 --- /dev/null +++ b/www/node_modules/lodash/_arrayEvery.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + */ +function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; +} + +module.exports = arrayEvery; diff --git a/www/node_modules/lodash/_arrayFilter.js b/www/node_modules/lodash/_arrayFilter.js new file mode 100644 index 0000000..7b61ba6 --- /dev/null +++ b/www/node_modules/lodash/_arrayFilter.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = arrayFilter; diff --git a/www/node_modules/lodash/_arrayIncludes.js b/www/node_modules/lodash/_arrayIncludes.js new file mode 100644 index 0000000..9574f5d --- /dev/null +++ b/www/node_modules/lodash/_arrayIncludes.js @@ -0,0 +1,16 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} array The array to search. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + return !!array.length && baseIndexOf(array, value, 0) > -1; +} + +module.exports = arrayIncludes; diff --git a/www/node_modules/lodash/_arrayIncludesWith.js b/www/node_modules/lodash/_arrayIncludesWith.js new file mode 100644 index 0000000..88ea237 --- /dev/null +++ b/www/node_modules/lodash/_arrayIncludesWith.js @@ -0,0 +1,22 @@ +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to search. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +module.exports = arrayIncludesWith; diff --git a/www/node_modules/lodash/_arrayMap.js b/www/node_modules/lodash/_arrayMap.js new file mode 100644 index 0000000..73b29cf --- /dev/null +++ b/www/node_modules/lodash/_arrayMap.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; diff --git a/www/node_modules/lodash/_arrayPush.js b/www/node_modules/lodash/_arrayPush.js new file mode 100644 index 0000000..7d742b3 --- /dev/null +++ b/www/node_modules/lodash/_arrayPush.js @@ -0,0 +1,20 @@ +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +module.exports = arrayPush; diff --git a/www/node_modules/lodash/_arrayReduce.js b/www/node_modules/lodash/_arrayReduce.js new file mode 100644 index 0000000..6a355bc --- /dev/null +++ b/www/node_modules/lodash/_arrayReduce.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +module.exports = arrayReduce; diff --git a/www/node_modules/lodash/_arrayReduceRight.js b/www/node_modules/lodash/_arrayReduceRight.js new file mode 100644 index 0000000..b33a2d0 --- /dev/null +++ b/www/node_modules/lodash/_arrayReduceRight.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; +} + +module.exports = arrayReduceRight; diff --git a/www/node_modules/lodash/_arraySome.js b/www/node_modules/lodash/_arraySome.js new file mode 100644 index 0000000..b93d531 --- /dev/null +++ b/www/node_modules/lodash/_arraySome.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; diff --git a/www/node_modules/lodash/_assignInDefaults.js b/www/node_modules/lodash/_assignInDefaults.js new file mode 100644 index 0000000..ea6b0e3 --- /dev/null +++ b/www/node_modules/lodash/_assignInDefaults.js @@ -0,0 +1,27 @@ +var eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used by `_.defaults` to customize its `_.assignIn` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ +function assignInDefaults(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; +} + +module.exports = assignInDefaults; diff --git a/www/node_modules/lodash/_assignMergeValue.js b/www/node_modules/lodash/_assignMergeValue.js new file mode 100644 index 0000000..61dd583 --- /dev/null +++ b/www/node_modules/lodash/_assignMergeValue.js @@ -0,0 +1,19 @@ +var eq = require('./eq'); + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (typeof key == 'number' && value === undefined && !(key in object))) { + object[key] = value; + } +} + +module.exports = assignMergeValue; diff --git a/www/node_modules/lodash/_assignValue.js b/www/node_modules/lodash/_assignValue.js new file mode 100644 index 0000000..35d49f0 --- /dev/null +++ b/www/node_modules/lodash/_assignValue.js @@ -0,0 +1,27 @@ +var eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } +} + +module.exports = assignValue; diff --git a/www/node_modules/lodash/_assocDelete.js b/www/node_modules/lodash/_assocDelete.js new file mode 100644 index 0000000..709a04a --- /dev/null +++ b/www/node_modules/lodash/_assocDelete.js @@ -0,0 +1,31 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the associative array. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function assocDelete(array, key) { + var index = assocIndexOf(array, key); + if (index < 0) { + return false; + } + var lastIndex = array.length - 1; + if (index == lastIndex) { + array.pop(); + } else { + splice.call(array, index, 1); + } + return true; +} + +module.exports = assocDelete; diff --git a/www/node_modules/lodash/_assocGet.js b/www/node_modules/lodash/_assocGet.js new file mode 100644 index 0000000..e53d332 --- /dev/null +++ b/www/node_modules/lodash/_assocGet.js @@ -0,0 +1,16 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Gets the associative array value for `key`. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function assocGet(array, key) { + var index = assocIndexOf(array, key); + return index < 0 ? undefined : array[index][1]; +} + +module.exports = assocGet; diff --git a/www/node_modules/lodash/_assocHas.js b/www/node_modules/lodash/_assocHas.js new file mode 100644 index 0000000..a74bd39 --- /dev/null +++ b/www/node_modules/lodash/_assocHas.js @@ -0,0 +1,15 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Checks if an associative array value for `key` exists. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function assocHas(array, key) { + return assocIndexOf(array, key) > -1; +} + +module.exports = assocHas; diff --git a/www/node_modules/lodash/_assocIndexOf.js b/www/node_modules/lodash/_assocIndexOf.js new file mode 100644 index 0000000..958c8d8 --- /dev/null +++ b/www/node_modules/lodash/_assocIndexOf.js @@ -0,0 +1,22 @@ +var eq = require('./eq'); + +/** + * Gets the index at which the first occurrence of `key` is found in `array` + * of key-value pairs. + * + * @private + * @param {Array} array The array to search. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; diff --git a/www/node_modules/lodash/_assocSet.js b/www/node_modules/lodash/_assocSet.js new file mode 100644 index 0000000..524f341 --- /dev/null +++ b/www/node_modules/lodash/_assocSet.js @@ -0,0 +1,20 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Sets the associative array `key` to `value`. + * + * @private + * @param {Array} array The array to modify. + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + */ +function assocSet(array, key, value) { + var index = assocIndexOf(array, key); + if (index < 0) { + array.push([key, value]); + } else { + array[index][1] = value; + } +} + +module.exports = assocSet; diff --git a/www/node_modules/lodash/_baseAggregator.js b/www/node_modules/lodash/_baseAggregator.js new file mode 100644 index 0000000..4bc9e91 --- /dev/null +++ b/www/node_modules/lodash/_baseAggregator.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; +} + +module.exports = baseAggregator; diff --git a/www/node_modules/lodash/_baseAssign.js b/www/node_modules/lodash/_baseAssign.js new file mode 100644 index 0000000..e5c4a1a --- /dev/null +++ b/www/node_modules/lodash/_baseAssign.js @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), + keys = require('./keys'); + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); +} + +module.exports = baseAssign; diff --git a/www/node_modules/lodash/_baseAt.js b/www/node_modules/lodash/_baseAt.js new file mode 100644 index 0000000..a077cb9 --- /dev/null +++ b/www/node_modules/lodash/_baseAt.js @@ -0,0 +1,23 @@ +var get = require('./get'); + +/** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths of elements to pick. + * @returns {Array} Returns the new array of picked elements. + */ +function baseAt(object, paths) { + var index = -1, + isNil = object == null, + length = paths.length, + result = Array(length); + + while (++index < length) { + result[index] = isNil ? undefined : get(object, paths[index]); + } + return result; +} + +module.exports = baseAt; diff --git a/www/node_modules/lodash/_baseCastArrayLikeObject.js b/www/node_modules/lodash/_baseCastArrayLikeObject.js new file mode 100644 index 0000000..17c0c86 --- /dev/null +++ b/www/node_modules/lodash/_baseCastArrayLikeObject.js @@ -0,0 +1,14 @@ +var isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ +function baseCastArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; +} + +module.exports = baseCastArrayLikeObject; diff --git a/www/node_modules/lodash/_baseCastFunction.js b/www/node_modules/lodash/_baseCastFunction.js new file mode 100644 index 0000000..b3d0f72 --- /dev/null +++ b/www/node_modules/lodash/_baseCastFunction.js @@ -0,0 +1,14 @@ +var identity = require('./identity'); + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ +function baseCastFunction(value) { + return typeof value == 'function' ? value : identity; +} + +module.exports = baseCastFunction; diff --git a/www/node_modules/lodash/_baseCastPath.js b/www/node_modules/lodash/_baseCastPath.js new file mode 100644 index 0000000..7634e5b --- /dev/null +++ b/www/node_modules/lodash/_baseCastPath.js @@ -0,0 +1,15 @@ +var isArray = require('./isArray'), + stringToPath = require('./_stringToPath'); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function baseCastPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +module.exports = baseCastPath; diff --git a/www/node_modules/lodash/_baseClamp.js b/www/node_modules/lodash/_baseClamp.js new file mode 100644 index 0000000..ceadeef --- /dev/null +++ b/www/node_modules/lodash/_baseClamp.js @@ -0,0 +1,22 @@ +/** + * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ +function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; +} + +module.exports = baseClamp; diff --git a/www/node_modules/lodash/_baseClone.js b/www/node_modules/lodash/_baseClone.js new file mode 100644 index 0000000..b3f106e --- /dev/null +++ b/www/node_modules/lodash/_baseClone.js @@ -0,0 +1,131 @@ +var Stack = require('./_Stack'), + arrayEach = require('./_arrayEach'), + assignValue = require('./_assignValue'), + baseAssign = require('./_baseAssign'), + baseForOwn = require('./_baseForOwn'), + cloneBuffer = require('./_cloneBuffer'), + copyArray = require('./_copyArray'), + copySymbols = require('./_copySymbols'), + getTag = require('./_getTag'), + initCloneArray = require('./_initCloneArray'), + initCloneByTag = require('./_initCloneByTag'), + initCloneObject = require('./_initCloneObject'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isHostObject = require('./_isHostObject'), + isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = +cloneableTags[dateTag] = cloneableTags[float32Tag] = +cloneableTags[float64Tag] = cloneableTags[int8Tag] = +cloneableTags[int16Tag] = cloneableTags[int32Tag] = +cloneableTags[mapTag] = cloneableTags[numberTag] = +cloneableTags[objectTag] = cloneableTags[regexpTag] = +cloneableTags[setTag] = cloneableTags[stringTag] = +cloneableTags[symbolTag] = cloneableTags[uint8Tag] = +cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = +cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {boolean} [isFull] Specify a clone including symbols. + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, isDeep, isFull, customizer, key, object, stack) { + var result; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + if (isHostObject(value)) { + return object ? value : {}; + } + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + result = baseAssign(result, value); + return isFull ? copySymbols(value, result) : result; + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); + }); + return (isFull && !isArr) ? copySymbols(value, result) : result; +} + +module.exports = baseClone; diff --git a/www/node_modules/lodash/_baseConforms.js b/www/node_modules/lodash/_baseConforms.js new file mode 100644 index 0000000..888434d --- /dev/null +++ b/www/node_modules/lodash/_baseConforms.js @@ -0,0 +1,32 @@ +var keys = require('./keys'); + +/** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new function. + */ +function baseConforms(source) { + var props = keys(source), + length = props.length; + + return function(object) { + if (object == null) { + return !length; + } + var index = length; + while (index--) { + var key = props[index], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in Object(object))) || !predicate(value)) { + return false; + } + } + return true; + }; +} + +module.exports = baseConforms; diff --git a/www/node_modules/lodash/_baseCreate.js b/www/node_modules/lodash/_baseCreate.js new file mode 100644 index 0000000..4372cad --- /dev/null +++ b/www/node_modules/lodash/_baseCreate.js @@ -0,0 +1,18 @@ +var isObject = require('./isObject'); + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ +function baseCreate(proto) { + return isObject(proto) ? objectCreate(proto) : {}; +} + +module.exports = baseCreate; diff --git a/www/node_modules/lodash/_baseDelay.js b/www/node_modules/lodash/_baseDelay.js new file mode 100644 index 0000000..c397562 --- /dev/null +++ b/www/node_modules/lodash/_baseDelay.js @@ -0,0 +1,21 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The base implementation of `_.delay` and `_.defer` which accepts an array + * of `func` arguments. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments to provide to `func`. + * @returns {number} Returns the timer id. + */ +function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); +} + +module.exports = baseDelay; diff --git a/www/node_modules/lodash/_baseDifference.js b/www/node_modules/lodash/_baseDifference.js new file mode 100644 index 0000000..b266d7e --- /dev/null +++ b/www/node_modules/lodash/_baseDifference.js @@ -0,0 +1,66 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of methods like `_.difference` without support for + * excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ +function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; +} + +module.exports = baseDifference; diff --git a/www/node_modules/lodash/_baseEach.js b/www/node_modules/lodash/_baseEach.js new file mode 100644 index 0000000..512c067 --- /dev/null +++ b/www/node_modules/lodash/_baseEach.js @@ -0,0 +1,14 @@ +var baseForOwn = require('./_baseForOwn'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; diff --git a/www/node_modules/lodash/_baseEachRight.js b/www/node_modules/lodash/_baseEachRight.js new file mode 100644 index 0000000..0a8feec --- /dev/null +++ b/www/node_modules/lodash/_baseEachRight.js @@ -0,0 +1,14 @@ +var baseForOwnRight = require('./_baseForOwnRight'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEachRight = createBaseEach(baseForOwnRight, true); + +module.exports = baseEachRight; diff --git a/www/node_modules/lodash/_baseEvery.js b/www/node_modules/lodash/_baseEvery.js new file mode 100644 index 0000000..aafa00d --- /dev/null +++ b/www/node_modules/lodash/_baseEvery.js @@ -0,0 +1,20 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false` + */ +function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; +} + +module.exports = baseEvery; diff --git a/www/node_modules/lodash/_baseExtremum.js b/www/node_modules/lodash/_baseExtremum.js new file mode 100644 index 0000000..c6cb804 --- /dev/null +++ b/www/node_modules/lodash/_baseExtremum.js @@ -0,0 +1,30 @@ +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? current === current + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +module.exports = baseExtremum; diff --git a/www/node_modules/lodash/_baseFill.js b/www/node_modules/lodash/_baseFill.js new file mode 100644 index 0000000..46ef9c7 --- /dev/null +++ b/www/node_modules/lodash/_baseFill.js @@ -0,0 +1,32 @@ +var toInteger = require('./toInteger'), + toLength = require('./toLength'); + +/** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ +function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; +} + +module.exports = baseFill; diff --git a/www/node_modules/lodash/_baseFilter.js b/www/node_modules/lodash/_baseFilter.js new file mode 100644 index 0000000..4678477 --- /dev/null +++ b/www/node_modules/lodash/_baseFilter.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +module.exports = baseFilter; diff --git a/www/node_modules/lodash/_baseFind.js b/www/node_modules/lodash/_baseFind.js new file mode 100644 index 0000000..535f7f3 --- /dev/null +++ b/www/node_modules/lodash/_baseFind.js @@ -0,0 +1,24 @@ +/** + * The base implementation of methods like `_.find` and `_.findKey`, without + * support for iteratee shorthands, which iterates over `collection` using + * `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ +function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; +} + +module.exports = baseFind; diff --git a/www/node_modules/lodash/_baseFindIndex.js b/www/node_modules/lodash/_baseFindIndex.js new file mode 100644 index 0000000..61428f6 --- /dev/null +++ b/www/node_modules/lodash/_baseFindIndex.js @@ -0,0 +1,23 @@ +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to search. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +module.exports = baseFindIndex; diff --git a/www/node_modules/lodash/_baseFlatten.js b/www/node_modules/lodash/_baseFlatten.js new file mode 100644 index 0000000..7d024dd --- /dev/null +++ b/www/node_modules/lodash/_baseFlatten.js @@ -0,0 +1,39 @@ +var arrayPush = require('./_arrayPush'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (depth > 0 && isArrayLikeObject(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +module.exports = baseFlatten; diff --git a/www/node_modules/lodash/_baseFor.js b/www/node_modules/lodash/_baseFor.js new file mode 100644 index 0000000..97b70c9 --- /dev/null +++ b/www/node_modules/lodash/_baseFor.js @@ -0,0 +1,17 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; diff --git a/www/node_modules/lodash/_baseForIn.js b/www/node_modules/lodash/_baseForIn.js new file mode 100644 index 0000000..4dcfdaf --- /dev/null +++ b/www/node_modules/lodash/_baseForIn.js @@ -0,0 +1,16 @@ +var baseFor = require('./_baseFor'), + keysIn = require('./keysIn'); + +/** + * The base implementation of `_.forIn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForIn(object, iteratee) { + return object == null ? object : baseFor(object, iteratee, keysIn); +} + +module.exports = baseForIn; diff --git a/www/node_modules/lodash/_baseForOwn.js b/www/node_modules/lodash/_baseForOwn.js new file mode 100644 index 0000000..503d523 --- /dev/null +++ b/www/node_modules/lodash/_baseForOwn.js @@ -0,0 +1,16 @@ +var baseFor = require('./_baseFor'), + keys = require('./keys'); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; diff --git a/www/node_modules/lodash/_baseForOwnRight.js b/www/node_modules/lodash/_baseForOwnRight.js new file mode 100644 index 0000000..a4b10e6 --- /dev/null +++ b/www/node_modules/lodash/_baseForOwnRight.js @@ -0,0 +1,16 @@ +var baseForRight = require('./_baseForRight'), + keys = require('./keys'); + +/** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); +} + +module.exports = baseForOwnRight; diff --git a/www/node_modules/lodash/_baseForRight.js b/www/node_modules/lodash/_baseForRight.js new file mode 100644 index 0000000..32842cd --- /dev/null +++ b/www/node_modules/lodash/_baseForRight.js @@ -0,0 +1,15 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseForRight = createBaseFor(true); + +module.exports = baseForRight; diff --git a/www/node_modules/lodash/_baseFunctions.js b/www/node_modules/lodash/_baseFunctions.js new file mode 100644 index 0000000..6e1090f --- /dev/null +++ b/www/node_modules/lodash/_baseFunctions.js @@ -0,0 +1,19 @@ +var arrayFilter = require('./_arrayFilter'), + isFunction = require('./isFunction'); + +/** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ +function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); +} + +module.exports = baseFunctions; diff --git a/www/node_modules/lodash/_baseGet.js b/www/node_modules/lodash/_baseGet.js new file mode 100644 index 0000000..ef9623a --- /dev/null +++ b/www/node_modules/lodash/_baseGet.js @@ -0,0 +1,24 @@ +var baseCastPath = require('./_baseCastPath'), + isKey = require('./_isKey'); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; diff --git a/www/node_modules/lodash/_baseHas.js b/www/node_modules/lodash/_baseHas.js new file mode 100644 index 0000000..b393206 --- /dev/null +++ b/www/node_modules/lodash/_baseHas.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var getPrototypeOf = Object.getPrototypeOf; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`, + // that are composed entirely of index properties, return `false` for + // `hasOwnProperty` checks of them. + return hasOwnProperty.call(object, key) || + (typeof object == 'object' && key in object && getPrototypeOf(object) === null); +} + +module.exports = baseHas; diff --git a/www/node_modules/lodash/_baseHasIn.js b/www/node_modules/lodash/_baseHasIn.js new file mode 100644 index 0000000..4a36558 --- /dev/null +++ b/www/node_modules/lodash/_baseHasIn.js @@ -0,0 +1,13 @@ +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return key in Object(object); +} + +module.exports = baseHasIn; diff --git a/www/node_modules/lodash/_baseInRange.js b/www/node_modules/lodash/_baseInRange.js new file mode 100644 index 0000000..16d53f2 --- /dev/null +++ b/www/node_modules/lodash/_baseInRange.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * The base implementation of `_.inRange` which doesn't coerce arguments to numbers. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ +function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); +} + +module.exports = baseInRange; diff --git a/www/node_modules/lodash/_baseIndexOf.js b/www/node_modules/lodash/_baseIndexOf.js new file mode 100644 index 0000000..6cda802 --- /dev/null +++ b/www/node_modules/lodash/_baseIndexOf.js @@ -0,0 +1,27 @@ +var indexOfNaN = require('./_indexOfNaN'); + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = baseIndexOf; diff --git a/www/node_modules/lodash/_baseIndexOfWith.js b/www/node_modules/lodash/_baseIndexOfWith.js new file mode 100644 index 0000000..8be568a --- /dev/null +++ b/www/node_modules/lodash/_baseIndexOfWith.js @@ -0,0 +1,23 @@ +/** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; +} + +module.exports = baseIndexOfWith; diff --git a/www/node_modules/lodash/_baseIntersection.js b/www/node_modules/lodash/_baseIntersection.js new file mode 100644 index 0000000..7d12926 --- /dev/null +++ b/www/node_modules/lodash/_baseIntersection.js @@ -0,0 +1,73 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ +function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseIntersection; diff --git a/www/node_modules/lodash/_baseInverter.js b/www/node_modules/lodash/_baseInverter.js new file mode 100644 index 0000000..fbc337f --- /dev/null +++ b/www/node_modules/lodash/_baseInverter.js @@ -0,0 +1,21 @@ +var baseForOwn = require('./_baseForOwn'); + +/** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ +function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; +} + +module.exports = baseInverter; diff --git a/www/node_modules/lodash/_baseInvoke.js b/www/node_modules/lodash/_baseInvoke.js new file mode 100644 index 0000000..7a94a3f --- /dev/null +++ b/www/node_modules/lodash/_baseInvoke.js @@ -0,0 +1,27 @@ +var apply = require('./_apply'), + baseCastPath = require('./_baseCastPath'), + isKey = require('./_isKey'), + last = require('./last'), + parent = require('./_parent'); + +/** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ +function baseInvoke(object, path, args) { + if (!isKey(path, object)) { + path = baseCastPath(path); + object = parent(object, path); + path = last(path); + } + var func = object == null ? object : object[path]; + return func == null ? undefined : apply(func, object, args); +} + +module.exports = baseInvoke; diff --git a/www/node_modules/lodash/_baseIsEqual.js b/www/node_modules/lodash/_baseIsEqual.js new file mode 100644 index 0000000..3772dab --- /dev/null +++ b/www/node_modules/lodash/_baseIsEqual.js @@ -0,0 +1,30 @@ +var baseIsEqualDeep = require('./_baseIsEqualDeep'), + isObject = require('./isObject'), + isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); +} + +module.exports = baseIsEqual; diff --git a/www/node_modules/lodash/_baseIsEqualDeep.js b/www/node_modules/lodash/_baseIsEqualDeep.js new file mode 100644 index 0000000..50bb411 --- /dev/null +++ b/www/node_modules/lodash/_baseIsEqualDeep.js @@ -0,0 +1,78 @@ +var Stack = require('./_Stack'), + equalArrays = require('./_equalArrays'), + equalByTag = require('./_equalByTag'), + equalObjects = require('./_equalObjects'), + getTag = require('./_getTag'), + isArray = require('./isArray'), + isHostObject = require('./_isHostObject'), + isTypedArray = require('./isTypedArray'); + +/** Used to compose bitmasks for comparison styles. */ +var PARTIAL_COMPARE_FLAG = 2; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = getTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = getTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + stack || (stack = new Stack); + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, equalFunc, customizer, bitmask, stack); +} + +module.exports = baseIsEqualDeep; diff --git a/www/node_modules/lodash/_baseIsMatch.js b/www/node_modules/lodash/_baseIsMatch.js new file mode 100644 index 0000000..c1dcafc --- /dev/null +++ b/www/node_modules/lodash/_baseIsMatch.js @@ -0,0 +1,61 @@ +var Stack = require('./_Stack'), + baseIsEqual = require('./_baseIsEqual'); + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack, + result = customizer ? customizer(objValue, srcValue, key, object, source, stack) : undefined; + + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) + : result + )) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; diff --git a/www/node_modules/lodash/_baseIteratee.js b/www/node_modules/lodash/_baseIteratee.js new file mode 100644 index 0000000..19531af --- /dev/null +++ b/www/node_modules/lodash/_baseIteratee.js @@ -0,0 +1,30 @@ +var baseMatches = require('./_baseMatches'), + baseMatchesProperty = require('./_baseMatchesProperty'), + identity = require('./identity'), + isArray = require('./isArray'), + property = require('./property'); + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + var type = typeof value; + if (type == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (type == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +module.exports = baseIteratee; diff --git a/www/node_modules/lodash/_baseKeys.js b/www/node_modules/lodash/_baseKeys.js new file mode 100644 index 0000000..2c8ccb9 --- /dev/null +++ b/www/node_modules/lodash/_baseKeys.js @@ -0,0 +1,16 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = Object.keys; + +/** + * The base implementation of `_.keys` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + return nativeKeys(Object(object)); +} + +module.exports = baseKeys; diff --git a/www/node_modules/lodash/_baseKeysIn.js b/www/node_modules/lodash/_baseKeysIn.js new file mode 100644 index 0000000..7455fd8 --- /dev/null +++ b/www/node_modules/lodash/_baseKeysIn.js @@ -0,0 +1,36 @@ +var Reflect = require('./_Reflect'), + iteratorToArray = require('./_iteratorToArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var enumerate = Reflect ? Reflect.enumerate : undefined, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * The base implementation of `_.keysIn` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + object = object == null ? object : Object(object); + + var result = []; + for (var key in object) { + result.push(key); + } + return result; +} + +// Fallback for IE < 9 with es6-shim. +if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { + baseKeysIn = function(object) { + return iteratorToArray(enumerate(object)); + }; +} + +module.exports = baseKeysIn; diff --git a/www/node_modules/lodash/_baseLodash.js b/www/node_modules/lodash/_baseLodash.js new file mode 100644 index 0000000..15b79d3 --- /dev/null +++ b/www/node_modules/lodash/_baseLodash.js @@ -0,0 +1,10 @@ +/** + * The function whose prototype all chaining wrappers inherit from. + * + * @private + */ +function baseLodash() { + // No operation performed. +} + +module.exports = baseLodash; diff --git a/www/node_modules/lodash/_baseMap.js b/www/node_modules/lodash/_baseMap.js new file mode 100644 index 0000000..0bf5cea --- /dev/null +++ b/www/node_modules/lodash/_baseMap.js @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'), + isArrayLike = require('./isArrayLike'); + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +module.exports = baseMap; diff --git a/www/node_modules/lodash/_baseMatches.js b/www/node_modules/lodash/_baseMatches.js new file mode 100644 index 0000000..56c72e6 --- /dev/null +++ b/www/node_modules/lodash/_baseMatches.js @@ -0,0 +1,30 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && + (value !== undefined || (key in Object(object))); + }; + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +module.exports = baseMatches; diff --git a/www/node_modules/lodash/_baseMatchesProperty.js b/www/node_modules/lodash/_baseMatchesProperty.js new file mode 100644 index 0000000..256ad65 --- /dev/null +++ b/www/node_modules/lodash/_baseMatchesProperty.js @@ -0,0 +1,26 @@ +var baseIsEqual = require('./_baseIsEqual'), + get = require('./get'), + hasIn = require('./hasIn'); + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new function. + */ +function baseMatchesProperty(path, srcValue) { + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); + }; +} + +module.exports = baseMatchesProperty; diff --git a/www/node_modules/lodash/_baseMerge.js b/www/node_modules/lodash/_baseMerge.js new file mode 100644 index 0000000..04cda58 --- /dev/null +++ b/www/node_modules/lodash/_baseMerge.js @@ -0,0 +1,50 @@ +var Stack = require('./_Stack'), + arrayEach = require('./_arrayEach'), + assignMergeValue = require('./_assignMergeValue'), + baseMergeDeep = require('./_baseMergeDeep'), + isArray = require('./isArray'), + isObject = require('./isObject'), + isTypedArray = require('./isTypedArray'), + keysIn = require('./keysIn'); + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + var props = (isArray(source) || isTypedArray(source)) + ? undefined + : keysIn(source); + + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(object[key], srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }); +} + +module.exports = baseMerge; diff --git a/www/node_modules/lodash/_baseMergeDeep.js b/www/node_modules/lodash/_baseMergeDeep.js new file mode 100644 index 0000000..1b8130a --- /dev/null +++ b/www/node_modules/lodash/_baseMergeDeep.js @@ -0,0 +1,82 @@ +var assignMergeValue = require('./_assignMergeValue'), + baseClone = require('./_baseClone'), + copyArray = require('./_copyArray'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLikeObject = require('./isArrayLikeObject'), + isFunction = require('./isFunction'), + isObject = require('./isObject'), + isPlainObject = require('./isPlainObject'), + isTypedArray = require('./isTypedArray'), + toPlainObject = require('./toPlainObject'); + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = object[key], + srcValue = source[key], + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + newValue = srcValue; + if (isArray(srcValue) || isTypedArray(srcValue)) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else { + isCommon = false; + newValue = baseClone(srcValue, !customizer); + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + isCommon = false; + newValue = baseClone(srcValue, !customizer); + } + else { + newValue = objValue; + } + } + else { + isCommon = false; + } + } + stack.set(srcValue, newValue); + + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + } + stack['delete'](srcValue); + assignMergeValue(object, key, newValue); +} + +module.exports = baseMergeDeep; diff --git a/www/node_modules/lodash/_baseOrderBy.js b/www/node_modules/lodash/_baseOrderBy.js new file mode 100644 index 0000000..4dcbe38 --- /dev/null +++ b/www/node_modules/lodash/_baseOrderBy.js @@ -0,0 +1,32 @@ +var arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseMap = require('./_baseMap'), + baseSortBy = require('./_baseSortBy'), + compareMultiple = require('./_compareMultiple'); + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : Array(1), baseIteratee); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); +} + +module.exports = baseOrderBy; diff --git a/www/node_modules/lodash/_basePick.js b/www/node_modules/lodash/_basePick.js new file mode 100644 index 0000000..e2ce722 --- /dev/null +++ b/www/node_modules/lodash/_basePick.js @@ -0,0 +1,22 @@ +var arrayReduce = require('./_arrayReduce'); + +/** + * The base implementation of `_.pick` without support for individual + * property names. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, props) { + object = Object(object); + return arrayReduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); +} + +module.exports = basePick; diff --git a/www/node_modules/lodash/_basePickBy.js b/www/node_modules/lodash/_basePickBy.js new file mode 100644 index 0000000..37c4943 --- /dev/null +++ b/www/node_modules/lodash/_basePickBy.js @@ -0,0 +1,21 @@ +var baseForIn = require('./_baseForIn'); + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, predicate) { + var result = {}; + baseForIn(object, function(value, key) { + if (predicate(value, key)) { + result[key] = value; + } + }); + return result; +} + +module.exports = basePickBy; diff --git a/www/node_modules/lodash/_baseProperty.js b/www/node_modules/lodash/_baseProperty.js new file mode 100644 index 0000000..e515941 --- /dev/null +++ b/www/node_modules/lodash/_baseProperty.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; diff --git a/www/node_modules/lodash/_basePropertyDeep.js b/www/node_modules/lodash/_basePropertyDeep.js new file mode 100644 index 0000000..acc2009 --- /dev/null +++ b/www/node_modules/lodash/_basePropertyDeep.js @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +module.exports = basePropertyDeep; diff --git a/www/node_modules/lodash/_basePullAll.js b/www/node_modules/lodash/_basePullAll.js new file mode 100644 index 0000000..3c07c99 --- /dev/null +++ b/www/node_modules/lodash/_basePullAll.js @@ -0,0 +1,47 @@ +var arrayMap = require('./_arrayMap'), + baseIndexOf = require('./_baseIndexOf'), + baseIndexOfWith = require('./_baseIndexOfWith'), + baseUnary = require('./_baseUnary'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ +function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; +} + +module.exports = basePullAll; diff --git a/www/node_modules/lodash/_basePullAt.js b/www/node_modules/lodash/_basePullAt.js new file mode 100644 index 0000000..eb9ed21 --- /dev/null +++ b/www/node_modules/lodash/_basePullAt.js @@ -0,0 +1,49 @@ +var baseCastPath = require('./_baseCastPath'), + isIndex = require('./_isIndex'), + isKey = require('./_isKey'), + last = require('./last'), + parent = require('./_parent'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ +function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (lastIndex == length || index != previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } + else if (!isKey(index, array)) { + var path = baseCastPath(index), + object = parent(array, path); + + if (object != null) { + delete object[last(path)]; + } + } + else { + delete array[index]; + } + } + } + return array; +} + +module.exports = basePullAt; diff --git a/www/node_modules/lodash/_baseRandom.js b/www/node_modules/lodash/_baseRandom.js new file mode 100644 index 0000000..94f76a7 --- /dev/null +++ b/www/node_modules/lodash/_baseRandom.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +} + +module.exports = baseRandom; diff --git a/www/node_modules/lodash/_baseRange.js b/www/node_modules/lodash/_baseRange.js new file mode 100644 index 0000000..2b39dd4 --- /dev/null +++ b/www/node_modules/lodash/_baseRange.js @@ -0,0 +1,28 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments to numbers. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the new array of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +module.exports = baseRange; diff --git a/www/node_modules/lodash/_baseReduce.js b/www/node_modules/lodash/_baseReduce.js new file mode 100644 index 0000000..6ec5442 --- /dev/null +++ b/www/node_modules/lodash/_baseReduce.js @@ -0,0 +1,22 @@ +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +module.exports = baseReduce; diff --git a/www/node_modules/lodash/_baseSet.js b/www/node_modules/lodash/_baseSet.js new file mode 100644 index 0000000..0596d89 --- /dev/null +++ b/www/node_modules/lodash/_baseSet.js @@ -0,0 +1,45 @@ +var assignValue = require('./_assignValue'), + baseCastPath = require('./_baseCastPath'), + isIndex = require('./_isIndex'), + isKey = require('./_isKey'), + isObject = require('./isObject'); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = path[index]; + if (isObject(nested)) { + var newValue = value; + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = objValue == null + ? (isIndex(path[index + 1]) ? [] : {}) + : objValue; + } + } + assignValue(nested, key, newValue); + } + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; diff --git a/www/node_modules/lodash/_baseSetData.js b/www/node_modules/lodash/_baseSetData.js new file mode 100644 index 0000000..e689df2 --- /dev/null +++ b/www/node_modules/lodash/_baseSetData.js @@ -0,0 +1,17 @@ +var identity = require('./identity'), + metaMap = require('./_metaMap'); + +/** + * The base implementation of `setData` without support for hot loop detection. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; +}; + +module.exports = baseSetData; diff --git a/www/node_modules/lodash/_baseSlice.js b/www/node_modules/lodash/_baseSlice.js new file mode 100644 index 0000000..786f6c9 --- /dev/null +++ b/www/node_modules/lodash/_baseSlice.js @@ -0,0 +1,31 @@ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; diff --git a/www/node_modules/lodash/_baseSome.js b/www/node_modules/lodash/_baseSome.js new file mode 100644 index 0000000..8b6aa0a --- /dev/null +++ b/www/node_modules/lodash/_baseSome.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ +function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; +} + +module.exports = baseSome; diff --git a/www/node_modules/lodash/_baseSortBy.js b/www/node_modules/lodash/_baseSortBy.js new file mode 100644 index 0000000..a25c92e --- /dev/null +++ b/www/node_modules/lodash/_baseSortBy.js @@ -0,0 +1,21 @@ +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +module.exports = baseSortBy; diff --git a/www/node_modules/lodash/_baseSortedIndex.js b/www/node_modules/lodash/_baseSortedIndex.js new file mode 100644 index 0000000..3961063 --- /dev/null +++ b/www/node_modules/lodash/_baseSortedIndex.js @@ -0,0 +1,40 @@ +var baseSortedIndexBy = require('./_baseSortedIndexBy'), + identity = require('./identity'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + +/** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); +} + +module.exports = baseSortedIndex; diff --git a/www/node_modules/lodash/_baseSortedIndexBy.js b/www/node_modules/lodash/_baseSortedIndexBy.js new file mode 100644 index 0000000..6e295f9 --- /dev/null +++ b/www/node_modules/lodash/_baseSortedIndexBy.js @@ -0,0 +1,56 @@ +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeMin = Math.min; + +/** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + */ +function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); +} + +module.exports = baseSortedIndexBy; diff --git a/www/node_modules/lodash/_baseSortedUniq.js b/www/node_modules/lodash/_baseSortedUniq.js new file mode 100644 index 0000000..bf1eb2e --- /dev/null +++ b/www/node_modules/lodash/_baseSortedUniq.js @@ -0,0 +1,14 @@ +var baseSortedUniqBy = require('./_baseSortedUniqBy'); + +/** + * The base implementation of `_.sortedUniq`. + * + * @private + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + */ +function baseSortedUniq(array) { + return baseSortedUniqBy(array); +} + +module.exports = baseSortedUniq; diff --git a/www/node_modules/lodash/_baseSortedUniqBy.js b/www/node_modules/lodash/_baseSortedUniqBy.js new file mode 100644 index 0000000..81e7ae1 --- /dev/null +++ b/www/node_modules/lodash/_baseSortedUniqBy.js @@ -0,0 +1,33 @@ +var eq = require('./eq'); + +/** + * The base implementation of `_.sortedUniqBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseSortedUniqBy(array, iteratee) { + var index = 0, + length = array.length, + value = array[0], + computed = iteratee ? iteratee(value) : value, + seen = computed, + resIndex = 1, + result = [value]; + + while (++index < length) { + value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!eq(computed, seen)) { + seen = computed; + result[resIndex++] = value; + } + } + return result; +} + +module.exports = baseSortedUniqBy; diff --git a/www/node_modules/lodash/_baseSum.js b/www/node_modules/lodash/_baseSum.js new file mode 100644 index 0000000..348b5e8 --- /dev/null +++ b/www/node_modules/lodash/_baseSum.js @@ -0,0 +1,23 @@ +/** + * The base implementation of `_.sum` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ +function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; +} + +module.exports = baseSum; diff --git a/www/node_modules/lodash/_baseTimes.js b/www/node_modules/lodash/_baseTimes.js new file mode 100644 index 0000000..0603fc3 --- /dev/null +++ b/www/node_modules/lodash/_baseTimes.js @@ -0,0 +1,20 @@ +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +module.exports = baseTimes; diff --git a/www/node_modules/lodash/_baseToPairs.js b/www/node_modules/lodash/_baseToPairs.js new file mode 100644 index 0000000..d80b402 --- /dev/null +++ b/www/node_modules/lodash/_baseToPairs.js @@ -0,0 +1,18 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the new array of key-value pairs. + */ +function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); +} + +module.exports = baseToPairs; diff --git a/www/node_modules/lodash/_baseUnary.js b/www/node_modules/lodash/_baseUnary.js new file mode 100644 index 0000000..e584a99 --- /dev/null +++ b/www/node_modules/lodash/_baseUnary.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.unary` without support for storing wrapper metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +module.exports = baseUnary; diff --git a/www/node_modules/lodash/_baseUniq.js b/www/node_modules/lodash/_baseUniq.js new file mode 100644 index 0000000..ecb6fe4 --- /dev/null +++ b/www/node_modules/lodash/_baseUniq.js @@ -0,0 +1,71 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + cacheHas = require('./_cacheHas'), + createSet = require('./_createSet'), + setToArray = require('./_setToArray'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseUniq; diff --git a/www/node_modules/lodash/_baseUnset.js b/www/node_modules/lodash/_baseUnset.js new file mode 100644 index 0000000..02b5640 --- /dev/null +++ b/www/node_modules/lodash/_baseUnset.js @@ -0,0 +1,22 @@ +var baseCastPath = require('./_baseCastPath'), + has = require('./has'), + isKey = require('./_isKey'), + last = require('./last'), + parent = require('./_parent'); + +/** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ +function baseUnset(object, path) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + object = parent(object, path); + var key = last(path); + return (object != null && has(object, key)) ? delete object[key] : true; +} + +module.exports = baseUnset; diff --git a/www/node_modules/lodash/_baseUpdate.js b/www/node_modules/lodash/_baseUpdate.js new file mode 100644 index 0000000..ec1b338 --- /dev/null +++ b/www/node_modules/lodash/_baseUpdate.js @@ -0,0 +1,18 @@ +var baseGet = require('./_baseGet'), + baseSet = require('./_baseSet'); + +/** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); +} + +module.exports = baseUpdate; diff --git a/www/node_modules/lodash/_baseValues.js b/www/node_modules/lodash/_baseValues.js new file mode 100644 index 0000000..b95faad --- /dev/null +++ b/www/node_modules/lodash/_baseValues.js @@ -0,0 +1,19 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +module.exports = baseValues; diff --git a/www/node_modules/lodash/_baseWhile.js b/www/node_modules/lodash/_baseWhile.js new file mode 100644 index 0000000..07eac61 --- /dev/null +++ b/www/node_modules/lodash/_baseWhile.js @@ -0,0 +1,26 @@ +var baseSlice = require('./_baseSlice'); + +/** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ +function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +} + +module.exports = baseWhile; diff --git a/www/node_modules/lodash/_baseWrapperValue.js b/www/node_modules/lodash/_baseWrapperValue.js new file mode 100644 index 0000000..443e0df --- /dev/null +++ b/www/node_modules/lodash/_baseWrapperValue.js @@ -0,0 +1,25 @@ +var LazyWrapper = require('./_LazyWrapper'), + arrayPush = require('./_arrayPush'), + arrayReduce = require('./_arrayReduce'); + +/** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ +function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); +} + +module.exports = baseWrapperValue; diff --git a/www/node_modules/lodash/_baseXor.js b/www/node_modules/lodash/_baseXor.js new file mode 100644 index 0000000..7e62d1b --- /dev/null +++ b/www/node_modules/lodash/_baseXor.js @@ -0,0 +1,30 @@ +var arrayPush = require('./_arrayPush'), + baseDifference = require('./_baseDifference'), + baseUniq = require('./_baseUniq'); + +/** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ +function baseXor(arrays, iteratee, comparator) { + var index = -1, + length = arrays.length; + + while (++index < length) { + var result = result + ? arrayPush( + baseDifference(result, arrays[index], iteratee, comparator), + baseDifference(arrays[index], result, iteratee, comparator) + ) + : arrays[index]; + } + return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; +} + +module.exports = baseXor; diff --git a/www/node_modules/lodash/_baseZipObject.js b/www/node_modules/lodash/_baseZipObject.js new file mode 100644 index 0000000..c8a3e83 --- /dev/null +++ b/www/node_modules/lodash/_baseZipObject.js @@ -0,0 +1,22 @@ +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property names. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + assignFunc(result, props[index], index < valsLength ? values[index] : undefined); + } + return result; +} + +module.exports = baseZipObject; diff --git a/www/node_modules/lodash/_cacheHas.js b/www/node_modules/lodash/_cacheHas.js new file mode 100644 index 0000000..7f2ac48 --- /dev/null +++ b/www/node_modules/lodash/_cacheHas.js @@ -0,0 +1,25 @@ +var isKeyable = require('./_isKeyable'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Checks if `value` is in `cache`. + * + * @private + * @param {Object} cache The set cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function cacheHas(cache, value) { + var map = cache.__data__; + if (isKeyable(value)) { + var data = map.__data__, + hash = typeof value == 'string' ? data.string : data.hash; + + return hash[value] === HASH_UNDEFINED; + } + return map.has(value); +} + +module.exports = cacheHas; diff --git a/www/node_modules/lodash/_cachePush.js b/www/node_modules/lodash/_cachePush.js new file mode 100644 index 0000000..638383b --- /dev/null +++ b/www/node_modules/lodash/_cachePush.js @@ -0,0 +1,27 @@ +var isKeyable = require('./_isKeyable'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the set cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ +function cachePush(value) { + var map = this.__data__; + if (isKeyable(value)) { + var data = map.__data__, + hash = typeof value == 'string' ? data.string : data.hash; + + hash[value] = HASH_UNDEFINED; + } + else { + map.set(value, HASH_UNDEFINED); + } +} + +module.exports = cachePush; diff --git a/www/node_modules/lodash/_charsEndIndex.js b/www/node_modules/lodash/_charsEndIndex.js new file mode 100644 index 0000000..07908ff --- /dev/null +++ b/www/node_modules/lodash/_charsEndIndex.js @@ -0,0 +1,19 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ +function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsEndIndex; diff --git a/www/node_modules/lodash/_charsStartIndex.js b/www/node_modules/lodash/_charsStartIndex.js new file mode 100644 index 0000000..b17afd2 --- /dev/null +++ b/www/node_modules/lodash/_charsStartIndex.js @@ -0,0 +1,20 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ +function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsStartIndex; diff --git a/www/node_modules/lodash/_checkGlobal.js b/www/node_modules/lodash/_checkGlobal.js new file mode 100644 index 0000000..b0ea47e --- /dev/null +++ b/www/node_modules/lodash/_checkGlobal.js @@ -0,0 +1,12 @@ +/** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ +function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; +} + +module.exports = checkGlobal; diff --git a/www/node_modules/lodash/_cloneArrayBuffer.js b/www/node_modules/lodash/_cloneArrayBuffer.js new file mode 100644 index 0000000..c3d8f6e --- /dev/null +++ b/www/node_modules/lodash/_cloneArrayBuffer.js @@ -0,0 +1,16 @@ +var Uint8Array = require('./_Uint8Array'); + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} + +module.exports = cloneArrayBuffer; diff --git a/www/node_modules/lodash/_cloneBuffer.js b/www/node_modules/lodash/_cloneBuffer.js new file mode 100644 index 0000000..247d410 --- /dev/null +++ b/www/node_modules/lodash/_cloneBuffer.js @@ -0,0 +1,18 @@ +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var result = new buffer.constructor(buffer.length); + buffer.copy(result); + return result; +} + +module.exports = cloneBuffer; diff --git a/www/node_modules/lodash/_cloneMap.js b/www/node_modules/lodash/_cloneMap.js new file mode 100644 index 0000000..a42cbf3 --- /dev/null +++ b/www/node_modules/lodash/_cloneMap.js @@ -0,0 +1,16 @@ +var addMapEntry = require('./_addMapEntry'), + arrayReduce = require('./_arrayReduce'), + mapToArray = require('./_mapToArray'); + +/** + * Creates a clone of `map`. + * + * @private + * @param {Object} map The map to clone. + * @returns {Object} Returns the cloned map. + */ +function cloneMap(map) { + return arrayReduce(mapToArray(map), addMapEntry, new map.constructor); +} + +module.exports = cloneMap; diff --git a/www/node_modules/lodash/_cloneRegExp.js b/www/node_modules/lodash/_cloneRegExp.js new file mode 100644 index 0000000..64a30df --- /dev/null +++ b/www/node_modules/lodash/_cloneRegExp.js @@ -0,0 +1,17 @@ +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +module.exports = cloneRegExp; diff --git a/www/node_modules/lodash/_cloneSet.js b/www/node_modules/lodash/_cloneSet.js new file mode 100644 index 0000000..0575c0a --- /dev/null +++ b/www/node_modules/lodash/_cloneSet.js @@ -0,0 +1,16 @@ +var addSetEntry = require('./_addSetEntry'), + arrayReduce = require('./_arrayReduce'), + setToArray = require('./_setToArray'); + +/** + * Creates a clone of `set`. + * + * @private + * @param {Object} set The set to clone. + * @returns {Object} Returns the cloned set. + */ +function cloneSet(set) { + return arrayReduce(setToArray(set), addSetEntry, new set.constructor); +} + +module.exports = cloneSet; diff --git a/www/node_modules/lodash/_cloneSymbol.js b/www/node_modules/lodash/_cloneSymbol.js new file mode 100644 index 0000000..bede39f --- /dev/null +++ b/www/node_modules/lodash/_cloneSymbol.js @@ -0,0 +1,18 @@ +var Symbol = require('./_Symbol'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +module.exports = cloneSymbol; diff --git a/www/node_modules/lodash/_cloneTypedArray.js b/www/node_modules/lodash/_cloneTypedArray.js new file mode 100644 index 0000000..7aad84d --- /dev/null +++ b/www/node_modules/lodash/_cloneTypedArray.js @@ -0,0 +1,16 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'); + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +module.exports = cloneTypedArray; diff --git a/www/node_modules/lodash/_compareAscending.js b/www/node_modules/lodash/_compareAscending.js new file mode 100644 index 0000000..532866c --- /dev/null +++ b/www/node_modules/lodash/_compareAscending.js @@ -0,0 +1,33 @@ +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; +} + +module.exports = compareAscending; diff --git a/www/node_modules/lodash/_compareMultiple.js b/www/node_modules/lodash/_compareMultiple.js new file mode 100644 index 0000000..a3f2d8b --- /dev/null +++ b/www/node_modules/lodash/_compareMultiple.js @@ -0,0 +1,44 @@ +var compareAscending = require('./_compareAscending'); + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://code.google.com/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +module.exports = compareMultiple; diff --git a/www/node_modules/lodash/_composeArgs.js b/www/node_modules/lodash/_composeArgs.js new file mode 100644 index 0000000..07398e7 --- /dev/null +++ b/www/node_modules/lodash/_composeArgs.js @@ -0,0 +1,39 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; +} + +module.exports = composeArgs; diff --git a/www/node_modules/lodash/_composeArgsRight.js b/www/node_modules/lodash/_composeArgsRight.js new file mode 100644 index 0000000..18cfae0 --- /dev/null +++ b/www/node_modules/lodash/_composeArgsRight.js @@ -0,0 +1,41 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; +} + +module.exports = composeArgsRight; diff --git a/www/node_modules/lodash/_copyArray.js b/www/node_modules/lodash/_copyArray.js new file mode 100644 index 0000000..cd94d5d --- /dev/null +++ b/www/node_modules/lodash/_copyArray.js @@ -0,0 +1,20 @@ +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; diff --git a/www/node_modules/lodash/_copyObject.js b/www/node_modules/lodash/_copyObject.js new file mode 100644 index 0000000..f8406b6 --- /dev/null +++ b/www/node_modules/lodash/_copyObject.js @@ -0,0 +1,16 @@ +var copyObjectWith = require('./_copyObjectWith'); + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object) { + return copyObjectWith(source, props, object); +} + +module.exports = copyObject; diff --git a/www/node_modules/lodash/_copyObjectWith.js b/www/node_modules/lodash/_copyObjectWith.js new file mode 100644 index 0000000..c4c1f45 --- /dev/null +++ b/www/node_modules/lodash/_copyObjectWith.js @@ -0,0 +1,32 @@ +var assignValue = require('./_assignValue'); + +/** + * This function is like `copyObject` except that it accepts a function to + * customize copied values. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObjectWith(source, props, object, customizer) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : source[key]; + + assignValue(object, key, newValue); + } + return object; +} + +module.exports = copyObjectWith; diff --git a/www/node_modules/lodash/_copySymbols.js b/www/node_modules/lodash/_copySymbols.js new file mode 100644 index 0000000..1fac3c8 --- /dev/null +++ b/www/node_modules/lodash/_copySymbols.js @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), + getSymbols = require('./_getSymbols'); + +/** + * Copies own symbol properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); +} + +module.exports = copySymbols; diff --git a/www/node_modules/lodash/_countHolders.js b/www/node_modules/lodash/_countHolders.js new file mode 100644 index 0000000..8cc95e6 --- /dev/null +++ b/www/node_modules/lodash/_countHolders.js @@ -0,0 +1,21 @@ +/** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ +function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + result++; + } + } + return result; +} + +module.exports = countHolders; diff --git a/www/node_modules/lodash/_createAggregator.js b/www/node_modules/lodash/_createAggregator.js new file mode 100644 index 0000000..7f7afd2 --- /dev/null +++ b/www/node_modules/lodash/_createAggregator.js @@ -0,0 +1,23 @@ +var arrayAggregator = require('./_arrayAggregator'), + baseAggregator = require('./_baseAggregator'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, baseIteratee(iteratee), accumulator); + }; +} + +module.exports = createAggregator; diff --git a/www/node_modules/lodash/_createAssigner.js b/www/node_modules/lodash/_createAssigner.js new file mode 100644 index 0000000..1e81db9 --- /dev/null +++ b/www/node_modules/lodash/_createAssigner.js @@ -0,0 +1,37 @@ +var isIterateeCall = require('./_isIterateeCall'), + rest = require('./rest'); + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return rest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = typeof customizer == 'function' + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; diff --git a/www/node_modules/lodash/_createBaseEach.js b/www/node_modules/lodash/_createBaseEach.js new file mode 100644 index 0000000..d24fdd1 --- /dev/null +++ b/www/node_modules/lodash/_createBaseEach.js @@ -0,0 +1,32 @@ +var isArrayLike = require('./isArrayLike'); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +module.exports = createBaseEach; diff --git a/www/node_modules/lodash/_createBaseFor.js b/www/node_modules/lodash/_createBaseFor.js new file mode 100644 index 0000000..bc84c03 --- /dev/null +++ b/www/node_modules/lodash/_createBaseFor.js @@ -0,0 +1,25 @@ +/** + * Creates a base function for methods like `_.forIn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; diff --git a/www/node_modules/lodash/_createBaseWrapper.js b/www/node_modules/lodash/_createBaseWrapper.js new file mode 100644 index 0000000..fd3bb9a --- /dev/null +++ b/www/node_modules/lodash/_createBaseWrapper.js @@ -0,0 +1,28 @@ +var createCtorWrapper = require('./_createCtorWrapper'), + root = require('./_root'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createBaseWrapper(func, bitmask, thisArg) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; +} + +module.exports = createBaseWrapper; diff --git a/www/node_modules/lodash/_createCaseFirst.js b/www/node_modules/lodash/_createCaseFirst.js new file mode 100644 index 0000000..a6f7054 --- /dev/null +++ b/www/node_modules/lodash/_createCaseFirst.js @@ -0,0 +1,38 @@ +var stringToArray = require('./_stringToArray'), + toString = require('./toString'); + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = reHasComplexSymbol.test(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols ? strSymbols[0] : string.charAt(0), + trailing = strSymbols ? strSymbols.slice(1).join('') : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +module.exports = createCaseFirst; diff --git a/www/node_modules/lodash/_createCompounder.js b/www/node_modules/lodash/_createCompounder.js new file mode 100644 index 0000000..bfa4ee5 --- /dev/null +++ b/www/node_modules/lodash/_createCompounder.js @@ -0,0 +1,18 @@ +var arrayReduce = require('./_arrayReduce'), + deburr = require('./deburr'), + words = require('./words'); + +/** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string)), callback, ''); + }; +} + +module.exports = createCompounder; diff --git a/www/node_modules/lodash/_createCtorWrapper.js b/www/node_modules/lodash/_createCtorWrapper.js new file mode 100644 index 0000000..a0a7f83 --- /dev/null +++ b/www/node_modules/lodash/_createCtorWrapper.js @@ -0,0 +1,37 @@ +var baseCreate = require('./_baseCreate'), + isObject = require('./isObject'); + +/** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ +function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; +} + +module.exports = createCtorWrapper; diff --git a/www/node_modules/lodash/_createCurryWrapper.js b/www/node_modules/lodash/_createCurryWrapper.js new file mode 100644 index 0000000..af6f320 --- /dev/null +++ b/www/node_modules/lodash/_createCurryWrapper.js @@ -0,0 +1,46 @@ +var apply = require('./_apply'), + createCtorWrapper = require('./_createCtorWrapper'), + createHybridWrapper = require('./_createHybridWrapper'), + createRecurryWrapper = require('./_createRecurryWrapper'), + getPlaceholder = require('./_getPlaceholder'), + replaceHolders = require('./_replaceHolders'), + root = require('./_root'); + +/** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createCurryWrapper(func, bitmask, arity) { + var Ctor = createCtorWrapper(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getPlaceholder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurryWrapper( + func, bitmask, createHybridWrapper, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; +} + +module.exports = createCurryWrapper; diff --git a/www/node_modules/lodash/_createFlow.js b/www/node_modules/lodash/_createFlow.js new file mode 100644 index 0000000..8a5e60d --- /dev/null +++ b/www/node_modules/lodash/_createFlow.js @@ -0,0 +1,83 @@ +var LodashWrapper = require('./_LodashWrapper'), + baseFlatten = require('./_baseFlatten'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + isArray = require('./isArray'), + isLaziable = require('./_isLaziable'), + rest = require('./rest'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_FLAG = 8, + PARTIAL_FLAG = 32, + ARY_FLAG = 128, + REARG_FLAG = 256; + +/** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ +function createFlow(fromRight) { + return rest(function(funcs) { + funcs = baseFlatten(funcs, 1); + + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && + isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); +} + +module.exports = createFlow; diff --git a/www/node_modules/lodash/_createHybridWrapper.js b/www/node_modules/lodash/_createHybridWrapper.js new file mode 100644 index 0000000..eaf8c81 --- /dev/null +++ b/www/node_modules/lodash/_createHybridWrapper.js @@ -0,0 +1,90 @@ +var composeArgs = require('./_composeArgs'), + composeArgsRight = require('./_composeArgsRight'), + countHolders = require('./_countHolders'), + createCtorWrapper = require('./_createCtorWrapper'), + createRecurryWrapper = require('./_createRecurryWrapper'), + getPlaceholder = require('./_getPlaceholder'), + reorder = require('./_reorder'), + replaceHolders = require('./_replaceHolders'), + root = require('./_root'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + ARY_FLAG = 128, + FLIP_FLAG = 512; + +/** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), + isFlip = bitmask & FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func); + + function wrapper() { + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getPlaceholder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurryWrapper( + func, bitmask, createHybridWrapper, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; +} + +module.exports = createHybridWrapper; diff --git a/www/node_modules/lodash/_createInverter.js b/www/node_modules/lodash/_createInverter.js new file mode 100644 index 0000000..6c0c562 --- /dev/null +++ b/www/node_modules/lodash/_createInverter.js @@ -0,0 +1,17 @@ +var baseInverter = require('./_baseInverter'); + +/** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ +function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; +} + +module.exports = createInverter; diff --git a/www/node_modules/lodash/_createOver.js b/www/node_modules/lodash/_createOver.js new file mode 100644 index 0000000..f0a99c3 --- /dev/null +++ b/www/node_modules/lodash/_createOver.js @@ -0,0 +1,26 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseFlatten = require('./_baseFlatten'), + baseIteratee = require('./_baseIteratee'), + rest = require('./rest'); + +/** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new invoker function. + */ +function createOver(arrayFunc) { + return rest(function(iteratees) { + iteratees = arrayMap(baseFlatten(iteratees, 1), baseIteratee); + return rest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); +} + +module.exports = createOver; diff --git a/www/node_modules/lodash/_createPadding.js b/www/node_modules/lodash/_createPadding.js new file mode 100644 index 0000000..e59cc52 --- /dev/null +++ b/www/node_modules/lodash/_createPadding.js @@ -0,0 +1,47 @@ +var repeat = require('./repeat'), + stringSize = require('./_stringSize'), + stringToArray = require('./_stringToArray'), + toInteger = require('./toInteger'); + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil; + +/** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {string} string The string to create padding for. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ +function createPadding(string, length, chars) { + length = toInteger(length); + + var strLength = stringSize(string); + if (!length || strLength >= length) { + return ''; + } + var padLength = length - strLength; + chars = chars === undefined ? ' ' : (chars + ''); + + var result = repeat(chars, nativeCeil(padLength / stringSize(chars))); + return reHasComplexSymbol.test(chars) + ? stringToArray(result).slice(0, padLength).join('') + : result.slice(0, padLength); +} + +module.exports = createPadding; diff --git a/www/node_modules/lodash/_createPartialWrapper.js b/www/node_modules/lodash/_createPartialWrapper.js new file mode 100644 index 0000000..1fc3a9b --- /dev/null +++ b/www/node_modules/lodash/_createPartialWrapper.js @@ -0,0 +1,43 @@ +var apply = require('./_apply'), + createCtorWrapper = require('./_createCtorWrapper'), + root = require('./_root'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new wrapped function. + */ +function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; +} + +module.exports = createPartialWrapper; diff --git a/www/node_modules/lodash/_createRange.js b/www/node_modules/lodash/_createRange.js new file mode 100644 index 0000000..9728563 --- /dev/null +++ b/www/node_modules/lodash/_createRange.js @@ -0,0 +1,31 @@ +var baseRange = require('./_baseRange'), + isIterateeCall = require('./_isIterateeCall'), + toNumber = require('./toNumber'); + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toNumber(start); + start = start === start ? start : 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = toNumber(end) || 0; + } + step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0); + return baseRange(start, end, step, fromRight); + }; +} + +module.exports = createRange; diff --git a/www/node_modules/lodash/_createRecurryWrapper.js b/www/node_modules/lodash/_createRecurryWrapper.js new file mode 100644 index 0000000..027424e --- /dev/null +++ b/www/node_modules/lodash/_createRecurryWrapper.js @@ -0,0 +1,56 @@ +var copyArray = require('./_copyArray'), + isLaziable = require('./_isLaziable'), + setData = require('./_setData'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64; + +/** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & CURRY_FLAG, + newArgPos = argPos ? copyArray(argPos) : undefined, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!(bitmask & CURRY_BOUND_FLAG)) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, newArgPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; +} + +module.exports = createRecurryWrapper; diff --git a/www/node_modules/lodash/_createRound.js b/www/node_modules/lodash/_createRound.js new file mode 100644 index 0000000..cb42ba2 --- /dev/null +++ b/www/node_modules/lodash/_createRound.js @@ -0,0 +1,30 @@ +var toInteger = require('./toInteger'), + toNumber = require('./toNumber'), + toString = require('./toString'); + +/** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ +function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = toInteger(precision); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; +} + +module.exports = createRound; diff --git a/www/node_modules/lodash/_createSet.js b/www/node_modules/lodash/_createSet.js new file mode 100644 index 0000000..c67128f --- /dev/null +++ b/www/node_modules/lodash/_createSet.js @@ -0,0 +1,15 @@ +var Set = require('./_Set'), + noop = require('./noop'); + +/** + * Creates a set of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && new Set([1, 2]).size === 2) ? noop : function(values) { + return new Set(values); +}; + +module.exports = createSet; diff --git a/www/node_modules/lodash/_createWrapper.js b/www/node_modules/lodash/_createWrapper.js new file mode 100644 index 0000000..7b573b2 --- /dev/null +++ b/www/node_modules/lodash/_createWrapper.js @@ -0,0 +1,105 @@ +var baseSetData = require('./_baseSetData'), + createBaseWrapper = require('./_createBaseWrapper'), + createCurryWrapper = require('./_createCurryWrapper'), + createHybridWrapper = require('./_createHybridWrapper'), + createPartialWrapper = require('./_createPartialWrapper'), + getData = require('./_getData'), + mergeData = require('./_mergeData'), + setData = require('./_setData'), + toInteger = require('./toInteger'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask of wrapper flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] == null + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { + bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == BIND_FLAG) { + var result = createBaseWrapper(func, bitmask, thisArg); + } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { + result = createCurryWrapper(func, bitmask, arity); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { + result = createPartialWrapper(func, bitmask, thisArg, partials); + } else { + result = createHybridWrapper.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setter(result, newData); +} + +module.exports = createWrapper; diff --git a/www/node_modules/lodash/_deburrLetter.js b/www/node_modules/lodash/_deburrLetter.js new file mode 100644 index 0000000..e559dbe --- /dev/null +++ b/www/node_modules/lodash/_deburrLetter.js @@ -0,0 +1,33 @@ +/** Used to map latin-1 supplementary letters to basic latin letters. */ +var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' +}; + +/** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +function deburrLetter(letter) { + return deburredLetters[letter]; +} + +module.exports = deburrLetter; diff --git a/www/node_modules/lodash/_equalArrays.js b/www/node_modules/lodash/_equalArrays.js new file mode 100644 index 0000000..eb39015 --- /dev/null +++ b/www/node_modules/lodash/_equalArrays.js @@ -0,0 +1,72 @@ +var arraySome = require('./_arraySome'); + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var index = -1, + isPartial = bitmask & PARTIAL_COMPARE_FLAG, + isUnordered = bitmask & UNORDERED_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked) { + return stacked == other; + } + var result = true; + stack.set(array, other); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isUnordered) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack); + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + result = false; + break; + } + } + stack['delete'](array); + return result; +} + +module.exports = equalArrays; diff --git a/www/node_modules/lodash/_equalByTag.js b/www/node_modules/lodash/_equalByTag.js new file mode 100644 index 0000000..15b3860 --- /dev/null +++ b/www/node_modules/lodash/_equalByTag.js @@ -0,0 +1,99 @@ +var Symbol = require('./_Symbol'), + Uint8Array = require('./_Uint8Array'), + equalArrays = require('./_equalArrays'), + mapToArray = require('./_mapToArray'), + setToArray = require('./_setToArray'); + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) ? other != +other : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + // Recursively compare objects (susceptible to call stack limits). + return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask | UNORDERED_COMPARE_FLAG, stack.set(object, other)); + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +module.exports = equalByTag; diff --git a/www/node_modules/lodash/_equalObjects.js b/www/node_modules/lodash/_equalObjects.js new file mode 100644 index 0000000..103f435 --- /dev/null +++ b/www/node_modules/lodash/_equalObjects.js @@ -0,0 +1,82 @@ +var baseHas = require('./_baseHas'), + keys = require('./keys'); + +/** Used to compose bitmasks for comparison styles. */ +var PARTIAL_COMPARE_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : baseHas(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + var result = true; + stack.set(object, other); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + return result; +} + +module.exports = equalObjects; diff --git a/www/node_modules/lodash/_escapeHtmlChar.js b/www/node_modules/lodash/_escapeHtmlChar.js new file mode 100644 index 0000000..b21e452 --- /dev/null +++ b/www/node_modules/lodash/_escapeHtmlChar.js @@ -0,0 +1,22 @@ +/** Used to map characters to HTML entities. */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' +}; + +/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeHtmlChar(chr) { + return htmlEscapes[chr]; +} + +module.exports = escapeHtmlChar; diff --git a/www/node_modules/lodash/_escapeStringChar.js b/www/node_modules/lodash/_escapeStringChar.js new file mode 100644 index 0000000..44eca96 --- /dev/null +++ b/www/node_modules/lodash/_escapeStringChar.js @@ -0,0 +1,22 @@ +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; +} + +module.exports = escapeStringChar; diff --git a/www/node_modules/lodash/_getData.js b/www/node_modules/lodash/_getData.js new file mode 100644 index 0000000..a1fe7b7 --- /dev/null +++ b/www/node_modules/lodash/_getData.js @@ -0,0 +1,15 @@ +var metaMap = require('./_metaMap'), + noop = require('./noop'); + +/** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ +var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); +}; + +module.exports = getData; diff --git a/www/node_modules/lodash/_getFuncName.js b/www/node_modules/lodash/_getFuncName.js new file mode 100644 index 0000000..21e15b3 --- /dev/null +++ b/www/node_modules/lodash/_getFuncName.js @@ -0,0 +1,31 @@ +var realNames = require('./_realNames'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ +function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; +} + +module.exports = getFuncName; diff --git a/www/node_modules/lodash/_getLength.js b/www/node_modules/lodash/_getLength.js new file mode 100644 index 0000000..1848d49 --- /dev/null +++ b/www/node_modules/lodash/_getLength.js @@ -0,0 +1,15 @@ +var baseProperty = require('./_baseProperty'); + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +module.exports = getLength; diff --git a/www/node_modules/lodash/_getMatchData.js b/www/node_modules/lodash/_getMatchData.js new file mode 100644 index 0000000..a1456d2 --- /dev/null +++ b/www/node_modules/lodash/_getMatchData.js @@ -0,0 +1,21 @@ +var isStrictComparable = require('./_isStrictComparable'), + toPairs = require('./toPairs'); + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = toPairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; +} + +module.exports = getMatchData; diff --git a/www/node_modules/lodash/_getNative.js b/www/node_modules/lodash/_getNative.js new file mode 100644 index 0000000..f6ff7f1 --- /dev/null +++ b/www/node_modules/lodash/_getNative.js @@ -0,0 +1,16 @@ +var isNative = require('./isNative'); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object[key]; + return isNative(value) ? value : undefined; +} + +module.exports = getNative; diff --git a/www/node_modules/lodash/_getPlaceholder.js b/www/node_modules/lodash/_getPlaceholder.js new file mode 100644 index 0000000..4bbcda2 --- /dev/null +++ b/www/node_modules/lodash/_getPlaceholder.js @@ -0,0 +1,13 @@ +/** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ +function getPlaceholder(func) { + var object = func; + return object.placeholder; +} + +module.exports = getPlaceholder; diff --git a/www/node_modules/lodash/_getSymbols.js b/www/node_modules/lodash/_getSymbols.js new file mode 100644 index 0000000..266906a --- /dev/null +++ b/www/node_modules/lodash/_getSymbols.js @@ -0,0 +1,15 @@ +/** Built-in value references. */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own symbol properties of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = getOwnPropertySymbols || function() { + return []; +}; + +module.exports = getSymbols; diff --git a/www/node_modules/lodash/_getTag.js b/www/node_modules/lodash/_getTag.js new file mode 100644 index 0000000..1516eca --- /dev/null +++ b/www/node_modules/lodash/_getTag.js @@ -0,0 +1,59 @@ +var Map = require('./_Map'), + Set = require('./_Set'), + WeakMap = require('./_WeakMap'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = Function.prototype.toString; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect maps, sets, and weakmaps. */ +var mapCtorString = Map ? funcToString.call(Map) : '', + setCtorString = Set ? funcToString.call(Set) : '', + weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : ''; + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function getTag(value) { + return objectToString.call(value); +} + +// Fallback for IE 11 providing `toStringTag` values for maps, sets, and weakmaps. +if ((Map && getTag(new Map) != mapTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = objectToString.call(value), + Ctor = result == objectTag ? value.constructor : null, + ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case mapCtorString: return mapTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +module.exports = getTag; diff --git a/www/node_modules/lodash/_getView.js b/www/node_modules/lodash/_getView.js new file mode 100644 index 0000000..df1e5d4 --- /dev/null +++ b/www/node_modules/lodash/_getView.js @@ -0,0 +1,33 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ +function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; +} + +module.exports = getView; diff --git a/www/node_modules/lodash/_hasPath.js b/www/node_modules/lodash/_hasPath.js new file mode 100644 index 0000000..ed4f1a1 --- /dev/null +++ b/www/node_modules/lodash/_hasPath.js @@ -0,0 +1,40 @@ +var baseCastPath = require('./_baseCastPath'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isIndex = require('./_isIndex'), + isKey = require('./_isKey'), + isLength = require('./isLength'), + isString = require('./isString'), + last = require('./last'), + parent = require('./_parent'); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + if (object == null) { + return false; + } + var result = hasFunc(object, path); + if (!result && !isKey(path)) { + path = baseCastPath(path); + object = parent(object, path); + if (object != null) { + path = last(path); + result = hasFunc(object, path); + } + } + var length = object ? object.length : undefined; + return result || ( + !!length && isLength(length) && isIndex(path, length) && + (isArray(object) || isString(object) || isArguments(object)) + ); +} + +module.exports = hasPath; diff --git a/www/node_modules/lodash/_hashDelete.js b/www/node_modules/lodash/_hashDelete.js new file mode 100644 index 0000000..b562317 --- /dev/null +++ b/www/node_modules/lodash/_hashDelete.js @@ -0,0 +1,15 @@ +var hashHas = require('./_hashHas'); + +/** + * Removes `key` and its value from the hash. + * + * @private + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(hash, key) { + return hashHas(hash, key) && delete hash[key]; +} + +module.exports = hashDelete; diff --git a/www/node_modules/lodash/_hashGet.js b/www/node_modules/lodash/_hashGet.js new file mode 100644 index 0000000..ba509b6 --- /dev/null +++ b/www/node_modules/lodash/_hashGet.js @@ -0,0 +1,28 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @param {Object} hash The hash to query. + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(hash, key) { + if (nativeCreate) { + var result = hash[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(hash, key) ? hash[key] : undefined; +} + +module.exports = hashGet; diff --git a/www/node_modules/lodash/_hashHas.js b/www/node_modules/lodash/_hashHas.js new file mode 100644 index 0000000..3bbff48 --- /dev/null +++ b/www/node_modules/lodash/_hashHas.js @@ -0,0 +1,21 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @param {Object} hash The hash to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(hash, key) { + return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key); +} + +module.exports = hashHas; diff --git a/www/node_modules/lodash/_hashSet.js b/www/node_modules/lodash/_hashSet.js new file mode 100644 index 0000000..f7c3307 --- /dev/null +++ b/www/node_modules/lodash/_hashSet.js @@ -0,0 +1,18 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + */ +function hashSet(hash, key, value) { + hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; +} + +module.exports = hashSet; diff --git a/www/node_modules/lodash/_indexKeys.js b/www/node_modules/lodash/_indexKeys.js new file mode 100644 index 0000000..0e2fc10 --- /dev/null +++ b/www/node_modules/lodash/_indexKeys.js @@ -0,0 +1,24 @@ +var baseTimes = require('./_baseTimes'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isLength = require('./isLength'), + isString = require('./isString'); + +/** + * Creates an array of index keys for `object` values of arrays, + * `arguments` objects, and strings, otherwise `null` is returned. + * + * @private + * @param {Object} object The object to query. + * @returns {Array|null} Returns index keys, else `null`. + */ +function indexKeys(object) { + var length = object ? object.length : undefined; + if (isLength(length) && + (isArray(object) || isString(object) || isArguments(object))) { + return baseTimes(length, String); + } + return null; +} + +module.exports = indexKeys; diff --git a/www/node_modules/lodash/_indexOfNaN.js b/www/node_modules/lodash/_indexOfNaN.js new file mode 100644 index 0000000..05b8207 --- /dev/null +++ b/www/node_modules/lodash/_indexOfNaN.js @@ -0,0 +1,23 @@ +/** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ +function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; +} + +module.exports = indexOfNaN; diff --git a/www/node_modules/lodash/_initCloneArray.js b/www/node_modules/lodash/_initCloneArray.js new file mode 100644 index 0000000..aef0212 --- /dev/null +++ b/www/node_modules/lodash/_initCloneArray.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +module.exports = initCloneArray; diff --git a/www/node_modules/lodash/_initCloneByTag.js b/www/node_modules/lodash/_initCloneByTag.js new file mode 100644 index 0000000..5d21cda --- /dev/null +++ b/www/node_modules/lodash/_initCloneByTag.js @@ -0,0 +1,74 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'), + cloneMap = require('./_cloneMap'), + cloneRegExp = require('./_cloneRegExp'), + cloneSet = require('./_cloneSet'), + cloneSymbol = require('./_cloneSymbol'), + cloneTypedArray = require('./_cloneTypedArray'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return cloneMap(object); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return cloneSet(object); + + case symbolTag: + return cloneSymbol(object); + } +} + +module.exports = initCloneByTag; diff --git a/www/node_modules/lodash/_initCloneObject.js b/www/node_modules/lodash/_initCloneObject.js new file mode 100644 index 0000000..14d2dc4 --- /dev/null +++ b/www/node_modules/lodash/_initCloneObject.js @@ -0,0 +1,20 @@ +var baseCreate = require('./_baseCreate'), + isPrototype = require('./_isPrototype'); + +/** Built-in value references. */ +var getPrototypeOf = Object.getPrototypeOf; + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototypeOf(object)) + : {}; +} + +module.exports = initCloneObject; diff --git a/www/node_modules/lodash/_isHostObject.js b/www/node_modules/lodash/_isHostObject.js new file mode 100644 index 0000000..e598c10 --- /dev/null +++ b/www/node_modules/lodash/_isHostObject.js @@ -0,0 +1,20 @@ +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +module.exports = isHostObject; diff --git a/www/node_modules/lodash/_isIndex.js b/www/node_modules/lodash/_isIndex.js new file mode 100644 index 0000000..c7ff607 --- /dev/null +++ b/www/node_modules/lodash/_isIndex.js @@ -0,0 +1,21 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; +} + +module.exports = isIndex; diff --git a/www/node_modules/lodash/_isIterateeCall.js b/www/node_modules/lodash/_isIterateeCall.js new file mode 100644 index 0000000..b422b48 --- /dev/null +++ b/www/node_modules/lodash/_isIterateeCall.js @@ -0,0 +1,28 @@ +var eq = require('./eq'), + isArrayLike = require('./isArrayLike'), + isIndex = require('./_isIndex'), + isObject = require('./isObject'); + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + return eq(object[index], value); + } + return false; +} + +module.exports = isIterateeCall; diff --git a/www/node_modules/lodash/_isKey.js b/www/node_modules/lodash/_isKey.js new file mode 100644 index 0000000..0e34576 --- /dev/null +++ b/www/node_modules/lodash/_isKey.js @@ -0,0 +1,24 @@ +var isArray = require('./isArray'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (typeof value == 'number') { + return true; + } + return !isArray(value) && + (reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object))); +} + +module.exports = isKey; diff --git a/www/node_modules/lodash/_isKeyable.js b/www/node_modules/lodash/_isKeyable.js new file mode 100644 index 0000000..5df83c0 --- /dev/null +++ b/www/node_modules/lodash/_isKeyable.js @@ -0,0 +1,14 @@ +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return type == 'number' || type == 'boolean' || + (type == 'string' && value != '__proto__') || value == null; +} + +module.exports = isKeyable; diff --git a/www/node_modules/lodash/_isLaziable.js b/www/node_modules/lodash/_isLaziable.js new file mode 100644 index 0000000..faa17b9 --- /dev/null +++ b/www/node_modules/lodash/_isLaziable.js @@ -0,0 +1,27 @@ +var LazyWrapper = require('./_LazyWrapper'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + lodash = require('./wrapperLodash'); + +/** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. + */ +function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; +} + +module.exports = isLaziable; diff --git a/www/node_modules/lodash/_isPrototype.js b/www/node_modules/lodash/_isPrototype.js new file mode 100644 index 0000000..0f29498 --- /dev/null +++ b/www/node_modules/lodash/_isPrototype.js @@ -0,0 +1,18 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +module.exports = isPrototype; diff --git a/www/node_modules/lodash/_isStrictComparable.js b/www/node_modules/lodash/_isStrictComparable.js new file mode 100644 index 0000000..b59f40b --- /dev/null +++ b/www/node_modules/lodash/_isStrictComparable.js @@ -0,0 +1,15 @@ +var isObject = require('./isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; diff --git a/www/node_modules/lodash/_iteratorToArray.js b/www/node_modules/lodash/_iteratorToArray.js new file mode 100644 index 0000000..4768566 --- /dev/null +++ b/www/node_modules/lodash/_iteratorToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ +function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; +} + +module.exports = iteratorToArray; diff --git a/www/node_modules/lodash/_lazyClone.js b/www/node_modules/lodash/_lazyClone.js new file mode 100644 index 0000000..d8a51f8 --- /dev/null +++ b/www/node_modules/lodash/_lazyClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), + copyArray = require('./_copyArray'); + +/** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ +function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; +} + +module.exports = lazyClone; diff --git a/www/node_modules/lodash/_lazyReverse.js b/www/node_modules/lodash/_lazyReverse.js new file mode 100644 index 0000000..c5b5219 --- /dev/null +++ b/www/node_modules/lodash/_lazyReverse.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'); + +/** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ +function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; +} + +module.exports = lazyReverse; diff --git a/www/node_modules/lodash/_lazyValue.js b/www/node_modules/lodash/_lazyValue.js new file mode 100644 index 0000000..09bf14b --- /dev/null +++ b/www/node_modules/lodash/_lazyValue.js @@ -0,0 +1,73 @@ +var baseWrapperValue = require('./_baseWrapperValue'), + getView = require('./_getView'), + isArray = require('./isArray'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to indicate the type of lazy iteratees. */ +var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ +function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || + (arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; +} + +module.exports = lazyValue; diff --git a/www/node_modules/lodash/_mapClear.js b/www/node_modules/lodash/_mapClear.js new file mode 100644 index 0000000..296f417 --- /dev/null +++ b/www/node_modules/lodash/_mapClear.js @@ -0,0 +1,19 @@ +var Hash = require('./_Hash'), + Map = require('./_Map'); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapClear() { + this.__data__ = { + 'hash': new Hash, + 'map': Map ? new Map : [], + 'string': new Hash + }; +} + +module.exports = mapClear; diff --git a/www/node_modules/lodash/_mapDelete.js b/www/node_modules/lodash/_mapDelete.js new file mode 100644 index 0000000..640eb0a --- /dev/null +++ b/www/node_modules/lodash/_mapDelete.js @@ -0,0 +1,23 @@ +var Map = require('./_Map'), + assocDelete = require('./_assocDelete'), + hashDelete = require('./_hashDelete'), + isKeyable = require('./_isKeyable'); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapDelete(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashDelete(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map['delete'](key) : assocDelete(data.map, key); +} + +module.exports = mapDelete; diff --git a/www/node_modules/lodash/_mapGet.js b/www/node_modules/lodash/_mapGet.js new file mode 100644 index 0000000..8f33854 --- /dev/null +++ b/www/node_modules/lodash/_mapGet.js @@ -0,0 +1,23 @@ +var Map = require('./_Map'), + assocGet = require('./_assocGet'), + hashGet = require('./_hashGet'), + isKeyable = require('./_isKeyable'); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapGet(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashGet(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map.get(key) : assocGet(data.map, key); +} + +module.exports = mapGet; diff --git a/www/node_modules/lodash/_mapHas.js b/www/node_modules/lodash/_mapHas.js new file mode 100644 index 0000000..9225537 --- /dev/null +++ b/www/node_modules/lodash/_mapHas.js @@ -0,0 +1,23 @@ +var Map = require('./_Map'), + assocHas = require('./_assocHas'), + hashHas = require('./_hashHas'), + isKeyable = require('./_isKeyable'); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapHas(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashHas(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map.has(key) : assocHas(data.map, key); +} + +module.exports = mapHas; diff --git a/www/node_modules/lodash/_mapSet.js b/www/node_modules/lodash/_mapSet.js new file mode 100644 index 0000000..7a58786 --- /dev/null +++ b/www/node_modules/lodash/_mapSet.js @@ -0,0 +1,28 @@ +var Map = require('./_Map'), + assocSet = require('./_assocSet'), + hashSet = require('./_hashSet'), + isKeyable = require('./_isKeyable'); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache object. + */ +function mapSet(key, value) { + var data = this.__data__; + if (isKeyable(key)) { + hashSet(typeof key == 'string' ? data.string : data.hash, key, value); + } else if (Map) { + data.map.set(key, value); + } else { + assocSet(data.map, key, value); + } + return this; +} + +module.exports = mapSet; diff --git a/www/node_modules/lodash/_mapToArray.js b/www/node_modules/lodash/_mapToArray.js new file mode 100644 index 0000000..e2e8a24 --- /dev/null +++ b/www/node_modules/lodash/_mapToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `map` to an array. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the converted array. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +module.exports = mapToArray; diff --git a/www/node_modules/lodash/_mergeData.js b/www/node_modules/lodash/_mergeData.js new file mode 100644 index 0000000..ac6fa4c --- /dev/null +++ b/www/node_modules/lodash/_mergeData.js @@ -0,0 +1,90 @@ +var composeArgs = require('./_composeArgs'), + composeArgsRight = require('./_composeArgsRight'), + copyArray = require('./_copyArray'), + replaceHolders = require('./_replaceHolders'); + +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + ARY_FLAG = 128, + REARG_FLAG = 256; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * modify function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * combined case where curried functions have `_.ary` and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ +function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); + + var isCombo = + ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || + ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : copyArray(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : copyArray(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : copyArray(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : copyArray(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = copyArray(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; +} + +module.exports = mergeData; diff --git a/www/node_modules/lodash/_mergeDefaults.js b/www/node_modules/lodash/_mergeDefaults.js new file mode 100644 index 0000000..263836b --- /dev/null +++ b/www/node_modules/lodash/_mergeDefaults.js @@ -0,0 +1,23 @@ +var baseMerge = require('./_baseMerge'), + isObject = require('./isObject'); + +/** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + * @returns {*} Returns the value to assign. + */ +function mergeDefaults(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + baseMerge(objValue, srcValue, undefined, mergeDefaults, stack.set(srcValue, objValue)); + } + return objValue; +} + +module.exports = mergeDefaults; diff --git a/www/node_modules/lodash/_metaMap.js b/www/node_modules/lodash/_metaMap.js new file mode 100644 index 0000000..0157a0b --- /dev/null +++ b/www/node_modules/lodash/_metaMap.js @@ -0,0 +1,6 @@ +var WeakMap = require('./_WeakMap'); + +/** Used to store function metadata. */ +var metaMap = WeakMap && new WeakMap; + +module.exports = metaMap; diff --git a/www/node_modules/lodash/_nativeCreate.js b/www/node_modules/lodash/_nativeCreate.js new file mode 100644 index 0000000..c7aede8 --- /dev/null +++ b/www/node_modules/lodash/_nativeCreate.js @@ -0,0 +1,6 @@ +var getNative = require('./_getNative'); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; diff --git a/www/node_modules/lodash/_parent.js b/www/node_modules/lodash/_parent.js new file mode 100644 index 0000000..e04ff6e --- /dev/null +++ b/www/node_modules/lodash/_parent.js @@ -0,0 +1,16 @@ +var baseSlice = require('./_baseSlice'), + get = require('./get'); + +/** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ +function parent(object, path) { + return path.length == 1 ? object : get(object, baseSlice(path, 0, -1)); +} + +module.exports = parent; diff --git a/www/node_modules/lodash/_reEscape.js b/www/node_modules/lodash/_reEscape.js new file mode 100644 index 0000000..7f47eda --- /dev/null +++ b/www/node_modules/lodash/_reEscape.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEscape = /<%-([\s\S]+?)%>/g; + +module.exports = reEscape; diff --git a/www/node_modules/lodash/_reEvaluate.js b/www/node_modules/lodash/_reEvaluate.js new file mode 100644 index 0000000..6adfc31 --- /dev/null +++ b/www/node_modules/lodash/_reEvaluate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEvaluate = /<%([\s\S]+?)%>/g; + +module.exports = reEvaluate; diff --git a/www/node_modules/lodash/_reInterpolate.js b/www/node_modules/lodash/_reInterpolate.js new file mode 100644 index 0000000..d02ff0b --- /dev/null +++ b/www/node_modules/lodash/_reInterpolate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/www/node_modules/lodash/_realNames.js b/www/node_modules/lodash/_realNames.js new file mode 100644 index 0000000..aa0d529 --- /dev/null +++ b/www/node_modules/lodash/_realNames.js @@ -0,0 +1,4 @@ +/** Used to lookup unminified function names. */ +var realNames = {}; + +module.exports = realNames; diff --git a/www/node_modules/lodash/_reorder.js b/www/node_modules/lodash/_reorder.js new file mode 100644 index 0000000..a3502b0 --- /dev/null +++ b/www/node_modules/lodash/_reorder.js @@ -0,0 +1,29 @@ +var copyArray = require('./_copyArray'), + isIndex = require('./_isIndex'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ +function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; +} + +module.exports = reorder; diff --git a/www/node_modules/lodash/_replaceHolders.js b/www/node_modules/lodash/_replaceHolders.js new file mode 100644 index 0000000..74360ec --- /dev/null +++ b/www/node_modules/lodash/_replaceHolders.js @@ -0,0 +1,29 @@ +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ +function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; +} + +module.exports = replaceHolders; diff --git a/www/node_modules/lodash/_root.js b/www/node_modules/lodash/_root.js new file mode 100644 index 0000000..d2cfd31 --- /dev/null +++ b/www/node_modules/lodash/_root.js @@ -0,0 +1,41 @@ +var checkGlobal = require('./_checkGlobal'); + +/** Used to determine if values are of the language type `Object`. */ +var objectTypes = { + 'function': true, + 'object': true +}; + +/** Detect free variable `exports`. */ +var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + +/** Detect free variable `module`. */ +var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + +/** Detect free variable `self`. */ +var freeSelf = checkGlobal(objectTypes[typeof self] && self); + +/** Detect free variable `window`. */ +var freeWindow = checkGlobal(objectTypes[typeof window] && window); + +/** Detect `this` as the global object. */ +var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + +/** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ +var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + +module.exports = root; diff --git a/www/node_modules/lodash/_setData.js b/www/node_modules/lodash/_setData.js new file mode 100644 index 0000000..8b2efca --- /dev/null +++ b/www/node_modules/lodash/_setData.js @@ -0,0 +1,41 @@ +var baseSetData = require('./_baseSetData'), + now = require('./now'); + +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 150, + HOT_SPAN = 16; + +/** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var setData = (function() { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); + }; +}()); + +module.exports = setData; diff --git a/www/node_modules/lodash/_setToArray.js b/www/node_modules/lodash/_setToArray.js new file mode 100644 index 0000000..6b24f30 --- /dev/null +++ b/www/node_modules/lodash/_setToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `set` to an array. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the converted array. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +module.exports = setToArray; diff --git a/www/node_modules/lodash/_stackClear.js b/www/node_modules/lodash/_stackClear.js new file mode 100644 index 0000000..8255536 --- /dev/null +++ b/www/node_modules/lodash/_stackClear.js @@ -0,0 +1,12 @@ +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = { 'array': [], 'map': null }; +} + +module.exports = stackClear; diff --git a/www/node_modules/lodash/_stackDelete.js b/www/node_modules/lodash/_stackDelete.js new file mode 100644 index 0000000..7e38a13 --- /dev/null +++ b/www/node_modules/lodash/_stackDelete.js @@ -0,0 +1,19 @@ +var assocDelete = require('./_assocDelete'); + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + array = data.array; + + return array ? assocDelete(array, key) : data.map['delete'](key); +} + +module.exports = stackDelete; diff --git a/www/node_modules/lodash/_stackGet.js b/www/node_modules/lodash/_stackGet.js new file mode 100644 index 0000000..20b9d9a --- /dev/null +++ b/www/node_modules/lodash/_stackGet.js @@ -0,0 +1,19 @@ +var assocGet = require('./_assocGet'); + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + var data = this.__data__, + array = data.array; + + return array ? assocGet(array, key) : data.map.get(key); +} + +module.exports = stackGet; diff --git a/www/node_modules/lodash/_stackHas.js b/www/node_modules/lodash/_stackHas.js new file mode 100644 index 0000000..7a3b0b9 --- /dev/null +++ b/www/node_modules/lodash/_stackHas.js @@ -0,0 +1,19 @@ +var assocHas = require('./_assocHas'); + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + var data = this.__data__, + array = data.array; + + return array ? assocHas(array, key) : data.map.has(key); +} + +module.exports = stackHas; diff --git a/www/node_modules/lodash/_stackSet.js b/www/node_modules/lodash/_stackSet.js new file mode 100644 index 0000000..0194d10 --- /dev/null +++ b/www/node_modules/lodash/_stackSet.js @@ -0,0 +1,36 @@ +var MapCache = require('./_MapCache'), + assocSet = require('./_assocSet'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache object. + */ +function stackSet(key, value) { + var data = this.__data__, + array = data.array; + + if (array) { + if (array.length < (LARGE_ARRAY_SIZE - 1)) { + assocSet(array, key, value); + } else { + data.array = null; + data.map = new MapCache(array); + } + } + var map = data.map; + if (map) { + map.set(key, value); + } + return this; +} + +module.exports = stackSet; diff --git a/www/node_modules/lodash/_stringSize.js b/www/node_modules/lodash/_stringSize.js new file mode 100644 index 0000000..7aa9f41 --- /dev/null +++ b/www/node_modules/lodash/_stringSize.js @@ -0,0 +1,48 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + if (!(string && reHasComplexSymbol.test(string))) { + return string.length; + } + var result = reComplexSymbol.lastIndex = 0; + while (reComplexSymbol.test(string)) { + result++; + } + return result; +} + +module.exports = stringSize; diff --git a/www/node_modules/lodash/_stringToArray.js b/www/node_modules/lodash/_stringToArray.js new file mode 100644 index 0000000..90986f0 --- /dev/null +++ b/www/node_modules/lodash/_stringToArray.js @@ -0,0 +1,38 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return string.match(reComplexSymbol); +} + +module.exports = stringToArray; diff --git a/www/node_modules/lodash/_stringToPath.js b/www/node_modules/lodash/_stringToPath.js new file mode 100644 index 0000000..a8fd82a --- /dev/null +++ b/www/node_modules/lodash/_stringToPath.js @@ -0,0 +1,24 @@ +var toString = require('./toString'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +function stringToPath(string) { + var result = []; + toString(string).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +} + +module.exports = stringToPath; diff --git a/www/node_modules/lodash/_unescapeHtmlChar.js b/www/node_modules/lodash/_unescapeHtmlChar.js new file mode 100644 index 0000000..28b3454 --- /dev/null +++ b/www/node_modules/lodash/_unescapeHtmlChar.js @@ -0,0 +1,22 @@ +/** Used to map HTML entities to characters. */ +var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' +}; + +/** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ +function unescapeHtmlChar(chr) { + return htmlUnescapes[chr]; +} + +module.exports = unescapeHtmlChar; diff --git a/www/node_modules/lodash/_wrapperClone.js b/www/node_modules/lodash/_wrapperClone.js new file mode 100644 index 0000000..7bb58a2 --- /dev/null +++ b/www/node_modules/lodash/_wrapperClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), + LodashWrapper = require('./_LodashWrapper'), + copyArray = require('./_copyArray'); + +/** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ +function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; +} + +module.exports = wrapperClone; diff --git a/www/node_modules/lodash/add.js b/www/node_modules/lodash/add.js new file mode 100644 index 0000000..d097850 --- /dev/null +++ b/www/node_modules/lodash/add.js @@ -0,0 +1,29 @@ +/** + * Adds two numbers. + * + * @static + * @memberOf _ + * @category Math + * @param {number} augend The first number in an addition. + * @param {number} addend The second number in an addition. + * @returns {number} Returns the total. + * @example + * + * _.add(6, 4); + * // => 10 + */ +function add(augend, addend) { + var result; + if (augend === undefined && addend === undefined) { + return 0; + } + if (augend !== undefined) { + result = augend; + } + if (addend !== undefined) { + result = result === undefined ? addend : (result + addend); + } + return result; +} + +module.exports = add; diff --git a/www/node_modules/lodash/after.js b/www/node_modules/lodash/after.js new file mode 100644 index 0000000..41b0146 --- /dev/null +++ b/www/node_modules/lodash/after.js @@ -0,0 +1,41 @@ +var toInteger = require('./toInteger'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ +function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; +} + +module.exports = after; diff --git a/www/node_modules/lodash/array.js b/www/node_modules/lodash/array.js new file mode 100644 index 0000000..bfded5c --- /dev/null +++ b/www/node_modules/lodash/array.js @@ -0,0 +1,65 @@ +module.exports = { + 'chunk': require('./chunk'), + 'compact': require('./compact'), + 'concat': require('./concat'), + 'difference': require('./difference'), + 'differenceBy': require('./differenceBy'), + 'differenceWith': require('./differenceWith'), + 'drop': require('./drop'), + 'dropRight': require('./dropRight'), + 'dropRightWhile': require('./dropRightWhile'), + 'dropWhile': require('./dropWhile'), + 'fill': require('./fill'), + 'findIndex': require('./findIndex'), + 'findLastIndex': require('./findLastIndex'), + 'flatten': require('./flatten'), + 'flattenDeep': require('./flattenDeep'), + 'flattenDepth': require('./flattenDepth'), + 'fromPairs': require('./fromPairs'), + 'head': require('./head'), + 'indexOf': require('./indexOf'), + 'initial': require('./initial'), + 'intersection': require('./intersection'), + 'intersectionBy': require('./intersectionBy'), + 'intersectionWith': require('./intersectionWith'), + 'join': require('./join'), + 'last': require('./last'), + 'lastIndexOf': require('./lastIndexOf'), + 'pull': require('./pull'), + 'pullAll': require('./pullAll'), + 'pullAllBy': require('./pullAllBy'), + 'pullAllWith': require('./pullAllWith'), + 'pullAt': require('./pullAt'), + 'remove': require('./remove'), + 'reverse': require('./reverse'), + 'slice': require('./slice'), + 'sortedIndex': require('./sortedIndex'), + 'sortedIndexBy': require('./sortedIndexBy'), + 'sortedIndexOf': require('./sortedIndexOf'), + 'sortedLastIndex': require('./sortedLastIndex'), + 'sortedLastIndexBy': require('./sortedLastIndexBy'), + 'sortedLastIndexOf': require('./sortedLastIndexOf'), + 'sortedUniq': require('./sortedUniq'), + 'sortedUniqBy': require('./sortedUniqBy'), + 'tail': require('./tail'), + 'take': require('./take'), + 'takeRight': require('./takeRight'), + 'takeRightWhile': require('./takeRightWhile'), + 'takeWhile': require('./takeWhile'), + 'union': require('./union'), + 'unionBy': require('./unionBy'), + 'unionWith': require('./unionWith'), + 'uniq': require('./uniq'), + 'uniqBy': require('./uniqBy'), + 'uniqWith': require('./uniqWith'), + 'unzip': require('./unzip'), + 'unzipWith': require('./unzipWith'), + 'without': require('./without'), + 'xor': require('./xor'), + 'xorBy': require('./xorBy'), + 'xorWith': require('./xorWith'), + 'zip': require('./zip'), + 'zipObject': require('./zipObject'), + 'zipObjectDeep': require('./zipObjectDeep'), + 'zipWith': require('./zipWith') +}; diff --git a/www/node_modules/lodash/ary.js b/www/node_modules/lodash/ary.js new file mode 100644 index 0000000..b3906ac --- /dev/null +++ b/www/node_modules/lodash/ary.js @@ -0,0 +1,28 @@ +var createWrapper = require('./_createWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var ARY_FLAG = 128; + +/** + * Creates a function that accepts up to `n` arguments, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/www/node_modules/lodash/assign.js b/www/node_modules/lodash/assign.js new file mode 100644 index 0000000..123ff49 --- /dev/null +++ b/www/node_modules/lodash/assign.js @@ -0,0 +1,62 @@ +var assignValue = require('./_assignValue'), + copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + isArrayLike = require('./isArrayLike'), + isPrototype = require('./_isPrototype'), + keys = require('./keys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ +var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); + +/** + * Assigns own enumerable properties of source objects to the destination + * object. Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.c = 3; + * } + * + * function Bar() { + * this.e = 5; + * } + * + * Foo.prototype.d = 4; + * Bar.prototype.f = 6; + * + * _.assign({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3, 'e': 5 } + */ +var assign = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } +}); + +module.exports = assign; diff --git a/www/node_modules/lodash/assignIn.js b/www/node_modules/lodash/assignIn.js new file mode 100644 index 0000000..0315ffe --- /dev/null +++ b/www/node_modules/lodash/assignIn.js @@ -0,0 +1,56 @@ +var assignValue = require('./_assignValue'), + copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + isArrayLike = require('./isArrayLike'), + isPrototype = require('./_isPrototype'), + keysIn = require('./keysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ +var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * function Bar() { + * this.d = 4; + * } + * + * Foo.prototype.c = 3; + * Bar.prototype.e = 5; + * + * _.assignIn({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } + */ +var assignIn = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keysIn(source), object); + return; + } + for (var key in source) { + assignValue(object, key, source[key]); + } +}); + +module.exports = assignIn; diff --git a/www/node_modules/lodash/assignInWith.js b/www/node_modules/lodash/assignInWith.js new file mode 100644 index 0000000..da73ef7 --- /dev/null +++ b/www/node_modules/lodash/assignInWith.js @@ -0,0 +1,36 @@ +var copyObjectWith = require('./_copyObjectWith'), + createAssigner = require('./_createAssigner'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.assignIn` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keysIn(source), object, customizer); +}); + +module.exports = assignInWith; diff --git a/www/node_modules/lodash/assignWith.js b/www/node_modules/lodash/assignWith.js new file mode 100644 index 0000000..eb7915b --- /dev/null +++ b/www/node_modules/lodash/assignWith.js @@ -0,0 +1,35 @@ +var copyObjectWith = require('./_copyObjectWith'), + createAssigner = require('./_createAssigner'), + keys = require('./keys'); + +/** + * This method is like `_.assign` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keys(source), object, customizer); +}); + +module.exports = assignWith; diff --git a/www/node_modules/lodash/at.js b/www/node_modules/lodash/at.js new file mode 100644 index 0000000..cb35a54 --- /dev/null +++ b/www/node_modules/lodash/at.js @@ -0,0 +1,29 @@ +var baseAt = require('./_baseAt'), + baseFlatten = require('./_baseFlatten'), + rest = require('./rest'); + +/** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths of elements to pick, + * specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + * + * _.at(['a', 'b', 'c'], 0, 2); + * // => ['a', 'c'] + */ +var at = rest(function(object, paths) { + return baseAt(object, baseFlatten(paths, 1)); +}); + +module.exports = at; diff --git a/www/node_modules/lodash/attempt.js b/www/node_modules/lodash/attempt.js new file mode 100644 index 0000000..52bc3e3 --- /dev/null +++ b/www/node_modules/lodash/attempt.js @@ -0,0 +1,33 @@ +var apply = require('./_apply'), + isError = require('./isError'), + rest = require('./rest'); + +/** + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Util + * @param {Function} func The function to attempt. + * @returns {*} Returns the `func` result or error object. + * @example + * + * // Avoid throwing errors for invalid selectors. + * var elements = _.attempt(function(selector) { + * return document.querySelectorAll(selector); + * }, '>_>'); + * + * if (_.isError(elements)) { + * elements = []; + * } + */ +var attempt = rest(function(func, args) { + try { + return apply(func, undefined, args); + } catch (e) { + return isError(e) ? e : new Error(e); + } +}); + +module.exports = attempt; diff --git a/www/node_modules/lodash/before.js b/www/node_modules/lodash/before.js new file mode 100644 index 0000000..47148b1 --- /dev/null +++ b/www/node_modules/lodash/before.js @@ -0,0 +1,39 @@ +var toInteger = require('./toInteger'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ +function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; +} + +module.exports = before; diff --git a/www/node_modules/lodash/bind.js b/www/node_modules/lodash/bind.js new file mode 100644 index 0000000..a594063 --- /dev/null +++ b/www/node_modules/lodash/bind.js @@ -0,0 +1,57 @@ +var createWrapper = require('./_createWrapper'), + getPlaceholder = require('./_getPlaceholder'), + replaceHolders = require('./_replaceHolders'), + rest = require('./rest'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ +var bind = rest(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getPlaceholder(bind)); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); +}); + +// Assign default placeholders. +bind.placeholder = {}; + +module.exports = bind; diff --git a/www/node_modules/lodash/bindAll.js b/www/node_modules/lodash/bindAll.js new file mode 100644 index 0000000..ddbc2ff --- /dev/null +++ b/www/node_modules/lodash/bindAll.js @@ -0,0 +1,39 @@ +var arrayEach = require('./_arrayEach'), + baseFlatten = require('./_baseFlatten'), + bind = require('./bind'), + rest = require('./rest'); + +/** + * Binds methods of an object to the object itself, overwriting the existing + * method. + * + * **Note:** This method doesn't set the "length" property of bound functions. + * + * @static + * @memberOf _ + * @category Util + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} methodNames The object method names to bind, + * specified individually or in arrays. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view, 'onClick'); + * jQuery(element).on('click', view.onClick); + * // => logs 'clicked docs' when clicked + */ +var bindAll = rest(function(object, methodNames) { + arrayEach(baseFlatten(methodNames, 1), function(key) { + object[key] = bind(object[key], object); + }); + return object; +}); + +module.exports = bindAll; diff --git a/www/node_modules/lodash/bindKey.js b/www/node_modules/lodash/bindKey.js new file mode 100644 index 0000000..5f5c982 --- /dev/null +++ b/www/node_modules/lodash/bindKey.js @@ -0,0 +1,67 @@ +var createWrapper = require('./_createWrapper'), + getPlaceholder = require('./_getPlaceholder'), + replaceHolders = require('./_replaceHolders'), + rest = require('./rest'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ +var bindKey = rest(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getPlaceholder(bindKey)); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); +}); + +// Assign default placeholders. +bindKey.placeholder = {}; + +module.exports = bindKey; diff --git a/www/node_modules/lodash/camelCase.js b/www/node_modules/lodash/camelCase.js new file mode 100644 index 0000000..00239e3 --- /dev/null +++ b/www/node_modules/lodash/camelCase.js @@ -0,0 +1,28 @@ +var capitalize = require('./capitalize'), + createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar'); + * // => 'fooBar' + * + * _.camelCase('__foo_bar__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); +}); + +module.exports = camelCase; diff --git a/www/node_modules/lodash/capitalize.js b/www/node_modules/lodash/capitalize.js new file mode 100644 index 0000000..4daec03 --- /dev/null +++ b/www/node_modules/lodash/capitalize.js @@ -0,0 +1,22 @@ +var toString = require('./toString'), + upperFirst = require('./upperFirst'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} + +module.exports = capitalize; diff --git a/www/node_modules/lodash/castArray.js b/www/node_modules/lodash/castArray.js new file mode 100644 index 0000000..4ea96fc --- /dev/null +++ b/www/node_modules/lodash/castArray.js @@ -0,0 +1,43 @@ +var isArray = require('./isArray'); + +/** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ +function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; +} + +module.exports = castArray; diff --git a/www/node_modules/lodash/ceil.js b/www/node_modules/lodash/ceil.js new file mode 100644 index 0000000..ecf2f12 --- /dev/null +++ b/www/node_modules/lodash/ceil.js @@ -0,0 +1,25 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded up to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} number The number to round up. + * @param {number} [precision=0] The precision to round up to. + * @returns {number} Returns the rounded up number. + * @example + * + * _.ceil(4.006); + * // => 5 + * + * _.ceil(6.004, 2); + * // => 6.01 + * + * _.ceil(6040, -2); + * // => 6100 + */ +var ceil = createRound('ceil'); + +module.exports = ceil; diff --git a/www/node_modules/lodash/chain.js b/www/node_modules/lodash/chain.js new file mode 100644 index 0000000..3300933 --- /dev/null +++ b/www/node_modules/lodash/chain.js @@ -0,0 +1,36 @@ +var lodash = require('./wrapperLodash'); + +/** + * Creates a `lodash` object that wraps `value` with explicit method chaining enabled. + * The result of such method chaining must be unwrapped with `_#value`. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ +function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; +} + +module.exports = chain; diff --git a/www/node_modules/lodash/chunk.js b/www/node_modules/lodash/chunk.js new file mode 100644 index 0000000..429a371 --- /dev/null +++ b/www/node_modules/lodash/chunk.js @@ -0,0 +1,44 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=0] The length of each chunk. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size) { + size = nativeMax(toInteger(size), 0); + + var length = array ? array.length : 0; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; +} + +module.exports = chunk; diff --git a/www/node_modules/lodash/clamp.js b/www/node_modules/lodash/clamp.js new file mode 100644 index 0000000..9e186d8 --- /dev/null +++ b/www/node_modules/lodash/clamp.js @@ -0,0 +1,38 @@ +var baseClamp = require('./_baseClamp'), + toNumber = require('./toNumber'); + +/** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ +function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); +} + +module.exports = clamp; diff --git a/www/node_modules/lodash/clone.js b/www/node_modules/lodash/clone.js new file mode 100644 index 0000000..fb83952 --- /dev/null +++ b/www/node_modules/lodash/clone.js @@ -0,0 +1,31 @@ +var baseClone = require('./_baseClone'); + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return baseClone(value, false, true); +} + +module.exports = clone; diff --git a/www/node_modules/lodash/cloneDeep.js b/www/node_modules/lodash/cloneDeep.js new file mode 100644 index 0000000..b8e95d3 --- /dev/null +++ b/www/node_modules/lodash/cloneDeep.js @@ -0,0 +1,23 @@ +var baseClone = require('./_baseClone'); + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return baseClone(value, true, true); +} + +module.exports = cloneDeep; diff --git a/www/node_modules/lodash/cloneDeepWith.js b/www/node_modules/lodash/cloneDeepWith.js new file mode 100644 index 0000000..4d04b22 --- /dev/null +++ b/www/node_modules/lodash/cloneDeepWith.js @@ -0,0 +1,33 @@ +var baseClone = require('./_baseClone'); + +/** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ +function cloneDeepWith(value, customizer) { + return baseClone(value, true, true, customizer); +} + +module.exports = cloneDeepWith; diff --git a/www/node_modules/lodash/cloneWith.js b/www/node_modules/lodash/cloneWith.js new file mode 100644 index 0000000..e689231 --- /dev/null +++ b/www/node_modules/lodash/cloneWith.js @@ -0,0 +1,36 @@ +var baseClone = require('./_baseClone'); + +/** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ +function cloneWith(value, customizer) { + return baseClone(value, false, true, customizer); +} + +module.exports = cloneWith; diff --git a/www/node_modules/lodash/collection.js b/www/node_modules/lodash/collection.js new file mode 100644 index 0000000..6d37b3f --- /dev/null +++ b/www/node_modules/lodash/collection.js @@ -0,0 +1,29 @@ +module.exports = { + 'at': require('./at'), + 'countBy': require('./countBy'), + 'each': require('./each'), + 'eachRight': require('./eachRight'), + 'every': require('./every'), + 'filter': require('./filter'), + 'find': require('./find'), + 'findLast': require('./findLast'), + 'flatMap': require('./flatMap'), + 'forEach': require('./forEach'), + 'forEachRight': require('./forEachRight'), + 'groupBy': require('./groupBy'), + 'includes': require('./includes'), + 'invokeMap': require('./invokeMap'), + 'keyBy': require('./keyBy'), + 'map': require('./map'), + 'orderBy': require('./orderBy'), + 'partition': require('./partition'), + 'reduce': require('./reduce'), + 'reduceRight': require('./reduceRight'), + 'reject': require('./reject'), + 'sample': require('./sample'), + 'sampleSize': require('./sampleSize'), + 'shuffle': require('./shuffle'), + 'size': require('./size'), + 'some': require('./some'), + 'sortBy': require('./sortBy') +}; diff --git a/www/node_modules/lodash/commit.js b/www/node_modules/lodash/commit.js new file mode 100644 index 0000000..1f87f50 --- /dev/null +++ b/www/node_modules/lodash/commit.js @@ -0,0 +1,32 @@ +var LodashWrapper = require('./_LodashWrapper'); + +/** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/www/node_modules/lodash/compact.js b/www/node_modules/lodash/compact.js new file mode 100644 index 0000000..e872c20 --- /dev/null +++ b/www/node_modules/lodash/compact.js @@ -0,0 +1,30 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = compact; diff --git a/www/node_modules/lodash/concat.js b/www/node_modules/lodash/concat.js new file mode 100644 index 0000000..1d2b846 --- /dev/null +++ b/www/node_modules/lodash/concat.js @@ -0,0 +1,35 @@ +var arrayConcat = require('./_arrayConcat'), + baseFlatten = require('./_baseFlatten'), + isArray = require('./isArray'), + rest = require('./rest'); + +/** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ +var concat = rest(function(array, values) { + if (!isArray(array)) { + array = array == null ? [] : [Object(array)]; + } + values = baseFlatten(values, 1); + return arrayConcat(array, values); +}); + +module.exports = concat; diff --git a/www/node_modules/lodash/cond.js b/www/node_modules/lodash/cond.js new file mode 100644 index 0000000..593ac9e --- /dev/null +++ b/www/node_modules/lodash/cond.js @@ -0,0 +1,58 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + rest = require('./rest'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that iterates over `pairs` invoking the corresponding + * function of the first predicate to return truthy. The predicate-function + * pairs are invoked with the `this` binding and arguments of the created + * function. + * + * @static + * @memberOf _ + * @category Util + * @param {Array} pairs The predicate-function pairs. + * @returns {Function} Returns the new function. + * @example + * + * var func = _.cond([ + * [_.matches({ 'a': 1 }), _.constant('matches A')], + * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], + * [_.constant(true), _.constant('no match')] + * ]); + * + * func({ 'a': 1, 'b': 2 }); + * // => 'matches A' + * + * func({ 'a': 0, 'b': 1 }); + * // => 'matches B' + * + * func({ 'a': '1', 'b': '2' }); + * // => 'no match' + */ +function cond(pairs) { + var length = pairs ? pairs.length : 0; + + pairs = !length ? [] : arrayMap(pairs, function(pair) { + if (typeof pair[1] != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return [baseIteratee(pair[0]), pair[1]]; + }); + + return rest(function(args) { + var index = -1; + while (++index < length) { + var pair = pairs[index]; + if (apply(pair[0], this, args)) { + return apply(pair[1], this, args); + } + } + }); +} + +module.exports = cond; diff --git a/www/node_modules/lodash/conforms.js b/www/node_modules/lodash/conforms.js new file mode 100644 index 0000000..2bfeca2 --- /dev/null +++ b/www/node_modules/lodash/conforms.js @@ -0,0 +1,28 @@ +var baseClone = require('./_baseClone'), + baseConforms = require('./_baseConforms'); + +/** + * Creates a function that invokes the predicate properties of `source` with + * the corresponding property values of a given object, returning `true` if + * all predicates return truthy, else `false`. + * + * @static + * @memberOf _ + * @category Util + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.filter(users, _.conforms({ 'age': _.partial(_.gt, _, 38) })); + * // => [{ 'user': 'fred', 'age': 40 }] + */ +function conforms(source) { + return baseConforms(baseClone(source, true)); +} + +module.exports = conforms; diff --git a/www/node_modules/lodash/constant.js b/www/node_modules/lodash/constant.js new file mode 100644 index 0000000..5844804 --- /dev/null +++ b/www/node_modules/lodash/constant.js @@ -0,0 +1,23 @@ +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new function. + * @example + * + * var object = { 'user': 'fred' }; + * var getter = _.constant(object); + * + * getter() === object; + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +module.exports = constant; diff --git a/www/node_modules/lodash/core.js b/www/node_modules/lodash/core.js new file mode 100644 index 0000000..d8ba4fd --- /dev/null +++ b/www/node_modules/lodash/core.js @@ -0,0 +1,3826 @@ +/** + * @license + * lodash 4.6.1 (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.6.1'; + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for wrapper metadata. */ + var BIND_FLAG = 1, + PARTIAL_FLAG = 32; + + /** Used to compose bitmasks for comparison styles. */ + var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"'`]/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + /** Used to determine if values are of the language type `Object`. */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Detect free variable `exports`. */ + var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + + /** Detect free variable `module`. */ + var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = (freeModule && freeModule.exports === freeExports) + ? freeExports + : undefined; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + + /** Detect free variable `self`. */ + var freeSelf = checkGlobal(objectTypes[typeof self] && self); + + /** Detect free variable `window`. */ + var freeWindow = checkGlobal(objectTypes[typeof window] && window); + + /** Detect `this` as the global object. */ + var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + + /** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ + var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a new array concatenating `array` with `other`. + * + * @private + * @param {Array} array The first array to concatenate. + * @param {Array} other The second array to concatenate. + * @returns {Array} Returns the new concatenated array. + */ + function arrayConcat(array, other) { + return arrayPush(copyArray(array), values); + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? current === current + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of methods like `_.find` and `_.findKey`, without + * support for iteratee shorthands, which iterates over `collection` using + * `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ + function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(chr) { + return htmlEscapes[chr]; + } + + /** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ + function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var Reflect = root.Reflect, + Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + enumerate = Reflect ? Reflect.enumerate : undefined, + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = Object.keys, + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chaining. Methods that operate on and return arrays, collections, and + * functions can be chained together. Methods that retrieve a single value or + * may return a primitive value will automatically end the chain sequence and + * return the unwrapped value. Otherwise, the value must be unwrapped with + * `_#value`. + * + * Explicit chaining, which must be unwrapped with `_#value` in all cases, + * may be enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization to merge iteratee calls; this avoids the creation + * of intermediate arrays and can greatly reduce the number of iteratee executions. + * Sections of a chain sequence qualify for shortcut fusion if the section is + * applied to an array of at least two hundred elements and any iteratees + * accept only one argument. The heuristic for whether a section qualifies + * for shortcut fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatten`, `flattenDeep`, `flattenDepth`, `flip`, `flow`, `flowRight`, + * `fromPairs`, `functions`, `functionsIn`, `groupBy`, `initial`, `intersection`, + * `intersectionBy`, `intersectionWith`, `invert`, `invertBy`, `invokeMap`, + * `iteratee`, `keyBy`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, + * `matches`, `matchesProperty`, `memoize`, `merge`, `mergeWith`, `method`, + * `methodOf`, `mixin`, `negate`, `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, + * `over`, `overArgs`, `overEvery`, `overSome`, `partial`, `partialRight`, + * `partition`, `pick`, `pickBy`, `plant`, `property`, `propertyOf`, `pull`, + * `pullAll`, `pullAllBy`, `pullAllWith`, `pullAt`, `push`, `range`, + * `rangeRight`, `rearg`, `reject`, `remove`, `rest`, `reverse`, `sampleSize`, + * `set`, `setWith`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`, `spread`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `tap`, `throttle`, + * `thru`, `toArray`, `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, + * `transform`, `unary`, `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, + * `uniqWith`, `unset`, `unshift`, `unzip`, `unzipWith`, `update`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, `zipObject`, + * `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `each`, `eachRight`, + * `endsWith`, `eq`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `first`, `floor`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `get`, `gt`, `gte`, `has`, `hasIn`, `head`, `identity`, `includes`, + * `indexOf`, `inRange`, `invoke`, `isArguments`, `isArray`, `isArrayBuffer`, + * `isArrayLike`, `isArrayLikeObject`, `isBoolean`, `isBuffer`, `isDate`, + * `isElement`, `isEmpty`, `isEqual`, `isEqualWith`, `isError`, `isFinite`, + * `isFunction`, `isInteger`, `isLength`, `isMap`, `isMatch`, `isMatchWith`, + * `isNaN`, `isNative`, `isNil`, `isNull`, `isNumber`, `isObject`, `isObjectLike`, + * `isPlainObject`, `isRegExp`, `isSafeInteger`, `isSet`, `isString`, + * `isUndefined`, `isTypedArray`, `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, + * `maxBy`, `mean`, `min`, `minBy`, `noConflict`, `noop`, `now`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toInteger`, `toJSON`, `toLength`, `toLower`, + * `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, `trimEnd`, + * `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, `upperFirst`, + * `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + /*------------------------------------------------------------------------*/ + + /** + * Used by `_.defaults` to customize its `_.assignIn` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function assignInDefaults(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ + function baseCastFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + function baseCreate(proto) { + return isObject(proto) ? objectCreate(proto) : {}; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts an array + * of `func` arguments. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments to provide to `func`. + * @returns {number} Returns the timer id. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (depth > 0 && isArrayLikeObject(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objectToString.call(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = objectToString.call(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + + stack || (stack = []); + var stacked = find(stack, function(entry) { + return entry[0] === object; + }); + if (stacked && stacked[1]) { + return stacked[1] == other; + } + stack.push([object, other]); + if (isSameTag && !objIsObj) { + var result = (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + stack.pop(); + return result; + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var result = equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, equalFunc, customizer, bitmask, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + var type = typeof func; + if (type == 'function') { + return func; + } + return func == null + ? identity + : (type == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.keys` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + return nativeKeys(Object(object)); + } + + /** + * The base implementation of `_.keysIn` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + object = object == null ? object : Object(object); + + var result = []; + for (var key in object) { + result.push(key); + } + return result; + } + + // Fallback for IE < 9 with es6-shim. + if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { + baseKeysIn = function(object) { + return iteratorToArray(enumerate(object)); + }; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ + function baseMatches(source) { + var props = keys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property names. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ + var copyObject = copyObjectWith; + + /** + * This function is like `copyObject` except that it accepts a function to + * customize copied values. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObjectWith(source, props, object, customizer) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : source[key]; + + assignValue(object, key, newValue); + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return rest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = typeof customizer == 'function' + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartialWrapper(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var index = -1, + isPartial = bitmask & PARTIAL_COMPARE_FLAG, + isUnordered = bitmask & UNORDERED_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var result = true; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isUnordered) { + if (!baseSome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack); + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) ? other != +other : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ + var getLength = baseProperty('length'); + + /** + * Creates an array of index keys for `object` values of arrays, + * `arguments` objects, and strings, otherwise `null` is returned. + * + * @private + * @param {Object} object The object to query. + * @returns {Array|null} Returns index keys, else `null`. + */ + function indexKeys(object) { + var length = object ? object.length : undefined; + if (isLength(length) && + (isArray(object) || isString(object) || isArguments(object))) { + return baseTimes(length, String); + } + return null; + } + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + var concat = rest(function(array, values) { + if (!isArray(array)) { + array = array == null ? [] : [Object(array)]; + } + values = baseFlatten(values, 1); + return arrayConcat(array, values); + }); + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return array ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of [`Array#slice`](https://mdn.io/Array/slice) + * to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array ? array.length : 0; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object that wraps `value` with explicit method chaining enabled. + * The result of such method chaining must be unwrapped with `_#value`. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain in order to modify intermediate results. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + function find(collection, predicate) { + return baseFind(collection, baseIteratee(predicate), baseEach); + } + + /** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior use `_.forIn` or `_.forOwn` + * for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(value) { + * console.log(value); + * }); + * // => logs `1` then `2` + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseCastFunction(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, `fill`, + * `invert`, `parseInt`, `random`, `range`, `rangeRight`, `slice`, `some`, + * `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimEnd`, `trimStart`, + * and `words` + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : keys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} [iteratees=[_.identity]] + * The iteratees to sort by, specified individually or in arrays. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, function(o) { return o.user; }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.sortBy(users, 'user', function(o) { + * return Math.floor(o.age / 10); + * }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = rest(function(func, thisArg, partials) { + return createPartialWrapper(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => logs 'deferred' after one or more milliseconds + */ + var defer = rest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ + var delay = rest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = array; + return func.apply(this, otherArgs); + }; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, keys(value)); + } + + /** + * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + function gt(value, other) { + return value > other; + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @type {Function} + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(getLength(value)) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && objectToString.call(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + function isDate(value) { + return isObjectLike(value) && objectToString.call(value) == dateTag; + } + + /** + * Checks if `value` is an empty collection or object. A value is considered + * empty if it's an `arguments` object, array, string, or jQuery-like collection + * with a length of `0` or has no own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are **not** supported. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MAX_VALUE); + * // => true + * + * _.isFinite(3.14); + * // => true + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8 which returns 'object' for typed array and weak map constructors, + // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && objectToString.call(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + function isRegExp(value) { + return isObject(value) && objectToString.call(value) == regexpTag; + } + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + function lt(value, other) { + return value < other; + } + + /** + * Converts `value` to an array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This function is loosely based on [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3); + * // => 3 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3'); + * // => 3 + */ + var toNumber = Number; + + /** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable properties of source objects to the destination + * object. Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.c = 3; + * } + * + * function Bar() { + * this.e = 5; + * } + * + * Foo.prototype.d = 4; + * Bar.prototype.f = 6; + * + * _.assign({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3, 'e': 5 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, keys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * function Bar() { + * this.d = 4; + * } + * + * Foo.prototype.c = 3; + * Bar.prototype.e = 5; + * + * _.assignIn({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keysIn(source), object, customizer); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a `properties` + * object is given its own enumerable properties are assigned to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties ? assign(result, properties) : result; + } + + /** + * Assigns own and inherited enumerable properties of source objects to the + * destination object for all destination properties that resolve to `undefined`. + * Source objects are applied from left to right. Once a property is set, + * additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var defaults = rest(function(args) { + args.push(undefined, assignInDefaults); + return assignInWith.apply(undefined, args); + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * var other = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + var isProto = isPrototype(object); + if (!(isProto || isArrayLike(object))) { + return baseKeys(object); + } + var indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + for (var key in object) { + if (hasOwnProperty.call(object, key) && + !(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(isProto && key == 'constructor')) { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + var index = -1, + isProto = isPrototype(object), + props = baseKeysIn(object), + propsLength = props.length, + indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + while (++index < propsLength) { + var key = props[index]; + if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property names to pick, specified + * individually or in arrays. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = rest(function(object, props) { + return object == null ? {} : basePick(object, baseFlatten(props, 1)); + }); + + /** + * This method is like `_.get` except that if the resolved value is a function + * it's invoked with the `this` binding of its parent object and its result + * is returned. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object ? baseValues(object, keys(object)) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in IE < 9, they can break out of + * attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument given to it. + * + * @static + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name the created callback returns the + * property value for a given element. If `func` is an object the created + * callback returns `true` for elements that contain the equivalent object + * properties, otherwise it returns `false`. + * + * @static + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(callback, func) { + * var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func); + * return !p ? callback(func) : function(object) { + * return (p[2] == '>' ? object[p[1]] > p[3] : object[p[1]] < p[3]); + * }; + * }); + * + * _.filter(users, 'age > 36'); + * // => [{ 'user': 'fred', 'age': 40 }] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. The created function is equivalent to + * `_.isMatch` with a `source` partially applied. + * + * **Note:** This method supports comparing the same values as `_.isEqual`. + * + * @static + * @memberOf _ + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, _.matches({ 'age': 40, 'active': false })); + * // => [{ 'user': 'fred', 'age': 40, 'active': false }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable function properties of a source object to the + * destination object. If `object` is a function then methods are added to + * its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options] The options object. + * @param {boolean} [options.chain=true] Specify whether the functions added + * are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = (isObject(options) && 'chain' in options) ? options.chain : true, + isFunc = isFunction(object); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * A no-operation function that returns `undefined` regardless of the + * arguments it receives. + * + * @static + * @memberOf _ + * @category Util + * @example + * + * var object = { 'user': 'fred' }; + * + * _.noop(object) === undefined; + * // => true + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given the ID is appended to it. + * + * @static + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey + * `undefined` is returned. + * + * @static + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, gt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey + * `undefined` is returned. + * + * @static + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, lt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + // Add functions that return wrapped values when chaining. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add functions to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add functions that return unwrapped values when chaining. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` and `String` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + return func.apply(this.value(), args); + } + return this[chainName](function(value) { + return func.apply(value, args); + }); + }; + }); + + // Add chaining functions to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Expose lodash on the free variable `window` or `self` when available. This + // prevents errors in cases where lodash is loaded by a script tag in the presence + // of an AMD loader. See http://requirejs.org/docs/errors.html#mismatch for more details. + (freeWindow || freeSelf || {})._ = lodash; + + // Some AMD build optimizers like r.js check for condition patterns like the following: + if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + define(function() { + return lodash; + }); + } + // Check for `exports` after `define` in case a build optimizer adds an `exports` object. + else if (freeExports && freeModule) { + // Export for Node.js. + if (moduleExports) { + (freeModule.exports = lodash)._ = lodash; + } + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } +}.call(this)); diff --git a/www/node_modules/lodash/core.min.js b/www/node_modules/lodash/core.min.js new file mode 100644 index 0000000..d6a4405 --- /dev/null +++ b/www/node_modules/lodash/core.min.js @@ -0,0 +1,29 @@ +/** + * @license + * lodash 4.6.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + * Build: `lodash core -o ./dist/lodash.core.js` + */ +;(function(){function n(n,t){for(var r=-1,e=t.length,u=n.length;++r-1&&0==n%1&&(null==t?9007199254740991:t)>n}function a(n){if(Y(n)&&!Pn(n)){if(n instanceof l)return n;if(An.call(n,"__wrapped__")){var t=new l(n.__wrapped__,n.__chain__);return t.__actions__=N(n.__actions__),t}}return new l(n)}function l(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function p(n,t,r,e){var u;return(u=n===an)||(u=xn[r], +u=(n===u||n!==n&&u!==u)&&!An.call(e,r)),u?t:n}function s(n){return X(n)?Fn(n):{}}function h(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(an,r)},t)}function v(n,t){var r=true;return $n(n,function(n,e,u){return r=!!t(n,e,u)}),r}function y(n,t){var r=[];return $n(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function _(t,r,e,u){u||(u=[]);for(var o=-1,i=t.length;++o0&&Y(c)&&L(c)&&(e||Pn(c)||K(c))?r>1?_(c,r-1,e,u):n(u,c):e||(u[u.length]=c); +}return u}function b(n,t){return n&&qn(n,t,en)}function g(n,t){return y(t,function(t){return Q(n[t])})}function j(n,t,r,e,u){return n===t?true:null==n||null==t||!X(n)&&!Y(t)?n!==n&&t!==t:d(n,t,j,r,e,u)}function d(n,t,r,e,u,o){var i=Pn(n),f=Pn(t),a="[object Array]",l="[object Array]";i||(a=kn.call(n),a="[object Arguments]"==a?"[object Object]":a),f||(l=kn.call(t),l="[object Arguments]"==l?"[object Object]":l);var p="[object Object]"==a&&!c(n),f="[object Object]"==l&&!c(t),l=a==l;o||(o=[]);var s=J(o,function(t){ +return t[0]===n});return s&&s[1]?s[1]==t:(o.push([n,t]),l&&!p?(t=i||isTypedArray(n)?I(n,t,r,e,u,o):$(n,t,a),o.pop(),t):2&u||(i=p&&An.call(n,"__wrapped__"),a=f&&An.call(t,"__wrapped__"),!i&&!a)?l?(t=q(n,t,r,e,u,o),o.pop(),t):false:(t=r(i?n.value():n,a?t.value():t,e,u,o),o.pop(),t))}function m(n){var t=typeof n;return"function"==t?n:null==n?cn:("object"==t?x:E)(n)}function w(n){n=null==n?n:Object(n);var t,r=[];for(t in n)r.push(t);return r}function O(n,t){var r=-1,e=L(n)?Array(n.length):[];return $n(n,function(n,u,o){ +e[++r]=t(n,u,o)}),e}function x(n){var t=en(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&j(n[u],r[u],an,3)))return false}return true}}function A(n,t){return n=Object(n),P(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function E(n){return function(t){return null==t?an:t[n]}}function k(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e1?r[u-1]:an,o=typeof o=="function"?(u--,o):an;for(t=Object(t);++ef))return false;for(a=true;++iarguments.length,$n)}function U(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Un(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=an),r}}function V(n){var t;if(typeof n!="function")throw new TypeError("Expected a function"); +return t=In(t===an?n.length-1:Un(t),0),function(){for(var r=arguments,e=-1,u=In(r.length-t,0),o=Array(u);++et}function K(n){return Y(n)&&L(n)&&An.call(n,"callee")&&(!Rn.call(n,"callee")||"[object Arguments]"==kn.call(n))}function L(n){return null!=n&&W(zn(n))&&!Q(n)}function Q(n){return n=X(n)?kn.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n}function W(n){return typeof n=="number"&&n>-1&&0==n%1&&9007199254740991>=n; +}function X(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function Y(n){return!!n&&typeof n=="object"}function Z(n){return typeof n=="number"||Y(n)&&"[object Number]"==kn.call(n)}function nn(n){return typeof n=="string"||!Pn(n)&&Y(n)&&"[object String]"==kn.call(n)}function tn(n,t){return t>n}function rn(n){return typeof n=="string"?n:null==n?"":n+""}function en(n){var t=C(n);if(!t&&!L(n))return Dn(Object(n));var r,e=z(n),u=!!e,e=e||[],o=e.length;for(r in n)!An.call(n,r)||u&&("length"==r||f(r,o))||t&&"constructor"==r||e.push(r); +return e}function un(n){for(var t=-1,r=C(n),e=w(n),u=e.length,o=z(n),i=!!o,o=o||[],c=o.length;++t"'`]/g,sn=RegExp(pn.source),hn=/^(?:0|[1-9]\d*)$/,vn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},yn={"function":true,object:true},_n=yn[typeof exports]&&exports&&!exports.nodeType?exports:an,bn=yn[typeof module]&&module&&!module.nodeType?module:an,gn=bn&&bn.exports===_n?_n:an,jn=o(yn[typeof self]&&self),dn=o(yn[typeof window]&&window),mn=o(yn[typeof this]&&this),wn=o(_n&&bn&&typeof global=="object"&&global)||dn!==(mn&&mn.window)&&dn||jn||mn||Function("return this")(),On=Array.prototype,xn=Object.prototype,An=xn.hasOwnProperty,En=0,kn=xn.toString,Nn=wn._,Sn=wn.Reflect,Tn=Sn?Sn.f:an,Fn=Object.create,Rn=xn.propertyIsEnumerable,Bn=wn.isFinite,Dn=Object.keys,In=Math.max,$n=function(n,t){ +return function(r,e){if(null==r)return r;if(!L(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++oe&&!c||!i||u&&!f&&a||o&&a){r=1;break n}if(e>r&&!u||!a||c&&!o&&i||f&&i){r=-1;break n}}r=0}return r||n.b-t.b; +}),E("c"))},a.tap=function(n,t){return t(n),n},a.thru=function(n,t){return t(n)},a.toArray=function(n){return L(n)?n.length?N(n):[]:on(n)},a.values=on,a.extend=Kn,fn(a,a),a.clone=function(n){return X(n)?Pn(n)?N(n):F(n,en(n)):n},a.escape=function(n){return(n=rn(n))&&sn.test(n)?n.replace(pn,i):n},a.every=function(n,t,r){return t=r?an:t,v(n,m(t))},a.find=J,a.forEach=M,a.has=function(n,t){return null!=n&&An.call(n,t)},a.head=G,a.identity=cn,a.indexOf=function(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?In(e+r,0):r:0, +r=(r||0)-1;for(var u=t===t;++r { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); +}); + +module.exports = countBy; diff --git a/www/node_modules/lodash/create.js b/www/node_modules/lodash/create.js new file mode 100644 index 0000000..dddbd29 --- /dev/null +++ b/www/node_modules/lodash/create.js @@ -0,0 +1,41 @@ +var baseAssign = require('./_baseAssign'), + baseCreate = require('./_baseCreate'); + +/** + * Creates an object that inherits from the `prototype` object. If a `properties` + * object is given its own enumerable properties are assigned to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties) { + var result = baseCreate(prototype); + return properties ? baseAssign(result, properties) : result; +} + +module.exports = create; diff --git a/www/node_modules/lodash/curry.js b/www/node_modules/lodash/curry.js new file mode 100644 index 0000000..1c5e8a5 --- /dev/null +++ b/www/node_modules/lodash/curry.js @@ -0,0 +1,56 @@ +var createWrapper = require('./_createWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_FLAG = 8; + +/** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ +function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; +} + +// Assign default placeholders. +curry.placeholder = {}; + +module.exports = curry; diff --git a/www/node_modules/lodash/curryRight.js b/www/node_modules/lodash/curryRight.js new file mode 100644 index 0000000..8521fdc --- /dev/null +++ b/www/node_modules/lodash/curryRight.js @@ -0,0 +1,53 @@ +var createWrapper = require('./_createWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_RIGHT_FLAG = 16; + +/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ +function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; +} + +// Assign default placeholders. +curryRight.placeholder = {}; + +module.exports = curryRight; diff --git a/www/node_modules/lodash/date.js b/www/node_modules/lodash/date.js new file mode 100644 index 0000000..cbf5b41 --- /dev/null +++ b/www/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./now') +}; diff --git a/www/node_modules/lodash/debounce.js b/www/node_modules/lodash/debounce.js new file mode 100644 index 0000000..45f52ce --- /dev/null +++ b/www/node_modules/lodash/debounce.js @@ -0,0 +1,177 @@ +var isObject = require('./isObject'), + now = require('./now'), + toNumber = require('./toNumber'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide an options object to indicate whether `func` should be invoked on + * the leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent calls + * to the debounced function return the result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it's invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + leading = false, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(toNumber(options.maxWait) || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + args = maxTimeoutId = thisArg = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function flush() { + if ((timeoutId && trailingCall) || (maxTimeoutId && trailing)) { + result = func.apply(thisArg, args); + } + cancel(); + return result; + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!lastCalled && !maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled); + + var isCalled = (remaining <= 0 || remaining > maxWait) && + (leading || maxTimeoutId); + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; diff --git a/www/node_modules/lodash/deburr.js b/www/node_modules/lodash/deburr.js new file mode 100644 index 0000000..7e75034 --- /dev/null +++ b/www/node_modules/lodash/deburr.js @@ -0,0 +1,39 @@ +var deburrLetter = require('./_deburrLetter'), + toString = require('./toString'); + +/** Used to match latin-1 supplementary letters (excluding mathematical operators). */ +var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0'; + +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']'; + +/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ +var reComboMark = RegExp(rsCombo, 'g'); + +/** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); +} + +module.exports = deburr; diff --git a/www/node_modules/lodash/defaults.js b/www/node_modules/lodash/defaults.js new file mode 100644 index 0000000..eded284 --- /dev/null +++ b/www/node_modules/lodash/defaults.js @@ -0,0 +1,30 @@ +var apply = require('./_apply'), + assignInDefaults = require('./_assignInDefaults'), + assignInWith = require('./assignInWith'), + rest = require('./rest'); + +/** + * Assigns own and inherited enumerable properties of source objects to the + * destination object for all destination properties that resolve to `undefined`. + * Source objects are applied from left to right. Once a property is set, + * additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ +var defaults = rest(function(args) { + args.push(undefined, assignInDefaults); + return apply(assignInWith, undefined, args); +}); + +module.exports = defaults; diff --git a/www/node_modules/lodash/defaultsDeep.js b/www/node_modules/lodash/defaultsDeep.js new file mode 100644 index 0000000..c495aee --- /dev/null +++ b/www/node_modules/lodash/defaultsDeep.js @@ -0,0 +1,29 @@ +var apply = require('./_apply'), + mergeDefaults = require('./_mergeDefaults'), + mergeWith = require('./mergeWith'), + rest = require('./rest'); + +/** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); + * // => { 'user': { 'name': 'barney', 'age': 36 } } + * + */ +var defaultsDeep = rest(function(args) { + args.push(undefined, mergeDefaults); + return apply(mergeWith, undefined, args); +}); + +module.exports = defaultsDeep; diff --git a/www/node_modules/lodash/defer.js b/www/node_modules/lodash/defer.js new file mode 100644 index 0000000..f492b3d --- /dev/null +++ b/www/node_modules/lodash/defer.js @@ -0,0 +1,25 @@ +var baseDelay = require('./_baseDelay'), + rest = require('./rest'); + +/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => logs 'deferred' after one or more milliseconds + */ +var defer = rest(function(func, args) { + return baseDelay(func, 1, args); +}); + +module.exports = defer; diff --git a/www/node_modules/lodash/delay.js b/www/node_modules/lodash/delay.js new file mode 100644 index 0000000..28d070c --- /dev/null +++ b/www/node_modules/lodash/delay.js @@ -0,0 +1,27 @@ +var baseDelay = require('./_baseDelay'), + rest = require('./rest'), + toNumber = require('./toNumber'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ +var delay = rest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); +}); + +module.exports = delay; diff --git a/www/node_modules/lodash/difference.js b/www/node_modules/lodash/difference.js new file mode 100644 index 0000000..34c26e8 --- /dev/null +++ b/www/node_modules/lodash/difference.js @@ -0,0 +1,29 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + isArrayLikeObject = require('./isArrayLikeObject'), + rest = require('./rest'); + +/** + * Creates an array of unique `array` values not included in the other + * given arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. The order of result values is determined by the + * order they occur in the first array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([3, 2, 1], [4, 2]); + * // => [3, 1] + */ +var difference = rest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true)) + : []; +}); + +module.exports = difference; diff --git a/www/node_modules/lodash/differenceBy.js b/www/node_modules/lodash/differenceBy.js new file mode 100644 index 0000000..8c5831e --- /dev/null +++ b/www/node_modules/lodash/differenceBy.js @@ -0,0 +1,40 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseIteratee = require('./_baseIteratee'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'), + rest = require('./rest'); + +/** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. Result values are chosen from the first array. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); + * // => [3.1, 1.3] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ +var differenceBy = rest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true), baseIteratee(iteratee)) + : []; +}); + +module.exports = differenceBy; diff --git a/www/node_modules/lodash/differenceWith.js b/www/node_modules/lodash/differenceWith.js new file mode 100644 index 0000000..88a4a0b --- /dev/null +++ b/www/node_modules/lodash/differenceWith.js @@ -0,0 +1,37 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'), + rest = require('./rest'); + +/** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. Result values + * are chosen from the first array. The comparator is invoked with two arguments: + * (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ +var differenceWith = rest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true), undefined, comparator) + : []; +}); + +module.exports = differenceWith; diff --git a/www/node_modules/lodash/drop.js b/www/node_modules/lodash/drop.js new file mode 100644 index 0000000..3094995 --- /dev/null +++ b/www/node_modules/lodash/drop.js @@ -0,0 +1,37 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = drop; diff --git a/www/node_modules/lodash/dropRight.js b/www/node_modules/lodash/dropRight.js new file mode 100644 index 0000000..61e1268 --- /dev/null +++ b/www/node_modules/lodash/dropRight.js @@ -0,0 +1,38 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/www/node_modules/lodash/dropRightWhile.js b/www/node_modules/lodash/dropRightWhile.js new file mode 100644 index 0000000..0c04ed2 --- /dev/null +++ b/www/node_modules/lodash/dropRightWhile.js @@ -0,0 +1,44 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true, true) + : []; +} + +module.exports = dropRightWhile; diff --git a/www/node_modules/lodash/dropWhile.js b/www/node_modules/lodash/dropWhile.js new file mode 100644 index 0000000..72f9448 --- /dev/null +++ b/www/node_modules/lodash/dropWhile.js @@ -0,0 +1,44 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; +} + +module.exports = dropWhile; diff --git a/www/node_modules/lodash/each.js b/www/node_modules/lodash/each.js new file mode 100644 index 0000000..8800f42 --- /dev/null +++ b/www/node_modules/lodash/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/www/node_modules/lodash/eachRight.js b/www/node_modules/lodash/eachRight.js new file mode 100644 index 0000000..3252b2a --- /dev/null +++ b/www/node_modules/lodash/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/www/node_modules/lodash/endsWith.js b/www/node_modules/lodash/endsWith.js new file mode 100644 index 0000000..5da6b5e --- /dev/null +++ b/www/node_modules/lodash/endsWith.js @@ -0,0 +1,39 @@ +var baseClamp = require('./_baseClamp'), + toInteger = require('./toInteger'), + toString = require('./toString'); + +/** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search from. + * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ +function endsWith(string, target, position) { + string = toString(string); + target = typeof target == 'string' ? target : (target + ''); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + position -= target.length; + return position >= 0 && string.indexOf(target, position) == position; +} + +module.exports = endsWith; diff --git a/www/node_modules/lodash/eq.js b/www/node_modules/lodash/eq.js new file mode 100644 index 0000000..5df222d --- /dev/null +++ b/www/node_modules/lodash/eq.js @@ -0,0 +1,35 @@ +/** + * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; diff --git a/www/node_modules/lodash/escape.js b/www/node_modules/lodash/escape.js new file mode 100644 index 0000000..62857ed --- /dev/null +++ b/www/node_modules/lodash/escape.js @@ -0,0 +1,47 @@ +var escapeHtmlChar = require('./_escapeHtmlChar'), + toString = require('./toString'); + +/** Used to match HTML entities and HTML characters. */ +var reUnescapedHtml = /[&<>"'`]/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +/** + * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in IE < 9, they can break out of + * attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; +} + +module.exports = escape; diff --git a/www/node_modules/lodash/escapeRegExp.js b/www/node_modules/lodash/escapeRegExp.js new file mode 100644 index 0000000..52878c1 --- /dev/null +++ b/www/node_modules/lodash/escapeRegExp.js @@ -0,0 +1,28 @@ +var toString = require('./toString'); + +/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + +/** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ +function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; +} + +module.exports = escapeRegExp; diff --git a/www/node_modules/lodash/every.js b/www/node_modules/lodash/every.js new file mode 100644 index 0000000..d100d0d --- /dev/null +++ b/www/node_modules/lodash/every.js @@ -0,0 +1,49 @@ +var arrayEvery = require('./_arrayEvery'), + baseEvery = require('./_baseEvery'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = every; diff --git a/www/node_modules/lodash/extend.js b/www/node_modules/lodash/extend.js new file mode 100644 index 0000000..e00166c --- /dev/null +++ b/www/node_modules/lodash/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/www/node_modules/lodash/extendWith.js b/www/node_modules/lodash/extendWith.js new file mode 100644 index 0000000..dbdcb3b --- /dev/null +++ b/www/node_modules/lodash/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/www/node_modules/lodash/fill.js b/www/node_modules/lodash/fill.js new file mode 100644 index 0000000..4c0119f --- /dev/null +++ b/www/node_modules/lodash/fill.js @@ -0,0 +1,44 @@ +var baseFill = require('./_baseFill'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ +function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/www/node_modules/lodash/filter.js b/www/node_modules/lodash/filter.js new file mode 100644 index 0000000..1df81c4 --- /dev/null +++ b/www/node_modules/lodash/filter.js @@ -0,0 +1,44 @@ +var arrayFilter = require('./_arrayFilter'), + baseFilter = require('./_baseFilter'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ +function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = filter; diff --git a/www/node_modules/lodash/find.js b/www/node_modules/lodash/find.js new file mode 100644 index 0000000..c2ba356 --- /dev/null +++ b/www/node_modules/lodash/find.js @@ -0,0 +1,50 @@ +var baseEach = require('./_baseEach'), + baseFind = require('./_baseFind'), + baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +function find(collection, predicate) { + predicate = baseIteratee(predicate, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, baseEach); +} + +module.exports = find; diff --git a/www/node_modules/lodash/findIndex.js b/www/node_modules/lodash/findIndex.js new file mode 100644 index 0000000..5343fd1 --- /dev/null +++ b/www/node_modules/lodash/findIndex.js @@ -0,0 +1,43 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate) { + return (array && array.length) + ? baseFindIndex(array, baseIteratee(predicate, 3)) + : -1; +} + +module.exports = findIndex; diff --git a/www/node_modules/lodash/findKey.js b/www/node_modules/lodash/findKey.js new file mode 100644 index 0000000..95d01f3 --- /dev/null +++ b/www/node_modules/lodash/findKey.js @@ -0,0 +1,42 @@ +var baseFind = require('./_baseFind'), + baseForOwn = require('./_baseForOwn'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ +function findKey(object, predicate) { + return baseFind(object, baseIteratee(predicate, 3), baseForOwn, true); +} + +module.exports = findKey; diff --git a/www/node_modules/lodash/findLast.js b/www/node_modules/lodash/findLast.js new file mode 100644 index 0000000..0e5d593 --- /dev/null +++ b/www/node_modules/lodash/findLast.js @@ -0,0 +1,33 @@ +var baseEachRight = require('./_baseEachRight'), + baseFind = require('./_baseFind'), + baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ +function findLast(collection, predicate) { + predicate = baseIteratee(predicate, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, true); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, baseEachRight); +} + +module.exports = findLast; diff --git a/www/node_modules/lodash/findLastIndex.js b/www/node_modules/lodash/findLastIndex.js new file mode 100644 index 0000000..2e62b36 --- /dev/null +++ b/www/node_modules/lodash/findLastIndex.js @@ -0,0 +1,43 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ +function findLastIndex(array, predicate) { + return (array && array.length) + ? baseFindIndex(array, baseIteratee(predicate, 3), true) + : -1; +} + +module.exports = findLastIndex; diff --git a/www/node_modules/lodash/findLastKey.js b/www/node_modules/lodash/findLastKey.js new file mode 100644 index 0000000..0380b07 --- /dev/null +++ b/www/node_modules/lodash/findLastKey.js @@ -0,0 +1,42 @@ +var baseFind = require('./_baseFind'), + baseForOwnRight = require('./_baseForOwnRight'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ +function findLastKey(object, predicate) { + return baseFind(object, baseIteratee(predicate, 3), baseForOwnRight, true); +} + +module.exports = findLastKey; diff --git a/www/node_modules/lodash/flatMap.js b/www/node_modules/lodash/flatMap.js new file mode 100644 index 0000000..0117bb4 --- /dev/null +++ b/www/node_modules/lodash/flatMap.js @@ -0,0 +1,28 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** + * Creates an array of flattened values by running each element in `collection` + * through `iteratee` and concating its result to the other mapped values. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); +} + +module.exports = flatMap; diff --git a/www/node_modules/lodash/flatten.js b/www/node_modules/lodash/flatten.js new file mode 100644 index 0000000..b8f701d --- /dev/null +++ b/www/node_modules/lodash/flatten.js @@ -0,0 +1,21 @@ +var baseFlatten = require('./_baseFlatten'); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; diff --git a/www/node_modules/lodash/flattenDeep.js b/www/node_modules/lodash/flattenDeep.js new file mode 100644 index 0000000..b96cd56 --- /dev/null +++ b/www/node_modules/lodash/flattenDeep.js @@ -0,0 +1,24 @@ +var baseFlatten = require('./_baseFlatten'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ +function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, INFINITY) : []; +} + +module.exports = flattenDeep; diff --git a/www/node_modules/lodash/flattenDepth.js b/www/node_modules/lodash/flattenDepth.js new file mode 100644 index 0000000..e045711 --- /dev/null +++ b/www/node_modules/lodash/flattenDepth.js @@ -0,0 +1,32 @@ +var baseFlatten = require('./_baseFlatten'), + toInteger = require('./toInteger'); + +/** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ +function flattenDepth(array, depth) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); +} + +module.exports = flattenDepth; diff --git a/www/node_modules/lodash/flip.js b/www/node_modules/lodash/flip.js new file mode 100644 index 0000000..6e14896 --- /dev/null +++ b/www/node_modules/lodash/flip.js @@ -0,0 +1,27 @@ +var createWrapper = require('./_createWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var FLIP_FLAG = 512; + +/** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ +function flip(func) { + return createWrapper(func, FLIP_FLAG); +} + +module.exports = flip; diff --git a/www/node_modules/lodash/floor.js b/www/node_modules/lodash/floor.js new file mode 100644 index 0000000..9bbf097 --- /dev/null +++ b/www/node_modules/lodash/floor.js @@ -0,0 +1,25 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded down to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} number The number to round down. + * @param {number} [precision=0] The precision to round down to. + * @returns {number} Returns the rounded down number. + * @example + * + * _.floor(4.006); + * // => 4 + * + * _.floor(0.046, 2); + * // => 0.04 + * + * _.floor(4060, -2); + * // => 4000 + */ +var floor = createRound('floor'); + +module.exports = floor; diff --git a/www/node_modules/lodash/flow.js b/www/node_modules/lodash/flow.js new file mode 100644 index 0000000..b773405 --- /dev/null +++ b/www/node_modules/lodash/flow.js @@ -0,0 +1,25 @@ +var createFlow = require('./_createFlow'); + +/** + * Creates a function that returns the result of invoking the given functions + * with the `this` binding of the created function, where each successive + * invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @category Util + * @param {...(Function|Function[])} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow(_.add, square); + * addSquare(1, 2); + * // => 9 + */ +var flow = createFlow(); + +module.exports = flow; diff --git a/www/node_modules/lodash/flowRight.js b/www/node_modules/lodash/flowRight.js new file mode 100644 index 0000000..e844822 --- /dev/null +++ b/www/node_modules/lodash/flowRight.js @@ -0,0 +1,24 @@ +var createFlow = require('./_createFlow'); + +/** + * This method is like `_.flow` except that it creates a function that + * invokes the given functions from right to left. + * + * @static + * @memberOf _ + * @category Util + * @param {...(Function|Function[])} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight(square, _.add); + * addSquare(1, 2); + * // => 9 + */ +var flowRight = createFlow(true); + +module.exports = flowRight; diff --git a/www/node_modules/lodash/forEach.js b/www/node_modules/lodash/forEach.js new file mode 100644 index 0000000..a11eb22 --- /dev/null +++ b/www/node_modules/lodash/forEach.js @@ -0,0 +1,40 @@ +var arrayEach = require('./_arrayEach'), + baseCastFunction = require('./_baseCastFunction'), + baseEach = require('./_baseEach'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior use `_.forIn` or `_.forOwn` + * for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(value) { + * console.log(value); + * }); + * // => logs `1` then `2` + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ +function forEach(collection, iteratee) { + return (typeof iteratee == 'function' && isArray(collection)) + ? arrayEach(collection, iteratee) + : baseEach(collection, baseCastFunction(iteratee)); +} + +module.exports = forEach; diff --git a/www/node_modules/lodash/forEachRight.js b/www/node_modules/lodash/forEachRight.js new file mode 100644 index 0000000..ea58e7c --- /dev/null +++ b/www/node_modules/lodash/forEachRight.js @@ -0,0 +1,30 @@ +var arrayEachRight = require('./_arrayEachRight'), + baseCastFunction = require('./_baseCastFunction'), + baseEachRight = require('./_baseEachRight'), + isArray = require('./isArray'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => logs `2` then `1` + */ +function forEachRight(collection, iteratee) { + return (typeof iteratee == 'function' && isArray(collection)) + ? arrayEachRight(collection, iteratee) + : baseEachRight(collection, baseCastFunction(iteratee)); +} + +module.exports = forEachRight; diff --git a/www/node_modules/lodash/forIn.js b/www/node_modules/lodash/forIn.js new file mode 100644 index 0000000..747175f --- /dev/null +++ b/www/node_modules/lodash/forIn.js @@ -0,0 +1,37 @@ +var baseCastFunction = require('./_baseCastFunction'), + baseFor = require('./_baseFor'), + keysIn = require('./keysIn'); + +/** + * Iterates over own and inherited enumerable properties of an object invoking + * `iteratee` for each property. The iteratee is invoked with three arguments: + * (value, key, object). Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a', 'b', then 'c' (iteration order is not guaranteed) + */ +function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, baseCastFunction(iteratee), keysIn); +} + +module.exports = forIn; diff --git a/www/node_modules/lodash/forInRight.js b/www/node_modules/lodash/forInRight.js new file mode 100644 index 0000000..fa74e9e --- /dev/null +++ b/www/node_modules/lodash/forInRight.js @@ -0,0 +1,35 @@ +var baseCastFunction = require('./_baseCastFunction'), + baseForRight = require('./_baseForRight'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c' + */ +function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, baseCastFunction(iteratee), keysIn); +} + +module.exports = forInRight; diff --git a/www/node_modules/lodash/forOwn.js b/www/node_modules/lodash/forOwn.js new file mode 100644 index 0000000..ac5ddc6 --- /dev/null +++ b/www/node_modules/lodash/forOwn.js @@ -0,0 +1,34 @@ +var baseCastFunction = require('./_baseCastFunction'), + baseForOwn = require('./_baseForOwn'); + +/** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The iteratee is invoked with three arguments: + * (value, key, object). Iteratee functions may exit iteration early by + * explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ +function forOwn(object, iteratee) { + return object && baseForOwn(object, baseCastFunction(iteratee)); +} + +module.exports = forOwn; diff --git a/www/node_modules/lodash/forOwnRight.js b/www/node_modules/lodash/forOwnRight.js new file mode 100644 index 0000000..7bda5de --- /dev/null +++ b/www/node_modules/lodash/forOwnRight.js @@ -0,0 +1,32 @@ +var baseCastFunction = require('./_baseCastFunction'), + baseForOwnRight = require('./_baseForOwnRight'); + +/** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b' + */ +function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, baseCastFunction(iteratee)); +} + +module.exports = forOwnRight; diff --git a/www/node_modules/lodash/fp.js b/www/node_modules/lodash/fp.js new file mode 100644 index 0000000..e372dbb --- /dev/null +++ b/www/node_modules/lodash/fp.js @@ -0,0 +1,2 @@ +var _ = require('./lodash.min').runInContext(); +module.exports = require('./fp/_baseConvert')(_, _); diff --git a/www/node_modules/lodash/fp/_baseConvert.js b/www/node_modules/lodash/fp/_baseConvert.js new file mode 100644 index 0000000..b074100 --- /dev/null +++ b/www/node_modules/lodash/fp/_baseConvert.js @@ -0,0 +1,319 @@ +var mapping = require('./_mapping'), + mutateMap = mapping.mutate, + fallbackHolder = {}; + +/** + * The base implementation of `convert` which accepts a `util` object of methods + * required to perform conversions. + * + * @param {Object} util The util object. + * @param {string} name The name of the function to wrap. + * @param {Function} func The function to wrap. + * @param {Object} [options] The options object. + * @param {boolean} [options.cap=true] Specify capping iteratee arguments. + * @param {boolean} [options.curry=true] Specify currying. + * @param {boolean} [options.fixed=true] Specify fixed arity. + * @param {boolean} [options.immutable=true] Specify immutable operations. + * @param {boolean} [options.rearg=true] Specify rearranging arguments. + * @returns {Function|Object} Returns the converted function or object. + */ +function baseConvert(util, name, func, options) { + var setPlaceholder, + isLib = typeof name == 'function', + isObj = name === Object(name); + + if (isObj) { + options = func; + func = name; + name = undefined; + } + if (func == null) { + throw new TypeError; + } + options || (options = {}); + + var config = { + 'cap': 'cap' in options ? options.cap : true, + 'curry': 'curry' in options ? options.curry : true, + 'fixed': 'fixed' in options ? options.fixed : true, + 'immutable': 'immutable' in options ? options.immutable : true, + 'rearg': 'rearg' in options ? options.rearg : true + }; + + var forceRearg = ('rearg' in options) && options.rearg, + placeholder = isLib ? func : fallbackHolder; + + var helpers = isLib ? func : { + 'ary': util.ary, + 'clone': util.clone, + 'curry': util.curry, + 'forEach': util.forEach, + 'isArray': util.isArray, + 'isFunction': util.isFunction, + 'iteratee': util.iteratee, + 'keys': util.keys, + 'rearg': util.rearg, + 'spread': util.spread, + 'toPath': util.toPath + }; + + var ary = helpers.ary, + clone = helpers.clone, + curry = helpers.curry, + each = helpers.forEach, + isArray = helpers.isArray, + isFunction = helpers.isFunction, + keys = helpers.keys, + rearg = helpers.rearg, + spread = helpers.spread, + toPath = helpers.toPath; + + var aryMethodKeys = keys(mapping.aryMethod); + + var baseArity = function(func, n) { + return n == 2 + ? function(a, b) { return func.apply(undefined, arguments); } + : function(a) { return func.apply(undefined, arguments); }; + }; + + var baseAry = function(func, n) { + return n == 2 + ? function(a, b) { return func(a, b); } + : function(a) { return func(a); }; + }; + + var cloneArray = function(array) { + var length = array ? array.length : 0, + result = Array(length); + + while (length--) { + result[length] = array[length]; + } + return result; + }; + + var cloneByPath = function(object, path) { + path = toPath(path); + + var index = -1, + length = path.length, + result = clone(Object(object)), + nested = result; + + while (nested != null && ++index < length) { + var key = path[index], + value = nested[key]; + + if (value != null) { + nested[key] = clone(Object(value)); + } + nested = nested[key]; + } + return result; + }; + + var createCloner = function(func) { + return function(object) { + return func({}, object); + }; + }; + + var immutWrap = function(func, cloner) { + return function() { + var length = arguments.length; + if (!length) { + return result; + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var result = args[0] = cloner.apply(undefined, args); + func.apply(undefined, args); + return result; + }; + }; + + var iterateeAry = function(func, n) { + return overArg(func, function(func) { + return typeof func == 'function' ? baseAry(func, n) : func; + }); + }; + + var iterateeRearg = function(func, indexes) { + return overArg(func, function(func) { + var n = indexes.length; + return baseArity(rearg(baseAry(func, n), indexes), n); + }); + }; + + var overArg = function(func, iteratee, retArg) { + return function() { + var length = arguments.length; + if (!length) { + return func(); + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var index = config.rearg ? 0 : (length - 1); + args[index] = iteratee(args[index]); + return func.apply(undefined, args); + }; + }; + + var wrappers = { + 'castArray': function(castArray) { + return function() { + var value = arguments[0]; + return isArray(value) + ? castArray(cloneArray(value)) + : castArray.apply(undefined, arguments); + }; + }, + 'iteratee': function(iteratee) { + return function() { + var func = arguments[0], + arity = arguments[1], + result = iteratee(func, arity), + length = result.length; + + if (config.cap && typeof arity == 'number') { + arity = arity > 2 ? (arity - 2) : 1; + return (length && length <= arity) ? result : baseAry(result, arity); + } + return result; + }; + }, + 'mixin': function(mixin) { + return function(source) { + var func = this; + if (!isFunction(func)) { + return mixin(func, Object(source)); + } + var methods = [], + methodNames = []; + + each(keys(source), function(key) { + var value = source[key]; + if (isFunction(value)) { + methodNames.push(key); + methods.push(func.prototype[key]); + } + }); + + mixin(func, Object(source)); + + each(methodNames, function(methodName, index) { + var method = methods[index]; + if (isFunction(method)) { + func.prototype[methodName] = method; + } else { + delete func.prototype[methodName]; + } + }); + return func; + }; + }, + 'runInContext': function(runInContext) { + return function(context) { + return baseConvert(util, runInContext(context), options); + }; + } + }; + + var wrap = function(name, func) { + name = mapping.aliasToReal[name] || name; + var wrapper = wrappers[name]; + if (wrapper) { + return wrapper(func); + } + var wrapped = func; + if (config.immutable) { + if (mutateMap.array[name]) { + wrapped = immutWrap(func, cloneArray); + } + else if (mutateMap.object[name]) { + wrapped = immutWrap(func, createCloner(func)); + } + else if (mutateMap.set[name]) { + wrapped = immutWrap(func, cloneByPath); + } + } + var result; + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(otherName) { + if (name == otherName) { + var aryN = !isLib && mapping.iterateeAry[name], + reargIndexes = mapping.iterateeRearg[name], + spreadStart = mapping.methodSpread[name]; + + result = wrapped; + if (config.fixed) { + result = spreadStart === undefined + ? ary(result, aryKey) + : spread(result, spreadStart); + } + if (config.rearg && aryKey > 1 && (forceRearg || !mapping.skipRearg[name])) { + result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[aryKey]); + } + if (config.cap) { + if (reargIndexes) { + result = iterateeRearg(result, reargIndexes); + } else if (aryN) { + result = iterateeAry(result, aryN); + } + } + if (config.curry && aryKey > 1) { + result = curry(result, aryKey); + } + return false; + } + }); + return !result; + }); + + result || (result = wrapped); + if (mapping.placeholder[name]) { + setPlaceholder = true; + func.placeholder = result.placeholder = placeholder; + } + return result; + }; + + if (!isObj) { + return wrap(name, func); + } + var _ = func; + + // Iterate over methods for the current ary cap. + var pairs = []; + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(key) { + var func = _[mapping.remap[key] || key]; + if (func) { + pairs.push([key, wrap(key, func)]); + } + }); + }); + + // Assign to `_` leaving `_.prototype` unchanged to allow chaining. + each(pairs, function(pair) { + _[pair[0]] = pair[1]; + }); + + if (setPlaceholder) { + _.placeholder = placeholder; + } + // Wrap the lodash method and its aliases. + each(keys(_), function(key) { + each(mapping.realToAlias[key] || [], function(alias) { + _[alias] = _[key]; + }); + }); + + return _; +} + +module.exports = baseConvert; diff --git a/www/node_modules/lodash/fp/_convertBrowser.js b/www/node_modules/lodash/fp/_convertBrowser.js new file mode 100644 index 0000000..fbd2174 --- /dev/null +++ b/www/node_modules/lodash/fp/_convertBrowser.js @@ -0,0 +1,17 @@ +var baseConvert = require('./_baseConvert'); + +/** + * Converts `lodash` to an immutable auto-curried iteratee-first data-last version. + * + * @param {Function} lodash The lodash function. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function} Returns the converted `lodash`. + */ +function browserConvert(lodash, options) { + return baseConvert(lodash, lodash, options); +} + +if (typeof _ == 'function') { + _ = browserConvert(_.runInContext()); +} +module.exports = browserConvert; diff --git a/www/node_modules/lodash/fp/_mapping.js b/www/node_modules/lodash/fp/_mapping.js new file mode 100644 index 0000000..1d33d4b --- /dev/null +++ b/www/node_modules/lodash/fp/_mapping.js @@ -0,0 +1,243 @@ +/** Used to map aliases to their real names. */ +exports.aliasToReal = { + '__': 'placeholder', + 'all': 'some', + 'allPass': 'overEvery', + 'apply': 'spread', + 'assoc': 'set', + 'assocPath': 'set', + 'compose': 'flowRight', + 'contains': 'includes', + 'dissoc': 'unset', + 'dissocPath': 'unset', + 'each': 'forEach', + 'eachRight': 'forEachRight', + 'equals': 'isEqual', + 'extend': 'assignIn', + 'extendWith': 'assignInWith', + 'first': 'head', + 'init': 'initial', + 'mapObj': 'mapValues', + 'omitAll': 'omit', + 'nAry': 'ary', + 'path': 'get', + 'pathEq': 'matchesProperty', + 'pathOr': 'getOr', + 'pickAll': 'pick', + 'pipe': 'flow', + 'prop': 'get', + 'propOf': 'propertyOf', + 'propOr': 'getOr', + 'somePass': 'overSome', + 'unapply': 'rest', + 'unnest': 'flatten', + 'useWith': 'overArgs', + 'whereEq': 'filter', + 'zipObj': 'zipObject' +}; + +/** Used to map ary to method names. */ +exports.aryMethod = { + '1': [ + 'attempt', 'castArray', 'ceil', 'create', 'curry', 'curryRight', 'floor', + 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin', + 'over', 'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext', + 'spread', 'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words' + ], + '2': [ + 'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey', + 'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN', + 'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference', + 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every', + 'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex', + 'findLastKey', 'flatMap', 'flattenDepth', 'forEach', 'forEachRight', 'forIn', + 'forInRight', 'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has', + 'hasIn', 'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap', + 'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map', + 'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit', + 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial', + 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll', 'pullAt', + 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', 'repeat', 'result', + 'sampleSize', 'some', 'sortBy', 'sortedIndex', 'sortedIndexOf', 'sortedLastIndex', + 'sortedLastIndexOf', 'sortedUniqBy', 'split', 'startsWith', 'subtract', 'sumBy', + 'take', 'takeRight', 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', + 'times', 'trimChars', 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', + 'uniqBy', 'uniqWith', 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', + 'zipObject', 'zipObjectDeep' + ], + '3': [ + 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', + 'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith', + 'isMatchWith', 'mergeWith', 'orderBy', 'pullAllBy', 'pullAllWith', 'reduce', + 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', + 'transform', 'unionBy', 'unionWith', 'update', 'xorBy', 'xorWith', 'zipWith' + ], + '4': [ + 'fill', 'setWith', 'updateWith' + ] +}; + +/** Used to map ary to rearg configs. */ +exports.aryRearg = { + '2': [1, 0], + '3': [2, 0, 1], + '4': [3, 2, 0, 1] +}; + +/** Used to map method names to their iteratee ary. */ +exports.iterateeAry = { + 'assignWith': 2, + 'assignInWith': 2, + 'cloneDeepWith': 1, + 'cloneWith': 1, + 'dropRightWhile': 1, + 'dropWhile': 1, + 'every': 1, + 'filter': 1, + 'find': 1, + 'findIndex': 1, + 'findKey': 1, + 'findLast': 1, + 'findLastIndex': 1, + 'findLastKey': 1, + 'flatMap': 1, + 'forEach': 1, + 'forEachRight': 1, + 'forIn': 1, + 'forInRight': 1, + 'forOwn': 1, + 'forOwnRight': 1, + 'isEqualWith': 2, + 'isMatchWith': 2, + 'map': 1, + 'mapKeys': 1, + 'mapValues': 1, + 'partition': 1, + 'reduce': 2, + 'reduceRight': 2, + 'reject': 1, + 'remove': 1, + 'some': 1, + 'takeRightWhile': 1, + 'takeWhile': 1, + 'times': 1, + 'transform': 2 +}; + +/** Used to map method names to iteratee rearg configs. */ +exports.iterateeRearg = { + 'mapKeys': [1] +}; + +/** Used to map method names to rearg configs. */ +exports.methodRearg = { + 'assignInWith': [1, 2, 0], + 'assignWith': [1, 2, 0], + 'getOr': [2, 1, 0], + 'isMatchWith': [2, 1, 0], + 'mergeWith': [1, 2, 0], + 'pullAllBy': [2, 1, 0], + 'pullAllWith': [2, 1, 0], + 'setWith': [3, 1, 2, 0], + 'sortedIndexBy': [2, 1, 0], + 'sortedLastIndexBy': [2, 1, 0], + 'updateWith': [3, 1, 2, 0], + 'zipWith': [1, 2, 0] +}; + +/** Used to map method names to spread configs. */ +exports.methodSpread = { + 'partial': 1, + 'partialRight': 1 +}; + +/** Used to identify methods which mutate arrays or objects. */ +exports.mutate = { + 'array': { + 'fill': true, + 'pull': true, + 'pullAll': true, + 'pullAllBy': true, + 'pullAllWith': true, + 'pullAt': true, + 'remove': true, + 'reverse': true + }, + 'object': { + 'assign': true, + 'assignIn': true, + 'assignInWith': true, + 'assignWith': true, + 'defaults': true, + 'defaultsDeep': true, + 'merge': true, + 'mergeWith': true + }, + 'set': { + 'set': true, + 'setWith': true, + 'unset': true, + 'update': true, + 'updateWith': true + } +}; + +/** Used to track methods with placeholder support */ +exports.placeholder = { + 'bind': true, + 'bindKey': true, + 'curry': true, + 'curryRight': true, + 'partial': true, + 'partialRight': true +}; + +/** Used to map real names to their aliases. */ +exports.realToAlias = (function() { + var hasOwnProperty = Object.prototype.hasOwnProperty, + object = exports.aliasToReal, + result = {}; + + for (var key in object) { + var value = object[key]; + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + } + return result; +}()); + +/** Used to map method names to other names. */ +exports.remap = { + 'curryN': 'curry', + 'curryRightN': 'curryRight', + 'getOr': 'get', + 'trimChars': 'trim', + 'trimCharsEnd': 'trimEnd', + 'trimCharsStart': 'trimStart' +}; + +/** Used to track methods that skip `_.rearg`. */ +exports.skipRearg = { + 'add': true, + 'assign': true, + 'assignIn': true, + 'concat': true, + 'difference': true, + 'gt': true, + 'gte': true, + 'lt': true, + 'lte': true, + 'matchesProperty': true, + 'merge': true, + 'partial': true, + 'partialRight': true, + 'random': true, + 'range': true, + 'rangeRight': true, + 'subtract': true, + 'zip': true, + 'zipObject': true +}; diff --git a/www/node_modules/lodash/fp/_util.js b/www/node_modules/lodash/fp/_util.js new file mode 100644 index 0000000..afa811b --- /dev/null +++ b/www/node_modules/lodash/fp/_util.js @@ -0,0 +1,13 @@ +module.exports = { + 'ary': require('../ary'), + 'clone': require('../clone'), + 'curry': require('../curry'), + 'forEach': require('../_arrayEach'), + 'isArray': require('../isArray'), + 'isFunction': require('../isFunction'), + 'iteratee': require('../iteratee'), + 'keys': require('../_baseKeys'), + 'rearg': require('../rearg'), + 'spread': require('../spread'), + 'toPath': require('../toPath') +}; diff --git a/www/node_modules/lodash/fp/add.js b/www/node_modules/lodash/fp/add.js new file mode 100644 index 0000000..c51b8fa --- /dev/null +++ b/www/node_modules/lodash/fp/add.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('add', require('../add')); diff --git a/www/node_modules/lodash/fp/after.js b/www/node_modules/lodash/fp/after.js new file mode 100644 index 0000000..83691b7 --- /dev/null +++ b/www/node_modules/lodash/fp/after.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('after', require('../after')); diff --git a/www/node_modules/lodash/fp/all.js b/www/node_modules/lodash/fp/all.js new file mode 100644 index 0000000..900ac25 --- /dev/null +++ b/www/node_modules/lodash/fp/all.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/www/node_modules/lodash/fp/allPass.js b/www/node_modules/lodash/fp/allPass.js new file mode 100644 index 0000000..79b73ef --- /dev/null +++ b/www/node_modules/lodash/fp/allPass.js @@ -0,0 +1 @@ +module.exports = require('./overEvery'); diff --git a/www/node_modules/lodash/fp/apply.js b/www/node_modules/lodash/fp/apply.js new file mode 100644 index 0000000..2b75712 --- /dev/null +++ b/www/node_modules/lodash/fp/apply.js @@ -0,0 +1 @@ +module.exports = require('./spread'); diff --git a/www/node_modules/lodash/fp/array.js b/www/node_modules/lodash/fp/array.js new file mode 100644 index 0000000..fe939c2 --- /dev/null +++ b/www/node_modules/lodash/fp/array.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../array')); diff --git a/www/node_modules/lodash/fp/ary.js b/www/node_modules/lodash/fp/ary.js new file mode 100644 index 0000000..0f75d18 --- /dev/null +++ b/www/node_modules/lodash/fp/ary.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('ary', require('../ary')); diff --git a/www/node_modules/lodash/fp/assign.js b/www/node_modules/lodash/fp/assign.js new file mode 100644 index 0000000..ad02bcb --- /dev/null +++ b/www/node_modules/lodash/fp/assign.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('assign', require('../assign')); diff --git a/www/node_modules/lodash/fp/assignIn.js b/www/node_modules/lodash/fp/assignIn.js new file mode 100644 index 0000000..1ed4f0d --- /dev/null +++ b/www/node_modules/lodash/fp/assignIn.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('assignIn', require('../assignIn')); diff --git a/www/node_modules/lodash/fp/assignInWith.js b/www/node_modules/lodash/fp/assignInWith.js new file mode 100644 index 0000000..882145d --- /dev/null +++ b/www/node_modules/lodash/fp/assignInWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('assignInWith', require('../assignInWith')); diff --git a/www/node_modules/lodash/fp/assignWith.js b/www/node_modules/lodash/fp/assignWith.js new file mode 100644 index 0000000..1ff0527 --- /dev/null +++ b/www/node_modules/lodash/fp/assignWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('assignWith', require('../assignWith')); diff --git a/www/node_modules/lodash/fp/assoc.js b/www/node_modules/lodash/fp/assoc.js new file mode 100644 index 0000000..7648820 --- /dev/null +++ b/www/node_modules/lodash/fp/assoc.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/www/node_modules/lodash/fp/assocPath.js b/www/node_modules/lodash/fp/assocPath.js new file mode 100644 index 0000000..7648820 --- /dev/null +++ b/www/node_modules/lodash/fp/assocPath.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/www/node_modules/lodash/fp/at.js b/www/node_modules/lodash/fp/at.js new file mode 100644 index 0000000..5da3525 --- /dev/null +++ b/www/node_modules/lodash/fp/at.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('at', require('../at')); diff --git a/www/node_modules/lodash/fp/attempt.js b/www/node_modules/lodash/fp/attempt.js new file mode 100644 index 0000000..d8a3be5 --- /dev/null +++ b/www/node_modules/lodash/fp/attempt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('attempt', require('../attempt')); diff --git a/www/node_modules/lodash/fp/before.js b/www/node_modules/lodash/fp/before.js new file mode 100644 index 0000000..f2954a6 --- /dev/null +++ b/www/node_modules/lodash/fp/before.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('before', require('../before')); diff --git a/www/node_modules/lodash/fp/bind.js b/www/node_modules/lodash/fp/bind.js new file mode 100644 index 0000000..e054a48 --- /dev/null +++ b/www/node_modules/lodash/fp/bind.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('bind', require('../bind')); diff --git a/www/node_modules/lodash/fp/bindAll.js b/www/node_modules/lodash/fp/bindAll.js new file mode 100644 index 0000000..495b75c --- /dev/null +++ b/www/node_modules/lodash/fp/bindAll.js @@ -0,0 +1 @@ +module.exports = require('../bindAll'); diff --git a/www/node_modules/lodash/fp/bindKey.js b/www/node_modules/lodash/fp/bindKey.js new file mode 100644 index 0000000..0b588c7 --- /dev/null +++ b/www/node_modules/lodash/fp/bindKey.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('bindKey', require('../bindKey')); diff --git a/www/node_modules/lodash/fp/camelCase.js b/www/node_modules/lodash/fp/camelCase.js new file mode 100644 index 0000000..328041e --- /dev/null +++ b/www/node_modules/lodash/fp/camelCase.js @@ -0,0 +1 @@ +module.exports = require('../camelCase'); diff --git a/www/node_modules/lodash/fp/capitalize.js b/www/node_modules/lodash/fp/capitalize.js new file mode 100644 index 0000000..186e6d9 --- /dev/null +++ b/www/node_modules/lodash/fp/capitalize.js @@ -0,0 +1 @@ +module.exports = require('../capitalize'); diff --git a/www/node_modules/lodash/fp/castArray.js b/www/node_modules/lodash/fp/castArray.js new file mode 100644 index 0000000..2a75bb9 --- /dev/null +++ b/www/node_modules/lodash/fp/castArray.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('castArray', require('../castArray')); diff --git a/www/node_modules/lodash/fp/ceil.js b/www/node_modules/lodash/fp/ceil.js new file mode 100644 index 0000000..7c3774b --- /dev/null +++ b/www/node_modules/lodash/fp/ceil.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('ceil', require('../ceil')); diff --git a/www/node_modules/lodash/fp/chain.js b/www/node_modules/lodash/fp/chain.js new file mode 100644 index 0000000..2f139cc --- /dev/null +++ b/www/node_modules/lodash/fp/chain.js @@ -0,0 +1 @@ +module.exports = require('../chain'); diff --git a/www/node_modules/lodash/fp/chunk.js b/www/node_modules/lodash/fp/chunk.js new file mode 100644 index 0000000..9d32b8a --- /dev/null +++ b/www/node_modules/lodash/fp/chunk.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('chunk', require('../chunk')); diff --git a/www/node_modules/lodash/fp/clamp.js b/www/node_modules/lodash/fp/clamp.js new file mode 100644 index 0000000..8ec3d9d --- /dev/null +++ b/www/node_modules/lodash/fp/clamp.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('clamp', require('../clamp')); diff --git a/www/node_modules/lodash/fp/clone.js b/www/node_modules/lodash/fp/clone.js new file mode 100644 index 0000000..afd2c15 --- /dev/null +++ b/www/node_modules/lodash/fp/clone.js @@ -0,0 +1 @@ +module.exports = require('../clone'); diff --git a/www/node_modules/lodash/fp/cloneDeep.js b/www/node_modules/lodash/fp/cloneDeep.js new file mode 100644 index 0000000..a17a6f8 --- /dev/null +++ b/www/node_modules/lodash/fp/cloneDeep.js @@ -0,0 +1 @@ +module.exports = require('../cloneDeep'); diff --git a/www/node_modules/lodash/fp/cloneDeepWith.js b/www/node_modules/lodash/fp/cloneDeepWith.js new file mode 100644 index 0000000..01c7fef --- /dev/null +++ b/www/node_modules/lodash/fp/cloneDeepWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('cloneDeepWith', require('../cloneDeepWith')); diff --git a/www/node_modules/lodash/fp/cloneWith.js b/www/node_modules/lodash/fp/cloneWith.js new file mode 100644 index 0000000..9e9d783 --- /dev/null +++ b/www/node_modules/lodash/fp/cloneWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('cloneWith', require('../cloneWith')); diff --git a/www/node_modules/lodash/fp/collection.js b/www/node_modules/lodash/fp/collection.js new file mode 100644 index 0000000..fc8b328 --- /dev/null +++ b/www/node_modules/lodash/fp/collection.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../collection')); diff --git a/www/node_modules/lodash/fp/commit.js b/www/node_modules/lodash/fp/commit.js new file mode 100644 index 0000000..04e9eb9 --- /dev/null +++ b/www/node_modules/lodash/fp/commit.js @@ -0,0 +1 @@ +module.exports = require('../commit'); diff --git a/www/node_modules/lodash/fp/compact.js b/www/node_modules/lodash/fp/compact.js new file mode 100644 index 0000000..b2ed9c7 --- /dev/null +++ b/www/node_modules/lodash/fp/compact.js @@ -0,0 +1 @@ +module.exports = require('../compact'); diff --git a/www/node_modules/lodash/fp/compose.js b/www/node_modules/lodash/fp/compose.js new file mode 100644 index 0000000..1954e94 --- /dev/null +++ b/www/node_modules/lodash/fp/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/www/node_modules/lodash/fp/concat.js b/www/node_modules/lodash/fp/concat.js new file mode 100644 index 0000000..c13a92a --- /dev/null +++ b/www/node_modules/lodash/fp/concat.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('concat', require('../concat')); diff --git a/www/node_modules/lodash/fp/cond.js b/www/node_modules/lodash/fp/cond.js new file mode 100644 index 0000000..a150a89 --- /dev/null +++ b/www/node_modules/lodash/fp/cond.js @@ -0,0 +1 @@ +module.exports = require('../cond'); diff --git a/www/node_modules/lodash/fp/conforms.js b/www/node_modules/lodash/fp/conforms.js new file mode 100644 index 0000000..387dde1 --- /dev/null +++ b/www/node_modules/lodash/fp/conforms.js @@ -0,0 +1 @@ +module.exports = require('../conforms'); diff --git a/www/node_modules/lodash/fp/constant.js b/www/node_modules/lodash/fp/constant.js new file mode 100644 index 0000000..3bcd276 --- /dev/null +++ b/www/node_modules/lodash/fp/constant.js @@ -0,0 +1 @@ +module.exports = require('../constant'); diff --git a/www/node_modules/lodash/fp/contains.js b/www/node_modules/lodash/fp/contains.js new file mode 100644 index 0000000..594722a --- /dev/null +++ b/www/node_modules/lodash/fp/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/www/node_modules/lodash/fp/convert.js b/www/node_modules/lodash/fp/convert.js new file mode 100644 index 0000000..a1d266f --- /dev/null +++ b/www/node_modules/lodash/fp/convert.js @@ -0,0 +1,17 @@ +var baseConvert = require('./_baseConvert'), + util = require('./_util'); + +/** + * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last + * version. If `name` is an object its methods will be converted. + * + * @param {string} name The name of the function to wrap. + * @param {Function} [func] The function to wrap. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function|Object} Returns the converted function or object. + */ +function convert(name, func, options) { + return baseConvert(util, name, func, options); +} + +module.exports = convert; diff --git a/www/node_modules/lodash/fp/countBy.js b/www/node_modules/lodash/fp/countBy.js new file mode 100644 index 0000000..ee4b942 --- /dev/null +++ b/www/node_modules/lodash/fp/countBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('countBy', require('../countBy')); diff --git a/www/node_modules/lodash/fp/create.js b/www/node_modules/lodash/fp/create.js new file mode 100644 index 0000000..bdad771 --- /dev/null +++ b/www/node_modules/lodash/fp/create.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('create', require('../create')); diff --git a/www/node_modules/lodash/fp/curry.js b/www/node_modules/lodash/fp/curry.js new file mode 100644 index 0000000..d64722c --- /dev/null +++ b/www/node_modules/lodash/fp/curry.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('curry', require('../curry')); diff --git a/www/node_modules/lodash/fp/curryN.js b/www/node_modules/lodash/fp/curryN.js new file mode 100644 index 0000000..f33f7fc --- /dev/null +++ b/www/node_modules/lodash/fp/curryN.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('curryN', require('../curry')); diff --git a/www/node_modules/lodash/fp/curryRight.js b/www/node_modules/lodash/fp/curryRight.js new file mode 100644 index 0000000..2e04709 --- /dev/null +++ b/www/node_modules/lodash/fp/curryRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('curryRight', require('../curryRight')); diff --git a/www/node_modules/lodash/fp/curryRightN.js b/www/node_modules/lodash/fp/curryRightN.js new file mode 100644 index 0000000..510e4e4 --- /dev/null +++ b/www/node_modules/lodash/fp/curryRightN.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('curryRightN', require('../curryRight')); diff --git a/www/node_modules/lodash/fp/date.js b/www/node_modules/lodash/fp/date.js new file mode 100644 index 0000000..82cb952 --- /dev/null +++ b/www/node_modules/lodash/fp/date.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../date')); diff --git a/www/node_modules/lodash/fp/debounce.js b/www/node_modules/lodash/fp/debounce.js new file mode 100644 index 0000000..a6b0407 --- /dev/null +++ b/www/node_modules/lodash/fp/debounce.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('debounce', require('../debounce')); diff --git a/www/node_modules/lodash/fp/deburr.js b/www/node_modules/lodash/fp/deburr.js new file mode 100644 index 0000000..f8e1a49 --- /dev/null +++ b/www/node_modules/lodash/fp/deburr.js @@ -0,0 +1 @@ +module.exports = require('../deburr'); diff --git a/www/node_modules/lodash/fp/defaults.js b/www/node_modules/lodash/fp/defaults.js new file mode 100644 index 0000000..7c3b3ab --- /dev/null +++ b/www/node_modules/lodash/fp/defaults.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('defaults', require('../defaults')); diff --git a/www/node_modules/lodash/fp/defaultsDeep.js b/www/node_modules/lodash/fp/defaultsDeep.js new file mode 100644 index 0000000..c7480e2 --- /dev/null +++ b/www/node_modules/lodash/fp/defaultsDeep.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('defaultsDeep', require('../defaultsDeep')); diff --git a/www/node_modules/lodash/fp/defer.js b/www/node_modules/lodash/fp/defer.js new file mode 100644 index 0000000..4126727 --- /dev/null +++ b/www/node_modules/lodash/fp/defer.js @@ -0,0 +1 @@ +module.exports = require('../defer'); diff --git a/www/node_modules/lodash/fp/delay.js b/www/node_modules/lodash/fp/delay.js new file mode 100644 index 0000000..cd3b1c3 --- /dev/null +++ b/www/node_modules/lodash/fp/delay.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('delay', require('../delay')); diff --git a/www/node_modules/lodash/fp/difference.js b/www/node_modules/lodash/fp/difference.js new file mode 100644 index 0000000..aea9ab8 --- /dev/null +++ b/www/node_modules/lodash/fp/difference.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('difference', require('../difference')); diff --git a/www/node_modules/lodash/fp/differenceBy.js b/www/node_modules/lodash/fp/differenceBy.js new file mode 100644 index 0000000..ab65554 --- /dev/null +++ b/www/node_modules/lodash/fp/differenceBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('differenceBy', require('../differenceBy')); diff --git a/www/node_modules/lodash/fp/differenceWith.js b/www/node_modules/lodash/fp/differenceWith.js new file mode 100644 index 0000000..f932a2e --- /dev/null +++ b/www/node_modules/lodash/fp/differenceWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('differenceWith', require('../differenceWith')); diff --git a/www/node_modules/lodash/fp/dissoc.js b/www/node_modules/lodash/fp/dissoc.js new file mode 100644 index 0000000..7ec7be1 --- /dev/null +++ b/www/node_modules/lodash/fp/dissoc.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/www/node_modules/lodash/fp/dissocPath.js b/www/node_modules/lodash/fp/dissocPath.js new file mode 100644 index 0000000..7ec7be1 --- /dev/null +++ b/www/node_modules/lodash/fp/dissocPath.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/www/node_modules/lodash/fp/drop.js b/www/node_modules/lodash/fp/drop.js new file mode 100644 index 0000000..ccca2d0 --- /dev/null +++ b/www/node_modules/lodash/fp/drop.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('drop', require('../drop')); diff --git a/www/node_modules/lodash/fp/dropRight.js b/www/node_modules/lodash/fp/dropRight.js new file mode 100644 index 0000000..bd9a2bd --- /dev/null +++ b/www/node_modules/lodash/fp/dropRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('dropRight', require('../dropRight')); diff --git a/www/node_modules/lodash/fp/dropRightWhile.js b/www/node_modules/lodash/fp/dropRightWhile.js new file mode 100644 index 0000000..2dbb2a3 --- /dev/null +++ b/www/node_modules/lodash/fp/dropRightWhile.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('dropRightWhile', require('../dropRightWhile')); diff --git a/www/node_modules/lodash/fp/dropWhile.js b/www/node_modules/lodash/fp/dropWhile.js new file mode 100644 index 0000000..17e46ff --- /dev/null +++ b/www/node_modules/lodash/fp/dropWhile.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('dropWhile', require('../dropWhile')); diff --git a/www/node_modules/lodash/fp/each.js b/www/node_modules/lodash/fp/each.js new file mode 100644 index 0000000..8800f42 --- /dev/null +++ b/www/node_modules/lodash/fp/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/www/node_modules/lodash/fp/eachRight.js b/www/node_modules/lodash/fp/eachRight.js new file mode 100644 index 0000000..3252b2a --- /dev/null +++ b/www/node_modules/lodash/fp/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/www/node_modules/lodash/fp/endsWith.js b/www/node_modules/lodash/fp/endsWith.js new file mode 100644 index 0000000..cbe8f8c --- /dev/null +++ b/www/node_modules/lodash/fp/endsWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('endsWith', require('../endsWith')); diff --git a/www/node_modules/lodash/fp/eq.js b/www/node_modules/lodash/fp/eq.js new file mode 100644 index 0000000..518a54d --- /dev/null +++ b/www/node_modules/lodash/fp/eq.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('eq', require('../eq')); diff --git a/www/node_modules/lodash/fp/equals.js b/www/node_modules/lodash/fp/equals.js new file mode 100644 index 0000000..e6a5ce0 --- /dev/null +++ b/www/node_modules/lodash/fp/equals.js @@ -0,0 +1 @@ +module.exports = require('./isEqual'); diff --git a/www/node_modules/lodash/fp/escape.js b/www/node_modules/lodash/fp/escape.js new file mode 100644 index 0000000..e5de9f2 --- /dev/null +++ b/www/node_modules/lodash/fp/escape.js @@ -0,0 +1 @@ +module.exports = require('../escape'); diff --git a/www/node_modules/lodash/fp/escapeRegExp.js b/www/node_modules/lodash/fp/escapeRegExp.js new file mode 100644 index 0000000..ab18963 --- /dev/null +++ b/www/node_modules/lodash/fp/escapeRegExp.js @@ -0,0 +1 @@ +module.exports = require('../escapeRegExp'); diff --git a/www/node_modules/lodash/fp/every.js b/www/node_modules/lodash/fp/every.js new file mode 100644 index 0000000..965f889 --- /dev/null +++ b/www/node_modules/lodash/fp/every.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('every', require('../every')); diff --git a/www/node_modules/lodash/fp/extend.js b/www/node_modules/lodash/fp/extend.js new file mode 100644 index 0000000..e00166c --- /dev/null +++ b/www/node_modules/lodash/fp/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/www/node_modules/lodash/fp/extendWith.js b/www/node_modules/lodash/fp/extendWith.js new file mode 100644 index 0000000..dbdcb3b --- /dev/null +++ b/www/node_modules/lodash/fp/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/www/node_modules/lodash/fp/fill.js b/www/node_modules/lodash/fp/fill.js new file mode 100644 index 0000000..e16f8bf --- /dev/null +++ b/www/node_modules/lodash/fp/fill.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('fill', require('../fill')); diff --git a/www/node_modules/lodash/fp/filter.js b/www/node_modules/lodash/fp/filter.js new file mode 100644 index 0000000..7191a82 --- /dev/null +++ b/www/node_modules/lodash/fp/filter.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('filter', require('../filter')); diff --git a/www/node_modules/lodash/fp/find.js b/www/node_modules/lodash/fp/find.js new file mode 100644 index 0000000..5915bbd --- /dev/null +++ b/www/node_modules/lodash/fp/find.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('find', require('../find')); diff --git a/www/node_modules/lodash/fp/findIndex.js b/www/node_modules/lodash/fp/findIndex.js new file mode 100644 index 0000000..6bf435c --- /dev/null +++ b/www/node_modules/lodash/fp/findIndex.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findIndex', require('../findIndex')); diff --git a/www/node_modules/lodash/fp/findKey.js b/www/node_modules/lodash/fp/findKey.js new file mode 100644 index 0000000..3ff9844 --- /dev/null +++ b/www/node_modules/lodash/fp/findKey.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findKey', require('../findKey')); diff --git a/www/node_modules/lodash/fp/findLast.js b/www/node_modules/lodash/fp/findLast.js new file mode 100644 index 0000000..31e169b --- /dev/null +++ b/www/node_modules/lodash/fp/findLast.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findLast', require('../findLast')); diff --git a/www/node_modules/lodash/fp/findLastIndex.js b/www/node_modules/lodash/fp/findLastIndex.js new file mode 100644 index 0000000..db41e88 --- /dev/null +++ b/www/node_modules/lodash/fp/findLastIndex.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findLastIndex', require('../findLastIndex')); diff --git a/www/node_modules/lodash/fp/findLastKey.js b/www/node_modules/lodash/fp/findLastKey.js new file mode 100644 index 0000000..ffe9e2a --- /dev/null +++ b/www/node_modules/lodash/fp/findLastKey.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findLastKey', require('../findLastKey')); diff --git a/www/node_modules/lodash/fp/first.js b/www/node_modules/lodash/fp/first.js new file mode 100644 index 0000000..53f4ad1 --- /dev/null +++ b/www/node_modules/lodash/fp/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/www/node_modules/lodash/fp/flatMap.js b/www/node_modules/lodash/fp/flatMap.js new file mode 100644 index 0000000..da249a8 --- /dev/null +++ b/www/node_modules/lodash/fp/flatMap.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('flatMap', require('../flatMap')); diff --git a/www/node_modules/lodash/fp/flatten.js b/www/node_modules/lodash/fp/flatten.js new file mode 100644 index 0000000..f1c1a62 --- /dev/null +++ b/www/node_modules/lodash/fp/flatten.js @@ -0,0 +1 @@ +module.exports = require('../flatten'); diff --git a/www/node_modules/lodash/fp/flattenDeep.js b/www/node_modules/lodash/fp/flattenDeep.js new file mode 100644 index 0000000..c2ff987 --- /dev/null +++ b/www/node_modules/lodash/fp/flattenDeep.js @@ -0,0 +1 @@ +module.exports = require('../flattenDeep'); diff --git a/www/node_modules/lodash/fp/flattenDepth.js b/www/node_modules/lodash/fp/flattenDepth.js new file mode 100644 index 0000000..731e27a --- /dev/null +++ b/www/node_modules/lodash/fp/flattenDepth.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('flattenDepth', require('../flattenDepth')); diff --git a/www/node_modules/lodash/fp/flip.js b/www/node_modules/lodash/fp/flip.js new file mode 100644 index 0000000..730bbd1 --- /dev/null +++ b/www/node_modules/lodash/fp/flip.js @@ -0,0 +1 @@ +module.exports = require('../flip'); diff --git a/www/node_modules/lodash/fp/floor.js b/www/node_modules/lodash/fp/floor.js new file mode 100644 index 0000000..f130f8b --- /dev/null +++ b/www/node_modules/lodash/fp/floor.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('floor', require('../floor')); diff --git a/www/node_modules/lodash/fp/flow.js b/www/node_modules/lodash/fp/flow.js new file mode 100644 index 0000000..d9943c6 --- /dev/null +++ b/www/node_modules/lodash/fp/flow.js @@ -0,0 +1 @@ +module.exports = require('../flow'); diff --git a/www/node_modules/lodash/fp/flowRight.js b/www/node_modules/lodash/fp/flowRight.js new file mode 100644 index 0000000..556dc37 --- /dev/null +++ b/www/node_modules/lodash/fp/flowRight.js @@ -0,0 +1 @@ +module.exports = require('../flowRight'); diff --git a/www/node_modules/lodash/fp/forEach.js b/www/node_modules/lodash/fp/forEach.js new file mode 100644 index 0000000..d715ea6 --- /dev/null +++ b/www/node_modules/lodash/fp/forEach.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forEach', require('../forEach')); diff --git a/www/node_modules/lodash/fp/forEachRight.js b/www/node_modules/lodash/fp/forEachRight.js new file mode 100644 index 0000000..90dd8dd --- /dev/null +++ b/www/node_modules/lodash/fp/forEachRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forEachRight', require('../forEachRight')); diff --git a/www/node_modules/lodash/fp/forIn.js b/www/node_modules/lodash/fp/forIn.js new file mode 100644 index 0000000..90a8f07 --- /dev/null +++ b/www/node_modules/lodash/fp/forIn.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forIn', require('../forIn')); diff --git a/www/node_modules/lodash/fp/forInRight.js b/www/node_modules/lodash/fp/forInRight.js new file mode 100644 index 0000000..505258f --- /dev/null +++ b/www/node_modules/lodash/fp/forInRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forInRight', require('../forInRight')); diff --git a/www/node_modules/lodash/fp/forOwn.js b/www/node_modules/lodash/fp/forOwn.js new file mode 100644 index 0000000..6fef1e3 --- /dev/null +++ b/www/node_modules/lodash/fp/forOwn.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forOwn', require('../forOwn')); diff --git a/www/node_modules/lodash/fp/forOwnRight.js b/www/node_modules/lodash/fp/forOwnRight.js new file mode 100644 index 0000000..11ff1fd --- /dev/null +++ b/www/node_modules/lodash/fp/forOwnRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forOwnRight', require('../forOwnRight')); diff --git a/www/node_modules/lodash/fp/fromPairs.js b/www/node_modules/lodash/fp/fromPairs.js new file mode 100644 index 0000000..f5c3cb8 --- /dev/null +++ b/www/node_modules/lodash/fp/fromPairs.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('fromPairs', require('../fromPairs')); diff --git a/www/node_modules/lodash/fp/function.js b/www/node_modules/lodash/fp/function.js new file mode 100644 index 0000000..dfe69b1 --- /dev/null +++ b/www/node_modules/lodash/fp/function.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../function')); diff --git a/www/node_modules/lodash/fp/functions.js b/www/node_modules/lodash/fp/functions.js new file mode 100644 index 0000000..bb1cb93 --- /dev/null +++ b/www/node_modules/lodash/fp/functions.js @@ -0,0 +1 @@ +module.exports = require('../functions'); diff --git a/www/node_modules/lodash/fp/functionsIn.js b/www/node_modules/lodash/fp/functionsIn.js new file mode 100644 index 0000000..d375213 --- /dev/null +++ b/www/node_modules/lodash/fp/functionsIn.js @@ -0,0 +1 @@ +module.exports = require('../functionsIn'); diff --git a/www/node_modules/lodash/fp/get.js b/www/node_modules/lodash/fp/get.js new file mode 100644 index 0000000..a054c9d --- /dev/null +++ b/www/node_modules/lodash/fp/get.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('get', require('../get')); diff --git a/www/node_modules/lodash/fp/getOr.js b/www/node_modules/lodash/fp/getOr.js new file mode 100644 index 0000000..c46f2e9 --- /dev/null +++ b/www/node_modules/lodash/fp/getOr.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('getOr', require('../get')); diff --git a/www/node_modules/lodash/fp/groupBy.js b/www/node_modules/lodash/fp/groupBy.js new file mode 100644 index 0000000..6588856 --- /dev/null +++ b/www/node_modules/lodash/fp/groupBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('groupBy', require('../groupBy')); diff --git a/www/node_modules/lodash/fp/gt.js b/www/node_modules/lodash/fp/gt.js new file mode 100644 index 0000000..5b92de9 --- /dev/null +++ b/www/node_modules/lodash/fp/gt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('gt', require('../gt')); diff --git a/www/node_modules/lodash/fp/gte.js b/www/node_modules/lodash/fp/gte.js new file mode 100644 index 0000000..3a40250 --- /dev/null +++ b/www/node_modules/lodash/fp/gte.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('gte', require('../gte')); diff --git a/www/node_modules/lodash/fp/has.js b/www/node_modules/lodash/fp/has.js new file mode 100644 index 0000000..e37db9a --- /dev/null +++ b/www/node_modules/lodash/fp/has.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('has', require('../has')); diff --git a/www/node_modules/lodash/fp/hasIn.js b/www/node_modules/lodash/fp/hasIn.js new file mode 100644 index 0000000..84d7815 --- /dev/null +++ b/www/node_modules/lodash/fp/hasIn.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('hasIn', require('../hasIn')); diff --git a/www/node_modules/lodash/fp/head.js b/www/node_modules/lodash/fp/head.js new file mode 100644 index 0000000..bd97a7b --- /dev/null +++ b/www/node_modules/lodash/fp/head.js @@ -0,0 +1 @@ +module.exports = require('../head'); diff --git a/www/node_modules/lodash/fp/identity.js b/www/node_modules/lodash/fp/identity.js new file mode 100644 index 0000000..6d007dc --- /dev/null +++ b/www/node_modules/lodash/fp/identity.js @@ -0,0 +1 @@ +module.exports = require('../identity'); diff --git a/www/node_modules/lodash/fp/inRange.js b/www/node_modules/lodash/fp/inRange.js new file mode 100644 index 0000000..fc55e1c --- /dev/null +++ b/www/node_modules/lodash/fp/inRange.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('inRange', require('../inRange')); diff --git a/www/node_modules/lodash/fp/includes.js b/www/node_modules/lodash/fp/includes.js new file mode 100644 index 0000000..91f1eec --- /dev/null +++ b/www/node_modules/lodash/fp/includes.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('includes', require('../includes')); diff --git a/www/node_modules/lodash/fp/indexOf.js b/www/node_modules/lodash/fp/indexOf.js new file mode 100644 index 0000000..65345ce --- /dev/null +++ b/www/node_modules/lodash/fp/indexOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('indexOf', require('../indexOf')); diff --git a/www/node_modules/lodash/fp/init.js b/www/node_modules/lodash/fp/init.js new file mode 100644 index 0000000..2f88d8b --- /dev/null +++ b/www/node_modules/lodash/fp/init.js @@ -0,0 +1 @@ +module.exports = require('./initial'); diff --git a/www/node_modules/lodash/fp/initial.js b/www/node_modules/lodash/fp/initial.js new file mode 100644 index 0000000..9fc94e0 --- /dev/null +++ b/www/node_modules/lodash/fp/initial.js @@ -0,0 +1 @@ +module.exports = require('../initial'); diff --git a/www/node_modules/lodash/fp/intersection.js b/www/node_modules/lodash/fp/intersection.js new file mode 100644 index 0000000..784f4d1 --- /dev/null +++ b/www/node_modules/lodash/fp/intersection.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('intersection', require('../intersection')); diff --git a/www/node_modules/lodash/fp/intersectionBy.js b/www/node_modules/lodash/fp/intersectionBy.js new file mode 100644 index 0000000..4aa93b6 --- /dev/null +++ b/www/node_modules/lodash/fp/intersectionBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('intersectionBy', require('../intersectionBy')); diff --git a/www/node_modules/lodash/fp/intersectionWith.js b/www/node_modules/lodash/fp/intersectionWith.js new file mode 100644 index 0000000..879fe9d --- /dev/null +++ b/www/node_modules/lodash/fp/intersectionWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('intersectionWith', require('../intersectionWith')); diff --git a/www/node_modules/lodash/fp/invert.js b/www/node_modules/lodash/fp/invert.js new file mode 100644 index 0000000..231d5ca --- /dev/null +++ b/www/node_modules/lodash/fp/invert.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('invert', require('../invert')); diff --git a/www/node_modules/lodash/fp/invertBy.js b/www/node_modules/lodash/fp/invertBy.js new file mode 100644 index 0000000..90820e6 --- /dev/null +++ b/www/node_modules/lodash/fp/invertBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('invertBy', require('../invertBy')); diff --git a/www/node_modules/lodash/fp/invoke.js b/www/node_modules/lodash/fp/invoke.js new file mode 100644 index 0000000..a8635e8 --- /dev/null +++ b/www/node_modules/lodash/fp/invoke.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('invoke', require('../invoke')); diff --git a/www/node_modules/lodash/fp/invokeMap.js b/www/node_modules/lodash/fp/invokeMap.js new file mode 100644 index 0000000..2691ae3 --- /dev/null +++ b/www/node_modules/lodash/fp/invokeMap.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('invokeMap', require('../invokeMap')); diff --git a/www/node_modules/lodash/fp/isArguments.js b/www/node_modules/lodash/fp/isArguments.js new file mode 100644 index 0000000..093aa35 --- /dev/null +++ b/www/node_modules/lodash/fp/isArguments.js @@ -0,0 +1 @@ +module.exports = require('../isArguments'); diff --git a/www/node_modules/lodash/fp/isArray.js b/www/node_modules/lodash/fp/isArray.js new file mode 100644 index 0000000..ec7fad3 --- /dev/null +++ b/www/node_modules/lodash/fp/isArray.js @@ -0,0 +1 @@ +module.exports = require('../isArray'); diff --git a/www/node_modules/lodash/fp/isArrayBuffer.js b/www/node_modules/lodash/fp/isArrayBuffer.js new file mode 100644 index 0000000..655e85b --- /dev/null +++ b/www/node_modules/lodash/fp/isArrayBuffer.js @@ -0,0 +1 @@ +module.exports = require('../isArrayBuffer'); diff --git a/www/node_modules/lodash/fp/isArrayLike.js b/www/node_modules/lodash/fp/isArrayLike.js new file mode 100644 index 0000000..1595b2f --- /dev/null +++ b/www/node_modules/lodash/fp/isArrayLike.js @@ -0,0 +1 @@ +module.exports = require('../isArrayLike'); diff --git a/www/node_modules/lodash/fp/isArrayLikeObject.js b/www/node_modules/lodash/fp/isArrayLikeObject.js new file mode 100644 index 0000000..4d1d202 --- /dev/null +++ b/www/node_modules/lodash/fp/isArrayLikeObject.js @@ -0,0 +1 @@ +module.exports = require('../isArrayLikeObject'); diff --git a/www/node_modules/lodash/fp/isBoolean.js b/www/node_modules/lodash/fp/isBoolean.js new file mode 100644 index 0000000..30d4a4a --- /dev/null +++ b/www/node_modules/lodash/fp/isBoolean.js @@ -0,0 +1 @@ +module.exports = require('../isBoolean'); diff --git a/www/node_modules/lodash/fp/isBuffer.js b/www/node_modules/lodash/fp/isBuffer.js new file mode 100644 index 0000000..15af9b6 --- /dev/null +++ b/www/node_modules/lodash/fp/isBuffer.js @@ -0,0 +1 @@ +module.exports = require('../isBuffer'); diff --git a/www/node_modules/lodash/fp/isDate.js b/www/node_modules/lodash/fp/isDate.js new file mode 100644 index 0000000..ac002f4 --- /dev/null +++ b/www/node_modules/lodash/fp/isDate.js @@ -0,0 +1 @@ +module.exports = require('../isDate'); diff --git a/www/node_modules/lodash/fp/isElement.js b/www/node_modules/lodash/fp/isElement.js new file mode 100644 index 0000000..458a348 --- /dev/null +++ b/www/node_modules/lodash/fp/isElement.js @@ -0,0 +1 @@ +module.exports = require('../isElement'); diff --git a/www/node_modules/lodash/fp/isEmpty.js b/www/node_modules/lodash/fp/isEmpty.js new file mode 100644 index 0000000..b1a04cd --- /dev/null +++ b/www/node_modules/lodash/fp/isEmpty.js @@ -0,0 +1 @@ +module.exports = require('../isEmpty'); diff --git a/www/node_modules/lodash/fp/isEqual.js b/www/node_modules/lodash/fp/isEqual.js new file mode 100644 index 0000000..91b7d66 --- /dev/null +++ b/www/node_modules/lodash/fp/isEqual.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('isEqual', require('../isEqual')); diff --git a/www/node_modules/lodash/fp/isEqualWith.js b/www/node_modules/lodash/fp/isEqualWith.js new file mode 100644 index 0000000..37a6e35 --- /dev/null +++ b/www/node_modules/lodash/fp/isEqualWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('isEqualWith', require('../isEqualWith')); diff --git a/www/node_modules/lodash/fp/isError.js b/www/node_modules/lodash/fp/isError.js new file mode 100644 index 0000000..da2710c --- /dev/null +++ b/www/node_modules/lodash/fp/isError.js @@ -0,0 +1 @@ +module.exports = require('../isError'); diff --git a/www/node_modules/lodash/fp/isFinite.js b/www/node_modules/lodash/fp/isFinite.js new file mode 100644 index 0000000..a71e53d --- /dev/null +++ b/www/node_modules/lodash/fp/isFinite.js @@ -0,0 +1 @@ +module.exports = require('../isFinite'); diff --git a/www/node_modules/lodash/fp/isFunction.js b/www/node_modules/lodash/fp/isFunction.js new file mode 100644 index 0000000..1fc73f6 --- /dev/null +++ b/www/node_modules/lodash/fp/isFunction.js @@ -0,0 +1 @@ +module.exports = require('../isFunction'); diff --git a/www/node_modules/lodash/fp/isInteger.js b/www/node_modules/lodash/fp/isInteger.js new file mode 100644 index 0000000..f990b01 --- /dev/null +++ b/www/node_modules/lodash/fp/isInteger.js @@ -0,0 +1 @@ +module.exports = require('../isInteger'); diff --git a/www/node_modules/lodash/fp/isLength.js b/www/node_modules/lodash/fp/isLength.js new file mode 100644 index 0000000..f40c362 --- /dev/null +++ b/www/node_modules/lodash/fp/isLength.js @@ -0,0 +1 @@ +module.exports = require('../isLength'); diff --git a/www/node_modules/lodash/fp/isMap.js b/www/node_modules/lodash/fp/isMap.js new file mode 100644 index 0000000..51fb7e2 --- /dev/null +++ b/www/node_modules/lodash/fp/isMap.js @@ -0,0 +1 @@ +module.exports = require('../isMap'); diff --git a/www/node_modules/lodash/fp/isMatch.js b/www/node_modules/lodash/fp/isMatch.js new file mode 100644 index 0000000..749c903 --- /dev/null +++ b/www/node_modules/lodash/fp/isMatch.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('isMatch', require('../isMatch')); diff --git a/www/node_modules/lodash/fp/isMatchWith.js b/www/node_modules/lodash/fp/isMatchWith.js new file mode 100644 index 0000000..b1311fc --- /dev/null +++ b/www/node_modules/lodash/fp/isMatchWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('isMatchWith', require('../isMatchWith')); diff --git a/www/node_modules/lodash/fp/isNaN.js b/www/node_modules/lodash/fp/isNaN.js new file mode 100644 index 0000000..74daf0a --- /dev/null +++ b/www/node_modules/lodash/fp/isNaN.js @@ -0,0 +1 @@ +module.exports = require('../isNaN'); diff --git a/www/node_modules/lodash/fp/isNative.js b/www/node_modules/lodash/fp/isNative.js new file mode 100644 index 0000000..9eeded4 --- /dev/null +++ b/www/node_modules/lodash/fp/isNative.js @@ -0,0 +1 @@ +module.exports = require('../isNative'); diff --git a/www/node_modules/lodash/fp/isNil.js b/www/node_modules/lodash/fp/isNil.js new file mode 100644 index 0000000..beace9d --- /dev/null +++ b/www/node_modules/lodash/fp/isNil.js @@ -0,0 +1 @@ +module.exports = require('../isNil'); diff --git a/www/node_modules/lodash/fp/isNull.js b/www/node_modules/lodash/fp/isNull.js new file mode 100644 index 0000000..44689a7 --- /dev/null +++ b/www/node_modules/lodash/fp/isNull.js @@ -0,0 +1 @@ +module.exports = require('../isNull'); diff --git a/www/node_modules/lodash/fp/isNumber.js b/www/node_modules/lodash/fp/isNumber.js new file mode 100644 index 0000000..d7e8615 --- /dev/null +++ b/www/node_modules/lodash/fp/isNumber.js @@ -0,0 +1 @@ +module.exports = require('../isNumber'); diff --git a/www/node_modules/lodash/fp/isObject.js b/www/node_modules/lodash/fp/isObject.js new file mode 100644 index 0000000..bb48630 --- /dev/null +++ b/www/node_modules/lodash/fp/isObject.js @@ -0,0 +1 @@ +module.exports = require('../isObject'); diff --git a/www/node_modules/lodash/fp/isObjectLike.js b/www/node_modules/lodash/fp/isObjectLike.js new file mode 100644 index 0000000..5ef6f62 --- /dev/null +++ b/www/node_modules/lodash/fp/isObjectLike.js @@ -0,0 +1 @@ +module.exports = require('../isObjectLike'); diff --git a/www/node_modules/lodash/fp/isPlainObject.js b/www/node_modules/lodash/fp/isPlainObject.js new file mode 100644 index 0000000..2d34d86 --- /dev/null +++ b/www/node_modules/lodash/fp/isPlainObject.js @@ -0,0 +1 @@ +module.exports = require('../isPlainObject'); diff --git a/www/node_modules/lodash/fp/isRegExp.js b/www/node_modules/lodash/fp/isRegExp.js new file mode 100644 index 0000000..4d0727b --- /dev/null +++ b/www/node_modules/lodash/fp/isRegExp.js @@ -0,0 +1 @@ +module.exports = require('../isRegExp'); diff --git a/www/node_modules/lodash/fp/isSafeInteger.js b/www/node_modules/lodash/fp/isSafeInteger.js new file mode 100644 index 0000000..ed08cab --- /dev/null +++ b/www/node_modules/lodash/fp/isSafeInteger.js @@ -0,0 +1 @@ +module.exports = require('../isSafeInteger'); diff --git a/www/node_modules/lodash/fp/isSet.js b/www/node_modules/lodash/fp/isSet.js new file mode 100644 index 0000000..f8a0a49 --- /dev/null +++ b/www/node_modules/lodash/fp/isSet.js @@ -0,0 +1 @@ +module.exports = require('../isSet'); diff --git a/www/node_modules/lodash/fp/isString.js b/www/node_modules/lodash/fp/isString.js new file mode 100644 index 0000000..2f22d0e --- /dev/null +++ b/www/node_modules/lodash/fp/isString.js @@ -0,0 +1 @@ +module.exports = require('../isString'); diff --git a/www/node_modules/lodash/fp/isSymbol.js b/www/node_modules/lodash/fp/isSymbol.js new file mode 100644 index 0000000..9ce6731 --- /dev/null +++ b/www/node_modules/lodash/fp/isSymbol.js @@ -0,0 +1 @@ +module.exports = require('../isSymbol'); diff --git a/www/node_modules/lodash/fp/isTypedArray.js b/www/node_modules/lodash/fp/isTypedArray.js new file mode 100644 index 0000000..72349c5 --- /dev/null +++ b/www/node_modules/lodash/fp/isTypedArray.js @@ -0,0 +1 @@ +module.exports = require('../isTypedArray'); diff --git a/www/node_modules/lodash/fp/isUndefined.js b/www/node_modules/lodash/fp/isUndefined.js new file mode 100644 index 0000000..a65c5be --- /dev/null +++ b/www/node_modules/lodash/fp/isUndefined.js @@ -0,0 +1 @@ +module.exports = require('../isUndefined'); diff --git a/www/node_modules/lodash/fp/isWeakMap.js b/www/node_modules/lodash/fp/isWeakMap.js new file mode 100644 index 0000000..dc62201 --- /dev/null +++ b/www/node_modules/lodash/fp/isWeakMap.js @@ -0,0 +1 @@ +module.exports = require('../isWeakMap'); diff --git a/www/node_modules/lodash/fp/isWeakSet.js b/www/node_modules/lodash/fp/isWeakSet.js new file mode 100644 index 0000000..7646ca8 --- /dev/null +++ b/www/node_modules/lodash/fp/isWeakSet.js @@ -0,0 +1 @@ +module.exports = require('../isWeakSet'); diff --git a/www/node_modules/lodash/fp/iteratee.js b/www/node_modules/lodash/fp/iteratee.js new file mode 100644 index 0000000..2884465 --- /dev/null +++ b/www/node_modules/lodash/fp/iteratee.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('iteratee', require('../iteratee')); diff --git a/www/node_modules/lodash/fp/join.js b/www/node_modules/lodash/fp/join.js new file mode 100644 index 0000000..fdaa488 --- /dev/null +++ b/www/node_modules/lodash/fp/join.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('join', require('../join')); diff --git a/www/node_modules/lodash/fp/kebabCase.js b/www/node_modules/lodash/fp/kebabCase.js new file mode 100644 index 0000000..f251a4d --- /dev/null +++ b/www/node_modules/lodash/fp/kebabCase.js @@ -0,0 +1 @@ +module.exports = require('../kebabCase'); diff --git a/www/node_modules/lodash/fp/keyBy.js b/www/node_modules/lodash/fp/keyBy.js new file mode 100644 index 0000000..ad9abac --- /dev/null +++ b/www/node_modules/lodash/fp/keyBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('keyBy', require('../keyBy')); diff --git a/www/node_modules/lodash/fp/keys.js b/www/node_modules/lodash/fp/keys.js new file mode 100644 index 0000000..23dc6b7 --- /dev/null +++ b/www/node_modules/lodash/fp/keys.js @@ -0,0 +1 @@ +module.exports = require('../keys'); diff --git a/www/node_modules/lodash/fp/keysIn.js b/www/node_modules/lodash/fp/keysIn.js new file mode 100644 index 0000000..2b738b9 --- /dev/null +++ b/www/node_modules/lodash/fp/keysIn.js @@ -0,0 +1 @@ +module.exports = require('../keysIn'); diff --git a/www/node_modules/lodash/fp/lang.js b/www/node_modules/lodash/fp/lang.js new file mode 100644 index 0000000..08cc9c1 --- /dev/null +++ b/www/node_modules/lodash/fp/lang.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../lang')); diff --git a/www/node_modules/lodash/fp/last.js b/www/node_modules/lodash/fp/last.js new file mode 100644 index 0000000..222be23 --- /dev/null +++ b/www/node_modules/lodash/fp/last.js @@ -0,0 +1 @@ +module.exports = require('../last'); diff --git a/www/node_modules/lodash/fp/lastIndexOf.js b/www/node_modules/lodash/fp/lastIndexOf.js new file mode 100644 index 0000000..e27480e --- /dev/null +++ b/www/node_modules/lodash/fp/lastIndexOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('lastIndexOf', require('../lastIndexOf')); diff --git a/www/node_modules/lodash/fp/lowerCase.js b/www/node_modules/lodash/fp/lowerCase.js new file mode 100644 index 0000000..4da15ce --- /dev/null +++ b/www/node_modules/lodash/fp/lowerCase.js @@ -0,0 +1 @@ +module.exports = require('../lowerCase'); diff --git a/www/node_modules/lodash/fp/lowerFirst.js b/www/node_modules/lodash/fp/lowerFirst.js new file mode 100644 index 0000000..afd1ba5 --- /dev/null +++ b/www/node_modules/lodash/fp/lowerFirst.js @@ -0,0 +1 @@ +module.exports = require('../lowerFirst'); diff --git a/www/node_modules/lodash/fp/lt.js b/www/node_modules/lodash/fp/lt.js new file mode 100644 index 0000000..dd4cba0 --- /dev/null +++ b/www/node_modules/lodash/fp/lt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('lt', require('../lt')); diff --git a/www/node_modules/lodash/fp/lte.js b/www/node_modules/lodash/fp/lte.js new file mode 100644 index 0000000..f9bf725 --- /dev/null +++ b/www/node_modules/lodash/fp/lte.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('lte', require('../lte')); diff --git a/www/node_modules/lodash/fp/map.js b/www/node_modules/lodash/fp/map.js new file mode 100644 index 0000000..b74c1a1 --- /dev/null +++ b/www/node_modules/lodash/fp/map.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('map', require('../map')); diff --git a/www/node_modules/lodash/fp/mapKeys.js b/www/node_modules/lodash/fp/mapKeys.js new file mode 100644 index 0000000..a8156c1 --- /dev/null +++ b/www/node_modules/lodash/fp/mapKeys.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('mapKeys', require('../mapKeys')); diff --git a/www/node_modules/lodash/fp/mapObj.js b/www/node_modules/lodash/fp/mapObj.js new file mode 100644 index 0000000..9f1872d --- /dev/null +++ b/www/node_modules/lodash/fp/mapObj.js @@ -0,0 +1 @@ +module.exports = require('./mapValues'); diff --git a/www/node_modules/lodash/fp/mapValues.js b/www/node_modules/lodash/fp/mapValues.js new file mode 100644 index 0000000..9375d73 --- /dev/null +++ b/www/node_modules/lodash/fp/mapValues.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('mapValues', require('../mapValues')); diff --git a/www/node_modules/lodash/fp/matches.js b/www/node_modules/lodash/fp/matches.js new file mode 100644 index 0000000..eea5916 --- /dev/null +++ b/www/node_modules/lodash/fp/matches.js @@ -0,0 +1 @@ +module.exports = require('../matches'); diff --git a/www/node_modules/lodash/fp/matchesProperty.js b/www/node_modules/lodash/fp/matchesProperty.js new file mode 100644 index 0000000..c4343a1 --- /dev/null +++ b/www/node_modules/lodash/fp/matchesProperty.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('matchesProperty', require('../matchesProperty')); diff --git a/www/node_modules/lodash/fp/math.js b/www/node_modules/lodash/fp/math.js new file mode 100644 index 0000000..e8f50f7 --- /dev/null +++ b/www/node_modules/lodash/fp/math.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../math')); diff --git a/www/node_modules/lodash/fp/max.js b/www/node_modules/lodash/fp/max.js new file mode 100644 index 0000000..f7258c6 --- /dev/null +++ b/www/node_modules/lodash/fp/max.js @@ -0,0 +1 @@ +module.exports = require('../max'); diff --git a/www/node_modules/lodash/fp/maxBy.js b/www/node_modules/lodash/fp/maxBy.js new file mode 100644 index 0000000..b81243f --- /dev/null +++ b/www/node_modules/lodash/fp/maxBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('maxBy', require('../maxBy')); diff --git a/www/node_modules/lodash/fp/mean.js b/www/node_modules/lodash/fp/mean.js new file mode 100644 index 0000000..b78e427 --- /dev/null +++ b/www/node_modules/lodash/fp/mean.js @@ -0,0 +1 @@ +module.exports = require('../mean'); diff --git a/www/node_modules/lodash/fp/memoize.js b/www/node_modules/lodash/fp/memoize.js new file mode 100644 index 0000000..1a45e09 --- /dev/null +++ b/www/node_modules/lodash/fp/memoize.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('memoize', require('../memoize')); diff --git a/www/node_modules/lodash/fp/merge.js b/www/node_modules/lodash/fp/merge.js new file mode 100644 index 0000000..3dca641 --- /dev/null +++ b/www/node_modules/lodash/fp/merge.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('merge', require('../merge')); diff --git a/www/node_modules/lodash/fp/mergeWith.js b/www/node_modules/lodash/fp/mergeWith.js new file mode 100644 index 0000000..ba45644 --- /dev/null +++ b/www/node_modules/lodash/fp/mergeWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('mergeWith', require('../mergeWith')); diff --git a/www/node_modules/lodash/fp/method.js b/www/node_modules/lodash/fp/method.js new file mode 100644 index 0000000..c2f95c3 --- /dev/null +++ b/www/node_modules/lodash/fp/method.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('method', require('../method')); diff --git a/www/node_modules/lodash/fp/methodOf.js b/www/node_modules/lodash/fp/methodOf.js new file mode 100644 index 0000000..223f651 --- /dev/null +++ b/www/node_modules/lodash/fp/methodOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('methodOf', require('../methodOf')); diff --git a/www/node_modules/lodash/fp/min.js b/www/node_modules/lodash/fp/min.js new file mode 100644 index 0000000..10db02c --- /dev/null +++ b/www/node_modules/lodash/fp/min.js @@ -0,0 +1 @@ +module.exports = require('../min'); diff --git a/www/node_modules/lodash/fp/minBy.js b/www/node_modules/lodash/fp/minBy.js new file mode 100644 index 0000000..10edfd4 --- /dev/null +++ b/www/node_modules/lodash/fp/minBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('minBy', require('../minBy')); diff --git a/www/node_modules/lodash/fp/mixin.js b/www/node_modules/lodash/fp/mixin.js new file mode 100644 index 0000000..965f180 --- /dev/null +++ b/www/node_modules/lodash/fp/mixin.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('mixin', require('../mixin')); diff --git a/www/node_modules/lodash/fp/nAry.js b/www/node_modules/lodash/fp/nAry.js new file mode 100644 index 0000000..f262a76 --- /dev/null +++ b/www/node_modules/lodash/fp/nAry.js @@ -0,0 +1 @@ +module.exports = require('./ary'); diff --git a/www/node_modules/lodash/fp/negate.js b/www/node_modules/lodash/fp/negate.js new file mode 100644 index 0000000..345b425 --- /dev/null +++ b/www/node_modules/lodash/fp/negate.js @@ -0,0 +1 @@ +module.exports = require('../negate'); diff --git a/www/node_modules/lodash/fp/next.js b/www/node_modules/lodash/fp/next.js new file mode 100644 index 0000000..5cad70e --- /dev/null +++ b/www/node_modules/lodash/fp/next.js @@ -0,0 +1 @@ +module.exports = require('../next'); diff --git a/www/node_modules/lodash/fp/noop.js b/www/node_modules/lodash/fp/noop.js new file mode 100644 index 0000000..ca10050 --- /dev/null +++ b/www/node_modules/lodash/fp/noop.js @@ -0,0 +1 @@ +module.exports = require('../noop'); diff --git a/www/node_modules/lodash/fp/now.js b/www/node_modules/lodash/fp/now.js new file mode 100644 index 0000000..aa5ed67 --- /dev/null +++ b/www/node_modules/lodash/fp/now.js @@ -0,0 +1 @@ +module.exports = require('../now'); diff --git a/www/node_modules/lodash/fp/nthArg.js b/www/node_modules/lodash/fp/nthArg.js new file mode 100644 index 0000000..dd47ac6 --- /dev/null +++ b/www/node_modules/lodash/fp/nthArg.js @@ -0,0 +1 @@ +module.exports = require('../nthArg'); diff --git a/www/node_modules/lodash/fp/number.js b/www/node_modules/lodash/fp/number.js new file mode 100644 index 0000000..5c10b88 --- /dev/null +++ b/www/node_modules/lodash/fp/number.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../number')); diff --git a/www/node_modules/lodash/fp/object.js b/www/node_modules/lodash/fp/object.js new file mode 100644 index 0000000..ae39a13 --- /dev/null +++ b/www/node_modules/lodash/fp/object.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../object')); diff --git a/www/node_modules/lodash/fp/omit.js b/www/node_modules/lodash/fp/omit.js new file mode 100644 index 0000000..404b551 --- /dev/null +++ b/www/node_modules/lodash/fp/omit.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('omit', require('../omit')); diff --git a/www/node_modules/lodash/fp/omitAll.js b/www/node_modules/lodash/fp/omitAll.js new file mode 100644 index 0000000..144cf4b --- /dev/null +++ b/www/node_modules/lodash/fp/omitAll.js @@ -0,0 +1 @@ +module.exports = require('./omit'); diff --git a/www/node_modules/lodash/fp/omitBy.js b/www/node_modules/lodash/fp/omitBy.js new file mode 100644 index 0000000..745efa5 --- /dev/null +++ b/www/node_modules/lodash/fp/omitBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('omitBy', require('../omitBy')); diff --git a/www/node_modules/lodash/fp/once.js b/www/node_modules/lodash/fp/once.js new file mode 100644 index 0000000..6bd0beb --- /dev/null +++ b/www/node_modules/lodash/fp/once.js @@ -0,0 +1 @@ +module.exports = require('../once'); diff --git a/www/node_modules/lodash/fp/orderBy.js b/www/node_modules/lodash/fp/orderBy.js new file mode 100644 index 0000000..b32244f --- /dev/null +++ b/www/node_modules/lodash/fp/orderBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('orderBy', require('../orderBy')); diff --git a/www/node_modules/lodash/fp/over.js b/www/node_modules/lodash/fp/over.js new file mode 100644 index 0000000..0a5a797 --- /dev/null +++ b/www/node_modules/lodash/fp/over.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('over', require('../over')); diff --git a/www/node_modules/lodash/fp/overArgs.js b/www/node_modules/lodash/fp/overArgs.js new file mode 100644 index 0000000..8188387 --- /dev/null +++ b/www/node_modules/lodash/fp/overArgs.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('overArgs', require('../overArgs')); diff --git a/www/node_modules/lodash/fp/overEvery.js b/www/node_modules/lodash/fp/overEvery.js new file mode 100644 index 0000000..36dc552 --- /dev/null +++ b/www/node_modules/lodash/fp/overEvery.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('overEvery', require('../overEvery')); diff --git a/www/node_modules/lodash/fp/overSome.js b/www/node_modules/lodash/fp/overSome.js new file mode 100644 index 0000000..b02d464 --- /dev/null +++ b/www/node_modules/lodash/fp/overSome.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('overSome', require('../overSome')); diff --git a/www/node_modules/lodash/fp/pad.js b/www/node_modules/lodash/fp/pad.js new file mode 100644 index 0000000..e59cfc9 --- /dev/null +++ b/www/node_modules/lodash/fp/pad.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pad', require('../pad')); diff --git a/www/node_modules/lodash/fp/padEnd.js b/www/node_modules/lodash/fp/padEnd.js new file mode 100644 index 0000000..0b6dbb7 --- /dev/null +++ b/www/node_modules/lodash/fp/padEnd.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('padEnd', require('../padEnd')); diff --git a/www/node_modules/lodash/fp/padStart.js b/www/node_modules/lodash/fp/padStart.js new file mode 100644 index 0000000..c97f098 --- /dev/null +++ b/www/node_modules/lodash/fp/padStart.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('padStart', require('../padStart')); diff --git a/www/node_modules/lodash/fp/parseInt.js b/www/node_modules/lodash/fp/parseInt.js new file mode 100644 index 0000000..35be713 --- /dev/null +++ b/www/node_modules/lodash/fp/parseInt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('parseInt', require('../parseInt')); diff --git a/www/node_modules/lodash/fp/partial.js b/www/node_modules/lodash/fp/partial.js new file mode 100644 index 0000000..a687d0c --- /dev/null +++ b/www/node_modules/lodash/fp/partial.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('partial', require('../partial')); diff --git a/www/node_modules/lodash/fp/partialRight.js b/www/node_modules/lodash/fp/partialRight.js new file mode 100644 index 0000000..28428c0 --- /dev/null +++ b/www/node_modules/lodash/fp/partialRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('partialRight', require('../partialRight')); diff --git a/www/node_modules/lodash/fp/partition.js b/www/node_modules/lodash/fp/partition.js new file mode 100644 index 0000000..b1495e6 --- /dev/null +++ b/www/node_modules/lodash/fp/partition.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('partition', require('../partition')); diff --git a/www/node_modules/lodash/fp/path.js b/www/node_modules/lodash/fp/path.js new file mode 100644 index 0000000..b29cfb2 --- /dev/null +++ b/www/node_modules/lodash/fp/path.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/www/node_modules/lodash/fp/pathEq.js b/www/node_modules/lodash/fp/pathEq.js new file mode 100644 index 0000000..36c027a --- /dev/null +++ b/www/node_modules/lodash/fp/pathEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/www/node_modules/lodash/fp/pathOr.js b/www/node_modules/lodash/fp/pathOr.js new file mode 100644 index 0000000..4ab5820 --- /dev/null +++ b/www/node_modules/lodash/fp/pathOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/www/node_modules/lodash/fp/pick.js b/www/node_modules/lodash/fp/pick.js new file mode 100644 index 0000000..e84b366 --- /dev/null +++ b/www/node_modules/lodash/fp/pick.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pick', require('../pick')); diff --git a/www/node_modules/lodash/fp/pickAll.js b/www/node_modules/lodash/fp/pickAll.js new file mode 100644 index 0000000..a8ecd46 --- /dev/null +++ b/www/node_modules/lodash/fp/pickAll.js @@ -0,0 +1 @@ +module.exports = require('./pick'); diff --git a/www/node_modules/lodash/fp/pickBy.js b/www/node_modules/lodash/fp/pickBy.js new file mode 100644 index 0000000..4d14a0b --- /dev/null +++ b/www/node_modules/lodash/fp/pickBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pickBy', require('../pickBy')); diff --git a/www/node_modules/lodash/fp/pipe.js b/www/node_modules/lodash/fp/pipe.js new file mode 100644 index 0000000..b2e1e2c --- /dev/null +++ b/www/node_modules/lodash/fp/pipe.js @@ -0,0 +1 @@ +module.exports = require('./flow'); diff --git a/www/node_modules/lodash/fp/plant.js b/www/node_modules/lodash/fp/plant.js new file mode 100644 index 0000000..c85596a --- /dev/null +++ b/www/node_modules/lodash/fp/plant.js @@ -0,0 +1 @@ +module.exports = require('../plant'); diff --git a/www/node_modules/lodash/fp/prop.js b/www/node_modules/lodash/fp/prop.js new file mode 100644 index 0000000..b29cfb2 --- /dev/null +++ b/www/node_modules/lodash/fp/prop.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/www/node_modules/lodash/fp/propOf.js b/www/node_modules/lodash/fp/propOf.js new file mode 100644 index 0000000..cf0d197 --- /dev/null +++ b/www/node_modules/lodash/fp/propOf.js @@ -0,0 +1 @@ +module.exports = require('./propertyOf'); diff --git a/www/node_modules/lodash/fp/propOr.js b/www/node_modules/lodash/fp/propOr.js new file mode 100644 index 0000000..4ab5820 --- /dev/null +++ b/www/node_modules/lodash/fp/propOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/www/node_modules/lodash/fp/property.js b/www/node_modules/lodash/fp/property.js new file mode 100644 index 0000000..fab6f23 --- /dev/null +++ b/www/node_modules/lodash/fp/property.js @@ -0,0 +1 @@ +module.exports = require('../property'); diff --git a/www/node_modules/lodash/fp/propertyOf.js b/www/node_modules/lodash/fp/propertyOf.js new file mode 100644 index 0000000..d941cdb --- /dev/null +++ b/www/node_modules/lodash/fp/propertyOf.js @@ -0,0 +1 @@ +module.exports = require('../propertyOf'); diff --git a/www/node_modules/lodash/fp/pull.js b/www/node_modules/lodash/fp/pull.js new file mode 100644 index 0000000..47f49ae --- /dev/null +++ b/www/node_modules/lodash/fp/pull.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pull', require('../pull')); diff --git a/www/node_modules/lodash/fp/pullAll.js b/www/node_modules/lodash/fp/pullAll.js new file mode 100644 index 0000000..ffb663b --- /dev/null +++ b/www/node_modules/lodash/fp/pullAll.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pullAll', require('../pullAll')); diff --git a/www/node_modules/lodash/fp/pullAllBy.js b/www/node_modules/lodash/fp/pullAllBy.js new file mode 100644 index 0000000..23b11b7 --- /dev/null +++ b/www/node_modules/lodash/fp/pullAllBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pullAllBy', require('../pullAllBy')); diff --git a/www/node_modules/lodash/fp/pullAllWith.js b/www/node_modules/lodash/fp/pullAllWith.js new file mode 100644 index 0000000..495d574 --- /dev/null +++ b/www/node_modules/lodash/fp/pullAllWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pullAllWith', require('../pullAllWith')); diff --git a/www/node_modules/lodash/fp/pullAt.js b/www/node_modules/lodash/fp/pullAt.js new file mode 100644 index 0000000..5836d2d --- /dev/null +++ b/www/node_modules/lodash/fp/pullAt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pullAt', require('../pullAt')); diff --git a/www/node_modules/lodash/fp/random.js b/www/node_modules/lodash/fp/random.js new file mode 100644 index 0000000..607d63a --- /dev/null +++ b/www/node_modules/lodash/fp/random.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('random', require('../random')); diff --git a/www/node_modules/lodash/fp/range.js b/www/node_modules/lodash/fp/range.js new file mode 100644 index 0000000..1142304 --- /dev/null +++ b/www/node_modules/lodash/fp/range.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('range', require('../range')); diff --git a/www/node_modules/lodash/fp/rangeRight.js b/www/node_modules/lodash/fp/rangeRight.js new file mode 100644 index 0000000..2248287 --- /dev/null +++ b/www/node_modules/lodash/fp/rangeRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('rangeRight', require('../rangeRight')); diff --git a/www/node_modules/lodash/fp/rearg.js b/www/node_modules/lodash/fp/rearg.js new file mode 100644 index 0000000..b2753e9 --- /dev/null +++ b/www/node_modules/lodash/fp/rearg.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('rearg', require('../rearg')); diff --git a/www/node_modules/lodash/fp/reduce.js b/www/node_modules/lodash/fp/reduce.js new file mode 100644 index 0000000..2f1b425 --- /dev/null +++ b/www/node_modules/lodash/fp/reduce.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('reduce', require('../reduce')); diff --git a/www/node_modules/lodash/fp/reduceRight.js b/www/node_modules/lodash/fp/reduceRight.js new file mode 100644 index 0000000..b110e9e --- /dev/null +++ b/www/node_modules/lodash/fp/reduceRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('reduceRight', require('../reduceRight')); diff --git a/www/node_modules/lodash/fp/reject.js b/www/node_modules/lodash/fp/reject.js new file mode 100644 index 0000000..30bd3bc --- /dev/null +++ b/www/node_modules/lodash/fp/reject.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('reject', require('../reject')); diff --git a/www/node_modules/lodash/fp/remove.js b/www/node_modules/lodash/fp/remove.js new file mode 100644 index 0000000..4b67a94 --- /dev/null +++ b/www/node_modules/lodash/fp/remove.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('remove', require('../remove')); diff --git a/www/node_modules/lodash/fp/repeat.js b/www/node_modules/lodash/fp/repeat.js new file mode 100644 index 0000000..bc0704b --- /dev/null +++ b/www/node_modules/lodash/fp/repeat.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('repeat', require('../repeat')); diff --git a/www/node_modules/lodash/fp/replace.js b/www/node_modules/lodash/fp/replace.js new file mode 100644 index 0000000..a4462e7 --- /dev/null +++ b/www/node_modules/lodash/fp/replace.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('replace', require('../replace')); diff --git a/www/node_modules/lodash/fp/rest.js b/www/node_modules/lodash/fp/rest.js new file mode 100644 index 0000000..69dfc18 --- /dev/null +++ b/www/node_modules/lodash/fp/rest.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('rest', require('../rest')); diff --git a/www/node_modules/lodash/fp/result.js b/www/node_modules/lodash/fp/result.js new file mode 100644 index 0000000..1d3fb58 --- /dev/null +++ b/www/node_modules/lodash/fp/result.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('result', require('../result')); diff --git a/www/node_modules/lodash/fp/reverse.js b/www/node_modules/lodash/fp/reverse.js new file mode 100644 index 0000000..a6d960d --- /dev/null +++ b/www/node_modules/lodash/fp/reverse.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('reverse', require('../reverse')); diff --git a/www/node_modules/lodash/fp/round.js b/www/node_modules/lodash/fp/round.js new file mode 100644 index 0000000..9eb69b1 --- /dev/null +++ b/www/node_modules/lodash/fp/round.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('round', require('../round')); diff --git a/www/node_modules/lodash/fp/sample.js b/www/node_modules/lodash/fp/sample.js new file mode 100644 index 0000000..008cb06 --- /dev/null +++ b/www/node_modules/lodash/fp/sample.js @@ -0,0 +1 @@ +module.exports = require('../sample'); diff --git a/www/node_modules/lodash/fp/sampleSize.js b/www/node_modules/lodash/fp/sampleSize.js new file mode 100644 index 0000000..920c075 --- /dev/null +++ b/www/node_modules/lodash/fp/sampleSize.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sampleSize', require('../sampleSize')); diff --git a/www/node_modules/lodash/fp/seq.js b/www/node_modules/lodash/fp/seq.js new file mode 100644 index 0000000..d8f42b0 --- /dev/null +++ b/www/node_modules/lodash/fp/seq.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../seq')); diff --git a/www/node_modules/lodash/fp/set.js b/www/node_modules/lodash/fp/set.js new file mode 100644 index 0000000..fc2a75b --- /dev/null +++ b/www/node_modules/lodash/fp/set.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('set', require('../set')); diff --git a/www/node_modules/lodash/fp/setWith.js b/www/node_modules/lodash/fp/setWith.js new file mode 100644 index 0000000..fd836ea --- /dev/null +++ b/www/node_modules/lodash/fp/setWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('setWith', require('../setWith')); diff --git a/www/node_modules/lodash/fp/shuffle.js b/www/node_modules/lodash/fp/shuffle.js new file mode 100644 index 0000000..85d5699 --- /dev/null +++ b/www/node_modules/lodash/fp/shuffle.js @@ -0,0 +1 @@ +module.exports = require('../shuffle'); diff --git a/www/node_modules/lodash/fp/size.js b/www/node_modules/lodash/fp/size.js new file mode 100644 index 0000000..efba2ca --- /dev/null +++ b/www/node_modules/lodash/fp/size.js @@ -0,0 +1 @@ +module.exports = require('../size'); diff --git a/www/node_modules/lodash/fp/slice.js b/www/node_modules/lodash/fp/slice.js new file mode 100644 index 0000000..6fb1898 --- /dev/null +++ b/www/node_modules/lodash/fp/slice.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('slice', require('../slice')); diff --git a/www/node_modules/lodash/fp/snakeCase.js b/www/node_modules/lodash/fp/snakeCase.js new file mode 100644 index 0000000..2893f7b --- /dev/null +++ b/www/node_modules/lodash/fp/snakeCase.js @@ -0,0 +1 @@ +module.exports = require('../snakeCase'); diff --git a/www/node_modules/lodash/fp/some.js b/www/node_modules/lodash/fp/some.js new file mode 100644 index 0000000..64727fe --- /dev/null +++ b/www/node_modules/lodash/fp/some.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('some', require('../some')); diff --git a/www/node_modules/lodash/fp/somePass.js b/www/node_modules/lodash/fp/somePass.js new file mode 100644 index 0000000..2774ab3 --- /dev/null +++ b/www/node_modules/lodash/fp/somePass.js @@ -0,0 +1 @@ +module.exports = require('./overSome'); diff --git a/www/node_modules/lodash/fp/sortBy.js b/www/node_modules/lodash/fp/sortBy.js new file mode 100644 index 0000000..80fe4dd --- /dev/null +++ b/www/node_modules/lodash/fp/sortBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortBy', require('../sortBy')); diff --git a/www/node_modules/lodash/fp/sortedIndex.js b/www/node_modules/lodash/fp/sortedIndex.js new file mode 100644 index 0000000..509dcb8 --- /dev/null +++ b/www/node_modules/lodash/fp/sortedIndex.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedIndex', require('../sortedIndex')); diff --git a/www/node_modules/lodash/fp/sortedIndexBy.js b/www/node_modules/lodash/fp/sortedIndexBy.js new file mode 100644 index 0000000..aa2d219 --- /dev/null +++ b/www/node_modules/lodash/fp/sortedIndexBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedIndexBy', require('../sortedIndexBy')); diff --git a/www/node_modules/lodash/fp/sortedIndexOf.js b/www/node_modules/lodash/fp/sortedIndexOf.js new file mode 100644 index 0000000..c127420 --- /dev/null +++ b/www/node_modules/lodash/fp/sortedIndexOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedIndexOf', require('../sortedIndexOf')); diff --git a/www/node_modules/lodash/fp/sortedLastIndex.js b/www/node_modules/lodash/fp/sortedLastIndex.js new file mode 100644 index 0000000..7ec9e33 --- /dev/null +++ b/www/node_modules/lodash/fp/sortedLastIndex.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedLastIndex', require('../sortedLastIndex')); diff --git a/www/node_modules/lodash/fp/sortedLastIndexBy.js b/www/node_modules/lodash/fp/sortedLastIndexBy.js new file mode 100644 index 0000000..e03f185 --- /dev/null +++ b/www/node_modules/lodash/fp/sortedLastIndexBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); diff --git a/www/node_modules/lodash/fp/sortedLastIndexOf.js b/www/node_modules/lodash/fp/sortedLastIndexOf.js new file mode 100644 index 0000000..0130801 --- /dev/null +++ b/www/node_modules/lodash/fp/sortedLastIndexOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); diff --git a/www/node_modules/lodash/fp/sortedUniq.js b/www/node_modules/lodash/fp/sortedUniq.js new file mode 100644 index 0000000..c0df750 --- /dev/null +++ b/www/node_modules/lodash/fp/sortedUniq.js @@ -0,0 +1 @@ +module.exports = require('../sortedUniq'); diff --git a/www/node_modules/lodash/fp/sortedUniqBy.js b/www/node_modules/lodash/fp/sortedUniqBy.js new file mode 100644 index 0000000..f5c65ad --- /dev/null +++ b/www/node_modules/lodash/fp/sortedUniqBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedUniqBy', require('../sortedUniqBy')); diff --git a/www/node_modules/lodash/fp/split.js b/www/node_modules/lodash/fp/split.js new file mode 100644 index 0000000..79f2693 --- /dev/null +++ b/www/node_modules/lodash/fp/split.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('split', require('../split')); diff --git a/www/node_modules/lodash/fp/spread.js b/www/node_modules/lodash/fp/spread.js new file mode 100644 index 0000000..0348df2 --- /dev/null +++ b/www/node_modules/lodash/fp/spread.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('spread', require('../spread')); diff --git a/www/node_modules/lodash/fp/startCase.js b/www/node_modules/lodash/fp/startCase.js new file mode 100644 index 0000000..2a6a66e --- /dev/null +++ b/www/node_modules/lodash/fp/startCase.js @@ -0,0 +1 @@ +module.exports = require('../startCase'); diff --git a/www/node_modules/lodash/fp/startsWith.js b/www/node_modules/lodash/fp/startsWith.js new file mode 100644 index 0000000..730a141 --- /dev/null +++ b/www/node_modules/lodash/fp/startsWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('startsWith', require('../startsWith')); diff --git a/www/node_modules/lodash/fp/string.js b/www/node_modules/lodash/fp/string.js new file mode 100644 index 0000000..773b037 --- /dev/null +++ b/www/node_modules/lodash/fp/string.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../string')); diff --git a/www/node_modules/lodash/fp/subtract.js b/www/node_modules/lodash/fp/subtract.js new file mode 100644 index 0000000..46b83db --- /dev/null +++ b/www/node_modules/lodash/fp/subtract.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('subtract', require('../subtract')); diff --git a/www/node_modules/lodash/fp/sum.js b/www/node_modules/lodash/fp/sum.js new file mode 100644 index 0000000..e8a59c5 --- /dev/null +++ b/www/node_modules/lodash/fp/sum.js @@ -0,0 +1 @@ +module.exports = require('../sum'); diff --git a/www/node_modules/lodash/fp/sumBy.js b/www/node_modules/lodash/fp/sumBy.js new file mode 100644 index 0000000..2692dc1 --- /dev/null +++ b/www/node_modules/lodash/fp/sumBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sumBy', require('../sumBy')); diff --git a/www/node_modules/lodash/fp/tail.js b/www/node_modules/lodash/fp/tail.js new file mode 100644 index 0000000..36c6494 --- /dev/null +++ b/www/node_modules/lodash/fp/tail.js @@ -0,0 +1 @@ +module.exports = require('../tail'); diff --git a/www/node_modules/lodash/fp/take.js b/www/node_modules/lodash/fp/take.js new file mode 100644 index 0000000..e0984a4 --- /dev/null +++ b/www/node_modules/lodash/fp/take.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('take', require('../take')); diff --git a/www/node_modules/lodash/fp/takeRight.js b/www/node_modules/lodash/fp/takeRight.js new file mode 100644 index 0000000..7b7c3ce --- /dev/null +++ b/www/node_modules/lodash/fp/takeRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('takeRight', require('../takeRight')); diff --git a/www/node_modules/lodash/fp/takeRightWhile.js b/www/node_modules/lodash/fp/takeRightWhile.js new file mode 100644 index 0000000..305b254 --- /dev/null +++ b/www/node_modules/lodash/fp/takeRightWhile.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('takeRightWhile', require('../takeRightWhile')); diff --git a/www/node_modules/lodash/fp/takeWhile.js b/www/node_modules/lodash/fp/takeWhile.js new file mode 100644 index 0000000..a90126d --- /dev/null +++ b/www/node_modules/lodash/fp/takeWhile.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('takeWhile', require('../takeWhile')); diff --git a/www/node_modules/lodash/fp/tap.js b/www/node_modules/lodash/fp/tap.js new file mode 100644 index 0000000..3bec2bd --- /dev/null +++ b/www/node_modules/lodash/fp/tap.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('tap', require('../tap')); diff --git a/www/node_modules/lodash/fp/template.js b/www/node_modules/lodash/fp/template.js new file mode 100644 index 0000000..0130d14 --- /dev/null +++ b/www/node_modules/lodash/fp/template.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('template', require('../template')); diff --git a/www/node_modules/lodash/fp/templateSettings.js b/www/node_modules/lodash/fp/templateSettings.js new file mode 100644 index 0000000..ddbbb58 --- /dev/null +++ b/www/node_modules/lodash/fp/templateSettings.js @@ -0,0 +1 @@ +module.exports = require('../templateSettings'); diff --git a/www/node_modules/lodash/fp/throttle.js b/www/node_modules/lodash/fp/throttle.js new file mode 100644 index 0000000..36f76d6 --- /dev/null +++ b/www/node_modules/lodash/fp/throttle.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('throttle', require('../throttle')); diff --git a/www/node_modules/lodash/fp/thru.js b/www/node_modules/lodash/fp/thru.js new file mode 100644 index 0000000..05ddaef --- /dev/null +++ b/www/node_modules/lodash/fp/thru.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('thru', require('../thru')); diff --git a/www/node_modules/lodash/fp/times.js b/www/node_modules/lodash/fp/times.js new file mode 100644 index 0000000..02fd3b7 --- /dev/null +++ b/www/node_modules/lodash/fp/times.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('times', require('../times')); diff --git a/www/node_modules/lodash/fp/toArray.js b/www/node_modules/lodash/fp/toArray.js new file mode 100644 index 0000000..1ea0b52 --- /dev/null +++ b/www/node_modules/lodash/fp/toArray.js @@ -0,0 +1 @@ +module.exports = require('../toArray'); diff --git a/www/node_modules/lodash/fp/toInteger.js b/www/node_modules/lodash/fp/toInteger.js new file mode 100644 index 0000000..17e59a3 --- /dev/null +++ b/www/node_modules/lodash/fp/toInteger.js @@ -0,0 +1 @@ +module.exports = require('../toInteger'); diff --git a/www/node_modules/lodash/fp/toIterator.js b/www/node_modules/lodash/fp/toIterator.js new file mode 100644 index 0000000..13bf21c --- /dev/null +++ b/www/node_modules/lodash/fp/toIterator.js @@ -0,0 +1 @@ +module.exports = require('../toIterator'); diff --git a/www/node_modules/lodash/fp/toJSON.js b/www/node_modules/lodash/fp/toJSON.js new file mode 100644 index 0000000..5f6cb92 --- /dev/null +++ b/www/node_modules/lodash/fp/toJSON.js @@ -0,0 +1 @@ +module.exports = require('../toJSON'); diff --git a/www/node_modules/lodash/fp/toLength.js b/www/node_modules/lodash/fp/toLength.js new file mode 100644 index 0000000..38529fb --- /dev/null +++ b/www/node_modules/lodash/fp/toLength.js @@ -0,0 +1 @@ +module.exports = require('../toLength'); diff --git a/www/node_modules/lodash/fp/toLower.js b/www/node_modules/lodash/fp/toLower.js new file mode 100644 index 0000000..01d3432 --- /dev/null +++ b/www/node_modules/lodash/fp/toLower.js @@ -0,0 +1 @@ +module.exports = require('../toLower'); diff --git a/www/node_modules/lodash/fp/toNumber.js b/www/node_modules/lodash/fp/toNumber.js new file mode 100644 index 0000000..071e320 --- /dev/null +++ b/www/node_modules/lodash/fp/toNumber.js @@ -0,0 +1 @@ +module.exports = require('../toNumber'); diff --git a/www/node_modules/lodash/fp/toPairs.js b/www/node_modules/lodash/fp/toPairs.js new file mode 100644 index 0000000..4b4dcb7 --- /dev/null +++ b/www/node_modules/lodash/fp/toPairs.js @@ -0,0 +1 @@ +module.exports = require('../toPairs'); diff --git a/www/node_modules/lodash/fp/toPairsIn.js b/www/node_modules/lodash/fp/toPairsIn.js new file mode 100644 index 0000000..53076cc --- /dev/null +++ b/www/node_modules/lodash/fp/toPairsIn.js @@ -0,0 +1 @@ +module.exports = require('../toPairsIn'); diff --git a/www/node_modules/lodash/fp/toPath.js b/www/node_modules/lodash/fp/toPath.js new file mode 100644 index 0000000..62762ec --- /dev/null +++ b/www/node_modules/lodash/fp/toPath.js @@ -0,0 +1 @@ +module.exports = require('../toPath'); diff --git a/www/node_modules/lodash/fp/toPlainObject.js b/www/node_modules/lodash/fp/toPlainObject.js new file mode 100644 index 0000000..6a6aebd --- /dev/null +++ b/www/node_modules/lodash/fp/toPlainObject.js @@ -0,0 +1 @@ +module.exports = require('../toPlainObject'); diff --git a/www/node_modules/lodash/fp/toSafeInteger.js b/www/node_modules/lodash/fp/toSafeInteger.js new file mode 100644 index 0000000..3f5b817 --- /dev/null +++ b/www/node_modules/lodash/fp/toSafeInteger.js @@ -0,0 +1 @@ +module.exports = require('../toSafeInteger'); diff --git a/www/node_modules/lodash/fp/toString.js b/www/node_modules/lodash/fp/toString.js new file mode 100644 index 0000000..c309058 --- /dev/null +++ b/www/node_modules/lodash/fp/toString.js @@ -0,0 +1 @@ +module.exports = require('../[object Object]'); diff --git a/www/node_modules/lodash/fp/toUpper.js b/www/node_modules/lodash/fp/toUpper.js new file mode 100644 index 0000000..428eb33 --- /dev/null +++ b/www/node_modules/lodash/fp/toUpper.js @@ -0,0 +1 @@ +module.exports = require('../toUpper'); diff --git a/www/node_modules/lodash/fp/transform.js b/www/node_modules/lodash/fp/transform.js new file mode 100644 index 0000000..30bed49 --- /dev/null +++ b/www/node_modules/lodash/fp/transform.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('transform', require('../transform')); diff --git a/www/node_modules/lodash/fp/trim.js b/www/node_modules/lodash/fp/trim.js new file mode 100644 index 0000000..b7cafe9 --- /dev/null +++ b/www/node_modules/lodash/fp/trim.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trim', require('../trim')); diff --git a/www/node_modules/lodash/fp/trimChars.js b/www/node_modules/lodash/fp/trimChars.js new file mode 100644 index 0000000..051ea1e --- /dev/null +++ b/www/node_modules/lodash/fp/trimChars.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimChars', require('../trim')); diff --git a/www/node_modules/lodash/fp/trimCharsEnd.js b/www/node_modules/lodash/fp/trimCharsEnd.js new file mode 100644 index 0000000..54c5cff --- /dev/null +++ b/www/node_modules/lodash/fp/trimCharsEnd.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimCharsEnd', require('../trimEnd')); diff --git a/www/node_modules/lodash/fp/trimCharsStart.js b/www/node_modules/lodash/fp/trimCharsStart.js new file mode 100644 index 0000000..44f9866 --- /dev/null +++ b/www/node_modules/lodash/fp/trimCharsStart.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimCharsStart', require('../trimStart')); diff --git a/www/node_modules/lodash/fp/trimEnd.js b/www/node_modules/lodash/fp/trimEnd.js new file mode 100644 index 0000000..1666596 --- /dev/null +++ b/www/node_modules/lodash/fp/trimEnd.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimEnd', require('../trimEnd')); diff --git a/www/node_modules/lodash/fp/trimStart.js b/www/node_modules/lodash/fp/trimStart.js new file mode 100644 index 0000000..4921b03 --- /dev/null +++ b/www/node_modules/lodash/fp/trimStart.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimStart', require('../trimStart')); diff --git a/www/node_modules/lodash/fp/truncate.js b/www/node_modules/lodash/fp/truncate.js new file mode 100644 index 0000000..0c4d158 --- /dev/null +++ b/www/node_modules/lodash/fp/truncate.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('truncate', require('../truncate')); diff --git a/www/node_modules/lodash/fp/unapply.js b/www/node_modules/lodash/fp/unapply.js new file mode 100644 index 0000000..c5dfe77 --- /dev/null +++ b/www/node_modules/lodash/fp/unapply.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/www/node_modules/lodash/fp/unary.js b/www/node_modules/lodash/fp/unary.js new file mode 100644 index 0000000..3bc6483 --- /dev/null +++ b/www/node_modules/lodash/fp/unary.js @@ -0,0 +1 @@ +module.exports = require('../unary'); diff --git a/www/node_modules/lodash/fp/unescape.js b/www/node_modules/lodash/fp/unescape.js new file mode 100644 index 0000000..4233b15 --- /dev/null +++ b/www/node_modules/lodash/fp/unescape.js @@ -0,0 +1 @@ +module.exports = require('../unescape'); diff --git a/www/node_modules/lodash/fp/union.js b/www/node_modules/lodash/fp/union.js new file mode 100644 index 0000000..9deef12 --- /dev/null +++ b/www/node_modules/lodash/fp/union.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('union', require('../union')); diff --git a/www/node_modules/lodash/fp/unionBy.js b/www/node_modules/lodash/fp/unionBy.js new file mode 100644 index 0000000..029b359 --- /dev/null +++ b/www/node_modules/lodash/fp/unionBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('unionBy', require('../unionBy')); diff --git a/www/node_modules/lodash/fp/unionWith.js b/www/node_modules/lodash/fp/unionWith.js new file mode 100644 index 0000000..631eda0 --- /dev/null +++ b/www/node_modules/lodash/fp/unionWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('unionWith', require('../unionWith')); diff --git a/www/node_modules/lodash/fp/uniq.js b/www/node_modules/lodash/fp/uniq.js new file mode 100644 index 0000000..c64510f --- /dev/null +++ b/www/node_modules/lodash/fp/uniq.js @@ -0,0 +1 @@ +module.exports = require('../uniq'); diff --git a/www/node_modules/lodash/fp/uniqBy.js b/www/node_modules/lodash/fp/uniqBy.js new file mode 100644 index 0000000..1b6c03f --- /dev/null +++ b/www/node_modules/lodash/fp/uniqBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('uniqBy', require('../uniqBy')); diff --git a/www/node_modules/lodash/fp/uniqWith.js b/www/node_modules/lodash/fp/uniqWith.js new file mode 100644 index 0000000..be4c48d --- /dev/null +++ b/www/node_modules/lodash/fp/uniqWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('uniqWith', require('../uniqWith')); diff --git a/www/node_modules/lodash/fp/uniqueId.js b/www/node_modules/lodash/fp/uniqueId.js new file mode 100644 index 0000000..daa41cb --- /dev/null +++ b/www/node_modules/lodash/fp/uniqueId.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('uniqueId', require('../uniqueId')); diff --git a/www/node_modules/lodash/fp/unnest.js b/www/node_modules/lodash/fp/unnest.js new file mode 100644 index 0000000..5d34060 --- /dev/null +++ b/www/node_modules/lodash/fp/unnest.js @@ -0,0 +1 @@ +module.exports = require('./flatten'); diff --git a/www/node_modules/lodash/fp/unset.js b/www/node_modules/lodash/fp/unset.js new file mode 100644 index 0000000..0c4c1a6 --- /dev/null +++ b/www/node_modules/lodash/fp/unset.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('unset', require('../unset')); diff --git a/www/node_modules/lodash/fp/unzip.js b/www/node_modules/lodash/fp/unzip.js new file mode 100644 index 0000000..e0ac2db --- /dev/null +++ b/www/node_modules/lodash/fp/unzip.js @@ -0,0 +1 @@ +module.exports = require('../unzip'); diff --git a/www/node_modules/lodash/fp/unzipWith.js b/www/node_modules/lodash/fp/unzipWith.js new file mode 100644 index 0000000..de25cf7 --- /dev/null +++ b/www/node_modules/lodash/fp/unzipWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('unzipWith', require('../unzipWith')); diff --git a/www/node_modules/lodash/fp/update.js b/www/node_modules/lodash/fp/update.js new file mode 100644 index 0000000..93e0d57 --- /dev/null +++ b/www/node_modules/lodash/fp/update.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('update', require('../update')); diff --git a/www/node_modules/lodash/fp/updateWith.js b/www/node_modules/lodash/fp/updateWith.js new file mode 100644 index 0000000..a6ed49e --- /dev/null +++ b/www/node_modules/lodash/fp/updateWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('updateWith', require('../updateWith')); diff --git a/www/node_modules/lodash/fp/upperCase.js b/www/node_modules/lodash/fp/upperCase.js new file mode 100644 index 0000000..ddcb369 --- /dev/null +++ b/www/node_modules/lodash/fp/upperCase.js @@ -0,0 +1 @@ +module.exports = require('../upperCase'); diff --git a/www/node_modules/lodash/fp/upperFirst.js b/www/node_modules/lodash/fp/upperFirst.js new file mode 100644 index 0000000..34f1e20 --- /dev/null +++ b/www/node_modules/lodash/fp/upperFirst.js @@ -0,0 +1 @@ +module.exports = require('../upperFirst'); diff --git a/www/node_modules/lodash/fp/useWith.js b/www/node_modules/lodash/fp/useWith.js new file mode 100644 index 0000000..d8b3df5 --- /dev/null +++ b/www/node_modules/lodash/fp/useWith.js @@ -0,0 +1 @@ +module.exports = require('./overArgs'); diff --git a/www/node_modules/lodash/fp/util.js b/www/node_modules/lodash/fp/util.js new file mode 100644 index 0000000..18c00ba --- /dev/null +++ b/www/node_modules/lodash/fp/util.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../util')); diff --git a/www/node_modules/lodash/fp/value.js b/www/node_modules/lodash/fp/value.js new file mode 100644 index 0000000..4dc0e7e --- /dev/null +++ b/www/node_modules/lodash/fp/value.js @@ -0,0 +1 @@ +module.exports = require('../value'); diff --git a/www/node_modules/lodash/fp/valueOf.js b/www/node_modules/lodash/fp/valueOf.js new file mode 100644 index 0000000..c309058 --- /dev/null +++ b/www/node_modules/lodash/fp/valueOf.js @@ -0,0 +1 @@ +module.exports = require('../[object Object]'); diff --git a/www/node_modules/lodash/fp/values.js b/www/node_modules/lodash/fp/values.js new file mode 100644 index 0000000..3843170 --- /dev/null +++ b/www/node_modules/lodash/fp/values.js @@ -0,0 +1 @@ +module.exports = require('../values'); diff --git a/www/node_modules/lodash/fp/valuesIn.js b/www/node_modules/lodash/fp/valuesIn.js new file mode 100644 index 0000000..f81c171 --- /dev/null +++ b/www/node_modules/lodash/fp/valuesIn.js @@ -0,0 +1 @@ +module.exports = require('../valuesIn'); diff --git a/www/node_modules/lodash/fp/whereEq.js b/www/node_modules/lodash/fp/whereEq.js new file mode 100644 index 0000000..ade80f6 --- /dev/null +++ b/www/node_modules/lodash/fp/whereEq.js @@ -0,0 +1 @@ +module.exports = require('./filter'); diff --git a/www/node_modules/lodash/fp/without.js b/www/node_modules/lodash/fp/without.js new file mode 100644 index 0000000..5238e94 --- /dev/null +++ b/www/node_modules/lodash/fp/without.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('without', require('../without')); diff --git a/www/node_modules/lodash/fp/words.js b/www/node_modules/lodash/fp/words.js new file mode 100644 index 0000000..b58a485 --- /dev/null +++ b/www/node_modules/lodash/fp/words.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('words', require('../words')); diff --git a/www/node_modules/lodash/fp/wrap.js b/www/node_modules/lodash/fp/wrap.js new file mode 100644 index 0000000..56465a2 --- /dev/null +++ b/www/node_modules/lodash/fp/wrap.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('wrap', require('../wrap')); diff --git a/www/node_modules/lodash/fp/wrapperAt.js b/www/node_modules/lodash/fp/wrapperAt.js new file mode 100644 index 0000000..f8d37a1 --- /dev/null +++ b/www/node_modules/lodash/fp/wrapperAt.js @@ -0,0 +1 @@ +module.exports = require('../wrapperAt'); diff --git a/www/node_modules/lodash/fp/wrapperChain.js b/www/node_modules/lodash/fp/wrapperChain.js new file mode 100644 index 0000000..964a846 --- /dev/null +++ b/www/node_modules/lodash/fp/wrapperChain.js @@ -0,0 +1 @@ +module.exports = require('../wrapperChain'); diff --git a/www/node_modules/lodash/fp/wrapperFlatMap.js b/www/node_modules/lodash/fp/wrapperFlatMap.js new file mode 100644 index 0000000..fa030c0 --- /dev/null +++ b/www/node_modules/lodash/fp/wrapperFlatMap.js @@ -0,0 +1 @@ +module.exports = require('../wrapperFlatMap'); diff --git a/www/node_modules/lodash/fp/wrapperLodash.js b/www/node_modules/lodash/fp/wrapperLodash.js new file mode 100644 index 0000000..d62a996 --- /dev/null +++ b/www/node_modules/lodash/fp/wrapperLodash.js @@ -0,0 +1 @@ +module.exports = require('../wrapperLodash'); diff --git a/www/node_modules/lodash/fp/wrapperReverse.js b/www/node_modules/lodash/fp/wrapperReverse.js new file mode 100644 index 0000000..cf70388 --- /dev/null +++ b/www/node_modules/lodash/fp/wrapperReverse.js @@ -0,0 +1 @@ +module.exports = require('../wrapperReverse'); diff --git a/www/node_modules/lodash/fp/wrapperValue.js b/www/node_modules/lodash/fp/wrapperValue.js new file mode 100644 index 0000000..494dfb1 --- /dev/null +++ b/www/node_modules/lodash/fp/wrapperValue.js @@ -0,0 +1 @@ +module.exports = require('../wrapperValue'); diff --git a/www/node_modules/lodash/fp/xor.js b/www/node_modules/lodash/fp/xor.js new file mode 100644 index 0000000..0f3e025 --- /dev/null +++ b/www/node_modules/lodash/fp/xor.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('xor', require('../xor')); diff --git a/www/node_modules/lodash/fp/xorBy.js b/www/node_modules/lodash/fp/xorBy.js new file mode 100644 index 0000000..e48fc41 --- /dev/null +++ b/www/node_modules/lodash/fp/xorBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('xorBy', require('../xorBy')); diff --git a/www/node_modules/lodash/fp/xorWith.js b/www/node_modules/lodash/fp/xorWith.js new file mode 100644 index 0000000..5c2eebe --- /dev/null +++ b/www/node_modules/lodash/fp/xorWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('xorWith', require('../xorWith')); diff --git a/www/node_modules/lodash/fp/zip.js b/www/node_modules/lodash/fp/zip.js new file mode 100644 index 0000000..0cae73b --- /dev/null +++ b/www/node_modules/lodash/fp/zip.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('zip', require('../zip')); diff --git a/www/node_modules/lodash/fp/zipObj.js b/www/node_modules/lodash/fp/zipObj.js new file mode 100644 index 0000000..f4a3453 --- /dev/null +++ b/www/node_modules/lodash/fp/zipObj.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/www/node_modules/lodash/fp/zipObject.js b/www/node_modules/lodash/fp/zipObject.js new file mode 100644 index 0000000..8c2ff3b --- /dev/null +++ b/www/node_modules/lodash/fp/zipObject.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('zipObject', require('../zipObject')); diff --git a/www/node_modules/lodash/fp/zipObjectDeep.js b/www/node_modules/lodash/fp/zipObjectDeep.js new file mode 100644 index 0000000..a0ee4e3 --- /dev/null +++ b/www/node_modules/lodash/fp/zipObjectDeep.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('zipObjectDeep', require('../zipObjectDeep')); diff --git a/www/node_modules/lodash/fp/zipWith.js b/www/node_modules/lodash/fp/zipWith.js new file mode 100644 index 0000000..da75f3d --- /dev/null +++ b/www/node_modules/lodash/fp/zipWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('zipWith', require('../zipWith')); diff --git a/www/node_modules/lodash/fromPairs.js b/www/node_modules/lodash/fromPairs.js new file mode 100644 index 0000000..c18c1e3 --- /dev/null +++ b/www/node_modules/lodash/fromPairs.js @@ -0,0 +1,27 @@ +/** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + */ +function fromPairs(pairs) { + var index = -1, + length = pairs ? pairs.length : 0, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; +} + +module.exports = fromPairs; diff --git a/www/node_modules/lodash/function.js b/www/node_modules/lodash/function.js new file mode 100644 index 0000000..b0fc6d9 --- /dev/null +++ b/www/node_modules/lodash/function.js @@ -0,0 +1,25 @@ +module.exports = { + 'after': require('./after'), + 'ary': require('./ary'), + 'before': require('./before'), + 'bind': require('./bind'), + 'bindKey': require('./bindKey'), + 'curry': require('./curry'), + 'curryRight': require('./curryRight'), + 'debounce': require('./debounce'), + 'defer': require('./defer'), + 'delay': require('./delay'), + 'flip': require('./flip'), + 'memoize': require('./memoize'), + 'negate': require('./negate'), + 'once': require('./once'), + 'overArgs': require('./overArgs'), + 'partial': require('./partial'), + 'partialRight': require('./partialRight'), + 'rearg': require('./rearg'), + 'rest': require('./rest'), + 'spread': require('./spread'), + 'throttle': require('./throttle'), + 'unary': require('./unary'), + 'wrap': require('./wrap') +}; diff --git a/www/node_modules/lodash/functions.js b/www/node_modules/lodash/functions.js new file mode 100644 index 0000000..b50a197 --- /dev/null +++ b/www/node_modules/lodash/functions.js @@ -0,0 +1,29 @@ +var baseFunctions = require('./_baseFunctions'), + keys = require('./keys'); + +/** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ +function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); +} + +module.exports = functions; diff --git a/www/node_modules/lodash/functionsIn.js b/www/node_modules/lodash/functionsIn.js new file mode 100644 index 0000000..b48e5a6 --- /dev/null +++ b/www/node_modules/lodash/functionsIn.js @@ -0,0 +1,29 @@ +var baseFunctions = require('./_baseFunctions'), + keysIn = require('./keysIn'); + +/** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ +function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); +} + +module.exports = functionsIn; diff --git a/www/node_modules/lodash/get.js b/www/node_modules/lodash/get.js new file mode 100644 index 0000000..755fa05 --- /dev/null +++ b/www/node_modules/lodash/get.js @@ -0,0 +1,32 @@ +var baseGet = require('./_baseGet'); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined` the `defaultValue` is used in its place. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; diff --git a/www/node_modules/lodash/groupBy.js b/www/node_modules/lodash/groupBy.js new file mode 100644 index 0000000..728a6da --- /dev/null +++ b/www/node_modules/lodash/groupBy.js @@ -0,0 +1,38 @@ +var createAggregator = require('./_createAggregator'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of elements responsible for generating the key. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } +}); + +module.exports = groupBy; diff --git a/www/node_modules/lodash/gt.js b/www/node_modules/lodash/gt.js new file mode 100644 index 0000000..ddaf5ea --- /dev/null +++ b/www/node_modules/lodash/gt.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ +function gt(value, other) { + return value > other; +} + +module.exports = gt; diff --git a/www/node_modules/lodash/gte.js b/www/node_modules/lodash/gte.js new file mode 100644 index 0000000..4a5ffb5 --- /dev/null +++ b/www/node_modules/lodash/gte.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ +function gte(value, other) { + return value >= other; +} + +module.exports = gte; diff --git a/www/node_modules/lodash/has.js b/www/node_modules/lodash/has.js new file mode 100644 index 0000000..d66d2de --- /dev/null +++ b/www/node_modules/lodash/has.js @@ -0,0 +1,34 @@ +var baseHas = require('./_baseHas'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * var other = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return hasPath(object, path, baseHas); +} + +module.exports = has; diff --git a/www/node_modules/lodash/hasIn.js b/www/node_modules/lodash/hasIn.js new file mode 100644 index 0000000..7da6b7d --- /dev/null +++ b/www/node_modules/lodash/hasIn.js @@ -0,0 +1,33 @@ +var baseHasIn = require('./_baseHasIn'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b.c'); + * // => true + * + * _.hasIn(object, ['a', 'b', 'c']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return hasPath(object, path, baseHasIn); +} + +module.exports = hasIn; diff --git a/www/node_modules/lodash/head.js b/www/node_modules/lodash/head.js new file mode 100644 index 0000000..30b47b0 --- /dev/null +++ b/www/node_modules/lodash/head.js @@ -0,0 +1,22 @@ +/** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ +function head(array) { + return array ? array[0] : undefined; +} + +module.exports = head; diff --git a/www/node_modules/lodash/identity.js b/www/node_modules/lodash/identity.js new file mode 100644 index 0000000..da7dea1 --- /dev/null +++ b/www/node_modules/lodash/identity.js @@ -0,0 +1,20 @@ +/** + * This method returns the first argument given to it. + * + * @static + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; diff --git a/www/node_modules/lodash/inRange.js b/www/node_modules/lodash/inRange.js new file mode 100644 index 0000000..69c6110 --- /dev/null +++ b/www/node_modules/lodash/inRange.js @@ -0,0 +1,52 @@ +var baseInRange = require('./_baseInRange'), + toNumber = require('./toNumber'); + +/** + * Checks if `n` is between `start` and up to but not including, `end`. If + * `end` is not specified it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ +function inRange(number, start, end) { + start = toNumber(start) || 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = toNumber(end) || 0; + } + number = toNumber(number); + return baseInRange(number, start, end); +} + +module.exports = inRange; diff --git a/www/node_modules/lodash/includes.js b/www/node_modules/lodash/includes.js new file mode 100644 index 0000000..01d6844 --- /dev/null +++ b/www/node_modules/lodash/includes.js @@ -0,0 +1,51 @@ +var baseIndexOf = require('./_baseIndexOf'), + isArrayLike = require('./isArrayLike'), + isString = require('./isString'), + toInteger = require('./toInteger'), + values = require('./values'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `value` is in `collection`. If `collection` is a string it's checked + * for a substring of `value`, otherwise [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +module.exports = includes; diff --git a/www/node_modules/lodash/index.js b/www/node_modules/lodash/index.js new file mode 100644 index 0000000..5d063e2 --- /dev/null +++ b/www/node_modules/lodash/index.js @@ -0,0 +1 @@ +module.exports = require('./lodash'); \ No newline at end of file diff --git a/www/node_modules/lodash/indexOf.js b/www/node_modules/lodash/indexOf.js new file mode 100644 index 0000000..4474d0c --- /dev/null +++ b/www/node_modules/lodash/indexOf.js @@ -0,0 +1,41 @@ +var baseIndexOf = require('./_baseIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ +function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + fromIndex = toInteger(fromIndex); + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return baseIndexOf(array, value, fromIndex); +} + +module.exports = indexOf; diff --git a/www/node_modules/lodash/initial.js b/www/node_modules/lodash/initial.js new file mode 100644 index 0000000..59b7a7d --- /dev/null +++ b/www/node_modules/lodash/initial.js @@ -0,0 +1,20 @@ +var dropRight = require('./dropRight'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + return dropRight(array, 1); +} + +module.exports = initial; diff --git a/www/node_modules/lodash/intersection.js b/www/node_modules/lodash/intersection.js new file mode 100644 index 0000000..25495fe --- /dev/null +++ b/www/node_modules/lodash/intersection.js @@ -0,0 +1,29 @@ +var arrayMap = require('./_arrayMap'), + baseCastArrayLikeObject = require('./_baseCastArrayLikeObject'), + baseIntersection = require('./_baseIntersection'), + rest = require('./rest'); + +/** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. The order of result values is determined by the + * order they occur in the first array. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [4, 2], [1, 2]); + * // => [2] + */ +var intersection = rest(function(arrays) { + var mapped = arrayMap(arrays, baseCastArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; +}); + +module.exports = intersection; diff --git a/www/node_modules/lodash/intersectionBy.js b/www/node_modules/lodash/intersectionBy.js new file mode 100644 index 0000000..41bcec5 --- /dev/null +++ b/www/node_modules/lodash/intersectionBy.js @@ -0,0 +1,43 @@ +var arrayMap = require('./_arrayMap'), + baseCastArrayLikeObject = require('./_baseCastArrayLikeObject'), + baseIntersection = require('./_baseIntersection'), + baseIteratee = require('./_baseIteratee'), + last = require('./last'), + rest = require('./rest'); + +/** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. Result values are chosen from the first array. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ +var intersectionBy = rest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, baseCastArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee)) + : []; +}); + +module.exports = intersectionBy; diff --git a/www/node_modules/lodash/intersectionWith.js b/www/node_modules/lodash/intersectionWith.js new file mode 100644 index 0000000..c24c25a --- /dev/null +++ b/www/node_modules/lodash/intersectionWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('./_arrayMap'), + baseCastArrayLikeObject = require('./_baseCastArrayLikeObject'), + baseIntersection = require('./_baseIntersection'), + last = require('./last'), + rest = require('./rest'); + +/** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. Result values are chosen + * from the first array. The comparator is invoked with two arguments: + * (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ +var intersectionWith = rest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, baseCastArrayLikeObject); + + if (comparator === last(mapped)) { + comparator = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; +}); + +module.exports = intersectionWith; diff --git a/www/node_modules/lodash/invert.js b/www/node_modules/lodash/invert.js new file mode 100644 index 0000000..11628b1 --- /dev/null +++ b/www/node_modules/lodash/invert.js @@ -0,0 +1,26 @@ +var constant = require('./constant'), + createInverter = require('./_createInverter'), + identity = require('./identity'); + +/** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite property + * assignments of previous values. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ +var invert = createInverter(function(result, value, key) { + result[value] = key; +}, constant(identity)); + +module.exports = invert; diff --git a/www/node_modules/lodash/invertBy.js b/www/node_modules/lodash/invertBy.js new file mode 100644 index 0000000..513f62b --- /dev/null +++ b/www/node_modules/lodash/invertBy.js @@ -0,0 +1,43 @@ +var baseIteratee = require('./_baseIteratee'), + createInverter = require('./_createInverter'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` through `iteratee`. + * The corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ +var invertBy = createInverter(function(result, value, key) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } +}, baseIteratee); + +module.exports = invertBy; diff --git a/www/node_modules/lodash/invoke.js b/www/node_modules/lodash/invoke.js new file mode 100644 index 0000000..f090a72 --- /dev/null +++ b/www/node_modules/lodash/invoke.js @@ -0,0 +1,23 @@ +var baseInvoke = require('./_baseInvoke'), + rest = require('./rest'); + +/** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ +var invoke = rest(baseInvoke); + +module.exports = invoke; diff --git a/www/node_modules/lodash/invokeMap.js b/www/node_modules/lodash/invokeMap.js new file mode 100644 index 0000000..42c8fbe --- /dev/null +++ b/www/node_modules/lodash/invokeMap.js @@ -0,0 +1,43 @@ +var apply = require('./_apply'), + baseEach = require('./_baseEach'), + baseInvoke = require('./_baseInvoke'), + isArrayLike = require('./isArrayLike'), + isKey = require('./_isKey'), + rest = require('./rest'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it's + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invokeMap = rest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); + }); + return result; +}); + +module.exports = invokeMap; diff --git a/www/node_modules/lodash/isArguments.js b/www/node_modules/lodash/isArguments.js new file mode 100644 index 0000000..73fbafe --- /dev/null +++ b/www/node_modules/lodash/isArguments.js @@ -0,0 +1,43 @@ +var isArrayLikeObject = require('./isArrayLikeObject'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +module.exports = isArguments; diff --git a/www/node_modules/lodash/isArray.js b/www/node_modules/lodash/isArray.js new file mode 100644 index 0000000..fa9b055 --- /dev/null +++ b/www/node_modules/lodash/isArray.js @@ -0,0 +1,26 @@ +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @type {Function} + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; diff --git a/www/node_modules/lodash/isArrayBuffer.js b/www/node_modules/lodash/isArrayBuffer.js new file mode 100644 index 0000000..a22a9ee --- /dev/null +++ b/www/node_modules/lodash/isArrayBuffer.js @@ -0,0 +1,34 @@ +var isObjectLike = require('./isObjectLike'); + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ +function isArrayBuffer(value) { + return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; +} + +module.exports = isArrayBuffer; diff --git a/www/node_modules/lodash/isArrayLike.js b/www/node_modules/lodash/isArrayLike.js new file mode 100644 index 0000000..3e809f4 --- /dev/null +++ b/www/node_modules/lodash/isArrayLike.js @@ -0,0 +1,33 @@ +var getLength = require('./_getLength'), + isFunction = require('./isFunction'), + isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)) && !isFunction(value); +} + +module.exports = isArrayLike; diff --git a/www/node_modules/lodash/isArrayLikeObject.js b/www/node_modules/lodash/isArrayLikeObject.js new file mode 100644 index 0000000..0b8b2ca --- /dev/null +++ b/www/node_modules/lodash/isArrayLikeObject.js @@ -0,0 +1,31 @@ +var isArrayLike = require('./isArrayLike'), + isObjectLike = require('./isObjectLike'); + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +module.exports = isArrayLikeObject; diff --git a/www/node_modules/lodash/isBoolean.js b/www/node_modules/lodash/isBoolean.js new file mode 100644 index 0000000..53ec5d6 --- /dev/null +++ b/www/node_modules/lodash/isBoolean.js @@ -0,0 +1,36 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && objectToString.call(value) == boolTag); +} + +module.exports = isBoolean; diff --git a/www/node_modules/lodash/isBuffer.js b/www/node_modules/lodash/isBuffer.js new file mode 100644 index 0000000..cee6b22 --- /dev/null +++ b/www/node_modules/lodash/isBuffer.js @@ -0,0 +1,48 @@ +var constant = require('./constant'), + root = require('./_root'); + +/** Used to determine if values are of the language type `Object`. */ +var objectTypes = { + 'function': true, + 'object': true +}; + +/** Detect free variable `exports`. */ +var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + +/** Detect free variable `module`. */ +var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = (freeModule && freeModule.exports === freeExports) + ? freeExports + : undefined; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = !Buffer ? constant(false) : function(value) { + return value instanceof Buffer; +}; + +module.exports = isBuffer; diff --git a/www/node_modules/lodash/isDate.js b/www/node_modules/lodash/isDate.js new file mode 100644 index 0000000..6e3611a --- /dev/null +++ b/www/node_modules/lodash/isDate.js @@ -0,0 +1,35 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var dateTag = '[object Date]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ +function isDate(value) { + return isObjectLike(value) && objectToString.call(value) == dateTag; +} + +module.exports = isDate; diff --git a/www/node_modules/lodash/isElement.js b/www/node_modules/lodash/isElement.js new file mode 100644 index 0000000..447d6bc --- /dev/null +++ b/www/node_modules/lodash/isElement.js @@ -0,0 +1,24 @@ +var isObjectLike = require('./isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ +function isElement(value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); +} + +module.exports = isElement; diff --git a/www/node_modules/lodash/isEmpty.js b/www/node_modules/lodash/isEmpty.js new file mode 100644 index 0000000..f81838d --- /dev/null +++ b/www/node_modules/lodash/isEmpty.js @@ -0,0 +1,54 @@ +var isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('./isArrayLike'), + isFunction = require('./isFunction'), + isString = require('./isString'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty collection or object. A value is considered + * empty if it's an `arguments` object, array, string, or jQuery-like collection + * with a length of `0` or has no own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; +} + +module.exports = isEmpty; diff --git a/www/node_modules/lodash/isEqual.js b/www/node_modules/lodash/isEqual.js new file mode 100644 index 0000000..43a3a2b --- /dev/null +++ b/www/node_modules/lodash/isEqual.js @@ -0,0 +1,34 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are **not** supported. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} + +module.exports = isEqual; diff --git a/www/node_modules/lodash/isEqualWith.js b/www/node_modules/lodash/isEqualWith.js new file mode 100644 index 0000000..4643a35 --- /dev/null +++ b/www/node_modules/lodash/isEqualWith.js @@ -0,0 +1,40 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined` comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ +function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; +} + +module.exports = isEqualWith; diff --git a/www/node_modules/lodash/isError.js b/www/node_modules/lodash/isError.js new file mode 100644 index 0000000..6065453 --- /dev/null +++ b/www/node_modules/lodash/isError.js @@ -0,0 +1,40 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var errorTag = '[object Error]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { + if (!isObjectLike(value)) { + return false; + } + return (objectToString.call(value) == errorTag) || + (typeof value.message == 'string' && typeof value.name == 'string'); +} + +module.exports = isError; diff --git a/www/node_modules/lodash/isFinite.js b/www/node_modules/lodash/isFinite.js new file mode 100644 index 0000000..44be4bc --- /dev/null +++ b/www/node_modules/lodash/isFinite.js @@ -0,0 +1,34 @@ +var root = require('./_root'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = root.isFinite; + +/** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MAX_VALUE); + * // => true + * + * _.isFinite(3.14); + * // => true + * + * _.isFinite(Infinity); + * // => false + */ +function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); +} + +module.exports = isFinite; diff --git a/www/node_modules/lodash/isFunction.js b/www/node_modules/lodash/isFunction.js new file mode 100644 index 0000000..fd8c4ad --- /dev/null +++ b/www/node_modules/lodash/isFunction.js @@ -0,0 +1,40 @@ +var isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8 which returns 'object' for typed array and weak map constructors, + // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +module.exports = isFunction; diff --git a/www/node_modules/lodash/isInteger.js b/www/node_modules/lodash/isInteger.js new file mode 100644 index 0000000..1bfcc65 --- /dev/null +++ b/www/node_modules/lodash/isInteger.js @@ -0,0 +1,31 @@ +var toInteger = require('./toInteger'); + +/** + * Checks if `value` is an integer. + * + * **Note:** This method is based on [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ +function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); +} + +module.exports = isInteger; diff --git a/www/node_modules/lodash/isLength.js b/www/node_modules/lodash/isLength.js new file mode 100644 index 0000000..b095123 --- /dev/null +++ b/www/node_modules/lodash/isLength.js @@ -0,0 +1,33 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; diff --git a/www/node_modules/lodash/isMap.js b/www/node_modules/lodash/isMap.js new file mode 100644 index 0000000..bc92def --- /dev/null +++ b/www/node_modules/lodash/isMap.js @@ -0,0 +1,27 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]'; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +function isMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; +} + +module.exports = isMap; diff --git a/www/node_modules/lodash/isMatch.js b/www/node_modules/lodash/isMatch.js new file mode 100644 index 0000000..faf0898 --- /dev/null +++ b/www/node_modules/lodash/isMatch.js @@ -0,0 +1,31 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. This method is + * equivalent to a `_.matches` function when `source` is partially applied. + * + * **Note:** This method supports comparing the same values as `_.isEqual`. + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.isMatch(object, { 'age': 40 }); + * // => true + * + * _.isMatch(object, { 'age': 36 }); + * // => false + */ +function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); +} + +module.exports = isMatch; diff --git a/www/node_modules/lodash/isMatchWith.js b/www/node_modules/lodash/isMatchWith.js new file mode 100644 index 0000000..2460eb3 --- /dev/null +++ b/www/node_modules/lodash/isMatchWith.js @@ -0,0 +1,40 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined` comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ +function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); +} + +module.exports = isMatchWith; diff --git a/www/node_modules/lodash/isNaN.js b/www/node_modules/lodash/isNaN.js new file mode 100644 index 0000000..5b757b1 --- /dev/null +++ b/www/node_modules/lodash/isNaN.js @@ -0,0 +1,34 @@ +var isNumber = require('./isNumber'); + +/** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ +function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some ActiveX objects in IE. + return isNumber(value) && value != +value; +} + +module.exports = isNaN; diff --git a/www/node_modules/lodash/isNative.js b/www/node_modules/lodash/isNative.js new file mode 100644 index 0000000..616a832 --- /dev/null +++ b/www/node_modules/lodash/isNative.js @@ -0,0 +1,53 @@ +var isFunction = require('./isFunction'), + isHostObject = require('./_isHostObject'), + isObjectLike = require('./isObjectLike'); + +/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(funcToString.call(value)); + } + return isObjectLike(value) && + (isHostObject(value) ? reIsNative : reIsHostCtor).test(value); +} + +module.exports = isNative; diff --git a/www/node_modules/lodash/isNil.js b/www/node_modules/lodash/isNil.js new file mode 100644 index 0000000..c4197fb --- /dev/null +++ b/www/node_modules/lodash/isNil.js @@ -0,0 +1,24 @@ +/** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ +function isNil(value) { + return value == null; +} + +module.exports = isNil; diff --git a/www/node_modules/lodash/isNull.js b/www/node_modules/lodash/isNull.js new file mode 100644 index 0000000..ec66c4d --- /dev/null +++ b/www/node_modules/lodash/isNull.js @@ -0,0 +1,21 @@ +/** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ +function isNull(value) { + return value === null; +} + +module.exports = isNull; diff --git a/www/node_modules/lodash/isNumber.js b/www/node_modules/lodash/isNumber.js new file mode 100644 index 0000000..0c8fb9a --- /dev/null +++ b/www/node_modules/lodash/isNumber.js @@ -0,0 +1,45 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var numberTag = '[object Number]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ +function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && objectToString.call(value) == numberTag); +} + +module.exports = isNumber; diff --git a/www/node_modules/lodash/isObject.js b/www/node_modules/lodash/isObject.js new file mode 100644 index 0000000..41993db --- /dev/null +++ b/www/node_modules/lodash/isObject.js @@ -0,0 +1,29 @@ +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = isObject; diff --git a/www/node_modules/lodash/isObjectLike.js b/www/node_modules/lodash/isObjectLike.js new file mode 100644 index 0000000..240167a --- /dev/null +++ b/www/node_modules/lodash/isObjectLike.js @@ -0,0 +1,28 @@ +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +module.exports = isObjectLike; diff --git a/www/node_modules/lodash/isPlainObject.js b/www/node_modules/lodash/isPlainObject.js new file mode 100644 index 0000000..5491848 --- /dev/null +++ b/www/node_modules/lodash/isPlainObject.js @@ -0,0 +1,66 @@ +var isHostObject = require('./_isHostObject'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = Function.prototype.toString; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var getPrototypeOf = Object.getPrototypeOf; + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || + objectToString.call(value) != objectTag || isHostObject(value)) { + return false; + } + var proto = getPrototypeOf(value); + if (proto === null) { + return true; + } + var Ctor = proto.constructor; + return (typeof Ctor == 'function' && + Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); +} + +module.exports = isPlainObject; diff --git a/www/node_modules/lodash/isRegExp.js b/www/node_modules/lodash/isRegExp.js new file mode 100644 index 0000000..e127e5a --- /dev/null +++ b/www/node_modules/lodash/isRegExp.js @@ -0,0 +1,35 @@ +var isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +function isRegExp(value) { + return isObject(value) && objectToString.call(value) == regexpTag; +} + +module.exports = isRegExp; diff --git a/www/node_modules/lodash/isSafeInteger.js b/www/node_modules/lodash/isSafeInteger.js new file mode 100644 index 0000000..f601243 --- /dev/null +++ b/www/node_modules/lodash/isSafeInteger.js @@ -0,0 +1,35 @@ +var isInteger = require('./isInteger'); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ +function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +} + +module.exports = isSafeInteger; diff --git a/www/node_modules/lodash/isSet.js b/www/node_modules/lodash/isSet.js new file mode 100644 index 0000000..e1d50be --- /dev/null +++ b/www/node_modules/lodash/isSet.js @@ -0,0 +1,27 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var setTag = '[object Set]'; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +function isSet(value) { + return isObjectLike(value) && getTag(value) == setTag; +} + +module.exports = isSet; diff --git a/www/node_modules/lodash/isString.js b/www/node_modules/lodash/isString.js new file mode 100644 index 0000000..5ed392e --- /dev/null +++ b/www/node_modules/lodash/isString.js @@ -0,0 +1,37 @@ +var isArray = require('./isArray'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); +} + +module.exports = isString; diff --git a/www/node_modules/lodash/isSymbol.js b/www/node_modules/lodash/isSymbol.js new file mode 100644 index 0000000..5e11a00 --- /dev/null +++ b/www/node_modules/lodash/isSymbol.js @@ -0,0 +1,36 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +module.exports = isSymbol; diff --git a/www/node_modules/lodash/isTypedArray.js b/www/node_modules/lodash/isTypedArray.js new file mode 100644 index 0000000..1283322 --- /dev/null +++ b/www/node_modules/lodash/isTypedArray.js @@ -0,0 +1,75 @@ +var isLength = require('./isLength'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dateTag] = typedArrayTags[errorTag] = +typedArrayTags[funcTag] = typedArrayTags[mapTag] = +typedArrayTags[numberTag] = typedArrayTags[objectTag] = +typedArrayTags[regexpTag] = typedArrayTags[setTag] = +typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +function isTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; +} + +module.exports = isTypedArray; diff --git a/www/node_modules/lodash/isUndefined.js b/www/node_modules/lodash/isUndefined.js new file mode 100644 index 0000000..d64e560 --- /dev/null +++ b/www/node_modules/lodash/isUndefined.js @@ -0,0 +1,21 @@ +/** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +module.exports = isUndefined; diff --git a/www/node_modules/lodash/isWeakMap.js b/www/node_modules/lodash/isWeakMap.js new file mode 100644 index 0000000..d934a9f --- /dev/null +++ b/www/node_modules/lodash/isWeakMap.js @@ -0,0 +1,27 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakMapTag = '[object WeakMap]'; + +/** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ +function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; +} + +module.exports = isWeakMap; diff --git a/www/node_modules/lodash/isWeakSet.js b/www/node_modules/lodash/isWeakSet.js new file mode 100644 index 0000000..40674f4 --- /dev/null +++ b/www/node_modules/lodash/isWeakSet.js @@ -0,0 +1,35 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakSetTag = '[object WeakSet]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ +function isWeakSet(value) { + return isObjectLike(value) && objectToString.call(value) == weakSetTag; +} + +module.exports = isWeakSet; diff --git a/www/node_modules/lodash/iteratee.js b/www/node_modules/lodash/iteratee.js new file mode 100644 index 0000000..e9d2f8a --- /dev/null +++ b/www/node_modules/lodash/iteratee.js @@ -0,0 +1,38 @@ +var baseClone = require('./_baseClone'), + baseIteratee = require('./_baseIteratee'); + +/** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name the created callback returns the + * property value for a given element. If `func` is an object the created + * callback returns `true` for elements that contain the equivalent object + * properties, otherwise it returns `false`. + * + * @static + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(callback, func) { + * var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func); + * return !p ? callback(func) : function(object) { + * return (p[2] == '>' ? object[p[1]] > p[3] : object[p[1]] < p[3]); + * }; + * }); + * + * _.filter(users, 'age > 36'); + * // => [{ 'user': 'fred', 'age': 40 }] + */ +function iteratee(func) { + return baseIteratee(typeof func == 'function' ? func : baseClone(func, true)); +} + +module.exports = iteratee; diff --git a/www/node_modules/lodash/join.js b/www/node_modules/lodash/join.js new file mode 100644 index 0000000..79d308d --- /dev/null +++ b/www/node_modules/lodash/join.js @@ -0,0 +1,25 @@ +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeJoin = arrayProto.join; + +/** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ +function join(array, separator) { + return array ? nativeJoin.call(array, separator) : ''; +} + +module.exports = join; diff --git a/www/node_modules/lodash/kebabCase.js b/www/node_modules/lodash/kebabCase.js new file mode 100644 index 0000000..f29124f --- /dev/null +++ b/www/node_modules/lodash/kebabCase.js @@ -0,0 +1,26 @@ +var createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ +var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); +}); + +module.exports = kebabCase; diff --git a/www/node_modules/lodash/keyBy.js b/www/node_modules/lodash/keyBy.js new file mode 100644 index 0000000..febc86b --- /dev/null +++ b/www/node_modules/lodash/keyBy.js @@ -0,0 +1,34 @@ +var createAggregator = require('./_createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ +var keyBy = createAggregator(function(result, value, key) { + result[key] = value; +}); + +module.exports = keyBy; diff --git a/www/node_modules/lodash/keys.js b/www/node_modules/lodash/keys.js new file mode 100644 index 0000000..eac239f --- /dev/null +++ b/www/node_modules/lodash/keys.js @@ -0,0 +1,55 @@ +var baseHas = require('./_baseHas'), + baseKeys = require('./_baseKeys'), + indexKeys = require('./_indexKeys'), + isArrayLike = require('./isArrayLike'), + isIndex = require('./_isIndex'), + isPrototype = require('./_isPrototype'); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + var isProto = isPrototype(object); + if (!(isProto || isArrayLike(object))) { + return baseKeys(object); + } + var indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + for (var key in object) { + if (baseHas(object, key) && + !(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(isProto && key == 'constructor')) { + result.push(key); + } + } + return result; +} + +module.exports = keys; diff --git a/www/node_modules/lodash/keysIn.js b/www/node_modules/lodash/keysIn.js new file mode 100644 index 0000000..e327b87 --- /dev/null +++ b/www/node_modules/lodash/keysIn.js @@ -0,0 +1,54 @@ +var baseKeysIn = require('./_baseKeysIn'), + indexKeys = require('./_indexKeys'), + isIndex = require('./_isIndex'), + isPrototype = require('./_isPrototype'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + var index = -1, + isProto = isPrototype(object), + props = baseKeysIn(object), + propsLength = props.length, + indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + while (++index < propsLength) { + var key = props[index]; + if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = keysIn; diff --git a/www/node_modules/lodash/lang.js b/www/node_modules/lodash/lang.js new file mode 100644 index 0000000..665f5c6 --- /dev/null +++ b/www/node_modules/lodash/lang.js @@ -0,0 +1,56 @@ +module.exports = { + 'castArray': require('./castArray'), + 'clone': require('./clone'), + 'cloneDeep': require('./cloneDeep'), + 'cloneDeepWith': require('./cloneDeepWith'), + 'cloneWith': require('./cloneWith'), + 'eq': require('./eq'), + 'gt': require('./gt'), + 'gte': require('./gte'), + 'isArguments': require('./isArguments'), + 'isArray': require('./isArray'), + 'isArrayBuffer': require('./isArrayBuffer'), + 'isArrayLike': require('./isArrayLike'), + 'isArrayLikeObject': require('./isArrayLikeObject'), + 'isBoolean': require('./isBoolean'), + 'isBuffer': require('./isBuffer'), + 'isDate': require('./isDate'), + 'isElement': require('./isElement'), + 'isEmpty': require('./isEmpty'), + 'isEqual': require('./isEqual'), + 'isEqualWith': require('./isEqualWith'), + 'isError': require('./isError'), + 'isFinite': require('./isFinite'), + 'isFunction': require('./isFunction'), + 'isInteger': require('./isInteger'), + 'isLength': require('./isLength'), + 'isMap': require('./isMap'), + 'isMatch': require('./isMatch'), + 'isMatchWith': require('./isMatchWith'), + 'isNaN': require('./isNaN'), + 'isNative': require('./isNative'), + 'isNil': require('./isNil'), + 'isNull': require('./isNull'), + 'isNumber': require('./isNumber'), + 'isObject': require('./isObject'), + 'isObjectLike': require('./isObjectLike'), + 'isPlainObject': require('./isPlainObject'), + 'isRegExp': require('./isRegExp'), + 'isSafeInteger': require('./isSafeInteger'), + 'isSet': require('./isSet'), + 'isString': require('./isString'), + 'isSymbol': require('./isSymbol'), + 'isTypedArray': require('./isTypedArray'), + 'isUndefined': require('./isUndefined'), + 'isWeakMap': require('./isWeakMap'), + 'isWeakSet': require('./isWeakSet'), + 'lt': require('./lt'), + 'lte': require('./lte'), + 'toArray': require('./toArray'), + 'toInteger': require('./toInteger'), + 'toLength': require('./toLength'), + 'toNumber': require('./toNumber'), + 'toPlainObject': require('./toPlainObject'), + 'toSafeInteger': require('./toSafeInteger'), + 'toString': require('./toString') +}; diff --git a/www/node_modules/lodash/last.js b/www/node_modules/lodash/last.js new file mode 100644 index 0000000..299af31 --- /dev/null +++ b/www/node_modules/lodash/last.js @@ -0,0 +1,19 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/www/node_modules/lodash/lastIndexOf.js b/www/node_modules/lodash/lastIndexOf.js new file mode 100644 index 0000000..1eb2f28 --- /dev/null +++ b/www/node_modules/lodash/lastIndexOf.js @@ -0,0 +1,49 @@ +var indexOfNaN = require('./_indexOfNaN'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = (index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1)) + 1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = lastIndexOf; diff --git a/www/node_modules/lodash/lodash.js b/www/node_modules/lodash/lodash.js new file mode 100644 index 0000000..0fc4b1c --- /dev/null +++ b/www/node_modules/lodash/lodash.js @@ -0,0 +1,15073 @@ +/** + * @license + * lodash 4.6.1 (Custom Build) + * Build: `lodash -d -o ./foo/lodash.js` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.6.1'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for wrapper metadata. */ + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256, + FLIP_FLAG = 512; + + /** Used to compose bitmasks for comparison styles. */ + var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 150, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reUnescapedHtml = /[&<>"'`]/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g; + + /** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect hexadecimal string values. */ + var reHasHexPrefix = /^0x/i; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari > 5). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ + var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsQuoteRange = '\\u2018\\u2019\\u201c\\u201d', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsQuoteRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', + rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + + /** Used to match non-compound words composed of alphanumeric characters. */ + var reBasicWord = /[a-zA-Z0-9]+/g; + + /** Used to match complex or compound words. */ + var reComplexWord = RegExp([ + rsUpper + '?' + rsLower + '+(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsUpperMisc + '+(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', + rsUpper + '?' + rsLowerMisc + '+', + rsUpper + '+', + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasComplexWord = /[a-z][A-Z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Reflect', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', '_', + 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dateTag] = typedArrayTags[errorTag] = + typedArrayTags[funcTag] = typedArrayTags[mapTag] = + typedArrayTags[numberTag] = typedArrayTags[objectTag] = + typedArrayTags[regexpTag] = typedArrayTags[setTag] = + typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = + cloneableTags[dateTag] = cloneableTags[float32Tag] = + cloneableTags[float64Tag] = cloneableTags[int8Tag] = + cloneableTags[int16Tag] = cloneableTags[int32Tag] = + cloneableTags[mapTag] = cloneableTags[numberTag] = + cloneableTags[objectTag] = cloneableTags[regexpTag] = + cloneableTags[setTag] = cloneableTags[stringTag] = + cloneableTags[symbolTag] = cloneableTags[uint8Tag] = + cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = + cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map latin-1 supplementary letters to basic latin letters. */ + var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + }; + + /** Used to determine if values are of the language type `Object`. */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `exports`. */ + var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + + /** Detect free variable `module`. */ + var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = (freeModule && freeModule.exports === freeExports) + ? freeExports + : undefined; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + + /** Detect free variable `self`. */ + var freeSelf = checkGlobal(objectTypes[typeof self] && self); + + /** Detect free variable `window`. */ + var freeWindow = checkGlobal(objectTypes[typeof window] && window); + + /** Detect `this` as the global object. */ + var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + + /** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ + var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + + /*--------------------------------------------------------------------------*/ + + /** + * Adds the key-value `pair` to `map`. + * + * @private + * @param {Object} map The map to modify. + * @param {Array} pair The key-value pair to add. + * @returns {Object} Returns `map`. + */ + function addMapEntry(map, pair) { + // Don't return `Map#set` because it doesn't return the map instance in IE 11. + map.set(pair[0], pair[1]); + return map; + } + + /** + * Adds `value` to `set`. + * + * @private + * @param {Object} set The set to modify. + * @param {*} value The value to add. + * @returns {Object} Returns `set`. + */ + function addSetEntry(set, value) { + set.add(value); + return set; + } + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + var length = args.length; + switch (length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * Creates a new array concatenating `array` with `other`. + * + * @private + * @param {Array} array The first array to concatenate. + * @param {Array} other The second array to concatenate. + * @returns {Array} Returns the new concatenated array. + */ + function arrayConcat(array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength); + + while (++index < length) { + result[index] = array[index]; + } + while (++othIndex < othLength) { + result[index++] = other[othIndex]; + } + return result; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} array The array to search. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + return !!array.length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to search. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? current === current + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of methods like `_.find` and `_.findKey`, without + * support for iteratee shorthands, which iterates over `collection` using + * `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to search. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the new array of key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing wrapper metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ + function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://code.google.com/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + result++; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + function deburrLetter(letter) { + return deburredLetters[letter]; + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(chr) { + return htmlEscapes[chr]; + } + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ + function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; + } + + /** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ + function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to an array. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the converted array. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the converted array. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + if (!(string && reHasComplexSymbol.test(string))) { + return string.length; + } + var result = reComplexSymbol.lastIndex = 0; + while (reComplexSymbol.test(string)) { + result++; + } + return result; + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return string.match(reComplexSymbol); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + function unescapeHtmlChar(chr) { + return htmlUnescapes[chr]; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Use `context` to mock `Date#getTime` use in `_.now`. + * var mock = _.runInContext({ + * 'Date': function() { + * return { 'getTime': getTimeMock }; + * } + * }); + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + function runInContext(context) { + context = context ? _.defaults({}, context, _.pick(root, contextProps)) : root; + + /** Built-in constructor references. */ + var Date = context.Date, + Error = context.Error, + Math = context.Math, + RegExp = context.RegExp, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = context.Array.prototype, + objectProto = context.Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = context.Function.prototype.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Reflect = context.Reflect, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + clearTimeout = context.clearTimeout, + enumerate = Reflect ? Reflect.enumerate : undefined, + getPrototypeOf = Object.getPrototypeOf, + getOwnPropertySymbols = Object.getOwnPropertySymbols, + iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined, + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + setTimeout = context.setTimeout, + splice = arrayProto.splice; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = Object.keys, + nativeMax = Math.max, + nativeMin = Math.min, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var Map = getNative(context, 'Map'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ + var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var mapCtorString = Map ? funcToString.call(Map) : '', + setCtorString = Set ? funcToString.call(Set) : '', + weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : ''; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chaining. Methods that operate on and return arrays, collections, and + * functions can be chained together. Methods that retrieve a single value or + * may return a primitive value will automatically end the chain sequence and + * return the unwrapped value. Otherwise, the value must be unwrapped with + * `_#value`. + * + * Explicit chaining, which must be unwrapped with `_#value` in all cases, + * may be enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization to merge iteratee calls; this avoids the creation + * of intermediate arrays and can greatly reduce the number of iteratee executions. + * Sections of a chain sequence qualify for shortcut fusion if the section is + * applied to an array of at least two hundred elements and any iteratees + * accept only one argument. The heuristic for whether a section qualifies + * for shortcut fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatten`, `flattenDeep`, `flattenDepth`, `flip`, `flow`, `flowRight`, + * `fromPairs`, `functions`, `functionsIn`, `groupBy`, `initial`, `intersection`, + * `intersectionBy`, `intersectionWith`, `invert`, `invertBy`, `invokeMap`, + * `iteratee`, `keyBy`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, + * `matches`, `matchesProperty`, `memoize`, `merge`, `mergeWith`, `method`, + * `methodOf`, `mixin`, `negate`, `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, + * `over`, `overArgs`, `overEvery`, `overSome`, `partial`, `partialRight`, + * `partition`, `pick`, `pickBy`, `plant`, `property`, `propertyOf`, `pull`, + * `pullAll`, `pullAllBy`, `pullAllWith`, `pullAt`, `push`, `range`, + * `rangeRight`, `rearg`, `reject`, `remove`, `rest`, `reverse`, `sampleSize`, + * `set`, `setWith`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`, `spread`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `tap`, `throttle`, + * `thru`, `toArray`, `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, + * `transform`, `unary`, `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, + * `uniqWith`, `unset`, `unshift`, `unzip`, `unzipWith`, `update`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, `zipObject`, + * `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `each`, `eachRight`, + * `endsWith`, `eq`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `first`, `floor`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `get`, `gt`, `gte`, `has`, `hasIn`, `head`, `identity`, `includes`, + * `indexOf`, `inRange`, `invoke`, `isArguments`, `isArray`, `isArrayBuffer`, + * `isArrayLike`, `isArrayLikeObject`, `isBoolean`, `isBuffer`, `isDate`, + * `isElement`, `isEmpty`, `isEqual`, `isEqualWith`, `isError`, `isFinite`, + * `isFunction`, `isInteger`, `isLength`, `isMap`, `isMatch`, `isMatchWith`, + * `isNaN`, `isNative`, `isNil`, `isNull`, `isNumber`, `isObject`, `isObjectLike`, + * `isPlainObject`, `isRegExp`, `isSafeInteger`, `isSet`, `isString`, + * `isUndefined`, `isTypedArray`, `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, + * `maxBy`, `mean`, `min`, `minBy`, `noConflict`, `noop`, `now`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toInteger`, `toJSON`, `toLength`, `toLower`, + * `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, `trimEnd`, + * `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, `upperFirst`, + * `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The function whose prototype all chaining wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB). Change the following template settings to use + * alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || + (arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an hash object. + * + * @private + * @constructor + * @returns {Object} Returns the new hash object. + */ + function Hash() {} + + /** + * Removes `key` and its value from the hash. + * + * @private + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(hash, key) { + return hashHas(hash, key) && delete hash[key]; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @param {Object} hash The hash to query. + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(hash, key) { + if (nativeCreate) { + var result = hash[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(hash, key) ? hash[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @param {Object} hash The hash to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(hash, key) { + return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + */ + function hashSet(hash, key, value) { + hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function MapCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.clear(); + while (++index < length) { + var entry = values[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapClear() { + this.__data__ = { + 'hash': new Hash, + 'map': Map ? new Map : [], + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapDelete(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashDelete(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map['delete'](key) : assocDelete(data.map, key); + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapGet(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashGet(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map.get(key) : assocGet(data.map, key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapHas(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashHas(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map.has(key) : assocHas(data.map, key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache object. + */ + function mapSet(key, value) { + var data = this.__data__; + if (isKeyable(key)) { + hashSet(typeof key == 'string' ? data.string : data.hash, key, value); + } else if (Map) { + data.map.set(key, value); + } else { + assocSet(data.map, key, value); + } + return this; + } + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates a set cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.__data__ = new MapCache; + while (++index < length) { + this.push(values[index]); + } + } + + /** + * Checks if `value` is in `cache`. + * + * @private + * @param {Object} cache The set cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function cacheHas(cache, value) { + var map = cache.__data__; + if (isKeyable(value)) { + var data = map.__data__, + hash = typeof value == 'string' ? data.string : data.hash; + + return hash[value] === HASH_UNDEFINED; + } + return map.has(value); + } + + /** + * Adds `value` to the set cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ + function cachePush(value) { + var map = this.__data__; + if (isKeyable(value)) { + var data = map.__data__, + hash = typeof value == 'string' ? data.string : data.hash; + + hash[value] = HASH_UNDEFINED; + } + else { + map.set(value, HASH_UNDEFINED); + } + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function Stack(values) { + var index = -1, + length = values ? values.length : 0; + + this.clear(); + while (++index < length) { + var entry = values[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = { 'array': [], 'map': null }; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + array = data.array; + + return array ? assocDelete(array, key) : data.map['delete'](key); + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + var data = this.__data__, + array = data.array; + + return array ? assocGet(array, key) : data.map.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + var data = this.__data__, + array = data.array; + + return array ? assocHas(array, key) : data.map.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache object. + */ + function stackSet(key, value) { + var data = this.__data__, + array = data.array; + + if (array) { + if (array.length < (LARGE_ARRAY_SIZE - 1)) { + assocSet(array, key, value); + } else { + data.array = null; + data.map = new MapCache(array); + } + } + var map = data.map; + if (map) { + map.set(key, value); + } + return this; + } + + /*------------------------------------------------------------------------*/ + + /** + * Removes `key` and its value from the associative array. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function assocDelete(array, key) { + var index = assocIndexOf(array, key); + if (index < 0) { + return false; + } + var lastIndex = array.length - 1; + if (index == lastIndex) { + array.pop(); + } else { + splice.call(array, index, 1); + } + return true; + } + + /** + * Gets the associative array value for `key`. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function assocGet(array, key) { + var index = assocIndexOf(array, key); + return index < 0 ? undefined : array[index][1]; + } + + /** + * Checks if an associative array value for `key` exists. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function assocHas(array, key) { + return assocIndexOf(array, key) > -1; + } + + /** + * Gets the index at which the first occurrence of `key` is found in `array` + * of key-value pairs. + * + * @private + * @param {Array} array The array to search. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Sets the associative array `key` to `value`. + * + * @private + * @param {Array} array The array to modify. + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + */ + function assocSet(array, key, value) { + var index = assocIndexOf(array, key); + if (index < 0) { + array.push([key, value]); + } else { + array[index][1] = value; + } + } + + /*------------------------------------------------------------------------*/ + + /** + * Used by `_.defaults` to customize its `_.assignIn` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function assignInDefaults(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (typeof key == 'number' && value === undefined && !(key in object))) { + object[key] = value; + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths of elements to pick. + * @returns {Array} Returns the new array of picked elements. + */ + function baseAt(object, paths) { + var index = -1, + isNil = object == null, + length = paths.length, + result = Array(length); + + while (++index < length) { + result[index] = isNil ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ + function baseCastArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ + function baseCastFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ + function baseCastPath(value) { + return isArray(value) ? value : stringToPath(value); + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {boolean} [isFull] Specify a clone including symbols. + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, isFull, customizer, key, object, stack) { + var result; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + if (isHostObject(value)) { + return object ? value : {}; + } + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + result = baseAssign(result, value); + return isFull ? copySymbols(value, result) : result; + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); + }); + return (isFull && !isArr) ? copySymbols(value, result) : result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new function. + */ + function baseConforms(source) { + var props = keys(source), + length = props.length; + + return function(object) { + if (object == null) { + return !length; + } + var index = length; + while (index--) { + var key = props[index], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in Object(object))) || !predicate(value)) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + function baseCreate(proto) { + return isObject(proto) ? objectCreate(proto) : {}; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts an array + * of `func` arguments. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments to provide to `func`. + * @returns {number} Returns the timer id. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support for + * excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (depth > 0 && isArrayLikeObject(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forIn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForIn(object, iteratee) { + return object == null ? object : baseFor(object, iteratee, keysIn); + } + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`, + // that are composed entirely of index properties, return `false` for + // `hasOwnProperty` checks of them. + return hasOwnProperty.call(object, key) || + (typeof object == 'object' && key in object && getPrototypeOf(object) === null); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments to numbers. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + if (!isKey(path, object)) { + path = baseCastPath(path); + object = parent(object, path); + path = last(path); + } + var func = object == null ? object : object[path]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = getTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = getTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + stack || (stack = new Stack); + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, equalFunc, customizer, bitmask, stack); + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack, + result = customizer ? customizer(objValue, srcValue, key, object, source, stack) : undefined; + + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + var type = typeof value; + if (type == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (type == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + return nativeKeys(Object(object)); + } + + /** + * The base implementation of `_.keysIn` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + object = object == null ? object : Object(object); + + var result = []; + for (var key in object) { + result.push(key); + } + return result; + } + + // Fallback for IE < 9 with es6-shim. + if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { + baseKeysIn = function(object) { + return iteratorToArray(enumerate(object)); + }; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && + (value !== undefined || (key in Object(object))); + }; + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new function. + */ + function baseMatchesProperty(path, srcValue) { + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + var props = (isArray(source) || isTypedArray(source)) + ? undefined + : keysIn(source); + + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(object[key], srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = object[key], + srcValue = source[key], + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + newValue = srcValue; + if (isArray(srcValue) || isTypedArray(srcValue)) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else { + isCommon = false; + newValue = baseClone(srcValue, !customizer); + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + isCommon = false; + newValue = baseClone(srcValue, !customizer); + } + else { + newValue = objValue; + } + } + else { + isCommon = false; + } + } + stack.set(srcValue, newValue); + + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + } + stack['delete'](srcValue); + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : Array(1), getIteratee()); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property names. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return arrayReduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, predicate) { + var result = {}; + baseForIn(object, function(value, key) { + if (predicate(value, key)) { + result[key] = value; + } + }); + return result; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (lastIndex == length || index != previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } + else if (!isKey(index, array)) { + var path = baseCastPath(index), + object = parent(array, path); + + if (object != null) { + delete object[last(path)]; + } + } + else { + delete array[index]; + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments to numbers. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the new array of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = path[index]; + if (isObject(nested)) { + var newValue = value; + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = objValue == null + ? (isIndex(path[index + 1]) ? [] : {}) + : objValue; + } + } + assignValue(nested, key, newValue); + } + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop detection. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq`. + * + * @private + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array) { + return baseSortedUniqBy(array); + } + + /** + * The base implementation of `_.sortedUniqBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniqBy(array, iteratee) { + var index = 0, + length = array.length, + value = array[0], + computed = iteratee ? iteratee(value) : value, + seen = computed, + resIndex = 1, + result = [value]; + + while (++index < length) { + value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!eq(computed, seen)) { + seen = computed; + result[resIndex++] = value; + } + } + return result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + object = parent(object, path); + var key = last(path); + return (object != null && has(object, key)) ? delete object[key] : true; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var index = -1, + length = arrays.length; + + while (++index < length) { + var result = result + ? arrayPush( + baseDifference(result, arrays[index], iteratee, comparator), + baseDifference(arrays[index], result, iteratee, comparator) + ) + : arrays[index]; + } + return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property names. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + assignFunc(result, props[index], index < valsLength ? values[index] : undefined); + } + return result; + } + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var result = new buffer.constructor(buffer.length); + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `map`. + * + * @private + * @param {Object} map The map to clone. + * @returns {Object} Returns the cloned map. + */ + function cloneMap(map) { + return arrayReduce(mapToArray(map), addMapEntry, new map.constructor); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of `set`. + * + * @private + * @param {Object} set The set to clone. + * @returns {Object} Returns the cloned set. + */ + function cloneSet(set) { + return arrayReduce(setToArray(set), addSetEntry, new set.constructor); + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object) { + return copyObjectWith(source, props, object); + } + + /** + * This function is like `copyObject` except that it accepts a function to + * customize copied values. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObjectWith(source, props, object, customizer) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : source[key]; + + assignValue(object, key, newValue); + } + return object; + } + + /** + * Copies own symbol properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return rest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = typeof customizer == 'function' + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBaseWrapper(func, bitmask, thisArg) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = reHasComplexSymbol.test(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols ? strSymbols[0] : string.charAt(0), + trailing = strSymbols ? strSymbols.slice(1).join('') : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string)), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurryWrapper(func, bitmask, arity) { + var Ctor = createCtorWrapper(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getPlaceholder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurryWrapper( + func, bitmask, createHybridWrapper, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return rest(function(funcs) { + funcs = baseFlatten(funcs, 1); + + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && + isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), + isFlip = bitmask & FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func); + + function wrapper() { + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getPlaceholder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurryWrapper( + func, bitmask, createHybridWrapper, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new invoker function. + */ + function createOver(arrayFunc) { + return rest(function(iteratees) { + iteratees = arrayMap(baseFlatten(iteratees, 1), getIteratee()); + return rest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {string} string The string to create padding for. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(string, length, chars) { + length = toInteger(length); + + var strLength = stringSize(string); + if (!length || strLength >= length) { + return ''; + } + var padLength = length - strLength; + chars = chars === undefined ? ' ' : (chars + ''); + + var result = repeat(chars, nativeCeil(padLength / stringSize(chars))); + return reHasComplexSymbol.test(chars) + ? stringToArray(result).slice(0, padLength).join('') + : result.slice(0, padLength); + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toNumber(start); + start = start === start ? start : 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = toNumber(end) || 0; + } + step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & CURRY_FLAG, + newArgPos = argPos ? copyArray(argPos) : undefined, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!(bitmask & CURRY_BOUND_FLAG)) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, newArgPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = toInteger(precision); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && new Set([1, 2]).size === 2) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask of wrapper flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] == null + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { + bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == BIND_FLAG) { + var result = createBaseWrapper(func, bitmask, thisArg); + } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { + result = createCurryWrapper(func, bitmask, arity); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { + result = createPartialWrapper(func, bitmask, thisArg, partials); + } else { + result = createHybridWrapper.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setter(result, newData); + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var index = -1, + isPartial = bitmask & PARTIAL_COMPARE_FLAG, + isUnordered = bitmask & UNORDERED_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked) { + return stacked == other; + } + var result = true; + stack.set(array, other); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isUnordered) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack); + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + result = false; + break; + } + } + stack['delete'](array); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) ? other != +other : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + // Recursively compare objects (susceptible to call stack limits). + return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask | UNORDERED_COMPARE_FLAG, stack.set(object, other)); + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : baseHas(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + var result = true; + stack.set(object, other); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + return result; + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the appropriate "iteratee" function. If the `_.iteratee` method is + * customized this function returns the custom method, otherwise it returns + * `baseIteratee`. If arguments are provided the chosen function is invoked + * with them and its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ + var getLength = baseProperty('length'); + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = toPairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = object[key]; + return isNative(value) ? value : undefined; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getPlaceholder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Creates an array of the own symbol properties of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = getOwnPropertySymbols || function() { + return []; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function getTag(value) { + return objectToString.call(value); + } + + // Fallback for IE 11 providing `toStringTag` values for maps, sets, and weakmaps. + if ((Map && getTag(new Map) != mapTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = objectToString.call(value), + Ctor = result == objectTag ? value.constructor : null, + ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case mapCtorString: return mapTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + if (object == null) { + return false; + } + var result = hasFunc(object, path); + if (!result && !isKey(path)) { + path = baseCastPath(path); + object = parent(object, path); + if (object != null) { + path = last(path); + result = hasFunc(object, path); + } + } + var length = object ? object.length : undefined; + return result || ( + !!length && isLength(length) && isIndex(path, length) && + (isArray(object) || isString(object) || isArguments(object)) + ); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototypeOf(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return cloneMap(object); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return cloneSet(object); + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Creates an array of index keys for `object` values of arrays, + * `arguments` objects, and strings, otherwise `null` is returned. + * + * @private + * @param {Object} object The object to query. + * @returns {Array|null} Returns index keys, else `null`. + */ + function indexKeys(object) { + var length = object ? object.length : undefined; + if (isLength(length) && + (isArray(object) || isString(object) || isArguments(object))) { + return baseTimes(length, String); + } + return null; + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (typeof value == 'number') { + return true; + } + return !isArray(value) && + (reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object))); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return type == 'number' || type == 'boolean' || + (type == 'string' && value != '__proto__') || value == null; + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * modify function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * combined case where curried functions have `_.ary` and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); + + var isCombo = + ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || + ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : copyArray(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : copyArray(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : copyArray(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : copyArray(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = copyArray(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + * @returns {*} Returns the value to assign. + */ + function mergeDefaults(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + baseMerge(objValue, srcValue, undefined, mergeDefaults, stack.set(srcValue, objValue)); + } + return objValue; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length == 1 ? object : get(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = (function() { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); + }; + }()); + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + function stringToPath(string) { + var result = []; + toString(string).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=0] The length of each chunk. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size) { + size = nativeMax(toInteger(size), 0); + + var length = array ? array.length : 0; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + var concat = rest(function(array, values) { + if (!isArray(array)) { + array = array == null ? [] : [Object(array)]; + } + values = baseFlatten(values, 1); + return arrayConcat(array, values); + }); + + /** + * Creates an array of unique `array` values not included in the other + * given arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. The order of result values is determined by the + * order they occur in the first array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([3, 2, 1], [4, 2]); + * // => [3, 1] + */ + var difference = rest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. Result values are chosen from the first array. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); + * // => [3.1, 1.3] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = rest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true), getIteratee(iteratee)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. Result values + * are chosen from the first array. The comparator is invoked with two arguments: + * (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = rest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate) { + return (array && array.length) + ? baseFindIndex(array, getIteratee(predicate, 3)) + : -1; + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate) { + return (array && array.length) + ? baseFindIndex(array, getIteratee(predicate, 3), true) + : -1; + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs ? pairs.length : 0, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return array ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + fromIndex = toInteger(fromIndex); + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return baseIndexOf(array, value, fromIndex); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + return dropRight(array, 1); + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. The order of result values is determined by the + * order they occur in the first array. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [4, 2], [1, 2]); + * // => [2] + */ + var intersection = rest(function(arrays) { + var mapped = arrayMap(arrays, baseCastArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. Result values are chosen from the first array. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = rest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, baseCastArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. Result values are chosen + * from the first array. The comparator is invoked with two arguments: + * (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = rest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, baseCastArrayLikeObject); + + if (comparator === last(mapped)) { + comparator = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array ? nativeJoin.call(array, separator) : ''; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = (index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1)) + 1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ + var pull = rest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pullAll(array, [2, 3]); + * console.log(array); + * // => [1, 1] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove, + * specified individually or in arrays. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [5, 10, 15, 20]; + * var evens = _.pullAt(array, 1, 3); + * + * console.log(array); + * // => [5, 15] + * + * console.log(evens); + * // => [10, 20] + */ + var pullAt = rest(function(array, indexes) { + indexes = arrayMap(baseFlatten(indexes, 1), String); + + var result = baseAt(array, indexes); + basePullAt(array, indexes.sort(compareAscending)); + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @category Array + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array ? nativeReverse.call(array) : array; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of [`Array#slice`](https://mdn.io/Array/slice) + * to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` should + * be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + * + * _.sortedIndex([4, 5], 4); + * // => 0 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * var dict = { 'thirty': 30, 'forty': 40, 'fifty': 50 }; + * + * _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict)); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([1, 1, 2, 2], 2); + * // => 2 + */ + function sortedIndexOf(array, value) { + var length = array ? array.length : 0; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * _.sortedLastIndex([4, 5], 4); + * // => 1 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([1, 1, 2, 2], 2); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array ? array.length : 0; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniqBy(array, getIteratee(iteratee)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + return drop(array, 1); + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with three + * arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2, 1], [4, 2], [1, 2]); + * // => [2, 1, 4] + */ + var union = rest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by which + * uniqueness is computed. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor); + * // => [2.1, 1.2, 4.3] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = rest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, true), getIteratee(iteratee)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = rest(function(arrays) { + var comparator = last(arrays); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return baseUniq(baseFlatten(arrays, 1, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) + ? baseUniq(array) + : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) + ? baseUniq(array, getIteratee(iteratee)) + : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The comparator is invoked with + * two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + return (array && array.length) + ? baseUniq(array, undefined, comparator) + : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + * + * _.unzip(zipped); + * // => [['fred', 'barney'], [30, 40], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ + var without = rest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xor([2, 1], [4, 2]); + * // => [1, 4] + */ + var xor = rest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by which + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor); + * // => [1.2, 4.3] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = rest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The comparator is invoked with + * two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = rest(function(arrays) { + var comparator = last(arrays); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second elements + * of the given arrays, and so on. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ + var zip = rest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property names and one of corresponding values. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} [props=[]] The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} [props=[]] The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = rest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object that wraps `value` with explicit method chaining enabled. + * The result of such method chaining must be unwrapped with `_#value`. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain in order to modify intermediate results. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @category Seq + * @param {...(string|string[])} [paths] The property paths of elements to pick, + * specified individually or in arrays. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + * + * _(['a', 'b', 'c']).at(0, 2).value(); + * // => ['a', 'c'] + */ + var wrapperAt = rest(function(paths) { + paths = baseFlatten(paths, 1); + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * This method is the wrapper version of `_.flatMap`. + * + * @name flatMap + * @memberOf _ + * @category Seq + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _([1, 2]).flatMap(duplicate).value(); + * // => [1, 1, 2, 2] + */ + function wrapperFlatMap(iteratee) { + return this.map(iteratee).flatten(); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the number of times the key was returned by `iteratee`. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + function find(collection, predicate) { + predicate = getIteratee(predicate, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, baseEach); + } + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + function findLast(collection, predicate) { + predicate = getIteratee(predicate, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, true); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, baseEachRight); + } + + /** + * Creates an array of flattened values by running each element in `collection` + * through `iteratee` and concating its result to the other mapped values. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior use `_.forIn` or `_.forOwn` + * for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(value) { + * console.log(value); + * }); + * // => logs `1` then `2` + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ + function forEach(collection, iteratee) { + return (typeof iteratee == 'function' && isArray(collection)) + ? arrayEach(collection, iteratee) + : baseEach(collection, baseCastFunction(iteratee)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => logs `2` then `1` + */ + function forEachRight(collection, iteratee) { + return (typeof iteratee == 'function' && isArray(collection)) + ? arrayEachRight(collection, iteratee) + : baseEachRight(collection, baseCastFunction(iteratee)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of elements responsible for generating the key. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string it's checked + * for a substring of `value`, otherwise [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it's + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = rest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + result[key] = value; + }); + + /** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, `fill`, + * `invert`, `parseInt`, `random`, `range`, `rangeRight`, `slice`, `some`, + * `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimEnd`, `trimStart`, + * and `words` + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} [iteratees=[_.identity]] The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getIteratee(predicate, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var array = isArrayLike(collection) ? collection : values(collection), + length = array.length; + + return length > 0 ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=0] The number of elements to sample. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n) { + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1; + + n = baseClamp(toInteger(n), 0, length); + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand]; + + result[rand] = result[index]; + result[index] = value; + } + result.length = n; + return result; + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + return sampleSize(collection, MAX_ARRAY_LENGTH); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + var result = collection.length; + return (result && isString(collection)) ? stringSize(collection) : result; + } + return keys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} [iteratees=[_.identity]] + * The iteratees to sort by, specified individually or in arrays. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, function(o) { return o.user; }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.sortBy(users, 'user', function(o) { + * return Math.floor(o.age / 10); + * }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + var sortBy = rest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees.length = 1; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @type {Function} + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked + */ + var now = Date.now; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that accepts up to `n` arguments, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = rest(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getPlaceholder(bind)); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = rest(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getPlaceholder(bindKey)); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide an options object to indicate whether `func` should be invoked on + * the leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent calls + * to the debounced function return the result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it's invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + leading = false, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(toNumber(options.maxWait) || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + args = maxTimeoutId = thisArg = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function flush() { + if ((timeoutId && trailingCall) || (maxTimeoutId && trailing)) { + result = func.apply(thisArg, args); + } + cancel(); + return result; + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!lastCalled && !maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled); + + var isCalled = (remaining <= 0 || remaining > maxWait) && + (leading || maxTimeoutId); + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => logs 'deferred' after one or more milliseconds + */ + var defer = rest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ + var delay = rest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrapper(func, FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new memoize.Cache; + return memoized; + } + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with arguments transformed by + * corresponding `transforms`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms] The functions to transform + * arguments, specified individually or in arrays. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, square, doubled); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = rest(function(func, transforms) { + transforms = arrayMap(baseFlatten(transforms, 1), getIteratee()); + + var funcsLength = transforms.length; + return rest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partial` arguments prepended + * to those provided to the new function. This method is like `_.bind` except + * it does **not** alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = rest(function(func, partials) { + var holders = replaceHolders(partials, getPlaceholder(partial)); + return createWrapper(func, PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to those provided to the new function. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = rest(function(func, partials) { + var holders = replaceHolders(partials, getPlaceholder(partialRight)); + return createWrapper(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified indexes where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes, + * specified individually or in arrays. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, 2, 0, 1); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = rest(function(func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes, 1)); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, array); + case 1: return func.call(this, args[0], array); + case 2: return func.call(this, args[0], args[1], array); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = array; + return apply(func, this, otherArgs); + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of the created + * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). + * + * **Note:** This method is based on the [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? 0 : nativeMax(toInteger(start), 0); + return rest(function(args) { + var array = args[start], + otherArgs = args.slice(0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide an options object to indicate whether + * `func` should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Any additional arguments provided to the function are + * appended to those provided to the wrapper function. The wrapper is invoked + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

          ' + func(text) + '

          '; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

          fred, barney, & pebbles

          ' + */ + function wrap(value, wrapper) { + wrapper = wrapper == null ? identity : wrapper; + return partial(wrapper, value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, false, true); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + return baseClone(value, false, true, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, true, true); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + return baseClone(value, true, true, customizer); + } + + /** + * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + function gt(value, other) { + return value > other; + } + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + function gte(value, other) { + return value >= other; + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @type {Function} + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + function isArrayBuffer(value) { + return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; + } + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(getLength(value)) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && objectToString.call(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = !Buffer ? constant(false) : function(value) { + return value instanceof Buffer; + }; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + function isDate(value) { + return isObjectLike(value) && objectToString.call(value) == dateTag; + } + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty collection or object. A value is considered + * empty if it's an `arguments` object, array, string, or jQuery-like collection + * with a length of `0` or has no own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are **not** supported. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined` comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + return (objectToString.call(value) == errorTag) || + (typeof value.message == 'string' && typeof value.name == 'string'); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MAX_VALUE); + * // => true + * + * _.isFinite(3.14); + * // => true + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8 which returns 'object' for typed array and weak map constructors, + // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + function isMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. This method is + * equivalent to a `_.matches` function when `source` is partially applied. + * + * **Note:** This method supports comparing the same values as `_.isEqual`. + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.isMatch(object, { 'age': 40 }); + * // => true + * + * _.isMatch(object, { 'age': 36 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined` comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(funcToString.call(value)); + } + return isObjectLike(value) && + (isHostObject(value) ? reIsNative : reIsHostCtor).test(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && objectToString.call(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || + objectToString.call(value) != objectTag || isHostObject(value)) { + return false; + } + var proto = getPrototypeOf(value); + if (proto === null) { + return true; + } + var Ctor = proto.constructor; + return (typeof Ctor == 'function' && + Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + function isRegExp(value) { + return isObject(value) && objectToString.call(value) == regexpTag; + } + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + function isSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + function isTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && objectToString.call(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + function lt(value, other) { + return value < other; + } + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`. + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + function lte(value, other) { + return value <= other; + } + + /** + * Converts `value` to an array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (iteratorSymbol && value[iteratorSymbol]) { + return iteratorToArray(value[iteratorSymbol]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to an integer. + * + * **Note:** This function is loosely based on [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3'); + * // => 3 + */ + function toInteger(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + var remainder = value % 1; + return value === value ? (remainder ? value - remainder : value) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3); + * // => 3 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3'); + * // => 3 + */ + function toNumber(value) { + if (isObject(value)) { + var other = isFunction(value.valueOf) ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable + * properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3'); + * // => 3 + */ + function toSafeInteger(value) { + return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); + } + + /** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (value == null) { + return ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable properties of source objects to the destination + * object. Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.c = 3; + * } + * + * function Bar() { + * this.e = 5; + * } + * + * Foo.prototype.d = 4; + * Bar.prototype.f = 6; + * + * _.assign({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3, 'e': 5 } + */ + var assign = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * function Bar() { + * this.d = 4; + * } + * + * Foo.prototype.c = 3; + * Bar.prototype.e = 5; + * + * _.assignIn({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } + */ + var assignIn = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keysIn(source), object); + return; + } + for (var key in source) { + assignValue(object, key, source[key]); + } + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths of elements to pick, + * specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + * + * _.at(['a', 'b', 'c'], 0, 2); + * // => ['a', 'c'] + */ + var at = rest(function(object, paths) { + return baseAt(object, baseFlatten(paths, 1)); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a `properties` + * object is given its own enumerable properties are assigned to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties ? baseAssign(result, properties) : result; + } + + /** + * Assigns own and inherited enumerable properties of source objects to the + * destination object for all destination properties that resolve to `undefined`. + * Source objects are applied from left to right. Once a property is set, + * additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var defaults = rest(function(args) { + args.push(undefined, assignInDefaults); + return apply(assignInWith, undefined, args); + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); + * // => { 'user': { 'name': 'barney', 'age': 36 } } + * + */ + var defaultsDeep = rest(function(args) { + args.push(undefined, mergeDefaults); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFind(object, getIteratee(predicate, 3), baseForOwn, true); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFind(object, getIteratee(predicate, 3), baseForOwnRight, true); + } + + /** + * Iterates over own and inherited enumerable properties of an object invoking + * `iteratee` for each property. The iteratee is invoked with three arguments: + * (value, key, object). Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a', 'b', then 'c' (iteration order is not guaranteed) + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, baseCastFunction(iteratee), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c' + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, baseCastFunction(iteratee), keysIn); + } + + /** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The iteratee is invoked with three arguments: + * (value, key, object). Iteratee functions may exit iteration early by + * explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, baseCastFunction(iteratee)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b' + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, baseCastFunction(iteratee)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined` the `defaultValue` is used in its place. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * var other = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b.c'); + * // => true + * + * _.hasIn(object, ['a', 'b', 'c']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite property + * assignments of previous values. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` through `iteratee`. + * The corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = rest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + var isProto = isPrototype(object); + if (!(isProto || isArrayLike(object))) { + return baseKeys(object); + } + var indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + for (var key in object) { + if (baseHas(object, key) && + !(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(isProto && key == 'constructor')) { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + var index = -1, + isProto = isPrototype(object), + props = baseKeysIn(object), + propsLength = props.length, + indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + while (++index < propsLength) { + var key = props[index]; + if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * property of `object` through `iteratee`. The iteratee is invoked with + * three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + result[iteratee(value, key, object)] = value; + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated by + * running each own enumerable property of `object` through `iteratee`. The + * iteratee is invoked with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + result[key] = iteratee(value, key, object); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable properties of source objects into the destination + * object. Source properties that resolve to `undefined` are skipped if a + * destination value exists. Array and plain object properties are merged + * recursively.Other objects and value types are overridden by assignment. + * Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var users = { + * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] + * }; + * + * var ages = { + * 'data': [{ 'age': 36 }, { 'age': 40 }] + * }; + * + * _.merge(users, ages); + * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined` merging is handled by the + * method instead. The `customizer` is invoked with seven arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var other = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.mergeWith(object, other, customizer); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable properties of `object` that are not omitted. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property names to omit, specified + * individually or in arrays. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = rest(function(object, props) { + if (object == null) { + return {}; + } + props = arrayMap(baseFlatten(props, 1), String); + return basePick(object, baseDifference(keysIn(object), props)); + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable properties of `object` that `predicate` + * doesn't return truthy for. The predicate is invoked with two arguments: + * (value, key). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + predicate = getIteratee(predicate); + return basePickBy(object, function(value, key) { + return !predicate(value, key); + }); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property names to pick, specified + * individually or in arrays. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = rest(function(object, props) { + return object == null ? {} : basePick(object, baseFlatten(props, 1)); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + return object == null ? {} : basePickBy(object, getIteratee(predicate)); + } + + /** + * This method is like `_.get` except that if the resolved value is a function + * it's invoked with the `this` binding of its parent object and its result + * is returned. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + if (!isKey(path, object)) { + path = baseCastPath(path); + var result = get(object, path); + object = parent(object, path); + } else { + result = object == null ? undefined : object[path]; + } + if (result === undefined) { + result = defaultValue; + } + return isFunction(result) ? result.call(object) : result; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, 'x[0].y.z', 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable key-value pairs for `object` which + * can be consumed by `_.fromPairs`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + function toPairs(object) { + return baseToPairs(object, keys(object)); + } + + /** + * Creates an array of own and inherited enumerable key-value pairs for + * `object` which can be consumed by `_.fromPairs`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 1]] (iteration order is not guaranteed) + */ + function toPairsIn(object) { + return baseToPairs(object, keysIn(object)); + } + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own enumerable + * properties through `iteratee`, with each invocation potentially mutating + * the `accumulator` object. The iteratee is invoked with four arguments: + * (accumulator, value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Array|Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object) || isTypedArray(object); + iteratee = getIteratee(iteratee, 4); + + if (accumulator == null) { + if (isArr || isObject(object)) { + var Ctor = object.constructor; + if (isArr) { + accumulator = isArray(object) ? new Ctor : []; + } else { + accumulator = isFunction(Ctor) ? baseCreate(getPrototypeOf(object)) : {}; + } + } else { + accumulator = {}; + } + } + (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, baseCastFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, baseCastFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object ? baseValues(object, keys(object)) : []; + } + + /** + * Creates an array of the own and inherited enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to but not including, `end`. If + * `end` is not specified it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toNumber(start) || 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = toNumber(end) || 0; + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are floats, + * a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toNumber(lower) || 0; + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toNumber(upper) || 0; + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar'); + * // => 'fooBar' + * + * _.camelCase('__foo_bar__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search from. + * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = typeof target == 'string' ? target : (target + ''); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + position -= target.length; + return position >= 0 && string.indexOf(target, position) == position; + } + + /** + * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in IE < 9, they can break out of + * attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ + var upperFirst = createCaseFirst('toUpperCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = stringSize(string); + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2, + leftLength = nativeFloor(mid), + rightLength = nativeCeil(mid); + + return createPadding('', leftLength, chars) + string + createPadding('', rightLength, chars); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + return string + createPadding(string, length, chars); + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + return createPadding(string, length, chars) + string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal, + * in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#x15.1.2.2) + * of `parseInt`. + * + * @static + * @memberOf _ + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + // Chrome fails to trim leading whitespace characters. + // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + string = toString(string).replace(reTrim, ''); + return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=0] The number of times to repeat the string. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n) { + string = toString(string); + n = toInteger(n); + + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + string += string; + } while (n); + + return result; + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--foo-bar'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the new array of string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + return toString(string).split(separator, limit); + } + + /** + * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__foo_bar__'); + * // => 'Foo Bar' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + capitalize(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = baseClamp(toInteger(position), 0, string.length); + return string.lastIndexOf(target, position) == position; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as free variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. + * @param {string} [options.variable] The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' +
          diff --git a/www/node_modules/sax/README.md b/www/node_modules/sax/README.md new file mode 100644 index 0000000..c965242 --- /dev/null +++ b/www/node_modules/sax/README.md @@ -0,0 +1,216 @@ +# sax js + +A sax-style parser for XML and HTML. + +Designed with [node](http://nodejs.org/) in mind, but should work fine in +the browser or other CommonJS implementations. + +## What This Is + +* A very simple tool to parse through an XML string. +* A stepping stone to a streaming HTML parser. +* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML + docs. + +## What This Is (probably) Not + +* An HTML Parser - That's a fine goal, but this isn't it. It's just + XML. +* A DOM Builder - You can use it to build an object model out of XML, + but it doesn't do that out of the box. +* XSLT - No DOM = no querying. +* 100% Compliant with (some other SAX implementation) - Most SAX + implementations are in Java and do a lot more than this does. +* An XML Validator - It does a little validation when in strict mode, but + not much. +* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic + masochism. +* A DTD-aware Thing - Fetching DTDs is a much bigger job. + +## Regarding `Hello, world!').close(); + + // stream usage + // takes the same options as the parser + var saxStream = require("sax").createStream(strict, options) + saxStream.on("error", function (e) { + // unhandled errors will throw, since this is a proper node + // event emitter. + console.error("error!", e) + // clear the error + this._parser.error = null + this._parser.resume() + }) + saxStream.on("opentag", function (node) { + // same object as above + }) + // pipe is supported, and it's readable/writable + // same chunks coming in also go out. + fs.createReadStream("file.xml") + .pipe(saxStream) + .pipe(fs.createWriteStream("file-copy.xml")) + + + +## Arguments + +Pass the following arguments to the parser function. All are optional. + +`strict` - Boolean. Whether or not to be a jerk. Default: `false`. + +`opt` - Object bag of settings regarding string formatting. All default to `false`. + +Settings supported: + +* `trim` - Boolean. Whether or not to trim text and comment nodes. +* `normalize` - Boolean. If true, then turn any whitespace into a single + space. +* `lowercase` - Boolean. If true, then lowercase tag names and attribute names + in loose mode, rather than uppercasing them. +* `xmlns` - Boolean. If true, then namespaces are supported. +* `position` - Boolean. If false, then don't track line/col/position. + +## Methods + +`write` - Write bytes onto the stream. You don't have to do this all at +once. You can keep writing as much as you want. + +`close` - Close the stream. Once closed, no more data may be written until +it is done processing the buffer, which is signaled by the `end` event. + +`resume` - To gracefully handle errors, assign a listener to the `error` +event. Then, when the error is taken care of, you can call `resume` to +continue parsing. Otherwise, the parser will not continue while in an error +state. + +## Members + +At all times, the parser object will have the following members: + +`line`, `column`, `position` - Indications of the position in the XML +document where the parser currently is looking. + +`startTagPosition` - Indicates the position where the current tag starts. + +`closed` - Boolean indicating whether or not the parser can be written to. +If it's `true`, then wait for the `ready` event to write again. + +`strict` - Boolean indicating whether or not the parser is a jerk. + +`opt` - Any options passed into the constructor. + +`tag` - The current tag being dealt with. + +And a bunch of other stuff that you probably shouldn't touch. + +## Events + +All events emit with a single argument. To listen to an event, assign a +function to `on`. Functions get executed in the this-context of +the parser object. The list of supported events are also in the exported +`EVENTS` array. + +When using the stream interface, assign handlers using the EventEmitter +`on` function in the normal fashion. + +`error` - Indication that something bad happened. The error will be hanging +out on `parser.error`, and must be deleted before parsing can continue. By +listening to this event, you can keep an eye on that kind of stuff. Note: +this happens *much* more in strict mode. Argument: instance of `Error`. + +`text` - Text node. Argument: string of text. + +`doctype` - The ``. Argument: +object with `name` and `body` members. Attributes are not parsed, as +processing instructions have implementation dependent semantics. + +`sgmldeclaration` - Random SGML declarations. Stuff like `` +would trigger this kind of event. This is a weird thing to support, so it +might go away at some point. SAX isn't intended to be used to parse SGML, +after all. + +`opentag` - An opening tag. Argument: object with `name` and `attributes`. +In non-strict mode, tag names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, then it will contain +namespace binding information on the `ns` member, and will have a +`local`, `prefix`, and `uri` member. + +`closetag` - A closing tag. In loose mode, tags are auto-closed if their +parent closes. In strict mode, well-formedness is enforced. Note that +self-closing tags will have `closeTag` emitted immediately after `openTag`. +Argument: tag name. + +`attribute` - An attribute node. Argument: object with `name` and `value`. +In non-strict mode, attribute names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, it will also contains namespace +information. + +`comment` - A comment node. Argument: the string of the comment. + +`opencdata` - The opening tag of a ``) of a `` tags trigger a `"script"` +event, and their contents are not checked for special xml characters. +If you pass `noscript: true`, then this behavior is suppressed. + +## Reporting Problems + +It's best to write a failing test if you find an issue. I will always +accept pull requests with failing tests if they demonstrate intended +behavior, but it is very hard to figure out what issue you're describing +without a test. Writing a test is also the best way for you yourself +to figure out if you really understand the issue you think you have with +sax-js. diff --git a/www/node_modules/sax/examples/big-not-pretty.xml b/www/node_modules/sax/examples/big-not-pretty.xml new file mode 100644 index 0000000..fb5265d --- /dev/null +++ b/www/node_modules/sax/examples/big-not-pretty.xml @@ -0,0 +1,8002 @@ + + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + diff --git a/www/node_modules/sax/examples/example.js b/www/node_modules/sax/examples/example.js new file mode 100644 index 0000000..7b0246e --- /dev/null +++ b/www/node_modules/sax/examples/example.js @@ -0,0 +1,29 @@ + +var fs = require("fs"), + util = require("util"), + path = require("path"), + xml = fs.readFileSync(path.join(__dirname, "test.xml"), "utf8"), + sax = require("../lib/sax"), + strict = sax.parser(true), + loose = sax.parser(false, {trim:true}), + inspector = function (ev) { return function (data) { + console.error("%s %s %j", this.line+":"+this.column, ev, data); + }}; + +sax.EVENTS.forEach(function (ev) { + loose["on"+ev] = inspector(ev); +}); +loose.onend = function () { + console.error("end"); + console.error(loose); +}; + +// do this in random bits at a time to verify that it works. +(function () { + if (xml) { + var c = Math.ceil(Math.random() * 1000) + loose.write(xml.substr(0,c)); + xml = xml.substr(c); + process.nextTick(arguments.callee); + } else loose.close(); +})(); diff --git a/www/node_modules/sax/examples/get-products.js b/www/node_modules/sax/examples/get-products.js new file mode 100644 index 0000000..9e8d74a --- /dev/null +++ b/www/node_modules/sax/examples/get-products.js @@ -0,0 +1,58 @@ +// pull out /GeneralSearchResponse/categories/category/items/product tags +// the rest we don't care about. + +var sax = require("../lib/sax.js") +var fs = require("fs") +var path = require("path") +var xmlFile = path.resolve(__dirname, "shopping.xml") +var util = require("util") +var http = require("http") + +fs.readFile(xmlFile, function (er, d) { + http.createServer(function (req, res) { + if (er) throw er + var xmlstr = d.toString("utf8") + + var parser = sax.parser(true) + var products = [] + var product = null + var currentTag = null + + parser.onclosetag = function (tagName) { + if (tagName === "product") { + products.push(product) + currentTag = product = null + return + } + if (currentTag && currentTag.parent) { + var p = currentTag.parent + delete currentTag.parent + currentTag = p + } + } + + parser.onopentag = function (tag) { + if (tag.name !== "product" && !product) return + if (tag.name === "product") { + product = tag + } + tag.parent = currentTag + tag.children = [] + tag.parent && tag.parent.children.push(tag) + currentTag = tag + } + + parser.ontext = function (text) { + if (currentTag) currentTag.children.push(text) + } + + parser.onend = function () { + var out = util.inspect(products, false, 3, true) + res.writeHead(200, {"content-type":"application/json"}) + res.end("{\"ok\":true}") + // res.end(JSON.stringify(products)) + } + + parser.write(xmlstr).end() + }).listen(1337) +}) diff --git a/www/node_modules/sax/examples/hello-world.js b/www/node_modules/sax/examples/hello-world.js new file mode 100644 index 0000000..cbfa518 --- /dev/null +++ b/www/node_modules/sax/examples/hello-world.js @@ -0,0 +1,4 @@ +require("http").createServer(function (req, res) { + res.writeHead(200, {"content-type":"application/json"}) + res.end(JSON.stringify({ok: true})) +}).listen(1337) diff --git a/www/node_modules/sax/examples/not-pretty.xml b/www/node_modules/sax/examples/not-pretty.xml new file mode 100644 index 0000000..9592852 --- /dev/null +++ b/www/node_modules/sax/examples/not-pretty.xml @@ -0,0 +1,8 @@ + + something blerm a bit down here diff --git a/www/node_modules/sax/examples/pretty-print.js b/www/node_modules/sax/examples/pretty-print.js new file mode 100644 index 0000000..cd6aca9 --- /dev/null +++ b/www/node_modules/sax/examples/pretty-print.js @@ -0,0 +1,74 @@ +var sax = require("../lib/sax") + , printer = sax.createStream(false, {lowercasetags:true, trim:true}) + , fs = require("fs") + +function entity (str) { + return str.replace('"', '"') +} + +printer.tabstop = 2 +printer.level = 0 +printer.indent = function () { + print("\n") + for (var i = this.level; i > 0; i --) { + for (var j = this.tabstop; j > 0; j --) { + print(" ") + } + } +} +printer.on("opentag", function (tag) { + this.indent() + this.level ++ + print("<"+tag.name) + for (var i in tag.attributes) { + print(" "+i+"=\""+entity(tag.attributes[i])+"\"") + } + print(">") +}) + +printer.on("text", ontext) +printer.on("doctype", ontext) +function ontext (text) { + this.indent() + print(text) +} + +printer.on("closetag", function (tag) { + this.level -- + this.indent() + print("") +}) + +printer.on("cdata", function (data) { + this.indent() + print("") +}) + +printer.on("comment", function (comment) { + this.indent() + print("") +}) + +printer.on("error", function (error) { + console.error(error) + throw error +}) + +if (!process.argv[2]) { + throw new Error("Please provide an xml file to prettify\n"+ + "TODO: read from stdin or take a file") +} +var xmlfile = require("path").join(process.cwd(), process.argv[2]) +var fstr = fs.createReadStream(xmlfile, { encoding: "utf8" }) + +function print (c) { + if (!process.stdout.write(c)) { + fstr.pause() + } +} + +process.stdout.on("drain", function () { + fstr.resume() +}) + +fstr.pipe(printer) diff --git a/www/node_modules/sax/examples/shopping.xml b/www/node_modules/sax/examples/shopping.xml new file mode 100644 index 0000000..223c6c6 --- /dev/null +++ b/www/node_modules/sax/examples/shopping.xml @@ -0,0 +1,2 @@ + +sandbox3.1 r31.Kadu4DC.phase357782011.10.06 15:37:23 PSTp2.a121bc2aaf029435dce62011-10-21T18:38:45.982-04:00P0Y0M0DT0H0M0.169S1112You are currently using the SDC API sandbox environment! No clicks to merchant URLs from this response will be paid. Please change the host of your API requests to 'publisher.api.shopping.com' when you have finished development and testinghttp://statTest.dealtime.com/pixel/noscript?PV_EvnTyp=APPV&APPV_APITSP=10%2F21%2F11_06%3A38%3A45_PM&APPV_DSPRQSID=p2.a121bc2aaf029435dce6&APPV_IMGURL=http://img.shopping.com/sc/glb/sdc_logo_106x19.gif&APPV_LI_LNKINID=7000610&APPV_LI_SBMKYW=nikon&APPV_MTCTYP=1000&APPV_PRTID=2002&APPV_BrnID=14804http://www.shopping.com/digital-cameras/productsDigital CamerasDigital CamerasElectronicshttp://www.shopping.com/xCH-electronics-nikon~linkin_id-7000610?oq=nikonCameras and Photographyhttp://www.shopping.com/xCH-cameras_and_photography-nikon~linkin_id-7000610?oq=nikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610nikonnikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610Nikon D3100 Digital Camera14.2 Megapixel, SLR Camera, 3 in. LCD Screen, With High Definition Video, Weight: 1 lb.The Nikon D3100 digital SLR camera speaks to the growing ranks of enthusiastic D-SLR users and aspiring photographers by providing an easy-to-use and affordable entrance to the world of Nikon D-SLR’s. The 14.2-megapixel D3100 has powerful features, such as the enhanced Guide Mode that makes it easy to unleash creative potential and capture memories with still images and full HD video. Like having a personal photo tutor at your fingertips, this unique feature provides a simple graphical interface on the camera’s LCD that guides users by suggesting and/or adjusting camera settings to achieve the desired end result images. The D3100 is also the world’s first D-SLR to introduce full time auto focus (AF) in Live View and D-Movie mode to effortlessly achieve the critical focus needed when shooting Full HD 1080p video.http://di1.shopping.com/images/pi/93/bc/04/101677489-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-606x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=194.56http://img.shopping.com/sc/pr/sdc_stars_sm_4.5.gifhttp://www.shopping.com/Nikon-D3100/reviews~linkin_id-7000610429.001360.00http://www.shopping.com/Nikon-D3100/prices~linkin_id-7000610http://www.shopping.com/Nikon-D3100/info~linkin_id-7000610Nikon D3100 Digital SLR Camera with 18-55mm NIKKOR VR LensThe Nikon D3100 Digital SLR Camera is an affordable compact and lightweight photographic power-house. It features the all-purpose 18-55mm VR lens a high-resolution 14.2 MP CMOS sensor along with a feature set that's comprehensive yet easy to navigate - the intuitive onboard learn-as-you grow guide mode allows the photographer to understand what the 3100 can do quickly and easily. Capture beautiful pictures and amazing Full HD 1080p movies with sound and full-time autofocus. Availabilty: In Stock!7185Nikonhttp://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFree Shipping with Any Purchase!529.000.00799.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=-ZW6BMZqz6fbS-aULwga_g%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F343.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+Digital+SLR+Camera+with+18-55mm+NIKKOR+VR+Lens&dlprc=529.0&crn=&istrsmrc=1&isathrsl=0&AR=1&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=1&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF343C5Nikon Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR, CamerasNikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR7185Nikonhttp://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-385x352-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock549.000.00549.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=779&BEFID=7185&aon=%5E1&MerchantID=305814&crawler_id=305814&dealId=md1e9lD8vdOu4FHQfJqKng%3D%3D&url=http%3A%2F%2Fwww.electronics-expo.com%2Findex.php%3Fpage%3Ditem%26id%3DNIKD3100%26source%3DSideCar%26scpid%3D8%26scid%3Dscsho318727%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Nikon+D3100+14.2MP+Digital+SLR+Camera+with+18-55mm+f%2F3.5-5.6+AF-S+DX+VR%2C+Cameras&dlprc=549.0&crn=&istrsmrc=1&isathrsl=0&AR=9&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=9&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=771&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Electronics Expohttp://img.shopping.com/cctool/merch_logos/305814.gif1-888-707-EXPO3713.90http://img.shopping.com/sc/mr/sdc_checks_4.gifhttp://www.shopping.com/xMR-store_electronics_expo~MRD-305814~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSNIKD3100Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, BlackSplit-second shutter response captures shots other cameras may have missed Helps eliminate the frustration of shutter delay! 14.2-megapixels for enlargements worth framing and hanging. Takes breathtaking 1080p HD movies. ISO sensitivity from 100-1600 for bright or dimly lit settings. 3.0in. color LCD for beautiful, wide-angle framing and viewing. In-camera image editing lets you retouch with no PC. Automatic scene modes include Child, Sports, Night Portrait and more. Accepts SDHC memory cards. Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black is one of many Digital SLR Cameras available through Office Depot. Made by Nikon.7185Nikonhttp://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-250x250-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock549.990.00699.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=698&BEFID=7185&aon=%5E1&MerchantID=467671&crawler_id=467671&dealId=yYuaXnDFtCY7rDUjkY2aaw%3D%3D&url=http%3A%2F%2Flink.mercent.com%2Fredirect.ashx%3Fmr%3AmerchantID%3DOfficeDepot%26mr%3AtrackingCode%3DCEC9669E-6ABC-E011-9F24-0019B9C043EB%26mr%3AtargetUrl%3Dhttp%3A%2F%2Fwww.officedepot.com%2Fa%2Fproducts%2F486292%2FNikon-D3100-142-Megapixel-Digital-SLR%2F%253fcm_mmc%253dMercent-_-Shopping-_-Cameras_and_Camcorders-_-486292&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+14.2-Megapixel+Digital+SLR+Camera+With+18-55mm+Zoom-Nikkor+Lens%2C+Black&dlprc=549.99&crn=&istrsmrc=1&isathrsl=0&AR=10&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=10&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=690&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Office Depothttp://img.shopping.com/cctool/merch_logos/467671.gif1-800-GO-DEPOT1352.37http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_office_depot_4158555~MRD-467671~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS486292Nikon® D3100™ 14.2MP Digital SLR with 18-55mm LensThe Nikon D3100 DSLR will surprise you with its simplicity and impress you with superb results.7185Nikonhttp://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock549.996.05549.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=Rl56U7CuiTYsH4MGZ02lxQ%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D903483107%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D3100%E2%84%A2+14.2MP+Digital+SLR+with+18-55mm+Lens&dlprc=549.99&crn=&istrsmrc=0&isathrsl=0&AR=11&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=11&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS9614867Nikon D3100 SLR w/Nikon 18-55mm VR & 55-200mm VR Lenses14.2 Megapixels3" LCDLive ViewHD 1080p Video w/ Sound & Autofocus11-point Autofocus3 Frames per Second ShootingISO 100 to 3200 (Expand to 12800-Hi2)Self Cleaning SensorEXPEED 2, Image Processing EngineScene Recognition System7185Nikonhttp://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-345x345-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stock695.000.00695.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=huS6xZKDKaKMTMP71eI6DA%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D32983%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+SLR+w%2FNikon+18-55mm+VR+%26+55-200mm+VR+Lenses&dlprc=695.0&crn=&istrsmrc=0&isathrsl=0&AR=15&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=15&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS32983Nikon COOLPIX S203 Digital Camera10 Megapixel, Ultra-Compact Camera, 2.5 in. LCD Screen, 3x Optical Zoom, With Video Capability, Weight: 0.23 lb.With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.http://di1.shopping.com/images/pi/c4/ef/1b/95397883-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-500x499-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=20139.00139.00http://www.shopping.com/Nikon-Coolpix-S203/prices~linkin_id-7000610http://www.shopping.com/Nikon-Coolpix-S203/info~linkin_id-7000610Nikon Coolpix S203 Digital Camera (Red)With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.7185Nikonhttp://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFantastic prices with ease & comfort of Amazon.com!139.009.50139.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=sBd2JnIEPM-A_lBAM1RZgQ%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB002T964IM%2Fref%3Dasc_df_B002T964IM1751618%3Fsmid%3DA22UHVNXG98FAT%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB002T964IM&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S203+Digital+Camera+%28Red%29&dlprc=139.0&crn=&istrsmrc=0&isathrsl=0&AR=63&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=95397883&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=63&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=518&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB002T964IMNikon S3100 Digital Camera14.5 Megapixel, Compact Camera, 2.7 in. LCD Screen, 5x Optical Zoom, With High Definition Video, Weight: 0.23 lb.This digital camera features a wide-angle optical Zoom-NIKKOR glass lens that allows you to capture anything from landscapes to portraits to action shots. The high-definition movie mode with one-touch recording makes it easy to capture video clips.http://di1.shopping.com/images/pi/66/2d/33/106834268-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-507x387-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=312.00http://img.shopping.com/sc/pr/sdc_stars_sm_2.gifhttp://www.shopping.com/nikon-s3100/reviews~linkin_id-700061099.95134.95http://www.shopping.com/nikon-s3100/prices~linkin_id-7000610http://www.shopping.com/nikon-s3100/info~linkin_id-7000610CoolPix S3100 14 Megapixel Compact Digital Camera- RedNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - red7185Nikonhttp://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=UUyGoqV8r0-xrkn-rnGNbg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJ3Yx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmDAJeU1oyGG0GcBdhGwUGCAVqYF9SO0xSN1sZdmA7dmMdBQAJB24qX1NbQxI6AjA2ME5dVFULPDsGPFcQTTdaLTA6SR0OFlQvPAwMDxYcYlxIVkcoLTcCDA%3D%3D%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=CoolPix+S3100+14+Megapixel+Compact+Digital+Camera-+Red&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=28&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=28&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337013000COOLPIX S3100 PinkNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - pink7185Nikonhttp://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=X87AwXlW1dXoMXk4QQDToQ%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJxYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGsPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Pink&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=31&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=31&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337015000Nikon Coolpix S3100 14.0 MP Digital Camera - SilverNikon Coolpix S3100 14.0 MP Digital Camera - Silver7185Nikonhttp://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-270x270-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock109.970.00109.97http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=803&BEFID=7185&aon=%5E&MerchantID=475774&crawler_id=475774&dealId=nvFwnpfA4rlA1Dbksdsa0w%3D%3D&url=http%3A%2F%2Fwww.thewiz.com%2Fcatalog%2Fproduct.jsp%3FmodelNo%3DS3100SILVER%26gdftrk%3DgdfV2677_a_7c996_a_7c4049_a_7c26262&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S3100+14.0+MP+Digital+Camera+-+Silver&dlprc=109.97&crn=&istrsmrc=0&isathrsl=0&AR=33&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=33&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=797&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=TheWiz.comhttp://img.shopping.com/cctool/merch_logos/475774.gif877-542-69880http://img.shopping.com/sc/glb/flag/US.gifUS26262Nikon� COOLPIX� S3100 14MP Digital Camera (Silver)The Nikon COOLPIX S3100 is the easy way to share your life and stay connected.7185Nikonhttp://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock119.996.05119.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=5GtaN2NeryKwps-Se2l-4g%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D848064082%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C3%AF%C2%BF%C2%BD+COOLPIX%C3%AF%C2%BF%C2%BD+S3100+14MP+Digital+Camera+%28Silver%29&dlprc=119.99&crn=&istrsmrc=0&isathrsl=0&AR=37&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=37&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=509&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10101095COOLPIX S3100 YellowNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - yellow7185Nikonhttp://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=a43m0RXulX38zCnQjU59jw%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJwYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGoPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Yellow&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=38&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=38&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337014000Nikon D90 Digital Camera12.3 Megapixel, Point and Shoot Camera, 3 in. LCD Screen, With Video Capability, Weight: 1.36 lb.Untitled Document Nikon D90 SLR Digital Camera With 28-80mm 75-300mm Lens Kit The Nikon D90 SLR Digital Camera, with its 12.3-megapixel DX-format CMOS, 3" High resolution LCD display, Scene Recognition System, Picture Control, Active D-Lighting, and one-button Live View, provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera.http://di1.shopping.com/images/pi/52/fb/d3/99671132-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-499x255-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=475.00http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-270mm-Lens/reviews~linkin_id-7000610689.002299.00http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/info~linkin_id-7000610Nikon® D90 12.3MP Digital SLR Camera (Body Only)The Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock1015.996.051015.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=GU5JJkpUAxe5HujB7fkwAA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D851830266%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=1015.99&crn=&istrsmrc=0&isathrsl=0&AR=14&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=14&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10148659Nikon D90 SLR Digital Camera (Camera Body)The Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CCD 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera. In addition the D90 introduces the D-Movie mode allowing for the first time an interchangeable lens SLR camera that is capable of recording 720p HD movie clips. Availabilty: In Stock7185Nikonhttp://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockFree Shipping with Any Purchase!689.000.00900.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=XhURuSC-spBbTIDfo4qfzQ%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F169.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+Digital+Camera+%28Camera+Body%29&dlprc=689.0&crn=&istrsmrc=1&isathrsl=0&AR=16&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=16&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF169C5Nikon D90 SLR w/Nikon 18-105mm VR & 55-200mm VR Lenses12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock1189.000.001189.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=o0Px_XLWDbrxAYRy3rCmyQ%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30619%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+%26+55-200mm+VR+Lenses&dlprc=1189.0&crn=&istrsmrc=0&isathrsl=0&AR=20&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=20&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS30619Nikon D90 12.3 Megapixel Digital SLR Camera (Body Only)Fusing 12.3 megapixel image quality and a cinematic 24fps D-Movie Mode, the Nikon D90 exceeds the demands of passionate photographers. Coupled with Nikon's EXPEED image processing technologies and NIKKOR optics, breathtaking image fidelity is assured. Combined with fast 0.15ms power-up and split-second 65ms shooting lag, dramatic action and decisive moments are captured easily. Effective 4-frequency, ultrasonic sensor cleaning frees image degrading dust particles from the sensor's optical low pass filter.7185Nikonhttp://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stockFREE FEDEX 2-3 DAY DELIVERY899.950.00899.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=269&BEFID=7185&aon=%5E&MerchantID=9296&crawler_id=811558&dealId=4HgbWJSJ8ssgIf8B0MXIwA%3D%3D&url=http%3A%2F%2Fwww.pcnation.com%2Foptics-gallery%2Fdetails.asp%3Faffid%3D305%26item%3D2N145P&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3+Megapixel+Digital+SLR+Camera+%28Body+Only%29&dlprc=899.95&crn=&istrsmrc=1&isathrsl=0&AR=21&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=21&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=257&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=PCNationhttp://img.shopping.com/cctool/merch_logos/9296.gif800-470-707916224.43http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_pcnation_9689~MRD-9296~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS2N145PNikon D90 12.3MP Digital SLR Camera (Body Only)Fusing 12.3-megapixel image quality inherited from the award-winning D300 with groundbreaking features, the D90's breathtaking, low-noise image quality is further advanced with EXPEED image processing. Split-second shutter response and continuous shooting at up to 4.5 frames-per-second provide the power to capture fast action and precise moments perfectly, while Nikon's exclusive Scene Recognition System contributes to faster 11-area autofocus performance, finer white balance detection and more. The D90 delivers the control passionate photographers demand, utilizing comprehensive exposure functions and the intelligence of 3D Color Matrix Metering II. Stunning results come to life on a 3-inch 920,000-dot color LCD monitor, providing accurate image review, Live View composition and brilliant playback of the D90's cinematic-quality 24-fps HD D-Movie mode.7185Nikonhttp://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockFantastic prices with ease & comfort of Amazon.com!780.000.00780.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=UNDa3uMDZXOnvD_7sTILYg%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB001ET5U92%2Fref%3Dasc_df_B001ET5U921751618%3Fsmid%3DAHF4SYKP09WBH%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB001ET5U92&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=780.0&crn=&istrsmrc=0&isathrsl=0&AR=29&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=29&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=520&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB001ET5U92Nikon D90 Digital Camera with 18-105mm lens12.9 Megapixel, SLR Camera, 3 in. LCD Screen, 5.8x Optical Zoom, With Video Capability, Weight: 2.3 lb.Its 12.3 megapixel DX-format CMOS image sensor and EXPEED image processing system offer outstanding image quality across a wide ISO light sensitivity range. Live View mode lets you compose and shoot via the high-resolution 3-inch LCD monitor, and an advanced Scene Recognition System and autofocus performance help capture images with astounding accuracy. Movies can be shot in Motion JPEG format using the D-Movie function. The camera’s large image sensor ensures exceptional movie image quality and you can create dramatic effects by shooting with a wide range of interchangeable NIKKOR lenses, from wide-angle to macro to fisheye, or by adjusting the lens aperture and experimenting with depth-of-field. The D90 – designed to fuel your passion for photography.http://di1.shopping.com/images/pi/57/6a/4f/70621646-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-490x489-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5324.81http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-105mm-lens/reviews~linkin_id-7000610849.951599.95http://www.shopping.com/Nikon-D90-with-18-105mm-lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-105mm-lens/info~linkin_id-7000610Nikon D90 18-105mm VR LensThe Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CMOS 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View prov7185Nikonhttp://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-260x260-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock849.950.00849.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=419&BEFID=7185&aon=%5E1&MerchantID=9390&crawler_id=1905054&dealId=3o5e1VghgJPfhLvT1JFKTA%3D%3D&url=http%3A%2F%2Fwww.ajrichard.com%2FNikon-D90-18-105mm-VR-Lens%2Fp-292%3Frefid%3DShopping%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+18-105mm+VR+Lens&dlprc=849.95&crn=&istrsmrc=0&isathrsl=0&AR=2&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=2&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=425&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=AJRichardhttp://img.shopping.com/cctool/merch_logos/9390.gif1-888-871-125631244.48http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_ajrichard~MRD-9390~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS292Nikon D90 SLR w/Nikon 18-105mm VR Lens12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock909.000.00909.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=_lYWj_jbwfsSkfcwUcDuww%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30971%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+Lens&dlprc=909.0&crn=&istrsmrc=0&isathrsl=0&AR=3&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=3&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS3097125448/D90 12.3 Megapixel Digital Camera 18-105mm Zoom Lens w/ 3" Screen - BlackNikon D90 - Digital camera - SLR - 12.3 Mpix - Nikon AF-S DX 18-105mm lens - optical zoom: 5.8 x - supported memory: SD, SDHC7185Nikonhttp://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stockGet 30 days FREE SHIPPING w/ ShipVantage1199.008.201199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=1KCclCGuWvty2XKU9skadg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBRtFXpzYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcVlhCGGkPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=25448%2FD90+12.3+Megapixel+Digital+Camera+18-105mm+Zoom+Lens+w%2F+3%22+Screen+-+Black&dlprc=1199.0&crn=&istrsmrc=1&isathrsl=0&AR=4&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=4&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=586&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00353197000Nikon® D90 12.3MP Digital SLR with 18-105mm LensThe Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock1350.996.051350.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=3-VOSfVV5Jo7HlA4kJtanA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D982673361%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+with+18-105mm+Lens&dlprc=1350.99&crn=&istrsmrc=0&isathrsl=0&AR=5&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=5&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS11148905Nikon D90 Kit 12.3-megapixel Digital SLR with 18-105mm VR LensPhotographers, take your passion further!Now is the time for new creativity, and to rethink what a digital SLR camera can achieve. It's time for the D90, a camera with everything you would expect from Nikon's next-generation D-SLRs, and some unexpected surprises, as well. The stunning image quality is inherited from the D300, Nikon's DX-format flagship. The D90 also has Nikon's unmatched ergonomics and high performance, and now takes high-quality movies with beautifully cinematic results. The world of photography has changed, and with the D90 in your hands, it's time to make your own rules.AF-S DX NIKKOR 18-105mm f/3.5-5.6G ED VR LensWide-ratio 5.8x zoom Compact, versatile and ideal for a broad range of shooting situations, ranging from interiors and landscapes to beautiful portraits� a perfect everyday zoom. Nikon VR (Vibration Reduction) image stabilization Vibration Reduction is engineered specifically for each VR NIKKOR lens and enables handheld shooting at up to 3 shutter speeds slower than would7185Nikonhttp://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x232-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockShipping Included!1050.000.001199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=135&BEFID=7185&aon=%5E1&MerchantID=313162&crawler_id=313162&dealId=kQnB6rS4AjN5dx5h2_631g%3D%3D&url=http%3A%2F%2Fonecall.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1pZSxNoWHFwLx8GTAICa2ZeH1sPXTZLNzRpAh1HR0BxPQEGCBJNMhFHUElsFCFCVkVTTHAcBggEHQ4aHXNpGERGH3RQODsbAgdechJtbBt8fx8JAwhtZFAzJj1oGgIWCxRlNyFOUV9UUGIxBgo0T0IyTSYqJ0RWHw4QPCIBAAQXRGMDICg6TllZVBhh%26nAID%3D13736960&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+Kit+12.3-megapixel+Digital+SLR+with+18-105mm+VR+Lens&dlprc=1050.0&crn=&istrsmrc=1&isathrsl=0&AR=6&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=6&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=1&code=&acode=143&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=OneCallhttp://img.shopping.com/cctool/merch_logos/313162.gif1.800.398.07661804.44http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_onecall_9689~MRD-313162~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS92826Price rangehttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610$24 - $4012http://www.shopping.com/digital-cameras/nikon/products?minPrice=24&maxPrice=4012&linkin_id=7000610$4012 - $7999http://www.shopping.com/digital-cameras/nikon/products?minPrice=4012&maxPrice=7999&linkin_id=7000610Brandhttp://www.shopping.com/digital-cameras/nikon/products~all-9688-brand~MS-1?oq=nikon&linkin_id=7000610Nikonhttp://www.shopping.com/digital-cameras/nikon+brand-nikon/products~linkin_id-7000610Cranehttp://www.shopping.com/digital-cameras/nikon+9688-brand-crane/products~linkin_id-7000610Ikelitehttp://www.shopping.com/digital-cameras/nikon+ikelite/products~linkin_id-7000610Bowerhttp://www.shopping.com/digital-cameras/nikon+bower/products~linkin_id-7000610FUJIFILMhttp://www.shopping.com/digital-cameras/nikon+brand-fuji/products~linkin_id-7000610Storehttp://www.shopping.com/digital-cameras/nikon/products~all-store~MS-1?oq=nikon&linkin_id=7000610Amazon Marketplacehttp://www.shopping.com/digital-cameras/nikon+store-amazon-marketplace-9689/products~linkin_id-7000610Amazonhttp://www.shopping.com/digital-cameras/nikon+store-amazon/products~linkin_id-7000610Adoramahttp://www.shopping.com/digital-cameras/nikon+store-adorama/products~linkin_id-7000610J&R Music and Computer Worldhttp://www.shopping.com/digital-cameras/nikon+store-j-r-music-and-computer-world/products~linkin_id-7000610RytherCamera.comhttp://www.shopping.com/digital-cameras/nikon+store-rythercamera-com/products~linkin_id-7000610Resolutionhttp://www.shopping.com/digital-cameras/nikon/products~all-21885-resolution~MS-1?oq=nikon&linkin_id=7000610Under 4 Megapixelhttp://www.shopping.com/digital-cameras/nikon+under-4-megapixel/products~linkin_id-7000610At least 5 Megapixelhttp://www.shopping.com/digital-cameras/nikon+5-megapixel-digital-cameras/products~linkin_id-7000610At least 6 Megapixelhttp://www.shopping.com/digital-cameras/nikon+6-megapixel-digital-cameras/products~linkin_id-7000610At least 7 Megapixelhttp://www.shopping.com/digital-cameras/nikon+7-megapixel-digital-cameras/products~linkin_id-7000610At least 8 Megapixelhttp://www.shopping.com/digital-cameras/nikon+8-megapixel-digital-cameras/products~linkin_id-7000610Featureshttp://www.shopping.com/digital-cameras/nikon/products~all-32804-features~MS-1?oq=nikon&linkin_id=7000610Shockproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-shockproof/products~linkin_id-7000610Waterproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-waterproof/products~linkin_id-7000610Freezeproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-freezeproof/products~linkin_id-7000610Dust proofhttp://www.shopping.com/digital-cameras/nikon+32804-features-dust-proof/products~linkin_id-7000610Image Stabilizationhttp://www.shopping.com/digital-cameras/nikon+32804-features-image-stabilization/products~linkin_id-7000610hybriddigital camerag1sonycameracanonnikonkodak digital camerakodaksony cybershotkodak easyshare digital cameranikon coolpixolympuspink digital cameracanon powershot \ No newline at end of file diff --git a/www/node_modules/sax/examples/strict.dtd b/www/node_modules/sax/examples/strict.dtd new file mode 100644 index 0000000..b274559 --- /dev/null +++ b/www/node_modules/sax/examples/strict.dtd @@ -0,0 +1,870 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/node_modules/sax/examples/test.html b/www/node_modules/sax/examples/test.html new file mode 100644 index 0000000..61f8f1a --- /dev/null +++ b/www/node_modules/sax/examples/test.html @@ -0,0 +1,15 @@ + + + + + testing the parser + + + +

          hello + + + + diff --git a/www/node_modules/sax/examples/test.xml b/www/node_modules/sax/examples/test.xml new file mode 100644 index 0000000..801292d --- /dev/null +++ b/www/node_modules/sax/examples/test.xml @@ -0,0 +1,1254 @@ + + +]> + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + \ No newline at end of file diff --git a/www/node_modules/sax/lib/sax.js b/www/node_modules/sax/lib/sax.js new file mode 100644 index 0000000..410a507 --- /dev/null +++ b/www/node_modules/sax/lib/sax.js @@ -0,0 +1,1410 @@ +// wrapper for non-node envs +;(function (sax) { + +sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } +sax.SAXParser = SAXParser +sax.SAXStream = SAXStream +sax.createStream = createStream + +// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. +// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), +// since that's the earliest that a buffer overrun could occur. This way, checks are +// as rare as required, but as often as necessary to ensure never crossing this bound. +// Furthermore, buffers are only tested at most once per write(), so passing a very +// large string into write() might have undesirable effects, but this is manageable by +// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme +// edge case, result in creating at most one complete copy of the string passed in. +// Set to Infinity to have unlimited buffers. +sax.MAX_BUFFER_LENGTH = 64 * 1024 + +var buffers = [ + "comment", "sgmlDecl", "textNode", "tagName", "doctype", + "procInstName", "procInstBody", "entity", "attribName", + "attribValue", "cdata", "script" +] + +sax.EVENTS = // for discoverability. + [ "text" + , "processinginstruction" + , "sgmldeclaration" + , "doctype" + , "comment" + , "attribute" + , "opentag" + , "closetag" + , "opencdata" + , "cdata" + , "closecdata" + , "error" + , "end" + , "ready" + , "script" + , "opennamespace" + , "closenamespace" + ] + +function SAXParser (strict, opt) { + if (!(this instanceof SAXParser)) return new SAXParser(strict, opt) + + var parser = this + clearBuffers(parser) + parser.q = parser.c = "" + parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH + parser.opt = opt || {} + parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags + parser.looseCase = parser.opt.lowercase ? "toLowerCase" : "toUpperCase" + parser.tags = [] + parser.closed = parser.closedRoot = parser.sawRoot = false + parser.tag = parser.error = null + parser.strict = !!strict + parser.noscript = !!(strict || parser.opt.noscript) + parser.state = S.BEGIN + parser.ENTITIES = Object.create(sax.ENTITIES) + parser.attribList = [] + + // namespaces form a prototype chain. + // it always points at the current tag, + // which protos to its parent tag. + if (parser.opt.xmlns) parser.ns = Object.create(rootNS) + + // mostly just for error reporting + parser.trackPosition = parser.opt.position !== false + if (parser.trackPosition) { + parser.position = parser.line = parser.column = 0 + } + emit(parser, "onready") +} + +if (!Object.create) Object.create = function (o) { + function f () { this.__proto__ = o } + f.prototype = o + return new f +} + +if (!Object.getPrototypeOf) Object.getPrototypeOf = function (o) { + return o.__proto__ +} + +if (!Object.keys) Object.keys = function (o) { + var a = [] + for (var i in o) if (o.hasOwnProperty(i)) a.push(i) + return a +} + +function checkBufferLength (parser) { + var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) + , maxActual = 0 + for (var i = 0, l = buffers.length; i < l; i ++) { + var len = parser[buffers[i]].length + if (len > maxAllowed) { + // Text/cdata nodes can get big, and since they're buffered, + // we can get here under normal conditions. + // Avoid issues by emitting the text node now, + // so at least it won't get any bigger. + switch (buffers[i]) { + case "textNode": + closeText(parser) + break + + case "cdata": + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + break + + case "script": + emitNode(parser, "onscript", parser.script) + parser.script = "" + break + + default: + error(parser, "Max buffer length exceeded: "+buffers[i]) + } + } + maxActual = Math.max(maxActual, len) + } + // schedule the next check for the earliest possible buffer overrun. + parser.bufferCheckPosition = (sax.MAX_BUFFER_LENGTH - maxActual) + + parser.position +} + +function clearBuffers (parser) { + for (var i = 0, l = buffers.length; i < l; i ++) { + parser[buffers[i]] = "" + } +} + +function flushBuffers (parser) { + closeText(parser) + if (parser.cdata !== "") { + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + } + if (parser.script !== "") { + emitNode(parser, "onscript", parser.script) + parser.script = "" + } +} + +SAXParser.prototype = + { end: function () { end(this) } + , write: write + , resume: function () { this.error = null; return this } + , close: function () { return this.write(null) } + , flush: function () { flushBuffers(this) } + } + +try { + var Stream = require("stream").Stream +} catch (ex) { + var Stream = function () {} +} + + +var streamWraps = sax.EVENTS.filter(function (ev) { + return ev !== "error" && ev !== "end" +}) + +function createStream (strict, opt) { + return new SAXStream(strict, opt) +} + +function SAXStream (strict, opt) { + if (!(this instanceof SAXStream)) return new SAXStream(strict, opt) + + Stream.apply(this) + + this._parser = new SAXParser(strict, opt) + this.writable = true + this.readable = true + + + var me = this + + this._parser.onend = function () { + me.emit("end") + } + + this._parser.onerror = function (er) { + me.emit("error", er) + + // if didn't throw, then means error was handled. + // go ahead and clear error, so we can write again. + me._parser.error = null + } + + this._decoder = null; + + streamWraps.forEach(function (ev) { + Object.defineProperty(me, "on" + ev, { + get: function () { return me._parser["on" + ev] }, + set: function (h) { + if (!h) { + me.removeAllListeners(ev) + return me._parser["on"+ev] = h + } + me.on(ev, h) + }, + enumerable: true, + configurable: false + }) + }) +} + +SAXStream.prototype = Object.create(Stream.prototype, + { constructor: { value: SAXStream } }) + +SAXStream.prototype.write = function (data) { + if (typeof Buffer === 'function' && + typeof Buffer.isBuffer === 'function' && + Buffer.isBuffer(data)) { + if (!this._decoder) { + var SD = require('string_decoder').StringDecoder + this._decoder = new SD('utf8') + } + data = this._decoder.write(data); + } + + this._parser.write(data.toString()) + this.emit("data", data) + return true +} + +SAXStream.prototype.end = function (chunk) { + if (chunk && chunk.length) this.write(chunk) + this._parser.end() + return true +} + +SAXStream.prototype.on = function (ev, handler) { + var me = this + if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) { + me._parser["on"+ev] = function () { + var args = arguments.length === 1 ? [arguments[0]] + : Array.apply(null, arguments) + args.splice(0, 0, ev) + me.emit.apply(me, args) + } + } + + return Stream.prototype.on.call(me, ev, handler) +} + + + +// character classes and tokens +var whitespace = "\r\n\t " + // this really needs to be replaced with character classes. + // XML allows all manner of ridiculous numbers and digits. + , number = "0124356789" + , letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + // (Letter | "_" | ":") + , quote = "'\"" + , entity = number+letter+"#" + , attribEnd = whitespace + ">" + , CDATA = "[CDATA[" + , DOCTYPE = "DOCTYPE" + , XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace" + , XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/" + , rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } + +// turn all the string character sets into character class objects. +whitespace = charClass(whitespace) +number = charClass(number) +letter = charClass(letter) + +// http://www.w3.org/TR/REC-xml/#NT-NameStartChar +// This implementation works on strings, a single character at a time +// as such, it cannot ever support astral-plane characters (10000-EFFFF) +// without a significant breaking change to either this parser, or the +// JavaScript language. Implementation of an emoji-capable xml parser +// is left as an exercise for the reader. +var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + +var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ + +quote = charClass(quote) +entity = charClass(entity) +attribEnd = charClass(attribEnd) + +function charClass (str) { + return str.split("").reduce(function (s, c) { + s[c] = true + return s + }, {}) +} + +function isRegExp (c) { + return Object.prototype.toString.call(c) === '[object RegExp]' +} + +function is (charclass, c) { + return isRegExp(charclass) ? !!c.match(charclass) : charclass[c] +} + +function not (charclass, c) { + return !is(charclass, c) +} + +var S = 0 +sax.STATE = +{ BEGIN : S++ +, TEXT : S++ // general stuff +, TEXT_ENTITY : S++ // & and such. +, OPEN_WAKA : S++ // < +, SGML_DECL : S++ // +, SCRIPT : S++ // " + , expect : + [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] + , [ "text", "hello world" ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + +require(__dirname).test + ( { xml : "" + , expect : + [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] + , [ "opencdata", undefined ] + , [ "cdata", "hello world" ] + , [ "closecdata", undefined ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + diff --git a/www/node_modules/sax/test/issue-84.js b/www/node_modules/sax/test/issue-84.js new file mode 100644 index 0000000..0e7ee69 --- /dev/null +++ b/www/node_modules/sax/test/issue-84.js @@ -0,0 +1,13 @@ +// https://github.com/isaacs/sax-js/issues/49 +require(__dirname).test + ( { xml : "body" + , expect : + [ [ "processinginstruction", { name: "has", body: "unbalanced \"quotes" } ], + [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "text", "body" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) diff --git a/www/node_modules/sax/test/parser-position.js b/www/node_modules/sax/test/parser-position.js new file mode 100644 index 0000000..e4a68b1 --- /dev/null +++ b/www/node_modules/sax/test/parser-position.js @@ -0,0 +1,28 @@ +var sax = require("../lib/sax"), + assert = require("assert") + +function testPosition(chunks, expectedEvents) { + var parser = sax.parser(); + expectedEvents.forEach(function(expectation) { + parser['on' + expectation[0]] = function() { + for (var prop in expectation[1]) { + assert.equal(parser[prop], expectation[1][prop]); + } + } + }); + chunks.forEach(function(chunk) { + parser.write(chunk); + }); +}; + +testPosition(['

          abcdefgh
          '], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); + +testPosition(['
          abcde','fgh
          '], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); diff --git a/www/node_modules/sax/test/script-close-better.js b/www/node_modules/sax/test/script-close-better.js new file mode 100644 index 0000000..f4887b9 --- /dev/null +++ b/www/node_modules/sax/test/script-close-better.js @@ -0,0 +1,12 @@ +require(__dirname).test({ + xml : "", + expect : [ + ["opentag", {"name": "HTML","attributes": {}, isSelfClosing: false}], + ["opentag", {"name": "HEAD","attributes": {}, isSelfClosing: false}], + ["opentag", {"name": "SCRIPT","attributes": {}, isSelfClosing: false}], + ["script", "'
          foo
          ", + expect : [ + ["opentag", {"name": "HTML","attributes": {}, "isSelfClosing": false}], + ["opentag", {"name": "HEAD","attributes": {}, "isSelfClosing": false}], + ["opentag", {"name": "SCRIPT","attributes": {}, "isSelfClosing": false}], + ["script", "if (1 < 0) { console.log('elo there'); }"], + ["closetag", "SCRIPT"], + ["closetag", "HEAD"], + ["closetag", "HTML"] + ] +}); diff --git a/www/node_modules/sax/test/self-closing-child-strict.js b/www/node_modules/sax/test/self-closing-child-strict.js new file mode 100644 index 0000000..3d6e985 --- /dev/null +++ b/www/node_modules/sax/test/self-closing-child-strict.js @@ -0,0 +1,44 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "root", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "child", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "haha", + "attributes": {}, + "isSelfClosing": true + }], + ["closetag", "haha"], + ["closetag", "child"], + ["opentag", { + "name": "monkey", + "attributes": {}, + "isSelfClosing": false + }], + ["text", "=(|)"], + ["closetag", "monkey"], + ["closetag", "root"], + ["end"], + ["ready"] + ], + strict : true, + opt : {} +}); + diff --git a/www/node_modules/sax/test/self-closing-child.js b/www/node_modules/sax/test/self-closing-child.js new file mode 100644 index 0000000..f31c366 --- /dev/null +++ b/www/node_modules/sax/test/self-closing-child.js @@ -0,0 +1,44 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "ROOT", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "CHILD", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "HAHA", + "attributes": {}, + "isSelfClosing": true + }], + ["closetag", "HAHA"], + ["closetag", "CHILD"], + ["opentag", { + "name": "MONKEY", + "attributes": {}, + "isSelfClosing": false + }], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); + diff --git a/www/node_modules/sax/test/self-closing-tag.js b/www/node_modules/sax/test/self-closing-tag.js new file mode 100644 index 0000000..d1d8b7c --- /dev/null +++ b/www/node_modules/sax/test/self-closing-tag.js @@ -0,0 +1,25 @@ + +require(__dirname).test({ + xml : + " "+ + " "+ + " "+ + " "+ + "=(|) "+ + ""+ + " ", + expect : [ + ["opentag", {name:"ROOT", attributes:{}, isSelfClosing: false}], + ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], + ["closetag", "HAHA"], + ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], + ["closetag", "HAHA"], + // ["opentag", {name:"HAHA", attributes:{}}], + // ["closetag", "HAHA"], + ["opentag", {name:"MONKEY", attributes:{}, isSelfClosing: false}], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"] + ], + opt : { trim : true } +}); \ No newline at end of file diff --git a/www/node_modules/sax/test/stray-ending.js b/www/node_modules/sax/test/stray-ending.js new file mode 100644 index 0000000..bec467b --- /dev/null +++ b/www/node_modules/sax/test/stray-ending.js @@ -0,0 +1,17 @@ +// stray ending tags should just be ignored in non-strict mode. +// https://github.com/isaacs/sax-js/issues/32 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "A", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "B", attributes: {}, isSelfClosing: false } ] + , [ "text", "" ] + , [ "closetag", "B" ] + , [ "closetag", "A" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/www/node_modules/sax/test/trailing-attribute-no-value.js b/www/node_modules/sax/test/trailing-attribute-no-value.js new file mode 100644 index 0000000..222837f --- /dev/null +++ b/www/node_modules/sax/test/trailing-attribute-no-value.js @@ -0,0 +1,10 @@ + +require(__dirname).test({ + xml : + "", + expect : [ + ["attribute", {name:"ATTRIB", value:"attrib"}], + ["opentag", {name:"ROOT", attributes:{"ATTRIB":"attrib"}, isSelfClosing: false}] + ], + opt : { trim : true } +}); diff --git a/www/node_modules/sax/test/trailing-non-whitespace.js b/www/node_modules/sax/test/trailing-non-whitespace.js new file mode 100644 index 0000000..619578b --- /dev/null +++ b/www/node_modules/sax/test/trailing-non-whitespace.js @@ -0,0 +1,18 @@ + +require(__dirname).test({ + xml : "Welcome, to monkey land", + expect : [ + ["opentag", { + "name": "SPAN", + "attributes": {}, + isSelfClosing: false + }], + ["text", "Welcome,"], + ["closetag", "SPAN"], + ["text", " to monkey land"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); diff --git a/www/node_modules/sax/test/unclosed-root.js b/www/node_modules/sax/test/unclosed-root.js new file mode 100644 index 0000000..f4eeac6 --- /dev/null +++ b/www/node_modules/sax/test/unclosed-root.js @@ -0,0 +1,11 @@ +require(__dirname).test + ( { xml : "" + + , expect : + [ [ "opentag", { name: "root", attributes: {}, isSelfClosing: false } ] + , [ "error", "Unclosed root tag\nLine: 0\nColumn: 6\nChar: " ] + ] + , strict : true + , opt : {} + } + ) diff --git a/www/node_modules/sax/test/unquoted.js b/www/node_modules/sax/test/unquoted.js new file mode 100644 index 0000000..b3a9a81 --- /dev/null +++ b/www/node_modules/sax/test/unquoted.js @@ -0,0 +1,18 @@ +// unquoted attributes should be ok in non-strict mode +// https://github.com/isaacs/sax-js/issues/31 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "attribute", { name: "CLASS", value: "test" } ] + , [ "attribute", { name: "HELLO", value: "world" } ] + , [ "opentag", { name: "SPAN", + attributes: { CLASS: "test", HELLO: "world" }, + isSelfClosing: false } ] + , [ "closetag", "SPAN" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/www/node_modules/sax/test/utf8-split.js b/www/node_modules/sax/test/utf8-split.js new file mode 100644 index 0000000..e22bc10 --- /dev/null +++ b/www/node_modules/sax/test/utf8-split.js @@ -0,0 +1,32 @@ +var assert = require('assert') +var saxStream = require('../lib/sax').createStream() + +var b = new Buffer('误') + +saxStream.on('text', function(text) { + assert.equal(text, b.toString()) +}) + +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 1)) +saxStream.write(b.slice(1)) +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 2)) +saxStream.write(b.slice(2)) +saxStream.write(new Buffer('')) +saxStream.write(b) +saxStream.write(new Buffer('')) +saxStream.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) +saxStream.end(Buffer.concat([b.slice(1), new Buffer('')])) + +var saxStream2 = require('../lib/sax').createStream() + +saxStream2.on('text', function(text) { + assert.equal(text, '�') +}); + +saxStream2.write(new Buffer('')); +saxStream2.write(new Buffer([0xC0])); +saxStream2.write(new Buffer('')); +saxStream2.write(Buffer.concat([new Buffer(''), b.slice(0,1)])); +saxStream2.end(); diff --git a/www/node_modules/sax/test/xmlns-as-tag-name.js b/www/node_modules/sax/test/xmlns-as-tag-name.js new file mode 100644 index 0000000..99142ca --- /dev/null +++ b/www/node_modules/sax/test/xmlns-as-tag-name.js @@ -0,0 +1,15 @@ + +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "xmlns", uri: "", prefix: "", local: "xmlns", + attributes: {}, ns: {}, + isSelfClosing: true} + ], + ["closetag", "xmlns"] + ] + , strict : true + , opt : { xmlns: true } + } + ); diff --git a/www/node_modules/sax/test/xmlns-issue-41.js b/www/node_modules/sax/test/xmlns-issue-41.js new file mode 100644 index 0000000..17ab45a --- /dev/null +++ b/www/node_modules/sax/test/xmlns-issue-41.js @@ -0,0 +1,68 @@ +var t = require(__dirname) + + , xmls = // should be the same both ways. + [ "" + , "" ] + + , ex1 = + [ [ "opennamespace" + , { prefix: "a" + , uri: "http://ATTRIBUTE" + } + ] + , [ "attribute" + , { name: "xmlns:a" + , value: "http://ATTRIBUTE" + , prefix: "xmlns" + , local: "a" + , uri: "http://www.w3.org/2000/xmlns/" + } + ] + , [ "attribute" + , { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + ] + , [ "opentag" + , { name: "parent" + , uri: "" + , prefix: "" + , local: "parent" + , attributes: + { "a:attr": + { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + , "xmlns:a": + { name: "xmlns:a" + , local: "a" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "http://ATTRIBUTE" + } + } + , ns: {"a": "http://ATTRIBUTE"} + , isSelfClosing: true + } + ] + , ["closetag", "parent"] + , ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }] + ] + + // swap the order of elements 2 and 1 + , ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3)) + , expected = [ex1, ex2] + +xmls.forEach(function (x, i) { + t.test({ xml: x + , expect: expected[i] + , strict: true + , opt: { xmlns: true } + }) +}) diff --git a/www/node_modules/sax/test/xmlns-rebinding.js b/www/node_modules/sax/test/xmlns-rebinding.js new file mode 100644 index 0000000..07e0425 --- /dev/null +++ b/www/node_modules/sax/test/xmlns-rebinding.js @@ -0,0 +1,63 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opennamespace", { prefix: "x", uri: "x1" } ] + , [ "opennamespace", { prefix: "y", uri: "y1" } ] + , [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ] + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } + , "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } + , "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' }, + isSelfClosing: false } ] + + , [ "opennamespace", { prefix: "x", uri: "x2" } ] + , [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } }, + ns: { x: 'x2' }, + isSelfClosing: false } ] + + , [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x2' }, + isSelfClosing: true } ] + + , [ "closetag", "check" ] + + , [ "closetag", "rebind" ] + , [ "closenamespace", { prefix: "x", uri: "x2" } ] + + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' }, + isSelfClosing: true } ] + , [ "closetag", "check" ] + + , [ "closetag", "root" ] + , [ "closenamespace", { prefix: "x", uri: "x1" } ] + , [ "closenamespace", { prefix: "y", uri: "y1" } ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/www/node_modules/sax/test/xmlns-strict.js b/www/node_modules/sax/test/xmlns-strict.js new file mode 100644 index 0000000..b5e3e51 --- /dev/null +++ b/www/node_modules/sax/test/xmlns-strict.js @@ -0,0 +1,74 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opentag", { name: "root", prefix: "", local: "root", uri: "", + attributes: {}, ns: {}, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } }, + ns: {}, isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "opennamespace", { prefix: "", uri: "uri:default" } ] + + , [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ] + , [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", + attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { "": "uri:default" }, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' }, + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "closetag", "ns1" ] + + , [ "closenamespace", { prefix: "", uri: "uri:default" } ] + + , [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ] + + , [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "", + attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { a: "uri:nsa" }, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ] + , [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", + attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true } ] + , [ "closetag", "a:ns" ] + + , [ "closetag", "ns2" ] + + , [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "closetag", "root" ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/www/node_modules/sax/test/xmlns-unbound-element.js b/www/node_modules/sax/test/xmlns-unbound-element.js new file mode 100644 index 0000000..9d031a2 --- /dev/null +++ b/www/node_modules/sax/test/xmlns-unbound-element.js @@ -0,0 +1,33 @@ +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ [ "error", "Unbound namespace prefix: \"unbound:root\"\nLine: 0\nColumn: 15\nChar: >"] + , [ "opentag", { name: "unbound:root", uri: "unbound", prefix: "unbound", local: "root" + , attributes: {}, ns: {}, isSelfClosing: true } ] + , [ "closetag", "unbound:root" ] + ] + } +).write(""); + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ [ "opennamespace", { prefix: "unbound", uri: "someuri" } ] + , [ "attribute", { name: 'xmlns:unbound', value: 'someuri' + , prefix: 'xmlns', local: 'unbound' + , uri: 'http://www.w3.org/2000/xmlns/' } ] + , [ "opentag", { name: "unbound:root", uri: "someuri", prefix: "unbound", local: "root" + , attributes: { 'xmlns:unbound': { + name: 'xmlns:unbound' + , value: 'someuri' + , prefix: 'xmlns' + , local: 'unbound' + , uri: 'http://www.w3.org/2000/xmlns/' } } + , ns: { "unbound": "someuri" }, isSelfClosing: true } ] + , [ "closetag", "unbound:root" ] + , [ "closenamespace", { prefix: 'unbound', uri: 'someuri' }] + ] + } +).write(""); diff --git a/www/node_modules/sax/test/xmlns-unbound.js b/www/node_modules/sax/test/xmlns-unbound.js new file mode 100644 index 0000000..b740e26 --- /dev/null +++ b/www/node_modules/sax/test/xmlns-unbound.js @@ -0,0 +1,15 @@ + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"] + + , [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } }, + ns: {}, isSelfClosing: true } ] + , [ "closetag", "root" ] + ] + } +).write("") diff --git a/www/node_modules/sax/test/xmlns-xml-default-ns.js b/www/node_modules/sax/test/xmlns-xml-default-ns.js new file mode 100644 index 0000000..b1984d2 --- /dev/null +++ b/www/node_modules/sax/test/xmlns-xml-default-ns.js @@ -0,0 +1,31 @@ +var xmlns_attr = +{ + name: "xmlns", value: "http://foo", prefix: "xmlns", + local: "", uri : "http://www.w3.org/2000/xmlns/" +}; + +var attr_attr = +{ + name: "attr", value: "bar", prefix: "", + local : "attr", uri : "" +}; + + +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opennamespace", { prefix: "", uri: "http://foo" } ] + , [ "attribute", xmlns_attr ] + , [ "attribute", attr_attr ] + , [ "opentag", { name: "elm", prefix: "", local: "elm", uri : "http://foo", + ns : { "" : "http://foo" }, + attributes: { xmlns: xmlns_attr, attr: attr_attr }, + isSelfClosing: true } ] + , [ "closetag", "elm" ] + , [ "closenamespace", { prefix: "", uri: "http://foo"} ] + ] + , strict : true + , opt : {xmlns: true} + } + ) diff --git a/www/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/www/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js new file mode 100644 index 0000000..e41f218 --- /dev/null +++ b/www/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js @@ -0,0 +1,36 @@ +require(__dirname).test( + { xml : "" + , expect : + [ [ "attribute" + , { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + ] + , [ "opentag" + , { name: "root" + , uri: "" + , prefix: "" + , local: "root" + , attributes: + { "xml:lang": + { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + } + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/www/node_modules/sax/test/xmlns-xml-default-prefix.js b/www/node_modules/sax/test/xmlns-xml-default-prefix.js new file mode 100644 index 0000000..a85b478 --- /dev/null +++ b/www/node_modules/sax/test/xmlns-xml-default-prefix.js @@ -0,0 +1,21 @@ +require(__dirname).test( + { xml : "" + , expect : + [ + [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: {} + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/www/node_modules/sax/test/xmlns-xml-default-redefine.js b/www/node_modules/sax/test/xmlns-xml-default-redefine.js new file mode 100644 index 0000000..d35d5a0 --- /dev/null +++ b/www/node_modules/sax/test/xmlns-xml-default-redefine.js @@ -0,0 +1,41 @@ +require(__dirname).test( + { xml : "" + , expect : + [ ["error" + , "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n" + + "Actual: ERROR\n" + + "Line: 0\nColumn: 27\nChar: '" + ] + , [ "attribute" + , { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + ] + , [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: + { "xmlns:xml": + { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + } + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/www/node_modules/selenium-webdriver/.npmignore b/www/node_modules/selenium-webdriver/.npmignore new file mode 100644 index 0000000..d570088 --- /dev/null +++ b/www/node_modules/selenium-webdriver/.npmignore @@ -0,0 +1,2 @@ +node_modules/ + diff --git a/www/node_modules/selenium-webdriver/CHANGES.md b/www/node_modules/selenium-webdriver/CHANGES.md new file mode 100644 index 0000000..5d40b1b --- /dev/null +++ b/www/node_modules/selenium-webdriver/CHANGES.md @@ -0,0 +1,490 @@ +## v2.52.0 + +### Notice + +Starting with v2.52.0, each release of selenium-webdriver will support the +latest _minor_ LTS and stable Node releases. All releases between the LTS and +stable release will have best effort support. Further details are available in +the selenium-webdriver package README. + +### Change Summary + +* Add support for Microsoft's Edge web browser +* Added `webdriver.Builder#buildAsync()`, which returns a promise that will be + fulfilled with the newly created WebDriver instance once the associated + browser has been full initialized. This is purely a convenient alternative + to the existing build() method as the WebDriver class will always defer + commands until it has a fully created browser. +* Added `firefox.Profile#setHost()` which may be used to set the host that + the FirefoxDriver's server listens for commands on. The server uses + "localhost" by default. +* Added `promise.Promise#catch()` for API compatibility with native Promises. + `promise.Promise#thenCatch()` is not yet deprecated, but it simply + delegates to `catch`. +* Changed some `io` operations to use native promises. +* Changed `command.Executor#execute()` and `HttpClient#send()` to return + promises instead of using callback passing. +* Replaced the `Serializable` class with an internal, Symbol-defined method. +* Changed the `Capabilities` class to extend the native `Map` type. +* Changed the `Capabilities.has(key)` to only test if a capability has been set + (Map semantics). To check whether the value is true, use `get(key)`. +* Deprecated `executors.DeferredExecutor` in favor of + `lib/command.DeferredExecutor`. +* API documentation is no longer distributed with the npm package, but remains + available at +* Rewrote the `error` module to export an Error subtype for each type of error + defined in the [W3C WebDriver spec](https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors). +* Changed the `http.Request` and `http.Response` classes to store headers in + maps instead of object literals. +* Updated `ws` dependency to version `1.0.1`. +* Removed fluent predicates "is" and "not" from the experimental + `testing/assert` module. +* Wait conditions that locate an element, or that wait on an element's state, + will return a WebElementPromise. +* Lots of internal clean-up to break selenium-webdriver's long standing + dependency on Google's Closure library. + +### Changes for W3C WebDriver Spec Compliance + +* Updated the `By` locators that are not in the W3C spec to delegated to using + CSS selectors: `By.className`, `By.id`, `By.name`, and `By.tagName`. + + +## v2.49-51 + +* _Releases skipped to stay in sync with the rest of the Selenium project_ + + +## v2.48.2 + +* Added `WebElement#takeScreenshot()`. +* More adjustments to promise callback tracking. + +## v2.48.1 + +* FIXED: Adjusted how the control flow tracks promise callbacks to avoid a + potential deadlock. + +## v2.48.0 + +* Node v0.12.x users must run with --harmony. _This is the last release that + will support v0.12.x_ +* FIXED: (Promise/A+ compliance) When a promise is rejected with a thenable, + the promise adopts the thenable as its rejection reason instead of waiting + for it to settle. The previous (incorrect) behavior was hidden by bugs in + the `promises-aplus-tests` compliance test suite that were fixed in version + `2.1.1`. +* FIXED: the `webdriver.promise.ControlFlow` now has a consistent execution + order for tasks/callbacks scheduled in different turns of the JS event loop. + Refer to the `webdriver.promise` documentation for more details. +* FIXED: do not drop user auth from the WebDriver server URL. +* FIXED: a single `firefox.Binary` instance may be used to configure and + launch multiple FirefoxDriver sessions. + + var binary = new firefox.Binary(); + var options = new firefox.Options().setBinary(binary); + var builder = new Builder().setFirefoxOptions(options); + + var driver1 = builder.build(); + var driver2 = builder.build(); + +* FIXED: zip files created for transfer to a remote WebDriver server are no + longer compressed. If the zip contained a file that was already compressed, + the server would return an "invalid code lengths set" error. +* FIXED: Surfaced the `loopback` option to `remote/SeleniumServer`. When set, + the server will be accessed using the current host's loopback address. + +## v2.47.0 + +### Notice + +This is the last release for `selenium-webdriver` that will support ES5. +Subsequent releases will depend on ES6 features that are enabled by +[default](https://nodejs.org/en/docs/es6/) in Node v4.0.0. Node v0.12.x will +continue to be supported, but will require setting the `--harmony` flag. + +### Change Summary + +* Add support for [Node v4.0.0](https://nodejs.org/en/blog/release/v4.0.0/) + * Updated `ws` dependency from `0.7.1` to `0.8.0` +* Bumped the minimum supported version of Node from `0.10.x` to `0.12.x`. This + is in accordance with the Node support policy established in `v2.45.0`. + +## v2.46.1 + +* Fixed internal module loading on Windows. +* Fixed error message format on timeouts for `until.elementLocated()` + and `until.elementsLocated()`. + +## v2.46.0 + +* Exposed a new logging API via the `webdriver.logging` module. For usage, see + `example/logging.js`. +* Added support for using a proxy server for WebDriver commands. + See `Builder#usingWebDriverProxy()` for more info. +* Removed deprecated functions: + * Capabilities#toJSON() + * UnhandledAlertError#getAlert() + * chrome.createDriver() + * phantomjs.createDriver() + * promise.ControlFlow#annotateError() + * promise.ControlFlow#await() + * promise.ControlFlow#clearHistory() + * promise.ControlFlow#getHistory() +* Removed deprecated enum values: `ErrorCode.NO_MODAL_DIALOG_OPEN` and + `ErrorCode.MODAL_DIALOG_OPENED`. Use `ErrorCode.NO_SUCH_ALERT` and + `ErrorCode.UNEXPECTED_ALERT_OPEN`, respectively. +* FIXED: The `promise.ControlFlow` will maintain state for promise chains + generated in a loop. +* FIXED: Correct serialize target elements used in an action sequence. +* FIXED: `promise.ControlFlow#wait()` now has consistent semantics for an + omitted or 0-timeout: it will wait indefinitely. +* FIXED: `remote.DriverService#start()` will now fail if the child process dies + while waiting for the server to start accepting requests. Previously, start + would continue to poll the server address until the timeout expired. +* FIXED: Skip launching Firefox with the `-silent` flag to preheat the profile. + Starting with Firefox 38, this would cause the browser to crash. This step, + which was first introduced for Selenium's java client back with Firefox 2, + no longer appears to be required. +* FIXED: 8564: `firefox.Driver#quit()` will wait for the Firefox process to + terminate before deleting the temporary webdriver profile. This eliminates a + race condition where Firefox would write profile data during shutdown, + causing the `rm -rf` operation on the profile directory to fail. + +## v2.45.1 + +* FIXED: 8548: Task callbacks are once again dropped if the task was cancelled + due to a previously uncaught error within the frame. +* FIXED: 8496: Extended the `chrome.Options` API to cover all configuration + options (e.g. mobile emulation and performance logging) documented on the + ChromeDriver [project site](https://sites.google.com/a/chromium.org/chromedriver/capabilities). + +## v2.45.0 + +### Important Policy Change + +Starting with the 2.45.0 release, selenium-webdriver will support the last +two stable minor releases for Node. For 2.45.0, this means Selenium will +support Node 0.10.x and 0.12.x. Support for the intermediate, un-stable release +(0.11.x) is "best-effort". This policy will be re-evaluated once Node has a +major version release (i.e. 1.0.0). + +### Change Summary + +* Added native browser support for Internet Explorer, Opera 26+, and Safari +* With the release of [Node 0.12.0](http://blog.nodejs.org/2015/02/06/node-v0-12-0-stable/) + (finally!), the minimum supported version of Node is now `0.10.x`. +* The `promise` module is now [Promises/A+](https://promisesaplus.com/) + compliant. The biggest compliance change is that promise callbacks are now + invoked in a future turn of the JS event loop. For example: + + var promise = require('selenium-webdriver').promise; + console.log('start'); + promise.fulfilled().then(function() { + console.log('middle'); + }); + console.log('end'); + + // Output in selenium-webdriver@2.44.0 + // start + // middle + // end + // + // Output in selenium-webdriver@2.45.0 + // start + // end + // middle + + The `promise.ControlFlow` class has been updated to track the asynchronous + breaks required by Promises/A+, so there are no changes to task execution + order. +* Updated how errors are annotated on failures. When a task fails, the + stacktrace from when that task was scheduled is appended to the rejection + reason with a `From: ` prefix (if it is an Error object). For example: + + var driver = new webdriver.Builder().forBrowser('chrome').build(); + driver.get('http://www.google.com/ncr'); + driver.call(function() { + driver.wait(function() { + return driver.isElementPresent(webdriver.By.id('not-there')); + }, 2000, 'element not found'); + }); + + This code will fail an error like: + + Error: element not found + Wait timed out after 2002ms + at + From: Task: element not found + at + From: Task: WebDriver.call(function) + at + +* Changed the format of strings returned by `promise.ControlFlow#getSchedule`. + This function now accepts a boolean to control whether the returned string + should include the stacktraces for when each task was scheduled. +* Deprecating `promise.ControlFlow#getHistory`, + `promise.ControlFlow#clearHistory`, and `promise.ControlFlow#annotateError`. + These functions were all intended for internal use and are no longer + necessary, so they have been made no-ops. +* `WebDriver.wait()` may now be used to wait for a promise to resolve, with + an optional timeout. Refer to the API documentation for more information. +* Added support for copying files to a remote Selenium via `sendKeys` to test + file uploads. Refer to the API documentation for more information. Sample + usage included in `test/upload_test.js` +* Expanded the interactions API to include touch actions. + See `WebDriver.touchActions()`. +* FIXED: 8380: `firefox.Driver` will delete its temporary profile on `quit`. +* FIXED: 8306: Stack overflow in promise callbacks eliminated. +* FIXED: 8221: Added support for defining custom command mappings. Includes + support for PhantomJS's `executePhantomJS` (requires PhantomJS 1.9.7 or + GhostDriver 1.1.0). +* FIXED: 8128: When the FirefoxDriver marshals an object to the page for + `executeScript`, it defines additional properties (required by the driver's + implementation). These properties will no longer be enumerable and should + be omitted (i.e. they won't show up in JSON.stringify output). +* FIXED: 8094: The control flow will no longer deadlock when a task returns + a promise that depends on the completion of sub-tasks. + +## v2.44.0 + +* Added the `until` module, which defines common explicit wait conditions. + Sample usage: + + var firefox = require('selenium-webdriver/firefox'), + until = require('selenium-webdriver/until'); + + var driver = new firefox.Driver(); + driver.get('http://www.google.com/ncr'); + driver.wait(until.titleIs('Google Search'), 1000); + +* FIXED: 8000: `Builder.forBrowser()` now accepts an empty string since some + WebDriver implementations ignore the value. A value must still be specified, + however, since it is a required field in WebDriver's wire protocol. +* FIXED: 7994: The `stacktrace` module will not modify stack traces if the + initial parse fails (e.g. the user defined `Error.prepareStackTrace`) +* FIXED: 5855: Added a module (`until`) that defines several common conditions + for use with explicit waits. See updated examples for usage. + +## v2.43.5 + +* FIXED: 7905: `Builder.usingServer(url)` once again returns `this` for + chaining. + +## v2.43.2-4 + +* No changes; version bumps while attempting to work around an issue with + publishing to npm (a version string may only be used once). + +## v2.43.1 + +* Fixed an issue with flakiness when setting up the Firefox profile that could + prevent the driver from initializing properly. + +## v2.43.0 + +* Added native support for Firefox - the Java Selenium server is no longer + required. +* Added support for generator functions to `ControlFlow#execute` and + `ControlFlow#wait`. For more information, see documentation on + `webdriver.promise.consume`. Requires harmony support (run with + `node --harmony-generators` in `v0.11.x`). +* Various improvements to the `Builder` API. Notably, the `build()` function + will no longer default to attempting to use a server at + `http://localhost:4444/wd/hub` if it cannot start a browser directly - + you must specify the WebDriver server with `usingServer(url)`. You can + also set the target browser and WebDriver server through a pair of + environment variables. See the documentation on the `Builder` constructor + for more information. +* For consistency with the other language bindings, added browser specific + classes that can be used to start a browser without the builder. + + var webdriver = require('selenium-webdriver') + chrome = require('selenium-webdriver/chrome'); + + // The following are equivalent. + var driver1 = new webdriver.Builder().forBrowser('chrome').build(); + var driver2 = new chrome.Driver(); + +* Promise A+ compliance: a promise may no longer resolve to itself. +* For consistency with other language bindings, deprecated + `UnhandledAlertError#getAlert` and added `#getAlertText`. + `getAlert` will be removed in `2.45.0`. +* FIXED: 7641: Deprecated `ErrorCode.NO_MODAL_DIALOG_OPEN` and + `ErrorCode.MODAL_DIALOG_OPENED` in favor of the new + `ErrorCode.NO_SUCH_ALERT` and `ErrorCode.UNEXPECTED_ALERT_OPEN`, + respectively. +* FIXED: 7563: Mocha integration no longer disables timeouts. Default Mocha + timeouts apply (2000 ms) and may be changed using `this.timeout(ms)`. +* FIXED: 7470: Make it easier to create WebDriver instances in custom flows for + parallel execution. + +## v2.42.1 + +* FIXED: 7465: Fixed `net.getLoopbackAddress` on Windows +* FIXED: 7277: Support `done` callback in Mocha's BDD interface +* FIXED: 7156: `Promise#thenFinally` should not suppress original error + +## v2.42.0 + +* Removed deprecated functions `Promise#addCallback()`, + `Promise#addCallbacks()`, `Promise#addErrback()`, and `Promise#addBoth()`. +* Fail with a more descriptive error if the server returns a malformed redirect +* FIXED: 7300: Connect to ChromeDriver using the loopback address since + ChromeDriver 2.10.267517 binds to localhost by default. +* FIXED: 7339: Preserve wrapped test function's string representation for + Mocha's BDD interface. + +## v2.41.0 + +* FIXED: 7138: export logging API from webdriver module. +* FIXED: 7105: beforeEach/it/afterEach properly bind `this` for Mocha tests. + +## v2.40.0 + +* API documentation is now included in the docs directory. +* Added utility functions for working with an array of promises: + `promise.all`, `promise.map`, and `promise.filter` +* Introduced `Promise#thenCatch()` and `Promise#thenFinally()`. +* Deprecated `Promise#addCallback()`, `Promise#addCallbacks()`, + `Promise#addErrback()`, and `Promise#addBoth()`. +* Removed deprecated function `webdriver.WebDriver#getCapability`. +* FIXED: 6826: Added support for custom locators. + +## v2.39.0 + +* Version bump to stay in sync with the Selenium project. + +## v2.38.1 + +* FIXED: 6686: Changed `webdriver.promise.Deferred#cancel()` to silently no-op + if the deferred has already been resolved. + +## v2.38.0 + +* When a promise is rejected, always annotate the stacktrace with the parent + flow state so users can identify the source of an error. +* Updated tests to reflect features not working correctly in the SafariDriver + (cookie management and proxy support; see issues 5051, 5212, and 5503) +* FIXED: 6284: For mouse moves, correctly omit the x/y offsets if not + specified as a function argument (instead of passing (0,0)). +* FIXED: 6471: Updated documentation on `webdriver.WebElement#getAttribute` +* FIXED: 6612: On Unix, use the default IANA ephemeral port range if unable to + retrieve the current system's port range. +* FIXED: 6617: Avoid triggering the node debugger when initializing the + stacktrace module. +* FIXED: 6627: Safely rebuild chrome.Options from a partial JSON spec. + +## v2.37.0 + +* FIXED: 6346: The remote.SeleniumServer class now accepts JVM arguments using + the `jvmArgs` option. + +## v2.36.0 + +* _Release skipped to stay in sync with main Selenium project._ + +## v2.35.2 + +* FIXED: 6200: Pass arguments to the Selenium server instead of to the JVM. + +## v2.35.1 + +* FIXED: 6090: Changed example scripts to use chromedriver. + +## v2.35.0 + +* Version bump to stay in sync with the Selenium project. + +## v2.34.1 + +* FIXED: 6079: The parent process should not wait for spawn driver service + processes (chromedriver, phantomjs, etc.) + +## v2.34.0 + +* Added the `selenium-webdriver/testing/assert` module. This module + simplifies writing assertions against promised values (see + example in module documentation). +* Added the `webdriver.Capabilities` class. +* Added native support for the ChromeDriver. When using the `Builder`, + requesting chrome without specifying a remote server URL will default to + the native ChromeDriver implementation. The + [ChromeDriver server](https://code.google.com/p/chromedriver/downloads/list) + must be downloaded separately. + + // Will start ChromeDriver locally. + var driver = new webdriver.Builder(). + withCapabilities(webdriver.Capabilities.chrome()). + build(); + + // Will start ChromeDriver using the remote server. + var driver = new webdriver.Builder(). + withCapabilities(webdriver.Capabilities.chrome()). + usingServer('http://server:1234/wd/hub'). + build(); + +* Added support for configuring proxies through the builder. For examples, see + `selenium-webdriver/test/proxy_test`. +* Added native support for PhantomJS. +* Changed signature of `SeleniumServer` to `SeleniumServer(jar, options)`. +* Tests are now included in the npm published package. See `README.md` for + execution instructions +* Removed the deprecated `webdriver.Deferred#resolve` and + `webdriver.promise.resolved` functions. +* Removed the ability to connect to an existing session from the Builder. This + feature is intended for use with the browser-based client. + +## v2.33.0 + +* Added support for WebDriver's logging API +* FIXED: 5511: Added webdriver.manage().timeouts().pageLoadTimeout(ms) + +## v2.32.1 + +* FIXED: 5541: Added missing return statement for windows in + `portprober.findFreePort()` + +## v2.32.0 + +* Added the `selenium-webdriver/testing` package, which provides a basic + framework for writing tests using Mocha. See + `selenium-webdriver/example/google_search_test.js` for usage. +* For Promises/A+ compatibility, backing out the change in 2.30.0 that ensured + rejections were always Error objects. Rejection reasons are now left as is. +* Removed deprecated functions originally scheduled for removal in 2.31.0 + * promise.Application.getInstance() + * promise.ControlFlow#schedule() + * promise.ControlFlow#scheduleTimeout() + * promise.ControlFlow#scheduleWait() +* Renamed some functions for consistency with Promises/A+ terminology. The + original functions have been deprecated and will be removed in 2.34.0: + * promise.resolved() -> promise.fulfilled() + * promise.Deferred#resolve() -> promise.Deferred#fulfill() +* FIXED: remote.SeleniumServer#stop now shuts down within the active control + flow, allowing scripts to finish. Use #kill to shutdown immediately. +* FIXED: 5321: cookie deletion commands + +## v2.31.0 + +* Added an example script. +* Added a class for controlling the standalone Selenium server (server +available separately) +* Added a portprober for finding free ports +* FIXED: WebElements now belong to the same flow as their parent driver. + +## v2.30.0 + +* Ensures promise rejections are always Error values. +* Version bump to keep in sync with the Selenium project. + +## v2.29.1 + +* Fixed a bug that could lead to an infinite loop. +* Added a README.md + +## v2.29.0 + +* Initial release for npm: + + npm install selenium-webdriver diff --git a/www/node_modules/selenium-webdriver/LICENSE b/www/node_modules/selenium-webdriver/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/www/node_modules/selenium-webdriver/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/www/node_modules/selenium-webdriver/NOTICE b/www/node_modules/selenium-webdriver/NOTICE new file mode 100644 index 0000000..2744503 --- /dev/null +++ b/www/node_modules/selenium-webdriver/NOTICE @@ -0,0 +1,2 @@ +Copyright 2011-2016 Software Freedom Conservancy +Copyright 2004-2011 Selenium committers diff --git a/www/node_modules/selenium-webdriver/README.md b/www/node_modules/selenium-webdriver/README.md new file mode 100644 index 0000000..0b446ba --- /dev/null +++ b/www/node_modules/selenium-webdriver/README.md @@ -0,0 +1,226 @@ +# selenium-webdriver + +Selenium is a browser automation library. Most often used for testing +web-applications, Selenium may be used for any task that requires automating +interaction with the browser. + +## Installation + +Selenium may be installed via npm with + + npm install selenium-webdriver + +Out of the box, Selenium includes everything you need to work with Firefox. You +will need to download additional components to work with the other major +browsers. The drivers for Chrome, PhantomJS, Opera, and Microsoft's IE and Edge +web browsers are all standalone executables that should be available on your +[PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). The SafariDriver +browser extension should be installed in your browser before using Selenium; we +recommend disabling the extension when using the browser without Selenium or +installing the extension in a profile only used for testing. + +| Browser | Component | +| ----------------- | ---------------------------------- | +| Chrome | [chromedriver(.exe)][chrome] | +| Internet Explorer | [IEDriverServer.exe][release] | +| Edge | [MicrosoftWebDriver.msi][edge] | +| PhantomJS | [phantomjs(.exe)][phantomjs] | +| Opera | [operadriver(.exe)][opera] | +| Safari | [SafariDriver.safariextz][release] | + +## Usage + +The sample below and others are included in the `example` directory. You may +also find the tests for selenium-webdriver informative. + + var webdriver = require('selenium-webdriver'), + By = require('selenium-webdriver').By, + until = require('selenium-webdriver').until; + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + + driver.get('http://www.google.com/ncr'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + driver.quit(); + +### Using the Builder API + +The `Builder` class is your one-stop shop for configuring new WebDriver +instances. Rather than clutter your code with branches for the various browsers, +the builder lets you set all options in one flow. When you call +`Builder#build()`, all options irrelevant to the selected browser are dropped: + + var webdriver = require('selenium-webdriver'), + chrome = require('selenium-webdriver/chrome'), + firefox = require('selenium-webdriver/firefox'); + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .setChromeOptions(/* ... */) + .setFirefoxOptions(/* ... */) + .build(); + +Why would you want to configure options irrelevant to the target browser? The +`Builder`'s API defines your _default_ configuration. You can change the target +browser at runtime through the `SELENIUM_BROWSER` environment variable. For +example, the `example/google_search.js` script is configured to run against +Firefox. You can run the example against other browsers just by changing the +runtime environment + + # cd node_modules/selenium-webdriver + node example/google_search + SELENIUM_BROWSER=chrome node example/google_search + SELENIUM_BROWSER=safari node example/google_search + +### The Standalone Selenium Server + +The standalone Selenium Server acts as a proxy between your script and the +browser-specific drivers. The server may be used when running locally, but it's +not recommend as it introduces an extra hop for each request and will slow +things down. The server is required, however, to use a browser on a remote host +(most browser drivers, like the IEDriverServer, do not accept remote +connections). + +To use the Selenium Server, you will need to install the +[JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html) and +download the latest server from [Selenium][release]. Once downloaded, run the +server with + + java -jar selenium-server-standalone-2.45.0.jar + +You may configure your tests to run against a remote server through the Builder +API: + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .usingServer('http://localhost:4444/wd/hub') + .build(); + +Or change the Builder's configuration at runtime with the `SELENIUM_REMOTE_URL` +environment variable: + + SELENIUM_REMOTE_URL="http://localhost:4444/wd/hub" node script.js + +You can experiment with these options using the `example/google_search.js` +script provided with `selenium-webdriver`. + +## Documentation + +API documentation is available online from the [Selenium project][api]. +Addition resources include + +- the #selenium channel on freenode IRC +- the [selenium-users@googlegroups.com][users] list +- [SeleniumHQ](http://www.seleniumhq.org/docs/) documentation + +## Contributing + +Contributions are accepted either through [GitHub][gh] pull requests or patches +via the [Selenium issue tracker][issues]. You must sign our +[Contributor License Agreement][cla] before your changes will be accepted. + +## Node Support Policy + +Each version of selenium-webdriver will support the latest _semver-minor_ +version of the [LTS] and stable Node releases. All _semver-major_ & +_semver-minor_ versions between the LTS and stable release will have "best +effort" support. Following a Selenium release, any _semver-minor_ Node releases +will also have "best effort" support. Releases older than the latest LTS, +_semver-major_ releases, and all unstable release branches (e.g. "v.Next") +are considered strictly unsupported. + +For example, suppose the current LTS and stable releases are v4.2.4 and v5.4.1, +respectively. Then a Selenium release would have the following support levels: + +| Version | Support | +| ------- | ------------- | +| <= 4.1 | _unsupported_ | +| 4.2 | supported | +| 5.0-3 | best effort | +| 5.4 | supported | +| >= 5.5 | best effort | +| v.Next | _unsupported_ | + +### Support Level Definitions + +- _supported:_ A selenium-webdriver release will be API compatible with the + platform API, without the use of runtime flags. + +- _best effort:_ Bugs will be investigated as time permits. API compatibility is + only guaranteed where required by a _supported_ release. This effectively + means the adoption of new JS features, such as ES2015 modules, will depend + on what is supported in Node's LTS. + +- _unsupported:_ Bug submissions will be closed as will-not-fix and API + compatibility is not guaranteed. + +### Projected Support Schedule + +If Node releases a new [LTS] each October and a new major version every 6 +months, the support window for selenium-webdriver will be roughly: + +| Date | LTS | Stable | +| --------- | ---: | -----: | +| (current) | 4.2 | 5.0 | +| 2016-04 | 4.2 | 6.0 | +| 2016-10 | 6.0 | 7.0 | +| 2017-04 | 6.0 | 8.0 | +| 2017-10 | 8.0 | 9.0 | + +## Issues + +Please report any issues using the [Selenium issue tracker][issues]. When using +the issue tracker + +- __Do__ include a detailed description of the problem. +- __Do__ include a link to a [gist](http://gist.github.com/) with any + interesting stack traces/logs (you may also attach these directly to the bug + report). +- __Do__ include a [reduced test case][reduction]. Reporting "unable to find + element on the page" is _not_ a valid report - there's nothing for us to + look into. Expect your bug report to be closed if you do not provide enough + information for us to investigate. +- __Do not__ use the issue tracker to submit basic help requests. All help + inquiries should be directed to the [user forum][users] or #selenium IRC + channel. +- __Do not__ post empty "I see this too" or "Any updates?" comments. These + provide no additional information and clutter the log. +- __Do not__ report regressions on closed bugs as they are not actively + monitored for upates (especially bugs that are >6 months old). Please open a + new issue and reference the original bug in your report. + +## License + +Licensed to the Software Freedom Conservancy (SFC) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The SFC licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +[LTS]: https://github.com/nodejs/LTS +[api]: http://seleniumhq.github.io/selenium/docs/api/javascript/ +[cla]: http://goo.gl/qC50R +[chrome]: http://chromedriver.storage.googleapis.com/index.html +[gh]: https://github.com/SeleniumHQ/selenium/ +[issues]: https://github.com/SeleniumHQ/selenium/issues +[opera]: https://github.com/operasoftware/operachromiumdriver/releases +[phantomjs]: http://phantomjs.org/ +[edge]: http://go.microsoft.com/fwlink/?LinkId=619687 +[reduction]: http://www.webkit.org/quality/reduction.html +[release]: http://selenium-release.storage.googleapis.com/index.html +[users]: https://groups.google.com/forum/#!forum/selenium-users diff --git a/www/node_modules/selenium-webdriver/builder.js b/www/node_modules/selenium-webdriver/builder.js new file mode 100644 index 0000000..64968e1 --- /dev/null +++ b/www/node_modules/selenium-webdriver/builder.js @@ -0,0 +1,513 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const chrome = require('./chrome'); +const edge = require('./edge'); +const executors = require('./executors'); +const firefox = require('./firefox'); +const ie = require('./ie'); +const capabilities = require('./lib/capabilities'); +const webdriver = require('./lib/webdriver'); +const promise = require('./lib/promise'); +const opera = require('./opera'); +const phantomjs = require('./phantomjs'); +const safari = require('./safari'); + +const Browser = capabilities.Browser; +const Capabilities = capabilities.Capabilities; +const Capability = capabilities.Capability; +const WebDriver = webdriver.WebDriver; + + + +var seleniumServer; + +/** + * Starts an instance of the Selenium server if not yet running. + * @param {string} jar Path to the server jar to use. + * @return {!promise.Promise} A promise for the server's + * addrss once started. + */ +function startSeleniumServer(jar) { + if (!seleniumServer) { + // Requiring 'chrome' above would create a cycle: + // index -> builder -> chrome -> index + var remote = require('./remote'); + seleniumServer = new remote.SeleniumServer(jar); + } + return seleniumServer.start(); +} + + +/** + * Creates new {@link webdriver.WebDriver WebDriver} instances. The environment + * variables listed below may be used to override a builder's configuration, + * allowing quick runtime changes. + * + * - {@code SELENIUM_BROWSER}: defines the target browser in the form + * {@code browser[:version][:platform]}. + * + * - {@code SELENIUM_REMOTE_URL}: defines the remote URL for all builder + * instances. This environment variable should be set to a fully qualified + * URL for a WebDriver server (e.g. http://localhost:4444/wd/hub). This + * option always takes precedence over {@code SELENIUM_SERVER_JAR}. + * + * - {@code SELENIUM_SERVER_JAR}: defines the path to the + * + * standalone Selenium server jar to use. The server will be started the + * first time a WebDriver instance and be killed when the process exits. + * + * Suppose you had mytest.js that created WebDriver with + * + * var driver = new webdriver.Builder() + * .forBrowser('chrome') + * .build(); + * + * This test could be made to use Firefox on the local machine by running with + * `SELENIUM_BROWSER=firefox node mytest.js`. Rather than change the code to + * target Google Chrome on a remote machine, you can simply set the + * `SELENIUM_BROWSER` and `SELENIUM_REMOTE_URL` environment variables: + * + * SELENIUM_BROWSER=chrome:36:LINUX \ + * SELENIUM_REMOTE_URL=http://www.example.com:4444/wd/hub \ + * node mytest.js + * + * You could also use a local copy of the standalone Selenium server: + * + * SELENIUM_BROWSER=chrome:36:LINUX \ + * SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar \ + * node mytest.js + */ +class Builder { + constructor() { + /** @private {promise.ControlFlow} */ + this.flow_ = null; + + /** @private {string} */ + this.url_ = ''; + + /** @private {?string} */ + this.proxy_ = null; + + /** @private {!Capabilities} */ + this.capabilities_ = new Capabilities(); + + /** @private {chrome.Options} */ + this.chromeOptions_ = null; + + /** @private {firefox.Options} */ + this.firefoxOptions_ = null; + + /** @private {opera.Options} */ + this.operaOptions_ = null; + + /** @private {ie.Options} */ + this.ieOptions_ = null; + + /** @private {safari.Options} */ + this.safariOptions_ = null; + + /** @private {edge.Options} */ + this.edgeOptions_ = null; + + /** @private {boolean} */ + this.ignoreEnv_ = false; + } + + /** + * Configures this builder to ignore any environment variable overrides and to + * only use the configuration specified through this instance's API. + * + * @return {!Builder} A self reference. + */ + disableEnvironmentOverrides() { + this.ignoreEnv_ = true; + return this; + } + + /** + * Sets the URL of a remote WebDriver server to use. Once a remote URL has + * been specified, the builder direct all new clients to that server. If this + * method is never called, the Builder will attempt to create all clients + * locally. + * + * As an alternative to this method, you may also set the + * `SELENIUM_REMOTE_URL` environment variable. + * + * @param {string} url The URL of a remote server to use. + * @return {!Builder} A self reference. + */ + usingServer(url) { + this.url_ = url; + return this; + } + + /** + * @return {string} The URL of the WebDriver server this instance is + * configured to use. + */ + getServerUrl() { + return this.url_; + } + + /** + * Sets the URL of the proxy to use for the WebDriver's HTTP connections. + * If this method is never called, the Builder will create a connection + * without a proxy. + * + * @param {string} proxy The URL of a proxy to use. + * @return {!Builder} A self reference. + */ + usingWebDriverProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * @return {?string} The URL of the proxy server to use for the WebDriver's + * HTTP connections, or `null` if not set. + */ + getWebDriverProxy() { + return this.proxy_; + } + + /** + * Sets the desired capabilities when requesting a new session. This will + * overwrite any previously set capabilities. + * @param {!(Object|Capabilities)} capabilities The desired capabilities for + * a new session. + * @return {!Builder} A self reference. + */ + withCapabilities(capabilities) { + this.capabilities_ = new Capabilities(capabilities); + return this; + } + + /** + * Returns the base set of capabilities this instance is currently configured + * to use. + * @return {!Capabilities} The current capabilities for this builder. + */ + getCapabilities() { + return this.capabilities_; + } + + /** + * Configures the target browser for clients created by this instance. + * Any calls to {@link #withCapabilities} after this function will + * overwrite these settings. + * + * You may also define the target browser using the {@code SELENIUM_BROWSER} + * environment variable. If set, this environment variable should be of the + * form `browser[:[version][:platform]]`. + * + * @param {(string|Browser)} name The name of the target browser; + * common defaults are available on the {@link webdriver.Browser} enum. + * @param {string=} opt_version A desired version; may be omitted if any + * version should be used. + * @param {string=} opt_platform The desired platform; may be omitted if any + * version may be used. + * @return {!Builder} A self reference. + */ + forBrowser(name, opt_version, opt_platform) { + this.capabilities_.set(Capability.BROWSER_NAME, name); + this.capabilities_.set(Capability.VERSION, opt_version || null); + this.capabilities_.set(Capability.PLATFORM, opt_platform || null); + return this; + } + + /** + * Sets the proxy configuration to use for WebDriver clients created by this + * builder. Any calls to {@link #withCapabilities} after this function will + * overwrite these settings. + * @param {!capabilities.ProxyConfig} config The configuration to use. + * @return {!Builder} A self reference. + */ + setProxy(config) { + this.capabilities_.setProxy(config); + return this; + } + + /** + * Sets the logging preferences for the created session. Preferences may be + * changed by repeated calls, or by calling {@link #withCapabilities}. + * @param {!(./lib/logging.Preferences|Object)} prefs The + * desired logging preferences. + * @return {!Builder} A self reference. + */ + setLoggingPrefs(prefs) { + this.capabilities_.setLoggingPrefs(prefs); + return this; + } + + /** + * Sets whether native events should be used. + * @param {boolean} enabled Whether to enable native events. + * @return {!Builder} A self reference. + */ + setEnableNativeEvents(enabled) { + this.capabilities_.setEnableNativeEvents(enabled); + return this; + } + + /** + * Sets how elements should be scrolled into view for interaction. + * @param {number} behavior The desired scroll behavior: either 0 to align + * with the top of the viewport or 1 to align with the bottom. + * @return {!Builder} A self reference. + */ + setScrollBehavior(behavior) { + this.capabilities_.setScrollBehavior(behavior); + return this; + } + + /** + * Sets the default action to take with an unexpected alert before returning + * an error. + * @param {string} behavior The desired behavior; should be "accept", + * "dismiss", or "ignore". Defaults to "dismiss". + * @return {!Builder} A self reference. + */ + setAlertBehavior(behavior) { + this.capabilities_.setAlertBehavior(behavior); + return this; + } + + /** + * Sets Chrome specific {@linkplain chrome.Options options} for drivers + * created by this builder. Any logging or proxy settings defined on the given + * options will take precedence over those set through + * {@link #setLoggingPrefs} and {@link #setProxy}, respectively. + * + * @param {!chrome.Options} options The ChromeDriver options to use. + * @return {!Builder} A self reference. + */ + setChromeOptions(options) { + this.chromeOptions_ = options; + return this; + } + + /** + * Sets Firefox specific {@linkplain firefox.Options options} for drivers + * created by this builder. Any logging or proxy settings defined on the given + * options will take precedence over those set through + * {@link #setLoggingPrefs} and {@link #setProxy}, respectively. + * + * @param {!firefox.Options} options The FirefoxDriver options to use. + * @return {!Builder} A self reference. + */ + setFirefoxOptions(options) { + this.firefoxOptions_ = options; + return this; + } + + /** + * Sets Opera specific {@linkplain opera.Options options} for drivers created + * by this builder. Any logging or proxy settings defined on the given options + * will take precedence over those set through {@link #setLoggingPrefs} and + * {@link #setProxy}, respectively. + * + * @param {!opera.Options} options The OperaDriver options to use. + * @return {!Builder} A self reference. + */ + setOperaOptions(options) { + this.operaOptions_ = options; + return this; + } + + /** + * Set Internet Explorer specific {@linkplain ie.Options options} for drivers + * created by this builder. Any proxy settings defined on the given options + * will take precedence over those set through {@link #setProxy}. + * + * @param {!ie.Options} options The IEDriver options to use. + * @return {!Builder} A self reference. + */ + setIeOptions(options) { + this.ieOptions_ = options; + return this; + } + + /** + * Set {@linkplain edge.Options options} specific to Microsoft's Edge browser + * for drivers created by this builder. Any proxy settings defined on the + * given options will take precedence over those set through + * {@link #setProxy}. + * + * @param {!edge.Options} options The MicrosoftEdgeDriver options to use. + * @return {!Builder} A self reference. + */ + setEdgeOptions(options) { + this.edgeOptions_ = options; + return this; + } + + /** + * Sets Safari specific {@linkplain safari.Options options} for drivers + * created by this builder. Any logging settings defined on the given options + * will take precedence over those set through {@link #setLoggingPrefs}. + * + * @param {!safari.Options} options The Safari options to use. + * @return {!Builder} A self reference. + */ + setSafariOptions(options) { + this.safariOptions_ = options; + return this; + } + + /** + * Sets the control flow that created drivers should execute actions in. If + * the flow is never set, or is set to {@code null}, it will use the active + * flow at the time {@link #build()} is called. + * @param {promise.ControlFlow} flow The control flow to use, or + * {@code null} to + * @return {!Builder} A self reference. + */ + setControlFlow(flow) { + this.flow_ = flow; + return this; + } + + /** + * Creates a new WebDriver client based on this builder's current + * configuration. + * + * While this method will immediately return a new WebDriver instance, any + * commands issued against it will be deferred until the associated browser + * has been fully initialized. Users may call {@link #buildAsync()} to obtain + * a promise that will not be fulfilled until the browser has been created + * (the difference is purely in style). + * + * @return {!webdriver.WebDriver} A new WebDriver instance. + * @throws {Error} If the current configuration is invalid. + * @see #buildAsync() + */ + build() { + // Create a copy for any changes we may need to make based on the current + // environment. + var capabilities = new Capabilities(this.capabilities_); + + var browser; + if (!this.ignoreEnv_ && process.env.SELENIUM_BROWSER) { + browser = process.env.SELENIUM_BROWSER.split(/:/, 3); + capabilities.set(Capability.BROWSER_NAME, browser[0]); + capabilities.set(Capability.VERSION, browser[1] || null); + capabilities.set(Capability.PLATFORM, browser[2] || null); + } + + browser = capabilities.get(Capability.BROWSER_NAME); + + if (typeof browser !== 'string') { + throw TypeError( + `Target browser must be a string, but is <${typeof browser}>;` + + ' did you forget to call forBrowser()?'); + } + + if (browser === 'ie') { + browser = Browser.INTERNET_EXPLORER; + } + + // Apply browser specific overrides. + if (browser === Browser.CHROME && this.chromeOptions_) { + capabilities.merge(this.chromeOptions_.toCapabilities()); + + } else if (browser === Browser.FIREFOX && this.firefoxOptions_) { + capabilities.merge(this.firefoxOptions_.toCapabilities()); + + } else if (browser === Browser.INTERNET_EXPLORER && this.ieOptions_) { + capabilities.merge(this.ieOptions_.toCapabilities()); + + } else if (browser === Browser.OPERA && this.operaOptions_) { + capabilities.merge(this.operaOptions_.toCapabilities()); + + } else if (browser === Browser.SAFARI && this.safariOptions_) { + capabilities.merge(this.safariOptions_.toCapabilities()); + + } else if (browser === Browser.EDGE && this.edgeOptions_) { + capabilities.merge(this.edgeOptions_.toCapabilities()); + } + + // Check for a remote browser. + var url = this.url_; + if (!this.ignoreEnv_) { + if (process.env.SELENIUM_REMOTE_URL) { + url = process.env.SELENIUM_REMOTE_URL; + } else if (process.env.SELENIUM_SERVER_JAR) { + url = startSeleniumServer(process.env.SELENIUM_SERVER_JAR); + } + } + + if (url) { + var executor = executors.createExecutor(url, this.proxy_); + return WebDriver.createSession(executor, capabilities, this.flow_); + } + + // Check for a native browser. + switch (browser) { + case Browser.CHROME: + return new chrome.Driver(capabilities, null, this.flow_); + + case Browser.FIREFOX: + return new firefox.Driver(capabilities, this.flow_); + + case Browser.INTERNET_EXPLORER: + return new ie.Driver(capabilities, this.flow_); + + case Browser.EDGE: + return new edge.Driver(capabilities, null, this.flow_); + + case Browser.OPERA: + return new opera.Driver(capabilities, null, this.flow_); + + case Browser.PHANTOM_JS: + return new phantomjs.Driver(capabilities, this.flow_); + + case Browser.SAFARI: + return new safari.Driver(capabilities, this.flow_); + + default: + throw new Error('Do not know how to build driver: ' + browser + + '; did you forget to call usingServer(url)?'); + } + } + + /** + * Creates a new WebDriver client based on this builder's current + * configuration. This method returns a promise that will not be fulfilled + * until the new browser session has been fully initialized. + * + * __Note:__ this method is purely a convenience wrapper around + * {@link #build()}. + * + * @return {!promise.Promise} A promise that will be + * fulfilled with the newly created WebDriver instance once the browser + * has been fully initialized. + * @see #build() + */ + buildAsync() { + let driver = this.build(); + return driver.getSession().then(() => driver); + } +} + + +// PUBLIC API + + +exports.Builder = Builder; diff --git a/www/node_modules/selenium-webdriver/chrome.js b/www/node_modules/selenium-webdriver/chrome.js new file mode 100644 index 0000000..2731d90 --- /dev/null +++ b/www/node_modules/selenium-webdriver/chrome.js @@ -0,0 +1,811 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for the Chrome + * web browser. Before using this module, you must download the latest + * [ChromeDriver release] and ensure it can be found on your system [PATH]. + * + * There are three primary classes exported by this module: + * + * 1. {@linkplain ServiceBuilder}: configures the + * {@link selenium-webdriver/remote.DriverService remote.DriverService} + * that manages the [ChromeDriver] child process. + * + * 2. {@linkplain Options}: defines configuration options for each new Chrome + * session, such as which {@linkplain Options#setProxy proxy} to use, + * what {@linkplain Options#addExtensions extensions} to install, or + * what {@linkplain Options#addArguments command-line switches} to use when + * starting the browser. + * + * 3. {@linkplain Driver}: the WebDriver client; each new instance will control + * a unique browser session with a clean user profile (unless otherwise + * configured through the {@link Options} class). + * + * __Customizing the ChromeDriver Server__ + * + * By default, every Chrome session will use a single driver service, which is + * started the first time a {@link Driver} instance is created and terminated + * when this process exits. The default service will inherit its environment + * from the current process and direct all output to /dev/null. You may obtain + * a handle to this default service using + * {@link #getDefaultService getDefaultService()} and change its configuration + * with {@link #setDefaultService setDefaultService()}. + * + * You may also create a {@link Driver} with its own driver service. This is + * useful if you need to capture the server's log output for a specific session: + * + * let chrome = require('selenium-webdriver/chrome'); + * + * let service = new chrome.ServiceBuilder() + * .loggingTo('/my/log/file.txt') + * .enableVerboseLogging() + * .build(); + * + * let options = new chrome.Options(); + * // configure browser options ... + * + * let driver = new chrome.Driver(options, service); + * + * Users should only instantiate the {@link Driver} class directly when they + * need a custom driver service configuration (as shown above). For normal + * operation, users should start Chrome using the + * {@link selenium-webdriver.Builder}. + * + * __Working with Android__ + * + * The [ChromeDriver][android] supports running tests on the Chrome browser as + * well as [WebView apps][webview] starting in Android 4.4 (KitKat). In order to + * work with Android, you must first start the adb + * + * adb start-server + * + * By default, adb will start on port 5037. You may change this port, but this + * will require configuring a [custom server](#custom-server) that will connect + * to adb on the {@linkplain ServiceBuilder#setAdbPort correct port}: + * + * let service = new chrome.ServiceBuilder() + * .setAdbPort(1234) + * build(); + * // etc. + * + * The ChromeDriver may be configured to launch Chrome on Android using + * {@link Options#androidChrome()}: + * + * let driver = new Builder() + * .forBrowser('chrome') + * .setChromeOptions(new chrome.Options().androidChrome()) + * .build(); + * + * Alternatively, you can configure the ChromeDriver to launch an app with a + * Chrome-WebView by setting the {@linkplain Options#androidActivity + * androidActivity} option: + * + * let driver = new Builder() + * .forBrowser('chrome') + * .setChromeOptions(new chrome.Options() + * .androidPackage('com.example') + * .androidActivity('com.example.Activity')) + * .build(); + * + * [Refer to the ChromeDriver site] for more information on using the + * [ChromeDriver with Android][android]. + * + * [ChromeDriver]: https://sites.google.com/a/chromium.org/chromedriver/ + * [ChromeDriver release]: http://chromedriver.storage.googleapis.com/index.html + * [PATH]: http://en.wikipedia.org/wiki/PATH_%28variable%29 + * [android]: https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android + * [webview]: https://developer.chrome.com/multidevice/webview/overview + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const executors = require('./executors'), + http = require('./http'), + io = require('./io'), + Capabilities = require('./lib/capabilities').Capabilities, + Capability = require('./lib/capabilities').Capability, + command = require('./lib/command'), + logging = require('./lib/logging'), + promise = require('./lib/promise'), + Symbols = require('./lib/symbols'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +/** + * Name of the ChromeDriver executable. + * @type {string} + * @const + */ +const CHROMEDRIVER_EXE = + process.platform === 'win32' ? 'chromedriver.exe' : 'chromedriver'; + + +/** + * Custom command names supported by ChromeDriver. + * @enum {string} + */ +const Command = { + LAUNCH_APP: 'launchApp' +}; + + +/** + * Creates a command executor with support for ChromeDriver's custom commands. + * @param {!promise.Promise} url The server's URL. + * @return {!command.Executor} The new command executor. + */ +function createExecutor(url) { + return new executors.DeferredExecutor(url.then(function(url) { + let client = new http.HttpClient(url); + let executor = new http.Executor(client); + executor.defineCommand( + Command.LAUNCH_APP, + 'POST', '/session/:sessionId/chromium/launch_app'); + return executor; + })); +} + + +/** + * Creates {@link selenium-webdriver/remote.DriverService} instances that manage + * a [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) + * server in a child process. + */ +class ServiceBuilder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the chromedriver on the current + * PATH. + * @throws {Error} If provided executable does not exist, or the chromedriver + * cannot be found on the PATH. + */ + constructor(opt_exe) { + let exe = opt_exe || io.findInPath(CHROMEDRIVER_EXE, true); + if (!exe) { + throw Error( + 'The ChromeDriver could not be found on the current PATH. Please ' + + 'download the latest version of the ChromeDriver from ' + + 'http://chromedriver.storage.googleapis.com/index.html and ensure ' + + 'it can be found on your PATH.'); + } + + if (!fs.existsSync(exe)) { + throw Error('File does not exist: ' + exe); + } + /** @private {string} */ + this.exe_ = exe; + + /** @private {!Array} */ + this.args_ = []; + + /** + * @private {(string|!Array)} + */ + this.stdio_ = 'ignore'; + + /** @private {?string} */ + this.path_ = null; + + /** @private {number} */ + this.port_ = 0; + + /** @private {Object} */ + this.env_ = null; + } + + /** + * Sets the port to start the ChromeDriver on. + * @param {number} port The port to use, or 0 for any free port. + * @return {!ServiceBuilder} A self reference. + * @throws {Error} If the port is invalid. + */ + usingPort(port) { + if (port < 0) { + throw Error('port must be >= 0: ' + port); + } + this.port_ = port; + return this; + } + + /** + * Sets which port adb is listening to. _The ChromeDriver will connect to adb + * if an {@linkplain Options#androidPackage Android session} is requested, but + * adb **must** be started beforehand._ + * + * @param {number} port Which port adb is running on. + * @return {!ServiceBuilder} A self reference. + */ + setAdbPort(port) { + this.args_.push('--adb-port=' + port); + return this; + } + + /** + * Sets the path of the log file the driver should log to. If a log file is + * not specified, the driver will log to stderr. + * @param {string} path Path of the log file to use. + * @return {!ServiceBuilder} A self reference. + */ + loggingTo(path) { + this.args_.push('--log-path=' + path); + return this; + } + + /** + * Enables verbose logging. + * @return {!ServiceBuilder} A self reference. + */ + enableVerboseLogging() { + this.args_.push('--verbose'); + return this; + } + + /** + * Sets the number of threads the driver should use to manage HTTP requests. + * By default, the driver will use 4 threads. + * @param {number} n The number of threads to use. + * @return {!ServiceBuilder} A self reference. + */ + setNumHttpThreads(n) { + this.args_.push('--http-threads=' + n); + return this; + } + + /** + * Sets the base path for WebDriver REST commands (e.g. "/wd/hub"). + * By default, the driver will accept commands relative to "/". + * @param {string} path The base path to use. + * @return {!ServiceBuilder} A self reference. + */ + setUrlBasePath(path) { + this.args_.push('--url-base=' + path); + this.path_ = path; + return this; + } + + /** + * Defines the stdio configuration for the driver service. See + * {@code child_process.spawn} for more information. + * @param {(string|!Array)} + * config The configuration to use. + * @return {!ServiceBuilder} A self reference. + */ + setStdio(config) { + this.stdio_ = config; + return this; + } + + /** + * Defines the environment to start the server under. This settings will be + * inherited by every browser session started by the server. + * @param {!Object} env The environment to use. + * @return {!ServiceBuilder} A self reference. + */ + withEnvironment(env) { + this.env_ = env; + return this; + } + + /** + * Creates a new DriverService using this instance's current configuration. + * @return {!remote.DriverService} A new driver service using this instance's + * current configuration. + * @throws {Error} If the driver exectuable was not specified and a default + * could not be found on the current PATH. + */ + build() { + let port = this.port_ || portprober.findFreePort(); + let args = this.args_.concat(); // Defensive copy. + + return new remote.DriverService(this.exe_, { + loopback: true, + path: this.path_, + port: port, + args: promise.when(port, function(port) { + return args.concat('--port=' + port); + }), + env: this.env_, + stdio: this.stdio_ + }); + } +} + + + +/** @type {remote.DriverService} */ +let defaultService = null; + + +/** + * Sets the default service to use for new ChromeDriver instances. + * @param {!remote.DriverService} service The service to use. + * @throws {Error} If the default service is currently running. + */ +function setDefaultService(service) { + if (defaultService && defaultService.isRunning()) { + throw Error( + 'The previously configured ChromeDriver service is still running. ' + + 'You must shut it down before you may adjust its configuration.'); + } + defaultService = service; +} + + +/** + * Returns the default ChromeDriver service. If such a service has not been + * configured, one will be constructed using the default configuration for + * a ChromeDriver executable found on the system PATH. + * @return {!remote.DriverService} The default ChromeDriver service. + */ +function getDefaultService() { + if (!defaultService) { + defaultService = new ServiceBuilder().build(); + } + return defaultService; +} + + +/** + * @type {string} + * @const + */ +let OPTIONS_CAPABILITY_KEY = 'chromeOptions'; + + +/** + * Class for managing ChromeDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object} */ + this.options_ = {}; + + /** @private {!Array<(string|!Buffer)>} */ + this.extensions_ = []; + + /** @private {?logging.Preferences} */ + this.logPrefs_ = null; + + /** @private {?./lib/capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Extracts the ChromeDriver specific options from the given capabilities + * object. + * @param {!Capabilities} caps The capabilities object. + * @return {!Options} The ChromeDriver options. + */ + static fromCapabilities(caps) { + let options = new Options(); + + let o = caps.get(OPTIONS_CAPABILITY_KEY); + if (o instanceof Options) { + options = o; + } else if (o) { + options. + addArguments(o.args || []). + addExtensions(o.extensions || []). + detachDriver(o.detach). + excludeSwitches(o.excludeSwitches || []). + setChromeBinaryPath(o.binary). + setChromeLogFile(o.logPath). + setChromeMinidumpPath(o.minidumpPath). + setLocalState(o.localState). + setMobileEmulation(o.mobileEmulation). + setUserPreferences(o.prefs). + setPerfLoggingPrefs(o.perfLoggingPrefs); + } + + if (caps.has(Capability.PROXY)) { + options.setProxy(caps.get(Capability.PROXY)); + } + + if (caps.has(Capability.LOGGING_PREFS)) { + options.setLoggingPrefs( + caps.get(Capability.LOGGING_PREFS)); + } + + return options; + } + + /** + * Add additional command line arguments to use when launching the Chrome + * browser. Each argument may be specified with or without the "--" prefix + * (e.g. "--foo" and "foo"). Arguments with an associated value should be + * delimited by an "=": "foo=bar". + * @param {...(string|!Array)} var_args The arguments to add. + * @return {!Options} A self reference. + */ + addArguments(var_args) { + let args = this.options_.args || []; + args = args.concat.apply(args, arguments); + if (args.length) { + this.options_.args = args; + } + return this; + } + + /** + * List of Chrome command line switches to exclude that ChromeDriver by default + * passes when starting Chrome. Do not prefix switches with "--". + * + * @param {...(string|!Array)} var_args The switches to exclude. + * @return {!Options} A self reference. + */ + excludeSwitches(var_args) { + let switches = this.options_.excludeSwitches || []; + switches = switches.concat.apply(switches, arguments); + if (switches.length) { + this.options_.excludeSwitches = switches; + } + return this; + } + + /** + * Add additional extensions to install when launching Chrome. Each extension + * should be specified as the path to the packed CRX file, or a Buffer for an + * extension. + * @param {...(string|!Buffer|!Array<(string|!Buffer)>)} var_args The + * extensions to add. + * @return {!Options} A self reference. + */ + addExtensions(var_args) { + this.extensions_ = + this.extensions_.concat.apply(this.extensions_, arguments); + return this; + } + + /** + * Sets the path to the Chrome binary to use. On Mac OS X, this path should + * reference the actual Chrome executable, not just the application binary + * (e.g. "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"). + * + * The binary path be absolute or relative to the chromedriver server + * executable, but it must exist on the machine that will launch Chrome. + * + * @param {string} path The path to the Chrome binary to use. + * @return {!Options} A self reference. + */ + setChromeBinaryPath(path) { + this.options_.binary = path; + return this; + } + + /** + * Sets whether to leave the started Chrome browser running if the controlling + * ChromeDriver service is killed before {@link webdriver.WebDriver#quit()} is + * called. + * @param {boolean} detach Whether to leave the browser running if the + * chromedriver service is killed before the session. + * @return {!Options} A self reference. + */ + detachDriver(detach) { + this.options_.detach = detach; + return this; + } + + /** + * Sets the user preferences for Chrome's user profile. See the "Preferences" + * file in Chrome's user data directory for examples. + * @param {!Object} prefs Dictionary of user preferences to use. + * @return {!Options} A self reference. + */ + setUserPreferences(prefs) { + this.options_.prefs = prefs; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {!logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPrefs(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Sets the performance logging preferences. Options include: + * + * - `enableNetwork`: Whether or not to collect events from Network domain. + * - `enablePage`: Whether or not to collect events from Page domain. + * - `enableTimeline`: Whether or not to collect events from Timeline domain. + * Note: when tracing is enabled, Timeline domain is implicitly disabled, + * unless `enableTimeline` is explicitly set to true. + * - `tracingCategories`: A comma-separated string of Chrome tracing + * categories for which trace events should be collected. An unspecified + * or empty string disables tracing. + * - `bufferUsageReportingInterval`: The requested number of milliseconds + * between DevTools trace buffer usage events. For example, if 1000, then + * once per second, DevTools will report how full the trace buffer is. If + * a report indicates the buffer usage is 100%, a warning will be issued. + * + * @param {{enableNetwork: boolean, + * enablePage: boolean, + * enableTimeline: boolean, + * tracingCategories: string, + * bufferUsageReportingInterval: number}} prefs The performance + * logging preferences. + * @return {!Options} A self reference. + */ + setPerfLoggingPrefs(prefs) { + this.options_.perfLoggingPrefs = prefs; + return this; + } + + /** + * Sets preferences for the "Local State" file in Chrome's user data + * directory. + * @param {!Object} state Dictionary of local state preferences. + * @return {!Options} A self reference. + */ + setLocalState(state) { + this.options_.localState = state; + return this; + } + + /** + * Sets the name of the activity hosting a Chrome-based Android WebView. This + * option must be set to connect to an [Android WebView]( + * https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android) + * + * @param {string} name The activity name. + * @return {!Options} A self reference. + */ + androidActivity(name) { + this.options_.androidActivity = name; + return this; + } + + /** + * Sets the device serial number to connect to via ADB. If not specified, the + * ChromeDriver will select an unused device at random. An error will be + * returned if all devices already have active sessions. + * + * @param {string} serial The device serial number to connect to. + * @return {!Options} A self reference. + */ + androidDeviceSerial(serial) { + this.options_.androidDeviceSerial = serial; + return this; + } + + /** + * Configures the ChromeDriver to launch Chrome on Android via adb. This + * function is shorthand for + * {@link #androidPackage options.androidPackage('com.android.chrome')}. + * @return {!Options} A self reference. + */ + androidChrome() { + return this.androidPackage('com.android.chrome'); + } + + /** + * Sets the package name of the Chrome or WebView app. + * + * @param {?string} pkg The package to connect to, or `null` to disable Android + * and switch back to using desktop Chrome. + * @return {!Options} A self reference. + */ + androidPackage(pkg) { + this.options_.androidPackage = pkg; + return this; + } + + /** + * Sets the process name of the Activity hosting the WebView (as given by + * `ps`). If not specified, the process name is assumed to be the same as + * {@link #androidPackage}. + * + * @param {string} processName The main activity name. + * @return {!Options} A self reference. + */ + androidProcess(processName) { + this.options_.androidProcess = processName; + return this; + } + + /** + * Sets whether to connect to an already-running instead of the specified + * {@linkplain #androidProcess app} instead of launching the app with a clean + * data directory. + * + * @param {boolean} useRunning Whether to connect to a running instance. + * @return {!Options} A self reference. + */ + androidUseRunningApp(useRunning) { + this.options_.androidUseRunningApp = useRunning; + return this; + } + + /** + * Sets the path to Chrome's log file. This path should exist on the machine + * that will launch Chrome. + * @param {string} path Path to the log file to use. + * @return {!Options} A self reference. + */ + setChromeLogFile(path) { + this.options_.logPath = path; + return this; + } + + /** + * Sets the directory to store Chrome minidumps in. This option is only + * supported when ChromeDriver is running on Linux. + * @param {string} path The directory path. + * @return {!Options} A self reference. + */ + setChromeMinidumpPath(path) { + this.options_.minidumpPath = path; + return this; + } + + /** + * Configures Chrome to emulate a mobile device. For more information, refer + * to the ChromeDriver project page on [mobile emulation][em]. Configuration + * options include: + * + * - `deviceName`: The name of a pre-configured [emulated device][devem] + * - `width`: screen width, in pixels + * - `height`: screen height, in pixels + * - `pixelRatio`: screen pixel ratio + * + * __Example 1: Using a Pre-configured Device__ + * + * let options = new chrome.Options().setMobileEmulation( + * {deviceName: 'Google Nexus 5'}); + * + * let driver = new chrome.Driver(options); + * + * __Example 2: Using Custom Screen Configuration__ + * + * let options = new chrome.Options().setMobileEmulation({ + * width: 360, + * height: 640, + * pixelRatio: 3.0 + * }); + * + * let driver = new chrome.Driver(options); + * + * + * [em]: https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation + * [devem]: https://developer.chrome.com/devtools/docs/device-mode + * + * @param {?({deviceName: string}| + * {width: number, height: number, pixelRatio: number})} config The + * mobile emulation configuration, or `null` to disable emulation. + * @return {!Options} A self reference. + */ + setMobileEmulation(config) { + this.options_.mobileEmulation = config; + return this; + } + + /** + * Sets the proxy settings for the new session. + * @param {./lib/capabilities.ProxyConfig} proxy The proxy configuration to + * use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts this options instance to a {@link Capabilities} object. + * @param {Capabilities=} opt_capabilities The capabilities to merge + * these options into, if any. + * @return {!Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + let caps = opt_capabilities || Capabilities.chrome(); + caps. + set(Capability.PROXY, this.proxy_). + set(Capability.LOGGING_PREFS, this.logPrefs_). + set(OPTIONS_CAPABILITY_KEY, this); + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation not intended for general use. + * @return {!Object} The JSON wire protocol representation of this instance. + */ + [Symbols.serialize]() { + let json = {}; + for (let key in this.options_) { + if (this.options_[key] != null) { + json[key] = this.options_[key]; + } + } + if (this.extensions_.length) { + json.extensions = this.extensions_.map(function(extension) { + if (Buffer.isBuffer(extension)) { + return extension.toString('base64'); + } + return promise.checkedNodeCall( + fs.readFile, extension, 'base64'); + }); + } + return json; + } +} + + +/** + * Creates a new WebDriver client for Chrome. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(Capabilities|Options)=} opt_config The configuration + * options. + * @param {remote.DriverService=} opt_service The session to use; will use + * the {@linkplain #getDefaultService default service} by default. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_service, opt_flow) { + let service = opt_service || getDefaultService(); + let executor = createExecutor(service.start()); + + let caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || Capabilities.chrome()); + + let driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, driver.controlFlow()); + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} + + /** + * Schedules a command to launch Chrome App with given ID. + * @param {string} id ID of the App to launch. + * @return {!promise.Promise} A promise that will be resolved + * when app is launched. + */ + launchApp(id) { + return this.schedule( + new command.Command(Command.LAUNCH_APP).setParameter('id', id), + 'Driver.launchApp()'); + } +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.ServiceBuilder = ServiceBuilder; +exports.getDefaultService = getDefaultService; +exports.setDefaultService = setDefaultService; diff --git a/www/node_modules/selenium-webdriver/edge.js b/www/node_modules/selenium-webdriver/edge.js new file mode 100644 index 0000000..676637a --- /dev/null +++ b/www/node_modules/selenium-webdriver/edge.js @@ -0,0 +1,378 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for + * Microsoft's Edge web browser. Before using this module, + * you must download and install the latest + * [MicrosoftEdgeDriver](http://go.microsoft.com/fwlink/?LinkId=619687) server. + * Ensure that the MicrosoftEdgeDriver is on your + * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). + * + * There are three primary classes exported by this module: + * + * 1. {@linkplain ServiceBuilder}: configures the + * {@link ./remote.DriverService remote.DriverService} + * that manages the [MicrosoftEdgeDriver] child process. + * + * 2. {@linkplain Options}: defines configuration options for each new + * MicrosoftEdgeDriver session, such as which + * {@linkplain Options#setProxy proxy} to use when starting the browser. + * + * 3. {@linkplain Driver}: the WebDriver client; each new instance will control + * a unique browser session. + * + * __Customizing the MicrosoftEdgeDriver Server__ + * + * By default, every MicrosoftEdge session will use a single driver service, + * which is started the first time a {@link Driver} instance is created and + * terminated when this process exits. The default service will inherit its + * environment from the current process. + * You may obtain a handle to this default service using + * {@link #getDefaultService getDefaultService()} and change its configuration + * with {@link #setDefaultService setDefaultService()}. + * + * You may also create a {@link Driver} with its own driver service. This is + * useful if you need to capture the server's log output for a specific session: + * + * var edge = require('selenium-webdriver/edge'); + * + * var service = new edge.ServiceBuilder() + * .usingPort(55555) + * .build(); + * + * var options = new edge.Options(); + * // configure browser options ... + * + * var driver = new edge.Driver(options, service); + * + * Users should only instantiate the {@link Driver} class directly when they + * need a custom driver service configuration (as shown above). For normal + * operation, users should start MicrosoftEdge using the + * {@link ./builder.Builder selenium-webdriver.Builder}. + * + * [MicrosoftEdgeDriver]: https://msdn.microsoft.com/en-us/library/mt188085(v=vs.85).aspx + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const executors = require('./executors'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + promise = require('./lib/promise'), + Symbols = require('./lib/symbols'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + +const EDGEDRIVER_EXE = 'MicrosoftWebDriver.exe'; + + +/** + * Option keys. + * @enum {string} + */ +const CAPABILITY_KEY = { + PAGE_LOAD_STRATEGY: 'pageLoadStrategy' +}; + + +/** + * Class for managing MicrosoftEdgeDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object} */ + this.options_ = {}; + + /** @private {?capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Extracts the MicrosoftEdgeDriver specific options from the given + * capabilities object. + * @param {!capabilities.Capabilities} caps The capabilities object. + * @return {!Options} The MicrosoftEdgeDriver options. + */ + static fromCapabilities(caps) { + var options = new Options(); + var map = options.options_; + + Object.keys(CAPABILITY_KEY).forEach(function(key) { + key = CAPABILITY_KEY[key]; + if (caps.has(key)) { + map[key] = caps.get(key); + } + }); + + if (caps.has(capabilities.Capability.PROXY)) { + options.setProxy(caps.get(capabilities.Capability.PROXY)); + } + + return options; + } + + /** + * Sets the proxy settings for the new session. + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Sets the page load strategy for Edge. + * Supported values are "normal", "eager", and "none"; + * + * @param {string} pageLoadStrategy The page load strategy to use. + * @return {!Options} A self reference. + */ + setPageLoadStrategy(pageLoadStrategy) { + this.options_[CAPABILITY_KEY.PAGE_LOAD_STRATEGY] = + pageLoadStrategy.toLowerCase(); + return this; + } + + /** + * Converts this options instance to a {@link capabilities.Capabilities} + * object. + * @param {capabilities.Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!capabilities.Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || capabilities.Capabilities.edge(); + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + Object.keys(this.options_).forEach(function(key) { + caps.set(key, this.options_[key]); + }, this); + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation not intended for general use. + * @return {{pageLoadStrategy: (string|undefined)}} + * The JSON wire protocol representation of this instance. + */ + [Symbols.serialize]() { + var json = {}; + for (var key in this.options_) { + if (this.options_[key] != null) { + json[key] = this.options_[key]; + } + } + return json; + } +} + + +/** + * Creates {@link remote.DriverService} instances that manage a + * MicrosoftEdgeDriver server in a child process. + */ +class ServiceBuilder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the MicrosoftEdgeDriver on the current + * PATH. + * @throws {Error} If provided executable does not exist, or the + * MicrosoftEdgeDriver cannot be found on the PATH. + */ + constructor(opt_exe) { + let exe = opt_exe || io.findInPath(EDGEDRIVER_EXE, true); + if (!exe) { + throw Error( + 'The ' + EDGEDRIVER_EXE + ' could not be found on the current PATH. ' + + 'Please download the latest version of the MicrosoftEdgeDriver from ' + + 'https://www.microsoft.com/en-us/download/details.aspx?id=48212 and ' + + 'ensure it can be found on your PATH.'); + } else if (!fs.existsSync(exe)) { + throw Error('File does not exist: ' + exe); + } + + /** @private {string} */ + this.exe_ = /** @type {string} */(exe); + + /** @private {!Array.} */ + this.args_ = []; + + /** @private {number} */ + this.port_ = 0; + + /** + * @private {(string|!Array.)} + */ + this.stdio_ = 'ignore'; + + /** @private {Object.} */ + this.env_ = null; + } + + /** + * Defines the stdio configuration for the driver service. See + * {@code child_process.spawn} for more information. + * @param {(string|!Array.)} + * config The configuration to use. + * @return {!ServiceBuilder} A self reference. + */ + setStdio(config) { + this.stdio_ = config; + return this; + } + + /** + * Sets the port to start the MicrosoftEdgeDriver on. + * @param {number} port The port to use, or 0 for any free port. + * @return {!ServiceBuilder} A self reference. + * @throws {Error} If the port is invalid. + */ + usingPort(port) { + if (port < 0) { + throw Error('port must be >= 0: ' + port); + } + this.port_ = port; + return this; + } + + /** + * Defines the environment to start the server under. This settings will be + * inherited by every browser session started by the server. + * @param {!Object.} env The environment to use. + * @return {!ServiceBuilder} A self reference. + */ + withEnvironment(env) { + this.env_ = env; + return this; + } + + /** + * Creates a new DriverService using this instance's current configuration. + * @return {!remote.DriverService} A new driver service using this instance's + * current configuration. + * @throws {Error} If the driver exectuable was not specified and a default + * could not be found on the current PATH. + */ + build() { + var port = this.port_ || portprober.findFreePort(); + var args = this.args_.concat(); // Defensive copy. + + return new remote.DriverService(this.exe_, { + // Binding to the loopback address will fail if not running with + // administrator privileges. Since we cannot test for that in script + // (or can we?), force the DriverService to use "localhost". + hostname: 'localhost', + port: port, + args: promise.fulfilled(port).then(function(port) { + return args.concat('--port=' + port); + }), + env: this.env_, + stdio: this.stdio_ + }); + } +} + + +/** @type {remote.DriverService} */ +var defaultService = null; + + +/** + * Sets the default service to use for new MicrosoftEdgeDriver instances. + * @param {!remote.DriverService} service The service to use. + * @throws {Error} If the default service is currently running. + */ +function setDefaultService(service) { + if (defaultService && defaultService.isRunning()) { + throw Error( + 'The previously configured EdgeDriver service is still running. ' + + 'You must shut it down before you may adjust its configuration.'); + } + defaultService = service; +} + + +/** + * Returns the default MicrosoftEdgeDriver service. If such a service has + * not been configured, one will be constructed using the default configuration + * for an MicrosoftEdgeDriver executable found on the system PATH. + * @return {!remote.DriverService} The default MicrosoftEdgeDriver service. + */ +function getDefaultService() { + if (!defaultService) { + defaultService = new ServiceBuilder().build(); + } + return defaultService; +} + + +/** + * Creates a new WebDriver client for Microsoft's Edge. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(capabilities.Capabilities|Options)=} opt_config The configuration + * options. + * @param {remote.DriverService=} opt_service The session to use; will use + * the {@linkplain #getDefaultService default service} by default. + * @param {promise.ControlFlow=} opt_flow The control flow to use, or + * {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_service, opt_flow) { + var service = opt_service || getDefaultService(); + var executor = executors.createExecutor(service.start()); + + var caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || capabilities.Capabilities.edge()); + + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + super(driver.getSession(), executor, driver.controlFlow()); + + var boundQuit = this.quit.bind(this); + + /** @override */ + this.quit = function() { + return boundQuit().thenFinally(service.kill.bind(service)); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.ServiceBuilder = ServiceBuilder; +exports.getDefaultService = getDefaultService; +exports.setDefaultService = setDefaultService; diff --git a/www/node_modules/selenium-webdriver/error.js b/www/node_modules/selenium-webdriver/error.js new file mode 100644 index 0000000..32af633 --- /dev/null +++ b/www/node_modules/selenium-webdriver/error.js @@ -0,0 +1,619 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * The base WebDriver error type. This error type is only used directly when a + * more appropriate category is not defined for the offending error. + */ +class WebDriverError extends Error { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + + /** @override */ + this.name = this.constructor.name; + } + + /** + * @return {number} the legacy numeric code for this class of error. + * @deprecated + */ + static get code() { + return ErrorCode.UNKNOWN_ERROR; + } + + /** + * @return {number} the legacy numeric code for this class of error. + * @deprecated + */ + get code() { + return this.constructor.code; + } +} + + +/** + * An attempt was made to select an element that cannot be selected. + */ +class ElementNotSelectableError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.ELEMENT_NOT_SELECTABLE; + } +} + + +/** + * An element command could not be completed because the element is not visible + * on the page. + */ +class ElementNotVisibleError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.ELEMENT_NOT_VISIBLE; + } +} + + +/** + * The arguments passed to a command are either invalid or malformed. + */ +class InvalidArgumentError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An illegal attempt was made to set a cookie under a different domain than + * the current page. + */ +class InvalidCookieDomainError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.INVALID_COOKIE_DOMAIN; + } +} + + +/** + * The coordinates provided to an interactions operation are invalid. + */ +class InvalidElementCoordinatesError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.INVALID_ELEMENT_COORDINATES; + } +} + + +/** + * An element command could not be completed because the element is in an + * invalid state, e.g. attempting to click an element that is no longer attached + * to the document. + */ +class InvalidElementStateError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.INVALID_ELEMENT_STATE; + } +} + + +/** + * Argument was an invalid selector. + */ +class InvalidSelectorError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.INVALID_SELECTOR_ERROR; + } +} + + +/** + * Occurs if the given session id is not in the list of active sessions, meaning + * the session either does not exist or that it’s not active. + */ +class InvalidSessionIdError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An error occurred while executing JavaScript supplied by the user. + */ +class JavascriptError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.JAVASCRIPT_ERROR; + } +} + + +/** + * The target for mouse interaction is not in the browser’s viewport and cannot + * be brought into that viewport. + */ +class MoveTargetOutOfBoundsError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS; + } +} + + +/** + * An attempt was made to operate on a modal dialog when one was not open. + */ +class NoSuchAlertError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.NO_SUCH_ALERT; + } +} + + +/** + * An element could not be located on the page using the given search + * parameters. + */ +class NoSuchElementError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.NO_SUCH_ELEMENT; + } +} + + +/** + * A request to switch to a frame could not be satisfied because the frame + * could not be found. + */ +class NoSuchFrameError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.NO_SUCH_FRAME; + } +} + + +/** + * A request to switch to a window could not be satisfied because the window + * could not be found. + */ +class NoSuchWindowError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.NO_SUCH_WINDOW; + } +} + + +/** + * A script did not complete before its timeout expired. + */ +class ScriptTimeoutError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.SCRIPT_TIMEOUT; + } +} + + +/** + * A new session could not be created. + */ +class SessionNotCreatedError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.SESSION_NOT_CREATED; + } +} + + + +/** + * An element command failed because the referenced element is no longer + * attached to the DOM. + */ +class StaleElementReferenceError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.STALE_ELEMENT_REFERENCE; + } +} + + +/** + * An operation did not complete before its timeout expired. + */ +class TimeoutError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.TIMEOUT; + } +} + + +/** + * A request to set a cookie’s value could not be satisfied. + */ +class UnableToSetCookieError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.UNABLE_TO_SET_COOKIE; + } +} + + +/** + * A screen capture operation was not possible. + */ +class UnableToCaptureScreenError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A modal dialog was open, blocking this operation. + */ +class UnexpectedAlertOpenError extends WebDriverError { + /** + * @param {string=} opt_error the error message, if any. + * @param {string=} opt_text the text of the open dialog, if available. + */ + constructor(opt_error, opt_text) { + super(opt_error); + + /** @private {(string|undefined)} */ + this.text_ = opt_text; + } + + /** @override */ + static get code() { + return ErrorCode.UNEXPECTED_ALERT_OPEN; + } + + /** + * @return {(string|undefined)} The text displayed with the unhandled alert, + * if available. + */ + getAlertText() { + return this.text_; + } +} + + +/** + * A command could not be executed because the remote end is not aware of it. + */ +class UnknownCommandError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.UNSUPPORTED_OPERATION; + } +} + + +/** + * The requested command matched a known URL but did not match an method for + * that URL. + */ +class UnknownMethodError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.UNSUPPORTED_OPERATION; + } +} + + +/** + * Reports an unsupport operation. + */ +class UnsupportedOperationError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.UNSUPPORTED_OPERATION; + } +} + +// TODO(jleyba): Define UnknownError as an alias of WebDriverError? + + +/** + * Enum of legacy error codes. + * TODO: remove this when all code paths have been switched to the new error + * types. + * @deprecated + * @enum {number} + */ +const ErrorCode = { + SUCCESS: 0, + NO_SUCH_ELEMENT: 7, + NO_SUCH_FRAME: 8, + UNKNOWN_COMMAND: 9, + UNSUPPORTED_OPERATION: 9, + STALE_ELEMENT_REFERENCE: 10, + ELEMENT_NOT_VISIBLE: 11, + INVALID_ELEMENT_STATE: 12, + UNKNOWN_ERROR: 13, + ELEMENT_NOT_SELECTABLE: 15, + JAVASCRIPT_ERROR: 17, + XPATH_LOOKUP_ERROR: 19, + TIMEOUT: 21, + NO_SUCH_WINDOW: 23, + INVALID_COOKIE_DOMAIN: 24, + UNABLE_TO_SET_COOKIE: 25, + UNEXPECTED_ALERT_OPEN: 26, + NO_SUCH_ALERT: 27, + SCRIPT_TIMEOUT: 28, + INVALID_ELEMENT_COORDINATES: 29, + IME_NOT_AVAILABLE: 30, + IME_ENGINE_ACTIVATION_FAILED: 31, + INVALID_SELECTOR_ERROR: 32, + SESSION_NOT_CREATED: 33, + MOVE_TARGET_OUT_OF_BOUNDS: 34, + SQL_DATABASE_ERROR: 35, + INVALID_XPATH_SELECTOR: 51, + INVALID_XPATH_SELECTOR_RETURN_TYPE: 52, + METHOD_NOT_ALLOWED: 405 +}; + + +const LEGACY_ERROR_CODE_TO_TYPE = new Map([ + [ErrorCode.NO_SUCH_ELEMENT, NoSuchElementError], + [ErrorCode.NO_SUCH_FRAME, NoSuchFrameError], + [ErrorCode.UNSUPPORTED_OPERATION, UnsupportedOperationError], + [ErrorCode.STALE_ELEMENT_REFERENCE, StaleElementReferenceError], + [ErrorCode.ELEMENT_NOT_VISIBLE, ElementNotVisibleError], + [ErrorCode.INVALID_ELEMENT_STATE, InvalidElementStateError], + [ErrorCode.UNKNOWN_ERROR, WebDriverError], + [ErrorCode.ELEMENT_NOT_SELECTABLE, ElementNotSelectableError], + [ErrorCode.JAVASCRIPT_ERROR, JavascriptError], + [ErrorCode.XPATH_LOOKUP_ERROR, InvalidSelectorError], + [ErrorCode.TIMEOUT, TimeoutError], + [ErrorCode.NO_SUCH_WINDOW, NoSuchWindowError], + [ErrorCode.INVALID_COOKIE_DOMAIN, InvalidCookieDomainError], + [ErrorCode.UNABLE_TO_SET_COOKIE, UnableToSetCookieError], + [ErrorCode.UNEXPECTED_ALERT_OPEN, UnexpectedAlertOpenError], + [ErrorCode.NO_SUCH_ALERT, NoSuchAlertError], + [ErrorCode.SCRIPT_TIMEOUT, ScriptTimeoutError], + [ErrorCode.INVALID_ELEMENT_COORDINATES, InvalidElementCoordinatesError], + [ErrorCode.INVALID_SELECTOR_ERROR, InvalidSelectorError], + [ErrorCode.SESSION_NOT_CREATED, SessionNotCreatedError], + [ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsError], + [ErrorCode.INVALID_XPATH_SELECTOR, InvalidSelectorError], + [ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPE, InvalidSelectorError], + [ErrorCode.METHOD_NOT_ALLOWED, UnsupportedOperationError]]); + + +const ERROR_CODE_TO_TYPE = new Map([ + ['unknown error', WebDriverError], + ['element not selectable', ElementNotSelectableError], + ['element not visible', ElementNotVisibleError], + ['invalid argument', InvalidArgumentError], + ['invalid cookie domain', InvalidCookieDomainError], + ['invalid element coordinates', InvalidElementCoordinatesError], + ['invalid element state', InvalidElementStateError], + ['invalid selector', InvalidSelectorError], + ['invalid session id', InvalidSessionIdError], + ['javascript error', JavascriptError], + ['move target out of bounds', MoveTargetOutOfBoundsError], + ['no such alert', NoSuchAlertError], + ['no such element', NoSuchElementError], + ['no such frame', NoSuchFrameError], + ['no such window', NoSuchWindowError], + ['script timeout', ScriptTimeoutError], + ['session not created', SessionNotCreatedError], + ['stale element reference', StaleElementReferenceError], + ['timeout', TimeoutError], + ['unable to set cookie', UnableToSetCookieError], + ['unable to capture screen', UnableToCaptureScreenError], + ['unexpected alert open', UnexpectedAlertOpenError], + ['unknown command', UnknownCommandError], + ['unknown method', UnknownMethodError], + ['unsupported operation', UnsupportedOperationError]]); + + +/** + * Checks a response object from a server that adheres to the W3C WebDriver + * protocol. + * @param {*} data The response data to check. + * @return {*} The response data if it was not an encoded error. + * @throws {WebDriverError} the decoded error, if present in the data object. + * @see https://w3c.github.io/webdriver/webdriver-spec.html#protocol + */ +function checkResponse(data) { + if (data && typeof data.error === 'string') { + let ctor = ERROR_CODE_TO_TYPE.get(data.error) || WebDriverError; + throw new ctor(data.message); + } + return data; +} + + +/** + * Checks a legacy response from the Selenium 2.0 wire protocol for an error. + * @param {*} responseObj the response object to check. + * @return {*} responseObj the original response if it does not define an error. + * @throws {WebDriverError} if the response object defines an error. + */ +function checkLegacyResponse(responseObj) { + // Handle the legacy Selenium error response format. + if (responseObj + && typeof responseObj === 'object' + && typeof responseObj['status'] === 'number' + && responseObj['status'] !== 0) { + let status = responseObj['status']; + let ctor = LEGACY_ERROR_CODE_TO_TYPE.get(status) || WebDriverError; + + let value = responseObj['value']; + + if (!value || typeof value !== 'object') { + throw new ctor(value + ''); + } else { + throw new ctor(value['message'] + ''); + } + } + return responseObj; +} + + +// PUBLIC API + + +exports.ErrorCode = ErrorCode; + +exports.WebDriverError = WebDriverError; +exports.ElementNotSelectableError = ElementNotSelectableError; +exports.ElementNotVisibleError = ElementNotVisibleError; +exports.InvalidArgumentError = InvalidArgumentError; +exports.InvalidCookieDomainError = InvalidCookieDomainError; +exports.InvalidElementCoordinatesError = InvalidElementCoordinatesError; +exports.InvalidElementStateError = InvalidElementStateError; +exports.InvalidSelectorError = InvalidSelectorError; +exports.InvalidSessionIdError = InvalidSessionIdError; +exports.JavascriptError = JavascriptError; +exports.MoveTargetOutOfBoundsError = MoveTargetOutOfBoundsError; +exports.NoSuchAlertError = NoSuchAlertError; +exports.NoSuchElementError = NoSuchElementError; +exports.NoSuchFrameError = NoSuchFrameError; +exports.NoSuchWindowError = NoSuchWindowError; +exports.ScriptTimeoutError = ScriptTimeoutError; +exports.SessionNotCreatedError = SessionNotCreatedError; +exports.StaleElementReferenceError = StaleElementReferenceError; +exports.TimeoutError = TimeoutError; +exports.UnableToSetCookieError = UnableToSetCookieError; +exports.UnableToCaptureScreenError = UnableToCaptureScreenError; +exports.UnexpectedAlertOpenError = UnexpectedAlertOpenError; +exports.UnknownCommandError = UnknownCommandError; +exports.UnknownMethodError = UnknownMethodError; +exports.UnsupportedOperationError = UnsupportedOperationError; + +exports.checkResponse = checkResponse; +exports.checkLegacyResponse = checkLegacyResponse; diff --git a/www/node_modules/selenium-webdriver/example/chrome_android.js b/www/node_modules/selenium-webdriver/example/chrome_android.js new file mode 100644 index 0000000..990a4c4 --- /dev/null +++ b/www/node_modules/selenium-webdriver/example/chrome_android.js @@ -0,0 +1,38 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview A basic example of working with Chrome on Android. Before + * running this example, you must start adb and connect a device (or start an + * AVD). + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + chrome = require('../chrome'); + +var driver = new webdriver.Builder() + .forBrowser('chrome') + .setChromeOptions(new chrome.Options().androidChrome()) + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/www/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js b/www/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js new file mode 100644 index 0000000..d308112 --- /dev/null +++ b/www/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js @@ -0,0 +1,39 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview This is an example of emulating a mobile device using the + * ChromeDriver. + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + chrome = require('../chrome'); + + +var driver = new webdriver.Builder() + .forBrowser('chrome') + .setChromeOptions(new chrome.Options() + .setMobileEmulation({deviceName: 'Google Nexus 5'})) + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/www/node_modules/selenium-webdriver/example/google_search.js b/www/node_modules/selenium-webdriver/example/google_search.js new file mode 100644 index 0000000..c624fa2 --- /dev/null +++ b/www/node_modules/selenium-webdriver/example/google_search.js @@ -0,0 +1,50 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example WebDriver script. This requires the chromedriver + * to be present on the system PATH. + * + * Usage: + * // Default behavior + * node selenium-webdriver/example/google_search.js + * + * // Target Chrome locally; the chromedriver must be on your PATH + * SELENIUM_BROWSER=chrome node selenium-webdriver/example/google_search.js + * + * // Use a local copy of the standalone Selenium server + * SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar \ + * node selenium-webdriver/example/google_search.js + * + * // Target a remove Selenium server + * SELENIUM_REMOTE_URL=http://www.example.com:4444/wd/hub \ + * node selenium-webdriver/example/google_search.js + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/example/google_search_generator.js b/www/node_modules/selenium-webdriver/example/google_search_generator.js new file mode 100644 index 0000000..983c8d8 --- /dev/null +++ b/www/node_modules/selenium-webdriver/example/google_search_generator.js @@ -0,0 +1,45 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example WebDriver script using generator functions. + * + * Usage: node selenium-webdriver/example/google_search_generator.js + */ + +var webdriver = require('..'), + By = webdriver.By; + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); +driver.call(function* () { + var query = yield driver.findElement(By.name('q')); + query.sendKeys('webdriver'); + + var submit = yield driver.findElement(By.name('btnG')); + submit.click(); +}); + +driver.wait(function* () { + var title = yield driver.getTitle(); + return 'webdriver - Google Search' === title; +}, 1000); + +driver.quit(); diff --git a/www/node_modules/selenium-webdriver/example/google_search_test.js b/www/node_modules/selenium-webdriver/example/google_search_test.js new file mode 100644 index 0000000..823e2c5 --- /dev/null +++ b/www/node_modules/selenium-webdriver/example/google_search_test.js @@ -0,0 +1,47 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example test that may be run using Mocha. + * Usage: mocha -t 10000 selenium-webdriver/example/google_search_test.js + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + test = require('../testing'); + +test.describe('Google Search', function() { + var driver; + + test.before(function() { + driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + }); + + test.it('should append query to title', function() { + driver.get('http://www.google.com'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + }); + + test.after(function() { + driver.quit(); + }); +}); diff --git a/www/node_modules/selenium-webdriver/example/logging.js b/www/node_modules/selenium-webdriver/example/logging.js new file mode 100644 index 0000000..ae1d4cc --- /dev/null +++ b/www/node_modules/selenium-webdriver/example/logging.js @@ -0,0 +1,43 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Demonstrates how to use WebDriver's logging sysem. + */ + +'use strict'; + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +webdriver.logging.installConsoleHandler(); +webdriver.logging.getLogger('webdriver.http') + .setLevel(webdriver.logging.Level.ALL); + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); + +var searchBox = driver.wait(until.elementLocated(By.name('q')), 3000); +searchBox.sendKeys('webdriver'); + +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/www/node_modules/selenium-webdriver/example/parallel_flows.js b/www/node_modules/selenium-webdriver/example/parallel_flows.js new file mode 100644 index 0000000..f416922 --- /dev/null +++ b/www/node_modules/selenium-webdriver/example/parallel_flows.js @@ -0,0 +1,51 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example of starting multiple WebDriver clients that run + * in parallel in separate control flows. + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +for (var i = 0; i < 3; i++) { + (function(n) { + var flow = new webdriver.promise.ControlFlow() + .on('uncaughtException', function(e) { + console.log('uncaughtException in flow %d: %s', n, e); + }); + + var driver = new webdriver.Builder(). + forBrowser('firefox'). + setControlFlow(flow). // Comment out this line to see the difference. + build(); + + // Position and resize window so it's easy to see them running together. + driver.manage().window().setSize(600, 400); + driver.manage().window().setPosition(300 * i, 400 * i); + + driver.get('http://www.google.com'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + + driver.quit(); + })(i); +} + diff --git a/www/node_modules/selenium-webdriver/executors.js b/www/node_modules/selenium-webdriver/executors.js new file mode 100644 index 0000000..17f222a --- /dev/null +++ b/www/node_modules/selenium-webdriver/executors.js @@ -0,0 +1,50 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Various utilities for working with {@link ./command.Executor} + * implementations. + */ + + 'use strict'; + +const HttpClient = require('./http').HttpClient, + HttpExecutor = require('./http').Executor, + DeferredExecutor = require('./lib/command').DeferredExecutor, + promise = require('./lib/promise'); + + +// PUBLIC API + + +/** @deprecated Use {@link ./lib/command.DeferredExecutor} instead. */ +exports.DeferredExecutor = DeferredExecutor; + +/** + * Creates a command executor that uses WebDriver's JSON wire protocol. + * @param {(string|!promise.Promise)} url The server's URL, + * or a promise that will resolve to that URL. + * @param {?string=} opt_proxy (optional) The URL of the HTTP proxy for the + * client to use. + * @returns {!./lib/command.Executor} The new command executor. + */ +exports.createExecutor = function(url, opt_proxy) { + return new DeferredExecutor(promise.when(url, function(url) { + var client = new HttpClient(url, null, opt_proxy); + return new HttpExecutor(client); + })); +}; diff --git a/www/node_modules/selenium-webdriver/firefox/binary.js b/www/node_modules/selenium-webdriver/firefox/binary.js new file mode 100644 index 0000000..48a4a0b --- /dev/null +++ b/www/node_modules/selenium-webdriver/firefox/binary.js @@ -0,0 +1,221 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Manages Firefox binaries. This module is considered internal; + * users should use {@link ./firefox selenium-webdriver/firefox}. + */ + +'use strict'; + +const child = require('child_process'), + fs = require('fs'), + path = require('path'), + util = require('util'); + +const isDevMode = require('../lib/devmode'), + promise = require('../lib/promise'), + Symbols = require('../lib/symbols'), + io = require('../io'), + exec = require('../io/exec'); + + + +/** @const */ +const NO_FOCUS_LIB_X86 = isDevMode ? + path.join(__dirname, '../../../../cpp/prebuilt/i386/libnoblur.so') : + path.join(__dirname, '../lib/firefox/i386/libnoblur.so') ; + +/** @const */ +const NO_FOCUS_LIB_AMD64 = isDevMode ? + path.join(__dirname, '../../../../cpp/prebuilt/amd64/libnoblur64.so') : + path.join(__dirname, '../lib/firefox/amd64/libnoblur64.so') ; + +const X_IGNORE_NO_FOCUS_LIB = 'x_ignore_nofocus.so'; + +var foundBinary = null; + + +/** + * Checks the default Windows Firefox locations in Program Files. + * @return {!Promise} A promise for the located executable. + * The promise will resolve to {@code null} if Firefox was not found. + */ +function defaultWindowsLocation() { + var files = [ + process.env['PROGRAMFILES'] || 'C:\\Program Files', + process.env['PROGRAMFILES(X86)'] || 'C:\\Program Files (x86)' + ].map(function(prefix) { + return path.join(prefix, 'Mozilla Firefox\\firefox.exe'); + }); + return io.exists(files[0]).then(function(exists) { + return exists ? files[0] : io.exists(files[1]).then(function(exists) { + return exists ? files[1] : null; + }); + }); +} + + +/** + * Locates the Firefox binary for the current system. + * @return {!promise.Promise.} A promise for the located binary. The + * promise will be rejected if Firefox cannot be located. + */ +function findFirefox() { + if (foundBinary) { + return foundBinary; + } + + if (process.platform === 'darwin') { + var osxExe = '/Applications/Firefox.app/Contents/MacOS/firefox-bin'; + foundBinary = io.exists(osxExe).then(function(exists) { + return exists ? osxExe : null; + }); + } else if (process.platform === 'win32') { + foundBinary = defaultWindowsLocation(); + } else { + foundBinary = promise.fulfilled(io.findInPath('firefox')); + } + + return foundBinary = foundBinary.then(function(found) { + if (found) { + return found; + } + throw Error('Could not locate Firefox on the current system'); + }); +} + + +/** + * Copies the no focus libs into the given profile directory. + * @param {string} profileDir Path to the profile directory to install into. + * @return {!promise.Promise.} The LD_LIBRARY_PATH prefix string to use + * for the installed libs. + */ +function installNoFocusLibs(profileDir) { + var x86 = path.join(profileDir, 'x86'); + var amd64 = path.join(profileDir, 'amd64'); + + return mkdir(x86) + .then(copyLib.bind(null, NO_FOCUS_LIB_X86, x86)) + .then(mkdir.bind(null, amd64)) + .then(copyLib.bind(null, NO_FOCUS_LIB_AMD64, amd64)) + .then(function() { + return x86 + ':' + amd64; + }); + + function mkdir(dir) { + return io.exists(dir).then(function(exists) { + if (!exists) { + return promise.checkedNodeCall(fs.mkdir, dir); + } + }); + } + + function copyLib(src, dir) { + return io.copy(src, path.join(dir, X_IGNORE_NO_FOCUS_LIB)); + } +} + + +/** + * Provides a mechanism to configure and launch Firefox in a subprocess for + * use with WebDriver. + * + * @final + */ +class Binary { + /** + * @param {string=} opt_exe Path to the Firefox binary to use. If not + * specified, will attempt to locate Firefox on the current system. + */ + constructor(opt_exe) { + /** @private {(string|undefined)} */ + this.exe_ = opt_exe; + + /** @private {!Array.} */ + this.args_ = []; + + /** @private {!Object} */ + this.env_ = {}; + Object.assign(this.env_, process.env, { + MOZ_CRASHREPORTER_DISABLE: '1', + MOZ_NO_REMOTE: '1', + NO_EM_RESTART: '1' + }); + } + + /** + * Add arguments to the command line used to start Firefox. + * @param {...(string|!Array.)} var_args Either the arguments to add + * as varargs, or the arguments as an array. + */ + addArguments(var_args) { + for (var i = 0; i < arguments.length; i++) { + if (Array.isArray(arguments[i])) { + this.args_ = this.args_.concat(arguments[i]); + } else { + this.args_.push(arguments[i]); + } + } + } + + /** + * Launches Firefox and returns a promise that will be fulfilled when the + * process terminates. + * @param {string} profile Path to the profile directory to use. + * @return {!promise.Promise} A promise for the handle to the + * started subprocess. + */ + launch(profile) { + let env = {}; + Object.assign(env, this.env_, {XRE_PROFILE_PATH: profile}); + + let args = ['-foreground'].concat(this.args_); + + return promise.when(this.exe_ || findFirefox(), function(firefox) { + if (process.platform === 'win32' || process.platform === 'darwin') { + return exec(firefox, {args: args, env: env}); + } + return installNoFocusLibs(profile).then(function(ldLibraryPath) { + env['LD_LIBRARY_PATH'] = ldLibraryPath + ':' + env['LD_LIBRARY_PATH']; + env['LD_PRELOAD'] = X_IGNORE_NO_FOCUS_LIB; + return exec(firefox, {args: args, env: env}); + }); + }); + } + + /** + * Returns a promise for the wire representation of this binary. Note: the + * FirefoxDriver only supports passing the path to the binary executable over + * the wire; all command line arguments and environment variables will be + * discarded. + * + * @return {!promise.Promise} A promise for this binary's wire + * representation. + */ + [Symbols.serialize]() { + return promise.fulfilled(this.exe_ || findFirefox()); + } +} + + +// PUBLIC API + + +exports.Binary = Binary; + diff --git a/www/node_modules/selenium-webdriver/firefox/extension.js b/www/node_modules/selenium-webdriver/firefox/extension.js new file mode 100644 index 0000000..990481c --- /dev/null +++ b/www/node_modules/selenium-webdriver/firefox/extension.js @@ -0,0 +1,177 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** @fileoverview Utilities for working with Firefox extensions. */ + +'use strict'; + +const AdmZip = require('adm-zip'), + fs = require('fs'), + path = require('path'), + xml = require('xml2js'); + +const promise = require('../lib/promise'), + checkedCall = promise.checkedNodeCall, + io = require('../io'); + + +/** + * Thrown when there an add-on is malformed. + */ +class AddonFormatError extends Error { + /** @param {string} msg The error message. */ + constructor(msg) { + super(msg); + /** @override */ + this.name = this.constructor.name; + } +} + + + +/** + * Installs an extension to the given directory. + * @param {string} extension Path to the extension to install, as either a xpi + * file or a directory. + * @param {string} dir Path to the directory to install the extension in. + * @return {!promise.Promise.} A promise for the add-on ID once + * installed. + */ +function install(extension, dir) { + return getDetails(extension).then(function(details) { + function returnId() { return details.id; } + + var dst = path.join(dir, details.id); + if (extension.slice(-4) === '.xpi') { + if (!details.unpack) { + return io.copy(extension, dst + '.xpi').then(returnId); + } else { + return checkedCall(fs.readFile, extension).then(function(buff) { + // TODO: find an async library for inflating a zip archive. + new AdmZip(buff).extractAllTo(dst, true); + }).then(returnId); + } + } else { + return io.copyDir(extension, dst).then(returnId); + } + }); +} + + +/** + * Describes a Firefox add-on. + * @typedef {{id: string, name: string, version: string, unpack: boolean}} + */ +var AddonDetails; + + +/** + * Extracts the details needed to install an add-on. + * @param {string} addonPath Path to the extension directory. + * @return {!promise.Promise.} A promise for the add-on details. + */ +function getDetails(addonPath) { + return readManifest(addonPath).then(function(doc) { + var em = getNamespaceId(doc, 'http://www.mozilla.org/2004/em-rdf#'); + var rdf = getNamespaceId( + doc, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); + + var description = doc[rdf + 'RDF'][rdf + 'Description'][0]; + var details = { + id: getNodeText(description, em + 'id'), + name: getNodeText(description, em + 'name'), + version: getNodeText(description, em + 'version'), + unpack: getNodeText(description, em + 'unpack') || false + }; + + if (typeof details.unpack === 'string') { + details.unpack = details.unpack.toLowerCase() === 'true'; + } + + if (!details.id) { + throw new AddonFormatError('Could not find add-on ID for ' + addonPath); + } + + return details; + }); + + function getNodeText(node, name) { + return node[name] && node[name][0] || ''; + } + + function getNamespaceId(doc, url) { + var keys = Object.keys(doc); + if (keys.length !== 1) { + throw new AddonFormatError('Malformed manifest for add-on ' + addonPath); + } + + var namespaces = doc[keys[0]].$; + var id = ''; + Object.keys(namespaces).some(function(ns) { + if (namespaces[ns] !== url) { + return false; + } + + if (ns.indexOf(':') != -1) { + id = ns.split(':')[1] + ':'; + } + return true; + }); + return id; + } +} + + +/** + * Reads the manifest for a Firefox add-on. + * @param {string} addonPath Path to a Firefox add-on as a xpi or an extension. + * @return {!promise.Promise} A promise for the parsed manifest. + */ +function readManifest(addonPath) { + var manifest; + + if (addonPath.slice(-4) === '.xpi') { + manifest = checkedCall(fs.readFile, addonPath).then(function(buff) { + var zip = new AdmZip(buff); + if (!zip.getEntry('install.rdf')) { + throw new AddonFormatError( + 'Could not find install.rdf in ' + addonPath); + } + var done = promise.defer(); + zip.readAsTextAsync('install.rdf', done.fulfill); + return done.promise; + }); + } else { + manifest = checkedCall(fs.stat, addonPath).then(function(stats) { + if (!stats.isDirectory()) { + throw Error( + 'Add-on path is niether a xpi nor a directory: ' + addonPath); + } + return checkedCall(fs.readFile, path.join(addonPath, 'install.rdf')); + }); + } + + return manifest.then(function(content) { + return checkedCall(xml.parseString, content); + }); +} + + +// PUBLIC API + + +exports.install = install; diff --git a/www/node_modules/selenium-webdriver/firefox/index.js b/www/node_modules/selenium-webdriver/firefox/index.js new file mode 100644 index 0000000..8d726ee --- /dev/null +++ b/www/node_modules/selenium-webdriver/firefox/index.js @@ -0,0 +1,320 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines the {@linkplain Driver WebDriver} client for Firefox. + * Each FirefoxDriver instance will be created with an anonymous profile, + * ensuring browser historys do not share session data (cookies, history, cache, + * offline storage, etc.) + * + * __Customizing the Firefox Profile__ + * + * The {@link Profile} class may be used to configure the browser profile used + * with WebDriver, with functions to install additional + * {@linkplain Profile#addExtension extensions}, configure browser + * {@linkplain Profile#setPreference preferences}, and more. For example, you + * may wish to include Firebug: + * + * var firefox = require('selenium-webdriver/firefox'); + * + * var profile = new firefox.Profile(); + * profile.addExtension('/path/to/firebug.xpi'); + * profile.setPreference('extensions.firebug.showChromeErrors', true); + * + * var options = new firefox.Options().setProfile(profile); + * var driver = new firefox.Driver(options); + * + * The {@link Profile} class may also be used to configure WebDriver based on a + * pre-existing browser profile: + * + * var profile = new firefox.Profile( + * '/usr/local/home/bob/.mozilla/firefox/3fgog75h.testing'); + * var options = new firefox.Options().setProfile(profile); + * var driver = new firefox.Driver(options); + * + * The FirefoxDriver will _never_ modify a pre-existing profile; instead it will + * create a copy for it to modify. By extension, there are certain browser + * preferences that are required for WebDriver to function properly and they + * will always be overwritten. + * + * __Using a Custom Firefox Binary__ + * + * On Windows and OSX, the FirefoxDriver will search for Firefox in its + * default installation location: + * + * * Windows: C:\Program Files and C:\Program Files (x86). + * * Mac OS X: /Applications/Firefox.app + * + * For Linux, Firefox will be located on the PATH: `$(where firefox)`. + * + * You can configure WebDriver to start use a custom Firefox installation with + * the {@link Binary} class: + * + * var firefox = require('selenium-webdriver/firefox'); + * var binary = new firefox.Binary('/my/firefox/install/dir/firefox-bin'); + * var options = new firefox.Options().setBinary(binary); + * var driver = new firefox.Driver(options); + * + * __Remote Testing__ + * + * You may customize the Firefox binary and profile when running against a + * remote Selenium server. Your custom profile will be packaged as a zip and + * transfered to the remote host for use. The profile will be transferred + * _once for each new session_. The performance impact should be minimal if + * you've only configured a few extra browser preferences. If you have a large + * profile with several extensions, you should consider installing it on the + * remote host and defining its path via the {@link Options} class. Custom + * binaries are never copied to remote machines and must be referenced by + * installation path. + * + * var options = new firefox.Options() + * .setProfile('/profile/path/on/remote/host') + * .setBinary('/install/dir/on/remote/host/firefox-bin'); + * + * var driver = new (require('selenium-webdriver')).Builder() + * .forBrowser('firefox') + * .usingServer('http://127.0.0.1:4444/wd/hub') + * .setFirefoxOptions(options) + * .build(); + */ + +'use strict'; + +const url = require('url'); + +const Binary = require('./binary').Binary, + Profile = require('./profile').Profile, + decodeProfile = require('./profile').decode, + executors = require('../executors'), + httpUtil = require('../http/util'), + io = require('../io'), + capabilities = require('../lib/capabilities'), + logging = require('../lib/logging'), + promise = require('../lib/promise'), + webdriver = require('../lib/webdriver'), + net = require('../net'), + portprober = require('../net/portprober'); + + +/** + * Configuration options for the FirefoxDriver. + */ +class Options { + constructor() { + /** @private {Profile} */ + this.profile_ = null; + + /** @private {Binary} */ + this.binary_ = null; + + /** @private {logging.Preferences} */ + this.logPrefs_ = null; + + /** @private {?capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Sets the profile to use. The profile may be specified as a + * {@link Profile} object or as the path to an existing Firefox profile to use + * as a template. + * + * @param {(string|!Profile)} profile The profile to use. + * @return {!Options} A self reference. + */ + setProfile(profile) { + if (typeof profile === 'string') { + profile = new Profile(profile); + } + this.profile_ = profile; + return this; + } + + /** + * Sets the binary to use. The binary may be specified as the path to a Firefox + * executable, or as a {@link Binary} object. + * + * @param {(string|!Binary)} binary The binary to use. + * @return {!Options} A self reference. + */ + setBinary(binary) { + if (typeof binary === 'string') { + binary = new Binary(binary); + } + this.binary_ = binary; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPreferences(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Sets the proxy to use. + * + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts these options to a {@link capabilities.Capabilities} instance. + * + * @return {!capabilities.Capabilities} A new capabilities object. + */ + toCapabilities() { + var caps = capabilities.Capabilities.firefox(); + if (this.logPrefs_) { + caps.set(capabilities.Capability.LOGGING_PREFS, this.logPrefs_); + } + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + if (this.binary_) { + caps.set('firefox_binary', this.binary_); + } + if (this.profile_) { + caps.set('firefox_profile', this.profile_); + } + return caps; + } +} + + +/** + * A WebDriver client for Firefox. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(Options|capabilities.Capabilities|Object)=} opt_config The + * configuration options for this driver, specified as either an + * {@link Options} or {@link capabilities.Capabilities}, or as a raw hash + * object. + * @param {promise.ControlFlow=} opt_flow The flow to + * schedule commands through. Defaults to the active flow object. + */ + constructor(opt_config, opt_flow) { + let caps; + if (opt_config instanceof Options) { + caps = opt_config.toCapabilities(); + } else { + caps = new capabilities.Capabilities(opt_config); + } + + let binary = caps.get('firefox_binary') || new Binary(); + if (typeof binary === 'string') { + binary = new Binary(binary); + } + + let profile = caps.get('firefox_profile') || new Profile(); + + caps.set('firefox_binary', null); + caps.set('firefox_profile', null); + + let self; // Cannot assign to 'this' until after we call super. + let freePort = portprober.findFreePort(); + let command = freePort.then(function(port) { + if (typeof profile === 'string') { + return decodeProfile(profile).then(function(dir) { + var profile = new Profile(dir); + profile.setPreference('webdriver_firefox_port', port); + return profile.writeToDisk(); + }); + } else { + profile.setPreference('webdriver_firefox_port', port); + return profile.writeToDisk(); + } + }).then(function(profileDir) { + self.profilePath_ = profileDir; + return binary.launch(profileDir); + }); + + let serverUrl = command + .then(function() { return freePort; }) + .then(function(/** number */port) { + var serverUrl = url.format({ + protocol: 'http', + hostname: net.getLoopbackAddress(), + port: port + '', + pathname: '/hub' + }); + + return httpUtil.waitForServer(serverUrl, 45 * 1000).then(function() { + return serverUrl; + }); + }); + + var executor = executors.createExecutor(serverUrl); + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, opt_flow); + self = this; + + /** @private {?string} */ + this.profilePath_ = null; + + /** @private */ + this.command_ = command; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() { + } + + /** @override */ + quit() { + // TODO: use super.quit when closure compiler knows how to transpile it. + // let superQuit = super.quit; + return this.call(function() { + let self = this; + return webdriver.WebDriver.prototype.quit.call(this) + .thenFinally(function() { + return self.command_.then(function(command) { + command.kill(); + return command.result(); + }); + }) + .thenFinally(function() { + if (self.profilePath_) { + return io.rmDir(self.profilePath_); + } + }); + }, this); + } +} + + +// PUBLIC API + + +exports.Binary = Binary; +exports.Driver = Driver; +exports.Options = Options; +exports.Profile = Profile; diff --git a/www/node_modules/selenium-webdriver/firefox/profile.js b/www/node_modules/selenium-webdriver/firefox/profile.js new file mode 100644 index 0000000..13f1250 --- /dev/null +++ b/www/node_modules/selenium-webdriver/firefox/profile.js @@ -0,0 +1,413 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Profile management module. This module is considered internal; + * users should use {@link selenium-webdriver/firefox}. + */ + +'use strict'; + +const AdmZip = require('adm-zip'), + AdmConstants = require('adm-zip/util/constants'), + fs = require('fs'), + path = require('path'), + vm = require('vm'); + +const isDevMode = require('../lib/devmode'), + promise = require('../lib/promise'), + Symbols = require('../lib/symbols'), + io = require('../io'), + extension = require('./extension'); + + +/** @const */ +const WEBDRIVER_PREFERENCES_PATH = isDevMode + ? path.join(__dirname, '../../../firefox-driver/webdriver.json') + : path.join(__dirname, '../lib/firefox/webdriver.json'); + +/** @const */ +const WEBDRIVER_EXTENSION_PATH = isDevMode + ? path.join(__dirname, + '../../../../build/javascript/firefox-driver/webdriver.xpi') + : path.join(__dirname, '../lib/firefox/webdriver.xpi'); + +/** @const */ +const WEBDRIVER_EXTENSION_NAME = 'fxdriver@googlecode.com'; + + + +/** @type {Object} */ +var defaultPreferences = null; + +/** + * Synchronously loads the default preferences used for the FirefoxDriver. + * @return {!Object} The default preferences JSON object. + */ +function getDefaultPreferences() { + if (!defaultPreferences) { + var contents = /** @type {string} */( + fs.readFileSync(WEBDRIVER_PREFERENCES_PATH, 'utf8')); + defaultPreferences = /** @type {!Object} */(JSON.parse(contents)); + } + return defaultPreferences; +} + + +/** + * Parses a user.js file in a Firefox profile directory. + * @param {string} f Path to the file to parse. + * @return {!promise.Promise} A promise for the parsed preferences as + * a JSON object. If the file does not exist, an empty object will be + * returned. + */ +function loadUserPrefs(f) { + var done = promise.defer(); + fs.readFile(f, function(err, contents) { + if (err && err.code === 'ENOENT') { + done.fulfill({}); + return; + } + + if (err) { + done.reject(err); + return; + } + + var prefs = {}; + var context = vm.createContext({ + 'user_pref': function(key, value) { + prefs[key] = value; + } + }); + + vm.runInContext(/** @type {string} */(contents), context, f); + done.fulfill(prefs); + }); + return done.promise; +} + + + +/** + * @param {!Object} prefs The default preferences to write. Will be + * overridden by user.js preferences in the template directory and the + * frozen preferences required by WebDriver. + * @param {string} dir Path to the directory write the file to. + * @return {!promise.Promise} A promise for the profile directory, + * to be fulfilled when user preferences have been written. + */ +function writeUserPrefs(prefs, dir) { + var userPrefs = path.join(dir, 'user.js'); + return loadUserPrefs(userPrefs).then(function(overrides) { + Object.assign(prefs, overrides); + Object.assign(prefs, getDefaultPreferences()['frozen']); + + var contents = Object.keys(prefs).map(function(key) { + return 'user_pref(' + JSON.stringify(key) + ', ' + + JSON.stringify(prefs[key]) + ');'; + }).join('\n'); + + var done = promise.defer(); + fs.writeFile(userPrefs, contents, function(err) { + err && done.reject(err) || done.fulfill(dir); + }); + return done.promise; + }); +}; + + +/** + * Installs a group of extensions in the given profile directory. If the + * WebDriver extension is not included in this set, the default version + * bundled with this package will be installed. + * @param {!Array.} extensions The extensions to install, as a + * path to an unpacked extension directory or a path to a xpi file. + * @param {string} dir The profile directory to install to. + * @param {boolean=} opt_excludeWebDriverExt Whether to skip installation of + * the default WebDriver extension. + * @return {!Promise} A promise for the main profile directory + * once all extensions have been installed. + */ +function installExtensions(extensions, dir, opt_excludeWebDriverExt) { + var hasWebDriver = !!opt_excludeWebDriverExt; + var next = 0; + var extensionDir = path.join(dir, 'extensions'); + + return new Promise(function(fulfill, reject) { + io.exists(extensionDir).then(function(exists) { + if (!exists) { + return promise.checkedNodeCall(fs.mkdir, extensionDir); + } + }).then(installNext); + + function installNext() { + if (next >= extensions.length) { + if (hasWebDriver) { + fulfill(dir); + } else { + install(WEBDRIVER_EXTENSION_PATH); + } + } else { + install(extensions[next++]); + } + } + + function install(ext) { + extension.install(ext, extensionDir).then(function(id) { + hasWebDriver = hasWebDriver || (id === WEBDRIVER_EXTENSION_NAME); + installNext(); + }, reject); + } + }); +} + + +/** + * Decodes a base64 encoded profile. + * @param {string} data The base64 encoded string. + * @return {!Promise} A promise for the path to the decoded profile + * directory. + */ +function decode(data) { + return io.tmpFile().then(function(file) { + var buf = new Buffer(data, 'base64'); + return promise.checkedNodeCall(fs.writeFile, file, buf).then(function() { + return io.tmpDir(); + }).then(function(dir) { + var zip = new AdmZip(file); + zip.extractAllTo(dir); // Sync only? Why?? :-( + return dir; + }); + }); +} + + + +/** + * Models a Firefox proifle directory for use with the FirefoxDriver. The + * {@code Proifle} directory uses an in-memory model until {@link #writeToDisk} + * is called. + */ +class Profile { + /** + * @param {string=} opt_dir Path to an existing Firefox profile directory to + * use a template for this profile. If not specified, a blank profile will + * be used. + */ + constructor(opt_dir) { + /** @private {!Object} */ + this.preferences_ = {}; + + Object.assign(this.preferences_, getDefaultPreferences()['mutable']); + Object.assign(this.preferences_, getDefaultPreferences()['frozen']); + + /** @private {boolean} */ + this.nativeEventsEnabled_ = true; + + /** @private {(string|undefined)} */ + this.template_ = opt_dir; + + /** @private {number} */ + this.port_ = 0; + + /** @private {!Array} */ + this.extensions_ = []; + } + + /** + * Registers an extension to be included with this profile. + * @param {string} extension Path to the extension to include, as either an + * unpacked extension directory or the path to a xpi file. + */ + addExtension(extension) { + this.extensions_.push(extension); + } + + /** + * Sets a desired preference for this profile. + * @param {string} key The preference key. + * @param {(string|number|boolean)} value The preference value. + * @throws {Error} If attempting to set a frozen preference. + */ + setPreference(key, value) { + var frozen = getDefaultPreferences()['frozen']; + if (frozen.hasOwnProperty(key) && frozen[key] !== value) { + throw Error('You may not set ' + key + '=' + JSON.stringify(value) + + '; value is frozen for proper WebDriver functionality (' + + key + '=' + JSON.stringify(frozen[key]) + ')'); + } + this.preferences_[key] = value; + } + + /** + * Returns the currently configured value of a profile preference. This does + * not include any defaults defined in the profile's template directory user.js + * file (if a template were specified on construction). + * @param {string} key The desired preference. + * @return {(string|number|boolean|undefined)} The current value of the + * requested preference. + */ + getPreference(key) { + return this.preferences_[key]; + } + + /** + * Specifies which host the driver should listen for commands on. If not + * specified, the driver will default to "localhost". This option should be + * specified when "localhost" is not mapped to the loopback address + * (127.0.0.1) in `/etc/hosts`. + * + * @param {string} host the host the driver should listen for commands on + */ + setHost(host) { + this.preferences_['webdriver_firefox_allowed_hosts'] = host; + } + + /** + * @return {number} The port this profile is currently configured to use, or + * 0 if the port will be selected at random when the profile is written + * to disk. + */ + getPort() { + return this.port_; + } + + /** + * Sets the port to use for the WebDriver extension loaded by this profile. + * @param {number} port The desired port, or 0 to use any free port. + */ + setPort(port) { + this.port_ = port; + } + + /** + * @return {boolean} Whether the FirefoxDriver is configured to automatically + * accept untrusted SSL certificates. + */ + acceptUntrustedCerts() { + return !!this.preferences_['webdriver_accept_untrusted_certs']; + } + + /** + * Sets whether the FirefoxDriver should automatically accept untrusted SSL + * certificates. + * @param {boolean} value . + */ + setAcceptUntrustedCerts(value) { + this.preferences_['webdriver_accept_untrusted_certs'] = !!value; + } + + /** + * Sets whether to assume untrusted certificates come from untrusted issuers. + * @param {boolean} value . + */ + setAssumeUntrustedCertIssuer(value) { + this.preferences_['webdriver_assume_untrusted_issuer'] = !!value; + } + + /** + * @return {boolean} Whether to assume untrusted certs come from untrusted + * issuers. + */ + assumeUntrustedCertIssuer() { + return !!this.preferences_['webdriver_assume_untrusted_issuer']; + } + + /** + * Sets whether to use native events with this profile. + * @param {boolean} enabled . + */ + setNativeEventsEnabled(enabled) { + this.nativeEventsEnabled_ = enabled; + } + + /** + * Returns whether native events are enabled in this profile. + * @return {boolean} . + */ + nativeEventsEnabled() { + return this.nativeEventsEnabled_; + } + + /** + * Writes this profile to disk. + * @param {boolean=} opt_excludeWebDriverExt Whether to exclude the WebDriver + * extension from the generated profile. Used to reduce the size of an + * {@link #encode() encoded profile} since the server will always install + * the extension itself. + * @return {!Promise} A promise for the path to the new profile + * directory. + */ + writeToDisk(opt_excludeWebDriverExt) { + var profileDir = io.tmpDir(); + if (this.template_) { + profileDir = profileDir.then(function(dir) { + return io.copyDir( + /** @type {string} */(this.template_), + dir, /(parent\.lock|lock|\.parentlock)/); + }.bind(this)); + } + + // Freeze preferences for async operations. + var prefs = {}; + Object.assign(prefs, this.preferences_); + + // Freeze extensions for async operations. + var extensions = this.extensions_.concat(); + + return profileDir.then(function(dir) { + return writeUserPrefs(prefs, dir); + }).then(function(dir) { + return installExtensions(extensions, dir, !!opt_excludeWebDriverExt); + }); + } + + /** + * Encodes this profile as a zipped, base64 encoded directory. + * @return {!Promise} A promise for the encoded profile. + */ + encode() { + return this.writeToDisk(true).then(function(dir) { + var zip = new AdmZip(); + zip.addLocalFolder(dir, ''); + zip.getEntries()[0].header.method = AdmConstants.STORED; + return io.tmpFile().then(function(file) { + zip.writeZip(file); // Sync! Why oh why :-( + return promise.checkedNodeCall(fs.readFile, file); + }); + }).then(function(data) { + return new Buffer(data).toString('base64'); + }); + } + + /** + * Encodes this profile as a zipped, base64 encoded directory. + * @return {!Promise} A promise for the encoded profile. + */ + [Symbols.serialize]() { + return this.encode(); + } +} + + +// PUBLIC API + + +exports.Profile = Profile; +exports.decode = decode; +exports.loadUserPrefs = loadUserPrefs; diff --git a/www/node_modules/selenium-webdriver/http/index.js b/www/node_modules/selenium-webdriver/http/index.js new file mode 100644 index 0000000..2ffbfb9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/http/index.js @@ -0,0 +1,514 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines an {@linkplain cmd.Executor command executor} that + * communicates with a remote end using HTTP + JSON. + */ + +'use strict'; + +const http = require('http'); +const url = require('url'); + +const error = require('../error'); +const cmd = require('../lib/command'); +const logging = require('../lib/logging'); +const promise = require('../lib/promise'); + + + +/** + * Converts a headers map to a HTTP header block string. + * @param {!Map} headers The map to convert. + * @return {string} The headers as a string. + */ +function headersToString(headers) { + let ret = []; + headers.forEach(function(value, name) { + ret.push(`${name.toLowerCase()}: ${value}`); + }); + return ret.join('\n'); +} + + +/** + * Represents a HTTP request message. This class is a "partial" request and only + * defines the path on the server to send a request to. It is each client's + * responsibility to build the full URL for the final request. + * @final + */ +class HttpRequest { + /** + * @param {string} method The HTTP method to use for the request. + * @param {string} path The path on the server to send the request to. + * @param {Object=} opt_data This request's non-serialized JSON payload data. + */ + constructor(method, path, opt_data) { + this.method = /** string */method; + this.path = /** string */path; + this.data = /** Object */opt_data; + this.headers = /** !Map */new Map( + [['Accept', 'application/json; charset=utf-8']]); + } + + /** @override */ + toString() { + let ret = `${this.method} ${this.path} HTTP/1.1\n`; + ret += headersToString(this.headers) + '\n\n'; + if (this.data) { + ret += JSON.stringify(this.data); + } + return ret; + } +} + + +/** + * Represents a HTTP response message. + * @final + */ +class HttpResponse { + /** + * @param {number} status The response code. + * @param {!Object} headers The response headers. All header names + * will be converted to lowercase strings for consistent lookups. + * @param {string} body The response body. + */ + constructor(status, headers, body) { + this.status = /** number */status; + this.body = /** string */body; + this.headers = /** !Map*/new Map; + for (let header in headers) { + this.headers.set(header.toLowerCase(), headers[header]); + } + } + + /** @override */ + toString() { + let ret = `HTTP/1.1 ${this.status}\n${headersToString(this.headers)}\n\n`; + if (this.body) { + ret += this.body; + } + return ret; + } +} + + +function post(path) { return resource('POST', path); } +function del(path) { return resource('DELETE', path); } +function get(path) { return resource('GET', path); } +function resource(method, path) { return {method: method, path: path}; } + + +/** @const {!Map} */ +const COMMAND_MAP = new Map([ + [cmd.Name.GET_SERVER_STATUS, get('/status')], + [cmd.Name.NEW_SESSION, post('/session')], + [cmd.Name.GET_SESSIONS, get('/sessions')], + [cmd.Name.DESCRIBE_SESSION, get('/session/:sessionId')], + [cmd.Name.QUIT, del('/session/:sessionId')], + [cmd.Name.CLOSE, del('/session/:sessionId/window')], + [cmd.Name.GET_CURRENT_WINDOW_HANDLE, get('/session/:sessionId/window_handle')], + [cmd.Name.GET_WINDOW_HANDLES, get('/session/:sessionId/window_handles')], + [cmd.Name.GET_CURRENT_URL, get('/session/:sessionId/url')], + [cmd.Name.GET, post('/session/:sessionId/url')], + [cmd.Name.GO_BACK, post('/session/:sessionId/back')], + [cmd.Name.GO_FORWARD, post('/session/:sessionId/forward')], + [cmd.Name.REFRESH, post('/session/:sessionId/refresh')], + [cmd.Name.ADD_COOKIE, post('/session/:sessionId/cookie')], + [cmd.Name.GET_ALL_COOKIES, get('/session/:sessionId/cookie')], + [cmd.Name.DELETE_ALL_COOKIES, del('/session/:sessionId/cookie')], + [cmd.Name.DELETE_COOKIE, del('/session/:sessionId/cookie/:name')], + [cmd.Name.FIND_ELEMENT, post('/session/:sessionId/element')], + [cmd.Name.FIND_ELEMENTS, post('/session/:sessionId/elements')], + [cmd.Name.GET_ACTIVE_ELEMENT, post('/session/:sessionId/element/active')], + [cmd.Name.FIND_CHILD_ELEMENT, post('/session/:sessionId/element/:id/element')], + [cmd.Name.FIND_CHILD_ELEMENTS, post('/session/:sessionId/element/:id/elements')], + [cmd.Name.CLEAR_ELEMENT, post('/session/:sessionId/element/:id/clear')], + [cmd.Name.CLICK_ELEMENT, post('/session/:sessionId/element/:id/click')], + [cmd.Name.SEND_KEYS_TO_ELEMENT, post('/session/:sessionId/element/:id/value')], + [cmd.Name.SUBMIT_ELEMENT, post('/session/:sessionId/element/:id/submit')], + [cmd.Name.GET_ELEMENT_TEXT, get('/session/:sessionId/element/:id/text')], + [cmd.Name.GET_ELEMENT_TAG_NAME, get('/session/:sessionId/element/:id/name')], + [cmd.Name.IS_ELEMENT_SELECTED, get('/session/:sessionId/element/:id/selected')], + [cmd.Name.IS_ELEMENT_ENABLED, get('/session/:sessionId/element/:id/enabled')], + [cmd.Name.IS_ELEMENT_DISPLAYED, get('/session/:sessionId/element/:id/displayed')], + [cmd.Name.GET_ELEMENT_LOCATION, get('/session/:sessionId/element/:id/location')], + [cmd.Name.GET_ELEMENT_SIZE, get('/session/:sessionId/element/:id/size')], + [cmd.Name.GET_ELEMENT_ATTRIBUTE, get('/session/:sessionId/element/:id/attribute/:name')], + [cmd.Name.GET_ELEMENT_VALUE_OF_CSS_PROPERTY, get('/session/:sessionId/element/:id/css/:propertyName')], + [cmd.Name.ELEMENT_EQUALS, get('/session/:sessionId/element/:id/equals/:other')], + [cmd.Name.TAKE_ELEMENT_SCREENSHOT, get('/session/:sessionId/element/:id/screenshot')], + [cmd.Name.SWITCH_TO_WINDOW, post('/session/:sessionId/window')], + [cmd.Name.MAXIMIZE_WINDOW, post('/session/:sessionId/window/:windowHandle/maximize')], + [cmd.Name.GET_WINDOW_POSITION, get('/session/:sessionId/window/:windowHandle/position')], + [cmd.Name.SET_WINDOW_POSITION, post('/session/:sessionId/window/:windowHandle/position')], + [cmd.Name.GET_WINDOW_SIZE, get('/session/:sessionId/window/:windowHandle/size')], + [cmd.Name.SET_WINDOW_SIZE, post('/session/:sessionId/window/:windowHandle/size')], + [cmd.Name.SWITCH_TO_FRAME, post('/session/:sessionId/frame')], + [cmd.Name.GET_PAGE_SOURCE, get('/session/:sessionId/source')], + [cmd.Name.GET_TITLE, get('/session/:sessionId/title')], + [cmd.Name.EXECUTE_SCRIPT, post('/session/:sessionId/execute')], + [cmd.Name.EXECUTE_ASYNC_SCRIPT, post('/session/:sessionId/execute_async')], + [cmd.Name.SCREENSHOT, get('/session/:sessionId/screenshot')], + [cmd.Name.SET_TIMEOUT, post('/session/:sessionId/timeouts')], + [cmd.Name.SET_SCRIPT_TIMEOUT, post('/session/:sessionId/timeouts/async_script')], + [cmd.Name.IMPLICITLY_WAIT, post('/session/:sessionId/timeouts/implicit_wait')], + [cmd.Name.MOVE_TO, post('/session/:sessionId/moveto')], + [cmd.Name.CLICK, post('/session/:sessionId/click')], + [cmd.Name.DOUBLE_CLICK, post('/session/:sessionId/doubleclick')], + [cmd.Name.MOUSE_DOWN, post('/session/:sessionId/buttondown')], + [cmd.Name.MOUSE_UP, post('/session/:sessionId/buttonup')], + [cmd.Name.MOVE_TO, post('/session/:sessionId/moveto')], + [cmd.Name.SEND_KEYS_TO_ACTIVE_ELEMENT, post('/session/:sessionId/keys')], + [cmd.Name.TOUCH_SINGLE_TAP, post('/session/:sessionId/touch/click')], + [cmd.Name.TOUCH_DOUBLE_TAP, post('/session/:sessionId/touch/doubleclick')], + [cmd.Name.TOUCH_DOWN, post('/session/:sessionId/touch/down')], + [cmd.Name.TOUCH_UP, post('/session/:sessionId/touch/up')], + [cmd.Name.TOUCH_MOVE, post('/session/:sessionId/touch/move')], + [cmd.Name.TOUCH_SCROLL, post('/session/:sessionId/touch/scroll')], + [cmd.Name.TOUCH_LONG_PRESS, post('/session/:sessionId/touch/longclick')], + [cmd.Name.TOUCH_FLICK, post('/session/:sessionId/touch/flick')], + [cmd.Name.ACCEPT_ALERT, post('/session/:sessionId/accept_alert')], + [cmd.Name.DISMISS_ALERT, post('/session/:sessionId/dismiss_alert')], + [cmd.Name.GET_ALERT_TEXT, get('/session/:sessionId/alert_text')], + [cmd.Name.SET_ALERT_TEXT, post('/session/:sessionId/alert_text')], + [cmd.Name.GET_LOG, post('/session/:sessionId/log')], + [cmd.Name.GET_AVAILABLE_LOG_TYPES, get('/session/:sessionId/log/types')], + [cmd.Name.GET_SESSION_LOGS, post('/logs')], + [cmd.Name.UPLOAD_FILE, post('/session/:sessionId/file')], +]); + + +/** + * A basic HTTP client used to send messages to a remote end. + */ +class HttpClient { + /** + * @param {string} serverUrl URL for the WebDriver server to send commands to. + * @param {http.Agent=} opt_agent The agent to use for each request. + * Defaults to `http.globalAgent`. + * @param {?string=} opt_proxy The proxy to use for the connection to the + * server. Default is to use no proxy. + */ + constructor(serverUrl, opt_agent, opt_proxy) { + let parsedUrl = url.parse(serverUrl); + if (!parsedUrl.hostname) { + throw new Error('Invalid server URL: ' + serverUrl); + } + + /** @private {http.Agent} */ + this.agent_ = opt_agent || null; + + /** @private {?string} */ + this.proxy_ = opt_proxy || null; + + /** + * Base options for each request. + * @private {{auth: (?string|undefined), + * host: string, + * path: (?string|undefined), + * port: (?string|undefined)}} + */ + this.options_ = { + auth: parsedUrl.auth, + host: parsedUrl.hostname, + path: parsedUrl.pathname, + port: parsedUrl.port + }; + } + + /** + * Sends a request to the server. The client will automatically follow any + * redirects returned by the server, fulfilling the returned promise with the + * final response. + * + * @param {!HttpRequest} httpRequest The request to send. + * @return {!promise.Promise} A promise that will be fulfilled + * with the server's response. + */ + send(httpRequest) { + var data; + + let headers = {}; + httpRequest.headers.forEach(function(value, name) { + headers[name] = value; + }); + + headers['Content-Length'] = 0; + if (httpRequest.method == 'POST' || httpRequest.method == 'PUT') { + data = JSON.stringify(httpRequest.data); + headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + headers['Content-Type'] = 'application/json;charset=UTF-8'; + } + + var path = this.options_.path; + if (path[path.length - 1] === '/' && httpRequest.path[0] === '/') { + path += httpRequest.path.substring(1); + } else { + path += httpRequest.path; + } + + var options = { + method: httpRequest.method, + auth: this.options_.auth, + host: this.options_.host, + port: this.options_.port, + path: path, + headers: headers + }; + + if (this.agent_) { + options.agent = this.agent_; + } + + var proxy = this.proxy_; + return new promise.Promise(function(fulfill, reject) { + sendRequest(options, fulfill, reject, data, proxy); + }); + } +} + + +/** + * Sends a single HTTP request. + * @param {!Object} options The request options. + * @param {function(!HttpResponse)} onOk The function to call if the + * request succeeds. + * @param {function(!Error)} onError The function to call if the request fails. + * @param {?string=} opt_data The data to send with the request. + * @param {?string=} opt_proxy The proxy server to use for the request. + */ +function sendRequest(options, onOk, onError, opt_data, opt_proxy) { + var host = options.host; + var port = options.port; + + if (opt_proxy) { + var proxy = url.parse(opt_proxy); + + options.headers['Host'] = options.host; + options.host = proxy.hostname; + options.port = proxy.port; + + if (proxy.auth) { + options.headers['Proxy-Authorization'] = + 'Basic ' + new Buffer(proxy.auth).toString('base64'); + } + } + + var request = http.request(options, function(response) { + if (response.statusCode == 302 || response.statusCode == 303) { + try { + var location = url.parse(response.headers['location']); + } catch (ex) { + onError(Error( + 'Failed to parse "Location" header for server redirect: ' + + ex.message + '\nResponse was: \n' + + new HttpResponse(response.statusCode, response.headers, ''))); + return; + } + + if (!location.hostname) { + location.hostname = host; + location.port = port; + } + + request.abort(); + sendRequest({ + method: 'GET', + host: location.hostname, + path: location.pathname + (location.search || ''), + port: location.port, + headers: { + 'Accept': 'application/json; charset=utf-8' + } + }, onOk, onError, undefined, opt_proxy); + return; + } + + var body = []; + response.on('data', body.push.bind(body)); + response.on('end', function() { + var resp = new HttpResponse( + /** @type {number} */(response.statusCode), + /** @type {!Object} */(response.headers), + body.join('').replace(/\0/g, '')); + onOk(resp); + }); + }); + + request.on('error', function(e) { + if (e.code === 'ECONNRESET') { + setTimeout(function() { + sendRequest(options, onOk, onError, opt_data, opt_proxy); + }, 15); + } else { + var message = e.message; + if (e.code) { + message = e.code + ' ' + message; + } + onError(new Error(message)); + } + }); + + if (opt_data) { + request.write(opt_data); + } + + request.end(); +} + + +/** + * A command executor that communicates with the server using HTTP + JSON. + * @implements {cmd.Executor} + */ +class Executor { + /** + * @param {!HttpClient} client The client to use for sending requests to the + * server. + */ + constructor(client) { + /** @private {!HttpClient} */ + this.client_ = client; + + /** @private {Map} */ + this.customCommands_ = null; + + /** @private {!logging.Logger} */ + this.log_ = logging.getLogger('webdriver.http.Executor'); + } + + /** + * Defines a new command for use with this executor. When a command is sent, + * the {@code path} will be preprocessed using the command's parameters; any + * path segments prefixed with ":" will be replaced by the parameter of the + * same name. For example, given "/person/:name" and the parameters + * "{name: 'Bob'}", the final command path will be "/person/Bob". + * + * @param {string} name The command name. + * @param {string} method The HTTP method to use when sending this command. + * @param {string} path The path to send the command to, relative to + * the WebDriver server's command root and of the form + * "/path/:variable/segment". + */ + defineCommand(name, method, path) { + if (!this.customCommands_) { + this.customCommands_ = new Map; + } + this.customCommands_.set(name, {method, path}); + } + + /** @override */ + execute(command) { + let resource = + (this.customCommands_ && this.customCommands_.get(command.getName())) + || COMMAND_MAP.get(command.getName()); + if (!resource) { + throw new error.UnknownCommandError( + 'Unrecognized command: ' + command.getName()); + } + + let parameters = command.getParameters(); + let path = buildPath(resource.path, parameters); + let request = new HttpRequest(resource.method, path, parameters); + + let log = this.log_; + log.finer(() => '>>>\n' + request); + return this.client_.send(request).then(function(response) { + log.finer(() => '<<<\n' + response); + return parseHttpResponse(/** @type {!HttpResponse} */ (response)); + }); + } +} + + +/** + * Callback used to parse {@link HttpResponse} objects from a + * {@link HttpClient}. + * @param {!HttpResponse} httpResponse The HTTP response to parse. + * @return {!Object} The parsed response. + */ +function parseHttpResponse(httpResponse) { + try { + return /** @type {!Object} */ (JSON.parse(httpResponse.body)); + } catch (ignored) { + // Whoops, looks like the server sent us a malformed response. We'll need + // to manually build a response object based on the response code. + } + + let response = { + 'status': error.ErrorCode.SUCCESS, + 'value': httpResponse.body.replace(/\r\n/g, '\n') + }; + + if (httpResponse.status >= 400) { + // 404 represents an unknown command; anything else is a generic unknown + // error. + response['status'] = httpResponse.status == 404 ? + error.ErrorCode.UNKNOWN_COMMAND : + error.ErrorCode.UNKNOWN_ERROR; + } + + return response; +} + + +/** + * Builds a fully qualified path using the given set of command parameters. Each + * path segment prefixed with ':' will be replaced by the value of the + * corresponding parameter. All parameters spliced into the path will be + * removed from the parameter map. + * @param {string} path The original resource path. + * @param {!Object<*>} parameters The parameters object to splice into the path. + * @return {string} The modified path. + */ +function buildPath(path, parameters) { + let pathParameters = path.match(/\/:(\w+)\b/g); + if (pathParameters) { + for (let i = 0; i < pathParameters.length; ++i) { + let key = pathParameters[i].substring(2); // Trim the /: + if (key in parameters) { + let value = parameters[key]; + // TODO: move webdriver.WebElement.ELEMENT definition to a + // common file so we can reference it here without pulling in all of + // webdriver.WebElement's dependencies. + if (value && value['ELEMENT']) { + // When inserting a WebElement into the URL, only use its ID value, + // not the full JSON. + value = value['ELEMENT']; + } + path = path.replace(pathParameters[i], '/' + value); + delete parameters[key]; + } else { + throw new error.InvalidArgumentError( + 'Missing required parameter: ' + key); + } + } + } + return path; +} + + +// PUBLIC API + +exports.Executor = Executor; +exports.HttpClient = HttpClient; +exports.Request = HttpRequest; +exports.Response = HttpResponse; +exports.buildPath = buildPath; // Exported for testing. diff --git a/www/node_modules/selenium-webdriver/http/util.js b/www/node_modules/selenium-webdriver/http/util.js new file mode 100644 index 0000000..88a06d6 --- /dev/null +++ b/www/node_modules/selenium-webdriver/http/util.js @@ -0,0 +1,135 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Various HTTP utilities. + */ + +'use strict'; + +const error = require('../error'), + Executor = require('./index').Executor, + HttpClient = require('./index').HttpClient, + HttpRequest = require('./index').Request, + Command = require('../lib/command').Command, + CommandName = require('../lib/command').Name, + promise = require('../lib/promise'); + + + +/** + * Queries a WebDriver server for its current status. + * @param {string} url Base URL of the server to query. + * @return {!promise.Promise.} A promise that resolves with + * a hash of the server status. + */ +function getStatus(url) { + var client = new HttpClient(url); + var executor = new Executor(client); + var command = new Command(CommandName.GET_SERVER_STATUS); + return executor.execute(command).then(function(responseObj) { + error.checkLegacyResponse(responseObj); + return responseObj['value']; + }); +} + + +// PUBLIC API + + +/** + * Queries a WebDriver server for its current status. + * @param {string} url Base URL of the server to query. + * @return {!promise.Promise.} A promise that resolves with + * a hash of the server status. + */ +exports.getStatus = getStatus; + + +/** + * Waits for a WebDriver server to be healthy and accepting requests. + * @param {string} url Base URL of the server to query. + * @param {number} timeout How long to wait for the server. + * @return {!promise.Promise} A promise that will resolve when the + * server is ready. + */ +exports.waitForServer = function(url, timeout) { + var ready = promise.defer(), + start = Date.now(); + checkServerStatus(); + return ready.promise; + + function checkServerStatus() { + return getStatus(url).then(ready.fulfill, onError); + } + + function onError() { + if (Date.now() - start > timeout) { + ready.reject( + Error('Timed out waiting for the WebDriver server at ' + url)); + } else { + setTimeout(function() { + if (ready.isPending()) { + checkServerStatus(); + } + }, 50); + } + } +}; + + +/** + * Polls a URL with GET requests until it returns a 2xx response or the + * timeout expires. + * @param {string} url The URL to poll. + * @param {number} timeout How long to wait, in milliseconds. + * @return {!promise.Promise} A promise that will resolve when the + * URL responds with 2xx. + */ +exports.waitForUrl = function(url, timeout) { + var client = new HttpClient(url), + request = new HttpRequest('GET', ''), + ready = promise.defer(), + start = Date.now(); + testUrl(); + return ready.promise; + + function testUrl() { + client.send(request).then(onResponse, onError); + } + + function onError() { + if (Date.now() - start > timeout) { + ready.reject(Error( + 'Timed out waiting for the URL to return 2xx: ' + url)); + } else { + setTimeout(function() { + if (ready.isPending()) { + testUrl(); + } + }, 50); + } + } + + function onResponse(response) { + if (!ready.isPending()) return; + if (response.status > 199 && response.status < 300) { + return ready.fulfill(); + } + onError(); + } +}; diff --git a/www/node_modules/selenium-webdriver/ie.js b/www/node_modules/selenium-webdriver/ie.js new file mode 100644 index 0000000..a892094 --- /dev/null +++ b/www/node_modules/selenium-webdriver/ie.js @@ -0,0 +1,444 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for Microsoft's + * Internet Explorer. Before using the IEDriver, you must download the latest + * [IEDriverServer](http://selenium-release.storage.googleapis.com/index.html) + * and place it on your + * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). You must also apply + * the system configuration outlined on the Selenium project + * [wiki](https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver) + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const executors = require('./executors'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + promise = require('./lib/promise'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +const IEDRIVER_EXE = 'IEDriverServer.exe'; + + + +/** + * IEDriverServer logging levels. + * @enum {string} + */ +const Level = { + FATAL: 'FATAL', + ERROR: 'ERROR', + WARN: 'WARN', + INFO: 'INFO', + DEBUG: 'DEBUG', + TRACE: 'TRACE' +}; + + + +/** + * Option keys: + * https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#ie-specific + * @enum {string} + */ +const Key = { + IGNORE_PROTECTED_MODE_SETTINGS: 'ignoreProtectedModeSettings', + IGNORE_ZOOM_SETTING: 'ignoreZoomSetting', + INITIAL_BROWSER_URL: 'initialBrowserUrl', + ENABLE_PERSISTENT_HOVER: 'enablePersistentHover', + ENABLE_ELEMENT_CACHE_CLEANUP: 'enableElementCacheCleanup', + REQUIRE_WINDOW_FOCUS: 'requireWindowFocus', + BROWSER_ATTACH_TIMEOUT: 'browserAttachTimeout', + FORCE_CREATE_PROCESS: 'ie.forceCreateProcessApi', + BROWSER_COMMAND_LINE_SWITCHES: 'ie.browserCommandLineSwitches', + USE_PER_PROCESS_PROXY: 'ie.usePerProcessProxy', + ENSURE_CLEAN_SESSION: 'ie.ensureCleanSession', + LOG_FILE: 'logFile', + LOG_LEVEL: 'logLevel', + HOST: 'host', + EXTRACT_PATH: 'extractPath', + SILENT: 'silent' +}; + + +/** + * Class for managing IEDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object<(boolean|number|string|!Array)>} */ + this.options_ = {}; + + /** @private {(capabilities.ProxyConfig|null)} */ + this.proxy_ = null; + } + + /** + * Extracts the IEDriver specific options from the given capabilities + * object. + * @param {!capabilities.Capabilities} caps The capabilities object. + * @return {!Options} The IEDriver options. + */ + static fromCapabilities(caps) { + var options = new Options(); + var map = options.options_; + + Object.keys(Key).forEach(function(key) { + key = Key[key]; + if (caps.has(key)) { + map[key] = caps.get(key); + } + }); + + if (caps.has(capabilities.Capability.PROXY)) { + options.setProxy(caps.get(capabilities.Capability.PROXY)); + } + + return options; + } + + /** + * Whether to disable the protected mode settings check when the session is + * created. Disbling this setting may lead to significant instability as the + * browser may become unresponsive/hang. Only "best effort" support is provided + * when using this capability. + * + * For more information, refer to the IEDriver's + * [required system configuration](http://goo.gl/eH0Yi3). + * + * @param {boolean} ignoreSettings Whether to ignore protected mode settings. + * @return {!Options} A self reference. + */ + introduceFlakinessByIgnoringProtectedModeSettings(ignoreSettings) { + this.options_[Key.IGNORE_PROTECTED_MODE_SETTINGS] = !!ignoreSettings; + return this; + } + + /** + * Indicates whether to skip the check that the browser's zoom level is set to + * 100%. + * + * @param {boolean} ignore Whether to ignore the browser's zoom level settings. + * @return {!Options} A self reference. + */ + ignoreZoomSetting(ignore) { + this.options_[Key.IGNORE_ZOOM_SETTING] = !!ignore; + return this; + } + + /** + * Sets the initial URL loaded when IE starts. This is intended to be used with + * {@link #ignoreProtectedModeSettings} to allow the user to initialize IE in + * the proper Protected Mode zone. Setting this option may cause browser + * instability or flaky and unresponsive code. Only "best effort" support is + * provided when using this option. + * + * @param {string} url The initial browser URL. + * @return {!Options} A self reference. + */ + initialBrowserUrl(url) { + this.options_[Key.INITIAL_BROWSER_URL] = url; + return this; + } + + /** + * Configures whether to enable persistent mouse hovering (true by default). + * Persistent hovering is achieved by continuously firing mouse over events at + * the last location the mouse cursor has been moved to. + * + * @param {boolean} enable Whether to enable persistent hovering. + * @return {!Options} A self reference. + */ + enablePersistentHover(enable) { + this.options_[Key.ENABLE_PERSISTENT_HOVER] = !!enable; + return this; + } + + /** + * Configures whether the driver should attempt to remove obsolete + * {@linkplain webdriver.WebElement WebElements} from its internal cache on + * page navigation (true by default). Disabling this option will cause the + * driver to run with a larger memory footprint. + * + * @param {boolean} enable Whether to enable element reference cleanup. + * @return {!Options} A self reference. + */ + enableElementCacheCleanup(enable) { + this.options_[Key.ENABLE_ELEMENT_CACHE_CLEANUP] = !!enable; + return this; + } + + /** + * Configures whether to require the IE window to have input focus before + * performing any user interactions (i.e. mouse or keyboard events). This + * option is disabled by default, but delivers much more accurate interaction + * events when enabled. + * + * @param {boolean} require Whether to require window focus. + * @return {!Options} A self reference. + */ + requireWindowFocus(require) { + this.options_[Key.REQUIRE_WINDOW_FOCUS] = !!require; + return this; + } + + /** + * Configures the timeout, in milliseconds, that the driver will attempt to + * located and attach to a newly opened instance of Internet Explorer. The + * default is zero, which indicates waiting indefinitely. + * + * @param {number} timeout How long to wait for IE. + * @return {!Options} A self reference. + */ + browserAttachTimeout(timeout) { + this.options_[Key.BROWSER_ATTACH_TIMEOUT] = Math.max(timeout, 0); + return this; + } + + /** + * Configures whether to launch Internet Explorer using the CreateProcess API. + * If this option is not specified, IE is launched using IELaunchURL, if + * available. For IE 8 and above, this option requires the TabProcGrowth + * registry value to be set to 0. + * + * @param {boolean} force Whether to use the CreateProcess API. + * @return {!Options} A self reference. + */ + forceCreateProcessApi(force) { + this.options_[Key.FORCE_CREATE_PROCESS] = !!force; + return this; + } + + /** + * Specifies command-line switches to use when launching Internet Explorer. + * This is only valid when used with {@link #forceCreateProcessApi}. + * + * @param {...(string|!Array.)} var_args The arguments to add. + * @return {!Options} A self reference. + */ + addArguments(var_args) { + var args = this.options_[Key.BROWSER_COMMAND_LINE_SWITCHES] || []; + args = args.concat.apply(args, arguments); + this.options_[Key.BROWSER_COMMAND_LINE_SWITCHES] = args; + return this; + } + + /** + * Configures whether proxies should be configured on a per-process basis. If + * not set, setting a {@linkplain #setProxy proxy} will configure the system + * proxy. The default behavior is to use the system proxy. + * + * @param {boolean} enable Whether to enable per-process proxy settings. + * @return {!Options} A self reference. + */ + usePerProcessProxy(enable) { + this.options_[Key.USE_PER_PROCESS_PROXY] = !!enable; + return this; + } + + /** + * Configures whether to clear the cache, cookies, history, and saved form data + * before starting the browser. _Using this capability will clear session data + * for all running instances of Internet Explorer, including those started + * manually._ + * + * @param {boolean} cleanSession Whether to clear all session data on startup. + * @return {!Options} A self reference. + */ + ensureCleanSession(cleanSession) { + this.options_[Key.ENSURE_CLEAN_SESSION] = !!cleanSession; + return this; + } + + /** + * Sets the path to the log file the driver should log to. + * @param {string} file The log file path. + * @return {!Options} A self reference. + */ + setLogFile(file) { + this.options_[Key.LOG_FILE] = file; + return this; + } + + /** + * Sets the IEDriverServer's logging {@linkplain Level level}. + * @param {Level} level The logging level. + * @return {!Options} A self reference. + */ + setLogLevel(level) { + this.options_[Key.LOG_LEVEL] = level; + return this; + } + + /** + * Sets the IP address of the driver's host adapter. + * @param {string} host The IP address to use. + * @return {!Options} A self reference. + */ + setHost(host) { + this.options_[Key.HOST] = host; + return this; + } + + /** + * Sets the path of the temporary data directory to use. + * @param {string} path The log file path. + * @return {!Options} A self reference. + */ + setExtractPath(path) { + this.options_[Key.EXTRACT_PATH] = path; + return this; + } + + /** + * Sets whether the driver should start in silent mode. + * @param {boolean} silent Whether to run in silent mode. + * @return {!Options} A self reference. + */ + silent(silent) { + this.options_[Key.SILENT] = silent; + return this; + } + + /** + * Sets the proxy settings for the new session. + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts this options instance to a {@link capabilities.Capabilities} + * object. + * @param {capabilities.Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!capabilities.Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || capabilities.Capabilities.ie(); + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + Object.keys(this.options_).forEach(function(key) { + caps.set(key, this.options_[key]); + }, this); + return caps; + } +} + + +function createServiceFromCapabilities(capabilities) { + if (process.platform !== 'win32') { + throw Error( + 'The IEDriver may only be used on Windows, but you appear to be on ' + + process.platform + '. Did you mean to run against a remote ' + + 'WebDriver server?'); + } + + let exe = io.findInPath(IEDRIVER_EXE, true); + if (!exe || !fs.existsSync(exe)) { + throw Error( + `${IEDRIVER_EXE} could not be found on the current PATH. Please ` + + `download the latest version of ${IEDRIVER_EXE} from ` + + 'http://selenium-release.storage.googleapis.com/index.html and ' + + 'ensure it can be found on your system PATH.'); + } + + var args = []; + if (capabilities.has(Key.HOST)) { + args.push('--host=' + capabilities.get(Key.HOST)); + } + if (capabilities.has(Key.LOG_FILE)) { + args.push('--log-file=' + capabilities.get(Key.LOG_FILE)); + } + if (capabilities.has(Key.LOG_LEVEL)) { + args.push('--log-level=' + capabilities.get(Key.LOG_LEVEL)); + } + if (capabilities.has(Key.EXTRACT_PATH)) { + args.push('--extract-path=' + capabilities.get(Key.EXTRACT_PATH)); + } + if (capabilities.get(Key.SILENT)) { + args.push('--silent'); + } + + var port = portprober.findFreePort(); + return new remote.DriverService(exe, { + loopback: true, + port: port, + args: port.then(function(port) { + return args.concat('--port=' + port); + }), + stdio: 'ignore' + }); +} + + +/** + * A WebDriver client for Microsoft's Internet Explorer. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(capabilities.Capabilities|Options)=} opt_config The configuration + * options. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_flow) { + var caps = opt_config instanceof Options ? + opt_config.toCapabilities() : + (opt_config || capabilities.Capabilities.ie()); + + var service = createServiceFromCapabilities(caps); + var executor = executors.createExecutor(service.start()); + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, driver.controlFlow()); + + let boundQuit = this.quit.bind(this); + + /** @override */ + this.quit = function() { + return boundQuit().thenFinally(service.kill.bind(service)); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.Level = Level; diff --git a/www/node_modules/selenium-webdriver/index.js b/www/node_modules/selenium-webdriver/index.js new file mode 100644 index 0000000..38dfa6f --- /dev/null +++ b/www/node_modules/selenium-webdriver/index.js @@ -0,0 +1,57 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview The main user facing module. Exports WebDriver's primary + * public API and provides convenience assessors to certain sub-modules. + */ + +'use strict'; + +const builder = require('./builder'); +const error = require('./error'); +const actions = require('./lib/actions'); +const by = require('./lib/by'); +const capabilities = require('./lib/capabilities'); +const command = require('./lib/command'); +const events = require('./lib/events'); +const input = require('./lib/input'); +const logging = require('./lib/logging'); +const promise = require('./lib/promise'); +const session = require('./lib/session'); +const until = require('./lib/until'); +const webdriver = require('./lib/webdriver'); + + +exports.ActionSequence = actions.ActionSequence; +exports.Browser = capabilities.Browser; +exports.Builder = builder.Builder; +exports.Button = input.Button; +exports.By = by.By; +exports.Capabilities = capabilities.Capabilities; +exports.Capability = capabilities.Capability; +exports.EventEmitter = events.EventEmitter; +exports.FileDetector = input.FileDetector; +exports.Key = input.Key; +exports.Session = session.Session; +exports.WebDriver = webdriver.WebDriver; +exports.WebElement = webdriver.WebElement; +exports.WebElementPromise = webdriver.WebElementPromise; +exports.error = error; +exports.logging = logging; +exports.promise = promise; +exports.until = until; diff --git a/www/node_modules/selenium-webdriver/io/exec.js b/www/node_modules/selenium-webdriver/io/exec.js new file mode 100644 index 0000000..90d4232 --- /dev/null +++ b/www/node_modules/selenium-webdriver/io/exec.js @@ -0,0 +1,159 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const childProcess = require('child_process'); +const promise = require('../lib/promise'); + + +/** + * A hash with configuration options for an executed command. + * + * - `args` - Command line arguments. + * - `env` - Command environment; will inherit from the current process if + * missing. + * - `stdio` - IO configuration for the spawned server process. For more + * information, refer to the documentation of `child_process.spawn`. + * + * @typedef {{ + * args: (!Array|undefined), + * env: (!Object|undefined), + * stdio: (string|!Array| + * undefined) + * }} + */ +var Options; + + +/** + * Describes a command's termination conditions. + */ +class Result { + /** + * @param {?number} code The exit code, or {@code null} if the command did not + * exit normally. + * @param {?string} signal The signal used to kill the command, or + * {@code null}. + */ + constructor(code, signal) { + /** @type {?number} */ + this.code = code; + + /** @type {?string} */ + this.signal = signal; + } + + /** @override */ + toString() { + return `Result(code=${this.code}, signal=${this.signal})`; + } +} + + +const COMMAND_RESULT = + /** !WeakMap> */new WeakMap; +const KILL_HOOK = /** !WeakMap */new WeakMap; + +/** + * Represents a command running in a sub-process. + */ +class Command { + /** + * @param {!promise.Promise} result The command result. + * @param {function(string)} onKill The function to call when {@link #kill()} + * is called. + */ + constructor(result, onKill) { + COMMAND_RESULT.set(this, result); + KILL_HOOK.set(this, onKill); + } + + /** @return {boolean} Whether this command is still running. */ + isRunning() { + return COMMAND_RESULT.get(this).isPending(); + } + + /** + * @return {!promise.Promise} A promise for the result of this + * command. + */ + result() { + return /** @type {!promise.Promise} */(COMMAND_RESULT.get(this)); + } + + /** + * Sends a signal to the underlying process. + * @param {string=} opt_signal The signal to send; defaults to `SIGTERM`. + */ + kill(opt_signal) { + KILL_HOOK.get(this)(opt_signal || 'SIGTERM'); + } +} + + +// PUBLIC API + + +/** + * Spawns a child process. The returned {@link Command} may be used to wait + * for the process result or to send signals to the process. + * + * @param {string} command The executable to spawn. + * @param {Options=} opt_options The command options. + * @return {!Command} The launched command. + */ +module.exports = function exec(command, opt_options) { + var options = opt_options || {}; + + var proc = childProcess.spawn(command, options.args || [], { + env: options.env || process.env, + stdio: options.stdio || 'ignore' + }).once('exit', onExit); + + // This process should not wait on the spawned child, however, we do + // want to ensure the child is killed when this process exits. + proc.unref(); + process.once('exit', killCommand); + + var result = promise.defer(); + var cmd = new Command(result.promise, function(signal) { + if (!result.isPending() || !proc) { + return; // No longer running. + } + proc.kill(signal); + }); + return cmd; + + function onExit(code, signal) { + proc = null; + process.removeListener('exit', killCommand); + result.fulfill(new Result(code, signal)); + } + + function killCommand() { + process.removeListener('exit', killCommand); + proc && proc.kill('SIGTERM'); + } +}; + +// Exported to improve generated API documentation. + +module.exports.Command = Command; +/** @typedef {!Options} */ +module.exports.Options = Options; +module.exports.Result = Result; diff --git a/www/node_modules/selenium-webdriver/io/index.js b/www/node_modules/selenium-webdriver/io/index.js new file mode 100644 index 0000000..2da0670 --- /dev/null +++ b/www/node_modules/selenium-webdriver/io/index.js @@ -0,0 +1,227 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'), + path = require('path'), + rimraf = require('rimraf'), + tmp = require('tmp'); + + + +// PUBLIC API + + + +/** + * Recursively removes a directory and all of its contents. This is equivalent + * to {@code rm -rf} on a POSIX system. + * @param {string} dirPath Path to the directory to remove. + * @return {!Promise} A promise to be resolved when the operation has + * completed. + */ +exports.rmDir = function(dirPath) { + return new Promise(function(fulfill, reject) { + var numAttempts = 0; + attemptRm(); + function attemptRm() { + numAttempts += 1; + rimraf(dirPath, function(err) { + if (err) { + if (err.code === 'ENOTEMPTY' && numAttempts < 2) { + attemptRm(); + return; + } + reject(err); + } else { + fulfill(); + } + }); + } + }); +}; + + +/** + * Copies one file to another. + * @param {string} src The source file. + * @param {string} dst The destination file. + * @return {!Promise} A promise for the copied file's path. + */ +exports.copy = function(src, dst) { + return new Promise(function(fulfill, reject) { + var rs = fs.createReadStream(src); + rs.on('error', reject); + rs.on('end', () => fulfill(dst)); + + var ws = fs.createWriteStream(dst); + ws.on('error', reject); + + rs.pipe(ws); + }); +}; + + +/** + * Recursively copies the contents of one directory to another. + * @param {string} src The source directory to copy. + * @param {string} dst The directory to copy into. + * @param {(RegExp|function(string): boolean)=} opt_exclude An exclusion filter + * as either a regex or predicate function. All files matching this filter + * will not be copied. + * @return {!Promise} A promise for the destination + * directory's path once all files have been copied. + */ +exports.copyDir = function(src, dst, opt_exclude) { + var predicate = opt_exclude; + if (opt_exclude && typeof opt_exclude !== 'function') { + predicate = function(p) { + return !opt_exclude.test(p); + }; + } + + // TODO(jleyba): Make this function completely async. + if (!fs.existsSync(dst)) { + fs.mkdirSync(dst); + } + + var files = fs.readdirSync(src); + files = files.map(function(file) { + return path.join(src, file); + }); + + if (predicate) { + files = files.filter(/** @type {function(string): boolean} */(predicate)); + } + + var results = []; + files.forEach(function(file) { + var stats = fs.statSync(file); + var target = path.join(dst, path.basename(file)); + + if (stats.isDirectory()) { + if (!fs.existsSync(target)) { + fs.mkdirSync(target, stats.mode); + } + results.push(exports.copyDir(file, target, predicate)); + } else { + results.push(exports.copy(file, target)); + } + }); + + return Promise.all(results).then(() => dst); +}; + + +/** + * Tests if a file path exists. + * @param {string} aPath The path to test. + * @return {!Promise} A promise for whether the file exists. + */ +exports.exists = function(aPath) { + return new Promise(function(fulfill) { + fs.exists(aPath, fulfill); + }); +}; + + +/** + * Deletes a name from the filesystem and possibly the file it refers to. Has + * no effect if the file does not exist. + * @param {string} aPath The path to remove. + * @return {!Promise} A promise for when the file has been removed. + */ +exports.unlink = function(aPath) { + return new Promise(function(fulfill, reject) { + fs.exists(aPath, function(exists) { + if (exists) { + fs.unlink(aPath, function(err) { + err && reject(err) || fulfill(); + }); + } else { + fulfill(); + } + }); + }); +}; + + +/** + * @return {!Promise} A promise for the path to a temporary directory. + * @see https://www.npmjs.org/package/tmp + */ +exports.tmpDir = function() { + return new Promise(function(fulfill, reject) { + tmp.dir(function(error, value) { + error ? reject(error) : fulfill(value); + }); + }); +}; + + +/** + * @param {{postfix: string}=} opt_options Temporary file options. + * @return {!Promise} A promise for the path to a temporary file. + * @see https://www.npmjs.org/package/tmp + */ +exports.tmpFile = function(opt_options) { + return new Promise(function(fulfill, reject) { + let callback = function( + /** Error */err, + /** (string|undefined) */value) { + err ? reject(err) : fulfill(value); + }; + + // |tmp.file| checks arguments length to detect options rather than doing a + // truthy check, so we must only pass options if there are some to pass. + if (opt_options) { + tmp.file(opt_options, callback); + } else { + tmp.file(callback); + } + }); +}; + + +/** + * Searches the {@code PATH} environment variable for the given file. + * @param {string} file The file to locate on the PATH. + * @param {boolean=} opt_checkCwd Whether to always start with the search with + * the current working directory, regardless of whether it is explicitly + * listed on the PATH. + * @return {?string} Path to the located file, or {@code null} if it could + * not be found. + */ +exports.findInPath = function(file, opt_checkCwd) { + if (opt_checkCwd) { + var tmp = path.join(process.cwd(), file); + if (fs.existsSync(tmp)) { + return tmp; + } + } + + var dirs = process.env['PATH'].split(path.delimiter); + var found = null; + dirs.forEach(function(dir) { + var tmp = path.join(dir, file); + if (!found && fs.existsSync(tmp)) { + found = tmp; + } + }); + return found; +}; diff --git a/www/node_modules/selenium-webdriver/lib/README b/www/node_modules/selenium-webdriver/lib/README new file mode 100644 index 0000000..bdf25b0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/README @@ -0,0 +1,2 @@ +This directory contains modules internal to selenium-webdriver that are not +intended for general consumption. They may change at any time. diff --git a/www/node_modules/selenium-webdriver/lib/actions.js b/www/node_modules/selenium-webdriver/lib/actions.js new file mode 100644 index 0000000..bb94c5e --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/actions.js @@ -0,0 +1,594 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const command = require('./command'); +const input = require('./input'); +const error = require('../error'); + + +/** + * @param {!IArrayLike} args . + * @return {!Array} . + */ +function flatten(args) { + let result = []; + for (let i = 0; i < args.length; i++) { + let element = args[i]; + if (Array.isArray(element)) { + result.push.apply(result, flatten(element)); + } else { + result.push(element); + } + } + return result; +} + + +const MODIFIER_KEYS = new Set([ + input.Key.ALT, + input.Key.CONTROL, + input.Key.SHIFT, + input.Key.COMMAND +]); + + +/** + * Checks that a key is a modifier key. + * @param {!input.Key} key The key to check. + * @throws {error.InvalidArgumentError} If the key is not a modifier key. + * @private + */ +function checkModifierKey(key) { + if (!MODIFIER_KEYS.has(key)) { + throw new error.InvalidArgumentError('Not a modifier key'); + } +} + + +/** + * Class for defining sequences of complex user interactions. Each sequence + * will not be executed until {@link #perform} is called. + * + * Example: + * + * new ActionSequence(driver). + * keyDown(Key.SHIFT). + * click(element1). + * click(element2). + * dragAndDrop(element3, element4). + * keyUp(Key.SHIFT). + * perform(); + * + */ +class ActionSequence { + /** + * @param {!./webdriver.WebDriver} driver The driver that should be used to + * perform this action sequence. + */ + constructor(driver) { + /** @private {!./webdriver.WebDriver} */ + this.driver_ = driver; + + /** @private {!Array<{description: string, command: !command.Command}>} */ + this.actions_ = []; + } + + /** + * Schedules an action to be executed each time {@link #perform} is called on + * this instance. + * + * @param {string} description A description of the command. + * @param {!command.Command} command The command. + * @private + */ + schedule_(description, command) { + this.actions_.push({ + description: description, + command: command + }); + } + + /** + * Executes this action sequence. + * + * @return {!./promise.Promise} A promise that will be resolved once + * this sequence has completed. + */ + perform() { + // Make a protected copy of the scheduled actions. This will protect against + // users defining additional commands before this sequence is actually + // executed. + let actions = this.actions_.concat(); + let driver = this.driver_; + return driver.controlFlow().execute(function() { + actions.forEach(function(action) { + driver.schedule(action.command, action.description); + }); + }, 'ActionSequence.perform'); + } + + /** + * Moves the mouse. The location to move to may be specified in terms of the + * mouse's current location, an offset relative to the top-left corner of an + * element, or an element (in which case the middle of the element is used). + * + * @param {(!./webdriver.WebElement|{x: number, y: number})} location The + * location to drag to, as either another WebElement or an offset in + * pixels. + * @param {{x: number, y: number}=} opt_offset If the target {@code location} + * is defined as a {@link ./webdriver.WebElement}, this parameter defines + * an offset within that element. The offset should be specified in pixels + * relative to the top-left corner of the element's bounding box. If + * omitted, the element's center will be used as the target offset. + * @return {!ActionSequence} A self reference. + */ + mouseMove(location, opt_offset) { + let cmd = new command.Command(command.Name.MOVE_TO); + + if (typeof location.x === 'number') { + setOffset(/** @type {{x: number, y: number}} */(location)); + } else { + cmd.setParameter('element', location.getRawId()); + if (opt_offset) { + setOffset(opt_offset); + } + } + + this.schedule_('mouseMove', cmd); + return this; + + /** @param {{x: number, y: number}} offset The offset to use. */ + function setOffset(offset) { + cmd.setParameter('xoffset', offset.x || 0); + cmd.setParameter('yoffset', offset.y || 0); + } + } + + /** + * Schedules a mouse action. + * @param {string} description A simple descriptive label for the scheduled + * action. + * @param {!command.Name} commandName The name of the command. + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if the previous argument is + * provided as a button. + * @return {!ActionSequence} A self reference. + * @private + */ + scheduleMouseAction_( + description, commandName, opt_elementOrButton, opt_button) { + let button; + if (typeof opt_elementOrButton === 'number') { + button = opt_elementOrButton; + } else { + if (opt_elementOrButton) { + this.mouseMove( + /** @type {!./webdriver.WebElement} */ (opt_elementOrButton)); + } + button = opt_button !== void(0) ? opt_button : input.Button.LEFT; + } + + let cmd = new command.Command(commandName). + setParameter('button', button); + this.schedule_(description, cmd); + return this; + } + + /** + * Presses a mouse button. The mouse button will not be released until + * {@link #mouseUp} is called, regardless of whether that call is made in this + * sequence or another. The behavior for out-of-order events (e.g. mouseDown, + * click) is undefined. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).mouseDown() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + mouseDown(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('mouseDown', + command.Name.MOUSE_DOWN, opt_elementOrButton, opt_button); + } + + /** + * Releases a mouse button. Behavior is undefined for calling this function + * without a previous call to {@link #mouseDown}. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).mouseUp() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + mouseUp(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('mouseUp', + command.Name.MOUSE_UP, opt_elementOrButton, opt_button); + } + + /** + * Convenience function for performing a "drag and drop" manuever. The target + * element may be moved to the location of another element, or by an offset (in + * pixels). + * + * @param {!./webdriver.WebElement} element The element to drag. + * @param {(!./webdriver.WebElement|{x: number, y: number})} location The + * location to drag to, either as another WebElement or an offset in + * pixels. + * @return {!ActionSequence} A self reference. + */ + dragAndDrop(element, location) { + return this.mouseDown(element).mouseMove(location).mouseUp(); + } + + /** + * Clicks a mouse button. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).click() + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + click(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('click', + command.Name.CLICK, opt_elementOrButton, opt_button); + } + + /** + * Double-clicks a mouse button. + * + * If an element is provided, the mouse will first be moved to the center of + * that element. This is equivalent to: + * + * sequence.mouseMove(element).doubleClick() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + doubleClick(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('doubleClick', + command.Name.DOUBLE_CLICK, opt_elementOrButton, opt_button); + } + + /** + * Schedules a keyboard action. + * + * @param {string} description A simple descriptive label for the scheduled + * action. + * @param {!Array<(string|!input.Key)>} keys The keys to send. + * @return {!ActionSequence} A self reference. + * @private + */ + scheduleKeyboardAction_(description, keys) { + let cmd = new command.Command(command.Name.SEND_KEYS_TO_ACTIVE_ELEMENT) + .setParameter('value', keys); + this.schedule_(description, cmd); + return this; + } + + /** + * Performs a modifier key press. The modifier key is not released + * until {@link #keyUp} or {@link #sendKeys} is called. The key press will be + * targetted at the currently focused element. + * + * @param {!input.Key} key The modifier key to push. Must be one of + * {ALT, CONTROL, SHIFT, COMMAND, META}. + * @return {!ActionSequence} A self reference. + * @throws {error.InvalidArgumentError} If the key is not a valid modifier + * key. + */ + keyDown(key) { + checkModifierKey(key); + return this.scheduleKeyboardAction_('keyDown', [key]); + } + + /** + * Performs a modifier key release. The release is targetted at the currently + * focused element. + * @param {!input.Key} key The modifier key to release. Must be one of + * {ALT, CONTROL, SHIFT, COMMAND, META}. + * @return {!ActionSequence} A self reference. + * @throws {error.InvalidArgumentError} If the key is not a valid modifier + * key. + */ + keyUp(key) { + checkModifierKey(key); + return this.scheduleKeyboardAction_('keyUp', [key]); + } + + /** + * Simulates typing multiple keys. Each modifier key encountered in the + * sequence will not be released until it is encountered again. All key events + * will be targetted at the currently focused element. + * + * @param {...(string|!input.Key|!Array<(string|!input.Key)>)} var_args + * The keys to type. + * @return {!ActionSequence} A self reference. + * @throws {Error} If the key is not a valid modifier key. + */ + sendKeys(var_args) { + let keys = flatten(arguments); + return this.scheduleKeyboardAction_('sendKeys', keys); + } +} + + +/** + * Class for defining sequences of user touch interactions. Each sequence + * will not be executed until {@link #perform} is called. + * + * Example: + * + * new TouchSequence(driver). + * tapAndHold({x: 0, y: 0}). + * move({x: 3, y: 4}). + * release({x: 10, y: 10}). + * perform(); + * + */ +class TouchSequence { + /** + * @param {!./webdriver.WebDriver} driver The driver that should be used to + * perform this action sequence. + */ + constructor(driver) { + /** @private {!./webdriver.WebDriver} */ + this.driver_ = driver; + + /** @private {!Array<{description: string, command: !command.Command}>} */ + this.actions_ = []; + } + + /** + * Schedules an action to be executed each time {@link #perform} is called on + * this instance. + * @param {string} description A description of the command. + * @param {!command.Command} command The command. + * @private + */ + schedule_(description, command) { + this.actions_.push({ + description: description, + command: command + }); + } + + /** + * Executes this action sequence. + * @return {!./promise.Promise} A promise that will be resolved once + * this sequence has completed. + */ + perform() { + // Make a protected copy of the scheduled actions. This will protect against + // users defining additional commands before this sequence is actually + // executed. + let actions = this.actions_.concat(); + let driver = this.driver_; + return driver.controlFlow().execute(function() { + actions.forEach(function(action) { + driver.schedule(action.command, action.description); + }); + }, 'TouchSequence.perform'); + } + + /** + * Taps an element. + * + * @param {!./webdriver.WebElement} elem The element to tap. + * @return {!TouchSequence} A self reference. + */ + tap(elem) { + let cmd = new command.Command(command.Name.TOUCH_SINGLE_TAP). + setParameter('element', elem.getId()); + + this.schedule_('tap', cmd); + return this; + } + + /** + * Double taps an element. + * + * @param {!./webdriver.WebElement} elem The element to double tap. + * @return {!TouchSequence} A self reference. + */ + doubleTap(elem) { + let cmd = new command.Command(command.Name.TOUCH_DOUBLE_TAP). + setParameter('element', elem.getId()); + + this.schedule_('doubleTap', cmd); + return this; + } + + /** + * Long press on an element. + * + * @param {!./webdriver.WebElement} elem The element to long press. + * @return {!TouchSequence} A self reference. + */ + longPress(elem) { + let cmd = new command.Command(command.Name.TOUCH_LONG_PRESS). + setParameter('element', elem.getId()); + + this.schedule_('longPress', cmd); + return this; + } + + /** + * Touch down at the given location. + * + * @param {{x: number, y: number}} location The location to touch down at. + * @return {!TouchSequence} A self reference. + */ + tapAndHold(location) { + let cmd = new command.Command(command.Name.TOUCH_DOWN). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('tapAndHold', cmd); + return this; + } + + /** + * Move a held {@linkplain #tapAndHold touch} to the specified location. + * + * @param {{x: number, y: number}} location The location to move to. + * @return {!TouchSequence} A self reference. + */ + move(location) { + let cmd = new command.Command(command.Name.TOUCH_MOVE). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('move', cmd); + return this; + } + + /** + * Release a held {@linkplain #tapAndHold touch} at the specified location. + * + * @param {{x: number, y: number}} location The location to release at. + * @return {!TouchSequence} A self reference. + */ + release(location) { + let cmd = new command.Command(command.Name.TOUCH_UP). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('release', cmd); + return this; + } + + /** + * Scrolls the touch screen by the given offset. + * + * @param {{x: number, y: number}} offset The offset to scroll to. + * @return {!TouchSequence} A self reference. + */ + scroll(offset) { + let cmd = new command.Command(command.Name.TOUCH_SCROLL). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y); + + this.schedule_('scroll', cmd); + return this; + } + + /** + * Scrolls the touch screen, starting on `elem` and moving by the specified + * offset. + * + * @param {!./webdriver.WebElement} elem The element where scroll starts. + * @param {{x: number, y: number}} offset The offset to scroll to. + * @return {!TouchSequence} A self reference. + */ + scrollFromElement(elem, offset) { + let cmd = new command.Command(command.Name.TOUCH_SCROLL). + setParameter('element', elem.getId()). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y); + + this.schedule_('scrollFromElement', cmd); + return this; + } + + /** + * Flick, starting anywhere on the screen, at speed xspeed and yspeed. + * + * @param {{xspeed: number, yspeed: number}} speed The speed to flick in each + direction, in pixels per second. + * @return {!TouchSequence} A self reference. + */ + flick(speed) { + let cmd = new command.Command(command.Name.TOUCH_FLICK). + setParameter('xspeed', speed.xspeed). + setParameter('yspeed', speed.yspeed); + + this.schedule_('flick', cmd); + return this; + } + + /** + * Flick starting at elem and moving by x and y at specified speed. + * + * @param {!./webdriver.WebElement} elem The element where flick starts. + * @param {{x: number, y: number}} offset The offset to flick to. + * @param {number} speed The speed to flick at in pixels per second. + * @return {!TouchSequence} A self reference. + */ + flickElement(elem, offset, speed) { + let cmd = new command.Command(command.Name.TOUCH_FLICK). + setParameter('element', elem.getId()). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y). + setParameter('speed', speed); + + this.schedule_('flickElement', cmd); + return this; + } +} + + +// PUBLIC API + +exports.ActionSequence = ActionSequence; +exports.TouchSequence = TouchSequence; diff --git a/www/node_modules/selenium-webdriver/lib/by.js b/www/node_modules/selenium-webdriver/lib/by.js new file mode 100644 index 0000000..4d77b99 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/by.js @@ -0,0 +1,276 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * @fileoverview Factory methods for the supported locator strategies. + */ + +/** + * Short-hand expressions for the primary element locator strategies. + * For example the following two statements are equivalent: + * + * var e1 = driver.findElement(By.id('foo')); + * var e2 = driver.findElement({id: 'foo'}); + * + * Care should be taken when using JavaScript minifiers (such as the + * Closure compiler), as locator hashes will always be parsed using + * the un-obfuscated properties listed. + * + * @typedef {( + * {className: string}| + * {css: string}| + * {id: string}| + * {js: string}| + * {linkText: string}| + * {name: string}| + * {partialLinkText: string}| + * {tagName: string}| + * {xpath: string})} + */ +var ByHash; + + +/** + * Error thrown if an invalid character is encountered while escaping a CSS + * identifier. + * @see https://drafts.csswg.org/cssom/#serialize-an-identifier + */ +class InvalidCharacterError extends Error { + constructor() { + super(); + this.name = this.constructor.name; + } +} + + +/** + * Escapes a CSS string. + * @param {string} css the string to escape. + * @return {string} the escaped string. + * @throws {TypeError} if the input value is not a string. + * @throws {InvalidCharacterError} if the string contains an invalid character. + * @see https://drafts.csswg.org/cssom/#serialize-an-identifier + */ +function escapeCss(css) { + if (typeof css !== 'string') { + throw new TypeError('input must be a string'); + } + let ret = ''; + const n = css.length; + for (let i = 0; i < n; i++) { + const c = css.charCodeAt(i); + if (c == 0x0) { + throw new InvalidCharacterError(); + } + + if ((c >= 0x0001 && c <= 0x001F) + || c == 0x007F + || (i == 0 && c >= 0x0030 && c <= 0x0039) + || (i == 1 && c >= 0x0030 && c <= 0x0039 + && css.charCodeAt(0) == 0x002D)) { + ret += '\\' + c.toString(16); + continue; + } + + if (i == 0 && c == 0x002D && n == 1) { + ret += '\\' + css.charAt(i); + continue; + } + + if (c >= 0x0080 + || c == 0x002D // - + || c == 0x005F // _ + || (c >= 0x0030 && c <= 0x0039) // [0-9] + || (c >= 0x0041 && c <= 0x005A) // [A-Z] + || (c >= 0x0061 && c <= 0x007A)) { // [a-z] + ret += css.charAt(i); + continue; + } + + ret += '\\' + css.charAt(i); + } + return ret; +} + + +/** + * Describes a mechanism for locating an element on the page. + * @final + */ +class By { + /** + * @param {string} using the name of the location strategy to use. + * @param {string} value the value to search for. + */ + constructor(using, value) { + /** @type {string} */ + this.using = using; + + /** @type {string} */ + this.value = value; + } + + /** + * Locates elements that have a specific class name. + * + * @param {string} name The class name to search for. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes + * @see http://www.w3.org/TR/CSS2/selector.html#class-html + */ + static className(name) { + let names = name.split(/\s+/g) + .filter(s => s.length > 0) + .map(s => escapeCss(s)); + return By.css('.' + names.join('.')); + } + + /** + * Locates elements using a CSS selector. + * + * @param {string} selector The CSS selector to use. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/CSS2/selector.html + */ + static css(selector) { + return new By('css selector', selector); + } + + /** + * Locates eleemnts by the ID attribute. This locator uses the CSS selector + * `*[id="$ID"]`, _not_ `document.getElementById`. + * + * @param {string} id The ID to search for. + * @return {!By} The new locator. + */ + static id(id) { + return By.css('*[id="' + escapeCss(id) + '"]'); + } + + /** + * Locates link elements whose + * {@linkplain webdriver.WebElement#getText visible text} matches the given + * string. + * + * @param {string} text The link text to search for. + * @return {!By} The new locator. + */ + static linkText(text) { + return new By('link text', text); + } + + /** + * Locates an elements by evaluating a + * {@linkplain webdriver.WebDriver#executeScript JavaScript expression}. + * The result of this expression must be an element or list of elements. + * + * @param {!(string|Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {function(!./webdriver.WebDriver): !./promise.Promise} + * A new JavaScript-based locator function. + */ + static js(script, var_args) { + let args = Array.prototype.slice.call(arguments, 0); + return function(driver) { + return driver.executeScript.apply(driver, args); + }; + } + + /** + * Locates elements whose `name` attribute has the given value. + * + * @param {string} name The name attribute to search for. + * @return {!By} The new locator. + */ + static name(name) { + return By.css('*[name="' + escapeCss(name) + '"]'); + } + + /** + * Locates link elements whose + * {@linkplain webdriver.WebElement#getText visible text} contains the given + * substring. + * + * @param {string} text The substring to check for in a link's visible text. + * @return {!By} The new locator. + */ + static partialLinkText(text) { + return new By('partial link text', text); + } + + /** + * Locates elements with a given tag name. + * + * @param {string} name The tag name to search for. + * @return {!By} The new locator. + * @deprecated Use {@link By.css() By.css(tagName)} instead. + */ + static tagName(name) { + return By.css(name); + } + + /** + * Locates elements matching a XPath selector. Care should be taken when + * using an XPath selector with a {@link webdriver.WebElement} as WebDriver + * will respect the context in the specified in the selector. For example, + * given the selector `//div`, WebDriver will search from the document root + * regardless of whether the locator was used with a WebElement. + * + * @param {string} xpath The XPath selector to use. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/xpath/ + */ + static xpath(xpath) { + return new By('xpath', xpath); + } + + /** @override */ + toString() { + // The static By.name() overrides this.constructor.name. Shame... + return `By(${this.using}, ${this.value})`; + } +} + + +/** + * Checks if a value is a valid locator. + * @param {!(By|Function|ByHash)} locator The value to check. + * @return {!(By|Function)} The valid locator. + * @throws {TypeError} If the given value does not define a valid locator + * strategy. + */ +function check(locator) { + if (locator instanceof By || typeof locator === 'function') { + return locator; + } + for (let key in locator) { + if (locator.hasOwnProperty(key) && By.hasOwnProperty(key)) { + return By[key](locator[key]); + } + } + throw new TypeError('Invalid locator'); +} + + + +// PUBLIC API + + +exports.By = By; +exports.checkedLocator = check; diff --git a/www/node_modules/selenium-webdriver/lib/capabilities.js b/www/node_modules/selenium-webdriver/lib/capabilities.js new file mode 100644 index 0000000..d5333fe --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/capabilities.js @@ -0,0 +1,404 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * @fileoverview Defines types related to describing the capabilities of a + * WebDriver session. + */ + +const Symbols = require('./symbols'); + + +/** + * Recognized browser names. + * @enum {string} + */ +const Browser = { + ANDROID: 'android', + CHROME: 'chrome', + EDGE: 'MicrosoftEdge', + FIREFOX: 'firefox', + IE: 'internet explorer', + INTERNET_EXPLORER: 'internet explorer', + IPAD: 'iPad', + IPHONE: 'iPhone', + OPERA: 'opera', + PHANTOM_JS: 'phantomjs', + SAFARI: 'safari', + HTMLUNIT: 'htmlunit' +}; + + +/** + * Common Capability keys. + * @enum {string} + */ +const Capability = { + + /** + * Indicates whether a driver should accept all SSL certs by default. This + * capability only applies when requesting a new session. To query whether + * a driver can handle insecure SSL certs, see {@link #SECURE_SSL}. + */ + ACCEPT_SSL_CERTS: 'acceptSslCerts', + + + /** + * The browser name. Common browser names are defined in the {@link Browser} + * enum. + */ + BROWSER_NAME: 'browserName', + + /** + * Defines how elements should be scrolled into the viewport for interaction. + * This capability will be set to zero (0) if elements are aligned with the + * top of the viewport, or one (1) if aligned with the bottom. The default + * behavior is to align with the top of the viewport. + */ + ELEMENT_SCROLL_BEHAVIOR: 'elementScrollBehavior', + + /** + * Whether the driver is capable of handling modal alerts (e.g. alert, + * confirm, prompt). To define how a driver should handle alerts, + * use {@link #UNEXPECTED_ALERT_BEHAVIOR}. + */ + HANDLES_ALERTS: 'handlesAlerts', + + /** + * Key for the logging driver logging preferences. + */ + LOGGING_PREFS: 'loggingPrefs', + + /** + * Whether this session generates native events when simulating user input. + */ + NATIVE_EVENTS: 'nativeEvents', + + /** + * Describes the platform the browser is running on. Will be one of + * ANDROID, IOS, LINUX, MAC, UNIX, or WINDOWS. When requesting a + * session, ANY may be used to indicate no platform preference (this is + * semantically equivalent to omitting the platform capability). + */ + PLATFORM: 'platform', + + /** + * Describes the proxy configuration to use for a new WebDriver session. + */ + PROXY: 'proxy', + + /** Whether the driver supports changing the brower's orientation. */ + ROTATABLE: 'rotatable', + + /** + * Whether a driver is only capable of handling secure SSL certs. To request + * that a driver accept insecure SSL certs by default, use + * {@link #ACCEPT_SSL_CERTS}. + */ + SECURE_SSL: 'secureSsl', + + /** Whether the driver supports manipulating the app cache. */ + SUPPORTS_APPLICATION_CACHE: 'applicationCacheEnabled', + + /** Whether the driver supports locating elements with CSS selectors. */ + SUPPORTS_CSS_SELECTORS: 'cssSelectorsEnabled', + + /** Whether the browser supports JavaScript. */ + SUPPORTS_JAVASCRIPT: 'javascriptEnabled', + + /** Whether the driver supports controlling the browser's location info. */ + SUPPORTS_LOCATION_CONTEXT: 'locationContextEnabled', + + /** Whether the driver supports taking screenshots. */ + TAKES_SCREENSHOT: 'takesScreenshot', + + /** + * Defines how the driver should handle unexpected alerts. The value should + * be one of "accept", "dismiss", or "ignore. + */ + UNEXPECTED_ALERT_BEHAVIOR: 'unexpectedAlertBehavior', + + /** Defines the browser version. */ + VERSION: 'version' +}; + + +/** + * Describes how a proxy should be configured for a WebDriver session. + * Proxy configuration object, as defined by the WebDriver wire protocol. + * @typedef {( + * {proxyType: string}| + * {proxyType: string, + * proxyAutoconfigUrl: string}| + * {proxyType: string, + * ftpProxy: string, + * httpProxy: string, + * sslProxy: string, + * noProxy: string})} + */ +var ProxyConfig; + + +/** + * Converts a generic hash object to a map. + * @param {!Object} hash The hash object. + * @return {!Map} The converted map. + */ +function toMap(hash) { + let m = new Map; + for (let key in hash) { + if (hash.hasOwnProperty(key)) { + m.set(key, hash[key]); + } + } + return m; +} + + +/** + * Describes a set of capabilities for a WebDriver session. + */ +class Capabilities extends Map { + /** + * @param {(Capabilities|Map|Object)=} opt_other Another set of + * capabilities to initialize this instance from. + */ + constructor(opt_other) { + if (opt_other && !(opt_other instanceof Map)) { + opt_other = toMap(opt_other); + } + super(opt_other); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Android. + */ + static android() { + return new Capabilities() + .set(Capability.BROWSER_NAME, Browser.ANDROID) + .set(Capability.PLATFORM, 'ANDROID'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Chrome. + */ + static chrome() { + return new Capabilities().set(Capability.BROWSER_NAME, Browser.CHROME); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Microsoft Edge. + */ + static edge() { + return new Capabilities() + .set(Capability.BROWSER_NAME, Browser.EDGE) + .set(Capability.PLATFORM, 'WINDOWS'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Firefox. + */ + static firefox() { + return new Capabilities().set(Capability.BROWSER_NAME, Browser.FIREFOX); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Internet Explorer. + */ + static ie() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.INTERNET_EXPLORER). + set(Capability.PLATFORM, 'WINDOWS'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for iPad. + */ + static ipad() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.IPAD). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for iPhone. + */ + static iphone() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.IPHONE). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Opera. + */ + static opera() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.OPERA); + } + + /** + * @return {!Capabilities} A basic set of capabilities for PhantomJS. + */ + static phantomjs() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.PHANTOM_JS); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Safari. + */ + static safari() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.SAFARI). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for HTMLUnit. + */ + static htmlunit() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.HTMLUNIT); + } + + /** + * @return {!Capabilities} A basic set of capabilities for HTMLUnit + * with enabled Javascript. + */ + static htmlunitwithjs() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.HTMLUNIT). + set(Capability.SUPPORTS_JAVASCRIPT, true); + } + + /** + * @return {!Object} The JSON representation of this instance. + * Note, the returned object may contain nested promised values. + */ + [Symbols.serialize]() { + let ret = {}; + for (let key of this.keys()) { + let cap = this.get(key); + if (cap) { + ret[key] = cap; + } + } + return ret; + } + + /** + * Merges another set of capabilities into this instance. + * @param {!(Capabilities|Map|Object)} other The other + * set of capabilities to merge. + * @return {!Capabilities} A self reference. + */ + merge(other) { + if (!other) { + throw new TypeError('no capabilities provided for merge'); + } + + if (!(other instanceof Map)) { + other = toMap(other); + } + + for (let key of other.keys()) { + this.set(key, other.get(key)); + } + + return this; + } + + /** + * @param {string} key The capability key. + * @param {*} value The capability value. + * @return {!Capabilities} A self reference. + * @throws {TypeError} If the `key` is not a string. + * @override + */ + set(key, value) { + if (typeof key !== 'string') { + throw new TypeError('Capability keys must be strings: ' + typeof key); + } + super.set(key, value); + return this; + } + + /** + * Sets the logging preferences. Preferences may be specified as a + * {@link ./logging.Preferences} instance, or a as a map of log-type to + * log-level. + * @param {!(./logging.Preferences|Object)} prefs The logging + * preferences. + * @return {!Capabilities} A self reference. + */ + setLoggingPrefs(prefs) { + return this.set(Capability.LOGGING_PREFS, prefs); + } + + /** + * Sets the proxy configuration for this instance. + * @param {ProxyConfig} proxy The desired proxy configuration. + * @return {!Capabilities} A self reference. + */ + setProxy(proxy) { + return this.set(Capability.PROXY, proxy); + } + + /** + * Sets whether native events should be used. + * @param {boolean} enabled Whether to enable native events. + * @return {!Capabilities} A self reference. + */ + setEnableNativeEvents(enabled) { + return this.set(Capability.NATIVE_EVENTS, enabled); + } + + /** + * Sets how elements should be scrolled into view for interaction. + * @param {number} behavior The desired scroll behavior: either 0 to align + * with the top of the viewport or 1 to align with the bottom. + * @return {!Capabilities} A self reference. + */ + setScrollBehavior(behavior) { + return this.set(Capability.ELEMENT_SCROLL_BEHAVIOR, behavior); + } + + /** + * Sets the default action to take with an unexpected alert before returning + * an error. + * @param {string} behavior The desired behavior; should be "accept", + * "dismiss", or "ignore". Defaults to "dismiss". + * @return {!Capabilities} A self reference. + */ + setAlertBehavior(behavior) { + return this.set(Capability.UNEXPECTED_ALERT_BEHAVIOR, behavior); + } +} + + +// PUBLIC API + + +exports.Browser = Browser; +exports.Capabilities = Capabilities; +exports.Capability = Capability; + +/** @typedef {ProxyConfig} */ +exports.ProxyConfig = ProxyConfig; diff --git a/www/node_modules/selenium-webdriver/lib/command.js b/www/node_modules/selenium-webdriver/lib/command.js new file mode 100644 index 0000000..188167f --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/command.js @@ -0,0 +1,263 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Contains several classes for handling commands. + */ + +'use strict'; + +const promise = require('./promise'); + + +/** + * Describes a command to execute. + * @final + */ +class Command { + /** @param {string} name The name of this command. */ + constructor(name) { + /** @private {string} */ + this.name_ = name; + + /** @private {!Object<*>} */ + this.parameters_ = {}; + } + + /** @return {string} This command's name. */ + getName() { + return this.name_; + } + + /** + * Sets a parameter to send with this command. + * @param {string} name The parameter name. + * @param {*} value The parameter value. + * @return {!Command} A self reference. + */ + setParameter(name, value) { + this.parameters_[name] = value; + return this; + } + + /** + * Sets the parameters for this command. + * @param {!Object<*>} parameters The command parameters. + * @return {!Command} A self reference. + */ + setParameters(parameters) { + this.parameters_ = parameters; + return this; + } + + /** + * Returns a named command parameter. + * @param {string} key The parameter key to look up. + * @return {*} The parameter value, or undefined if it has not been set. + */ + getParameter(key) { + return this.parameters_[key]; + } + + /** + * @return {!Object<*>} The parameters to send with this command. + */ + getParameters() { + return this.parameters_; + } +} + + +/** + * Enumeration of predefined names command names that all command processors + * will support. + * @enum {string} + */ +// TODO: Delete obsolete command names. +const Name = { + GET_SERVER_STATUS: 'getStatus', + + NEW_SESSION: 'newSession', + GET_SESSIONS: 'getSessions', + DESCRIBE_SESSION: 'getSessionCapabilities', + + CLOSE: 'close', + QUIT: 'quit', + + GET_CURRENT_URL: 'getCurrentUrl', + GET: 'get', + GO_BACK: 'goBack', + GO_FORWARD: 'goForward', + REFRESH: 'refresh', + + ADD_COOKIE: 'addCookie', + GET_COOKIE: 'getCookie', + GET_ALL_COOKIES: 'getCookies', + DELETE_COOKIE: 'deleteCookie', + DELETE_ALL_COOKIES: 'deleteAllCookies', + + GET_ACTIVE_ELEMENT: 'getActiveElement', + FIND_ELEMENT: 'findElement', + FIND_ELEMENTS: 'findElements', + FIND_CHILD_ELEMENT: 'findChildElement', + FIND_CHILD_ELEMENTS: 'findChildElements', + + CLEAR_ELEMENT: 'clearElement', + CLICK_ELEMENT: 'clickElement', + SEND_KEYS_TO_ELEMENT: 'sendKeysToElement', + SUBMIT_ELEMENT: 'submitElement', + + GET_CURRENT_WINDOW_HANDLE: 'getCurrentWindowHandle', + GET_WINDOW_HANDLES: 'getWindowHandles', + GET_WINDOW_POSITION: 'getWindowPosition', + SET_WINDOW_POSITION: 'setWindowPosition', + GET_WINDOW_SIZE: 'getWindowSize', + SET_WINDOW_SIZE: 'setWindowSize', + MAXIMIZE_WINDOW: 'maximizeWindow', + + SWITCH_TO_WINDOW: 'switchToWindow', + SWITCH_TO_FRAME: 'switchToFrame', + GET_PAGE_SOURCE: 'getPageSource', + GET_TITLE: 'getTitle', + + EXECUTE_SCRIPT: 'executeScript', + EXECUTE_ASYNC_SCRIPT: 'executeAsyncScript', + + GET_ELEMENT_TEXT: 'getElementText', + GET_ELEMENT_TAG_NAME: 'getElementTagName', + IS_ELEMENT_SELECTED: 'isElementSelected', + IS_ELEMENT_ENABLED: 'isElementEnabled', + IS_ELEMENT_DISPLAYED: 'isElementDisplayed', + GET_ELEMENT_LOCATION: 'getElementLocation', + GET_ELEMENT_LOCATION_IN_VIEW: 'getElementLocationOnceScrolledIntoView', + GET_ELEMENT_SIZE: 'getElementSize', + GET_ELEMENT_ATTRIBUTE: 'getElementAttribute', + GET_ELEMENT_VALUE_OF_CSS_PROPERTY: 'getElementValueOfCssProperty', + ELEMENT_EQUALS: 'elementEquals', + + SCREENSHOT: 'screenshot', + TAKE_ELEMENT_SCREENSHOT: 'takeElementScreenshot', + IMPLICITLY_WAIT: 'implicitlyWait', + SET_SCRIPT_TIMEOUT: 'setScriptTimeout', + SET_TIMEOUT: 'setTimeout', + + ACCEPT_ALERT: 'acceptAlert', + DISMISS_ALERT: 'dismissAlert', + GET_ALERT_TEXT: 'getAlertText', + SET_ALERT_TEXT: 'setAlertValue', + + EXECUTE_SQL: 'executeSQL', + GET_LOCATION: 'getLocation', + SET_LOCATION: 'setLocation', + GET_APP_CACHE: 'getAppCache', + GET_APP_CACHE_STATUS: 'getStatus', + CLEAR_APP_CACHE: 'clearAppCache', + IS_BROWSER_ONLINE: 'isBrowserOnline', + SET_BROWSER_ONLINE: 'setBrowserOnline', + + GET_LOCAL_STORAGE_ITEM: 'getLocalStorageItem', + GET_LOCAL_STORAGE_KEYS: 'getLocalStorageKeys', + SET_LOCAL_STORAGE_ITEM: 'setLocalStorageItem', + REMOVE_LOCAL_STORAGE_ITEM: 'removeLocalStorageItem', + CLEAR_LOCAL_STORAGE: 'clearLocalStorage', + GET_LOCAL_STORAGE_SIZE: 'getLocalStorageSize', + + GET_SESSION_STORAGE_ITEM: 'getSessionStorageItem', + GET_SESSION_STORAGE_KEYS: 'getSessionStorageKey', + SET_SESSION_STORAGE_ITEM: 'setSessionStorageItem', + REMOVE_SESSION_STORAGE_ITEM: 'removeSessionStorageItem', + CLEAR_SESSION_STORAGE: 'clearSessionStorage', + GET_SESSION_STORAGE_SIZE: 'getSessionStorageSize', + + SET_SCREEN_ORIENTATION: 'setScreenOrientation', + GET_SCREEN_ORIENTATION: 'getScreenOrientation', + + // These belong to the Advanced user interactions - an element is + // optional for these commands. + CLICK: 'mouseClick', + DOUBLE_CLICK: 'mouseDoubleClick', + MOUSE_DOWN: 'mouseButtonDown', + MOUSE_UP: 'mouseButtonUp', + MOVE_TO: 'mouseMoveTo', + SEND_KEYS_TO_ACTIVE_ELEMENT: 'sendKeysToActiveElement', + + // These belong to the Advanced Touch API + TOUCH_SINGLE_TAP: 'touchSingleTap', + TOUCH_DOWN: 'touchDown', + TOUCH_UP: 'touchUp', + TOUCH_MOVE: 'touchMove', + TOUCH_SCROLL: 'touchScroll', + TOUCH_DOUBLE_TAP: 'touchDoubleTap', + TOUCH_LONG_PRESS: 'touchLongPress', + TOUCH_FLICK: 'touchFlick', + + GET_AVAILABLE_LOG_TYPES: 'getAvailableLogTypes', + GET_LOG: 'getLog', + GET_SESSION_LOGS: 'getSessionLogs', + + // Non-standard commands used by the standalone Selenium server. + UPLOAD_FILE: 'uploadFile' +}; + + + +/** + * Handles the execution of WebDriver {@link Command commands}. + * @interface + */ +class Executor { + /** + * Executes the given {@code command}. If there is an error executing the + * command, the provided callback will be invoked with the offending error. + * Otherwise, the callback will be invoked with a null Error and non-null + * response object. + * + * @param {!Command} command The command to execute. + * @return {!promise.Promise} A promise that will be fulfilled with + * the command result. + */ + execute(command) {} +} + + +/** + * Wraps a promised {@link Executor}, ensuring no commands are executed until + * the wrapped executor has been fully resolved. + * @implements {Executor} + */ +class DeferredExecutor { + /** + * @param {!promise.Promise} delegate The promised delegate, which + * may be provided by any promise-like thenable object. + */ + constructor(delegate) { + /** @override */ + this.execute = function(command) { + return delegate.then(executor => executor.execute(command)); + }; + } +} + + + +// PUBLIC API + + +exports.Command = Command; +exports.Name = Name; +exports.Executor = Executor; +exports.DeferredExecutor = DeferredExecutor; diff --git a/www/node_modules/selenium-webdriver/lib/devmode.js b/www/node_modules/selenium-webdriver/lib/devmode.js new file mode 100644 index 0000000..4862c6a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/devmode.js @@ -0,0 +1,34 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Module used to detect if scripts are loaded from the Selenium + * project repo instead of from a deployed package. + */ + +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +/** + * @const {boolean} + */ +module.exports = (function() { + let buildDescFile = path.join(__dirname, '..', '..', 'build.desc'); + return fs.existsSync(buildDescFile); +})(); diff --git a/www/node_modules/selenium-webdriver/lib/events.js b/www/node_modules/selenium-webdriver/lib/events.js new file mode 100644 index 0000000..fc5cfa6 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/events.js @@ -0,0 +1,210 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * Describes an event listener registered on an {@linkplain EventEmitter}. + */ +class Listener { + /** + * @param {!Function} fn The acutal listener function. + * @param {(Object|undefined)} scope The object in whose scope to invoke the + * listener. + * @param {boolean} oneshot Whether this listener should only be used once. + */ + constructor(fn, scope, oneshot) { + Object.defineProperties(this, { + fn: {value: fn}, + scope: {value: scope}, + oneshot: {value: oneshot} + }); + } +} + + +/** @type {!WeakMap>>} */ +const EVENTS = new WeakMap; + + +/** + * Object that can emit events for others to listen for. + */ +class EventEmitter { + /** + * Fires an event and calls all listeners. + * @param {string} type The type of event to emit. + * @param {...*} var_args Any arguments to pass to each listener. + */ + emit(type, var_args) { + let events = EVENTS.get(this); + if (!events) { + return; + } + + let args = Array.prototype.slice.call(arguments, 1); + + let listeners = events.get(type); + if (listeners) { + for (let listener of listeners) { + listener.fn.apply(listener.scope, args); + if (listener.oneshot) { + listeners.delete(listener); + } + } + } + } + + /** + * Returns a mutable list of listeners for a specific type of event. + * @param {string} type The type of event to retrieve the listeners for. + * @return {!Set} The registered listeners for the given event + * type. + */ + listeners(type) { + let events = EVENTS.get(this); + if (!events) { + events = new Map; + EVENTS.set(this, events); + } + + let listeners = events.get(type); + if (!listeners) { + listeners = new Set; + events.set(type, listeners); + } + return listeners; + } + + /** + * Registers a listener. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @param {boolean=} opt_oneshot Whether the listener should b (e removed after + * the first event is fired. + * @return {!EventEmitter} A self reference. + * @private + */ + addListener_(type, fn, opt_self, opt_oneshot) { + let listeners = this.listeners(type); + for (let listener of listeners) { + if (listener.fn === fn) { + return this; + } + } + listeners.add(new Listener(fn, opt_self || undefined, !!opt_oneshot)); + return this; + } + + /** + * Registers a listener. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + addListener(type, fn, opt_self) { + return this.addListener_(type, fn, opt_self, false); + } + + /** + * Registers a one-time listener which will be called only the first time an + * event is emitted, after which it will be removed. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + once(type, fn, opt_self) { + return this.addListener_(type, fn, opt_self, true); + } + + /** + * An alias for {@link #addListener() addListener()}. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + on(type, fn, opt_self) { + return this.addListener(type, fn, opt_self); + } + + /** + * Removes a previously registered event listener. + * @param {string} type The type of event to unregister. + * @param {!Function} listenerFn The handler function to remove. + * @return {!EventEmitter} A self reference. + */ + removeListener(type, listenerFn) { + if (typeof type !== 'string' || typeof listenerFn !== 'function') { + throw TypeError('invalid args: expected (string, function), got (' + + (typeof type) + ', ' + (typeof listenerFn) + ')'); + } + + let events = EVENTS.get(this); + if (!events) { + return this; + } + + let listeners = events.get(type); + if (!listeners) { + return this; + } + + let match; + for (let listener of listeners) { + if (listener.fn === listenerFn) { + match = listener; + break; + } + } + if (match) { + listeners.delete(match); + if (!listeners.size) { + events.delete(type); + } + } + return this; + } + + /** + * Removes all listeners for a specific type of event. If no event is + * specified, all listeners across all types will be removed. + * @param {string=} opt_type The type of event to remove listeners from. + * @return {!EventEmitter} A self reference. + */ + removeAllListeners(opt_type) { + let events = EVENTS.get(this); + if (events) { + if (typeof opt_type === 'string') { + events.delete(opt_type); + } else { + EVENTS.delete(this); + } + } + return this; + } +} + + +// PUBLIC API + + +exports.EventEmitter = EventEmitter; +exports.Listener = Listener; diff --git a/www/node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so b/www/node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so new file mode 100644 index 0000000000000000000000000000000000000000..916e530f3e1b4a9891ce378204dc75d2ee342dfd GIT binary patch literal 41262 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 R)zuhLe6{Qn1Fk}F{U3r1%dY?c literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so b/www/node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so new file mode 100644 index 0000000000000000000000000000000000000000..8e7db8de3f47e756bf6f0c20998a63df90eb5970 GIT binary patch literal 30887 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 a1Inq3y}K| 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 TU`Bk}DP=s>&OSyO<3dOp|Vo3=b3ey32! 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

          mfcxuHgp`a^~wytItMD!G5YHk zYF}(^vqV4rrGh!wBE{VWECi)l6^UfP+>>MSv?wuY;Y zr}nf)2jv~n`U9e8M()7GO~y2dhfS$IePG@9i7bzc_LVxc%Cz}GgdyEGlwj(@+q~k9lbV@g<|ZAzqQU1 zd(k7dn`>3SBVV055B}6Vl>+ug`5ybFyq5D0ti}`ipX)t1DTf!6tG&tQrfiIaBP`aM zXGw}n3&x#Xq??;pzHZ&%}rB8-gWR4NJb z@(QFI>1mSWTZq=kyn7bC-Id9b*7$mHRkaQNX)EVClG3G=L*f&mRvqhLd zMDlJ8ew@-DWV?W0`67(PrxE=DpECF|C&d|*f+G`pXi$Ib-5UPb#~%=thG&=E8vQQ@ z5q+gxxmzQD9^;=FX8~~m@NfKaPrD$0ur6SI?AGAlb)-O6}J0KQ%+9|2j?YArF9M^YrRdY6~KPl^bJg!_caFPKRMjRhU9`u}$-X zJm0~b&FHx{W>>(X1=qUalo(}+dL`ztXTpkrsk^f6YTTyjbix*- zOZk0(On?e3W0JFMq1tH7TQ^<}LUfvHBiOJCZo;9r-&k*$9##dTBcprj|S%v%g^vZ->s-n$BSE#GG9O)ci|QQHR1SZ9e$V@%%M9Eyp~&3&XJkx;}1 zvyd>5a(~V{r-)KR9mr(kAc(1zi72RS9uX}xTgdVn|H{pCrl?$EG$1EywhvwG$Ve># zM-O&rl|(w==0O#Ej0HoBL<@8uao)p+TWddoI>rJnSXD^&Ngw6>M*s!yYX4|znkDGK z-8>E#DT7Xq5&x+DLpi{)uH=5j;X!dRJZz}KlL?08IZ!s){y2;rSXV0alU2mY~VZ!(;a?IuD?(74jjgu zby&9$1*x1Xv?Ea+%>&r;GqO9XF?pf^r1+gD^Z{Dr;b)pbQs+%pxyTM7Qii4S;2P7s zLA3S3&2*L+G>EC>pd^FCR-XtI>e?vNbm5VAFChbo*+BLZdD`Xam|}7&p_8Lh@Ob(; ztxuGf?WhEUZuqD7>gkss6|K7Y%Bs7{=p;=5-3hvl5)Fi9XZog}aubvq_FA{rf2pNg zWY5$2%(7Z(B&`fi%mJIA&U%UtzO7+s*T57cLEx-BDBsr z`^Vh|wFIRaOO`j?9~}PPV7@wFb0JG=?^?2;K;)(pB0~achLC2!(|a@3bc6Z+DuFqa zLQGrOkZ_F5A_N9N!-XzF&*#&a%x|l|KROivZZvuBr7>z2Z<3|tJM8@`)Au>H&64Ob5nbVoV*>e$U-fXGIGe}e$`uGik*(LFWeq*1 zz}&_%tWml{p6q45!XNszqqB3{8jcGKS`&4L(>k=TWNwhaT)#Y8hSwGE-P{d}=F`*S z-#@Rh7H?MjDO&!FS8SzoqBo2lIR!=)H$6ai+Myn5SRbn9Yb_->`bJV=zEmF%O3=Zs`ktiZtzHw5Lx;r3+M4QdCY5$lNOM-aVQ z_edW@HVtHY9T?Gs;&2545k%r$9cbKVg)PRX#vIEO{Q3P9LcGJ)iY^E-OJSY{)@tdT zLJo#qtg%;AZ`kdW*V^xlx)o{-%j+Brj;mBUIU%!AUa@p#XXh@Do<<&k`z`u9$ zp+cqp>3Id(_bTGm8}<5!-QUV9{?h&ZL$_aE@3`0hrMy;ufcTB7)EpfQd#4qKe9}Fu zz;1*6|L7i6fOgs;2$ol?iri>$K0K%}AEUG1k1JF=8+HyVkogl|HjXu~J`ZRe+ECuO zH<3`6+znUrg4;Fq6scNWOfMbgUDyf(zE73Cv+_bmu(*0KvzfL7`4-5k#o-X3~s}sr!_XbW67DBBA? zS+0<2&4;h6-j~0vDR&x`Zq~6TdzpUp>jyqIAcYk!Y*lLrrwz`c{DWz1;=C3))}3w6 z;buG$@MEt%kygfQ2Mc8#RHQ5Mkh${2Q$V5O0jYVe*6!x?5zquZYnc;e$lq<}2Ogfi z%iF{mmZ#0QcAgq&K3AXh=m?GG-73?M-J|0o%S(RS>ijMh__wMM=RU9 zw5~Y#;-NkxlfOeIe``kt?pzs_bFb;DcQH$Fz1>pFDMISI#AV#&1*Jd|3`G;{^x%n0 ze5*C2{HGrb?OI9&(@U+Q0Of9Ml@(^?5R_O$3tI|`n6^UstrAe))yWai3ptaA<@FMv zHc<_+jFZ?Nh%C(FX~2CY)~>?DN>1_ndwAC8sRfD(d!pp!aXL>zibXF~peAmp6F6x( zaPtDhqZ#B@h^haLLblx?Rev`i+CM?(eZAI1tHsw#Vz_3RCK!5B2Im24+aE$+cA677 zZsq8~ubc;C$PPLS7rA&|C~>z<)V2{TGTUe^2ePwxHcS@sLMOr zWA|LxaA+6pD_)t;&czjVBJIryj?)$TD9>1p(EEdSPF9YAyi7#}X5CRYso9J|~ zvv-4oyHQ;Ua1#X{O)hSrsv7RXs5#kVCErwo6AaDZ-if6mYa+(M0o0D8$6$pRgGClj z9M0z%rWJ&72V`7AxoXu^sZn+7W~s}nT=VTV<*?bFI;M4ZVv@nM< zuBo8Q!Z)r3zmAQz;*>!x|9drzj|R5dwj+s_T;ZFS1cp5 zJ1ws~e$+%-UY$wAA`#!!eZcf+HwRPIe&$?=vp0Tqk4R zHXlo`w+(!8A*Nxy)ROM*uq2L__E_B2PJu6|Y*6H!2Qw(-hPHu)=1oSpr|(%2k2_^< zw{U})G&CvbLON+UHn@$p&WYSMrkV;}I?slo^qh4*j6fyredrHpKL0=1eeq5+pf|nb zkB{BXA^ewJ*^|H69rcb1>vY&X>>l;{-NP{fJN~tEd`=%K`2*YrYLJg|f4Ez_oY!13KFycv({RY3DkqKmQRPzw2%3lWf4n|Qcc$vTj9 ztFD!7?KFkxlL3Y`UZZC2T*}~!tZ_2Wsv-pDA>>J(J&fp!yc7}(TG$97y(WOA9@-n_ zgj3njLpaSp&oOUU#WwTxy6RbyAkfd||1Vu;cwi!oIwTt`i+6|&S2`E64nm3OV?lG2 zXh8QVrMoGN@b04ni*3~>t63ONbKadfPc}ikc<|Y_`($Z=gq@i^8S(tt>sN0e3QX_R zJ;6ol74wbKwshg@MAf>YD(JXVUJY~uaGWZyIqDu0DN$Z;|NQK1(6{E^#U~!BGXfup zPrwbl;Q@x~L35F##r}i|1pZ*5wxJfT$3tOxDMo^RtHx6FHi6|L62B3irAzyiSh@3* zndId|7VM>Xc&?d1HPlf~Fp+wl=(f{1oK63g_S1WK`zf!p*9o9?!%|ndMslHsCfK9k zyO?;)85KJ#zJx9t{+!ZwaQU@!7;Ild`r=wcmP0X?)1KVRdd1b2Wm&?ofpO?!&FXs(5rMNvX#Yt&XaQJbK z#jT{M8W!uMq{W4VeI`Yj>&wSa2l4*&uC?c`Azvp}}gb1vy@D z83}D6&Nz z9-*tJ>n(K#V@<08w?U?I!4|G@7wIS~B*CVzFZvdn#PAWT9_-wk@5)+SNcdNZ+1G=R zn$^Y*X9%`}ojp_nCwr5vEgc!KNuU@~8(vJV6r+V|Kyk?c5irR717d#oB*&8w)MBu2 zgHNM6I}Ei=vQD=G$hr*om+dBV5rhWnu48#e@R&kh5CCc=bJT*>j6IN|7)5UpjE-eSffxQYxalB(lcT~#_|U*nTUc&AV$C!J<&pifm6UMg@|=uV1d zWL|S21s!|+59=E#)!@a-dIxMk&y}$d=OXr1$si<8gGLS}rH+-2iK>O5G}@PB8X?zC z>F1pTXbEKUW%F}h2pMw~D_W#-k-hhX-cX{=2$CpiVw@(sqFN;aNbw=ZhLGGYvvo~^ zr%EXeLEjS`9l3ZoEZgFOAl=+F_ByA_SSN;aso#lcwR|vrMDT1Ks_p2JB8GPxMOK=! zj!&mw)0rn@G*Hu>$fNE){MR8P!k1~BN~kQ|gHejtFZjUZNt#TxbPZUV=Cba%-g^B~ zx1~7h?6k`3JS(m79BY7lHl&SRx0=Ss$)yaoUaN22r_tx>YU_47-=d`1S^(s&C4gqB z1u@ThvkrB(ZnJ+?s<=$^Y<34YDc_RC;%lSU;A4<4_h`wu3KHL9T3>!!1p_zp+K7*O z(oH9PJ%zj4tx7jhUIHR_C%p9{UJX(2u`Hz_P39htRocq9rx0)urDwU%?+AdlIkes~g##~|?|vKu@`V%yF| zC5r6hy7}SR?!F(1NA&)gX-B>;BYG67;Gu8?v<|5O6V z3iKAW^)F>B%NfWmmy!K>9e_M$+YJxDRsts@vJFV=LnT@GS|UoCtMSxIdr@2h zzzUcawe>IMtHm|nN^v;=S7@#Z$@*Rn(h*CmLNq^@19XPJYBv~Gg>sbElSDg)f4 zTxDgYO|4ii1%&>sY`wd@`sJFpzLwL+bP!kRqkXF&0o;z-nh*Z1l;dT=YBAI~&j zuQ|<@&w(b5wU5<-iJNj4F#53?u#O*8ry3ybveOdqc?CR*t^_q5+gER$E{XxK3C;s& z@5%PlCr^U2n>0A-odw6!I3=1PDLKd%4@)%Nz%BH%cKda3@DOGHx(klOC~pS6dEByV z?K}%UkX{HYu(M<(!qMw$lMB#3Xq<#pN&R#_0v z9|AInoHWQH*mywA2!oh(^aQHHQ6R>McyZ3a0MBEg$5lI?8yB*;^8dL$sg z?uWyb_+cgJW&uQ9F*0Gt_cz(CK9*_zgd7H!bJA&wjgpLz4f}-Kc_@MU6LRv*?qPIf zpHDClI^Sgs5k^G8$KlW^o@Xn9Eky!mVIk+1eade_f_;=SqLGfL^Cv;5jA#i6K!pEl zN+tjdjnJbxQsA7kkKJH2I6C{(8Fqu-C^#Jse(fE04})4~M1I$r!KdEY$HDnoKxzy- z{j=YL!BNoZ{~r9(gJ8|>Z>PiVXcP>FPlDdb>2a@13VZ#7%+~pc9;ShG)Hl^W)AiI6WVp z4n|#qz#)O#@AZ#{q#KM{Zjo+DSF>kdhmU8$ z$HDPomlW=I32u-mnD#}+b#UD2oiu~P&PnG(7h4So7&1JlM-dD@ee6OR^w=T)cW~Al z^kF0igFa+;J8P1G4$nl}PrXsM8FYq_uVMxWD{?ThrIouG$~ zVB)o!a|gqc2?1ZOn`Jtw(R{svB=3z_jJo^=+4#|qSCC5a&4A}joG4>{fo7nBNyL4p zcaS4^?93je#`^v)*<)$gF?&a?X}+K)(($=*aGa`@*(+Jw)?`=h=rKa*IQ{B(rdVa4 ziB_Sr|CIAz+lE6MxbFz5-w`@@)b&PZgI~J+aYOTtlHuaqK~Rkv*V`X=JFpdxKYb)S z@aVL2&>go{MD?nN7$MGrdq6`1ZrU+ZIIE0+0Qset3rm95_T}H-*Wd5f-)~&Bx881D zH7+jix2`sK8}H4cKQFg0xBt9sUAF$*-Tm`2*(A-#ujFatJ(MP!f7UMkt9JFY_UAt? z{_7uCPyg}f#l}xRU%mVDGT;2OwS8@(;20?2^Iwrd}g@EUNos{SyF zTIoOU!dan+Q8F;8`Ka7`5#)KQR4e35os0^lulQ-9jTiACYCFtB)4>RQwNWQXJ>w4Z zU@XX_qa@K%;@q1Ek)_7uG~jNKG?r3C7{Q)UTEA9gVE0;0 zSL}UE>D@}0;yAk({_(Vg|qNYKm ze(AnhC=ASf&Zq=Q-Ta_8Hr9t75d5#4tx<;R^1F8|Q-Miq zJx7!$kU$({Fn9w+s-o&Z!%>RzipT1dEW`If2^zib=`wvghR5rQD}G3c@SnzG?jg@6 zTzx?+R>Bt&s|u$4P3#DVNh=Ns)6l(4r$iMx@&Oc+Q{7<@P?Dv2KTQ)1SPy3(!+8SY zfkC4WqNr)@XnMGiV$QgCVlk|ie<@U^ha(SMcC^fH&xo!o`ch&6*n8Za}|NMWas&)I}Ht1dGt9r^raOq9kw9(uWsx2m^n| z2434>XH*`94v`kEFiAv5T1N5IT>or>hiQDb%%?Q917bg}oBU_JO3 zS_`*GeM<0Mz_J~c;p&PaV^g|7I2P;=$HMb;z;+i(D7L+X>h_{msQmVo z*p|dY7wo_0#^f5Gb5&UTQz7G4+>S&pNA2A-`iPDGq)VBgQn&s>d0i;AoTB-E)fk$O zQzgDRhFT;VN(@ns-456lcRP&m1s@N>kZg%sdM)RMw~Y7$S#cc5w5hZTnkQ{@ zI|JP6&dDj*MN47s*YB>VwU*v9EYmNdI|pd=IB>HSJ8x5zjU#l#7cGrocUKB|CF7Y! zTAAna=D&EVi>62`%ipb~>AUxw3l;6Nb(+1P8PKeku;1f$5;xg{*K@qgp^1*+Z&2hQ zqlVY%&<8Owq1gQpSx}#Fx?@XeKbNLCoJ~4t@}FxNm@P6&;H`ABH<4*k1W?*ef<*w7 zZWAozz(T=&xU+-`r(G+WQ0Qb0X=!KqRXq1S4)u_6EZgQnjU(ys_w?oQUj4?$36a72 zs?ipdWO(sCG?x_6wQy)ed_R6z3{UlbUB~FX@{JRr@~9jo6$izA%Wa9oqv(y9&>xin zd9v#l8M@y9$h4UM&~e5v?UeB1X{`i()1wBhrS`q9;=&Wb{}+?OTrR0h;RsQ?{Z8(4oBBC3Bpw{OTqUi zBf1nR$Cx6DOiSk9Q{EsXqiqIK2d0PW_iXEeVttFkeV(SBVZtuP3c__t+g9Mhwko$A zhO3Zy&HVA}pm(_2ZU+7Hll|@x($DS>2FKk_fA<+AsRiG--RI=<;IKRDp6$L+z;wSZ z{8=Jc7lvmK(XN>fRiC;2nB}L6&)A0a7yIYkH2w_wymLT+3EnIhh1S(B=K)QIL5|E! zI5k*?97vqoU}?s%TEm8~M-fUA7Nv&ZR49VRj~xa9iXpowR@6xjQ96ZvXlku{KEgGI zQNdNlV20}Go3K5oa~3N^o6O~Za^5P&SF&IUrcQV&jv6x;Vi)>vAcbg4A!mNL;t#PD zo=Dkg2~`c6FBf*_%@Q2Et_|Od1K-e5Lx7c8jECpK^!u=2w}n)hLR3hJhR6PN9xfj& zX{TPQYAB;=lWGy66aft(%d&;3T27?Er@JKPRR~o7NB07*M?UdUM~heN|J?9^Mo$+D zEOUo(fux^|;YstTq+V;VXm$VdymQQQ|?PO2=sb2M>X->b>u+ChGX%w|;Od1+c z$J+<4#Fq{?j#8qc+f_MH3t_xxDHwNYs#Rw5;rGkbAY;x4>iN`lEnatq^7|=x(MBqX z;xJD|e$8Ela;i7C(|xF}`#nX=H2l10z>Vkwk5vJ~PFMvjbK|QBRd7!M+$5cZce9lW zQ9CL1$l2%`B8HX_d^IHpGnfRVJzd$;Je$M$XiwuV&ew_R%Hib8LT(f<0KS(bRnm&0 z+oS6PzO7f^*kCzoKp(L)snXVVIc>a2+HPXguuc_&U0LeUCsdDGCbazL7rwcQsw@!+ zst-+7aS+L73VY;-Apgm^M%x9@Fva*WnoW>n!cu3G630PIK~C4kHsATHQ~bTi4;F>* z$1uF;u#8ZoWg4fXpE%VuE%lr#l`TQx0E11u$XLk@SRcg)2?dvGu>CWovj!Wu4=5D| zXW3wJ5+Wi0aMz=WoJwe|UaWijfQKdq_j8sA?LkSMs>uw-W>5(&YvGJwkURtwk%XnN z)Sfg@EqFTJR7@4VE5-FfH49u>2Q#G|#M3YQ>$E~oSKR&DKmRa2hrM5Si{__ZOQv6H z&EQqjp;w|kr|CJbh+8#&zyxQGZSa|szX@(cjW`(`mf&!kB|i>_|Kr5r{P?T{iKjmf zg{LkQPLIz=B`9nX6kh%q6gHhy==Do+*!poeY`Jha?v6%hA3OaLG=3szyl|kwOp7IW z6dVfb4wJjGwfw{`N42z_1nm#QZs)8!tbqB?|0c|T_F&ElKE{J{8QI_cyXgL|obZ)K z@bkZG1V8&mPz7s1`uV>B>30^=>^UGnygxXrMDmS)7xo)P*mwG6+fF!#ZRgpe5f7O` zk-gmz$)6O1!LS5@Y)Sgx`62zI@ki@lQ45aH8_#8al$uzinJ{?_n_^4a@SC2TD%mMH zzJX4b3e}%pe~DwtDht@18X!PD1_Pq*k%M2FOk*&=%x@vp5S3=c1;xNp<0sGJkS&z1*h}Q@;VSP0s%k?l=(wU4QEZcL^C4^&iar_{Mns#M1=u_6iUs(Cz0XV=q*VvcO7gqh zq*&64%cy9L3#O5~c$Lj%UEGxv9dkBz2c5GjDB-T)!ic)fm14wQ1J&IWljtZ)oAwZ`E$L%j z6Eh#OiwM)l!hweeDzaC6zv1Z_7>17etkdg{s*M}-3_p%1oXVl@#S0$d!Ht1H9bm4zv0#os?Jtg5av8_2V@&<1RmzzI`Vgxo{)3RQhC(aj8PJfMc08dTE&B^GvM`F3nEv=y;w-c zol2YJEOhUXYwpxcq|lB>RU|BUoEHj|wqK6Hn%KcK8hqC?7KmHPgD!;uq~4HNK$LCq?b0oty73$P2aBfRxoPCNm<@pj2Ou6i z@;UaUW?~^WO~@_9_o0dd{r3-X%`wr$eCNYn#lhu^FiyAbmeayfI$6|Q8V-a8!;{W& z@Bekjh*lMpvgK_!oBk`^Ld1R;=|e5zs@TO#nGH+96w26a7B2Gi)6H~6Nl33I=;-MM zQ>D>5CBwQR$#r^QAuAPdpe|cw8jqjQLY;meXsV8%&b*37XGy!$!KeqRnkyjBGZ8;l zzN+$2H6JpWI3!AR6*X;1lxVl6w!YGcuzX76=&Un58;v1{bp^EYRk&Q`TafYn$DcLZ=D`}XZ-vwqqJ_#ETS5_x_0PS!!H{~C1!>?d;XgBz6U}TyXpnr8VW{+V@ z5WAjg<~XHy&2>*}0j}TlVu#uk(d+e;Mp$G;ULdFMLAq@n@ z6u5(leu=xa!!vi$RIJLFW4!TVO0kqRV$l2DqrtF><{?K-qgDT>h8>m-J9G`Z&D@yz za8D|Y@b)|QC@oipuFI-{8n6o6^xzxwNP=`v{mEHAQE$B68bWFwToTiqbT;htN5`GB zDl@!VhVy(zet)+dbIxw;nq4j*64$iDje!z*(cVjfpWskKrF9}Rj`NIWaSPs<>8wN) z!USG_!A#lp@M3a>wi;2Tp-L|*%Z$DvM_)X(7XyMKxh(vq-Bn5Cy)VD6wX2|F>NuZM^9H0EV5SikHuKFj)nuxOWSJ&r zRJsua&!>ZmT?lAFiprlJy2uJR7W}#A#6w;}-a1kd+sZa`kC6nIv5buVddBqPK3Q(5 z;(O1P6_f9V#9kpOfz-EdQ611KcmhDH0GcVT01EuTCKq3=4JsZB{i{S>O|{aq{L?Cq z`SQ8Vc=j0SmIBO$5=PnBcbY<-0Ufi*2ZUkdb^l=B*Z2HDyj+7{=MKHb+Nkqo!4+BH z3i8EpF{~TF_SElafjM7J$HLxY8q3TMTOZF(sI^lV%-oo{Dgr;=tX7NN?d|*f`_}#Q zR<^v}-g*1>?eFtek ziVP~GS?uK`40|+zf>Q9v$*{dKlxa2vtb@*#M3n91;fKV#FNY`)ErVRXif{;0?$zDI zsKmAG7~z1h8Ps-b4ZchrH1Xxxs4V*EAw#ZOjE|QYKHLJ1cI%aI^z-`SjrQ#r;Cd5- zO%&#iu~CtR?8Je{tKWVID0Uh;8Y_=ft`I2KjE7?0RBFj_(I zPyLo$Rof!x67-L$e5pgzfVNe_y=(4%*dqBKpJS`v@@cl3{E(UE6Xd)^^Gr?=Cgt

          %Ilg1ZSh(=OeJVRY13*(US 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

          SaB(zU{3;MZj?T>TLKR&^@&^+7&;(+mO>)p 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 q5iku>5==a@mVw9+IlQ`) to detect when the entered key + * sequence defines the path to a file. + * + * By default, {@linkplain ./webelement.WebElement WebElement's} will enter all + * key sequences exactly as entered. You may set a + * {@linkplain ./webdriver.WebDriver#setFileDetector file detector} on the + * parent WebDriver instance to define custom behavior for handling file + * elements. Of particular note is the + * {@link selenium-webdriver/remote.FileDetector}, which should be used when + * running against a remote + * [Selenium Server](http://docs.seleniumhq.org/download/). + */ +class FileDetector { + + /** + * Handles the file specified by the given path, preparing it for use with + * the current browser. If the path does not refer to a valid file, it will + * be returned unchanged, otherwisee a path suitable for use with the current + * browser will be returned. + * + * This default implementation is a no-op. Subtypes may override this function + * for custom tailored file handling. + * + * @param {!./webdriver.WebDriver} driver The driver for the current browser. + * @param {string} path The path to process. + * @return {!./promise.Promise} A promise for the processed file + * path. + * @package + */ + handleFile(driver, path) { + return promise.fulfilled(path); + } +} + + +// PUBLIC API + + +exports.Button = Button; +exports.Key = Key; +exports.FileDetector = FileDetector; diff --git a/www/node_modules/selenium-webdriver/lib/logging.js b/www/node_modules/selenium-webdriver/lib/logging.js new file mode 100644 index 0000000..6bdee3e --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/logging.js @@ -0,0 +1,668 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * @fileoverview Defines WebDriver's logging system. The logging system is + * broken into major components: local and remote logging. + * + * The local logging API, which is anchored by the {@linkplain Logger} class is + * similar to Java's logging API. Loggers, retrieved by + * {@linkplain #getLogger getLogger(name)}, use hierarchical, dot-delimited + * namespaces (e.g. "" > "webdriver" > "webdriver.logging"). Recorded log + * messages are represented by the {@linkplain Entry} class. You can capture log + * records by {@linkplain Logger#addHandler attaching} a handler function to the + * desired logger. For convenience, you can quickly enable logging to the + * console by simply calling {@linkplain #installConsoleHandler + * installConsoleHandler}. + * + * The [remote logging API](https://github.com/SeleniumHQ/selenium/wiki/Logging) + * allows you to retrieve logs from a remote WebDriver server. This API uses the + * {@link Preferences} class to define desired log levels prior to creating + * a WebDriver session: + * + * var prefs = new logging.Preferences(); + * prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + * + * var caps = Capabilities.chrome(); + * caps.setLoggingPrefs(prefs); + * // ... + * + * Remote log entries, also represented by the {@link Entry} class, may be + * retrieved via {@link webdriver.WebDriver.Logs}: + * + * driver.manage().logs().get(logging.Type.BROWSER) + * .then(function(entries) { + * entries.forEach(function(entry) { + * console.log('[%s] %s', entry.level.name, entry.message); + * }); + * }); + * + * **NOTE:** Only a few browsers support the remote logging API (notably + * Firefox and Chrome). Firefox supports basic logging functionality, while + * Chrome exposes robust + * [performance logging](https://sites.google.com/a/chromium.org/chromedriver/logging) + * options. Remote logging is still considered a non-standard feature, and the + * APIs exposed by this module for it are non-frozen. This module will be + * updated, possibly breaking backwards-compatibility, once logging is + * officially defined by the + * [W3C WebDriver spec](http://www.w3.org/TR/webdriver/). + */ + +/** + * Defines a message level that may be used to control logging output. + * + * @final + */ +class Level { + /** + * @param {string} name the level's name. + * @param {number} level the level's numeric value. + */ + constructor(name, level) { + if (level < 0) { + throw new TypeError('Level must be >= 0'); + } + + /** @private {string} */ + this.name_ = name; + + /** @private {number} */ + this.value_ = level; + } + + /** This logger's name. */ + get name() { + return this.name_; + } + + /** The numeric log level. */ + get value() { + return this.value_; + } + + /** @override */ + toString() { + return this.name; + } +} + +/** + * Indicates no log messages should be recorded. + * @const + */ +Level.OFF = new Level('OFF', Infinity); + + +/** + * Log messages with a level of `1000` or higher. + * @const + */ +Level.SEVERE = new Level('SEVERE', 1000); + + +/** + * Log messages with a level of `900` or higher. + * @const + */ +Level.WARNING = new Level('WARNING', 900); + + +/** + * Log messages with a level of `800` or higher. + * @const + */ +Level.INFO = new Level('INFO', 800); + + +/** + * Log messages with a level of `700` or higher. + * @const + */ +Level.DEBUG = new Level('DEBUG', 700); + + +/** + * Log messages with a level of `500` or higher. + * @const + */ +Level.FINE = new Level('FINE', 500); + + +/** + * Log messages with a level of `400` or higher. + * @const + */ +Level.FINER = new Level('FINER', 400); + + +/** + * Log messages with a level of `300` or higher. + * @const + */ +Level.FINEST = new Level('FINEST', 300); + + +/** + * Indicates all log messages should be recorded. + * @const + */ +Level.ALL = new Level('ALL', 0); + + +const ALL_LEVELS = /** !Set */new Set([ + Level.OFF, + Level.SEVERE, + Level.WARNING, + Level.INFO, + Level.DEBUG, + Level.FINE, + Level.FINER, + Level.FINEST, + Level.ALL +]); + + +const LEVELS_BY_NAME = /** !Map */ new Map([ + [Level.OFF.name, Level.OFF], + [Level.SEVERE.name, Level.SEVERE], + [Level.WARNING.name, Level.WARNING], + [Level.INFO.name, Level.INFO], + [Level.DEBUG.name, Level.DEBUG], + [Level.FINE.name, Level.FINE], + [Level.FINER.name, Level.FINER], + [Level.FINEST.name, Level.FINEST], + [Level.ALL.name, Level.ALL] +]); + + +/** + * Converts a level name or value to a {@link Level} value. If the name/value + * is not recognized, {@link Level.ALL} will be returned. + * + * @param {(number|string)} nameOrValue The log level name, or value, to + * convert. + * @return {!Level} The converted level. + */ +function getLevel(nameOrValue) { + if (typeof nameOrValue === 'string') { + return LEVELS_BY_NAME.get(nameOrValue) || Level.ALL; + } + if (typeof nameOrValue !== 'number') { + throw new TypeError('not a string or number'); + } + for (let level of ALL_LEVELS) { + if (nameOrValue >= level.value) { + return level; + } + } + return Level.ALL; +} + + +/** + * Describes a single log entry. + * + * @final + */ +class Entry { + /** + * @param {(!Level|string|number)} level The entry level. + * @param {string} message The log message. + * @param {number=} opt_timestamp The time this entry was generated, in + * milliseconds since 0:00:00, January 1, 1970 UTC. If omitted, the + * current time will be used. + * @param {string=} opt_type The log type, if known. + */ + constructor(level, message, opt_timestamp, opt_type) { + this.level = level instanceof Level ? level : getLevel(level); + this.message = message; + this.timestamp = + typeof opt_timestamp === 'number' ? opt_timestamp : Date.now(); + this.type = opt_type || ''; + } + + /** + * @return {{level: string, message: string, timestamp: number, + * type: string}} The JSON representation of this entry. + */ + toJSON() { + return { + 'level': this.level.name, + 'message': this.message, + 'timestamp': this.timestamp, + 'type': this.type + }; + } +} + + +/** @typedef {(string|function(): string)} */ +let Loggable; + + +/** + * An object used to log debugging messages. Loggers use a hierarchical, + * dot-separated naming scheme. For instance, "foo" is considered the parent of + * the "foo.bar" and an ancestor of "foo.bar.baz". + * + * Each logger may be assigned a {@linkplain #setLevel log level}, which + * controls which level of messages will be reported to the + * {@linkplain #addHandler handlers} attached to this instance. If a log level + * is not explicitly set on a logger, it will inherit its parent. + * + * This class should never be directly instantiated. Instead, users should + * obtain logger references using the {@linkplain ./logging.getLogger() + * getLogger()} function. + * + * @final + */ +class Logger { + /** + * @param {string} name the name of this logger. + * @param {Level=} opt_level the initial level for this logger. + */ + constructor(name, opt_level) { + /** @private {string} */ + this.name_ = name; + + /** @private {Level} */ + this.level_ = opt_level || null; + + /** @private {Logger} */ + this.parent_ = null; + + /** @private {Set} */ + this.handlers_ = null; + } + + /** @return {string} the name of this logger. */ + getName() { + return this.name_; + } + + /** + * @param {Level} level the new level for this logger, or `null` if the logger + * should inherit its level from its parent logger. + */ + setLevel(level) { + this.level_ = level; + } + + /** @return {Level} the log level for this logger. */ + getLevel() { + return this.level_; + } + + /** + * @return {!Level} the effective level for this logger. + */ + getEffectiveLevel() { + let logger = this; + let level; + do { + level = logger.level_; + logger = logger.parent_; + } while (logger && !level); + return level || Level.OFF; + } + + /** + * @param {!Level} level the level to check. + * @return {boolean} whether messages recorded at the given level are loggable + * by this instance. + */ + isLoggable(level) { + return level.value !== Level.OFF.value + && level.value >= this.getEffectiveLevel().value; + } + + /** + * Adds a handler to this logger. The handler will be invoked for each message + * logged with this instance, or any of its descendants. + * + * @param {function(!Entry)} handler the handler to add. + */ + addHandler(handler) { + if (!this.handlers_) { + this.handlers_ = new Set; + } + this.handlers_.add(handler); + } + + /** + * Removes a handler from this logger. + * + * @param {function(!Entry)} handler the handler to remove. + * @return {boolean} whether a handler was successfully removed. + */ + removeHandler(handler) { + if (!this.handlers_) { + return false; + } + return this.handlers_.delete(handler); + } + + /** + * Logs a message at the given level. The message may be defined as a string + * or as a function that will return the message. If a function is provided, + * it will only be invoked if this logger's + * {@linkplain #getEffectiveLevel() effective log level} includes the given + * `level`. + * + * @param {!Level} level the level at which to log the message. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + log(level, loggable) { + if (!this.isLoggable(level)) { + return; + } + let message = '[' + this.name_ + '] ' + + (typeof loggable === 'function' ? loggable() : loggable); + let entry = new Entry(level, message, Date.now()); + for (let logger = this; !!logger; logger = logger.parent_) { + if (logger.handlers_) { + for (let handler of logger.handlers_) { + handler(entry); + } + } + } + } + + /** + * Logs a message at the {@link Level.SEVERE} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + severe(loggable) { + this.log(Level.SEVERE, loggable); + } + + /** + * Logs a message at the {@link Level.WARNING} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + warning(loggable) { + this.log(Level.WARNING, loggable); + } + + /** + * Logs a message at the {@link Level.INFO} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + info(loggable) { + this.log(Level.INFO, loggable); + } + + /** + * Logs a message at the {@link Level.DEBUG} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + debug(loggable) { + this.log(Level.DEBUG, loggable); + } + + /** + * Logs a message at the {@link Level.FINE} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + fine(loggable) { + this.log(Level.FINE, loggable); + } + + /** + * Logs a message at the {@link Level.FINER} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + finer(loggable) { + this.log(Level.FINER, loggable); + } + + /** + * Logs a message at the {@link Level.FINEST} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + finest(loggable) { + this.log(Level.FINEST, loggable); + } +} + + +/** + * Maintains a collection of loggers. + * + * @final + */ +class LogManager { + constructor() { + /** @private {!Map} */ + this.loggers_ = new Map; + this.root_ = new Logger('', Level.OFF); + } + + /** + * Retrieves a named logger, creating it in the process. This function will + * implicitly create the requested logger, and any of its parents, if they + * do not yet exist. + * + * @param {string} name the logger's name. + * @return {!Logger} the requested logger. + */ + getLogger(name) { + if (!name) { + return this.root_; + } + let parent = this.root_; + for (let i = name.indexOf('.'); i != -1; i = name.indexOf('.', i + 1)) { + let parentName = name.substr(0, i); + parent = this.createLogger_(parentName, parent); + } + return this.createLogger_(name, parent); + } + + /** + * Creates a new logger. + * + * @param {string} name the logger's name. + * @param {!Logger} parent the logger's parent. + * @return {!Logger} the new logger. + * @private + */ + createLogger_(name, parent) { + if (this.loggers_.has(name)) { + return /** @type {!Logger} */(this.loggers_.get(name)); + } + let logger = new Logger(name, null); + logger.parent_ = parent; + this.loggers_.set(name, logger); + return logger; + } +} + + +const logManager = new LogManager; + + +/** + * Retrieves a named logger, creating it in the process. This function will + * implicitly create the requested logger, and any of its parents, if they + * do not yet exist. + * + * The log level will be unspecified for newly created loggers. Use + * {@link Logger#setLevel(level)} to explicitly set a level. + * + * @param {string} name the logger's name. + * @return {!Logger} the requested logger. + */ +function getLogger(name) { + return logManager.getLogger(name); +} + + +function pad(n) { + if (n > 10) { + return '' + n; + } else { + return '0' + n; + } +} + + +/** + * Logs all messages to the Console API. + * @param {!Entry} entry the entry to log. + */ +function consoleHandler(entry) { + if (typeof console === 'undefined' || !console) { + return; + } + + var timestamp = new Date(entry.timestamp); + var msg = + '[' + timestamp.getUTCFullYear() + '-' + + pad(timestamp.getUTCMonth() + 1) + '-' + + pad(timestamp.getUTCDate()) + 'T' + + pad(timestamp.getUTCHours()) + ':' + + pad(timestamp.getUTCMinutes()) + ':' + + pad(timestamp.getUTCSeconds()) + 'Z] ' + + '[' + entry.level.name + '] ' + + entry.message; + + var level = entry.level.value; + if (level >= Level.SEVERE.value) { + console.error(msg); + } else if (level >= Level.WARNING.value) { + console.warn(msg); + } else { + console.log(msg); + } +} + + +/** + * Adds the console handler to the given logger. The console handler will log + * all messages using the JavaScript Console API. + * + * @param {Logger=} opt_logger The logger to add the handler to; defaults + * to the root logger. + */ +function addConsoleHandler(opt_logger) { + let logger = opt_logger || logManager.root_; + logger.addHandler(consoleHandler); +} + + +/** + * Removes the console log handler from the given logger. + * + * @param {Logger=} opt_logger The logger to remove the handler from; defaults + * to the root logger. + * @see exports.addConsoleHandler + */ +function removeConsoleHandler(opt_logger) { + let logger = opt_logger || logManager.root_; + logger.removeHandler(consoleHandler); +} + + +/** + * Installs the console log handler on the root logger. + */ +function installConsoleHandler() { + addConsoleHandler(logManager.root_); +} + + +/** + * Common log types. + * @enum {string} + */ +const Type = { + /** Logs originating from the browser. */ + BROWSER: 'browser', + /** Logs from a WebDriver client. */ + CLIENT: 'client', + /** Logs from a WebDriver implementation. */ + DRIVER: 'driver', + /** Logs related to performance. */ + PERFORMANCE: 'performance', + /** Logs from the remote server. */ + SERVER: 'server' +}; + + +/** + * Describes the log preferences for a WebDriver session. + * + * @final + */ +class Preferences { + constructor() { + /** @private {!Map} */ + this.prefs_ = new Map; + } + + /** + * Sets the desired logging level for a particular log type. + * @param {(string|Type)} type The log type. + * @param {(!Level|string|number)} level The desired log level. + * @throws {TypeError} if `type` is not a `string`. + */ + setLevel(type, level) { + if (typeof type !== 'string') { + throw TypeError('specified log type is not a string: ' + typeof type); + } + this.prefs_.set(type, level instanceof Level ? level : getLevel(level)); + } + + /** + * Converts this instance to its JSON representation. + * @return {!Object} The JSON representation of this set of + * preferences. + */ + toJSON() { + let json = {}; + for (let key of this.prefs_.keys()) { + json[key] = this.prefs_.get(key).name; + } + return json; + } +} + + +// PUBLIC API + + +exports.Entry = Entry; +exports.Level = Level; +exports.LogManager = LogManager; +exports.Logger = Logger; +exports.Preferences = Preferences; +exports.Type = Type; +exports.addConsoleHandler = addConsoleHandler; +exports.getLevel = getLevel; +exports.getLogger = getLogger; +exports.installConsoleHandler = installConsoleHandler; +exports.removeConsoleHandler = removeConsoleHandler; diff --git a/www/node_modules/selenium-webdriver/lib/promise.js b/www/node_modules/selenium-webdriver/lib/promise.js new file mode 100644 index 0000000..905ec50 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/promise.js @@ -0,0 +1,3093 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview + * The promise module is centered around the {@linkplain ControlFlow}, a class + * that coordinates the execution of asynchronous tasks. The ControlFlow allows + * users to focus on the imperative commands for their script without worrying + * about chaining together every single asynchronous action, which can be + * tedious and verbose. APIs may be layered on top of the control flow to read + * as if they were synchronous. For instance, the core + * {@linkplain ./webdriver.WebDriver WebDriver} API is built on top of the + * control flow, allowing users to write + * + * driver.get('http://www.google.com/ncr'); + * driver.findElement({name: 'q'}).sendKeys('webdriver'); + * driver.findElement({name: 'btnGn'}).click(); + * + * instead of + * + * driver.get('http://www.google.com/ncr') + * .then(function() { + * return driver.findElement({name: 'q'}); + * }) + * .then(function(q) { + * return q.sendKeys('webdriver'); + * }) + * .then(function() { + * return driver.findElement({name: 'btnG'}); + * }) + * .then(function(btnG) { + * return btnG.click(); + * }); + * + * ## Tasks and Task Queues + * + * The control flow is based on the concept of tasks and task queues. Tasks are + * functions that define the basic unit of work for the control flow to execute. + * Each task is scheduled via {@link ControlFlow#execute()}, which will return + * a {@link ManagedPromise ManagedPromise} that will be resolved with the task's + * result. + * + * A task queue contains all of the tasks scheduled within a single turn of the + * [JavaScript event loop][JSEL]. The control flow will create a new task queue + * the first time a task is scheduled within an event loop. + * + * var flow = promise.controlFlow(); + * flow.execute(foo); // Creates a new task queue and inserts foo. + * flow.execute(bar); // Inserts bar into the same queue as foo. + * setTimeout(function() { + * flow.execute(baz); // Creates a new task queue and inserts baz. + * }, 0); + * + * Whenever the control flow creates a new task queue, it will automatically + * begin executing tasks in the next available turn of the event loop. This + * execution is scheduled using a "micro-task" timer, such as a (native) + * `ManagedPromise.then()` callback. + * + * setTimeout(() => console.log('a')); + * ManagedPromise.resolve().then(() => console.log('b')); // A native promise. + * flow.execute(() => console.log('c')); + * ManagedPromise.resolve().then(() => console.log('d')); + * setTimeout(() => console.log('fin')); + * // b + * // c + * // d + * // a + * // fin + * + * In the example above, b/c/d is logged before a/fin because native promises + * and this module use "micro-task" timers, which have a higher priority than + * "macro-tasks" like `setTimeout`. + * + * ## Task Execution + * + * Upon creating a task queue, and whenever an exisiting queue completes a task, + * the control flow will schedule a micro-task timer to process any scheduled + * tasks. This ensures no task is ever started within the same turn of the + * JavaScript event loop in which it was scheduled, nor is a task ever started + * within the same turn that another finishes. + * + * When the execution timer fires, a single task will be dequeued and executed. + * There are several important events that may occur while executing a task + * function: + * + * 1. A new task queue is created by a call to {@link ControlFlow#execute()}. + * Any tasks scheduled within this task queue are considered subtasks of the + * current task. + * 2. The task function throws an error. Any scheduled tasks are immediately + * discarded and the task's promised result (previously returned by + * {@link ControlFlow#execute()}) is immediately rejected with the thrown + * error. + * 3. The task function returns sucessfully. + * + * If a task function created a new task queue, the control flow will wait for + * that queue to complete before processing the task result. If the queue + * completes without error, the flow will settle the task's promise with the + * value originaly returned by the task function. On the other hand, if the task + * queue termintes with an error, the task's promise will be rejected with that + * error. + * + * flow.execute(function() { + * flow.execute(() => console.log('a')); + * flow.execute(() => console.log('b')); + * }); + * flow.execute(() => console.log('c')); + * // a + * // b + * // c + * + * ## ManagedPromise Integration + * + * In addition to the {@link ControlFlow} class, the promise module also exports + * a [ManagedPromise/A+] {@linkplain ManagedPromise implementation} that is deeply + * integrated with the ControlFlow. First and foremost, each promise + * {@linkplain ManagedPromise#then() callback} is scheduled with the + * control flow as a task. As a result, each callback is invoked in its own turn + * of the JavaScript event loop with its own task queue. If any tasks are + * scheduled within a callback, the callback's promised result will not be + * settled until the task queue has completed. + * + * promise.fulfilled().then(function() { + * flow.execute(function() { + * console.log('b'); + * }); + * }).then(() => console.log('a')); + * // b + * // a + * + * ### Scheduling ManagedPromise Callbacks + * + * How callbacks are scheduled in the control flow depends on when they are + * attached to the promise. Callbacks attached to a _previously_ resolved + * promise are immediately enqueued as subtasks of the currently running task. + * + * var p = promise.fulfilled(); + * flow.execute(function() { + * flow.execute(() => console.log('A')); + * p.then( () => console.log('B')); + * flow.execute(() => console.log('C')); + * p.then( () => console.log('D')); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // fin + * + * When a promise is resolved while a task function is on the call stack, any + * callbacks also registered in that stack frame are scheduled as if the promise + * were already resolved: + * + * var d = promise.defer(); + * flow.execute(function() { + * flow.execute( () => console.log('A')); + * d.promise.then(() => console.log('B')); + * flow.execute( () => console.log('C')); + * d.promise.then(() => console.log('D')); + * + * d.fulfill(); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // fin + * + * Callbacks attached to an _unresolved_ promise within a task function are + * only weakly scheduled as subtasks and will be dropped if they reach the + * front of the queue before the promise is resolved. In the example below, the + * callbacks for `B` & `D` are dropped as sub-tasks since they are attached to + * an unresolved promise when they reach the front of the task queue. + * + * var d = promise.defer(); + * flow.execute(function() { + * flow.execute( () => console.log('A')); + * d.promise.then(() => console.log('B')); + * flow.execute( () => console.log('C')); + * d.promise.then(() => console.log('D')); + * + * setTimeout(d.fulfill, 20); + * }).then(function() { + * console.log('fin') + * }); + * // A + * // C + * // fin + * // B + * // D + * + * If a promise is resolved while a task function is on the call stack, any + * previously registered and unqueued callbacks (i.e. either attached while no + * task was on the call stack, or previously dropped as described above) act as + * _interrupts_ and are inserted at the front of the task queue. If multiple + * promises are fulfilled, their interrupts are enqueued in the order the + * promises are resolved. + * + * var d1 = promise.defer(); + * d1.promise.then(() => console.log('A')); + * + * var d2 = promise.defer(); + * d2.promise.then(() => console.log('B')); + * + * flow.execute(function() { + * d1.promise.then(() => console.log('C')); + * flow.execute(() => console.log('D')); + * }); + * flow.execute(function() { + * flow.execute(() => console.log('E')); + * flow.execute(() => console.log('F')); + * d1.fulfill(); + * d2.fulfill(); + * }).then(function() { + * console.log('fin'); + * }); + * // D + * // A + * // C + * // B + * // E + * // F + * // fin + * + * Within a task function (or callback), each step of a promise chain acts as + * an interrupt on the task queue: + * + * var d = promise.defer(); + * flow.execute(function() { + * d.promise. + * then(() => console.log('A')). + * then(() => console.log('B')). + * then(() => console.log('C')). + * then(() => console.log('D')); + * + * flow.execute(() => console.log('E')); + * d.fulfill(); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // E + * // fin + * + * If there are multiple promise chains derived from a single promise, they are + * processed in the order created: + * + * var d = promise.defer(); + * flow.execute(function() { + * var chain = d.promise.then(() => console.log('A')); + * + * chain.then(() => console.log('B')). + * then(() => console.log('C')); + * + * chain.then(() => console.log('D')). + * then(() => console.log('E')); + * + * flow.execute(() => console.log('F')); + * + * d.fulfill(); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // E + * // F + * // fin + * + * Even though a subtask's promised result will never resolve while the task + * function is on the stack, it will be treated as a promise resolved within the + * task. In all other scenarios, a task's promise behaves just like a normal + * promise. In the sample below, `C/D` is loggged before `B` because the + * resolution of `subtask1` interrupts the flow of the enclosing task. Within + * the final subtask, `E/F` is logged in order because `subtask1` is a resolved + * promise when that task runs. + * + * flow.execute(function() { + * var subtask1 = flow.execute(() => console.log('A')); + * var subtask2 = flow.execute(() => console.log('B')); + * + * subtask1.then(() => console.log('C')); + * subtask1.then(() => console.log('D')); + * + * flow.execute(function() { + * flow.execute(() => console.log('E')); + * subtask1.then(() => console.log('F')); + * }); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // C + * // D + * // B + * // E + * // F + * // fin + * + * Finally, consider the following: + * + * var d = promise.defer(); + * d.promise.then(() => console.log('A')); + * d.promise.then(() => console.log('B')); + * + * flow.execute(function() { + * flow.execute( () => console.log('C')); + * d.promise.then(() => console.log('D')); + * + * flow.execute( () => console.log('E')); + * d.promise.then(() => console.log('F')); + * + * d.fulfill(); + * + * flow.execute( () => console.log('G')); + * d.promise.then(() => console.log('H')); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // E + * // F + * // G + * // H + * // fin + * + * In this example, callbacks are registered on `d.promise` both before and + * during the invocation of the task function. When `d.fulfill()` is called, + * the callbacks registered before the task (`A` & `B`) are registered as + * interrupts. The remaining callbacks were all attached within the task and + * are scheduled in the flow as standard tasks. + * + * ## Generator Support + * + * [Generators][GF] may be scheduled as tasks within a control flow or attached + * as callbacks to a promise. Each time the generator yields a promise, the + * control flow will wait for that promise to settle before executing the next + * iteration of the generator. The yielded promise's fulfilled value will be + * passed back into the generator: + * + * flow.execute(function* () { + * var d = promise.defer(); + * + * setTimeout(() => console.log('...waiting...'), 25); + * setTimeout(() => d.fulfill(123), 50); + * + * console.log('start: ' + Date.now()); + * + * var value = yield d.promise; + * console.log('mid: %d; value = %d', Date.now(), value); + * + * yield promise.delayed(10); + * console.log('end: ' + Date.now()); + * }).then(function() { + * console.log('fin'); + * }); + * // start: 0 + * // ...waiting... + * // mid: 50; value = 123 + * // end: 60 + * // fin + * + * Yielding the result of a promise chain will wait for the entire chain to + * complete: + * + * promise.fulfilled().then(function* () { + * console.log('start: ' + Date.now()); + * + * var value = yield flow. + * execute(() => console.log('A')). + * then( () => console.log('B')). + * then( () => 123); + * + * console.log('mid: %s; value = %d', Date.now(), value); + * + * yield flow.execute(() => console.log('C')); + * }).then(function() { + * console.log('fin'); + * }); + * // start: 0 + * // A + * // B + * // mid: 2; value = 123 + * // C + * // fin + * + * Yielding a _rejected_ promise will cause the rejected value to be thrown + * within the generator function: + * + * flow.execute(function* () { + * console.log('start: ' + Date.now()); + * try { + * yield promise.delayed(10).then(function() { + * throw Error('boom'); + * }); + * } catch (ex) { + * console.log('caught time: ' + Date.now()); + * console.log(ex.message); + * } + * }); + * // start: 0 + * // caught time: 10 + * // boom + * + * # Error Handling + * + * ES6 promises do not require users to handle a promise rejections. This can + * result in subtle bugs as the rejections are silently "swallowed" by the + * ManagedPromise class. + * + * ManagedPromise.reject(Error('boom')); + * // ... *crickets* ... + * + * Selenium's promise module, on the other hand, requires that every rejection + * be explicitly handled. When a {@linkplain ManagedPromise ManagedPromise} is + * rejected and no callbacks are defined on that promise, it is considered an + * _unhandled rejection_ and reproted to the active task queue. If the rejection + * remains unhandled after a single turn of the [event loop][JSEL] (scheduled + * with a micro-task), it will propagate up the stack. + * + * ## Error Propagation + * + * If an unhandled rejection occurs within a task function, that task's promised + * result is rejected and all remaining subtasks are discarded: + * + * flow.execute(function() { + * // No callbacks registered on promise -> unhandled rejection + * promise.rejected(Error('boom')); + * flow.execute(function() { console.log('this will never run'); }); + * }).catch(function(e) { + * console.log(e.message); + * }); + * // boom + * + * The promised results for discarded tasks are silently rejected with a + * cancellation error and existing callback chains will never fire. + * + * flow.execute(function() { + * promise.rejected(Error('boom')); + * flow.execute(function() { console.log('a'); }). + * then(function() { console.log('b'); }); + * }).catch(function(e) { + * console.log(e.message); + * }); + * // boom + * + * An unhandled rejection takes precedence over a task function's returned + * result, even if that value is another promise: + * + * flow.execute(function() { + * promise.rejected(Error('boom')); + * return flow.execute(someOtherTask); + * }).catch(function(e) { + * console.log(e.message); + * }); + * // boom + * + * If there are multiple unhandled rejections within a task, they are packaged + * in a {@link MultipleUnhandledRejectionError}, which has an `errors` property + * that is a `Set` of the recorded unhandled rejections: + * + * flow.execute(function() { + * promise.rejected(Error('boom1')); + * promise.rejected(Error('boom2')); + * }).catch(function(ex) { + * console.log(ex instanceof MultipleUnhandledRejectionError); + * for (var e of ex.errors) { + * console.log(e.message); + * } + * }); + * // boom1 + * // boom2 + * + * When a subtask is discarded due to an unreported rejection in its parent + * frame, the existing callbacks on that task will never settle and the + * callbacks will not be invoked. If a new callback is attached ot the subtask + * _after_ it has been discarded, it is handled the same as adding a callback + * to a cancelled promise: the error-callback path is invoked. This behavior is + * intended to handle cases where the user saves a reference to a task promise, + * as illustrated below. + * + * var subTask; + * flow.execute(function() { + * promise.rejected(Error('boom')); + * subTask = flow.execute(function() {}); + * }).catch(function(e) { + * console.log(e.message); + * }).then(function() { + * return subTask.then( + * () => console.log('subtask success!'), + * (e) => console.log('subtask failed:\n' + e)); + * }); + * // boom + * // subtask failed: + * // DiscardedTaskError: Task was discarded due to a previous failure: boom + * + * When a subtask fails, its promised result is treated the same as any other + * promise: it must be handled within one turn of the rejection or the unhandled + * rejection is propagated to the parent task. This means users can catch errors + * from complex flows from the top level task: + * + * flow.execute(function() { + * flow.execute(function() { + * flow.execute(function() { + * throw Error('fail!'); + * }); + * }); + * }).catch(function(e) { + * console.log(e.message); + * }); + * // fail! + * + * ## Unhandled Rejection Events + * + * When an unhandled rejection propagates to the root of the control flow, the + * flow will emit an __uncaughtException__ event. If no listeners are registered + * on the flow, the error will be rethrown to the global error handler: an + * __uncaughtException__ event from the + * [`process`](https://nodejs.org/api/process.html) object in node, or + * `window.onerror` when running in a browser. + * + * Bottom line: you __*must*__ handle rejected promises. + * + * # ManagedPromise/A+ Compatibility + * + * This `promise` module is compliant with the [ManagedPromise/A+][] specification + * except for sections `2.2.6.1` and `2.2.6.2`: + * + * > + * > - `then` may be called multiple times on the same promise. + * > - If/when `promise` is fulfilled, all respective `onFulfilled` callbacks + * > must execute in the order of their originating calls to `then`. + * > - If/when `promise` is rejected, all respective `onRejected` callbacks + * > must execute in the order of their originating calls to `then`. + * > + * + * Specifically, the conformance tests contains the following scenario (for + * brevity, only the fulfillment version is shown): + * + * var p1 = ManagedPromise.resolve(); + * p1.then(function() { + * console.log('A'); + * p1.then(() => console.log('B')); + * }); + * p1.then(() => console.log('C')); + * // A + * // C + * // B + * + * Since the [ControlFlow](#scheduling_callbacks) executes promise callbacks as + * tasks, with this module, the result would be + * + * var p2 = promise.fulfilled(); + * p2.then(function() { + * console.log('A'); + * p2.then(() => console.log('B'); + * }); + * p2.then(() => console.log('C')); + * // A + * // B + * // C + * + * [JSEL]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop + * [GF]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function* + * [ManagedPromise/A+]: https://promisesaplus.com/ + */ + +'use strict'; + +const events = require('./events'); +const logging = require('./logging'); + + +/** + * Alias to help with readability and differentiate types. + * @const + */ +const NativePromise = Promise; + + +/** + * Whether to append traces of `then` to rejection errors. + * @type {boolean} + */ +exports.LONG_STACK_TRACES = false; // TODO: this should not be CONSTANT_CASE + + +/** @const */ +const LOG = logging.getLogger('promise'); + + +const UNIQUE_IDS = new WeakMap; +let nextId = 1; + + +function getUid(obj) { + let id = UNIQUE_IDS.get(obj); + if (!id) { + id = nextId; + nextId += 1; + UNIQUE_IDS.set(obj, id); + } + return id; +} + + +/** + * Runs the given function after a micro-task yield. + * @param {function()} fn The function to run. + */ +function asyncRun(fn) { + NativePromise.resolve().then(function() { + try { + fn(); + } catch (ignored) { + // Do nothing. + } + }); +} + + +/** + * Throws an error asynchronously so it is reported to the global error handler. + * + * @param {!Error} error The error to throw. + */ +function asyncThrow(error) { + setTimeout(function() { + throw error; + }, 0); +} + + +/** + * @param {number} level What level of verbosity to log with. + * @param {(string|function(this: T): string)} loggable The message to log. + * @param {T=} opt_self The object in whose context to run the loggable + * function. + * @template T + */ +function vlog(level, loggable, opt_self) { + var logLevel = logging.Level.FINE; + if (level > 1) { + logLevel = logging.Level.FINEST; + } else if (level > 0) { + logLevel = logging.Level.FINER; + } + + if (typeof loggable === 'function') { + loggable = loggable.bind(opt_self); + } + + LOG.log(logLevel, loggable); +} + + +/** + * Generates an error to capture the current stack trace. + * @param {string} name Error name for this stack trace. + * @param {string} msg Message to record. + * @param {Function=} opt_topFn The function that should appear at the top of + * the stack; only applicable in V8. + * @return {!Error} The generated error. + */ +function captureStackTrace(name, msg, opt_topFn) { + var e = Error(msg); + e.name = name; + if (Error.captureStackTrace) { + Error.captureStackTrace(e, opt_topFn); + } else { + var stack = Error().stack; + if (stack) { + e.stack = e.toString(); + e.stack += '\n' + stack; + } + } + return e; +} + + +/** + * Error used when the computation of a promise is cancelled. + */ +class CancellationError extends Error { + /** + * @param {string=} opt_msg The cancellation message. + */ + constructor(opt_msg) { + super(opt_msg); + + /** @override */ + this.name = this.constructor.name; + + /** @private {boolean} */ + this.silent_ = false; + } + + /** + * Wraps the given error in a CancellationError. + * + * @param {*} error The error to wrap. + * @param {string=} opt_msg The prefix message to use. + * @return {!CancellationError} A cancellation error. + */ + static wrap(error, opt_msg) { + var message; + if (error instanceof CancellationError) { + return new CancellationError( + opt_msg ? (opt_msg + ': ' + error.message) : error.message); + } else if (opt_msg) { + message = opt_msg; + if (error) { + message += ': ' + error; + } + return new CancellationError(message); + } + if (error) { + message = error + ''; + } + return new CancellationError(message); + } +} + + +/** + * Error used to cancel tasks when a control flow is reset. + * @final + */ +class FlowResetError extends CancellationError { + constructor() { + super('ControlFlow was reset'); + this.silent_ = true; + } +} + + +/** + * Error used to cancel tasks that have been discarded due to an uncaught error + * reported earlier in the control flow. + * @final + */ +class DiscardedTaskError extends CancellationError { + /** @param {*} error The original error. */ + constructor(error) { + if (error instanceof DiscardedTaskError) { + return /** @type {!DiscardedTaskError} */(error); + } + + var msg = ''; + if (error) { + msg = ': ' + ( + typeof error.message === 'string' ? error.message : error); + } + + super('Task was discarded due to a previous failure' + msg); + this.silent_ = true; + } +} + + +/** + * Error used when there are multiple unhandled promise rejections detected + * within a task or callback. + * + * @final + */ +class MultipleUnhandledRejectionError extends Error { + /** + * @param {!(Set<*>)} errors The errors to report. + */ + constructor(errors) { + super('Multiple unhandled promise rejections reported'); + + /** @override */ + this.name = this.constructor.name; + + /** @type {!Set<*>} */ + this.errors = errors; + } +} + + +/** + * Property used to flag constructor's as implementing the Thenable interface + * for runtime type checking. + * @const + */ +const IMPLEMENTED_BY_SYMBOL = Symbol('promise.Thenable'); + + +/** + * Thenable is a promise-like object with a {@code then} method which may be + * used to schedule callbacks on a promised value. + * + * @interface + * @extends {IThenable} + * @template T + */ +class Thenable { + /** + * Adds a property to a class prototype to allow runtime checks of whether + * instances of that class implement the Thenable interface. This function + * will also ensure the prototype's {@code then} function is exported from + * compiled code. + * @param {function(new: Thenable, ...?)} ctor The + * constructor whose prototype to modify. + */ + static addImplementation(ctor) { + ctor.prototype['then'] = ctor.prototype.then; + try { + ctor.prototype[IMPLEMENTED_BY_SYMBOL] = true; + } catch (ignored) { + // Property access denied? + } + } + + /** + * Checks if an object has been tagged for implementing the Thenable + * interface as defined by {@link Thenable.addImplementation}. + * @param {*} object The object to test. + * @return {boolean} Whether the object is an implementation of the Thenable + * interface. + */ + static isImplementation(object) { + if (!object) { + return false; + } + try { + return !!object[IMPLEMENTED_BY_SYMBOL]; + } catch (e) { + return false; // Property access seems to be forbidden. + } + } + + /** + * Cancels the computation of this promise's value, rejecting the promise in + * the process. This method is a no-op if the promise has already been + * resolved. + * + * @param {(string|Error)=} opt_reason The reason this promise is being + * cancelled. This value will be wrapped in a {@link CancellationError}. + */ + cancel(opt_reason) {} + + /** @return {boolean} Whether this promise's value is still being computed. */ + isPending() {} + + /** + * Registers listeners for when this instance is resolved. + * + * @param {?(function(T): (R|IThenable))=} opt_callback The + * function to call if this promise is successfully resolved. The function + * should expect a single argument: the promise's resolved value. + * @param {?(function(*): (R|IThenable))=} opt_errback + * The function to call if this promise is rejected. The function should + * expect a single argument: the rejection reason. + * @return {!ManagedPromise} A new promise which will be + * resolved with the result of the invoked callback. + * @template R + */ + then(opt_callback, opt_errback) {} + + /** + * Registers a listener for when this promise is rejected. This is synonymous + * with the {@code catch} clause in a synchronous API: + * + * // Synchronous API: + * try { + * doSynchronousWork(); + * } catch (ex) { + * console.error(ex); + * } + * + * // Asynchronous promise API: + * doAsynchronousWork().catch(function(ex) { + * console.error(ex); + * }); + * + * @param {function(*): (R|IThenable)} errback The + * function to call if this promise is rejected. The function should + * expect a single argument: the rejection reason. + * @return {!ManagedPromise} A new promise which will be + * resolved with the result of the invoked callback. + * @template R + */ + catch(errback) {} + + /** + * An alias for {@link #catch()} + * + * @param {function(*): (R|IThenable)} errback The + * function to call if this promise is rejected. The function should + * expect a single argument: the rejection reason. + * @return {!ManagedPromise} A new promise which will be + * resolved wdith the result of the invoked callback. + * @template R + */ + thenCatch(errback) {} + + /** + * Registers a listener to invoke when this promise is resolved, regardless + * of whether the promise's value was successfully computed. This function + * is synonymous with the {@code finally} clause in a synchronous API: + * + * // Synchronous API: + * try { + * doSynchronousWork(); + * } finally { + * cleanUp(); + * } + * + * // Asynchronous promise API: + * doAsynchronousWork().thenFinally(cleanUp); + * + * __Note:__ similar to the {@code finally} clause, if the registered + * callback returns a rejected promise or throws an error, it will silently + * replace the rejection error (if any) from this promise: + * + * try { + * throw Error('one'); + * } finally { + * throw Error('two'); // Hides Error: one + * } + * + * promise.rejected(Error('one')) + * .thenFinally(function() { + * throw Error('two'); // Hides Error: one + * }); + * + * @param {function(): (R|IThenable)} callback The function + * to call when this promise is resolved. + * @return {!ManagedPromise} A promise that will be fulfilled + * with the callback result. + * @template R + */ + thenFinally(callback) {} +} + + +/** + * @enum {string} + */ +const PromiseState = { + PENDING: 'pending', + BLOCKED: 'blocked', + REJECTED: 'rejected', + FULFILLED: 'fulfilled' +}; + + +/** + * Internal symbol used to store a cancellation handler for + * {@link ManagedPromise} objects. This is an internal implementation detail + * used by the {@link TaskQueue} class to monitor for when a promise is + * cancelled without generating an extra promise via then(). + */ +const CANCEL_HANDLER_SYMBOL = Symbol('on cancel'); + + +/** + * Represents the eventual value of a completed operation. Each promise may be + * in one of three states: pending, fulfilled, or rejected. Each promise starts + * in the pending state and may make a single transition to either a + * fulfilled or rejected state, at which point the promise is considered + * resolved. + * + * @implements {Thenable} + * @unrestricted + * @template T + * @see http://promises-aplus.github.io/promises-spec/ + */ +const ManagedPromise = class Promise { + /** + * @param {function( + * function((T|IThenable|Thenable)=), + * function(*=))} resolver + * Function that is invoked immediately to begin computation of this + * promise's value. The function should accept a pair of callback + * functions, one for fulfilling the promise and another for rejecting it. + * @param {ControlFlow=} opt_flow The control flow + * this instance was created under. Defaults to the currently active flow. + */ + constructor(resolver, opt_flow) { + getUid(this); + + /** @private {!ControlFlow} */ + this.flow_ = opt_flow || controlFlow(); + + /** @private {Error} */ + this.stack_ = null; + if (exports.LONG_STACK_TRACES) { + this.stack_ = captureStackTrace('Promise', 'new', this.constructor); + } + + /** @private {ManagedPromise} */ + this.parent_ = null; + + /** @private {Array} */ + this.callbacks_ = null; + + /** @private {PromiseState} */ + this.state_ = PromiseState.PENDING; + + /** @private {boolean} */ + this.handled_ = false; + + /** @private {*} */ + this.value_ = undefined; + + /** @private {TaskQueue} */ + this.queue_ = null; + + /** @private {(function(CancellationError)|null)} */ + this[CANCEL_HANDLER_SYMBOL] = null; + + try { + var self = this; + resolver(function(value) { + self.resolve_(PromiseState.FULFILLED, value); + }, function(reason) { + self.resolve_(PromiseState.REJECTED, reason); + }); + } catch (ex) { + this.resolve_(PromiseState.REJECTED, ex); + } + } + + /** @override */ + toString() { + return 'ManagedPromise::' + getUid(this) + + ' {[[PromiseStatus]]: "' + this.state_ + '"}'; + } + + /** + * Resolves this promise. If the new value is itself a promise, this function + * will wait for it to be resolved before notifying the registered listeners. + * @param {PromiseState} newState The promise's new state. + * @param {*} newValue The promise's new value. + * @throws {TypeError} If {@code newValue === this}. + * @private + */ + resolve_(newState, newValue) { + if (PromiseState.PENDING !== this.state_) { + return; + } + + if (newValue === this) { + // See promise a+, 2.3.1 + // http://promises-aplus.github.io/promises-spec/#point-48 + newValue = new TypeError('A promise may not resolve to itself'); + newState = PromiseState.REJECTED; + } + + this.parent_ = null; + this.state_ = PromiseState.BLOCKED; + + if (newState !== PromiseState.REJECTED) { + if (Thenable.isImplementation(newValue)) { + // 2.3.2 + newValue = /** @type {!Thenable} */(newValue); + newValue.then( + this.unblockAndResolve_.bind(this, PromiseState.FULFILLED), + this.unblockAndResolve_.bind(this, PromiseState.REJECTED)); + return; + + } else if (newValue + && (typeof newValue === 'object' || typeof newValue === 'function')) { + // 2.3.3 + + try { + // 2.3.3.1 + var then = newValue['then']; + } catch (e) { + // 2.3.3.2 + this.state_ = PromiseState.REJECTED; + this.value_ = e; + this.scheduleNotifications_(); + return; + } + + if (typeof then === 'function') { + // 2.3.3.3 + this.invokeThen_(/** @type {!Object} */(newValue), then); + return; + } + } + } + + if (newState === PromiseState.REJECTED && + isError(newValue) && newValue.stack && this.stack_) { + newValue.stack += '\nFrom: ' + (this.stack_.stack || this.stack_); + } + + // 2.3.3.4 and 2.3.4 + this.state_ = newState; + this.value_ = newValue; + this.scheduleNotifications_(); + } + + /** + * Invokes a thenable's "then" method according to 2.3.3.3 of the promise + * A+ spec. + * @param {!Object} x The thenable object. + * @param {!Function} then The "then" function to invoke. + * @private + */ + invokeThen_(x, then) { + var called = false; + var self = this; + + var resolvePromise = function(value) { + if (!called) { // 2.3.3.3.3 + called = true; + // 2.3.3.3.1 + self.unblockAndResolve_(PromiseState.FULFILLED, value); + } + }; + + var rejectPromise = function(reason) { + if (!called) { // 2.3.3.3.3 + called = true; + // 2.3.3.3.2 + self.unblockAndResolve_(PromiseState.REJECTED, reason); + } + }; + + try { + // 2.3.3.3 + then.call(x, resolvePromise, rejectPromise); + } catch (e) { + // 2.3.3.3.4.2 + rejectPromise(e); + } + } + + /** + * @param {PromiseState} newState The promise's new state. + * @param {*} newValue The promise's new value. + * @private + */ + unblockAndResolve_(newState, newValue) { + if (this.state_ === PromiseState.BLOCKED) { + this.state_ = PromiseState.PENDING; + this.resolve_(newState, newValue); + } + } + + /** + * @private + */ + scheduleNotifications_() { + vlog(2, () => this + ' scheduling notifications', this); + + this[CANCEL_HANDLER_SYMBOL] = null; + if (this.value_ instanceof CancellationError + && this.value_.silent_) { + this.callbacks_ = null; + } + + if (!this.queue_) { + this.queue_ = this.flow_.getActiveQueue_(); + } + + if (!this.handled_ && + this.state_ === PromiseState.REJECTED && + !(this.value_ instanceof CancellationError)) { + this.queue_.addUnhandledRejection(this); + } + this.queue_.scheduleCallbacks(this); + } + + /** @override */ + cancel(opt_reason) { + if (!canCancel(this)) { + return; + } + + if (this.parent_ && canCancel(this.parent_)) { + this.parent_.cancel(opt_reason); + } else { + var reason = CancellationError.wrap(opt_reason); + if (this[CANCEL_HANDLER_SYMBOL]) { + this[CANCEL_HANDLER_SYMBOL](reason); + this[CANCEL_HANDLER_SYMBOL] = null; + } + + if (this.state_ === PromiseState.BLOCKED) { + this.unblockAndResolve_(PromiseState.REJECTED, reason); + } else { + this.resolve_(PromiseState.REJECTED, reason); + } + } + + function canCancel(promise) { + return promise.state_ === PromiseState.PENDING + || promise.state_ === PromiseState.BLOCKED; + } + } + + /** @override */ + isPending() { + return this.state_ === PromiseState.PENDING; + } + + /** @override */ + then(opt_callback, opt_errback) { + return this.addCallback_( + opt_callback, opt_errback, 'then', ManagedPromise.prototype.then); + } + + /** @override */ + catch(errback) { + return this.addCallback_( + null, errback, 'catch', ManagedPromise.prototype.catch); + } + + /** @override */ + thenCatch(errback) { + return this.catch(errback); + } + + /** @override */ + thenFinally(callback) { + var error; + var mustThrow = false; + return this.then(function() { + return callback(); + }, function(err) { + error = err; + mustThrow = true; + return callback(); + }).then(function() { + if (mustThrow) { + throw error; + } + }); + } + + /** + * Registers a new callback with this promise + * @param {(function(T): (R|IThenable)|null|undefined)} callback The + * fulfillment callback. + * @param {(function(*): (R|IThenable)|null|undefined)} errback The + * rejection callback. + * @param {string} name The callback name. + * @param {!Function} fn The function to use as the top of the stack when + * recording the callback's creation point. + * @return {!ManagedPromise} A new promise which will be resolved with the + * esult of the invoked callback. + * @template R + * @private + */ + addCallback_(callback, errback, name, fn) { + if (typeof callback !== 'function' && typeof errback !== 'function') { + return this; + } + + this.handled_ = true; + if (this.queue_) { + this.queue_.clearUnhandledRejection(this); + } + + var cb = new Task( + this.flow_, + this.invokeCallback_.bind(this, callback, errback), + name, + exports.LONG_STACK_TRACES ? {name: 'Promise', top: fn} : undefined); + cb.promise.parent_ = this; + + if (this.state_ !== PromiseState.PENDING && + this.state_ !== PromiseState.BLOCKED) { + this.flow_.getActiveQueue_().enqueue(cb); + } else { + if (!this.callbacks_) { + this.callbacks_ = []; + } + this.callbacks_.push(cb); + cb.blocked = true; + this.flow_.getActiveQueue_().enqueue(cb); + } + + return cb.promise; + } + + /** + * Invokes a callback function attached to this promise. + * @param {(function(T): (R|IThenable)|null|undefined)} callback The + * fulfillment callback. + * @param {(function(*): (R|IThenable)|null|undefined)} errback The + * rejection callback. + * @template R + * @private + */ + invokeCallback_(callback, errback) { + var callbackFn = callback; + if (this.state_ === PromiseState.REJECTED) { + callbackFn = errback; + } + + if (typeof callbackFn === 'function') { + if (isGenerator(callbackFn)) { + return consume(callbackFn, null, this.value_); + } + return callbackFn(this.value_); + } else if (this.state_ === PromiseState.REJECTED) { + throw this.value_; + } else { + return this.value_; + } + } +} +Thenable.addImplementation(ManagedPromise); + + +/** + * Represents a value that will be resolved at some point in the future. This + * class represents the protected "producer" half of a ManagedPromise - each Deferred + * has a {@code promise} property that may be returned to consumers for + * registering callbacks, reserving the ability to resolve the deferred to the + * producer. + * + * If this Deferred is rejected and there are no listeners registered before + * the next turn of the event loop, the rejection will be passed to the + * {@link ControlFlow} as an unhandled failure. + * + * @implements {Thenable} + * @template T + */ +class Deferred { + /** + * @param {ControlFlow=} opt_flow The control flow this instance was + * created under. This should only be provided during unit tests. + */ + constructor(opt_flow) { + var fulfill, reject; + + /** @type {!ManagedPromise} */ + this.promise = new ManagedPromise(function(f, r) { + fulfill = f; + reject = r; + }, opt_flow); + + var self = this; + var checkNotSelf = function(value) { + if (value === self) { + throw new TypeError('May not resolve a Deferred with itself'); + } + }; + + /** + * Resolves this deferred with the given value. It is safe to call this as a + * normal function (with no bound "this"). + * @param {(T|IThenable|Thenable)=} opt_value The fulfilled value. + */ + this.fulfill = function(opt_value) { + checkNotSelf(opt_value); + fulfill(opt_value); + }; + + /** + * Rejects this promise with the given reason. It is safe to call this as a + * normal function (with no bound "this"). + * @param {*=} opt_reason The rejection reason. + */ + this.reject = function(opt_reason) { + checkNotSelf(opt_reason); + reject(opt_reason); + }; + } + + /** @override */ + isPending() { + return this.promise.isPending(); + } + + /** @override */ + cancel(opt_reason) { + this.promise.cancel(opt_reason); + } + + /** + * @override + * @deprecated Use {@code then} from the promise property directly. + */ + then(opt_cb, opt_eb) { + return this.promise.then(opt_cb, opt_eb); + } + + /** + * @override + * @deprecated Use {@lcode catch} from the promise property directly. + */ + catch(opt_eb) { + return this.promise.catch(opt_eb); + } + + /** + * @override + * @deprecated Use {@code thenCatch} from the promise property directly. + */ + thenCatch(opt_eb) { + return this.promise.thenCatch(opt_eb); + } + + /** + * @override + * @deprecated Use {@code thenFinally} from the promise property directly. + */ + thenFinally(opt_cb) { + return this.promise.thenFinally(opt_cb); + } +} +Thenable.addImplementation(Deferred); + + +/** + * Tests if a value is an Error-like object. This is more than an straight + * instanceof check since the value may originate from another context. + * @param {*} value The value to test. + * @return {boolean} Whether the value is an error. + */ +function isError(value) { + return value instanceof Error || + (!!value && typeof value === 'object' + && typeof value.message === 'string'); +} + + +/** + * Determines whether a {@code value} should be treated as a promise. + * Any object whose "then" property is a function will be considered a promise. + * + * @param {?} value The value to test. + * @return {boolean} Whether the value is a promise. + */ +function isPromise(value) { + try { + // Use array notation so the Closure compiler does not obfuscate away our + // contract. + return value + && (typeof value === 'object' || typeof value === 'function') + && typeof value['then'] === 'function'; + } catch (ex) { + return false; + } +} + + +/** + * Creates a promise that will be resolved at a set time in the future. + * @param {number} ms The amount of time, in milliseconds, to wait before + * resolving the promise. + * @return {!ManagedPromise} The promise. + */ +function delayed(ms) { + var key; + return new ManagedPromise(function(fulfill) { + key = setTimeout(function() { + key = null; + fulfill(); + }, ms); + }).catch(function(e) { + clearTimeout(key); + key = null; + throw e; + }); +} + + +/** + * Creates a new deferred object. + * @return {!Deferred} The new deferred object. + * @template T + */ +function defer() { + return new Deferred(); +} + + +/** + * Creates a promise that has been resolved with the given value. + * @param {T=} opt_value The resolved value. + * @return {!ManagedPromise} The resolved promise. + * @template T + */ +function fulfilled(opt_value) { + if (opt_value instanceof ManagedPromise) { + return opt_value; + } + return new ManagedPromise(function(fulfill) { + fulfill(opt_value); + }); +} + + +/** + * Creates a promise that has been rejected with the given reason. + * @param {*=} opt_reason The rejection reason; may be any value, but is + * usually an Error or a string. + * @return {!ManagedPromise} The rejected promise. + * @template T + */ +function rejected(opt_reason) { + if (opt_reason instanceof ManagedPromise) { + return opt_reason; + } + return new ManagedPromise(function(_, reject) { + reject(opt_reason); + }); +} + + +/** + * Wraps a function that expects a node-style callback as its final + * argument. This callback expects two arguments: an error value (which will be + * null if the call succeeded), and the success value as the second argument. + * The callback will the resolve or reject the returned promise, based on its + * arguments. + * @param {!Function} fn The function to wrap. + * @param {...?} var_args The arguments to apply to the function, excluding the + * final callback. + * @return {!ManagedPromise} A promise that will be resolved with the + * result of the provided function's callback. + */ +function checkedNodeCall(fn, var_args) { + let args = Array.prototype.slice.call(arguments, 1); + return new ManagedPromise(function(fulfill, reject) { + try { + args.push(function(error, value) { + error ? reject(error) : fulfill(value); + }); + fn.apply(undefined, args); + } catch (ex) { + reject(ex); + } + }); +} + + +/** + * Registers an observer on a promised {@code value}, returning a new promise + * that will be resolved when the value is. If {@code value} is not a promise, + * then the return promise will be immediately resolved. + * @param {*} value The value to observe. + * @param {Function=} opt_callback The function to call when the value is + * resolved successfully. + * @param {Function=} opt_errback The function to call when the value is + * rejected. + * @return {!ManagedPromise} A new promise. + */ +function when(value, opt_callback, opt_errback) { + if (Thenable.isImplementation(value)) { + return value.then(opt_callback, opt_errback); + } + + return new ManagedPromise(function(fulfill) { + fulfill(value); + }).then(opt_callback, opt_errback); +} + + +/** + * Invokes the appropriate callback function as soon as a promised `value` is + * resolved. This function is similar to `when()`, except it does not return + * a new promise. + * @param {*} value The value to observe. + * @param {Function} callback The function to call when the value is + * resolved successfully. + * @param {Function=} opt_errback The function to call when the value is + * rejected. + */ +function asap(value, callback, opt_errback) { + if (isPromise(value)) { + value.then(callback, opt_errback); + + } else if (callback) { + callback(value); + } +} + + +/** + * Given an array of promises, will return a promise that will be fulfilled + * with the fulfillment values of the input array's values. If any of the + * input array's promises are rejected, the returned promise will be rejected + * with the same reason. + * + * @param {!Array<(T|!ManagedPromise)>} arr An array of + * promises to wait on. + * @return {!ManagedPromise>} A promise that is + * fulfilled with an array containing the fulfilled values of the + * input array, or rejected with the same reason as the first + * rejected value. + * @template T + */ +function all(arr) { + return new ManagedPromise(function(fulfill, reject) { + var n = arr.length; + var values = []; + + if (!n) { + fulfill(values); + return; + } + + var toFulfill = n; + var onFulfilled = function(index, value) { + values[index] = value; + toFulfill--; + if (toFulfill == 0) { + fulfill(values); + } + }; + + function processPromise(index) { + asap(arr[index], function(value) { + onFulfilled(index, value); + }, reject); + } + + for (var i = 0; i < n; ++i) { + processPromise(i); + } + }); +} + + +/** + * Calls a function for each element in an array and inserts the result into a + * new array, which is used as the fulfillment value of the promise returned + * by this function. + * + * If the return value of the mapping function is a promise, this function + * will wait for it to be fulfilled before inserting it into the new array. + * + * If the mapping function throws or returns a rejected promise, the + * promise returned by this function will be rejected with the same reason. + * Only the first failure will be reported; all subsequent errors will be + * silently ignored. + * + * @param {!(Array|ManagedPromise>)} arr The + * array to iterator over, or a promise that will resolve to said array. + * @param {function(this: SELF, TYPE, number, !Array): ?} fn The + * function to call for each element in the array. This function should + * expect three arguments (the element, the index, and the array itself. + * @param {SELF=} opt_self The object to be used as the value of 'this' within + * {@code fn}. + * @template TYPE, SELF + */ +function map(arr, fn, opt_self) { + return fulfilled(arr).then(function(v) { + if (!Array.isArray(v)) { + throw TypeError('not an array'); + } + var arr = /** @type {!Array} */(v); + return new ManagedPromise(function(fulfill, reject) { + var n = arr.length; + var values = new Array(n); + (function processNext(i) { + for (; i < n; i++) { + if (i in arr) { + break; + } + } + if (i >= n) { + fulfill(values); + return; + } + try { + asap( + fn.call(opt_self, arr[i], i, /** @type {!Array} */(arr)), + function(value) { + values[i] = value; + processNext(i + 1); + }, + reject); + } catch (ex) { + reject(ex); + } + })(0); + }); + }); +} + + +/** + * Calls a function for each element in an array, and if the function returns + * true adds the element to a new array. + * + * If the return value of the filter function is a promise, this function + * will wait for it to be fulfilled before determining whether to insert the + * element into the new array. + * + * If the filter function throws or returns a rejected promise, the promise + * returned by this function will be rejected with the same reason. Only the + * first failure will be reported; all subsequent errors will be silently + * ignored. + * + * @param {!(Array|ManagedPromise>)} arr The + * array to iterator over, or a promise that will resolve to said array. + * @param {function(this: SELF, TYPE, number, !Array): ( + * boolean|ManagedPromise)} fn The function + * to call for each element in the array. + * @param {SELF=} opt_self The object to be used as the value of 'this' within + * {@code fn}. + * @template TYPE, SELF + */ +function filter(arr, fn, opt_self) { + return fulfilled(arr).then(function(v) { + if (!Array.isArray(v)) { + throw TypeError('not an array'); + } + var arr = /** @type {!Array} */(v); + return new ManagedPromise(function(fulfill, reject) { + var n = arr.length; + var values = []; + var valuesLength = 0; + (function processNext(i) { + for (; i < n; i++) { + if (i in arr) { + break; + } + } + if (i >= n) { + fulfill(values); + return; + } + try { + var value = arr[i]; + var include = fn.call(opt_self, value, i, /** @type {!Array} */(arr)); + asap(include, function(include) { + if (include) { + values[valuesLength++] = value; + } + processNext(i + 1); + }, reject); + } catch (ex) { + reject(ex); + } + })(0); + }); + }); +} + + +/** + * Returns a promise that will be resolved with the input value in a + * fully-resolved state. If the value is an array, each element will be fully + * resolved. Likewise, if the value is an object, all keys will be fully + * resolved. In both cases, all nested arrays and objects will also be + * fully resolved. All fields are resolved in place; the returned promise will + * resolve on {@code value} and not a copy. + * + * Warning: This function makes no checks against objects that contain + * cyclical references: + * + * var value = {}; + * value['self'] = value; + * promise.fullyResolved(value); // Stack overflow. + * + * @param {*} value The value to fully resolve. + * @return {!ManagedPromise} A promise for a fully resolved version + * of the input value. + */ +function fullyResolved(value) { + if (isPromise(value)) { + return when(value, fullyResolveValue); + } + return fullyResolveValue(value); +} + + +/** + * @param {*} value The value to fully resolve. If a promise, assumed to + * already be resolved. + * @return {!ManagedPromise} A promise for a fully resolved version + * of the input value. + */ +function fullyResolveValue(value) { + if (Array.isArray(value)) { + return fullyResolveKeys(/** @type {!Array} */ (value)); + } + + if (isPromise(value)) { + if (isPromise(value)) { + // We get here when the original input value is a promise that + // resolves to itself. When the user provides us with such a promise, + // trust that it counts as a "fully resolved" value and return it. + // Of course, since it's already a promise, we can just return it + // to the user instead of wrapping it in another promise. + return /** @type {!ManagedPromise} */ (value); + } + } + + if (value && typeof value === 'object') { + return fullyResolveKeys(/** @type {!Object} */ (value)); + } + + if (typeof value === 'function') { + return fullyResolveKeys(/** @type {!Object} */ (value)); + } + + return fulfilled(value); +} + + +/** + * @param {!(Array|Object)} obj the object to resolve. + * @return {!ManagedPromise} A promise that will be resolved with the + * input object once all of its values have been fully resolved. + */ +function fullyResolveKeys(obj) { + var isArray = Array.isArray(obj); + var numKeys = isArray ? obj.length : (function() { + let n = 0; + for (let key in obj) { + n += 1; + } + return n; + })(); + if (!numKeys) { + return fulfilled(obj); + } + + function forEachProperty(obj, fn) { + for (let key in obj) { + fn.call(null, obj[key], key, obj); + } + } + + function forEachElement(arr, fn) { + arr.forEach(fn); + } + + var numResolved = 0; + return new ManagedPromise(function(fulfill, reject) { + var forEachKey = isArray ? forEachElement: forEachProperty; + + forEachKey(obj, function(partialValue, key) { + if (!Array.isArray(partialValue) + && (!partialValue || typeof partialValue !== 'object')) { + maybeResolveValue(); + return; + } + + fullyResolved(partialValue).then( + function(resolvedValue) { + obj[key] = resolvedValue; + maybeResolveValue(); + }, + reject); + }); + + function maybeResolveValue() { + if (++numResolved == numKeys) { + fulfill(obj); + } + } + }); +} + + +////////////////////////////////////////////////////////////////////////////// +// +// ControlFlow +// +////////////////////////////////////////////////////////////////////////////// + + + +/** + * Handles the execution of scheduled tasks, each of which may be an + * asynchronous operation. The control flow will ensure tasks are executed in + * the ordered scheduled, starting each task only once those before it have + * completed. + * + * Each task scheduled within this flow may return a {@link ManagedPromise} to + * indicate it is an asynchronous operation. The ControlFlow will wait for such + * promises to be resolved before marking the task as completed. + * + * Tasks and each callback registered on a {@link ManagedPromise} will be run + * in their own ControlFlow frame. Any tasks scheduled within a frame will take + * priority over previously scheduled tasks. Furthermore, if any of the tasks in + * the frame fail, the remainder of the tasks in that frame will be discarded + * and the failure will be propagated to the user through the callback/task's + * promised result. + * + * Each time a ControlFlow empties its task queue, it will fire an + * {@link ControlFlow.EventType.IDLE IDLE} event. Conversely, + * whenever the flow terminates due to an unhandled error, it will remove all + * remaining tasks in its queue and fire an + * {@link ControlFlow.EventType.UNCAUGHT_EXCEPTION UNCAUGHT_EXCEPTION} event. + * If there are no listeners registered with the flow, the error will be + * rethrown to the global error handler. + * + * Refer to the {@link ./promise} module documentation fora detailed + * explanation of how the ControlFlow coordinates task execution. + * + * @final + */ +class ControlFlow extends events.EventEmitter { + constructor() { + super(); + + /** @private {boolean} */ + this.propagateUnhandledRejections_ = true; + + /** @private {TaskQueue} */ + this.activeQueue_ = null; + + /** @private {Set} */ + this.taskQueues_ = null; + + /** + * Micro task that controls shutting down the control flow. Upon shut down, + * the flow will emit an + * {@link ControlFlow.EventType.IDLE} event. Idle events + * always follow a brief timeout in order to catch latent errors from the + * last completed task. If this task had a callback registered, but no + * errback, and the task fails, the unhandled failure would not be reported + * by the promise system until the next turn of the event loop: + * + * // Schedule 1 task that fails. + * var result = promise.controlFlow().schedule('example', + * function() { return promise.rejected('failed'); }); + * // Set a callback on the result. This delays reporting the unhandled + * // failure for 1 turn of the event loop. + * result.then(function() {}); + * + * @private {MicroTask} + */ + this.shutdownTask_ = null; + + /** + * ID for a long running interval used to keep a Node.js process running + * while a control flow's event loop is still working. This is a cheap hack + * required since JS events are only scheduled to run when there is + * _actually_ something to run. When a control flow is waiting on a task, + * there will be nothing in the JS event loop and the process would + * terminate without this. + * @private + */ + this.hold_ = null; + } + + /** + * Returns a string representation of this control flow, which is its current + * {@linkplain #getSchedule() schedule}, sans task stack traces. + * @return {string} The string representation of this contorl flow. + * @override + */ + toString() { + return this.getSchedule(); + } + + /** + * Sets whether any unhandled rejections should propagate up through the + * control flow stack and cause rejections within parent tasks. If error + * propagation is disabled, tasks will not be aborted when an unhandled + * promise rejection is detected, but the rejection _will_ trigger an + * {@link ControlFlow.EventType.UNCAUGHT_EXCEPTION} + * event. + * + * The default behavior is to propagate all unhandled rejections. _The use + * of this option is highly discouraged._ + * + * @param {boolean} propagate whether to propagate errors. + */ + setPropagateUnhandledRejections(propagate) { + this.propagateUnhandledRejections_ = propagate; + } + + /** + * @return {boolean} Whether this flow is currently idle. + */ + isIdle() { + return !this.shutdownTask_ && (!this.taskQueues_ || !this.taskQueues_.size); + } + + /** + * Resets this instance, clearing its queue and removing all event listeners. + */ + reset() { + this.cancelQueues_(new FlowResetError); + this.emit(ControlFlow.EventType.RESET); + this.removeAllListeners(); + this.cancelShutdown_(); + } + + /** + * Generates an annotated string describing the internal state of this control + * flow, including the currently executing as well as pending tasks. If + * {@code opt_includeStackTraces === true}, the string will include the + * stack trace from when each task was scheduled. + * @param {string=} opt_includeStackTraces Whether to include the stack traces + * from when each task was scheduled. Defaults to false. + * @return {string} String representation of this flow's internal state. + */ + getSchedule(opt_includeStackTraces) { + var ret = 'ControlFlow::' + getUid(this); + var activeQueue = this.activeQueue_; + if (!this.taskQueues_ || !this.taskQueues_.size) { + return ret; + } + var childIndent = '| '; + for (var q of this.taskQueues_) { + ret += '\n' + printQ(q, childIndent); + } + return ret; + + function printQ(q, indent) { + var ret = q.toString(); + if (q === activeQueue) { + ret = '(active) ' + ret; + } + var prefix = indent + childIndent; + if (q.pending_) { + if (q.pending_.q.state_ !== TaskQueueState.FINISHED) { + ret += '\n' + prefix + '(pending) ' + q.pending_.task; + ret += '\n' + printQ(q.pending_.q, prefix + childIndent); + } else { + ret += '\n' + prefix + '(blocked) ' + q.pending_.task; + } + } + if (q.interrupts_) { + q.interrupts_.forEach((task) => { + ret += '\n' + prefix + task; + }); + } + if (q.tasks_) { + q.tasks_.forEach((task) => ret += printTask(task, '\n' + prefix)); + } + return indent + ret; + } + + function printTask(task, prefix) { + var ret = prefix + task; + if (opt_includeStackTraces && task.promise.stack_) { + ret += prefix + childIndent + + (task.promise.stack_.stack || task.promise.stack_) + .replace(/\n/g, prefix); + } + return ret; + } + } + + /** + * Returns the currently actively task queue for this flow. If there is no + * active queue, one will be created. + * @return {!TaskQueue} the currently active task queue for this flow. + * @private + */ + getActiveQueue_() { + if (this.activeQueue_) { + return this.activeQueue_; + } + + this.activeQueue_ = new TaskQueue(this); + if (!this.taskQueues_) { + this.taskQueues_ = new Set(); + } + this.taskQueues_.add(this.activeQueue_); + this.activeQueue_ + .once('end', this.onQueueEnd_, this) + .once('error', this.onQueueError_, this); + + asyncRun(() => this.activeQueue_ = null); + this.activeQueue_.start(); + return this.activeQueue_; + } + + /** + * Schedules a task for execution. If there is nothing currently in the + * queue, the task will be executed in the next turn of the event loop. If + * the task function is a generator, the task will be executed using + * {@link ./promise.consume consume()}. + * + * @param {function(): (T|ManagedPromise)} fn The function to + * call to start the task. If the function returns a + * {@link ManagedPromise}, this instance will wait for it to be + * resolved before starting the next task. + * @param {string=} opt_description A description of the task. + * @return {!ManagedPromise} A promise that will be resolved + * with the result of the action. + * @template T + */ + execute(fn, opt_description) { + if (isGenerator(fn)) { + let original = fn; + fn = () => consume(original); + } + + if (!this.hold_) { + var holdIntervalMs = 2147483647; // 2^31-1; max timer length for Node.js + this.hold_ = setInterval(function() {}, holdIntervalMs); + } + + var task = new Task( + this, fn, opt_description || '', + {name: 'Task', top: ControlFlow.prototype.execute}); + + var q = this.getActiveQueue_(); + q.enqueue(task); + this.emit(ControlFlow.EventType.SCHEDULE_TASK, task.description); + return task.promise; + } + + /** + * Inserts a {@code setTimeout} into the command queue. This is equivalent to + * a thread sleep in a synchronous programming language. + * + * @param {number} ms The timeout delay, in milliseconds. + * @param {string=} opt_description A description to accompany the timeout. + * @return {!ManagedPromise} A promise that will be resolved with + * the result of the action. + */ + timeout(ms, opt_description) { + return this.execute(function() { + return delayed(ms); + }, opt_description); + } + + /** + * Schedules a task that shall wait for a condition to hold. Each condition + * function may return any value, but it will always be evaluated as a + * boolean. + * + * Condition functions may schedule sub-tasks with this instance, however, + * their execution time will be factored into whether a wait has timed out. + * + * In the event a condition returns a ManagedPromise, the polling loop will wait for + * it to be resolved before evaluating whether the condition has been + * satisfied. The resolution time for a promise is factored into whether a + * wait has timed out. + * + * If the condition function throws, or returns a rejected promise, the + * wait task will fail. + * + * If the condition is defined as a promise, the flow will wait for it to + * settle. If the timeout expires before the promise settles, the promise + * returned by this function will be rejected. + * + * If this function is invoked with `timeout === 0`, or the timeout is + * omitted, the flow will wait indefinitely for the condition to be satisfied. + * + * @param {(!ManagedPromise|function())} condition The condition to poll, + * or a promise to wait on. + * @param {number=} opt_timeout How long to wait, in milliseconds, for the + * condition to hold before timing out. If omitted, the flow will wait + * indefinitely. + * @param {string=} opt_message An optional error message to include if the + * wait times out; defaults to the empty string. + * @return {!ManagedPromise} A promise that will be fulfilled + * when the condition has been satisified. The promise shall be rejected + * if the wait times out waiting for the condition. + * @throws {TypeError} If condition is not a function or promise or if timeout + * is not a number >= 0. + * @template T + */ + wait(condition, opt_timeout, opt_message) { + var timeout = opt_timeout || 0; + if (typeof timeout !== 'number' || timeout < 0) { + throw TypeError('timeout must be a number >= 0: ' + timeout); + } + + if (isPromise(condition)) { + return this.execute(function() { + if (!timeout) { + return condition; + } + return new ManagedPromise(function(fulfill, reject) { + var start = Date.now(); + var timer = setTimeout(function() { + timer = null; + reject(Error((opt_message ? opt_message + '\n' : '') + + 'Timed out waiting for promise to resolve after ' + + (Date.now() - start) + 'ms')); + }, timeout); + + /** @type {Thenable} */(condition).then( + function(value) { + timer && clearTimeout(timer); + fulfill(value); + }, + function(error) { + timer && clearTimeout(timer); + reject(error); + }); + }); + }, opt_message || ''); + } + + if (typeof condition !== 'function') { + throw TypeError('Invalid condition; must be a function or promise: ' + + typeof condition); + } + + if (isGenerator(condition)) { + let original = condition; + condition = () => consume(original); + } + + var self = this; + return this.execute(function() { + var startTime = Date.now(); + return new ManagedPromise(function(fulfill, reject) { + pollCondition(); + + function pollCondition() { + var conditionFn = /** @type {function()} */(condition); + self.execute(conditionFn).then(function(value) { + var elapsed = Date.now() - startTime; + if (!!value) { + fulfill(value); + } else if (timeout && elapsed >= timeout) { + reject(new Error((opt_message ? opt_message + '\n' : '') + + 'Wait timed out after ' + elapsed + 'ms')); + } else { + // Do not use asyncRun here because we need a non-micro yield + // here so the UI thread is given a chance when running in a + // browser. + setTimeout(pollCondition, 0); + } + }, reject); + } + }); + }, opt_message || ''); + } + + /** + * Executes a function in the next available turn of the JavaScript event + * loop. This ensures the function runs with its own task queue and any + * scheduled tasks will run in "parallel" to those scheduled in the current + * function. + * + * flow.execute(() => console.log('a')); + * flow.execute(() => console.log('b')); + * flow.execute(() => console.log('c')); + * flow.async(() => { + * flow.execute(() => console.log('d')); + * flow.execute(() => console.log('e')); + * }); + * flow.async(() => { + * flow.execute(() => console.log('f')); + * flow.execute(() => console.log('g')); + * }); + * flow.once('idle', () => console.log('fin')); + * // a + * // d + * // f + * // b + * // e + * // g + * // c + * // fin + * + * If the function itself throws, the error will be treated the same as an + * unhandled rejection within the control flow. + * + * __NOTE__: This function is considered _unstable_. + * + * @param {!Function} fn The function to execute. + * @param {Object=} opt_self The object in whose context to run the function. + * @param {...*} var_args Any arguments to pass to the function. + */ + async(fn, opt_self, var_args) { + asyncRun(() => { + // Clear any lingering queues, forces getActiveQueue_ to create a new one. + this.activeQueue_ = null; + var q = this.getActiveQueue_(); + try { + q.execute_(fn.bind(opt_self, var_args)); + } catch (ex) { + var cancellationError = CancellationError.wrap(ex, + 'Function passed to ControlFlow.async() threw'); + cancellationError.silent_ = true; + q.abort_(cancellationError); + } finally { + this.activeQueue_ = null; + } + }); + } + + /** + * Event handler for when a task queue is exhausted. This starts the shutdown + * sequence for this instance if there are no remaining task queues: after + * one turn of the event loop, this object will emit the + * {@link ControlFlow.EventType.IDLE IDLE} event to signal + * listeners that it has completed. During this wait, if another task is + * scheduled, the shutdown will be aborted. + * + * @param {!TaskQueue} q the completed task queue. + * @private + */ + onQueueEnd_(q) { + if (!this.taskQueues_) { + return; + } + this.taskQueues_.delete(q); + + vlog(1, () => q + ' has finished'); + vlog(1, () => this.taskQueues_.size + ' queues remain\n' + this, this); + + if (!this.taskQueues_.size) { + if (this.shutdownTask_) { + throw Error('Already have a shutdown task??'); + } + vlog(1, () => 'Scheduling shutdown\n' + this); + this.shutdownTask_ = new MicroTask(() => this.shutdown_()); + } + } + + /** + * Event handler for when a task queue terminates with an error. This triggers + * the cancellation of all other task queues and a + * {@link ControlFlow.EventType.UNCAUGHT_EXCEPTION} event. + * If there are no error event listeners registered with this instance, the + * error will be rethrown to the global error handler. + * + * @param {*} error the error that caused the task queue to terminate. + * @param {!TaskQueue} q the task queue. + * @private + */ + onQueueError_(error, q) { + if (this.taskQueues_) { + this.taskQueues_.delete(q); + } + this.cancelQueues_(CancellationError.wrap( + error, 'There was an uncaught error in the control flow')); + this.cancelShutdown_(); + this.cancelHold_(); + + var listeners = this.listeners( + ControlFlow.EventType.UNCAUGHT_EXCEPTION); + if (!listeners.size) { + asyncThrow(/** @type {!Error} */(error)); + } else { + this.reportUncaughtException_(error); + } + } + + /** + * Cancels all remaining task queues. + * @param {!CancellationError} reason The cancellation reason. + * @private + */ + cancelQueues_(reason) { + reason.silent_ = true; + if (this.taskQueues_) { + for (var q of this.taskQueues_) { + q.removeAllListeners(); + q.abort_(reason); + } + this.taskQueues_.clear(); + this.taskQueues_ = null; + } + } + + /** + * Reports an uncaught exception using a + * {@link ControlFlow.EventType.UNCAUGHT_EXCEPTION} event. + * + * @param {*} e the error to report. + * @private + */ + reportUncaughtException_(e) { + this.emit(ControlFlow.EventType.UNCAUGHT_EXCEPTION, e); + } + + /** @private */ + cancelHold_() { + if (this.hold_) { + clearInterval(this.hold_); + this.hold_ = null; + } + } + + /** @private */ + shutdown_() { + vlog(1, () => 'Going idle: ' + this); + this.cancelHold_(); + this.shutdownTask_ = null; + this.emit(ControlFlow.EventType.IDLE); + } + + /** + * Cancels the shutdown sequence if it is currently scheduled. + * @private + */ + cancelShutdown_() { + if (this.shutdownTask_) { + this.shutdownTask_.cancel(); + this.shutdownTask_ = null; + } + } +} + + +/** + * Events that may be emitted by an {@link ControlFlow}. + * @enum {string} + */ +ControlFlow.EventType = { + + /** Emitted when all tasks have been successfully executed. */ + IDLE: 'idle', + + /** Emitted when a ControlFlow has been reset. */ + RESET: 'reset', + + /** Emitted whenever a new task has been scheduled. */ + SCHEDULE_TASK: 'scheduleTask', + + /** + * Emitted whenever a control flow aborts due to an unhandled promise + * rejection. This event will be emitted along with the offending rejection + * reason. Upon emitting this event, the control flow will empty its task + * queue and revert to its initial state. + */ + UNCAUGHT_EXCEPTION: 'uncaughtException' +}; + + +/** + * Wraps a function to execute as a cancellable micro task. + * @final + */ +class MicroTask { + /** + * @param {function()} fn The function to run as a micro task. + */ + constructor(fn) { + /** @private {boolean} */ + this.cancelled_ = false; + asyncRun(() => { + if (!this.cancelled_) { + fn(); + } + }); + } + + /** + * Runs the given function after a micro-task yield. + * @param {function()} fn The function to run. + */ + static run(fn) { + NativePromise.resolve().then(function() { + try { + fn(); + } catch (ignored) { + // Do nothing. + } + }); + } + + /** + * Cancels the execution of this task. Note: this will not prevent the task + * timer from firing, just the invocation of the wrapped function. + */ + cancel() { + this.cancelled_ = true; + } +} + + +/** + * A task to be executed by a {@link ControlFlow}. + * + * @template T + * @final + */ +class Task extends Deferred { + /** + * @param {!ControlFlow} flow The flow this instances belongs + * to. + * @param {function(): (T|!ManagedPromise)} fn The function to + * call when the task executes. If it returns a + * {@link ManagedPromise}, the flow will wait for it to be + * resolved before starting the next task. + * @param {string} description A description of the task for debugging. + * @param {{name: string, top: !Function}=} opt_stackOptions Options to use + * when capturing the stacktrace for when this task was created. + */ + constructor(flow, fn, description, opt_stackOptions) { + super(flow); + getUid(this); + + /** @type {function(): (T|!ManagedPromise)} */ + this.execute = fn; + + /** @type {string} */ + this.description = description; + + /** @type {TaskQueue} */ + this.queue = null; + + /** + * Whether this task is considered block. A blocked task may be registered + * in a task queue, but will be dropped if it is still blocked when it + * reaches the front of the queue. A dropped task may always be rescheduled. + * + * Blocked tasks are used when a callback is attached to an unsettled + * promise to reserve a spot in line (in a manner of speaking). If the + * promise is not settled before the callback reaches the front of the + * of the queue, it will be dropped. Once the promise is settled, the + * dropped task will be rescheduled as an interrupt on the currently task + * queue. + * + * @type {boolean} + */ + this.blocked = false; + + if (opt_stackOptions) { + this.promise.stack_ = captureStackTrace( + opt_stackOptions.name, this.description, opt_stackOptions.top); + } + } + + /** @override */ + toString() { + return 'Task::' + getUid(this) + '<' + this.description + '>'; + } +} + + +/** @enum {string} */ +const TaskQueueState = { + NEW: 'new', + STARTED: 'started', + FINISHED: 'finished' +}; + + +/** + * @final + */ +class TaskQueue extends events.EventEmitter { + /** @param {!ControlFlow} flow . */ + constructor(flow) { + super(); + + /** @private {string} */ + this.name_ = 'TaskQueue::' + getUid(this); + + /** @private {!ControlFlow} */ + this.flow_ = flow; + + /** @private {!Array} */ + this.tasks_ = []; + + /** @private {Array} */ + this.interrupts_ = null; + + /** @private {({task: !Task, q: !TaskQueue}|null)} */ + this.pending_ = null; + + /** @private {TaskQueueState} */ + this.state_ = TaskQueueState.NEW; + + /** @private {!Set} */ + this.unhandledRejections_ = new Set(); + } + + /** @override */ + toString() { + return 'TaskQueue::' + getUid(this); + } + + /** + * @param {!ManagedPromise} promise . + */ + addUnhandledRejection(promise) { + // TODO: node 4.0.0+ + vlog(2, () => this + ' registering unhandled rejection: ' + promise, this); + this.unhandledRejections_.add(promise); + } + + /** + * @param {!ManagedPromise} promise . + */ + clearUnhandledRejection(promise) { + var deleted = this.unhandledRejections_.delete(promise); + if (deleted) { + // TODO: node 4.0.0+ + vlog(2, () => this + ' clearing unhandled rejection: ' + promise, this); + } + } + + /** + * Enqueues a new task for execution. + * @param {!Task} task The task to enqueue. + * @throws {Error} If this instance has already started execution. + */ + enqueue(task) { + if (this.state_ !== TaskQueueState.NEW) { + throw Error('TaskQueue has started: ' + this); + } + + if (task.queue) { + throw Error('Task is already scheduled in another queue'); + } + + this.tasks_.push(task); + task.queue = this; + task.promise[CANCEL_HANDLER_SYMBOL] = + this.onTaskCancelled_.bind(this, task); + + vlog(1, () => this + '.enqueue(' + task + ')', this); + vlog(2, () => this.flow_.toString(), this); + } + + /** + * Schedules the callbacks registered on the given promise in this queue. + * + * @param {!ManagedPromise} promise the promise whose callbacks should be + * registered as interrupts in this task queue. + * @throws {Error} if this queue has already finished. + */ + scheduleCallbacks(promise) { + if (this.state_ === TaskQueueState.FINISHED) { + throw new Error('cannot interrupt a finished q(' + this + ')'); + } + + if (this.pending_ && this.pending_.task.promise === promise) { + this.pending_.task.promise.queue_ = null; + this.pending_ = null; + asyncRun(() => this.executeNext_()); + } + + if (!promise.callbacks_) { + return; + } + promise.callbacks_.forEach(function(cb) { + cb.blocked = false; + if (cb.queue) { + return; + } + + cb.promise[CANCEL_HANDLER_SYMBOL] = this.onTaskCancelled_.bind(this, cb); + + if (cb.queue === this && this.tasks_.indexOf(cb) !== -1) { + return; + } + + if (cb.queue) { + cb.queue.dropTask_(cb); + } + + cb.queue = this; + if (!this.interrupts_) { + this.interrupts_ = []; + } + this.interrupts_.push(cb); + }, this); + promise.callbacks_ = null; + vlog(2, () => this + ' interrupted\n' + this.flow_, this); + } + + /** + * Starts executing tasks in this queue. Once called, no further tasks may + * be {@linkplain #enqueue() enqueued} with this instance. + * + * @throws {Error} if this queue has already been started. + */ + start() { + if (this.state_ !== TaskQueueState.NEW) { + throw new Error('TaskQueue has already started'); + } + // Always asynchronously execute next, even if there doesn't look like + // there is anything in the queue. This will catch pending unhandled + // rejections that were registered before start was called. + asyncRun(() => this.executeNext_()); + } + + /** + * Aborts this task queue. If there are any scheduled tasks, they are silently + * cancelled and discarded (their callbacks will never fire). If this queue + * has a _pending_ task, the abortion error is used to cancel that task. + * Otherwise, this queue will emit an error event. + * + * @param {*} error The abortion reason. + * @private + */ + abort_(error) { + var cancellation; + + if (error instanceof FlowResetError) { + cancellation = error; + } else { + cancellation = new DiscardedTaskError(error); + } + + if (this.interrupts_ && this.interrupts_.length) { + this.interrupts_.forEach((t) => t.reject(cancellation)); + this.interrupts_ = []; + } + + if (this.tasks_ && this.tasks_.length) { + this.tasks_.forEach((t) => t.reject(cancellation)); + this.tasks_ = []; + } + + if (this.pending_) { + vlog(2, () => this + '.abort(); cancelling pending task', this); + this.pending_.task.cancel(/** @type {!CancellationError} */(error)); + + } else { + vlog(2, () => this + '.abort(); emitting error event', this); + this.emit('error', error, this); + } + } + + /** @private */ + executeNext_() { + if (this.state_ === TaskQueueState.FINISHED) { + return; + } + this.state_ = TaskQueueState.STARTED; + + if (this.pending_ != null || this.processUnhandledRejections_()) { + return; + } + + var task; + do { + task = this.getNextTask_(); + } while (task && !task.promise.isPending()); + + if (!task) { + this.state_ = TaskQueueState.FINISHED; + this.tasks_ = []; + this.interrupts_ = null; + vlog(2, () => this + '.emit(end)', this); + this.emit('end', this); + return; + } + + var self = this; + var subQ = new TaskQueue(this.flow_); + subQ.once('end', () => self.onTaskComplete_(result)) + .once('error', (e) => self.onTaskFailure_(result, e)); + vlog(2, () => self + ' created ' + subQ + ' for ' + task); + + var result = undefined; + try { + this.pending_ = {task: task, q: subQ}; + task.promise.queue_ = this; + result = subQ.execute_(task.execute); + subQ.start(); + } catch (ex) { + subQ.abort_(ex); + } + } + + /** + * @param {!Function} fn . + * @return {T} . + * @template T + * @private + */ + execute_(fn) { + try { + activeFlows.push(this.flow_); + this.flow_.activeQueue_ = this; + return fn(); + } finally { + this.flow_.activeQueue_ = null; + activeFlows.pop(); + } + } + + /** + * Process any unhandled rejections registered with this task queue. If there + * is a rejection, this queue will be aborted with the rejection error. If + * there are multiple rejections registered, this queue will be aborted with + * a {@link MultipleUnhandledRejectionError}. + * @return {boolean} whether there was an unhandled rejection. + * @private + */ + processUnhandledRejections_() { + if (!this.unhandledRejections_.size) { + return false; + } + + var errors = new Set(); + for (var rejection of this.unhandledRejections_) { + errors.add(rejection.value_); + } + this.unhandledRejections_.clear(); + + var errorToReport = errors.size === 1 + ? errors.values().next().value + : new MultipleUnhandledRejectionError(errors); + + vlog(1, () => this + ' aborting due to unhandled rejections', this); + if (this.flow_.propagateUnhandledRejections_) { + this.abort_(errorToReport); + return true; + } else { + vlog(1, 'error propagation disabled; reporting to control flow'); + this.flow_.reportUncaughtException_(errorToReport); + return false; + } + } + + /** + * @param {!Task} task The task to drop. + * @private + */ + dropTask_(task) { + var index; + if (this.interrupts_) { + index = this.interrupts_.indexOf(task); + if (index != -1) { + task.queue = null; + this.interrupts_.splice(index, 1); + return; + } + } + + index = this.tasks_.indexOf(task); + if (index != -1) { + task.queue = null; + this.tasks_.splice(index, 1); + } + } + + /** + * @param {!Task} task The task that was cancelled. + * @param {!CancellationError} reason The cancellation reason. + * @private + */ + onTaskCancelled_(task, reason) { + if (this.pending_ && this.pending_.task === task) { + this.pending_.q.abort_(reason); + } else { + this.dropTask_(task); + } + } + + /** + * @param {*} value the value originally returned by the task function. + * @private + */ + onTaskComplete_(value) { + if (this.pending_) { + this.pending_.task.fulfill(value); + } + } + + /** + * @param {*} taskFnResult the value originally returned by the task function. + * @param {*} error the error that caused the task function to terminate. + * @private + */ + onTaskFailure_(taskFnResult, error) { + if (Thenable.isImplementation(taskFnResult)) { + taskFnResult.cancel(CancellationError.wrap(error)); + } + this.pending_.task.reject(error); + } + + /** + * @return {(Task|undefined)} the next task scheduled within this queue, + * if any. + * @private + */ + getNextTask_() { + var task = undefined; + while (true) { + if (this.interrupts_) { + task = this.interrupts_.shift(); + } + if (!task && this.tasks_) { + task = this.tasks_.shift(); + } + if (task && task.blocked) { + vlog(2, () => this + ' skipping blocked task ' + task, this); + task.queue = null; + task = null; + // TODO: recurse when tail-call optimization is available in node. + } else { + break; + } + } + return task; + } +}; + + + +/** + * The default flow to use if no others are active. + * @type {!ControlFlow} + */ +var defaultFlow = new ControlFlow(); + + +/** + * A stack of active control flows, with the top of the stack used to schedule + * commands. When there are multiple flows on the stack, the flow at index N + * represents a callback triggered within a task owned by the flow at index + * N-1. + * @type {!Array} + */ +var activeFlows = []; + + +/** + * Changes the default flow to use when no others are active. + * @param {!ControlFlow} flow The new default flow. + * @throws {Error} If the default flow is not currently active. + */ +function setDefaultFlow(flow) { + if (activeFlows.length) { + throw Error('You may only change the default flow while it is active'); + } + defaultFlow = flow; +} + + +/** + * @return {!ControlFlow} The currently active control flow. + */ +function controlFlow() { + return /** @type {!ControlFlow} */ ( + activeFlows.length ? activeFlows[activeFlows.length - 1] : defaultFlow); +} + + +/** + * Creates a new control flow. The provided callback will be invoked as the + * first task within the new flow, with the flow as its sole argument. Returns + * a promise that resolves to the callback result. + * @param {function(!ControlFlow)} callback The entry point + * to the newly created flow. + * @return {!ManagedPromise} A promise that resolves to the callback + * result. + */ +function createFlow(callback) { + var flow = new ControlFlow; + return flow.execute(function() { + return callback(flow); + }); +} + + +/** + * Tests is a function is a generator. + * @param {!Function} fn The function to test. + * @return {boolean} Whether the function is a generator. + */ +function isGenerator(fn) { + return fn.constructor.name === 'GeneratorFunction'; +} + + +/** + * Consumes a {@code GeneratorFunction}. Each time the generator yields a + * promise, this function will wait for it to be fulfilled before feeding the + * fulfilled value back into {@code next}. Likewise, if a yielded promise is + * rejected, the rejection error will be passed to {@code throw}. + * + * __Example 1:__ the Fibonacci Sequence. + * + * promise.consume(function* fibonacci() { + * var n1 = 1, n2 = 1; + * for (var i = 0; i < 4; ++i) { + * var tmp = yield n1 + n2; + * n1 = n2; + * n2 = tmp; + * } + * return n1 + n2; + * }).then(function(result) { + * console.log(result); // 13 + * }); + * + * __Example 2:__ a generator that throws. + * + * promise.consume(function* () { + * yield promise.delayed(250).then(function() { + * throw Error('boom'); + * }); + * }).catch(function(e) { + * console.log(e.toString()); // Error: boom + * }); + * + * @param {!Function} generatorFn The generator function to execute. + * @param {Object=} opt_self The object to use as "this" when invoking the + * initial generator. + * @param {...*} var_args Any arguments to pass to the initial generator. + * @return {!ManagedPromise} A promise that will resolve to the + * generator's final result. + * @throws {TypeError} If the given function is not a generator. + */ +function consume(generatorFn, opt_self, var_args) { + if (!isGenerator(generatorFn)) { + throw new TypeError('Input is not a GeneratorFunction: ' + + generatorFn.constructor.name); + } + + var deferred = defer(); + var generator = generatorFn.apply( + opt_self, Array.prototype.slice.call(arguments, 2)); + callNext(); + return deferred.promise; + + /** @param {*=} opt_value . */ + function callNext(opt_value) { + pump(generator.next, opt_value); + } + + /** @param {*=} opt_error . */ + function callThrow(opt_error) { + // Dictionary lookup required because Closure compiler's built-in + // externs does not include GeneratorFunction.prototype.throw. + pump(generator['throw'], opt_error); + } + + function pump(fn, opt_arg) { + if (!deferred.isPending()) { + return; // Defererd was cancelled; silently abort. + } + + try { + var result = fn.call(generator, opt_arg); + } catch (ex) { + deferred.reject(ex); + return; + } + + if (result.done) { + deferred.fulfill(result.value); + return; + } + + asap(result.value, callNext, callThrow); + } +} + + +// PUBLIC API + + +exports.CancellationError = CancellationError; +exports.ControlFlow = ControlFlow; +exports.Deferred = Deferred; +exports.MultipleUnhandledRejectionError = MultipleUnhandledRejectionError; +exports.Thenable = Thenable; +exports.Promise = ManagedPromise; +exports.all = all; +exports.asap = asap; +exports.captureStackTrace = captureStackTrace; +exports.checkedNodeCall = checkedNodeCall; +exports.consume = consume; +exports.controlFlow = controlFlow; +exports.createFlow = createFlow; +exports.defer = defer; +exports.delayed = delayed; +exports.filter = filter; +exports.fulfilled = fulfilled; +exports.fullyResolved = fullyResolved; +exports.isGenerator = isGenerator; +exports.isPromise = isPromise; +exports.map = map; +exports.rejected = rejected; +exports.setDefaultFlow = setDefaultFlow; +exports.when = when; diff --git a/www/node_modules/selenium-webdriver/lib/safari/client.js b/www/node_modules/selenium-webdriver/lib/safari/client.js new file mode 100644 index 0000000..b15dbd6 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/safari/client.js @@ -0,0 +1,7203 @@ +'use strict';var COMPILED = !0, goog = goog || {}; +goog.global = this; +goog.isDef = function(a) { + return void 0 !== a; +}; +goog.exportPath_ = function(a, b, c) { + a = a.split("."); + c = c || goog.global; + a[0] in c || !c.execScript || c.execScript("var " + a[0]); + for (var d;a.length && (d = a.shift());) { + !a.length && goog.isDef(b) ? c[d] = b : c = c[d] ? c[d] : c[d] = {}; + } +}; +goog.define = function(a, b) { + var c = b; + COMPILED || (goog.global.CLOSURE_UNCOMPILED_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_UNCOMPILED_DEFINES, a) ? c = goog.global.CLOSURE_UNCOMPILED_DEFINES[a] : goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES, a) && (c = goog.global.CLOSURE_DEFINES[a])); + goog.exportPath_(a, c); +}; +goog.DEBUG = !0; +goog.LOCALE = "en"; +goog.TRUSTED_SITE = !0; +goog.STRICT_MODE_COMPATIBLE = !1; +goog.DISALLOW_TEST_ONLY_CODE = COMPILED && !goog.DEBUG; +goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1; +goog.provide = function(a) { + if (!COMPILED && goog.isProvided_(a)) { + throw Error('Namespace "' + a + '" already declared.'); + } + goog.constructNamespace_(a); +}; +goog.constructNamespace_ = function(a, b) { + if (!COMPILED) { + delete goog.implicitNamespaces_[a]; + for (var c = a;(c = c.substring(0, c.lastIndexOf("."))) && !goog.getObjectByName(c);) { + goog.implicitNamespaces_[c] = !0; + } + } + goog.exportPath_(a, b); +}; +goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/; +goog.module = function(a) { + if (!goog.isString(a) || !a || -1 == a.search(goog.VALID_MODULE_RE_)) { + throw Error("Invalid module identifier"); + } + if (!goog.isInModuleLoader_()) { + throw Error("Module " + a + " has been loaded incorrectly."); + } + if (goog.moduleLoaderState_.moduleName) { + throw Error("goog.module may only be called once per module."); + } + goog.moduleLoaderState_.moduleName = a; + if (!COMPILED) { + if (goog.isProvided_(a)) { + throw Error('Namespace "' + a + '" already declared.'); + } + delete goog.implicitNamespaces_[a]; + } +}; +goog.module.get = function(a) { + return goog.module.getInternal_(a); +}; +goog.module.getInternal_ = function(a) { + if (!COMPILED) { + return goog.isProvided_(a) ? a in goog.loadedModules_ ? goog.loadedModules_[a] : goog.getObjectByName(a) : null; + } +}; +goog.moduleLoaderState_ = null; +goog.isInModuleLoader_ = function() { + return null != goog.moduleLoaderState_; +}; +goog.module.declareLegacyNamespace = function() { + if (!COMPILED && !goog.isInModuleLoader_()) { + throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module"); + } + if (!COMPILED && !goog.moduleLoaderState_.moduleName) { + throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace."); + } + goog.moduleLoaderState_.declareLegacyNamespace = !0; +}; +goog.setTestOnly = function(a) { + if (goog.DISALLOW_TEST_ONLY_CODE) { + throw a = a || "", Error("Importing test-only code into non-debug environment" + (a ? ": " + a : ".")); + } +}; +goog.forwardDeclare = function(a) { +}; +COMPILED || (goog.isProvided_ = function(a) { + return a in goog.loadedModules_ || !goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a)); +}, goog.implicitNamespaces_ = {"goog.module":!0}); +goog.getObjectByName = function(a, b) { + for (var c = a.split("."), d = b || goog.global, e;e = c.shift();) { + if (goog.isDefAndNotNull(d[e])) { + d = d[e]; + } else { + return null; + } + } + return d; +}; +goog.globalize = function(a, b) { + var c = b || goog.global, d; + for (d in a) { + c[d] = a[d]; + } +}; +goog.addDependency = function(a, b, c, d) { + if (goog.DEPENDENCIES_ENABLED) { + var e; + a = a.replace(/\\/g, "/"); + for (var f = goog.dependencies_, g = 0;e = b[g];g++) { + f.nameToPath[e] = a, f.pathIsModule[a] = !!d; + } + for (d = 0;b = c[d];d++) { + a in f.requires || (f.requires[a] = {}), f.requires[a][b] = !0; + } + } +}; +goog.ENABLE_DEBUG_LOADER = !0; +goog.logToConsole_ = function(a) { + goog.global.console && goog.global.console.error(a); +}; +goog.require = function(a) { + if (!COMPILED) { + goog.ENABLE_DEBUG_LOADER && goog.IS_OLD_IE_ && goog.maybeProcessDeferredDep_(a); + if (goog.isProvided_(a)) { + return goog.isInModuleLoader_() ? goog.module.getInternal_(a) : null; + } + if (goog.ENABLE_DEBUG_LOADER) { + var b = goog.getPathFromDeps_(a); + if (b) { + return goog.writeScripts_(b), null; + } + } + a = "goog.require could not find: " + a; + goog.logToConsole_(a); + throw Error(a); + } +}; +goog.basePath = ""; +goog.nullFunction = function() { +}; +goog.abstractMethod = function() { + throw Error("unimplemented abstract method"); +}; +goog.addSingletonGetter = function(a) { + a.getInstance = function() { + if (a.instance_) { + return a.instance_; + } + goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = a); + return a.instance_ = new a; + }; +}; +goog.instantiatedSingletons_ = []; +goog.LOAD_MODULE_USING_EVAL = !0; +goog.SEAL_MODULE_EXPORTS = goog.DEBUG; +goog.loadedModules_ = {}; +goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER; +goog.DEPENDENCIES_ENABLED && (goog.dependencies_ = {pathIsModule:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() { + var a = goog.global.document; + return null != a && "write" in a; +}, goog.findBasePath_ = function() { + if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) { + goog.basePath = goog.global.CLOSURE_BASE_PATH; + } else { + if (goog.inHtmlDocument_()) { + for (var a = goog.global.document.getElementsByTagName("SCRIPT"), b = a.length - 1;0 <= b;--b) { + var c = a[b].src, d = c.lastIndexOf("?"), d = -1 == d ? c.length : d; + if ("base.js" == c.substr(d - 7, 7)) { + goog.basePath = c.substr(0, d - 7); + break; + } + } + } + } +}, goog.importScript_ = function(a, b) { + (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(a, b) && (goog.dependencies_.written[a] = !0); +}, goog.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.importModule_ = function(a) { + goog.importScript_("", 'goog.retrieveAndExecModule_("' + a + '");') && (goog.dependencies_.written[a] = !0); +}, goog.queuedModules_ = [], goog.wrapModule_ = function(a, b) { + return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(b + "\n//# sourceURL=" + a + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + b + "\n;return exports});\n//# sourceURL=" + a + "\n"; +}, goog.loadQueuedModules_ = function() { + var a = goog.queuedModules_.length; + if (0 < a) { + var b = goog.queuedModules_; + goog.queuedModules_ = []; + for (var c = 0;c < a;c++) { + goog.maybeProcessDeferredPath_(b[c]); + } + } +}, goog.maybeProcessDeferredDep_ = function(a) { + goog.isDeferredModule_(a) && goog.allDepsAreAvailable_(a) && (a = goog.getPathFromDeps_(a), goog.maybeProcessDeferredPath_(goog.basePath + a)); +}, goog.isDeferredModule_ = function(a) { + return (a = goog.getPathFromDeps_(a)) && goog.dependencies_.pathIsModule[a] ? goog.basePath + a in goog.dependencies_.deferred : !1; +}, goog.allDepsAreAvailable_ = function(a) { + if ((a = goog.getPathFromDeps_(a)) && a in goog.dependencies_.requires) { + for (var b in goog.dependencies_.requires[a]) { + if (!goog.isProvided_(b) && !goog.isDeferredModule_(b)) { + return !1; + } + } + } + return !0; +}, goog.maybeProcessDeferredPath_ = function(a) { + if (a in goog.dependencies_.deferred) { + var b = goog.dependencies_.deferred[a]; + delete goog.dependencies_.deferred[a]; + goog.globalEval(b); + } +}, goog.loadModuleFromUrl = function(a) { + goog.retrieveAndExecModule_(a); +}, goog.loadModule = function(a) { + var b = goog.moduleLoaderState_; + try { + goog.moduleLoaderState_ = {moduleName:void 0, declareLegacyNamespace:!1}; + var c; + if (goog.isFunction(a)) { + c = a.call(goog.global, {}); + } else { + if (goog.isString(a)) { + c = goog.loadModuleFromSource_.call(goog.global, a); + } else { + throw Error("Invalid module definition"); + } + } + var d = goog.moduleLoaderState_.moduleName; + if (!goog.isString(d) || !d) { + throw Error('Invalid module name "' + d + '"'); + } + goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(d, c) : goog.SEAL_MODULE_EXPORTS && Object.seal && Object.seal(c); + goog.loadedModules_[d] = c; + } finally { + goog.moduleLoaderState_ = b; + } +}, goog.loadModuleFromSource_ = function(a) { + eval(a); + return {}; +}, goog.writeScriptSrcNode_ = function(a) { + goog.global.document.write('")' + Response.Output.Write(""); + } +} diff --git a/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx b/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx new file mode 100644 index 0000000..52d2e67 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx @@ -0,0 +1,11 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Redirect.aspx.cs" Inherits="Redirect" %> + + + + + + Untitled Page + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs b/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs new file mode 100644 index 0000000..9e0650b --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs @@ -0,0 +1,9 @@ +using System; + +public partial class Redirect : Page +{ + protected new void Page_Load(object sender, EventArgs e) + { + Response.Redirect("resultPage.html"); + } +} diff --git a/www/node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop b/www/node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop new file mode 100644 index 0000000..fc955f8 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop @@ -0,0 +1,759 @@ + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/Web.Config b/www/node_modules/selenium-webdriver/lib/test/data/Web.Config new file mode 100644 index 0000000..68b648f --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/Web.Config @@ -0,0 +1,59 @@ + + + + +

          + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml b/www/node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml new file mode 100644 index 0000000..a0f5470 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml @@ -0,0 +1,14 @@ + + + + + + Title + + + +

          + Foo +

          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html b/www/node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html new file mode 100644 index 0000000..4b34031 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html @@ -0,0 +1,81 @@ + + + +
          + + +
          + + Red + Green +
          + +
          + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/alerts.html b/www/node_modules/selenium-webdriver/lib/test/data/alerts.html new file mode 100644 index 0000000..1add0db --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/alerts.html @@ -0,0 +1,85 @@ + + + + + Testing Alerts + + + + + +

          Testing Alerts and Stuff

          + +

          This tests alerts: click me

          + +

          This tests alerts: click me

          + +

          Let's make the prompt happen

          + +

          Let's make the prompt with default happen

          + +

          Let's make TWO prompts happen

          + +

          A SLOW alert

          + +

          This is a test of a confirm: + test confirm

          + +

          This is a test of showModalDialog: test dialog

          + +

          This is a test of an alert in an iframe: + +

          + +

          This is a test of an alert in a nested iframe: + +

          + +

          This is a test of an alert open from onload event handler: open new page

          + +

          This is a test of an alert open from onload event handler: open new window

          + +

          This is a test of an alert open from onunload event handler: open new page

          + +

          This is a test of an alert open from onclose event handler: open new window

          + +

          This is a test of an alert open from onclose event handler: open new window

          + +
          +
          +
          + +

          +

          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/banner.gif b/www/node_modules/selenium-webdriver/lib/test/data/banner.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f3435401f878af30930bfb19ee1e340d823e706 GIT binary patch literal 2109 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 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html b/www/node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html new file mode 100644 index 0000000..f2b1939 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html @@ -0,0 +1,41 @@ + + + + Testing Typing into body + + + + +

          Type Stuff

          + +
          +   +
          + +
          +   +
          + + + + +
          + +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html b/www/node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html new file mode 100644 index 0000000..16fbbe9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html @@ -0,0 +1,19 @@ + + + Elements with boolean attributes + + +
          + + + + + +
          + + +
          + +
          Unwrappable text
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/child/childPage.html b/www/node_modules/selenium-webdriver/lib/test/data/child/childPage.html new file mode 100644 index 0000000..9192b54 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/child/childPage.html @@ -0,0 +1,8 @@ + + + Depth one child page + + +

          I'm a page in a child directory

          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html b/www/node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html new file mode 100644 index 0000000..f52685e --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html @@ -0,0 +1,8 @@ + + + Depth two child page + + +

          I'm a page in a grandchild directory! How cute!

          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/clickEventPage.html b/www/node_modules/selenium-webdriver/lib/test/data/clickEventPage.html new file mode 100644 index 0000000..8e0355d --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/clickEventPage.html @@ -0,0 +1,26 @@ + + + + Testing click events + + + +
          + Click me to view my coordinates +
          + +
          +

           

          +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_frames.html b/www/node_modules/selenium-webdriver/lib/test/data/click_frames.html new file mode 100644 index 0000000..bd055c7 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_frames.html @@ -0,0 +1,10 @@ + + + click frames + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_jacker.html b/www/node_modules/selenium-webdriver/lib/test/data/click_jacker.html new file mode 100644 index 0000000..0ff3900 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_jacker.html @@ -0,0 +1,38 @@ + + + + click-jacking + + + +
          +
          Click jacked!
          +
          Click Me
          + +
          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html b/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html new file mode 100644 index 0000000..8a51659 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html @@ -0,0 +1,23 @@ + + + + + + + + + + + +
          +
          +
          +
          +
          + +
          +
          +
          + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html b/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html new file mode 100644 index 0000000..15ac17f --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html @@ -0,0 +1,85 @@ + + + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          data
          click me
          +
          + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_rtl.html b/www/node_modules/selenium-webdriver/lib/test/data/click_rtl.html new file mode 100644 index 0000000..e84fffa --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_rtl.html @@ -0,0 +1,19 @@ + + +RTL test + + + +
          + +
          Ù…ÙØªØ§Ø­ معايير الويب
          + +
          פעילות הבינ×ו×
          + +
          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_source.html b/www/node_modules/selenium-webdriver/lib/test/data/click_source.html new file mode 100644 index 0000000..22e9319 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_source.html @@ -0,0 +1,18 @@ + + + Click Source + + + I go to a target + + + + + + Click Source + + + I go to a target + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html new file mode 100644 index 0000000..7b749bc --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html @@ -0,0 +1,6 @@ + + + click iframe + +Click me + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html new file mode 100644 index 0000000..60b1cca --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html @@ -0,0 +1,8 @@ + + + click in iframe + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html new file mode 100644 index 0000000..d6f4caf --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html @@ -0,0 +1 @@ +Continue \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html new file mode 100644 index 0000000..cbc16e8 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html @@ -0,0 +1,10 @@ + + + + Target page for issue 5237 + + +

          Test passed

          + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html new file mode 100644 index 0000000..0443436 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html @@ -0,0 +1,11 @@ + + + + Link that continues on next line + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html new file mode 100644 index 0000000..245f038 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html @@ -0,0 +1,9 @@ + + + + Target Page 1 + + +
          Target Page 1
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html new file mode 100644 index 0000000..6f9636c --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html @@ -0,0 +1,9 @@ + + + + Target Page 2 + + +
          Target Page 2
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html new file mode 100644 index 0000000..87a35f3 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html @@ -0,0 +1,9 @@ + + + + Target Page 3 + + +
          Target Page 3
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html new file mode 100644 index 0000000..6cfa56a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html @@ -0,0 +1,70 @@ + + + + An element that disappears on click + + + +

          Hello

          +

          Hello

          +
          +
          +

          Log:

          +

          + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html new file mode 100644 index 0000000..2af6252 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html @@ -0,0 +1,124 @@ + + + + An element that disappears on click + + + +

          Hello

          +

          Hello

          +
          +
          +
          +
          +
          +
          +

          Log:

          +

          + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html new file mode 100644 index 0000000..77a9d6d --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html @@ -0,0 +1,11 @@ + + + + Link that continues on next line + + +
          +
          placeholder
          Span that continues on next line +
          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html new file mode 100644 index 0000000..0ed2cba --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html @@ -0,0 +1,9 @@ + + + +Submitted Successfully! + + +

          Submitted Successfully!

          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html new file mode 100644 index 0000000..1c0c3d0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html @@ -0,0 +1,13 @@ + + + + A wrapped element with overlapped first part + + +
          +
          placeholder
          +
          Over
          + Link that continues on next line +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_too_big.html b/www/node_modules/selenium-webdriver/lib/test/data/click_too_big.html new file mode 100644 index 0000000..568ee77 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_too_big.html @@ -0,0 +1,10 @@ + + + + +
          +       +
          +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html new file mode 100644 index 0000000..cda990e --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html @@ -0,0 +1,11 @@ + + + This page has iframes + + +

          This is the heading

          + + + + +
          +I'm a normal link +
          +I go to an anchor +
          +I open a window with javascript +
          +Click me +
          + +
          +I'm a green link +

          looooooooooong short looooooooooong +

          + +333333 +

          I have a span

          And another span

          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/closeable_window.html b/www/node_modules/selenium-webdriver/lib/test/data/closeable_window.html new file mode 100644 index 0000000..e64c599 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/closeable_window.html @@ -0,0 +1,8 @@ + + +closeable window + + +This window can be closed by clicking on this. + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/cn-test.html b/www/node_modules/selenium-webdriver/lib/test/data/cn-test.html new file mode 100644 index 0000000..df846ad --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/cn-test.html @@ -0,0 +1,156 @@ + + + + + + + + + + +
          +
          + + +

          Õ¹Íû2008ÊÀ½ç´óÊÆ£º·çÆðÔÆÓ¿ ¼¤µ´ÈËÐÄ


          +
          + 8ÔÂ8ÈÕÍí£¬±±¾©2008Äê°ÂÔ˻ᵹ¼ÆÊ±Ò»ÖÜÄêÇì×£»î¶¯ÔÚÌì°²ÃŹ㳡¾ÙÐС£Í¼ÎªÇì×£»î¶¯ÖеÄÎÄÒÕÑݳö¡£ лªÉç¼ÇÕßÁõÎÀ±øÉã + + £²£°£°£¸ÄêÊÀ½ç·çÆðÔÆÓ¿£¬¼¤µ´ÈËÐÄ¡£µ«Òª×÷³öÒ»¸öÔ¤²â£¬Ê×ÏÈÒª¶Ô½ñÌìËù´¦µÄÊÀ½çÓÐÒ»¸ö»ù±¾¹²Ê¶¡£
          +
          +ÖйúÖ®Éù
          +
          +
          + +
          + +
          + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/colorPage.html b/www/node_modules/selenium-webdriver/lib/test/data/colorPage.html new file mode 100644 index 0000000..0d1bfc0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/colorPage.html @@ -0,0 +1,20 @@ + + + + Color Page + + +
          namedColor
          +
          rgb
          +
          rgbpct
          +
          hex
          +
          hex
          +
          hsl
          +
          rgba
          +
          rgba
          +
          hsla
          + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/cookies.html b/www/node_modules/selenium-webdriver/lib/test/data/cookies.html new file mode 100644 index 0000000..7db5b49 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/cookies.html @@ -0,0 +1,30 @@ + + + Testing cookies + + + + +

          Cookie Mashing

          + .com Click
          + . Click
          + google.com Click
          + .google.com Click
          + 127.0.0.1 Click
          + localhost:3001 Click
          + .google:3001 Click
          + 172.16.12.225 Click
          + 172.16.12.225:port Click
          + Set on a different path + +
          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html new file mode 100644 index 0000000..7714a48 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html @@ -0,0 +1,9 @@ + + + + Welcome Page + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html new file mode 100644 index 0000000..b3143b0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html @@ -0,0 +1,9 @@ + + + + Welcome Page + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html new file mode 100644 index 0000000..6f2bcd4 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html @@ -0,0 +1,11 @@ + + + + Page With Element Out Of View + + +
          Placeholder
          +
          Red box
          +
          Tex after box
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html new file mode 100644 index 0000000..b07972a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html @@ -0,0 +1,10 @@ + + + + Page With Empty Element + + +
          +
          Tex after box
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html new file mode 100644 index 0000000..6cbb273 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html @@ -0,0 +1,12 @@ + + + + Page With Fixed Element + + +
          fixed red box
          +
          Placeholder
          +
          Element at the bottom
          +
          Tex after box
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html new file mode 100644 index 0000000..286b04b --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html @@ -0,0 +1,10 @@ + + + + Page With Hidden Element + + + +
          Tex after box
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html new file mode 100644 index 0000000..dc33c71 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html @@ -0,0 +1,10 @@ + + + + Page With Invisible Element + + + +
          Tex after box
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html new file mode 100644 index 0000000..d0090d9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html @@ -0,0 +1,10 @@ + + + + Page With Transparent Element + + +
          Hidden box
          +
          Tex after box
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html new file mode 100644 index 0000000..7b857b9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html @@ -0,0 +1,10 @@ + + + + Simple Page + + +
          Red box
          +
          Tex after box
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..954e22dbd99e8c6dd7091335599abf2d10bf8003 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEr#)R9Ln2z=UU%d=WFXS=@V?HT z#xG*`>Yvsgk=}99w^d^D^d*@m74oMo<%#FcopJf?u00-~YVKV2wzrI*_R6;UORMea zBFVSEnN~eiVA6V&z`E)YLz5Aok^D)In}Yn=OzDpgR5Wv0XfT8pOkmV{sKAJ-PO9#T zZK}IXj&Q-V!U)!LcB_3K0&C*{ literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..64ece5707d91a6edf9fad4bfcce0c4dbcafcf58d GIT binary patch literal 251 zcmVbvPcjKS|RKP(6sDcCAB(_QB%0978a<$Ah$!b|E zwn;|HO0i8cQj@~)s!ajF0S002ovPDHLkV1oEp BYH0uf literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..abdc01082bf3534eafecc5819d28c9574d44ea89 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQY-ImG zFPf9b{J;c_6SHRK%WcbN_hZpM=(Ry;4Rxv2@@2Y=$K57eF$X$=!PC{xWt~$(69B)$ BI)4BF literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f4d2eab09c0f2a739d6b232c32934bc620b GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour1U*q978O6-yYw{%b*}|_(02F z@qbE9)0CJMo;*v*PWv`Vh2h6EmG8IS-Cm{3U~` zFlmZ}YMcJY=eo?o%*@I?2`NblNeMudl#t?{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..39d5824d6af5456f1e89fc7847ea3599ea5fd815 GIT binary patch literal 3762 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 literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..f1273672d253263b7564e9e21d69d7d9d0b337d9 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%l7LV~E7mxPQ=F85a&M@g_{ d|GeK{$Y5lo%PMu^>wln`44$rjF6*2UngE4^EGqy2 literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..b273ff111d219c9b9a8b96d57683d0075fb7871a GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..a641a371afa0fbb08ba599dc7ddf14b9bfc3c84f GIT binary patch literal 4369 zcmd^?`8O2)_s3^phOrG}UnfiUEn8(9QW1?MNkxXVDEpFin2{xWrLx5kBC;k~Gmw z<@?HsG!Qg3zaV+-xQ3ldtad!U<6iGz_enGH*2akP_r)o1D&8p^5M)_c8IIj6Wy*7HJo&CBLuo~nj>(63pZzO(Vv^ZuB3 zMYigjkwA;FEy|G}1jpiMj6|NTm7Uyiw=@FDE*nX<>jR!W@9XIyf%$Fd*J5*D0Z0Lm z9}ZQxyT|x5ftNy?V>EbJz-K>bV9gs9RaXUP<^=;e?&Fqxj;6{ieR-a-@HycA1KMKhql8GOmcxwZ?_-(3hMK^^a*(gaFvBH ziIC!fgH4$W*NbKIaY&T?%&13``KbD@S-0`xQ%v3TV+B!;RC7O!+1a9QCA$H@3tR;k z)SSoR7(s4)f{zM}eWgFN{(ZH5d1O}l)f$ruT!)Q&NImXyZsTzOf9TwctcSfr+M)aJ z5otO+$jvm-P4)ykH)x|cO5xeb>?!`qGw$(>&axqLL6yoB${vsMXgL_-bz@2J_tS92 zdvZG-+vKl@K4Vr(EL{WQt@Z+Ea-hxX0}nTSZxnpi^#Kn8Ox8FgIS|hc}KJQ4tm*HO16ui{(O9} z1YN)GjiQt6fGq`Cj+^`zUf?8hk^(T{{cOQGWFP98am}is28A!5%{R#ENv8fCN!j69 zlMEK(2z?|BY=Je$XD9mB-Kkem*(d-j^9j$2#6r$Dz?s)-TCDCGCs z8>6Pvj{Y+YIeFA@qY22V$)awy@q!9A4rgk5b9TcC;s9Ig^G|6nDP+5=Fzg&?(L=vc zCbGd>fSu~@6!94td+o#d@sid!EIX$rx7*cawe6 z`dScJ+$HssdOjE)O#Ybs56vm-FQ$7yuJJD^Zqk%hMaIgAJ<2yb_MFQte_i;62ScT$ zpjifYyR_E=rQ+>H)pmlr-Udzg*-!|ssw(D7wJvC+Sf8bb9;;q8#z?0p!!bsd{wy|5 zpBaMHE-Ve>i#LLjHRaMLtp%9&(HCng7Sw96jVv!#0k%?F^K7&=T)mnYn)D9(i;4x5 z^NJTJwq~pv;kH@#ejTd*48~(J(r6j34|m`h9fEDj0im)~+%I5XphWymhT;_Zty|Q& zzjPg#-ufAHZ1M*Gccw?Kf|8Pnhtb0`!{N`Bqsa37J+>wC$!e z00k+2Egzz;rbcWoUB%Jvp8W1}$XD%e3>4y;;OZ1ccT-O#uW6Ys@C}Pa`nZrNKzR(2 z4e%3)@QI4SE&E!lW`5y14QhbepBG%_XBV-O(%5tj)@9#|;sC-MNev!zGDHk}JdpGC`iJF#8=8-P$Xoku_=Dw%Cv3{U7L>gf zRQ?<$t`cZ*MP5GQmbmx#!+*!zu>0MewRO9GFGS{b^m_fJ-N0?j@EqoFf>$khj+E|@ z7r3We&^tR^YZrxKe*d22agXqCO0l44&kqCv{u)T|(lv`~PK@DvE z{QI_TlCH5z*gR!>LO)k67{^R+vWx24U2^2ODXpwT;6y+6+$5m)_*w4WY&#do9dCeE z)>p+Ykdhq($DhmMiaYXey!@N%L26uz($aJ!QT{B^Wu}U$^9e#5)=c+XF9@Ill?ZmM zlNgHiz*9!vDc&uxOo;ZVxb`Q!Sk0*gnfxWzmbZh4(=%CD%qP?0=);n$&zaW_$UKV9 z8axdcN#AyZ{P)wj?V{P}vM)YY!>6@}^>U+iv$`9>nMTCPjN>z%yF&3yf%>+T@0vh4 zlC8Xa6zeo?%=o3}M8{aebLHcO{^1Ar8qiM=Gquf?Jo)q5`-+?sUpg?QXyEUpWSm+n z$K-UyqkIwHLquru~o(OF)hhz$Y*|X>ZIbswnxRvr~ z2=rdOGVuD|xRlpAZE<0!X1F(%Anpl^@V^D3vbM}qxe|NI;TTiZy7(IM;R69RkA>a& z6gwYE2sREzQ_LHmWqB+ogMk(fMaSFeoDq-!HkFB_nXt5+2ncFuk9BQL1I&oB1zZi) zYW{6_&-Ip1l*OVRA##1ILQS;5R{-K^0wGTiJbVSi@LA^$D$;@J>^G{6@&+%4{b3(s zC~LEHiTv(0b#zxt?YJ0r_~pUZM~mQ(??(n#>&tD%+@nq=Abj5*8R!~Ul1`G~=qFJ4 zfl|m8ZDCYgtr`4LcOpgiJYX9qRY5;DcWti~PmS$VB$E-Zt^f4)vLDOe_3XTq5^ylW zJ9PKm!V-8sAOJXnUfuFNIf0R9tK-pNs2hO04zr620}5B(Ok>yB)Of-3sP59qfQNbm zA4{w!2@cB;GbR(~szVrbO%(w=5S!X`o@o@x++wbN_tMPT0Vc)*I;Fgsbf^*g0 z2Di?HTApwKq3+YwfNsqd3iP%{hyK1iyuVZc@*0tO_3+N0#GFsz>8MjeJ2UJ%L!%hi zGYYAthH`E+ywA*u{(eJ=ia3h*%k?779rk-K<0VZAPkl;TFUbmei|$fqWO8!_zIvqt z$ly$VrlH46nnpX~X5Yk0iBJl;=WuA4>~X4-f&K0yWf42h&0b30t@NYX$7egQ1Fp!a zbui-D6cWCWV&|R1CY@G8(qOmWjWeX3eX7UggZPGimA}soOuQdXe4uZ#2>5zN>qlI0 z9xk}lE=tNpX1m6*nFr2EQ3xs79!^sCldDJYE$m(qYv3q7>}1R7?iZW7>$~*%zKaC| z=$N?ME$>#+%T&MZC`dW1wUl6Z)JgyCn~V%K&i0H|iwE%$>xsZW3tTfZxIUePci@p;cRu|d=ItIwF z1clVHy{hH?@SD|(Zfqi^0DQ1hczHN7xq85h)rzQqLHMX2^IkuK7FB!kI40s$|CY7~ zNX^{_UjN8}L%Med;|+=4RNTMozn8KT;2tb77bUPCmioh+rZBfIiM6f_P34cQ__o1G zWqQp3VL~~pE5?qODf%iiQQ3f42YF@09tQ*$4v_EKUx;t1KCPCBtgqg z@+Tn;O)a0uky_%jm+WjNB?=~VyH>V#L!*=l*@OS6SVyt_UEH&NA=?V2stHPyKkVNy z&jg<#cjros){#ji)dK z%)We0L_478=HZ8-@xnwsKrWs8)x`MB;(Y`Cmu2c-&SH(vN-F(*e`l?c%+l$|y_AJJ zhcDGnwLvN+bu;_sX|1AiePhx@u&%P$hf*xE+O=~D?_(_KGWQ!158YL-y9$*6mmPo;Rp*Dl5lm-mVM2i`h- zM@nxv590_tvMwPD_{l=b$iOm|+|S{D9&P%zeT$GgX6Akl-tfUF>tL@Ld!B&{pN39t zH>3Vhqkr}2Yul+jb7UiouWVGPNsxX7Ueba+9|~dz?d*QM$ng0DZfO0`7fAy?2yMm| zcnRzUhZ&IcwgjH9cuU!w+VStYa{p*)4IgBf|E8)sqMYtB2KH_}SfsFq(c9i(Q6S3U oBo%DI*Kv;w;*%(i9W@e{{5C=l}o! literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..85e63e9f604ce042d59eb06a8428eeb7cb7896c9 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..e117effa3dca24e7978cfc5f8b967f661e81044f GIT binary patch literal 4369 zcmd^?`8O2)_s3@pGmLE*`#M>&Z`mr_kcwz5Nh&g=McJ3E!;CE1E0ryV5Ro;>nvtvt zk&I==Xd;cVGZ@>q_xtnx{1u%7-D)N|5YqOB>i;(bZ#o62{J2Y9&^D3~R^$o+X? zwbxAEIb)xwCwK3TSR4QVym6N1rVgPmmt0caryBUceHP_&u}{?^Jn7f0PT$#h>UDqI zr!q(F&1jJ2_!jxdAB<)7H$foI*2zuncvu;;$SoU7br=AiJ@4=BC4vNO>DS`&UIB=K z;2)0F*t^FBvVfPuT4FVMSwUw%Xksjyl+;#*DDy%=ocFOyzDLvLR(`zCSOuJ=?FWYn z5ZD!UaoF>-$@=Vt?a&;UQYM$Oqe0ZB?Je?8ZnMxDe&uzzs*zlHd)V58nfJPc8S^({_4bj5HQ_B&EXHWj6wx@B;!mr04b_Mx)UFL)W7`V!c zpMp#C!a!!sh3h491y}^qfimXVY%!+sYu0_DWoJMqpN(FR9LM#jdZ{vJzEck`P^9(1N=4J za9%u4$2J8TAkUaJk_FX%iHuv#svL_mMmp{SR}ifc#ZcXv%CFsT?*>N^6r(%D?1YnU zAaT?UZGlOna6UXXs0m)3YDp}d%hb@)@Y!lK_A&D6{OPlNnj zYY*$b>vnRzL8=CDbQSi!DL3D!P^xhNtwrYByo?h-&OvQZYJ6ka{Re# zSc0ry_d(K$_Q2M{Y^O~DOK(szDOnMi_*h_Rx%eSRxA%n|FuC&=F=)B z_Qsgmj8g!GA+LZOX)gOW}vbo9|l8QW3iYw9qCD{o~xt^HIU>;dV5MJgc0#uHTA z80%Ee_r;G`GUjssm z*AhtwpW%Ly;X4Lq1Zq#ZpuwzrZE$sR087dN{w7PA6|Mo#6wwJP085K+h7+D>NyeX# zk|?MJ^Es)JtP-2eNr0EQe*ZM`&}OU zCD*uSSviE&p}uX|@1g_%|3*ra*MbBV#~cshdcFQ(dGLnTqaO-3{u==x1;Pp2im!#` zuZ2`ThfAmiSzb|4h`c4?^ZoGOF*oXYcV}(ge!v@^bse?daA`Ma+bSZLIg;pIN17vM zIOYfK=@s_Pj?~#lqnY2o?d1$MpoqsYQw%eX%X6Y4*^27{hMWGqILEMnVYUEMW#x7f zu^I*nzXQ@6HJ8n;26 zo^1+Ewi$fN$Unum1(FTb8I#cYgcGklwIExt#Mb(D=x~OTeZ^ubJ)S-ywfdZS?SRCq zDm=eU+CCWO@8S_m!W{alT)zj zZJbjxm5&No5xe_~Jw-i7`&G}=r)POGGfFq+c@kQbB#)ay`coj&C3- z(#&xV@Q3@VJd{qdH4g@4ZJi&mx9e@Io7@~(o5vTrkW>QEO1T-gmlTRHH+3)gcUC0P zk07rvDnf*7Y5J}8!>F_7D^Z3IoH^uGH}_a(ax{Q(IrvV$olf3WN&DY?uYZfvXI(;Vv&EAoQtfH;+4VI_a>yh*J+Cj!?h!QX?O`QXk@@G7AjloJe51Cw*rPXQ>#y?B^^ExRQFui zolmv*C5K|-p){rZiCNai^0H`1(Qr(Hz3v%7NnmriXu2tD>xsbN#*R3*wsZhRj6Lvb zn0Cu=qkC?*e4{NF_3=^bTb1f!g?@ryFH6Zw2tz%A zzz&o{w`dDv66!6Wk9w1-dglS#Sm{doxw&h5Z8&ONmlBBte{J)puaDzc!LC==rPRQK zQNH23?-rIo^MQdt3Tk!B@8l#}fxVtrlc8Y<>ORaVE($DKc{77qV^`+`%_DotrUD=8 z4}L7QnZi3RgUy*tteY-=$SqA2@IZWe(}mI`nzhAT{qC)my#rJsfoS*)xCXj!Tk6=3)cr@Jw#OcNqgS3pg7x|4!A$|w15X!huR*vB3q9Ya4 zF{xuzEQz{9YPl(gk`}Gffut%jotgqp$jZvzRO4EsExf~93vY~04AxH=lR>R3v3Qs2 zy$v4SN%ee@Kz#kDtARaQD`d!R%}#@T1=v8DAow*r>+0d1KS{ZtA~KMtgm)+$JHumW zw=;@qWk&MuG@LKx#K3@&WMw?r=jD2_)(*$LmkCm4_@};QZI|SPe8hIC6xqBy!LQyK z01_xmfNA9UlBU@Kzu7;zQYxHE>OCADA$gwaVqm`eN?XQF@NkrocB}lU4hcCf>wqir z>Ya=PcE!Xm#JG8v@G0lj&~)hScM}X57vGw3g<$^SUls53f|Bk>5FQwqE&{%u(f$!1 zl8+53vyYZ`mEEp&YT<=(krhKrw?~pS{N)?q{0qBR#2Y!w4!hWMdj`a(@A@r$zVB+u z06Hb@_9(cQ_AxbXI|-2w>#QUhp7k<+`z9+(jkh~v-Renr#C9U+&jL4vg6-E$f7@UU z(1fxB8{U2vq}h3rE!Z+n7=(>D&}@9~3mJ^R5}|WVG@!RSh3r{!>QHwg!t29YS&jiR ztyn_q*k9H0efZ7hO*b(WR|G!TDY`rol~Ob4&1OwdM8kbGj`^$~L5gdWYceWwL=PB{~NX=cu3p-{S;hqaE?bSHv$g+SA6bxy+VU3YVTPDj6CN zKLb_(9gM2Y#KW8ONxjH9To^Y)r?ql2cq8+WE438uIF$hjfdLs6-;!jv55jGcc3Ipg z;}aT32NAEGeU;J}&j5=+u`4?%xlwL7?NDn%2={4WS39yn3f;&r=|}5=M-Y2yrxeSw zv%*PmV{_{#Qk1sD>?M2KDapb~z3!E*-LPmCe9q86D%MGSe;4~~K-jKQxq6b^902_{ z%>4G>@Xqk8muR*|vGe5{@7sds2i|i;g}oMkd!o^0=HG+vcPrcN54A zLGv$PlTePRxp~-OSb_*aACO1qc{MpfS-fv(@UmRv%UO)cSt;ee@9(S)f>|~bwU@eZ z=kTS*sdjLclwMZG#?%U3)bq-uj?@@vj~6tq)ZS||Jxz`+di-M5SXM=h3EL`?pB>W9A;`V2vM)vk&%KFy|TAh#AQA zb_?J==3f@%LL{`vU$3Z@A2a9C3aC-YY43dR> pI7J0n@;b3~`)ubvsr|iU(l;L{A#E6J`}eC4usn-0uQEf&{2ws1m(ltoqJ#RmwV2==ic*rz7lOw=eaq=H~;_ux21)-Jpcgw zdj+hrf&W^f<%Qk9Zpqf#;q3n5{{POY;f!wmTR1An9(4&I0z1LNX50QSTV2M%4|y9c z#{ZQIVJKu~aY5?ZaZP*GIGqGs=e@q6o|EPhZB3CC?@LnORK8O@z{{<0KtSn5?#~OW zy=L;x8T&*%xqElS;s5~Pjk7d2bqIaA)xZbovnZd7eX17WNxx=w`p(8vulwUZ zl{so}MuRNJx5!8S5G;$o2?BApPHt+)!^#*Ww`?rcVE}mcyuY`X2o|uVUyI9o1t11O zemGWR?;aD#0$vJhiPhv~0iXS#iLq!>Qd$` zU{}<|Vb9Md>$4TMbL7C3GP#r;4Wc$}Z;^j;n}yc!E3d;`wry$!JkmJP0%(tIh!!TET8=+{rhUi^60G0t2HJSxXv-*DgC(HrJd8`|Dp3NvL5yg>xAvU zho|fEA~w^-HrW&H-JwkqNX2I-bEXBR&Uhp+y2^)1h1IIlNCzC!v-Mz@&z&VPz+cl1 z=f&f6Y*U~C`ixm4Sy1hl$hg(4%Dy;bq~k7d1<@K&%%NLT`L+A)-QXyKVswX?op90( zB#yeFEih@c{OXU8Oq~1CFI_38GXmns3(`;W(i+bslovCx4u7gvK>DrGOug*?G|1nz z_OR}|ZYS3pq-p?rS7G0qa`TM}r5XqDT4cV>%Qyk#9ES}`jc+Ww|DcbZrF6UG>CeXp zOVIV}K1e#z9@tu#?X)Ri=?zXMB`X3G-_I7FL-Zq`nbfWtX_EO1*!+U6pJW-_k&+vk zMd}THh}{(Ch_wPk(PI4vVB_KT76kGxVytLxpWg}&bHw`a3G#QzxV@ICNax&@hk3<_ zBh`Tq66G{-tCw$V{(y0v7l!tp20~@gdFXjzFbF#bJE7i>T4ux zQdrF3org^wFcnw$#bQMv@SfN3$Fuo7HnB_`2ZGB{ZqGr>%xP;2_!Q{=N-ZhU1c~^5 zdt=OO#wmcpkXJyCG?{{&n=R{Sn=Ytg;<09CH)l7TA&wkt{Q;>RrA2Ia6-QixEPLrU z%0)N$3Nh0?U825&v($Sz}0G_(!v&xSSAzje4{rup+^W@^}ByqOb95$E0sbwK*%#GP}!6`%*Z@L;&C z3^dE&>5%bWAXmP*X1 z_m}Pivs*u7@9i>qA!58fDCwj^M<1P(u^m;urVdlM@>aIf+E3-d9ZW>fc4cS7w5O3sCmKKn z+94A?VyfSBb9{}rEbCIYtXORJBCv__fnZ>?a}edaA%bP$jI?J^q0UKO!mduA8U!3b z0CJ_Js}NWQZoebapVUHP%pPOUm?1<)zd%`hzUM-Y6g1z|@@3G_kio?S0bcbjQuxJd>vU$Uyz(4*peEDSVc-G;O;% z9Y97%Tq}TRsH+oN%2u(oyC=W<9`e@&m;i;jC%L;sP(9RBDQnth3;ZMEQNFH3GEf0c zU<3RF!hNG-vCDooYFS^nPlFnv4(ElI1=vNcr42TF^uq67f{MoN>{f&>xA91r4pz5Zc&@P^i-9||`98v$Si!U@}ouZ88W zg;YL=OQ;4}UQtkpyd~lD{qWy0H|lwJXKmenz#E=*9kt$YX*X!wDk7ITlIUGWnj>a7 z<_GQR752@J)Y(U)ncu(dIit7P}oBq8x$FP85)&Nsw<#rOW z8U_x(1J)Zgm(8tZXU%+(yYcO+Z7#ZszPwa2`ygiMPayX9KondtFMRK!7x`9uWN;(f zfWW?8yOdj;GA3We0YAW92gWipn(d>zcbA+vZ_21BxF?-pfcW` zbqY??6ie(6M)p@6@WQ?Tl7 zoKrKEj|x~2yZehhMLkFRRnOC>XL&L+N;m0B{_OQ9gzzTYb!!Jct=bk?_hIpY9rOwY zMnr69R(?8EN52qR+k!~qnCYc-KmV&*d$&NY?t5cjR)V+ncMor=puTRoo?{5dH;@!* z<~RrV!+ljAN+;Qx2LraY&JWnz^|sYbZjP+Y;|pC#DuHUH+>F~x3PqTkx)=OAE0X9( z(AO6gp~AH^{nq+n)LHYDD8mQN?DDFcd!U&d4PaajzSD1~lXq3p{x=^vItrq3gD^4O z=hYS`?&C-0&KuAV>Jv}T?ba0IafL$~+bZ}p$9lwyyx=-uPN`Hpvv<)Ia>OWHa4+N4 z6zscrW$^XA32EJw^7hYtkRJr{Q8 zQ|*1pp_q6Mno|D6EX!kgSv0h0I3~ef_l%$DTFjL`0y16n%^dGNQn;2V82mqoIi9i{15vu zLq&(BTl9CInUjZlTIa>^!!HlMK3W8Sd_Ow0+E8IT?h$=55$^Z)$WYIuig=O;Lp_1Q z4wOT;XbWQ!>Mh`pdXuSo=KBba;wT!wK`Hf1Ueh04*%D7Kfj*#b~BNfvz zsbf?uiMm5-xhaQ|7Om2OrYbU>ngUM9%F5nU<65IFyu(`yZ;Vb1)=wCd!L2K?c$ezE z4IbS|^?Z>)eEp}ZfjwF)Waw?pPJ?{~*g%;efxO~Nx7dQGLWZ)cPQ*T!((W- zGm2?tM)K}7oG<0Xz<`ltWjxvE<$AH!4*R{A2~uYGr@m!vm*j+e#CE9^*}Oc#uihB| z5;#kMY2^8mrr80%*+02bDx6B{Jsch(d7kQGV7~iGTgFZBu$Pf`tNf`B2{|t7fGhIq zos0xF#l$bfxOtcGDd*MDbdKBaCKxgCEbr8JTNd_1bjWC{Ubgk z9~)9;A1&=FyIt$l!VBXfD~6VCk0fjO%QwLJ7k00RH*%I8cCqF542VzP^;`OU-_?=< zbV}OoQE)HqV`|)X5+WbgSxGWH>t+7-O;(l~Z+FJJ)sygu^+eF01#Suj+pnAcw!s>p z$-xF}c>7t9X6H$^V9hvT5H{jKv+=zzWHA0pgw8e5fZpm9vIphVq3%S4*N3%&jsY^Q zK%sSPuj=?d{ATs0o0y6#0w3%YT^@-_sTuTUwI(Q{;l3KjeAbVk#Wmi%PDxm`zoqQ~ z((<-}*FSP%5gt7uI3t1&75ne{@1^bpdW1;MMGNkSr~UAuDbB4+VQi|x(gdO^zin_) zncfs2hj8xdiiy)@vVkfkItLKvsGtJhrTb0T~tFl4Q3J!flauS==b& z6Bm!g%dDvlCf(St$kVofvH90|9yl-gmvRvcKS&Ye9DdoTK@2m}iSvC{3m%4E0 z@TJD7c1V?!URM7+t?f3)%{X(6JXg~A9TvGQyX6n(^Yt0NX;>vDPcr~mICPooLWA_` z<1A>FuXr|C)dtDr*PQt%Xs5WePWUB&gBj$zZ#BIY%?jDdpbSA-PV0`dGf^oa_Jp}Z zlrGV7oe`#B^+nPIQ`ZDJeJas=ru#=*YL#+n?Go}f33>1GsZ{TTy2bdBihj}mz*mp! zOzn%{WgLM=*CpiuKUs*GnHa{B$2siJqfNi|Z;|rH%stM*8b26kAMCYY&NHwPGtlYn z7UVx_^sgR$Z8x27foS63FCPt|gtcG_ zy#@C|!VQV~TY}G5e57qp?F4jRxqq~@h6^?-cvD>ySwVLl2m7=gERtEn>Fw_@ND%pO oiVC*mbz<%I+0K1Z`+LWvZ$3~$+A!Gm?^hpSc@||}WrmLVKLvuzv;Y7A literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css new file mode 100644 index 0000000..1706e22 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css @@ -0,0 +1,573 @@ +/* + * jQuery UI CSS Framework 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Resizable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.10 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/cssTransform.html b/www/node_modules/selenium-webdriver/lib/test/data/cssTransform.html new file mode 100644 index 0000000..c3b9964 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/cssTransform.html @@ -0,0 +1,61 @@ + + +
          +You shouldn't see anything other than this sentence on the page +
          +
          + I have a hidden child +
          + I am a hidden child +
          +
          +
          + I have a hidden child +
          + I am a hidden child +
          +
          +
          I am a hidden element
          +
          I am a hidden element
          diff --git a/www/node_modules/selenium-webdriver/lib/test/data/cssTransform2.html b/www/node_modules/selenium-webdriver/lib/test/data/cssTransform2.html new file mode 100644 index 0000000..602924b --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/cssTransform2.html @@ -0,0 +1,20 @@ + + +
          +
          +
          +
          +
          +
          +
          I am not a hidden element
          diff --git a/www/node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html b/www/node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html new file mode 100644 index 0000000..a15fc47 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html @@ -0,0 +1,13 @@ + + + Document Write In Onload + + + +

          hello world

          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html b/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html new file mode 100644 index 0000000..0b2ee9a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html @@ -0,0 +1,67 @@ + + + + + + + +
          +
          +
          +
          +
          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html b/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html new file mode 100644 index 0000000..fdee16b --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html @@ -0,0 +1,102 @@ + + + + + + + + +
          +
          +"Hi there +
          +
          +
          +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html b/www/node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html new file mode 100644 index 0000000..ecb2562 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html @@ -0,0 +1,104 @@ + + + + + + +
          +
          +
          +
          +
          12am
          +
          1am
          +
          2am
          +
          3am
          +
          4am
          +
          5am
          +
          6am
          +
          7am
          +
          8am
          +
          9am
          +
          10am
          +
          11am
          +
          12pm
          +
          1pm
          +
          2pm
          +
          3pm
          +
          4pm
          +
          5pm
          +
          6pm
          +
          7pm
          +
          8pm
          +
          9pm
          +
          10pm
          +
          11pm
          +
          +
          +
          + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/draggableLists.html b/www/node_modules/selenium-webdriver/lib/test/data/draggableLists.html new file mode 100644 index 0000000..f7e0dca --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/draggableLists.html @@ -0,0 +1,67 @@ + + + + + jQuery UI Sortable - Connect lists + + + + + + + + + +
          +
            +
          • LeftItem 1
          • +
          • LeftItem 2
          • +
          • LeftItem 3
          • +
          • LeftItem 4
          • +
          • LeftItem 5
          • +
          + +
            +
          • RightItem 1
          • +
          • RightItem 2
          • +
          • RightItem 3
          • +
          • RightItem 4
          • +
          • RightItem 5
          • +
          + +
          + +
          +
          +

          Nothing happened.

          +
          + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/droppableItems.html b/www/node_modules/selenium-webdriver/lib/test/data/droppableItems.html new file mode 100644 index 0000000..fc850ac --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/droppableItems.html @@ -0,0 +1,65 @@ + + + + + jQuery UI Droppable - Default Demo + + + + + + + +
          + +
          +

          Drag me to my target

          +
          + +
          +

          Drop here

          +
          + +
          +

          start

          +
          + +
          + +
          + +

          Taken from the JQuery demo.

          + +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/dynamic.html b/www/node_modules/selenium-webdriver/lib/test/data/dynamic.html new file mode 100644 index 0000000..b9e6067 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/dynamic.html @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html b/www/node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html new file mode 100644 index 0000000..ed7c7ed --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html @@ -0,0 +1,42 @@ + + + + Delayed remove of an element + + + + + +
          + +
          +

          element

          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/errors.html b/www/node_modules/selenium-webdriver/lib/test/data/errors.html new file mode 100644 index 0000000..78fb902 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/errors.html @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/firefox/jetpack-sample.xpi b/www/node_modules/selenium-webdriver/lib/test/data/firefox/jetpack-sample.xpi new file mode 100644 index 0000000000000000000000000000000000000000..84d6493dd4f56572a488dc06cf841d9eb2b92d11 GIT binary patch literal 7289 zcmai31ymf%w#6a1yK5i;1`QJ2ZSdd_+Z-F(Ro9%gXVz{N1$YE}7#J877d67_^68YX?`5 zv7H^8ievL(tVb67 z6QwDlj{ED3!vn{fR_$qm);PDpt<%@Iy|8h~g(_FaFRhyJEjy*^Z>SM&w3(5Ylx!I~ zwbZfo$@IX}`spI^X0PE}XaylSDH8ws%l`J zOPEs8wcD=kO3|RivmUa4>>R0B@TxRzsX%M7js=c$N3YP!;~Gb*HAY+LqwNF1G?rrL zs;rP8q(2GaHww)U%O)cY#>K7sv^8_3%jI3>nJ&3Yh)Vi1 zH8^mzphp1zm=@q|Tb4&wRv200$dHw&w2w!O4mt2@#!m>Y)%vNzmG(V9l8fogb(B(X zeF3E>M7m^hu39HNiR@j56DRhZo=f@jB#TdV&~lbpnH6@W)sHYIGow{p-uC1-SOYbl zq$#d65aOP_i86d^O2|7!=LqJ4)9vqjhw;eQd%D|MEn|581>PH?f)>s~)z-wTKjs6Q z4|(29@BLW4UdEiSl;+akhI0r%#wCf38q-#<7gSuXbSUYZGNk&jlFcR_1C;B?#g@Ks zI<8=4msjZTwGgT@IvdOD^Osa1`8`=RxCpg$ac z1U;s6bnvGA=N+v8wVr`5>Mte=42PVvq~%4W(L4?eOa|Z&rir5?$Q9&b?DW9R(6x7+ zlTNs+FyeS+k7%YCq{h-Ppt{*S1M(^Dt_LOfEV4=w1$L;sMKq}-7R6ni^lvZnHUv
          #oosl2(WxjOP={cj3_b&vW4 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 literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/firefox/sample.xpi b/www/node_modules/selenium-webdriver/lib/test/data/firefox/sample.xpi new file mode 100644 index 0000000000000000000000000000000000000000..062f9a1722450df325576503b0722dcdca842141 GIT binary patch literal 1551 zcmWIWW@Zs#U|`^2kSY*#Eoi*G+6lz$0pb~u38{RaY;OWhNCP@i2+4%}vecrS#7e!aVz^mY z{FB@7n9XD;(E9$b=uTB`(+%k_mxkRs)FuAk;f|!Q!a1FrD`KzwzvmgABW@*7!E=B1 z_aZ))nr(aul}@L8Ul2uS|q2=Xrb0qT(mM}rFiSK;2Z2kg^wpKS@k-!?5F#A^*!rZ z#V6+q@9Ozp<@P%&eE*X5xeSb@@A+bnNY;7IjpI5~c1CjYyhSQ|?afv%v$!`i(fWb> zq9wVKY})tTn_Bq=d)CVrng>3uWkv*27%-3=9oUa43~vk9FN% zZ@$9{JTBkoF#TjG+r7474y$XJ(_#M^W($|=cc01nGS4J=nzrlTr)mpRxczGmJes08 z*~R|Llt`U7d#{UMteiLFl>U(y8@KfG$({6m?l${@{k_0x z%elg<^Zx&@I``9gS6=1Ax~7mdBHH<8U-z08UYdS(^KDM2wR@Vcg*FvlHo2@eXIfEz zdZA3R{Q<{@CwlI$G)!_Q1_-}DqH;jDXL|e^jTMQ^_xlY#$jzxZQn*|HZo?^+)g|VQ z-rG~xhR5l;8YOTFdtF}SFo$be^CjlAfCrqn1zjsc4>UJ1v8?|2aB=?BN0T#Vw!3<6 zUw-lU?$ldzpDV6^mMI>^yQp01)un`qGg(%7d&VS7=TCE$*H&n}c=qDX*Q=X~B&uyA z_x2?14e0Jld+%~uswa7eb(yr*_XYB+S0zYpW#4;lkMzSlj!)8?mdgM7$&}jYA868F zB$8k2uz5n8Nn3@W-s1W8C*#bX`RwUc)Nh-jpS4}`R^P80yS?^?&u7_M-n-)?|9}4% z(MgZqy;nP@AK=Z%B*%=aRFME@YG8CRENKKWG0GTLNEw3`TM$EWl@Aa@85jf@-a2-J z4272#K+`~_1y<8=l@-WNJd0!+a>+s1T+Hl+Z0;vu2*6wkGZ&oMfChsy8y*K^rg>z8 gw*hkjN)7-Th$Zz0c(byBf}a%#mjc}q!UEy}0BE8O*Z=?k literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html b/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html new file mode 100644 index 0000000..ca65d1f --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html @@ -0,0 +1,13 @@ + + + + Fixed footer with no scrollbar + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html b/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html new file mode 100644 index 0000000..2593bf3 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html @@ -0,0 +1,12 @@ + + + Fixed footer with no scrollbar + + +
          +
          + Click me +
          +
          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/formPage.html b/www/node_modules/selenium-webdriver/lib/test/data/formPage.html new file mode 100644 index 0000000..7bcfea0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/formPage.html @@ -0,0 +1,174 @@ + + + We Leave From Here + + + + +There should be a form here: + +
          + + + +
          + +
          + +
          + +
          + Here's a checkbox: + + + + +
          + + + + + + + + + + + + + + + + + + + + +
          + + Cheese
          + Peas
          + Cheese and peas
          + Not a sausage
          + Not another sausage + + + +

          I like cheese

          + + + Cumberland sausage +
          + +
          + + + + + + + + +
          + +
          + + + + + + + +
          + +
          + + + + + + + +
          + + +
          +
          + +
          + +
          + + +
          +

          + + + +

          +
          + +
          + + + +
          +

          + +

          +
          + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html b/www/node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html new file mode 100644 index 0000000..4890c08 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html @@ -0,0 +1,46 @@ + + + + Testing Typing into body + + + + +

          Type Stuff

          + +
          +   +
          + +
          + +
          + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html b/www/node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html new file mode 100644 index 0000000..3023143 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html @@ -0,0 +1,30 @@ + + + + + + Form with JS action + + +
          + +
          + +

          + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/framePage3.html b/www/node_modules/selenium-webdriver/lib/test/data/framePage3.html new file mode 100644 index 0000000..3e62e45 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/framePage3.html @@ -0,0 +1,7 @@ + + + inner + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html b/www/node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html new file mode 100644 index 0000000..3eb3bf4 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html @@ -0,0 +1,26 @@ + + + + Child frame + + +

          This is a scrolling frame test

          +
          + + + + + + + + + + + + + +
          First row
          Second row
          Third row
          Fourth row
          +
          + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html b/www/node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html new file mode 100644 index 0000000..b7fb8f2 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html @@ -0,0 +1,14 @@ + + + + Welcome Page + + +
          + +
          +
          + +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html b/www/node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html new file mode 100644 index 0000000..8fccb6d --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
          + +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html b/www/node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html new file mode 100644 index 0000000..1e0dc87 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html @@ -0,0 +1,11 @@ + + + This page has iframes + + +

          This is the heading

          + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html b/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html new file mode 100644 index 0000000..57d47d8 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html @@ -0,0 +1,9 @@ + + + +
          + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html b/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html new file mode 100644 index 0000000..9c27e04 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html @@ -0,0 +1,29 @@ + + + Deleting frame: main page + + + + +
          + + +
          +
          + +
          + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html b/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html new file mode 100644 index 0000000..e4b9723 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html @@ -0,0 +1,8 @@ + + + Deleting frame: iframe + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html b/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html new file mode 100644 index 0000000..47764eb --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html @@ -0,0 +1,7 @@ + + + Deleting frame: iframe 2 + + +
          Added back
          + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/frameset.html b/www/node_modules/selenium-webdriver/lib/test/data/frameset.html new file mode 100644 index 0000000..039c5f2 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/frameset.html @@ -0,0 +1,14 @@ + + + Unique title + + + + + + + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/framesetPage2.html b/www/node_modules/selenium-webdriver/lib/test/data/framesetPage2.html new file mode 100644 index 0000000..4ea35ff --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/framesetPage2.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/framesetPage3.html b/www/node_modules/selenium-webdriver/lib/test/data/framesetPage3.html new file mode 100644 index 0000000..42a9300 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/framesetPage3.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/globalscope.html b/www/node_modules/selenium-webdriver/lib/test/data/globalscope.html new file mode 100644 index 0000000..e4ca97a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/globalscope.html @@ -0,0 +1,15 @@ + + + + Global scope + + + +
          + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/hidden.html b/www/node_modules/selenium-webdriver/lib/test/data/hidden.html new file mode 100644 index 0000000..0e8097e --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/hidden.html @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/html5/blue.jpg b/www/node_modules/selenium-webdriver/lib/test/data/html5/blue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ea27c42faa7b5e56c43d3db317d5e4ecf1cb613 GIT binary patch literal 92 zcmZ?wbhEHbG-5DfXkcJaWSGJLB!991Nd^WT5CM{5U@~s$UwQg1|Kd4YZgp?Ix92y1 s+ar%@&pMaAI<@T`_wi3Y*T3~X|8?&BKYkvr_9KfvcKB$ivocr%04xP0fB*mh literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/html5/database.js b/www/node_modules/selenium-webdriver/lib/test/data/html5/database.js new file mode 100644 index 0000000..c6333be --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/html5/database.js @@ -0,0 +1,84 @@ +var database={}; +database.db={}; + +database.onError = function(tx, e) { + var log = document.createElement('div'); + log.setAttribute('name','error'); + log.setAttribute('style','background-color:red'); + log.innerText = e.message; + document.getElementById('logs').appendChild(log); +} + +database.onSuccess = function(tx, r) { + if (r.rows.length) { + var ol; + for (var i = 0; i < r.rows.length; i++) { + ol = document.createElement('ol'); + ol.innerHTML = r.rows.item(i).ID + ": " + r.rows.item(i).docname + " (" + r.rows.item(i).created + ")"; + document.getElementById('logs').appendChild(ol); + } + + } +} + +database.open=function(){ + database.db=openDatabase('HTML5', '1.0', 'Offline document storage', 100*1024); +} + +database.create=function(){ + database.db.transaction(function(tx) { + tx.executeSql("CREATE TABLE IF NOT EXISTS docs(ID INTEGER PRIMARY KEY ASC, docname TEXT, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP)", + [], + database.onSuccess, + database.onError); + });} + +database.add = function(message) { + database.db.transaction(function(tx){ + tx.executeSql("INSERT INTO docs(docname) VALUES (?)", + [message], database.onSuccess, database.onError); + }); +} + +database.selectAll = function() { + database.db.transaction(function(tx) { + tx.executeSql("SELECT * FROM docs", [], database.onSuccess, + database.onError); + }); +} + +database.onDeleteAllSuccess = function(tx, r) { + var doc = document.documentElement; + var db_completed = document.createElement("div"); + db_completed.setAttribute("id", "db_completed"); + db_completed.innerText = "db operation completed"; + doc.appendChild(db_completed); +} + +database.deleteAll = function() { + database.db.transaction(function(tx) { + tx.executeSql("delete from docs", [], database.onDeleteAllSuccess, + database.onError); + }); +} + +var log = document.createElement('div'); +log.setAttribute('name','notice'); +log.setAttribute('style','background-color:yellow'); +log.innerText = typeof window.openDatabase == "function" ? "Web Database is supported." : "Web Database is not supported."; +document.getElementById('logs').appendChild(log); + +try { + database.open(); + database.create(); + database.add('Doc 1'); + database.add('Doc 2'); + database.selectAll(); + database.deleteAll(); +} catch(error) { + var log = document.createElement('div'); + log.setAttribute('name','critical'); + log.setAttribute('style','background-color:pink'); + log.innerText = error; + document.getElementById('logs').appendChild(log); +} diff --git a/www/node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js b/www/node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js new file mode 100644 index 0000000..f07af14 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js @@ -0,0 +1,18 @@ +function success(position) { + var message = document.getElementById("status"); + message.innerHTML =""; + message.innerHTML += "

          Longitude: " + position.coords.longitude + "

          "; + message.innerHTML += "

          Latitude: " + position.coords.latitude + "

          "; + message.innerHTML += "

          Altitude: " + position.coords.altitude + "

          "; +} + +function error(msg) { + var message = document.getElementById("status"); + message.innerHTML = "Failed to get geolocation."; +} + +if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(success, error); +} else { + error('Geolocation is not supported.'); +} \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/html5/green.jpg b/www/node_modules/selenium-webdriver/lib/test/data/html5/green.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a0d3bea4793a5fe3a3a36e29ba174540540513d GIT binary patch literal 92 zcmZ?wbhEHbG-5DfXkcJqT;s&Rz@Ye(1xPY5=zs{23bCU^SwR4 t`P&|OOncV3?A57l@3@bD^11%4_xZ1L-~aLRaJ3&<^s&Q7OP!U$8UQ`xB)R|q literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/html5/red.jpg b/www/node_modules/selenium-webdriver/lib/test/data/html5/red.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f296e271956d5d4e0939b9706e86b2c2bc0d65b7 GIT binary patch literal 92 zcmZ?wbhEHbG-5DfXkcLY$H2kBz@Ye(1xPY5=zs{23bCU^SwR4 t`P&|OOncV3?A57l@3@bD^11%4_xZ1L-~aLRaJ3&<^s&Q7OP!U$8URKdB+&o> literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/html5/status.html b/www/node_modules/selenium-webdriver/lib/test/data/html5/status.html new file mode 100644 index 0000000..394116a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/html5/status.html @@ -0,0 +1 @@ +Online diff --git a/www/node_modules/selenium-webdriver/lib/test/data/html5/test.appcache b/www/node_modules/selenium-webdriver/lib/test/data/html5/test.appcache new file mode 100644 index 0000000..3bc4e00 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/html5/test.appcache @@ -0,0 +1,11 @@ +CACHE MANIFEST + +CACHE: +# Additional items to cache. +yellow.jpg +red.jpg +blue.jpg +green.jpg + +FALLBACK: +status.html offline.html diff --git a/www/node_modules/selenium-webdriver/lib/test/data/html5/yellow.jpg b/www/node_modules/selenium-webdriver/lib/test/data/html5/yellow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c609b371291aeb672feb6bc24497d5f64d20288 GIT binary patch literal 92 zcmZ?wbhEHbG-5DfXkcLYcZ>lD6o0aSC0GH&T#dHOB?;yGJxb#K16=Qn@b rBadm%I+wjVwe21E@lQV2zx6) + +HTML5 + + + +

          Geolocation Test

          +
          Location unknown
          + + +

          Web SQL Database Test

          +
          + + +

          Application Cache Test

          +
          +

          Current network status:

          + + + + + +
          + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/icon.gif b/www/node_modules/selenium-webdriver/lib/test/data/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb994619275674a361f092333cbfa122209d6546 GIT binary patch literal 127 zcmZ?wbh9u|6k-r!Si}GX|AAob+W$d8|1~xLfB*iUgX2F?R0kvlQp3RPBO#^gd~AZ^ zsa&ybSCl~e@% literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html b/www/node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html new file mode 100644 index 0000000..a686ba3 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html @@ -0,0 +1,15 @@ + + + This page has iframes + + +

          This is the heading

          + +
          + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/iframes.html b/www/node_modules/selenium-webdriver/lib/test/data/iframes.html new file mode 100644 index 0000000..e00b482 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/iframes.html @@ -0,0 +1,11 @@ + + + This page has iframes + + +

          This is the heading

          + +':"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
          ', +o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&& +l)?" ":""));a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";if(d.browser.mozilla)k+='";else{k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
          ";return k},_adjustInstDate:function(a,b,c){var e= +a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a, +"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); +c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, +"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= +function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker, +[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.10";window["DP_jQuery_"+y]=d})(jQuery); +;/* + * jQuery UI Progressbar 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
          ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* +this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.10"})})(jQuery); +;/* + * jQuery UI Effects 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, +a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= +a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", +"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, +0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, +211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, +d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0]; +h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c, +a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.10",save:function(c,a){for(var b=0;b
          ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent", +border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c); +return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments); +else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c), +b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c, +a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c, +a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a== +e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h
          ").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ +e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +;/* + * jQuery UI Effects Fade 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Fold 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], +10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Highlight 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Pulsate 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c

          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�n(z( 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

          ').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); +b.dequeue()})})}})(jQuery); +; \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css new file mode 100644 index 0000000..9f194f6 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css @@ -0,0 +1 @@ +.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0px}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css new file mode 100644 index 0000000..ea08c68 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css @@ -0,0 +1 @@ +body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0px}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md new file mode 100644 index 0000000..fa5d639 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md @@ -0,0 +1 @@ +Icons are generated and provided by the http://icomoon.io service. diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg new file mode 100644 index 0000000..578b869 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg @@ -0,0 +1,175 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot new file mode 100644 index 0000000000000000000000000000000000000000..60e2d2e5c747caf9d41310976af96c75c696b448 GIT binary patch literal 10316 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..afc6ec458b5c032f104c12318ff721d31d9dab8e GIT binary patch literal 10128 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 Kf?+iKUjGk9se#1+ literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff new file mode 100644 index 0000000000000000000000000000000000000000..fa72c74b45ba3725a6ff7d8d0901c538467c64e2 GIT binary patch literal 7848 zcmeHMdwf$>oU`L(I}xEJxM+1g4pdMw3}~}JN5NL8w5Fw{q_m|E z8k(j}e|@BBTKb?5Yk9_^bt(u>!4KslxpUZCddu|e1 zP#D+!cW-je{hi0}dtSfCIp-EFU%Ys^)w-Oqd-t;G49~skOefx7e-KX0=gW2!}+crC=Dgz5E6r_&ki*&9o8*JaM$oSTu8!*nqyc_egq zOz5uI(D(KCPG@(dP7p=kGj1rgg?u49zXu2xZWi&MZ$Zp%M0DpZx3Y%?zk%Jw?qNS* zKV%8)0hWk?C9}ub6KpA4&a5nrt!3+27RzM?tcaB{2XirE9@fe_SuY!4``7{Y3-%Tp zVaM4?c8dKY`-Gjwp#P2ift|<1|C#-_E>fpQQ##CyhMSQDDV;mUZTKD6nKdOFHztn3OucoNdhlP;3WyXB!QPC@R9^x zlE6z6cu4{(NkAnDs3ZZEB%qQ6)I8C(c>-#lfSM;z=FMj;M(4&_ED%eiXE#97XEML; zLERDE`IuQTKaXjO&DQJm|H3o)=rlfU@wB(5jo%v`12`6eUSD@&L)GD2ltwJ4y)b#7n5WoJu4Vi=r_7OMZ+3fY8f&EwpXBZ830Vb;)@PC^G`0Wem|`SSebHh=$fx{NrqjtS zyr#3d!`UGn3#5)(R`GIgd2?BlRCPL;s*-tGO?h>>Q?eXOO+9AeP9$o|q~t0}K3&C| z%9>GGT4fnc4IJZusP3$hT9Qvw%W2-()Y07Gl>)0qM^^>77m21$>2wQM%`LLUVj)X_ z0(d9@k{kRXqa4DNTP|TL(bXvl#VjksC{c&QC6^P|VG0T+pJ4Jun4*d6Fe&Em(iDN| zn|p2ur6_+T+xv6d@@plVKN!T!2LhIWq?*M~F>{LrqbDh7ve|fkV{WD0o|);g?zj1K zj(diN`up4V)$W%3e!q>^=C|ec+lMlbyZrn2`(4K~ha|P-dD*?Ky29b8tSoa@kc*u4 z)gDJ%!>-=mwzdv$J2jKH&QtBJCI`8s-+m%PL?MIJ-O+)FIv}o8QeF<}Qyx?ea<$7@ z=b{QK^H#PwTC3aLJIF(=-eym;x4xO$sl(Y;*;~}G$x$g8lncr*M2C~l>D^9JGLb*3 z3zkViwj~qaPEIFnhgv}HwtJmEG^U4YK%s&`QmiK8&^@CZ5!nD%OM4`;Sp=xXB$FSN z$tHA6@u_=cI(n2=ujYX>vI#({5!z-~?2v3Dv}y(Vl_ylw4{p^AJ`k!=t94ag9`Pb7 zEu|uKE{9W5S7|RgH-mUDb#+m%M9SO%c;|j&5g2+)yNaN={i;u%L)<}CUh^GAP#2RCO>-QH?1y zRQ-Y+wjp7=6Sh;AO_cdN7Jkd-ZHh&vF&mb_Y>BP_QZ`IyfhCs~;w@HJq_uZ2T$9tl zRfa$@!xCK9ccE#Q6VRY5jD$~C^vS9|`6>iqN-pzU0U$~)>ut!Y_+)ScgBuj1(kH(| z2iH(4rKYc0Nh>M+FpWyo!Aap~zqkm~`ZRx$vdcE*xm>R5nrcryepo^ueJ4Js6UqC| zzpfb7RW3+ltoo>;{YceurJ{LAU8c@b%}~2x~M8bCv|w*+5~ss%XDB1eCP^w znVg+n@8%7cdED+Ohz21*&@H#tl4!A^A=-ST18%9IZg9|D&mC>$9jn*+s5~+9s&wjutO`Fzl_jWe0hy zpqSgLoSGHpwKXoci~fJcFk?!bdQ)W1BujvY=Pf*AQozE)vlf{z)6e9vF_S0&Cm;-3 z*qBLh=CnO*(1bg+TxIoO;IFWH>IJ1p_K?TjSTos(vuYbTTP8cv*yL$|dIjH;uWsb( zPH2lNU){*noq&ditTJ7K;}JhNhmcil6coEUA)A6G6DgkypQC;bk0K22CF7)1Q^%sa zvk-El+d2ig;k_WKFumF%nG|!f1^drgCe?Y_uZf!BV!gw8RlAc9__tE_MbRXS!cK$`WNN3L? zx;X#reeetFzskvCYkQhb2Lg!1_BNT4EtX^qz^{1Z{()V6dv?CH>uASO!ms?TO?$TP z+R|Sj(Yt(W$JQMsZ7cV$=)#Q9iqe%iC6!yZZ7r8*1!VIh><%7DTm9J4$39IvN9X9% zk)yv^{hLQd=Ac>ZlC+)N*LQf5!sf`?MH?KMlt~*}vwJsn+Ix!zdI$P@cXfK3nwz|h zu5GmyR8A`oroTgQdk5(qxVqYQ*A8!ObB(uVS6P2iZ$VLky=YSz7U8$b7jnh0+q0e| z8}W5i=c-62?U5F#&J(mJs7#|hrW3SCaq;+v<(`kYXJ@-x)M#(;Y?X+5mi&amZW_8G zT(ELM?E2yC?J@<#A;kifgcR9ijneWUz))FH5KdxmholLqAjHWe2f-y$9NvC1L4F{H zi?})rk3XfFWwHn>fV8d1_8b~7S3=$EzY8XIasUsO9qE7>ej3Ma!TsSQpQN5CM0pDR{a1C7;&c5RrY zF$@BG0%4FsR$-7r=1ZFE$2|&MHQ`zYyA{-#iUK)^wqWu{DMRQ1>@QkWD=uSN6l)i? z;I!`pY3@QhCoWm#D)_B2s#49RR0Z|-fi#v9Uo_cY3=h4F4D>n_&ID*n=u$+t5)w3B zdYd1iL*1_q4!+ubh>p;al0(_AzBKrJ_jB|dJzw%t_NIcZw(2bD_b>pkJ$l9X8SySf z_xm#n$4(0Z6SlSCWx+arpp?t6^mOhaKb=TBvJ3}bn88a%Wft-GY2*l|;y;R+ju9V~v%uMWArh=Z0WFJJs26CnVO=E{?k@#Jkj4R=%yQVoQ~s?6jq&ti61P zvy-}TmbY3UvZ#>~ct&%}C+JtH7ZHm#)>chO$j_xiwFG(`TAR=YGx zyk?;675mPDp6s?P%A)Mbg5vz5(v6fuxm_D~Z>g`Vr}{bxAY{Wz^S#^qim8xtUo2P) zw`=Qm^h>G4n+iHN_ir629;`e-2WYTupl5e)*IwFBJ6+w5PU(+gEa4;eGD=IMWwdN0 z?S0rqRp^FxrKpZ+6rup8MW`1h>swY%)5bF_lnDi!DmgH&B+~*Gnz_Xr5w)x<+umiF-0{lIQxAI9Z!zT-KKQVZ3b? z7z@4}KH(5`DR$TlKdi`N;;VWxN9bMpkajMVpFGZeot~Yr zsqds8)b1A2alxQ%zPf3rr_(1L$LY4bw{Azf)Y!<|chvQkw@K>X9F(&uZx0R9;GR8* zXipwxQ+8fnws3F%=j*s(u_Pu~C#!G*+9L&Edc%}_%arQuUR@4KYsss z()j#||C*RUK0}&~|7hH-rF9d(i`U1;#>YgswF;3)$8_MhSwjVK_1_)*;`y5&y~u77 zO)~b;ihpR1z9+t#7{^G*kru6nAMl92<7)|<_)5eYQlwCOEtr}RokyK`gvSL$gcj*& zNSQ*5IwC~N#2X)ESl^Vq$|GN9wMKyaj$d zLS^I~&)5p|N*kpCALGOj#Vp`^XM~QyI&F&3vB;krq4l7*MQF}$M=H!a4PTm;M(FA6 ze%2w@O@AYD1ZJ2HV}|K4W|$6RhUqY7n4SjSRT17Wrk!Q8jjRM87T2*%Hk)k*mBDiG zTZwc5(%CEzHRAC}@vf_Uv}>>0prV1;NP1Mt^`V@ptPqt=BC)XHS*(S;Y# U(RlV0x|+w9A&8D)G}nFp2i)urJpcdz literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg new file mode 100644 index 0000000..c87b8cd --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg @@ -0,0 +1,153 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.eot b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..c1085bfd295abcf940871c863165656df8b094c2 GIT binary patch literal 10024 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 literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg new file mode 100644 index 0000000..feb9ba3 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg @@ -0,0 +1,63 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..58103c2b6287fa209bf1e62c7ea107fd65a351f1 GIT binary patch literal 9860 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 J6}@lx{2vuDq_zM6 literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.woff b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.woff new file mode 100644 index 0000000000000000000000000000000000000000..ad1ae396a88239278653cf63ac3630b6b8360102 GIT binary patch literal 7664 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 ZAIBpz*gbe?5xy=K8ILnYh3xXz{{ll7??M0o literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/anchor.gif b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..606348c7f53dba169a9aca7279a2a973f4b07bdb GIT binary patch literal 53 zcmZ?wbhEHbWM^P!XkcUjg8%>jEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/loader.gif b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/object.gif b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css new file mode 100644 index 0000000..284ac1d --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:focus{border-color:#a1a1a1}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js b/www/node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js new file mode 100644 index 0000000..e25849d --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js @@ -0,0 +1 @@ +tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}var i=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||u.toolbar===!1||t(u.toolbar||f),i.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:i}:void 0}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;lr;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var a=this,s={},l,c,u,d,f;c=o+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,a.domLoaded=!1,a.events=s,a.bind=function(t,o,p,h){function m(e){i(n(e||_.event),g)}var g,v,y,b,C,x,w,_=window;if(t&&3!==t.nodeType&&8!==t.nodeType){for(t[c]?g=t[c]:(g=l++,t[c]=g,s[g]={}),h=h||t,o=o.split(" "),y=o.length;y--;)b=o[y],x=m,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),a.domLoaded&&"ready"===b&&"complete"==t.readyState?p.call(h,n({type:b})):(d||(C=f[b],C&&(x=function(e){var t,r;if(t=e.currentTarget,r=e.relatedTarget,r&&t.contains)r=t.contains(r);else for(;r&&r!==t;)r=r.parentNode;r||(e=n(e||_.event),e.type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,i(e,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(e){e=n(e||_.event),e.type="focus"===e.type?"focusin":"focusout",i(e,g)}),v=s[g][b],v?"ready"===b&&a.domLoaded?p({type:b}):v.push({func:p,scope:h}):(s[g][b]=v=[{func:p,scope:h}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?r(t,x,a):e(t,C||b,x,w)));return t=v=0,p}},a.unbind=function(e,n,r){var i,o,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return a;if(i=e[c]){if(f=s[i],n){for(n=n.split(" "),l=n.length;l--;)if(d=n[l],o=f[d]){if(r)for(u=o.length;u--;)if(o[u].func===r){var p=o.nativeHandler,h=o.fakeName,m=o.capture;o=o.slice(0,u).concat(o.slice(u+1)),o.nativeHandler=p,o.fakeName=h,o.capture=m,f[d]=o}r&&0!==o.length||(delete f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture))}}else{for(d in f)o=f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture);f={}}for(d in f)return a;delete s[i];try{delete e[c]}catch(g){e[c]=null}}return a},a.fire=function(e,t,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return a;r=n(null,r),r.type=t,r.target=e;do o=e[c],o&&i(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow;while(e&&!r.isPropagationStopped());return a},a.clean=function(e){var t,n,r=a.unbind;if(!e||3===e.nodeType||8===e.nodeType)return a;if(e[c]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return a},a.destroy=function(){s={}},a.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var o="mce-data-",a=/^(?:mouse|contextmenu)|click/,s={keyLocation:1,layerX:1,layerY:1,returnValue:1};return i.Event=new i,i.Event.bind(window,"ready",function(){}),i}),r(c,[],function(){function e(e){return mt.test(e+"")}function n(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>_.cacheLength&&delete e[t.shift()],e[n]=r,r}}function r(e){return e[I]=!0,e}function i(e){var t=B.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t=null}}function o(e,t,n,r){var i,o,a,s,l,c,f,p,h,m;if((t?t.ownerDocument||t:F)!==B&&A(t),t=t||B,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(L&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&z.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(z.qsa&&!M.test(e)){if(f=!0,p=I,h=t,m=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=u(e),(f=t.getAttribute("id"))?p=f.replace(bt,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+d(c[l]);h=ht.test(e)&&t.parentNode||t,m=c.join(",")}if(m)try{return Z.apply(n,h.querySelectorAll(m)),n}catch(g){}finally{f||t.removeAttribute("id")}}}return b(e.replace(lt,"$1"),t,n,r)}function a(e,t){var n=t&&e,r=n&&(~t.sourceIndex||Y)-(~e.sourceIndex||Y);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e,t){var n,r,i,a,s,l,c,u=q[e+" "];if(u)return t?0:u.slice(0);for(s=e,l=[],c=_.preFilter;s;){(!n||(r=ct.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=ut.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(lt," ")}),s=s.slice(n.length));for(a in _.filter)!(r=pt[a].exec(s))||c[a]&&!(r=c[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?o.error(e):q(e,l).slice(0)}function d(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function f(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=V++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c,u=W+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(c=t[I]||(t[I]={}),(l=c[r])&&l[0]===u){if((s=l[1])===!0||s===w)return s===!0}else if(l=c[r]=[u],l[1]=e(t,n,a)||w,l[1]===!0)return!0}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function h(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),c&&t.push(s));return a}function m(e,t,n,i,o,a){return i&&!i[I]&&(i=m(i)),o&&!o[I]&&(o=m(o,a)),r(function(r,a,s,l){var c,u,d,f=[],p=[],m=a.length,g=r||y(t||"*",s.nodeType?[s]:s,[]),v=!e||!r&&t?g:h(g,f,e,s,l),b=n?o||(r?e:m||i)?[]:a:v;if(n&&n(v,b,s,l),i)for(c=h(b,p),i(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(v[p[u]]=d));if(r){if(o||e){if(o){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(v[u]=d);o(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=o?tt.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=h(b===a?b.splice(m,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function g(e){for(var t,n,r,i=e.length,o=_.relative[e[0].type],a=o||_.relative[" "],s=o?1:0,l=f(function(e){return e===t},a,!0),c=f(function(e){return tt.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==k)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=_.relative[e[s].type])u=[f(p(u),n)];else{if(n=_.filter[e[s].type].apply(null,e[s].matches),n[I]){for(r=++s;i>r&&!_.relative[e[r].type];r++);return m(s>1&&p(u),s>1&&d(e.slice(0,s-1)).replace(lt,"$1"),n,r>s&&g(e.slice(s,r)),i>r&&g(e=e.slice(r)),i>r&&d(e))}u.push(n)}return p(u)}function v(e,t){var n=0,i=t.length>0,a=e.length>0,s=function(r,s,l,c,u){var d,f,p,m=[],g=0,v="0",y=r&&[],b=null!=u,C=k,x=r||a&&_.find.TAG("*",u&&s.parentNode||s),N=W+=null==C?1:Math.random()||.1;for(b&&(k=s!==B&&s,w=n);null!=(d=x[v]);v++){if(a&&d){for(f=0;p=e[f++];)if(p(d,s,l)){c.push(d);break}b&&(W=N,w=++n)}i&&((d=!p&&d)&&g--,r&&y.push(d))}if(g+=v,i&&v!==g){for(f=0;p=t[f++];)p(y,m,s,l);if(r){if(g>0)for(;v--;)y[v]||m[v]||(m[v]=J.call(c));m=h(m)}Z.apply(c,m),b&&!r&&m.length>0&&g+t.length>1&&o.uniqueSort(c)}return b&&(W=N,k=C),y};return i?r(s):s}function y(e,t,n){for(var r=0,i=t.length;i>r;r++)o(e,t[r],n);return n}function b(e,t,n,r){var i,o,a,s,l,c=u(e);if(!r&&1===c.length){if(o=c[0]=c[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&L&&_.relative[o[1].type]){if(t=(_.find.ID(a.matches[0].replace(xt,wt),t)||[])[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?0:o.length;i--&&(a=o[i],!_.relative[s=a.type]);)if((l=_.find[s])&&(r=l(a.matches[0].replace(xt,wt),ht.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Z.apply(n,r),n;break}}return S(e,c)(r,t,!L,n,ht.test(e)),n}function C(){}var x,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O,I="sizzle"+-new Date,F=window.document,z={},W=0,V=0,U=n(),q=n(),$=n(),j=!1,K=function(){return 0},G=typeof t,Y=1<<31,X=[],J=X.pop,Q=X.push,Z=X.push,et=X.slice,tt=X.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},nt="[\\x20\\t\\r\\n\\f]",rt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",it=rt.replace("w","w#"),ot="([*^$|!~]?=)",at="\\["+nt+"*("+rt+")"+nt+"*(?:"+ot+nt+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+it+")|)|)"+nt+"*\\]",st=":("+rt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+at.replace(3,8)+")*)|.*)\\)|)",lt=new RegExp("^"+nt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+nt+"+$","g"),ct=new RegExp("^"+nt+"*,"+nt+"*"),ut=new RegExp("^"+nt+"*([\\x20\\t\\r\\n\\f>+~])"+nt+"*"),dt=new RegExp(st),ft=new RegExp("^"+it+"$"),pt={ID:new RegExp("^#("+rt+")"),CLASS:new RegExp("^\\.("+rt+")"),NAME:new RegExp("^\\[name=['\"]?("+rt+")['\"]?\\]"),TAG:new RegExp("^("+rt.replace("w","w*")+")"),ATTR:new RegExp("^"+at),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},ht=/[\x20\t\r\n\f]*[+~]/,mt=/^[^{]+\{\s*\[native code/,gt=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,vt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,bt=/'|\\/g,Ct=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,wt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)};try{Z.apply(X=et.call(F.childNodes),F.childNodes),X[F.childNodes.length].nodeType}catch(_t){Z={apply:X.length?function(e,t){Q.apply(e,et.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}E=o.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},A=o.setDocument=function(n){var r=n?n.ownerDocument||n:F;return r!==B&&9===r.nodeType&&r.documentElement?(B=r,D=r.documentElement,L=!E(r),z.getElementsByTagName=i(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),z.attributes=i(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),z.getElementsByClassName=i(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),z.getByName=i(function(e){e.id=I+0,e.appendChild(B.createElement("a")).setAttribute("name",I),e.appendChild(B.createElement("i")).setAttribute("name",I),D.appendChild(e);var t=r.getElementsByName&&r.getElementsByName(I).length===2+r.getElementsByName(I+0).length;return D.removeChild(e),t}),z.sortDetached=i(function(e){return e.compareDocumentPosition&&1&e.compareDocumentPosition(B.createElement("div"))}),_.attrHandle=i(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==G&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},z.getByName?(_.find.ID=function(e,t){if(typeof t.getElementById!==G&&L){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){return e.getAttribute("id")===t}}):(_.find.ID=function(e,n){if(typeof n.getElementById!==G&&L){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==G&&r.getAttributeNode("id").value===e?[r]:t:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){var n=typeof e.getAttributeNode!==G&&e.getAttributeNode("id");return n&&n.value===t}}),_.find.TAG=z.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==G?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},_.find.NAME=z.getByName&&function(e,t){return typeof t.getElementsByName!==G?t.getElementsByName(name):void 0},_.find.CLASS=z.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==G&&L?t.getElementsByClassName(e):void 0},H=[],M=[":focus"],(z.qsa=e(r.querySelectorAll))&&(i(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||M.push("\\["+nt+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||M.push(":checked")}),i(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&M.push("[*^$]="+nt+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||M.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),M.push(",.*:")})),(z.matchesSelector=e(P=D.matchesSelector||D.mozMatchesSelector||D.webkitMatchesSelector||D.oMatchesSelector||D.msMatchesSelector))&&i(function(e){z.disconnectedMatch=P.call(e,"div"),P.call(e,"[s!='']:x"),H.push("!=",st)}),M=new RegExp(M.join("|")),H=H.length&&new RegExp(H.join("|")),O=e(D.contains)||D.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=D.compareDocumentPosition?function(e,t){if(e===t)return j=!0,0;var n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return n?1&n||T&&t.compareDocumentPosition(e)===n?e===r||O(F,e)?-1:t===r||O(F,t)?1:R?tt.call(R,e)-tt.call(R,t):0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(e===t)return j=!0,0;if(!o||!s)return e===r?-1:t===r?1:o?-1:s?1:0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===F?-1:c[i]===F?1:0},B):B},o.matches=function(e,t){return o(e,null,null,t)},o.matchesSelector=function(e,t){if((e.ownerDocument||e)!==B&&A(e),t=t.replace(Ct,"='$1']"),z.matchesSelector&&L&&(!H||!H.test(t))&&!M.test(t))try{var n=P.call(e,t);if(n||z.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return o(t,B,null,[e]).length>0},o.contains=function(e,t){return(e.ownerDocument||e)!==B&&A(e),O(e,t)},o.attr=function(e,t){var n;return(e.ownerDocument||e)!==B&&A(e),L&&(t=t.toLowerCase()),(n=_.attrHandle[t])?n(e):!L||z.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},o.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},o.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!z.detectDuplicates,T=!z.sortDetached,R=!z.sortStable&&e.slice(0),e.sort(K),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return e},N=o.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=N(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=N(t);return n},_=o.selectors={cacheLength:50,createPseudo:r,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,wt),e[3]=(e[4]||e[5]||"").replace(xt,wt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||o.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&o.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&dt.test(n)&&(t=u(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,wt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+nt+")"+e+"("+nt+"|$)"))&&U(e,function(e){return t.test(e.className||typeof e.getAttribute!==G&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=o.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(u=g[I]||(g[I]={}),c=u[e]||[],p=c[0]===W&&c[1],f=c[0]===W&&c[2],d=p&&g.childNodes[p];d=++p&&d&&d[m]||(f=p=0)||h.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[W,p,f];break}}else if(y&&(c=(t[I]||(t[I]={}))[e])&&c[0]===W)f=c[1];else for(;(d=++p&&d&&d[m]||(f=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[I]||(d[I]={}))[e]=[W,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(e,t){var n,i=_.pseudos[e]||_.setFilters[e.toLowerCase()]||o.error("unsupported pseudo: "+e);return i[I]?i(t):i.length>1?(n=[e,e,"",t],_.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,n){for(var r,o=i(e,t),a=o.length;a--;)r=tt.call(e,o[a]),e[r]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(lt,"$1"));return i[I]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(e){return function(t){return o(e,t).length>0}}),contains:r(function(e){return function(t){return(t.textContent||t.innerText||N(t)).indexOf(e)>-1}}),lang:r(function(e){return ft.test(e||"")||o.error("unsupported lang: "+e),e=e.replace(xt,wt).toLowerCase(),function(t){var n;do if(n=L?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===D},focus:function(e){return e===B.activeElement&&(!B.hasFocus||B.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!_.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return vt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++rn;n++)t[n]=e[n];return t}function f(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1}function p(e){return null===e||e===t?"":(""+e).replace(N,"")}function h(e,t){var n,r,i,o,a;if(e)if(n=e.length,n===o){for(r in e)if(e.hasOwnProperty(r)&&(a=e[r],t.call(a,a,r)===!1))break}else for(i=0;n>i&&(a=e[i],t.call(a,a,r)!==!1);i++);return e}function m(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!c(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i}function g(e,t,n,r){for(var i=[];e;e=e[n])r&&e.nodeType!==r||e===t||i.push(e);return i}var v=document,y=Array.prototype.push,b=Array.prototype.slice,C=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,x=e.Event,w=l("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"),_=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},N=/^\s*|\s*$/g;return c.fn=c.prototype={constructor:c,selector:"",length:0,init:function(e,t){var n=this,r,a;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(i(e)){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:C.exec(e),!r)return c(t||document).find(e);if(r[1])for(a=o(e).firstChild;a;)this.add(a),a=a.nextSibling;else{if(a=v.getElementById(r[2]),a.id!==r[2])return n.find(e);n.length=1,n[0]=a}}else this.add(e);return n},toArray:function(){return d(this)},add:function(e){var t=this;return _(e)?y.apply(t,e):e instanceof c?t.add(e.toArray()):y.call(t,e),t},attr:function(e,n){var i=this;if("object"==typeof e)h(e,function(e,t){i.attr(t,e)});else{if(!r(n))return i[0]&&1===i[0].nodeType?i[0].getAttribute(e):t;this.each(function(){1===this.nodeType&&this.setAttribute(e,n)})}return i},css:function(e,n){var i=this;if("object"==typeof e)h(e,function(e,t){i.css(t,e)});else{if(e=e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),!r(n))return i[0]?i[0].style[e]:t;"number"!=typeof n||w[e]||(n+="px"),i.each(function(){var t=this.style;"opacity"===e&&this.runtimeStyle&&"undefined"==typeof this.runtimeStyle.opacity&&(t.filter=""===n?"":"alpha(opacity="+100*n+")");try{t[e]=n}catch(r){}})}return i},remove:function(){for(var e=this,t,n=this.length;n--;)t=e[n],x.clean(t),t.parentNode&&t.parentNode.removeChild(t);return this},empty:function(){for(var e=this,t,n=this.length;n--;)for(t=e[n];t.firstChild;)t.removeChild(t.firstChild);return this},html:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerHTML=e;return t}return t[0]?t[0].innerHTML:""},text:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerText=t[0].textContent=e;return t}return t[0]?t[0].innerText||t[0].textContent:""},append:function(){return a(this,arguments,function(e){1===this.nodeType&&this.appendChild(e)})},prepend:function(){return a(this,arguments,function(e){1===this.nodeType&&this.insertBefore(e,this.firstChild)})},before:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)}):e},after:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this)}):e},appendTo:function(e){return c(e).append(this),this},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return-1!==e.indexOf(" ")?h(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(n){var r;s(n,e)!==t&&(r=n.className,t?n.className+=r?" "+e:e:n.className=p((" "+r+" ").replace(" "+e+" "," ")))}),n},hasClass:function(e){return s(this[0],e)},each:function(e){return h(this,e)},on:function(e,t){return this.each(function(){x.bind(this,e,t)})},off:function(e,t){return this.each(function(){x.unbind(this,e,t)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new c(b.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},replaceWith:function(e){var t=this;return t[0]&&t[0].parentNode.replaceChild(c(e)[0],t[0]),t},wrap:function(e){return e=c(e)[0],this.each(function(){var t=this,n=e.cloneNode(!1);t.parentNode.insertBefore(n,t),n.appendChild(t)})},unwrap:function(){return this.each(function(){for(var e=this,t=e.firstChild,n;t;)n=t,t=t.nextSibling,e.parentNode.insertBefore(n,e)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),c(e)},find:function(e){var t,n,r=[];for(t=0,n=this.length;n>t;t++)c.find(e,this[t],r);return c(r)},push:y,sort:[].sort,splice:[].splice},u(c,{extend:u,toArray:d,inArray:f,isArray:_,each:h,trim:p,makeMap:l,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,isXMLDoc:n.isXML,contains:n.contains,filter:function(e,t,n){return n&&(e=":not("+e+")"),t=1===t.length?c.find.matchesSelector(t[0],e)?[t[0]]:[]:c.find.matches(e,t)}}),h({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return m(e,"parentNode")},parentsUntil:function(e,t){return m(e,"parentNode",t)},next:function(e){return g(e,"nextSibling",1)},prev:function(e){return g(e,"previousSibling",1)},nextNodes:function(e){return g(e,"nextSibling")},prevNodes:function(e){return g(e,"previousSibling")},children:function(e){return g(e.firstChild,"nextSibling",1)},contents:function(e){return d(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){c.fn[e]=function(n){var r=this,i;if(r.length>1)throw new Error("DomQuery only supports traverse functions on a single node.");return r[0]&&(i=t(r[0],n)),i=c(i),n&&"parentsUntil"!==e?i.filter(n):i}}),c.fn.filter=function(e){return c.filter(e)},c.fn.is=function(e){return!!e&&this.filter(e).length>0},c.fn.init.prototype=c.fn,c}),r(d,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e +}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d="\ufeff";for(e=e||{},u=("\\\" \\' \\; \\: ; : "+d).split(" "),l=0;l-1&&n||(m[e+t]=-1==l?s[0]:s.join(" "),delete m[e+"-top"+t],delete m[e+"-right"+t],delete m[e+"-bottom"+t],delete m[e+"-left"+t])}}function u(e){var t=m[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return m[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(m[e]=m[t]+" "+m[n]+" "+m[r],delete m[t],delete m[n],delete m[r])}function f(e){return b=!0,c[e]}function p(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function h(t,n,r,i,o,a){if(o=o||a)return o=p(o),"'"+o.replace(/\'/g,"\\'")+"'";if(n=p(n||r||i),!e.allow_script_urls){var s=n.replace(/[\s\r\n]+/,"");if(/(java|vb)script:/i.test(s))return"";if(!e.allow_svg_data_urls&&/^data:image\/svg/i.test(s))return""}return C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"}var m={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),y=y.replace(/\\[0-9a-f]+/g,function(e){return String.fromCharCode(parseInt(e.substr(1),16))}),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(|\/\*|\*\//.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":("color"===v||"background-color"===v)&&(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,h),m[v]=b?p(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),d("border","border-width","border-style","border-color"),"medium none"===m.border&&delete m.border,"none"===m["border-image"]&&delete m["border-image"]}return m},serialize:function(e,n){function r(n){var r,o,a,l;if(r=t.styles[n])for(o=0,a=r.length;a>o;o++)n=r[o],l=e[n],l!==s&&l.length>0&&(i+=(i.length>0?" ":"")+n+": "+l+";")}var i="",o,a;if(n&&t&&t.styles)r("*"),r(n);else for(o in e)a=e[o],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(f,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(p,[],function(){function e(e){return null===e||e===t?"":(""+e).replace(m,"")}function n(e,n){return n?"array"==n&&g(e)?!0:typeof e==n:e!==t}function r(e){var t=[],n,r;for(n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function i(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function o(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function a(e,t){var n=[];return o(e,function(e){n.push(t(e))}),n}function s(e,t){var n=[];return o(e,function(e){(!t||t(e))&&n.push(e)}),n}function l(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],o[a]=c?function(){return i[s].apply(this,arguments)}:function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function c(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function u(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function d(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),o(e,function(e,i){return t.call(r,e,i,n)===!1?!1:void d(e,t,n,r)}))}function f(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;nn&&(t=t[e[n]],t);n++);return t}function h(t,r){return!t||n(t,"array")?t:a(t.split(r||","),e)}var m=/^\s*|\s*$/g,g=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{trim:e,isArray:g,is:n,toArray:r,makeMap:i,each:o,map:a,grep:s,inArray:c,extend:u,create:l,walk:d,createNS:f,resolve:p,explode:h}}),r(h,[p],function(e){function t(n){function r(){return H.createDocumentFragment()}function i(e,t){_(F,e,t)}function o(e,t){_(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[U]=M[V],M[q]=M[W]):(M[V]=M[U],M[W]=M[q]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function p(e,t){var n=M[V],r=M[W],i=M[U],o=M[q],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function h(){N(I)}function m(){return N(P)}function g(){return N(O)}function v(e){var t=this[V],r=this[W],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return $(new t(n),{startContainer:M[V],startOffset:M[W],endContainer:M[U],endOffset:M[q],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[V]==M[U]&&M[W]==M[q]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function _(e,t,r){var i,o;for(e?(M[V]=t,M[W]=r):(M[U]=t,M[q]=r),i=M[U];i.parentNode;)i=i.parentNode;for(o=M[V];o.parentNode;)o=o.parentNode;o==i?w(M[V],M[W],M[U],M[q])>0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[V],M[U])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[V]==M[U])return E(e);for(t=M[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return S(t,e);++n}for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[U])return k(t,e);++r}for(o=r-n,a=M[V];o>0;)a=a.parentNode,o--;for(s=M[U];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function E(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[W]==M[q])return t;if(3==M[V].nodeType){if(n=M[V].nodeValue,i=n.substring(M[W],M[q]),e!=O&&(o=M[V],c=M[W],u=M[q]-M[W],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(H.createTextNode(i)),t}for(o=C(M[V],M[W]),a=M[q]-M[W];o&&a>0;)s=o.nextSibling,l=D(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[W],0>=a)return t!=O&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=D(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[q]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=D(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=D(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=O&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[U],M[q]-1),r,i,o,a,s,l=n!=M[U];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[V],M[W]),r=n!=M[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return D(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[W],a=o.substring(l),s=o.substring(0,l)):(l=M[q],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function D(e,t){return t!=I?t==O?n.clone(e,F):e:void e.parentNode.removeChild(e)}function L(){return n.create("body",null,g()).outerText}var M=this,H=n.doc,P=0,O=1,I=2,F=!0,z=!1,W="startOffset",V="startContainer",U="endContainer",q="endOffset",$=e.extend,j=n.nodeIndex;return $(M,{startContainer:H,startOffset:0,endContainer:H,endOffset:0,collapsed:F,commonAncestorContainer:H,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:p,deleteContents:h,extractContents:m,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:L}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(m,[p],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&(#x|#)?([\w]+);/g,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n,r){return n?(r=parseInt(r,2===n.length?16:10),r>65535?(r-=65536,String.fromCharCode(55296+(r>>10),56320+(1023&r))):d[r]||String.fromCharCode(r)):a[e]||i[e]||t(e)})}};return f}),r(g,[],function(){var e=navigator,t=e.userAgent,n,r,i,o,a,s,l;n=window.opera&&window.opera.buildNumber,r=/WebKit/.test(t),i=!r&&!n&&/MSIE/gi.test(t)&&/Explorer/gi.test(e.appName),i=i&&/MSIE (\w+)\./.exec(t)[1],o=-1==t.indexOf("Trident/")||-1==t.indexOf("rv:")&&-1==e.appName.indexOf("Netscape")?!1:11,i=i||o,a=!r&&!o&&/Gecko/.test(t),s=-1!=t.indexOf("Mac"),l=/(iPad|iPhone)/.test(t);var c=!l||t.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:n,webkit:r,ie:i,gecko:a,mac:s,iOS:l,contentEditable:c,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=i,range:window.getSelection&&"Range"in window,documentMode:i?document.documentMode||7:10}}),r(v,[],function(){return function(e,t){function n(t){e.getElementsByTagName("head")[0].appendChild(t)}function r(t,r,s){function l(){for(var e=v.passed,t=e.length;t--;)e[t]();v.status=2,v.passed=[],v.failed=[]}function c(){for(var e=v.failed,t=e.length;t--;)e[t]();v.status=3,v.passed=[],v.failed=[]}function u(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function d(e,t){e()||((new Date).getTime()-g0)return m=e.createElement("style"),m.textContent='@import "'+t+'"',p(),void n(m);f()}n(h),h.href=t}}var i=0,o={},a;t=t||{},a=t.maxLoadTime||5e3,this.load=r}}),r(y,[c,d,l,f,h,m,g,p,v],function(e,n,r,i,o,a,s,l,c){function u(e,t){var i=this,o;i.doc=e,i.win=window,i.files={},i.counter=0,i.stdMode=!v||e.documentMode>=8,i.boxModel=!v||"CSS1Compat"==e.compatMode||i.stdMode,i.hasOuterHTML="outerHTML"in e.createElement("a"),i.styleSheetLoader=new c(e),this.boundEvents=[],i.settings=t=m({keep_values:!1,hex_colors:1},t),i.schema=t.schema,i.styles=new n({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),i.fixDoc(e),i.events=t.ownEvents?new r(t.proxy):r.Event,o=t.schema?t.schema.getBlockElements():{},i.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!o[e.nodeName]):!!o[e]}}var d=l.each,f=l.is,p=l.grep,h=l.trim,m=l.extend,g=s.webkit,v=s.ie,y=/^([a-z0-9],?)+$/i,b=/^[ \t\r\n]*$/,C=l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," ");return u.prototype={root:null,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},fixDoc:function(e){var t=this.settings,n;if(v&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!v||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.get(e.settings.root_element)||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),f(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.get(r.settings.root_element)||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(y.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=f(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return this.run(e,function(e){var n,r=e.parentNode;if(!r)return null;if(t)for(;n=e.firstChild;)!v||3!==n.nodeType||n.nodeValue?r.insertBefore(n,e):e.removeChild(n);return r.removeChild(e)})},setStyle:function(e,t,n){return this.run(e,function(e){var r=this,i,o;if(t)if("string"==typeof t){i=e.style,t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"number"!=typeof n||C[t]||(n+="px"),"opacity"===t&&e.runtimeStyle&&"undefined"==typeof e.runtimeStyle.opacity&&(i.filter=""===n?"":"alpha(opacity="+100*n+")"),"float"==t&&(t="cssFloat"in e.style?"cssFloat":"styleFloat");try{i[t]=n}catch(a){}r.settings.update_styles&&e.removeAttribute("data-mce-style")}else for(o in t)r.setStyle(e,o,t[o])})},getStyle:function(e,n,r){if(e=this.get(e)){if(this.doc.defaultView&&r){n=n.replace(/[A-Z]/g,function(e){return"-"+e});try{return this.doc.defaultView.getComputedStyle(e,null).getPropertyValue(n)}catch(i){return null}}return n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=v?"styleFloat":"cssFloat"),e.currentStyle&&r?e.currentStyle[n]:e.style?e.style[n]:t}},setStyles:function(e,t){this.setStyle(e,t)},css:function(e,t,n){this.setStyle(e,t,n)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this;if(e&&t)return this.run(e,function(e){var i=r.settings,o=e.getAttribute(t);if(null!==n)switch(t){case"style":if(!f(n,"string"))return void d(n,function(t,n){r.setStyle(e,n,t)});i.keep_values&&(n?e.setAttribute("data-mce-style",n,2):e.removeAttribute("data-mce-style",2)),e.style.cssText=n;break;case"class":e.className=n||"";break;case"src":case"href":i.keep_values&&(i.url_converter&&(n=i.url_converter.call(i.url_converter_scope||r,n,t,e)),r.setAttrib(e,"data-mce-"+t,n,2));break;case"shape":e.setAttribute("data-mce-style",n)}f(n)&&null!==n&&0!==n.length?e.setAttribute(t,""+n,2):e.removeAttribute(t,2),o!=n&&i.onSetAttrib&&i.onSetAttrib({attrElm:e,attrName:t,attrValue:n})})},setAttribs:function(e,t){var n=this;return this.run(e,function(e){d(t,function(t,r){n.setAttrib(e,r,t)})})},getAttrib:function(e,t,n){var r,i=this,o;if(e=i.get(e),!e||1!==e.nodeType)return n===o?!1:n;if(f(n)||(n=""),/^(src|href|style|coords|shape)$/.test(t)&&(r=e.getAttribute("data-mce-"+t)))return r;if(v&&i.props[t]&&(r=e[i.props[t]],r=r&&r.nodeValue?r.nodeValue:r),r||(r=e.getAttribute(t,2)),/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]]===!0&&""===r?t:r?t:"";if("FORM"===e.nodeName&&e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue;if("style"===t&&(r=r||e.style.cssText,r&&(r=i.serializeStyle(i.parseStyle(r),e.nodeName),i.settings.keep_values&&e.setAttribute("data-mce-style",r))),g&&"class"===t&&r&&(r=r.replace(/(apple|webkit)\-[a-z\-]+/gi,"")),v)switch(t){case"rowspan":case"colspan":1===r&&(r="");break;case"size":("+0"===r||20===r||0===r)&&(r="");break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":0===r&&(r="");break;case"hspace":-1===r&&(r="");break;case"maxlength":case"tabindex":(32768===r||2147483647===r||"32768"===r)&&(r="");break;case"multiple":case"compact":case"noshade":case"nowrap":return 65535===r?t:n;case"shape":r=r.toLowerCase();break;default:0===t.indexOf("on")&&r&&(r=(""+r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1"))}return r!==o&&null!==r&&""!==r?""+r:n},getPos:function(e,t){var n=this,r=0,i=0,o,a=n.doc,s;if(e=n.get(e),t=t||a.body,e){if(t===a.body&&e.getBoundingClientRect)return s=e.getBoundingClientRect(),t=n.boxModel?a.documentElement:a.body,r=s.left+(a.documentElement.scrollLeft||a.body.scrollLeft)-t.clientLeft,i=s.top+(a.documentElement.scrollTop||a.body.scrollTop)-t.clientTop,{x:r,y:i};for(o=e;o&&o!=t&&o.nodeType;)r+=o.offsetLeft||0,i+=o.offsetTop||0,o=o.offsetParent;for(o=e.parentNode;o&&o!=t&&o.nodeType;)r-=o.scrollLeft||0,i-=o.scrollTop||0,o=o.parentNode}return{x:r,y:i}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==u.DOM&&n===document){var o=u.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,u.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==u.DOM&&n===document?void u.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void d(e.split(","),function(e){var i;t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),v&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){return this.run(e,function(e){var n;return t?this.hasClass(e,t)?e.className:(n=this.removeClass(e,t),e.className=n=(""!==n?n+" ":"")+t,n):0})},removeClass:function(e,t){var n=this,r;return n.run(e,function(e){var i;return n.hasClass(e,t)?(r||(r=new RegExp("(^|\\s+)"+t+"(\\s+|$)","g")),i=e.className.replace(r," "),i=h(" "!=i?i:""),e.className=i,i||(e.removeAttribute("class"),e.removeAttribute("className")),i):e.className})},hasClass:function(e,t){return e=this.get(e),e&&t?-1!==(" "+e.className+" ").indexOf(" "+t+" "):!1},toggleClass:function(e,n,r){r=r===t?!this.hasClass(e,n):r,this.hasClass(e,n)!==r&&(r?this.addClass(e,n):this.removeClass(e,n))},show:function(e){return this.setStyle(e,"display","block")},hide:function(e){return this.setStyle(e,"display","none")},isHidden:function(e){return e=this.get(e),!e||"none"==e.style.display||"none"==this.getStyle(e,"display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){var n=this;return n.run(e,function(e){if(v){for(;e.firstChild;)e.removeChild(e.firstChild);try{e.innerHTML="
          "+t,e.removeChild(e.firstChild)}catch(r){var i=n.create("div");i.innerHTML="
          "+t,d(p(i.childNodes),function(t,n){n&&e.canHaveHTML&&e.appendChild(t)})}}else e.innerHTML=t;return t})},getOuterHTML:function(e){var t,n=this;return(e=n.get(e))?1===e.nodeType&&n.hasOuterHTML?e.outerHTML:(t=(e.ownerDocument||n.doc).createElement("body"),t.appendChild(e.cloneNode(!0)),t.innerHTML):null},setOuterHTML:function(e,t,n){var r=this;return r.run(e,function(e){function i(){var i,o;for(o=n.createElement("body"),o.innerHTML=t,i=o.lastChild;i;)r.insertAfter(i.cloneNode(!0),e),i=i.previousSibling;r.remove(e)}if(1==e.nodeType)if(n=n||e.ownerDocument||r.doc,v)try{1==e.nodeType&&r.hasOuterHTML?e.outerHTML=t:i()}catch(o){i()}else i()})},decode:a.decode,encode:a.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return f(t,"array")&&(e=e.cloneNode(!0)),n&&d(p(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(l.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],d(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(v){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,o,a,s,l,c=0;if(e=e.firstChild){s=new i(e,e.parentNode),t=t||n.schema?n.schema.getNonEmptyElements():null;do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(o=n.getAttribs(e),r=o.length;r--;)if(l=o[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!b.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new o(this)},nodeIndex:function(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n},split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=h(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.replaceChild(n,t):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){var i=this;if(l.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(l.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return e&&1==e.nodeType?(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null):null},getContentEditableParent:function(e){for(var t=this.getRoot(),n=null;e&&e!==t&&(n=this.getContentEditable(e),null===n);e=e.parentNode);return n},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n]; +this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},u.DOM=new u(document),u}),r(b,[y,p],function(e,t){function n(){function e(e,t){function n(){o.remove(s),a&&(a.onreadystatechange=a.onload=a=null),t()}function i(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var o=r,a,s;s=o.uniqueId(),a=document.createElement("script"),a.id=s,a.type="text/javascript",a.src=e,"onreadystatechange"in a?a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&n()}:a.onload=n,a.onerror=i,(document.getElementsByTagName("head")[0]||document.body).appendChild(a)}var t=0,n=1,a=2,s={},l=[],c={},u=[],d=0,f;this.isDone=function(e){return s[e]==a},this.markDone=function(e){s[e]=a},this.add=this.load=function(e,n,r){var i=s[e];i==f&&(l.push(e),s[e]=t),n&&(c[e]||(c[e]=[]),c[e].push({func:n,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(l,e,t)},this.loadScripts=function(t,r,l){function p(e){i(c[e],function(e){e.func.call(e.scope)}),c[e]=f}var h;u.push({func:r,scope:l||this}),(h=function(){var r=o(t);t.length=0,i(r,function(t){return s[t]==a?void p(t):void(s[t]!=n&&(s[t]=n,d++,e(t,function(){s[t]=a,d--,p(t),h()})))}),d||(i(u,function(e){e.func.call(e.scope)}),u.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(C,[b,p],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){var i=r.language;if(i&&r.languageLoad!==!1){if(n)if(n=","+n+",",-1!=n.indexOf(","+i.substr(0,2)+","))i=i.substr(0,2);else if(-1==n.indexOf(","+i+","))return;e.ScriptLoader.add(this.urls[t]+"/langs/"+i+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&a.call(s?s:e)}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(x,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(w,[p],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e){var t={},n,r;for(n=0,r=e.length;r>n;n++)t[e[n]]={};return t}var o,l,c,u=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),l=3;lo;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},s,l,c,u,d,f;return r[e]?r[e]:(s=t("id accesskey class dir lang style tabindex title"),l=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),c=t("a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment"),"html4"!=e&&(s.push.apply(s,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),l.push.apply(l,t("article aside details dialog figure header footer hgroup section nav")),c.push.apply(c,t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(s.push("xml:lang"),f=t("acronym applet basefont big font strike tt"),c.push.apply(c,f),o(f,function(e){n(e,"",c)}),d=t("center dir isindex noframes"),l.push.apply(l,d),u=[].concat(l,c),o(d,function(e){n(e,"",u)})),u=u||[].concat(l,c),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",u),n("address dt dd div caption","",u),n("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",c),n("blockquote","cite",u),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",u),n("dl","","dt dd"),n("a","href target rel media hreflang type",c),n("q","cite",c),n("ins del","cite datetime",u),n("img","src alt usemap ismap width height"),n("iframe","src name width height",u),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",u,"param"),n("param","name value"),n("map","name",u,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",u),n("th","colspan rowspan headers scope abbr",u),n("form","accept-charset action autocomplete enctype method name novalidate target",u),n("fieldset","disabled form name",u,"legend"),n("label","form for",c),n("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),n("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?u:c),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",u,"li"),n("noscript","",u),"html4"!=e&&(n("wbr"),n("ruby","",c,"rt rp"),n("figcaption","",u),n("mark rt rp summary bdi","",c),n("canvas","width height",u),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",u,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",u,"track source"),n("source","src type media"),n("track","kind src srclang label default"),n("datalist","",c,"option"),n("article section nav aside header footer","",u),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",u,"figcaption"),n("time","datetime",c),n("dialog","open",u),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",c),n("progress","value max",c),n("meter","value min max low high optimum",c),n("details","open",u,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(i("script","language xml:space"),i("style","xml:space"),i("object","declare classid codebase codetype archive standby align border hspace vspace"),i("param","valuetype type"),i("a","charset name rev shape coords"),i("br","clear"),i("applet","codebase archive code object alt name width height align hspace vspace"),i("img","name longdesc align border hspace vspace"),i("iframe","longdesc frameborder marginwidth marginheight scrolling align"),i("font basefont","size color face"),i("input","usemap align"),i("select","onchange"),i("textarea"),i("h1 h2 h3 h4 h5 h6 div p legend caption","align"),i("ul","type compact"),i("li","type"),i("ol dl menu dir","compact"),i("pre","width xml:space"),i("hr","align noshade size width"),i("isindex","prompt"),i("table","summary width frame rules cellspacing cellpadding align bgcolor"),i("col","width align char charoff valign"),i("colgroup","width align char charoff valign"),i("thead","align char charoff valign"),i("tr","align char charoff valign bgcolor"),i("th","axis align char charoff valign nowrap bgcolor width height"),i("form","accept"),i("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),i("tfoot","align char charoff valign"),i("tbody","align char charoff valign"),i("area","nohref"),i("body","background bgcolor text link vlink alink")),"html4"!=e&&(i("input button select textarea","autofocus"),i("input textarea","placeholder"),i("a","download"),i("link script img","crossorigin"),i("iframe","sandbox seamless allowfullscreen")),o(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,r[e]=a,a)}var r={},i=e.makeMap,o=e.each,a=e.extend,s=e.explode,l=e.inArray;return function(e){function c(t,n,o){var s=e[t];return s?s=i(s,/[, ]/,i(s.toUpperCase(),/[, ]/)):(s=r[t],s||(s=i(n," ",i(n.toUpperCase()," ")),s=a(s,o),r[t]=s)),s}function u(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function d(e){var n,r,o,a,s,c,d,f,p,h,m,g,y,C,x,w,_,N,E,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),v["@"]&&(w=v["@"].attributes,_=v["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=S.exec(e[n])){if(C=s[1],p=s[2],x=s[3],f=s[5],g={},y=[],c={attributes:g,attributesOrder:y},"#"===C&&(c.paddEmpty=!0),"-"===C&&(c.removeEmpty=!0),"!"===s[4]&&(c.removeEmptyAttrs=!0),w){for(N in w)g[N]=w[N];y.push.apply(y,_)}if(f)for(f=t(f,"|"),o=0,a=f.length;a>o;o++)if(s=k.exec(f[o])){if(d={},m=s[1],h=s[2].replace(/::/g,":"),C=s[3],E=s[4],"!"===m&&(c.attributesRequired=c.attributesRequired||[],c.attributesRequired.push(h),d.required=!0),"-"===m){delete g[h],y.splice(l(y,h),1);continue}C&&("="===C&&(c.attributesDefault=c.attributesDefault||[],c.attributesDefault.push({name:h,value:E}),d.defaultValue=E),":"===C&&(c.attributesForced=c.attributesForced||[],c.attributesForced.push({name:h,value:E}),d.forcedValue=E),"<"===C&&(d.validValues=i(E,"?"))),T.test(h)?(c.attributePatterns=c.attributePatterns||[],d.pattern=u(h),c.attributePatterns.push(d)):(g[h]||y.push(h),g[h]=d)}w||"@"!=p||(w=g,_=y),x&&(c.outputName=p,v[x]=c),T.test(p)?(c.pattern=u(p),b.push(c)):v[p]=c}}function f(e){v={},b=[],d(e),o(x,function(e,t){y[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(r.text_block_elements=r.block_elements=null,o(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",s=t[2];if(y[s]=y[i],R[s]=i,r||(S[s.toUpperCase()]={},S[s]={}),!v[s]){var l=v[i];l=a({},l),delete l.removeEmptyAttrs,delete l.removeEmpty,v[s]=l}o(y,function(e,t){e[i]&&(y[t]=e=a({},y[t]),e[s]=e[i])})}))}function h(e){var n=/^([+\-]?)(\w+)\[([^\]]+)\]$/;e&&o(t(e,","),function(e){var r=n.exec(e),i,s;r&&(s=r[1],i=s?y[r[2]]:y[r[2]]={"#comment":{}},i=y[r[2]],o(t(r[3],"|"),function(e){"-"===s?(y[r[2]]=i=a({},y[r[2]]),delete i[e]):i[e]={}}))})}function m(e){var t=v[e],n;if(t)return t;for(n=b.length;n--;)if(t=b[n],t.pattern.test(e))return t}var g=this,v={},y={},b=[],C,x,w,_,N,E,S,k,T,R={},A={};e=e||{},x=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),e.valid_styles&&(C={},o(e.valid_styles,function(e,t){C[t]=s(e)})),w=c("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=c("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),N=c("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),E=c("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),k=c("non_empty_elements","td th iframe video audio object script",N),T=c("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),S=c("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup",T),o((e.special||"script noscript style textarea").split(" "),function(e){A[e]=new RegExp("]*>","gi")}),e.valid_elements?f(e.valid_elements):(o(x,function(e,t){v[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},y[t]=e.children}),"html5"!=e.schema&&o(t("strong/b em/i"),function(e){e=t(e,"/"),v[e[1]].outputName=e[0]}),v.img.attributesDefault=[{name:"alt",value:""}],o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){v[e]&&(v[e].removeEmpty=!0)}),o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){v[e].paddEmpty=!0}),o(t("span"),function(e){v[e].removeEmptyAttrs=!0})),p(e.custom_elements),h(e.valid_children),d(e.extended_valid_elements),h("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&o(s(e.invalid_elements),function(e){v[e]&&delete v[e]}),m("span")||d("span[!data-mce-type|*]"),g.children=y,g.styles=C,g.getBoolAttrs=function(){return E},g.getBlockElements=function(){return S},g.getTextBlockElements=function(){return T},g.getShortEndedElements=function(){return N},g.getSelfClosingElements=function(){return _},g.getNonEmptyElements=function(){return k},g.getWhiteSpaceElements=function(){return w},g.getSpecialElements=function(){return A},g.isValidChild=function(e,t){var n=y[e];return!(!n||!n[t])},g.isValid=function(e,t){var n,r,i=m(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},g.getElementRule=m,g.getCustomElements=function(){return R},g.addValidElements=d,g.setValidElements=f,g.addCustomElements=p,g.addValidChildren=h,g.elements=v}}),r(_,[w,m,p],function(e,t,n){var r=n.each;return function(i,o){function a(){}var s=this;i=i||{},s.schema=o=o||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),r("comment cdata text start end pi doctype".split(" "),function(e){e&&(s[e]=i[e]||a)}),s.parse=function(e){function r(e){var t,n;for(t=f.length;t--&&f[t].name!==e;);if(t>=0){for(n=f.length-1;n>=t;n--)e=f[n],e.valid&&s.end(e.name);f.length=t}}function a(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in C?t:F(n||r||o||""),w&&!v&&0!==t.indexOf("data-")){if(a=k[t],!a&&T){for(s=T.length;s--&&(a=T[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(W[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{c=decodeURIComponent(c)}catch(u){c=unescape(c)}if(V.test(c))return;if(!i.allow_html_data_urls&&U.test(c)&&!/^data:image\//i.test(c))return}p.map[t]=n,p.push({name:t,value:n})}var s=this,l,c=0,u,d,f=[],p,h,m,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O,I=0,F=t.decode,z,W=n.makeMap("src,href,data,background,formaction,poster"),V=/((java|vb)script|mhtml):/i,U=/^data:/i;for(M=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),H=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,b=o.getShortEndedElements(),L=i.self_closing_elements||o.getSelfClosingElements(),C=o.getBoolAttrs(),w=i.validate,y=i.remove_internals,z=i.fix_self_closing,P=o.getSpecialElements();l=M.exec(e);){if(c0&&f[f.length-1].name===u&&r(u),!w||(_=o.getElementRule(u))){if(N=!0,w&&(k=_.attributes,T=_.attributePatterns),(S=l[8])?(v=-1!==S.indexOf("data-mce-type"),v&&y&&(N=!1),p=[],p.map={},S.replace(H,a)):(p=[],p.map={}),w&&!v){if(R=_.attributesRequired,A=_.attributesDefault,B=_.attributesForced,D=_.removeEmptyAttrs,D&&!p.length&&(N=!1),B)for(h=B.length;h--;)E=B[h],g=E.name,O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O});if(A)for(h=A.length;h--;)E=A[h],g=E.name,g in p.map||(O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O}));if(R){for(h=R.length;h--&&!(R[h]in p.map););-1===h&&(N=!1)}p.map["data-mce-bogus"]&&(N=!1)}N&&s.start(u,p,x)}else N=!1;if(d=P[u]){d.lastIndex=c=l.index+l[0].length,(l=d.exec(e))?(N&&(m=e.substr(c,l.index-c)),c=l.index+l[0].length):(m=e.substr(c),c=e.length),N&&(m.length>0&&s.text(m,!0),s.end(u)),M.lastIndex=c;continue}x||(S&&S.indexOf("/")==S.length-1?N&&s.end(u):f.push({name:u,valid:N}))}else(u=l[1])?(">"===u.charAt(0)&&(u=" "+u),i.allow_conditional_comments||"[if"!==u.substr(0,3)||(u=" "+u),s.comment(u)):(u=l[2])?s.cdata(u):(u=l[3])?s.doctype(u):(u=l[4])&&s.pi(u,l[5]);c=l.index+l[0].length}for(c=0;h--)u=f[h],u.valid&&s.end(u.name)}}}),r(N,[x,w,_,p],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,p,h,m,g,v,y;for(m=i("tr,td,th,tbody,thead,tfoot,table"),h=l.getNonEmptyElements(),g=l.getTextBlockElements(),n=0;n1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),p=0;p0?(t.value=n,t=t.prev):(r=t.prev,t.remove(),t=r)}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,_,N,E,S,k,T,R,A=[],B,D,L,M,H,P,O,I;if(o=o||{},p={},h={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),P=l.children,k=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,H=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,D=/[ \t\r\n]+$/,L=/[ \t\r\n]+/g,M=/^[ \t\r\n]+$/,v=new n({validate:k,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(L," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,m(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,m(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=P[b.name],s&&P[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(E=h[a],E?E.push(r):h[a]=[r]);T[e]&&m(r),n||(b=r),!B&&H[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(D,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o}if(B&&H[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,b.empty().remove(),void(b=a);b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in p){for(E=d[S],C=p[S],_=C.length;_--;)C[_].parent||C.splice(_,1);for(x=0,w=E.length;w>x;x++)E[x](C,S,o)}for(x=0,w=f.length;w>x;x++)if(E=f[x],E.name in h){for(C=h[E.name],_=C.length;_--;)C[_].parent||C.splice(_,1);for(_=0,N=E.callbacks.length;N>_;_++)E.callbacks[_](C,E.name,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,p,h;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(p=l.getElementRule(c.name),p&&(p.removeEmpty?c.remove():p.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(h=new e("#text",3),h.value="\xa0",i.replace(h))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}})}}),r(E,[m,p],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,u,d,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');r[r.length]=!n||l?">":" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push(""),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("")},comment:function(e){r.push("")},pi:function(e,t){t?r.push(""):r.push(""),i&&r.push("\n")},doctype:function(e){r.push("",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(S,[E,w],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,p,h,m;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1){for(f=[],f.map={},m=r.getElementRule(e.name),p=0,h=m.attributesOrder.length;h>p;p++)u=m.attributesOrder[p],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(p=0,h=c.length;h>p;p++)u=c[p].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(k,[y,N,m,S,x,w,g,p],function(e,t,n,r,i,o,a,s){var l=s.each,c=s.trim,u=e.DOM;return function(e,i){var s,d,f;return i&&(s=i.dom,d=i.schema),s=s||u,d=d||new o(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,f=new t(e,d),f.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n=e.length,r;n--;)r=e[n],r.attr("tabindex",r.attributes.map["data-mce-tabindex"]),r.attr(t,null)}),f.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-mce-"+n,l=e.url_converter,c=e.url_converter_scope,u;r--;)i=t[r],o=i.attributes.map[a],o!==u?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=s.serializeStyle(s.parseStyle(o),i.name):l&&(o=l.call(c,o,n,i.name)),i.attr(n,o.length>0?o:null))}),f.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null)}),f.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),f.addAttributeFilter("data-mce-expando",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),f.addNodeFilter("noscript",function(e){for(var t=e.length,r;t--;)r=e[t].firstChild,r&&(r.value=n.decode(r.value))}),f.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o;r--;)if(i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t){var a=(i.attr("type")||"text/javascript").replace(/^mce\-/,"");i.attr("type","text/javascript"===a?null:a),o.length>0&&(i.firstChild.value="// ")}else o.length>0&&(i.firstChild.value="")}),f.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),f.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&f.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:d,addNodeFilter:f.addNodeFilter,addAttributeFilter:f.addAttributeFilter,serialize:function(t,n){var i=this,o,u,p,h,m;return a.ie&&s.select("script,style,select,map").length>0?(m=t.innerHTML,t=t.cloneNode(!1),s.setHTML(t,m)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(u=o.createHTMLDocument(""),l("BODY"==t.nodeName?t.childNodes:[t],function(e){u.body.appendChild(u.importNode(e,!0))}),t="BODY"!=t.nodeName?u.body.firstChild:u.body,p=s.doc,s.doc=u),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,i.onPreProcess(n)),h=new r(e,d),n.content=h.serialize(f.parse(c(n.getInner?t.innerHTML:s.getOuterHTML(t)),n)),n.cleanup||(n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||i.onPostProcess(n),p&&(s.doc=p),n.node=null,n.content},addRules:function(e){d.addValidElements(e)},setRules:function(e){d.setValidElements(e)},onPreProcess:function(e){i&&i.fire("PreProcess",e)},onPostProcess:function(e){i&&i.fire("PostProcess",e)}}}}),r(T,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode; +if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:d,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r);if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l));for(;l;){if(u=l.nodeValue,s+=u.length,s>=i){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(s+=l.nodeValue.length,s>=i){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,h;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),(t==f||t==f.documentElement)&&(t=p,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a),d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(h=t.childNodes,h.length?(n>=h.length?i.insertAfter(a,h[h.length-1]):t.insertBefore(a,h[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,p=f.body,h,m;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=p.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="":d=null,s.innerHTML="",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",void(d&&(d.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(m=s.childNodes[l],a=p.createControlRange(),a.addElement(m),a.select(),h=e.getRng(),h.item&&m===h.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(R,[g],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey},metaKeyPressed:function(t){return(e.mac?t.metaKey:t.ctrlKey)&&!t.altKey}}}),r(A,[R,p,g],function(e,t,n){return function(r,i){function o(e){var t=i.settings.object_resizing;return t===!1||n.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:i.dom.is(e,t))}function a(t){var n,r;n=t.screenX-k,r=t.screenY-T,H=n*E[2]+B,P=r*E[3]+D,H=5>H?5:H,P=5>P?5:P,(e.modifierPressed(t)||"IMG"==w.nodeName&&E[2]*E[3]!==0)&&(H=Math.round(P/L),P=Math.round(H*L)),C.setStyles(_,{width:H,height:P}),E[2]<0&&_.clientWidth<=H&&C.setStyle(_,"left",R+(B-H)),E[3]<0&&_.clientHeight<=P&&C.setStyle(_,"top",A+(D-P)),M||(i.fire("ObjectResizeStart",{target:w,width:B,height:D}),M=!0)}function s(){function e(e,t){t&&(w.style[e]||!i.schema.isValid(w.nodeName.toLowerCase(),e)?C.setStyle(w,e,t):C.setAttrib(w,e,t))}M=!1,e("width",H),e("height",P),C.unbind(O,"mousemove",a),C.unbind(O,"mouseup",s),I!=O&&(C.unbind(I,"mousemove",a),C.unbind(I,"mouseup",s)),C.remove(_),F&&"TABLE"!=w.nodeName||l(w),i.fire("ObjectResized",{target:w,width:H,height:P}),i.nodeChanged()}function l(e,t,r){var l,u,d,f,p,h=i.getBody();g(),l=C.getPos(e,h),R=l.x,A=l.y,p=e.getBoundingClientRect(),u=p.width||p.right-p.left,d=p.height||p.bottom-p.top,w!=e&&(m(),w=e,H=P=0),f=i.fire("ObjectSelected",{target:e}),o(e)&&!f.isDefaultPrevented()?x(N,function(e,o){function l(t){k=t.screenX,T=t.screenY,B=w.clientWidth,D=w.clientHeight,L=D/B,E=e,_=w.cloneNode(!0),C.addClass(_,"mce-clonedresizable"),_.contentEditable=!1,_.unSelectabe=!0,C.setStyles(_,{left:R,top:A,margin:0}),_.removeAttribute("data-mce-selected"),i.getBody().appendChild(_),C.bind(O,"mousemove",a),C.bind(O,"mouseup",s),I!=O&&(C.bind(I,"mousemove",a),C.bind(I,"mouseup",s))}var c,f;return t?void(o==t&&l(r)):(c=C.get("mceResizeHandle"+o),c?C.show(c):(f=i.getBody(),c=C.add(f,"div",{id:"mceResizeHandle"+o,"data-mce-bogus":!0,"class":"mce-resizehandle",unselectable:!0,style:"cursor:"+o+"-resize; margin:0; padding:0"}),n.ie&&(c.contentEditable=!1)),e.elm||(C.bind(c,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),l(e)}),e.elm=c),void C.setStyles(c,{left:u*e[0]+R-c.offsetWidth/2,top:d*e[1]+A-c.offsetHeight/2}))}):c(),w.setAttribute("data-mce-selected","1")}function c(){var e,t;g(),w&&w.removeAttribute("data-mce-selected");for(e in N)t=C.get("mceResizeHandle"+e),t&&(C.unbind(t),C.remove(t))}function u(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n;return x(C.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),n="mousedown"==e.type?e.target:r.getNode(),n=C.getParent(n,F?"table":"table,img,hr"),t(n,i.getBody())&&(v(),t(r.getStart(),n)&&t(r.getEnd(),n)&&(!F||n!=r.getStart()&&"IMG"!==r.getStart().nodeName))?void l(n):void c()}function d(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function f(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function p(e){var t=e.srcElement,n,r,o,a,s,c,u;n=t.getBoundingClientRect(),c=S.clientX-n.left,u=S.clientY-n.top;for(r in N)if(o=N[r],a=t.offsetWidth*o[0],s=t.offsetHeight*o[1],Math.abs(a-c)<8&&Math.abs(s-u)<8){E=o;break}M=!0,i.getDoc().selection.empty(),l(t,r,S)}function h(e){var t=e.srcElement;if(t!=w){if(m(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(c(),w=t,d(t,"resizestart",p))}}function m(){f(w,"resizestart",p)}function g(){for(var e in N){var t=N[e];t.elm&&(C.unbind(t.elm),delete t.elm)}}function v(){try{i.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function y(e){var t;if(F){t=O.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function b(){w=_=null,F&&(m(),f(i.getBody(),"controlselect",h))}var C=i.dom,x=t.each,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O=i.getDoc(),I=document,F=n.ie&&n.ie<11;N={n:[.5,0,0,-1],e:[1,.5,1,0],s:[.5,1,0,1],w:[0,.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var z=".mce-content-body";return i.contentStyles.push(z+" div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}"+z+" .mce-resizehandle:hover {background: #000}"+z+" img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}"+z+" .mce-clonedresizable {position: absolute;"+(n.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"),i.on("init",function(){F?(i.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(c(),y(e.target))}),d(i.getBody(),"controlselect",h),i.on("mousedown",function(e){S=e})):(v(),n.ie>=11&&(i.on("mouseup",function(e){var t=e.target.nodeName;/^(TABLE|IMG|HR)$/.test(t)&&(i.selection.select(e.target,"TABLE"==t),i.nodeChanged())}),i.dom.bind(i.getBody(),"mscontrolselect",function(e){/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&window.setTimeout(function(){i.selection.select(e.target)},0))}))),i.on("nodechange mousedown mouseup ResizeEditor",u),i.on("keydown keyup",function(e){w&&"TABLE"==w.nodeName&&u(e)}),i.on("hide",c)}),i.on("remove",g),{isResizable:o,showResizeRect:l,hideResizeRect:c,updateResizeRect:u,controlSelect:y,destroy:b}}}),r(B,[p,f],function(e,t){function n(e){this.walk=function(t,n){function i(e){var t;return t=e[0],3===t.nodeType&&t===l&&c>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===d&&e.length>0&&t===u&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,r){var a=r?"nextSibling":"previousSibling";for(m=e,g=m.parentNode;m&&m!=t;m=g)g=m.parentNode,v=o(m==e?m:m[a],a),v.length&&(r||v.reverse(),n(i(v)))}var l=t.startContainer,c=t.startOffset,u=t.endContainer,d=t.endOffset,f,p,h,m,g,v,y;if(y=e.select("td.mce-item-selected,th.mce-item-selected"),y.length>0)return void r(y,function(e){n([e])});if(1==l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[c]),1==u.nodeType&&u.hasChildNodes()&&(u=u.childNodes[Math.min(d-1,u.childNodes.length-1)]),l==u)return n(i([l]));for(f=e.findCommonAncestor(l,u),m=l;m;m=m.parentNode){if(m===u)return s(l,f,!0);if(m===f)break}for(m=u;m;m=m.parentNode){if(m===l)return s(u,f);if(m===f)break}p=a(l,f)||l,h=a(u,f)||u,s(l,p,!0),v=o(p==l?p:p.nextSibling,"nextSibling",h==u?h.nextSibling:h),v.length&&n(i(v)),s(u,h)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return c=p,u=n?p.nodeValue.length:0,void(i=!0);if(e.isBlock(p)||h[p.nodeName.toLowerCase()])return;s=p}o&&s&&(c=s,i=!0,u=0)}var c,u,d,f=e.getRoot(),p,h,m,g;if(c=n[(r?"start":"end")+"Container"],u=n[(r?"start":"end")+"Offset"],g=1==c.nodeType&&u===c.childNodes.length,h=e.schema.getNonEmptyElements(),m=r,1==c.nodeType&&u>c.childNodes.length-1&&(m=!1),9===c.nodeType&&(c=e.getRoot(),u=0),c===f){if(m&&(p=c.childNodes[u>0?u-1:0],p&&(h[p.nodeName]||"TABLE"==p.nodeName)))return;if(c.hasChildNodes()&&(u=Math.min(!m&&u>0?u-1:u,c.childNodes.length-1),c=c.childNodes[u],u=0,c.hasChildNodes()&&!/TABLE/.test(c.nodeName))){p=c,d=new t(c,f);do{if(3===p.nodeType&&p.nodeValue.length>0){u=m?0:p.nodeValue.length,c=p,i=!0;break}if(h[p.nodeName.toLowerCase()]){u=e.nodeIndex(p),c=p.parentNode,"IMG"!=p.nodeName||m||u++,i=!0;break}}while(p=m?d.next():d.prev())}}o&&(3===c.nodeType&&0===u&&l(!0),1===c.nodeType&&(p=c.childNodes[u],p||(p=c.childNodes[u-1]),!p||"BR"!==p.nodeName||s(p,"A")||a(p)||a(p,!0)||l(!0,p))),m&&!o&&3===c.nodeType&&u===c.nodeValue.length&&l(!1),i&&n["set"+(r?"Start":"End")](c,u)}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}var r=e.each;return n.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},n}),r(D,[f,T,A,B,g,p],function(e,n,r,i,o,a){function s(e,t,i,o){var a=this;a.dom=e,a.win=t,a.serializer=i,a.editor=o,a.controlSelection=new r(a,o),a.win.getSelection||(a.tridentSel=new n(a))}var l=a.each,c=a.grep,u=a.trim,d=o.ie,f=o.opera;return s.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="
          "+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,e=t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='_',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('_'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(){var e=this,t=e.getRng(),n,r,i,o;if(t.duplicate||t.item){if(t.item)return t.item(0);for(i=t.duplicate(),i.collapse(1),n=i.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),r=o=t.parentElement();o=o.parentNode;)if(o==n){n=r;break}return n}return n=t.startContainer,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[Math.min(n.childNodes.length-1,t.startOffset)]),n&&3==n.nodeType?n.parentNode:n},getEnd:function(){var e=this,t=e.getRng(),n,r;return t.duplicate||t.item?t.item?t.item(0):(t=t.duplicate(),t.collapse(0),n=t.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),n&&"BODY"==n.nodeName?n.lastChild||n:n):(n=t.endContainer,r=t.endOffset,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[r>0?r-1:r]),n&&3==n.nodeType?n.parentNode:n)},getBookmark:function(e,t){function n(e,t){var n=0;return l(a.select(e),function(e,r){e==t&&(n=r)}),n}function r(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function i(){function e(e,n){var i=e[n?"startContainer":"endContainer"],a=e[n?"startOffset":"endOffset"],s=[],l,c,u=0;if(3==i.nodeType){if(t)for(l=i.previousSibling;l&&3==l.nodeType;l=l.previousSibling)a+=l.nodeValue.length;s.push(a)}else c=i.childNodes,a>=c.length&&c.length&&(u=1,a=Math.max(0,c.length-1)),s.push(o.dom.nodeIndex(c[a],t)+u);for(;i&&i!=r;i=i.parentNode)s.push(o.dom.nodeIndex(i,t));return s}var n=o.getRng(!0),r=a.getRoot(),i={};return i.start=e(n,!0),o.isCollapsed()||(i.end=e(n)),i}var o=this,a=o.dom,s,c,u,d,f,p,h="",m;if(2==e)return p=o.getNode(),f=p?p.nodeName:null,"IMG"==f?{name:f,index:n(f,p)}:o.tridentSel?o.tridentSel.getBookmark(e):i();if(e)return{rng:o.getRng()};if(s=o.getRng(),u=a.uniqueId(),d=o.isCollapsed(),m="overflow:hidden;line-height:0px",s.duplicate||s.item){if(s.item)return p=s.item(0),f=p.nodeName,{name:f,index:n(f,p)};c=s.duplicate();try{s.collapse(),s.pasteHTML(''+h+""),d||(c.collapse(!1),s.moveToElementText(c.parentElement()),0===s.compareEndPoints("StartToEnd",c)&&c.move("character",-1),c.pasteHTML(''+h+""))}catch(g){return null}}else{if(p=o.getNode(),f=p.nodeName,"IMG"==f)return{name:f,index:n(f,p)};c=r(s.cloneRange()),d||(c.collapse(!1),c.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_end",style:m},h))),s=r(s),s.collapse(!0),s.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_start",style:m},h))}return o.moveToBookmark({id:u,keep:1}),{id:u}},moveToBookmark:function(e){function t(t){var n=e[t?"start":"end"],r,i,o,l;if(n){for(o=n[0],i=s,r=n.length-1;r>=1;r--){if(l=i.childNodes,n[r]>l.length-1)return;i=l[n[r]]}3===i.nodeType&&(o=Math.min(n[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(n[0],i.childNodes.length)),t?a.setStart(i,o):a.setEnd(i,o)}return!0}function n(t){var n=o.get(e.id+"_"+t),r,i,a,s,d=e.keep;if(n&&(r=n.parentNode,"start"==t?(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),u=p=r,h=m=i):(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),p=r,m=i),!d)){for(s=n.previousSibling,a=n.nextSibling,l(c(n.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});n=o.get(e.id+"_"+t);)o.remove(n,1);s&&a&&s.nodeType==a.nodeType&&3==s.nodeType&&!f&&(i=s.nodeValue.length,s.appendData(a.nodeValue),o.remove(a),"start"==t?(u=p=s,h=m=i):(p=s,m=i))}}function r(e){return!o.isBlock(e)||e.innerHTML||d||(e.innerHTML='
          '),e}var i=this,o=i.dom,a,s,u,p,h,m;if(e)if(e.start){if(a=o.createRng(),s=o.getRoot(),i.tridentSel)return i.tridentSel.moveToBookmark(e);t(!0)&&t()&&i.setRng(a)}else e.id?(n("start"),n("end"),u&&(a=o.createRng(),a.setStart(r(u),h),a.setEnd(r(p),m),i.setRng(a))):e.name?i.select(o.select(e.name)[e.index]):e.rng&&i.setRng(e.rng)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}return e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a=n.win.document,s;if(!e&&n.lastFocusBookmark){var l=n.lastFocusBookmark;return l.startContainer?(i=a.createRange(),i.setStart(l.startContainer,l.startOffset),i.setEnd(l.endContainer,l.endOffset)):i=l,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(c){}if(d&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(c){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot(),i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r;if(e.select)try{e.select()}catch(i){}else if(n.tridentSel){if(e.cloneRange)try{return void n.tridentSel.addRange(e)}catch(i){}}else if(r=n.getSel()){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(i){}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,l=t.dom.getRoot();return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return!d&&new i(e.dom).normalize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};l(n.selectorChangedData,function(e,t){l(o,function(n){return i.is(n,t)?(r[t]||(l(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),l(r,function(e,n){a[n]||(delete r[n],l(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e){function t(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var n,r,i=this,o=i.dom,a=o.getRoot(),s,l;if("BODY"!=a.nodeName){var c=i.getScrollContainer();if(c)return n=t(e).y-t(c).y,l=c.clientHeight,s=c.scrollTop,void((s>n||n+25>s+l)&&(c.scrollTop=s>n?n:n-l+25))}r=o.getViewPort(i.editor.getWin()),n=o.getPos(e).y,s=r.y,l=r.h,(ns+l)&&i.editor.getWin().scrollTo(0,s>n?n:n-l+25)},_moveEndPoint:function(t,n,r){var i=n,a=new e(n,i),s=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==u(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(s[n.nodeName])return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(o.ie&&o.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?a.next():a.prev());"BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},s}),r(L,[p],function(e){function t(e,t){function r(e){return e.replace(/%(\w+)/g,"")}var i,o,a=e.dom,s="",l,c;if(c=e.settings.preview_styles,c===!1)return"";if(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),"string"==typeof t){if(t=e.formatter.get(t),!t)return;t=t[0]}return i=t.block||t.inline||"span",o=a.create(i),n(t.styles,function(e,t){e=r(e),e&&a.setStyle(o,t,e)}),n(t.attributes,function(e,t){e=r(e),e&&a.setAttrib(o,t,e)}),n(t.classes,function(e){e=r(e),a.hasClass(o,e)||a.addClass(o,e)}),e.fire("PreviewFormats"),a.setStyles(o,{position:"absolute",left:-65535}),e.getBody().appendChild(o),l=a.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,n(c.split(" "),function(t){var n=a.getStyle(o,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=a.getStyle(e.getBody(),t,!0),"#ffffff"==a.toHex(n).toLowerCase())||"color"==t&&"#000000"==a.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(s+="padding:0 2px;"),s+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),a.remove(o),s}var n=e.each;return{getCssText:t}}),r(M,[f,B,p,L],function(e,t,n,r){return function(i){function o(e){return e.nodeType&&(e=e.nodeName),!!i.schema.getTextBlockElements()[e.toLowerCase()]}function a(e,t){return z.getParents(e,t,z.getRoot())}function s(e){return 1===e.nodeType&&"_mce_caret"===e.id}function l(){d({valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:!1},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:!1},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(e,t,n){nt(n,function(t,n){z.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),nt("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){d(e,{block:e,remove:"all"})}),d(i.settings.formats)}function c(){i.addShortcut("ctrl+b","bold_desc","Bold"),i.addShortcut("ctrl+i","italic_desc","Italic"),i.addShortcut("ctrl+u","underline_desc","Underline");for(var e=1;6>=e;e++)i.addShortcut("ctrl+"+e,"",["FormatBlock",!1,"h"+e]);i.addShortcut("ctrl+7","",["FormatBlock",!1,"p"]),i.addShortcut("ctrl+8","",["FormatBlock",!1,"div"]),i.addShortcut("ctrl+9","",["FormatBlock",!1,"address"])}function u(e){return e?F[e]:F}function d(e,t){e&&("string"!=typeof e?nt(e,function(e,t){d(t,e)}):(t=t.length?t:[t],nt(t,function(e){e.deep===Q&&(e.deep=!e.selector),e.split===Q&&(e.split=!e.selector||e.inline),e.remove===Q&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),F[e]=t))}function f(e){var t;return i.dom.getParent(e,function(e){return t=i.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function p(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=f(e.parentNode),i.dom.getStyle(e,"color")&&t?i.dom.setStyle(e,"text-decoration",t):i.dom.getStyle(e,"textdecoration")===t&&i.dom.setStyle(e,"text-decoration",null))}function h(t,n,r){function a(e,t){if(t=t||m,e){if(t.onformat&&t.onformat(e,t,n,r),nt(t.styles,function(t,r){z.setStyle(e,r,k(t,n))}),t.styles){var i=z.getAttrib(e,"style");i&&e.setAttribute("data-mce-style",i)}nt(t.attributes,function(t,r){z.setAttrib(e,r,k(t,n))}),nt(t.classes,function(t){t=k(t,n),z.hasClass(e,t)||z.addClass(e,t)})}}function l(){function t(t,n){var i=new e(n);for(r=i.current();r;r=i.prev())if(r.childNodes.length>1||r==t||"BR"==r.tagName)return r}var n=i.selection.getRng(),o=n.startContainer,a=n.endContainer;if(o!=a&&0===n.endOffset){var s=t(o,a),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function c(e,t,n,r,i){var o=[],a=-1,s,l=-1,c=-1,u;return nt(e.childNodes,function(e,t){return"UL"===e.nodeName||"OL"===e.nodeName?(a=t,s=e,!1):void 0}),nt(e.childNodes,function(e,n){"SPAN"===e.nodeName&&"bookmark"==z.getAttrib(e,"data-mce-type")&&(e.id==t.id+"_start"?l=n:e.id==t.id+"_end"&&(c=n))}),0>=a||a>l&&c>a?(nt(rt(e.childNodes),i),0):(u=z.clone(n,Y),nt(rt(e.childNodes),function(e,t){(a>l&&a>t||l>a&&t>a)&&(o.push(e),e.parentNode.removeChild(e))}),a>l?e.insertBefore(u,s):l>a&&e.insertBefore(u,s.nextSibling),r.push(u),nt(o,function(e){u.appendChild(e)}),u)}function d(e,r,i){var l=[],u,d,p=!0;u=m.inline||m.block,d=z.create(u),a(d),V.walk(e,function(e){function h(e){var y,C,x,w,_;return _=p,y=e.nodeName.toLowerCase(),C=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&Z(e)&&(_=p,p="true"===Z(e),w=!0),N(y,"br")?(g=0,void(m.block&&z.remove(e))):m.wrapper&&v(e,t,n)?void(g=0):p&&!w&&m.block&&!m.wrapper&&o(y)&&U(C,u)?(e=z.rename(e,u),a(e),l.push(e),void(g=0)):m.selector&&(nt(f,function(t){"collapsed"in t&&t.collapsed!==b||z.is(e,t.selector)&&!s(e)&&(a(e,t),x=!0)}),!m.inline||x)?void(g=0):void(!p||w||!U(u,y)||!U(C,u)||!i&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||s(e)||m.inline&&q(e)?"li"==y&&r?g=c(e,r,d,l,h):(g=0,nt(rt(e.childNodes),h),w&&(p=_),g=0):(g||(g=z.clone(d,Y),e.parentNode.insertBefore(g,e),l.push(g)),g.appendChild(e)))}var g;nt(e,h)}),m.wrap_links===!1&&nt(l,function(e){function t(e){var n,r,i;if("A"===e.nodeName){for(r=z.clone(d,Y),l.push(r),i=rt(e.childNodes),n=0;n1||!q(e))&&0===o)return void z.remove(e,1);if(m.inline||m.wrapper){if(m.exact||1!==o||(e=i(e)),nt(f,function(t){nt(z.select(t.inline,e),function(e){var r;if(!M(e)){if(t.wrap_links===!1){r=e.parentNode;do if("A"===r.nodeName)return;while(r=r.parentNode)}B(t,n,e,t.exact?e:null)}})}),v(e.parentNode,t,n))return z.remove(e,1),e=0,X;m.merge_with_parents&&z.getParent(e.parentNode,function(r){return v(r,t,n)?(z.remove(e,1),e=0,X):void 0}),e&&m.merge_siblings!==!1&&(e=H(L(e),e),e=H(e,L(e,X)))}})}var f=u(t),m=f[0],g,y,b=!r&&W.isCollapsed();if(m)if(r)r.nodeType?(y=z.createRng(),y.setStartBefore(r),y.setEndAfter(r),d(A(y,f),null,!0)):d(r,null,!0);else if(b&&m.inline&&!z.select("td.mce-item-selected,th.mce-item-selected").length)O("apply",t,n);else{var C=i.selection.getNode();$||!f[0].defaultBlock||z.getParent(C,z.isBlock)||h(f[0].defaultBlock),i.selection.setRng(l()),g=W.getBookmark(),d(A(W.getRng(X),f),g),m.styles&&(m.styles.color||m.styles.textDecoration)&&(it(C,p,"childNodes"),p(C)),W.moveToBookmark(g),I(W.getRng(X)),i.nodeChanged()}}function m(e,t,n){function r(e){var n,i,o,a,s;if(1===e.nodeType&&Z(e)&&(a=b,b="true"===Z(e),s=!0),n=rt(e.childNodes),b&&!s)for(i=0,o=p.length;o>i&&!B(p[i],t,e,e);i++);if(h.deep&&n.length){for(i=0,o=n.length;o>i;i++)r(n[i]);s&&(b=a)}}function o(n){var r;return nt(a(n.parentNode).reverse(),function(n){var i;r||"_start"==n.id||"_end"==n.id||(i=v(n,e,t),i&&i.split!==!1&&(r=n))}),r}function s(e,n,r,i){var o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=z.clone(o,Y),c=0;c=0;o--){if(s=t[o].selector,!s||t[o].defaultBlock)return X;for(i=r.length-1;i>=0;i--)if(z.is(r[i],s))return X}return Y}function x(e,t,n){var r;return J||(J={},r={},i.on("NodeChange",function(e){var t=a(e.element),n={};nt(J,function(e,i){nt(t,function(o){return v(o,i,{},e.similar)?(r[i]||(nt(e,function(e){e(!0,{node:o,format:i,parents:t})}),r[i]=e),n[i]=e,!1):void 0})}),nt(r,function(i,o){n[o]||(delete r[o],nt(i,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),nt(e.split(","),function(e){J[e]||(J[e]=[],J[e].similar=n),J[e].push(t)}),this}function w(e){return r.getCssText(i,e)}function _(e,t){return N(e,t.inline)?X:N(e,t.block)?X:t.selector?1==e.nodeType&&z.is(e,t.selector):void 0}function N(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function E(e,t){return S(z.getStyle(e,t),t)}function S(e,t){return("color"==t||"backgroundColor"==t)&&(e=z.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function k(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function T(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function R(e,t,n){var r=z.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function A(t,n,r){function s(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=z.getRoot(),3==r.nodeType&&!T(r)&&(e?v>0:bi?n:i,-1===n||r||n++):(n=a.indexOf(" ",t),i=a.indexOf("\xa0",t),n=-1!==n&&(-1===i||i>n)?n:i),n}var s,l,c,u;if(3===t.nodeType){if(c=a(t,n),-1!==c)return{container:t,offset:c};u=t}for(s=new e(t,z.getParent(t,q)||i.getBody());l=s[o?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=a(l),-1!==c)return{container:l,offset:c}}else if(q(l))break;return u?(n=o?0:u.length,{container:u,offset:n}):void 0}function d(e,r){var i,o,s,l;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=a(e),o=0;op?p:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(p=y.childNodes.length-1,y=y.childNodes[b>p?p:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=c(g),y=c(y),(M(g.parentNode)||M(g))&&(g=M(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(M(y.parentNode)||M(y))&&(y=M(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(m=u(g,v,!0),m&&(g=m.container,v=m.offset),m=u(y,b),m&&(y=m.container,b=m.offset)),h=l(y,b),h.node)){for(;h.node&&0===h.offset&&h.node.previousSibling;)h=l(h.node.previousSibling);h.node&&h.offset>0&&3===h.node.nodeType&&" "===h.node.nodeValue.charAt(h.offset-1)&&h.offset>1&&(y=h.node,y.splitText(h.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=s(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=s())),n[0].selector&&n[0].expand!==Y&&!n[0].inline&&(g=d(g,"previousSibling"),y=d(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(q(g)||(g=s(!0)),q(y)||(y=s()))),1==g.nodeType&&(v=j(g),g=g.parentNode),1==y.nodeType&&(b=j(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function B(e,t,n,r){var i,o,a;if(!_(n,e))return Y;if("all"!=e.remove)for(nt(e.styles,function(e,i){e=S(k(e,t),i),"number"==typeof i&&(i=e,r=0),(!r||N(E(r,i),e))&&z.setStyle(n,i,""),a=1}),a&&""===z.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),nt(e.attributes,function(e,i){var o;if(e=k(e,t),"number"==typeof i&&(i=e,r=0),!r||N(z.getAttrib(r,i),e)){if("class"==i&&(e=z.getAttrib(n,i),e&&(o="",nt(e.split(/\s+/),function(e){/mce\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void z.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),G.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),nt(e.classes,function(e){e=k(e,t),(!r||z.hasClass(r,e))&&z.removeClass(n,e)}),o=z.getAttribs(n),i=0;ia?a:o]),3===r.nodeType&&n&&o>=r.nodeValue.length&&(r=new e(r,i.getBody()).next()||r),3!==r.nodeType||n||0!==o||(r=new e(r,i.getBody()).prev()||r),r}function O(t,n,r){function a(e){var t=z.create("span",{id:y,"data-mce-bogus":!0,style:b?"color:red":""});return e&&t.appendChild(i.getDoc().createTextNode(K)),t}function s(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==K||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function l(e){for(;e;){if(e.id===y)return e;e=e.parentNode}}function c(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=W.getRng(!0),s(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),z.remove(e)):(n=c(e),n.nodeValue.charAt(0)===K&&(n=n.deleteData(0,1)),z.remove(e,1)),W.setRng(r);else if(e=l(W.getStart()),!e)for(;e=z.get(y);)d(e,!1)}function f(){var e,t,i,o,s,d,f;e=W.getRng(!0),o=e.startOffset,d=e.startContainer,f=d.nodeValue,t=l(W.getStart()),t&&(i=c(t)),f&&o>0&&o=0;p--)c.appendChild(z.clone(f[p],!1)),c=c.firstChild;c.appendChild(z.doc.createTextNode(K)),c=c.firstChild;var g=z.getParent(d,o);g&&z.isEmpty(g)?d.parentNode.replaceChild(h,d):z.insertAfter(h,d),W.setCursorLocation(c,1),z.isEmpty(d)&&z.remove(d)}}function g(){var e;e=l(W.getStart()),e&&!z.isEmpty(e)&&it(e,function(e){1!=e.nodeType||e.id===y||z.isEmpty(e)||z.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var y="_mce_caret",b=i.settings.caret_debug;i._hasCaretEvents||(tt=function(){var e=[],t;if(s(l(W.getStart()),e))for(t=e.length;t--;)z.setAttrib(e[t],"data-mce-bogus","1")},et=function(e){var t=e.keyCode;d(),(8==t||37==t||39==t)&&d(l(W.getStart())),g()},i.on("SetContent",function(e){e.selection&&g()}),i._hasCaretEvents=!0),"apply"==t?f():p()}function I(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if(3==n.nodeType&&r>=n.nodeValue.length&&(r=j(n),n=n.parentNode,i=!0),1==n.nodeType)for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,z.getParent(n,z.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!T(a))return l=z.create("a",null,K),a.parentNode.insertBefore(l,a),t.setStart(a,0),W.setRng(t),void z.remove(l)}var F={},z=i.dom,W=i.selection,V=new t(z),U=i.schema.isValidChild,q=z.isBlock,$=i.settings.forced_root_block,j=z.nodeIndex,K="\ufeff",G=/^(src|href|style)$/,Y=!1,X=!0,J,Q,Z=z.getContentEditable,et,tt,nt=n.each,rt=n.grep,it=n.walk,ot=n.extend;ot(this,{get:u,register:d,apply:h,remove:m,toggle:g,match:y,matchAll:b,matchNode:v,canApply:C,formatChanged:x,getCssText:w}),l(),c(),i.on("BeforeGetContent",function(){tt&&tt()}),i.on("mouseup keydown",function(e){et&&et(e)})}}),r(H,[g,p],function(e,t){var n=t.trim,r;return r=new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","]+data-mce-bogus[^>]+><\\/div>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi"),function(t){function i(){return n(t.getContent({format:"raw",no_events:1}).replace(r,""))}function o(e){a.typing=!1,a.add({},e)}var a=this,s=0,l=[],c,u,d=0;return t.on("init",function(){a.add()}),t.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&a.beforeChange()}),t.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&o(e)}),t.on("ObjectResizeStart",function(){a.beforeChange()}),t.on("SaveContent ObjectResized blur",o),t.on("DragEnd",o),t.on("KeyUp",function(n){var r=n.keyCode;(r>=33&&36>=r||r>=37&&40>=r||45==r||13==r||n.ctrlKey)&&(o(),t.nodeChanged()),(46==r||8==r||e.mac&&(91==r||93==r))&&t.nodeChanged(),u&&a.typing&&(t.isDirty()||(t.isNotDirty=!l[0]||i()==l[0].content,t.isNotDirty||t.fire("change",{level:l[0],lastLevel:null})),t.fire("TypingUndo"),u=!1,t.nodeChanged())}),t.on("KeyDown",function(e){var t=e.keyCode;return t>=33&&36>=t||t>=37&&40>=t||45==t?void(a.typing&&o(e)):void((16>t||t>20)&&224!=t&&91!=t&&!a.typing&&(a.beforeChange(),a.typing=!0,a.add({},e),u=!0))}),t.on("MouseDown",function(e){a.typing&&o(e)}),t.addShortcut("ctrl+z","","Undo"),t.addShortcut("ctrl+y,ctrl+shift+z","","Redo"),t.on("AddUndo Undo Redo ClearUndos MouseUp",function(e){e.isDefaultPrevented()||t.nodeChanged()}),a={data:l,typing:!1,beforeChange:function(){d||(c=t.selection.getBookmark(2,!0))},add:function(e,n){var r,o=t.settings,a;if(e=e||{},e.content=i(),d||t.removed)return null;if(a=l[s],t.fire("BeforeAddUndo",{level:e,lastLevel:a,originalEvent:n}).isDefaultPrevented())return null;if(a&&a.content==e.content)return null;if(l[s]&&(l[s].beforeBookmark=c),o.custom_undo_redo_levels&&l.length>o.custom_undo_redo_levels){for(r=0;r0&&(t.isNotDirty=!1,t.fire("change",u)),e},undo:function(){var e;return a.typing&&(a.add(),a.typing=!1),s>0&&(e=l[--s],0===s&&(t.isNotDirty=!0),t.setContent(e.content,{format:"raw"}),t.selection.moveToBookmark(e.beforeBookmark),t.fire("undo",{level:e})),e},redo:function(){var e;return s0||a.typing&&l[0]&&i()!=l[0].content},hasRedo:function(){return sD)&&(u=a.create("br"),t.parentNode.insertBefore(u,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0),l.setEnd(t,0));s.setRng(l),a.remove(u),s.scrollIntoView(t)}function g(e){var t=l.forced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function v(e){var t=R,n,i,o;if(e||"TABLE"==O?(n=a.create(e||F),g(n)):n=B.cloneNode(!1),o=n,l.keep_styles!==!1)do if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(t.nodeName)){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while(t=t.parentNode);return r||(o.innerHTML='
          '),n}function y(t){var n,r,i;if(3==R.nodeType&&(t?A>0:A0)return!0}function w(){var e,t,n;R&&3==R.nodeType&&A>=R.nodeValue.length&&(r||x()||(e=a.create("br"),S.insertNode(e),S.setStartAfter(e),S.setEndAfter(e),t=!0)),e=a.create("br"),S.insertNode(e),r&&"PRE"==O&&(!D||8>D)&&e.parentNode.insertBefore(a.doc.createTextNode("\r"),e),n=a.create("span",{}," "),e.parentNode.insertBefore(n,e),s.scrollIntoView(n),a.remove(n),t?(S.setStartBefore(e),S.setEndBefore(e)):(S.setStartAfter(e),S.setEndAfter(e)),s.setRng(S),c.add()}function _(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;while(e)}function N(e){var t=a.getRoot(),n,r;for(n=e;n!==t&&"false"!==a.getContentEditable(n);)"true"===a.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function E(e){var t;r||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(a.getStyle(t,"float",!0)))&&a.add(e,"br"))}var S,k,T,R,A,B,D,L,M,H,P,O,I,F,z;if(S=s.getRng(!0),!o.isDefaultPrevented()){if(!S.collapsed)return void i.execCommand("Delete");if(new t(a).normalize(S),R=S.startContainer,A=S.startOffset,F=(l.force_p_newlines?"p":"")||l.forced_root_block,F=F?F.toUpperCase():"",D=a.doc.documentMode,L=o.shiftKey,1==R.nodeType&&R.hasChildNodes()&&(z=A>R.childNodes.length-1,R=R.childNodes[Math.min(A,R.childNodes.length-1)]||R,A=z&&3==R.nodeType?R.nodeValue.length:0),T=N(R)){if(c.beforeChange(),!a.isBlock(T)&&T!=a.getRoot())return void((!F||L)&&w());if((F&&!L||!F&&L)&&(R=b(R,A)),B=a.getParent(R,a.isBlock),P=B?a.getParent(B.parentNode,a.isBlock):null,O=B?B.nodeName.toUpperCase():"",I=P?P.nodeName.toUpperCase():"","LI"!=I||o.ctrlKey||(B=P,O=I),"LI"==O){if(!F&&L)return void w();if(a.isEmpty(B))return void C()}if("PRE"==O&&l.br_in_pre!==!1){if(!L)return void w()}else if(!F&&!L&&"LI"!=O||F&&L)return void w();F&&B===i.getBody()||(F=F||"P",y()?(M=/^(H[1-6]|PRE|FIGURE)$/.test(O)&&"HGROUP"!=I?v(F):v(),l.end_container_on_empty_block&&f(P)&&a.isEmpty(B)?M=a.split(P,B):a.insertAfter(M,B),m(M)):y(!0)?(M=B.parentNode.insertBefore(v(),B),p(M),m(B)):(k=S.cloneRange(),k.setEndAfter(B),H=k.extractContents(),_(H),M=H.firstChild,a.insertAfter(H,B),h(M),E(B),m(M)),a.setAttrib(M,"id",""),i.fire("NewBlock",{newBlock:M}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,u=i.schema,d=u.getNonEmptyElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(O,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,p,h,m=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",m),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",m)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){h=t,t=t.nextSibling,r.remove(h);continue}p||(p=r.create(C,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(p,t),g=!0),h=t,t=t.nextSibling,p.appendChild(h)}else p=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("NodeChange",t)}}),r(I,[S,g,p],function(e,n,r){var i=r.each,o=r.extend,a=r.map,s=r.inArray,l=r.explode,c=n.gecko,u=n.ie,d=!0,f=!1;return function(r){function p(e,t,n){var r;return e=e.toLowerCase(),(r=N.exec[e])?(r(e,t,n),d):f}function h(e){var t;return e=e.toLowerCase(),(t=N.state[e])?t(e):-1}function m(e){var t;return e=e.toLowerCase(),(t=N.value[e])?t(e):f}function g(e,t){t=t||"exec",i(e,function(e,n){i(n.toLowerCase().split(","),function(n){N[t][n]=e})})}function v(e,n,i){return n===t&&(n=f),i===t&&(i=null),r.getDoc().execCommand(e,n,i)}function y(e){return S.match(e)}function b(e,n){S.toggle(e,n?{value:n}:t),r.nodeChanged()}function C(e){k=_.getBookmark(e)}function x(){_.moveToBookmark(k)}var w=r.dom,_=r.selection,N={state:{},exec:{},value:{}},E=r.settings,S=r.formatter,k;o(this,{execCommand:p,queryCommandState:h,queryCommandValue:m,addCommands:g}),g({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){r.undoManager.add()},"Cut,Copy,Paste":function(e){var t=r.getDoc(),i;try{v(e)}catch(o){i=d}if(i||!t.queryCommandSupported(e)){var a=r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");n.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),r.windowManager.alert(a)}},unlink:function(){if(_.isCollapsed()){var e=_.getNode();return void("A"==e.tagName&&r.dom.remove(e,!0))}S.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t=e.substring(7);"full"==t&&(t="justify"),i("left,center,right,justify".split(","),function(e){t!=e&&S.remove("align"+e)}),b("align"+t),p("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;v(e),t=w.getParent(_.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(C(),w.split(n,t),x()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){b(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){b(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=l(E.font_size_style_values),r=l(E.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),b(e,n)},RemoveFormat:function(e){S.remove(e)},mceBlockQuote:function(){b("blockquote")},FormatBlock:function(e,t,n){return b(n||"p")},mceCleanup:function(){var e=_.getBookmark();r.setContent(r.getContent({cleanup:d}),{cleanup:d}),_.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var i=n||_.getNode();i!=r.getBody()&&(C(),r.dom.remove(i,d),x())},mceSelectNodeDepth:function(e,t,n){var i=0;w.getParent(_.getNode(),function(e){return 1==e.nodeType&&i++==n?(_.select(e),f):void 0},r.getBody())},mceSelectNode:function(e,t,n){_.select(n)},mceInsertContent:function(t,n,i){function o(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=_.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^ /," "):t("previousSibling")||(e=e.replace(/^ /," ")),i|)$/," "):t("nextSibling")||(e=e.replace(/( | )(
          |)$/," "))),e}var a,s,l,c,d,f,p,h,m,g,v;/^ | $/.test(i)&&(i=o(i)),a=r.parser,s=new e({},r.schema),v='ÈB;',f={content:i,format:"html",selection:!0},r.fire("BeforeSetContent",f),i=f.content,-1==i.indexOf("{$caret}")&&(i+="{$caret}"),i=i.replace(/\{\$caret\}/,v),h=_.getRng();var y=h.startContainer||(h.parentElement?h.parentElement():null),b=r.getBody();y===b&&_.isCollapsed()&&w.isBlock(b.firstChild)&&w.isEmpty(b.firstChild)&&(h=w.createRng(),h.setStart(b.firstChild,0),h.setEnd(b.firstChild,0),_.setRng(h)),_.isCollapsed()||r.getDoc().execCommand("Delete",!1,null),l=_.getNode();var C={context:l.nodeName.toLowerCase()};if(d=a.parse(i,C),m=d.lastChild,"mce_marker"==m.attr("id"))for(p=m,m=m.prev;m;m=m.walk(!0))if(3==m.type||!w.isBlock(m.name)){m.parent.insert(p,m,"br"===m.name);break}if(C.invalid){for(_.setContent(v),l=_.getNode(),c=r.getBody(),9==l.nodeType?l=m=c:m=l;m!==c;)l=m,m=m.parentNode;i=l==c?c.innerHTML:w.getOuterHTML(l),i=s.serialize(a.parse(i.replace(//i,function(){return s.serialize(d)}))),l==c?w.setHTML(c,i):w.setOuterHTML(l,i)}else i=s.serialize(d),m=l.firstChild,g=l.lastChild,!m||m===g&&"BR"===m.nodeName?w.setHTML(l,i):_.setContent(i);p=w.get("mce_marker"),_.scrollIntoView(p),h=w.createRng(),m=p.previousSibling,m&&3==m.nodeType?(h.setStart(m,m.nodeValue.length),u||(g=p.nextSibling,g&&3==g.nodeType&&(m.appendData(g.data),g.parentNode.removeChild(g)))):(h.setStartBefore(p),h.setEndBefore(p)),w.remove(p),_.setRng(h),r.fire("SetContent",f),r.addVisual()},mceInsertRawHTML:function(e,t,n){_.setContent("tiny_mce_marker"),r.setContent(r.getContent().replace(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){b(n)},mceSetContent:function(e,t,n){r.setContent(n)},"Indent,Outdent":function(e){var t,n,o;t=E.indentation,n=/[a-z%]+$/i.exec(t),t=parseInt(t,10),h("InsertUnorderedList")||h("InsertOrderedList")?v(e):(E.forced_root_block||w.getParent(_.getNode(),w.isBlock)||S.apply("div"),i(_.getSelectedBlocks(),function(i){if("LI"!=i.nodeName){var a=r.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==w.getStyle(i,"direction",!0)?"Right":"Left","outdent"==e?(o=Math.max(0,parseInt(i.style[a]||0,10)-t),w.setStyle(i,a,o?o+n:"")):(o=parseInt(i.style[a]||0,10)+t+n,w.setStyle(i,a,o))}}))},mceRepaint:function(){if(c)try{C(d),_.getSel()&&_.getSel().selectAllChildren(r.getBody()),_.collapse(d),x()}catch(e){}},InsertHorizontalRule:function(){r.execCommand("mceInsertContent",!1,"
          ")},mceToggleVisualAid:function(){r.hasVisual=!r.hasVisual,r.addVisual()},mceReplaceContent:function(e,t,n){r.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,_.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=w.getParent(_.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||S.remove("link"),n.href&&S.apply("link",n,r)},selectAll:function(){var e=w.getRoot(),t;_.getRng().setStart?(t=w.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),_.setRng(t)):(t=_.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){v("Delete");var e=r.getBody();w.isEmpty(e)&&(r.setContent(""),e.firstChild&&w.isBlock(e.firstChild)?r.selection.setCursorLocation(e.firstChild,0):r.selection.setCursorLocation(e,0))},mceNewDocument:function(){r.setContent("")}}),g({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=_.isCollapsed()?[w.getParent(_.getNode(),w.isBlock)]:_.getSelectedBlocks(),r=a(n,function(e){return!!S.matchNode(e,t)});return-1!==s(r,d)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return y(e)},mceBlockQuote:function(){return y("blockquote")},Outdent:function(){var e;if(E.inline_styles){if((e=w.getParent(_.getStart(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d;if((e=w.getParent(_.getEnd(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d +}return h("InsertUnorderedList")||h("InsertOrderedList")||!E.inline_styles&&!!w.getParent(_.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=w.getParent(_.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),g({"FontSize,FontName":function(e){var t=0,n;return(n=w.getParent(_.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),g({Undo:function(){r.undoManager.undo()},Redo:function(){r.undoManager.redo()}})}}),r(F,[p],function(e){function t(e,i){var o=this,a,s;if(e=r(e),i=o.settings=i||{},/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(o.source=e);var l=0===e.indexOf("//");0!==e.indexOf("/")||l||(e=(i.base_uri?i.base_uri.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(s=i.base_uri?i.base_uri.path:new t(location.href).directory,e=""===i.base_uri.protocol?"//mce_host"+o.toAbsPath(s,e):(i.base_uri&&i.base_uri.protocol||"http")+"://mce_host"+o.toAbsPath(s,e)),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),o[t]=r}),a=i.base_uri,a&&(o.protocol||(o.protocol=a.protocol),o.userInfo||(o.userInfo=a.userInfo),o.port||"mce_host"!==o.host||(o.port=a.port),o.host&&"mce_host"!==o.host||(o.host=a.host),o.source=""),l&&(o.protocol="")}var n=e.each,r=e.trim,i={ftp:21,http:80,https:443,mailto:25};return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(n&&this.isSameOrigin(e))},isSameOrigin:function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=i[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.lengtho;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o];return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t}),r(z,[p],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],u[d]="function"==typeof f&&c[d]?s(d,f):f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(W,[p],function(e){function t(e){function t(){return!1}function n(){return!0}function r(r,i){var o,a,s,u;if(r=r.toLowerCase(),i=i||{},i.type=r,i.target||(i.target=l),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),e.beforeFire&&e.beforeFire(i),o=c[r])for(a=0,s=o.length;s>a;a++){if(o[a]=u=o[a],i.isImmediatePropagationStopped())return i.stopPropagation(),i;if(u.call(l,i)===!1)return i.preventDefault(),i}return i}function i(e,n,r){var i,o,a;if(n===!1&&(n=t),n)for(o=e.toLowerCase().split(" "),a=o.length;a--;)e=o[a],i=c[e],i||(i=c[e]=[],u(e,!0)),r?i.unshift(n):i.push(n);return s}function o(e,t){var n,r,i,o,a;if(e)for(o=e.toLowerCase().split(" "),n=o.length;n--;){if(e=o[n],r=c[e],!e){for(i in c)u(i,!1),delete c[i];return s}if(r){if(t)for(a=r.length;a--;)r[a]===t&&r.splice(a,1);else r.length=0;r.length||(u(e,!1),delete c[e])}}else{for(e in c)u(e,!1);c={}}return s}function a(e){return e=e.toLowerCase(),!(!c[e]||0===c[e].length)}var s=this,l,c={},u;e=e||{},l=e.scope||s,u=e.toggleEvent||t,s.fire=r,s.on=i,s.off=o,s.has=a}var n=e.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit"," ");return t.isNative=function(e){return!!n[e.toLowerCase()]},t}),r(V,[z],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.hasClass(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function u(e){e&&r.push(e)}var d;return d=n.exec(e.replace(i,"")),u(t(d[1])),u(o(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),r.psuedo=!!d[7],r.direct=c,r}function u(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&u(i,t),e=[],a=0;a"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,u,d,f,p,h;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,h=e,p=0,i=o-1;i>=0;i--)for(c=a[i];h;){if(c.psuedo)for(f=h.parent().items(),u=d=f.length;u--&&f[u]!==h;);for(s=0,l=c.length;l>s;s++)if(!c[s](h,u,d)){s=l+1;break}if(s===l){p++;break}if(i===o-1)break;h=h.parent()}if(p===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,u=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(u.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(U,[p,V,z],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].hasClass(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this}},e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(q,[p,y],function(e,t){return{id:function(){return t.DOM.uniqueId()},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r($,[z,p,W,U,q],function(e,t,n,r,i){function o(e){return e._eventDispatcher||(e._eventDispatcher=new n({scope:e,toggleEvent:function(t,r){r&&n.isNative(t)&&(e._nativeEvents||(e._nativeEvents={}),e._nativeEvents[t]=!0,e._rendered&&e.bindPendingEvents())}})),e._eventDispatcher}var a={},s="onmousewheel"in document,l=!1,c="mce-",u=e.extend({Statics:{elementIdCache:a,classPrefix:c},isRtl:function(){return u.rtl},classPrefix:c,init:function(e){var n=this,r,o;if(n.settings=e=t.extend({},n.Defaults,e),n._id=e.id||i.id(),n._text=n._name="",n._width=n._height=0,n._aria={role:e.role},r=e.classes)for(r=r.split(" "),r.map={},o=r.length;o--;)r.map[r[o]]=!0;n._classes=r||[],n.visible(!0),t.each("title text width height name classes visible disabled active value".split(" "),function(t){var r=e[t],i;r!==i?n[t](r):n["_"+t]===i&&(n["_"+t]=!1)}),n.on("click",function(){return n.disabled()?!1:void 0}),e.classes&&t.each(e.classes.split(" "),function(e){n.addClass(e)}),n.settings=e,n._borderBox=n.parseBox(e.border),n._paddingBox=n.parseBox(e.padding),n._marginBox=n.parseBox(e.margin),e.hidden&&n.hide()},Properties:"parent,title,text,width,height,disabled,active,name,value",Methods:"renderHtml",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},borderBox:function(){return this._borderBox},paddingBox:function(){return this._paddingBox},marginBox:function(){return this._marginBox},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}},initLayoutRect:function(){var e=this,t=e.settings,n,r,o=e.getEl(),a,s,l,c,u,d,f,p;n=e._borderBox=e._borderBox||e.measureBox(o,"border"),e._paddingBox=e._paddingBox||e.measureBox(o,"padding"),e._marginBox=e._marginBox||e.measureBox(o,"margin"),p=i.getSize(o),d=t.minWidth,f=t.minHeight,l=d||p.width,c=f||p.height,a=t.width,s=t.height,u=t.autoResize,u="undefined"!=typeof u?u:!a&&!s,a=a||l,s=s||c;var h=n.left+n.right,m=n.top+n.bottom,g=t.maxWidth||65535,v=t.maxHeight||65535;return e._layoutRect=r={x:t.x||0,y:t.y||0,w:a,h:s,deltaW:h,deltaH:m,contentW:a-h,contentH:s-m,innerW:a-h,innerH:s-m,startMinWidth:d||0,startMinHeight:f||0,minW:Math.min(l,g),minH:Math.min(c,v),maxW:g,maxH:v,autoResize:u,scrollW:0},e._lastLayoutRect={},r},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,l;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=in.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=in.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=in.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=in.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(l=u.repaintControls,l&&l.map&&!l.map[t._id]&&(l.push(t),l.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o=0,a=0,s,l;l=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,r=e._layoutRect,s=e._lastRepaintRect||{},i=e._borderBox,o=i.left+i.right,a=i.top+i.bottom,r.x!==s.x&&(t.left=l(r.x)+"px",s.x=r.x),r.y!==s.y&&(t.top=l(r.y)+"px",s.y=r.y),r.w!==s.w&&(t.width=l(r.w-o)+"px",s.w=r.w),r.h!==s.h&&(t.height=l(r.h-a)+"px",s.h=r.h),e._hasBody&&r.innerW!==s.innerW&&(n=e.getEl("body").style,n.width=l(r.innerW)+"px",s.innerW=r.innerW),e._hasBody&&r.innerH!==s.innerH&&(n=n||e.getEl("body").style,n.height=l(r.innerH)+"px",s.innerH=r.innerH),e._lastRepaintRect=s,e.fire("repaint",{},!1)},on:function(e,t){function n(e){var t,n;return"string"!=typeof e?e:function(i){return t||r.parentsAndSelf().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t.call(n,i)}}var r=this;return o(r).on(e,n(t)),r},off:function(e,t){return o(this).off(e,t),this},fire:function(e,t,n){var r=this;if(t=t||{},t.control||(t.control=r),t=o(r).fire(e,t),n!==!1&&r.parent)for(var i=r.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return o(this).has(e)},parents:function(e){var t=this,n,i=new r;for(n=t.parent();n;n=n.parent())i.add(n);return e&&(i=i.filter(e)),i},parentsAndSelf:function(e){return new r(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},findCommonAncestor:function(e,t){for(var n;e;){for(n=t;n&&e!=n;)n=n.parent();if(e==n)break;e=e.parent()}return e},hasClass:function(e,t){var n=this._classes[t||"control"];return e=this.classPrefix+e,n&&!!n.map[e]},addClass:function(e,t){var n=this,r,i;return e=this.classPrefix+e,r=n._classes[t||"control"],r||(r=[],r.map={},n._classes[t||"control"]=r),r.map[e]||(r.map[e]=e,r.push(e),n._rendered&&(i=n.getEl(t),i&&(i.className=r.join(" ")))),n},removeClass:function(e,t){var n=this,r,i,o;if(e=this.classPrefix+e,r=n._classes[t||"control"],r&&r.map[e])for(delete r.map[e],i=r.length;i--;)r[i]===e&&r.splice(i,1);return n._rendered&&(o=n.getEl(t),o&&(o.className=r.join(" "))),n},toggleClass:function(e,t,n){var r=this;return t?r.addClass(e,n):r.removeClass(e,n),r},classes:function(e){var t=this._classes[e||"control"];return t?t.join(" "):""},innerHtml:function(e){return i.innerHtml(this.getEl(),e),this},getEl:function(e,t){var n,r=e?this._id+"-"+e:this._id;return n=a[r]=(t===!0?null:a[r])||i.get(r)},visible:function(e){var t=this,n;return"undefined"!=typeof e?(t._visible!==e&&(t._rendered&&(t.getEl().style.display=e?"":"none"),t._visible=e,n=t.parent(),n&&(n._lastRect=null),t.fire(e?"show":"hide")),t):t._visible},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n._rendered&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},translate:function(e){return u.translate?u.translate(e):e},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),r,o;if(e.items){var s=e.items().toArray();for(o=s.length;o--;)s[o].remove()}n&&n.items&&(r=[],n.items().each(function(t){t!==e&&r.push(t)}),n.items().set(r),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&i.off(t);var l=e.getRoot().controlIdLookup;if(l&&delete l[e._id],delete a[e._id],t&&t.parentNode){var c=t.getElementsByTagName("*");for(o=c.length;o--;)delete a[c[o].id];t.parentNode.removeChild(t)}return e._rendered=!1,e},renderBefore:function(e){var t=this;return e.parentNode.insertBefore(i.createFragment(t.renderHtml()),e),t.postRender(),t},renderTo:function(e){var t=this;return e=e||t.getContainerElm(),e.appendChild(i.createFragment(t.renderHtml())),t.postRender(),t},postRender:function(){var e=this,t=e.settings,n,r,o,a,s;for(a in t)0===a.indexOf("on")&&e.on(a.substr(2),t[a]);if(e._eventsRoot){for(o=e.parent();!s&&o;o=o.parent())s=o._eventsRoot;if(s)for(a in s._nativeEvents)e._nativeEvents[a]=!0}e.bindPendingEvents(),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e._visible||i.css(e.getEl(),"display","none"),e.settings.border&&(r=e.borderBox(),i.css(e.getEl(),{"border-top-width":r.top,"border-right-width":r.right,"border-bottom-width":r.bottom,"border-left-width":r.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var c in e._aria)e.aria(c,e._aria[c]);e.fire("postrender",{},!1)},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},bindPendingEvents:function(){function e(e){var t=o.getParentCtrl(e.target);t&&t.fire(e.type,e)}function t(){var e=d._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),d._lastHoverCtrl=null)}function n(e){var t=o.getParentCtrl(e.target),n=d._lastHoverCtrl,r=0,i,a,s;if(t!==n){if(d._lastHoverCtrl=t,a=t.parents().toArray().reverse(),a.push(t),n){for(s=n.parents().toArray().reverse(),s.push(n),r=0;r=r;i--)n=s[i],n.fire("mouseleave",{target:n.getEl()})}for(i=r;ia;a++)d=u[a]._eventsRoot;for(d||(d=u[u.length-1]||o),o._eventsRoot=d,c=a,a=0;c>a;a++)u[a]._eventsRoot=d;var h=d._delegates;h||(h=d._delegates={});for(p in f){if(!f)return!1;"wheel"!==p||l?("mouseenter"===p||"mouseleave"===p?d._hasMouseEnter||(i.on(d.getEl(),"mouseleave",t),i.on(d.getEl(),"mouseover",n),d._hasMouseEnter=1):h[p]||(i.on(d.getEl(),p,e),h[p]=!0),f[p]=!1):s?i.on(o.getEl(),"mousewheel",r):i.on(o.getEl(),"DOMMouseScroll",r)}}},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){return this.repaint(),this}});return u}),r(j,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r(K,[],function(){return function(e){function t(e){return e=e||b,e&&e.getAttribute("role")}function n(e){for(var n,r=e||b;r=r.parentNode;)if(n=t(r))return n}function r(e){var t=b;return t?t.getAttribute("aria-"+e):void 0}function i(e){var t=e.tagName.toUpperCase();return"INPUT"==t||"TEXTAREA"==t}function o(e){return i(e)&&!e.hidden?!0:/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(t(e))?!0:!1}function a(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){o(e)&&n.push(e);for(var r=0;re?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function u(e,t){var n=-1,r=s();t=t||a(r.getEl());for(var i=0;i=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r,i;t.parent(e),t._rendered||(r=e.getEl("body"),i=a.createFragment(t.renderHtml()),r.hasChildNodes()&&n<=r.childNodes.length-1?r.insertBefore(i,r.childNodes[n]):r.appendChild(i),t.postRender())}),e._layout.applyClasses(e),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t=0&&t
          '+(e.settings.html||"")+t.renderHtml(e)+"
          "},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e._rendered=!0,e.settings.style&&a.css(e.getEl(),e.settings.style),e.settings.border&&(t=e.borderBox(),a.css(e.getEl(),{"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(Y,[q],function(e){function t(){var e=document,t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}return function(n,r){function i(){return a.getElementById(r.handle||n)}var o,a=document,s,l,c,u,d,f;r=r||{},l=function(n){var l=t(),p,h;n.preventDefault(),s=n.button,p=i(),d=n.screenX,f=n.screenY,h=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,o=a.createElement("div"),e.css(o,{position:"absolute",top:0,left:0,width:l.width,height:l.height,zIndex:2147483647,opacity:1e-4,background:"red",cursor:h}),a.body.appendChild(o),e.on(a,"mousemove",u),e.on(a,"mouseup",c),r.start(n)},u=function(e){return e.button!==s?c(e):(e.deltaX=e.screenX-d,e.deltaY=e.screenY-f,e.preventDefault(),void r.drag(e))},c=function(t){e.off(a,"mousemove",u),e.off(a,"mouseup",c),o.parentNode.removeChild(o),r.stop&&r.stop(t)},this.destroy=function(){e.off(i())},e.on(i(),"mousedown",l)}}),r(X,[q,Y],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,p,h,m,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),i.getEl("absend")&&e.css(i.getEl("absend"),y,i.layoutRect()[l]-1),!c)return void e.css(f,"display","none");e.css(f,"display","block"),d=i.getEl("body"),p=i.getEl("scroll"+t+"t"),h=d["client"+s]-2*o,h-=n&&r?f["client"+u]:0,m=d["scroll"+s],g=h/m,v={},v[y]=d["offset"+a]+o,v[b]=h,e.css(f,v),v={},v[y]=d["scroll"+a]*g,v[b]=h*g,e.css(p,v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;i.getEl().appendChild(e.createFragment('
          ')),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e.addClass(e.get(u),d+"active")},drag:function(e){var t,u,d,f,p=i.layoutRect();u=p.contentW>p.innerW,d=p.contentH>p.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e.removeClass(e.get(u),d+"active")}})}i.addClass("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e.on(i.getEl("body"),"scroll",n)),n())}}}),r(J,[G,X],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
          '+t.renderHtml(e)+"
          ":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
          '+(e._preBodyHtml||"")+n+"
          "}})}),r(Q,[q],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,p;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t._fixed&&(a-=f.x,s-=f.y),i=t.getEl(),p=e.getSize(i),l=p.width,c=p.height,p=e.getSize(n),u=p.width,d=p.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i._rendered?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(Z,[q],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(et,[J,Q,Z,q],function(e,t,n,r){function i(e){var t;for(t=s.length;t--;)s[t]===e&&s.splice(t,1);for(t=l.length;t--;)l[t]===e&&l.splice(t,1)}var o,a,s=[],l=[],c,u=e.extend({Mixins:[t,n],init:function(e){function t(){var e,t=u.zIndex||65535,n;if(l.length)for(e=0;en&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY

          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%0A!(<_lKk*O*KybdF;H5a3nmCpKqsQh% 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

        K582_2woUo>TNH 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 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/breadcrumb.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/breadcrumb.png new file mode 100755 index 0000000000000000000000000000000000000000..b2cf4f3bd51f42de7341d38f9842e34b447adcc1 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g!3HF2ETDSr z1<%~X^wgl##FWaylc_d9MLC`>jv*Ddl5+C%d6L?qYY? zkNkDmBi3;6%?g5mW7!Rq`Y!HGb789ZJ6T-G@yGywppk3on4 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_checked.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_checked.png new file mode 100755 index 0000000000000000000000000000000000000000..daaa1a866aeacb9721a8b8e1d06a83c5b1fca97c GIT binary patch literal 1424 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~q!3HGX7W?Z1DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*W8C$v-nz@-+xEh&T7#g}7I=NZ8Ih#2eySX?T zn;97!!t}c2Czs}?=9R$orXciM;?xUD47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!Go0o@ z^`_u1HaTU(=a7iqY-b{=D&mb$lF zM@Q$pQoV(>^U9DWfkXFi@t;ss%9UK#UH{d8E}z!aQ!RJif4}ct?!_c`ELGp;y`N1% z`4CV{&W`5>86g_!HW?k#YTMfCled1!H51)Id=eBs_ z4zURbz8z(an>%MggvNtYn<~y1=18Em6^oOR zU3mL#P}RlPUymI~5ZJlbR!2{F>zvh4vbk zb-lmupdi-$@a99sM;~v0nE&+lvu9%O@^e1OCH}8szBReE{yiclx#gL}WMX zBMWWc$TKx1zuPo__U_J}b)P#|t$MU^S!36^xmn47ZZvJO{xw6h`DTKAFGu+00!`y$jv$i_e@NH1{-XGW| o@%jHpX?B-sg+DyHDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*W8C$v-nz@;nxEh&T7#g}7I=NZ8Ih#2eySX?T zn;97!!t}c2Czs}?=9R$orXcj1;?xUD47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!Bb??z z^`_uIwGE7fKYUD@&a2kaI0W+QrG=L2B}`{Q-Ll7JR%>waI}$RR8I#tMLvyIy@J0u01mO zqFaDYu^c*@|$zw5oq7JbGeSqK?1WauyuRbD4SxzsuP#fN_{HX? zaAKI{_HAYU0xcg(tmaNFWNNgl->|94X`#ZSWhc^?si;Oy%Q@YYd%K`R;<&!eRG*~e zV&O$69v4;=7%W?|erKAY`te5Rlu58Zq(;Y5KchpWBomwg+;;LA3 z;K?tkvuVP!%8a!yuK!U{E4wg&W2R5rLFY+Tb-T8<{_bSCqa-F(T`ke;w&&?i7BSup zJNKV|xbgkDM@m||cb`~xInO&}-`%{$_un`3-d6m@d+_>4iK|(n%?A(M-K%isT4hlc zS7_+n#NW3$)jsszR~NpLWm>ZP?##o>KNr_n*v*Un7%yzV?t49O{q;)Mwq;kdK8n3{ z*f76gVY2?mre(92nR@=?Hs)dObxVH7(4_yVJ#m9#Pc6%PtGVX_u9pfo9)I%3F>Oiq ztjcAp#C7~Q?wsX*FZKT4anra>30~jYH0@a>7;dt=zR`_(x(HNYdb;|#taD0e0suFL B8m|BV literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_unchecked.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_unchecked.png new file mode 100755 index 0000000000000000000000000000000000000000..4ef08dde1e4aa9d0a43cceb925600af637d8a845 GIT binary patch literal 1216 zcmeAS@N?(olHy`uVBq!ia0vp^{2c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFjeGsTY(OatnYqyQCInmZhe+73JqDfIV%MiN!6JrUpi) zrY;7qM#fIq-2%~@g4-?5INhQTbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3bU9$WV zI|Bowk*AAeNX4z5$p`%o8}PI}=39GP?@n1Oa})bR#R?gfdkZ{7{T(XQcf7IbT<8~d z+sCW!jf$)%OVYGEDt-313x$Im^CH(rh`*{gTqDi!e$$T3SN6r2`x!zjjT3hy6bw`rCo#-&>4yLg^W+jYp+UVW34+WM~27yRvO|FGY; zNMFiXc#cc*Vd$Gh?#Wiq`k3S;7M<-mYbl#z{=CDCc*56+`GOFue l&Dv`BIJEa;Xl)I*0mB;U2ZejpS7w6B6i-(_mvv4FO#mr=rE>rP literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_unchecked_dark.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkbox_unchecked_dark.png new file mode 100755 index 0000000000000000000000000000000000000000..3f5e6c934a9088b27509668ebdec19c0d5f504b8 GIT binary patch literal 1199 zcmeAS@N?(olHy`uVBq!ia0vp^{2c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFhHZsTY(OatnYqyQCInmZhe+73JqDfIV%MiQ6s4IL(9V zO~LIJ6P$YWfsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;u&clPQ)ggcRP=Ol45_%) zGuhkkumexq+dWHKWScl%w6T6+icwf3wAbm|ng?t#EGx|)@Vu2gwd)asf=bI2S2?Y- z66aH*-10KAPi_+b_ov#%m}9Q(hUagVZ@9njMtsK$%Lh;XRaw;RlI}l0S%ou2b>rgR zTd#J-on3a>+vQ71;k?wFk_v30p^oxA+ZsD#%B`hh_vni4Y-3LpX}z*ddTQ(`tEvvW z_GIH_L0R4>O;x27N@q4kv$HMKn;Of=Jh@@&<(4Cn0f&lmrgVKdzFW9tL#)^ro#VM0 zZ|}FB)DGIPc3b9%K!-(lu^TN&%8ot}1hd!44>Ve`yc zazFRI|2p^f)@7Mt>p%Z=4-}dF^+*4=@VPPy|1#^ZJ_&DNWZ3?#qPOs;s3)ih@pScb JS?83{1OQ`Zqgns} literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkmark_bw.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkmark_bw.svg new file mode 100755 index 0000000..f737096 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/checkmark_bw.svg @@ -0,0 +1,15 @@ + + + + + + +]> + + + diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dark-combo-box-bg.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dark-combo-box-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..9a4e92d0bc8409bd1bb8431f802e5c65b18ae3b4 GIT binary patch literal 1023 zcmaJ=PiWIn91c#qGS+Pu!FhUQV@z0+rd``Lv~F3GZpCJluCNM%rpfCXw&Z2WtIc++ zAhcJ(i#vK6sEAhwP8^~aLGhx9hq1fvHt?V?UE6uEh9vL3AK&-={=QazWhpRpb%>&< zKz3Oykad`RgMJ_RCtp07B+EFKN_Z7ja9yz>C1|J&LDo>#VF4=I_SSotq^N;Oy;#B} zImfHWU=$C-xQ0d8L}uQ#6mdBf;r%a?^tgBco z$Ar9;xDaK~*kGJg&E;;l@ADU#|Z8F$<^sQgyQfy^Kq3C`sC+*{R0iVxT^Bo<; zr@%-5A=~=={L!W5nZYA=VSl7~^XK&U(Zesf{D%r)4j!KljV%qFtW8b6-dp(AkWL&h za{tqCuKM8N!v0w6_jvP7X2T1c zip~c`L7YB#VS=y+eHBDhx`$2i)dwHM8ww&`2I730Cv%-XSi>RbKZpPO{@Zs3n;Lgk zl-HCK1W_S22pPPu^y~#b{NK^>eIMScQK|(so9!qk+mPT@vkd}Kmpfnv%4%=-IE)d* z+*&Q$f?A~AoMP&f?D*|i zY}nk_m{t0^l&DH>-v(kXhY56uWZ>$D42N^$D=WAuh~v!3dc7NF2>p+qsO8o{5D|ak3L3i=*jW zE=T3+DAVqsnP@cXaRh^Y?BREM4J5mM!&z5g5TK*jnuRpe03M^si8K9Of^N;y z8qQ3caKmU~v1Y_A3B40OyMTfu{CU+0CgxTFnb zWZGHNJXGjnQ>Tecr_;1RvY7=NC0Wr7?_$$5LXtSqaFA>$P!!@M=Abl9)pn}-gmPxj~~TzQQ))g zi?*2kZjAT&d|Q1V2c{B7hRPaR)f?Lm%zN_`eiUwjN4 zGVwmhmmVwWt{mIEyyi&t!Np@S-}>6Y^NCNTqd&$&lS{KxJBNs6R|hsEKKVxPilJ4v zURIA>FS-00So6;u?VntI!FT+`$ioxVzgK>`bw&1Ce`}t{( zJaZG%Q-e|yQz{EjrrH1%)p@!&hE&{oGi@VRg8`4r?56rhLE;zp7k}ygBO`9VRN(Qn zuIoo%m9QTd++lM0Y>yL%GM` z5SXZIcAfY}Sg$dT(cAe}jncw-ckW$Cd3UzGa{b47RiAG9{|;Nuz|5c>tsb0z^V4yl POBg&|{an^LB{Ts5BF|Sf literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dark-sprites2x.png b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/img/dark-sprites2x.png new file mode 100755 index 0000000000000000000000000000000000000000..f9a875bca7dac286350844c8fb20240779b864fc GIT binary patch literal 5066 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�)nj9bT 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 z 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

      2. +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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..e1662862ad90f40280557d27588b9a580c62cf6e GIT binary patch literal 52456 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 literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..ddf5d1161fe34430599417adaff8b81e0d389fee GIT binary patch literal 23974 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 az1cE(_pEhtM`Eix*%hwY$Pr;>Pu6HLI=^QC literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg new file mode 100755 index 0000000..317e536 --- /dev/null +++ b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..6d97e7b25735500915d68a9f6b59091f2e8ea85e GIT binary patch literal 51960 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 BzAOL$ literal 0 HcmV?d00001 diff --git a/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff b/plugins/cordova-plugin-test-framework/www/assets/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..d8443157822bdeb5eaf31bdb9de6e5b569044f7e GIT binary patch literal 27048 zcmY&;V{|4>)a{drCpIUV*tTs>Z2O6Adt%$RZQHh;OzfNYyZ8HXtJm)8v)4YSx~f;z zsyeG(# zaL2b)IVCzq0030}n^XISo+VV~x}mkc?KfBQtqJ|cUiOS2xuLTo0RR9_|E&@K4+yC! z^(MBa*591#x2Epv z^xY)vw}$B(tUm(w(apZeZ;t=lCin(1d?a{{nYH70d^NrA_}~2i&B@|YOt7*s{MKot ze78IFjk$z-dqrz~*Y9?{^iTFZsV3 z1A0AMLp^)DJ81o#aS7^C!x#fSkZ`8=uW3M>m>8x@H~I z4G$uK7}C8iL`Xz*OcY)&Op(hOB>P8_u7`wD_`TH8qH#nSkDmgM{|{d8IDK<_V9e;% zgm?X2`syG^T_CJNCa_x0n_Ep5S{(ZLwg>Gv$9oEhDr4fB|3W~dR$&5D7UyOhzd1lL zcW@(ID;ghZ;&h4j>(pZ8k4JI}3LEa^l?owUxj|#o1-tzcn^vVlkI(Th_ok%iwLFqw z(&IqGu(+4929mWJjLZ~JI9dZj)!L-0TRw|}OU5T37NNwBW@@|Lh;$&wXtjFX9N&RL zpU;m(2)w)h855JwLDb%!v7SDQ3Hu~JKYjE-6VCCNp##W**430$^_0{UHB?N@6~BLx zu<|=6dk14VJw0#fVNtvIG1FZ^r`10|_l;t3@3>Sf2?~39U;$P*u)F__wVs}duO1eJ zC}@a-CjvT z9sQ`hIndy3>94PV$zAX>%^plJ<;fg^9D-Z|P-Saq)k&y7lh0r0U&CJrA9T;xcTZp2 zstAAi*zfhe0=y8M`BrZA`U4IT((qHZ`3i0l9w-)qgh54FAzIKyNeOxbs{kiX=qjwv z@UpZ(JRM$d5CKAcBn1XLXbB2)EOibya1jz?G-VbiI2ju2U)nrgphCY5QIwb*V5F!l zaWuI+AjQZ`F;v-H5aj4=@OAmVe0y?sVrFV?LPttYQdU}?1BHW|9;dEGnT}|58jM!w z4yjbDHR_!|+Td{5Y&PqxhaY*`pRNqaB_$?1G;3=J-Xzq~g@&nv4IqN=?Q72MEihFs zETpGEYaJ}FNmv?X`5d3m8a11%w^v4OZ=m}3ArZ29OiMc4LUId>Tbs*$`Ubj6=P`>W zQn}K1Pih5oiYN&n08Wl!4&QVB3Y-ft3Ih8*H_HIkfO7aT5*!)Nf#gfMX4{ zJ~d{@BNrTcU@^+Th%4w2%ACzUHo^`BpWjayZmk+CC$~U69fA-;+*6R35Shs`G>@5! ztKMNMl}TzWw#?SY%yNb7(3e$z=ZTN%FM51X$_Y4xj?vhXNM{kGhS57nvzoYNsQ7P zH0r3V)Hw0H)~j7tf1(#aIq3(v(y!tMiwBQDiaOU!JVp(N^k`5%0EHBf`;+5vWAw9t z|3w^ms6#@MYd^RVVkmaGCx=z8{);MCY4crYP%HutZ*#jsF%% z5CF*67XZO^t+Nwa@6X}`pZB##y-g~cC271hqdJryY$_o%;RUg;m0;)y=^H5*kwIkW z$eth)qDXmY3o3<(rwt=fp0a$YNcoaY_ug{Tl7VtsxY?pjH|@bK-|-e(yabe4clY+! za@qv?QKrXL>#^t5YbgI26w=XIH4za*oPAK7cz26}>W$kUhLf)iI@+H%3FJgwmBY>Z zqC(G}-Ry%;hKk~pKP7TG33X`-5K3SkRK32+IXBb6y5ewKY=b`~_~5!0WsBllVq@w8 zOMW|RV~FnJKw=&MpVz!6Gz@Fxb7aRa5Z2E?*m z{WYCI_tWP*VrwVa=36609Yvn5k7#Fn6-U2!KZ__Lk#|mXEWv2Lk_0!*65iA6k6JZp z(pdCpJ|?x3Xo^4EYeeF!96_JtF|$OR4tF=!JRR2bnin^$H5-acjN&$o$%9cUn#@1% z55*2Dl)?a}Qaz=Z=IVU|I)hQ9@0R&fTBPY2;Rw7p{}4KO-+Ru35jw0Cur(7AY2wT4 z{=#d0RmQuHQ;R`vJzRo$5}9&n22$s@SBMyO!#(3vEg8V4?1W9P8r-UHK3mf`SHpew zjCxC5G(-CAZ$GbY_jHdLef{iWN_o$^ICwhP*={%>{bEGe#(?AiM^fKOh*4eTXmvZx z{3Jsd>w_zeZ0)~6L0OGvoAB-fzLy3^i{k#gVvk7-t0 ztfI$@&q{=N*Mtrgn)hGNXM&i~Fa-(Z0oib=Bjl&#tgt!6ZSQt_zI~|@gReB2pR~vh z!!Tj1k;ZSAWFx64tuw`eiZtw1g3(;;){(;JcNP}m(KFgs)H7cMVu{Da`!Y;%uUa!@ z<7;~_d|Euk`F2u zP41+@p)eo`~$4*snvuTWFL zY9xd^x;jx>6eOXuI_R@2O#CIZ5WV3demL;6CwHpK!(guT=*gIU;3Ju84cJ-jJf9$_ zE0F%G^VZTrlLN=s-Ci~=1_s)PYXc9;KDZAvf7L%8dHyY=s%r4HS#R|n4lh-0YjBtX zjkEpsPbLV&1Bf>eY(XqDPR|T#Hk0wO00}k zMtYvhS628OIkXqO1?=0R20gAe8t(2-Gt95O5^n`&Xk?c7 zFw356MiB}Q3s3T#5PrmHf=W|tM3_eJU^g$aZvx|O#oDKdE_z;zW; zRKpfc9z3;o64S!;hyltkfqfY0{vbx0{96l@f08 z-}A2y>h=X+*Y72FCJ2?lV!(mBIscUy~rUcT_zN#Bby9EQVU{#-i0`jR5iG9}_6 zzQ-u)8KvrJ+!MSF*<*pmB~TzT(W~T@XmKIp5kmOI9qOrpfJq9^j4fdd2{w;3nL;bd z6rSp(jhs?p8WR|R^uFcmF1%962gWQzAP!|A66>JiNQqj4+;TMU@V4=VpsN*aqD~fX zuTGvEri8?^O~{{{bsdN<2(G{sj*1~*$jr~TQjT6C2K)6o)n_NyAH=k0`3g0^{Xh)# zMv-ff$ z**zI%*FU)4@#*+@;Uzn}=(fW*DiIY$vsGa%BtfDC=(8Z_@qLv%f^kMb>1JKfYU@`2^mHYO^Dc~^( zzkl>$j_9@^FQAX?fHv$z2**p0+S$!b-Gt)9;~pPl*j7Ii-TaP@B(a08&Ls4ogaE2( zup|^>?vw>ncO(e-mz!YSm?w=-_@XE<67K|U!fCLISr7(Sa98m|%2#nZ4V7VL_>F2Wf` zM?wLz(o3Wl2_heiJRzEBgN7vK`>MJDelvmOYs#w@d?7K6CfLH5J+IXloidv))rqIg z-feK01RBAHrv1>PxYnXK_9`PIw(WU3v7L6M)a|4GeHQq%jwn+3dztKUlX<($eC@iI zI{al=N8$4|DfaTp*4q<}DG`F`5lF4N@z9Yf(R-R(xi*XFvK& zgomF@WAaGdaYLu};2k4GIrT4>wA5?&K4;$TGt^A77?9w0gE)E;X%Lhf0)k7J7QILB zz!I4w`~4FWbmFglh!tOvD)F@o{HjwVxwEPphjlIJdAyhsG^Xz%mh1*314aocOPzYS z5{{K1_S0+@w$ugz2N6A=DnJ6+_g2c~O1;aef6f~PvWgt(Z%I~#M3m~L!)A^`GcN;L z&H0BWt8TZ2SBYaw%`MBrVqLg;^n|Xft%%Rg8>-rJIsw;9L8O+{o`9BmZmIGWo5?x{$)^;0}fm3eRrs062D!$qfXOh>>LYYM|7K4pcc|D#3@2g!AGE zYqFKe%Hn`RAZCQU+D}YDE@S}y*x;E~n$~dwFB9vP)$_;n5}J-GN;-RyoZrfEE|Ofg z)78!j4V#X(-C84XN_iZ8dW(Ew^JNib+>opJsbmVL%W=E0pRD5{9b@_-&E?u>?jsu5 z^4W%S6DbYy!U^(b8j?6fqt%8Qo_-WcFhjhv{$qL&yXtV)F}S|OBfQ1+tS#8A=vHd^ zx0utu&U)8BKA*e6Z65*C+4?_5u9XV&>E3g26+M*5PehObJ#A{j47r4*2CrO90SN?u zg91WayD_+@9Vt8clQpp@V;pY9e*`32=$V(|nITym=qN_8saXjQY3#C_5EvQ)RI>@) z%gbA|gp9uT)I)!N4Wc6U?^7nBCbO5U$5TDCyqLdJ-zMw+ayR`9wM_qfTQuD6_BwvY zVmnff#8I_og2mI;u5 zZlXF=W-|$F-0!V2Jo&th)Sr>bv2L|jiYYsuO5vR0Y!!I%>M+?)bPcz38a3&@aJ$sUM@^jTDW=r2O_qpnsFaqD01PPsK$CXtY3GU}^ zYW@xAwxf4pOB5})YfP6PdHFm`IhBXvJ3^I2vwXC>iZ%`KO|dB!R%jsh6f@`9gI7%rY>-65Ft1@0a+c=JYKFOK|PI86^Gxn`j$c*J}<+5ow9 zR32m|WLhM-4ttbcCmOe%i6PWa!#TEpArX+F8}e<;K(>vq$7*jrqp<_ZdCjJOLtz1= z(XHO1U*&fFPSpd6!yz_Wu9rhpq!${zE((qZ2_k%+<@$nt6RO7jK(Aj|!lJPr;#$!_ zJ-HtK4rb zwxdraVBPuHHLmC8qc;qGMoWnz#s*92Q@|ZwY5RwqCY$c_WYqjqXE*RGU~xLbUH;?s z5+^83$U;o6;-b|}g2d}WhVyRY@=WF|OhgQrxn}rY0%C~YeRo#u>{UOC+PLnGgaSSWwlYGw^ZM7GxAJ@F`w0s0Tjb(yP+X$BlV&Yw}!CI$dyx%9HhA6 z(WghUfZPa785>1SRrtYt_Q$bDSiwS>*m0m|7>HCdI z3nPlcBmKc__o?AD(-(3&Aikkb5|-H@{Bc|jRnPLqlBV}1POHwp zhgG7Td9>8xyBA{#lzH~T`Vn(9+@Cls?%@CTLCm;V$ z2`*xKlv{L_jzW}v*S<<>31rYW?yj&v-_M#R4CEOmi0U@CCGx5m@)UBpdgEp1mrwiG zy^VR$>!VF}!ICB$-rRE8^wf5`;m?arM@@si*l2H;oq+}D3-0L-TTwR6ZK&5AzOXl2 zxVX;5h=xV@KuD}zcs(Q5Gy2hC06A_iJ45?z&Z#zbxGlrM4qG1*Xs*3Eqq1yJYJJwb z*+-dbh_#yATl|-u{g)vdko|_Q*}KN3?Pf>EBGz;Yv(X{-byN4V$h+Bmm}(wg5oI1{ zWE;}2n{=kiiy42!YO&?K!5%V!-bRSkQU?)nv_p>UhivB%EfI%A2^h&1*3WCm<|2g5 z65hhk;oujW5A{rTeD>ev)1_hyWPg2LSiGWd!K!Gof-N;i#V3~;A}XafdJ1i1PFhD! zk!n^Hg>$lH;&c$+(I?ZUD>>FSMvwU32J@QY?;Fy{BIlMrRd{R_wY?PEuefZrnat3g zHyX|J8ix#fCs<=1Afv0p*nU)N#}Y;QJo< zcH}Hzt``Oe$jMmr{DPGzsgrj!;ahZn<9oC|ndhds{cNw^zOL!Jwx!}$!~hdf2nR5JTI2@2*;MN$9M8r<%M5p2#&RcQ^%JIMITa_%~})T zju!mW#EFI?;+li0bQ*{`B)&ri+x?V{Qa7Dx`KG43{#Y9G@By8hdnteB?uel!N1WU6 zF`ow!4z(T3_qxD##TPOb^tGO)M>fppr6{@we>C6Yjk((G!l(+tikpa~5P5=$oOTr2 z-dyLvlo1~EW16=O+6TmVhe|JT6o)^um_oV87YZl z=)WhPXM0m?X~EvgfXx^%#Qb9u;uVCY#Nkxz%;gMp*cZhkDAoFl^Q)=mNUD*-Dfn-H z<9$JhbFlCwY%M0iv6z<89MzdXVB}@wJ z>OV!YgZ{liutgOK)WqADAgT4@H2$*`xtYxEsO_L6@ielg#}P2Cz4UDi5KHU7niSvZ zRPQC`X(wtHzHYOx-Z;aPKT z9^Zn`S(U?PPP@dORLS9ppS=)s=rM#+LJ`oZ2uz{}nj{`(QKIYuBv$^MU_Tm6_}5bM%~Q9p2&nCnrDn zFFkO|^Oo#tqZK!I{@cCY9mlnulXZ4fCh-hebWO$x@nkm8EbIn)lvz|Duid`Bv+^TE z0>}iGD9wWO`C|TA^VwI)wAbBUR*26>UzV6R4YvT~EZQ0CL(6MkTNvv+Vew*h>BoJ@ zANj?CUjPyr>H(Qxv*PeofUOa-36%hhWs@^hxO%=upFfrgon+lQWg(7y3=n%pOS2)3 zZvM_CW9ub**!glLc&=h<^>gjd;%{6ti!O7#8G0EnX-cMVsv(e3X({WdKy>s8#6KIzLRii;rx0QL_ z3;1*#pL>zp5{|qJyoIds?TYNPfcow|QbkRcKZaE3Y8EX_ts04n{uMU(^Mnf$m|G2^ z1_ui2f$-3s6R*Nb)oZG&A>_lJnt|)9h&gAkxBZ3x^Hu2m{0gJl^kuaU({rc%)cI%W z@volcn<%^6#~2#Z4y@l-nFC<^w-I63lkn++pQC&11c9V!b?60W;lU5eDc??slpytdpTSinc870+a-e5~`VBd=Gi4f9*zt}==V~qHZ+?b$1AajuCv?g7M$HB{9v$w@TeYsFIQI@$hGF7m8ldx*A8t&|Mh$O zzw4id(#^rRtSJ@Fx&$T0gQo;cUAsXpb@NJxs3X3M9`-9|4)p%nqkqbqJ_&-zD0oA6 zHnAcN$nUGqsd+Ao^e(&Do)RCJ)!Wxqyz}dF{Qu~1MsN_MJg+$Vtga8m) z94KNy7gCfCz)ob&fEH_qmYD!BbJc3#+N?vp=tyV8A4Gq@j z>%W$>?P$?>(eGJd;P_HgBxAmt}u@EVA=On)jd z-QLrVA7EQPC9(VTBu2PYTIy*CtE?=Mn}8^MpO;N{9N5krd0D8UX9zuRc)m!@K(92EAH`Uz^8{)mfp7bzEYb)3lusSsLVWNRLQTX)OdWn^&0Y@YZ!)71(^ zcu4S$V+sm*YJggFx-o^$jk`Qtv_lTc+Hzdw$l&qEIRyN9d;@68on-eo?~x_ujFBO6 z{~MOD*uW|;nIWZ|8e|A-v?){pB+pzLS?S=6cZT3sAw$0Rm@D~Y{3V~7-F9y0%0$6R zSAM>z!4|Vfd)ubCrHq`$>dF+uw6N@uDIf82HNcrupM$e*xG8M~xc4)(P5`^cZO9=K z$LnK&H*Ba)W;Ad`lALDt5?S^vx_{fHzgtfJm)%KR3lE|AK%Vh0G)l()+43K<`YA~b zykzIm<<~^A>R``a*;76AeKf>Z!lMs4~v{(!$QBZuo+K+YFuNb-8Ea&61|6XPiDvxZ-6ImHlkPX1i1aPTWZU5ceJ1XqMji}wWYsKA ze?fyzR?+FVB$&v#agaZ6QwxU5{{;at)fw206r+|$6t-y)hm>?+V4mb3S5u1}A(&A! zr=5*;)ph;yg}HUFxBqt?HY=Q?d;8|IarykIRP(V~dHQod$>j>O71*`*JVAGollVTN zSEUDfp=v^TwcFsYFbJ-OI1i4w=uAK#5rj&AwJZ7ukBl@K{fXX!1@olGKGe6DiSM1%DZKdbGPZ;|e#8|ZG>AG-Jy<$3j~Ek=5UO`ibaM(u_? z;{gABM%tRPXpj_F$oatQ=*Cz>r zpn-HxagpNsJA9k=7A!a;N@4C15uSGNm`AcOMx0n{qhQw(&kD2KB85WBDK}=iuARbrP>BteeqbK?f#8Iifw-48jq_bu4^50*oiP(7lhYCf;ClQ z52zK_UqJ&sCE91|WLVG}B1S|;^rmhu8dgPpWvVXBmzSnBK}3|)lw%nfE6sP79zd3FbqBho4;4vFg8VAr5j*{WwCXH*8qvc+i6R~Fu!B6m9Ciemefs-G5DToSf4C{1vliO+<*OBn#$$A zkg>M&Xs3b& zRKcT%HXX!z`EG)ei6>T~Qp3Y}ff3PDEdqzLhW zjctQbzmEp4clv(UJ74tSoXcVX!TWZ@4P)p8U#WOzcxR1urX(L~{|6o%Qo$64LI!7* zq8n!Upk)o$7&0)+Yg|ys_td#Kx^TU6gN;cN&9gilyKvS#5f}Lp zyGpeCpnu7WHm^3=&O83lrtMZ6Dnvsh<<%y@BtG@`#_soo{ z(mz4R??j?`@KE_OIzYR}$GyPaoj!o8mY0-UxbzQ<)C1O%Ai-9$!Zymp5CE#cY6?l< z#h%b1%)eJ>F3of0zG~j(^MsQ>#K(NP3(1Gi0UUbBj>6{KcfZ}xjwT_M^|>=nSWK_d zUS}2dASh)5JGTRMmdPY+N;?pcqAPUr~AW_oN^U=S6rZ&O2@3SK^ zfiXUt9Gp<9>e-RvkU6DpkW~e8vwIEo%BbqJp6*1RLbCCCkIxx5Z?##S(%c`}0O%uE zZid*Z_dzQ?c5Zedy+1GXg9jIs+Zc!1aU)}DU=tAJ1tl>Pa^NE5H41? zL81K%%CAR*I1BZr$2?x=EQjMy+$*7Gi%j=dXvPh8rT&E^SAi|`Rw2Ag zG{U66PY`hYQeU)osj3y|_6ncz@ImT6*u^U}&ySF7{^Q&(4r!Dda429&I?w7s>2WAM z${fMV{(^@%7(6`lLo1mRx-OWx6;*YM59k^_$J-gar9qlync6sVSLCpj*90k12M_lk z44x{thlK9K);QD&>!d#`mM}Qgu;xg><=9AxO=V&IVJFdA^=nq|AoA5g#HZ@7Uq*|pQQpM* zy+GAbzmBI$%Q6+6+8L87Tkrd@dMtLx<5)I8`w>Y|2vUboQBsJIqt3A^7S1PdM;R{n zEaZw?6$|TVRc4NUERd#Ws@A zy@8Qnj4W*>7E%?L4kJz|B)ea^u@Jw(qsDL;dMwn_S?qW5gXCbLwP~Hsc z^aF}V6=Mvy-`E}i&lksQpX*No-L`k{jJ@F{{-X?puWUPOZjQv&cwru1tqhTSx%Tw! zJPeWhhsE)Jtxj?to7=wIULV8}`-e$f2RjTR*I%-%cwFx9?R0Pd*s~C}ra6mNWVTO@ z?`rcwi{2f`ymtU_6zzXcdpqMgZ=UcyUr-~iQ!{DM>o>KR42-+2pK)+Z-qm?sQ%Aia zZ=PmB?mpczKH{}ZrDTCK+UOzMmxR6So-%J#6OZc_dpFm&B7lrtY{ro)HjN8f9~Jsx zi*Z;-v+~>k;?7yvYj|?`ri`tg!9@sw`wVsKYZFG}W8LCUlqbnz@An9k-nGYVmf`|Drt0Zonfz;& zE}i#h(MGZ>ZTOK%m>QQ~`(X{`u6cx5a*;1yB_|LD$zm;F`(aqjA@F~;zyBz~NVQ6Q zOx-TI?mbV3NK7#hi2%p>I4QJ*gj6-|E;#!$Y*`L5g>#1;4KiuMcs|Tdv`Yq6pnR+5 zrZL|4uhR?!8VaV_QP_YqUt3-sH&(T_w-!qrR2SF&-YKn8VHng$>AKS6Dwi-|yzLlR zZWnRBH6 zl#w(zWyZLATd$X3Jg;Kr4Wf^Wqr~>d3iC$y>uV>2UK;o11?{^F9~e{!_0#@BR}1%F zl565j6gASO&Qc0rqaFUaMvH1(Sin)JSXUW#&_7?XhiwvbL$i9N7zrFIlU!2!an_aO z?gm@X`7hSZN=N4m!iU+&J>V@kii#@usR_1iFI*sLtDi~**wMSm-@PVEhJgM25*lK& zD(@pBbM8ABu|fKjCnCgG)oSwmn*J2Y$>cg>q;{>JI3o&*y_|8c;mIW`<#w2`gbg^m zyunLM8EGDMEu@dVH7AK3SG*mQ7akqvtQ7BCo+8_%SVfXau;n!tK?%x`;FxWxLgXm8 z0||jTme2jGZk`vYCf)(|97jiiPPMe^KQ$@%`OGn3>0*&OtTDQYxf8uTj;raaAUZ5s zC2oHdK2j%RsRcJ*%+|7GrQz)Q%))|?pgqu1=gMz6$?|{$baNdz28EO<>S-kmn2ua? zU>XDEq3a_1OR6)IR>zeG6}*HVza#oI)$_e?aNJ)^|9R_wO`AgRXIeS?^U!|KXciv8 zwI7rIl%UIF)HBmj9$e9R8v8Fy=xtv~f8G+j(;ba@lDikr^{b>U;1jwgIMpad6d6OH z1%rc}vC?Gs_wY`w;ZK5a=yJd{k0_IJ9Lj2gY}`0@}54zS=rG=w??>#sBcNjwfb z1Jzhwf^=HNEcsBD>y*mqO^viEjGYm9qlIqr(wwRmkuu0}O?tJOZEuxiaHFYi$H%c$ zG8{gi+gS#ShmFs}yd1i8Hf@Dl2)4uaYo+<=Uy!3FuJ0+PdBO1_>Wh6k5{*BFPI{a2 zB#3z1{D7ngB_4Mk`QzpU7KsB>X@a2EkDMQb1e8S`Nz#faS!}{y9mWDkxb))?LO|9b zvko6-0#i0LXB(sW<<`auGlFvHPgNACOm~6a1Hn=%IDZa|I5JqC(g}khFMO|KFqk{C z6AIpIoUO4_MGNRme+wty7vXhZD_e?>i>b+~n3&FXN3Pvgr-M^pAG@s)O92YJ@wrfgjgkQs#;wKZ6!l|D~RK2l0; zUm<4M8Zy)Dh(Qm&x+Yi=+W&`F@L5z5KYHGL44BE%w9wJCnl*g#@OU`D;e$XQxHov; zt_5YLa&5b-6j2U-XYc7#+gjCDu%?SPm_=h%b%Rq|TQ!h!)h@CWg;`r=K3+j*y1D7N z9*We=vdPogYW}*EDHBh+?Ye&;A=6;;(E*2ZTxqk#YP-{P^l--t^gUjOgjy9Qj0qb@+kNNpDL4b^(&%lwMLpgF>=FJ)+^Pdgl>lO zA!vFL;}r3^_VnZI{LJUPn8ZwZeW|F(GO`O%2X6e@~gcCO% zcS^%w021!*F^%VbE1>I=_mt^|KQN$Ql|ASPRWvf{JSM$23Z{pfj}W7H z=;UuS+aq|gHwYUWBrM6 z`A0#fKOu*=)p;GaDx<4AZA`MoXMMw0V(cdKpQg*RyKZ{|873njhT7oHlo?LO(yJ+O zR2D1OFiNVau~+K3yNlcDZf-m_4flvXXbr%lFbV58{5yN{s?dldh9N$rQLuX&S=no8 z6k`iiAZ8lEy{!dA(kO$Aw-L%Ov~{=J%d)B}HUH?UDytVyhr!{Xm*Woc`HJBcXSwZG z;8}8zDDuA=3^KnWLi5ENso1BC7*3;j<-t#Y-`h2ihI`Z$4`NnT8Ebn0Y1x6r$iXsE zw(Yof2G%^BU*wV>H}3%KQq+KV-nM71`^R6L)z=roERQg z>vR}_7ACdq56;)we4LC%<4n7^Jl~eZDp0Py z_V?qTWHVf^N6%F{y{|Xq9+|5ynJ&j}@6uJKt1K>9fOknB*YhyUl0l&J#rX2d4>S+& zx$5=s(5q+o*Opct*U@JlTsYXyWp4Z9?H#FaIWVRiILk-qDT$XCXU59~ANQXg!s`{v*B(7T6fB<&p~k?j#QP) zGCXF7!CB|}0*yKEp3km#z}At9nC30$^O^A=2TJtuRpRvs_1P$Z@L?^Z z0yUmktuL+s;xM=1An-UU{Tc~kjBV=p13j5xL*2{U!~E89HbBdf43+na3mssU60CtG z`^w|resuQ6(`kjS;wGI>Y1Y@_5~!;5r3$;T#Ac0nOG8PCU@{8dow?NeJk!`xQc~qQ zGV}w$OHW)||0{Bs)!LnFq1g9@xk1=P@S-|a*Z(BVmujxpW4(x0vg8Mrg&7 z=r3B@!=#=a@mvojN<~Kclryj`g?2Xzo!z~E>KL1#9r1HjW`zPEOFxe*OBHP6^lJ31 zVu>g@No2P2_9TY?;W72BiGvONMfbU%9)kaA!uGHzm-dIx^Pds0edeqG(;BJfcEjkH z`n;`IymQN!r@`(Q)y^Epgz+c?k*Gte%8h@LVmhu~_|PT%`wDFu(vN{(E6zM4euR|T z322b@!5SA^<~Cxp`S~UL^{h4ADWYK?e)_baH5<(NS2f2=$MO zA$VX(4$PvCa}5#BB8{WfrDzQFS&c#J(?E0{{i7OJW}p>i)Ldbig@AC;aF7be6jl6i zQd(_TXHtUgl5o3NQVm7ohIQFCJO5&-EUL9y&E_@;7xP2D^Otse;gHLVa^7c0tglBs91f>?(bC*u?3Z_Hx?OF zJ*OgB#j&>nBQfa+FT+6;_3w97*k#-#cPmtK%$QdwC%Uf7(h_(P!J#I)$kXK@NeUv&*%-y>qwRvhJNDiEU=6= z3Sl>iq?uTy7vbIL#BM9CaWz}r`bzM?c8KCmWewhd%}iSMlP3eM(?FRtO<2_idZKe; z6FsqKt@K+9dPnNPxuN z>}?6ve<7FO4F2WfW>o?5Kc^mxbg4*#7?j}`^zWPDQ{+tQNt^@0qtrgQop8Op?=GkD zv6(zqQf6JEkxY5rFIMuS-(Q!bC$t(Zjxx@xA>ES#I;*AD-YlBcWI7u{`KZOHu9dz7 zWS$4gy&thJQuiWJn$>bj<*vIJQxCxz_-PBm$Ovb=xjP*pn0 zI!bOppOxeuQ2E)P#)8oOFMN<$rr9L5vEb%itStYDkjiQ zU=wWCK|$o<=H$bTGbsl^HI3uL(m#lf^HXX1O&3l#8Q~d&s564*a>!)E1f?}%T4mzR zYMWaCit(?|)EDM45>Q|2XQjt48-<&c#jvIw{7wX1B&voU?|{gh^b@N2$B#&NBf|~)0gnJLBzf+fjJ}R1>VStVaQ-WM zH>lZ^2*+39y(?o`S9TRwi! zB*H_rzQp!surL!x4Q`#6ubZ$lge7VyvdWD41BW>+vugZlDSR=v>dg`kvh?OfM5d|l zE!)Q%De5!A+_7msWfd*Tj~TnN0uNl?CnjgzSf5 zwojM75Vlx+1206wk?+)px~Yakd_&$S%b@&e6Bv_c5hFyKwnCA^da~Z0(&9xa?{fo` zxV>A6nS(U7A#ppgTEXJ5`<^kIiI#q8E46K6(;vKJet8VTSa^^H0o9Lbi1obM!{x}) zsZ*eir6yyM*`JCfwwXjPB#g)EE!4_T6|HWLYId8emqzn{h4as~kk7lM0y`sZQ@FPU z>_1}Yag{1KE5tie5Jr!bE-HWa&dZCzv-^VDS?Ga8T1kuw)8pF@f_EnSp`XRNI>?1X zoBy@8zr2L(?!Q`AR#{wDRbH}|p?xoWC3(2fJ(CZ5Id(cOZ!C;ZYH*oz)pIO#y*W8_ z%^B?NiJ#?OrWGbihY?^!@Z@@?5)%u~K^Be$n8+g-ibf=0)#T~16N}s!;0d81PT>^N zBj|UR9u2o7*n7>lI)0p;E^pMhzeb)*#cTb1z}v+6l(H+e+v^KLsn)64@oXkeZn{6& zY!_2EE?nA1Py_eiRpU#Gk_ilRvTAc?w;mx20e`EuF8#D*mv~gFLzP*yp|>(ckGq`d z_?3RxxiY3mvvTuW@g^EBPr_B)v*yy~K2U>7csg4}6+eelL;tLqVlhpoxKs|xTYuI1 z%(TNrqtcM)ZqNuqqEULBBUZSo$(-c$*L-Lavl!|f$_pS@)84*6s09ZE8W*{Idip+& z1%pS)!B;t1D*3c*I%lJseD_L}p|z#|^J=+YhN($+pL4;*c9Y{_lUCyrAK~vsEtGcb zOIGYoiq%veOry8dE%S*c)rDw(v{N^ikKhxRCEo7|O2;$*V!f_8&fWD_|5eT`1J0E4 zsr$(HZecl7&K~B%`CAIL0y-tfoUCj9khkHNy%%UlSGq}zN!-GDRF2zGXl9{bBWpE; zED=A<*82^j2XIa$DA0~)t04II@egj&X7Mt3oh}Ykvdn_7gW82coo#yv!Mtb zc0N--TR&xwBI>5T{eJ??C^OeSMm>x=ECi*DAQ7>W6q6j396DZo4y5b*>Ad@1AiLq$ z$ba+u+#odgeY+1)axQTWw?q3v;ldgCzKI(4>&|Ca#LevcY&e666`o+s!-~O1Dj4)U z%PngAj&YZOw%?|6e51AR7B76lzIzX=@eW|E7_ah1m&MPfLrOXf{IKAig>}od=E9ZJAHzl=6 z-@A~?)Jx=T4cNceSPUqWEaKEEcB|H1=drdX1e-+%9+p3r5V-O4Mp>!2l{Hh?S;=bL z&T6RbesGYiOv78z6}9trWMi^PM?jG@O5Cfi)@FZ{Qpv4N|3G=H+1)+@MBR3d4*{WB z>Ziiml_sG+ISfQttJdK>5Vg69q~?+A0Bq+cJ#Z3ir;dKi!)L~nJV12a^NLJthOQif zh4f4|d9`HvF*DhN+w1nO|CRz9);@&z`=JPq)x}_RIhJH*flP)sTQP+hT_F`g@vfi#gEi@4fWo0FLj&u`g@R@yPzM(9rEMT zk{9fbJxA~&Gj*18Q!2+^ph9e#lg8W0|MYE zMXnhW9011${iJBEzrXkL+$idBf^-^B_As7=NKe$07jva7BIm`FBGB$xd~|sSUMM*d ztK`Oh(QfdxTRRtUczHn%ZhVGU{K-7%(q>NhcOD@>Mab>O+cNds~+VCRVNY+9XFY+ zOy%Y}v2+eAp#st~)M^)fVf+h&OEFpaJf33YB`+7kXRK7nPZ7PleT=&$leTU`HokYy zrnS48kdY^MtXmrqOp|YWUpnn*Fn1dRqMgIk0f)>Q-X|&L0#Oa-h(LewB=N)PBlPkKSC9^A9 z0v-600KRzqj3jLS?TS5`eoQ0lRSmgyMVO`oIcW4n;G8Bf;Y1wN}eXlS#01I2jdq}oqo8rXXz^#ifDW&ZRSAlqV4W? z@!=Kt+y-s$D?3ka@T4X;c(ut5Ejkn1?8^*qz=&a|0S*@KnRTAxAj*8tvG8IkU`+?? z`KYuBT$uMn@5hcE_egV28roogASg1 zm#VR;w>~iG-Q?h)chxzQw$H22S6k`3P0da7c~78jkNzm>P1b4@`Ej$eO|5dTh@!*5 zWhEn{H%MY{C#%^2f1|~2>awd2GiIR zcHGZKM`siMX)h^m^kiwxd#T$5@HuKP<* z+9NUzY?;q#X1gp*%9x4F;k`hj&rs!O|9*Ihg0uEVn)y>e8a zl0oHV6}40PM6Mb#czn;{lXq=79|D}?g zmw9$MApxscgRoxE(S8n;69%h?L9=8IOVC%T@1Eb1 z8k&&4_Iz0T?LTQcMA1)~4pH1`I>a-u@=!q`Upn>xWk_=Pe?2B5NMqvVM@5W2()!O! zj*AeBdDTMt`g2J)a##BL3p%X7xPAQ{h7uQDV*SYp#mT)dk`CkE2ZFgBSdjH^vH)l7 zuzbLeNWs1nFPwM+RQ=pbNrKLbEI4#1O&Z$yu?zT72D>HLUv;72UU4`7Fq1rPbr zmfWmT&;x~7rW4f$T4V1XqTuKy*o0H8d!(@`%Gi{ZTUeIPCM7?_Mp`>D3Mt`?3&kMv zZeXi)*#pxBUj8xGZMV%G+w+=Hfhx~h+q|)bS5(yasyro^fx>KB_X-K?luHI9(Xc(I0 z#v~(4;MLHfV5l!<={>#cS*h;%n&f$XDmE-xw43DXS*EkPgZ29DPtaN*rHOJL#EB&< z9Fyiv(`4wVm1%kJ4tlK@rpSx=Cmnc;)~+lB4D^IcQFy_o8L|+K%Q-Hkup6+nILYVS zOYvEWmBZ!~hiZO`+G|Hg?Kd5|yc%?_eqlBI*VKD-@7UPbr4?e!l;z8(OkTEZa?gJK zdPZt%HC>=TuQLD+jF2kwFrQO~;4jkxra#JhpyiC1qPMoPngMSP)@$@a6Q>w5lYzLKPnLsVVL{mf_QjrLUFuE~{;JNCR!Y+NSRA1aTEr)>ECSF}VSH*8@a~0q+e>ac z^8D{CZ9lg?xO`!A<39QAZ6{x4tn7DNpIlLQbe~X5_sy9#X)Sd;){=h$*f`_r!|J#1 z*LT15p0RtD9z2Nr9N1^r+(=--pKre7E}Z3~*0EVWMJykqjqs7PBZ-_2Ni^{CFl3m= zTLLg2gSoOiJD}0*oPsdFV?sjjw0QaLsVq4tPNqyPA9IOmKNn?Vgo{T1EWa;|C14)8 zcF3?JA9or7G{--hmxRq{1!9}Cs5^NtgIB<2dcjA?zj$&E&X>;OlXJ4PVN$`=A0S3SkJ5P6bqZ9%BqfmMFrAjx4c6Z zo3W`qAJrwp9;oY$j&1L{Q5whchk;dHQs0G$XKC#&Z3}^Q!UXLVi-ll7>oHd6o0e0e zm&hqmk@@Koo;PsO&mKNB{WBaa_roGSUI)H!HT?4bo8JfGVZ{>K)kpsE)wa)g6>;h- z!Dq)J-JbBB9r9H4l6fk}`~kkd4&x%sPrr(pH^D_B4Xa&~sWR=i#C`KDs?=PD9cL>6{?%64PwswYXa#In^f*V?qUN zs*eu@(8ueIa9z09KFY^xWJ?K9PF@dF)_H-;&G$(K61tx8v$6F#`45+v^P|rI>p3$u z>nEM|oHW`yP9!SmY9disn@E&!=yUTzT778#zcZVNnafMfCz^Qpv#&2Tqew6$`xesa z4**V^q|u*~q(6-G7c=@D@SPpk5avSk*- zGK-yZ5&Av6-&}S@5=H!3v6J0N)uPSh=}{!P4m-TTJbh_I+d-@)kCa|+2Rof3n)1rK zX2aFC+2E0n&a9Dcw#~V+$J8-dRZ_*JSaOyfts8EusF>Y0shuqxJ7|2#A*J9qUZ-&; zl;lhay8)FPjVWHx{yn11K?Hu}g0gqz;*F&k|#po0RDzp~YPMpv!PC@`jQs}pK=zSeV4vO#U z9%TJrL7dBAkARJCP2PMd5Wy%vOEv3G$JlY!GXb zYQaf6+Rb@?!eAxT{+)*_Jpst>q5(_#KXM)Uf0u5SQFD2`e(m1M8Em_JKTbDxon15( zDgX%bBEoe~GxeTMcMv=EEH>*_O49B#f|HsKsYW&VixclXoUPhpL ziB%lJ>Dhc8yVyLvQq<{Pt^}()gE1uphu8<&t9vRr=V8gYfYfP$av_Eeb5W^9ltQV~ zn#;5Sy=dNY5g7isV0D?A@4VhMn$xltJQ?1kf05i(C7bor{T4Pi3HB1JV)|Y@IVn3e zISDt*Y5~GAy8e?VD1q-FUUG_3yGsKS+RQ^Xb2SG&iqy=*v~h0I?t@KBNuDL zGAN7d7fOoGzyfx0Q!yL7TPi6fWi|iS26Zv(p`iGZTlP*pcb4mEGZ(ln_fIcfENZOp zpBPrNxex&|Ps0gTa6PW+@+MZ*MJuk;-!)c2qK=F?Ln zMyOcJQb#9f6{+{r*dM?7LOjYbpka#6Knh4XsU(|8Jb<25E*}kD9OaV-tudts>~AcZ zh)4m9m_!`O8<8quAU@3RJnG=FTTIpT3QMkM^;StiSJ>koR>NE_b*8)eQZrwk9S-ej_WzMgEZ)w|UdvN8V z=Ei-A1&3>I`Dpr+w~YMq=6MTlzInmCn}tW{f%!A1tfl{I2J^do{@j)7x9?XBV4>NS zbKf1Y@#IbSKl|+c4;(o%r1{Rfh^W;C@LGo=oNS(68G!9w{+N=ZOSQl7GJzJa-2tNR zgl%?4u-u^~i@lMbZ1})HKXoHZc%cImdpk?*<-6jRoN&!$?+YPzsX{vy8@ybHv4c9g zwvHDi*IitApsVPrj)^*TyTnEoS1DunY!_pxHgA5j2W^OfId!XBB$8@j73$O+l4L}M z)kb}<+r#F!xIug1AS+C_n4>L5QNrt#_iq082Ir6ez5b~7_p3w)J)qyf z?^ExHC?;KU(5f~OBW}O~cVe(6?^ADbX!mn)J8^Emw_O-ksWp=t47R>w$JCCVAbv${ zn-<2_OcLt*4jOwSuH{ZKL@`FnuBDG)>k_+`cuMQZiHkU@frzH$wXAy9`OCJX($IeY zSEv3?yi%VrBWuStULfL~sp~9JzuCmDrM^gCp|StXwfvX8*8AF}#;jSQe!Yq5WZ)sl zF7gng3^=elFNTa{+2(?-d5Jy2*fs9wANVEwz>kf<;Utq4!ppKdv$@DwbQ!+W{gl*9 zo?vkF89SY{rpQE21jsnqOG;;{n?9_y?Xm{J;}P(vFN& z9C2rbJ2c0Wm-MIRyE$sQ6f(foXN&yZLm zo9F0h6gg#xCA|E#DJr`niVdRxWh@-gJ&LzgjAyZtG+Eeuq034RPLhpLS?6R0Isn)5 z*q`L(g6Lt~DodwjT>+D%jEFWnxXAF3Wfpbx66v$rm2n!f4YQ^(Z*DWz{-XZDnJ zcU@=tj2b77Tz~E3_ucF)EcdV7{_y(dm(;(*c{2#DdY677$W@ShOmKvjNs2K$ZA8nQ z5shlkaiTDB@Vl>Nv!?#!K%A~_z=q;x>M)N98+Rpck#qP!;#az#&F2G#Go7;km}1TQ zPPQF8+V52IZM#!;98-Mx-^t!%cM{@iKx9=h!GIgl?roM*+eXy+@Wkc7|Ad*D?y;Jwl8ekr+ti+5|Y z4DvZE3upM$HI>Znb|p7bETW#b0t%Xo4mXvvdjCf&Ecgj1D4Zff{)u_<*-H;;MZ<5bE$=PxaCC0 zh0bC(pvZ}hXj*d7Qrq5czaz!}2WX7MeE+GAj3U|?Y6vemXJ=ZxpK`N|;A!2km1 zY~52~^#4Ww7}$;3g%}taI2f2fq5uMH31R?v+GAj3U|`?!mzjZqgW><8|3}!38Gs@v z-~|AOf(A@@+HI3hNK{c6#m{{AzGp;8v~r{tEh0k(8C(p*5TT74WG;q5h8kjshs10w zt)Rak(qfQS(O6(14Z#r6B1ED^xR^z>5(+}v6%kPp^p9+i*ZHn*z{JImbKm{Xa-Y&b}PE zO|m3O_CA(+yh$A(JIESJ-Vo}NLEU^sLg$z@ z)V*&cO-^$Dg43dHaQ-NUZ2`Srif1_-{`O1QYmXsrn&D4-6eB#xQ`X!~9pV4aTCn~g zw%_)kY^PB*Pgv_T3bq}2sUT&$c(x0uN(U}WXL#Qx*zQKve~zlXL;^RzYOkOmO|G9n zQr_c$oxqIwg}B#5(yU;Qw#^K^n?=8D$71yV{+9P_UnQqWkNT%`oNodCdaLw%8Cg?X z_fEa%UTLjcUO4XuWffU+h<$VR8tZw9ochi0i|nt<52Uz$+%J;5%S9omtFLKavk#7t*a9Hp99CYC*Huh|6LbkL+vKslIQ4KZLT&qWyoE1IT&l z2tScmw#+-(%3(8l$5ffcMl=hTHPv51$*&>rY6@aI)o)V)+I9ggl@oj;4U$*~@2F*J zz%hLX5#|j>{W140CP_u%o0=r56}iK^zKF-VR{EG}AI5cG)|ucP_swUv8@zK1Nc{ub ze%9@H+GAi~(1F4VhEn8TRMnCCDbV*bTq!&1P~$Fhs%3#%P#4eKQ~6Sfw% z59}%I6F4L|dN@vSa&RheI&nsE9^tCtI>xQVUB}&kUXmJnwiFc*A&Wc(3tk z@Ky2c;aB0W;Qu6`BoHMqL(o95NN|ndEg>Eu7ojSlDMD+6&IvmSFB5(z5+$-rltc7{ zn1Gm{*c`D7;!NUM;@c!RByuFKNQy~LkbEa)BUL3GAw5m{mJEkXgUlRR0a+g)oF@B4 zu0-yge3*QVf}BE(!av0v#XiLyir18ilqM+MQr1$gP=2Jsq!OXhqq0rqg{q8difV_N znA$S+4E1Xo8X8p^7c?U@Z)xRd9nm(@uF~G8!=uxpvqtBNE|YGQ?mj&qy=D4L`bqk4 z3MV&rEu!RVH8ober#7?UTaU1nxxugrVQzgfgt9J4gByk_~&O2aC` zYJ;_k^#bdEHgPt`Y=dlX*(umfvHM`}W52<{$f3#Mo@0jN38yHhD^CBM&2T^$=OE_< z=L+Wu&c~epxEQ%iaCztI<67l<1_(d6i2>mU4i8?f2Es_x~vE57hhnf0y=O)Q9{3l=ffM;r_o=Q_WSbBH|}eL$qpYs`@HbYw8=} zzE4jQl~JoleJOe(wNSCTqPw{os|&iH(u_HcT&X9jL3li;>sLhoSbd>d)beQ>icIgI zM33inG4oA%sTH{S8q#GnBBhzNfV&>eHa&;vnbD}6*3x6I?X!mZ6i*jK@io!YVv>oG z1lNE@G4~FmJ~++^Q7wU!Py3vfHvt-&gEiLVRSb`PlBP}nyRefapxh29XsuPnh$of& zg{vE$MzF(J_|fRjspkf?84;(QIsH%3x~3~el)9qdD6pO(IBu%1(9X&JY6V-&XjP5m z686ym_jCHMk)P7@F3oRS2@bxOKfSWkM316*2Xb|h7quqN$cJ@rpME##p+=OnFaHvA zBSLFMI@eZlD?WZm@%j6eQeQpt(H80KobpziTE=oXr>3HN|5#` z!RG277i)UTQ6u+cb8|=Fn(4A`BYHZK84i^pjWm%VrdAgdprCPLG+)~&c!O9lf|nZkH2*r%-ir5YL}sF?aS#I* zmJ>g+E-^NzHrxLUe(lEt7fFk8lWph(J~o6Fb>zuBEtDgs&o|@4T(4zBT`X%&?b!A# zXr#WM*hpvOVmVnaD^xdYn;#6ybD%SnD4If-=AJpd^{hLA#5KgqxkS}lJ8}U&=Rh$- zCL9zjj%^@DMw^QqX2k@QIAg?!!p_=_wt4;tqYXM&l4<4^5zWaJ?#8xn8x~=9bh7zz zpSjCQ*)O!dSVYP))>{*fUd0=Ya`hZ zad9rTn+Eom(%iMji;Iy)`pjBwUV(e+RXj1;)f#Z|;+V413FX`lT?4wh$h`W=!!4E9 zLqTIA@yAGFc+#@FTrxo&!YGtA>U(jmvVK1muh46KO!FS?jJ~nMk*v8A+)WK^d@z%Y zrDM3UkvNFqe%y$}8(p34B&qe8^? zrPucp+5bDOj4HH}*(%@2z`F7I@5+oAT+B=L++B8Lst~R(Or5}1wQXO(HNX-hA}=as zK)yN>-^UJpS|{5_Sra$);(*!v9i>qyYL0e;3W z%X{gi@RE9(tI4TV+15iZ+l*Di+sU*j8l6*y=wtuZ#lCGHo}$~wrTozYM+>+zYX*pV${an#bCK8QPRHuwATi953 zS}8K`3u`q`kgGeWM*JG>ZXZp=#>0pcO9Y5zO|E^{;v-dYsBWWKIRfztcg5{YG#KvX z!aWG{rS&!OeC8>nzyG?s>#oROd0+D1*@M*Y*o8#cz0U&gGck!h)ZdlzS;O_lii0cY zSZXe}o3F0^T&f5NPigH=!0J>w#;t2hn>=yjWZ-$Ca&p43Eee9j( z&7{X<4L{d943>iE60(~UoP{9C8KjE(0{Nf&ayiY2VUuI5X0&P6GZL6=%J#`8Xnw`M zd4HY?vf(-*&RproQg>ft;J7cizV@ZM0=w+*PH9dl{y|{vX!Ui9L&1iX2fzHO>~f z@T|n3li0TxY#mE`?vQM#IgGabz36iwYxd_!0r613yY3UyAmjK|Ts7TocEcxloRhL-v5QR^m;EA^ z(~#R8&olh$(5)0&;-(evIyd|OKPTH|mou=toDNyA+0Sf$-*<&-Ikjgj3EsTSJzZVX z(^$^-CmVOs#p*M{vK)s@o7kGAt z?;iB~sxHNuGn@+^Q;**H_T~9QSl}z{^iFBqC1^2?3;NZxzmazjHQejFFM;MU=C;(Y z<(*g`RJ+u!f!7}1{Iz79o}uNqgiIavlKQ@o^*S`myeT{fFU;wH`rWD_S7%t!aK^|S zkqrE_Nwm*EPxD^~Qo7x-e4YrWO<<%c5AdGy5?EiL_mckiXdJ({Y(i${wgVYX=sC;M z0tc)K=I99TLchU?m&DfqT=ZarJhBc6FYpzNp08K^61~h>SG0VAI>u0G2$sx;#{X-( zav$=y@s`L~NSTisG~LFk7tlgWuy4vcO&=Y`-dSKBUvxCV?@OzLBEN=OsDmmSFe|)- z6fNM<#^^pyD2_m>ZRhKm7w8{&G}*dY^KB2qBRRcjsjq0&mRL>`2!&FxA87ua6pV9I zevfSQ@O9h~9UfVYc413pR9?a3S{T)YKKd4g6L{&laDM68ku>4im3Gyaa zFH?L;@C?tM5qJ8Ff)`YyerCTSdiHOmwyr#Q+HKHRaLjQK!13=Um%HTBd)Gzh|Nmbu zMZc3fJ$kPp$=wl2TpXf>k?0I##v3Ey1*6wt@PN_VD1!&j`gp)A7yq9(`|_FHncdl4 zBKRA>eN^+m_y7_ikwju43M)3EiNQ`Ram15AB1t5ZLMmyblR+j~WRpWKdF0c9j&!0k zUFb?Tx>G<8deV#D^r0{P=+6K&bPOC6;-rXTN+@L@gBZ*ZhBA!dxNtLqGCX)0$tXrM zhOvxeJmpMaB9oZR6s9tb>C9jzvzW~s<}#1@EMOrOV&MqQv~ZmR;fuDghn*bc7)K?F z9lT>R`^73Yc1twdxW#*k;Sk69$q#(~X9)q8vWyyPIZPePsV7JSAy%-GReWMKYiMLG>siMYT4`bf z8`;DczHyZ^oaGvCcq?{^l{kr)1WA-6NtP5zl{87049Vmi=efjXZgYW)++iyxB#Rr| zlx)dim*h&G zqWm|{WvZ*Wx^Axy_(H*|%8CZRSu(t)POrri3f8qJ9<_(pZSE1)_ydk5nhF4T+BMES z4uU`s1>jv4mVa3j5-SbH&hY>qz@?!fRBYloY_+k}#G4FO#?F)BM2GHuFRyqnIbKoT zM1xV=4^rOUP;2PdXk3G3N8#d@sNvWPRFy>q2lOlZR0|J&2nhZJO$Z*0kf1w8Lk0a6#1 + + + + + Topcoat + + + + + + + +

        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%0A!(<_lKk*O*KybdF;H5a3nmCpKqsQh% z+llWZxS$wU2w8s=6s1&Dg+u_aT)D~)9XvqAsqHYt(f06z&sa&(bi4Xv*E!`Sost(ys&fmRfH`=*cka)MdR;p^@9%*8t(4-0<2&YNN8X{wXv`s(-8qZjm zSki~(7Fli{ggvjA-QLgqyO?7w1mU=wqlmlKGlAz2gt3=3M0;J#sxljlk#AFhRQj#} zw1oH+Tnfkq?9fpn^z+Is znSIlN+1QUZdP;ttw``92n~Yzy7bd@i1B5d@0w+SE&w^!r*10;zGw+FE(;DjIcZ|Qe6ov)_z)UTTNn`n#}NcAs5e8B}5I8&s||B6;FE-rTciO`AoNn5PG zbzcRC=$Hb;L=a_m6ca09O~-X#(J#Gg4!WntDWWJsse9_P?kh%DoU!7b^))ahmHqZ#FvQ<7(K5dK8`%Oi6$EImwMD;drjgu!)DF`PprsV2T6G1!%2XUo zPEWQ`w8gQ$6npuFV|L_VD-2tVEj_o$HgDX7b~M|XYubRPQOhLoD-xkH5x1XltTJ*V zO2(}!5rI_&zb>AJ_PQ+9a*~E@dRC-m;y;^3fr4n(IUHa4KJY_FYo7)2IUWQj)Ku0% z|KhBlY!IQ{XTRy7WdNwi4XTlL}h;s2okiV+S*a8sSE z$w>Pu22&^NnAeerW+aGTh)BOllNx~rMXb*t#7YELhUvf%5xfu_0qM@|Y(9`z9$KKy z8#Y;feW6{77DddfnjhfO;{Ca%`>S~it@AbMXztCenar4NWwVA;Iir`z@r~Pd+Kf3f zZ4HR71Y&<~!UdMdCXd2AtVL9+oH`Jhq!LNvP59W9PoHLyXm9_^E^~Jd{hR#IwSXVg zCZFT&*Hh1B`?yQtMc&tR-utdUHP~qKE&1&A^S(~r_r<#)bSCT?zv>k-BgowXoySR2 z5yCH>Lc};GP3)MotUN2hjUUp~>Y0QOP^}4RJr;yFxw&~T7iq?WthY2%QiMs< zFP9VzVe&jDU#rjm-QP~_=fl2>sS*+nLNK(af)JVs5SmKZcJvL{f9_sKPnnnxnWvs|P8RhxbzOTX}(0UEXouGBtGS8jqOwof7 zVShNjlrS-4Fh_%j+ARw0L0l$T4)Wel2*QCm5z;KQfmdGnFT_c;JBtKpy3`b;n!42t<={_w@`AB;j|Osf7zqcSxkCm-I6Ev&duG0_U`#IC&JB5NUALuTrflaF`pTW>hu+VbgTc6$6=$CM6$ zkHoC(-?!b?t_zi?O-s#i2sIzZQ~_`ygz5vqQ;|pb47@iAftO}h>*9xyCMQK>_FwEQ zJ%hcWQj5}RR8^t%j%{@~Bn~Z@5N-@+-EmBXnr&Clpkw}}{SXWZX9*F@-J=(#I+g4L zwbfNlzz{>9o0n%_`pQ=b+}a~<23#6#Rrven6lB`1U%J8m`Jcawxj)wypK%F(t_yGp zdCsjUop|LGKxn}wx zqTs=r-W@Cew;nzgW9rca&ks#&rl#Y%M)Q-IP{CkwJCJr%{pck+Atq3`TE5FN6Kc<% z+SHF;4ySOP?yr}aN4*Q5$fS7NZMWI2x8CXk8pW7uEYh^fH9-4a=WE}}#YSV-Z(=?* z77=sZLyWM3xHKQlU)Skf=ZJY#UwYT?9`kzYc)j&G_4wrPy07PVD2IHq<# z>!rOmeddgl#94i6d};%Xf98_&?MNlCjlXnBLAlL5ZH84J*~nhZw(!^_tJz;?a|qf@ z!7`FPwGho|ruoqJ1qe2BKHsrCCm5)3ByN91T!LBqIxT6)Z|e^pvEJr3OONr{Ig4l6P?s5T zTGmS@hg94u3bRXX0-xV_6c8hdpg->vKb`re9fEAM-D6f8b_?C94jt(&o zW(dJt_(1_YzJ@)!>=-YsGkgmnbX#Tfm&{Ak?c)B(Dip7KwAvQhzR zeA1F?xx_51jq-3_eC-vB!0eEfl4bWl_84vo#a0VK&BZ}|kYJqE&%SJ*{nE|sAgRVl z1`m>bl>mlyZ>^*3;(0c>B;y|-b=3PeI|^H8o*%&9(PMgjVi?81 zLipgg+&xZR7uPxeblh7b@7+7sd-u-$;P=qFfADW1Aeewb8rNQBO~lX*Q|+dGsN43z z^wif=O-Fazzpj1E5~#E_j@hlg4j;|f08B`LJU+|^|EUO&-w^vL9;t9742@__ zD*)!R?j2P&kqsdy-=H)KLqxPj?WM#Xsc^)c#YDyfXJFY$t&e-;<>uonDlJEpEkAE1 zsgw5MhquSBz4ltGg=vb0FbT+8TAG|D&W|=x$U<|FNmRakirT;HuDhJ1D$}Q)*TWA# zY{kWeP9mQ%V-}3k4oAGjT*MNnH1D*zwqVgr80}aBxej64xyA{1l6GHz{WV-CLa9r# zvSaOv{S`zRTN?g5i<$3mR|MqJ)4*7`A#&1!9 zLjeTeiX)XSwN?$9Lm@F~oV!5$XP+G^b|6iUw7&r~8e&L(^phVTt)FFEcWyd*uTr+k`#hm#KaeuPIbsr z+G#P4ESFoeajZHD;OZX=A^UKDq7{{Ug!?_u#`;RyxhD`^>fWxzB&u4j#oX^6fWZP;hraxT&eDvizcQTXJr>?T4Uu3c+OUBx)==xo*;u2%bDMp9qVZG@N2y z#q4R{>37XreTvXX`y%40H4y{3dGlu1m-eHylQItqzV%)29;|!sI!C{0ouon1^VKue zo|bQ_m|6)F8ngC@#;xyKXTgMydribq&q`y`xHVQ0S239yqZeqV`-#qIp6X9)qW8b1 zY5X3et}$pVT2C>?S{D&^(IBnkWPGOUbbcHr?egW9+Qe_}x44`$EWfzSYWLSzMI9Cz zgoKd+%K8FpooM%F%`9`4(TNxs6%+*%Fr!hrC%7#FUs7U9@xR1MiU0VBQfk4JEk)3~ zd+lmFXU0Nn=%eZs>l@Kb$}Xx$r6N=Yz;_1Tm(~$|1;U$(2hb0$1QJd~Gyd;dh-k&c zu>YV>AW18qIo%1C(FtgPAvGfug`qqm+GX4WW8-b~04c)oZ7rRdY5ux;inriaG1O|A zxayoXb-ERlrPxNXq2w?VA%WJgD>?jq2D`4u%NLBcJ-T@#v{1VamV{{{Cy1U7(Q0+4?Xap)BgO!cfZ313%L%+Pfr6F>>t4IjEx8XAi%%l?z^1S ztqM2;XfIT;Aq7Nq^zachq_f@NG{}!?@@W$UDPT)ubPO%`7Mt=C3A%6p{ts-`Im@tS zqvjv%C7N00I++#GRw4TA-mnFxDQKU)^(Gr9ba3zf19ta++-n(_;C}ne({>FK@^CwT zkH=drZ~m;4!wD_p$*&*z!CQEps6}US-8Js>q^rI2KIr)5W73nU=@>eS|MFQ+%j?Vi zc*;LmEO)JP~=Kaz1sn2KgjQ6RgcEp4`?zQ#U&=>_)72YzSYefCis>q6TP((LE_jQROk z94IG<#((HYy+xLmTCg7^(N3OM)*=@3S9lRVYw-{)vefyDvaE+{RS9Kf+-iRG^Q{A=~aAQ^X-buuR{B{-yV7BF}vWx3((q4BZI((5TZeFmA357 zH{ZmxE#JkU^CR5&)_^nVJp1IIESo@xGhj}I-1hGxA^s&-k`RBu{`mZ(m@&KUZ4#(U zqt*b-Jo?xJq=-qzcddtc;a1SpKtJ=H$uu!B-u12Mbfsp}GZ&I8DJ^l5w|p3->Hql0 zKW?%3t#;zt(?vd15qmKjg5h7@d52?AKKJ=s9M1T=uYG0Gs4YMJ9(7G@fFzrk2ak6;}*4fwDK~{@b^2atw|3c}7~66%>~^jjpmb#3x9T z6-sv|fBRt^-iC3F@`a)K%BK8nRxZ}6fXijt5B^hsO+!s+VpJQvgta9@0j>hVS#hyM z-7{7qNf7cQ@L4T&^JwH6!56o8LWukXq7cvz9zN>)8_zlSa;vIsu;u5U=jOM0$0l2F z`eNot?#~_s`KUh2&MUP~f95v(>es$xe{;iPtEkz9J3_m+8UF)xP6r&}-}Srt)HSNI zCFV{q-Al*xyRH#&62bC5duBul8G4?|G$5_01hjSQ*169mB_&QfuX}3_r_vMMM}mp^ z5Cf}wC^w}7zcer1Ph<7QD9eWCs(I_4VtD0aJGp%nF4FHBhx+m6<6W;~X(t$W-B6H=l+(i2w3Hl_f99BEN0AwKb8&1S?TSdaNbD z2V^G^sEhBfFA|^p>_qD$N2|Xe$9$KmKEB6zC;=C`habCX^)+KCfPS~QcTG#Tt(2hrPJu!I@(f4S$w|3q> z(jHLrzU#AhOrJlh={oP)$=7L5X>SPzPi?23CxK3|As82|>RL5@_WC}x5AVCTe}&hj zBoKT}W=y?4^e(tie}a9z3kC$!f<+0bf>jS^s9%j!*Xgs~Jveor!$G3bxdBtoWk7sx=W1a><1kSzS%7J@LRp_UY?B!*vj97}Ovd+E^y&rXleOGs`uM?Ym@_oQ}uIXHE z=N`8A9{M44t@61_GsQP|jv}_zCO`mc`birih-OS(I-gej{8U~3iAlS*MOj6bHehE*m5fXqDB&AyOB82ii977xKo};@X9e+p*%_jtu-g@X% z9ru3wkW2rf!-`0kTSGL+c!*r7YzyjwV@gM3b+E0;o_cE+rYOH1$ImlBHLaZN4CJ3A zg1ShSo|kA5Fsq5vWs(A3!1UcsxZC$g+;xX;@*Ec{wNU+^q zPw+u0Rd8_Jz}%FC$$4^%A%N_U4?RNp&_nj~JMVV>xr3zL%7&<}TCoy;^0(b{uB{Kb zz+86m6)=%!IVS3{N1kxn&(_v}J^0Z5E*+9*E`8z;k2z*jS}-AyoUBoZGm-ExXt`(_ zWYP{1e)&N9iSQ=REhhc0P9pNTM&(LViPZOp4cel4q&H zZ+_!;+kar6DJlJ#OXicXe}?VYy}{OwY9N>q^r&K5Ubd>;s048@K8x*+K@%gUlxS+&w_;vIDALjsY!9vtdw1`2LVW>2 zR;9R~h*9e78g%FPkv1iP?AU>Q7uj=9NNHu9e!BP1~uulxC~fzioSuR=6M{*ZGNm8k2*2-bElp95hCK z7UL)XIi=2$#!zGP7(T(I)=Pv(`H59HLF+bu{(Q$IYHdZ#q?r}tC}O5`SGrz>4D`Ik z{OWf-7aiA2eMkc%MpOGycth_x$0Mxzu0G}as{Jj^skHCE`qi(TZ)|8EV=8A1O1&i^ zMnNL$*ROZk7Uc4v@rZ6nI1(Y%p3&aXyyZfm`)Vzu?G;g-jDxgvr+%Njrrz&bN8Km1 zM?&URt+yk@%t33QHPpSmCakP`C!keS-sA+B)L2}GqO;!q^1`-t_Tjf0P1?15 z>unz-Xs_FH$Tl!41{KE7H-H8UZL0+IF{~E~xSBwVsQ@ems&bM=;Fd5!;{J-Z4lBa1 zpthmQiZb%h=x?>7O~-BR@we^ozJ9Bfmtv7b10nnXq&I{-An^f}sz zUpmxhd>jiCdpmpxUwd%!L?5mmiD`_b)p{DS`V5a-Gx&9CS`Li#u#i|L)!zIF@wt>~hM9_lP$q;S)POTa$mHOQ zr^GG}vSZ*we(sxl6%G_^s}CI$TxneTuFtww?}B~ZUroc2|m&L>fT|? zPJZ|1qXVb*rSBis@5v5MeDKaa_1!zq^?hRFdgp|Glja>l%x^*bo0LH!!XF}DQ3UhSbmA=qJ#rg9=Ps`^qapC@1(>oAq>J62&0?1OUl zYj1I+b=MNK)J<^#koXYM{ZXXO^5aJ}HW*8mfqsiACgn^mX?TdfpFoO_ZzsT!sMhg= z1J*v;in)qJ*hQGEwk|e%I2{DKIve6Tx3%jJkU}U0{=ABoI`@(1_ulS~lG=XJQnZNfB0EU2QwIg@W0% zFVe`_DE5(!j_Aw^YoF4|YLtV#r*m0slN(-6MN@t7b} zI3_m=G3`pvH$=`ze;Aq=_HA4|8hBt$(aY7gPqJ$KnPSAWvZU4EAR z`rrT4zJfpP(k18d-0Q9S*ikDhDYQxoNnE&S!O5i)o>vpRd4$D-F%b)CQbbs^cl4Ze zo(G#EPIB=OldET{h-2+L?W4C5v|i?!Njs|)UDE!F5Xsj~&qtbnt?}2s_BGe9f=skF z9+C3Kq%nA!A&pD>UgMN@RC`7QQ_oN5ef{fScRr?H{Nfi~U-Ffe8Pf|w6che0|MD*` z2dq+XX`g8is(bJ6N+q4?x z)LU)#=p&zIJW+bD7T`0y%w36YJ;7PmRT|zE{HOv zWoTLnobAQ`J0>{+4J-bWaR`D41tW13iAm2x0l}L4(6$Z}MNg&>!*@N17Bv#Ve1hT- zzGwo5xSv0U(!HexmQ+~*Ge2SPZ0xr4R|Rd)f&zQ~gjZw!XlnOR94((aNo)}-R4~=8;OMUp)Z9mR}_v5@w z>WE0xD!u_E*`L|fAHTw$eC#n>ws?s>{@9<$d0B`gyTkcANn`PcmtJ(v`+xV3-*!^) zrRSe-5B}zN77fC0Iap;!YO0+dU4sxGL}<%9n@Mue6vz6bX`HEHUM1Xv1hoqj9iTZe1T5#PJDyawHyy7RNF9;V_ybNQ^=> zk+^-t!Ep8A%alNU=dLKm2{YuwiG6?@1j8|54Ip9ijF<)zD_YVapY5q1wmPT!a&;)j_F2g?GamVUwHr!2=-fCWVW@3lej##%5s7k z)>RX26;(u6_Y=uXL6HE8Ge2om(&pw`8;oTdNPIMEzy|SsjOfA-3`V4Pd%Z<>VFnoh z@W?LE&z|$Oz_egyPCqzieV<9Putrj69S%_G1@lZAzEmW(?+FJm@rfM;UruhBg$33z zI*56_z~;uxvmF~Y+kHQ|!xpbR*Jdo5kA{50&cF|}E~m-%0FTAR`S_S0MvIt@_BGjN z%`SCFAbo-y&_n55!Z-}u76$kMK5V9d_R8EpN7dJv%xr}Sr4mJE1ID3v7ER706+jqL_t*R zPA=O?VxhIsvyxWOF+8l7G?F4H9zoJ){jR3ZB6MPE_1v|-(uhi{DIz8UChfb-?>bM6 ztJXn8NlfD({_qEPjkKF9R;+N(Nd!*UiJ++oR&~CPiIA$F;^JcWUH8yE^_(?!57spv zF`goxdbUcdC8k>bveLrp`Kv!M)|#*8Az?~PwwP2gwYt{B8xn*xKb`y6G>u2&Qd3`= zhxgfAUzIP`n&^HyrY0qka24*BxWi$w81viF$TFLsS8SQ!n8w}UOU`M+;+0iSz*QK& z~k={g0T~ug&HEH(feQPZbSE8T(3*Fft{VysUw+F^Zcl@WMHUV5i(4Oe9Oa$**%j$(fml2rN zSxMXldo_@36!5k%80!e76^p@QSYB*F@YQ%PxmdB5X;g{1$u^FqFvwo;5i?-KA4Gc2N zj%>H*p5AYlTza8B@#I5jS9aT`Z5zq!nPKmMEIZmd?0yJ_%tZp`=A)!0LG!7OD(V_- z{H^sQ=I*yH9{!hazS;it_FHxU;@1JP2x9=szgks?33ba(YK2!2^fA|^&KZGm48t@% z3Q?9e|HB@h2JI$+Mo_6Wd^|W2avw}$7inr1E+?U5}OH^`>NpRXqYU?r_iDjN61RC@GL_n9gt-+N_`y?u<-HHgAtIMGMu5)jba zY@@xTfI^EjhE_EUv!zT`K@vYl#f7xQa`Bkl&^ekvKHKWhUeyO-!Y7if8S~fXK#iSE z06`3ZJu#kwJ3>5udhM1%biA*hMD~S`?mb66qF)&xQW z@!c=)FRSTZ0up`Jx5!~~0g_#y2SGE7V#Yd(yLZkS3i{-$1=XhyOxEGDv_;sNwK zgg;2>j`@!I~O27R)QvyTW03C%2;FQmbsJa|mY@ ziPM|NL3-MZS@zrC{?@)z`lAy}T9QjzF75929h))VPa``4mWaK3@BvM8R+5~wYyzx8 z#C->T>$7LgbqtB_CBVP-(?t$x2!V{UZqknG9%n5?YcZ|Ny)LrzDL`->4c9RT_dP`W zMnxxDL17}Ptcu;RXU>r}FSM#7Ae{lUie*#Cz5wFVOHBw({p&e(bx<=rE01wz*~0l` z0!S{zhqe)oS2pkxu#)0(n>};Bz4*e*_N#yUsm-2SjM*^DuK)B`U|y%#Z|=JrO~+x9 z*`Mk9_WphC>$f@o%euNco}GMJ-?hQ@A-_!tg88|j%20A!C_wWk#!2`~zHSmUhuc+h zmuMH73Pgyh5xxr|OiDA?+1(1B+yi3fnX!K98L2K`tq`?*Ty@?qtV-+GuXPNZD`88< z03mN_hZB;^SS9?v@Gp-dBD$fy$9zfYcI)lmLbDWv$j8~4XD`8ZVV|{O*|__j`>hdE z@l9X&GFc(E*y-~YAUw3XifU(^xzK8HwNOC{;gc-fTSg<2oe+|dUv4{(*4wu7W$ zN5r(B^jy@Jm}|X@(CK-21X{;5578-U&c)3B?sva)>%mAH9p&mw=<^q-(WT z)t5(Hb?*?2g!YEFZvR{FnxC3S7rgbCLsmk2oedB`lmKmuCRN%H!qIqXx($*kAfkt0 z(3F{$(U)rnGOBTXI%fHY%#!Co(|RzGqhtxVj*yTWFyxYh>K3&=k_#nx=uXRQ?oUbU^Z>SOcm2S2-xJ&N@x0^dXw3enI# zFl&fOW#4;y$_MSzbhKW>q*jy`Gd>z7@uN&`T7VNxdFRy+!-mV#x}c4NH}La3RZ`o~ zi1r@uu@QXaqta6u#;7I70$FJU9kB-^vkPJB(fV<&Xrd2a^Dwlf6KH0Ai5b*kfB}xc zJrc!Ikn~sbDc1coAHlHP+hjE*yv8x(J{Wx|wSs7O^zsL(a#mOg9>*6KMbWx9n{3r} zQ*F`wa@;GsZK7u`G;iF>@>;EG*BjP5?^>IWLc*6fmkvXMnK#$J=3Q{6J?Sxcf-^O( zwVIBrIX($^(0839Mpy8lrhTpN>c`vb`mR0%LsBs4dI_G&_#)x$lb`&gbKO#ayZY35 z+N(spDSXnzMe>m^}E|7XvYK=)zOB3T)&H=_G6}sM8X{&@5O8ta&V8O z(o8R^{I}oPYR$(REUV~Ev_a|i_V#TAAw-k#JePp2!xryS<}}+Ezj%x7!z8AtR^_Ve zBe)@!Xh2rmE%Jx`Qw1C`!Wz7^Yy$%Xc@R1M;&abhI{6b@ab?I%#T1DqXb`Q3k7&j1 zTejM)(lWc|vMX(0#eV5Ft*~^8^{;ye7h3XaqMhu4*!9B%Pnk96q;x)c4B-$QcW-Tc zU#zuvkrF9VWehPP4|j1YCFEFWExv*>6rrj5=iwwU4r9YBALIu$Exy{An0Gb>ox3F% z*26-QRWKTv`(QTF2*OB4&~FfbR1rWQ43a+c(1| zg61y*zbBy>`Dq6O1oNR$mY*;F4-RmYtN7H-uJL*6K9Z4O{yv}GwfZ&Nd8ElM$eC)L z1r!PhZ?`6L2_~#6b=vM>_SFPFsJW>**0}SCjl{DqFuh|i89t=`*y1ewr(woB@FDG> zI#B>-r~oOSHH(9>7~BsN1vQFI$70Y&b^@$F=S#Q1KAzmTR95ljWW=jjp(VUV}2Mw^_ z{g%Y~v=Fd@i#L9A8h>eNkz=xij5R+Yc@;rW$}#yH$}*Kr-c2Q6uc$s^`w#Cup`nb$ z-*XW(5)Ba&YYRB!>F1uea?IFCFoIgc08!;N4NYum_DM8BfC#WnZC&^gH`pZ?U2K~- zZD0(3?vX+|!VKH?&PL!K-|LQ6>*tw@(MlqKZLBlI&>eWE*3OrO|H^hCUs*A!`Ys<=xgE&;Km=1U5@L$Au9}O8ub!jEq-UkE=r>sk^jUrA9R03) z=~^}IH+}bB+6Q8CrF|9CtNZACadENR*B+77G2Ku1)|}O^7mmNaJ?KAAoQ!5G`RWt}Y} z0|CU`3CE%#B-KI#NB|mw{RDzk@{D;lfRAWj{T|%A+H45|-CUFyfs9<+ba>D{`>_ix zB0tGiKe^Y&5{K<)Kl?jyKB*EZ)Pb=9iypx?;Nchos}%U@t%Am_b&{|cBp^JDVAcry z`$xy{8^u@tFKsSkjZPM?hcbp9o$sxxa|N)vMV7#C)Z;#tkdJ>Vzv2cqf^{+hVNL;O z(FCYPV|@!l`wZ94fZ4my&aern7Ye0O^0iL*5&YZ>rv3!;s=cI_Zmae8p09gO@Ea2d zu0iHEK2Bi}%*?ZAMp?t5IFxklwtq*ZO)o9Aj;bCzR6`(P>G`DY>a_mGA`5msYJFe0 z#;Q68tRNYj!xQ=MG>u1lTWhSBK6`st--VO(E~Zgq_83ONftt=29vAHB95sE`aqW4X zCmg3H*U=}Qc*4PUF>s=C&Z>P*9p$mhhWgH7r*KLY8sR7t9uHMNV}`1 zYjtno46VBd_rfo_hkp0wtk3FC-@X35aroca@)i+%@y^$+zCpkEe=i9@NKLPO|w;qck(?AT2V-jXY zAuqk0_SD@a^lv;C(*x4y&=6)nv~V#|JTw+_fIy8n=8IaE@nag}{{(=dO(7_rz?2gN zQ7CoPd@e#NGIVG4J5} zH@y_|4Fn_-0j7{-*2C2}^rxqgdlu;#bC0Wp1Y<9Ef>E*q41maDT|QqS*!PeT3qcFH z6+{n(+Y`IrwKsR{g;~nAw|eTW2SPti&cBq{bPG^%E4et+63RZE+_p>6^ZbBYR_JB*O5Dr$B1^;jl-bRlT& zeQlpz|G66o0P4cGl5)2_eKw8sF;71ElpQ&I#9Eq~(ORB`CNL5I#5Hy^mJ%@!@>`S{ zRw>c+IsM#KXjoG1VFHB2$b9!Z-*Z7c@@-#?JJCZA{}#jS69?k=yh<81%#T z*5)VCHZHXVbC-iqV<>@JX>YE52{0bBxu?yu1)p0+wJexqQcPuMDVQqM>S1hzB=wR& zSq4FwgGpO(?wA=|P{hErV?vk4;8^7`Yic9~PIHqTJ6dU5$>N|U1R51Z6g)yhQE?Hb z?GQ62pGYyQs&b~_zZ6_!axk+N78X00*F7{x-LJb3Uup1wkgnEPCi87u9xD# zV$i(yk&dUWxr2UEtqWHPRV;kw>1W80Q0|`H!UYShthm7T@7|94(10C2un*ygUDI^j zDi7=>#a5#w17Eplp}HyhVC~h!CTzoPBHN8Y_ZBWo=XZ^5Frf&612-V%JGn_SE&)U4 zcEPuZjNWxz#70_5U9Wj*Z5Qc5y|mV1Y~>3p-&V~> z_f$}zh^qt??Y+}ZJIw_SYF#`AK=V@nBHoU!aUb=mduSc>o8JGon@8ikcimG>?>ZKX z|K~^$B~5;^l|%O$US4YlpI=LvQnSN-Ep|4-Z&^{E#RA*8_+=|bWPbW=+xXnecIM(U zpa-M21)=R-;G`d1uc8~xT}`$a1<&>W@2kKaZa_>c0Xh~-0h)u2n0nK*iS%!!baOcs zs0MBBtYy}EoPs6kbD;}pyFz6yEf)A!%z#vt8mr22OC9Sn6EF?A&|%4U%9e;E7?QtY z@#KyNRpI%o9%Kl{c#sNL6}6o_kqsn(o5Lu~ zb2RQ!LDq0Q5~h@XCXfjH(D5LdQXm?kF=@@gD?Dx9^;ya!o&j`M3^QbyhJ^)JHXn3V zlzt3_l79fpBb_oLiy|1T_UI4_pB^$CK=+eJZ0U?Sw(sZ~YY(ikk6pToYK?Jr_H{4W zcfT^nzIFMWzhX7sf2#JV_J{Vq)?M%3OUL!ne%3J$X0?CCTdW(0*E|G&-Z(uN)p_1L^{(b0B028_8bwu;X{f2z^Rh%FGWmju5eqEA+76LF&8m#zpvUW`9N}4PJuT(h61aGtfM6pqk)M3uHnP_Nkz4aC@ z9J5*oNpEKxNrLfvJ24<{kgn57|2!lTz`rpXO=sjpyzL;EW&K-dmRR@z%+#9A>q#+! zDUHC4D8`tdu;l)sg*7;WtG>;K(a$;ZtHsEzGM*ywDVAfPSXA~FW-#U1VTwbx)eYGE4D)=HBd z#Mg5ivr2obe0q_R@c)^JWYhJr$rvkEQW$LrhtLUg3P+;#p&5`fy=LOg#+ztXJ{z^a z%_@e;bIEzRNbW6+EhfrmS0u)oqrB|5h@BQ3XtqHui9HC;pl_mW$tKG`_H5ASb1S3kP`$FeYGF)C4SQ+CSRA z9stCXq9`>g69yui>;ozx*k16l#%7}7Xo+Gy*%NRHtV2GC zHP+%rLpeX)Ao+LU$36yw3!`32p4SGno)C(<#wN#59A<3%6$CltE{*rpGs31 zWG_f{2&M)f-??+=piON9wte=6FWl_Rt&ctah;7`o-dfQ(Uw+x;Ryw8F)@^v(F1zAV z2vjIt*5b1lIUhzLz(yFhPZV5DACZosxag7#frn)K^{;>Jd<@T9fxrpe_n>XBI?`aP z&RVwY1mR@9+POO9OTG(j{o>V{wTfYf0pw-TANIbIkSw zzkShLHXDbC`+*^8-i7>xQ2R+KCWI-RqGvCpSza~;-`$xOydbnUdU5Fx12&8cMm3C6 zEhVp;TRQk$XJ7m3?KXAV414OSr(oRgcYWS;wZN_~B2-(gI z%4BGHd1aW#r?~xhsN$IIJy3zKxl;H<;mdrw6NHPWP6c@q)MHm#N$FHHl2s7HWGh}g z2O)VC*&w>@@(WhDy{jCS()NZ@pMe_yOt~6`0q@PM{j<+L>$II(gS`A4H-^U_e;n7A zt=6P6p(lur`+wEQSL2bn$`E+ci-(w!zy!t7=LL`_3UIN&^^_U zXEhLv>$95N094FFeaLrD%(2p?X-r3s9B~4g(uIiu&_2+f5QDCBG*{h2`$ezGgwxYV zX{_F7cf_^B? zfk`HnR5A?Q$h^y-BYF7Swv&;k9bqTM&YX>&YvgDbsvaK?joY-S<>3+w$tPA?IEtMv3NI-8&r6N2QD51UR2)M z71ZH(tvQs;y^BfZBMdBi0tJ-loLmm1RPk|c81zY2Tv&64l?q*>(iFb1k>MTI)-Yn_ zXGXEUK`UFCY?%an-E`4xB;slIu*{`um_J zL@fqN$h)(ZvT$e}@C$Ga(#^ z8CDdl6WduUxi6@Cl}{nDC))7ppL-uUUPLoPq33Lg&Sv*3aDpHn%5{h z+`^jSUtE-zO7dvxP4hhC(JWSuVlw1DZPMhc000Oiyl>EE<`r9SOQ*FWT}Qw`$hWr$ zVm~!E3zr9&cw7*q2^e#xq0pumAZWeyY_*pKwCQn)_O<6;wLJ~^W)e`<6&0{UTaVdr z4N>HjA&f7Nr~Wko5d=ZB*4BXldFDj54wEo@f(YKsTzvNM^BUv+QIsbfJX~wR<}RXO zsq%t_AX>@6LHJ=a5w;)#!!>&?ed)zk($!~UMHB%k#b*i)U^vg}*u(dpTsNg}YDK$t z&hllpb1RYY%&`}tr~@;&0^a0febH4{BmHA4V!o01;yy)+tiqyv{34HA2~~FDnVU+n zcC>cbnP)7<{JhCAlY;Lu2zf$c9Ebx%Pv6q8DZpivpgNiS>uM{VnfLO`F9#R&IwYku zL@CMmeBwJQe_36V#{QF!)C{C@5iT($Vkm|XXoaX+TiP6B)Q5>rNbQ9e{^Wu^C&vA@ zYv*?I!EWK$vqbZ!J9AY8IOOW9uZE!ukbr+DOv`c1zSEp<=)uEB@b#Xs!$;8w)O5I1 zO>#k+GvnNo>vsI`W_KSUH}84Nav+2$=1FB;71*X=KercvFRh1y9CZ#d9KOpGTj3mS zbJ$`0+LHl6QXN4Mhw*tAf>p4bnAUDwJ%rq~r^En8AjIgt?*0g(I?jz8Zq$9ku@nrC zz)XV`3+M+E3a>n;4N-<-e} zf&V|*9~?u=bJerR#vS7BU)}AV=i+$_T%nc(aPO|&drz+0H@@)=yZ-v?-CQ&uXVMFT_^WPa3oKltE-j!>#k5mT*!_KhNy#Z<~AMZ{0P z>s}&aVmynBi|wL|E^>3zz4g+yy1$rC%}Y2|=1h%2bV$timMvSHYl*ULNaL#O!mSj{d8XuNKY%P_0(K+KRr*680%iLT6j(0|0m7sSNGN&G+s5`SFbQ= za!(4!x4eW~2(B#`EVe)0{!dH$7_U7l_`4(+p}RTN)A zYdQc^mz-H*8*3UY#ZS3Z==jVjY4)*mPPavuo>%*IiUF{iw!CQXd}!F zOlS{dh@hXO%<_{) zNu52_0tkJ|3mXW_$Gwi=HTapa0Rr||N9C{$2e!hofQYfxGgi|xbkD(k;~z8_0D@^p zDF-vGy{(t%YEZ6#1WbbEg?N5zG45;?In&47%&>qrp?Q741qCG5asTfoJ zrff8_K*)+Ac=DK41yc%^r2NoJeaT%wZUe$G`uy5!uesEBvS`Q!NU)#=3^c{2!9X+x94az{7(M6>Qs+I@cIMf!i3>ZWD|sCQ0<9yPhWqw!XAFR-Z7pr$@sG|O+P>v0I}?BW}$J+{}W_b2!mnuqy1Lm=rJ_%VFY=NVRoK?0ruwi-rUTV z-~WcqgjmkRFL^KmA3f5$Tw6BJ!tj@Vs(Y`ML>F7+NTkh9@mupivo&-cXUsfbkVp_8 z$uuM^XNeH17;H

      K582_2woUo>TNH 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 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/breadcrumb.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/breadcrumb.png new file mode 100755 index 0000000000000000000000000000000000000000..b2cf4f3bd51f42de7341d38f9842e34b447adcc1 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g!3HF2ETDSr z1<%~X^wgl##FWaylc_d9MLC`>jv*Ddl5+C%d6L?qYY? zkNkDmBi3;6%?g5mW7!Rq`Y!HGb789ZJ6T-G@yGywppk3on4 literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_checked.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_checked.png new file mode 100755 index 0000000000000000000000000000000000000000..daaa1a866aeacb9721a8b8e1d06a83c5b1fca97c GIT binary patch literal 1424 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~q!3HGX7W?Z1DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*W8C$v-nz@-+xEh&T7#g}7I=NZ8Ih#2eySX?T zn;97!!t}c2Czs}?=9R$orXciM;?xUD47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!Go0o@ z^`_u1HaTU(=a7iqY-b{=D&mb$lF zM@Q$pQoV(>^U9DWfkXFi@t;ss%9UK#UH{d8E}z!aQ!RJif4}ct?!_c`ELGp;y`N1% z`4CV{&W`5>86g_!HW?k#YTMfCled1!H51)Id=eBs_ z4zURbz8z(an>%MggvNtYn<~y1=18Em6^oOR zU3mL#P}RlPUymI~5ZJlbR!2{F>zvh4vbk zb-lmupdi-$@a99sM;~v0nE&+lvu9%O@^e1OCH}8szBReE{yiclx#gL}WMX zBMWWc$TKx1zuPo__U_J}b)P#|t$MU^S!36^xmn47ZZvJO{xw6h`DTKAFGu+00!`y$jv$i_e@NH1{-XGW| o@%jHpX?B-sg+DyHDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*W8C$v-nz@;nxEh&T7#g}7I=NZ8Ih#2eySX?T zn;97!!t}c2Czs}?=9R$orXcj1;?xUD47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!Bb??z z^`_uIwGE7fKYUD@&a2kaI0W+QrG=L2B}`{Q-Ll7JR%>waI}$RR8I#tMLvyIy@J0u01mO zqFaDYu^c*@|$zw5oq7JbGeSqK?1WauyuRbD4SxzsuP#fN_{HX? zaAKI{_HAYU0xcg(tmaNFWNNgl->|94X`#ZSWhc^?si;Oy%Q@YYd%K`R;<&!eRG*~e zV&O$69v4;=7%W?|erKAY`te5Rlu58Zq(;Y5KchpWBomwg+;;LA3 z;K?tkvuVP!%8a!yuK!U{E4wg&W2R5rLFY+Tb-T8<{_bSCqa-F(T`ke;w&&?i7BSup zJNKV|xbgkDM@m||cb`~xInO&}-`%{$_un`3-d6m@d+_>4iK|(n%?A(M-K%isT4hlc zS7_+n#NW3$)jsszR~NpLWm>ZP?##o>KNr_n*v*Un7%yzV?t49O{q;)Mwq;kdK8n3{ z*f76gVY2?mre(92nR@=?Hs)dObxVH7(4_yVJ#m9#Pc6%PtGVX_u9pfo9)I%3F>Oiq ztjcAp#C7~Q?wsX*FZKT4anra>30~jYH0@a>7;dt=zR`_(x(HNYdb;|#taD0e0suFL B8m|BV literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked.png new file mode 100755 index 0000000000000000000000000000000000000000..4ef08dde1e4aa9d0a43cceb925600af637d8a845 GIT binary patch literal 1216 zcmeAS@N?(olHy`uVBq!ia0vp^{2c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFjeGsTY(OatnYqyQCInmZhe+73JqDfIV%MiN!6JrUpi) zrY;7qM#fIq-2%~@g4-?5INhQTbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3bU9$WV zI|Bowk*AAeNX4z5$p`%o8}PI}=39GP?@n1Oa})bR#R?gfdkZ{7{T(XQcf7IbT<8~d z+sCW!jf$)%OVYGEDt-313x$Im^CH(rh`*{gTqDi!e$$T3SN6r2`x!zjjT3hy6bw`rCo#-&>4yLg^W+jYp+UVW34+WM~27yRvO|FGY; zNMFiXc#cc*Vd$Gh?#Wiq`k3S;7M<-mYbl#z{=CDCc*56+`GOFue l&Dv`BIJEa;Xl)I*0mB;U2ZejpS7w6B6i-(_mvv4FO#mr=rE>rP literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked_dark.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked_dark.png new file mode 100755 index 0000000000000000000000000000000000000000..3f5e6c934a9088b27509668ebdec19c0d5f504b8 GIT binary patch literal 1199 zcmeAS@N?(olHy`uVBq!ia0vp^{2c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFhHZsTY(OatnYqyQCInmZhe+73JqDfIV%MiQ6s4IL(9V zO~LIJ6P$YWfsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;u&clPQ)ggcRP=Ol45_%) zGuhkkumexq+dWHKWScl%w6T6+icwf3wAbm|ng?t#EGx|)@Vu2gwd)asf=bI2S2?Y- z66aH*-10KAPi_+b_ov#%m}9Q(hUagVZ@9njMtsK$%Lh;XRaw;RlI}l0S%ou2b>rgR zTd#J-on3a>+vQ71;k?wFk_v30p^oxA+ZsD#%B`hh_vni4Y-3LpX}z*ddTQ(`tEvvW z_GIH_L0R4>O;x27N@q4kv$HMKn;Of=Jh@@&<(4Cn0f&lmrgVKdzFW9tL#)^ro#VM0 zZ|}FB)DGIPc3b9%K!-(lu^TN&%8ot}1hd!44>Ve`yc zazFRI|2p^f)@7Mt>p%Z=4-}dF^+*4=@VPPy|1#^ZJ_&DNWZ3?#qPOs;s3)ih@pScb JS?83{1OQ`Zqgns} literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkmark_bw.svg b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkmark_bw.svg new file mode 100755 index 0000000..f737096 --- /dev/null +++ b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/checkmark_bw.svg @@ -0,0 +1,15 @@ + + + + + + +]> + + + diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dark-combo-box-bg.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dark-combo-box-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..9a4e92d0bc8409bd1bb8431f802e5c65b18ae3b4 GIT binary patch literal 1023 zcmaJ=PiWIn91c#qGS+Pu!FhUQV@z0+rd``Lv~F3GZpCJluCNM%rpfCXw&Z2WtIc++ zAhcJ(i#vK6sEAhwP8^~aLGhx9hq1fvHt?V?UE6uEh9vL3AK&-={=QazWhpRpb%>&< zKz3Oykad`RgMJ_RCtp07B+EFKN_Z7ja9yz>C1|J&LDo>#VF4=I_SSotq^N;Oy;#B} zImfHWU=$C-xQ0d8L}uQ#6mdBf;r%a?^tgBco z$Ar9;xDaK~*kGJg&E;;l@ADU#|Z8F$<^sQgyQfy^Kq3C`sC+*{R0iVxT^Bo<; zr@%-5A=~=={L!W5nZYA=VSl7~^XK&U(Zesf{D%r)4j!KljV%qFtW8b6-dp(AkWL&h za{tqCuKM8N!v0w6_jvP7X2T1c zip~c`L7YB#VS=y+eHBDhx`$2i)dwHM8ww&`2I730Cv%-XSi>RbKZpPO{@Zs3n;Lgk zl-HCK1W_S22pPPu^y~#b{NK^>eIMScQK|(so9!qk+mPT@vkd}Kmpfnv%4%=-IE)d* z+*&Q$f?A~AoMP&f?D*|i zY}nk_m{t0^l&DH>-v(kXhY56uWZ>$D42N^$D=WAuh~v!3dc7NF2>p+qsO8o{5D|ak3L3i=*jW zE=T3+DAVqsnP@cXaRh^Y?BREM4J5mM!&z5g5TK*jnuRpe03M^si8K9Of^N;y z8qQ3caKmU~v1Y_A3B40OyMTfu{CU+0CgxTFnb zWZGHNJXGjnQ>Tecr_;1RvY7=NC0Wr7?_$$5LXtSqaFA>$P!!@M=Abl9)pn}-gmPxj~~TzQQ))g zi?*2kZjAT&d|Q1V2c{B7hRPaR)f?Lm%zN_`eiUwjN4 zGVwmhmmVwWt{mIEyyi&t!Np@S-}>6Y^NCNTqd&$&lS{KxJBNs6R|hsEKKVxPilJ4v zURIA>FS-00So6;u?VntI!FT+`$ioxVzgK>`bw&1Ce`}t{( zJaZG%Q-e|yQz{EjrrH1%)p@!&hE&{oGi@VRg8`4r?56rhLE;zp7k}ygBO`9VRN(Qn zuIoo%m9QTd++lM0Y>yL%GM` z5SXZIcAfY}Sg$dT(cAe}jncw-ckW$Cd3UzGa{b47RiAG9{|;Nuz|5c>tsb0z^V4yl POBg&|{an^LB{Ts5BF|Sf literal 0 HcmV?d00001 diff --git a/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dark-sprites2x.png b/platforms/android/platform_www/cdvtests/topcoat-0.7.5/img/dark-sprites2x.png new file mode 100755 index 0000000000000000000000000000000000000000..f9a875bca7dac286350844c8fb20240779b864fc GIT binary patch literal 5066 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�)nj9bT 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 z zZnqtWThM861Q6MhqiT4VYC$N?rIfuC4z;x#s9%ueLZ06cbedgNVvQ@7T97hci)jVB zil}M;#k!7;SjF`;p@1erL_DPPWD$|!=HdTf=+On#*g+1Dx+N<}=%Py+hL2>Zy69yA zu}DLil~d7;J$ImID;KK7=c{o(dpUdkJRPv1N6e}FB-xfDwYlGuzk0_O3)AB5>%DvH z^zNNgnXV4ds+Dfh_07@Y{C9mwUFUvq*15bNj=SE-4s=N8shn`U4&3yLE}8$A)s>SpXTAzNuY+xrH6oKclX5wcNfZdOt49XMtf2s4K%c)Fi+dcp zK+sOo)y8LwoTnr&fFU$S?M0NaaiBWNI`yetB@AAIrlyKx_J9K?bUI7dzZ~d3Msy@N-z?U=F; ze!0{do~297;&NNN3T5#-FWD*TbPjH+v))G!SY>q$-qbRp9e!)so?&~_I_%*7{dVVy zb+)Lq!WMn(&s>&oSxuGQedmv@rMsHU>IK%c_yW$CY5(wFx8l{Sg%^>{&2#jR12Ld9 zPZ+ON9+|N+wBt*fXhGUz;ln5GL+^iwrjG3as~P1ZZyY`=eg#QJLy4*htbMu@CbEwR$&H`oE@ z`km)j*}whrVOvABgpc1r8Jzt`?V<1fhn>3VJS#n#W#_D3VSoS8$LzzD#(K|>Z+gqP z_2PLQ8K?$TiIGBrUu|9^9;2YOcAP;;q4n>RzqQ)sSJ>4b_z7;OknMi(C)P9jKNehd zgH0ALrG{_6%UV~>*C0ttF+!QDf>K_M0)z*(u9!*^2EZK*0Qw0>k z542=(XusvnewZZPBlgsj2OJtHf4}R407c#1g z;#S_vI3cs8izI+4R8&_unWZ|P?Pofyu%3n(BuAB&mO7cFIiln(SAvJRrp|NZ0XaoU zPK_Afqj-9Pg+&yVFU7lWQDFcoYv zRK^Pr-tloFb13Nv48P^s|A(;mfRC%Z(zuVL8I3d}je75vZMkAxF~*o?uoFTFA(ezw z2^6CYr}PCEr7yIHXPzG$Zr(-M}#0Cq((=e!;(rY!Wn8f zaok>h?ipK%Hu}w9{H*QVzu%TFS!MVA^tX24)n@A+?nb|rx{ls1`^uNUXz%{;``#Hd zeIv(GK7h=lqy8Y9rJq^dDyE&{XU8y-URUw!Y`p;Q!r6B8Y;l~XK^&8yq6n#rLW3ax z>;&pbyg!0$mykjSE|m@B|GaP(SkPw?7-7B0%K(It3Y#DxP~oLBTG(Bo)pGJDK@BD4 zDX`0h1F93v;M_}DMMZQ|fL@4)IMRs(pJ8Nz$pP|I7(nINl&HY>6f86 z!~$fd#`v6Je4i-SJIS-CATUXQTOT99spHv8yHy?4s!JF0xwFT@wW}YOr*aP1jna%Xsb zm|%Z`BJ$xOn!}KVCLh7yLr9iUX8>|AIx>h&qc(@jh`?3%$a%+C>cUsZ$*ZQ|ocaNP z28jTuc0yS`$DPB8mJFS4?^C4r76YH`(`iX0jtAa8@O3}k&cW4G6hvF6G<>fgMtk6sS zUjMY|Mpz75uzKLhaCU@{if1$iH?^Puy+hQt@0cPKD4Mi$_ z-AGOp+A=25n45>Wh;&&X-wM;wYbDCk{+dsLK~LI3+Q>E9#zp5@7ZDrYi;dEfvaPEQ zxuGhW4vfG}B~^(&XB116LRz4Acmi%B=*fF;uwfUSf*M=RMQ`%sowVBAH*6X2TVZQ6 zd+p()MD^i8TVI6%4A#5vCg)w|6xP?jCUh74>QR9{wph$yg zW@vE0Jm_nV5iKWBXp^6h0i_pp)_AIQb~S@k5lv(GSe{NAK^<9=3;jHY4D|B67U%*A zdh&T2WObxelk@%32hNQe05k@isSFYaZ$-#AW3LpE=8A-&(SUI#ql}k0m1-sE1<`OO zGLtmQYF9Ll+2Zq90M6{5J-w5jAj;=vaM*Yqi-RBdUPN$)nEylwvmF%HnG-UOLPcj6 zlsI5haKuz$Jd4I)h?q0dVkA|-C(0R|HC_qKLFe3DPfSi8L6F8U5m^TLq&h37oeiqE z#yPnc7v7?yZOrHDz;wx~I8}gYzQ(lfwqr*wAbh6;;;S+KQ7oY-=xA zZ+j0O;rddDK$oC*ILungvcvVQd^8)(K&vfZyp$AeD$%rpq(L@es578-(m&27;2G;b zX1iW|4SiMaEl&5iGy6b^ig-^O=_k0+y;(MsJ)&AbOQy?Jgbg(pM`M@*!wf$i_j=PP zG@#d61mQNYA%^ z5dT;!I*cnxg-4hhLu4d!hcNuf*3(Tzu`h{KeUdFeXSv~Qx*a_OqLoMIJJv@Q#UrC5 zg}eqegR$bdA#=XEY0;R5jktQ-otD08ku58wi`JoHoR=9}_2C<=@5Di>jG2?^*-#Be z>@b0*D_GAoY_;sQ%P_!AY>+tk(m745w(0UJ>k5HHRGf$Sc!qhq0`|QhKgfoYi?Tol z{8&CVo?$a60Jsn$pQ3U;tim;@Lz8GzCWU%n_6hs*9^}5>XtrxVdy}neJ!Fq(l$i&L(ZiiFd-8XUHu&j( z3|&u0w)J;+St{!vpU-+hr(LbkrI1i_rPT1uaw+l%*~!;`fHw6)E4X|!4mO(!b2mH! zD(|PoCfOzr6p}cc-Z*-$!1c^YIu7O}*!J7LN+XmZbBzvK044k>P}<6pb=Jw+NiAm6 zgC-H4Xt7sc_?U&DRJ7o9=4BTl)rO#3{gCAmh>R9(!jXF~j#&saI0Cg^mQo?A%3-A7Uk=PfbFO3lXx5rARqO5&9UAkUBZQ35NI-n{Ss2C z7NaqoM!&iiWB>p_07*naRJa8WU?OQNb@_wE4KI2cL^NhY%+oaVVq@$lqv*NjV)y)T zMH4~F0%Q=UxP}DA3-=XnDkvY;!{^RLJD0i!&H)YqlFe_~ONHXf2~QRu6njQ8*GA!3 zPOzrCLB~e1bz`7|F`T+Y)^ig3K?c%v*~uVpg}GFjL){4s*v=R3vm&nNFHgT{)l16B zw7BiavE%mfkAKVxax-wQ!q&+7l`21PMU8#`o(F9R#JBcDqa8T#qgAbnY;2T0Bg9x1 z6AUR+D!VQf3Lim{8biomQ1;lxHL(D2xS^=Pwox#ntf~+Cg8YRD&n5)~UfJ0EEM;EV zm#9;jVeA5-5r_JsA~EUcrm_!AN+TD`>f(A5k=Tk%FxD*iLQu6JmYHr6K!C0Ob^*!D$9rV=lvc zCh$t+eF2`yOcrQ0bcdO)aeM2?9xqcTNNm(=j;5PXYU;RJjY+2B0E$7)j_Hpdk-D9GxcZavIv!{tFg(6fB?N6DT&eg zCME)#H5;!^m;yY^lt9WuNGT7VNuxq9eXm1Kpbj^Kp$l{1-g6G7-YmzMG$%K|ut#iw<6^S=Qgs9J! z1LE|=WpK41#&MX#IHeH~5+Sp5lz<5~2`<2y+`29&&A@fe$|Z3x^i0<8^>6;+%`UKa z6_r{Q-M8|KQ>>{E{js!MJMXd_i(>fid+}{1f|4D6cw_@q{h_I+2p%Ur0Yj0VOckJ@ zFG%w)oD+#!?`v(ezV03?&0E4fj-Z|9x3`@1{sE&oBg{MxnF3>kYM zFk@%lJY=yV79llLqePvZ9axF1KD#hKi6|dPzc|wxY9Vw7_JNMjG0UB8!!3KQa``d> zk8EqDEoN?R4&wzUC!>UMC#44`W<^#Jlmi?}dNTJN2f1a!rxSGK&+vZG6h*x07-ShS zAB%r_icJfiqR&TR*J@<62KsEWjdbX|BN@?SrVVp~eV+L!eM4vd@(k6gk?@~M1CK~v z9N(u=JTSw?r{{}1%|c{z(x2E^94C?!Y0k}YN|l;PWezbD308QvIJr(|7v35scyZCq zDG7rmXH^%Vrz&Hn=c{>|!UCICP{f9jh#`{jwTs0%%>vOe&KM~DE={}HgV*BWsA^Tk z5Fygp`dMBN`;GH`5)Q7DHc=$1yTBN;cW~RY1qn$Qd>zV0L^+32JO4QU?5BMHFaK%B zkDh?)QA(xg7}}U;Y}J~zAR$P!oo=vY%a&2N(_&Q%7g=M+AZv(@OvuMfy{LB3X?A|i zB0^;f6A9ct%;xjRV=s`B$KZrp+4ZJv&B{#D!o<@cTCo)RPg58WBJhFS#dvUih|7C; z785<_t!BWZMtX@HCDJc6#uz04#1MK(bI-uhb79QWxu*bYE5};`5+@`Bj|z zK45M}9@VeR9k`tlg!%oxGSn|X05Iy)1g7FtdEKMPybV}(5&EBfAQllghoBir1W)PA z^Kp2x?A9Peyq*n5?KE9#*go%=p#aM>=%Z`i3aBxFWy_20(trD;oxbg6OE}qO2acVw z1^llaXC*M$K(`-+=Ut<=5}VTllD4C6%x=dCC;$bOl+3_LuNBnf*^w~A!Fadt-g~cYeD5l| zD6Nv2iagf0e#Y=j+P~D$6eV4K>fN@4Y|RiTU6=yQ6Kpz>Q<}Fa*5>70RQHU5G;Ue8 z$POMkYtyZO3MJLpRFKll0~A3uTGi4^Y-8pkoU9ppYvd?F~olXmXh? zPVTi$r3F@yzLvr!oU3_uPw;+8Ym9 zLHUJt`n5k<(j{AL*>yj)@X71#$eC|jRzZq2H=woKO)3>fZD;ygP#a0I&wI)s5J$cLkvH*5`uegb8q+gfX}U1cks!j>w=b+l9RK4q*+ z#t~bW$foZ{Eh7a7Z<2;DKfi!?5L~p9qNJ}bo0>%}KY0^QVT0%SsZ&ma9A4d@= zwYrR@qJKJ$gA`FIQ6^zU4h|{~Ux>=~G@OVqdzvJera<)i@NWijp5=J?0D^RcaQanj z77?Wb&NMk{RB6zl1$1cb>;j!Go-MM${))rthyHfx&kxuQmtJYV-hb4d!-3!Wt{d%+ z_g`iE&z`VbzHpPH4LsOCfI~V&Tj}k#^YuOU*QcMh8?M=I-}uV6?CN)4%dH&|P-SFFInBDYhJL;LG9DEbuH!d2_- zk%t}ziOvT=qPVcJ*;cMxWkqmezdPYcE4!tA`zVf8Ust{D zeQTesU%$z2{@5*6S&0G=U{4ppW(t{~1oWV71zf-+%C(aqI0$uxj5@>j3~5qX|vN(4d_M*p!3QIHY#A>9osbUr%A4Owiug z$ItOL*-(HM`DpBU^1nv$kJKjDM+(cu9_wKpX&;;Od*=H<0`z7J?h**<%Aq@;8BeR( z1S;jiGXNgwIdA*ewJ4&TvLzH%{p?rwp;prmdd=R#+Vo-DJ)pWXsc3-{IL#e%d+^-P z`Z`xs?R>8YWZt3IrvZ4%|I^-nYzu`5x)$!pxgSM%8W`sxvF$4LphLf#e|+Ye)u0xK;Ug8>V%poC zY&~TcQqc6<{rha!kv99pbrtsf;Q`W+saD8j4aJUu#=v)-DPzGfCY)>x0~E)odx%&7 zfe?e1;iRgN$?HXl+e7rd0Mx<9g3aWa~7o>%G8b=)pqzuF#qWsj93(=!BO zlR-q^$5>1f*(5R+moKZfZ|)tpQqYBL#xpPm+Cec!f}f3_hg!q}?d@*oUM1TC!vSY{ zj1FDu1hbMrp`QiO1I1xE9lmBNCat-9z)G2PZs|kPMJ&ohpW?G!h?hs;yQad0%PdQ> z{t)TIlu}391s2f!VYB1M(ZJ-x#&LL@`GZmM!g-WNVona|ox_#kEeyAsP54rIKd(;! zl+%F{3k!??=)BG|QB)>RQGbD1CL* z2DDLeU7BO#aOy@$y+m<9bzUdPW4`(s->eKcf}{=SAAfswzvbrSTkV;43?6f;q{f;k z7-ah++ONdHkYa$>YR}f02XrhnI$?citQHm&Q*1SCF9cu1$xEdWBgyund3LI5MVKi&hOo7t zwTm5~t4umU=M3r1UJ3}as8r7KvR?ZsdV#Bz&iZo~vEkw@iC>t?W}kq=87I9Kng9t) zX01^$luCe=<;PKBbD8#L+sN>^<$;if133P?C!cdoQ-$43#v;x2wIHcS7r}O%4cWEAZ?C-i zjCr@b7bgRI#(apO;E{xcPz{@XSnTxhR0jabY-YOBA0zCE*dw|yY1#y<4(tL(3zzTbAWbXa+8$ksX8 zihsP3^bpb~yCsrbYh_-)wU%idLLBcU$1ZFDlkR7qm5rJfeUZ=bP0|L_t5r764p zp*w7{1YO*I){URNgQhD&sir)%l=074)7h78y7PpkRjsra9{i3~mV2$Eb{Z|~Lpc72 zEu7YC1O0D;ev!@}7y6iPovpoe^2uNiz&T{z__9zkV8iNen_{y+3?F+DLD;x0p>1Zv zu>cye08Bii=;Yfr@)l2Ty2>(_c2J303B_S8&O`_M0UfVo8(8jc3J~4e#3?{Z0FZGb z2%iAoTKH%t)&1QA$fLp0^@7fwx3tJQ>JI}txZz7z;Pf>8W6=1n9E3VNNtTbyUMks1 zNe{6Z(w$J+tr4rnp7SHNjp}f+lWsQiEO?W^uIzm{$+SFAQc%yK0^=#|k=UjX`&f)Q z#DA@Ma1h6tK#w3_^cYE9A^JfE1}Qh})&#o49#ZNFG|!Op=hD6k#X$79saPB98GfxO zJnYGZh3GFc=W_uh`Z`*yzj3#f`q=G^1lf8MTbu|*52X=|QifBED6_V(e|k#B3W5i*+5AU+4Uhl{<@51JW7 zGD%dZ-OoRR-66A!qv`>s)|=>Xtq zpaXzxhB8l9 z5LE#;?X4%Vr9o6%CfTQ!Ra81nhx)nJ5$2|!fNuscLjjTYBW2Sk+4JR_iL*Y+__`dQ z2@wx`BmAK z+n3n0j~=uzqQfane5L5Cs;ZpH8^Wmy6Xl7*F#_*x5Ckm4Pyc4x$*DU|25E{mkiSG1 zeQ4PU2K3YS!N+l_n%LmDhPN_Bt$;yChl!IYRgR>KZvzyGK=3_WC*_kWM%@j~bEwlg| zNtogX_2AaR)&iRAFe1vy0BFS^Rh=Dhf!YbQ`Y}QQIB4Ufn=~(HqHL&~U)LlDR%t99 znq!iKN#lH(+;bkz%AV&RasH&Q8Ztb(eJkV{%Wq1(Bg(C)0FC!y|lp5I(=1n}r zIs}~yp==RDlQfKj?gn)hH6l6Ad}1tJ2-+u*I;|@5TgD9ZkjQDMA#GMsRAB?~HT`MX zTo;8*prqXxRCYUOeNU6tbj=VHOtC2wgt26ekk|mV%!c zw1n&&oLU^^zTQ47FIfP}qkCop#o-wa3^9kfPR6*a7xbW{$|)d>f#_%9WK#o4Cz%2B z(rT7b1DPSPLo&$&En-P|sWsu;j*zNPL!^EhB+A(>oROLR&r5^M*%hf)LE%dw0b()S zUi@Q=|MHJ^;750312U`&dQE`TSL)I=HcrMPlV|X*wVN$-O^szufYRWQ&#>W7vw<|V z1W70I`hmCYx8J^rnznR;hGBaPO29Da`~{;6>_k5fBY}DH@E}S7IAQE&;{Kv_M3jiu zEuWW=iweL~kMr-(=4X?->t8=(-~0UzJAG)ze(ihRzH;*_JMJ5{KAxSwB4%YCq;1gT z>LUmH-mR-qDCx6~wsbqzc+A|HRJ|`>%UsN}%@~qM;IyszudiG7&+oK*?mcZ6Ubo36 zPA9{GpRgZaf3=lgv(?&v{ha;bxu-34*(Pi0KsOq#*ZD^>^S!7t-&ULlpFcQi7hF^g zA9{$!0A4mYDx#q#xIL%s^kFs4WQ~FhkAY^UdWx|*OGzUS+AvwC1j&4Hu2=~DV4NN~ z_lF;Q)bbbASh!<`F$>s{W{TI!Y1nX*fcfMzR=z|P&G4S-HhAiIC(R;o3P8;U`xJmq z+7dF)au7COz7iXQK>M+is6Eh9GYie^G&bq@uywMwDo5$2lth=sbb|5LH{qEsg`P5M z?npaa(lqQ;lo`kx2So6}ADx*lVj;Q-D(RYpjhp7$#z?n&X!T<3!{{Z8c2`;qKD2~3Vt)Da9%-aBcQyeL3CYY zN?dF%VJKAT1n}aFPlB!~10*r~D0Uw7kGq5zs< zy6t=EZ`ei}Pf$QyvaA%x5_JR6JIQK|6G-Hd{S+t_XHE5X_hC!r+^I+sr?MQ|#a^#w zK+49ZGZr3I!Ljzo`cZtq=?{^~EGfmgZSQsV*Ej=RQ-j?H=xIcLDigkMkN{lRLz03u z_82cebl||c2xv1v>HP&fqX5rf3~EWlYdK^hLj)v=fFxO>=J70Le%vfj*Ex z)-?}cs;6F2VXt)&FdPNBZER??;pTqk9=vIs^f8`i8oosqS)3s9SaNSNcs>eWQsGq3 zKaQOlvA$e_p=g0+u-BAjQq9N}%e-QPCMDFiZ{E80|fO)NAdK_?rrWlE|&YtW81Uu&-;BV=e^)mTp_D5&W z)xN7^t^j-XhuPO^oJC1hmg3e=-QxI<+UH$U7;J${avq{oG>S4Hr&kCIUmWK_(7l^t z3cciv|IviLgm)_&16{;K&wVxCGuHT7gD~DL;aWkQ% zBPM>M23fx^ShR${K`Lg#Xkj{=Kc6e=fan6c2E9)IrZJjwmc@w??`RBTJPMyJfY(0B z#CHMrtCNPD3%!mzaIR6Wl{4q1%ao4)>%@L$VHv2B--bKjfyO`)x)bgD54>gz3i7P& z*f5jdYyCrGwr*p-b%sDiCh4lt$s&MzRalM)INY9G^cjaaeJbalKp=iyb+v6=x7KPK zI=R;zJAR^-C>@>-j%FNbNYaUxleCnru)fxMyZhTaY}<|R zv&zge8zfKEeHP8u9bKTjjdn`|?cTmbWkXreO00s&6^D?N!7$P)U;=DHOjIUp7qUVL z7>xjMM$4>j?5a)gHU*Q`cDDRGPIC`M>e(OBQJE!MNf?;tH_(pn1R@BCRr! zwwSyST9;zS&pT2vUYZ-Jpv#yQC+#H;vI_PBq?-E>o7ZztVV(0lK-rw1wg2lml6KJ? zl5V8BQ@yjeFlaiaiJ0{)C4u7vQ4WttD3H!clwdfwS}ZuOnQ#d`jI9nuo?5t9P|c`$ zmI^8({&zzgMQ~70#2Aohc^s;M=7zedcu5mVUopyNr9e;I>`A0V97h!gj9=j`>NDBM znWqXuTtvNE7fKQ8(x&-3dw)1JY$jn8A*M)^2PS46R9%~nVH{NIo2`@7rz&KnCz!~4 zB}XMq$`qu6#&D|BND)o2wj`kK1L+&2Iy4Dmmg&l~A=1FfDP>gF#?V+DgMY;O?3_fK z80o7Vki7uw8{~7$1~AlY;LQKZGM7>K4}yf60F5xRNk{tl><~OqRZ^$B5y(g7A~_4L z)Cj3

    2. "},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Kt,[et,jt,p],function(e,t,n){var r=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.addClass("menu")},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return r}),r(Gt,[Et],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(Yt,[wt,Y],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
      '},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(Xt,[wt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
      '}})}),r(Jt,[qt,q],function(e,t){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,n=e.getEl(),r=e.layoutRect(),i,o;return e._super(),i=n.firstChild,o=n.lastChild,t.css(i,{width:r.w-t.getSize(o).width,height:r.h-2}),t.css(o,{height:r.h-2}),e},activeMenu:function(e){var n=this;t.toggleClass(n.getEl().lastChild,n.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
      '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void t.call(this,e);n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Qt,[Ot],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Zt,[J,q],function(e,t){return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t.removeClass(n,this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t.addClass(n,this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
      '+n+'
      '+t.renderHtml(e)+"
      "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,n,r,i;r=t.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(t,n){r=Math.max(r,t.layoutRect().minW),i=Math.max(i,t.layoutRect().minH),e.settings.activeTab!=n&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=t.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,n=e._super(),n.deltaH+=o,n.innerH=n.h-n.deltaH,n}})}),r(en,[wt,q],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.hasEventListeners("submit")&&t.toJSON?(t.fire("submit",{data:t.toJSON()}),!1):void 0})})},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl().disabled=e),t._super(e)},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(tn,[q,$],function(e,t){return function(n,r){var i=this,o,a=t.classPrefix;i.show=function(t){return i.hide(),o=!0,window.setTimeout(function(){o&&n.appendChild(e.createFragment('
      '))},t||0),i},i.hide=function(){var e=n.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),o=!1,i}}}),a([l,c,u,d,f,p,h,m,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O,I,F,z,W,V,U,q,$,j,K,G,Y,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,pt,ht,mt,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,St,kt,Tt,Rt,At,Bt,Dt,Lt,Mt,Ht,Pt,Ot,It,Ft,zt,Wt,Vt,Ut,qt,$t,jt,Kt,Gt,Yt,Xt,Jt,Qt,Zt,en,tn])}(this);tinymce.PluginManager.add("advlist",function(t){function e(t,e){var n=[];return tinymce.each(e.split(/[ ,]/),function(t){n.push({text:t.replace(/\-/g," ").replace(/\b\w/g,function(t){return t.toUpperCase()}),data:"default"==t?"":t})}),n}function n(e,n){var o,l=t.dom,a=t.selection;o=l.getParent(a.getNode(),"ol,ul"),o&&o.nodeName==e&&n!==!1||t.execCommand("UL"==e?"InsertUnorderedList":"InsertOrderedList"),n=n===!1?i[e]:n,i[e]=n,o=l.getParent(a.getNode(),"ol,ul"),o&&(l.setStyle(o,"listStyleType",n),o.removeAttribute("data-mce-style")),t.focus()}function o(e){var n=t.dom.getStyle(t.dom.getParent(t.selection.getNode(),"ol,ul"),"listStyleType")||"";e.control.items().each(function(t){t.active(t.settings.data===n)})}var l,a,i={};l=e("OL",t.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),a=e("UL",t.getParam("advlist_bullet_styles","default,circle,disc,square")),t.addButton("numlist",{type:"splitbutton",tooltip:"Numbered list",menu:l,onshow:o,onselect:function(t){n("OL",t.control.settings.data)},onclick:function(){n("OL",!1)}}),t.addButton("bullist",{type:"splitbutton",tooltip:"Bullet list",menu:a,onshow:o,onselect:function(t){n("UL",t.control.settings.data)},onclick:function(){n("UL",!1)}})});tinymce.PluginManager.add("anchor",function(n){function e(){var e=n.selection.getNode();n.windowManager.open({title:"Anchor",body:{type:"textbox",name:"name",size:40,label:"Name",value:e.name||e.id},onsubmit:function(e){n.execCommand("mceInsertContent",!1,n.dom.createHTML("a",{id:e.data.name}))}})}n.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:e,stateSelector:"a:not([href])"}),n.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:e})});tinymce.PluginManager.add("autolink",function(t){function n(t){o(t,-1,"(",!0)}function e(t){o(t,0,"",!0)}function i(t){o(t,-1,"",!1)}function o(t,n,e){function i(t,n){if(0>n&&(n=0),3==t.nodeType){var e=t.data.length;n>e&&(n=e)}return n}function o(t,n){f.setStart(t,i(t,n))}function r(t,n){f.setEnd(t,i(t,n))}var f,d,a,s,c,l,u,g,h;if(f=t.selection.getRng(!0).cloneRange(),f.startOffset<5){if(g=f.endContainer.previousSibling,!g){if(!f.endContainer.firstChild||!f.endContainer.firstChild.nextSibling)return;g=f.endContainer.firstChild.nextSibling}if(h=g.length,o(g,h),r(g,h),f.endOffset<5)return;d=f.endOffset,s=g}else{if(s=f.endContainer,3!=s.nodeType&&s.firstChild){for(;3!=s.nodeType&&s.firstChild;)s=s.firstChild;3==s.nodeType&&(o(s,0),r(s,s.nodeValue.length))}d=1==f.endOffset?2:f.endOffset-1-n}a=d;do o(s,d>=2?d-2:0),r(s,d>=1?d-1:0),d-=1;while(" "!=f.toString()&&""!==f.toString()&&160!=f.toString().charCodeAt(0)&&d-2>=0&&f.toString()!=e);f.toString()==e||160==f.toString().charCodeAt(0)?(o(s,d),r(s,a),d+=1):0===f.startOffset?(o(s,0),r(s,a)):(o(s,d),r(s,a)),l=f.toString(),"."==l.charAt(l.length-1)&&r(s,a-1),l=f.toString(),u=l.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i),u&&("www."==u[1]?u[1]="http://www.":/@$/.test(u[1])&&!/^mailto:/.test(u[1])&&(u[1]="mailto:"+u[1]),c=t.selection.getBookmark(),t.selection.setRng(f),t.execCommand("createlink",!1,u[1]+u[2]),t.selection.moveToBookmark(c),t.nodeChanged())}var r;return t.on("keydown",function(n){return 13==n.keyCode?i(t):void 0}),tinymce.Env.ie?void t.on("focus",function(){if(!r){r=!0;try{t.execCommand("AutoUrlDetect",!1,!0)}catch(n){}}}):(t.on("keypress",function(e){return 41==e.keyCode?n(t):void 0}),void t.on("keyup",function(n){return 32==n.keyCode?e(t):void 0}))});tinymce.PluginManager.add("autoresize",function(e){function t(){return e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()}function i(n){var s,r,g,u,l,m,h,d,f=tinymce.DOM;if(r=e.getDoc()){if(g=r.body,u=r.documentElement,l=o.autoresize_min_height,!g||n&&"setcontent"===n.type&&n.initial||t())return void(g&&u&&(g.style.overflowY="auto",u.style.overflowY="auto"));h=e.dom.getStyle(g,"margin-top",!0),d=e.dom.getStyle(g,"margin-bottom",!0),m=g.offsetHeight+parseInt(h,10)+parseInt(d,10),(isNaN(m)||0>=m)&&(m=tinymce.Env.ie?g.scrollHeight:tinymce.Env.webkit&&0===g.clientHeight?0:g.offsetHeight),m>o.autoresize_min_height&&(l=m),o.autoresize_max_height&&m>o.autoresize_max_height?(l=o.autoresize_max_height,g.style.overflowY="auto",u.style.overflowY="auto"):(g.style.overflowY="hidden",u.style.overflowY="hidden",g.scrollTop=0),l!==a&&(s=l-a,f.setStyle(f.get(e.id+"_ifr"),"height",l+"px"),a=l,tinymce.isWebKit&&0>s&&i(n))}}function n(e,t,o){setTimeout(function(){i({}),e--?n(e,t,o):o&&o()},t)}var o=e.settings,a=0;e.settings.inline||(o.autoresize_min_height=parseInt(e.getParam("autoresize_min_height",e.getElement().offsetHeight),10),o.autoresize_max_height=parseInt(e.getParam("autoresize_max_height",0),10),e.on("init",function(){var t=e.getParam("autoresize_overflow_padding",1);e.dom.setStyles(e.getBody(),{paddingBottom:e.getParam("autoresize_bottom_margin",50),paddingLeft:t,paddingRight:t})}),e.on("nodechange setcontent keyup FullscreenStateChanged",i),e.getParam("autoresize_on_init",!0)&&e.on("init",function(){n(20,100,function(){n(5,1e3)})}),e.addCommand("mceAutoResize",i))});tinymce.PluginManager.add("autosave",function(e){function t(e,t){var n={s:1e3,m:6e4};return e=/^(\d+)([ms]?)$/.exec(""+(e||t)),(e[2]?n[e[2]]:1)*parseInt(e,10)}function n(){var e=parseInt(l.getItem(d+"time"),10)||0;return(new Date).getTime()-e>v.autosave_retention?(a(!1),!1):!0}function a(t){l.removeItem(d+"draft"),l.removeItem(d+"time"),t!==!1&&e.fire("RemoveDraft")}function r(){!c()&&e.isDirty()&&(l.setItem(d+"draft",e.getContent({format:"raw",no_events:!0})),l.setItem(d+"time",(new Date).getTime()),e.fire("StoreDraft"))}function o(){n()&&(e.setContent(l.getItem(d+"draft"),{format:"raw"}),e.fire("RestoreDraft"))}function i(){m||(setInterval(function(){e.removed||r()},v.autosave_interval),m=!0)}function s(){var t=this;t.disabled(!n()),e.on("StoreDraft RestoreDraft RemoveDraft",function(){t.disabled(!n())}),i()}function u(){e.undoManager.beforeChange(),o(),a(),e.undoManager.add()}function f(){var e;return tinymce.each(tinymce.editors,function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e}function c(t){var n=e.settings.forced_root_block;return t=tinymce.trim("undefined"==typeof t?e.getBody().innerHTML:t),""===t||new RegExp("^<"+n+"[^>]*>(( | |[ ]|]*>)+?|)|
      $","i").test(t)}var d,m,v=e.settings,l=tinymce.util.LocalStorage;d=v.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",d=d.replace(/\{path\}/g,document.location.pathname),d=d.replace(/\{query\}/g,document.location.search),d=d.replace(/\{id\}/g,e.id),v.autosave_interval=t(v.autosave_interval,"30s"),v.autosave_retention=t(v.autosave_retention,"20m"),e.addButton("restoredraft",{title:"Restore last draft",onclick:u,onPostRender:s}),e.addMenuItem("restoredraft",{text:"Restore last draft",onclick:u,onPostRender:s,context:"file"}),e.settings.autosave_restore_when_empty!==!1&&(e.on("init",function(){n()&&c()&&o()}),e.on("saveContent",function(){a()})),window.onbeforeunload=f,this.hasDraft=n,this.storeDraft=r,this.restoreDraft=o,this.removeDraft=a,this.isEmpty=c});!function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(o){var e=this,t=o.getParam("bbcode_dialect","punbb").toLowerCase();o.on("beforeSetContent",function(o){o.content=e["_"+t+"_bbcode2html"](o.content)}),o.on("postProcess",function(o){o.set&&(o.content=e["_"+t+"_bbcode2html"](o.content)),o.get&&(o.content=e["_"+t+"_html2bbcode"](o.content))})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://www.tinymce.com",infourl:"http://www.tinymce.com/wiki.php/Plugin:bbcode"}},_punbb_html2bbcode:function(o){function e(e,t){o=o.replace(e,t)}return o=tinymce.trim(o),e(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),e(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),e(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),e(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),e(/(.*?)<\/font>/gi,"$1"),e(//gi,"[img]$1[/img]"),e(/(.*?)<\/span>/gi,"[code]$1[/code]"),e(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),e(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),e(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),e(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),e(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),e(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),e(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),e(/<\/(strong|b)>/gi,"[/b]"),e(/<(strong|b)>/gi,"[b]"),e(/<\/(em|i)>/gi,"[/i]"),e(/<(em|i)>/gi,"[i]"),e(/<\/u>/gi,"[/u]"),e(/(.*?)<\/span>/gi,"[u]$1[/u]"),e(//gi,"[u]"),e(/]*>/gi,"[quote]"),e(/<\/blockquote>/gi,"[/quote]"),e(/
      /gi,"\n"),e(//gi,"\n"),e(/
      /gi,"\n"),e(/

      /gi,""),e(/<\/p>/gi,"\n"),e(/ |\u00a0/gi," "),e(/"/gi,'"'),e(/</gi,"<"),e(/>/gi,">"),e(/&/gi,"&"),o},_punbb_bbcode2html:function(o){function e(e,t){o=o.replace(e,t)}return o=tinymce.trim(o),e(/\n/gi,"
      "),e(/\[b\]/gi,""),e(/\[\/b\]/gi,""),e(/\[i\]/gi,""),e(/\[\/i\]/gi,""),e(/\[u\]/gi,""),e(/\[\/u\]/gi,""),e(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),e(/\[url\](.*?)\[\/url\]/gi,'$1'),e(/\[img\](.*?)\[\/img\]/gi,''),e(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),e(/\[code\](.*?)\[\/code\]/gi,'$1 '),e(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),o}}),tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)}();tinymce.PluginManager.add("charmap",function(e){function a(){function a(e){for(;e;){if("TD"==e.nodeName)return e;e=e.parentNode}}var t,r,o,n;t='';var l=25;for(o=0;10>o;o++){for(t+="",r=0;l>r;r++){var s=i[o*l+r];t+='"}t+=""}t+="";var c={type:"container",html:t,onclick:function(a){var i=a.target;"TD"==i.tagName&&(i=i.firstChild),"DIV"==i.tagName&&(e.execCommand("mceInsertContent",!1,i.firstChild.data),a.ctrlKey||n.close())},onmouseover:function(e){var i=a(e.target);i&&n.find("#preview").text(i.firstChild.firstChild.data)}};n=e.windowManager.open({title:"Special character",spacing:10,padding:10,items:[c,{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:100,minHeight:80}],buttons:[{text:"Close",onclick:function(){n.close()}}]})}var i=[["160","no-break space"],["38","ampersand"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"],["173","soft hyphen"]];e.addButton("charmap",{icon:"charmap",tooltip:"Special character",onclick:a}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",onclick:a,context:"insert"})});tinymce.PluginManager.add("code",function(e){function o(){e.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:e.getParam("code_dialog_width",600),minHeight:e.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),value:e.getContent({source_view:!0}),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(o){e.focus(),e.undoManager.transact(function(){e.setContent(o.data.code)}),e.selection.setCursorLocation(),e.nodeChanged()}})}e.addCommand("mceCodeEditor",o),e.addButton("code",{icon:"code",tooltip:"Source code",onclick:o}),e.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:o})});tinymce.PluginManager.add("contextmenu",function(e){var n,t=e.settings.contextmenu_never_use_native;e.on("contextmenu",function(i){var o;if(!i.ctrlKey||t){if(i.preventDefault(),o=e.settings.contextmenu||"link image inserttable | cell row column deletetable",n)n.show();else{var c=[];tinymce.each(o.split(/[ ,]/),function(n){var t=e.menuItems[n];"|"==n&&(t={text:n}),t&&(t.shortcut="",c.push(t))});for(var a=0;a'}),t+=""}),t+=""}var i=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];t.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:a,onclick:function(e){var a=t.dom.getParent(e.target,"a");a&&(t.insertContent(''+a.getAttribute('),this.hide())}},tooltip:"Emoticons"})});tinymce.PluginManager.add("fullpage",function(e){function t(){var t=n();e.windowManager.open({title:"Document properties",data:t,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(e){l(tinymce.extend(t,e.data))}})}function n(){function t(e,t){var n=e.attr(t);return n||""}var n,l,a=i(),r={};return r.fontface=e.getParam("fullpage_default_fontface",""),r.fontsize=e.getParam("fullpage_default_fontsize",""),n=a.firstChild,7==n.type&&(r.xml_pi=!0,l=/encoding="([^"]+)"/.exec(n.value),l&&(r.docencoding=l[1])),n=a.getAll("#doctype")[0],n&&(r.doctype=""),n=a.getAll("title")[0],n&&n.firstChild&&(r.title=n.firstChild.value),s(a.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?r[n.toLowerCase()]=e.attr("content"):"Content-Type"==l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")),t&&(r.docencoding=t[1]))}),n=a.getAll("html")[0],n&&(r.langcode=t(n,"lang")||t(n,"xml:lang")),r.stylesheets=[],tinymce.each(a.getAll("link"),function(e){"stylesheet"==e.attr("rel")&&r.stylesheets.push(e.attr("href"))}),n=a.getAll("body")[0],n&&(r.langdir=t(n,"dir"),r.style=t(n,"style"),r.visited_color=t(n,"vlink"),r.link_color=t(n,"link"),r.active_color=t(n,"alink")),r}function l(t){function n(e,t,n){e.attr(t,n?n:void 0)}function l(e){r.firstChild?r.insert(e,r.firstChild):r.append(e)}var a,r,o,c,u,f=e.dom;a=i(),r=a.getAll("head")[0],r||(c=a.getAll("html")[0],r=new m("head",1),c.firstChild?c.insert(r,c.firstChild,!0):c.append(r)),c=a.firstChild,t.xml_pi?(u='version="1.0"',t.docencoding&&(u+=' encoding="'+t.docencoding+'"'),7!=c.type&&(c=new m("xml",7),a.insert(c,a.firstChild,!0)),c.value=u):c&&7==c.type&&c.remove(),c=a.getAll("#doctype")[0],t.doctype?(c||(c=new m("#doctype",10),t.xml_pi?a.insert(c,a.firstChild):l(c)),c.value=t.doctype.substring(9,t.doctype.length-1)):c&&c.remove(),c=null,s(a.getAll("meta"),function(e){"Content-Type"==e.attr("http-equiv")&&(c=e)}),t.docencoding?(c||(c=new m("meta",1),c.attr("http-equiv","Content-Type"),c.shortEnded=!0,l(c)),c.attr("content","text/html; charset="+t.docencoding)):c.remove(),c=a.getAll("title")[0],t.title?(c?c.empty():(c=new m("title",1),l(c)),c.append(new m("#text",3)).value=t.title):c&&c.remove(),s("keywords,description,author,copyright,robots".split(","),function(e){var n,i,r=a.getAll("meta"),o=t[e];for(n=0;n"))}function i(){return new tinymce.html.DomParser({validate:!1,root_name:"#document"}).parse(d)}function a(t){function n(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})}var l,a,o,m,u=t.content,f="",g=e.dom;if(!t.selection&&!("raw"==t.format&&d||t.source_view&&e.getParam("fullpage_hide_in_source_view"))){u=u.replace(/<(\/?)BODY/gi,"<$1body"),l=u.indexOf("",l),d=n(u.substring(0,l+1)),a=u.indexOf("\n"),o=i(),s(o.getAll("style"),function(e){e.firstChild&&(f+=e.firstChild.value)}),m=o.getAll("body")[0],m&&g.setAttribs(e.getBody(),{style:m.attr("style")||"",dir:m.attr("dir")||"",vLink:m.attr("vlink")||"",link:m.attr("link")||"",aLink:m.attr("alink")||""}),g.remove("fullpage_styles");var y=e.getDoc().getElementsByTagName("head")[0];f&&(g.add(y,"style",{id:"fullpage_styles"},f),m=g.get("fullpage_styles"),m.styleSheet&&(m.styleSheet.cssText=f));var h={};tinymce.each(y.getElementsByTagName("link"),function(e){"stylesheet"==e.rel&&e.getAttribute("data-mce-fullpage")&&(h[e.href]=e)}),tinymce.each(o.getAll("link"),function(e){var t=e.attr("href");h[t]||"stylesheet"!=e.attr("rel")||g.add(y,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete h[t]}),tinymce.each(h,function(e){e.parentNode.removeChild(e)})}}function r(){var t,n="",l="";return e.getParam("fullpage_default_xml_pi")&&(n+='\n'),n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=e.getParam("fullpage_default_encoding"))&&(n+='\n'),(t=e.getParam("fullpage_default_font_family"))&&(l+="font-family: "+t+";"),(t=e.getParam("fullpage_default_font_size"))&&(l+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(l+="color: "+t+";"),n+="\n\n"}function o(t){t.selection||t.source_view&&e.getParam("fullpage_hide_in_source_view")||(t.content=tinymce.trim(d)+"\n"+tinymce.trim(t.content)+"\n"+tinymce.trim(c))}var d,c,s=tinymce.each,m=tinymce.html.Node;e.addCommand("mceFullPageProperties",t),e.addButton("fullpage",{title:"Document properties",cmd:"mceFullPageProperties"}),e.addMenuItem("fullpage",{text:"Document properties",cmd:"mceFullPageProperties",context:"file"}),e.on("BeforeSetContent",a),e.on("GetContent",o)});tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,i=document,l=i.body;return l.offsetWidth&&(e=l.offsetWidth,t=l.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){function n(){d.setStyle(a,"height",t().h-(h.clientHeight-a.clientHeight))}var u,h,a,f,m=document.body,g=document.documentElement;s=!s,h=e.getContainer(),u=h.style,a=e.getContentAreaContainer().firstChild,f=a.style,s?(i=f.width,l=f.height,f.width=f.height="100%",c=u.width,o=u.height,u.width=u.height="",d.addClass(m,"mce-fullscreen"),d.addClass(g,"mce-fullscreen"),d.addClass(h,"mce-fullscreen"),d.bind(window,"resize",n),n(),r=n):(f.width=i,f.height=l,c&&(u.width=c),o&&(u.height=o),d.removeClass(m,"mce-fullscreen"),d.removeClass(g,"mce-fullscreen"),d.removeClass(h,"mce-fullscreen"),d.unbind(window,"resize",r)),e.fire("FullscreenStateChanged",{state:s})}var i,l,r,c,o,s=!1,d=tinymce.DOM;return e.settings.inline?void 0:(e.on("init",function(){e.addShortcut("Ctrl+Alt+F","",n)}),e.on("remove",function(){r&&d.unbind(window,"resize",r)}),e.addCommand("mceFullScreen",n),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return s}})});tinymce.PluginManager.add("hr",function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"


      ")}),n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})});tinymce.PluginManager.add("image",function(e){function t(e,t){function i(e,i){n.parentNode&&n.parentNode.removeChild(n),t({width:e,height:i})}var n=document.createElement("img");n.onload=function(){i(n.clientWidth,n.clientHeight)},n.onerror=function(){i()};var a=n.style;a.visibility="hidden",a.position="fixed",a.bottom=a.left=0,a.width=a.height="auto",document.body.appendChild(n),n.src=e}function i(t){return tinymce.each(t,function(t){t.textStyle=function(){return e.formatter.getCssText({inline:"img",classes:[t.value]})}}),t}function n(t){return function(){var i=e.settings.image_list;"string"==typeof i?tinymce.util.XHR.send({url:i,success:function(e){t(tinymce.util.JSON.parse(e))}}):"function"==typeof i?i(t):t(i)}}function a(n){function a(t,i,n){var a,l=[];return tinymce.each(e.settings[t]||n,function(e){var t={text:e.text||e.title,value:e.value};l.push(t),(f[i]===e.value||!a&&e.selected)&&(a=t)}),a&&!f[i]&&(f[i]=a.value,a.selected=!0),l}function l(){var t=[{text:"None",value:""}];return tinymce.each(n,function(i){t.push({text:i.text||i.title,value:e.convertURL(i.value||i.url,"src"),menu:i.menu})}),t}function o(){var e,t,i,n;e=u.find("#width")[0],t=u.find("#height")[0],i=e.value(),n=t.value(),u.find("#constrain")[0].checked()&&g&&h&&i&&n&&(g!=i?(n=Math.round(i/g*n),t.value(n)):(i=Math.round(n/h*i),e.value(i))),g=i,h=n}function s(){function t(t){function i(){t.onload=t.onerror=null,e.selection.select(t),e.nodeChanged()}t.onload=function(){f.width||f.height||y.setAttribs(t,{width:t.clientWidth,height:t.clientHeight}),i()},t.onerror=i}d(),o(),f=tinymce.extend(f,u.toJSON()),f.alt||(f.alt=""),""===f.width&&(f.width=null),""===f.height&&(f.height=null),f.style||(f.style=null),f={src:f.src,alt:f.alt,width:f.width,height:f.height,style:f.style,"class":f["class"]},f["class"]||delete f["class"],e.undoManager.transact(function(){return f.src?(v?y.setAttribs(v,f):(f.id="__mcenew",e.focus(),e.selection.setContent(y.createHTML("img",f)),v=y.get("__mcenew"),y.setAttrib(v,"id",null)),void t(v)):void(v&&(y.remove(v),e.focus(),e.nodeChanged()))})}function r(e){return e&&(e=e.replace(/px$/,"")),e}function c(){m&&m.value(e.convertURL(this.value(),"src")),t(this.value(),function(e){e.width&&e.height&&(g=e.width,h=e.height,u.find("#width").value(g),u.find("#height").value(h))})}function d(){function t(e){return e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e}if(e.settings.image_advtab){var i=u.toJSON(),n=y.parseStyle(i.style);delete n.margin,n["margin-top"]=n["margin-bottom"]=t(i.vspace),n["margin-left"]=n["margin-right"]=t(i.hspace),n["border-width"]=t(i.border),u.find("#style").value(y.serializeStyle(y.parseStyle(y.serializeStyle(n))))}}var u,g,h,m,p,f={},y=e.dom,v=e.selection.getNode();g=y.getAttrib(v,"width"),h=y.getAttrib(v,"height"),"IMG"!=v.nodeName||v.getAttribute("data-mce-object")||v.getAttribute("data-mce-placeholder")?v=null:f={src:y.getAttrib(v,"src"),alt:y.getAttrib(v,"alt"),"class":y.getAttrib(v,"class"),width:g,height:h},n&&(m={type:"listbox",label:"Image list",values:l(),value:f.src&&e.convertURL(f.src,"src"),onselect:function(e){var t=u.find("#alt");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),u.find("#src").value(e.control.value())},onPostRender:function(){m=this}}),e.settings.image_class_list&&(p={name:"class",type:"listbox",label:"Class",values:i(a("image_class_list","class"))});var b=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:c},m];e.settings.image_description!==!1&&b.push({name:"alt",type:"textbox",label:"Image description"}),e.settings.image_dimensions!==!1&&b.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:o,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:o,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),b.push(p),e.settings.image_advtab?(v&&(f.hspace=r(v.style.marginLeft||v.style.marginRight),f.vspace=r(v.style.marginTop||v.style.marginBottom),f.border=r(v.style.borderWidth),f.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(v,"style")))),u=e.windowManager.open({title:"Insert/edit image",data:f,bodyType:"tabpanel",body:[{title:"General",type:"form",items:b},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:d},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:s})):u=e.windowManager.open({title:"Insert/edit image",data:f,body:b,onSubmit:s})}e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:n(a),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),e.addMenuItem("image",{icon:"image",text:"Insert image",onclick:n(a),context:"insert",prependToContext:!0})});tinymce.PluginManager.add("importcss",function(t){function e(t){return"string"==typeof t?function(e){return-1!==e.indexOf(t)}:t instanceof RegExp?function(e){return t.test(e)}:t}function n(e,n){function i(t,e){var c,o=t.href;if(o&&n(o,e)){s(t.imports,function(t){i(t,!0)});try{c=t.cssRules||t.rules}catch(a){}s(c,function(t){t.styleSheet?i(t.styleSheet,!0):t.selectorText&&s(t.selectorText.split(","),function(t){r.push(tinymce.trim(t))})})}}var r=[],c={};s(t.contentCSS,function(t){c[t]=!0}),n||(n=function(t,e){return e||c[t]});try{s(e.styleSheets,function(t){i(t)})}catch(o){}return r}function i(e){var n,i=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(e);if(i){var r=i[1],s=i[2].substr(1).split(".").join(" "),c=tinymce.makeMap("a,img");return i[1]?(n={title:e},t.schema.getTextBlockElements()[r]?n.block=r:t.schema.getBlockElements()[r]||c[r.toLowerCase()]?n.selector=r:n.inline=r):i[2]&&(n={inline:"span",title:e.substr(1),classes:s}),t.settings.importcss_merge_classes!==!1?n.classes=s:n.attributes={"class":s},n}}var r=this,s=tinymce.each;t.on("renderFormatsMenu",function(c){var o=t.settings,a={},l=o.importcss_selector_converter||i,f=e(o.importcss_selector_filter),m=c.control;t.settings.importcss_append||m.items().remove();var u=[];tinymce.each(o.importcss_groups,function(t){t=tinymce.extend({},t),t.filter=e(t.filter),u.push(t)}),s(n(c.doc||t.getDoc(),e(o.importcss_file_filter)),function(e){if(-1===e.indexOf(".mce-")&&!a[e]&&(!f||f(e))){var n,i=l.call(r,e);if(i){var s=i.name||tinymce.DOM.uniqueId();if(u)for(var c=0;c'+n+"";var i=e.dom.getParent(e.selection.getStart(),"time");if(i)return void e.dom.setOuterHTML(i,n)}e.insertContent(n)}var n,r,i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),d="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),c="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),u=[];e.addCommand("mceInsertDate",function(){a(e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){a(e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S")))}),e.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){a(n||r)},menu:u}),tinymce.each(e.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){r||(r=e),u.push({text:t(e),onclick:function(){n=e,a(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:u,context:"insert"})});!function(e){e.on("AddEditor",function(e){e.editor.settings.inline_styles=!1}),e.PluginManager.add("legacyoutput",function(t){t.on("init",function(){var i="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",n=e.explode(t.settings.font_size_style_values),l=t.schema;t.formatter.register({alignleft:{selector:i,attributes:{align:"left"}},aligncenter:{selector:i,attributes:{align:"center"}},alignright:{selector:i,attributes:{align:"right"}},alignjustify:{selector:i,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(t){return e.inArray(n,t.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),e.each("b,i,u,strike".split(","),function(e){l.addValidElements(e+"[*]")}),l.getElementRule("font")||l.addValidElements("font[face|size|color|style]"),e.each(i.split(","),function(e){var t=l.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})})})}(tinymce);tinymce.PluginManager.add("link",function(t){function e(e){return function(){var n=t.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(t){e(tinymce.util.JSON.parse(t))}}):"function"==typeof n?n(e):e(n)}}function n(e){function n(t){var e=d.find("#text");(!e.value()||t.lastControl&&e.value()==t.lastControl.text())&&e.value(t.control.text()),d.find("#href").value(t.control.value())}function l(){var n=[{text:"None",value:""}];return tinymce.each(e,function(e){n.push({text:e.text||e.title,value:t.convertURL(e.value||e.url,"href"),menu:e.menu})}),n}function i(e){return tinymce.each(e,function(e){e.textStyle=function(){return t.formatter.getCssText({inline:"a",classes:[e.value]})}}),e}function a(e,n,l){var i,a=[];return tinymce.each(t.settings[e]||l,function(t){var e={text:t.text||t.title,value:t.value};a.push(e),(b[n]===t.value||!i&&t.selected)&&(i=e)}),i&&!b[n]&&(b[n]=i.value,i.selected=!0),a}function r(e){var l=[];return tinymce.each(t.dom.select("a:not([href])"),function(t){var n=t.name||t.id;n&&l.push({text:n,value:"#"+n,selected:-1!=e.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){h&&h.value(t.convertURL(this.value(),"href")),!f&&0===b.text.length&&x&&this.parent().parent().find("#text")[0].value(this.value())}function s(t){var e=k.getContent();if(/]+>[^<]+<\/a>$/.test(e)||-1==e.indexOf("href=")))return!1;if(t){var n,l=t.childNodes;if(0===l.length)return!1;for(n=l.length-1;n>=0;n--)if(3!=l[n].nodeType)return!1}return!0}var u,c,f,d,x,v,h,g,m,p,y,b={},k=t.selection,w=t.dom;u=k.getNode(),c=w.getParent(u,"a[href]"),x=s(),b.text=f=c?c.innerText||c.textContent:k.getContent({format:"text"}),b.href=c?w.getAttrib(c,"href"):"",b.target=c?w.getAttrib(c,"target"):t.settings.default_link_target||null,b.rel=c?w.getAttrib(c,"rel"):null,b["class"]=c?w.getAttrib(c,"class"):null,b.title=c?w.getAttrib(c,"title"):"",x&&(v={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){b.text=this.value()}}),e&&(h={type:"listbox",label:"Link list",values:l(),onselect:n,value:t.convertURL(b.href,"href"),onPostRender:function(){h=this}}),t.settings.target_list!==!1&&(m={name:"target",type:"listbox",label:"Target",values:a("target_list","target",[{text:"None",value:""},{text:"New window",value:"_blank"}])}),t.settings.rel_list&&(g={name:"rel",type:"listbox",label:"Rel",values:a("rel_list","rel",[{text:"None",value:""}])}),t.settings.link_class_list&&(p={name:"class",type:"listbox",label:"Class",values:i(a("link_class_list","class"))}),t.settings.link_title!==!1&&(y={name:"title",type:"textbox",label:"Title",value:b.title}),d=t.windowManager.open({title:"Insert link",data:b,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},v,y,r(b.href),h,g,m,p],onSubmit:function(e){function n(e,n){var l=t.selection.getRng();window.setTimeout(function(){t.windowManager.confirm(e,function(e){t.selection.setRng(l),n(e)})},0)}function l(){var e={href:i,target:b.target?b.target:null,rel:b.rel?b.rel:null,"class":b["class"]?b["class"]:null,title:b.title?b.title:null};c?(t.focus(),x&&b.text!=f&&("innerText"in c?c.innerText=b.text:c.textContent=b.text),w.setAttribs(c,e),k.select(c),t.undoManager.add()):x?t.insertContent(w.createHTML("a",e,w.encode(b.text))):t.execCommand("mceInsertLink",!1,e)}var i;return b=tinymce.extend(b,e.data),(i=b.href)?i.indexOf("@")>0&&-1==i.indexOf("//")&&-1==i.indexOf("mailto:")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(t){t&&(i="mailto:"+i),l()}):/^\s*www\./i.test(i)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){t&&(i="http://"+i),l()}):void l():void t.execCommand("unlink")}})}t.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:e(n),stateSelector:"a[href]"}),t.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),t.addShortcut("Ctrl+K","",e(n)),this.showDialog=n,t.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:e(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})});tinymce.PluginManager.add("lists",function(e){function t(e){return e&&/^(OL|UL)$/.test(e.nodeName)}function n(e){return e.parentNode.firstChild==e}function r(e){return e.parentNode.lastChild==e}function o(t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]}function i(e){return e&&"SPAN"===e.nodeName&&"bookmark"===e.getAttribute("data-mce-type")}var a=this;e.on("init",function(){function d(e){function t(t){var r,o,i;o=e[t?"startContainer":"endContainer"],i=e[t?"startOffset":"endOffset"],1==o.nodeType&&(r=b.create("span",{"data-mce-type":"bookmark"}),o.hasChildNodes()?(i=Math.min(i,o.childNodes.length-1),t?o.insertBefore(r,o.childNodes[i]):b.insertAfter(r,o.childNodes[i])):o.appendChild(r),o=r,i=0),n[t?"startContainer":"endContainer"]=o,n[t?"startOffset":"endOffset"]=i}var n={};return t(!0),e.collapsed||t(),n}function s(e){function t(t){function n(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t==e)return n;(1!=t.nodeType||"bookmark"!=t.getAttribute("data-mce-type"))&&n++,t=t.nextSibling}return-1}var r,o,i;r=i=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"],r&&(1==r.nodeType&&(o=n(r),r=r.parentNode,b.remove(i)),e[t?"startContainer":"endContainer"]=r,e[t?"startOffset":"endOffset"]=o)}t(!0),t();var n=b.createRng();n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),k.setRng(n)}function f(t,n){var r,o,i,a=b.createFragment(),d=e.schema.getBlockElements();if(e.settings.forced_root_block&&(n=n||e.settings.forced_root_block),n&&(o=b.create(n),o.tagName===e.settings.forced_root_block&&b.setAttribs(o,e.settings.forced_root_block_attrs),a.appendChild(o)),t)for(;r=t.firstChild;){var s=r.nodeName;i||"SPAN"==s&&"bookmark"==r.getAttribute("data-mce-type")||(i=!0),d[s]?(a.appendChild(r),o=null):n?(o||(o=b.create(n),a.appendChild(o)),o.appendChild(r)):a.appendChild(r)}return e.settings.forced_root_block?i||tinymce.Env.ie&&!(tinymce.Env.ie>10)||o.appendChild(b.create("br",{"data-mce-bogus":"1"})):a.appendChild(b.create("br")),a}function l(){return tinymce.grep(k.getSelectedBlocks(),function(e){return"LI"==e.nodeName})}function c(e,t,n){var r,o,i=b.select('span[data-mce-type="bookmark"]',e);n=n||f(t),r=b.createRng(),r.setStartAfter(t),r.setEndAfter(e),o=r.extractContents(),b.isEmpty(o)||b.insertAfter(o,e),b.insertAfter(n,e),b.isEmpty(t.parentNode)&&(tinymce.each(i,function(e){t.parentNode.parentNode.insertBefore(e,t.parentNode)}),b.remove(t.parentNode)),b.remove(t)}function p(e){var n,r;if(n=e.nextSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.appendChild(r);b.remove(n)}if(n=e.previousSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.insertBefore(r,e.firstChild);b.remove(n)}}function u(e){tinymce.each(tinymce.grep(b.select("ol,ul",e)),function(e){var n,r=e.parentNode;"LI"==r.nodeName&&r.firstChild==e&&(n=r.previousSibling,n&&"LI"==n.nodeName&&(n.appendChild(e),b.isEmpty(r)&&b.remove(r))),t(r)&&(n=r.previousSibling,n&&"LI"==n.nodeName&&n.appendChild(e))})}function m(e){function o(e){b.isEmpty(e)&&b.remove(e)}var i,a=e.parentNode,d=a.parentNode;return n(e)&&r(e)?("LI"==d.nodeName?(b.insertAfter(e,d),o(d),b.remove(a)):t(d)?b.remove(a,!0):(d.insertBefore(f(e),a),b.remove(a)),!0):n(e)?("LI"==d.nodeName?(b.insertAfter(e,d),e.appendChild(a),o(d)):t(d)?d.insertBefore(e,a):(d.insertBefore(f(e),a),b.remove(e)),!0):r(e)?("LI"==d.nodeName?b.insertAfter(e,d):t(d)?b.insertAfter(e,a):(b.insertAfter(f(e),a),b.remove(e)),!0):("LI"==d.nodeName?(a=d,i=f(e,"LI")):i=t(d)?f(e,"LI"):f(e),c(a,e,i),u(a.parentNode),!0)}function h(e){function n(n,r){var o;if(t(n)){for(;o=e.lastChild.firstChild;)r.appendChild(o);b.remove(n)}}var r,o;return r=e.previousSibling,r&&t(r)?(r.appendChild(e),!0):r&&"LI"==r.nodeName&&t(r.lastChild)?(r.lastChild.appendChild(e),n(e.lastChild,r.lastChild),!0):(r=e.nextSibling,r&&t(r)?(r.insertBefore(e,r.firstChild),!0):r&&"LI"==r.nodeName&&t(e.lastChild)?!1:(r=e.previousSibling,r&&"LI"==r.nodeName?(o=b.create(e.parentNode.nodeName),r.appendChild(o),o.appendChild(e),n(e.lastChild,o),!0):!1))}function v(){var t=l();if(t.length){for(var n=d(k.getRng(!0)),r=0;r0))return n;for(var o=new tinymce.dom.TreeWalker(e.startContainer);n=o[t?"next":"prev"]();)if(3==n.nodeType&&n.data.length>0)return n}function r(e,n){var r,o,i=e.parentNode;for(t(n.lastChild)&&(o=n.lastChild),r=n.lastChild,r&&"BR"==r.nodeName&&e.hasChildNodes()&&b.remove(r);r=e.firstChild;)n.appendChild(r);o&&n.appendChild(o),b.remove(e),b.isEmpty(i)&&b.remove(i)}if(k.isCollapsed()){var o=b.getParent(k.getStart(),"LI");if(o){var i=k.getRng(!0),a=b.getParent(n(i,e),"LI");if(a&&a!=o){var f=d(i);return e?r(a,o):r(o,a),s(f),!0}if(!a&&!e&&N(o.parentNode.nodeName))return!0}}},e.addCommand("Indent",function(){return v()?void 0:!0}),e.addCommand("Outdent",function(){return C()?void 0:!0}),e.addCommand("InsertUnorderedList",function(){y("UL")}),e.addCommand("InsertOrderedList",function(){y("OL")}),e.on("keydown",function(t){9==t.keyCode&&e.dom.getParent(e.selection.getStart(),"LI")&&(t.preventDefault(),t.shiftKey?C():v())})}),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(){var t=this;e.on("nodechange",function(){for(var r=e.selection.getSelectedBlocks(),o=!1,i=0,a=r.length;!o&&a>i;i++){var d=r[i].nodeName;o="LI"==d&&n(r[i])||"UL"==d||"OL"==d}t.disabled(o)})}}),e.on("keydown",function(e){e.keyCode==tinymce.util.VK.BACKSPACE?a.backspaceDelete()&&e.preventDefault():e.keyCode==tinymce.util.VK.DELETE&&a.backspaceDelete(!0)&&e.preventDefault()})});tinymce.PluginManager.add("media",function(e,t){function i(e){return-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var i=e.settings.media_scripts;if(i)for(var r=0;r':"application/x-shockwave-flash"==o.source1mime?(a+='',o.poster&&(a+=''),a+=""):-1!=o.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(o):a+='":"script"==o.type?a+='':a=e.settings.video_template_callback?e.settings.video_template_callback(o):'"}return a}function s(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var o=r(i.map.src);if(!o)return;t={type:"script",source1:i.map.src,width:o.width,height:o.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function n(t){return t.getAttribute("data-mce-object")?s(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,o,a;for(i in t)if(o=""+t[i],e.map[i])for(r=e.length;r--;)a=e[r],a.name==i&&(o?(e.map[i]=o,a.value=o):(delete e.map[i],e.splice(r,1)));else o&&(e.push({name:i,value:o}),e.map[i]=o)}var o,a=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,s,n){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(s,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(s,{poster:t.poster,src:""}),t.source2&&r(s,{src:""});break;case"iframe":r(s,{src:t.source1});break;case"source":if(c++,2>=c&&(r(s,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;o=!0}a.start(e,s,n)},end:function(e){if("video"==e&&i)for(var s=1;2>=s;s++)if(t["source"+s]){var n=[];n.map={},s>c&&(r(n,{src:t["source"+s],type:t["source"+s+"mime"]}),a.start("source",n,!0))}if(t.poster&&"object"==e&&i&&!o){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),a.start("img",m,!0)}a.end(e)}},new tinymce.html.Schema({})).parse(e),a.getContent()}var u=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"'}];e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("]*>","gi")});var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var o,a,c,s,n,m,u,d,l=t.length;l--;)if(a=t[l],a.parent&&("script"!=a.name||(d=r(a.attr("src"))))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,d&&(d.width&&a.attr("width",d.width.toString()),d.height&&a.attr("height",d.height.toString())),m=a.attributes,o=m.length;o--;)s=m[o].name,n=m[o].value,"width"!==s&&"height"!==s&&"style"!==s&&(("data"==s||"src"==s)&&(n=e.convertURL(n,s)),c.attr("data-mce-p-"+s,n));u=a.firstChild&&a.firstChild.value,u&&(c.attr("data-mce-html",escape(u)),c.firstChild=null),c.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==i?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),a.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,o,a,c,s,n,m=e.length;m--;)if(i=e[m],i.parent){for(n=i.attr(t),r=new tinymce.html.Node(n,1),"audio"!=n&&"script"!=n&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),a=i.attributes,o=a.length;o--;){var u=a[o].name;0===u.indexOf("data-mce-p-")&&r.attr(u.substr(11),a[o].value)}"script"==n&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(s=new tinymce.html.Node("#text",3),s.raw=!0,s.value=unescape(c),r.append(s)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:o,stateSelector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:o,context:"insert",prependToContext:!0})});tinymce.PluginManager.add("nonbreaking",function(n){var e=n.getParam("nonbreaking_force_tab");if(n.addCommand("mceNonBreaking",function(){n.insertContent(n.plugins.visualchars&&n.plugins.visualchars.state?' ':" "),n.dom.setAttrib(n.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),n.addButton("nonbreaking",{title:"Insert nonbreaking space",cmd:"mceNonBreaking"}),n.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),e){var a=+e>1?+e:3;n.on("keydown",function(e){if(9==e.keyCode){if(e.shiftKey)return;e.preventDefault();for(var t=0;a>t;t++)n.execCommand("mceNonBreaking")}})}});tinymce.PluginManager.add("noneditable",function(e){function t(e){var t;if(1===e.nodeType){if(t=e.getAttribute(u),t&&"inherit"!==t)return t;if(t=e.contentEditable,"inherit"!==t)return t}return null}function n(e){for(var n;e;){if(n=t(e))return"false"===n?e:null;e=e.parentNode}}function r(){function r(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function a(e){var t;if(e)for(t=new f(e,e),e=t.current();e;e=t.next())if(3===e.nodeType)return e}function i(n,r){var a,i;return"false"===t(n)&&u.isBlock(n)?void s.select(n):(i=u.createRng(),"true"===t(n)&&(n.firstChild||n.appendChild(e.getDoc().createTextNode(" ")),n=n.firstChild,r=!0),a=u.create("span",{id:g,"data-mce-bogus":!0},m),r?n.parentNode.insertBefore(a,n):u.insertAfter(a,n),i.setStart(a.firstChild,1),i.collapse(!0),s.setRng(i),a)}function o(e){var t,n,i,o;if(e)t=s.getRng(!0),t.setStartBefore(e),t.setEndBefore(e),n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0),s.setRng(t);else for(i=r(s.getStart());(e=u.get(g))&&e!==o;)i!==e&&(n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0)),o=e}function l(){function e(e,n){var r,a,i,o,l;if(r=d.startContainer,a=d.startOffset,3==r.nodeType){if(l=r.nodeValue.length,a>0&&l>a||(n?a==l:0===a))return}else{if(!(a0?a-1:a;r=r.childNodes[u],r.hasChildNodes()&&(r=r.firstChild)}for(i=new f(r,e);o=i[n?"prev":"next"]();){if(3===o.nodeType&&o.nodeValue.length>0)return;if("true"===t(o))return o}return e}var r,a,l,d,u;o(),l=s.isCollapsed(),r=n(s.getStart()),a=n(s.getEnd()),(r||a)&&(d=s.getRng(!0),l?(r=r||a,(u=e(r,!0))?i(u,!0):(u=e(r,!1))?i(u,!1):s.select(r)):(d=s.getRng(!0),r&&d.setStartBefore(r),a&&d.setEndAfter(a),s.setRng(d)))}function d(a){function i(e,t){for(;e=e[t?"previousSibling":"nextSibling"];)if(3!==e.nodeType||e.nodeValue.length>0)return e}function d(e,t){s.select(e),s.collapse(t)}function g(a){function i(e){for(var t=d;t;){if(t===e)return;t=t.parentNode}u.remove(e),l()}function o(){var r,o,l=e.schema.getNonEmptyElements();for(o=new tinymce.dom.TreeWalker(d,e.getBody());(r=a?o.prev():o.next())&&!l[r.nodeName.toLowerCase()]&&!(3===r.nodeType&&tinymce.trim(r.nodeValue).length>0);)if("false"===t(r))return i(r),!0;return n(r)?!0:!1}var f,d,c,g;if(s.isCollapsed()){if(f=s.getRng(!0),d=f.startContainer,c=f.startOffset,d=r(d)||d,g=n(d))return i(g),!1;if(3==d.nodeType&&(a?c>0:ch||h>124)&&h!=c.DELETE&&h!=c.BACKSPACE){if((tinymce.isMac?a.metaKey:a.ctrlKey)&&(67==h||88==h||86==h))return;if(a.preventDefault(),h==c.LEFT||h==c.RIGHT){var y=h==c.LEFT;if(e.dom.isBlock(m)){var T=y?m.previousSibling:m.nextSibling,C=new f(T,T),b=y?C.prev():C.next();d(b,!y)}else d(m,y)}}else if(h==c.LEFT||h==c.RIGHT||h==c.BACKSPACE||h==c.DELETE){if(p=r(v)){if(h==c.LEFT||h==c.BACKSPACE)if(m=i(p,!0),m&&"false"===t(m)){if(a.preventDefault(),h!=c.LEFT)return void u.remove(m);d(m,!0)}else o(p);if(h==c.RIGHT||h==c.DELETE)if(m=i(p),m&&"false"===t(m)){if(a.preventDefault(),h!=c.RIGHT)return void u.remove(m);d(m,!1)}else o(p)}if((h==c.BACKSPACE||h==c.DELETE)&&!g(h==c.BACKSPACE))return a.preventDefault(),!1}}var u=e.dom,s=e.selection,g="mce_noneditablecaret",m="";e.on("mousedown",function(n){var r=e.selection.getNode();"false"===t(r)&&r==n.target&&l()}),e.on("mouseup keyup",l),e.on("keydown",d)}function a(t){var n=l.length,r=t.content,a=tinymce.trim(o);if("raw"!=t.format){for(;n--;)r=r.replace(l[n],function(t){var n=arguments,i=n[n.length-2];return i>0&&'"'==r.charAt(i-1)?t:''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""});t.content=r}}var i,o,l,f=tinymce.dom.TreeWalker,d="contenteditable",u="data-mce-"+d,c=tinymce.util.VK;i=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",o=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ",l=e.getParam("noneditable_regexp"),l&&!l.length&&(l=[l]),e.on("PreInit",function(){r(),l&&e.on("BeforeSetContent",a),e.parser.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)n=e[r],t=" "+n.attr("class")+" ",-1!==t.indexOf(i)?n.attr(u,"true"):-1!==t.indexOf(o)&&n.attr(u,"false")}),e.serializer.addAttributeFilter(u,function(e){for(var t,n=e.length;n--;)t=e[n],l&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):(t.attr(d,null),t.attr(u,null))}),e.parser.addAttributeFilter(d,function(e){for(var t,n=e.length;n--;)t=e[n],t.attr(u,t.attr(d)),t.attr(d,null)})}),e.on("drop",function(e){n(e.target)&&e.preventDefault()})});tinymce.PluginManager.add("pagebreak",function(e){var a="mce-pagebreak",t=e.getParam("pagebreak_separator",""),n=new RegExp(t.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),r='';e.addCommand("mcePageBreak",function(){e.insertContent(e.settings.pagebreak_split_block?"

      "+r+"

      ":r)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(t){"IMG"==t.target.nodeName&&e.dom.hasClass(t.target,a)&&(t.name="pagebreak")}),e.on("click",function(t){t=t.target,"IMG"===t.nodeName&&e.dom.hasClass(t,a)&&e.selection.select(t)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(n,r)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(a){for(var n,r,c=a.length;c--;)if(n=a[c],r=n.attr("class"),r&&-1!==r.indexOf("mce-pagebreak")){var o=n.parent;if(e.schema.getBlockElements()[o.name]&&e.settings.pagebreak_split_block){o.type=3,o.value=t,o.raw=!0,n.remove();continue}n.type=3,n.value=t,n.raw=!0}})})});!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"
      "]]):(e=n.filter(e,[[/\n\n/g,"

      "+a],[/^(.*<\/p>)(

      )$/,a+"$1"],[/\n/g,"
      "]]),-1!=e.indexOf("

      ")&&(e=a+e)),r(e)}function a(){var t=i.dom,n=i.getBody(),r=i.dom.getViewPort(i.getWin()),o=r.y,a=20,s;if(v=i.selection.getRng(),i.inline&&(s=i.selection.getScrollContainer(),s&&s.scrollTop>0&&(o=s.scrollTop)),v.getClientRects){var l=v.getClientRects();if(l.length)a=o+(l[0].top-t.getPos(n).y);else{a=o;var c=v.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&(a=t.getPos(c,s||n).y))}}h=t.add(i.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"1",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},y),(e.ie||e.gecko)&&t.setStyle(h,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(h,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),h.focus(),i.selection.select(h,!0)}function s(){if(h){for(var e;e=i.dom.get("mcepastebin");)i.dom.remove(e),i.dom.unbind(e);v&&i.selection.setRng(v)}x=!1,h=v=null}function l(){var e=y,t,n;for(t=i.dom.select("div[id=mcepastebin]"),n=t.length;n--;){var r=t[n].innerHTML;e==y&&(e=""),r.length>e.length&&(e=r)}return e}function c(e){var t={};if(e&&e.types){var n=e.getData("Text");n&&n.length>0&&(t["text/plain"]=n);for(var i=0;i')},t.readAsDataURL(e.getAsFile()),!0}}if(!(!i.settings.paste_data_images||"text/html"in t||"text/plain"in t)&&e.clipboardData){var o=e.clipboardData.items;if(o)for(var a=0;a0}function p(){i.on("keydown",function(n){if(!n.isDefaultPrevented()&&(t.metaKeyPressed(n)&&86==n.keyCode||n.shiftKey&&45==n.keyCode)){if(x=n.shiftKey&&86==n.keyCode,n.stopImmediatePropagation(),b=(new Date).getTime(),e.ie&&x)return n.preventDefault(),void i.fire("paste",{ieFake:!0});s(),a()}}),i.on("paste",function(t){var c=d(t),f=(new Date).getTime()-b<1e3,p="text"==g.pasteFormat||x;return t.isDefaultPrevented()?void s():u(t,c)?void s():(f||t.preventDefault(),!e.ie||f&&!t.ieFake||(a(),i.dom.bind(h,"paste",function(e){e.stopPropagation()}),i.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e=l();return h&&h.firstChild&&"mcepastebin"===h.firstChild.id&&(p=!0),s(),!p&&f&&e&&e!=y&&(c["text/html"]=e),e!=y&&f||(e=c["text/html"]||c["text/plain"]||y,e!=y)?(!m(c,"text/html")&&m(c,"text/plain")&&(p=!0),void(p?o(c["text/plain"]||n.innerText(e)):r(e))):void(f||i.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."))},0))}),i.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",i.selection.getContent())}catch(t){}}),i.on("drop",function(e){var t=f(e);if(t&&!e.isDefaultPrevented()){var n=c(e.dataTransfer),a=n["mce-internal"]||n["text/html"]||n["text/plain"];a&&(e.preventDefault(),i.undoManager.transact(function(){n["mce-internal"]&&i.execCommand("Delete"),i.selection.setRng(t),n["text/html"]?r(a):o(a)}))}})}var g=this,h,v,b=0,y="%MCEPASTEBIN%",x;g.pasteHtml=r,g.pasteText=o,i.on("preInit",function(){p(),i.parser.addNodeFilter("img",function(t){if(!i.settings.paste_data_images)for(var n=t.length;n--;){var r=t[n].attributes.map.src;r&&0===r.indexOf("data:image")&&(t[n].attr("data-mce-object")||r===e.transparentSrc||t[n].remove())}})}),i.on("PreProcess",function(){i.dom.remove(i.dom.get("mcepastebin"))})}}),i(g,[c,d,u,h,v,l],function(e,t,n,i,r,o){function a(e){return/l?n&&(n=n.parent.parent):(i=n,n=null)),n&&n.name==a?n.append(e):(i=i||n,n=new r(a,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>o&&i&&i.lastChild.append(n),o=l}for(var n,i,o=1,a=e.getAll("p"),s=0;s/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var g=l.paste_word_valid_elements;g||(g="-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br,del");var h=new n({valid_elements:g,valid_children:"-li[p]"});e.each(h.elements,function(e){e.attributes["class"]||(e.attributes["class"]={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var v=new t({},h);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",u(n,n.attr("style"))),"span"==n.name&&n.parent&&!n.attributes.length&&n.unwrap()}),v.addAttributeFilter("class",function(e){for(var t=e.length,n,i;t--;)n=e[t],i=n.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(i)&&n.remove(),n.attr("class",null)}),v.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,i,r;t--;)if(n=e[t],i=n.attr("href"),r=n.attr("name"),i&&-1!=i.indexOf("#_msocom_"))n.remove();else if(i&&0===i.indexOf("file://")&&(i=i.split("#")[1],i&&(i="#"+i)),i||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){n.unwrap();continue}n.attr({href:i,name:r})}else n.unwrap()});var b=v.parse(f);d(b),c.content=new i({},h).serialize(b)}})}return s.isWordContent=a,s}),i(b,[m,c,g,l],function(e,t,n,i){return function(r){function o(e){r.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){return e=i.filter(e,[/^[\s\S]*]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/|/g,[/\u00a0<\/span>/g,"\xa0"],/
      $/i])}function s(e){if(!n.isWordContent(e))return e;var o=[];t.each(r.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
       [\\s\\r\\n]+|
      )*(<\\/?("+o.join("|")+")[^>]*>)(?:
       [\\s\\r\\n]+|
      )*","g");return e=i.filter(e,[[a,"$1"]]),e=i.filter(e,[[/

      /g,"

      "],[/
      /g," "],[/

      /g,"
      "]])}function l(e){if(n.isWordContent(e))return e;var t=r.settings.paste_webkit_styles;if(r.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&&(t=t.split(/[, ]/)),t){var i=r.dom,o=r.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,r,a){var s=i.parseStyle(r,"span"),l={};if("none"===t)return n+a;for(var c=0;c]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,i){return t+' style="'+n+'"'+i})}e.webkit&&(o(l),o(a)),e.ie&&o(s)}}),i(y,[x,f,g,b],function(e,t,n,i){var r;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),r||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),r=!0))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new i(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,f,g,b,y])}(this);tinymce.PluginManager.add("preview",function(e){var t=e.settings,i=!tinymce.Env.ie;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var n,a="";a+='',tinymce.each(e.contentCSS,function(t){a+=''});var r=t.body_id||"tinymce";-1!=r.indexOf("=")&&(r=e.getParam("body_id","","hash"),r=r[e.id]||r);var d=t.body_class||"";-1!=d.indexOf("=")&&(d=e.getParam("body_class","","hash"),d=d[e.id]||"");var o=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";if(n=""+a+'"+e.getContent()+"",i)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(n);else{var s=this.getEl("body").firstChild.contentWindow.document;s.open(),s.write(n),s.close()}}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})});tinymce.PluginManager.add("print",function(t){t.addCommand("mcePrint",function(){t.getWin().print()}),t.addButton("print",{title:"Print",cmd:"mcePrint"}),t.addShortcut("Ctrl+P","","mcePrint"),t.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Ctrl+P",context:"file"})});tinymce.PluginManager.add("save",function(e){function a(){var a;return a=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty()?(tinymce.triggerSave(),e.getParam("save_onsavecallback")?void(e.execCallback("save_onsavecallback",e)&&(e.startContent=tinymce.trim(e.getContent({format:"raw"})),e.nodeChanged())):void(a?(e.isNotDirty=!0,(!a.onsubmit||a.onsubmit())&&("function"==typeof a.submit?a.submit():e.windowManager.alert("Error: Form submit field collision.")),e.nodeChanged()):e.windowManager.alert("Error: No form element found."))):void 0}function n(){var a=tinymce.trim(e.startContent);return e.getParam("save_oncancelcallback")?void e.execCallback("save_oncancelcallback",e):(e.setContent(a),e.undoManager.clear(),void e.nodeChanged())}function t(){var a=this;e.on("nodeChange",function(){a.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",a),e.addCommand("mceCancel",n),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:t}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:t}),e.addShortcut("ctrl+s","","mceSave")});!function(){function e(e,t,n,a,r){function i(e,t){if(t=t||0,!e[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var n=e.index;if(t>0){var a=e[t];if(!a)throw"Invalid capture group";n+=e[0].indexOf(a),e[0]=a}return[n,n+e[0].length,[e[0]]]}function d(e){var t;if(3===e.nodeType)return e.data;if(h[e.nodeName]&&!u[e.nodeName])return"";if(t="",(u[e.nodeName]||m[e.nodeName])&&(t+="\n"),e=e.firstChild)do t+=d(e);while(e=e.nextSibling);return t}function o(e,t,n){var a,r,i,d,o=[],l=0,c=e,s=t.shift(),f=0;e:for(;;){if((u[c.nodeName]||m[c.nodeName])&&l++,3===c.nodeType&&(!r&&c.length+l>=s[1]?(r=c,d=s[1]-l):a&&o.push(c),!a&&c.length+l>s[0]&&(a=c,i=s[0]-l),l+=c.length),a&&r){if(c=n({startNode:a,startNodeIndex:i,endNode:r,endNodeIndex:d,innerNodes:o,match:s[2],matchIndex:f}),l-=r.length-d,a=null,r=null,o=[],s=t.shift(),f++,!s)break}else{if((!h[c.nodeName]||u[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function l(e){var t;if("function"!=typeof e){var n=e.nodeType?e:f.createElement(e);t=function(e,t){var a=n.cloneNode(!1);return a.setAttribute("data-mce-index",t),e&&a.appendChild(f.createTextNode(e)),a}}else t=e;return function(e){var n,a,r,i=e.startNode,d=e.endNode,o=e.matchIndex;if(i===d){var l=i;r=l.parentNode,e.startNodeIndex>0&&(n=f.createTextNode(l.data.substring(0,e.startNodeIndex)),r.insertBefore(n,l));var c=t(e.match[0],o);return r.insertBefore(c,l),e.endNodeIndexh;++h){var g=e.innerNodes[h],p=t(g.data,o);g.parentNode.replaceChild(p,g),u.push(p)}var x=t(d.data.substring(0,e.endNodeIndex),o);return r=i.parentNode,r.insertBefore(n,i),r.insertBefore(s,i),r.removeChild(i),r=d.parentNode,r.insertBefore(x,d),r.insertBefore(a,d),r.removeChild(d),x}}var c,s,f,u,h,m,g=[],p=0;if(f=t.ownerDocument,u=r.getBlockElements(),h=r.getWhiteSpaceElements(),m=r.getShortEndedElements(),s=d(t)){if(e.global)for(;c=e.exec(s);)g.push(i(c,a));else c=s.match(e),g.push(i(c,a));return g.length&&(p=g.length,o(t,g,l(n))),p}}function t(t){function n(){function e(){r.statusbar.find("#next").disabled(!d(s+1).length),r.statusbar.find("#prev").disabled(!d(s-1).length)}function n(){tinymce.ui.MessageBox.alert("Could not find the specified string.",function(){r.find("#find")[0].focus()})}var a={},r=tinymce.ui.Factory.create({type:"window",layout:"flex",pack:"center",align:"center",onClose:function(){t.focus(),c.done()},onSubmit:function(t){var i,o,l,f;return t.preventDefault(),o=r.find("#case").checked(),f=r.find("#words").checked(),l=r.find("#find").value(),l.length?a.text==l&&a.caseState==o&&a.wholeWord==f?0===d(s+1).length?void n():(c.next(),void e()):(i=c.find(l,o,f),i||n(),r.statusbar.items().slice(1).disabled(0===i),e(),void(a={text:l,caseState:o,wholeWord:f})):(c.done(!1),void r.statusbar.items().slice(1).disabled(!0))},buttons:[{text:"Find",onclick:function(){r.submit()}},{text:"Replace",disabled:!0,onclick:function(){c.replace(r.find("#replace").value())||(r.statusbar.items().slice(1).disabled(!0),s=-1,a={})}},{text:"Replace all",disabled:!0,onclick:function(){c.replace(r.find("#replace").value(),!0,!0),r.statusbar.items().slice(1).disabled(!0),a={}}},{type:"spacer",flex:1},{text:"Prev",name:"prev",disabled:!0,onclick:function(){c.prev(),e()}},{text:"Next",name:"next",disabled:!0,onclick:function(){c.next(),e()}}],title:"Find and replace",items:{type:"form",padding:20,labelGap:30,spacing:10,items:[{type:"textbox",name:"find",size:40,label:"Find",value:t.selection.getNode().src},{type:"textbox",name:"replace",size:40,label:"Replace with"},{type:"checkbox",name:"case",text:"Match case",label:" "},{type:"checkbox",name:"words",text:"Whole words",label:" "}]}}).renderTo().reflow()}function a(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function r(n){var a,r;return r=t.dom.create("span",{"data-mce-bogus":1}),r.className="mce-match-marker",a=t.getBody(),c.done(!1),e(n,a,r,!1,t.schema)}function i(e){var t=e.parentNode;e.firstChild&&t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function d(e){var n,r=[];if(n=tinymce.toArray(t.getBody().getElementsByTagName("span")),n.length)for(var i=0;is&&f[o].setAttribute("data-mce-index",m-1)}return t.undoManager.add(),s=p,n?(g=d(p+1).length>0,c.next()):(g=d(p-1).length>0,c.prev()),!r&&g},c.done=function(e){var n,r,d,o;for(r=tinymce.toArray(t.getBody().getElementsByTagName("span")),n=0;n=d.end?(r=c,a=d.end-s):o&&l.push(c),!o&&c.length+s>d.start&&(o=c,i=d.start-s),s+=c.length),o&&r){if(c=n({startNode:o,startNodeIndex:i,endNode:r,endNodeIndex:a,innerNodes:l,match:d.text,matchIndex:u}),s-=r.length-a,o=null,r=null,l=[],d=t.shift(),u++,!d)break}else{if((!P[c.nodeName]||S[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function i(e){function t(t,n){var o=w[n];o.stencil||(o.stencil=e(o));var r=o.stencil.cloneNode(!1);return r.setAttribute("data-mce-index",n),t&&r.appendChild(k.doc.createTextNode(t)),r}return function(e){var n,o,r,i=e.startNode,a=e.endNode,l=e.matchIndex,s=k.doc;if(i===a){var c=i;r=c.parentNode,e.startNodeIndex>0&&(n=s.createTextNode(c.data.substring(0,e.startNodeIndex)),r.insertBefore(n,c));var d=t(e.match,l);return r.insertBefore(d,c),e.endNodeIndexm;++m){var g=e.innerNodes[m],h=t(g.data,l);g.parentNode.replaceChild(h,g),f.push(h)}var v=t(a.data.substring(0,e.endNodeIndex),l);return r=i.parentNode,r.insertBefore(n,i),r.insertBefore(u,i),r.removeChild(i),r=a.parentNode,r.insertBefore(v,a),r.insertBefore(o,a),r.removeChild(a),v}}function a(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function l(t){var n=e.getElementsByTagName("*"),o=[];t="number"==typeof t?""+t:null;for(var r=0;rt&&e(w[t],t)!==!1;t++);return this}function u(t){return w.length&&r(e,w,i(t)),this}function f(e,t){if(C&&e.global)for(;x=e.exec(C);)w.push(n(x,t));return this}function m(e){var t,n=l(e?s(e):null);for(t=n.length;t--;)a(n[t]);return this}function p(e){return w[e.getAttribute("data-mce-index")]}function g(e){return l(s(e))[0]}function h(e,t,n){return w.push({start:e,end:e+t,text:C.substr(e,t),data:n}),this}function v(e){var n=l(s(e)),o=t.dom.createRng();return o.setStartBefore(n[0]),o.setEndAfter(n[n.length-1]),o}function b(e,n){var o=v(e);return o.deleteContents(),n.length>0&&o.insertNode(t.dom.doc.createTextNode(n)),o}function y(){return w.splice(0,w.length),m(),this}var x,w=[],C,k=t.dom,S,P,N;return S=t.schema.getBlockElements(),P=t.schema.getWhiteSpaceElements(),N=t.schema.getShortEndedElements(),C=o(e),{text:C,matches:w,each:d,filter:c,reset:y,matchFromElement:p,elementFromMatch:g,find:f,add:h,wrap:u,unwrap:m,replace:b,rangeFromMatch:v,indexOf:s}}}),o(c,[s,d,u,f,m,p,g,h],function(e,t,n,o,r,i,a,l){t.add("spellchecker",function(t,s){function c(){return C.textMatcher||(C.textMatcher=new e(t.getBody(),t)),C.textMatcher}function d(e,t){var o=[];return n.each(t,function(e){o.push({selectable:!0,text:e.name,data:e.value})}),o}function u(e){for(var t in e)return!1;return!0}function f(e,i){var a=[],l=k[e];n.each(l,function(e){a.push({text:e,onclick:function(){t.insertContent(t.dom.encode(e)),t.dom.remove(i),g()}})}),a.push.apply(a,[{text:"-"},{text:"Ignore",onclick:function(){h(e,i)}},{text:"Ignore all",onclick:function(){h(e,i,!0)}},{text:"Finish",onclick:v}]),P=new o({items:a,context:"contextmenu",onautohide:function(e){-1!=e.target.className.indexOf("spellchecker")&&e.preventDefault()},onhide:function(){P.remove(),P=null}}),P.renderTo(document.body);var s=r.DOM.getPos(t.getContentAreaContainer()),c=t.dom.getPos(i[0]),d=t.dom.getRoot();"BODY"==d.nodeName?(c.x-=d.ownerDocument.documentElement.scrollLeft||d.scrollLeft,c.y-=d.ownerDocument.documentElement.scrollTop||d.scrollTop):(c.x-=d.scrollLeft,c.y-=d.scrollTop),s.x+=c.x,s.y+=c.y,P.moveTo(s.x,s.y+i[0].offsetHeight)}function m(){return t.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e]+',"g")}function p(){function e(e){return t.setProgressState(!1),u(e)?(t.windowManager.alert("No misspellings found"),void(S=!1)):(k=e,c().find(m()).filter(function(t){return!!e[t.text]}).wrap(function(e){return t.dom.create("span",{"class":"mce-spellchecker-word","data-mce-bogus":1,"data-mce-word":e.text})}),void t.fire("SpellcheckStart"))}function n(e){t.windowManager.alert(e),t.setProgressState(!1),v()}function o(e,t,o){i.send({url:new a(s).toAbsolute(N.spellchecker_rpc_url),type:"post",content_type:"application/x-www-form-urlencoded",data:"text="+encodeURIComponent(t)+"&lang="+N.spellchecker_language,success:function(e){e=l.parse(e),e?e.error?n(e.error):o(e.words):n("Sever response wasn't proper JSON.")},error:function(e,t){n("Spellchecker request error: "+t.status)}})}if(S)return void v();v(),S=!0,t.setProgressState(!0);var r=N.spellchecker_callback||o;r.call(C,"spellcheck",c().text,e,n),t.focus()}function g(){t.dom.select("span.mce-spellchecker-word").length||v()}function h(e,o,r){t.selection.collapse(),r?n.each(t.dom.select("span.mce-spellchecker-word"),function(n){n.getAttribute("data-mce-word")==e&&t.dom.remove(n,!0)}):t.dom.remove(o,!0),g()}function v(){c().reset(),C.textMatcher=null,S&&(S=!1,t.fire("SpellcheckEnd"))}function b(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function y(e){var o,r=[];if(o=n.toArray(t.getBody().getElementsByTagName("span")),o.length)for(var i=0;i0){var r=t.dom.createRng();r.setStartBefore(o[0]),r.setEndAfter(o[o.length-1]),t.selection.setRng(r),f(n.getAttribute("data-mce-word"),o)}}}),t.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:p,selectable:!0,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(S)})}});var T={tooltip:"Spellcheck",onclick:p,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(S)})}};w.length>1&&(T.type="splitbutton",T.menu=w,T.onshow=x,T.onselect=function(e){N.spellchecker_language=e.control.settings.data}),t.addButton("spellchecker",T),t.addCommand("mceSpellCheck",p),t.on("remove",function(){P&&(P.remove(),P=null)}),t.on("change",g),this.getTextMatcher=c,this.getWordCharPattern=m,this.getLanguage=function(){return N.spellchecker_language},N.spellchecker_language=N.spellchecker_language||N.language||"en"})}),a([s,c])}(this);tinymce.PluginManager.add("tabfocus",function(e){function n(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function t(n){function t(n){function t(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&t(e.parentNode)}function r(e){return e.tabIndex||"INPUT"==e.nodeName||"TEXTAREA"==e.nodeName}function c(e){return!r(e)&&"-1"!=e.getAttribute("tabindex")&&t(e)}if(u=i.select(":input:enabled,*[tabindex]:not(iframe)"),o(u,function(n,t){return n.id==e.id?(a=t,!1):void 0}),n>0){for(d=a+1;d=0;d--)if(c(u[d]))return u[d];return null}var a,u,c,d;if(!(9!==n.keyCode||n.ctrlKey||n.altKey||n.metaKey)&&(c=r(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==c.length&&(c[1]=c[0],c[0]=":prev"),u=n.shiftKey?":prev"==c[0]?t(-1):i.get(c[0]):":next"==c[1]?t(1):i.get(c[1]))){var y=tinymce.get(u.id||u.name);u.id&&y?y.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),u.focus()},10),n.preventDefault()}}var i=tinymce.DOM,o=tinymce.each,r=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null)}),e.on("keyup",n),tinymce.Env.gecko?e.on("keypress keydown",t):e.on("keydown",t)});!function(e,t){"use strict";function n(e,t){for(var n,o=[],i=0;i "+t+" tr",a);i(n,function(n,r){r+=e,i(I.select("> td, > th",n),function(e,n){var i,a,l,s;if(A[r])for(;A[r][n];)n++;for(l=o(e,"rowspan"),s=o(e,"colspan"),a=r;r+l>a;a++)for(A[a]||(A[a]=[]),i=n;n+s>i;i++)A[a][i]={part:t,real:a==r&&i==n,elm:e,rowspan:l,colspan:s}})}),e+=n.length})}function s(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function c(e,t){var n;return n=A[t],n?n[e]:void 0}function d(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function u(e){return e&&(I.hasClass(e.elm,"mce-item-selected")||e==M)}function f(){var e=[];return i(a.rows,function(t){i(t.cells,function(n){return I.hasClass(n,"mce-item-selected")||M&&n==M.elm?(e.push(t),!1):void 0})}),e}function m(){var e=I.createRng();e.setStartAfter(a),e.setEndAfter(a),E.setRng(e),I.remove(a)}function p(t){var o,a={};return r.settings.table_clone_elements!==!1&&(a=e.makeMap((r.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(t,function(e){var r;return 3==e.nodeType?(i(I.getParents(e.parentNode,null,t).reverse(),function(e){a[e.nodeName]&&(e=s(e,!1),o?r&&r.appendChild(e):o=r=e,r=e)}),r&&(r.innerHTML=n.ie?" ":'
      '),!1):void 0},"childNodes"),t=s(t,!1),d(t,"rowSpan",1),d(t,"colSpan",1),o?t.appendChild(o):n.ie||(t.innerHTML='
      '),t}function g(){var e=I.createRng(),t;return i(I.select("tr",a),function(e){0===e.cells.length&&I.remove(e)}),0===I.select("tr",a).length?(e.setStartBefore(a),e.setEndBefore(a),E.setRng(e),void I.remove(a)):(i(I.select("thead,tbody,tfoot",a),function(e){0===e.rows.length&&I.remove(e)}),l(),void(B&&(t=A[Math.min(A.length-1,B.y)],t&&(E.select(t[Math.min(t.length-1,B.x)].elm,!0),E.collapse(!0)))))}function h(e,t,n,o){var i,r,a,l,s;for(i=A[t][e].elm.parentNode,a=1;n>=a;a++)if(i=I.getNext(i,"tr")){for(r=e;r>=0;r--)if(s=A[t+a][r].elm,s.parentNode==i){for(l=1;o>=l;l++)I.insertAfter(p(s),s);break}if(-1==r)for(l=1;o>=l;l++)i.insertBefore(p(i.cells[0]),i.cells[0])}}function v(){i(A,function(e,t){i(e,function(e,n){var i,r,a;if(u(e)&&(e=e.elm,i=o(e,"colspan"),r=o(e,"rowspan"),i>1||r>1)){for(d(e,"rowSpan",1),d(e,"colSpan",1),a=0;i-1>a;a++)I.insertAfter(p(e),e);h(n,t,r-1,i)}})})}function b(t,n,o){var r,a,s,f,m,p,h,b,y,w,x;if(t?(r=T(t),a=r.x,s=r.y,f=a+(n-1),m=s+(o-1)):(B=D=null,i(A,function(e,t){i(e,function(e,n){u(e)&&(B||(B={x:n,y:t}),D={x:n,y:t})})}),B&&(a=B.x,s=B.y,f=D.x,m=D.y)),b=c(a,s),y=c(f,m),b&&y&&b.part==y.part){for(v(),l(),b=c(a,s).elm,d(b,"colSpan",f-a+1),d(b,"rowSpan",m-s+1),h=s;m>=h;h++)for(p=a;f>=p;p++)A[h]&&A[h][p]&&(t=A[h][p].elm,t!=b&&(w=e.grep(t.childNodes),i(w,function(e){b.appendChild(e)}),w.length&&(w=e.grep(b.childNodes),x=0,i(w,function(e){"BR"==e.nodeName&&I.getAttrib(e,"data-mce-bogus")&&x++0&&A[n-1][l]&&(g=A[n-1][l].elm,h=o(g,"rowSpan"),h>1)){d(g,"rowSpan",h+1);continue}}else if(h=o(r,"rowspan"),h>1){d(r,"rowSpan",h+1);continue}m=p(r),d(m,"colSpan",r.colSpan),f.appendChild(m),a=r}f.hasChildNodes()&&(e?c.parentNode.insertBefore(f,c):I.insertAfter(f,c))}}function w(e){var t,n;i(A,function(n){return i(n,function(n,o){return u(n)&&(t=o,e)?!1:void 0}),e?!t:void 0}),i(A,function(i,r){var a,l,s;i[t]&&(a=i[t].elm,a!=n&&(s=o(a,"colspan"),l=o(a,"rowspan"),1==s?e?(a.parentNode.insertBefore(p(a),a),h(t,r,l-1,s)):(I.insertAfter(p(a),a),h(t,r,l-1,s)):d(a,"colSpan",a.colSpan+1),n=a))})}function x(){var t=[];i(A,function(n){i(n,function(n,r){u(n)&&-1===e.inArray(t,r)&&(i(A,function(e){var t=e[r].elm,n;n=o(t,"colSpan"),n>1?d(t,"colSpan",n-1):I.remove(t)}),t.push(r))})}),g()}function C(){function e(e){var t,n,r;t=I.getNext(e,"tr"),i(e.cells,function(e){var t=o(e,"rowSpan");t>1&&(d(e,"rowSpan",t-1),n=T(e),h(n.x,n.y,1,1))}),n=T(e.cells[0]),i(A[n.y],function(e){var t;e=e.elm,e!=r&&(t=o(e,"rowSpan"),1>=t?I.remove(e):d(e,"rowSpan",t-1),r=e)})}var t;t=f(),i(t.reverse(),function(t){e(t)}),g()}function P(){var e=f();return I.remove(e),g(),e}function S(){var e=f();return i(e,function(t,n){e[n]=s(t,!0)}),e}function R(e,t){var n=f(),o=n[t?0:n.length-1],r=o.cells.length;e&&(i(A,function(e){var t;return r=0,i(e,function(e){e.real&&(r+=e.colspan),e.elm.parentNode==o&&(t=1)}),t?!1:void 0}),t||e.reverse(),i(e,function(e){var n,i=e.cells.length,a;for(n=0;i>n;n++)a=e.cells[n],d(a,"colSpan",1),d(a,"rowSpan",1);for(n=i;r>n;n++)e.appendChild(p(e.cells[i-1]));for(n=r;i>n;n++)I.remove(e.cells[n]);t?o.parentNode.insertBefore(e,o):I.insertAfter(e,o)}),I.removeClass(I.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function T(e){var t;return i(A,function(n,o){return i(n,function(n,i){return n.elm==e?(t={x:i,y:o},!1):void 0}),!t}),t}function k(e){B=T(e)}function N(){var e,t;return e=t=0,i(A,function(n,o){i(n,function(n,i){var r,a;u(n)&&(n=A[o][i],i>e&&(e=i),o>t&&(t=o),n.real&&(r=n.colspan-1,a=n.rowspan-1,r&&i+r>e&&(e=i+r),a&&o+a>t&&(t=o+a)))})}),{x:e,y:t}}function _(e){var t,n,o,i,r,a,l,s,c,d;if(D=T(e),B&&D){for(t=Math.min(B.x,D.x),n=Math.min(B.y,D.y),o=Math.max(B.x,D.x),i=Math.max(B.y,D.y),r=o,a=i,d=n;a>=d;d++)e=A[d][t],e.real||t-(e.colspan-1)=c;c++)e=A[n][c],e.real||n-(e.rowspan-1)=d;d++)for(c=t;o>=c;c++)e=A[d][c],e.real&&(l=e.colspan-1,s=e.rowspan-1,l&&c+l>r&&(r=c+l),s&&d+s>a&&(a=d+s));for(I.removeClass(I.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;r>=c;c++)A[d][c]&&I.addClass(A[d][c].elm,"mce-item-selected")}}var A,B,D,M,E=r.selection,I=E.dom;a=a||I.getParent(E.getStart(),"table"),l(),M=I.getParent(E.getStart(),"th,td"),M&&(B=T(M),D=N(),M=c(B.x,B.y)),e.extend(this,{deleteTable:m,split:v,merge:b,insertRow:y,insertCol:w,deleteCols:x,deleteRows:C,cutRows:P,copyRows:S,pasteRows:R,getPos:T,setStartCell:k,setEndCell:_})}}),o(u,[f,d,c],function(e,t,n){function o(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=n.each;return function(n){function r(){function t(t){function r(e,o){var i=e?"previousSibling":"nextSibling",r=n.dom.getParent(o,"tr"),l=r[i];if(l)return h(n,o,l,e),t.preventDefault(),!0;var d=n.dom.getParent(r,"table"),u=r.parentNode,f=u.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var m=a(e,d,u,"tbody");if(null!==m)return s(e,m,o)}return c(e,r,i,d)}function a(e,t,o,i){var r=n.dom.select(">"+i,t),a=r.indexOf(o);if(e&&0===a||!e&&a===r.length-1)return l(e,t);if(-1===a){var s="thead"===o.tagName.toLowerCase()?0:r.length-1;return r[s]}return r[a+(e?-1:1)]}function l(e,t){var o=e?"thead":"tfoot",i=n.dom.select(">"+o,t);return 0!==i.length?i[0]:null}function s(e,o,i){var r=d(o,e);return r&&h(n,i,r,e),t.preventDefault(),!0}function c(e,o,i,a){var l=a[i];if(l)return u(l),!0;var s=n.dom.getParent(a,"td,th");if(s)return r(e,s,t);var c=d(o,!e);return u(c),t.preventDefault(),!1}function d(e,t){var o=e&&e[t?"lastChild":"firstChild"];return o&&"BR"===o.nodeName?n.dom.getParent(o,"td,th"):o}function u(e){n.selection.setCursorLocation(e,0)}function f(){return y==e.UP||y==e.DOWN}function m(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function p(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=o(n,"colspan");return t}function g(e,t){var n=0,r=0;return i(e.children,function(e,i){return n+=o(e,"colspan"),r=i,n>t?!1:void 0}),r}function h(e,t,o,i){var r=p(n.dom.getParent(t,"td,th")),a=g(o,r),l=o.childNodes[a],s=d(l,i);u(s||l)}function v(e){var t=n.selection.getNode(),o=n.dom.getParent(t,"td,th"),i=n.dom.getParent(e,"td,th");return o&&o!==i&&b(o,i)}function b(e,t){return n.dom.getParent(e,"TABLE")===n.dom.getParent(t,"TABLE")}var y=t.keyCode;if(f()&&m(n)){var w=n.selection.getNode();setTimeout(function(){v(w)&&r(!t.shiftKey&&y===e.UP,w,t)},0)}}n.on("KeyDown",function(e){t(e)})}function a(){function e(e,t){var n=t.ownerDocument,o=n.createRange(),i;return o.setStartBefore(t),o.setEnd(e.endContainer,e.endOffset),i=n.createElement("body"),i.appendChild(o.cloneContents()),0===i.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}n.on("KeyDown",function(t){var o,i,r=n.dom;(37==t.keyCode||38==t.keyCode)&&(o=n.selection.getRng(),i=r.getParent(o.startContainer,"table"),i&&n.getBody().firstChild==i&&e(o,i)&&(o=r.createRng(),o.setStartBefore(i),o.setEndBefore(i),n.selection.setRng(o),t.preventDefault()))})}function l(){n.on("KeyDown SetContent VisualAid",function(){var e;for(e=n.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&!e.getAttribute("data-mce-bogus"))break;e&&"TABLE"==e.nodeName&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,n.settings.forced_root_block_attrs,t.ie&&t.ie<11?" ":'
      '):n.dom.add(n.getBody(),"br",{"data-mce-bogus":"1"}))}),n.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&n.dom.remove(t)})}function s(){function e(e,t,n,o){var i=3,r=e.dom.getParent(t.startContainer,"TABLE"),a,l,s;return r&&(a=r.parentNode),l=t.startContainer.nodeType==i&&0===t.startOffset&&0===t.endOffset&&o&&("TR"==n.nodeName||n==a),s=("TD"==n.nodeName||"TH"==n.nodeName)&&!o,l||s}function t(){var t=n.selection.getRng(),o=n.selection.getNode(),i=n.dom.getParent(t.startContainer,"TD,TH");if(e(n,t,o,i)){i||(i=o);for(var r=i.lastChild;r.lastChild;)r=r.lastChild;t.setEnd(r,r.nodeValue.length),n.selection.setRng(t)}}n.on("KeyDown",function(){t()}),n.on("MouseDown",function(e){2!=e.button&&t()})}function c(){n.on("keydown",function(t){if((t.keyCode==e.DELETE||t.keyCode==e.BACKSPACE)&&!t.isDefaultPrevented()){var o=n.dom.getParent(n.selection.getStart(),"table");if(o){for(var i=n.dom.select("td,th",o),r=i.length;r--;)if(!n.dom.hasClass(i[r],"mce-item-selected"))return;t.preventDefault(),n.execCommand("mceTableDelete")}}})}c(),t.webkit&&(r(),s()),t.gecko&&(a(),l()),t.ie>10&&(a(),l())}}),o(m,[s,p,c],function(e,t,n){return function(o){function i(){o.getBody().style.webkitUserSelect="",d&&(o.dom.removeClass(o.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=!1)}function r(t){var n,i,r=t.target;if(s&&(l||r!=s)&&("TD"==r.nodeName||"TH"==r.nodeName)){i=a.getParent(r,"table"),i==c&&(l||(l=new e(o,i),l.setStartCell(s),o.getBody().style.webkitUserSelect="none"),l.setEndCell(r),d=!0),n=o.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}var a=o.dom,l,s,c,d=!0;return o.on("MouseDown",function(e){2!=e.button&&(i(),s=a.getParent(e.target,"td,th"),c=a.getParent(s,"table"))}),o.on("mouseover",r),o.on("remove",function(){a.unbind(o.getDoc(),"mouseover",r)}),o.on("MouseUp",function(){function e(e,o){var r=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return void(o?i.setStart(e,0):i.setEnd(e,e.nodeValue.length));if("BR"==e.nodeName)return void(o?i.setStartBefore(e):i.setEndBefore(e))}while(e=o?r.next():r.prev())}var i,r=o.selection,d,u,f,m,p;if(s){if(l&&(o.getBody().style.webkitUserSelect=""),d=a.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=a.createRng(),f=d[0],p=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,a.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!a.hasClass(f,"mce-item-selected"))break;m=f}while(f=u.next());e(m),r.setRng(i)}o.nodeChanged(),s=l=c=null}}),o.on("KeyUp Drop",function(){i(),s=l=c=null}),{clear:i}}}),o(g,[s,u,m,c,p,d,h],function(e,t,n,o,i,r,a){function l(o){function i(e){return e?e.replace(/px$/,""):""}function a(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function l(e){s("left center right".split(" "),function(t){o.formatter.remove("align"+t,{},e)})}function c(e){s("top middle bottom".split(" "),function(t){o.formatter.remove("valign"+t,{},e)})}function d(){var e=o.dom,t,n,c,d;t=e.getParent(o.selection.getStart(),"table"),d={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),cellspacing:t?e.getAttrib(t,"cellspacing"):"",cellpadding:t?e.getAttrib(t,"cellpadding"):"",border:t?e.getAttrib(t,"border"):"",caption:!!e.select("caption",t)[0]},s("left center right".split(" "),function(e){o.formatter.matchNode(t,"align"+e)&&(d.align=e)}),t||(n={label:"Cols",name:"cols"},c={label:"Rows",name:"rows"}),o.windowManager.open({title:"Table properties",items:{type:"form",layout:"grid",columns:2,data:d,defaults:{type:"textbox",maxWidth:50},items:[n,c,{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"},{label:"Alignment",minWidth:90,name:"align",type:"listbox",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var n=this.toJSON(),i;o.undoManager.transact(function(){t||(t=g(n.cols||1,n.rows||1)),o.dom.setAttribs(t,{cellspacing:n.cellspacing,cellpadding:n.cellpadding,border:n.border}),o.dom.setStyles(t,{width:a(n.width),height:a(n.height)}),i=e.select("caption",t)[0],i&&!n.caption&&e.remove(i),!i&&n.caption&&(i=e.create("caption"),i.innerHTML=r.ie?"\xa0":'
      ',t.insertBefore(i,t.firstChild)),l(t),n.align&&o.formatter.apply("align"+n.align,{},t),o.focus(),o.addVisual()})}})}function u(e,t){o.windowManager.open({title:"Merge cells",body:[{label:"Cols",name:"cols",type:"textbox",size:10},{label:"Rows",name:"rows",type:"textbox",size:10}],onsubmit:function(){var n=this.toJSON();o.undoManager.transact(function(){e.merge(t,n.cols,n.rows)})}})}function f(){var e=o.dom,t,n,r=[];r=o.dom.select("td.mce-item-selected,th.mce-item-selected"),t=o.dom.getParent(o.selection.getStart(),"td,th"),!r.length&&t&&r.push(t),t=t||r[0],t&&(n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),scope:e.getAttrib(t,"scope")},n.type=t.nodeName.toLowerCase(),s("left center right".split(" "),function(e){o.formatter.matchNode(t,"align"+e)&&(n.align=e)}),s("top middle bottom".split(" "),function(e){o.formatter.matchNode(t,"valign"+e)&&(n.valign=e)}),o.windowManager.open({title:"Cell properties",items:{type:"form",data:n,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"H Align",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"V Align",name:"valign",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}]}]},onsubmit:function(){var t=this.toJSON();o.undoManager.transact(function(){s(r,function(n){o.dom.setAttrib(n,"scope",t.scope),o.dom.setStyles(n,{width:a(t.width),height:a(t.height)}),t.type&&n.nodeName.toLowerCase()!=t.type&&(n=e.rename(n,t.type)),l(n),t.align&&o.formatter.apply("align"+t.align,{},n),c(n),t.valign&&o.formatter.apply("valign"+t.valign,{},n)}),o.focus()})}}))}function m(){var e=o.dom,t,n,r,c,d=[];t=o.dom.getParent(o.selection.getStart(),"table"),n=o.dom.getParent(o.selection.getStart(),"td,th"),s(t.rows,function(t){s(t.cells,function(o){return e.hasClass(o,"mce-item-selected")||o==n?(d.push(t),!1):void 0})}),r=d[0],r&&(c={height:i(e.getStyle(r,"height")||e.getAttrib(r,"height")),scope:e.getAttrib(r,"scope")},c.type=r.parentNode.nodeName.toLowerCase(),s("left center right".split(" "),function(e){o.formatter.matchNode(r,"align"+e)&&(c.align=e)}),o.windowManager.open({title:"Row properties",items:{type:"form",data:c,columns:2,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"None",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"}]},onsubmit:function(){var t=this.toJSON(),n,i,r;o.undoManager.transact(function(){var c=t.type;s(d,function(s){o.dom.setAttrib(s,"scope",t.scope),o.dom.setStyles(s,{height:a(t.height)}),c!=s.parentNode.nodeName.toLowerCase()&&(n=e.getParent(s,"table"),i=s.parentNode,r=e.select(c,n)[0],r||(r=e.create(c),n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r)),r.appendChild(s),i.hasChildNodes()||e.remove(i)),l(s),t.align&&o.formatter.apply("align"+t.align,{},s)}),o.focus()})}}))}function p(e){return function(){o.execCommand(e)}}function g(e,t){var n,i,a;for(a='',n=0;t>n;n++){for(a+="",i=0;e>i;i++)a+="";a+=""}a+="
      "+(r.ie?" ":"
      ")+"
      ",o.insertContent(a);var l=o.dom.get("__mce");return o.dom.setAttrib(l,"id",null),l}function h(e,t){function n(){e.disabled(!o.dom.getParent(o.selection.getStart(),t)),o.selection.selectorChanged(t,function(t){e.disabled(!t)})}o.initialized?n():o.on("init",n)}function v(){h(this,"table")}function b(){h(this,"td,th")}function y(){var e="";e='';for(var t=0;10>t;t++){e+="";for(var n=0;10>n;n++)e+='';e+=""}return e+="
      ",e+='

      '}function w(e,t,n){var i=n.getEl().getElementsByTagName("table")[0],r,a,l,s,c,d=n.isRtl()||"tl-tr"==n.parent().rel;for(i.nextSibling.innerHTML=e+1+" x "+(t+1),d&&(e=9-e),a=0;10>a;a++)for(r=0;10>r;r++)s=i.rows[a].childNodes[r].firstChild,c=(d?r>=e:e>=r)&&t>=a,o.dom.toggleClass(s,"mce-active",c),c&&(l=s);return l.parentNode}var x,C,P=this;o.settings.table_grid===!1?o.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onclick:d}):o.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(e){e.aria&&(this.parent().hideAll(),e.stopImmediatePropagation(),d())},onshow:function(){w(0,0,this.menu.items()[0])},onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");o.dom.removeClass(e,"mce-active"),o.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:y(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t=e.target,n,o;"A"==t.tagName.toUpperCase()&&(n=parseInt(t.getAttribute("data-mce-x"),10),o=parseInt(t.getAttribute("data-mce-y"),10),(this.isRtl()||"tl-tr"==this.parent().rel)&&(n=9-n),(n!==this.lastX||o!==this.lastY)&&(w(n,o,e.control),this.lastX=n,this.lastY=o))},onkeydown:function(e){var t=this.lastX,n=this.lastY,o;switch(e.keyCode){case 37:t>0&&(t--,o=!0);break;case 39:o=!0,9>t&&t++;break;case 38:o=!0,n>0&&n--;break;case 40:o=!0,9>n&&n++}o&&(e.preventDefault(),e.stopPropagation(),w(t,n,e.control).focus(),this.lastX=t,this.lastY=n)},onclick:function(e){"A"==e.target.tagName.toUpperCase()&&(e.preventDefault(),e.stopPropagation(),this.parent().cancel(),g(this.lastX+1,this.lastY+1))}}]}),o.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:v,onclick:d}),o.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:v,cmd:"mceTableDelete"}),o.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:p("mceTableCellProps"),onPostRender:b},{text:"Merge cells",onclick:p("mceTableMergeCells"),onPostRender:b},{text:"Split cell",onclick:p("mceTableSplitCells"),onPostRender:b}]}),o.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:p("mceTableInsertRowBefore"),onPostRender:b},{text:"Insert row after",onclick:p("mceTableInsertRowAfter"),onPostRender:b},{text:"Delete row",onclick:p("mceTableDeleteRow"),onPostRender:b},{text:"Row properties",onclick:p("mceTableRowProps"),onPostRender:b},{text:"-"},{text:"Cut row",onclick:p("mceTableCutRow"),onPostRender:b},{text:"Copy row",onclick:p("mceTableCopyRow"),onPostRender:b},{text:"Paste row before",onclick:p("mceTablePasteRowBefore"),onPostRender:b},{text:"Paste row after",onclick:p("mceTablePasteRowAfter"),onPostRender:b}]}),o.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:p("mceTableInsertColBefore"),onPostRender:b},{text:"Insert column after",onclick:p("mceTableInsertColAfter"),onPostRender:b},{text:"Delete column",onclick:p("mceTableDeleteCol"),onPostRender:b}]});var S=[];s("inserttable tableprops deletetable | cell row column".split(" "),function(e){S.push("|"==e?{text:"-"}:o.menuItems[e])}),o.addButton("table",{type:"menubutton",title:"Table",menu:S}),r.isIE||o.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(o.selection.select(e),o.nodeChanged())}),P.quirks=new t(o),o.on("Init",function(){x=o.windowManager,P.cellSelection=new n(o)}),s({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t,n,i;i=o.dom.getParent(o.selection.getStart(),"th,td"),i&&(t=i.rowSpan,n=i.colSpan),o.dom.select("td.mce-item-selected,th.mce-item-selected").length?e.merge():u(e,i)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){C=e.cutRows()},mceTableCopyRow:function(e){C=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(C,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(C)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){o.addCommand(n,function(){var n=new e(o);n&&(t(n),o.execCommand("mceRepaint"),P.cellSelection.clear())})}),s({mceInsertTable:function(){d()},mceTableRowProps:m,mceTableCellProps:f},function(e,t){o.addCommand(t,function(t,n){e(n)})})}var s=o.each;a.add("table",l)}),a([s,u,m,g])}(this);tinymce.PluginManager.add("template",function(e){function t(t){return function(){var a=e.settings.templates;"string"==typeof a?tinymce.util.XHR.send({url:a,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(a)}}function a(t){function a(t){function a(t){if(-1==t.indexOf("")){var a="";tinymce.each(e.contentCSS,function(t){a+=''}),t=""+a+""+t+""}t=r(t,"template_preview_replace_values");var l=n.find("iframe")[0].getEl().contentWindow.document;l.open(),l.write(t),l.close()}var c=t.control.value();c.url?tinymce.util.XHR.send({url:c.url,success:function(e){l=e,a(l)}}):(l=c.content,a(l)),n.find("#description")[0].text(t.control.value().description)}var n,l,i=[];return t&&0!==t.length?(tinymce.each(t,function(e){i.push({selected:!i.length,text:e.title,value:{url:e.url,content:e.content,description:e.description}})}),n=e.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:i,onselect:a}}]},{type:"label",name:"description",label:"Description",text:" "},{type:"iframe",flex:1,border:1}],onsubmit:function(){c(!1,l)},width:e.getParam("template_popup_width",600),height:e.getParam("template_popup_height",500)}),void n.find("listbox")[0].fire("select")):void e.windowManager.alert("No templates defined")}function n(t,a){function n(e,t){if(e=""+e,e.length0&&(o=p.create("div",null),o.appendChild(s[0].cloneNode(!0))),i(p.select("*",o),function(t){c(t,e.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_cdate_format",e.getLang("template.cdate_format")))),c(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format")))),c(t,e.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(t.innerHTML=m)}),l(o),e.execCommand("mceInsertContent",!1,o.innerHTML),e.addVisual()}var i=tinymce.each;e.addCommand("mceInsertTemplate",c),e.addButton("template",{title:"Insert template",onclick:t(a)}),e.addMenuItem("template",{text:"Insert template",onclick:t(a),context:"insert"}),e.on("PreProcess",function(t){var a=e.dom;i(a.select("div",t.node),function(t){a.hasClass(t,"mceTmpl")&&(i(a.select("*",t),function(t){a.hasClass(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format"))))}),l(t))})})});tinymce.PluginManager.add("textcolor",function(e){function t(){var t,o,l=[];for(o=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],t=0;t',a=o.length-1,c=e.settings.textcolor_rows||5,i=e.settings.textcolor_cols||8,F=0;c>F;F++){for(r+="",n=0;i>n;n++)d=F*i+n,d>a?r+="":(l=o[d],r+='
      ');r+=""}return r+=""}function l(t){var o,l=this.parent();(o=t.target.getAttribute("data-mce-color"))&&(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,l.hidePanel(),o="#"+o,l.color(o),e.execCommand(l.settings.selectcmd,!1,o))}function r(){var t=this;t._color&&e.execCommand(t.settings.selectcmd,!1,t._color)}e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:l},onclick:r}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",selectcmd:"HiliteColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:l},onclick:r})});tinymce.PluginManager.add("visualblocks",function(e,s){function o(){var s=this;s.active(a),e.on("VisualBlocks",function(){s.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var l,t,a;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var o,c=e.dom;l||(l=c.uniqueId(),o=c.create("link",{id:l,rel:"stylesheet",href:s+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(o)),e.on("PreviewFormats AfterPreviewFormats",function(s){a&&c.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==s.type)}),c.toggleClass(e.getBody(),"mce-visualblocks"),a=e.dom.hasClass(e.getBody(),"mce-visualblocks"),t&&t.active(c.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:o}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:o,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))});tinymce.PluginManager.add("visualchars",function(e){function a(a){var t,s,i,r,c,d,l=e.getBody(),m=e.selection;if(n=!n,o.state=n,e.fire("VisualChars",{state:n}),a&&(d=m.getBookmark()),n)for(s=[],tinymce.walk(l,function(e){3==e.nodeType&&e.nodeValue&&-1!=e.nodeValue.indexOf(" ")&&s.push(e)},"childNodes"),i=0;i$1
      '),c=e.dom.create("div",null,r);t=c.lastChild;)e.dom.insertAfter(t,s[i]);e.dom.remove(s[i])}else for(s=e.dom.select("span.mce-nbsp",l),i=s.length-1;i>=0;i--)e.dom.remove(s[i],1);m.moveToBookmark(d)}function t(){var a=this;e.on("VisualChars",function(e){a.active(e.state)})}var n,o=this;e.addCommand("mceVisualChars",a),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:t}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:t,selectable:!0,context:"view",prependToContext:!0}),e.on("beforegetcontent",function(e){n&&"raw"!=e.format&&!e.draft&&(n=!0,a(!1))})});tinymce.PluginManager.add("wordcount",function(e){function t(){e.theme.panel.find("#wordcount").text(["Words: {0}",a.getCount()])}var n,o,a=this;n=e.getParam("wordcount_countregex",/[\w\u2019\x27\-\u00C0-\u1FFF]+/g),o=e.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),e.on("init",function(){var n=e.theme.panel&&e.theme.panel.find("#statusbar")[0];n&&window.setTimeout(function(){n.insert({type:"label",name:"wordcount",text:["Words: {0}",a.getCount()],classes:"wordcount",disabled:e.settings.readonly},0),e.on("setcontent beforeaddundo",t),e.on("keyup",function(e){32==e.keyCode&&t()})},0)}),a.getCount=function(){var t=e.getContent({format:"raw"}),a=0;if(t){t=t.replace(/\.\.\./g," "),t=t.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),t=t.replace(/(\w+)(&#?[a-z0-9]+;)+(\w+)/i,"$1$3").replace(/&.+?;/g," "),t=t.replace(o,"");var r=t.match(n);r&&(a=r.length)}return a}});tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}var i=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||u.toolbar===!1||t(u.toolbar||f),i.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:i}:void 0}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l +
      Pressing "a" while this checkbox is + focused will remove it from the DOM.
      +
      +
      + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html b/www/node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html new file mode 100644 index 0000000..741d7f4 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html @@ -0,0 +1,36 @@ + + +
      CTRL + 1: red
      +
      SHIFT + 1: green
      +
      CTRL + SHIFT + 1: yellow
      +
      ALT + 1: lightblue
      +
      CTRL + ALT + 1: lightgreen
      +
      SHIFT + ALT + 1: silver
      +
      CTRL + SHIFT + ALT + 1: magenta
      + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/linked_image.html b/www/node_modules/selenium-webdriver/lib/test/data/linked_image.html new file mode 100644 index 0000000..7c8df00 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/linked_image.html @@ -0,0 +1,16 @@ + + + + +Linking with an image + + +banner
      +Click here for next page
      +
      +link to other link
      +Just another link.
      +

      + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html b/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html new file mode 100644 index 0000000..42b0442 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html @@ -0,0 +1,13 @@ + + + Boolean Attribute Selected + + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html b/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html new file mode 100644 index 0000000..60cd033 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html @@ -0,0 +1,13 @@ + + + Boolean Attribute Selected + + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/longContentPage.html b/www/node_modules/selenium-webdriver/lib/test/data/longContentPage.html new file mode 100644 index 0000000..99a45e7 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/longContentPage.html @@ -0,0 +1,55 @@ + + + TouchLongContent + + + +

      Touch API

      +

      Page with long content

      +
                         



      +

      Long text:                                                                                                                          This is a very long text to make the screen horizontally movable, to test the flick gesture at a long horizontal distance Normal link                                                                                                                                           at normal and fast speeds to see results of it Normal link end

      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      + Middle of the screen Normal link +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      + Bottom of the screen Normal link


      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/macbeth.html b/www/node_modules/selenium-webdriver/lib/test/data/macbeth.html new file mode 100644 index 0000000..9fa39d5 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/macbeth.html @@ -0,0 +1,5255 @@ + + + + Macbeth: Entire Play + + + + + + + +Quick link to last speech + +

      ACT I

      +

      SCENE I. A desert place.

      +

      +Thunder and lightning. Enter three Witches +
      + +First Witch +
      +When shall we three meet again
      +In thunder, lightning, or in rain?
      +
      + +Second Witch +
      +When the hurlyburly's done,
      +When the battle's lost and won.
      +
      + +Third Witch +
      +That will be ere the set of sun.
      +
      + +First Witch +
      +Where the place?
      +
      + +Second Witch +
      + Upon the heath.
      +
      + +Third Witch +
      +There to meet with Macbeth.
      +
      + +First Witch +
      +I come, Graymalkin!
      +
      + +Second Witch +
      +Paddock calls.
      +
      + +Third Witch +
      +Anon.
      +
      + +ALL +
      +Fair is foul, and foul is fair:
      +Hover through the fog and filthy air.
      +

      Exeunt

      +
      +

      SCENE II. A camp near Forres.

      +

      +Alarum within. Enter DUNCAN, MALCOLM, DONALBAIN, LENNOX, with Attendants, meeting a bleeding Sergeant +
      + +DUNCAN +
      +What bloody man is that? He can report,
      +As seemeth by his plight, of the revolt
      +The newest state.
      +
      + +MALCOLM +
      + This is the sergeant
      +Who like a good and hardy soldier fought
      +'Gainst my captivity. Hail, brave friend!
      +Say to the king the knowledge of the broil
      +As thou didst leave it.
      +
      + +Sergeant +
      +Doubtful it stood;
      +As two spent swimmers, that do cling together
      +And choke their art. The merciless Macdonwald--
      +Worthy to be a rebel, for to that
      +The multiplying villanies of nature
      +Do swarm upon him--from the western isles
      +Of kerns and gallowglasses is supplied;
      +And fortune, on his damned quarrel smiling,
      +Show'd like a rebel's whore: but all's too weak:
      +For brave Macbeth--well he deserves that name--
      +Disdaining fortune, with his brandish'd steel,
      +Which smoked with bloody execution,
      +Like valour's minion carved out his passage
      +Till he faced the slave;
      +Which ne'er shook hands, nor bade farewell to him,
      +Till he unseam'd him from the nave to the chaps,
      +And fix'd his head upon our battlements.
      +
      + +DUNCAN +
      +O valiant cousin! worthy gentleman!
      +
      + +Sergeant +
      +As whence the sun 'gins his reflection
      +Shipwrecking storms and direful thunders break,
      +So from that spring whence comfort seem'd to come
      +Discomfort swells. Mark, king of Scotland, mark:
      +No sooner justice had with valour arm'd
      +Compell'd these skipping kerns to trust their heels,
      +But the Norweyan lord surveying vantage,
      +With furbish'd arms and new supplies of men
      +Began a fresh assault.
      +
      + +DUNCAN +
      +Dismay'd not this
      +Our captains, Macbeth and Banquo?
      +
      + +Sergeant +
      +Yes;
      +As sparrows eagles, or the hare the lion.
      +If I say sooth, I must report they were
      +As cannons overcharged with double cracks, so they
      +Doubly redoubled strokes upon the foe:
      +Except they meant to bathe in reeking wounds,
      +Or memorise another Golgotha,
      +I cannot tell.
      +But I am faint, my gashes cry for help.
      +
      + +DUNCAN +
      +So well thy words become thee as thy wounds;
      +They smack of honour both. Go get him surgeons.
      +

      Exit Sergeant, attended

      +Who comes here?
      +

      Enter ROSS

      +
      + +MALCOLM +
      + The worthy thane of Ross.
      +
      + +LENNOX +
      +What a haste looks through his eyes! So should he look
      +That seems to speak things strange.
      +
      + +ROSS +
      +God save the king!
      +
      + +DUNCAN +
      +Whence camest thou, worthy thane?
      +
      + +ROSS +
      +From Fife, great king;
      +Where the Norweyan banners flout the sky
      +And fan our people cold. Norway himself,
      +With terrible numbers,
      +Assisted by that most disloyal traitor
      +The thane of Cawdor, began a dismal conflict;
      +Till that Bellona's bridegroom, lapp'd in proof,
      +Confronted him with self-comparisons,
      +Point against point rebellious, arm 'gainst arm.
      +Curbing his lavish spirit: and, to conclude,
      +The victory fell on us.
      +
      + +DUNCAN +
      +Great happiness!
      +
      + +ROSS +
      +That now
      +Sweno, the Norways' king, craves composition:
      +Nor would we deign him burial of his men
      +Till he disbursed at Saint Colme's inch
      +Ten thousand dollars to our general use.
      +
      + +DUNCAN +
      +No more that thane of Cawdor shall deceive
      +Our bosom interest: go pronounce his present death,
      +And with his former title greet Macbeth.
      +
      + +ROSS +
      +I'll see it done.
      +
      + +DUNCAN +
      +What he hath lost noble Macbeth hath won.
      +

      Exeunt

      +
      +

      SCENE III. A heath near Forres.

      +

      +Thunder. Enter the three Witches +
      + +First Witch +
      +Where hast thou been, sister?
      +
      + +Second Witch +
      +Killing swine.
      +
      + +Third Witch +
      +Sister, where thou?
      +
      + +First Witch +
      +A sailor's wife had chestnuts in her lap,
      +And munch'd, and munch'd, and munch'd:--
      +'Give me,' quoth I:
      +'Aroint thee, witch!' the rump-fed ronyon cries.
      +Her husband's to Aleppo gone, master o' the Tiger:
      +But in a sieve I'll thither sail,
      +And, like a rat without a tail,
      +I'll do, I'll do, and I'll do.
      +
      + +Second Witch +
      +I'll give thee a wind.
      +
      + +First Witch +
      +Thou'rt kind.
      +
      + +Third Witch +
      +And I another.
      +
      + +First Witch +
      +I myself have all the other,
      +And the very ports they blow,
      +All the quarters that they know
      +I' the shipman's card.
      +I will drain him dry as hay:
      +Sleep shall neither night nor day
      +Hang upon his pent-house lid;
      +He shall live a man forbid:
      +Weary se'nnights nine times nine
      +Shall he dwindle, peak and pine:
      +Though his bark cannot be lost,
      +Yet it shall be tempest-tost.
      +Look what I have.
      +
      + +Second Witch +
      +Show me, show me.
      +
      + +First Witch +
      +Here I have a pilot's thumb,
      +Wreck'd as homeward he did come.
      +

      Drum within

      +
      + +Third Witch +
      +A drum, a drum!
      +Macbeth doth come.
      +
      + +ALL +
      +The weird sisters, hand in hand,
      +Posters of the sea and land,
      +Thus do go about, about:
      +Thrice to thine and thrice to mine
      +And thrice again, to make up nine.
      +Peace! the charm's wound up.
      +

      Enter MACBETH and BANQUO

      +
      + +MACBETH +
      +So foul and fair a day I have not seen.
      +
      + +BANQUO +
      +How far is't call'd to Forres? What are these
      +So wither'd and so wild in their attire,
      +That look not like the inhabitants o' the earth,
      +And yet are on't? Live you? or are you aught
      +That man may question? You seem to understand me,
      +By each at once her chappy finger laying
      +Upon her skinny lips: you should be women,
      +And yet your beards forbid me to interpret
      +That you are so.
      +
      + +MACBETH +
      + Speak, if you can: what are you?
      +
      + +First Witch +
      +All hail, Macbeth! hail to thee, thane of Glamis!
      +
      + +Second Witch +
      +All hail, Macbeth, hail to thee, thane of Cawdor!
      +
      + +Third Witch +
      +All hail, Macbeth, thou shalt be king hereafter!
      +
      + +BANQUO +
      +Good sir, why do you start; and seem to fear
      +Things that do sound so fair? I' the name of truth,
      +Are ye fantastical, or that indeed
      +Which outwardly ye show? My noble partner
      +You greet with present grace and great prediction
      +Of noble having and of royal hope,
      +That he seems rapt withal: to me you speak not.
      +If you can look into the seeds of time,
      +And say which grain will grow and which will not,
      +Speak then to me, who neither beg nor fear
      +Your favours nor your hate.
      +
      + +First Witch +
      +Hail!
      +
      + +Second Witch +
      +Hail!
      +
      + +Third Witch +
      +Hail!
      +
      + +First Witch +
      +Lesser than Macbeth, and greater.
      +
      + +Second Witch +
      +Not so happy, yet much happier.
      +
      + +Third Witch +
      +Thou shalt get kings, though thou be none:
      +So all hail, Macbeth and Banquo!
      +
      + +First Witch +
      +Banquo and Macbeth, all hail!
      +
      + +MACBETH +
      +Stay, you imperfect speakers, tell me more:
      +By Sinel's death I know I am thane of Glamis;
      +But how of Cawdor? the thane of Cawdor lives,
      +A prosperous gentleman; and to be king
      +Stands not within the prospect of belief,
      +No more than to be Cawdor. Say from whence
      +You owe this strange intelligence? or why
      +Upon this blasted heath you stop our way
      +With such prophetic greeting? Speak, I charge you.
      +

      Witches vanish

      +
      + +BANQUO +
      +The earth hath bubbles, as the water has,
      +And these are of them. Whither are they vanish'd?
      +
      + +MACBETH +
      +Into the air; and what seem'd corporal melted
      +As breath into the wind. Would they had stay'd!
      +
      + +BANQUO +
      +Were such things here as we do speak about?
      +Or have we eaten on the insane root
      +That takes the reason prisoner?
      +
      + +MACBETH +
      +Your children shall be kings.
      +
      + +BANQUO +
      +You shall be king.
      +
      + +MACBETH +
      +And thane of Cawdor too: went it not so?
      +
      + +BANQUO +
      +To the selfsame tune and words. Who's here?
      +

      Enter ROSS and ANGUS

      +
      + +ROSS +
      +The king hath happily received, Macbeth,
      +The news of thy success; and when he reads
      +Thy personal venture in the rebels' fight,
      +His wonders and his praises do contend
      +Which should be thine or his: silenced with that,
      +In viewing o'er the rest o' the selfsame day,
      +He finds thee in the stout Norweyan ranks,
      +Nothing afeard of what thyself didst make,
      +Strange images of death. As thick as hail
      +Came post with post; and every one did bear
      +Thy praises in his kingdom's great defence,
      +And pour'd them down before him.
      +
      + +ANGUS +
      +We are sent
      +To give thee from our royal master thanks;
      +Only to herald thee into his sight,
      +Not pay thee.
      +
      + +ROSS +
      +And, for an earnest of a greater honour,
      +He bade me, from him, call thee thane of Cawdor:
      +In which addition, hail, most worthy thane!
      +For it is thine.
      +
      + +BANQUO +
      + What, can the devil speak true?
      +
      + +MACBETH +
      +The thane of Cawdor lives: why do you dress me
      +In borrow'd robes?
      +
      + +ANGUS +
      + Who was the thane lives yet;
      +But under heavy judgment bears that life
      +Which he deserves to lose. Whether he was combined
      +With those of Norway, or did line the rebel
      +With hidden help and vantage, or that with both
      +He labour'd in his country's wreck, I know not;
      +But treasons capital, confess'd and proved,
      +Have overthrown him.
      +
      + +MACBETH +
      +[Aside] Glamis, and thane of Cawdor!
      +The greatest is behind.
      +

      To ROSS and ANGUS

      +Thanks for your pains.
      +

      To BANQUO

      +Do you not hope your children shall be kings,
      +When those that gave the thane of Cawdor to me
      +Promised no less to them?
      +
      + +BANQUO +
      +That trusted home
      +Might yet enkindle you unto the crown,
      +Besides the thane of Cawdor. But 'tis strange:
      +And oftentimes, to win us to our harm,
      +The instruments of darkness tell us truths,
      +Win us with honest trifles, to betray's
      +In deepest consequence.
      +Cousins, a word, I pray you.
      +
      + +MACBETH +
      +[Aside] Two truths are told,
      +As happy prologues to the swelling act
      +Of the imperial theme.--I thank you, gentlemen.
      +

      Aside

      +Cannot be ill, cannot be good: if ill,
      +Why hath it given me earnest of success,
      +Commencing in a truth? I am thane of Cawdor:
      +If good, why do I yield to that suggestion
      +Whose horrid image doth unfix my hair
      +And make my seated heart knock at my ribs,
      +Against the use of nature? Present fears
      +Are less than horrible imaginings:
      +My thought, whose murder yet is but fantastical,
      +Shakes so my single state of man that function
      +Is smother'd in surmise, and nothing is
      +But what is not.
      +
      + +BANQUO +
      + Look, how our partner's rapt.
      +
      + +MACBETH +
      +[Aside] If chance will have me king, why, chance may crown me,
      +Without my stir.
      +
      + +BANQUO +
      + New horrors come upon him,
      +Like our strange garments, cleave not to their mould
      +But with the aid of use.
      +
      + +MACBETH +
      +[Aside] Come what come may,
      +Time and the hour runs through the roughest day.
      +
      + +BANQUO +
      +Worthy Macbeth, we stay upon your leisure.
      +
      + +MACBETH +
      +Give me your favour: my dull brain was wrought
      +With things forgotten. Kind gentlemen, your pains
      +Are register'd where every day I turn
      +The leaf to read them. Let us toward the king.
      +Think upon what hath chanced, and, at more time,
      +The interim having weigh'd it, let us speak
      +Our free hearts each to other.
      +
      + +BANQUO +
      +Very gladly.
      +
      + +MACBETH +
      +Till then, enough. Come, friends.
      +

      Exeunt

      +
      +

      SCENE IV. Forres. The palace.

      +

      +Flourish. Enter DUNCAN, MALCOLM, DONALBAIN, LENNOX, and Attendants +
      + +DUNCAN +
      +Is execution done on Cawdor? Are not
      +Those in commission yet return'd?
      +
      + +MALCOLM +
      +My liege,
      +They are not yet come back. But I have spoke
      +With one that saw him die: who did report
      +That very frankly he confess'd his treasons,
      +Implored your highness' pardon and set forth
      +A deep repentance: nothing in his life
      +Became him like the leaving it; he died
      +As one that had been studied in his death
      +To throw away the dearest thing he owed,
      +As 'twere a careless trifle.
      +
      + +DUNCAN +
      +There's no art
      +To find the mind's construction in the face:
      +He was a gentleman on whom I built
      +An absolute trust.
      +

      Enter MACBETH, BANQUO, ROSS, and ANGUS

      +O worthiest cousin!
      +The sin of my ingratitude even now
      +Was heavy on me: thou art so far before
      +That swiftest wing of recompense is slow
      +To overtake thee. Would thou hadst less deserved,
      +That the proportion both of thanks and payment
      +Might have been mine! only I have left to say,
      +More is thy due than more than all can pay.
      +
      + +MACBETH +
      +The service and the loyalty I owe,
      +In doing it, pays itself. Your highness' part
      +Is to receive our duties; and our duties
      +Are to your throne and state children and servants,
      +Which do but what they should, by doing every thing
      +Safe toward your love and honour.
      +
      + +DUNCAN +
      +Welcome hither:
      +I have begun to plant thee, and will labour
      +To make thee full of growing. Noble Banquo,
      +That hast no less deserved, nor must be known
      +No less to have done so, let me enfold thee
      +And hold thee to my heart.
      +
      + +BANQUO +
      +There if I grow,
      +The harvest is your own.
      +
      + +DUNCAN +
      +My plenteous joys,
      +Wanton in fulness, seek to hide themselves
      +In drops of sorrow. Sons, kinsmen, thanes,
      +And you whose places are the nearest, know
      +We will establish our estate upon
      +Our eldest, Malcolm, whom we name hereafter
      +The Prince of Cumberland; which honour must
      +Not unaccompanied invest him only,
      +But signs of nobleness, like stars, shall shine
      +On all deservers. From hence to Inverness,
      +And bind us further to you.
      +
      + +MACBETH +
      +The rest is labour, which is not used for you:
      +I'll be myself the harbinger and make joyful
      +The hearing of my wife with your approach;
      +So humbly take my leave.
      +
      + +DUNCAN +
      +My worthy Cawdor!
      +
      + +MACBETH +
      +[Aside] The Prince of Cumberland! that is a step
      +On which I must fall down, or else o'erleap,
      +For in my way it lies. Stars, hide your fires;
      +Let not light see my black and deep desires:
      +The eye wink at the hand; yet let that be,
      +Which the eye fears, when it is done, to see.
      +

      Exit

      +
      + +DUNCAN +
      +True, worthy Banquo; he is full so valiant,
      +And in his commendations I am fed;
      +It is a banquet to me. Let's after him,
      +Whose care is gone before to bid us welcome:
      +It is a peerless kinsman.
      +

      Flourish. Exeunt

      +
      +

      SCENE V. Inverness. Macbeth's castle.

      +

      +Enter LADY MACBETH, reading a letter +
      + +LADY MACBETH +
      +'They met me in the day of success: and I have
      +learned by the perfectest report, they have more in
      +them than mortal knowledge. When I burned in desire
      +to question them further, they made themselves air,
      +into which they vanished. Whiles I stood rapt in
      +the wonder of it, came missives from the king, who
      +all-hailed me 'Thane of Cawdor;' by which title,
      +before, these weird sisters saluted me, and referred
      +me to the coming on of time, with 'Hail, king that
      +shalt be!' This have I thought good to deliver
      +thee, my dearest partner of greatness, that thou
      +mightst not lose the dues of rejoicing, by being
      +ignorant of what greatness is promised thee. Lay it
      +to thy heart, and farewell.'
      +Glamis thou art, and Cawdor; and shalt be
      +What thou art promised: yet do I fear thy nature;
      +It is too full o' the milk of human kindness
      +To catch the nearest way: thou wouldst be great;
      +Art not without ambition, but without
      +The illness should attend it: what thou wouldst highly,
      +That wouldst thou holily; wouldst not play false,
      +And yet wouldst wrongly win: thou'ldst have, great Glamis,
      +That which cries 'Thus thou must do, if thou have it;
      +And that which rather thou dost fear to do
      +Than wishest should be undone.' Hie thee hither,
      +That I may pour my spirits in thine ear;
      +And chastise with the valour of my tongue
      +All that impedes thee from the golden round,
      +Which fate and metaphysical aid doth seem
      +To have thee crown'd withal.
      +

      Enter a Messenger

      +What is your tidings?
      +
      + +Messenger +
      +The king comes here to-night.
      +
      + +LADY MACBETH +
      +Thou'rt mad to say it:
      +Is not thy master with him? who, were't so,
      +Would have inform'd for preparation.
      +
      + +Messenger +
      +So please you, it is true: our thane is coming:
      +One of my fellows had the speed of him,
      +Who, almost dead for breath, had scarcely more
      +Than would make up his message.
      +
      + +LADY MACBETH +
      +Give him tending;
      +He brings great news.
      +

      Exit Messenger

      +The raven himself is hoarse
      +That croaks the fatal entrance of Duncan
      +Under my battlements. Come, you spirits
      +That tend on mortal thoughts, unsex me here,
      +And fill me from the crown to the toe top-full
      +Of direst cruelty! make thick my blood;
      +Stop up the access and passage to remorse,
      +That no compunctious visitings of nature
      +Shake my fell purpose, nor keep peace between
      +The effect and it! Come to my woman's breasts,
      +And take my milk for gall, you murdering ministers,
      +Wherever in your sightless substances
      +You wait on nature's mischief! Come, thick night,
      +And pall thee in the dunnest smoke of hell,
      +That my keen knife see not the wound it makes,
      +Nor heaven peep through the blanket of the dark,
      +To cry 'Hold, hold!'
      +

      Enter MACBETH

      +Great Glamis! worthy Cawdor!
      +Greater than both, by the all-hail hereafter!
      +Thy letters have transported me beyond
      +This ignorant present, and I feel now
      +The future in the instant.
      +
      + +MACBETH +
      +My dearest love,
      +Duncan comes here to-night.
      +
      + +LADY MACBETH +
      +And when goes hence?
      +
      + +MACBETH +
      +To-morrow, as he purposes.
      +
      + +LADY MACBETH +
      +O, never
      +Shall sun that morrow see!
      +Your face, my thane, is as a book where men
      +May read strange matters. To beguile the time,
      +Look like the time; bear welcome in your eye,
      +Your hand, your tongue: look like the innocent flower,
      +But be the serpent under't. He that's coming
      +Must be provided for: and you shall put
      +This night's great business into my dispatch;
      +Which shall to all our nights and days to come
      +Give solely sovereign sway and masterdom.
      +
      + +MACBETH +
      +We will speak further.
      +
      + +LADY MACBETH +
      +Only look up clear;
      +To alter favour ever is to fear:
      +Leave all the rest to me.
      +

      Exeunt

      +
      +

      SCENE VI. Before Macbeth's castle.

      +

      +Hautboys and torches. Enter DUNCAN, MALCOLM, DONALBAIN, BANQUO, LENNOX, MACDUFF, ROSS, ANGUS, and Attendants +
      + +DUNCAN +
      +This castle hath a pleasant seat; the air
      +Nimbly and sweetly recommends itself
      +Unto our gentle senses.
      +
      + +BANQUO +
      +This guest of summer,
      +The temple-haunting martlet, does approve,
      +By his loved mansionry, that the heaven's breath
      +Smells wooingly here: no jutty, frieze,
      +Buttress, nor coign of vantage, but this bird
      +Hath made his pendent bed and procreant cradle:
      +Where they most breed and haunt, I have observed,
      +The air is delicate.
      +

      Enter LADY MACBETH

      +
      + +DUNCAN +
      +See, see, our honour'd hostess!
      +The love that follows us sometime is our trouble,
      +Which still we thank as love. Herein I teach you
      +How you shall bid God 'ild us for your pains,
      +And thank us for your trouble.
      +
      + +LADY MACBETH +
      +All our service
      +In every point twice done and then done double
      +Were poor and single business to contend
      +Against those honours deep and broad wherewith
      +Your majesty loads our house: for those of old,
      +And the late dignities heap'd up to them,
      +We rest your hermits.
      +
      + +DUNCAN +
      +Where's the thane of Cawdor?
      +We coursed him at the heels, and had a purpose
      +To be his purveyor: but he rides well;
      +And his great love, sharp as his spur, hath holp him
      +To his home before us. Fair and noble hostess,
      +We are your guest to-night.
      +
      + +LADY MACBETH +
      +Your servants ever
      +Have theirs, themselves and what is theirs, in compt,
      +To make their audit at your highness' pleasure,
      +Still to return your own.
      +
      + +DUNCAN +
      +Give me your hand;
      +Conduct me to mine host: we love him highly,
      +And shall continue our graces towards him.
      +By your leave, hostess.
      +

      Exeunt

      +
      +

      SCENE VII. Macbeth's castle.

      +

      +Hautboys and torches. Enter a Sewer, and divers Servants with dishes and service, and pass over the stage. Then enter MACBETH +
      + +MACBETH +
      +If it were done when 'tis done, then 'twere well
      +It were done quickly: if the assassination
      +Could trammel up the consequence, and catch
      +With his surcease success; that but this blow
      +Might be the be-all and the end-all here,
      +But here, upon this bank and shoal of time,
      +We'ld jump the life to come. But in these cases
      +We still have judgment here; that we but teach
      +Bloody instructions, which, being taught, return
      +To plague the inventor: this even-handed justice
      +Commends the ingredients of our poison'd chalice
      +To our own lips. He's here in double trust;
      +First, as I am his kinsman and his subject,
      +Strong both against the deed; then, as his host,
      +Who should against his murderer shut the door,
      +Not bear the knife myself. Besides, this Duncan
      +Hath borne his faculties so meek, hath been
      +So clear in his great office, that his virtues
      +Will plead like angels, trumpet-tongued, against
      +The deep damnation of his taking-off;
      +And pity, like a naked new-born babe,
      +Striding the blast, or heaven's cherubim, horsed
      +Upon the sightless couriers of the air,
      +Shall blow the horrid deed in every eye,
      +That tears shall drown the wind. I have no spur
      +To prick the sides of my intent, but only
      +Vaulting ambition, which o'erleaps itself
      +And falls on the other.
      +

      Enter LADY MACBETH

      +How now! what news?
      +
      + +LADY MACBETH +
      +He has almost supp'd: why have you left the chamber?
      +
      + +MACBETH +
      +Hath he ask'd for me?
      +
      + +LADY MACBETH +
      +Know you not he has?
      +
      + +MACBETH +
      +We will proceed no further in this business:
      +He hath honour'd me of late; and I have bought
      +Golden opinions from all sorts of people,
      +Which would be worn now in their newest gloss,
      +Not cast aside so soon.
      +
      + +LADY MACBETH +
      +Was the hope drunk
      +Wherein you dress'd yourself? hath it slept since?
      +And wakes it now, to look so green and pale
      +At what it did so freely? From this time
      +Such I account thy love. Art thou afeard
      +To be the same in thine own act and valour
      +As thou art in desire? Wouldst thou have that
      +Which thou esteem'st the ornament of life,
      +And live a coward in thine own esteem,
      +Letting 'I dare not' wait upon 'I would,'
      +Like the poor cat i' the adage?
      +
      + +MACBETH +
      +Prithee, peace:
      +I dare do all that may become a man;
      +Who dares do more is none.
      +
      + +LADY MACBETH +
      +What beast was't, then,
      +That made you break this enterprise to me?
      +When you durst do it, then you were a man;
      +And, to be more than what you were, you would
      +Be so much more the man. Nor time nor place
      +Did then adhere, and yet you would make both:
      +They have made themselves, and that their fitness now
      +Does unmake you. I have given suck, and know
      +How tender 'tis to love the babe that milks me:
      +I would, while it was smiling in my face,
      +Have pluck'd my nipple from his boneless gums,
      +And dash'd the brains out, had I so sworn as you
      +Have done to this.
      +
      + +MACBETH +
      + If we should fail?
      +
      + +LADY MACBETH +
      +We fail!
      +But screw your courage to the sticking-place,
      +And we'll not fail. When Duncan is asleep--
      +Whereto the rather shall his day's hard journey
      +Soundly invite him--his two chamberlains
      +Will I with wine and wassail so convince
      +That memory, the warder of the brain,
      +Shall be a fume, and the receipt of reason
      +A limbeck only: when in swinish sleep
      +Their drenched natures lie as in a death,
      +What cannot you and I perform upon
      +The unguarded Duncan? what not put upon
      +His spongy officers, who shall bear the guilt
      +Of our great quell?
      +
      + +MACBETH +
      +Bring forth men-children only;
      +For thy undaunted mettle should compose
      +Nothing but males. Will it not be received,
      +When we have mark'd with blood those sleepy two
      +Of his own chamber and used their very daggers,
      +That they have done't?
      +
      + +LADY MACBETH +
      +Who dares receive it other,
      +As we shall make our griefs and clamour roar
      +Upon his death?
      +
      + +MACBETH +
      + I am settled, and bend up
      +Each corporal agent to this terrible feat.
      +Away, and mock the time with fairest show:
      +False face must hide what the false heart doth know.
      +

      Exeunt

      +

      +

      ACT II

      +

      SCENE I. Court of Macbeth's castle.

      +

      +Enter BANQUO, and FLEANCE bearing a torch before him +
      + +BANQUO +
      +How goes the night, boy?
      +
      + +FLEANCE +
      +The moon is down; I have not heard the clock.
      +
      + +BANQUO +
      +And she goes down at twelve.
      +
      + +FLEANCE +
      +I take't, 'tis later, sir.
      +
      + +BANQUO +
      +Hold, take my sword. There's husbandry in heaven;
      +Their candles are all out. Take thee that too.
      +A heavy summons lies like lead upon me,
      +And yet I would not sleep: merciful powers,
      +Restrain in me the cursed thoughts that nature
      +Gives way to in repose!
      +

      Enter MACBETH, and a Servant with a torch

      +Give me my sword.
      +Who's there?
      +
      + +MACBETH +
      +A friend.
      +
      + +BANQUO +
      +What, sir, not yet at rest? The king's a-bed:
      +He hath been in unusual pleasure, and
      +Sent forth great largess to your offices.
      +This diamond he greets your wife withal,
      +By the name of most kind hostess; and shut up
      +In measureless content.
      +
      + +MACBETH +
      +Being unprepared,
      +Our will became the servant to defect;
      +Which else should free have wrought.
      +
      + +BANQUO +
      +All's well.
      +I dreamt last night of the three weird sisters:
      +To you they have show'd some truth.
      +
      + +MACBETH +
      +I think not of them:
      +Yet, when we can entreat an hour to serve,
      +We would spend it in some words upon that business,
      +If you would grant the time.
      +
      + +BANQUO +
      +At your kind'st leisure.
      +
      + +MACBETH +
      +If you shall cleave to my consent, when 'tis,
      +It shall make honour for you.
      +
      + +BANQUO +
      +So I lose none
      +In seeking to augment it, but still keep
      +My bosom franchised and allegiance clear,
      +I shall be counsell'd.
      +
      + +MACBETH +
      +Good repose the while!
      +
      + +BANQUO +
      +Thanks, sir: the like to you!
      +

      Exeunt BANQUO and FLEANCE

      +
      + +MACBETH +
      +Go bid thy mistress, when my drink is ready,
      +She strike upon the bell. Get thee to bed.
      +

      Exit Servant

      +Is this a dagger which I see before me,
      +The handle toward my hand? Come, let me clutch thee.
      +I have thee not, and yet I see thee still.
      +Art thou not, fatal vision, sensible
      +To feeling as to sight? or art thou but
      +A dagger of the mind, a false creation,
      +Proceeding from the heat-oppressed brain?
      +I see thee yet, in form as palpable
      +As this which now I draw.
      +Thou marshall'st me the way that I was going;
      +And such an instrument I was to use.
      +Mine eyes are made the fools o' the other senses,
      +Or else worth all the rest; I see thee still,
      +And on thy blade and dudgeon gouts of blood,
      +Which was not so before. There's no such thing:
      +It is the bloody business which informs
      +Thus to mine eyes. Now o'er the one halfworld
      +Nature seems dead, and wicked dreams abuse
      +The curtain'd sleep; witchcraft celebrates
      +Pale Hecate's offerings, and wither'd murder,
      +Alarum'd by his sentinel, the wolf,
      +Whose howl's his watch, thus with his stealthy pace.
      +With Tarquin's ravishing strides, towards his design
      +Moves like a ghost. Thou sure and firm-set earth,
      +Hear not my steps, which way they walk, for fear
      +Thy very stones prate of my whereabout,
      +And take the present horror from the time,
      +Which now suits with it. Whiles I threat, he lives:
      +Words to the heat of deeds too cold breath gives.
      +

      A bell rings

      +I go, and it is done; the bell invites me.
      +Hear it not, Duncan; for it is a knell
      +That summons thee to heaven or to hell.
      +

      Exit

      +
      +

      SCENE II. The same.

      +

      +Enter LADY MACBETH +
      + +LADY MACBETH +
      +That which hath made them drunk hath made me bold;
      +What hath quench'd them hath given me fire.
      +Hark! Peace!
      +It was the owl that shriek'd, the fatal bellman,
      +Which gives the stern'st good-night. He is about it:
      +The doors are open; and the surfeited grooms
      +Do mock their charge with snores: I have drugg'd
      +their possets,
      +That death and nature do contend about them,
      +Whether they live or die.
      +
      + +MACBETH +
      +[Within] Who's there? what, ho!
      +
      + +LADY MACBETH +
      +Alack, I am afraid they have awaked,
      +And 'tis not done. The attempt and not the deed
      +Confounds us. Hark! I laid their daggers ready;
      +He could not miss 'em. Had he not resembled
      +My father as he slept, I had done't.
      +

      Enter MACBETH

      +My husband!
      +
      + +MACBETH +
      +I have done the deed. Didst thou not hear a noise?
      +
      + +LADY MACBETH +
      +I heard the owl scream and the crickets cry.
      +Did not you speak?
      +
      + +MACBETH +
      + When?
      +
      + +LADY MACBETH +
      +Now.
      +
      + +MACBETH +
      +As I descended?
      +
      + +LADY MACBETH +
      +Ay.
      +
      + +MACBETH +
      +Hark!
      +Who lies i' the second chamber?
      +
      + +LADY MACBETH +
      +Donalbain.
      +
      + +MACBETH +
      +This is a sorry sight.
      +

      Looking on his hands

      +
      + +LADY MACBETH +
      +A foolish thought, to say a sorry sight.
      +
      + +MACBETH +
      +There's one did laugh in's sleep, and one cried
      +'Murder!'
      +That they did wake each other: I stood and heard them:
      +But they did say their prayers, and address'd them
      +Again to sleep.
      +
      + +LADY MACBETH +
      + There are two lodged together.
      +
      + +MACBETH +
      +One cried 'God bless us!' and 'Amen' the other;
      +As they had seen me with these hangman's hands.
      +Listening their fear, I could not say 'Amen,'
      +When they did say 'God bless us!'
      +
      + +LADY MACBETH +
      +Consider it not so deeply.
      +
      + +MACBETH +
      +But wherefore could not I pronounce 'Amen'?
      +I had most need of blessing, and 'Amen'
      +Stuck in my throat.
      +
      + +LADY MACBETH +
      +These deeds must not be thought
      +After these ways; so, it will make us mad.
      +
      + +MACBETH +
      +Methought I heard a voice cry 'Sleep no more!
      +Macbeth does murder sleep', the innocent sleep,
      +Sleep that knits up the ravell'd sleeve of care,
      +The death of each day's life, sore labour's bath,
      +Balm of hurt minds, great nature's second course,
      +Chief nourisher in life's feast,--
      +
      + +LADY MACBETH +
      +What do you mean?
      +
      + +MACBETH +
      +Still it cried 'Sleep no more!' to all the house:
      +'Glamis hath murder'd sleep, and therefore Cawdor
      +Shall sleep no more; Macbeth shall sleep no more.'
      +
      + +LADY MACBETH +
      +Who was it that thus cried? Why, worthy thane,
      +You do unbend your noble strength, to think
      +So brainsickly of things. Go get some water,
      +And wash this filthy witness from your hand.
      +Why did you bring these daggers from the place?
      +They must lie there: go carry them; and smear
      +The sleepy grooms with blood.
      +
      + +MACBETH +
      +I'll go no more:
      +I am afraid to think what I have done;
      +Look on't again I dare not.
      +
      + +LADY MACBETH +
      +Infirm of purpose!
      +Give me the daggers: the sleeping and the dead
      +Are but as pictures: 'tis the eye of childhood
      +That fears a painted devil. If he do bleed,
      +I'll gild the faces of the grooms withal;
      +For it must seem their guilt.
      +

      Exit. Knocking within

      +
      + +MACBETH +
      +Whence is that knocking?
      +How is't with me, when every noise appals me?
      +What hands are here? ha! they pluck out mine eyes.
      +Will all great Neptune's ocean wash this blood
      +Clean from my hand? No, this my hand will rather
      +The multitudinous seas in incarnadine,
      +Making the green one red.
      +

      Re-enter LADY MACBETH

      +
      + +LADY MACBETH +
      +My hands are of your colour; but I shame
      +To wear a heart so white.
      +

      Knocking within

      +I hear a knocking
      +At the south entry: retire we to our chamber;
      +A little water clears us of this deed:
      +How easy is it, then! Your constancy
      +Hath left you unattended.
      +

      Knocking within

      +Hark! more knocking.
      +Get on your nightgown, lest occasion call us,
      +And show us to be watchers. Be not lost
      +So poorly in your thoughts.
      +
      + +MACBETH +
      +To know my deed, 'twere best not know myself.
      +

      Knocking within

      +Wake Duncan with thy knocking! I would thou couldst!
      +

      Exeunt

      +
      +

      SCENE III. The same.

      +

      +Knocking within. Enter a Porter +
      + +Porter +
      +Here's a knocking indeed! If a
      +man were porter of hell-gate, he should have
      +old turning the key.
      +

      Knocking within

      +Knock,
      +knock, knock! Who's there, i' the name of
      +Beelzebub? Here's a farmer, that hanged
      +himself on the expectation of plenty: come in
      +time; have napkins enow about you; here
      +you'll sweat for't.
      +

      Knocking within

      +Knock,
      +knock! Who's there, in the other devil's
      +name? Faith, here's an equivocator, that could
      +swear in both the scales against either scale;
      +who committed treason enough for God's sake,
      +yet could not equivocate to heaven: O, come
      +in, equivocator.
      +

      Knocking within

      +Knock,
      +knock, knock! Who's there? Faith, here's an
      +English tailor come hither, for stealing out of
      +a French hose: come in, tailor; here you may
      +roast your goose.
      +

      Knocking within

      +Knock,
      +knock; never at quiet! What are you? But
      +this place is too cold for hell. I'll devil-porter
      +it no further: I had thought to have let in
      +some of all professions that go the primrose
      +way to the everlasting bonfire.
      +

      Knocking within

      +Anon, anon! I pray you, remember the porter.
      +

      Opens the gate

      +

      Enter MACDUFF and LENNOX

      +
      + +MACDUFF +
      +Was it so late, friend, ere you went to bed,
      +That you do lie so late?
      +
      + +Porter +
      +'Faith sir, we were carousing till the
      +second cock: and drink, sir, is a great
      +provoker of three things.
      +
      + +MACDUFF +
      +What three things does drink especially provoke?
      +
      + +Porter +
      +Marry, sir, nose-painting, sleep, and
      +urine. Lechery, sir, it provokes, and unprovokes;
      +it provokes the desire, but it takes
      +away the performance: therefore, much drink
      +may be said to be an equivocator with lechery:
      +it makes him, and it mars him; it sets
      +him on, and it takes him off; it persuades him,
      +and disheartens him; makes him stand to, and
      +not stand to; in conclusion, equivocates him
      +in a sleep, and, giving him the lie, leaves him.
      +
      + +MACDUFF +
      +I believe drink gave thee the lie last night.
      +
      + +Porter +
      +That it did, sir, i' the very throat on
      +me: but I requited him for his lie; and, I
      +think, being too strong for him, though he took
      +up my legs sometime, yet I made a shift to cast
      +him.
      +
      + +MACDUFF +
      +Is thy master stirring?
      +

      Enter MACBETH

      +Our knocking has awaked him; here he comes.
      +
      + +LENNOX +
      +Good morrow, noble sir.
      +
      + +MACBETH +
      +Good morrow, both.
      +
      + +MACDUFF +
      +Is the king stirring, worthy thane?
      +
      + +MACBETH +
      +Not yet.
      +
      + +MACDUFF +
      +He did command me to call timely on him:
      +I have almost slipp'd the hour.
      +
      + +MACBETH +
      +I'll bring you to him.
      +
      + +MACDUFF +
      +I know this is a joyful trouble to you;
      +But yet 'tis one.
      +
      + +MACBETH +
      +The labour we delight in physics pain.
      +This is the door.
      +
      + +MACDUFF +
      + I'll make so bold to call,
      +For 'tis my limited service.
      +

      Exit

      +
      + +LENNOX +
      +Goes the king hence to-day?
      +
      + +MACBETH +
      +He does: he did appoint so.
      +
      + +LENNOX +
      +The night has been unruly: where we lay,
      +Our chimneys were blown down; and, as they say,
      +Lamentings heard i' the air; strange screams of death,
      +And prophesying with accents terrible
      +Of dire combustion and confused events
      +New hatch'd to the woeful time: the obscure bird
      +Clamour'd the livelong night: some say, the earth
      +Was feverous and did shake.
      +
      + +MACBETH +
      +'Twas a rough night.
      +
      + +LENNOX +
      +My young remembrance cannot parallel
      +A fellow to it.
      +

      Re-enter MACDUFF

      +
      + +MACDUFF +
      +O horror, horror, horror! Tongue nor heart
      +Cannot conceive nor name thee!
      +
      + +MACBETH + +LENNOX +
      +What's the matter.
      +
      + +MACDUFF +
      +Confusion now hath made his masterpiece!
      +Most sacrilegious murder hath broke ope
      +The Lord's anointed temple, and stole thence
      +The life o' the building!
      +
      + +MACBETH +
      +What is 't you say? the life?
      +
      + +LENNOX +
      +Mean you his majesty?
      +
      + +MACDUFF +
      +Approach the chamber, and destroy your sight
      +With a new Gorgon: do not bid me speak;
      +See, and then speak yourselves.
      +

      Exeunt MACBETH and LENNOX

      +Awake, awake!
      +Ring the alarum-bell. Murder and treason!
      +Banquo and Donalbain! Malcolm! awake!
      +Shake off this downy sleep, death's counterfeit,
      +And look on death itself! up, up, and see
      +The great doom's image! Malcolm! Banquo!
      +As from your graves rise up, and walk like sprites,
      +To countenance this horror! Ring the bell.
      +

      Bell rings

      +

      Enter LADY MACBETH

      +
      + +LADY MACBETH +
      +What's the business,
      +That such a hideous trumpet calls to parley
      +The sleepers of the house? speak, speak!
      +
      + +MACDUFF +
      +O gentle lady,
      +'Tis not for you to hear what I can speak:
      +The repetition, in a woman's ear,
      +Would murder as it fell.
      +

      Enter BANQUO

      +O Banquo, Banquo,
      +Our royal master 's murder'd!
      +
      + +LADY MACBETH +
      +Woe, alas!
      +What, in our house?
      +
      + +BANQUO +
      +Too cruel any where.
      +Dear Duff, I prithee, contradict thyself,
      +And say it is not so.
      +

      Re-enter MACBETH and LENNOX, with ROSS

      +
      + +MACBETH +
      +Had I but died an hour before this chance,
      +I had lived a blessed time; for, from this instant,
      +There 's nothing serious in mortality:
      +All is but toys: renown and grace is dead;
      +The wine of life is drawn, and the mere lees
      +Is left this vault to brag of.
      +

      Enter MALCOLM and DONALBAIN

      +
      + +DONALBAIN +
      +What is amiss?
      +
      + +MACBETH +
      + You are, and do not know't:
      +The spring, the head, the fountain of your blood
      +Is stopp'd; the very source of it is stopp'd.
      +
      + +MACDUFF +
      +Your royal father 's murder'd.
      +
      + +MALCOLM +
      +O, by whom?
      +
      + +LENNOX +
      +Those of his chamber, as it seem'd, had done 't:
      +Their hands and faces were an badged with blood;
      +So were their daggers, which unwiped we found
      +Upon their pillows:
      +They stared, and were distracted; no man's life
      +Was to be trusted with them.
      +
      + +MACBETH +
      +O, yet I do repent me of my fury,
      +That I did kill them.
      +
      + +MACDUFF +
      +Wherefore did you so?
      +
      + +MACBETH +
      +Who can be wise, amazed, temperate and furious,
      +Loyal and neutral, in a moment? No man:
      +The expedition my violent love
      +Outrun the pauser, reason. Here lay Duncan,
      +His silver skin laced with his golden blood;
      +And his gash'd stabs look'd like a breach in nature
      +For ruin's wasteful entrance: there, the murderers,
      +Steep'd in the colours of their trade, their daggers
      +Unmannerly breech'd with gore: who could refrain,
      +That had a heart to love, and in that heart
      +Courage to make 's love kno wn?
      +
      + +LADY MACBETH +
      +Help me hence, ho!
      +
      + +MACDUFF +
      +Look to the lady.
      +
      + +MALCOLM +
      +[Aside to DONALBAIN] Why do we hold our tongues,
      +That most may claim this argument for ours?
      +
      + +DONALBAIN +
      +[Aside to MALCOLM] What should be spoken here,
      +where our fate,
      +Hid in an auger-hole, may rush, and seize us?
      +Let 's away;
      +Our tears are not yet brew'd.
      +
      + +MALCOLM +
      +[Aside to DONALBAIN] Nor our strong sorrow
      +Upon the foot of motion.
      +
      + +BANQUO +
      +Look to the lady:
      +

      LADY MACBETH is carried out

      +And when we have our naked frailties hid,
      +That suffer in exposure, let us meet,
      +And question this most bloody piece of work,
      +To know it further. Fears and scruples shake us:
      +In the great hand of God I stand; and thence
      +Against the undivulged pretence I fight
      +Of treasonous malice.
      +
      + +MACDUFF +
      +And so do I.
      +
      + +ALL +
      +So all.
      +
      + +MACBETH +
      +Let's briefly put on manly readiness,
      +And meet i' the hall together.
      +
      + +ALL +
      +Well contented.
      +

      Exeunt all but Malcolm and Donalbain.

      +
      + +MALCOLM +
      +What will you do? Let's not consort with them:
      +To show an unfelt sorrow is an office
      +Which the false man does easy. I'll to England.
      +
      + +DONALBAIN +
      +To Ireland, I; our separated fortune
      +Shall keep us both the safer: where we are,
      +There's daggers in men's smiles: the near in blood,
      +The nearer bloody.
      +
      + +MALCOLM +
      + This murderous shaft that's shot
      +Hath not yet lighted, and our safest way
      +Is to avoid the aim. Therefore, to horse;
      +And let us not be dainty of leave-taking,
      +But shift away: there's warrant in that theft
      +Which steals itself, when there's no mercy left.
      +

      Exeunt

      +
      +

      SCENE IV. Outside Macbeth's castle.

      +

      +Enter ROSS and an old Man +
      + +Old Man +
      +Threescore and ten I can remember well:
      +Within the volume of which time I have seen
      +Hours dreadful and things strange; but this sore night
      +Hath trifled former knowings.
      +
      + +ROSS +
      +Ah, good father,
      +Thou seest, the heavens, as troubled with man's act,
      +Threaten his bloody stage: by the clock, 'tis day,
      +And yet dark night strangles the travelling lamp:
      +Is't night's predominance, or the day's shame,
      +That darkness does the face of earth entomb,
      +When living light should kiss it?
      +
      + +Old Man +
      +'Tis unnatural,
      +Even like the deed that's done. On Tuesday last,
      +A falcon, towering in her pride of place,
      +Was by a mousing owl hawk'd at and kill'd.
      +
      + +ROSS +
      +And Duncan's horses--a thing most strange and certain--
      +Beauteous and swift, the minions of their race,
      +Turn'd wild in nature, broke their stalls, flung out,
      +Contending 'gainst obedience, as they would make
      +War with mankind.
      +
      + +Old Man +
      +'Tis said they eat each other.
      +
      + +ROSS +
      +They did so, to the amazement of mine eyes
      +That look'd upon't. Here comes the good Macduff.
      +

      Enter MACDUFF

      +How goes the world, sir, now?
      +
      + +MACDUFF +
      +Why, see you not?
      +
      + +ROSS +
      +Is't known who did this more than bloody deed?
      +
      + +MACDUFF +
      +Those that Macbeth hath slain.
      +
      + +ROSS +
      +Alas, the day!
      +What good could they pretend?
      +
      + +MACDUFF +
      +They were suborn'd:
      +Malcolm and Donalbain, the king's two sons,
      +Are stol'n away and fled; which puts upon them
      +Suspicion of the deed.
      +
      + +ROSS +
      +'Gainst nature still!
      +Thriftless ambition, that wilt ravin up
      +Thine own life's means! Then 'tis most like
      +The sovereignty will fall upon Macbeth.
      +
      + +MACDUFF +
      +He is already named, and gone to Scone
      +To be invested.
      +
      + +ROSS +
      + Where is Duncan's body?
      +
      + +MACDUFF +
      +Carried to Colmekill,
      +The sacred storehouse of his predecessors,
      +And guardian of their bones.
      +
      + +ROSS +
      +Will you to Scone?
      +
      + +MACDUFF +
      +No, cousin, I'll to Fife.
      +
      + +ROSS +
      +Well, I will thither.
      +
      + +MACDUFF +
      +Well, may you see things well done there: adieu!
      +Lest our old robes sit easier than our new!
      +
      + +ROSS +
      +Farewell, father.
      +
      + +Old Man +
      +God's benison go with you; and with those
      +That would make good of bad, and friends of foes!
      +

      Exeunt

      +

      +

      ACT III

      +

      SCENE I. Forres. The palace.

      +

      +Enter BANQUO +
      + +BANQUO +
      +Thou hast it now: king, Cawdor, Glamis, all,
      +As the weird women promised, and, I fear,
      +Thou play'dst most foully for't: yet it was said
      +It should not stand in thy posterity,
      +But that myself should be the root and father
      +Of many kings. If there come truth from them--
      +As upon thee, Macbeth, their speeches shine--
      +Why, by the verities on thee made good,
      +May they not be my oracles as well,
      +And set me up in hope? But hush! no more.
      +

      Sennet sounded. Enter MACBETH, as king, LADY MACBETH, as queen, LENNOX, ROSS, Lords, Ladies, and Attendants

      +
      + +MACBETH +
      +Here's our chief guest.
      +
      + +LADY MACBETH +
      +If he had been forgotten,
      +It had been as a gap in our great feast,
      +And all-thing unbecoming.
      +
      + +MACBETH +
      +To-night we hold a solemn supper sir,
      +And I'll request your presence.
      +
      + +BANQUO +
      +Let your highness
      +Command upon me; to the which my duties
      +Are with a most indissoluble tie
      +For ever knit.
      +
      + +MACBETH +
      + Ride you this afternoon?
      +
      + +BANQUO +
      +Ay, my good lord.
      +
      + +MACBETH +
      +We should have else desired your good advice,
      +Which still hath been both grave and prosperous,
      +In this day's council; but we'll take to-morrow.
      +Is't far you ride?
      +
      + +BANQUO +
      +As far, my lord, as will fill up the time
      +'Twixt this and supper: go not my horse the better,
      +I must become a borrower of the night
      +For a dark hour or twain.
      +
      + +MACBETH +
      +Fail not our feast.
      +
      + +BANQUO +
      +My lord, I will not.
      +
      + +MACBETH +
      +We hear, our bloody cousins are bestow'd
      +In England and in Ireland, not confessing
      +Their cruel parricide, filling their hearers
      +With strange invention: but of that to-morrow,
      +When therewithal we shall have cause of state
      +Craving us jointly. Hie you to horse: adieu,
      +Till you return at night. Goes Fleance with you?
      +
      + +BANQUO +
      +Ay, my good lord: our time does call upon 's.
      +
      + +MACBETH +
      +I wish your horses swift and sure of foot;
      +And so I do commend you to their backs. Farewell.
      +

      Exit BANQUO

      +Let every man be master of his time
      +Till seven at night: to make society
      +The sweeter welcome, we will keep ourself
      +Till supper-time alone: while then, God be with you!
      +

      Exeunt all but MACBETH, and an attendant

      +Sirrah, a word with you: attend those men
      +Our pleasure?
      +
      + +ATTENDANT +
      +They are, my lord, without the palace gate.
      +
      + +MACBETH +
      +Bring them before us.
      +

      Exit Attendant

      +To be thus is nothing;
      +But to be safely thus.--Our fears in Banquo
      +Stick deep; and in his royalty of nature
      +Reigns that which would be fear'd: 'tis much he dares;
      +And, to that dauntless temper of his mind,
      +He hath a wisdom that doth guide his valour
      +To act in safety. There is none but he
      +Whose being I do fear: and, under him,
      +My Genius is rebuked; as, it is said,
      +Mark Antony's was by Caesar. He chid the sisters
      +When first they put the name of king upon me,
      +And bade them speak to him: then prophet-like
      +They hail'd him father to a line of kings:
      +Upon my head they placed a fruitless crown,
      +And put a barren sceptre in my gripe,
      +Thence to be wrench'd with an unlineal hand,
      +No son of mine succeeding. If 't be so,
      +For Banquo's issue have I filed my mind;
      +For them the gracious Duncan have I murder'd;
      +Put rancours in the vessel of my peace
      +Only for them; and mine eternal jewel
      +Given to the common enemy of man,
      +To make them kings, the seed of Banquo kings!
      +Rather than so, come fate into the list.
      +And champion me to the utterance! Who's there!
      +

      Re-enter Attendant, with two Murderers

      +Now go to the door, and stay there till we call.
      +

      Exit Attendant

      +Was it not yesterday we spoke together?
      +
      + +First Murderer +
      +It was, so please your highness.
      +
      + +MACBETH +
      +Well then, now
      +Have you consider'd of my speeches? Know
      +That it was he in the times past which held you
      +So under fortune, which you thought had been
      +Our innocent self: this I made good to you
      +In our last conference, pass'd in probation with you,
      +How you were borne in hand, how cross'd,
      +the instruments,
      +Who wrought with them, and all things else that might
      +To half a soul and to a notion crazed
      +Say 'Thus did Banquo.'
      +
      + +First Murderer +
      +You made it known to us.
      +
      + +MACBETH +
      +I did so, and went further, which is now
      +Our point of second meeting. Do you find
      +Your patience so predominant in your nature
      +That you can let this go? Are you so gospell'd
      +To pray for this good man and for his issue,
      +Whose heavy hand hath bow'd you to the grave
      +And beggar'd yours for ever?
      +
      + +First Murderer +
      +We are men, my liege.
      +
      + +MACBETH +
      +Ay, in the catalogue ye go for men;
      +As hounds and greyhounds, mongrels, spaniels, curs,
      +Shoughs, water-rugs and demi-wolves, are clept
      +All by the name of dogs: the valued file
      +Distinguishes the swift, the slow, the subtle,
      +The housekeeper, the hunter, every one
      +According to the gift which bounteous nature
      +Hath in him closed; whereby he does receive
      +Particular addition. from the bill
      +That writes them all alike: and so of men.
      +Now, if you have a station in the file,
      +Not i' the worst rank of manhood, say 't;
      +And I will put that business in your bosoms,
      +Whose execution takes your enemy off,
      +Grapples you to the heart and love of us,
      +Who wear our health but sickly in his life,
      +Which in his death were perfect.
      +
      + +Second Murderer +
      +I am one, my liege,
      +Whom the vile blows and buffets of the world
      +Have so incensed that I am reckless what
      +I do to spite the world.
      +
      + +First Murderer +
      +And I another
      +So weary with disasters, tugg'd with fortune,
      +That I would set my lie on any chance,
      +To mend it, or be rid on't.
      +
      + +MACBETH +
      +Both of you
      +Know Banquo was your enemy.
      +
      + +Both Murderers +
      +True, my lord.
      +
      + +MACBETH +
      +So is he mine; and in such bloody distance,
      +That every minute of his being thrusts
      +Against my near'st of life: and though I could
      +With barefaced power sweep him from my sight
      +And bid my will avouch it, yet I must not,
      +For certain friends that are both his and mine,
      +Whose loves I may not drop, but wail his fall
      +Who I myself struck down; and thence it is,
      +That I to your assistance do make love,
      +Masking the business from the common eye
      +For sundry weighty reasons.
      +
      + +Second Murderer +
      +We shall, my lord,
      +Perform what you command us.
      +
      + +First Murderer +
      +Though our lives--
      +
      + +MACBETH +
      +Your spirits shine through you. Within this hour at most
      +I will advise you where to plant yourselves;
      +Acquaint you with the perfect spy o' the time,
      +The moment on't; for't must be done to-night,
      +And something from the palace; always thought
      +That I require a clearness: and with him--
      +To leave no rubs nor botches in the work--
      +Fleance his son, that keeps him company,
      +Whose absence is no less material to me
      +Than is his father's, must embrace the fate
      +Of that dark hour. Resolve yourselves apart:
      +I'll come to you anon.
      +
      + +Both Murderers +
      +We are resolved, my lord.
      +
      + +MACBETH +
      +I'll call upon you straight: abide within.
      +

      Exeunt Murderers

      +It is concluded. Banquo, thy soul's flight,
      +If it find heaven, must find it out to-night.
      +

      Exit

      +
      +

      SCENE II. The palace.

      +

      +Enter LADY MACBETH and a Servant +
      + +LADY MACBETH +
      +Is Banquo gone from court?
      +
      + +Servant +
      +Ay, madam, but returns again to-night.
      +
      + +LADY MACBETH +
      +Say to the king, I would attend his leisure
      +For a few words.
      +
      + +Servant +
      + Madam, I will.
      +

      Exit

      +
      + +LADY MACBETH +
      +Nought's had, all's spent,
      +Where our desire is got without content:
      +'Tis safer to be that which we destroy
      +Than by destruction dwell in doubtful joy.
      +

      Enter MACBETH

      +How now, my lord! why do you keep alone,
      +Of sorriest fancies your companions making,
      +Using those thoughts which should indeed have died
      +With them they think on? Things without all remedy
      +Should be without regard: what's done is done.
      +
      + +MACBETH +
      +We have scotch'd the snake, not kill'd it:
      +She'll close and be herself, whilst our poor malice
      +Remains in danger of her former tooth.
      +But let the frame of things disjoint, both the
      +worlds suffer,
      +Ere we will eat our meal in fear and sleep
      +In the affliction of these terrible dreams
      +That shake us nightly: better be with the dead,
      +Whom we, to gain our peace, have sent to peace,
      +Than on the torture of the mind to lie
      +In restless ecstasy. Duncan is in his grave;
      +After life's fitful fever he sleeps well;
      +Treason has done his worst: nor steel, nor poison,
      +Malice domestic, foreign levy, nothing,
      +Can touch him further.
      +
      + +LADY MACBETH +
      +Come on;
      +Gentle my lord, sleek o'er your rugged looks;
      +Be bright and jovial among your guests to-night.
      +
      + +MACBETH +
      +So shall I, love; and so, I pray, be you:
      +Let your remembrance apply to Banquo;
      +Present him eminence, both with eye and tongue:
      +Unsafe the while, that we
      +Must lave our honours in these flattering streams,
      +And make our faces vizards to our hearts,
      +Disguising what they are.
      +
      + +LADY MACBETH +
      +You must leave this.
      +
      + +MACBETH +
      +O, full of scorpions is my mind, dear wife!
      +Thou know'st that Banquo, and his Fleance, lives.
      +
      + +LADY MACBETH +
      +But in them nature's copy's not eterne.
      +
      + +MACBETH +
      +There's comfort yet; they are assailable;
      +Then be thou jocund: ere the bat hath flown
      +His cloister'd flight, ere to black Hecate's summons
      +The shard-borne beetle with his drowsy hums
      +Hath rung night's yawning peal, there shall be done
      +A deed of dreadful note.
      +
      + +LADY MACBETH +
      +What's to be done?
      +
      + +MACBETH +
      +Be innocent of the knowledge, dearest chuck,
      +Till thou applaud the deed. Come, seeling night,
      +Scarf up the tender eye of pitiful day;
      +And with thy bloody and invisible hand
      +Cancel and tear to pieces that great bond
      +Which keeps me pale! Light thickens; and the crow
      +Makes wing to the rooky wood:
      +Good things of day begin to droop and drowse;
      +While night's black agents to their preys do rouse.
      +Thou marvell'st at my words: but hold thee still;
      +Things bad begun make strong themselves by ill.
      +So, prithee, go with me.
      +

      Exeunt

      +
      +

      SCENE III. A park near the palace.

      +

      +Enter three Murderers +
      + +First Murderer +
      +But who did bid thee join with us?
      +
      + +Third Murderer +
      +Macbeth.
      +
      + +Second Murderer +
      +He needs not our mistrust, since he delivers
      +Our offices and what we have to do
      +To the direction just.
      +
      + +First Murderer +
      +Then stand with us.
      +The west yet glimmers with some streaks of day:
      +Now spurs the lated traveller apace
      +To gain the timely inn; and near approaches
      +The subject of our watch.
      +
      + +Third Murderer +
      +Hark! I hear horses.
      +
      + +BANQUO +
      +[Within] Give us a light there, ho!
      +
      + +Second Murderer +
      +Then 'tis he: the rest
      +That are within the note of expectation
      +Already are i' the court.
      +
      + +First Murderer +
      +His horses go about.
      +
      + +Third Murderer +
      +Almost a mile: but he does usually,
      +So all men do, from hence to the palace gate
      +Make it their walk.
      +
      + +Second Murderer +
      +A light, a light!
      +

      Enter BANQUO, and FLEANCE with a torch

      +
      + +Third Murderer +
      +'Tis he.
      +
      + +First Murderer +
      +Stand to't.
      +
      + +BANQUO +
      +It will be rain to-night.
      +
      + +First Murderer +
      +Let it come down.
      +

      They set upon BANQUO

      +
      + +BANQUO +
      +O, treachery! Fly, good Fleance, fly, fly, fly!
      +Thou mayst revenge. O slave!
      +

      Dies. FLEANCE escapes

      +
      + +Third Murderer +
      +Who did strike out the light?
      +
      + +First Murderer +
      +Wast not the way?
      +
      + +Third Murderer +
      +There's but one down; the son is fled.
      +
      + +Second Murderer +
      +We have lost
      +Best half of our affair.
      +
      + +First Murderer +
      +Well, let's away, and say how much is done.
      +

      Exeunt

      +
      +

      SCENE IV. The same. Hall in the palace.

      +

      +A banquet prepared. Enter MACBETH, LADY MACBETH, ROSS, LENNOX, Lords, and Attendants +
      + +MACBETH +
      +You know your own degrees; sit down: at first
      +And last the hearty welcome.
      +
      + +Lords +
      +Thanks to your majesty.
      +
      + +MACBETH +
      +Ourself will mingle with society,
      +And play the humble host.
      +Our hostess keeps her state, but in best time
      +We will require her welcome.
      +
      + +LADY MACBETH +
      +Pronounce it for me, sir, to all our friends;
      +For my heart speaks they are welcome.
      +

      First Murderer appears at the door

      +
      + +MACBETH +
      +See, they encounter thee with their hearts' thanks.
      +Both sides are even: here I'll sit i' the midst:
      +Be large in mirth; anon we'll drink a measure
      +The table round.
      +

      Approaching the door

      +There's blood on thy face.
      +
      + +First Murderer +
      +'Tis Banquo's then.
      +
      + +MACBETH +
      +'Tis better thee without than he within.
      +Is he dispatch'd?
      +
      + +First Murderer +
      +My lord, his throat is cut; that I did for him.
      +
      + +MACBETH +
      +Thou art the best o' the cut-throats: yet he's good
      +That did the like for Fleance: if thou didst it,
      +Thou art the nonpareil.
      +
      + +First Murderer +
      +Most royal sir,
      +Fleance is 'scaped.
      +
      + +MACBETH +
      +Then comes my fit again: I had else been perfect,
      +Whole as the marble, founded as the rock,
      +As broad and general as the casing air:
      +But now I am cabin'd, cribb'd, confined, bound in
      +To saucy doubts and fears. But Banquo's safe?
      +
      + +First Murderer +
      +Ay, my good lord: safe in a ditch he bides,
      +With twenty trenched gashes on his head;
      +The least a death to nature.
      +
      + +MACBETH +
      +Thanks for that:
      +There the grown serpent lies; the worm that's fled
      +Hath nature that in time will venom breed,
      +No teeth for the present. Get thee gone: to-morrow
      +We'll hear, ourselves, again.
      +

      Exit Murderer

      +
      + +LADY MACBETH +
      +My royal lord,
      +You do not give the cheer: the feast is sold
      +That is not often vouch'd, while 'tis a-making,
      +'Tis given with welcome: to feed were best at home;
      +From thence the sauce to meat is ceremony;
      +Meeting were bare without it.
      +
      + +MACBETH +
      +Sweet remembrancer!
      +Now, good digestion wait on appetite,
      +And health on both!
      +
      + +LENNOX +
      +May't please your highness sit.
      +

      The GHOST OF BANQUO enters, and sits in MACBETH's place

      +
      + +MACBETH +
      +Here had we now our country's honour roof'd,
      +Were the graced person of our Banquo present;
      +Who may I rather challenge for unkindness
      +Than pity for mischance!
      +
      + +ROSS +
      +His absence, sir,
      +Lays blame upon his promise. Please't your highness
      +To grace us with your royal company.
      +
      + +MACBETH +
      +The table's full.
      +
      + +LENNOX +
      + Here is a place reserved, sir.
      +
      + +MACBETH +
      +Where?
      +
      + +LENNOX +
      +Here, my good lord. What is't that moves your highness?
      +
      + +MACBETH +
      +Which of you have done this?
      +
      + +Lords +
      +What, my good lord?
      +
      + +MACBETH +
      +Thou canst not say I did it: never shake
      +Thy gory locks at me.
      +
      + +ROSS +
      +Gentlemen, rise: his highness is not well.
      +
      + +LADY MACBETH +
      +Sit, worthy friends: my lord is often thus,
      +And hath been from his youth: pray you, keep seat;
      +The fit is momentary; upon a thought
      +He will again be well: if much you note him,
      +You shall offend him and extend his passion:
      +Feed, and regard him not. Are you a man?
      +
      + +MACBETH +
      +Ay, and a bold one, that dare look on that
      +Which might appal the devil.
      +
      + +LADY MACBETH +
      +O proper stuff!
      +This is the very painting of your fear:
      +This is the air-drawn dagger which, you said,
      +Led you to Duncan. O, these flaws and starts,
      +Impostors to true fear, would well become
      +A woman's story at a winter's fire,
      +Authorized by her grandam. Shame itself!
      +Why do you make such faces? When all's done,
      +You look but on a stool.
      +
      + +MACBETH +
      +Prithee, see there! behold! look! lo!
      +how say you?
      +Why, what care I? If thou canst nod, speak too.
      +If charnel-houses and our graves must send
      +Those that we bury back, our monuments
      +Shall be the maws of kites.
      +

      GHOST OF BANQUO vanishes

      +
      + +LADY MACBETH +
      +What, quite unmann'd in folly?
      +
      + +MACBETH +
      +If I stand here, I saw him.
      +
      + +LADY MACBETH +
      +Fie, for shame!
      +
      + +MACBETH +
      +Blood hath been shed ere now, i' the olden time,
      +Ere human statute purged the gentle weal;
      +Ay, and since too, murders have been perform'd
      +Too terrible for the ear: the times have been,
      +That, when the brains were out, the man would die,
      +And there an end; but now they rise again,
      +With twenty mortal murders on their crowns,
      +And push us from our stools: this is more strange
      +Than such a murder is.
      +
      + +LADY MACBETH +
      +My worthy lord,
      +Your noble friends do lack you.
      +
      + +MACBETH +
      +I do forget.
      +Do not muse at me, my most worthy friends,
      +I have a strange infirmity, which is nothing
      +To those that know me. Come, love and health to all;
      +Then I'll sit down. Give me some wine; fill full.
      +I drink to the general joy o' the whole table,
      +And to our dear friend Banquo, whom we miss;
      +Would he were here! to all, and him, we thirst,
      +And all to all.
      +
      + +Lords +
      + Our duties, and the pledge.
      +

      Re-enter GHOST OF BANQUO

      +
      + +MACBETH +
      +Avaunt! and quit my sight! let the earth hide thee!
      +Thy bones are marrowless, thy blood is cold;
      +Thou hast no speculation in those eyes
      +Which thou dost glare with!
      +
      + +LADY MACBETH +
      +Think of this, good peers,
      +But as a thing of custom: 'tis no other;
      +Only it spoils the pleasure of the time.
      +
      + +MACBETH +
      +What man dare, I dare:
      +Approach thou like the rugged Russian bear,
      +The arm'd rhinoceros, or the Hyrcan tiger;
      +Take any shape but that, and my firm nerves
      +Shall never tremble: or be alive again,
      +And dare me to the desert with thy sword;
      +If trembling I inhabit then, protest me
      +The baby of a girl. Hence, horrible shadow!
      +Unreal mockery, hence!
      +

      GHOST OF BANQUO vanishes

      +Why, so: being gone,
      +I am a man again. Pray you, sit still.
      +
      + +LADY MACBETH +
      +You have displaced the mirth, broke the good meeting,
      +With most admired disorder.
      +
      + +MACBETH +
      +Can such things be,
      +And overcome us like a summer's cloud,
      +Without our special wonder? You make me strange
      +Even to the disposition that I owe,
      +When now I think you can behold such sights,
      +And keep the natural ruby of your cheeks,
      +When mine is blanched with fear.
      +
      + +ROSS +
      +What sights, my lord?
      +
      + +LADY MACBETH +
      +I pray you, speak not; he grows worse and worse;
      +Question enrages him. At once, good night:
      +Stand not upon the order of your going,
      +But go at once.
      +
      + +LENNOX +
      + Good night; and better health
      +Attend his majesty!
      +
      + +LADY MACBETH +
      +A kind good night to all!
      +

      Exeunt all but MACBETH and LADY MACBETH

      +
      + +MACBETH +
      +It will have blood; they say, blood will have blood:
      +Stones have been known to move and trees to speak;
      +Augurs and understood relations have
      +By magot-pies and choughs and rooks brought forth
      +The secret'st man of blood. What is the night?
      +
      + +LADY MACBETH +
      +Almost at odds with morning, which is which.
      +
      + +MACBETH +
      +How say'st thou, that Macduff denies his person
      +At our great bidding?
      +
      + +LADY MACBETH +
      +Did you send to him, sir?
      +
      + +MACBETH +
      +I hear it by the way; but I will send:
      +There's not a one of them but in his house
      +I keep a servant fee'd. I will to-morrow,
      +And betimes I will, to the weird sisters:
      +More shall they speak; for now I am bent to know,
      +By the worst means, the worst. For mine own good,
      +All causes shall give way: I am in blood
      +Stepp'd in so far that, should I wade no more,
      +Returning were as tedious as go o'er:
      +Strange things I have in head, that will to hand;
      +Which must be acted ere they may be scann'd.
      +
      + +LADY MACBETH +
      +You lack the season of all natures, sleep.
      +
      + +MACBETH +
      +Come, we'll to sleep. My strange and self-abuse
      +Is the initiate fear that wants hard use:
      +We are yet but young in deed.
      +

      Exeunt

      +
      +

      SCENE V. A Heath.

      +

      +Thunder. Enter the three Witches meeting HECATE +
      + +First Witch +
      +Why, how now, Hecate! you look angerly.
      +
      + +HECATE +
      +Have I not reason, beldams as you are,
      +Saucy and overbold? How did you dare
      +To trade and traffic with Macbeth
      +In riddles and affairs of death;
      +And I, the mistress of your charms,
      +The close contriver of all harms,
      +Was never call'd to bear my part,
      +Or show the glory of our art?
      +And, which is worse, all you have done
      +Hath been but for a wayward son,
      +Spiteful and wrathful, who, as others do,
      +Loves for his own ends, not for you.
      +But make amends now: get you gone,
      +And at the pit of Acheron
      +Meet me i' the morning: thither he
      +Will come to know his destiny:
      +Your vessels and your spells provide,
      +Your charms and every thing beside.
      +I am for the air; this night I'll spend
      +Unto a dismal and a fatal end:
      +Great business must be wrought ere noon:
      +Upon the corner of the moon
      +There hangs a vaporous drop profound;
      +I'll catch it ere it come to ground:
      +And that distill'd by magic sleights
      +Shall raise such artificial sprites
      +As by the strength of their illusion
      +Shall draw him on to his confusion:
      +He shall spurn fate, scorn death, and bear
      +He hopes 'bove wisdom, grace and fear:
      +And you all know, security
      +Is mortals' chiefest enemy.
      +

      Music and a song within: 'Come away, come away,' & c

      +Hark! I am call'd; my little spirit, see,
      +Sits in a foggy cloud, and stays for me.
      +

      Exit

      +
      + +First Witch +
      +Come, let's make haste; she'll soon be back again.
      +

      Exeunt

      +
      +

      SCENE VI. Forres. The palace.

      +

      +Enter LENNOX and another Lord +
      + +LENNOX +
      +My former speeches have but hit your thoughts,
      +Which can interpret further: only, I say,
      +Things have been strangely borne. The
      +gracious Duncan
      +Was pitied of Macbeth: marry, he was dead:
      +And the right-valiant Banquo walk'd too late;
      +Whom, you may say, if't please you, Fleance kill'd,
      +For Fleance fled: men must not walk too late.
      +Who cannot want the thought how monstrous
      +It was for Malcolm and for Donalbain
      +To kill their gracious father? damned fact!
      +How it did grieve Macbeth! did he not straight
      +In pious rage the two delinquents tear,
      +That were the slaves of drink and thralls of sleep?
      +Was not that nobly done? Ay, and wisely too;
      +For 'twould have anger'd any heart alive
      +To hear the men deny't. So that, I say,
      +He has borne all things well: and I do think
      +That had he Duncan's sons under his key--
      +As, an't please heaven, he shall not--they
      +should find
      +What 'twere to kill a father; so should Fleance.
      +But, peace! for from broad words and 'cause he fail'd
      +His presence at the tyrant's feast, I hear
      +Macduff lives in disgrace: sir, can you tell
      +Where he bestows himself?
      +
      + +Lord +
      +The son of Duncan,
      +From whom this tyrant holds the due of birth
      +Lives in the English court, and is received
      +Of the most pious Edward with such grace
      +That the malevolence of fortune nothing
      +Takes from his high respect: thither Macduff
      +Is gone to pray the holy king, upon his aid
      +To wake Northumberland and warlike Siward:
      +That, by the help of these--with Him above
      +To ratify the work--we may again
      +Give to our tables meat, sleep to our nights,
      +Free from our feasts and banquets bloody knives,
      +Do faithful homage and receive free honours:
      +All which we pine for now: and this report
      +Hath so exasperate the king that he
      +Prepares for some attempt of war.
      +
      + +LENNOX +
      +Sent he to Macduff?
      +
      + +Lord +
      +He did: and with an absolute 'Sir, not I,'
      +The cloudy messenger turns me his back,
      +And hums, as who should say 'You'll rue the time
      +That clogs me with this answer.'
      +
      + +LENNOX +
      +And that well might
      +Advise him to a caution, to hold what distance
      +His wisdom can provide. Some holy angel
      +Fly to the court of England and unfold
      +His message ere he come, that a swift blessing
      +May soon return to this our suffering country
      +Under a hand accursed!
      +
      + +Lord +
      +I'll send my prayers with him.
      +

      Exeunt

      +

      +

      ACT IV

      +

      SCENE I. A cavern. In the middle, a boiling cauldron.

      +

      +Thunder. Enter the three Witches +
      + +First Witch +
      +Thrice the brinded cat hath mew'd.
      +
      + +Second Witch +
      +Thrice and once the hedge-pig whined.
      +
      + +Third Witch +
      +Harpier cries 'Tis time, 'tis time.
      +
      + +First Witch +
      +Round about the cauldron go;
      +In the poison'd entrails throw.
      +Toad, that under cold stone
      +Days and nights has thirty-one
      +Swelter'd venom sleeping got,
      +Boil thou first i' the charmed pot.
      +
      + +ALL +
      +Double, double toil and trouble;
      +Fire burn, and cauldron bubble.
      +
      + +Second Witch +
      +Fillet of a fenny snake,
      +In the cauldron boil and bake;
      +Eye of newt and toe of frog,
      +Wool of bat and tongue of dog,
      +Adder's fork and blind-worm's sting,
      +Lizard's leg and owlet's wing,
      +For a charm of powerful trouble,
      +Like a hell-broth boil and bubble.
      +
      + +ALL +
      +Double, double toil and trouble;
      +Fire burn and cauldron bubble.
      +
      + +Third Witch +
      +Scale of dragon, tooth of wolf,
      +Witches' mummy, maw and gulf
      +Of the ravin'd salt-sea shark,
      +Root of hemlock digg'd i' the dark,
      +Liver of blaspheming Jew,
      +Gall of goat, and slips of yew
      +Silver'd in the moon's eclipse,
      +Nose of Turk and Tartar's lips,
      +Finger of birth-strangled babe
      +Ditch-deliver'd by a drab,
      +Make the gruel thick and slab:
      +Add thereto a tiger's chaudron,
      +For the ingredients of our cauldron.
      +
      + +ALL +
      +Double, double toil and trouble;
      +Fire burn and cauldron bubble.
      +
      + +Second Witch +
      +Cool it with a baboon's blood,
      +Then the charm is firm and good.
      +

      Enter HECATE to the other three Witches

      +
      + +HECATE +
      +O well done! I commend your pains;
      +And every one shall share i' the gains;
      +And now about the cauldron sing,
      +Live elves and fairies in a ring,
      +Enchanting all that you put in.
      +

      Music and a song: 'Black spirits,' & c

      +

      HECATE retires

      +
      + +Second Witch +
      +By the pricking of my thumbs,
      +Something wicked this way comes.
      +Open, locks,
      +Whoever knocks!
      +

      Enter MACBETH

      +
      + +MACBETH +
      +How now, you secret, black, and midnight hags!
      +What is't you do?
      +
      + +ALL +
      + A deed without a name.
      +
      + +MACBETH +
      +I conjure you, by that which you profess,
      +Howe'er you come to know it, answer me:
      +Though you untie the winds and let them fight
      +Against the churches; though the yesty waves
      +Confound and swallow navigation up;
      +Though bladed corn be lodged and trees blown down;
      +Though castles topple on their warders' heads;
      +Though palaces and pyramids do slope
      +Their heads to their foundations; though the treasure
      +Of nature's germens tumble all together,
      +Even till destruction sicken; answer me
      +To what I ask you.
      +
      + +First Witch +
      + Speak.
      +
      + +Second Witch +
      +Demand.
      +
      + +Third Witch +
      +We'll answer.
      +
      + +First Witch +
      +Say, if thou'dst rather hear it from our mouths,
      +Or from our masters?
      +
      + +MACBETH +
      +Call 'em; let me see 'em.
      +
      + +First Witch +
      +Pour in sow's blood, that hath eaten
      +Her nine farrow; grease that's sweaten
      +From the murderer's gibbet throw
      +Into the flame.
      +
      + +ALL +
      + Come, high or low;
      +Thyself and office deftly show!
      +

      Thunder. First Apparition: an armed Head

      +
      + +MACBETH +
      +Tell me, thou unknown power,--
      +
      + +First Witch +
      +He knows thy thought:
      +Hear his speech, but say thou nought.
      +
      + +First Apparition +
      +Macbeth! Macbeth! Macbeth! beware Macduff;
      +Beware the thane of Fife. Dismiss me. Enough.
      +

      Descends

      +
      + +MACBETH +
      +Whate'er thou art, for thy good caution, thanks;
      +Thou hast harp'd my fear aright: but one
      +word more,--
      +
      + +First Witch +
      +He will not be commanded: here's another,
      +More potent than the first.
      +

      Thunder. Second Apparition: A bloody Child

      +
      + +Second Apparition +
      +Macbeth! Macbeth! Macbeth!
      +
      + +MACBETH +
      +Had I three ears, I'ld hear thee.
      +
      + +Second Apparition +
      +Be bloody, bold, and resolute; laugh to scorn
      +The power of man, for none of woman born
      +Shall harm Macbeth.
      +

      Descends

      +
      + +MACBETH +
      +Then live, Macduff: what need I fear of thee?
      +But yet I'll make assurance double sure,
      +And take a bond of fate: thou shalt not live;
      +That I may tell pale-hearted fear it lies,
      +And sleep in spite of thunder.
      +

      Thunder. Third Apparition: a Child crowned, with a tree in his hand

      +What is this
      +That rises like the issue of a king,
      +And wears upon his baby-brow the round
      +And top of sovereignty?
      +
      + +ALL +
      +Listen, but speak not to't.
      +
      + +Third Apparition +
      +Be lion-mettled, proud; and take no care
      +Who chafes, who frets, or where conspirers are:
      +Macbeth shall never vanquish'd be until
      +Great Birnam wood to high Dunsinane hill
      +Shall come against him.
      +

      Descends

      +
      + +MACBETH +
      +That will never be
      +Who can impress the forest, bid the tree
      +Unfix his earth-bound root? Sweet bodements! good!
      +Rebellion's head, rise never till the wood
      +Of Birnam rise, and our high-placed Macbeth
      +Shall live the lease of nature, pay his breath
      +To time and mortal custom. Yet my heart
      +Throbs to know one thing: tell me, if your art
      +Can tell so much: shall Banquo's issue ever
      +Reign in this kingdom?
      +
      + +ALL +
      +Seek to know no more.
      +
      + +MACBETH +
      +I will be satisfied: deny me this,
      +And an eternal curse fall on you! Let me know.
      +Why sinks that cauldron? and what noise is this?
      +

      Hautboys

      +
      + +First Witch +
      +Show!
      +
      + +Second Witch +
      +Show!
      +
      + +Third Witch +
      +Show!
      +
      + +ALL +
      +Show his eyes, and grieve his heart;
      +Come like shadows, so depart!
      +

      A show of Eight Kings, the last with a glass in his hand; GHOST OF BANQUO following

      +
      + +MACBETH +
      +Thou art too like the spirit of Banquo: down!
      +Thy crown does sear mine eye-balls. And thy hair,
      +Thou other gold-bound brow, is like the first.
      +A third is like the former. Filthy hags!
      +Why do you show me this? A fourth! Start, eyes!
      +What, will the line stretch out to the crack of doom?
      +Another yet! A seventh! I'll see no more:
      +And yet the eighth appears, who bears a glass
      +Which shows me many more; and some I see
      +That two-fold balls and treble scepters carry:
      +Horrible sight! Now, I see, 'tis true;
      +For the blood-bolter'd Banquo smiles upon me,
      +And points at them for his.
      +

      Apparitions vanish

      +What, is this so?
      +
      + +First Witch +
      +Ay, sir, all this is so: but why
      +Stands Macbeth thus amazedly?
      +Come, sisters, cheer we up his sprites,
      +And show the best of our delights:
      +I'll charm the air to give a sound,
      +While you perform your antic round:
      +That this great king may kindly say,
      +Our duties did his welcome pay.
      +

      Music. The witches dance and then vanish, with HECATE

      +
      + +MACBETH +
      +Where are they? Gone? Let this pernicious hour
      +Stand aye accursed in the calendar!
      +Come in, without there!
      +

      Enter LENNOX

      +
      + +LENNOX +
      +What's your grace's will?
      +
      + +MACBETH +
      +Saw you the weird sisters?
      +
      + +LENNOX +
      +No, my lord.
      +
      + +MACBETH +
      +Came they not by you?
      +
      + +LENNOX +
      +No, indeed, my lord.
      +
      + +MACBETH +
      +Infected be the air whereon they ride;
      +And damn'd all those that trust them! I did hear
      +The galloping of horse: who was't came by?
      +
      + +LENNOX +
      +'Tis two or three, my lord, that bring you word
      +Macduff is fled to England.
      +
      + +MACBETH +
      +Fled to England!
      +
      + +LENNOX +
      +Ay, my good lord.
      +
      + +MACBETH +
      +Time, thou anticipatest my dread exploits:
      +The flighty purpose never is o'ertook
      +Unless the deed go with it; from this moment
      +The very firstlings of my heart shall be
      +The firstlings of my hand. And even now,
      +To crown my thoughts with acts, be it thought and done:
      +The castle of Macduff I will surprise;
      +Seize upon Fife; give to the edge o' the sword
      +His wife, his babes, and all unfortunate souls
      +That trace him in his line. No boasting like a fool;
      +This deed I'll do before this purpose cool.
      +But no more sights!--Where are these gentlemen?
      +Come, bring me where they are.
      +

      Exeunt

      +
      +

      SCENE II. Fife. Macduff's castle.

      +

      +Enter LADY MACDUFF, her Son, and ROSS +
      + +LADY MACDUFF +
      +What had he done, to make him fly the land?
      +
      + +ROSS +
      +You must have patience, madam.
      +
      + +LADY MACDUFF +
      +He had none:
      +His flight was madness: when our actions do not,
      +Our fears do make us traitors.
      +
      + +ROSS +
      +You know not
      +Whether it was his wisdom or his fear.
      +
      + +LADY MACDUFF +
      +Wisdom! to leave his wife, to leave his babes,
      +His mansion and his titles in a place
      +From whence himself does fly? He loves us not;
      +He wants the natural touch: for the poor wren,
      +The most diminutive of birds, will fight,
      +Her young ones in her nest, against the owl.
      +All is the fear and nothing is the love;
      +As little is the wisdom, where the flight
      +So runs against all reason.
      +
      + +ROSS +
      +My dearest coz,
      +I pray you, school yourself: but for your husband,
      +He is noble, wise, judicious, and best knows
      +The fits o' the season. I dare not speak
      +much further;
      +But cruel are the times, when we are traitors
      +And do not know ourselves, when we hold rumour
      +From what we fear, yet know not what we fear,
      +But float upon a wild and violent sea
      +Each way and move. I take my leave of you:
      +Shall not be long but I'll be here again:
      +Things at the worst will cease, or else climb upward
      +To what they were before. My pretty cousin,
      +Blessing upon you!
      +
      + +LADY MACDUFF +
      +Father'd he is, and yet he's fatherless.
      +
      + +ROSS +
      +I am so much a fool, should I stay longer,
      +It would be my disgrace and your discomfort:
      +I take my leave at once.
      +

      Exit

      +
      + +LADY MACDUFF +
      +Sirrah, your father's dead;
      +And what will you do now? How will you live?
      +
      + +Son +
      +As birds do, mother.
      +
      + +LADY MACDUFF +
      +What, with worms and flies?
      +
      + +Son +
      +With what I get, I mean; and so do they.
      +
      + +LADY MACDUFF +
      +Poor bird! thou'ldst never fear the net nor lime,
      +The pitfall nor the gin.
      +
      + +Son +
      +Why should I, mother? Poor birds they are not set for.
      +My father is not dead, for all your saying.
      +
      + +LADY MACDUFF +
      +Yes, he is dead; how wilt thou do for a father?
      +
      + +Son +
      +Nay, how will you do for a husband?
      +
      + +LADY MACDUFF +
      +Why, I can buy me twenty at any market.
      +
      + +Son +
      +Then you'll buy 'em to sell again.
      +
      + +LADY MACDUFF +
      +Thou speak'st with all thy wit: and yet, i' faith,
      +With wit enough for thee.
      +
      + +Son +
      +Was my father a traitor, mother?
      +
      + +LADY MACDUFF +
      +Ay, that he was.
      +
      + +Son +
      +What is a traitor?
      +
      + +LADY MACDUFF +
      +Why, one that swears and lies.
      +
      + +Son +
      +And be all traitors that do so?
      +
      + +LADY MACDUFF +
      +Every one that does so is a traitor, and must be hanged.
      +
      + +Son +
      +And must they all be hanged that swear and lie?
      +
      + +LADY MACDUFF +
      +Every one.
      +
      + +Son +
      +Who must hang them?
      +
      + +LADY MACDUFF +
      +Why, the honest men.
      +
      + +Son +
      +Then the liars and swearers are fools,
      +for there are liars and swearers enow to beat
      +the honest men and hang up them.
      +
      + +LADY MACDUFF +
      +Now, God help thee, poor monkey!
      +But how wilt thou do for a father?
      +
      + +Son +
      +If he were dead, you'ld weep for
      +him: if you would not, it were a good sign
      +that I should quickly have a new father.
      +
      + +LADY MACDUFF +
      +Poor prattler, how thou talk'st!
      +

      Enter a Messenger

      +
      + +Messenger +
      +Bless you, fair dame! I am not to you known,
      +Though in your state of honour I am perfect.
      +I doubt some danger does approach you nearly:
      +If you will take a homely man's advice,
      +Be not found here; hence, with your little ones.
      +To fright you thus, methinks, I am too savage;
      +To do worse to you were fell cruelty,
      +Which is too nigh your person. Heaven preserve you!
      +I dare abide no longer.
      +

      Exit

      +
      + +LADY MACDUFF +
      +Whither should I fly?
      +I have done no harm. But I remember now
      +I am in this earthly world; where to do harm
      +Is often laudable, to do good sometime
      +Accounted dangerous folly: why then, alas,
      +Do I put up that womanly defence,
      +To say I have done no harm?
      +

      Enter Murderers

      +What are these faces?
      +
      + +First Murderer +
      +Where is your husband?
      +
      + +LADY MACDUFF +
      +I hope, in no place so unsanctified
      +Where such as thou mayst find him.
      +
      + +First Murderer +
      +He's a traitor.
      +
      + +Son +
      +Thou liest, thou shag-hair'd villain!
      +
      + +First Murderer +
      +What, you egg!
      +

      Stabbing him

      +Young fry of treachery!
      +
      + +Son +
      +He has kill'd me, mother:
      +Run away, I pray you!
      +

      Dies

      +

      Exit LADY MACDUFF, crying 'Murder!' Exeunt Murderers, following her

      +
      +

      SCENE III. England. Before the King's palace.

      +

      +Enter MALCOLM and MACDUFF +
      + +MALCOLM +
      +Let us seek out some desolate shade, and there
      +Weep our sad bosoms empty.
      +
      + +MACDUFF +
      +Let us rather
      +Hold fast the mortal sword, and like good men
      +Bestride our down-fall'n birthdom: each new morn
      +New widows howl, new orphans cry, new sorrows
      +Strike heaven on the face, that it resounds
      +As if it felt with Scotland and yell'd out
      +Like syllable of dolour.
      +
      + +MALCOLM +
      +What I believe I'll wail,
      +What know believe, and what I can redress,
      +As I shall find the time to friend, I will.
      +What you have spoke, it may be so perchance.
      +This tyrant, whose sole name blisters our tongues,
      +Was once thought honest: you have loved him well.
      +He hath not touch'd you yet. I am young;
      +but something
      +You may deserve of him through me, and wisdom
      +To offer up a weak poor innocent lamb
      +To appease an angry god.
      +
      + +MACDUFF +
      +I am not treacherous.
      +
      + +MALCOLM +
      +But Macbeth is.
      +A good and virtuous nature may recoil
      +In an imperial charge. But I shall crave
      +your pardon;
      +That which you are my thoughts cannot transpose:
      +Angels are bright still, though the brightest fell;
      +Though all things foul would wear the brows of grace,
      +Yet grace must still look so.
      +
      + +MACDUFF +
      +I have lost my hopes.
      +
      + +MALCOLM +
      +Perchance even there where I did find my doubts.
      +Why in that rawness left you wife and child,
      +Those precious motives, those strong knots of love,
      +Without leave-taking? I pray you,
      +Let not my jealousies be your dishonours,
      +But mine own safeties. You may be rightly just,
      +Whatever I shall think.
      +
      + +MACDUFF +
      +Bleed, bleed, poor country!
      +Great tyranny! lay thou thy basis sure,
      +For goodness dare not cheque thee: wear thou
      +thy wrongs;
      +The title is affeer'd! Fare thee well, lord:
      +I would not be the villain that thou think'st
      +For the whole space that's in the tyrant's grasp,
      +And the rich East to boot.
      +
      + +MALCOLM +
      +Be not offended:
      +I speak not as in absolute fear of you.
      +I think our country sinks beneath the yoke;
      +It weeps, it bleeds; and each new day a gash
      +Is added to her wounds: I think withal
      +There would be hands uplifted in my right;
      +And here from gracious England have I offer
      +Of goodly thousands: but, for all this,
      +When I shall tread upon the tyrant's head,
      +Or wear it on my sword, yet my poor country
      +Shall have more vices than it had before,
      +More suffer and more sundry ways than ever,
      +By him that shall succeed.
      +
      + +MACDUFF +
      +What should he be?
      +
      + +MALCOLM +
      +It is myself I mean: in whom I know
      +All the particulars of vice so grafted
      +That, when they shall be open'd, black Macbeth
      +Will seem as pure as snow, and the poor state
      +Esteem him as a lamb, being compared
      +With my confineless harms.
      +
      + +MACDUFF +
      +Not in the legions
      +Of horrid hell can come a devil more damn'd
      +In evils to top Macbeth.
      +
      + +MALCOLM +
      +I grant him bloody,
      +Luxurious, avaricious, false, deceitful,
      +Sudden, malicious, smacking of every sin
      +That has a name: but there's no bottom, none,
      +In my voluptuousness: your wives, your daughters,
      +Your matrons and your maids, could not fill up
      +The cistern of my lust, and my desire
      +All continent impediments would o'erbear
      +That did oppose my will: better Macbeth
      +Than such an one to reign.
      +
      + +MACDUFF +
      +Boundless intemperance
      +In nature is a tyranny; it hath been
      +The untimely emptying of the happy throne
      +And fall of many kings. But fear not yet
      +To take upon you what is yours: you may
      +Convey your pleasures in a spacious plenty,
      +And yet seem cold, the time you may so hoodwink.
      +We have willing dames enough: there cannot be
      +That vulture in you, to devour so many
      +As will to greatness dedicate themselves,
      +Finding it so inclined.
      +
      + +MALCOLM +
      +With this there grows
      +In my most ill-composed affection such
      +A stanchless avarice that, were I king,
      +I should cut off the nobles for their lands,
      +Desire his jewels and this other's house:
      +And my more-having would be as a sauce
      +To make me hunger more; that I should forge
      +Quarrels unjust against the good and loyal,
      +Destroying them for wealth.
      +
      + +MACDUFF +
      +This avarice
      +Sticks deeper, grows with more pernicious root
      +Than summer-seeming lust, and it hath been
      +The sword of our slain kings: yet do not fear;
      +Scotland hath foisons to fill up your will.
      +Of your mere own: all these are portable,
      +With other graces weigh'd.
      +
      + +MALCOLM +
      +But I have none: the king-becoming graces,
      +As justice, verity, temperance, stableness,
      +Bounty, perseverance, mercy, lowliness,
      +Devotion, patience, courage, fortitude,
      +I have no relish of them, but abound
      +In the division of each several crime,
      +Acting it many ways. Nay, had I power, I should
      +Pour the sweet milk of concord into hell,
      +Uproar the universal peace, confound
      +All unity on earth.
      +
      + +MACDUFF +
      +O Scotland, Scotland!
      +
      + +MALCOLM +
      +If such a one be fit to govern, speak:
      +I am as I have spoken.
      +
      + +MACDUFF +
      +Fit to govern!
      +No, not to live. O nation miserable,
      +With an untitled tyrant bloody-scepter'd,
      +When shalt thou see thy wholesome days again,
      +Since that the truest issue of thy throne
      +By his own interdiction stands accursed,
      +And does blaspheme his breed? Thy royal father
      +Was a most sainted king: the queen that bore thee,
      +Oftener upon her knees than on her feet,
      +Died every day she lived. Fare thee well!
      +These evils thou repeat'st upon thyself
      +Have banish'd me from Scotland. O my breast,
      +Thy hope ends here!
      +
      + +MALCOLM +
      +Macduff, this noble passion,
      +Child of integrity, hath from my soul
      +Wiped the black scruples, reconciled my thoughts
      +To thy good truth and honour. Devilish Macbeth
      +By many of these trains hath sought to win me
      +Into his power, and modest wisdom plucks me
      +From over-credulous haste: but God above
      +Deal between thee and me! for even now
      +I put myself to thy direction, and
      +Unspeak mine own detraction, here abjure
      +The taints and blames I laid upon myself,
      +For strangers to my nature. I am yet
      +Unknown to woman, never was forsworn,
      +Scarcely have coveted what was mine own,
      +At no time broke my faith, would not betray
      +The devil to his fellow and delight
      +No less in truth than life: my first false speaking
      +Was this upon myself: what I am truly,
      +Is thine and my poor country's to command:
      +Whither indeed, before thy here-approach,
      +Old Siward, with ten thousand warlike men,
      +Already at a point, was setting forth.
      +Now we'll together; and the chance of goodness
      +Be like our warranted quarrel! Why are you silent?
      +
      + +MACDUFF +
      +Such welcome and unwelcome things at once
      +'Tis hard to reconcile.
      +

      Enter a Doctor

      +
      + +MALCOLM +
      +Well; more anon.--Comes the king forth, I pray you?
      +
      + +Doctor +
      +Ay, sir; there are a crew of wretched souls
      +That stay his cure: their malady convinces
      +The great assay of art; but at his touch--
      +Such sanctity hath heaven given his hand--
      +They presently amend.
      +
      + +MALCOLM +
      +I thank you, doctor.
      +

      Exit Doctor

      +
      + +MACDUFF +
      +What's the disease he means?
      +
      + +MALCOLM +
      +'Tis call'd the evil:
      +A most miraculous work in this good king;
      +Which often, since my here-remain in England,
      +I have seen him do. How he solicits heaven,
      +Himself best knows: but strangely-visited people,
      +All swoln and ulcerous, pitiful to the eye,
      +The mere despair of surgery, he cures,
      +Hanging a golden stamp about their necks,
      +Put on with holy prayers: and 'tis spoken,
      +To the succeeding royalty he leaves
      +The healing benediction. With this strange virtue,
      +He hath a heavenly gift of prophecy,
      +And sundry blessings hang about his throne,
      +That speak him full of grace.
      +

      Enter ROSS

      +
      + +MACDUFF +
      +See, who comes here?
      +
      + +MALCOLM +
      +My countryman; but yet I know him not.
      +
      + +MACDUFF +
      +My ever-gentle cousin, welcome hither.
      +
      + +MALCOLM +
      +I know him now. Good God, betimes remove
      +The means that makes us strangers!
      +
      + +ROSS +
      +Sir, amen.
      +
      + +MACDUFF +
      +Stands Scotland where it did?
      +
      + +ROSS +
      +Alas, poor country!
      +Almost afraid to know itself. It cannot
      +Be call'd our mother, but our grave; where nothing,
      +But who knows nothing, is once seen to smile;
      +Where sighs and groans and shrieks that rend the air
      +Are made, not mark'd; where violent sorrow seems
      +A modern ecstasy; the dead man's knell
      +Is there scarce ask'd for who; and good men's lives
      +Expire before the flowers in their caps,
      +Dying or ere they sicken.
      +
      + +MACDUFF +
      +O, relation
      +Too nice, and yet too true!
      +
      + +MALCOLM +
      +What's the newest grief?
      +
      + +ROSS +
      +That of an hour's age doth hiss the speaker:
      +Each minute teems a new one.
      +
      + +MACDUFF +
      +How does my wife?
      +
      + +ROSS +
      +Why, well.
      +
      + +MACDUFF +
      + And all my children?
      +
      + +ROSS +
      +Well too.
      +
      + +MACDUFF +
      +The tyrant has not batter'd at their peace?
      +
      + +ROSS +
      +No; they were well at peace when I did leave 'em.
      +
      + +MACDUFF +
      +But not a niggard of your speech: how goes't?
      +
      + +ROSS +
      +When I came hither to transport the tidings,
      +Which I have heavily borne, there ran a rumour
      +Of many worthy fellows that were out;
      +Which was to my belief witness'd the rather,
      +For that I saw the tyrant's power a-foot:
      +Now is the time of help; your eye in Scotland
      +Would create soldiers, make our women fight,
      +To doff their dire distresses.
      +
      + +MALCOLM +
      +Be't their comfort
      +We are coming thither: gracious England hath
      +Lent us good Siward and ten thousand men;
      +An older and a better soldier none
      +That Christendom gives out.
      +
      + +ROSS +
      +Would I could answer
      +This comfort with the like! But I have words
      +That would be howl'd out in the desert air,
      +Where hearing should not latch them.
      +
      + +MACDUFF +
      +What concern they?
      +The general cause? or is it a fee-grief
      +Due to some single breast?
      +
      + +ROSS +
      +No mind that's honest
      +But in it shares some woe; though the main part
      +Pertains to you alone.
      +
      + +MACDUFF +
      +If it be mine,
      +Keep it not from me, quickly let me have it.
      +
      + +ROSS +
      +Let not your ears despise my tongue for ever,
      +Which shall possess them with the heaviest sound
      +That ever yet they heard.
      +
      + +MACDUFF +
      +Hum! I guess at it.
      +
      + +ROSS +
      +Your castle is surprised; your wife and babes
      +Savagely slaughter'd: to relate the manner,
      +Were, on the quarry of these murder'd deer,
      +To add the death of you.
      +
      + +MALCOLM +
      +Merciful heaven!
      +What, man! ne'er pull your hat upon your brows;
      +Give sorrow words: the grief that does not speak
      +Whispers the o'er-fraught heart and bids it break.
      +
      + +MACDUFF +
      +My children too?
      +
      + +ROSS +
      + Wife, children, servants, all
      +That could be found.
      +
      + +MACDUFF +
      +And I must be from thence!
      +My wife kill'd too?
      +
      + +ROSS +
      +I have said.
      +
      + +MALCOLM +
      +Be comforted:
      +Let's make us medicines of our great revenge,
      +To cure this deadly grief.
      +
      + +MACDUFF +
      +He has no children. All my pretty ones?
      +Did you say all? O hell-kite! All?
      +What, all my pretty chickens and their dam
      +At one fell swoop?
      +
      + +MALCOLM +
      +Dispute it like a man.
      +
      + +MACDUFF +
      +I shall do so;
      +But I must also feel it as a man:
      +I cannot but remember such things were,
      +That were most precious to me. Did heaven look on,
      +And would not take their part? Sinful Macduff,
      +They were all struck for thee! naught that I am,
      +Not for their own demerits, but for mine,
      +Fell slaughter on their souls. Heaven rest them now!
      +
      + +MALCOLM +
      +Be this the whetstone of your sword: let grief
      +Convert to anger; blunt not the heart, enrage it.
      +
      + +MACDUFF +
      +O, I could play the woman with mine eyes
      +And braggart with my tongue! But, gentle heavens,
      +Cut short all intermission; front to front
      +Bring thou this fiend of Scotland and myself;
      +Within my sword's length set him; if he 'scape,
      +Heaven forgive him too!
      +
      + +MALCOLM +
      +This tune goes manly.
      +Come, go we to the king; our power is ready;
      +Our lack is nothing but our leave; Macbeth
      +Is ripe for shaking, and the powers above
      +Put on their instruments. Receive what cheer you may:
      +The night is long that never finds the day.
      +

      Exeunt

      +

      +

      ACT V

      +

      SCENE I. Dunsinane. Ante-room in the castle.

      +

      +Enter a Doctor of Physic and a Waiting-Gentlewoman +
      + +Doctor +
      +I have two nights watched with you, but can perceive
      +no truth in your report. When was it she last walked?
      +
      + +Gentlewoman +
      +Since his majesty went into the field, I have seen
      +her rise from her bed, throw her night-gown upon
      +her, unlock her closet, take forth paper, fold it,
      +write upon't, read it, afterwards seal it, and again
      +return to bed; yet all this while in a most fast sleep.
      +
      + +Doctor +
      +A great perturbation in nature, to receive at once
      +the benefit of sleep, and do the effects of
      +watching! In this slumbery agitation, besides her
      +walking and other actual performances, what, at any
      +time, have you heard her say?
      +
      + +Gentlewoman +
      +That, sir, which I will not report after her.
      +
      + +Doctor +
      +You may to me: and 'tis most meet you should.
      +
      + +Gentlewoman +
      +Neither to you nor any one; having no witness to
      +confirm my speech.
      +

      Enter LADY MACBETH, with a taper

      +Lo you, here she comes! This is her very guise;
      +and, upon my life, fast asleep. Observe her; stand close.
      +
      + +Doctor +
      +How came she by that light?
      +
      + +Gentlewoman +
      +Why, it stood by her: she has light by her
      +continually; 'tis her command.
      +
      + +Doctor +
      +You see, her eyes are open.
      +
      + +Gentlewoman +
      +Ay, but their sense is shut.
      +
      + +Doctor +
      +What is it she does now? Look, how she rubs her hands.
      +
      + +Gentlewoman +
      +It is an accustomed action with her, to seem thus
      +washing her hands: I have known her continue in
      +this a quarter of an hour.
      +
      + +LADY MACBETH +
      +Yet here's a spot.
      +
      + +Doctor +
      +Hark! she speaks: I will set down what comes from
      +her, to satisfy my remembrance the more strongly.
      +
      + +LADY MACBETH +
      +Out, damned spot! out, I say!--One: two: why,
      +then, 'tis time to do't.--Hell is murky!--Fie, my
      +lord, fie! a soldier, and afeard? What need we
      +fear who knows it, when none can call our power to
      +account?--Yet who would have thought the old man
      +to have had so much blood in him.
      +
      + +Doctor +
      +Do you mark that?
      +
      + +LADY MACBETH +
      +The thane of Fife had a wife: where is she now?--
      +What, will these hands ne'er be clean?--No more o'
      +that, my lord, no more o' that: you mar all with
      +this starting.
      +
      + +Doctor +
      +Go to, go to; you have known what you should not.
      +
      + +Gentlewoman +
      +She has spoke what she should not, I am sure of
      +that: heaven knows what she has known.
      +
      + +LADY MACBETH +
      +Here's the smell of the blood still: all the
      +perfumes of Arabia will not sweeten this little
      +hand. Oh, oh, oh!
      +
      + +Doctor +
      +What a sigh is there! The heart is sorely charged.
      +
      + +Gentlewoman +
      +I would not have such a heart in my bosom for the
      +dignity of the whole body.
      +
      + +Doctor +
      +Well, well, well,--
      +
      + +Gentlewoman +
      +Pray God it be, sir.
      +
      + +Doctor +
      +This disease is beyond my practise: yet I have known
      +those which have walked in their sleep who have died
      +holily in their beds.
      +
      + +LADY MACBETH +
      +Wash your hands, put on your nightgown; look not so
      +pale.--I tell you yet again, Banquo's buried; he
      +cannot come out on's grave.
      +
      + +Doctor +
      +Even so?
      +
      + +LADY MACBETH +
      +To bed, to bed! there's knocking at the gate:
      +come, come, come, come, give me your hand. What's
      +done cannot be undone.--To bed, to bed, to bed!
      +

      Exit

      +
      + +Doctor +
      +Will she go now to bed?
      +
      + +Gentlewoman +
      +Directly.
      +
      + +Doctor +
      +Foul whisperings are abroad: unnatural deeds
      +Do breed unnatural troubles: infected minds
      +To their deaf pillows will discharge their secrets:
      +More needs she the divine than the physician.
      +God, God forgive us all! Look after her;
      +Remove from her the means of all annoyance,
      +And still keep eyes upon her. So, good night:
      +My mind she has mated, and amazed my sight.
      +I think, but dare not speak.
      +
      + +Gentlewoman +
      +Good night, good doctor.
      +

      Exeunt

      +
      +

      SCENE II. The country near Dunsinane.

      +

      +Drum and colours. Enter MENTEITH, CAITHNESS, ANGUS, LENNOX, and Soldiers +
      + +MENTEITH +
      +The English power is near, led on by Malcolm,
      +His uncle Siward and the good Macduff:
      +Revenges burn in them; for their dear causes
      +Would to the bleeding and the grim alarm
      +Excite the mortified man.
      +
      + +ANGUS +
      +Near Birnam wood
      +Shall we well meet them; that way are they coming.
      +
      + +CAITHNESS +
      +Who knows if Donalbain be with his brother?
      +
      + +LENNOX +
      +For certain, sir, he is not: I have a file
      +Of all the gentry: there is Siward's son,
      +And many unrough youths that even now
      +Protest their first of manhood.
      +
      + +MENTEITH +
      +What does the tyrant?
      +
      + +CAITHNESS +
      +Great Dunsinane he strongly fortifies:
      +Some say he's mad; others that lesser hate him
      +Do call it valiant fury: but, for certain,
      +He cannot buckle his distemper'd cause
      +Within the belt of rule.
      +
      + +ANGUS +
      +Now does he feel
      +His secret murders sticking on his hands;
      +Now minutely revolts upbraid his faith-breach;
      +Those he commands move only in command,
      +Nothing in love: now does he feel his title
      +Hang loose about him, like a giant's robe
      +Upon a dwarfish thief.
      +
      + +MENTEITH +
      +Who then shall blame
      +His pester'd senses to recoil and start,
      +When all that is within him does condemn
      +Itself for being there?
      +
      + +CAITHNESS +
      +Well, march we on,
      +To give obedience where 'tis truly owed:
      +Meet we the medicine of the sickly weal,
      +And with him pour we in our country's purge
      +Each drop of us.
      +
      + +LENNOX +
      + Or so much as it needs,
      +To dew the sovereign flower and drown the weeds.
      +Make we our march towards Birnam.
      +

      Exeunt, marching

      +
      +

      SCENE III. Dunsinane. A room in the castle.

      +

      +Enter MACBETH, Doctor, and Attendants +
      + +MACBETH +
      +Bring me no more reports; let them fly all:
      +Till Birnam wood remove to Dunsinane,
      +I cannot taint with fear. What's the boy Malcolm?
      +Was he not born of woman? The spirits that know
      +All mortal consequences have pronounced me thus:
      +'Fear not, Macbeth; no man that's born of woman
      +Shall e'er have power upon thee.' Then fly,
      +false thanes,
      +And mingle with the English epicures:
      +The mind I sway by and the heart I bear
      +Shall never sag with doubt nor shake with fear.
      +

      Enter a Servant

      +The devil damn thee black, thou cream-faced loon!
      +Where got'st thou that goose look?
      +
      + +Servant +
      +There is ten thousand--
      +
      + +MACBETH +
      +Geese, villain!
      +
      + +Servant +
      +Soldiers, sir.
      +
      + +MACBETH +
      +Go prick thy face, and over-red thy fear,
      +Thou lily-liver'd boy. What soldiers, patch?
      +Death of thy soul! those linen cheeks of thine
      +Are counsellors to fear. What soldiers, whey-face?
      +
      + +Servant +
      +The English force, so please you.
      +
      + +MACBETH +
      +Take thy face hence.
      +

      Exit Servant

      +Seyton!--I am sick at heart,
      +When I behold--Seyton, I say!--This push
      +Will cheer me ever, or disseat me now.
      +I have lived long enough: my way of life
      +Is fall'n into the sear, the yellow leaf;
      +And that which should accompany old age,
      +As honour, love, obedience, troops of friends,
      +I must not look to have; but, in their stead,
      +Curses, not loud but deep, mouth-honour, breath,
      +Which the poor heart would fain deny, and dare not. Seyton!
      +

      Enter SEYTON

      +
      + +SEYTON +
      +What is your gracious pleasure?
      +
      + +MACBETH +
      +What news more?
      +
      + +SEYTON +
      +All is confirm'd, my lord, which was reported.
      +
      + +MACBETH +
      +I'll fight till from my bones my flesh be hack'd.
      +Give me my armour.
      +
      + +SEYTON +
      +'Tis not needed yet.
      +
      + +MACBETH +
      +I'll put it on.
      +Send out more horses; skirr the country round;
      +Hang those that talk of fear. Give me mine armour.
      +How does your patient, doctor?
      +
      + +Doctor +
      +Not so sick, my lord,
      +As she is troubled with thick coming fancies,
      +That keep her from her rest.
      +
      + +MACBETH +
      +Cure her of that.
      +Canst thou not minister to a mind diseased,
      +Pluck from the memory a rooted sorrow,
      +Raze out the written troubles of the brain
      +And with some sweet oblivious antidote
      +Cleanse the stuff'd bosom of that perilous stuff
      +Which weighs upon the heart?
      +
      + +Doctor +
      +Therein the patient
      +Must minister to himself.
      +
      + +MACBETH +
      +Throw physic to the dogs; I'll none of it.
      +Come, put mine armour on; give me my staff.
      +Seyton, send out. Doctor, the thanes fly from me.
      +Come, sir, dispatch. If thou couldst, doctor, cast
      +The water of my land, find her disease,
      +And purge it to a sound and pristine health,
      +I would applaud thee to the very echo,
      +That should applaud again.--Pull't off, I say.--
      +What rhubarb, cyme, or what purgative drug,
      +Would scour these English hence? Hear'st thou of them?
      +
      + +Doctor +
      +Ay, my good lord; your royal preparation
      +Makes us hear something.
      +
      + +MACBETH +
      +Bring it after me.
      +I will not be afraid of death and bane,
      +Till Birnam forest come to Dunsinane.
      +
      + +Doctor +
      +[Aside] Were I from Dunsinane away and clear,
      +Profit again should hardly draw me here.
      +

      Exeunt

      +
      +

      SCENE IV. Country near Birnam wood.

      +

      +Drum and colours. Enter MALCOLM, SIWARD and YOUNG SIWARD, MACDUFF, MENTEITH, CAITHNESS, ANGUS, LENNOX, ROSS, and Soldiers, marching +
      + +MALCOLM +
      +Cousins, I hope the days are near at hand
      +That chambers will be safe.
      +
      + +MENTEITH +
      +We doubt it nothing.
      +
      + +SIWARD +
      +What wood is this before us?
      +
      + +MENTEITH +
      +The wood of Birnam.
      +
      + +MALCOLM +
      +Let every soldier hew him down a bough
      +And bear't before him: thereby shall we shadow
      +The numbers of our host and make discovery
      +Err in report of us.
      +
      + +Soldiers +
      +It shall be done.
      +
      + +SIWARD +
      +We learn no other but the confident tyrant
      +Keeps still in Dunsinane, and will endure
      +Our setting down before 't.
      +
      + +MALCOLM +
      +'Tis his main hope:
      +For where there is advantage to be given,
      +Both more and less have given him the revolt,
      +And none serve with him but constrained things
      +Whose hearts are absent too.
      +
      + +MACDUFF +
      +Let our just censures
      +Attend the true event, and put we on
      +Industrious soldiership.
      +
      + +SIWARD +
      +The time approaches
      +That will with due decision make us know
      +What we shall say we have and what we owe.
      +Thoughts speculative their unsure hopes relate,
      +But certain issue strokes must arbitrate:
      +Towards which advance the war.
      +

      Exeunt, marching

      +
      +

      SCENE V. Dunsinane. Within the castle.

      +

      +Enter MACBETH, SEYTON, and Soldiers, with drum and colours +
      + +MACBETH +
      +Hang out our banners on the outward walls;
      +The cry is still 'They come:' our castle's strength
      +Will laugh a siege to scorn: here let them lie
      +Till famine and the ague eat them up:
      +Were they not forced with those that should be ours,
      +We might have met them dareful, beard to beard,
      +And beat them backward home.
      +

      A cry of women within

      +What is that noise?
      +
      + +SEYTON +
      +It is the cry of women, my good lord.
      +

      Exit

      +
      + +MACBETH +
      +I have almost forgot the taste of fears;
      +The time has been, my senses would have cool'd
      +To hear a night-shriek; and my fell of hair
      +Would at a dismal treatise rouse and stir
      +As life were in't: I have supp'd full with horrors;
      +Direness, familiar to my slaughterous thoughts
      +Cannot once start me.
      +

      Re-enter SEYTON

      +Wherefore was that cry?
      +
      + +SEYTON +
      +The queen, my lord, is dead.
      +
      + +MACBETH +
      +She should have died hereafter;
      +There would have been a time for such a word.
      +To-morrow, and to-morrow, and to-morrow,
      +Creeps in this petty pace from day to day
      +To the last syllable of recorded time,
      +And all our yesterdays have lighted fools
      +The way to dusty death. Out, out, brief candle!
      +Life's but a walking shadow, a poor player
      +That struts and frets his hour upon the stage
      +And then is heard no more: it is a tale
      +Told by an idiot, full of sound and fury,
      +Signifying nothing.
      +

      Enter a Messenger

      +Thou comest to use thy tongue; thy story quickly.
      +
      + +Messenger +
      +Gracious my lord,
      +I should report that which I say I saw,
      +But know not how to do it.
      +
      + +MACBETH +
      +Well, say, sir.
      +
      + +Messenger +
      +As I did stand my watch upon the hill,
      +I look'd toward Birnam, and anon, methought,
      +The wood began to move.
      +
      + +MACBETH +
      +Liar and slave!
      +
      + +Messenger +
      +Let me endure your wrath, if't be not so:
      +Within this three mile may you see it coming;
      +I say, a moving grove.
      +
      + +MACBETH +
      +If thou speak'st false,
      +Upon the next tree shalt thou hang alive,
      +Till famine cling thee: if thy speech be sooth,
      +I care not if thou dost for me as much.
      +I pull in resolution, and begin
      +To doubt the equivocation of the fiend
      +That lies like truth: 'Fear not, till Birnam wood
      +Do come to Dunsinane:' and now a wood
      +Comes toward Dunsinane. Arm, arm, and out!
      +If this which he avouches does appear,
      +There is nor flying hence nor tarrying here.
      +I gin to be aweary of the sun,
      +And wish the estate o' the world were now undone.
      +Ring the alarum-bell! Blow, wind! come, wrack!
      +At least we'll die with harness on our back.
      +

      Exeunt

      +
      +

      SCENE VI. Dunsinane. Before the castle.

      +

      +Drum and colours. Enter MALCOLM, SIWARD, MACDUFF, and their Army, with boughs +
      + +MALCOLM +
      +Now near enough: your leafy screens throw down.
      +And show like those you are. You, worthy uncle,
      +Shall, with my cousin, your right-noble son,
      +Lead our first battle: worthy Macduff and we
      +Shall take upon 's what else remains to do,
      +According to our order.
      +
      + +SIWARD +
      +Fare you well.
      +Do we but find the tyrant's power to-night,
      +Let us be beaten, if we cannot fight.
      +
      + +MACDUFF +
      +Make all our trumpets speak; give them all breath,
      +Those clamorous harbingers of blood and death.
      +

      Exeunt

      +
      +

      SCENE VII. Another part of the field.

      +

      +Alarums. Enter MACBETH +
      + +MACBETH +
      +They have tied me to a stake; I cannot fly,
      +But, bear-like, I must fight the course. What's he
      +That was not born of woman? Such a one
      +Am I to fear, or none.
      +

      Enter YOUNG SIWARD

      +
      + +YOUNG SIWARD +
      +What is thy name?
      +
      + +MACBETH +
      + Thou'lt be afraid to hear it.
      +
      + +YOUNG SIWARD +
      +No; though thou call'st thyself a hotter name
      +Than any is in hell.
      +
      + +MACBETH +
      +My name's Macbeth.
      +
      + +YOUNG SIWARD +
      +The devil himself could not pronounce a title
      +More hateful to mine ear.
      +
      + +MACBETH +
      +No, nor more fearful.
      +
      + +YOUNG SIWARD +
      +Thou liest, abhorred tyrant; with my sword
      +I'll prove the lie thou speak'st.
      +

      They fight and YOUNG SIWARD is slain

      +
      + +MACBETH +
      +Thou wast born of woman
      +But swords I smile at, weapons laugh to scorn,
      +Brandish'd by man that's of a woman born.
      +

      Exit

      +

      Alarums. Enter MACDUFF

      +
      + +MACDUFF +
      +That way the noise is. Tyrant, show thy face!
      +If thou be'st slain and with no stroke of mine,
      +My wife and children's ghosts will haunt me still.
      +I cannot strike at wretched kerns, whose arms
      +Are hired to bear their staves: either thou, Macbeth,
      +Or else my sword with an unbatter'd edge
      +I sheathe again undeeded. There thou shouldst be;
      +By this great clatter, one of greatest note
      +Seems bruited. Let me find him, fortune!
      +And more I beg not.
      +

      Exit. Alarums

      +

      Enter MALCOLM and SIWARD

      +
      + +SIWARD +
      +This way, my lord; the castle's gently render'd:
      +The tyrant's people on both sides do fight;
      +The noble thanes do bravely in the war;
      +The day almost itself professes yours,
      +And little is to do.
      +
      + +MALCOLM +
      +We have met with foes
      +That strike beside us.
      +
      + +SIWARD +
      +Enter, sir, the castle.
      +

      Exeunt. Alarums

      +
      +

      SCENE VIII. Another part of the field.

      +

      +Enter MACBETH +
      + +MACBETH +
      +Why should I play the Roman fool, and die
      +On mine own sword? whiles I see lives, the gashes
      +Do better upon them.
      +

      Enter MACDUFF

      +
      + +MACDUFF +
      +Turn, hell-hound, turn!
      +
      + +MACBETH +
      +Of all men else I have avoided thee:
      +But get thee back; my soul is too much charged
      +With blood of thine already.
      +
      + +MACDUFF +
      +I have no words:
      +My voice is in my sword: thou bloodier villain
      +Than terms can give thee out!
      +

      They fight

      +
      + +MACBETH +
      +Thou losest labour:
      +As easy mayst thou the intrenchant air
      +With thy keen sword impress as make me bleed:
      +Let fall thy blade on vulnerable crests;
      +I bear a charmed life, which must not yield,
      +To one of woman born.
      +
      + +MACDUFF +
      +Despair thy charm;
      +And let the angel whom thou still hast served
      +Tell thee, Macduff was from his mother's womb
      +Untimely ripp'd.
      +
      + +MACBETH +
      +Accursed be that tongue that tells me so,
      +For it hath cow'd my better part of man!
      +And be these juggling fiends no more believed,
      +That palter with us in a double sense;
      +That keep the word of promise to our ear,
      +And break it to our hope. I'll not fight with thee.
      +
      + +MACDUFF +
      +Then yield thee, coward,
      +And live to be the show and gaze o' the time:
      +We'll have thee, as our rarer monsters are,
      +Painted on a pole, and underwrit,
      +'Here may you see the tyrant.'
      +
      + +MACBETH +
      +I will not yield,
      +To kiss the ground before young Malcolm's feet,
      +And to be baited with the rabble's curse.
      +Though Birnam wood be come to Dunsinane,
      +And thou opposed, being of no woman born,
      +Yet I will try the last. Before my body
      +I throw my warlike shield. Lay on, Macduff,
      +And damn'd be him that first cries, 'Hold, enough!'
      +

      Exeunt, fighting. Alarums

      +

      Retreat. Flourish. Enter, with drum and colours, MALCOLM, SIWARD, ROSS, the other Thanes, and Soldiers

      +
      + +MALCOLM +
      +I would the friends we miss were safe arrived.
      +
      + +SIWARD +
      +Some must go off: and yet, by these I see,
      +So great a day as this is cheaply bought.
      +
      + +MALCOLM +
      +Macduff is missing, and your noble son.
      +
      + +ROSS +
      +Your son, my lord, has paid a soldier's debt:
      +He only lived but till he was a man;
      +The which no sooner had his prowess confirm'd
      +In the unshrinking station where he fought,
      +But like a man he died.
      +
      + +SIWARD +
      +Then he is dead?
      +
      + +ROSS +
      +Ay, and brought off the field: your cause of sorrow
      +Must not be measured by his worth, for then
      +It hath no end.
      +
      + +SIWARD +
      + Had he his hurts before?
      +
      + +ROSS +
      +Ay, on the front.
      +
      + +SIWARD +
      + Why then, God's soldier be he!
      +Had I as many sons as I have hairs,
      +I would not wish them to a fairer death:
      +And so, his knell is knoll'd.
      +
      + +MALCOLM +
      +He's worth more sorrow,
      +And that I'll spend for him.
      +
      + +SIWARD +
      +He's worth no more
      +They say he parted well, and paid his score:
      +And so, God be with him! Here comes newer comfort.
      +

      Re-enter MACDUFF, with MACBETH's head

      +
      + +MACDUFF +
      +Hail, king! for so thou art: behold, where stands
      +The usurper's cursed head: the time is free:
      +I see thee compass'd with thy kingdom's pearl,
      +That speak my salutation in their minds;
      +Whose voices I desire aloud with mine:
      +Hail, King of Scotland!
      +
      + +ALL +
      +Hail, King of Scotland!
      +

      Flourish

      +
      + +MALCOLM +
      +We shall not spend a large expense of time
      +Before we reckon with your several loves,
      +And make us even with you. My thanes and kinsmen,
      +Henceforth be earls, the first that ever Scotland
      +In such an honour named. What's more to do,
      +Which would be planted newly with the time,
      +As calling home our exiled friends abroad
      +That fled the snares of watchful tyranny;
      +Producing forth the cruel ministers
      +Of this dead butcher and his fiend-like queen,
      +Who, as 'tis thought, by self and violent hands
      +Took off her life; this, and what needful else
      +That calls upon us, by the grace of Grace,
      +We will perform in measure, time and place:
      +So, thanks to all at once and to each one,
      +Whom we invite to see us crown'd at Scone.
      +

      Flourish. Exeunt

      + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/map.png b/www/node_modules/selenium-webdriver/lib/test/data/map.png new file mode 100644 index 0000000000000000000000000000000000000000..763f5627995f6f178e8ea78e37f32c80b35f5e2b GIT binary patch literal 26209 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 + + Map test page + + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/markerTransparent.png b/www/node_modules/selenium-webdriver/lib/test/data/markerTransparent.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4e5e7f4d63fe103983cf3bfa53733a0089ba51 GIT binary patch literal 260 zcmV+f0sH=mP)6Xw+2uq_(M`6dHE24R1_~SA2W)sEi((o#t%gC<}F#-mygTf~{1syRj83 z$v~+4?^7VUur4s{YzK(ScPqf9AN{Mq%K}&hLakp1D8YW + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/meta-redirect.html b/www/node_modules/selenium-webdriver/lib/test/data/meta-redirect.html new file mode 100644 index 0000000..9d9c2f0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/meta-redirect.html @@ -0,0 +1,11 @@ + + + Some test page + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/missedJsReference.html b/www/node_modules/selenium-webdriver/lib/test/data/missedJsReference.html new file mode 100644 index 0000000..6167752 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/missedJsReference.html @@ -0,0 +1,11 @@ + + + + Example page + + +

      This page contains a nested iframe. Execute some JS to locate a reference to an element in this + frame and return it. You should need to switch to that frame in order to use that element.

      + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html b/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html new file mode 100644 index 0000000..4eff01a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html @@ -0,0 +1,21 @@ + + +First Modal + + + + +

      Modal dialog sample

      + + + +lnk2 +
      + +
      + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html b/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html new file mode 100644 index 0000000..cec3f3f --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html @@ -0,0 +1,21 @@ + + +Second Modal + + + + +

      Modal dialog sample

      + + + +lnk3 +
      + +
      + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html b/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html new file mode 100644 index 0000000..6c5eb72 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html @@ -0,0 +1,15 @@ + + +Third Modal + + + + +

      Modal dialog sample

      + + +
      + +
      + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html b/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html new file mode 100644 index 0000000..0a1c4c9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html @@ -0,0 +1,21 @@ + + +Main window + + + + +

      Modal dialog sample

      + + + +lnk1 +
      + +
      + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/mouseOver.html b/www/node_modules/selenium-webdriver/lib/test/data/mouseOver.html new file mode 100644 index 0000000..d4751bf --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/mouseOver.html @@ -0,0 +1,17 @@ + + +
      +
      +
      + +
      diff --git a/www/node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html b/www/node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html new file mode 100644 index 0000000..39a31cd --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html @@ -0,0 +1,33 @@ + + + + + + + + + Div tracking mouse position. +
      +
      + Move mouse here. +
      +

      +0, 0 +

      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/nestedElements.html b/www/node_modules/selenium-webdriver/lib/test/data/nestedElements.html new file mode 100644 index 0000000..cf00083 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/nestedElements.html @@ -0,0 +1,155 @@ + + +

      outside

      +

      outside

      +
      +

      inside

      +
      + + Here's a checkbox:
      + + + +
      + Here's a checkbox:
      + + +
      + +hello world + + + + + + +
      + Here's a checkbox:
      + +
      + +
      + Here's a checkbox:
      + + +
      + +hello world + + + + + + +
      + Here's a checkbox:
      + +
      + +
      + Here's a checkbox:
      + + +
      + +hello world + + + + + + +
      + Here's a checkbox:
      + +
      + +
      + Here's a checkbox:
      + + +
      + +hello world + + +Span with class of one +
      + Find me + Also me + But not me +
      + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow-body.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow-body.html new file mode 100644 index 0000000..2d2264c --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow-body.html @@ -0,0 +1,15 @@ + + + + The Visibility of Everyday Things + + + +

      This image is copyright Simon Stewart and donated to the Selenium project for use in its test suites. +

      +a nice beach + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html new file mode 100644 index 0000000..cf8a647 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html new file mode 100644 index 0000000..96fd750 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html new file mode 100644 index 0000000..6f1d90b --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html new file mode 100644 index 0000000..24dd192 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html new file mode 100644 index 0000000..cae5665 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html new file mode 100644 index 0000000..d4ffa39 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html new file mode 100644 index 0000000..d425a2a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html new file mode 100644 index 0000000..4a6ff59 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html new file mode 100644 index 0000000..efa8074 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html b/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html new file mode 100644 index 0000000..cb59707 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html @@ -0,0 +1,20 @@ + + + + + + Page with OnBeforeUnload handler + + +

      Page with onbeforeunload event handler. Click here to navigate to another page.

      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html b/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html new file mode 100644 index 0000000..2c644ff --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html @@ -0,0 +1,6 @@ + + + +

      Page with onload event handler

      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html b/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html new file mode 100644 index 0000000..6070341 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html @@ -0,0 +1,6 @@ + + + +

      Page with onunload event handler

      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html b/www/node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html new file mode 100644 index 0000000..ea94f8e --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html @@ -0,0 +1,6 @@ + + + +load a slow page + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/plain.txt b/www/node_modules/selenium-webdriver/lib/test/data/plain.txt new file mode 100644 index 0000000..8318c86 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/plain.txt @@ -0,0 +1 @@ +Test \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/proxy/page1.html b/www/node_modules/selenium-webdriver/lib/test/data/proxy/page1.html new file mode 100644 index 0000000..1810f1c --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/proxy/page1.html @@ -0,0 +1,20 @@ + + + +Page 1 +

      The next query param must be the URL for the next page to +link to. + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/proxy/page2.html b/www/node_modules/selenium-webdriver/lib/test/data/proxy/page2.html new file mode 100644 index 0000000..d826f17 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/proxy/page2.html @@ -0,0 +1,24 @@ + + + +Page 2 +This page is a middle man for referrer tests. +This page will include a link to a "next" page if the next query +parameter, or the document.referrer is set. +

      + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/proxy/page3.html b/www/node_modules/selenium-webdriver/lib/test/data/proxy/page3.html new file mode 100644 index 0000000..27048f7 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/proxy/page3.html @@ -0,0 +1,5 @@ + + + +Page 3 +

      diff --git a/www/node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html b/www/node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html new file mode 100644 index 0000000..8f257fd --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + +

      This

      is a

      contentEditable area

      + +
      + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/rectangles.html b/www/node_modules/selenium-webdriver/lib/test/data/rectangles.html new file mode 100644 index 0000000..8ba2339 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/rectangles.html @@ -0,0 +1,40 @@ + + + + Rectangles + + + +
      r1
      +
      r2
      +
      r3
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/resultPage.html b/www/node_modules/selenium-webdriver/lib/test/data/resultPage.html new file mode 100644 index 0000000..94f3e24 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/resultPage.html @@ -0,0 +1,25 @@ + + + We Arrive Here + + + +

      Success!

      + +
      +

      List of stuff

      +
        +
      1. Item 1
      2. +
      3. Item 2
      4. +
      +
      +
      +

      Almost empty

      +
      + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/rich_text.html b/www/node_modules/selenium-webdriver/lib/test/data/rich_text.html new file mode 100644 index 0000000..a42e43a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/rich_text.html @@ -0,0 +1,161 @@ + + + + + + +
      +
      +
      + + + + + +
      +
      IFRAME
      + +
      +
      frame.contentWindow.document.designMode: on
      frame.contentWindow.document.body.contentEditable: false
      +
      +
      DIV
      +
      +
      +
      +
      div.ownerDocument.designMode: off
      div.ownerDocument.body.contentEditable: false
      div.contentEditable: true
      +
      +
      + +
      +
      + + + + + + + + + + + + + + + + + + +
      type:[]
      tagName:[]
      id:[]
      keyIdentifier:[]
      keyLocation:[]
      keyCode:[]
      charCode:[]
      which:[]
      isTrusted:[]
      ---------------------
      Modifiers
      alt:[]
      ctrl:[]
      shift:[]
      meta:[]
      +
      + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html b/www/node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html new file mode 100644 index 0000000..8a05925 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html @@ -0,0 +1,31 @@ + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.css b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.css new file mode 100644 index 0000000..8152618 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.css @@ -0,0 +1,19 @@ +* { + margin: 0; +} +html, body, #output { + width: 100%; + height: 100%; +} +table { + border: 0px; + border-collapse: collapse; + border-spacing: 0px; + display: table; +} +table td { + padding: 0px; +} +.cell { + color: black; +} diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.html new file mode 100644 index 0000000..166665d --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.js b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.js new file mode 100644 index 0000000..1d16859 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.js @@ -0,0 +1,7 @@ +function toColor(num) { + num >>>= 0; + var b = num & 0xFF, + g = (num & 0xFF00) >>> 8, + r = (num & 0xFF0000) >>> 16; + return "rgb(" + [r, g, b].join(",") + ")"; +} \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html new file mode 100644 index 0000000..35b03ae --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html @@ -0,0 +1,72 @@ + + +screen frame1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html new file mode 100644 index 0000000..e6e17e6 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html @@ -0,0 +1,72 @@ + + +screen frame2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html new file mode 100644 index 0000000..46852dc --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html @@ -0,0 +1,11 @@ + + + screen test + + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html new file mode 100644 index 0000000..ae3ea1e --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html @@ -0,0 +1,12 @@ + + +Screen test + + +
      + + + +
      + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html new file mode 100644 index 0000000..4d00f02 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html @@ -0,0 +1,68 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html new file mode 100644 index 0000000..1a6a100 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html new file mode 100644 index 0000000..3fee005 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html new file mode 100644 index 0000000..31733e0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html new file mode 100644 index 0000000..dbef936 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scroll.html b/www/node_modules/selenium-webdriver/lib/test/data/scroll.html new file mode 100644 index 0000000..cd5214f --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scroll.html @@ -0,0 +1,27 @@ + + + + + +
      +
        +
      • line1
      • +
      • line2
      • +
      • line3
      • +
      • line4
      • +
      • line5
      • +
      • line6
      • +
      • line7
      • +
      • line8
      • +
      • line9
      • +
      +
      +Clicked: +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scroll2.html b/www/node_modules/selenium-webdriver/lib/test/data/scroll2.html new file mode 100644 index 0000000..0ea66d3 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scroll2.html @@ -0,0 +1,21 @@ + + + + +
        +
      • +
      • +
      • Text
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scroll3.html b/www/node_modules/selenium-webdriver/lib/test/data/scroll3.html new file mode 100644 index 0000000..1aa1709 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scroll3.html @@ -0,0 +1,8 @@ + + +



























































































































































      + +



      + +                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 +
























































































































































      \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scroll4.html b/www/node_modules/selenium-webdriver/lib/test/data/scroll4.html new file mode 100644 index 0000000..652a778 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scroll4.html @@ -0,0 +1,7 @@ + + +


































































































      + +


































































































      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scroll5.html b/www/node_modules/selenium-webdriver/lib/test/data/scroll5.html new file mode 100644 index 0000000..b345a8c --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scroll5.html @@ -0,0 +1,18 @@ + + + + + +
      +
      +
      +
      +
      +Clicked: +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html new file mode 100644 index 0000000..3eb3bf4 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html @@ -0,0 +1,26 @@ + + + + Child frame + + +

      This is a scrolling frame test

      +
      + + + + + + + + + + + + + +
      First row
      Second row
      Third row
      Fourth row
      +
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html new file mode 100644 index 0000000..61ffe85 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html @@ -0,0 +1,26 @@ + + + + Child frame + + +

      This is a tall frame test

      +
      + + + + + + + + + + + + + +
      First row
      Second row
      Third row
      Fourth row
      +
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html new file mode 100644 index 0000000..1530138 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html new file mode 100644 index 0000000..5781aeb --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html @@ -0,0 +1,12 @@ + + + + Welcome Page + + +
      Placeholder
      +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html new file mode 100644 index 0000000..047de0f --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html @@ -0,0 +1,10 @@ + + + + Child frame + + +

      This is a non-scrolling frame test

      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html new file mode 100644 index 0000000..01b7c30 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html @@ -0,0 +1,19 @@ + + + + Page with overflow: auto + + + +
      Placeholder
      +
      + Click me! +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html new file mode 100644 index 0000000..c536e41 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html @@ -0,0 +1,12 @@ + + + + Welcome Page + + +
      Placeholder
      +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html new file mode 100644 index 0000000..e5b7602 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html new file mode 100644 index 0000000..f79f7c8 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html @@ -0,0 +1,12 @@ + + + + Welcome Page + + +
      Placeholder
      +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html new file mode 100644 index 0000000..0a493fa --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html new file mode 100644 index 0000000..cb5d53a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html new file mode 100644 index 0000000..5df1115 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html @@ -0,0 +1,12 @@ + + + + Welcome Page + + +
      Placeholder
      +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html new file mode 100644 index 0000000..b7cfaf5 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html new file mode 100644 index 0000000..b5716e7 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html @@ -0,0 +1,14 @@ + + + + Page with overflow: auto + + +
      +
      Placeholder
      +
      + Click me! +
      +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html new file mode 100644 index 0000000..0457a82 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html @@ -0,0 +1,9 @@ + + + +Clicked Successfully! + + +

      Clicked Successfully!

      + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/selectPage.html b/www/node_modules/selenium-webdriver/lib/test/data/selectPage.html new file mode 100644 index 0000000..4028414 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/selectPage.html @@ -0,0 +1,58 @@ + + + + +Multiple Selection test page + + + + + + + + + + + + + + + + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/selectableItems.html b/www/node_modules/selenium-webdriver/lib/test/data/selectableItems.html new file mode 100644 index 0000000..190b2ad --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/selectableItems.html @@ -0,0 +1,65 @@ + + + + + jQuery UI Selectable - Default functionality + + + + + + + + +
      + +
        +
      1. Item 1
      2. +
      3. Item 2
      4. +
      5. Item 3
      6. +
      7. Item 4
      8. +
      9. Item 5
      10. +
      11. Item 6
      12. +
      13. Item 7
      14. +
      + +
      + +
      + +

      Enable a DOM element (or group of elements) to be selectable. Draw a box with your cursor to select items. Hold down the Ctrl key to make multiple non-adjacent selections.

      + + + +
      +

      no info

      +
      + + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/sessionCookie.html b/www/node_modules/selenium-webdriver/lib/test/data/sessionCookie.html new file mode 100644 index 0000000..0ada24e --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/sessionCookie.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html b/www/node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html new file mode 100644 index 0000000..f5e2ef2 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html @@ -0,0 +1,34 @@ + + + + + Session cookie destination + + + +This is the cookie destination page. + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/simple.xml b/www/node_modules/selenium-webdriver/lib/test/data/simple.xml new file mode 100644 index 0000000..01f4c87 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/simple.xml @@ -0,0 +1,5 @@ + + + baz + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/simpleTest.html b/www/node_modules/selenium-webdriver/lib/test/data/simpleTest.html new file mode 100644 index 0000000..38210b9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/simpleTest.html @@ -0,0 +1,98 @@ + + + Hello WebDriver + + +

      Heading

      + +

      A single line of text

      + + +
      +

      A div containing

      + More than one line of text
      + +
      and block level elements
      +
      + +An inline element + +

      This line has lots + + of spaces. +

      + +

      This line has a non-breaking space

      + +

      This line has a   non-breaking space and spaces

      + +

      These lines  
        have leading and trailing NBSPs  

      + +

      This line has text within elements that are meant to be displayed + inline

      + +
      +

      before pre

      +
         This section has a preformatted
      +    text block    
      +  split in four lines
      +         
      +

      after pre

      +
      + +

      Some text

      Some more text

      + +
      Cheese

      Some text

      Some more text

      and also

      Brie
      + +
      Hello, world
      + +
      + +
      + +
      +

      + + +

      +
      + + + + + +
      Top level
      +
      +
      Nested
      +
      + + + + + +
      beforeSpace afterSpace
      + + + + + +a link to an icon + +{a="b", c=1, d=true} +{a="\\b\\\"'\'"} + +  â€â€‚        ​‌â€â€¯âŸâ ã€€test  â€â€‚        ​‌â€â€¯âŸâ ã€€ + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html b/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html new file mode 100644 index 0000000..a6216e3 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html @@ -0,0 +1,10 @@ + + + +slowLoadingAlert + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html b/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html new file mode 100644 index 0000000..02796c3 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html @@ -0,0 +1,12 @@ + + + This page loads something slowly + + +

      Simulate the situation where a web-bug or analytics script takes waaay + too long to respond. Normally these things are loaded in an iframe, which is + what we're doing here.

      + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html b/www/node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html new file mode 100644 index 0000000..d007248 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html @@ -0,0 +1,14 @@ + + + + Page with slow loading iFrames + + + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/styledPage.html b/www/node_modules/selenium-webdriver/lib/test/data/styledPage.html new file mode 100644 index 0000000..30810f0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/styledPage.html @@ -0,0 +1,28 @@ + + + + Styled Page + + + + +
      + +
      + + +
      + +
      + +
      Content
      + + + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml b/www/node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml new file mode 100644 index 0000000..bf060fd --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml @@ -0,0 +1,81 @@ + + + + + Pie Chart Test + + + +
      + Some text for the chart. +
      +
      Nothing.
      +
      + + + + + Test Chart + + + Apple + + Orange + + Banana + + Orange + + + + + + + + Example RotateScale - Rotate and scale transforms + + + + + + + + + + + + + + ABC (rotate) + + + + + + + + + + + + ABC (scale) + + + + +
      WOrange
      +
      +
      WOrange
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/svgTest.svg b/www/node_modules/selenium-webdriver/lib/test/data/svgTest.svg new file mode 100644 index 0000000..c6cc283 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/svgTest.svg @@ -0,0 +1,4 @@ + + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/tables.html b/www/node_modules/selenium-webdriver/lib/test/data/tables.html new file mode 100644 index 0000000..a2bc957 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/tables.html @@ -0,0 +1,36 @@ + + + + Here be tables + + + + + + + + + +
      HelloWorld(Cheese!)
      + + + + + +
      some text +
      some more text
      +
      + + + + + + + + + +
      Heading
      Data 1Data 2
      + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/tinymce.html b/www/node_modules/selenium-webdriver/lib/test/data/tinymce.html new file mode 100644 index 0000000..067b66c --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/tinymce.html @@ -0,0 +1,10 @@ + + + + TinyMCE + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/transformable.xml b/www/node_modules/selenium-webdriver/lib/test/data/transformable.xml new file mode 100644 index 0000000..0b7e7fd --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/transformable.xml @@ -0,0 +1,11 @@ + + + ]> + + +

      Click the button.

      + + Go to another page + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/transformable.xsl b/www/node_modules/selenium-webdriver/lib/test/data/transformable.xsl new file mode 100644 index 0000000..53db9fd --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/transformable.xsl @@ -0,0 +1,37 @@ + + + + + + + +
      + + + + + +
      + + + + + + + + + + + + + + + +
      \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/transparentUpload.html b/www/node_modules/selenium-webdriver/lib/test/data/transparentUpload.html new file mode 100644 index 0000000..87b02bf --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/transparentUpload.html @@ -0,0 +1,70 @@ + + + + Upload Form + + + + +
      +
      +
      + Upload + +
      +
      +
      + + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/underscore.html b/www/node_modules/selenium-webdriver/lib/test/data/underscore.html new file mode 100644 index 0000000..904a444 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/underscore.html @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html b/www/node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html new file mode 100644 index 0000000..245acc7 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html @@ -0,0 +1,8 @@ + + + + + +
      ‎Some notes‎
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/upload.html b/www/node_modules/selenium-webdriver/lib/test/data/upload.html new file mode 100644 index 0000000..aca398a --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/upload.html @@ -0,0 +1,45 @@ + + + + Upload Form + + + +
      +
      + Enter a file to upload: +
      +
      +
      + + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html b/www/node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html new file mode 100644 index 0000000..2453e69 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html @@ -0,0 +1,8 @@ + + +
      + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html b/www/node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html new file mode 100644 index 0000000..54a2aba --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html @@ -0,0 +1,81 @@ + + + + Rectangles + + + + +
      +
      First Target
      +
      Second Target
      +
      Third Target
      +
      Fourth Target
      +
      Not a Target
      +
      Not a Target
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/visibility-css.html b/www/node_modules/selenium-webdriver/lib/test/data/visibility-css.html new file mode 100644 index 0000000..80cc649 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/visibility-css.html @@ -0,0 +1,21 @@ + + + + +Visibility test via CSS + +
      +

      Hello world. I like cheese.

      +
      + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/win32frameset.html b/www/node_modules/selenium-webdriver/lib/test/data/win32frameset.html new file mode 100644 index 0000000..108b80f --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/win32frameset.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html b/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html new file mode 100644 index 0000000..b94733b --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html @@ -0,0 +1,12 @@ + + + + Test page for WindowSwitchingTest.testShouldFocusOnTheTopMostFrameAfterSwitchingToAWindow + + +

      Open new window

      +
      + +
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html b/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html new file mode 100644 index 0000000..52c163c --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html @@ -0,0 +1,9 @@ + + + + Simple Page + + +
      Simple page with simple test.
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml b/www/node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml new file mode 100644 index 0000000..aca53d3 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml @@ -0,0 +1,17 @@ + + + + XHTML + + + +
      + + +
      + +

      Here is some content that should not be in the previous p tag + + + diff --git a/www/node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html b/www/node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html new file mode 100644 index 0000000..d2f3a5d --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html @@ -0,0 +1,76 @@ + + + + XHTML Test Page + + +

      + + + +
      +

      XHTML Might Be The Future

      + +

      If you'd like to go elsewhere then click me.

      + +

      Alternatively, this goes to the same place.

      + +
      + +
      + + This link has the same text as another link: click me. +
      + +
      Another div starts here.

      +

      An H2 title

      +

      Some more text

      +
      + +
      + Foo +
        + +
      + +
      +
      +
      + + +
      +
      +
      + + I have width +
      +
      +
      +
      + + +

      +

      +
      Link=equalssign + +

      Spaced out

      + + +
      first_div
      +
      second_div
      + first_span + second_span +
      + +
      I'm a parent +
      I'm a child
      +
      + +
      Woo woo
      + + diff --git a/www/node_modules/selenium-webdriver/lib/test/fileserver.js b/www/node_modules/selenium-webdriver/lib/test/fileserver.js new file mode 100644 index 0000000..448b0c9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/fileserver.js @@ -0,0 +1,319 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'), + http = require('http'), + path = require('path'), + url = require('url'); + +var express = require('express'); +var multer = require('multer'); +var serveIndex = require('serve-index'); + +var Server = require('./httpserver').Server, + resources = require('./resources'), + isDevMode = require('../devmode'), + promise = require('../promise'); + +var WEB_ROOT = '/common'; +var JS_ROOT = '/javascript'; + +var baseDirectory = resources.locate(isDevMode ? 'common/src/web' : '.'); +var jsDirectory = resources.locate(isDevMode ? 'javascript' : '..'); + +var Pages = (function() { + var pages = {}; + function addPage(page, path) { + pages.__defineGetter__(page, function() { + return exports.whereIs(path); + }); + } + + addPage('ajaxyPage', 'ajaxy_page.html'); + addPage('alertsPage', 'alerts.html'); + addPage('bodyTypingPage', 'bodyTypingTest.html'); + addPage('booleanAttributes', 'booleanAttributes.html'); + addPage('childPage', 'child/childPage.html'); + addPage('chinesePage', 'cn-test.html'); + addPage('clickJacker', 'click_jacker.html'); + addPage('clickEventPage', 'clickEventPage.html'); + addPage('clicksPage', 'clicks.html'); + addPage('colorPage', 'colorPage.html'); + addPage('deletingFrame', 'deletingFrame.htm'); + addPage('draggableLists', 'draggableLists.html'); + addPage('dragAndDropPage', 'dragAndDropTest.html'); + addPage('droppableItems', 'droppableItems.html'); + addPage('documentWrite', 'document_write_in_onload.html'); + addPage('dynamicallyModifiedPage', 'dynamicallyModifiedPage.html'); + addPage('dynamicPage', 'dynamic.html'); + addPage('echoPage', 'echo'); + addPage('errorsPage', 'errors.html'); + addPage('xhtmlFormPage', 'xhtmlFormPage.xhtml'); + addPage('formPage', 'formPage.html'); + addPage('formSelectionPage', 'formSelectionPage.html'); + addPage('framesetPage', 'frameset.html'); + addPage('grandchildPage', 'child/grandchild/grandchildPage.html'); + addPage('html5Page', 'html5Page.html'); + addPage('html5OfflinePage', 'html5/offline.html'); + addPage('iframePage', 'iframes.html'); + addPage('javascriptEnhancedForm', 'javascriptEnhancedForm.html'); + addPage('javascriptPage', 'javascriptPage.html'); + addPage('linkedImage', 'linked_image.html'); + addPage('longContentPage', 'longContentPage.html'); + addPage('macbethPage', 'macbeth.html'); + addPage('mapVisibilityPage', 'map_visibility.html'); + addPage('metaRedirectPage', 'meta-redirect.html'); + addPage('missedJsReferencePage', 'missedJsReference.html'); + addPage('mouseTrackerPage', 'mousePositionTracker.html'); + addPage('nestedPage', 'nestedElements.html'); + addPage('readOnlyPage', 'readOnlyPage.html'); + addPage('rectanglesPage', 'rectangles.html'); + addPage('redirectPage', 'redirect'); + addPage('resultPage', 'resultPage.html'); + addPage('richTextPage', 'rich_text.html'); + addPage('selectableItemsPage', 'selectableItems.html'); + addPage('selectPage', 'selectPage.html'); + addPage('simpleTestPage', 'simpleTest.html'); + addPage('simpleXmlDocument', 'simple.xml'); + addPage('sleepingPage', 'sleep'); + addPage('slowIframes', 'slow_loading_iframes.html'); + addPage('slowLoadingAlertPage', 'slowLoadingAlert.html'); + addPage('svgPage', 'svgPiechart.xhtml'); + addPage('tables', 'tables.html'); + addPage('underscorePage', 'underscore.html'); + addPage('unicodeLtrPage', 'utf8/unicode_ltr.html'); + addPage('uploadPage', 'upload.html'); + addPage('veryLargeCanvas', 'veryLargeCanvas.html'); + addPage('xhtmlTestPage', 'xhtmlTest.html'); + + return pages; +})(); + + +var Path = { + BASIC_AUTH: WEB_ROOT + '/basicAuth', + ECHO: WEB_ROOT + '/echo', + GENERATED: WEB_ROOT + '/generated', + MANIFEST: WEB_ROOT + '/manifest', + REDIRECT: WEB_ROOT + '/redirect', + PAGE: WEB_ROOT + '/page', + SLEEP: WEB_ROOT + '/sleep', + UPLOAD: WEB_ROOT + '/upload' +}; + +var app = express(); + +app.get('/', sendIndex) +.get('/favicon.ico', function(req, res) { + res.writeHead(204); + res.end(); +}) +.use(JS_ROOT, serveIndex(jsDirectory), express.static(jsDirectory)) +.post(Path.UPLOAD, handleUpload) +.use(WEB_ROOT, serveIndex(baseDirectory), express.static(baseDirectory)) +.get(Path.ECHO, sendEcho) +.get(Path.PAGE, sendInifinitePage) +.get(Path.PAGE + '/*', sendInifinitePage) +.get(Path.REDIRECT, redirectToResultPage) +.get(Path.SLEEP, sendDelayedResponse) + +if (isDevMode) { + var closureDir = resources.locate('third_party/closure/goog'); + app.use('/third_party/closure/goog', + serveIndex(closureDir), express.static(closureDir)); +} +var server = new Server(app); + + +function redirectToResultPage(_, response) { + response.writeHead(303, { + Location: Pages.resultPage + }); + return response.end(); +} + + +function sendInifinitePage(request, response) { + var pathname = url.parse(request.url).pathname; + var lastIndex = pathname.lastIndexOf('/'); + var pageNumber = + (lastIndex == -1 ? 'Unknown' : pathname.substring(lastIndex + 1)); + var body = [ + '', + 'Page', pageNumber, '', + 'Page number ', pageNumber, '', + '

      top' + ].join(''); + response.writeHead(200, { + 'Content-Length': Buffer.byteLength(body, 'utf8'), + 'Content-Type': 'text/html; charset=utf-8' + }); + response.end(body); +} + + +function sendDelayedResponse(request, response) { + var duration = 0; + var query = url.parse(request.url).query || ''; + var match = query.match(/\btime=(\d+)/); + if (match) { + duration = parseInt(match[1], 10); + } + + setTimeout(function() { + var body = [ + '', + 'Done', + 'Slept for ', duration, 's' + ].join(''); + response.writeHead(200, { + 'Content-Length': Buffer.byteLength(body, 'utf8'), + 'Content-Type': 'text/html; charset=utf-8', + 'Cache-Control': 'no-cache', + 'Pragma': 'no-cache', + 'Expires': 0 + }); + response.end(body); + }, duration * 1000); +} + + +function handleUpload(request, response, next) { + multer({ + inMemory: true, + onFileUploadComplete: function(file) { + response.writeHead(200); + response.write(file.buffer); + response.end(''); + } + })(request, response, function() {}); +} + + +function sendEcho(request, response) { + var body = [ + '', + 'Echo', + '

      ', + request.method, ' ', request.url, ' ', 'HTTP/', request.httpVersion, + '
      ' + ]; + for (var name in request.headers) { + body.push('
      ', + name, ': ', request.headers[name], '
      '); + } + body = body.join(''); + response.writeHead(200, { + 'Content-Length': Buffer.byteLength(body, 'utf8'), + 'Content-Type': 'text/html; charset=utf-8' + }); + response.end(body); +} + + +/** + * Responds to a request for the file server's main index. + * @param {!http.ServerRequest} request The request object. + * @param {!http.ServerResponse} response The response object. + */ +function sendIndex(request, response) { + var pathname = url.parse(request.url).pathname; + + var host = request.headers.host; + if (!host) { + host = server.host(); + } + + var requestUrl = ['http://' + host + pathname].join(''); + + function createListEntry(path) { + var url = requestUrl + path; + return ['
    3. ', path, ''].join(''); + } + + var data = ['

      /


        ', + createListEntry('common')]; + if (isDevMode) { + data.push(createListEntry('javascript')); + } + data.push('
      '); + data = data.join(''); + + response.writeHead(200, { + 'Content-Type': 'text/html; charset=UTF-8', + 'Content-Length': Buffer.byteLength(data, 'utf8') + }); + response.end(data); +} + + +// PUBLIC application + + +/** + * Starts the server on the specified port. + * @param {number=} opt_port The port to use, or 0 for any free port. + * @return {!webdriver.promise.Promise.} A promise that will resolve + * with the server host when it has fully started. + */ +exports.start = server.start.bind(server); + + +/** + * Stops the server. + * @return {!webdriver.promise.Promise} A promise that will resolve when the + * server has closed all connections. + */ +exports.stop = server.stop.bind(server); + + +/** + * Formats a URL for this server. + * @param {string=} opt_pathname The desired pathname on the server. + * @return {string} The formatted URL. + * @throws {Error} If the server is not running. + */ +exports.url = server.url.bind(server); + + +/** + * Builds the URL for a file in the //common/src/web directory of the + * Selenium client. + * @param {string} filePath A path relative to //common/src/web to compute a + * URL for. + * @return {string} The formatted URL. + * @throws {Error} If the server is not running. + */ +exports.whereIs = function(filePath) { + filePath = filePath.replace(/\\/g, '/'); + if (!filePath.startsWith('/')) { + filePath = '/' + filePath; + } + return server.url(WEB_ROOT + filePath); +}; + + +exports.Pages = Pages; + + +if (require.main === module) { + server.start(2310).then(function() { + console.log('Server running at ' + server.url()); + }); +} diff --git a/www/node_modules/selenium-webdriver/lib/test/httpserver.js b/www/node_modules/selenium-webdriver/lib/test/httpserver.js new file mode 100644 index 0000000..55b1255 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/httpserver.js @@ -0,0 +1,122 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + http = require('http'), + url = require('url'); + +var net = require('../../net'), + portprober = require('../../net/portprober'), + promise = require('../..').promise; + + + +/** + * Encapsulates a simple HTTP server for testing. The {@code onrequest} + * function should be overridden to define request handling behavior. + * @param {function(!http.ServerRequest, !http.ServerResponse)} requestHandler + * The request handler for the server. + * @constructor + */ +var Server = function(requestHandler) { + var server = http.createServer(function(req, res) { + requestHandler(req, res); + }); + + server.on('connection', function(stream) { + stream.setTimeout(4000); + }); + + /** @typedef {{port: number, address: string, family: string}} */ + var Host; + + /** + * Starts the server on the given port. If no port, or 0, is provided, + * the server will be started on a random port. + * @param {number=} opt_port The port to start on. + * @return {!webdriver.promise.Promise.} A promise that will resolve + * with the server host when it has fully started. + */ + this.start = function(opt_port) { + assert(typeof opt_port !== 'function', + "start invoked with function, not port (mocha callback)?"); + var port = opt_port || portprober.findFreePort('localhost'); + return promise.when(port, function(port) { + return promise.checkedNodeCall( + server.listen.bind(server, port, 'localhost')); + }).then(function() { + return server.address(); + }); + }; + + /** + * Stops the server. + * @return {!webdriver.promise.Promise} A promise that will resolve when the + * server has closed all connections. + */ + this.stop = function() { + var d = promise.defer(); + server.close(d.fulfill); + return d.promise; + }; + + /** + * @return {Host} This server's host info. + * @throws {Error} If the server is not running. + */ + this.address = function() { + var addr = server.address(); + if (!addr) { + throw Error('There server is not running!'); + } + return addr; + }; + + /** + * return {string} The host:port of this server. + * @throws {Error} If the server is not running. + */ + this.host = function() { + return net.getLoopbackAddress() + ':' + + this.address().port; + }; + + /** + * Formats a URL for this server. + * @param {string=} opt_pathname The desired pathname on the server. + * @return {string} The formatted URL. + * @throws {Error} If the server is not running. + */ + this.url = function(opt_pathname) { + var addr = this.address(); + var pathname = opt_pathname || ''; + return url.format({ + protocol: 'http', + hostname: net.getLoopbackAddress(), + port: addr.port, + pathname: pathname + }); + }; +}; + + +// PUBLIC API + + +exports.Server = Server; diff --git a/www/node_modules/selenium-webdriver/lib/test/index.js b/www/node_modules/selenium-webdriver/lib/test/index.js new file mode 100644 index 0000000..8f576a8 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/index.js @@ -0,0 +1,262 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); + +var build = require('./build'), + isDevMode = require('../devmode'), + webdriver = require('../../'), + flow = webdriver.promise.controlFlow(), + remote = require('../../remote'), + testing = require('../../testing'), + fileserver = require('./fileserver'); + + +/** + * Browsers with native support. + * @type {!Array.} + */ +var NATIVE_BROWSERS = [ + webdriver.Browser.CHROME, + webdriver.Browser.EDGE, + webdriver.Browser.FIREFOX, + webdriver.Browser.IE, + webdriver.Browser.OPERA, + webdriver.Browser.PHANTOM_JS, + webdriver.Browser.SAFARI +]; + + +var serverJar = process.env['SELENIUM_SERVER_JAR']; +var remoteUrl = process.env['SELENIUM_REMOTE_URL']; +var useLoopback = process.env['SELENIUM_USE_LOOP_BACK'] == '1'; +var startServer = !!serverJar && !remoteUrl; +var nativeRun = !serverJar && !remoteUrl; + + +var browsersToTest = (function() { + var permitRemoteBrowsers = !!remoteUrl || !!serverJar; + var permitUnknownBrowsers = !nativeRun; + var browsers = process.env['SELENIUM_BROWSER'] || webdriver.Browser.FIREFOX; + + browsers = browsers.split(',').map(function(browser) { + var parts = browser.split(/:/); + if (parts[0] === 'ie') { + parts[0] = webdriver.Browser.IE; + } + if (parts[0] === 'edge') { + parts[0] = webdriver.Browser.EDGE; + } + return parts.join(':'); + }); + browsers.forEach(function(browser) { + var parts = browser.split(/:/, 3); + if (parts[0] === 'ie') { + parts[0] = webdriver.Browser.IE; + } + + if (NATIVE_BROWSERS.indexOf(parts[0]) == -1 && !permitRemoteBrowsers) { + throw Error('Browser ' + parts[0] + ' requires a WebDriver server and ' + + 'neither the SELENIUM_REMOTE_URL nor the SELENIUM_SERVER_JAR ' + + 'environment variables have been set.'); + } + + var recognized = false; + for (var prop in webdriver.Browser) { + if (webdriver.Browser.hasOwnProperty(prop) && + webdriver.Browser[prop] === parts[0]) { + recognized = true; + break; + } + } + + if (!recognized && !permitUnknownBrowsers) { + throw Error('Unrecognized browser: ' + browser); + } + }); + + console.log('Running tests against [' + browsers.join(',') + ']'); + if (remoteUrl) { + console.log('Using remote server ' + remoteUrl); + } else if (serverJar) { + console.log('Using standalone Selenium server ' + serverJar); + if (useLoopback) { + console.log('Running tests using loopback address') + } + } + + return browsers; +})(); + + +/** + * Creates a predicate function that ignores tests for specific browsers. + * @param {string} currentBrowser The name of the current browser. + * @param {!Array.} browsersToIgnore The browsers to ignore. + * @return {function(): boolean} The predicate function. + */ +function browsers(currentBrowser, browsersToIgnore) { + return function() { + return browsersToIgnore.indexOf(currentBrowser) != -1; + }; +} + + +/** + * @param {string} browserName The name to use. + * @param {remote.DriverService} server The server to use, if any. + * @constructor + */ +function TestEnvironment(browserName, server) { + var name = browserName; + + this.currentBrowser = function() { + return browserName; + }; + + this.isRemote = function() { + return server || remoteUrl; + }; + + this.browsers = function(var_args) { + var browsersToIgnore = Array.prototype.slice.apply(arguments, [0]); + return browsers(browserName, browsersToIgnore); + }; + + this.builder = function() { + var builder = new webdriver.Builder(); + var realBuild = builder.build; + + builder.build = function() { + var parts = browserName.split(/:/, 3); + builder.forBrowser(parts[0], parts[1], parts[2]); + if (server) { + builder.usingServer(server.address()); + } else if (remoteUrl) { + builder.usingServer(remoteUrl); + } + builder.disableEnvironmentOverrides(); + return realBuild.call(builder); + }; + + return builder; + }; +} + + +var seleniumServer; +var inSuite = false; + + +/** + * Expands a function to cover each of the target browsers. + * @param {function(!TestEnvironment)} fn The top level suite + * function. + * @param {{browsers: !Array.}=} opt_options Suite specific options. + */ +function suite(fn, opt_options) { + assert.ok(!inSuite, 'You may not nest suite calls'); + inSuite = true; + + var suiteOptions = opt_options || {}; + var browsers = suiteOptions.browsers; + if (browsers) { + // Filter out browser specific tests when that browser is not currently + // selected for testing. + browsers = browsers.filter(function(browser) { + return browsersToTest.indexOf(browser) != -1; + }); + } else { + browsers = browsersToTest; + } + + try { + + // Server is only started if required for a specific config. + testing.after(function() { + if (seleniumServer) { + return seleniumServer.stop(); + } + }); + + browsers.forEach(function(browser) { + testing.describe('[' + browser + ']', function() { + + if (isDevMode && nativeRun) { + if (browser === webdriver.Browser.FIREFOX) { + testing.before(function() { + return build.of('//javascript/firefox-driver:webdriver') + .onlyOnce().go(); + }); + } else if (browser === webdriver.Browser.SAFARI) { + testing.before(function() { + return build.of('//javascript/safari-driver:client') + .onlyOnce().go(); + }); + } + } + + var serverToUse = null; + + if (!!serverJar && !remoteUrl) { + if (!(serverToUse = seleniumServer)) { + serverToUse = seleniumServer = new remote.SeleniumServer( + serverJar, {loopback: useLoopback}); + } + + testing.before(function() { + this.timeout(0); + return seleniumServer.start(60 * 1000); + }); + } + fn(new TestEnvironment(browser, serverToUse)); + }); + }); + } finally { + inSuite = false; + } +} + + +// GLOBAL TEST SETUP + +testing.before(function() { + // Do not pass register fileserver.start directly with testing.before, + // as start takes an optional port, which before assumes is an async + // callback. + return fileserver.start(); +}); + +testing.after(function() { + return fileserver.stop(); +}); + +// PUBLIC API + + +exports.suite = suite; +exports.after = testing.after; +exports.afterEach = testing.afterEach; +exports.before = testing.before; +exports.beforeEach = testing.beforeEach; +exports.it = testing.it; +exports.ignore = testing.ignore; + +exports.Pages = fileserver.Pages; +exports.whereIs = fileserver.whereIs; diff --git a/www/node_modules/selenium-webdriver/lib/test/resources.js b/www/node_modules/selenium-webdriver/lib/test/resources.js new file mode 100644 index 0000000..8e9cceb --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/test/resources.js @@ -0,0 +1,44 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'), + path = require('path'); + +var resourceRoot = require('../devmode') ? + require('./build').projectRoot() : + path.join(__dirname, 'data'); + + +// PUBLIC API + + +/** + * Locates a test resource. + * @param {string} resourcePath Path of the resource to locate. + * @param {string} filePath The file to locate from the root of the project. + * @return {string} The full path for the file, if it exists. + * @throws {Error} If the file does not exist. + */ +exports.locate = function(filePath) { + var fullPath = path.normalize(path.join(resourceRoot, filePath)); + if (!fs.existsSync(fullPath)) { + throw Error('File does not exist: ' + filePath); + } + return fullPath; +}; diff --git a/www/node_modules/selenium-webdriver/lib/until.js b/www/node_modules/selenium-webdriver/lib/until.js new file mode 100644 index 0000000..8b6e83d --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/until.js @@ -0,0 +1,428 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines common conditions for use with + * {@link webdriver.WebDriver#wait WebDriver wait}. + * + * Sample usage: + * + * driver.get('http://www.google.com/ncr'); + * + * var query = driver.wait(until.elementLocated(By.name('q'))); + * query.sendKeys('webdriver\n'); + * + * driver.wait(until.titleIs('webdriver - Google Search')); + * + * To define a custom condition, simply call WebDriver.wait with a function + * that will eventually return a truthy-value (neither null, undefined, false, + * 0, or the empty string): + * + * driver.wait(function() { + * return driver.getTitle().then(function(title) { + * return title === 'webdriver - Google Search'; + * }); + * }, 1000); + */ + +'use strict'; + +const by = require('./by'); +const By = require('./by').By; +const error = require('../error'); + + +/** + * Defines a condition for use with WebDriver's + * {@linkplain ./webdriver.WebDriver#wait wait command}. + * + * @template OUT + */ +class Condition { + /** + * @param {string} message A descriptive error message. Should complete the + * sentence "Waiting [...]" + * @param {function(!./webdriver.WebDriver): OUT} fn The condition function to + * evaluate on each iteration of the wait loop. + */ + constructor(message, fn) { + /** @private {string} */ + this.description_ = 'Waiting ' + message; + + /** @type {function(!./webdriver.WebDriver): OUT} */ + this.fn = fn; + } + + /** @return {string} A description of this condition. */ + description() { + return this.description_; + } +} + +/** + * @typedef {!(./webdriver.WebElement| + * ./promise.Promise)} + */ +var ElementConditionResult; + + +/** + * Defines a condition that will result in a + * {@link ./webdriver.WebElement WebElement}. + * + * @extends {Condition} + */ +class WebElementCondition extends Condition { + /** + * @param {string} message A descriptive error message. Should complete the + * sentence "Waiting [...]" + * @param {function(!./webdriver.WebDriver): ElementConditionResult} fn The + * condition function to evaluate on each iteration of the wait loop. + */ + constructor(message, fn) { + super(message, fn); + } +} + + +// PUBLIC API + + +exports.Condition = Condition; +exports.WebElementCondition = WebElementCondition; + + +/** + * Creates a condition that will wait until the input driver is able to switch + * to the designated frame. The target frame may be specified as + * + * 1. a numeric index into + * [window.frames](https://developer.mozilla.org/en-US/docs/Web/API/Window.frames) + * for the currently selected frame. + * 2. a {@link ./webdriver.WebElement}, which must reference a FRAME or IFRAME + * element on the current page. + * 3. a locator which may be used to first locate a FRAME or IFRAME on the + * current page before attempting to switch to it. + * + * Upon successful resolution of this condition, the driver will be left + * focused on the new frame. + * + * @param {!(number|./webdriver.WebElement|By| + * function(!./webdriver.WebDriver): !./webdriver.WebElement)} frame + * The frame identifier. + * @return {!Condition} A new condition. + */ +exports.ableToSwitchToFrame = function ableToSwitchToFrame(frame) { + // Not at top-level to avoid circular dependency. + const webdriver = require('./webdriver'); + + var condition; + if (typeof frame === 'number' || frame instanceof webdriver.WebElement) { + condition = attemptToSwitchFrames; + } else { + condition = function(driver) { + let locator = /** @type {!(By|Function)} */(frame); + return driver.findElements(locator).then(function(els) { + if (els.length) { + return attemptToSwitchFrames(driver, els[0]); + } + }); + }; + } + + return new Condition('to be able to switch to frame', condition); + + function attemptToSwitchFrames(driver, frame) { + return driver.switchTo().frame(frame).then( + function() { return true; }, + function(e) { + if (!(e instanceof error.NoSuchFrameError)) { + throw e; + } + }); + } +}; + + +/** + * Creates a condition that waits for an alert to be opened. Upon success, the + * returned promise will be fulfilled with the handle for the opened alert. + * + * @return {!Condition} The new condition. + */ +exports.alertIsPresent = function alertIsPresent() { + return new Condition('for alert to be present', function(driver) { + return driver.switchTo().alert().thenCatch(function(e) { + if (!(e instanceof error.NoSuchAlertError)) { + throw e; + } + }); + }); +}; + + +/** + * Creates a condition that will wait for the current page's title to match the + * given value. + * + * @param {string} title The expected page title. + * @return {!Condition} The new condition. + */ +exports.titleIs = function titleIs(title) { + return new Condition( + 'for title to be ' + JSON.stringify(title), + function(driver) { + return driver.getTitle().then(function(t) { + return t === title; + }); + }); +}; + + +/** + * Creates a condition that will wait for the current page's title to contain + * the given substring. + * + * @param {string} substr The substring that should be present in the page + * title. + * @return {!Condition} The new condition. + */ +exports.titleContains = function titleContains(substr) { + return new Condition( + 'for title to contain ' + JSON.stringify(substr), + function(driver) { + return driver.getTitle().then(function(title) { + return title.indexOf(substr) !== -1; + }); + }); +}; + + +/** + * Creates a condition that will wait for the current page's title to match the + * given regular expression. + * + * @param {!RegExp} regex The regular expression to test against. + * @return {!Condition} The new condition. + */ +exports.titleMatches = function titleMatches(regex) { + return new Condition('for title to match ' + regex, function(driver) { + return driver.getTitle().then(function(title) { + return regex.test(title); + }); + }); +}; + + +/** + * Creates a condition that will loop until an element is + * {@link ./webdriver.WebDriver#findElement found} with the given locator. + * + * @param {!(By|Function)} locator The locator to use. + * @return {!WebElementCondition} The new condition. + */ +exports.elementLocated = function elementLocated(locator) { + locator = by.checkedLocator(locator); + let locatorStr = + typeof locator === 'function' ? 'by function()' : locator + ''; + return new WebElementCondition('for element to be located ' + locatorStr, + function(driver) { + return driver.findElements(locator).then(function(elements) { + return elements[0]; + }); + }); +}; + + +/** + * Creates a condition that will loop until at least one element is + * {@link ./webdriver.WebDriver#findElement found} with the given locator. + * + * @param {!(By|Function)} locator The locator to use. + * @return {!Condition>} The new + * condition. + */ +exports.elementsLocated = function elementsLocated(locator) { + locator = by.checkedLocator(locator); + let locatorStr = + typeof locator === 'function' ? 'by function()' : locator + ''; + return new Condition( + 'for at least one element to be located ' + locatorStr, + function(driver) { + return driver.findElements(locator).then(function(elements) { + return elements.length > 0 ? elements : null; + }); + }); +}; + + +/** + * Creates a condition that will wait for the given element to become stale. An + * element is considered stale once it is removed from the DOM, or a new page + * has loaded. + * + * @param {!./webdriver.WebElement} element The element that should become stale. + * @return {!Condition} The new condition. + */ +exports.stalenessOf = function stalenessOf(element) { + return new Condition('element to become stale', function() { + return element.getTagName().then( + function() { return false; }, + function(e) { + if (e instanceof error.StaleElementReferenceError) { + return true; + } + throw e; + }); + }); +}; + + +/** + * Creates a condition that will wait for the given element to become visible. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see ./webdriver.WebDriver#isDisplayed + */ +exports.elementIsVisible = function elementIsVisible(element) { + return new WebElementCondition('until element is visible', function() { + return element.isDisplayed().then(v => v ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be in the DOM, + * yet not visible to the user. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see ./webdriver.WebDriver#isDisplayed + */ +exports.elementIsNotVisible = function elementIsNotVisible(element) { + return new WebElementCondition('until element is not visible', function() { + return element.isDisplayed().then(v => v ? null : element); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be enabled. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#isEnabled + */ +exports.elementIsEnabled = function elementIsEnabled(element) { + return new WebElementCondition('until element is enabled', function() { + return element.isEnabled().then(v => v ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be disabled. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#isEnabled + */ +exports.elementIsDisabled = function elementIsDisabled(element) { + return new WebElementCondition('until element is disabled', function() { + return element.isEnabled().then(v => v ? null : element); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be selected. + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#isSelected + */ +exports.elementIsSelected = function elementIsSelected(element) { + return new WebElementCondition('until element is selected', function() { + return element.isSelected().then(v => v ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be deselected. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#isSelected + */ +exports.elementIsNotSelected = function elementIsNotSelected(element) { + return new WebElementCondition('until element is not selected', function() { + return element.isSelected().then(v => v ? null : element); + }); +}; + + +/** + * Creates a condition that will wait for the given element's + * {@link webdriver.WebDriver#getText visible text} to match the given + * {@code text} exactly. + * + * @param {!./webdriver.WebElement} element The element to test. + * @param {string} text The expected text. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#getText + */ +exports.elementTextIs = function elementTextIs(element, text) { + return new WebElementCondition('until element text is', function() { + return element.getText().then(t => t === text ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element's + * {@link webdriver.WebDriver#getText visible text} to contain the given + * substring. + * + * @param {!./webdriver.WebElement} element The element to test. + * @param {string} substr The substring to search for. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#getText + */ +exports.elementTextContains = function elementTextContains(element, substr) { + return new WebElementCondition('until element text contains', function() { + return element.getText() + .then(t => t.indexOf(substr) != -1 ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element's + * {@link webdriver.WebDriver#getText visible text} to match a regular + * expression. + * + * @param {!./webdriver.WebElement} element The element to test. + * @param {!RegExp} regex The regular expression to test against. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#getText + */ +exports.elementTextMatches = function elementTextMatches(element, regex) { + return new WebElementCondition('until element text matches', function() { + return element.getText().then(t => regex.test(t) ? element : null); + }); +}; diff --git a/www/node_modules/selenium-webdriver/lib/webdriver.js b/www/node_modules/selenium-webdriver/lib/webdriver.js new file mode 100644 index 0000000..0adcbb0 --- /dev/null +++ b/www/node_modules/selenium-webdriver/lib/webdriver.js @@ -0,0 +1,2351 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview The heart of the WebDriver JavaScript API. + */ + +'use strict'; + +const error = require('../error'); +const actions = require('./actions'); +const by = require('./by'); +const Capabilities = require('./capabilities').Capabilities; +const command = require('./command'); +const input = require('./input'); +const logging = require('./logging'); +const Session = require('./session').Session; +const Symbols = require('./symbols'); +const promise = require('./promise'); +const until = require('./until'); + + + +////////////////////////////////////////////////////////////////////////////// +// +// WebDriver +// +////////////////////////////////////////////////////////////////////////////// + + +/** + * Sends a command to the server that is expected to return the details for a + * {@link Session}. This may either be an existing session, or a newly created + * one. + * + * @param {!command.Executor} executor Command executor to use when + * querying for session details. + * @param {!command.Command} command The command to send to fetch the session + * details. + * @param {string} description A descriptive debug label for this action. + * @param {promise.ControlFlow=} opt_flow The control flow all driver + * commands should execute under. Defaults to the + * {@link promise.controlFlow() currently active} control flow. + * @return {!WebDriver} A new WebDriver client for the session. + */ +function acquireSession(executor, command, description, opt_flow) { + let flow = opt_flow || promise.controlFlow(); + let session = flow.execute(function() { + return executeCommand(executor, command).then(function(response) { + error.checkLegacyResponse(response); + return new Session(response['sessionId'], response['value']); + }); + }, description); + return new WebDriver(session, executor, flow); +} + + +/** + * Translates a command to its wire-protocol representation before passing it + * to the given `executor` for execution. + * @param {!command.Executor} executor The executor to use. + * @param {!command.Command} command The command to execute. + * @return {!promise.Promise} A promise that will resolve with the + * command response. + */ +function executeCommand(executor, command) { + return toWireValue(command.getParameters()). + then(function(parameters) { + command.setParameters(parameters); + return executor.execute(command); + }); +} + + +/** + * Converts an object to its JSON representation in the WebDriver wire protocol. + * When converting values of type object, the following steps will be taken: + *
        + *
      1. if the object is a WebElement, the return value will be the element's + * server ID + *
      2. if the object defines a {@link Symbols.serialize} method, this algorithm + * will be recursively applied to the object's serialized representation + *
      3. if the object provides a "toJSON" function, this algorithm will + * recursively be applied to the result of that function + *
      4. otherwise, the value of each key will be recursively converted according + * to the rules above. + *
      + * + * @param {*} obj The object to convert. + * @return {!promise.Promise} A promise that will resolve to the + * input value's JSON representation. + */ +function toWireValue(obj) { + if (promise.isPromise(obj)) { + return obj.then(toWireValue); + } + return promise.fulfilled(convertValue(obj)); +} + + +function convertValue(value) { + if (value === void 0 || value === null) { + return value; + } + + if (typeof value === 'boolean' + || typeof value === 'number' + || typeof value === 'string') { + return value; + } + + if (Array.isArray(value)) { + return convertKeys(value); + } + + if (typeof value === 'function') { + return '' + value; + } + + if (typeof value[Symbols.serialize] === 'function') { + return toWireValue(value[Symbols.serialize]()); + } else if (typeof value.toJSON === 'function') { + return toWireValue(value.toJSON()); + } + return convertKeys(value); +} + + +function convertKeys(obj) { + const isArray = Array.isArray(obj); + const numKeys = isArray ? obj.length : Object.keys(obj).length; + const ret = isArray ? new Array(numKeys) : {}; + if (!numKeys) { + return promise.fulfilled(ret); + } + + let numResolved = 0; + + function forEachKey(obj, fn) { + if (Array.isArray(obj)) { + for (let i = 0, n = obj.length; i < n; i++) { + fn(obj[i], i); + } + } else { + for (let key in obj) { + fn(obj[key], key); + } + } + } + + return new promise.Promise(function(done, reject) { + forEachKey(obj, function(value, key) { + if (promise.isPromise(value)) { + value.then(toWireValue).then(setValue, reject); + } else { + value = convertValue(value); + if (promise.isPromise(value)) { + value.then(toWireValue).then(setValue, reject); + } else { + setValue(value); + } + } + + function setValue(value) { + ret[key] = value; + maybeFulfill(); + } + }); + + function maybeFulfill() { + if (++numResolved === numKeys) { + done(ret); + } + } + }); +} + + +/** + * Converts a value from its JSON representation according to the WebDriver wire + * protocol. Any JSON object that defines a WebElement ID will be decoded to a + * {@link WebElement} object. All other values will be passed through as is. + * + * @param {!WebDriver} driver The driver to use as the parent of any unwrapped + * {@link WebElement} values. + * @param {*} value The value to convert. + * @return {*} The converted value. + */ +function fromWireValue(driver, value) { + if (Array.isArray(value)) { + value = value.map(v => fromWireValue(driver, v)); + } else if (WebElement.isId(value)) { + let id = WebElement.extractId(value); + value = new WebElement(driver, id); + } else if (value && typeof value === 'object') { + let result = {}; + for (let key in value) { + if (value.hasOwnProperty(key)) { + result[key] = fromWireValue(driver, value[key]); + } + } + value = result; + } + return value; +} + + +/** + * Creates a new WebDriver client, which provides control over a browser. + * + * Every command.Command returns a {@link promise.Promise} that + * represents the result of that command. Callbacks may be registered on this + * object to manipulate the command result or catch an expected error. Any + * commands scheduled with a callback are considered sub-commands and will + * execute before the next command in the current frame. For example: + * + * var message = []; + * driver.call(message.push, message, 'a').then(function() { + * driver.call(message.push, message, 'b'); + * }); + * driver.call(message.push, message, 'c'); + * driver.call(function() { + * alert('message is abc? ' + (message.join('') == 'abc')); + * }); + * + */ +class WebDriver { + /** + * @param {!(Session|promise.Promise)} session Either a + * known session or a promise that will be resolved to a session. + * @param {!command.Executor} executor The executor to use when sending + * commands to the browser. + * @param {promise.ControlFlow=} opt_flow The flow to + * schedule commands through. Defaults to the active flow object. + */ + constructor(session, executor, opt_flow) { + /** @private {!promise.Promise} */ + this.session_ = promise.fulfilled(session);; + + /** @private {!command.Executor} */ + this.executor_ = executor; + + /** @private {!promise.ControlFlow} */ + this.flow_ = opt_flow || promise.controlFlow(); + + /** @private {input.FileDetector} */ + this.fileDetector_ = null; + } + + /** + * Creates a new WebDriver client for an existing session. + * @param {!command.Executor} executor Command executor to use when querying + * for session details. + * @param {string} sessionId ID of the session to attach to. + * @param {promise.ControlFlow=} opt_flow The control flow all + * driver commands should execute under. Defaults to the + * {@link promise.controlFlow() currently active} control flow. + * @return {!WebDriver} A new client for the specified session. + */ + static attachToSession(executor, sessionId, opt_flow) { + return acquireSession(executor, + new command.Command(command.Name.DESCRIBE_SESSION). + setParameter('sessionId', sessionId), + 'WebDriver.attachToSession()', + opt_flow); + } + + /** + * Creates a new WebDriver session. + * @param {!command.Executor} executor The executor to create the new session + * with. + * @param {!./capabilities.Capabilities} desiredCapabilities The desired + * capabilities for the new session. + * @param {promise.ControlFlow=} opt_flow The control flow all driver + * commands should execute under, including the initial session creation. + * Defaults to the {@link promise.controlFlow() currently active} + * control flow. + * @return {!WebDriver} The driver for the newly created session. + */ + static createSession(executor, desiredCapabilities, opt_flow) { + return acquireSession(executor, + new command.Command(command.Name.NEW_SESSION). + setParameter('desiredCapabilities', desiredCapabilities), + 'WebDriver.createSession()', + opt_flow); + } + + /** + * @return {!promise.ControlFlow} The control flow used by this + * instance. + */ + controlFlow() { + return this.flow_; + } + + /** + * Schedules a {@link command.Command} to be executed by this driver's + * {@link command.Executor}. + * + * @param {!command.Command} command The command to schedule. + * @param {string} description A description of the command for debugging. + * @return {!promise.Promise} A promise that will be resolved + * with the command result. + * @template T + */ + schedule(command, description) { + var self = this; + + checkHasNotQuit(); + command.setParameter('sessionId', this.session_); + + // If any of the command parameters are rejected promises, those + // rejections may be reported as unhandled before the control flow + // attempts to execute the command. To ensure parameters errors + // propagate through the command itself, we resolve all of the + // command parameters now, but suppress any errors until the ControlFlow + // actually executes the command. This addresses scenarios like catching + // an element not found error in: + // + // driver.findElement(By.id('foo')).click().thenCatch(function(e) { + // if (e instanceof NoSuchElementError) { + // // Do something. + // } + // }); + var prepCommand = toWireValue(command.getParameters()); + prepCommand.thenCatch(function() {}); + + var flow = this.flow_; + var executor = this.executor_; + return flow.execute(function() { + // A call to WebDriver.quit() may have been scheduled in the same event + // loop as this |command|, which would prevent us from detecting that the + // driver has quit above. Therefore, we need to make another quick check. + // We still check above so we can fail as early as possible. + checkHasNotQuit(); + + // Retrieve resolved command parameters; any previously suppressed errors + // will now propagate up through the control flow as part of the command + // execution. + return prepCommand.then(function(parameters) { + command.setParameters(parameters); + return executor.execute(command); + }); + }, description).then(function(response) { + try { + error.checkLegacyResponse(response); + } catch (ex) { + if (ex instanceof error.UnexpectedAlertOpenError) { + let text = ''; + if (response['value'] + && response['value']['alert'] + && typeof response['value']['alert']['text'] === 'string') { + text = response['value']['alert']['text']; + } + throw new error.UnexpectedAlertOpenError(ex.message, text); + } + throw ex; + } + return fromWireValue(self, response['value']); + }); + + function checkHasNotQuit() { + if (!self.session_) { + throw new error.UnsupportedOperationError( + 'This driver instance does not have a valid session ID ' + + '(did you call WebDriver.quit()?) and may no longer be ' + + 'used.'); + } + } + } + + /** + * Sets the {@linkplain input.FileDetector file detector} that should be + * used with this instance. + * @param {input.FileDetector} detector The detector to use or {@code null}. + */ + setFileDetector(detector) { + this.fileDetector_ = detector; + } + + /** + * @return {!promise.Promise} A promise for this client's + * session. + */ + getSession() { + return this.session_; + } + + /** + * @return {!promise.Promise} A promise + * that will resolve with the this instance's capabilities. + */ + getCapabilities() { + return this.session_.then(session => session.getCapabilities()); + } + + /** + * Schedules a command to quit the current session. After calling quit, this + * instance will be invalidated and may no longer be used to issue commands + * against the browser. + * @return {!promise.Promise} A promise that will be resolved + * when the command has completed. + */ + quit() { + var result = this.schedule( + new command.Command(command.Name.QUIT), + 'WebDriver.quit()'); + // Delete our session ID when the quit command finishes; this will allow us to + // throw an error when attemnpting to use a driver post-quit. + return result.thenFinally(() => delete this.session_); + } + + /** + * Creates a new action sequence using this driver. The sequence will not be + * scheduled for execution until {@link actions.ActionSequence#perform} is + * called. Example: + * + * driver.actions(). + * mouseDown(element1). + * mouseMove(element2). + * mouseUp(). + * perform(); + * + * @return {!actions.ActionSequence} A new action sequence for this instance. + */ + actions() { + return new actions.ActionSequence(this); + } + + /** + * Creates a new touch sequence using this driver. The sequence will not be + * scheduled for execution until {@link actions.TouchSequence#perform} is + * called. Example: + * + * driver.touchActions(). + * tap(element1). + * doubleTap(element2). + * perform(); + * + * @return {!actions.TouchSequence} A new touch sequence for this instance. + */ + touchActions() { + return new actions.TouchSequence(this); + } + + /** + * Schedules a command to execute JavaScript in the context of the currently + * selected frame or window. The script fragment will be executed as the body + * of an anonymous function. If the script is provided as a function object, + * that function will be converted to a string for injection into the target + * window. + * + * Any arguments provided in addition to the script will be included as script + * arguments and may be referenced using the {@code arguments} object. + * Arguments may be a boolean, number, string, or {@linkplain WebElement}. + * Arrays and objects may also be used as script arguments as long as each item + * adheres to the types previously mentioned. + * + * The script may refer to any variables accessible from the current window. + * Furthermore, the script will execute in the window's context, thus + * {@code document} may be used to refer to the current document. Any local + * variables will not be available once the script has finished executing, + * though global variables will persist. + * + * If the script has a return value (i.e. if the script contains a return + * statement), then the following steps will be taken for resolving this + * functions return value: + * + * - For a HTML element, the value will resolve to a {@linkplain WebElement} + * - Null and undefined return values will resolve to null
    4. + * - Booleans, numbers, and strings will resolve as is + * - Functions will resolve to their string representation + * - For arrays and objects, each member item will be converted according to + * the rules above + * + * @param {!(string|Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {!promise.Promise} A promise that will resolve to the + * scripts return value. + * @template T + */ + executeScript(script, var_args) { + if (typeof script === 'function') { + script = 'return (' + script + ').apply(null, arguments);'; + } + let args = + arguments.length > 1 ? Array.prototype.slice.call(arguments, 1) : []; + return this.schedule( + new command.Command(command.Name.EXECUTE_SCRIPT). + setParameter('script', script). + setParameter('args', args), + 'WebDriver.executeScript()'); + } + + /** + * Schedules a command to execute asynchronous JavaScript in the context of the + * currently selected frame or window. The script fragment will be executed as + * the body of an anonymous function. If the script is provided as a function + * object, that function will be converted to a string for injection into the + * target window. + * + * Any arguments provided in addition to the script will be included as script + * arguments and may be referenced using the {@code arguments} object. + * Arguments may be a boolean, number, string, or {@code WebElement}. + * Arrays and objects may also be used as script arguments as long as each item + * adheres to the types previously mentioned. + * + * Unlike executing synchronous JavaScript with {@link #executeScript}, + * scripts executed with this function must explicitly signal they are finished + * by invoking the provided callback. This callback will always be injected + * into the executed function as the last argument, and thus may be referenced + * with {@code arguments[arguments.length - 1]}. The following steps will be + * taken for resolving this functions return value against the first argument + * to the script's callback function: + * + * - For a HTML element, the value will resolve to a + * {@link WebElement} + * - Null and undefined return values will resolve to null + * - Booleans, numbers, and strings will resolve as is + * - Functions will resolve to their string representation + * - For arrays and objects, each member item will be converted according to + * the rules above + * + * __Example #1:__ Performing a sleep that is synchronized with the currently + * selected window: + * + * var start = new Date().getTime(); + * driver.executeAsyncScript( + * 'window.setTimeout(arguments[arguments.length - 1], 500);'). + * then(function() { + * console.log( + * 'Elapsed time: ' + (new Date().getTime() - start) + ' ms'); + * }); + * + * __Example #2:__ Synchronizing a test with an AJAX application: + * + * var button = driver.findElement(By.id('compose-button')); + * button.click(); + * driver.executeAsyncScript( + * 'var callback = arguments[arguments.length - 1];' + + * 'mailClient.getComposeWindowWidget().onload(callback);'); + * driver.switchTo().frame('composeWidget'); + * driver.findElement(By.id('to')).sendKeys('dog@example.com'); + * + * __Example #3:__ Injecting a XMLHttpRequest and waiting for the result. In + * this example, the inject script is specified with a function literal. When + * using this format, the function is converted to a string for injection, so it + * should not reference any symbols not defined in the scope of the page under + * test. + * + * driver.executeAsyncScript(function() { + * var callback = arguments[arguments.length - 1]; + * var xhr = new XMLHttpRequest(); + * xhr.open("GET", "/resource/data.json", true); + * xhr.onreadystatechange = function() { + * if (xhr.readyState == 4) { + * callback(xhr.responseText); + * } + * }; + * xhr.send(''); + * }).then(function(str) { + * console.log(JSON.parse(str)['food']); + * }); + * + * @param {!(string|Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {!promise.Promise} A promise that will resolve to the + * scripts return value. + * @template T + */ + executeAsyncScript(script, var_args) { + if (typeof script === 'function') { + script = 'return (' + script + ').apply(null, arguments);'; + } + let args = Array.prototype.slice.call(arguments, 1); + return this.schedule( + new command.Command(command.Name.EXECUTE_ASYNC_SCRIPT). + setParameter('script', script). + setParameter('args', args), + 'WebDriver.executeScript()'); + } + + /** + * Schedules a command to execute a custom function. + * @param {function(...): (T|promise.Promise)} fn The function to + * execute. + * @param {Object=} opt_scope The object in whose scope to execute the function. + * @param {...*} var_args Any arguments to pass to the function. + * @return {!promise.Promise} A promise that will be resolved' + * with the function's result. + * @template T + */ + call(fn, opt_scope, var_args) { + let args = Array.prototype.slice.call(arguments, 2); + let flow = this.flow_; + return flow.execute(function() { + return promise.fullyResolved(args).then(function(args) { + if (promise.isGenerator(fn)) { + args.unshift(fn, opt_scope); + return promise.consume.apply(null, args); + } + return fn.apply(opt_scope, args); + }); + }, 'WebDriver.call(' + (fn.name || 'function') + ')'); + } + + /** + * Schedules a command to wait for a condition to hold. The condition may be + * specified by a {@link until.Condition}, as a custom function, or as any + * promise-like thenable. + * + * For a {@link until.Condition} or function, the wait will repeatedly + * evaluate the condition until it returns a truthy value. If any errors occur + * while evaluating the condition, they will be allowed to propagate. In the + * event a condition returns a {@link promise.Promise promise}, the polling + * loop will wait for it to be resolved and use the resolved value for whether + * the condition has been satisified. Note the resolution time for a promise + * is factored into whether a wait has timed out. + * + * Note, if the provided condition is a {@link until.WebElementCondition}, then + * the wait will return a {@link WebElementPromise} that will resolve to the + * element that satisified the condition. + * + * *Example:* waiting up to 10 seconds for an element to be present on the + * page. + * + * var button = driver.wait(until.elementLocated(By.id('foo')), 10000); + * button.click(); + * + * This function may also be used to block the command flow on the resolution + * of any thenable promise object. When given a promise, the command will + * simply wait for its resolution before completing. A timeout may be provided + * to fail the command if the promise does not resolve before the timeout + * expires. + * + * *Example:* Suppose you have a function, `startTestServer`, that returns a + * promise for when a server is ready for requests. You can block a WebDriver + * client on this promise with: + * + * var started = startTestServer(); + * driver.wait(started, 5 * 1000, 'Server should start within 5 seconds'); + * driver.get(getServerUrl()); + * + * @param {!(promise.Promise| + * until.Condition| + * function(!WebDriver): T)} condition The condition to + * wait on, defined as a promise, condition object, or a function to + * evaluate as a condition. + * @param {number=} opt_timeout How long to wait for the condition to be true. + * @param {string=} opt_message An optional message to use if the wait times + * out. + * @return {!(promise.Promise|WebElementPromise)} A promise that will be + * resolved with the first truthy value returned by the condition + * function, or rejected if the condition times out. If the input + * input condition is an instance of a {@link until.WebElementCondition}, + * the returned value will be a {@link WebElementPromise}. + * @template T + */ + wait(condition, opt_timeout, opt_message) { + if (promise.isPromise(condition)) { + return this.flow_.wait( + /** @type {!promise.Promise} */(condition), + opt_timeout, opt_message); + } + + var message = opt_message; + var fn = /** @type {!Function} */(condition); + if (condition instanceof until.Condition) { + message = message || condition.description(); + fn = condition.fn; + } + + var driver = this; + var result = this.flow_.wait(function() { + if (promise.isGenerator(fn)) { + return promise.consume(fn, null, [driver]); + } + return fn(driver); + }, opt_timeout, message); + + if (condition instanceof until.WebElementCondition) { + result = new WebElementPromise(this, result.then(function(value) { + if (!(value instanceof WebElement)) { + throw TypeError( + 'WebElementCondition did not resolve to a WebElement: ' + + Object.prototype.toString.call(value)); + } + return value; + })); + } + return result; + } + + /** + * Schedules a command to make the driver sleep for the given amount of time. + * @param {number} ms The amount of time, in milliseconds, to sleep. + * @return {!promise.Promise} A promise that will be resolved + * when the sleep has finished. + */ + sleep(ms) { + return this.flow_.timeout(ms, 'WebDriver.sleep(' + ms + ')'); + } + + /** + * Schedules a command to retrieve they current window handle. + * @return {!promise.Promise} A promise that will be + * resolved with the current window handle. + */ + getWindowHandle() { + return this.schedule( + new command.Command(command.Name.GET_CURRENT_WINDOW_HANDLE), + 'WebDriver.getWindowHandle()'); + } + + /** + * Schedules a command to retrieve the current list of available window handles. + * @return {!promise.Promise.>} A promise that will + * be resolved with an array of window handles. + */ + getAllWindowHandles() { + return this.schedule( + new command.Command(command.Name.GET_WINDOW_HANDLES), + 'WebDriver.getAllWindowHandles()'); + } + + /** + * Schedules a command to retrieve the current page's source. The page source + * returned is a representation of the underlying DOM: do not expect it to be + * formatted or escaped in the same way as the response sent from the web + * server. + * @return {!promise.Promise} A promise that will be + * resolved with the current page source. + */ + getPageSource() { + return this.schedule( + new command.Command(command.Name.GET_PAGE_SOURCE), + 'WebDriver.getPageSource()'); + } + + /** + * Schedules a command to close the current window. + * @return {!promise.Promise} A promise that will be resolved + * when this command has completed. + */ + close() { + return this.schedule(new command.Command(command.Name.CLOSE), + 'WebDriver.close()'); + } + + /** + * Schedules a command to navigate to the given URL. + * @param {string} url The fully qualified URL to open. + * @return {!promise.Promise} A promise that will be resolved + * when the document has finished loading. + */ + get(url) { + return this.navigate().to(url); + } + + /** + * Schedules a command to retrieve the URL of the current page. + * @return {!promise.Promise} A promise that will be + * resolved with the current URL. + */ + getCurrentUrl() { + return this.schedule( + new command.Command(command.Name.GET_CURRENT_URL), + 'WebDriver.getCurrentUrl()'); + } + + /** + * Schedules a command to retrieve the current page's title. + * @return {!promise.Promise} A promise that will be + * resolved with the current page's title. + */ + getTitle() { + return this.schedule(new command.Command(command.Name.GET_TITLE), + 'WebDriver.getTitle()'); + } + + /** + * Schedule a command to find an element on the page. If the element cannot be + * found, a {@link bot.ErrorCode.NO_SUCH_ELEMENT} result will be returned + * by the driver. Unlike other commands, this error cannot be suppressed. In + * other words, scheduling a command to find an element doubles as an assert + * that the element is present on the page. To test whether an element is + * present on the page, use {@link #isElementPresent} instead. + * + * The search criteria for an element may be defined using one of the + * factories in the {@link webdriver.By} namespace, or as a short-hand + * {@link webdriver.By.Hash} object. For example, the following two statements + * are equivalent: + * + * var e1 = driver.findElement(By.id('foo')); + * var e2 = driver.findElement({id:'foo'}); + * + * You may also provide a custom locator function, which takes as input this + * instance and returns a {@link WebElement}, or a promise that will resolve + * to a WebElement. If the returned promise resolves to an array of + * WebElements, WebDriver will use the first element. For example, to find the + * first visible link on a page, you could write: + * + * var link = driver.findElement(firstVisibleLink); + * + * function firstVisibleLink(driver) { + * var links = driver.findElements(By.tagName('a')); + * return promise.filter(links, function(link) { + * return link.isDisplayed(); + * }); + * } + * + * @param {!(by.By|Function)} locator The locator to use. + * @return {!WebElementPromise} A WebElement that can be used to issue + * commands against the located element. If the element is not found, the + * element will be invalidated and all scheduled commands aborted. + */ + findElement(locator) { + let id; + locator = by.checkedLocator(locator); + if (typeof locator === 'function') { + id = this.findElementInternal_(locator, this); + } else { + let cmd = new command.Command(command.Name.FIND_ELEMENT). + setParameter('using', locator.using). + setParameter('value', locator.value); + id = this.schedule(cmd, 'WebDriver.findElement(' + locator + ')'); + } + return new WebElementPromise(this, id); + } + + /** + * @param {!Function} locatorFn The locator function to use. + * @param {!(WebDriver|WebElement)} context The search + * context. + * @return {!promise.Promise.} A + * promise that will resolve to a list of WebElements. + * @private + */ + findElementInternal_(locatorFn, context) { + return this.call(() => locatorFn(context)).then(function(result) { + if (Array.isArray(result)) { + result = result[0]; + } + if (!(result instanceof WebElement)) { + throw new TypeError('Custom locator did not return a WebElement'); + } + return result; + }); + } + + /** + * Schedules a command to test if an element is present on the page. + * + * If given a DOM element, this function will check if it belongs to the + * document the driver is currently focused on. Otherwise, the function will + * test if at least one element can be found with the given search criteria. + * + * @param {!(by.By|Function)} locator The locator to use. + * @return {!promise.Promise} A promise that will resolve + * with whether the element is present on the page. + */ + isElementPresent(locator) { + return this.findElements.apply(this, arguments).then(function(result) { + return !!result.length; + }); + } + + /** + * Schedule a command to search for multiple elements on the page. + * + * @param {!(by.By|Function)} locator The locator to use. + * @return {!promise.Promise.>} A + * promise that will resolve to an array of WebElements. + */ + findElements(locator) { + locator = by.checkedLocator(locator); + if (typeof locator === 'function') { + return this.findElementsInternal_(locator, this); + } else { + let cmd = new command.Command(command.Name.FIND_ELEMENTS). + setParameter('using', locator.using). + setParameter('value', locator.value); + let res = this.schedule(cmd, 'WebDriver.findElements(' + locator + ')'); + return res.thenCatch(function(e) { + if (e instanceof error.NoSuchElementError) { + return []; + } + throw e; + }); + } + } + + /** + * @param {!Function} locatorFn The locator function to use. + * @param {!(WebDriver|WebElement)} context The search context. + * @return {!promise.Promise>} A promise that + * will resolve to an array of WebElements. + * @private + */ + findElementsInternal_(locatorFn, context) { + return this.call(() => locatorFn(context)).then(function(result) { + if (result instanceof WebElement) { + return [result]; + } + + if (!Array.isArray(result)) { + return []; + } + + return result.filter(function(item) { + return item instanceof WebElement; + }); + }); + } + + /** + * Schedule a command to take a screenshot. The driver makes a best effort to + * return a screenshot of the following, in order of preference: + * + * 1. Entire page + * 2. Current window + * 3. Visible portion of the current frame + * 4. The entire display containing the browser + * + * @return {!promise.Promise} A promise that will be + * resolved to the screenshot as a base-64 encoded PNG. + */ + takeScreenshot() { + return this.schedule(new command.Command(command.Name.SCREENSHOT), + 'WebDriver.takeScreenshot()'); + } + + /** + * @return {!Options} The options interface for this instance. + */ + manage() { + return new Options(this); + } + + /** + * @return {!Navigation} The navigation interface for this instance. + */ + navigate() { + return new Navigation(this); + } + + /** + * @return {!TargetLocator} The target locator interface for this + * instance. + */ + switchTo() { + return new TargetLocator(this); + } +} + + +/** + * Interface for navigating back and forth in the browser history. + * + * This class should never be instantiated directly. Insead, obtain an instance + * with + * + * webdriver.navigate() + * + * @see WebDriver#navigate() + */ +class Navigation { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Schedules a command to navigate to a new URL. + * @param {string} url The URL to navigate to. + * @return {!promise.Promise} A promise that will be resolved + * when the URL has been loaded. + */ + to(url) { + return this.driver_.schedule( + new command.Command(command.Name.GET). + setParameter('url', url), + 'WebDriver.navigate().to(' + url + ')'); + } + + /** + * Schedules a command to move backwards in the browser history. + * @return {!promise.Promise} A promise that will be resolved + * when the navigation event has completed. + */ + back() { + return this.driver_.schedule( + new command.Command(command.Name.GO_BACK), + 'WebDriver.navigate().back()'); + } + + /** + * Schedules a command to move forwards in the browser history. + * @return {!promise.Promise} A promise that will be resolved + * when the navigation event has completed. + */ + forward() { + return this.driver_.schedule( + new command.Command(command.Name.GO_FORWARD), + 'WebDriver.navigate().forward()'); + } + + /** + * Schedules a command to refresh the current page. + * @return {!promise.Promise} A promise that will be resolved + * when the navigation event has completed. + */ + refresh() { + return this.driver_.schedule( + new command.Command(command.Name.REFRESH), + 'WebDriver.navigate().refresh()'); + } +} + + +/** + * Provides methods for managing browser and driver state. + * + * This class should never be instantiated directly. Insead, obtain an instance + * with + * + * webdriver.manage() + * + * @see WebDriver#manage() + */ +class Options { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Schedules a command to add a cookie. + * @param {string} name The cookie name. + * @param {string} value The cookie value. + * @param {string=} opt_path The cookie path. + * @param {string=} opt_domain The cookie domain. + * @param {boolean=} opt_isSecure Whether the cookie is secure. + * @param {(number|!Date)=} opt_expiry When the cookie expires. If specified + * as a number, should be in milliseconds since midnight, + * January 1, 1970 UTC. + * @return {!promise.Promise} A promise that will be resolved + * when the cookie has been added to the page. + */ + addCookie(name, value, opt_path, opt_domain, opt_isSecure, opt_expiry) { + // We do not allow '=' or ';' in the name. + if (/[;=]/.test(name)) { + throw new error.InvalidArgumentError( + 'Invalid cookie name "' + name + '"'); + } + + // We do not allow ';' in value. + if (/;/.test(value)) { + throw new error.InvalidArgumentError( + 'Invalid cookie value "' + value + '"'); + } + + var cookieString = name + '=' + value + + (opt_domain ? ';domain=' + opt_domain : '') + + (opt_path ? ';path=' + opt_path : '') + + (opt_isSecure ? ';secure' : ''); + + var expiry; + if (opt_expiry !== void(0)) { + var expiryDate; + if (typeof opt_expiry === 'number') { + expiryDate = new Date(opt_expiry); + } else { + expiryDate = /** @type {!Date} */ (opt_expiry); + opt_expiry = expiryDate.getTime(); + } + cookieString += ';expires=' + expiryDate.toUTCString(); + // Convert from milliseconds to seconds. + expiry = Math.floor(/** @type {number} */ (opt_expiry) / 1000); + } + + return this.driver_.schedule( + new command.Command(command.Name.ADD_COOKIE). + setParameter('cookie', { + 'name': name, + 'value': value, + 'path': opt_path, + 'domain': opt_domain, + 'secure': !!opt_isSecure, + 'expiry': expiry + }), + 'WebDriver.manage().addCookie(' + cookieString + ')'); + } + + /** + * Schedules a command to delete all cookies visible to the current page. + * @return {!promise.Promise} A promise that will be resolved + * when all cookies have been deleted. + */ + deleteAllCookies() { + return this.driver_.schedule( + new command.Command(command.Name.DELETE_ALL_COOKIES), + 'WebDriver.manage().deleteAllCookies()'); + } + + /** + * Schedules a command to delete the cookie with the given name. This command is + * a no-op if there is no cookie with the given name visible to the current + * page. + * @param {string} name The name of the cookie to delete. + * @return {!promise.Promise} A promise that will be resolved + * when the cookie has been deleted. + */ + deleteCookie(name) { + return this.driver_.schedule( + new command.Command(command.Name.DELETE_COOKIE). + setParameter('name', name), + 'WebDriver.manage().deleteCookie(' + name + ')'); + } + + /** + * Schedules a command to retrieve all cookies visible to the current page. + * Each cookie will be returned as a JSON object as described by the WebDriver + * wire protocol. + * @return {!promise.Promise>} A + * promise that will be resolved with the cookies visible to the current page. + */ + getCookies() { + return this.driver_.schedule( + new command.Command(command.Name.GET_ALL_COOKIES), + 'WebDriver.manage().getCookies()'); + } + + /** + * Schedules a command to retrieve the cookie with the given name. Returns null + * if there is no such cookie. The cookie will be returned as a JSON object as + * described by the WebDriver wire protocol. + * + * @param {string} name The name of the cookie to retrieve. + * @return {!promise.Promise} A promise + * that will be resolved with the named cookie, or `null` if there is no + * such cookie. + */ + getCookie(name) { + return this.getCookies().then(function(cookies) { + for (let cookie of cookies) { + if (cookie && cookie['name'] === name) { + return cookie; + } + } + return null; + }); + } + + /** + * @return {!Logs} The interface for managing driver + * logs. + */ + logs() { + return new Logs(this.driver_); + } + + /** + * @return {!Timeouts} The interface for managing driver timeouts. + */ + timeouts() { + return new Timeouts(this.driver_); + } + + /** + * @return {!Window} The interface for managing the current window. + */ + window() { + return new Window(this.driver_); + } +} + + +/** + * A JSON description of a browser cookie. + * @typedef {{ + * name: string, + * value: string, + * path: (string|undefined), + * domain: (string|undefined), + * secure: (boolean|undefined), + * expiry: (number|undefined) + * }} + */ +Options.Cookie; + + +/** + * An interface for managing timeout behavior for WebDriver instances. + * + * This class should never be instantiated directly. Insead, obtain an instance + * with + * + * webdriver.manage().timeouts() + * + * @see WebDriver#manage() + * @see Options#timeouts() + */ +class Timeouts { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Specifies the amount of time the driver should wait when searching for an + * element if it is not immediately present. + * + * When searching for a single element, the driver should poll the page + * until the element has been found, or this timeout expires before failing + * with a {@link bot.ErrorCode.NO_SUCH_ELEMENT} error. When searching + * for multiple elements, the driver should poll the page until at least one + * element has been found or this timeout has expired. + * + * Setting the wait timeout to 0 (its default value), disables implicit + * waiting. + * + * Increasing the implicit wait timeout should be used judiciously as it + * will have an adverse effect on test run time, especially when used with + * slower location strategies like XPath. + * + * @param {number} ms The amount of time to wait, in milliseconds. + * @return {!promise.Promise} A promise that will be resolved + * when the implicit wait timeout has been set. + */ + implicitlyWait(ms) { + return this.driver_.schedule( + new command.Command(command.Name.IMPLICITLY_WAIT). + setParameter('ms', ms < 0 ? 0 : ms), + 'WebDriver.manage().timeouts().implicitlyWait(' + ms + ')'); + } + + /** + * Sets the amount of time to wait, in milliseconds, for an asynchronous + * script to finish execution before returning an error. If the timeout is + * less than or equal to 0, the script will be allowed to run indefinitely. + * + * @param {number} ms The amount of time to wait, in milliseconds. + * @return {!promise.Promise} A promise that will be resolved + * when the script timeout has been set. + */ + setScriptTimeout(ms) { + return this.driver_.schedule( + new command.Command(command.Name.SET_SCRIPT_TIMEOUT). + setParameter('ms', ms < 0 ? 0 : ms), + 'WebDriver.manage().timeouts().setScriptTimeout(' + ms + ')'); + } + + /** + * Sets the amount of time to wait for a page load to complete before + * returning an error. If the timeout is negative, page loads may be + * indefinite. + * + * @param {number} ms The amount of time to wait, in milliseconds. + * @return {!promise.Promise} A promise that will be resolved + * when the timeout has been set. + */ + pageLoadTimeout(ms) { + return this.driver_.schedule( + new command.Command(command.Name.SET_TIMEOUT). + setParameter('type', 'page load'). + setParameter('ms', ms), + 'WebDriver.manage().timeouts().pageLoadTimeout(' + ms + ')'); + } +} + + +/** + * An interface for managing the current window. + * + * This class should never be instantiated directly. Insead, obtain an instance + * with + * + * webdriver.manage().window() + * + * @see WebDriver#manage() + * @see Options#window() + */ +class Window { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Retrieves the window's current position, relative to the top left corner of + * the screen. + * @return {!promise.Promise.<{x: number, y: number}>} A promise + * that will be resolved with the window's position in the form of a + * {x:number, y:number} object literal. + */ + getPosition() { + return this.driver_.schedule( + new command.Command(command.Name.GET_WINDOW_POSITION). + setParameter('windowHandle', 'current'), + 'WebDriver.manage().window().getPosition()'); + } + + /** + * Repositions the current window. + * @param {number} x The desired horizontal position, relative to the left + * side of the screen. + * @param {number} y The desired vertical position, relative to the top of the + * of the screen. + * @return {!promise.Promise} A promise that will be resolved + * when the command has completed. + */ + setPosition(x, y) { + return this.driver_.schedule( + new command.Command(command.Name.SET_WINDOW_POSITION). + setParameter('windowHandle', 'current'). + setParameter('x', x). + setParameter('y', y), + 'WebDriver.manage().window().setPosition(' + x + ', ' + y + ')'); + } + + /** + * Retrieves the window's current size. + * @return {!promise.Promise<{width: number, height: number}>} A + * promise that will be resolved with the window's size in the form of a + * {width:number, height:number} object literal. + */ + getSize() { + return this.driver_.schedule( + new command.Command(command.Name.GET_WINDOW_SIZE). + setParameter('windowHandle', 'current'), + 'WebDriver.manage().window().getSize()'); + } + + /** + * Resizes the current window. + * @param {number} width The desired window width. + * @param {number} height The desired window height. + * @return {!promise.Promise} A promise that will be resolved + * when the command has completed. + */ + setSize(width, height) { + return this.driver_.schedule( + new command.Command(command.Name.SET_WINDOW_SIZE). + setParameter('windowHandle', 'current'). + setParameter('width', width). + setParameter('height', height), + 'WebDriver.manage().window().setSize(' + width + ', ' + height + ')'); + } + + /** + * Maximizes the current window. + * @return {!promise.Promise} A promise that will be resolved + * when the command has completed. + */ + maximize() { + return this.driver_.schedule( + new command.Command(command.Name.MAXIMIZE_WINDOW). + setParameter('windowHandle', 'current'), + 'WebDriver.manage().window().maximize()'); + } +} + + +/** + * Interface for managing WebDriver log records. + * + * This class should never be instantiated directly. Instead, obtain an + * instance with + * + * webdriver.manage().logs() + * + * @see WebDriver#manage() + * @see Options#logs() + */ +class Logs { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Fetches available log entries for the given type. + * + * Note that log buffers are reset after each call, meaning that available + * log entries correspond to those entries not yet returned for a given log + * type. In practice, this means that this call will return the available log + * entries since the last call, or from the start of the session. + * + * @param {!logging.Type} type The desired log type. + * @return {!promise.Promise.>} A + * promise that will resolve to a list of log entries for the specified + * type. + */ + get(type) { + let cmd = new command.Command(command.Name.GET_LOG). + setParameter('type', type); + return this.driver_.schedule( + cmd, 'WebDriver.manage().logs().get(' + type + ')'). + then(function(entries) { + return entries.map(function(entry) { + if (!(entry instanceof logging.Entry)) { + return new logging.Entry( + entry['level'], entry['message'], entry['timestamp'], + entry['type']); + } + return entry; + }); + }); + } + + /** + * Retrieves the log types available to this driver. + * @return {!promise.Promise>} A + * promise that will resolve to a list of available log types. + */ + getAvailableLogTypes() { + return this.driver_.schedule( + new command.Command(command.Name.GET_AVAILABLE_LOG_TYPES), + 'WebDriver.manage().logs().getAvailableLogTypes()'); + } +} + + +/** + * An interface for changing the focus of the driver to another frame or window. + * + * This class should never be instantiated directly. Instead, obtain an + * instance with + * + * webdriver.switchTo() + * + * @see WebDriver#switchTo() + */ +class TargetLocator { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Schedules a command retrieve the {@code document.activeElement} element on + * the current document, or {@code document.body} if activeElement is not + * available. + * @return {!WebElementPromise} The active element. + */ + activeElement() { + var id = this.driver_.schedule( + new command.Command(command.Name.GET_ACTIVE_ELEMENT), + 'WebDriver.switchTo().activeElement()'); + return new WebElementPromise(this.driver_, id); + } + + /** + * Schedules a command to switch focus of all future commands to the topmost + * frame on the page. + * @return {!promise.Promise} A promise that will be resolved + * when the driver has changed focus to the default content. + */ + defaultContent() { + return this.driver_.schedule( + new command.Command(command.Name.SWITCH_TO_FRAME). + setParameter('id', null), + 'WebDriver.switchTo().defaultContent()'); + } + + /** + * Schedules a command to switch the focus of all future commands to another + * frame on the page. The target frame may be specified as one of the + * following: + * + * - A number that specifies a (zero-based) index into [window.frames]( + * https://developer.mozilla.org/en-US/docs/Web/API/Window.frames). + * - A {@link WebElement} reference, which correspond to a `frame` or `iframe` + * DOM element. + * - The `null` value, to select the topmost frame on the page. Passing `null` + * is the same as calling {@link #defaultContent defaultContent()}. + * + * If the specified frame can not be found, the returned promise will be + * rejected with a {@linkplain error.NoSuchFrameError}. + * + * @param {(number|WebElement|null)} id The frame locator. + * @return {!promise.Promise} A promise that will be resolved + * when the driver has changed focus to the specified frame. + */ + frame(id) { + return this.driver_.schedule( + new command.Command(command.Name.SWITCH_TO_FRAME). + setParameter('id', id), + 'WebDriver.switchTo().frame(' + id + ')'); + } + + /** + * Schedules a command to switch the focus of all future commands to another + * window. Windows may be specified by their {@code window.name} attribute or + * by its handle (as returned by {@link WebDriver#getWindowHandles}). + * + * If the specified window cannot be found, the returned promise will be + * rejected with a {@linkplain error.NoSuchWindowError}. + * + * @param {string} nameOrHandle The name or window handle of the window to + * switch focus to. + * @return {!promise.Promise} A promise that will be resolved + * when the driver has changed focus to the specified window. + */ + window(nameOrHandle) { + return this.driver_.schedule( + new command.Command(command.Name.SWITCH_TO_WINDOW). + setParameter('name', nameOrHandle), + 'WebDriver.switchTo().window(' + nameOrHandle + ')'); + } + + /** + * Schedules a command to change focus to the active modal dialog, such as + * those opened by `window.alert()`, `window.confirm()`, and + * `window.prompt()`. The returned promise will be rejected with a + * {@linkplain error.NoSuchAlertError} if there are no open alerts. + * + * @return {!AlertPromise} The open alert. + */ + alert() { + var text = this.driver_.schedule( + new command.Command(command.Name.GET_ALERT_TEXT), + 'WebDriver.switchTo().alert()'); + var driver = this.driver_; + return new AlertPromise(driver, text.then(function(text) { + return new Alert(driver, text); + })); + } +} + + +////////////////////////////////////////////////////////////////////////////// +// +// WebElement +// +////////////////////////////////////////////////////////////////////////////// + + +const LEGACY_ELEMENT_ID_KEY = 'ELEMENT'; +const ELEMENT_ID_KEY = 'element-6066-11e4-a52e-4f735466cecf'; + + +/** + * Represents a DOM element. WebElements can be found by searching from the + * document root using a {@link WebDriver} instance, or by searching + * under another WebElement: + * + * driver.get('http://www.google.com'); + * var searchForm = driver.findElement(By.tagName('form')); + * var searchBox = searchForm.findElement(By.name('q')); + * searchBox.sendKeys('webdriver'); + */ +class WebElement { + /** + * @param {!WebDriver} driver the parent WebDriver instance for this element. + * @param {(!IThenable|string)} id The server-assigned opaque ID for + * the underlying DOM element. + */ + constructor(driver, id) { + /** @private {!WebDriver} */ + this.driver_ = driver; + + /** @private {!promise.Promise} */ + this.id_ = promise.fulfilled(id); + } + + /** + * @param {string} id The raw ID. + * @return {!Object} The element ID for use with WebDriver's wire protocol. + */ + static buildId(id) { + return {[ELEMENT_ID_KEY]: id, [LEGACY_ELEMENT_ID_KEY]: id}; + } + + /** + * Extracts the encoded WebElement ID from the object. + * + * @param {?} obj The object to extract the ID from. + * @return {string} the extracted ID. + * @throws {TypeError} if the object is not a valid encoded ID. + */ + static extractId(obj) { + if (obj && typeof obj === 'object') { + if (typeof obj[ELEMENT_ID_KEY] === 'string') { + return obj[ELEMENT_ID_KEY]; + } else if (typeof obj[LEGACY_ELEMENT_ID_KEY] === 'string') { + return obj[LEGACY_ELEMENT_ID_KEY]; + } + } + throw new TypeError('object is not a WebElement ID'); + } + + /** + * @param {?} obj the object to test. + * @return {boolean} whether the object is a valid encoded WebElement ID. + */ + static isId(obj) { + return obj && typeof obj === 'object' + && (typeof obj[ELEMENT_ID_KEY] === 'string' + || typeof obj[LEGACY_ELEMENT_ID_KEY] === 'string'); + } + + /** + * Compares two WebElements for equality. + * + * @param {!WebElement} a A WebElement. + * @param {!WebElement} b A WebElement. + * @return {!promise.Promise} A promise that will be + * resolved to whether the two WebElements are equal. + */ + static equals(a, b) { + if (a === b) { + return promise.fulfilled(true); + } + let ids = [a.getId(), b.getId()]; + return promise.all(ids).then(function(ids) { + // If the two element's have the same ID, they should be considered + // equal. Otherwise, they may still be equivalent, but we'll need to + // ask the server to check for us. + if (ids[0] === ids[1]) { + return true; + } + + let cmd = new command.Command(command.Name.ELEMENT_EQUALS); + cmd.setParameter('id', ids[0]); + cmd.setParameter('other', ids[1]); + return a.driver_.schedule(cmd, 'WebElement.equals()'); + }); + } + + /** @return {!WebDriver} The parent driver for this instance. */ + getDriver() { + return this.driver_; + } + + /** + * @return {!promise.Promise} A promise that resolves to + * the server-assigned opaque ID assigned to this element. + */ + getId() { + return this.id_; + } + + /** + * @deprecated Use {@link #getId()} instead. + */ + getRawId() { + return this.getId(); + } + + /** + * @return {!Object} Returns the serialized representation of this WebElement. + */ + [Symbols.serialize]() { + return this.getId().then(WebElement.buildId); + } + + /** + * Schedules a command that targets this element with the parent WebDriver + * instance. Will ensure this element's ID is included in the command + * parameters under the "id" key. + * + * @param {!command.Command} command The command to schedule. + * @param {string} description A description of the command for debugging. + * @return {!promise.Promise} A promise that will be resolved + * with the command result. + * @template T + * @see WebDriver#schedule + * @private + */ + schedule_(command, description) { + command.setParameter('id', this.getId()); + return this.driver_.schedule(command, description); + } + + /** + * Schedule a command to find a descendant of this element. If the element + * cannot be found, the returned promise will be rejected with a + * {@linkplain error.NoSuchElementError NoSuchElementError}. + * + * The search criteria for an element may be defined using one of the static + * factories on the {@link by.By} class, or as a short-hand + * {@link ./by.ByHash} object. For example, the following two statements + * are equivalent: + * + * var e1 = element.findElement(By.id('foo')); + * var e2 = element.findElement({id:'foo'}); + * + * You may also provide a custom locator function, which takes as input this + * instance and returns a {@link WebElement}, or a promise that will resolve + * to a WebElement. If the returned promise resolves to an array of + * WebElements, WebDriver will use the first element. For example, to find the + * first visible link on a page, you could write: + * + * var link = element.findElement(firstVisibleLink); + * + * function firstVisibleLink(element) { + * var links = element.findElements(By.tagName('a')); + * return promise.filter(links, function(link) { + * return link.isDisplayed(); + * }); + * } + * + * @param {!(by.By|Function)} locator The locator strategy to use when + * searching for the element. + * @return {!WebElementPromise} A WebElement that can be used to issue + * commands against the located element. If the element is not found, the + * element will be invalidated and all scheduled commands aborted. + */ + findElement(locator) { + locator = by.checkedLocator(locator); + let id; + if (typeof locator === 'function') { + id = this.driver_.findElementInternal_(locator, this); + } else { + let cmd = new command.Command( + command.Name.FIND_CHILD_ELEMENT). + setParameter('using', locator.using). + setParameter('value', locator.value); + id = this.schedule_(cmd, 'WebElement.findElement(' + locator + ')'); + } + return new WebElementPromise(this.driver_, id); + } + + /** + * Schedules a command to test if there is at least one descendant of this + * element that matches the given search criteria. + * + * @param {!(by.By|Function)} locator The locator strategy to use when + * searching for the element. + * @return {!promise.Promise} A promise that will be + * resolved with whether an element could be located on the page. + */ + isElementPresent(locator) { + return this.findElements(locator).then(function(result) { + return !!result.length; + }); + } + + /** + * Schedules a command to find all of the descendants of this element that + * match the given search criteria. + * + * @param {!(by.By|Function)} locator The locator strategy to use when + * searching for the element. + * @return {!promise.Promise>} A + * promise that will resolve to an array of WebElements. + */ + findElements(locator) { + locator = by.checkedLocator(locator); + let id; + if (typeof locator === 'function') { + return this.driver_.findElementsInternal_(locator, this); + } else { + var cmd = new command.Command( + command.Name.FIND_CHILD_ELEMENTS). + setParameter('using', locator.using). + setParameter('value', locator.value); + return this.schedule_(cmd, 'WebElement.findElements(' + locator + ')'); + } + } + + /** + * Schedules a command to click on this element. + * @return {!promise.Promise} A promise that will be resolved + * when the click command has completed. + */ + click() { + return this.schedule_( + new command.Command(command.Name.CLICK_ELEMENT), + 'WebElement.click()'); + } + + /** + * Schedules a command to type a sequence on the DOM element represented by + * this instance. + * + * Modifier keys (SHIFT, CONTROL, ALT, META) are stateful; once a modifier is + * processed in the keysequence, that key state is toggled until one of the + * following occurs: + * + * - The modifier key is encountered again in the sequence. At this point the + * state of the key is toggled (along with the appropriate keyup/down + * events). + * - The {@link input.Key.NULL} key is encountered in the sequence. When + * this key is encountered, all modifier keys current in the down state are + * released (with accompanying keyup events). The NULL key can be used to + * simulate common keyboard shortcuts: + * + * element.sendKeys("text was", + * Key.CONTROL, "a", Key.NULL, + * "now text is"); + * // Alternatively: + * element.sendKeys("text was", + * Key.chord(Key.CONTROL, "a"), + * "now text is"); + * + * - The end of the keysequence is encountered. When there are no more keys + * to type, all depressed modifier keys are released (with accompanying + * keyup events). + * + * If this element is a file input ({@code }), the + * specified key sequence should specify the path to the file to attach to + * the element. This is analgous to the user clicking "Browse..." and entering + * the path into the file select dialog. + * + * var form = driver.findElement(By.css('form')); + * var element = form.findElement(By.css('input[type=file]')); + * element.sendKeys('/path/to/file.txt'); + * form.submit(); + * + * For uploads to function correctly, the entered path must reference a file + * on the _browser's_ machine, not the local machine running this script. When + * running against a remote Selenium server, a {@link input.FileDetector} + * may be used to transparently copy files to the remote machine before + * attempting to upload them in the browser. + * + * __Note:__ On browsers where native keyboard events are not supported + * (e.g. Firefox on OS X), key events will be synthesized. Special + * punctionation keys will be synthesized according to a standard QWERTY en-us + * keyboard layout. + * + * @param {...(string|!promise.Promise)} var_args The + * sequence of keys to type. All arguments will be joined into a single + * sequence. + * @return {!promise.Promise} A promise that will be resolved + * when all keys have been typed. + */ + sendKeys(var_args) { + // Coerce every argument to a string. This protects us from users that + // ignore the jsdoc and give us a number (which ends up causing problems on + // the server, which requires strings). + let keys = promise.all(Array.prototype.slice.call(arguments, 0)). + then(keys => keys.map(String)); + if (!this.driver_.fileDetector_) { + return this.schedule_( + new command.Command(command.Name.SEND_KEYS_TO_ELEMENT). + setParameter('value', keys), + 'WebElement.sendKeys()'); + } + + // Suppress unhandled rejection errors until the flow executes the command. + keys.thenCatch(function() {}); + + var element = this; + return this.driver_.flow_.execute(function() { + return keys.then(function(keys) { + return element.driver_.fileDetector_ + .handleFile(element.driver_, keys.join('')); + }).then(function(keys) { + return element.schedule_( + new command.Command(command.Name.SEND_KEYS_TO_ELEMENT). + setParameter('value', [keys]), + 'WebElement.sendKeys()'); + }); + }, 'WebElement.sendKeys()'); + } + + /** + * Schedules a command to query for the tag/node name of this element. + * @return {!promise.Promise} A promise that will be + * resolved with the element's tag name. + */ + getTagName() { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_TAG_NAME), + 'WebElement.getTagName()'); + } + + /** + * Schedules a command to query for the computed style of the element + * represented by this instance. If the element inherits the named style from + * its parent, the parent will be queried for its value. Where possible, color + * values will be converted to their hex representation (e.g. #00ff00 instead of + * rgb(0, 255, 0)). + * + * _Warning:_ the value returned will be as the browser interprets it, so + * it may be tricky to form a proper assertion. + * + * @param {string} cssStyleProperty The name of the CSS style property to look + * up. + * @return {!promise.Promise} A promise that will be + * resolved with the requested CSS value. + */ + getCssValue(cssStyleProperty) { + var name = command.Name.GET_ELEMENT_VALUE_OF_CSS_PROPERTY; + return this.schedule_( + new command.Command(name). + setParameter('propertyName', cssStyleProperty), + 'WebElement.getCssValue(' + cssStyleProperty + ')'); + } + + /** + * Schedules a command to query for the value of the given attribute of the + * element. Will return the current value, even if it has been modified after + * the page has been loaded. More exactly, this method will return the value of + * the given attribute, unless that attribute is not present, in which case the + * value of the property with the same name is returned. If neither value is + * set, null is returned (for example, the "value" property of a textarea + * element). The "style" attribute is converted as best can be to a + * text representation with a trailing semi-colon. The following are deemed to + * be "boolean" attributes and will return either "true" or null: + * + * async, autofocus, autoplay, checked, compact, complete, controls, declare, + * defaultchecked, defaultselected, defer, disabled, draggable, ended, + * formnovalidate, hidden, indeterminate, iscontenteditable, ismap, itemscope, + * loop, multiple, muted, nohref, noresize, noshade, novalidate, nowrap, open, + * paused, pubdate, readonly, required, reversed, scoped, seamless, seeking, + * selected, spellcheck, truespeed, willvalidate + * + * Finally, the following commonly mis-capitalized attribute/property names + * are evaluated as expected: + * + * - "class" + * - "readonly" + * + * @param {string} attributeName The name of the attribute to query. + * @return {!promise.Promise} A promise that will be + * resolved with the attribute's value. The returned value will always be + * either a string or null. + */ + getAttribute(attributeName) { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_ATTRIBUTE). + setParameter('name', attributeName), + 'WebElement.getAttribute(' + attributeName + ')'); + } + + /** + * Get the visible (i.e. not hidden by CSS) innerText of this element, including + * sub-elements, without any leading or trailing whitespace. + * @return {!promise.Promise} A promise that will be + * resolved with the element's visible text. + */ + getText() { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_TEXT), + 'WebElement.getText()'); + } + + /** + * Schedules a command to compute the size of this element's bounding box, in + * pixels. + * @return {!promise.Promise.<{width: number, height: number}>} A + * promise that will be resolved with the element's size as a + * {@code {width:number, height:number}} object. + */ + getSize() { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_SIZE), + 'WebElement.getSize()'); + } + + /** + * Schedules a command to compute the location of this element in page space. + * @return {!promise.Promise.<{x: number, y: number}>} A promise that + * will be resolved to the element's location as a + * {@code {x:number, y:number}} object. + */ + getLocation() { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_LOCATION), + 'WebElement.getLocation()'); + } + + /** + * Schedules a command to query whether the DOM element represented by this + * instance is enabled, as dicted by the {@code disabled} attribute. + * @return {!promise.Promise} A promise that will be + * resolved with whether this element is currently enabled. + */ + isEnabled() { + return this.schedule_( + new command.Command(command.Name.IS_ELEMENT_ENABLED), + 'WebElement.isEnabled()'); + } + + /** + * Schedules a command to query whether this element is selected. + * @return {!promise.Promise} A promise that will be + * resolved with whether this element is currently selected. + */ + isSelected() { + return this.schedule_( + new command.Command(command.Name.IS_ELEMENT_SELECTED), + 'WebElement.isSelected()'); + } + + /** + * Schedules a command to submit the form containing this element (or this + * element if it is a FORM element). This command is a no-op if the element is + * not contained in a form. + * @return {!promise.Promise} A promise that will be resolved + * when the form has been submitted. + */ + submit() { + return this.schedule_( + new command.Command(command.Name.SUBMIT_ELEMENT), + 'WebElement.submit()'); + } + + /** + * Schedules a command to clear the `value` of this element. This command has + * no effect if the underlying DOM element is neither a text INPUT element + * nor a TEXTAREA element. + * @return {!promise.Promise} A promise that will be resolved + * when the element has been cleared. + */ + clear() { + return this.schedule_( + new command.Command(command.Name.CLEAR_ELEMENT), + 'WebElement.clear()'); + } + + /** + * Schedules a command to test whether this element is currently displayed. + * @return {!promise.Promise} A promise that will be + * resolved with whether this element is currently visible on the page. + */ + isDisplayed() { + return this.schedule_( + new command.Command(command.Name.IS_ELEMENT_DISPLAYED), + 'WebElement.isDisplayed()'); + } + + /** + * Take a screenshot of the visible region encompassed by this element's + * bounding rectangle. + * + * @param {boolean=} opt_scroll Optional argument that indicates whether the + * element should be scrolled into view before taking a screenshot. + * Defaults to false. + * @return {!promise.Promise} A promise that will be + * resolved to the screenshot as a base-64 encoded PNG. + */ + takeScreenshot(opt_scroll) { + var scroll = !!opt_scroll; + return this.schedule_( + new command.Command(command.Name.TAKE_ELEMENT_SCREENSHOT) + .setParameter('scroll', scroll), + 'WebElement.takeScreenshot(' + scroll + ')'); + } + + /** + * Schedules a command to retrieve the outer HTML of this element. + * @return {!promise.Promise} A promise that will be + * resolved with the element's outer HTML. + */ + getOuterHtml() { + return this.driver_.executeScript(function() { + var element = arguments[0]; + if ('outerHTML' in element) { + return element.outerHTML; + } else { + var div = element.ownerDocument.createElement('div'); + div.appendChild(element.cloneNode(true)); + return div.innerHTML; + } + }, this); + } + + /** + * Schedules a command to retrieve the inner HTML of this element. + * @return {!promise.Promise} A promise that will be + * resolved with the element's inner HTML. + */ + getInnerHtml() { + return this.driver_.executeScript('return arguments[0].innerHTML', this); + } +} + + +/** + * WebElementPromise is a promise that will be fulfilled with a WebElement. + * This serves as a forward proxy on WebElement, allowing calls to be + * scheduled without directly on this instance before the underlying + * WebElement has been fulfilled. In other words, the following two statements + * are equivalent: + * + * driver.findElement({id: 'my-button'}).click(); + * driver.findElement({id: 'my-button'}).then(function(el) { + * return el.click(); + * }); + * + * @implements {promise.Thenable} + * @final + */ +class WebElementPromise extends WebElement { + /** + * @param {!WebDriver} driver The parent WebDriver instance for this + * element. + * @param {!promise.Promise} el A promise + * that will resolve to the promised element. + */ + constructor(driver, el) { + super(driver, 'unused'); + + /** @override */ + this.cancel = el.cancel.bind(el); + + /** @override */ + this.isPending = el.isPending.bind(el); + + /** @override */ + this.then = el.then.bind(el); + + /** @override */ + this.catch = el.catch.bind(el); + + /** @override */ + this.thenCatch = el.thenCatch.bind(el); + + /** @override */ + this.thenFinally = el.thenFinally.bind(el); + + /** + * Defers returning the element ID until the wrapped WebElement has been + * resolved. + * @override + */ + this.getId = function() { + return el.then(function(el) { + return el.getId(); + }); + }; + } +} +promise.Thenable.addImplementation(WebElementPromise); + + +////////////////////////////////////////////////////////////////////////////// +// +// Alert +// +////////////////////////////////////////////////////////////////////////////// + + +/** + * Represents a modal dialog such as {@code alert}, {@code confirm}, or + * {@code prompt}. Provides functions to retrieve the message displayed with + * the alert, accept or dismiss the alert, and set the response text (in the + * case of {@code prompt}). + */ +class Alert { + /** + * @param {!WebDriver} driver The driver controlling the browser this alert + * is attached to. + * @param {string} text The message text displayed with this alert. + */ + constructor(driver, text) { + /** @private {!WebDriver} */ + this.driver_ = driver; + + /** @private {!promise.Promise} */ + this.text_ = promise.fulfilled(text); + } + + /** + * Retrieves the message text displayed with this alert. For instance, if the + * alert were opened with alert("hello"), then this would return "hello". + * + * @return {!promise.Promise} A promise that will be + * resolved to the text displayed with this alert. + */ + getText() { + return this.text_; + } + + /** + * Accepts this alert. + * + * @return {!promise.Promise} A promise that will be resolved + * when this command has completed. + */ + accept() { + return this.driver_.schedule( + new command.Command(command.Name.ACCEPT_ALERT), + 'WebDriver.switchTo().alert().accept()'); + } + + /** + * Dismisses this alert. + * + * @return {!promise.Promise} A promise that will be resolved + * when this command has completed. + */ + dismiss() { + return this.driver_.schedule( + new command.Command(command.Name.DISMISS_ALERT), + 'WebDriver.switchTo().alert().dismiss()'); + } + + /** + * Sets the response text on this alert. This command will return an error if + * the underlying alert does not support response text (e.g. window.alert and + * window.confirm). + * + * @param {string} text The text to set. + * @return {!promise.Promise} A promise that will be resolved + * when this command has completed. + */ + sendKeys(text) { + return this.driver_.schedule( + new command.Command(command.Name.SET_ALERT_TEXT). + setParameter('text', text), + 'WebDriver.switchTo().alert().sendKeys(' + text + ')'); + } +} + + +/** + * AlertPromise is a promise that will be fulfilled with an Alert. This promise + * serves as a forward proxy on an Alert, allowing calls to be scheduled + * directly on this instance before the underlying Alert has been fulfilled. In + * other words, the following two statements are equivalent: + * + * driver.switchTo().alert().dismiss(); + * driver.switchTo().alert().then(function(alert) { + * return alert.dismiss(); + * }); + * + * @implements {promise.Thenable.} + * @final + */ +class AlertPromise extends Alert { + /** + * @param {!WebDriver} driver The driver controlling the browser this + * alert is attached to. + * @param {!promise.Thenable} alert A thenable + * that will be fulfilled with the promised alert. + */ + constructor(driver, alert) { + super(driver, 'unused'); + + /** @override */ + this.cancel = alert.cancel.bind(alert); + + /** @override */ + this.isPending = alert.isPending.bind(alert); + + /** @override */ + this.then = alert.then.bind(alert); + + /** @override */ + this.catch = alert.catch.bind(alert); + + /** @override */ + this.thenCatch = alert.thenCatch.bind(alert); + + /** @override */ + this.thenFinally = alert.thenFinally.bind(alert); + + /** + * Defer returning text until the promised alert has been resolved. + * @override + */ + this.getText = function() { + return alert.then(function(alert) { + return alert.getText(); + }); + }; + + /** + * Defers action until the alert has been located. + * @override + */ + this.accept = function() { + return alert.then(function(alert) { + return alert.accept(); + }); + }; + + /** + * Defers action until the alert has been located. + * @override + */ + this.dismiss = function() { + return alert.then(function(alert) { + return alert.dismiss(); + }); + }; + + /** + * Defers action until the alert has been located. + * @override + */ + this.sendKeys = function(text) { + return alert.then(function(alert) { + return alert.sendKeys(text); + }); + }; + } +} +promise.Thenable.addImplementation(AlertPromise); + + +// PUBLIC API + + +exports.Alert = Alert; +exports.AlertPromise = AlertPromise; +exports.Logs = Logs; +exports.Navigation = Navigation; +exports.Options = Options; +exports.TargetLocator = TargetLocator; +exports.Timeouts = Timeouts; +/** @deprecated Use {@link error.UnexpectedAlertOpenError} instead. */ +exports.UnhandledAlertError = error.UnexpectedAlertOpenError; +exports.WebDriver = WebDriver; +exports.WebElement = WebElement; +exports.WebElementPromise = WebElementPromise; +exports.Window = Window; diff --git a/www/node_modules/selenium-webdriver/net/index.js b/www/node_modules/selenium-webdriver/net/index.js new file mode 100644 index 0000000..4142ebc --- /dev/null +++ b/www/node_modules/selenium-webdriver/net/index.js @@ -0,0 +1,82 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var os = require('os'); + + +function getLoInterface() { + var name; + if (process.platform === 'darwin') { + name = 'lo0'; + } else if (process.platform === 'linux') { + name = 'lo'; + } + return name ? os.networkInterfaces()[name] : null; +} + + +/** + * Queries the system network interfaces for an IP address. + * @param {boolean} loopback Whether to find a loopback address. + * @param {string=} opt_family The IP family (IPv4 or IPv6). Defaults to IPv4. + * @return {string} The located IP address or undefined. + */ +function getAddress(loopback, opt_family) { + var family = opt_family || 'IPv4'; + var addresses = []; + + var interfaces; + if (loopback) { + var lo = getLoInterface(); + interfaces = lo ? [lo] : null; + } + interfaces = interfaces || os.networkInterfaces(); + for (var key in interfaces) { + interfaces[key].forEach(function(ipAddress) { + if (ipAddress.family === family && + ipAddress.internal === loopback) { + addresses.push(ipAddress.address); + } + }); + } + return addresses[0]; +} + + +// PUBLIC API + + +/** + * Retrieves the external IP address for this host. + * @param {string=} opt_family The IP family to retrieve. Defaults to "IPv4". + * @return {string} The IP address or undefined if not available. + */ +exports.getAddress = function(opt_family) { + return getAddress(false, opt_family); +}; + + +/** + * Retrieves a loopback address for this machine. + * @param {string=} opt_family The IP family to retrieve. Defaults to "IPv4". + * @return {string} The IP address or undefined if not available. + */ +exports.getLoopbackAddress = function(opt_family) { + return getAddress(true, opt_family); +}; diff --git a/www/node_modules/selenium-webdriver/net/portprober.js b/www/node_modules/selenium-webdriver/net/portprober.js new file mode 100644 index 0000000..f455ede --- /dev/null +++ b/www/node_modules/selenium-webdriver/net/portprober.js @@ -0,0 +1,219 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var exec = require('child_process').exec, + fs = require('fs'), + net = require('net'); + +var promise = require('../lib/promise'); + + +/** + * The IANA suggested ephemeral port range. + * @type {{min: number, max: number}} + * @const + * @see http://en.wikipedia.org/wiki/Ephemeral_ports + */ +var DEFAULT_IANA_RANGE = {min: 49152, max: 65535}; + + +/** + * The epheremal port range for the current system. Lazily computed on first + * access. + * @type {promise.Promise.<{min: number, max: number}>} + */ +var systemRange = null; + + +/** + * Computes the ephemeral port range for the current system. This is based on + * http://stackoverflow.com/a/924337. + * @return {promise.Promise.<{min: number, max: number}>} A promise + * that will resolve to the ephemeral port range of the current system. + */ +function findSystemPortRange() { + if (systemRange) { + return systemRange; + } + var range = process.platform === 'win32' ? + findWindowsPortRange() : findUnixPortRange(); + return systemRange = range.thenCatch(function() { + return DEFAULT_IANA_RANGE; + }); +} + + +/** + * Executes a command and returns its output if it succeeds. + * @param {string} cmd The command to execute. + * @return {!promise.Promise.} A promise that will resolve + * with the command's stdout data. + */ +function execute(cmd) { + var result = promise.defer(); + exec(cmd, function(err, stdout) { + if (err) { + result.reject(err); + } else { + result.fulfill(stdout); + } + }); + return result.promise; +} + + +/** + * Computes the ephemeral port range for a Unix-like system. + * @return {!promise.Promise.<{min: number, max: number}>} A promise + * that will resolve with the ephemeral port range on the current system. + */ +function findUnixPortRange() { + var cmd; + if (process.platform === 'sunos') { + cmd = + '/usr/sbin/ndd /dev/tcp tcp_smallest_anon_port tcp_largest_anon_port'; + } else if (fs.existsSync('/proc/sys/net/ipv4/ip_local_port_range')) { + // Linux + cmd = 'cat /proc/sys/net/ipv4/ip_local_port_range'; + } else { + cmd = 'sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last' + + ' | sed -e "s/.*:\\s*//"'; + } + + return execute(cmd).then(function(stdout) { + if (!stdout || !stdout.length) return DEFAULT_IANA_RANGE; + var range = stdout.trim().split(/\s+/).map(Number); + if (range.some(isNaN)) return DEFAULT_IANA_RANGE; + return {min: range[0], max: range[1]}; + }); +} + + +/** + * Computes the ephemeral port range for a Windows system. + * @return {!promise.Promise.<{min: number, max: number}>} A promise + * that will resolve with the ephemeral port range on the current system. + */ +function findWindowsPortRange() { + var deferredRange = promise.defer(); + // First, check if we're running on XP. If this initial command fails, + // we just fallback on the default IANA range. + return execute('cmd.exe /c ver').then(function(stdout) { + if (/Windows XP/.test(stdout)) { + // TODO: Try to read these values from the registry. + return {min: 1025, max: 5000}; + } else { + return execute('netsh int ipv4 show dynamicport tcp'). + then(function(stdout) { + /* > netsh int ipv4 show dynamicport tcp + Protocol tcp Dynamic Port Range + --------------------------------- + Start Port : 49152 + Number of Ports : 16384 + */ + var range = stdout.split(/\n/).filter(function(line) { + return /.*:\s*\d+/.test(line); + }).map(function(line) { + return Number(line.split(/:\s*/)[1]); + }); + + return { + min: range[0], + max: range[0] + range[1] + }; + }); + } + }); +} + + +/** + * Tests if a port is free. + * @param {number} port The port to test. + * @param {string=} opt_host The bound host to test the {@code port} against. + * Defaults to {@code INADDR_ANY}. + * @return {!promise.Promise.} A promise that will resolve + * with whether the port is free. + */ +function isFree(port, opt_host) { + var result = promise.defer(); + + result.promise.thenCatch(function(e) { + if (e instanceof promise.CancellationError) { + server.close(); + } + }); + + var server = net.createServer().on('error', function(e) { + if (e.code === 'EADDRINUSE') { + result.fulfill(false); + } else { + result.reject(e); + } + }); + + server.listen(port, opt_host, function() { + server.close(function() { + result.fulfill(true); + }); + }); + + return result.promise; +} + + +/** + * @param {string=} opt_host The bound host to test the {@code port} against. + * Defaults to {@code INADDR_ANY}. + * @return {!promise.Promise.} A promise that will resolve + * to a free port. If a port cannot be found, the promise will be + * rejected. + */ +function findFreePort(opt_host) { + return findSystemPortRange().then(function(range) { + var attempts = 0; + var deferredPort = promise.defer(); + findPort(); + return deferredPort.promise; + + function findPort() { + attempts += 1; + if (attempts > 10) { + deferredPort.reject(Error('Unable to find a free port')); + } + + var port = Math.floor( + Math.random() * (range.max - range.min) + range.min); + isFree(port, opt_host).then(function(isFree) { + if (isFree) { + deferredPort.fulfill(port); + } else { + findPort(); + } + }); + } + }); +} + + +// PUBLIC API + + +exports.findFreePort = findFreePort; +exports.isFree = isFree; diff --git a/www/node_modules/selenium-webdriver/opera.js b/www/node_modules/selenium-webdriver/opera.js new file mode 100644 index 0000000..33f1e5b --- /dev/null +++ b/www/node_modules/selenium-webdriver/opera.js @@ -0,0 +1,480 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for the + * Opera web browser (v26+). Before using this module, you must download the + * latest OperaDriver + * [release](https://github.com/operasoftware/operachromiumdriver/releases) and + * ensure it can be found on your system + * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). + * + * There are three primary classes exported by this module: + * + * 1. {@linkplain ServiceBuilder}: configures the + * {@link selenium-webdriver/remote.DriverService remote.DriverService} + * that manages the + * [OperaDriver](https://github.com/operasoftware/operachromiumdriver) + * child process. + * + * 2. {@linkplain Options}: defines configuration options for each new Opera + * session, such as which {@linkplain Options#setProxy proxy} to use, + * what {@linkplain Options#addExtensions extensions} to install, or + * what {@linkplain Options#addArguments command-line switches} to use when + * starting the browser. + * + * 3. {@linkplain Driver}: the WebDriver client; each new instance will control + * a unique browser session with a clean user profile (unless otherwise + * configured through the {@link Options} class). + * + * By default, every Opera session will use a single driver service, which is + * started the first time a {@link Driver} instance is created and terminated + * when this process exits. The default service will inherit its environment + * from the current process and direct all output to /dev/null. You may obtain + * a handle to this default service using + * {@link #getDefaultService getDefaultService()} and change its configuration + * with {@link #setDefaultService setDefaultService()}. + * + * You may also create a {@link Driver} with its own driver service. This is + * useful if you need to capture the server's log output for a specific session: + * + * var opera = require('selenium-webdriver/opera'); + * + * var service = new opera.ServiceBuilder() + * .loggingTo('/my/log/file.txt') + * .enableVerboseLogging() + * .build(); + * + * var options = new opera.Options(); + * // configure browser options ... + * + * var driver = new opera.Driver(options, service); + * + * Users should only instantiate the {@link Driver} class directly when they + * need a custom driver service configuration (as shown above). For normal + * operation, users should start Opera using the + * {@link selenium-webdriver.Builder}. + */ + +'use strict'; + +const fs = require('fs'); + +const executors = require('./executors'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + promise = require('./lib/promise'), + Symbols = require('./lib/symbols'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +/** + * Name of the OperaDriver executable. + * @type {string} + * @const + */ +const OPERADRIVER_EXE = + process.platform === 'win32' ? 'operadriver.exe' : 'operadriver'; + + +/** + * Creates {@link remote.DriverService} instances that manages an + * [OperaDriver](https://github.com/operasoftware/operachromiumdriver) + * server in a child process. + */ +class ServiceBuilder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the operadriver on the current + * PATH. + * @throws {Error} If provided executable does not exist, or the operadriver + * cannot be found on the PATH. + */ + constructor(opt_exe) { + let exe = opt_exe || io.findInPath(OPERADRIVER_EXE, true); + if (!exe) { + throw Error( + 'The OperaDriver could not be found on the current PATH. Please ' + + 'download the latest version of the OperaDriver from ' + + 'https://github.com/operasoftware/operachromiumdriver/releases and ' + + 'ensure it can be found on your PATH.'); + } + + /** @private {string} */ + this.exe_ = /** @type {string} */(exe); + if (!fs.existsSync(this.exe_)) { + throw Error('File does not exist: ' + this.exe_); + } + + /** @private {!Array.} */ + this.args_ = []; + + /** @private {number} */ + this.port_ = 0; + + /** + * @private {(string|!Array)} + */ + this.stdio_ = 'ignore'; + + /** @private {Object.} */ + this.env_ = null; + } + + /** + * Sets the port to start the OperaDriver on. + * @param {number} port The port to use, or 0 for any free port. + * @return {!ServiceBuilder} A self reference. + * @throws {Error} If the port is invalid. + */ + usingPort(port) { + if (port < 0) { + throw Error('port must be >= 0: ' + port); + } + this.port_ = port; + return this; + } + + /** + * Sets the path of the log file the driver should log to. If a log file is + * not specified, the driver will log to stderr. + * @param {string} path Path of the log file to use. + * @return {!ServiceBuilder} A self reference. + */ + loggingTo(path) { + this.args_.push('--log-path=' + path); + return this; + } + + /** + * Enables verbose logging. + * @return {!ServiceBuilder} A self reference. + */ + enableVerboseLogging() { + this.args_.push('--verbose'); + return this; + } + + /** + * Silence sthe drivers output. + * @return {!ServiceBuilder} A self reference. + */ + silent() { + this.args_.push('--silent'); + return this; + } + + /** + * Defines the stdio configuration for the driver service. See + * {@code child_process.spawn} for more information. + * @param {(string|!Array)} + * config The configuration to use. + * @return {!ServiceBuilder} A self reference. + */ + setStdio(config) { + this.stdio_ = config; + return this; + } + + /** + * Defines the environment to start the server under. This settings will be + * inherited by every browser session started by the server. + * @param {!Object.} env The environment to use. + * @return {!ServiceBuilder} A self reference. + */ + withEnvironment(env) { + this.env_ = env; + return this; + } + + /** + * Creates a new DriverService using this instance's current configuration. + * @return {!remote.DriverService} A new driver service using this instance's + * current configuration. + * @throws {Error} If the driver exectuable was not specified and a default + * could not be found on the current PATH. + */ + build() { + var port = this.port_ || portprober.findFreePort(); + var args = this.args_.concat(); // Defensive copy. + + return new remote.DriverService(this.exe_, { + loopback: true, + port: port, + args: promise.when(port, function(port) { + return args.concat('--port=' + port); + }), + env: this.env_, + stdio: this.stdio_ + }); + }; +} + + + +/** @type {remote.DriverService} */ +var defaultService = null; + + +/** + * Sets the default service to use for new OperaDriver instances. + * @param {!remote.DriverService} service The service to use. + * @throws {Error} If the default service is currently running. + */ +function setDefaultService(service) { + if (defaultService && defaultService.isRunning()) { + throw Error( + 'The previously configured OperaDriver service is still running. ' + + 'You must shut it down before you may adjust its configuration.'); + } + defaultService = service; +} + + +/** + * Returns the default OperaDriver service. If such a service has not been + * configured, one will be constructed using the default configuration for + * a OperaDriver executable found on the system PATH. + * @return {!remote.DriverService} The default OperaDriver service. + */ +function getDefaultService() { + if (!defaultService) { + defaultService = new ServiceBuilder().build(); + } + return defaultService; +} + + +/** + * @type {string} + * @const + */ +var OPTIONS_CAPABILITY_KEY = 'chromeOptions'; + + +/** + * Class for managing {@linkplain Driver OperaDriver} specific options. + */ +class Options { + constructor() { + /** @private {!Array.} */ + this.args_ = []; + + /** @private {?string} */ + this.binary_ = null; + + /** @private {!Array.<(string|!Buffer)>} */ + this.extensions_ = []; + + /** @private {./lib/logging.Preferences} */ + this.logPrefs_ = null; + + /** @private {?capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Extracts the OperaDriver specific options from the given capabilities + * object. + * @param {!capabilities.Capabilities} caps The capabilities object. + * @return {!Options} The OperaDriver options. + */ + static fromCapabilities(caps) { + var options; + var o = caps.get(OPTIONS_CAPABILITY_KEY); + if (o instanceof Options) { + options = o; + } else if (o) { + options = new Options() + .addArguments(o.args || []) + .addExtensions(o.extensions || []) + .setOperaBinaryPath(o.binary); + } else { + options = new Options; + } + + if (caps.has(capabilities.Capability.PROXY)) { + options.setProxy(caps.get(capabilities.Capability.PROXY)); + } + + if (caps.has(capabilities.Capability.LOGGING_PREFS)) { + options.setLoggingPrefs( + caps.get(capabilities.Capability.LOGGING_PREFS)); + } + + return options; + } + + /** + * Add additional command line arguments to use when launching the Opera + * browser. Each argument may be specified with or without the "--" prefix + * (e.g. "--foo" and "foo"). Arguments with an associated value should be + * delimited by an "=": "foo=bar". + * @param {...(string|!Array.)} var_args The arguments to add. + * @return {!Options} A self reference. + */ + addArguments(var_args) { + this.args_ = this.args_.concat.apply(this.args_, arguments); + return this; + } + + /** + * Add additional extensions to install when launching Opera. Each extension + * should be specified as the path to the packed CRX file, or a Buffer for an + * extension. + * @param {...(string|!Buffer|!Array.<(string|!Buffer)>)} var_args The + * extensions to add. + * @return {!Options} A self reference. + */ + addExtensions(var_args) { + this.extensions_ = this.extensions_.concat.apply( + this.extensions_, arguments); + return this; + } + + /** + * Sets the path to the Opera binary to use. On Mac OS X, this path should + * reference the actual Opera executable, not just the application binary. The + * binary path be absolute or relative to the operadriver server executable, but + * it must exist on the machine that will launch Opera. + * + * @param {string} path The path to the Opera binary to use. + * @return {!Options} A self reference. + */ + setOperaBinaryPath(path) { + this.binary_ = path; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {!./lib/logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPrefs(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Sets the proxy settings for the new session. + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts this options instance to a {@link capabilities.Capabilities} + * object. + * @param {capabilities.Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!capabilities.Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || capabilities.Capabilities.opera(); + caps. + set(capabilities.Capability.PROXY, this.proxy_). + set(capabilities.Capability.LOGGING_PREFS, this.logPrefs_). + set(OPTIONS_CAPABILITY_KEY, this); + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation not intended for general use. + * @return {!Object} The JSON wire protocol representation of this instance. + */ + [Symbols.serialize]() { + var json = { + args: this.args_, + extensions: this.extensions_.map(function(extension) { + if (Buffer.isBuffer(extension)) { + return extension.toString('base64'); + } + return promise.checkedNodeCall( + fs.readFile, extension, 'base64'); + }) + }; + if (this.binary_) { + json.binary = this.binary_; + } + return json; + } +} + + +/** + * Creates a new WebDriver client for Opera. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(capabilities.Capabilities|Options)=} opt_config The configuration + * options. + * @param {remote.DriverService=} opt_service The session to use; will use + * the {@link getDefaultService default service} by default. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_service, opt_flow) { + var service = opt_service || getDefaultService(); + var executor = executors.createExecutor(service.start()); + + var caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || capabilities.Capabilities.opera()); + + // On Linux, the OperaDriver does not look for Opera on the PATH, so we + // must explicitly find it. See: operachromiumdriver #9. + if (process.platform === 'linux') { + var options = Options.fromCapabilities(caps); + if (!options.binary_) { + let exe = io.findInPath('opera', true); + if (!exe) { + throw Error( + 'The opera executable could not be found on the current PATH'); + } + options.setOperaBinaryPath(exe); + } + caps = options.toCapabilities(caps); + } + + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + super(driver.getSession(), executor, driver.controlFlow()); + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.ServiceBuilder = ServiceBuilder; +exports.getDefaultService = getDefaultService; +exports.setDefaultService = setDefaultService; diff --git a/www/node_modules/selenium-webdriver/package.json b/www/node_modules/selenium-webdriver/package.json new file mode 100644 index 0000000..6c227ff --- /dev/null +++ b/www/node_modules/selenium-webdriver/package.json @@ -0,0 +1,94 @@ +{ + "_args": [ + [ + "selenium-webdriver", + "/Users/adamdon/Desktop/studywell/studywell/sw/www" + ] + ], + "_from": "selenium-webdriver@latest", + "_id": "selenium-webdriver@2.52.0", + "_inCache": true, + "_installable": true, + "_location": "/selenium-webdriver", + "_nodeVersion": "0.12.0", + "_npmOperationalInternal": { + "host": "packages-9-west.internal.npmjs.com", + "tmp": "tmp/selenium-webdriver-2.52.0.tgz_1455259913894_0.6562679694034159" + }, + "_npmUser": { + "email": "jmleyba@gmail.com", + "name": "jmleyba" + }, + "_npmVersion": "2.5.1", + "_phantomChildren": {}, + "_requested": { + "name": "selenium-webdriver", + "raw": "selenium-webdriver", + "rawSpec": "", + "scope": null, + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.52.0.tgz", + "_shasum": "d2dcb2f51b48733d6c42829e52767ecee2bf4b6b", + "_shrinkwrap": null, + "_spec": "selenium-webdriver", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www", + "bugs": { + "url": "https://github.com/SeleniumHQ/selenium/issues" + }, + "dependencies": { + "adm-zip": "0.4.4", + "rimraf": "^2.2.8", + "tmp": "0.0.24", + "ws": "^1.0.1", + "xml2js": "0.4.4" + }, + "description": "The official WebDriver JavaScript bindings from the Selenium project", + "devDependencies": { + "express": "^4.11.2", + "mocha": ">= 1.21.x", + "multer": "^0.1.7", + "promises-aplus-tests": "^2.1.0", + "serve-index": "^1.6.1", + "sinon": "^1.17.2" + }, + "directories": {}, + "dist": { + "shasum": "d2dcb2f51b48733d6c42829e52767ecee2bf4b6b", + "tarball": "http://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.52.0.tgz" + }, + "engines": { + "node": ">= 4.2.x" + }, + "homepage": "https://github.com/SeleniumHQ/selenium", + "keywords": [ + "automation", + "selenium", + "testing", + "webdriver", + "webdriverjs" + ], + "license": "Apache-2.0", + "main": "./index", + "maintainers": [ + { + "email": "jmleyba@gmail.com", + "name": "jmleyba" + } + ], + "name": "selenium-webdriver", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/SeleniumHQ/selenium.git" + }, + "scripts": { + "test": "mocha --harmony -t 600000 --recursive test" + }, + "version": "2.52.0" +} diff --git a/www/node_modules/selenium-webdriver/phantomjs.js b/www/node_modules/selenium-webdriver/phantomjs.js new file mode 100644 index 0000000..7853149 --- /dev/null +++ b/www/node_modules/selenium-webdriver/phantomjs.js @@ -0,0 +1,260 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const fs = require('fs'); + +const executors = require('./executors'), + http = require('./http'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + command = require('./lib/command'), + logging = require('./lib/logging'), + promise = require('./lib/promise'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +/** + * Name of the PhantomJS executable. + * @type {string} + * @const + */ +const PHANTOMJS_EXE = + process.platform === 'win32' ? 'phantomjs.exe' : 'phantomjs'; + + +/** + * Capability that designates the location of the PhantomJS executable to use. + * @type {string} + * @const + */ +const BINARY_PATH_CAPABILITY = 'phantomjs.binary.path'; + + +/** + * Capability that designates the CLI arguments to pass to PhantomJS. + * @type {string} + * @const + */ +const CLI_ARGS_CAPABILITY = 'phantomjs.cli.args'; + + +/** + * Default log file to use if one is not specified through CLI args. + * @type {string} + * @const + */ +const DEFAULT_LOG_FILE = 'phantomjsdriver.log'; + + +/** + * Custom command names supported by PhantomJS. + * @enum {string} + */ +const Command = { + EXECUTE_PHANTOM_SCRIPT: 'executePhantomScript' +}; + + +/** + * Finds the PhantomJS executable. + * @param {string=} opt_exe Path to the executable to use. + * @return {string} The located executable. + * @throws {Error} If the executable cannot be found on the PATH, or if the + * provided executable path does not exist. + */ +function findExecutable(opt_exe) { + var exe = opt_exe || io.findInPath(PHANTOMJS_EXE, true); + if (!exe) { + throw Error( + 'The PhantomJS executable could not be found on the current PATH. ' + + 'Please download the latest version from ' + + 'http://phantomjs.org/download.html and ensure it can be found on ' + + 'your PATH. For more information, see ' + + 'https://github.com/ariya/phantomjs/wiki'); + } + if (!fs.existsSync(exe)) { + throw Error('File does not exist: ' + exe); + } + return exe; +} + + +/** + * Maps WebDriver logging level name to those recognised by PhantomJS. + * @const {!Map} + */ +const WEBDRIVER_TO_PHANTOMJS_LEVEL = new Map([ + [logging.Level.ALL.name, 'DEBUG'], + [logging.Level.DEBUG.name, 'DEBUG'], + [logging.Level.INFO.name, 'INFO'], + [logging.Level.WARNING.name, 'WARN'], + [logging.Level.SEVERE.name, 'ERROR']]); + + +/** + * Creates a command executor with support for PhantomJS' custom commands. + * @param {!promise.Promise} url The server's URL. + * @return {!command.Executor} The new command executor. + */ +function createExecutor(url) { + return new executors.DeferredExecutor(url.then(function(url) { + var client = new http.HttpClient(url); + var executor = new http.Executor(client); + + executor.defineCommand( + Command.EXECUTE_PHANTOM_SCRIPT, + 'POST', '/session/:sessionId/phantom/execute'); + + return executor; + })); +} + +/** + * Creates a new WebDriver client for PhantomJS. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {capabilities.Capabilities=} opt_capabilities The desired + * capabilities. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_capabilities, opt_flow) { + var caps = opt_capabilities || capabilities.Capabilities.phantomjs(); + var exe = findExecutable(caps.get(BINARY_PATH_CAPABILITY)); + var args = ['--webdriver-logfile=' + DEFAULT_LOG_FILE]; + + var logPrefs = caps.get(capabilities.Capability.LOGGING_PREFS); + if (logPrefs instanceof logging.Preferences) { + logPrefs = logPrefs.toJSON(); + } + + if (logPrefs && logPrefs[logging.Type.DRIVER]) { + let level = WEBDRIVER_TO_PHANTOMJS_LEVEL.get( + logPrefs[logging.Type.DRIVER]); + if (level) { + args.push('--webdriver-loglevel=' + level); + } + } + + var proxy = caps.get(capabilities.Capability.PROXY); + if (proxy) { + switch (proxy.proxyType) { + case 'manual': + if (proxy.httpProxy) { + args.push( + '--proxy-type=http', + '--proxy=http://' + proxy.httpProxy); + } + break; + case 'pac': + throw Error('PhantomJS does not support Proxy PAC files'); + case 'system': + args.push('--proxy-type=system'); + break; + case 'direct': + args.push('--proxy-type=none'); + break; + } + } + args = args.concat(caps.get(CLI_ARGS_CAPABILITY) || []); + + var port = portprober.findFreePort(); + var service = new remote.DriverService(exe, { + port: port, + args: promise.when(port, function(port) { + args.push('--webdriver=' + port); + return args; + }) + }); + + var executor = createExecutor(service.start()); + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, driver.controlFlow()); + + var boundQuit = this.quit.bind(this); + + /** @override */ + this.quit = function() { + return boundQuit().thenFinally(service.kill.bind(service)); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} + + /** + * Executes a PhantomJS fragment. This method is similar to + * {@link #executeScript}, except it exposes the + * PhantomJS API to the injected + * script. + * + *

      The injected script will execute in the context of PhantomJS's + * {@code page} variable. If a page has not been loaded before calling this + * method, one will be created.

      + * + *

      Be sure to wrap callback definitions in a try/catch block, as failures + * may cause future WebDriver calls to fail.

      + * + *

      Certain callbacks are used by GhostDriver (the PhantomJS WebDriver + * implementation) and overriding these may cause the script to fail. It is + * recommended that you check for existing callbacks before defining your own. + *

      + * + * As with {@link #executeScript}, the injected script may be defined as + * a string for an anonymous function body (e.g. "return 123;"), or as a + * function. If a function is provided, it will be decompiled to its original + * source. Note that injecting functions is provided as a convenience to + * simplify defining complex scripts. Care must be taken that the function + * only references variables that will be defined in the page's scope and + * that the function does not override {@code Function.prototype.toString} + * (overriding toString() will interfere with how the function is + * decompiled. + * + * @param {(string|!Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {!promise.Promise} A promise that resolve to the + * script's return value. + * @template T + */ + executePhantomJS(script, var_args) { + if (typeof script === 'function') { + script = 'return (' + script + ').apply(this, arguments);'; + } + var args = arguments.length > 1 + ? Array.prototype.slice.call(arguments, 1) : []; + return this.schedule( + new command.Command(Command.EXECUTE_PHANTOM_SCRIPT) + .setParameter('script', script) + .setParameter('args', args), + 'Driver.executePhantomJS()'); + } +} + + +// PUBLIC API + +exports.Driver = Driver; diff --git a/www/node_modules/selenium-webdriver/proxy.js b/www/node_modules/selenium-webdriver/proxy.js new file mode 100644 index 0000000..e238cb1 --- /dev/null +++ b/www/node_modules/selenium-webdriver/proxy.js @@ -0,0 +1,103 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines functions for configuring a webdriver proxy: + * + * var webdriver = require('selenium-webdriver'), + * proxy = require('selenium-webdriver/proxy'); + * + * var driver = new webdriver.Builder() + * .withCapabilities(webdriver.Capabilities.chrome()) + * .setProxy(proxy.manual({http: 'host:1234'})) + * .build(); + */ + +'use strict'; + +var util = require('util'); + +var ProxyConfig = require('./lib/capabilities').ProxyConfig; + + + +// PUBLIC API + + +/** + * Configures WebDriver to bypass all browser proxies. + * @return {!ProxyConfig} A new proxy configuration object. + */ +exports.direct = function() { + return {proxyType: 'direct'}; +}; + + +/** + * Manually configures the browser proxy. The following options are + * supported: + * + * - `ftp`: Proxy host to use for FTP requests + * - `http`: Proxy host to use for HTTP requests + * - `https`: Proxy host to use for HTTPS requests + * - `bypass`: A list of hosts requests should directly connect to, + * bypassing any other proxies for that request. May be specified as a + * comma separated string, or a list of strings. + * + * Behavior is undefined for FTP, HTTP, and HTTPS requests if the + * corresponding key is omitted from the configuration options. + * + * @param {{ftp: (string|undefined), + * http: (string|undefined), + * https: (string|undefined), + * bypass: (string|!Array.|undefined)}} options Proxy + * configuration options. + * @return {!ProxyConfig} A new proxy configuration object. + */ +exports.manual = function(options) { + return { + proxyType: 'manual', + ftpProxy: options.ftp, + httpProxy: options.http, + sslProxy: options.https, + noProxy: util.isArray(options.bypass) ? + options.bypass.join(',') : options.bypass + }; +}; + + +/** + * Configures WebDriver to configure the browser proxy using the PAC file at + * the given URL. + * @param {string} url URL for the PAC proxy to use. + * @return {!ProxyConfig} A new proxy configuration object. + */ +exports.pac = function(url) { + return { + proxyType: 'pac', + proxyAutoconfigUrl: url + }; +}; + + +/** + * Configures WebDriver to use the current system's proxy. + * @return {!ProxyConfig} A new proxy configuration object. + */ +exports.system = function() { + return {proxyType: 'system'}; +}; diff --git a/www/node_modules/selenium-webdriver/remote/index.js b/www/node_modules/selenium-webdriver/remote/index.js new file mode 100644 index 0000000..7b5eeeb --- /dev/null +++ b/www/node_modules/selenium-webdriver/remote/index.js @@ -0,0 +1,381 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const AdmZip = require('adm-zip'), + AdmConstants = require('adm-zip/util/constants'), + fs = require('fs'), + path = require('path'), + url = require('url'), + util = require('util'); + +const httpUtil = require('../http/util'), + exec = require('../io/exec'), + cmd = require('../lib/command'), + input = require('../lib/input'), + promise = require('../lib/promise'), + webdriver = require('../lib/webdriver'), + net = require('../net'), + portprober = require('../net/portprober'); + + + +/** + * Configuration options for a DriverService instance. + * + * - `loopback` - Whether the service should only be accessed on this host's + * loopback address. + * - `hostname` - The host name to access the server on. If this option is + * specified, the `loopback` option will be ignored. + * - `port` - The port to start the server on (must be > 0). If the port is + * provided as a promise, the service will wait for the promise to resolve + * before starting. + * - `args` - The arguments to pass to the service. If a promise is provided, + * the service will wait for it to resolve before starting. + * - `path` - The base path on the server for the WebDriver wire protocol + * (e.g. '/wd/hub'). Defaults to '/'. + * - `env` - The environment variables that should be visible to the server + * process. Defaults to inheriting the current process's environment. + * - `stdio` - IO configuration for the spawned server process. For more + * information, refer to the documentation of `child_process.spawn`. + * + * @typedef {{ + * loopback: (boolean|undefined), + * hostname: (string|undefined), + * port: (number|!promise.Promise), + * args: !(Array|promise.Promise>), + * path: (string|undefined|null), + * env: (Object|undefined), + * stdio: (string|!Array| + * undefined) + * }} + */ +var ServiceOptions; + + +/** + * Manages the life and death of a native executable WebDriver server. + * + * It is expected that the driver server implements the + * https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol. + * Furthermore, the managed server should support multiple concurrent sessions, + * so that this class may be reused for multiple clients. + */ +class DriverService { + /** + * @param {string} executable Path to the executable to run. + * @param {!ServiceOptions} options Configuration options for the service. + */ + constructor(executable, options) { + /** @private {string} */ + this.executable_ = executable; + + /** @private {boolean} */ + this.loopbackOnly_ = !!options.loopback; + + /** @private {(string|undefined)} */ + this.hostname_ = options.hostname; + + /** @private {(number|!promise.Promise)} */ + this.port_ = options.port; + + /** + * @private {!(Array|promise.Promise>)} + */ + this.args_ = options.args; + + /** @private {string} */ + this.path_ = options.path || '/'; + + /** @private {!Object} */ + this.env_ = options.env || process.env; + + /** + * @private {(string|!Array)} + */ + this.stdio_ = options.stdio || 'ignore'; + + /** + * A promise for the managed subprocess, or null if the server has not been + * started yet. This promise will never be rejected. + * @private {promise.Deferred} + */ + this.command_ = null; + + /** + * Promise that resolves to the server's address or null if the server has + * not been started. This promise will be rejected if the server terminates + * before it starts accepting WebDriver requests. + * @private {promise.Deferred} + */ + this.address_ = null; + } + + /** + * @return {!promise.Promise} A promise that resolves to + * the server's address. + * @throws {Error} If the server has not been started. + */ + address() { + if (this.address_) { + return this.address_.promise; + } + throw Error('Server has not been started.'); + } + + /** + * Returns whether the underlying process is still running. This does not take + * into account whether the process is in the process of shutting down. + * @return {boolean} Whether the underlying service process is running. + */ + isRunning() { + return !!this.address_; + } + + /** + * Starts the server if it is not already running. + * @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the + * server to start accepting requests. Defaults to 30 seconds. + * @return {!promise.Promise} A promise that will resolve + * to the server's base URL when it has started accepting requests. If the + * timeout expires before the server has started, the promise will be + * rejected. + */ + start(opt_timeoutMs) { + if (this.address_) { + return this.address_.promise; + } + + var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS; + + var self = this; + this.command_ = promise.defer(); + this.address_ = promise.defer(); + this.address_.fulfill(promise.when(this.port_, function(port) { + if (port <= 0) { + throw Error('Port must be > 0: ' + port); + } + return promise.when(self.args_, function(args) { + var command = exec(self.executable_, { + args: args, + env: self.env_, + stdio: self.stdio_ + }); + + self.command_.fulfill(command); + + var earlyTermination = command.result().then(function(result) { + var error = result.code == null ? + Error('Server was killed with ' + result.signal) : + Error('Server terminated early with status ' + result.code); + self.address_.reject(error); + self.address_ = null; + self.command_ = null; + throw error; + }); + + var hostname = self.hostname_; + if (!hostname) { + hostname = !self.loopbackOnly_ && net.getAddress() + || net.getLoopbackAddress(); + } + + var serverUrl = url.format({ + protocol: 'http', + hostname: hostname, + port: port, + pathname: self.path_ + }); + + return new promise.Promise(function(fulfill, reject) { + var ready = httpUtil.waitForServer(serverUrl, timeout) + .then(fulfill, reject); + earlyTermination.thenCatch(function(e) { + ready.cancel(/** @type {Error} */(e)); + reject(Error(e.message)); + }); + }).then(function() { + return serverUrl; + }); + }); + })); + + return this.address_.promise; + } + + /** + * Stops the service if it is not currently running. This function will kill + * the server immediately. To synchronize with the active control flow, use + * {@link #stop()}. + * @return {!promise.Promise} A promise that will be resolved when + * the server has been stopped. + */ + kill() { + if (!this.address_ || !this.command_) { + return promise.fulfilled(); // Not currently running. + } + return this.command_.promise.then(function(command) { + command.kill('SIGTERM'); + }); + } + + /** + * Schedules a task in the current control flow to stop the server if it is + * currently running. + * @return {!promise.Promise} A promise that will be resolved when + * the server has been stopped. + */ + stop() { + return promise.controlFlow().execute(this.kill.bind(this)); + } +} + + +/** + * The default amount of time, in milliseconds, to wait for the server to + * start. + * @const {number} + */ +DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000; + + +/** + * Manages the life and death of the + * + * standalone Selenium server. + */ +class SeleniumServer extends DriverService { + /** + * @param {string} jar Path to the Selenium server jar. + * @param {SeleniumServer.Options=} opt_options Configuration options for the + * server. + * @throws {Error} If the path to the Selenium jar is not specified or if an + * invalid port is specified. + */ + constructor(jar, opt_options) { + if (!jar) { + throw Error('Path to the Selenium jar not specified'); + } + + var options = opt_options || {}; + + if (options.port < 0) { + throw Error('Port must be >= 0: ' + options.port); + } + + var port = options.port || portprober.findFreePort(); + var args = promise.when(options.jvmArgs || [], function(jvmArgs) { + return promise.when(options.args || [], function(args) { + return promise.when(port, function(port) { + return jvmArgs.concat(['-jar', jar, '-port', port]).concat(args); + }); + }); + }); + + super('java', { + loopback: options.loopback, + port: port, + args: args, + path: '/wd/hub', + env: options.env, + stdio: options.stdio + }); + } +} + + +/** + * Options for the Selenium server: + * + * - `loopback` - Whether the server should only be accessed on this host's + * loopback address. + * - `port` - The port to start the server on (must be > 0). If the port is + * provided as a promise, the service will wait for the promise to resolve + * before starting. + * - `args` - The arguments to pass to the service. If a promise is provided, + * the service will wait for it to resolve before starting. + * - `jvmArgs` - The arguments to pass to the JVM. If a promise is provided, + * the service will wait for it to resolve before starting. + * - `env` - The environment variables that should be visible to the server + * process. Defaults to inheriting the current process's environment. + * - `stdio` - IO configuration for the spawned server process. For more + * information, refer to the documentation of `child_process.spawn`. + * + * @typedef {{ + * loopback: (boolean|undefined), + * port: (number|!promise.Promise), + * args: !(Array|promise.Promise>), + * jvmArgs: (!Array| + * !promise.Promise>| + * undefined), + * env: (!Object|undefined), + * stdio: (string|!Array| + * undefined) + * }} + */ +SeleniumServer.Options; + + + +/** + * A {@link webdriver.FileDetector} that may be used when running + * against a remote + * [Selenium server](http://selenium-release.storage.googleapis.com/index.html). + * + * When a file path on the local machine running this script is entered with + * {@link webdriver.WebElement#sendKeys WebElement#sendKeys}, this file detector + * will transfer the specified file to the Selenium server's host; the sendKeys + * command will be updated to use the transfered file's path. + * + * __Note:__ This class depends on a non-standard command supported on the + * Java Selenium server. The file detector will fail if used with a server that + * only supports standard WebDriver commands (such as the ChromeDriver). + * + * @final + */ +class FileDetector extends input.FileDetector { + /** @override */ + handleFile(driver, filePath) { + return promise.checkedNodeCall(fs.stat, filePath).then(function(stats) { + if (stats.isDirectory()) { + throw TypeError('Uploading directories is not supported: ' + filePath); + } + + var zip = new AdmZip(); + zip.addLocalFile(filePath); + zip.getEntries()[0].header.method = AdmConstants.STORED; + + var command = new cmd.Command(cmd.Name.UPLOAD_FILE) + .setParameter('file', zip.toBuffer().toString('base64')); + return driver.schedule(command, + 'remote.FileDetector.handleFile(' + filePath + ')'); + }, function(err) { + if (err.code === 'ENOENT') { + return filePath; // Not a file; return original input. + } + throw err; + }); + } +} + + +// PUBLIC API + +exports.DriverService = DriverService; +exports.FileDetector = FileDetector; +exports.SeleniumServer = SeleniumServer; diff --git a/www/node_modules/selenium-webdriver/safari.js b/www/node_modules/selenium-webdriver/safari.js new file mode 100644 index 0000000..e4b56d6 --- /dev/null +++ b/www/node_modules/selenium-webdriver/safari.js @@ -0,0 +1,547 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a WebDriver client for Safari. Before using this + * module, you must install the + * [latest version](http://selenium-release.storage.googleapis.com/index.html) + * of the SafariDriver browser extension; using Safari for normal browsing is + * not recommended once the extension has been installed. You can, and should, + * disable the extension when the browser is not being used with WebDriver. + */ + +'use strict'; + +const events = require('events'); +const fs = require('fs'); +const http = require('http'); +const path = require('path'); +const url = require('url'); +const util = require('util'); +const ws = require('ws'); + +const io = require('./io'); +const exec = require('./io/exec'); +const isDevMode = require('./lib/devmode'); +const Capabilities = require('./lib/capabilities').Capabilities; +const Capability = require('./lib/capabilities').Capability; +const command = require('./lib/command'); +const promise = require('./lib/promise'); +const Symbols = require('./lib/symbols'); +const webdriver = require('./lib/webdriver'); +const portprober = require('./net/portprober'); + + +/** @const */ +const CLIENT_PATH = isDevMode + ? path.join(__dirname, + '../../../build/javascript/safari-driver/client.js') + : path.join(__dirname, 'lib/safari/client.js'); + + +/** @const */ +const LIBRARY_DIR = (function() { + if (process.platform === 'darwin') { + return path.join('/Users', process.env['USER'], 'Library/Safari'); + } else if (process.platform === 'win32') { + return path.join(process.env['APPDATA'], 'Apple Computer', 'Safari'); + } else { + return '/dev/null'; + } +})(); + + +/** @const */ +const SESSION_DATA_FILES = (function() { + if (process.platform === 'darwin') { + var libraryDir = path.join('/Users', process.env['USER'], 'Library'); + return [ + path.join(libraryDir, 'Caches/com.apple.Safari/Cache.db'), + path.join(libraryDir, 'Cookies/Cookies.binarycookies'), + path.join(libraryDir, 'Cookies/Cookies.plist'), + path.join(libraryDir, 'Safari/History.plist'), + path.join(libraryDir, 'Safari/LastSession.plist'), + path.join(libraryDir, 'Safari/LocalStorage'), + path.join(libraryDir, 'Safari/Databases') + ]; + } else if (process.platform === 'win32') { + var appDataDir = path.join(process.env['APPDATA'], + 'Apple Computer', 'Safari'); + var localDataDir = path.join(process.env['LOCALAPPDATA'], + 'Apple Computer', 'Safari'); + return [ + path.join(appDataDir, 'History.plist'), + path.join(appDataDir, 'LastSession.plist'), + path.join(appDataDir, 'Cookies/Cookies.plist'), + path.join(appDataDir, 'Cookies/Cookies.binarycookies'), + path.join(localDataDir, 'Cache.db'), + path.join(localDataDir, 'Databases'), + path.join(localDataDir, 'LocalStorage') + ]; + } else { + return []; + } +})(); + + +/** @typedef {{port: number, address: string, family: string}} */ +var Host; + + +/** + * A basic HTTP/WebSocket server used to communicate with the SafariDriver + * browser extension. + */ +class Server extends events.EventEmitter { + constructor() { + super(); + var server = http.createServer(function(req, res) { + if (req.url === '/favicon.ico') { + res.writeHead(204); + res.end(); + return; + } + + var query = url.parse(/** @type {string} */(req.url)).query || ''; + if (query.indexOf('url=') == -1) { + var address = server.address() + var host = address.address + ':' + address.port; + res.writeHead( + 302, {'Location': 'http://' + host + '?url=ws://' + host}); + res.end(); + } + + fs.readFile(CLIENT_PATH, 'utf8', function(err, data) { + if (err) { + res.writeHead(500, {'Content-Type': 'text/plain'}); + res.end(err.stack); + return; + } + var content = ''; + res.writeHead(200, { + 'Content-Type': 'text/html; charset=utf-8', + 'Content-Length': Buffer.byteLength(content, 'utf8'), + }); + res.end(content); + }); + }); + + var wss = new ws.Server({server: server}); + wss.on('connection', this.emit.bind(this, 'connection')); + + /** + * Starts the server on a random port. + * @return {!promise.Promise} A promise that will resolve + * with the server host when it has fully started. + */ + this.start = function() { + if (server.address()) { + return promise.fulfilled(server.address()); + } + return portprober.findFreePort('localhost').then(function(port) { + return promise.checkedNodeCall( + server.listen.bind(server, port, 'localhost')); + }).then(function() { + return server.address(); + }); + }; + + /** + * Stops the server. + * @return {!promise.Promise} A promise that will resolve when + * the server has closed all connections. + */ + this.stop = function() { + return new promise.Promise(function(fulfill) { + server.close(fulfill); + }); + }; + + /** + * @return {Host} This server's host info. + * @throws {Error} If the server is not running. + */ + this.address = function() { + var addr = server.address(); + if (!addr) { + throw Error('There server is not running!'); + } + return addr; + }; + } +} + + +/** + * @return {!Promise} A promise that will resolve with the path + * to Safari on the current system. + */ +function findSafariExecutable() { + switch (process.platform) { + case 'darwin': + return Promise.resolve('/Applications/Safari.app/Contents/MacOS/Safari'); + + case 'win32': + var files = [ + process.env['PROGRAMFILES'] || '\\Program Files', + process.env['PROGRAMFILES(X86)'] || '\\Program Files (x86)' + ].map(function(prefix) { + return path.join(prefix, 'Safari\\Safari.exe'); + }); + return io.exists(files[0]).then(function(exists) { + return exists ? files[0] : io.exists(files[1]).then(function(exists) { + if (exists) { + return files[1]; + } + throw Error('Unable to find Safari on the current system'); + }); + }); + + default: + return Promise.reject( + Error('Safari is not supported on the current platform: ' + + process.platform)); + } +} + + +/** + * @param {string} serverUrl The URL to connect to. + * @return {!Promise} A promise for the path to a file that Safari can + * open on start-up to trigger a new connection to the WebSocket server. + */ +function createConnectFile(serverUrl) { + return io.tmpFile({postfix: '.html'}).then(function(f) { + var writeFile = promise.checkedNodeCall(fs.writeFile, + f, + '', + {encoding: 'utf8'}); + return writeFile.then(function() { + return f; + }); + }); +} + + +/** + * Deletes all session data files if so desired. + * @param {!Object} desiredCapabilities . + * @return {!Array} A list of promises for the deleted files. + */ +function cleanSession(desiredCapabilities) { + if (!desiredCapabilities) { + return []; + } + var options = desiredCapabilities[OPTIONS_CAPABILITY_KEY]; + if (!options) { + return []; + } + if (!options['cleanSession']) { + return []; + } + return SESSION_DATA_FILES.map(function(file) { + return io.unlink(file); + }); +} + + +/** @return {string} . */ +function getRandomString() { + let seed = Date.now(); + return Math.floor(Math.random() * seed).toString(36) + + Math.abs(Math.floor(Math.random() * seed) ^ Date.now()).toString(36); +} + + +/** + * @implements {command.Executor} + */ +class CommandExecutor { + constructor() { + this.server_ = null; + + /** @private {ws.WebSocket} */ + this.socket_ = null; + + /** @private {promise.Promise.} */ + this.safari_ = null; + } + + /** @override */ + execute(cmd) { + var self = this; + return new promise.Promise(function(fulfill, reject) { + var safariCommand = JSON.stringify({ + 'origin': 'webdriver', + 'type': 'command', + 'command': { + 'id': getRandomString(), + 'name': cmd.getName(), + 'parameters': cmd.getParameters() + } + }); + + switch (cmd.getName()) { + case command.Name.NEW_SESSION: + self.startSafari_(cmd) + .then(() => self.sendCommand_(safariCommand)) + .then(fulfill, reject); + break; + + case command.Name.QUIT: + self.destroySession_() + .then(() => fulfill({status: 0, value: null}), reject); + break; + + default: + self.sendCommand_(safariCommand).then(fulfill, reject); + break; + } + }); + } + + /** + * @param {string} data . + * @return {!promise.Promise} . + * @private + */ + sendCommand_(data) { + let self = this; + return new promise.Promise(function(fulfill, reject) { + // TODO: support reconnecting with the extension. + if (!self.socket_) { + self.destroySession_().thenFinally(function() { + reject(Error('The connection to the SafariDriver was closed')); + }); + return; + } + + self.socket_.send(data, function(err) { + if (err) { + reject(err); + return; + } + }); + + self.socket_.once('message', function(data) { + try { + data = JSON.parse(data); + } catch (ex) { + reject(Error('Failed to parse driver message: ' + data)); + return; + } + fulfill(data['response']); + }); + }); + } + + /** + * @param {!command.Command} command . + * @private + */ + startSafari_(command) { + this.server_ = new Server(); + + this.safari_ = this.server_.start().then(function(address) { + var tasks = cleanSession( + /** @type {!Object} */( + command.getParameters()['desiredCapabilities'])); + tasks.push( + findSafariExecutable(), + createConnectFile( + 'http://' + address.address + ':' + address.port)); + return promise.all(tasks).then(function(tasks) { + var exe = tasks[tasks.length - 2]; + var html = tasks[tasks.length - 1]; + return exec(exe, {args: [html]}); + }); + }); + + var connected = promise.defer(); + var self = this; + var start = Date.now(); + var timer = setTimeout(function() { + connected.reject(Error( + 'Failed to connect to the SafariDriver after ' + (Date.now() - start) + + ' ms; Have you installed the latest extension from ' + + 'http://selenium-release.storage.googleapis.com/index.html?')); + }, 10 * 1000); + this.server_.once('connection', function(socket) { + clearTimeout(timer); + self.socket_ = socket; + socket.once('close', function() { + self.socket_ = null; + }); + connected.fulfill(); + }); + return connected.promise; + } + + /** + * Destroys the active session by stopping the WebSocket server and killing the + * Safari subprocess. + * @private + */ + destroySession_() { + var tasks = []; + if (this.server_) { + tasks.push(this.server_.stop()); + } + if (this.safari_) { + tasks.push(this.safari_.then(function(safari) { + safari.kill(); + return safari.result(); + })); + } + var self = this; + return promise.all(tasks).thenFinally(function() { + self.server_ = null; + self.socket_ = null; + self.safari_ = null; + }); + } +} + + + +/** @const */ +const OPTIONS_CAPABILITY_KEY = 'safari.options'; + + + +/** + * Configuration options specific to the {@link Driver SafariDriver}. + */ +class Options { + constructor() { + /** @private {Object} */ + this.options_ = null; + + /** @private {./lib/logging.Preferences} */ + this.logPrefs_ = null; + } + + /** + * Extracts the SafariDriver specific options from the given capabilities + * object. + * @param {!Capabilities} capabilities The capabilities object. + * @return {!Options} The ChromeDriver options. + */ + static fromCapabilities(capabilities) { + var options = new Options(); + + var o = capabilities.get(OPTIONS_CAPABILITY_KEY); + if (o instanceof Options) { + options = o; + } else if (o) { + options.setCleanSession(o.cleanSession); + } + + if (capabilities.has(Capability.LOGGING_PREFS)) { + options.setLoggingPrefs(capabilities.get(Capability.LOGGING_PREFS)); + } + + return options; + } + + /** + * Sets whether to force Safari to start with a clean session. Enabling this + * option will cause all global browser data to be deleted. + * @param {boolean} clean Whether to make sure the session has no cookies, + * cache entries, local storage, or databases. + * @return {!Options} A self reference. + */ + setCleanSession(clean) { + if (!this.options_) { + this.options_ = {}; + } + this.options_['cleanSession'] = clean; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {!./lib/logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPrefs(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Converts this options instance to a {@link Capabilities} object. + * @param {Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || Capabilities.safari(); + if (this.logPrefs_) { + caps.set(Capability.LOGGING_PREFS, this.logPrefs_); + } + if (this.options_) { + caps.set(OPTIONS_CAPABILITY_KEY, this); + } + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation detail not intended for general use. + * @return {!Object} The JSON wire protocol representation of this + * instance. + */ + [Symbols.serialize]() { + return this.options_ || {}; + } +} + + +/** + * A WebDriver client for Safari. This class should never be instantiated + * directly; instead, use the {@linkplain ./builder.Builder Builder}: + * + * var driver = new Builder() + * .forBrowser('safari') + * .build(); + * + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(Options|Capabilities)=} opt_config The configuration + * options for the new session. + * @param {promise.ControlFlow=} opt_flow The control flow to create + * the driver under. + */ + constructor(opt_config, opt_flow) { + var executor = new CommandExecutor(); + var caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || Capabilities.safari()); + + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + super(driver.getSession(), executor, driver.controlFlow()); + } +} + + +// Public API + + +exports.Driver = Driver; +exports.Options = Options; diff --git a/www/node_modules/selenium-webdriver/test/actions_test.js b/www/node_modules/selenium-webdriver/test/actions_test.js new file mode 100644 index 0000000..8d6794a --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/actions_test.js @@ -0,0 +1,53 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var Browser = require('..').Browser, + By = require('..').By, + until = require('..').until, + test = require('../lib/test'), + fileServer = require('../lib/test/fileserver'); + + +test.suite(function(env) { + var driver; + test.beforeEach(function() { driver = env.builder().build(); }); + test.afterEach(function() { driver.quit(); }); + + test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.SAFARI)). + describe('WebDriver.actions()', function() { + + test.it('can move to and click element in an iframe', function() { + driver.get(fileServer.whereIs('click_tests/click_in_iframe.html')); + + driver.wait(until.elementLocated(By.id('ifr')), 5000) + .then(function(frame) { + driver.switchTo().frame(frame); + }); + + var link = driver.findElement(By.id('link')); + driver.actions() + .mouseMove(link) + .click() + .perform(); + + driver.wait(until.titleIs('Submitted Successfully!'), 5000); + }); + + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/chrome/options_test.js b/www/node_modules/selenium-webdriver/test/chrome/options_test.js new file mode 100644 index 0000000..28c4faa --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/chrome/options_test.js @@ -0,0 +1,227 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'); + +var webdriver = require('../..'), + chrome = require('../../chrome'), + symbols = require('../../lib/symbols'), + proxy = require('../../proxy'), + assert = require('../../testing/assert'); + +var test = require('../../lib/test'); + + +describe('chrome.Options', function() { + describe('fromCapabilities', function() { + + it('should return a new Options instance if none were defined', + function() { + var options = chrome.Options.fromCapabilities( + new webdriver.Capabilities()); + assert(options).instanceOf(chrome.Options); + }); + + it('should return options instance if present', function() { + var options = new chrome.Options(); + var caps = options.toCapabilities(); + assert(caps).instanceOf(webdriver.Capabilities); + assert(chrome.Options.fromCapabilities(caps)).equalTo(options); + }); + + it('should rebuild options from wire representation', function() { + var expectedExtension = fs.readFileSync(__filename, 'base64'); + var caps = webdriver.Capabilities.chrome().set('chromeOptions', { + args: ['a', 'b'], + extensions: [__filename], + binary: 'binaryPath', + logPath: 'logFilePath', + detach: true, + localState: 'localStateValue', + prefs: 'prefsValue' + }); + + var options = chrome.Options.fromCapabilities(caps); + var json = options[symbols.serialize](); + + assert(json.args.length).equalTo(2); + assert(json.args[0]).equalTo('a'); + assert(json.args[1]).equalTo('b'); + assert(json.extensions.length).equalTo(1); + assert(json.extensions[0]).equalTo(expectedExtension); + assert(json.binary).equalTo('binaryPath'); + assert(json.logPath).equalTo('logFilePath'); + assert(json.detach).equalTo(true); + assert(json.localState).equalTo('localStateValue'); + assert(json.prefs).equalTo('prefsValue'); + }); + + it('should rebuild options from incomplete wire representation', + function() { + var caps = webdriver.Capabilities.chrome().set('chromeOptions', { + logPath: 'logFilePath' + }); + + var options = chrome.Options.fromCapabilities(caps); + var json = options[symbols.serialize](); + assert(json.args).isUndefined(); + assert(json.binary).isUndefined(); + assert(json.detach).isUndefined(); + assert(json.excludeSwitches).isUndefined(); + assert(json.extensions).isUndefined(); + assert(json.localState).isUndefined(); + assert(json.logPath).equalTo('logFilePath'); + assert(json.prefs).isUndefined(); + assert(json.minidumpPath).isUndefined(); + assert(json.mobileEmulation).isUndefined(); + assert(json.perfLoggingPrefs).isUndefined(); + }); + + it('should extract supported WebDriver capabilities', function() { + var proxyPrefs = proxy.direct(); + var logPrefs = {}; + var caps = webdriver.Capabilities.chrome(). + set(webdriver.Capability.PROXY, proxyPrefs). + set(webdriver.Capability.LOGGING_PREFS, logPrefs); + + var options = chrome.Options.fromCapabilities(caps); + assert(options.proxy_).equalTo(proxyPrefs); + assert(options.logPrefs_).equalTo(logPrefs); + }); + }); + + describe('addArguments', function() { + it('takes var_args', function() { + var options = new chrome.Options(); + assert(options[symbols.serialize]().args).isUndefined(); + + options.addArguments('a', 'b'); + var json = options[symbols.serialize](); + assert(json.args.length).equalTo(2); + assert(json.args[0]).equalTo('a'); + assert(json.args[1]).equalTo('b'); + }); + + it('flattens input arrays', function() { + var options = new chrome.Options(); + assert(options[symbols.serialize]().args).isUndefined(); + + options.addArguments(['a', 'b'], 'c', [1, 2], 3); + var json = options[symbols.serialize](); + assert(json.args.length).equalTo(6); + assert(json.args[0]).equalTo('a'); + assert(json.args[1]).equalTo('b'); + assert(json.args[2]).equalTo('c'); + assert(json.args[3]).equalTo(1); + assert(json.args[4]).equalTo(2); + assert(json.args[5]).equalTo(3); + }); + }); + + describe('addExtensions', function() { + it('takes var_args', function() { + var options = new chrome.Options(); + assert(options.extensions_.length).equalTo(0); + + options.addExtensions('a', 'b'); + assert(options.extensions_.length).equalTo(2); + assert(options.extensions_[0]).equalTo('a'); + assert(options.extensions_[1]).equalTo('b'); + }); + + it('flattens input arrays', function() { + var options = new chrome.Options(); + assert(options.extensions_.length).equalTo(0); + + options.addExtensions(['a', 'b'], 'c', [1, 2], 3); + assert(options.extensions_.length).equalTo(6); + assert(options.extensions_[0]).equalTo('a'); + assert(options.extensions_[1]).equalTo('b'); + assert(options.extensions_[2]).equalTo('c'); + assert(options.extensions_[3]).equalTo(1); + assert(options.extensions_[4]).equalTo(2); + assert(options.extensions_[5]).equalTo(3); + }); + }); + + describe('serialize', function() { + it('base64 encodes extensions', function() { + var expected = fs.readFileSync(__filename, 'base64'); + var wire = new chrome.Options() + .addExtensions(__filename) + [symbols.serialize](); + assert(wire.extensions.length).equalTo(1); + assert(wire.extensions[0]).equalTo(expected); + }); + }); + + describe('toCapabilities', function() { + it('returns a new capabilities object if one is not provided', function() { + var options = new chrome.Options(); + var caps = options.toCapabilities(); + assert(caps.get('browserName')).equalTo('chrome'); + assert(caps.get('chromeOptions')).equalTo(options); + }); + + it('adds to input capabilities object', function() { + var caps = webdriver.Capabilities.firefox(); + var options = new chrome.Options(); + assert(options.toCapabilities(caps)).equalTo(caps); + assert(caps.get('browserName')).equalTo('firefox'); + assert(caps.get('chromeOptions')).equalTo(options); + }); + + it('sets generic driver capabilities', function() { + var proxyPrefs = {}; + var loggingPrefs = {}; + var options = new chrome.Options(). + setLoggingPrefs(loggingPrefs). + setProxy(proxyPrefs); + + var caps = options.toCapabilities(); + assert(caps.get('proxy')).equalTo(proxyPrefs); + assert(caps.get('loggingPrefs')).equalTo(loggingPrefs); + }); + }); +}); + +test.suite(function(env) { + var driver; + + test.afterEach(function() { + driver.quit(); + }); + + describe('Chrome options', function() { + test.it('can start Chrome with custom args', function() { + var options = new chrome.Options(). + addArguments('user-agent=foo;bar'); + + driver = env.builder(). + setChromeOptions(options). + build(); + + driver.get(test.Pages.ajaxyPage); + + var userAgent = driver.executeScript( + 'return window.navigator.userAgent'); + assert(userAgent).equalTo('foo;bar'); + }); + }); +}, {browsers: ['chrome']}); diff --git a/www/node_modules/selenium-webdriver/test/chrome/service_test.js b/www/node_modules/selenium-webdriver/test/chrome/service_test.js new file mode 100644 index 0000000..0e0209e --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/chrome/service_test.js @@ -0,0 +1,45 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var webdriver = require('../..'), + chrome = require('../../chrome'), + assert = require('../../testing/assert'); + +var test = require('../../lib/test'); + + +test.suite(function(env) { + describe('chromedriver', function() { + var service; + test.afterEach(function() { + if (service) { + return service.kill(); + } + }); + + test.it('can be started on a custom path', function() { + service = new chrome.ServiceBuilder() + .setUrlBasePath('/foo/bar/baz') + .build(); + return service.start().then(function(url) { + assert(url).endsWith('/foo/bar/baz'); + }); + }); + }); +}, {browsers: ['chrome']}); \ No newline at end of file diff --git a/www/node_modules/selenium-webdriver/test/cookie_test.js b/www/node_modules/selenium-webdriver/test/cookie_test.js new file mode 100644 index 0000000..fe4c839 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/cookie_test.js @@ -0,0 +1,206 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + url = require('url'); + +var test = require('../lib/test'), + fileserver = require('../lib/test/fileserver'), + Browser = require('..').Browser, + Pages = test.Pages; + + +test.suite(function(env) { + var driver; + + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + test.ignore(env.browsers(Browser.SAFARI)). // Cookie handling is broken. + describe('Cookie Management;', function() { + + test.beforeEach(function() { + driver.get(fileserver.Pages.ajaxyPage); + driver.manage().deleteAllCookies(); + assertHasCookies(); + }); + + test.it('can add new cookies', function() { + var cookie = createCookieSpec(); + + driver.manage().addCookie(cookie.name, cookie.value); + driver.manage().getCookie(cookie.name).then(function(actual) { + assert.equal(actual.value, cookie.value); + }); + }); + + test.it('can get all cookies', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + + driver.manage().addCookie(cookie1.name, cookie1.value); + driver.manage().addCookie(cookie2.name, cookie2.value); + + assertHasCookies(cookie1, cookie2); + }); + + test.ignore(env.browsers(Browser.IE)). + it('only returns cookies visible to the current page', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + + driver.manage().addCookie(cookie1.name, cookie1.value); + + var pageUrl = fileserver.whereIs('page/1'); + driver.get(pageUrl); + driver.manage().addCookie( + cookie2.name, cookie2.value, url.parse(pageUrl).pathname); + assertHasCookies(cookie1, cookie2); + + driver.get(fileserver.Pages.ajaxyPage); + assertHasCookies(cookie1); + + driver.get(pageUrl); + assertHasCookies(cookie1, cookie2); + }); + + test.it('can delete all cookies', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + + driver.executeScript( + 'document.cookie = arguments[0] + "=" + arguments[1];' + + 'document.cookie = arguments[2] + "=" + arguments[3];', + cookie1.name, cookie1.value, cookie2.name, cookie2.value); + assertHasCookies(cookie1, cookie2); + + driver.manage().deleteAllCookies(); + assertHasCookies(); + }); + + test.it('can delete cookies by name', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + + driver.executeScript( + 'document.cookie = arguments[0] + "=" + arguments[1];' + + 'document.cookie = arguments[2] + "=" + arguments[3];', + cookie1.name, cookie1.value, cookie2.name, cookie2.value); + assertHasCookies(cookie1, cookie2); + + driver.manage().deleteCookie(cookie1.name); + assertHasCookies(cookie2); + }); + + test.it('should only delete cookie with exact name', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + var cookie3 = {name: cookie1.name + 'xx', value: cookie1.value}; + + driver.executeScript( + 'document.cookie = arguments[0] + "=" + arguments[1];' + + 'document.cookie = arguments[2] + "=" + arguments[3];' + + 'document.cookie = arguments[4] + "=" + arguments[5];', + cookie1.name, cookie1.value, cookie2.name, cookie2.value, + cookie3.name, cookie3.value); + assertHasCookies(cookie1, cookie2, cookie3); + + driver.manage().deleteCookie(cookie1.name); + assertHasCookies(cookie2, cookie3); + }); + + test.it('can delete cookies set higher in the path', function() { + var cookie = createCookieSpec(); + var childUrl = fileserver.whereIs('child/childPage.html'); + var grandchildUrl = fileserver.whereIs( + 'child/grandchild/grandchildPage.html'); + + driver.get(childUrl); + driver.manage().addCookie(cookie.name, cookie.value); + assertHasCookies(cookie); + + driver.get(grandchildUrl); + assertHasCookies(cookie); + + driver.manage().deleteCookie(cookie.name); + assertHasCookies(); + + driver.get(childUrl); + assertHasCookies(); + }); + + test.ignore(env.browsers(Browser.ANDROID, Browser.FIREFOX, Browser.IE)). + it('should retain cookie expiry', function() { + var cookie = createCookieSpec(); + var expirationDelay = 5 * 1000; + var futureTime = Date.now() + expirationDelay; + + driver.manage().addCookie( + cookie.name, cookie.value, null, null, false, futureTime); + driver.manage().getCookie(cookie.name).then(function(actual) { + assert.equal(actual.value, cookie.value); + // expiry times are exchanged in seconds since January 1, 1970 UTC. + assert.equal(actual.expiry, Math.floor(futureTime / 1000)); + }); + + driver.sleep(expirationDelay); + assertHasCookies(); + }); + }); + + function createCookieSpec() { + return { + name: getRandomString(), + value: getRandomString() + }; + } + + function buildCookieMap(cookies) { + var map = {}; + cookies.forEach(function(cookie) { + map[cookie.name] = cookie; + }); + return map; + } + + function assertHasCookies(var_args) { + var expected = Array.prototype.slice.call(arguments, 0); + driver.manage().getCookies().then(function(cookies) { + assert.equal(cookies.length, expected.length, + 'Wrong # of cookies.' + + '\n Expected: ' + JSON.stringify(expected) + + '\n Was : ' + JSON.stringify(cookies)); + + var map = buildCookieMap(cookies); + for (var i = 0; i < expected.length; ++i) { + assert.equal(expected[i].value, map[expected[i].name].value); + } + }); + } + + function getRandomString() { + var x = 1234567890; + return Math.floor(Math.random() * x).toString(36); + } +}); diff --git a/www/node_modules/selenium-webdriver/test/element_finding_test.js b/www/node_modules/selenium-webdriver/test/element_finding_test.js new file mode 100644 index 0000000..3d56b54 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/element_finding_test.js @@ -0,0 +1,392 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fail = require('assert').fail; + +var Browser = require('..').Browser, + By = require('..').By, + error = require('..').error, + until = require('..').until, + promise = require('../lib/promise'), + test = require('../lib/test'), + assert = require('../testing/assert'), + Pages = test.Pages; + + +test.suite(function(env) { + var browsers = env.browsers; + + var driver; + + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + describe('finding elements', function() { + test.it( + 'should work after loading multiple pages in a row', + function() { + driver.get(Pages.formPage); + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.linkText('click me')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + describe('By.id()', function() { + test.it('should work', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.id('linkId')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + test.it('should fail if ID not present on page', function() { + driver.get(Pages.formPage); + driver.findElement(By.id('nonExistantButton')). + then(fail, function(e) { + assert(e).instanceOf(error.NoSuchElementError); + }); + }); + + test.it( + 'should find multiple elements by ID even though that is ' + + 'malformed HTML', + function() { + driver.get(Pages.nestedPage); + driver.findElements(By.id('2')).then(function(elements) { + assert(elements.length).equalTo(8); + }); + }); + }); + + describe('By.linkText()', function() { + test.it('should be able to click on link identified by text', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.linkText('click me')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + test.it( + 'should be able to find elements by partial link text', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.partialLinkText('ick me')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + test.it('should work when link text contains equals sign', function() { + driver.get(Pages.xhtmlTestPage); + var id = driver.findElement(By.linkText('Link=equalssign')). + getAttribute('id'); + assert(id).equalTo('linkWithEqualsSign'); + }); + + test.it('matches by partial text when containing equals sign', + function() { + driver.get(Pages.xhtmlTestPage); + var id = driver.findElement(By.partialLinkText('Link=')). + getAttribute('id'); + assert(id).equalTo('linkWithEqualsSign'); + }); + + test.it('works when searching for multiple and text contains =', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.linkText('Link=equalssign')). + then(function(elements) { + assert(elements.length).equalTo(1); + return elements[0].getAttribute('id'); + }). + then(function(id) { + assert(id).equalTo('linkWithEqualsSign'); + }); + }); + + test.it( + 'works when searching for multiple with partial text containing =', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.partialLinkText('Link=')). + then(function(elements) { + assert(elements.length).equalTo(1); + return elements[0].getAttribute('id'); + }). + then(function(id) { + assert(id).equalTo('linkWithEqualsSign'); + }); + }); + + test.it('should be able to find multiple exact matches', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.linkText('click me')). + then(function(elements) { + assert(elements.length).equalTo(2); + }); + }); + + test.it('should be able to find multiple partial matches', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.partialLinkText('ick me')). + then(function(elements) { + assert(elements.length).equalTo(2); + }); + }); + + test.it('works on XHTML pages', function() { + driver.get(test.whereIs('actualXhtmlPage.xhtml')); + + var el = driver.findElement(By.linkText('Foo')); + assert(el.getText()).equalTo('Foo'); + }); + }); + + describe('By.name()', function() { + test.it('should work', function() { + driver.get(Pages.formPage); + + var el = driver.findElement(By.name('checky')); + assert(el.getAttribute('value')).equalTo('furrfu'); + }); + + test.it('should find multiple elements with same name', function() { + driver.get(Pages.nestedPage); + driver.findElements(By.name('checky')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + }); + + test.it( + 'should be able to find elements that do not support name property', + function() { + driver.get(Pages.nestedPage); + driver.findElement(By.name('div1')); + // Pass if this does not return an error. + }); + + test.it('shoudl be able to find hidden elements by name', function() { + driver.get(Pages.formPage); + driver.findElement(By.name('hidden')); + // Pass if this does not return an error. + }); + }); + + describe('By.className()', function() { + test.it('should work', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('extraDiv')); + assert(el.getText()).startsWith('Another div starts here.'); + }); + + test.it('should work when name is first name among many', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('nameA')); + assert(el.getText()).equalTo('An H2 title'); + }); + + test.it('should work when name is last name among many', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('nameC')); + assert(el.getText()).equalTo('An H2 title'); + }); + + test.it('should work when name is middle of many', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('nameBnoise')); + assert(el.getText()).equalTo('An H2 title'); + }); + + test.it('should work when name surrounded by whitespace', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('spaceAround')); + assert(el.getText()).equalTo('Spaced out'); + }); + + test.it('should fail if queried name only partially matches', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.className('nameB')). + then(fail, function(e) { + assert(e).instanceOf(error.NoSuchElementError); + }); + }); + + test.it('should be able to find multiple matches', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.className('nameC')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + }); + + test.it('permits compound class names', function() { + return driver.get(Pages.xhtmlTestPage) + .then(() => driver.findElement(By.className('nameA nameC'))) + .then(el => el.getText()) + .then(text => assert(text).equalTo('An H2 title')); + }); + }); + + describe('By.xpath()', function() { + test.it('should work with multiple matches', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.xpath('//div')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + }); + + test.it('should work for selectors using contains keyword', function() { + driver.get(Pages.nestedPage); + driver.findElement(By.xpath('//a[contains(., "hello world")]')); + // Pass if no error. + }); + }); + + describe('By.tagName()', function() { + test.it('works', function() { + driver.get(Pages.formPage); + + var el = driver.findElement(By.tagName('input')); + assert(el.getTagName()).equalTo('input'); + }); + + test.it('can find multiple elements', function() { + driver.get(Pages.formPage); + driver.findElements(By.tagName('input')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + }); + }); + + describe('By.css()', function() { + test.it('works', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.css('div.content')); + // Pass if no error. + }); + + test.it('can find multiple elements', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.css('p')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + // Pass if no error. + }); + + test.it( + 'should find first matching element when searching by ' + + 'compound CSS selector', + function() { + driver.get(Pages.xhtmlTestPage); + var el = driver.findElement(By.css('div.extraDiv, div.content')); + assert(el.getAttribute('class')).equalTo('content'); + }); + + test.it('should be able to find multiple elements by compound selector', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.css('div.extraDiv, div.content')). + then(function(elements) { + assertClassIs(elements[0], 'content'); + assertClassIs(elements[1], 'extraDiv'); + + function assertClassIs(el, expected) { + assert(el.getAttribute('class')).equalTo(expected); + } + }); + }); + + // IE only supports short version option[selected]. + test.ignore(browsers(Browser.IE)). + it('should be able to find element by boolean attribute', function() { + driver.get(test.whereIs( + 'locators_tests/boolean_attribute_selected.html')); + + var el = driver.findElement(By.css('option[selected="selected"]')); + assert(el.getAttribute('value')).equalTo('two'); + }); + + test.it( + 'should be able to find element with short ' + + 'boolean attribute selector', + function() { + driver.get(test.whereIs( + 'locators_tests/boolean_attribute_selected.html')); + + var el = driver.findElement(By.css('option[selected]')); + assert(el.getAttribute('value')).equalTo('two'); + }); + + test.it( + 'should be able to find element with short boolean attribute ' + + 'selector on HTML4 page', + function() { + driver.get(test.whereIs( + 'locators_tests/boolean_attribute_selected_html4.html')); + + var el = driver.findElement(By.css('option[selected]')); + assert(el.getAttribute('value')).equalTo('two'); + }); + }); + + describe('by custom locator', function() { + test.it('handles single element result', function() { + driver.get(Pages.javascriptPage); + + let link = driver.findElement(function(driver) { + let links = driver.findElements(By.tagName('a')); + return promise.filter(links, function(link) { + return link.getAttribute('id').then(id => id === 'updatediv'); + }).then(links => links[0]); + }); + + assert(link.getText()).isEqualTo('Update a div'); + }); + + test.it('uses first element if locator resolves to list', function() { + driver.get(Pages.javascriptPage); + + let link = driver.findElement(function() { + return driver.findElements(By.tagName('a')); + }); + + assert(link.getText()).isEqualTo('Change the page title!'); + }); + + test.it('fails if locator returns non-webelement value', function() { + driver.get(Pages.javascriptPage); + + let link = driver.findElement(function() { + return driver.getTitle(); + }); + + return link.then( + () => fail('Should have failed'), + (e) => assert(e).instanceOf(TypeError)); + }); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/error_test.js b/www/node_modules/selenium-webdriver/test/error_test.js new file mode 100644 index 0000000..c80423e --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/error_test.js @@ -0,0 +1,163 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +describe('error', function() { + let assert = require('assert'); + let error = require('../error'); + + describe('checkResponse', function() { + it('defaults to WebDriverError if type is unrecognized', function() { + assert.throws( + () => error.checkResponse({error: 'foo', message: 'hi there'}), + (e) => { + assert.equal(e.constructor, error.WebDriverError); + assert.equal(e.code, error.ErrorCode.UNKNOWN_ERROR); + return true; + }); + }); + + it('does not throw if error property is not a string', function() { + let resp = {error: 123, message: 'abc123'}; + let out = error.checkResponse(resp); + assert.strictEqual(out, resp); + }); + + test('unknown error', error.WebDriverError); + test('element not selectable', error.ElementNotSelectableError); + test('element not visible', error.ElementNotVisibleError); + test('invalid argument', error.InvalidArgumentError); + test('invalid cookie domain', error.InvalidCookieDomainError); + test('invalid element coordinates', error.InvalidElementCoordinatesError); + test('invalid element state', error.InvalidElementStateError); + test('invalid selector', error.InvalidSelectorError); + test('invalid session id', error.InvalidSessionIdError); + test('javascript error', error.JavascriptError); + test('move target out of bounds', error.MoveTargetOutOfBoundsError); + test('no such alert', error.NoSuchAlertError); + test('no such element', error.NoSuchElementError); + test('no such frame', error.NoSuchFrameError); + test('no such window', error.NoSuchWindowError); + test('script timeout', error.ScriptTimeoutError); + test('session not created', error.SessionNotCreatedError); + test('stale element reference', error.StaleElementReferenceError); + test('timeout', error.TimeoutError); + test('unable to set cookie', error.UnableToSetCookieError); + test('unable to capture screen', error.UnableToCaptureScreenError); + test('unexpected alert open', error.UnexpectedAlertOpenError); + test('unknown command', error.UnknownCommandError); + test('unknown method', error.UnknownMethodError); + test('unsupported operation', error.UnsupportedOperationError); + + function test(status, expectedType) { + it(`"${status}" => ${expectedType.name}`, function() { + assert.throws( + () => error.checkResponse({error: status, message: 'oops'}), + (e) => { + assert.equal(expectedType, e.constructor); + assert.equal(e.message, 'oops'); + return true; + }); + }); + } + }); + + describe('checkLegacyResponse', function() { + it('does not throw for success', function() { + let resp = {status: error.ErrorCode.SUCCESS}; + assert.strictEqual(resp, error.checkLegacyResponse(resp)); + }); + + test('NO_SUCH_ELEMENT', error.NoSuchElementError); + test('NO_SUCH_FRAME', error.NoSuchFrameError); + test('UNKNOWN_COMMAND', error.UnsupportedOperationError); + test('UNSUPPORTED_OPERATION', error.UnsupportedOperationError); + test('STALE_ELEMENT_REFERENCE', error.StaleElementReferenceError); + test('ELEMENT_NOT_VISIBLE', error.ElementNotVisibleError); + test('INVALID_ELEMENT_STATE', error.InvalidElementStateError); + test('UNKNOWN_ERROR', error.WebDriverError); + test('ELEMENT_NOT_SELECTABLE', error.ElementNotSelectableError); + test('JAVASCRIPT_ERROR', error.JavascriptError); + test('XPATH_LOOKUP_ERROR', error.InvalidSelectorError); + test('TIMEOUT', error.TimeoutError); + test('NO_SUCH_WINDOW', error.NoSuchWindowError); + test('INVALID_COOKIE_DOMAIN', error.InvalidCookieDomainError); + test('UNABLE_TO_SET_COOKIE', error.UnableToSetCookieError); + test('UNEXPECTED_ALERT_OPEN', error.UnexpectedAlertOpenError); + test('NO_SUCH_ALERT', error.NoSuchAlertError); + test('SCRIPT_TIMEOUT', error.ScriptTimeoutError); + test('INVALID_ELEMENT_COORDINATES', error.InvalidElementCoordinatesError); + test('INVALID_SELECTOR_ERROR', error.InvalidSelectorError); + test('SESSION_NOT_CREATED', error.SessionNotCreatedError); + test('MOVE_TARGET_OUT_OF_BOUNDS', error.MoveTargetOutOfBoundsError); + test('INVALID_XPATH_SELECTOR', error.InvalidSelectorError); + test('INVALID_XPATH_SELECTOR_RETURN_TYPE', error.InvalidSelectorError); + test('METHOD_NOT_ALLOWED', error.UnsupportedOperationError); + + function test(codeKey, expectedType) { + it(`${codeKey} => ${expectedType.name}`, function() { + let code = error.ErrorCode[codeKey]; + let resp = {status: code, value: {message: 'hi'}}; + assert.throws( + () => error.checkLegacyResponse(resp), + (e) => { + assert.equal(expectedType, e.constructor); + assert.equal(e.message, 'hi'); + return true; + }); + }); + } + }); + + describe('WebDriverError types provide a legacy error code', function() { + check(error.WebDriverError, 'UNKNOWN_ERROR'); + check(error.ElementNotSelectableError, 'ELEMENT_NOT_SELECTABLE'); + check(error.ElementNotVisibleError, 'ELEMENT_NOT_VISIBLE'); + check(error.InvalidArgumentError, 'UNKNOWN_ERROR'); + check(error.InvalidCookieDomainError, 'INVALID_COOKIE_DOMAIN'); + check(error.InvalidElementCoordinatesError, 'INVALID_ELEMENT_COORDINATES'); + check(error.InvalidElementStateError, 'INVALID_ELEMENT_STATE'); + check(error.InvalidSelectorError, 'INVALID_SELECTOR_ERROR'); + check(error.InvalidSessionIdError, 'UNKNOWN_ERROR'); + check(error.JavascriptError, 'JAVASCRIPT_ERROR'); + check(error.MoveTargetOutOfBoundsError, 'MOVE_TARGET_OUT_OF_BOUNDS'); + check(error.NoSuchAlertError, 'NO_SUCH_ALERT'); + check(error.NoSuchElementError, 'NO_SUCH_ELEMENT'); + check(error.NoSuchFrameError, 'NO_SUCH_FRAME'); + check(error.NoSuchWindowError, 'NO_SUCH_WINDOW'); + check(error.ScriptTimeoutError, 'SCRIPT_TIMEOUT'); + check(error.SessionNotCreatedError, 'SESSION_NOT_CREATED'); + check(error.StaleElementReferenceError, 'STALE_ELEMENT_REFERENCE'); + check(error.TimeoutError, 'TIMEOUT'); + check(error.UnableToSetCookieError, 'UNABLE_TO_SET_COOKIE'); + check(error.UnableToCaptureScreenError, 'UNKNOWN_ERROR'); + check(error.UnexpectedAlertOpenError, 'UNEXPECTED_ALERT_OPEN'); + check(error.UnknownCommandError, 'UNKNOWN_COMMAND'); + check(error.UnknownMethodError, 'UNSUPPORTED_OPERATION'); + check(error.UnsupportedOperationError, 'UNSUPPORTED_OPERATION'); + + function check(ctor, codeKey) { + it(`${ctor.name} => ${codeKey}`, function() { + let code = error.ErrorCode[codeKey]; + let e = new ctor(); + assert.equal(typeof e.code, 'number'); + assert.equal(e.code, code); + }); + } + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/execute_script_test.js b/www/node_modules/selenium-webdriver/test/execute_script_test.js new file mode 100644 index 0000000..8d3b099 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/execute_script_test.js @@ -0,0 +1,322 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var path = require('path'); + +var webdriver = require('..'), + Browser = webdriver.Browser, + By = webdriver.By, + assert = require('../testing/assert'), + test = require('../lib/test'); + + +test.suite(function(env) { + var driver; + + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + test.beforeEach(function() { + driver.get(test.Pages.echoPage); + }); + + describe('executeScript;', function() { + var shouldHaveFailed = new Error('Should have failed'); + + test.it('fails if script throws', function() { + execute('throw new Error("boom")') + .then(function() { throw shoudlHaveFailed; }) + .thenCatch(function(e) { + // The java WebDriver server adds a bunch of crap to error messages. + // Error message will just be "JavaScript error" for IE. + assert(e.message).matches(/.*(JavaScript error|boom).*/); + }); + }); + + test.it('fails if script does not parse', function() { + execute('throw function\\*') + .then(function() { throw shoudlHaveFailed; }) + .thenCatch(function(e) { + assert(e).notEqualTo(shouldHaveFailed); + }); + }); + + describe('scripts;', function() { + test.it('do not pollute the global scope', function() { + execute('var x = 1;'); + assert(execute('return typeof x;')).equalTo('undefined'); + }); + + test.it('can set global variables', function() { + execute('window.x = 1234;'); + assert(execute('return x;')).equalTo(1234); + }); + + test.it('may be defined as a function expression', function() { + assert(execute(function() { + return 1234 + 'abc'; + })).equalTo('1234abc'); + }); + }); + + describe('return values;', function() { + + test.it('returns undefined as null', function() { + assert(execute('var x; return x;')).isNull(); + }); + + test.it('can return null', function() { + assert(execute('return null;')).isNull(); + }); + + test.it('can return numbers', function() { + assert(execute('return 1234')).equalTo(1234); + assert(execute('return 3.1456')).equalTo(3.1456); + }); + + test.it('can return strings', function() { + assert(execute('return "hello"')).equalTo('hello'); + }); + + test.it('can return booleans', function() { + assert(execute('return true')).equalTo(true); + assert(execute('return false')).equalTo(false); + }); + + test.it('can return an array of primitives', function() { + execute('var x; return [1, false, null, 3.14, x]') + .then(verifyJson([1, false, null, 3.14, null])); + }); + + test.it('can return nested arrays', function() { + execute('return [[1, 2, [3]]]') + .then(verifyJson([[1, 2, [3]]])); + }); + + test.ignore(env.browsers(Browser.IE, Browser.SAFARI)). + it('can return empty object literal', function() { + execute('return {}').then(verifyJson({})); + }); + + test.it('can return object literals', function() { + execute('return {a: 1, b: false, c: null}').then(function(result) { + verifyJson(['a', 'b', 'c'])(Object.keys(result).sort()); + assert(result.a).equalTo(1); + assert(result.b).equalTo(false); + assert(result.c).isNull(); + }); + }); + + test.it('can return complex object literals', function() { + execute('return {a:{b: "hello"}}').then(verifyJson({a:{b: 'hello'}})); + }); + + test.it('can return dom elements as web elements', function() { + execute('return document.querySelector(".header.host")') + .then(function(result) { + assert(result).instanceOf(webdriver.WebElement); + assert(result.getText()).startsWith('host: '); + }); + }); + + test.it('can return array of dom elements', function() { + execute('var nodes = document.querySelectorAll(".request,.host");' + + 'return [nodes[0], nodes[1]];') + .then(function(result) { + assert(result.length).equalTo(2); + + assert(result[0]).instanceOf(webdriver.WebElement); + assert(result[0].getText()).startsWith('GET '); + + assert(result[1]).instanceOf(webdriver.WebElement); + assert(result[1].getText()).startsWith('host: '); + }); + }); + + test.it('can return a NodeList as an array of web elements', function() { + execute('return document.querySelectorAll(".request,.host");') + .then(function(result) { + assert(result.length).equalTo(2); + + assert(result[0]).instanceOf(webdriver.WebElement); + assert(result[0].getText()).startsWith('GET '); + + assert(result[1]).instanceOf(webdriver.WebElement); + assert(result[1].getText()).startsWith('host: '); + }); + }); + + test.it('can return object literal with element property', function() { + execute('return {a: document.body}').then(function(result) { + assert(result.a).instanceOf(webdriver.WebElement); + assert(result.a.getTagName()).equalTo('body'); + }); + }); + }); + + describe('parameters;', function() { + test.it('can pass numeric arguments', function() { + assert(execute('return arguments[0]', 12)).equalTo(12); + assert(execute('return arguments[0]', 3.14)).equalTo(3.14); + }); + + test.it('can pass boolean arguments', function() { + assert(execute('return arguments[0]', true)).equalTo(true); + assert(execute('return arguments[0]', false)).equalTo(false); + }); + + test.it('can pass string arguments', function() { + assert(execute('return arguments[0]', 'hi')).equalTo('hi'); + }); + + test.it('can pass null arguments', function() { + assert(execute('return arguments[0] === null', null)).equalTo(true); + assert(execute('return arguments[0]', null)).equalTo(null); + }); + + test.it('passes undefined as a null argument', function() { + var x; + assert(execute('return arguments[0] === null', x)).equalTo(true); + assert(execute('return arguments[0]', x)).equalTo(null); + }); + + test.it('can pass multiple arguments', function() { + assert(execute('return arguments.length')).equalTo(0); + assert(execute('return arguments.length', 1, 'a', false)).equalTo(3); + }); + + test.it('can return arguments object as array', function() { + execute('return arguments', 1, 'a', false).then(function(val) { + assert(val.length).equalTo(3); + assert(val[0]).equalTo(1); + assert(val[1]).equalTo('a'); + assert(val[2]).equalTo(false); + }); + }); + + test.it('can pass object literal', function() { + execute( + 'return [typeof arguments[0], arguments[0].a]', {a: 'hello'}) + .then(function(result) { + assert(result[0]).equalTo('object'); + assert(result[1]).equalTo('hello'); + }); + }); + + test.it('WebElement arguments are passed as DOM elements', function() { + var el = driver.findElement(By.tagName('div')); + assert(execute('return arguments[0].tagName.toLowerCase();', el)) + .equalTo('div'); + }); + + test.it('can pass array containing object literals', function() { + execute('return arguments[0]', [{color: "red"}]).then(function(result) { + assert(result.length).equalTo(1); + assert(result[0].color).equalTo('red'); + }); + }); + + test.it('does not modify object literal parameters', function() { + var input = {color: 'red'}; + execute('return arguments[0];', input).then(verifyJson(input)); + }); + }); + + // See https://code.google.com/p/selenium/issues/detail?id=8223. + describe('issue 8223;', function() { + describe('using for..in loops;', function() { + test.it('can return array built from for-loop index', function() { + execute(function() { + var ret = []; + for (var i = 0; i < 3; i++) { + ret.push(i); + } + return ret; + }).then(verifyJson[0, 1, 2]); + }); + + test.it('can copy input array contents', function() { + execute(function(input) { + var ret = []; + for (var i in input) { + ret.push(input[i]); + } + return ret; + }, ['fa', 'fe', 'fi']).then(verifyJson(['fa', 'fe', 'fi'])); + }); + + test.it('can iterate over input object keys', function() { + execute(function(thing) { + var ret = []; + for (var w in thing.words) { + ret.push(thing.words[w].word); + } + return ret; + }, {words: [{word: 'fa'}, {word: 'fe'}, {word: 'fi'}]}) + .then(verifyJson(['fa', 'fe', 'fi'])); + }); + + describe('recursive functions;', function() { + test.it('can build array from input', function() { + var input = ['fa', 'fe', 'fi']; + execute(function(thearray) { + var ret = []; + function build_response(thearray, ret) { + ret.push(thearray.shift()); + return (!thearray.length && ret + || build_response(thearray, ret)); + } + return build_response(thearray, ret); + }, input).then(verifyJson(input)); + }); + + test.it('can build array from elements in object', function() { + var input = {words: [{word: 'fa'}, {word: 'fe'}, {word: 'fi'}]}; + execute(function(thing) { + var ret = []; + function build_response(thing, ret) { + var item = thing.words.shift(); + ret.push(item.word); + return (!thing.words.length && ret + || build_response(thing, ret)); + } + return build_response(thing, ret); + }, input).then(verifyJson(['fa', 'fe', 'fi'])); + }); + }); + }); + }); + + }); + + function verifyJson(expected) { + return function(actual) { + assert(JSON.stringify(actual)).equalTo(JSON.stringify(expected)); + }; + } + + function execute() { + return driver.executeScript.apply(driver, arguments); + } +}); diff --git a/www/node_modules/selenium-webdriver/test/fingerprint_test.js b/www/node_modules/selenium-webdriver/test/fingerprint_test.js new file mode 100644 index 0000000..5a64494 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/fingerprint_test.js @@ -0,0 +1,57 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('../testing/assert'), + test = require('../lib/test'), + Pages = test.Pages; + + +test.suite(function(env) { + var browsers = env.browsers; + + var driver; + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + describe('fingerprinting', function() { + test.it('it should fingerprint the navigator object', function() { + driver.get(Pages.simpleTestPage); + assert(driver.executeScript('return navigator.webdriver')).equalTo(true); + }); + + test.it('fingerprint must not be writable', function() { + driver.get(Pages.simpleTestPage); + assert(driver.executeScript( + 'navigator.webdriver = "ohai"; return navigator.webdriver')) + .equalTo(true); + }); + + test.it('leaves fingerprint on svg pages', function() { + driver.get(Pages.svgPage); + assert(driver.executeScript('return navigator.webdriver')).equalTo(true); + }); + }); + +// Currently only implemented in firefox. +}, {browsers: ['firefox']}); diff --git a/www/node_modules/selenium-webdriver/test/firefox/extension_test.js b/www/node_modules/selenium-webdriver/test/firefox/extension_test.js new file mode 100644 index 0000000..50936f7 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/firefox/extension_test.js @@ -0,0 +1,96 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var AdmZip = require('adm-zip'), + assert = require('assert'), + crypto = require('crypto'), + fs = require('fs'), + path = require('path'); + +var extension = require('../../firefox/extension'), + io = require('../../io'), + it = require('../../testing').it; + + +var JETPACK_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/jetpack-sample.xpi'); +var NORMAL_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/sample.xpi'); + +var JETPACK_EXTENSION_ID = 'jid1-EaXX7k0wwiZR7w@jetpack'; +var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org'; + + +describe('extension', function() { + it('can install a jetpack xpi file', function() { + return io.tmpDir().then(function(dir) { + return extension.install(JETPACK_EXTENSION, dir).then(function(id) { + assert.equal(JETPACK_EXTENSION_ID, id); + var file = path.join(dir, id + '.xpi'); + assert.ok(fs.existsSync(file), 'no such file: ' + file); + assert.ok(!fs.statSync(file).isDirectory()); + + var copiedSha1 = crypto.createHash('sha1') + .update(fs.readFileSync(file)) + .digest('hex'); + + var goldenSha1 = crypto.createHash('sha1') + .update(fs.readFileSync(JETPACK_EXTENSION)) + .digest('hex'); + + assert.equal(copiedSha1, goldenSha1); + }); + }); + }); + + it('can install a normal xpi file', function() { + return io.tmpDir().then(function(dir) { + return extension.install(NORMAL_EXTENSION, dir).then(function(id) { + assert.equal(NORMAL_EXTENSION_ID, id); + + var file = path.join(dir, NORMAL_EXTENSION_ID); + assert.ok(fs.statSync(file).isDirectory()); + + assert.ok(fs.existsSync(path.join(file, 'chrome.manifest'))); + assert.ok(fs.existsSync(path.join(file, 'content/overlay.xul'))); + assert.ok(fs.existsSync(path.join(file, 'content/overlay.js'))); + assert.ok(fs.existsSync(path.join(file, 'install.rdf'))); + }); + }); + }); + + it('can install an extension from a directory', function() { + return io.tmpDir().then(function(srcDir) { + var buf = fs.readFileSync(NORMAL_EXTENSION); + new AdmZip(buf).extractAllTo(srcDir, true); + return io.tmpDir().then(function(dstDir) { + return extension.install(srcDir, dstDir).then(function(id) { + assert.equal(NORMAL_EXTENSION_ID, id); + + var dir = path.join(dstDir, NORMAL_EXTENSION_ID); + + assert.ok(fs.existsSync(path.join(dir, 'chrome.manifest'))); + assert.ok(fs.existsSync(path.join(dir, 'content/overlay.xul'))); + assert.ok(fs.existsSync(path.join(dir, 'content/overlay.js'))); + assert.ok(fs.existsSync(path.join(dir, 'install.rdf'))); + }); + }); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/firefox/firefox_test.js b/www/node_modules/selenium-webdriver/test/firefox/firefox_test.js new file mode 100644 index 0000000..0a32940 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/firefox/firefox_test.js @@ -0,0 +1,183 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var path = require('path'); + +var firefox = require('../../firefox'), + io = require('../../io'), + test = require('../../lib/test'), + assert = require('../../testing/assert'); + + +var JETPACK_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/jetpack-sample.xpi'); +var NORMAL_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/sample.xpi'); + + +test.suite(function(env) { + describe('firefox', function() { + describe('Options', function() { + var driver; + + test.beforeEach(function() { + driver = null; + }); + + test.afterEach(function() { + if (driver) { + driver.quit(); + } + }); + + test.it('can start Firefox with custom preferences', function() { + var profile = new firefox.Profile(); + profile.setPreference('general.useragent.override', 'foo;bar'); + + var options = new firefox.Options().setProfile(profile); + + driver = env.builder(). + setFirefoxOptions(options). + build(); + + driver.get('data:text/html,
      content
      '); + + var userAgent = driver.executeScript( + 'return window.navigator.userAgent'); + assert(userAgent).equalTo('foo;bar'); + }); + + test.it('can start Firefox with a jetpack extension', function() { + var profile = new firefox.Profile(); + profile.addExtension(JETPACK_EXTENSION); + + var options = new firefox.Options().setProfile(profile); + + driver = env.builder(). + setFirefoxOptions(options). + build(); + + loadJetpackPage(driver, + 'data:text/html;charset=UTF-8,
      content
      '); + assert(driver.findElement({id: 'jetpack-sample-banner'}).getText()) + .equalTo('Hello, world!'); + }); + + test.it('can start Firefox with a normal extension', function() { + var profile = new firefox.Profile(); + profile.addExtension(NORMAL_EXTENSION); + + var options = new firefox.Options().setProfile(profile); + + driver = env.builder(). + setFirefoxOptions(options). + build(); + + driver.get('data:text/html,
      content
      '); + assert(driver.findElement({id: 'sample-extension-footer'}).getText()) + .equalTo('Goodbye'); + }); + + test.it('can start Firefox with multiple extensions', function() { + var profile = new firefox.Profile(); + profile.addExtension(JETPACK_EXTENSION); + profile.addExtension(NORMAL_EXTENSION); + + var options = new firefox.Options().setProfile(profile); + + driver = env.builder(). + setFirefoxOptions(options). + build(); + + loadJetpackPage(driver, + 'data:text/html;charset=UTF-8,
      content
      '); + assert(driver.findElement({id: 'jetpack-sample-banner'}).getText()) + .equalTo('Hello, world!'); + assert(driver.findElement({id: 'sample-extension-footer'}).getText()) + .equalTo('Goodbye'); + }); + + function loadJetpackPage(driver, url) { + // On linux the jetpack extension does not always run the first time + // we load a page. If this happens, just reload the page (a simple + // refresh doesn't appear to work). + driver.wait(function() { + driver.get(url); + return driver.isElementPresent({id: 'jetpack-sample-banner'}); + }, 3000); + } + }); + + describe('profile management', function() { + var driver; + + test.beforeEach(function() { + driver = null; + }); + + test.afterEach(function() { + if (driver) { + driver.quit(); + } + }); + + test.ignore(env.isRemote). + it('deletes the temp profile on quit', function() { + driver = env.builder().build(); + + var profilePath = driver.call(function() { + var path = driver.profilePath_; + assert(io.exists(path)).isTrue(); + return path; + }); + + return driver.quit().then(function() { + driver = null; + return profilePath; + }).then(function(path) { + assert(io.exists(path)).isFalse(); + }); + }); + }); + + describe('binary management', function() { + var driver1, driver2; + + test.ignore(env.isRemote). + it('can start multiple sessions with single binary instance', function() { + var options = new firefox.Options().setBinary(new firefox.Binary); + env.builder().setFirefoxOptions(options); + driver1 = env.builder().build(); + driver2 = env.builder().build(); + // Ok if this doesn't fail. + }); + + test.afterEach(function() { + if (driver1) { + driver1.quit(); + } + + if (driver2) { + driver2.quit(); + } + }); + }); + + }); +}, {browsers: ['firefox']}); diff --git a/www/node_modules/selenium-webdriver/test/firefox/profile_test.js b/www/node_modules/selenium-webdriver/test/firefox/profile_test.js new file mode 100644 index 0000000..feaa42f --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/firefox/profile_test.js @@ -0,0 +1,187 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var AdmZip = require('adm-zip'), + assert = require('assert'), + fs = require('fs'), + path = require('path'); + +var promise = require('../..').promise, + Profile = require('../../firefox/profile').Profile, + decode = require('../../firefox/profile').decode, + loadUserPrefs = require('../../firefox/profile').loadUserPrefs, + io = require('../../io'), + it = require('../../testing').it; + + +var JETPACK_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/jetpack-sample.xpi'); +var NORMAL_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/sample.xpi'); + +var JETPACK_EXTENSION_ID = 'jid1-EaXX7k0wwiZR7w@jetpack.xpi'; +var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org'; +var WEBDRIVER_EXTENSION_ID = 'fxdriver@googlecode.com'; + + + +describe('Profile', function() { + describe('setPreference', function() { + it('allows setting custom properties', function() { + var profile = new Profile(); + assert.equal(undefined, profile.getPreference('foo')); + + profile.setPreference('foo', 'bar'); + assert.equal('bar', profile.getPreference('foo')); + }); + + it('allows overriding mutable properties', function() { + var profile = new Profile(); + assert.equal('about:blank', profile.getPreference('browser.newtab.url')); + + profile.setPreference('browser.newtab.url', 'http://www.example.com'); + assert.equal('http://www.example.com', + profile.getPreference('browser.newtab.url')); + }); + + it('throws if setting a frozen preference', function() { + var profile = new Profile(); + assert.throws(function() { + profile.setPreference('app.update.auto', true); + }); + }); + }); + + describe('writeToDisk', function() { + it('copies template directory recursively', function() { + var templateDir; + return io.tmpDir().then(function(td) { + templateDir = td; + var foo = path.join(templateDir, 'foo'); + fs.writeFileSync(foo, 'Hello, world'); + + var bar = path.join(templateDir, 'subfolder/bar'); + fs.mkdirSync(path.dirname(bar)); + fs.writeFileSync(bar, 'Goodbye, world!'); + + return new Profile(templateDir).writeToDisk(); + }).then(function(profileDir) { + assert.notEqual(profileDir, templateDir); + + assert.equal('Hello, world', + fs.readFileSync(path.join(profileDir, 'foo'))); + assert.equal('Goodbye, world!', + fs.readFileSync(path.join(profileDir, 'subfolder/bar'))); + }); + }); + + it('does not copy lock files', function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'parent.lock'), 'lock'); + fs.writeFileSync(path.join(dir, 'lock'), 'lock'); + fs.writeFileSync(path.join(dir, '.parentlock'), 'lock'); + return new Profile(dir).writeToDisk(); + }).then(function(dir) { + assert.ok(fs.existsSync(dir)); + assert.ok(!fs.existsSync(path.join(dir, 'parent.lock'))); + assert.ok(!fs.existsSync(path.join(dir, 'lock'))); + assert.ok(!fs.existsSync(path.join(dir, '.parentlock'))); + }); + }); + + describe('user.js', function() { + + it('writes defaults', function() { + return new Profile().writeToDisk().then(function(dir) { + return loadUserPrefs(path.join(dir, 'user.js')); + }).then(function(prefs) { + // Just check a few. + assert.equal(false, prefs['app.update.auto']); + assert.equal(true, prefs['browser.EULA.override']); + assert.equal(false, prefs['extensions.update.enabled']); + assert.equal('about:blank', prefs['browser.newtab.url']); + assert.equal(30, prefs['dom.max_script_run_time']); + }); + }); + + it('merges template user.js into preferences', function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'user.js'), [ + 'user_pref("browser.newtab.url", "http://www.example.com")', + 'user_pref("dom.max_script_run_time", 1234)' + ].join('\n')); + + return new Profile(dir).writeToDisk(); + }).then(function(profile) { + return loadUserPrefs(path.join(profile, 'user.js')); + }).then(function(prefs) { + assert.equal('http://www.example.com', prefs['browser.newtab.url']); + assert.equal(1234, prefs['dom.max_script_run_time']); + }); + }); + + it('ignores frozen preferences when merging template user.js', + function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'user.js'), + 'user_pref("app.update.auto", true)'); + return new Profile(dir).writeToDisk(); + }).then(function(profile) { + return loadUserPrefs(path.join(profile, 'user.js')); + }).then(function(prefs) { + assert.equal(false, prefs['app.update.auto']); + }); + }); + }); + + describe('extensions', function() { + it('are copied into new profile directory', function() { + var profile = new Profile(); + profile.addExtension(JETPACK_EXTENSION); + profile.addExtension(NORMAL_EXTENSION); + + return profile.writeToDisk().then(function(dir) { + dir = path.join(dir, 'extensions'); + assert.ok(fs.existsSync(path.join(dir, JETPACK_EXTENSION_ID))); + assert.ok(fs.existsSync(path.join(dir, NORMAL_EXTENSION_ID))); + assert.ok(fs.existsSync(path.join(dir, WEBDRIVER_EXTENSION_ID))); + }); + }); + }); + }); + + describe('encode', function() { + it('excludes the bundled WebDriver extension', function() { + return new Profile().encode().then(function(data) { + return decode(data); + }).then(function(dir) { + assert.ok(fs.existsSync(path.join(dir, 'user.js'))); + assert.ok(fs.existsSync(path.join(dir, 'extensions'))); + return loadUserPrefs(path.join(dir, 'user.js')); + }).then(function(prefs) { + // Just check a few. + assert.equal(false, prefs['app.update.auto']); + assert.equal(true, prefs['browser.EULA.override']); + assert.equal(false, prefs['extensions.update.enabled']); + assert.equal('about:blank', prefs['browser.newtab.url']); + assert.equal(30, prefs['dom.max_script_run_time']); + }); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/http/http_test.js b/www/node_modules/selenium-webdriver/test/http/http_test.js new file mode 100644 index 0000000..b121f85 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/http/http_test.js @@ -0,0 +1,443 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); +var http = require('http'); +var sinon = require('sinon'); +var url = require('url'); + +var error = require('../../error'); +var Executor = require('../../http').Executor; +var HttpClient = require('../../http').HttpClient; +var HttpRequest = require('../../http').Request; +var HttpResponse = require('../../http').Response; +var buildPath = require('../../http').buildPath; +var Command = require('../../lib/command').Command; +var CommandName = require('../../lib/command').Name; +var Server = require('../../lib/test/httpserver').Server; +var promise = require('../..').promise; + +describe('buildPath', function() { + it('properly replaces path segments with command parameters', function() { + var parameters = {'sessionId':'foo', 'url':'http://www.google.com'}; + var finalPath = buildPath('/session/:sessionId/url', parameters); + assert.equal(finalPath, '/session/foo/url'); + assert.deepEqual(parameters, {'url':'http://www.google.com'}); + }); + + it('handles web element references', function() { + var parameters = {'sessionId':'foo', 'id': {}}; + parameters['id']['ELEMENT'] = 'bar'; + + var finalPath = buildPath( + '/session/:sessionId/element/:id/click', parameters); + assert.equal(finalPath, '/session/foo/element/bar/click'); + assert.deepEqual(parameters, {}); + }); + + it('throws if missing a parameter', function() { + assert.throws( + () => buildPath('/session/:sessionId', {}), + function(err) { + return err instanceof error.InvalidArgumentError + && 'Missing required parameter: sessionId' === err.message; + }); + + assert.throws( + () => buildPath('/session/:sessionId/element/:id', {'sessionId': 'foo'}), + function(err) { + return err instanceof error.InvalidArgumentError + && 'Missing required parameter: id' === err.message; + }); + }); + + it('does not match on segments that do not start with a colon', function() { + assert.equal(buildPath('/session/foo:bar/baz', {}), '/session/foo:bar/baz'); + }); +}); + +describe('Executor', function() { + let executor; + let send; + + beforeEach(function setUp() { + let client = new HttpClient('http://www.example.com'); + send = sinon.stub(client, 'send'); + executor = new Executor(client); + }); + + it('rejects unrecognized commands', function() { + assert.throws( + () => executor.execute(new Command('fake-name')), + function (err) { + return err instanceof error.UnknownCommandError + && 'Unrecognized command: fake-name' === err.message; + }); + }); + + it('rejects promise if client fails to send request', function() { + let error = new Error('boom'); + send.returns(Promise.reject(error)); + return assertFailsToSend(new Command(CommandName.NEW_SESSION)) + .then(function(e) { + assert.strictEqual(error, e); + assertSent( + 'POST', '/session', {}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + it('can execute commands with no URL parameters', function() { + send.returns(Promise.resolve(new HttpResponse(200, {}, ''))); + + let command = new Command(CommandName.NEW_SESSION); + return assertSendsSuccessfully(command).then(function(response) { + assertSent( + 'POST', '/session', {}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + it('rejects commands missing URL parameters', function() { + let command = + new Command(CommandName.FIND_CHILD_ELEMENT). + setParameter('sessionId', 's123'). + // Let this be missing: setParameter('id', {'ELEMENT': 'e456'}). + setParameter('using', 'id'). + setParameter('value', 'foo'); + + assert.throws( + () => executor.execute(command), + function(err) { + return err instanceof error.InvalidArgumentError + && 'Missing required parameter: id' === err.message; + }); + assert.ok(!send.called); + }); + + it('replaces URL parameters with command parameters', function() { + var command = new Command(CommandName.GET). + setParameter('sessionId', 's123'). + setParameter('url', 'http://www.google.com'); + + send.returns(Promise.resolve(new HttpResponse(200, {}, ''))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent( + 'POST', '/session/s123/url', {'url': 'http://www.google.com'}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + it('returns parsed JSON response', function() { + var responseObj = { + 'status': error.ErrorCode.SUCCESS, + 'value': 'http://www.google.com' + }; + + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + + send.returns(Promise.resolve( + new HttpResponse(200, {}, JSON.stringify(responseObj)))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, responseObj); + }); + }); + + it('returns success for 2xx with body as value when not json', function() { + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + send.returns(Promise.resolve( + new HttpResponse(200, {}, 'hello, world\r\ngoodbye, world!'))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, { + 'status': error.ErrorCode.SUCCESS, + 'value': 'hello, world\ngoodbye, world!' + }); + }); + }); + + it('returns success for 2xx with invalid JSON body', function() { + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + send.returns(Promise.resolve( + new HttpResponse(200, {}, '['))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, { + 'status': error.ErrorCode.SUCCESS, + 'value': '[' + }); + }); + }); + + it('returns unknown command for 404 with body as value when not json', + function() { + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + send.returns(Promise.resolve( + new HttpResponse(404, {}, 'hello, world\r\ngoodbye, world!'))); + + return assertSendsSuccessfully(command, function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, { + 'status': error.ErrorCode.UNKNOWN_COMMAND, + 'value': 'hello, world\ngoodbye, world!' + }); + }); + }); + + it('returnsUnknownErrorForGenericErrorCodeWithBodyAsValueWhenNotJSON', + function() { + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + send.returns(Promise.resolve( + new HttpResponse(500, {}, 'hello, world\r\ngoodbye, world!'))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, { + 'status': error.ErrorCode.UNKNOWN_ERROR, + 'value': 'hello, world\ngoodbye, world!' + }); + }); + }); + + it('canDefineNewCommands', function() { + executor.defineCommand('greet', 'GET', '/person/:name'); + + var command = new Command('greet'). + setParameter('name', 'Bob'); + + send.returns(Promise.resolve(new HttpResponse(200, {}, ''))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/person/Bob', {}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + it('canRedefineStandardCommands', function() { + executor.defineCommand(CommandName.GO_BACK, 'POST', '/custom/back'); + + var command = new Command(CommandName.GO_BACK). + setParameter('times', 3); + + send.returns(Promise.resolve(new HttpResponse(200, {}, ''))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('POST', '/custom/back', {'times': 3}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + function entries(map) { + let entries = []; + for (let e of map.entries()) { + entries.push(e); + } + return entries; + } + + function assertSent(method, path, data, headers) { + assert.ok(send.calledWith(sinon.match(function(value) { + assert.equal(value.method, method); + assert.equal(value.path, path); + assert.deepEqual(value.data, data); + assert.deepEqual(entries(value.headers), headers); + return true; + }))); + } + + function assertSendsSuccessfully(command) { + return executor.execute(command).then(function(response) { + return response; + }); + } + + function assertFailsToSend(command, opt_onError) { + return executor.execute(command).then( + () => {throw Error('should have failed')}, + (e) => {return e}); + } +}); + +describe('HttpClient', function() { + this.timeout(4 * 1000); + + var server = new Server(function(req, res) { + if (req.method == 'GET' && req.url == '/echo') { + res.writeHead(200, req.headers); + res.end(); + + } else if (req.method == 'GET' && req.url == '/redirect') { + res.writeHead(303, {'Location': server.url('/hello')}); + res.end(); + + } else if (req.method == 'GET' && req.url == '/hello') { + res.writeHead(200, {'content-type': 'text/plain'}); + res.end('hello, world!'); + + } else if (req.method == 'GET' && req.url == '/badredirect') { + res.writeHead(303, {}); + res.end(); + + } else if (req.method == 'GET' && req.url == '/protected') { + var denyAccess = function() { + res.writeHead(401, {'WWW-Authenticate': 'Basic realm="test"'}); + res.end('Access denied'); + }; + + var basicAuthRegExp = /^\s*basic\s+([a-z0-9\-\._~\+\/]+)=*\s*$/i + var auth = req.headers.authorization; + var match = basicAuthRegExp.exec(auth || ''); + if (!match) { + denyAccess(); + return; + } + + var userNameAndPass = new Buffer(match[1], 'base64').toString(); + var parts = userNameAndPass.split(':', 2); + if (parts[0] !== 'genie' && parts[1] !== 'bottle') { + denyAccess(); + return; + } + + res.writeHead(200, {'content-type': 'text/plain'}); + res.end('Access granted!'); + + } else if (req.method == 'GET' && req.url == '/proxy') { + res.writeHead(200, req.headers); + res.end(); + + } else if (req.method == 'GET' && req.url == '/proxy/redirect') { + res.writeHead(303, {'Location': '/proxy'}); + res.end(); + + } else { + res.writeHead(404, {}); + res.end(); + } + }); + + before(function() { + return server.start(); + }); + + after(function() { + return server.stop(); + }); + + it('can send a basic HTTP request', function() { + var request = new HttpRequest('GET', '/echo'); + request.headers.set('Foo', 'Bar'); + + var agent = new http.Agent(); + agent.maxSockets = 1; // Only making 1 request. + + var client = new HttpClient(server.url(), agent); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('content-length'), '0'); + assert.equal(response.headers.get('connection'), 'keep-alive'); + assert.equal(response.headers.get('host'), server.host()); + + assert.equal(request.headers.get('Foo'), 'Bar'); + assert.equal( + request.headers.get('Accept'), 'application/json; charset=utf-8'); + }); + }); + + it('can use basic auth', function() { + var parsed = url.parse(server.url()); + parsed.auth = 'genie:bottle'; + + var client = new HttpClient(url.format(parsed)); + var request = new HttpRequest('GET', '/protected'); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('content-type'), 'text/plain'); + assert.equal(response.body, 'Access granted!'); + }); + }); + + it('fails requests missing required basic auth', function() { + var client = new HttpClient(server.url()); + var request = new HttpRequest('GET', '/protected'); + return client.send(request).then(function(response) { + assert.equal(401, response.status); + assert.equal(response.body, 'Access denied'); + }); + }); + + it('automatically follows redirects', function() { + var request = new HttpRequest('GET', '/redirect'); + var client = new HttpClient(server.url()); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('content-type'), 'text/plain'); + assert.equal(response.body, 'hello, world!'); + }); + }); + + it('handles malformed redirect responses', function() { + var request = new HttpRequest('GET', '/badredirect'); + var client = new HttpClient(server.url()); + return client.send(request).then(assert.fail, function(err) { + assert.ok(/Failed to parse "Location"/.test(err.message), + 'Not the expected error: ' + err.message); + }); + }); + + it('proxies requests through the webdriver proxy', function() { + var request = new HttpRequest('GET', '/proxy'); + var client = new HttpClient( + 'http://another.server.com', undefined, server.url()); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('host'), 'another.server.com'); + }); + }); + + it('proxies requests through the webdriver proxy on redirect', function() { + var request = new HttpRequest('GET', '/proxy/redirect'); + var client = new HttpClient( + 'http://another.server.com', undefined, server.url()); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('host'), 'another.server.com'); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/http/util_test.js b/www/node_modules/selenium-webdriver/test/http/util_test.js new file mode 100644 index 0000000..ca250c6 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/http/util_test.js @@ -0,0 +1,184 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + http = require('http'); + +var error = require('../../error'); +var util = require('../../http/util'); + +describe('selenium-webdriver/http/util', function() { + + var server, baseUrl; + + var status, value, responseCode; + + function startServer(done) { + if (server) return done(); + + server = http.createServer(function(req, res) { + var data = JSON.stringify({status: status, value: value}); + res.writeHead(responseCode, { + 'Content-Type': 'application/json; charset=utf-8', + 'Content-Length': Buffer.byteLength(data, 'utf8') + }); + res.end(data); + }); + + server.listen(0, '127.0.0.1', function(e) { + if (e) return done(e); + + var addr = server.address(); + baseUrl = 'http://' + addr.address + ':' + addr.port; + done(); + }); + } + + function killServer(done) { + if (!server) return done(); + server.close(done); + server = null; + } + + after(killServer); + + beforeEach(function(done) { + status = 0; + value = 'abc123'; + responseCode = 200; + startServer(done); + }); + + describe('#getStatus', function() { + it('should return value field on success', function() { + return util.getStatus(baseUrl).then(function(response) { + assert.equal('abc123', response); + }); + }); + + it('should fail if response object is not success', function() { + status = 1; + return util.getStatus(baseUrl).then(function() { + throw Error('expected a failure'); + }, function(err) { + assert.ok(err instanceof error.WebDriverError); + assert.equal(err.code, error.WebDriverError.code); + assert.equal(err.message, value); + }); + }); + + it('should fail if the server is not listening', function(done) { + killServer(function(e) { + if(e) return done(e); + + util.getStatus(baseUrl).then(function() { + done(Error('expected a failure')); + }, function() { + // Expected. + done(); + }); + }); + }); + + it('should fail if HTTP status is not 200', function() { + status = 1; + responseCode = 404; + return util.getStatus(baseUrl).then(function() { + throw Error('expected a failure'); + }, function(err) { + assert.ok(err instanceof error.WebDriverError); + assert.equal(err.code, error.WebDriverError.code); + assert.equal(err.message, value); + }); + }); + }); + + describe('#waitForServer', function() { + it('resolves when server is ready', function() { + status = 1; + setTimeout(function() { status = 0; }, 50); + return util.waitForServer(baseUrl, 100); + }); + + it('should fail if server does not become ready', function() { + status = 1; + return util.waitForServer(baseUrl, 50). + then(function() {throw Error('Expected to time out')}, + function() {}); + }); + + it('can cancel wait', function(done) { + status = 1; + var err = Error('cancelled!'); + var isReady = util.waitForServer(baseUrl, 200). + then(function() { done('Did not expect to succeed'); }). + then(null, function(e) { + assert.equal('cancelled!', e.message); + }). + then(function() { done(); }, done); + + setTimeout(function() { + isReady.cancel('cancelled!'); + }, 50); + }); + }); + + describe('#waitForUrl', function() { + it('succeeds when URL returns 2xx', function(done) { + responseCode = 404; + setTimeout(function() { responseCode = 200; }, 50); + + util.waitForUrl(baseUrl, 200). + then(function() {}). // done needs no argument to pass. + thenFinally(done); + }); + + it('fails if URL always returns 4xx', function(done) { + responseCode = 404; + + util.waitForUrl(baseUrl, 50). + then(function() { done('Expected to time out'); }, + function() { done(); }); + }); + + it('fails if cannot connect to server', function(done) { + killServer(function(e) { + if (e) return done(e); + + util.waitForUrl(baseUrl, 50). + then(function() { done('Expected to time out'); }, + function() { done(); }); + }); + }); + + it('can cancel wait', function(done) { + responseCode = 404; + var isReady = util.waitForUrl(baseUrl, 200). + then(function() { done('Did not expect to succeed'); }). + then(null, function(e) { + assert.equal('cancelled!', e.message); + }). + then(function() { done(); }, done); + + setTimeout(function() { + isReady.cancel('cancelled!'); + }, 50); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/io_test.js b/www/node_modules/selenium-webdriver/test/io_test.js new file mode 100644 index 0000000..bc2b457 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/io_test.js @@ -0,0 +1,232 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + tmp = require('tmp'); + +var io = require('../io'), + before = require('../testing').before, + beforeEach = require('../testing').beforeEach, + it = require('../testing').it; + + +describe('io', function() { + describe('copy', function() { + var tmpDir; + + before(function() { + return io.tmpDir().then(function(d) { + tmpDir = d; + + fs.writeFileSync(path.join(d, 'foo'), 'Hello, world'); + }); + }); + + it('can copy one file to another', function() { + return io.tmpFile().then(function(f) { + return io.copy(path.join(tmpDir, 'foo'), f).then(function(p) { + assert.equal(p, f); + assert.equal('Hello, world', fs.readFileSync(p)); + }); + }); + }); + + it('can copy symlink to destination', function() { + if (process.platform === 'win32') { + return; // No symlinks on windows. + } + fs.symlinkSync( + path.join(tmpDir, 'foo'), + path.join(tmpDir, 'symlinked-foo')); + return io.tmpFile().then(function(f) { + return io.copy(path.join(tmpDir, 'symlinked-foo'), f).then(function(p) { + assert.equal(p, f); + assert.equal('Hello, world', fs.readFileSync(p)); + }); + }); + }); + + it('fails if given a directory as a source', function() { + return io.tmpFile().then(function(f) { + return io.copy(tmpDir, f); + }).then(function() { + throw Error('Should have failed with a type error'); + }, function() { + // Do nothing; expected. + }); + }); + }); + + describe('copyDir', function() { + it('copies recursively', function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'file1'), 'hello'); + fs.mkdirSync(path.join(dir, 'sub')); + fs.mkdirSync(path.join(dir, 'sub/folder')); + fs.writeFileSync(path.join(dir, 'sub/folder/file2'), 'goodbye'); + + return io.tmpDir().then(function(dst) { + return io.copyDir(dir, dst).then(function(ret) { + assert.equal(dst, ret); + + assert.equal('hello', + fs.readFileSync(path.join(dst, 'file1'))); + assert.equal('goodbye', + fs.readFileSync(path.join(dst, 'sub/folder/file2'))); + }); + }); + }); + }); + + it('creates destination dir if necessary', function() { + return io.tmpDir().then(function(srcDir) { + fs.writeFileSync(path.join(srcDir, 'foo'), 'hi'); + return io.tmpDir().then(function(dstDir) { + return io.copyDir(srcDir, path.join(dstDir, 'sub')); + }); + }).then(function(p) { + assert.equal('sub', path.basename(p)); + assert.equal('hi', fs.readFileSync(path.join(p, 'foo'))); + }); + }); + + it('supports regex exclusion filter', function() { + return io.tmpDir().then(function(src) { + fs.writeFileSync(path.join(src, 'foo'), 'a'); + fs.writeFileSync(path.join(src, 'bar'), 'b'); + fs.writeFileSync(path.join(src, 'baz'), 'c'); + fs.mkdirSync(path.join(src, 'sub')); + fs.writeFileSync(path.join(src, 'sub/quux'), 'd'); + fs.writeFileSync(path.join(src, 'sub/quot'), 'e'); + + return io.tmpDir().then(function(dst) { + return io.copyDir(src, dst, /(bar|quux)/); + }); + }).then(function(dir) { + assert.equal('a', fs.readFileSync(path.join(dir, 'foo'))); + assert.equal('c', fs.readFileSync(path.join(dir, 'baz'))); + assert.equal('e', fs.readFileSync(path.join(dir, 'sub/quot'))); + + assert.ok(!fs.existsSync(path.join(dir, 'bar'))); + assert.ok(!fs.existsSync(path.join(dir, 'sub/quux'))); + }); + }); + + it('supports exclusion filter function', function() { + return io.tmpDir().then(function(src) { + fs.writeFileSync(path.join(src, 'foo'), 'a'); + fs.writeFileSync(path.join(src, 'bar'), 'b'); + fs.writeFileSync(path.join(src, 'baz'), 'c'); + fs.mkdirSync(path.join(src, 'sub')); + fs.writeFileSync(path.join(src, 'sub/quux'), 'd'); + fs.writeFileSync(path.join(src, 'sub/quot'), 'e'); + + return io.tmpDir().then(function(dst) { + return io.copyDir(src, dst, function(f) { + return f !== path.join(src, 'foo') + && f !== path.join(src, 'sub/quot'); + }); + }); + }).then(function(dir) { + assert.equal('b', fs.readFileSync(path.join(dir, 'bar'))); + assert.equal('c', fs.readFileSync(path.join(dir, 'baz'))); + assert.equal('d', fs.readFileSync(path.join(dir, 'sub/quux'))); + + assert.ok(!fs.existsSync(path.join(dir, 'foo'))); + assert.ok(!fs.existsSync(path.join(dir, 'sub/quot'))); + }); + }); + }); + + describe('exists', function() { + var dir; + + before(function() { + return io.tmpDir().then(function(d) { + dir = d; + }); + }); + + it('works for directories', function() { + return io.exists(dir).then(assert.ok); + }); + + it('works for files', function() { + var file = path.join(dir, 'foo'); + fs.writeFileSync(file, ''); + return io.exists(file).then(assert.ok); + }); + + it('does not return a rejected promise if file does not exist', function() { + return io.exists(path.join(dir, 'not-there')).then(function(exists) { + assert.ok(!exists); + }); + }); + }); + + describe('unlink', function() { + var dir; + + before(function() { + return io.tmpDir().then(function(d) { + dir = d; + }); + }); + + it('silently succeeds if the path does not exist', function() { + return io.unlink(path.join(dir, 'not-there')); + }); + + it('deletes files', function() { + var file = path.join(dir, 'foo'); + fs.writeFileSync(file, ''); + return io.exists(file).then(assert.ok).then(function() { + return io.unlink(file); + }).then(function() { + return io.exists(file); + }).then(function(exists) { + return assert.ok(!exists); + }); + }); + }); + + describe('rmDir', function() { + it('succeeds if the designated directory does not exist', function() { + return io.tmpDir().then(function(d) { + return io.rmDir(path.join(d, 'i/do/not/exist')); + }); + }); + + it('deletes recursively', function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'file1'), 'hello'); + fs.mkdirSync(path.join(dir, 'sub')); + fs.mkdirSync(path.join(dir, 'sub/folder')); + fs.writeFileSync(path.join(dir, 'sub/folder/file2'), 'goodbye'); + + return io.rmDir(dir).then(function() { + assert.ok(!fs.existsSync(dir)); + assert.ok(!fs.existsSync(path.join(dir, 'sub/folder/file2'))); + }); + }); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/by_test.js b/www/node_modules/selenium-webdriver/test/lib/by_test.js new file mode 100644 index 0000000..c4bd2f4 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/by_test.js @@ -0,0 +1,127 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); +var by = require('../../lib/by'); + +describe('by', function() { + describe('By', function() { + describe('className', function() { + it('delegates to By.css', function() { + let locator = by.By.className('foo'); + assert.equal('css selector', locator.using); + assert.equal('.foo', locator.value); + }); + + it('escapes class name', function() { + let locator = by.By.className('foo#bar'); + assert.equal('css selector', locator.using); + assert.equal('.foo\\#bar', locator.value); + }); + + it('translates compound class names', function() { + let locator = by.By.className('a b'); + assert.equal('css selector', locator.using); + assert.equal('.a.b', locator.value); + + locator = by.By.className(' x y z-1 "g" '); + assert.equal('css selector', locator.using); + assert.equal('.x.y.z-1.\\"g\\"', locator.value); + }); + }); + + describe('id', function() { + it('delegates to By.css', function() { + let locator = by.By.id('foo'); + assert.equal('css selector', locator.using); + assert.equal('*[id="foo"]', locator.value); + }); + + it('escapes the ID', function() { + let locator = by.By.id('foo#bar'); + assert.equal('css selector', locator.using); + assert.equal('*[id="foo\\#bar"]', locator.value); + }); + }); + + describe('name', function() { + it('delegates to By.css', function() { + let locator = by.By.name('foo') + assert.equal('css selector', locator.using); + assert.equal('*[name="foo"]', locator.value); + }); + + it('escapes the name', function() { + let locator = by.By.name('foo"bar"') + assert.equal('css selector', locator.using); + assert.equal('*[name="foo\\"bar\\""]', locator.value); + }); + }); + }); + + describe('checkedLocator', function() { + it('accepts class name', function() { + let locator = by.checkedLocator({className: 'foo'}); + assert.equal('css selector', locator.using); + assert.equal('.foo', locator.value); + }); + + it('accepts css', function() { + let locator = by.checkedLocator({css: 'a > b'}); + assert.equal('css selector', locator.using); + assert.equal('a > b', locator.value); + }); + + it('accepts id', function() { + let locator = by.checkedLocator({id: 'foobar'}); + assert.equal('css selector', locator.using); + assert.equal('*[id="foobar"]', locator.value); + }); + + it('accepts linkText', function() { + let locator = by.checkedLocator({linkText: 'hello'}); + assert.equal('link text', locator.using); + assert.equal('hello', locator.value); + }); + + it('accepts name', function() { + let locator = by.checkedLocator({name: 'foobar'}); + assert.equal('css selector', locator.using); + assert.equal('*[name="foobar"]', locator.value); + }); + + it('accepts partialLinkText', function() { + let locator = by.checkedLocator({partialLinkText: 'hello'}); + assert.equal('partial link text', locator.using); + assert.equal('hello', locator.value); + }); + + it('accepts tagName', function() { + let locator = by.checkedLocator({tagName: 'div'}); + assert.equal('css selector', locator.using); + assert.equal('div', locator.value); + }); + + it('accepts xpath', function() { + let locator = by.checkedLocator({xpath: '//div[1]'}); + assert.equal('xpath', locator.using); + assert.equal('//div[1]', locator.value); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/capabilities_test.js b/www/node_modules/selenium-webdriver/test/lib/capabilities_test.js new file mode 100644 index 0000000..78823d7 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/capabilities_test.js @@ -0,0 +1,84 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const Capabilities = require('../../lib/capabilities').Capabilities; +const Symbols = require('../../lib/symbols'); + +const assert = require('assert'); + +describe('Capabilities', function() { + it('can set and unset a capability', function() { + let caps = new Capabilities(); + assert.equal(undefined, caps.get('foo')); + assert.ok(!caps.has('foo')); + + caps.set('foo', 'bar'); + assert.equal('bar', caps.get('foo')); + assert.ok(caps.has('foo')); + + caps.set('foo', null); + assert.equal(null, caps.get('foo')); + assert.ok(caps.has('foo')); + }); + + it('requires string capability keys', function() { + let caps = new Capabilities(); + assert.throws(() => caps.set({}, 'hi')); + }); + + it('can merge capabilities', function() { + let caps1 = new Capabilities() + .set('foo', 'bar') + .set('color', 'red'); + + let caps2 = new Capabilities() + .set('color', 'green'); + + assert.equal('bar', caps1.get('foo')); + assert.equal('red', caps1.get('color')); + assert.equal('green', caps2.get('color')); + assert.equal(undefined, caps2.get('foo')); + + caps2.merge(caps1); + assert.equal('bar', caps1.get('foo')); + assert.equal('red', caps1.get('color')); + assert.equal('red', caps2.get('color')); + assert.equal('bar', caps2.get('foo')); + }); + + it('can be initialized from a hash object', function() { + let caps = new Capabilities({'one': 123, 'abc': 'def'}); + assert.equal(123, caps.get('one')); + assert.equal('def', caps.get('abc')); + }); + + it('can be initialized from a map', function() { + let m = new Map([['one', 123], ['abc', 'def']]); + + let caps = new Capabilities(m); + assert.equal(123, caps.get('one')); + assert.equal('def', caps.get('abc')); + }); + + it('can be serialized', function() { + let m = new Map([['one', 123], ['abc', 'def']]); + let caps = new Capabilities(m); + assert.deepEqual({one: 123, abc: 'def'}, caps[Symbols.serialize]()); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/events_test.js b/www/node_modules/selenium-webdriver/test/lib/events_test.js new file mode 100644 index 0000000..a02da97 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/events_test.js @@ -0,0 +1,177 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const EventEmitter = require('../../lib/events').EventEmitter; + +const assert = require('assert'); +const sinon = require('sinon'); + +describe('EventEmitter', function() { + describe('#emit()', function() { + it('can emit events when nothing is registered', function() { + let emitter = new EventEmitter; + emitter.emit('foo'); + // Ok if no errors are thrown. + }); + + it('can pass args to listeners on emit', function() { + let emitter = new EventEmitter; + let now = Date.now(); + + let messages = []; + emitter.on('foo', (arg) => messages.push(arg)); + + emitter.emit('foo', now); + assert.deepEqual([now], messages); + + emitter.emit('foo', now + 15); + assert.deepEqual([now, now + 15], messages); + }); + }); + + describe('#addListener()', function() { + it('can add multiple listeners for one event', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + emitter.emit('foo'); + assert.equal(3, count); + }); + + it('only registers each listener function once', function() { + let emitter = new EventEmitter; + let count = 0; + let onFoo = () => count++; + emitter.addListener('foo', onFoo); + emitter.addListener('foo', onFoo); + emitter.addListener('foo', onFoo); + + emitter.emit('foo'); + assert.equal(1, count); + + emitter.emit('foo'); + assert.equal(2, count); + }); + + it('allows users to specify a custom scope', function() { + let obj = { + count: 0, + inc: function() { + this.count++; + } + }; + let emitter = new EventEmitter; + emitter.addListener('foo', obj.inc, obj); + + emitter.emit('foo'); + assert.equal(1, obj.count); + + emitter.emit('foo'); + assert.equal(2, obj.count); + }); + }); + + describe('#once()', function() { + it('only calls registered callback once', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.once('foo', () => count++); + emitter.once('foo', () => count++); + emitter.once('foo', () => count++); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.emit('foo'); + assert.equal(3, count); + }); + }); + + describe('#removeListeners()', function() { + it('only removes the given listener function', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + + let toRemove = () => count++; + emitter.addListener('foo', toRemove); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.removeListener('foo', toRemove); + emitter.emit('foo'); + assert.equal(5, count); + }); + }); + + describe('#removeAllListeners()', function() { + it('only removes listeners for type if specified', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + emitter.addListener('bar', () => count++); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.removeAllListeners('foo'); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.emit('bar'); + assert.equal(4, count); + }); + + it('removes absolutely all listeners if no type specified', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.addListener('foo', () => count++); + emitter.addListener('bar', () => count++); + emitter.addListener('baz', () => count++); + emitter.addListener('baz', () => count++); + + emitter.emit('foo'); + assert.equal(1, count); + + emitter.emit('baz'); + assert.equal(3, count); + + emitter.removeAllListeners(); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.emit('bar'); + assert.equal(3, count); + + emitter.emit('baz'); + assert.equal(3, count); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/logging_test.js b/www/node_modules/selenium-webdriver/test/lib/logging_test.js new file mode 100644 index 0000000..29d2af4 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/logging_test.js @@ -0,0 +1,272 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); +const sinon = require('sinon'); +const logging = require('../../lib/logging'); + +describe('logging', function() { + let mgr, root, clock; + + beforeEach(function setUp() { + mgr = new logging.LogManager; + root = mgr.getLogger(''); + + clock = sinon.useFakeTimers(); + }); + + afterEach(function tearDown() { + clock.restore(); + }); + + describe('LogManager', function() { + describe('getLogger()', function() { + it('handles falsey input', function() { + assert.strictEqual(root, mgr.getLogger()); + assert.strictEqual(root, mgr.getLogger('')); + assert.strictEqual(root, mgr.getLogger(null)); + assert.strictEqual(root, mgr.getLogger(0)); + }); + + it('creates parent loggers', function() { + let logger = mgr.getLogger('foo.bar.baz'); + assert.strictEqual(logger.parent_, mgr.getLogger('foo.bar')); + + logger = logger.parent_; + assert.strictEqual(logger.parent_, mgr.getLogger('foo')); + + logger = logger.parent_; + assert.strictEqual(logger.parent_, mgr.getLogger('')); + + assert.strictEqual(logger.parent_.parent_, null); + }); + }); + }); + + describe('Logger', function() { + describe('getEffectiveLevel()', function() { + it('defaults to OFF', function() { + assert.strictEqual(root.getLevel(), logging.Level.OFF); + assert.strictEqual(root.getEffectiveLevel(), logging.Level.OFF); + + root.setLevel(null); + assert.strictEqual(root.getLevel(), null); + assert.strictEqual(root.getEffectiveLevel(), logging.Level.OFF); + }); + + it('uses own level if set', function() { + let logger = mgr.getLogger('foo.bar.baz'); + assert.strictEqual(logger.getLevel(), null); + assert.strictEqual(logger.getEffectiveLevel(), logging.Level.OFF); + + logger.setLevel(logging.Level.INFO); + assert.strictEqual(logger.getLevel(), logging.Level.INFO); + assert.strictEqual(logger.getEffectiveLevel(), logging.Level.INFO); + }); + + it('uses level from set on nearest parent', function() { + let ancestor = mgr.getLogger('foo'); + ancestor.setLevel(logging.Level.SEVERE); + + let logger = mgr.getLogger('foo.bar.baz'); + assert.strictEqual(logger.getLevel(), null); + assert.strictEqual(logger.getEffectiveLevel(), logging.Level.SEVERE); + }); + }); + + describe('isLoggable()', function() { + it('compares level against logger\'s effective level', function() { + const log1 = mgr.getLogger('foo'); + log1.setLevel(logging.Level.WARNING); + + const log2 = mgr.getLogger('foo.bar.baz'); + + assert(!log2.isLoggable(logging.Level.FINEST)); + assert(!log2.isLoggable(logging.Level.INFO)); + assert(log2.isLoggable(logging.Level.WARNING)); + assert(log2.isLoggable(logging.Level.SEVERE)); + + log2.setLevel(logging.Level.INFO); + + assert(!log2.isLoggable(logging.Level.FINEST)); + assert(log2.isLoggable(logging.Level.INFO)); + assert(log2.isLoggable(logging.Level.WARNING)); + assert(log2.isLoggable(logging.Level.SEVERE)); + + log2.setLevel(logging.Level.ALL); + + assert(log2.isLoggable(logging.Level.FINEST)); + assert(log2.isLoggable(logging.Level.INFO)); + assert(log2.isLoggable(logging.Level.WARNING)); + assert(log2.isLoggable(logging.Level.SEVERE)); + }); + + it('Level.OFF is never loggable', function() { + function test(level) { + root.setLevel(level); + assert(!root.isLoggable(logging.Level.OFF), + 'OFF should not be loggable at ' + level); + } + + test(logging.Level.ALL); + test(logging.Level.INFO); + test(logging.Level.OFF); + }); + }); + + describe('log()', function() { + it('does not invoke loggable if message is not loggable', function() { + const log = mgr.getLogger('foo'); + log.setLevel(logging.Level.OFF); + + let callback = sinon.spy(); + log.addHandler(callback); + root.addHandler(callback); + + assert(!callback.called); + }); + + it('invokes handlers for each parent logger', function() { + const cb1 = sinon.spy(); + const cb2 = sinon.spy(); + const cb3 = sinon.spy(); + const cb4 = sinon.spy(); + + const log1 = mgr.getLogger('foo'); + const log2 = mgr.getLogger('foo.bar'); + const log3 = mgr.getLogger('foo.bar.baz'); + const log4 = mgr.getLogger('foo.bar.baz.quot'); + + log1.addHandler(cb1); + log1.setLevel(logging.Level.INFO); + + log2.addHandler(cb2); + log2.setLevel(logging.Level.WARNING); + + log3.addHandler(cb3); + log3.setLevel(logging.Level.FINER); + + clock.tick(123456); + + log4.finest('this is the finest message'); + log4.finer('this is a finer message'); + log4.info('this is an info message'); + log4.warning('this is a warning message'); + log4.severe('this is a severe message'); + + assert.equal(4, cb1.callCount); + assert.equal(4, cb2.callCount); + assert.equal(4, cb3.callCount); + + const entry1 = new logging.Entry( + logging.Level.FINER, + '[foo.bar.baz.quot] this is a finer message', + 123456); + const entry2 = new logging.Entry( + logging.Level.INFO, + '[foo.bar.baz.quot] this is an info message', + 123456); + const entry3 = new logging.Entry( + logging.Level.WARNING, + '[foo.bar.baz.quot] this is a warning message', + 123456); + const entry4 = new logging.Entry( + logging.Level.SEVERE, + '[foo.bar.baz.quot] this is a severe message', + 123456); + + check(cb1.getCall(0).args[0], entry1); + check(cb1.getCall(1).args[0], entry2); + check(cb1.getCall(2).args[0], entry3); + check(cb1.getCall(3).args[0], entry4); + + check(cb2.getCall(0).args[0], entry1); + check(cb2.getCall(1).args[0], entry2); + check(cb2.getCall(2).args[0], entry3); + check(cb2.getCall(3).args[0], entry4); + + check(cb3.getCall(0).args[0], entry1); + check(cb3.getCall(1).args[0], entry2); + check(cb3.getCall(2).args[0], entry3); + check(cb3.getCall(3).args[0], entry4); + + function check(entry, expected) { + assert.equal(entry.level, expected.level, 'wrong level'); + assert.equal(entry.message, expected.message, 'wrong message'); + assert.equal(entry.timestamp, expected.timestamp, 'wrong time'); + } + }); + + it('does not invoke removed handler', function() { + root.setLevel(logging.Level.INFO); + const cb = sinon.spy(); + + root.addHandler(cb); + root.info('hi'); + assert.equal(1, cb.callCount); + + assert(root.removeHandler(cb)); + root.info('bye'); + assert.equal(1, cb.callCount); + + assert(!root.removeHandler(cb)); + }); + }); + }); + + describe('getLevel()', function() { + it('converts named levels', function() { + assert.strictEqual(logging.Level.DEBUG, logging.getLevel('DEBUG')); + assert.strictEqual(logging.Level.ALL, logging.getLevel('FAKE')); + }); + + it('converts numeric levels', function() { + assert.strictEqual( + logging.Level.DEBUG, + logging.getLevel(logging.Level.DEBUG.value)); + }); + + it('normalizes numeric levels', function() { + assert.strictEqual( + logging.Level.OFF, + logging.getLevel(logging.Level.OFF.value * 2)); + + let diff = logging.Level.SEVERE.value - logging.Level.WARNING.value; + assert.strictEqual( + logging.Level.WARNING, + logging.getLevel(logging.Level.WARNING.value + (diff * .5))); + + assert.strictEqual(logging.Level.ALL, logging.getLevel(0)); + assert.strictEqual(logging.Level.ALL, logging.getLevel(-1)); + }); + }); + + describe('Preferences', function() { + it('can be converted to JSON', function() { + let prefs = new logging.Preferences; + assert.equal('{}', JSON.stringify(prefs)); + + prefs.setLevel('foo', logging.Level.DEBUG); + assert.equal('{"foo":"DEBUG"}', JSON.stringify(prefs)); + + prefs.setLevel(logging.Type.BROWSER, logging.Level.FINE); + assert.equal('{"foo":"DEBUG","browser":"FINE"}', JSON.stringify(prefs)); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/promise_aplus_test.js b/www/node_modules/selenium-webdriver/test/lib/promise_aplus_test.js new file mode 100644 index 0000000..a893915 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/promise_aplus_test.js @@ -0,0 +1,74 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const promise = require('../../lib/promise'); + +describe('Promises/A+ Compliance Tests', function() { + // The promise spec does not define behavior for unhandled rejections and + // assumes they are effectively swallowed. This is not the case with our + // implementation, so we have to disable error propagation to test that the + // rest of our behavior is compliant. + // We run the tests with a separate instance of the control flow to ensure + // disablign error propagation does not impact other tests. + var flow = new promise.ControlFlow(); + flow.setPropagateUnhandledRejections(false); + + // Skip the tests in 2.2.6.1/2. We are not compliant in these scenarios. + var realDescribe = global.describe; + global.describe = function(name, fn) { + realDescribe(name, function() { + var prefix = 'Promises/A+ Compliance Tests 2.2.6: ' + + '`then` may be called multiple times on the same promise.'; + var suffix = 'even when one handler is added inside another handler'; + if (this.fullTitle().startsWith(prefix) + && this.fullTitle().endsWith(suffix)) { + var realSpecify = global.specify; + try { + global.specify = function(name) { + realSpecify(name); + }; + fn(); + } finally { + global.specify = realSpecify; + } + } else { + fn(); + } + }); + }; + + require('promises-aplus-tests').mocha({ + resolved: function(value) { + return new promise.Promise((fulfill) => fulfill(value), flow); + }, + rejected: function(error) { + return new promise.Promise((_, reject) => reject(error), flow); + }, + deferred: function() { + var d = new promise.Deferred(flow); + return { + resolve: d.fulfill, + reject: d.reject, + promise: d.promise + }; + } + }); + + global.describe = realDescribe; +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/promise_error_test.js b/www/node_modules/selenium-webdriver/test/lib/promise_error_test.js new file mode 100644 index 0000000..114189c --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/promise_error_test.js @@ -0,0 +1,808 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Contains tests against promise error handling. Many tests use + * NativePromise to control test termination independent of promise + * (and notably promise.ControlFlow). + */ + +'use strict'; + +const testutil = require('./testutil'); + +const assert = require('assert'); +const promise = require('../../lib/promise'); + +const NativePromise = Promise; +const StubError = testutil.StubError; +const throwStubError = testutil.throwStubError; +const assertIsStubError = testutil.assertIsStubError; + +describe('promise error handling', function() { + var flow, uncaughtExceptions; + + beforeEach(function setUp() { + flow = promise.controlFlow(); + uncaughtExceptions = []; + flow.on('uncaughtException', onUncaughtException); + }); + + afterEach(function tearDown() { + return waitForIdle(flow).then(function() { + assert.deepEqual( + [], uncaughtExceptions, 'There were uncaught exceptions'); + flow.reset(); + }); + }); + + function onUncaughtException(e) { + uncaughtExceptions.push(e); + } + + function waitForAbort(opt_flow, opt_n) { + var n = opt_n || 1; + var theFlow = opt_flow || flow; + theFlow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + return new NativePromise(function(fulfill, reject) { + theFlow.once('idle', function() { + reject(Error('expected flow to report an unhandled error')); + }); + + var errors = []; + theFlow.on('uncaughtException', onError); + function onError(e) { + errors.push(e); + if (errors.length === n) { + theFlow.removeListener('uncaughtException', onError); + fulfill(n === 1 ? errors[0] : errors); + } + } + }); + } + + function waitForIdle(opt_flow) { + var theFlow = opt_flow || flow; + return new NativePromise(function(fulfill, reject) { + if (theFlow.isIdle()) { + fulfill(); + return; + } + theFlow.once('idle', fulfill); + theFlow.once('uncaughtException', reject); + }); + } + + it('testRejectedPromiseTriggersErrorCallback', function() { + return promise.rejected(new StubError). + then(assert.fail, assertIsStubError); + }); + + describe('callback throws trigger subsequent error callback', function() { + it('fulfilled promise', function() { + return promise.fulfilled(). + then(throwStubError). + then(assert.fail, assertIsStubError); + }); + + it('rejected promise', function() { + var e = Error('not the droids you are looking for'); + return promise.rejected(e). + then(assert.fail, throwStubError). + then(assert.fail, assertIsStubError); + }); + }); + + describe('callback returns rejected promise triggers subsequent errback', function() { + it('from fulfilled callback', function() { + return promise.fulfilled().then(function() { + return promise.rejected(new StubError); + }).then(assert.fail, assertIsStubError); + }); + + it('from rejected callback', function() { + var e = Error('not the droids you are looking for'); + return promise.rejected(e). + then(assert.fail, function() { + return promise.rejected(new StubError); + }). + then(assert.fail, assertIsStubError); + }); + }); + + it('testReportsUnhandledRejectionsThroughTheControlFlow', function() { + promise.rejected(new StubError); + return waitForAbort().then(assertIsStubError); + }); + + describe('multiple unhandled rejections outside a task', function() { + it('are reported in order they occurred', function() { + var e1 = Error('error 1'); + var e2 = Error('error 2'); + + promise.rejected(e1); + promise.rejected(e2); + + return waitForAbort(flow).then(function(error) { + assert.ok( + error instanceof promise.MultipleUnhandledRejectionError); + // TODO: switch to Array.from when we drop node 0.12.x + var errors = []; + for (var e of error.errors) { + errors.push(e); + } + assert.deepEqual([e1, e2], errors); + }); + }); + }); + + describe('does not report unhandled rejection when', function() { + it('handler added before next tick', function() { + promise.rejected(new StubError).then(assert.fail, assertIsStubError); + return waitForIdle(); + }); + + it('added async but before next tick', function() { + var called = false; + return new NativePromise(function(fulfill, reject) { + var aPromise; + NativePromise.resolve().then(function() { + aPromise.then(assert.fail, function(e) { + called = true; + assertIsStubError(e); + }); + waitForIdle().then(fulfill, reject); + }); + aPromise = promise.rejected(new StubError); + }).then(function() { + assert.ok(called); + }) + }); + }); + + it('testTaskThrows', function() { + return flow.execute(throwStubError).then(assert.fail, assertIsStubError); + }); + + it('testTaskReturnsRejectedPromise', function() { + return flow.execute(function() { + return promise.rejected(new StubError) + }).then(assert.fail, assertIsStubError); + }); + + it('testTaskHasUnhandledRejection', function() { + return flow.execute(function() { + promise.rejected(new StubError) + }).then(assert.fail, assertIsStubError); + }); + + it('testTaskfails_returnedPromiseIsUnhandled', function() { + flow.execute(throwStubError); + return waitForAbort().then(assertIsStubError); + }); + + it('testTaskHasUnhandledRejection_cancelsRemainingSubTasks', function() { + var seen = []; + flow.execute(function() { + promise.rejected(new StubError); + + flow.execute(() => seen.push('a')) + .then(() => seen.push('b'), (e) => seen.push(e)); + flow.execute(() => seen.push('c')) + .then(() => seen.push('b'), (e) => seen.push(e)); + }); + + return waitForAbort() + .then(assertIsStubError) + .then(() => assert.deepEqual([], seen)); + }); + + describe('nested task failures', function() { + it('returns up to paren', function() { + return flow.execute(function() { + return flow.execute(function() { + return flow.execute(throwStubError); + }); + }).then(assert.fail, assertIsStubError); + }); + + it('task throws; uncaught error bubbles up', function() { + flow.execute(function() { + flow.execute(function() { + flow.execute(throwStubError); + }); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('task throws; uncaught error bubbles up; is caught at root', function() { + flow.execute(function() { + flow.execute(function() { + flow.execute(throwStubError); + }); + }).then(assert.fail, assertIsStubError); + return waitForIdle(); + }); + + it('unhandled rejection bubbles up', function() { + flow.execute(function() { + flow.execute(function() { + flow.execute(function() { + promise.rejected(new StubError); + }); + }); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('unhandled rejection bubbles up; caught at root', function() { + flow.execute(function() { + flow.execute(function() { + promise.rejected(new StubError); + }); + }).then(assert.fail, assertIsStubError); + return waitForIdle(); + }); + + it('mixtureof hanging and free subtasks', function() { + flow.execute(function() { + return flow.execute(function() { + flow.execute(throwStubError); + }); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('cancels remaining tasks', function() { + var seen = []; + flow.execute(function() { + flow.execute(() => promise.rejected(new StubError)); + flow.execute(() => seen.push('a')) + .then(() => seen.push('b'), (e) => seen.push(e)); + flow.execute(() => seen.push('c')) + .then(() => seen.push('b'), (e) => seen.push(e)); + }); + + return waitForAbort() + .then(assertIsStubError) + .then(() => assert.deepEqual([], seen)); + }); + }); + + it('testTaskReturnsPromiseLikeObjectThatInvokesErrback', function() { + return flow.execute(function() { + return { + 'then': function(_, errback) { + errback('abc123'); + } + }; + }).then(assert.fail, function(value) { + assert.equal('abc123', value); + }); + }); + + describe('ControlFlow#wait();', function() { + describe('condition throws;', function() { + it('failure is caught', function() { + return flow.wait(throwStubError, 50).then(assert.fail, assertIsStubError); + }); + + it('failure is not caught', function() { + flow.wait(throwStubError, 50); + return waitForAbort().then(assertIsStubError); + }); + }); + + describe('condition returns promise', function() { + it('failure is caught', function() { + return flow.wait(function() { + return promise.rejected(new StubError); + }, 50).then(assert.fail, assertIsStubError); + }); + + it('failure is not caught', function() { + flow.wait(function() { + return promise.rejected(new StubError); + }, 50); + return waitForAbort().then(assertIsStubError); + }); + }); + + describe('condition has unhandled promise rejection', function() { + it('failure is caught', function() { + return flow.wait(function() { + promise.rejected(new StubError); + }, 50).then(assert.fail, assertIsStubError); + }); + + it('failure is not caught', function() { + flow.wait(function() { + promise.rejected(new StubError); + }, 50); + return waitForAbort().then(assertIsStubError); + }); + }); + + describe('condition has subtask failure', function() { + it('failure is caught', function() { + return flow.wait(function() { + flow.execute(function() { + flow.execute(throwStubError); + }); + }, 50).then(assert.fail, assertIsStubError); + }); + + it('failure is not caught', function() { + flow.wait(function() { + flow.execute(function() { + flow.execute(throwStubError); + }); + }, 50); + return waitForAbort().then(assertIsStubError); + }); + }); + }); + + describe('errback throws a new error', function() { + it('start with normal promise', function() { + var error = Error('an error'); + return promise.rejected(error). + thenCatch(function(e) { + assert.equal(e, error); + throw new StubError; + }). + thenCatch(assertIsStubError); + }); + + it('start with task result', function() { + var error = Error('an error'); + return flow.execute(function() { + throw error; + }). + thenCatch(function(e) { + assert.equal(e, error); + throw new StubError; + }). + thenCatch(assertIsStubError); + }); + + it('start with normal promise; uncaught error', function() { + var error = Error('an error'); + promise.rejected(error). + thenCatch(function(e) { + assert.equal(e, error); + throw new StubError; + }); + return waitForAbort().then(assertIsStubError); + }); + + it('start with task result; uncaught error', function() { + var error = Error('an error'); + flow.execute(function() { + throw error; + }). + thenCatch(function(e) { + assert.equal(e, error); + throw new StubError; + }); + return waitForAbort().then(assertIsStubError); + }); + }); + + it('thrownPromiseCausesCallbackRejection', function() { + let p = promise.fulfilled(1234); + return promise.fulfilled().then(function() { + throw p; + }).then(assert.fail, function(value) { + assert.strictEqual(p, value); + }); + }); + + describe('task throws promise', function() { + it('promise was fulfilled', function() { + var toThrow = promise.fulfilled(1234); + flow.execute(function() { + throw toThrow; + }).then(assert.fail, function(value) { + assert.equal(toThrow, value); + return toThrow; + }).then(function(value) { + assert.equal(1234, value); + }); + return waitForIdle(); + }); + + it('promise was rejected', function() { + var toThrow = promise.rejected(new StubError); + toThrow.thenCatch(function() {}); // For tearDown. + flow.execute(function() { + throw toThrow; + }).then(assert.fail, function(e) { + assert.equal(toThrow, e); + return e; + }).then(assert.fail, assertIsStubError); + return waitForIdle(); + }); + }); + + it('testFailsTaskIfThereIsAnUnhandledErrorWhileWaitingOnTaskResult', function() { + var d = promise.defer(); + flow.execute(function() { + promise.rejected(new StubError); + return d.promise; + }).then(assert.fail, assertIsStubError); + + return waitForIdle().then(function() { + return d.promise; + }).then(assert.fail, function(e) { + assert.equal('CancellationError: StubError', e.toString()); + }); + }); + + it('testFailsParentTaskIfAsyncScheduledTaskFails', function() { + var d = promise.defer(); + flow.execute(function() { + flow.execute(throwStubError); + return d.promise; + }).then(assert.fail, assertIsStubError); + + return waitForIdle().then(function() { + return d.promise; + }).then(assert.fail, function(e) { + assert.equal('CancellationError: StubError', e.toString()); + }); + }); + + describe('long stack traces', function() { + afterEach(() => promise.LONG_STACK_TRACES = false); + + it('always includes task stacks in failures', function() { + promise.LONG_STACK_TRACES = false; + flow.execute(function() { + flow.execute(function() { + flow.execute(throwStubError, 'throw error'); + }, 'two'); + }, 'three'). + then(assert.fail, function(e) { + assertIsStubError(e); + if (typeof e.stack !== 'string') { + return; + } + var messages = e.stack.split(/\n/).filter(function(line, index) { + return /^From: /.test(line); + }); + assert.deepEqual([ + 'From: Task: throw error', + 'From: Task: two', + 'From: Task: three' + ], messages); + }); + return waitForIdle(); + }); + + it('does not include completed tasks', function () { + flow.execute(function() {}, 'succeeds'); + flow.execute(throwStubError, 'kaboom').then(assert.fail, function(e) { + assertIsStubError(e); + if (typeof e.stack !== 'string') { + return; + } + var messages = e.stack.split(/\n/).filter(function(line, index) { + return /^From: /.test(line); + }); + assert.deepEqual(['From: Task: kaboom'], messages); + }); + return waitForIdle(); + }); + + it('does not include promise chain when disabled', function() { + promise.LONG_STACK_TRACES = false; + flow.execute(function() { + flow.execute(function() { + return promise.fulfilled(). + then(function() {}). + then(function() {}). + then(throwStubError); + }, 'eventually assert.fails'); + }, 'start'). + then(assert.fail, function(e) { + assertIsStubError(e); + if (typeof e.stack !== 'string') { + return; + } + var messages = e.stack.split(/\n/).filter(function(line, index) { + return /^From: /.test(line); + }); + assert.deepEqual([ + 'From: Task: eventually assert.fails', + 'From: Task: start' + ], messages); + }); + return waitForIdle(); + }); + + it('includes promise chain when enabled', function() { + promise.LONG_STACK_TRACES = true; + flow.execute(function() { + flow.execute(function() { + return promise.fulfilled(). + then(function() {}). + then(function() {}). + then(throwStubError); + }, 'eventually assert.fails'); + }, 'start'). + then(assert.fail, function(e) { + assertIsStubError(e); + if (typeof e.stack !== 'string') { + return; + } + var messages = e.stack.split(/\n/).filter(function(line, index) { + return /^From: /.test(line); + }); + assert.deepEqual([ + 'From: Promise: then', + 'From: Task: eventually assert.fails', + 'From: Task: start' + ], messages); + }); + return waitForIdle(); + }); + }); + + it('testFrameCancelsRemainingTasks_onUnhandledTaskFailure', function() { + var run = false; + return flow.execute(function() { + flow.execute(throwStubError); + flow.execute(function() { run = true; }); + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.ok(!run); + }); + }); + + it('testFrameCancelsRemainingTasks_onUnhandledPromiseRejection', function() { + var run = false; + return flow.execute(function() { + promise.rejected(new StubError); + flow.execute(function() { run = true; }); + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.ok(!run); + }); + }); + + it('testRegisteredTaskCallbacksAreDroppedWhenTaskIsCancelled_return', function() { + var seen = []; + return flow.execute(function() { + flow.execute(throwStubError); + + flow.execute(function() { + seen.push(1); + }).then(function() { + seen.push(2); + }, function() { + seen.push(3); + }); + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.deepEqual([], seen); + }); + }); + + it('testRegisteredTaskCallbacksAreDroppedWhenTaskIsCancelled_withReturn', function() { + var seen = []; + return flow.execute(function() { + flow.execute(throwStubError); + + return flow.execute(function() { + seen.push(1); + }).then(function() { + seen.push(2); + }, function() { + seen.push(3); + }); + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.deepEqual([], seen); + }); + }); + + it('testTasksWithinACallbackAreDroppedIfContainingTaskIsAborted', function() { + var seen = []; + return flow.execute(function() { + flow.execute(throwStubError); + + // None of the callbacks on this promise should execute because the + // task assert.failure above is never handled, causing the containing task to + // abort. + promise.fulfilled().then(function() { + seen.push(1); + return flow.execute(function() { + seen.push(2); + }); + }).thenFinally(function() { + seen.push(3); + }); + + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.deepEqual([], seen); + }); + }); + + it('testTaskIsCancelledAfterWaitTimeout', function() { + var seen = []; + return flow.execute(function() { + flow.wait(function() { + return promise.delayed(50); + }, 5); + + return flow.execute(function() { + seen.push(1); + }).then(function() { + seen.push(2); + }, function() { + seen.push(3); + }); + }).then(assert.fail, function() { + assert.deepEqual([], seen); + }); + }); + + describe('task callbacks get cancellation error if registered after task was cancelled', function() { + it('(a)', function() { + var task; + flow.execute(function() { + flow.execute(throwStubError); + task = flow.execute(function() {}); + }).then(assert.fail, assertIsStubError); + return waitForIdle().then(function() { + return task.then(assert.fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + }); + }); + }); + + it('(b)', function() { + var seen = []; + + var task; + flow.execute(function() { + flow.execute(throwStubError); + task = flow.execute(function() {}); + + task.then(() => seen.push(1)) + .then(() => seen.push(2)); + task.then(() => seen.push(3)) + .then(() => seen.push(4)); + + }).then(assert.fail, assertIsStubError); + + return waitForIdle().then(function() { + return task.then(assert.fail, function(e) { + seen.push(5); + assert.ok(e instanceof promise.CancellationError); + }); + }).then(() => assert.deepEqual([5], seen)); + }); + }); + + it('unhandledRejectionInParallelTaskQueue', function() { + var seen = []; + function schedule(name) { + return flow.execute(() => seen.push(name), name); + } + + flow.async(function() { + schedule('a.1'); + flow.execute(throwStubError, 'a.2 (throws)'); + }); + + var b3; + flow.async(function() { + schedule('b.1'); + schedule('b.2'); + b3 = schedule('b.3'); + }); + + var c3; + flow.async(function() { + schedule('c.1'); + schedule('c.2'); + c3 = schedule('c.3'); + }); + + function assertWasCancelled(p) { + return p.then(assert.fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + }); + } + + return waitForAbort() + .then(function() { + assert.deepEqual(['a.1', 'b.1', 'c.1', 'b.2', 'c.2'], seen); + assert.ok(!b3.isPending()); + assert.ok(!c3.isPending()); + }) + .then(() => assertWasCancelled(b3)) + .then(() => assertWasCancelled(c3)); + }); + + it('errorsInAsyncFunctionsAreReportedAsUnhandledRejection', function() { + flow.removeAllListeners(); // For tearDown. + + var task; + return new Promise(function(fulfill) { + flow.once('uncaughtException', fulfill); + flow.async(function() { + task = flow.execute(function() {}); + throw Error('boom'); + }); + }).then(function(error) { + assert.ok(error instanceof promise.CancellationError); + assert.ok(!task.isPending()); + return task.thenCatch(function(error) { + assert.ok(error instanceof promise.CancellationError); + }); + }); + }); + + describe('does not wait for values thrown from callbacks to be resolved', function() { + it('(a)', function() { + var p1 = promise.fulfilled(); + var reason = promise.fulfilled('should not see me'); + return p1.then(function() { + throw reason; + }).then(assert.fail, function(e) { + assert.equal(reason, e); + }); + }); + + it('(b)', function() { + var p1 = promise.fulfilled(); + var reason = promise.rejected('should not see me'); + reason.thenCatch(function() {}); // For tearDown. + return p1.then(function() { + throw reason; + }).then(assert.fail, function(e) { + assert.equal(reason, e); + }); + }); + + it('(c)', function() { + var p1 = promise.fulfilled(); + var reason = promise.defer(); + setTimeout(() => reason.fulfill('should not see me'), 100); + return p1.then(function() { + throw reason.promise; + }).then(assert.fail, function(e) { + assert.equal(reason.promise, e); + }); + }); + + it('(d)', function() { + var p1 = promise.fulfilled(); + var reason = {then: function() {}}; // A thenable like object. + return p1.then(function() { + throw reason; + }).then(assert.fail, function(e) { + assert.equal(reason, e); + }); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/promise_flow_test.js b/www/node_modules/selenium-webdriver/test/lib/promise_flow_test.js new file mode 100644 index 0000000..fd4469d --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/promise_flow_test.js @@ -0,0 +1,2282 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); +const fail = assert.fail; +const sinon = require('sinon'); + +const testutil = require('./testutil'); +const promise = require('../../lib/promise'); + +const NativePromise = Promise; + +// Aliases for readability. +const StubError = testutil.StubError; +const assertIsStubError = testutil.assertIsStubError; +const callbackPair = testutil.callbackPair; +const throwStubError = testutil.throwStubError; + +describe('promise control flow', function() { + let flow, flowHistory, messages, uncaughtExceptions; + + beforeEach(function setUp() { + promise.LONG_STACK_TRACES = false; + flow = new promise.ControlFlow(); + promise.setDefaultFlow(flow); + messages = []; + flowHistory = []; + + uncaughtExceptions = []; + flow.on(promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, + onUncaughtException); + }); + + afterEach(function tearDown() { + flow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + assert.deepEqual([], uncaughtExceptions, + 'There were uncaught exceptions'); + flow.reset(); + promise.LONG_STACK_TRACES = false; + }); + + function onUncaughtException(e) { + uncaughtExceptions.push(e); + } + + function waitForAbort(opt_flow) { + var theFlow = opt_flow || flow; + theFlow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + return new NativePromise(function(fulfill, reject) { + theFlow.once(promise.ControlFlow.EventType.IDLE, function() { + reject(Error('expected flow to report an unhandled error')); + }); + theFlow.once( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, + fulfill); + }); + } + + function waitForIdle(opt_flow) { + var theFlow = opt_flow || flow; + return new NativePromise(function(fulfill, reject) { + theFlow.once(promise.ControlFlow.EventType.IDLE, fulfill); + theFlow.once( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, reject); + }); + } + + function timeout(ms) { + return new NativePromise(function(fulfill) { + setTimeout(fulfill, ms); + }); + } + + + function schedule(msg, opt_return) { + return scheduleAction(msg, function() { + return opt_return; + }); + } + + /** + * @param {string} value The value to push. + * @param {promise.Promise=} opt_taskPromise Promise to return from + * the task. + * @return {!promise.Promise} The result. + */ + function schedulePush(value, opt_taskPromise) { + return scheduleAction(value, function() { + messages.push(value); + return opt_taskPromise; + }); + } + + /** + * @param {string} msg Debug message. + * @param {!Function} actionFn The function. + * @return {!promise.Promise} The function result. + */ + function scheduleAction(msg, actionFn) { + return promise.controlFlow().execute(function() { + flowHistory.push(msg); + return actionFn(); + }, msg); + } + + /** + * @param {!Function} condition The condition function. + * @param {number=} opt_timeout The timeout. + * @param {string=} opt_message Optional message. + * @return {!promise.Promise} The wait result. + */ + function scheduleWait(condition, opt_timeout, opt_message) { + var msg = opt_message || ''; + // It's not possible to hook into when the wait itself is scheduled, so + // we record each iteration of the wait loop. + var count = 0; + return promise.controlFlow().wait(function() { + flowHistory.push((count++) + ': ' + msg); + return condition(); + }, opt_timeout, msg); + } + + function asyncRun(fn, opt_self) { + NativePromise.resolve().then(() => fn.call(opt_self)); + } + + function assertFlowHistory(var_args) { + var expected = Array.prototype.slice.call(arguments, 0); + assert.deepEqual(expected, flowHistory); + } + + function assertMessages(var_args) { + var expected = Array.prototype.slice.call(arguments, 0); + assert.deepEqual(expected, messages); + } + + function assertingMessages(var_args) { + var args = Array.prototype.slice.call(arguments, 0); + return () => assertMessages.apply(null, args); + } + + function assertFlowIs(flow) { + assert.equal(flow, promise.controlFlow()); + } + + describe('testScheduling', function() { + it('aSimpleFunction', function() { + schedule('go'); + return waitForIdle().then(function() { + assertFlowHistory('go'); + }); + }); + + it('aSimpleFunctionWithANonPromiseReturnValue', function() { + schedule('go', 123).then(function(value) { + assert.equal(123, value); + }); + return waitForIdle().then(function() { + assertFlowHistory('go'); + }); + }); + + it('aSimpleSequence', function() { + schedule('a'); + schedule('b'); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('invokesCallbacksWhenTaskIsDone', function() { + var d = new promise.Deferred(); + var called = false; + var done = schedule('a', d.promise).then(function(value) { + called = true; + assert.equal(123, value); + }); + return timeout(5).then(function() { + assert.ok(!called); + d.fulfill(123); + return done; + }). + then(function() { + assertFlowHistory('a'); + }); + }); + + it('blocksUntilPromiseReturnedByTaskIsResolved', function() { + var done = promise.defer(); + schedulePush('a', done.promise); + schedulePush('b'); + setTimeout(function() { + done.fulfill(); + messages.push('c'); + }, 25); + return waitForIdle().then(assertingMessages('a', 'c', 'b')); + }); + + it('waitsForReturnedPromisesToResolve', function() { + var d1 = new promise.Deferred(); + var d2 = new promise.Deferred(); + + var callback = sinon.spy(); + schedule('a', d1.promise).then(callback); + + return timeout(5).then(function() { + assert(!callback.called); + d1.fulfill(d2); + return timeout(5); + }).then(function() { + assert(!callback.called); + d2.fulfill('fluffy bunny'); + return waitForIdle(); + }).then(function() { + assert(callback.called); + assert.equal('fluffy bunny', callback.getCall(0).args[0]); + assertFlowHistory('a'); + }); + }); + + it('executesTasksInAFutureTurnAfterTheyAreScheduled', function() { + var count = 0; + function incr() { count++; } + + scheduleAction('', incr); + assert.equal(0, count); + return waitForIdle().then(function() { + assert.equal(1, count); + }); + }); + + it('executesOneTaskPerTurnOfTheEventLoop', function() { + var order = []; + function go() { + order.push(order.length / 2); + asyncRun(function() { + order.push('-'); + }); + } + + scheduleAction('', go); + scheduleAction('', go); + return waitForIdle().then(function() { + assert.deepEqual([0, '-', 1, '-'], order); + }) + }); + + it('firstScheduledTaskIsWithinACallback', function() { + promise.fulfilled().then(function() { + schedule('a'); + schedule('b'); + schedule('c'); + }).then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + return waitForIdle(); + }); + + it('newTasksAddedWhileWaitingOnTaskReturnedPromise1', function() { + scheduleAction('a', function() { + var d = promise.defer(); + setTimeout(function() { + schedule('c'); + d.fulfill(); + }, 10); + return d.promise; + }); + schedule('b'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('newTasksAddedWhileWaitingOnTaskReturnedPromise2', function() { + scheduleAction('a', function() { + var d = promise.defer(); + setTimeout(function() { + schedule('c'); + asyncRun(d.fulfill); + }, 10); + return d.promise; + }); + schedule('b'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'b'); + }); + }); + }); + + describe('testFraming', function() { + it('callbacksRunInANewFrame', function() { + schedule('a').then(function() { + schedule('c'); + }); + schedule('b'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'b'); + }); + }); + + it('lotsOfNesting', function() { + schedule('a').then(function() { + schedule('c').then(function() { + schedule('e').then(function() { + schedule('g'); + }); + schedule('f'); + }); + schedule('d'); + }); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'e', 'g', 'f', 'd', 'b'); + }); + }); + + it('callbackReturnsPromiseThatDependsOnATask_1', function() { + schedule('a').then(function() { + schedule('b'); + return promise.delayed(5).then(function() { + return schedule('c'); + }); + }); + schedule('d'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd'); + }); + }); + + it('callbackReturnsPromiseThatDependsOnATask_2', function() { + schedule('a').then(function() { + schedule('b'); + return promise.delayed(5). + then(function() { return promise.delayed(5) }). + then(function() { return promise.delayed(5) }). + then(function() { return promise.delayed(5) }). + then(function() { return schedule('c'); }); + }); + schedule('d'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd'); + }); + }); + + it('eachCallbackWaitsForAllScheduledTasksToComplete', function() { + schedule('a'). + then(function() { + schedule('b'); + schedule('c'); + }). + then(function() { + schedule('d'); + }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('eachCallbackWaitsForReturnTasksToComplete', function() { + schedule('a'). + then(function() { + schedule('b'); + return schedule('c'); + }). + then(function() { + schedule('d'); + }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('callbacksOnAResolvedPromiseInsertIntoTheCurrentFlow', function() { + promise.fulfilled().then(function() { + schedule('b'); + }); + schedule('a'); + + return waitForIdle().then(function() { + assertFlowHistory('b', 'a'); + }); + }); + + it('callbacksInterruptTheFlowWhenPromiseIsResolved', function() { + schedule('a').then(function() { + schedule('c'); + }); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'b'); + }); + }); + + it('allCallbacksInAFrameAreScheduledWhenPromiseIsResolved', function() { + var a = schedule('a'); + a.then(function() { schedule('b'); }); + schedule('c'); + a.then(function() { schedule('d'); }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('tasksScheduledInInActiveFrameDoNotGetPrecedence', function() { + var d = promise.fulfilled(); + schedule('a'); + schedule('b'); + d.then(function() { schedule('c'); }); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('tasksScheduledInAFrameGetPrecedence_1', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { + schedule('c'); + schedule('d'); + }); + var e = schedule('e'); + a.then(function() { + schedule('f'); + e.then(function() { + schedule('g'); + }); + schedule('h'); + }); + schedule('i'); + }); + schedule('j'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + }); + }); + }); + + describe('testErrorHandling', function() { + it('thrownErrorsArePassedToTaskErrback', function() { + scheduleAction('function that throws', throwStubError). + then(fail, assertIsStubError); + return waitForIdle(); + }); + + it('thrownErrorsPropagateThroughPromiseChain', function() { + scheduleAction('function that throws', throwStubError). + then(fail). + then(fail, assertIsStubError); + return waitForIdle(); + }); + + it('catchesErrorsFromFailedTasksInAFrame', function() { + schedule('a').then(function() { + schedule('b'); + scheduleAction('function that throws', throwStubError); + }). + then(fail, assertIsStubError); + return waitForIdle(); + }); + + it('abortsIfOnlyTaskReturnsAnUnhandledRejection', function() { + scheduleAction('function that returns rejected promise', function() { + return promise.rejected(new StubError); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('abortsIfThereIsAnUnhandledRejection', function() { + promise.rejected(new StubError); + schedule('this should not run'); + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory(/* none */); + }); + }); + + it('abortsSequenceIfATaskFails', function() { + schedule('a'); + schedule('b'); + scheduleAction('c', throwStubError); + schedule('d'); // Should never execute. + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('abortsFromUnhandledFramedTaskFailures_1', function() { + schedule('outer task').then(function() { + scheduleAction('inner task', throwStubError); + }); + schedule('this should not run'); + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('outer task', 'inner task'); + }); + }); + + it('abortsFromUnhandledFramedTaskFailures_2', function() { + schedule('a').then(function() { + schedule('b').then(function() { + scheduleAction('c', throwStubError); + // This should not execute. + schedule('d'); + }); + }); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('abortsWhenErrorBubblesUpFromFullyResolvingAnObject', function() { + var callback = sinon.spy(); + + scheduleAction('', function() { + var obj = {'foo': promise.rejected(new StubError)}; + return promise.fullyResolved(obj).then(callback); + }); + + return waitForAbort(). + then(assertIsStubError). + then(() => assert(!callback.called)); + }); + + it('abortsWhenErrorBubblesUpFromFullyResolvingAnObject_withCallback', function() { + var callback1 = sinon.spy(); + var callback2 = sinon.spy(); + + scheduleAction('', function() { + var obj = {'foo': promise.rejected(new StubError)}; + return promise.fullyResolved(obj).then(callback1); + }).then(callback2); + + return waitForAbort(). + then(assertIsStubError). + then(() => assert(!callback1.called)). + then(() => assert(!callback2.called)); + }); + + it('canCatchErrorsFromNestedTasks', function() { + var errback = sinon.spy(); + schedule('a'). + then(function() { + return scheduleAction('b', throwStubError); + }). + thenCatch(errback); + return waitForIdle().then(function() { + assert(errback.called); + assertIsStubError(errback.getCall(0).args[0]); + }); + }); + + it('nestedCommandFailuresCanBeCaughtAndSuppressed', function() { + var errback = sinon.spy(); + schedule('a').then(function() { + return schedule('b').then(function() { + return schedule('c').then(function() { + throw new StubError; + }); + }); + }).thenCatch(errback); + schedule('d'); + return waitForIdle(). + then(function() { + assert(errback.called); + assertIsStubError(errback.getCall(0).args[0]); + assertFlowHistory('a', 'b', 'c', 'd'); + }); + }); + + it('aTaskWithAnUnhandledPromiseRejection', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + promise.rejected(new StubError); + }); + schedule('should never run'); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'sub-tasks'); + }); + }); + + it('aTaskThatReutrnsARejectedPromise', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + return promise.rejected(new StubError); + }); + schedule('should never run'); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'sub-tasks'); + }); + }); + + it('discardsSubtasksIfTaskThrows', function() { + var pair = callbackPair(null, assertIsStubError); + scheduleAction('a', function() { + schedule('b'); + schedule('c'); + throwStubError(); + }).then(pair.callback, pair.errback); + schedule('d'); + + return waitForIdle(). + then(pair.assertErrback). + then(function() { + assertFlowHistory('a', 'd'); + }); + }); + + it('discardsRemainingSubtasksIfASubtaskFails', function() { + var pair = callbackPair(null, assertIsStubError); + scheduleAction('a', function() { + schedule('b'); + scheduleAction('c', throwStubError); + schedule('d'); + }).then(pair.callback, pair.errback); + schedule('e'); + + return waitForIdle(). + then(pair.assertErrback). + then(function() { + assertFlowHistory('a', 'b', 'c', 'e'); + }); + }); + }); + + describe('testTryModelingFinally', function() { + it('happyPath', function() { + /* Model: + try { + doFoo(); + doBar(); + } finally { + doBaz(); + } + */ + schedulePush('foo'). + then(() => schedulePush('bar')). + thenFinally(() => schedulePush('baz')); + return waitForIdle().then(assertingMessages('foo', 'bar', 'baz')); + }); + + it('firstTryFails', function() { + /* Model: + try { + doFoo(); + doBar(); + } finally { + doBaz(); + } + */ + + scheduleAction('doFoo and throw', function() { + messages.push('foo'); + throw new StubError; + }). + then(function() { schedulePush('bar'); }). + thenFinally(function() { schedulePush('baz'); }); + + return waitForAbort(). + then(assertIsStubError). + then(assertingMessages('foo', 'baz')); + }); + + it('secondTryFails', function() { + /* Model: + try { + doFoo(); + doBar(); + } finally { + doBaz(); + } + */ + + schedulePush('foo'). + then(function() { + return scheduleAction('doBar and throw', function() { + messages.push('bar'); + throw new StubError; + }); + }). + thenFinally(function() { + return schedulePush('baz'); + }); + return waitForAbort(). + then(assertIsStubError). + then(assertingMessages('foo', 'bar', 'baz')); + }); + }); + + describe('testTaskCallbacksInterruptFlow', function() { + it('(base case)', function() { + schedule('a').then(function() { + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskDependsOnImmediatelyFulfilledPromise', function() { + scheduleAction('a', function() { + return promise.fulfilled(); + }).then(function() { + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskDependsOnPreviouslyFulfilledPromise', function() { + var aPromise = promise.fulfilled(123); + scheduleAction('a', function() { + return aPromise; + }).then(function(value) { + assert.equal(123, value); + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskDependsOnAsyncPromise', function() { + scheduleAction('a', function() { + return promise.delayed(25); + }).then(function() { + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('promiseChainedToTaskInterruptFlow', function() { + schedule('a').then(function() { + return promise.fulfilled(); + }).then(function() { + return promise.fulfilled(); + }).then(function() { + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('nestedTaskCallbacksInterruptFlowWhenResolved', function() { + schedule('a').then(function() { + schedule('b').then(function() { + schedule('c'); + }); + }); + schedule('d'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd'); + }); + }); + }); + + describe('testDelayedNesting', function() { + + it('1', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { schedule('c'); }); + schedule('d'); + }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('2', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { schedule('c'); }); + schedule('d'); + a.then(function() { schedule('e'); }); + }); + schedule('f'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e', 'f'); + }); + }); + + it('3', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { schedule('c'); }); + a.then(function() { schedule('d'); }); + }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('4', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { schedule('c'); }).then(function() { + schedule('d'); + }); + a.then(function() { schedule('e'); }); + }); + schedule('f'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e', 'f'); + }); + }); + + it('5', function() { + var a = schedule('a'); + schedule('b').then(function() { + var c; + a.then(function() { c = schedule('c'); }).then(function() { + schedule('d'); + a.then(function() { schedule('e'); }); + c.then(function() { schedule('f'); }); + schedule('g'); + }); + a.then(function() { schedule('h'); }); + }); + schedule('i'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'); + }); + }); + }); + + describe('testWaiting', function() { + it('onAConditionThatIsAlwaysTrue', function() { + scheduleWait(function() { return true;}, 0, 'waiting on true'); + return waitForIdle().then(function() { + assertFlowHistory('0: waiting on true'); + }); + }); + + it('aSimpleCountingCondition', function() { + var count = 0; + scheduleWait(function() { + return ++count == 3; + }, 100, 'counting to 3'); + + return waitForIdle().then(function() { + assert.equal(3, count); + }); + }); + + it('aConditionThatReturnsAPromise', function() { + var d = new promise.Deferred(); + var count = 0; + + scheduleWait(function() { + count += 1; + return d.promise; + }, 0, 'waiting for promise'); + + return timeout(50).then(function() { + assert.equal(1, count); + d.fulfill(123); + return waitForIdle(); + }); + }); + + it('aConditionThatReturnsAPromise_2', function() { + var count = 0; + scheduleWait(function() { + return promise.fulfilled(++count == 3); + }, 100, 'waiting for promise'); + + return waitForIdle().then(function() { + assert.equal(3, count); + }); + }); + + it('aConditionThatReturnsATaskResult', function() { + var count = 0; + scheduleWait(function() { + return scheduleAction('increment count', function() { + return ++count == 3; + }); + }, 100, 'counting to 3'); + schedule('post wait'); + + return waitForIdle().then(function() { + assert.equal(3, count); + assertFlowHistory( + '0: counting to 3', 'increment count', + '1: counting to 3', 'increment count', + '2: counting to 3', 'increment count', + 'post wait'); + }); + }); + + it('conditionContainsASubtask', function() { + var count = 0; + scheduleWait(function() { + schedule('sub task'); + return ++count == 3; + }, 100, 'counting to 3'); + schedule('post wait'); + + return waitForIdle().then(function() { + assert.equal(3, count); + assertFlowHistory( + '0: counting to 3', 'sub task', + '1: counting to 3', 'sub task', + '2: counting to 3', 'sub task', + 'post wait'); + }); + }); + + it('cancelsWaitIfScheduledTaskFails', function() { + var pair = callbackPair(null, assertIsStubError); + scheduleWait(function() { + scheduleAction('boom', throwStubError); + schedule('this should not run'); + return true; + }, 100, 'waiting to go boom').then(pair.callback, pair.errback); + schedule('post wait'); + + return waitForIdle(). + then(pair.assertErrback). + then(function() { + assertFlowHistory( + '0: waiting to go boom', 'boom', + 'post wait'); + }); + }); + + it('failsIfConditionThrows', function() { + var callbacks = callbackPair(null, assertIsStubError); + scheduleWait(throwStubError, 0, 'goes boom'). + then(callbacks.callback, callbacks.errback); + schedule('post wait'); + + return waitForIdle(). + then(callbacks.assertErrback). + then(function() { + assertFlowHistory('0: goes boom', 'post wait'); + }); + }); + + it('failsIfConditionReturnsARejectedPromise', function() { + var callbacks = callbackPair(null, assertIsStubError); + scheduleWait(function() { + return promise.rejected(new StubError); + }, 0, 'goes boom').then(callbacks.callback, callbacks.errback); + schedule('post wait'); + + return waitForIdle(). + then(callbacks.assertErrback). + then(function() { + assertFlowHistory('0: goes boom', 'post wait'); + }); + }); + + it('failsIfConditionHasUnhandledRejection', function() { + var callbacks = callbackPair(null, assertIsStubError); + scheduleWait(function() { + promise.controlFlow().execute(throwStubError); + }, 0, 'goes boom').then(callbacks.callback, callbacks.errback); + schedule('post wait'); + + return waitForIdle(). + then(callbacks.assertErrback). + then(function() { + assertFlowHistory('0: goes boom', 'post wait'); + }); + }); + + it('failsIfConditionHasAFailedSubtask', function() { + var callbacks = callbackPair(null, assertIsStubError); + var count = 0; + scheduleWait(function() { + scheduleAction('maybe throw', function() { + if (++count == 2) { + throw new StubError; + } + }); + }, 100, 'waiting').then(callbacks.callback, callbacks.errback); + schedule('post wait'); + + return waitForIdle().then(function() { + assert.equal(2, count); + assertFlowHistory( + '0: waiting', 'maybe throw', + '1: waiting', 'maybe throw', + 'post wait'); + }); + }); + + it('pollingLoopWaitsForAllScheduledTasksInCondition', function() { + var count = 0; + scheduleWait(function() { + scheduleAction('increment count', function() { ++count; }); + return count >= 3; + }, 100, 'counting to 3'); + schedule('post wait'); + + return waitForIdle().then(function() { + assert.equal(4, count); + assertFlowHistory( + '0: counting to 3', 'increment count', + '1: counting to 3', 'increment count', + '2: counting to 3', 'increment count', + '3: counting to 3', 'increment count', + 'post wait'); + }); + }); + + it('waitsForeverOnAZeroTimeout', function() { + var done = false; + setTimeout(function() { + done = true; + }, 150); + var waitResult = scheduleWait(function() { + return done; + }, 0); + + return timeout(75).then(function() { + assert.ok(!done); + return timeout(100); + }).then(function() { + assert.ok(done); + return waitResult; + }); + }); + + it('waitsForeverIfTimeoutOmitted', function() { + var done = false; + setTimeout(function() { + done = true; + }, 150); + var waitResult = scheduleWait(function() { + return done; + }); + + return timeout(75).then(function() { + assert.ok(!done); + return timeout(100); + }).then(function() { + assert.ok(done); + return waitResult; + }); + }); + + it('timesOut_nonZeroTimeout', function() { + var count = 0; + scheduleWait(function() { + count += 1; + var ms = count === 2 ? 65 : 5; + return promise.delayed(ms).then(function() { + return false; + }); + }, 60, 'counting to 3'); + return waitForAbort().then(function(e) { + switch (count) { + case 1: + assertFlowHistory('0: counting to 3'); + break; + case 2: + assertFlowHistory('0: counting to 3', '1: counting to 3'); + break; + default: + fail('unexpected polling count: ' + count); + } + assert.ok( + /^counting to 3\nWait timed out after \d+ms$/.test(e.message)); + }); + }); + + it('shouldFailIfConditionReturnsARejectedPromise', function() { + scheduleWait(function() { + return promise.rejected(new StubError); + }, 100, 'returns rejected promise on first pass'); + return waitForAbort().then(assertIsStubError); + }); + + it('scheduleWithIntermittentWaits', function() { + schedule('a'); + scheduleWait(function() { return true; }, 0, 'wait 1'); + schedule('b'); + scheduleWait(function() { return true; }, 0, 'wait 2'); + schedule('c'); + scheduleWait(function() { return true; }, 0, 'wait 3'); + + return waitForIdle().then(function() { + assertFlowHistory('a', '0: wait 1', 'b', '0: wait 2', 'c', '0: wait 3'); + }); + }); + + it('scheduleWithIntermittentAndNestedWaits', function() { + schedule('a'); + scheduleWait(function() { return true; }, 0, 'wait 1'). + then(function() { + schedule('d'); + scheduleWait(function() { return true; }, 0, 'wait 2'); + schedule('e'); + }); + schedule('b'); + scheduleWait(function() { return true; }, 0, 'wait 3'); + schedule('c'); + scheduleWait(function() { return true; }, 0, 'wait 4'); + + return waitForIdle().then(function() { + assertFlowHistory( + 'a', '0: wait 1', 'd', '0: wait 2', 'e', 'b', '0: wait 3', 'c', + '0: wait 4'); + }); + }); + + it('requiresConditionToBeAPromiseOrFunction', function() { + assert.throws(function() { + flow.wait(1234, 0); + }); + flow.wait(function() { return true;}, 0); + flow.wait(promise.fulfilled(), 0); + return waitForIdle(); + }); + + it('promiseThatDoesNotResolveBeforeTimeout', function() { + var d = promise.defer(); + flow.wait(d.promise, 5).then(fail, function(e) { + assert.ok( + /Timed out waiting for promise to resolve after \d+ms/ + .test(e.message), + 'unexpected error message: ' + e.message); + }); + return waitForIdle().then(function() { + assert.ok('Promise should not be cancelled', d.promise.isPending()); + }); + }); + + it('unboundedWaitOnPromiseResolution', function() { + var messages = []; + var d = promise.defer(); + var waitResult = flow.wait(d.promise).then(function(value) { + messages.push('b'); + assert.equal(1234, value); + }); + setTimeout(function() { + messages.push('a'); + }, 5); + + timeout(10).then(function() { + assert.deepEqual(['a'], messages); + assert.ok(waitResult.isPending()); + d.fulfill(1234); + return waitResult; + }).then(function() { + assert.deepEqual(['a', 'b'], messages); + }); + + return waitForIdle(); + }); + }); + + describe('testSubtasks', function() { + it('(base case)', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + schedule('c'); + schedule('d'); + }); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'sub-tasks', 'c', 'd', 'b'); + }); + }); + + it('nesting', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + schedule('b'); + scheduleAction('sub-sub-tasks', function() { + schedule('c'); + schedule('d'); + }); + schedule('e'); + }); + schedule('f'); + + return waitForIdle().then(function() { + assertFlowHistory( + 'a', 'sub-tasks', 'b', 'sub-sub-tasks', 'c', 'd', 'e', 'f'); + }); + }); + + it('taskReturnsSubTaskResult_1', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + return schedule('c'); + }); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'sub-tasks', 'c', 'b'); + }); + }); + + it('taskReturnsSubTaskResult_2', function() { + let pair = callbackPair((value) => assert.equal(123, value)); + schedule('a'); + schedule('sub-tasks', promise.fulfilled(123)).then(pair.callback); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'sub-tasks','b'); + pair.assertCallback(); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_1', function() { + scheduleAction('a', function() { + return promise.delayed(10).then(function() { + schedule('b'); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_2', function() { + scheduleAction('a', function() { + return promise.fulfilled().then(function() { + schedule('b'); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_3', function() { + scheduleAction('a', function() { + return promise.delayed(10).then(function() { + return schedule('b'); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_4', function() { + scheduleAction('a', function() { + return promise.delayed(5).then(function() { + return promise.delayed(5).then(function() { + return schedule('b'); + }); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_5', function() { + scheduleAction('a', function() { + return promise.delayed(5).then(function() { + return promise.delayed(5).then(function() { + return promise.delayed(5).then(function() { + return promise.delayed(5).then(function() { + return schedule('b'); + }); + }); + }); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_6', function() { + scheduleAction('a', function() { + return promise.delayed(5). + then(function() { return promise.delayed(5) }). + then(function() { return promise.delayed(5) }). + then(function() { return promise.delayed(5) }). + then(function() { return schedule('b'); }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('subTaskFails_1', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + scheduleAction('sub-task that fails', throwStubError); + }); + schedule('should never execute'); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'sub-tasks', 'sub-task that fails'); + }); + }); + + it('subTaskFails_2', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + return promise.rejected(new StubError); + }); + schedule('should never execute'); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'sub-tasks'); + }); + }); + + it('subTaskFails_3', function() { + var callbacks = callbackPair(null, assertIsStubError); + + schedule('a'); + scheduleAction('sub-tasks', function() { + return promise.rejected(new StubError); + }).then(callbacks.callback, callbacks.errback); + schedule('b'); + + return waitForIdle(). + then(function() { + assertFlowHistory('a', 'sub-tasks', 'b'); + callbacks.assertErrback(); + }); + }); + }); + + describe('testEventLoopWaitsOnPendingPromiseRejections', function() { + it('oneRejection', function() { + var d = new promise.Deferred; + scheduleAction('one', function() { + return d.promise; + }); + scheduleAction('two', function() {}); + + return timeout(50).then(function() { + assertFlowHistory('one'); + d.reject(new StubError); + return waitForAbort(); + }). + then(assertIsStubError). + then(function() { + assertFlowHistory('one'); + }); + }); + + it('multipleRejections', function() { + var once = Error('once'); + var twice = Error('twice'); + + scheduleAction('one', function() { + promise.rejected(once); + promise.rejected(twice); + }); + var twoResult = scheduleAction('two', function() {}); + + flow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + return new NativePromise(function(fulfill, reject) { + setTimeout(function() { + reject(Error('Should have reported the two errors by now')); + }, 50); + flow.on( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, + fulfill); + }).then(function(e) { + assert.ok(e instanceof promise.MultipleUnhandledRejectionError, + 'Not a MultipleUnhandledRejectionError'); + let errors = Array.from(e.errors); + assert.deepEqual([once, twice], errors); + assertFlowHistory('one'); + assert.ok(!twoResult.isPending(), 'Did not cancel the second task'); + }); + }); + }); + + describe('testCancelsPromiseReturnedByCallbackIfFrameFails', function() { + it('promiseCallback', function() { + var chainPair = callbackPair(null, assertIsStubError); + var deferredPair = callbackPair(null, function(e) { + assert.equal('CancellationError: StubError', e.toString(), + 'callback result should be cancelled'); + }); + + var d = new promise.Deferred(); + d.then(deferredPair.callback, deferredPair.errback); + + promise.fulfilled(). + then(function() { + scheduleAction('boom', throwStubError); + schedule('this should not run'); + return d.promise; + }). + then(chainPair.callback, chainPair.errback); + + return waitForIdle().then(function() { + assertFlowHistory('boom'); + chainPair.assertErrback('chain errback not invoked'); + deferredPair.assertErrback('deferred errback not invoked'); + }); + }); + + it('taskCallback', function() { + var chainPair = callbackPair(null, assertIsStubError); + var deferredPair = callbackPair(null, function(e) { + assert.equal('CancellationError: StubError', e.toString(), + 'callback result should be cancelled'); + }); + + var d = new promise.Deferred(); + d.then(deferredPair.callback, deferredPair.errback); + + schedule('a'). + then(function() { + scheduleAction('boom', throwStubError); + schedule('this should not run'); + return d.promise; + }). + then(chainPair.callback, chainPair.errback); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'boom'); + chainPair.assertErrback('chain errback not invoked'); + deferredPair.assertErrback('deferred errback not invoked'); + }); + }); + }); + + it('testMaintainsOrderInCallbacksWhenATaskReturnsAPromise', function() { + schedule('__start__', promise.fulfilled()). + then(function() { + messages.push('a'); + schedulePush('b'); + messages.push('c'); + }). + then(function() { + messages.push('d'); + }); + schedulePush('e'); + + return waitForIdle().then(function() { + assertFlowHistory('__start__', 'b', 'e'); + assertMessages('a', 'c', 'b', 'd', 'e'); + }); + }); + + it('testOwningFlowIsActivatedForExecutingTasks', function() { + var defaultFlow = promise.controlFlow(); + var order = []; + + promise.createFlow(function(flow) { + assertFlowIs(flow); + order.push(0); + + defaultFlow.execute(function() { + assertFlowIs(defaultFlow); + order.push(1); + }); + }); + + return waitForIdle().then(function() { + assertFlowIs(defaultFlow); + assert.deepEqual([0, 1], order); + }); + }); + + it('testCreateFlowReturnsPromisePairedWithCreatedFlow', function() { + return new NativePromise(function(fulfill, reject) { + var newFlow; + promise.createFlow(function(flow) { + newFlow = flow; + assertFlowIs(newFlow); + }).then(function() { + assertFlowIs(newFlow); + waitForIdle(newFlow).then(fulfill, reject); + }); + }); + }); + + it('testDeferredFactoriesCreateForActiveFlow_defaultFlow', function() { + var e = Error(); + var defaultFlow = promise.controlFlow(); + promise.fulfilled().then(function() { + assertFlowIs(defaultFlow); + }); + promise.rejected(e).then(null, function(err) { + assert.equal(e, err); + assertFlowIs(defaultFlow); + }); + promise.defer().then(function() { + assertFlowIs(defaultFlow); + }); + + return waitForIdle(); + }); + + it('testDeferredFactoriesCreateForActiveFlow_newFlow', function() { + var e = Error(); + var newFlow = new promise.ControlFlow; + newFlow.execute(function() { + promise.fulfilled().then(function() { + assertFlowIs(newFlow); + }); + + promise.rejected(e).then(null, function(err) { + assert.equal(e, err); + assertFlowIs(newFlow); + }); + + promise.defer().then(function() { + assertFlowIs(newFlow); + }); + }).then(function() { + assertFlowIs(newFlow); + }); + + return waitForIdle(newFlow); + }); + + it('testFlowsSynchronizeWithThemselvesNotEachOther', function() { + var defaultFlow = promise.controlFlow(); + schedulePush('a', 'a'); + promise.controlFlow().timeout(250); + schedulePush('b', 'b'); + + promise.createFlow(function() { + schedulePush('c', 'c'); + schedulePush('d', 'd'); + }); + + return waitForIdle().then(function() { + assertMessages('a', 'c', 'd', 'b'); + }); + }); + + it('testUnhandledErrorsAreReportedToTheOwningFlow', function() { + var error1 = Error('e1'); + var error2 = Error('e2'); + + var defaultFlow = promise.controlFlow(); + defaultFlow.removeAllListeners('uncaughtException'); + + var flow1Error = NativePromise.defer(); + flow1Error.promise.then(function(value) { + assert.equal(error2, value); + }); + + var flow2Error = NativePromise.defer(); + flow2Error.promise.then(function(value) { + assert.equal(error1, value); + }); + + promise.createFlow(function(flow) { + flow.once('uncaughtException', flow2Error.resolve); + promise.rejected(error1); + + defaultFlow.once('uncaughtException', flow1Error.resolve); + defaultFlow.execute(function() { + promise.rejected(error2); + }); + }); + + return NativePromise.all([flow1Error.promise, flow2Error.promise]); + }); + + it('testCanSynchronizeFlowsByReturningPromiseFromOneToAnother', function() { + var flow1 = new promise.ControlFlow; + var flow1Done = NativePromise.defer(); + flow1.once('idle', flow1Done.resolve); + flow1.once('uncaughtException', flow1Done.reject); + + var flow2 = new promise.ControlFlow; + var flow2Done = NativePromise.defer(); + flow2.once('idle', flow2Done.resolve); + flow2.once('uncaughtException', flow2Done.reject); + + flow1.execute(function() { + schedulePush('a', 'a'); + return promise.delayed(25); + }, 'start flow 1'); + + flow2.execute(function() { + schedulePush('b', 'b'); + schedulePush('c', 'c'); + flow2.execute(function() { + return flow1.execute(function() { + schedulePush('d', 'd'); + }, 'flow 1 task'); + }, 'inject flow1 result into flow2'); + schedulePush('e', 'e'); + }, 'start flow 2'); + + return NativePromise.all([flow1Done.promise, flow2Done.promise]). + then(function() { + assertMessages('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('testFramesWaitToCompleteForPendingRejections', function() { + return new NativePromise(function(fulfill, reject) { + + promise.controlFlow().execute(function() { + promise.rejected(new StubError); + }).then(fulfill, reject); + + }). + then(() => fail('expected to fail'), assertIsStubError); + }); + + it('testSynchronizeErrorsPropagateToOuterFlow', function() { + var outerFlow = new promise.ControlFlow; + var innerFlow = new promise.ControlFlow; + + var block = NativePromise.defer(); + innerFlow.execute(function() { + return block.promise; + }, 'block inner flow'); + + outerFlow.execute(function() { + block.resolve(); + return innerFlow.execute(function() { + promise.rejected(new StubError); + }, 'trigger unhandled rejection error'); + }, 'run test'); + + return NativePromise.all([ + waitForIdle(innerFlow), + waitForAbort(outerFlow).then(assertIsStubError) + ]); + }); + + it('testFailsIfErrbackThrows', function() { + promise.rejected('').then(null, throwStubError); + return waitForAbort().then(assertIsStubError); + }); + + it('testFailsIfCallbackReturnsRejectedPromise', function() { + promise.fulfilled().then(function() { + return promise.rejected(new StubError); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('testAbortsFrameIfTaskFails', function() { + promise.fulfilled().then(function() { + promise.controlFlow().execute(throwStubError); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('testAbortsFramePromisedChainedFromTaskIsNotHandled', function() { + promise.fulfilled().then(function() { + promise.controlFlow().execute(function() {}). + then(throwStubError); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('testTrapsChainedUnhandledRejectionsWithinAFrame', function() { + var pair = callbackPair(null, assertIsStubError); + promise.fulfilled().then(function() { + promise.controlFlow().execute(function() {}). + then(throwStubError); + }).then(pair.callback, pair.errback); + + return waitForIdle().then(pair.assertErrback); + }); + + it('testCancelsRemainingTasksIfFrameThrowsDuringScheduling', function() { + var task1, task2; + var pair = callbackPair(null, assertIsStubError); + var flow = promise.controlFlow(); + flow.execute(function() { + task1 = flow.execute(function() {}); + task2 = flow.execute(function() {}); + throw new StubError; + }).then(pair.callback, pair.errback); + + return waitForIdle(). + then(pair.assertErrback). + then(function() { + assert.ok(!task1.isPending()); + pair = callbackPair(); + return task1.then(pair.callback, pair.errback); + }). + then(function() { + pair.assertErrback(); + assert.ok(!task2.isPending()); + pair = callbackPair(); + return task2.then(pair.callback, pair.errback); + }). + then(function() { + pair.assertErrback(); + }); + }); + + it('testCancelsRemainingTasksInFrameIfATaskFails', function() { + var task; + var pair = callbackPair(null, assertIsStubError); + var flow = promise.controlFlow(); + flow.execute(function() { + flow.execute(throwStubError); + task = flow.execute(function() {}); + }).then(pair.callback, pair.errback); + + return waitForIdle().then(pair.assertErrback).then(function() { + assert.ok(!task.isPending()); + pair = callbackPair(); + task.then(pair.callback, pair.errback); + }).then(function() { + pair.assertErrback(); + }); + }); + + it('testDoesNotModifyRejectionErrorIfPromiseNotInsideAFlow', function() { + var error = Error('original message'); + var originalStack = error.stack; + var originalStr = error.toString(); + + var pair = callbackPair(null, function(e) { + assert.equal(error, e); + assert.equal('original message', e.message); + assert.equal(originalStack, e.stack); + assert.equal(originalStr, e.toString()); + }); + + promise.rejected(error).then(pair.callback, pair.errback); + return waitForIdle().then(pair.assertErrback); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/444 */ + it('testMaintainsOrderWithPromiseChainsCreatedWithinAForeach_1', function() { + var messages = []; + flow.execute(function() { + return promise.fulfilled(['a', 'b', 'c', 'd']); + }, 'start').then(function(steps) { + steps.forEach(function(step) { + promise.fulfilled(step) + .then(function() { + messages.push(step + '.1'); + }).then(function() { + messages.push(step + '.2'); + }); + }) + }); + return waitForIdle().then(function() { + assert.deepEqual( + ['a.1', 'a.2', 'b.1', 'b.2', 'c.1', 'c.2', 'd.1', 'd.2'], + messages); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/444 */ + it('testMaintainsOrderWithPromiseChainsCreatedWithinAForeach_2', function() { + var messages = []; + flow.execute(function() { + return promise.fulfilled(['a', 'b', 'c', 'd']); + }, 'start').then(function(steps) { + steps.forEach(function(step) { + promise.fulfilled(step) + .then(function() { + messages.push(step + '.1'); + }).then(function() { + flow.execute(function() {}, step + '.2').then(function() { + messages.push(step + '.2'); + }); + }); + }) + }); + return waitForIdle().then(function() { + assert.deepEqual( + ['a.1', 'a.2', 'b.1', 'b.2', 'c.1', 'c.2', 'd.1', 'd.2'], + messages); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/444 */ + it('testMaintainsOrderWithPromiseChainsCreatedWithinAForeach_3', function() { + var messages = []; + flow.execute(function() { + return promise.fulfilled(['a', 'b', 'c', 'd']); + }, 'start').then(function(steps) { + steps.forEach(function(step) { + promise.fulfilled(step) + .then(function(){}) + .then(function() { + messages.push(step + '.1'); + return flow.execute(function() {}, step + '.1'); + }).then(function() { + flow.execute(function() {}, step + '.2').then(function(text) { + messages.push(step + '.2'); + }); + }); + }) + }); + return waitForIdle().then(function() { + assert.deepEqual( + ['a.1', 'a.2', 'b.1', 'b.2', 'c.1', 'c.2', 'd.1', 'd.2'], + messages); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/363 */ + it('testTasksScheduledInASeparateTurnOfTheEventLoopGetASeparateTaskQueue_2', function() { + scheduleAction('a', () => promise.delayed(10)); + schedule('b'); + setTimeout(() => schedule('c'), 0); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'b'); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/363 */ + it('testTasksScheduledInASeparateTurnOfTheEventLoopGetASeparateTaskQueue_2', function() { + scheduleAction('a', () => promise.delayed(10)); + schedule('b'); + schedule('c'); + setTimeout(function() { + schedule('d'); + scheduleAction('e', () => promise.delayed(10)); + schedule('f'); + }, 0); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'd', 'e', 'b', 'c', 'f'); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/363 */ + it('testCanSynchronizeTasksFromAdjacentTaskQueues', function() { + var task1 = scheduleAction('a', () => promise.delayed(10)); + schedule('b'); + setTimeout(function() { + scheduleAction('c', () => task1); + schedule('d'); + }, 0); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'd', 'b'); + }); + }); + + describe('testCancellingAScheduledTask', function() { + it('1', function() { + var called = false; + var task1 = scheduleAction('a', () => called = true); + task1.cancel('no soup for you'); + + return waitForIdle().then(function() { + assert.ok(!called); + assertFlowHistory(); + return task1.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + }); + }); + + it('2', function() { + schedule('a'); + var called = false; + var task2 = scheduleAction('b', () => called = true); + schedule('c'); + + task2.cancel('no soup for you'); + + return waitForIdle().then(function() { + assert.ok(!called); + assertFlowHistory('a', 'c'); + return task2.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + }); + }); + + it('3', function() { + var called = false; + var task = scheduleAction('a', () => called = true); + task.cancel(new StubError); + + return waitForIdle().then(function() { + assert.ok(!called); + assertFlowHistory(); + return task.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + }); + }); + }); + + it('4', function() { + var seen = []; + var task = scheduleAction('a', () => seen.push(1)) + .then(() => seen.push(2)) + .then(() => seen.push(3)) + .then(() => seen.push(4)) + .then(() => seen.push(5)); + task.cancel(new StubError); + + return waitForIdle().then(function() { + assert.deepEqual([], seen); + assertFlowHistory(); + return task.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + }); + }); + }); + + it('fromWithinAnExecutingTask', function() { + var called = false; + var task; + scheduleAction('a', function() { + task.cancel('no soup for you'); + }); + task = scheduleAction('b', () => called = true); + schedule('c'); + + return waitForIdle().then(function() { + assert.ok(!called); + assertFlowHistory('a', 'c'); + return task.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + }); + }); + }); + + it('testCancellingAPendingTask', function() { + var order = []; + var unresolved = promise.defer(); + + var innerTask; + var outerTask = scheduleAction('a', function() { + order.push(1); + + // Schedule a task that will never finish. + innerTask = scheduleAction('a.1', function() { + return unresolved.promise; + }); + + // Since the outerTask is cancelled below, innerTask should be cancelled + // with a DiscardedTaskError, which means its callbacks are silently + // dropped - so this should never execute. + innerTask.thenCatch(function(e) { + order.push(2); + }); + }); + schedule('b'); + + outerTask.thenCatch(function(e) { + order.push(3); + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + + unresolved.promise.thenCatch(function(e) { + order.push(4); + assert.ok(e instanceof promise.CancellationError); + }); + + return timeout(10).then(function() { + assert.deepEqual([1], order); + assert.ok(unresolved.promise.isPending()); + + outerTask.cancel('no soup for you'); + return waitForIdle(); + }).then(function() { + assertFlowHistory('a', 'a.1', 'b'); + assert.deepEqual([1, 3, 4], order); + }); + }); + + it('testCancellingAPendingPromiseCallback', function() { + var called = false; + + var root = promise.fulfilled(); + root.then(function() { + cb2.cancel('no soup for you'); + }); + + var cb2 = root.then(fail, fail); // These callbacks should never be called. + cb2.then(fail, function(e) { + called = true; + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + + return waitForIdle().then(function() { + assert.ok(called); + }); + }); + + describe('testResetFlow', function() { + it('1', function() { + var called = 0; + var task = flow.execute(() => called++); + task.thenFinally(() => called++); + + return new Promise(function(fulfill) { + flow.once('reset', fulfill); + flow.reset(); + + }).then(function() { + assert.equal(0, called); + assert.ok(!task.isPending()); + return task; + + }).then(fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('ControlFlow was reset', e.message); + }); + }); + + it('2', function() { + var called = 0; + var task1 = flow.execute(() => called++); + task1.thenFinally(() => called++); + + var task2 = flow.execute(() => called++); + task2.thenFinally(() => called++); + + var task3 = flow.execute(() => called++); + task3.thenFinally(() => called++); + + return new Promise(function(fulfill) { + flow.once('reset', fulfill); + flow.reset(); + + }).then(function() { + assert.equal(0, called); + assert.ok(!task1.isPending()); + assert.ok(!task2.isPending()); + assert.ok(!task3.isPending()); + }); + }); + }); + + describe('testPromiseFulfilledInsideTask', function() { + it('1', function() { + var order = []; + + flow.execute(function() { + var d = promise.defer(); + + d.promise.then(() => order.push('a')); + d.promise.then(() => order.push('b')); + d.promise.then(() => order.push('c')); + d.fulfill(); + + flow.execute(() => order.push('d')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'fin'], order); + }); + }); + + it('2', function() { + var order = []; + + flow.execute(function() { + flow.execute(() => order.push('a')); + flow.execute(() => order.push('b')); + + var d = promise.defer(); + d.promise.then(() => order.push('c')); + d.promise.then(() => order.push('d')); + d.fulfill(); + + flow.execute(() => order.push('e')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'e', 'fin'], order); + }); + }); + + it('3', function() { + var order = []; + var d = promise.defer(); + d.promise.then(() => order.push('c')); + d.promise.then(() => order.push('d')); + + flow.execute(function() { + flow.execute(() => order.push('a')); + flow.execute(() => order.push('b')); + + d.promise.then(() => order.push('e')); + d.fulfill(); + + flow.execute(() => order.push('f')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['c', 'd', 'a', 'b', 'e', 'f', 'fin'], order); + }); + }); + + it('4', function() { + var order = []; + var d = promise.defer(); + d.promise.then(() => order.push('a')); + d.promise.then(() => order.push('b')); + + flow.execute(function() { + flow.execute(function() { + order.push('c'); + flow.execute(() => order.push('d')); + d.promise.then(() => order.push('e')); + }); + flow.execute(() => order.push('f')); + + d.promise.then(() => order.push('g')); + d.fulfill(); + + flow.execute(() => order.push('h')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'fin'], order); + }); + }); + }); + + describe('testSettledPromiseCallbacksInsideATask', function() { + it('1', function() { + var order = []; + var p = promise.fulfilled(); + + flow.execute(function() { + flow.execute(() => order.push('a')); + p.then(() => order.push('b')); + flow.execute(() => order.push('c')); + p.then(() => order.push('d')); + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'fin'], order); + }); + }); + + it('2', function() { + var order = []; + + flow.execute(function() { + flow.execute(() => order.push('a')) + .then( () => order.push('c')); + flow.execute(() => order.push('b')); + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'c', 'b', 'fin'], order); + }); + }); + }); + + it('testTasksDoNotWaitForNewlyCreatedPromises', function() { + var order = []; + + flow.execute(function() { + var d = promise.defer(); + + // This is a normal promise, not a task, so the task for this callback is + // considered volatile. Volatile tasks should be skipped when they reach + // the front of the task queue. + d.promise.then(() => order.push('a')); + + flow.execute(() => order.push('b')); + flow.execute(function() { + flow.execute(() => order.push('c')); + d.promise.then(() => order.push('d')); + d.fulfill(); + }); + flow.execute(() => order.push('e')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['b', 'a', 'c', 'd', 'e', 'fin'], order); + }); + }); + + it('testCallbackDependenciesDoNotDeadlock', function() { + var order = []; + var root = promise.defer(); + var dep = promise.fulfilled().then(function() { + order.push('a'); + return root.promise.then(function() { + order.push('b'); + }); + }); + // This callback depends on |dep|, which depends on another callback + // attached to |root| via a chain. + root.promise.then(function() { + order.push('c'); + return dep.then(() => order.push('d')); + }).then(() => order.push('fin')); + + setTimeout(() => root.fulfill(), 20); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'fin'], order); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/promise_generator_test.js b/www/node_modules/selenium-webdriver/test/lib/promise_generator_test.js new file mode 100644 index 0000000..44568c9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/promise_generator_test.js @@ -0,0 +1,308 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); +const promise = require('../../lib/promise'); + +describe('promise.consume()', function() { + it('requires inputs to be generator functions', function() { + assert.throws(function() { + promise.consume(function() {}); + }); + }); + + it('handles a basic generator with no yielded promises', function() { + var values = []; + return promise.consume(function* () { + var i = 0; + while (i < 4) { + i = yield i + 1; + values.push(i); + } + }).then(function() { + assert.deepEqual([1, 2, 3, 4], values); + }); + }); + + it('handles a promise yielding generator', function() { + var values = []; + return promise.consume(function* () { + var i = 0; + while (i < 4) { + // Test that things are actually async here. + setTimeout(function() { + values.push(i * 2); + }, 10); + + yield promise.delayed(10).then(function() { + values.push(i++); + }); + } + }).then(function() { + assert.deepEqual([0, 0, 2, 1, 4, 2, 6, 3], values); + }); + }); + + it('assignemnts to yielded promises get fulfilled value', function() { + return promise.consume(function* () { + var p = promise.fulfilled(2); + var x = yield p; + assert.equal(2, x); + }); + }); + + it('is possible to cancel promise generators', function() { + var values = []; + var p = promise.consume(function* () { + var i = 0; + while (i < 3) { + yield promise.delayed(100).then(function() { + values.push(i++); + }); + } + }); + return promise.delayed(75).then(function() { + p.cancel(); + return p.thenCatch(function() { + return promise.delayed(300); + }); + }).then(function() { + assert.deepEqual([0], values); + }); + }); + + it('uses final return value as fulfillment value', function() { + return promise.consume(function* () { + yield 1; + yield 2; + return 3; + }).then(function(value) { + assert.equal(3, value); + }); + }); + + it('throws rejected promise errors within the generator', function() { + var values = []; + return promise.consume(function* () { + values.push('a'); + var e = Error('stub error'); + try { + yield promise.rejected(e); + values.push('b'); + } catch (ex) { + assert.equal(e, ex); + values.push('c'); + } + values.push('d'); + }).then(function() { + assert.deepEqual(['a', 'c', 'd'], values); + }); + }); + + it('aborts the generator if there is an unhandled rejection', function() { + var values = []; + var e = Error('stub error'); + return promise.consume(function* () { + values.push(1); + yield promise.rejected(e); + values.push(2); + }).thenCatch(function() { + assert.deepEqual([1], values); + }); + }); + + it('yield waits for promises', function() { + var values = []; + var d = promise.defer(); + + setTimeout(function() { + assert.deepEqual([1], values); + d.fulfill(2); + }, 100); + + return promise.consume(function* () { + values.push(1); + values.push((yield d.promise), 3); + }).then(function() { + assert.deepEqual([1, 2, 3], values); + }); + }); + + it('accepts custom scopes', function() { + return promise.consume(function* () { + return this.name; + }, {name: 'Bob'}).then(function(value) { + assert.equal('Bob', value); + }); + }); + + it('accepts initial generator arguments', function() { + return promise.consume(function* (a, b) { + assert.equal('red', a); + assert.equal('apples', b); + }, null, 'red', 'apples'); + }); + + it('executes generator within the control flow', function() { + var promises = [ + promise.defer(), + promise.defer() + ]; + var values = []; + + setTimeout(function() { + assert.deepEqual([], values); + promises[0].fulfill(1); + }, 100); + + setTimeout(function() { + assert.deepEqual([1], values); + promises[1].fulfill(2); + }, 200); + + return promise.controlFlow().execute(function* () { + values.push(yield promises[0].promise); + values.push(yield promises[1].promise); + values.push('fin'); + }).then(function() { + assert.deepEqual([1, 2, 'fin'], values); + }); + }); + + it('handles tasks scheduled in generator', function() { + var flow = promise.controlFlow(); + return flow.execute(function* () { + var x = yield flow.execute(function() { + return promise.delayed(10).then(function() { + return 1; + }); + }); + + var y = yield flow.execute(function() { + return 2; + }); + + return x + y; + }).then(function(value) { + assert.equal(3, value); + }); + }); + + it('blocks the control flow while processing generator', function() { + var values = []; + return promise.controlFlow().wait(function* () { + yield values.push(1); + values.push(yield promise.delayed(10).then(function() { + return 2; + })); + yield values.push(3); + return values.length === 6; + }, 250).then(function() { + assert.deepEqual([1, 2, 3, 1, 2, 3], values); + }); + }); + + it('ControlFlow.wait() will timeout on long generator', function() { + var values = []; + return promise.controlFlow().wait(function* () { + var i = 0; + while (i < 3) { + yield promise.delayed(100).then(function() { + values.push(i++); + }); + } + }, 75).thenCatch(function() { + assert.deepEqual( + [0, 1, 2], values, 'Should complete one loop of wait condition'); + }); + }); + + describe('generators in promise callbacks', function() { + it('works with no initial value', function() { + var promises = [ + promise.defer(), + promise.defer() + ]; + var values = []; + + setTimeout(function() { + promises[0].fulfill(1); + }, 50); + + setTimeout(function() { + promises[1].fulfill(2); + }, 100); + + return promise.fulfilled().then(function*() { + values.push(yield promises[0].promise); + values.push(yield promises[1].promise); + values.push('fin'); + }).then(function() { + assert.deepEqual([1, 2, 'fin'], values); + }); + }); + + it('starts the generator with promised value', function() { + var promises = [ + promise.defer(), + promise.defer() + ]; + var values = []; + + setTimeout(function() { + promises[0].fulfill(1); + }, 50); + + setTimeout(function() { + promises[1].fulfill(2); + }, 100); + + return promise.fulfilled(3).then(function*(value) { + var p1 = yield promises[0].promise; + var p2 = yield promises[1].promise; + values.push(value + p1); + values.push(value + p2); + values.push('fin'); + }).then(function() { + assert.deepEqual([4, 5, 'fin'], values); + }); + }); + + it('throws yielded rejections within the generator callback', function() { + var d = promise.defer(); + var e = Error('stub'); + + setTimeout(function() { + d.reject(e); + }, 50); + + return promise.fulfilled().then(function*() { + var threw = false; + try { + yield d.promise; + } catch (ex) { + threw = true; + assert.equal(e, ex); + } + assert.ok(threw); + }); + }); + }); +}); + diff --git a/www/node_modules/selenium-webdriver/test/lib/promise_test.js b/www/node_modules/selenium-webdriver/test/lib/promise_test.js new file mode 100644 index 0000000..ed6d965 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/promise_test.js @@ -0,0 +1,996 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); + +const testutil = require('./testutil'); +const promise = require('../../lib/promise'); + +// Aliases for readability. +const NativePromise = Promise; +const StubError = testutil.StubError; +const assertIsStubError = testutil.assertIsStubError; +const callbackHelper = testutil.callbackHelper; +const callbackPair = testutil.callbackPair; +const throwStubError = testutil.throwStubError; +const fail = () => assert.fail(); + +// Refer to promise_aplus_test for promise compliance with standard behavior. +describe('promise', function() { + var app, uncaughtExceptions; + + beforeEach(function setUp() { + promise.LONG_STACK_TRACES = false; + uncaughtExceptions = []; + + app = promise.controlFlow(); + app.on(promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, + (e) => uncaughtExceptions.push(e)); + }); + + afterEach(function tearDown() { + app.reset(); + promise.setDefaultFlow(new promise.ControlFlow); + assert.deepEqual([], uncaughtExceptions, + 'Did not expect any uncaught exceptions'); + promise.LONG_STACK_TRACES = false; + }); + + const assertIsPromise = (p) => assert.ok(promise.isPromise(p)); + const assertNotPromise = (v) => assert.ok(!promise.isPromise(v)); + + function createRejectedPromise(reason) { + var p = promise.rejected(reason); + p.thenCatch(function() {}); + return p; + } + + it('testCanDetectPromiseLikeObjects', function() { + assertIsPromise(new promise.Promise(function(fulfill) { + fulfill(); + })); + assertIsPromise(new promise.Deferred()); + assertIsPromise(new promise.Deferred().promise); + assertIsPromise({then:function() {}}); + + assertNotPromise(undefined); + assertNotPromise(null); + assertNotPromise(''); + assertNotPromise(true); + assertNotPromise(false); + assertNotPromise(1); + assertNotPromise({}); + assertNotPromise({then:1}); + assertNotPromise({then:true}); + assertNotPromise({then:''}); + }); + + describe('then', function() { + it('returnsOwnPromiseIfNoCallbacksWereGiven', function() { + var deferred = new promise.Deferred(); + assert.equal(deferred.promise, deferred.promise.then()); + assert.equal(deferred.promise, deferred.promise.thenCatch()); + assert.equal(deferred.promise, promise.when(deferred.promise)); + }); + + it('stillConsideredUnHandledIfNoCallbacksWereGivenOnCallsToThen', function() { + promise.rejected(new StubError).then(); + var handler = callbackHelper(assertIsStubError); + + // so tearDown() doesn't throw + app.removeAllListeners(); + app.on(promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, handler); + return NativePromise.resolve().then(() => handler.assertCalled()); + }); + }); + + describe('thenFinally', function() { + it('nonFailingCallbackDoesNotSuppressOriginalError', function() { + var done = callbackHelper(assertIsStubError); + return promise.rejected(new StubError). + thenFinally(function() {}). + thenCatch(done). + thenFinally(done.assertCalled); + }); + + it('failingCallbackSuppressesOriginalError', function() { + var done = callbackHelper(assertIsStubError); + return promise.rejected(new Error('original')). + thenFinally(throwStubError). + thenCatch(done). + thenFinally(done.assertCalled); + }); + + it('callbackThrowsAfterFulfilledPromise', function() { + var done = callbackHelper(assertIsStubError); + return promise.fulfilled(). + thenFinally(throwStubError). + thenCatch(done). + thenFinally(done.assertCalled); + }); + + it('callbackReturnsRejectedPromise', function() { + var done = callbackHelper(assertIsStubError); + return promise.fulfilled(). + thenFinally(function() { + return promise.rejected(new StubError); + }). + thenCatch(done). + thenFinally(done.assertCalled); + }); + }); + + describe('cancel', function() { + it('passesTheCancellationReasonToReject', function() { + var d = new promise.Deferred(); + var res = d.then(assert.fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('because i said so', e.message); + }); + d.cancel('because i said so'); + return res; + }); + + it('canCancelADeferredFromAChainedPromise', function() { + var d = new promise.Deferred(); + var p = d.then(assert.fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('because i said so', e.message); + }); + var p2 = p.then(function() {}, assert.fail); + + p.cancel('because i said so'); + return p2; + }); + + it('canCancelATimeout', function() { + var p = promise.delayed(25) + .then(assert.fail, (e) => e instanceof promise.CancellationError); + setTimeout(() => p.cancel(), 20); + p.cancel(); + return p; + }); + + it('cancelIsANoopOnceAPromiseHasBeenFulfilled', function() { + var p = promise.fulfilled(123); + p.cancel(); + return p.then((v) => assert.equal(123, v)); + }); + + it('cancelIsANoopOnceAPromiseHasBeenRejected', function() { + var p = promise.rejected(new StubError); + p.cancel(); + + var pair = callbackPair(null, assertIsStubError); + return p.then(assert.fail, assertIsStubError); + }); + + it('noopCancelTriggeredOnCallbackOfResolvedPromise', function() { + var d = promise.defer(); + var p = d.promise.then(); + + d.fulfill(); + p.cancel(); // This should not throw. + return p; // This should not trigger a failure. + }); + }); + + describe('when', function() { + it('ReturnsAResolvedPromiseIfGivenANonPromiseValue', function() { + var ret = promise.when('abc'); + assertIsPromise(ret); + return ret.then((value) => assert.equal('abc', value)); + }); + + it('PassesRawErrorsToCallbacks', function() { + var error = new Error('boo!'); + return promise.when(error, function(value) { + assert.equal(error, value); + }); + }); + + it('WaitsForValueToBeResolvedBeforeInvokingCallback', function() { + var d = new promise.Deferred(), callback; + let result = promise.when(d, callback = callbackHelper(function(value) { + assert.equal('hi', value); + })); + callback.assertNotCalled(); + d.fulfill('hi'); + return result.then(callback.assertCalled); + }); + + it('canCancelReturnedPromise', function() { + var callbacks = callbackPair(null, function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('just because', e.message); + }); + + var promiseLike = { + then: function(cb, eb) { + this.callback = cb; + this.errback = eb; + } + }; + + var aPromise = promise.when(promiseLike, + callbacks.callback, callbacks.errback); + + assert.ok(aPromise.isPending()); + aPromise.cancel('just because'); + + return aPromise.thenFinally(callbacks.assertErrback); + }); + }); + + it('firesUncaughtExceptionEventIfRejectionNeverHandled', function() { + promise.rejected(new StubError); + var handler = callbackHelper(assertIsStubError); + + // so tearDown() doesn't throw + app.removeAllListeners(); + app.on(promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, handler); + + return NativePromise.resolve().then(handler.assertCalled); + }); + + it('cannotResolveADeferredWithItself', function() { + var deferred = new promise.Deferred(); + assert.throws(() => deferred.fulfill(deferred)); + assert.throws(() => deferred.reject(deferred)); + }); + + describe('fullyResolved', function() { + it('primitives', function() { + function runTest(value) { + var callback, errback; + return promise.fullyResolved(value) + .then((resolved) => assert.equal(value, resolved)); + } + return runTest(true) + .then(() => runTest(function() {})) + .then(() => runTest(null)) + .then(() => runTest(123)) + .then(() => runTest('foo bar')) + .then(() => runTest(undefined)); + }); + + it('arrayOfPrimitives', function() { + var fn = function() {}; + var array = [true, fn, null, 123, '', undefined, 1]; + return promise.fullyResolved(array).then(function(resolved) { + assert.equal(array, resolved); + assert.deepEqual([true, fn, null, 123, '', undefined, 1], + resolved); + }); + }); + + it('nestedArrayOfPrimitives', function() { + var fn = function() {}; + var array = [true, [fn, null, 123], '', undefined]; + return promise.fullyResolved(array) + .then(function(resolved) { + assert.equal(array, resolved); + assert.deepEqual([true, [fn, null, 123], '', undefined], resolved); + assert.deepEqual([fn, null, 123], resolved[1]); + }); + }); + + it('arrayWithPromisedPrimitive', function() { + return promise.fullyResolved([promise.fulfilled(123)]) + .then(function(resolved) { + assert.deepEqual([123], resolved); + }); + }); + + it('promiseResolvesToPrimitive', function() { + return promise.fullyResolved(promise.fulfilled(123)) + .then((resolved) => assert.equal(123, resolved)); + }); + + it('promiseResolvesToArray', function() { + var fn = function() {}; + var array = [true, [fn, null, 123], '', undefined]; + var aPromise = promise.fulfilled(array); + + var result = promise.fullyResolved(aPromise); + return result.then(function(resolved) { + assert.equal(array, resolved); + assert.deepEqual([true, [fn, null, 123], '', undefined], + resolved); + assert.deepEqual([fn, null, 123], resolved[1]); + }); + }); + + it('promiseResolvesToArrayWithPromises', function() { + var nestedPromise = promise.fulfilled(123); + var aPromise = promise.fulfilled([true, nestedPromise]); + return promise.fullyResolved(aPromise) + .then(function(resolved) { + assert.deepEqual([true, 123], resolved); + }); + }); + + it('rejectsIfArrayPromiseRejects', function() { + var nestedPromise = createRejectedPromise(new StubError); + var aPromise = promise.fulfilled([true, nestedPromise]); + + var pair = callbackPair(null, assertIsStubError); + return promise.fullyResolved(aPromise) + .then(assert.fail, assertIsStubError); + }); + + it('rejectsOnFirstArrayRejection', function() { + var e1 = new Error('foo'); + var e2 = new Error('bar'); + var aPromise = promise.fulfilled([ + createRejectedPromise(e1), + createRejectedPromise(e2) + ]); + + return promise.fullyResolved(aPromise) + .then(assert.fail, function(error) { + assert.strictEqual(e1, error); + }); + }); + + it('rejectsIfNestedArrayPromiseRejects', function() { + var aPromise = promise.fulfilled([ + promise.fulfilled([ + createRejectedPromise(new StubError) + ]) + ]); + + return promise.fullyResolved(aPromise) + .then(assert.fail, assertIsStubError); + }); + + it('simpleHash', function() { + var hash = {'a': 123}; + return promise.fullyResolved(hash) + .then(function(resolved) { + assert.strictEqual(hash, resolved); + assert.deepEqual(hash, {'a': 123}); + }); + }); + + it('nestedHash', function() { + var nestedHash = {'foo':'bar'}; + var hash = {'a': 123, 'b': nestedHash}; + + return promise.fullyResolved(hash) + .then(function(resolved) { + assert.strictEqual(hash, resolved); + assert.deepEqual({'a': 123, 'b': {'foo': 'bar'}}, resolved); + assert.strictEqual(nestedHash, resolved['b']); + }); + }); + + it('promiseResolvesToSimpleHash', function() { + var hash = {'a': 123}; + var aPromise = promise.fulfilled(hash); + + return promise.fullyResolved(aPromise) + .then((resolved) => assert.strictEqual(hash, resolved)); + }); + + it('promiseResolvesToNestedHash', function() { + var nestedHash = {'foo':'bar'}; + var hash = {'a': 123, 'b': nestedHash}; + var aPromise = promise.fulfilled(hash); + + return promise.fullyResolved(aPromise) + .then(function(resolved) { + assert.strictEqual(hash, resolved); + assert.strictEqual(nestedHash, resolved['b']); + assert.deepEqual(hash, {'a': 123, 'b': {'foo': 'bar'}}); + }); + }); + + it('promiseResolvesToHashWithPromises', function() { + var aPromise = promise.fulfilled({ + 'a': promise.fulfilled(123) + }); + + return promise.fullyResolved(aPromise) + .then(function(resolved) { + assert.deepEqual({'a': 123}, resolved); + }); + }); + + it('rejectsIfHashPromiseRejects', function() { + var aPromise = promise.fulfilled({ + 'a': createRejectedPromise(new StubError) + }); + + return promise.fullyResolved(aPromise) + .then(assert.fail, assertIsStubError); + }); + + it('rejectsIfNestedHashPromiseRejects', function() { + var aPromise = promise.fulfilled({ + 'a': {'b': createRejectedPromise(new StubError)} + }); + + return promise.fullyResolved(aPromise) + .then(assert.fail, assertIsStubError); + }); + + it('instantiatedObject', function() { + function Foo() { + this.bar = 'baz'; + } + var foo = new Foo; + + return promise.fullyResolved(foo).then(function(resolvedFoo) { + assert.equal(foo, resolvedFoo); + assert.ok(resolvedFoo instanceof Foo); + assert.deepEqual(new Foo, resolvedFoo); + }); + }); + + it('withEmptyArray', function() { + return promise.fullyResolved([]).then(function(resolved) { + assert.deepEqual([], resolved); + }); + }); + + it('withEmptyHash', function() { + return promise.fullyResolved({}).then(function(resolved) { + assert.deepEqual({}, resolved); + }); + }); + + it('arrayWithPromisedHash', function() { + var obj = {'foo': 'bar'}; + var array = [promise.fulfilled(obj)]; + + return promise.fullyResolved(array).then(function(resolved) { + assert.deepEqual(resolved, [obj]); + }); + }); + }); + + describe('checkedNodeCall', function() { + it('functionThrows', function() { + return promise.checkedNodeCall(throwStubError) + .then(assert.fail, assertIsStubError); + }); + + it('functionReturnsAnError', function() { + return promise.checkedNodeCall(function(callback) { + callback(new StubError); + }).then(assert.fail, assertIsStubError); + }); + + it('functionReturnsSuccess', function() { + var success = 'success!'; + return promise.checkedNodeCall(function(callback) { + callback(null, success); + }).then((value) => assert.equal(success, value)); + }); + + it('functionReturnsAndThrows', function() { + var error = new Error('boom'); + var error2 = new Error('boom again'); + return promise.checkedNodeCall(function(callback) { + callback(error); + throw error2; + }).then(assert.fail, (e) => assert.equal(error, e)); + }); + + it('functionThrowsAndReturns', function() { + var error = new Error('boom'); + var error2 = new Error('boom again'); + return promise.checkedNodeCall(function(callback) { + setTimeout(() => callback(error), 10); + throw error2; + }).then(assert.fail, (e) => assert.equal(error2, e)); + }); + }); + + describe('all', function() { + it('(base case)', function() { + var a = [ + 0, 1, + promise.defer(), + promise.defer(), + 4, 5, 6 + ]; + delete a[5]; + + var pair = callbackPair(function(value) { + assert.deepEqual([0, 1, 2, 3, 4, undefined, 6], value); + }); + + var result = promise.all(a).then(pair.callback, pair.errback); + pair.assertNeither(); + + a[2].fulfill(2); + pair.assertNeither(); + + a[3].fulfill(3); + return result.then(() => pair.assertCallback()); + }); + + it('empty array', function() { + return promise.all([]).then((a) => assert.deepEqual([], a)); + }); + + it('usesFirstRejection', function() { + var a = [ + promise.defer(), + promise.defer() + ]; + + var result = promise.all(a).then(assert.fail, assertIsStubError); + a[1].reject(new StubError); + setTimeout(() => a[0].reject(Error('ignored')), 0); + return result; + }); + }); + + describe('map', function() { + it('(base case)', function() { + var a = [1, 2, 3]; + return promise.map(a, function(value, index, a2) { + assert.equal(a, a2); + assert.equal('number', typeof index, 'not a number'); + return value + 1; + }).then(function(value) { + assert.deepEqual([2, 3, 4], value); + }); + }); + + it('omitsDeleted', function() { + var a = [0, 1, 2, 3, 4, 5, 6]; + delete a[1]; + delete a[3]; + delete a[4]; + delete a[6]; + + var expected = [0, 1, 4, 9, 16, 25, 36]; + delete expected[1]; + delete expected[3]; + delete expected[4]; + delete expected[6]; + + return promise.map(a, function(value) { + return value * value; + }).then(function(value) { + assert.deepEqual(expected, value); + }); + }); + + it('emptyArray', function() { + return promise.map([], function(value) { + return value + 1; + }).then(function(value) { + assert.deepEqual([], value); + }); + }); + + it('inputIsPromise', function() { + var input = promise.defer(); + var result = promise.map(input, function(value) { + return value + 1; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([2, 3, 4], value); + }); + result = result.then(pair.callback, pair.errback); + + setTimeout(function() { + pair.assertNeither(); + input.fulfill([1, 2, 3]); + }, 10); + + return result; + }); + + it('waitsForFunctionResultToResolve', function() { + var innerResults = [ + promise.defer(), + promise.defer() + ]; + + var result = promise.map([1, 2], function(value, index) { + return innerResults[index].promise; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual(['a', 'b'], value); + }); + result = result.then(pair.callback, pair.errback); + + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + innerResults[0].fulfill('a'); + }) + .then(function() { + pair.assertNeither(); + innerResults[1].fulfill('b'); + return result; + }) + .then(pair.assertCallback); + }); + + it('rejectsPromiseIfFunctionThrows', function() { + return promise.map([1], throwStubError) + .then(assert.fail, assertIsStubError); + }); + + it('rejectsPromiseIfFunctionReturnsRejectedPromise', function() { + return promise.map([1], function() { + return promise.rejected(new StubError); + }).then(assert.fail, assertIsStubError); + }); + + it('stopsCallingFunctionIfPreviousIterationFailed', function() { + var count = 0; + return promise.map([1, 2, 3, 4], function() { + count++; + if (count == 3) { + throw new StubError; + } + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.equal(3, count); + }); + }); + + it('rejectsWithFirstRejectedPromise', function() { + var innerResult = [ + promise.fulfilled(), + createRejectedPromise(new StubError), + createRejectedPromise(Error('should be ignored')) + ]; + var count = 0; + return promise.map([1, 2, 3, 4], function(value, index) { + count += 1; + return innerResult[index]; + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.equal(2, count); + }); + }); + + it('preservesOrderWhenMapReturnsPromise', function() { + var deferreds = [ + promise.defer(), + promise.defer(), + promise.defer(), + promise.defer() + ]; + var result = promise.map(deferreds, function(value) { + return value.promise; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([0, 1, 2, 3], value); + }); + result = result.then(pair.callback, pair.errback); + + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + for (let i = deferreds.length; i > 0; i -= 1) { + deferreds[i - 1].fulfill(i - 1); + } + return result; + }).then(pair.assertCallback); + }); + }); + + describe('filter', function() { + it('basicFiltering', function() { + var a = [0, 1, 2, 3]; + return promise.filter(a, function(val, index, a2) { + assert.equal(a, a2); + assert.equal('number', typeof index, 'not a number'); + return val > 1; + }).then(function(val) { + assert.deepEqual([2, 3], val); + }); + }); + + it('omitsDeleted', function() { + var a = [0, 1, 2, 3, 4, 5, 6]; + delete a[3]; + delete a[4]; + + return promise.filter(a, function(value) { + return value > 1 && value < 6; + }).then(function(val) { + assert.deepEqual([2, 5], val); + }); + }); + + it('preservesInputs', function() { + var a = [0, 1, 2, 3]; + + return promise.filter(a, function(value, i, a2) { + assert.equal(a, a2); + // Even if a function modifies the input array, the original value + // should be inserted into the new array. + a2[i] = a2[i] - 1; + return a2[i] >= 1; + }).then(function(val) { + assert.deepEqual([2, 3], val); + }); + }); + + it('inputIsPromise', function() { + var input = promise.defer(); + var result = promise.filter(input, function(value) { + return value > 1 && value < 3; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([2], value); + }); + result = result.then(pair.callback, pair.errback); + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + input.fulfill([1, 2, 3]); + return result; + }) + .then(pair.assertCallback); + }); + + it('waitsForFunctionResultToResolve', function() { + var innerResults = [ + promise.defer(), + promise.defer() + ]; + + var result = promise.filter([1, 2], function(value, index) { + return innerResults[index].promise; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([2], value); + }); + result = result.then(pair.callback, pair.errback); + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + innerResults[0].fulfill(false); + }) + .then(function() { + pair.assertNeither(); + innerResults[1].fulfill(true); + return result; + }) + .then(pair.assertCallback); + }); + + it('rejectsPromiseIfFunctionReturnsRejectedPromise', function() { + return promise.filter([1], function() { + return promise.rejected(new StubError); + }).then(assert.fail, assertIsStubError); + }); + + it('stopsCallingFunctionIfPreviousIterationFailed', function() { + var count = 0; + return promise.filter([1, 2, 3, 4], function() { + count++; + if (count == 3) { + throw new StubError; + } + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.equal(3, count); + }); + }); + + it('rejectsWithFirstRejectedPromise', function() { + var innerResult = [ + promise.fulfilled(), + createRejectedPromise(new StubError), + createRejectedPromise(Error('should be ignored')) + ]; + + return promise.filter([1, 2, 3, 4], function(value, index) { + assert.ok(index < innerResult.length); + return innerResult[index]; + }).then(assert.fail, assertIsStubError); + }); + + it('preservesOrderWhenFilterReturnsPromise', function() { + var deferreds = [ + promise.defer(), + promise.defer(), + promise.defer(), + promise.defer() + ]; + var result = promise.filter([0, 1, 2, 3], function(value, index) { + return deferreds[index].promise; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([1, 2], value); + }); + result = result.then(pair.callback, pair.errback); + + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + for (let i = deferreds.length - 1; i >= 0; i -= 1) { + deferreds[i].fulfill(i > 0 && i < 3); + } + return result; + }).then(pair.assertCallback); + }); + }); + + it('testAddThenableImplementation', function() { + function tmp() {} + assert.ok(!promise.Thenable.isImplementation(new tmp())); + promise.Thenable.addImplementation(tmp); + assert.ok(promise.Thenable.isImplementation(new tmp())); + + class tmpClass {} + assert.ok(!promise.Thenable.isImplementation(new tmpClass())); + promise.Thenable.addImplementation(tmpClass); + assert.ok(promise.Thenable.isImplementation(new tmpClass())); + }); + + describe('testLongStackTraces', function() { + beforeEach(() => promise.LONG_STACK_TRACES = false); + afterEach(() => promise.LONG_STACK_TRACES = false); + + it('doesNotAppendStackIfFeatureDisabled', function() { + promise.LONG_STACK_TRACES = false; + + var error = Error('hello'); + var originalStack = error.stack; + return promise.rejected(error). + then(fail). + then(fail). + then(fail). + then(fail, function(e) { + assert.equal(error, e); + assert.equal(originalStack, e.stack); + }); + }); + + function getStackMessages(error) { + return error.stack.split(/\n/).filter(function(line) { + return /^From: /.test(line); + }); + } + + it('appendsInitialPromiseCreation_resolverThrows', function() { + promise.LONG_STACK_TRACES = true; + + var error = Error('hello'); + var originalStack = '(placeholder; will be overwritten later)'; + + return new promise.Promise(function() { + try { + throw error; + } catch (e) { + originalStack = e.stack; + throw e; + } + }).then(fail, function(e) { + assert.strictEqual(error, e); + if (typeof originalStack !== 'string') { + return; + } + assert.notEqual(originalStack, e.stack); + assert.equal(e.stack.indexOf(originalStack), 0, + 'should start with original stack'); + assert.deepEqual(['From: Promise: new'], getStackMessages(e)); + }); + }); + + it('appendsInitialPromiseCreation_rejectCalled', function() { + promise.LONG_STACK_TRACES = true; + + var error = Error('hello'); + var originalStack = error.stack; + + return new promise.Promise(function(_, reject) { + reject(error); + }).then(fail, function(e) { + assert.equal(error, e); + if (typeof originalStack !== 'string') { + return; + } + assert.notEqual(originalStack, e.stack); + assert.equal(e.stack.indexOf(originalStack), 0, + 'should start with original stack'); + assert.deepEqual(['From: Promise: new'], getStackMessages(e)); + }); + }); + + it('appendsEachStepToRejectionError', function() { + promise.LONG_STACK_TRACES = true; + + var error = Error('hello'); + var originalStack = '(placeholder; will be overwritten later)'; + + return new promise.Promise(function() { + try { + throw error; + } catch (e) { + originalStack = e.stack; + throw e; + } + }). + then(fail). + thenCatch(function(e) { throw e; }). + then(fail). + thenCatch(function(e) { throw e; }). + then(fail, function(e) { + assert.equal(error, e); + if (typeof originalStack !== 'string') { + return; + } + assert.notEqual(originalStack, e.stack); + assert.equal(e.stack.indexOf(originalStack), 0, + 'should start with original stack'); + assert.deepEqual([ + 'From: Promise: new', + 'From: Promise: then', + 'From: Promise: catch', + 'From: Promise: then', + 'From: Promise: catch', + ], getStackMessages(e)); + }); + }); + + it('errorOccursInCallbackChain', function() { + promise.LONG_STACK_TRACES = true; + + var error = Error('hello'); + var originalStack = '(placeholder; will be overwritten later)'; + + return promise.fulfilled(). + then(function() {}). + then(function() {}). + then(function() { + try { + throw error; + } catch (e) { + originalStack = e.stack; + throw e; + } + }). + thenCatch(function(e) { throw e; }). + then(fail, function(e) { + assert.equal(error, e); + if (typeof originalStack !== 'string') { + return; + } + assert.notEqual(originalStack, e.stack); + assert.equal(e.stack.indexOf(originalStack), 0, + 'should start with original stack'); + assert.deepEqual([ + 'From: Promise: then', + 'From: Promise: catch', + ], getStackMessages(e)); + }); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/testutil.js b/www/node_modules/selenium-webdriver/test/lib/testutil.js new file mode 100644 index 0000000..e68ca28 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/testutil.js @@ -0,0 +1,90 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); +const sinon = require('sinon'); + + +class StubError extends Error { + constructor(opt_msg) { + super(opt_msg); + this.name = this.constructor.name; + } +} +exports.StubError = StubError; + +exports.throwStubError = function() { + throw new StubError; +}; + +exports.assertIsStubError = function(value) { + assert.ok(value instanceof StubError, value + ' is not a ' + StubError.name); +}; + +exports.assertIsInstance = function(ctor, value) { + assert.ok(value instanceof ctor, 'Not a ' + ctor.name + ': ' + value); +}; + +function callbackPair(cb, eb) { + if (cb && eb) { + throw new TypeError('can only specify one of callback or errback'); + } + + let callback = cb ? sinon.spy(cb) : sinon.spy(); + let errback = eb ? sinon.spy(eb) : sinon.spy(); + + function assertCallback() { + assert.ok(callback.called, 'callback not called'); + assert.ok(!errback.called, 'errback called'); + if (callback.threw()) { + throw callback.exceptions[0]; + } + } + + function assertErrback() { + assert.ok(!callback.called, 'callback called'); + assert.ok(errback.called, 'errback not called'); + if (errback.threw()) { + throw errback.exceptions[0]; + } + } + + function assertNeither() { + assert.ok(!callback.called, 'callback called'); + assert.ok(!errback.called, 'errback called'); + } + + return { + callback, + errback, + assertCallback, + assertErrback, + assertNeither + }; +} +exports.callbackPair = callbackPair; + + +exports.callbackHelper = function(cb) { + let pair = callbackPair(cb); + let wrapped = pair.callback.bind(null); + wrapped.assertCalled = () => pair.assertCallback(); + wrapped.assertNotCalled = () => pair.assertNeither(); + return wrapped; +}; diff --git a/www/node_modules/selenium-webdriver/test/lib/until_test.js b/www/node_modules/selenium-webdriver/test/lib/until_test.js new file mode 100644 index 0000000..3a25b76 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/until_test.js @@ -0,0 +1,436 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); + +const error = require('../../error'); +const By = require('../../lib/by').By; +const CommandName = require('../../lib/command').Name; +const promise = require('../../lib/promise'); +const until = require('../../lib/until'); +const webdriver = require('../../lib/webdriver'); + +describe('until', function() { + let driver, executor; + + function createResponse(value) { + return {status: 0, value}; + } + + class TestExecutor { + constructor() { + this.handlers_ = {}; + } + + on(cmd, handler) { + this.handlers_[cmd] = handler; + return this; + } + + execute(cmd) { + let self = this; + return new Promise(function(fulfill) { + if (!self.handlers_[cmd.getName()]) { + throw new error.UnknownCommandError(cmd.getName()); + } + fulfill(self.handlers_[cmd.getName()](cmd)); + }); + } + } + + function fail(opt_msg) { + throw new assert.AssertionError({message: opt_msg}); + } + + beforeEach(function setUp() { + executor = new TestExecutor(); + driver = new webdriver.WebDriver('session-id', executor); + }); + + describe('ableToSwitchToFrame', function() { + it('failsFastForNonSwitchErrors', function() { + let e = Error('boom'); + executor.on(CommandName.SWITCH_TO_FRAME, function() { + throw e; + }); + return driver.wait(until.ableToSwitchToFrame(0), 100) + .then(fail, (e2) => assert.strictEqual(e2, e)); + }); + + it('byIndex', function() { + executor.on(CommandName.SWITCH_TO_FRAME, function() { + return {status: error.ErrorCode.SUCCESS}; + }); + return driver.wait(until.ableToSwitchToFrame(0), 100); + }); + + it('byWebElement', function() { + executor.on(CommandName.SWITCH_TO_FRAME, function(cmd, callback) { + return {status: error.ErrorCode.SUCCESS}; + }); + var el = new webdriver.WebElement(driver, {ELEMENT: 1234}); + return driver.wait(until.ableToSwitchToFrame(el), 100); + }); + + it('byWebElementPromise', function() { + executor.on(CommandName.SWITCH_TO_FRAME, function(cmd, callback) { + return {status: error.ErrorCode.SUCCESS}; + }); + var el = new webdriver.WebElementPromise(driver, + promise.fulfilled(new webdriver.WebElement(driver, {ELEMENT: 1234}))); + return driver.wait(until.ableToSwitchToFrame(el), 100); + }); + + it('byLocator', function() { + executor.on(CommandName.FIND_ELEMENTS, function() { + return { + status: error.ErrorCode.SUCCESS, + value: [{ELEMENT: 1234}] + }; + }).on(CommandName.SWITCH_TO_FRAME, function() { + return {status: error.ErrorCode.SUCCESS}; + }); + + return driver.wait(until.ableToSwitchToFrame(By.id('foo')), 100); + }); + + it('byLocator_elementNotInitiallyFound', function() { + var foundResponses = [[], [], [{ELEMENT: 1234}]]; + executor.on(CommandName.FIND_ELEMENTS, function() { + return { + status: error.ErrorCode.SUCCESS, + value: foundResponses.shift() + }; + }).on(CommandName.SWITCH_TO_FRAME, function(cmd, callback) { + return {status: error.ErrorCode.SUCCESS}; + }); + + return driver.wait(until.ableToSwitchToFrame(By.id('foo')), 2000) + .then(function() { + assert.equal(foundResponses.length, 0); + }); + }); + + it('timesOutIfNeverAbletoSwitchFrames', function() { + var count = 0; + executor.on(CommandName.SWITCH_TO_FRAME, function() { + count += 1; + return {status: error.ErrorCode.NO_SUCH_FRAME}; + }); + + return driver.wait(until.ableToSwitchToFrame(0), 100) + .then(fail, function(e) { + assert.ok(count > 0); + assert.ok( + e.message.startsWith('Waiting to be able to switch to frame'), + 'Wrong message: ' + e.message); + }); + }); + }); + + describe('alertIsPresent', function() { + it('failsFastForNonAlertSwitchErrors', function() { + return driver.wait(until.alertIsPresent(), 100).then(fail, function(e) { + assert.ok(e instanceof error.UnknownCommandError); + assert.equal(e.message, CommandName.GET_ALERT_TEXT); + }); + }); + + it('waitsForAlert', function() { + var count = 0; + executor.on(CommandName.GET_ALERT_TEXT, function() { + if (count++ < 3) { + return {status: error.ErrorCode.NO_SUCH_ALERT}; + } else { + return {status: error.ErrorCode.SUCCESS}; + } + }).on(CommandName.DISMISS_ALERT, function(cmd, callback) { + return {status: error.ErrorCode.SUCCESS}; + }); + + return driver.wait(until.alertIsPresent(), 1000).then(function(alert) { + assert.equal(count, 4); + return alert.dismiss(); + }); + }); + }); + + it('testUntilTitleIs', function() { + var titles = ['foo', 'bar', 'baz']; + executor.on(CommandName.GET_TITLE, function() { + return createResponse(titles.shift()); + }); + + return driver.wait(until.titleIs('bar'), 3000).then(function() { + assert.deepStrictEqual(titles, ['baz']); + }); + }); + + it('testUntilTitleContains', function() { + var titles = ['foo', 'froogle', 'google']; + executor.on(CommandName.GET_TITLE, function() { + return createResponse(titles.shift()); + }); + + return driver.wait(until.titleContains('oogle'), 3000).then(function() { + assert.deepStrictEqual(titles, ['google']); + }); + }); + + it('testUntilTitleMatches', function() { + var titles = ['foo', 'froogle', 'aaaabc', 'aabbbc', 'google']; + executor.on(CommandName.GET_TITLE, function() { + return createResponse(titles.shift()); + }); + + return driver.wait(until.titleMatches(/^a{2,3}b+c$/), 3000) + .then(function() { + assert.deepStrictEqual(titles, ['google']); + }); + }); + + it('testUntilElementLocated', function() { + var responses = [[], [{ELEMENT: 'abc123'}, {ELEMENT: 'foo'}], ['end']]; + executor.on(CommandName.FIND_ELEMENTS, function(cmd, callback) { + return createResponse(responses.shift()); + }); + + let element = driver.wait(until.elementLocated(By.id('quux')), 2000); + assert.ok(element instanceof webdriver.WebElementPromise); + return element.getId().then(function(id) { + assert.deepStrictEqual(responses, [['end']]); + assert.equal(id, 'abc123'); + }); + }); + + describe('untilElementLocated, elementNeverFound', function() { + function runNoElementFoundTest(locator, locatorStr) { + executor.on(CommandName.FIND_ELEMENTS, function() { + return createResponse([]); + }); + + function expectedFailure() { + fail('expected condition to timeout'); + } + + return driver.wait(until.elementLocated(locator), 100) + .then(expectedFailure, function(error) { + var expected = 'Waiting for element to be located ' + locatorStr; + var lines = error.message.split(/\n/, 2); + assert.equal(lines[0], expected); + + let regex = /^Wait timed out after \d+ms$/; + assert.ok(regex.test(lines[1]), + `Lines <${lines[1]}> does not match ${regex}`); + }); + } + + it('byLocator', function() { + return runNoElementFoundTest( + By.id('quux'), 'By(css selector, *[id="quux"])'); + }); + + it('byHash', function() { + return runNoElementFoundTest( + {id: 'quux'}, 'By(css selector, *[id="quux"])'); + }); + + it('byFunction', function() { + return runNoElementFoundTest(function() {}, 'by function()'); + }); + }); + + it('testUntilElementsLocated', function() { + var responses = [[], [{ELEMENT: 'abc123'}, {ELEMENT: 'foo'}], ['end']]; + executor.on(CommandName.FIND_ELEMENTS, function() { + return createResponse(responses.shift()); + }); + + return driver.wait(until.elementsLocated(By.id('quux')), 2000) + .then(function(els) { + return Promise.all(els.map(e => e.getId())); + }).then(function(ids) { + assert.deepStrictEqual(responses, [['end']]); + assert.equal(ids.length, 2); + assert.equal(ids[0], 'abc123'); + assert.equal(ids[1], 'foo'); + }); + }); + + describe('untilElementsLocated, noElementsFound', function() { + function runNoElementsFoundTest(locator, locatorStr) { + executor.on(CommandName.FIND_ELEMENTS, function() { + return createResponse([]); + }); + + function expectedFailure() { + fail('expected condition to timeout'); + } + + return driver.wait(until.elementsLocated(locator), 100) + .then(expectedFailure, function(error) { + var expected = + 'Waiting for at least one element to be located ' + locatorStr; + var lines = error.message.split(/\n/, 2); + assert.equal(lines[0], expected); + + let regex = /^Wait timed out after \d+ms$/; + assert.ok(regex.test(lines[1]), + `Lines <${lines[1]}> does not match ${regex}`); + }); + } + + it('byLocator', function() { + return runNoElementsFoundTest( + By.id('quux'), 'By(css selector, *[id="quux"])'); + }); + + it('byHash', function() { + return runNoElementsFoundTest( + {id: 'quux'}, 'By(css selector, *[id="quux"])'); + }); + + it('byFunction', function() { + return runNoElementsFoundTest(function() {}, 'by function()'); + }); + }); + + it('testUntilStalenessOf', function() { + var responses = [ + createResponse('body'), + createResponse('body'), + createResponse('body'), + {status: error.ErrorCode.STALE_ELEMENT_REFERENCE, + value: {message: 'now stale'}}, + ['end'] + ]; + executor.on(CommandName.GET_ELEMENT_TAG_NAME, function() { + return responses.shift(); + }); + + var el = new webdriver.WebElement(driver, {ELEMENT: 'foo'}); + return driver.wait(until.stalenessOf(el), 2000).then(function() { + assert.deepStrictEqual(responses, [['end']]); + }); + }); + + describe('element state conditions', function() { + function runElementStateTest(predicate, command, responses, var_args) { + let original = new webdriver.WebElement(driver, 'foo'); + let predicateArgs = [original]; + if (arguments.length > 3) { + predicateArgs = predicateArgs.concat(arguments[1]); + command = arguments[2]; + responses = arguments[3]; + } + + assert.ok(responses.length > 1); + + responses = responses.concat(['end']); + executor.on(command, function() { + return createResponse(responses.shift()); + }); + + let result = driver.wait(predicate.apply(null, predicateArgs), 2000); + assert.ok(result instanceof webdriver.WebElementPromise); + return result.then(function(value) { + assert.ok(value instanceof webdriver.WebElement); + assert.ok(!(value instanceof webdriver.WebElementPromise)); + return value.getId(); + }).then(function(id) { + assert.equal('foo', id); + assert.deepStrictEqual(responses, ['end']); + }); + } + + it('elementIsVisible', function() { + return runElementStateTest( + until.elementIsVisible, + CommandName.IS_ELEMENT_DISPLAYED, [false, false, true]); + }); + + it('elementIsNotVisible', function() { + return runElementStateTest( + until.elementIsNotVisible, + CommandName.IS_ELEMENT_DISPLAYED, [true, true, false]); + }); + + it('elementIsEnabled', function() { + return runElementStateTest( + until.elementIsEnabled, + CommandName.IS_ELEMENT_ENABLED, [false, false, true]); + }); + + it('elementIsDisabled', function() { + return runElementStateTest( + until.elementIsDisabled, + CommandName.IS_ELEMENT_ENABLED, [true, true, false]); + }); + + it('elementIsSelected', function() { + return runElementStateTest( + until.elementIsSelected, + CommandName.IS_ELEMENT_SELECTED, [false, false, true]); + }); + + it('elementIsNotSelected', function() { + return runElementStateTest( + until.elementIsNotSelected, + CommandName.IS_ELEMENT_SELECTED, [true, true, false]); + }); + + it('elementTextIs', function() { + return runElementStateTest( + until.elementTextIs, 'foobar', + CommandName.GET_ELEMENT_TEXT, + ['foo', 'fooba', 'foobar']); + }); + + it('elementTextContains', function() { + return runElementStateTest( + until.elementTextContains, 'bar', + CommandName.GET_ELEMENT_TEXT, + ['foo', 'foobaz', 'foobarbaz']); + }); + + it('elementTextMatches', function() { + return runElementStateTest( + until.elementTextMatches, /fo+bar{3}/, + CommandName.GET_ELEMENT_TEXT, + ['foo', 'foobar', 'fooobarrr']); + }); + }); + + describe('WebElementCondition', function() { + it('fails if wait completes with a non-WebElement value', function() { + let result = driver.wait( + new until.WebElementCondition('testing', () => 123), 1000); + + return result.then( + () => assert.fail('expected to fail'), + function(e) { + assert.ok(e instanceof TypeError); + assert.equal( + 'WebElementCondition did not resolve to a WebElement: ' + + '[object Number]', + e.message); + }); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/lib/webdriver_test.js b/www/node_modules/selenium-webdriver/test/lib/webdriver_test.js new file mode 100644 index 0000000..eb68625 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/lib/webdriver_test.js @@ -0,0 +1,2207 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const testutil = require('./testutil'); + +const error = require('../../error'); + +const By = require('../../lib/by').By; +const Capabilities = require('../../lib/capabilities').Capabilities; +const Executor = require('../../lib/command').Executor; +const CName = require('../../lib/command').Name; +const Button = require('../../lib/input').Button; +const Key = require('../../lib/input').Key; +const logging = require('../../lib/logging'); +const Session = require('../../lib/session').Session; +const promise = require('../../lib/promise'); +const Alert = require('../../lib/webdriver').Alert; +const AlertPromise = require('../../lib/webdriver').AlertPromise; +const UnhandledAlertError = require('../../lib/webdriver').UnhandledAlertError; +const WebDriver = require('../../lib/webdriver').WebDriver; +const WebElement = require('../../lib/webdriver').WebElement; +const WebElementPromise = require('../../lib/webdriver').WebElementPromise; + +const assert = require('assert'); +const sinon = require('sinon'); + +const SESSION_ID = 'test_session_id'; + +// Aliases for readability. +const NativePromise = Promise; +const ECode = error.ErrorCode; +const StubError = testutil.StubError; +const assertIsInstance = testutil.assertIsInstance; +const assertIsStubError = testutil.assertIsStubError; +const throwStubError = testutil.throwStubError; +const fail = (msg) => assert.fail(msg); + +describe('WebDriver', function() { + const LOG = logging.getLogger('webdriver.test'); + + // before(function() { + // logging.getLogger('webdriver').setLevel(logging.Level.ALL); + // logging.installConsoleHandler(); + // }); + + // after(function() { + // logging.getLogger('webdriver').setLevel(null); + // logging.removeConsoleHandler(); + // }); + + var driver; + var flow; + var uncaughtExceptions; + + beforeEach(function setUp() { + flow = promise.controlFlow(); + uncaughtExceptions = []; + flow.on('uncaughtException', onUncaughtException); + }); + + afterEach(function tearDown() { + return waitForIdle(flow).then(function() { + assert.deepEqual([], uncaughtExceptions); + flow.reset(); + }); + }); + + function onUncaughtException(e) { + uncaughtExceptions.push(e); + } + + function waitForIdle(opt_flow) { + var theFlow = opt_flow || flow; + return new Promise(function(fulfill, reject) { + if (theFlow.isIdle()) { + fulfill(); + return; + } + theFlow.once('idle', fulfill); + theFlow.once('uncaughtException', reject); + }); + } + + function waitForAbort(opt_flow, opt_n) { + var n = opt_n || 1; + var theFlow = opt_flow || flow; + theFlow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + return new Promise(function(fulfill, reject) { + theFlow.once('idle', function() { + reject(Error('expected flow to report an unhandled error')); + }); + + var errors = []; + theFlow.on('uncaughtException', onError); + function onError(e) { + errors.push(e); + if (errors.length === n) { + theFlow.removeListener('uncaughtException', onError); + fulfill(n === 1 ? errors[0] : errors); + } + } + }); + } + + function expectedError(ctor, message) { + return function(e) { + assertIsInstance(ctor, e); + assert.equal(message, e.message); + }; + } + + class Expectation { + constructor(executor, name, opt_parameters) { + this.executor_ = executor; + this.name_ = name; + this.times_ = 1; + this.sessionId_ = SESSION_ID; + this.check_ = null; + this.toDo_ = null; + this.withParameters(opt_parameters || {}); + } + + anyTimes() { + this.times_ = Infinity; + return this; + } + + times(n) { + this.times_ = n; + return this; + } + + withParameters(parameters) { + this.parameters_ = parameters; + if (this.name_ !== CName.NEW_SESSION) { + this.parameters_['sessionId'] = this.sessionId_; + } + return this; + } + + andReturn(code, opt_value) { + this.toDo_ = function(command) { + LOG.info('executing ' + command.getName() + '; returning ' + code); + return Promise.resolve({ + 'status': code, + 'sessionId': { + 'value': SESSION_ID + }, + 'value': opt_value !== void(0) ? opt_value : null + }); + }; + return this; + } + + andReturnSuccess(opt_value) { + return this.andReturn(0, opt_value); + } + + andReturnError(code, opt_value) { + return this.andReturn(code, opt_value); + } + + expect(name, opt_parameters) { + this.end(); + return this.executor_.expect(name, opt_parameters); + } + + end() { + if (!this.toDo_) { + this.andReturnSuccess(null); + } + return this.executor_; + } + + execute(command) { + assert.deepEqual(this.parameters_, command.getParameters()); + return this.toDo_(command); + } + } + + class FakeExecutor { + constructor() { + this.commands_ = new Map; + } + + execute(command) { + let expectations = this.commands_.get(command.getName()); + if (!expectations || !expectations.length) { + assert.fail('unexpected command: ' + command.getName()); + return; + } + + let next = expectations[0]; + let result = next.execute(command); + if (next.times_ != Infinity) { + next.times_ -= 1; + if (!next.times_) { + expectations.shift(); + } + } + return result; + } + + expect(commandName, opt_parameters) { + if (!this.commands_.has(commandName)) { + this.commands_.set(commandName, []); + } + let e = new Expectation(this, commandName, opt_parameters); + this.commands_.get(commandName).push(e); + return e; + } + + createDriver(opt_session) { + let session = opt_session || new Session(SESSION_ID, {}); + return new WebDriver(session, this); + } + } + + + ///////////////////////////////////////////////////////////////////////////// + // + // Tests + // + ///////////////////////////////////////////////////////////////////////////// + + + describe('testAttachToSession', function() { + it('sessionIsAvailable', function() { + let executor = new FakeExecutor(). + expect(CName.DESCRIBE_SESSION). + withParameters({'sessionId': SESSION_ID}). + andReturnSuccess({'browserName': 'firefox'}). + end(); + + let driver = WebDriver.attachToSession(executor, SESSION_ID); + return driver.getSession().then(function(session) { + assert.deepEqual({'value': 'test_session_id'}, session.getId()); + assert.equal('firefox', session.getCapability('browserName')); + }); + }); + + it('failsToGetSessionInfo', function() { + let executor = new FakeExecutor(). + expect(CName.DESCRIBE_SESSION). + withParameters({'sessionId': SESSION_ID}). + andReturnError(ECode.UNKNOWN_ERROR, {'message': 'boom'}). + end(); + + let driver = WebDriver.attachToSession(executor, SESSION_ID); + return driver.getSession() + .then(() => assert.fail('should have failed!'), function(e) { + assertIsInstance(error.WebDriverError, e); + assert.equal('boom', e.message); + }); + }); + + it('usesActiveFlowByDefault', function() { + let executor = new FakeExecutor(). + expect(CName.DESCRIBE_SESSION). + withParameters({'sessionId': SESSION_ID}). + andReturnSuccess({}). + end(); + + var driver = WebDriver.attachToSession(executor, SESSION_ID); + assert.equal(driver.controlFlow(), promise.controlFlow()); + + return waitForIdle(driver.controlFlow()); + }); + + it('canAttachInCustomFlow', function() { + let executor = new FakeExecutor(). + expect(CName.DESCRIBE_SESSION). + withParameters({'sessionId': SESSION_ID}). + andReturnSuccess({}). + end(); + + var otherFlow = new promise.ControlFlow(); + var driver = WebDriver.attachToSession(executor, SESSION_ID, otherFlow); + assert.equal(otherFlow, driver.controlFlow()); + assert.notEqual(otherFlow, promise.controlFlow()); + + return waitForIdle(otherFlow); + }); + }); + + describe('testCreateSession', function() { + it('happyPathWithCapabilitiesHashObject', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({ + 'desiredCapabilities': {'browserName': 'firefox'} + }). + andReturnSuccess({'browserName': 'firefox'}). + end(); + + var driver = WebDriver.createSession(executor, { + 'browserName': 'firefox' + }); + return driver.getSession().then(function(session) { + assert.deepEqual({ + 'value':'test_session_id' + }, session.getId()); + assert.equal('firefox', session.getCapability('browserName')); + }); + }); + + it('happyPathWithCapabilitiesInstance', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': {'browserName': 'firefox'}}). + andReturnSuccess({'browserName': 'firefox'}). + end(); + + var driver = WebDriver.createSession(executor, Capabilities.firefox()); + return driver.getSession().then(function(session) { + assert.deepEqual({'value':'test_session_id' }, session.getId()); + assert.equal('firefox', session.getCapability('browserName')); + }); + }); + + it('failsToCreateSession', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': {'browserName': 'firefox'}}). + andReturnError(ECode.UNKNOWN_ERROR, {'message': 'boom'}). + end(); + + var driver = + WebDriver.createSession(executor, {'browserName': 'firefox'}); + return driver.getSession().then(fail, function(e) { + assertIsInstance(error.WebDriverError, e); + assert.equal('boom', e.message); + }); + }); + + it('usesActiveFlowByDefault', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': {}}). + andReturnSuccess({}). + end(); + + var driver = WebDriver.createSession(executor, {}); + assert.equal(promise.controlFlow(), driver.controlFlow()); + + return waitForIdle(driver.controlFlow()); + }); + + it('canCreateInCustomFlow', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': {}}). + andReturnSuccess({}). + end(); + + var otherFlow = new promise.ControlFlow(); + var driver = WebDriver.createSession(executor, {}, otherFlow); + assert.equal(otherFlow, driver.controlFlow()); + assert.notEqual(otherFlow, promise.controlFlow()); + + return waitForIdle(otherFlow); + }); + }); + + it('testDoesNotExecuteCommandIfSessionDoesNotResolve', function() { + var session = Promise.reject(new StubError); + new FakeExecutor().createDriver(session).getTitle(); + return waitForAbort().then(assertIsStubError); + }); + + it('testCommandReturnValuesArePassedToFirstCallback', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE).andReturnSuccess('Google Search'). + end(); + + var driver = executor.createDriver(); + return driver.getTitle().then(function(title) { + assert.equal('Google Search', title); + }); + }); + + it('testStopsCommandExecutionWhenAnErrorOccurs', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW). + withParameters({'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message': 'window not found'}). + end(); + + var driver = executor.createDriver(); + driver.switchTo().window('foo'); + driver.getTitle(); // mock should blow if this gets executed + + return waitForAbort(). + then(expectedError(error.NoSuchWindowError, 'window not found')); + }); + + it('testCanSuppressCommandFailures', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW). + withParameters({'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message': 'window not found'}). + expect(CName.GET_TITLE). + andReturnSuccess('Google Search'). + end(); + + var driver = executor.createDriver(); + driver.switchTo().window('foo') + .thenCatch(expectedError(error.NoSuchWindowError, 'window not found')); + driver.getTitle(); + return waitForIdle(); + }); + + it('testErrorsPropagateUpToTheRunningApplication', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW). + withParameters({'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message': 'window not found'}). + end(); + + executor.createDriver().switchTo().window('foo'); + return waitForAbort(). + then(expectedError(error.NoSuchWindowError, 'window not found')); + }); + + it('testErrbacksThatReturnErrorsStillSwitchToCallbackChain', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW). + withParameters({'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + return driver.switchTo().window('foo'). + thenCatch(function() { return new StubError; }); + then(assertIsStubError); + }); + + it('testErrbacksThrownCanOverrideOriginalError', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW, {'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + driver.switchTo().window('foo').thenCatch(throwStubError); + + return waitForAbort().then(assertIsStubError); + }); + + it('testCannotScheduleCommandsIfTheSessionIdHasBeenDeleted', function() { + var driver = new FakeExecutor().createDriver(); + delete driver.session_; + assert.throws(() => driver.get('http://www.google.com')); + }); + + it('testDeletesSessionIdAfterQuitting', function() { + var driver; + let executor = new FakeExecutor(). + expect(CName.QUIT). + end(); + + driver = executor.createDriver(); + return driver.quit().then(function() { + assert.equal(void 0, driver.session_); + }); + }); + + it('testReportsErrorWhenExecutingCommandsAfterExecutingAQuit', function() { + let executor = new FakeExecutor(). + expect(CName.QUIT). + end(); + + var driver = executor.createDriver(); + driver.quit(); + driver.get('http://www.google.com'); + return waitForAbort(). + then(expectedError( + error.UnsupportedOperationError, + 'This driver instance does not have a valid session ID ' + + '(did you call WebDriver.quit()?) and may no longer be used.')); + }); + + it('testCallbackCommandsExecuteBeforeNextCommand', function() { + let executor = new FakeExecutor(). + expect(CName.GET_CURRENT_URL). + expect(CName.GET, {'url': 'http://www.google.com'}). + expect(CName.CLOSE). + expect(CName.GET_TITLE). + end(); + + var driver = executor.createDriver(); + driver.getCurrentUrl().then(function() { + driver.get('http://www.google.com').then(function() { + driver.close(); + }); + }); + driver.getTitle(); + + return waitForIdle(); + }); + + it('testEachCallbackFrameRunsToCompletionBeforeTheNext', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.GET_CURRENT_URL). + expect(CName.GET_CURRENT_WINDOW_HANDLE). + expect(CName.CLOSE). + expect(CName.QUIT). + end(); + + var driver = executor.createDriver(); + driver.getTitle(). + // Everything in this callback... + then(function() { + driver.getCurrentUrl(); + driver.getWindowHandle(); + }). + // ...should execute before everything in this callback. + then(function() { + driver.close(); + }); + // This should execute after everything above + driver.quit(); + + return waitForIdle(); + }); + + describe('nestedCommandFailures', function() { + it('bubbleUpToGlobalHandlerIfUnsuppressed', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.SWITCH_TO_WINDOW, {'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + driver.getTitle().then(function() { + driver.switchTo().window('foo'); + }); + + return waitForAbort(). + then(expectedError(error.NoSuchWindowError, 'window not found')); + }); + + it('canBeSuppressWhenTheyOccur', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.SWITCH_TO_WINDOW, {'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + expect(CName.CLOSE). + end(); + + var driver = executor.createDriver(); + driver.getTitle().then(function() { + driver.switchTo().window('foo').thenCatch(function() {}); + }); + driver.close(); + + return waitForIdle(); + }); + + it('bubbleUpThroughTheFrameStack', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.SWITCH_TO_WINDOW, {'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + driver.getTitle(). + then(function() { + return driver.switchTo().window('foo'); + }). + thenCatch(function(e) { + assertIsInstance(error.NoSuchWindowError, e); + assert.equal('window not found', e.message); + }); + + return waitForIdle(); + }); + + it('canBeCaughtAndSuppressed', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.GET_CURRENT_URL). + expect(CName.SWITCH_TO_WINDOW, {'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + expect(CName.CLOSE). + end(); + + var driver = executor.createDriver(); + driver.getTitle().then(function() { + driver.getCurrentUrl(). + then(function() { + return driver.switchTo().window('foo'); + }). + thenCatch(function() {}); + driver.close(); + }); + + return waitForIdle(); + }); + }); + + describe('returningAPromise', function() { + it('fromACallback', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.GET_CURRENT_URL). + andReturnSuccess('http://www.google.com'). + end(); + + var driver = executor.createDriver(); + driver.getTitle(). + then(function() { + return driver.getCurrentUrl(); + }). + then(function(value) { + assert.equal('http://www.google.com', value); + }); + return waitForIdle(); + }); + + it('fromAnErrbackSuppressesTheError', function() { + var count = 0; + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW, {'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + expect(CName.GET_CURRENT_URL). + andReturnSuccess('http://www.google.com'). + end(); + + var driver = executor.createDriver(); + driver.switchTo().window('foo'). + thenCatch(function(e) { + assertIsInstance(error.NoSuchWindowError, e); + assert.equal('window not found', e.message); + count += 1; + return driver.getCurrentUrl(); + }). + then(function(url) { + count += 1; + assert.equal('http://www.google.com', url); + }); + return waitForIdle().then(function() { + assert.equal(2, count); + }); + }); + }); + + describe('customFunctions', function() { + it('returnsANonPromiseValue', function() { + var driver = new FakeExecutor().createDriver(); + return driver.call(() => 'abc123').then(function(value) { + assert.equal('abc123', value); + }); + }); + + it('executionOrderWithCustomFunctions', function() { + var msg = []; + let executor = new FakeExecutor(). + expect(CName.GET_TITLE).andReturnSuccess('cheese '). + expect(CName.GET_CURRENT_URL).andReturnSuccess('tasty'). + end(); + + var driver = executor.createDriver(); + + var pushMsg = msg.push.bind(msg); + driver.getTitle().then(pushMsg); + driver.call(() => 'is ').then(pushMsg); + driver.getCurrentUrl().then(pushMsg); + driver.call(() => '!').then(pushMsg); + + return waitForIdle().then(function() { + assert.equal('cheese is tasty!', msg.join('')); + }); + }); + + it('passingArgumentsToACustomFunction', function() { + var add = function(a, b) { + return a + b; + }; + var driver = new FakeExecutor().createDriver(); + return driver.call(add, null, 1, 2).then(function(value) { + assert.equal(3, value); + }); + }); + + it('passingPromisedArgumentsToACustomFunction', function() { + var promisedArg = promise.fulfilled(2); + var add = function(a, b) { + return a + b; + }; + var driver = new FakeExecutor().createDriver(); + return driver.call(add, null, 1, promisedArg).then(function(value) { + assert.equal(3, value); + }); + }); + + it('passingArgumentsAndScopeToACustomFunction', function() { + function Foo(name) { + this.name = name; + } + Foo.prototype.getName = function() { + return this.name; + }; + var foo = new Foo('foo'); + + var driver = new FakeExecutor().createDriver(); + return driver.call(foo.getName, foo).then(function(value) { + assert.equal('foo', value); + }); + }); + + it('customFunctionThrowsAnError', function() { + var driver = new FakeExecutor().createDriver(); + return driver.call(throwStubError).then(fail, assertIsStubError); + }); + + it('customFunctionSchedulesCommands', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.CLOSE). + expect(CName.QUIT). + end(); + + var driver = executor.createDriver(); + driver.call(function() { + driver.getTitle(); + driver.close(); + }); + driver.quit(); + return waitForIdle(); + }); + + it('returnsATaskResultAfterSchedulingAnother', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + andReturnSuccess('Google Search'). + expect(CName.CLOSE). + end(); + + var driver = executor.createDriver(); + return driver.call(function() { + var title = driver.getTitle(); + driver.close(); + return title; + }).then(function(title) { + assert.equal('Google Search', title); + }); + }); + + it('hasANestedCommandThatFails', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW, {'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + return driver.call(function() { + return driver.switchTo().window('foo'); + }).then(fail, function(e) { + assertIsInstance(error.NoSuchWindowError, e); + assert.equal('window not found', e.message); + }); + }); + + it('doesNotCompleteUntilReturnedPromiseIsResolved', function() { + var order = []; + var driver = new FakeExecutor().createDriver(); + + var d = promise.defer(); + d.promise.then(function() { + order.push('b'); + }); + + driver.call(function() { + order.push('a'); + return d.promise; + }); + driver.call(function() { + order.push('c'); + }); + + // timeout to ensure the first function starts its execution before we + // trigger d's callbacks. + return new Promise(f => setTimeout(f, 0)).then(function() { + assert.deepEqual(['a'], order); + d.fulfill(); + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c'], order); + }); + }); + }); + + it('returnsADeferredAction', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE).andReturnSuccess('Google'). + end(); + + var driver = executor.createDriver(); + driver.call(function() { + return driver.getTitle(); + }).then(function(title) { + assert.equal('Google', title); + }); + return waitForIdle(); + }); + }); + + describe('nestedCommands', function() { + it('commandExecutionOrder', function() { + var msg = []; + var driver = new FakeExecutor().createDriver(); + driver.call(msg.push, msg, 'a'); + driver.call(function() { + driver.call(msg.push, msg, 'c'); + driver.call(function() { + driver.call(msg.push, msg, 'e'); + driver.call(msg.push, msg, 'f'); + }); + driver.call(msg.push, msg, 'd'); + }); + driver.call(msg.push, msg, 'b'); + return waitForIdle().then(function() { + assert.equal('acefdb', msg.join('')); + }); + }); + + it('basicUsage', function() { + var msg = []; + var driver = new FakeExecutor().createDriver(); + var pushMsg = msg.push.bind(msg); + driver.call(() => 'cheese ').then(pushMsg); + driver.call(function() { + driver.call(() => 'is ').then(pushMsg); + driver.call(() => 'tasty').then(pushMsg); + }); + driver.call(() => '!').then(pushMsg); + return waitForIdle().then(function() { + assert.equal('cheese is tasty!', msg.join('')); + }); + }); + + it('canReturnValueFromNestedFunction', function() { + var driver = new FakeExecutor().createDriver(); + return driver.call(function() { + return driver.call(function() { + return driver.call(() => 'foobar'); + }); + }).then(function(value) { + assert.equal('foobar', value); + }); + }); + + it('normalCommandAfterNestedCommandThatReturnsAnAction', function() { + var msg = []; + let executor = new FakeExecutor(). + expect(CName.CLOSE). + end(); + var driver = executor.createDriver(); + driver.call(function() { + return driver.call(function() { + msg.push('a'); + return driver.call(() => 'foobar'); + }); + }); + driver.close().then(function() { + msg.push('b'); + }); + return waitForIdle().then(function() { + assert.equal('ab', msg.join('')); + }); + }); + + it('errorsBubbleUp_caught', function() { + var driver = new FakeExecutor().createDriver(); + var result = driver.call(function() { + return driver.call(function() { + return driver.call(throwStubError); + }); + }).then(fail, assertIsStubError); + return Promise.all([waitForIdle(), result]); + }); + + it('errorsBubbleUp_uncaught', function() { + var driver = new FakeExecutor().createDriver(); + driver.call(function() { + return driver.call(function() { + return driver.call(throwStubError); + }); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('canScheduleCommands', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.CLOSE). + end(); + + var driver = executor.createDriver(); + driver.call(function() { + driver.call(function() { + driver.getTitle(); + }); + driver.close(); + }); + return waitForIdle(); + }); + }); + + describe('WebElementPromise', function() { + it('resolvesWhenUnderlyingElementDoes', function() { + var el = new WebElement({}, {'ELEMENT': 'foo'}); + return new WebElementPromise({}, promise.fulfilled(el)).then(function(e) { + assert.strictEqual(e, el); + }); + }); + + it('resolvesBeforeCallbacksOnWireValueTrigger', function() { + var el = new promise.Deferred(); + + var element = new WebElementPromise({}, el.promise); + var messages = []; + + element.then(function() { + messages.push('element resolved'); + }); + element.getId().then(function() { + messages.push('wire value resolved'); + }); + + assert.deepEqual([], messages); + el.fulfill(new WebElement({}, {'ELEMENT': 'foo'})); + return waitForIdle().then(function() { + assert.deepEqual([ + 'element resolved', + 'wire value resolved' + ], messages); + }); + }); + + it('isRejectedIfUnderlyingIdIsRejected', function() { + var element = new WebElementPromise({}, promise.rejected(new StubError)); + return element.then(fail, assertIsStubError); + }); + }); + + describe('executeScript', function() { + it('nullReturnValue', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return document.body;') + .then((result) => assert.equal(null, result)); + }); + + it('primitiveReturnValue', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(123). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return document.body;') + .then((result) => assert.equal(123, result)); + }); + + it('webElementReturnValue', function() { + var json = WebElement.buildId('foo'); + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(json). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return document.body;') + .then((element) => element.getId()) + .then((id) => assert.equal(id, 'foo')); + }); + + it('arrayReturnValue', function() { + var json = [WebElement.buildId('foo')]; + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(json). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return document.body;') + .then(function(array) { + assert.equal(1, array.length); + return array[0].getId(); + }) + .then((id) => assert.equal('foo', id)); + }); + + it('objectReturnValue', function() { + var json = {'foo': WebElement.buildId('foo')}; + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(json). + end(); + + var driver = executor.createDriver(); + var callback; + return driver.executeScript('return document.body;') + .then((obj) => obj['foo'].getId()) + .then((id) => assert.equal(id, 'foo')); + }); + + it('scriptAsFunction', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return (' + function() {} + + ').apply(null, arguments);', + 'args': [] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + return driver.executeScript(function() {}); + }); + + it('simpleArgumentConversion', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return 1;', + 'args': ['abc', 123, true, [123, {'foo': 'bar'}]] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + return driver.executeScript( + 'return 1;', 'abc', 123, true, [123, {'foo': 'bar'}]); + }); + + it('webElementArgumentConversion', function() { + var elementJson = WebElement.buildId('fefifofum'); + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return 1;', + 'args': [elementJson] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return 1;', + new WebElement(driver, 'fefifofum')); + }); + + it('webElementPromiseArgumentConversion', function() { + var elementJson = WebElement.buildId('bar'); + + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {'using': 'css selector', 'value': '*[id="foo"]'}). + andReturnSuccess(elementJson). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return 1;', + 'args': [elementJson] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + return driver.executeScript('return 1;', element); + }); + + it('argumentConversion', function() { + var elementJson = WebElement.buildId('fefifofum'); + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return 1;', + 'args': ['abc', 123, true, elementJson, [123, {'foo': 'bar'}]] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + var element = new WebElement(driver, 'fefifofum'); + return driver.executeScript('return 1;', + 'abc', 123, true, element, [123, {'foo': 'bar'}]); + }); + + it('scriptReturnsAnError', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'throw Error(arguments[0]);', + 'args': ['bam'] + }). + andReturnError(ECode.UNKNOWN_ERROR, {'message':'bam'}). + end(); + var driver = executor.createDriver(); + return driver.executeScript('throw Error(arguments[0]);', 'bam'). + then(fail, function(e) { + assertIsInstance(error.WebDriverError, e); + assert.equal('bam', e.message); + }); + }); + + it('failsIfArgumentIsARejectedPromise', function() { + let executor = new FakeExecutor(); + + var arg = promise.rejected(new StubError); + arg.thenCatch(function() {}); // Suppress default handler. + + var driver = executor.createDriver(); + return driver.executeScript(function() {}, arg). + then(fail, assertIsStubError); + }); + }); + + describe('executeAsyncScript', function() { + it('failsIfArgumentIsARejectedPromise', function() { + var arg = promise.rejected(new StubError); + arg.thenCatch(function() {}); // Suppress default handler. + + var driver = new FakeExecutor().createDriver(); + return driver.executeAsyncScript(function() {}, arg). + then(fail, assertIsStubError); + }); + }); + + describe('findElement', function() { + it('elementNotFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.NO_SUCH_ELEMENT, { + 'message':'Unable to find element' + }). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + element.click(); // This should never execute. + return waitForAbort().then(function(e) { + assertIsInstance(error.NoSuchElementError, e); + assert.equal('Unable to find element', e.message); + }); + }); + + it('elementNotFoundInACallback', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError( + ECode.NO_SUCH_ELEMENT, {'message':'Unable to find element'}). + end(); + + var driver = executor.createDriver(); + promise.fulfilled().then(function() { + var element = driver.findElement(By.id('foo')); + return element.click(); // Should not execute. + }); + return waitForAbort().then(function(e) { + assertIsInstance(error.NoSuchElementError, e); + assert.equal('Unable to find element', e.message); + }); + }); + + it('elementFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess(WebElement.buildId('bar')). + expect(CName.CLICK_ELEMENT, {'id': 'bar'}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + element.click(); + return waitForIdle(); + }); + + it('canUseElementInCallback', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess(WebElement.buildId('bar')). + expect(CName.CLICK_ELEMENT, {'id': 'bar'}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + driver.findElement(By.id('foo')).then(function(element) { + element.click(); + }); + return waitForIdle(); + }); + + it('byJs', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': 'return document.body', + 'args': [] + }). + andReturnSuccess(WebElement.buildId('bar')). + expect(CName.CLICK_ELEMENT, {'id': 'bar'}). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.js('return document.body')); + element.click(); // just to make sure + return waitForIdle(); + }); + + it('byJs_returnsNonWebElementValue', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, {'script': 'return 123', 'args': []}). + andReturnSuccess(123). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.js('return 123')); + element.click(); // Should not execute. + return waitForAbort().then(function(e) { + assertIsInstance(TypeError, e); + assert.equal('Custom locator did not return a WebElement', e.message); + }); + }); + + it('byJs_canPassArguments', function() { + var script = 'return document.getElementsByTagName(arguments[0]);'; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': script, + 'args': ['div'] + }). + andReturnSuccess({'ELEMENT':'one'}). + end(); + var driver = executor.createDriver(); + driver.findElement(By.js(script, 'div')); + return waitForIdle(); + }); + + it('customLocator', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, {'using': 'css selector', 'value': 'a'}). + andReturnSuccess([ + WebElement.buildId('foo'), + WebElement.buildId('bar')]). + expect(CName.CLICK_ELEMENT, {'id': 'foo'}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(function(d) { + assert.equal(driver, d); + return d.findElements(By.tagName('a')); + }); + element.click(); + return waitForIdle(); + }); + + it('customLocatorThrowsIfresultIsNotAWebElement', function() { + var driver = new FakeExecutor().createDriver(); + driver.findElement(function() { + return 1; + }); + return waitForAbort().then(function(e) { + assertIsInstance(TypeError, e); + assert.equal('Custom locator did not return a WebElement', e.message); + }); + }); + }); + + describe('isElementPresent', function() { + it('elementNotFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([]). + end(); + + var driver = executor.createDriver(); + return driver.isElementPresent(By.id('foo')) + .then((found) => assert.ok(!found)); + }); + + it('elementFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([WebElement.buildId('bar')]). + end(); + + var driver = executor.createDriver(); + return driver.isElementPresent(By.id('foo')).then(assert.ok); + }); + + it('letsErrorsPropagate', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.UNKNOWN_ERROR, {'message':'There is no spoon'}). + end(); + + var driver = executor.createDriver(); + driver.isElementPresent(By.id('foo')); + return waitForAbort().then(function(e) { + assertIsInstance(error.WebDriverError, e); + assert.equal(e.message, 'There is no spoon'); + }); + }); + + it('byJs', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, {'script': 'return 123', 'args': []}). + andReturnSuccess([WebElement.buildId('bar')]). + end(); + + var driver = executor.createDriver(); + return driver.isElementPresent(By.js('return 123')).then(assert.ok); + }); + + it('byJs_canPassScriptArguments', function() { + var script = 'return document.getElementsByTagName(arguments[0]);'; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': script, + 'args': ['div'] + }). + andReturnSuccess([WebElement.buildId('one')]). + end(); + + var driver = executor.createDriver(); + driver.isElementPresent(By.js(script, 'div')).then(assert.ok); + return waitForIdle(); + }); + }); + + describe('findElements', function() { + it('returnsMultipleElements', function() { + var ids = ['foo', 'bar', 'baz']; + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, {'using':'css selector', 'value':'a'}). + andReturnSuccess(ids.map(WebElement.buildId)). + end(); + + var driver = executor.createDriver(); + return driver.findElements(By.tagName('a')) + .then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }) + .then((actual) => assert.deepEqual(ids, actual)); + }); + + it('byJs', function() { + var ids = ['foo', 'bar', 'baz']; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': 'return document.getElementsByTagName("div");', + 'args': [] + }). + andReturnSuccess(ids.map(WebElement.buildId)). + end(); + + var driver = executor.createDriver(); + + return driver. + findElements(By.js('return document.getElementsByTagName("div");')). + then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }). + then((actual) => assert.deepEqual(ids, actual)); + }); + + it('byJs_filtersOutNonWebElementResponses', function() { + var ids = ['foo', 'bar', 'baz']; + var json = [ + WebElement.buildId(ids[0]), + 123, + 'a', + false, + WebElement.buildId(ids[1]), + {'not a web element': 1}, + WebElement.buildId(ids[2]) + ]; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': 'return document.getElementsByTagName("div");', + 'args': [] + }). + andReturnSuccess(json). + end(); + + var driver = executor.createDriver(); + driver.findElements(By.js('return document.getElementsByTagName("div");')). + then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }). + then((actual) => assert.deepEqual(ids, actual)); + return waitForIdle(); + }); + + it('byJs_convertsSingleWebElementResponseToArray', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': 'return document.getElementsByTagName("div");', + 'args': [] + }). + andReturnSuccess(WebElement.buildId('foo')). + end(); + + var driver = executor.createDriver(); + return driver. + findElements(By.js('return document.getElementsByTagName("div");')). + then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }). + then((actual) => assert.deepEqual(['foo'], actual)); + }); + + it('byJs_canPassScriptArguments', function() { + var script = 'return document.getElementsByTagName(arguments[0]);'; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': script, + 'args': ['div'] + }). + andReturnSuccess([ + WebElement.buildId('one'), + WebElement.buildId('two') + ]). + end(); + + var driver = executor.createDriver(); + return driver.findElements(By.js(script, 'div')) + then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }). + then((actual) => assert.deepEqual(['one', 'two'], actual)); + }); + }); + + describe('sendKeys', function() { + it('convertsVarArgsIntoStrings_simpleArgs', function() { + let executor = new FakeExecutor(). + expect(CName.SEND_KEYS_TO_ELEMENT, {'id': 'one', + 'value':['1','2','abc','3']}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + var element = new WebElement(driver, 'one'); + element.sendKeys(1, 2, 'abc', 3); + return waitForIdle(); + }); + + it('convertsVarArgsIntoStrings_promisedArgs', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {'using':'css selector', 'value':'*[id="foo"]'}). + andReturnSuccess(WebElement.buildId('one')). + expect(CName.SEND_KEYS_TO_ELEMENT, {'id':'one', + 'value':['abc', '123', 'def']}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + element.sendKeys( + promise.fulfilled('abc'), 123, + promise.fulfilled('def')); + return waitForIdle(); + }); + + it('sendKeysWithAFileDetector', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {'using':'css selector', 'value':'*[id="foo"]'}). + andReturnSuccess(WebElement.buildId('one')). + expect(CName.SEND_KEYS_TO_ELEMENT, {'id': 'one', + 'value':['modified/path']}). + andReturnSuccess(). + end(); + + let driver = executor.createDriver(); + let handleFile = function(d, path) { + assert.strictEqual(driver, d); + assert.equal(path, 'original/path'); + return promise.fulfilled('modified/path'); + }; + driver.setFileDetector({handleFile}); + + var element = driver.findElement(By.id('foo')); + element.sendKeys('original/', 'path'); + return waitForIdle(); + }); + }); + + describe('elementEquality', function() { + it('isReflexive', function() { + var a = new WebElement({}, 'foo'); + return WebElement.equals(a, a).then(assert.ok); + }); + + it('failsIfAnInputElementCouldNotBeFound', function() { + var id = promise.rejected(new StubError); + id.thenCatch(function() {}); // Suppress default handler. + + var driver = new FakeExecutor().createDriver(); + var a = new WebElement(driver, 'foo'); + var b = new WebElementPromise(driver, id); + + return WebElement.equals(a, b).then(fail, assertIsStubError); + }); + }); + + describe('waiting', function() { + it('waitSucceeds', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([]). + times(2). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([WebElement.buildId('bar')]). + end(); + + var driver = executor.createDriver(); + driver.wait(function() { + return driver.isElementPresent(By.id('foo')); + }, 200); + return waitForIdle(); + }); + + it('waitTimesout_timeoutCaught', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([]). + anyTimes(). + end(); + + var driver = executor.createDriver(); + return driver.wait(function() { + return driver.isElementPresent(By.id('foo')); + }, 25).then(fail, function(e) { + assert.equal('Wait timed out after ', + e.message.substring(0, 'Wait timed out after '.length)); + }); + }); + + it('waitTimesout_timeoutNotCaught', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([]). + anyTimes(). + end(); + + var driver = executor.createDriver(); + driver.wait(function() { + return driver.isElementPresent(By.id('foo')); + }, 25); + return waitForAbort().then(function(e) { + assert.equal('Wait timed out after ', + e.message.substring(0, 'Wait timed out after '.length)); + }); + }); + }); + + describe('alert handling', function() { + it('interceptsAndTransformsUnhandledAlertErrors', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.UNEXPECTED_ALERT_OPEN, { + 'message': 'boom', + 'alert': {'text': 'hello'} + }). + end(); + + var driver = executor.createDriver(); + return driver.findElement(By.id('foo')).then(fail, function(e) { + assertIsInstance(UnhandledAlertError, e); + assert.equal('hello', e.getAlertText()); + }); + }); + + it('usesEmptyStringIfAlertTextOmittedFromResponse', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.UNEXPECTED_ALERT_OPEN, {'message': 'boom'}). + end(); + + var driver = executor.createDriver(); + return driver.findElement(By.id('foo')).then(fail, function(e) { + assertIsInstance(UnhandledAlertError, e); + assert.equal('', e.getAlertText()); + }); + }); + + it('alertResolvesWhenPromisedTextResolves', function() { + var textPromise = new promise.Deferred(); + + var alert = new AlertPromise({}, textPromise); + assert.ok(alert.isPending()); + + textPromise.fulfill(new Alert({}, 'foo')); + return alert.getText().then(function(text) { + assert.equal('foo', text); + }); + }); + + it('cannotSwitchToAlertThatIsNotPresent', function() { + let executor = new FakeExecutor() + .expect(CName.GET_ALERT_TEXT) + .andReturnError(ECode.NO_SUCH_ALERT, {'message': 'no alert'}) + .end(); + + var driver = executor.createDriver(); + var alert = driver.switchTo().alert(); + alert.dismiss(); // Should never execute. + return waitForAbort().then(function(e) { + assertIsInstance(error.NoSuchAlertError, e); + assert.equal('no alert', e.message); + }); + }); + + it('alertsBelongToSameFlowAsParentDriver', function() { + let executor = new FakeExecutor() + .expect(CName.GET_ALERT_TEXT).andReturnSuccess('hello') + .end(); + + var driver = executor.createDriver(); + var otherFlow = new promise.ControlFlow(); + otherFlow.execute(function() { + driver.switchTo().alert().then(function() { + assert.strictEqual( + driver.controlFlow(), promise.controlFlow(), + 'Alert should belong to the same flow as its parent driver'); + }); + }); + + assert.notEqual(otherFlow, driver.controlFlow); + return Promise.all([ + waitForIdle(otherFlow), + waitForIdle(driver.controlFlow()) + ]); + }); + + it('commandsFailIfAlertNotPresent', function() { + let executor = new FakeExecutor() + .expect(CName.GET_ALERT_TEXT) + .andReturnError(ECode.NO_SUCH_ALERT, {'message': 'no alert'}) + .end(); + + var driver = executor.createDriver(); + var alert = driver.switchTo().alert(); + + var expectError = expectedError(error.NoSuchAlertError, 'no alert'); + + return alert.getText() + .then(fail, expectedError) + .then(() => alert.accept()) + .then(fail, expectedError) + .then(() => alert.dismiss()) + .then(fail, expectError) + .then(() => alert.sendKeys('hi')) + .then(fail, expectError); + }); + }); + + it('testWebElementsBelongToSameFlowAsParentDriver', function() { + let executor = new FakeExecutor() + .expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}) + .andReturnSuccess(WebElement.buildId('abc123')) + .end(); + + var driver = executor.createDriver(); + var otherFlow = new promise.ControlFlow(); + otherFlow.execute(function() { + driver.findElement({id: 'foo'}).then(function() { + assert.equal(driver.controlFlow(), promise.controlFlow()); + }); + }); + + assert.notEqual(otherFlow, driver.controlFlow); + return Promise.all([ + waitForIdle(otherFlow), + waitForIdle(driver.controlFlow()) + ]); + }); + + it('testFetchingLogs', function() { + let executor = new FakeExecutor(). + expect(CName.GET_LOG, {'type': 'browser'}). + andReturnSuccess([ + {'level': 'INFO', 'message': 'hello', 'timestamp': 1234}, + {'level': 'DEBUG', 'message': 'abc123', 'timestamp': 5678} + ]). + end(); + + var driver = executor.createDriver(); + return driver.manage().logs().get('browser').then(function(entries) { + assert.equal(2, entries.length); + + assert.ok(entries[0] instanceof logging.Entry); + assert.equal(logging.Level.INFO.value, entries[0].level.value); + assert.equal('hello', entries[0].message); + assert.equal(1234, entries[0].timestamp); + + assert.ok(entries[1] instanceof logging.Entry); + assert.equal(logging.Level.DEBUG.value, entries[1].level.value); + assert.equal('abc123', entries[1].message); + assert.equal(5678, entries[1].timestamp); + }); + }); + + it('testCommandsFailIfInitialSessionCreationFailed', function() { + var session = promise.rejected(new StubError); + + var driver = new FakeExecutor().createDriver(session); + var navigateResult = driver.get('some-url').then(fail, assertIsStubError); + var quitResult = driver.quit().then(fail, assertIsStubError); + + return waitForIdle().then(function() { + return promise.all(navigateResult, quitResult); + }); + }); + + it('testWebElementCommandsFailIfInitialDriverCreationFailed', function() { + var session = Promise.reject(new StubError); + var driver = new FakeExecutor().createDriver(session); + return driver.findElement(By.id('foo')).click(). + then(fail, assertIsStubError); + }); + + it('testWebElementCommansFailIfElementCouldNotBeFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.NO_SUCH_ELEMENT, + {'message':'Unable to find element'}). + end(); + + var driver = executor.createDriver(); + return driver.findElement(By.id('foo')).click() + .then(fail, function(e) { + assertIsInstance(error.NoSuchElementError, e); + assert.equal('Unable to find element', e.message); + }); + }); + + it('testCannotFindChildElementsIfParentCouldNotBeFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.NO_SUCH_ELEMENT, + {'message':'Unable to find element'}). + end(); + + var driver = executor.createDriver(); + return driver.findElement(By.id('foo')) + .findElement(By.id('bar')) + .findElement(By.id('baz')) + .then(fail, function(e) { + assertIsInstance(error.NoSuchElementError, e); + assert.equal('Unable to find element', e.message); + }); + }); + + describe('actions()', function() { + it('failsIfInitialDriverCreationFailed', function() { + let session = promise.rejected(new StubError); + session.catch(function() {}); + return new FakeExecutor(). + createDriver(session). + actions(). + mouseDown(). + mouseUp(). + perform(). + thenCatch(assertIsStubError); + }); + + describe('mouseMove', function() { + it('noElement', function() { + let executor = new FakeExecutor() + .expect(CName.MOVE_TO, {'xoffset': 0, 'yoffset': 125}) + .andReturnSuccess() + .end(); + + return executor.createDriver(). + actions(). + mouseMove({x: 0, y: 125}). + perform(); + }); + + it('element', function() { + let executor = new FakeExecutor() + .expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}) + .andReturnSuccess(WebElement.buildId('abc123')) + .expect(CName.MOVE_TO, + {'element': 'abc123', 'xoffset': 0, 'yoffset': 125}) + .andReturnSuccess() + .end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + return driver.actions() + .mouseMove(element, {x: 0, y: 125}) + .perform(); + }); + }); + + it('supportsMouseDown', function() { + let executor = new FakeExecutor() + .expect(CName.MOUSE_DOWN, {'button': Button.LEFT}) + .andReturnSuccess() + .end(); + + return executor.createDriver(). + actions(). + mouseDown(). + perform(); + }); + + it('testActionSequence', function() { + let executor = new FakeExecutor() + .expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="a"]'}) + .andReturnSuccess(WebElement.buildId('id1')) + .expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="b"]'}) + .andReturnSuccess(WebElement.buildId('id2')) + .expect(CName.SEND_KEYS_TO_ACTIVE_ELEMENT, + {'value': [Key.SHIFT]}) + .andReturnSuccess() + .expect(CName.MOVE_TO, {'element': 'id1'}) + .andReturnSuccess() + .expect(CName.CLICK, {'button': Button.LEFT}) + .andReturnSuccess() + .expect(CName.MOVE_TO, {'element': 'id2'}) + .andReturnSuccess() + .expect(CName.CLICK, {'button': Button.LEFT}) + .andReturnSuccess() + .end(); + + var driver = executor.createDriver(); + var element1 = driver.findElement(By.id('a')); + var element2 = driver.findElement(By.id('b')); + + return driver.actions() + .keyDown(Key.SHIFT) + .click(element1) + .click(element2) + .perform(); + }); + }); + + describe('touchActions()', function() { + it('failsIfInitialDriverCreationFailed', function() { + let session = promise.rejected(new StubError); + session.catch(function() {}); + return new FakeExecutor(). + createDriver(session). + touchActions(). + scroll({x: 3, y: 4}). + perform(). + thenCatch(assertIsStubError); + }); + + it('testTouchActionSequence', function() { + let executor = new FakeExecutor() + .expect(CName.TOUCH_DOWN, {x: 1, y: 2}).andReturnSuccess() + .expect(CName.TOUCH_MOVE, {x: 3, y: 4}).andReturnSuccess() + .expect(CName.TOUCH_UP, {x: 5, y: 6}).andReturnSuccess() + .end(); + + var driver = executor.createDriver(); + return driver.touchActions() + .tapAndHold({x: 1, y: 2}) + .move({x: 3, y: 4}) + .release({x: 5, y: 6}) + .perform(); + }); + }); + + describe('generator support', function() { + var driver; + + beforeEach(function() { + driver = new WebDriver( + new Session('test-session', {}), + new ExplodingExecutor()); + }); + + it('canUseGeneratorsWithWebDriverCall', function() { + return driver.call(function* () { + var x = yield promise.fulfilled(1); + var y = yield promise.fulfilled(2); + return x + y; + }).then(function(value) { + assert.deepEqual(3, value); + }); + }); + + it('canDefineScopeOnGeneratorCall', function() { + return driver.call(function* () { + var x = yield promise.fulfilled(1); + return this.name + x; + }, {name: 'Bob'}).then(function(value) { + assert.deepEqual('Bob1', value); + }); + }); + + it('canSpecifyArgsOnGeneratorCall', function() { + return driver.call(function* (a, b) { + var x = yield promise.fulfilled(1); + var y = yield promise.fulfilled(2); + return [x + y, a, b]; + }, null, 'abc', 123).then(function(value) { + assert.deepEqual([3, 'abc', 123], value); + }); + }); + + it('canUseGeneratorWithWebDriverWait', function() { + var values = []; + return driver.wait(function* () { + yield values.push(1); + values.push(yield promise.delayed(10).then(function() { + return 2; + })); + yield values.push(3); + return values.length === 6; + }, 250).then(function() { + assert.deepEqual([1, 2, 3, 1, 2, 3], values); + }); + }); + + /** + * @constructor + * @implements {CommandExecutor} + */ + function ExplodingExecutor() {} + + + /** @override */ + ExplodingExecutor.prototype.execute = function(command, cb) { + cb(Error('Unsupported operation')); + }; + }); + + describe('wire format', function() { + describe('can serialize', function() { + function runSerializeTest(input, want) { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': want}). + andReturnSuccess({'browserName': 'firefox'}). + end(); + return WebDriver.createSession(executor, input) + .getSession(); + } + + it('function as a string', function() { + function foo() { return 'foo'; } + return runSerializeTest(foo, '' + foo); + }); + + it('object with toJSON()', function() { + return runSerializeTest( + new Date(605728511546), + '1989-03-12T17:55:11.546Z'); + }); + + it('Session', function() { + return runSerializeTest(new Session('foo', {}), 'foo'); + }); + + it('Capabilities', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + + var caps = Capabilities.chrome(); + caps.setLoggingPrefs(prefs); + + return runSerializeTest( + caps, + { + 'browserName': 'chrome', + 'loggingPrefs': {'browser': 'DEBUG'} + }); + }); + + it('WebElement', function() { + return runSerializeTest( + new WebElement({}, 'fefifofum'), + WebElement.buildId('fefifofum')); + }); + + it('WebElementPromise', function() { + return runSerializeTest( + new WebElementPromise( + {}, promise.fulfilled(new WebElement({}, 'fefifofum'))), + WebElement.buildId('fefifofum')); + }); + + describe('an array', function() { + it('with Serializable', function() { + return runSerializeTest([new Session('foo', {})], ['foo']); + }); + + it('with WebElement', function() { + return runSerializeTest( + [new WebElement({}, 'fefifofum')], + [WebElement.buildId('fefifofum')]); + }); + + it('with WebElementPromise', function() { + return runSerializeTest( + [new WebElementPromise( + {}, promise.fulfilled(new WebElement({}, 'fefifofum')))], + [WebElement.buildId('fefifofum')]); + }); + + it('complex array', function() { + var expected = [ + 'abc', 123, true, WebElement.buildId('fefifofum'), + [123, {'foo': 'bar'}] + ]; + + var element = new WebElement({}, 'fefifofum'); + var input = ['abc', 123, true, element, [123, {'foo': 'bar'}]]; + return runSerializeTest(input, expected); + }); + + it('nested promises', function() { + return runSerializeTest( + ['abc', Promise.resolve([123, Promise.resolve(true)])], + ['abc', [123, true]]); + }); + }); + + describe('an object', function() { + it('literal', function() { + var expected = {sessionId: 'foo'}; + return runSerializeTest({sessionId: 'foo'}, expected); + }); + + it('with sub-objects', function() { + var expected = {sessionId: {value: 'foo'}}; + return runSerializeTest( + {sessionId: {value: 'foo'}}, expected); + }); + + it('with values that have toJSON', function() { + return runSerializeTest( + {a: {b: new Date(605728511546)}}, + {a: {b: '1989-03-12T17:55:11.546Z'}}); + }); + + it('with a Session', function() { + return runSerializeTest( + {a: new Session('foo', {})}, + {a: 'foo'}); + }); + + it('nested', function() { + var elementJson = WebElement.buildId('fefifofum'); + var expected = { + 'script': 'return 1', + 'args': ['abc', 123, true, elementJson, [123, {'foo': 'bar'}]], + 'sessionId': 'foo' + }; + + var element = new WebElement({}, 'fefifofum'); + var parameters = { + 'script': 'return 1', + 'args':['abc', 123, true, element, [123, {'foo': 'bar'}]], + 'sessionId': new Session('foo', {}) + }; + + return runSerializeTest(parameters, expected); + }); + }); + }); + + describe('can deserialize', function() { + function runDeserializeTest(original, want) { + let executor = new FakeExecutor() + .expect(CName.GET_CURRENT_URL) + .andReturnSuccess(original) + .end(); + let driver = executor.createDriver(); + return driver.getCurrentUrl().then(function(got) { + assert.deepEqual(got, want); + }); + } + + it('primitives', function() { + return Promise.all([ + runDeserializeTest(1, 1), + runDeserializeTest('', ''), + runDeserializeTest(true, true), + runDeserializeTest(undefined, undefined), + runDeserializeTest(null, null) + ]); + }); + + it('simple object', function() { + return runDeserializeTest( + {sessionId: 'foo'}, + {sessionId: 'foo'}); + }); + + it('nested object', function() { + return runDeserializeTest( + {'foo': {'bar': 123}}, + {'foo': {'bar': 123}}); + }); + + it('array', function() { + return runDeserializeTest( + [{'foo': {'bar': 123}}], + [{'foo': {'bar': 123}}]); + }); + + it('passes through function properties', function() { + function bar() {} + return runDeserializeTest( + [{foo: {'bar': 123}, func: bar}], + [{foo: {'bar': 123}, func: bar}]); + }); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/logging_test.js b/www/node_modules/selenium-webdriver/test/logging_test.js new file mode 100644 index 0000000..fb8cdb2 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/logging_test.js @@ -0,0 +1,167 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var Browser = require('..').Browser, + By = require('..').By, + logging = require('..').logging, + assert = require('../testing/assert'), + test = require('../lib/test'); + +test.suite(function(env) { + // Logging API has numerous issues with PhantomJS: + // - does not support adjusting log levels for type "browser". + // - does not return proper log level for "browser" messages. + // - does not delete logs after retrieval + // Logging API is not supported in IE. + // Tests depend on opening data URLs, which is broken in Safari (issue 7586) + test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.IE, Browser.SAFARI)). + describe('logging', function() { + var driver; + + test.beforeEach(function() { + driver = null; + }); + + test.afterEach(function() { + if (driver) { + driver.quit(); + } + }); + + test.it('can be disabled', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.OFF); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(0); + }); + }); + + // Firefox does not capture JS error console log messages. + test.ignore(env.browsers(Browser.FIREFOX)). + it('can be turned down', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.SEVERE); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(1); + assert(entries[0].level.name).equalTo('SEVERE'); + assert(entries[0].message).endsWith('and this is an error'); + }); + }); + + // Firefox does not capture JS error console log messages. + test.ignore(env.browsers(Browser.FIREFOX)). + it('can be made verbose', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(3); + assert(entries[0].level.name).equalTo('DEBUG'); + assert(entries[0].message).endsWith('hello'); + + assert(entries[1].level.name).equalTo('WARNING'); + assert(entries[1].message).endsWith('this is a warning'); + + assert(entries[2].level.name).equalTo('SEVERE'); + assert(entries[2].message).endsWith('and this is an error'); + }); + }); + + // Firefox does not capture JS error console log messages. + test.ignore(env.browsers(Browser.FIREFOX)). + it('clears records after retrieval', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(3); + }); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(0); + }); + }); + + test.it('does not mix log types', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + prefs.setLevel(logging.Type.DRIVER, logging.Level.SEVERE); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.DRIVER).then(function(entries) { + assert(entries.length).equalTo(0); + }); + }); + }); + + function dataUrl(var_args) { + return 'data:text/html,' + + Array.prototype.slice.call(arguments, 0).join(''); + } +}); diff --git a/www/node_modules/selenium-webdriver/test/net/portprober_test.js b/www/node_modules/selenium-webdriver/test/net/portprober_test.js new file mode 100644 index 0000000..03a2f7a --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/net/portprober_test.js @@ -0,0 +1,129 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + net = require('net'); + +var promise = require('../..').promise, + portprober = require('../../net/portprober'); + +describe('isFree', function() { + + var server; + + beforeEach(function() { + server = net.createServer(function(){}); + }) + + afterEach(function(done) { + if (!server) return done(); + server.close(function() { + done(); + }); + }); + + it('should work for INADDR_ANY', function(done) { + server.listen(0, function() { + var port = server.address().port; + assertPortNotfree(port).then(function() { + var done = promise.defer(); + server.close(function() { + server = null; + done.fulfill(assertPortIsFree(port)); + }); + return done.promise; + }).then(function() { done(); }, done); + }); + }); + + it('should work for a specific host', function(done) { + var host = '127.0.0.1'; + server.listen(0, host, function() { + var port = server.address().port; + assertPortNotfree(port, host).then(function() { + var done = promise.defer(); + server.close(function() { + server = null; + done.fulfill(assertPortIsFree(port, host)); + }); + return done.promise; + }).then(function() { done(); }, done); + }); + }); +}); + +describe('findFreePort', function() { + var server; + + beforeEach(function() { + server = net.createServer(function(){}); + }) + + afterEach(function(done) { + if (!server) return done(); + server.close(function() { + done(); + }); + }); + + it('should work for INADDR_ANY', function(done) { + portprober.findFreePort().then(function(port) { + server.listen(port, function() { + assertPortNotfree(port).then(function() { + var done = promise.defer(); + server.close(function() { + server = null; + done.fulfill(assertPortIsFree(port)); + }); + return done.promise; + }).then(function() { done(); }, done); + }); + }); + }); + + it('should work for a specific host', function(done) { + var host = '127.0.0.1'; + portprober.findFreePort(host).then(function(port) { + server.listen(port, host, function() { + assertPortNotfree(port, host).then(function() { + var done = promise.defer(); + server.close(function() { + server = null; + done.fulfill(assertPortIsFree(port, host)); + }); + return done.promise; + }).then(function() { done(); }, done); + }); + }); + }); +}); + + +function assertPortIsFree(port, opt_host) { + return portprober.isFree(port, opt_host).then(function(free) { + assert.ok(free, 'port should be free'); + }); +} + + +function assertPortNotfree(port, opt_host) { + return portprober.isFree(port, opt_host).then(function(free) { + assert.ok(!free, 'port should is not free'); + }); +} diff --git a/www/node_modules/selenium-webdriver/test/page_loading_test.js b/www/node_modules/selenium-webdriver/test/page_loading_test.js new file mode 100644 index 0000000..d59ca36 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/page_loading_test.js @@ -0,0 +1,164 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var Browser = require('..').Browser, + By = require('..').By, + error = require('../error'), + until = require('..').until, + assert = require('../testing/assert'), + test = require('../lib/test'), + Pages = test.Pages; + + +test.suite(function(env) { + var browsers = env.browsers; + + var driver; + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + test.it('should wait for document to be loaded', function() { + driver.get(Pages.simpleTestPage); + assert(driver.getTitle()).equalTo('Hello WebDriver'); + }); + + test.it('should follow redirects sent in the http response headers', + function() { + driver.get(Pages.redirectPage); + assert(driver.getTitle()).equalTo('We Arrive Here'); + }); + + test.it('should follow meta redirects', function() { + driver.get(Pages.metaRedirectPage); + assert(driver.getTitle()).equalTo('We Arrive Here'); + }); + + test.it('should be able to get a fragment on the current page', function() { + driver.get(Pages.xhtmlTestPage); + driver.get(Pages.xhtmlTestPage + '#text'); + driver.findElement(By.id('id1')); + }); + + test.ignore(browsers(Browser.IPAD, Browser.IPHONE)). + it('should wait for all frames to load in a frameset', function() { + driver.get(Pages.framesetPage); + driver.switchTo().frame(0); + + driver.findElement(By.css('span#pageNumber')).getText().then(function(txt) { + assert(txt.trim()).equalTo('1'); + }); + + driver.switchTo().defaultContent(); + driver.switchTo().frame(1); + driver.findElement(By.css('span#pageNumber')).getText().then(function(txt) { + assert(txt.trim()).equalTo('2'); + }); + }); + + test.ignore(browsers(Browser.SAFARI)). + it('should be able to navigate back in browser history', function() { + driver.get(Pages.formPage); + + driver.findElement(By.id('imageButton')).click(); + driver.wait(until.titleIs('We Arrive Here'), 2500); + + driver.navigate().back(); + driver.wait(until.titleIs('We Leave From Here'), 2500); + }); + + test.ignore(browsers(Browser.SAFARI)). + it('should be able to navigate back in presence of iframes', function() { + driver.get(Pages.xhtmlTestPage); + + driver.findElement(By.name('sameWindow')).click(); + driver.wait(until.titleIs('This page has iframes'), 2500); + + driver.navigate().back(); + driver.wait(until.titleIs('XHTML Test Page'), 2500); + }); + + test.ignore(browsers(Browser.SAFARI)). + it('should be able to navigate forwards in browser history', function() { + driver.get(Pages.formPage); + + driver.findElement(By.id('imageButton')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + + driver.navigate().back(); + driver.wait(until.titleIs('We Leave From Here'), 5000); + + driver.navigate().forward(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + // PhantomJS 2.0 does not properly reload pages on refresh. + test.ignore(browsers(Browser.PHANTOM_JS)). + it('should be able to refresh a page', function() { + driver.get(Pages.xhtmlTestPage); + + driver.navigate().refresh(); + + assert(driver.getTitle()).equalTo('XHTML Test Page'); + }); + + test.it('should return title of page if set', function() { + driver.get(Pages.xhtmlTestPage); + assert(driver.getTitle()).equalTo('XHTML Test Page'); + + driver.get(Pages.simpleTestPage); + assert(driver.getTitle()).equalTo('Hello WebDriver'); + }); + + // Only implemented in Firefox. + test.ignore(browsers( + Browser.CHROME, + Browser.IE, + Browser.IPAD, + Browser.IPHONE, + Browser.OPERA, + Browser.PHANTOM_JS, + Browser.SAFARI)). + it('should timeout if page load timeout is set', function() { + driver.call(function() { + driver.manage().timeouts().pageLoadTimeout(1); + driver.get(Pages.sleepingPage + '?time=3'). + then(function() { + throw Error('Should have timed out on page load'); + }, function(e) { + if (!(e instanceof error.ScriptTimeoutError) + && !(e instanceof error.TimeoutError)) { + throw Error('Unexpected error response: ' + e); + } + }); + }).then(resetPageLoad, function(err) { + resetPageLoad().thenFinally(function() { + throw err; + }); + }); + + function resetPageLoad() { + return driver.manage().timeouts().pageLoadTimeout(-1); + } + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js b/www/node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js new file mode 100644 index 0000000..22a9a22 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js @@ -0,0 +1,73 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); +var path = require('path'); +var test = require('../../lib/test'); + +test.suite(function(env) { + var driver; + + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + var testPageUrl = + 'data:text/html,

      ' + path.basename(__filename) + '

      '; + + test.beforeEach(function() { + driver.get(testPageUrl); + }); + + describe('phantomjs.Driver', function() { + describe('#executePhantomJS()', function() { + + test.it('can execute scripts using PhantomJS API', function() { + return driver.executePhantomJS('return this.url;').then(function(url) { + assert.equal(testPageUrl, decodeURIComponent(url)); + }); + }); + + test.it('can execute scripts as functions', function() { + driver.executePhantomJS(function(a, b) { + return a + b; + }, 1, 2).then(function(result) { + assert.equal(3, result); + }); + }); + + test.it('can manipulate the current page', function() { + driver.manage().addCookie('foo', 'bar'); + driver.manage().getCookie('foo').then(function(cookie) { + assert.equal('bar', cookie.value); + }); + driver.executePhantomJS(function() { + this.clearCookies(); + }); + driver.manage().getCookie('foo').then(function(cookie) { + assert.equal(null, cookie); + }); + }); + }); + }); +}, {browsers: ['phantomjs']}); diff --git a/www/node_modules/selenium-webdriver/test/proxy_test.js b/www/node_modules/selenium-webdriver/test/proxy_test.js new file mode 100644 index 0000000..b7a894f --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/proxy_test.js @@ -0,0 +1,170 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var http = require('http'), + url = require('url'); + +var Browser = require('..').Browser, + promise = require('..').promise, + proxy = require('../proxy'), + assert = require('../testing/assert'), + test = require('../lib/test'), + Server = require('../lib/test/httpserver').Server, + Pages = test.Pages; + + +test.suite(function(env) { + function writeResponse(res, body, encoding, contentType) { + res.writeHead(200, { + 'Content-Length': Buffer.byteLength(body, encoding), + 'Content-Type': contentType + }); + res.end(body); + } + + function writePacFile(res) { + writeResponse(res, [ + 'function FindProxyForURL(url, host) {', + ' if (shExpMatch(url, "' + goodbyeServer.url('*') + '")) {', + ' return "DIRECT";', + ' }', + ' return "PROXY ' + proxyServer.host() + '";', + '}' + ].join('\n'), 'ascii', 'application/x-javascript-config'); + } + + var proxyServer = new Server(function(req, res) { + var pathname = url.parse(req.url).pathname; + if (pathname === '/proxy.pac') { + return writePacFile(res); + } + + writeResponse(res, [ + '', + 'Proxy page', + '

      This is the proxy landing page

      ' + ].join(''), 'utf8', 'text/html; charset=UTF-8'); + }); + + var helloServer = new Server(function(req, res) { + writeResponse(res, [ + '', + 'Hello', + '

      Hello, world!

      ' + ].join(''), 'utf8', 'text/html; charset=UTF-8'); + }); + + var goodbyeServer = new Server(function(req, res) { + writeResponse(res, [ + '', + 'Goodbye', + '

      Goodbye, world!

      ' + ].join(''), 'utf8', 'text/html; charset=UTF-8'); + }); + + // Cannot pass start directly to mocha's before, as mocha will interpret the optional + // port parameter as an async callback parameter. + function mkStartFunc(server) { + return function() { + return server.start(); + }; + } + + + test.before(mkStartFunc(proxyServer)); + test.before(mkStartFunc(helloServer)); + test.before(mkStartFunc(goodbyeServer)); + + test.after(proxyServer.stop.bind(proxyServer)); + test.after(helloServer.stop.bind(helloServer)); + test.after(goodbyeServer.stop.bind(goodbyeServer)); + + var driver; + test.beforeEach(function() { driver = null; }); + test.afterEach(function() { driver && driver.quit(); }); + + // Proxy support not implemented. + test.ignore(env.browsers(Browser.IE, Browser.OPERA, Browser.SAFARI)). + describe('manual proxy settings', function() { + // phantomjs 1.9.1 in webdriver mode does not appear to respect proxy + // settings. + test.ignore(env.browsers(Browser.PHANTOM_JS)). + it('can configure HTTP proxy host', function() { + driver = env.builder(). + setProxy(proxy.manual({ + http: proxyServer.host() + })). + build(); + + driver.get(helloServer.url()); + assert(driver.getTitle()).equalTo('Proxy page'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('This is the proxy landing page'); + }); + + // PhantomJS does not support bypassing the proxy for individual hosts. + test.ignore(env.browsers(Browser.PHANTOM_JS)). + it('can bypass proxy for specific hosts', function() { + driver = env.builder(). + setProxy(proxy.manual({ + http: proxyServer.host(), + bypass: helloServer.host() + })). + build(); + + driver.get(helloServer.url()); + assert(driver.getTitle()).equalTo('Hello'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('Hello, world!'); + + driver.get(goodbyeServer.url()); + assert(driver.getTitle()).equalTo('Proxy page'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('This is the proxy landing page'); + }); + + // TODO: test ftp and https proxies. + }); + + // PhantomJS does not support PAC file proxy configuration. + // Safari does not support proxies. + test.ignore(env.browsers( + Browser.IE, Browser.OPERA, Browser.PHANTOM_JS, Browser.SAFARI)). + describe('pac proxy settings', function() { + test.it('can configure proxy through PAC file', function() { + driver = env.builder(). + setProxy(proxy.pac(proxyServer.url('/proxy.pac'))). + build(); + + driver.get(helloServer.url()); + assert(driver.getTitle()).equalTo('Proxy page'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('This is the proxy landing page'); + + driver.get(goodbyeServer.url()); + assert(driver.getTitle()).equalTo('Goodbye'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('Goodbye, world!'); + }); + }); + + // TODO: figure out how to test direct and system proxy settings. + describe.skip('direct proxy settings', function() {}); + describe.skip('system proxy settings', function() {}); +}); diff --git a/www/node_modules/selenium-webdriver/test/remote_test.js b/www/node_modules/selenium-webdriver/test/remote_test.js new file mode 100644 index 0000000..c103d81 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/remote_test.js @@ -0,0 +1,72 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +var assert = require('assert'); + +var promise = require('../').promise; +var remote = require('../remote'); + +describe('DriverService', function() { + describe('start()', function() { + var service; + + beforeEach(function() { + service = new remote.DriverService(process.execPath, { + port: 1234, + args: ['-e', 'process.exit(1)'] + }); + }); + + afterEach(function(done) { + service.kill().thenFinally(function() { + done(); + }); + }); + + it('fails if child-process dies', function(done) { + this.timeout(1000); + service.start(500) + .then(expectFailure.bind(null, done), verifyFailure.bind(null, done)); + }); + + it('failures propagate through control flow if child-process dies', + function(done) { + this.timeout(1000); + + promise.controlFlow().execute(function() { + promise.controlFlow().execute(function() { + return service.start(500); + }); + }) + .then(expectFailure.bind(null, done), verifyFailure.bind(null, done)); + }); + + function verifyFailure(done, e) { + try { + assert.ok(!(e instanceof promise.CancellationError)); + assert.equal('Server terminated early with status 1', e.message); + done(); + } catch (ex) { + done(ex); + } + } + + function expectFailure(done) { + done(Error('expected to fail')); + } + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/stale_element_test.js b/www/node_modules/selenium-webdriver/test/stale_element_test.js new file mode 100644 index 0000000..72833d8 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/stale_element_test.js @@ -0,0 +1,58 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fail = require('assert').fail; + +var Browser = require('..').Browser, + By = require('..').By, + error = require('..').error, + until = require('..').until, + assert = require('../testing/assert'), + test = require('../lib/test'), + Pages = test.Pages; + + +test.suite(function(env) { + var driver; + test.before(function() { driver = env.builder().build(); }); + test.after(function() { driver.quit(); }); + + test.it( + 'dynamically removing elements from the DOM trigger a ' + + 'StaleElementReferenceError', + function() { + driver.get(Pages.javascriptPage); + + var toBeDeleted = driver.findElement(By.id('deleted')); + assert(toBeDeleted.isDisplayed()).isTrue(); + + driver.findElement(By.id('delete')).click(); + driver.wait(until.stalenessOf(toBeDeleted), 5000); + }); + + test.it('an element found in a different frame is stale', function() { + driver.get(Pages.missedJsReferencePage); + driver.switchTo().frame('inner'); + var el = driver.findElement(By.id('oneline')); + driver.switchTo().defaultContent(); + el.getText().then(fail, function(e) { + assert(e).instanceOf(error.StaleElementReferenceError); + }); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/tag_name_test.js b/www/node_modules/selenium-webdriver/test/tag_name_test.js new file mode 100644 index 0000000..d5e18a9 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/tag_name_test.js @@ -0,0 +1,34 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var By = require('..').By, + assert = require('../testing/assert'), + test = require('../lib/test'); + + +test.suite(function(env) { + var driver; + test.after(function() { driver.quit(); }); + + test.it('should return lower case tag name', function() { + driver = env.builder().build(); + driver.get(test.Pages.formPage); + assert(driver.findElement(By.id('cheese')).getTagName()).equalTo('input'); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/testing/assert_test.js b/www/node_modules/selenium-webdriver/test/testing/assert_test.js new file mode 100644 index 0000000..8c88482 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/testing/assert_test.js @@ -0,0 +1,374 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('../../testing/assert'); + +const AssertionError = require('assert').AssertionError; +const assertTrue = require('assert').ok; +const assertEqual = require('assert').equal; +const assertThrows = require('assert').throws; +const fail = require('assert').fail; + + +describe('assert', function() { + describe('atLeast', function() { + it('compares subject >= value', function() { + assert(1).atLeast(0); + assert(1).atLeast(1); + assertThrows(() => assert(1).atLeast(2)); + }); + + it('accepts failure message', function() { + assertThrows( + () => assert(1).atLeast(2, 'hi there!'), + (error) => error.message.indexOf('hi there') != -1); + }); + + it('fails if given a non-numeric subject', function() { + assertThrows(() => assert('a').atLeast(1)); + }); + + it('fails if given a non-numeric bound', function() { + assertThrows(() => assert(1).atLeast('a')); + }); + + it('waits for promised subject', function() { + return assert(Promise.resolve(123)).atLeast(100); + }); + + it('waits for promised subject (with failure)', function() { + return assert(Promise.resolve(100)) + .atLeast(123) + .then(() => fail('should have failed'), function(e) { + assertInstanceOf(AssertionError, e); + assertEqual('100 >= 123', e.message); + }); + }); + }); + + describe('atMost', function() { + it('compares subject <= value', function() { + assertThrows(() => assert(1).atMost(0)); + assert(1).atMost(1); + assert(1).atMost(2); + }); + + it('accepts failure message', function() { + assertThrows( + () => assert(1).atMost(0, 'hi there!'), + (error) => error.message.indexOf('hi there!') != -1); + }); + + it('fails if given a non-numeric subject', function() { + assertThrows(() => assert(1).atMost('a')); + }); + + it('fails if given a non-numeric bound', function() { + assertThrows(() => assert('a').atMost(1)); + }); + + it('waits for promised subject', function() { + return assert(Promise.resolve(100)).atMost(123); + }); + + it('waits for promised subject (with failure)', function() { + return assert(Promise.resolve(123)) + .atMost(100) + .then(() => fail('should have failed'), function(e) { + assertInstanceOf(AssertionError, e); + assertEqual('123 <= 100', e.message); + }); + }); + }); + + describe('greaterThan', function() { + it('compares subject > value', function() { + assertThrows(() => assert(1).greaterThan(1)); + assertThrows(() => assert(1).greaterThan(2)); + assert(2).greaterThan(1); + }); + + it('accepts failure message', function() { + assertThrows( + () => assert(0).greaterThan(1, 'hi there!'), + (error) => error.message.indexOf('hi there!') != -1); + }); + + it('fails if given a non-numeric subject', function() { + assertThrows(() => assert('a').atMost(1)); + }); + + it('fails if given a non-numeric bound', function() { + assertThrows(() => assert(1).atMost('a')); + }); + + it('waits for promised subject', function() { + return assert(Promise.resolve(123)).greaterThan(100); + }); + + it('waits for promised subject (with failure)', function() { + return assert(Promise.resolve(100)) + .greaterThan(123) + .then(() => fail('should have failed'), function(e) { + assertInstanceOf(AssertionError, e); + assertEqual('100 > 123', e.message); + }); + }); + }); + + describe('lessThan', function() { + it('compares subject < value', function() { + assertThrows(() => assert(1).lessThan(0)); + assertThrows(() => assert(1).lessThan(1)); + assert(1).lessThan(2); + }); + + it('accepts failure message', function() { + assertThrows( + () => assert(1).lessThan(0, 'hi there!'), + (error) => error.message.indexOf('hi there!') != -1); + }); + + it('fails if given a non-numeric subject', function() { + assertThrows(() => assert('a').lessThan(1)); + }); + + it('fails if given a non-numeric bound', function() { + assertThrows(() => assert(1).lessThan('a')); + }); + + it('waits for promised subject', function() { + return assert(Promise.resolve(100)).lessThan(123); + }); + + it('waits for promised subject (with failure)', function() { + return assert(Promise.resolve(123)) + .lessThan(100) + .then(() => fail('should have failed'), function(e) { + assertInstanceOf(AssertionError, e); + assertEqual('123 < 100', e.message); + }); + }); + }); + + describe('closeTo', function() { + it('accepts values within epislon of target', function() { + assert(123).closeTo(123, 0); + assert(123).closeTo(124, 1); + assert(125).closeTo(124, 1); + + assertThrows(() => assert(123).closeTo(125, .1)); + assertThrows(() => assert(1./3).closeTo(.8, .01)); + }); + + it('waits for promised values', function() { + let d = Promise.defer(); + setTimeout(() => d.resolve(123), 10); + return assert(d.promise).closeTo(124, 1); + }); + }); + + describe('instanceOf', function() { + it('works with direct instances', function() { + assert(Error('foo')).instanceOf(Error); + }); + + it('works with sub-types', function() { + assert(TypeError('foo')).instanceOf(Error); + }); + + it('parent types are not instances of sub-types', function() { + assertThrows(() => assert(Error('foo')).instanceOf(TypeError)); + }); + }); + + describe('isNull', function() { + it('normal case', function() { + assert(null).isNull(); + assertThrows(() => assert(1).isNull()); + }); + + it('handles promised values', function() { + let p = new Promise(function(f) { + setTimeout(() => f(null), 10); + }); + return assert(p).isNull(); + }); + + it('does not match on undefined', function() { + assertThrows(() => assert(void(0)).isNull()); + }) + }); + + describe('isUndefined', function() { + it('normal case', function() { + assert(void(0)).isUndefined(); + assertThrows(() => assert(1).isUndefined()); + }); + + it('handles promised values', function() { + let p = new Promise(function(f) { + setTimeout(() => f(void(0)), 10); + }); + return assert(p).isUndefined(); + }); + + it('does not match on null', function() { + assertThrows(() => assert(null).isUndefined()); + }) + }); + + describe('contains', function() { + it('works with strings', function() { + assert('abc').contains('a'); + assert('abc').contains('ab'); + assert('abc').contains('abc'); + assert('abc').contains('bc'); + assert('abc').contains('c'); + assertThrows(() => assert('abc').contains('d')); + }); + + it('works with arrays', function() { + assert([1, 2, 3]).contains(1); + assert([1, 2, 3]).contains(2); + assert([1, 2, 3]).contains(3); + assertThrows(() => assert([1, 2]).contains(3)); + }); + + it('works with maps', function() { + let m = new Map; + m.set(1, 2); + assert(m).contains(1); + assertThrows(() => assert(m).contains(2)); + }); + + it('works with sets', function() { + let s = new Set; + s.add(1); + assert(s).contains(1); + assertThrows(() => assert(s).contains(2)); + }); + + it('requires an array, string, map, or set subject', function() { + assertThrows(() => assert(123).contains('a')); + }); + }); + + describe('endsWith', function() { + it('works', function() { + assert('abc').endsWith('abc'); + assert('abc').endsWith('bc'); + assert('abc').endsWith('c'); + assertThrows(() => assert('abc').endsWith('d')); + }) + }); + + describe('startsWith', function() { + it('works', function() { + assert('abc').startsWith('abc'); + assert('abc').startsWith('ab'); + assert('abc').startsWith('a'); + assertThrows(() => assert('abc').startsWith('d')); + }) + }); + + describe('matches', function() { + it('requires a regex value', function() { + assertThrows(() => assert('abc').matches(1234)); + }); + + it('requires a string value', function() { + assertThrows(() => assert(1234).matches(/abc/)); + }); + + it('requires a string value (promise case)', function() { + return assert(Promise.resolve(1234)) + .matches(/abc/) + .then(fail, function(error) { + assertEqual( + 'Expected a string matching /abc/, got <1234> (number)', + error.message); + }); + }); + + it('applies regex', function() { + assert('abc').matches(/abc/); + assertThrows(() => assert('def').matches(/abc/)); + }); + }); + + describe('isTrue', function() { + it('only accepts booleans', function() { + assertThrows(() => assert(123).isTrue()); + }); + + it('accepts true values', function() { + assert(true).isTrue(); + assert(Boolean('abc')).isTrue(); + return assert(Promise.resolve(true)).isTrue(); + }); + + it('rejects false values', function() { + assertThrows(() => assert(false).isTrue()); + assertThrows(() => assert(Boolean(0)).isTrue()); + return assert(Promise.resolve(false)).isTrue() + .then(fail, function() {/*no-op, ok*/}); + }); + }); + + describe('isFalse', function() { + it('only accepts booleans', function() { + assertThrows(() => assert(123).isFalse()); + }) + + it('accepts false values', function() { + assert(false).isFalse(); + assert(Boolean('')).isFalse(); + return assert(Promise.resolve(false)).isFalse(); + }); + + it('rejects true values', function() { + assertThrows(() => assert(true).isFalse()); + assertThrows(() => assert(Boolean(1)).isFalse()); + return assert(Promise.resolve(true)).isFalse() + .then(fail, function() {/*no-op, ok*/}); + }); + }); + + describe('isEqualTo', function() { + it('is strict equality', function() { + assert('abc').isEqualTo('abc'); + assert('abc').equals('abc'); + assert('abc').equalTo('abc'); + assertThrows(() => assert('1').isEqualTo(1)); + }); + }); + + describe('notEqualTo', function() { + it('tests strict equality', function() { + assert('1').notEqualTo(1); + assert(1).notEqualTo('1'); + assertThrows(() => assert('abc').notEqualTo('abc')); + }); + }); + + function assertInstanceOf(ctor, value) { + assertTrue(value instanceof ctor); + } +}); diff --git a/www/node_modules/selenium-webdriver/test/testing/index_test.js b/www/node_modules/selenium-webdriver/test/testing/index_test.js new file mode 100644 index 0000000..31acff2 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/testing/index_test.js @@ -0,0 +1,178 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); +var promise = require('../..').promise; + +var test = require('../../testing'); + +describe('Mocha Integration', function() { + + describe('beforeEach properly binds "this"', function() { + beforeEach(function() { this.x = 1; }); + test.beforeEach(function() { this.x = 2; }); + it('', function() { assert.equal(this.x, 2); }); + }); + + describe('afterEach properly binds "this"', function() { + it('', function() { this.x = 1; }); + test.afterEach(function() { this.x = 2; }); + afterEach(function() { assert.equal(this.x, 2); }); + }); + + describe('it properly binds "this"', function() { + beforeEach(function() { this.x = 1; }); + test.it('', function() { this.x = 2; }); + afterEach(function() { assert.equal(this.x, 2); }); + }); + + describe('timeout handling', function() { + describe('it does not reset the control flow on a non-timeout', function() { + var flowReset = false; + + beforeEach(function() { + flowReset = false; + test.controlFlow().once(promise.ControlFlow.EventType.RESET, onreset); + }); + + test.it('', function() { + this.timeout(100); + return promise.delayed(50); + }); + + afterEach(function() { + assert.ok(!flowReset); + test.controlFlow().removeListener( + promise.ControlFlow.EventType.RESET, onreset); + }); + + function onreset() { + flowReset = true; + } + }); + + describe('it resets the control flow after a timeout' ,function() { + var timeoutErr, flowReset; + + beforeEach(function() { + flowReset = false; + test.controlFlow().once(promise.ControlFlow.EventType.RESET, onreset); + }); + + test.it('', function() { + var callback = this.runnable().callback; + var test = this; + this.runnable().callback = function(err) { + timeoutErr = err; + // Reset our timeout to 0 so Mocha does not fail the test. + test.timeout(0); + // When we invoke the real callback, do not pass along the error so + // Mocha does not fail the test. + return callback.call(this); + }; + + test.timeout(50); + return promise.defer().promise; + }); + + afterEach(function() { + return Promise.resolve().then(function() { + test.controlFlow().removeListener( + promise.ControlFlow.EventType.RESET, onreset); + assert.ok(flowReset, 'control flow was not reset after a timeout'); + }); + }); + + function onreset() { + flowReset = true; + } + }); + }); +}); + +describe('Mocha async "done" support', function() { + this.timeout(2*1000); + + var waited = false; + var DELAY = 100; // ms enough to notice + + // Each test asynchronously sets waited to true, so clear/check waited + // before/after: + beforeEach(function() { + waited = false; + }); + + afterEach(function() { + assert.strictEqual(waited, true); + }); + + // --- First, vanilla mocha "it" should support the "done" callback correctly. + + // This 'it' should block until 'done' is invoked + it('vanilla delayed', function(done) { + setTimeout(function delayedVanillaTimeout() { + waited = true; + done(); + }, DELAY); + }); + + // --- Now with the webdriver wrappers for 'it' should support the "done" callback: + + test.it('delayed', function(done) { + assert(done); + assert.strictEqual(typeof done, 'function'); + setTimeout(function delayedTimeoutCallback() { + waited = true; + done(); + }, DELAY); + }); + + // --- And test that the webdriver wrapper for 'it' works with a returned promise, too: + + test.it('delayed by promise', function() { + var defer = promise.defer(); + setTimeout(function delayedPromiseCallback() { + waited = true; + defer.fulfill('ignored'); + }); + return defer.promise; + }); + +}); + +describe('ControlFlow and "done" work together', function() { + var flow, order; + before(function() { + order = []; + flow = test.controlFlow(); + flow.execute(function() { order.push(1); }); + }); + + test.it('control flow updates and async done', function(done) { + flow.execute(function() { order.push(2); }); + flow.execute(function() { order.push(3); }).then(function() { + order.push(4); + }); + done(); + }) + + after(function() { + assert.deepEqual([1, 2, 3, 4], order); + }) +}); diff --git a/www/node_modules/selenium-webdriver/test/upload_test.js b/www/node_modules/selenium-webdriver/test/upload_test.js new file mode 100644 index 0000000..f7fd907 --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/upload_test.js @@ -0,0 +1,85 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'); + +var Browser = require('..').Browser, + By = require('..').By, + until = require('..').until, + io = require('../io'), + remote = require('../remote'), + assert = require('../testing/assert'), + test = require('../lib/test'), + Pages = test.Pages; + +test.suite(function(env) { + var LOREM_IPSUM_TEXT = 'lorem ipsum dolor sit amet'; + var FILE_HTML = '
      ' + LOREM_IPSUM_TEXT + '
      '; + + var fp; + test.before(function() { + return fp = io.tmpFile().then(function(fp) { + fs.writeFileSync(fp, FILE_HTML); + return fp; + }); + }) + + var driver; + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + if (driver) { + driver.quit(); + } + }); + + test.ignore(env.browsers( + Browser.IPAD, + Browser.IPHONE, + // Uploads broken in PhantomJS 2.0. + // See https://github.com/ariya/phantomjs/issues/12506 + Browser.PHANTOM_JS, + Browser.SAFARI)). + it('can upload files', function() { + driver.setFileDetector(new remote.FileDetector); + + driver.get(Pages.uploadPage); + + var fp = driver.call(function() { + return io.tmpFile().then(function(fp) { + fs.writeFileSync(fp, FILE_HTML); + return fp; + }); + }); + + driver.findElement(By.id('upload')).sendKeys(fp); + driver.findElement(By.id('go')).submit(); + + // Uploading files across a network may take a while, even if they're small. + var label = driver.findElement(By.id('upload_label')); + driver.wait(until.elementIsNotVisible(label), + 10 * 1000, 'File took longer than 10 seconds to upload!'); + + driver.switchTo().frame('upload_target'); + assert(driver.findElement(By.css('body')).getText()) + .equalTo(LOREM_IPSUM_TEXT); + }); +}); diff --git a/www/node_modules/selenium-webdriver/test/window_test.js b/www/node_modules/selenium-webdriver/test/window_test.js new file mode 100644 index 0000000..959c9dc --- /dev/null +++ b/www/node_modules/selenium-webdriver/test/window_test.js @@ -0,0 +1,128 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var Browser = require('..').Browser, + assert = require('../testing/assert'), + test = require('../lib/test'); + + +test.suite(function(env) { + var driver; + + test.before(function() { driver = env.builder().build(); }); + test.after(function() { driver.quit(); }); + + test.beforeEach(function() { + driver.switchTo().defaultContent(); + }); + + test.it('can set size of the current window', function() { + changeSizeBy(-20, -20); + }); + + test.it('can set size of the current window from frame', function() { + driver.get(test.Pages.framesetPage); + driver.switchTo().frame('fourth'); + changeSizeBy(-20, -20); + }); + + test.it('can set size of the current window from iframe', function() { + driver.get(test.Pages.iframePage); + driver.switchTo().frame('iframe1-name'); + changeSizeBy(-20, -20); + }); + + test.it('can set the window position of the current window', function() { + driver.manage().window().getPosition().then(function(position) { + driver.manage().window().setSize(640, 480); + driver.manage().window().setPosition(position.x + 10, position.y + 10); + + // For phantomjs, setPosition is a no-op and the "window" stays at (0, 0) + if (env.currentBrowser() === Browser.PHANTOM_JS) { + driver.manage().window().getPosition().then(function(position) { + assert(position.x).equalTo(0); + assert(position.y).equalTo(0); + }); + } else { + var dx = position.x + 10; + var dy = position.y + 10; + // On OSX, Safari position's the window relative to below the menubar + // at the top of the screen, which is 23 pixels tall. + if (env.currentBrowser() === Browser.SAFARI && + process.platform === 'darwin') { + dy += 23; + } + } + }); + }); + + test.it('can set the window position from a frame', function() { + driver.get(test.Pages.iframePage); + driver.switchTo().frame('iframe1-name'); + driver.manage().window().getPosition().then(function(position) { + driver.manage().window().setSize(640, 480); + driver.manage().window().setPosition(position.x + 10, position.y + 10); + + // For phantomjs, setPosition is a no-op and the "window" stays at (0, 0) + if (env.currentBrowser() === Browser.PHANTOM_JS) { + driver.manage().window().getPosition().then(function(position) { + assert(position.x).equalTo(0); + assert(position.y).equalTo(0); + }); + } else { + var dx = position.x + 10; + var dy = position.y + 10; + // On OSX, Safari position's the window relative to below the menubar + // at the top of the screen, which is 23 pixels tall. + if (env.currentBrowser() === Browser.SAFARI && + process.platform === 'darwin') { + dy += 23; + } + driver.wait(forPositionToBe(dx, dy), 1000); + } + }); + }); + + function changeSizeBy(dx, dy) { + driver.manage().window().getSize().then(function(size) { + driver.manage().window().setSize(size.width + dx, size.height + dy); + driver.wait(forSizeToBe(size.width + dx, size.height + dy), 1000); + }); + } + + function forSizeToBe(w, h) { + return function() { + return driver.manage().window().getSize().then(function(size) { + return size.width === w && size.height === h; + }); + }; + } + + function forPositionToBe(x, y) { + return function() { + return driver.manage().window().getPosition().then(function(position) { + return position.x === x && + // On OSX, the window height may be bumped down 22px for the top + // status bar. + // On Linux, Opera's window position will be off by 28px. + (position.y >= y && position.y <= (y + 28)); + }); + }; + } +}); diff --git a/www/node_modules/selenium-webdriver/testing/assert.js b/www/node_modules/selenium-webdriver/testing/assert.js new file mode 100644 index 0000000..0d8eb62 --- /dev/null +++ b/www/node_modules/selenium-webdriver/testing/assert.js @@ -0,0 +1,378 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a library that simplifies writing assertions against + * promised values. + * + * >
      + * > __NOTE:__ This module is considered experimental and is subject to + * > change, or removal, at any time! + * >
      + * + * Sample usage: + * + * var driver = new webdriver.Builder().build(); + * driver.get('http://www.google.com'); + * + * assert(driver.getTitle()).equalTo('Google'); + */ + +'use strict'; + +const assert = require('assert'); + +function trueType(v) { + if (v === null) { + return 'null'; + } + + let type = typeof v; + if (type === 'object') { + if (Array.isArray(v)) { + type = 'array'; + } + } + return type; +} + + +function checkType(v, want) { + let got = trueType(v); + if (got !== want) { + throw new TypeError('require ' + want + ', but got ' + got); + } + return v; +} + +const checkNumber = v => checkType(v, 'number'); +const checkFunction = v => checkType(v, 'function'); +const checkString = v => checkType(v, 'string'); + +const isFunction = v => trueType(v) === 'function'; +const isNumber = v => trueType(v) === 'number'; +const isObject = v => trueType(v) === 'object'; +const isString = v => trueType(v) === 'string'; + + +function describe(value) { + let ret; + try { + ret = `<${String(value)}>`; + } catch (e) { + ret = ``; + } + + if (null !== value && void(0) !== value) { + ret += ` (${trueType(value)})`; + } + + return ret; +} + + +function evaluate(value, predicate) { + if (isObject(value) && isFunction(value.then)) { + return value.then(predicate); + } + predicate(value); +} + + +/** + * @private + */ +class Assertion { + /** + * @param {?} subject The subject of this assertion. + * @param {boolean=} opt_invert Whether to invert any assertions performed by + * this instance. + */ + constructor(subject, opt_invert) { + /** @private {?} */ + this.subject_ = subject; + /** @private {boolean} */ + this.invert_ = !!opt_invert; + } + + /** + * @param {number} expected The minimum permissible value (inclusive). + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + atLeast(expected, opt_message) { + checkNumber(expected); + return evaluate(this.subject_, function(actual) { + if (!isNumber(actual) || actual < expected) { + assert.fail(actual, expected, opt_message, '>='); + } + }); + } + + /** + * @param {number} expected The maximum permissible value (inclusive). + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + atMost(expected, opt_message) { + checkNumber(expected); + return evaluate(this.subject_, function (actual) { + if (!isNumber(actual) || actual > expected) { + assert.fail(actual, expected, opt_message, '<='); + } + }); + } + + /** + * @param {number} expected The maximum permissible value (exclusive). + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + greaterThan(expected, opt_message) { + checkNumber(expected); + return evaluate(this.subject_, function(actual) { + if (!isNumber(actual) || actual <= expected) { + assert.fail(actual, expected, opt_message, '>'); + } + }); + } + + /** + * @param {number} expected The minimum permissible value (exclusive). + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + lessThan(expected, opt_message) { + checkNumber(expected); + return evaluate(this.subject_, function (actual) { + if (!isNumber(actual) || actual >= expected) { + assert.fail(actual, expected, opt_message, '<'); + } + }); + } + + /** + * @param {number} expected The desired value. + * @param {number} epsilon The maximum distance from the desired value. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + closeTo(expected, episolon, opt_message) { + checkNumber(expected); + checkNumber(episolon); + return evaluate(this.subject_, function(actual) { + checkNumber(actual); + if (Math.abs(expected - actual) > episolon) { + assert.fail(opt_message || `${actual} === ${expected} (± ${episolon})`); + } + }); + } + + /** + * @param {function(new: ?)} ctor The exptected type's constructor. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + instanceOf(ctor, opt_message) { + checkFunction(ctor); + return evaluate(this.subject_, function(actual) { + if (!(actual instanceof ctor)) { + assert.fail( + opt_message + || `${describe(actual)} instanceof ${ctor.name || ctor}`); + } + }); + } + + /** + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isNull(opt_message) { + return this.isEqualTo(null); + } + + /** + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isUndefined(opt_message) { + return this.isEqualTo(void(0)); + } + + /** + * Ensures the subject of this assertion is either a string or array + * containing the given `value`. + * + * @param {?} value The value expected to be contained within the subject. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + contains(value, opt_message) { + return evaluate(this.subject_, function(actual) { + if (actual instanceof Map || actual instanceof Set) { + assert.ok(actual.has(value), opt_message || `${actual}.has(${value})`); + } else if (Array.isArray(actual) || isString(actual)) { + assert.ok( + actual.indexOf(value) !== -1, + opt_message || `${actual}.indexOf(${value}) !== -1`); + } else { + assert.fail( + `Expected an array, map, set, or string: got ${describe(actual)}`); + } + }); + } + + /** + * @param {string} str The expected suffix. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + endsWith(str, opt_message) { + checkString(str); + return evaluate(this.subject_, function(actual) { + if (!isString(actual) || !actual.endsWith(str)) { + assert.fail(actual, str, 'ends with'); + } + }); + } + + /** + * @param {string} str The expected prefix. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + startsWith(str, opt_message) { + checkString(str); + return evaluate(this.subject_, function(actual) { + if (!isString(actual) || !actual.startsWith(str)) { + assert.fail(actual, str, 'starts with'); + } + }); + } + + /** + * @param {!RegExp} regex The regex the subject is expected to match. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + matches(regex, opt_message) { + if (!(regex instanceof RegExp)) { + throw TypeError(`Not a RegExp: ${describe(regex)}`); + } + return evaluate(this.subject_, function(actual) { + if (!isString(actual) || !regex.test(actual)) { + let message = opt_message + || `Expected a string matching ${regex}, got ${describe(actual)}`; + assert.fail(actual, regex, message); + } + }); + } + + /** + * @param {?} value The unexpected value. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + notEqualTo(value, opt_message) { + return evaluate(this.subject_, function(actual) { + assert.notStrictEqual(actual, value, opt_message); + }); + } + + /** An alias for {@link #isEqualTo}. */ + equalTo(value, opt_message) { + return this.isEqualTo(value, opt_message); + } + + /** An alias for {@link #isEqualTo}. */ + equals(value, opt_message) { + return this.isEqualTo(value, opt_message); + } + + /** + * @param {?} value The expected value. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isEqualTo(value, opt_message) { + return evaluate(this.subject_, function(actual) { + assert.strictEqual(actual, value, opt_message); + }); + } + + /** + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isTrue(opt_message) { + return this.isEqualTo(true, opt_message); + } + + /** + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isFalse(opt_message) { + return this.isEqualTo(false, opt_message); + } +} + + +// PUBLIC API + + +/** + * Creates an assertion about the given `value`. + * @return {!Assertion} the new assertion. + */ +module.exports = function assertThat(value) { + return new Assertion(value); +}; +module.exports.Assertion = Assertion; // Exported to help generated docs diff --git a/www/node_modules/selenium-webdriver/testing/index.js b/www/node_modules/selenium-webdriver/testing/index.js new file mode 100644 index 0000000..1ad1f8b --- /dev/null +++ b/www/node_modules/selenium-webdriver/testing/index.js @@ -0,0 +1,268 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Provides wrappers around the following global functions from + * [Mocha's BDD interface](https://github.com/mochajs/mocha): + * + * - after + * - afterEach + * - before + * - beforeEach + * - it + * - it.only + * - it.skip + * - xit + * + * The provided wrappers leverage the {@link webdriver.promise.ControlFlow} + * to simplify writing asynchronous tests: + * + * var By = require('selenium-webdriver').By, + * until = require('selenium-webdriver').until, + * firefox = require('selenium-webdriver/firefox'), + * test = require('selenium-webdriver/testing'); + * + * test.describe('Google Search', function() { + * var driver; + * + * test.before(function() { + * driver = new firefox.Driver(); + * }); + * + * test.after(function() { + * driver.quit(); + * }); + * + * test.it('should append query to title', function() { + * driver.get('http://www.google.com/ncr'); + * driver.findElement(By.name('q')).sendKeys('webdriver'); + * driver.findElement(By.name('btnG')).click(); + * driver.wait(until.titleIs('webdriver - Google Search'), 1000); + * }); + * }); + * + * You may conditionally suppress a test function using the exported + * "ignore" function. If the provided predicate returns true, the attached + * test case will be skipped: + * + * test.ignore(maybe()).it('is flaky', function() { + * if (Math.random() < 0.5) throw Error(); + * }); + * + * function maybe() { return Math.random() < 0.5; } + */ + +var promise = require('..').promise; +var flow = promise.controlFlow(); + + +/** + * Wraps a function so that all passed arguments are ignored. + * @param {!Function} fn The function to wrap. + * @return {!Function} The wrapped function. + */ +function seal(fn) { + return function() { + fn(); + }; +} + + +/** + * Wraps a function on Mocha's BDD interface so it runs inside a + * webdriver.promise.ControlFlow and waits for the flow to complete before + * continuing. + * @param {!Function} globalFn The function to wrap. + * @return {!Function} The new function. + */ +function wrapped(globalFn) { + return function() { + if (arguments.length === 1) { + return globalFn(makeAsyncTestFn(arguments[0])); + } + else if (arguments.length === 2) { + return globalFn(arguments[0], makeAsyncTestFn(arguments[1])); + } + else { + throw Error('Invalid # arguments: ' + arguments.length); + } + }; +} + +/** + * Make a wrapper to invoke caller's test function, fn. Run the test function + * within a ControlFlow. + * + * Should preserve the semantics of Mocha's Runnable.prototype.run (See + * https://github.com/mochajs/mocha/blob/master/lib/runnable.js#L192) + * + * @param {Function} fn + * @return {Function} + */ +function makeAsyncTestFn(fn) { + var async = fn.length > 0; // if test function expects a callback, its "async" + + var ret = function(done) { + var runnable = this.runnable(); + var mochaCallback = runnable.callback; + runnable.callback = function() { + flow.reset(); + return mochaCallback.apply(this, arguments); + }; + + var testFn = fn.bind(this); + flow.execute(function controlFlowExecute() { + return new promise.Promise(function(fulfill, reject) { + if (async) { + // If testFn is async (it expects a done callback), resolve the promise of this + // test whenever that callback says to. Any promises returned from testFn are + // ignored. + testFn(function testFnDoneCallback(err) { + if (err) { + reject(err); + } else { + fulfill(); + } + }); + } else { + // Without a callback, testFn can return a promise, or it will + // be assumed to have completed synchronously + fulfill(testFn()); + } + }, flow); + }, runnable.fullTitle()).then(seal(done), done); + }; + + ret.toString = function() { + return fn.toString(); + }; + + return ret; +} + + +/** + * Ignores the test chained to this function if the provided predicate returns + * true. + * @param {function(): boolean} predicateFn A predicate to call to determine + * if the test should be suppressed. This function MUST be synchronous. + * @return {!Object} An object with wrapped versions of {@link #it()} and + * {@link #describe()} that ignore tests as indicated by the predicate. + */ +function ignore(predicateFn) { + var describe = wrap(exports.xdescribe, exports.describe); + describe.only = wrap(exports.xdescribe, exports.describe.only); + + var it = wrap(exports.xit, exports.it); + it.only = wrap(exports.xit, exports.it.only); + + return { + describe: describe, + it: it + }; + + function wrap(onSkip, onRun) { + return function(title, fn) { + if (predicateFn()) { + onSkip(title, fn); + } else { + onRun(title, fn); + } + }; + } +} + + +// PUBLIC API + + +/** + * @return {!promise.ControlFlow} the control flow instance used by this module + * to coordinate test actions. + */ +exports.controlFlow = function(){ + return flow; +}; + + +/** + * Registers a new test suite. + * @param {string} name The suite name. + * @param {function()=} fn The suite function, or {@code undefined} to define + * a pending test suite. + */ +exports.describe = global.describe; + +/** + * Defines a suppressed test suite. + * @param {string} name The suite name. + * @param {function()=} fn The suite function, or {@code undefined} to define + * a pending test suite. + */ +exports.xdescribe = global.xdescribe; +exports.describe.skip = global.describe.skip; + +/** + * Register a function to call after the current suite finishes. + * @param {function()} fn . + */ +exports.after = wrapped(global.after); + +/** + * Register a function to call after each test in a suite. + * @param {function()} fn . + */ +exports.afterEach = wrapped(global.afterEach); + +/** + * Register a function to call before the current suite starts. + * @param {function()} fn . + */ +exports.before = wrapped(global.before); + +/** + * Register a function to call before each test in a suite. + * @param {function()} fn . + */ +exports.beforeEach = wrapped(global.beforeEach); + +/** + * Add a test to the current suite. + * @param {string} name The test name. + * @param {function()=} fn The test function, or {@code undefined} to define + * a pending test case. + */ +exports.it = wrapped(global.it); + +/** + * An alias for {@link #it()} that flags the test as the only one that should + * be run within the current suite. + * @param {string} name The test name. + * @param {function()=} fn The test function, or {@code undefined} to define + * a pending test case. + */ +exports.iit = exports.it.only = wrapped(global.it.only); + +/** + * Adds a test to the current suite while suppressing it so it is not run. + * @param {string} name The test name. + * @param {function()=} fn The test function, or {@code undefined} to define + * a pending test case. + */ +exports.xit = exports.it.skip = wrapped(global.xit); + +exports.ignore = ignore; diff --git a/www/node_modules/sigmund/LICENSE b/www/node_modules/sigmund/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/www/node_modules/sigmund/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/www/node_modules/sigmund/README.md b/www/node_modules/sigmund/README.md new file mode 100644 index 0000000..25a38a5 --- /dev/null +++ b/www/node_modules/sigmund/README.md @@ -0,0 +1,53 @@ +# sigmund + +Quick and dirty signatures for Objects. + +This is like a much faster `deepEquals` comparison, which returns a +string key suitable for caches and the like. + +## Usage + +```javascript +function doSomething (someObj) { + var key = sigmund(someObj, maxDepth) // max depth defaults to 10 + var cached = cache.get(key) + if (cached) return cached + + var result = expensiveCalculation(someObj) + cache.set(key, result) + return result +} +``` + +The resulting key will be as unique and reproducible as calling +`JSON.stringify` or `util.inspect` on the object, but is much faster. +In order to achieve this speed, some differences are glossed over. +For example, the object `{0:'foo'}` will be treated identically to the +array `['foo']`. + +Also, just as there is no way to summon the soul from the scribblings +of a cocaine-addled psychoanalyst, there is no way to revive the object +from the signature string that sigmund gives you. In fact, it's +barely even readable. + +As with `util.inspect` and `JSON.stringify`, larger objects will +produce larger signature strings. + +Because sigmund is a bit less strict than the more thorough +alternatives, the strings will be shorter, and also there is a +slightly higher chance for collisions. For example, these objects +have the same signature: + + var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} + var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} + +Like a good Freudian, sigmund is most effective when you already have +some understanding of what you're looking for. It can help you help +yourself, but you must be willing to do some work as well. + +Cycles are handled, and cyclical objects are silently omitted (though +the key is included in the signature output.) + +The second argument is the maximum depth, which defaults to 10, +because that is the maximum object traversal depth covered by most +insurance carriers. diff --git a/www/node_modules/sigmund/bench.js b/www/node_modules/sigmund/bench.js new file mode 100644 index 0000000..5acfd6d --- /dev/null +++ b/www/node_modules/sigmund/bench.js @@ -0,0 +1,283 @@ +// different ways to id objects +// use a req/res pair, since it's crazy deep and cyclical + +// sparseFE10 and sigmund are usually pretty close, which is to be expected, +// since they are essentially the same algorithm, except that sigmund handles +// regular expression objects properly. + + +var http = require('http') +var util = require('util') +var sigmund = require('./sigmund.js') +var sreq, sres, creq, cres, test + +http.createServer(function (q, s) { + sreq = q + sres = s + sres.end('ok') + this.close(function () { setTimeout(function () { + start() + }, 200) }) +}).listen(1337, function () { + creq = http.get({ port: 1337 }) + creq.on('response', function (s) { cres = s }) +}) + +function start () { + test = [sreq, sres, creq, cres] + // test = sreq + // sreq.sres = sres + // sreq.creq = creq + // sreq.cres = cres + + for (var i in exports.compare) { + console.log(i) + var hash = exports.compare[i]() + console.log(hash) + console.log(hash.length) + console.log('') + } + + require('bench').runMain() +} + +function customWs (obj, md, d) { + d = d || 0 + var to = typeof obj + if (to === 'undefined' || to === 'function' || to === null) return '' + if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '') + + if (Array.isArray(obj)) { + return obj.map(function (i, _, __) { + return customWs(i, md, d + 1) + }).reduce(function (a, b) { return a + b }, '') + } + + var keys = Object.keys(obj) + return keys.map(function (k, _, __) { + return k + ':' + customWs(obj[k], md, d + 1) + }).reduce(function (a, b) { return a + b }, '') +} + +function custom (obj, md, d) { + d = d || 0 + var to = typeof obj + if (to === 'undefined' || to === 'function' || to === null) return '' + if (d > md || !obj || to !== 'object') return '' + obj + + if (Array.isArray(obj)) { + return obj.map(function (i, _, __) { + return custom(i, md, d + 1) + }).reduce(function (a, b) { return a + b }, '') + } + + var keys = Object.keys(obj) + return keys.map(function (k, _, __) { + return k + ':' + custom(obj[k], md, d + 1) + }).reduce(function (a, b) { return a + b }, '') +} + +function sparseFE2 (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + Object.keys(v).forEach(function (k, _, __) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') return + var to = typeof v[k] + if (to === 'function' || to === 'undefined') return + soFar += k + ':' + ch(v[k], depth + 1) + }) + soFar += '}' + } + ch(obj, 0) + return soFar +} + +function sparseFE (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + Object.keys(v).forEach(function (k, _, __) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') return + var to = typeof v[k] + if (to === 'function' || to === 'undefined') return + soFar += k + ch(v[k], depth + 1) + }) + } + ch(obj, 0) + return soFar +} + +function sparse (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + for (var k in v) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') continue + var to = typeof v[k] + if (to === 'function' || to === 'undefined') continue + soFar += k + ch(v[k], depth + 1) + } + } + ch(obj, 0) + return soFar +} + +function noCommas (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + for (var k in v) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') continue + var to = typeof v[k] + if (to === 'function' || to === 'undefined') continue + soFar += k + ':' + ch(v[k], depth + 1) + } + soFar += '}' + } + ch(obj, 0) + return soFar +} + + +function flatten (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + for (var k in v) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') continue + var to = typeof v[k] + if (to === 'function' || to === 'undefined') continue + soFar += k + ':' + ch(v[k], depth + 1) + soFar += ',' + } + soFar += '}' + } + ch(obj, 0) + return soFar +} + +exports.compare = +{ + // 'custom 2': function () { + // return custom(test, 2, 0) + // }, + // 'customWs 2': function () { + // return customWs(test, 2, 0) + // }, + 'JSON.stringify (guarded)': function () { + var seen = [] + return JSON.stringify(test, function (k, v) { + if (typeof v !== 'object' || !v) return v + if (seen.indexOf(v) !== -1) return undefined + seen.push(v) + return v + }) + }, + + 'flatten 10': function () { + return flatten(test, 10) + }, + + // 'flattenFE 10': function () { + // return flattenFE(test, 10) + // }, + + 'noCommas 10': function () { + return noCommas(test, 10) + }, + + 'sparse 10': function () { + return sparse(test, 10) + }, + + 'sparseFE 10': function () { + return sparseFE(test, 10) + }, + + 'sparseFE2 10': function () { + return sparseFE2(test, 10) + }, + + sigmund: function() { + return sigmund(test, 10) + }, + + + // 'util.inspect 1': function () { + // return util.inspect(test, false, 1, false) + // }, + // 'util.inspect undefined': function () { + // util.inspect(test) + // }, + // 'util.inspect 2': function () { + // util.inspect(test, false, 2, false) + // }, + // 'util.inspect 3': function () { + // util.inspect(test, false, 3, false) + // }, + // 'util.inspect 4': function () { + // util.inspect(test, false, 4, false) + // }, + // 'util.inspect Infinity': function () { + // util.inspect(test, false, Infinity, false) + // } +} + +/** results +**/ diff --git a/www/node_modules/sigmund/package.json b/www/node_modules/sigmund/package.json new file mode 100644 index 0000000..f4862fc --- /dev/null +++ b/www/node_modules/sigmund/package.json @@ -0,0 +1,85 @@ +{ + "_args": [ + [ + "sigmund@~1.0.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine/node_modules/minimatch" + ] + ], + "_from": "sigmund@>=1.0.0 <1.1.0", + "_id": "sigmund@1.0.1", + "_inCache": true, + "_installable": true, + "_location": "/sigmund", + "_nodeVersion": "2.0.1", + "_npmUser": { + "email": "isaacs@npmjs.com", + "name": "isaacs" + }, + "_npmVersion": "2.10.0", + "_phantomChildren": {}, + "_requested": { + "name": "sigmund", + "raw": "sigmund@~1.0.0", + "rawSpec": "~1.0.0", + "scope": null, + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine/minimatch" + ], + "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "_shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", + "_shrinkwrap": null, + "_spec": "sigmund@~1.0.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine/node_modules/minimatch", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/sigmund/issues" + }, + "dependencies": {}, + "description": "Quick and dirty signatures for Objects.", + "devDependencies": { + "tap": "~0.3.0" + }, + "directories": { + "test": "test" + }, + "dist": { + "shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", + "tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + }, + "gitHead": "527f97aa5bb253d927348698c0cd3bb267d098c6", + "homepage": "https://github.com/isaacs/sigmund#readme", + "keywords": [ + "object", + "signature", + "key", + "data", + "psychoanalysis" + ], + "license": "ISC", + "main": "sigmund.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "sigmund", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/sigmund.git" + }, + "scripts": { + "bench": "node bench.js", + "test": "tap test/*.js" + }, + "version": "1.0.1" +} diff --git a/www/node_modules/sigmund/sigmund.js b/www/node_modules/sigmund/sigmund.js new file mode 100644 index 0000000..82c7ab8 --- /dev/null +++ b/www/node_modules/sigmund/sigmund.js @@ -0,0 +1,39 @@ +module.exports = sigmund +function sigmund (subject, maxSessions) { + maxSessions = maxSessions || 10; + var notes = []; + var analysis = ''; + var RE = RegExp; + + function psychoAnalyze (subject, session) { + if (session > maxSessions) return; + + if (typeof subject === 'function' || + typeof subject === 'undefined') { + return; + } + + if (typeof subject !== 'object' || !subject || + (subject instanceof RE)) { + analysis += subject; + return; + } + + if (notes.indexOf(subject) !== -1 || session === maxSessions) return; + + notes.push(subject); + analysis += '{'; + Object.keys(subject).forEach(function (issue, _, __) { + // pseudo-private values. skip those. + if (issue.charAt(0) === '_') return; + var to = typeof subject[issue]; + if (to === 'function' || to === 'undefined') return; + analysis += issue; + psychoAnalyze(subject[issue], session + 1); + }); + } + psychoAnalyze(subject, 0); + return analysis; +} + +// vim: set softtabstop=4 shiftwidth=4: diff --git a/www/node_modules/sigmund/test/basic.js b/www/node_modules/sigmund/test/basic.js new file mode 100644 index 0000000..50c53a1 --- /dev/null +++ b/www/node_modules/sigmund/test/basic.js @@ -0,0 +1,24 @@ +var test = require('tap').test +var sigmund = require('../sigmund.js') + + +// occasionally there are duplicates +// that's an acceptable edge-case. JSON.stringify and util.inspect +// have some collision potential as well, though less, and collision +// detection is expensive. +var hash = '{abc/def/g{0h1i2{jkl' +var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} +var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} + +var obj3 = JSON.parse(JSON.stringify(obj1)) +obj3.c = /def/ +obj3.g[2].cycle = obj3 +var cycleHash = '{abc/def/g{0h1i2{jklcycle' + +test('basic', function (t) { + t.equal(sigmund(obj1), hash) + t.equal(sigmund(obj2), hash) + t.equal(sigmund(obj3), cycleHash) + t.end() +}) + diff --git a/www/node_modules/tmp/.npmignore b/www/node_modules/tmp/.npmignore new file mode 100644 index 0000000..78f2710 --- /dev/null +++ b/www/node_modules/tmp/.npmignore @@ -0,0 +1,2 @@ +node_modules/ +.idea/ diff --git a/www/node_modules/tmp/.travis.yml b/www/node_modules/tmp/.travis.yml new file mode 100644 index 0000000..0175d82 --- /dev/null +++ b/www/node_modules/tmp/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.6" + - "0.8" + - "0.10" diff --git a/www/node_modules/tmp/README.md b/www/node_modules/tmp/README.md new file mode 100644 index 0000000..3a1a509 --- /dev/null +++ b/www/node_modules/tmp/README.md @@ -0,0 +1,162 @@ +# Tmp + +A simple temporary file and directory creator for [node.js.][1] + +[![Build Status](https://secure.travis-ci.org/raszi/node-tmp.png?branch=master)](http://travis-ci.org/raszi/node-tmp) + +## About + +The main difference between bruce's [node-temp][2] is that mine more +aggressively checks for the existence of the newly created temporary file and +creates the new file with `O_EXCL` instead of simple `O_CREAT | O_RDRW`, so it +is safer. + +The API is slightly different as well, Tmp does not yet provide synchronous +calls and all the parameters are optional. + +You can set whether you want to remove the temporary file on process exit or +not, and the destination directory can also be set. + +## How to install + +```bash +npm install tmp +``` + +## Usage + +### File creation + +Simple temporary file creation, the file will be unlinked on process exit. + +```javascript +var tmp = require('tmp'); + +tmp.file(function _tempFileCreated(err, path, fd) { + if (err) throw err; + + console.log("File: ", path); + console.log("Filedescriptor: ", fd); +}); +``` + +### Directory creation + +Simple temporary directory creation, it will be removed on process exit. + +If the directory still contains items on process exit, then it won't be removed. + +```javascript +var tmp = require('tmp'); + +tmp.dir(function _tempDirCreated(err, path) { + if (err) throw err; + + console.log("Dir: ", path); +}); +``` + +If you want to cleanup the directory even when there are entries in it, then +you can pass the `unsafeCleanup` option when creating it. + +### Filename generation + +It is possible with this library to generate a unique filename in the specified +directory. + +```javascript +var tmp = require('tmp'); + +tmp.tmpName(function _tempNameGenerated(err, path) { + if (err) throw err; + + console.log("Created temporary filename: ", path); +}); +``` + +## Advanced usage + +### File creation + +Creates a file with mode `0644`, prefix will be `prefix-` and postfix will be `.txt`. + +```javascript +var tmp = require('tmp'); + +tmp.file({ mode: 0644, prefix: 'prefix-', postfix: '.txt' }, function _tempFileCreated(err, path, fd) { + if (err) throw err; + + console.log("File: ", path); + console.log("Filedescriptor: ", fd); +}); +``` + +### Directory creation + +Creates a directory with mode `0755`, prefix will be `myTmpDir_`. + +```javascript +var tmp = require('tmp'); + +tmp.dir({ mode: 0750, prefix: 'myTmpDir_' }, function _tempDirCreated(err, path) { + if (err) throw err; + + console.log("Dir: ", path); +}); +``` + +### mkstemps like + +Creates a new temporary directory with mode `0700` and filename like `/tmp/tmp-nk2J1u`. + +```javascript +var tmp = require('tmp'); + +tmp.dir({ template: '/tmp/tmp-XXXXXX' }, function _tempDirCreated(err, path) { + if (err) throw err; + + console.log("Dir: ", path); +}); +``` + +### Filename generation + +The `tmpName()` function accepts the `prefix`, `postfix`, `dir`, etc. parameters also: + +```javascript +var tmp = require('tmp'); + +tmp.tmpName({ template: '/tmp/tmp-XXXXXX' }, function _tempNameGenerated(err, path) { + if (err) throw err; + + console.log("Created temporary filename: ", path); +}); +``` + +## Graceful cleanup + +One may want to cleanup the temporary files even when an uncaught exception +occurs. To enforce this, you can call the `setGracefulCleanup()` method: + +```javascript +var tmp = require('tmp'); + +tmp.setGracefulCleanup(); +``` + +## Options + +All options are optional :) + + * `mode`: the file mode to create with, it fallbacks to `0600` on file creation and `0700` on directory creation + * `prefix`: the optional prefix, fallbacks to `tmp-` if not provided + * `postfix`: the optional postfix, fallbacks to `.tmp` on file creation + * `template`: [`mkstemps`][3] like filename template, no default + * `dir`: the optional temporary directory, fallbacks to system default (guesses from environment) + * `tries`: how many times should the function try to get a unique filename before giving up, default `3` + * `keep`: signals that the temporary file or directory should not be deleted on exit, default is `false`, means delete + * `unsafeCleanup`: recursively removes the created temporary directory, even when it's not empty. default is `false` + +[1]: http://nodejs.org/ +[2]: https://github.com/bruce/node-temp +[3]: http://www.kernel.org/doc/man-pages/online/pages/man3/mkstemp.3.html diff --git a/www/node_modules/tmp/domain-test.js b/www/node_modules/tmp/domain-test.js new file mode 100644 index 0000000..47221bc --- /dev/null +++ b/www/node_modules/tmp/domain-test.js @@ -0,0 +1,13 @@ +var domain = require('domain'); + +//throw new Error('bazz'); + +var d = domain.create(); +d.on('error', function ( e ) { + console.log('error!!!', e); +}); + +d.run(function () { + console.log('hey'); + throw new Error('bazz'); +}); diff --git a/www/node_modules/tmp/lib/tmp.js b/www/node_modules/tmp/lib/tmp.js new file mode 100644 index 0000000..ea84faa --- /dev/null +++ b/www/node_modules/tmp/lib/tmp.js @@ -0,0 +1,307 @@ +/*! + * Tmp + * + * Copyright (c) 2011-2013 KARASZI Istvan + * + * MIT Licensed + */ + +/** + * Module dependencies. + */ +var + fs = require('fs'), + path = require('path'), + os = require('os'), + exists = fs.exists || path.exists, + tmpDir = os.tmpDir || _getTMPDir, + _c = require('constants'); + +/** + * The working inner variables. + */ +var + // store the actual TMP directory + _TMP = tmpDir(), + + // the random characters to choose from + randomChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz", + randomCharsLength = randomChars.length, + + // this will hold the objects need to be removed on exit + _removeObjects = [], + + _gracefulCleanup = false, + _uncaughtException = false; + +/** + * Gets the temp directory. + * + * @return {String} + * @api private + */ +function _getTMPDir() { + var tmpNames = [ 'TMPDIR', 'TMP', 'TEMP' ]; + + for (var i = 0, length = tmpNames.length; i < length; i++) { + if (_isUndefined(process.env[tmpNames[i]])) continue; + + return process.env[tmpNames[i]]; + } + + // fallback to the default + return '/tmp'; +} + +/** + * Checks whether the `obj` parameter is defined or not. + * + * @param {Object} obj + * @return {Boolean} + * @api private + */ +function _isUndefined(obj) { + return typeof obj === 'undefined'; +} + +/** + * Parses the function arguments. + * + * This function helps to have optional arguments. + * + * @param {Object} options + * @param {Function} callback + * @api private + */ +function _parseArguments(options, callback) { + if (!callback || typeof callback != "function") { + callback = options; + options = {}; + } + + return [ options, callback ]; +} + +/** + * Gets a temporary file name. + * + * @param {Object} opts + * @param {Function} cb + * @api private + */ +function _getTmpName(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1], + template = opts.template, + templateDefined = !_isUndefined(template), + tries = opts.tries || 3; + + if (isNaN(tries) || tries < 0) + return cb(new Error('Invalid tries')); + + if (templateDefined && !template.match(/XXXXXX/)) + return cb(new Error('Invalid template provided')); + + function _getName() { + + // prefix and postfix + if (!templateDefined) { + var name = [ + (_isUndefined(opts.prefix)) ? 'tmp-' : opts.prefix, + process.pid, + (Math.random() * 0x1000000000).toString(36), + opts.postfix + ].join(''); + + return path.join(opts.dir || _TMP, name); + } + + // mkstemps like template + var chars = []; + + for (var i = 0; i < 6; i++) { + chars.push(randomChars.substr(Math.floor(Math.random() * randomCharsLength), 1)); + } + + return template.replace(/XXXXXX/, chars.join('')); + } + + (function _getUniqueName() { + var name = _getName(); + + // check whether the path exists then retry if needed + exists(name, function _pathExists(pathExists) { + if (pathExists) { + if (tries-- > 0) return _getUniqueName(); + + return cb(new Error('Could not get a unique tmp filename, max tries reached')); + } + + cb(null, name); + }); + }()); +} + +/** + * Creates and opens a temporary file. + * + * @param {Object} options + * @param {Function} callback + * @api public + */ +function _createTmpFile(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1]; + + opts.postfix = (_isUndefined(opts.postfix)) ? '.tmp' : opts.postfix; + + // gets a temporary filename + _getTmpName(opts, function _tmpNameCreated(err, name) { + if (err) return cb(err); + + // create and open the file + fs.open(name, _c.O_CREAT | _c.O_EXCL | _c.O_RDWR, opts.mode || 0600, function _fileCreated(err, fd) { + if (err) return cb(err); + + var removeCallback = _prepareRemoveCallback(fs.unlinkSync.bind(fs), name); + + if (!opts.keep) { + _removeObjects.unshift(removeCallback); + } + + cb(null, name, fd, removeCallback); + }); + }); +} + +/** + * Removes files and folders in a directory recursively. + * + * @param {String} dir + */ +function _rmdirRecursiveSync(dir) { + var files = fs.readdirSync(dir); + + for (var i = 0, length = files.length; i < length; i++) { + var file = path.join(dir, files[i]); + // lstat so we don't recurse into symlinked directories. + var stat = fs.lstatSync(file); + + if (stat.isDirectory()) { + _rmdirRecursiveSync(file); + } else { + fs.unlinkSync(file); + } + } + + fs.rmdirSync(dir); +} + +/** + * + * @param {Function} removeFunction + * @param {String} path + * @returns {Function} + * @private + */ +function _prepareRemoveCallback(removeFunction, path) { + var called = false; + return function() { + if (called) { + return; + } + + removeFunction(path); + + called = true; + }; +} + +/** + * Creates a temporary directory. + * + * @param {Object} options + * @param {Function} callback + * @api public + */ +function _createTmpDir(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1]; + + // gets a temporary filename + _getTmpName(opts, function _tmpNameCreated(err, name) { + if (err) return cb(err); + + // create the directory + fs.mkdir(name, opts.mode || 0700, function _dirCreated(err) { + if (err) return cb(err); + + var removeCallback = _prepareRemoveCallback( + opts.unsafeCleanup + ? _rmdirRecursiveSync + : fs.rmdirSync.bind(fs), + name + ); + + if (!opts.keep) { + _removeObjects.unshift(removeCallback); + } + + cb(null, name, removeCallback); + }); + }); +} + +/** + * The garbage collector. + * + * @api private + */ +function _garbageCollector() { + if (_uncaughtException && !_gracefulCleanup) { + return; + } + + for (var i = 0, length = _removeObjects.length; i < length; i++) { + try { + _removeObjects[i].call(null); + } catch (e) { + // already removed? + } + } +} + +function _setGracefulCleanup() { + _gracefulCleanup = true; +} + +var version = process.versions.node.split('.').map(function (value) { + return parseInt(value, 10); +}); + +if (version[0] === 0 && (version[1] < 9 || version[1] === 9 && version[2] < 5)) { + process.addListener('uncaughtException', function _uncaughtExceptionThrown( err ) { + _uncaughtException = true; + _garbageCollector(); + + throw err; + }); +} + +process.addListener('exit', function _exit(code) { + if (code) _uncaughtException = true; + _garbageCollector(); +}); + +// exporting all the needed methods +module.exports.tmpdir = _TMP; +module.exports.dir = _createTmpDir; +module.exports.file = _createTmpFile; +module.exports.tmpName = _getTmpName; +module.exports.setGracefulCleanup = _setGracefulCleanup; diff --git a/www/node_modules/tmp/package.json b/www/node_modules/tmp/package.json new file mode 100644 index 0000000..ede4cfa --- /dev/null +++ b/www/node_modules/tmp/package.json @@ -0,0 +1,91 @@ +{ + "_args": [ + [ + "tmp@0.0.24", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver" + ] + ], + "_from": "tmp@0.0.24", + "_id": "tmp@0.0.24", + "_inCache": true, + "_installable": true, + "_location": "/tmp", + "_npmUser": { + "email": "npm@spam.raszi.hu", + "name": "raszi" + }, + "_npmVersion": "1.4.16", + "_phantomChildren": {}, + "_requested": { + "name": "tmp", + "raw": "tmp@0.0.24", + "rawSpec": "0.0.24", + "scope": null, + "spec": "0.0.24", + "type": "version" + }, + "_requiredBy": [ + "/selenium-webdriver" + ], + "_resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", + "_shasum": "d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12", + "_shrinkwrap": null, + "_spec": "tmp@0.0.24", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver", + "author": { + "email": "github@spam.raszi.hu", + "name": "KARASZI István", + "url": "http://raszi.hu/" + }, + "bugs": { + "url": "http://github.com/raszi/node-tmp/issues" + }, + "dependencies": {}, + "description": "Temporary file and directory creator", + "devDependencies": { + "vows": "~0.7.0" + }, + "directories": {}, + "dist": { + "shasum": "d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12", + "tarball": "http://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz" + }, + "engines": { + "node": ">=0.4.0" + }, + "gitHead": "6864655f13a11c6043c119a0cb60385f072bcecf", + "homepage": "http://github.com/raszi/node-tmp", + "keywords": [ + "temporary", + "tmp", + "temp", + "tempdir", + "tempfile", + "tmpdir", + "tmpfile" + ], + "licenses": [ + { + "type": "MIT", + "url": "http://opensource.org/licenses/MIT" + } + ], + "main": "lib/tmp.js", + "maintainers": [ + { + "email": "npm@spam.raszi.hu", + "name": "raszi" + } + ], + "name": "tmp", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/raszi/node-tmp.git" + }, + "scripts": { + "test": "vows test/*-test.js" + }, + "version": "0.0.24" +} diff --git a/www/node_modules/tmp/test-all.sh b/www/node_modules/tmp/test-all.sh new file mode 100755 index 0000000..4734d60 --- /dev/null +++ b/www/node_modules/tmp/test-all.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +#node06 +for node in node08 node; do + command -v ${node} > /dev/null 2>&1 || continue + + echo "Testing with $(${node} --version)..." + ${node} node_modules/vows/bin/vows test/*test.js +done diff --git a/www/node_modules/tmp/test.js b/www/node_modules/tmp/test.js new file mode 100644 index 0000000..8058221 --- /dev/null +++ b/www/node_modules/tmp/test.js @@ -0,0 +1,6 @@ +process.on('uncaughtException', function ( err ) { + console.log('blah'); + throw err; +}); + +throw "on purpose" diff --git a/www/node_modules/tmp/test/base.js b/www/node_modules/tmp/test/base.js new file mode 100644 index 0000000..498d8fb --- /dev/null +++ b/www/node_modules/tmp/test/base.js @@ -0,0 +1,74 @@ +var + assert = require('assert'), + path = require('path'), + exec = require('child_process').exec; + +function _spawnTestWithError(testFile, params, cb) { + _spawnTest(true, testFile, params, cb); +} + +function _spawnTestWithoutError(testFile, params, cb) { + _spawnTest(false, testFile, params, cb); +} + +function _spawnTest(passError, testFile, params, cb) { + var + filename, + node_path = process.argv[0], + command = [ node_path, path.join(__dirname, testFile) ].concat(params).join(' '); + + exec(command, function _execDone(err, stdout, stderr) { + if (passError) { + if (err) { + return cb(err); + } else if (stderr.length > 0) { + return cb(stderr.toString()); + } + } + + return cb(null, stdout.toString()); + }); +} + +function _testStat(stat, mode) { + assert.equal(stat.uid, process.getuid(), 'should have the same UID'); + assert.equal(stat.gid, process.getgid(), 'should have the same GUID'); + assert.equal(stat.mode, mode); +} + +function _testPrefix(prefix) { + return function _testPrefixGenerated(err, name, fd) { + assert.equal(path.basename(name).slice(0, prefix.length), prefix, 'should have the provided prefix'); + }; +} + +function _testPostfix(postfix) { + return function _testPostfixGenerated(err, name, fd) { + assert.equal(name.slice(name.length - postfix.length, name.length), postfix, 'should have the provided postfix'); + }; +} + +function _testKeep(type, keep, cb) { + _spawnTestWithError('keep.js', [ type, keep ], cb); +} + +function _testGraceful(type, graceful, cb) { + _spawnTestWithoutError('graceful.js', [ type, graceful ], cb); +} + +function _assertName(err, name) { + assert.isString(name); + assert.isNotZero(name.length); +} + +function _testUnsafeCleanup(unsafe, cb) { + _spawnTestWithoutError('unsafe.js', [ 'dir', unsafe ], cb); +} + +module.exports.testStat = _testStat; +module.exports.testPrefix = _testPrefix; +module.exports.testPostfix = _testPostfix; +module.exports.testKeep = _testKeep; +module.exports.testGraceful = _testGraceful; +module.exports.assertName = _assertName; +module.exports.testUnsafeCleanup = _testUnsafeCleanup; diff --git a/www/node_modules/tmp/test/dir-test.js b/www/node_modules/tmp/test/dir-test.js new file mode 100644 index 0000000..2e4e529 --- /dev/null +++ b/www/node_modules/tmp/test/dir-test.js @@ -0,0 +1,196 @@ +var + vows = require('vows'), + assert = require('assert'), + + path = require('path'), + fs = require('fs'), + existsSync = fs.existsSync || path.existsSync, + + tmp = require('../lib/tmp.js'), + Test = require('./base.js'); + + +function _testDir(mode) { + return function _testDirGenerated(err, name) { + assert.ok(existsSync(name), 'should exist'); + + var stat = fs.statSync(name); + assert.ok(stat.isDirectory(), 'should be a directory'); + + Test.testStat(stat, mode); + }; +} + +vows.describe('Directory creation').addBatch({ + 'when using without parameters': { + topic: function () { + tmp.dir(this.callback); + }, + + 'should be a directory': _testDir(040700), + 'should have the default prefix': Test.testPrefix('tmp-') + }, + + 'when using with prefix': { + topic: function () { + tmp.dir({ prefix: 'something' }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040700), + 'should have the provided prefix': Test.testPrefix('something') + }, + + 'when using with postfix': { + topic: function () { + tmp.dir({ postfix: '.txt' }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040700), + 'should have the provided postfix': Test.testPostfix('.txt') + }, + + 'when using template': { + topic: function () { + tmp.dir({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testDir(040700), + 'should have the provided prefix': Test.testPrefix('clike-'), + 'should have the provided postfix': Test.testPostfix('-postfix') + }, + + 'when using multiple options': { + topic: function () { + tmp.dir({ prefix: 'foo', postfix: 'bar', mode: 0750 }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040750), + 'should have the provided prefix': Test.testPrefix('foo'), + 'should have the provided postfix': Test.testPostfix('bar') + }, + + 'when using multiple options and mode': { + topic: function () { + tmp.dir({ prefix: 'complicated', postfix: 'options', mode: 0755 }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040755), + 'should have the provided prefix': Test.testPrefix('complicated'), + 'should have the provided postfix': Test.testPostfix('options') + }, + + 'no tries': { + topic: function () { + tmp.dir({ tries: -1 }, this.callback); + }, + + 'should return with an error': assert.isObject + }, + + 'keep testing': { + topic: function () { + Test.testKeep('dir', '1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a dir': function (err, name) { + _testDir(040700)(err, name); + fs.rmdirSync(name); + } + }, + + 'unlink testing': { + topic: function () { + Test.testKeep('dir', '0', this.callback); + }, + + 'should not return with error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "Directory should be removed"); + } + }, + + 'non graceful testing': { + topic: function () { + Test.testGraceful('dir', '0', this.callback); + }, + + 'should not return with error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a dir': function (err, name) { + _testDir(040700)(err, name); + fs.rmdirSync(name); + } + }, + + 'graceful testing': { + topic: function () { + Test.testGraceful('dir', '1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "Directory should be removed"); + } + }, + + 'unsafeCleanup === true': { + topic: function () { + Test.testUnsafeCleanup('1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "Directory should be removed"); + }, + 'should remove symlinked dir': function(err, name) { + assert.ok( + !existsSync(name + '/symlinkme-target'), + 'should remove target' + ); + }, + 'should not remove contents of symlink dir': function(err, name) { + assert.ok( + existsSync(__dirname + '/symlinkme/file.js'), + 'should not remove symlinked directory\'s content' + ); + } + }, + + 'unsafeCleanup === false': { + topic: function () { + Test.testUnsafeCleanup('0', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040700) + }, + + 'remove callback': { + topic: function () { + tmp.dir(this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'removeCallback should remove directory': function (_err, name, removeCallback) { + removeCallback(); + assert.ok(!existsSync(name), "Directory should be removed"); + } + } +}).exportTo(module); diff --git a/www/node_modules/tmp/test/file-test.js b/www/node_modules/tmp/test/file-test.js new file mode 100644 index 0000000..d9605b3 --- /dev/null +++ b/www/node_modules/tmp/test/file-test.js @@ -0,0 +1,177 @@ +var + vows = require('vows'), + assert = require('assert'), + + path = require('path'), + fs = require('fs'), + existsSync = fs.existsSync || path.existsSync, + + tmp = require('../lib/tmp.js'), + Test = require('./base.js'); + + +function _testFile(mode, fdTest) { + return function _testFileGenerated(err, name, fd) { + assert.ok(existsSync(name), 'should exist'); + + var stat = fs.statSync(name); + assert.equal(stat.size, 0, 'should have zero size'); + assert.ok(stat.isFile(), 'should be a file'); + + Test.testStat(stat, mode); + + // check with fstat as well (fd checking) + if (fdTest) { + var fstat = fs.fstatSync(fd); + assert.deepEqual(fstat, stat, 'fstat results should be the same'); + + var data = new Buffer('something'); + assert.equal(fs.writeSync(fd, data, 0, data.length, 0), data.length, 'should be writable'); + assert.ok(!fs.closeSync(fd), 'should not return with error'); + } + }; +} + +vows.describe('File creation').addBatch({ + 'when using without parameters': { + topic: function () { + tmp.file(this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100600, true), + 'should have the default prefix': Test.testPrefix('tmp-'), + 'should have the default postfix': Test.testPostfix('.tmp') + }, + + 'when using with prefix': { + topic: function () { + tmp.file({ prefix: 'something' }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100600, true), + 'should have the provided prefix': Test.testPrefix('something') + }, + + 'when using with postfix': { + topic: function () { + tmp.file({ postfix: '.txt' }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100600, true), + 'should have the provided postfix': Test.testPostfix('.txt') + }, + + 'when using template': { + topic: function () { + tmp.file({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100600, true), + 'should have the provided prefix': Test.testPrefix('clike-'), + 'should have the provided postfix': Test.testPostfix('-postfix') + }, + + 'when using multiple options': { + topic: function () { + tmp.file({ prefix: 'foo', postfix: 'bar', mode: 0640 }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100640, true), + 'should have the provided prefix': Test.testPrefix('foo'), + 'should have the provided postfix': Test.testPostfix('bar') + }, + + 'when using multiple options and mode': { + topic: function () { + tmp.file({ prefix: 'complicated', postfix: 'options', mode: 0644 }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100644, true), + 'should have the provided prefix': Test.testPrefix('complicated'), + 'should have the provided postfix': Test.testPostfix('options') + }, + + 'no tries': { + topic: function () { + tmp.file({ tries: -1 }, this.callback); + }, + + 'should not be created': assert.isObject + }, + + 'keep testing': { + topic: function () { + Test.testKeep('file', '1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': function (err, name) { + _testFile(0100600, false)(err, name, null); + fs.unlinkSync(name); + } + }, + + 'unlink testing': { + topic: function () { + Test.testKeep('file', '0', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "File should be removed"); + } + }, + + 'non graceful testing': { + topic: function () { + Test.testGraceful('file', '0', this.callback); + }, + + 'should not return with error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': function (err, name) { + _testFile(0100600, false)(err, name, null); + fs.unlinkSync(name); + } + }, + + 'graceful testing': { + topic: function () { + Test.testGraceful('file', '1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "File should be removed"); + } + }, + + 'remove callback': { + topic: function () { + tmp.file(this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'removeCallback should remove file': function (_err, name, _fd, removeCallback) { + removeCallback(); + assert.ok(!existsSync(name), "File should be removed"); + } + } + +}).exportTo(module); diff --git a/www/node_modules/tmp/test/graceful.js b/www/node_modules/tmp/test/graceful.js new file mode 100644 index 0000000..c898656 --- /dev/null +++ b/www/node_modules/tmp/test/graceful.js @@ -0,0 +1,15 @@ +var + tmp = require('../lib/tmp'), + spawn = require('./spawn'); + +var graceful = spawn.arg; + +if (graceful) { + tmp.setGracefulCleanup(); +} + +spawn.tmpFunction(function (err, name) { + spawn.out(name, function () { + throw new Error("Thrown on purpose"); + }); +}); diff --git a/www/node_modules/tmp/test/keep.js b/www/node_modules/tmp/test/keep.js new file mode 100644 index 0000000..9538605 --- /dev/null +++ b/www/node_modules/tmp/test/keep.js @@ -0,0 +1,11 @@ +var spawn = require('./spawn'); + +var keep = spawn.arg; + +spawn.tmpFunction({ keep: keep }, function (err, name) { + if (err) { + spawn.err(err, spawn.exit); + } else { + spawn.out(name, spawn.exit); + } +}); diff --git a/www/node_modules/tmp/test/name-test.js b/www/node_modules/tmp/test/name-test.js new file mode 100644 index 0000000..a242c21 --- /dev/null +++ b/www/node_modules/tmp/test/name-test.js @@ -0,0 +1,82 @@ +var + vows = require('vows'), + assert = require('assert'), + + path = require('path'), + + tmp = require('../lib/tmp.js'), + Test = require('./base.js'); + +vows.describe('Name creation').addBatch({ + 'when using without parameters': { + topic: function () { + tmp.tmpName(this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the default prefix': Test.testPrefix('tmp-') + }, + + 'when using with prefix': { + topic: function () { + tmp.tmpName({ prefix: 'something' }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the provided prefix': Test.testPrefix('something') + }, + + 'when using with postfix': { + topic: function () { + tmp.tmpName({ postfix: '.txt' }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the provided postfix': Test.testPostfix('.txt') + + }, + + 'when using template': { + topic: function () { + tmp.tmpName({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the provided prefix': Test.testPrefix('clike-'), + 'should have the provided postfix': Test.testPostfix('-postfix'), + 'should have template filled': function (err, name) { + assert.isTrue(/[a-zA-Z0-9]{6}/.test(name)); + } + }, + + 'when using multiple options': { + topic: function () { + tmp.tmpName({ prefix: 'foo', postfix: 'bar', tries: 5 }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the provided prefix': Test.testPrefix('foo'), + 'should have the provided postfix': Test.testPostfix('bar') + }, + + 'no tries': { + topic: function () { + tmp.tmpName({ tries: -1 }, this.callback); + }, + + 'should fail': function (err, name) { + assert.isObject(err); + } + }, + + 'tries not numeric': { + topic: function () { + tmp.tmpName({ tries: 'hello'}, this.callback); + }, + + 'should fail': function (err, name) { + assert.isObject(err); + } + } + +}).exportTo(module); diff --git a/www/node_modules/tmp/test/spawn.js b/www/node_modules/tmp/test/spawn.js new file mode 100644 index 0000000..6468eb3 --- /dev/null +++ b/www/node_modules/tmp/test/spawn.js @@ -0,0 +1,32 @@ +var + fs = require('fs'), + tmp = require('../lib/tmp'); + +function _writeSync(stream, str, cb) { + var flushed = stream.write(str); + if (flushed) { + return cb(null); + } + + stream.once('drain', function _flushed() { + cb(null); + }); +} + +module.exports.out = function (str, cb) { + _writeSync(process.stdout, str, cb); +}; + +module.exports.err = function (str, cb) { + _writeSync(process.stderr, str, cb); +}; + +module.exports.exit = function () { + process.exit(0); +}; + +var type = process.argv[2]; +module.exports.tmpFunction = (type == 'file') ? tmp.file : tmp.dir; + +var arg = (process.argv[3] && parseInt(process.argv[3], 10) === 1) ? true : false; +module.exports.arg = arg; diff --git a/www/node_modules/tmp/test/symlinkme/file.js b/www/node_modules/tmp/test/symlinkme/file.js new file mode 100644 index 0000000..e69de29 diff --git a/www/node_modules/tmp/test/unsafe.js b/www/node_modules/tmp/test/unsafe.js new file mode 100644 index 0000000..73e4fb3 --- /dev/null +++ b/www/node_modules/tmp/test/unsafe.js @@ -0,0 +1,30 @@ +var + fs = require('fs'), + join = require('path').join, + spawn = require('./spawn'); + +var unsafe = spawn.arg; +spawn.tmpFunction({ unsafeCleanup: unsafe }, function (err, name) { + if (err) { + spawn.err(err, spawn.exit); + return; + } + + try { + // file that should be removed + var fd = fs.openSync(join(name, 'should-be-removed.file'), 'w'); + fs.closeSync(fd); + + // in tree source + var symlinkSource = join(__dirname, 'symlinkme'); + // testing target + var symlinkTarget = join(name, 'symlinkme-target'); + + // symlink that should be removed but the contents should be preserved. + fs.symlinkSync(symlinkSource, symlinkTarget, 'dir'); + + spawn.out(name, spawn.exit); + } catch (e) { + spawn.err(e.toString(), spawn.exit); + } +}); diff --git a/www/node_modules/ultron/.npmignore b/www/node_modules/ultron/.npmignore new file mode 100644 index 0000000..66210a2 --- /dev/null +++ b/www/node_modules/ultron/.npmignore @@ -0,0 +1,3 @@ +node_modules +coverage +.tern-port diff --git a/www/node_modules/ultron/.travis.yml b/www/node_modules/ultron/.travis.yml new file mode 100644 index 0000000..a505004 --- /dev/null +++ b/www/node_modules/ultron/.travis.yml @@ -0,0 +1,21 @@ +sudo: false +language: node_js +node_js: + - "0.12" + - "0.10" + - "0.8" + - "iojs" +before_install: + - 'if [ "${TRAVIS_NODE_VERSION}" == "0.8" ]; then npm install -g npm@2.11.1; fi' +script: + - "npm run test-travis" +after_script: + - "npm install coveralls@2.11.x && cat coverage/lcov.info | coveralls" +matrix: + fast_finish: true +notifications: + irc: + channels: + - "irc.freenode.org#unshift" + on_success: change + on_failure: change diff --git a/www/node_modules/ultron/LICENSE b/www/node_modules/ultron/LICENSE new file mode 100644 index 0000000..6dc9316 --- /dev/null +++ b/www/node_modules/ultron/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/www/node_modules/ultron/README.md b/www/node_modules/ultron/README.md new file mode 100644 index 0000000..84fa3f2 --- /dev/null +++ b/www/node_modules/ultron/README.md @@ -0,0 +1,97 @@ +# Ultron + +[![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](http://img.shields.io/npm/v/ultron.svg?style=flat-square)](http://browsenpm.org/package/ultron)[![Build Status](http://img.shields.io/travis/unshiftio/ultron/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/ultron)[![Dependencies](https://img.shields.io/david/unshiftio/ultron.svg?style=flat-square)](https://david-dm.org/unshiftio/ultron)[![Coverage Status](http://img.shields.io/coveralls/unshiftio/ultron/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/ultron?branch=master)[![IRC channel](http://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](http://webchat.freenode.net/?channels=unshift) + +Ultron is a high-intelligence robot. It gathers intelligence so it can start +improving upon his rudimentary design. It will learn your event emitting +patterns and find ways to exterminate them. Allowing you to remove only the +event emitters that **you** assigned and not the ones that your users or +developers assigned. This can prevent race conditions, memory leaks and even file +descriptor leaks from ever happening as you won't remove clean up processes. + +## Installation + +The module is designed to be used in browsers using browserify and in Node.js. +You can install the module through the public npm registry by running the +following command in CLI: + +``` +npm install --save ultron +``` + +## Usage + +In all examples we assume that you've required the library as following: + +```js +'use strict'; + +var Ultron = require('ultron'); +``` + +Now that we've required the library we can construct our first `Ultron` instance. +The constructor requires one argument which should be the `EventEmitter` +instance that we need to operate upon. This can be the `EventEmitter` module +that ships with Node.js or `EventEmitter3` or anything else as long as it +follow the same API and internal structure as these 2. So with that in mind we +can create the instance: + +```js +// +// For the sake of this example we're going to construct an empty EventEmitter +// +var EventEmitter = require('events').EventEmitter; // or require('eventmitter3'); +var events = new EventEmitter(); + +var ultron = new Ultron(events); +``` + +You can now use the following API's from the Ultron instance: + +### Ultron.on + +Register a new event listener for the given event. It follows the exact same API +as `EventEmitter.on` but it will return itself instead of returning the +EventEmitter instance. If you are using EventEmitter3 it also supports the +context param: + +```js +ultron.on('event-name', handler, { custom: 'function context' }); +``` + +### Ultron.once + +Exactly the same as the [Ultron.on](#ultronon) but it only allows the execution +once. + +### Ultron.remove + +This is where all the magic happens and the safe removal starts. This function +accepts different argument styles: + +- No arguments, assume that all events need to be removed so it will work as + `removeAllListeners()` API. +- 1 argument, when it's a string it will be split on ` ` and `,` to create a + list of events that need to be cleared. +- Multiple arguments, we assume that they are all names of events that need to + be cleared. + +```js +ultron.remove('foo, bar baz'); // Removes foo, bar and baz. +ultron.remove('foo', 'bar', 'baz'); // Removes foo, bar and baz. +ultron.remove(); // Removes everything. +``` + +If you just want to remove a single event listener using a function reference +you can still use the EventEmitter's `removeListener(event, fn)` API: + +```js +function foo() {} + +ulton.on('foo', foo); +events.removeListener('foo', foo); +``` + +## License + +MIT diff --git a/www/node_modules/ultron/index.js b/www/node_modules/ultron/index.js new file mode 100644 index 0000000..af17ab7 --- /dev/null +++ b/www/node_modules/ultron/index.js @@ -0,0 +1,129 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +/** + * An auto incrementing id which we can use to create "unique" Ultron instances + * so we can track the event emitters that are added through the Ultron + * interface. + * + * @type {Number} + * @private + */ +var id = 0; + +/** + * Ultron is high-intelligence robot. It gathers intelligence so it can start improving + * upon his rudimentary design. It will learn from your EventEmitting patterns + * and exterminate them. + * + * @constructor + * @param {EventEmitter} ee EventEmitter instance we need to wrap. + * @api public + */ +function Ultron(ee) { + if (!(this instanceof Ultron)) return new Ultron(ee); + + this.id = id++; + this.ee = ee; +} + +/** + * Register a new EventListener for the given event. + * + * @param {String} event Name of the event. + * @param {Functon} fn Callback function. + * @param {Mixed} context The context of the function. + * @returns {Ultron} + * @api public + */ +Ultron.prototype.on = function on(event, fn, context) { + fn.__ultron = this.id; + this.ee.on(event, fn, context); + + return this; +}; +/** + * Add an EventListener that's only called once. + * + * @param {String} event Name of the event. + * @param {Function} fn Callback function. + * @param {Mixed} context The context of the function. + * @returns {Ultron} + * @api public + */ +Ultron.prototype.once = function once(event, fn, context) { + fn.__ultron = this.id; + this.ee.once(event, fn, context); + + return this; +}; + +/** + * Remove the listeners we assigned for the given event. + * + * @returns {Ultron} + * @api public + */ +Ultron.prototype.remove = function remove() { + var args = arguments + , event; + + // + // When no event names are provided we assume that we need to clear all the + // events that were assigned through us. + // + if (args.length === 1 && 'string' === typeof args[0]) { + args = args[0].split(/[, ]+/); + } else if (!args.length) { + args = []; + + for (event in this.ee._events) { + if (has.call(this.ee._events, event)) args.push(event); + } + } + + for (var i = 0; i < args.length; i++) { + var listeners = this.ee.listeners(args[i]); + + for (var j = 0; j < listeners.length; j++) { + event = listeners[j]; + + // + // Once listeners have a `listener` property that stores the real listener + // in the EventEmitter that ships with Node.js. + // + if (event.listener) { + if (event.listener.__ultron !== this.id) continue; + delete event.listener.__ultron; + } else { + if (event.__ultron !== this.id) continue; + delete event.__ultron; + } + + this.ee.removeListener(args[i], event); + } + } + + return this; +}; + +/** + * Destroy the Ultron instance, remove all listeners and release all references. + * + * @returns {Boolean} + * @api public + */ +Ultron.prototype.destroy = function destroy() { + if (!this.ee) return false; + + this.remove(); + this.ee = null; + + return true; +}; + +// +// Expose the module. +// +module.exports = Ultron; diff --git a/www/node_modules/ultron/package.json b/www/node_modules/ultron/package.json new file mode 100644 index 0000000..28ad834 --- /dev/null +++ b/www/node_modules/ultron/package.json @@ -0,0 +1,100 @@ +{ + "_args": [ + [ + "ultron@1.0.x", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/ws" + ] + ], + "_from": "ultron@>=1.0.0 <1.1.0", + "_id": "ultron@1.0.2", + "_inCache": true, + "_installable": true, + "_location": "/ultron", + "_nodeVersion": "0.12.3", + "_npmUser": { + "email": "npm@3rd-Eden.com", + "name": "3rdeden" + }, + "_npmVersion": "2.9.1", + "_phantomChildren": {}, + "_requested": { + "name": "ultron", + "raw": "ultron@1.0.x", + "rawSpec": "1.0.x", + "scope": null, + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/ws" + ], + "_resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "_shasum": "ace116ab557cd197386a4e88f4685378c8b2e4fa", + "_shrinkwrap": null, + "_spec": "ultron@1.0.x", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/ws", + "author": { + "name": "Arnout Kazemier" + }, + "bugs": { + "url": "https://github.com/unshiftio/ultron/issues" + }, + "dependencies": {}, + "description": "Ultron is high-intelligence robot. It gathers intel so it can start improving upon his rudimentary design", + "devDependencies": { + "assume": "1.2.x", + "eventemitter3": "1.1.x", + "istanbul": "0.3.x", + "mocha": "2.2.x", + "pre-commit": "1.0.x" + }, + "directories": {}, + "dist": { + "shasum": "ace116ab557cd197386a4e88f4685378c8b2e4fa", + "tarball": "http://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz" + }, + "gitHead": "a10482ae98a09120821545456c90c6d60d540f7c", + "homepage": "https://github.com/unshiftio/ultron", + "keywords": [ + "Ultron", + "robot", + "gather", + "intelligence", + "event", + "events", + "eventemitter", + "emitter", + "cleanup" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "email": "npm@unshift.io", + "name": "unshift" + }, + { + "email": "info@3rd-Eden.com", + "name": "v1" + }, + { + "email": "npm@3rd-Eden.com", + "name": "3rdeden" + } + ], + "name": "ultron", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/unshiftio/ultron.git" + }, + "scripts": { + "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100", + "coverage": "istanbul cover ./node_modules/.bin/_mocha -- test.js", + "test": "mocha test.js", + "test-travis": "istanbul cover node_modules/.bin/_mocha --report lcovonly -- test.js", + "watch": "mocha --watch test.js" + }, + "version": "1.0.2" +} diff --git a/www/node_modules/ultron/test.js b/www/node_modules/ultron/test.js new file mode 100644 index 0000000..1fd4f1b --- /dev/null +++ b/www/node_modules/ultron/test.js @@ -0,0 +1,327 @@ +/* istanbul ignore next */ +describe('Ultron', function () { + 'use strict'; + + var EventEmitter = require('eventemitter3') + , EE = require('events').EventEmitter + , assume = require('assume') + , Ultron = require('./') + , ultron + , ee; + + beforeEach(function () { + ee = new EventEmitter(); + ultron = new Ultron(ee); + }); + + afterEach(function () { + ultron.destroy(); + ee.removeAllListeners(); + }); + + it('is exposed as a function', function () { + assume(Ultron).is.a('function'); + }); + + it('can be initialized without the new keyword', function () { + assume(Ultron(ee)).is.instanceOf(Ultron); + }); + + it('assigns a unique id to every instance', function () { + for (var i = 0; i < 100; i++) { + assume(ultron.id).does.not.equal((new Ultron()).id); + } + }); + + it('allows removal through the event emitter', function () { + function foo() {} + function bar() {} + + ultron.on('foo', foo); + ultron.once('foo', bar); + + assume(foo.__ultron).equals(ultron.id); + assume(bar.__ultron).equals(ultron.id); + assume(ee.listeners('foo').length).equals(2); + + ee.removeListener('foo', foo); + assume(ee.listeners('foo').length).equals(1); + + ee.removeListener('foo', bar); + assume(ee.listeners('foo').length).equals(0); + }); + + describe('#on', function () { + it('assigns a listener', function () { + assume(ee.listeners('foo').length).equals(0); + + function foo() {} + + ultron.on('foo', foo); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('tags the assigned function', function () { + assume(ee.listeners('foo').length).equals(0); + + ultron.on('foo', function () {}); + assume(ee.listeners('foo')[0].__ultron).equals(ultron.id); + }); + + it('also passes in the context', function (next) { + var context = 1313; + + ultron.on('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + assume(this).equals(context); + + next(); + }, context); + + ee.emit('foo', 'a', 'b', 'c'); + }); + + it('works with regular eventemitters as well', function (next) { + var ee = new EE() + , ultron = new Ultron(ee); + + ultron.on('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + next(); + }); + + ee.emit('foo', 'a', 'b', 'c'); + }); + }); + + describe('#once', function () { + it('assigns a listener', function () { + assume(ee.listeners('foo').length).equals(0); + + function foo() {} + ultron.once('foo', foo); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('tags the assigned function', function () { + assume(ee.listeners('foo').length).equals(0); + + ultron.once('foo', function () {}); + assume(ee.listeners('foo')[0].__ultron).equals(ultron.id); + }); + + it('also passes in the context', function (next) { + var context = 1313; + + ultron.once('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + assume(this).equals(context); + + next(); + }, context); + + ee.emit('foo', 'a', 'b', 'c'); + ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute + }); + + it('works with regular eventemitters as well', function (next) { + var ee = new EE() + , ultron = new Ultron(ee); + + ultron.once('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + next(); + }); + + ee.emit('foo', 'a', 'b', 'c'); + ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute + }); + }); + + describe('#remove', function () { + it('removes only our assigned `on` listeners', function () { + function foo() {} + function bar() {} + + ee.on('foo', foo); + ultron.on('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('removes our private __ultron references', function () { + function once() {} + function on() {} + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.on('foo', on); + ultron.once('bar', once); + + assume('__ultron' in once).is.true(); + assume('__ultron' in on).is.true(); + + ultron.remove('foo, bar'); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.destroy(); + + ee = new EE(); + ultron = new Ultron(ee); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.on('foo', on); + ultron.once('bar', once); + + assume('__ultron' in once).is.true(); + assume('__ultron' in on).is.true(); + + ultron.remove('foo, bar'); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + }); + + it('removes only our assigned `once` listeners', function () { + function foo() {} + function bar() {} + + ee.once('foo', foo); + ultron.once('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('removes only our assigned `once` listeners from regular EE', function () { + var ee = new EE() + , ultron = new Ultron(ee); + + function foo() {} + function bar() {} + + ee.once('foo', foo); + ultron.once('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0].listener).equals(foo); + }); + + it('removes all assigned events if called without args', function () { + function foo() {} + function bar() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + + ultron.remove(); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + }); + + it('removes multiple listeners based on args', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.remove('foo', 'bar'); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(1); + }); + + it('removes multiple listeners if first arg is seperated string', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.remove('foo, bar'); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(1); + }); + }); + + describe('#destroy', function () { + it('removes all listeners', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.destroy(); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(0); + }); + + it('removes the .ee reference', function () { + assume(ultron.ee).equals(ee); + ultron.destroy(); + assume(ultron.ee).equals(null); + }); + + it('returns booleans for state indication', function () { + assume(ultron.destroy()).is.true(); + assume(ultron.destroy()).is.false(); + assume(ultron.destroy()).is.false(); + assume(ultron.destroy()).is.false(); + }); + }); +}); diff --git a/www/node_modules/wrappy/LICENSE b/www/node_modules/wrappy/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/www/node_modules/wrappy/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/www/node_modules/wrappy/README.md b/www/node_modules/wrappy/README.md new file mode 100644 index 0000000..98eab25 --- /dev/null +++ b/www/node_modules/wrappy/README.md @@ -0,0 +1,36 @@ +# wrappy + +Callback wrapping utility + +## USAGE + +```javascript +var wrappy = require("wrappy") + +// var wrapper = wrappy(wrapperFunction) + +// make sure a cb is called only once +// See also: http://npm.im/once for this specific use case +var once = wrappy(function (cb) { + var called = false + return function () { + if (called) return + called = true + return cb.apply(this, arguments) + } +}) + +function printBoo () { + console.log('boo') +} +// has some rando property +printBoo.iAmBooPrinter = true + +var onlyPrintOnce = once(printBoo) + +onlyPrintOnce() // prints 'boo' +onlyPrintOnce() // does nothing + +// random property is retained! +assert.equal(onlyPrintOnce.iAmBooPrinter, true) +``` diff --git a/www/node_modules/wrappy/package.json b/www/node_modules/wrappy/package.json new file mode 100644 index 0000000..7069c85 --- /dev/null +++ b/www/node_modules/wrappy/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + "wrappy@1", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/inflight" + ] + ], + "_from": "wrappy@>=1.0.0 <2.0.0", + "_id": "wrappy@1.0.1", + "_inCache": true, + "_installable": true, + "_location": "/wrappy", + "_nodeVersion": "0.10.31", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "2.0.0", + "_phantomChildren": {}, + "_requested": { + "name": "wrappy", + "raw": "wrappy@1", + "rawSpec": "1", + "scope": null, + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/inflight", + "/once" + ], + "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz", + "_shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739", + "_shrinkwrap": null, + "_spec": "wrappy@1", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/inflight", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/npm/wrappy/issues" + }, + "dependencies": {}, + "description": "Callback wrapping utility", + "devDependencies": { + "tap": "^0.4.12" + }, + "directories": { + "test": "test" + }, + "dist": { + "shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739", + "tarball": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + }, + "gitHead": "006a8cbac6b99988315834c207896eed71fd069a", + "homepage": "https://github.com/npm/wrappy", + "license": "ISC", + "main": "wrappy.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "wrappy", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/wrappy.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "1.0.1" +} diff --git a/www/node_modules/wrappy/test/basic.js b/www/node_modules/wrappy/test/basic.js new file mode 100644 index 0000000..5ed0fcd --- /dev/null +++ b/www/node_modules/wrappy/test/basic.js @@ -0,0 +1,51 @@ +var test = require('tap').test +var wrappy = require('../wrappy.js') + +test('basic', function (t) { + function onceifier (cb) { + var called = false + return function () { + if (called) return + called = true + return cb.apply(this, arguments) + } + } + onceifier.iAmOnce = {} + var once = wrappy(onceifier) + t.equal(once.iAmOnce, onceifier.iAmOnce) + + var called = 0 + function boo () { + t.equal(called, 0) + called++ + } + // has some rando property + boo.iAmBoo = true + + var onlyPrintOnce = once(boo) + + onlyPrintOnce() // prints 'boo' + onlyPrintOnce() // does nothing + t.equal(called, 1) + + // random property is retained! + t.equal(onlyPrintOnce.iAmBoo, true) + + var logs = [] + var logwrap = wrappy(function (msg, cb) { + logs.push(msg + ' wrapping cb') + return function () { + logs.push(msg + ' before cb') + var ret = cb.apply(this, arguments) + logs.push(msg + ' after cb') + } + }) + + var c = logwrap('foo', function () { + t.same(logs, [ 'foo wrapping cb', 'foo before cb' ]) + }) + c() + t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ]) + + t.end() +}) diff --git a/www/node_modules/wrappy/wrappy.js b/www/node_modules/wrappy/wrappy.js new file mode 100644 index 0000000..bb7e7d6 --- /dev/null +++ b/www/node_modules/wrappy/wrappy.js @@ -0,0 +1,33 @@ +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} diff --git a/www/node_modules/ws/.npmignore b/www/node_modules/ws/.npmignore new file mode 100644 index 0000000..1eba800 --- /dev/null +++ b/www/node_modules/ws/.npmignore @@ -0,0 +1,11 @@ +npm-debug.log +node_modules +.*.swp +.lock-* +build + +bench +doc +examples +test + diff --git a/www/node_modules/ws/.travis.yml b/www/node_modules/ws/.travis.yml new file mode 100644 index 0000000..5002b49 --- /dev/null +++ b/www/node_modules/ws/.travis.yml @@ -0,0 +1,15 @@ +language: node_js +sudo: false +node_js: + - "5" + - "4" + - "0.12" +addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - gcc-4.9 + - g++-4.9 +before_install: + - export CC="gcc-4.9" CXX="g++-4.9" diff --git a/www/node_modules/ws/Makefile b/www/node_modules/ws/Makefile new file mode 100644 index 0000000..00f19fa --- /dev/null +++ b/www/node_modules/ws/Makefile @@ -0,0 +1,40 @@ +ALL_TESTS = $(shell find test/ -name '*.test.js') +ALL_INTEGRATION = $(shell find test/ -name '*.integration.js') + +all: + node-gyp configure build + +clean: + node-gyp clean + +run-tests: + @./node_modules/.bin/mocha \ + -t 5000 \ + -s 2400 \ + $(TESTFLAGS) \ + $(TESTS) + +run-integrationtests: + @./node_modules/.bin/mocha \ + -t 5000 \ + -s 6000 \ + $(TESTFLAGS) \ + $(TESTS) + +test: + @$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_PATH=lib TESTS="$(ALL_TESTS)" run-tests + +integrationtest: + @$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_PATH=lib TESTS="$(ALL_INTEGRATION)" run-integrationtests + +benchmark: + @node bench/sender.benchmark.js + @node bench/parser.benchmark.js + +autobahn: + @NODE_PATH=lib node test/autobahn.js + +autobahn-server: + @NODE_PATH=lib node test/autobahn-server.js + +.PHONY: test diff --git a/www/node_modules/ws/README.md b/www/node_modules/ws/README.md new file mode 100644 index 0000000..9be2e51 --- /dev/null +++ b/www/node_modules/ws/README.md @@ -0,0 +1,242 @@ +# ws: a node.js websocket library + +[![Build Status](https://travis-ci.org/websockets/ws.svg?branch=master)](https://travis-ci.org/websockets/ws) + +`ws` is a simple to use WebSocket implementation, up-to-date against RFC-6455, +and [probably the fastest WebSocket library for node.js][archive]. + +Passes the quite extensive Autobahn test suite. See http://websockets.github.com/ws +for the full reports. + +## Protocol support + +* **Hixie draft 76** (Old and deprecated, but still in use by Safari and Opera. + Added to ws version 0.4.2, but server only. Can be disabled by setting the + `disableHixie` option to true.) +* **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) +* **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`) + +### Installing + +``` +npm install --save ws +``` + +### Opt-in for performance + +There are 2 optional modules that can be installed along side with the `ws` +module. These modules are binary addons which improve certain operations, but as +they are binary addons they require compilation which can fail if no c++ +compiler is installed on the host system. + +- `npm install --save bufferutil`: Improves internal buffer operations which + allows for faster processing of masked WebSocket frames and general buffer + operations. +- `npm install --save utf-8-validate`: The specification requires validation of + invalid UTF-8 chars, some of these validations could not be done in JavaScript + hence the need for a binary addon. In most cases you will already be + validating the input that you receive for security purposes leading to double + validation. But if you want to be 100% spec conform and fast validation of UTF-8 + then this module is a must. + +### Sending and receiving text data + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://www.host.com/path'); + +ws.on('open', function open() { + ws.send('something'); +}); + +ws.on('message', function(data, flags) { + // flags.binary will be set if a binary data is received. + // flags.masked will be set if the data was masked. +}); +``` + +### Sending binary data + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://www.host.com/path'); + +ws.on('open', function open() { + var array = new Float32Array(5); + + for (var i = 0; i < array.length; ++i) { + array[i] = i / 2; + } + + ws.send(array, { binary: true, mask: true }); +}); +``` + +Setting `mask`, as done for the send options above, will cause the data to be +masked according to the WebSocket protocol. The same option applies for text +data. + +### Server example + +```js +var WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('message', function incoming(message) { + console.log('received: %s', message); + }); + + ws.send('something'); +}); +``` + +### ExpressJS example + +```js +var server = require('http').createServer() + , url = require('url') + , WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ server: server }) + , express = require('express') + , app = express() + , port = 4080; + +app.use(function (req, res) { + res.send({ msg: "hello" }); +}); + +wss.on('connection', function connection(ws) { + var location = url.parse(ws.upgradeReq.url, true); + // you might use location.query.access_token to authenticate or share sessions + // or ws.upgradeReq.headers.cookie (see http://stackoverflow.com/a/16395220/151312) + + ws.on('message', function incoming(message) { + console.log('received: %s', message); + }); + + ws.send('something'); +}); + +server.on('request', app); +server.listen(port, function () { console.log('Listening on ' + server.address().port) }); +``` + +### Server sending broadcast data + +```js +var WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ port: 8080 }); + +wss.broadcast = function broadcast(data) { + wss.clients.forEach(function each(client) { + client.send(data); + }); +}; +``` + +### Error handling best practices + +```js +// If the WebSocket is closed before the following send is attempted +ws.send('something'); + +// Errors (both immediate and async write errors) can be detected in an optional +// callback. The callback is also the only way of being notified that data has +// actually been sent. +ws.send('something', function ack(error) { + // if error is not defined, the send has been completed, + // otherwise the error object will indicate what failed. +}); + +// Immediate errors can also be handled with try/catch-blocks, but **note** that +// since sends are inherently asynchronous, socket write failures will *not* be +// captured when this technique is used. +try { ws.send('something'); } +catch (e) { /* handle error */ } +``` + +### echo.websocket.org demo + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://echo.websocket.org/', { + protocolVersion: 8, + origin: 'http://websocket.org' +}); + +ws.on('open', function open() { + console.log('connected'); + ws.send(Date.now().toString(), {mask: true}); +}); + +ws.on('close', function close() { + console.log('disconnected'); +}); + +ws.on('message', function message(data, flags) { + console.log('Roundtrip time: ' + (Date.now() - parseInt(data)) + 'ms', flags); + + setTimeout(function timeout() { + ws.send(Date.now().toString(), {mask: true}); + }, 500); +}); +``` + +### Browserify users +When including ws via a browserify bundle, ws returns global.WebSocket which has slightly different API. +You should use the standard WebSockets API instead. + +https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_client_applications#Availability_of_WebSockets + + +### Other examples + +For a full example with a browser client communicating with a ws server, see the +examples folder. + +Note that the usage together with Express 3.0 is quite different from Express +2.x. The difference is expressed in the two different serverstats-examples. + +Otherwise, see the test cases. + +### Running the tests + +``` +make test +``` + +## API Docs + +See [`/doc/ws.md`](https://github.com/websockets/ws/blob/master/doc/ws.md) for Node.js-like docs for the ws classes. + +## Changelog + +We're using the GitHub [`releases`](https://github.com/websockets/ws/releases) for changelog entries. + +## License + +(The MIT License) + +Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +[archive]: http://web.archive.org/web/20130314230536/http://hobbycoding.posterous.com/the-fastest-websocket-module-for-nodejs diff --git a/www/node_modules/ws/index.js b/www/node_modules/ws/index.js new file mode 100644 index 0000000..a7e8644 --- /dev/null +++ b/www/node_modules/ws/index.js @@ -0,0 +1,49 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var WS = module.exports = require('./lib/WebSocket'); + +WS.Server = require('./lib/WebSocketServer'); +WS.Sender = require('./lib/Sender'); +WS.Receiver = require('./lib/Receiver'); + +/** + * Create a new WebSocket server. + * + * @param {Object} options Server options + * @param {Function} fn Optional connection listener. + * @returns {WS.Server} + * @api public + */ +WS.createServer = function createServer(options, fn) { + var server = new WS.Server(options); + + if (typeof fn === 'function') { + server.on('connection', fn); + } + + return server; +}; + +/** + * Create a new WebSocket connection. + * + * @param {String} address The URL/address we need to connect to. + * @param {Function} fn Open listener. + * @returns {WS} + * @api public + */ +WS.connect = WS.createConnection = function connect(address, fn) { + var client = new WS(address); + + if (typeof fn === 'function') { + client.on('open', fn); + } + + return client; +}; diff --git a/www/node_modules/ws/lib/BufferPool.js b/www/node_modules/ws/lib/BufferPool.js new file mode 100644 index 0000000..8ee5990 --- /dev/null +++ b/www/node_modules/ws/lib/BufferPool.js @@ -0,0 +1,63 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util'); + +function BufferPool(initialSize, growStrategy, shrinkStrategy) { + if (this instanceof BufferPool === false) { + throw new TypeError("Classes can't be function-called"); + } + + if (typeof initialSize === 'function') { + shrinkStrategy = growStrategy; + growStrategy = initialSize; + initialSize = 0; + } + else if (typeof initialSize === 'undefined') { + initialSize = 0; + } + this._growStrategy = (growStrategy || function(db, size) { + return db.used + size; + }).bind(null, this); + this._shrinkStrategy = (shrinkStrategy || function(db) { + return initialSize; + }).bind(null, this); + this._buffer = initialSize ? new Buffer(initialSize) : null; + this._offset = 0; + this._used = 0; + this._changeFactor = 0; + this.__defineGetter__('size', function(){ + return this._buffer == null ? 0 : this._buffer.length; + }); + this.__defineGetter__('used', function(){ + return this._used; + }); +} + +BufferPool.prototype.get = function(length) { + if (this._buffer == null || this._offset + length > this._buffer.length) { + var newBuf = new Buffer(this._growStrategy(length)); + this._buffer = newBuf; + this._offset = 0; + } + this._used += length; + var buf = this._buffer.slice(this._offset, this._offset + length); + this._offset += length; + return buf; +} + +BufferPool.prototype.reset = function(forceNewBuffer) { + var len = this._shrinkStrategy(); + if (len < this.size) this._changeFactor -= 1; + if (forceNewBuffer || this._changeFactor < -2) { + this._changeFactor = 0; + this._buffer = len ? new Buffer(len) : null; + } + this._offset = 0; + this._used = 0; +} + +module.exports = BufferPool; diff --git a/www/node_modules/ws/lib/BufferUtil.fallback.js b/www/node_modules/ws/lib/BufferUtil.fallback.js new file mode 100644 index 0000000..508542c --- /dev/null +++ b/www/node_modules/ws/lib/BufferUtil.fallback.js @@ -0,0 +1,47 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +module.exports.BufferUtil = { + merge: function(mergedBuffer, buffers) { + var offset = 0; + for (var i = 0, l = buffers.length; i < l; ++i) { + var buf = buffers[i]; + buf.copy(mergedBuffer, offset); + offset += buf.length; + } + }, + mask: function(source, mask, output, offset, length) { + var maskNum = mask.readUInt32LE(0, true); + var i = 0; + for (; i < length - 3; i += 4) { + var num = maskNum ^ source.readUInt32LE(i, true); + if (num < 0) num = 4294967296 + num; + output.writeUInt32LE(num, offset + i, true); + } + switch (length % 4) { + case 3: output[offset + i + 2] = source[i + 2] ^ mask[2]; + case 2: output[offset + i + 1] = source[i + 1] ^ mask[1]; + case 1: output[offset + i] = source[i] ^ mask[0]; + case 0:; + } + }, + unmask: function(data, mask) { + var maskNum = mask.readUInt32LE(0, true); + var length = data.length; + var i = 0; + for (; i < length - 3; i += 4) { + var num = maskNum ^ data.readUInt32LE(i, true); + if (num < 0) num = 4294967296 + num; + data.writeUInt32LE(num, i, true); + } + switch (length % 4) { + case 3: data[i + 2] = data[i + 2] ^ mask[2]; + case 2: data[i + 1] = data[i + 1] ^ mask[1]; + case 1: data[i] = data[i] ^ mask[0]; + case 0:; + } + } +} diff --git a/www/node_modules/ws/lib/BufferUtil.js b/www/node_modules/ws/lib/BufferUtil.js new file mode 100644 index 0000000..18c6998 --- /dev/null +++ b/www/node_modules/ws/lib/BufferUtil.js @@ -0,0 +1,13 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +try { + module.exports = require('bufferutil'); +} catch (e) { + module.exports = require('./BufferUtil.fallback'); +} diff --git a/www/node_modules/ws/lib/ErrorCodes.js b/www/node_modules/ws/lib/ErrorCodes.js new file mode 100644 index 0000000..55ebd52 --- /dev/null +++ b/www/node_modules/ws/lib/ErrorCodes.js @@ -0,0 +1,24 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +module.exports = { + isValidErrorCode: function(code) { + return (code >= 1000 && code <= 1011 && code != 1004 && code != 1005 && code != 1006) || + (code >= 3000 && code <= 4999); + }, + 1000: 'normal', + 1001: 'going away', + 1002: 'protocol error', + 1003: 'unsupported data', + 1004: 'reserved', + 1005: 'reserved for extensions', + 1006: 'reserved for extensions', + 1007: 'inconsistent or invalid data', + 1008: 'policy violation', + 1009: 'message too big', + 1010: 'extension handshake missing', + 1011: 'an unexpected condition prevented the request from being fulfilled', +}; \ No newline at end of file diff --git a/www/node_modules/ws/lib/Extensions.js b/www/node_modules/ws/lib/Extensions.js new file mode 100644 index 0000000..a465ace --- /dev/null +++ b/www/node_modules/ws/lib/Extensions.js @@ -0,0 +1,70 @@ + +var util = require('util'); + +/** + * Module exports. + */ + +exports.parse = parse; +exports.format = format; + +/** + * Parse extensions header value + */ + +function parse(value) { + value = value || ''; + + var extensions = {}; + + value.split(',').forEach(function(v) { + var params = v.split(';'); + var token = params.shift().trim(); + var paramsList = extensions[token] = extensions[token] || []; + var parsedParams = {}; + + params.forEach(function(param) { + var parts = param.trim().split('='); + var key = parts[0]; + var value = parts[1]; + if (typeof value === 'undefined') { + value = true; + } else { + // unquote value + if (value[0] === '"') { + value = value.slice(1); + } + if (value[value.length - 1] === '"') { + value = value.slice(0, value.length - 1); + } + } + (parsedParams[key] = parsedParams[key] || []).push(value); + }); + + paramsList.push(parsedParams); + }); + + return extensions; +} + +/** + * Format extensions header value + */ + +function format(value) { + return Object.keys(value).map(function(token) { + var paramsList = value[token]; + if (!util.isArray(paramsList)) { + paramsList = [paramsList]; + } + return paramsList.map(function(params) { + return [token].concat(Object.keys(params).map(function(k) { + var p = params[k]; + if (!util.isArray(p)) p = [p]; + return p.map(function(v) { + return v === true ? k : k + '=' + v; + }).join('; '); + })).join('; '); + }).join(', '); + }).join(', '); +} diff --git a/www/node_modules/ws/lib/PerMessageDeflate.js b/www/node_modules/ws/lib/PerMessageDeflate.js new file mode 100644 index 0000000..5324bd8 --- /dev/null +++ b/www/node_modules/ws/lib/PerMessageDeflate.js @@ -0,0 +1,325 @@ + +var zlib = require('zlib'); + +var AVAILABLE_WINDOW_BITS = [8, 9, 10, 11, 12, 13, 14, 15]; +var DEFAULT_WINDOW_BITS = 15; +var DEFAULT_MEM_LEVEL = 8; + +PerMessageDeflate.extensionName = 'permessage-deflate'; + +/** + * Per-message Compression Extensions implementation + */ + +function PerMessageDeflate(options, isServer) { + if (this instanceof PerMessageDeflate === false) { + throw new TypeError("Classes can't be function-called"); + } + + this._options = options || {}; + this._isServer = !!isServer; + this._inflate = null; + this._deflate = null; + this.params = null; +} + +/** + * Create extension parameters offer + * + * @api public + */ + +PerMessageDeflate.prototype.offer = function() { + var params = {}; + if (this._options.serverNoContextTakeover) { + params.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + params.client_no_context_takeover = true; + } + if (this._options.serverMaxWindowBits) { + params.server_max_window_bits = this._options.serverMaxWindowBits; + } + if (this._options.clientMaxWindowBits) { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits == null) { + params.client_max_window_bits = true; + } + return params; +}; + +/** + * Accept extension offer + * + * @api public + */ + +PerMessageDeflate.prototype.accept = function(paramsList) { + paramsList = this.normalizeParams(paramsList); + + var params; + if (this._isServer) { + params = this.acceptAsServer(paramsList); + } else { + params = this.acceptAsClient(paramsList); + } + + this.params = params; + return params; +}; + +/** + * Releases all resources used by the extension + * + * @api public + */ + +PerMessageDeflate.prototype.cleanup = function() { + if (this._inflate) { + if (this._inflate.writeInProgress) { + this._inflate.pendingClose = true; + } else { + if (this._inflate.close) this._inflate.close(); + this._inflate = null; + } + } + if (this._deflate) { + if (this._deflate.writeInProgress) { + this._deflate.pendingClose = true; + } else { + if (this._deflate.close) this._deflate.close(); + this._deflate = null; + } + } +}; + +/** + * Accept extension offer from client + * + * @api private + */ + +PerMessageDeflate.prototype.acceptAsServer = function(paramsList) { + var accepted = {}; + var result = paramsList.some(function(params) { + accepted = {}; + if (this._options.serverNoContextTakeover === false && params.server_no_context_takeover) { + return; + } + if (this._options.serverMaxWindowBits === false && params.server_max_window_bits) { + return; + } + if (typeof this._options.serverMaxWindowBits === 'number' && + typeof params.server_max_window_bits === 'number' && + this._options.serverMaxWindowBits > params.server_max_window_bits) { + return; + } + if (typeof this._options.clientMaxWindowBits === 'number' && !params.client_max_window_bits) { + return; + } + + if (this._options.serverNoContextTakeover || params.server_no_context_takeover) { + accepted.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + accepted.client_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover !== false && params.client_no_context_takeover) { + accepted.client_no_context_takeover = true; + } + if (typeof this._options.serverMaxWindowBits === 'number') { + accepted.server_max_window_bits = this._options.serverMaxWindowBits; + } else if (typeof params.server_max_window_bits === 'number') { + accepted.server_max_window_bits = params.server_max_window_bits; + } + if (typeof this._options.clientMaxWindowBits === 'number') { + accepted.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits !== false && typeof params.client_max_window_bits === 'number') { + accepted.client_max_window_bits = params.client_max_window_bits; + } + return true; + }, this); + + if (!result) { + throw new Error('Doesn\'t support the offered configuration'); + } + + return accepted; +}; + +/** + * Accept extension response from server + * + * @api privaye + */ + +PerMessageDeflate.prototype.acceptAsClient = function(paramsList) { + var params = paramsList[0]; + if (this._options.clientNoContextTakeover != null) { + if (this._options.clientNoContextTakeover === false && params.client_no_context_takeover) { + throw new Error('Invalid value for "client_no_context_takeover"'); + } + } + if (this._options.clientMaxWindowBits != null) { + if (this._options.clientMaxWindowBits === false && params.client_max_window_bits) { + throw new Error('Invalid value for "client_max_window_bits"'); + } + if (typeof this._options.clientMaxWindowBits === 'number' && + (!params.client_max_window_bits || params.client_max_window_bits > this._options.clientMaxWindowBits)) { + throw new Error('Invalid value for "client_max_window_bits"'); + } + } + return params; +}; + +/** + * Normalize extensions parameters + * + * @api private + */ + +PerMessageDeflate.prototype.normalizeParams = function(paramsList) { + return paramsList.map(function(params) { + Object.keys(params).forEach(function(key) { + var value = params[key]; + if (value.length > 1) { + throw new Error('Multiple extension parameters for ' + key); + } + + value = value[0]; + + switch (key) { + case 'server_no_context_takeover': + case 'client_no_context_takeover': + if (value !== true) { + throw new Error('invalid extension parameter value for ' + key + ' (' + value + ')'); + } + params[key] = true; + break; + case 'server_max_window_bits': + case 'client_max_window_bits': + if (typeof value === 'string') { + value = parseInt(value, 10); + if (!~AVAILABLE_WINDOW_BITS.indexOf(value)) { + throw new Error('invalid extension parameter value for ' + key + ' (' + value + ')'); + } + } + if (!this._isServer && value === true) { + throw new Error('Missing extension parameter value for ' + key); + } + params[key] = value; + break; + default: + throw new Error('Not defined extension parameter (' + key + ')'); + } + }, this); + return params; + }, this); +}; + +/** + * Decompress message + * + * @api public + */ + +PerMessageDeflate.prototype.decompress = function (data, fin, callback) { + var endpoint = this._isServer ? 'client' : 'server'; + + if (!this._inflate) { + var maxWindowBits = this.params[endpoint + '_max_window_bits']; + this._inflate = zlib.createInflateRaw({ + windowBits: 'number' === typeof maxWindowBits ? maxWindowBits : DEFAULT_WINDOW_BITS + }); + } + this._inflate.writeInProgress = true; + + var self = this; + var buffers = []; + + this._inflate.on('error', onError).on('data', onData); + this._inflate.write(data); + if (fin) { + this._inflate.write(new Buffer([0x00, 0x00, 0xff, 0xff])); + } + this._inflate.flush(function() { + cleanup(); + callback(null, Buffer.concat(buffers)); + }); + + function onError(err) { + cleanup(); + callback(err); + } + + function onData(data) { + buffers.push(data); + } + + function cleanup() { + if (!self._inflate) return; + self._inflate.removeListener('error', onError); + self._inflate.removeListener('data', onData); + self._inflate.writeInProgress = false; + if ((fin && self.params[endpoint + '_no_context_takeover']) || self._inflate.pendingClose) { + if (self._inflate.close) self._inflate.close(); + self._inflate = null; + } + } +}; + +/** + * Compress message + * + * @api public + */ + +PerMessageDeflate.prototype.compress = function (data, fin, callback) { + var endpoint = this._isServer ? 'server' : 'client'; + + if (!this._deflate) { + var maxWindowBits = this.params[endpoint + '_max_window_bits']; + this._deflate = zlib.createDeflateRaw({ + flush: zlib.Z_SYNC_FLUSH, + windowBits: 'number' === typeof maxWindowBits ? maxWindowBits : DEFAULT_WINDOW_BITS, + memLevel: this._options.memLevel || DEFAULT_MEM_LEVEL + }); + } + this._deflate.writeInProgress = true; + + var self = this; + var buffers = []; + + this._deflate.on('error', onError).on('data', onData); + this._deflate.write(data); + this._deflate.flush(function() { + cleanup(); + var data = Buffer.concat(buffers); + if (fin) { + data = data.slice(0, data.length - 4); + } + callback(null, data); + }); + + function onError(err) { + cleanup(); + callback(err); + } + + function onData(data) { + buffers.push(data); + } + + function cleanup() { + if (!self._deflate) return; + self._deflate.removeListener('error', onError); + self._deflate.removeListener('data', onData); + self._deflate.writeInProgress = false; + if ((fin && self.params[endpoint + '_no_context_takeover']) || self._deflate.pendingClose) { + if (self._deflate.close) self._deflate.close(); + self._deflate = null; + } + } +}; + +module.exports = PerMessageDeflate; diff --git a/www/node_modules/ws/lib/Receiver.hixie.js b/www/node_modules/ws/lib/Receiver.hixie.js new file mode 100644 index 0000000..66bc561 --- /dev/null +++ b/www/node_modules/ws/lib/Receiver.hixie.js @@ -0,0 +1,184 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util'); + +/** + * State constants + */ + +var EMPTY = 0 + , BODY = 1; +var BINARYLENGTH = 2 + , BINARYBODY = 3; + +/** + * Hixie Receiver implementation + */ + +function Receiver () { + if (this instanceof Receiver === false) { + throw new TypeError("Classes can't be function-called"); + } + + this.state = EMPTY; + this.buffers = []; + this.messageEnd = -1; + this.spanLength = 0; + this.dead = false; + + this.onerror = function() {}; + this.ontext = function() {}; + this.onbinary = function() {}; + this.onclose = function() {}; + this.onping = function() {}; + this.onpong = function() {}; +} + +module.exports = Receiver; + +/** + * Add new data to the parser. + * + * @api public + */ + +Receiver.prototype.add = function(data) { + var self = this; + function doAdd() { + if (self.state === EMPTY) { + if (data.length == 2 && data[0] == 0xFF && data[1] == 0x00) { + self.reset(); + self.onclose(); + return; + } + if (data[0] === 0x80) { + self.messageEnd = 0; + self.state = BINARYLENGTH; + data = data.slice(1); + } else { + + if (data[0] !== 0x00) { + self.error('payload must start with 0x00 byte', true); + return; + } + data = data.slice(1); + self.state = BODY; + + } + } + if (self.state === BINARYLENGTH) { + var i = 0; + while ((i < data.length) && (data[i] & 0x80)) { + self.messageEnd = 128 * self.messageEnd + (data[i] & 0x7f); + ++i; + } + if (i < data.length) { + self.messageEnd = 128 * self.messageEnd + (data[i] & 0x7f); + self.state = BINARYBODY; + ++i; + } + if (i > 0) + data = data.slice(i); + } + if (self.state === BINARYBODY) { + var dataleft = self.messageEnd - self.spanLength; + if (data.length >= dataleft) { + // consume the whole buffer to finish the frame + self.buffers.push(data); + self.spanLength += dataleft; + self.messageEnd = dataleft; + return self.parse(); + } + // frame's not done even if we consume it all + self.buffers.push(data); + self.spanLength += data.length; + return; + } + self.buffers.push(data); + if ((self.messageEnd = bufferIndex(data, 0xFF)) != -1) { + self.spanLength += self.messageEnd; + return self.parse(); + } + else self.spanLength += data.length; + } + while(data) data = doAdd(); +}; + +/** + * Releases all resources used by the receiver. + * + * @api public + */ + +Receiver.prototype.cleanup = function() { + this.dead = true; + this.state = EMPTY; + this.buffers = []; +}; + +/** + * Process buffered data. + * + * @api public + */ + +Receiver.prototype.parse = function() { + var output = new Buffer(this.spanLength); + var outputIndex = 0; + for (var bi = 0, bl = this.buffers.length; bi < bl - 1; ++bi) { + var buffer = this.buffers[bi]; + buffer.copy(output, outputIndex); + outputIndex += buffer.length; + } + var lastBuffer = this.buffers[this.buffers.length - 1]; + if (this.messageEnd > 0) lastBuffer.copy(output, outputIndex, 0, this.messageEnd); + if (this.state !== BODY) --this.messageEnd; + var tail = null; + if (this.messageEnd < lastBuffer.length - 1) { + tail = lastBuffer.slice(this.messageEnd + 1); + } + this.reset(); + this.ontext(output.toString('utf8')); + return tail; +}; + +/** + * Handles an error + * + * @api private + */ + +Receiver.prototype.error = function (reason, terminate) { + this.reset(); + this.onerror(reason, terminate); + return this; +}; + +/** + * Reset parser state + * + * @api private + */ + +Receiver.prototype.reset = function (reason) { + if (this.dead) return; + this.state = EMPTY; + this.buffers = []; + this.messageEnd = -1; + this.spanLength = 0; +}; + +/** + * Internal api + */ + +function bufferIndex(buffer, byte) { + for (var i = 0, l = buffer.length; i < l; ++i) { + if (buffer[i] === byte) return i; + } + return -1; +} diff --git a/www/node_modules/ws/lib/Receiver.js b/www/node_modules/ws/lib/Receiver.js new file mode 100644 index 0000000..b3183bf --- /dev/null +++ b/www/node_modules/ws/lib/Receiver.js @@ -0,0 +1,702 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util') + , Validation = require('./Validation').Validation + , ErrorCodes = require('./ErrorCodes') + , BufferPool = require('./BufferPool') + , bufferUtil = require('./BufferUtil').BufferUtil + , PerMessageDeflate = require('./PerMessageDeflate'); + +/** + * HyBi Receiver implementation + */ + +function Receiver (extensions) { + if (this instanceof Receiver === false) { + throw new TypeError("Classes can't be function-called"); + } + + // memory pool for fragmented messages + var fragmentedPoolPrevUsed = -1; + this.fragmentedBufferPool = new BufferPool(1024, function(db, length) { + return db.used + length; + }, function(db) { + return fragmentedPoolPrevUsed = fragmentedPoolPrevUsed >= 0 ? + Math.ceil((fragmentedPoolPrevUsed + db.used) / 2) : + db.used; + }); + + // memory pool for unfragmented messages + var unfragmentedPoolPrevUsed = -1; + this.unfragmentedBufferPool = new BufferPool(1024, function(db, length) { + return db.used + length; + }, function(db) { + return unfragmentedPoolPrevUsed = unfragmentedPoolPrevUsed >= 0 ? + Math.ceil((unfragmentedPoolPrevUsed + db.used) / 2) : + db.used; + }); + + this.extensions = extensions || {}; + this.state = { + activeFragmentedOperation: null, + lastFragment: false, + masked: false, + opcode: 0, + fragmentedOperation: false + }; + this.overflow = []; + this.headerBuffer = new Buffer(10); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + this.currentMessage = []; + this.messageHandlers = []; + this.expectHeader(2, this.processPacket); + this.dead = false; + this.processing = false; + + this.onerror = function() {}; + this.ontext = function() {}; + this.onbinary = function() {}; + this.onclose = function() {}; + this.onping = function() {}; + this.onpong = function() {}; +} + +module.exports = Receiver; + +/** + * Add new data to the parser. + * + * @api public + */ + +Receiver.prototype.add = function(data) { + var dataLength = data.length; + if (dataLength == 0) return; + if (this.expectBuffer == null) { + this.overflow.push(data); + return; + } + var toRead = Math.min(dataLength, this.expectBuffer.length - this.expectOffset); + fastCopy(toRead, data, this.expectBuffer, this.expectOffset); + this.expectOffset += toRead; + if (toRead < dataLength) { + this.overflow.push(data.slice(toRead)); + } + while (this.expectBuffer && this.expectOffset == this.expectBuffer.length) { + var bufferForHandler = this.expectBuffer; + this.expectBuffer = null; + this.expectOffset = 0; + this.expectHandler.call(this, bufferForHandler); + } +}; + +/** + * Releases all resources used by the receiver. + * + * @api public + */ + +Receiver.prototype.cleanup = function() { + this.dead = true; + this.overflow = null; + this.headerBuffer = null; + this.expectBuffer = null; + this.expectHandler = null; + this.unfragmentedBufferPool = null; + this.fragmentedBufferPool = null; + this.state = null; + this.currentMessage = null; + this.onerror = null; + this.ontext = null; + this.onbinary = null; + this.onclose = null; + this.onping = null; + this.onpong = null; +}; + +/** + * Waits for a certain amount of header bytes to be available, then fires a callback. + * + * @api private + */ + +Receiver.prototype.expectHeader = function(length, handler) { + if (length == 0) { + handler(null); + return; + } + this.expectBuffer = this.headerBuffer.slice(this.expectOffset, this.expectOffset + length); + this.expectHandler = handler; + var toRead = length; + while (toRead > 0 && this.overflow.length > 0) { + var fromOverflow = this.overflow.pop(); + if (toRead < fromOverflow.length) this.overflow.push(fromOverflow.slice(toRead)); + var read = Math.min(fromOverflow.length, toRead); + fastCopy(read, fromOverflow, this.expectBuffer, this.expectOffset); + this.expectOffset += read; + toRead -= read; + } +}; + +/** + * Waits for a certain amount of data bytes to be available, then fires a callback. + * + * @api private + */ + +Receiver.prototype.expectData = function(length, handler) { + if (length == 0) { + handler(null); + return; + } + this.expectBuffer = this.allocateFromPool(length, this.state.fragmentedOperation); + this.expectHandler = handler; + var toRead = length; + while (toRead > 0 && this.overflow.length > 0) { + var fromOverflow = this.overflow.pop(); + if (toRead < fromOverflow.length) this.overflow.push(fromOverflow.slice(toRead)); + var read = Math.min(fromOverflow.length, toRead); + fastCopy(read, fromOverflow, this.expectBuffer, this.expectOffset); + this.expectOffset += read; + toRead -= read; + } +}; + +/** + * Allocates memory from the buffer pool. + * + * @api private + */ + +Receiver.prototype.allocateFromPool = function(length, isFragmented) { + return (isFragmented ? this.fragmentedBufferPool : this.unfragmentedBufferPool).get(length); +}; + +/** + * Start processing a new packet. + * + * @api private + */ + +Receiver.prototype.processPacket = function (data) { + if (this.extensions[PerMessageDeflate.extensionName]) { + if ((data[0] & 0x30) != 0) { + this.error('reserved fields (2, 3) must be empty', 1002); + return; + } + } else { + if ((data[0] & 0x70) != 0) { + this.error('reserved fields must be empty', 1002); + return; + } + } + this.state.lastFragment = (data[0] & 0x80) == 0x80; + this.state.masked = (data[1] & 0x80) == 0x80; + var compressed = (data[0] & 0x40) == 0x40; + var opcode = data[0] & 0xf; + if (opcode === 0) { + if (compressed) { + this.error('continuation frame cannot have the Per-message Compressed bits', 1002); + return; + } + // continuation frame + this.state.fragmentedOperation = true; + this.state.opcode = this.state.activeFragmentedOperation; + if (!(this.state.opcode == 1 || this.state.opcode == 2)) { + this.error('continuation frame cannot follow current opcode', 1002); + return; + } + } + else { + if (opcode < 3 && this.state.activeFragmentedOperation != null) { + this.error('data frames after the initial data frame must have opcode 0', 1002); + return; + } + if (opcode >= 8 && compressed) { + this.error('control frames cannot have the Per-message Compressed bits', 1002); + return; + } + this.state.compressed = compressed; + this.state.opcode = opcode; + if (this.state.lastFragment === false) { + this.state.fragmentedOperation = true; + this.state.activeFragmentedOperation = opcode; + } + else this.state.fragmentedOperation = false; + } + var handler = opcodes[this.state.opcode]; + if (typeof handler == 'undefined') this.error('no handler for opcode ' + this.state.opcode, 1002); + else { + handler.start.call(this, data); + } +}; + +/** + * Endprocessing a packet. + * + * @api private + */ + +Receiver.prototype.endPacket = function() { + if (!this.state.fragmentedOperation) this.unfragmentedBufferPool.reset(true); + else if (this.state.lastFragment) this.fragmentedBufferPool.reset(true); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + if (this.state.lastFragment && this.state.opcode === this.state.activeFragmentedOperation) { + // end current fragmented operation + this.state.activeFragmentedOperation = null; + } + this.state.lastFragment = false; + this.state.opcode = this.state.activeFragmentedOperation != null ? this.state.activeFragmentedOperation : 0; + this.state.masked = false; + this.expectHeader(2, this.processPacket); +}; + +/** + * Reset the parser state. + * + * @api private + */ + +Receiver.prototype.reset = function() { + if (this.dead) return; + this.state = { + activeFragmentedOperation: null, + lastFragment: false, + masked: false, + opcode: 0, + fragmentedOperation: false + }; + this.fragmentedBufferPool.reset(true); + this.unfragmentedBufferPool.reset(true); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + this.overflow = []; + this.currentMessage = []; + this.messageHandlers = []; +}; + +/** + * Unmask received data. + * + * @api private + */ + +Receiver.prototype.unmask = function (mask, buf, binary) { + if (mask != null && buf != null) bufferUtil.unmask(buf, mask); + if (binary) return buf; + return buf != null ? buf.toString('utf8') : ''; +}; + +/** + * Concatenates a list of buffers. + * + * @api private + */ + +Receiver.prototype.concatBuffers = function(buffers) { + var length = 0; + for (var i = 0, l = buffers.length; i < l; ++i) length += buffers[i].length; + var mergedBuffer = new Buffer(length); + bufferUtil.merge(mergedBuffer, buffers); + return mergedBuffer; +}; + +/** + * Handles an error + * + * @api private + */ + +Receiver.prototype.error = function (reason, protocolErrorCode) { + this.reset(); + this.onerror(reason, protocolErrorCode); + return this; +}; + +/** + * Execute message handler buffers + * + * @api private + */ + +Receiver.prototype.flush = function() { + if (this.processing || this.dead) return; + + var handler = this.messageHandlers.shift(); + if (!handler) return; + + this.processing = true; + var self = this; + + handler(function() { + self.processing = false; + self.flush(); + }); +}; + +/** + * Apply extensions to message + * + * @api private + */ + +Receiver.prototype.applyExtensions = function(messageBuffer, fin, compressed, callback) { + var self = this; + if (compressed) { + this.extensions[PerMessageDeflate.extensionName].decompress(messageBuffer, fin, function(err, buffer) { + if (self.dead) return; + if (err) { + callback(new Error('invalid compressed data')); + return; + } + callback(null, buffer); + }); + } else { + callback(null, messageBuffer); + } +}; + +/** + * Buffer utilities + */ + +function readUInt16BE(start) { + return (this[start]<<8) + + this[start+1]; +} + +function readUInt32BE(start) { + return (this[start]<<24) + + (this[start+1]<<16) + + (this[start+2]<<8) + + this[start+3]; +} + +function fastCopy(length, srcBuffer, dstBuffer, dstOffset) { + switch (length) { + default: srcBuffer.copy(dstBuffer, dstOffset, 0, length); break; + case 16: dstBuffer[dstOffset+15] = srcBuffer[15]; + case 15: dstBuffer[dstOffset+14] = srcBuffer[14]; + case 14: dstBuffer[dstOffset+13] = srcBuffer[13]; + case 13: dstBuffer[dstOffset+12] = srcBuffer[12]; + case 12: dstBuffer[dstOffset+11] = srcBuffer[11]; + case 11: dstBuffer[dstOffset+10] = srcBuffer[10]; + case 10: dstBuffer[dstOffset+9] = srcBuffer[9]; + case 9: dstBuffer[dstOffset+8] = srcBuffer[8]; + case 8: dstBuffer[dstOffset+7] = srcBuffer[7]; + case 7: dstBuffer[dstOffset+6] = srcBuffer[6]; + case 6: dstBuffer[dstOffset+5] = srcBuffer[5]; + case 5: dstBuffer[dstOffset+4] = srcBuffer[4]; + case 4: dstBuffer[dstOffset+3] = srcBuffer[3]; + case 3: dstBuffer[dstOffset+2] = srcBuffer[2]; + case 2: dstBuffer[dstOffset+1] = srcBuffer[1]; + case 1: dstBuffer[dstOffset] = srcBuffer[0]; + } +} + +function clone(obj) { + var cloned = {}; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + cloned[k] = obj[k]; + } + } + return cloned; +} + +/** + * Opcode handlers + */ + +var opcodes = { + // text + '1': { + start: function(data) { + var self = this; + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['1'].getData.call(self, firstLength); + } + else if (firstLength == 126) { + self.expectHeader(2, function(data) { + opcodes['1'].getData.call(self, readUInt16BE.call(data, 0)); + }); + } + else if (firstLength == 127) { + self.expectHeader(8, function(data) { + if (readUInt32BE.call(data, 0) != 0) { + self.error('packets with length spanning more than 32 bit is currently not supported', 1008); + return; + } + opcodes['1'].getData.call(self, readUInt32BE.call(data, 4)); + }); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['1'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['1'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + var packet = this.unmask(mask, data, true) || new Buffer(0); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.applyExtensions(packet, state.lastFragment, state.compressed, function(err, buffer) { + if (err) return self.error(err.message, 1007); + if (buffer != null) self.currentMessage.push(buffer); + + if (state.lastFragment) { + var messageBuffer = self.concatBuffers(self.currentMessage); + self.currentMessage = []; + if (!Validation.isValidUTF8(messageBuffer)) { + self.error('invalid utf8 sequence', 1007); + return; + } + self.ontext(messageBuffer.toString('utf8'), {masked: state.masked, buffer: messageBuffer}); + } + callback(); + }); + }); + this.flush(); + this.endPacket(); + } + }, + // binary + '2': { + start: function(data) { + var self = this; + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['2'].getData.call(self, firstLength); + } + else if (firstLength == 126) { + self.expectHeader(2, function(data) { + opcodes['2'].getData.call(self, readUInt16BE.call(data, 0)); + }); + } + else if (firstLength == 127) { + self.expectHeader(8, function(data) { + if (readUInt32BE.call(data, 0) != 0) { + self.error('packets with length spanning more than 32 bit is currently not supported', 1008); + return; + } + opcodes['2'].getData.call(self, readUInt32BE.call(data, 4, true)); + }); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['2'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['2'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + var packet = this.unmask(mask, data, true) || new Buffer(0); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.applyExtensions(packet, state.lastFragment, state.compressed, function(err, buffer) { + if (err) return self.error(err.message, 1007); + if (buffer != null) self.currentMessage.push(buffer); + if (state.lastFragment) { + var messageBuffer = self.concatBuffers(self.currentMessage); + self.currentMessage = []; + self.onbinary(messageBuffer, {masked: state.masked, buffer: messageBuffer}); + } + callback(); + }); + }); + this.flush(); + this.endPacket(); + } + }, + // close + '8': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented close is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['8'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['8'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['8'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = self.unmask(mask, data, true); + + var state = clone(this.state); + this.messageHandlers.push(function() { + if (data && data.length == 1) { + self.error('close packets with data must be at least two bytes long', 1002); + return; + } + var code = data && data.length > 1 ? readUInt16BE.call(data, 0) : 1000; + if (!ErrorCodes.isValidErrorCode(code)) { + self.error('invalid error code', 1002); + return; + } + var message = ''; + if (data && data.length > 2) { + var messageBuffer = data.slice(2); + if (!Validation.isValidUTF8(messageBuffer)) { + self.error('invalid utf8 sequence', 1007); + return; + } + message = messageBuffer.toString('utf8'); + } + self.onclose(code, message, {masked: state.masked}); + self.reset(); + }); + this.flush(); + }, + }, + // ping + '9': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented ping is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['9'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['9'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['9'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = this.unmask(mask, data, true); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.onping(data, {masked: state.masked, binary: true}); + callback(); + }); + this.flush(); + this.endPacket(); + } + }, + // pong + '10': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented pong is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['10'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (this.state.masked) { + this.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['10'].finish.call(self, mask, data); + }); + }); + } + else { + this.expectData(length, function(data) { + opcodes['10'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = self.unmask(mask, data, true); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.onpong(data, {masked: state.masked, binary: true}); + callback(); + }); + this.flush(); + this.endPacket(); + } + } +} diff --git a/www/node_modules/ws/lib/Sender.hixie.js b/www/node_modules/ws/lib/Sender.hixie.js new file mode 100644 index 0000000..b87d9dd --- /dev/null +++ b/www/node_modules/ws/lib/Sender.hixie.js @@ -0,0 +1,124 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var events = require('events') + , util = require('util') + , EventEmitter = events.EventEmitter; + +/** + * Hixie Sender implementation + */ + +function Sender(socket) { + if (this instanceof Sender === false) { + throw new TypeError("Classes can't be function-called"); + } + + events.EventEmitter.call(this); + + this.socket = socket; + this.continuationFrame = false; + this.isClosed = false; +} + +module.exports = Sender; + +/** + * Inherits from EventEmitter. + */ + +util.inherits(Sender, events.EventEmitter); + +/** + * Frames and writes data. + * + * @api public + */ + +Sender.prototype.send = function(data, options, cb) { + if (this.isClosed) return; + + var isString = typeof data == 'string' + , length = isString ? Buffer.byteLength(data) : data.length + , lengthbytes = (length > 127) ? 2 : 1 // assume less than 2**14 bytes + , writeStartMarker = this.continuationFrame == false + , writeEndMarker = !options || !(typeof options.fin != 'undefined' && !options.fin) + , buffer = new Buffer((writeStartMarker ? ((options && options.binary) ? (1 + lengthbytes) : 1) : 0) + length + ((writeEndMarker && !(options && options.binary)) ? 1 : 0)) + , offset = writeStartMarker ? 1 : 0; + + if (writeStartMarker) { + if (options && options.binary) { + buffer.write('\x80', 'binary'); + // assume length less than 2**14 bytes + if (lengthbytes > 1) + buffer.write(String.fromCharCode(128+length/128), offset++, 'binary'); + buffer.write(String.fromCharCode(length&0x7f), offset++, 'binary'); + } else + buffer.write('\x00', 'binary'); + } + + if (isString) buffer.write(data, offset, 'utf8'); + else data.copy(buffer, offset, 0); + + if (writeEndMarker) { + if (options && options.binary) { + // sending binary, not writing end marker + } else + buffer.write('\xff', offset + length, 'binary'); + this.continuationFrame = false; + } + else this.continuationFrame = true; + + try { + this.socket.write(buffer, 'binary', cb); + } catch (e) { + this.error(e.toString()); + } +}; + +/** + * Sends a close instruction to the remote party. + * + * @api public + */ + +Sender.prototype.close = function(code, data, mask, cb) { + if (this.isClosed) return; + this.isClosed = true; + try { + if (this.continuationFrame) this.socket.write(new Buffer([0xff], 'binary')); + this.socket.write(new Buffer([0xff, 0x00]), 'binary', cb); + } catch (e) { + this.error(e.toString()); + } +}; + +/** + * Sends a ping message to the remote party. Not available for hixie. + * + * @api public + */ + +Sender.prototype.ping = function(data, options) {}; + +/** + * Sends a pong message to the remote party. Not available for hixie. + * + * @api public + */ + +Sender.prototype.pong = function(data, options) {}; + +/** + * Handles an error + * + * @api private + */ + +Sender.prototype.error = function (reason) { + this.emit('error', reason); + return this; +}; diff --git a/www/node_modules/ws/lib/Sender.js b/www/node_modules/ws/lib/Sender.js new file mode 100644 index 0000000..d34061e --- /dev/null +++ b/www/node_modules/ws/lib/Sender.js @@ -0,0 +1,324 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var events = require('events') + , util = require('util') + , EventEmitter = events.EventEmitter + , ErrorCodes = require('./ErrorCodes') + , bufferUtil = require('./BufferUtil').BufferUtil + , PerMessageDeflate = require('./PerMessageDeflate'); + +/** + * HyBi Sender implementation + */ + +function Sender(socket, extensions) { + if (this instanceof Sender === false) { + throw new TypeError("Classes can't be function-called"); + } + + events.EventEmitter.call(this); + + this._socket = socket; + this.extensions = extensions || {}; + this.firstFragment = true; + this.compress = false; + this.messageHandlers = []; + this.processing = false; +} + +/** + * Inherits from EventEmitter. + */ + +util.inherits(Sender, events.EventEmitter); + +/** + * Sends a close instruction to the remote party. + * + * @api public + */ + +Sender.prototype.close = function(code, data, mask, cb) { + if (typeof code !== 'undefined') { + if (typeof code !== 'number' || + !ErrorCodes.isValidErrorCode(code)) throw new Error('first argument must be a valid error code number'); + } + code = code || 1000; + var dataBuffer = new Buffer(2 + (data ? Buffer.byteLength(data) : 0)); + writeUInt16BE.call(dataBuffer, code, 0); + if (dataBuffer.length > 2) dataBuffer.write(data, 2); + + var self = this; + this.messageHandlers.push(function(callback) { + self.frameAndSend(0x8, dataBuffer, true, mask); + callback(); + if (typeof cb == 'function') cb(); + }); + this.flush(); +}; + +/** + * Sends a ping message to the remote party. + * + * @api public + */ + +Sender.prototype.ping = function(data, options) { + var mask = options && options.mask; + var self = this; + this.messageHandlers.push(function(callback) { + self.frameAndSend(0x9, data || '', true, mask); + callback(); + }); + this.flush(); +}; + +/** + * Sends a pong message to the remote party. + * + * @api public + */ + +Sender.prototype.pong = function(data, options) { + var mask = options && options.mask; + var self = this; + this.messageHandlers.push(function(callback) { + self.frameAndSend(0xa, data || '', true, mask); + callback(); + }); + this.flush(); +}; + +/** + * Sends text or binary data to the remote party. + * + * @api public + */ + +Sender.prototype.send = function(data, options, cb) { + var finalFragment = options && options.fin === false ? false : true; + var mask = options && options.mask; + var compress = options && options.compress; + var opcode = options && options.binary ? 2 : 1; + if (this.firstFragment === false) { + opcode = 0; + compress = false; + } else { + this.firstFragment = false; + this.compress = compress; + } + if (finalFragment) this.firstFragment = true + + var compressFragment = this.compress; + + var self = this; + this.messageHandlers.push(function(callback) { + self.applyExtensions(data, finalFragment, compressFragment, function(err, data) { + if (err) { + if (typeof cb == 'function') cb(err); + else self.emit('error', err); + return; + } + self.frameAndSend(opcode, data, finalFragment, mask, compress, cb); + callback(); + }); + }); + this.flush(); +}; + +/** + * Frames and sends a piece of data according to the HyBi WebSocket protocol. + * + * @api private + */ + +Sender.prototype.frameAndSend = function(opcode, data, finalFragment, maskData, compressed, cb) { + var canModifyData = false; + + if (!data) { + try { + this._socket.write(new Buffer([opcode | (finalFragment ? 0x80 : 0), 0 | (maskData ? 0x80 : 0)].concat(maskData ? [0, 0, 0, 0] : [])), 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + return; + } + + if (!Buffer.isBuffer(data)) { + canModifyData = true; + if (data && (typeof data.byteLength !== 'undefined' || typeof data.buffer !== 'undefined')) { + data = getArrayBuffer(data); + } else { + // + // If people want to send a number, this would allocate the number in + // bytes as memory size instead of storing the number as buffer value. So + // we need to transform it to string in order to prevent possible + // vulnerabilities / memory attacks. + // + if (typeof data === 'number') data = data.toString(); + + data = new Buffer(data); + } + } + + var dataLength = data.length + , dataOffset = maskData ? 6 : 2 + , secondByte = dataLength; + + if (dataLength >= 65536) { + dataOffset += 8; + secondByte = 127; + } + else if (dataLength > 125) { + dataOffset += 2; + secondByte = 126; + } + + var mergeBuffers = dataLength < 32768 || (maskData && !canModifyData); + var totalLength = mergeBuffers ? dataLength + dataOffset : dataOffset; + var outputBuffer = new Buffer(totalLength); + outputBuffer[0] = finalFragment ? opcode | 0x80 : opcode; + if (compressed) outputBuffer[0] |= 0x40; + + switch (secondByte) { + case 126: + writeUInt16BE.call(outputBuffer, dataLength, 2); + break; + case 127: + writeUInt32BE.call(outputBuffer, 0, 2); + writeUInt32BE.call(outputBuffer, dataLength, 6); + } + + if (maskData) { + outputBuffer[1] = secondByte | 0x80; + var mask = this._randomMask || (this._randomMask = getRandomMask()); + outputBuffer[dataOffset - 4] = mask[0]; + outputBuffer[dataOffset - 3] = mask[1]; + outputBuffer[dataOffset - 2] = mask[2]; + outputBuffer[dataOffset - 1] = mask[3]; + if (mergeBuffers) { + bufferUtil.mask(data, mask, outputBuffer, dataOffset, dataLength); + try { + this._socket.write(outputBuffer, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + else { + bufferUtil.mask(data, mask, data, 0, dataLength); + try { + this._socket.write(outputBuffer, 'binary'); + this._socket.write(data, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + } + else { + outputBuffer[1] = secondByte; + if (mergeBuffers) { + data.copy(outputBuffer, dataOffset); + try { + this._socket.write(outputBuffer, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + else { + try { + this._socket.write(outputBuffer, 'binary'); + this._socket.write(data, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + } +}; + +/** + * Execute message handler buffers + * + * @api private + */ + +Sender.prototype.flush = function() { + if (this.processing) return; + + var handler = this.messageHandlers.shift(); + if (!handler) return; + + this.processing = true; + + var self = this; + + handler(function() { + self.processing = false; + self.flush(); + }); +}; + +/** + * Apply extensions to message + * + * @api private + */ + +Sender.prototype.applyExtensions = function(data, fin, compress, callback) { + if (compress && data) { + if ((data.buffer || data) instanceof ArrayBuffer) { + data = getArrayBuffer(data); + } + this.extensions[PerMessageDeflate.extensionName].compress(data, fin, callback); + } else { + callback(null, data); + } +}; + +module.exports = Sender; + +function writeUInt16BE(value, offset) { + this[offset] = (value & 0xff00)>>8; + this[offset+1] = value & 0xff; +} + +function writeUInt32BE(value, offset) { + this[offset] = (value & 0xff000000)>>24; + this[offset+1] = (value & 0xff0000)>>16; + this[offset+2] = (value & 0xff00)>>8; + this[offset+3] = value & 0xff; +} + +function getArrayBuffer(data) { + // data is either an ArrayBuffer or ArrayBufferView. + var array = new Uint8Array(data.buffer || data) + , l = data.byteLength || data.length + , o = data.byteOffset || 0 + , buffer = new Buffer(l); + for (var i = 0; i < l; ++i) { + buffer[i] = array[o+i]; + } + return buffer; +} + +function getRandomMask() { + return new Buffer([ + ~~(Math.random() * 255), + ~~(Math.random() * 255), + ~~(Math.random() * 255), + ~~(Math.random() * 255) + ]); +} diff --git a/www/node_modules/ws/lib/Validation.fallback.js b/www/node_modules/ws/lib/Validation.fallback.js new file mode 100644 index 0000000..2c7c4fd --- /dev/null +++ b/www/node_modules/ws/lib/Validation.fallback.js @@ -0,0 +1,12 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +module.exports.Validation = { + isValidUTF8: function(buffer) { + return true; + } +}; + diff --git a/www/node_modules/ws/lib/Validation.js b/www/node_modules/ws/lib/Validation.js new file mode 100644 index 0000000..0795fb7 --- /dev/null +++ b/www/node_modules/ws/lib/Validation.js @@ -0,0 +1,13 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +try { + module.exports = require('utf-8-validate'); +} catch (e) { + module.exports = require('./Validation.fallback'); +} diff --git a/www/node_modules/ws/lib/WebSocket.js b/www/node_modules/ws/lib/WebSocket.js new file mode 100644 index 0000000..4e06c80 --- /dev/null +++ b/www/node_modules/ws/lib/WebSocket.js @@ -0,0 +1,965 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var url = require('url') + , util = require('util') + , http = require('http') + , https = require('https') + , crypto = require('crypto') + , stream = require('stream') + , Ultron = require('ultron') + , Options = require('options') + , Sender = require('./Sender') + , Receiver = require('./Receiver') + , SenderHixie = require('./Sender.hixie') + , ReceiverHixie = require('./Receiver.hixie') + , Extensions = require('./Extensions') + , PerMessageDeflate = require('./PerMessageDeflate') + , EventEmitter = require('events').EventEmitter; + +/** + * Constants + */ + +// Default protocol version + +var protocolVersion = 13; + +// Close timeout + +var closeTimeout = 30 * 1000; // Allow 30 seconds to terminate the connection cleanly + +/** + * WebSocket implementation + * + * @constructor + * @param {String} address Connection address. + * @param {String|Array} protocols WebSocket protocols. + * @param {Object} options Additional connection options. + * @api public + */ +function WebSocket(address, protocols, options) { + if (this instanceof WebSocket === false) { + return new WebSocket(address, protocols, options); + } + + EventEmitter.call(this); + + if (protocols && !Array.isArray(protocols) && 'object' === typeof protocols) { + // accept the "options" Object as the 2nd argument + options = protocols; + protocols = null; + } + + if ('string' === typeof protocols) { + protocols = [ protocols ]; + } + + if (!Array.isArray(protocols)) { + protocols = []; + } + + this._socket = null; + this._ultron = null; + this._closeReceived = false; + this.bytesReceived = 0; + this.readyState = null; + this.supports = {}; + this.extensions = {}; + + if (Array.isArray(address)) { + initAsServerClient.apply(this, address.concat(options)); + } else { + initAsClient.apply(this, [address, protocols, options]); + } +} + +/** + * Inherits from EventEmitter. + */ +util.inherits(WebSocket, EventEmitter); + +/** + * Ready States + */ +["CONNECTING", "OPEN", "CLOSING", "CLOSED"].forEach(function each(state, index) { + WebSocket.prototype[state] = WebSocket[state] = index; +}); + +/** + * Gracefully closes the connection, after sending a description message to the server + * + * @param {Object} data to be sent to the server + * @api public + */ +WebSocket.prototype.close = function close(code, data) { + if (this.readyState === WebSocket.CLOSED) return; + + if (this.readyState === WebSocket.CONNECTING) { + this.readyState = WebSocket.CLOSED; + return; + } + + if (this.readyState === WebSocket.CLOSING) { + if (this._closeReceived && this._isServer) { + this.terminate(); + } + return; + } + + var self = this; + try { + this.readyState = WebSocket.CLOSING; + this._closeCode = code; + this._closeMessage = data; + var mask = !this._isServer; + this._sender.close(code, data, mask, function(err) { + if (err) self.emit('error', err); + + if (self._closeReceived && self._isServer) { + self.terminate(); + } else { + // ensure that the connection is cleaned up even when no response of closing handshake. + clearTimeout(self._closeTimer); + self._closeTimer = setTimeout(cleanupWebsocketResources.bind(self, true), closeTimeout); + } + }); + } catch (e) { + this.emit('error', e); + } +}; + +/** + * Pause the client stream + * + * @api public + */ +WebSocket.prototype.pause = function pauser() { + if (this.readyState !== WebSocket.OPEN) throw new Error('not opened'); + + return this._socket.pause(); +}; + +/** + * Sends a ping + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean + * @param {boolean} dontFailWhenClosed indicates whether or not to throw if the connection isnt open + * @api public + */ +WebSocket.prototype.ping = function ping(data, options, dontFailWhenClosed) { + if (this.readyState !== WebSocket.OPEN) { + if (dontFailWhenClosed === true) return; + throw new Error('not opened'); + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + + this._sender.ping(data, options); +}; + +/** + * Sends a pong + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean + * @param {boolean} dontFailWhenClosed indicates whether or not to throw if the connection isnt open + * @api public + */ +WebSocket.prototype.pong = function(data, options, dontFailWhenClosed) { + if (this.readyState !== WebSocket.OPEN) { + if (dontFailWhenClosed === true) return; + throw new Error('not opened'); + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + + this._sender.pong(data, options); +}; + +/** + * Resume the client stream + * + * @api public + */ +WebSocket.prototype.resume = function resume() { + if (this.readyState !== WebSocket.OPEN) throw new Error('not opened'); + + return this._socket.resume(); +}; + +/** + * Sends a piece of data + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean, compress: boolean + * @param {function} Optional callback which is executed after the send completes + * @api public + */ + +WebSocket.prototype.send = function send(data, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + if (this.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else throw new Error('not opened'); + return; + } + + if (!data) data = ''; + if (this._queue) { + var self = this; + this._queue.push(function() { self.send(data, options, cb); }); + return; + } + + options = options || {}; + options.fin = true; + + if (typeof options.binary === 'undefined') { + options.binary = (data instanceof ArrayBuffer || data instanceof Buffer || + data instanceof Uint8Array || + data instanceof Uint16Array || + data instanceof Uint32Array || + data instanceof Int8Array || + data instanceof Int16Array || + data instanceof Int32Array || + data instanceof Float32Array || + data instanceof Float64Array); + } + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + if (typeof options.compress === 'undefined') options.compress = true; + if (!this.extensions[PerMessageDeflate.extensionName]) { + options.compress = false; + } + + var readable = typeof stream.Readable === 'function' + ? stream.Readable + : stream.Stream; + + if (data instanceof readable) { + startQueue(this); + var self = this; + + sendStream(this, data, options, function send(error) { + process.nextTick(function tock() { + executeQueueSends(self); + }); + + if (typeof cb === 'function') cb(error); + }); + } else { + this._sender.send(data, options, cb); + } +}; + +/** + * Streams data through calls to a user supplied function + * + * @param {Object} Members - mask: boolean, binary: boolean, compress: boolean + * @param {function} 'function (error, send)' which is executed on successive ticks of which send is 'function (data, final)'. + * @api public + */ +WebSocket.prototype.stream = function stream(options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + var self = this; + + if (typeof cb !== 'function') throw new Error('callback must be provided'); + + if (this.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else throw new Error('not opened'); + return; + } + + if (this._queue) { + this._queue.push(function () { self.stream(options, cb); }); + return; + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + if (typeof options.compress === 'undefined') options.compress = true; + if (!this.extensions[PerMessageDeflate.extensionName]) { + options.compress = false; + } + + startQueue(this); + + function send(data, final) { + try { + if (self.readyState !== WebSocket.OPEN) throw new Error('not opened'); + options.fin = final === true; + self._sender.send(data, options); + if (!final) process.nextTick(cb.bind(null, null, send)); + else executeQueueSends(self); + } catch (e) { + if (typeof cb === 'function') cb(e); + else { + delete self._queue; + self.emit('error', e); + } + } + } + + process.nextTick(cb.bind(null, null, send)); +}; + +/** + * Immediately shuts down the connection + * + * @api public + */ +WebSocket.prototype.terminate = function terminate() { + if (this.readyState === WebSocket.CLOSED) return; + + if (this._socket) { + this.readyState = WebSocket.CLOSING; + + // End the connection + try { this._socket.end(); } + catch (e) { + // Socket error during end() call, so just destroy it right now + cleanupWebsocketResources.call(this, true); + return; + } + + // Add a timeout to ensure that the connection is completely + // cleaned up within 30 seconds, even if the clean close procedure + // fails for whatever reason + // First cleanup any pre-existing timeout from an earlier "terminate" call, + // if one exists. Otherwise terminate calls in quick succession will leak timeouts + // and hold the program open for `closeTimout` time. + if (this._closeTimer) { clearTimeout(this._closeTimer); } + this._closeTimer = setTimeout(cleanupWebsocketResources.bind(this, true), closeTimeout); + } else if (this.readyState === WebSocket.CONNECTING) { + cleanupWebsocketResources.call(this, true); + } +}; + +/** + * Expose bufferedAmount + * + * @api public + */ +Object.defineProperty(WebSocket.prototype, 'bufferedAmount', { + get: function get() { + var amount = 0; + if (this._socket) { + amount = this._socket.bufferSize || 0; + } + return amount; + } +}); + +/** + * Emulates the W3C Browser based WebSocket interface using function members. + * + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +['open', 'error', 'close', 'message'].forEach(function(method) { + Object.defineProperty(WebSocket.prototype, 'on' + method, { + /** + * Returns the current listener + * + * @returns {Mixed} the set function or undefined + * @api public + */ + get: function get() { + var listener = this.listeners(method)[0]; + return listener ? (listener._listener ? listener._listener : listener) : undefined; + }, + + /** + * Start listening for events + * + * @param {Function} listener the listener + * @returns {Mixed} the set function or undefined + * @api public + */ + set: function set(listener) { + this.removeAllListeners(method); + this.addEventListener(method, listener); + } + }); +}); + +/** + * Emulates the W3C Browser based WebSocket interface using addEventListener. + * + * @see https://developer.mozilla.org/en/DOM/element.addEventListener + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +WebSocket.prototype.addEventListener = function(method, listener) { + var target = this; + + function onMessage (data, flags) { + listener.call(target, new MessageEvent(data, !!flags.binary, target)); + } + + function onClose (code, message) { + listener.call(target, new CloseEvent(code, message, target)); + } + + function onError (event) { + event.type = 'error'; + event.target = target; + listener.call(target, event); + } + + function onOpen () { + listener.call(target, new OpenEvent(target)); + } + + if (typeof listener === 'function') { + if (method === 'message') { + // store a reference so we can return the original function from the + // addEventListener hook + onMessage._listener = listener; + this.on(method, onMessage); + } else if (method === 'close') { + // store a reference so we can return the original function from the + // addEventListener hook + onClose._listener = listener; + this.on(method, onClose); + } else if (method === 'error') { + // store a reference so we can return the original function from the + // addEventListener hook + onError._listener = listener; + this.on(method, onError); + } else if (method === 'open') { + // store a reference so we can return the original function from the + // addEventListener hook + onOpen._listener = listener; + this.on(method, onOpen); + } else { + this.on(method, listener); + } + } +}; + +module.exports = WebSocket; +module.exports.buildHostHeader = buildHostHeader + +/** + * W3C MessageEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function MessageEvent(dataArg, isBinary, target) { + this.type = 'message'; + this.data = dataArg; + this.target = target; + this.binary = isBinary; // non-standard. +} + +/** + * W3C CloseEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function CloseEvent(code, reason, target) { + this.type = 'close'; + this.wasClean = (typeof code === 'undefined' || code === 1000); + this.code = code; + this.reason = reason; + this.target = target; +} + +/** + * W3C OpenEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function OpenEvent(target) { + this.type = 'open'; + this.target = target; +} + +// Append port number to Host header, only if specified in the url +// and non-default +function buildHostHeader(isSecure, hostname, port) { + var headerHost = hostname; + if (hostname) { + if ((isSecure && (port != 443)) || (!isSecure && (port != 80))){ + headerHost = headerHost + ':' + port; + } + } + return headerHost; +} + +/** + * Entirely private apis, + * which may or may not be bound to a sepcific WebSocket instance. + */ +function initAsServerClient(req, socket, upgradeHead, options) { + options = new Options({ + protocolVersion: protocolVersion, + protocol: null, + extensions: {} + }).merge(options); + + // expose state properties + this.protocol = options.value.protocol; + this.protocolVersion = options.value.protocolVersion; + this.extensions = options.value.extensions; + this.supports.binary = (this.protocolVersion !== 'hixie-76'); + this.upgradeReq = req; + this.readyState = WebSocket.CONNECTING; + this._isServer = true; + + // establish connection + if (options.value.protocolVersion === 'hixie-76') { + establishConnection.call(this, ReceiverHixie, SenderHixie, socket, upgradeHead); + } else { + establishConnection.call(this, Receiver, Sender, socket, upgradeHead); + } +} + +function initAsClient(address, protocols, options) { + options = new Options({ + origin: null, + protocolVersion: protocolVersion, + host: null, + headers: null, + protocol: protocols.join(','), + agent: null, + + // ssl-related options + pfx: null, + key: null, + passphrase: null, + cert: null, + ca: null, + ciphers: null, + rejectUnauthorized: null, + perMessageDeflate: true, + localAddress: null + }).merge(options); + + if (options.value.protocolVersion !== 8 && options.value.protocolVersion !== 13) { + throw new Error('unsupported protocol version'); + } + + // verify URL and establish http class + var serverUrl = url.parse(address); + var isUnixSocket = serverUrl.protocol === 'ws+unix:'; + if (!serverUrl.host && !isUnixSocket) throw new Error('invalid url'); + var isSecure = serverUrl.protocol === 'wss:' || serverUrl.protocol === 'https:'; + var httpObj = isSecure ? https : http; + var port = serverUrl.port || (isSecure ? 443 : 80); + var auth = serverUrl.auth; + + // prepare extensions + var extensionsOffer = {}; + var perMessageDeflate; + if (options.value.perMessageDeflate) { + perMessageDeflate = new PerMessageDeflate(typeof options.value.perMessageDeflate !== true ? options.value.perMessageDeflate : {}, false); + extensionsOffer[PerMessageDeflate.extensionName] = perMessageDeflate.offer(); + } + + // expose state properties + this._isServer = false; + this.url = address; + this.protocolVersion = options.value.protocolVersion; + this.supports.binary = (this.protocolVersion !== 'hixie-76'); + + // begin handshake + var key = new Buffer(options.value.protocolVersion + '-' + Date.now()).toString('base64'); + var shasum = crypto.createHash('sha1'); + shasum.update(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'); + var expectedServerKey = shasum.digest('base64'); + + var agent = options.value.agent; + + var headerHost = buildHostHeader(isSecure, serverUrl.hostname, port) + + var requestOptions = { + port: port, + host: serverUrl.hostname, + headers: { + 'Connection': 'Upgrade', + 'Upgrade': 'websocket', + 'Host': headerHost, + 'Sec-WebSocket-Version': options.value.protocolVersion, + 'Sec-WebSocket-Key': key + } + }; + + // If we have basic auth. + if (auth) { + requestOptions.headers.Authorization = 'Basic ' + new Buffer(auth).toString('base64'); + } + + if (options.value.protocol) { + requestOptions.headers['Sec-WebSocket-Protocol'] = options.value.protocol; + } + + if (options.value.host) { + requestOptions.headers.Host = options.value.host; + } + + if (options.value.headers) { + for (var header in options.value.headers) { + if (options.value.headers.hasOwnProperty(header)) { + requestOptions.headers[header] = options.value.headers[header]; + } + } + } + + if (Object.keys(extensionsOffer).length) { + requestOptions.headers['Sec-WebSocket-Extensions'] = Extensions.format(extensionsOffer); + } + + if (options.isDefinedAndNonNull('pfx') + || options.isDefinedAndNonNull('key') + || options.isDefinedAndNonNull('passphrase') + || options.isDefinedAndNonNull('cert') + || options.isDefinedAndNonNull('ca') + || options.isDefinedAndNonNull('ciphers') + || options.isDefinedAndNonNull('rejectUnauthorized')) { + + if (options.isDefinedAndNonNull('pfx')) requestOptions.pfx = options.value.pfx; + if (options.isDefinedAndNonNull('key')) requestOptions.key = options.value.key; + if (options.isDefinedAndNonNull('passphrase')) requestOptions.passphrase = options.value.passphrase; + if (options.isDefinedAndNonNull('cert')) requestOptions.cert = options.value.cert; + if (options.isDefinedAndNonNull('ca')) requestOptions.ca = options.value.ca; + if (options.isDefinedAndNonNull('ciphers')) requestOptions.ciphers = options.value.ciphers; + if (options.isDefinedAndNonNull('rejectUnauthorized')) requestOptions.rejectUnauthorized = options.value.rejectUnauthorized; + + if (!agent) { + // global agent ignores client side certificates + agent = new httpObj.Agent(requestOptions); + } + } + + requestOptions.path = serverUrl.path || '/'; + + if (agent) { + requestOptions.agent = agent; + } + + if (isUnixSocket) { + requestOptions.socketPath = serverUrl.pathname; + } + + if (options.value.localAddress) { + requestOptions.localAddress = options.value.localAddress; + } + + if (options.value.origin) { + if (options.value.protocolVersion < 13) requestOptions.headers['Sec-WebSocket-Origin'] = options.value.origin; + else requestOptions.headers.Origin = options.value.origin; + } + + var self = this; + var req = httpObj.request(requestOptions); + + req.on('error', function onerror(error) { + self.emit('error', error); + cleanupWebsocketResources.call(self, error); + }); + + req.once('response', function response(res) { + var error; + + if (!self.emit('unexpected-response', req, res)) { + error = new Error('unexpected server response (' + res.statusCode + ')'); + req.abort(); + self.emit('error', error); + } + + cleanupWebsocketResources.call(self, error); + }); + + req.once('upgrade', function upgrade(res, socket, upgradeHead) { + if (self.readyState === WebSocket.CLOSED) { + // client closed before server accepted connection + self.emit('close'); + self.removeAllListeners(); + socket.end(); + return; + } + + var serverKey = res.headers['sec-websocket-accept']; + if (typeof serverKey === 'undefined' || serverKey !== expectedServerKey) { + self.emit('error', 'invalid server key'); + self.removeAllListeners(); + socket.end(); + return; + } + + var serverProt = res.headers['sec-websocket-protocol']; + var protList = (options.value.protocol || "").split(/, */); + var protError = null; + + if (!options.value.protocol && serverProt) { + protError = 'server sent a subprotocol even though none requested'; + } else if (options.value.protocol && !serverProt) { + protError = 'server sent no subprotocol even though requested'; + } else if (serverProt && protList.indexOf(serverProt) === -1) { + protError = 'server responded with an invalid protocol'; + } + + if (protError) { + self.emit('error', protError); + self.removeAllListeners(); + socket.end(); + return; + } else if (serverProt) { + self.protocol = serverProt; + } + + var serverExtensions = Extensions.parse(res.headers['sec-websocket-extensions']); + if (perMessageDeflate && serverExtensions[PerMessageDeflate.extensionName]) { + try { + perMessageDeflate.accept(serverExtensions[PerMessageDeflate.extensionName]); + } catch (err) { + self.emit('error', 'invalid extension parameter'); + self.removeAllListeners(); + socket.end(); + return; + } + self.extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + + establishConnection.call(self, Receiver, Sender, socket, upgradeHead); + + // perform cleanup on http resources + req.removeAllListeners(); + req = null; + agent = null; + }); + + req.end(); + this.readyState = WebSocket.CONNECTING; +} + +function establishConnection(ReceiverClass, SenderClass, socket, upgradeHead) { + var ultron = this._ultron = new Ultron(socket) + , called = false + , self = this; + + socket.setTimeout(0); + socket.setNoDelay(true); + + this._receiver = new ReceiverClass(this.extensions); + this._socket = socket; + + // socket cleanup handlers + ultron.on('end', cleanupWebsocketResources.bind(this)); + ultron.on('close', cleanupWebsocketResources.bind(this)); + ultron.on('error', cleanupWebsocketResources.bind(this)); + + // ensure that the upgradeHead is added to the receiver + function firstHandler(data) { + if (called || self.readyState === WebSocket.CLOSED) return; + + called = true; + socket.removeListener('data', firstHandler); + ultron.on('data', realHandler); + + if (upgradeHead && upgradeHead.length > 0) { + realHandler(upgradeHead); + upgradeHead = null; + } + + if (data) realHandler(data); + } + + // subsequent packets are pushed straight to the receiver + function realHandler(data) { + self.bytesReceived += data.length; + self._receiver.add(data); + } + + ultron.on('data', firstHandler); + + // if data was passed along with the http upgrade, + // this will schedule a push of that on to the receiver. + // this has to be done on next tick, since the caller + // hasn't had a chance to set event handlers on this client + // object yet. + process.nextTick(firstHandler); + + // receiver event handlers + self._receiver.ontext = function ontext(data, flags) { + flags = flags || {}; + + self.emit('message', data, flags); + }; + + self._receiver.onbinary = function onbinary(data, flags) { + flags = flags || {}; + + flags.binary = true; + self.emit('message', data, flags); + }; + + self._receiver.onping = function onping(data, flags) { + flags = flags || {}; + + self.pong(data, { + mask: !self._isServer, + binary: flags.binary === true + }, true); + + self.emit('ping', data, flags); + }; + + self._receiver.onpong = function onpong(data, flags) { + self.emit('pong', data, flags || {}); + }; + + self._receiver.onclose = function onclose(code, data, flags) { + flags = flags || {}; + + self._closeReceived = true; + self.close(code, data); + }; + + self._receiver.onerror = function onerror(reason, errorCode) { + // close the connection when the receiver reports a HyBi error code + self.close(typeof errorCode !== 'undefined' ? errorCode : 1002, ''); + self.emit('error', reason, errorCode); + }; + + // finalize the client + this._sender = new SenderClass(socket, this.extensions); + this._sender.on('error', function onerror(error) { + self.close(1002, ''); + self.emit('error', error); + }); + + this.readyState = WebSocket.OPEN; + this.emit('open'); +} + +function startQueue(instance) { + instance._queue = instance._queue || []; +} + +function executeQueueSends(instance) { + var queue = instance._queue; + if (typeof queue === 'undefined') return; + + delete instance._queue; + for (var i = 0, l = queue.length; i < l; ++i) { + queue[i](); + } +} + +function sendStream(instance, stream, options, cb) { + stream.on('data', function incoming(data) { + if (instance.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else { + delete instance._queue; + instance.emit('error', new Error('not opened')); + } + return; + } + + options.fin = false; + instance._sender.send(data, options); + }); + + stream.on('end', function end() { + if (instance.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else { + delete instance._queue; + instance.emit('error', new Error('not opened')); + } + return; + } + + options.fin = true; + instance._sender.send(null, options); + + if (typeof cb === 'function') cb(null); + }); +} + +function cleanupWebsocketResources(error) { + if (this.readyState === WebSocket.CLOSED) return; + + var emitClose = this.readyState !== WebSocket.CONNECTING; + this.readyState = WebSocket.CLOSED; + + clearTimeout(this._closeTimer); + this._closeTimer = null; + + if (emitClose) { + // If the connection was closed abnormally (with an error), or if + // the close control frame was not received then the close code + // must default to 1006. + if (error || !this._closeReceived) { + this._closeCode = 1006; + } + this.emit('close', this._closeCode || 1000, this._closeMessage || ''); + } + + if (this._socket) { + if (this._ultron) this._ultron.destroy(); + this._socket.on('error', function onerror() { + try { this.destroy(); } + catch (e) {} + }); + + try { + if (!error) this._socket.end(); + else this._socket.destroy(); + } catch (e) { /* Ignore termination errors */ } + + this._socket = null; + this._ultron = null; + } + + if (this._sender) { + this._sender.removeAllListeners(); + this._sender = null; + } + + if (this._receiver) { + this._receiver.cleanup(); + this._receiver = null; + } + + if (this.extensions[PerMessageDeflate.extensionName]) { + this.extensions[PerMessageDeflate.extensionName].cleanup(); + } + + this.extensions = null; + + this.removeAllListeners(); + this.on('error', function onerror() {}); // catch all errors after this + delete this._queue; +} diff --git a/www/node_modules/ws/lib/WebSocketServer.js b/www/node_modules/ws/lib/WebSocketServer.js new file mode 100644 index 0000000..ba0e4c0 --- /dev/null +++ b/www/node_modules/ws/lib/WebSocketServer.js @@ -0,0 +1,513 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util') + , events = require('events') + , http = require('http') + , crypto = require('crypto') + , Options = require('options') + , WebSocket = require('./WebSocket') + , Extensions = require('./Extensions') + , PerMessageDeflate = require('./PerMessageDeflate') + , tls = require('tls') + , url = require('url'); + +/** + * WebSocket Server implementation + */ + +function WebSocketServer(options, callback) { + if (this instanceof WebSocketServer === false) { + return new WebSocketServer(options, callback); + } + + events.EventEmitter.call(this); + + options = new Options({ + host: '0.0.0.0', + port: null, + server: null, + verifyClient: null, + handleProtocols: null, + path: null, + noServer: false, + disableHixie: false, + clientTracking: true, + perMessageDeflate: true + }).merge(options); + + if (!options.isDefinedAndNonNull('port') && !options.isDefinedAndNonNull('server') && !options.value.noServer) { + throw new TypeError('`port` or a `server` must be provided'); + } + + var self = this; + + if (options.isDefinedAndNonNull('port')) { + this._server = http.createServer(function (req, res) { + var body = http.STATUS_CODES[426]; + res.writeHead(426, { + 'Content-Length': body.length, + 'Content-Type': 'text/plain' + }); + res.end(body); + }); + this._server.allowHalfOpen = false; + this._server.listen(options.value.port, options.value.host, callback); + this._closeServer = function() { if (self._server) self._server.close(); }; + } + else if (options.value.server) { + this._server = options.value.server; + if (options.value.path) { + // take note of the path, to avoid collisions when multiple websocket servers are + // listening on the same http server + if (this._server._webSocketPaths && options.value.server._webSocketPaths[options.value.path]) { + throw new Error('two instances of WebSocketServer cannot listen on the same http server path'); + } + if (typeof this._server._webSocketPaths !== 'object') { + this._server._webSocketPaths = {}; + } + this._server._webSocketPaths[options.value.path] = 1; + } + } + if (this._server) this._server.once('listening', function() { self.emit('listening'); }); + + if (typeof this._server != 'undefined') { + this._server.on('error', function(error) { + self.emit('error', error) + }); + this._server.on('upgrade', function(req, socket, upgradeHead) { + //copy upgradeHead to avoid retention of large slab buffers used in node core + var head = new Buffer(upgradeHead.length); + upgradeHead.copy(head); + + self.handleUpgrade(req, socket, head, function(client) { + self.emit('connection'+req.url, client); + self.emit('connection', client); + }); + }); + } + + this.options = options.value; + this.path = options.value.path; + this.clients = []; +} + +/** + * Inherits from EventEmitter. + */ + +util.inherits(WebSocketServer, events.EventEmitter); + +/** + * Immediately shuts down the connection. + * + * @api public + */ + +WebSocketServer.prototype.close = function(callback) { + // terminate all associated clients + var error = null; + try { + for (var i = 0, l = this.clients.length; i < l; ++i) { + this.clients[i].terminate(); + } + } + catch (e) { + error = e; + } + + // remove path descriptor, if any + if (this.path && this._server._webSocketPaths) { + delete this._server._webSocketPaths[this.path]; + if (Object.keys(this._server._webSocketPaths).length == 0) { + delete this._server._webSocketPaths; + } + } + + // close the http server if it was internally created + try { + if (typeof this._closeServer !== 'undefined') { + this._closeServer(); + } + } + finally { + delete this._server; + } + if(callback) + callback(error); + else if(error) + throw error; +} + +/** + * Handle a HTTP Upgrade request. + * + * @api public + */ + +WebSocketServer.prototype.handleUpgrade = function(req, socket, upgradeHead, cb) { + // check for wrong path + if (this.options.path) { + var u = url.parse(req.url); + if (u && u.pathname !== this.options.path) return; + } + + if (typeof req.headers.upgrade === 'undefined' || req.headers.upgrade.toLowerCase() !== 'websocket') { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + if (req.headers['sec-websocket-key1']) handleHixieUpgrade.apply(this, arguments); + else handleHybiUpgrade.apply(this, arguments); +} + +module.exports = WebSocketServer; + +/** + * Entirely private apis, + * which may or may not be bound to a sepcific WebSocket instance. + */ + +function handleHybiUpgrade(req, socket, upgradeHead, cb) { + // handle premature socket errors + var errorHandler = function() { + try { socket.destroy(); } catch (e) {} + } + socket.on('error', errorHandler); + + // verify key presence + if (!req.headers['sec-websocket-key']) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + // verify version + var version = parseInt(req.headers['sec-websocket-version']); + if ([8, 13].indexOf(version) === -1) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + // verify protocol + var protocols = req.headers['sec-websocket-protocol']; + + // verify client + var origin = version < 13 ? + req.headers['sec-websocket-origin'] : + req.headers['origin']; + + // handle extensions offer + var extensionsOffer = Extensions.parse(req.headers['sec-websocket-extensions']); + + // handler to call when the connection sequence completes + var self = this; + var completeHybiUpgrade2 = function(protocol) { + + // calc key + var key = req.headers['sec-websocket-key']; + var shasum = crypto.createHash('sha1'); + shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); + key = shasum.digest('base64'); + + var headers = [ + 'HTTP/1.1 101 Switching Protocols' + , 'Upgrade: websocket' + , 'Connection: Upgrade' + , 'Sec-WebSocket-Accept: ' + key + ]; + + if (typeof protocol != 'undefined') { + headers.push('Sec-WebSocket-Protocol: ' + protocol); + } + + var extensions = {}; + try { + extensions = acceptExtensions.call(self, extensionsOffer); + } catch (err) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + if (Object.keys(extensions).length) { + var serverExtensions = {}; + Object.keys(extensions).forEach(function(token) { + serverExtensions[token] = [extensions[token].params] + }); + headers.push('Sec-WebSocket-Extensions: ' + Extensions.format(serverExtensions)); + } + + // allows external modification/inspection of handshake headers + self.emit('headers', headers); + + socket.setTimeout(0); + socket.setNoDelay(true); + try { + socket.write(headers.concat('', '').join('\r\n')); + } + catch (e) { + // if the upgrade write fails, shut the connection down hard + try { socket.destroy(); } catch (e) {} + return; + } + + var client = new WebSocket([req, socket, upgradeHead], { + protocolVersion: version, + protocol: protocol, + extensions: extensions + }); + + if (self.options.clientTracking) { + self.clients.push(client); + client.on('close', function() { + var index = self.clients.indexOf(client); + if (index != -1) { + self.clients.splice(index, 1); + } + }); + } + + // signal upgrade complete + socket.removeListener('error', errorHandler); + cb(client); + } + + // optionally call external protocol selection handler before + // calling completeHybiUpgrade2 + var completeHybiUpgrade1 = function() { + // choose from the sub-protocols + if (typeof self.options.handleProtocols == 'function') { + var protList = (protocols || "").split(/, */); + var callbackCalled = false; + var res = self.options.handleProtocols(protList, function(result, protocol) { + callbackCalled = true; + if (!result) abortConnection(socket, 401, 'Unauthorized'); + else completeHybiUpgrade2(protocol); + }); + if (!callbackCalled) { + // the handleProtocols handler never called our callback + abortConnection(socket, 501, 'Could not process protocols'); + } + return; + } else { + if (typeof protocols !== 'undefined') { + completeHybiUpgrade2(protocols.split(/, */)[0]); + } + else { + completeHybiUpgrade2(); + } + } + } + + // optionally call external client verification handler + if (typeof this.options.verifyClient == 'function') { + var info = { + origin: origin, + secure: typeof req.connection.authorized !== 'undefined' || typeof req.connection.encrypted !== 'undefined', + req: req + }; + if (this.options.verifyClient.length == 2) { + this.options.verifyClient(info, function(result, code, name) { + if (typeof code === 'undefined') code = 401; + if (typeof name === 'undefined') name = http.STATUS_CODES[code]; + + if (!result) abortConnection(socket, code, name); + else completeHybiUpgrade1(); + }); + return; + } + else if (!this.options.verifyClient(info)) { + abortConnection(socket, 401, 'Unauthorized'); + return; + } + } + + completeHybiUpgrade1(); +} + +function handleHixieUpgrade(req, socket, upgradeHead, cb) { + // handle premature socket errors + var errorHandler = function() { + try { socket.destroy(); } catch (e) {} + } + socket.on('error', errorHandler); + + // bail if options prevent hixie + if (this.options.disableHixie) { + abortConnection(socket, 401, 'Hixie support disabled'); + return; + } + + // verify key presence + if (!req.headers['sec-websocket-key2']) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + var origin = req.headers['origin'] + , self = this; + + // setup handshake completion to run after client has been verified + var onClientVerified = function() { + var wshost; + if (!req.headers['x-forwarded-host']) + wshost = req.headers.host; + else + wshost = req.headers['x-forwarded-host']; + var location = ((req.headers['x-forwarded-proto'] === 'https' || socket.encrypted) ? 'wss' : 'ws') + '://' + wshost + req.url + , protocol = req.headers['sec-websocket-protocol']; + + // handshake completion code to run once nonce has been successfully retrieved + var completeHandshake = function(nonce, rest) { + // calculate key + var k1 = req.headers['sec-websocket-key1'] + , k2 = req.headers['sec-websocket-key2'] + , md5 = crypto.createHash('md5'); + + [k1, k2].forEach(function (k) { + var n = parseInt(k.replace(/[^\d]/g, '')) + , spaces = k.replace(/[^ ]/g, '').length; + if (spaces === 0 || n % spaces !== 0){ + abortConnection(socket, 400, 'Bad Request'); + return; + } + n /= spaces; + md5.update(String.fromCharCode( + n >> 24 & 0xFF, + n >> 16 & 0xFF, + n >> 8 & 0xFF, + n & 0xFF)); + }); + md5.update(nonce.toString('binary')); + + var headers = [ + 'HTTP/1.1 101 Switching Protocols' + , 'Upgrade: WebSocket' + , 'Connection: Upgrade' + , 'Sec-WebSocket-Location: ' + location + ]; + if (typeof protocol != 'undefined') headers.push('Sec-WebSocket-Protocol: ' + protocol); + if (typeof origin != 'undefined') headers.push('Sec-WebSocket-Origin: ' + origin); + + socket.setTimeout(0); + socket.setNoDelay(true); + try { + // merge header and hash buffer + var headerBuffer = new Buffer(headers.concat('', '').join('\r\n')); + var hashBuffer = new Buffer(md5.digest('binary'), 'binary'); + var handshakeBuffer = new Buffer(headerBuffer.length + hashBuffer.length); + headerBuffer.copy(handshakeBuffer, 0); + hashBuffer.copy(handshakeBuffer, headerBuffer.length); + + // do a single write, which - upon success - causes a new client websocket to be setup + socket.write(handshakeBuffer, 'binary', function(err) { + if (err) return; // do not create client if an error happens + var client = new WebSocket([req, socket, rest], { + protocolVersion: 'hixie-76', + protocol: protocol + }); + if (self.options.clientTracking) { + self.clients.push(client); + client.on('close', function() { + var index = self.clients.indexOf(client); + if (index != -1) { + self.clients.splice(index, 1); + } + }); + } + + // signal upgrade complete + socket.removeListener('error', errorHandler); + cb(client); + }); + } + catch (e) { + try { socket.destroy(); } catch (e) {} + return; + } + } + + // retrieve nonce + var nonceLength = 8; + if (upgradeHead && upgradeHead.length >= nonceLength) { + var nonce = upgradeHead.slice(0, nonceLength); + var rest = upgradeHead.length > nonceLength ? upgradeHead.slice(nonceLength) : null; + completeHandshake.call(self, nonce, rest); + } + else { + // nonce not present in upgradeHead, so we must wait for enough data + // data to arrive before continuing + var nonce = new Buffer(nonceLength); + upgradeHead.copy(nonce, 0); + var received = upgradeHead.length; + var rest = null; + var handler = function (data) { + var toRead = Math.min(data.length, nonceLength - received); + if (toRead === 0) return; + data.copy(nonce, received, 0, toRead); + received += toRead; + if (received == nonceLength) { + socket.removeListener('data', handler); + if (toRead < data.length) rest = data.slice(toRead); + completeHandshake.call(self, nonce, rest); + } + } + socket.on('data', handler); + } + } + + // verify client + if (typeof this.options.verifyClient == 'function') { + var info = { + origin: origin, + secure: typeof req.connection.authorized !== 'undefined' || typeof req.connection.encrypted !== 'undefined', + req: req + }; + if (this.options.verifyClient.length == 2) { + var self = this; + this.options.verifyClient(info, function(result, code, name) { + if (typeof code === 'undefined') code = 401; + if (typeof name === 'undefined') name = http.STATUS_CODES[code]; + + if (!result) abortConnection(socket, code, name); + else onClientVerified.apply(self); + }); + return; + } + else if (!this.options.verifyClient(info)) { + abortConnection(socket, 401, 'Unauthorized'); + return; + } + } + + // no client verification required + onClientVerified(); +} + +function acceptExtensions(offer) { + var extensions = {}; + var options = this.options.perMessageDeflate; + if (options && offer[PerMessageDeflate.extensionName]) { + var perMessageDeflate = new PerMessageDeflate(options !== true ? options : {}, true); + perMessageDeflate.accept(offer[PerMessageDeflate.extensionName]); + extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + return extensions; +} + +function abortConnection(socket, code, name) { + try { + var response = [ + 'HTTP/1.1 ' + code + ' ' + name, + 'Content-type: text/html' + ]; + socket.write(response.concat('', '').join('\r\n')); + } + catch (e) { /* ignore errors - we've aborted this connection */ } + finally { + // ensure that an early aborted connection is shut down completely + try { socket.destroy(); } catch (e) {} + } +} diff --git a/www/node_modules/ws/package.json b/www/node_modules/ws/package.json new file mode 100644 index 0000000..b597874 --- /dev/null +++ b/www/node_modules/ws/package.json @@ -0,0 +1,102 @@ +{ + "_args": [ + [ + "ws@^1.0.1", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver" + ] + ], + "_from": "ws@>=1.0.1 <2.0.0", + "_id": "ws@1.0.1", + "_inCache": true, + "_installable": true, + "_location": "/ws", + "_nodeVersion": "4.2.3", + "_npmUser": { + "email": "npm@3rd-Eden.com", + "name": "3rdeden" + }, + "_npmVersion": "3.5.1", + "_phantomChildren": {}, + "_requested": { + "name": "ws", + "raw": "ws@^1.0.1", + "rawSpec": "^1.0.1", + "scope": null, + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/selenium-webdriver" + ], + "_resolved": "https://registry.npmjs.org/ws/-/ws-1.0.1.tgz", + "_shasum": "7d0b2a2e58cddd819039c29c9de65045e1b310e9", + "_shrinkwrap": null, + "_spec": "ws@^1.0.1", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver", + "author": { + "email": "einaros@gmail.com", + "name": "Einar Otto Stangvik", + "url": "http://2x.io" + }, + "bugs": { + "url": "https://github.com/websockets/ws/issues" + }, + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + }, + "description": "simple to use, blazing fast and thoroughly tested websocket client, server and console for node.js, up-to-date against RFC-6455", + "devDependencies": { + "ansi": "0.3.x", + "benchmark": "0.3.x", + "bufferutil": "1.2.x", + "expect.js": "0.3.x", + "mocha": "2.3.x", + "should": "8.0.x", + "tinycolor": "0.0.x", + "utf-8-validate": "1.2.x" + }, + "directories": {}, + "dist": { + "shasum": "7d0b2a2e58cddd819039c29c9de65045e1b310e9", + "tarball": "http://registry.npmjs.org/ws/-/ws-1.0.1.tgz" + }, + "gitHead": "40a9d686288b5d0be13f2bf2f3f5da07afc8cda2", + "gypfile": true, + "homepage": "https://github.com/websockets/ws#readme", + "keywords": [ + "Hixie", + "HyBi", + "Push", + "RFC-6455", + "WebSocket", + "WebSockets", + "real-time" + ], + "license": "MIT", + "maintainers": [ + { + "email": "einaros@gmail.com", + "name": "einaros" + }, + { + "email": "info@3rd-Eden.com", + "name": "v1" + }, + { + "email": "npm@3rd-Eden.com", + "name": "3rdeden" + } + ], + "name": "ws", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/websockets/ws.git" + }, + "scripts": { + "test": "make test" + }, + "version": "1.0.1" +} diff --git a/www/node_modules/xml2js/.npmignore b/www/node_modules/xml2js/.npmignore new file mode 100644 index 0000000..ef7b9b9 --- /dev/null +++ b/www/node_modules/xml2js/.npmignore @@ -0,0 +1,6 @@ +*.swp +.idea +node_modules +src +test +Cakefile \ No newline at end of file diff --git a/www/node_modules/xml2js/.travis.yml b/www/node_modules/xml2js/.travis.yml new file mode 100644 index 0000000..755a6b7 --- /dev/null +++ b/www/node_modules/xml2js/.travis.yml @@ -0,0 +1,5 @@ +language: node_js + +node_js: + - "0.8" + - "0.10" diff --git a/www/node_modules/xml2js/83.coffee b/www/node_modules/xml2js/83.coffee new file mode 100644 index 0000000..3443540 --- /dev/null +++ b/www/node_modules/xml2js/83.coffee @@ -0,0 +1,6 @@ +xml2js = require 'xml2js' +util = require 'util' + +body = 'Character data here!' +xml2js.parseString body, (err, result) -> + console.log util.inspect result, false, null diff --git a/www/node_modules/xml2js/CONTRIBUTING.md b/www/node_modules/xml2js/CONTRIBUTING.md new file mode 100644 index 0000000..2209adf --- /dev/null +++ b/www/node_modules/xml2js/CONTRIBUTING.md @@ -0,0 +1,19 @@ +# How to contribute + +We're always happy about useful new pull requests. Keep in mind that the better +your pull request is, the easier it can be added to `xml2js`. As such please +make sure your patch is ok: + + * `xml2js` is written in CoffeeScript. Please don't send patches to + the JavaScript source, as it get's overwritten by the CoffeeScript + compiler. The reason we have the JS code in the repository is for easier + use with eg. `git submodule` + * Make sure that the unit tests still all pass. Failing unit tests mean that + someone *will* run into a bug, if we accept your pull request. + * Please, add a unit test with your pull request, to show what was broken and + is now fixed or what was impossible and now works due to your new code. + * If you add a new feature, please add some documentation that it exists. + +If you like, you can add yourself in the `package.json` as contributor if you +deem your contribution significant enough. Otherwise, we will decide and maybe +add you. diff --git a/www/node_modules/xml2js/LICENSE b/www/node_modules/xml2js/LICENSE new file mode 100644 index 0000000..e3b4222 --- /dev/null +++ b/www/node_modules/xml2js/LICENSE @@ -0,0 +1,19 @@ +Copyright 2010, 2011, 2012, 2013. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/www/node_modules/xml2js/README.md b/www/node_modules/xml2js/README.md new file mode 100644 index 0000000..4e01478 --- /dev/null +++ b/www/node_modules/xml2js/README.md @@ -0,0 +1,343 @@ +node-xml2js +=========== + +Ever had the urge to parse XML? And wanted to access the data in some sane, +easy way? Don't want to compile a C parser, for whatever reason? Then xml2js is +what you're looking for! + +Description +=========== + +Simple XML to JavaScript object converter. It supports bi-directional conversion. +Uses [sax-js](https://github.com/isaacs/sax-js/) and +[xmlbuilder-js](https://github.com/oozcitak/xmlbuilder-js/). + +Note: If you're looking for a full DOM parser, you probably want +[JSDom](https://github.com/tmpvar/jsdom). + +Installation +============ + +Simplest way to install `xml2js` is to use [npm](http://npmjs.org), just `npm +install xml2js` which will download xml2js and all dependencies. + +Usage +===== + +No extensive tutorials required because you are a smart developer! The task of +parsing XML should be an easy one, so let's make it so! Here's some examples. + +Shoot-and-forget usage +---------------------- + +You want to parse XML as simple and easy as possible? It's dangerous to go +alone, take this: + +```javascript +var parseString = require('xml2js').parseString; +var xml = "Hello xml2js!" +parseString(xml, function (err, result) { + console.dir(result); +}); +``` + +Can't get easier than this, right? This works starting with `xml2js` 0.2.3. +With CoffeeScript it looks like this: + +```coffeescript +{parseString} = require 'xml2js' +xml = "Hello xml2js!" +parseString xml, (err, result) -> + console.dir result +``` + +If you need some special options, fear not, `xml2js` supports a number of +options (see below), you can specify these as second argument: + +```javascript +parseString(xml, {trim: true}, function (err, result) { +}); +``` + +Simple as pie usage +------------------- + +That's right, if you have been using xml-simple or a home-grown +wrapper, this was added in 0.1.11 just for you: + +```javascript +var fs = require('fs'), + xml2js = require('xml2js'); + +var parser = new xml2js.Parser(); +fs.readFile(__dirname + '/foo.xml', function(err, data) { + parser.parseString(data, function (err, result) { + console.dir(result); + console.log('Done'); + }); +}); +``` + +Look ma, no event listeners! + +You can also use `xml2js` from +[CoffeeScript](http://jashkenas.github.com/coffee-script/), further reducing +the clutter: + +```coffeescript +fs = require 'fs', +xml2js = require 'xml2js' + +parser = new xml2js.Parser() +fs.readFile __dirname + '/foo.xml', (err, data) -> + parser.parseString data, (err, result) -> + console.dir result + console.log 'Done.' +``` + +But what happens if you forget the `new` keyword to create a new `Parser`? In +the middle of a nightly coding session, it might get lost, after all. Worry +not, we got you covered! Starting with 0.2.8 you can also leave it out, in +which case `xml2js` will helpfully add it for you, no bad surprises and +inexplicable bugs! + +"Traditional" usage +------------------- + +Alternatively you can still use the traditional `addListener` variant that was +supported since forever: + +```javascript +var fs = require('fs'), + xml2js = require('xml2js'); + +var parser = new xml2js.Parser(); +parser.addListener('end', function(result) { + console.dir(result); + console.log('Done.'); +}); +fs.readFile(__dirname + '/foo.xml', function(err, data) { + parser.parseString(data); +}); +``` + +If you want to parse multiple files, you have multiple possibilites: + + * You can create one `xml2js.Parser` per file. That's the recommended one + and is promised to always *just work*. + * You can call `reset()` on your parser object. + * You can hope everything goes well anyway. This behaviour is not + guaranteed work always, if ever. Use option #1 if possible. Thanks! + +So you wanna some JSON? +----------------------- + +Just wrap the `result` object in a call to `JSON.stringify` like this +`JSON.stringify(result)`. You get a string containing the JSON representation +of the parsed object that you can feed to JSON-hungry consumers. + +Displaying results +------------------ + +You might wonder why, using `console.dir` or `console.log` the output at some +level is only `[Object]`. Don't worry, this is not because xml2js got lazy. +That's because Node uses `util.inspect` to convert the object into strings and +that function stops after `depth=2` which is a bit low for most XML. + +To display the whole deal, you can use `console.log(util.inspect(result, false, +null))`, which displays the whole result. + +So much for that, but what if you use +[eyes](https://github.com/cloudhead/eyes.js) for nice colored output and it +truncates the output with `…`? Don't fear, there's also a solution for that, +you just need to increase the `maxLength` limit by creating a custom inspector +`var inspect = require('eyes').inspector({maxLength: false})` and then you can +easily `inspect(result)`. + +XML builder usage +----------------- + +Since 0.4.0, objects can be also be used to build XML: + +```javascript +var fs = require('fs'), + xml2js = require('xml2js'); + +var obj = {name: "Super", Surname: "Man", age: 23}; + +var builder = new xml2js.Builder(); +var xml = builder.buildObject(obj); +``` + +At the moment, a one to one bi-directional conversion is guaranteed only for +default configuration, except for `attrkey`, `charkey` and `explicitArray` options +you can redefine to your taste. Writing CDATA is not currently supported. + +Processing attribute and tag names +---------------------------------- + +Since 0.4.1 you can optionally provide the parser with attribute and tag name processors: + +```javascript + +function nameToUpperCase(name){ + return name.toUpperCase(); +} + +//transform all attribute and tag names to uppercase +parseString(xml, {tagNameProcessors: [nameToUpperCase], attrNameProcessors: [nameToUpperCase]}, function (err, result) { +}); +``` + +The `tagNameProcessors` and `attrNameProcessors` options both accept an `Array` of functions with the following signature: +```javascript +function (name){ + //do something with `name` + return name +} +``` + +Some processors are provided out-of-the-box and can be found in `lib/processors.js`: + +- `normalize`: transforms the name to lowercase. +(Automatically used when `options.normalize` is set to `true`) + +- `firstCharLowerCase`: transforms the first character to lower case. +E.g. 'MyTagName' becomes 'myTagName' + +- `stripPrefix`: strips the xml namespace prefix. E.g `` will become 'Bar'. +(N.B.: the `xmlns` prefix is NOT stripped.) + +Options +======= + +Apart from the default settings, there are a number of options that can be +specified for the parser. Options are specified by ``new Parser({optionName: +value})``. Possible options are: + + * `attrkey` (default: `$`): Prefix that is used to access the attributes. + Version 0.1 default was `@`. + * `charkey` (default: `_`): Prefix that is used to access the character + content. Version 0.1 default was `#`. + * `explicitCharkey` (default: `false`) + * `trim` (default: `false`): Trim the whitespace at the beginning and end of + text nodes. + * `normalizeTags` (default: `false`): Normalize all tag names to lowercase. + * `normalize` (default: `false`): Trim whitespaces inside text nodes. + * `explicitRoot` (default: `true`): Set this if you want to get the root + node in the resulting object. + * `emptyTag` (default: `undefined`): what will the value of empty nodes be. + Default is `{}`. + * `explicitArray` (default: `true`): Always put child nodes in an array if + true; otherwise an array is created only if there is more than one. + * `ignoreAttrs` (default: `false`): Ignore all XML attributes and only create + text nodes. + * `mergeAttrs` (default: `false`): Merge attributes and child elements as + properties of the parent, instead of keying attributes off a child + attribute object. This option is ignored if `ignoreAttrs` is `false`. + * `validator` (default `null`): You can specify a callable that validates + the resulting structure somehow, however you want. See unit tests + for an example. + * `xmlns` (default `false`): Give each element a field usually called '$ns' + (the first character is the same as attrkey) that contains its local name + and namespace URI. + * `explicitChildren` (default `false`): Put child elements to separate + property. Doesn't work with `mergeAttrs = true`. If element has no children + then "children" won't be created. Added in 0.2.5. + * `childkey` (default `$$`): Prefix that is used to access child elements if + `explicitChildren` is set to `true`. Added in 0.2.5. + * `charsAsChildren` (default `false`): Determines whether chars should be + considered children if `explicitChildren` is on. Added in 0.2.5. + * `async` (default `false`): Should the callbacks be async? This *might* be + an incompatible change if your code depends on sync execution of callbacks. + xml2js 0.3 might change this default, so the recommendation is to not + depend on sync execution anyway. Added in 0.2.6. + * `strict` (default `true`): Set sax-js to strict or non-strict parsing mode. + Defaults to `true` which is *highly* recommended, since parsing HTML which + is not well-formed XML might yield just about anything. Added in 0.2.7. + * `attrNameProcessors` (default: `null`): Allows the addition of attribute name processing functions. + Accepts an `Array` of functions with following signature: + ```javascript + function (name){ + //do something with `name` + return name + } + ``` + Added in 0.4.1 + * `tagNameProcessors` (default: `null`):Allows the addition of tag name processing functions. + Accepts an `Array` of functions with following signature: + ```javascript + function (name){ + //do something with `name` + return name + } + ``` + Added in 0.4.1 + +Options for the `Builder` class +------------------------------- + + * `rootName` (default `root`): root element name to be used in case + `explicitRoot` is `false` or to override the root element name. + * `renderOpts` (default `{ 'pretty': true, 'indent': ' ', 'newline': '\n' }`): + Rendering options for xmlbuilder-js. + * pretty: prettify generated XML + * indent: whitespace for indentation (only when pretty) + * newline: newline char (only when pretty) + * `xmldec` (default `{ 'version': '1.0', 'encoding': 'UTF-8', 'standalone': true }`: + XML declaration attributes. + * `xmldec.version` A version number string, e.g. 1.0 + * `xmldec.encoding` Encoding declaration, e.g. UTF-8 + * `xmldec.standalone` standalone document declaration: true or false + * `doctype` (default `null`): optional DTD. Eg. `{'ext': 'hello.dtd'}` + * `headless` (default: `false`): omit the XML header. Added in 0.4.3. + +`renderOpts`, `xmldec`,`doctype` and `headless` pass through to +[xmlbuilder-js](https://github.com/oozcitak/xmlbuilder-js). + +Updating to new version +======================= + +Version 0.2 changed the default parsing settings, but version 0.1.14 introduced +the default settings for version 0.2, so these settings can be tried before the +migration. + +```javascript +var xml2js = require('xml2js'); +var parser = new xml2js.Parser(xml2js.defaults["0.2"]); +``` + +To get the 0.1 defaults in version 0.2 you can just use +`xml2js.defaults["0.1"]` in the same place. This provides you with enough time +to migrate to the saner way of parsing in xml2js 0.2. We try to make the +migration as simple and gentle as possible, but some breakage cannot be +avoided. + +So, what exactly did change and why? In 0.2 we changed some defaults to parse +the XML in a more universal and sane way. So we disabled `normalize` and `trim` +so xml2js does not cut out any text content. You can reenable this at will of +course. A more important change is that we return the root tag in the resulting +JavaScript structure via the `explicitRoot` setting, so you need to access the +first element. This is useful for anybody who wants to know what the root node +is and preserves more information. The last major change was to enable +`explicitArray`, so everytime it is possible that one might embed more than one +sub-tag into a tag, xml2js >= 0.2 returns an array even if the array just +includes one element. This is useful when dealing with APIs that return +variable amounts of subtags. + +Running tests, development +========================== + +[![Build Status](https://secure.travis-ci.org/Leonidas-from-XIV/node-xml2js.png?branch=master)](https://travis-ci.org/Leonidas-from-XIV/node-xml2js) +[![Dependency Status](https://david-dm.org/Leonidas-from-XIV/node-xml2js.png)](https://david-dm.org/Leonidas-from-XIV/node-xml2js) + +The development requirements are handled by npm, you just need to install them. +We also have a number of unit tests, they can be run using `npm test` directly +from the project root. This runs zap to discover all the tests and execute +them. + +If you like to contribute, keep in mind that xml2js is written in CoffeeScript, +so don't develop on the JavaScript files that are checked into the repository +for convenience reasons. Also, please write some unit test to check your +behaviour and if it is some user-facing thing, add some documentation to this +README, so people will know it exists. Thanks in advance! diff --git a/www/node_modules/xml2js/canon.xml b/www/node_modules/xml2js/canon.xml new file mode 100644 index 0000000..f24ddd1 --- /dev/null +++ b/www/node_modules/xml2js/canon.xml @@ -0,0 +1,482 @@ + + + AF485783 + 14758 + double + DNA + circular + SYN + 15-MAY-2003 + 21-MAR-2002 + Binary vector pBI121, complete sequence + AF485783 + AF485783.1 + + gb|AF485783.1| + gi|19569229 + + Binary vector pBI121 + Binary vector pBI121 + other sequences; artificial sequences; vectors + + + 1 + 1..14758 + + Chen,P.Y. + Wang,C.K. + Soong,S.C. + To,K.Y. + + Complete sequence of the binary vector pBI121 and its application in cloning T-DNA insertion from transgenic plants + Mol. Breed. 11, 287-293 (2003) + + + 2 + 1..14758 + + To,K.Y. + + Direct Submission + Submitted (20-FEB-2002) Institute of BioAgricultural Sciences, Academia Sinica, Taipei 11529, Taiwan + + + + + source + 1..14758 + + + 1 + 14758 + AF485783.1 + + + + + organism + Binary vector pBI121 + + + mol_type + genomic DNA + + + db_xref + taxon:189807 + + + note + constructed using pB221 from Clontech Laboratories and Bin19 described in GenBank Accession Number U09365 + + + + + misc_feature + complement(13..796) + + + 796 + 13 + + AF485783.1 + + + + + note + similar to traF in GenBank Accession Number X54459 + + + + + rep_origin + complement(790..1168) + + + 1168 + 790 + + AF485783.1 + + + + + note + ColE1 ori; similar to sequence in GenBank Accession Number V00268 + + + + + misc_feature + complement(1161..2344) + + + 2344 + 1161 + + AF485783.1 + + + + + note + similar to tetA in GenBank Accession Number X75761 + + + + + misc_feature + complement(2454..2478) + + + 2478 + 2454 + + AF485783.1 + + + + + note + T-DNA right border + + + + + promoter + 2519..2825 + + + 2519 + 2825 + AF485783.1 + + + + + note + NOS + + + + + gene + 2838..3632 + + + 2838 + 3632 + AF485783.1 + + + + + gene + nptII + + + + + CDS + 2838..3632 + + + 2838 + 3632 + AF485783.1 + + + + + gene + nptII + + + codon_start + 1 + + + transl_table + 1 + + + product + neomycin phosphotransferase II + + + protein_id + AAL92039.1 + + + db_xref + GI:19569230 + + + translation + MIEQDGLHAGSPAAWVERLFGYDWAQQTIGCSDAAVFRLSAQGRPVLFVKTDLSGALNELQDEAARLSWLATTGVPCAAVLDVVTEAGRDWLLLGEVPGQDLLSSHLAPAEKVSIMADAMRRLHTLDPATCPFDHQAKHRIERARTRMEAGLVDQDDLDEEHQGLAPAELFARLKARMPDGDDLVVTHGDACLPNIMVENGRFSGFIDCGRLGVADRYQDIALATRDIAEELGGEWADRFLVLYGIAAPDSQRIAFYRLLDEFF + + + + + terminator + 4022..4277 + + + 4022 + 4277 + AF485783.1 + + + + + note + NOS + + + + + promoter + 4974..5808 + + + 4974 + 5808 + AF485783.1 + + + + + note + CaMV 35S + + + + + gene + 5845..7656 + + + 5845 + 7656 + AF485783.1 + + + + + gene + gusA + + + + + CDS + 5845..7656 + + + 5845 + 7656 + AF485783.1 + + + + + gene + gusA + + + note + GUS + + + codon_start + 1 + + + transl_table + 1 + + + product + beta-glucuronidase + + + protein_id + AAL92040.1 + + + db_xref + GI:19569231 + + + translation + MLRPVETPTREIKKLDGLWAFSLDRENCGIDQRWWESALQESRAIAVPGSFNDQFADADIRNYAGNVWYQREVFIPKGWAGQRIVLRFDAVTHYGKVWVNNQEVMEHQGGYTPFEADVTPYVIAGKSVRITVCVNNELNWQTIPPGMVITDENGKKKQSYFHDFFNYAGIHRSVMLYTTPNTWVDDITVVTHVAQDCNHASVDWQVVANGDVSVELRDADQQVVATGQGTSGTLQVVNPHLWQPGEGYLYELCVTAKSQTECDIYPLRVGIRSVAVKGEQFLINHKPFYFTGFGRHEDADLRGKGFDNVLMVHDHALMDWIGANSYRTSHYPYAEEMLDWADEHGIVVIDETAAVGFNLSLGIGFEAGNKPKELYSEEAVNGETQQAHLQAIKELIARDKNHPSVVMWSIANEPDTRPQGAREYFAPLAEATRKLDPTRPITCVNVMFCDAHTDTISDLFDVLCLNRYYGWYVQSGDLETAEKVLEKELLAWQEKLHQPIIITEYGVDTLAGLHSMYTDMWSEEYQCAWLDMYHRVFDRVSAVVGEQVWNFADFATSQGILRVGGNKKGIFTRDRKPKSAAFLLQKRWTGMNFGEKPQQGGKQ + + + + + terminator + 7727..7979 + + + 7727 + 7979 + AF485783.1 + + + + + note + NOS + + + + + misc_feature + complement(8621..8646) + + + 8646 + 8621 + + AF485783.1 + + + + + note + T-DNA left border + + + + + misc_feature + complement(9156..10198) + + + 10198 + 9156 + + AF485783.1 + + + + + note + similar to tetA in GenBank Accession Number L13842 + + + + + misc_feature + complement(10199..11680) + + + 11680 + 10199 + + AF485783.1 + + + + + note + similar to trfA in GenBank Accession Number X00713 + + + + + misc_feature + complement(11681..12673) + + + 12673 + 11681 + + AF485783.1 + + + + + note + similar to NPTIII gene in GenBank Accession Number V01547 + + + + + misc_feature + complement(12674..13443) + + + 13443 + 12674 + + AF485783.1 + + + + + note + similar to transposable element IS1 in GenBank Accession Number X58999 + + + + + misc_feature + complement(13444..13794) + + + 13794 + 13444 + + AF485783.1 + + + + + note + similarity to NPT III gene in GenBank Accession Number V01547 + + + + + misc_feature + complement(13795..14066) + + + 14066 + 13795 + + AF485783.1 + + + + + note + similar to kilA in GenBank Accession Number M62846 + + + + + rep_origin + complement(14141..14758) + + + 14758 + 14141 + + AF485783.1 + + + + + note + ori V; similar to sequence in GenBank Accession Number M20134 + + + + + tgagcgtcgcaaaggcgctcggtcttgccttgctcgtcggtgatgtacttcaccagctccgcgaagtcgctcttcttgatggagcgcatggggacgtgcttggcaatcacgcgcaccccccggccgttttagcggctaaaaaagtcatggctctgccctcgggcggaccacgcccatcatgaccttgccaagctcgtcctgcttctcttcgatcttcgccagcagggcgaggatcgtggcatcaccgaaccgcgccgtgcgcgggtcgtcggtgagccagagtttcagcaggccgcccaggcggcccaggtcgccattgatgcgggccagctcgcggacgtgctcatagtccacgacgcccgtgattttgtagccctggccgacggccagcaggtaggccgacaggctcatgccggccgccgccgccttttcctcaatcgctcttcgttcgtctggaaggcagtacaccttgataggtgggctgcccttcctggttggcttggtttcatcagccatccgcttgccctcatctgttacgccggcggtagccggccagcctcgcagagcaggattcccgttgagcaccgccaggtgcgaataagggacagtgaagaaggaacacccgctcgcgggtgggcctacttcacctatcctgcccggctgacgccgttggatacaccaaggaaagtctacacgaaccctttggcaaaatcctgtatatcgtgcgaaaaaggatggatataccgaaaaaatcgctataatgaccccgaagcagggttatgcagcggaaaagcgccacgcttcccgaagggagaaaggcggacaggtatccggtaagcggcagggtcggaacaggagagcgcacgagggagcttccagggggaaacgcctggtatctttatagtcctgtcgggtttcgccacctctgacttgagcgtcgatttttgtgatgctcgtcaggggggcggagcctatggaaaaacgccagcaacgcggcctttttacggttcctggccttttgctggccttttgctcacatgttctttcctgcgttatcccctgattctgtggataaccgtattaccgcctttgagtgagctgataccgctcgccgcagccgaacgaccgagcgcagcgagtcagtgagcgaggaagcggaagagcgccagaaggccgccagagaggccgagcgcggccgtgaggcttggacgctagggcagggcatgaaaaagcccgtagcgggctgctacgggcgtctgacgcggtggaaagggggaggggatgttgtctacatggctctgctgtagtgagtgggttgcgctccggcagcggtcctgatcaatcgtcaccctttctcggtccttcaacgttcctgacaacgagcctccttttcgccaatccatcgacaatcaccgcgagtccctgctcgaacgctgcgtccggaccggcttcgtcgaaggcgtctatcgcggcccgcaacagcggcgagagcggagcctgttcaacggtgccgccgcgctcgccggcatcgctgtcgccggcctgctcctcaagcacggccccaacagtgaagtagctgattgtcatcagcgcattgacggcgtccccggccgaaaaacccgcctcgcagaggaagcgaagctgcgcgtcggccgtttccatctgcggtgcgcccggtcgcgtgccggcatggatgcgcgcgccatcgcggtaggcgagcagcgcctgcctgaagctgcgggcattcccgatcagaaatgagcgccagtcgtcgtcggctctcggcaccgaatgcgtatgattctccgccagcatggcttcggccagtgcgtcgagcagcgcccgcttgttcctgaagtgccagtaaagcgccggctgctgaacccccaaccgttccgccagtttgcgtgtcgtcagaccgtctacgccgacctcgttcaacaggtccagggcggcacggatcactgtattcggctgcaactttgtcatgcttgacactttatcactgataaacataatatgtccaccaacttatcagtgataaagaatccgcgcgttcaatcggaccagcggaggctggtccggaggccagacgtgaaacccaacatacccctgatcgtaattctgagcactgtcgcgctcgacgctgtcggcatcggcctgattatgccggtgctgccgggcctcctgcgcgatctggttcactcgaacgacgtcaccgcccactatggcattctgctggcgctgtatgcgttggtgcaatttgcctgcgcacctgtgctgggcgcgctgtcggatcgtttcgggcggcggccaatcttgctcgtctcgctggccggcgccagatctggggaaccctgtggttggcatgcacatacaaatggacgaacggataaaccttttcacgcccttttaaatatccgattattctaataaacgctcttttctcttaggtttacccgccaatatatcctgtcaaacactgatagtttaaactgaaggcgggaaacgacaatctgatcatgagcggagaattaagggagtcacgttatgacccccgccgatgacgcgggacaagccgttttacgtttggaactgacagaaccgcaacgttgaaggagccactcagccgcgggtttctggagtttaatgagctaagcacatacgtcagaaaccattattgcgcgttcaaaagtcgcctaaggtcactatcagctagcaaatatttcttgtcaaaaatgctccactgacgttccataaattcccctcggtatccaattagagtctcatattcactctcaatccaaataatctgcaccggatctggatcgtttcgcatgattgaacaagatggattgcacgcaggttctccggccgcttgggtggagaggctattcggctatgactgggcacaacagacaatcggctgctctgatgccgccgtgttccggctgtcagcgcaggggcgcccggttctttttgtcaagaccgacctgtccggtgccctgaatgaactgcaggacgaggcagcgcggctatcgtggctggccacgacgggcgttccttgcgcagctgtgctcgacgttgtcactgaagcgggaagggactggctgctattgggcgaagtgccggggcaggatctcctgtcatctcaccttgctcctgccgagaaagtatccatcatggctgatgcaatgcggcggctgcatacgcttgatccggctacctgcccattcgaccaccaagcgaaacatcgcatcgagcgagcacgtactcggatggaagccggtcttgtcgatcaggatgatctggacgaagagcatcaggggctcgcgccagccgaactgttcgccaggctcaaggcgcgcatgcccgacggcgatgatctcgtcgtgacccatggcgatgcctgcttgccgaatatcatggtggaaaatggccgcttttctggattcatcgactgtggccggctgggtgtggcggaccgctatcaggacatagcgttggctacccgtgatattgctgaagagcttggcggcgaatgggctgaccgcttcctcgtgctttacggtatcgccgctcccgattcgcagcgcatcgccttctatcgccttcttgacgagttcttctgagcgggactctggggttcgaaatgaccgaccaagcgacgcccaacctgccatcacgagatttcgattccaccgccgccttctatgaaaggttgggcttcggaatcgttttccgggacgccggctggatgatcctccagcgcggggatctcatgctggagttcttcgcccacgggatctctgcggaacaggcggtcgaaggtgccgatatcattacgacagcaacggccgacaagcacaacgccacgatcctgagcgacaatatgatcgggcccggcgtccacatcaacggcgtcggcggcgactgcccaggcaagaccgagatgcaccgcgatatcttgctgcgttcggatattttcgtggagttcccgccacagacccggatgatccccgatcgttcaaacatttggcaataaagtttcttaagattgaatcctgttgccggtcttgcgatgattatcatataatttctgttgaattacgttaagcatgtaataattaacatgtaatgcatgacgttatttatgagatgggtttttatgattagagtcccgcaattatacatttaatacgcgatagaaaacaaaatatagcgcgcaaactaggataaattatcgcgcgcggtgtcatctatgttactagatcgggcctcctgtcaatgctggcggcggctctggtggtggttctggtggcggctctgagggtggtggctctgagggtggcggttctgagggtggcggctctgagggaggcggttccggtggtggctctggttccggtgattttgattatgaaaagatggcaaacgctaataagggggctatgaccgaaaatgccgatgaaaacgcgctacagtctgacgctaaaggcaaacttgattctgtcgctactgattacggtgctgctatcgatggtttcattggtgacgtttccggccttgctaatggtaatggtgctactggtgattttgctggctctaattcccaaatggctcaagtcggtgacggtgataattcacctttaatgaataatttccgtcaatatttaccttccctccctcaatcggttgaatgtcgcccttttgtctttggcccaatacgcaaaccgcctctccccgcgcgttggccgattcattaatgcagctggcacgacaggtttcccgactggaaagcgggcagtgagcgcaacgcaattaatgtgagttagctcactcattaggcaccccaggctttacactttatgcttccggctcgtatgttgtgtggaattgtgagcggataacaatttcacacaggaaacagctatgaccatgattacgccaagcttgcatgcctgcaggtccccagattagccttttcaatttcagaaagaatgctaacccacagatggttagagaggcttacgcagcaggtctcatcaagacgatctacccgagcaataatctccaggaaatcaaataccttcccaagaaggttaaagatgcagtcaaaagattcaggactaactgcatcaagaacacagagaaagatatatttctcaagatcagaagtactattccagtatggacgattcaaggcttgcttcacaaaccaaggcaagtaatagagattggagtctctaaaaaggtagttcccactgaatcaaaggccatggagtcaaagattcaaatagaggacctaacagaactcgccgtaaagactggcgaacagttcatacagagtctcttacgactcaatgacaagaagaaaatcttcgtcaacatggtggagcacgacacacttgtctactccaaaaatatcaaagatacagtctcagaagaccaaagggcaattgagacttttcaacaaagggtaatatccggaaacctcctcggattccattgcccagctatctgtcactttattgtgaagatagtggaaaaggaaggtggctcctacaaatgccatcattgcgataaaggaaaggccatcgttgaagatgcctctgccgacagtggtcccaaagatggacccccacccacgaggagcatcgtggaaaaagaagacgttccaaccacgtcttcaaagcaagtggattgatgtgatatctccactgacgtaagggatgacgcacaatcccactatccttcgcaagacccttcctctatataaggaagttcatttcatttggagagaacacgggggactctagaggatccccgggtggtcagtcccttatgttacgtcctgtagaaaccccaacccgtgaaatcaaaaaactcgacggcctgtgggcattcagtctggatcgcgaaaactgtggaattgatcagcgttggtgggaaagcgcgttacaagaaagccgggcaattgctgtgccaggcagttttaacgatcagttcgccgatgcagatattcgtaattatgcgggcaacgtctggtatcagcgcgaagtctttataccgaaaggttgggcaggccagcgtatcgtgctgcgtttcgatgcggtcactcattacggcaaagtgtgggtcaataatcaggaagtgatggagcatcagggcggctatacgccatttgaagccgatgtcacgccgtatgttattgccgggaaaagtgtacgtatcaccgtttgtgtgaacaacgaactgaactggcagactatcccgccgggaatggtgattaccgacgaaaacggcaagaaaaagcagtcttacttccatgatttctttaactatgccggaatccatcgcagcgtaatgctctacaccacgccgaacacctgggtggacgatatcaccgtggtgacgcatgtcgcgcaagactgtaaccacgcgtctgttgactggcaggtggtggccaatggtgatgtcagcgttgaactgcgtgatgcggatcaacaggtggttgcaactggacaaggcactagcgggactttgcaagtggtgaatccgcacctctggcaaccgggtgaaggttatctctatgaactgtgcgtcacagccaaaagccagacagagtgtgatatctacccgcttcgcgtcggcatccggtcagtggcagtgaagggcgaacagttcctgattaaccacaaaccgttctactttactggctttggtcgtcatgaagatgcggacttgcgtggcaaaggattcgataacgtgctgatggtgcacgaccacgcattaatggactggattggggccaactcctaccgtacctcgcattacccttacgctgaagagatgctcgactgggcagatgaacatggcatcgtggtgattgatgaaactgctgctgtcggctttaacctctctttaggcattggtttcgaagcgggcaacaagccgaaagaactgtacagcgaagaggcagtcaacggggaaactcagcaagcgcacttacaggcgattaaagagctgatagcgcgtgacaaaaaccacccaagcgtggtgatgtggagtattgccaacgaaccggatacccgtccgcaaggtgcacgggaatatttcgcgccactggcggaagcaacgcgtaaactcgacccgacgcgtccgatcacctgcgtcaatgtaatgttctgcgacgctcacaccgataccatcagcgatctctttgatgtgctgtgcctgaaccgttattacggatggtatgtccaaagcggcgatttggaaacggcagagaaggtactggaaaaagaacttctggcctggcaggagaaactgcatcagccgattatcatcaccgaatacggcgtggatacgttagccgggctgcactcaatgtacaccgacatgtggagtgaagagtatcagtgtgcatggctggatatgtatcaccgcgtctttgatcgcgtcagcgccgtcgtcggtgaacaggtatggaatttcgccgattttgcgacctcgcaaggcatattgcgcgttggcggtaacaagaaagggatcttcactcgcgaccgcaaaccgaagtcggcggcttttctgctgcaaaaacgctggactggcatgaacttcggtgaaaaaccgcagcagggaggcaaacaatgaatcaacaactctcctggcgcaccatcgtcggctacagcctcgggaattgctaccgagctcgaatttccccgatcgttcaaacatttggcaataaagtttcttaagattgaatcctgttgccggtcttgcgatgattatcatataatttctgttgaattacgttaagcatgtaataattaacatgtaatgcatgacgttatttatgagatgggtttttatgattagagtcccgcaattatacatttaatacgcgatagaaaacaaaatatagcgcgcaaactaggataaattatcgcgcgcggtgtcatctatgttactagatcgggaattcactggccgtcgttttacaacgtcgtgactgggaaaaccctggcgttacccaacttaatcgccttgcagcacatccccctttcgccagctggcgtaatagcgaagaggcccgcaccgatcgcccttcccaacagttgcgcagcctgaatggcgcccgctcctttcgctttcttcccttcctttctcgccacgttcgccggctttccccgtcaagctctaaatcgggggctccctttagggttccgatttagtgctttacggcacctcgaccccaaaaaacttgatttgggtgatggttcacgtagtgggccatcgccctgatagacggtttttcgccctttgacgttggagtccacgttctttaatagtggactcttgttccaaactggaacaacactcaaccctatctcgggctattcttttgatttataagggattttgccgatttcggaaccaccatcaaacaggattttcgcctgctggggcaaaccagcgtggaccgcttgctgcaactctctcagggccaggcggtgaagggcaatcagctgttgcccgtctcactggtgaaaagaaaaaccaccccagtacattaaaaacgtccgcaatgtgttattaagttgtctaagcgtcaatttgtttacaccacaatatatcctgccaccagccagccaacagctccccgaccggcagctcggcacaaaatcaccactcgatacaggcagcccatcagtccgggacggcgtcagcgggagagccgttgtaaggcggcagactttgctcatgttaccgatgctattcggaagaacggcaactaagctgccgggtttgaaacacggatgatctcgcggagggtagcatgttgattgtaacgatgacagagcgttgctgcctgtgatcaaatatcatctccctcgcagagatccgaattatcagccttcttattcatttctcgcttaaccgtgacaggctgtcgatcttgagaactatgccgacataataggaaatcgctggataaagccgctgaggaagctgagtggcgctatttctttagaagtgaacgttgacgatatcaactcccctatccattgctcaccgaatggtacaggtcggggacccgaagttccgactgtcggcctgatgcatccccggctgatcgaccccagatctggggctgagaaagcccagtaaggaaacaactgtaggttcgagtcgcgagatcccccggaaccaaaggaagtaggttaaacccgctccgatcaggccgagccacgccaggccgagaacattggttcctgtaggcatcgggattggcggatcaaacactaaagctactggaacgagcagaagtcctccggccgccagttgccaggcggtaaaggtgagcagaggcacgggaggttgccacttgcgggtcagcacggttccgaacgccatggaaaccgcccccgccaggcccgctgcgacgccgacaggatctagcgctgcgtttggtgtcaacaccaacagcgccacgcccgcagttccgcaaatagcccccaggaccgccatcaatcgtatcgggctacctagcagagcggcagagatgaacacgaccatcagcggctgcacagcgcctaccgtcgccgcgaccccgcccggcaggcggtagaccgaaataaacaacaagctccagaatagcgaaatattaagtgcgccgaggatgaagatgcgcatccaccagattcccgttggaatctgtcggacgatcatcacgagcaataaacccgccggcaacgcccgcagcagcataccggcgacccctcggcctcgctgttcgggctccacgaaaacgccggacagatgcgccttgtgagcgtccttggggccgtcctcctgtttgaagaccgacagcccaatgatctcgccgtcgatgtaggcgccgaatgccacggcatctcgcaaccgttcagcgaacgcctccatgggctttttctcctcgtgctcgtaaacggacccgaacatctctggagctttcttcagggccgacaatcggatctcgcggaaatcctgcacgtcggccgctccaagccgtcgaatctgagccttaatcacaattgtcaattttaatcctctgtttatcggcagttcgtagagcgcgccgtgcgtcccgagcgatactgagcgaagcaagtgcgtcgagcagtgcccgcttgttcctgaaatgccagtaaagcgctggctgctgaacccccagccggaactgaccccacaaggccctagcgtttgcaatgcaccaggtcatcattgacccaggcgtgttccaccaggccgctgcctcgcaactcttcgcaggcttcgccgacctgctcgcgccacttcttcacgcgggtggaatccgatccgcacatgaggcggaaggtttccagcttgagcgggtacggctcccggtgcgagctgaaatagtcgaacatccgtcgggccgtcggcgacagcttgcggtacttctcccatatgaatttcgtgtagtggtcgccagcaaacagcacgacgatttcctcgtcgatcaggacctggcaacgggacgttttcttgccacggtccaggacgcggaagcggtgcagcagcgacaccgattccaggtgcccaacgcggtcggacgtgaagcccatcgccgtcgcctgtaggcgcgacaggcattcctcggccttcgtgtaataccggccattgatcgaccagcccaggtcctggcaaagctcgtagaacgtgaaggtgatcggctcgccgataggggtgcgcttcgcgtactccaacacctgctgccacaccagttcgtcatcgtcggcccgcagctcgacgccggtgtaggtgatcttcacgtccttgttgacgtggaaaatgaccttgttttgcagcgcctcgcgcgggattttcttgttgcgcgtggtgaacagggcagagcgggccgtgtcgtttggcatcgctcgcatcgtgtccggccacggcgcaatatcgaacaaggaaagctgcatttccttgatctgctgcttcgtgtgtttcagcaacgcggcctgcttggcctcgctgacctgttttgccaggtcctcgccggcggtttttcgcttcttggtcgtcatagttcctcgcgtgtcgatggtcatcgacttcgccaaacctgccgcctcctgttcgagacgacgcgaacgctccacggcggccgatggcgcgggcagggcagggggagccagttgcacgctgtcgcgctcgatcttggccgtagcttgctggaccatcgagccgacggactggaaggtttcgcggggcgcacgcatgacggtgcggcttgcgatggtttcggcatcctcggcggaaaaccccgcgtcgatcagttcttgcctgtatgccttccggtcaaacgtccgattcattcaccctccttgcgggattgccccgactcacgccggggcaatgtgcccttattcctgatttgacccgcctggtgccttggtgtccagataatccaccttatcggcaatgaagtcggtcccgtagaccgtctggccgtccttctcgtacttggtattccgaatcttgccctgcacgaataccagcgaccccttgcccaaatacttgccgtgggcctcggcctgagagccaaaacacttgatgcggaagaagtcggtgcgctcctgcttgtcgccggcatcgttgcgccacatctaggtactaaaacaattcatccagtaaaatataatattttattttctcccaatcaggcttgatccccagtaagtcaaaaaatagctcgacatactgttcttccccgatatcctccctgatcgaccggacgcagaaggcaatgtcataccacttgtccgccctgccgcttctcccaagatcaataaagccacttactttgccatctttcacaaagatgttgctgtctcccaggtcgccgtgggaaaagacaagttcctcttcgggcttttccgtctttaaaaaatcatacagctcgcgcggatctttaaatggagtgtcttcttcccagttttcgcaatccacatcggccagatcgttattcagtaagtaatccaattcggctaagcggctgtctaagctattcgtatagggacaatccgatatgtcgatggagtgaaagagcctgatgcactccgcatacagctcgataatcttttcagggctttgttcatcttcatactcttccgagcaaaggacgccatcggcctcactcatgagcagattgctccagccatcatgccgttcaaagtgcaggacctttggaacaggcagctttccttccagccatagcatcatgtccttttcccgttccacatcataggtggtccctttataccggctgtccgtcatttttaaatataggttttcattttctcccaccagcttatataccttagcaggagacattccttccgtatcttttacgcagcggtatttttcgatcagttttttcaattccggtgatattctcattttagccatttattatttccttcctcttttctacagtatttaaagataccccaagaagctaattataacaagacgaactccaattcactgttccttgcattctaaaaccttaaataccagaaaacagctttttcaaagttgttttcaaagttggcgtataacatagtatcgacggagccgattttgaaaccacaattatgggtgatgctgccaacttactgatttagtgtatgatggtgtttttgaggtgctccagtggcttctgtgtctatcagctgtccctcctgttcagctactgacggggtggtgcgtaacggcaaaagcaccgccggacatcagcgctatctctgctctcactgccgtaaaacatggcaactgcagttcacttacaccgcttctcaacccggtacgcaccagaaaatcattgatatggccatgaatggcgttggatgccgggcaacagcccgcattatgggcgttggcctcaacacgattttacgtcacttaaaaaactcaggccgcagtcggtaacctcgcgcatacagccgggcagtgacgtcatcgtctgcgcggaaatggacgaacagtggggctatgtcggggctaaatcgcgccagcgctggctgttttacgcgtatgacagtctccggaagacggttgttgcgcacgtattcggtgaacgcactatggcgacgctggggcgtcttatgagcctgctgtcaccctttgacgtggtgatatggatgacggatggctggccgctgtatgaatcccgcctgaagggaaagctgcacgtaatcagcaagcgatatacgcagcgaattgagcggcataacctgaatctgaggcagcacctggcacggctgggacggaagtcgctgtcgttctcaaaatcggtggagctgcatgacaaagtcatcgggcattatctgaacataaaacactatcaataagttggagtcattacccaattatgatagaatttacaagctataaggttattgtcctgggtttcaagcattagtccatgcaagtttttatgctttgcccattctatagatatattgataagcgcgctgcctatgccttgccccctgaaatccttacatacggcgatatcttctatataaaagatatattatcttatcagtattgtcaatatattcaaggcaatctgcctcctcatcctcttcatcctcttcgtcttggtagctttttaaatatggcgcttcatagagtaattctgtaaaggtccaattctcgttttcatacctcggtataatcttacctatcacctcaaatggttcgctgggtttatcgcacccccgaacacgagcacggcacccgcgaccactatgccaagaatgcccaaggtaaaaattgccggccccgccatgaagtccgtgaatgccccgacggccgaagtgaagggcaggccgccacccaggccgccgccctcactgcccggcacctggtcgctgaatgtcgatgccagcacctgcggcacgtcaatgcttccgggcgtcgcgctcgggctgatcgcccatcccgttactgccccgatcccggcaatggcaaggactgccagcgctgccatttttggggtgaggccgttcgcggccgaggggcgcagcccctggggggatgggaggcccgcgttagcgggccgggagggttcgagaagggggggcaccccccttcggcgtgcgcggtcacgcgcacagggcgcagccctggttaaaaacaaggtttataaatattggtttaaaagcaggttaaaagacaggttagcggtggccgaaaaacgggcggaaacccttgcaaatgctggattttctgcctgtggacagcccctcaaatgtcaataggtgcgcccctcatctgtcagcactctgcccctcaagtgtcaaggatcgcgcccctcatctgtcagtagtcgcgcccctcaagtgtcaataccgcagggcacttatccccaggcttgtccacatcatctgtgggaaactcgcgtaaaatcaggcgttttcgccgatttgcgaggctggccagctccacgtcgccggccgaaatcgagcctgcccctcatctgtcaacgccgcgccgggtgagtcggcccctcaagtgtcaacgtccgcccctcatctgtcagtgagggccaagttttccgcgaggtatccacaacgccggcggccgcggtgtctcgcacacggcttcgacggcgtttctggcgcgtttgcagggccatagacggccgccagcccagcggcgagggcaaccagcccgg + + + \ No newline at end of file diff --git a/www/node_modules/xml2js/incompat.coffee b/www/node_modules/xml2js/incompat.coffee new file mode 100644 index 0000000..5533965 --- /dev/null +++ b/www/node_modules/xml2js/incompat.coffee @@ -0,0 +1,5 @@ +{parseString} = require './lib/xml2js' +xml = '' +parseString xml, (err, result) -> + console.dir result + diff --git a/www/node_modules/xml2js/incompat2.js b/www/node_modules/xml2js/incompat2.js new file mode 100644 index 0000000..31cfbc8 --- /dev/null +++ b/www/node_modules/xml2js/incompat2.js @@ -0,0 +1,7 @@ +var xml2js = require('xml2js'); +var parser = new xml2js.Parser({ + mergeAttrs: true +}); +parser.parseString('', function (err, result) { + console.dir(result); +}); diff --git a/www/node_modules/xml2js/lib/bom.js b/www/node_modules/xml2js/lib/bom.js new file mode 100644 index 0000000..d7f226e --- /dev/null +++ b/www/node_modules/xml2js/lib/bom.js @@ -0,0 +1,15 @@ +// Generated by CoffeeScript 1.7.1 +(function() { + var xml2js; + + xml2js = require('../lib/xml2js'); + + exports.stripBOM = function(str) { + if (str[0] === '\uFEFF') { + return str.substring(1); + } else { + return str; + } + }; + +}).call(this); diff --git a/www/node_modules/xml2js/lib/processors.js b/www/node_modules/xml2js/lib/processors.js new file mode 100644 index 0000000..aeadaef --- /dev/null +++ b/www/node_modules/xml2js/lib/processors.js @@ -0,0 +1,19 @@ +// Generated by CoffeeScript 1.7.1 +(function() { + var prefixMatch; + + prefixMatch = new RegExp(/(?!xmlns)^.*:/); + + exports.normalize = function(str) { + return str.toLowerCase(); + }; + + exports.firstCharLowerCase = function(str) { + return str.charAt(0).toLowerCase() + str.slice(1); + }; + + exports.stripPrefix = function(str) { + return str.replace(prefixMatch, ''); + }; + +}).call(this); diff --git a/www/node_modules/xml2js/lib/xml2js.js b/www/node_modules/xml2js/lib/xml2js.js new file mode 100644 index 0000000..7c1cad3 --- /dev/null +++ b/www/node_modules/xml2js/lib/xml2js.js @@ -0,0 +1,436 @@ +// Generated by CoffeeScript 1.7.1 +(function() { + var bom, builder, events, isEmpty, processName, processors, sax, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + sax = require('sax'); + + events = require('events'); + + builder = require('xmlbuilder'); + + bom = require('./bom'); + + processors = require('./processors'); + + isEmpty = function(thing) { + return typeof thing === "object" && (thing != null) && Object.keys(thing).length === 0; + }; + + processName = function(processors, processedName) { + var process, _i, _len; + for (_i = 0, _len = processors.length; _i < _len; _i++) { + process = processors[_i]; + processedName = process(processedName); + } + return processedName; + }; + + exports.processors = processors; + + exports.defaults = { + "0.1": { + explicitCharkey: false, + trim: true, + normalize: true, + normalizeTags: false, + attrkey: "@", + charkey: "#", + explicitArray: false, + ignoreAttrs: false, + mergeAttrs: false, + explicitRoot: false, + validator: null, + xmlns: false, + explicitChildren: false, + childkey: '@@', + charsAsChildren: false, + async: false, + strict: true, + attrNameProcessors: null, + tagNameProcessors: null + }, + "0.2": { + explicitCharkey: false, + trim: false, + normalize: false, + normalizeTags: false, + attrkey: "$", + charkey: "_", + explicitArray: true, + ignoreAttrs: false, + mergeAttrs: false, + explicitRoot: true, + validator: null, + xmlns: false, + explicitChildren: false, + childkey: '$$', + charsAsChildren: false, + async: false, + strict: true, + attrNameProcessors: null, + tagNameProcessors: null, + rootName: 'root', + xmldec: { + 'version': '1.0', + 'encoding': 'UTF-8', + 'standalone': true + }, + doctype: null, + renderOpts: { + 'pretty': true, + 'indent': ' ', + 'newline': '\n' + }, + headless: false + } + }; + + exports.ValidationError = (function(_super) { + __extends(ValidationError, _super); + + function ValidationError(message) { + this.message = message; + } + + return ValidationError; + + })(Error); + + exports.Builder = (function() { + function Builder(opts) { + var key, value, _ref; + this.options = {}; + _ref = exports.defaults["0.2"]; + for (key in _ref) { + if (!__hasProp.call(_ref, key)) continue; + value = _ref[key]; + this.options[key] = value; + } + for (key in opts) { + if (!__hasProp.call(opts, key)) continue; + value = opts[key]; + this.options[key] = value; + } + } + + Builder.prototype.buildObject = function(rootObj) { + var attrkey, charkey, render, rootElement, rootName; + attrkey = this.options.attrkey; + charkey = this.options.charkey; + if ((Object.keys(rootObj).length === 1) && (this.options.rootName === exports.defaults['0.2'].rootName)) { + rootName = Object.keys(rootObj)[0]; + rootObj = rootObj[rootName]; + } else { + rootName = this.options.rootName; + } + render = function(element, obj) { + var attr, child, entry, index, key, value, _ref, _ref1; + if (typeof obj !== 'object') { + element.txt(obj); + } else { + for (key in obj) { + if (!__hasProp.call(obj, key)) continue; + child = obj[key]; + if (key === attrkey) { + if (typeof child === "object") { + for (attr in child) { + value = child[attr]; + element = element.att(attr, value); + } + } + } else if (key === charkey) { + element = element.txt(child); + } else if (typeof child === 'object' && ((child != null ? child.constructor : void 0) != null) && ((child != null ? (_ref = child.constructor) != null ? _ref.name : void 0 : void 0) != null) && (child != null ? (_ref1 = child.constructor) != null ? _ref1.name : void 0 : void 0) === 'Array') { + for (index in child) { + if (!__hasProp.call(child, index)) continue; + entry = child[index]; + if (typeof entry === 'string') { + element = element.ele(key, entry).up(); + } else { + element = arguments.callee(element.ele(key), entry).up(); + } + } + } else if (typeof child === "object") { + element = arguments.callee(element.ele(key), child).up(); + } else { + element = element.ele(key, child.toString()).up(); + } + } + } + return element; + }; + rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, { + headless: this.options.headless + }); + return render(rootElement, rootObj).end(this.options.renderOpts); + }; + + return Builder; + + })(); + + exports.Parser = (function(_super) { + __extends(Parser, _super); + + function Parser(opts) { + this.parseString = __bind(this.parseString, this); + this.reset = __bind(this.reset, this); + this.assignOrPush = __bind(this.assignOrPush, this); + var key, value, _ref; + if (!(this instanceof exports.Parser)) { + return new exports.Parser(opts); + } + this.options = {}; + _ref = exports.defaults["0.2"]; + for (key in _ref) { + if (!__hasProp.call(_ref, key)) continue; + value = _ref[key]; + this.options[key] = value; + } + for (key in opts) { + if (!__hasProp.call(opts, key)) continue; + value = opts[key]; + this.options[key] = value; + } + if (this.options.xmlns) { + this.options.xmlnskey = this.options.attrkey + "ns"; + } + if (this.options.normalizeTags) { + if (!this.options.tagNameProcessors) { + this.options.tagNameProcessors = []; + } + this.options.tagNameProcessors.unshift(processors.normalize); + } + this.reset(); + } + + Parser.prototype.assignOrPush = function(obj, key, newValue) { + if (!(key in obj)) { + if (!this.options.explicitArray) { + return obj[key] = newValue; + } else { + return obj[key] = [newValue]; + } + } else { + if (!(obj[key] instanceof Array)) { + obj[key] = [obj[key]]; + } + return obj[key].push(newValue); + } + }; + + Parser.prototype.reset = function() { + var attrkey, charkey, ontext, stack; + this.removeAllListeners(); + this.saxParser = sax.parser(this.options.strict, { + trim: false, + normalize: false, + xmlns: this.options.xmlns + }); + this.saxParser.errThrown = false; + this.saxParser.onerror = (function(_this) { + return function(error) { + _this.saxParser.resume(); + if (!_this.saxParser.errThrown) { + _this.saxParser.errThrown = true; + return _this.emit("error", error); + } + }; + })(this); + this.saxParser.ended = false; + this.EXPLICIT_CHARKEY = this.options.explicitCharkey; + this.resultObject = null; + stack = []; + attrkey = this.options.attrkey; + charkey = this.options.charkey; + this.saxParser.onopentag = (function(_this) { + return function(node) { + var key, newValue, obj, processedKey, _ref; + obj = {}; + obj[charkey] = ""; + if (!_this.options.ignoreAttrs) { + _ref = node.attributes; + for (key in _ref) { + if (!__hasProp.call(_ref, key)) continue; + if (!(attrkey in obj) && !_this.options.mergeAttrs) { + obj[attrkey] = {}; + } + newValue = node.attributes[key]; + processedKey = _this.options.attrNameProcessors ? processName(_this.options.attrNameProcessors, key) : key; + if (_this.options.mergeAttrs) { + _this.assignOrPush(obj, processedKey, newValue); + } else { + obj[attrkey][processedKey] = newValue; + } + } + } + obj["#name"] = _this.options.tagNameProcessors ? processName(_this.options.tagNameProcessors, node.name) : node.name; + if (_this.options.xmlns) { + obj[_this.options.xmlnskey] = { + uri: node.uri, + local: node.local + }; + } + return stack.push(obj); + }; + })(this); + this.saxParser.onclosetag = (function(_this) { + return function() { + var cdata, emptyStr, err, node, nodeName, obj, old, s, xpath; + obj = stack.pop(); + nodeName = obj["#name"]; + delete obj["#name"]; + cdata = obj.cdata; + delete obj.cdata; + s = stack[stack.length - 1]; + if (obj[charkey].match(/^\s*$/) && !cdata) { + emptyStr = obj[charkey]; + delete obj[charkey]; + } else { + if (_this.options.trim) { + obj[charkey] = obj[charkey].trim(); + } + if (_this.options.normalize) { + obj[charkey] = obj[charkey].replace(/\s{2,}/g, " ").trim(); + } + if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) { + obj = obj[charkey]; + } + } + if (isEmpty(obj)) { + obj = _this.options.emptyTag !== void 0 ? _this.options.emptyTag : emptyStr; + } + if (_this.options.validator != null) { + xpath = "/" + ((function() { + var _i, _len, _results; + _results = []; + for (_i = 0, _len = stack.length; _i < _len; _i++) { + node = stack[_i]; + _results.push(node["#name"]); + } + return _results; + })()).concat(nodeName).join("/"); + try { + obj = _this.options.validator(xpath, s && s[nodeName], obj); + } catch (_error) { + err = _error; + _this.emit("error", err); + } + } + if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') { + node = {}; + if (_this.options.attrkey in obj) { + node[_this.options.attrkey] = obj[_this.options.attrkey]; + delete obj[_this.options.attrkey]; + } + if (!_this.options.charsAsChildren && _this.options.charkey in obj) { + node[_this.options.charkey] = obj[_this.options.charkey]; + delete obj[_this.options.charkey]; + } + if (Object.getOwnPropertyNames(obj).length > 0) { + node[_this.options.childkey] = obj; + } + obj = node; + } + if (stack.length > 0) { + return _this.assignOrPush(s, nodeName, obj); + } else { + if (_this.options.explicitRoot) { + old = obj; + obj = {}; + obj[nodeName] = old; + } + _this.resultObject = obj; + _this.saxParser.ended = true; + return _this.emit("end", _this.resultObject); + } + }; + })(this); + ontext = (function(_this) { + return function(text) { + var s; + s = stack[stack.length - 1]; + if (s) { + s[charkey] += text; + return s; + } + }; + })(this); + this.saxParser.ontext = ontext; + return this.saxParser.oncdata = (function(_this) { + return function(text) { + var s; + s = ontext(text); + if (s) { + return s.cdata = true; + } + }; + })(this); + }; + + Parser.prototype.parseString = function(str, cb) { + var err; + if ((cb != null) && typeof cb === "function") { + this.on("end", function(result) { + this.reset(); + if (this.options.async) { + return process.nextTick(function() { + return cb(null, result); + }); + } else { + return cb(null, result); + } + }); + this.on("error", function(err) { + this.reset(); + if (this.options.async) { + return process.nextTick(function() { + return cb(err); + }); + } else { + return cb(err); + } + }); + } + if (str.toString().trim() === '') { + this.emit("end", null); + return true; + } + try { + return this.saxParser.write(bom.stripBOM(str.toString())).close(); + } catch (_error) { + err = _error; + if (!(this.saxParser.errThrown || this.saxParser.ended)) { + this.emit('error', err); + return this.saxParser.errThrown = true; + } + } + }; + + return Parser; + + })(events.EventEmitter); + + exports.parseString = function(str, a, b) { + var cb, options, parser; + if (b != null) { + if (typeof b === 'function') { + cb = b; + } + if (typeof a === 'object') { + options = a; + } + } else { + if (typeof a === 'function') { + cb = a; + } + options = {}; + } + parser = new exports.Parser(options); + return parser.parseString(str, cb); + }; + +}).call(this); diff --git a/www/node_modules/xml2js/package.json b/www/node_modules/xml2js/package.json new file mode 100644 index 0000000..a4c768f --- /dev/null +++ b/www/node_modules/xml2js/package.json @@ -0,0 +1,211 @@ +{ + "_args": [ + [ + "xml2js@0.4.4", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver" + ] + ], + "_from": "xml2js@0.4.4", + "_id": "xml2js@0.4.4", + "_inCache": true, + "_installable": true, + "_location": "/xml2js", + "_npmUser": { + "email": "marek@xivilization.net", + "name": "leonidas" + }, + "_npmVersion": "1.4.9", + "_phantomChildren": {}, + "_requested": { + "name": "xml2js", + "raw": "xml2js@0.4.4", + "rawSpec": "0.4.4", + "scope": null, + "spec": "0.4.4", + "type": "version" + }, + "_requiredBy": [ + "/selenium-webdriver" + ], + "_resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", + "_shasum": "3111010003008ae19240eba17497b57c729c555d", + "_shrinkwrap": null, + "_spec": "xml2js@0.4.4", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver", + "author": { + "email": "marek@xivilization.net", + "name": "Marek Kubica", + "url": "http://xivilization.net" + }, + "bugs": { + "url": "https://github.com/Leonidas-from-XIV/node-xml2js/issues" + }, + "contributors": [ + { + "email": "maqr.lollerskates@gmail.com", + "name": "maqr", + "url": "https://github.com/maqr" + }, + { + "name": "Ben Weaver", + "url": "http://benweaver.com/" + }, + { + "name": "Jae Kwon", + "url": "https://github.com/jaekwon" + }, + { + "name": "Jim Robert" + }, + { + "name": "Ștefan Rusu", + "url": "http://www.saltwaterc.eu/" + }, + { + "email": "carter.cole@cartercole.com", + "name": "Carter Cole", + "url": "http://cartercole.com/" + }, + { + "email": "kurt@kurtraschke.com", + "name": "Kurt Raschke", + "url": "http://www.kurtraschke.com/" + }, + { + "email": "contra@australia.edu", + "name": "Contra", + "url": "https://github.com/Contra" + }, + { + "email": "marudiniz@gmail.com", + "name": "Marcelo Diniz", + "url": "https://github.com/mdiniz" + }, + { + "name": "Michael Hart", + "url": "https://github.com/mhart" + }, + { + "email": "zachary@zacharyscott.net", + "name": "Zachary Scott", + "url": "http://zacharyscott.net/" + }, + { + "name": "Raoul Millais", + "url": "https://github.com/raoulmillais" + }, + { + "name": "Salsita Software", + "url": "http://www.salsitasoft.com/" + }, + { + "email": "mike@emotive.com", + "name": "Mike Schilling", + "url": "http://www.emotive.com/" + }, + { + "email": "shyvo1987@gmail.com", + "name": "Jackson Tian", + "url": "http://weibo.com/shyvo" + }, + { + "email": "mikhail.zyatin@gmail.com", + "name": "Mikhail Zyatin", + "url": "https://github.com/Sitin" + }, + { + "email": "ctavares@microsoft.com", + "name": "Chris Tavares", + "url": "https://github.com/christav" + }, + { + "email": "yyfrankyy@gmail.com", + "name": "Frank Xu", + "url": "http://f2e.us/" + }, + { + "email": "guido@bitstorm.it", + "name": "Guido D'Albore", + "url": "http://www.bitstorm.it/" + }, + { + "name": "Jack Senechal", + "url": "http://jacksenechal.com/" + }, + { + "email": "tc@xantira.com", + "name": "Matthias Hölzl", + "url": "https://github.com/hoelzl" + }, + { + "email": "info@creynders.be", + "name": "Camille Reynders", + "url": "http://www.creynders.be/" + }, + { + "name": "Taylor Gautier", + "url": "https://github.com/tsgautier" + }, + { + "name": "Todd Bryan", + "url": "https://github.com/toddrbryan" + }, + { + "email": "leore.avidar@gmail.com", + "name": "Leore Avidar", + "url": "http://leoreavidar.com/" + }, + { + "email": "dave.aitken@gmail.com", + "name": "Dave Aitken", + "url": "http://www.actionshrimp.com/" + } + ], + "dependencies": { + "sax": "0.6.x", + "xmlbuilder": ">=1.0.0" + }, + "description": "Simple XML to JavaScript object converter.", + "devDependencies": { + "coffee-script": ">=1.7.1", + "diff": ">=1.0.8", + "docco": ">=0.6.2", + "zap": ">=0.2.6" + }, + "directories": { + "lib": "./lib" + }, + "dist": { + "shasum": "3111010003008ae19240eba17497b57c729c555d", + "tarball": "http://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz" + }, + "homepage": "https://github.com/Leonidas-from-XIV/node-xml2js", + "keywords": [ + "xml", + "json" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/Leonidas-from-XIV/node-xml2js/master/LICENSE" + } + ], + "main": "./lib/xml2js", + "maintainers": [ + { + "email": "marek@xivilization.net", + "name": "leonidas" + } + ], + "name": "xml2js", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/Leonidas-from-XIV/node-xml2js.git" + }, + "scripts": { + "test": "zap" + }, + "version": "0.4.4" +} diff --git a/www/node_modules/xml2js/text.coffee b/www/node_modules/xml2js/text.coffee new file mode 100644 index 0000000..c5d8c66 --- /dev/null +++ b/www/node_modules/xml2js/text.coffee @@ -0,0 +1,11 @@ +fs = require 'fs' +xml2js = require 'xml2js' + +parser = new xml2js.Parser + +fs.readFile 'canon.xml', (err, data) -> + console.log err + parser.parseString (err, result) -> + console.log err + console.dir result + diff --git a/www/node_modules/xml2js/text.xml b/www/node_modules/xml2js/text.xml new file mode 100644 index 0000000..bd3b482 --- /dev/null +++ b/www/node_modules/xml2js/text.xml @@ -0,0 +1,485 @@ + + + + + AF485783 + 14758 + double + DNA + circular + SYN + 15-MAY-2003 + 21-MAR-2002 + Binary vector pBI121, complete sequence + AF485783 + AF485783.1 + + gb|AF485783.1| + gi|19569229 + + Binary vector pBI121 + Binary vector pBI121 + other sequences; artificial sequences; vectors + + + 1 + 1..14758 + + Chen,P.Y. + Wang,C.K. + Soong,S.C. + To,K.Y. + + Complete sequence of the binary vector pBI121 and its application in cloning T-DNA insertion from transgenic plants + Mol. Breed. 11, 287-293 (2003) + + + 2 + 1..14758 + + To,K.Y. + + Direct Submission + Submitted (20-FEB-2002) Institute of BioAgricultural Sciences, Academia Sinica, Taipei 11529, Taiwan + + + + + source + 1..14758 + + + 1 + 14758 + AF485783.1 + + + + + organism + Binary vector pBI121 + + + mol_type + genomic DNA + + + db_xref + taxon:189807 + + + note + constructed using pB221 from Clontech Laboratories and Bin19 described in GenBank Accession Number U09365 + + + + + misc_feature + complement(13..796) + + + 796 + 13 + + AF485783.1 + + + + + note + similar to traF in GenBank Accession Number X54459 + + + + + rep_origin + complement(790..1168) + + + 1168 + 790 + + AF485783.1 + + + + + note + ColE1 ori; similar to sequence in GenBank Accession Number V00268 + + + + + misc_feature + complement(1161..2344) + + + 2344 + 1161 + + AF485783.1 + + + + + note + similar to tetA in GenBank Accession Number X75761 + + + + + misc_feature + complement(2454..2478) + + + 2478 + 2454 + + AF485783.1 + + + + + note + T-DNA right border + + + + + promoter + 2519..2825 + + + 2519 + 2825 + AF485783.1 + + + + + note + NOS + + + + + gene + 2838..3632 + + + 2838 + 3632 + AF485783.1 + + + + + gene + nptII + + + + + CDS + 2838..3632 + + + 2838 + 3632 + AF485783.1 + + + + + gene + nptII + + + codon_start + 1 + + + transl_table + 1 + + + product + neomycin phosphotransferase II + + + protein_id + AAL92039.1 + + + db_xref + GI:19569230 + + + translation + MIEQDGLHAGSPAAWVERLFGYDWAQQTIGCSDAAVFRLSAQGRPVLFVKTDLSGALNELQDEAARLSWLATTGVPCAAVLDVVTEAGRDWLLLGEVPGQDLLSSHLAPAEKVSIMADAMRRLHTLDPATCPFDHQAKHRIERARTRMEAGLVDQDDLDEEHQGLAPAELFARLKARMPDGDDLVVTHGDACLPNIMVENGRFSGFIDCGRLGVADRYQDIALATRDIAEELGGEWADRFLVLYGIAAPDSQRIAFYRLLDEFF + + + + + terminator + 4022..4277 + + + 4022 + 4277 + AF485783.1 + + + + + note + NOS + + + + + promoter + 4974..5808 + + + 4974 + 5808 + AF485783.1 + + + + + note + CaMV 35S + + + + + gene + 5845..7656 + + + 5845 + 7656 + AF485783.1 + + + + + gene + gusA + + + + + CDS + 5845..7656 + + + 5845 + 7656 + AF485783.1 + + + + + gene + gusA + + + note + GUS + + + codon_start + 1 + + + transl_table + 1 + + + product + beta-glucuronidase + + + protein_id + AAL92040.1 + + + db_xref + GI:19569231 + + + translation + MLRPVETPTREIKKLDGLWAFSLDRENCGIDQRWWESALQESRAIAVPGSFNDQFADADIRNYAGNVWYQREVFIPKGWAGQRIVLRFDAVTHYGKVWVNNQEVMEHQGGYTPFEADVTPYVIAGKSVRITVCVNNELNWQTIPPGMVITDENGKKKQSYFHDFFNYAGIHRSVMLYTTPNTWVDDITVVTHVAQDCNHASVDWQVVANGDVSVELRDADQQVVATGQGTSGTLQVVNPHLWQPGEGYLYELCVTAKSQTECDIYPLRVGIRSVAVKGEQFLINHKPFYFTGFGRHEDADLRGKGFDNVLMVHDHALMDWIGANSYRTSHYPYAEEMLDWADEHGIVVIDETAAVGFNLSLGIGFEAGNKPKELYSEEAVNGETQQAHLQAIKELIARDKNHPSVVMWSIANEPDTRPQGAREYFAPLAEATRKLDPTRPITCVNVMFCDAHTDTISDLFDVLCLNRYYGWYVQSGDLETAEKVLEKELLAWQEKLHQPIIITEYGVDTLAGLHSMYTDMWSEEYQCAWLDMYHRVFDRVSAVVGEQVWNFADFATSQGILRVGGNKKGIFTRDRKPKSAAFLLQKRWTGMNFGEKPQQGGKQ + + + + + terminator + 7727..7979 + + + 7727 + 7979 + AF485783.1 + + + + + note + NOS + + + + + misc_feature + complement(8621..8646) + + + 8646 + 8621 + + AF485783.1 + + + + + note + T-DNA left border + + + + + misc_feature + complement(9156..10198) + + + 10198 + 9156 + + AF485783.1 + + + + + note + similar to tetA in GenBank Accession Number L13842 + + + + + misc_feature + complement(10199..11680) + + + 11680 + 10199 + + AF485783.1 + + + + + note + similar to trfA in GenBank Accession Number X00713 + + + + + misc_feature + complement(11681..12673) + + + 12673 + 11681 + + AF485783.1 + + + + + note + similar to NPTIII gene in GenBank Accession Number V01547 + + + + + misc_feature + complement(12674..13443) + + + 13443 + 12674 + + AF485783.1 + + + + + note + similar to transposable element IS1 in GenBank Accession Number X58999 + + + + + misc_feature + complement(13444..13794) + + + 13794 + 13444 + + AF485783.1 + + + + + note + similarity to NPT III gene in GenBank Accession Number V01547 + + + + + misc_feature + complement(13795..14066) + + + 14066 + 13795 + + AF485783.1 + + + + + note + similar to kilA in GenBank Accession Number M62846 + + + + + rep_origin + complement(14141..14758) + + + 14758 + 14141 + + AF485783.1 + + + + + note + ori V; similar to sequence in GenBank Accession Number M20134 + + + + + tgagcgtcgcaaaggcgctcggtcttgccttgctcgtcggtgatgtacttcaccagctccgcgaagtcgctcttcttgatggagcgcatggggacgtgcttggcaatcacgcgcaccccccggccgttttagcggctaaaaaagtcatggctctgccctcgggcggaccacgcccatcatgaccttgccaagctcgtcctgcttctcttcgatcttcgccagcagggcgaggatcgtggcatcaccgaaccgcgccgtgcgcgggtcgtcggtgagccagagtttcagcaggccgcccaggcggcccaggtcgccattgatgcgggccagctcgcggacgtgctcatagtccacgacgcccgtgattttgtagccctggccgacggccagcaggtaggccgacaggctcatgccggccgccgccgccttttcctcaatcgctcttcgttcgtctggaaggcagtacaccttgataggtgggctgcccttcctggttggcttggtttcatcagccatccgcttgccctcatctgttacgccggcggtagccggccagcctcgcagagcaggattcccgttgagcaccgccaggtgcgaataagggacagtgaagaaggaacacccgctcgcgggtgggcctacttcacctatcctgcccggctgacgccgttggatacaccaaggaaagtctacacgaaccctttggcaaaatcctgtatatcgtgcgaaaaaggatggatataccgaaaaaatcgctataatgaccccgaagcagggttatgcagcggaaaagcgccacgcttcccgaagggagaaaggcggacaggtatccggtaagcggcagggtcggaacaggagagcgcacgagggagcttccagggggaaacgcctggtatctttatagtcctgtcgggtttcgccacctctgacttgagcgtcgatttttgtgatgctcgtcaggggggcggagcctatggaaaaacgccagcaacgcggcctttttacggttcctggccttttgctggccttttgctcacatgttctttcctgcgttatcccctgattctgtggataaccgtattaccgcctttgagtgagctgataccgctcgccgcagccgaacgaccgagcgcagcgagtcagtgagcgaggaagcggaagagcgccagaaggccgccagagaggccgagcgcggccgtgaggcttggacgctagggcagggcatgaaaaagcccgtagcgggctgctacgggcgtctgacgcggtggaaagggggaggggatgttgtctacatggctctgctgtagtgagtgggttgcgctccggcagcggtcctgatcaatcgtcaccctttctcggtccttcaacgttcctgacaacgagcctccttttcgccaatccatcgacaatcaccgcgagtccctgctcgaacgctgcgtccggaccggcttcgtcgaaggcgtctatcgcggcccgcaacagcggcgagagcggagcctgttcaacggtgccgccgcgctcgccggcatcgctgtcgccggcctgctcctcaagcacggccccaacagtgaagtagctgattgtcatcagcgcattgacggcgtccccggccgaaaaacccgcctcgcagaggaagcgaagctgcgcgtcggccgtttccatctgcggtgcgcccggtcgcgtgccggcatggatgcgcgcgccatcgcggtaggcgagcagcgcctgcctgaagctgcgggcattcccgatcagaaatgagcgccagtcgtcgtcggctctcggcaccgaatgcgtatgattctccgccagcatggcttcggccagtgcgtcgagcagcgcccgcttgttcctgaagtgccagtaaagcgccggctgctgaacccccaaccgttccgccagtttgcgtgtcgtcagaccgtctacgccgacctcgttcaacaggtccagggcggcacggatcactgtattcggctgcaactttgtcatgcttgacactttatcactgataaacataatatgtccaccaacttatcagtgataaagaatccgcgcgttcaatcggaccagcggaggctggtccggaggccagacgtgaaacccaacatacccctgatcgtaattctgagcactgtcgcgctcgacgctgtcggcatcggcctgattatgccggtgctgccgggcctcctgcgcgatctggttcactcgaacgacgtcaccgcccactatggcattctgctggcgctgtatgcgttggtgcaatttgcctgcgcacctgtgctgggcgcgctgtcggatcgtttcgggcggcggccaatcttgctcgtctcgctggccggcgccagatctggggaaccctgtggttggcatgcacatacaaatggacgaacggataaaccttttcacgcccttttaaatatccgattattctaataaacgctcttttctcttaggtttacccgccaatatatcctgtcaaacactgatagtttaaactgaaggcgggaaacgacaatctgatcatgagcggagaattaagggagtcacgttatgacccccgccgatgacgcgggacaagccgttttacgtttggaactgacagaaccgcaacgttgaaggagccactcagccgcgggtttctggagtttaatgagctaagcacatacgtcagaaaccattattgcgcgttcaaaagtcgcctaaggtcactatcagctagcaaatatttcttgtcaaaaatgctccactgacgttccataaattcccctcggtatccaattagagtctcatattcactctcaatccaaataatctgcaccggatctggatcgtttcgcatgattgaacaagatggattgcacgcaggttctccggccgcttgggtggagaggctattcggctatgactgggcacaacagacaatcggctgctctgatgccgccgtgttccggctgtcagcgcaggggcgcccggttctttttgtcaagaccgacctgtccggtgccctgaatgaactgcaggacgaggcagcgcggctatcgtggctggccacgacgggcgttccttgcgcagctgtgctcgacgttgtcactgaagcgggaagggactggctgctattgggcgaagtgccggggcaggatctcctgtcatctcaccttgctcctgccgagaaagtatccatcatggctgatgcaatgcggcggctgcatacgcttgatccggctacctgcccattcgaccaccaagcgaaacatcgcatcgagcgagcacgtactcggatggaagccggtcttgtcgatcaggatgatctggacgaagagcatcaggggctcgcgccagccgaactgttcgccaggctcaaggcgcgcatgcccgacggcgatgatctcgtcgtgacccatggcgatgcctgcttgccgaatatcatggtggaaaatggccgcttttctggattcatcgactgtggccggctgggtgtggcggaccgctatcaggacatagcgttggctacccgtgatattgctgaagagcttggcggcgaatgggctgaccgcttcctcgtgctttacggtatcgccgctcccgattcgcagcgcatcgccttctatcgccttcttgacgagttcttctgagcgggactctggggttcgaaatgaccgaccaagcgacgcccaacctgccatcacgagatttcgattccaccgccgccttctatgaaaggttgggcttcggaatcgttttccgggacgccggctggatgatcctccagcgcggggatctcatgctggagttcttcgcccacgggatctctgcggaacaggcggtcgaaggtgccgatatcattacgacagcaacggccgacaagcacaacgccacgatcctgagcgacaatatgatcgggcccggcgtccacatcaacggcgtcggcggcgactgcccaggcaagaccgagatgcaccgcgatatcttgctgcgttcggatattttcgtggagttcccgccacagacccggatgatccccgatcgttcaaacatttggcaataaagtttcttaagattgaatcctgttgccggtcttgcgatgattatcatataatttctgttgaattacgttaagcatgtaataattaacatgtaatgcatgacgttatttatgagatgggtttttatgattagagtcccgcaattatacatttaatacgcgatagaaaacaaaatatagcgcgcaaactaggataaattatcgcgcgcggtgtcatctatgttactagatcgggcctcctgtcaatgctggcggcggctctggtggtggttctggtggcggctctgagggtggtggctctgagggtggcggttctgagggtggcggctctgagggaggcggttccggtggtggctctggttccggtgattttgattatgaaaagatggcaaacgctaataagggggctatgaccgaaaatgccgatgaaaacgcgctacagtctgacgctaaaggcaaacttgattctgtcgctactgattacggtgctgctatcgatggtttcattggtgacgtttccggccttgctaatggtaatggtgctactggtgattttgctggctctaattcccaaatggctcaagtcggtgacggtgataattcacctttaatgaataatttccgtcaatatttaccttccctccctcaatcggttgaatgtcgcccttttgtctttggcccaatacgcaaaccgcctctccccgcgcgttggccgattcattaatgcagctggcacgacaggtttcccgactggaaagcgggcagtgagcgcaacgcaattaatgtgagttagctcactcattaggcaccccaggctttacactttatgcttccggctcgtatgttgtgtggaattgtgagcggataacaatttcacacaggaaacagctatgaccatgattacgccaagcttgcatgcctgcaggtccccagattagccttttcaatttcagaaagaatgctaacccacagatggttagagaggcttacgcagcaggtctcatcaagacgatctacccgagcaataatctccaggaaatcaaataccttcccaagaaggttaaagatgcagtcaaaagattcaggactaactgcatcaagaacacagagaaagatatatttctcaagatcagaagtactattccagtatggacgattcaaggcttgcttcacaaaccaaggcaagtaatagagattggagtctctaaaaaggtagttcccactgaatcaaaggccatggagtcaaagattcaaatagaggacctaacagaactcgccgtaaagactggcgaacagttcatacagagtctcttacgactcaatgacaagaagaaaatcttcgtcaacatggtggagcacgacacacttgtctactccaaaaatatcaaagatacagtctcagaagaccaaagggcaattgagacttttcaacaaagggtaatatccggaaacctcctcggattccattgcccagctatctgtcactttattgtgaagatagtggaaaaggaaggtggctcctacaaatgccatcattgcgataaaggaaaggccatcgttgaagatgcctctgccgacagtggtcccaaagatggacccccacccacgaggagcatcgtggaaaaagaagacgttccaaccacgtcttcaaagcaagtggattgatgtgatatctccactgacgtaagggatgacgcacaatcccactatccttcgcaagacccttcctctatataaggaagttcatttcatttggagagaacacgggggactctagaggatccccgggtggtcagtcccttatgttacgtcctgtagaaaccccaacccgtgaaatcaaaaaactcgacggcctgtgggcattcagtctggatcgcgaaaactgtggaattgatcagcgttggtgggaaagcgcgttacaagaaagccgggcaattgctgtgccaggcagttttaacgatcagttcgccgatgcagatattcgtaattatgcgggcaacgtctggtatcagcgcgaagtctttataccgaaaggttgggcaggccagcgtatcgtgctgcgtttcgatgcggtcactcattacggcaaagtgtgggtcaataatcaggaagtgatggagcatcagggcggctatacgccatttgaagccgatgtcacgccgtatgttattgccgggaaaagtgtacgtatcaccgtttgtgtgaacaacgaactgaactggcagactatcccgccgggaatggtgattaccgacgaaaacggcaagaaaaagcagtcttacttccatgatttctttaactatgccggaatccatcgcagcgtaatgctctacaccacgccgaacacctgggtggacgatatcaccgtggtgacgcatgtcgcgcaagactgtaaccacgcgtctgttgactggcaggtggtggccaatggtgatgtcagcgttgaactgcgtgatgcggatcaacaggtggttgcaactggacaaggcactagcgggactttgcaagtggtgaatccgcacctctggcaaccgggtgaaggttatctctatgaactgtgcgtcacagccaaaagccagacagagtgtgatatctacccgcttcgcgtcggcatccggtcagtggcagtgaagggcgaacagttcctgattaaccacaaaccgttctactttactggctttggtcgtcatgaagatgcggacttgcgtggcaaaggattcgataacgtgctgatggtgcacgaccacgcattaatggactggattggggccaactcctaccgtacctcgcattacccttacgctgaagagatgctcgactgggcagatgaacatggcatcgtggtgattgatgaaactgctgctgtcggctttaacctctctttaggcattggtttcgaagcgggcaacaagccgaaagaactgtacagcgaagaggcagtcaacggggaaactcagcaagcgcacttacaggcgattaaagagctgatagcgcgtgacaaaaaccacccaagcgtggtgatgtggagtattgccaacgaaccggatacccgtccgcaaggtgcacgggaatatttcgcgccactggcggaagcaacgcgtaaactcgacccgacgcgtccgatcacctgcgtcaatgtaatgttctgcgacgctcacaccgataccatcagcgatctctttgatgtgctgtgcctgaaccgttattacggatggtatgtccaaagcggcgatttggaaacggcagagaaggtactggaaaaagaacttctggcctggcaggagaaactgcatcagccgattatcatcaccgaatacggcgtggatacgttagccgggctgcactcaatgtacaccgacatgtggagtgaagagtatcagtgtgcatggctggatatgtatcaccgcgtctttgatcgcgtcagcgccgtcgtcggtgaacaggtatggaatttcgccgattttgcgacctcgcaaggcatattgcgcgttggcggtaacaagaaagggatcttcactcgcgaccgcaaaccgaagtcggcggcttttctgctgcaaaaacgctggactggcatgaacttcggtgaaaaaccgcagcagggaggcaaacaatgaatcaacaactctcctggcgcaccatcgtcggctacagcctcgggaattgctaccgagctcgaatttccccgatcgttcaaacatttggcaataaagtttcttaagattgaatcctgttgccggtcttgcgatgattatcatataatttctgttgaattacgttaagcatgtaataattaacatgtaatgcatgacgttatttatgagatgggtttttatgattagagtcccgcaattatacatttaatacgcgatagaaaacaaaatatagcgcgcaaactaggataaattatcgcgcgcggtgtcatctatgttactagatcgggaattcactggccgtcgttttacaacgtcgtgactgggaaaaccctggcgttacccaacttaatcgccttgcagcacatccccctttcgccagctggcgtaatagcgaagaggcccgcaccgatcgcccttcccaacagttgcgcagcctgaatggcgcccgctcctttcgctttcttcccttcctttctcgccacgttcgccggctttccccgtcaagctctaaatcgggggctccctttagggttccgatttagtgctttacggcacctcgaccccaaaaaacttgatttgggtgatggttcacgtagtgggccatcgccctgatagacggtttttcgccctttgacgttggagtccacgttctttaatagtggactcttgttccaaactggaacaacactcaaccctatctcgggctattcttttgatttataagggattttgccgatttcggaaccaccatcaaacaggattttcgcctgctggggcaaaccagcgtggaccgcttgctgcaactctctcagggccaggcggtgaagggcaatcagctgttgcccgtctcactggtgaaaagaaaaaccaccccagtacattaaaaacgtccgcaatgtgttattaagttgtctaagcgtcaatttgtttacaccacaatatatcctgccaccagccagccaacagctccccgaccggcagctcggcacaaaatcaccactcgatacaggcagcccatcagtccgggacggcgtcagcgggagagccgttgtaaggcggcagactttgctcatgttaccgatgctattcggaagaacggcaactaagctgccgggtttgaaacacggatgatctcgcggagggtagcatgttgattgtaacgatgacagagcgttgctgcctgtgatcaaatatcatctccctcgcagagatccgaattatcagccttcttattcatttctcgcttaaccgtgacaggctgtcgatcttgagaactatgccgacataataggaaatcgctggataaagccgctgaggaagctgagtggcgctatttctttagaagtgaacgttgacgatatcaactcccctatccattgctcaccgaatggtacaggtcggggacccgaagttccgactgtcggcctgatgcatccccggctgatcgaccccagatctggggctgagaaagcccagtaaggaaacaactgtaggttcgagtcgcgagatcccccggaaccaaaggaagtaggttaaacccgctccgatcaggccgagccacgccaggccgagaacattggttcctgtaggcatcgggattggcggatcaaacactaaagctactggaacgagcagaagtcctccggccgccagttgccaggcggtaaaggtgagcagaggcacgggaggttgccacttgcgggtcagcacggttccgaacgccatggaaaccgcccccgccaggcccgctgcgacgccgacaggatctagcgctgcgtttggtgtcaacaccaacagcgccacgcccgcagttccgcaaatagcccccaggaccgccatcaatcgtatcgggctacctagcagagcggcagagatgaacacgaccatcagcggctgcacagcgcctaccgtcgccgcgaccccgcccggcaggcggtagaccgaaataaacaacaagctccagaatagcgaaatattaagtgcgccgaggatgaagatgcgcatccaccagattcccgttggaatctgtcggacgatcatcacgagcaataaacccgccggcaacgcccgcagcagcataccggcgacccctcggcctcgctgttcgggctccacgaaaacgccggacagatgcgccttgtgagcgtccttggggccgtcctcctgtttgaagaccgacagcccaatgatctcgccgtcgatgtaggcgccgaatgccacggcatctcgcaaccgttcagcgaacgcctccatgggctttttctcctcgtgctcgtaaacggacccgaacatctctggagctttcttcagggccgacaatcggatctcgcggaaatcctgcacgtcggccgctccaagccgtcgaatctgagccttaatcacaattgtcaattttaatcctctgtttatcggcagttcgtagagcgcgccgtgcgtcccgagcgatactgagcgaagcaagtgcgtcgagcagtgcccgcttgttcctgaaatgccagtaaagcgctggctgctgaacccccagccggaactgaccccacaaggccctagcgtttgcaatgcaccaggtcatcattgacccaggcgtgttccaccaggccgctgcctcgcaactcttcgcaggcttcgccgacctgctcgcgccacttcttcacgcgggtggaatccgatccgcacatgaggcggaaggtttccagcttgagcgggtacggctcccggtgcgagctgaaatagtcgaacatccgtcgggccgtcggcgacagcttgcggtacttctcccatatgaatttcgtgtagtggtcgccagcaaacagcacgacgatttcctcgtcgatcaggacctggcaacgggacgttttcttgccacggtccaggacgcggaagcggtgcagcagcgacaccgattccaggtgcccaacgcggtcggacgtgaagcccatcgccgtcgcctgtaggcgcgacaggcattcctcggccttcgtgtaataccggccattgatcgaccagcccaggtcctggcaaagctcgtagaacgtgaaggtgatcggctcgccgataggggtgcgcttcgcgtactccaacacctgctgccacaccagttcgtcatcgtcggcccgcagctcgacgccggtgtaggtgatcttcacgtccttgttgacgtggaaaatgaccttgttttgcagcgcctcgcgcgggattttcttgttgcgcgtggtgaacagggcagagcgggccgtgtcgtttggcatcgctcgcatcgtgtccggccacggcgcaatatcgaacaaggaaagctgcatttccttgatctgctgcttcgtgtgtttcagcaacgcggcctgcttggcctcgctgacctgttttgccaggtcctcgccggcggtttttcgcttcttggtcgtcatagttcctcgcgtgtcgatggtcatcgacttcgccaaacctgccgcctcctgttcgagacgacgcgaacgctccacggcggccgatggcgcgggcagggcagggggagccagttgcacgctgtcgcgctcgatcttggccgtagcttgctggaccatcgagccgacggactggaaggtttcgcggggcgcacgcatgacggtgcggcttgcgatggtttcggcatcctcggcggaaaaccccgcgtcgatcagttcttgcctgtatgccttccggtcaaacgtccgattcattcaccctccttgcgggattgccccgactcacgccggggcaatgtgcccttattcctgatttgacccgcctggtgccttggtgtccagataatccaccttatcggcaatgaagtcggtcccgtagaccgtctggccgtccttctcgtacttggtattccgaatcttgccctgcacgaataccagcgaccccttgcccaaatacttgccgtgggcctcggcctgagagccaaaacacttgatgcggaagaagtcggtgcgctcctgcttgtcgccggcatcgttgcgccacatctaggtactaaaacaattcatccagtaaaatataatattttattttctcccaatcaggcttgatccccagtaagtcaaaaaatagctcgacatactgttcttccccgatatcctccctgatcgaccggacgcagaaggcaatgtcataccacttgtccgccctgccgcttctcccaagatcaataaagccacttactttgccatctttcacaaagatgttgctgtctcccaggtcgccgtgggaaaagacaagttcctcttcgggcttttccgtctttaaaaaatcatacagctcgcgcggatctttaaatggagtgtcttcttcccagttttcgcaatccacatcggccagatcgttattcagtaagtaatccaattcggctaagcggctgtctaagctattcgtatagggacaatccgatatgtcgatggagtgaaagagcctgatgcactccgcatacagctcgataatcttttcagggctttgttcatcttcatactcttccgagcaaaggacgccatcggcctcactcatgagcagattgctccagccatcatgccgttcaaagtgcaggacctttggaacaggcagctttccttccagccatagcatcatgtccttttcccgttccacatcataggtggtccctttataccggctgtccgtcatttttaaatataggttttcattttctcccaccagcttatataccttagcaggagacattccttccgtatcttttacgcagcggtatttttcgatcagttttttcaattccggtgatattctcattttagccatttattatttccttcctcttttctacagtatttaaagataccccaagaagctaattataacaagacgaactccaattcactgttccttgcattctaaaaccttaaataccagaaaacagctttttcaaagttgttttcaaagttggcgtataacatagtatcgacggagccgattttgaaaccacaattatgggtgatgctgccaacttactgatttagtgtatgatggtgtttttgaggtgctccagtggcttctgtgtctatcagctgtccctcctgttcagctactgacggggtggtgcgtaacggcaaaagcaccgccggacatcagcgctatctctgctctcactgccgtaaaacatggcaactgcagttcacttacaccgcttctcaacccggtacgcaccagaaaatcattgatatggccatgaatggcgttggatgccgggcaacagcccgcattatgggcgttggcctcaacacgattttacgtcacttaaaaaactcaggccgcagtcggtaacctcgcgcatacagccgggcagtgacgtcatcgtctgcgcggaaatggacgaacagtggggctatgtcggggctaaatcgcgccagcgctggctgttttacgcgtatgacagtctccggaagacggttgttgcgcacgtattcggtgaacgcactatggcgacgctggggcgtcttatgagcctgctgtcaccctttgacgtggtgatatggatgacggatggctggccgctgtatgaatcccgcctgaagggaaagctgcacgtaatcagcaagcgatatacgcagcgaattgagcggcataacctgaatctgaggcagcacctggcacggctgggacggaagtcgctgtcgttctcaaaatcggtggagctgcatgacaaagtcatcgggcattatctgaacataaaacactatcaataagttggagtcattacccaattatgatagaatttacaagctataaggttattgtcctgggtttcaagcattagtccatgcaagtttttatgctttgcccattctatagatatattgataagcgcgctgcctatgccttgccccctgaaatccttacatacggcgatatcttctatataaaagatatattatcttatcagtattgtcaatatattcaaggcaatctgcctcctcatcctcttcatcctcttcgtcttggtagctttttaaatatggcgcttcatagagtaattctgtaaaggtccaattctcgttttcatacctcggtataatcttacctatcacctcaaatggttcgctgggtttatcgcacccccgaacacgagcacggcacccgcgaccactatgccaagaatgcccaaggtaaaaattgccggccccgccatgaagtccgtgaatgccccgacggccgaagtgaagggcaggccgccacccaggccgccgccctcactgcccggcacctggtcgctgaatgtcgatgccagcacctgcggcacgtcaatgcttccgggcgtcgcgctcgggctgatcgcccatcccgttactgccccgatcccggcaatggcaaggactgccagcgctgccatttttggggtgaggccgttcgcggccgaggggcgcagcccctggggggatgggaggcccgcgttagcgggccgggagggttcgagaagggggggcaccccccttcggcgtgcgcggtcacgcgcacagggcgcagccctggttaaaaacaaggtttataaatattggtttaaaagcaggttaaaagacaggttagcggtggccgaaaaacgggcggaaacccttgcaaatgctggattttctgcctgtggacagcccctcaaatgtcaataggtgcgcccctcatctgtcagcactctgcccctcaagtgtcaaggatcgcgcccctcatctgtcagtagtcgcgcccctcaagtgtcaataccgcagggcacttatccccaggcttgtccacatcatctgtgggaaactcgcgtaaaatcaggcgttttcgccgatttgcgaggctggccagctccacgtcgccggccgaaatcgagcctgcccctcatctgtcaacgccgcgccgggtgagtcggcccctcaagtgtcaacgtccgcccctcatctgtcagtgagggccaagttttccgcgaggtatccacaacgccggcggccgcggtgtctcgcacacggcttcgacggcgtttctggcgcgtttgcagggccatagacggccgccagcccagcggcgagggcaaccagcccgg + + + + diff --git a/www/node_modules/xml2js/x.js b/www/node_modules/xml2js/x.js new file mode 100644 index 0000000..b51ce57 --- /dev/null +++ b/www/node_modules/xml2js/x.js @@ -0,0 +1,24 @@ +var util = require('util'); +var xml2js = require('xml2js'); + +var myxml = " \ + \ + \ + 1 \ + green \ + \ + \ + 2 \ + red \ + \ + \ + 3 \ + yellow \ + \ +" + +xml2js.parseString(myxml, function (e, r) { + console.log(util.inspect(r, false, null)); + console.log(new xml2js.Builder().buildObject(r)); +}); + diff --git a/www/node_modules/xmlbuilder/.npmignore b/www/node_modules/xmlbuilder/.npmignore new file mode 100644 index 0000000..b6ad1f6 --- /dev/null +++ b/www/node_modules/xmlbuilder/.npmignore @@ -0,0 +1,5 @@ +.travis.yml +src +test +perf +coverage diff --git a/www/node_modules/xmlbuilder/CHANGELOG.md b/www/node_modules/xmlbuilder/CHANGELOG.md new file mode 100644 index 0000000..86f1e94 --- /dev/null +++ b/www/node_modules/xmlbuilder/CHANGELOG.md @@ -0,0 +1,329 @@ +# Change Log + +## [5.0.0] - 2016-03-05 +- Added text case option for element names and attribute names. Valid cases are `lower`, `upper`, `camel`, `kebab` and `snake`. +- Attribute and element values are escaped according to the [Canonical XML 1.0 specification](http://www.w3.org/TR/2000/WD-xml-c14n-20000119.html#charescaping). See [#54](https://github.com/oozcitak/xmlbuilder-js/issues/54) and [#86](https://github.com/oozcitak/xmlbuilder-js/issues/86). +- Added the `allowEmpty` option to `end()`. When this option is set, empty elements are not self-closed. +- Added support for [nested CDATA](https://en.wikipedia.org/wiki/CDATA#Nesting). The triad `]]>` in CDATA is now automatically replaced with `]]]]>`. + +## [4.2.1] - 2016-01-15 +- Updated lodash dependency to 4.0.0. + +## [4.2.0] - 2015-12-16 +- Added the `noDoubleEncoding` option to `create()` to control whether existing html entities are encoded. + +## [4.1.0] - 2015-11-11 +- Added the `separateArrayItems` option to `create()` to control how arrays are handled when converting from objects. e.g. + +```js +root.ele({ number: [ "one", "two" ]}); +// with separateArrayItems: true + + + + +// with separateArrayItems: false +one +two +``` + +## [4.0.0] - 2015-11-01 +- Removed the `#list` decorator. Array items are now created as child nodes by default. +- Fixed a bug where the XML encoding string was checked partially. + +## [3.1.0] - 2015-09-19 +- `#list` decorator ignores empty arrays. + +## [3.0.0] - 2015-09-10 +- Allow `\r`, `\n` and `\t` in attribute values without escaping. See [#86](https://github.com/oozcitak/xmlbuilder-js/issues/86). + +## [2.6.5] - 2015-09-09 +- Use native `isArray` instead of lodash. +- Indentation of processing intructions are set to the parent element's. + +## [2.6.4] - 2015-05-27 +- Updated lodash dependency to 3.5.0. + +## [2.6.3] - 2015-05-27 +- Bumped version because previous release was not published on npm. + +## [2.6.2] - 2015-03-10 +- Updated lodash dependency to 3.5.0. + +## [2.6.1] - 2015-02-20 +- Updated lodash dependency to 3.3.0. + +## [2.6.0] - 2015-02-20 +- Fixed a bug where the `XMLNode` constructor overwrote the super class parent. +- Removed document property from cloned nodes. +- Switched to mocha.js for testing. + +## [2.5.2] - 2015-02-16 +- Updated lodash dependency to 3.2.0. + +## [2.5.1] - 2015-02-09 +- Updated lodash dependency to 3.1.0. +- Support all node >= 0.8. + +## [2.5.0] - 2015-00-03 +- Updated lodash dependency to 3.0.0. + +## [2.4.6] - 2015-01-26 +- Show more information from attribute creation with null values. +- Added iojs as an engine. +- Self close elements with empty text. + +## [2.4.5] - 2014-11-15 +- Fixed prepublish script to run on windows. +- Fixed bug in XMLStringifier where an undefined value was used while reporting an invalid encoding value. +- Moved require statements to the top of files to reduce CPU usage from lazy requires. See [#62](https://github.com/oozcitak/xmlbuilder-js/issues/62). + +## [2.4.4] - 2014-09-08 +- Added the `offset` option to `toSTring()` for use in XML fragments. + +## [2.4.3] - 2014-08-13 +- Corrected license in package description. + +## [2.4.2] - 2014-08-13 +- Dropped performance test and memwatch dependency. + +## [2.4.1] - 2014-08-12 +- Fixed a bug where empty indent string was omitted when pretty printing. See [#59](https://github.com/oozcitak/xmlbuilder-js/issues/59). + +## [2.4.0] - 2014-08-04 +- Correct cases of pubID and sysID. +- Use single lodash instead of seperate npm modules. See [#53](https://github.com/oozcitak/xmlbuilder-js/issues/53). +- Escape according to Canonical XML 1.0. See [#54](https://github.com/oozcitak/xmlbuilder-js/issues/54). + +## [2.3.0] - 2014-07-17 +- Convert objects to JS primitives while sanitizing user input. +- Object builder preserves items with null values. See [#44](https://github.com/oozcitak/xmlbuilder-js/issues/44). +- Use modularized lodash functions to cut down dependencies. +- Process empty objects when converting from objects so that we don't throw on empty child objects. + +## [2.2.1] - 2014-04-04 +- Bumped version because previous release was not published on npm. + +## [2.2.0] - 2014-04-04 +- Switch to lodash from underscore. +- Removed legacy `ext` option from `create()`. +- Drop old node versions: 0.4, 0.5, 0.6. 0.8 is the minimum requirement from now on. + +## [2.1.0] - 2013-12-30 +- Removed duplicate null checks from constructors. +- Fixed node count in performance test. +- Added option for skipping null attribute values. See [#26](https://github.com/oozcitak/xmlbuilder-js/issues/26). +- Allow multiple values in `att()` and `ins()`. +- Added ability to run individual performance tests. +- Added flag for ignoring decorator strings. + +## [2.0.1] - 2013-12-24 +- Removed performance tests from npm package. + +## [2.0.0] - 2013-12-24 +- Combined loops for speed up. +- Added support for the DTD and XML declaration. +- `clone` includes attributes. +- Added performance tests. +- Evaluate attribute value if function. +- Evaluate instruction value if function. + +## [1.1.2] - 2013-12-11 +- Changed processing instruction decorator to `?`. + +## [1.1.1] - 2013-12-11 +- Added processing instructions to JS object conversion. + +## [1.1.0] - 2013-12-10 +- Added license to package. +- `create()` and `element()` accept JS object to fully build the document. +- Added `nod()` and `n()` aliases for `node()`. +- Renamed `convertAttChar` decorator to `convertAttKey`. +- Ignore empty decorator strings when converting JS objects. + +## [1.0.2] - 2013-11-27 +- Removed temp file which was accidentally included in the package. + +## [1.0.1] - 2013-11-27 +- Custom stringify functions affect current instance only. + +## [1.0.0] - 2013-11-27 +- Added processing instructions. +- Added stringify functions to sanitize and convert input values. +- Added option for headless XML documents. +- Added vows tests. +- Removed Makefile. Using npm publish scripts instead. +- Removed the `begin()` function. `create()` begins the document by creating the root node. + +## [0.4.3] - 2013-11-08 +- Added option to include surrogate pairs in XML content. See [#29](https://github.com/oozcitak/xmlbuilder-js/issues/29). +- Fixed empty value string representation in pretty mode. +- Added pre and postpublish scripts to package.json. +- Filtered out prototype properties when appending attributes. See [#31](https://github.com/oozcitak/xmlbuilder-js/issues/31). + +## [0.4.2] - 2012-09-14 +- Removed README.md from `.npmignore`. + +## [0.4.1] - 2012-08-31 +- Removed `begin()` calls in favor of `XMLBuilder` constructor. +- Added the `end()` function. `end()` is a convenience over `doc().toString()`. + +## [0.4.0] - 2012-08-31 +- Added arguments to `XMLBuilder` constructor to allow the name of the root element and XML prolog to be defined in one line. +- Soft deprecated `begin()`. + +## [0.3.11] - 2012-08-13 +- Package keywords are fixed to be an array of values. + +## [0.3.10] - 2012-08-13 +- Brought back npm package contents which were lost due to incorrect configuration of `package.json` in previous releases. + +## [0.3.3] - 2012-07-27 +- Implemented `importXMLBuilder()`. + +## [0.3.2] - 2012-07-20 +- Fixed a duplicated escaping problem on `element()`. +- Fixed a problem with text node creation from empty string. +- Calling `root()` on the document element returns the root element. +- `XMLBuilder` no longer extends `XMLFragment`. + +## [0.3.1] - 2011-11-28 +- Added guards for document element so that nodes cannot be inserted at document level. + +## [0.3.0] - 2011-11-28 +- Added `doc()` to return the document element. + +## [0.2.2] - 2011-11-28 +- Prevent code relying on `up()`'s older behavior to break. + +## [0.2.1] - 2011-11-28 +- Added the `root()` function. + +## [0.2.0] - 2011-11-21 +- Added Travis-CI integration. +- Added coffee-script dependency. +- Added insert, traversal and delete functions. + +## [0.1.7] - 2011-10-25 +- No changes. Accidental release. + +## [0.1.6] - 2011-10-25 +- Corrected `package.json` bugs link to `url` from `web`. + +## [0.1.5] - 2011-08-08 +- Added missing npm package contents. + +## [0.1.4] - 2011-07-29 +- Text-only nodes are no longer indented. +- Added documentation for multiple instances. + +## [0.1.3] - 2011-07-27 +- Exported the `create()` function to return a new instance. This allows multiple builder instances to be constructed. +- Fixed `u()` function so that it now correctly calls `up()`. +- Fixed typo in `element()` so that `attributes` and `text` van be passes interchangeably. + +## [0.1.2] - 2011-06-03 +- `ele()` accepts element text. +- `attributes()` now overrides existing attributes if passed the same attribute name. + +## [0.1.1] - 2011-05-19 +- Added the raw output option. +- Removed most validity checks. + +## [0.1.0] - 2011-04-27 +- `text()` and `cdata()` now return parent element. +- Attribute values are escaped. + +## [0.0.7] - 2011-04-23 +- Coerced text values to string. + +## [0.0.6] - 2011-02-23 +- Added support for XML comments. +- Text nodes are checked against CharData. + +## [0.0.5] - 2010-12-31 +- Corrected the name of the main npm module in `package.json`. + +## [0.0.4] - 2010-12-28 +- Added `.npmignore`. + +## [0.0.3] - 2010-12-27 +- root element is now constructed in `begin()`. +- moved prolog to `begin()`. +- Added the ability to have CDATA in element text. +- Removed unused prolog aliases. +- Removed `builder()` function from main module. +- Added the name of the main npm module in `package.json`. + +## [0.0.2] - 2010-11-03 +- `element()` expands nested arrays. +- Added pretty printing. +- Added the `up()`, `build()` and `prolog()` functions. +- Added readme. + +## 0.0.1 - 2010-11-02 +- Initial release + +[5.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.2.1...v5.0.0 +[4.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.2.0...v4.2.1 +[4.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.1.0...v4.2.0 +[4.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.0.0...v4.1.0 +[4.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v3.1.0...v4.0.0 +[3.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v3.0.0...v3.1.0 +[3.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.5...v3.0.0 +[2.6.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.4...v2.6.5 +[2.6.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.3...v2.6.4 +[2.6.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.2...v2.6.3 +[2.6.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.1...v2.6.2 +[2.6.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.0...v2.6.1 +[2.6.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.2...v2.6.0 +[2.5.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.1...v2.5.2 +[2.5.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.0...v2.5.1 +[2.5.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.6...v2.5.0 +[2.4.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.5...v2.4.6 +[2.4.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.4...v2.4.5 +[2.4.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.3...v2.4.4 +[2.4.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.2...v2.4.3 +[2.4.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.1...v2.4.2 +[2.4.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.0...v2.4.1 +[2.4.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.3.0...v2.4.0 +[2.3.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.2.1...v2.3.0 +[2.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.2.0...v2.2.1 +[2.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.1.0...v2.2.0 +[2.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.0.1...v2.1.0 +[2.0.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.0.0...v2.0.1 +[2.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.2...v2.0.0 +[1.1.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.1...v1.1.2 +[1.1.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.0...v1.1.1 +[1.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.2...v1.1.0 +[1.0.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.1...v1.0.2 +[1.0.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.0...v1.0.1 +[1.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.3...v1.0.0 +[0.4.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.2...v0.4.3 +[0.4.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.1...v0.4.2 +[0.4.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.0...v0.4.1 +[0.4.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.11...v0.4.0 +[0.3.11]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.10...v0.3.11 +[0.3.10]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.3...v0.3.10 +[0.3.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.2...v0.3.3 +[0.3.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.1...v0.3.2 +[0.3.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.0...v0.3.1 +[0.3.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.2...v0.3.0 +[0.2.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.1...v0.2.2 +[0.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.0...v0.2.1 +[0.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.7...v0.2.0 +[0.1.7]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.6...v0.1.7 +[0.1.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.5...v0.1.6 +[0.1.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.4...v0.1.5 +[0.1.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.3...v0.1.4 +[0.1.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.2...v0.1.3 +[0.1.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.1...v0.1.2 +[0.1.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.0...v0.1.1 +[0.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.7...v0.1.0 +[0.0.7]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.6...v0.0.7 +[0.0.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.5...v0.0.6 +[0.0.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.4...v0.0.5 +[0.0.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.3...v0.0.4 +[0.0.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.2...v0.0.3 +[0.0.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.1...v0.0.2 + diff --git a/www/node_modules/xmlbuilder/LICENSE b/www/node_modules/xmlbuilder/LICENSE new file mode 100644 index 0000000..e7cbac9 --- /dev/null +++ b/www/node_modules/xmlbuilder/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Ozgur Ozcitak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/www/node_modules/xmlbuilder/README.md b/www/node_modules/xmlbuilder/README.md new file mode 100644 index 0000000..13a5b12 --- /dev/null +++ b/www/node_modules/xmlbuilder/README.md @@ -0,0 +1,86 @@ +# xmlbuilder-js + +An XML builder for [node.js](https://nodejs.org/) similar to +[java-xmlbuilder](https://github.com/jmurty/java-xmlbuilder). + +[![License](http://img.shields.io/npm/l/xmlbuilder.svg?style=flat-square)](http://opensource.org/licenses/MIT) +[![NPM Version](http://img.shields.io/npm/v/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder) +[![NPM Downloads](https://img.shields.io/npm/dm/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder) + +[![Build Status](http://img.shields.io/travis/oozcitak/xmlbuilder-js.svg?style=flat-square)](http://travis-ci.org/oozcitak/xmlbuilder-js) +[![Dependency Status](http://img.shields.io/david/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js) +[![Dev Dependency Status](http://img.shields.io/david/dev/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js) +[![Code Coverage](https://img.shields.io/coveralls/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://coveralls.io/github/oozcitak/xmlbuilder-js) + +### Installation: + +``` sh +npm install xmlbuilder +``` + +### Usage: + +``` js +var builder = require('xmlbuilder'); +var xml = builder.create('root') + .ele('xmlbuilder') + .ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git') + .end({ pretty: true}); + +console.log(xml); +``` + +will result in: + +``` xml + + + + git://github.com/oozcitak/xmlbuilder-js.git + + +``` + +It is also possible to convert objects into nodes: + +``` js +builder.create({ + root: { + xmlbuilder: { + repo: { + '@type': 'git', // attributes start with @ + '#text': 'git://github.com/oozcitak/xmlbuilder-js.git' // text node + } + } + } +}); +``` + +If you need to do some processing: + +``` js +var root = builder.create('squares'); +root.com('f(x) = x^2'); +for(var i = 1; i <= 5; i++) +{ + var item = root.ele('data'); + item.att('x', i); + item.att('y', i * i); +} +``` + +This will result in: + +``` xml + + + + + + + + + +``` + +See the [wiki](https://github.com/oozcitak/xmlbuilder-js/wiki) for details. diff --git a/www/node_modules/xmlbuilder/lib/XMLAttribute.js b/www/node_modules/xmlbuilder/lib/XMLAttribute.js new file mode 100644 index 0000000..f6c6bd8 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLAttribute.js @@ -0,0 +1,32 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, create; + + create = require('lodash/create'); + + module.exports = XMLAttribute = (function() { + function XMLAttribute(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing attribute name of element " + parent.name); + } + if (value == null) { + throw new Error("Missing attribute value for attribute " + name + " of element " + parent.name); + } + this.name = this.stringify.attName(name); + this.value = this.stringify.attValue(value); + } + + XMLAttribute.prototype.clone = function() { + return create(XMLAttribute.prototype, this); + }; + + XMLAttribute.prototype.toString = function(options, level) { + return ' ' + this.name + '="' + this.value + '"'; + }; + + return XMLAttribute; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLBuilder.js b/www/node_modules/xmlbuilder/lib/XMLBuilder.js new file mode 100644 index 0000000..4282833 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLBuilder.js @@ -0,0 +1,69 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLBuilder, XMLDeclaration, XMLDocType, XMLElement, XMLStringifier; + + XMLStringifier = require('./XMLStringifier'); + + XMLDeclaration = require('./XMLDeclaration'); + + XMLDocType = require('./XMLDocType'); + + XMLElement = require('./XMLElement'); + + module.exports = XMLBuilder = (function() { + function XMLBuilder(name, options) { + var root, temp; + if (name == null) { + throw new Error("Root element needs a name"); + } + if (options == null) { + options = {}; + } + this.options = options; + this.stringify = new XMLStringifier(options); + temp = new XMLElement(this, 'doc'); + root = temp.element(name); + root.isRoot = true; + root.documentObject = this; + this.rootObject = root; + if (!options.headless) { + root.declaration(options); + if ((options.pubID != null) || (options.sysID != null)) { + root.doctype(options); + } + } + } + + XMLBuilder.prototype.root = function() { + return this.rootObject; + }; + + XMLBuilder.prototype.end = function(options) { + return this.toString(options); + }; + + XMLBuilder.prototype.toString = function(options) { + var indent, newline, offset, pretty, r, ref, ref1, ref2; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + r = ''; + if (this.xmldec != null) { + r += this.xmldec.toString(options); + } + if (this.doctype != null) { + r += this.doctype.toString(options); + } + r += this.rootObject.toString(options); + if (pretty && r.slice(-newline.length) === newline) { + r = r.slice(0, -newline.length); + } + return r; + }; + + return XMLBuilder; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLCData.js b/www/node_modules/xmlbuilder/lib/XMLCData.js new file mode 100644 index 0000000..c171a28 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLCData.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLCData = (function(superClass) { + extend(XMLCData, superClass); + + function XMLCData(parent, text) { + XMLCData.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing CDATA text"); + } + this.text = this.stringify.cdata(text); + } + + XMLCData.prototype.clone = function() { + return create(XMLCData.prototype, this); + }; + + XMLCData.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLCData; + + })(XMLNode); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLComment.js b/www/node_modules/xmlbuilder/lib/XMLComment.js new file mode 100644 index 0000000..ca801f6 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLComment.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLComment, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLComment = (function(superClass) { + extend(XMLComment, superClass); + + function XMLComment(parent, text) { + XMLComment.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing comment text"); + } + this.text = this.stringify.comment(text); + } + + XMLComment.prototype.clone = function() { + return create(XMLComment.prototype, this); + }; + + XMLComment.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLComment; + + })(XMLNode); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLDTDAttList.js b/www/node_modules/xmlbuilder/lib/XMLDTDAttList.js new file mode 100644 index 0000000..4a71866 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLDTDAttList.js @@ -0,0 +1,68 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDAttList, create; + + create = require('lodash/create'); + + module.exports = XMLDTDAttList = (function() { + function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) { + this.stringify = parent.stringify; + if (elementName == null) { + throw new Error("Missing DTD element name"); + } + if (attributeName == null) { + throw new Error("Missing DTD attribute name"); + } + if (!attributeType) { + throw new Error("Missing DTD attribute type"); + } + if (!defaultValueType) { + throw new Error("Missing DTD attribute default"); + } + if (defaultValueType.indexOf('#') !== 0) { + defaultValueType = '#' + defaultValueType; + } + if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) { + throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT"); + } + if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) { + throw new Error("Default value only applies to #FIXED or #DEFAULT"); + } + this.elementName = this.stringify.eleName(elementName); + this.attributeName = this.stringify.attName(attributeName); + this.attributeType = this.stringify.dtdAttType(attributeType); + this.defaultValue = this.stringify.dtdAttDefault(defaultValue); + this.defaultValueType = defaultValueType; + } + + XMLDTDAttList.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDAttList; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLDTDElement.js b/www/node_modules/xmlbuilder/lib/XMLDTDElement.js new file mode 100644 index 0000000..0002c1b --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLDTDElement.js @@ -0,0 +1,46 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDElement, create; + + create = require('lodash/create'); + + module.exports = XMLDTDElement = (function() { + function XMLDTDElement(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing DTD element name"); + } + if (!value) { + value = '(#PCDATA)'; + } + if (Array.isArray(value)) { + value = '(' + value.join(',') + ')'; + } + this.name = this.stringify.eleName(name); + this.value = this.stringify.dtdElementValue(value); + } + + XMLDTDElement.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDElement; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLDTDEntity.js b/www/node_modules/xmlbuilder/lib/XMLDTDEntity.js new file mode 100644 index 0000000..f27d567 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLDTDEntity.js @@ -0,0 +1,84 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDEntity, create, isObject; + + create = require('lodash/create'); + + isObject = require('lodash/isObject'); + + module.exports = XMLDTDEntity = (function() { + function XMLDTDEntity(parent, pe, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing entity name"); + } + if (value == null) { + throw new Error("Missing entity value"); + } + this.pe = !!pe; + this.name = this.stringify.eleName(name); + if (!isObject(value)) { + this.value = this.stringify.dtdEntityValue(value); + } else { + if (!value.pubID && !value.sysID) { + throw new Error("Public and/or system identifiers are required for an external entity"); + } + if (value.pubID && !value.sysID) { + throw new Error("System identifier is required for a public external entity"); + } + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + if (value.nData != null) { + this.nData = this.stringify.dtdNData(value.nData); + } + if (this.pe && this.nData) { + throw new Error("Notation declaration is not allowed in a parameter entity"); + } + } + } + + XMLDTDEntity.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDEntity; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLDTDNotation.js b/www/node_modules/xmlbuilder/lib/XMLDTDNotation.js new file mode 100644 index 0000000..edd3501 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLDTDNotation.js @@ -0,0 +1,56 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDNotation, create; + + create = require('lodash/create'); + + module.exports = XMLDTDNotation = (function() { + function XMLDTDNotation(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing notation name"); + } + if (!value.pubID && !value.sysID) { + throw new Error("Public or system identifiers are required for an external entity"); + } + this.name = this.stringify.eleName(name); + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + } + + XMLDTDNotation.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDNotation; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLDeclaration.js b/www/node_modules/xmlbuilder/lib/XMLDeclaration.js new file mode 100644 index 0000000..b502892 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLDeclaration.js @@ -0,0 +1,65 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDeclaration, XMLNode, create, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + isObject = require('lodash/isObject'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLDeclaration = (function(superClass) { + extend(XMLDeclaration, superClass); + + function XMLDeclaration(parent, version, encoding, standalone) { + var ref; + XMLDeclaration.__super__.constructor.call(this, parent); + if (isObject(version)) { + ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone; + } + if (!version) { + version = '1.0'; + } + this.version = this.stringify.xmlVersion(version); + if (encoding != null) { + this.encoding = this.stringify.xmlEncoding(encoding); + } + if (standalone != null) { + this.standalone = this.stringify.xmlStandalone(standalone); + } + } + + XMLDeclaration.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDeclaration; + + })(XMLNode); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLDocType.js b/www/node_modules/xmlbuilder/lib/XMLDocType.js new file mode 100644 index 0000000..cbc61b3 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLDocType.js @@ -0,0 +1,188 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLProcessingInstruction, create, isObject; + + create = require('lodash/create'); + + isObject = require('lodash/isObject'); + + XMLCData = require('./XMLCData'); + + XMLComment = require('./XMLComment'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLDocType = (function() { + function XMLDocType(parent, pubID, sysID) { + var ref, ref1; + this.documentObject = parent; + this.stringify = this.documentObject.stringify; + this.children = []; + if (isObject(pubID)) { + ref = pubID, pubID = ref.pubID, sysID = ref.sysID; + } + if (sysID == null) { + ref1 = [pubID, sysID], sysID = ref1[0], pubID = ref1[1]; + } + if (pubID != null) { + this.pubID = this.stringify.dtdPubID(pubID); + } + if (sysID != null) { + this.sysID = this.stringify.dtdSysID(sysID); + } + } + + XMLDocType.prototype.element = function(name, value) { + var child; + child = new XMLDTDElement(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + var child; + child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.entity = function(name, value) { + var child; + child = new XMLDTDEntity(this, false, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.pEntity = function(name, value) { + var child; + child = new XMLDTDEntity(this, true, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.notation = function(name, value) { + var child; + child = new XMLDTDNotation(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.instruction = function(target, value) { + var child; + child = new XMLProcessingInstruction(this, target, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.root = function() { + return this.documentObject.root(); + }; + + XMLDocType.prototype.document = function() { + return this.documentObject; + }; + + XMLDocType.prototype.toString = function(options, level) { + var child, i, indent, len, newline, offset, pretty, r, ref, ref1, ref2, ref3, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ' 0) { + r += ' ['; + if (pretty) { + r += newline; + } + ref3 = this.children; + for (i = 0, len = ref3.length; i < len; i++) { + child = ref3[i]; + r += child.toString(options, level + 1); + } + r += ']'; + } + r += '>'; + if (pretty) { + r += newline; + } + return r; + }; + + XMLDocType.prototype.ele = function(name, value) { + return this.element(name, value); + }; + + XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue); + }; + + XMLDocType.prototype.ent = function(name, value) { + return this.entity(name, value); + }; + + XMLDocType.prototype.pent = function(name, value) { + return this.pEntity(name, value); + }; + + XMLDocType.prototype.not = function(name, value) { + return this.notation(name, value); + }; + + XMLDocType.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLDocType.prototype.com = function(value) { + return this.comment(value); + }; + + XMLDocType.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLDocType.prototype.up = function() { + return this.root(); + }; + + XMLDocType.prototype.doc = function() { + return this.document(); + }; + + return XMLDocType; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLElement.js b/www/node_modules/xmlbuilder/lib/XMLElement.js new file mode 100644 index 0000000..3e5e1eb --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLElement.js @@ -0,0 +1,217 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, create, every, isFunction, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + isObject = require('lodash/isObject'); + + isFunction = require('lodash/isFunction'); + + every = require('lodash/every'); + + XMLNode = require('./XMLNode'); + + XMLAttribute = require('./XMLAttribute'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLElement = (function(superClass) { + extend(XMLElement, superClass); + + function XMLElement(parent, name, attributes) { + XMLElement.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing element name"); + } + this.name = this.stringify.eleName(name); + this.children = []; + this.instructions = []; + this.attributes = {}; + if (attributes != null) { + this.attribute(attributes); + } + } + + XMLElement.prototype.clone = function() { + var att, attName, clonedSelf, i, len, pi, ref, ref1; + clonedSelf = create(XMLElement.prototype, this); + if (clonedSelf.isRoot) { + clonedSelf.documentObject = null; + } + clonedSelf.attributes = {}; + ref = this.attributes; + for (attName in ref) { + if (!hasProp.call(ref, attName)) continue; + att = ref[attName]; + clonedSelf.attributes[attName] = att.clone(); + } + clonedSelf.instructions = []; + ref1 = this.instructions; + for (i = 0, len = ref1.length; i < len; i++) { + pi = ref1[i]; + clonedSelf.instructions.push(pi.clone()); + } + clonedSelf.children = []; + this.children.forEach(function(child) { + var clonedChild; + clonedChild = child.clone(); + clonedChild.parent = clonedSelf; + return clonedSelf.children.push(clonedChild); + }); + return clonedSelf; + }; + + XMLElement.prototype.attribute = function(name, value) { + var attName, attValue; + if (name != null) { + name = name.valueOf(); + } + if (isObject(name)) { + for (attName in name) { + if (!hasProp.call(name, attName)) continue; + attValue = name[attName]; + this.attribute(attName, attValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + if (!this.options.skipNullAttributes || (value != null)) { + this.attributes[name] = new XMLAttribute(this, name, value); + } + } + return this; + }; + + XMLElement.prototype.removeAttribute = function(name) { + var attName, i, len; + if (name == null) { + throw new Error("Missing attribute name"); + } + name = name.valueOf(); + if (Array.isArray(name)) { + for (i = 0, len = name.length; i < len; i++) { + attName = name[i]; + delete this.attributes[attName]; + } + } else { + delete this.attributes[name]; + } + return this; + }; + + XMLElement.prototype.instruction = function(target, value) { + var i, insTarget, insValue, instruction, len; + if (target != null) { + target = target.valueOf(); + } + if (value != null) { + value = value.valueOf(); + } + if (Array.isArray(target)) { + for (i = 0, len = target.length; i < len; i++) { + insTarget = target[i]; + this.instruction(insTarget); + } + } else if (isObject(target)) { + for (insTarget in target) { + if (!hasProp.call(target, insTarget)) continue; + insValue = target[insTarget]; + this.instruction(insTarget, insValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + instruction = new XMLProcessingInstruction(this, target, value); + this.instructions.push(instruction); + } + return this; + }; + + XMLElement.prototype.toString = function(options, level) { + var allowEmpty, att, child, i, indent, instruction, j, len, len1, name, newline, offset, pretty, r, ref, ref1, ref2, ref3, ref4, ref5, ref6, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + allowEmpty = (ref3 = options != null ? options.allowEmpty : void 0) != null ? ref3 : false; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + ref4 = this.instructions; + for (i = 0, len = ref4.length; i < len; i++) { + instruction = ref4[i]; + r += instruction.toString(options, level); + } + if (pretty) { + r += space; + } + r += '<' + this.name; + ref5 = this.attributes; + for (name in ref5) { + if (!hasProp.call(ref5, name)) continue; + att = ref5[name]; + r += att.toString(options); + } + if (this.children.length === 0 || every(this.children, function(e) { + return e.value === ''; + })) { + if (allowEmpty) { + r += '>'; + } else { + r += '/>'; + } + if (pretty) { + r += newline; + } + } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) { + r += '>'; + r += this.children[0].value; + r += ''; + r += newline; + } else { + r += '>'; + if (pretty) { + r += newline; + } + ref6 = this.children; + for (j = 0, len1 = ref6.length; j < len1; j++) { + child = ref6[j]; + r += child.toString(options, level + 1); + } + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + } + return r; + }; + + XMLElement.prototype.att = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLElement.prototype.a = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.i = function(target, value) { + return this.instruction(target, value); + }; + + return XMLElement; + + })(XMLNode); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLNode.js b/www/node_modules/xmlbuilder/lib/XMLNode.js new file mode 100644 index 0000000..0a6340b --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLNode.js @@ -0,0 +1,331 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLElement, XMLNode, XMLRaw, XMLText, isEmpty, isFunction, isObject, + hasProp = {}.hasOwnProperty; + + isObject = require('lodash/isObject'); + + isFunction = require('lodash/isFunction'); + + isEmpty = require('lodash/isEmpty'); + + XMLElement = null; + + XMLCData = null; + + XMLComment = null; + + XMLDeclaration = null; + + XMLDocType = null; + + XMLRaw = null; + + XMLText = null; + + module.exports = XMLNode = (function() { + function XMLNode(parent) { + this.parent = parent; + this.options = this.parent.options; + this.stringify = this.parent.stringify; + if (XMLElement === null) { + XMLElement = require('./XMLElement'); + XMLCData = require('./XMLCData'); + XMLComment = require('./XMLComment'); + XMLDeclaration = require('./XMLDeclaration'); + XMLDocType = require('./XMLDocType'); + XMLRaw = require('./XMLRaw'); + XMLText = require('./XMLText'); + } + } + + XMLNode.prototype.element = function(name, attributes, text) { + var childNode, item, j, k, key, lastChild, len, len1, ref, val; + lastChild = null; + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + if (name != null) { + name = name.valueOf(); + } + if (Array.isArray(name)) { + for (j = 0, len = name.length; j < len; j++) { + item = name[j]; + lastChild = this.element(item); + } + } else if (isFunction(name)) { + lastChild = this.element(name.apply()); + } else if (isObject(name)) { + for (key in name) { + if (!hasProp.call(name, key)) continue; + val = name[key]; + if (isFunction(val)) { + val = val.apply(); + } + if ((isObject(val)) && (isEmpty(val))) { + val = null; + } + if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) { + lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val); + } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) { + lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val); + } else if (!this.options.separateArrayItems && Array.isArray(val)) { + for (k = 0, len1 = val.length; k < len1; k++) { + item = val[k]; + childNode = {}; + childNode[key] = item; + lastChild = this.element(childNode); + } + } else if (isObject(val)) { + lastChild = this.element(key); + lastChild.element(val); + } else { + lastChild = this.element(key, val); + } + } + } else { + if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) { + lastChild = this.text(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) { + lastChild = this.cdata(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) { + lastChild = this.comment(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) { + lastChild = this.raw(text); + } else { + lastChild = this.node(name, attributes, text); + } + } + if (lastChild == null) { + throw new Error("Could not create any elements with: " + name); + } + return lastChild; + }; + + XMLNode.prototype.insertBefore = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.insertAfter = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i + 1); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.remove = function() { + var i, ref; + if (this.isRoot) { + throw new Error("Cannot remove the root element"); + } + i = this.parent.children.indexOf(this); + [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref = [])), ref; + return this.parent; + }; + + XMLNode.prototype.node = function(name, attributes, text) { + var child, ref; + if (name != null) { + name = name.valueOf(); + } + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + child = new XMLElement(this, name, attributes); + if (text != null) { + child.text(text); + } + this.children.push(child); + return child; + }; + + XMLNode.prototype.text = function(value) { + var child; + child = new XMLText(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.raw = function(value) { + var child; + child = new XMLRaw(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.declaration = function(version, encoding, standalone) { + var doc, xmldec; + doc = this.document(); + xmldec = new XMLDeclaration(doc, version, encoding, standalone); + doc.xmldec = xmldec; + return doc.root(); + }; + + XMLNode.prototype.doctype = function(pubID, sysID) { + var doc, doctype; + doc = this.document(); + doctype = new XMLDocType(doc, pubID, sysID); + doc.doctype = doctype; + return doctype; + }; + + XMLNode.prototype.up = function() { + if (this.isRoot) { + throw new Error("The root node has no parent. Use doc() if you need to get the document object."); + } + return this.parent; + }; + + XMLNode.prototype.root = function() { + var child; + if (this.isRoot) { + return this; + } + child = this.parent; + while (!child.isRoot) { + child = child.parent; + } + return child; + }; + + XMLNode.prototype.document = function() { + return this.root().documentObject; + }; + + XMLNode.prototype.end = function(options) { + return this.document().toString(options); + }; + + XMLNode.prototype.prev = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i < 1) { + throw new Error("Already at the first node"); + } + return this.parent.children[i - 1]; + }; + + XMLNode.prototype.next = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i === -1 || i === this.parent.children.length - 1) { + throw new Error("Already at the last node"); + } + return this.parent.children[i + 1]; + }; + + XMLNode.prototype.importXMLBuilder = function(xmlbuilder) { + var clonedRoot; + clonedRoot = xmlbuilder.root().clone(); + clonedRoot.parent = this; + clonedRoot.isRoot = false; + this.children.push(clonedRoot); + return this; + }; + + XMLNode.prototype.ele = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.nod = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.txt = function(value) { + return this.text(value); + }; + + XMLNode.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.com = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.doc = function() { + return this.document(); + }; + + XMLNode.prototype.dec = function(version, encoding, standalone) { + return this.declaration(version, encoding, standalone); + }; + + XMLNode.prototype.dtd = function(pubID, sysID) { + return this.doctype(pubID, sysID); + }; + + XMLNode.prototype.e = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.n = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.t = function(value) { + return this.text(value); + }; + + XMLNode.prototype.d = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.c = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.r = function(value) { + return this.raw(value); + }; + + XMLNode.prototype.u = function() { + return this.up(); + }; + + return XMLNode; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js b/www/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js new file mode 100644 index 0000000..596f5a6 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js @@ -0,0 +1,51 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLProcessingInstruction, create; + + create = require('lodash/create'); + + module.exports = XMLProcessingInstruction = (function() { + function XMLProcessingInstruction(parent, target, value) { + this.stringify = parent.stringify; + if (target == null) { + throw new Error("Missing instruction target"); + } + this.target = this.stringify.insTarget(target); + if (value) { + this.value = this.stringify.insValue(value); + } + } + + XMLProcessingInstruction.prototype.clone = function() { + return create(XMLProcessingInstruction.prototype, this); + }; + + XMLProcessingInstruction.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLProcessingInstruction; + + })(); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLRaw.js b/www/node_modules/xmlbuilder/lib/XMLRaw.js new file mode 100644 index 0000000..9f48962 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLRaw.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLNode, XMLRaw, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLRaw = (function(superClass) { + extend(XMLRaw, superClass); + + function XMLRaw(parent, text) { + XMLRaw.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing raw text"); + } + this.value = this.stringify.raw(text); + } + + XMLRaw.prototype.clone = function() { + return create(XMLRaw.prototype, this); + }; + + XMLRaw.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += this.value; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLRaw; + + })(XMLNode); + +}).call(this); diff --git a/www/node_modules/xmlbuilder/lib/XMLStringifier.js b/www/node_modules/xmlbuilder/lib/XMLStringifier.js new file mode 100644 index 0000000..bee8587 --- /dev/null +++ b/www/node_modules/xmlbuilder/lib/XMLStringifier.js @@ -0,0 +1,193 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLStringifier, camelCase, kebabCase, snakeCase, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + hasProp = {}.hasOwnProperty; + + camelCase = require('lodash/camelCase'); + + kebabCase = require('lodash/kebabCase'); + + snakeCase = require('lodash/snakeCase'); + + module.exports = XMLStringifier = (function() { + function XMLStringifier(options) { + this.assertLegalChar = bind(this.assertLegalChar, this); + var key, ref, value; + this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0; + this.noDoubleEncoding = options != null ? options.noDoubleEncoding : void 0; + this.textCase = options != null ? options.textCase : void 0; + ref = (options != null ? options.stringify : void 0) || {}; + for (key in ref) { + if (!hasProp.call(ref, key)) continue; + value = ref[key]; + this[key] = value; + } + } + + XMLStringifier.prototype.eleName = function(val) { + val = '' + val || ''; + val = this.applyCase(val); + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.eleText = function(val) { + val = '' + val || ''; + return this.assertLegalChar(this.elEscape(val)); + }; + + XMLStringifier.prototype.cdata = function(val) { + val = '' + val || ''; + val = val.replace(']]>', ']]]]>'); + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.comment = function(val) { + val = '' + val || ''; + if (val.match(/--/)) { + throw new Error("Comment text cannot contain double-hypen: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.raw = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attName = function(val) { + val = '' + val || ''; + return val = this.applyCase(val); + }; + + XMLStringifier.prototype.attValue = function(val) { + val = '' + val || ''; + return this.attEscape(val); + }; + + XMLStringifier.prototype.insTarget = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.insValue = function(val) { + val = '' + val || ''; + if (val.match(/\?>/)) { + throw new Error("Invalid processing instruction value: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlVersion = function(val) { + val = '' + val || ''; + if (!val.match(/1\.[0-9]+/)) { + throw new Error("Invalid version number: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlEncoding = function(val) { + val = '' + val || ''; + if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-]|-)*$/)) { + throw new Error("Invalid encoding: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlStandalone = function(val) { + if (val) { + return "yes"; + } else { + return "no"; + } + }; + + XMLStringifier.prototype.dtdPubID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdSysID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdElementValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttType = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttDefault = function(val) { + if (val != null) { + return '' + val || ''; + } else { + return val; + } + }; + + XMLStringifier.prototype.dtdEntityValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdNData = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.convertAttKey = '@'; + + XMLStringifier.prototype.convertPIKey = '?'; + + XMLStringifier.prototype.convertTextKey = '#text'; + + XMLStringifier.prototype.convertCDataKey = '#cdata'; + + XMLStringifier.prototype.convertCommentKey = '#comment'; + + XMLStringifier.prototype.convertRawKey = '#raw'; + + XMLStringifier.prototype.assertLegalChar = function(str) { + var chars, chr; + if (this.allowSurrogateChars) { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/; + } else { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/; + } + chr = str.match(chars); + if (chr) { + throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index); + } + return str; + }; + + XMLStringifier.prototype.applyCase = function(str) { + switch (this.textCase) { + case "camel": + return camelCase(str); + case "kebab": + case "lower": + return kebabCase(str); + case "snake": + return snakeCase(str); + case "upper": + return kebabCase(str).toUpperCase(); + default: + return str; + } + }; + + XMLStringifier.prototype.elEscape = function(str) { + var ampregex; + ampregex = this.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g; + return str.replace(ampregex, '&').replace(//g, '>').replace(/\r/g, ' '); + }; + + XMLStringifier.prototype.attEscape = function(str) { + var ampregex; + ampregex = this.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g; + return str.replace(ampregex, '&').replace(/=1.0.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/xml2js" + ] + ], + "_from": "xmlbuilder@>=1.0.0", + "_id": "xmlbuilder@5.0.1", + "_inCache": true, + "_installable": true, + "_location": "/xmlbuilder", + "_npmOperationalInternal": { + "host": "packages-13-west.internal.npmjs.com", + "tmp": "tmp/xmlbuilder-5.0.1.tgz_1457392734733_0.19968478404916823" + }, + "_npmUser": { + "email": "oozcitak@gmail.com", + "name": "oozcitak" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "name": "xmlbuilder", + "raw": "xmlbuilder@>=1.0.0", + "rawSpec": ">=1.0.0", + "scope": null, + "spec": ">=1.0.0", + "type": "range" + }, + "_requiredBy": [ + "/xml2js" + ], + "_resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-5.0.1.tgz", + "_shasum": "155f1fb6e860137047443db54a9b263761b1f5c3", + "_shrinkwrap": null, + "_spec": "xmlbuilder@>=1.0.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/xml2js", + "author": { + "email": "oozcitak@gmail.com", + "name": "Ozgur Ozcitak" + }, + "bugs": { + "url": "http://github.com/oozcitak/xmlbuilder-js/issues" + }, + "contributors": [], + "dependencies": { + "lodash": "^4.0.0" + }, + "description": "An XML builder for node.js", + "devDependencies": { + "coffee-coverage": "*", + "coffee-script": "*", + "coveralls": "*", + "istanbul": "*", + "mocha": "*" + }, + "directories": {}, + "dist": { + "shasum": "155f1fb6e860137047443db54a9b263761b1f5c3", + "tarball": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-5.0.1.tgz" + }, + "engines": { + "node": ">=0.10" + }, + "gitHead": "328bfb90488b9823361e329598c5b2c8b9d3c1a8", + "homepage": "http://github.com/oozcitak/xmlbuilder-js", + "keywords": [ + "xml", + "xmlbuilder" + ], + "license": "MIT", + "main": "./lib/index", + "maintainers": [ + { + "email": "oozcitak@gmail.com", + "name": "oozcitak" + } + ], + "name": "xmlbuilder", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/oozcitak/xmlbuilder-js.git" + }, + "scripts": { + "postpublish": "rm -rf lib", + "prepublish": "coffee -co lib src", + "test": "mocha && istanbul report text lcov" + }, + "version": "5.0.1" +} diff --git a/www/package.json b/www/package.json new file mode 100644 index 0000000..70a9554 --- /dev/null +++ b/www/package.json @@ -0,0 +1,15 @@ +{ + "name": "studywelltests", + "version": "1.0.0", + "description": "gui tests for studywell", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Adam Don", + "license": "ISC", + "dependencies": { + "jasmine": "^2.4.1", + "selenium-webdriver": "^2.52.0" + } +} diff --git a/www/reports.html b/www/reports.html index 80dacde..93f0fc1 100644 --- a/www/reports.html +++ b/www/reports.html @@ -25,7 +25,7 @@ - +
      diff --git a/www/resources/js/mic.js b/www/resources/js/mic.js index 944174c..2f67b54 100644 --- a/www/resources/js/mic.js +++ b/www/resources/js/mic.js @@ -87,7 +87,7 @@ function readMic(reading) { //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldMicIntervalNSBool") != null) { //console.log('running updateSampleR'); - updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); + //updateSampleRate(micIntervalNSBool, micSampleRate, localStorage.getItem("oldMicIntervalNSBool"), "microphone"); } //This is so we can compare the values from this interval and the previous interval diff --git a/www/resources/js/motion.js b/www/resources/js/motion.js index 0c14952..750ae00 100644 --- a/www/resources/js/motion.js +++ b/www/resources/js/motion.js @@ -56,7 +56,7 @@ function onSuccessAcc(acceleration) { //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldAccelIntervalNSBool") != null) { //console.log('running updateSampleR'); - updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); + //updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); } //This is so we can compare the values from this interval and the previous interval if (typeof(Storage) !== "undefined") { diff --git a/www/resources/js/study.js b/www/resources/js/study.js index f451c00..b07b7c5 100644 --- a/www/resources/js/study.js +++ b/www/resources/js/study.js @@ -245,8 +245,8 @@ function initialiseMonitoring() { totalDurationPaused = 0; - accelSampleRate = 30000; - micSampleRate = 30000; + accelSampleRate = 30000; //sampling rate for accelerometer + micSampleRate = 30000; //sampling rate for microphone micSteadyScoreCount = 0; micFluctuatingScoreCount = 0; accelSteadyScoreCount = 0; diff --git a/www/schedule.html b/www/schedule.html index 02b456e..3acaa6c 100644 --- a/www/schedule.html +++ b/www/schedule.html @@ -14,7 +14,7 @@ - +
      diff --git a/www/settings.html b/www/settings.html index 2592c82..99e7afa 100644 --- a/www/settings.html +++ b/www/settings.html @@ -25,7 +25,7 @@ - +
      diff --git a/www/spec/UI-help-test.js b/www/spec/UI-help-test.js new file mode 100644 index 0000000..441e50c --- /dev/null +++ b/www/spec/UI-help-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Help Page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/help.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('help'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/www/spec/UI-home-test.js b/www/spec/UI-home-test.js new file mode 100644 index 0000000..b76e64f --- /dev/null +++ b/www/spec/UI-home-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Home Page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/index.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('home'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/www/spec/UI-reports-test.js b/www/spec/UI-reports-test.js new file mode 100644 index 0000000..d8643e9 --- /dev/null +++ b/www/spec/UI-reports-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Report Page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/reports.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('reports'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/www/spec/UI-schedule-test.js b/www/spec/UI-schedule-test.js new file mode 100644 index 0000000..19e0895 --- /dev/null +++ b/www/spec/UI-schedule-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Schedule page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/schedule.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('schedule'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/www/spec/UI-settings-test.js b/www/spec/UI-settings-test.js new file mode 100644 index 0000000..df8240b --- /dev/null +++ b/www/spec/UI-settings-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Settings Page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/settings.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('settings'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/www/spec/support/jasmine.json b/www/spec/support/jasmine.json new file mode 100644 index 0000000..3ea3166 --- /dev/null +++ b/www/spec/support/jasmine.json @@ -0,0 +1,11 @@ +{ + "spec_dir": "spec", + "spec_files": [ + "**/*[sS]pec.js" + ], + "helpers": [ + "helpers/**/*.js" + ], + "stopSpecOnExpectationFailure": false, + "random": false +} From 386b9f75f2e32325d31ec3593ebb2d6f3482c2c2 Mon Sep 17 00:00:00 2001 From: Adam D Date: Sun, 20 Mar 2016 07:59:25 +0000 Subject: [PATCH 20/20] Access method changed --- .../2.2.1/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 84036 -> 360175 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 696388 -> 4847929 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 62789 -> 74275 bytes platforms/android/AndroidManifest.xml | 2 +- platforms/android/android.json | 38 +- .../android/assets/www/cordova_plugins.js | 18 +- .../assets/www/node_modules/.bin/jasmine | 1 + .../assets/www/node_modules/.bin/rimraf | 1 + .../adm-zip/.idea/scopes/scope_settings.xml | 5 + .../www/node_modules/adm-zip/MIT-LICENSE.txt | 21 + .../assets/www/node_modules/adm-zip/README.md | 64 + .../www/node_modules/adm-zip/adm-zip.js | 404 + .../adm-zip/headers/entryHeader.js | 261 + .../www/node_modules/adm-zip/headers/index.js | 2 + .../adm-zip/headers/mainHeader.js | 80 + .../node_modules/adm-zip/methods/deflater.js | 1578 ++ .../www/node_modules/adm-zip/methods/index.js | 2 + .../node_modules/adm-zip/methods/inflater.js | 448 + .../www/node_modules/adm-zip/package.json | 83 + .../adm-zip/test/assets/attributes_test.zip | Bin 0 -> 4189 bytes .../attributes_test/New folder/hidden.txt | 17 + .../New folder/hidden_readonly.txt | 17 + .../attributes_test/New folder/readonly.txt | 17 + .../attributes_test/New folder/somefile.txt | 17 + .../attributes_test/asd/New Text Document.txt | 0 .../assets/attributes_test/blank file.txt | 0 .../node_modules/adm-zip/test/assets/fast.zip | Bin 0 -> 4194 bytes .../adm-zip/test/assets/fastest.zip | Bin 0 -> 4194 bytes .../adm-zip/test/assets/linux_arc.zip | Bin 0 -> 415 bytes .../adm-zip/test/assets/maximum.zip | Bin 0 -> 4086 bytes .../adm-zip/test/assets/normal.zip | Bin 0 -> 4170 bytes .../adm-zip/test/assets/store.zip | Bin 0 -> 5878 bytes .../adm-zip/test/assets/ultra.zip | Bin 0 -> 4086 bytes .../www/node_modules/adm-zip/test/index.js | 5 + .../node_modules/adm-zip/util/constants.js | 84 + .../www/node_modules/adm-zip/util/errors.js | 35 + .../www/node_modules/adm-zip/util/fattr.js | 84 + .../www/node_modules/adm-zip/util/index.js | 4 + .../www/node_modules/adm-zip/util/utils.js | 145 + .../www/node_modules/adm-zip/zipEntry.js | 224 + .../www/node_modules/adm-zip/zipFile.js | 311 + .../node_modules/balanced-match/.npmignore | 2 + .../node_modules/balanced-match/.travis.yml | 3 + .../node_modules/balanced-match/LICENSE.md | 21 + .../www/node_modules/balanced-match/Makefile | 6 + .../www/node_modules/balanced-match/README.md | 89 + .../node_modules/balanced-match/example.js | 5 + .../www/node_modules/balanced-match/index.js | 50 + .../node_modules/balanced-match/package.json | 98 + .../balanced-match/test/balanced.js | 84 + .../node_modules/brace-expansion/.npmignore | 3 + .../node_modules/brace-expansion/README.md | 122 + .../node_modules/brace-expansion/example.js | 8 + .../www/node_modules/brace-expansion/index.js | 191 + .../node_modules/brace-expansion/package.json | 104 + .../www/node_modules/concat-map/.travis.yml | 4 + .../www/node_modules/concat-map/LICENSE | 18 + .../node_modules/concat-map/README.markdown | 62 + .../node_modules/concat-map/example/map.js | 6 + .../www/node_modules/concat-map/index.js | 13 + .../www/node_modules/concat-map/package.json | 109 + .../www/node_modules/concat-map/test/map.js | 39 + .../assets/www/node_modules/exit/.jshintrc | 14 + .../assets/www/node_modules/exit/.npmignore | 0 .../assets/www/node_modules/exit/.travis.yml | 6 + .../assets/www/node_modules/exit/Gruntfile.js | 48 + .../assets/www/node_modules/exit/LICENSE-MIT | 22 + .../assets/www/node_modules/exit/README.md | 75 + .../assets/www/node_modules/exit/lib/exit.js | 41 + .../assets/www/node_modules/exit/package.json | 95 + .../www/node_modules/exit/test/exit_test.js | 121 + .../exit/test/fixtures/10-stderr.txt | 10 + .../exit/test/fixtures/10-stdout-stderr.txt | 20 + .../exit/test/fixtures/10-stdout.txt | 10 + .../exit/test/fixtures/100-stderr.txt | 100 + .../exit/test/fixtures/100-stdout-stderr.txt | 200 + .../exit/test/fixtures/100-stdout.txt | 100 + .../exit/test/fixtures/1000-stderr.txt | 1000 + .../exit/test/fixtures/1000-stdout-stderr.txt | 2000 ++ .../exit/test/fixtures/1000-stdout.txt | 1000 + .../exit/test/fixtures/create-files.sh | 8 + .../exit/test/fixtures/log-broken.js | 23 + .../node_modules/exit/test/fixtures/log.js | 25 + .../assets/www/node_modules/glob/LICENSE | 15 + .../assets/www/node_modules/glob/README.md | 365 + .../assets/www/node_modules/glob/changelog.md | 67 + .../assets/www/node_modules/glob/common.js | 235 + .../assets/www/node_modules/glob/glob.js | 782 + .../assets/www/node_modules/glob/package.json | 102 + .../assets/www/node_modules/glob/sync.js | 467 + .../www/node_modules/inflight/.eslintrc | 17 + .../assets/www/node_modules/inflight/LICENSE | 15 + .../www/node_modules/inflight/README.md | 37 + .../www/node_modules/inflight/inflight.js | 44 + .../www/node_modules/inflight/package.json | 86 + .../assets/www/node_modules/inflight/test.js | 97 + .../assets/www/node_modules/inherits/LICENSE | 16 + .../www/node_modules/inherits/README.md | 42 + .../www/node_modules/inherits/inherits.js | 1 + .../node_modules/inherits/inherits_browser.js | 23 + .../www/node_modules/inherits/package.json | 77 + .../assets/www/node_modules/inherits/test.js | 25 + .../www/node_modules/jasmine-core/.npmignore | 28 + .../node_modules/jasmine-core/CONTRIBUTING.md | 130 + .../www/node_modules/jasmine-core/MANIFEST.in | 5 + .../www/node_modules/jasmine-core/MIT.LICENSE | 20 + .../www/node_modules/jasmine-core/README.md | 76 + .../www/node_modules/jasmine-core/RELEASE.md | 73 + .../www/node_modules/jasmine-core/bower.json | 40 + .../images/jasmine-horizontal.png | Bin 0 -> 1714 bytes .../images/jasmine-horizontal.svg | 102 + .../jasmine-core/images/jasmine_favicon.png | Bin 0 -> 1486 bytes .../jasmine_core.egg-info/PKG-INFO | 30 + .../jasmine_core.egg-info/SOURCES.txt | 18 + .../dependency_links.txt | 1 + .../jasmine_core.egg-info/requires.txt | 2 + .../jasmine_core.egg-info/top_level.txt | 1 + .../jasmine-core/lib/console/console.js | 190 + .../jasmine-core/lib/jasmine-core.js | 37 + .../jasmine-core/lib/jasmine-core/boot.js | 152 + .../lib/jasmine_examples/Player.js | 24 + .../node_example/lib/jasmine_examples/Song.js | 9 + .../helpers/jasmine_examples/SpecHelper.js | 15 + .../spec/jasmine_examples/PlayerSpec.js | 60 + .../jasmine-core/example/spec/PlayerSpec.js | 58 + .../jasmine-core/example/spec/SpecHelper.js | 15 + .../lib/jasmine-core/example/src/Player.js | 22 + .../lib/jasmine-core/example/src/Song.js | 7 + .../lib/jasmine-core/jasmine-html.js | 473 + .../jasmine-core/lib/jasmine-core/jasmine.css | 58 + .../jasmine-core/lib/jasmine-core/jasmine.js | 3454 ++++ .../jasmine-core/lib/jasmine-core/json2.js | 489 + .../lib/jasmine-core/node_boot.js | 41 + .../node_modules/jasmine-core/package.json | 90 + .../jasmine-core/requirements.txt | 1 + .../www/node_modules/jasmine/.travis.yml | 5 + .../www/node_modules/jasmine/Gruntfile.js | 44 + .../assets/www/node_modules/jasmine/README.md | 48 + .../www/node_modules/jasmine/bin/jasmine.js | 11 + .../www/node_modules/jasmine/lib/command.js | 220 + .../jasmine/lib/examples/jasmine.json | 11 + .../www/node_modules/jasmine/lib/exit.js | 17 + .../lib/filters/console_spec_filter.js | 10 + .../www/node_modules/jasmine/lib/jasmine.js | 170 + .../jasmine/lib/printDeprecation.js | 3 + .../jasmine/lib/reporters/console_reporter.js | 208 + .../lib/reporters/exit_code_reporter.js | 24 + .../jasmine/node_modules/glob/.npmignore | 2 + .../jasmine/node_modules/glob/.travis.yml | 3 + .../jasmine/node_modules/glob/LICENSE | 27 + .../jasmine/node_modules/glob/README.md | 250 + .../jasmine/node_modules/glob/examples/g.js | 9 + .../node_modules/glob/examples/usr-local.js | 9 + .../jasmine/node_modules/glob/glob.js | 728 + .../jasmine/node_modules/glob/package.json | 83 + .../node_modules/glob/test/00-setup.js | 176 + .../node_modules/glob/test/bash-comparison.js | 63 + .../node_modules/glob/test/bash-results.json | 351 + .../node_modules/glob/test/cwd-test.js | 55 + .../node_modules/glob/test/globstar-match.js | 19 + .../jasmine/node_modules/glob/test/mark.js | 118 + .../glob/test/new-glob-optional-options.js | 10 + .../node_modules/glob/test/nocase-nomagic.js | 113 + .../node_modules/glob/test/pause-resume.js | 73 + .../node_modules/glob/test/readme-issue.js | 36 + .../node_modules/glob/test/root-nomount.js | 39 + .../jasmine/node_modules/glob/test/root.js | 46 + .../jasmine/node_modules/glob/test/stat.js | 32 + .../node_modules/glob/test/zz-cleanup.js | 11 + .../jasmine/node_modules/minimatch/.npmignore | 1 + .../jasmine/node_modules/minimatch/LICENSE | 23 + .../jasmine/node_modules/minimatch/README.md | 218 + .../node_modules/minimatch/minimatch.js | 1061 ++ .../node_modules/minimatch/package.json | 82 + .../node_modules/minimatch/test/basic.js | 399 + .../minimatch/test/brace-expand.js | 33 + .../node_modules/minimatch/test/caching.js | 14 + .../node_modules/minimatch/test/defaults.js | 274 + .../test/extglob-ending-with-state-char.js | 8 + .../www/node_modules/jasmine/package.json | 98 + .../www/node_modules/jasmine/tasks/jasmine.js | 14 + .../assets/www/node_modules/lodash/LICENSE | 23 + .../assets/www/node_modules/lodash/README.md | 40 + .../assets/www/node_modules/lodash/_Hash.js | 18 + .../www/node_modules/lodash/_LazyWrapper.js | 27 + .../www/node_modules/lodash/_LodashWrapper.js | 22 + .../assets/www/node_modules/lodash/_Map.js | 7 + .../www/node_modules/lodash/_MapCache.js | 32 + .../www/node_modules/lodash/_Reflect.js | 6 + .../assets/www/node_modules/lodash/_Set.js | 7 + .../www/node_modules/lodash/_SetCache.js | 25 + .../assets/www/node_modules/lodash/_Stack.js | 32 + .../assets/www/node_modules/lodash/_Symbol.js | 6 + .../www/node_modules/lodash/_Uint8Array.js | 6 + .../www/node_modules/lodash/_WeakMap.js | 7 + .../www/node_modules/lodash/_addMapEntry.js | 15 + .../www/node_modules/lodash/_addSetEntry.js | 14 + .../assets/www/node_modules/lodash/_apply.js | 22 + .../node_modules/lodash/_arrayAggregator.js | 22 + .../www/node_modules/lodash/_arrayConcat.js | 25 + .../www/node_modules/lodash/_arrayEach.js | 22 + .../node_modules/lodash/_arrayEachRight.js | 21 + .../www/node_modules/lodash/_arrayEvery.js | 22 + .../www/node_modules/lodash/_arrayFilter.js | 25 + .../www/node_modules/lodash/_arrayIncludes.js | 16 + .../node_modules/lodash/_arrayIncludesWith.js | 22 + .../www/node_modules/lodash/_arrayMap.js | 21 + .../www/node_modules/lodash/_arrayPush.js | 20 + .../www/node_modules/lodash/_arrayReduce.js | 25 + .../node_modules/lodash/_arrayReduceRight.js | 23 + .../www/node_modules/lodash/_arraySome.js | 22 + .../node_modules/lodash/_assignInDefaults.js | 27 + .../node_modules/lodash/_assignMergeValue.js | 19 + .../www/node_modules/lodash/_assignValue.js | 27 + .../www/node_modules/lodash/_assocDelete.js | 31 + .../www/node_modules/lodash/_assocGet.js | 16 + .../www/node_modules/lodash/_assocHas.js | 15 + .../www/node_modules/lodash/_assocIndexOf.js | 22 + .../www/node_modules/lodash/_assocSet.js | 20 + .../node_modules/lodash/_baseAggregator.js | 21 + .../www/node_modules/lodash/_baseAssign.js | 17 + .../assets/www/node_modules/lodash/_baseAt.js | 23 + .../lodash/_baseCastArrayLikeObject.js | 14 + .../node_modules/lodash/_baseCastFunction.js | 14 + .../www/node_modules/lodash/_baseCastPath.js | 15 + .../www/node_modules/lodash/_baseClamp.js | 22 + .../www/node_modules/lodash/_baseClone.js | 131 + .../www/node_modules/lodash/_baseConforms.js | 32 + .../www/node_modules/lodash/_baseCreate.js | 18 + .../www/node_modules/lodash/_baseDelay.js | 21 + .../node_modules/lodash/_baseDifference.js | 66 + .../www/node_modules/lodash/_baseEach.js | 14 + .../www/node_modules/lodash/_baseEachRight.js | 14 + .../www/node_modules/lodash/_baseEvery.js | 20 + .../www/node_modules/lodash/_baseExtremum.js | 30 + .../www/node_modules/lodash/_baseFill.js | 32 + .../www/node_modules/lodash/_baseFilter.js | 21 + .../www/node_modules/lodash/_baseFind.js | 24 + .../www/node_modules/lodash/_baseFindIndex.js | 23 + .../www/node_modules/lodash/_baseFlatten.js | 39 + .../www/node_modules/lodash/_baseFor.js | 17 + .../www/node_modules/lodash/_baseForIn.js | 16 + .../www/node_modules/lodash/_baseForOwn.js | 16 + .../node_modules/lodash/_baseForOwnRight.js | 16 + .../www/node_modules/lodash/_baseForRight.js | 15 + .../www/node_modules/lodash/_baseFunctions.js | 19 + .../www/node_modules/lodash/_baseGet.js | 24 + .../www/node_modules/lodash/_baseHas.js | 26 + .../www/node_modules/lodash/_baseHasIn.js | 13 + .../www/node_modules/lodash/_baseInRange.js | 18 + .../www/node_modules/lodash/_baseIndexOf.js | 27 + .../node_modules/lodash/_baseIndexOfWith.js | 23 + .../node_modules/lodash/_baseIntersection.js | 73 + .../www/node_modules/lodash/_baseInverter.js | 21 + .../www/node_modules/lodash/_baseInvoke.js | 27 + .../www/node_modules/lodash/_baseIsEqual.js | 30 + .../node_modules/lodash/_baseIsEqualDeep.js | 78 + .../www/node_modules/lodash/_baseIsMatch.js | 61 + .../www/node_modules/lodash/_baseIteratee.js | 30 + .../www/node_modules/lodash/_baseKeys.js | 16 + .../www/node_modules/lodash/_baseKeysIn.js | 36 + .../www/node_modules/lodash/_baseLodash.js | 10 + .../www/node_modules/lodash/_baseMap.js | 22 + .../www/node_modules/lodash/_baseMatches.js | 30 + .../lodash/_baseMatchesProperty.js | 26 + .../www/node_modules/lodash/_baseMerge.js | 50 + .../www/node_modules/lodash/_baseMergeDeep.js | 82 + .../www/node_modules/lodash/_baseOrderBy.js | 32 + .../www/node_modules/lodash/_basePick.js | 22 + .../www/node_modules/lodash/_basePickBy.js | 21 + .../www/node_modules/lodash/_baseProperty.js | 14 + .../node_modules/lodash/_basePropertyDeep.js | 16 + .../www/node_modules/lodash/_basePullAll.js | 47 + .../www/node_modules/lodash/_basePullAt.js | 49 + .../www/node_modules/lodash/_baseRandom.js | 18 + .../www/node_modules/lodash/_baseRange.js | 28 + .../www/node_modules/lodash/_baseReduce.js | 22 + .../www/node_modules/lodash/_baseSet.js | 45 + .../www/node_modules/lodash/_baseSetData.js | 17 + .../www/node_modules/lodash/_baseSlice.js | 31 + .../www/node_modules/lodash/_baseSome.js | 21 + .../www/node_modules/lodash/_baseSortBy.js | 21 + .../node_modules/lodash/_baseSortedIndex.js | 40 + .../node_modules/lodash/_baseSortedIndexBy.js | 56 + .../node_modules/lodash/_baseSortedUniq.js | 14 + .../node_modules/lodash/_baseSortedUniqBy.js | 33 + .../www/node_modules/lodash/_baseSum.js | 23 + .../www/node_modules/lodash/_baseTimes.js | 20 + .../www/node_modules/lodash/_baseToPairs.js | 18 + .../www/node_modules/lodash/_baseUnary.js | 14 + .../www/node_modules/lodash/_baseUniq.js | 71 + .../www/node_modules/lodash/_baseUnset.js | 22 + .../www/node_modules/lodash/_baseUpdate.js | 18 + .../www/node_modules/lodash/_baseValues.js | 19 + .../www/node_modules/lodash/_baseWhile.js | 26 + .../node_modules/lodash/_baseWrapperValue.js | 25 + .../www/node_modules/lodash/_baseXor.js | 30 + .../www/node_modules/lodash/_baseZipObject.js | 22 + .../www/node_modules/lodash/_cacheHas.js | 25 + .../www/node_modules/lodash/_cachePush.js | 27 + .../www/node_modules/lodash/_charsEndIndex.js | 19 + .../node_modules/lodash/_charsStartIndex.js | 20 + .../www/node_modules/lodash/_checkGlobal.js | 12 + .../node_modules/lodash/_cloneArrayBuffer.js | 16 + .../www/node_modules/lodash/_cloneBuffer.js | 18 + .../www/node_modules/lodash/_cloneMap.js | 16 + .../www/node_modules/lodash/_cloneRegExp.js | 17 + .../www/node_modules/lodash/_cloneSet.js | 16 + .../www/node_modules/lodash/_cloneSymbol.js | 18 + .../node_modules/lodash/_cloneTypedArray.js | 16 + .../node_modules/lodash/_compareAscending.js | 33 + .../node_modules/lodash/_compareMultiple.js | 44 + .../www/node_modules/lodash/_composeArgs.js | 39 + .../node_modules/lodash/_composeArgsRight.js | 41 + .../www/node_modules/lodash/_copyArray.js | 20 + .../www/node_modules/lodash/_copyObject.js | 16 + .../node_modules/lodash/_copyObjectWith.js | 32 + .../www/node_modules/lodash/_copySymbols.js | 16 + .../www/node_modules/lodash/_countHolders.js | 21 + .../node_modules/lodash/_createAggregator.js | 23 + .../node_modules/lodash/_createAssigner.js | 37 + .../node_modules/lodash/_createBaseEach.js | 32 + .../www/node_modules/lodash/_createBaseFor.js | 25 + .../node_modules/lodash/_createBaseWrapper.js | 28 + .../node_modules/lodash/_createCaseFirst.js | 38 + .../node_modules/lodash/_createCompounder.js | 18 + .../node_modules/lodash/_createCtorWrapper.js | 37 + .../lodash/_createCurryWrapper.js | 46 + .../www/node_modules/lodash/_createFlow.js | 83 + .../lodash/_createHybridWrapper.js | 90 + .../node_modules/lodash/_createInverter.js | 17 + .../www/node_modules/lodash/_createOver.js | 26 + .../www/node_modules/lodash/_createPadding.js | 47 + .../lodash/_createPartialWrapper.js | 43 + .../www/node_modules/lodash/_createRange.js | 31 + .../lodash/_createRecurryWrapper.js | 56 + .../www/node_modules/lodash/_createRound.js | 30 + .../www/node_modules/lodash/_createSet.js | 15 + .../www/node_modules/lodash/_createWrapper.js | 105 + .../www/node_modules/lodash/_deburrLetter.js | 33 + .../www/node_modules/lodash/_equalArrays.js | 72 + .../www/node_modules/lodash/_equalByTag.js | 99 + .../www/node_modules/lodash/_equalObjects.js | 82 + .../node_modules/lodash/_escapeHtmlChar.js | 22 + .../node_modules/lodash/_escapeStringChar.js | 22 + .../www/node_modules/lodash/_getData.js | 15 + .../www/node_modules/lodash/_getFuncName.js | 31 + .../www/node_modules/lodash/_getLength.js | 15 + .../www/node_modules/lodash/_getMatchData.js | 21 + .../www/node_modules/lodash/_getNative.js | 16 + .../node_modules/lodash/_getPlaceholder.js | 13 + .../www/node_modules/lodash/_getSymbols.js | 15 + .../assets/www/node_modules/lodash/_getTag.js | 59 + .../www/node_modules/lodash/_getView.js | 33 + .../www/node_modules/lodash/_hasPath.js | 40 + .../www/node_modules/lodash/_hashDelete.js | 15 + .../www/node_modules/lodash/_hashGet.js | 28 + .../www/node_modules/lodash/_hashHas.js | 21 + .../www/node_modules/lodash/_hashSet.js | 18 + .../www/node_modules/lodash/_indexKeys.js | 24 + .../www/node_modules/lodash/_indexOfNaN.js | 23 + .../node_modules/lodash/_initCloneArray.js | 26 + .../node_modules/lodash/_initCloneByTag.js | 74 + .../node_modules/lodash/_initCloneObject.js | 20 + .../www/node_modules/lodash/_isHostObject.js | 20 + .../www/node_modules/lodash/_isIndex.js | 21 + .../node_modules/lodash/_isIterateeCall.js | 28 + .../assets/www/node_modules/lodash/_isKey.js | 24 + .../www/node_modules/lodash/_isKeyable.js | 14 + .../www/node_modules/lodash/_isLaziable.js | 27 + .../www/node_modules/lodash/_isPrototype.js | 18 + .../lodash/_isStrictComparable.js | 15 + .../node_modules/lodash/_iteratorToArray.js | 18 + .../www/node_modules/lodash/_lazyClone.js | 23 + .../www/node_modules/lodash/_lazyReverse.js | 23 + .../www/node_modules/lodash/_lazyValue.js | 73 + .../www/node_modules/lodash/_mapClear.js | 19 + .../www/node_modules/lodash/_mapDelete.js | 23 + .../assets/www/node_modules/lodash/_mapGet.js | 23 + .../assets/www/node_modules/lodash/_mapHas.js | 23 + .../assets/www/node_modules/lodash/_mapSet.js | 28 + .../www/node_modules/lodash/_mapToArray.js | 18 + .../www/node_modules/lodash/_mergeData.js | 90 + .../www/node_modules/lodash/_mergeDefaults.js | 23 + .../www/node_modules/lodash/_metaMap.js | 6 + .../www/node_modules/lodash/_nativeCreate.js | 6 + .../assets/www/node_modules/lodash/_parent.js | 16 + .../www/node_modules/lodash/_reEscape.js | 4 + .../www/node_modules/lodash/_reEvaluate.js | 4 + .../www/node_modules/lodash/_reInterpolate.js | 4 + .../www/node_modules/lodash/_realNames.js | 4 + .../www/node_modules/lodash/_reorder.js | 29 + .../node_modules/lodash/_replaceHolders.js | 29 + .../assets/www/node_modules/lodash/_root.js | 41 + .../www/node_modules/lodash/_setData.js | 41 + .../www/node_modules/lodash/_setToArray.js | 18 + .../www/node_modules/lodash/_stackClear.js | 12 + .../www/node_modules/lodash/_stackDelete.js | 19 + .../www/node_modules/lodash/_stackGet.js | 19 + .../www/node_modules/lodash/_stackHas.js | 19 + .../www/node_modules/lodash/_stackSet.js | 36 + .../www/node_modules/lodash/_stringSize.js | 48 + .../www/node_modules/lodash/_stringToArray.js | 38 + .../www/node_modules/lodash/_stringToPath.js | 24 + .../node_modules/lodash/_unescapeHtmlChar.js | 22 + .../www/node_modules/lodash/_wrapperClone.js | 23 + .../assets/www/node_modules/lodash/add.js | 29 + .../assets/www/node_modules/lodash/after.js | 41 + .../assets/www/node_modules/lodash/array.js | 65 + .../assets/www/node_modules/lodash/ary.js | 28 + .../assets/www/node_modules/lodash/assign.js | 62 + .../www/node_modules/lodash/assignIn.js | 56 + .../www/node_modules/lodash/assignInWith.js | 36 + .../www/node_modules/lodash/assignWith.js | 35 + .../assets/www/node_modules/lodash/at.js | 29 + .../assets/www/node_modules/lodash/attempt.js | 33 + .../assets/www/node_modules/lodash/before.js | 39 + .../assets/www/node_modules/lodash/bind.js | 57 + .../assets/www/node_modules/lodash/bindAll.js | 39 + .../assets/www/node_modules/lodash/bindKey.js | 67 + .../www/node_modules/lodash/camelCase.js | 28 + .../www/node_modules/lodash/capitalize.js | 22 + .../www/node_modules/lodash/castArray.js | 43 + .../assets/www/node_modules/lodash/ceil.js | 25 + .../assets/www/node_modules/lodash/chain.js | 36 + .../assets/www/node_modules/lodash/chunk.js | 44 + .../assets/www/node_modules/lodash/clamp.js | 38 + .../assets/www/node_modules/lodash/clone.js | 31 + .../www/node_modules/lodash/cloneDeep.js | 23 + .../www/node_modules/lodash/cloneDeepWith.js | 33 + .../www/node_modules/lodash/cloneWith.js | 36 + .../www/node_modules/lodash/collection.js | 29 + .../assets/www/node_modules/lodash/commit.js | 32 + .../assets/www/node_modules/lodash/compact.js | 30 + .../assets/www/node_modules/lodash/concat.js | 35 + .../assets/www/node_modules/lodash/cond.js | 58 + .../www/node_modules/lodash/conforms.js | 28 + .../www/node_modules/lodash/constant.js | 23 + .../assets/www/node_modules/lodash/core.js | 3826 ++++ .../www/node_modules/lodash/core.min.js | 29 + .../assets/www/node_modules/lodash/countBy.js | 33 + .../assets/www/node_modules/lodash/create.js | 41 + .../assets/www/node_modules/lodash/curry.js | 56 + .../www/node_modules/lodash/curryRight.js | 53 + .../assets/www/node_modules/lodash/date.js | 3 + .../www/node_modules/lodash/debounce.js | 177 + .../assets/www/node_modules/lodash/deburr.js | 39 + .../www/node_modules/lodash/defaults.js | 30 + .../www/node_modules/lodash/defaultsDeep.js | 29 + .../assets/www/node_modules/lodash/defer.js | 25 + .../assets/www/node_modules/lodash/delay.js | 27 + .../www/node_modules/lodash/difference.js | 29 + .../www/node_modules/lodash/differenceBy.js | 40 + .../www/node_modules/lodash/differenceWith.js | 37 + .../assets/www/node_modules/lodash/drop.js | 37 + .../www/node_modules/lodash/dropRight.js | 38 + .../www/node_modules/lodash/dropRightWhile.js | 44 + .../www/node_modules/lodash/dropWhile.js | 44 + .../assets/www/node_modules/lodash/each.js | 1 + .../www/node_modules/lodash/eachRight.js | 1 + .../www/node_modules/lodash/endsWith.js | 39 + .../assets/www/node_modules/lodash/eq.js | 35 + .../assets/www/node_modules/lodash/escape.js | 47 + .../www/node_modules/lodash/escapeRegExp.js | 28 + .../assets/www/node_modules/lodash/every.js | 49 + .../assets/www/node_modules/lodash/extend.js | 1 + .../www/node_modules/lodash/extendWith.js | 1 + .../assets/www/node_modules/lodash/fill.js | 44 + .../assets/www/node_modules/lodash/filter.js | 44 + .../assets/www/node_modules/lodash/find.js | 50 + .../www/node_modules/lodash/findIndex.js | 43 + .../assets/www/node_modules/lodash/findKey.js | 42 + .../www/node_modules/lodash/findLast.js | 33 + .../www/node_modules/lodash/findLastIndex.js | 43 + .../www/node_modules/lodash/findLastKey.js | 42 + .../assets/www/node_modules/lodash/flatMap.js | 28 + .../assets/www/node_modules/lodash/flatten.js | 21 + .../www/node_modules/lodash/flattenDeep.js | 24 + .../www/node_modules/lodash/flattenDepth.js | 32 + .../assets/www/node_modules/lodash/flip.js | 27 + .../assets/www/node_modules/lodash/floor.js | 25 + .../assets/www/node_modules/lodash/flow.js | 25 + .../www/node_modules/lodash/flowRight.js | 24 + .../assets/www/node_modules/lodash/forEach.js | 40 + .../www/node_modules/lodash/forEachRight.js | 30 + .../assets/www/node_modules/lodash/forIn.js | 37 + .../www/node_modules/lodash/forInRight.js | 35 + .../assets/www/node_modules/lodash/forOwn.js | 34 + .../www/node_modules/lodash/forOwnRight.js | 32 + .../assets/www/node_modules/lodash/fp.js | 2 + .../node_modules/lodash/fp/_baseConvert.js | 319 + .../node_modules/lodash/fp/_convertBrowser.js | 17 + .../www/node_modules/lodash/fp/_mapping.js | 243 + .../www/node_modules/lodash/fp/_util.js | 13 + .../assets/www/node_modules/lodash/fp/add.js | 2 + .../www/node_modules/lodash/fp/after.js | 2 + .../assets/www/node_modules/lodash/fp/all.js | 1 + .../www/node_modules/lodash/fp/allPass.js | 1 + .../www/node_modules/lodash/fp/apply.js | 1 + .../www/node_modules/lodash/fp/array.js | 2 + .../assets/www/node_modules/lodash/fp/ary.js | 2 + .../www/node_modules/lodash/fp/assign.js | 2 + .../www/node_modules/lodash/fp/assignIn.js | 2 + .../node_modules/lodash/fp/assignInWith.js | 2 + .../www/node_modules/lodash/fp/assignWith.js | 2 + .../www/node_modules/lodash/fp/assoc.js | 1 + .../www/node_modules/lodash/fp/assocPath.js | 1 + .../assets/www/node_modules/lodash/fp/at.js | 2 + .../www/node_modules/lodash/fp/attempt.js | 2 + .../www/node_modules/lodash/fp/before.js | 2 + .../assets/www/node_modules/lodash/fp/bind.js | 2 + .../www/node_modules/lodash/fp/bindAll.js | 1 + .../www/node_modules/lodash/fp/bindKey.js | 2 + .../www/node_modules/lodash/fp/camelCase.js | 1 + .../www/node_modules/lodash/fp/capitalize.js | 1 + .../www/node_modules/lodash/fp/castArray.js | 2 + .../assets/www/node_modules/lodash/fp/ceil.js | 2 + .../www/node_modules/lodash/fp/chain.js | 1 + .../www/node_modules/lodash/fp/chunk.js | 2 + .../www/node_modules/lodash/fp/clamp.js | 2 + .../www/node_modules/lodash/fp/clone.js | 1 + .../www/node_modules/lodash/fp/cloneDeep.js | 1 + .../node_modules/lodash/fp/cloneDeepWith.js | 2 + .../www/node_modules/lodash/fp/cloneWith.js | 2 + .../www/node_modules/lodash/fp/collection.js | 2 + .../www/node_modules/lodash/fp/commit.js | 1 + .../www/node_modules/lodash/fp/compact.js | 1 + .../www/node_modules/lodash/fp/compose.js | 1 + .../www/node_modules/lodash/fp/concat.js | 2 + .../assets/www/node_modules/lodash/fp/cond.js | 1 + .../www/node_modules/lodash/fp/conforms.js | 1 + .../www/node_modules/lodash/fp/constant.js | 1 + .../www/node_modules/lodash/fp/contains.js | 1 + .../www/node_modules/lodash/fp/convert.js | 17 + .../www/node_modules/lodash/fp/countBy.js | 2 + .../www/node_modules/lodash/fp/create.js | 2 + .../www/node_modules/lodash/fp/curry.js | 2 + .../www/node_modules/lodash/fp/curryN.js | 2 + .../www/node_modules/lodash/fp/curryRight.js | 2 + .../www/node_modules/lodash/fp/curryRightN.js | 2 + .../assets/www/node_modules/lodash/fp/date.js | 2 + .../www/node_modules/lodash/fp/debounce.js | 2 + .../www/node_modules/lodash/fp/deburr.js | 1 + .../www/node_modules/lodash/fp/defaults.js | 2 + .../node_modules/lodash/fp/defaultsDeep.js | 2 + .../www/node_modules/lodash/fp/defer.js | 1 + .../www/node_modules/lodash/fp/delay.js | 2 + .../www/node_modules/lodash/fp/difference.js | 2 + .../node_modules/lodash/fp/differenceBy.js | 2 + .../node_modules/lodash/fp/differenceWith.js | 2 + .../www/node_modules/lodash/fp/dissoc.js | 1 + .../www/node_modules/lodash/fp/dissocPath.js | 1 + .../assets/www/node_modules/lodash/fp/drop.js | 2 + .../www/node_modules/lodash/fp/dropRight.js | 2 + .../node_modules/lodash/fp/dropRightWhile.js | 2 + .../www/node_modules/lodash/fp/dropWhile.js | 2 + .../assets/www/node_modules/lodash/fp/each.js | 1 + .../www/node_modules/lodash/fp/eachRight.js | 1 + .../www/node_modules/lodash/fp/endsWith.js | 2 + .../assets/www/node_modules/lodash/fp/eq.js | 2 + .../www/node_modules/lodash/fp/equals.js | 1 + .../www/node_modules/lodash/fp/escape.js | 1 + .../node_modules/lodash/fp/escapeRegExp.js | 1 + .../www/node_modules/lodash/fp/every.js | 2 + .../www/node_modules/lodash/fp/extend.js | 1 + .../www/node_modules/lodash/fp/extendWith.js | 1 + .../assets/www/node_modules/lodash/fp/fill.js | 2 + .../www/node_modules/lodash/fp/filter.js | 2 + .../assets/www/node_modules/lodash/fp/find.js | 2 + .../www/node_modules/lodash/fp/findIndex.js | 2 + .../www/node_modules/lodash/fp/findKey.js | 2 + .../www/node_modules/lodash/fp/findLast.js | 2 + .../node_modules/lodash/fp/findLastIndex.js | 2 + .../www/node_modules/lodash/fp/findLastKey.js | 2 + .../www/node_modules/lodash/fp/first.js | 1 + .../www/node_modules/lodash/fp/flatMap.js | 2 + .../www/node_modules/lodash/fp/flatten.js | 1 + .../www/node_modules/lodash/fp/flattenDeep.js | 1 + .../node_modules/lodash/fp/flattenDepth.js | 2 + .../assets/www/node_modules/lodash/fp/flip.js | 1 + .../www/node_modules/lodash/fp/floor.js | 2 + .../assets/www/node_modules/lodash/fp/flow.js | 1 + .../www/node_modules/lodash/fp/flowRight.js | 1 + .../www/node_modules/lodash/fp/forEach.js | 2 + .../node_modules/lodash/fp/forEachRight.js | 2 + .../www/node_modules/lodash/fp/forIn.js | 2 + .../www/node_modules/lodash/fp/forInRight.js | 2 + .../www/node_modules/lodash/fp/forOwn.js | 2 + .../www/node_modules/lodash/fp/forOwnRight.js | 2 + .../www/node_modules/lodash/fp/fromPairs.js | 2 + .../www/node_modules/lodash/fp/function.js | 2 + .../www/node_modules/lodash/fp/functions.js | 1 + .../www/node_modules/lodash/fp/functionsIn.js | 1 + .../assets/www/node_modules/lodash/fp/get.js | 2 + .../www/node_modules/lodash/fp/getOr.js | 2 + .../www/node_modules/lodash/fp/groupBy.js | 2 + .../assets/www/node_modules/lodash/fp/gt.js | 2 + .../assets/www/node_modules/lodash/fp/gte.js | 2 + .../assets/www/node_modules/lodash/fp/has.js | 2 + .../www/node_modules/lodash/fp/hasIn.js | 2 + .../assets/www/node_modules/lodash/fp/head.js | 1 + .../www/node_modules/lodash/fp/identity.js | 1 + .../www/node_modules/lodash/fp/inRange.js | 2 + .../www/node_modules/lodash/fp/includes.js | 2 + .../www/node_modules/lodash/fp/indexOf.js | 2 + .../assets/www/node_modules/lodash/fp/init.js | 1 + .../www/node_modules/lodash/fp/initial.js | 1 + .../node_modules/lodash/fp/intersection.js | 2 + .../node_modules/lodash/fp/intersectionBy.js | 2 + .../lodash/fp/intersectionWith.js | 2 + .../www/node_modules/lodash/fp/invert.js | 2 + .../www/node_modules/lodash/fp/invertBy.js | 2 + .../www/node_modules/lodash/fp/invoke.js | 2 + .../www/node_modules/lodash/fp/invokeMap.js | 2 + .../www/node_modules/lodash/fp/isArguments.js | 1 + .../www/node_modules/lodash/fp/isArray.js | 1 + .../node_modules/lodash/fp/isArrayBuffer.js | 1 + .../www/node_modules/lodash/fp/isArrayLike.js | 1 + .../lodash/fp/isArrayLikeObject.js | 1 + .../www/node_modules/lodash/fp/isBoolean.js | 1 + .../www/node_modules/lodash/fp/isBuffer.js | 1 + .../www/node_modules/lodash/fp/isDate.js | 1 + .../www/node_modules/lodash/fp/isElement.js | 1 + .../www/node_modules/lodash/fp/isEmpty.js | 1 + .../www/node_modules/lodash/fp/isEqual.js | 2 + .../www/node_modules/lodash/fp/isEqualWith.js | 2 + .../www/node_modules/lodash/fp/isError.js | 1 + .../www/node_modules/lodash/fp/isFinite.js | 1 + .../www/node_modules/lodash/fp/isFunction.js | 1 + .../www/node_modules/lodash/fp/isInteger.js | 1 + .../www/node_modules/lodash/fp/isLength.js | 1 + .../www/node_modules/lodash/fp/isMap.js | 1 + .../www/node_modules/lodash/fp/isMatch.js | 2 + .../www/node_modules/lodash/fp/isMatchWith.js | 2 + .../www/node_modules/lodash/fp/isNaN.js | 1 + .../www/node_modules/lodash/fp/isNative.js | 1 + .../www/node_modules/lodash/fp/isNil.js | 1 + .../www/node_modules/lodash/fp/isNull.js | 1 + .../www/node_modules/lodash/fp/isNumber.js | 1 + .../www/node_modules/lodash/fp/isObject.js | 1 + .../node_modules/lodash/fp/isObjectLike.js | 1 + .../node_modules/lodash/fp/isPlainObject.js | 1 + .../www/node_modules/lodash/fp/isRegExp.js | 1 + .../node_modules/lodash/fp/isSafeInteger.js | 1 + .../www/node_modules/lodash/fp/isSet.js | 1 + .../www/node_modules/lodash/fp/isString.js | 1 + .../www/node_modules/lodash/fp/isSymbol.js | 1 + .../node_modules/lodash/fp/isTypedArray.js | 1 + .../www/node_modules/lodash/fp/isUndefined.js | 1 + .../www/node_modules/lodash/fp/isWeakMap.js | 1 + .../www/node_modules/lodash/fp/isWeakSet.js | 1 + .../www/node_modules/lodash/fp/iteratee.js | 2 + .../assets/www/node_modules/lodash/fp/join.js | 2 + .../www/node_modules/lodash/fp/kebabCase.js | 1 + .../www/node_modules/lodash/fp/keyBy.js | 2 + .../assets/www/node_modules/lodash/fp/keys.js | 1 + .../www/node_modules/lodash/fp/keysIn.js | 1 + .../assets/www/node_modules/lodash/fp/lang.js | 2 + .../assets/www/node_modules/lodash/fp/last.js | 1 + .../www/node_modules/lodash/fp/lastIndexOf.js | 2 + .../www/node_modules/lodash/fp/lowerCase.js | 1 + .../www/node_modules/lodash/fp/lowerFirst.js | 1 + .../assets/www/node_modules/lodash/fp/lt.js | 2 + .../assets/www/node_modules/lodash/fp/lte.js | 2 + .../assets/www/node_modules/lodash/fp/map.js | 2 + .../www/node_modules/lodash/fp/mapKeys.js | 2 + .../www/node_modules/lodash/fp/mapObj.js | 1 + .../www/node_modules/lodash/fp/mapValues.js | 2 + .../www/node_modules/lodash/fp/matches.js | 1 + .../node_modules/lodash/fp/matchesProperty.js | 2 + .../assets/www/node_modules/lodash/fp/math.js | 2 + .../assets/www/node_modules/lodash/fp/max.js | 1 + .../www/node_modules/lodash/fp/maxBy.js | 2 + .../assets/www/node_modules/lodash/fp/mean.js | 1 + .../www/node_modules/lodash/fp/memoize.js | 2 + .../www/node_modules/lodash/fp/merge.js | 2 + .../www/node_modules/lodash/fp/mergeWith.js | 2 + .../www/node_modules/lodash/fp/method.js | 2 + .../www/node_modules/lodash/fp/methodOf.js | 2 + .../assets/www/node_modules/lodash/fp/min.js | 1 + .../www/node_modules/lodash/fp/minBy.js | 2 + .../www/node_modules/lodash/fp/mixin.js | 2 + .../assets/www/node_modules/lodash/fp/nAry.js | 1 + .../www/node_modules/lodash/fp/negate.js | 1 + .../assets/www/node_modules/lodash/fp/next.js | 1 + .../assets/www/node_modules/lodash/fp/noop.js | 1 + .../assets/www/node_modules/lodash/fp/now.js | 1 + .../www/node_modules/lodash/fp/nthArg.js | 1 + .../www/node_modules/lodash/fp/number.js | 2 + .../www/node_modules/lodash/fp/object.js | 2 + .../assets/www/node_modules/lodash/fp/omit.js | 2 + .../www/node_modules/lodash/fp/omitAll.js | 1 + .../www/node_modules/lodash/fp/omitBy.js | 2 + .../assets/www/node_modules/lodash/fp/once.js | 1 + .../www/node_modules/lodash/fp/orderBy.js | 2 + .../assets/www/node_modules/lodash/fp/over.js | 2 + .../www/node_modules/lodash/fp/overArgs.js | 2 + .../www/node_modules/lodash/fp/overEvery.js | 2 + .../www/node_modules/lodash/fp/overSome.js | 2 + .../assets/www/node_modules/lodash/fp/pad.js | 2 + .../www/node_modules/lodash/fp/padEnd.js | 2 + .../www/node_modules/lodash/fp/padStart.js | 2 + .../www/node_modules/lodash/fp/parseInt.js | 2 + .../www/node_modules/lodash/fp/partial.js | 2 + .../node_modules/lodash/fp/partialRight.js | 2 + .../www/node_modules/lodash/fp/partition.js | 2 + .../assets/www/node_modules/lodash/fp/path.js | 1 + .../www/node_modules/lodash/fp/pathEq.js | 1 + .../www/node_modules/lodash/fp/pathOr.js | 1 + .../assets/www/node_modules/lodash/fp/pick.js | 2 + .../www/node_modules/lodash/fp/pickAll.js | 1 + .../www/node_modules/lodash/fp/pickBy.js | 2 + .../assets/www/node_modules/lodash/fp/pipe.js | 1 + .../www/node_modules/lodash/fp/plant.js | 1 + .../assets/www/node_modules/lodash/fp/prop.js | 1 + .../www/node_modules/lodash/fp/propOf.js | 1 + .../www/node_modules/lodash/fp/propOr.js | 1 + .../www/node_modules/lodash/fp/property.js | 1 + .../www/node_modules/lodash/fp/propertyOf.js | 1 + .../assets/www/node_modules/lodash/fp/pull.js | 2 + .../www/node_modules/lodash/fp/pullAll.js | 2 + .../www/node_modules/lodash/fp/pullAllBy.js | 2 + .../www/node_modules/lodash/fp/pullAllWith.js | 2 + .../www/node_modules/lodash/fp/pullAt.js | 2 + .../www/node_modules/lodash/fp/random.js | 2 + .../www/node_modules/lodash/fp/range.js | 2 + .../www/node_modules/lodash/fp/rangeRight.js | 2 + .../www/node_modules/lodash/fp/rearg.js | 2 + .../www/node_modules/lodash/fp/reduce.js | 2 + .../www/node_modules/lodash/fp/reduceRight.js | 2 + .../www/node_modules/lodash/fp/reject.js | 2 + .../www/node_modules/lodash/fp/remove.js | 2 + .../www/node_modules/lodash/fp/repeat.js | 2 + .../www/node_modules/lodash/fp/replace.js | 2 + .../assets/www/node_modules/lodash/fp/rest.js | 2 + .../www/node_modules/lodash/fp/result.js | 2 + .../www/node_modules/lodash/fp/reverse.js | 2 + .../www/node_modules/lodash/fp/round.js | 2 + .../www/node_modules/lodash/fp/sample.js | 1 + .../www/node_modules/lodash/fp/sampleSize.js | 2 + .../assets/www/node_modules/lodash/fp/seq.js | 2 + .../assets/www/node_modules/lodash/fp/set.js | 2 + .../www/node_modules/lodash/fp/setWith.js | 2 + .../www/node_modules/lodash/fp/shuffle.js | 1 + .../assets/www/node_modules/lodash/fp/size.js | 1 + .../www/node_modules/lodash/fp/slice.js | 2 + .../www/node_modules/lodash/fp/snakeCase.js | 1 + .../assets/www/node_modules/lodash/fp/some.js | 2 + .../www/node_modules/lodash/fp/somePass.js | 1 + .../www/node_modules/lodash/fp/sortBy.js | 2 + .../www/node_modules/lodash/fp/sortedIndex.js | 2 + .../node_modules/lodash/fp/sortedIndexBy.js | 2 + .../node_modules/lodash/fp/sortedIndexOf.js | 2 + .../node_modules/lodash/fp/sortedLastIndex.js | 2 + .../lodash/fp/sortedLastIndexBy.js | 2 + .../lodash/fp/sortedLastIndexOf.js | 2 + .../www/node_modules/lodash/fp/sortedUniq.js | 1 + .../node_modules/lodash/fp/sortedUniqBy.js | 2 + .../www/node_modules/lodash/fp/split.js | 2 + .../www/node_modules/lodash/fp/spread.js | 2 + .../www/node_modules/lodash/fp/startCase.js | 1 + .../www/node_modules/lodash/fp/startsWith.js | 2 + .../www/node_modules/lodash/fp/string.js | 2 + .../www/node_modules/lodash/fp/subtract.js | 2 + .../assets/www/node_modules/lodash/fp/sum.js | 1 + .../www/node_modules/lodash/fp/sumBy.js | 2 + .../assets/www/node_modules/lodash/fp/tail.js | 1 + .../assets/www/node_modules/lodash/fp/take.js | 2 + .../www/node_modules/lodash/fp/takeRight.js | 2 + .../node_modules/lodash/fp/takeRightWhile.js | 2 + .../www/node_modules/lodash/fp/takeWhile.js | 2 + .../assets/www/node_modules/lodash/fp/tap.js | 2 + .../www/node_modules/lodash/fp/template.js | 2 + .../lodash/fp/templateSettings.js | 1 + .../www/node_modules/lodash/fp/throttle.js | 2 + .../assets/www/node_modules/lodash/fp/thru.js | 2 + .../www/node_modules/lodash/fp/times.js | 2 + .../www/node_modules/lodash/fp/toArray.js | 1 + .../www/node_modules/lodash/fp/toInteger.js | 1 + .../www/node_modules/lodash/fp/toIterator.js | 1 + .../www/node_modules/lodash/fp/toJSON.js | 1 + .../www/node_modules/lodash/fp/toLength.js | 1 + .../www/node_modules/lodash/fp/toLower.js | 1 + .../www/node_modules/lodash/fp/toNumber.js | 1 + .../www/node_modules/lodash/fp/toPairs.js | 1 + .../www/node_modules/lodash/fp/toPairsIn.js | 1 + .../www/node_modules/lodash/fp/toPath.js | 1 + .../node_modules/lodash/fp/toPlainObject.js | 1 + .../node_modules/lodash/fp/toSafeInteger.js | 1 + .../www/node_modules/lodash/fp/toString.js | 1 + .../www/node_modules/lodash/fp/toUpper.js | 1 + .../www/node_modules/lodash/fp/transform.js | 2 + .../assets/www/node_modules/lodash/fp/trim.js | 2 + .../www/node_modules/lodash/fp/trimChars.js | 2 + .../node_modules/lodash/fp/trimCharsEnd.js | 2 + .../node_modules/lodash/fp/trimCharsStart.js | 2 + .../www/node_modules/lodash/fp/trimEnd.js | 2 + .../www/node_modules/lodash/fp/trimStart.js | 2 + .../www/node_modules/lodash/fp/truncate.js | 2 + .../www/node_modules/lodash/fp/unapply.js | 1 + .../www/node_modules/lodash/fp/unary.js | 1 + .../www/node_modules/lodash/fp/unescape.js | 1 + .../www/node_modules/lodash/fp/union.js | 2 + .../www/node_modules/lodash/fp/unionBy.js | 2 + .../www/node_modules/lodash/fp/unionWith.js | 2 + .../assets/www/node_modules/lodash/fp/uniq.js | 1 + .../www/node_modules/lodash/fp/uniqBy.js | 2 + .../www/node_modules/lodash/fp/uniqWith.js | 2 + .../www/node_modules/lodash/fp/uniqueId.js | 2 + .../www/node_modules/lodash/fp/unnest.js | 1 + .../www/node_modules/lodash/fp/unset.js | 2 + .../www/node_modules/lodash/fp/unzip.js | 1 + .../www/node_modules/lodash/fp/unzipWith.js | 2 + .../www/node_modules/lodash/fp/update.js | 2 + .../www/node_modules/lodash/fp/updateWith.js | 2 + .../www/node_modules/lodash/fp/upperCase.js | 1 + .../www/node_modules/lodash/fp/upperFirst.js | 1 + .../www/node_modules/lodash/fp/useWith.js | 1 + .../assets/www/node_modules/lodash/fp/util.js | 2 + .../www/node_modules/lodash/fp/value.js | 1 + .../www/node_modules/lodash/fp/valueOf.js | 1 + .../www/node_modules/lodash/fp/values.js | 1 + .../www/node_modules/lodash/fp/valuesIn.js | 1 + .../www/node_modules/lodash/fp/whereEq.js | 1 + .../www/node_modules/lodash/fp/without.js | 2 + .../www/node_modules/lodash/fp/words.js | 2 + .../assets/www/node_modules/lodash/fp/wrap.js | 2 + .../www/node_modules/lodash/fp/wrapperAt.js | 1 + .../node_modules/lodash/fp/wrapperChain.js | 1 + .../node_modules/lodash/fp/wrapperFlatMap.js | 1 + .../node_modules/lodash/fp/wrapperLodash.js | 1 + .../node_modules/lodash/fp/wrapperReverse.js | 1 + .../node_modules/lodash/fp/wrapperValue.js | 1 + .../assets/www/node_modules/lodash/fp/xor.js | 2 + .../www/node_modules/lodash/fp/xorBy.js | 2 + .../www/node_modules/lodash/fp/xorWith.js | 2 + .../assets/www/node_modules/lodash/fp/zip.js | 2 + .../www/node_modules/lodash/fp/zipObj.js | 1 + .../www/node_modules/lodash/fp/zipObject.js | 2 + .../node_modules/lodash/fp/zipObjectDeep.js | 2 + .../www/node_modules/lodash/fp/zipWith.js | 2 + .../www/node_modules/lodash/fromPairs.js | 27 + .../www/node_modules/lodash/function.js | 25 + .../www/node_modules/lodash/functions.js | 29 + .../www/node_modules/lodash/functionsIn.js | 29 + .../assets/www/node_modules/lodash/get.js | 32 + .../assets/www/node_modules/lodash/groupBy.js | 38 + .../assets/www/node_modules/lodash/gt.js | 25 + .../assets/www/node_modules/lodash/gte.js | 25 + .../assets/www/node_modules/lodash/has.js | 34 + .../assets/www/node_modules/lodash/hasIn.js | 33 + .../assets/www/node_modules/lodash/head.js | 22 + .../www/node_modules/lodash/identity.js | 20 + .../assets/www/node_modules/lodash/inRange.js | 52 + .../www/node_modules/lodash/includes.js | 51 + .../assets/www/node_modules/lodash/index.js | 1 + .../assets/www/node_modules/lodash/indexOf.js | 41 + .../assets/www/node_modules/lodash/initial.js | 20 + .../www/node_modules/lodash/intersection.js | 29 + .../www/node_modules/lodash/intersectionBy.js | 43 + .../node_modules/lodash/intersectionWith.js | 41 + .../assets/www/node_modules/lodash/invert.js | 26 + .../www/node_modules/lodash/invertBy.js | 43 + .../assets/www/node_modules/lodash/invoke.js | 23 + .../www/node_modules/lodash/invokeMap.js | 43 + .../www/node_modules/lodash/isArguments.js | 43 + .../assets/www/node_modules/lodash/isArray.js | 26 + .../www/node_modules/lodash/isArrayBuffer.js | 34 + .../www/node_modules/lodash/isArrayLike.js | 33 + .../node_modules/lodash/isArrayLikeObject.js | 31 + .../www/node_modules/lodash/isBoolean.js | 36 + .../www/node_modules/lodash/isBuffer.js | 48 + .../assets/www/node_modules/lodash/isDate.js | 35 + .../www/node_modules/lodash/isElement.js | 24 + .../assets/www/node_modules/lodash/isEmpty.js | 54 + .../assets/www/node_modules/lodash/isEqual.js | 34 + .../www/node_modules/lodash/isEqualWith.js | 40 + .../assets/www/node_modules/lodash/isError.js | 40 + .../www/node_modules/lodash/isFinite.js | 34 + .../www/node_modules/lodash/isFunction.js | 40 + .../www/node_modules/lodash/isInteger.js | 31 + .../www/node_modules/lodash/isLength.js | 33 + .../assets/www/node_modules/lodash/isMap.js | 27 + .../assets/www/node_modules/lodash/isMatch.js | 31 + .../www/node_modules/lodash/isMatchWith.js | 40 + .../assets/www/node_modules/lodash/isNaN.js | 34 + .../www/node_modules/lodash/isNative.js | 53 + .../assets/www/node_modules/lodash/isNil.js | 24 + .../assets/www/node_modules/lodash/isNull.js | 21 + .../www/node_modules/lodash/isNumber.js | 45 + .../www/node_modules/lodash/isObject.js | 29 + .../www/node_modules/lodash/isObjectLike.js | 28 + .../www/node_modules/lodash/isPlainObject.js | 66 + .../www/node_modules/lodash/isRegExp.js | 35 + .../www/node_modules/lodash/isSafeInteger.js | 35 + .../assets/www/node_modules/lodash/isSet.js | 27 + .../www/node_modules/lodash/isString.js | 37 + .../www/node_modules/lodash/isSymbol.js | 36 + .../www/node_modules/lodash/isTypedArray.js | 75 + .../www/node_modules/lodash/isUndefined.js | 21 + .../www/node_modules/lodash/isWeakMap.js | 27 + .../www/node_modules/lodash/isWeakSet.js | 35 + .../www/node_modules/lodash/iteratee.js | 38 + .../assets/www/node_modules/lodash/join.js | 25 + .../www/node_modules/lodash/kebabCase.js | 26 + .../assets/www/node_modules/lodash/keyBy.js | 34 + .../assets/www/node_modules/lodash/keys.js | 55 + .../assets/www/node_modules/lodash/keysIn.js | 54 + .../assets/www/node_modules/lodash/lang.js | 56 + .../assets/www/node_modules/lodash/last.js | 19 + .../www/node_modules/lodash/lastIndexOf.js | 49 + .../assets/www/node_modules/lodash/lodash.js | 15073 ++++++++++++++++ .../www/node_modules/lodash/lodash.min.js | 121 + .../www/node_modules/lodash/lowerCase.js | 26 + .../www/node_modules/lodash/lowerFirst.js | 21 + .../assets/www/node_modules/lodash/lt.js | 25 + .../assets/www/node_modules/lodash/lte.js | 25 + .../assets/www/node_modules/lodash/map.js | 52 + .../assets/www/node_modules/lodash/mapKeys.js | 33 + .../www/node_modules/lodash/mapValues.js | 39 + .../assets/www/node_modules/lodash/matches.js | 31 + .../node_modules/lodash/matchesProperty.js | 31 + .../assets/www/node_modules/lodash/math.js | 14 + .../assets/www/node_modules/lodash/max.js | 28 + .../assets/www/node_modules/lodash/maxBy.js | 33 + .../assets/www/node_modules/lodash/mean.js | 20 + .../assets/www/node_modules/lodash/memoize.js | 71 + .../assets/www/node_modules/lodash/merge.js | 38 + .../www/node_modules/lodash/mergeWith.js | 45 + .../assets/www/node_modules/lodash/method.js | 33 + .../www/node_modules/lodash/methodOf.js | 32 + .../assets/www/node_modules/lodash/min.js | 28 + .../assets/www/node_modules/lodash/minBy.js | 33 + .../assets/www/node_modules/lodash/mixin.js | 74 + .../assets/www/node_modules/lodash/negate.js | 32 + .../assets/www/node_modules/lodash/next.js | 34 + .../assets/www/node_modules/lodash/noop.js | 19 + .../assets/www/node_modules/lodash/now.js | 19 + .../assets/www/node_modules/lodash/nthArg.js | 25 + .../assets/www/node_modules/lodash/number.js | 5 + .../assets/www/node_modules/lodash/object.js | 46 + .../assets/www/node_modules/lodash/omit.js | 34 + .../assets/www/node_modules/lodash/omitBy.js | 30 + .../assets/www/node_modules/lodash/once.js | 24 + .../assets/www/node_modules/lodash/orderBy.js | 45 + .../assets/www/node_modules/lodash/over.js | 22 + .../www/node_modules/lodash/overArgs.js | 56 + .../www/node_modules/lodash/overEvery.js | 28 + .../www/node_modules/lodash/overSome.js | 28 + .../www/node_modules/lodash/package.json | 111 + .../assets/www/node_modules/lodash/pad.js | 47 + .../assets/www/node_modules/lodash/padEnd.js | 31 + .../www/node_modules/lodash/padStart.js | 31 + .../www/node_modules/lodash/parseInt.js | 48 + .../assets/www/node_modules/lodash/partial.js | 49 + .../www/node_modules/lodash/partialRight.js | 48 + .../www/node_modules/lodash/partition.js | 42 + .../assets/www/node_modules/lodash/pick.js | 26 + .../assets/www/node_modules/lodash/pickBy.js | 25 + .../assets/www/node_modules/lodash/plant.js | 47 + .../www/node_modules/lodash/property.js | 30 + .../www/node_modules/lodash/propertyOf.js | 29 + .../assets/www/node_modules/lodash/pull.js | 28 + .../assets/www/node_modules/lodash/pullAll.js | 28 + .../www/node_modules/lodash/pullAllBy.js | 32 + .../www/node_modules/lodash/pullAllWith.js | 31 + .../assets/www/node_modules/lodash/pullAt.js | 40 + .../assets/www/node_modules/lodash/random.js | 81 + .../assets/www/node_modules/lodash/range.js | 44 + .../www/node_modules/lodash/rangeRight.js | 39 + .../assets/www/node_modules/lodash/rearg.js | 34 + .../assets/www/node_modules/lodash/reduce.js | 49 + .../www/node_modules/lodash/reduceRight.js | 34 + .../assets/www/node_modules/lodash/reject.js | 46 + .../assets/www/node_modules/lodash/remove.js | 52 + .../assets/www/node_modules/lodash/repeat.js | 51 + .../assets/www/node_modules/lodash/replace.js | 27 + .../assets/www/node_modules/lodash/rest.js | 61 + .../assets/www/node_modules/lodash/result.js | 49 + .../assets/www/node_modules/lodash/reverse.js | 32 + .../assets/www/node_modules/lodash/round.js | 25 + .../assets/www/node_modules/lodash/sample.js | 25 + .../www/node_modules/lodash/sampleSize.js | 42 + .../assets/www/node_modules/lodash/seq.js | 17 + .../assets/www/node_modules/lodash/set.js | 34 + .../assets/www/node_modules/lodash/setWith.js | 31 + .../assets/www/node_modules/lodash/shuffle.js | 24 + .../assets/www/node_modules/lodash/size.js | 37 + .../assets/www/node_modules/lodash/slice.js | 35 + .../www/node_modules/lodash/snakeCase.js | 26 + .../assets/www/node_modules/lodash/some.js | 49 + .../assets/www/node_modules/lodash/sortBy.js | 52 + .../www/node_modules/lodash/sortedIndex.js | 25 + .../www/node_modules/lodash/sortedIndexBy.js | 31 + .../www/node_modules/lodash/sortedIndexOf.js | 30 + .../node_modules/lodash/sortedLastIndex.js | 23 + .../node_modules/lodash/sortedLastIndexBy.js | 26 + .../node_modules/lodash/sortedLastIndexOf.js | 30 + .../www/node_modules/lodash/sortedUniq.js | 23 + .../www/node_modules/lodash/sortedUniqBy.js | 25 + .../assets/www/node_modules/lodash/split.js | 24 + .../assets/www/node_modules/lodash/spread.js | 59 + .../www/node_modules/lodash/startCase.js | 27 + .../www/node_modules/lodash/startsWith.js | 32 + .../assets/www/node_modules/lodash/string.js | 33 + .../www/node_modules/lodash/subtract.js | 29 + .../assets/www/node_modules/lodash/sum.js | 23 + .../assets/www/node_modules/lodash/sumBy.js | 32 + .../assets/www/node_modules/lodash/tail.js | 20 + .../assets/www/node_modules/lodash/take.js | 36 + .../www/node_modules/lodash/takeRight.js | 38 + .../www/node_modules/lodash/takeRightWhile.js | 44 + .../www/node_modules/lodash/takeWhile.js | 44 + .../assets/www/node_modules/lodash/tap.js | 28 + .../www/node_modules/lodash/template.js | 226 + .../node_modules/lodash/templateSettings.js | 67 + .../www/node_modules/lodash/throttle.js | 65 + .../assets/www/node_modules/lodash/thru.js | 27 + .../assets/www/node_modules/lodash/times.js | 50 + .../assets/www/node_modules/lodash/toArray.js | 57 + .../www/node_modules/lodash/toInteger.js | 44 + .../www/node_modules/lodash/toIterator.js | 22 + .../assets/www/node_modules/lodash/toJSON.js | 1 + .../www/node_modules/lodash/toLength.js | 36 + .../assets/www/node_modules/lodash/toLower.js | 27 + .../www/node_modules/lodash/toNumber.js | 59 + .../assets/www/node_modules/lodash/toPairs.js | 29 + .../www/node_modules/lodash/toPairsIn.js | 29 + .../assets/www/node_modules/lodash/toPath.js | 34 + .../www/node_modules/lodash/toPlainObject.js | 31 + .../www/node_modules/lodash/toSafeInteger.js | 34 + .../www/node_modules/lodash/toString.js | 46 + .../assets/www/node_modules/lodash/toUpper.js | 27 + .../www/node_modules/lodash/transform.js | 63 + .../assets/www/node_modules/lodash/trim.js | 50 + .../assets/www/node_modules/lodash/trimEnd.js | 44 + .../www/node_modules/lodash/trimStart.js | 44 + .../www/node_modules/lodash/truncate.js | 119 + .../assets/www/node_modules/lodash/unary.js | 21 + .../www/node_modules/lodash/unescape.js | 33 + .../assets/www/node_modules/lodash/union.js | 24 + .../assets/www/node_modules/lodash/unionBy.js | 36 + .../www/node_modules/lodash/unionWith.js | 34 + .../assets/www/node_modules/lodash/uniq.js | 25 + .../assets/www/node_modules/lodash/uniqBy.js | 30 + .../www/node_modules/lodash/uniqWith.js | 27 + .../www/node_modules/lodash/uniqueId.js | 27 + .../assets/www/node_modules/lodash/unset.js | 33 + .../assets/www/node_modules/lodash/unzip.js | 44 + .../www/node_modules/lodash/unzipWith.js | 37 + .../assets/www/node_modules/lodash/update.js | 34 + .../www/node_modules/lodash/updateWith.js | 32 + .../www/node_modules/lodash/upperCase.js | 26 + .../www/node_modules/lodash/upperFirst.js | 21 + .../assets/www/node_modules/lodash/util.js | 28 + .../assets/www/node_modules/lodash/value.js | 1 + .../assets/www/node_modules/lodash/valueOf.js | 1 + .../assets/www/node_modules/lodash/values.js | 33 + .../www/node_modules/lodash/valuesIn.js | 30 + .../assets/www/node_modules/lodash/without.js | 27 + .../assets/www/node_modules/lodash/words.js | 85 + .../assets/www/node_modules/lodash/wrap.js | 30 + .../www/node_modules/lodash/wrapperAt.js | 53 + .../www/node_modules/lodash/wrapperChain.js | 33 + .../www/node_modules/lodash/wrapperFlatMap.js | 22 + .../www/node_modules/lodash/wrapperLodash.js | 144 + .../www/node_modules/lodash/wrapperReverse.js | 43 + .../www/node_modules/lodash/wrapperValue.js | 20 + .../assets/www/node_modules/lodash/xor.js | 25 + .../assets/www/node_modules/lodash/xorBy.js | 36 + .../assets/www/node_modules/lodash/xorWith.js | 34 + .../assets/www/node_modules/lodash/zip.js | 21 + .../www/node_modules/lodash/zipObject.js | 23 + .../www/node_modules/lodash/zipObjectDeep.js | 22 + .../assets/www/node_modules/lodash/zipWith.js | 30 + .../www/node_modules/lru-cache/.npmignore | 1 + .../www/node_modules/lru-cache/.travis.yml | 8 + .../www/node_modules/lru-cache/CONTRIBUTORS | 14 + .../assets/www/node_modules/lru-cache/LICENSE | 15 + .../www/node_modules/lru-cache/README.md | 137 + .../node_modules/lru-cache/lib/lru-cache.js | 334 + .../www/node_modules/lru-cache/package.json | 84 + .../www/node_modules/lru-cache/test/basic.js | 396 + .../node_modules/lru-cache/test/foreach.js | 120 + .../lru-cache/test/memory-leak.js | 51 + .../node_modules/lru-cache/test/serialize.js | 216 + .../assets/www/node_modules/minimatch/LICENSE | 15 + .../www/node_modules/minimatch/README.md | 216 + .../www/node_modules/minimatch/minimatch.js | 912 + .../www/node_modules/minimatch/package.json | 85 + .../assets/www/node_modules/once/LICENSE | 15 + .../assets/www/node_modules/once/README.md | 51 + .../assets/www/node_modules/once/once.js | 21 + .../assets/www/node_modules/once/package.json | 89 + .../www/node_modules/options/.npmignore | 7 + .../assets/www/node_modules/options/Makefile | 12 + .../assets/www/node_modules/options/README.md | 69 + .../www/node_modules/options/lib/options.js | 86 + .../www/node_modules/options/package.json | 76 + .../node_modules/path-is-absolute/index.js | 20 + .../www/node_modules/path-is-absolute/license | 21 + .../path-is-absolute/package.json | 97 + .../node_modules/path-is-absolute/readme.md | 51 + .../assets/www/node_modules/rimraf/LICENSE | 15 + .../assets/www/node_modules/rimraf/README.md | 101 + .../assets/www/node_modules/rimraf/bin.js | 40 + .../www/node_modules/rimraf/package.json | 91 + .../assets/www/node_modules/rimraf/rimraf.js | 335 + .../assets/www/node_modules/sax/AUTHORS | 10 + .../assets/www/node_modules/sax/LICENSE | 57 + .../www/node_modules/sax/LICENSE-W3C.html | 188 + .../assets/www/node_modules/sax/README.md | 216 + .../sax/examples/big-not-pretty.xml | 8002 ++++++++ .../www/node_modules/sax/examples/example.js | 29 + .../node_modules/sax/examples/get-products.js | 58 + .../node_modules/sax/examples/hello-world.js | 4 + .../node_modules/sax/examples/not-pretty.xml | 8 + .../node_modules/sax/examples/pretty-print.js | 74 + .../node_modules/sax/examples/shopping.xml | 2 + .../www/node_modules/sax/examples/strict.dtd | 870 + .../www/node_modules/sax/examples/test.html | 15 + .../www/node_modules/sax/examples/test.xml | 1254 ++ .../assets/www/node_modules/sax/lib/sax.js | 1410 ++ .../assets/www/node_modules/sax/package.json | 111 + .../node_modules/sax/test/attribute-name.js | 33 + .../sax/test/attribute-no-space.js | 75 + .../node_modules/sax/test/buffer-overrun.js | 26 + .../assets/www/node_modules/sax/test/case.js | 50 + .../node_modules/sax/test/cdata-chunked.js | 11 + .../node_modules/sax/test/cdata-end-split.js | 15 + .../node_modules/sax/test/cdata-fake-end.js | 28 + .../node_modules/sax/test/cdata-multiple.js | 15 + .../assets/www/node_modules/sax/test/cdata.js | 10 + .../www/node_modules/sax/test/cyrillic.js | 8 + .../sax/test/duplicate-attribute.js | 13 + .../assets/www/node_modules/sax/test/emoji.js | 12 + .../node_modules/sax/test/end_empty_stream.js | 5 + .../www/node_modules/sax/test/entities.js | 10 + .../www/node_modules/sax/test/entity-mega.js | 16 + .../assets/www/node_modules/sax/test/flush.js | 13 + .../assets/www/node_modules/sax/test/index.js | 86 + .../www/node_modules/sax/test/issue-23.js | 43 + .../www/node_modules/sax/test/issue-30.js | 24 + .../www/node_modules/sax/test/issue-35.js | 15 + .../www/node_modules/sax/test/issue-47.js | 12 + .../www/node_modules/sax/test/issue-49.js | 31 + .../www/node_modules/sax/test/issue-84.js | 13 + .../node_modules/sax/test/parser-position.js | 28 + .../sax/test/script-close-better.js | 12 + .../www/node_modules/sax/test/script.js | 12 + .../sax/test/self-closing-child-strict.js | 44 + .../sax/test/self-closing-child.js | 44 + .../node_modules/sax/test/self-closing-tag.js | 25 + .../www/node_modules/sax/test/stray-ending.js | 17 + .../sax/test/trailing-attribute-no-value.js | 10 + .../sax/test/trailing-non-whitespace.js | 18 + .../node_modules/sax/test/unclosed-root.js | 11 + .../www/node_modules/sax/test/unquoted.js | 18 + .../www/node_modules/sax/test/utf8-split.js | 32 + .../sax/test/xmlns-as-tag-name.js | 15 + .../node_modules/sax/test/xmlns-issue-41.js | 68 + .../node_modules/sax/test/xmlns-rebinding.js | 63 + .../www/node_modules/sax/test/xmlns-strict.js | 74 + .../sax/test/xmlns-unbound-element.js | 33 + .../node_modules/sax/test/xmlns-unbound.js | 15 + .../sax/test/xmlns-xml-default-ns.js | 31 + .../xmlns-xml-default-prefix-attribute.js | 36 + .../sax/test/xmlns-xml-default-prefix.js | 21 + .../sax/test/xmlns-xml-default-redefine.js | 41 + .../selenium-webdriver/.npmignore | 2 + .../selenium-webdriver/CHANGES.md | 490 + .../node_modules/selenium-webdriver/LICENSE | 202 + .../node_modules/selenium-webdriver/NOTICE | 2 + .../node_modules/selenium-webdriver/README.md | 226 + .../selenium-webdriver/builder.js | 513 + .../node_modules/selenium-webdriver/chrome.js | 811 + .../node_modules/selenium-webdriver/edge.js | 378 + .../node_modules/selenium-webdriver/error.js | 619 + .../example/chrome_android.js | 38 + .../example/chrome_mobile_emulation.js | 39 + .../example/google_search.js | 50 + .../example/google_search_generator.js | 45 + .../example/google_search_test.js | 47 + .../selenium-webdriver/example/logging.js | 43 + .../example/parallel_flows.js | 51 + .../selenium-webdriver/executors.js | 50 + .../selenium-webdriver/firefox/binary.js | 221 + .../selenium-webdriver/firefox/extension.js | 177 + .../selenium-webdriver/firefox/index.js | 320 + .../selenium-webdriver/firefox/profile.js | 413 + .../selenium-webdriver/http/index.js | 514 + .../selenium-webdriver/http/util.js | 135 + .../www/node_modules/selenium-webdriver/ie.js | 444 + .../node_modules/selenium-webdriver/index.js | 57 + .../selenium-webdriver/io/exec.js | 159 + .../selenium-webdriver/io/index.js | 227 + .../selenium-webdriver/lib/README | 2 + .../selenium-webdriver/lib/actions.js | 594 + .../node_modules/selenium-webdriver/lib/by.js | 276 + .../selenium-webdriver/lib/capabilities.js | 404 + .../selenium-webdriver/lib/command.js | 263 + .../selenium-webdriver/lib/devmode.js | 34 + .../selenium-webdriver/lib/events.js | 210 + .../lib/firefox/amd64/libnoblur64.so | Bin 0 -> 41262 bytes .../lib/firefox/i386/libnoblur.so | Bin 0 -> 30887 bytes .../lib/firefox/webdriver.json | 78 + .../lib/firefox/webdriver.xpi | Bin 0 -> 696912 bytes .../selenium-webdriver/lib/input.js | 172 + .../selenium-webdriver/lib/logging.js | 668 + .../selenium-webdriver/lib/promise.js | 3093 ++++ .../selenium-webdriver/lib/safari/client.js | 7203 ++++++++ .../selenium-webdriver/lib/session.js | 79 + .../selenium-webdriver/lib/symbols.js | 36 + .../selenium-webdriver/lib/test/build.js | 153 + ...kTest_testClicksASurroundingStrongTag.html | 11 + .../lib/test/data/Page.aspx | 17 + .../lib/test/data/Page.aspx.cs | 22 + .../lib/test/data/Redirect.aspx | 11 + .../lib/test/data/Redirect.aspx.cs | 9 + .../lib/test/data/Settings.StyleCop | 759 + .../lib/test/data/Web.Config | 59 + .../lib/test/data/actualXhtmlPage.xhtml | 14 + .../lib/test/data/ajaxy_page.html | 81 + .../lib/test/data/alerts.html | 85 + .../lib/test/data/banner.gif | Bin 0 -> 2109 bytes .../lib/test/data/beach.jpg | Bin 0 -> 14085 bytes .../lib/test/data/blank.html | 1 + .../lib/test/data/bodyTypingTest.html | 41 + .../lib/test/data/booleanAttributes.html | 19 + .../lib/test/data/child/childPage.html | 8 + .../data/child/grandchild/grandchildPage.html | 8 + .../lib/test/data/clickEventPage.html | 26 + .../lib/test/data/click_frames.html | 10 + .../lib/test/data/click_jacker.html | 38 + .../lib/test/data/click_out_of_bounds.html | 23 + .../data/click_out_of_bounds_overflow.html | 85 + .../lib/test/data/click_rtl.html | 19 + .../lib/test/data/click_source.html | 18 + .../test/data/click_tests/click_iframe.html | 6 + .../data/click_tests/click_in_iframe.html | 8 + .../click_tests/disappearing_element.html | 62 + .../lib/test/data/click_tests/google_map.html | 15 + .../lib/test/data/click_tests/google_map.png | Bin 0 -> 26209 bytes .../click_tests/html5_submit_buttons.html | 16 + .../lib/test/data/click_tests/issue5237.html | 9 + .../data/click_tests/issue5237_frame.html | 1 + .../data/click_tests/issue5237_target.html | 10 + .../data/click_tests/link_that_wraps.html | 11 + .../test/data/click_tests/mapped_page1.html | 9 + .../test/data/click_tests/mapped_page2.html | 9 + .../test/data/click_tests/mapped_page3.html | 9 + .../click_tests/overlapping_elements.html | 70 + .../partially_overlapping_elements.html | 124 + .../data/click_tests/span_that_wraps.html | 11 + .../test/data/click_tests/submitted_page.html | 9 + .../wrapped_overlapping_elements.html | 13 + .../lib/test/data/click_too_big.html | 10 + .../lib/test/data/click_too_big_in_frame.html | 11 + .../lib/test/data/clicks.html | 35 + .../lib/test/data/closeable_window.html | 8 + .../lib/test/data/cn-test.html | 156 + .../lib/test/data/colorPage.html | 20 + .../lib/test/data/cookies.html | 30 + .../coordinates_tests/element_in_frame.html | 9 + .../element_in_nested_frame.html | 9 + .../page_with_element_out_of_view.html | 11 + .../page_with_empty_element.html | 10 + .../page_with_fixed_element.html | 12 + .../page_with_hidden_element.html | 10 + .../page_with_invisible_element.html | 10 + .../page_with_transparent_element.html | 10 + .../data/coordinates_tests/simple_page.html | 10 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui-lightness/jquery-ui-1.8.10.custom.css | 573 + .../lib/test/data/cssTransform.html | 61 + .../lib/test/data/cssTransform2.html | 20 + .../test/data/document_write_in_onload.html | 13 + .../data/dragAndDropInsideScrolledDiv.html | 67 + .../lib/test/data/dragAndDropTest.html | 102 + .../lib/test/data/dragDropOverflow.html | 104 + .../lib/test/data/draggableLists.html | 67 + .../lib/test/data/droppableItems.html | 65 + .../lib/test/data/dynamic.html | 39 + .../test/data/dynamicallyModifiedPage.html | 42 + .../lib/test/data/errors.html | 15 + .../lib/test/data/firefox/jetpack-sample.xpi | Bin 0 -> 7289 bytes .../lib/test/data/firefox/sample.xpi | Bin 0 -> 1551 bytes .../lib/test/data/fixedFooterNoScroll.html | 13 + .../data/fixedFooterNoScrollQuirksMode.html | 12 + .../lib/test/data/formPage.html | 174 + .../lib/test/data/formSelectionPage.html | 46 + .../test/data/form_handling_js_submit.html | 30 + .../lib/test/data/framePage3.html | 7 + .../lib/test/data/frameScrollChild.html | 26 + .../lib/test/data/frameScrollPage.html | 14 + .../lib/test/data/frameScrollParent.html | 11 + .../lib/test/data/frameWithAnimals.html | 11 + .../data/frame_switching_tests/bug4876.html | 9 + .../frame_switching_tests/bug4876_iframe.html | 9 + .../frame_switching_tests/deletingFrame.html | 29 + .../deletingFrame_iframe.html | 8 + .../deletingFrame_iframe2.html | 7 + .../lib/test/data/frameset.html | 14 + .../lib/test/data/framesetPage2.html | 7 + .../lib/test/data/framesetPage3.html | 4 + .../lib/test/data/globalscope.html | 15 + .../lib/test/data/hidden.html | 5 + .../lib/test/data/html5/blue.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/database.js | 84 + .../lib/test/data/html5/geolocation.js | 18 + .../lib/test/data/html5/green.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/red.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/status.html | 1 + .../lib/test/data/html5/test.appcache | 11 + .../lib/test/data/html5/yellow.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5Page.html | 32 + .../selenium-webdriver/lib/test/data/icon.gif | Bin 0 -> 127 bytes .../lib/test/data/iframeAtBottom.html | 15 + .../lib/test/data/iframeWithAlert.html | 1 + .../lib/test/data/iframeWithIframe.html | 1 + .../lib/test/data/iframes.html | 11 + .../lib/test/data/injectableContent.html | 22 + .../lib/test/data/javascriptEnhancedForm.html | 30 + .../lib/test/data/javascriptPage.html | 275 + .../lib/test/data/jquery-1.3.2.js | 4376 +++++ .../lib/test/data/js/jquery-1.4.4.min.js | 167 + .../data/js/jquery-ui-1.8.10.custom.min.js | 782 + .../js/skins/lightgray/content.inline.min.css | 1 + .../data/js/skins/lightgray/content.min.css | 1 + .../data/js/skins/lightgray/fonts/readme.md | 1 + .../lightgray/fonts/tinymce-small.dev.svg | 175 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 10316 bytes .../skins/lightgray/fonts/tinymce-small.svg | 62 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 10128 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 7848 bytes .../js/skins/lightgray/fonts/tinymce.dev.svg | 153 + .../data/js/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 10024 bytes .../data/js/skins/lightgray/fonts/tinymce.svg | 63 + .../data/js/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 9860 bytes .../js/skins/lightgray/fonts/tinymce.woff | Bin 0 -> 7664 bytes .../data/js/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../data/js/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../data/js/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../data/js/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes .../data/js/skins/lightgray/skin.ie7.min.css | 1 + .../test/data/js/skins/lightgray/skin.min.css | 1 + .../test/data/js/themes/modern/theme.min.js | 1 + .../lib/test/data/js/tinymce.min.js | 10 + .../data/key_tests/remove_on_keypress.html | 36 + .../lib/test/data/keyboard_shortcut.html | 36 + .../lib/test/data/linked_image.html | 16 + .../boolean_attribute_selected.html | 13 + .../boolean_attribute_selected_html4.html | 13 + .../lib/test/data/longContentPage.html | 55 + .../lib/test/data/macbeth.html | 5255 ++++++ .../selenium-webdriver/lib/test/data/map.png | Bin 0 -> 26209 bytes .../lib/test/data/map_visibility.html | 8 + .../lib/test/data/markerTransparent.png | Bin 0 -> 260 bytes .../lib/test/data/messages.html | 15 + .../lib/test/data/meta-redirect.html | 11 + .../lib/test/data/missedJsReference.html | 11 + .../lib/test/data/modal_dialogs/modal_1.html | 21 + .../lib/test/data/modal_dialogs/modal_2.html | 21 + .../lib/test/data/modal_dialogs/modal_3.html | 15 + .../test/data/modal_dialogs/modalindex.html | 21 + .../lib/test/data/mouseOver.html | 17 + .../lib/test/data/mousePositionTracker.html | 33 + .../lib/test/data/nestedElements.html | 155 + .../lib/test/data/overflow-body.html | 15 + .../lib/test/data/overflow/x_auto_y_auto.html | 30 + .../test/data/overflow/x_auto_y_hidden.html | 30 + .../test/data/overflow/x_auto_y_scroll.html | 30 + .../test/data/overflow/x_hidden_y_auto.html | 30 + .../test/data/overflow/x_hidden_y_hidden.html | 30 + .../test/data/overflow/x_hidden_y_scroll.html | 30 + .../test/data/overflow/x_scroll_y_auto.html | 30 + .../test/data/overflow/x_scroll_y_hidden.html | 30 + .../test/data/overflow/x_scroll_y_scroll.html | 30 + .../data/pageWithOnBeforeUnloadMessage.html | 20 + .../lib/test/data/pageWithOnLoad.html | 6 + .../lib/test/data/pageWithOnUnload.html | 6 + .../page_with_link_to_slow_loading_page.html | 6 + .../lib/test/data/plain.txt | 1 + .../lib/test/data/proxy/page1.html | 20 + .../lib/test/data/proxy/page2.html | 24 + .../lib/test/data/proxy/page3.html | 5 + .../lib/test/data/readOnlyPage.html | 24 + .../lib/test/data/rectangles.html | 40 + .../lib/test/data/resultPage.html | 25 + .../lib/test/data/rich_text.html | 161 + .../test/data/safari/frames_benchmark.html | 31 + .../lib/test/data/screen/screen.css | 19 + .../lib/test/data/screen/screen.html | 72 + .../lib/test/data/screen/screen.js | 7 + .../lib/test/data/screen/screen_frame1.html | 72 + .../lib/test/data/screen/screen_frame2.html | 72 + .../lib/test/data/screen/screen_frames.html | 11 + .../lib/test/data/screen/screen_iframes.html | 12 + .../lib/test/data/screen/screen_too_long.html | 68 + .../lib/test/data/screen/screen_x_long.html | 72 + .../test/data/screen/screen_x_too_long.html | 72 + .../lib/test/data/screen/screen_y_long.html | 72 + .../test/data/screen/screen_y_too_long.html | 72 + .../lib/test/data/scroll.html | 27 + .../lib/test/data/scroll2.html | 21 + .../lib/test/data/scroll3.html | 8 + .../lib/test/data/scroll4.html | 7 + .../lib/test/data/scroll5.html | 18 + .../frame_with_height_above_200.html | 26 + .../frame_with_height_above_2000.html | 26 + .../frame_with_nested_scrolling_frame.html | 11 + ...th_nested_scrolling_frame_out_of_view.html | 12 + .../frame_with_small_height.html | 10 + .../page_with_double_overflow_auto.html | 19 + .../page_with_frame_out_of_view.html | 12 + .../page_with_nested_scrolling_frames.html | 11 + ...h_nested_scrolling_frames_out_of_view.html | 12 + .../page_with_non_scrolling_frame.html | 11 + .../page_with_scrolling_frame.html | 11 + ...page_with_scrolling_frame_out_of_view.html | 12 + .../scrolling_tests/page_with_tall_frame.html | 11 + .../page_with_y_overflow_auto.html | 14 + .../data/scrolling_tests/target_page.html | 9 + .../lib/test/data/selectPage.html | 58 + .../lib/test/data/selectableItems.html | 65 + .../lib/test/data/sessionCookie.html | 21 + .../lib/test/data/sessionCookieDest.html | 34 + .../lib/test/data/simple.xml | 5 + .../lib/test/data/simpleTest.html | 98 + .../lib/test/data/slowLoadingAlert.html | 10 + .../test/data/slowLoadingResourcePage.html | 12 + .../lib/test/data/slow_loading_iframes.html | 14 + .../lib/test/data/styledPage.html | 28 + .../lib/test/data/svgPiechart.xhtml | 81 + .../lib/test/data/svgTest.svg | 4 + .../lib/test/data/tables.html | 36 + .../lib/test/data/tinymce.html | 10 + .../lib/test/data/transformable.xml | 11 + .../lib/test/data/transformable.xsl | 37 + .../lib/test/data/transparentUpload.html | 70 + .../lib/test/data/underscore.html | 9 + .../lib/test/data/unicode_ltr.html | 8 + .../lib/test/data/upload.html | 45 + .../lib/test/data/userDefinedProperty.html | 8 + .../lib/test/data/veryLargeCanvas.html | 81 + .../lib/test/data/visibility-css.html | 21 + .../lib/test/data/win32frameset.html | 8 + .../page_with_frame.html | 12 + .../window_switching_tests/simple_page.html | 9 + .../lib/test/data/xhtmlFormPage.xhtml | 17 + .../lib/test/data/xhtmlTest.html | 76 + .../selenium-webdriver/lib/test/fileserver.js | 319 + .../selenium-webdriver/lib/test/httpserver.js | 122 + .../selenium-webdriver/lib/test/index.js | 262 + .../selenium-webdriver/lib/test/resources.js | 44 + .../selenium-webdriver/lib/until.js | 428 + .../selenium-webdriver/lib/webdriver.js | 2351 +++ .../selenium-webdriver/net/index.js | 82 + .../selenium-webdriver/net/portprober.js | 219 + .../node_modules/selenium-webdriver/opera.js | 480 + .../selenium-webdriver/package.json | 94 + .../selenium-webdriver/phantomjs.js | 260 + .../node_modules/selenium-webdriver/proxy.js | 103 + .../selenium-webdriver/remote/index.js | 381 + .../node_modules/selenium-webdriver/safari.js | 547 + .../selenium-webdriver/test/actions_test.js | 53 + .../test/chrome/options_test.js | 227 + .../test/chrome/service_test.js | 45 + .../selenium-webdriver/test/cookie_test.js | 206 + .../test/element_finding_test.js | 392 + .../selenium-webdriver/test/error_test.js | 163 + .../test/execute_script_test.js | 322 + .../test/fingerprint_test.js | 57 + .../test/firefox/extension_test.js | 96 + .../test/firefox/firefox_test.js | 183 + .../test/firefox/profile_test.js | 187 + .../selenium-webdriver/test/http/http_test.js | 443 + .../selenium-webdriver/test/http/util_test.js | 184 + .../selenium-webdriver/test/io_test.js | 232 + .../selenium-webdriver/test/lib/by_test.js | 127 + .../test/lib/capabilities_test.js | 84 + .../test/lib/events_test.js | 177 + .../test/lib/logging_test.js | 272 + .../test/lib/promise_aplus_test.js | 74 + .../test/lib/promise_error_test.js | 808 + .../test/lib/promise_flow_test.js | 2282 +++ .../test/lib/promise_generator_test.js | 308 + .../test/lib/promise_test.js | 996 + .../selenium-webdriver/test/lib/testutil.js | 90 + .../selenium-webdriver/test/lib/until_test.js | 436 + .../test/lib/webdriver_test.js | 2207 +++ .../selenium-webdriver/test/logging_test.js | 167 + .../test/net/portprober_test.js | 129 + .../test/page_loading_test.js | 164 + .../test/phantomjs/execute_phantomjs_test.js | 73 + .../selenium-webdriver/test/proxy_test.js | 170 + .../selenium-webdriver/test/remote_test.js | 72 + .../test/stale_element_test.js | 58 + .../selenium-webdriver/test/tag_name_test.js | 34 + .../test/testing/assert_test.js | 374 + .../test/testing/index_test.js | 178 + .../selenium-webdriver/test/upload_test.js | 85 + .../selenium-webdriver/test/window_test.js | 128 + .../selenium-webdriver/testing/assert.js | 378 + .../selenium-webdriver/testing/index.js | 268 + .../assets/www/node_modules/sigmund/LICENSE | 15 + .../assets/www/node_modules/sigmund/README.md | 53 + .../assets/www/node_modules/sigmund/bench.js | 283 + .../www/node_modules/sigmund/package.json | 85 + .../www/node_modules/sigmund/sigmund.js | 39 + .../www/node_modules/sigmund/test/basic.js | 24 + .../assets/www/node_modules/tmp/.npmignore | 2 + .../assets/www/node_modules/tmp/.travis.yml | 5 + .../assets/www/node_modules/tmp/README.md | 162 + .../www/node_modules/tmp/domain-test.js | 13 + .../assets/www/node_modules/tmp/lib/tmp.js | 307 + .../assets/www/node_modules/tmp/package.json | 91 + .../assets/www/node_modules/tmp/test-all.sh | 9 + .../assets/www/node_modules/tmp/test.js | 6 + .../assets/www/node_modules/tmp/test/base.js | 74 + .../www/node_modules/tmp/test/dir-test.js | 196 + .../www/node_modules/tmp/test/file-test.js | 177 + .../www/node_modules/tmp/test/graceful.js | 15 + .../assets/www/node_modules/tmp/test/keep.js | 11 + .../www/node_modules/tmp/test/name-test.js | 82 + .../assets/www/node_modules/tmp/test/spawn.js | 32 + .../node_modules/tmp/test/symlinkme/file.js | 0 .../www/node_modules/tmp/test/unsafe.js | 30 + .../assets/www/node_modules/ultron/.npmignore | 3 + .../www/node_modules/ultron/.travis.yml | 21 + .../assets/www/node_modules/ultron/LICENSE | 22 + .../assets/www/node_modules/ultron/README.md | 97 + .../assets/www/node_modules/ultron/index.js | 129 + .../www/node_modules/ultron/package.json | 100 + .../assets/www/node_modules/ultron/test.js | 327 + .../assets/www/node_modules/wrappy/LICENSE | 15 + .../assets/www/node_modules/wrappy/README.md | 36 + .../www/node_modules/wrappy/package.json | 78 + .../www/node_modules/wrappy/test/basic.js | 51 + .../assets/www/node_modules/wrappy/wrappy.js | 33 + .../assets/www/node_modules/ws/.npmignore | 11 + .../assets/www/node_modules/ws/.travis.yml | 15 + .../assets/www/node_modules/ws/Makefile | 40 + .../assets/www/node_modules/ws/README.md | 242 + .../assets/www/node_modules/ws/index.js | 49 + .../www/node_modules/ws/lib/BufferPool.js | 63 + .../ws/lib/BufferUtil.fallback.js | 47 + .../www/node_modules/ws/lib/BufferUtil.js | 13 + .../www/node_modules/ws/lib/ErrorCodes.js | 24 + .../www/node_modules/ws/lib/Extensions.js | 70 + .../node_modules/ws/lib/PerMessageDeflate.js | 325 + .../www/node_modules/ws/lib/Receiver.hixie.js | 184 + .../www/node_modules/ws/lib/Receiver.js | 702 + .../www/node_modules/ws/lib/Sender.hixie.js | 124 + .../assets/www/node_modules/ws/lib/Sender.js | 324 + .../ws/lib/Validation.fallback.js | 12 + .../www/node_modules/ws/lib/Validation.js | 13 + .../www/node_modules/ws/lib/WebSocket.js | 965 + .../node_modules/ws/lib/WebSocketServer.js | 513 + .../assets/www/node_modules/ws/package.json | 102 + .../assets/www/node_modules/xml2js/.npmignore | 6 + .../www/node_modules/xml2js/.travis.yml | 5 + .../assets/www/node_modules/xml2js/83.coffee | 6 + .../www/node_modules/xml2js/CONTRIBUTING.md | 19 + .../assets/www/node_modules/xml2js/LICENSE | 19 + .../assets/www/node_modules/xml2js/README.md | 343 + .../assets/www/node_modules/xml2js/canon.xml | 482 + .../www/node_modules/xml2js/incompat.coffee | 5 + .../www/node_modules/xml2js/incompat2.js | 7 + .../assets/www/node_modules/xml2js/lib/bom.js | 15 + .../www/node_modules/xml2js/lib/processors.js | 19 + .../www/node_modules/xml2js/lib/xml2js.js | 436 + .../www/node_modules/xml2js/package.json | 211 + .../www/node_modules/xml2js/text.coffee | 11 + .../assets/www/node_modules/xml2js/text.xml | 485 + .../assets/www/node_modules/xml2js/x.js | 24 + .../www/node_modules/xmlbuilder/.npmignore | 5 + .../www/node_modules/xmlbuilder/CHANGELOG.md | 329 + .../www/node_modules/xmlbuilder/LICENSE | 21 + .../www/node_modules/xmlbuilder/README.md | 86 + .../xmlbuilder/lib/XMLAttribute.js | 32 + .../node_modules/xmlbuilder/lib/XMLBuilder.js | 69 + .../node_modules/xmlbuilder/lib/XMLCData.js | 49 + .../node_modules/xmlbuilder/lib/XMLComment.js | 49 + .../xmlbuilder/lib/XMLDTDAttList.js | 68 + .../xmlbuilder/lib/XMLDTDElement.js | 46 + .../xmlbuilder/lib/XMLDTDEntity.js | 84 + .../xmlbuilder/lib/XMLDTDNotation.js | 56 + .../xmlbuilder/lib/XMLDeclaration.js | 65 + .../node_modules/xmlbuilder/lib/XMLDocType.js | 188 + .../node_modules/xmlbuilder/lib/XMLElement.js | 217 + .../node_modules/xmlbuilder/lib/XMLNode.js | 331 + .../lib/XMLProcessingInstruction.js | 51 + .../www/node_modules/xmlbuilder/lib/XMLRaw.js | 49 + .../xmlbuilder/lib/XMLStringifier.js | 193 + .../node_modules/xmlbuilder/lib/XMLText.js | 49 + .../www/node_modules/xmlbuilder/lib/index.js | 14 + .../www/node_modules/xmlbuilder/package.json | 93 + platforms/android/assets/www/package.json | 15 + .../android/assets/www/resources/js/alerts.js | 18 +- .../android/assets/www/resources/js/mic.js | 2 +- .../android/assets/www/resources/js/motion.js | 67 +- .../assets/www/resources/js/motionOldAlgo.js | 104 + .../android/assets/www/resources/js/study.js | 10 +- .../android/assets/www/spec/UI-help-test.js | 133 + .../android/assets/www/spec/UI-home-test.js | 133 + .../assets/www/spec/UI-reports-test.js | 133 + .../assets/www/spec/UI-schedule-test.js | 133 + .../assets/www/spec/UI-settings-test.js | 133 + .../assets/www/spec/support/jasmine.json | 11 + .../android/platform_www/cordova_plugins.js | 18 +- platforms/android/res/xml/config.xml | 6 +- .../micVolume/MicVolumePlugin.java | 7 +- plugins/android.json | 6 +- .../src/android/MicVolumePlugin.java | 7 +- .../android/MicVolumePluginAlgorithmOne.js | 99 - .../src/android/MicVolumePluginMessy.java | 132 - .../src/android/MicVolumePluginWorking.java | 91 - plugins/fetch.json | 18 +- www/resources/js/mic.js | 4 +- www/resources/js/motion.js | 67 +- www/resources/js/motionOldAlgo.js | 104 + www/resources/js/study.js | 3 + 1637 files changed, 146705 insertions(+), 444 deletions(-) create mode 120000 platforms/android/assets/www/node_modules/.bin/jasmine create mode 120000 platforms/android/assets/www/node_modules/.bin/rimraf create mode 100644 platforms/android/assets/www/node_modules/adm-zip/.idea/scopes/scope_settings.xml create mode 100644 platforms/android/assets/www/node_modules/adm-zip/MIT-LICENSE.txt create mode 100644 platforms/android/assets/www/node_modules/adm-zip/README.md create mode 100644 platforms/android/assets/www/node_modules/adm-zip/adm-zip.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/headers/entryHeader.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/headers/index.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/headers/mainHeader.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/methods/deflater.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/methods/index.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/methods/inflater.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/package.json create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test.zip create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test/blank file.txt create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/fast.zip create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/fastest.zip create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/linux_arc.zip create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/maximum.zip create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/normal.zip create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/store.zip create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/assets/ultra.zip create mode 100644 platforms/android/assets/www/node_modules/adm-zip/test/index.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/util/constants.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/util/errors.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/util/fattr.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/util/index.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/util/utils.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/zipEntry.js create mode 100644 platforms/android/assets/www/node_modules/adm-zip/zipFile.js create mode 100644 platforms/android/assets/www/node_modules/balanced-match/.npmignore create mode 100644 platforms/android/assets/www/node_modules/balanced-match/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/balanced-match/LICENSE.md create mode 100644 platforms/android/assets/www/node_modules/balanced-match/Makefile create mode 100644 platforms/android/assets/www/node_modules/balanced-match/README.md create mode 100644 platforms/android/assets/www/node_modules/balanced-match/example.js create mode 100644 platforms/android/assets/www/node_modules/balanced-match/index.js create mode 100644 platforms/android/assets/www/node_modules/balanced-match/package.json create mode 100644 platforms/android/assets/www/node_modules/balanced-match/test/balanced.js create mode 100644 platforms/android/assets/www/node_modules/brace-expansion/.npmignore create mode 100644 platforms/android/assets/www/node_modules/brace-expansion/README.md create mode 100644 platforms/android/assets/www/node_modules/brace-expansion/example.js create mode 100644 platforms/android/assets/www/node_modules/brace-expansion/index.js create mode 100644 platforms/android/assets/www/node_modules/brace-expansion/package.json create mode 100644 platforms/android/assets/www/node_modules/concat-map/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/concat-map/LICENSE create mode 100644 platforms/android/assets/www/node_modules/concat-map/README.markdown create mode 100644 platforms/android/assets/www/node_modules/concat-map/example/map.js create mode 100644 platforms/android/assets/www/node_modules/concat-map/index.js create mode 100644 platforms/android/assets/www/node_modules/concat-map/package.json create mode 100644 platforms/android/assets/www/node_modules/concat-map/test/map.js create mode 100644 platforms/android/assets/www/node_modules/exit/.jshintrc create mode 100644 platforms/android/assets/www/node_modules/exit/.npmignore create mode 100644 platforms/android/assets/www/node_modules/exit/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/exit/Gruntfile.js create mode 100644 platforms/android/assets/www/node_modules/exit/LICENSE-MIT create mode 100644 platforms/android/assets/www/node_modules/exit/README.md create mode 100644 platforms/android/assets/www/node_modules/exit/lib/exit.js create mode 100644 platforms/android/assets/www/node_modules/exit/package.json create mode 100644 platforms/android/assets/www/node_modules/exit/test/exit_test.js create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/10-stderr.txt create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/10-stdout-stderr.txt create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/10-stdout.txt create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/100-stderr.txt create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/100-stdout-stderr.txt create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/100-stdout.txt create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stderr.txt create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stdout-stderr.txt create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stdout.txt create mode 100755 platforms/android/assets/www/node_modules/exit/test/fixtures/create-files.sh create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/log-broken.js create mode 100644 platforms/android/assets/www/node_modules/exit/test/fixtures/log.js create mode 100644 platforms/android/assets/www/node_modules/glob/LICENSE create mode 100644 platforms/android/assets/www/node_modules/glob/README.md create mode 100644 platforms/android/assets/www/node_modules/glob/changelog.md create mode 100644 platforms/android/assets/www/node_modules/glob/common.js create mode 100644 platforms/android/assets/www/node_modules/glob/glob.js create mode 100644 platforms/android/assets/www/node_modules/glob/package.json create mode 100644 platforms/android/assets/www/node_modules/glob/sync.js create mode 100644 platforms/android/assets/www/node_modules/inflight/.eslintrc create mode 100644 platforms/android/assets/www/node_modules/inflight/LICENSE create mode 100644 platforms/android/assets/www/node_modules/inflight/README.md create mode 100644 platforms/android/assets/www/node_modules/inflight/inflight.js create mode 100644 platforms/android/assets/www/node_modules/inflight/package.json create mode 100644 platforms/android/assets/www/node_modules/inflight/test.js create mode 100644 platforms/android/assets/www/node_modules/inherits/LICENSE create mode 100644 platforms/android/assets/www/node_modules/inherits/README.md create mode 100644 platforms/android/assets/www/node_modules/inherits/inherits.js create mode 100644 platforms/android/assets/www/node_modules/inherits/inherits_browser.js create mode 100644 platforms/android/assets/www/node_modules/inherits/package.json create mode 100644 platforms/android/assets/www/node_modules/inherits/test.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/.npmignore create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/CONTRIBUTING.md create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/MANIFEST.in create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/MIT.LICENSE create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/README.md create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/RELEASE.md create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/bower.json create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/images/jasmine-horizontal.png create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/images/jasmine-horizontal.svg create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/images/jasmine_favicon.png create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/PKG-INFO create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/SOURCES.txt create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/dependency_links.txt create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/requires.txt create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/top_level.txt create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/console/console.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/boot.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/helpers/jasmine_examples/SpecHelper.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/jasmine_examples/PlayerSpec.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/PlayerSpec.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/SpecHelper.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Player.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Song.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.css create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/json2.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/node_boot.js create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/package.json create mode 100644 platforms/android/assets/www/node_modules/jasmine-core/requirements.txt create mode 100644 platforms/android/assets/www/node_modules/jasmine/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/jasmine/Gruntfile.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/README.md create mode 100755 platforms/android/assets/www/node_modules/jasmine/bin/jasmine.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/lib/command.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/lib/examples/jasmine.json create mode 100644 platforms/android/assets/www/node_modules/jasmine/lib/exit.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/lib/filters/console_spec_filter.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/lib/jasmine.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/lib/printDeprecation.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/lib/reporters/console_reporter.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/lib/reporters/exit_code_reporter.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/.npmignore create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/LICENSE create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/README.md create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/examples/g.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/examples/usr-local.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/glob.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/package.json create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/00-setup.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/bash-comparison.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/bash-results.json create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/cwd-test.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/globstar-match.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/mark.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/new-glob-optional-options.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/nocase-nomagic.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/pause-resume.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/readme-issue.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/root-nomount.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/root.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/stat.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/zz-cleanup.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/.npmignore create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/LICENSE create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/README.md create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/minimatch.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/package.json create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/basic.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/brace-expand.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/caching.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/defaults.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/extglob-ending-with-state-char.js create mode 100644 platforms/android/assets/www/node_modules/jasmine/package.json create mode 100644 platforms/android/assets/www/node_modules/jasmine/tasks/jasmine.js create mode 100644 platforms/android/assets/www/node_modules/lodash/LICENSE create mode 100644 platforms/android/assets/www/node_modules/lodash/README.md create mode 100644 platforms/android/assets/www/node_modules/lodash/_Hash.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_LazyWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_LodashWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_Map.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_MapCache.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_Reflect.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_Set.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_SetCache.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_Stack.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_Symbol.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_Uint8Array.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_WeakMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_addMapEntry.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_addSetEntry.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_apply.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayAggregator.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayConcat.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayEach.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayEachRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayEvery.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayFilter.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayIncludes.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayIncludesWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayPush.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayReduce.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arrayReduceRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_arraySome.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_assignInDefaults.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_assignMergeValue.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_assignValue.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_assocDelete.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_assocGet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_assocHas.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_assocIndexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_assocSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseAggregator.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseAssign.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseAt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseCastArrayLikeObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseCastFunction.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseCastPath.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseClamp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseClone.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseConforms.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseCreate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseDelay.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseDifference.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseEach.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseEachRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseEvery.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseExtremum.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseFill.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseFilter.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseFind.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseFindIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseFlatten.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseFor.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseForIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseForOwn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseForOwnRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseForRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseFunctions.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseGet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseHas.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseHasIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseInRange.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseIndexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseIndexOfWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseIntersection.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseInverter.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseInvoke.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseIsEqual.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseIsEqualDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseIsMatch.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseIteratee.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseKeys.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseKeysIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseLodash.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseMatches.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseMatchesProperty.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseMerge.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseMergeDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseOrderBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_basePick.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_basePickBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseProperty.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_basePropertyDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_basePullAll.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_basePullAt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseRandom.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseRange.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseReduce.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSetData.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSlice.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSome.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSortBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSortedIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSortedIndexBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSortedUniq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSortedUniqBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseSum.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseTimes.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseToPairs.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseUnary.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseUniq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseUnset.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseUpdate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseValues.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseWrapperValue.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseXor.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_baseZipObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cacheHas.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cachePush.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_charsEndIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_charsStartIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_checkGlobal.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cloneArrayBuffer.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cloneBuffer.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cloneMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cloneRegExp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cloneSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cloneSymbol.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_cloneTypedArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_compareAscending.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_compareMultiple.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_composeArgs.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_composeArgsRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_copyArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_copyObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_copyObjectWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_copySymbols.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_countHolders.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createAggregator.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createAssigner.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createBaseEach.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createBaseFor.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createBaseWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createCaseFirst.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createCompounder.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createCtorWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createCurryWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createFlow.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createHybridWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createInverter.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createOver.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createPadding.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createPartialWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createRange.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createRecurryWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createRound.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_createWrapper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_deburrLetter.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_equalArrays.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_equalByTag.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_equalObjects.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_escapeHtmlChar.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_escapeStringChar.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getData.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getFuncName.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getLength.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getMatchData.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getNative.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getPlaceholder.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getSymbols.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getTag.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_getView.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_hasPath.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_hashDelete.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_hashGet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_hashHas.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_hashSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_indexKeys.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_indexOfNaN.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_initCloneArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_initCloneByTag.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_initCloneObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_isHostObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_isIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_isIterateeCall.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_isKey.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_isKeyable.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_isLaziable.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_isPrototype.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_isStrictComparable.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_iteratorToArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_lazyClone.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_lazyReverse.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_lazyValue.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_mapClear.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_mapDelete.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_mapGet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_mapHas.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_mapSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_mapToArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_mergeData.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_mergeDefaults.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_metaMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_nativeCreate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_parent.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_reEscape.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_reEvaluate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_reInterpolate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_realNames.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_reorder.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_replaceHolders.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_root.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_setData.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_setToArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_stackClear.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_stackDelete.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_stackGet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_stackHas.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_stackSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_stringSize.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_stringToArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_stringToPath.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_unescapeHtmlChar.js create mode 100644 platforms/android/assets/www/node_modules/lodash/_wrapperClone.js create mode 100644 platforms/android/assets/www/node_modules/lodash/add.js create mode 100644 platforms/android/assets/www/node_modules/lodash/after.js create mode 100644 platforms/android/assets/www/node_modules/lodash/array.js create mode 100644 platforms/android/assets/www/node_modules/lodash/ary.js create mode 100644 platforms/android/assets/www/node_modules/lodash/assign.js create mode 100644 platforms/android/assets/www/node_modules/lodash/assignIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/assignInWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/assignWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/at.js create mode 100644 platforms/android/assets/www/node_modules/lodash/attempt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/before.js create mode 100644 platforms/android/assets/www/node_modules/lodash/bind.js create mode 100644 platforms/android/assets/www/node_modules/lodash/bindAll.js create mode 100644 platforms/android/assets/www/node_modules/lodash/bindKey.js create mode 100644 platforms/android/assets/www/node_modules/lodash/camelCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/capitalize.js create mode 100644 platforms/android/assets/www/node_modules/lodash/castArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/ceil.js create mode 100644 platforms/android/assets/www/node_modules/lodash/chain.js create mode 100644 platforms/android/assets/www/node_modules/lodash/chunk.js create mode 100644 platforms/android/assets/www/node_modules/lodash/clamp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/clone.js create mode 100644 platforms/android/assets/www/node_modules/lodash/cloneDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/cloneDeepWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/cloneWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/collection.js create mode 100644 platforms/android/assets/www/node_modules/lodash/commit.js create mode 100644 platforms/android/assets/www/node_modules/lodash/compact.js create mode 100644 platforms/android/assets/www/node_modules/lodash/concat.js create mode 100644 platforms/android/assets/www/node_modules/lodash/cond.js create mode 100644 platforms/android/assets/www/node_modules/lodash/conforms.js create mode 100644 platforms/android/assets/www/node_modules/lodash/constant.js create mode 100644 platforms/android/assets/www/node_modules/lodash/core.js create mode 100644 platforms/android/assets/www/node_modules/lodash/core.min.js create mode 100644 platforms/android/assets/www/node_modules/lodash/countBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/create.js create mode 100644 platforms/android/assets/www/node_modules/lodash/curry.js create mode 100644 platforms/android/assets/www/node_modules/lodash/curryRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/date.js create mode 100644 platforms/android/assets/www/node_modules/lodash/debounce.js create mode 100644 platforms/android/assets/www/node_modules/lodash/deburr.js create mode 100644 platforms/android/assets/www/node_modules/lodash/defaults.js create mode 100644 platforms/android/assets/www/node_modules/lodash/defaultsDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/defer.js create mode 100644 platforms/android/assets/www/node_modules/lodash/delay.js create mode 100644 platforms/android/assets/www/node_modules/lodash/difference.js create mode 100644 platforms/android/assets/www/node_modules/lodash/differenceBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/differenceWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/drop.js create mode 100644 platforms/android/assets/www/node_modules/lodash/dropRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/dropRightWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/dropWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/each.js create mode 100644 platforms/android/assets/www/node_modules/lodash/eachRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/endsWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/eq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/escape.js create mode 100644 platforms/android/assets/www/node_modules/lodash/escapeRegExp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/every.js create mode 100644 platforms/android/assets/www/node_modules/lodash/extend.js create mode 100644 platforms/android/assets/www/node_modules/lodash/extendWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fill.js create mode 100644 platforms/android/assets/www/node_modules/lodash/filter.js create mode 100644 platforms/android/assets/www/node_modules/lodash/find.js create mode 100644 platforms/android/assets/www/node_modules/lodash/findIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/findKey.js create mode 100644 platforms/android/assets/www/node_modules/lodash/findLast.js create mode 100644 platforms/android/assets/www/node_modules/lodash/findLastIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/findLastKey.js create mode 100644 platforms/android/assets/www/node_modules/lodash/flatMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/flatten.js create mode 100644 platforms/android/assets/www/node_modules/lodash/flattenDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/flattenDepth.js create mode 100644 platforms/android/assets/www/node_modules/lodash/flip.js create mode 100644 platforms/android/assets/www/node_modules/lodash/floor.js create mode 100644 platforms/android/assets/www/node_modules/lodash/flow.js create mode 100644 platforms/android/assets/www/node_modules/lodash/flowRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/forEach.js create mode 100644 platforms/android/assets/www/node_modules/lodash/forEachRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/forIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/forInRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/forOwn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/forOwnRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/_baseConvert.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/_convertBrowser.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/_mapping.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/_util.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/add.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/after.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/all.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/allPass.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/apply.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/array.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/ary.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/assign.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/assignIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/assignInWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/assignWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/assoc.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/assocPath.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/at.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/attempt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/before.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/bind.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/bindAll.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/bindKey.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/camelCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/capitalize.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/castArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/ceil.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/chain.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/chunk.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/clamp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/clone.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/cloneDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/cloneDeepWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/cloneWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/collection.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/commit.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/compact.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/compose.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/concat.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/cond.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/conforms.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/constant.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/contains.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/convert.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/countBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/create.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/curry.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/curryN.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/curryRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/curryRightN.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/date.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/debounce.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/deburr.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/defaults.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/defaultsDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/defer.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/delay.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/difference.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/differenceBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/differenceWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/dissoc.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/dissocPath.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/drop.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/dropRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/dropRightWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/dropWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/each.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/eachRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/endsWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/eq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/equals.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/escape.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/escapeRegExp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/every.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/extend.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/extendWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/fill.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/filter.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/find.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/findIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/findKey.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/findLast.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/findLastIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/findLastKey.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/first.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/flatMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/flatten.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/flattenDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/flattenDepth.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/flip.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/floor.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/flow.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/flowRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/forEach.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/forEachRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/forIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/forInRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/forOwn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/forOwnRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/fromPairs.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/function.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/functions.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/functionsIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/get.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/getOr.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/groupBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/gt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/gte.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/has.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/hasIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/head.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/identity.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/inRange.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/includes.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/indexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/init.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/initial.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/intersection.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/intersectionBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/intersectionWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/invert.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/invertBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/invoke.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/invokeMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isArguments.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isArrayBuffer.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isArrayLike.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isArrayLikeObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isBoolean.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isBuffer.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isDate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isElement.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isEmpty.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isEqual.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isEqualWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isError.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isFinite.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isFunction.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isInteger.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isLength.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isMatch.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isMatchWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isNaN.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isNative.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isNil.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isNull.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isNumber.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isObjectLike.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isPlainObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isRegExp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isSafeInteger.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isString.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isSymbol.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isTypedArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isUndefined.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isWeakMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/isWeakSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/iteratee.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/join.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/kebabCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/keyBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/keys.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/keysIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/lang.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/last.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/lastIndexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/lowerCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/lowerFirst.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/lt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/lte.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/map.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/mapKeys.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/mapObj.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/mapValues.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/matches.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/matchesProperty.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/math.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/max.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/maxBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/mean.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/memoize.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/merge.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/mergeWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/method.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/methodOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/min.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/minBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/mixin.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/nAry.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/negate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/next.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/noop.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/now.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/nthArg.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/number.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/object.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/omit.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/omitAll.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/omitBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/once.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/orderBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/over.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/overArgs.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/overEvery.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/overSome.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pad.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/padEnd.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/padStart.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/parseInt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/partial.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/partialRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/partition.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/path.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pathEq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pathOr.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pick.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pickAll.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pickBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pipe.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/plant.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/prop.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/propOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/propOr.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/property.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/propertyOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pull.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pullAll.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pullAllBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pullAllWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/pullAt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/random.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/range.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/rangeRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/rearg.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/reduce.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/reduceRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/reject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/remove.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/repeat.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/replace.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/rest.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/result.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/reverse.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/round.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sample.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sampleSize.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/seq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/set.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/setWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/shuffle.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/size.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/slice.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/snakeCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/some.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/somePass.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortedIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortedIndexBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortedIndexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndexBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortedUniq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sortedUniqBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/split.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/spread.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/startCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/startsWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/string.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/subtract.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sum.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/sumBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/tail.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/take.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/takeRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/takeRightWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/takeWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/tap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/template.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/templateSettings.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/throttle.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/thru.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/times.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toInteger.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toIterator.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toJSON.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toLength.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toLower.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toNumber.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toPairs.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toPairsIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toPath.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toPlainObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toSafeInteger.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toString.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/toUpper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/transform.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/trim.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/trimChars.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/trimCharsEnd.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/trimCharsStart.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/trimEnd.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/trimStart.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/truncate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unapply.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unary.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unescape.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/union.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unionBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unionWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/uniq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/uniqBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/uniqWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/uniqueId.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unnest.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unset.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unzip.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/unzipWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/update.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/updateWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/upperCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/upperFirst.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/useWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/util.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/value.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/valueOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/values.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/valuesIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/whereEq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/without.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/words.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/wrap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/wrapperAt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/wrapperChain.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/wrapperFlatMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/wrapperLodash.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/wrapperReverse.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/wrapperValue.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/xor.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/xorBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/xorWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/zip.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/zipObj.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/zipObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/zipObjectDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fp/zipWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/fromPairs.js create mode 100644 platforms/android/assets/www/node_modules/lodash/function.js create mode 100644 platforms/android/assets/www/node_modules/lodash/functions.js create mode 100644 platforms/android/assets/www/node_modules/lodash/functionsIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/get.js create mode 100644 platforms/android/assets/www/node_modules/lodash/groupBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/gt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/gte.js create mode 100644 platforms/android/assets/www/node_modules/lodash/has.js create mode 100644 platforms/android/assets/www/node_modules/lodash/hasIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/head.js create mode 100644 platforms/android/assets/www/node_modules/lodash/identity.js create mode 100644 platforms/android/assets/www/node_modules/lodash/inRange.js create mode 100644 platforms/android/assets/www/node_modules/lodash/includes.js create mode 100644 platforms/android/assets/www/node_modules/lodash/index.js create mode 100644 platforms/android/assets/www/node_modules/lodash/indexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/initial.js create mode 100644 platforms/android/assets/www/node_modules/lodash/intersection.js create mode 100644 platforms/android/assets/www/node_modules/lodash/intersectionBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/intersectionWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/invert.js create mode 100644 platforms/android/assets/www/node_modules/lodash/invertBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/invoke.js create mode 100644 platforms/android/assets/www/node_modules/lodash/invokeMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isArguments.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isArrayBuffer.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isArrayLike.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isArrayLikeObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isBoolean.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isBuffer.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isDate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isElement.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isEmpty.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isEqual.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isEqualWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isError.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isFinite.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isFunction.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isInteger.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isLength.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isMatch.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isMatchWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isNaN.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isNative.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isNil.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isNull.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isNumber.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isObjectLike.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isPlainObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isRegExp.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isSafeInteger.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isString.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isSymbol.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isTypedArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isUndefined.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isWeakMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/isWeakSet.js create mode 100644 platforms/android/assets/www/node_modules/lodash/iteratee.js create mode 100644 platforms/android/assets/www/node_modules/lodash/join.js create mode 100644 platforms/android/assets/www/node_modules/lodash/kebabCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/keyBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/keys.js create mode 100644 platforms/android/assets/www/node_modules/lodash/keysIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/lang.js create mode 100644 platforms/android/assets/www/node_modules/lodash/last.js create mode 100644 platforms/android/assets/www/node_modules/lodash/lastIndexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/lodash.js create mode 100644 platforms/android/assets/www/node_modules/lodash/lodash.min.js create mode 100644 platforms/android/assets/www/node_modules/lodash/lowerCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/lowerFirst.js create mode 100644 platforms/android/assets/www/node_modules/lodash/lt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/lte.js create mode 100644 platforms/android/assets/www/node_modules/lodash/map.js create mode 100644 platforms/android/assets/www/node_modules/lodash/mapKeys.js create mode 100644 platforms/android/assets/www/node_modules/lodash/mapValues.js create mode 100644 platforms/android/assets/www/node_modules/lodash/matches.js create mode 100644 platforms/android/assets/www/node_modules/lodash/matchesProperty.js create mode 100644 platforms/android/assets/www/node_modules/lodash/math.js create mode 100644 platforms/android/assets/www/node_modules/lodash/max.js create mode 100644 platforms/android/assets/www/node_modules/lodash/maxBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/mean.js create mode 100644 platforms/android/assets/www/node_modules/lodash/memoize.js create mode 100644 platforms/android/assets/www/node_modules/lodash/merge.js create mode 100644 platforms/android/assets/www/node_modules/lodash/mergeWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/method.js create mode 100644 platforms/android/assets/www/node_modules/lodash/methodOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/min.js create mode 100644 platforms/android/assets/www/node_modules/lodash/minBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/mixin.js create mode 100644 platforms/android/assets/www/node_modules/lodash/negate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/next.js create mode 100644 platforms/android/assets/www/node_modules/lodash/noop.js create mode 100644 platforms/android/assets/www/node_modules/lodash/now.js create mode 100644 platforms/android/assets/www/node_modules/lodash/nthArg.js create mode 100644 platforms/android/assets/www/node_modules/lodash/number.js create mode 100644 platforms/android/assets/www/node_modules/lodash/object.js create mode 100644 platforms/android/assets/www/node_modules/lodash/omit.js create mode 100644 platforms/android/assets/www/node_modules/lodash/omitBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/once.js create mode 100644 platforms/android/assets/www/node_modules/lodash/orderBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/over.js create mode 100644 platforms/android/assets/www/node_modules/lodash/overArgs.js create mode 100644 platforms/android/assets/www/node_modules/lodash/overEvery.js create mode 100644 platforms/android/assets/www/node_modules/lodash/overSome.js create mode 100644 platforms/android/assets/www/node_modules/lodash/package.json create mode 100644 platforms/android/assets/www/node_modules/lodash/pad.js create mode 100644 platforms/android/assets/www/node_modules/lodash/padEnd.js create mode 100644 platforms/android/assets/www/node_modules/lodash/padStart.js create mode 100644 platforms/android/assets/www/node_modules/lodash/parseInt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/partial.js create mode 100644 platforms/android/assets/www/node_modules/lodash/partialRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/partition.js create mode 100644 platforms/android/assets/www/node_modules/lodash/pick.js create mode 100644 platforms/android/assets/www/node_modules/lodash/pickBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/plant.js create mode 100644 platforms/android/assets/www/node_modules/lodash/property.js create mode 100644 platforms/android/assets/www/node_modules/lodash/propertyOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/pull.js create mode 100644 platforms/android/assets/www/node_modules/lodash/pullAll.js create mode 100644 platforms/android/assets/www/node_modules/lodash/pullAllBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/pullAllWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/pullAt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/random.js create mode 100644 platforms/android/assets/www/node_modules/lodash/range.js create mode 100644 platforms/android/assets/www/node_modules/lodash/rangeRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/rearg.js create mode 100644 platforms/android/assets/www/node_modules/lodash/reduce.js create mode 100644 platforms/android/assets/www/node_modules/lodash/reduceRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/reject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/remove.js create mode 100644 platforms/android/assets/www/node_modules/lodash/repeat.js create mode 100644 platforms/android/assets/www/node_modules/lodash/replace.js create mode 100644 platforms/android/assets/www/node_modules/lodash/rest.js create mode 100644 platforms/android/assets/www/node_modules/lodash/result.js create mode 100644 platforms/android/assets/www/node_modules/lodash/reverse.js create mode 100644 platforms/android/assets/www/node_modules/lodash/round.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sample.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sampleSize.js create mode 100644 platforms/android/assets/www/node_modules/lodash/seq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/set.js create mode 100644 platforms/android/assets/www/node_modules/lodash/setWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/shuffle.js create mode 100644 platforms/android/assets/www/node_modules/lodash/size.js create mode 100644 platforms/android/assets/www/node_modules/lodash/slice.js create mode 100644 platforms/android/assets/www/node_modules/lodash/snakeCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/some.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortedIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortedIndexBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortedIndexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortedLastIndex.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortedLastIndexBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortedLastIndexOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortedUniq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sortedUniqBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/split.js create mode 100644 platforms/android/assets/www/node_modules/lodash/spread.js create mode 100644 platforms/android/assets/www/node_modules/lodash/startCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/startsWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/string.js create mode 100644 platforms/android/assets/www/node_modules/lodash/subtract.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sum.js create mode 100644 platforms/android/assets/www/node_modules/lodash/sumBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/tail.js create mode 100644 platforms/android/assets/www/node_modules/lodash/take.js create mode 100644 platforms/android/assets/www/node_modules/lodash/takeRight.js create mode 100644 platforms/android/assets/www/node_modules/lodash/takeRightWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/takeWhile.js create mode 100644 platforms/android/assets/www/node_modules/lodash/tap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/template.js create mode 100644 platforms/android/assets/www/node_modules/lodash/templateSettings.js create mode 100644 platforms/android/assets/www/node_modules/lodash/throttle.js create mode 100644 platforms/android/assets/www/node_modules/lodash/thru.js create mode 100644 platforms/android/assets/www/node_modules/lodash/times.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toArray.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toInteger.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toIterator.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toJSON.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toLength.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toLower.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toNumber.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toPairs.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toPairsIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toPath.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toPlainObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toSafeInteger.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toString.js create mode 100644 platforms/android/assets/www/node_modules/lodash/toUpper.js create mode 100644 platforms/android/assets/www/node_modules/lodash/transform.js create mode 100644 platforms/android/assets/www/node_modules/lodash/trim.js create mode 100644 platforms/android/assets/www/node_modules/lodash/trimEnd.js create mode 100644 platforms/android/assets/www/node_modules/lodash/trimStart.js create mode 100644 platforms/android/assets/www/node_modules/lodash/truncate.js create mode 100644 platforms/android/assets/www/node_modules/lodash/unary.js create mode 100644 platforms/android/assets/www/node_modules/lodash/unescape.js create mode 100644 platforms/android/assets/www/node_modules/lodash/union.js create mode 100644 platforms/android/assets/www/node_modules/lodash/unionBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/unionWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/uniq.js create mode 100644 platforms/android/assets/www/node_modules/lodash/uniqBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/uniqWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/uniqueId.js create mode 100644 platforms/android/assets/www/node_modules/lodash/unset.js create mode 100644 platforms/android/assets/www/node_modules/lodash/unzip.js create mode 100644 platforms/android/assets/www/node_modules/lodash/unzipWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/update.js create mode 100644 platforms/android/assets/www/node_modules/lodash/updateWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/upperCase.js create mode 100644 platforms/android/assets/www/node_modules/lodash/upperFirst.js create mode 100644 platforms/android/assets/www/node_modules/lodash/util.js create mode 100644 platforms/android/assets/www/node_modules/lodash/value.js create mode 100644 platforms/android/assets/www/node_modules/lodash/valueOf.js create mode 100644 platforms/android/assets/www/node_modules/lodash/values.js create mode 100644 platforms/android/assets/www/node_modules/lodash/valuesIn.js create mode 100644 platforms/android/assets/www/node_modules/lodash/without.js create mode 100644 platforms/android/assets/www/node_modules/lodash/words.js create mode 100644 platforms/android/assets/www/node_modules/lodash/wrap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/wrapperAt.js create mode 100644 platforms/android/assets/www/node_modules/lodash/wrapperChain.js create mode 100644 platforms/android/assets/www/node_modules/lodash/wrapperFlatMap.js create mode 100644 platforms/android/assets/www/node_modules/lodash/wrapperLodash.js create mode 100644 platforms/android/assets/www/node_modules/lodash/wrapperReverse.js create mode 100644 platforms/android/assets/www/node_modules/lodash/wrapperValue.js create mode 100644 platforms/android/assets/www/node_modules/lodash/xor.js create mode 100644 platforms/android/assets/www/node_modules/lodash/xorBy.js create mode 100644 platforms/android/assets/www/node_modules/lodash/xorWith.js create mode 100644 platforms/android/assets/www/node_modules/lodash/zip.js create mode 100644 platforms/android/assets/www/node_modules/lodash/zipObject.js create mode 100644 platforms/android/assets/www/node_modules/lodash/zipObjectDeep.js create mode 100644 platforms/android/assets/www/node_modules/lodash/zipWith.js create mode 100644 platforms/android/assets/www/node_modules/lru-cache/.npmignore create mode 100644 platforms/android/assets/www/node_modules/lru-cache/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/lru-cache/CONTRIBUTORS create mode 100644 platforms/android/assets/www/node_modules/lru-cache/LICENSE create mode 100644 platforms/android/assets/www/node_modules/lru-cache/README.md create mode 100644 platforms/android/assets/www/node_modules/lru-cache/lib/lru-cache.js create mode 100644 platforms/android/assets/www/node_modules/lru-cache/package.json create mode 100644 platforms/android/assets/www/node_modules/lru-cache/test/basic.js create mode 100644 platforms/android/assets/www/node_modules/lru-cache/test/foreach.js create mode 100644 platforms/android/assets/www/node_modules/lru-cache/test/memory-leak.js create mode 100644 platforms/android/assets/www/node_modules/lru-cache/test/serialize.js create mode 100644 platforms/android/assets/www/node_modules/minimatch/LICENSE create mode 100644 platforms/android/assets/www/node_modules/minimatch/README.md create mode 100644 platforms/android/assets/www/node_modules/minimatch/minimatch.js create mode 100644 platforms/android/assets/www/node_modules/minimatch/package.json create mode 100644 platforms/android/assets/www/node_modules/once/LICENSE create mode 100644 platforms/android/assets/www/node_modules/once/README.md create mode 100644 platforms/android/assets/www/node_modules/once/once.js create mode 100644 platforms/android/assets/www/node_modules/once/package.json create mode 100644 platforms/android/assets/www/node_modules/options/.npmignore create mode 100644 platforms/android/assets/www/node_modules/options/Makefile create mode 100644 platforms/android/assets/www/node_modules/options/README.md create mode 100644 platforms/android/assets/www/node_modules/options/lib/options.js create mode 100644 platforms/android/assets/www/node_modules/options/package.json create mode 100644 platforms/android/assets/www/node_modules/path-is-absolute/index.js create mode 100644 platforms/android/assets/www/node_modules/path-is-absolute/license create mode 100644 platforms/android/assets/www/node_modules/path-is-absolute/package.json create mode 100644 platforms/android/assets/www/node_modules/path-is-absolute/readme.md create mode 100644 platforms/android/assets/www/node_modules/rimraf/LICENSE create mode 100644 platforms/android/assets/www/node_modules/rimraf/README.md create mode 100755 platforms/android/assets/www/node_modules/rimraf/bin.js create mode 100644 platforms/android/assets/www/node_modules/rimraf/package.json create mode 100644 platforms/android/assets/www/node_modules/rimraf/rimraf.js create mode 100644 platforms/android/assets/www/node_modules/sax/AUTHORS create mode 100644 platforms/android/assets/www/node_modules/sax/LICENSE create mode 100644 platforms/android/assets/www/node_modules/sax/LICENSE-W3C.html create mode 100644 platforms/android/assets/www/node_modules/sax/README.md create mode 100644 platforms/android/assets/www/node_modules/sax/examples/big-not-pretty.xml create mode 100644 platforms/android/assets/www/node_modules/sax/examples/example.js create mode 100644 platforms/android/assets/www/node_modules/sax/examples/get-products.js create mode 100644 platforms/android/assets/www/node_modules/sax/examples/hello-world.js create mode 100644 platforms/android/assets/www/node_modules/sax/examples/not-pretty.xml create mode 100644 platforms/android/assets/www/node_modules/sax/examples/pretty-print.js create mode 100644 platforms/android/assets/www/node_modules/sax/examples/shopping.xml create mode 100644 platforms/android/assets/www/node_modules/sax/examples/strict.dtd create mode 100644 platforms/android/assets/www/node_modules/sax/examples/test.html create mode 100644 platforms/android/assets/www/node_modules/sax/examples/test.xml create mode 100644 platforms/android/assets/www/node_modules/sax/lib/sax.js create mode 100644 platforms/android/assets/www/node_modules/sax/package.json create mode 100644 platforms/android/assets/www/node_modules/sax/test/attribute-name.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/attribute-no-space.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/buffer-overrun.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/case.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/cdata-chunked.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/cdata-end-split.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/cdata-fake-end.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/cdata-multiple.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/cdata.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/cyrillic.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/duplicate-attribute.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/emoji.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/end_empty_stream.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/entities.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/entity-mega.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/flush.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/index.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/issue-23.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/issue-30.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/issue-35.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/issue-47.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/issue-49.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/issue-84.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/parser-position.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/script-close-better.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/script.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/self-closing-child-strict.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/self-closing-child.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/self-closing-tag.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/stray-ending.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/trailing-attribute-no-value.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/trailing-non-whitespace.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/unclosed-root.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/unquoted.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/utf8-split.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-as-tag-name.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-issue-41.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-rebinding.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-strict.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-unbound-element.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-unbound.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-ns.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-prefix.js create mode 100644 platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-redefine.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/.npmignore create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/CHANGES.md create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/LICENSE create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/NOTICE create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/README.md create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/builder.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/chrome.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/edge.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/error.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/example/chrome_android.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search_generator.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/example/logging.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/example/parallel_flows.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/executors.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/firefox/binary.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/firefox/extension.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/firefox/index.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/firefox/profile.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/http/index.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/http/util.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/ie.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/index.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/io/exec.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/io/index.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/README create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/actions.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/by.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/capabilities.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/command.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/devmode.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/events.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/firefox/webdriver.json create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/firefox/webdriver.xpi create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/input.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/logging.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/promise.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/safari/client.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/session.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/symbols.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/build.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/ClickTest_testClicksASurroundingStrongTag.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Page.aspx create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Page.aspx.cs create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Web.Config create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/alerts.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/banner.gif create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/beach.jpg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/blank.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/child/childPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/clickEventPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_frames.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_jacker.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_rtl.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_source.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/disappearing_element.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/google_map.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/google_map.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/html5_submit_buttons.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_too_big.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/clicks.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/closeable_window.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cn-test.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/colorPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cookies.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cssTransform.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cssTransform2.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/draggableLists.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/droppableItems.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dynamic.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/errors.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/firefox/jetpack-sample.xpi create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/firefox/sample.xpi create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/formPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framePage3.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameset.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framesetPage2.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framesetPage3.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/globalscope.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/hidden.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/blue.jpg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/database.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/green.jpg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/red.jpg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/status.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/test.appcache create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/yellow.jpg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5Page.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/icon.gif create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframeWithAlert.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframeWithIframe.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframes.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/injectableContent.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/javascriptEnhancedForm.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/javascriptPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/jquery-1.3.2.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/jquery-1.4.4.min.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/jquery-ui-1.8.10.custom.min.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.svg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.eot create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.woff create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/anchor.gif create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/loader.gif create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/object.gif create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/trans.gif create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.ie7.min.css create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/tinymce.min.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/key_tests/remove_on_keypress.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/linked_image.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/longContentPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/macbeth.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/map.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/map_visibility.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/markerTransparent.png create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/messages.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/meta-redirect.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/missedJsReference.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/mouseOver.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/nestedElements.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow-body.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/plain.txt create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page1.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page2.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page3.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/rectangles.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/resultPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/rich_text.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.css create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll2.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll3.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll4.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll5.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/selectPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/selectableItems.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/sessionCookie.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/simple.xml create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/simpleTest.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/styledPage.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/svgTest.svg create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/tables.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/tinymce.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transformable.xml create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transformable.xsl create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transparentUpload.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/underscore.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/upload.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/visibility-css.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/win32frameset.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/fileserver.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/httpserver.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/index.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/resources.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/until.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/lib/webdriver.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/net/index.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/net/portprober.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/opera.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/package.json create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/phantomjs.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/proxy.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/remote/index.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/safari.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/actions_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/chrome/options_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/chrome/service_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/cookie_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/element_finding_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/error_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/execute_script_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/fingerprint_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/extension_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/firefox_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/profile_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/http/http_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/http/util_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/io_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/by_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/capabilities_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/events_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/logging_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_aplus_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_error_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_flow_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_generator_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/testutil.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/until_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/webdriver_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/logging_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/net/portprober_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/page_loading_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/proxy_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/remote_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/stale_element_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/tag_name_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/testing/assert_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/testing/index_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/upload_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/test/window_test.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/testing/assert.js create mode 100644 platforms/android/assets/www/node_modules/selenium-webdriver/testing/index.js create mode 100644 platforms/android/assets/www/node_modules/sigmund/LICENSE create mode 100644 platforms/android/assets/www/node_modules/sigmund/README.md create mode 100644 platforms/android/assets/www/node_modules/sigmund/bench.js create mode 100644 platforms/android/assets/www/node_modules/sigmund/package.json create mode 100644 platforms/android/assets/www/node_modules/sigmund/sigmund.js create mode 100644 platforms/android/assets/www/node_modules/sigmund/test/basic.js create mode 100644 platforms/android/assets/www/node_modules/tmp/.npmignore create mode 100644 platforms/android/assets/www/node_modules/tmp/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/tmp/README.md create mode 100644 platforms/android/assets/www/node_modules/tmp/domain-test.js create mode 100644 platforms/android/assets/www/node_modules/tmp/lib/tmp.js create mode 100644 platforms/android/assets/www/node_modules/tmp/package.json create mode 100755 platforms/android/assets/www/node_modules/tmp/test-all.sh create mode 100644 platforms/android/assets/www/node_modules/tmp/test.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/base.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/dir-test.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/file-test.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/graceful.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/keep.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/name-test.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/spawn.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/symlinkme/file.js create mode 100644 platforms/android/assets/www/node_modules/tmp/test/unsafe.js create mode 100644 platforms/android/assets/www/node_modules/ultron/.npmignore create mode 100644 platforms/android/assets/www/node_modules/ultron/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/ultron/LICENSE create mode 100644 platforms/android/assets/www/node_modules/ultron/README.md create mode 100644 platforms/android/assets/www/node_modules/ultron/index.js create mode 100644 platforms/android/assets/www/node_modules/ultron/package.json create mode 100644 platforms/android/assets/www/node_modules/ultron/test.js create mode 100644 platforms/android/assets/www/node_modules/wrappy/LICENSE create mode 100644 platforms/android/assets/www/node_modules/wrappy/README.md create mode 100644 platforms/android/assets/www/node_modules/wrappy/package.json create mode 100644 platforms/android/assets/www/node_modules/wrappy/test/basic.js create mode 100644 platforms/android/assets/www/node_modules/wrappy/wrappy.js create mode 100644 platforms/android/assets/www/node_modules/ws/.npmignore create mode 100644 platforms/android/assets/www/node_modules/ws/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/ws/Makefile create mode 100644 platforms/android/assets/www/node_modules/ws/README.md create mode 100644 platforms/android/assets/www/node_modules/ws/index.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/BufferPool.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/BufferUtil.fallback.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/BufferUtil.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/ErrorCodes.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/Extensions.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/PerMessageDeflate.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/Receiver.hixie.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/Receiver.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/Sender.hixie.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/Sender.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/Validation.fallback.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/Validation.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/WebSocket.js create mode 100644 platforms/android/assets/www/node_modules/ws/lib/WebSocketServer.js create mode 100644 platforms/android/assets/www/node_modules/ws/package.json create mode 100644 platforms/android/assets/www/node_modules/xml2js/.npmignore create mode 100644 platforms/android/assets/www/node_modules/xml2js/.travis.yml create mode 100644 platforms/android/assets/www/node_modules/xml2js/83.coffee create mode 100644 platforms/android/assets/www/node_modules/xml2js/CONTRIBUTING.md create mode 100644 platforms/android/assets/www/node_modules/xml2js/LICENSE create mode 100644 platforms/android/assets/www/node_modules/xml2js/README.md create mode 100644 platforms/android/assets/www/node_modules/xml2js/canon.xml create mode 100644 platforms/android/assets/www/node_modules/xml2js/incompat.coffee create mode 100644 platforms/android/assets/www/node_modules/xml2js/incompat2.js create mode 100644 platforms/android/assets/www/node_modules/xml2js/lib/bom.js create mode 100644 platforms/android/assets/www/node_modules/xml2js/lib/processors.js create mode 100644 platforms/android/assets/www/node_modules/xml2js/lib/xml2js.js create mode 100644 platforms/android/assets/www/node_modules/xml2js/package.json create mode 100644 platforms/android/assets/www/node_modules/xml2js/text.coffee create mode 100644 platforms/android/assets/www/node_modules/xml2js/text.xml create mode 100644 platforms/android/assets/www/node_modules/xml2js/x.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/.npmignore create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/CHANGELOG.md create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/LICENSE create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/README.md create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLAttribute.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLBuilder.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLCData.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLComment.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDAttList.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDElement.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDEntity.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDNotation.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDeclaration.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDocType.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLElement.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLNode.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLRaw.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLStringifier.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLText.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/lib/index.js create mode 100644 platforms/android/assets/www/node_modules/xmlbuilder/package.json create mode 100644 platforms/android/assets/www/package.json create mode 100644 platforms/android/assets/www/resources/js/motionOldAlgo.js create mode 100644 platforms/android/assets/www/spec/UI-help-test.js create mode 100644 platforms/android/assets/www/spec/UI-home-test.js create mode 100644 platforms/android/assets/www/spec/UI-reports-test.js create mode 100644 platforms/android/assets/www/spec/UI-schedule-test.js create mode 100644 platforms/android/assets/www/spec/UI-settings-test.js create mode 100644 platforms/android/assets/www/spec/support/jasmine.json delete mode 100644 plugins/com.shukriadams.micVolume/src/android/MicVolumePluginAlgorithmOne.js delete mode 100644 plugins/com.shukriadams.micVolume/src/android/MicVolumePluginMessy.java delete mode 100644 plugins/com.shukriadams.micVolume/src/android/MicVolumePluginWorking.java create mode 100644 www/resources/js/motionOldAlgo.js diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock index 0678f258dad9b4f2ede77f83a7bbb74a2fcd1366..72b79e893dfd54acd39a9b654eadcd7e344e045d 100644 GIT binary patch literal 17 VcmZQBkvw$J`yw9~0~lnV1pq8;1b_el literal 17 VcmZQBkvw$J`yw9~0~m;f0st#Y1G4}C diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin index ab7d8378c38fd956273023e209fdd50dcd32d740..19847f3cdf7f88fa2106e09df609b4a62f7c42c6 100644 GIT binary patch literal 360175 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�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

      Tw_FlfEdtS(s%!o&0>spR67~D8!^b!MMS448Mnv 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 delta 12374 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 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin index 05b2a9e71e7a5fc43814411f376d67694ba70559..99ec8ece4275c2c7822626f8bd9ed25059515237 100644 GIT binary patch literal 4847929 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

      X%e&q`Ud4CHh47QbTLgoi@^!`UFmf^~mE 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

      yG@v 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 z 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 delta 3565 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 - + diff --git a/platforms/android/android.json b/platforms/android/android.json index b5f44e5..d24277a 100644 --- a/platforms/android/android.json +++ b/platforms/android/android.json @@ -16,10 +16,6 @@ "xml": "", "count": 1 }, - { - "xml": "", - "count": 1 - }, { "xml": "", "count": 1 @@ -47,6 +43,10 @@ { "xml": "", "count": 1 + }, + { + "xml": "", + "count": 1 } ] } @@ -61,15 +61,15 @@ ], "/manifest": [ { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 }, { - "xml": "", + "xml": "", "count": 1 } ], @@ -118,9 +118,6 @@ "com.lampa.startapp": { "PACKAGE_NAME": "com.adamdon.sw" }, - "com.shukriadams.micVolume": { - "PACKAGE_NAME": "com.adamdon.sw" - }, "cordova-plugin-app-event": { "PACKAGE_NAME": "com.adamdon.sw" }, @@ -150,6 +147,9 @@ }, "cordova-plugin-test-framework": { "PACKAGE_NAME": "com.adamdon.sw" + }, + "com.shukriadams.micVolume": { + "PACKAGE_NAME": "com.adamdon.sw" } }, "dependent_plugins": {}, @@ -168,13 +168,6 @@ "navigator.startApp" ] }, - { - "file": "plugins/com.shukriadams.micVolume/www/micVolume.js", - "id": "com.shukriadams.micVolume.MicVolume", - "clobbers": [ - "window.micVolume" - ] - }, { "file": "plugins/cordova-plugin-device/www/device.js", "id": "cordova-plugin-device.device", @@ -270,12 +263,18 @@ { "file": "plugins/cordova-plugin-test-framework/www/main.js", "id": "cordova-plugin-test-framework.main" + }, + { + "file": "plugins/com.shukriadams.micVolume/www/micVolume.js", + "id": "com.shukriadams.micVolume.MicVolume", + "clobbers": [ + "window.micVolume" + ] } ], "plugin_metadata": { "at.gofg.sportscomputer.powermanagement": "1.1.0", "com.lampa.startapp": "0.0.5", - "com.shukriadams.micVolume": "0.1.0", "cordova-plugin-app-event": "1.2.0", "cordova-plugin-device": "1.1.1", "cordova-plugin-background-mode": "0.6.5", @@ -285,6 +284,7 @@ "de.appplant.cordova.plugin.local-notification": "0.8.4", "cordova-plugin-device-tests": "1.1.2-dev", "cordova-plugin-device-motion-tests": "1.2.1-dev", - "cordova-plugin-test-framework": "1.1.2-dev" + "cordova-plugin-test-framework": "1.1.2-dev", + "com.shukriadams.micVolume": "0.1.0" } } \ No newline at end of file diff --git a/platforms/android/assets/www/cordova_plugins.js b/platforms/android/assets/www/cordova_plugins.js index 330a466..25c72bb 100644 --- a/platforms/android/assets/www/cordova_plugins.js +++ b/platforms/android/assets/www/cordova_plugins.js @@ -14,13 +14,6 @@ module.exports = [ "navigator.startApp" ] }, - { - "file": "plugins/com.shukriadams.micVolume/www/micVolume.js", - "id": "com.shukriadams.micVolume.MicVolume", - "clobbers": [ - "window.micVolume" - ] - }, { "file": "plugins/cordova-plugin-device/www/device.js", "id": "cordova-plugin-device.device", @@ -116,6 +109,13 @@ module.exports = [ { "file": "plugins/cordova-plugin-test-framework/www/main.js", "id": "cordova-plugin-test-framework.main" + }, + { + "file": "plugins/com.shukriadams.micVolume/www/micVolume.js", + "id": "com.shukriadams.micVolume.MicVolume", + "clobbers": [ + "window.micVolume" + ] } ]; module.exports.metadata = @@ -123,7 +123,6 @@ module.exports.metadata = { "at.gofg.sportscomputer.powermanagement": "1.1.0", "com.lampa.startapp": "0.0.5", - "com.shukriadams.micVolume": "0.1.0", "cordova-plugin-app-event": "1.2.0", "cordova-plugin-device": "1.1.1", "cordova-plugin-background-mode": "0.6.5", @@ -133,7 +132,8 @@ module.exports.metadata = "de.appplant.cordova.plugin.local-notification": "0.8.4", "cordova-plugin-device-tests": "1.1.2-dev", "cordova-plugin-device-motion-tests": "1.2.1-dev", - "cordova-plugin-test-framework": "1.1.2-dev" + "cordova-plugin-test-framework": "1.1.2-dev", + "com.shukriadams.micVolume": "0.1.0" }; // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/.bin/jasmine b/platforms/android/assets/www/node_modules/.bin/jasmine new file mode 120000 index 0000000..d2c1bff --- /dev/null +++ b/platforms/android/assets/www/node_modules/.bin/jasmine @@ -0,0 +1 @@ +../jasmine/bin/jasmine.js \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/.bin/rimraf b/platforms/android/assets/www/node_modules/.bin/rimraf new file mode 120000 index 0000000..4cd49a4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/.bin/rimraf @@ -0,0 +1 @@ +../rimraf/bin.js \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/adm-zip/.idea/scopes/scope_settings.xml b/platforms/android/assets/www/node_modules/adm-zip/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..0d5175c --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/adm-zip/MIT-LICENSE.txt b/platforms/android/assets/www/node_modules/adm-zip/MIT-LICENSE.txt new file mode 100644 index 0000000..14c3ee5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/MIT-LICENSE.txt @@ -0,0 +1,21 @@ +Copyright (c) 2012 Another-D-Mention Software and other contributors, +http://www.another-d-mention.ro/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/adm-zip/README.md b/platforms/android/assets/www/node_modules/adm-zip/README.md new file mode 100644 index 0000000..030fab8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/README.md @@ -0,0 +1,64 @@ +# ADM-ZIP for NodeJS + +ADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). + +# Installation + +With [npm](http://npmjs.org) do: + + $ npm install adm-zip + +## What is it good for? +The library allows you to: + +* decompress zip files directly to disk or in memory buffers +* compress files and store them to disk in .zip format or in compressed buffers +* update content of/add new/delete files from an existing .zip + +# Dependencies +There are no other nodeJS libraries that ADM-ZIP is dependent of + +# Examples + +## Basic usage +```javascript + + var AdmZip = require('adm-zip'); + + // reading archives + var zip = new AdmZip("./my_file.zip"); + var zipEntries = zip.getEntries(); // an array of ZipEntry records + + zipEntries.forEach(function(zipEntry) { + console.log(zipEntry.toString()); // outputs zip entries information + if (zipEntry.entryName == "my_file.txt") { + console.log(zipEntry.data.toString('utf8')); + } + }); + // outputs the content of some_folder/my_file.txt + console.log(zip.readAsText("some_folder/my_file.txt")); + // extracts the specified file to the specified location + zip.extractEntryTo(/*entry name*/"some_folder/my_file.txt", /*target path*/"/home/me/tempfolder", /*maintainEntryPath*/false, /*overwrite*/true); + // extracts everything + zip.extractAllTo(/*target path*/"/home/me/zipcontent/", /*overwrite*/true); + + + // creating archives + var zip = new AdmZip(); + + // add file directly + zip.addFile("test.txt", new Buffer("inner content of the file"), "entry comment goes here"); + // add local file + zip.addLocalFile("/home/me/some_picture.png"); + // get everything as a buffer + var willSendthis = zip.toBuffer(); + // or write everything to disk + zip.writeZip(/*target file name*/"/home/me/files.zip"); + + + // ... more examples in the wiki +``` + +For more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki). + +[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip) diff --git a/platforms/android/assets/www/node_modules/adm-zip/adm-zip.js b/platforms/android/assets/www/node_modules/adm-zip/adm-zip.js new file mode 100644 index 0000000..46595fc --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/adm-zip.js @@ -0,0 +1,404 @@ +var fs = require("fs"), + pth = require("path"); + +fs.existsSync = fs.existsSync || pth.existsSync; + +var ZipEntry = require("./zipEntry"), + ZipFile = require("./zipFile"), + Utils = require("./util"); + +module.exports = function(/*String*/input) { + var _zip = undefined, + _filename = ""; + + if (input && typeof input === "string") { // load zip file + if (fs.existsSync(input)) { + _filename = input; + _zip = new ZipFile(input, Utils.Constants.FILE); + } else { + throw Utils.Errors.INVALID_FILENAME; + } + } else if(input && Buffer.isBuffer(input)) { // load buffer + _zip = new ZipFile(input, Utils.Constants.BUFFER); + } else { // create new zip file + _zip = new ZipFile(null, Utils.Constants.NONE); + } + + function getEntry(/*Object*/entry) { + if (entry && _zip) { + var item; + // If entry was given as a file name + if (typeof entry === "string") + item = _zip.getEntry(entry); + // if entry was given as a ZipEntry object + if (typeof entry === "object" && entry.entryName != undefined && entry.header != undefined) + item = _zip.getEntry(entry.entryName); + + if (item) { + return item; + } + } + return null; + } + + return { + /** + * Extracts the given entry from the archive and returns the content as a Buffer object + * @param entry ZipEntry object or String with the full path of the entry + * + * @return Buffer or Null in case of error + */ + readFile : function(/*Object*/entry) { + var item = getEntry(entry); + return item && item.getData() || null; + }, + + /** + * Asynchronous readFile + * @param entry ZipEntry object or String with the full path of the entry + * @param callback + * + * @return Buffer or Null in case of error + */ + readFileAsync : function(/*Object*/entry, /*Function*/callback) { + var item = getEntry(entry); + if (item) { + item.getDataAsync(callback); + } else { + callback(null,"getEntry failed for:" + entry) + } + }, + + /** + * Extracts the given entry from the archive and returns the content as plain text in the given encoding + * @param entry ZipEntry object or String with the full path of the entry + * @param encoding Optional. If no encoding is specified utf8 is used + * + * @return String + */ + readAsText : function(/*Object*/entry, /*String - Optional*/encoding) { + var item = getEntry(entry); + if (item) { + var data = item.getData(); + if (data && data.length) { + return data.toString(encoding || "utf8"); + } + } + return ""; + }, + + /** + * Asynchronous readAsText + * @param entry ZipEntry object or String with the full path of the entry + * @param callback + * @param encoding Optional. If no encoding is specified utf8 is used + * + * @return String + */ + readAsTextAsync : function(/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) { + var item = getEntry(entry); + if (item) { + item.getDataAsync(function(data) { + if (data && data.length) { + callback(data.toString(encoding || "utf8")); + } else { + callback(""); + } + }) + } else { + callback(""); + } + }, + + /** + * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory + * + * @param entry + */ + deleteFile : function(/*Object*/entry) { // @TODO: test deleteFile + var item = getEntry(entry); + if (item) { + _zip.deleteEntry(item.entryName); + } + }, + + /** + * Adds a comment to the zip. The zip must be rewritten after adding the comment. + * + * @param comment + */ + addZipComment : function(/*String*/comment) { // @TODO: test addZipComment + _zip.comment = comment; + }, + + /** + * Returns the zip comment + * + * @return String + */ + getZipComment : function() { + return _zip.comment || ''; + }, + + /** + * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment + * The comment cannot exceed 65535 characters in length + * + * @param entry + * @param comment + */ + addZipEntryComment : function(/*Object*/entry,/*String*/comment) { + var item = getEntry(entry); + if (item) { + item.comment = comment; + } + }, + + /** + * Returns the comment of the specified entry + * + * @param entry + * @return String + */ + getZipEntryComment : function(/*Object*/entry) { + var item = getEntry(entry); + if (item) { + return item.comment || ''; + } + return '' + }, + + /** + * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content + * + * @param entry + * @param content + */ + updateFile : function(/*Object*/entry, /*Buffer*/content) { + var item = getEntry(entry); + if (item) { + item.setData(content); + } + }, + + /** + * Adds a file from the disk to the archive + * + * @param localPath + */ + addLocalFile : function(/*String*/localPath, /*String*/zipPath) { + if (fs.existsSync(localPath)) { + if(zipPath){ + zipPath=zipPath.split("\\").join("/"); + if(zipPath.charAt(zipPath.length - 1) != "/"){ + zipPath += "/"; + } + }else{ + zipPath=""; + } + var p = localPath.split("\\").join("/").split("/").pop(); + + this.addFile(zipPath+p, fs.readFileSync(localPath), "", 0) + } else { + throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); + } + }, + + /** + * Adds a local directory and all its nested files and directories to the archive + * + * @param localPath + */ + addLocalFolder : function(/*String*/localPath, /*String*/zipPath) { + if(zipPath){ + zipPath=zipPath.split("\\").join("/"); + if(zipPath.charAt(zipPath.length - 1) != "/"){ + zipPath += "/"; + } + }else{ + zipPath=""; + } + localPath = localPath.split("\\").join("/"); //windows fix + if (localPath.charAt(localPath.length - 1) != "/") + localPath += "/"; + + if (fs.existsSync(localPath)) { + + var items = Utils.findFiles(localPath), + self = this; + + if (items.length) { + items.forEach(function(path) { + var p = path.split("\\").join("/").replace(localPath, ""); //windows fix + if (p.charAt(p.length - 1) !== "/") { + self.addFile(zipPath+p, fs.readFileSync(path), "", 0) + } else { + self.addFile(zipPath+p, new Buffer(0), "", 0) + } + }); + } + } else { + throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); + } + }, + + /** + * Allows you to create a entry (file or directory) in the zip file. + * If you want to create a directory the entryName must end in / and a null buffer should be provided. + * Comment and attributes are optional + * + * @param entryName + * @param content + * @param comment + * @param attr + */ + addFile : function(/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) { + var entry = new ZipEntry(); + entry.entryName = entryName; + entry.comment = comment || ""; + entry.attr = attr || 438; //0666; + if (entry.isDirectory && content.length) { + // throw Utils.Errors.DIRECTORY_CONTENT_ERROR; + } + entry.setData(content); + _zip.setEntry(entry); + }, + + /** + * Returns an array of ZipEntry objects representing the files and folders inside the archive + * + * @return Array + */ + getEntries : function() { + if (_zip) { + return _zip.entries; + } else { + return []; + } + }, + + /** + * Returns a ZipEntry object representing the file or folder specified by ``name``. + * + * @param name + * @return ZipEntry + */ + getEntry : function(/*String*/name) { + return getEntry(name); + }, + + /** + * Extracts the given entry to the given targetPath + * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted + * + * @param entry ZipEntry object or String with the full path of the entry + * @param targetPath Target folder where to write the file + * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder + * will be created in targetPath as well. Default is TRUE + * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. + * Default is FALSE + * + * @return Boolean + */ + extractEntryTo : function(/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) { + overwrite = overwrite || false; + maintainEntryPath = typeof maintainEntryPath == "undefined" ? true : maintainEntryPath; + + var item = getEntry(entry); + if (!item) { + throw Utils.Errors.NO_ENTRY; + } + + var target = pth.resolve(targetPath, maintainEntryPath ? item.entryName : pth.basename(item.entryName)); + + if (item.isDirectory) { + target = pth.resolve(target, ".."); + var children = _zip.getEntryChildren(item); + children.forEach(function(child) { + if (child.isDirectory) return; + var content = child.getData(); + if (!content) { + throw Utils.Errors.CANT_EXTRACT_FILE; + } + Utils.writeFileTo(pth.resolve(targetPath, maintainEntryPath ? child.entryName : child.entryName.substr(item.entryName.length)), content, overwrite); + }); + return true; + } + + var content = item.getData(); + if (!content) throw Utils.Errors.CANT_EXTRACT_FILE; + + if (fs.existsSync(targetPath) && !overwrite) { + throw Utils.Errors.CANT_OVERRIDE; + } + Utils.writeFileTo(target, content, overwrite); + + return true; + }, + + /** + * Extracts the entire archive to the given location + * + * @param targetPath Target location + * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. + * Default is FALSE + */ + extractAllTo : function(/*String*/targetPath, /*Boolean*/overwrite) { + overwrite = overwrite || false; + if (!_zip) { + throw Utils.Errors.NO_ZIP; + } + + _zip.entries.forEach(function(entry) { + if (entry.isDirectory) { + Utils.makeDir(pth.resolve(targetPath, entry.entryName.toString())); + return; + } + var content = entry.getData(); + if (!content) { + throw Utils.Errors.CANT_EXTRACT_FILE + "2"; + } + Utils.writeFileTo(pth.resolve(targetPath, entry.entryName.toString()), content, overwrite); + }) + }, + + /** + * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip + * + * @param targetFileName + * @param callback + */ + writeZip : function(/*String*/targetFileName, /*Function*/callback) { + if (arguments.length == 1) { + if (typeof targetFileName == "function") { + callback = targetFileName; + targetFileName = ""; + } + } + + if (!targetFileName && _filename) { + targetFileName = _filename; + } + if (!targetFileName) return; + + var zipData = _zip.compressToBuffer(); + if (zipData) { + Utils.writeFileTo(targetFileName, zipData, true); + } + }, + + /** + * Returns the content of the entire zip file as a Buffer object + * + * @return Buffer + */ + toBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { + this.valueOf = 2; + if (typeof onSuccess == "function") { + _zip.toAsyncBuffer(onSuccess,onFail,onItemStart,onItemEnd); + return null; + } + return _zip.compressToBuffer() + } + } +}; diff --git a/platforms/android/assets/www/node_modules/adm-zip/headers/entryHeader.js b/platforms/android/assets/www/node_modules/adm-zip/headers/entryHeader.js new file mode 100644 index 0000000..a29c70f --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/headers/entryHeader.js @@ -0,0 +1,261 @@ +var Utils = require("../util"), + Constants = Utils.Constants; + +/* The central directory file header */ +module.exports = function () { + var _verMade = 0x0A, + _version = 0x0A, + _flags = 0, + _method = 0, + _time = 0, + _crc = 0, + _compressedSize = 0, + _size = 0, + _fnameLen = 0, + _extraLen = 0, + + _comLen = 0, + _diskStart = 0, + _inattr = 0, + _attr = 0, + _offset = 0; + + var _dataHeader = {}; + + function setTime(val) { + var val = new Date(val); + _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980 + | (val.getMonth() + 1) << 21 // b05-08 month + | val.getDay() << 16 // b00-04 hour + + // 2 bytes time + | val.getHours() << 11 // b11-15 hour + | val.getMinutes() << 5 // b05-10 minute + | val.getSeconds() >> 1; // b00-04 seconds divided by 2 + } + + setTime(+new Date()); + + return { + get made () { return _verMade; }, + set made (val) { _verMade = val; }, + + get version () { return _version; }, + set version (val) { _version = val }, + + get flags () { return _flags }, + set flags (val) { _flags = val; }, + + get method () { return _method; }, + set method (val) { _method = val; }, + + get time () { return new Date( + ((_time >> 25) & 0x7f) + 1980, + ((_time >> 21) & 0x0f) - 1, + (_time >> 16) & 0x1f, + (_time >> 11) & 0x1f, + (_time >> 5) & 0x3f, + (_time & 0x1f) << 1 + ); + }, + set time (val) { + setTime(val); + }, + + get crc () { return _crc; }, + set crc (val) { _crc = val; }, + + get compressedSize () { return _compressedSize; }, + set compressedSize (val) { _compressedSize = val; }, + + get size () { return _size; }, + set size (val) { _size = val; }, + + get fileNameLength () { return _fnameLen; }, + set fileNameLength (val) { _fnameLen = val; }, + + get extraLength () { return _extraLen }, + set extraLength (val) { _extraLen = val; }, + + get commentLength () { return _comLen }, + set commentLength (val) { _comLen = val }, + + get diskNumStart () { return _diskStart }, + set diskNumStart (val) { _diskStart = val }, + + get inAttr () { return _inattr }, + set inAttr (val) { _inattr = val }, + + get attr () { return _attr }, + set attr (val) { _attr = val }, + + get offset () { return _offset }, + set offset (val) { _offset = val }, + + get encripted () { return (_flags & 1) == 1 }, + + get entryHeaderSize () { + return Constants.CENHDR + _fnameLen + _extraLen + _comLen; + }, + + get realDataOffset () { + return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen; + }, + + get dataHeader () { + return _dataHeader; + }, + + loadDataHeaderFromBinary : function(/*Buffer*/input) { + var data = input.slice(_offset, _offset + Constants.LOCHDR); + // 30 bytes and should start with "PK\003\004" + if (data.readUInt32LE(0) != Constants.LOCSIG) { + throw Utils.Errors.INVALID_LOC; + } + _dataHeader = { + // version needed to extract + version : data.readUInt16LE(Constants.LOCVER), + // general purpose bit flag + flags : data.readUInt16LE(Constants.LOCFLG), + // compression method + method : data.readUInt16LE(Constants.LOCHOW), + // modification time (2 bytes time, 2 bytes date) + time : data.readUInt32LE(Constants.LOCTIM), + // uncompressed file crc-32 value + crc : data.readUInt32LE(Constants.LOCCRC), + // compressed size + compressedSize : data.readUInt32LE(Constants.LOCSIZ), + // uncompressed size + size : data.readUInt32LE(Constants.LOCLEN), + // filename length + fnameLen : data.readUInt16LE(Constants.LOCNAM), + // extra field length + extraLen : data.readUInt16LE(Constants.LOCEXT) + } + }, + + loadFromBinary : function(/*Buffer*/data) { + // data should be 46 bytes and start with "PK 01 02" + if (data.length != Constants.CENHDR || data.readUInt32LE(0) != Constants.CENSIG) { + throw Utils.Errors.INVALID_CEN; + } + // version made by + _verMade = data.readUInt16LE(Constants.CENVEM); + // version needed to extract + _version = data.readUInt16LE(Constants.CENVER); + // encrypt, decrypt flags + _flags = data.readUInt16LE(Constants.CENFLG); + // compression method + _method = data.readUInt16LE(Constants.CENHOW); + // modification time (2 bytes time, 2 bytes date) + _time = data.readUInt32LE(Constants.CENTIM); + // uncompressed file crc-32 value + _crc = data.readUInt32LE(Constants.CENCRC); + // compressed size + _compressedSize = data.readUInt32LE(Constants.CENSIZ); + // uncompressed size + _size = data.readUInt32LE(Constants.CENLEN); + // filename length + _fnameLen = data.readUInt16LE(Constants.CENNAM); + // extra field length + _extraLen = data.readUInt16LE(Constants.CENEXT); + // file comment length + _comLen = data.readUInt16LE(Constants.CENCOM); + // volume number start + _diskStart = data.readUInt16LE(Constants.CENDSK); + // internal file attributes + _inattr = data.readUInt16LE(Constants.CENATT); + // external file attributes + _attr = data.readUInt32LE(Constants.CENATX); + // LOC header offset + _offset = data.readUInt32LE(Constants.CENOFF); + }, + + dataHeaderToBinary : function() { + // LOC header size (30 bytes) + var data = new Buffer(Constants.LOCHDR); + // "PK\003\004" + data.writeUInt32LE(Constants.LOCSIG, 0); + // version needed to extract + data.writeUInt16LE(_version, Constants.LOCVER); + // general purpose bit flag + data.writeUInt16LE(_flags, Constants.LOCFLG); + // compression method + data.writeUInt16LE(_method, Constants.LOCHOW); + // modification time (2 bytes time, 2 bytes date) + data.writeUInt32LE(_time, Constants.LOCTIM); + // uncompressed file crc-32 value + data.writeUInt32LE(_crc, Constants.LOCCRC); + // compressed size + data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); + // uncompressed size + data.writeUInt32LE(_size, Constants.LOCLEN); + // filename length + data.writeUInt16LE(_fnameLen, Constants.LOCNAM); + // extra field length + data.writeUInt16LE(_extraLen, Constants.LOCEXT); + return data; + }, + + entryHeaderToBinary : function() { + // CEN header size (46 bytes) + var data = new Buffer(Constants.CENHDR + _fnameLen + _extraLen + _comLen); + // "PK\001\002" + data.writeUInt32LE(Constants.CENSIG, 0); + // version made by + data.writeUInt16LE(_verMade, Constants.CENVEM); + // version needed to extract + data.writeUInt16LE(_version, Constants.CENVER); + // encrypt, decrypt flags + data.writeUInt16LE(_flags, Constants.CENFLG); + // compression method + data.writeUInt16LE(_method, Constants.CENHOW); + // modification time (2 bytes time, 2 bytes date) + data.writeUInt32LE(_time, Constants.CENTIM); + // uncompressed file crc-32 value + data.writeInt32LE(_crc, Constants.CENCRC, true); + // compressed size + data.writeUInt32LE(_compressedSize, Constants.CENSIZ); + // uncompressed size + data.writeUInt32LE(_size, Constants.CENLEN); + // filename length + data.writeUInt16LE(_fnameLen, Constants.CENNAM); + // extra field length + data.writeUInt16LE(_extraLen, Constants.CENEXT); + // file comment length + data.writeUInt16LE(_comLen, Constants.CENCOM); + // volume number start + data.writeUInt16LE(_diskStart, Constants.CENDSK); + // internal file attributes + data.writeUInt16LE(_inattr, Constants.CENATT); + // external file attributes + data.writeUInt32LE(_attr, Constants.CENATX); + // LOC header offset + data.writeUInt32LE(_offset, Constants.CENOFF); + // fill all with + data.fill(0x00, Constants.CENHDR); + return data; + }, + + toString : function() { + return '{\n' + + '\t"made" : ' + _verMade + ",\n" + + '\t"version" : ' + _version + ",\n" + + '\t"flags" : ' + _flags + ",\n" + + '\t"method" : ' + Utils.methodToString(_method) + ",\n" + + '\t"time" : ' + _time + ",\n" + + '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + + '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + + '\t"size" : ' + _size + " bytes,\n" + + '\t"fileNameLength" : ' + _fnameLen + ",\n" + + '\t"extraLength" : ' + _extraLen + " bytes,\n" + + '\t"commentLength" : ' + _comLen + " bytes,\n" + + '\t"diskNumStart" : ' + _diskStart + ",\n" + + '\t"inAttr" : ' + _inattr + ",\n" + + '\t"attr" : ' + _attr + ",\n" + + '\t"offset" : ' + _offset + ",\n" + + '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + + '}'; + } + } +}; diff --git a/platforms/android/assets/www/node_modules/adm-zip/headers/index.js b/platforms/android/assets/www/node_modules/adm-zip/headers/index.js new file mode 100644 index 0000000..b8c67b9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/headers/index.js @@ -0,0 +1,2 @@ +exports.EntryHeader = require("./entryHeader"); +exports.MainHeader = require("./mainHeader"); diff --git a/platforms/android/assets/www/node_modules/adm-zip/headers/mainHeader.js b/platforms/android/assets/www/node_modules/adm-zip/headers/mainHeader.js new file mode 100644 index 0000000..002bc8a --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/headers/mainHeader.js @@ -0,0 +1,80 @@ +var Utils = require("../util"), + Constants = Utils.Constants; + +/* The entries in the end of central directory */ +module.exports = function () { + var _volumeEntries = 0, + _totalEntries = 0, + _size = 0, + _offset = 0, + _commentLength = 0; + + return { + get diskEntries () { return _volumeEntries }, + set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; }, + + get totalEntries () { return _totalEntries }, + set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; }, + + get size () { return _size }, + set size (/*Number*/val) { _size = val; }, + + get offset () { return _offset }, + set offset (/*Number*/val) { _offset = val; }, + + get commentLength () { return _commentLength }, + set commentLength (/*Number*/val) { _commentLength = val; }, + + get mainHeaderSize () { + return Constants.ENDHDR + _commentLength; + }, + + loadFromBinary : function(/*Buffer*/data) { + // data should be 22 bytes and start with "PK 05 06" + if (data.length != Constants.ENDHDR || data.readUInt32LE(0) != Constants.ENDSIG) + throw Utils.Errors.INVALID_END; + + // number of entries on this volume + _volumeEntries = data.readUInt16LE(Constants.ENDSUB); + // total number of entries + _totalEntries = data.readUInt16LE(Constants.ENDTOT); + // central directory size in bytes + _size = data.readUInt32LE(Constants.ENDSIZ); + // offset of first CEN header + _offset = data.readUInt32LE(Constants.ENDOFF); + // zip file comment length + _commentLength = data.readUInt16LE(Constants.ENDCOM); + }, + + toBinary : function() { + var b = new Buffer(Constants.ENDHDR + _commentLength); + // "PK 05 06" signature + b.writeUInt32LE(Constants.ENDSIG, 0); + b.writeUInt32LE(0, 4); + // number of entries on this volume + b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); + // total number of entries + b.writeUInt16LE(_totalEntries, Constants.ENDTOT); + // central directory size in bytes + b.writeUInt32LE(_size, Constants.ENDSIZ); + // offset of first CEN header + b.writeUInt32LE(_offset, Constants.ENDOFF); + // zip file comment length + b.writeUInt16LE(_commentLength, Constants.ENDCOM); + // fill comment memory with spaces so no garbage is left there + b.fill(" ", Constants.ENDHDR); + + return b; + }, + + toString : function() { + return '{\n' + + '\t"diskEntries" : ' + _volumeEntries + ",\n" + + '\t"totalEntries" : ' + _totalEntries + ",\n" + + '\t"size" : ' + _size + " bytes,\n" + + '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + + '\t"commentLength" : 0x' + _commentLength + "\n" + + '}'; + } + } +}; \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/adm-zip/methods/deflater.js b/platforms/android/assets/www/node_modules/adm-zip/methods/deflater.js new file mode 100644 index 0000000..3267943 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/methods/deflater.js @@ -0,0 +1,1578 @@ +/* + * $Id: rawdeflate.js,v 0.5 2013/04/09 14:25:38 dankogai Exp dankogai $ + * + * GNU General Public License, version 2 (GPL-2.0) + * http://opensource.org/licenses/GPL-2.0 + * Original: + * http://www.onicos.com/staff/iz/amuse/javascript/expert/deflate.txt + */ +function JSDeflater(/*inbuff*/inbuf) { + + /* Copyright (C) 1999 Masanao Izumo + * Version: 1.0.1 + * LastModified: Dec 25 1999 + */ + + var WSIZE = 32768, // Sliding Window size + zip_STORED_BLOCK = 0, + zip_STATIC_TREES = 1, + zip_DYN_TREES = 2, + zip_DEFAULT_LEVEL = 6, + zip_FULL_SEARCH = true, + zip_INBUFSIZ = 32768, // Input buffer size + zip_INBUF_EXTRA = 64, // Extra buffer + zip_OUTBUFSIZ = 1024 * 8, + zip_window_size = 2 * WSIZE, + MIN_MATCH = 3, + MAX_MATCH = 258, + zip_BITS = 16, + LIT_BUFSIZE = 0x2000, + zip_HASH_BITS = 13, + zip_DIST_BUFSIZE = LIT_BUFSIZE, + zip_HASH_SIZE = 1 << zip_HASH_BITS, + zip_HASH_MASK = zip_HASH_SIZE - 1, + zip_WMASK = WSIZE - 1, + zip_NIL = 0, // Tail of hash chains + zip_TOO_FAR = 4096, + zip_MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1, + zip_MAX_DIST = WSIZE - zip_MIN_LOOKAHEAD, + zip_SMALLEST = 1, + zip_MAX_BITS = 15, + zip_MAX_BL_BITS = 7, + zip_LENGTH_CODES = 29, + zip_LITERALS = 256, + zip_END_BLOCK = 256, + zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES, + zip_D_CODES = 30, + zip_BL_CODES = 19, + zip_REP_3_6 = 16, + zip_REPZ_3_10 = 17, + zip_REPZ_11_138 = 18, + zip_HEAP_SIZE = 2 * zip_L_CODES + 1, + zip_H_SHIFT = parseInt((zip_HASH_BITS + MIN_MATCH - 1) / MIN_MATCH); + + var zip_free_queue, zip_qhead, zip_qtail, zip_initflag, zip_outbuf = null, zip_outcnt, zip_outoff, zip_complete, + zip_window, zip_d_buf, zip_l_buf, zip_prev, zip_bi_buf, zip_bi_valid, zip_block_start, zip_ins_h, zip_hash_head, + zip_prev_match, zip_match_available, zip_match_length, zip_prev_length, zip_strstart, zip_match_start, zip_eofile, + zip_lookahead, zip_max_chain_length, zip_max_lazy_match, zip_compr_level, zip_good_match, zip_nice_match, + zip_dyn_ltree, zip_dyn_dtree, zip_static_ltree, zip_static_dtree, zip_bl_tree, zip_l_desc, zip_d_desc, zip_bl_desc, + zip_bl_count, zip_heap, zip_heap_len, zip_heap_max, zip_depth, zip_length_code, zip_dist_code, zip_base_length, + zip_base_dist, zip_flag_buf, zip_last_lit, zip_last_dist, zip_last_flags, zip_flags, zip_flag_bit, zip_opt_len, + zip_static_len, zip_deflate_data, zip_deflate_pos; + + var zip_DeflateCT = function () { + this.fc = 0; // frequency count or bit string + this.dl = 0; // father node in Huffman tree or length of bit string + }; + + var zip_DeflateTreeDesc = function () { + this.dyn_tree = null; // the dynamic tree + this.static_tree = null; // corresponding static tree or NULL + this.extra_bits = null; // extra bits for each code or NULL + this.extra_base = 0; // base index for extra_bits + this.elems = 0; // max number of elements in the tree + this.max_length = 0; // max bit length for the codes + this.max_code = 0; // largest code with non zero frequency + }; + + /* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ + var zip_DeflateConfiguration = function (a, b, c, d) { + this.good_length = a; // reduce lazy search above this match length + this.max_lazy = b; // do not perform lazy search above this match length + this.nice_length = c; // quit search above this match length + this.max_chain = d; + }; + + var zip_DeflateBuffer = function () { + this.next = null; + this.len = 0; + this.ptr = new Array(zip_OUTBUFSIZ); + this.off = 0; + }; + + /* constant tables */ + var zip_extra_lbits = new Array( + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0); + var zip_extra_dbits = new Array( + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13); + var zip_extra_blbits = new Array( + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7); + var zip_bl_order = new Array( + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); + var zip_configuration_table = new Array( + new zip_DeflateConfiguration(0, 0, 0, 0), + new zip_DeflateConfiguration(4, 4, 8, 4), + new zip_DeflateConfiguration(4, 5, 16, 8), + new zip_DeflateConfiguration(4, 6, 32, 32), + new zip_DeflateConfiguration(4, 4, 16, 16), + new zip_DeflateConfiguration(8, 16, 32, 32), + new zip_DeflateConfiguration(8, 16, 128, 128), + new zip_DeflateConfiguration(8, 32, 128, 256), + new zip_DeflateConfiguration(32, 128, 258, 1024), + new zip_DeflateConfiguration(32, 258, 258, 4096)); + + + /* routines (deflate) */ + + var zip_deflate_start = function (level) { + var i; + + if (!level) + level = zip_DEFAULT_LEVEL; + else if (level < 1) + level = 1; + else if (level > 9) + level = 9; + + zip_compr_level = level; + zip_initflag = false; + zip_eofile = false; + if (zip_outbuf != null) + return; + + zip_free_queue = zip_qhead = zip_qtail = null; + zip_outbuf = new Array(zip_OUTBUFSIZ); + zip_window = new Array(zip_window_size); + zip_d_buf = new Array(zip_DIST_BUFSIZE); + zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA); + zip_prev = new Array(1 << zip_BITS); + zip_dyn_ltree = new Array(zip_HEAP_SIZE); + for (i = 0; i < zip_HEAP_SIZE; i++) zip_dyn_ltree[i] = new zip_DeflateCT(); + zip_dyn_dtree = new Array(2 * zip_D_CODES + 1); + for (i = 0; i < 2 * zip_D_CODES + 1; i++) zip_dyn_dtree[i] = new zip_DeflateCT(); + zip_static_ltree = new Array(zip_L_CODES + 2); + for (i = 0; i < zip_L_CODES + 2; i++) zip_static_ltree[i] = new zip_DeflateCT(); + zip_static_dtree = new Array(zip_D_CODES); + for (i = 0; i < zip_D_CODES; i++) zip_static_dtree[i] = new zip_DeflateCT(); + zip_bl_tree = new Array(2 * zip_BL_CODES + 1); + for (i = 0; i < 2 * zip_BL_CODES + 1; i++) zip_bl_tree[i] = new zip_DeflateCT(); + zip_l_desc = new zip_DeflateTreeDesc(); + zip_d_desc = new zip_DeflateTreeDesc(); + zip_bl_desc = new zip_DeflateTreeDesc(); + zip_bl_count = new Array(zip_MAX_BITS + 1); + zip_heap = new Array(2 * zip_L_CODES + 1); + zip_depth = new Array(2 * zip_L_CODES + 1); + zip_length_code = new Array(MAX_MATCH - MIN_MATCH + 1); + zip_dist_code = new Array(512); + zip_base_length = new Array(zip_LENGTH_CODES); + zip_base_dist = new Array(zip_D_CODES); + zip_flag_buf = new Array(parseInt(LIT_BUFSIZE / 8)); + }; + + var zip_deflate_end = function () { + zip_free_queue = zip_qhead = zip_qtail = null; + zip_outbuf = null; + zip_window = null; + zip_d_buf = null; + zip_l_buf = null; + zip_prev = null; + zip_dyn_ltree = null; + zip_dyn_dtree = null; + zip_static_ltree = null; + zip_static_dtree = null; + zip_bl_tree = null; + zip_l_desc = null; + zip_d_desc = null; + zip_bl_desc = null; + zip_bl_count = null; + zip_heap = null; + zip_depth = null; + zip_length_code = null; + zip_dist_code = null; + zip_base_length = null; + zip_base_dist = null; + zip_flag_buf = null; + }; + + var zip_reuse_queue = function (p) { + p.next = zip_free_queue; + zip_free_queue = p; + }; + + var zip_new_queue = function () { + var p; + + if (zip_free_queue != null) { + p = zip_free_queue; + zip_free_queue = zip_free_queue.next; + } + else + p = new zip_DeflateBuffer(); + p.next = null; + p.len = p.off = 0; + + return p; + }; + + var zip_head1 = function (i) { + return zip_prev[WSIZE + i]; + }; + + var zip_head2 = function (i, val) { + return zip_prev[WSIZE + i] = val; + }; + + /* put_byte is used for the compressed output, put_ubyte for the + * uncompressed output. However unlzw() uses window for its + * suffix table instead of its output buffer, so it does not use put_ubyte + * (to be cleaned up). + */ + var zip_put_byte = function (c) { + zip_outbuf[zip_outoff + zip_outcnt++] = c; + if (zip_outoff + zip_outcnt == zip_OUTBUFSIZ) + zip_qoutbuf(); + }; + + /* Output a 16 bit value, lsb first */ + var zip_put_short = function (w) { + w &= 0xffff; + if (zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) { + zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff); + zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8); + } else { + zip_put_byte(w & 0xff); + zip_put_byte(w >>> 8); + } + }; + + /* ========================================================================== + * Insert string s in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of s are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ + var zip_INSERT_STRING = function () { + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) + ^ (zip_window[zip_strstart + MIN_MATCH - 1] & 0xff)) + & zip_HASH_MASK; + zip_hash_head = zip_head1(zip_ins_h); + zip_prev[zip_strstart & zip_WMASK] = zip_hash_head; + zip_head2(zip_ins_h, zip_strstart); + }; + + /* Send a code of the given tree. c and tree must not have side effects */ + var zip_SEND_CODE = function (c, tree) { + zip_send_bits(tree[c].fc, tree[c].dl); + }; + + /* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. dist_code[256] and dist_code[257] are never + * used. + */ + var zip_D_CODE = function (dist) { + return (dist < 256 ? zip_dist_code[dist] + : zip_dist_code[256 + (dist >> 7)]) & 0xff; + }; + + /* ========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ + var zip_SMALLER = function (tree, n, m) { + return tree[n].fc < tree[m].fc || + (tree[n].fc == tree[m].fc && zip_depth[n] <= zip_depth[m]); + }; + + /* ========================================================================== + * read string data + */ + var zip_read_buff = function (buff, offset, n) { + var i; + for (i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++) + buff[offset + i] = + zip_deflate_data[zip_deflate_pos++] & 0xff; + return i; + }; + + /* ========================================================================== + * Initialize the "longest match" routines for a new file + */ + var zip_lm_init = function () { + var j; + + /* Initialize the hash table. */ + for (j = 0; j < zip_HASH_SIZE; j++) + zip_prev[WSIZE + j] = 0; + zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy; + zip_good_match = zip_configuration_table[zip_compr_level].good_length; + if (!zip_FULL_SEARCH) + zip_nice_match = zip_configuration_table[zip_compr_level].nice_length; + zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain; + + zip_strstart = 0; + zip_block_start = 0; + + zip_lookahead = zip_read_buff(zip_window, 0, 2 * WSIZE); + if (zip_lookahead <= 0) { + zip_eofile = true; + zip_lookahead = 0; + return; + } + zip_eofile = false; + /* Make sure that we always have enough lookahead. This is important + * if input comes from a device such as a tty. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + + /* If lookahead < MIN_MATCH, ins_h is garbage, but this is + * not important since only literal bytes will be emitted. + */ + zip_ins_h = 0; + for (j = 0; j < MIN_MATCH - 1; j++) { + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK; + } + }; + + /* ========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + */ + var zip_longest_match = function (cur_match) { + var chain_length = zip_max_chain_length; // max hash chain length + var scanp = zip_strstart; // current string + var matchp; // matched string + var len; // length of current match + var best_len = zip_prev_length; // best match length so far + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL); + + var strendp = zip_strstart + MAX_MATCH; + var scan_end1 = zip_window[scanp + best_len - 1]; + var scan_end = zip_window[scanp + best_len]; + + /* Do not waste too much time if we already have a good match: */ + if (zip_prev_length >= zip_good_match) + chain_length >>= 2; + + do { + matchp = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2: + */ + if (zip_window[matchp + best_len] != scan_end || + zip_window[matchp + best_len - 1] != scan_end1 || + zip_window[matchp] != zip_window[scanp] || + zip_window[++matchp] != zip_window[scanp + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scanp += 2; + matchp++; + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + scanp < strendp); + + len = MAX_MATCH - (strendp - scanp); + scanp = strendp - MAX_MATCH; + + if (len > best_len) { + zip_match_start = cur_match; + best_len = len; + if (zip_FULL_SEARCH) { + if (len >= MAX_MATCH) break; + } else { + if (len >= zip_nice_match) break; + } + + scan_end1 = zip_window[scanp + best_len - 1]; + scan_end = zip_window[scanp + best_len]; + } + } while ((cur_match = zip_prev[cur_match & zip_WMASK]) > limit + && --chain_length != 0); + + return best_len; + }; + + /* ========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead, and sets eofile if end of input file. + * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0 + * OUT assertions: at least one byte has been read, or eofile is set; + * file reads are performed for at least two bytes (required for the + * translate_eol option). + */ + var zip_fill_window = function () { + var n, m; + + // Amount of free space at the end of the window. + var more = zip_window_size - zip_lookahead - zip_strstart; + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (more == -1) { + /* Very unlikely, but possible on 16 bit machine if strstart == 0 + * and lookahead == 1 (input done one byte at time) + */ + more--; + } else if (zip_strstart >= WSIZE + zip_MAX_DIST) { + /* By the IN assertion, the window is not empty so we can't confuse + * more == 0 with more == 64K on a 16 bit machine. + */ + for (n = 0; n < WSIZE; n++) + zip_window[n] = zip_window[n + WSIZE]; + + zip_match_start -= WSIZE; + zip_strstart -= WSIZE; + /* we now have strstart >= MAX_DIST: */ + zip_block_start -= WSIZE; + + for (n = 0; n < zip_HASH_SIZE; n++) { + m = zip_head1(n); + zip_head2(n, m >= WSIZE ? m - WSIZE : zip_NIL); + } + for (n = 0; n < WSIZE; n++) { + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + m = zip_prev[n]; + zip_prev[n] = (m >= WSIZE ? m - WSIZE : zip_NIL); + } + more += WSIZE; + } + // At this point, more >= 2 + if (!zip_eofile) { + n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more); + if (n <= 0) + zip_eofile = true; + else + zip_lookahead += n; + } + }; + + /* ========================================================================== + * Processes a new input file and return its compressed length. This + * function does not perform lazy evaluationof matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ + var zip_deflate_fast = function () { + while (zip_lookahead != 0 && zip_qhead == null) { + var flush; // set if current block must be flushed + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + zip_INSERT_STRING(); + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (zip_hash_head != zip_NIL && + zip_strstart - zip_hash_head <= zip_MAX_DIST) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + zip_match_length = zip_longest_match(zip_hash_head); + /* longest_match() sets match_start */ + if (zip_match_length > zip_lookahead) + zip_match_length = zip_lookahead; + } + if (zip_match_length >= MIN_MATCH) { + flush = zip_ct_tally(zip_strstart - zip_match_start, + zip_match_length - MIN_MATCH); + zip_lookahead -= zip_match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (zip_match_length <= zip_max_lazy_match) { + zip_match_length--; // string at strstart already in hash table + do { + zip_strstart++; + zip_INSERT_STRING(); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH + * these bytes are garbage, but it does not matter since + * the next lookahead bytes will be emitted as literals. + */ + } while (--zip_match_length != 0); + zip_strstart++; + } else { + zip_strstart += zip_match_length; + zip_match_length = 0; + zip_ins_h = zip_window[zip_strstart] & 0xff; + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[zip_strstart + 1] & 0xff)) & zip_HASH_MASK; + } + } else { + /* No match, output a literal byte */ + flush = zip_ct_tally(0, zip_window[zip_strstart] & 0xff); + zip_lookahead--; + zip_strstart++; + } + if (flush) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + } + }; + + var zip_deflate_better = function () { + /* Process the input block. */ + while (zip_lookahead != 0 && zip_qhead == null) { + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + zip_INSERT_STRING(); + + /* Find the longest match, discarding those <= prev_length. + */ + zip_prev_length = zip_match_length; + zip_prev_match = zip_match_start; + zip_match_length = MIN_MATCH - 1; + + if (zip_hash_head != zip_NIL && + zip_prev_length < zip_max_lazy_match && + zip_strstart - zip_hash_head <= zip_MAX_DIST) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + zip_match_length = zip_longest_match(zip_hash_head); + /* longest_match() sets match_start */ + if (zip_match_length > zip_lookahead) + zip_match_length = zip_lookahead; + + /* Ignore a length 3 match if it is too distant: */ + if (zip_match_length == MIN_MATCH && + zip_strstart - zip_match_start > zip_TOO_FAR) { + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + zip_match_length--; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (zip_prev_length >= MIN_MATCH && + zip_match_length <= zip_prev_length) { + var flush; // set if current block must be flushed + flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match, + zip_prev_length - MIN_MATCH); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. + */ + zip_lookahead -= zip_prev_length - 1; + zip_prev_length -= 2; + do { + zip_strstart++; + zip_INSERT_STRING(); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH + * these bytes are garbage, but it does not matter since the + * next lookahead bytes will always be emitted as literals. + */ + } while (--zip_prev_length != 0); + zip_match_available = 0; + zip_match_length = MIN_MATCH - 1; + zip_strstart++; + if (flush) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + } else if (zip_match_available != 0) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + if (zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + zip_strstart++; + zip_lookahead--; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + zip_match_available = 1; + zip_strstart++; + zip_lookahead--; + } + + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + } + }; + + var zip_init_deflate = function () { + if (zip_eofile) + return; + zip_bi_buf = 0; + zip_bi_valid = 0; + zip_ct_init(); + zip_lm_init(); + + zip_qhead = null; + zip_outcnt = 0; + zip_outoff = 0; + zip_match_available = 0; + + if (zip_compr_level <= 3) { + zip_prev_length = MIN_MATCH - 1; + zip_match_length = 0; + } + else { + zip_match_length = MIN_MATCH - 1; + zip_match_available = 0; + zip_match_available = 0; + } + + zip_complete = false; + }; + + /* ========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ + var zip_deflate_internal = function (buff, off, buff_size) { + var n; + + if (!zip_initflag) { + zip_init_deflate(); + zip_initflag = true; + if (zip_lookahead == 0) { // empty + zip_complete = true; + return 0; + } + } + + if ((n = zip_qcopy(buff, off, buff_size)) == buff_size) + return buff_size; + + if (zip_complete) + return n; + + if (zip_compr_level <= 3) // optimized for speed + zip_deflate_fast(); + else + zip_deflate_better(); + if (zip_lookahead == 0) { + if (zip_match_available != 0) + zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff); + zip_flush_block(1); + zip_complete = true; + } + return n + zip_qcopy(buff, n + off, buff_size - n); + }; + + var zip_qcopy = function (buff, off, buff_size) { + var n, i, j; + + n = 0; + while (zip_qhead != null && n < buff_size) { + i = buff_size - n; + if (i > zip_qhead.len) + i = zip_qhead.len; + for (j = 0; j < i; j++) + buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j]; + + zip_qhead.off += i; + zip_qhead.len -= i; + n += i; + if (zip_qhead.len == 0) { + var p; + p = zip_qhead; + zip_qhead = zip_qhead.next; + zip_reuse_queue(p); + } + } + + if (n == buff_size) + return n; + + if (zip_outoff < zip_outcnt) { + i = buff_size - n; + if (i > zip_outcnt - zip_outoff) + i = zip_outcnt - zip_outoff; + // System.arraycopy(outbuf, outoff, buff, off + n, i); + for (j = 0; j < i; j++) + buff[off + n + j] = zip_outbuf[zip_outoff + j]; + zip_outoff += i; + n += i; + if (zip_outcnt == zip_outoff) + zip_outcnt = zip_outoff = 0; + } + return n; + }; + + /* ========================================================================== + * Allocate the match buffer, initialize the various tables and save the + * location of the internal file attribute (ascii/binary) and method + * (DEFLATE/STORE). + */ + var zip_ct_init = function () { + var n; // iterates over tree elements + var bits; // bit counter + var length; // length value + var code; // code value + var dist; // distance index + + if (zip_static_dtree[0].dl != 0) return; // ct_init already called + + zip_l_desc.dyn_tree = zip_dyn_ltree; + zip_l_desc.static_tree = zip_static_ltree; + zip_l_desc.extra_bits = zip_extra_lbits; + zip_l_desc.extra_base = zip_LITERALS + 1; + zip_l_desc.elems = zip_L_CODES; + zip_l_desc.max_length = zip_MAX_BITS; + zip_l_desc.max_code = 0; + + zip_d_desc.dyn_tree = zip_dyn_dtree; + zip_d_desc.static_tree = zip_static_dtree; + zip_d_desc.extra_bits = zip_extra_dbits; + zip_d_desc.extra_base = 0; + zip_d_desc.elems = zip_D_CODES; + zip_d_desc.max_length = zip_MAX_BITS; + zip_d_desc.max_code = 0; + + zip_bl_desc.dyn_tree = zip_bl_tree; + zip_bl_desc.static_tree = null; + zip_bl_desc.extra_bits = zip_extra_blbits; + zip_bl_desc.extra_base = 0; + zip_bl_desc.elems = zip_BL_CODES; + zip_bl_desc.max_length = zip_MAX_BL_BITS; + zip_bl_desc.max_code = 0; + + // Initialize the mapping length (0..255) -> length code (0..28) + length = 0; + for (code = 0; code < zip_LENGTH_CODES - 1; code++) { + zip_base_length[code] = length; + for (n = 0; n < (1 << zip_extra_lbits[code]); n++) + zip_length_code[length++] = code; + } + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + zip_length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + zip_base_dist[code] = dist; + for (n = 0; n < (1 << zip_extra_dbits[code]); n++) { + zip_dist_code[dist++] = code; + } + } + dist >>= 7; // from now on, all distances are divided by 128 + for (; code < zip_D_CODES; code++) { + zip_base_dist[code] = dist << 7; + for (n = 0; n < (1 << (zip_extra_dbits[code] - 7)); n++) + zip_dist_code[256 + dist++] = code; + } + // Construct the codes of the static literal tree + for (bits = 0; bits <= zip_MAX_BITS; bits++) + zip_bl_count[bits] = 0; + n = 0; + while (n <= 143) { + zip_static_ltree[n++].dl = 8; + zip_bl_count[8]++; + } + while (n <= 255) { + zip_static_ltree[n++].dl = 9; + zip_bl_count[9]++; + } + while (n <= 279) { + zip_static_ltree[n++].dl = 7; + zip_bl_count[7]++; + } + while (n <= 287) { + zip_static_ltree[n++].dl = 8; + zip_bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + zip_gen_codes(zip_static_ltree, zip_L_CODES + 1); + + /* The static distance tree is trivial: */ + for (n = 0; n < zip_D_CODES; n++) { + zip_static_dtree[n].dl = 5; + zip_static_dtree[n].fc = zip_bi_reverse(n, 5); + } + + // Initialize the first block of the first file: + zip_init_block(); + }; + + /* ========================================================================== + * Initialize a new block. + */ + var zip_init_block = function () { + var n; // iterates over tree elements + + // Initialize the trees. + for (n = 0; n < zip_L_CODES; n++) zip_dyn_ltree[n].fc = 0; + for (n = 0; n < zip_D_CODES; n++) zip_dyn_dtree[n].fc = 0; + for (n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0; + + zip_dyn_ltree[zip_END_BLOCK].fc = 1; + zip_opt_len = zip_static_len = 0; + zip_last_lit = zip_last_dist = zip_last_flags = 0; + zip_flags = 0; + zip_flag_bit = 1; + }; + + /* ========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ + var zip_pqdownheap = function (tree, // the tree to restore + k) { // node to move down + var v = zip_heap[k]; + var j = k << 1; // left son of k + + while (j <= zip_heap_len) { + // Set j to the smallest of the two sons: + if (j < zip_heap_len && + zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j])) + j++; + + // Exit if v is smaller than both sons + if (zip_SMALLER(tree, v, zip_heap[j])) + break; + + // Exchange v with the smallest son + zip_heap[k] = zip_heap[j]; + k = j; + + // And continue down the tree, setting j to the left son of k + j <<= 1; + } + zip_heap[k] = v; + }; + + /* ========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ + var zip_gen_bitlen = function (desc) { // the tree descriptor + var tree = desc.dyn_tree; + var extra = desc.extra_bits; + var base = desc.extra_base; + var max_code = desc.max_code; + var max_length = desc.max_length; + var stree = desc.static_tree; + var h; // heap index + var n, m; // iterate over the tree elements + var bits; // bit length + var xbits; // extra bits + var f; // frequency + var overflow = 0; // number of elements with bit length too large + + for (bits = 0; bits <= zip_MAX_BITS; bits++) + zip_bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap + + for (h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) { + n = zip_heap[h]; + bits = tree[tree[n].dl].dl + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n].dl = bits; + // We overwrite tree[n].dl which is no longer needed + + if (n > max_code) + continue; // not a leaf node + + zip_bl_count[bits]++; + xbits = 0; + if (n >= base) + xbits = extra[n - base]; + f = tree[n].fc; + zip_opt_len += f * (bits + xbits); + if (stree != null) + zip_static_len += f * (stree[n].dl + xbits); + } + if (overflow == 0) + return; + + // This happens for example on obj2 and pic of the Calgary corpus + + // Find the first bit length which could increase: + do { + bits = max_length - 1; + while (zip_bl_count[bits] == 0) + bits--; + zip_bl_count[bits]--; // move one leaf down the tree + zip_bl_count[bits + 1] += 2; // move one overflow item as its brother + zip_bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = zip_bl_count[bits]; + while (n != 0) { + m = zip_heap[--h]; + if (m > max_code) + continue; + if (tree[m].dl != bits) { + zip_opt_len += (bits - tree[m].dl) * tree[m].fc; + tree[m].fc = bits; + } + n--; + } + } + }; + + /* ========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ + var zip_gen_codes = function (tree, // the tree to decorate + max_code) { // largest code with non zero frequency + var next_code = new Array(zip_MAX_BITS + 1); // next code value for each bit length + var code = 0; // running code value + var bits; // bit index + var n; // code index + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= zip_MAX_BITS; bits++) { + code = ((code + zip_bl_count[bits - 1]) << 1); + next_code[bits] = code; + } + + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + for (n = 0; n <= max_code; n++) { + var len = tree[n].dl; + if (len == 0) + continue; + // Now reverse the bits + tree[n].fc = zip_bi_reverse(next_code[len]++, len); + } + }; + + /* ========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ + var zip_build_tree = function (desc) { // the tree descriptor + var tree = desc.dyn_tree; + var stree = desc.static_tree; + var elems = desc.elems; + var n, m; // iterate over heap elements + var max_code = -1; // largest code with non zero frequency + var node = elems; // next internal node of the tree + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + zip_heap_len = 0; + zip_heap_max = zip_HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].fc != 0) { + zip_heap[++zip_heap_len] = max_code = n; + zip_depth[n] = 0; + } else + tree[n].dl = 0; + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (zip_heap_len < 2) { + var xnew = zip_heap[++zip_heap_len] = (max_code < 2 ? ++max_code : 0); + tree[xnew].fc = 1; + zip_depth[xnew] = 0; + zip_opt_len--; + if (stree != null) + zip_static_len -= stree[xnew].dl; + // new is 0 or 1 so it does not have extra bits + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = zip_heap_len >> 1; n >= 1; n--) + zip_pqdownheap(tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + do { + n = zip_heap[zip_SMALLEST]; + zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--]; + zip_pqdownheap(tree, zip_SMALLEST); + + m = zip_heap[zip_SMALLEST]; // m = node of next least frequency + + // keep the nodes sorted by frequency + zip_heap[--zip_heap_max] = n; + zip_heap[--zip_heap_max] = m; + + // Create a new node father of n and m + tree[node].fc = tree[n].fc + tree[m].fc; + if (zip_depth[n] > zip_depth[m] + 1) + zip_depth[node] = zip_depth[n]; + else + zip_depth[node] = zip_depth[m] + 1; + tree[n].dl = tree[m].dl = node; + + // and insert the new node in the heap + zip_heap[zip_SMALLEST] = node++; + zip_pqdownheap(tree, zip_SMALLEST); + + } while (zip_heap_len >= 2); + + zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + zip_gen_bitlen(desc); + + // The field len is now set, we can generate the bit codes + zip_gen_codes(tree, max_code); + }; + + /* ========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. Updates opt_len to take into account the repeat + * counts. (The contribution of the bit length codes will be added later + * during the construction of bl_tree.) + */ + var zip_scan_tree = function (tree,// the tree to be scanned + max_code) { // and its largest code of non zero frequency + var n; // iterates over all tree elements + var prevlen = -1; // last emitted length + var curlen; // length of current code + var nextlen = tree[0].dl; // length of next code + var count = 0; // repeat count of the current code + var max_count = 7; // max repeat count + var min_count = 4; // min repeat count + + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } + tree[max_code + 1].dl = 0xffff; // guard + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[n + 1].dl; + if (++count < max_count && curlen == nextlen) + continue; + else if (count < min_count) + zip_bl_tree[curlen].fc += count; + else if (curlen != 0) { + if (curlen != prevlen) + zip_bl_tree[curlen].fc++; + zip_bl_tree[zip_REP_3_6].fc++; + } else if (count <= 10) + zip_bl_tree[zip_REPZ_3_10].fc++; + else + zip_bl_tree[zip_REPZ_11_138].fc++; + count = 0; + prevlen = curlen; + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } else if (curlen == nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + }; + + /* ========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ + var zip_send_tree = function (tree, // the tree to be scanned + max_code) { // and its largest code of non zero frequency + var n; // iterates over all tree elements + var prevlen = -1; // last emitted length + var curlen; // length of current code + var nextlen = tree[0].dl; // length of next code + var count = 0; // repeat count of the current code + var max_count = 7; // max repeat count + var min_count = 4; // min repeat count + + /* tree[max_code+1].dl = -1; */ + /* guard already set */ + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[n + 1].dl; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { + zip_SEND_CODE(curlen, zip_bl_tree); + } while (--count != 0); + } else if (curlen != 0) { + if (curlen != prevlen) { + zip_SEND_CODE(curlen, zip_bl_tree); + count--; + } + // Assert(count >= 3 && count <= 6, " 3_6?"); + zip_SEND_CODE(zip_REP_3_6, zip_bl_tree); + zip_send_bits(count - 3, 2); + } else if (count <= 10) { + zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree); + zip_send_bits(count - 3, 3); + } else { + zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree); + zip_send_bits(count - 11, 7); + } + count = 0; + prevlen = curlen; + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } else if (curlen == nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + }; + + /* ========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ + var zip_build_bl_tree = function () { + var max_blindex; // index of last bit length code of non zero freq + + // Determine the bit length frequencies for literal and distance trees + zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code); + zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code); + + // Build the bit length tree: + zip_build_tree(zip_bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = zip_BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (zip_bl_tree[zip_bl_order[max_blindex]].dl != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + zip_opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + return max_blindex; + }; + + /* ========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ + var zip_send_all_trees = function (lcodes, dcodes, blcodes) { // number of codes for each tree + var rank; // index in bl_order + zip_send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt + zip_send_bits(dcodes - 1, 5); + zip_send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt + for (rank = 0; rank < blcodes; rank++) { + zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3); + } + + // send the literal tree + zip_send_tree(zip_dyn_ltree, lcodes - 1); + + // send the distance tree + zip_send_tree(zip_dyn_dtree, dcodes - 1); + }; + + /* ========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ + var zip_flush_block = function (eof) { // true if this is the last block for a file + var opt_lenb, static_lenb; // opt_len and static_len in bytes + var max_blindex; // index of last bit length code of non zero freq + var stored_len; // length of input block + + stored_len = zip_strstart - zip_block_start; + zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items + + // Construct the literal and distance trees + zip_build_tree(zip_l_desc); + zip_build_tree(zip_d_desc); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = zip_build_bl_tree(); + + // Determine the best encoding. Compute first the block length in bytes + opt_lenb = (zip_opt_len + 3 + 7) >> 3; + static_lenb = (zip_static_len + 3 + 7) >> 3; + if (static_lenb <= opt_lenb) + opt_lenb = static_lenb; + if (stored_len + 4 <= opt_lenb // 4: two words for the lengths + && zip_block_start >= 0) { + var i; + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + zip_send_bits((zip_STORED_BLOCK << 1) + eof, 3); + /* send block type */ + zip_bi_windup(); + /* align on byte boundary */ + zip_put_short(stored_len); + zip_put_short(~stored_len); + + // copy block + for (i = 0; i < stored_len; i++) + zip_put_byte(zip_window[zip_block_start + i]); + + } else if (static_lenb == opt_lenb) { + zip_send_bits((zip_STATIC_TREES << 1) + eof, 3); + zip_compress_block(zip_static_ltree, zip_static_dtree); + } else { + zip_send_bits((zip_DYN_TREES << 1) + eof, 3); + zip_send_all_trees(zip_l_desc.max_code + 1, + zip_d_desc.max_code + 1, + max_blindex + 1); + zip_compress_block(zip_dyn_ltree, zip_dyn_dtree); + } + + zip_init_block(); + + if (eof != 0) + zip_bi_windup(); + }; + + /* ========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ + var zip_ct_tally = function (dist, // distance of matched string + lc) { // match length-MIN_MATCH or unmatched char (if dist==0) + zip_l_buf[zip_last_lit++] = lc; + if (dist == 0) { + // lc is the unmatched char + zip_dyn_ltree[lc].fc++; + } else { + // Here, lc is the match length - MIN_MATCH + dist--; // dist = match distance - 1 + zip_dyn_ltree[zip_length_code[lc] + zip_LITERALS + 1].fc++; + zip_dyn_dtree[zip_D_CODE(dist)].fc++; + + zip_d_buf[zip_last_dist++] = dist; + zip_flags |= zip_flag_bit; + } + zip_flag_bit <<= 1; + + // Output the flags if they fill a byte + if ((zip_last_lit & 7) == 0) { + zip_flag_buf[zip_last_flags++] = zip_flags; + zip_flags = 0; + zip_flag_bit = 1; + } + // Try to guess if it is profitable to stop the current block here + if (zip_compr_level > 2 && (zip_last_lit & 0xfff) == 0) { + // Compute an upper bound for the compressed length + var out_length = zip_last_lit * 8; + var in_length = zip_strstart - zip_block_start; + var dcode; + + for (dcode = 0; dcode < zip_D_CODES; dcode++) { + out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]); + } + out_length >>= 3; + if (zip_last_dist < parseInt(zip_last_lit / 2) && + out_length < parseInt(in_length / 2)) + return true; + } + return (zip_last_lit == LIT_BUFSIZE - 1 || + zip_last_dist == zip_DIST_BUFSIZE); + /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ + }; + + /* ========================================================================== + * Send the block data compressed using the given Huffman trees + */ + var zip_compress_block = function (ltree, // literal tree + dtree) { // distance tree + var dist; // distance of matched string + var lc; // match length or unmatched char (if dist == 0) + var lx = 0; // running index in l_buf + var dx = 0; // running index in d_buf + var fx = 0; // running index in flag_buf + var flag = 0; // current flags + var code; // the code to send + var extra; // number of extra bits to send + + if (zip_last_lit != 0) do { + if ((lx & 7) == 0) + flag = zip_flag_buf[fx++]; + lc = zip_l_buf[lx++] & 0xff; + if ((flag & 1) == 0) { + zip_SEND_CODE(lc, ltree); + /* send a literal byte */ + } else { + // Here, lc is the match length - MIN_MATCH + code = zip_length_code[lc]; + zip_SEND_CODE(code + zip_LITERALS + 1, ltree); // send the length code + extra = zip_extra_lbits[code]; + if (extra != 0) { + lc -= zip_base_length[code]; + zip_send_bits(lc, extra); // send the extra length bits + } + dist = zip_d_buf[dx++]; + // Here, dist is the match distance - 1 + code = zip_D_CODE(dist); + zip_SEND_CODE(code, dtree); // send the distance code + extra = zip_extra_dbits[code]; + if (extra != 0) { + dist -= zip_base_dist[code]; + zip_send_bits(dist, extra); // send the extra distance bits + } + } // literal or match pair ? + flag >>= 1; + } while (lx < zip_last_lit); + + zip_SEND_CODE(zip_END_BLOCK, ltree); + }; + + /* ========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ + var zip_Buf_size = 16; // bit size of bi_buf + var zip_send_bits = function (value, // value to send + length) { // number of bits + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (zip_bi_valid > zip_Buf_size - length) { + zip_bi_buf |= (value << zip_bi_valid); + zip_put_short(zip_bi_buf); + zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid)); + zip_bi_valid += length - zip_Buf_size; + } else { + zip_bi_buf |= value << zip_bi_valid; + zip_bi_valid += length; + } + }; + + /* ========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ + var zip_bi_reverse = function (code, // the value to invert + len) { // its bit length + var res = 0; + do { + res |= code & 1; + code >>= 1; + res <<= 1; + } while (--len > 0); + return res >> 1; + }; + + /* ========================================================================== + * Write out any remaining bits in an incomplete byte. + */ + var zip_bi_windup = function () { + if (zip_bi_valid > 8) { + zip_put_short(zip_bi_buf); + } else if (zip_bi_valid > 0) { + zip_put_byte(zip_bi_buf); + } + zip_bi_buf = 0; + zip_bi_valid = 0; + }; + + var zip_qoutbuf = function () { + if (zip_outcnt != 0) { + var q, i; + q = zip_new_queue(); + if (zip_qhead == null) + zip_qhead = zip_qtail = q; + else + zip_qtail = zip_qtail.next = q; + q.len = zip_outcnt - zip_outoff; + for (i = 0; i < q.len; i++) + q.ptr[i] = zip_outbuf[zip_outoff + i]; + zip_outcnt = zip_outoff = 0; + } + }; + + function deflate(buffData, level) { + zip_deflate_data = buffData; + zip_deflate_pos = 0; + zip_deflate_start(level); + + var buff = new Array(1024), + pages = [], + totalSize = 0, + i; + + for (i = 0; i < 1024; i++) buff[i] = 0; + while ((i = zip_deflate_internal(buff, 0, buff.length)) > 0) { + var buf = new Buffer(buff.slice(0, i)); + pages.push(buf); + totalSize += buf.length; + } + + if (pages.length == 1) { + return pages[0]; + } + + var result = new Buffer(totalSize), + index = 0; + + for (i = 0; i < pages.length; i++) { + pages[i].copy(result, index); + index = index + pages[i].length + } + + return result; + } + + return { + deflate: function () { + return deflate(inbuf, 8); + } + } +} + +module.exports = function (/*Buffer*/inbuf) { + + var zlib = require("zlib"); + + return { + deflate: function () { + return new JSDeflater(inbuf).deflate(); + }, + + deflateAsync: function (/*Function*/callback) { + var tmp = zlib.createDeflateRaw({chunkSize:(parseInt(inbuf.length / 1024) + 1)*1024}), + parts = [], total = 0; + tmp.on('data', function(data) { + parts.push(data); + total += data.length; + }); + tmp.on('end', function() { + var buf = new Buffer(total), written = 0; + buf.fill(0); + + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + part.copy(buf, written); + written += part.length; + } + callback && callback(buf); + }); + tmp.end(inbuf); + } + } +}; diff --git a/platforms/android/assets/www/node_modules/adm-zip/methods/index.js b/platforms/android/assets/www/node_modules/adm-zip/methods/index.js new file mode 100644 index 0000000..ddcbba6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/methods/index.js @@ -0,0 +1,2 @@ +exports.Deflater = require("./deflater"); +exports.Inflater = require("./inflater"); \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/adm-zip/methods/inflater.js b/platforms/android/assets/www/node_modules/adm-zip/methods/inflater.js new file mode 100644 index 0000000..59536c9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/methods/inflater.js @@ -0,0 +1,448 @@ +var Buffer = require("buffer").Buffer; + +function JSInflater(/*Buffer*/input) { + + var WSIZE = 0x8000, + slide = new Buffer(0x10000), + windowPos = 0, + fixedTableList = null, + fixedTableDist, + fixedLookup, + bitBuf = 0, + bitLen = 0, + method = -1, + eof = false, + copyLen = 0, + copyDist = 0, + tblList, tblDist, bitList, bitdist, + + inputPosition = 0, + + MASK_BITS = [0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff], + LENS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], + LEXT = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99], + DISTS = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], + DEXT = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], + BITORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + + function HuffTable(clen, cnum, cval, blist, elist, lookupm) { + + this.status = 0; + this.root = null; + this.maxbit = 0; + + var el, f, tail, + offsets = [], + countTbl = [], + sTbl = [], + values = [], + tentry = {extra: 0, bitcnt: 0, lbase: 0, next: null}; + + tail = this.root = null; + for(var i = 0; i < 0x11; i++) { countTbl[i] = 0; sTbl[i] = 0; offsets[i] = 0; } + for(i = 0; i < 0x120; i++) values[i] = 0; + + el = cnum > 256 ? clen[256] : 16; + + var pidx = -1; + while (++pidx < cnum) countTbl[clen[pidx]]++; + + if(countTbl[0] == cnum) return; + + for(var j = 1; j <= 16; j++) if(countTbl[j] != 0) break; + var bitLen = j; + for(i = 16; i != 0; i--) if(countTbl[i] != 0) break; + var maxLen = i; + + lookupm < j && (lookupm = j); + + var dCodes = 1 << j; + for(; j < i; j++, dCodes <<= 1) + if((dCodes -= countTbl[j]) < 0) { + this.status = 2; + this.maxbit = lookupm; + return; + } + + if((dCodes -= countTbl[i]) < 0) { + this.status = 2; + this.maxbit = lookupm; + return; + } + + countTbl[i] += dCodes; + offsets[1] = j = 0; + pidx = 1; + var xp = 2; + while(--i > 0) offsets[xp++] = (j += countTbl[pidx++]); + pidx = 0; + i = 0; + do { + (j = clen[pidx++]) && (values[offsets[j]++] = i); + } while(++i < cnum); + cnum = offsets[maxLen]; + offsets[0] = i = 0; + pidx = 0; + + var level = -1, + w = sTbl[0] = 0, + cnode = null, + tblCnt = 0, + tblStack = []; + + for(; bitLen <= maxLen; bitLen++) { + var kccnt = countTbl[bitLen]; + while(kccnt-- > 0) { + while(bitLen > w + sTbl[1 + level]) { + w += sTbl[1 + level]; + level++; + tblCnt = (tblCnt = maxLen - w) > lookupm ? lookupm : tblCnt; + if((f = 1 << (j = bitLen - w)) > kccnt + 1) { + f -= kccnt + 1; + xp = bitLen; + while(++j < tblCnt) { + if((f <<= 1) <= countTbl[++xp]) break; + f -= countTbl[xp]; + } + } + if(w + j > el && w < el) j = el - w; + tblCnt = 1 << j; + sTbl[1 + level] = j; + cnode = []; + while (cnode.length < tblCnt) cnode.push({extra: 0, bitcnt: 0, lbase: 0, next: null}); + if (tail == null) { + tail = this.root = {next:null, list:null}; + } else { + tail = tail.next = {next:null, list:null} + } + tail.next = null; + tail.list = cnode; + + tblStack[level] = cnode; + + if(level > 0) { + offsets[level] = i; + tentry.bitcnt = sTbl[level]; + tentry.extra = 16 + j; + tentry.next = cnode; + j = (i & ((1 << w) - 1)) >> (w - sTbl[level]); + + tblStack[level-1][j].extra = tentry.extra; + tblStack[level-1][j].bitcnt = tentry.bitcnt; + tblStack[level-1][j].lbase = tentry.lbase; + tblStack[level-1][j].next = tentry.next; + } + } + tentry.bitcnt = bitLen - w; + if(pidx >= cnum) + tentry.extra = 99; + else if(values[pidx] < cval) { + tentry.extra = (values[pidx] < 256 ? 16 : 15); + tentry.lbase = values[pidx++]; + } else { + tentry.extra = elist[values[pidx] - cval]; + tentry.lbase = blist[values[pidx++] - cval]; + } + + f = 1 << (bitLen - w); + for(j = i >> w; j < tblCnt; j += f) { + cnode[j].extra = tentry.extra; + cnode[j].bitcnt = tentry.bitcnt; + cnode[j].lbase = tentry.lbase; + cnode[j].next = tentry.next; + } + for(j = 1 << (bitLen - 1); (i & j) != 0; j >>= 1) + i ^= j; + i ^= j; + while((i & ((1 << w) - 1)) != offsets[level]) { + w -= sTbl[level]; + level--; + } + } + } + + this.maxbit = sTbl[1]; + this.status = ((dCodes != 0 && maxLen != 1) ? 1 : 0); + } + + function addBits(n) { + while(bitLen < n) { + bitBuf |= input[inputPosition++] << bitLen; + bitLen += 8; + } + return bitBuf; + } + + function cutBits(n) { + bitLen -= n; + return bitBuf >>= n; + } + + function maskBits(n) { + while(bitLen < n) { + bitBuf |= input[inputPosition++] << bitLen; + bitLen += 8; + } + var res = bitBuf & MASK_BITS[n]; + bitBuf >>= n; + bitLen -= n; + return res; + } + + function codes(buff, off, size) { + var e, t; + if(size == 0) return 0; + + var n = 0; + for(;;) { + t = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; + e = t.extra; + while(e > 16) { + if(e == 99) return -1; + cutBits(t.bitcnt); + e -= 16; + t = t.next[addBits(e) & MASK_BITS[e]]; + e = t.extra; + } + cutBits(t.bitcnt); + if(e == 16) { + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = t.lbase; + if(n == size) return size; + continue; + } + if(e == 15) break; + + copyLen = t.lbase + maskBits(e); + t = tblDist.list[addBits(bitdist) & MASK_BITS[bitdist]]; + e = t.extra; + + while(e > 16) { + if(e == 99) return -1; + cutBits(t.bitcnt); + e -= 16; + t = t.next[addBits(e) & MASK_BITS[e]]; + e = t.extra + } + cutBits(t.bitcnt); + copyDist = windowPos - t.lbase - maskBits(e); + + while(copyLen > 0 && n < size) { + copyLen--; + copyDist &= WSIZE - 1; + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = slide[copyDist++]; + } + + if(n == size) return size; + } + + method = -1; // done + return n; + } + + function stored(buff, off, size) { + cutBits(bitLen & 7); + var n = maskBits(0x10); + if(n != ((~maskBits(0x10)) & 0xffff)) return -1; + copyLen = n; + + n = 0; + while(copyLen > 0 && n < size) { + copyLen--; + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = maskBits(8); + } + + if(copyLen == 0) method = -1; + return n; + } + + function fixed(buff, off, size) { + var fixed_bd = 0; + if(fixedTableList == null) { + var lengths = []; + + for(var symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8; + for(; symbol < 256; symbol++) lengths[symbol] = 9; + for(; symbol < 280; symbol++) lengths[symbol] = 7; + for(; symbol < 288; symbol++) lengths[symbol] = 8; + + fixedLookup = 7; + + var htbl = new HuffTable(lengths, 288, 257, LENS, LEXT, fixedLookup); + + if(htbl.status != 0) return -1; + + fixedTableList = htbl.root; + fixedLookup = htbl.maxbit; + + for(symbol = 0; symbol < 30; symbol++) lengths[symbol] = 5; + fixed_bd = 5; + + htbl = new HuffTable(lengths, 30, 0, DISTS, DEXT, fixed_bd); + if(htbl.status > 1) { + fixedTableList = null; + return -1; + } + fixedTableDist = htbl.root; + fixed_bd = htbl.maxbit; + } + + tblList = fixedTableList; + tblDist = fixedTableDist; + bitList = fixedLookup; + bitdist = fixed_bd; + return codes(buff, off, size); + } + + function dynamic(buff, off, size) { + var ll = new Array(0x023C); + + for (var m = 0; m < 0x023C; m++) ll[m] = 0; + + var llencnt = 257 + maskBits(5), + dcodescnt = 1 + maskBits(5), + bitlencnt = 4 + maskBits(4); + + if(llencnt > 286 || dcodescnt > 30) return -1; + + for(var j = 0; j < bitlencnt; j++) ll[BITORDER[j]] = maskBits(3); + for(; j < 19; j++) ll[BITORDER[j]] = 0; + + // build decoding table for trees--single level, 7 bit lookup + bitList = 7; + var hufTable = new HuffTable(ll, 19, 19, null, null, bitList); + if(hufTable.status != 0) + return -1; // incomplete code set + + tblList = hufTable.root; + bitList = hufTable.maxbit; + var lencnt = llencnt + dcodescnt, + i = 0, + lastLen = 0; + while(i < lencnt) { + var hufLcode = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; + j = hufLcode.bitcnt; + cutBits(j); + j = hufLcode.lbase; + if(j < 16) + ll[i++] = lastLen = j; + else if(j == 16) { + j = 3 + maskBits(2); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = lastLen; + } else if(j == 17) { + j = 3 + maskBits(3); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = 0; + lastLen = 0; + } else { + j = 11 + maskBits(7); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = 0; + lastLen = 0; + } + } + bitList = 9; + hufTable = new HuffTable(ll, llencnt, 257, LENS, LEXT, bitList); + bitList == 0 && (hufTable.status = 1); + + if (hufTable.status != 0) return -1; + + tblList = hufTable.root; + bitList = hufTable.maxbit; + + for(i = 0; i < dcodescnt; i++) ll[i] = ll[i + llencnt]; + bitdist = 6; + hufTable = new HuffTable(ll, dcodescnt, 0, DISTS, DEXT, bitdist); + tblDist = hufTable.root; + bitdist = hufTable.maxbit; + + if((bitdist == 0 && llencnt > 257) || hufTable.status != 0) return -1; + + return codes(buff, off, size); + } + + return { + inflate : function(/*Buffer*/outputBuffer) { + tblList = null; + + var size = outputBuffer.length, + offset = 0, i; + + while(offset < size) { + if(eof && method == -1) return; + if(copyLen > 0) { + if(method != 0) { + while(copyLen > 0 && offset < size) { + copyLen--; + copyDist &= WSIZE - 1; + windowPos &= WSIZE - 1; + outputBuffer[offset++] = (slide[windowPos++] = slide[copyDist++]); + } + } else { + while(copyLen > 0 && offset < size) { + copyLen--; + windowPos &= WSIZE - 1; + outputBuffer[offset++] = (slide[windowPos++] = maskBits(8)); + } + copyLen == 0 && (method = -1); // done + } + if (offset == size) return; + } + + if(method == -1) { + if(eof) break; + eof = maskBits(1) != 0; + method = maskBits(2); + tblList = null; + copyLen = 0; + } + switch(method) { + case 0: i = stored(outputBuffer, offset, size - offset); break; + case 1: i = tblList != null ? codes(outputBuffer, offset, size - offset) : fixed(outputBuffer, offset, size - offset); break; + case 2: i = tblList != null ? codes(outputBuffer, offset, size - offset) : dynamic(outputBuffer, offset, size - offset); break; + default: i = -1; break; + } + + if(i == -1) return; + offset += i; + } + } + }; +} + +module.exports = function(/*Buffer*/inbuf) { + var zlib = require("zlib"); + return { + inflateAsync : function(/*Function*/callback) { + var tmp = zlib.createInflateRaw(), + parts = [], total = 0; + tmp.on('data', function(data) { + parts.push(data); + total += data.length; + }); + tmp.on('end', function() { + var buf = new Buffer(total), written = 0; + buf.fill(0); + + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + part.copy(buf, written); + written += part.length; + } + callback && callback(buf); + }); + tmp.end(inbuf) + }, + + inflate : function(/*Buffer*/outputBuffer) { + var x = { + x: new JSInflater(inbuf) + }; + x.x.inflate(outputBuffer); + delete(x.x); + } + } +}; diff --git a/platforms/android/assets/www/node_modules/adm-zip/package.json b/platforms/android/assets/www/node_modules/adm-zip/package.json new file mode 100644 index 0000000..d1f56d4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/package.json @@ -0,0 +1,83 @@ +{ + "_args": [ + [ + "adm-zip@0.4.4", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver" + ] + ], + "_from": "adm-zip@0.4.4", + "_id": "adm-zip@0.4.4", + "_inCache": true, + "_installable": true, + "_location": "/adm-zip", + "_npmUser": { + "email": "iacob.campia@gmail.com", + "name": "cthackers" + }, + "_npmVersion": "1.3.24", + "_phantomChildren": {}, + "_requested": { + "name": "adm-zip", + "raw": "adm-zip@0.4.4", + "rawSpec": "0.4.4", + "scope": null, + "spec": "0.4.4", + "type": "version" + }, + "_requiredBy": [ + "/selenium-webdriver" + ], + "_resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", + "_shasum": "a61ed5ae6905c3aea58b3a657d25033091052736", + "_shrinkwrap": null, + "_spec": "adm-zip@0.4.4", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver", + "author": { + "email": "sy@another-d-mention.ro", + "name": "Nasca Iacob", + "url": "https://github.com/cthackers" + }, + "bugs": { + "email": "sy@another-d-mention.ro", + "url": "https://github.com/cthackers/adm-zip/issues" + }, + "dependencies": {}, + "description": "A Javascript implementation of zip for nodejs. Allows user to create or extract zip files both in memory or to/from disk", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "a61ed5ae6905c3aea58b3a657d25033091052736", + "tarball": "http://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz" + }, + "engines": { + "node": ">=0.3.0" + }, + "homepage": "http://github.com/cthackers/adm-zip", + "keywords": [ + "zip", + "methods", + "archive", + "unzip" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/cthackers/adm-zip/master/MIT-LICENSE.txt" + } + ], + "main": "adm-zip.js", + "maintainers": [ + { + "email": "iacob.campia@gmail.com", + "name": "cthackers" + } + ], + "name": "adm-zip", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/cthackers/adm-zip.git" + }, + "version": "0.4.4" +} diff --git a/platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test.zip b/platforms/android/assets/www/node_modules/adm-zip/test/assets/attributes_test.zip new file mode 100644 index 0000000000000000000000000000000000000000..d57bfc075800e3f49b0a3e0ceca9a199d82c4c7f GIT binary patch literal 4189 zcmWIWW@h1H00FMbOb0LnN(cby#FCPt%%swi)Z%y`F3}HwtL8vcErLaLVsQ!{9hx|F z_@$OBgrruKD7fS&m*%GCmFSgJlprkrS%Kh!4ktSn++dSWwfX5n<3HEoL1F5d!{YZ9ZQq4O_y1vGVZ?B zJ#^AQp|`wthxz7%5Ba3t$7V}EX+F30^i`jQoJ+3XzF6@?jE#Brug)7a@vc^vdnV3p zsCuuv&L)dM*-GjhFU3~#KIo!)1&XS;j#R)5x}^WThE6#P&OS(!$pS}6lG<%w~-2i|^Ob$*)stiqPfm3lm-Z$$!M+Me_IWcT1XIJ0*Zx|n7|2W|ETsxzq zj#mOSe`*EIJJfdd$Gsy3B36^xc`X)3tn^nXKX6L;k5H-<^Z!`Qxa$g`DqULQGTDoK zJ~?Zhvds|;_u}2D(c%`Q+sHCMr0Kd#Si#hkA1Tojxof)?&%K~p_-+Xkn`m&9O8Xqm z6@05EnY#ZJ$@C6zw!0N@6cre?nemla=Pi^Cl@q{+43f zW#(?oJtrR|p>=YmMv_P5!EZILo+*KXy|#A_8a@tDvTciB)T*QDrsTc$gJiPTQu_t& zfuAL22$|}pEKd=1-{R+TVk%3aYW;=_s~(!%V+3U) z?1@s3m_!+0l$w~5pO;fPnmR{QCp}ZAI{wr-nk+{P&4DO12_(zn{M=Mn6J)e5AFa!& zU6(U5i7?=5xvKz6Ob`II;Xwes9nZy}02XItkYL!5|8C>gzh@X>w1M9C*&u#^H^K(Y z);_Wg*jf*uwm-5h1>LM0K&Haz3BqA32-%{^0J8<;+5{j*_Xo%pto;RiR>Pct>_N<4 z1+vx4u~?1T$3V94z`N1~Ag`g*$o66OL}2!TqUG-Wsog)=1&Ef@>M>m5khS34utU#XtM+<%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{NuAx$pN{9*kVW`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ymsIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`0xvl=zcl#0*)aeh#u_PJe%b694AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/adm-zip/test/assets/fastest.zip b/platforms/android/assets/www/node_modules/adm-zip/test/assets/fastest.zip new file mode 100644 index 0000000000000000000000000000000000000000..f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a GIT binary patch literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{NuAx$pN{9*kVW`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ymsIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`0xvl=zcl#0*)aeh#u_PJe%b694AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/adm-zip/test/assets/linux_arc.zip b/platforms/android/assets/www/node_modules/adm-zip/test/assets/linux_arc.zip new file mode 100644 index 0000000000000000000000000000000000000000..188eccbe8bdb2b5b288857de8a397b77ff8e7414 GIT binary patch literal 415 zcmWIWW@Zs#U|`^2P@7ZZFx{>BaWati9*FrEWEe_Pi%axDgkExfURr1fCj+yAMzOy( z5SLbPGcdBeU}j(d6I0I|@QcA+THb;_774De=Tl4Hi@R|&9D zj6iZrBZ!Iab5@AY(R>Xt6PKePW->4cF#L5~4Kp(|1ZWhb$~`W1-7 F004HEX6gU{ literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/adm-zip/test/assets/maximum.zip b/platforms/android/assets/www/node_modules/adm-zip/test/assets/maximum.zip new file mode 100644 index 0000000000000000000000000000000000000000..86a8ec776107c075ce2c7f803472aa97dc25cbf7 GIT binary patch literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(yMz9sgOW(_5XqZ~qRqG+=fSD%&BaXj!8_Fg-RYh z!HeWd`ApTHdNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/adm-zip/test/assets/normal.zip b/platforms/android/assets/www/node_modules/adm-zip/test/assets/normal.zip new file mode 100644 index 0000000000000000000000000000000000000000..b4602c94ee000ee54c71c9302b9db956b3fd9f0e GIT binary patch literal 4170 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPvB~f#DxB1A{7ljTxCK zDXDoNXQu|9?VD{NuAx$pN{9*kVW@$~4X$#pJL>1_46YY#n?i+b*}Jo-uVy^_v)ZUoP&g=ls%;9f#N2_1;tU*kv)*ZNBCl z-}UVu)+enwT{LHlbnuJP1$KIJ-FhO{rpj7Rex&JGnEG-WWqgs{^slshzT@je^A-Oi zCUQ@GopEk{TH)oB8*WIdh93FC7A_`Qzw%tNY9D{vtTUpE7rxwiU2)>?c`8EDZ!i7{ zGxY9Z-~2JdG-8MRgHO9&ZGL*JY}SJna@@hTbt((L^dvX$`CL(P*RR0P?8RU4&%9rY zxp?oNvK17GVBY#bUT3l78jt4ppVs(H&ELHQu{H+UonPXJe ztl@Uscx;vL#?ujB`Ld6M#yB1HQkxi3}R?!ts-ccvbLyk&a;IDC*Jb4jE5a-Q>)q;Nxwq0jG zc(0h#Qs1cSsHtmuO6&y%QRiH)L#ITHf+m$q1RuVDn=hXZE~=bjfG!@G5q2Qp>W>+aV+kSs;^%VS4^2Aa^kAO zkIO&r{bPV-U(8ggM@*`WFG@{J$0osl=zcl#0*)a{tU8ZPJe%b694ABQdw$|a`!2=*a8asUjTMwi0S*r)PRvBpRTVVGKJ@p{@5n?S$BNv{o}|uL!iihYhd&$gLP`7AvNH2U`rIiL+P%Xt4?>UW<{dDQp(QA{s^q Vc(Ve1!oa`Wk(r-b2E=Vnm2Q0iJ5-rM<2kDhpf=eLwvlT`|@htI1E^_ zCf>_SRLS$?eMd zu|R=g!WhIu7>xX6pDB>V;77-Bz>*Xd;(q4yh)4V2!yrC5mT_h_LNjSR%ntp8;p71P zG>r$`M|%)VbM0ruqs*o7YBpl9=}t8^ZwN@h{7~i*T4PW=fhw`M^1~4N zY??6S@<^tkA{>lv(oZv7c)V6{Ls_h45yn+j;}*pBA9U^%khu?=0rG2Lt!-KK8tKppi=%L7C2 z=pGvNEFj?2l&+y(3p$$9XrpDdt{b|yr^qecGs$MlazF)Jbv(V%HB<-eu47xShWI9$ zHFdM)AVuqFrdLBMj)8UyZ@_JrgWkPT1O+OXKJ|>O0`JPY(;PiC9I1<7rsDKQw_9*%VW+hU+tveEf$d4 z(-e@~3G;(E3XiKwQdN?wl2nxhi-xpVNv^N2BvlEiHY3$$q}q&VYc?bQQ9{yq%x1^1 z>O7-Bb)Eq_tySll|KE9Liv>Q$8~*FMWBg?!;oexFlTb+if!d3y)1#W;wvw7*qGAKX3v z-NPq8Y!v81meHrXU}f~zOVIN@u`=)e?~^ZycjnDJ#6p%6db)E~@My_?S+P~Z!>4qKaHUqS5W=hw!VW9Lr!%lO~8e+hme*YU5<_*aqt^K)zY w<+H&u@KyG=02lJ%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(yMz9sgOW(_5XqZ~qRqG+=fSD%&BaXj!8_Fg-RYh z!HeWd`ApTHdNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/adm-zip/test/index.js b/platforms/android/assets/www/node_modules/adm-zip/test/index.js new file mode 100644 index 0000000..70acb51 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/test/index.js @@ -0,0 +1,5 @@ +var Attr = require("../util").FileAttr, + Zip = require("../adm-zip"), + fs = require("fs"); + +//zip.addLocalFile("./test/readonly.txt"); diff --git a/platforms/android/assets/www/node_modules/adm-zip/util/constants.js b/platforms/android/assets/www/node_modules/adm-zip/util/constants.js new file mode 100644 index 0000000..0548054 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/util/constants.js @@ -0,0 +1,84 @@ +module.exports = { + /* The local file header */ + LOCHDR : 30, // LOC header size + LOCSIG : 0x04034b50, // "PK\003\004" + LOCVER : 4, // version needed to extract + LOCFLG : 6, // general purpose bit flag + LOCHOW : 8, // compression method + LOCTIM : 10, // modification time (2 bytes time, 2 bytes date) + LOCCRC : 14, // uncompressed file crc-32 value + LOCSIZ : 18, // compressed size + LOCLEN : 22, // uncompressed size + LOCNAM : 26, // filename length + LOCEXT : 28, // extra field length + + /* The Data descriptor */ + EXTSIG : 0x08074b50, // "PK\007\008" + EXTHDR : 16, // EXT header size + EXTCRC : 4, // uncompressed file crc-32 value + EXTSIZ : 8, // compressed size + EXTLEN : 12, // uncompressed size + + /* The central directory file header */ + CENHDR : 46, // CEN header size + CENSIG : 0x02014b50, // "PK\001\002" + CENVEM : 4, // version made by + CENVER : 6, // version needed to extract + CENFLG : 8, // encrypt, decrypt flags + CENHOW : 10, // compression method + CENTIM : 12, // modification time (2 bytes time, 2 bytes date) + CENCRC : 16, // uncompressed file crc-32 value + CENSIZ : 20, // compressed size + CENLEN : 24, // uncompressed size + CENNAM : 28, // filename length + CENEXT : 30, // extra field length + CENCOM : 32, // file comment length + CENDSK : 34, // volume number start + CENATT : 36, // internal file attributes + CENATX : 38, // external file attributes (host system dependent) + CENOFF : 42, // LOC header offset + + /* The entries in the end of central directory */ + ENDHDR : 22, // END header size + ENDSIG : 0x06054b50, // "PK\005\006" + ENDSUB : 8, // number of entries on this disk + ENDTOT : 10, // total number of entries + ENDSIZ : 12, // central directory size in bytes + ENDOFF : 16, // offset of first CEN header + ENDCOM : 20, // zip file comment length + + /* Compression methods */ + STORED : 0, // no compression + SHRUNK : 1, // shrunk + REDUCED1 : 2, // reduced with compression factor 1 + REDUCED2 : 3, // reduced with compression factor 2 + REDUCED3 : 4, // reduced with compression factor 3 + REDUCED4 : 5, // reduced with compression factor 4 + IMPLODED : 6, // imploded + // 7 reserved + DEFLATED : 8, // deflated + ENHANCED_DEFLATED: 9, // enhanced deflated + PKWARE : 10,// PKWare DCL imploded + // 11 reserved + BZIP2 : 12, // compressed using BZIP2 + // 13 reserved + LZMA : 14, // LZMA + // 15-17 reserved + IBM_TERSE : 18, // compressed using IBM TERSE + IBM_LZ77 : 19, //IBM LZ77 z + + /* General purpose bit flag */ + FLG_ENC : 0, // encripted file + FLG_COMP1 : 1, // compression option + FLG_COMP2 : 2, // compression option + FLG_DESC : 4, // data descriptor + FLG_ENH : 8, // enhanced deflation + FLG_STR : 16, // strong encryption + FLG_LNG : 1024, // language encoding + FLG_MSK : 4096, // mask header values + + /* Load type */ + FILE : 0, + BUFFER : 1, + NONE : 2 +}; diff --git a/platforms/android/assets/www/node_modules/adm-zip/util/errors.js b/platforms/android/assets/www/node_modules/adm-zip/util/errors.js new file mode 100644 index 0000000..db5d69e --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/util/errors.js @@ -0,0 +1,35 @@ +module.exports = { + /* Header error messages */ + "INVALID_LOC" : "Invalid LOC header (bad signature)", + "INVALID_CEN" : "Invalid CEN header (bad signature)", + "INVALID_END" : "Invalid END header (bad signature)", + + /* ZipEntry error messages*/ + "NO_DATA" : "Nothing to decompress", + "BAD_CRC" : "CRC32 checksum failed", + "FILE_IN_THE_WAY" : "There is a file in the way: %s", + "UNKNOWN_METHOD" : "Invalid/unsupported compression method", + + /* Inflater error messages */ + "AVAIL_DATA" : "inflate::Available inflate data did not terminate", + "INVALID_DISTANCE" : "inflate::Invalid literal/length or distance code in fixed or dynamic block", + "TO_MANY_CODES" : "inflate::Dynamic block code description: too many length or distance codes", + "INVALID_REPEAT_LEN" : "inflate::Dynamic block code description: repeat more than specified lengths", + "INVALID_REPEAT_FIRST" : "inflate::Dynamic block code description: repeat lengths with no first length", + "INCOMPLETE_CODES" : "inflate::Dynamic block code description: code lengths codes incomplete", + "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths", + "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths", + "INVALID_STORE_BLOCK" : "inflate::Stored block length did not match one's complement", + "INVALID_BLOCK_TYPE" : "inflate::Invalid block type (type == 3)", + + /* ADM-ZIP error messages */ + "CANT_EXTRACT_FILE" : "Could not extract the file", + "CANT_OVERRIDE" : "Target file already exists", + "NO_ZIP" : "No zip file was loaded", + "NO_ENTRY" : "Entry doesn't exist", + "DIRECTORY_CONTENT_ERROR" : "A directory cannot have content", + "FILE_NOT_FOUND" : "File not found: %s", + "NOT_IMPLEMENTED" : "Not implemented", + "INVALID_FILENAME" : "Invalid filename", + "INVALID_FORMAT" : "Invalid or unsupported zip format. No END header found" +}; \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/adm-zip/util/fattr.js b/platforms/android/assets/www/node_modules/adm-zip/util/fattr.js new file mode 100644 index 0000000..2191ec1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/util/fattr.js @@ -0,0 +1,84 @@ +var fs = require("fs"), + pth = require("path"); + +fs.existsSync = fs.existsSync || pth.existsSync; + +module.exports = function(/*String*/path) { + + var _path = path || "", + _permissions = 0, + _obj = newAttr(), + _stat = null; + + function newAttr() { + return { + directory : false, + readonly : false, + hidden : false, + executable : false, + mtime : 0, + atime : 0 + } + } + + if (_path && fs.existsSync(_path)) { + _stat = fs.statSync(_path); + _obj.directory = _stat.isDirectory(); + _obj.mtime = _stat.mtime; + _obj.atime = _stat.atime; + _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); + _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); + _obj.hidden = pth.basename(_path)[0] === "."; + } else { + console.warn("Invalid path: " + _path) + } + + return { + + get directory () { + return _obj.directory; + }, + + get readOnly () { + return _obj.readonly; + }, + + get hidden () { + return _obj.hidden; + }, + + get mtime () { + return _obj.mtime; + }, + + get atime () { + return _obj.atime; + }, + + + get executable () { + return _obj.executable; + }, + + decodeAttributes : function(val) { + + }, + + encodeAttributes : function (val) { + + }, + + toString : function() { + return '{\n' + + '\t"path" : "' + _path + ",\n" + + '\t"isDirectory" : ' + _obj.directory + ",\n" + + '\t"isReadOnly" : ' + _obj.readonly + ",\n" + + '\t"isHidden" : ' + _obj.hidden + ",\n" + + '\t"isExecutable" : ' + _obj.executable + ",\n" + + '\t"mTime" : ' + _obj.mtime + "\n" + + '\t"aTime" : ' + _obj.atime + "\n" + + '}'; + } + } + +}; diff --git a/platforms/android/assets/www/node_modules/adm-zip/util/index.js b/platforms/android/assets/www/node_modules/adm-zip/util/index.js new file mode 100644 index 0000000..935fc1a --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/util/index.js @@ -0,0 +1,4 @@ +module.exports = require("./utils"); +module.exports.Constants = require("./constants"); +module.exports.Errors = require("./errors"); +module.exports.FileAttr = require("./fattr"); \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/adm-zip/util/utils.js b/platforms/android/assets/www/node_modules/adm-zip/util/utils.js new file mode 100644 index 0000000..b14db8c --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/util/utils.js @@ -0,0 +1,145 @@ +var fs = require("fs"), + pth = require('path'); + +fs.existsSync = fs.existsSync || pth.existsSync; + +module.exports = (function() { + + var crcTable = [], + Constants = require('./constants'), + Errors = require('./errors'), + + PATH_SEPARATOR = pth.normalize("/"); + + + function mkdirSync(/*String*/path) { + var resolvedPath = path.split(PATH_SEPARATOR)[0]; + path.split(PATH_SEPARATOR).forEach(function(name) { + if (!name || name.substr(-1,1) == ":") return; + resolvedPath += PATH_SEPARATOR + name; + var stat; + try { + stat = fs.statSync(resolvedPath); + } catch (e) { + fs.mkdirSync(resolvedPath); + } + if (stat && stat.isFile()) + throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath); + }); + } + + function findSync(/*String*/root, /*RegExp*/pattern, /*Boolean*/recoursive) { + if (typeof pattern === 'boolean') { + recoursive = pattern; + pattern = undefined; + } + var files = []; + fs.readdirSync(root).forEach(function(file) { + var path = pth.join(root, file); + + if (fs.statSync(path).isDirectory() && recoursive) + files = files.concat(findSync(path, pattern, recoursive)); + + if (!pattern || pattern.test(path)) { + files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : "")); + } + + }); + return files; + } + + return { + makeDir : function(/*String*/path) { + mkdirSync(path); + }, + + crc32 : function(buf) { + var b = new Buffer(4); + if (!crcTable.length) { + for (var n = 0; n < 256; n++) { + var c = n; + for (var k = 8; --k >= 0;) // + if ((c & 1) != 0) { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; } + if (c < 0) { + b.writeInt32LE(c, 0); + c = b.readUInt32LE(0); + } + crcTable[n] = c; + } + } + var crc = 0, off = 0, len = buf.length, c1 = ~crc; + while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8); + crc = ~c1; + b.writeInt32LE(crc & 0xffffffff, 0); + return b.readUInt32LE(0); + }, + + methodToString : function(/*Number*/method) { + switch (method) { + case Constants.STORED: + return 'STORED (' + method + ')'; + case Constants.DEFLATED: + return 'DEFLATED (' + method + ')'; + default: + return 'UNSUPPORTED (' + method + ')' + } + + }, + + writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) { + if (fs.existsSync(path)) { + if (!overwrite) + return false; // cannot overwite + + var stat = fs.statSync(path); + if (stat.isDirectory()) { + return false; + } + } + var folder = pth.dirname(path); + if (!fs.existsSync(folder)) { + mkdirSync(folder); + } + + var fd; + try { + fd = fs.openSync(path, 'w', 438); // 0666 + } catch(e) { + fs.chmodSync(path, 438); + fd = fs.openSync(path, 'w', 438); + } + if (fd) { + fs.writeSync(fd, content, 0, content.length, 0); + fs.closeSync(fd); + } + fs.chmodSync(path, attr || 438); + return true; + }, + + findFiles : function(/*String*/path) { + return findSync(path, true); + }, + + getAttributes : function(/*String*/path) { + + }, + + setAttributes : function(/*String*/path) { + + }, + + toBuffer : function(input) { + if (Buffer.isBuffer(input)) { + return input; + } else { + if (input.length == 0) { + return new Buffer(0) + } + return new Buffer(input, 'utf8'); + } + }, + + Constants : Constants, + Errors : Errors + } +})(); diff --git a/platforms/android/assets/www/node_modules/adm-zip/zipEntry.js b/platforms/android/assets/www/node_modules/adm-zip/zipEntry.js new file mode 100644 index 0000000..02c3172 --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/zipEntry.js @@ -0,0 +1,224 @@ +var Utils = require("./util"), + Headers = require("./headers"), + Constants = Utils.Constants, + Methods = require("./methods"); + +module.exports = function (/*Buffer*/input) { + + var _entryHeader = new Headers.EntryHeader(), + _entryName = new Buffer(0), + _comment = new Buffer(0), + _isDirectory = false, + uncompressedData = null, + _extra = new Buffer(0); + + function getCompressedDataFromZip() { + if (!input || !Buffer.isBuffer(input)) { + return new Buffer(0); + } + _entryHeader.loadDataHeaderFromBinary(input); + return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize) + } + + function crc32OK(data) { + // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written + if (_entryHeader.flags & 0x8 != 0x8) { + if (Utils.crc32(data) != _entryHeader.crc) { + return false; + } + } else { + // @TODO: load and check data descriptor header + // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure + // (optionally preceded by a 4-byte signature) immediately after the compressed data: + } + return true; + } + + function decompress(/*Boolean*/async, /*Function*/callback) { + if (_isDirectory) { + if (async && callback) { + callback(new Buffer(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error. + } + return new Buffer(0); + } + + var compressedData = getCompressedDataFromZip(); + if (compressedData.length == 0) { + if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error. + return compressedData; + } + + var data = new Buffer(_entryHeader.size); + data.fill(0); + + switch (_entryHeader.method) { + case Utils.Constants.STORED: + compressedData.copy(data); + if (!crc32OK(data)) { + if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error + return Utils.Errors.BAD_CRC; + } else {//si added otherwise did not seem to return data. + if (async && callback) callback(data); + return data; + } + break; + case Utils.Constants.DEFLATED: + var inflater = new Methods.Inflater(compressedData); + if (!async) { + inflater.inflate(data); + if (!crc32OK(data)) { + console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString()) + } + return data; + } else { + inflater.inflateAsync(function(result) { + result.copy(data, 0); + if (crc32OK(data)) { + if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error + } else { //si added otherwise did not seem to return data. + if (callback) callback(data); + } + }) + } + break; + default: + if (async && callback) callback(new Buffer(0), Utils.Errors.UNKNOWN_METHOD); + return Utils.Errors.UNKNOWN_METHOD; + } + } + + function compress(/*Boolean*/async, /*Function*/callback) { + if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { + // no data set or the data wasn't changed to require recompression + if (async && callback) callback(getCompressedDataFromZip()); + return getCompressedDataFromZip(); + } + + if (uncompressedData.length && !_isDirectory) { + var compressedData; + // Local file header + switch (_entryHeader.method) { + case Utils.Constants.STORED: + _entryHeader.compressedSize = _entryHeader.size; + + compressedData = new Buffer(uncompressedData.length); + uncompressedData.copy(compressedData); + + if (async && callback) callback(compressedData); + return compressedData; + + break; + default: + case Utils.Constants.DEFLATED: + + var deflater = new Methods.Deflater(uncompressedData); + if (!async) { + var deflated = deflater.deflate(); + _entryHeader.compressedSize = deflated.length; + return deflated; + } else { + deflater.deflateAsync(function(data) { + compressedData = new Buffer(data.length); + _entryHeader.compressedSize = data.length; + data.copy(compressedData); + callback && callback(compressedData); + }) + } + deflater = null; + break; + } + } else { + if (async && callback) { + callback(new Buffer(0)); + } else { + return new Buffer(0); + } + } + } + + return { + get entryName () { return _entryName.toString(); }, + get rawEntryName() { return _entryName; }, + set entryName (val) { + _entryName = Utils.toBuffer(val); + var lastChar = _entryName[_entryName.length - 1]; + _isDirectory = (lastChar == 47) || (lastChar == 92); + _entryHeader.fileNameLength = _entryName.length; + }, + + get extra () { return _extra; }, + set extra (val) { + _extra = val; + _entryHeader.extraLength = val.length; + }, + + get comment () { return _comment.toString(); }, + set comment (val) { + _comment = Utils.toBuffer(val); + _entryHeader.commentLength = _comment.length; + }, + + get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); }, + get isDirectory () { return _isDirectory }, + + getCompressedData : function() { + return compress(false, null) + }, + + getCompressedDataAsync : function(/*Function*/callback) { + compress(true, callback) + }, + + setData : function(value) { + uncompressedData = Utils.toBuffer(value); + if (!_isDirectory && uncompressedData.length) { + _entryHeader.size = uncompressedData.length; + _entryHeader.method = Utils.Constants.DEFLATED; + _entryHeader.crc = Utils.crc32(value); + } else { // folders and blank files should be stored + _entryHeader.method = Utils.Constants.STORED; + } + }, + + getData : function() { + return decompress(false, null); + }, + + getDataAsync : function(/*Function*/callback) { + decompress(true, callback) + }, + + set header(/*Buffer*/data) { + _entryHeader.loadFromBinary(data); + }, + + get header() { + return _entryHeader; + }, + + packHeader : function() { + var header = _entryHeader.entryHeaderToBinary(); + // add + _entryName.copy(header, Utils.Constants.CENHDR); + if (_entryHeader.extraLength) { + _extra.copy(header, Utils.Constants.CENHDR + _entryName.length) + } + if (_entryHeader.commentLength) { + _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length); + } + return header; + }, + + toString : function() { + return '{\n' + + '\t"entryName" : "' + _entryName.toString() + "\",\n" + + '\t"name" : "' + _entryName.toString().split("/").pop() + "\",\n" + + '\t"comment" : "' + _comment.toString() + "\",\n" + + '\t"isDirectory" : ' + _isDirectory + ",\n" + + '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t") + ",\n" + + '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + + '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + + '}'; + } + } +}; diff --git a/platforms/android/assets/www/node_modules/adm-zip/zipFile.js b/platforms/android/assets/www/node_modules/adm-zip/zipFile.js new file mode 100644 index 0000000..f066d7e --- /dev/null +++ b/platforms/android/assets/www/node_modules/adm-zip/zipFile.js @@ -0,0 +1,311 @@ +var ZipEntry = require("./zipEntry"), + Headers = require("./headers"), + Utils = require("./util"); + +module.exports = function(/*String|Buffer*/input, /*Number*/inputType) { + var entryList = [], + entryTable = {}, + _comment = new Buffer(0), + filename = "", + fs = require("fs"), + inBuffer = null, + mainHeader = new Headers.MainHeader(); + + if (inputType == Utils.Constants.FILE) { + // is a filename + filename = input; + inBuffer = fs.readFileSync(filename); + readMainHeader(); + } else if (inputType == Utils.Constants.BUFFER) { + // is a memory buffer + inBuffer = input; + readMainHeader(); + } else { + // none. is a new file + } + + function readEntries() { + entryTable = {}; + entryList = new Array(mainHeader.diskEntries); // total number of entries + var index = mainHeader.offset; // offset of first CEN header + for(var i = 0; i < entryList.length; i++) { + + var tmp = index, + entry = new ZipEntry(inBuffer); + entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); + + entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); + + if (entry.header.extraLength) { + entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); + } + + if (entry.header.commentLength) + entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); + + index += entry.header.entryHeaderSize; + + entryList[i] = entry; + entryTable[entry.entryName] = entry; + } + } + + function readMainHeader() { + var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size + n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length + endOffset = 0; // Start offset of the END header + + for (i; i >= n; i--) { + if (inBuffer[i] != 0x50) continue; // quick check that the byte is 'P' + if (inBuffer.readUInt32LE(i) == Utils.Constants.ENDSIG) { // "PK\005\006" + endOffset = i; + break; + } + } + if (!endOffset) + throw Utils.Errors.INVALID_FORMAT; + + mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR)); + if (mainHeader.commentLength) { + _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR); + } + readEntries(); + } + + return { + /** + * Returns an array of ZipEntry objects existent in the current opened archive + * @return Array + */ + get entries () { + return entryList; + }, + + /** + * Archive comment + * @return {String} + */ + get comment () { return _comment.toString(); }, + set comment(val) { + mainHeader.commentLength = val.length; + _comment = val; + }, + + /** + * Returns a reference to the entry with the given name or null if entry is inexistent + * + * @param entryName + * @return ZipEntry + */ + getEntry : function(/*String*/entryName) { + return entryTable[entryName] || null; + }, + + /** + * Adds the given entry to the entry list + * + * @param entry + */ + setEntry : function(/*ZipEntry*/entry) { + entryList.push(entry); + entryTable[entry.entryName] = entry; + mainHeader.totalEntries = entryList.length; + }, + + /** + * Removes the entry with the given name from the entry list. + * + * If the entry is a directory, then all nested files and directories will be removed + * @param entryName + */ + deleteEntry : function(/*String*/entryName) { + var entry = entryTable[entryName]; + if (entry && entry.isDirectory) { + var _self = this; + this.getEntryChildren(entry).forEach(function(child) { + if (child.entryName != entryName) { + _self.deleteEntry(child.entryName) + } + }) + } + entryList.splice(entryList.indexOf(entry), 1); + delete(entryTable[entryName]); + mainHeader.totalEntries = entryList.length; + }, + + /** + * Iterates and returns all nested files and directories of the given entry + * + * @param entry + * @return Array + */ + getEntryChildren : function(/*ZipEntry*/entry) { + if (entry.isDirectory) { + var list = [], + name = entry.entryName, + len = name.length; + + entryList.forEach(function(zipEntry) { + if (zipEntry.entryName.substr(0, len) == name) { + list.push(zipEntry); + } + }); + return list; + } + return [] + }, + + /** + * Returns the zip file + * + * @return Buffer + */ + compressToBuffer : function() { + if (entryList.length > 1) { + entryList.sort(function(a, b) { + var nameA = a.entryName.toLowerCase(); + var nameB = b.entryName.toLowerCase(); + if (nameA < nameB) {return -1} + if (nameA > nameB) {return 1} + return 0; + }); + } + + var totalSize = 0, + dataBlock = [], + entryHeaders = [], + dindex = 0; + + mainHeader.size = 0; + mainHeader.offset = 0; + + entryList.forEach(function(entry) { + entry.header.offset = dindex; + + // compress data and set local and entry header accordingly. Reason why is called first + var compressedData = entry.getCompressedData(); + // data header + var dataHeader = entry.header.dataHeaderToBinary(); + var postHeader = new Buffer(entry.entryName + entry.extra.toString()); + var dataLength = dataHeader.length + postHeader.length + compressedData.length; + + dindex += dataLength; + + dataBlock.push(dataHeader); + dataBlock.push(postHeader); + dataBlock.push(compressedData); + + var entryHeader = entry.packHeader(); + entryHeaders.push(entryHeader); + mainHeader.size += entryHeader.length; + totalSize += (dataLength + entryHeader.length); + }); + + totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length + // point to end of data and begining of central directory first record + mainHeader.offset = dindex; + + dindex = 0; + var outBuffer = new Buffer(totalSize); + dataBlock.forEach(function(content) { + content.copy(outBuffer, dindex); // write data blocks + dindex += content.length; + }); + entryHeaders.forEach(function(content) { + content.copy(outBuffer, dindex); // write central directory entries + dindex += content.length; + }); + + var mh = mainHeader.toBinary(); + if (_comment) { + _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment + } + + mh.copy(outBuffer, dindex); // write main header + + return outBuffer + }, + + toAsyncBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { + if (entryList.length > 1) { + entryList.sort(function(a, b) { + var nameA = a.entryName.toLowerCase(); + var nameB = b.entryName.toLowerCase(); + if (nameA > nameB) {return -1} + if (nameA < nameB) {return 1} + return 0; + }); + } + + var totalSize = 0, + dataBlock = [], + entryHeaders = [], + dindex = 0; + + mainHeader.size = 0; + mainHeader.offset = 0; + + var compress=function(entryList){ + var self=arguments.callee; + var entry; + if(entryList.length){ + var entry=entryList.pop(); + var name=entry.entryName + entry.extra.toString(); + if(onItemStart)onItemStart(name); + entry.getCompressedDataAsync(function(compressedData){ + if(onItemEnd)onItemEnd(name); + + entry.header.offset = dindex; + // data header + var dataHeader = entry.header.dataHeaderToBinary(); + var postHeader = new Buffer(name); + var dataLength = dataHeader.length + postHeader.length + compressedData.length; + + dindex += dataLength; + + dataBlock.push(dataHeader); + dataBlock.push(postHeader); + dataBlock.push(compressedData); + + var entryHeader = entry.packHeader(); + entryHeaders.push(entryHeader); + mainHeader.size += entryHeader.length; + totalSize += (dataLength + entryHeader.length); + + if(entryList.length){ + self(entryList); + }else{ + + + totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length + // point to end of data and begining of central directory first record + mainHeader.offset = dindex; + + dindex = 0; + var outBuffer = new Buffer(totalSize); + dataBlock.forEach(function(content) { + content.copy(outBuffer, dindex); // write data blocks + dindex += content.length; + }); + entryHeaders.forEach(function(content) { + content.copy(outBuffer, dindex); // write central directory entries + dindex += content.length; + }); + + var mh = mainHeader.toBinary(); + if (_comment) { + _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment + } + + mh.copy(outBuffer, dindex); // write main header + + onSuccess(outBuffer); + } + }); + } + }; + + compress(entryList); + } + } +}; diff --git a/platforms/android/assets/www/node_modules/balanced-match/.npmignore b/platforms/android/assets/www/node_modules/balanced-match/.npmignore new file mode 100644 index 0000000..fd4f2b0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/.npmignore @@ -0,0 +1,2 @@ +node_modules +.DS_Store diff --git a/platforms/android/assets/www/node_modules/balanced-match/.travis.yml b/platforms/android/assets/www/node_modules/balanced-match/.travis.yml new file mode 100644 index 0000000..6e5919d --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/platforms/android/assets/www/node_modules/balanced-match/LICENSE.md b/platforms/android/assets/www/node_modules/balanced-match/LICENSE.md new file mode 100644 index 0000000..2cdc8e4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/balanced-match/Makefile b/platforms/android/assets/www/node_modules/balanced-match/Makefile new file mode 100644 index 0000000..fa5da71 --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/Makefile @@ -0,0 +1,6 @@ + +test: + @node_modules/.bin/tape test/*.js + +.PHONY: test + diff --git a/platforms/android/assets/www/node_modules/balanced-match/README.md b/platforms/android/assets/www/node_modules/balanced-match/README.md new file mode 100644 index 0000000..421f3aa --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/README.md @@ -0,0 +1,89 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/balanced-match/example.js b/platforms/android/assets/www/node_modules/balanced-match/example.js new file mode 100644 index 0000000..c02ad34 --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/example.js @@ -0,0 +1,5 @@ +var balanced = require('./'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); + diff --git a/platforms/android/assets/www/node_modules/balanced-match/index.js b/platforms/android/assets/www/node_modules/balanced-match/index.js new file mode 100644 index 0000000..75f3d71 --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/index.js @@ -0,0 +1,50 @@ +module.exports = balanced; +function balanced(a, b, str) { + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i < str.length && i >= 0 && ! result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/platforms/android/assets/www/node_modules/balanced-match/package.json b/platforms/android/assets/www/node_modules/balanced-match/package.json new file mode 100644 index 0000000..6ae13e8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + "balanced-match@^0.3.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/brace-expansion" + ] + ], + "_from": "balanced-match@>=0.3.0 <0.4.0", + "_id": "balanced-match@0.3.0", + "_inCache": true, + "_installable": true, + "_location": "/balanced-match", + "_nodeVersion": "4.2.1", + "_npmUser": { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "name": "balanced-match", + "raw": "balanced-match@^0.3.0", + "rawSpec": "^0.3.0", + "scope": null, + "spec": ">=0.3.0 <0.4.0", + "type": "range" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz", + "_shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756", + "_shrinkwrap": null, + "_spec": "balanced-match@^0.3.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/brace-expansion", + "author": { + "email": "mail@juliangruber.com", + "name": "Julian Gruber", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/balanced-match/issues" + }, + "dependencies": {}, + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "devDependencies": { + "tape": "~4.2.2" + }, + "directories": {}, + "dist": { + "shasum": "a91cdd1ebef1a86659e70ff4def01625fc2d6756", + "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz" + }, + "gitHead": "a7114b0986554787e90b7ac595a043ca75ea77e5", + "homepage": "https://github.com/juliangruber/balanced-match", + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "email": "julian@juliangruber.com", + "name": "juliangruber" + } + ], + "name": "balanced-match", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "scripts": { + "test": "make test" + }, + "testling": { + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ], + "files": "test/*.js" + }, + "version": "0.3.0" +} diff --git a/platforms/android/assets/www/node_modules/balanced-match/test/balanced.js b/platforms/android/assets/www/node_modules/balanced-match/test/balanced.js new file mode 100644 index 0000000..f5e98e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/balanced-match/test/balanced.js @@ -0,0 +1,84 @@ +var test = require('tape'); +var balanced = require('..'); + +test('balanced', function(t) { + t.deepEqual(balanced('{', '}', 'pre{in{nest}}post'), { + start: 3, + end: 12, + pre: 'pre', + body: 'in{nest}', + post: 'post' + }); + t.deepEqual(balanced('{', '}', '{{{{{{{{{in}post'), { + start: 8, + end: 11, + pre: '{{{{{{{{', + body: 'in', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre{body{in}post'), { + start: 8, + end: 11, + pre: 'pre{body', + body: 'in', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre}{in{nest}}post'), { + start: 4, + end: 13, + pre: 'pre}', + body: 'in{nest}', + post: 'post' + }); + t.deepEqual(balanced('{', '}', 'pre{body}between{body2}post'), { + start: 3, + end: 8, + pre: 'pre', + body: 'body', + post: 'between{body2}post' + }); + t.notOk(balanced('{', '}', 'nope'), 'should be notOk'); + t.deepEqual(balanced('', '', 'preinnestpost'), { + start: 3, + end: 19, + pre: 'pre', + body: 'innest', + post: 'post' + }); + t.deepEqual(balanced('', '', 'preinnestpost'), { + start: 7, + end: 23, + pre: 'pre', + body: 'innest', + post: 'post' + }); + t.deepEqual(balanced('{{', '}}', 'pre{{{in}}}post'), { + start: 3, + end: 9, + pre: 'pre', + body: '{in}', + post: 'post' + }); + t.deepEqual(balanced('{{{', '}}', 'pre{{{in}}}post'), { + start: 3, + end: 8, + pre: 'pre', + body: 'in', + post: '}post' + }); + t.deepEqual(balanced('{', '}', 'pre{{first}in{second}post'), { + start: 4, + end: 10, + pre: 'pre{', + body: 'first', + post: 'in{second}post' + }); + t.deepEqual(balanced('', 'prepost'), { + start: 3, + end: 4, + pre: 'pre', + body: '', + post: 'post' + }); + t.end(); +}); diff --git a/platforms/android/assets/www/node_modules/brace-expansion/.npmignore b/platforms/android/assets/www/node_modules/brace-expansion/.npmignore new file mode 100644 index 0000000..353546a --- /dev/null +++ b/platforms/android/assets/www/node_modules/brace-expansion/.npmignore @@ -0,0 +1,3 @@ +test +.gitignore +.travis.yml diff --git a/platforms/android/assets/www/node_modules/brace-expansion/README.md b/platforms/android/assets/www/node_modules/brace-expansion/README.md new file mode 100644 index 0000000..1793929 --- /dev/null +++ b/platforms/android/assets/www/node_modules/brace-expansion/README.md @@ -0,0 +1,122 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/brace-expansion/example.js b/platforms/android/assets/www/node_modules/brace-expansion/example.js new file mode 100644 index 0000000..60ecfc7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/brace-expansion/example.js @@ -0,0 +1,8 @@ +var expand = require('./'); + +console.log(expand('http://any.org/archive{1996..1999}/vol{1..4}/part{a,b,c}.html')); +console.log(expand('http://www.numericals.com/file{1..100..10}.txt')); +console.log(expand('http://www.letters.com/file{a..z..2}.txt')); +console.log(expand('mkdir /usr/local/src/bash/{old,new,dist,bugs}')); +console.log(expand('chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}')); + diff --git a/platforms/android/assets/www/node_modules/brace-expansion/index.js b/platforms/android/assets/www/node_modules/brace-expansion/index.js new file mode 100644 index 0000000..932718f --- /dev/null +++ b/platforms/android/assets/www/node_modules/brace-expansion/index.js @@ -0,0 +1,191 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = /^(.*,)+(.+)?$/.test(m.body); + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + diff --git a/platforms/android/assets/www/node_modules/brace-expansion/package.json b/platforms/android/assets/www/node_modules/brace-expansion/package.json new file mode 100644 index 0000000..034c59e --- /dev/null +++ b/platforms/android/assets/www/node_modules/brace-expansion/package.json @@ -0,0 +1,104 @@ +{ + "_args": [ + [ + "brace-expansion@^1.0.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/minimatch" + ] + ], + "_from": "brace-expansion@>=1.0.0 <2.0.0", + "_id": "brace-expansion@1.1.3", + "_inCache": true, + "_installable": true, + "_location": "/brace-expansion", + "_nodeVersion": "5.5.0", + "_npmOperationalInternal": { + "host": "packages-6-west.internal.npmjs.com", + "tmp": "tmp/brace-expansion-1.1.3.tgz_1455216688668_0.948847763473168" + }, + "_npmUser": { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + "_npmVersion": "3.3.12", + "_phantomChildren": {}, + "_requested": { + "name": "brace-expansion", + "raw": "brace-expansion@^1.0.0", + "rawSpec": "^1.0.0", + "scope": null, + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/minimatch" + ], + "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz", + "_shasum": "46bff50115d47fc9ab89854abb87d98078a10991", + "_shrinkwrap": null, + "_spec": "brace-expansion@^1.0.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/minimatch", + "author": { + "email": "mail@juliangruber.com", + "name": "Julian Gruber", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/brace-expansion/issues" + }, + "dependencies": { + "balanced-match": "^0.3.0", + "concat-map": "0.0.1" + }, + "description": "Brace expansion as known from sh/bash", + "devDependencies": { + "tape": "4.4.0" + }, + "directories": {}, + "dist": { + "shasum": "46bff50115d47fc9ab89854abb87d98078a10991", + "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz" + }, + "gitHead": "f0da1bb668e655f67b6b2d660c6e1c19e2a6f231", + "homepage": "https://github.com/juliangruber/brace-expansion", + "keywords": [], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + { + "email": "isaacs@npmjs.com", + "name": "isaacs" + } + ], + "name": "brace-expansion", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "scripts": { + "gentest": "bash test/generate.sh", + "test": "tape test/*.js" + }, + "testling": { + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ], + "files": "test/*.js" + }, + "version": "1.1.3" +} diff --git a/platforms/android/assets/www/node_modules/concat-map/.travis.yml b/platforms/android/assets/www/node_modules/concat-map/.travis.yml new file mode 100644 index 0000000..f1d0f13 --- /dev/null +++ b/platforms/android/assets/www/node_modules/concat-map/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/platforms/android/assets/www/node_modules/concat-map/LICENSE b/platforms/android/assets/www/node_modules/concat-map/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/concat-map/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/concat-map/README.markdown b/platforms/android/assets/www/node_modules/concat-map/README.markdown new file mode 100644 index 0000000..408f70a --- /dev/null +++ b/platforms/android/assets/www/node_modules/concat-map/README.markdown @@ -0,0 +1,62 @@ +concat-map +========== + +Concatenative mapdashery. + +[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map) + +[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map) + +example +======= + +``` js +var concatMap = require('concat-map'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); +``` + +*** + +``` +[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ] +``` + +methods +======= + +``` js +var concatMap = require('concat-map') +``` + +concatMap(xs, fn) +----------------- + +Return an array of concatenated elements by calling `fn(x, i)` for each element +`x` and each index `i` in the array `xs`. + +When `fn(x, i)` returns an array, its result will be concatenated with the +result array. If `fn(x, i)` returns anything else, that value will be pushed +onto the end of the result array. + +install +======= + +With [npm](http://npmjs.org) do: + +``` +npm install concat-map +``` + +license +======= + +MIT + +notes +===== + +This module was written while sitting high above the ground in a tree. diff --git a/platforms/android/assets/www/node_modules/concat-map/example/map.js b/platforms/android/assets/www/node_modules/concat-map/example/map.js new file mode 100644 index 0000000..3365621 --- /dev/null +++ b/platforms/android/assets/www/node_modules/concat-map/example/map.js @@ -0,0 +1,6 @@ +var concatMap = require('../'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); diff --git a/platforms/android/assets/www/node_modules/concat-map/index.js b/platforms/android/assets/www/node_modules/concat-map/index.js new file mode 100644 index 0000000..b29a781 --- /dev/null +++ b/platforms/android/assets/www/node_modules/concat-map/index.js @@ -0,0 +1,13 @@ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; diff --git a/platforms/android/assets/www/node_modules/concat-map/package.json b/platforms/android/assets/www/node_modules/concat-map/package.json new file mode 100644 index 0000000..a9ec9a4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/concat-map/package.json @@ -0,0 +1,109 @@ +{ + "_args": [ + [ + "concat-map@0.0.1", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/brace-expansion" + ] + ], + "_from": "concat-map@0.0.1", + "_id": "concat-map@0.0.1", + "_inCache": true, + "_installable": true, + "_location": "/concat-map", + "_npmUser": { + "email": "mail@substack.net", + "name": "substack" + }, + "_npmVersion": "1.3.21", + "_phantomChildren": {}, + "_requested": { + "name": "concat-map", + "raw": "concat-map@0.0.1", + "rawSpec": "0.0.1", + "scope": null, + "spec": "0.0.1", + "type": "version" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "_shrinkwrap": null, + "_spec": "concat-map@0.0.1", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/brace-expansion", + "author": { + "email": "mail@substack.net", + "name": "James Halliday", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/node-concat-map/issues" + }, + "dependencies": {}, + "description": "concatenative mapdashery", + "devDependencies": { + "tape": "~2.4.0" + }, + "directories": { + "example": "example", + "test": "test" + }, + "dist": { + "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + }, + "homepage": "https://github.com/substack/node-concat-map", + "keywords": [ + "concat", + "concatMap", + "map", + "functional", + "higher-order" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "email": "mail@substack.net", + "name": "substack" + } + ], + "name": "concat-map", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/substack/node-concat-map.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "browsers": { + "chrome": [ + 10, + 22 + ], + "ff": [ + 3.5, + 10, + 15 + ], + "ie": [ + 6, + 7, + 8, + 9 + ], + "opera": [ + 12 + ], + "safari": [ + 5.1 + ] + }, + "files": "test/*.js" + }, + "version": "0.0.1" +} diff --git a/platforms/android/assets/www/node_modules/concat-map/test/map.js b/platforms/android/assets/www/node_modules/concat-map/test/map.js new file mode 100644 index 0000000..fdbd702 --- /dev/null +++ b/platforms/android/assets/www/node_modules/concat-map/test/map.js @@ -0,0 +1,39 @@ +var concatMap = require('../'); +var test = require('tape'); + +test('empty or not', function (t) { + var xs = [ 1, 2, 3, 4, 5, 6 ]; + var ixes = []; + var ys = concatMap(xs, function (x, ix) { + ixes.push(ix); + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; + }); + t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); + t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); + t.end(); +}); + +test('always something', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('scalars', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : x; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('undefs', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function () {}); + t.same(ys, [ undefined, undefined, undefined, undefined ]); + t.end(); +}); diff --git a/platforms/android/assets/www/node_modules/exit/.jshintrc b/platforms/android/assets/www/node_modules/exit/.jshintrc new file mode 100644 index 0000000..2b7e39b --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/.jshintrc @@ -0,0 +1,14 @@ +{ + "curly": true, + "eqeqeq": true, + "immed": true, + "latedef": "nofunc", + "newcap": true, + "noarg": true, + "sub": true, + "undef": true, + "unused": true, + "boss": true, + "eqnull": true, + "node": true +} diff --git a/platforms/android/assets/www/node_modules/exit/.npmignore b/platforms/android/assets/www/node_modules/exit/.npmignore new file mode 100644 index 0000000..e69de29 diff --git a/platforms/android/assets/www/node_modules/exit/.travis.yml b/platforms/android/assets/www/node_modules/exit/.travis.yml new file mode 100644 index 0000000..42d4302 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - 0.8 + - '0.10' +before_script: + - npm install -g grunt-cli diff --git a/platforms/android/assets/www/node_modules/exit/Gruntfile.js b/platforms/android/assets/www/node_modules/exit/Gruntfile.js new file mode 100644 index 0000000..ff37751 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/Gruntfile.js @@ -0,0 +1,48 @@ +'use strict'; + +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + nodeunit: { + files: ['test/**/*_test.js'], + }, + jshint: { + options: { + jshintrc: '.jshintrc' + }, + gruntfile: { + src: 'Gruntfile.js' + }, + lib: { + src: ['lib/**/*.js'] + }, + test: { + src: ['test/**/*.js'] + }, + }, + watch: { + gruntfile: { + files: '<%= jshint.gruntfile.src %>', + tasks: ['jshint:gruntfile'] + }, + lib: { + files: '<%= jshint.lib.src %>', + tasks: ['jshint:lib', 'nodeunit'] + }, + test: { + files: '<%= jshint.test.src %>', + tasks: ['jshint:test', 'nodeunit'] + }, + }, + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-nodeunit'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + + // Default task. + grunt.registerTask('default', ['jshint', 'nodeunit']); + +}; diff --git a/platforms/android/assets/www/node_modules/exit/LICENSE-MIT b/platforms/android/assets/www/node_modules/exit/LICENSE-MIT new file mode 100644 index 0000000..bb2aad6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/LICENSE-MIT @@ -0,0 +1,22 @@ +Copyright (c) 2013 "Cowboy" Ben Alman + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/exit/README.md b/platforms/android/assets/www/node_modules/exit/README.md new file mode 100644 index 0000000..20c364e --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/README.md @@ -0,0 +1,75 @@ +# exit [![Build Status](https://secure.travis-ci.org/cowboy/node-exit.png?branch=master)](http://travis-ci.org/cowboy/node-exit) + +A replacement for process.exit that ensures stdio are fully drained before exiting. + +To make a long story short, if `process.exit` is called on Windows, script output is often truncated when pipe-redirecting `stdout` or `stderr`. This module attempts to work around this issue by waiting until those streams have been completely drained before actually calling `process.exit`. + +See [Node.js issue #3584](https://github.com/joyent/node/issues/3584) for further reference. + +Tested in OS X 10.8, Windows 7 on Node.js 0.8.25 and 0.10.18. + +Based on some code by [@vladikoff](https://github.com/vladikoff). + +## Getting Started +Install the module with: `npm install exit` + +```javascript +var exit = require('exit'); + +// These lines should appear in the output, EVEN ON WINDOWS. +console.log("omg"); +console.error("yay"); + +// process.exit(5); +exit(5); + +// These lines shouldn't appear in the output. +console.log("wtf"); +console.error("bro"); +``` + +## Don't believe me? Try it for yourself. + +In Windows, clone the repo and cd to the `test\fixtures` directory. The only difference between [log.js](test/fixtures/log.js) and [log-broken.js](test/fixtures/log-broken.js) is that the former uses `exit` while the latter calls `process.exit` directly. + +This test was done using cmd.exe, but you can see the same results using `| grep "std"` in either PowerShell or git-bash. + +``` +C:\node-exit\test\fixtures>node log.js 0 10 stdout stderr 2>&1 | find "std" +stdout 0 +stderr 0 +stdout 1 +stderr 1 +stdout 2 +stderr 2 +stdout 3 +stderr 3 +stdout 4 +stderr 4 +stdout 5 +stderr 5 +stdout 6 +stderr 6 +stdout 7 +stderr 7 +stdout 8 +stderr 8 +stdout 9 +stderr 9 + +C:\node-exit\test\fixtures>node log-broken.js 0 10 stdout stderr 2>&1 | find "std" + +C:\node-exit\test\fixtures> +``` + +## Contributing +In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). + +## Release History +2013-11-26 - v0.1.2 - Fixed a bug with hanging processes. +2013-09-26 - v0.1.1 - Fixed some bugs. It seems to actually work now! +2013-09-20 - v0.1.0 - Initial release. + +## License +Copyright (c) 2013 "Cowboy" Ben Alman +Licensed under the MIT license. diff --git a/platforms/android/assets/www/node_modules/exit/lib/exit.js b/platforms/android/assets/www/node_modules/exit/lib/exit.js new file mode 100644 index 0000000..2883e05 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/lib/exit.js @@ -0,0 +1,41 @@ +/* + * exit + * https://github.com/cowboy/node-exit + * + * Copyright (c) 2013 "Cowboy" Ben Alman + * Licensed under the MIT license. + */ + +'use strict'; + +module.exports = function exit(exitCode, streams) { + if (!streams) { streams = [process.stdout, process.stderr]; } + var drainCount = 0; + // Actually exit if all streams are drained. + function tryToExit() { + if (drainCount === streams.length) { + process.exit(exitCode); + } + } + streams.forEach(function(stream) { + // Count drained streams now, but monitor non-drained streams. + if (stream.bufferSize === 0) { + drainCount++; + } else { + stream.write('', 'utf-8', function() { + drainCount++; + tryToExit(); + }); + } + // Prevent further writing. + stream.write = function() {}; + }); + // If all streams were already drained, exit now. + tryToExit(); + // In Windows, when run as a Node.js child process, a script utilizing + // this library might just exit with a 0 exit code, regardless. This code, + // despite the fact that it looks a bit crazy, appears to fix that. + process.on('exit', function() { + process.exit(exitCode); + }); +}; diff --git a/platforms/android/assets/www/node_modules/exit/package.json b/platforms/android/assets/www/node_modules/exit/package.json new file mode 100644 index 0000000..ea2795d --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/package.json @@ -0,0 +1,95 @@ +{ + "_args": [ + [ + "exit@^0.1.2", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine" + ] + ], + "_from": "exit@>=0.1.2 <0.2.0", + "_id": "exit@0.1.2", + "_inCache": true, + "_installable": true, + "_location": "/exit", + "_npmUser": { + "email": "cowboy@rj3.net", + "name": "cowboy" + }, + "_npmVersion": "1.3.11", + "_phantomChildren": {}, + "_requested": { + "name": "exit", + "raw": "exit@^0.1.2", + "rawSpec": "^0.1.2", + "scope": null, + "spec": ">=0.1.2 <0.2.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine" + ], + "_resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "_shasum": "0632638f8d877cc82107d30a0fff1a17cba1cd0c", + "_shrinkwrap": null, + "_spec": "exit@^0.1.2", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine", + "author": { + "name": "\"Cowboy\" Ben Alman", + "url": "http://benalman.com/" + }, + "bugs": { + "url": "https://github.com/cowboy/node-exit/issues" + }, + "dependencies": {}, + "description": "A replacement for process.exit that ensures stdio are fully drained before exiting.", + "devDependencies": { + "grunt": "~0.4.1", + "grunt-contrib-jshint": "~0.6.4", + "grunt-contrib-nodeunit": "~0.2.0", + "grunt-contrib-watch": "~0.5.3", + "which": "~1.0.5" + }, + "directories": {}, + "dist": { + "shasum": "0632638f8d877cc82107d30a0fff1a17cba1cd0c", + "tarball": "http://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + }, + "engines": { + "node": ">= 0.8.0" + }, + "homepage": "https://github.com/cowboy/node-exit", + "keywords": [ + "exit", + "process", + "stdio", + "stdout", + "stderr", + "drain", + "flush", + "3584" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/cowboy/node-exit/blob/master/LICENSE-MIT" + } + ], + "main": "lib/exit", + "maintainers": [ + { + "email": "cowboy@rj3.net", + "name": "cowboy" + } + ], + "name": "exit", + "optionalDependencies": {}, + "readme": "# exit [![Build Status](https://secure.travis-ci.org/cowboy/node-exit.png?branch=master)](http://travis-ci.org/cowboy/node-exit)\n\nA replacement for process.exit that ensures stdio are fully drained before exiting.\n\nTo make a long story short, if `process.exit` is called on Windows, script output is often truncated when pipe-redirecting `stdout` or `stderr`. This module attempts to work around this issue by waiting until those streams have been completely drained before actually calling `process.exit`.\n\nSee [Node.js issue #3584](https://github.com/joyent/node/issues/3584) for further reference.\n\nTested in OS X 10.8, Windows 7 on Node.js 0.8.25 and 0.10.18.\n\nBased on some code by [@vladikoff](https://github.com/vladikoff).\n\n## Getting Started\nInstall the module with: `npm install exit`\n\n```javascript\nvar exit = require('exit');\n\n// These lines should appear in the output, EVEN ON WINDOWS.\nconsole.log(\"omg\");\nconsole.error(\"yay\");\n\n// process.exit(5);\nexit(5);\n\n// These lines shouldn't appear in the output.\nconsole.log(\"wtf\");\nconsole.error(\"bro\");\n```\n\n## Don't believe me? Try it for yourself.\n\nIn Windows, clone the repo and cd to the `test\\fixtures` directory. The only difference between [log.js](test/fixtures/log.js) and [log-broken.js](test/fixtures/log-broken.js) is that the former uses `exit` while the latter calls `process.exit` directly.\n\nThis test was done using cmd.exe, but you can see the same results using `| grep \"std\"` in either PowerShell or git-bash.\n\n```\nC:\\node-exit\\test\\fixtures>node log.js 0 10 stdout stderr 2>&1 | find \"std\"\nstdout 0\nstderr 0\nstdout 1\nstderr 1\nstdout 2\nstderr 2\nstdout 3\nstderr 3\nstdout 4\nstderr 4\nstdout 5\nstderr 5\nstdout 6\nstderr 6\nstdout 7\nstderr 7\nstdout 8\nstderr 8\nstdout 9\nstderr 9\n\nC:\\node-exit\\test\\fixtures>node log-broken.js 0 10 stdout stderr 2>&1 | find \"std\"\n\nC:\\node-exit\\test\\fixtures>\n```\n\n## Contributing\nIn lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).\n\n## Release History\n2013-11-26 - v0.1.2 - Fixed a bug with hanging processes. \n2013-09-26 - v0.1.1 - Fixed some bugs. It seems to actually work now! \n2013-09-20 - v0.1.0 - Initial release.\n\n## License\nCopyright (c) 2013 \"Cowboy\" Ben Alman \nLicensed under the MIT license.\n", + "readmeFilename": "README.md", + "repository": { + "type": "git", + "url": "git://github.com/cowboy/node-exit.git" + }, + "scripts": { + "test": "grunt nodeunit" + }, + "version": "0.1.2" +} diff --git a/platforms/android/assets/www/node_modules/exit/test/exit_test.js b/platforms/android/assets/www/node_modules/exit/test/exit_test.js new file mode 100644 index 0000000..a91afb9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/exit_test.js @@ -0,0 +1,121 @@ +'use strict'; + +/* + ======== A Handy Little Nodeunit Reference ======== + https://github.com/caolan/nodeunit + + Test methods: + test.expect(numAssertions) + test.done() + Test assertions: + test.ok(value, [message]) + test.equal(actual, expected, [message]) + test.notEqual(actual, expected, [message]) + test.deepEqual(actual, expected, [message]) + test.notDeepEqual(actual, expected, [message]) + test.strictEqual(actual, expected, [message]) + test.notStrictEqual(actual, expected, [message]) + test.throws(block, [error], [message]) + test.doesNotThrow(block, [error], [message]) + test.ifError(value) +*/ + +var fs = require('fs'); +var exec = require('child_process').exec; + +var _which = require('which').sync; +function which(command) { + try { + _which(command); + return command; + } catch (err) { + return false; + } +} + +// Look for grep first (any OS). If not found (but on Windows) look for find, +// which is Windows' horribly crippled grep alternative. +var grep = which('grep') || process.platform === 'win32' && which('find'); + +exports['exit'] = { + setUp: function(done) { + this.origCwd = process.cwd(); + process.chdir('test/fixtures'); + done(); + }, + tearDown: function(done) { + process.chdir(this.origCwd); + done(); + }, + 'grep': function(test) { + test.expect(1); + // Many unit tests depend on this. + test.ok(grep, 'A suitable "grep" or "find" program was not found in the PATH.'); + test.done(); + }, + // The rest of the tests are built dynamically, to keep things sane. +}; + +// A few helper functions. +function normalizeLineEndings(s) { + return s.replace(/\r?\n/g, '\n'); +} + +// Capture command output, normalizing captured stdout to unix file endings. +function run(command, callback) { + exec(command, function(error, stdout) { + callback(error ? error.code : 0, normalizeLineEndings(stdout)); + }); +} + +// Read a fixture file, normalizing file contents to unix file endings. +function fixture(filename) { + return normalizeLineEndings(String(fs.readFileSync(filename))); +} + +function buildTests() { + // Build individual unit tests for command output. + var counts = [10, 100, 1000]; + var outputs = [' stdout stderr', ' stdout', ' stderr']; + var pipes = ['', ' | ' + grep + ' "std"']; + counts.forEach(function(count) { + outputs.forEach(function(output) { + pipes.forEach(function(pipe) { + var command = 'node log.js 0 ' + count + output + ' 2>&1' + pipe; + exports['exit']['output (' + command + ')'] = function(test) { + test.expect(2); + run(command, function(code, actual) { + var expected = fixture(count + output.replace(/ /g, '-') + '.txt'); + // Sometimes, the actual file lines are out of order on Windows. + // But since the point of this lib is to drain the buffer and not + // guarantee output order, we only test the length. + test.equal(actual.length, expected.length, 'should be the same length.'); + // The "fail" lines in log.js should NOT be output! + test.ok(actual.indexOf('fail') === -1, 'should not output after exit is called.'); + test.done(); + }); + }; + }); + }); + }); + + // Build individual unit tests for exit codes. + var codes = [0, 1, 123]; + codes.forEach(function(code) { + var command = 'node log.js ' + code + ' 10 stdout stderr'; + exports['exit']['exit code (' + command + ')'] = function(test) { + test.expect(1); + run(command, function(actual) { + // The specified exit code should be passed through. + test.equal(actual, code, 'should exit with ' + code + ' error code.'); + test.done(); + }); + }; + }); +} + +// Don't bother building tests if grep wasn't found, otherwise everything will +// fail and the error will get lost. +if (grep) { + buildTests(); +} diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stderr.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stderr.txt new file mode 100644 index 0000000..2859200 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stderr.txt @@ -0,0 +1,10 @@ +stderr 0 +stderr 1 +stderr 2 +stderr 3 +stderr 4 +stderr 5 +stderr 6 +stderr 7 +stderr 8 +stderr 9 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stdout-stderr.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stdout-stderr.txt new file mode 100644 index 0000000..9de8616 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stdout-stderr.txt @@ -0,0 +1,20 @@ +stdout 0 +stderr 0 +stdout 1 +stdout 2 +stderr 1 +stdout 3 +stderr 2 +stderr 3 +stdout 4 +stderr 4 +stdout 5 +stderr 5 +stdout 6 +stderr 6 +stdout 7 +stderr 7 +stdout 8 +stderr 8 +stdout 9 +stderr 9 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stdout.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stdout.txt new file mode 100644 index 0000000..1ce90dc --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/10-stdout.txt @@ -0,0 +1,10 @@ +stdout 0 +stdout 1 +stdout 2 +stdout 3 +stdout 4 +stdout 5 +stdout 6 +stdout 7 +stdout 8 +stdout 9 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stderr.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stderr.txt new file mode 100644 index 0000000..3a78c85 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stderr.txt @@ -0,0 +1,100 @@ +stderr 0 +stderr 1 +stderr 2 +stderr 3 +stderr 4 +stderr 5 +stderr 6 +stderr 7 +stderr 8 +stderr 9 +stderr 10 +stderr 11 +stderr 12 +stderr 13 +stderr 14 +stderr 15 +stderr 16 +stderr 17 +stderr 18 +stderr 19 +stderr 20 +stderr 21 +stderr 22 +stderr 23 +stderr 24 +stderr 25 +stderr 26 +stderr 27 +stderr 28 +stderr 29 +stderr 30 +stderr 31 +stderr 32 +stderr 33 +stderr 34 +stderr 35 +stderr 36 +stderr 37 +stderr 38 +stderr 39 +stderr 40 +stderr 41 +stderr 42 +stderr 43 +stderr 44 +stderr 45 +stderr 46 +stderr 47 +stderr 48 +stderr 49 +stderr 50 +stderr 51 +stderr 52 +stderr 53 +stderr 54 +stderr 55 +stderr 56 +stderr 57 +stderr 58 +stderr 59 +stderr 60 +stderr 61 +stderr 62 +stderr 63 +stderr 64 +stderr 65 +stderr 66 +stderr 67 +stderr 68 +stderr 69 +stderr 70 +stderr 71 +stderr 72 +stderr 73 +stderr 74 +stderr 75 +stderr 76 +stderr 77 +stderr 78 +stderr 79 +stderr 80 +stderr 81 +stderr 82 +stderr 83 +stderr 84 +stderr 85 +stderr 86 +stderr 87 +stderr 88 +stderr 89 +stderr 90 +stderr 91 +stderr 92 +stderr 93 +stderr 94 +stderr 95 +stderr 96 +stderr 97 +stderr 98 +stderr 99 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stdout-stderr.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stdout-stderr.txt new file mode 100644 index 0000000..65f35f4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stdout-stderr.txt @@ -0,0 +1,200 @@ +stdout 0 +stderr 0 +stdout 1 +stderr 1 +stdout 2 +stderr 2 +stdout 3 +stderr 3 +stdout 4 +stderr 4 +stdout 5 +stderr 5 +stdout 6 +stderr 6 +stdout 7 +stderr 7 +stdout 8 +stderr 8 +stdout 9 +stderr 9 +stdout 10 +stderr 10 +stdout 11 +stderr 11 +stdout 12 +stderr 12 +stdout 13 +stderr 13 +stdout 14 +stderr 14 +stdout 15 +stderr 15 +stdout 16 +stderr 16 +stdout 17 +stderr 17 +stdout 18 +stderr 18 +stdout 19 +stderr 19 +stdout 20 +stderr 20 +stdout 21 +stderr 21 +stdout 22 +stderr 22 +stdout 23 +stderr 23 +stdout 24 +stderr 24 +stdout 25 +stderr 25 +stdout 26 +stderr 26 +stdout 27 +stderr 27 +stdout 28 +stderr 28 +stdout 29 +stderr 29 +stdout 30 +stderr 30 +stdout 31 +stderr 31 +stdout 32 +stderr 32 +stdout 33 +stderr 33 +stdout 34 +stderr 34 +stdout 35 +stderr 35 +stdout 36 +stderr 36 +stdout 37 +stderr 37 +stdout 38 +stderr 38 +stdout 39 +stderr 39 +stdout 40 +stderr 40 +stdout 41 +stderr 41 +stdout 42 +stderr 42 +stdout 43 +stderr 43 +stdout 44 +stderr 44 +stdout 45 +stderr 45 +stdout 46 +stderr 46 +stdout 47 +stderr 47 +stdout 48 +stderr 48 +stdout 49 +stderr 49 +stdout 50 +stderr 50 +stdout 51 +stderr 51 +stdout 52 +stderr 52 +stdout 53 +stderr 53 +stdout 54 +stderr 54 +stdout 55 +stderr 55 +stdout 56 +stderr 56 +stdout 57 +stderr 57 +stdout 58 +stderr 58 +stdout 59 +stderr 59 +stdout 60 +stderr 60 +stdout 61 +stderr 61 +stdout 62 +stderr 62 +stdout 63 +stderr 63 +stdout 64 +stderr 64 +stdout 65 +stderr 65 +stdout 66 +stderr 66 +stdout 67 +stderr 67 +stdout 68 +stderr 68 +stdout 69 +stderr 69 +stdout 70 +stderr 70 +stdout 71 +stderr 71 +stdout 72 +stderr 72 +stdout 73 +stderr 73 +stdout 74 +stderr 74 +stdout 75 +stderr 75 +stdout 76 +stderr 76 +stdout 77 +stderr 77 +stdout 78 +stderr 78 +stdout 79 +stderr 79 +stdout 80 +stderr 80 +stdout 81 +stderr 81 +stdout 82 +stderr 82 +stdout 83 +stderr 83 +stdout 84 +stderr 84 +stdout 85 +stderr 85 +stdout 86 +stderr 86 +stdout 87 +stderr 87 +stdout 88 +stderr 88 +stdout 89 +stderr 89 +stdout 90 +stderr 90 +stdout 91 +stderr 91 +stdout 92 +stderr 92 +stdout 93 +stderr 93 +stdout 94 +stderr 94 +stdout 95 +stderr 95 +stdout 96 +stderr 96 +stdout 97 +stderr 97 +stdout 98 +stderr 98 +stdout 99 +stderr 99 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stdout.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stdout.txt new file mode 100644 index 0000000..5d9cac2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/100-stdout.txt @@ -0,0 +1,100 @@ +stdout 0 +stdout 1 +stdout 2 +stdout 3 +stdout 4 +stdout 5 +stdout 6 +stdout 7 +stdout 8 +stdout 9 +stdout 10 +stdout 11 +stdout 12 +stdout 13 +stdout 14 +stdout 15 +stdout 16 +stdout 17 +stdout 18 +stdout 19 +stdout 20 +stdout 21 +stdout 22 +stdout 23 +stdout 24 +stdout 25 +stdout 26 +stdout 27 +stdout 28 +stdout 29 +stdout 30 +stdout 31 +stdout 32 +stdout 33 +stdout 34 +stdout 35 +stdout 36 +stdout 37 +stdout 38 +stdout 39 +stdout 40 +stdout 41 +stdout 42 +stdout 43 +stdout 44 +stdout 45 +stdout 46 +stdout 47 +stdout 48 +stdout 49 +stdout 50 +stdout 51 +stdout 52 +stdout 53 +stdout 54 +stdout 55 +stdout 56 +stdout 57 +stdout 58 +stdout 59 +stdout 60 +stdout 61 +stdout 62 +stdout 63 +stdout 64 +stdout 65 +stdout 66 +stdout 67 +stdout 68 +stdout 69 +stdout 70 +stdout 71 +stdout 72 +stdout 73 +stdout 74 +stdout 75 +stdout 76 +stdout 77 +stdout 78 +stdout 79 +stdout 80 +stdout 81 +stdout 82 +stdout 83 +stdout 84 +stdout 85 +stdout 86 +stdout 87 +stdout 88 +stdout 89 +stdout 90 +stdout 91 +stdout 92 +stdout 93 +stdout 94 +stdout 95 +stdout 96 +stdout 97 +stdout 98 +stdout 99 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stderr.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stderr.txt new file mode 100644 index 0000000..d637510 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stderr.txt @@ -0,0 +1,1000 @@ +stderr 0 +stderr 1 +stderr 2 +stderr 3 +stderr 4 +stderr 5 +stderr 6 +stderr 7 +stderr 8 +stderr 9 +stderr 10 +stderr 11 +stderr 12 +stderr 13 +stderr 14 +stderr 15 +stderr 16 +stderr 17 +stderr 18 +stderr 19 +stderr 20 +stderr 21 +stderr 22 +stderr 23 +stderr 24 +stderr 25 +stderr 26 +stderr 27 +stderr 28 +stderr 29 +stderr 30 +stderr 31 +stderr 32 +stderr 33 +stderr 34 +stderr 35 +stderr 36 +stderr 37 +stderr 38 +stderr 39 +stderr 40 +stderr 41 +stderr 42 +stderr 43 +stderr 44 +stderr 45 +stderr 46 +stderr 47 +stderr 48 +stderr 49 +stderr 50 +stderr 51 +stderr 52 +stderr 53 +stderr 54 +stderr 55 +stderr 56 +stderr 57 +stderr 58 +stderr 59 +stderr 60 +stderr 61 +stderr 62 +stderr 63 +stderr 64 +stderr 65 +stderr 66 +stderr 67 +stderr 68 +stderr 69 +stderr 70 +stderr 71 +stderr 72 +stderr 73 +stderr 74 +stderr 75 +stderr 76 +stderr 77 +stderr 78 +stderr 79 +stderr 80 +stderr 81 +stderr 82 +stderr 83 +stderr 84 +stderr 85 +stderr 86 +stderr 87 +stderr 88 +stderr 89 +stderr 90 +stderr 91 +stderr 92 +stderr 93 +stderr 94 +stderr 95 +stderr 96 +stderr 97 +stderr 98 +stderr 99 +stderr 100 +stderr 101 +stderr 102 +stderr 103 +stderr 104 +stderr 105 +stderr 106 +stderr 107 +stderr 108 +stderr 109 +stderr 110 +stderr 111 +stderr 112 +stderr 113 +stderr 114 +stderr 115 +stderr 116 +stderr 117 +stderr 118 +stderr 119 +stderr 120 +stderr 121 +stderr 122 +stderr 123 +stderr 124 +stderr 125 +stderr 126 +stderr 127 +stderr 128 +stderr 129 +stderr 130 +stderr 131 +stderr 132 +stderr 133 +stderr 134 +stderr 135 +stderr 136 +stderr 137 +stderr 138 +stderr 139 +stderr 140 +stderr 141 +stderr 142 +stderr 143 +stderr 144 +stderr 145 +stderr 146 +stderr 147 +stderr 148 +stderr 149 +stderr 150 +stderr 151 +stderr 152 +stderr 153 +stderr 154 +stderr 155 +stderr 156 +stderr 157 +stderr 158 +stderr 159 +stderr 160 +stderr 161 +stderr 162 +stderr 163 +stderr 164 +stderr 165 +stderr 166 +stderr 167 +stderr 168 +stderr 169 +stderr 170 +stderr 171 +stderr 172 +stderr 173 +stderr 174 +stderr 175 +stderr 176 +stderr 177 +stderr 178 +stderr 179 +stderr 180 +stderr 181 +stderr 182 +stderr 183 +stderr 184 +stderr 185 +stderr 186 +stderr 187 +stderr 188 +stderr 189 +stderr 190 +stderr 191 +stderr 192 +stderr 193 +stderr 194 +stderr 195 +stderr 196 +stderr 197 +stderr 198 +stderr 199 +stderr 200 +stderr 201 +stderr 202 +stderr 203 +stderr 204 +stderr 205 +stderr 206 +stderr 207 +stderr 208 +stderr 209 +stderr 210 +stderr 211 +stderr 212 +stderr 213 +stderr 214 +stderr 215 +stderr 216 +stderr 217 +stderr 218 +stderr 219 +stderr 220 +stderr 221 +stderr 222 +stderr 223 +stderr 224 +stderr 225 +stderr 226 +stderr 227 +stderr 228 +stderr 229 +stderr 230 +stderr 231 +stderr 232 +stderr 233 +stderr 234 +stderr 235 +stderr 236 +stderr 237 +stderr 238 +stderr 239 +stderr 240 +stderr 241 +stderr 242 +stderr 243 +stderr 244 +stderr 245 +stderr 246 +stderr 247 +stderr 248 +stderr 249 +stderr 250 +stderr 251 +stderr 252 +stderr 253 +stderr 254 +stderr 255 +stderr 256 +stderr 257 +stderr 258 +stderr 259 +stderr 260 +stderr 261 +stderr 262 +stderr 263 +stderr 264 +stderr 265 +stderr 266 +stderr 267 +stderr 268 +stderr 269 +stderr 270 +stderr 271 +stderr 272 +stderr 273 +stderr 274 +stderr 275 +stderr 276 +stderr 277 +stderr 278 +stderr 279 +stderr 280 +stderr 281 +stderr 282 +stderr 283 +stderr 284 +stderr 285 +stderr 286 +stderr 287 +stderr 288 +stderr 289 +stderr 290 +stderr 291 +stderr 292 +stderr 293 +stderr 294 +stderr 295 +stderr 296 +stderr 297 +stderr 298 +stderr 299 +stderr 300 +stderr 301 +stderr 302 +stderr 303 +stderr 304 +stderr 305 +stderr 306 +stderr 307 +stderr 308 +stderr 309 +stderr 310 +stderr 311 +stderr 312 +stderr 313 +stderr 314 +stderr 315 +stderr 316 +stderr 317 +stderr 318 +stderr 319 +stderr 320 +stderr 321 +stderr 322 +stderr 323 +stderr 324 +stderr 325 +stderr 326 +stderr 327 +stderr 328 +stderr 329 +stderr 330 +stderr 331 +stderr 332 +stderr 333 +stderr 334 +stderr 335 +stderr 336 +stderr 337 +stderr 338 +stderr 339 +stderr 340 +stderr 341 +stderr 342 +stderr 343 +stderr 344 +stderr 345 +stderr 346 +stderr 347 +stderr 348 +stderr 349 +stderr 350 +stderr 351 +stderr 352 +stderr 353 +stderr 354 +stderr 355 +stderr 356 +stderr 357 +stderr 358 +stderr 359 +stderr 360 +stderr 361 +stderr 362 +stderr 363 +stderr 364 +stderr 365 +stderr 366 +stderr 367 +stderr 368 +stderr 369 +stderr 370 +stderr 371 +stderr 372 +stderr 373 +stderr 374 +stderr 375 +stderr 376 +stderr 377 +stderr 378 +stderr 379 +stderr 380 +stderr 381 +stderr 382 +stderr 383 +stderr 384 +stderr 385 +stderr 386 +stderr 387 +stderr 388 +stderr 389 +stderr 390 +stderr 391 +stderr 392 +stderr 393 +stderr 394 +stderr 395 +stderr 396 +stderr 397 +stderr 398 +stderr 399 +stderr 400 +stderr 401 +stderr 402 +stderr 403 +stderr 404 +stderr 405 +stderr 406 +stderr 407 +stderr 408 +stderr 409 +stderr 410 +stderr 411 +stderr 412 +stderr 413 +stderr 414 +stderr 415 +stderr 416 +stderr 417 +stderr 418 +stderr 419 +stderr 420 +stderr 421 +stderr 422 +stderr 423 +stderr 424 +stderr 425 +stderr 426 +stderr 427 +stderr 428 +stderr 429 +stderr 430 +stderr 431 +stderr 432 +stderr 433 +stderr 434 +stderr 435 +stderr 436 +stderr 437 +stderr 438 +stderr 439 +stderr 440 +stderr 441 +stderr 442 +stderr 443 +stderr 444 +stderr 445 +stderr 446 +stderr 447 +stderr 448 +stderr 449 +stderr 450 +stderr 451 +stderr 452 +stderr 453 +stderr 454 +stderr 455 +stderr 456 +stderr 457 +stderr 458 +stderr 459 +stderr 460 +stderr 461 +stderr 462 +stderr 463 +stderr 464 +stderr 465 +stderr 466 +stderr 467 +stderr 468 +stderr 469 +stderr 470 +stderr 471 +stderr 472 +stderr 473 +stderr 474 +stderr 475 +stderr 476 +stderr 477 +stderr 478 +stderr 479 +stderr 480 +stderr 481 +stderr 482 +stderr 483 +stderr 484 +stderr 485 +stderr 486 +stderr 487 +stderr 488 +stderr 489 +stderr 490 +stderr 491 +stderr 492 +stderr 493 +stderr 494 +stderr 495 +stderr 496 +stderr 497 +stderr 498 +stderr 499 +stderr 500 +stderr 501 +stderr 502 +stderr 503 +stderr 504 +stderr 505 +stderr 506 +stderr 507 +stderr 508 +stderr 509 +stderr 510 +stderr 511 +stderr 512 +stderr 513 +stderr 514 +stderr 515 +stderr 516 +stderr 517 +stderr 518 +stderr 519 +stderr 520 +stderr 521 +stderr 522 +stderr 523 +stderr 524 +stderr 525 +stderr 526 +stderr 527 +stderr 528 +stderr 529 +stderr 530 +stderr 531 +stderr 532 +stderr 533 +stderr 534 +stderr 535 +stderr 536 +stderr 537 +stderr 538 +stderr 539 +stderr 540 +stderr 541 +stderr 542 +stderr 543 +stderr 544 +stderr 545 +stderr 546 +stderr 547 +stderr 548 +stderr 549 +stderr 550 +stderr 551 +stderr 552 +stderr 553 +stderr 554 +stderr 555 +stderr 556 +stderr 557 +stderr 558 +stderr 559 +stderr 560 +stderr 561 +stderr 562 +stderr 563 +stderr 564 +stderr 565 +stderr 566 +stderr 567 +stderr 568 +stderr 569 +stderr 570 +stderr 571 +stderr 572 +stderr 573 +stderr 574 +stderr 575 +stderr 576 +stderr 577 +stderr 578 +stderr 579 +stderr 580 +stderr 581 +stderr 582 +stderr 583 +stderr 584 +stderr 585 +stderr 586 +stderr 587 +stderr 588 +stderr 589 +stderr 590 +stderr 591 +stderr 592 +stderr 593 +stderr 594 +stderr 595 +stderr 596 +stderr 597 +stderr 598 +stderr 599 +stderr 600 +stderr 601 +stderr 602 +stderr 603 +stderr 604 +stderr 605 +stderr 606 +stderr 607 +stderr 608 +stderr 609 +stderr 610 +stderr 611 +stderr 612 +stderr 613 +stderr 614 +stderr 615 +stderr 616 +stderr 617 +stderr 618 +stderr 619 +stderr 620 +stderr 621 +stderr 622 +stderr 623 +stderr 624 +stderr 625 +stderr 626 +stderr 627 +stderr 628 +stderr 629 +stderr 630 +stderr 631 +stderr 632 +stderr 633 +stderr 634 +stderr 635 +stderr 636 +stderr 637 +stderr 638 +stderr 639 +stderr 640 +stderr 641 +stderr 642 +stderr 643 +stderr 644 +stderr 645 +stderr 646 +stderr 647 +stderr 648 +stderr 649 +stderr 650 +stderr 651 +stderr 652 +stderr 653 +stderr 654 +stderr 655 +stderr 656 +stderr 657 +stderr 658 +stderr 659 +stderr 660 +stderr 661 +stderr 662 +stderr 663 +stderr 664 +stderr 665 +stderr 666 +stderr 667 +stderr 668 +stderr 669 +stderr 670 +stderr 671 +stderr 672 +stderr 673 +stderr 674 +stderr 675 +stderr 676 +stderr 677 +stderr 678 +stderr 679 +stderr 680 +stderr 681 +stderr 682 +stderr 683 +stderr 684 +stderr 685 +stderr 686 +stderr 687 +stderr 688 +stderr 689 +stderr 690 +stderr 691 +stderr 692 +stderr 693 +stderr 694 +stderr 695 +stderr 696 +stderr 697 +stderr 698 +stderr 699 +stderr 700 +stderr 701 +stderr 702 +stderr 703 +stderr 704 +stderr 705 +stderr 706 +stderr 707 +stderr 708 +stderr 709 +stderr 710 +stderr 711 +stderr 712 +stderr 713 +stderr 714 +stderr 715 +stderr 716 +stderr 717 +stderr 718 +stderr 719 +stderr 720 +stderr 721 +stderr 722 +stderr 723 +stderr 724 +stderr 725 +stderr 726 +stderr 727 +stderr 728 +stderr 729 +stderr 730 +stderr 731 +stderr 732 +stderr 733 +stderr 734 +stderr 735 +stderr 736 +stderr 737 +stderr 738 +stderr 739 +stderr 740 +stderr 741 +stderr 742 +stderr 743 +stderr 744 +stderr 745 +stderr 746 +stderr 747 +stderr 748 +stderr 749 +stderr 750 +stderr 751 +stderr 752 +stderr 753 +stderr 754 +stderr 755 +stderr 756 +stderr 757 +stderr 758 +stderr 759 +stderr 760 +stderr 761 +stderr 762 +stderr 763 +stderr 764 +stderr 765 +stderr 766 +stderr 767 +stderr 768 +stderr 769 +stderr 770 +stderr 771 +stderr 772 +stderr 773 +stderr 774 +stderr 775 +stderr 776 +stderr 777 +stderr 778 +stderr 779 +stderr 780 +stderr 781 +stderr 782 +stderr 783 +stderr 784 +stderr 785 +stderr 786 +stderr 787 +stderr 788 +stderr 789 +stderr 790 +stderr 791 +stderr 792 +stderr 793 +stderr 794 +stderr 795 +stderr 796 +stderr 797 +stderr 798 +stderr 799 +stderr 800 +stderr 801 +stderr 802 +stderr 803 +stderr 804 +stderr 805 +stderr 806 +stderr 807 +stderr 808 +stderr 809 +stderr 810 +stderr 811 +stderr 812 +stderr 813 +stderr 814 +stderr 815 +stderr 816 +stderr 817 +stderr 818 +stderr 819 +stderr 820 +stderr 821 +stderr 822 +stderr 823 +stderr 824 +stderr 825 +stderr 826 +stderr 827 +stderr 828 +stderr 829 +stderr 830 +stderr 831 +stderr 832 +stderr 833 +stderr 834 +stderr 835 +stderr 836 +stderr 837 +stderr 838 +stderr 839 +stderr 840 +stderr 841 +stderr 842 +stderr 843 +stderr 844 +stderr 845 +stderr 846 +stderr 847 +stderr 848 +stderr 849 +stderr 850 +stderr 851 +stderr 852 +stderr 853 +stderr 854 +stderr 855 +stderr 856 +stderr 857 +stderr 858 +stderr 859 +stderr 860 +stderr 861 +stderr 862 +stderr 863 +stderr 864 +stderr 865 +stderr 866 +stderr 867 +stderr 868 +stderr 869 +stderr 870 +stderr 871 +stderr 872 +stderr 873 +stderr 874 +stderr 875 +stderr 876 +stderr 877 +stderr 878 +stderr 879 +stderr 880 +stderr 881 +stderr 882 +stderr 883 +stderr 884 +stderr 885 +stderr 886 +stderr 887 +stderr 888 +stderr 889 +stderr 890 +stderr 891 +stderr 892 +stderr 893 +stderr 894 +stderr 895 +stderr 896 +stderr 897 +stderr 898 +stderr 899 +stderr 900 +stderr 901 +stderr 902 +stderr 903 +stderr 904 +stderr 905 +stderr 906 +stderr 907 +stderr 908 +stderr 909 +stderr 910 +stderr 911 +stderr 912 +stderr 913 +stderr 914 +stderr 915 +stderr 916 +stderr 917 +stderr 918 +stderr 919 +stderr 920 +stderr 921 +stderr 922 +stderr 923 +stderr 924 +stderr 925 +stderr 926 +stderr 927 +stderr 928 +stderr 929 +stderr 930 +stderr 931 +stderr 932 +stderr 933 +stderr 934 +stderr 935 +stderr 936 +stderr 937 +stderr 938 +stderr 939 +stderr 940 +stderr 941 +stderr 942 +stderr 943 +stderr 944 +stderr 945 +stderr 946 +stderr 947 +stderr 948 +stderr 949 +stderr 950 +stderr 951 +stderr 952 +stderr 953 +stderr 954 +stderr 955 +stderr 956 +stderr 957 +stderr 958 +stderr 959 +stderr 960 +stderr 961 +stderr 962 +stderr 963 +stderr 964 +stderr 965 +stderr 966 +stderr 967 +stderr 968 +stderr 969 +stderr 970 +stderr 971 +stderr 972 +stderr 973 +stderr 974 +stderr 975 +stderr 976 +stderr 977 +stderr 978 +stderr 979 +stderr 980 +stderr 981 +stderr 982 +stderr 983 +stderr 984 +stderr 985 +stderr 986 +stderr 987 +stderr 988 +stderr 989 +stderr 990 +stderr 991 +stderr 992 +stderr 993 +stderr 994 +stderr 995 +stderr 996 +stderr 997 +stderr 998 +stderr 999 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stdout-stderr.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stdout-stderr.txt new file mode 100644 index 0000000..4fde2b4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stdout-stderr.txt @@ -0,0 +1,2000 @@ +stdout 0 +stderr 0 +stdout 1 +stderr 1 +stdout 2 +stderr 2 +stdout 3 +stderr 3 +stdout 4 +stderr 4 +stdout 5 +stderr 5 +stdout 6 +stderr 6 +stdout 7 +stderr 7 +stdout 8 +stderr 8 +stdout 9 +stderr 9 +stdout 10 +stderr 10 +stdout 11 +stderr 11 +stdout 12 +stderr 12 +stdout 13 +stderr 13 +stdout 14 +stderr 14 +stdout 15 +stderr 15 +stdout 16 +stderr 16 +stdout 17 +stderr 17 +stdout 18 +stderr 18 +stdout 19 +stderr 19 +stdout 20 +stderr 20 +stdout 21 +stderr 21 +stdout 22 +stderr 22 +stdout 23 +stderr 23 +stdout 24 +stderr 24 +stdout 25 +stderr 25 +stdout 26 +stderr 26 +stdout 27 +stderr 27 +stdout 28 +stderr 28 +stdout 29 +stderr 29 +stdout 30 +stderr 30 +stdout 31 +stderr 31 +stdout 32 +stderr 32 +stdout 33 +stderr 33 +stdout 34 +stderr 34 +stdout 35 +stderr 35 +stdout 36 +stderr 36 +stdout 37 +stderr 37 +stdout 38 +stderr 38 +stdout 39 +stderr 39 +stdout 40 +stderr 40 +stdout 41 +stderr 41 +stdout 42 +stderr 42 +stdout 43 +stderr 43 +stdout 44 +stderr 44 +stdout 45 +stderr 45 +stdout 46 +stderr 46 +stdout 47 +stderr 47 +stdout 48 +stderr 48 +stdout 49 +stderr 49 +stdout 50 +stderr 50 +stdout 51 +stderr 51 +stdout 52 +stderr 52 +stdout 53 +stderr 53 +stdout 54 +stderr 54 +stdout 55 +stderr 55 +stdout 56 +stderr 56 +stdout 57 +stderr 57 +stdout 58 +stderr 58 +stdout 59 +stderr 59 +stdout 60 +stderr 60 +stdout 61 +stderr 61 +stdout 62 +stderr 62 +stdout 63 +stderr 63 +stdout 64 +stderr 64 +stdout 65 +stderr 65 +stdout 66 +stderr 66 +stdout 67 +stderr 67 +stdout 68 +stderr 68 +stdout 69 +stderr 69 +stdout 70 +stderr 70 +stdout 71 +stderr 71 +stdout 72 +stderr 72 +stdout 73 +stderr 73 +stdout 74 +stderr 74 +stdout 75 +stderr 75 +stdout 76 +stderr 76 +stdout 77 +stderr 77 +stdout 78 +stderr 78 +stdout 79 +stderr 79 +stdout 80 +stderr 80 +stdout 81 +stderr 81 +stdout 82 +stderr 82 +stdout 83 +stderr 83 +stdout 84 +stderr 84 +stdout 85 +stderr 85 +stdout 86 +stderr 86 +stdout 87 +stderr 87 +stdout 88 +stderr 88 +stdout 89 +stderr 89 +stdout 90 +stderr 90 +stdout 91 +stderr 91 +stdout 92 +stderr 92 +stdout 93 +stderr 93 +stdout 94 +stderr 94 +stdout 95 +stderr 95 +stdout 96 +stderr 96 +stdout 97 +stderr 97 +stdout 98 +stderr 98 +stdout 99 +stderr 99 +stdout 100 +stderr 100 +stdout 101 +stderr 101 +stdout 102 +stderr 102 +stdout 103 +stderr 103 +stdout 104 +stderr 104 +stdout 105 +stderr 105 +stdout 106 +stderr 106 +stdout 107 +stderr 107 +stdout 108 +stderr 108 +stdout 109 +stderr 109 +stdout 110 +stderr 110 +stdout 111 +stderr 111 +stdout 112 +stderr 112 +stdout 113 +stderr 113 +stdout 114 +stderr 114 +stdout 115 +stderr 115 +stdout 116 +stderr 116 +stdout 117 +stderr 117 +stdout 118 +stderr 118 +stdout 119 +stderr 119 +stdout 120 +stderr 120 +stdout 121 +stderr 121 +stdout 122 +stderr 122 +stdout 123 +stderr 123 +stdout 124 +stderr 124 +stdout 125 +stderr 125 +stdout 126 +stderr 126 +stdout 127 +stderr 127 +stdout 128 +stderr 128 +stdout 129 +stderr 129 +stdout 130 +stderr 130 +stdout 131 +stderr 131 +stdout 132 +stderr 132 +stdout 133 +stderr 133 +stdout 134 +stderr 134 +stdout 135 +stderr 135 +stdout 136 +stderr 136 +stdout 137 +stderr 137 +stdout 138 +stderr 138 +stdout 139 +stderr 139 +stdout 140 +stderr 140 +stdout 141 +stderr 141 +stdout 142 +stderr 142 +stdout 143 +stderr 143 +stdout 144 +stderr 144 +stdout 145 +stderr 145 +stdout 146 +stderr 146 +stdout 147 +stderr 147 +stdout 148 +stderr 148 +stdout 149 +stderr 149 +stdout 150 +stderr 150 +stdout 151 +stderr 151 +stdout 152 +stderr 152 +stdout 153 +stderr 153 +stdout 154 +stderr 154 +stdout 155 +stderr 155 +stdout 156 +stderr 156 +stdout 157 +stderr 157 +stdout 158 +stderr 158 +stdout 159 +stderr 159 +stdout 160 +stderr 160 +stdout 161 +stderr 161 +stdout 162 +stderr 162 +stdout 163 +stderr 163 +stdout 164 +stderr 164 +stdout 165 +stderr 165 +stdout 166 +stderr 166 +stdout 167 +stderr 167 +stdout 168 +stderr 168 +stdout 169 +stderr 169 +stdout 170 +stderr 170 +stdout 171 +stderr 171 +stdout 172 +stderr 172 +stdout 173 +stderr 173 +stdout 174 +stderr 174 +stdout 175 +stderr 175 +stdout 176 +stderr 176 +stdout 177 +stderr 177 +stdout 178 +stderr 178 +stdout 179 +stderr 179 +stdout 180 +stderr 180 +stdout 181 +stderr 181 +stdout 182 +stderr 182 +stdout 183 +stderr 183 +stdout 184 +stderr 184 +stdout 185 +stderr 185 +stdout 186 +stderr 186 +stdout 187 +stderr 187 +stdout 188 +stderr 188 +stdout 189 +stderr 189 +stdout 190 +stderr 190 +stdout 191 +stderr 191 +stdout 192 +stderr 192 +stdout 193 +stderr 193 +stdout 194 +stderr 194 +stdout 195 +stderr 195 +stdout 196 +stderr 196 +stdout 197 +stderr 197 +stdout 198 +stderr 198 +stdout 199 +stderr 199 +stdout 200 +stderr 200 +stdout 201 +stderr 201 +stdout 202 +stderr 202 +stdout 203 +stderr 203 +stdout 204 +stderr 204 +stdout 205 +stderr 205 +stdout 206 +stderr 206 +stdout 207 +stderr 207 +stdout 208 +stderr 208 +stdout 209 +stderr 209 +stdout 210 +stderr 210 +stdout 211 +stderr 211 +stdout 212 +stderr 212 +stdout 213 +stderr 213 +stdout 214 +stderr 214 +stdout 215 +stderr 215 +stdout 216 +stderr 216 +stdout 217 +stderr 217 +stdout 218 +stderr 218 +stdout 219 +stderr 219 +stdout 220 +stderr 220 +stdout 221 +stderr 221 +stdout 222 +stderr 222 +stdout 223 +stderr 223 +stdout 224 +stderr 224 +stdout 225 +stderr 225 +stdout 226 +stderr 226 +stdout 227 +stderr 227 +stdout 228 +stderr 228 +stdout 229 +stderr 229 +stdout 230 +stderr 230 +stdout 231 +stderr 231 +stdout 232 +stderr 232 +stdout 233 +stderr 233 +stdout 234 +stderr 234 +stdout 235 +stderr 235 +stdout 236 +stderr 236 +stdout 237 +stderr 237 +stdout 238 +stderr 238 +stdout 239 +stderr 239 +stdout 240 +stderr 240 +stdout 241 +stderr 241 +stdout 242 +stderr 242 +stdout 243 +stderr 243 +stdout 244 +stderr 244 +stdout 245 +stderr 245 +stdout 246 +stderr 246 +stdout 247 +stderr 247 +stdout 248 +stderr 248 +stdout 249 +stderr 249 +stdout 250 +stderr 250 +stdout 251 +stderr 251 +stdout 252 +stderr 252 +stdout 253 +stderr 253 +stdout 254 +stderr 254 +stdout 255 +stderr 255 +stdout 256 +stderr 256 +stdout 257 +stderr 257 +stdout 258 +stderr 258 +stdout 259 +stderr 259 +stdout 260 +stderr 260 +stdout 261 +stderr 261 +stdout 262 +stderr 262 +stdout 263 +stderr 263 +stdout 264 +stderr 264 +stdout 265 +stderr 265 +stdout 266 +stderr 266 +stdout 267 +stderr 267 +stdout 268 +stderr 268 +stdout 269 +stderr 269 +stdout 270 +stderr 270 +stdout 271 +stderr 271 +stdout 272 +stderr 272 +stdout 273 +stderr 273 +stdout 274 +stderr 274 +stdout 275 +stderr 275 +stdout 276 +stderr 276 +stdout 277 +stderr 277 +stdout 278 +stderr 278 +stdout 279 +stderr 279 +stdout 280 +stderr 280 +stdout 281 +stderr 281 +stdout 282 +stderr 282 +stdout 283 +stderr 283 +stdout 284 +stderr 284 +stdout 285 +stderr 285 +stdout 286 +stderr 286 +stdout 287 +stderr 287 +stdout 288 +stderr 288 +stdout 289 +stderr 289 +stdout 290 +stderr 290 +stdout 291 +stderr 291 +stdout 292 +stderr 292 +stdout 293 +stderr 293 +stdout 294 +stderr 294 +stdout 295 +stderr 295 +stdout 296 +stderr 296 +stdout 297 +stderr 297 +stdout 298 +stderr 298 +stdout 299 +stderr 299 +stdout 300 +stderr 300 +stdout 301 +stderr 301 +stdout 302 +stderr 302 +stdout 303 +stderr 303 +stdout 304 +stderr 304 +stdout 305 +stderr 305 +stdout 306 +stderr 306 +stdout 307 +stderr 307 +stdout 308 +stderr 308 +stdout 309 +stderr 309 +stdout 310 +stderr 310 +stdout 311 +stderr 311 +stdout 312 +stderr 312 +stdout 313 +stderr 313 +stdout 314 +stderr 314 +stdout 315 +stderr 315 +stdout 316 +stderr 316 +stdout 317 +stderr 317 +stdout 318 +stderr 318 +stdout 319 +stderr 319 +stdout 320 +stderr 320 +stdout 321 +stderr 321 +stdout 322 +stderr 322 +stdout 323 +stderr 323 +stdout 324 +stderr 324 +stdout 325 +stderr 325 +stdout 326 +stderr 326 +stdout 327 +stderr 327 +stdout 328 +stderr 328 +stdout 329 +stderr 329 +stdout 330 +stderr 330 +stdout 331 +stderr 331 +stdout 332 +stderr 332 +stdout 333 +stderr 333 +stdout 334 +stderr 334 +stdout 335 +stderr 335 +stdout 336 +stderr 336 +stdout 337 +stderr 337 +stdout 338 +stderr 338 +stdout 339 +stderr 339 +stdout 340 +stderr 340 +stdout 341 +stderr 341 +stdout 342 +stderr 342 +stdout 343 +stderr 343 +stdout 344 +stderr 344 +stdout 345 +stderr 345 +stdout 346 +stderr 346 +stdout 347 +stderr 347 +stdout 348 +stderr 348 +stdout 349 +stderr 349 +stdout 350 +stderr 350 +stdout 351 +stderr 351 +stdout 352 +stderr 352 +stdout 353 +stderr 353 +stdout 354 +stderr 354 +stdout 355 +stderr 355 +stdout 356 +stderr 356 +stdout 357 +stderr 357 +stdout 358 +stderr 358 +stdout 359 +stderr 359 +stdout 360 +stderr 360 +stdout 361 +stderr 361 +stdout 362 +stderr 362 +stdout 363 +stderr 363 +stdout 364 +stderr 364 +stdout 365 +stderr 365 +stdout 366 +stderr 366 +stdout 367 +stderr 367 +stdout 368 +stderr 368 +stdout 369 +stderr 369 +stdout 370 +stderr 370 +stdout 371 +stderr 371 +stdout 372 +stderr 372 +stdout 373 +stderr 373 +stdout 374 +stderr 374 +stdout 375 +stderr 375 +stdout 376 +stderr 376 +stdout 377 +stderr 377 +stdout 378 +stderr 378 +stdout 379 +stderr 379 +stdout 380 +stderr 380 +stdout 381 +stderr 381 +stdout 382 +stderr 382 +stdout 383 +stderr 383 +stdout 384 +stderr 384 +stdout 385 +stderr 385 +stdout 386 +stderr 386 +stdout 387 +stderr 387 +stdout 388 +stderr 388 +stdout 389 +stderr 389 +stdout 390 +stderr 390 +stdout 391 +stderr 391 +stdout 392 +stderr 392 +stdout 393 +stderr 393 +stdout 394 +stderr 394 +stdout 395 +stderr 395 +stdout 396 +stderr 396 +stdout 397 +stderr 397 +stdout 398 +stderr 398 +stdout 399 +stderr 399 +stdout 400 +stderr 400 +stdout 401 +stderr 401 +stdout 402 +stderr 402 +stdout 403 +stderr 403 +stdout 404 +stderr 404 +stdout 405 +stderr 405 +stdout 406 +stderr 406 +stdout 407 +stderr 407 +stdout 408 +stderr 408 +stdout 409 +stderr 409 +stdout 410 +stderr 410 +stdout 411 +stderr 411 +stdout 412 +stderr 412 +stdout 413 +stderr 413 +stdout 414 +stderr 414 +stdout 415 +stderr 415 +stdout 416 +stderr 416 +stdout 417 +stderr 417 +stdout 418 +stderr 418 +stdout 419 +stderr 419 +stdout 420 +stderr 420 +stdout 421 +stderr 421 +stdout 422 +stderr 422 +stdout 423 +stderr 423 +stdout 424 +stderr 424 +stdout 425 +stderr 425 +stdout 426 +stderr 426 +stdout 427 +stderr 427 +stdout 428 +stderr 428 +stdout 429 +stderr 429 +stdout 430 +stderr 430 +stdout 431 +stderr 431 +stdout 432 +stderr 432 +stdout 433 +stderr 433 +stdout 434 +stderr 434 +stdout 435 +stderr 435 +stdout 436 +stderr 436 +stdout 437 +stderr 437 +stdout 438 +stderr 438 +stdout 439 +stderr 439 +stdout 440 +stderr 440 +stdout 441 +stderr 441 +stdout 442 +stderr 442 +stdout 443 +stderr 443 +stdout 444 +stderr 444 +stdout 445 +stderr 445 +stdout 446 +stderr 446 +stdout 447 +stderr 447 +stdout 448 +stderr 448 +stdout 449 +stderr 449 +stdout 450 +stderr 450 +stdout 451 +stderr 451 +stdout 452 +stderr 452 +stdout 453 +stderr 453 +stdout 454 +stderr 454 +stdout 455 +stderr 455 +stdout 456 +stderr 456 +stdout 457 +stderr 457 +stdout 458 +stderr 458 +stdout 459 +stderr 459 +stdout 460 +stderr 460 +stdout 461 +stderr 461 +stdout 462 +stderr 462 +stdout 463 +stderr 463 +stdout 464 +stderr 464 +stdout 465 +stderr 465 +stdout 466 +stderr 466 +stdout 467 +stderr 467 +stdout 468 +stderr 468 +stdout 469 +stderr 469 +stdout 470 +stderr 470 +stdout 471 +stderr 471 +stdout 472 +stderr 472 +stdout 473 +stderr 473 +stdout 474 +stderr 474 +stdout 475 +stderr 475 +stdout 476 +stderr 476 +stdout 477 +stderr 477 +stdout 478 +stderr 478 +stdout 479 +stderr 479 +stdout 480 +stderr 480 +stdout 481 +stderr 481 +stdout 482 +stderr 482 +stdout 483 +stderr 483 +stdout 484 +stderr 484 +stdout 485 +stderr 485 +stdout 486 +stderr 486 +stdout 487 +stderr 487 +stdout 488 +stderr 488 +stdout 489 +stderr 489 +stdout 490 +stderr 490 +stdout 491 +stderr 491 +stdout 492 +stderr 492 +stdout 493 +stderr 493 +stdout 494 +stderr 494 +stdout 495 +stderr 495 +stdout 496 +stderr 496 +stdout 497 +stderr 497 +stdout 498 +stderr 498 +stdout 499 +stderr 499 +stdout 500 +stderr 500 +stdout 501 +stderr 501 +stdout 502 +stderr 502 +stdout 503 +stderr 503 +stdout 504 +stderr 504 +stdout 505 +stderr 505 +stdout 506 +stderr 506 +stdout 507 +stderr 507 +stdout 508 +stderr 508 +stdout 509 +stderr 509 +stdout 510 +stderr 510 +stdout 511 +stderr 511 +stdout 512 +stderr 512 +stdout 513 +stderr 513 +stdout 514 +stderr 514 +stdout 515 +stderr 515 +stdout 516 +stderr 516 +stdout 517 +stderr 517 +stdout 518 +stderr 518 +stdout 519 +stderr 519 +stdout 520 +stderr 520 +stdout 521 +stderr 521 +stdout 522 +stderr 522 +stdout 523 +stderr 523 +stdout 524 +stderr 524 +stdout 525 +stderr 525 +stdout 526 +stderr 526 +stdout 527 +stderr 527 +stdout 528 +stderr 528 +stdout 529 +stderr 529 +stdout 530 +stderr 530 +stdout 531 +stderr 531 +stdout 532 +stderr 532 +stdout 533 +stderr 533 +stdout 534 +stderr 534 +stdout 535 +stderr 535 +stdout 536 +stderr 536 +stdout 537 +stderr 537 +stdout 538 +stderr 538 +stdout 539 +stderr 539 +stdout 540 +stderr 540 +stdout 541 +stderr 541 +stdout 542 +stderr 542 +stdout 543 +stderr 543 +stdout 544 +stderr 544 +stdout 545 +stderr 545 +stdout 546 +stderr 546 +stdout 547 +stderr 547 +stdout 548 +stderr 548 +stdout 549 +stderr 549 +stdout 550 +stderr 550 +stdout 551 +stderr 551 +stdout 552 +stderr 552 +stdout 553 +stderr 553 +stdout 554 +stderr 554 +stdout 555 +stderr 555 +stdout 556 +stderr 556 +stdout 557 +stderr 557 +stdout 558 +stderr 558 +stdout 559 +stderr 559 +stdout 560 +stderr 560 +stdout 561 +stderr 561 +stdout 562 +stderr 562 +stdout 563 +stderr 563 +stdout 564 +stderr 564 +stdout 565 +stderr 565 +stdout 566 +stderr 566 +stdout 567 +stderr 567 +stdout 568 +stderr 568 +stdout 569 +stderr 569 +stdout 570 +stderr 570 +stdout 571 +stderr 571 +stdout 572 +stderr 572 +stdout 573 +stderr 573 +stdout 574 +stderr 574 +stdout 575 +stderr 575 +stdout 576 +stderr 576 +stdout 577 +stderr 577 +stdout 578 +stderr 578 +stdout 579 +stderr 579 +stdout 580 +stderr 580 +stdout 581 +stderr 581 +stdout 582 +stderr 582 +stdout 583 +stderr 583 +stdout 584 +stderr 584 +stdout 585 +stderr 585 +stdout 586 +stderr 586 +stdout 587 +stderr 587 +stdout 588 +stderr 588 +stdout 589 +stderr 589 +stdout 590 +stderr 590 +stdout 591 +stderr 591 +stdout 592 +stderr 592 +stdout 593 +stderr 593 +stdout 594 +stderr 594 +stdout 595 +stderr 595 +stdout 596 +stderr 596 +stdout 597 +stderr 597 +stdout 598 +stderr 598 +stdout 599 +stderr 599 +stdout 600 +stderr 600 +stdout 601 +stderr 601 +stdout 602 +stderr 602 +stdout 603 +stderr 603 +stdout 604 +stderr 604 +stdout 605 +stderr 605 +stdout 606 +stderr 606 +stdout 607 +stderr 607 +stdout 608 +stderr 608 +stdout 609 +stderr 609 +stdout 610 +stderr 610 +stdout 611 +stderr 611 +stdout 612 +stderr 612 +stdout 613 +stderr 613 +stdout 614 +stderr 614 +stdout 615 +stderr 615 +stdout 616 +stderr 616 +stdout 617 +stderr 617 +stdout 618 +stderr 618 +stdout 619 +stderr 619 +stdout 620 +stderr 620 +stdout 621 +stderr 621 +stdout 622 +stderr 622 +stdout 623 +stderr 623 +stdout 624 +stderr 624 +stdout 625 +stderr 625 +stdout 626 +stderr 626 +stdout 627 +stderr 627 +stdout 628 +stderr 628 +stdout 629 +stderr 629 +stdout 630 +stderr 630 +stdout 631 +stderr 631 +stdout 632 +stderr 632 +stdout 633 +stderr 633 +stdout 634 +stderr 634 +stdout 635 +stderr 635 +stdout 636 +stderr 636 +stdout 637 +stderr 637 +stdout 638 +stderr 638 +stdout 639 +stderr 639 +stdout 640 +stderr 640 +stdout 641 +stderr 641 +stdout 642 +stderr 642 +stdout 643 +stderr 643 +stdout 644 +stderr 644 +stdout 645 +stderr 645 +stdout 646 +stderr 646 +stdout 647 +stderr 647 +stdout 648 +stderr 648 +stdout 649 +stderr 649 +stdout 650 +stderr 650 +stdout 651 +stderr 651 +stdout 652 +stderr 652 +stdout 653 +stderr 653 +stdout 654 +stderr 654 +stdout 655 +stderr 655 +stdout 656 +stderr 656 +stdout 657 +stderr 657 +stdout 658 +stderr 658 +stdout 659 +stderr 659 +stdout 660 +stderr 660 +stdout 661 +stderr 661 +stdout 662 +stderr 662 +stdout 663 +stderr 663 +stdout 664 +stderr 664 +stdout 665 +stderr 665 +stdout 666 +stderr 666 +stdout 667 +stderr 667 +stdout 668 +stderr 668 +stdout 669 +stderr 669 +stdout 670 +stderr 670 +stdout 671 +stderr 671 +stdout 672 +stderr 672 +stdout 673 +stderr 673 +stdout 674 +stderr 674 +stdout 675 +stderr 675 +stdout 676 +stderr 676 +stdout 677 +stderr 677 +stdout 678 +stderr 678 +stdout 679 +stderr 679 +stdout 680 +stderr 680 +stdout 681 +stderr 681 +stdout 682 +stderr 682 +stdout 683 +stderr 683 +stdout 684 +stderr 684 +stdout 685 +stderr 685 +stdout 686 +stderr 686 +stdout 687 +stderr 687 +stdout 688 +stderr 688 +stdout 689 +stderr 689 +stdout 690 +stderr 690 +stdout 691 +stderr 691 +stdout 692 +stderr 692 +stdout 693 +stderr 693 +stdout 694 +stderr 694 +stdout 695 +stderr 695 +stdout 696 +stderr 696 +stdout 697 +stderr 697 +stdout 698 +stderr 698 +stdout 699 +stderr 699 +stdout 700 +stderr 700 +stdout 701 +stderr 701 +stdout 702 +stderr 702 +stdout 703 +stderr 703 +stdout 704 +stderr 704 +stdout 705 +stderr 705 +stdout 706 +stderr 706 +stdout 707 +stderr 707 +stdout 708 +stderr 708 +stdout 709 +stderr 709 +stdout 710 +stderr 710 +stdout 711 +stderr 711 +stdout 712 +stderr 712 +stdout 713 +stderr 713 +stdout 714 +stderr 714 +stdout 715 +stderr 715 +stdout 716 +stderr 716 +stdout 717 +stderr 717 +stdout 718 +stderr 718 +stdout 719 +stderr 719 +stdout 720 +stderr 720 +stdout 721 +stderr 721 +stdout 722 +stderr 722 +stdout 723 +stderr 723 +stdout 724 +stderr 724 +stdout 725 +stderr 725 +stdout 726 +stderr 726 +stdout 727 +stderr 727 +stdout 728 +stderr 728 +stdout 729 +stderr 729 +stdout 730 +stderr 730 +stdout 731 +stderr 731 +stdout 732 +stderr 732 +stdout 733 +stderr 733 +stdout 734 +stderr 734 +stdout 735 +stderr 735 +stdout 736 +stderr 736 +stdout 737 +stderr 737 +stdout 738 +stderr 738 +stdout 739 +stderr 739 +stdout 740 +stderr 740 +stdout 741 +stderr 741 +stdout 742 +stderr 742 +stdout 743 +stderr 743 +stdout 744 +stderr 744 +stdout 745 +stderr 745 +stdout 746 +stderr 746 +stdout 747 +stderr 747 +stdout 748 +stderr 748 +stdout 749 +stderr 749 +stdout 750 +stderr 750 +stdout 751 +stderr 751 +stdout 752 +stderr 752 +stdout 753 +stderr 753 +stdout 754 +stderr 754 +stdout 755 +stderr 755 +stdout 756 +stderr 756 +stdout 757 +stderr 757 +stdout 758 +stderr 758 +stdout 759 +stderr 759 +stdout 760 +stderr 760 +stdout 761 +stderr 761 +stdout 762 +stderr 762 +stdout 763 +stderr 763 +stdout 764 +stderr 764 +stdout 765 +stderr 765 +stdout 766 +stderr 766 +stdout 767 +stderr 767 +stdout 768 +stderr 768 +stdout 769 +stderr 769 +stdout 770 +stderr 770 +stdout 771 +stderr 771 +stdout 772 +stderr 772 +stdout 773 +stderr 773 +stdout 774 +stderr 774 +stdout 775 +stderr 775 +stdout 776 +stderr 776 +stdout 777 +stderr 777 +stdout 778 +stderr 778 +stdout 779 +stderr 779 +stdout 780 +stderr 780 +stdout 781 +stderr 781 +stdout 782 +stderr 782 +stdout 783 +stderr 783 +stdout 784 +stderr 784 +stdout 785 +stderr 785 +stdout 786 +stderr 786 +stdout 787 +stderr 787 +stdout 788 +stderr 788 +stdout 789 +stderr 789 +stdout 790 +stderr 790 +stdout 791 +stderr 791 +stdout 792 +stderr 792 +stdout 793 +stderr 793 +stdout 794 +stderr 794 +stdout 795 +stderr 795 +stdout 796 +stderr 796 +stdout 797 +stderr 797 +stdout 798 +stderr 798 +stdout 799 +stderr 799 +stdout 800 +stderr 800 +stdout 801 +stderr 801 +stdout 802 +stderr 802 +stdout 803 +stderr 803 +stdout 804 +stderr 804 +stdout 805 +stderr 805 +stdout 806 +stderr 806 +stdout 807 +stderr 807 +stdout 808 +stderr 808 +stdout 809 +stderr 809 +stdout 810 +stderr 810 +stdout 811 +stderr 811 +stdout 812 +stderr 812 +stdout 813 +stderr 813 +stdout 814 +stderr 814 +stdout 815 +stderr 815 +stdout 816 +stderr 816 +stdout 817 +stderr 817 +stdout 818 +stderr 818 +stdout 819 +stderr 819 +stdout 820 +stderr 820 +stdout 821 +stderr 821 +stdout 822 +stderr 822 +stdout 823 +stderr 823 +stdout 824 +stderr 824 +stdout 825 +stderr 825 +stdout 826 +stderr 826 +stdout 827 +stderr 827 +stdout 828 +stderr 828 +stdout 829 +stderr 829 +stdout 830 +stderr 830 +stdout 831 +stderr 831 +stdout 832 +stderr 832 +stdout 833 +stderr 833 +stdout 834 +stderr 834 +stdout 835 +stderr 835 +stdout 836 +stderr 836 +stdout 837 +stderr 837 +stdout 838 +stderr 838 +stdout 839 +stderr 839 +stdout 840 +stderr 840 +stdout 841 +stderr 841 +stdout 842 +stderr 842 +stdout 843 +stderr 843 +stdout 844 +stderr 844 +stdout 845 +stderr 845 +stdout 846 +stderr 846 +stdout 847 +stderr 847 +stdout 848 +stderr 848 +stdout 849 +stderr 849 +stdout 850 +stderr 850 +stdout 851 +stderr 851 +stdout 852 +stderr 852 +stdout 853 +stderr 853 +stdout 854 +stderr 854 +stdout 855 +stderr 855 +stdout 856 +stderr 856 +stdout 857 +stderr 857 +stdout 858 +stderr 858 +stdout 859 +stderr 859 +stdout 860 +stderr 860 +stdout 861 +stderr 861 +stdout 862 +stderr 862 +stdout 863 +stderr 863 +stdout 864 +stderr 864 +stdout 865 +stderr 865 +stdout 866 +stderr 866 +stdout 867 +stderr 867 +stdout 868 +stderr 868 +stdout 869 +stderr 869 +stdout 870 +stderr 870 +stdout 871 +stderr 871 +stdout 872 +stderr 872 +stdout 873 +stderr 873 +stdout 874 +stderr 874 +stdout 875 +stderr 875 +stdout 876 +stderr 876 +stdout 877 +stderr 877 +stdout 878 +stderr 878 +stdout 879 +stderr 879 +stdout 880 +stderr 880 +stdout 881 +stderr 881 +stdout 882 +stderr 882 +stdout 883 +stderr 883 +stdout 884 +stderr 884 +stdout 885 +stderr 885 +stdout 886 +stderr 886 +stdout 887 +stderr 887 +stdout 888 +stderr 888 +stdout 889 +stderr 889 +stdout 890 +stderr 890 +stdout 891 +stderr 891 +stdout 892 +stderr 892 +stdout 893 +stderr 893 +stdout 894 +stderr 894 +stdout 895 +stderr 895 +stdout 896 +stderr 896 +stdout 897 +stderr 897 +stdout 898 +stderr 898 +stdout 899 +stderr 899 +stdout 900 +stderr 900 +stdout 901 +stderr 901 +stdout 902 +stderr 902 +stdout 903 +stderr 903 +stdout 904 +stderr 904 +stdout 905 +stderr 905 +stdout 906 +stderr 906 +stdout 907 +stderr 907 +stdout 908 +stderr 908 +stdout 909 +stderr 909 +stdout 910 +stderr 910 +stdout 911 +stderr 911 +stdout 912 +stderr 912 +stdout 913 +stderr 913 +stdout 914 +stderr 914 +stdout 915 +stderr 915 +stdout 916 +stderr 916 +stdout 917 +stderr 917 +stdout 918 +stderr 918 +stdout 919 +stderr 919 +stdout 920 +stderr 920 +stdout 921 +stderr 921 +stdout 922 +stderr 922 +stdout 923 +stderr 923 +stdout 924 +stderr 924 +stdout 925 +stderr 925 +stdout 926 +stderr 926 +stdout 927 +stderr 927 +stdout 928 +stderr 928 +stdout 929 +stderr 929 +stdout 930 +stderr 930 +stdout 931 +stderr 931 +stdout 932 +stderr 932 +stdout 933 +stderr 933 +stdout 934 +stderr 934 +stdout 935 +stderr 935 +stdout 936 +stderr 936 +stdout 937 +stderr 937 +stdout 938 +stderr 938 +stdout 939 +stderr 939 +stdout 940 +stderr 940 +stdout 941 +stderr 941 +stdout 942 +stderr 942 +stdout 943 +stderr 943 +stdout 944 +stderr 944 +stdout 945 +stderr 945 +stdout 946 +stderr 946 +stdout 947 +stderr 947 +stdout 948 +stderr 948 +stdout 949 +stderr 949 +stdout 950 +stderr 950 +stdout 951 +stderr 951 +stdout 952 +stderr 952 +stdout 953 +stderr 953 +stdout 954 +stderr 954 +stdout 955 +stderr 955 +stdout 956 +stderr 956 +stdout 957 +stderr 957 +stdout 958 +stderr 958 +stdout 959 +stderr 959 +stdout 960 +stderr 960 +stdout 961 +stderr 961 +stdout 962 +stderr 962 +stdout 963 +stderr 963 +stdout 964 +stderr 964 +stdout 965 +stderr 965 +stdout 966 +stderr 966 +stdout 967 +stderr 967 +stdout 968 +stderr 968 +stdout 969 +stderr 969 +stdout 970 +stderr 970 +stdout 971 +stderr 971 +stdout 972 +stderr 972 +stdout 973 +stderr 973 +stdout 974 +stderr 974 +stdout 975 +stderr 975 +stdout 976 +stderr 976 +stdout 977 +stderr 977 +stdout 978 +stderr 978 +stdout 979 +stderr 979 +stdout 980 +stderr 980 +stdout 981 +stderr 981 +stdout 982 +stderr 982 +stdout 983 +stderr 983 +stdout 984 +stderr 984 +stdout 985 +stderr 985 +stdout 986 +stderr 986 +stdout 987 +stderr 987 +stdout 988 +stderr 988 +stdout 989 +stderr 989 +stdout 990 +stderr 990 +stdout 991 +stderr 991 +stdout 992 +stderr 992 +stdout 993 +stderr 993 +stdout 994 +stderr 994 +stdout 995 +stderr 995 +stdout 996 +stderr 996 +stdout 997 +stderr 997 +stdout 998 +stderr 998 +stdout 999 +stderr 999 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stdout.txt b/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stdout.txt new file mode 100644 index 0000000..d3649d0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/1000-stdout.txt @@ -0,0 +1,1000 @@ +stdout 0 +stdout 1 +stdout 2 +stdout 3 +stdout 4 +stdout 5 +stdout 6 +stdout 7 +stdout 8 +stdout 9 +stdout 10 +stdout 11 +stdout 12 +stdout 13 +stdout 14 +stdout 15 +stdout 16 +stdout 17 +stdout 18 +stdout 19 +stdout 20 +stdout 21 +stdout 22 +stdout 23 +stdout 24 +stdout 25 +stdout 26 +stdout 27 +stdout 28 +stdout 29 +stdout 30 +stdout 31 +stdout 32 +stdout 33 +stdout 34 +stdout 35 +stdout 36 +stdout 37 +stdout 38 +stdout 39 +stdout 40 +stdout 41 +stdout 42 +stdout 43 +stdout 44 +stdout 45 +stdout 46 +stdout 47 +stdout 48 +stdout 49 +stdout 50 +stdout 51 +stdout 52 +stdout 53 +stdout 54 +stdout 55 +stdout 56 +stdout 57 +stdout 58 +stdout 59 +stdout 60 +stdout 61 +stdout 62 +stdout 63 +stdout 64 +stdout 65 +stdout 66 +stdout 67 +stdout 68 +stdout 69 +stdout 70 +stdout 71 +stdout 72 +stdout 73 +stdout 74 +stdout 75 +stdout 76 +stdout 77 +stdout 78 +stdout 79 +stdout 80 +stdout 81 +stdout 82 +stdout 83 +stdout 84 +stdout 85 +stdout 86 +stdout 87 +stdout 88 +stdout 89 +stdout 90 +stdout 91 +stdout 92 +stdout 93 +stdout 94 +stdout 95 +stdout 96 +stdout 97 +stdout 98 +stdout 99 +stdout 100 +stdout 101 +stdout 102 +stdout 103 +stdout 104 +stdout 105 +stdout 106 +stdout 107 +stdout 108 +stdout 109 +stdout 110 +stdout 111 +stdout 112 +stdout 113 +stdout 114 +stdout 115 +stdout 116 +stdout 117 +stdout 118 +stdout 119 +stdout 120 +stdout 121 +stdout 122 +stdout 123 +stdout 124 +stdout 125 +stdout 126 +stdout 127 +stdout 128 +stdout 129 +stdout 130 +stdout 131 +stdout 132 +stdout 133 +stdout 134 +stdout 135 +stdout 136 +stdout 137 +stdout 138 +stdout 139 +stdout 140 +stdout 141 +stdout 142 +stdout 143 +stdout 144 +stdout 145 +stdout 146 +stdout 147 +stdout 148 +stdout 149 +stdout 150 +stdout 151 +stdout 152 +stdout 153 +stdout 154 +stdout 155 +stdout 156 +stdout 157 +stdout 158 +stdout 159 +stdout 160 +stdout 161 +stdout 162 +stdout 163 +stdout 164 +stdout 165 +stdout 166 +stdout 167 +stdout 168 +stdout 169 +stdout 170 +stdout 171 +stdout 172 +stdout 173 +stdout 174 +stdout 175 +stdout 176 +stdout 177 +stdout 178 +stdout 179 +stdout 180 +stdout 181 +stdout 182 +stdout 183 +stdout 184 +stdout 185 +stdout 186 +stdout 187 +stdout 188 +stdout 189 +stdout 190 +stdout 191 +stdout 192 +stdout 193 +stdout 194 +stdout 195 +stdout 196 +stdout 197 +stdout 198 +stdout 199 +stdout 200 +stdout 201 +stdout 202 +stdout 203 +stdout 204 +stdout 205 +stdout 206 +stdout 207 +stdout 208 +stdout 209 +stdout 210 +stdout 211 +stdout 212 +stdout 213 +stdout 214 +stdout 215 +stdout 216 +stdout 217 +stdout 218 +stdout 219 +stdout 220 +stdout 221 +stdout 222 +stdout 223 +stdout 224 +stdout 225 +stdout 226 +stdout 227 +stdout 228 +stdout 229 +stdout 230 +stdout 231 +stdout 232 +stdout 233 +stdout 234 +stdout 235 +stdout 236 +stdout 237 +stdout 238 +stdout 239 +stdout 240 +stdout 241 +stdout 242 +stdout 243 +stdout 244 +stdout 245 +stdout 246 +stdout 247 +stdout 248 +stdout 249 +stdout 250 +stdout 251 +stdout 252 +stdout 253 +stdout 254 +stdout 255 +stdout 256 +stdout 257 +stdout 258 +stdout 259 +stdout 260 +stdout 261 +stdout 262 +stdout 263 +stdout 264 +stdout 265 +stdout 266 +stdout 267 +stdout 268 +stdout 269 +stdout 270 +stdout 271 +stdout 272 +stdout 273 +stdout 274 +stdout 275 +stdout 276 +stdout 277 +stdout 278 +stdout 279 +stdout 280 +stdout 281 +stdout 282 +stdout 283 +stdout 284 +stdout 285 +stdout 286 +stdout 287 +stdout 288 +stdout 289 +stdout 290 +stdout 291 +stdout 292 +stdout 293 +stdout 294 +stdout 295 +stdout 296 +stdout 297 +stdout 298 +stdout 299 +stdout 300 +stdout 301 +stdout 302 +stdout 303 +stdout 304 +stdout 305 +stdout 306 +stdout 307 +stdout 308 +stdout 309 +stdout 310 +stdout 311 +stdout 312 +stdout 313 +stdout 314 +stdout 315 +stdout 316 +stdout 317 +stdout 318 +stdout 319 +stdout 320 +stdout 321 +stdout 322 +stdout 323 +stdout 324 +stdout 325 +stdout 326 +stdout 327 +stdout 328 +stdout 329 +stdout 330 +stdout 331 +stdout 332 +stdout 333 +stdout 334 +stdout 335 +stdout 336 +stdout 337 +stdout 338 +stdout 339 +stdout 340 +stdout 341 +stdout 342 +stdout 343 +stdout 344 +stdout 345 +stdout 346 +stdout 347 +stdout 348 +stdout 349 +stdout 350 +stdout 351 +stdout 352 +stdout 353 +stdout 354 +stdout 355 +stdout 356 +stdout 357 +stdout 358 +stdout 359 +stdout 360 +stdout 361 +stdout 362 +stdout 363 +stdout 364 +stdout 365 +stdout 366 +stdout 367 +stdout 368 +stdout 369 +stdout 370 +stdout 371 +stdout 372 +stdout 373 +stdout 374 +stdout 375 +stdout 376 +stdout 377 +stdout 378 +stdout 379 +stdout 380 +stdout 381 +stdout 382 +stdout 383 +stdout 384 +stdout 385 +stdout 386 +stdout 387 +stdout 388 +stdout 389 +stdout 390 +stdout 391 +stdout 392 +stdout 393 +stdout 394 +stdout 395 +stdout 396 +stdout 397 +stdout 398 +stdout 399 +stdout 400 +stdout 401 +stdout 402 +stdout 403 +stdout 404 +stdout 405 +stdout 406 +stdout 407 +stdout 408 +stdout 409 +stdout 410 +stdout 411 +stdout 412 +stdout 413 +stdout 414 +stdout 415 +stdout 416 +stdout 417 +stdout 418 +stdout 419 +stdout 420 +stdout 421 +stdout 422 +stdout 423 +stdout 424 +stdout 425 +stdout 426 +stdout 427 +stdout 428 +stdout 429 +stdout 430 +stdout 431 +stdout 432 +stdout 433 +stdout 434 +stdout 435 +stdout 436 +stdout 437 +stdout 438 +stdout 439 +stdout 440 +stdout 441 +stdout 442 +stdout 443 +stdout 444 +stdout 445 +stdout 446 +stdout 447 +stdout 448 +stdout 449 +stdout 450 +stdout 451 +stdout 452 +stdout 453 +stdout 454 +stdout 455 +stdout 456 +stdout 457 +stdout 458 +stdout 459 +stdout 460 +stdout 461 +stdout 462 +stdout 463 +stdout 464 +stdout 465 +stdout 466 +stdout 467 +stdout 468 +stdout 469 +stdout 470 +stdout 471 +stdout 472 +stdout 473 +stdout 474 +stdout 475 +stdout 476 +stdout 477 +stdout 478 +stdout 479 +stdout 480 +stdout 481 +stdout 482 +stdout 483 +stdout 484 +stdout 485 +stdout 486 +stdout 487 +stdout 488 +stdout 489 +stdout 490 +stdout 491 +stdout 492 +stdout 493 +stdout 494 +stdout 495 +stdout 496 +stdout 497 +stdout 498 +stdout 499 +stdout 500 +stdout 501 +stdout 502 +stdout 503 +stdout 504 +stdout 505 +stdout 506 +stdout 507 +stdout 508 +stdout 509 +stdout 510 +stdout 511 +stdout 512 +stdout 513 +stdout 514 +stdout 515 +stdout 516 +stdout 517 +stdout 518 +stdout 519 +stdout 520 +stdout 521 +stdout 522 +stdout 523 +stdout 524 +stdout 525 +stdout 526 +stdout 527 +stdout 528 +stdout 529 +stdout 530 +stdout 531 +stdout 532 +stdout 533 +stdout 534 +stdout 535 +stdout 536 +stdout 537 +stdout 538 +stdout 539 +stdout 540 +stdout 541 +stdout 542 +stdout 543 +stdout 544 +stdout 545 +stdout 546 +stdout 547 +stdout 548 +stdout 549 +stdout 550 +stdout 551 +stdout 552 +stdout 553 +stdout 554 +stdout 555 +stdout 556 +stdout 557 +stdout 558 +stdout 559 +stdout 560 +stdout 561 +stdout 562 +stdout 563 +stdout 564 +stdout 565 +stdout 566 +stdout 567 +stdout 568 +stdout 569 +stdout 570 +stdout 571 +stdout 572 +stdout 573 +stdout 574 +stdout 575 +stdout 576 +stdout 577 +stdout 578 +stdout 579 +stdout 580 +stdout 581 +stdout 582 +stdout 583 +stdout 584 +stdout 585 +stdout 586 +stdout 587 +stdout 588 +stdout 589 +stdout 590 +stdout 591 +stdout 592 +stdout 593 +stdout 594 +stdout 595 +stdout 596 +stdout 597 +stdout 598 +stdout 599 +stdout 600 +stdout 601 +stdout 602 +stdout 603 +stdout 604 +stdout 605 +stdout 606 +stdout 607 +stdout 608 +stdout 609 +stdout 610 +stdout 611 +stdout 612 +stdout 613 +stdout 614 +stdout 615 +stdout 616 +stdout 617 +stdout 618 +stdout 619 +stdout 620 +stdout 621 +stdout 622 +stdout 623 +stdout 624 +stdout 625 +stdout 626 +stdout 627 +stdout 628 +stdout 629 +stdout 630 +stdout 631 +stdout 632 +stdout 633 +stdout 634 +stdout 635 +stdout 636 +stdout 637 +stdout 638 +stdout 639 +stdout 640 +stdout 641 +stdout 642 +stdout 643 +stdout 644 +stdout 645 +stdout 646 +stdout 647 +stdout 648 +stdout 649 +stdout 650 +stdout 651 +stdout 652 +stdout 653 +stdout 654 +stdout 655 +stdout 656 +stdout 657 +stdout 658 +stdout 659 +stdout 660 +stdout 661 +stdout 662 +stdout 663 +stdout 664 +stdout 665 +stdout 666 +stdout 667 +stdout 668 +stdout 669 +stdout 670 +stdout 671 +stdout 672 +stdout 673 +stdout 674 +stdout 675 +stdout 676 +stdout 677 +stdout 678 +stdout 679 +stdout 680 +stdout 681 +stdout 682 +stdout 683 +stdout 684 +stdout 685 +stdout 686 +stdout 687 +stdout 688 +stdout 689 +stdout 690 +stdout 691 +stdout 692 +stdout 693 +stdout 694 +stdout 695 +stdout 696 +stdout 697 +stdout 698 +stdout 699 +stdout 700 +stdout 701 +stdout 702 +stdout 703 +stdout 704 +stdout 705 +stdout 706 +stdout 707 +stdout 708 +stdout 709 +stdout 710 +stdout 711 +stdout 712 +stdout 713 +stdout 714 +stdout 715 +stdout 716 +stdout 717 +stdout 718 +stdout 719 +stdout 720 +stdout 721 +stdout 722 +stdout 723 +stdout 724 +stdout 725 +stdout 726 +stdout 727 +stdout 728 +stdout 729 +stdout 730 +stdout 731 +stdout 732 +stdout 733 +stdout 734 +stdout 735 +stdout 736 +stdout 737 +stdout 738 +stdout 739 +stdout 740 +stdout 741 +stdout 742 +stdout 743 +stdout 744 +stdout 745 +stdout 746 +stdout 747 +stdout 748 +stdout 749 +stdout 750 +stdout 751 +stdout 752 +stdout 753 +stdout 754 +stdout 755 +stdout 756 +stdout 757 +stdout 758 +stdout 759 +stdout 760 +stdout 761 +stdout 762 +stdout 763 +stdout 764 +stdout 765 +stdout 766 +stdout 767 +stdout 768 +stdout 769 +stdout 770 +stdout 771 +stdout 772 +stdout 773 +stdout 774 +stdout 775 +stdout 776 +stdout 777 +stdout 778 +stdout 779 +stdout 780 +stdout 781 +stdout 782 +stdout 783 +stdout 784 +stdout 785 +stdout 786 +stdout 787 +stdout 788 +stdout 789 +stdout 790 +stdout 791 +stdout 792 +stdout 793 +stdout 794 +stdout 795 +stdout 796 +stdout 797 +stdout 798 +stdout 799 +stdout 800 +stdout 801 +stdout 802 +stdout 803 +stdout 804 +stdout 805 +stdout 806 +stdout 807 +stdout 808 +stdout 809 +stdout 810 +stdout 811 +stdout 812 +stdout 813 +stdout 814 +stdout 815 +stdout 816 +stdout 817 +stdout 818 +stdout 819 +stdout 820 +stdout 821 +stdout 822 +stdout 823 +stdout 824 +stdout 825 +stdout 826 +stdout 827 +stdout 828 +stdout 829 +stdout 830 +stdout 831 +stdout 832 +stdout 833 +stdout 834 +stdout 835 +stdout 836 +stdout 837 +stdout 838 +stdout 839 +stdout 840 +stdout 841 +stdout 842 +stdout 843 +stdout 844 +stdout 845 +stdout 846 +stdout 847 +stdout 848 +stdout 849 +stdout 850 +stdout 851 +stdout 852 +stdout 853 +stdout 854 +stdout 855 +stdout 856 +stdout 857 +stdout 858 +stdout 859 +stdout 860 +stdout 861 +stdout 862 +stdout 863 +stdout 864 +stdout 865 +stdout 866 +stdout 867 +stdout 868 +stdout 869 +stdout 870 +stdout 871 +stdout 872 +stdout 873 +stdout 874 +stdout 875 +stdout 876 +stdout 877 +stdout 878 +stdout 879 +stdout 880 +stdout 881 +stdout 882 +stdout 883 +stdout 884 +stdout 885 +stdout 886 +stdout 887 +stdout 888 +stdout 889 +stdout 890 +stdout 891 +stdout 892 +stdout 893 +stdout 894 +stdout 895 +stdout 896 +stdout 897 +stdout 898 +stdout 899 +stdout 900 +stdout 901 +stdout 902 +stdout 903 +stdout 904 +stdout 905 +stdout 906 +stdout 907 +stdout 908 +stdout 909 +stdout 910 +stdout 911 +stdout 912 +stdout 913 +stdout 914 +stdout 915 +stdout 916 +stdout 917 +stdout 918 +stdout 919 +stdout 920 +stdout 921 +stdout 922 +stdout 923 +stdout 924 +stdout 925 +stdout 926 +stdout 927 +stdout 928 +stdout 929 +stdout 930 +stdout 931 +stdout 932 +stdout 933 +stdout 934 +stdout 935 +stdout 936 +stdout 937 +stdout 938 +stdout 939 +stdout 940 +stdout 941 +stdout 942 +stdout 943 +stdout 944 +stdout 945 +stdout 946 +stdout 947 +stdout 948 +stdout 949 +stdout 950 +stdout 951 +stdout 952 +stdout 953 +stdout 954 +stdout 955 +stdout 956 +stdout 957 +stdout 958 +stdout 959 +stdout 960 +stdout 961 +stdout 962 +stdout 963 +stdout 964 +stdout 965 +stdout 966 +stdout 967 +stdout 968 +stdout 969 +stdout 970 +stdout 971 +stdout 972 +stdout 973 +stdout 974 +stdout 975 +stdout 976 +stdout 977 +stdout 978 +stdout 979 +stdout 980 +stdout 981 +stdout 982 +stdout 983 +stdout 984 +stdout 985 +stdout 986 +stdout 987 +stdout 988 +stdout 989 +stdout 990 +stdout 991 +stdout 992 +stdout 993 +stdout 994 +stdout 995 +stdout 996 +stdout 997 +stdout 998 +stdout 999 diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/create-files.sh b/platforms/android/assets/www/node_modules/exit/test/fixtures/create-files.sh new file mode 100755 index 0000000..6a526de --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/create-files.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +rm 10*.txt +for n in 10 100 1000; do + node log.js 0 $n stdout stderr &> $n-stdout-stderr.txt + node log.js 0 $n stdout &> $n-stdout.txt + node log.js 0 $n stderr &> $n-stderr.txt +done diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/log-broken.js b/platforms/android/assets/www/node_modules/exit/test/fixtures/log-broken.js new file mode 100644 index 0000000..74c8f12 --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/log-broken.js @@ -0,0 +1,23 @@ +var errorCode = process.argv[2]; +var max = process.argv[3]; +var modes = process.argv.slice(4); + +function stdout(message) { + if (modes.indexOf('stdout') === -1) { return; } + process.stdout.write('stdout ' + message + '\n'); +} + +function stderr(message) { + if (modes.indexOf('stderr') === -1) { return; } + process.stderr.write('stderr ' + message + '\n'); +} + +for (var i = 0; i < max; i++) { + stdout(i); + stderr(i); +} + +process.exit(errorCode); + +stdout('fail'); +stderr('fail'); diff --git a/platforms/android/assets/www/node_modules/exit/test/fixtures/log.js b/platforms/android/assets/www/node_modules/exit/test/fixtures/log.js new file mode 100644 index 0000000..8a9ed9a --- /dev/null +++ b/platforms/android/assets/www/node_modules/exit/test/fixtures/log.js @@ -0,0 +1,25 @@ +var exit = require('../../lib/exit'); + +var errorCode = process.argv[2]; +var max = process.argv[3]; +var modes = process.argv.slice(4); + +function stdout(message) { + if (modes.indexOf('stdout') === -1) { return; } + process.stdout.write('stdout ' + message + '\n'); +} + +function stderr(message) { + if (modes.indexOf('stderr') === -1) { return; } + process.stderr.write('stderr ' + message + '\n'); +} + +for (var i = 0; i < max; i++) { + stdout(i); + stderr(i); +} + +exit(errorCode); + +stdout('fail'); +stderr('fail'); diff --git a/platforms/android/assets/www/node_modules/glob/LICENSE b/platforms/android/assets/www/node_modules/glob/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/glob/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/glob/README.md b/platforms/android/assets/www/node_modules/glob/README.md new file mode 100644 index 0000000..9dd9384 --- /dev/null +++ b/platforms/android/assets/www/node_modules/glob/README.md @@ -0,0 +1,365 @@ +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +![](oh-my-glob.gif) + +## Usage + +Install with npm + +``` +npm i glob +``` + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Glob Primer + +"Globs" are the patterns you type when you do stuff like `ls *.js` on +the command line, or put `build/*` in a `.gitignore` file. + +Before parsing the path part patterns, braced sections are expanded +into a set. Braced sections start with `{` and end with `}`, with any +number of comma-delimited sections within. Braced sections may contain +slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in a +path portion: + +* `*` Matches 0 or more characters in a single path portion +* `?` Matches 1 character +* `[...]` Matches a range of characters, similar to a RegExp range. + If the first character of the range is `!` or `^` then it matches + any character not in the range. +* `!(pattern|pattern|pattern)` Matches anything that does not match + any of the patterns provided. +* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the + patterns provided. +* `+(pattern|pattern|pattern)` Matches one or more occurrences of the + patterns provided. +* `*(a|b|c)` Matches zero or more occurrences of the patterns provided +* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided +* `**` If a "globstar" is alone in a path portion, then it matches + zero or more directories and subdirectories searching for matches. + It does not crawl symlinked directories. + +### Dots + +If a file or directory path portion has a `.` as the first character, +then it will not match any glob pattern unless that pattern's +corresponding path part also has a `.` as its first character. + +For example, the pattern `a/.*/c` would match the file at `a/.b/c`. +However the pattern `a/*/c` would not, because `*` does not start with +a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has no +slashes in it, then it will seek for any file anywhere in the tree +with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. This +differs from the shell, where the pattern itself is returned. For +example: + + $ echo a*s*d*f + a*s*d*f + +To get the bash-style behavior, set the `nonull:true` in the options. + +### See Also: + +* `man sh` +* `man bash` (Search for "Pattern Matching") +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob.hasMagic(pattern, [options]) + +Returns `true` if there are any special characters in the pattern, and +`false` otherwise. + +Note that the options affect the results. If `noext:true` is set in +the options object, then `+(a|b)` will not be considered a magic +pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` +then that is considered magical, unless `nobrace:true` is set in the +options. + +## glob(pattern, [options], cb) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* `cb` `{Function}` + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* return: `{Array}` filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instantiating the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` `{String}` pattern to search for +* `options` `{Object}` +* `cb` `{Function}` Called when an error occurs, or matches are found + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `'FILE'` - Path exists, and is not a directory + * `'DIR'` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` +* `statCache` Cache of `fs.stat` results, to prevent statting the same + path multiple times. +* `symlinks` A record of which paths are symbolic links, which is + relevant in resolving `**` patterns. +* `realpathCache` An optional object which is passed to `fs.realpath` + to minimize unnecessary syscalls. It is stored on the instantiated + Glob object, and may be re-used. + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the specific + thing that matched. It is not deduplicated or resolved to a realpath. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `pause` Temporarily stop the search +* `resume` Resume the search +* `abort` Stop the search forever + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the Glob object, as well. + +If you are running many `glob` operations, you can pass a Glob object +as the `options` argument to a subsequent operation to shortcut some +`stat` and `readdir` calls. At the very least, you may pass in shared +`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that +parallel glob operations will be sped up by sharing information about +the filesystem. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. +* `silent` When an unusual error is encountered when attempting to + read a directory, a warning will be printed to stderr. Set the + `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered when attempting to + read a directory, the process will just continue on in search of + other matches. Set the `strict` option to raise an error in these + cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary + to set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `symlinks` A cache of known symbolic links. You may pass in a + previously generated `symlinks` object to save `lstat` calls when + resolving `**` matches. +* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. Set this + flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `debug` Set to enable debug logging in minimatch and glob. +* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. +* `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) +* `noext` Do not match `+(a|b)` "extglob" patterns. +* `nocase` Perform a case-insensitive match. Note: on + case-insensitive filesystems, non-magic patterns will match by + default, since `stat` and `readdir` will not raise errors. +* `matchBase` Perform a basename-only match if the pattern does not + contain any slash characters. That is, `*.js` would be treated as + equivalent to `**/*.js`, matching all js files in all directories. +* `nodir` Do not match directories, only files. (Note: to match + *only* directories, simply put a `/` at the end of the pattern.) +* `ignore` Add a pattern or an array of glob patterns to exclude matches. + Note: `ignore` patterns are *always* in `dot:true` mode, regardless + of any other settings. +* `follow` Follow symlinked directories when expanding `**` patterns. + Note that this can result in a lot of duplicate references in the + presence of cyclic links. +* `realpath` Set to true to call `fs.realpath` on all of the results. + In the case of a symlink that cannot be resolved, the full absolute + path to the matched entry is returned (though it will usually be a + broken symlink) + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.3, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +Note that symlinked directories are not crawled as part of a `**`, +though their contents may match against subsequent portions of the +pattern. This prevents infinite loops and duplicates and the like. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if it +started with a `#` character, or a "negated" pattern if it started +with a `!` character. + +These options were deprecated in version 5, and removed in version 6. + +To specify things that should not match, use the `ignore` option. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. + +## Contributing + +Any change to behavior (including bugfixes) must come with a test. + +Patches that fail tests or reduce performance will be rejected. + +``` +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# to benchmark against bash/zsh +npm run bench + +# to profile javascript +npm run prof +``` diff --git a/platforms/android/assets/www/node_modules/glob/changelog.md b/platforms/android/assets/www/node_modules/glob/changelog.md new file mode 100644 index 0000000..4163677 --- /dev/null +++ b/platforms/android/assets/www/node_modules/glob/changelog.md @@ -0,0 +1,67 @@ +## 7.0 + +- Raise error if `options.cwd` is specified, and not a directory + +## 6.0 + +- Remove comment and negation pattern support +- Ignore patterns are always in `dot:true` mode + +## 5.0 + +- Deprecate comment and negation patterns +- Fix regression in `mark` and `nodir` options from making all cache + keys absolute path. +- Abort if `fs.readdir` returns an error that's unexpected +- Don't emit `match` events for ignored items +- Treat ENOTSUP like ENOTDIR in readdir + +## 4.5 + +- Add `options.follow` to always follow directory symlinks in globstar +- Add `options.realpath` to call `fs.realpath` on all results +- Always cache based on absolute path + +## 4.4 + +- Add `options.ignore` +- Fix handling of broken symlinks + +## 4.3 + +- Bump minimatch to 2.x +- Pass all tests on Windows + +## 4.2 + +- Add `glob.hasMagic` function +- Add `options.nodir` flag + +## 4.1 + +- Refactor sync and async implementations for performance +- Throw if callback provided to sync glob function +- Treat symbolic links in globstar results the same as Bash 4.3 + +## 4.0 + +- Use `^` for dependency versions (bumped major because this breaks + older npm versions) +- Ensure callbacks are only ever called once +- switch to ISC license + +## 3.x + +- Rewrite in JavaScript +- Add support for setting root, cwd, and windows support +- Cache many fs calls +- Add globstar support +- emit match events + +## 2.x + +- Use `glob.h` and `fnmatch.h` from NetBSD + +## 1.x + +- `glob.h` static binding. diff --git a/platforms/android/assets/www/node_modules/glob/common.js b/platforms/android/assets/www/node_modules/glob/common.js new file mode 100644 index 0000000..58dc41e --- /dev/null +++ b/platforms/android/assets/www/node_modules/glob/common.js @@ -0,0 +1,235 @@ +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern, { dot: true }) + } + + return { + matcher: new Minimatch(pattern, { dot: true }), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = path.resolve(options.cwd) + self.changedCwd = self.cwd !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + self.cwdAbs = makeAbs(self, self.cwd) + self.nomount = !!options.nomount + + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} diff --git a/platforms/android/assets/www/node_modules/glob/glob.js b/platforms/android/assets/www/node_modules/glob/glob.js new file mode 100644 index 0000000..4dba04a --- /dev/null +++ b/platforms/android/assets/www/node_modules/glob/glob.js @@ -0,0 +1,782 @@ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin + } + + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin +} + +glob.hasMagic = function (pattern, options_) { + var options = extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + var n = this.minimatch.set.length + this._processing = 0 + this.matches = new Array(n) + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + var sync = true + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + sync = false + + function done () { + --self._processing + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + self._finish() + } + } + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + fs.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (this.matches[index][e]) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = this._makeAbs(e) + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + if (this.mark) + e = this._mark(e) + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er) + return cb() + + var isSym = lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && !stat.isDirectory()) + return cb(null, false, stat) + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return cb() + + return cb(null, c, stat) +} diff --git a/platforms/android/assets/www/node_modules/glob/package.json b/platforms/android/assets/www/node_modules/glob/package.json new file mode 100644 index 0000000..3638792 --- /dev/null +++ b/platforms/android/assets/www/node_modules/glob/package.json @@ -0,0 +1,102 @@ +{ + "_args": [ + [ + "glob@^7.0.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/rimraf" + ] + ], + "_from": "glob@>=7.0.0 <8.0.0", + "_id": "glob@7.0.3", + "_inCache": true, + "_installable": true, + "_location": "/glob", + "_nodeVersion": "5.6.0", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/glob-7.0.3.tgz_1457166529288_0.7840580905321985" + }, + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "3.7.3", + "_phantomChildren": {}, + "_requested": { + "name": "glob", + "raw": "glob@^7.0.0", + "rawSpec": "^7.0.0", + "scope": null, + "spec": ">=7.0.0 <8.0.0", + "type": "range" + }, + "_requiredBy": [ + "/rimraf" + ], + "_resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz", + "_shasum": "0aa235931a4a96ac13d60ffac2fb877bd6ed4f58", + "_shrinkwrap": null, + "_spec": "glob@^7.0.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/rimraf", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/node-glob/issues" + }, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "description": "a little globber", + "devDependencies": { + "mkdirp": "0", + "rimraf": "^2.2.8", + "tap": "^5.7.0", + "tick": "0.0.6" + }, + "directories": {}, + "dist": { + "shasum": "0aa235931a4a96ac13d60ffac2fb877bd6ed4f58", + "tarball": "http://registry.npmjs.org/glob/-/glob-7.0.3.tgz" + }, + "engines": { + "node": "*" + }, + "files": [ + "glob.js", + "sync.js", + "common.js" + ], + "gitHead": "2fc2278ab857c7df117213a2fb431de090be6353", + "homepage": "https://github.com/isaacs/node-glob#readme", + "license": "ISC", + "main": "glob.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "glob", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "scripts": { + "bench": "bash benchmark.sh", + "benchclean": "node benchclean.js", + "prepublish": "npm run benchclean", + "prof": "bash prof.sh && cat profile.txt", + "profclean": "rm -f v8.log profile.txt", + "test": "tap test/*.js --cov", + "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js" + }, + "version": "7.0.3" +} diff --git a/platforms/android/assets/www/node_modules/glob/sync.js b/platforms/android/assets/www/node_modules/glob/sync.js new file mode 100644 index 0000000..301577a --- /dev/null +++ b/platforms/android/assets/www/node_modules/glob/sync.js @@ -0,0 +1,467 @@ +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = fs.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this.matches[index][e] = true + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + var abs = this._makeAbs(e) + if (this.mark) + e = this._mark(e) + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[this._makeAbs(e)] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + // lstat failed, doesn't exist + return null + } + + var isSym = lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this.matches[index][prefix] = true +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + return false + } + + if (lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} diff --git a/platforms/android/assets/www/node_modules/inflight/.eslintrc b/platforms/android/assets/www/node_modules/inflight/.eslintrc new file mode 100644 index 0000000..b7a1550 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inflight/.eslintrc @@ -0,0 +1,17 @@ +{ + "env" : { + "node" : true + }, + "rules" : { + "semi": [2, "never"], + "strict": 0, + "quotes": [1, "single", "avoid-escape"], + "no-use-before-define": 0, + "curly": 0, + "no-underscore-dangle": 0, + "no-lonely-if": 1, + "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}], + "no-mixed-requires": 0, + "space-infix-ops": 0 + } +} diff --git a/platforms/android/assets/www/node_modules/inflight/LICENSE b/platforms/android/assets/www/node_modules/inflight/LICENSE new file mode 100644 index 0000000..05eeeb8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inflight/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/inflight/README.md b/platforms/android/assets/www/node_modules/inflight/README.md new file mode 100644 index 0000000..6dc8929 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inflight/README.md @@ -0,0 +1,37 @@ +# inflight + +Add callbacks to requests in flight to avoid async duplication + +## USAGE + +```javascript +var inflight = require('inflight') + +// some request that does some stuff +function req(key, callback) { + // key is any random string. like a url or filename or whatever. + // + // will return either a falsey value, indicating that the + // request for this key is already in flight, or a new callback + // which when called will call all callbacks passed to inflightk + // with the same key + callback = inflight(key, callback) + + // If we got a falsey value back, then there's already a req going + if (!callback) return + + // this is where you'd fetch the url or whatever + // callback is also once()-ified, so it can safely be assigned + // to multiple events etc. First call wins. + setTimeout(function() { + callback(null, key) + }, 100) +} + +// only assigns a single setTimeout +// when it dings, all cbs get called +req('foo', cb1) +req('foo', cb2) +req('foo', cb3) +req('foo', cb4) +``` diff --git a/platforms/android/assets/www/node_modules/inflight/inflight.js b/platforms/android/assets/www/node_modules/inflight/inflight.js new file mode 100644 index 0000000..8bc96cb --- /dev/null +++ b/platforms/android/assets/www/node_modules/inflight/inflight.js @@ -0,0 +1,44 @@ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} diff --git a/platforms/android/assets/www/node_modules/inflight/package.json b/platforms/android/assets/www/node_modules/inflight/package.json new file mode 100644 index 0000000..90db3b2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inflight/package.json @@ -0,0 +1,86 @@ +{ + "_args": [ + [ + "inflight@^1.0.4", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/glob" + ] + ], + "_from": "inflight@>=1.0.4 <2.0.0", + "_id": "inflight@1.0.4", + "_inCache": true, + "_installable": true, + "_location": "/inflight", + "_nodeVersion": "0.10.32", + "_npmUser": { + "email": "ogd@aoaioxxysz.net", + "name": "othiym23" + }, + "_npmVersion": "2.1.3", + "_phantomChildren": {}, + "_requested": { + "name": "inflight", + "raw": "inflight@^1.0.4", + "rawSpec": "^1.0.4", + "scope": null, + "spec": ">=1.0.4 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", + "_shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a", + "_shrinkwrap": null, + "_spec": "inflight@^1.0.4", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/glob", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/inflight/issues" + }, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + }, + "description": "Add callbacks to requests in flight to avoid async duplication", + "devDependencies": { + "tap": "^0.4.10" + }, + "directories": {}, + "dist": { + "shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a", + "tarball": "http://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz" + }, + "gitHead": "c7b5531d572a867064d4a1da9e013e8910b7d1ba", + "homepage": "https://github.com/isaacs/inflight", + "license": "ISC", + "main": "inflight.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + }, + { + "email": "ogd@aoaioxxysz.net", + "name": "othiym23" + }, + { + "email": "me@re-becca.org", + "name": "iarna" + } + ], + "name": "inflight", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inflight.git" + }, + "scripts": { + "test": "tap test.js" + }, + "version": "1.0.4" +} diff --git a/platforms/android/assets/www/node_modules/inflight/test.js b/platforms/android/assets/www/node_modules/inflight/test.js new file mode 100644 index 0000000..2bb75b3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inflight/test.js @@ -0,0 +1,97 @@ +var test = require('tap').test +var inf = require('./inflight.js') + + +function req (key, cb) { + cb = inf(key, cb) + if (cb) setTimeout(function () { + cb(key) + cb(key) + }) + return cb +} + +test('basic', function (t) { + var calleda = false + var a = req('key', function (k) { + t.notOk(calleda) + calleda = true + t.equal(k, 'key') + if (calledb) t.end() + }) + t.ok(a, 'first returned cb function') + + var calledb = false + var b = req('key', function (k) { + t.notOk(calledb) + calledb = true + t.equal(k, 'key') + if (calleda) t.end() + }) + + t.notOk(b, 'second should get falsey inflight response') +}) + +test('timing', function (t) { + var expect = [ + 'method one', + 'start one', + 'end one', + 'two', + 'tick', + 'three' + ] + var i = 0 + + function log (m) { + t.equal(m, expect[i], m + ' === ' + expect[i]) + ++i + if (i === expect.length) + t.end() + } + + function method (name, cb) { + log('method ' + name) + process.nextTick(cb) + } + + var one = inf('foo', function () { + log('start one') + var three = inf('foo', function () { + log('three') + }) + if (three) method('three', three) + log('end one') + }) + + method('one', one) + + var two = inf('foo', function () { + log('two') + }) + if (two) method('one', two) + + process.nextTick(log.bind(null, 'tick')) +}) + +test('parameters', function (t) { + t.plan(8) + + var a = inf('key', function (first, second, third) { + t.equal(first, 1) + t.equal(second, 2) + t.equal(third, 3) + }) + t.ok(a, 'first returned cb function') + + var b = inf('key', function (first, second, third) { + t.equal(first, 1) + t.equal(second, 2) + t.equal(third, 3) + }) + t.notOk(b, 'second should get falsey inflight response') + + setTimeout(function () { + a(1, 2, 3) + }) +}) diff --git a/platforms/android/assets/www/node_modules/inherits/LICENSE b/platforms/android/assets/www/node_modules/inherits/LICENSE new file mode 100644 index 0000000..dea3013 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inherits/LICENSE @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + diff --git a/platforms/android/assets/www/node_modules/inherits/README.md b/platforms/android/assets/www/node_modules/inherits/README.md new file mode 100644 index 0000000..b1c5665 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inherits/README.md @@ -0,0 +1,42 @@ +Browser-friendly inheritance fully compatible with standard node.js +[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). + +This package exports standard `inherits` from node.js `util` module in +node environment, but also provides alternative browser-friendly +implementation through [browser +field](https://gist.github.com/shtylman/4339901). Alternative +implementation is a literal copy of standard one located in standalone +module to avoid requiring of `util`. It also has a shim for old +browsers with no `Object.create` support. + +While keeping you sure you are using standard `inherits` +implementation in node.js environment, it allows bundlers such as +[browserify](https://github.com/substack/node-browserify) to not +include full `util` package to your client code if all you need is +just `inherits` function. It worth, because browser shim for `util` +package is large and `inherits` is often the single function you need +from it. + +It's recommended to use this package instead of +`require('util').inherits` for any code that has chances to be used +not only in node.js but in browser too. + +## usage + +```js +var inherits = require('inherits'); +// then use exactly as the standard one +``` + +## note on version ~1.0 + +Version ~1.0 had completely different motivation and is not compatible +neither with 2.0 nor with standard node.js `inherits`. + +If you are using version ~1.0 and planning to switch to ~2.0, be +careful: + +* new version uses `super_` instead of `super` for referencing + superclass +* new version overwrites current prototype while old one preserves any + existing fields on it diff --git a/platforms/android/assets/www/node_modules/inherits/inherits.js b/platforms/android/assets/www/node_modules/inherits/inherits.js new file mode 100644 index 0000000..29f5e24 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inherits/inherits.js @@ -0,0 +1 @@ +module.exports = require('util').inherits diff --git a/platforms/android/assets/www/node_modules/inherits/inherits_browser.js b/platforms/android/assets/www/node_modules/inherits/inherits_browser.js new file mode 100644 index 0000000..c1e78a7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inherits/inherits_browser.js @@ -0,0 +1,23 @@ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} diff --git a/platforms/android/assets/www/node_modules/inherits/package.json b/platforms/android/assets/www/node_modules/inherits/package.json new file mode 100644 index 0000000..722bcd1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inherits/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + "inherits@2", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/glob" + ] + ], + "_from": "inherits@>=2.0.0 <3.0.0", + "_id": "inherits@2.0.1", + "_inCache": true, + "_installable": true, + "_location": "/inherits", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "1.3.8", + "_phantomChildren": {}, + "_requested": { + "name": "inherits", + "raw": "inherits@2", + "rawSpec": "2", + "scope": null, + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "_shrinkwrap": null, + "_spec": "inherits@2", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/glob", + "browser": "./inherits_browser.js", + "bugs": { + "url": "https://github.com/isaacs/inherits/issues" + }, + "dependencies": {}, + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "homepage": "https://github.com/isaacs/inherits#readme", + "keywords": [ + "inheritance", + "class", + "klass", + "oop", + "object-oriented", + "inherits", + "browser", + "browserify" + ], + "license": "ISC", + "main": "./inherits.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "inherits", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inherits.git" + }, + "scripts": { + "test": "node test" + }, + "version": "2.0.1" +} diff --git a/platforms/android/assets/www/node_modules/inherits/test.js b/platforms/android/assets/www/node_modules/inherits/test.js new file mode 100644 index 0000000..fc53012 --- /dev/null +++ b/platforms/android/assets/www/node_modules/inherits/test.js @@ -0,0 +1,25 @@ +var inherits = require('./inherits.js') +var assert = require('assert') + +function test(c) { + assert(c.constructor === Child) + assert(c.constructor.super_ === Parent) + assert(Object.getPrototypeOf(c) === Child.prototype) + assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) + assert(c instanceof Child) + assert(c instanceof Parent) +} + +function Child() { + Parent.call(this) + test(this) +} + +function Parent() {} + +inherits(Child, Parent) + +var c = new Child +test(c) + +console.log('ok') diff --git a/platforms/android/assets/www/node_modules/jasmine-core/.npmignore b/platforms/android/assets/www/node_modules/jasmine-core/.npmignore new file mode 100644 index 0000000..82d86f3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/.npmignore @@ -0,0 +1,28 @@ +dist/ +grunt/ +node_modules +pkg/ +release_notes/ +spec/ +src/ +Gemfile +Gemfile.lock +Rakefile +jasmine-core.gemspec +.bundle/ +.gitignore +.gitmodules +.idea +.jshintrc +.rspec +.sass-cache/ +.travis.yml +*.sh +*.py +Gruntfile.js +lib/jasmine-core.rb +lib/jasmine-core/boot/ +lib/jasmine-core/spec +lib/jasmine-core/version.rb +lib/jasmine-core/*.py +sauce_connect.log diff --git a/platforms/android/assets/www/node_modules/jasmine-core/CONTRIBUTING.md b/platforms/android/assets/www/node_modules/jasmine-core/CONTRIBUTING.md new file mode 100644 index 0000000..8d990ff --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/CONTRIBUTING.md @@ -0,0 +1,130 @@ +# Developing for Jasmine Core + +We welcome your contributions! Thanks for helping make Jasmine a better project for everyone. Please review the backlog and discussion lists before starting work. What you're looking for may already have been done. If it hasn't, the community can help make your contribution better. If you want to contribute but don't know what to work on, [issues tagged ready for work](https://github.com/jasmine/jasmine/labels/ready%20for%20work) should have enough detail to get started. + +## Links + +- [Jasmine Google Group](http://groups.google.com/group/jasmine-js) +- [Jasmine-dev Google Group](http://groups.google.com/group/jasmine-js-dev) +- [Jasmine on PivotalTracker](https://www.pivotaltracker.com/n/projects/10606) + +## General Workflow + +Please submit pull requests via feature branches using the semi-standard workflow of: + +```bash +git clone git@github.com:yourUserName/jasmine.git # Clone your fork +cd jasmine # Change directory +git remote add upstream https://github.com/jasmine/jasmine.git # Assign original repository to a remote named 'upstream' +git fetch upstream # Pull in changes not present in your local repository +git checkout -b my-new-feature # Create your feature branch +git commit -am 'Add some feature' # Commit your changes +git push origin my-new-feature # Push to the branch +``` + +Once you've pushed a feature branch to your forked repo, you're ready to open a pull request. We favor pull requests with very small, single commits with a single purpose. + +## Background + +### Directory Structure + +* `/src` contains all of the source files + * `/src/console` - Node.js-specific files + * `/src/core` - generic source files + * `/src/html` - browser-specific files +* `/spec` contains all of the tests + * mirrors the source directory + * there are some additional files +* `/dist` contains the standalone distributions as zip files +* `/lib` contains the generated files for distribution as the Jasmine Rubygem and the Python package + +### Self-testing + +Note that Jasmine tests itself. The files in `lib` are loaded first, defining the reference `jasmine`. Then the files in `src` are loaded, defining the reference `j$`. So there are two copies of the code loaded under test. + +The tests should always use `j$` to refer to the objects and functions that are being tested. But the tests can use functions on `jasmine` as needed. _Be careful how you structure any new test code_. Copy the patterns you see in the existing code - this ensures that the code you're testing is not leaking into the `jasmine` reference and vice-versa. + +### `boot.js` + +__This is new for Jasmine 2.0.__ + +This file does all of the setup necessary for Jasmine to work. It loads all of the code, creates an `Env`, attaches the global functions, and builds the reporter. It also sets up the execution of the `Env` - for browsers this is in `window.onload`. While the default in `lib` is appropriate for browsers, projects may wish to customize this file. + +For example, for Jasmine development there is a different `dev_boot.js` for Jasmine development that does more work. + +### Compatibility + +* Browser Minimum + * IE8 + * Firefox 3.x + * Chrome ?? + * Safari 5 + +## Development + +All source code belongs in `src/`. The `core/` directory contains the bulk of Jasmine's functionality. This code should remain browser- and environment-agnostic. If your feature or fix cannot be, as mentioned above, please degrade gracefully. Any code that should only be in a non-browser environment should live in `src/console/`. Any code that depends on a browser (specifically, it expects `window` to be the global or `document` is present) should live in `src/html/`. + +### Install Dependencies + +Jasmine Core relies on Ruby and Node.js. + +To install the Ruby dependencies, you will need Ruby, Rubygems, and Bundler available. Then: + + $ bundle + +...will install all of the Ruby dependencies. If the ffi gem fails to build its native extensions, you may need to manually install some system dependencies. On Ubuntu: + + $ apt-get install gcc ruby ruby-dev libxml2 libxml2-dev libxslt1-dev + +...should get you to the point that `bundle` can install everything. + +To install the Node dependencies, you will need Node.js, Npm, and [Grunt](http://gruntjs.com/), the [grunt-cli](https://github.com/gruntjs/grunt-cli) and ensure that `grunt` is on your path. + + $ npm install --local + +...will install all of the node modules locally. Now run + + $ grunt + +...if you see that JSHint runs, your system is ready. + +### How to write new Jasmine code + +Or, How to make a successful pull request + +* _Do not change the public interface_. Lots of projects depend on Jasmine and if you aren't careful you'll break them +* _Be environment agnostic_ - server-side developers are just as important as browser developers +* _Be browser agnostic_ - if you must rely on browser-specific functionality, please write it in a way that degrades gracefully +* _Write specs_ - Jasmine's a testing framework; don't add functionality without test-driving it +* _Write code in the style of the rest of the repo_ - Jasmine should look like a cohesive whole +* _Ensure the *entire* test suite is green_ in all the big browsers, Node, and JSHint - your contribution shouldn't break Jasmine for other users + +Follow these tips and your pull request, patch, or suggestion is much more likely to be integrated. + +### Running Specs + +Jasmine uses the [Jasmine Ruby gem](http://github.com/jasmine/jasmine-gem) to test itself in browser. + + $ bundle exec rake jasmine + +...and then visit `http://localhost:8888` to run specs. + +Jasmine uses the [Jasmine NPM package](http://github.com/jasmine/jasmine-npm) to test itself in a Node.js/npm environment. + + $ grunt execSpecsInNode + +...and then the results will print to the console. All specs run except those that expect a browser (the specs in `spec/html` are ignored). + +## Before Committing or Submitting a Pull Request + +1. Ensure all specs are green in browser *and* node +1. Ensure JSHint is green with `grunt jshint` +1. Build `jasmine.js` with `grunt buildDistribution` and run all specs again - this ensures that your changes self-test well + +## Submitting a Pull Request +1. Revert your changes to `jasmine.js` and `jasmine-html.js` + * We do this because `jasmine.js` and `jasmine-html.js` are auto-generated (as you've seen in the previous steps) and accepting multiple pull requests when this auto-generated file changes causes lots of headaches +1. When we accept your pull request, we will generate these files as a separate commit and merge the entire branch into master + +Note that we use Travis for Continuous Integration. We only accept green pull requests. + diff --git a/platforms/android/assets/www/node_modules/jasmine-core/MANIFEST.in b/platforms/android/assets/www/node_modules/jasmine-core/MANIFEST.in new file mode 100644 index 0000000..4d58eed --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/MANIFEST.in @@ -0,0 +1,5 @@ +recursive-include . *.py +include lib/jasmine-core/*.js +include lib/jasmine-core/*.css +include images/*.png +include package.json diff --git a/platforms/android/assets/www/node_modules/jasmine-core/MIT.LICENSE b/platforms/android/assets/www/node_modules/jasmine-core/MIT.LICENSE new file mode 100644 index 0000000..aff8ed4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/MIT.LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2008-2014 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/jasmine-core/README.md b/platforms/android/assets/www/node_modules/jasmine-core/README.md new file mode 100644 index 0000000..74d90d4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/README.md @@ -0,0 +1,76 @@ +[](http://jasmine.github.io) + +[![Build Status](https://travis-ci.org/jasmine/jasmine.svg?branch=master)](https://travis-ci.org/jasmine/jasmine) +[![Code Climate](https://codeclimate.com/github/pivotal/jasmine.svg)](https://codeclimate.com/github/pivotal/jasmine) + +======= + +**A JavaScript Testing Framework** + +Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, [Node.js](http://nodejs.org) projects, or anywhere that JavaScript can run. + +Documentation & guides live here: [http://jasmine.github.io](http://jasmine.github.io/) +For a quick start guide of Jasmine 2.0, see the beginning of [http://jasmine.github.io/2.0/introduction.html](http://jasmine.github.io/2.0/introduction.html) + +Upgrading from Jasmine 1.x? Check out the [2.0 release notes](https://github.com/jasmine/jasmine/blob/v2.0.0/release_notes/20.md) for a list of what's new (including breaking interface changes). You can also read the [upgrade guide](http://jasmine.github.io/2.0/upgrading.html). + +## Contributing + +Please read the [contributors' guide](https://github.com/jasmine/jasmine/blob/master/CONTRIBUTING.md) + +## Installation + +For the Jasmine NPM module:
      +[https://github.com/jasmine/jasmine-npm](https://github.com/jasmine/jasmine-npm) + +For the Jasmine Ruby Gem:
      +[https://github.com/jasmine/jasmine-gem](https://github.com/jasmine/jasmine-gem) + +For the Jasmine Python Egg:
      +[https://github.com/jasmine/jasmine-py](https://github.com/jasmine/jasmine-py) + +To install Jasmine standalone on your local box: + +* Download the standalone distribution for your desired release from the [releases page](https://github.com/jasmine/jasmine/releases) +* Create a Jasmine directory in your project - `mkdir my-project/jasmine` +* Move the dist to your project directory - `mv jasmine/dist/jasmine-standalone-2.0.0.zip my-project/jasmine` +* Change directory - `cd my-project/jasmine` +* Unzip the dist - `unzip jasmine-standalone-2.0.0.zip` + +Add the following to your HTML file: + +```html + + + + + + +``` + +## Supported environments + +Jasmine tests itself across many browsers (Safari, Chrome, Firefox, PhantomJS, and new Internet Explorer) as well as node. To see the exact version tests are run against look at our [.travis.yml](https://github.com/jasmine/jasmine/blob/master/.travis.yml) + + +## Support + +* Search past discussions: [http://groups.google.com/group/jasmine-js](http://groups.google.com/group/jasmine-js) +* Send an email to the list: [jasmine-js@googlegroups.com](mailto:jasmine-js@googlegroups.com) +* View the project backlog at Pivotal Tracker: [http://www.pivotaltracker.com/projects/10606](http://www.pivotaltracker.com/projects/10606) +* Follow us on Twitter: [@JasmineBDD](http://twitter.com/JasmineBDD) + +## Maintainers + +* [Davis W. Frank](mailto:dwfrank@pivotal.io), Pivotal Labs +* [Rajan Agaskar](mailto:rajan@pivotal.io), Pivotal Labs +* [Gregg Van Hove](mailto:gvanhove@pivotal.io), Pivotal Labs +* [Greg Cobb](mailto:gcobb@pivotal.io), Pivotal Labs +* [Chris Amavisca](mailto:camavisca@pivotal.io), Pivotal Labs + +### Maintainers Emeritus + +* [Christian Williams](mailto:antixian666@gmail.com), Cloud Foundry +* Sheel Choksi + +Copyright (c) 2008-2015 Pivotal Labs. This software is licensed under the MIT License. diff --git a/platforms/android/assets/www/node_modules/jasmine-core/RELEASE.md b/platforms/android/assets/www/node_modules/jasmine-core/RELEASE.md new file mode 100644 index 0000000..e5273b0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/RELEASE.md @@ -0,0 +1,73 @@ +# How to work on a Jasmine Release + +## Development +___Jasmine Core Maintainers Only___ + +Follow the instructions in `CONTRIBUTING.md` during development. + +### Git Rules + +Please work on feature branches. + +Please attempt to keep commits to `master` small, but cohesive. If a feature is contained in a bunch of small commits (e.g., it has several wip commits or small work), please squash them when merging back to `master`. + +### Version + +We attempt to stick to [Semantic Versioning](http://semver.org/). Most of the time, development should be against a new minor version - fixing bugs and adding new features that are backwards compatible. + +The current version lives in the file `/package.json`. This version will be the version number that is currently released. When releasing a new version, update `package.json` with the new version and `grunt build:copyVersionToGem` to update the gem version number. + +This version is used by both `jasmine.js` and the `jasmine-core` Ruby gem. + +Note that Jasmine should only use the "patch" version number in the following cases: + +* Changes related to packaging for a specific platform (npm, gem, or pip). +* Fixes for regressions. + +When jasmine-core revs its major or minor version, the binding libraries should also rev to that version. + +## Release + +When ready to release - specs are all green and the stories are done: + +1. Update the release notes in `release_notes` - use the Anchorman gem to generate the markdown file and edit accordingly +1. Update the version in `package.json` to a release candidate +1. Update any links or top-level landing page for the Github Pages + +### Build standalone distribution + +1. Build the standalone distribution with `grunt buildStandaloneDist` + +### Release the Python egg + +1. `python setup.py register sdist upload` You will need pypi credentials to upload the egg. + +### Release the Ruby gem + +1. Copy version to the Ruby gem with `grunt build:copyVersionToGem` +1. __NOTE__: You will likely need to point to a local jasmine gem in order to run tests locally. _Do not_ push this version of the Gemfile. +1. __NOTE__: You will likely need to push a new jasmine gem with a dependent version right after this release. +1. Push these changes to GitHub and verify that this SHA is green +1. `rake release` - tags the repo with the version, builds the `jasmine-core` gem, pushes the gem to Rubygems.org. In order to release you will have to ensure you have rubygems creds locally. + +### Release the NPM + +1. `npm adduser` to save your credentials locally +1. `npm publish .` to publish what's in `package.json` + +### Release the docs + +Probably only need to do this when releasing a minor version, and not a patch version. + +1. `cp -R edge ${version}` to copy the current edge docs to the new version +1. Add a link to the new version in `index.html` + +### Finally + +1. Visit the [Releases page for Jasmine](https://github.com/jasmine/jasmine/releases), find the tag just pushed. + 1. Paste in a link to the correct release notes for this release. The link should reference the blob and tag correctly, and the markdown file for the notes. + 1. If it is a pre-release, mark it as such. + 1. Attach the standalone zipfile + + +There should be a post to Pivotal Labs blog and a tweet to that link. diff --git a/platforms/android/assets/www/node_modules/jasmine-core/bower.json b/platforms/android/assets/www/node_modules/jasmine-core/bower.json new file mode 100644 index 0000000..c69673f --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/bower.json @@ -0,0 +1,40 @@ +{ + "name": "jasmine-core", + "homepage": "http://jasmine.github.io", + "authors": [ + "slackersoft " + ], + "description": "Official packaging of Jasmine's core files", + "keywords": [ + "test", + "jasmine", + "tdd", + "bdd" + ], + "license": "MIT", + "moduleType": "globals", + "main": "lib/jasmine-core/jasmine.js", + "ignore": [ + "**/.*", + "dist", + "grunt", + "node_modules", + "pkg", + "release_notes", + "spec", + "src", + "Gemfile", + "Gemfile.lock", + "Rakefile", + "jasmine-core.gemspec", + "*.sh", + "*.py", + "Gruntfile.js", + "lib/jasmine-core.rb", + "lib/jasmine-core/boot/", + "lib/jasmine-core/spec", + "lib/jasmine-core/version.rb", + "lib/jasmine-core/*.py", + "sauce_connect.log" + ] +} diff --git a/platforms/android/assets/www/node_modules/jasmine-core/images/jasmine-horizontal.png b/platforms/android/assets/www/node_modules/jasmine-core/images/jasmine-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..ca287ff6235cb545659a77b21b5516b571d32815 GIT binary patch literal 1714 zcmaKscUV(b7{;R%6%|~7Y^W3v6v4$#$YPHo5SEo$T3Lb`h9Gz|2)Vf-KoD6Xiikj2 z0tHbK6@3s@$RELIyv?E~>Mm3ue`7vG2s!tX(Iue#1sdsZE== zY~3a;BfDKrUO`bwSw&TChx!j1T3S1GcJ0>PqrdmSK?6f0V-r&|Gn_e|NFrO?*xK1U zI6AqwQrtZ}JiQKk`}q3#2mJEu(V*av(6I1`<0np1qhe0Q#+{B&I0Mn>%tSVao6Ji| zO-nzUaV{%6C-;2bg^QO8E?+4sE-5RosI0nHQ&)ez;l|BdjkoXIZNC4o^-GvOI=jJ~yEdIIl>GPMrmX~A*5g3e^f(@DA z8sk0se8$}+Qm$pD!*^Av(Yn>gC>ztOUH3`ok`&xh-410a$TyT;4ED6x$%17{CQ9W; zFw{UEl?-R&VJ~LMM!&ePR{hFrX0|O?`G=9w9m(jDY3FuVU}n{3IhDx!{QbBk?O*o@JYiOF}o5QSl}se{4nq*ZM&-yX)YOHo0>4>8+8p3G0fAH})QLM&=o3 zI!tH6`_O%?Usk*P{+76g;NL@8e)WBm z&*rT{#;C)EK5-2rx*_HXgLU68*BZzz*mdG{HwE?G zhNll;ju?0IRUv~Ufl6Thf=^yI%UVG-=sIg+QlKe>K zZ+E?SSOhmJxjooh&=gI6RZ^A)i%qL5Irk~v(g?&pU9PPyzIof)t3A4=tMX}>3nwKt z$2coC-tWejTb1*wJ-W)i&GStO=LTG{k0rtak-|!k{a2@QLly_88$$?o7R|ZH!TKpF zm9$!Zs%^_s+>1j?4-M+B{* zKiBwA`?}_pWz^=Rj+~C(TsnHy={3!+^e%Rra+{z~s%tpql;iR7qS-64F$Gj+czU6l z#;3Ce<>O}uE}J@NuayWY+11fa4<9(XsnS}fvReDtcAT+R(4HuFa!;|tdB^9&5mdTm zpwwK;?YXRgKGJ7_UeN6ME6okZp*ypWym{_*-n^J6dl$-YwzoZyZRupzk8OwwVFhFb zQ^dPD{lTBqdd!jo`3gmM##1?T{X-irVVj%wMH(4mr0X%1NPNHC(3-lURq9?;X-jjv zt}@P~a&?vMHDzLr|B3fa8aSkz`zo#Vv7=sVdbMP8mC0j%upxr&*ljS^n(BE%qrdiE n4)i1wiqD%ktT_`s{B^*buNcP{f4M*be*qX93rBJV(U<-=9$g`{ literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/jasmine-core/images/jasmine-horizontal.svg b/platforms/android/assets/www/node_modules/jasmine-core/images/jasmine-horizontal.svg new file mode 100644 index 0000000..ba8990e --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/images/jasmine-horizontal.svg @@ -0,0 +1,102 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine-core/images/jasmine_favicon.png b/platforms/android/assets/www/node_modules/jasmine-core/images/jasmine_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3b84583be4b9d5ae9cd5cae07b2dbaa5ebb0ad1c GIT binary patch literal 1486 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0VDb;}332@o1PuQh8X8uGu4-^- zn3*=SA+%wV=cI;&hMB$%-Lc(MLmN8%IwwUpbcA;F2Q;)twND9bn-tpC9oR4-vb8I; zp+Bg#FSKP+P(yD-%f!%zo}iZgh=%Ua=KkP@iNVbiLYsSn8~VeW`+}P$1~&ACHcbd_ z=nZb_32o{NZkZ6&1k^hrxT!a&r8lIdAIJ@9nh?|iRMsET+#A%`AKKg-(%2K)*cZ|~ zA-J&*$PEUH08MM`4Q=iVY3vVfhN$TUscGs5sR8P31X|G_+SnTcv<0XVC=Rr!u|K4# zHyCJU6UYRR;%2BtKv^I=q#2|DECn_k@wXU|=@ zeD&J(8#iy=zH|5fgNKiwJbm`!<*V0k-oF3v@zdvTKYsrD^Y>rGdNDU(R>|^oaSW-5 z%f0Y2x+hSk{p0&HA;E60Oq1S3r7U;(X3MH#?W9nxXzk)srlC4P;cZYe&v*G}mgi%< ze(bTl{@&_)cX8b-kvX%ff9D22e*M~7edm|;|Jb8m2JBzkzKiSBKR0n*?XSyM6fxZY zJ4bb;vGKRiKP(ztq3sJx9iq$Re`-EEQU0KE$sdyqayzp6H-7x+oGKZ_6;hQ_Y|p&y z7o`N7g@ z8Yl1HKL;mFo4BdxljF1}KbfMR6nNdLyPnEap1MqBdI?{g$L58$P8+wftLX5R70)7n`#pwItnbma$w{%`M(`wpsu2rJ60rdGCc> z+~lm)viMYM`=uXwK_$`#_UtRZMO=2-IV)l2vc~)doyPvg-RmxtACQ#v{7}5$&isV+ zPws~n?@yNGy#H1=vTI?;CAl9~9#VgqJ+7`4y~R+Wyj0U+){?lm9r6mtf0gl_VmUW^ z%eje%?jM%^eLuUg#ybXaQM{yQy&8UgiQ`HQ+=iTpjfd0iJ@ ssyFi&dF4%9dEry;pNN)Q>$jg_dr3r;PHA*CFc&d+y85}Sb4q9e0J812W&i*H literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/PKG-INFO b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/PKG-INFO new file mode 100644 index 0000000..fe5901a --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/PKG-INFO @@ -0,0 +1,30 @@ +Metadata-Version: 1.1 +Name: jasmine-core +Version: 2.2.1 +Summary: Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, Node.js (http://nodejs.org) projects, or anywhere that JavaScript can run. +Home-page: http://jasmine.github.io +Author: Pivotal Labs +Author-email: jasmine-js@googlegroups.com +License: MIT +Description: UNKNOWN +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Environment :: Web Environment +Classifier: Framework :: Django +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Software Development :: Build Tools +Classifier: Topic :: Software Development :: Quality Assurance +Classifier: Topic :: Software Development :: Testing diff --git a/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/SOURCES.txt b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/SOURCES.txt new file mode 100644 index 0000000..cf3dcc8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/SOURCES.txt @@ -0,0 +1,18 @@ +MANIFEST.in +package.json +images/__init__.py +images/jasmine-horizontal.png +images/jasmine_favicon.png +jasmine_core.egg-info/PKG-INFO +jasmine_core.egg-info/SOURCES.txt +jasmine_core.egg-info/dependency_links.txt +jasmine_core.egg-info/requires.txt +jasmine_core.egg-info/top_level.txt +lib/jasmine-core/__init__.py +lib/jasmine-core/boot.js +lib/jasmine-core/core.py +lib/jasmine-core/jasmine-html.js +lib/jasmine-core/jasmine.css +lib/jasmine-core/jasmine.js +lib/jasmine-core/json2.js +lib/jasmine-core/node_boot.js \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/dependency_links.txt b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/requires.txt b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/requires.txt new file mode 100644 index 0000000..119bcbe --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/requires.txt @@ -0,0 +1,2 @@ +glob2>=0.4.1 +ordereddict==1.1 diff --git a/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/top_level.txt b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/top_level.txt new file mode 100644 index 0000000..fb7d8b2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/jasmine_core.egg-info/top_level.txt @@ -0,0 +1 @@ +jasmine_core diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/console/console.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/console/console.js new file mode 100644 index 0000000..e154806 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/console/console.js @@ -0,0 +1,190 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== 'undefined' && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().console = function(jRequire, j$) { + j$.ConsoleReporter = jRequire.ConsoleReporter(); +}; + +getJasmineRequireObj().ConsoleReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function ConsoleReporter(options) { + var print = options.print, + showColors = options.showColors || false, + onComplete = options.onComplete || function() {}, + timer = options.timer || noopTimer, + specCount, + failureCount, + failedSpecs = [], + pendingCount, + ansi = { + green: '\x1B[32m', + red: '\x1B[31m', + yellow: '\x1B[33m', + none: '\x1B[0m' + }, + failedSuites = []; + + print('ConsoleReporter is deprecated and will be removed in a future version.'); + + this.jasmineStarted = function() { + specCount = 0; + failureCount = 0; + pendingCount = 0; + print('Started'); + printNewline(); + timer.start(); + }; + + this.jasmineDone = function() { + printNewline(); + for (var i = 0; i < failedSpecs.length; i++) { + specFailureDetails(failedSpecs[i]); + } + + if(specCount > 0) { + printNewline(); + + var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' + + failureCount + ' ' + plural('failure', failureCount); + + if (pendingCount) { + specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount); + } + + print(specCounts); + } else { + print('No specs found'); + } + + printNewline(); + var seconds = timer.elapsed() / 1000; + print('Finished in ' + seconds + ' ' + plural('second', seconds)); + printNewline(); + + for(i = 0; i < failedSuites.length; i++) { + suiteFailureDetails(failedSuites[i]); + } + + onComplete(failureCount === 0); + }; + + this.specDone = function(result) { + specCount++; + + if (result.status == 'pending') { + pendingCount++; + print(colored('yellow', '*')); + return; + } + + if (result.status == 'passed') { + print(colored('green', '.')); + return; + } + + if (result.status == 'failed') { + failureCount++; + failedSpecs.push(result); + print(colored('red', 'F')); + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + failureCount++; + failedSuites.push(result); + } + }; + + return this; + + function printNewline() { + print('\n'); + } + + function colored(color, str) { + return showColors ? (ansi[color] + str + ansi.none) : str; + } + + function plural(str, count) { + return count == 1 ? str : str + 's'; + } + + function repeat(thing, times) { + var arr = []; + for (var i = 0; i < times; i++) { + arr.push(thing); + } + return arr; + } + + function indent(str, spaces) { + var lines = (str || '').split('\n'); + var newArr = []; + for (var i = 0; i < lines.length; i++) { + newArr.push(repeat(' ', spaces).join('') + lines[i]); + } + return newArr.join('\n'); + } + + function specFailureDetails(result) { + printNewline(); + print(result.fullName); + + for (var i = 0; i < result.failedExpectations.length; i++) { + var failedExpectation = result.failedExpectations[i]; + printNewline(); + print(indent(failedExpectation.message, 2)); + print(indent(failedExpectation.stack, 2)); + } + + printNewline(); + } + + function suiteFailureDetails(result) { + for (var i = 0; i < result.failedExpectations.length; i++) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', 'AfterAll ' + result.failedExpectations[i].message)); + + } + printNewline(); + } + } + + return ConsoleReporter; +}; diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core.js new file mode 100644 index 0000000..fe0ecd8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core.js @@ -0,0 +1,37 @@ +module.exports = require("./jasmine-core/jasmine.js"); +module.exports.boot = require('./jasmine-core/node_boot.js'); + +var path = require('path'), + fs = require('fs'); + +var rootPath = path.join(__dirname, "jasmine-core"), + bootFiles = ['boot.js'], + nodeBootFiles = ['node_boot.js'], + cssFiles = [], + jsFiles = [], + jsFilesToSkip = ['jasmine.js'].concat(bootFiles, nodeBootFiles); + +fs.readdirSync(rootPath).forEach(function(file) { + if(fs.statSync(path.join(rootPath, file)).isFile()) { + switch(path.extname(file)) { + case '.css': + cssFiles.push(file); + break; + case '.js': + if (jsFilesToSkip.indexOf(file) < 0) { + jsFiles.push(file); + } + break; + } + } +}); + +module.exports.files = { + path: rootPath, + bootDir: rootPath, + bootFiles: bootFiles, + nodeBootFiles: nodeBootFiles, + cssFiles: cssFiles, + jsFiles: ['jasmine.js'].concat(jsFiles), + imagesDir: path.join(__dirname, '../images') +}; diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/boot.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/boot.js new file mode 100644 index 0000000..a1002de --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/boot.js @@ -0,0 +1,152 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +(function() { + + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + window.jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. + */ + jasmineRequire.html(jasmine); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = jasmineRequire.interface(jasmine, env); + + /** + * Add all of the Jasmine global/public interface to the global scope, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + extend(window, jasmineInterface); + + /** + * ## Runner Parameters + * + * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. + */ + + var queryString = new jasmine.QueryString({ + getWindowLocation: function() { return window.location; } + }); + + var catchingExceptions = queryString.getParam("catch"); + env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions); + + var throwingExpectationFailures = queryString.getParam("throwFailures"); + env.throwOnExpectationFailure(throwingExpectationFailures); + + var random = queryString.getParam("random"); + env.randomizeTests(random); + + var seed = queryString.getParam("seed"); + if (seed) { + env.seed(seed); + } + + /** + * ## Reporters + * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). + */ + var htmlReporter = new jasmine.HtmlReporter({ + env: env, + onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); }, + onThrowExpectationsClick: function() { queryString.navigateWithNewParam("throwFailures", !env.throwingExpectationFailures()); }, + onRandomClick: function() { queryString.navigateWithNewParam("random", !env.randomTests()); }, + addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, + getContainer: function() { return document.body; }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmine.Timer() + }); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); + env.addReporter(htmlReporter); + + /** + * Filter which specs will be run by matching the start of the full name against the `spec` query param. + */ + var specFilter = new jasmine.HtmlSpecFilter({ + filterString: function() { return queryString.getParam("spec"); } + }); + + env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + + /** + * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. + */ + window.setTimeout = window.setTimeout; + window.setInterval = window.setInterval; + window.clearTimeout = window.clearTimeout; + window.clearInterval = window.clearInterval; + + /** + * ## Execution + * + * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. + */ + var currentWindowOnload = window.onload; + + window.onload = function() { + if (currentWindowOnload) { + currentWindowOnload(); + } + htmlReporter.initialize(); + env.execute(); + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + +}()); diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js new file mode 100644 index 0000000..fe95f89 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js @@ -0,0 +1,24 @@ +function Player() { +} +Player.prototype.play = function(song) { + this.currentlyPlayingSong = song; + this.isPlaying = true; +}; + +Player.prototype.pause = function() { + this.isPlaying = false; +}; + +Player.prototype.resume = function() { + if (this.isPlaying) { + throw new Error("song is already playing"); + } + + this.isPlaying = true; +}; + +Player.prototype.makeFavorite = function() { + this.currentlyPlayingSong.persistFavoriteStatus(true); +}; + +module.exports = Player; diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js new file mode 100644 index 0000000..3415bb8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js @@ -0,0 +1,9 @@ +function Song() { +} + +Song.prototype.persistFavoriteStatus = function(value) { + // something complicated + throw new Error("not yet implemented"); +}; + +module.exports = Song; diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/helpers/jasmine_examples/SpecHelper.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/helpers/jasmine_examples/SpecHelper.js new file mode 100644 index 0000000..578b3e8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/helpers/jasmine_examples/SpecHelper.js @@ -0,0 +1,15 @@ +beforeEach(function () { + jasmine.addMatchers({ + toBePlaying: function () { + return { + compare: function (actual, expected) { + var player = actual; + + return { + pass: player.currentlyPlayingSong === expected && player.isPlaying + } + } + }; + } + }); +}); diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/jasmine_examples/PlayerSpec.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/jasmine_examples/PlayerSpec.js new file mode 100644 index 0000000..80f149e --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/node_example/spec/jasmine_examples/PlayerSpec.js @@ -0,0 +1,60 @@ +describe("Player", function() { + var Player = require('../../lib/jasmine_examples/Player'); + var Song = require('../../lib/jasmine_examples/Song'); + var player; + var song; + + beforeEach(function() { + player = new Player(); + song = new Song(); + }); + + it("should be able to play a Song", function() { + player.play(song); + expect(player.currentlyPlayingSong).toEqual(song); + + //demonstrates use of custom matcher + expect(player).toBePlaying(song); + }); + + describe("when song has been paused", function() { + beforeEach(function() { + player.play(song); + player.pause(); + }); + + it("should indicate that the song is currently paused", function() { + expect(player.isPlaying).toBeFalsy(); + + // demonstrates use of 'not' with a custom matcher + expect(player).not.toBePlaying(song); + }); + + it("should be possible to resume", function() { + player.resume(); + expect(player.isPlaying).toBeTruthy(); + expect(player.currentlyPlayingSong).toEqual(song); + }); + }); + + // demonstrates use of spies to intercept and test method calls + it("tells the current song if the user has made it a favorite", function() { + spyOn(song, 'persistFavoriteStatus'); + + player.play(song); + player.makeFavorite(); + + expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true); + }); + + //demonstrates use of expected exceptions + describe("#resume", function() { + it("should throw an exception if song is already playing", function() { + player.play(song); + + expect(function() { + player.resume(); + }).toThrowError("song is already playing"); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/PlayerSpec.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/PlayerSpec.js new file mode 100644 index 0000000..f17521f --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/PlayerSpec.js @@ -0,0 +1,58 @@ +describe("Player", function() { + var player; + var song; + + beforeEach(function() { + player = new Player(); + song = new Song(); + }); + + it("should be able to play a Song", function() { + player.play(song); + expect(player.currentlyPlayingSong).toEqual(song); + + //demonstrates use of custom matcher + expect(player).toBePlaying(song); + }); + + describe("when song has been paused", function() { + beforeEach(function() { + player.play(song); + player.pause(); + }); + + it("should indicate that the song is currently paused", function() { + expect(player.isPlaying).toBeFalsy(); + + // demonstrates use of 'not' with a custom matcher + expect(player).not.toBePlaying(song); + }); + + it("should be possible to resume", function() { + player.resume(); + expect(player.isPlaying).toBeTruthy(); + expect(player.currentlyPlayingSong).toEqual(song); + }); + }); + + // demonstrates use of spies to intercept and test method calls + it("tells the current song if the user has made it a favorite", function() { + spyOn(song, 'persistFavoriteStatus'); + + player.play(song); + player.makeFavorite(); + + expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true); + }); + + //demonstrates use of expected exceptions + describe("#resume", function() { + it("should throw an exception if song is already playing", function() { + player.play(song); + + expect(function() { + player.resume(); + }).toThrowError("song is already playing"); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/SpecHelper.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/SpecHelper.js new file mode 100644 index 0000000..126752d --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/spec/SpecHelper.js @@ -0,0 +1,15 @@ +beforeEach(function () { + jasmine.addMatchers({ + toBePlaying: function () { + return { + compare: function (actual, expected) { + var player = actual; + + return { + pass: player.currentlyPlayingSong === expected && player.isPlaying + }; + } + }; + } + }); +}); diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Player.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Player.js new file mode 100644 index 0000000..fcce826 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Player.js @@ -0,0 +1,22 @@ +function Player() { +} +Player.prototype.play = function(song) { + this.currentlyPlayingSong = song; + this.isPlaying = true; +}; + +Player.prototype.pause = function() { + this.isPlaying = false; +}; + +Player.prototype.resume = function() { + if (this.isPlaying) { + throw new Error("song is already playing"); + } + + this.isPlaying = true; +}; + +Player.prototype.makeFavorite = function() { + this.currentlyPlayingSong.persistFavoriteStatus(true); +}; \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Song.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Song.js new file mode 100644 index 0000000..a8a3f2d --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/example/src/Song.js @@ -0,0 +1,7 @@ +function Song() { +} + +Song.prototype.persistFavoriteStatus = function(value) { + // something complicated + throw new Error("not yet implemented"); +}; \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js new file mode 100644 index 0000000..da23532 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js @@ -0,0 +1,473 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +jasmineRequire.html = function(j$) { + j$.ResultsNode = jasmineRequire.ResultsNode(); + j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); + j$.QueryString = jasmineRequire.QueryString(); + j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); +}; + +jasmineRequire.HtmlReporter = function(j$) { + + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + function HtmlReporter(options) { + var env = options.env || {}, + getContainer = options.getContainer, + createElement = options.createElement, + createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, + onThrowExpectationsClick = options.onThrowExpectationsClick || function() {}, + onRandomClick = options.onRandomClick || function() {}, + addToExistingQueryString = options.addToExistingQueryString || defaultQueryString, + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0, + htmlReporterMain, + symbols, + failedSuites = []; + + this.initialize = function() { + clearPrior(); + htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'}, + createDom('div', {className: 'jasmine-banner'}, + createDom('a', {className: 'jasmine-title', href: 'http://jasmine.github.io/', target: '_blank'}), + createDom('span', {className: 'jasmine-version'}, j$.version) + ), + createDom('ul', {className: 'jasmine-symbol-summary'}), + createDom('div', {className: 'jasmine-alert'}), + createDom('div', {className: 'jasmine-results'}, + createDom('div', {className: 'jasmine-failures'}) + ) + ); + getContainer().appendChild(htmlReporterMain); + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + var summary = createDom('div', {className: 'jasmine-summary'}); + + var topResults = new j$.ResultsNode({}, '', null), + currentParent = topResults; + + this.suiteStarted = function(result) { + currentParent.addChild(result, 'suite'); + currentParent = currentParent.last(); + }; + + this.suiteDone = function(result) { + if (result.status == 'failed') { + failedSuites.push(result); + } + + if (currentParent == topResults) { + return; + } + + currentParent = currentParent.parent; + }; + + this.specStarted = function(result) { + currentParent.addChild(result, 'spec'); + }; + + var failures = []; + this.specDone = function(result) { + if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') { + console.error('Spec \'' + result.fullName + '\' has no expectations.'); + } + + if (result.status != 'disabled') { + specsExecuted++; + } + + if (!symbols){ + symbols = find('.jasmine-symbol-summary'); + } + + symbols.appendChild(createDom('li', { + className: noExpectations(result) ? 'jasmine-empty' : 'jasmine-' + result.status, + id: 'spec_' + result.id, + title: result.fullName + } + )); + + if (result.status == 'failed') { + failureCount++; + + var failure = + createDom('div', {className: 'jasmine-spec-detail jasmine-failed'}, + createDom('div', {className: 'jasmine-description'}, + createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName) + ), + createDom('div', {className: 'jasmine-messages'}) + ); + var messages = failure.childNodes[1]; + + for (var i = 0; i < result.failedExpectations.length; i++) { + var expectation = result.failedExpectations[i]; + messages.appendChild(createDom('div', {className: 'jasmine-result-message'}, expectation.message)); + messages.appendChild(createDom('div', {className: 'jasmine-stack-trace'}, expectation.stack)); + } + + failures.push(failure); + } + + if (result.status == 'pending') { + pendingSpecCount++; + } + }; + + this.jasmineDone = function(doneResult) { + var banner = find('.jasmine-banner'); + var alert = find('.jasmine-alert'); + var order = doneResult && doneResult.order; + alert.appendChild(createDom('span', {className: 'jasmine-duration'}, 'finished in ' + timer.elapsed() / 1000 + 's')); + + banner.appendChild( + createDom('div', { className: 'jasmine-run-options' }, + createDom('span', { className: 'jasmine-trigger' }, 'Options'), + createDom('div', { className: 'jasmine-payload' }, + createDom('div', { className: 'jasmine-exceptions' }, + createDom('input', { + className: 'jasmine-raise', + id: 'jasmine-raise-exceptions', + type: 'checkbox' + }), + createDom('label', { className: 'jasmine-label', 'for': 'jasmine-raise-exceptions' }, 'raise exceptions')), + createDom('div', { className: 'jasmine-throw-failures' }, + createDom('input', { + className: 'jasmine-throw', + id: 'jasmine-throw-failures', + type: 'checkbox' + }), + createDom('label', { className: 'jasmine-label', 'for': 'jasmine-throw-failures' }, 'stop spec on expectation failure')), + createDom('div', { className: 'jasmine-random-order' }, + createDom('input', { + className: 'jasmine-random', + id: 'jasmine-random-order', + type: 'checkbox' + }), + createDom('label', { className: 'jasmine-label', 'for': 'jasmine-random-order' }, 'run tests in random order')) + ) + )); + + var raiseCheckbox = find('#jasmine-raise-exceptions'); + + raiseCheckbox.checked = !env.catchingExceptions(); + raiseCheckbox.onclick = onRaiseExceptionsClick; + + var throwCheckbox = find('#jasmine-throw-failures'); + throwCheckbox.checked = env.throwingExpectationFailures(); + throwCheckbox.onclick = onThrowExpectationsClick; + + var randomCheckbox = find('#jasmine-random-order'); + randomCheckbox.checked = env.randomTests(); + randomCheckbox.onclick = onRandomClick; + + var optionsMenu = find('.jasmine-run-options'), + optionsTrigger = optionsMenu.querySelector('.jasmine-trigger'), + optionsPayload = optionsMenu.querySelector('.jasmine-payload'), + isOpen = /\bjasmine-open\b/; + + optionsTrigger.onclick = function() { + if (isOpen.test(optionsPayload.className)) { + optionsPayload.className = optionsPayload.className.replace(isOpen, ''); + } else { + optionsPayload.className += ' jasmine-open'; + } + }; + + if (specsExecuted < totalSpecsDefined) { + var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all'; + alert.appendChild( + createDom('span', {className: 'jasmine-bar jasmine-skipped'}, + createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage) + ) + ); + } + var statusBarMessage = ''; + var statusBarClassName = 'jasmine-bar '; + + if (totalSpecsDefined > 0) { + statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount); + if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); } + statusBarClassName += (failureCount > 0) ? 'jasmine-failed' : 'jasmine-passed'; + } else { + statusBarClassName += 'jasmine-skipped'; + statusBarMessage += 'No specs found'; + } + + var seedBar; + if (order && order.random) { + seedBar = createDom('span', {className: 'jasmine-seed-bar'}, + ', randomized with seed ', + createDom('a', {title: 'randomized with seed ' + order.seed, href: seedHref(order.seed)}, order.seed) + ); + } + + alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage, seedBar)); + + for(i = 0; i < failedSuites.length; i++) { + var failedSuite = failedSuites[i]; + for(var j = 0; j < failedSuite.failedExpectations.length; j++) { + var errorBarMessage = 'AfterAll ' + failedSuite.failedExpectations[j].message; + var errorBarClassName = 'jasmine-bar jasmine-errored'; + alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage)); + } + } + + var results = find('.jasmine-results'); + results.appendChild(summary); + + summaryList(topResults, summary); + + function summaryList(resultsTree, domParent) { + var specListNode; + for (var i = 0; i < resultsTree.children.length; i++) { + var resultNode = resultsTree.children[i]; + if (resultNode.type == 'suite') { + var suiteListNode = createDom('ul', {className: 'jasmine-suite', id: 'suite-' + resultNode.result.id}, + createDom('li', {className: 'jasmine-suite-detail'}, + createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description) + ) + ); + + summaryList(resultNode, suiteListNode); + domParent.appendChild(suiteListNode); + } + if (resultNode.type == 'spec') { + if (domParent.getAttribute('class') != 'jasmine-specs') { + specListNode = createDom('ul', {className: 'jasmine-specs'}); + domParent.appendChild(specListNode); + } + var specDescription = resultNode.result.description; + if(noExpectations(resultNode.result)) { + specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription; + } + if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') { + specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason; + } + specListNode.appendChild( + createDom('li', { + className: 'jasmine-' + resultNode.result.status, + id: 'spec-' + resultNode.result.id + }, + createDom('a', {href: specHref(resultNode.result)}, specDescription) + ) + ); + } + } + } + + if (failures.length) { + alert.appendChild( + createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-spec-list'}, + createDom('span', {}, 'Spec List | '), + createDom('a', {className: 'jasmine-failures-menu', href: '#'}, 'Failures'))); + alert.appendChild( + createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-failure-list'}, + createDom('a', {className: 'jasmine-spec-list-menu', href: '#'}, 'Spec List'), + createDom('span', {}, ' | Failures '))); + + find('.jasmine-failures-menu').onclick = function() { + setMenuModeTo('jasmine-failure-list'); + }; + find('.jasmine-spec-list-menu').onclick = function() { + setMenuModeTo('jasmine-spec-list'); + }; + + setMenuModeTo('jasmine-failure-list'); + + var failureNode = find('.jasmine-failures'); + for (var i = 0; i < failures.length; i++) { + failureNode.appendChild(failures[i]); + } + } + }; + + return this; + + function find(selector) { + return getContainer().querySelector('.jasmine_html-reporter ' + selector); + } + + function clearPrior() { + // return the reporter + var oldReporter = find(''); + + if(oldReporter) { + getContainer().removeChild(oldReporter); + } + } + + function createDom(type, attrs, childrenVarArgs) { + var el = createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(createTextNode(child)); + } else { + if (child) { + el.appendChild(child); + } + } + } + + for (var attr in attrs) { + if (attr == 'className') { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; + } + + function pluralize(singular, count) { + var word = (count == 1 ? singular : singular + 's'); + + return '' + count + ' ' + word; + } + + function specHref(result) { + return addToExistingQueryString('spec', result.fullName); + } + + function seedHref(seed) { + return addToExistingQueryString('seed', seed); + } + + function defaultQueryString(key, value) { + return '?' + key + '=' + value; + } + + function setMenuModeTo(mode) { + htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode); + } + + function noExpectations(result) { + return (result.failedExpectations.length + result.passedExpectations.length) === 0 && + result.status === 'passed'; + } + } + + return HtmlReporter; +}; + +jasmineRequire.HtmlSpecFilter = function() { + function HtmlSpecFilter(options) { + var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; + } + + return HtmlSpecFilter; +}; + +jasmineRequire.ResultsNode = function() { + function ResultsNode(result, type, parent) { + this.result = result; + this.type = type; + this.parent = parent; + + this.children = []; + + this.addChild = function(result, type) { + this.children.push(new ResultsNode(result, type, this)); + }; + + this.last = function() { + return this.children[this.children.length - 1]; + }; + } + + return ResultsNode; +}; + +jasmineRequire.QueryString = function() { + function QueryString(options) { + + this.navigateWithNewParam = function(key, value) { + options.getWindowLocation().search = this.fullStringWithNewParam(key, value); + }; + + this.fullStringWithNewParam = function(key, value) { + var paramMap = queryStringToParamMap(); + paramMap[key] = value; + return toQueryString(paramMap); + }; + + this.getParam = function(key) { + return queryStringToParamMap()[key]; + }; + + return this; + + function toQueryString(paramMap) { + var qStrPairs = []; + for (var prop in paramMap) { + qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop])); + } + return '?' + qStrPairs.join('&'); + } + + function queryStringToParamMap() { + var paramStr = options.getWindowLocation().search.substring(1), + params = [], + paramMap = {}; + + if (paramStr.length > 0) { + params = paramStr.split('&'); + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + var value = decodeURIComponent(p[1]); + if (value === 'true' || value === 'false') { + value = JSON.parse(value); + } + paramMap[decodeURIComponent(p[0])] = value; + } + } + + return paramMap; + } + + } + + return QueryString; +}; diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.css b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.css new file mode 100644 index 0000000..6319982 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.css @@ -0,0 +1,58 @@ +body { overflow-y: scroll; } + +.jasmine_html-reporter { background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333; } +.jasmine_html-reporter a { text-decoration: none; } +.jasmine_html-reporter a:hover { text-decoration: underline; } +.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; } +.jasmine_html-reporter .jasmine-banner, .jasmine_html-reporter .jasmine-symbol-summary, .jasmine_html-reporter .jasmine-summary, .jasmine_html-reporter .jasmine-result-message, .jasmine_html-reporter .jasmine-spec .jasmine-description, .jasmine_html-reporter .jasmine-spec-detail .jasmine-description, .jasmine_html-reporter .jasmine-alert .jasmine-bar, .jasmine_html-reporter .jasmine-stack-trace { padding-left: 9px; padding-right: 9px; } +.jasmine_html-reporter .jasmine-banner { position: relative; } +.jasmine_html-reporter .jasmine-banner .jasmine-title { background: url('data:image/png;base64,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') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; } +.jasmine_html-reporter .jasmine-banner .jasmine-version { margin-left: 14px; position: relative; top: 6px; } +.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; } +.jasmine_html-reporter .jasmine-version { color: #aaa; } +.jasmine_html-reporter .jasmine-banner { margin-top: 14px; } +.jasmine_html-reporter .jasmine-duration { color: #fff; float: right; line-height: 28px; padding-right: 9px; } +.jasmine_html-reporter .jasmine-symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; } +.jasmine_html-reporter .jasmine-symbol-summary li { display: inline-block; height: 10px; width: 14px; font-size: 16px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed { font-size: 14px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed:before { color: #007069; content: "\02022"; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed { line-height: 9px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-disabled { font-size: 14px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-disabled:before { color: #bababa; content: "\02022"; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending { line-height: 17px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending:before { color: #ba9d37; content: "*"; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty { font-size: 14px; } +.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty:before { color: #ba9d37; content: "\02022"; } +.jasmine_html-reporter .jasmine-run-options { float: right; margin-right: 5px; border: 1px solid #8a4182; color: #8a4182; position: relative; line-height: 20px; } +.jasmine_html-reporter .jasmine-run-options .jasmine-trigger { cursor: pointer; padding: 8px 16px; } +.jasmine_html-reporter .jasmine-run-options .jasmine-payload { position: absolute; display: none; right: -1px; border: 1px solid #8a4182; background-color: #eee; white-space: nowrap; padding: 4px 8px; } +.jasmine_html-reporter .jasmine-run-options .jasmine-payload.jasmine-open { display: block; } +.jasmine_html-reporter .jasmine-bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +.jasmine_html-reporter .jasmine-bar.jasmine-failed { background-color: #ca3a11; } +.jasmine_html-reporter .jasmine-bar.jasmine-passed { background-color: #007069; } +.jasmine_html-reporter .jasmine-bar.jasmine-skipped { background-color: #bababa; } +.jasmine_html-reporter .jasmine-bar.jasmine-errored { background-color: #ca3a11; } +.jasmine_html-reporter .jasmine-bar.jasmine-menu { background-color: #fff; color: #aaa; } +.jasmine_html-reporter .jasmine-bar.jasmine-menu a { color: #333; } +.jasmine_html-reporter .jasmine-bar a { color: white; } +.jasmine_html-reporter.jasmine-spec-list .jasmine-bar.jasmine-menu.jasmine-failure-list, .jasmine_html-reporter.jasmine-spec-list .jasmine-results .jasmine-failures { display: none; } +.jasmine_html-reporter.jasmine-failure-list .jasmine-bar.jasmine-menu.jasmine-spec-list, .jasmine_html-reporter.jasmine-failure-list .jasmine-summary { display: none; } +.jasmine_html-reporter .jasmine-results { margin-top: 14px; } +.jasmine_html-reporter .jasmine-summary { margin-top: 14px; } +.jasmine_html-reporter .jasmine-summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } +.jasmine_html-reporter .jasmine-summary ul.jasmine-suite { margin-top: 7px; margin-bottom: 7px; } +.jasmine_html-reporter .jasmine-summary li.jasmine-passed a { color: #007069; } +.jasmine_html-reporter .jasmine-summary li.jasmine-failed a { color: #ca3a11; } +.jasmine_html-reporter .jasmine-summary li.jasmine-empty a { color: #ba9d37; } +.jasmine_html-reporter .jasmine-summary li.jasmine-pending a { color: #ba9d37; } +.jasmine_html-reporter .jasmine-summary li.jasmine-disabled a { color: #bababa; } +.jasmine_html-reporter .jasmine-description + .jasmine-suite { margin-top: 0; } +.jasmine_html-reporter .jasmine-suite { margin-top: 14px; } +.jasmine_html-reporter .jasmine-suite a { color: #333; } +.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail { margin-bottom: 28px; } +.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description { background-color: #ca3a11; } +.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description a { color: white; } +.jasmine_html-reporter .jasmine-result-message { padding-top: 14px; color: #333; white-space: pre; } +.jasmine_html-reporter .jasmine-result-message span.jasmine-result { display: block; } +.jasmine_html-reporter .jasmine-stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.js new file mode 100644 index 0000000..bea469d --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/jasmine.js @@ -0,0 +1,3454 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +var getJasmineRequireObj = (function (jasmineGlobal) { + var jasmineRequire; + + if (typeof module !== 'undefined' && module.exports) { + if (typeof global !== 'undefined') { + jasmineGlobal = global; + } else { + jasmineGlobal = {}; + } + jasmineRequire = exports; + } else { + if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') { + jasmineGlobal = window; + } + jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {}; + } + + function getJasmineRequire() { + return jasmineRequire; + } + + getJasmineRequire().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$, jasmineGlobal); + j$.util = jRequire.util(); + j$.errors = jRequire.errors(); + j$.Any = jRequire.Any(j$); + j$.Anything = jRequire.Anything(j$); + j$.CallTracker = jRequire.CallTracker(); + j$.MockDate = jRequire.MockDate(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.ArrayContaining = jRequire.ArrayContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(j$); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyRegistry = jRequire.SpyRegistry(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.StringMatching = jRequire.StringMatching(j$); + j$.Suite = jRequire.Suite(j$); + j$.Timer = jRequire.Timer(); + j$.TreeProcessor = jRequire.TreeProcessor(); + j$.version = jRequire.version(); + j$.Order = jRequire.Order(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; + }; + + return getJasmineRequire; +})(this); + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + 'toBe', + 'toBeCloseTo', + 'toBeDefined', + 'toBeFalsy', + 'toBeGreaterThan', + 'toBeLessThan', + 'toBeNaN', + 'toBeNull', + 'toBeTruthy', + 'toBeUndefined', + 'toContain', + 'toEqual', + 'toHaveBeenCalled', + 'toHaveBeenCalledWith', + 'toHaveBeenCalledTimes', + 'toMatch', + 'toThrow', + 'toThrowError' + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = function(j$, jasmineGlobal) { + j$.unimplementedMethod_ = function() { + throw new Error('unimplemented method'); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { + return jasmineGlobal; + }; + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_('Array', value); + }; + + j$.isString_ = function(value) { + return j$.isA_('String', value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_('Number', value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.fnNameFor = function(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.anything = function() { + return new j$.Anything(); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.stringMatching = function(expected) { + return new j$.StringMatching(expected); + }; + + j$.arrayContaining = function(sample) { + return new j$.ArrayContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + var callData = { + object: this, + args: Array.prototype.slice.apply(arguments) + }; + + callTracker.track(callData); + var returnValue = spyStrategy.exec.apply(this, arguments); + callData.returnValue = returnValue; + + return returnValue; + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) { + methodNames = baseName; + baseName = 'unknown'; + } + + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw 'createSpyObj requires a non-empty array of method names to create spies for'; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; +}; + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(//g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + util.arrayContains = function(array, search) { + var i = array.length; + while (i--) { + if (array[i] === search) { + return true; + } + } + return false; + }; + + util.clone = function(obj) { + if (Object.prototype.toString.apply(obj) === '[object Array]') { + return obj.slice(); + } + + var cloned = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + cloned[prop] = obj[prop]; + } + } + + return cloned; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.queueableFn = attrs.queueableFn; + this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; }; + this.userContext = attrs.userContext || function() { return {}; }; + this.onStart = attrs.onStart || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure; + + if (!this.queueableFn.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [], + passedExpectations: [], + pendingReason: '' + }; + } + + Spec.prototype.addExpectationResult = function(passed, data, isError) { + var expectationResult = this.expectationResultFactory(data); + if (passed) { + this.result.passedExpectations.push(expectationResult); + } else { + this.result.failedExpectations.push(expectationResult); + + if (this.throwOnExpectationFailure && !isError) { + throw new j$.errors.ExpectationFailed(); + } + } + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete, enabled) { + var self = this; + + this.onStart(this); + + if (!this.isExecutable() || this.markedPending || enabled === false) { + complete(enabled); + return; + } + + var fns = this.beforeAndAfterFns(); + var allFns = fns.befores.concat(this.queueableFn).concat(fns.afters); + + this.queueRunnerFactory({ + queueableFns: allFns, + onException: function() { self.onException.apply(self, arguments); }, + onComplete: complete, + userContext: this.userContext() + }); + + function complete(enabledAgain) { + self.result.status = self.status(enabledAgain); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.onException = function onException(e) { + if (Spec.isPendingSpecException(e)) { + this.pend(extractCustomPendingMessage(e)); + return; + } + + if (e instanceof j$.errors.ExpectationFailed) { + return; + } + + this.addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: e + }, true); + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function(message) { + this.markedPending = true; + if (message) { + this.result.pendingReason = message; + } + }; + + Spec.prototype.getResult = function() { + this.result.status = this.status(); + return this.result; + }; + + Spec.prototype.status = function(enabled) { + if (this.disabled || enabled === false) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.isExecutable = function() { + return !this.disabled; + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + var extractCustomPendingMessage = function(e) { + var fullMessage = e.toString(), + boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage), + boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length; + + return fullMessage.substr(boilerplateEnd); + }; + + Spec.pendingSpecExceptionMessage = '=> marked Pending'; + + Spec.isPendingSpecException = function(e) { + return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Spec = jasmineRequire.Spec; +} + +/*jshint bitwise: false*/ + +getJasmineRequireObj().Order = function() { + function Order(options) { + this.random = 'random' in options ? options.random : true; + var seed = this.seed = options.seed || generateSeed(); + this.sort = this.random ? randomOrder : naturalOrder; + + function naturalOrder(items) { + return items; + } + + function randomOrder(items) { + var copy = items.slice(); + copy.sort(function(a, b) { + return jenkinsHash(seed + a.id) - jenkinsHash(seed + b.id); + }); + return copy; + } + + function generateSeed() { + return String(Math.random()).slice(-5); + } + + // Bob Jenkins One-at-a-Time Hash algorithm is a non-cryptographic hash function + // used to get a different output when the key changes slighly. + // We use your return to sort the children randomly in a consistent way when + // used in conjunction with a seed + + function jenkinsHash(key) { + var hash, i; + for(hash = i = 0; i < key.length; ++i) { + hash += key.charCodeAt(i); + hash += (hash << 10); + hash ^= (hash >> 6); + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + return hash; + } + + } + + return Order; +}; + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + this.clock = new j$.Clock(global, function () { return new j$.DelayedFunctionScheduler(); }, new j$.MockDate(global)); + + var runnableLookupTable = {}; + var runnableResources = {}; + + var currentSpec = null; + var currentlyExecutingSuites = []; + var currentDeclarationSuite = null; + var throwOnExpectationFailure = false; + var random = false; + var seed = null; + + var currentSuite = function() { + return currentlyExecutingSuites[currentlyExecutingSuites.length - 1]; + }; + + var currentRunnable = function() { + return currentSpec || currentSuite(); + }; + + var reporter = new j$.ReportDispatcher([ + 'jasmineStarted', + 'jasmineDone', + 'suiteStarted', + 'suiteDone', + 'specStarted', + 'specDone' + ]); + + this.specFilter = function() { + return true; + }; + + this.addCustomEqualityTester = function(tester) { + if(!currentRunnable()) { + throw new Error('Custom Equalities must be added in a before function or a spec'); + } + runnableResources[currentRunnable().id].customEqualityTesters.push(tester); + }; + + this.addMatchers = function(matchersToAdd) { + if(!currentRunnable()) { + throw new Error('Matchers must be added in a before function or a spec'); + } + var customMatchers = runnableResources[currentRunnable().id].customMatchers; + for (var matcherName in matchersToAdd) { + customMatchers[matcherName] = matchersToAdd[matcherName]; + } + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: runnableResources[spec.id].customEqualityTesters, + customMatchers: runnableResources[spec.id].customMatchers, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var defaultResourcesForRunnable = function(id, parentRunnableId) { + var resources = {spies: [], customEqualityTesters: [], customMatchers: {}}; + + if(runnableResources[parentRunnableId]){ + resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters); + resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers); + } + + runnableResources[id] = resources; + }; + + var clearResourcesForRunnable = function(id) { + spyRegistry.clearSpies(); + delete runnableResources[id]; + }; + + var beforeAndAfterFns = function(suite) { + return function() { + var befores = [], + afters = []; + + while(suite) { + befores = befores.concat(suite.beforeFns); + afters = afters.concat(suite.afterFns); + + suite = suite.parentSuite; + } + + return { + befores: befores.reverse(), + afters: afters + }; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + var maximumSpecCallbackDepth = 20; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + this.throwOnExpectationFailure = function(value) { + throwOnExpectationFailure = !!value; + }; + + this.throwingExpectationFailures = function() { + return throwOnExpectationFailure; + }; + + this.randomizeTests = function(value) { + random = !!value; + }; + + this.randomTests = function() { + return random; + }; + + this.seed = function(value) { + if (value) { + seed = value; + } + return seed; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + options.timeout = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}; + options.fail = self.fail; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory + }); + runnableLookupTable[topSuite.id] = topSuite; + defaultResourcesForRunnable(topSuite.id); + currentDeclarationSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + if(!runnablesToRun) { + if (focusedRunnables.length) { + runnablesToRun = focusedRunnables; + } else { + runnablesToRun = [topSuite.id]; + } + } + + var order = new j$.Order({ + random: random, + seed: seed + }); + + var processor = new j$.TreeProcessor({ + tree: topSuite, + runnableIds: runnablesToRun, + queueRunnerFactory: queueRunnerFactory, + nodeStart: function(suite) { + currentlyExecutingSuites.push(suite); + defaultResourcesForRunnable(suite.id, suite.parentSuite.id); + reporter.suiteStarted(suite.result); + }, + nodeComplete: function(suite, result) { + if (!suite.disabled) { + clearResourcesForRunnable(suite.id); + } + currentlyExecutingSuites.pop(); + reporter.suiteDone(result); + }, + orderChildren: function(node) { + return order.sort(node.children); + } + }); + + if(!processor.processTree().valid) { + throw new Error('Invalid order: would cause a beforeAll or afterAll to be run multiple times'); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + processor.execute(function() { + reporter.jasmineDone({ + order: order + }); + }); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + var spyRegistry = new j$.SpyRegistry({currentSpies: function() { + if(!currentRunnable()) { + throw new Error('Spies must be created in a before function or a spec'); + } + return runnableResources[currentRunnable().id].spies; + }}); + + this.spyOn = function() { + return spyRegistry.spyOn.apply(spyRegistry, arguments); + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentDeclarationSuite, + expectationFactory: expectationFactory, + expectationResultFactory: expectationResultFactory, + throwOnExpectationFailure: throwOnExpectationFailure + }); + + runnableLookupTable[suite.id] = suite; + return suite; + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + if (specDefinitions.length > 0) { + throw new Error('describe does not expect a done parameter'); + } + if (currentDeclarationSuite.markedPending) { + suite.pend(); + } + addSpecsToSuite(suite, specDefinitions); + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = suiteFactory(description); + suite.pend(); + addSpecsToSuite(suite, specDefinitions); + return suite; + }; + + var focusedRunnables = []; + + this.fdescribe = function(description, specDefinitions) { + var suite = suiteFactory(description); + suite.isFocused = true; + + focusedRunnables.push(suite.id); + unfocusAncestor(); + addSpecsToSuite(suite, specDefinitions); + + return suite; + }; + + function addSpecsToSuite(suite, specDefinitions) { + var parentSuite = currentDeclarationSuite; + parentSuite.addChild(suite); + currentDeclarationSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + self.it('encountered a declaration exception', function() { + throw declarationError; + }); + } + + currentDeclarationSuite = parentSuite; + } + + function findFocusedAncestor(suite) { + while (suite) { + if (suite.isFocused) { + return suite.id; + } + suite = suite.parentSuite; + } + + return null; + } + + function unfocusAncestor() { + var focusedAncestor = findFocusedAncestor(currentDeclarationSuite); + if (focusedAncestor) { + for (var i = 0; i < focusedRunnables.length; i++) { + if (focusedRunnables[i] === focusedAncestor) { + focusedRunnables.splice(i, 1); + break; + } + } + } + } + + var specFactory = function(description, fn, suite, timeout) { + totalSpecsDefined++; + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeAndAfterFns: beforeAndAfterFns(suite), + expectationFactory: expectationFactory, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + userContext: function() { return suite.clonedSharedUserContext(); }, + queueableFn: { + fn: fn, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }, + throwOnExpectationFailure: throwOnExpectationFailure + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function specResultCallback(result) { + clearResourcesForRunnable(spec.id); + currentSpec = null; + reporter.specDone(result); + } + + function specStarted(spec) { + currentSpec = spec; + defaultResourcesForRunnable(spec.id, suite.id); + reporter.specStarted(spec.result); + } + }; + + this.it = function(description, fn, timeout) { + var spec = specFactory(description, fn, currentDeclarationSuite, timeout); + if (currentDeclarationSuite.markedPending) { + spec.pend(); + } + currentDeclarationSuite.addChild(spec); + return spec; + }; + + this.xit = function() { + var spec = this.it.apply(this, arguments); + spec.pend('Temporarily disabled with xit'); + return spec; + }; + + this.fit = function(description, fn, timeout){ + var spec = specFactory(description, fn, currentDeclarationSuite, timeout); + currentDeclarationSuite.addChild(spec); + focusedRunnables.push(spec.id); + unfocusAncestor(); + return spec; + }; + + this.expect = function(actual) { + if (!currentRunnable()) { + throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); + } + + return currentRunnable().expect(actual); + }; + + this.beforeEach = function(beforeEachFunction, timeout) { + currentDeclarationSuite.beforeEach({ + fn: beforeEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.beforeAll = function(beforeAllFunction, timeout) { + currentDeclarationSuite.beforeAll({ + fn: beforeAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterEach = function(afterEachFunction, timeout) { + currentDeclarationSuite.afterEach({ + fn: afterEachFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.afterAll = function(afterAllFunction, timeout) { + currentDeclarationSuite.afterAll({ + fn: afterAllFunction, + timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } + }); + }; + + this.pending = function(message) { + var fullMessage = j$.Spec.pendingSpecExceptionMessage; + if(message) { + fullMessage += message; + } + throw fullMessage; + }; + + this.fail = function(error) { + var message = 'Failed'; + if (error) { + message += ': '; + message += error.message || error; + } + + currentRunnable().addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + message: message, + error: error && error.message ? error : null + }); + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = 'loaded'; + + this.started = false; + this.finished = false; + this.runDetails = {}; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function(runDetails) { + this.finished = true; + this.runDetails = runDetails; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = [], + suites_hash = {}; + + this.suiteStarted = function(result) { + suites_hash[result.id] = result; + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + this.suiteResults = function(index, length) { + return suites.slice(index, index + length); + }; + + function storeSuite(result) { + suites.push(result); + suites_hash[result.id] = result; + } + + this.suites = function() { + return suites_hash; + }; + + var specs = []; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionSchedulerFactory, mockDate) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + delayedFunctionScheduler, + timer; + + + self.install = function() { + if(!originalTimingFunctionsIntact()) { + throw new Error('Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?'); + } + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + delayedFunctionScheduler = delayedFunctionSchedulerFactory(); + installed = true; + + return self; + }; + + self.uninstall = function() { + delayedFunctionScheduler = null; + mockDate.uninstall(); + replace(global, realTimingFunctions); + + timer = realTimingFunctions; + installed = false; + }; + + self.withMock = function(closure) { + this.install(); + try { + closure(); + } finally { + this.uninstall(); + } + }; + + self.mockDate = function(initialDate) { + mockDate.install(initialDate); + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + mockDate.tick(millis); + delayedFunctionScheduler.tick(millis); + } else { + throw new Error('Mock clock is not installed, use jasmine.clock().install()'); + } + }; + + return self; + + function originalTimingFunctionsIntact() { + return global.setTimeout === realTimingFunctions.setTimeout && + global.clearTimeout === realTimingFunctions.clearTimeout && + global.setInterval === realTimingFunctions.setInterval && + global.clearInterval === realTimingFunctions.clearInterval; + } + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, n); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function forEachFunction(funcsToRun, callback) { + for (var i = 0; i < funcsToRun.length; ++i) { + callback(funcsToRun[i]); + } + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + forEachFunction(funcsToRun, function(funcToRun) { + if (funcToRun.recurring) { + reschedule(funcToRun); + } + }); + + forEachFunction(funcsToRun, function(funcToRun) { + funcToRun.funcToCall.apply(null, funcToRun.params || []); + }); + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = ''; + + if (error.name && error.message) { + message += error.name + ': ' + error.message; + } else { + message += error.toString() + ' thrown'; + } + + if (error.fileName || error.sourceURL) { + message += ' in ' + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += ' (line ' + (error.line || error.lineNumber) + ')'; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + var customMatchers = options.customMatchers || {}; + for (var matcherName in customMatchers) { + this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]); + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ''; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + if (Object.prototype.toString.apply(result.message) === '[object Function]') { + message = result.message(); + } else { + message = result.message; + } + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + var result = { + matcherName: options.matcherName, + message: message(), + stack: stack(), + passed: options.passed + }; + + if(!result.passed) { + result.expected = options.expected; + result.actual = options.actual; + } + + return result; + + function message() { + if (options.passed) { + return 'Passed.'; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ''; + } + + function stack() { + if (options.passed) { + return ''; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().MockDate = function() { + function MockDate(global) { + var self = this; + var currentTime = 0; + + if (!global || !global.Date) { + self.install = function() {}; + self.tick = function() {}; + self.uninstall = function() {}; + return self; + } + + var GlobalDate = global.Date; + + self.install = function(mockDate) { + if (mockDate instanceof GlobalDate) { + currentTime = mockDate.getTime(); + } else { + currentTime = new GlobalDate().getTime(); + } + + global.Date = FakeDate; + }; + + self.tick = function(millis) { + millis = millis || 0; + currentTime = currentTime + millis; + }; + + self.uninstall = function() { + currentTime = 0; + global.Date = GlobalDate; + }; + + createDateProperties(); + + return self; + + function FakeDate() { + switch(arguments.length) { + case 0: + return new GlobalDate(currentTime); + case 1: + return new GlobalDate(arguments[0]); + case 2: + return new GlobalDate(arguments[0], arguments[1]); + case 3: + return new GlobalDate(arguments[0], arguments[1], arguments[2]); + case 4: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]); + case 5: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4]); + case 6: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5]); + default: + return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], + arguments[4], arguments[5], arguments[6]); + } + } + + function createDateProperties() { + FakeDate.prototype = GlobalDate.prototype; + + FakeDate.now = function() { + if (GlobalDate.now) { + return currentTime; + } else { + throw new Error('Browser does not support Date.now()'); + } + }; + + FakeDate.toSource = GlobalDate.toSource; + FakeDate.toString = GlobalDate.toString; + FakeDate.parse = GlobalDate.parse; + FakeDate.UTC = GlobalDate.UTC; + } + } + + return MockDate; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + this.seen = []; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === 0 && 1/value === -Infinity) { + this.emitScalar('-0'); + } else if (value === j$.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar('spy on ' + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (value.toString && typeof value === 'object' && !(value instanceof Array) && value.toString !== Object.prototype.toString) { + this.emitScalar(value.toString()); + } else if (j$.util.arrayContains(this.seen, value)) { + this.emitScalar(''); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + this.seen.push(value); + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + this.seen.pop(); + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append('\'' + value + '\''); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Array'); + return; + } + var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); + this.append('[ '); + for (var i = 0; i < length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + if(array.length > length){ + this.append(', ...'); + } + + var self = this; + var first = array.length === 0; + this.iterateObject(array, function(property, isGetter) { + if (property.match(/^\d+$/)) { + return; + } + + if (first) { + first = false; + } else { + self.append(', '); + } + + self.formatProperty(array, property, isGetter); + }); + + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null'; + this.append(constructorName); + + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + return; + } + + var self = this; + this.append('({ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.formatProperty(obj, property, isGetter); + }); + + this.append(' })'); + }; + + StringPrettyPrinter.prototype.formatProperty = function(obj, property, isGetter) { + this.append(property); + this.append(': '); + if (isGetter) { + this.append(''); + } else { + this.format(obj[property]); + } + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function(j$) { + + function once(fn) { + var called = false; + return function() { + if (!called) { + called = true; + fn(); + } + }; + } + + function QueueRunner(attrs) { + this.queueableFns = attrs.queueableFns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.userContext = attrs.userContext || {}; + this.timeout = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + this.fail = attrs.fail || function() {}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.queueableFns, 0); + }; + + QueueRunner.prototype.run = function(queueableFns, recursiveIndex) { + var length = queueableFns.length, + self = this, + iterativeIndex; + + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var queueableFn = queueableFns[iterativeIndex]; + if (queueableFn.fn.length > 0) { + attemptAsync(queueableFn); + return; + } else { + attemptSync(queueableFn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(queueableFn) { + try { + queueableFn.fn.call(self.userContext); + } catch (e) { + handleException(e, queueableFn); + } + } + + function attemptAsync(queueableFn) { + var clearTimeout = function () { + Function.prototype.apply.apply(self.timeout.clearTimeout, [j$.getGlobal(), [timeoutId]]); + }, + next = once(function () { + clearTimeout(timeoutId); + self.run(queueableFns, iterativeIndex + 1); + }), + timeoutId; + + next.fail = function() { + self.fail.apply(null, arguments); + next(); + }; + + if (queueableFn.timeout) { + timeoutId = Function.prototype.apply.apply(self.timeout.setTimeout, [j$.getGlobal(), [function() { + var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'); + onException(error); + next(); + }, queueableFn.timeout()]]); + } + + try { + queueableFn.fn.call(self.userContext, next); + } catch (e) { + handleException(e, queueableFn); + next(); + } + } + + function onException(e) { + self.onException(e); + } + + function handleException(e, queueableFn) { + onException(e); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyRegistry = function(j$) { + + function SpyRegistry(options) { + options = options || {}; + var currentSpies = options.currentSpies || function() { return []; }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); + } + + if (j$.util.isUndefined(methodName)) { + throw new Error('No method name supplied'); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var descriptor; + try { + descriptor = Object.getOwnPropertyDescriptor(obj, methodName); + } catch(e) { + // IE 8 doesn't support `definePropery` on non-DOM nodes + } + + if (descriptor && !(descriptor.writable || descriptor.set)) { + throw new Error(methodName + ' is not declared writable or has no setter'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + currentSpies().push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + this.clearSpies = function() { + var spies = currentSpies(); + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + }; + } + + return SpyRegistry; +}; + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || 'unknown', + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.returnValues = function() { + var values = Array.prototype.slice.call(arguments); + plan = function () { + return values.shift(); + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function(j$) { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.expectationFactory = attrs.expectationFactory; + this.expectationResultFactory = attrs.expectationResultFactory; + this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure; + + this.beforeFns = []; + this.afterFns = []; + this.beforeAllFns = []; + this.afterAllFns = []; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [] + }; + } + + Suite.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.pend = function(message) { + this.markedPending = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.beforeAll = function(fn) { + this.beforeAllFns.push(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.afterAll = function(fn) { + this.afterAllFns.push(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'finished'; + } + }; + + Suite.prototype.isExecutable = function() { + return !this.disabled; + }; + + Suite.prototype.canBeReentered = function() { + return this.beforeAllFns.length === 0 && this.afterAllFns.length === 0; + }; + + Suite.prototype.getResult = function() { + this.result.status = this.status(); + return this.result; + }; + + Suite.prototype.sharedUserContext = function() { + if (!this.sharedContext) { + this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {}; + } + + return this.sharedContext; + }; + + Suite.prototype.clonedSharedUserContext = function() { + return clone(this.sharedUserContext()); + }; + + Suite.prototype.onException = function() { + if (arguments[0] instanceof j$.errors.ExpectationFailed) { + return; + } + + if(isAfterAll(this.children)) { + var data = { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: arguments[0] + }; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.onException.apply(child, arguments); + } + } + }; + + Suite.prototype.addExpectationResult = function () { + if(isAfterAll(this.children) && isFailure(arguments)){ + var data = arguments[1]; + this.result.failedExpectations.push(this.expectationResultFactory(data)); + if(this.throwOnExpectationFailure) { + throw new j$.errors.ExpectationFailed(); + } + } else { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + try { + child.addExpectationResult.apply(child, arguments); + } catch(e) { + // keep going + } + } + } + }; + + function isAfterAll(children) { + return children && children[0].result.status; + } + + function isFailure(args) { + return !args[0]; + } + + function clone(obj) { + var clonedObj = {}; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + clonedObj[prop] = obj[prop]; + } + } + + return clonedObj; + } + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + var defaultNow = (function(Date) { + return function() { return new Date().getTime(); }; + })(Date); + + function Timer(options) { + options = options || {}; + + var now = options.now || defaultNow, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().TreeProcessor = function() { + function TreeProcessor(attrs) { + var tree = attrs.tree, + runnableIds = attrs.runnableIds, + queueRunnerFactory = attrs.queueRunnerFactory, + nodeStart = attrs.nodeStart || function() {}, + nodeComplete = attrs.nodeComplete || function() {}, + orderChildren = attrs.orderChildren || function(node) { return node.children; }, + stats = { valid: true }, + processed = false, + defaultMin = Infinity, + defaultMax = 1 - Infinity; + + this.processTree = function() { + processNode(tree, false); + processed = true; + return stats; + }; + + this.execute = function(done) { + if (!processed) { + this.processTree(); + } + + if (!stats.valid) { + throw 'invalid order'; + } + + var childFns = wrapChildren(tree, 0); + + queueRunnerFactory({ + queueableFns: childFns, + userContext: tree.sharedUserContext(), + onException: function() { + tree.onException.apply(tree, arguments); + }, + onComplete: done + }); + }; + + function runnableIndex(id) { + for (var i = 0; i < runnableIds.length; i++) { + if (runnableIds[i] === id) { + return i; + } + } + } + + function processNode(node, parentEnabled) { + var executableIndex = runnableIndex(node.id); + + if (executableIndex !== undefined) { + parentEnabled = true; + } + + parentEnabled = parentEnabled && node.isExecutable(); + + if (!node.children) { + stats[node.id] = { + executable: parentEnabled && node.isExecutable(), + segments: [{ + index: 0, + owner: node, + nodes: [node], + min: startingMin(executableIndex), + max: startingMax(executableIndex) + }] + }; + } else { + var hasExecutableChild = false; + + var orderedChildren = orderChildren(node); + + for (var i = 0; i < orderedChildren.length; i++) { + var child = orderedChildren[i]; + + processNode(child, parentEnabled); + + if (!stats.valid) { + return; + } + + var childStats = stats[child.id]; + + hasExecutableChild = hasExecutableChild || childStats.executable; + } + + stats[node.id] = { + executable: hasExecutableChild + }; + + segmentChildren(node, orderedChildren, stats[node.id], executableIndex); + + if (!node.canBeReentered() && stats[node.id].segments.length > 1) { + stats = { valid: false }; + } + } + } + + function startingMin(executableIndex) { + return executableIndex === undefined ? defaultMin : executableIndex; + } + + function startingMax(executableIndex) { + return executableIndex === undefined ? defaultMax : executableIndex; + } + + function segmentChildren(node, orderedChildren, nodeStats, executableIndex) { + var currentSegment = { index: 0, owner: node, nodes: [], min: startingMin(executableIndex), max: startingMax(executableIndex) }, + result = [currentSegment], + lastMax = defaultMax, + orderedChildSegments = orderChildSegments(orderedChildren); + + function isSegmentBoundary(minIndex) { + return lastMax !== defaultMax && minIndex !== defaultMin && lastMax < minIndex - 1; + } + + for (var i = 0; i < orderedChildSegments.length; i++) { + var childSegment = orderedChildSegments[i], + maxIndex = childSegment.max, + minIndex = childSegment.min; + + if (isSegmentBoundary(minIndex)) { + currentSegment = {index: result.length, owner: node, nodes: [], min: defaultMin, max: defaultMax}; + result.push(currentSegment); + } + + currentSegment.nodes.push(childSegment); + currentSegment.min = Math.min(currentSegment.min, minIndex); + currentSegment.max = Math.max(currentSegment.max, maxIndex); + lastMax = maxIndex; + } + + nodeStats.segments = result; + } + + function orderChildSegments(children) { + var specifiedOrder = [], + unspecifiedOrder = []; + + for (var i = 0; i < children.length; i++) { + var child = children[i], + segments = stats[child.id].segments; + + for (var j = 0; j < segments.length; j++) { + var seg = segments[j]; + + if (seg.min === defaultMin) { + unspecifiedOrder.push(seg); + } else { + specifiedOrder.push(seg); + } + } + } + + specifiedOrder.sort(function(a, b) { + return a.min - b.min; + }); + + return specifiedOrder.concat(unspecifiedOrder); + } + + function executeNode(node, segmentNumber) { + if (node.children) { + return { + fn: function(done) { + nodeStart(node); + + queueRunnerFactory({ + onComplete: function() { + nodeComplete(node, node.getResult()); + done(); + }, + queueableFns: wrapChildren(node, segmentNumber), + userContext: node.sharedUserContext(), + onException: function() { + node.onException.apply(node, arguments); + } + }); + } + }; + } else { + return { + fn: function(done) { node.execute(done, stats[node.id].executable); } + }; + } + } + + function wrapChildren(node, segmentNumber) { + var result = [], + segmentChildren = stats[node.id].segments[segmentNumber].nodes; + + for (var i = 0; i < segmentChildren.length; i++) { + result.push(executeNode(segmentChildren[i].owner, segmentChildren[i].index)); + } + + if (!stats[node.id].executable) { + return result; + } + + return node.beforeAllFns.concat(result).concat(node.afterAllFns); + } + } + + return TreeProcessor; +}; + +getJasmineRequireObj().Any = function(j$) { + + function Any(expectedObject) { + if (typeof expectedObject === 'undefined') { + throw new TypeError( + 'jasmine.any() expects to be passed a constructor function. ' + + 'Please pass one or use jasmine.anything() to match any object.' + ); + } + this.expectedObject = expectedObject; + } + + Any.prototype.asymmetricMatch = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return ''; + }; + + return Any; +}; + +getJasmineRequireObj().Anything = function(j$) { + + function Anything() {} + + Anything.prototype.asymmetricMatch = function(other) { + return !j$.util.isUndefined(other) && other !== null; + }; + + Anything.prototype.jasmineToString = function() { + return ''; + }; + + return Anything; +}; + +getJasmineRequireObj().ArrayContaining = function(j$) { + function ArrayContaining(sample) { + this.sample = sample; + } + + ArrayContaining.prototype.asymmetricMatch = function(other) { + var className = Object.prototype.toString.call(this.sample); + if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); } + + for (var i = 0; i < this.sample.length; i++) { + var item = this.sample[i]; + if (!j$.matchersUtil.contains(other, item)) { + return false; + } + } + + return true; + }; + + ArrayContaining.prototype.jasmineToString = function () { + return ''; + }; + + return ArrayContaining; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + function getPrototype(obj) { + if (Object.getPrototypeOf) { + return Object.getPrototypeOf(obj); + } + + if (obj.constructor.prototype == obj) { + return null; + } + + return obj.constructor.prototype; + } + + function hasProperty(obj, property) { + if (!obj) { + return false; + } + + if (Object.prototype.hasOwnProperty.call(obj, property)) { + return true; + } + + return hasProperty(getPrototype(obj), property); + } + + ObjectContaining.prototype.asymmetricMatch = function(other) { + if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } + + for (var property in this.sample) { + if (!hasProperty(other, property) || + !j$.matchersUtil.equals(this.sample[property], other[property])) { + return false; + } + } + + return true; + }; + + ObjectContaining.prototype.jasmineToString = function() { + return ''; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().StringMatching = function(j$) { + + function StringMatching(expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + this.regexp = new RegExp(expected); + } + + StringMatching.prototype.asymmetricMatch = function(other) { + return this.regexp.test(other); + }; + + StringMatching.prototype.jasmineToString = function() { + return ''; + }; + + return StringMatching; +}; + +getJasmineRequireObj().errors = function() { + function ExpectationFailed() {} + + ExpectationFailed.prototype = new Error(); + ExpectationFailed.prototype.constructor = ExpectationFailed; + + return { + ExpectationFailed: ExpectationFailed + }; +}; +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if ((Object.prototype.toString.apply(haystack) === '[object Array]') || + (!!haystack && !haystack.indexOf)) + { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + + return !!haystack && haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = 'Expected ' + + j$.pp(actual) + + (isNot ? ' not ' : ' ') + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ','; + } + message += ' ' + j$.pp(expected[i]); + } + } + + return message + '.'; + } + }; + + function isAsymmetric(obj) { + return obj && j$.isA_('Function', obj.asymmetricMatch); + } + + function asymmetricMatch(a, b) { + var asymmetricA = isAsymmetric(a), + asymmetricB = isAsymmetric(b); + + if (asymmetricA && asymmetricB) { + return undefined; + } + + if (asymmetricA) { + return a.asymmetricMatch(b); + } + + if (asymmetricB) { + return b.asymmetricMatch(a); + } + } + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + var asymmetricResult = asymmetricMatch(a, b); + if (!j$.util.isUndefined(asymmetricResult)) { + return asymmetricResult; + } + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + + var aIsDomNode = j$.isDomNode(a); + var bIsDomNode = j$.isDomNode(b); + if (aIsDomNode && bIsDomNode) { + // At first try to use DOM3 method isEqualNode + if (a.isEqualNode) { + return a.isEqualNode(b); + } + // IE8 doesn't support isEqualNode, try to use outerHTML && innerText + var aIsElement = a instanceof Element; + var bIsElement = b instanceof Element; + if (aIsElement && bIsElement) { + return a.outerHTML == b.outerHTML; + } + if (aIsElement || bIsElement) { + return false; + } + return a.innerText == b.innerText && a.textContent == b.textContent; + } + if (aIsDomNode || bIsDomNode) { + return false; + } + + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + // Compare array lengths to determine if a deep comparison is necessary. + if (className == '[object Array]' && a.length !== b.length) { + result = false; + } + + if (result) { + // Objects with different constructors are not equivalent, but `Object`s + // or `Array`s from different frames are. + if (className !== '[object Array]') { + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor && + isFunction(bCtor) && bCtor instanceof bCtor)) { + return false; + } + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = 'Expected actual not to be NaN.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called.' : + 'Expected spy ' + actual.and.identity() + ' to have been called.'; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledTimes = function(j$) { + + function toHaveBeenCalledTimes() { + return { + compare: function(actual, expected) { + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + var args = Array.prototype.slice.call(arguments, 0), + result = { pass: false }; + + if(!expected){ + throw new Error('Expected times failed is required as an argument.'); + } + + actual = args[0]; + var calls = actual.calls.count(); + var timesMessage = expected === 1 ? 'once' : expected + ' times'; + result.pass = calls === expected; + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called ' + timesMessage + '. It was called ' + calls + ' times.' : + 'Expected spy ' + actual.and.identity() + ' to have been called ' + timesMessage + '. It was called ' + calls + ' times.'; + return result; + } + }; + } + + return toHaveBeenCalledTimes; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util, customEqualityTesters) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { + result.pass = true; + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; + } else { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function(j$) { + + function toMatch() { + return { + compare: function(actual, expected) { + if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { + throw new Error('Expected is not a String or a RegExp'); + } + + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = 'Expected function to throw an exception.'; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; + } else { + result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError () { + return { + compare: function(actual) { + var threw = false, + pass = {pass: true}, + fail = {pass: false}, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + var errorMatcher = getMatcher.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + fail.message = 'Expected function to throw an Error.'; + return fail; + } + + if (!(thrown instanceof Error)) { + fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; + return fail; + } + + if (errorMatcher.hasNoSpecifics()) { + pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.'; + return pass; + } + + if (errorMatcher.matches(thrown)) { + pass.message = function() { + return 'Expected function not to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + '.'; + }; + return pass; + } else { + fail.message = function() { + return 'Expected function to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + + ', but it threw ' + errorMatcher.thrownDescription(thrown) + '.'; + }; + return fail; + } + } + }; + + function getMatcher() { + var expected = null, + errorType = null; + + if (arguments.length == 2) { + expected = arguments[1]; + if (isAnErrorType(expected)) { + errorType = expected; + expected = null; + } + } else if (arguments.length > 2) { + errorType = arguments[1]; + expected = arguments[2]; + if (!isAnErrorType(errorType)) { + throw new Error('Expected error type is not an Error.'); + } + } + + if (expected && !isStringOrRegExp(expected)) { + if (errorType) { + throw new Error('Expected error message is not a string or RegExp.'); + } else { + throw new Error('Expected is not an Error, string, or RegExp.'); + } + } + + function messageMatch(message) { + if (typeof expected == 'string') { + return expected == message; + } else { + return expected.test(message); + } + } + + return { + errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception', + thrownDescription: function(thrown) { + var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception', + thrownMessage = ''; + + if (expected) { + thrownMessage = ' with message ' + j$.pp(thrown.message); + } + + return thrownName + thrownMessage; + }, + messageDescription: function() { + if (expected === null) { + return ''; + } else if (expected instanceof RegExp) { + return ' with a message matching ' + j$.pp(expected); + } else { + return ' with message ' + j$.pp(expected); + } + }, + hasNoSpecifics: function() { + return expected === null && errorType === null; + }, + matches: function(error) { + return (errorType === null || error instanceof errorType) && + (expected === null || messageMatch(error.message)); + } + }; + } + + function isStringOrRegExp(potential) { + return potential instanceof RegExp || (typeof potential == 'string'); + } + + function isAnErrorType(type) { + if (typeof type !== 'function') { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + + return toThrowError; +}; + +getJasmineRequireObj().interface = function(jasmine, env) { + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + fdescribe: function(description, specDefinitions) { + return env.fdescribe(description, specDefinitions); + }, + + it: function() { + return env.it.apply(env, arguments); + }, + + xit: function() { + return env.xit.apply(env, arguments); + }, + + fit: function() { + return env.fit.apply(env, arguments); + }, + + beforeEach: function() { + return env.beforeEach.apply(env, arguments); + }, + + afterEach: function() { + return env.afterEach.apply(env, arguments); + }, + + beforeAll: function() { + return env.beforeAll.apply(env, arguments); + }, + + afterAll: function() { + return env.afterAll.apply(env, arguments); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending.apply(env, arguments); + }, + + fail: function() { + return env.fail.apply(env, arguments); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }), + + jasmine: jasmine + }; + + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + jasmine.clock = function() { + return env.clock; + }; + + return jasmineInterface; +}; + +getJasmineRequireObj().version = function() { + return '2.4.1'; +}; diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/json2.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/json2.js new file mode 100644 index 0000000..deb88ec --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/json2.js @@ -0,0 +1,489 @@ +/* + json2.js + 2014-02-04 + + Public Domain. + + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + + See http://www.JSON.org/js.html + + + This code should be minified before deployment. + See http://javascript.crockford.com/jsmin.html + + USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + NOT CONTROL. + + + This file creates a global JSON object containing two methods: stringify + and parse. + + JSON.stringify(value, replacer, space) + value any JavaScript value, usually an object or array. + + replacer an optional parameter that determines how object + values are stringified for objects. It can be a + function or an array of strings. + + space an optional parameter that specifies the indentation + of nested structures. If it is omitted, the text will + be packed without extra whitespace. If it is a number, + it will specify the number of spaces to indent at each + level. If it is a string (such as '\t' or ' '), + it contains the characters used to indent at each level. + + This method produces a JSON text from a JavaScript value. + + When an object value is found, if the object contains a toJSON + method, its toJSON method will be called and the result will be + stringified. A toJSON method does not serialize: it returns the + value represented by the name/value pair that should be serialized, + or undefined if nothing should be serialized. The toJSON method + will be passed the key associated with the value, and this will be + bound to the value + + For example, this would serialize Dates as ISO strings. + + Date.prototype.toJSON = function (key) { + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + You can provide an optional replacer method. It will be passed the + key and value of each member, with this bound to the containing + object. The value that is returned from your method will be + serialized. If your method returns undefined, then the member will + be excluded from the serialization. + + If the replacer parameter is an array of strings, then it will be + used to select the members to be serialized. It filters the results + such that only members with keys listed in the replacer array are + stringified. + + Values that do not have JSON representations, such as undefined or + functions, will not be serialized. Such values in objects will be + dropped; in arrays they will be replaced with null. You can use + a replacer function to replace those with JSON values. + JSON.stringify(undefined) returns undefined. + + The optional space parameter produces a stringification of the + value that is filled with line breaks and indentation to make it + easier to read. + + If the space parameter is a non-empty string, then that string will + be used for indentation. If the space parameter is a number, then + the indentation will be that many spaces. + + Example: + + text = JSON.stringify(['e', {pluribus: 'unum'}]); + // text is '["e",{"pluribus":"unum"}]' + + + text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); + // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' + + text = JSON.stringify([new Date()], function (key, value) { + return this[key] instanceof Date ? + 'Date(' + this[key] + ')' : value; + }); + // text is '["Date(---current time---)"]' + + + JSON.parse(text, reviver) + This method parses a JSON text to produce an object or array. + It can throw a SyntaxError exception. + + The optional reviver parameter is a function that can filter and + transform the results. It receives each of the keys and values, + and its return value is used instead of the original value. + If it returns what it received, then the structure is not modified. + If it returns undefined then the member is deleted. + + Example: + + // Parse the text. Values that look like ISO date strings will + // be converted to Date objects. + + myData = JSON.parse(text, function (key, value) { + var a; + if (typeof value === 'string') { + a = +/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); + if (a) { + return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], + +a[5], +a[6])); + } + } + return value; + }); + + myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { + var d; + if (typeof value === 'string' && + value.slice(0, 5) === 'Date(' && + value.slice(-1) === ')') { + d = new Date(value.slice(5, -1)); + if (d) { + return d; + } + } + return value; + }); + + + This is a reference implementation. You are free to copy, modify, or + redistribute. +*/ + +/*jslint evil: true, regexp: true */ + +/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, + call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf +*/ + + +// Create a JSON object only if one does not already exist. We create the +// methods in a closure to avoid creating global variables. + +if (typeof JSON !== 'object') { + JSON = {}; +} + +(function () { + 'use strict'; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + if (typeof Date.prototype.toJSON !== 'function') { + + Date.prototype.toJSON = function () { + + return isFinite(this.valueOf()) + ? this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z' + : null; + }; + + String.prototype.toJSON = + Number.prototype.toJSON = + Boolean.prototype.toJSON = function () { + return this.valueOf(); + }; + } + + var cx, + escapable, + gap, + indent, + meta, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' + ? c + : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 + ? '[]' + : gap + ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' + : '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 + ? '{}' + : gap + ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' + : '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== 'function') { + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + } + + +// If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== 'function') { + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + JSON.parse = function (text, reviver) { + +// The parse method takes a text and an optional reviver function, and returns +// a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + +// The walk method is used to recursively walk the resulting structure so +// that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + +// Parsing happens in four stages. In the first stage, we replace certain +// Unicode characters with escape sequences. JavaScript handles many characters +// incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + +// In the second stage, we run the text against regular expressions that look +// for non-JSON patterns. We are especially concerned with '()' and 'new' +// because they can cause invocation, and '=' because it can cause mutation. +// But just to be safe, we want to reject all unexpected forms. + +// We split the second stage into 4 regexp operations in order to work around +// crippling inefficiencies in IE's and Safari's regexp engines. First we +// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we +// replace all simple value tokens with ']' characters. Third, we delete all +// open brackets that follow a colon or comma or that begin the text. Finally, +// we look to see that the remaining characters are only whitespace or ']' or +// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + +// In the third stage we use the eval function to compile the text into a +// JavaScript structure. The '{' operator is subject to a syntactic ambiguity +// in JavaScript: it can begin a block or an object literal. We wrap the text +// in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + +// In the optional fourth stage, we recursively walk the new structure, passing +// each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' + ? walk({'': j}, '') + : j; + } + +// If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + } +}()); diff --git a/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/node_boot.js b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/node_boot.js new file mode 100644 index 0000000..a0fc4a2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/lib/jasmine-core/node_boot.js @@ -0,0 +1,41 @@ +/* +Copyright (c) 2008-2015 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +module.exports = function(jasmineRequire) { + var jasmine = jasmineRequire.core(jasmineRequire); + + var consoleFns = require('../console/console.js'); + consoleFns.console(consoleFns, jasmine); + + var env = jasmine.getEnv(); + + var jasmineInterface = jasmineRequire.interface(jasmine, env); + + extend(global, jasmineInterface); + + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + + return jasmine; +}; diff --git a/platforms/android/assets/www/node_modules/jasmine-core/package.json b/platforms/android/assets/www/node_modules/jasmine-core/package.json new file mode 100644 index 0000000..5ca02ee --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/package.json @@ -0,0 +1,90 @@ +{ + "_args": [ + [ + "jasmine-core@~2.4.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine" + ] + ], + "_from": "jasmine-core@>=2.4.0 <2.5.0", + "_id": "jasmine-core@2.4.1", + "_inCache": true, + "_installable": true, + "_location": "/jasmine-core", + "_nodeVersion": "0.12.7", + "_npmUser": { + "email": "gregg@slackersoft.net", + "name": "slackersoft" + }, + "_npmVersion": "2.12.1", + "_phantomChildren": {}, + "_requested": { + "name": "jasmine-core", + "raw": "jasmine-core@~2.4.0", + "rawSpec": "~2.4.0", + "scope": null, + "spec": ">=2.4.0 <2.5.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine" + ], + "_resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.4.1.tgz", + "_shasum": "6f83ab3a0f16951722ce07d206c773d57cc838be", + "_shrinkwrap": null, + "_spec": "jasmine-core@~2.4.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine", + "bugs": { + "url": "https://github.com/jasmine/jasmine/issues" + }, + "dependencies": {}, + "description": "Official packaging of Jasmine's core files for use by Node.js projects.", + "devDependencies": { + "glob": "~5.0.13", + "grunt": "~0.4.1", + "grunt-cli": "^0.1.13", + "grunt-contrib-compass": "~0.6.0", + "grunt-contrib-compress": "~0.5.2", + "grunt-contrib-concat": "~0.3.0", + "grunt-contrib-jshint": "~0.7.0", + "jasmine": "git://github.com/jasmine/jasmine-npm.git", + "load-grunt-tasks": "^0.4.0", + "shelljs": "~0.1.4", + "temp": "~0.8.1" + }, + "directories": {}, + "dist": { + "shasum": "6f83ab3a0f16951722ce07d206c773d57cc838be", + "tarball": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.4.1.tgz" + }, + "gitHead": "a95c2cfe3f80921ec6bc061d5fcc0b2368586666", + "homepage": "http://jasmine.github.io", + "keywords": [ + "test", + "jasmine", + "tdd", + "bdd" + ], + "license": "MIT", + "main": "./lib/jasmine-core.js", + "maintainers": [ + { + "email": "dwfrank@pivotallabs.com", + "name": "dwfrank" + }, + { + "email": "gregg@slackersoft.net", + "name": "slackersoft" + } + ], + "name": "jasmine-core", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jasmine/jasmine.git" + }, + "scripts": { + "test": "grunt jshint execSpecsInNode" + }, + "version": "2.4.1" +} diff --git a/platforms/android/assets/www/node_modules/jasmine-core/requirements.txt b/platforms/android/assets/www/node_modules/jasmine-core/requirements.txt new file mode 100644 index 0000000..591279c --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine-core/requirements.txt @@ -0,0 +1 @@ +ordereddict==1.1 diff --git a/platforms/android/assets/www/node_modules/jasmine/.travis.yml b/platforms/android/assets/www/node_modules/jasmine/.travis.yml new file mode 100644 index 0000000..ba260f3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/.travis.yml @@ -0,0 +1,5 @@ +--- +language: node_js +sudo: false +before_script: + - npm install git+https://github.com/jasmine/jasmine.git diff --git a/platforms/android/assets/www/node_modules/jasmine/Gruntfile.js b/platforms/android/assets/www/node_modules/jasmine/Gruntfile.js new file mode 100644 index 0000000..f5af99e --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/Gruntfile.js @@ -0,0 +1,44 @@ +module.exports = function(grunt) { + var pkg = require("./package.json"); + global.jasmineVersion = pkg.version; + var versionString = 'v' + pkg.version; + + grunt.initConfig({ + pkg: pkg, + jshint: {all: ['lib/**/*.js', 'spec/**/*.js']} + }); + + var shell = require('shelljs'); + function runCommands(commands, done) { + var command = commands.shift(); + + if (command) { + shell.exec(command, function(exitCode) { + if (exitCode !== 0) { + grunt.fail.fatal("Command `" + command + "` failed", exitCode); + done(); + } else { + runCommands(commands, done); + } + }); + } else { + done(); + } + } + + // depend on jshint:all, specs? + grunt.registerTask('release', + 'Create tag ' + versionString + ' and push jasmine-' + pkg.version + ' to NPM', + function() { + var done = this.async(), + commands = ['git tag ' + versionString, 'git push origin master --tags', 'npm publish']; + + runCommands(commands, done); + }); + + grunt.loadNpmTasks('grunt-contrib-jshint'); + + grunt.loadTasks('tasks'); + + grunt.registerTask('default', ['jshint:all', 'specs']); +}; diff --git a/platforms/android/assets/www/node_modules/jasmine/README.md b/platforms/android/assets/www/node_modules/jasmine/README.md new file mode 100644 index 0000000..26a517a --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/README.md @@ -0,0 +1,48 @@ +[![Build Status](https://travis-ci.org/jasmine/jasmine-npm.png?branch=master)](https://travis-ci.org/jasmine/jasmine-npm) + +# The Jasmine Module + +The [Jasmine](https://github.com/jasmine/jasmine) module is a package of helper code for developing Jasmine projects for Node.js. + +## Contents + +This module allows you to run Jasmine specs for your Node.js code. The output will be displayed in your terminal. + +## Installation + +`npm install -g jasmine` + +## Initializing + +To initialize a project for Jasmine + +`jasmine init` + +To seed your project with some examples + +`jasmine examples` + +## Usage + +To run your test suite + +`jasmine` + +## Configuration + +Customize `spec/support/jasmine.json` to enumerate the source and spec files you would like the Jasmine runner to include. +You may use dir glob strings. +More information on the format of `jasmine.json` can be found in [the documentation](http://jasmine.github.io/2.3/node.html#section-Configuration) + +Alternatively, you may specify the path to your `jasmine.json` by setting an environment variable: + +`jasmine JASMINE_CONFIG_PATH=relative/path/to/your/jasmine.json` + +## Support + +Jasmine Mailing list: [jasmine-js@googlegroups.com](mailto:jasmine-js@googlegroups.com) +Twitter: [@jasminebdd](http://twitter.com/jasminebdd) + +Please file issues here at Github + +Copyright (c) 2008-2013 Pivotal Labs. This software is licensed under the MIT License. diff --git a/platforms/android/assets/www/node_modules/jasmine/bin/jasmine.js b/platforms/android/assets/www/node_modules/jasmine/bin/jasmine.js new file mode 100755 index 0000000..5b514ea --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/bin/jasmine.js @@ -0,0 +1,11 @@ +#!/usr/bin/env node + +var path = require('path'), + Command = require('../lib/command.js'), + Jasmine = require('../lib/jasmine.js'); + +var jasmine = new Jasmine({ projectBaseDir: path.resolve() }); +var examplesDir = path.join(__dirname, '..', 'node_modules', 'jasmine-core', 'lib', 'jasmine-core', 'example', 'node_example'); +var command = new Command(path.resolve(), examplesDir, console.log); + +command.run(jasmine, process.argv.slice(2)); \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine/lib/command.js b/platforms/android/assets/www/node_modules/jasmine/lib/command.js new file mode 100644 index 0000000..700a2f9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/lib/command.js @@ -0,0 +1,220 @@ +var path = require('path'), + fs = require('fs'); + +exports = module.exports = Command; + +var subCommands = { + init: { + description: 'initialize jasmine', + action: initJasmine + }, + examples: { + description: 'install examples', + action: installExamples + }, + help: { + description: 'show help', + action: help, + alias: '-h' + }, + version: { + description: 'show jasmine and jasmine-core versions', + action: version, + alias: '-v' + } +}; + +function Command(projectBaseDir, examplesDir, print) { + this.projectBaseDir = projectBaseDir; + this.specDir = path.join(projectBaseDir, 'spec'); + + var command = this; + + this.run = function(jasmine, commands) { + setEnvironmentVariables(commands); + + var commandToRun; + Object.keys(subCommands).forEach(function(cmd) { + var commandObject = subCommands[cmd]; + if (commands.indexOf(cmd) >= 0) { + commandToRun = commandObject; + } else if(commandObject.alias && commands.indexOf(commandObject.alias) >= 0) { + commandToRun = commandObject; + } + }); + + if (commandToRun) { + commandToRun.action({projectBaseDir: command.projectBaseDir, specDir: command.specDir, examplesDir: examplesDir, print: print}); + } else { + runJasmine(jasmine, parseOptions(commands)); + } + }; +} + +function isFileArg(arg) { + return arg.indexOf('--') !== 0 && !isEnvironmentVariable(arg); +} + +function parseOptions(argv) { + var files = [], + color = process.stdout.isTTY || false, + filter, + stopOnFailure, + random = false, + seed; + + argv.forEach(function(arg) { + if (arg === '--no-color') { + color = false; + } else if (arg.match("^--filter=")) { + filter = arg.match("^--filter=(.*)")[1]; + } else if (arg.match("^--stop-on-failure=")) { + stopOnFailure = arg.match("^--stop-on-failure=(.*)")[1] === 'true'; + } else if (arg.match("^--random=")) { + random = arg.match("^--random=(.*)")[1] === 'true'; + } else if (arg.match("^--seed=")) { + seed = arg.match("^--seed=(.*)")[1]; + } else if (isFileArg(arg)) { + files.push(arg); + } + }); + return { + color: color, + filter: filter, + stopOnFailure: stopOnFailure, + files: files, + random: random, + seed: seed + }; +} + +function runJasmine(jasmine, env) { + jasmine.loadConfigFile(process.env.JASMINE_CONFIG_PATH); + if (env.stopOnFailure !== undefined) { + jasmine.stopSpecOnExpectationFailure(env.stopOnFailure); + } + if (env.seed !== undefined) { + jasmine.seed(env.seed); + } + + jasmine.randomizeTests(env.random); + jasmine.showColors(env.color); + jasmine.execute(env.files, env.filter); +} + +function initJasmine(options) { + var print = options.print; + var specDir = options.specDir; + makeDirStructure(path.join(specDir, 'support/')); + if(!fs.existsSync(path.join(specDir, 'support/jasmine.json'))) { + fs.writeFileSync(path.join(specDir, 'support/jasmine.json'), fs.readFileSync(path.join(__dirname, '../lib/examples/jasmine.json'), 'utf-8')); + } + else { + print('spec/support/jasmine.json already exists in your project.'); + } +} + +function installExamples(options) { + var specDir = options.specDir; + var projectBaseDir = options.projectBaseDir; + var examplesDir = options.examplesDir; + + makeDirStructure(path.join(specDir, 'support')); + makeDirStructure(path.join(specDir, 'jasmine_examples')); + makeDirStructure(path.join(specDir, 'helpers', 'jasmine_examples')); + makeDirStructure(path.join(projectBaseDir, 'lib', 'jasmine_examples')); + + copyFiles( + path.join(examplesDir, 'spec', 'helpers', 'jasmine_examples'), + path.join(specDir, 'helpers', 'jasmine_examples'), + new RegExp(/[Hh]elper\.js/) + ); + + copyFiles( + path.join(examplesDir, 'lib', 'jasmine_examples'), + path.join(projectBaseDir, 'lib', 'jasmine_examples'), + new RegExp(/\.js/) + ); + + copyFiles( + path.join(examplesDir, 'spec', 'jasmine_examples'), + path.join(specDir, 'jasmine_examples'), + new RegExp(/[Ss]pec.js/) + ); +} + +function help(options) { + var print = options.print; + print('Usage: jasmine [command] [options] [files]'); + print(''); + print('Commands:'); + Object.keys(subCommands).forEach(function(cmd) { + var commandNameText = cmd; + if(subCommands[cmd].alias) { + commandNameText = commandNameText + ',' + subCommands[cmd].alias; + } + print('%s\t%s', lPad(commandNameText, 10), subCommands[cmd].description); + }); + print(''); + print('If no command is given, jasmine specs will be run'); + print(''); + print(''); + + print('Options:'); + print('%s\tturn off color in spec output', lPad('--no-color', 18)); + print('%s\tfilter specs to run only those that match the given string', lPad('--filter=', 18)); + print('%s\t[true|false] stop spec execution on expectation failure. This takes precedence over the stopSpecOnExpectationFailure option in jasmine.json', lPad('--stop-on-failure=', 18)); + print(''); + print('The path to your jasmine.json can be configured by setting the JASMINE_CONFIG_PATH environment variable'); +} + +function version(options) { + var print = options.print; + print('jasmine v' + require('../package.json').version); + print('jasmine-core v' + require('../node_modules/jasmine-core/package.json').version); +} + +function lPad(str, length) { + if (str.length >= length) { + return str; + } else { + return lPad(' ' + str, length); + } +} + +function copyFiles(srcDir, destDir, pattern) { + var srcDirFiles = fs.readdirSync(srcDir); + srcDirFiles.forEach(function(file) { + if (file.search(pattern) !== -1) { + fs.writeFileSync(path.join(destDir, file), fs.readFileSync(path.join(srcDir, file))); + } + }); +} + +function makeDirStructure(absolutePath) { + var splitPath = absolutePath.split(path.sep); + splitPath.forEach(function(dir, index) { + if(index > 1) { + var fullPath = path.join(splitPath.slice(0, index).join('/'), dir); + if (!fs.existsSync(fullPath)) { + fs.mkdirSync(fullPath); + } + } + }); +} + +function isEnvironmentVariable(command) { + var envRegExp = /(.*)=(.*)/; + return command.match(envRegExp); +} + +function setEnvironmentVariables(commands) { + commands.forEach(function (command) { + var regExpMatch = isEnvironmentVariable(command); + if(regExpMatch) { + var key = regExpMatch[1]; + var value = regExpMatch[2]; + process.env[key] = value; + } + }); +} diff --git a/platforms/android/assets/www/node_modules/jasmine/lib/examples/jasmine.json b/platforms/android/assets/www/node_modules/jasmine/lib/examples/jasmine.json new file mode 100644 index 0000000..3ea3166 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/lib/examples/jasmine.json @@ -0,0 +1,11 @@ +{ + "spec_dir": "spec", + "spec_files": [ + "**/*[sS]pec.js" + ], + "helpers": [ + "helpers/**/*.js" + ], + "stopSpecOnExpectationFailure": false, + "random": false +} diff --git a/platforms/android/assets/www/node_modules/jasmine/lib/exit.js b/platforms/android/assets/www/node_modules/jasmine/lib/exit.js new file mode 100644 index 0000000..d2a6de6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/lib/exit.js @@ -0,0 +1,17 @@ +module.exports = function(exitCode, platform, nodeVersion, exit, nodeExit) { + if(isWindows(platform) && olderThan12(nodeVersion)) { + nodeExit(exitCode); + } + else { + exit(exitCode); + } +}; + +function isWindows(platform) { + return /^win/.test(platform); +} + +function olderThan12(nodeVersion) { + var version = nodeVersion.split('.'); + return parseInt(version[0].substr(1), 10) <= 0 && parseInt(version[1], 10) < 12; +} \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine/lib/filters/console_spec_filter.js b/platforms/android/assets/www/node_modules/jasmine/lib/filters/console_spec_filter.js new file mode 100644 index 0000000..e3cf6bd --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/lib/filters/console_spec_filter.js @@ -0,0 +1,10 @@ +module.exports = exports = ConsoleSpecFilter; + +function ConsoleSpecFilter(options) { + var filterString = options && options.filterString && options.filterString.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; +} \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine/lib/jasmine.js b/platforms/android/assets/www/node_modules/jasmine/lib/jasmine.js new file mode 100644 index 0000000..67ffeb3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/lib/jasmine.js @@ -0,0 +1,170 @@ +var path = require('path'), + util = require('util'), + glob = require('glob'), + exit = require('./exit'), + ExitCodeReporter = require('./reporters/exit_code_reporter'), + ConsoleSpecFilter = require('./filters/console_spec_filter'); + +module.exports = Jasmine; +module.exports.ConsoleReporter = require('./reporters/console_reporter'); + +function Jasmine(options) { + options = options || {}; + var jasmineCore = options.jasmineCore || require('jasmine-core'); + this.jasmineCorePath = path.join(jasmineCore.files.path, 'jasmine.js'); + this.jasmine = jasmineCore.boot(jasmineCore); + this.projectBaseDir = options.projectBaseDir || path.resolve(); + this.printDeprecation = options.printDeprecation || require('./printDeprecation'); + this.specFiles = []; + this.helperFiles = []; + this.env = this.jasmine.getEnv(); + this.reportersCount = 0; + this.exitCodeReporter = new ExitCodeReporter(); + this.onCompleteCallbackAdded = false; + this.exit = exit; + this.showingColors = true; +} + +Jasmine.prototype.randomizeTests = function(value) { + this.env.randomizeTests(value); +}; + +Jasmine.prototype.seed = function(value) { + this.env.seed(value); +}; + +Jasmine.prototype.showColors = function(value) { + this.showingColors = value; +}; + +Jasmine.prototype.addSpecFile = function(filePath) { + this.specFiles.push(filePath); +}; + +Jasmine.prototype.addReporter = function(reporter) { + this.env.addReporter(reporter); + this.reportersCount++; +}; + +Jasmine.prototype.configureDefaultReporter = function(options) { + options.timer = options.timer || new this.jasmine.Timer(); + options.print = options.print || function() { + process.stdout.write(util.format.apply(this, arguments)); + }; + options.showColors = options.hasOwnProperty('showColors') ? options.showColors : true; + options.jasmineCorePath = options.jasmineCorePath || this.jasmineCorePath; + + if(options.onComplete) { + this.printDeprecation('Passing in an onComplete function to configureDefaultReporter is deprecated.'); + } + var consoleReporter = new module.exports.ConsoleReporter(options); + this.addReporter(consoleReporter); + this.defaultReporterAdded = true; +}; + +Jasmine.prototype.addMatchers = function(matchers) { + this.jasmine.Expectation.addMatchers(matchers); +}; + +Jasmine.prototype.loadSpecs = function() { + this.specFiles.forEach(function(file) { + require(file); + }); +}; + +Jasmine.prototype.loadHelpers = function() { + this.helperFiles.forEach(function(file) { + require(file); + }); +}; + +Jasmine.prototype.loadConfigFile = function(configFilePath) { + var absoluteConfigFilePath = path.resolve(this.projectBaseDir, configFilePath || 'spec/support/jasmine.json'); + var config = require(absoluteConfigFilePath); + this.loadConfig(config); +}; + +Jasmine.prototype.loadConfig = function(config) { + var jasmineRunner = this; + jasmineRunner.specDir = config.spec_dir; + + if(config.helpers) { + config.helpers.forEach(function(helperFile) { + var filePaths = glob.sync(path.join(jasmineRunner.projectBaseDir, jasmineRunner.specDir, helperFile)); + filePaths.forEach(function(filePath) { + if(jasmineRunner.helperFiles.indexOf(filePath) === -1) { + jasmineRunner.helperFiles.push(filePath); + } + }); + }); + } + + this.env.throwOnExpectationFailure(config.stopSpecOnExpectationFailure); + this.env.randomizeTests(config.random); + + if(config.spec_files) { + jasmineRunner.addSpecFiles(config.spec_files); + } +}; + +Jasmine.prototype.addSpecFiles = function(files) { + var jasmineRunner = this; + + files.forEach(function(specFile) { + var filePaths = glob.sync(path.join(jasmineRunner.projectBaseDir, jasmineRunner.specDir, specFile)); + filePaths.forEach(function(filePath) { + if(jasmineRunner.specFiles.indexOf(filePath) === -1) { + jasmineRunner.specFiles.push(filePath); + } + }); + }); +}; + +Jasmine.prototype.onComplete = function(onCompleteCallback) { + this.exitCodeReporter.onComplete(onCompleteCallback); + this.onCompleteCallbackAdded = true; +}; + +Jasmine.prototype.stopSpecOnExpectationFailure = function(value) { + this.env.throwOnExpectationFailure(value); +}; + +Jasmine.prototype.execute = function(files, filterString) { + this.loadHelpers(); + + if(this.reportersCount === 0) { + this.configureDefaultReporter({ showColors: this.showingColors }); + } + + if(filterString) { + var specFilter = new ConsoleSpecFilter({ + filterString: filterString + }); + this.env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + } + + if (files && files.length > 0) { + this.specDir = ''; + this.specFiles = []; + this.addSpecFiles(files); + } + + this.loadSpecs(); + + if(!this.onCompleteCallbackAdded && this.defaultReporterAdded) { + var jasmineRunner = this; + this.exitCodeReporter.onComplete(function(passed) { + if(passed) { + jasmineRunner.exit(0, process.platform, process.version, process.exit, require('exit')); + } + else { + jasmineRunner.exit(1, process.platform, process.version, process.exit, require('exit')); + } + }); + } + + this.addReporter(this.exitCodeReporter); + this.env.execute(); +}; diff --git a/platforms/android/assets/www/node_modules/jasmine/lib/printDeprecation.js b/platforms/android/assets/www/node_modules/jasmine/lib/printDeprecation.js new file mode 100644 index 0000000..0755b2e --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/lib/printDeprecation.js @@ -0,0 +1,3 @@ +module.exports = function(message) { + console.warn('Deprecation warning: ' + message); +}; \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine/lib/reporters/console_reporter.js b/platforms/android/assets/www/node_modules/jasmine/lib/reporters/console_reporter.js new file mode 100644 index 0000000..f1ac0c6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/lib/reporters/console_reporter.js @@ -0,0 +1,208 @@ +module.exports = exports = ConsoleReporter; + +var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } +}; + +function ConsoleReporter(options) { + var print = options.print, + showColors = options.showColors || false, + timer = options.timer || noopTimer, + jasmineCorePath = options.jasmineCorePath, + printDeprecation = options.printDeprecation || require('../printDeprecation'), + specCount, + executableSpecCount, + failureCount, + failedSpecs = [], + pendingSpecs = [], + ansi = { + green: '\x1B[32m', + red: '\x1B[31m', + yellow: '\x1B[33m', + none: '\x1B[0m' + }, + failedSuites = [], + stackFilter = options.stackFilter || defaultStackFilter; + + if(options.onComplete) { + printDeprecation('Passing in an onComplete function to the ConsoleReporter is deprecated.'); + } + var onComplete = options.onComplete || function() {}; + + this.jasmineStarted = function() { + specCount = 0; + executableSpecCount = 0; + failureCount = 0; + print('Started'); + printNewline(); + timer.start(); + }; + + this.jasmineDone = function(result) { + printNewline(); + printNewline(); + if(failedSpecs.length > 0) { + print('Failures:'); + } + for (var i = 0; i < failedSpecs.length; i++) { + specFailureDetails(failedSpecs[i], i + 1); + } + + if (pendingSpecs.length > 0) { + print("Pending:"); + } + for(i = 0; i < pendingSpecs.length; i++) { + pendingSpecDetails(pendingSpecs[i], i + 1); + } + + if(specCount > 0) { + printNewline(); + + if(executableSpecCount !== specCount) { + print('Ran ' + executableSpecCount + ' of ' + specCount + plural(' spec', specCount)); + printNewline(); + } + var specCounts = executableSpecCount + ' ' + plural('spec', executableSpecCount) + ', ' + + failureCount + ' ' + plural('failure', failureCount); + + if (pendingSpecs.length) { + specCounts += ', ' + pendingSpecs.length + ' pending ' + plural('spec', pendingSpecs.length); + } + + print(specCounts); + } else { + print('No specs found'); + } + + printNewline(); + var seconds = timer.elapsed() / 1000; + print('Finished in ' + seconds + ' ' + plural('second', seconds)); + printNewline(); + + for(i = 0; i < failedSuites.length; i++) { + suiteFailureDetails(failedSuites[i]); + } + + if (result && result.order && result.order.random) { + print('Randomized with seed ' + result.order.seed); + printNewline(); + } + + onComplete(failureCount === 0); + }; + + this.specDone = function(result) { + specCount++; + + if (result.status == 'pending') { + pendingSpecs.push(result); + executableSpecCount++; + print(colored('yellow', '*')); + return; + } + + if (result.status == 'passed') { + executableSpecCount++; + print(colored('green', '.')); + return; + } + + if (result.status == 'failed') { + failureCount++; + failedSpecs.push(result); + executableSpecCount++; + print(colored('red', 'F')); + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + failureCount++; + failedSuites.push(result); + } + }; + + return this; + + function printNewline() { + print('\n'); + } + + function colored(color, str) { + return showColors ? (ansi[color] + str + ansi.none) : str; + } + + function plural(str, count) { + return count == 1 ? str : str + 's'; + } + + function repeat(thing, times) { + var arr = []; + for (var i = 0; i < times; i++) { + arr.push(thing); + } + return arr; + } + + function indent(str, spaces) { + var lines = (str || '').split('\n'); + var newArr = []; + for (var i = 0; i < lines.length; i++) { + newArr.push(repeat(' ', spaces).join('') + lines[i]); + } + return newArr.join('\n'); + } + + function defaultStackFilter(stack) { + var filteredStack = stack.split('\n').filter(function(stackLine) { + return stackLine.indexOf(jasmineCorePath) === -1; + }).join('\n'); + return filteredStack; + } + + function specFailureDetails(result, failedSpecNumber) { + printNewline(); + print(failedSpecNumber + ') '); + print(result.fullName); + + for (var i = 0; i < result.failedExpectations.length; i++) { + var failedExpectation = result.failedExpectations[i]; + printNewline(); + print(indent('Message:', 2)); + printNewline(); + print(colored('red', indent(failedExpectation.message, 4))); + printNewline(); + print(indent('Stack:', 2)); + printNewline(); + print(indent(stackFilter(failedExpectation.stack), 4)); + } + + printNewline(); + } + + function suiteFailureDetails(result) { + for (var i = 0; i < result.failedExpectations.length; i++) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', 'AfterAll ' + result.failedExpectations[i].message)); + + } + printNewline(); + } + + function pendingSpecDetails(result, pendingSpecNumber) { + printNewline(); + printNewline(); + print(pendingSpecNumber + ') '); + print(result.fullName); + printNewline(); + var pendingReason = "No reason given"; + if (result.pendingReason && result.pendingReason !== '') { + pendingReason = result.pendingReason; + } + print(indent(colored('yellow', pendingReason), 2)); + printNewline(); + } +} diff --git a/platforms/android/assets/www/node_modules/jasmine/lib/reporters/exit_code_reporter.js b/platforms/android/assets/www/node_modules/jasmine/lib/reporters/exit_code_reporter.js new file mode 100644 index 0000000..354a83e --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/lib/reporters/exit_code_reporter.js @@ -0,0 +1,24 @@ +module.exports = function() { + var results = true; + var onCompleteCallback = function() {}; + + this.onComplete = function(callback) { + onCompleteCallback = callback; + }; + + this.jasmineDone = function() { + onCompleteCallback(results); + }; + + this.specDone = function(result) { + if(result.status === 'failed') { + results = false; + } + }; + + this.suiteDone = function(result) { + if (result.failedExpectations && result.failedExpectations.length > 0) { + results = false; + } + }; +}; \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/.npmignore b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/.npmignore new file mode 100644 index 0000000..2af4b71 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/.npmignore @@ -0,0 +1,2 @@ +.*.swp +test/a/ diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/.travis.yml b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/.travis.yml new file mode 100644 index 0000000..baa0031 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - 0.8 diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/LICENSE b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/LICENSE new file mode 100644 index 0000000..0c44ae7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Isaac Z. Schlueter ("Author") +All rights reserved. + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/README.md b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/README.md new file mode 100644 index 0000000..cc69164 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/README.md @@ -0,0 +1,250 @@ +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +## Attention: node-glob users! + +The API has changed dramatically between 2.x and 3.x. This library is +now 100% JavaScript, and the integer flags have been replaced with an +options object. + +Also, there's an event emitter class, proper tests, and all the other +things you've come to expect from node modules. + +And best of all, no compilation! + +## Usage + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Features + +Please see the [minimatch +documentation](https://github.com/isaacs/minimatch) for more details. + +Supports these glob features: + +* Brace Expansion +* Extended glob matching +* "Globstar" `**` matching + +See: + +* `man sh` +* `man bash` +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob(pattern, [options], cb) + +* `pattern` {String} Pattern to be matched +* `options` {Object} +* `cb` {Function} + * `err` {Error | null} + * `matches` {Array} filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` {String} Pattern to be matched +* `options` {Object} +* return: {Array} filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instanting the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` {String} pattern to search for +* `options` {Object} +* `cb` {Function} Called when an error occurs, or matches are found + * `err` {Error | null} + * `matches` {Array} filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `error` The error encountered. When an error is encountered, the + glob object is in an undefined state, and should be discarded. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `statCache` Collection of all the stat results the glob search + performed. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `1` - Path exists, and is not a directory + * `2` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the matched. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `abort` Stop the search. + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the glob object, as well. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. It will cause + ELOOP to be triggered one level sooner in the case of cyclical + symbolic links. +* `silent` When an unusual error is encountered + when attempting to read a directory, a warning will be printed to + stderr. Set the `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered + when attempting to read a directory, the process will just continue on + in search of other matches. Set the `strict` option to raise an error + in these cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary to + set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `sync` Perform a synchronous glob search. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. + Set this flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `nocase` Perform a case-insensitive match. Note that case-insensitive + filesystems will sometimes result in glob returning results that are + case-insensitively matched anyway, since readdir and stat will not + raise an error. +* `debug` Set to enable debug logging in minimatch and glob. +* `globDebug` Set to enable debug logging in glob, but not minimatch. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/examples/g.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/examples/g.js new file mode 100644 index 0000000..be122df --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/examples/g.js @@ -0,0 +1,9 @@ +var Glob = require("../").Glob + +var pattern = "test/a/**/[cg]/../[cg]" +console.log(pattern) + +var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) { + console.log("matches", matches) +}) +console.log("after") diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/examples/usr-local.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/examples/usr-local.js new file mode 100644 index 0000000..327a425 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/examples/usr-local.js @@ -0,0 +1,9 @@ +var Glob = require("../").Glob + +var pattern = "{./*/*,/*,/usr/local/*}" +console.log(pattern) + +var mg = new Glob(pattern, {mark: true}, function (er, matches) { + console.log("matches", matches) +}) +console.log("after") diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/glob.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/glob.js new file mode 100644 index 0000000..f646c44 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/glob.js @@ -0,0 +1,728 @@ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// readdir(PREFIX) as ENTRIES +// If fails, END +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $]) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $]) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + + + +module.exports = glob + +var fs = require("fs") +, minimatch = require("minimatch") +, Minimatch = minimatch.Minimatch +, inherits = require("inherits") +, EE = require("events").EventEmitter +, path = require("path") +, isDir = {} +, assert = require("assert").ok + +function glob (pattern, options, cb) { + if (typeof options === "function") cb = options, options = {} + if (!options) options = {} + + if (typeof options === "number") { + deprecated() + return + } + + var g = new Glob(pattern, options, cb) + return g.sync ? g.found : g +} + +glob.fnmatch = deprecated + +function deprecated () { + throw new Error("glob's interface has changed. Please see the docs.") +} + +glob.sync = globSync +function globSync (pattern, options) { + if (typeof options === "number") { + deprecated() + return + } + + options = options || {} + options.sync = true + return glob(pattern, options) +} + +this._processingEmitQueue = false + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (!(this instanceof Glob)) { + return new Glob(pattern, options, cb) + } + + if (typeof options === "function") { + cb = options + options = null + } + + if (typeof cb === "function") { + this.on("error", cb) + this.on("end", function (matches) { + cb(null, matches) + }) + } + + options = options || {} + + this._endEmitted = false + this.EOF = {} + this._emitQueue = [] + + this.paused = false + this._processingEmitQueue = false + + this.maxDepth = options.maxDepth || 1000 + this.maxLength = options.maxLength || Infinity + this.cache = options.cache || {} + this.statCache = options.statCache || {} + + this.changedCwd = false + var cwd = process.cwd() + if (!options.hasOwnProperty("cwd")) this.cwd = cwd + else { + this.cwd = options.cwd + this.changedCwd = path.resolve(options.cwd) !== cwd + } + + this.root = options.root || path.resolve(this.cwd, "/") + this.root = path.resolve(this.root) + if (process.platform === "win32") + this.root = this.root.replace(/\\/g, "/") + + this.nomount = !!options.nomount + + if (!pattern) { + throw new Error("must provide pattern") + } + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + this.strict = options.strict !== false + this.dot = !!options.dot + this.mark = !!options.mark + this.sync = !!options.sync + this.nounique = !!options.nounique + this.nonull = !!options.nonull + this.nosort = !!options.nosort + this.nocase = !!options.nocase + this.stat = !!options.stat + + this.debug = !!options.debug || !!options.globDebug + if (this.debug) + this.log = console.error + + this.silent = !!options.silent + + var mm = this.minimatch = new Minimatch(pattern, options) + this.options = mm.options + pattern = this.pattern = mm.pattern + + this.error = null + this.aborted = false + + // list of all the patterns that ** has resolved do, so + // we can avoid visiting multiple times. + this._globstars = {} + + EE.call(this) + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + this.minimatch.set.forEach(iterator.bind(this)) + function iterator (pattern, i, set) { + this._process(pattern, 0, i, function (er) { + if (er) this.emit("error", er) + if (-- n <= 0) this._finish() + }) + } +} + +Glob.prototype.log = function () {} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + + var nou = this.nounique + , all = nou ? [] : {} + + for (var i = 0, l = this.matches.length; i < l; i ++) { + var matches = this.matches[i] + this.log("matches[%d] =", i, matches) + // do like the shell, and spit out the literal glob + if (!matches) { + if (this.nonull) { + var literal = this.minimatch.globSet[i] + if (nou) all.push(literal) + else all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) all.push.apply(all, m) + else m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) all = Object.keys(all) + + if (!this.nosort) { + all = all.sort(this.nocase ? alphasorti : alphasort) + } + + if (this.mark) { + // at *some* point we statted all of these + all = all.map(this._mark, this) + } + + this.log("emitting end", all) + + this.EOF = this.found = all + this.emitMatch(this.EOF) +} + +function alphasorti (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return alphasort(a, b) +} + +function alphasort (a, b) { + return a > b ? 1 : a < b ? -1 : 0 +} + +Glob.prototype._mark = function (p) { + var c = this.cache[p] + var m = p + if (c) { + var isDir = c === 2 || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + this.statCache[m] = this.statCache[p] + this.cache[m] = this.cache[p] + } + } + + return m +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit("abort") +} + +Glob.prototype.pause = function () { + if (this.paused) return + if (this.sync) + this.emit("error", new Error("Can't pause/resume sync glob")) + this.paused = true + this.emit("pause") +} + +Glob.prototype.resume = function () { + if (!this.paused) return + if (this.sync) + this.emit("error", new Error("Can't pause/resume sync glob")) + this.paused = false + this.emit("resume") + this._processEmitQueue() + //process.nextTick(this.emit.bind(this, "resume")) +} + +Glob.prototype.emitMatch = function (m) { + this.log('emitMatch', m) + this._emitQueue.push(m) + this._processEmitQueue() +} + +Glob.prototype._processEmitQueue = function (m) { + this.log("pEQ paused=%j processing=%j m=%j", this.paused, + this._processingEmitQueue, m) + var done = false + while (!this._processingEmitQueue && + !this.paused) { + this._processingEmitQueue = true + var m = this._emitQueue.shift() + this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m) + if (!m) { + this.log(">processEmitQueue, falsey m") + this._processingEmitQueue = false + break + } + + if (m === this.EOF || !(this.mark && !this.stat)) { + this.log("peq: unmarked, or eof") + next.call(this, 0, false) + } else if (this.statCache[m]) { + var sc = this.statCache[m] + var exists + if (sc) + exists = sc.isDirectory() ? 2 : 1 + this.log("peq: stat cached") + next.call(this, exists, exists === 2) + } else { + this.log("peq: _stat, then next") + this._stat(m, next) + } + + function next(exists, isDir) { + this.log("next", m, exists, isDir) + var ev = m === this.EOF ? "end" : "match" + + // "end" can only happen once. + assert(!this._endEmitted) + if (ev === "end") + this._endEmitted = true + + if (exists) { + // Doesn't mean it necessarily doesn't exist, it's possible + // we just didn't check because we don't care that much, or + // this is EOF anyway. + if (isDir && !m.match(/\/$/)) { + m = m + "/" + } else if (!isDir && m.match(/\/$/)) { + m = m.replace(/\/+$/, "") + } + } + this.log("emit", ev, m) + this.emit(ev, m) + this._processingEmitQueue = false + if (done && m !== this.EOF && !this.paused) + this._processEmitQueue() + } + } + done = true +} + +Glob.prototype._process = function (pattern, depth, index, cb_) { + assert(this instanceof Glob) + + var cb = function cb (er, res) { + assert(this instanceof Glob) + if (this.paused) { + if (!this._processQueue) { + this._processQueue = [] + this.once("resume", function () { + var q = this._processQueue + this._processQueue = null + q.forEach(function (cb) { cb() }) + }) + } + this._processQueue.push(cb_.bind(this, er, res)) + } else { + cb_.call(this, er, res) + } + }.bind(this) + + if (this.aborted) return cb() + + if (depth > this.maxDepth) return cb() + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === "string") { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + prefix = pattern.join("/") + this._stat(prefix, function (exists, isDir) { + // either it's there, or it isn't. + // nothing more to do, either way. + if (exists) { + if (prefix && isAbsolute(prefix) && !this.nomount) { + if (prefix.charAt(0) === "/") { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + } + } + + if (process.platform === "win32") + prefix = prefix.replace(/\\/g, "/") + + this.matches[index] = this.matches[index] || {} + this.matches[index][prefix] = true + this.emitMatch(prefix) + } + return cb() + }) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's "absolute" like /foo/bar, + // or "relative" like "../baz" + prefix = pattern.slice(0, n) + prefix = prefix.join("/") + break + } + + // get the list of entries. + var read + if (prefix === null) read = "." + else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) { + if (!prefix || !isAbsolute(prefix)) { + prefix = path.join("/", prefix) + } + read = prefix = path.resolve(prefix) + + // if (process.platform === "win32") + // read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/") + + this.log('absolute: ', prefix, this.root, pattern, read) + } else { + read = prefix + } + + this.log('readdir(%j)', read, this.cwd, this.root) + + return this._readdir(read, function (er, entries) { + if (er) { + // not a directory! + // this means that, whatever else comes after this, it can never match + return cb() + } + + // globstar is special + if (pattern[n] === minimatch.GLOBSTAR) { + // test without the globstar, and with every child both below + // and replacing the globstar. + var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ] + entries.forEach(function (e) { + if (e.charAt(0) === "." && !this.dot) return + // instead of the globstar + s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))) + // below the globstar + s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n))) + }, this) + + s = s.filter(function (pattern) { + var key = gsKey(pattern) + var seen = !this._globstars[key] + this._globstars[key] = true + return seen + }, this) + + if (!s.length) + return cb() + + // now asyncForEach over this + var l = s.length + , errState = null + s.forEach(function (gsPattern) { + this._process(gsPattern, depth + 1, index, function (er) { + if (errState) return + if (er) return cb(errState = er) + if (--l <= 0) return cb() + }) + }, this) + + return + } + + // not a globstar + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = pattern[n] + var rawGlob = pattern[n]._glob + , dotOk = this.dot || rawGlob.charAt(0) === "." + + entries = entries.filter(function (e) { + return (e.charAt(0) !== "." || dotOk) && + e.match(pattern[n]) + }) + + // If n === pattern.length - 1, then there's no need for the extra stat + // *unless* the user has specified "mark" or "stat" explicitly. + // We know that they exist, since the readdir returned them. + if (n === pattern.length - 1 && + !this.mark && + !this.stat) { + entries.forEach(function (e) { + if (prefix) { + if (prefix !== "/") e = prefix + "/" + e + else e = prefix + e + } + if (e.charAt(0) === "/" && !this.nomount) { + e = path.join(this.root, e) + } + + if (process.platform === "win32") + e = e.replace(/\\/g, "/") + + this.matches[index] = this.matches[index] || {} + this.matches[index][e] = true + this.emitMatch(e) + }, this) + return cb.call(this) + } + + + // now test all the remaining entries as stand-ins for that part + // of the pattern. + var l = entries.length + , errState = null + if (l === 0) return cb() // no matches possible + entries.forEach(function (e) { + var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)) + this._process(p, depth + 1, index, function (er) { + if (errState) return + if (er) return cb(errState = er) + if (--l === 0) return cb.call(this) + }) + }, this) + }) + +} + +function gsKey (pattern) { + return '**' + pattern.map(function (p) { + return (p === minimatch.GLOBSTAR) ? '**' : (''+p) + }).join('/') +} + +Glob.prototype._stat = function (f, cb) { + assert(this instanceof Glob) + var abs = f + if (f.charAt(0) === "/") { + abs = path.join(this.root, f) + } else if (this.changedCwd) { + abs = path.resolve(this.cwd, f) + } + + if (f.length > this.maxLength) { + var er = new Error("Path name too long") + er.code = "ENAMETOOLONG" + er.path = f + return this._afterStat(f, abs, cb, er) + } + + this.log('stat', [this.cwd, f, '=', abs]) + + if (!this.stat && this.cache.hasOwnProperty(f)) { + var exists = this.cache[f] + , isDir = exists && (Array.isArray(exists) || exists === 2) + if (this.sync) return cb.call(this, !!exists, isDir) + return process.nextTick(cb.bind(this, !!exists, isDir)) + } + + var stat = this.statCache[abs] + if (this.sync || stat) { + var er + try { + stat = fs.statSync(abs) + } catch (e) { + er = e + } + this._afterStat(f, abs, cb, er, stat) + } else { + fs.stat(abs, this._afterStat.bind(this, f, abs, cb)) + } +} + +Glob.prototype._afterStat = function (f, abs, cb, er, stat) { + var exists + assert(this instanceof Glob) + + if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) { + this.log("should be ENOTDIR, fake it") + + er = new Error("ENOTDIR, not a directory '" + abs + "'") + er.path = abs + er.code = "ENOTDIR" + stat = null + } + + var emit = !this.statCache[abs] + this.statCache[abs] = stat + + if (er || !stat) { + exists = false + } else { + exists = stat.isDirectory() ? 2 : 1 + if (emit) + this.emit('stat', f, stat) + } + this.cache[f] = this.cache[f] || exists + cb.call(this, !!exists, exists === 2) +} + +Glob.prototype._readdir = function (f, cb) { + assert(this instanceof Glob) + var abs = f + if (f.charAt(0) === "/") { + abs = path.join(this.root, f) + } else if (isAbsolute(f)) { + abs = f + } else if (this.changedCwd) { + abs = path.resolve(this.cwd, f) + } + + if (f.length > this.maxLength) { + var er = new Error("Path name too long") + er.code = "ENAMETOOLONG" + er.path = f + return this._afterReaddir(f, abs, cb, er) + } + + this.log('readdir', [this.cwd, f, abs]) + if (this.cache.hasOwnProperty(f)) { + var c = this.cache[f] + if (Array.isArray(c)) { + if (this.sync) return cb.call(this, null, c) + return process.nextTick(cb.bind(this, null, c)) + } + + if (!c || c === 1) { + // either ENOENT or ENOTDIR + var code = c ? "ENOTDIR" : "ENOENT" + , er = new Error((c ? "Not a directory" : "Not found") + ": " + f) + er.path = f + er.code = code + this.log(f, er) + if (this.sync) return cb.call(this, er) + return process.nextTick(cb.bind(this, er)) + } + + // at this point, c === 2, meaning it's a dir, but we haven't + // had to read it yet, or c === true, meaning it's *something* + // but we don't have any idea what. Need to read it, either way. + } + + if (this.sync) { + var er, entries + try { + entries = fs.readdirSync(abs) + } catch (e) { + er = e + } + return this._afterReaddir(f, abs, cb, er, entries) + } + + fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb)) +} + +Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) { + assert(this instanceof Glob) + if (entries && !er) { + this.cache[f] = entries + // if we haven't asked to stat everything for suresies, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. This also gets us one step + // further into ELOOP territory. + if (!this.mark && !this.stat) { + entries.forEach(function (e) { + if (f === "/") e = f + e + else e = f + "/" + e + this.cache[e] = true + }, this) + } + + return cb.call(this, er, entries) + } + + // now handle errors, and cache the information + if (er) switch (er.code) { + case "ENOTDIR": // totally normal. means it *does* exist. + this.cache[f] = 1 + return cb.call(this, er) + case "ENOENT": // not terribly unusual + case "ELOOP": + case "ENAMETOOLONG": + case "UNKNOWN": + this.cache[f] = false + return cb.call(this, er) + default: // some unusual error. Treat as failure. + this.cache[f] = false + if (this.strict) this.emit("error", er) + if (!this.silent) console.error("glob error", er) + return cb.call(this, er) + } +} + +var isAbsolute = process.platform === "win32" ? absWin : absUnix + +function absWin (p) { + if (absUnix(p)) return true + // pull off the device/UNC bit from a windows path. + // from node's lib/path.js + var splitDeviceRe = + /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/ + , result = splitDeviceRe.exec(p) + , device = result[1] || '' + , isUnc = device && device.charAt(1) !== ':' + , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute + + return isAbsolute +} + +function absUnix (p) { + return p.charAt(0) === "/" || p === "" +} diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/package.json b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/package.json new file mode 100644 index 0000000..93bb56a --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/package.json @@ -0,0 +1,83 @@ +{ + "_args": [ + [ + "glob@^3.2.11", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine" + ] + ], + "_from": "glob@>=3.2.11 <4.0.0", + "_id": "glob@3.2.11", + "_inCache": true, + "_installable": true, + "_location": "/jasmine/glob", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "1.4.10", + "_phantomChildren": {}, + "_requested": { + "name": "glob", + "raw": "glob@^3.2.11", + "rawSpec": "^3.2.11", + "scope": null, + "spec": ">=3.2.11 <4.0.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine" + ], + "_resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "_shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d", + "_shrinkwrap": null, + "_spec": "glob@^3.2.11", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/node-glob/issues" + }, + "dependencies": { + "inherits": "2", + "minimatch": "0.3" + }, + "description": "a little globber", + "devDependencies": { + "mkdirp": "0", + "rimraf": "1", + "tap": "~0.4.0" + }, + "directories": {}, + "dist": { + "shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d", + "tarball": "http://registry.npmjs.org/glob/-/glob-3.2.11.tgz" + }, + "engines": { + "node": "*" + }, + "gitHead": "73f57e99510582b2024b762305970ebcf9b70aa2", + "homepage": "https://github.com/isaacs/node-glob", + "license": "BSD", + "main": "glob.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "glob", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "scripts": { + "test": "tap test/*.js", + "test-regen": "TEST_REGEN=1 node test/00-setup.js" + }, + "version": "3.2.11" +} diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/00-setup.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/00-setup.js new file mode 100644 index 0000000..245afaf --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/00-setup.js @@ -0,0 +1,176 @@ +// just a little pre-run script to set up the fixtures. +// zz-finish cleans it up + +var mkdirp = require("mkdirp") +var path = require("path") +var i = 0 +var tap = require("tap") +var fs = require("fs") +var rimraf = require("rimraf") + +var files = +[ "a/.abcdef/x/y/z/a" +, "a/abcdef/g/h" +, "a/abcfed/g/h" +, "a/b/c/d" +, "a/bc/e/f" +, "a/c/d/c/b" +, "a/cb/e/f" +] + +var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c") +var symlinkFrom = "../.." + +files = files.map(function (f) { + return path.resolve(__dirname, f) +}) + +tap.test("remove fixtures", function (t) { + rimraf(path.resolve(__dirname, "a"), function (er) { + t.ifError(er, "remove fixtures") + t.end() + }) +}) + +files.forEach(function (f) { + tap.test(f, function (t) { + var d = path.dirname(f) + mkdirp(d, 0755, function (er) { + if (er) { + t.fail(er) + return t.bailout() + } + fs.writeFile(f, "i like tests", function (er) { + t.ifError(er, "make file") + t.end() + }) + }) + }) +}) + +if (process.platform !== "win32") { + tap.test("symlinky", function (t) { + var d = path.dirname(symlinkTo) + console.error("mkdirp", d) + mkdirp(d, 0755, function (er) { + t.ifError(er) + fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) { + t.ifError(er, "make symlink") + t.end() + }) + }) + }) +} + +;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) { + w = "/tmp/glob-test/" + w + tap.test("create " + w, function (t) { + mkdirp(w, function (er) { + if (er) + throw er + t.pass(w) + t.end() + }) + }) +}) + + +// generate the bash pattern test-fixtures if possible +if (process.platform === "win32" || !process.env.TEST_REGEN) { + console.error("Windows, or TEST_REGEN unset. Using cached fixtures.") + return +} + +var spawn = require("child_process").spawn; +var globs = + // put more patterns here. + // anything that would be directly in / should be in /tmp/glob-test + ["test/a/*/+(c|g)/./d" + ,"test/a/**/[cg]/../[cg]" + ,"test/a/{b,c,d,e,f}/**/g" + ,"test/a/b/**" + ,"test/**/g" + ,"test/a/abc{fed,def}/g/h" + ,"test/a/abc{fed/g,def}/**/" + ,"test/a/abc{fed/g,def}/**///**/" + ,"test/**/a/**/" + ,"test/+(a|b|c)/a{/,bc*}/**" + ,"test/*/*/*/f" + ,"test/**/f" + ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**" + ,"{./*/*,/tmp/glob-test/*}" + ,"{/tmp/glob-test/*,*}" // evil owl face! how you taunt me! + ,"test/a/!(symlink)/**" + ] +var bashOutput = {} +var fs = require("fs") + +globs.forEach(function (pattern) { + tap.test("generate fixture " + pattern, function (t) { + var cmd = "shopt -s globstar && " + + "shopt -s extglob && " + + "shopt -s nullglob && " + + // "shopt >&2; " + + "eval \'for i in " + pattern + "; do echo $i; done\'" + var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) }) + var out = [] + cp.stdout.on("data", function (c) { + out.push(c) + }) + cp.stderr.pipe(process.stderr) + cp.on("close", function (code) { + out = flatten(out) + if (!out) + out = [] + else + out = cleanResults(out.split(/\r*\n/)) + + bashOutput[pattern] = out + t.notOk(code, "bash test should finish nicely") + t.end() + }) + }) +}) + +tap.test("save fixtures", function (t) { + var fname = path.resolve(__dirname, "bash-results.json") + var data = JSON.stringify(bashOutput, null, 2) + "\n" + fs.writeFile(fname, data, function (er) { + t.ifError(er) + t.end() + }) +}) + +function cleanResults (m) { + // normalize discrepancies in ordering, duplication, + // and ending slashes. + return m.map(function (m) { + return m.replace(/\/+/g, "/").replace(/\/$/, "") + }).sort(alphasort).reduce(function (set, f) { + if (f !== set[set.length - 1]) set.push(f) + return set + }, []).sort(alphasort).map(function (f) { + // de-windows + return (process.platform !== 'win32') ? f + : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') + }) +} + +function flatten (chunks) { + var s = 0 + chunks.forEach(function (c) { s += c.length }) + var out = new Buffer(s) + s = 0 + chunks.forEach(function (c) { + c.copy(out, s) + s += c.length + }) + + return out.toString().trim() +} + +function alphasort (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return a > b ? 1 : a < b ? -1 : 0 +} diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/bash-comparison.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/bash-comparison.js new file mode 100644 index 0000000..239ed1a --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/bash-comparison.js @@ -0,0 +1,63 @@ +// basic test +// show that it does the same thing by default as the shell. +var tap = require("tap") +, child_process = require("child_process") +, bashResults = require("./bash-results.json") +, globs = Object.keys(bashResults) +, glob = require("../") +, path = require("path") + +// run from the root of the project +// this is usually where you're at anyway, but be sure. +process.chdir(path.resolve(__dirname, "..")) + +function alphasort (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return a > b ? 1 : a < b ? -1 : 0 +} + +globs.forEach(function (pattern) { + var expect = bashResults[pattern] + // anything regarding the symlink thing will fail on windows, so just skip it + if (process.platform === "win32" && + expect.some(function (m) { + return /\/symlink\//.test(m) + })) + return + + tap.test(pattern, function (t) { + glob(pattern, function (er, matches) { + if (er) + throw er + + // sort and unmark, just to match the shell results + matches = cleanResults(matches) + + t.deepEqual(matches, expect, pattern) + t.end() + }) + }) + + tap.test(pattern + " sync", function (t) { + var matches = cleanResults(glob.sync(pattern)) + + t.deepEqual(matches, expect, "should match shell") + t.end() + }) +}) + +function cleanResults (m) { + // normalize discrepancies in ordering, duplication, + // and ending slashes. + return m.map(function (m) { + return m.replace(/\/+/g, "/").replace(/\/$/, "") + }).sort(alphasort).reduce(function (set, f) { + if (f !== set[set.length - 1]) set.push(f) + return set + }, []).sort(alphasort).map(function (f) { + // de-windows + return (process.platform !== 'win32') ? f + : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/') + }) +} diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/bash-results.json b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/bash-results.json new file mode 100644 index 0000000..8051c72 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/bash-results.json @@ -0,0 +1,351 @@ +{ + "test/a/*/+(c|g)/./d": [ + "test/a/b/c/./d" + ], + "test/a/**/[cg]/../[cg]": [ + "test/a/abcdef/g/../g", + "test/a/abcfed/g/../g", + "test/a/b/c/../c", + "test/a/c/../c", + "test/a/c/d/c/../c", + "test/a/symlink/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c" + ], + "test/a/{b,c,d,e,f}/**/g": [], + "test/a/b/**": [ + "test/a/b", + "test/a/b/c", + "test/a/b/c/d" + ], + "test/**/g": [ + "test/a/abcdef/g", + "test/a/abcfed/g" + ], + "test/a/abc{fed,def}/g/h": [ + "test/a/abcdef/g/h", + "test/a/abcfed/g/h" + ], + "test/a/abc{fed/g,def}/**/": [ + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcfed/g" + ], + "test/a/abc{fed/g,def}/**///**/": [ + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcfed/g" + ], + "test/**/a/**/": [ + "test/a", + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcfed", + "test/a/abcfed/g", + "test/a/b", + "test/a/b/c", + "test/a/bc", + "test/a/bc/e", + "test/a/c", + "test/a/c/d", + "test/a/c/d/c", + "test/a/cb", + "test/a/cb/e", + "test/a/symlink", + "test/a/symlink/a", + "test/a/symlink/a/b", + "test/a/symlink/a/b/c", + "test/a/symlink/a/b/c/a", + "test/a/symlink/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b" + ], + "test/+(a|b|c)/a{/,bc*}/**": [ + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcdef/g/h", + "test/a/abcfed", + "test/a/abcfed/g", + "test/a/abcfed/g/h" + ], + "test/*/*/*/f": [ + "test/a/bc/e/f", + "test/a/cb/e/f" + ], + "test/**/f": [ + "test/a/bc/e/f", + "test/a/cb/e/f" + ], + "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [ + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", + "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c" + ], + "{./*/*,/tmp/glob-test/*}": [ + "./examples/g.js", + "./examples/usr-local.js", + "./node_modules/inherits", + "./node_modules/minimatch", + "./node_modules/mkdirp", + "./node_modules/rimraf", + "./node_modules/tap", + "./test/00-setup.js", + "./test/a", + "./test/bash-comparison.js", + "./test/bash-results.json", + "./test/cwd-test.js", + "./test/globstar-match.js", + "./test/mark.js", + "./test/new-glob-optional-options.js", + "./test/nocase-nomagic.js", + "./test/pause-resume.js", + "./test/readme-issue.js", + "./test/root-nomount.js", + "./test/root.js", + "./test/stat.js", + "./test/zz-cleanup.js", + "/tmp/glob-test/asdf", + "/tmp/glob-test/bar", + "/tmp/glob-test/baz", + "/tmp/glob-test/foo", + "/tmp/glob-test/quux", + "/tmp/glob-test/qwer", + "/tmp/glob-test/rewq" + ], + "{/tmp/glob-test/*,*}": [ + "/tmp/glob-test/asdf", + "/tmp/glob-test/bar", + "/tmp/glob-test/baz", + "/tmp/glob-test/foo", + "/tmp/glob-test/quux", + "/tmp/glob-test/qwer", + "/tmp/glob-test/rewq", + "examples", + "glob.js", + "LICENSE", + "node_modules", + "package.json", + "README.md", + "test" + ], + "test/a/!(symlink)/**": [ + "test/a/abcdef", + "test/a/abcdef/g", + "test/a/abcdef/g/h", + "test/a/abcfed", + "test/a/abcfed/g", + "test/a/abcfed/g/h", + "test/a/b", + "test/a/b/c", + "test/a/b/c/d", + "test/a/bc", + "test/a/bc/e", + "test/a/bc/e/f", + "test/a/c", + "test/a/c/d", + "test/a/c/d/c", + "test/a/c/d/c/b", + "test/a/cb", + "test/a/cb/e", + "test/a/cb/e/f" + ] +} diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/cwd-test.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/cwd-test.js new file mode 100644 index 0000000..352c27e --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/cwd-test.js @@ -0,0 +1,55 @@ +var tap = require("tap") + +var origCwd = process.cwd() +process.chdir(__dirname) + +tap.test("changing cwd and searching for **/d", function (t) { + var glob = require('../') + var path = require('path') + t.test('.', function (t) { + glob('**/d', function (er, matches) { + t.ifError(er) + t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) + t.end() + }) + }) + + t.test('a', function (t) { + glob('**/d', {cwd:path.resolve('a')}, function (er, matches) { + t.ifError(er) + t.like(matches, [ 'b/c/d', 'c/d' ]) + t.end() + }) + }) + + t.test('a/b', function (t) { + glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) { + t.ifError(er) + t.like(matches, [ 'c/d' ]) + t.end() + }) + }) + + t.test('a/b/', function (t) { + glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) { + t.ifError(er) + t.like(matches, [ 'c/d' ]) + t.end() + }) + }) + + t.test('.', function (t) { + glob('**/d', {cwd: process.cwd()}, function (er, matches) { + t.ifError(er) + t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) + t.end() + }) + }) + + t.test('cd -', function (t) { + process.chdir(origCwd) + t.end() + }) + + t.end() +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/globstar-match.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/globstar-match.js new file mode 100644 index 0000000..9b234fa --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/globstar-match.js @@ -0,0 +1,19 @@ +var Glob = require("../glob.js").Glob +var test = require('tap').test + +test('globstar should not have dupe matches', function(t) { + var pattern = 'a/**/[gh]' + var g = new Glob(pattern, { cwd: __dirname }) + var matches = [] + g.on('match', function(m) { + console.error('match %j', m) + matches.push(m) + }) + g.on('end', function(set) { + console.error('set', set) + matches = matches.sort() + set = set.sort() + t.same(matches, set, 'should have same set of matches') + t.end() + }) +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/mark.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/mark.js new file mode 100644 index 0000000..bf411c0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/mark.js @@ -0,0 +1,118 @@ +var test = require("tap").test +var glob = require('../') +process.chdir(__dirname) + +// expose timing issues +var lag = 5 +glob.Glob.prototype._stat = function(o) { return function(f, cb) { + var args = arguments + setTimeout(function() { + o.call(this, f, cb) + }.bind(this), lag += 5) +}}(glob.Glob.prototype._stat) + + +test("mark, with **", function (t) { + glob("a/*b*/**", {mark: true}, function (er, results) { + if (er) + throw er + var expect = + [ 'a/abcdef/', + 'a/abcdef/g/', + 'a/abcdef/g/h', + 'a/abcfed/', + 'a/abcfed/g/', + 'a/abcfed/g/h', + 'a/b/', + 'a/b/c/', + 'a/b/c/d', + 'a/bc/', + 'a/bc/e/', + 'a/bc/e/f', + 'a/cb/', + 'a/cb/e/', + 'a/cb/e/f' ] + + t.same(results, expect) + t.end() + }) +}) + +test("mark, no / on pattern", function (t) { + glob("a/*", {mark: true}, function (er, results) { + if (er) + throw er + var expect = [ 'a/abcdef/', + 'a/abcfed/', + 'a/b/', + 'a/bc/', + 'a/c/', + 'a/cb/' ] + + if (process.platform !== "win32") + expect.push('a/symlink/') + + t.same(results, expect) + t.end() + }).on('match', function(m) { + t.similar(m, /\/$/) + }) +}) + +test("mark=false, no / on pattern", function (t) { + glob("a/*", function (er, results) { + if (er) + throw er + var expect = [ 'a/abcdef', + 'a/abcfed', + 'a/b', + 'a/bc', + 'a/c', + 'a/cb' ] + + if (process.platform !== "win32") + expect.push('a/symlink') + t.same(results, expect) + t.end() + }).on('match', function(m) { + t.similar(m, /[^\/]$/) + }) +}) + +test("mark=true, / on pattern", function (t) { + glob("a/*/", {mark: true}, function (er, results) { + if (er) + throw er + var expect = [ 'a/abcdef/', + 'a/abcfed/', + 'a/b/', + 'a/bc/', + 'a/c/', + 'a/cb/' ] + if (process.platform !== "win32") + expect.push('a/symlink/') + t.same(results, expect) + t.end() + }).on('match', function(m) { + t.similar(m, /\/$/) + }) +}) + +test("mark=false, / on pattern", function (t) { + glob("a/*/", function (er, results) { + if (er) + throw er + var expect = [ 'a/abcdef/', + 'a/abcfed/', + 'a/b/', + 'a/bc/', + 'a/c/', + 'a/cb/' ] + if (process.platform !== "win32") + expect.push('a/symlink/') + t.same(results, expect) + t.end() + }).on('match', function(m) { + t.similar(m, /\/$/) + }) +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/new-glob-optional-options.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/new-glob-optional-options.js new file mode 100644 index 0000000..3e7dc5a --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/new-glob-optional-options.js @@ -0,0 +1,10 @@ +var Glob = require('../glob.js').Glob; +var test = require('tap').test; + +test('new glob, with cb, and no options', function (t) { + new Glob(__filename, function(er, results) { + if (er) throw er; + t.same(results, [__filename]); + t.end(); + }); +}); diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/nocase-nomagic.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/nocase-nomagic.js new file mode 100644 index 0000000..2503f23 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/nocase-nomagic.js @@ -0,0 +1,113 @@ +var fs = require('fs'); +var test = require('tap').test; +var glob = require('../'); + +test('mock fs', function(t) { + var stat = fs.stat + var statSync = fs.statSync + var readdir = fs.readdir + var readdirSync = fs.readdirSync + + function fakeStat(path) { + var ret + switch (path.toLowerCase()) { + case '/tmp': case '/tmp/': + ret = { isDirectory: function() { return true } } + break + case '/tmp/a': + ret = { isDirectory: function() { return false } } + break + } + return ret + } + + fs.stat = function(path, cb) { + var f = fakeStat(path); + if (f) { + process.nextTick(function() { + cb(null, f) + }) + } else { + stat.call(fs, path, cb) + } + } + + fs.statSync = function(path) { + return fakeStat(path) || statSync.call(fs, path) + } + + function fakeReaddir(path) { + var ret + switch (path.toLowerCase()) { + case '/tmp': case '/tmp/': + ret = [ 'a', 'A' ] + break + case '/': + ret = ['tmp', 'tMp', 'tMP', 'TMP'] + } + return ret + } + + fs.readdir = function(path, cb) { + var f = fakeReaddir(path) + if (f) + process.nextTick(function() { + cb(null, f) + }) + else + readdir.call(fs, path, cb) + } + + fs.readdirSync = function(path) { + return fakeReaddir(path) || readdirSync.call(fs, path) + } + + t.pass('mocked') + t.end() +}) + +test('nocase, nomagic', function(t) { + var n = 2 + var want = [ '/TMP/A', + '/TMP/a', + '/tMP/A', + '/tMP/a', + '/tMp/A', + '/tMp/a', + '/tmp/A', + '/tmp/a' ] + glob('/tmp/a', { nocase: true }, function(er, res) { + if (er) + throw er + t.same(res.sort(), want) + if (--n === 0) t.end() + }) + glob('/tmp/A', { nocase: true }, function(er, res) { + if (er) + throw er + t.same(res.sort(), want) + if (--n === 0) t.end() + }) +}) + +test('nocase, with some magic', function(t) { + t.plan(2) + var want = [ '/TMP/A', + '/TMP/a', + '/tMP/A', + '/tMP/a', + '/tMp/A', + '/tMp/a', + '/tmp/A', + '/tmp/a' ] + glob('/tmp/*', { nocase: true }, function(er, res) { + if (er) + throw er + t.same(res.sort(), want) + }) + glob('/tmp/*', { nocase: true }, function(er, res) { + if (er) + throw er + t.same(res.sort(), want) + }) +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/pause-resume.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/pause-resume.js new file mode 100644 index 0000000..e1ffbab --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/pause-resume.js @@ -0,0 +1,73 @@ +// show that no match events happen while paused. +var tap = require("tap") +, child_process = require("child_process") +// just some gnarly pattern with lots of matches +, pattern = "test/a/!(symlink)/**" +, bashResults = require("./bash-results.json") +, patterns = Object.keys(bashResults) +, glob = require("../") +, Glob = glob.Glob +, path = require("path") + +// run from the root of the project +// this is usually where you're at anyway, but be sure. +process.chdir(path.resolve(__dirname, "..")) + +function alphasort (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return a > b ? 1 : a < b ? -1 : 0 +} + +function cleanResults (m) { + // normalize discrepancies in ordering, duplication, + // and ending slashes. + return m.map(function (m) { + return m.replace(/\/+/g, "/").replace(/\/$/, "") + }).sort(alphasort).reduce(function (set, f) { + if (f !== set[set.length - 1]) set.push(f) + return set + }, []).sort(alphasort).map(function (f) { + // de-windows + return (process.platform !== 'win32') ? f + : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') + }) +} + +var globResults = [] +tap.test("use a Glob object, and pause/resume it", function (t) { + var g = new Glob(pattern) + , paused = false + , res = [] + , expect = bashResults[pattern] + + g.on("pause", function () { + console.error("pause") + }) + + g.on("resume", function () { + console.error("resume") + }) + + g.on("match", function (m) { + t.notOk(g.paused, "must not be paused") + globResults.push(m) + g.pause() + t.ok(g.paused, "must be paused") + setTimeout(g.resume.bind(g), 10) + }) + + g.on("end", function (matches) { + t.pass("reached glob end") + globResults = cleanResults(globResults) + matches = cleanResults(matches) + t.deepEqual(matches, globResults, + "end event matches should be the same as match events") + + t.deepEqual(matches, expect, + "glob matches should be the same as bash results") + + t.end() + }) +}) + diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/readme-issue.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/readme-issue.js new file mode 100644 index 0000000..0b4e0be --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/readme-issue.js @@ -0,0 +1,36 @@ +var test = require("tap").test +var glob = require("../") + +var mkdirp = require("mkdirp") +var fs = require("fs") +var rimraf = require("rimraf") +var dir = __dirname + "/package" + +test("setup", function (t) { + mkdirp.sync(dir) + fs.writeFileSync(dir + "/package.json", "{}", "ascii") + fs.writeFileSync(dir + "/README", "x", "ascii") + t.pass("setup done") + t.end() +}) + +test("glob", function (t) { + var opt = { + cwd: dir, + nocase: true, + mark: true + } + + glob("README?(.*)", opt, function (er, files) { + if (er) + throw er + t.same(files, ["README"]) + t.end() + }) +}) + +test("cleanup", function (t) { + rimraf.sync(dir) + t.pass("clean") + t.end() +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/root-nomount.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/root-nomount.js new file mode 100644 index 0000000..3ac5979 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/root-nomount.js @@ -0,0 +1,39 @@ +var tap = require("tap") + +var origCwd = process.cwd() +process.chdir(__dirname) + +tap.test("changing root and searching for /b*/**", function (t) { + var glob = require('../') + var path = require('path') + t.test('.', function (t) { + glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) { + t.ifError(er) + t.like(matches, []) + t.end() + }) + }) + + t.test('a', function (t) { + glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) { + t.ifError(er) + t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) + t.end() + }) + }) + + t.test('root=a, cwd=a/b', function (t) { + glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) { + t.ifError(er) + t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) + t.end() + }) + }) + + t.test('cd -', function (t) { + process.chdir(origCwd) + t.end() + }) + + t.end() +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/root.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/root.js new file mode 100644 index 0000000..95c23f9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/root.js @@ -0,0 +1,46 @@ +var t = require("tap") + +var origCwd = process.cwd() +process.chdir(__dirname) + +var glob = require('../') +var path = require('path') + +t.test('.', function (t) { + glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) { + t.ifError(er) + t.like(matches, []) + t.end() + }) +}) + + +t.test('a', function (t) { + console.error("root=" + path.resolve('a')) + glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) { + t.ifError(er) + var wanted = [ + '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' + ].map(function (m) { + return path.join(path.resolve('a'), m).replace(/\\/g, '/') + }) + + t.like(matches, wanted) + t.end() + }) +}) + +t.test('root=a, cwd=a/b', function (t) { + glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) { + t.ifError(er) + t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) { + return path.join(path.resolve('a'), m).replace(/\\/g, '/') + })) + t.end() + }) +}) + +t.test('cd -', function (t) { + process.chdir(origCwd) + t.end() +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/stat.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/stat.js new file mode 100644 index 0000000..6291711 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/stat.js @@ -0,0 +1,32 @@ +var glob = require('../') +var test = require('tap').test +var path = require('path') + +test('stat all the things', function(t) { + var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname }) + var matches = [] + g.on('match', function(m) { + matches.push(m) + }) + var stats = [] + g.on('stat', function(m) { + stats.push(m) + }) + g.on('end', function(eof) { + stats = stats.sort() + matches = matches.sort() + eof = eof.sort() + t.same(stats, matches) + t.same(eof, matches) + var cache = Object.keys(this.statCache) + t.same(cache.map(function (f) { + return path.relative(__dirname, f) + }).sort(), matches) + + cache.forEach(function(c) { + t.equal(typeof this.statCache[c], 'object') + }, this) + + t.end() + }) +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/zz-cleanup.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/zz-cleanup.js new file mode 100644 index 0000000..e085f0f --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/glob/test/zz-cleanup.js @@ -0,0 +1,11 @@ +// remove the fixtures +var tap = require("tap") +, rimraf = require("rimraf") +, path = require("path") + +tap.test("cleanup fixtures", function (t) { + rimraf(path.resolve(__dirname, "a"), function (er) { + t.ifError(er, "removed") + t.end() + }) +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/.npmignore b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/.npmignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/LICENSE b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/LICENSE new file mode 100644 index 0000000..05a4010 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/LICENSE @@ -0,0 +1,23 @@ +Copyright 2009, 2010, 2011 Isaac Z. Schlueter. +All rights reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/README.md b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/README.md new file mode 100644 index 0000000..5b3967e --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/README.md @@ -0,0 +1,218 @@ +# minimatch + +A minimal matching utility. + +[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch) + + +This is the matching library used internally by npm. + +Eventually, it will replace the C binding in node-glob. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Usage + +```javascript +var minimatch = require("minimatch") + +minimatch("bar.foo", "*.foo") // true! +minimatch("bar.foo", "*.bar") // false! +minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +* Brace Expansion +* Extended glob matching +* "Globstar" `**` matching + +See: + +* `man sh` +* `man bash` +* `man 3 fnmatch` +* `man 5 gitignore` + +## Minimatch Class + +Create a minimatch object by instanting the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require("minimatch").Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +* `pattern` The original pattern the minimatch object represents. +* `options` The options supplied to the constructor. +* `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +* `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +* `negate` True if the pattern is negated. +* `comment` True if the pattern is a comment. +* `empty` True if the pattern is `""`. + +### Methods + +* `makeRe` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +* `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +* `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. + +All other methods are internal, and will be called as necessary. + +## Functions + +The top-level exported function has a `cache` property, which is an LRU +cache set to store 100 items. So, calling these methods repeatedly +with the same pattern and options will use the same Minimatch object, +saving the cost of parsing it multiple times. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, "*.js", { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) +``` + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between minimatch and other +implementations, and are intentional. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/minimatch.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/minimatch.js new file mode 100644 index 0000000..4539678 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/minimatch.js @@ -0,0 +1,1061 @@ +;(function (require, exports, module, platform) { + +if (module) module.exports = minimatch +else exports.minimatch = minimatch + +if (!require) { + require = function (id) { + switch (id) { + case "sigmund": return function sigmund (obj) { + return JSON.stringify(obj) + } + case "path": return { basename: function (f) { + f = f.split(/[\/\\]/) + var e = f.pop() + if (!e) e = f.pop() + return e + }} + case "lru-cache": return function LRUCache () { + // not quite an LRU, but still space-limited. + var cache = {} + var cnt = 0 + this.set = function (k, v) { + cnt ++ + if (cnt >= 100) cache = {} + cache[k] = v + } + this.get = function (k) { return cache[k] } + } + } + } +} + +minimatch.Minimatch = Minimatch + +var LRU = require("lru-cache") + , cache = minimatch.cache = new LRU({max: 100}) + , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} + , sigmund = require("sigmund") + +var path = require("path") + // any single thing other than / + // don't need to escape / when using new RegExp() + , qmark = "[^/]" + + // * => any number of characters + , star = qmark + "*?" + + // ** when dots are allowed. Anything goes, except .. and . + // not (^ or / followed by one or two dots followed by $ or /), + // followed by anything, any number of times. + , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" + + // not a ^ or / followed by a dot, + // followed by anything, any number of times. + , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" + + // characters that need to be escaped in RegExp. + , reSpecials = charSet("().*{}+?[]^$\\!") + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split("").reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} + + +function minimatch (p, pattern, options) { + if (typeof pattern !== "string") { + throw new TypeError("glob pattern string required") + } + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === "#") { + return false + } + + // "" only matches "" + if (pattern.trim() === "") return p === "" + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options, cache) + } + + if (typeof pattern !== "string") { + throw new TypeError("glob pattern string required") + } + + if (!options) options = {} + pattern = pattern.trim() + + // windows: need to use /, not \ + // On other platforms, \ is a valid (albeit bad) filename char. + if (platform === "win32") { + pattern = pattern.split("\\").join("/") + } + + // lru storage. + // these things aren't particularly big, but walking down the string + // and turning it into a regexp can get pretty costly. + var cacheKey = pattern + "\n" + sigmund(options) + var cached = minimatch.cache.get(cacheKey) + if (cached) return cached + minimatch.cache.set(cacheKey, this) + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function() {} + +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return + + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === "#") { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = console.error + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return -1 === s.indexOf(false) + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + , negate = false + , options = this.options + , negateOffset = 0 + + if (options.nonegate) return + + for ( var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === "!" + ; i ++) { + negate = !negate + negateOffset ++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return new Minimatch(pattern, options).braceExpand() +} + +Minimatch.prototype.braceExpand = braceExpand +function braceExpand (pattern, options) { + options = options || this.options + pattern = typeof pattern === "undefined" + ? this.pattern : pattern + + if (typeof pattern === "undefined") { + throw new Error("undefined pattern") + } + + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + var escaping = false + + // examples and comments refer to this crazy pattern: + // a{b,c{d,e},{f,g}h}x{y,z} + // expected: + // abxy + // abxz + // acdxy + // acdxz + // acexy + // acexz + // afhxy + // afhxz + // aghxy + // aghxz + + // everything before the first \{ is just a prefix. + // So, we pluck that off, and work with the rest, + // and then prepend it to everything we find. + if (pattern.charAt(0) !== "{") { + this.debug(pattern) + var prefix = null + for (var i = 0, l = pattern.length; i < l; i ++) { + var c = pattern.charAt(i) + this.debug(i, c) + if (c === "\\") { + escaping = !escaping + } else if (c === "{" && !escaping) { + prefix = pattern.substr(0, i) + break + } + } + + // actually no sets, all { were escaped. + if (prefix === null) { + this.debug("no sets") + return [pattern] + } + + var tail = braceExpand.call(this, pattern.substr(i), options) + return tail.map(function (t) { + return prefix + t + }) + } + + // now we have something like: + // {b,c{d,e},{f,g}h}x{y,z} + // walk through the set, expanding each part, until + // the set ends. then, we'll expand the suffix. + // If the set only has a single member, then'll put the {} back + + // first, handle numeric sets, since they're easier + var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/) + if (numset) { + this.debug("numset", numset[1], numset[2]) + var suf = braceExpand.call(this, pattern.substr(numset[0].length), options) + , start = +numset[1] + , end = +numset[2] + , inc = start > end ? -1 : 1 + , set = [] + for (var i = start; i != (end + inc); i += inc) { + // append all the suffixes + for (var ii = 0, ll = suf.length; ii < ll; ii ++) { + set.push(i + suf[ii]) + } + } + return set + } + + // ok, walk through the set + // We hope, somewhat optimistically, that there + // will be a } at the end. + // If the closing brace isn't found, then the pattern is + // interpreted as braceExpand("\\" + pattern) so that + // the leading \{ will be interpreted literally. + var i = 1 // skip the \{ + , depth = 1 + , set = [] + , member = "" + , sawEnd = false + , escaping = false + + function addMember () { + set.push(member) + member = "" + } + + this.debug("Entering for") + FOR: for (i = 1, l = pattern.length; i < l; i ++) { + var c = pattern.charAt(i) + this.debug("", i, c) + + if (escaping) { + escaping = false + member += "\\" + c + } else { + switch (c) { + case "\\": + escaping = true + continue + + case "{": + depth ++ + member += "{" + continue + + case "}": + depth -- + // if this closes the actual set, then we're done + if (depth === 0) { + addMember() + // pluck off the close-brace + i ++ + break FOR + } else { + member += c + continue + } + + case ",": + if (depth === 1) { + addMember() + } else { + member += c + } + continue + + default: + member += c + continue + } // switch + } // else + } // for + + // now we've either finished the set, and the suffix is + // pattern.substr(i), or we have *not* closed the set, + // and need to escape the leading brace + if (depth !== 0) { + this.debug("didn't close", pattern) + return braceExpand.call(this, "\\" + pattern, options) + } + + // x{y,z} -> ["xy", "xz"] + this.debug("set", set) + this.debug("suffix", pattern.substr(i)) + var suf = braceExpand.call(this, pattern.substr(i), options) + // ["b", "c{d,e}","{f,g}h"] -> + // [["b"], ["cd", "ce"], ["fh", "gh"]] + var addBraces = set.length === 1 + this.debug("set pre-expanded", set) + set = set.map(function (p) { + return braceExpand.call(this, p, options) + }, this) + this.debug("set expanded", set) + + + // [["b"], ["cd", "ce"], ["fh", "gh"]] -> + // ["b", "cd", "ce", "fh", "gh"] + set = set.reduce(function (l, r) { + return l.concat(r) + }) + + if (addBraces) { + set = set.map(function (s) { + return "{" + s + "}" + }) + } + + // now attach the suffixes. + var ret = [] + for (var i = 0, l = set.length; i < l; i ++) { + for (var ii = 0, ll = suf.length; ii < ll; ii ++) { + ret.push(set[i] + suf[ii]) + } + } + return ret +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + var options = this.options + + // shortcuts + if (!options.noglobstar && pattern === "**") return GLOBSTAR + if (pattern === "") return "" + + var re = "" + , hasMagic = !!options.nocase + , escaping = false + // ? => one single character + , patternListStack = [] + , plType + , stateChar + , inClass = false + , reClassStart = -1 + , classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + , patternStart = pattern.charAt(0) === "." ? "" // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))" + : "(?!\\.)" + , self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case "*": + re += star + hasMagic = true + break + case "?": + re += qmark + hasMagic = true + break + default: + re += "\\"+stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for ( var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i ++ ) { + + this.debug("%s\t%s %s %j", pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += "\\" + c + escaping = false + continue + } + + SWITCH: switch (c) { + case "/": + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + + case "\\": + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case "?": + case "*": + case "+": + case "@": + case "!": + this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === "!" && i === classStart + 1) c = "^" + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case "(": + if (inClass) { + re += "(" + continue + } + + if (!stateChar) { + re += "\\(" + continue + } + + plType = stateChar + patternListStack.push({ type: plType + , start: i - 1 + , reStart: re.length }) + // negation is (?:(?!js)[^/]*) + re += stateChar === "!" ? "(?:(?!" : "(?:" + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ")": + if (inClass || !patternListStack.length) { + re += "\\)" + continue + } + + clearStateChar() + hasMagic = true + re += ")" + plType = patternListStack.pop().type + // negation is (?:(?!js)[^/]*) + // The others are (?:) + switch (plType) { + case "!": + re += "[^/]*?)" + break + case "?": + case "+": + case "*": re += plType + case "@": break // the default anyway + } + continue + + case "|": + if (inClass || !patternListStack.length || escaping) { + re += "\\|" + escaping = false + continue + } + + clearStateChar() + re += "|" + continue + + // these are mostly the same in regexp and glob + case "[": + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += "\\" + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case "]": + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += "\\" + c + escaping = false + continue + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === "^" && inClass)) { + re += "\\" + } + + re += c + + } // switch + } // for + + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + var cs = pattern.substr(classStart + 1) + , sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + "\\[" + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + var pl + while (pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + 3) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = "\\" + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + "|" + }) + + this.debug("tail=%j\n %s", tail, tail) + var t = pl.type === "*" ? star + : pl.type === "?" ? qmark + : "\\" + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + + t + "\\(" + + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += "\\\\" + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case ".": + case "[": + case "(": addPatternStart = true + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== "" && hasMagic) re = "(?=.)" + re + + if (addPatternStart) re = patternStart + re + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [ re, hasMagic ] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? "i" : "" + , regExp = new RegExp("^" + re + "$", flags) + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) return this.regexp = false + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + , flags = options.nocase ? "i" : "" + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === "string") ? regExpEscape(p) + : p._src + }).join("\\\/") + }).join("|") + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = "^(?:" + re + ")$" + + // can match anything, as long as it's not this. + if (this.negate) re = "^(?!" + re + ").*$" + + try { + return this.regexp = new RegExp(re, flags) + } catch (ex) { + return this.regexp = false + } +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = match +function match (f, partial) { + this.debug("match", f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === "" + + if (f === "/" && partial) return true + + var options = this.options + + // windows: need to use /, not \ + // On other platforms, \ is a valid (albeit bad) filename char. + if (platform === "win32") { + f = f.split("\\").join("/") + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, "split", f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, "set", set) + + // Find the basename of the path by looking for the last non-empty segment + var filename; + for (var i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (var i = 0, l = set.length; i < l; i ++) { + var pattern = set[i], file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug("matchOne", + { "this": this + , file: file + , pattern: pattern }) + + this.debug("matchOne", file.length, pattern.length) + + for ( var fi = 0 + , pi = 0 + , fl = file.length + , pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi ++, pi ++ ) { + + this.debug("matchOne loop") + var p = pattern[pi] + , f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + , pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for ( ; fi < fl; fi ++) { + if (file[fi] === "." || file[fi] === ".." || + (!options.dot && file[fi].charAt(0) === ".")) return false + } + return true + } + + // ok, let's see if we can swallow whatever we can. + WHILE: while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', + file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === "." || swallowee === ".." || + (!options.dot && swallowee.charAt(0) === ".")) { + this.debug("dot detected!", file, fr, pattern, pr) + break WHILE + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr ++ + } + } + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug("\n>>> no match, partial?", file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === "string") { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug("string match", p, f, hit) + } else { + hit = f.match(p) + this.debug("pattern match", p, f, hit) + } + + if (!hit) return false + } + + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === "") + return emptyFileEnd + } + + // should be unreachable. + throw new Error("wtf?") +} + + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, "$1") +} + + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") +} + +})( typeof require === "function" ? require : null, + this, + typeof module === "object" ? module : null, + typeof process === "object" ? process.platform : "win32" + ) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/package.json b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/package.json new file mode 100644 index 0000000..ac23beb --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/package.json @@ -0,0 +1,82 @@ +{ + "_args": [ + [ + "minimatch@0.3", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine/node_modules/glob" + ] + ], + "_from": "minimatch@>=0.3.0 <0.4.0", + "_id": "minimatch@0.3.0", + "_inCache": true, + "_installable": true, + "_location": "/jasmine/minimatch", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "1.4.10", + "_phantomChildren": {}, + "_requested": { + "name": "minimatch", + "raw": "minimatch@0.3", + "rawSpec": "0.3", + "scope": null, + "spec": ">=0.3.0 <0.4.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine/glob" + ], + "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "_shasum": "275d8edaac4f1bb3326472089e7949c8394699dd", + "_shrinkwrap": null, + "_spec": "minimatch@0.3", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine/node_modules/glob", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me" + }, + "bugs": { + "url": "https://github.com/isaacs/minimatch/issues" + }, + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "description": "a glob matcher in javascript", + "devDependencies": { + "tap": "" + }, + "directories": {}, + "dist": { + "shasum": "275d8edaac4f1bb3326472089e7949c8394699dd", + "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz" + }, + "engines": { + "node": "*" + }, + "homepage": "https://github.com/isaacs/minimatch", + "license": { + "type": "MIT", + "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" + }, + "main": "minimatch.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "minimatch", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "0.3.0" +} diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/basic.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/basic.js new file mode 100644 index 0000000..ae7ac73 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/basic.js @@ -0,0 +1,399 @@ +// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test +// +// TODO: Some of these tests do very bad things with backslashes, and will +// most likely fail badly on windows. They should probably be skipped. + +var tap = require("tap") + , globalBefore = Object.keys(global) + , mm = require("../") + , files = [ "a", "b", "c", "d", "abc" + , "abd", "abe", "bb", "bcd" + , "ca", "cb", "dd", "de" + , "bdir/", "bdir/cfile"] + , next = files.concat([ "a-b", "aXb" + , ".x", ".y" ]) + + +var patterns = + [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test" + , ["a*", ["a", "abc", "abd", "abe"]] + , ["X*", ["X*"], {nonull: true}] + + // allow null glob expansion + , ["X*", []] + + // isaacs: Slightly different than bash/sh/ksh + // \\* is not un-escaped to literal "*" in a failed match, + // but it does make it get treated as a literal star + , ["\\*", ["\\*"], {nonull: true}] + , ["\\**", ["\\**"], {nonull: true}] + , ["\\*\\*", ["\\*\\*"], {nonull: true}] + + , ["b*/", ["bdir/"]] + , ["c*", ["c", "ca", "cb"]] + , ["**", files] + + , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] + , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] + + , "legendary larry crashes bashes" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] + + , "character classes" + , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] + , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", + "bdir/", "ca", "cb", "dd", "de"]] + , ["a*[^c]", ["abd", "abe"]] + , function () { files.push("a-b", "aXb") } + , ["a[X-]b", ["a-b", "aXb"]] + , function () { files.push(".x", ".y") } + , ["[^a-c]*", ["d", "dd", "de"]] + , function () { files.push("a*b/", "a*b/ooo") } + , ["a\\*b/*", ["a*b/ooo"]] + , ["a\\*?/*", ["a*b/ooo"]] + , ["*\\\\!*", [], {null: true}, ["echo !7"]] + , ["*\\!*", ["echo !7"], null, ["echo !7"]] + , ["*.\\*", ["r.*"], null, ["r.*"]] + , ["a[b]c", ["abc"]] + , ["a[\\b]c", ["abc"]] + , ["a?c", ["abc"]] + , ["a\\*c", [], {null: true}, ["abc"]] + , ["", [""], { null: true }, [""]] + + , "http://www.opensource.apple.com/source/bash/bash-23/" + + "bash/tests/glob-test" + , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } + , ["*/man*/bash.*", ["man/man1/bash.1"]] + , ["man/man1/bash.1", ["man/man1/bash.1"]] + , ["a***c", ["abc"], null, ["abc"]] + , ["a*****?c", ["abc"], null, ["abc"]] + , ["?*****??", ["abc"], null, ["abc"]] + , ["*****??", ["abc"], null, ["abc"]] + , ["?*****?c", ["abc"], null, ["abc"]] + , ["?***?****c", ["abc"], null, ["abc"]] + , ["?***?****?", ["abc"], null, ["abc"]] + , ["?***?****", ["abc"], null, ["abc"]] + , ["*******c", ["abc"], null, ["abc"]] + , ["*******?", ["abc"], null, ["abc"]] + , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["[-abc]", ["-"], null, ["-"]] + , ["[abc-]", ["-"], null, ["-"]] + , ["\\", ["\\"], null, ["\\"]] + , ["[\\\\]", ["\\"], null, ["\\"]] + , ["[[]", ["["], null, ["["]] + , ["[", ["["], null, ["["]] + , ["[*", ["[abc"], null, ["[abc"]] + , "a right bracket shall lose its special meaning and\n" + + "represent itself in a bracket expression if it occurs\n" + + "first in the list. -- POSIX.2 2.8.3.2" + , ["[]]", ["]"], null, ["]"]] + , ["[]-]", ["]"], null, ["]"]] + , ["[a-\z]", ["p"], null, ["p"]] + , ["??**********?****?", [], { null: true }, ["abc"]] + , ["??**********?****c", [], { null: true }, ["abc"]] + , ["?************c****?****", [], { null: true }, ["abc"]] + , ["*c*?**", [], { null: true }, ["abc"]] + , ["a*****c*?**", [], { null: true }, ["abc"]] + , ["a********???*******", [], { null: true }, ["abc"]] + , ["[]", [], { null: true }, ["a"]] + , ["[abc", [], { null: true }, ["["]] + + , "nocase tests" + , ["XYZ", ["xYz"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + , ["ab*", ["ABC"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + + // [ pattern, [matches], MM opts, files, TAP opts] + , "onestar/twostar" + , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] + , ["{/?,*}", ["/a", "bb"], {null: true} + , ["/a", "/b/b", "/a/b/c", "bb"]] + + , "dots should not match unless requested" + , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] + + // .. and . can only match patterns starting with ., + // even when options.dot is set. + , function () { + files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] + } + , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] + , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] + , ["a/*/b", ["a/c/b"], {dot:false}] + , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] + + + // this also tests that changing the options needs + // to change the cache key, even if the pattern is + // the same! + , ["**", ["a/b","a/.d",".a/.d"], { dot: true } + , [ ".a/.d", "a/.d", "a/b"]] + + , "paren sets cannot contain slashes" + , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] + + // brace sets trump all else. + // + // invalid glob pattern. fails on bash4 and bsdglob. + // however, in this implementation, it's easier just + // to do the intuitive thing, and let brace-expansion + // actually come before parsing any extglob patterns, + // like the documentation seems to say. + // + // XXX: if anyone complains about this, either fix it + // or tell them to grow up and stop complaining. + // + // bash/bsdglob says this: + // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] + // but we do this instead: + , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] + + // test partial parsing in the presence of comment/negation chars + , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] + , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] + + // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. + , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" + , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] + , {} + , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] + + + // crazy nested {,,} and *(||) tests. + , function () { + files = [ "a", "b", "c", "d" + , "ab", "ac", "ad" + , "bc", "cb" + , "bc,d", "c,db", "c,d" + , "d)", "(b|c", "*(b|c" + , "b|c", "b|cc", "cb|c" + , "x(a|b|c)", "x(a|c)" + , "(a|b|c)", "(a|c)"] + } + , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] + , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] + // a + // *(b|c) + // *(b|d) + , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] + , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] + + + // test various flag settings. + , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] + , { noext: true } ] + , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} + , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] + , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] + + + // begin channelling Boole and deMorgan... + , "negation tests" + , function () { + files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] + } + + // anything that is NOT a* matches. + , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] + + // anything that IS !a* matches. + , ["!a*", ["!ab", "!abc"], {nonegate: true}] + + // anything that IS a* matches + , ["!!a*", ["a!b"]] + + // anything that is NOT !a* matches + , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] + + // negation nestled within a pattern + , function () { + files = [ "foo.js" + , "foo.bar" + // can't match this one without negative lookbehind. + , "foo.js.js" + , "blar.js" + , "foo." + , "boo.js.boo" ] + } + , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] + + // https://github.com/isaacs/minimatch/issues/5 + , function () { + files = [ 'a/b/.x/c' + , 'a/b/.x/c/d' + , 'a/b/.x/c/d/e' + , 'a/b/.x' + , 'a/b/.x/' + , 'a/.x/b' + , '.x' + , '.x/' + , '.x/a' + , '.x/a/b' + , 'a/.x/b/.x/c' + , '.x/.x' ] + } + , ["**/.x/**", [ '.x/' + , '.x/a' + , '.x/a/b' + , 'a/.x/b' + , 'a/b/.x/' + , 'a/b/.x/c' + , 'a/b/.x/c/d' + , 'a/b/.x/c/d/e' ] ] + + ] + +var regexps = + [ '/^(?:(?=.)a[^/]*?)$/', + '/^(?:(?=.)X[^/]*?)$/', + '/^(?:(?=.)X[^/]*?)$/', + '/^(?:\\*)$/', + '/^(?:(?=.)\\*[^/]*?)$/', + '/^(?:\\*\\*)$/', + '/^(?:(?=.)b[^/]*?\\/)$/', + '/^(?:(?=.)c[^/]*?)$/', + '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', + '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/', + '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/', + '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/', + '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/', + '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/', + '/^(?:(?=.)a[^/]*?[^c])$/', + '/^(?:(?=.)a[X-]b)$/', + '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/', + '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/', + '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/', + '/^(?:(?=.)a[b]c)$/', + '/^(?:(?=.)a[b]c)$/', + '/^(?:(?=.)a[^/]c)$/', + '/^(?:a\\*c)$/', + 'false', + '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/', + '/^(?:man\\/man1\\/bash\\.1)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', + '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/', + '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', + '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[-abc])$/', + '/^(?:(?!\\.)(?=.)[abc-])$/', + '/^(?:\\\\)$/', + '/^(?:(?!\\.)(?=.)[\\\\])$/', + '/^(?:(?!\\.)(?=.)[\\[])$/', + '/^(?:\\[)$/', + '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[\\]])$/', + '/^(?:(?!\\.)(?=.)[\\]-])$/', + '/^(?:(?!\\.)(?=.)[a-z])$/', + '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', + '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', + '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', + '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', + '/^(?:\\[\\])$/', + '/^(?:\\[abc)$/', + '/^(?:(?=.)XYZ)$/i', + '/^(?:(?=.)ab[^/]*?)$/i', + '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i', + '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/', + '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/', + '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', + '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/', + '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', + '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/', + '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', + '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/', + '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', + '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/', + '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/', + '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/', + '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', + '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/', + '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/', + '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/', + '/^(?:(?=.)a[^/]b)$/', + '/^(?:(?=.)#[^/]*?)$/', + '/^(?!^(?:(?=.)a[^/]*?)$).*$/', + '/^(?:(?=.)\\!a[^/]*?)$/', + '/^(?:(?=.)a[^/]*?)$/', + '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/', + '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/', + '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ] +var re = 0; + +tap.test("basic tests", function (t) { + var start = Date.now() + + // [ pattern, [matches], MM opts, files, TAP opts] + patterns.forEach(function (c) { + if (typeof c === "function") return c() + if (typeof c === "string") return t.comment(c) + + var pattern = c[0] + , expect = c[1].sort(alpha) + , options = c[2] || {} + , f = c[3] || files + , tapOpts = c[4] || {} + + // options.debug = true + var m = new mm.Minimatch(pattern, options) + var r = m.makeRe() + var expectRe = regexps[re++] + tapOpts.re = String(r) || JSON.stringify(r) + tapOpts.files = JSON.stringify(f) + tapOpts.pattern = pattern + tapOpts.set = m.set + tapOpts.negated = m.negate + + var actual = mm.match(f, pattern, options) + actual.sort(alpha) + + t.equivalent( actual, expect + , JSON.stringify(pattern) + " " + JSON.stringify(expect) + , tapOpts ) + + t.equal(tapOpts.re, expectRe, tapOpts) + }) + + t.comment("time=" + (Date.now() - start) + "ms") + t.end() +}) + +tap.test("global leak test", function (t) { + var globalAfter = Object.keys(global) + t.equivalent(globalAfter, globalBefore, "no new globals, please") + t.end() +}) + +function alpha (a, b) { + return a > b ? 1 : -1 +} diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/brace-expand.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/brace-expand.js new file mode 100644 index 0000000..7ee278a --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/brace-expand.js @@ -0,0 +1,33 @@ +var tap = require("tap") + , minimatch = require("../") + +tap.test("brace expansion", function (t) { + // [ pattern, [expanded] ] + ; [ [ "a{b,c{d,e},{f,g}h}x{y,z}" + , [ "abxy" + , "abxz" + , "acdxy" + , "acdxz" + , "acexy" + , "acexz" + , "afhxy" + , "afhxz" + , "aghxy" + , "aghxz" ] ] + , [ "a{1..5}b" + , [ "a1b" + , "a2b" + , "a3b" + , "a4b" + , "a5b" ] ] + , [ "a{b}c", ["a{b}c"] ] + ].forEach(function (tc) { + var p = tc[0] + , expect = tc[1] + t.equivalent(minimatch.braceExpand(p), expect, p) + }) + console.error("ending") + t.end() +}) + + diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/caching.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/caching.js new file mode 100644 index 0000000..0fec4b0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/caching.js @@ -0,0 +1,14 @@ +var Minimatch = require("../minimatch.js").Minimatch +var tap = require("tap") +tap.test("cache test", function (t) { + var mm1 = new Minimatch("a?b") + var mm2 = new Minimatch("a?b") + t.equal(mm1, mm2, "should get the same object") + // the lru should drop it after 100 entries + for (var i = 0; i < 100; i ++) { + new Minimatch("a"+i) + } + mm2 = new Minimatch("a?b") + t.notEqual(mm1, mm2, "cache should have dropped") + t.end() +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/defaults.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/defaults.js new file mode 100644 index 0000000..75e0571 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/defaults.js @@ -0,0 +1,274 @@ +// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test +// +// TODO: Some of these tests do very bad things with backslashes, and will +// most likely fail badly on windows. They should probably be skipped. + +var tap = require("tap") + , globalBefore = Object.keys(global) + , mm = require("../") + , files = [ "a", "b", "c", "d", "abc" + , "abd", "abe", "bb", "bcd" + , "ca", "cb", "dd", "de" + , "bdir/", "bdir/cfile"] + , next = files.concat([ "a-b", "aXb" + , ".x", ".y" ]) + +tap.test("basic tests", function (t) { + var start = Date.now() + + // [ pattern, [matches], MM opts, files, TAP opts] + ; [ "http://www.bashcookbook.com/bashinfo" + + "/source/bash-1.14.7/tests/glob-test" + , ["a*", ["a", "abc", "abd", "abe"]] + , ["X*", ["X*"], {nonull: true}] + + // allow null glob expansion + , ["X*", []] + + // isaacs: Slightly different than bash/sh/ksh + // \\* is not un-escaped to literal "*" in a failed match, + // but it does make it get treated as a literal star + , ["\\*", ["\\*"], {nonull: true}] + , ["\\**", ["\\**"], {nonull: true}] + , ["\\*\\*", ["\\*\\*"], {nonull: true}] + + , ["b*/", ["bdir/"]] + , ["c*", ["c", "ca", "cb"]] + , ["**", files] + + , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] + , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] + + , "legendary larry crashes bashes" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" + , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] + + , "character classes" + , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] + , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", + "bdir/", "ca", "cb", "dd", "de"]] + , ["a*[^c]", ["abd", "abe"]] + , function () { files.push("a-b", "aXb") } + , ["a[X-]b", ["a-b", "aXb"]] + , function () { files.push(".x", ".y") } + , ["[^a-c]*", ["d", "dd", "de"]] + , function () { files.push("a*b/", "a*b/ooo") } + , ["a\\*b/*", ["a*b/ooo"]] + , ["a\\*?/*", ["a*b/ooo"]] + , ["*\\\\!*", [], {null: true}, ["echo !7"]] + , ["*\\!*", ["echo !7"], null, ["echo !7"]] + , ["*.\\*", ["r.*"], null, ["r.*"]] + , ["a[b]c", ["abc"]] + , ["a[\\b]c", ["abc"]] + , ["a?c", ["abc"]] + , ["a\\*c", [], {null: true}, ["abc"]] + , ["", [""], { null: true }, [""]] + + , "http://www.opensource.apple.com/source/bash/bash-23/" + + "bash/tests/glob-test" + , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } + , ["*/man*/bash.*", ["man/man1/bash.1"]] + , ["man/man1/bash.1", ["man/man1/bash.1"]] + , ["a***c", ["abc"], null, ["abc"]] + , ["a*****?c", ["abc"], null, ["abc"]] + , ["?*****??", ["abc"], null, ["abc"]] + , ["*****??", ["abc"], null, ["abc"]] + , ["?*****?c", ["abc"], null, ["abc"]] + , ["?***?****c", ["abc"], null, ["abc"]] + , ["?***?****?", ["abc"], null, ["abc"]] + , ["?***?****", ["abc"], null, ["abc"]] + , ["*******c", ["abc"], null, ["abc"]] + , ["*******?", ["abc"], null, ["abc"]] + , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] + , ["[-abc]", ["-"], null, ["-"]] + , ["[abc-]", ["-"], null, ["-"]] + , ["\\", ["\\"], null, ["\\"]] + , ["[\\\\]", ["\\"], null, ["\\"]] + , ["[[]", ["["], null, ["["]] + , ["[", ["["], null, ["["]] + , ["[*", ["[abc"], null, ["[abc"]] + , "a right bracket shall lose its special meaning and\n" + + "represent itself in a bracket expression if it occurs\n" + + "first in the list. -- POSIX.2 2.8.3.2" + , ["[]]", ["]"], null, ["]"]] + , ["[]-]", ["]"], null, ["]"]] + , ["[a-\z]", ["p"], null, ["p"]] + , ["??**********?****?", [], { null: true }, ["abc"]] + , ["??**********?****c", [], { null: true }, ["abc"]] + , ["?************c****?****", [], { null: true }, ["abc"]] + , ["*c*?**", [], { null: true }, ["abc"]] + , ["a*****c*?**", [], { null: true }, ["abc"]] + , ["a********???*******", [], { null: true }, ["abc"]] + , ["[]", [], { null: true }, ["a"]] + , ["[abc", [], { null: true }, ["["]] + + , "nocase tests" + , ["XYZ", ["xYz"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + , ["ab*", ["ABC"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } + , ["xYz", "ABC", "IjK"]] + + // [ pattern, [matches], MM opts, files, TAP opts] + , "onestar/twostar" + , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] + , ["{/?,*}", ["/a", "bb"], {null: true} + , ["/a", "/b/b", "/a/b/c", "bb"]] + + , "dots should not match unless requested" + , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] + + // .. and . can only match patterns starting with ., + // even when options.dot is set. + , function () { + files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] + } + , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] + , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] + , ["a/*/b", ["a/c/b"], {dot:false}] + , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] + + + // this also tests that changing the options needs + // to change the cache key, even if the pattern is + // the same! + , ["**", ["a/b","a/.d",".a/.d"], { dot: true } + , [ ".a/.d", "a/.d", "a/b"]] + + , "paren sets cannot contain slashes" + , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] + + // brace sets trump all else. + // + // invalid glob pattern. fails on bash4 and bsdglob. + // however, in this implementation, it's easier just + // to do the intuitive thing, and let brace-expansion + // actually come before parsing any extglob patterns, + // like the documentation seems to say. + // + // XXX: if anyone complains about this, either fix it + // or tell them to grow up and stop complaining. + // + // bash/bsdglob says this: + // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] + // but we do this instead: + , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] + + // test partial parsing in the presence of comment/negation chars + , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] + , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] + + // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. + , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" + , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] + , {} + , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] + + + // crazy nested {,,} and *(||) tests. + , function () { + files = [ "a", "b", "c", "d" + , "ab", "ac", "ad" + , "bc", "cb" + , "bc,d", "c,db", "c,d" + , "d)", "(b|c", "*(b|c" + , "b|c", "b|cc", "cb|c" + , "x(a|b|c)", "x(a|c)" + , "(a|b|c)", "(a|c)"] + } + , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] + , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] + // a + // *(b|c) + // *(b|d) + , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] + , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] + + + // test various flag settings. + , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] + , { noext: true } ] + , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} + , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] + , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] + + + // begin channelling Boole and deMorgan... + , "negation tests" + , function () { + files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] + } + + // anything that is NOT a* matches. + , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] + + // anything that IS !a* matches. + , ["!a*", ["!ab", "!abc"], {nonegate: true}] + + // anything that IS a* matches + , ["!!a*", ["a!b"]] + + // anything that is NOT !a* matches + , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] + + // negation nestled within a pattern + , function () { + files = [ "foo.js" + , "foo.bar" + // can't match this one without negative lookbehind. + , "foo.js.js" + , "blar.js" + , "foo." + , "boo.js.boo" ] + } + , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] + + ].forEach(function (c) { + if (typeof c === "function") return c() + if (typeof c === "string") return t.comment(c) + + var pattern = c[0] + , expect = c[1].sort(alpha) + , options = c[2] + , f = c[3] || files + , tapOpts = c[4] || {} + + // options.debug = true + var Class = mm.defaults(options).Minimatch + var m = new Class(pattern, {}) + var r = m.makeRe() + tapOpts.re = String(r) || JSON.stringify(r) + tapOpts.files = JSON.stringify(f) + tapOpts.pattern = pattern + tapOpts.set = m.set + tapOpts.negated = m.negate + + var actual = mm.match(f, pattern, options) + actual.sort(alpha) + + t.equivalent( actual, expect + , JSON.stringify(pattern) + " " + JSON.stringify(expect) + , tapOpts ) + }) + + t.comment("time=" + (Date.now() - start) + "ms") + t.end() +}) + +tap.test("global leak test", function (t) { + var globalAfter = Object.keys(global) + t.equivalent(globalAfter, globalBefore, "no new globals, please") + t.end() +}) + +function alpha (a, b) { + return a > b ? 1 : -1 +} diff --git a/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/extglob-ending-with-state-char.js b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/extglob-ending-with-state-char.js new file mode 100644 index 0000000..6676e26 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/node_modules/minimatch/test/extglob-ending-with-state-char.js @@ -0,0 +1,8 @@ +var test = require('tap').test +var minimatch = require('../') + +test('extglob ending with statechar', function(t) { + t.notOk(minimatch('ax', 'a?(b*)')) + t.ok(minimatch('ax', '?(a*|b)')) + t.end() +}) diff --git a/platforms/android/assets/www/node_modules/jasmine/package.json b/platforms/android/assets/www/node_modules/jasmine/package.json new file mode 100644 index 0000000..5b20c3a --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + "jasmine", + "/Users/adamdon/Desktop/studywell/studywell/sw/www" + ] + ], + "_from": "jasmine@latest", + "_id": "jasmine@2.4.1", + "_inCache": true, + "_installable": true, + "_location": "/jasmine", + "_nodeVersion": "0.12.7", + "_npmUser": { + "email": "gregg@slackersoft.net", + "name": "slackersoft" + }, + "_npmVersion": "2.12.1", + "_phantomChildren": { + "inherits": "2.0.1", + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + }, + "_requested": { + "name": "jasmine", + "raw": "jasmine", + "rawSpec": "", + "scope": null, + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.4.1.tgz", + "_shasum": "9016dda453213d27ac6d43dc4ea97315a189085e", + "_shrinkwrap": null, + "_spec": "jasmine", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www", + "bin": { + "jasmine": "./bin/jasmine.js" + }, + "bugs": { + "url": "https://github.com/jasmine/jasmine-npm/issues" + }, + "dependencies": { + "exit": "^0.1.2", + "glob": "^3.2.11", + "jasmine-core": "~2.4.0" + }, + "description": "Command line jasmine", + "devDependencies": { + "grunt": "^0.4.2", + "grunt-cli": "^0.1.13", + "grunt-contrib-jshint": "^0.11.0", + "shelljs": "^0.3.0" + }, + "directories": {}, + "dist": { + "shasum": "9016dda453213d27ac6d43dc4ea97315a189085e", + "tarball": "http://registry.npmjs.org/jasmine/-/jasmine-2.4.1.tgz" + }, + "gitHead": "17344da242f81c61e4d19a895960bf9414fae07d", + "homepage": "http://jasmine.github.io/", + "keywords": [ + "test", + "jasmine", + "tdd", + "bdd" + ], + "license": "MIT", + "main": "./lib/jasmine.js", + "maintainers": [ + { + "email": "gregg@slackersoft.net", + "name": "slackersoft" + }, + { + "email": "dwfrank@pivotallabs.com", + "name": "dwfrank" + }, + { + "email": "chris.amavisca@gmail.com", + "name": "amavisca" + } + ], + "name": "jasmine", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jasmine/jasmine-npm.git" + }, + "scripts": { + "test": "grunt && ./bin/jasmine.js" + }, + "version": "2.4.1" +} diff --git a/platforms/android/assets/www/node_modules/jasmine/tasks/jasmine.js b/platforms/android/assets/www/node_modules/jasmine/tasks/jasmine.js new file mode 100644 index 0000000..b137c18 --- /dev/null +++ b/platforms/android/assets/www/node_modules/jasmine/tasks/jasmine.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports = function(grunt) { + var Jasmine = require('../lib/jasmine'); + + grunt.registerTask('specs', function() { + var jasmine = new Jasmine(); + var done = this.async(); + + jasmine.loadConfigFile(process.env.JASMINE_CONFIG_PATH || './spec/support/jasmine.json'); + jasmine.onComplete(done); + jasmine.execute(); + }); +}; diff --git a/platforms/android/assets/www/node_modules/lodash/LICENSE b/platforms/android/assets/www/node_modules/lodash/LICENSE new file mode 100644 index 0000000..bcbe13d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/LICENSE @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright 2012-2016 The Dojo Foundation +Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/lodash/README.md b/platforms/android/assets/www/node_modules/lodash/README.md new file mode 100644 index 0000000..56a419b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/README.md @@ -0,0 +1,40 @@ +# lodash v4.6.1 + +The [lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. + +## Installation + +Using npm: +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash +``` + +In Node.js: +```js +// Load the full build. +var _ = require('lodash'); +// Load the core build. +var _ = require('lodash/core'); +// Load the fp build for immutable auto-curried iteratee-first data-last methods. +var _ = require('lodash/fp'); + +// Load a method category. +var array = require('lodash/array'); +var object = require('lodash/fp/object'); + +// Load a single method for smaller builds with browserify/rollup/webpack. +var chunk = require('lodash/chunk'); +var extend = require('lodash/fp/extend'); +``` + +See the [package source](https://github.com/lodash/lodash/tree/4.6.1-npm) for more details. + +**Note:**
      +Don’t assign values to the [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL.
      +Install [n_](https://www.npmjs.com/package/n_) for a REPL that includes lodash by default. + +## Support + +Tested in Chrome 47-48, Firefox 43-44, IE 9-11, Edge 13, Safari 8-9, Node.js 0.10, 0.12, 4, & 5, & PhantomJS 1.9.8.
      +Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/platforms/android/assets/www/node_modules/lodash/_Hash.js b/platforms/android/assets/www/node_modules/lodash/_Hash.js new file mode 100644 index 0000000..8647d16 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_Hash.js @@ -0,0 +1,18 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Creates an hash object. + * + * @private + * @constructor + * @returns {Object} Returns the new hash object. + */ +function Hash() {} + +// Avoid inheriting from `Object.prototype` when possible. +Hash.prototype = nativeCreate ? nativeCreate(null) : objectProto; + +module.exports = Hash; diff --git a/platforms/android/assets/www/node_modules/lodash/_LazyWrapper.js b/platforms/android/assets/www/node_modules/lodash/_LazyWrapper.js new file mode 100644 index 0000000..ad01ef8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_LazyWrapper.js @@ -0,0 +1,27 @@ +var baseCreate = require('./_baseCreate'), + baseLodash = require('./_baseLodash'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ +function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; +} + +LazyWrapper.prototype = baseCreate(baseLodash.prototype); +LazyWrapper.prototype.constructor = LazyWrapper; + +module.exports = LazyWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_LodashWrapper.js b/platforms/android/assets/www/node_modules/lodash/_LodashWrapper.js new file mode 100644 index 0000000..7c255b2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_LodashWrapper.js @@ -0,0 +1,22 @@ +var baseCreate = require('./_baseCreate'), + baseLodash = require('./_baseLodash'); + +/** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + */ +function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; +} + +LodashWrapper.prototype = baseCreate(baseLodash.prototype); +LodashWrapper.prototype.constructor = LodashWrapper; + +module.exports = LodashWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_Map.js b/platforms/android/assets/www/node_modules/lodash/_Map.js new file mode 100644 index 0000000..b73f29a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_Map.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; diff --git a/platforms/android/assets/www/node_modules/lodash/_MapCache.js b/platforms/android/assets/www/node_modules/lodash/_MapCache.js new file mode 100644 index 0000000..2652843 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_MapCache.js @@ -0,0 +1,32 @@ +var mapClear = require('./_mapClear'), + mapDelete = require('./_mapDelete'), + mapGet = require('./_mapGet'), + mapHas = require('./_mapHas'), + mapSet = require('./_mapSet'); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function MapCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.clear(); + while (++index < length) { + var entry = values[index]; + this.set(entry[0], entry[1]); + } +} + +// Add functions to the `MapCache`. +MapCache.prototype.clear = mapClear; +MapCache.prototype['delete'] = mapDelete; +MapCache.prototype.get = mapGet; +MapCache.prototype.has = mapHas; +MapCache.prototype.set = mapSet; + +module.exports = MapCache; diff --git a/platforms/android/assets/www/node_modules/lodash/_Reflect.js b/platforms/android/assets/www/node_modules/lodash/_Reflect.js new file mode 100644 index 0000000..1de7475 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_Reflect.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Reflect = root.Reflect; + +module.exports = Reflect; diff --git a/platforms/android/assets/www/node_modules/lodash/_Set.js b/platforms/android/assets/www/node_modules/lodash/_Set.js new file mode 100644 index 0000000..b3c8dcb --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_Set.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); + +module.exports = Set; diff --git a/platforms/android/assets/www/node_modules/lodash/_SetCache.js b/platforms/android/assets/www/node_modules/lodash/_SetCache.js new file mode 100644 index 0000000..5d9d620 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_SetCache.js @@ -0,0 +1,25 @@ +var MapCache = require('./_MapCache'), + cachePush = require('./_cachePush'); + +/** + * + * Creates a set cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.__data__ = new MapCache; + while (++index < length) { + this.push(values[index]); + } +} + +// Add functions to the `SetCache`. +SetCache.prototype.push = cachePush; + +module.exports = SetCache; diff --git a/platforms/android/assets/www/node_modules/lodash/_Stack.js b/platforms/android/assets/www/node_modules/lodash/_Stack.js new file mode 100644 index 0000000..345577e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_Stack.js @@ -0,0 +1,32 @@ +var stackClear = require('./_stackClear'), + stackDelete = require('./_stackDelete'), + stackGet = require('./_stackGet'), + stackHas = require('./_stackHas'), + stackSet = require('./_stackSet'); + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function Stack(values) { + var index = -1, + length = values ? values.length : 0; + + this.clear(); + while (++index < length) { + var entry = values[index]; + this.set(entry[0], entry[1]); + } +} + +// Add functions to the `Stack` cache. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +module.exports = Stack; diff --git a/platforms/android/assets/www/node_modules/lodash/_Symbol.js b/platforms/android/assets/www/node_modules/lodash/_Symbol.js new file mode 100644 index 0000000..a013f7c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_Symbol.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; diff --git a/platforms/android/assets/www/node_modules/lodash/_Uint8Array.js b/platforms/android/assets/www/node_modules/lodash/_Uint8Array.js new file mode 100644 index 0000000..2fb30e1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_Uint8Array.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; diff --git a/platforms/android/assets/www/node_modules/lodash/_WeakMap.js b/platforms/android/assets/www/node_modules/lodash/_WeakMap.js new file mode 100644 index 0000000..567f86c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_WeakMap.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); + +module.exports = WeakMap; diff --git a/platforms/android/assets/www/node_modules/lodash/_addMapEntry.js b/platforms/android/assets/www/node_modules/lodash/_addMapEntry.js new file mode 100644 index 0000000..0112ef7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_addMapEntry.js @@ -0,0 +1,15 @@ +/** + * Adds the key-value `pair` to `map`. + * + * @private + * @param {Object} map The map to modify. + * @param {Array} pair The key-value pair to add. + * @returns {Object} Returns `map`. + */ +function addMapEntry(map, pair) { + // Don't return `Map#set` because it doesn't return the map instance in IE 11. + map.set(pair[0], pair[1]); + return map; +} + +module.exports = addMapEntry; diff --git a/platforms/android/assets/www/node_modules/lodash/_addSetEntry.js b/platforms/android/assets/www/node_modules/lodash/_addSetEntry.js new file mode 100644 index 0000000..7b75c13 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_addSetEntry.js @@ -0,0 +1,14 @@ +/** + * Adds `value` to `set`. + * + * @private + * @param {Object} set The set to modify. + * @param {*} value The value to add. + * @returns {Object} Returns `set`. + */ +function addSetEntry(set, value) { + set.add(value); + return set; +} + +module.exports = addSetEntry; diff --git a/platforms/android/assets/www/node_modules/lodash/_apply.js b/platforms/android/assets/www/node_modules/lodash/_apply.js new file mode 100644 index 0000000..22d4f8a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_apply.js @@ -0,0 +1,22 @@ +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + var length = args.length; + switch (length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +module.exports = apply; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayAggregator.js b/platforms/android/assets/www/node_modules/lodash/_arrayAggregator.js new file mode 100644 index 0000000..562eeb3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayAggregator.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; +} + +module.exports = arrayAggregator; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayConcat.js b/platforms/android/assets/www/node_modules/lodash/_arrayConcat.js new file mode 100644 index 0000000..96e7741 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayConcat.js @@ -0,0 +1,25 @@ +/** + * Creates a new array concatenating `array` with `other`. + * + * @private + * @param {Array} array The first array to concatenate. + * @param {Array} other The second array to concatenate. + * @returns {Array} Returns the new concatenated array. + */ +function arrayConcat(array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength); + + while (++index < length) { + result[index] = array[index]; + } + while (++othIndex < othLength) { + result[index++] = other[othIndex]; + } + return result; +} + +module.exports = arrayConcat; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayEach.js b/platforms/android/assets/www/node_modules/lodash/_arrayEach.js new file mode 100644 index 0000000..c302e63 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayEach.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayEachRight.js b/platforms/android/assets/www/node_modules/lodash/_arrayEachRight.js new file mode 100644 index 0000000..5318585 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayEachRight.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEachRight(array, iteratee) { + var length = array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEachRight; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayEvery.js b/platforms/android/assets/www/node_modules/lodash/_arrayEvery.js new file mode 100644 index 0000000..d3ba018 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayEvery.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + */ +function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; +} + +module.exports = arrayEvery; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayFilter.js b/platforms/android/assets/www/node_modules/lodash/_arrayFilter.js new file mode 100644 index 0000000..7b61ba6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayFilter.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = arrayFilter; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayIncludes.js b/platforms/android/assets/www/node_modules/lodash/_arrayIncludes.js new file mode 100644 index 0000000..9574f5d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayIncludes.js @@ -0,0 +1,16 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} array The array to search. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + return !!array.length && baseIndexOf(array, value, 0) > -1; +} + +module.exports = arrayIncludes; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayIncludesWith.js b/platforms/android/assets/www/node_modules/lodash/_arrayIncludesWith.js new file mode 100644 index 0000000..88ea237 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayIncludesWith.js @@ -0,0 +1,22 @@ +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to search. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +module.exports = arrayIncludesWith; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayMap.js b/platforms/android/assets/www/node_modules/lodash/_arrayMap.js new file mode 100644 index 0000000..73b29cf --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayMap.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayPush.js b/platforms/android/assets/www/node_modules/lodash/_arrayPush.js new file mode 100644 index 0000000..7d742b3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayPush.js @@ -0,0 +1,20 @@ +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +module.exports = arrayPush; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayReduce.js b/platforms/android/assets/www/node_modules/lodash/_arrayReduce.js new file mode 100644 index 0000000..6a355bc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayReduce.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +module.exports = arrayReduce; diff --git a/platforms/android/assets/www/node_modules/lodash/_arrayReduceRight.js b/platforms/android/assets/www/node_modules/lodash/_arrayReduceRight.js new file mode 100644 index 0000000..b33a2d0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arrayReduceRight.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; +} + +module.exports = arrayReduceRight; diff --git a/platforms/android/assets/www/node_modules/lodash/_arraySome.js b/platforms/android/assets/www/node_modules/lodash/_arraySome.js new file mode 100644 index 0000000..b93d531 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_arraySome.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; diff --git a/platforms/android/assets/www/node_modules/lodash/_assignInDefaults.js b/platforms/android/assets/www/node_modules/lodash/_assignInDefaults.js new file mode 100644 index 0000000..ea6b0e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_assignInDefaults.js @@ -0,0 +1,27 @@ +var eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used by `_.defaults` to customize its `_.assignIn` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ +function assignInDefaults(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; +} + +module.exports = assignInDefaults; diff --git a/platforms/android/assets/www/node_modules/lodash/_assignMergeValue.js b/platforms/android/assets/www/node_modules/lodash/_assignMergeValue.js new file mode 100644 index 0000000..61dd583 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_assignMergeValue.js @@ -0,0 +1,19 @@ +var eq = require('./eq'); + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (typeof key == 'number' && value === undefined && !(key in object))) { + object[key] = value; + } +} + +module.exports = assignMergeValue; diff --git a/platforms/android/assets/www/node_modules/lodash/_assignValue.js b/platforms/android/assets/www/node_modules/lodash/_assignValue.js new file mode 100644 index 0000000..35d49f0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_assignValue.js @@ -0,0 +1,27 @@ +var eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } +} + +module.exports = assignValue; diff --git a/platforms/android/assets/www/node_modules/lodash/_assocDelete.js b/platforms/android/assets/www/node_modules/lodash/_assocDelete.js new file mode 100644 index 0000000..709a04a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_assocDelete.js @@ -0,0 +1,31 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the associative array. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function assocDelete(array, key) { + var index = assocIndexOf(array, key); + if (index < 0) { + return false; + } + var lastIndex = array.length - 1; + if (index == lastIndex) { + array.pop(); + } else { + splice.call(array, index, 1); + } + return true; +} + +module.exports = assocDelete; diff --git a/platforms/android/assets/www/node_modules/lodash/_assocGet.js b/platforms/android/assets/www/node_modules/lodash/_assocGet.js new file mode 100644 index 0000000..e53d332 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_assocGet.js @@ -0,0 +1,16 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Gets the associative array value for `key`. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function assocGet(array, key) { + var index = assocIndexOf(array, key); + return index < 0 ? undefined : array[index][1]; +} + +module.exports = assocGet; diff --git a/platforms/android/assets/www/node_modules/lodash/_assocHas.js b/platforms/android/assets/www/node_modules/lodash/_assocHas.js new file mode 100644 index 0000000..a74bd39 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_assocHas.js @@ -0,0 +1,15 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Checks if an associative array value for `key` exists. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function assocHas(array, key) { + return assocIndexOf(array, key) > -1; +} + +module.exports = assocHas; diff --git a/platforms/android/assets/www/node_modules/lodash/_assocIndexOf.js b/platforms/android/assets/www/node_modules/lodash/_assocIndexOf.js new file mode 100644 index 0000000..958c8d8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_assocIndexOf.js @@ -0,0 +1,22 @@ +var eq = require('./eq'); + +/** + * Gets the index at which the first occurrence of `key` is found in `array` + * of key-value pairs. + * + * @private + * @param {Array} array The array to search. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; diff --git a/platforms/android/assets/www/node_modules/lodash/_assocSet.js b/platforms/android/assets/www/node_modules/lodash/_assocSet.js new file mode 100644 index 0000000..524f341 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_assocSet.js @@ -0,0 +1,20 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Sets the associative array `key` to `value`. + * + * @private + * @param {Array} array The array to modify. + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + */ +function assocSet(array, key, value) { + var index = assocIndexOf(array, key); + if (index < 0) { + array.push([key, value]); + } else { + array[index][1] = value; + } +} + +module.exports = assocSet; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseAggregator.js b/platforms/android/assets/www/node_modules/lodash/_baseAggregator.js new file mode 100644 index 0000000..4bc9e91 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseAggregator.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; +} + +module.exports = baseAggregator; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseAssign.js b/platforms/android/assets/www/node_modules/lodash/_baseAssign.js new file mode 100644 index 0000000..e5c4a1a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseAssign.js @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), + keys = require('./keys'); + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); +} + +module.exports = baseAssign; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseAt.js b/platforms/android/assets/www/node_modules/lodash/_baseAt.js new file mode 100644 index 0000000..a077cb9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseAt.js @@ -0,0 +1,23 @@ +var get = require('./get'); + +/** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths of elements to pick. + * @returns {Array} Returns the new array of picked elements. + */ +function baseAt(object, paths) { + var index = -1, + isNil = object == null, + length = paths.length, + result = Array(length); + + while (++index < length) { + result[index] = isNil ? undefined : get(object, paths[index]); + } + return result; +} + +module.exports = baseAt; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseCastArrayLikeObject.js b/platforms/android/assets/www/node_modules/lodash/_baseCastArrayLikeObject.js new file mode 100644 index 0000000..17c0c86 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseCastArrayLikeObject.js @@ -0,0 +1,14 @@ +var isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ +function baseCastArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; +} + +module.exports = baseCastArrayLikeObject; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseCastFunction.js b/platforms/android/assets/www/node_modules/lodash/_baseCastFunction.js new file mode 100644 index 0000000..b3d0f72 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseCastFunction.js @@ -0,0 +1,14 @@ +var identity = require('./identity'); + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ +function baseCastFunction(value) { + return typeof value == 'function' ? value : identity; +} + +module.exports = baseCastFunction; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseCastPath.js b/platforms/android/assets/www/node_modules/lodash/_baseCastPath.js new file mode 100644 index 0000000..7634e5b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseCastPath.js @@ -0,0 +1,15 @@ +var isArray = require('./isArray'), + stringToPath = require('./_stringToPath'); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function baseCastPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +module.exports = baseCastPath; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseClamp.js b/platforms/android/assets/www/node_modules/lodash/_baseClamp.js new file mode 100644 index 0000000..ceadeef --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseClamp.js @@ -0,0 +1,22 @@ +/** + * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ +function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; +} + +module.exports = baseClamp; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseClone.js b/platforms/android/assets/www/node_modules/lodash/_baseClone.js new file mode 100644 index 0000000..b3f106e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseClone.js @@ -0,0 +1,131 @@ +var Stack = require('./_Stack'), + arrayEach = require('./_arrayEach'), + assignValue = require('./_assignValue'), + baseAssign = require('./_baseAssign'), + baseForOwn = require('./_baseForOwn'), + cloneBuffer = require('./_cloneBuffer'), + copyArray = require('./_copyArray'), + copySymbols = require('./_copySymbols'), + getTag = require('./_getTag'), + initCloneArray = require('./_initCloneArray'), + initCloneByTag = require('./_initCloneByTag'), + initCloneObject = require('./_initCloneObject'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isHostObject = require('./_isHostObject'), + isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = +cloneableTags[dateTag] = cloneableTags[float32Tag] = +cloneableTags[float64Tag] = cloneableTags[int8Tag] = +cloneableTags[int16Tag] = cloneableTags[int32Tag] = +cloneableTags[mapTag] = cloneableTags[numberTag] = +cloneableTags[objectTag] = cloneableTags[regexpTag] = +cloneableTags[setTag] = cloneableTags[stringTag] = +cloneableTags[symbolTag] = cloneableTags[uint8Tag] = +cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = +cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {boolean} [isFull] Specify a clone including symbols. + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, isDeep, isFull, customizer, key, object, stack) { + var result; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + if (isHostObject(value)) { + return object ? value : {}; + } + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + result = baseAssign(result, value); + return isFull ? copySymbols(value, result) : result; + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); + }); + return (isFull && !isArr) ? copySymbols(value, result) : result; +} + +module.exports = baseClone; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseConforms.js b/platforms/android/assets/www/node_modules/lodash/_baseConforms.js new file mode 100644 index 0000000..888434d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseConforms.js @@ -0,0 +1,32 @@ +var keys = require('./keys'); + +/** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new function. + */ +function baseConforms(source) { + var props = keys(source), + length = props.length; + + return function(object) { + if (object == null) { + return !length; + } + var index = length; + while (index--) { + var key = props[index], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in Object(object))) || !predicate(value)) { + return false; + } + } + return true; + }; +} + +module.exports = baseConforms; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseCreate.js b/platforms/android/assets/www/node_modules/lodash/_baseCreate.js new file mode 100644 index 0000000..4372cad --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseCreate.js @@ -0,0 +1,18 @@ +var isObject = require('./isObject'); + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ +function baseCreate(proto) { + return isObject(proto) ? objectCreate(proto) : {}; +} + +module.exports = baseCreate; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseDelay.js b/platforms/android/assets/www/node_modules/lodash/_baseDelay.js new file mode 100644 index 0000000..c397562 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseDelay.js @@ -0,0 +1,21 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The base implementation of `_.delay` and `_.defer` which accepts an array + * of `func` arguments. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments to provide to `func`. + * @returns {number} Returns the timer id. + */ +function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); +} + +module.exports = baseDelay; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseDifference.js b/platforms/android/assets/www/node_modules/lodash/_baseDifference.js new file mode 100644 index 0000000..b266d7e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseDifference.js @@ -0,0 +1,66 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of methods like `_.difference` without support for + * excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ +function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; +} + +module.exports = baseDifference; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseEach.js b/platforms/android/assets/www/node_modules/lodash/_baseEach.js new file mode 100644 index 0000000..512c067 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseEach.js @@ -0,0 +1,14 @@ +var baseForOwn = require('./_baseForOwn'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseEachRight.js b/platforms/android/assets/www/node_modules/lodash/_baseEachRight.js new file mode 100644 index 0000000..0a8feec --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseEachRight.js @@ -0,0 +1,14 @@ +var baseForOwnRight = require('./_baseForOwnRight'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEachRight = createBaseEach(baseForOwnRight, true); + +module.exports = baseEachRight; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseEvery.js b/platforms/android/assets/www/node_modules/lodash/_baseEvery.js new file mode 100644 index 0000000..aafa00d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseEvery.js @@ -0,0 +1,20 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false` + */ +function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; +} + +module.exports = baseEvery; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseExtremum.js b/platforms/android/assets/www/node_modules/lodash/_baseExtremum.js new file mode 100644 index 0000000..c6cb804 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseExtremum.js @@ -0,0 +1,30 @@ +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? current === current + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +module.exports = baseExtremum; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseFill.js b/platforms/android/assets/www/node_modules/lodash/_baseFill.js new file mode 100644 index 0000000..46ef9c7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseFill.js @@ -0,0 +1,32 @@ +var toInteger = require('./toInteger'), + toLength = require('./toLength'); + +/** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ +function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; +} + +module.exports = baseFill; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseFilter.js b/platforms/android/assets/www/node_modules/lodash/_baseFilter.js new file mode 100644 index 0000000..4678477 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseFilter.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +module.exports = baseFilter; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseFind.js b/platforms/android/assets/www/node_modules/lodash/_baseFind.js new file mode 100644 index 0000000..535f7f3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseFind.js @@ -0,0 +1,24 @@ +/** + * The base implementation of methods like `_.find` and `_.findKey`, without + * support for iteratee shorthands, which iterates over `collection` using + * `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ +function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; +} + +module.exports = baseFind; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseFindIndex.js b/platforms/android/assets/www/node_modules/lodash/_baseFindIndex.js new file mode 100644 index 0000000..61428f6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseFindIndex.js @@ -0,0 +1,23 @@ +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to search. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +module.exports = baseFindIndex; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseFlatten.js b/platforms/android/assets/www/node_modules/lodash/_baseFlatten.js new file mode 100644 index 0000000..7d024dd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseFlatten.js @@ -0,0 +1,39 @@ +var arrayPush = require('./_arrayPush'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (depth > 0 && isArrayLikeObject(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +module.exports = baseFlatten; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseFor.js b/platforms/android/assets/www/node_modules/lodash/_baseFor.js new file mode 100644 index 0000000..97b70c9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseFor.js @@ -0,0 +1,17 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseForIn.js b/platforms/android/assets/www/node_modules/lodash/_baseForIn.js new file mode 100644 index 0000000..4dcfdaf --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseForIn.js @@ -0,0 +1,16 @@ +var baseFor = require('./_baseFor'), + keysIn = require('./keysIn'); + +/** + * The base implementation of `_.forIn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForIn(object, iteratee) { + return object == null ? object : baseFor(object, iteratee, keysIn); +} + +module.exports = baseForIn; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseForOwn.js b/platforms/android/assets/www/node_modules/lodash/_baseForOwn.js new file mode 100644 index 0000000..503d523 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseForOwn.js @@ -0,0 +1,16 @@ +var baseFor = require('./_baseFor'), + keys = require('./keys'); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseForOwnRight.js b/platforms/android/assets/www/node_modules/lodash/_baseForOwnRight.js new file mode 100644 index 0000000..a4b10e6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseForOwnRight.js @@ -0,0 +1,16 @@ +var baseForRight = require('./_baseForRight'), + keys = require('./keys'); + +/** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); +} + +module.exports = baseForOwnRight; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseForRight.js b/platforms/android/assets/www/node_modules/lodash/_baseForRight.js new file mode 100644 index 0000000..32842cd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseForRight.js @@ -0,0 +1,15 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseForRight = createBaseFor(true); + +module.exports = baseForRight; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseFunctions.js b/platforms/android/assets/www/node_modules/lodash/_baseFunctions.js new file mode 100644 index 0000000..6e1090f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseFunctions.js @@ -0,0 +1,19 @@ +var arrayFilter = require('./_arrayFilter'), + isFunction = require('./isFunction'); + +/** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ +function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); +} + +module.exports = baseFunctions; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseGet.js b/platforms/android/assets/www/node_modules/lodash/_baseGet.js new file mode 100644 index 0000000..ef9623a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseGet.js @@ -0,0 +1,24 @@ +var baseCastPath = require('./_baseCastPath'), + isKey = require('./_isKey'); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseHas.js b/platforms/android/assets/www/node_modules/lodash/_baseHas.js new file mode 100644 index 0000000..b393206 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseHas.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var getPrototypeOf = Object.getPrototypeOf; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`, + // that are composed entirely of index properties, return `false` for + // `hasOwnProperty` checks of them. + return hasOwnProperty.call(object, key) || + (typeof object == 'object' && key in object && getPrototypeOf(object) === null); +} + +module.exports = baseHas; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseHasIn.js b/platforms/android/assets/www/node_modules/lodash/_baseHasIn.js new file mode 100644 index 0000000..4a36558 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseHasIn.js @@ -0,0 +1,13 @@ +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return key in Object(object); +} + +module.exports = baseHasIn; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseInRange.js b/platforms/android/assets/www/node_modules/lodash/_baseInRange.js new file mode 100644 index 0000000..16d53f2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseInRange.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * The base implementation of `_.inRange` which doesn't coerce arguments to numbers. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ +function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); +} + +module.exports = baseInRange; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseIndexOf.js b/platforms/android/assets/www/node_modules/lodash/_baseIndexOf.js new file mode 100644 index 0000000..6cda802 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseIndexOf.js @@ -0,0 +1,27 @@ +var indexOfNaN = require('./_indexOfNaN'); + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = baseIndexOf; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseIndexOfWith.js b/platforms/android/assets/www/node_modules/lodash/_baseIndexOfWith.js new file mode 100644 index 0000000..8be568a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseIndexOfWith.js @@ -0,0 +1,23 @@ +/** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; +} + +module.exports = baseIndexOfWith; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseIntersection.js b/platforms/android/assets/www/node_modules/lodash/_baseIntersection.js new file mode 100644 index 0000000..7d12926 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseIntersection.js @@ -0,0 +1,73 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ +function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseIntersection; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseInverter.js b/platforms/android/assets/www/node_modules/lodash/_baseInverter.js new file mode 100644 index 0000000..fbc337f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseInverter.js @@ -0,0 +1,21 @@ +var baseForOwn = require('./_baseForOwn'); + +/** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ +function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; +} + +module.exports = baseInverter; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseInvoke.js b/platforms/android/assets/www/node_modules/lodash/_baseInvoke.js new file mode 100644 index 0000000..7a94a3f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseInvoke.js @@ -0,0 +1,27 @@ +var apply = require('./_apply'), + baseCastPath = require('./_baseCastPath'), + isKey = require('./_isKey'), + last = require('./last'), + parent = require('./_parent'); + +/** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ +function baseInvoke(object, path, args) { + if (!isKey(path, object)) { + path = baseCastPath(path); + object = parent(object, path); + path = last(path); + } + var func = object == null ? object : object[path]; + return func == null ? undefined : apply(func, object, args); +} + +module.exports = baseInvoke; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseIsEqual.js b/platforms/android/assets/www/node_modules/lodash/_baseIsEqual.js new file mode 100644 index 0000000..3772dab --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseIsEqual.js @@ -0,0 +1,30 @@ +var baseIsEqualDeep = require('./_baseIsEqualDeep'), + isObject = require('./isObject'), + isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); +} + +module.exports = baseIsEqual; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseIsEqualDeep.js b/platforms/android/assets/www/node_modules/lodash/_baseIsEqualDeep.js new file mode 100644 index 0000000..50bb411 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseIsEqualDeep.js @@ -0,0 +1,78 @@ +var Stack = require('./_Stack'), + equalArrays = require('./_equalArrays'), + equalByTag = require('./_equalByTag'), + equalObjects = require('./_equalObjects'), + getTag = require('./_getTag'), + isArray = require('./isArray'), + isHostObject = require('./_isHostObject'), + isTypedArray = require('./isTypedArray'); + +/** Used to compose bitmasks for comparison styles. */ +var PARTIAL_COMPARE_FLAG = 2; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = getTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = getTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + stack || (stack = new Stack); + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, equalFunc, customizer, bitmask, stack); +} + +module.exports = baseIsEqualDeep; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseIsMatch.js b/platforms/android/assets/www/node_modules/lodash/_baseIsMatch.js new file mode 100644 index 0000000..c1dcafc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseIsMatch.js @@ -0,0 +1,61 @@ +var Stack = require('./_Stack'), + baseIsEqual = require('./_baseIsEqual'); + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack, + result = customizer ? customizer(objValue, srcValue, key, object, source, stack) : undefined; + + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) + : result + )) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseIteratee.js b/platforms/android/assets/www/node_modules/lodash/_baseIteratee.js new file mode 100644 index 0000000..19531af --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseIteratee.js @@ -0,0 +1,30 @@ +var baseMatches = require('./_baseMatches'), + baseMatchesProperty = require('./_baseMatchesProperty'), + identity = require('./identity'), + isArray = require('./isArray'), + property = require('./property'); + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + var type = typeof value; + if (type == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (type == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +module.exports = baseIteratee; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseKeys.js b/platforms/android/assets/www/node_modules/lodash/_baseKeys.js new file mode 100644 index 0000000..2c8ccb9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseKeys.js @@ -0,0 +1,16 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = Object.keys; + +/** + * The base implementation of `_.keys` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + return nativeKeys(Object(object)); +} + +module.exports = baseKeys; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseKeysIn.js b/platforms/android/assets/www/node_modules/lodash/_baseKeysIn.js new file mode 100644 index 0000000..7455fd8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseKeysIn.js @@ -0,0 +1,36 @@ +var Reflect = require('./_Reflect'), + iteratorToArray = require('./_iteratorToArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var enumerate = Reflect ? Reflect.enumerate : undefined, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * The base implementation of `_.keysIn` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + object = object == null ? object : Object(object); + + var result = []; + for (var key in object) { + result.push(key); + } + return result; +} + +// Fallback for IE < 9 with es6-shim. +if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { + baseKeysIn = function(object) { + return iteratorToArray(enumerate(object)); + }; +} + +module.exports = baseKeysIn; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseLodash.js b/platforms/android/assets/www/node_modules/lodash/_baseLodash.js new file mode 100644 index 0000000..15b79d3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseLodash.js @@ -0,0 +1,10 @@ +/** + * The function whose prototype all chaining wrappers inherit from. + * + * @private + */ +function baseLodash() { + // No operation performed. +} + +module.exports = baseLodash; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseMap.js b/platforms/android/assets/www/node_modules/lodash/_baseMap.js new file mode 100644 index 0000000..0bf5cea --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseMap.js @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'), + isArrayLike = require('./isArrayLike'); + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +module.exports = baseMap; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseMatches.js b/platforms/android/assets/www/node_modules/lodash/_baseMatches.js new file mode 100644 index 0000000..56c72e6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseMatches.js @@ -0,0 +1,30 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && + (value !== undefined || (key in Object(object))); + }; + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +module.exports = baseMatches; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseMatchesProperty.js b/platforms/android/assets/www/node_modules/lodash/_baseMatchesProperty.js new file mode 100644 index 0000000..256ad65 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseMatchesProperty.js @@ -0,0 +1,26 @@ +var baseIsEqual = require('./_baseIsEqual'), + get = require('./get'), + hasIn = require('./hasIn'); + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new function. + */ +function baseMatchesProperty(path, srcValue) { + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); + }; +} + +module.exports = baseMatchesProperty; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseMerge.js b/platforms/android/assets/www/node_modules/lodash/_baseMerge.js new file mode 100644 index 0000000..04cda58 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseMerge.js @@ -0,0 +1,50 @@ +var Stack = require('./_Stack'), + arrayEach = require('./_arrayEach'), + assignMergeValue = require('./_assignMergeValue'), + baseMergeDeep = require('./_baseMergeDeep'), + isArray = require('./isArray'), + isObject = require('./isObject'), + isTypedArray = require('./isTypedArray'), + keysIn = require('./keysIn'); + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + var props = (isArray(source) || isTypedArray(source)) + ? undefined + : keysIn(source); + + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(object[key], srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }); +} + +module.exports = baseMerge; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseMergeDeep.js b/platforms/android/assets/www/node_modules/lodash/_baseMergeDeep.js new file mode 100644 index 0000000..1b8130a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseMergeDeep.js @@ -0,0 +1,82 @@ +var assignMergeValue = require('./_assignMergeValue'), + baseClone = require('./_baseClone'), + copyArray = require('./_copyArray'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLikeObject = require('./isArrayLikeObject'), + isFunction = require('./isFunction'), + isObject = require('./isObject'), + isPlainObject = require('./isPlainObject'), + isTypedArray = require('./isTypedArray'), + toPlainObject = require('./toPlainObject'); + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = object[key], + srcValue = source[key], + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + newValue = srcValue; + if (isArray(srcValue) || isTypedArray(srcValue)) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else { + isCommon = false; + newValue = baseClone(srcValue, !customizer); + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + isCommon = false; + newValue = baseClone(srcValue, !customizer); + } + else { + newValue = objValue; + } + } + else { + isCommon = false; + } + } + stack.set(srcValue, newValue); + + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + } + stack['delete'](srcValue); + assignMergeValue(object, key, newValue); +} + +module.exports = baseMergeDeep; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseOrderBy.js b/platforms/android/assets/www/node_modules/lodash/_baseOrderBy.js new file mode 100644 index 0000000..4dcbe38 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseOrderBy.js @@ -0,0 +1,32 @@ +var arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseMap = require('./_baseMap'), + baseSortBy = require('./_baseSortBy'), + compareMultiple = require('./_compareMultiple'); + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : Array(1), baseIteratee); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); +} + +module.exports = baseOrderBy; diff --git a/platforms/android/assets/www/node_modules/lodash/_basePick.js b/platforms/android/assets/www/node_modules/lodash/_basePick.js new file mode 100644 index 0000000..e2ce722 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_basePick.js @@ -0,0 +1,22 @@ +var arrayReduce = require('./_arrayReduce'); + +/** + * The base implementation of `_.pick` without support for individual + * property names. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, props) { + object = Object(object); + return arrayReduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); +} + +module.exports = basePick; diff --git a/platforms/android/assets/www/node_modules/lodash/_basePickBy.js b/platforms/android/assets/www/node_modules/lodash/_basePickBy.js new file mode 100644 index 0000000..37c4943 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_basePickBy.js @@ -0,0 +1,21 @@ +var baseForIn = require('./_baseForIn'); + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, predicate) { + var result = {}; + baseForIn(object, function(value, key) { + if (predicate(value, key)) { + result[key] = value; + } + }); + return result; +} + +module.exports = basePickBy; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseProperty.js b/platforms/android/assets/www/node_modules/lodash/_baseProperty.js new file mode 100644 index 0000000..e515941 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseProperty.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; diff --git a/platforms/android/assets/www/node_modules/lodash/_basePropertyDeep.js b/platforms/android/assets/www/node_modules/lodash/_basePropertyDeep.js new file mode 100644 index 0000000..acc2009 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_basePropertyDeep.js @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +module.exports = basePropertyDeep; diff --git a/platforms/android/assets/www/node_modules/lodash/_basePullAll.js b/platforms/android/assets/www/node_modules/lodash/_basePullAll.js new file mode 100644 index 0000000..3c07c99 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_basePullAll.js @@ -0,0 +1,47 @@ +var arrayMap = require('./_arrayMap'), + baseIndexOf = require('./_baseIndexOf'), + baseIndexOfWith = require('./_baseIndexOfWith'), + baseUnary = require('./_baseUnary'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ +function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; +} + +module.exports = basePullAll; diff --git a/platforms/android/assets/www/node_modules/lodash/_basePullAt.js b/platforms/android/assets/www/node_modules/lodash/_basePullAt.js new file mode 100644 index 0000000..eb9ed21 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_basePullAt.js @@ -0,0 +1,49 @@ +var baseCastPath = require('./_baseCastPath'), + isIndex = require('./_isIndex'), + isKey = require('./_isKey'), + last = require('./last'), + parent = require('./_parent'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ +function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (lastIndex == length || index != previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } + else if (!isKey(index, array)) { + var path = baseCastPath(index), + object = parent(array, path); + + if (object != null) { + delete object[last(path)]; + } + } + else { + delete array[index]; + } + } + } + return array; +} + +module.exports = basePullAt; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseRandom.js b/platforms/android/assets/www/node_modules/lodash/_baseRandom.js new file mode 100644 index 0000000..94f76a7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseRandom.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +} + +module.exports = baseRandom; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseRange.js b/platforms/android/assets/www/node_modules/lodash/_baseRange.js new file mode 100644 index 0000000..2b39dd4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseRange.js @@ -0,0 +1,28 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments to numbers. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the new array of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +module.exports = baseRange; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseReduce.js b/platforms/android/assets/www/node_modules/lodash/_baseReduce.js new file mode 100644 index 0000000..6ec5442 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseReduce.js @@ -0,0 +1,22 @@ +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +module.exports = baseReduce; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSet.js b/platforms/android/assets/www/node_modules/lodash/_baseSet.js new file mode 100644 index 0000000..0596d89 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSet.js @@ -0,0 +1,45 @@ +var assignValue = require('./_assignValue'), + baseCastPath = require('./_baseCastPath'), + isIndex = require('./_isIndex'), + isKey = require('./_isKey'), + isObject = require('./isObject'); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = path[index]; + if (isObject(nested)) { + var newValue = value; + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = objValue == null + ? (isIndex(path[index + 1]) ? [] : {}) + : objValue; + } + } + assignValue(nested, key, newValue); + } + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSetData.js b/platforms/android/assets/www/node_modules/lodash/_baseSetData.js new file mode 100644 index 0000000..e689df2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSetData.js @@ -0,0 +1,17 @@ +var identity = require('./identity'), + metaMap = require('./_metaMap'); + +/** + * The base implementation of `setData` without support for hot loop detection. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; +}; + +module.exports = baseSetData; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSlice.js b/platforms/android/assets/www/node_modules/lodash/_baseSlice.js new file mode 100644 index 0000000..786f6c9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSlice.js @@ -0,0 +1,31 @@ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSome.js b/platforms/android/assets/www/node_modules/lodash/_baseSome.js new file mode 100644 index 0000000..8b6aa0a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSome.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ +function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; +} + +module.exports = baseSome; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSortBy.js b/platforms/android/assets/www/node_modules/lodash/_baseSortBy.js new file mode 100644 index 0000000..a25c92e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSortBy.js @@ -0,0 +1,21 @@ +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +module.exports = baseSortBy; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSortedIndex.js b/platforms/android/assets/www/node_modules/lodash/_baseSortedIndex.js new file mode 100644 index 0000000..3961063 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSortedIndex.js @@ -0,0 +1,40 @@ +var baseSortedIndexBy = require('./_baseSortedIndexBy'), + identity = require('./identity'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + +/** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); +} + +module.exports = baseSortedIndex; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSortedIndexBy.js b/platforms/android/assets/www/node_modules/lodash/_baseSortedIndexBy.js new file mode 100644 index 0000000..6e295f9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSortedIndexBy.js @@ -0,0 +1,56 @@ +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeMin = Math.min; + +/** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + */ +function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); +} + +module.exports = baseSortedIndexBy; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSortedUniq.js b/platforms/android/assets/www/node_modules/lodash/_baseSortedUniq.js new file mode 100644 index 0000000..bf1eb2e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSortedUniq.js @@ -0,0 +1,14 @@ +var baseSortedUniqBy = require('./_baseSortedUniqBy'); + +/** + * The base implementation of `_.sortedUniq`. + * + * @private + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + */ +function baseSortedUniq(array) { + return baseSortedUniqBy(array); +} + +module.exports = baseSortedUniq; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSortedUniqBy.js b/platforms/android/assets/www/node_modules/lodash/_baseSortedUniqBy.js new file mode 100644 index 0000000..81e7ae1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSortedUniqBy.js @@ -0,0 +1,33 @@ +var eq = require('./eq'); + +/** + * The base implementation of `_.sortedUniqBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseSortedUniqBy(array, iteratee) { + var index = 0, + length = array.length, + value = array[0], + computed = iteratee ? iteratee(value) : value, + seen = computed, + resIndex = 1, + result = [value]; + + while (++index < length) { + value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!eq(computed, seen)) { + seen = computed; + result[resIndex++] = value; + } + } + return result; +} + +module.exports = baseSortedUniqBy; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseSum.js b/platforms/android/assets/www/node_modules/lodash/_baseSum.js new file mode 100644 index 0000000..348b5e8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseSum.js @@ -0,0 +1,23 @@ +/** + * The base implementation of `_.sum` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ +function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; +} + +module.exports = baseSum; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseTimes.js b/platforms/android/assets/www/node_modules/lodash/_baseTimes.js new file mode 100644 index 0000000..0603fc3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseTimes.js @@ -0,0 +1,20 @@ +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +module.exports = baseTimes; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseToPairs.js b/platforms/android/assets/www/node_modules/lodash/_baseToPairs.js new file mode 100644 index 0000000..d80b402 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseToPairs.js @@ -0,0 +1,18 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the new array of key-value pairs. + */ +function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); +} + +module.exports = baseToPairs; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseUnary.js b/platforms/android/assets/www/node_modules/lodash/_baseUnary.js new file mode 100644 index 0000000..e584a99 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseUnary.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.unary` without support for storing wrapper metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +module.exports = baseUnary; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseUniq.js b/platforms/android/assets/www/node_modules/lodash/_baseUniq.js new file mode 100644 index 0000000..ecb6fe4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseUniq.js @@ -0,0 +1,71 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + cacheHas = require('./_cacheHas'), + createSet = require('./_createSet'), + setToArray = require('./_setToArray'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseUniq; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseUnset.js b/platforms/android/assets/www/node_modules/lodash/_baseUnset.js new file mode 100644 index 0000000..02b5640 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseUnset.js @@ -0,0 +1,22 @@ +var baseCastPath = require('./_baseCastPath'), + has = require('./has'), + isKey = require('./_isKey'), + last = require('./last'), + parent = require('./_parent'); + +/** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ +function baseUnset(object, path) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + object = parent(object, path); + var key = last(path); + return (object != null && has(object, key)) ? delete object[key] : true; +} + +module.exports = baseUnset; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseUpdate.js b/platforms/android/assets/www/node_modules/lodash/_baseUpdate.js new file mode 100644 index 0000000..ec1b338 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseUpdate.js @@ -0,0 +1,18 @@ +var baseGet = require('./_baseGet'), + baseSet = require('./_baseSet'); + +/** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); +} + +module.exports = baseUpdate; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseValues.js b/platforms/android/assets/www/node_modules/lodash/_baseValues.js new file mode 100644 index 0000000..b95faad --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseValues.js @@ -0,0 +1,19 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +module.exports = baseValues; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseWhile.js b/platforms/android/assets/www/node_modules/lodash/_baseWhile.js new file mode 100644 index 0000000..07eac61 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseWhile.js @@ -0,0 +1,26 @@ +var baseSlice = require('./_baseSlice'); + +/** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ +function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +} + +module.exports = baseWhile; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseWrapperValue.js b/platforms/android/assets/www/node_modules/lodash/_baseWrapperValue.js new file mode 100644 index 0000000..443e0df --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseWrapperValue.js @@ -0,0 +1,25 @@ +var LazyWrapper = require('./_LazyWrapper'), + arrayPush = require('./_arrayPush'), + arrayReduce = require('./_arrayReduce'); + +/** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ +function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); +} + +module.exports = baseWrapperValue; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseXor.js b/platforms/android/assets/www/node_modules/lodash/_baseXor.js new file mode 100644 index 0000000..7e62d1b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseXor.js @@ -0,0 +1,30 @@ +var arrayPush = require('./_arrayPush'), + baseDifference = require('./_baseDifference'), + baseUniq = require('./_baseUniq'); + +/** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ +function baseXor(arrays, iteratee, comparator) { + var index = -1, + length = arrays.length; + + while (++index < length) { + var result = result + ? arrayPush( + baseDifference(result, arrays[index], iteratee, comparator), + baseDifference(arrays[index], result, iteratee, comparator) + ) + : arrays[index]; + } + return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; +} + +module.exports = baseXor; diff --git a/platforms/android/assets/www/node_modules/lodash/_baseZipObject.js b/platforms/android/assets/www/node_modules/lodash/_baseZipObject.js new file mode 100644 index 0000000..c8a3e83 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_baseZipObject.js @@ -0,0 +1,22 @@ +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property names. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + assignFunc(result, props[index], index < valsLength ? values[index] : undefined); + } + return result; +} + +module.exports = baseZipObject; diff --git a/platforms/android/assets/www/node_modules/lodash/_cacheHas.js b/platforms/android/assets/www/node_modules/lodash/_cacheHas.js new file mode 100644 index 0000000..7f2ac48 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cacheHas.js @@ -0,0 +1,25 @@ +var isKeyable = require('./_isKeyable'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Checks if `value` is in `cache`. + * + * @private + * @param {Object} cache The set cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function cacheHas(cache, value) { + var map = cache.__data__; + if (isKeyable(value)) { + var data = map.__data__, + hash = typeof value == 'string' ? data.string : data.hash; + + return hash[value] === HASH_UNDEFINED; + } + return map.has(value); +} + +module.exports = cacheHas; diff --git a/platforms/android/assets/www/node_modules/lodash/_cachePush.js b/platforms/android/assets/www/node_modules/lodash/_cachePush.js new file mode 100644 index 0000000..638383b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cachePush.js @@ -0,0 +1,27 @@ +var isKeyable = require('./_isKeyable'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the set cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ +function cachePush(value) { + var map = this.__data__; + if (isKeyable(value)) { + var data = map.__data__, + hash = typeof value == 'string' ? data.string : data.hash; + + hash[value] = HASH_UNDEFINED; + } + else { + map.set(value, HASH_UNDEFINED); + } +} + +module.exports = cachePush; diff --git a/platforms/android/assets/www/node_modules/lodash/_charsEndIndex.js b/platforms/android/assets/www/node_modules/lodash/_charsEndIndex.js new file mode 100644 index 0000000..07908ff --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_charsEndIndex.js @@ -0,0 +1,19 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ +function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsEndIndex; diff --git a/platforms/android/assets/www/node_modules/lodash/_charsStartIndex.js b/platforms/android/assets/www/node_modules/lodash/_charsStartIndex.js new file mode 100644 index 0000000..b17afd2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_charsStartIndex.js @@ -0,0 +1,20 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ +function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsStartIndex; diff --git a/platforms/android/assets/www/node_modules/lodash/_checkGlobal.js b/platforms/android/assets/www/node_modules/lodash/_checkGlobal.js new file mode 100644 index 0000000..b0ea47e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_checkGlobal.js @@ -0,0 +1,12 @@ +/** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ +function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; +} + +module.exports = checkGlobal; diff --git a/platforms/android/assets/www/node_modules/lodash/_cloneArrayBuffer.js b/platforms/android/assets/www/node_modules/lodash/_cloneArrayBuffer.js new file mode 100644 index 0000000..c3d8f6e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cloneArrayBuffer.js @@ -0,0 +1,16 @@ +var Uint8Array = require('./_Uint8Array'); + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} + +module.exports = cloneArrayBuffer; diff --git a/platforms/android/assets/www/node_modules/lodash/_cloneBuffer.js b/platforms/android/assets/www/node_modules/lodash/_cloneBuffer.js new file mode 100644 index 0000000..247d410 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cloneBuffer.js @@ -0,0 +1,18 @@ +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var result = new buffer.constructor(buffer.length); + buffer.copy(result); + return result; +} + +module.exports = cloneBuffer; diff --git a/platforms/android/assets/www/node_modules/lodash/_cloneMap.js b/platforms/android/assets/www/node_modules/lodash/_cloneMap.js new file mode 100644 index 0000000..a42cbf3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cloneMap.js @@ -0,0 +1,16 @@ +var addMapEntry = require('./_addMapEntry'), + arrayReduce = require('./_arrayReduce'), + mapToArray = require('./_mapToArray'); + +/** + * Creates a clone of `map`. + * + * @private + * @param {Object} map The map to clone. + * @returns {Object} Returns the cloned map. + */ +function cloneMap(map) { + return arrayReduce(mapToArray(map), addMapEntry, new map.constructor); +} + +module.exports = cloneMap; diff --git a/platforms/android/assets/www/node_modules/lodash/_cloneRegExp.js b/platforms/android/assets/www/node_modules/lodash/_cloneRegExp.js new file mode 100644 index 0000000..64a30df --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cloneRegExp.js @@ -0,0 +1,17 @@ +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +module.exports = cloneRegExp; diff --git a/platforms/android/assets/www/node_modules/lodash/_cloneSet.js b/platforms/android/assets/www/node_modules/lodash/_cloneSet.js new file mode 100644 index 0000000..0575c0a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cloneSet.js @@ -0,0 +1,16 @@ +var addSetEntry = require('./_addSetEntry'), + arrayReduce = require('./_arrayReduce'), + setToArray = require('./_setToArray'); + +/** + * Creates a clone of `set`. + * + * @private + * @param {Object} set The set to clone. + * @returns {Object} Returns the cloned set. + */ +function cloneSet(set) { + return arrayReduce(setToArray(set), addSetEntry, new set.constructor); +} + +module.exports = cloneSet; diff --git a/platforms/android/assets/www/node_modules/lodash/_cloneSymbol.js b/platforms/android/assets/www/node_modules/lodash/_cloneSymbol.js new file mode 100644 index 0000000..bede39f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cloneSymbol.js @@ -0,0 +1,18 @@ +var Symbol = require('./_Symbol'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +module.exports = cloneSymbol; diff --git a/platforms/android/assets/www/node_modules/lodash/_cloneTypedArray.js b/platforms/android/assets/www/node_modules/lodash/_cloneTypedArray.js new file mode 100644 index 0000000..7aad84d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_cloneTypedArray.js @@ -0,0 +1,16 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'); + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +module.exports = cloneTypedArray; diff --git a/platforms/android/assets/www/node_modules/lodash/_compareAscending.js b/platforms/android/assets/www/node_modules/lodash/_compareAscending.js new file mode 100644 index 0000000..532866c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_compareAscending.js @@ -0,0 +1,33 @@ +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; +} + +module.exports = compareAscending; diff --git a/platforms/android/assets/www/node_modules/lodash/_compareMultiple.js b/platforms/android/assets/www/node_modules/lodash/_compareMultiple.js new file mode 100644 index 0000000..a3f2d8b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_compareMultiple.js @@ -0,0 +1,44 @@ +var compareAscending = require('./_compareAscending'); + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://code.google.com/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +module.exports = compareMultiple; diff --git a/platforms/android/assets/www/node_modules/lodash/_composeArgs.js b/platforms/android/assets/www/node_modules/lodash/_composeArgs.js new file mode 100644 index 0000000..07398e7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_composeArgs.js @@ -0,0 +1,39 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; +} + +module.exports = composeArgs; diff --git a/platforms/android/assets/www/node_modules/lodash/_composeArgsRight.js b/platforms/android/assets/www/node_modules/lodash/_composeArgsRight.js new file mode 100644 index 0000000..18cfae0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_composeArgsRight.js @@ -0,0 +1,41 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; +} + +module.exports = composeArgsRight; diff --git a/platforms/android/assets/www/node_modules/lodash/_copyArray.js b/platforms/android/assets/www/node_modules/lodash/_copyArray.js new file mode 100644 index 0000000..cd94d5d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_copyArray.js @@ -0,0 +1,20 @@ +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; diff --git a/platforms/android/assets/www/node_modules/lodash/_copyObject.js b/platforms/android/assets/www/node_modules/lodash/_copyObject.js new file mode 100644 index 0000000..f8406b6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_copyObject.js @@ -0,0 +1,16 @@ +var copyObjectWith = require('./_copyObjectWith'); + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object) { + return copyObjectWith(source, props, object); +} + +module.exports = copyObject; diff --git a/platforms/android/assets/www/node_modules/lodash/_copyObjectWith.js b/platforms/android/assets/www/node_modules/lodash/_copyObjectWith.js new file mode 100644 index 0000000..c4c1f45 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_copyObjectWith.js @@ -0,0 +1,32 @@ +var assignValue = require('./_assignValue'); + +/** + * This function is like `copyObject` except that it accepts a function to + * customize copied values. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObjectWith(source, props, object, customizer) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : source[key]; + + assignValue(object, key, newValue); + } + return object; +} + +module.exports = copyObjectWith; diff --git a/platforms/android/assets/www/node_modules/lodash/_copySymbols.js b/platforms/android/assets/www/node_modules/lodash/_copySymbols.js new file mode 100644 index 0000000..1fac3c8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_copySymbols.js @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), + getSymbols = require('./_getSymbols'); + +/** + * Copies own symbol properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); +} + +module.exports = copySymbols; diff --git a/platforms/android/assets/www/node_modules/lodash/_countHolders.js b/platforms/android/assets/www/node_modules/lodash/_countHolders.js new file mode 100644 index 0000000..8cc95e6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_countHolders.js @@ -0,0 +1,21 @@ +/** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ +function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + result++; + } + } + return result; +} + +module.exports = countHolders; diff --git a/platforms/android/assets/www/node_modules/lodash/_createAggregator.js b/platforms/android/assets/www/node_modules/lodash/_createAggregator.js new file mode 100644 index 0000000..7f7afd2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createAggregator.js @@ -0,0 +1,23 @@ +var arrayAggregator = require('./_arrayAggregator'), + baseAggregator = require('./_baseAggregator'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, baseIteratee(iteratee), accumulator); + }; +} + +module.exports = createAggregator; diff --git a/platforms/android/assets/www/node_modules/lodash/_createAssigner.js b/platforms/android/assets/www/node_modules/lodash/_createAssigner.js new file mode 100644 index 0000000..1e81db9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createAssigner.js @@ -0,0 +1,37 @@ +var isIterateeCall = require('./_isIterateeCall'), + rest = require('./rest'); + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return rest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = typeof customizer == 'function' + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; diff --git a/platforms/android/assets/www/node_modules/lodash/_createBaseEach.js b/platforms/android/assets/www/node_modules/lodash/_createBaseEach.js new file mode 100644 index 0000000..d24fdd1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createBaseEach.js @@ -0,0 +1,32 @@ +var isArrayLike = require('./isArrayLike'); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +module.exports = createBaseEach; diff --git a/platforms/android/assets/www/node_modules/lodash/_createBaseFor.js b/platforms/android/assets/www/node_modules/lodash/_createBaseFor.js new file mode 100644 index 0000000..bc84c03 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createBaseFor.js @@ -0,0 +1,25 @@ +/** + * Creates a base function for methods like `_.forIn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; diff --git a/platforms/android/assets/www/node_modules/lodash/_createBaseWrapper.js b/platforms/android/assets/www/node_modules/lodash/_createBaseWrapper.js new file mode 100644 index 0000000..fd3bb9a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createBaseWrapper.js @@ -0,0 +1,28 @@ +var createCtorWrapper = require('./_createCtorWrapper'), + root = require('./_root'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createBaseWrapper(func, bitmask, thisArg) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; +} + +module.exports = createBaseWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_createCaseFirst.js b/platforms/android/assets/www/node_modules/lodash/_createCaseFirst.js new file mode 100644 index 0000000..a6f7054 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createCaseFirst.js @@ -0,0 +1,38 @@ +var stringToArray = require('./_stringToArray'), + toString = require('./toString'); + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = reHasComplexSymbol.test(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols ? strSymbols[0] : string.charAt(0), + trailing = strSymbols ? strSymbols.slice(1).join('') : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +module.exports = createCaseFirst; diff --git a/platforms/android/assets/www/node_modules/lodash/_createCompounder.js b/platforms/android/assets/www/node_modules/lodash/_createCompounder.js new file mode 100644 index 0000000..bfa4ee5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createCompounder.js @@ -0,0 +1,18 @@ +var arrayReduce = require('./_arrayReduce'), + deburr = require('./deburr'), + words = require('./words'); + +/** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string)), callback, ''); + }; +} + +module.exports = createCompounder; diff --git a/platforms/android/assets/www/node_modules/lodash/_createCtorWrapper.js b/platforms/android/assets/www/node_modules/lodash/_createCtorWrapper.js new file mode 100644 index 0000000..a0a7f83 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createCtorWrapper.js @@ -0,0 +1,37 @@ +var baseCreate = require('./_baseCreate'), + isObject = require('./isObject'); + +/** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ +function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; +} + +module.exports = createCtorWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_createCurryWrapper.js b/platforms/android/assets/www/node_modules/lodash/_createCurryWrapper.js new file mode 100644 index 0000000..af6f320 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createCurryWrapper.js @@ -0,0 +1,46 @@ +var apply = require('./_apply'), + createCtorWrapper = require('./_createCtorWrapper'), + createHybridWrapper = require('./_createHybridWrapper'), + createRecurryWrapper = require('./_createRecurryWrapper'), + getPlaceholder = require('./_getPlaceholder'), + replaceHolders = require('./_replaceHolders'), + root = require('./_root'); + +/** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createCurryWrapper(func, bitmask, arity) { + var Ctor = createCtorWrapper(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getPlaceholder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurryWrapper( + func, bitmask, createHybridWrapper, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; +} + +module.exports = createCurryWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_createFlow.js b/platforms/android/assets/www/node_modules/lodash/_createFlow.js new file mode 100644 index 0000000..8a5e60d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createFlow.js @@ -0,0 +1,83 @@ +var LodashWrapper = require('./_LodashWrapper'), + baseFlatten = require('./_baseFlatten'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + isArray = require('./isArray'), + isLaziable = require('./_isLaziable'), + rest = require('./rest'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_FLAG = 8, + PARTIAL_FLAG = 32, + ARY_FLAG = 128, + REARG_FLAG = 256; + +/** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ +function createFlow(fromRight) { + return rest(function(funcs) { + funcs = baseFlatten(funcs, 1); + + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && + isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); +} + +module.exports = createFlow; diff --git a/platforms/android/assets/www/node_modules/lodash/_createHybridWrapper.js b/platforms/android/assets/www/node_modules/lodash/_createHybridWrapper.js new file mode 100644 index 0000000..eaf8c81 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createHybridWrapper.js @@ -0,0 +1,90 @@ +var composeArgs = require('./_composeArgs'), + composeArgsRight = require('./_composeArgsRight'), + countHolders = require('./_countHolders'), + createCtorWrapper = require('./_createCtorWrapper'), + createRecurryWrapper = require('./_createRecurryWrapper'), + getPlaceholder = require('./_getPlaceholder'), + reorder = require('./_reorder'), + replaceHolders = require('./_replaceHolders'), + root = require('./_root'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + ARY_FLAG = 128, + FLIP_FLAG = 512; + +/** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), + isFlip = bitmask & FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func); + + function wrapper() { + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getPlaceholder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurryWrapper( + func, bitmask, createHybridWrapper, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; +} + +module.exports = createHybridWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_createInverter.js b/platforms/android/assets/www/node_modules/lodash/_createInverter.js new file mode 100644 index 0000000..6c0c562 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createInverter.js @@ -0,0 +1,17 @@ +var baseInverter = require('./_baseInverter'); + +/** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ +function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; +} + +module.exports = createInverter; diff --git a/platforms/android/assets/www/node_modules/lodash/_createOver.js b/platforms/android/assets/www/node_modules/lodash/_createOver.js new file mode 100644 index 0000000..f0a99c3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createOver.js @@ -0,0 +1,26 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseFlatten = require('./_baseFlatten'), + baseIteratee = require('./_baseIteratee'), + rest = require('./rest'); + +/** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new invoker function. + */ +function createOver(arrayFunc) { + return rest(function(iteratees) { + iteratees = arrayMap(baseFlatten(iteratees, 1), baseIteratee); + return rest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); +} + +module.exports = createOver; diff --git a/platforms/android/assets/www/node_modules/lodash/_createPadding.js b/platforms/android/assets/www/node_modules/lodash/_createPadding.js new file mode 100644 index 0000000..e59cc52 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createPadding.js @@ -0,0 +1,47 @@ +var repeat = require('./repeat'), + stringSize = require('./_stringSize'), + stringToArray = require('./_stringToArray'), + toInteger = require('./toInteger'); + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil; + +/** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {string} string The string to create padding for. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ +function createPadding(string, length, chars) { + length = toInteger(length); + + var strLength = stringSize(string); + if (!length || strLength >= length) { + return ''; + } + var padLength = length - strLength; + chars = chars === undefined ? ' ' : (chars + ''); + + var result = repeat(chars, nativeCeil(padLength / stringSize(chars))); + return reHasComplexSymbol.test(chars) + ? stringToArray(result).slice(0, padLength).join('') + : result.slice(0, padLength); +} + +module.exports = createPadding; diff --git a/platforms/android/assets/www/node_modules/lodash/_createPartialWrapper.js b/platforms/android/assets/www/node_modules/lodash/_createPartialWrapper.js new file mode 100644 index 0000000..1fc3a9b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createPartialWrapper.js @@ -0,0 +1,43 @@ +var apply = require('./_apply'), + createCtorWrapper = require('./_createCtorWrapper'), + root = require('./_root'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new wrapped function. + */ +function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; +} + +module.exports = createPartialWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_createRange.js b/platforms/android/assets/www/node_modules/lodash/_createRange.js new file mode 100644 index 0000000..9728563 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createRange.js @@ -0,0 +1,31 @@ +var baseRange = require('./_baseRange'), + isIterateeCall = require('./_isIterateeCall'), + toNumber = require('./toNumber'); + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toNumber(start); + start = start === start ? start : 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = toNumber(end) || 0; + } + step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0); + return baseRange(start, end, step, fromRight); + }; +} + +module.exports = createRange; diff --git a/platforms/android/assets/www/node_modules/lodash/_createRecurryWrapper.js b/platforms/android/assets/www/node_modules/lodash/_createRecurryWrapper.js new file mode 100644 index 0000000..027424e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createRecurryWrapper.js @@ -0,0 +1,56 @@ +var copyArray = require('./_copyArray'), + isLaziable = require('./_isLaziable'), + setData = require('./_setData'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64; + +/** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & CURRY_FLAG, + newArgPos = argPos ? copyArray(argPos) : undefined, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!(bitmask & CURRY_BOUND_FLAG)) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, newArgPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; +} + +module.exports = createRecurryWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_createRound.js b/platforms/android/assets/www/node_modules/lodash/_createRound.js new file mode 100644 index 0000000..cb42ba2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createRound.js @@ -0,0 +1,30 @@ +var toInteger = require('./toInteger'), + toNumber = require('./toNumber'), + toString = require('./toString'); + +/** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ +function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = toInteger(precision); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; +} + +module.exports = createRound; diff --git a/platforms/android/assets/www/node_modules/lodash/_createSet.js b/platforms/android/assets/www/node_modules/lodash/_createSet.js new file mode 100644 index 0000000..c67128f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createSet.js @@ -0,0 +1,15 @@ +var Set = require('./_Set'), + noop = require('./noop'); + +/** + * Creates a set of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && new Set([1, 2]).size === 2) ? noop : function(values) { + return new Set(values); +}; + +module.exports = createSet; diff --git a/platforms/android/assets/www/node_modules/lodash/_createWrapper.js b/platforms/android/assets/www/node_modules/lodash/_createWrapper.js new file mode 100644 index 0000000..7b573b2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_createWrapper.js @@ -0,0 +1,105 @@ +var baseSetData = require('./_baseSetData'), + createBaseWrapper = require('./_createBaseWrapper'), + createCurryWrapper = require('./_createCurryWrapper'), + createHybridWrapper = require('./_createHybridWrapper'), + createPartialWrapper = require('./_createPartialWrapper'), + getData = require('./_getData'), + mergeData = require('./_mergeData'), + setData = require('./_setData'), + toInteger = require('./toInteger'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask of wrapper flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] == null + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { + bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == BIND_FLAG) { + var result = createBaseWrapper(func, bitmask, thisArg); + } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { + result = createCurryWrapper(func, bitmask, arity); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { + result = createPartialWrapper(func, bitmask, thisArg, partials); + } else { + result = createHybridWrapper.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setter(result, newData); +} + +module.exports = createWrapper; diff --git a/platforms/android/assets/www/node_modules/lodash/_deburrLetter.js b/platforms/android/assets/www/node_modules/lodash/_deburrLetter.js new file mode 100644 index 0000000..e559dbe --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_deburrLetter.js @@ -0,0 +1,33 @@ +/** Used to map latin-1 supplementary letters to basic latin letters. */ +var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' +}; + +/** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +function deburrLetter(letter) { + return deburredLetters[letter]; +} + +module.exports = deburrLetter; diff --git a/platforms/android/assets/www/node_modules/lodash/_equalArrays.js b/platforms/android/assets/www/node_modules/lodash/_equalArrays.js new file mode 100644 index 0000000..eb39015 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_equalArrays.js @@ -0,0 +1,72 @@ +var arraySome = require('./_arraySome'); + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var index = -1, + isPartial = bitmask & PARTIAL_COMPARE_FLAG, + isUnordered = bitmask & UNORDERED_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked) { + return stacked == other; + } + var result = true; + stack.set(array, other); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isUnordered) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack); + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + result = false; + break; + } + } + stack['delete'](array); + return result; +} + +module.exports = equalArrays; diff --git a/platforms/android/assets/www/node_modules/lodash/_equalByTag.js b/platforms/android/assets/www/node_modules/lodash/_equalByTag.js new file mode 100644 index 0000000..15b3860 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_equalByTag.js @@ -0,0 +1,99 @@ +var Symbol = require('./_Symbol'), + Uint8Array = require('./_Uint8Array'), + equalArrays = require('./_equalArrays'), + mapToArray = require('./_mapToArray'), + setToArray = require('./_setToArray'); + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) ? other != +other : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + // Recursively compare objects (susceptible to call stack limits). + return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask | UNORDERED_COMPARE_FLAG, stack.set(object, other)); + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +module.exports = equalByTag; diff --git a/platforms/android/assets/www/node_modules/lodash/_equalObjects.js b/platforms/android/assets/www/node_modules/lodash/_equalObjects.js new file mode 100644 index 0000000..103f435 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_equalObjects.js @@ -0,0 +1,82 @@ +var baseHas = require('./_baseHas'), + keys = require('./keys'); + +/** Used to compose bitmasks for comparison styles. */ +var PARTIAL_COMPARE_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : baseHas(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + var result = true; + stack.set(object, other); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + return result; +} + +module.exports = equalObjects; diff --git a/platforms/android/assets/www/node_modules/lodash/_escapeHtmlChar.js b/platforms/android/assets/www/node_modules/lodash/_escapeHtmlChar.js new file mode 100644 index 0000000..b21e452 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_escapeHtmlChar.js @@ -0,0 +1,22 @@ +/** Used to map characters to HTML entities. */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' +}; + +/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeHtmlChar(chr) { + return htmlEscapes[chr]; +} + +module.exports = escapeHtmlChar; diff --git a/platforms/android/assets/www/node_modules/lodash/_escapeStringChar.js b/platforms/android/assets/www/node_modules/lodash/_escapeStringChar.js new file mode 100644 index 0000000..44eca96 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_escapeStringChar.js @@ -0,0 +1,22 @@ +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; +} + +module.exports = escapeStringChar; diff --git a/platforms/android/assets/www/node_modules/lodash/_getData.js b/platforms/android/assets/www/node_modules/lodash/_getData.js new file mode 100644 index 0000000..a1fe7b7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getData.js @@ -0,0 +1,15 @@ +var metaMap = require('./_metaMap'), + noop = require('./noop'); + +/** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ +var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); +}; + +module.exports = getData; diff --git a/platforms/android/assets/www/node_modules/lodash/_getFuncName.js b/platforms/android/assets/www/node_modules/lodash/_getFuncName.js new file mode 100644 index 0000000..21e15b3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getFuncName.js @@ -0,0 +1,31 @@ +var realNames = require('./_realNames'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ +function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; +} + +module.exports = getFuncName; diff --git a/platforms/android/assets/www/node_modules/lodash/_getLength.js b/platforms/android/assets/www/node_modules/lodash/_getLength.js new file mode 100644 index 0000000..1848d49 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getLength.js @@ -0,0 +1,15 @@ +var baseProperty = require('./_baseProperty'); + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +module.exports = getLength; diff --git a/platforms/android/assets/www/node_modules/lodash/_getMatchData.js b/platforms/android/assets/www/node_modules/lodash/_getMatchData.js new file mode 100644 index 0000000..a1456d2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getMatchData.js @@ -0,0 +1,21 @@ +var isStrictComparable = require('./_isStrictComparable'), + toPairs = require('./toPairs'); + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = toPairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; +} + +module.exports = getMatchData; diff --git a/platforms/android/assets/www/node_modules/lodash/_getNative.js b/platforms/android/assets/www/node_modules/lodash/_getNative.js new file mode 100644 index 0000000..f6ff7f1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getNative.js @@ -0,0 +1,16 @@ +var isNative = require('./isNative'); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object[key]; + return isNative(value) ? value : undefined; +} + +module.exports = getNative; diff --git a/platforms/android/assets/www/node_modules/lodash/_getPlaceholder.js b/platforms/android/assets/www/node_modules/lodash/_getPlaceholder.js new file mode 100644 index 0000000..4bbcda2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getPlaceholder.js @@ -0,0 +1,13 @@ +/** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ +function getPlaceholder(func) { + var object = func; + return object.placeholder; +} + +module.exports = getPlaceholder; diff --git a/platforms/android/assets/www/node_modules/lodash/_getSymbols.js b/platforms/android/assets/www/node_modules/lodash/_getSymbols.js new file mode 100644 index 0000000..266906a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getSymbols.js @@ -0,0 +1,15 @@ +/** Built-in value references. */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own symbol properties of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = getOwnPropertySymbols || function() { + return []; +}; + +module.exports = getSymbols; diff --git a/platforms/android/assets/www/node_modules/lodash/_getTag.js b/platforms/android/assets/www/node_modules/lodash/_getTag.js new file mode 100644 index 0000000..1516eca --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getTag.js @@ -0,0 +1,59 @@ +var Map = require('./_Map'), + Set = require('./_Set'), + WeakMap = require('./_WeakMap'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = Function.prototype.toString; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect maps, sets, and weakmaps. */ +var mapCtorString = Map ? funcToString.call(Map) : '', + setCtorString = Set ? funcToString.call(Set) : '', + weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : ''; + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function getTag(value) { + return objectToString.call(value); +} + +// Fallback for IE 11 providing `toStringTag` values for maps, sets, and weakmaps. +if ((Map && getTag(new Map) != mapTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = objectToString.call(value), + Ctor = result == objectTag ? value.constructor : null, + ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case mapCtorString: return mapTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +module.exports = getTag; diff --git a/platforms/android/assets/www/node_modules/lodash/_getView.js b/platforms/android/assets/www/node_modules/lodash/_getView.js new file mode 100644 index 0000000..df1e5d4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_getView.js @@ -0,0 +1,33 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ +function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; +} + +module.exports = getView; diff --git a/platforms/android/assets/www/node_modules/lodash/_hasPath.js b/platforms/android/assets/www/node_modules/lodash/_hasPath.js new file mode 100644 index 0000000..ed4f1a1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_hasPath.js @@ -0,0 +1,40 @@ +var baseCastPath = require('./_baseCastPath'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isIndex = require('./_isIndex'), + isKey = require('./_isKey'), + isLength = require('./isLength'), + isString = require('./isString'), + last = require('./last'), + parent = require('./_parent'); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + if (object == null) { + return false; + } + var result = hasFunc(object, path); + if (!result && !isKey(path)) { + path = baseCastPath(path); + object = parent(object, path); + if (object != null) { + path = last(path); + result = hasFunc(object, path); + } + } + var length = object ? object.length : undefined; + return result || ( + !!length && isLength(length) && isIndex(path, length) && + (isArray(object) || isString(object) || isArguments(object)) + ); +} + +module.exports = hasPath; diff --git a/platforms/android/assets/www/node_modules/lodash/_hashDelete.js b/platforms/android/assets/www/node_modules/lodash/_hashDelete.js new file mode 100644 index 0000000..b562317 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_hashDelete.js @@ -0,0 +1,15 @@ +var hashHas = require('./_hashHas'); + +/** + * Removes `key` and its value from the hash. + * + * @private + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(hash, key) { + return hashHas(hash, key) && delete hash[key]; +} + +module.exports = hashDelete; diff --git a/platforms/android/assets/www/node_modules/lodash/_hashGet.js b/platforms/android/assets/www/node_modules/lodash/_hashGet.js new file mode 100644 index 0000000..ba509b6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_hashGet.js @@ -0,0 +1,28 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @param {Object} hash The hash to query. + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(hash, key) { + if (nativeCreate) { + var result = hash[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(hash, key) ? hash[key] : undefined; +} + +module.exports = hashGet; diff --git a/platforms/android/assets/www/node_modules/lodash/_hashHas.js b/platforms/android/assets/www/node_modules/lodash/_hashHas.js new file mode 100644 index 0000000..3bbff48 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_hashHas.js @@ -0,0 +1,21 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @param {Object} hash The hash to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(hash, key) { + return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key); +} + +module.exports = hashHas; diff --git a/platforms/android/assets/www/node_modules/lodash/_hashSet.js b/platforms/android/assets/www/node_modules/lodash/_hashSet.js new file mode 100644 index 0000000..f7c3307 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_hashSet.js @@ -0,0 +1,18 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + */ +function hashSet(hash, key, value) { + hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; +} + +module.exports = hashSet; diff --git a/platforms/android/assets/www/node_modules/lodash/_indexKeys.js b/platforms/android/assets/www/node_modules/lodash/_indexKeys.js new file mode 100644 index 0000000..0e2fc10 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_indexKeys.js @@ -0,0 +1,24 @@ +var baseTimes = require('./_baseTimes'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isLength = require('./isLength'), + isString = require('./isString'); + +/** + * Creates an array of index keys for `object` values of arrays, + * `arguments` objects, and strings, otherwise `null` is returned. + * + * @private + * @param {Object} object The object to query. + * @returns {Array|null} Returns index keys, else `null`. + */ +function indexKeys(object) { + var length = object ? object.length : undefined; + if (isLength(length) && + (isArray(object) || isString(object) || isArguments(object))) { + return baseTimes(length, String); + } + return null; +} + +module.exports = indexKeys; diff --git a/platforms/android/assets/www/node_modules/lodash/_indexOfNaN.js b/platforms/android/assets/www/node_modules/lodash/_indexOfNaN.js new file mode 100644 index 0000000..05b8207 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_indexOfNaN.js @@ -0,0 +1,23 @@ +/** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ +function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; +} + +module.exports = indexOfNaN; diff --git a/platforms/android/assets/www/node_modules/lodash/_initCloneArray.js b/platforms/android/assets/www/node_modules/lodash/_initCloneArray.js new file mode 100644 index 0000000..aef0212 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_initCloneArray.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +module.exports = initCloneArray; diff --git a/platforms/android/assets/www/node_modules/lodash/_initCloneByTag.js b/platforms/android/assets/www/node_modules/lodash/_initCloneByTag.js new file mode 100644 index 0000000..5d21cda --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_initCloneByTag.js @@ -0,0 +1,74 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'), + cloneMap = require('./_cloneMap'), + cloneRegExp = require('./_cloneRegExp'), + cloneSet = require('./_cloneSet'), + cloneSymbol = require('./_cloneSymbol'), + cloneTypedArray = require('./_cloneTypedArray'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return cloneMap(object); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return cloneSet(object); + + case symbolTag: + return cloneSymbol(object); + } +} + +module.exports = initCloneByTag; diff --git a/platforms/android/assets/www/node_modules/lodash/_initCloneObject.js b/platforms/android/assets/www/node_modules/lodash/_initCloneObject.js new file mode 100644 index 0000000..14d2dc4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_initCloneObject.js @@ -0,0 +1,20 @@ +var baseCreate = require('./_baseCreate'), + isPrototype = require('./_isPrototype'); + +/** Built-in value references. */ +var getPrototypeOf = Object.getPrototypeOf; + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototypeOf(object)) + : {}; +} + +module.exports = initCloneObject; diff --git a/platforms/android/assets/www/node_modules/lodash/_isHostObject.js b/platforms/android/assets/www/node_modules/lodash/_isHostObject.js new file mode 100644 index 0000000..e598c10 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_isHostObject.js @@ -0,0 +1,20 @@ +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +module.exports = isHostObject; diff --git a/platforms/android/assets/www/node_modules/lodash/_isIndex.js b/platforms/android/assets/www/node_modules/lodash/_isIndex.js new file mode 100644 index 0000000..c7ff607 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_isIndex.js @@ -0,0 +1,21 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; +} + +module.exports = isIndex; diff --git a/platforms/android/assets/www/node_modules/lodash/_isIterateeCall.js b/platforms/android/assets/www/node_modules/lodash/_isIterateeCall.js new file mode 100644 index 0000000..b422b48 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_isIterateeCall.js @@ -0,0 +1,28 @@ +var eq = require('./eq'), + isArrayLike = require('./isArrayLike'), + isIndex = require('./_isIndex'), + isObject = require('./isObject'); + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + return eq(object[index], value); + } + return false; +} + +module.exports = isIterateeCall; diff --git a/platforms/android/assets/www/node_modules/lodash/_isKey.js b/platforms/android/assets/www/node_modules/lodash/_isKey.js new file mode 100644 index 0000000..0e34576 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_isKey.js @@ -0,0 +1,24 @@ +var isArray = require('./isArray'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (typeof value == 'number') { + return true; + } + return !isArray(value) && + (reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object))); +} + +module.exports = isKey; diff --git a/platforms/android/assets/www/node_modules/lodash/_isKeyable.js b/platforms/android/assets/www/node_modules/lodash/_isKeyable.js new file mode 100644 index 0000000..5df83c0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_isKeyable.js @@ -0,0 +1,14 @@ +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return type == 'number' || type == 'boolean' || + (type == 'string' && value != '__proto__') || value == null; +} + +module.exports = isKeyable; diff --git a/platforms/android/assets/www/node_modules/lodash/_isLaziable.js b/platforms/android/assets/www/node_modules/lodash/_isLaziable.js new file mode 100644 index 0000000..faa17b9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_isLaziable.js @@ -0,0 +1,27 @@ +var LazyWrapper = require('./_LazyWrapper'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + lodash = require('./wrapperLodash'); + +/** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. + */ +function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; +} + +module.exports = isLaziable; diff --git a/platforms/android/assets/www/node_modules/lodash/_isPrototype.js b/platforms/android/assets/www/node_modules/lodash/_isPrototype.js new file mode 100644 index 0000000..0f29498 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_isPrototype.js @@ -0,0 +1,18 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +module.exports = isPrototype; diff --git a/platforms/android/assets/www/node_modules/lodash/_isStrictComparable.js b/platforms/android/assets/www/node_modules/lodash/_isStrictComparable.js new file mode 100644 index 0000000..b59f40b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_isStrictComparable.js @@ -0,0 +1,15 @@ +var isObject = require('./isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; diff --git a/platforms/android/assets/www/node_modules/lodash/_iteratorToArray.js b/platforms/android/assets/www/node_modules/lodash/_iteratorToArray.js new file mode 100644 index 0000000..4768566 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_iteratorToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ +function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; +} + +module.exports = iteratorToArray; diff --git a/platforms/android/assets/www/node_modules/lodash/_lazyClone.js b/platforms/android/assets/www/node_modules/lodash/_lazyClone.js new file mode 100644 index 0000000..d8a51f8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_lazyClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), + copyArray = require('./_copyArray'); + +/** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ +function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; +} + +module.exports = lazyClone; diff --git a/platforms/android/assets/www/node_modules/lodash/_lazyReverse.js b/platforms/android/assets/www/node_modules/lodash/_lazyReverse.js new file mode 100644 index 0000000..c5b5219 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_lazyReverse.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'); + +/** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ +function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; +} + +module.exports = lazyReverse; diff --git a/platforms/android/assets/www/node_modules/lodash/_lazyValue.js b/platforms/android/assets/www/node_modules/lodash/_lazyValue.js new file mode 100644 index 0000000..09bf14b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_lazyValue.js @@ -0,0 +1,73 @@ +var baseWrapperValue = require('./_baseWrapperValue'), + getView = require('./_getView'), + isArray = require('./isArray'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to indicate the type of lazy iteratees. */ +var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ +function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || + (arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; +} + +module.exports = lazyValue; diff --git a/platforms/android/assets/www/node_modules/lodash/_mapClear.js b/platforms/android/assets/www/node_modules/lodash/_mapClear.js new file mode 100644 index 0000000..296f417 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_mapClear.js @@ -0,0 +1,19 @@ +var Hash = require('./_Hash'), + Map = require('./_Map'); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapClear() { + this.__data__ = { + 'hash': new Hash, + 'map': Map ? new Map : [], + 'string': new Hash + }; +} + +module.exports = mapClear; diff --git a/platforms/android/assets/www/node_modules/lodash/_mapDelete.js b/platforms/android/assets/www/node_modules/lodash/_mapDelete.js new file mode 100644 index 0000000..640eb0a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_mapDelete.js @@ -0,0 +1,23 @@ +var Map = require('./_Map'), + assocDelete = require('./_assocDelete'), + hashDelete = require('./_hashDelete'), + isKeyable = require('./_isKeyable'); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapDelete(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashDelete(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map['delete'](key) : assocDelete(data.map, key); +} + +module.exports = mapDelete; diff --git a/platforms/android/assets/www/node_modules/lodash/_mapGet.js b/platforms/android/assets/www/node_modules/lodash/_mapGet.js new file mode 100644 index 0000000..8f33854 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_mapGet.js @@ -0,0 +1,23 @@ +var Map = require('./_Map'), + assocGet = require('./_assocGet'), + hashGet = require('./_hashGet'), + isKeyable = require('./_isKeyable'); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapGet(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashGet(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map.get(key) : assocGet(data.map, key); +} + +module.exports = mapGet; diff --git a/platforms/android/assets/www/node_modules/lodash/_mapHas.js b/platforms/android/assets/www/node_modules/lodash/_mapHas.js new file mode 100644 index 0000000..9225537 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_mapHas.js @@ -0,0 +1,23 @@ +var Map = require('./_Map'), + assocHas = require('./_assocHas'), + hashHas = require('./_hashHas'), + isKeyable = require('./_isKeyable'); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapHas(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashHas(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map.has(key) : assocHas(data.map, key); +} + +module.exports = mapHas; diff --git a/platforms/android/assets/www/node_modules/lodash/_mapSet.js b/platforms/android/assets/www/node_modules/lodash/_mapSet.js new file mode 100644 index 0000000..7a58786 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_mapSet.js @@ -0,0 +1,28 @@ +var Map = require('./_Map'), + assocSet = require('./_assocSet'), + hashSet = require('./_hashSet'), + isKeyable = require('./_isKeyable'); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache object. + */ +function mapSet(key, value) { + var data = this.__data__; + if (isKeyable(key)) { + hashSet(typeof key == 'string' ? data.string : data.hash, key, value); + } else if (Map) { + data.map.set(key, value); + } else { + assocSet(data.map, key, value); + } + return this; +} + +module.exports = mapSet; diff --git a/platforms/android/assets/www/node_modules/lodash/_mapToArray.js b/platforms/android/assets/www/node_modules/lodash/_mapToArray.js new file mode 100644 index 0000000..e2e8a24 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_mapToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `map` to an array. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the converted array. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +module.exports = mapToArray; diff --git a/platforms/android/assets/www/node_modules/lodash/_mergeData.js b/platforms/android/assets/www/node_modules/lodash/_mergeData.js new file mode 100644 index 0000000..ac6fa4c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_mergeData.js @@ -0,0 +1,90 @@ +var composeArgs = require('./_composeArgs'), + composeArgsRight = require('./_composeArgsRight'), + copyArray = require('./_copyArray'), + replaceHolders = require('./_replaceHolders'); + +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + ARY_FLAG = 128, + REARG_FLAG = 256; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * modify function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * combined case where curried functions have `_.ary` and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ +function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); + + var isCombo = + ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || + ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : copyArray(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : copyArray(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : copyArray(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : copyArray(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = copyArray(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; +} + +module.exports = mergeData; diff --git a/platforms/android/assets/www/node_modules/lodash/_mergeDefaults.js b/platforms/android/assets/www/node_modules/lodash/_mergeDefaults.js new file mode 100644 index 0000000..263836b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_mergeDefaults.js @@ -0,0 +1,23 @@ +var baseMerge = require('./_baseMerge'), + isObject = require('./isObject'); + +/** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + * @returns {*} Returns the value to assign. + */ +function mergeDefaults(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + baseMerge(objValue, srcValue, undefined, mergeDefaults, stack.set(srcValue, objValue)); + } + return objValue; +} + +module.exports = mergeDefaults; diff --git a/platforms/android/assets/www/node_modules/lodash/_metaMap.js b/platforms/android/assets/www/node_modules/lodash/_metaMap.js new file mode 100644 index 0000000..0157a0b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_metaMap.js @@ -0,0 +1,6 @@ +var WeakMap = require('./_WeakMap'); + +/** Used to store function metadata. */ +var metaMap = WeakMap && new WeakMap; + +module.exports = metaMap; diff --git a/platforms/android/assets/www/node_modules/lodash/_nativeCreate.js b/platforms/android/assets/www/node_modules/lodash/_nativeCreate.js new file mode 100644 index 0000000..c7aede8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_nativeCreate.js @@ -0,0 +1,6 @@ +var getNative = require('./_getNative'); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; diff --git a/platforms/android/assets/www/node_modules/lodash/_parent.js b/platforms/android/assets/www/node_modules/lodash/_parent.js new file mode 100644 index 0000000..e04ff6e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_parent.js @@ -0,0 +1,16 @@ +var baseSlice = require('./_baseSlice'), + get = require('./get'); + +/** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ +function parent(object, path) { + return path.length == 1 ? object : get(object, baseSlice(path, 0, -1)); +} + +module.exports = parent; diff --git a/platforms/android/assets/www/node_modules/lodash/_reEscape.js b/platforms/android/assets/www/node_modules/lodash/_reEscape.js new file mode 100644 index 0000000..7f47eda --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_reEscape.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEscape = /<%-([\s\S]+?)%>/g; + +module.exports = reEscape; diff --git a/platforms/android/assets/www/node_modules/lodash/_reEvaluate.js b/platforms/android/assets/www/node_modules/lodash/_reEvaluate.js new file mode 100644 index 0000000..6adfc31 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_reEvaluate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEvaluate = /<%([\s\S]+?)%>/g; + +module.exports = reEvaluate; diff --git a/platforms/android/assets/www/node_modules/lodash/_reInterpolate.js b/platforms/android/assets/www/node_modules/lodash/_reInterpolate.js new file mode 100644 index 0000000..d02ff0b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_reInterpolate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/platforms/android/assets/www/node_modules/lodash/_realNames.js b/platforms/android/assets/www/node_modules/lodash/_realNames.js new file mode 100644 index 0000000..aa0d529 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_realNames.js @@ -0,0 +1,4 @@ +/** Used to lookup unminified function names. */ +var realNames = {}; + +module.exports = realNames; diff --git a/platforms/android/assets/www/node_modules/lodash/_reorder.js b/platforms/android/assets/www/node_modules/lodash/_reorder.js new file mode 100644 index 0000000..a3502b0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_reorder.js @@ -0,0 +1,29 @@ +var copyArray = require('./_copyArray'), + isIndex = require('./_isIndex'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ +function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; +} + +module.exports = reorder; diff --git a/platforms/android/assets/www/node_modules/lodash/_replaceHolders.js b/platforms/android/assets/www/node_modules/lodash/_replaceHolders.js new file mode 100644 index 0000000..74360ec --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_replaceHolders.js @@ -0,0 +1,29 @@ +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ +function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; +} + +module.exports = replaceHolders; diff --git a/platforms/android/assets/www/node_modules/lodash/_root.js b/platforms/android/assets/www/node_modules/lodash/_root.js new file mode 100644 index 0000000..d2cfd31 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_root.js @@ -0,0 +1,41 @@ +var checkGlobal = require('./_checkGlobal'); + +/** Used to determine if values are of the language type `Object`. */ +var objectTypes = { + 'function': true, + 'object': true +}; + +/** Detect free variable `exports`. */ +var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + +/** Detect free variable `module`. */ +var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + +/** Detect free variable `self`. */ +var freeSelf = checkGlobal(objectTypes[typeof self] && self); + +/** Detect free variable `window`. */ +var freeWindow = checkGlobal(objectTypes[typeof window] && window); + +/** Detect `this` as the global object. */ +var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + +/** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ +var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + +module.exports = root; diff --git a/platforms/android/assets/www/node_modules/lodash/_setData.js b/platforms/android/assets/www/node_modules/lodash/_setData.js new file mode 100644 index 0000000..8b2efca --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_setData.js @@ -0,0 +1,41 @@ +var baseSetData = require('./_baseSetData'), + now = require('./now'); + +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 150, + HOT_SPAN = 16; + +/** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var setData = (function() { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); + }; +}()); + +module.exports = setData; diff --git a/platforms/android/assets/www/node_modules/lodash/_setToArray.js b/platforms/android/assets/www/node_modules/lodash/_setToArray.js new file mode 100644 index 0000000..6b24f30 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_setToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `set` to an array. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the converted array. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +module.exports = setToArray; diff --git a/platforms/android/assets/www/node_modules/lodash/_stackClear.js b/platforms/android/assets/www/node_modules/lodash/_stackClear.js new file mode 100644 index 0000000..8255536 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_stackClear.js @@ -0,0 +1,12 @@ +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = { 'array': [], 'map': null }; +} + +module.exports = stackClear; diff --git a/platforms/android/assets/www/node_modules/lodash/_stackDelete.js b/platforms/android/assets/www/node_modules/lodash/_stackDelete.js new file mode 100644 index 0000000..7e38a13 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_stackDelete.js @@ -0,0 +1,19 @@ +var assocDelete = require('./_assocDelete'); + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + array = data.array; + + return array ? assocDelete(array, key) : data.map['delete'](key); +} + +module.exports = stackDelete; diff --git a/platforms/android/assets/www/node_modules/lodash/_stackGet.js b/platforms/android/assets/www/node_modules/lodash/_stackGet.js new file mode 100644 index 0000000..20b9d9a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_stackGet.js @@ -0,0 +1,19 @@ +var assocGet = require('./_assocGet'); + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + var data = this.__data__, + array = data.array; + + return array ? assocGet(array, key) : data.map.get(key); +} + +module.exports = stackGet; diff --git a/platforms/android/assets/www/node_modules/lodash/_stackHas.js b/platforms/android/assets/www/node_modules/lodash/_stackHas.js new file mode 100644 index 0000000..7a3b0b9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_stackHas.js @@ -0,0 +1,19 @@ +var assocHas = require('./_assocHas'); + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + var data = this.__data__, + array = data.array; + + return array ? assocHas(array, key) : data.map.has(key); +} + +module.exports = stackHas; diff --git a/platforms/android/assets/www/node_modules/lodash/_stackSet.js b/platforms/android/assets/www/node_modules/lodash/_stackSet.js new file mode 100644 index 0000000..0194d10 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_stackSet.js @@ -0,0 +1,36 @@ +var MapCache = require('./_MapCache'), + assocSet = require('./_assocSet'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache object. + */ +function stackSet(key, value) { + var data = this.__data__, + array = data.array; + + if (array) { + if (array.length < (LARGE_ARRAY_SIZE - 1)) { + assocSet(array, key, value); + } else { + data.array = null; + data.map = new MapCache(array); + } + } + var map = data.map; + if (map) { + map.set(key, value); + } + return this; +} + +module.exports = stackSet; diff --git a/platforms/android/assets/www/node_modules/lodash/_stringSize.js b/platforms/android/assets/www/node_modules/lodash/_stringSize.js new file mode 100644 index 0000000..7aa9f41 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_stringSize.js @@ -0,0 +1,48 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + if (!(string && reHasComplexSymbol.test(string))) { + return string.length; + } + var result = reComplexSymbol.lastIndex = 0; + while (reComplexSymbol.test(string)) { + result++; + } + return result; +} + +module.exports = stringSize; diff --git a/platforms/android/assets/www/node_modules/lodash/_stringToArray.js b/platforms/android/assets/www/node_modules/lodash/_stringToArray.js new file mode 100644 index 0000000..90986f0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_stringToArray.js @@ -0,0 +1,38 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return string.match(reComplexSymbol); +} + +module.exports = stringToArray; diff --git a/platforms/android/assets/www/node_modules/lodash/_stringToPath.js b/platforms/android/assets/www/node_modules/lodash/_stringToPath.js new file mode 100644 index 0000000..a8fd82a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_stringToPath.js @@ -0,0 +1,24 @@ +var toString = require('./toString'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +function stringToPath(string) { + var result = []; + toString(string).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +} + +module.exports = stringToPath; diff --git a/platforms/android/assets/www/node_modules/lodash/_unescapeHtmlChar.js b/platforms/android/assets/www/node_modules/lodash/_unescapeHtmlChar.js new file mode 100644 index 0000000..28b3454 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_unescapeHtmlChar.js @@ -0,0 +1,22 @@ +/** Used to map HTML entities to characters. */ +var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' +}; + +/** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ +function unescapeHtmlChar(chr) { + return htmlUnescapes[chr]; +} + +module.exports = unescapeHtmlChar; diff --git a/platforms/android/assets/www/node_modules/lodash/_wrapperClone.js b/platforms/android/assets/www/node_modules/lodash/_wrapperClone.js new file mode 100644 index 0000000..7bb58a2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/_wrapperClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), + LodashWrapper = require('./_LodashWrapper'), + copyArray = require('./_copyArray'); + +/** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ +function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; +} + +module.exports = wrapperClone; diff --git a/platforms/android/assets/www/node_modules/lodash/add.js b/platforms/android/assets/www/node_modules/lodash/add.js new file mode 100644 index 0000000..d097850 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/add.js @@ -0,0 +1,29 @@ +/** + * Adds two numbers. + * + * @static + * @memberOf _ + * @category Math + * @param {number} augend The first number in an addition. + * @param {number} addend The second number in an addition. + * @returns {number} Returns the total. + * @example + * + * _.add(6, 4); + * // => 10 + */ +function add(augend, addend) { + var result; + if (augend === undefined && addend === undefined) { + return 0; + } + if (augend !== undefined) { + result = augend; + } + if (addend !== undefined) { + result = result === undefined ? addend : (result + addend); + } + return result; +} + +module.exports = add; diff --git a/platforms/android/assets/www/node_modules/lodash/after.js b/platforms/android/assets/www/node_modules/lodash/after.js new file mode 100644 index 0000000..41b0146 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/after.js @@ -0,0 +1,41 @@ +var toInteger = require('./toInteger'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ +function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; +} + +module.exports = after; diff --git a/platforms/android/assets/www/node_modules/lodash/array.js b/platforms/android/assets/www/node_modules/lodash/array.js new file mode 100644 index 0000000..bfded5c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/array.js @@ -0,0 +1,65 @@ +module.exports = { + 'chunk': require('./chunk'), + 'compact': require('./compact'), + 'concat': require('./concat'), + 'difference': require('./difference'), + 'differenceBy': require('./differenceBy'), + 'differenceWith': require('./differenceWith'), + 'drop': require('./drop'), + 'dropRight': require('./dropRight'), + 'dropRightWhile': require('./dropRightWhile'), + 'dropWhile': require('./dropWhile'), + 'fill': require('./fill'), + 'findIndex': require('./findIndex'), + 'findLastIndex': require('./findLastIndex'), + 'flatten': require('./flatten'), + 'flattenDeep': require('./flattenDeep'), + 'flattenDepth': require('./flattenDepth'), + 'fromPairs': require('./fromPairs'), + 'head': require('./head'), + 'indexOf': require('./indexOf'), + 'initial': require('./initial'), + 'intersection': require('./intersection'), + 'intersectionBy': require('./intersectionBy'), + 'intersectionWith': require('./intersectionWith'), + 'join': require('./join'), + 'last': require('./last'), + 'lastIndexOf': require('./lastIndexOf'), + 'pull': require('./pull'), + 'pullAll': require('./pullAll'), + 'pullAllBy': require('./pullAllBy'), + 'pullAllWith': require('./pullAllWith'), + 'pullAt': require('./pullAt'), + 'remove': require('./remove'), + 'reverse': require('./reverse'), + 'slice': require('./slice'), + 'sortedIndex': require('./sortedIndex'), + 'sortedIndexBy': require('./sortedIndexBy'), + 'sortedIndexOf': require('./sortedIndexOf'), + 'sortedLastIndex': require('./sortedLastIndex'), + 'sortedLastIndexBy': require('./sortedLastIndexBy'), + 'sortedLastIndexOf': require('./sortedLastIndexOf'), + 'sortedUniq': require('./sortedUniq'), + 'sortedUniqBy': require('./sortedUniqBy'), + 'tail': require('./tail'), + 'take': require('./take'), + 'takeRight': require('./takeRight'), + 'takeRightWhile': require('./takeRightWhile'), + 'takeWhile': require('./takeWhile'), + 'union': require('./union'), + 'unionBy': require('./unionBy'), + 'unionWith': require('./unionWith'), + 'uniq': require('./uniq'), + 'uniqBy': require('./uniqBy'), + 'uniqWith': require('./uniqWith'), + 'unzip': require('./unzip'), + 'unzipWith': require('./unzipWith'), + 'without': require('./without'), + 'xor': require('./xor'), + 'xorBy': require('./xorBy'), + 'xorWith': require('./xorWith'), + 'zip': require('./zip'), + 'zipObject': require('./zipObject'), + 'zipObjectDeep': require('./zipObjectDeep'), + 'zipWith': require('./zipWith') +}; diff --git a/platforms/android/assets/www/node_modules/lodash/ary.js b/platforms/android/assets/www/node_modules/lodash/ary.js new file mode 100644 index 0000000..b3906ac --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/ary.js @@ -0,0 +1,28 @@ +var createWrapper = require('./_createWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var ARY_FLAG = 128; + +/** + * Creates a function that accepts up to `n` arguments, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/platforms/android/assets/www/node_modules/lodash/assign.js b/platforms/android/assets/www/node_modules/lodash/assign.js new file mode 100644 index 0000000..123ff49 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/assign.js @@ -0,0 +1,62 @@ +var assignValue = require('./_assignValue'), + copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + isArrayLike = require('./isArrayLike'), + isPrototype = require('./_isPrototype'), + keys = require('./keys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ +var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); + +/** + * Assigns own enumerable properties of source objects to the destination + * object. Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.c = 3; + * } + * + * function Bar() { + * this.e = 5; + * } + * + * Foo.prototype.d = 4; + * Bar.prototype.f = 6; + * + * _.assign({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3, 'e': 5 } + */ +var assign = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } +}); + +module.exports = assign; diff --git a/platforms/android/assets/www/node_modules/lodash/assignIn.js b/platforms/android/assets/www/node_modules/lodash/assignIn.js new file mode 100644 index 0000000..0315ffe --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/assignIn.js @@ -0,0 +1,56 @@ +var assignValue = require('./_assignValue'), + copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + isArrayLike = require('./isArrayLike'), + isPrototype = require('./_isPrototype'), + keysIn = require('./keysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ +var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * function Bar() { + * this.d = 4; + * } + * + * Foo.prototype.c = 3; + * Bar.prototype.e = 5; + * + * _.assignIn({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } + */ +var assignIn = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keysIn(source), object); + return; + } + for (var key in source) { + assignValue(object, key, source[key]); + } +}); + +module.exports = assignIn; diff --git a/platforms/android/assets/www/node_modules/lodash/assignInWith.js b/platforms/android/assets/www/node_modules/lodash/assignInWith.js new file mode 100644 index 0000000..da73ef7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/assignInWith.js @@ -0,0 +1,36 @@ +var copyObjectWith = require('./_copyObjectWith'), + createAssigner = require('./_createAssigner'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.assignIn` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keysIn(source), object, customizer); +}); + +module.exports = assignInWith; diff --git a/platforms/android/assets/www/node_modules/lodash/assignWith.js b/platforms/android/assets/www/node_modules/lodash/assignWith.js new file mode 100644 index 0000000..eb7915b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/assignWith.js @@ -0,0 +1,35 @@ +var copyObjectWith = require('./_copyObjectWith'), + createAssigner = require('./_createAssigner'), + keys = require('./keys'); + +/** + * This method is like `_.assign` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keys(source), object, customizer); +}); + +module.exports = assignWith; diff --git a/platforms/android/assets/www/node_modules/lodash/at.js b/platforms/android/assets/www/node_modules/lodash/at.js new file mode 100644 index 0000000..cb35a54 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/at.js @@ -0,0 +1,29 @@ +var baseAt = require('./_baseAt'), + baseFlatten = require('./_baseFlatten'), + rest = require('./rest'); + +/** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths of elements to pick, + * specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + * + * _.at(['a', 'b', 'c'], 0, 2); + * // => ['a', 'c'] + */ +var at = rest(function(object, paths) { + return baseAt(object, baseFlatten(paths, 1)); +}); + +module.exports = at; diff --git a/platforms/android/assets/www/node_modules/lodash/attempt.js b/platforms/android/assets/www/node_modules/lodash/attempt.js new file mode 100644 index 0000000..52bc3e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/attempt.js @@ -0,0 +1,33 @@ +var apply = require('./_apply'), + isError = require('./isError'), + rest = require('./rest'); + +/** + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Util + * @param {Function} func The function to attempt. + * @returns {*} Returns the `func` result or error object. + * @example + * + * // Avoid throwing errors for invalid selectors. + * var elements = _.attempt(function(selector) { + * return document.querySelectorAll(selector); + * }, '>_>'); + * + * if (_.isError(elements)) { + * elements = []; + * } + */ +var attempt = rest(function(func, args) { + try { + return apply(func, undefined, args); + } catch (e) { + return isError(e) ? e : new Error(e); + } +}); + +module.exports = attempt; diff --git a/platforms/android/assets/www/node_modules/lodash/before.js b/platforms/android/assets/www/node_modules/lodash/before.js new file mode 100644 index 0000000..47148b1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/before.js @@ -0,0 +1,39 @@ +var toInteger = require('./toInteger'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ +function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; +} + +module.exports = before; diff --git a/platforms/android/assets/www/node_modules/lodash/bind.js b/platforms/android/assets/www/node_modules/lodash/bind.js new file mode 100644 index 0000000..a594063 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/bind.js @@ -0,0 +1,57 @@ +var createWrapper = require('./_createWrapper'), + getPlaceholder = require('./_getPlaceholder'), + replaceHolders = require('./_replaceHolders'), + rest = require('./rest'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ +var bind = rest(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getPlaceholder(bind)); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); +}); + +// Assign default placeholders. +bind.placeholder = {}; + +module.exports = bind; diff --git a/platforms/android/assets/www/node_modules/lodash/bindAll.js b/platforms/android/assets/www/node_modules/lodash/bindAll.js new file mode 100644 index 0000000..ddbc2ff --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/bindAll.js @@ -0,0 +1,39 @@ +var arrayEach = require('./_arrayEach'), + baseFlatten = require('./_baseFlatten'), + bind = require('./bind'), + rest = require('./rest'); + +/** + * Binds methods of an object to the object itself, overwriting the existing + * method. + * + * **Note:** This method doesn't set the "length" property of bound functions. + * + * @static + * @memberOf _ + * @category Util + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} methodNames The object method names to bind, + * specified individually or in arrays. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view, 'onClick'); + * jQuery(element).on('click', view.onClick); + * // => logs 'clicked docs' when clicked + */ +var bindAll = rest(function(object, methodNames) { + arrayEach(baseFlatten(methodNames, 1), function(key) { + object[key] = bind(object[key], object); + }); + return object; +}); + +module.exports = bindAll; diff --git a/platforms/android/assets/www/node_modules/lodash/bindKey.js b/platforms/android/assets/www/node_modules/lodash/bindKey.js new file mode 100644 index 0000000..5f5c982 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/bindKey.js @@ -0,0 +1,67 @@ +var createWrapper = require('./_createWrapper'), + getPlaceholder = require('./_getPlaceholder'), + replaceHolders = require('./_replaceHolders'), + rest = require('./rest'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ +var bindKey = rest(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getPlaceholder(bindKey)); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); +}); + +// Assign default placeholders. +bindKey.placeholder = {}; + +module.exports = bindKey; diff --git a/platforms/android/assets/www/node_modules/lodash/camelCase.js b/platforms/android/assets/www/node_modules/lodash/camelCase.js new file mode 100644 index 0000000..00239e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/camelCase.js @@ -0,0 +1,28 @@ +var capitalize = require('./capitalize'), + createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar'); + * // => 'fooBar' + * + * _.camelCase('__foo_bar__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); +}); + +module.exports = camelCase; diff --git a/platforms/android/assets/www/node_modules/lodash/capitalize.js b/platforms/android/assets/www/node_modules/lodash/capitalize.js new file mode 100644 index 0000000..4daec03 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/capitalize.js @@ -0,0 +1,22 @@ +var toString = require('./toString'), + upperFirst = require('./upperFirst'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} + +module.exports = capitalize; diff --git a/platforms/android/assets/www/node_modules/lodash/castArray.js b/platforms/android/assets/www/node_modules/lodash/castArray.js new file mode 100644 index 0000000..4ea96fc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/castArray.js @@ -0,0 +1,43 @@ +var isArray = require('./isArray'); + +/** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ +function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; +} + +module.exports = castArray; diff --git a/platforms/android/assets/www/node_modules/lodash/ceil.js b/platforms/android/assets/www/node_modules/lodash/ceil.js new file mode 100644 index 0000000..ecf2f12 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/ceil.js @@ -0,0 +1,25 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded up to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} number The number to round up. + * @param {number} [precision=0] The precision to round up to. + * @returns {number} Returns the rounded up number. + * @example + * + * _.ceil(4.006); + * // => 5 + * + * _.ceil(6.004, 2); + * // => 6.01 + * + * _.ceil(6040, -2); + * // => 6100 + */ +var ceil = createRound('ceil'); + +module.exports = ceil; diff --git a/platforms/android/assets/www/node_modules/lodash/chain.js b/platforms/android/assets/www/node_modules/lodash/chain.js new file mode 100644 index 0000000..3300933 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/chain.js @@ -0,0 +1,36 @@ +var lodash = require('./wrapperLodash'); + +/** + * Creates a `lodash` object that wraps `value` with explicit method chaining enabled. + * The result of such method chaining must be unwrapped with `_#value`. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ +function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; +} + +module.exports = chain; diff --git a/platforms/android/assets/www/node_modules/lodash/chunk.js b/platforms/android/assets/www/node_modules/lodash/chunk.js new file mode 100644 index 0000000..429a371 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/chunk.js @@ -0,0 +1,44 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=0] The length of each chunk. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size) { + size = nativeMax(toInteger(size), 0); + + var length = array ? array.length : 0; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; +} + +module.exports = chunk; diff --git a/platforms/android/assets/www/node_modules/lodash/clamp.js b/platforms/android/assets/www/node_modules/lodash/clamp.js new file mode 100644 index 0000000..9e186d8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/clamp.js @@ -0,0 +1,38 @@ +var baseClamp = require('./_baseClamp'), + toNumber = require('./toNumber'); + +/** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ +function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); +} + +module.exports = clamp; diff --git a/platforms/android/assets/www/node_modules/lodash/clone.js b/platforms/android/assets/www/node_modules/lodash/clone.js new file mode 100644 index 0000000..fb83952 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/clone.js @@ -0,0 +1,31 @@ +var baseClone = require('./_baseClone'); + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return baseClone(value, false, true); +} + +module.exports = clone; diff --git a/platforms/android/assets/www/node_modules/lodash/cloneDeep.js b/platforms/android/assets/www/node_modules/lodash/cloneDeep.js new file mode 100644 index 0000000..b8e95d3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/cloneDeep.js @@ -0,0 +1,23 @@ +var baseClone = require('./_baseClone'); + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return baseClone(value, true, true); +} + +module.exports = cloneDeep; diff --git a/platforms/android/assets/www/node_modules/lodash/cloneDeepWith.js b/platforms/android/assets/www/node_modules/lodash/cloneDeepWith.js new file mode 100644 index 0000000..4d04b22 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/cloneDeepWith.js @@ -0,0 +1,33 @@ +var baseClone = require('./_baseClone'); + +/** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ +function cloneDeepWith(value, customizer) { + return baseClone(value, true, true, customizer); +} + +module.exports = cloneDeepWith; diff --git a/platforms/android/assets/www/node_modules/lodash/cloneWith.js b/platforms/android/assets/www/node_modules/lodash/cloneWith.js new file mode 100644 index 0000000..e689231 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/cloneWith.js @@ -0,0 +1,36 @@ +var baseClone = require('./_baseClone'); + +/** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ +function cloneWith(value, customizer) { + return baseClone(value, false, true, customizer); +} + +module.exports = cloneWith; diff --git a/platforms/android/assets/www/node_modules/lodash/collection.js b/platforms/android/assets/www/node_modules/lodash/collection.js new file mode 100644 index 0000000..6d37b3f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/collection.js @@ -0,0 +1,29 @@ +module.exports = { + 'at': require('./at'), + 'countBy': require('./countBy'), + 'each': require('./each'), + 'eachRight': require('./eachRight'), + 'every': require('./every'), + 'filter': require('./filter'), + 'find': require('./find'), + 'findLast': require('./findLast'), + 'flatMap': require('./flatMap'), + 'forEach': require('./forEach'), + 'forEachRight': require('./forEachRight'), + 'groupBy': require('./groupBy'), + 'includes': require('./includes'), + 'invokeMap': require('./invokeMap'), + 'keyBy': require('./keyBy'), + 'map': require('./map'), + 'orderBy': require('./orderBy'), + 'partition': require('./partition'), + 'reduce': require('./reduce'), + 'reduceRight': require('./reduceRight'), + 'reject': require('./reject'), + 'sample': require('./sample'), + 'sampleSize': require('./sampleSize'), + 'shuffle': require('./shuffle'), + 'size': require('./size'), + 'some': require('./some'), + 'sortBy': require('./sortBy') +}; diff --git a/platforms/android/assets/www/node_modules/lodash/commit.js b/platforms/android/assets/www/node_modules/lodash/commit.js new file mode 100644 index 0000000..1f87f50 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/commit.js @@ -0,0 +1,32 @@ +var LodashWrapper = require('./_LodashWrapper'); + +/** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/platforms/android/assets/www/node_modules/lodash/compact.js b/platforms/android/assets/www/node_modules/lodash/compact.js new file mode 100644 index 0000000..e872c20 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/compact.js @@ -0,0 +1,30 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = compact; diff --git a/platforms/android/assets/www/node_modules/lodash/concat.js b/platforms/android/assets/www/node_modules/lodash/concat.js new file mode 100644 index 0000000..1d2b846 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/concat.js @@ -0,0 +1,35 @@ +var arrayConcat = require('./_arrayConcat'), + baseFlatten = require('./_baseFlatten'), + isArray = require('./isArray'), + rest = require('./rest'); + +/** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ +var concat = rest(function(array, values) { + if (!isArray(array)) { + array = array == null ? [] : [Object(array)]; + } + values = baseFlatten(values, 1); + return arrayConcat(array, values); +}); + +module.exports = concat; diff --git a/platforms/android/assets/www/node_modules/lodash/cond.js b/platforms/android/assets/www/node_modules/lodash/cond.js new file mode 100644 index 0000000..593ac9e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/cond.js @@ -0,0 +1,58 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + rest = require('./rest'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that iterates over `pairs` invoking the corresponding + * function of the first predicate to return truthy. The predicate-function + * pairs are invoked with the `this` binding and arguments of the created + * function. + * + * @static + * @memberOf _ + * @category Util + * @param {Array} pairs The predicate-function pairs. + * @returns {Function} Returns the new function. + * @example + * + * var func = _.cond([ + * [_.matches({ 'a': 1 }), _.constant('matches A')], + * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], + * [_.constant(true), _.constant('no match')] + * ]); + * + * func({ 'a': 1, 'b': 2 }); + * // => 'matches A' + * + * func({ 'a': 0, 'b': 1 }); + * // => 'matches B' + * + * func({ 'a': '1', 'b': '2' }); + * // => 'no match' + */ +function cond(pairs) { + var length = pairs ? pairs.length : 0; + + pairs = !length ? [] : arrayMap(pairs, function(pair) { + if (typeof pair[1] != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return [baseIteratee(pair[0]), pair[1]]; + }); + + return rest(function(args) { + var index = -1; + while (++index < length) { + var pair = pairs[index]; + if (apply(pair[0], this, args)) { + return apply(pair[1], this, args); + } + } + }); +} + +module.exports = cond; diff --git a/platforms/android/assets/www/node_modules/lodash/conforms.js b/platforms/android/assets/www/node_modules/lodash/conforms.js new file mode 100644 index 0000000..2bfeca2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/conforms.js @@ -0,0 +1,28 @@ +var baseClone = require('./_baseClone'), + baseConforms = require('./_baseConforms'); + +/** + * Creates a function that invokes the predicate properties of `source` with + * the corresponding property values of a given object, returning `true` if + * all predicates return truthy, else `false`. + * + * @static + * @memberOf _ + * @category Util + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.filter(users, _.conforms({ 'age': _.partial(_.gt, _, 38) })); + * // => [{ 'user': 'fred', 'age': 40 }] + */ +function conforms(source) { + return baseConforms(baseClone(source, true)); +} + +module.exports = conforms; diff --git a/platforms/android/assets/www/node_modules/lodash/constant.js b/platforms/android/assets/www/node_modules/lodash/constant.js new file mode 100644 index 0000000..5844804 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/constant.js @@ -0,0 +1,23 @@ +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new function. + * @example + * + * var object = { 'user': 'fred' }; + * var getter = _.constant(object); + * + * getter() === object; + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +module.exports = constant; diff --git a/platforms/android/assets/www/node_modules/lodash/core.js b/platforms/android/assets/www/node_modules/lodash/core.js new file mode 100644 index 0000000..d8ba4fd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/core.js @@ -0,0 +1,3826 @@ +/** + * @license + * lodash 4.6.1 (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.6.1'; + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for wrapper metadata. */ + var BIND_FLAG = 1, + PARTIAL_FLAG = 32; + + /** Used to compose bitmasks for comparison styles. */ + var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"'`]/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + /** Used to determine if values are of the language type `Object`. */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Detect free variable `exports`. */ + var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + + /** Detect free variable `module`. */ + var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = (freeModule && freeModule.exports === freeExports) + ? freeExports + : undefined; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + + /** Detect free variable `self`. */ + var freeSelf = checkGlobal(objectTypes[typeof self] && self); + + /** Detect free variable `window`. */ + var freeWindow = checkGlobal(objectTypes[typeof window] && window); + + /** Detect `this` as the global object. */ + var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + + /** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ + var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a new array concatenating `array` with `other`. + * + * @private + * @param {Array} array The first array to concatenate. + * @param {Array} other The second array to concatenate. + * @returns {Array} Returns the new concatenated array. + */ + function arrayConcat(array, other) { + return arrayPush(copyArray(array), values); + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? current === current + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of methods like `_.find` and `_.findKey`, without + * support for iteratee shorthands, which iterates over `collection` using + * `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ + function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(chr) { + return htmlEscapes[chr]; + } + + /** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ + function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var Reflect = root.Reflect, + Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + enumerate = Reflect ? Reflect.enumerate : undefined, + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = Object.keys, + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chaining. Methods that operate on and return arrays, collections, and + * functions can be chained together. Methods that retrieve a single value or + * may return a primitive value will automatically end the chain sequence and + * return the unwrapped value. Otherwise, the value must be unwrapped with + * `_#value`. + * + * Explicit chaining, which must be unwrapped with `_#value` in all cases, + * may be enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization to merge iteratee calls; this avoids the creation + * of intermediate arrays and can greatly reduce the number of iteratee executions. + * Sections of a chain sequence qualify for shortcut fusion if the section is + * applied to an array of at least two hundred elements and any iteratees + * accept only one argument. The heuristic for whether a section qualifies + * for shortcut fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatten`, `flattenDeep`, `flattenDepth`, `flip`, `flow`, `flowRight`, + * `fromPairs`, `functions`, `functionsIn`, `groupBy`, `initial`, `intersection`, + * `intersectionBy`, `intersectionWith`, `invert`, `invertBy`, `invokeMap`, + * `iteratee`, `keyBy`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, + * `matches`, `matchesProperty`, `memoize`, `merge`, `mergeWith`, `method`, + * `methodOf`, `mixin`, `negate`, `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, + * `over`, `overArgs`, `overEvery`, `overSome`, `partial`, `partialRight`, + * `partition`, `pick`, `pickBy`, `plant`, `property`, `propertyOf`, `pull`, + * `pullAll`, `pullAllBy`, `pullAllWith`, `pullAt`, `push`, `range`, + * `rangeRight`, `rearg`, `reject`, `remove`, `rest`, `reverse`, `sampleSize`, + * `set`, `setWith`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`, `spread`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `tap`, `throttle`, + * `thru`, `toArray`, `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, + * `transform`, `unary`, `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, + * `uniqWith`, `unset`, `unshift`, `unzip`, `unzipWith`, `update`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, `zipObject`, + * `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `each`, `eachRight`, + * `endsWith`, `eq`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `first`, `floor`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `get`, `gt`, `gte`, `has`, `hasIn`, `head`, `identity`, `includes`, + * `indexOf`, `inRange`, `invoke`, `isArguments`, `isArray`, `isArrayBuffer`, + * `isArrayLike`, `isArrayLikeObject`, `isBoolean`, `isBuffer`, `isDate`, + * `isElement`, `isEmpty`, `isEqual`, `isEqualWith`, `isError`, `isFinite`, + * `isFunction`, `isInteger`, `isLength`, `isMap`, `isMatch`, `isMatchWith`, + * `isNaN`, `isNative`, `isNil`, `isNull`, `isNumber`, `isObject`, `isObjectLike`, + * `isPlainObject`, `isRegExp`, `isSafeInteger`, `isSet`, `isString`, + * `isUndefined`, `isTypedArray`, `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, + * `maxBy`, `mean`, `min`, `minBy`, `noConflict`, `noop`, `now`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toInteger`, `toJSON`, `toLength`, `toLower`, + * `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, `trimEnd`, + * `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, `upperFirst`, + * `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + /*------------------------------------------------------------------------*/ + + /** + * Used by `_.defaults` to customize its `_.assignIn` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function assignInDefaults(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ + function baseCastFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + function baseCreate(proto) { + return isObject(proto) ? objectCreate(proto) : {}; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts an array + * of `func` arguments. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments to provide to `func`. + * @returns {number} Returns the timer id. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (depth > 0 && isArrayLikeObject(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objectToString.call(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = objectToString.call(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + + stack || (stack = []); + var stacked = find(stack, function(entry) { + return entry[0] === object; + }); + if (stacked && stacked[1]) { + return stacked[1] == other; + } + stack.push([object, other]); + if (isSameTag && !objIsObj) { + var result = (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + stack.pop(); + return result; + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var result = equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, equalFunc, customizer, bitmask, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + var type = typeof func; + if (type == 'function') { + return func; + } + return func == null + ? identity + : (type == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.keys` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + return nativeKeys(Object(object)); + } + + /** + * The base implementation of `_.keysIn` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + object = object == null ? object : Object(object); + + var result = []; + for (var key in object) { + result.push(key); + } + return result; + } + + // Fallback for IE < 9 with es6-shim. + if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { + baseKeysIn = function(object) { + return iteratorToArray(enumerate(object)); + }; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ + function baseMatches(source) { + var props = keys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property names. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ + var copyObject = copyObjectWith; + + /** + * This function is like `copyObject` except that it accepts a function to + * customize copied values. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObjectWith(source, props, object, customizer) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : source[key]; + + assignValue(object, key, newValue); + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return rest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = typeof customizer == 'function' + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartialWrapper(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var index = -1, + isPartial = bitmask & PARTIAL_COMPARE_FLAG, + isUnordered = bitmask & UNORDERED_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var result = true; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isUnordered) { + if (!baseSome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack); + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) ? other != +other : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ + var getLength = baseProperty('length'); + + /** + * Creates an array of index keys for `object` values of arrays, + * `arguments` objects, and strings, otherwise `null` is returned. + * + * @private + * @param {Object} object The object to query. + * @returns {Array|null} Returns index keys, else `null`. + */ + function indexKeys(object) { + var length = object ? object.length : undefined; + if (isLength(length) && + (isArray(object) || isString(object) || isArguments(object))) { + return baseTimes(length, String); + } + return null; + } + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + var concat = rest(function(array, values) { + if (!isArray(array)) { + array = array == null ? [] : [Object(array)]; + } + values = baseFlatten(values, 1); + return arrayConcat(array, values); + }); + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return array ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of [`Array#slice`](https://mdn.io/Array/slice) + * to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array ? array.length : 0; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object that wraps `value` with explicit method chaining enabled. + * The result of such method chaining must be unwrapped with `_#value`. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain in order to modify intermediate results. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + function find(collection, predicate) { + return baseFind(collection, baseIteratee(predicate), baseEach); + } + + /** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior use `_.forIn` or `_.forOwn` + * for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(value) { + * console.log(value); + * }); + * // => logs `1` then `2` + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseCastFunction(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, `fill`, + * `invert`, `parseInt`, `random`, `range`, `rangeRight`, `slice`, `some`, + * `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimEnd`, `trimStart`, + * and `words` + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : keys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} [iteratees=[_.identity]] + * The iteratees to sort by, specified individually or in arrays. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, function(o) { return o.user; }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.sortBy(users, 'user', function(o) { + * return Math.floor(o.age / 10); + * }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = rest(function(func, thisArg, partials) { + return createPartialWrapper(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => logs 'deferred' after one or more milliseconds + */ + var defer = rest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ + var delay = rest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = array; + return func.apply(this, otherArgs); + }; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, keys(value)); + } + + /** + * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + function gt(value, other) { + return value > other; + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @type {Function} + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(getLength(value)) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && objectToString.call(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + function isDate(value) { + return isObjectLike(value) && objectToString.call(value) == dateTag; + } + + /** + * Checks if `value` is an empty collection or object. A value is considered + * empty if it's an `arguments` object, array, string, or jQuery-like collection + * with a length of `0` or has no own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are **not** supported. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MAX_VALUE); + * // => true + * + * _.isFinite(3.14); + * // => true + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8 which returns 'object' for typed array and weak map constructors, + // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && objectToString.call(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + function isRegExp(value) { + return isObject(value) && objectToString.call(value) == regexpTag; + } + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + function lt(value, other) { + return value < other; + } + + /** + * Converts `value` to an array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This function is loosely based on [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3); + * // => 3 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3'); + * // => 3 + */ + var toNumber = Number; + + /** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable properties of source objects to the destination + * object. Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.c = 3; + * } + * + * function Bar() { + * this.e = 5; + * } + * + * Foo.prototype.d = 4; + * Bar.prototype.f = 6; + * + * _.assign({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3, 'e': 5 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, keys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * function Bar() { + * this.d = 4; + * } + * + * Foo.prototype.c = 3; + * Bar.prototype.e = 5; + * + * _.assignIn({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keysIn(source), object, customizer); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a `properties` + * object is given its own enumerable properties are assigned to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties ? assign(result, properties) : result; + } + + /** + * Assigns own and inherited enumerable properties of source objects to the + * destination object for all destination properties that resolve to `undefined`. + * Source objects are applied from left to right. Once a property is set, + * additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var defaults = rest(function(args) { + args.push(undefined, assignInDefaults); + return assignInWith.apply(undefined, args); + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * var other = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + var isProto = isPrototype(object); + if (!(isProto || isArrayLike(object))) { + return baseKeys(object); + } + var indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + for (var key in object) { + if (hasOwnProperty.call(object, key) && + !(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(isProto && key == 'constructor')) { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + var index = -1, + isProto = isPrototype(object), + props = baseKeysIn(object), + propsLength = props.length, + indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + while (++index < propsLength) { + var key = props[index]; + if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property names to pick, specified + * individually or in arrays. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = rest(function(object, props) { + return object == null ? {} : basePick(object, baseFlatten(props, 1)); + }); + + /** + * This method is like `_.get` except that if the resolved value is a function + * it's invoked with the `this` binding of its parent object and its result + * is returned. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object ? baseValues(object, keys(object)) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in IE < 9, they can break out of + * attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument given to it. + * + * @static + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name the created callback returns the + * property value for a given element. If `func` is an object the created + * callback returns `true` for elements that contain the equivalent object + * properties, otherwise it returns `false`. + * + * @static + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(callback, func) { + * var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func); + * return !p ? callback(func) : function(object) { + * return (p[2] == '>' ? object[p[1]] > p[3] : object[p[1]] < p[3]); + * }; + * }); + * + * _.filter(users, 'age > 36'); + * // => [{ 'user': 'fred', 'age': 40 }] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. The created function is equivalent to + * `_.isMatch` with a `source` partially applied. + * + * **Note:** This method supports comparing the same values as `_.isEqual`. + * + * @static + * @memberOf _ + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, _.matches({ 'age': 40, 'active': false })); + * // => [{ 'user': 'fred', 'age': 40, 'active': false }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable function properties of a source object to the + * destination object. If `object` is a function then methods are added to + * its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options] The options object. + * @param {boolean} [options.chain=true] Specify whether the functions added + * are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = (isObject(options) && 'chain' in options) ? options.chain : true, + isFunc = isFunction(object); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * A no-operation function that returns `undefined` regardless of the + * arguments it receives. + * + * @static + * @memberOf _ + * @category Util + * @example + * + * var object = { 'user': 'fred' }; + * + * _.noop(object) === undefined; + * // => true + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given the ID is appended to it. + * + * @static + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey + * `undefined` is returned. + * + * @static + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, gt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey + * `undefined` is returned. + * + * @static + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, lt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + // Add functions that return wrapped values when chaining. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add functions to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add functions that return unwrapped values when chaining. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` and `String` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + return func.apply(this.value(), args); + } + return this[chainName](function(value) { + return func.apply(value, args); + }); + }; + }); + + // Add chaining functions to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Expose lodash on the free variable `window` or `self` when available. This + // prevents errors in cases where lodash is loaded by a script tag in the presence + // of an AMD loader. See http://requirejs.org/docs/errors.html#mismatch for more details. + (freeWindow || freeSelf || {})._ = lodash; + + // Some AMD build optimizers like r.js check for condition patterns like the following: + if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + define(function() { + return lodash; + }); + } + // Check for `exports` after `define` in case a build optimizer adds an `exports` object. + else if (freeExports && freeModule) { + // Export for Node.js. + if (moduleExports) { + (freeModule.exports = lodash)._ = lodash; + } + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } +}.call(this)); diff --git a/platforms/android/assets/www/node_modules/lodash/core.min.js b/platforms/android/assets/www/node_modules/lodash/core.min.js new file mode 100644 index 0000000..d6a4405 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/core.min.js @@ -0,0 +1,29 @@ +/** + * @license + * lodash 4.6.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + * Build: `lodash core -o ./dist/lodash.core.js` + */ +;(function(){function n(n,t){for(var r=-1,e=t.length,u=n.length;++r-1&&0==n%1&&(null==t?9007199254740991:t)>n}function a(n){if(Y(n)&&!Pn(n)){if(n instanceof l)return n;if(An.call(n,"__wrapped__")){var t=new l(n.__wrapped__,n.__chain__);return t.__actions__=N(n.__actions__),t}}return new l(n)}function l(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function p(n,t,r,e){var u;return(u=n===an)||(u=xn[r], +u=(n===u||n!==n&&u!==u)&&!An.call(e,r)),u?t:n}function s(n){return X(n)?Fn(n):{}}function h(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(an,r)},t)}function v(n,t){var r=true;return $n(n,function(n,e,u){return r=!!t(n,e,u)}),r}function y(n,t){var r=[];return $n(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function _(t,r,e,u){u||(u=[]);for(var o=-1,i=t.length;++o0&&Y(c)&&L(c)&&(e||Pn(c)||K(c))?r>1?_(c,r-1,e,u):n(u,c):e||(u[u.length]=c); +}return u}function b(n,t){return n&&qn(n,t,en)}function g(n,t){return y(t,function(t){return Q(n[t])})}function j(n,t,r,e,u){return n===t?true:null==n||null==t||!X(n)&&!Y(t)?n!==n&&t!==t:d(n,t,j,r,e,u)}function d(n,t,r,e,u,o){var i=Pn(n),f=Pn(t),a="[object Array]",l="[object Array]";i||(a=kn.call(n),a="[object Arguments]"==a?"[object Object]":a),f||(l=kn.call(t),l="[object Arguments]"==l?"[object Object]":l);var p="[object Object]"==a&&!c(n),f="[object Object]"==l&&!c(t),l=a==l;o||(o=[]);var s=J(o,function(t){ +return t[0]===n});return s&&s[1]?s[1]==t:(o.push([n,t]),l&&!p?(t=i||isTypedArray(n)?I(n,t,r,e,u,o):$(n,t,a),o.pop(),t):2&u||(i=p&&An.call(n,"__wrapped__"),a=f&&An.call(t,"__wrapped__"),!i&&!a)?l?(t=q(n,t,r,e,u,o),o.pop(),t):false:(t=r(i?n.value():n,a?t.value():t,e,u,o),o.pop(),t))}function m(n){var t=typeof n;return"function"==t?n:null==n?cn:("object"==t?x:E)(n)}function w(n){n=null==n?n:Object(n);var t,r=[];for(t in n)r.push(t);return r}function O(n,t){var r=-1,e=L(n)?Array(n.length):[];return $n(n,function(n,u,o){ +e[++r]=t(n,u,o)}),e}function x(n){var t=en(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&j(n[u],r[u],an,3)))return false}return true}}function A(n,t){return n=Object(n),P(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function E(n){return function(t){return null==t?an:t[n]}}function k(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e1?r[u-1]:an,o=typeof o=="function"?(u--,o):an;for(t=Object(t);++ef))return false;for(a=true;++iarguments.length,$n)}function U(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Un(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=an),r}}function V(n){var t;if(typeof n!="function")throw new TypeError("Expected a function"); +return t=In(t===an?n.length-1:Un(t),0),function(){for(var r=arguments,e=-1,u=In(r.length-t,0),o=Array(u);++et}function K(n){return Y(n)&&L(n)&&An.call(n,"callee")&&(!Rn.call(n,"callee")||"[object Arguments]"==kn.call(n))}function L(n){return null!=n&&W(zn(n))&&!Q(n)}function Q(n){return n=X(n)?kn.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n}function W(n){return typeof n=="number"&&n>-1&&0==n%1&&9007199254740991>=n; +}function X(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function Y(n){return!!n&&typeof n=="object"}function Z(n){return typeof n=="number"||Y(n)&&"[object Number]"==kn.call(n)}function nn(n){return typeof n=="string"||!Pn(n)&&Y(n)&&"[object String]"==kn.call(n)}function tn(n,t){return t>n}function rn(n){return typeof n=="string"?n:null==n?"":n+""}function en(n){var t=C(n);if(!t&&!L(n))return Dn(Object(n));var r,e=z(n),u=!!e,e=e||[],o=e.length;for(r in n)!An.call(n,r)||u&&("length"==r||f(r,o))||t&&"constructor"==r||e.push(r); +return e}function un(n){for(var t=-1,r=C(n),e=w(n),u=e.length,o=z(n),i=!!o,o=o||[],c=o.length;++t"'`]/g,sn=RegExp(pn.source),hn=/^(?:0|[1-9]\d*)$/,vn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},yn={"function":true,object:true},_n=yn[typeof exports]&&exports&&!exports.nodeType?exports:an,bn=yn[typeof module]&&module&&!module.nodeType?module:an,gn=bn&&bn.exports===_n?_n:an,jn=o(yn[typeof self]&&self),dn=o(yn[typeof window]&&window),mn=o(yn[typeof this]&&this),wn=o(_n&&bn&&typeof global=="object"&&global)||dn!==(mn&&mn.window)&&dn||jn||mn||Function("return this")(),On=Array.prototype,xn=Object.prototype,An=xn.hasOwnProperty,En=0,kn=xn.toString,Nn=wn._,Sn=wn.Reflect,Tn=Sn?Sn.f:an,Fn=Object.create,Rn=xn.propertyIsEnumerable,Bn=wn.isFinite,Dn=Object.keys,In=Math.max,$n=function(n,t){ +return function(r,e){if(null==r)return r;if(!L(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++oe&&!c||!i||u&&!f&&a||o&&a){r=1;break n}if(e>r&&!u||!a||c&&!o&&i||f&&i){r=-1;break n}}r=0}return r||n.b-t.b; +}),E("c"))},a.tap=function(n,t){return t(n),n},a.thru=function(n,t){return t(n)},a.toArray=function(n){return L(n)?n.length?N(n):[]:on(n)},a.values=on,a.extend=Kn,fn(a,a),a.clone=function(n){return X(n)?Pn(n)?N(n):F(n,en(n)):n},a.escape=function(n){return(n=rn(n))&&sn.test(n)?n.replace(pn,i):n},a.every=function(n,t,r){return t=r?an:t,v(n,m(t))},a.find=J,a.forEach=M,a.has=function(n,t){return null!=n&&An.call(n,t)},a.head=G,a.identity=cn,a.indexOf=function(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?In(e+r,0):r:0, +r=(r||0)-1;for(var u=t===t;++r { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); +}); + +module.exports = countBy; diff --git a/platforms/android/assets/www/node_modules/lodash/create.js b/platforms/android/assets/www/node_modules/lodash/create.js new file mode 100644 index 0000000..dddbd29 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/create.js @@ -0,0 +1,41 @@ +var baseAssign = require('./_baseAssign'), + baseCreate = require('./_baseCreate'); + +/** + * Creates an object that inherits from the `prototype` object. If a `properties` + * object is given its own enumerable properties are assigned to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties) { + var result = baseCreate(prototype); + return properties ? baseAssign(result, properties) : result; +} + +module.exports = create; diff --git a/platforms/android/assets/www/node_modules/lodash/curry.js b/platforms/android/assets/www/node_modules/lodash/curry.js new file mode 100644 index 0000000..1c5e8a5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/curry.js @@ -0,0 +1,56 @@ +var createWrapper = require('./_createWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_FLAG = 8; + +/** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ +function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; +} + +// Assign default placeholders. +curry.placeholder = {}; + +module.exports = curry; diff --git a/platforms/android/assets/www/node_modules/lodash/curryRight.js b/platforms/android/assets/www/node_modules/lodash/curryRight.js new file mode 100644 index 0000000..8521fdc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/curryRight.js @@ -0,0 +1,53 @@ +var createWrapper = require('./_createWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_RIGHT_FLAG = 16; + +/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ +function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; +} + +// Assign default placeholders. +curryRight.placeholder = {}; + +module.exports = curryRight; diff --git a/platforms/android/assets/www/node_modules/lodash/date.js b/platforms/android/assets/www/node_modules/lodash/date.js new file mode 100644 index 0000000..cbf5b41 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./now') +}; diff --git a/platforms/android/assets/www/node_modules/lodash/debounce.js b/platforms/android/assets/www/node_modules/lodash/debounce.js new file mode 100644 index 0000000..45f52ce --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/debounce.js @@ -0,0 +1,177 @@ +var isObject = require('./isObject'), + now = require('./now'), + toNumber = require('./toNumber'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide an options object to indicate whether `func` should be invoked on + * the leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent calls + * to the debounced function return the result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it's invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + leading = false, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(toNumber(options.maxWait) || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + args = maxTimeoutId = thisArg = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function flush() { + if ((timeoutId && trailingCall) || (maxTimeoutId && trailing)) { + result = func.apply(thisArg, args); + } + cancel(); + return result; + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!lastCalled && !maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled); + + var isCalled = (remaining <= 0 || remaining > maxWait) && + (leading || maxTimeoutId); + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; diff --git a/platforms/android/assets/www/node_modules/lodash/deburr.js b/platforms/android/assets/www/node_modules/lodash/deburr.js new file mode 100644 index 0000000..7e75034 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/deburr.js @@ -0,0 +1,39 @@ +var deburrLetter = require('./_deburrLetter'), + toString = require('./toString'); + +/** Used to match latin-1 supplementary letters (excluding mathematical operators). */ +var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0'; + +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']'; + +/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ +var reComboMark = RegExp(rsCombo, 'g'); + +/** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); +} + +module.exports = deburr; diff --git a/platforms/android/assets/www/node_modules/lodash/defaults.js b/platforms/android/assets/www/node_modules/lodash/defaults.js new file mode 100644 index 0000000..eded284 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/defaults.js @@ -0,0 +1,30 @@ +var apply = require('./_apply'), + assignInDefaults = require('./_assignInDefaults'), + assignInWith = require('./assignInWith'), + rest = require('./rest'); + +/** + * Assigns own and inherited enumerable properties of source objects to the + * destination object for all destination properties that resolve to `undefined`. + * Source objects are applied from left to right. Once a property is set, + * additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ +var defaults = rest(function(args) { + args.push(undefined, assignInDefaults); + return apply(assignInWith, undefined, args); +}); + +module.exports = defaults; diff --git a/platforms/android/assets/www/node_modules/lodash/defaultsDeep.js b/platforms/android/assets/www/node_modules/lodash/defaultsDeep.js new file mode 100644 index 0000000..c495aee --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/defaultsDeep.js @@ -0,0 +1,29 @@ +var apply = require('./_apply'), + mergeDefaults = require('./_mergeDefaults'), + mergeWith = require('./mergeWith'), + rest = require('./rest'); + +/** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); + * // => { 'user': { 'name': 'barney', 'age': 36 } } + * + */ +var defaultsDeep = rest(function(args) { + args.push(undefined, mergeDefaults); + return apply(mergeWith, undefined, args); +}); + +module.exports = defaultsDeep; diff --git a/platforms/android/assets/www/node_modules/lodash/defer.js b/platforms/android/assets/www/node_modules/lodash/defer.js new file mode 100644 index 0000000..f492b3d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/defer.js @@ -0,0 +1,25 @@ +var baseDelay = require('./_baseDelay'), + rest = require('./rest'); + +/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => logs 'deferred' after one or more milliseconds + */ +var defer = rest(function(func, args) { + return baseDelay(func, 1, args); +}); + +module.exports = defer; diff --git a/platforms/android/assets/www/node_modules/lodash/delay.js b/platforms/android/assets/www/node_modules/lodash/delay.js new file mode 100644 index 0000000..28d070c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/delay.js @@ -0,0 +1,27 @@ +var baseDelay = require('./_baseDelay'), + rest = require('./rest'), + toNumber = require('./toNumber'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ +var delay = rest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); +}); + +module.exports = delay; diff --git a/platforms/android/assets/www/node_modules/lodash/difference.js b/platforms/android/assets/www/node_modules/lodash/difference.js new file mode 100644 index 0000000..34c26e8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/difference.js @@ -0,0 +1,29 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + isArrayLikeObject = require('./isArrayLikeObject'), + rest = require('./rest'); + +/** + * Creates an array of unique `array` values not included in the other + * given arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. The order of result values is determined by the + * order they occur in the first array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([3, 2, 1], [4, 2]); + * // => [3, 1] + */ +var difference = rest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true)) + : []; +}); + +module.exports = difference; diff --git a/platforms/android/assets/www/node_modules/lodash/differenceBy.js b/platforms/android/assets/www/node_modules/lodash/differenceBy.js new file mode 100644 index 0000000..8c5831e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/differenceBy.js @@ -0,0 +1,40 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseIteratee = require('./_baseIteratee'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'), + rest = require('./rest'); + +/** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. Result values are chosen from the first array. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); + * // => [3.1, 1.3] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ +var differenceBy = rest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true), baseIteratee(iteratee)) + : []; +}); + +module.exports = differenceBy; diff --git a/platforms/android/assets/www/node_modules/lodash/differenceWith.js b/platforms/android/assets/www/node_modules/lodash/differenceWith.js new file mode 100644 index 0000000..88a4a0b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/differenceWith.js @@ -0,0 +1,37 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'), + rest = require('./rest'); + +/** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. Result values + * are chosen from the first array. The comparator is invoked with two arguments: + * (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ +var differenceWith = rest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true), undefined, comparator) + : []; +}); + +module.exports = differenceWith; diff --git a/platforms/android/assets/www/node_modules/lodash/drop.js b/platforms/android/assets/www/node_modules/lodash/drop.js new file mode 100644 index 0000000..3094995 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/drop.js @@ -0,0 +1,37 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = drop; diff --git a/platforms/android/assets/www/node_modules/lodash/dropRight.js b/platforms/android/assets/www/node_modules/lodash/dropRight.js new file mode 100644 index 0000000..61e1268 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/dropRight.js @@ -0,0 +1,38 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/platforms/android/assets/www/node_modules/lodash/dropRightWhile.js b/platforms/android/assets/www/node_modules/lodash/dropRightWhile.js new file mode 100644 index 0000000..0c04ed2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/dropRightWhile.js @@ -0,0 +1,44 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true, true) + : []; +} + +module.exports = dropRightWhile; diff --git a/platforms/android/assets/www/node_modules/lodash/dropWhile.js b/platforms/android/assets/www/node_modules/lodash/dropWhile.js new file mode 100644 index 0000000..72f9448 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/dropWhile.js @@ -0,0 +1,44 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; +} + +module.exports = dropWhile; diff --git a/platforms/android/assets/www/node_modules/lodash/each.js b/platforms/android/assets/www/node_modules/lodash/each.js new file mode 100644 index 0000000..8800f42 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/platforms/android/assets/www/node_modules/lodash/eachRight.js b/platforms/android/assets/www/node_modules/lodash/eachRight.js new file mode 100644 index 0000000..3252b2a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/platforms/android/assets/www/node_modules/lodash/endsWith.js b/platforms/android/assets/www/node_modules/lodash/endsWith.js new file mode 100644 index 0000000..5da6b5e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/endsWith.js @@ -0,0 +1,39 @@ +var baseClamp = require('./_baseClamp'), + toInteger = require('./toInteger'), + toString = require('./toString'); + +/** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search from. + * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ +function endsWith(string, target, position) { + string = toString(string); + target = typeof target == 'string' ? target : (target + ''); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + position -= target.length; + return position >= 0 && string.indexOf(target, position) == position; +} + +module.exports = endsWith; diff --git a/platforms/android/assets/www/node_modules/lodash/eq.js b/platforms/android/assets/www/node_modules/lodash/eq.js new file mode 100644 index 0000000..5df222d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/eq.js @@ -0,0 +1,35 @@ +/** + * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; diff --git a/platforms/android/assets/www/node_modules/lodash/escape.js b/platforms/android/assets/www/node_modules/lodash/escape.js new file mode 100644 index 0000000..62857ed --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/escape.js @@ -0,0 +1,47 @@ +var escapeHtmlChar = require('./_escapeHtmlChar'), + toString = require('./toString'); + +/** Used to match HTML entities and HTML characters. */ +var reUnescapedHtml = /[&<>"'`]/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +/** + * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in IE < 9, they can break out of + * attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; +} + +module.exports = escape; diff --git a/platforms/android/assets/www/node_modules/lodash/escapeRegExp.js b/platforms/android/assets/www/node_modules/lodash/escapeRegExp.js new file mode 100644 index 0000000..52878c1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/escapeRegExp.js @@ -0,0 +1,28 @@ +var toString = require('./toString'); + +/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + +/** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ +function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; +} + +module.exports = escapeRegExp; diff --git a/platforms/android/assets/www/node_modules/lodash/every.js b/platforms/android/assets/www/node_modules/lodash/every.js new file mode 100644 index 0000000..d100d0d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/every.js @@ -0,0 +1,49 @@ +var arrayEvery = require('./_arrayEvery'), + baseEvery = require('./_baseEvery'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = every; diff --git a/platforms/android/assets/www/node_modules/lodash/extend.js b/platforms/android/assets/www/node_modules/lodash/extend.js new file mode 100644 index 0000000..e00166c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/platforms/android/assets/www/node_modules/lodash/extendWith.js b/platforms/android/assets/www/node_modules/lodash/extendWith.js new file mode 100644 index 0000000..dbdcb3b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/platforms/android/assets/www/node_modules/lodash/fill.js b/platforms/android/assets/www/node_modules/lodash/fill.js new file mode 100644 index 0000000..4c0119f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fill.js @@ -0,0 +1,44 @@ +var baseFill = require('./_baseFill'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ +function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/platforms/android/assets/www/node_modules/lodash/filter.js b/platforms/android/assets/www/node_modules/lodash/filter.js new file mode 100644 index 0000000..1df81c4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/filter.js @@ -0,0 +1,44 @@ +var arrayFilter = require('./_arrayFilter'), + baseFilter = require('./_baseFilter'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ +function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = filter; diff --git a/platforms/android/assets/www/node_modules/lodash/find.js b/platforms/android/assets/www/node_modules/lodash/find.js new file mode 100644 index 0000000..c2ba356 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/find.js @@ -0,0 +1,50 @@ +var baseEach = require('./_baseEach'), + baseFind = require('./_baseFind'), + baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +function find(collection, predicate) { + predicate = baseIteratee(predicate, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, baseEach); +} + +module.exports = find; diff --git a/platforms/android/assets/www/node_modules/lodash/findIndex.js b/platforms/android/assets/www/node_modules/lodash/findIndex.js new file mode 100644 index 0000000..5343fd1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/findIndex.js @@ -0,0 +1,43 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate) { + return (array && array.length) + ? baseFindIndex(array, baseIteratee(predicate, 3)) + : -1; +} + +module.exports = findIndex; diff --git a/platforms/android/assets/www/node_modules/lodash/findKey.js b/platforms/android/assets/www/node_modules/lodash/findKey.js new file mode 100644 index 0000000..95d01f3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/findKey.js @@ -0,0 +1,42 @@ +var baseFind = require('./_baseFind'), + baseForOwn = require('./_baseForOwn'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ +function findKey(object, predicate) { + return baseFind(object, baseIteratee(predicate, 3), baseForOwn, true); +} + +module.exports = findKey; diff --git a/platforms/android/assets/www/node_modules/lodash/findLast.js b/platforms/android/assets/www/node_modules/lodash/findLast.js new file mode 100644 index 0000000..0e5d593 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/findLast.js @@ -0,0 +1,33 @@ +var baseEachRight = require('./_baseEachRight'), + baseFind = require('./_baseFind'), + baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ +function findLast(collection, predicate) { + predicate = baseIteratee(predicate, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, true); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, baseEachRight); +} + +module.exports = findLast; diff --git a/platforms/android/assets/www/node_modules/lodash/findLastIndex.js b/platforms/android/assets/www/node_modules/lodash/findLastIndex.js new file mode 100644 index 0000000..2e62b36 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/findLastIndex.js @@ -0,0 +1,43 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ +function findLastIndex(array, predicate) { + return (array && array.length) + ? baseFindIndex(array, baseIteratee(predicate, 3), true) + : -1; +} + +module.exports = findLastIndex; diff --git a/platforms/android/assets/www/node_modules/lodash/findLastKey.js b/platforms/android/assets/www/node_modules/lodash/findLastKey.js new file mode 100644 index 0000000..0380b07 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/findLastKey.js @@ -0,0 +1,42 @@ +var baseFind = require('./_baseFind'), + baseForOwnRight = require('./_baseForOwnRight'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ +function findLastKey(object, predicate) { + return baseFind(object, baseIteratee(predicate, 3), baseForOwnRight, true); +} + +module.exports = findLastKey; diff --git a/platforms/android/assets/www/node_modules/lodash/flatMap.js b/platforms/android/assets/www/node_modules/lodash/flatMap.js new file mode 100644 index 0000000..0117bb4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/flatMap.js @@ -0,0 +1,28 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** + * Creates an array of flattened values by running each element in `collection` + * through `iteratee` and concating its result to the other mapped values. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); +} + +module.exports = flatMap; diff --git a/platforms/android/assets/www/node_modules/lodash/flatten.js b/platforms/android/assets/www/node_modules/lodash/flatten.js new file mode 100644 index 0000000..b8f701d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/flatten.js @@ -0,0 +1,21 @@ +var baseFlatten = require('./_baseFlatten'); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; diff --git a/platforms/android/assets/www/node_modules/lodash/flattenDeep.js b/platforms/android/assets/www/node_modules/lodash/flattenDeep.js new file mode 100644 index 0000000..b96cd56 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/flattenDeep.js @@ -0,0 +1,24 @@ +var baseFlatten = require('./_baseFlatten'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ +function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, INFINITY) : []; +} + +module.exports = flattenDeep; diff --git a/platforms/android/assets/www/node_modules/lodash/flattenDepth.js b/platforms/android/assets/www/node_modules/lodash/flattenDepth.js new file mode 100644 index 0000000..e045711 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/flattenDepth.js @@ -0,0 +1,32 @@ +var baseFlatten = require('./_baseFlatten'), + toInteger = require('./toInteger'); + +/** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ +function flattenDepth(array, depth) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); +} + +module.exports = flattenDepth; diff --git a/platforms/android/assets/www/node_modules/lodash/flip.js b/platforms/android/assets/www/node_modules/lodash/flip.js new file mode 100644 index 0000000..6e14896 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/flip.js @@ -0,0 +1,27 @@ +var createWrapper = require('./_createWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var FLIP_FLAG = 512; + +/** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ +function flip(func) { + return createWrapper(func, FLIP_FLAG); +} + +module.exports = flip; diff --git a/platforms/android/assets/www/node_modules/lodash/floor.js b/platforms/android/assets/www/node_modules/lodash/floor.js new file mode 100644 index 0000000..9bbf097 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/floor.js @@ -0,0 +1,25 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded down to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} number The number to round down. + * @param {number} [precision=0] The precision to round down to. + * @returns {number} Returns the rounded down number. + * @example + * + * _.floor(4.006); + * // => 4 + * + * _.floor(0.046, 2); + * // => 0.04 + * + * _.floor(4060, -2); + * // => 4000 + */ +var floor = createRound('floor'); + +module.exports = floor; diff --git a/platforms/android/assets/www/node_modules/lodash/flow.js b/platforms/android/assets/www/node_modules/lodash/flow.js new file mode 100644 index 0000000..b773405 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/flow.js @@ -0,0 +1,25 @@ +var createFlow = require('./_createFlow'); + +/** + * Creates a function that returns the result of invoking the given functions + * with the `this` binding of the created function, where each successive + * invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @category Util + * @param {...(Function|Function[])} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow(_.add, square); + * addSquare(1, 2); + * // => 9 + */ +var flow = createFlow(); + +module.exports = flow; diff --git a/platforms/android/assets/www/node_modules/lodash/flowRight.js b/platforms/android/assets/www/node_modules/lodash/flowRight.js new file mode 100644 index 0000000..e844822 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/flowRight.js @@ -0,0 +1,24 @@ +var createFlow = require('./_createFlow'); + +/** + * This method is like `_.flow` except that it creates a function that + * invokes the given functions from right to left. + * + * @static + * @memberOf _ + * @category Util + * @param {...(Function|Function[])} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight(square, _.add); + * addSquare(1, 2); + * // => 9 + */ +var flowRight = createFlow(true); + +module.exports = flowRight; diff --git a/platforms/android/assets/www/node_modules/lodash/forEach.js b/platforms/android/assets/www/node_modules/lodash/forEach.js new file mode 100644 index 0000000..a11eb22 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/forEach.js @@ -0,0 +1,40 @@ +var arrayEach = require('./_arrayEach'), + baseCastFunction = require('./_baseCastFunction'), + baseEach = require('./_baseEach'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior use `_.forIn` or `_.forOwn` + * for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(value) { + * console.log(value); + * }); + * // => logs `1` then `2` + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ +function forEach(collection, iteratee) { + return (typeof iteratee == 'function' && isArray(collection)) + ? arrayEach(collection, iteratee) + : baseEach(collection, baseCastFunction(iteratee)); +} + +module.exports = forEach; diff --git a/platforms/android/assets/www/node_modules/lodash/forEachRight.js b/platforms/android/assets/www/node_modules/lodash/forEachRight.js new file mode 100644 index 0000000..ea58e7c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/forEachRight.js @@ -0,0 +1,30 @@ +var arrayEachRight = require('./_arrayEachRight'), + baseCastFunction = require('./_baseCastFunction'), + baseEachRight = require('./_baseEachRight'), + isArray = require('./isArray'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => logs `2` then `1` + */ +function forEachRight(collection, iteratee) { + return (typeof iteratee == 'function' && isArray(collection)) + ? arrayEachRight(collection, iteratee) + : baseEachRight(collection, baseCastFunction(iteratee)); +} + +module.exports = forEachRight; diff --git a/platforms/android/assets/www/node_modules/lodash/forIn.js b/platforms/android/assets/www/node_modules/lodash/forIn.js new file mode 100644 index 0000000..747175f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/forIn.js @@ -0,0 +1,37 @@ +var baseCastFunction = require('./_baseCastFunction'), + baseFor = require('./_baseFor'), + keysIn = require('./keysIn'); + +/** + * Iterates over own and inherited enumerable properties of an object invoking + * `iteratee` for each property. The iteratee is invoked with three arguments: + * (value, key, object). Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a', 'b', then 'c' (iteration order is not guaranteed) + */ +function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, baseCastFunction(iteratee), keysIn); +} + +module.exports = forIn; diff --git a/platforms/android/assets/www/node_modules/lodash/forInRight.js b/platforms/android/assets/www/node_modules/lodash/forInRight.js new file mode 100644 index 0000000..fa74e9e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/forInRight.js @@ -0,0 +1,35 @@ +var baseCastFunction = require('./_baseCastFunction'), + baseForRight = require('./_baseForRight'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c' + */ +function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, baseCastFunction(iteratee), keysIn); +} + +module.exports = forInRight; diff --git a/platforms/android/assets/www/node_modules/lodash/forOwn.js b/platforms/android/assets/www/node_modules/lodash/forOwn.js new file mode 100644 index 0000000..ac5ddc6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/forOwn.js @@ -0,0 +1,34 @@ +var baseCastFunction = require('./_baseCastFunction'), + baseForOwn = require('./_baseForOwn'); + +/** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The iteratee is invoked with three arguments: + * (value, key, object). Iteratee functions may exit iteration early by + * explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ +function forOwn(object, iteratee) { + return object && baseForOwn(object, baseCastFunction(iteratee)); +} + +module.exports = forOwn; diff --git a/platforms/android/assets/www/node_modules/lodash/forOwnRight.js b/platforms/android/assets/www/node_modules/lodash/forOwnRight.js new file mode 100644 index 0000000..7bda5de --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/forOwnRight.js @@ -0,0 +1,32 @@ +var baseCastFunction = require('./_baseCastFunction'), + baseForOwnRight = require('./_baseForOwnRight'); + +/** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b' + */ +function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, baseCastFunction(iteratee)); +} + +module.exports = forOwnRight; diff --git a/platforms/android/assets/www/node_modules/lodash/fp.js b/platforms/android/assets/www/node_modules/lodash/fp.js new file mode 100644 index 0000000..e372dbb --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp.js @@ -0,0 +1,2 @@ +var _ = require('./lodash.min').runInContext(); +module.exports = require('./fp/_baseConvert')(_, _); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/_baseConvert.js b/platforms/android/assets/www/node_modules/lodash/fp/_baseConvert.js new file mode 100644 index 0000000..b074100 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/_baseConvert.js @@ -0,0 +1,319 @@ +var mapping = require('./_mapping'), + mutateMap = mapping.mutate, + fallbackHolder = {}; + +/** + * The base implementation of `convert` which accepts a `util` object of methods + * required to perform conversions. + * + * @param {Object} util The util object. + * @param {string} name The name of the function to wrap. + * @param {Function} func The function to wrap. + * @param {Object} [options] The options object. + * @param {boolean} [options.cap=true] Specify capping iteratee arguments. + * @param {boolean} [options.curry=true] Specify currying. + * @param {boolean} [options.fixed=true] Specify fixed arity. + * @param {boolean} [options.immutable=true] Specify immutable operations. + * @param {boolean} [options.rearg=true] Specify rearranging arguments. + * @returns {Function|Object} Returns the converted function or object. + */ +function baseConvert(util, name, func, options) { + var setPlaceholder, + isLib = typeof name == 'function', + isObj = name === Object(name); + + if (isObj) { + options = func; + func = name; + name = undefined; + } + if (func == null) { + throw new TypeError; + } + options || (options = {}); + + var config = { + 'cap': 'cap' in options ? options.cap : true, + 'curry': 'curry' in options ? options.curry : true, + 'fixed': 'fixed' in options ? options.fixed : true, + 'immutable': 'immutable' in options ? options.immutable : true, + 'rearg': 'rearg' in options ? options.rearg : true + }; + + var forceRearg = ('rearg' in options) && options.rearg, + placeholder = isLib ? func : fallbackHolder; + + var helpers = isLib ? func : { + 'ary': util.ary, + 'clone': util.clone, + 'curry': util.curry, + 'forEach': util.forEach, + 'isArray': util.isArray, + 'isFunction': util.isFunction, + 'iteratee': util.iteratee, + 'keys': util.keys, + 'rearg': util.rearg, + 'spread': util.spread, + 'toPath': util.toPath + }; + + var ary = helpers.ary, + clone = helpers.clone, + curry = helpers.curry, + each = helpers.forEach, + isArray = helpers.isArray, + isFunction = helpers.isFunction, + keys = helpers.keys, + rearg = helpers.rearg, + spread = helpers.spread, + toPath = helpers.toPath; + + var aryMethodKeys = keys(mapping.aryMethod); + + var baseArity = function(func, n) { + return n == 2 + ? function(a, b) { return func.apply(undefined, arguments); } + : function(a) { return func.apply(undefined, arguments); }; + }; + + var baseAry = function(func, n) { + return n == 2 + ? function(a, b) { return func(a, b); } + : function(a) { return func(a); }; + }; + + var cloneArray = function(array) { + var length = array ? array.length : 0, + result = Array(length); + + while (length--) { + result[length] = array[length]; + } + return result; + }; + + var cloneByPath = function(object, path) { + path = toPath(path); + + var index = -1, + length = path.length, + result = clone(Object(object)), + nested = result; + + while (nested != null && ++index < length) { + var key = path[index], + value = nested[key]; + + if (value != null) { + nested[key] = clone(Object(value)); + } + nested = nested[key]; + } + return result; + }; + + var createCloner = function(func) { + return function(object) { + return func({}, object); + }; + }; + + var immutWrap = function(func, cloner) { + return function() { + var length = arguments.length; + if (!length) { + return result; + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var result = args[0] = cloner.apply(undefined, args); + func.apply(undefined, args); + return result; + }; + }; + + var iterateeAry = function(func, n) { + return overArg(func, function(func) { + return typeof func == 'function' ? baseAry(func, n) : func; + }); + }; + + var iterateeRearg = function(func, indexes) { + return overArg(func, function(func) { + var n = indexes.length; + return baseArity(rearg(baseAry(func, n), indexes), n); + }); + }; + + var overArg = function(func, iteratee, retArg) { + return function() { + var length = arguments.length; + if (!length) { + return func(); + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var index = config.rearg ? 0 : (length - 1); + args[index] = iteratee(args[index]); + return func.apply(undefined, args); + }; + }; + + var wrappers = { + 'castArray': function(castArray) { + return function() { + var value = arguments[0]; + return isArray(value) + ? castArray(cloneArray(value)) + : castArray.apply(undefined, arguments); + }; + }, + 'iteratee': function(iteratee) { + return function() { + var func = arguments[0], + arity = arguments[1], + result = iteratee(func, arity), + length = result.length; + + if (config.cap && typeof arity == 'number') { + arity = arity > 2 ? (arity - 2) : 1; + return (length && length <= arity) ? result : baseAry(result, arity); + } + return result; + }; + }, + 'mixin': function(mixin) { + return function(source) { + var func = this; + if (!isFunction(func)) { + return mixin(func, Object(source)); + } + var methods = [], + methodNames = []; + + each(keys(source), function(key) { + var value = source[key]; + if (isFunction(value)) { + methodNames.push(key); + methods.push(func.prototype[key]); + } + }); + + mixin(func, Object(source)); + + each(methodNames, function(methodName, index) { + var method = methods[index]; + if (isFunction(method)) { + func.prototype[methodName] = method; + } else { + delete func.prototype[methodName]; + } + }); + return func; + }; + }, + 'runInContext': function(runInContext) { + return function(context) { + return baseConvert(util, runInContext(context), options); + }; + } + }; + + var wrap = function(name, func) { + name = mapping.aliasToReal[name] || name; + var wrapper = wrappers[name]; + if (wrapper) { + return wrapper(func); + } + var wrapped = func; + if (config.immutable) { + if (mutateMap.array[name]) { + wrapped = immutWrap(func, cloneArray); + } + else if (mutateMap.object[name]) { + wrapped = immutWrap(func, createCloner(func)); + } + else if (mutateMap.set[name]) { + wrapped = immutWrap(func, cloneByPath); + } + } + var result; + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(otherName) { + if (name == otherName) { + var aryN = !isLib && mapping.iterateeAry[name], + reargIndexes = mapping.iterateeRearg[name], + spreadStart = mapping.methodSpread[name]; + + result = wrapped; + if (config.fixed) { + result = spreadStart === undefined + ? ary(result, aryKey) + : spread(result, spreadStart); + } + if (config.rearg && aryKey > 1 && (forceRearg || !mapping.skipRearg[name])) { + result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[aryKey]); + } + if (config.cap) { + if (reargIndexes) { + result = iterateeRearg(result, reargIndexes); + } else if (aryN) { + result = iterateeAry(result, aryN); + } + } + if (config.curry && aryKey > 1) { + result = curry(result, aryKey); + } + return false; + } + }); + return !result; + }); + + result || (result = wrapped); + if (mapping.placeholder[name]) { + setPlaceholder = true; + func.placeholder = result.placeholder = placeholder; + } + return result; + }; + + if (!isObj) { + return wrap(name, func); + } + var _ = func; + + // Iterate over methods for the current ary cap. + var pairs = []; + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(key) { + var func = _[mapping.remap[key] || key]; + if (func) { + pairs.push([key, wrap(key, func)]); + } + }); + }); + + // Assign to `_` leaving `_.prototype` unchanged to allow chaining. + each(pairs, function(pair) { + _[pair[0]] = pair[1]; + }); + + if (setPlaceholder) { + _.placeholder = placeholder; + } + // Wrap the lodash method and its aliases. + each(keys(_), function(key) { + each(mapping.realToAlias[key] || [], function(alias) { + _[alias] = _[key]; + }); + }); + + return _; +} + +module.exports = baseConvert; diff --git a/platforms/android/assets/www/node_modules/lodash/fp/_convertBrowser.js b/platforms/android/assets/www/node_modules/lodash/fp/_convertBrowser.js new file mode 100644 index 0000000..fbd2174 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/_convertBrowser.js @@ -0,0 +1,17 @@ +var baseConvert = require('./_baseConvert'); + +/** + * Converts `lodash` to an immutable auto-curried iteratee-first data-last version. + * + * @param {Function} lodash The lodash function. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function} Returns the converted `lodash`. + */ +function browserConvert(lodash, options) { + return baseConvert(lodash, lodash, options); +} + +if (typeof _ == 'function') { + _ = browserConvert(_.runInContext()); +} +module.exports = browserConvert; diff --git a/platforms/android/assets/www/node_modules/lodash/fp/_mapping.js b/platforms/android/assets/www/node_modules/lodash/fp/_mapping.js new file mode 100644 index 0000000..1d33d4b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/_mapping.js @@ -0,0 +1,243 @@ +/** Used to map aliases to their real names. */ +exports.aliasToReal = { + '__': 'placeholder', + 'all': 'some', + 'allPass': 'overEvery', + 'apply': 'spread', + 'assoc': 'set', + 'assocPath': 'set', + 'compose': 'flowRight', + 'contains': 'includes', + 'dissoc': 'unset', + 'dissocPath': 'unset', + 'each': 'forEach', + 'eachRight': 'forEachRight', + 'equals': 'isEqual', + 'extend': 'assignIn', + 'extendWith': 'assignInWith', + 'first': 'head', + 'init': 'initial', + 'mapObj': 'mapValues', + 'omitAll': 'omit', + 'nAry': 'ary', + 'path': 'get', + 'pathEq': 'matchesProperty', + 'pathOr': 'getOr', + 'pickAll': 'pick', + 'pipe': 'flow', + 'prop': 'get', + 'propOf': 'propertyOf', + 'propOr': 'getOr', + 'somePass': 'overSome', + 'unapply': 'rest', + 'unnest': 'flatten', + 'useWith': 'overArgs', + 'whereEq': 'filter', + 'zipObj': 'zipObject' +}; + +/** Used to map ary to method names. */ +exports.aryMethod = { + '1': [ + 'attempt', 'castArray', 'ceil', 'create', 'curry', 'curryRight', 'floor', + 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin', + 'over', 'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext', + 'spread', 'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words' + ], + '2': [ + 'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey', + 'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN', + 'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference', + 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every', + 'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex', + 'findLastKey', 'flatMap', 'flattenDepth', 'forEach', 'forEachRight', 'forIn', + 'forInRight', 'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has', + 'hasIn', 'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap', + 'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map', + 'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit', + 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial', + 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll', 'pullAt', + 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', 'repeat', 'result', + 'sampleSize', 'some', 'sortBy', 'sortedIndex', 'sortedIndexOf', 'sortedLastIndex', + 'sortedLastIndexOf', 'sortedUniqBy', 'split', 'startsWith', 'subtract', 'sumBy', + 'take', 'takeRight', 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', + 'times', 'trimChars', 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', + 'uniqBy', 'uniqWith', 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', + 'zipObject', 'zipObjectDeep' + ], + '3': [ + 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', + 'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith', + 'isMatchWith', 'mergeWith', 'orderBy', 'pullAllBy', 'pullAllWith', 'reduce', + 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', + 'transform', 'unionBy', 'unionWith', 'update', 'xorBy', 'xorWith', 'zipWith' + ], + '4': [ + 'fill', 'setWith', 'updateWith' + ] +}; + +/** Used to map ary to rearg configs. */ +exports.aryRearg = { + '2': [1, 0], + '3': [2, 0, 1], + '4': [3, 2, 0, 1] +}; + +/** Used to map method names to their iteratee ary. */ +exports.iterateeAry = { + 'assignWith': 2, + 'assignInWith': 2, + 'cloneDeepWith': 1, + 'cloneWith': 1, + 'dropRightWhile': 1, + 'dropWhile': 1, + 'every': 1, + 'filter': 1, + 'find': 1, + 'findIndex': 1, + 'findKey': 1, + 'findLast': 1, + 'findLastIndex': 1, + 'findLastKey': 1, + 'flatMap': 1, + 'forEach': 1, + 'forEachRight': 1, + 'forIn': 1, + 'forInRight': 1, + 'forOwn': 1, + 'forOwnRight': 1, + 'isEqualWith': 2, + 'isMatchWith': 2, + 'map': 1, + 'mapKeys': 1, + 'mapValues': 1, + 'partition': 1, + 'reduce': 2, + 'reduceRight': 2, + 'reject': 1, + 'remove': 1, + 'some': 1, + 'takeRightWhile': 1, + 'takeWhile': 1, + 'times': 1, + 'transform': 2 +}; + +/** Used to map method names to iteratee rearg configs. */ +exports.iterateeRearg = { + 'mapKeys': [1] +}; + +/** Used to map method names to rearg configs. */ +exports.methodRearg = { + 'assignInWith': [1, 2, 0], + 'assignWith': [1, 2, 0], + 'getOr': [2, 1, 0], + 'isMatchWith': [2, 1, 0], + 'mergeWith': [1, 2, 0], + 'pullAllBy': [2, 1, 0], + 'pullAllWith': [2, 1, 0], + 'setWith': [3, 1, 2, 0], + 'sortedIndexBy': [2, 1, 0], + 'sortedLastIndexBy': [2, 1, 0], + 'updateWith': [3, 1, 2, 0], + 'zipWith': [1, 2, 0] +}; + +/** Used to map method names to spread configs. */ +exports.methodSpread = { + 'partial': 1, + 'partialRight': 1 +}; + +/** Used to identify methods which mutate arrays or objects. */ +exports.mutate = { + 'array': { + 'fill': true, + 'pull': true, + 'pullAll': true, + 'pullAllBy': true, + 'pullAllWith': true, + 'pullAt': true, + 'remove': true, + 'reverse': true + }, + 'object': { + 'assign': true, + 'assignIn': true, + 'assignInWith': true, + 'assignWith': true, + 'defaults': true, + 'defaultsDeep': true, + 'merge': true, + 'mergeWith': true + }, + 'set': { + 'set': true, + 'setWith': true, + 'unset': true, + 'update': true, + 'updateWith': true + } +}; + +/** Used to track methods with placeholder support */ +exports.placeholder = { + 'bind': true, + 'bindKey': true, + 'curry': true, + 'curryRight': true, + 'partial': true, + 'partialRight': true +}; + +/** Used to map real names to their aliases. */ +exports.realToAlias = (function() { + var hasOwnProperty = Object.prototype.hasOwnProperty, + object = exports.aliasToReal, + result = {}; + + for (var key in object) { + var value = object[key]; + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + } + return result; +}()); + +/** Used to map method names to other names. */ +exports.remap = { + 'curryN': 'curry', + 'curryRightN': 'curryRight', + 'getOr': 'get', + 'trimChars': 'trim', + 'trimCharsEnd': 'trimEnd', + 'trimCharsStart': 'trimStart' +}; + +/** Used to track methods that skip `_.rearg`. */ +exports.skipRearg = { + 'add': true, + 'assign': true, + 'assignIn': true, + 'concat': true, + 'difference': true, + 'gt': true, + 'gte': true, + 'lt': true, + 'lte': true, + 'matchesProperty': true, + 'merge': true, + 'partial': true, + 'partialRight': true, + 'random': true, + 'range': true, + 'rangeRight': true, + 'subtract': true, + 'zip': true, + 'zipObject': true +}; diff --git a/platforms/android/assets/www/node_modules/lodash/fp/_util.js b/platforms/android/assets/www/node_modules/lodash/fp/_util.js new file mode 100644 index 0000000..afa811b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/_util.js @@ -0,0 +1,13 @@ +module.exports = { + 'ary': require('../ary'), + 'clone': require('../clone'), + 'curry': require('../curry'), + 'forEach': require('../_arrayEach'), + 'isArray': require('../isArray'), + 'isFunction': require('../isFunction'), + 'iteratee': require('../iteratee'), + 'keys': require('../_baseKeys'), + 'rearg': require('../rearg'), + 'spread': require('../spread'), + 'toPath': require('../toPath') +}; diff --git a/platforms/android/assets/www/node_modules/lodash/fp/add.js b/platforms/android/assets/www/node_modules/lodash/fp/add.js new file mode 100644 index 0000000..c51b8fa --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/add.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('add', require('../add')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/after.js b/platforms/android/assets/www/node_modules/lodash/fp/after.js new file mode 100644 index 0000000..83691b7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/after.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('after', require('../after')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/all.js b/platforms/android/assets/www/node_modules/lodash/fp/all.js new file mode 100644 index 0000000..900ac25 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/all.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/allPass.js b/platforms/android/assets/www/node_modules/lodash/fp/allPass.js new file mode 100644 index 0000000..79b73ef --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/allPass.js @@ -0,0 +1 @@ +module.exports = require('./overEvery'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/apply.js b/platforms/android/assets/www/node_modules/lodash/fp/apply.js new file mode 100644 index 0000000..2b75712 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/apply.js @@ -0,0 +1 @@ +module.exports = require('./spread'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/array.js b/platforms/android/assets/www/node_modules/lodash/fp/array.js new file mode 100644 index 0000000..fe939c2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/array.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../array')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/ary.js b/platforms/android/assets/www/node_modules/lodash/fp/ary.js new file mode 100644 index 0000000..0f75d18 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/ary.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('ary', require('../ary')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/assign.js b/platforms/android/assets/www/node_modules/lodash/fp/assign.js new file mode 100644 index 0000000..ad02bcb --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/assign.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('assign', require('../assign')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/assignIn.js b/platforms/android/assets/www/node_modules/lodash/fp/assignIn.js new file mode 100644 index 0000000..1ed4f0d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/assignIn.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('assignIn', require('../assignIn')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/assignInWith.js b/platforms/android/assets/www/node_modules/lodash/fp/assignInWith.js new file mode 100644 index 0000000..882145d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/assignInWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('assignInWith', require('../assignInWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/assignWith.js b/platforms/android/assets/www/node_modules/lodash/fp/assignWith.js new file mode 100644 index 0000000..1ff0527 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/assignWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('assignWith', require('../assignWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/assoc.js b/platforms/android/assets/www/node_modules/lodash/fp/assoc.js new file mode 100644 index 0000000..7648820 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/assoc.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/assocPath.js b/platforms/android/assets/www/node_modules/lodash/fp/assocPath.js new file mode 100644 index 0000000..7648820 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/assocPath.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/at.js b/platforms/android/assets/www/node_modules/lodash/fp/at.js new file mode 100644 index 0000000..5da3525 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/at.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('at', require('../at')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/attempt.js b/platforms/android/assets/www/node_modules/lodash/fp/attempt.js new file mode 100644 index 0000000..d8a3be5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/attempt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('attempt', require('../attempt')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/before.js b/platforms/android/assets/www/node_modules/lodash/fp/before.js new file mode 100644 index 0000000..f2954a6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/before.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('before', require('../before')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/bind.js b/platforms/android/assets/www/node_modules/lodash/fp/bind.js new file mode 100644 index 0000000..e054a48 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/bind.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('bind', require('../bind')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/bindAll.js b/platforms/android/assets/www/node_modules/lodash/fp/bindAll.js new file mode 100644 index 0000000..495b75c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/bindAll.js @@ -0,0 +1 @@ +module.exports = require('../bindAll'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/bindKey.js b/platforms/android/assets/www/node_modules/lodash/fp/bindKey.js new file mode 100644 index 0000000..0b588c7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/bindKey.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('bindKey', require('../bindKey')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/camelCase.js b/platforms/android/assets/www/node_modules/lodash/fp/camelCase.js new file mode 100644 index 0000000..328041e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/camelCase.js @@ -0,0 +1 @@ +module.exports = require('../camelCase'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/capitalize.js b/platforms/android/assets/www/node_modules/lodash/fp/capitalize.js new file mode 100644 index 0000000..186e6d9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/capitalize.js @@ -0,0 +1 @@ +module.exports = require('../capitalize'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/castArray.js b/platforms/android/assets/www/node_modules/lodash/fp/castArray.js new file mode 100644 index 0000000..2a75bb9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/castArray.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('castArray', require('../castArray')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/ceil.js b/platforms/android/assets/www/node_modules/lodash/fp/ceil.js new file mode 100644 index 0000000..7c3774b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/ceil.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('ceil', require('../ceil')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/chain.js b/platforms/android/assets/www/node_modules/lodash/fp/chain.js new file mode 100644 index 0000000..2f139cc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/chain.js @@ -0,0 +1 @@ +module.exports = require('../chain'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/chunk.js b/platforms/android/assets/www/node_modules/lodash/fp/chunk.js new file mode 100644 index 0000000..9d32b8a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/chunk.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('chunk', require('../chunk')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/clamp.js b/platforms/android/assets/www/node_modules/lodash/fp/clamp.js new file mode 100644 index 0000000..8ec3d9d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/clamp.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('clamp', require('../clamp')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/clone.js b/platforms/android/assets/www/node_modules/lodash/fp/clone.js new file mode 100644 index 0000000..afd2c15 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/clone.js @@ -0,0 +1 @@ +module.exports = require('../clone'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/cloneDeep.js b/platforms/android/assets/www/node_modules/lodash/fp/cloneDeep.js new file mode 100644 index 0000000..a17a6f8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/cloneDeep.js @@ -0,0 +1 @@ +module.exports = require('../cloneDeep'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/cloneDeepWith.js b/platforms/android/assets/www/node_modules/lodash/fp/cloneDeepWith.js new file mode 100644 index 0000000..01c7fef --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/cloneDeepWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('cloneDeepWith', require('../cloneDeepWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/cloneWith.js b/platforms/android/assets/www/node_modules/lodash/fp/cloneWith.js new file mode 100644 index 0000000..9e9d783 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/cloneWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('cloneWith', require('../cloneWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/collection.js b/platforms/android/assets/www/node_modules/lodash/fp/collection.js new file mode 100644 index 0000000..fc8b328 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/collection.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../collection')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/commit.js b/platforms/android/assets/www/node_modules/lodash/fp/commit.js new file mode 100644 index 0000000..04e9eb9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/commit.js @@ -0,0 +1 @@ +module.exports = require('../commit'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/compact.js b/platforms/android/assets/www/node_modules/lodash/fp/compact.js new file mode 100644 index 0000000..b2ed9c7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/compact.js @@ -0,0 +1 @@ +module.exports = require('../compact'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/compose.js b/platforms/android/assets/www/node_modules/lodash/fp/compose.js new file mode 100644 index 0000000..1954e94 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/concat.js b/platforms/android/assets/www/node_modules/lodash/fp/concat.js new file mode 100644 index 0000000..c13a92a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/concat.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('concat', require('../concat')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/cond.js b/platforms/android/assets/www/node_modules/lodash/fp/cond.js new file mode 100644 index 0000000..a150a89 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/cond.js @@ -0,0 +1 @@ +module.exports = require('../cond'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/conforms.js b/platforms/android/assets/www/node_modules/lodash/fp/conforms.js new file mode 100644 index 0000000..387dde1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/conforms.js @@ -0,0 +1 @@ +module.exports = require('../conforms'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/constant.js b/platforms/android/assets/www/node_modules/lodash/fp/constant.js new file mode 100644 index 0000000..3bcd276 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/constant.js @@ -0,0 +1 @@ +module.exports = require('../constant'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/contains.js b/platforms/android/assets/www/node_modules/lodash/fp/contains.js new file mode 100644 index 0000000..594722a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/convert.js b/platforms/android/assets/www/node_modules/lodash/fp/convert.js new file mode 100644 index 0000000..a1d266f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/convert.js @@ -0,0 +1,17 @@ +var baseConvert = require('./_baseConvert'), + util = require('./_util'); + +/** + * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last + * version. If `name` is an object its methods will be converted. + * + * @param {string} name The name of the function to wrap. + * @param {Function} [func] The function to wrap. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function|Object} Returns the converted function or object. + */ +function convert(name, func, options) { + return baseConvert(util, name, func, options); +} + +module.exports = convert; diff --git a/platforms/android/assets/www/node_modules/lodash/fp/countBy.js b/platforms/android/assets/www/node_modules/lodash/fp/countBy.js new file mode 100644 index 0000000..ee4b942 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/countBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('countBy', require('../countBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/create.js b/platforms/android/assets/www/node_modules/lodash/fp/create.js new file mode 100644 index 0000000..bdad771 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/create.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('create', require('../create')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/curry.js b/platforms/android/assets/www/node_modules/lodash/fp/curry.js new file mode 100644 index 0000000..d64722c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/curry.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('curry', require('../curry')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/curryN.js b/platforms/android/assets/www/node_modules/lodash/fp/curryN.js new file mode 100644 index 0000000..f33f7fc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/curryN.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('curryN', require('../curry')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/curryRight.js b/platforms/android/assets/www/node_modules/lodash/fp/curryRight.js new file mode 100644 index 0000000..2e04709 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/curryRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('curryRight', require('../curryRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/curryRightN.js b/platforms/android/assets/www/node_modules/lodash/fp/curryRightN.js new file mode 100644 index 0000000..510e4e4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/curryRightN.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('curryRightN', require('../curryRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/date.js b/platforms/android/assets/www/node_modules/lodash/fp/date.js new file mode 100644 index 0000000..82cb952 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/date.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../date')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/debounce.js b/platforms/android/assets/www/node_modules/lodash/fp/debounce.js new file mode 100644 index 0000000..a6b0407 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/debounce.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('debounce', require('../debounce')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/deburr.js b/platforms/android/assets/www/node_modules/lodash/fp/deburr.js new file mode 100644 index 0000000..f8e1a49 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/deburr.js @@ -0,0 +1 @@ +module.exports = require('../deburr'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/defaults.js b/platforms/android/assets/www/node_modules/lodash/fp/defaults.js new file mode 100644 index 0000000..7c3b3ab --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/defaults.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('defaults', require('../defaults')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/defaultsDeep.js b/platforms/android/assets/www/node_modules/lodash/fp/defaultsDeep.js new file mode 100644 index 0000000..c7480e2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/defaultsDeep.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('defaultsDeep', require('../defaultsDeep')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/defer.js b/platforms/android/assets/www/node_modules/lodash/fp/defer.js new file mode 100644 index 0000000..4126727 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/defer.js @@ -0,0 +1 @@ +module.exports = require('../defer'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/delay.js b/platforms/android/assets/www/node_modules/lodash/fp/delay.js new file mode 100644 index 0000000..cd3b1c3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/delay.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('delay', require('../delay')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/difference.js b/platforms/android/assets/www/node_modules/lodash/fp/difference.js new file mode 100644 index 0000000..aea9ab8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/difference.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('difference', require('../difference')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/differenceBy.js b/platforms/android/assets/www/node_modules/lodash/fp/differenceBy.js new file mode 100644 index 0000000..ab65554 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/differenceBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('differenceBy', require('../differenceBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/differenceWith.js b/platforms/android/assets/www/node_modules/lodash/fp/differenceWith.js new file mode 100644 index 0000000..f932a2e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/differenceWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('differenceWith', require('../differenceWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/dissoc.js b/platforms/android/assets/www/node_modules/lodash/fp/dissoc.js new file mode 100644 index 0000000..7ec7be1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/dissoc.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/dissocPath.js b/platforms/android/assets/www/node_modules/lodash/fp/dissocPath.js new file mode 100644 index 0000000..7ec7be1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/dissocPath.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/drop.js b/platforms/android/assets/www/node_modules/lodash/fp/drop.js new file mode 100644 index 0000000..ccca2d0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/drop.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('drop', require('../drop')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/dropRight.js b/platforms/android/assets/www/node_modules/lodash/fp/dropRight.js new file mode 100644 index 0000000..bd9a2bd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/dropRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('dropRight', require('../dropRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/dropRightWhile.js b/platforms/android/assets/www/node_modules/lodash/fp/dropRightWhile.js new file mode 100644 index 0000000..2dbb2a3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/dropRightWhile.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('dropRightWhile', require('../dropRightWhile')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/dropWhile.js b/platforms/android/assets/www/node_modules/lodash/fp/dropWhile.js new file mode 100644 index 0000000..17e46ff --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/dropWhile.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('dropWhile', require('../dropWhile')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/each.js b/platforms/android/assets/www/node_modules/lodash/fp/each.js new file mode 100644 index 0000000..8800f42 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/eachRight.js b/platforms/android/assets/www/node_modules/lodash/fp/eachRight.js new file mode 100644 index 0000000..3252b2a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/endsWith.js b/platforms/android/assets/www/node_modules/lodash/fp/endsWith.js new file mode 100644 index 0000000..cbe8f8c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/endsWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('endsWith', require('../endsWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/eq.js b/platforms/android/assets/www/node_modules/lodash/fp/eq.js new file mode 100644 index 0000000..518a54d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/eq.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('eq', require('../eq')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/equals.js b/platforms/android/assets/www/node_modules/lodash/fp/equals.js new file mode 100644 index 0000000..e6a5ce0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/equals.js @@ -0,0 +1 @@ +module.exports = require('./isEqual'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/escape.js b/platforms/android/assets/www/node_modules/lodash/fp/escape.js new file mode 100644 index 0000000..e5de9f2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/escape.js @@ -0,0 +1 @@ +module.exports = require('../escape'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/escapeRegExp.js b/platforms/android/assets/www/node_modules/lodash/fp/escapeRegExp.js new file mode 100644 index 0000000..ab18963 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/escapeRegExp.js @@ -0,0 +1 @@ +module.exports = require('../escapeRegExp'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/every.js b/platforms/android/assets/www/node_modules/lodash/fp/every.js new file mode 100644 index 0000000..965f889 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/every.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('every', require('../every')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/extend.js b/platforms/android/assets/www/node_modules/lodash/fp/extend.js new file mode 100644 index 0000000..e00166c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/extendWith.js b/platforms/android/assets/www/node_modules/lodash/fp/extendWith.js new file mode 100644 index 0000000..dbdcb3b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/fill.js b/platforms/android/assets/www/node_modules/lodash/fp/fill.js new file mode 100644 index 0000000..e16f8bf --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/fill.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('fill', require('../fill')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/filter.js b/platforms/android/assets/www/node_modules/lodash/fp/filter.js new file mode 100644 index 0000000..7191a82 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/filter.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('filter', require('../filter')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/find.js b/platforms/android/assets/www/node_modules/lodash/fp/find.js new file mode 100644 index 0000000..5915bbd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/find.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('find', require('../find')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/findIndex.js b/platforms/android/assets/www/node_modules/lodash/fp/findIndex.js new file mode 100644 index 0000000..6bf435c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/findIndex.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findIndex', require('../findIndex')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/findKey.js b/platforms/android/assets/www/node_modules/lodash/fp/findKey.js new file mode 100644 index 0000000..3ff9844 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/findKey.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findKey', require('../findKey')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/findLast.js b/platforms/android/assets/www/node_modules/lodash/fp/findLast.js new file mode 100644 index 0000000..31e169b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/findLast.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findLast', require('../findLast')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/findLastIndex.js b/platforms/android/assets/www/node_modules/lodash/fp/findLastIndex.js new file mode 100644 index 0000000..db41e88 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/findLastIndex.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findLastIndex', require('../findLastIndex')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/findLastKey.js b/platforms/android/assets/www/node_modules/lodash/fp/findLastKey.js new file mode 100644 index 0000000..ffe9e2a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/findLastKey.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('findLastKey', require('../findLastKey')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/first.js b/platforms/android/assets/www/node_modules/lodash/fp/first.js new file mode 100644 index 0000000..53f4ad1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/flatMap.js b/platforms/android/assets/www/node_modules/lodash/fp/flatMap.js new file mode 100644 index 0000000..da249a8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/flatMap.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('flatMap', require('../flatMap')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/flatten.js b/platforms/android/assets/www/node_modules/lodash/fp/flatten.js new file mode 100644 index 0000000..f1c1a62 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/flatten.js @@ -0,0 +1 @@ +module.exports = require('../flatten'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/flattenDeep.js b/platforms/android/assets/www/node_modules/lodash/fp/flattenDeep.js new file mode 100644 index 0000000..c2ff987 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/flattenDeep.js @@ -0,0 +1 @@ +module.exports = require('../flattenDeep'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/flattenDepth.js b/platforms/android/assets/www/node_modules/lodash/fp/flattenDepth.js new file mode 100644 index 0000000..731e27a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/flattenDepth.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('flattenDepth', require('../flattenDepth')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/flip.js b/platforms/android/assets/www/node_modules/lodash/fp/flip.js new file mode 100644 index 0000000..730bbd1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/flip.js @@ -0,0 +1 @@ +module.exports = require('../flip'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/floor.js b/platforms/android/assets/www/node_modules/lodash/fp/floor.js new file mode 100644 index 0000000..f130f8b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/floor.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('floor', require('../floor')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/flow.js b/platforms/android/assets/www/node_modules/lodash/fp/flow.js new file mode 100644 index 0000000..d9943c6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/flow.js @@ -0,0 +1 @@ +module.exports = require('../flow'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/flowRight.js b/platforms/android/assets/www/node_modules/lodash/fp/flowRight.js new file mode 100644 index 0000000..556dc37 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/flowRight.js @@ -0,0 +1 @@ +module.exports = require('../flowRight'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/forEach.js b/platforms/android/assets/www/node_modules/lodash/fp/forEach.js new file mode 100644 index 0000000..d715ea6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/forEach.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forEach', require('../forEach')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/forEachRight.js b/platforms/android/assets/www/node_modules/lodash/fp/forEachRight.js new file mode 100644 index 0000000..90dd8dd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/forEachRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forEachRight', require('../forEachRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/forIn.js b/platforms/android/assets/www/node_modules/lodash/fp/forIn.js new file mode 100644 index 0000000..90a8f07 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/forIn.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forIn', require('../forIn')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/forInRight.js b/platforms/android/assets/www/node_modules/lodash/fp/forInRight.js new file mode 100644 index 0000000..505258f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/forInRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forInRight', require('../forInRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/forOwn.js b/platforms/android/assets/www/node_modules/lodash/fp/forOwn.js new file mode 100644 index 0000000..6fef1e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/forOwn.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forOwn', require('../forOwn')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/forOwnRight.js b/platforms/android/assets/www/node_modules/lodash/fp/forOwnRight.js new file mode 100644 index 0000000..11ff1fd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/forOwnRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('forOwnRight', require('../forOwnRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/fromPairs.js b/platforms/android/assets/www/node_modules/lodash/fp/fromPairs.js new file mode 100644 index 0000000..f5c3cb8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/fromPairs.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('fromPairs', require('../fromPairs')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/function.js b/platforms/android/assets/www/node_modules/lodash/fp/function.js new file mode 100644 index 0000000..dfe69b1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/function.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../function')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/functions.js b/platforms/android/assets/www/node_modules/lodash/fp/functions.js new file mode 100644 index 0000000..bb1cb93 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/functions.js @@ -0,0 +1 @@ +module.exports = require('../functions'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/functionsIn.js b/platforms/android/assets/www/node_modules/lodash/fp/functionsIn.js new file mode 100644 index 0000000..d375213 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/functionsIn.js @@ -0,0 +1 @@ +module.exports = require('../functionsIn'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/get.js b/platforms/android/assets/www/node_modules/lodash/fp/get.js new file mode 100644 index 0000000..a054c9d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/get.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('get', require('../get')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/getOr.js b/platforms/android/assets/www/node_modules/lodash/fp/getOr.js new file mode 100644 index 0000000..c46f2e9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/getOr.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('getOr', require('../get')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/groupBy.js b/platforms/android/assets/www/node_modules/lodash/fp/groupBy.js new file mode 100644 index 0000000..6588856 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/groupBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('groupBy', require('../groupBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/gt.js b/platforms/android/assets/www/node_modules/lodash/fp/gt.js new file mode 100644 index 0000000..5b92de9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/gt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('gt', require('../gt')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/gte.js b/platforms/android/assets/www/node_modules/lodash/fp/gte.js new file mode 100644 index 0000000..3a40250 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/gte.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('gte', require('../gte')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/has.js b/platforms/android/assets/www/node_modules/lodash/fp/has.js new file mode 100644 index 0000000..e37db9a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/has.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('has', require('../has')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/hasIn.js b/platforms/android/assets/www/node_modules/lodash/fp/hasIn.js new file mode 100644 index 0000000..84d7815 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/hasIn.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('hasIn', require('../hasIn')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/head.js b/platforms/android/assets/www/node_modules/lodash/fp/head.js new file mode 100644 index 0000000..bd97a7b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/head.js @@ -0,0 +1 @@ +module.exports = require('../head'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/identity.js b/platforms/android/assets/www/node_modules/lodash/fp/identity.js new file mode 100644 index 0000000..6d007dc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/identity.js @@ -0,0 +1 @@ +module.exports = require('../identity'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/inRange.js b/platforms/android/assets/www/node_modules/lodash/fp/inRange.js new file mode 100644 index 0000000..fc55e1c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/inRange.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('inRange', require('../inRange')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/includes.js b/platforms/android/assets/www/node_modules/lodash/fp/includes.js new file mode 100644 index 0000000..91f1eec --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/includes.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('includes', require('../includes')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/indexOf.js b/platforms/android/assets/www/node_modules/lodash/fp/indexOf.js new file mode 100644 index 0000000..65345ce --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/indexOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('indexOf', require('../indexOf')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/init.js b/platforms/android/assets/www/node_modules/lodash/fp/init.js new file mode 100644 index 0000000..2f88d8b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/init.js @@ -0,0 +1 @@ +module.exports = require('./initial'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/initial.js b/platforms/android/assets/www/node_modules/lodash/fp/initial.js new file mode 100644 index 0000000..9fc94e0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/initial.js @@ -0,0 +1 @@ +module.exports = require('../initial'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/intersection.js b/platforms/android/assets/www/node_modules/lodash/fp/intersection.js new file mode 100644 index 0000000..784f4d1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/intersection.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('intersection', require('../intersection')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/intersectionBy.js b/platforms/android/assets/www/node_modules/lodash/fp/intersectionBy.js new file mode 100644 index 0000000..4aa93b6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/intersectionBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('intersectionBy', require('../intersectionBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/intersectionWith.js b/platforms/android/assets/www/node_modules/lodash/fp/intersectionWith.js new file mode 100644 index 0000000..879fe9d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/intersectionWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('intersectionWith', require('../intersectionWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/invert.js b/platforms/android/assets/www/node_modules/lodash/fp/invert.js new file mode 100644 index 0000000..231d5ca --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/invert.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('invert', require('../invert')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/invertBy.js b/platforms/android/assets/www/node_modules/lodash/fp/invertBy.js new file mode 100644 index 0000000..90820e6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/invertBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('invertBy', require('../invertBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/invoke.js b/platforms/android/assets/www/node_modules/lodash/fp/invoke.js new file mode 100644 index 0000000..a8635e8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/invoke.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('invoke', require('../invoke')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/invokeMap.js b/platforms/android/assets/www/node_modules/lodash/fp/invokeMap.js new file mode 100644 index 0000000..2691ae3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/invokeMap.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('invokeMap', require('../invokeMap')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isArguments.js b/platforms/android/assets/www/node_modules/lodash/fp/isArguments.js new file mode 100644 index 0000000..093aa35 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isArguments.js @@ -0,0 +1 @@ +module.exports = require('../isArguments'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isArray.js b/platforms/android/assets/www/node_modules/lodash/fp/isArray.js new file mode 100644 index 0000000..ec7fad3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isArray.js @@ -0,0 +1 @@ +module.exports = require('../isArray'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isArrayBuffer.js b/platforms/android/assets/www/node_modules/lodash/fp/isArrayBuffer.js new file mode 100644 index 0000000..655e85b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isArrayBuffer.js @@ -0,0 +1 @@ +module.exports = require('../isArrayBuffer'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isArrayLike.js b/platforms/android/assets/www/node_modules/lodash/fp/isArrayLike.js new file mode 100644 index 0000000..1595b2f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isArrayLike.js @@ -0,0 +1 @@ +module.exports = require('../isArrayLike'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isArrayLikeObject.js b/platforms/android/assets/www/node_modules/lodash/fp/isArrayLikeObject.js new file mode 100644 index 0000000..4d1d202 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isArrayLikeObject.js @@ -0,0 +1 @@ +module.exports = require('../isArrayLikeObject'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isBoolean.js b/platforms/android/assets/www/node_modules/lodash/fp/isBoolean.js new file mode 100644 index 0000000..30d4a4a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isBoolean.js @@ -0,0 +1 @@ +module.exports = require('../isBoolean'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isBuffer.js b/platforms/android/assets/www/node_modules/lodash/fp/isBuffer.js new file mode 100644 index 0000000..15af9b6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isBuffer.js @@ -0,0 +1 @@ +module.exports = require('../isBuffer'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isDate.js b/platforms/android/assets/www/node_modules/lodash/fp/isDate.js new file mode 100644 index 0000000..ac002f4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isDate.js @@ -0,0 +1 @@ +module.exports = require('../isDate'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isElement.js b/platforms/android/assets/www/node_modules/lodash/fp/isElement.js new file mode 100644 index 0000000..458a348 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isElement.js @@ -0,0 +1 @@ +module.exports = require('../isElement'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isEmpty.js b/platforms/android/assets/www/node_modules/lodash/fp/isEmpty.js new file mode 100644 index 0000000..b1a04cd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isEmpty.js @@ -0,0 +1 @@ +module.exports = require('../isEmpty'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isEqual.js b/platforms/android/assets/www/node_modules/lodash/fp/isEqual.js new file mode 100644 index 0000000..91b7d66 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isEqual.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('isEqual', require('../isEqual')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isEqualWith.js b/platforms/android/assets/www/node_modules/lodash/fp/isEqualWith.js new file mode 100644 index 0000000..37a6e35 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isEqualWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('isEqualWith', require('../isEqualWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isError.js b/platforms/android/assets/www/node_modules/lodash/fp/isError.js new file mode 100644 index 0000000..da2710c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isError.js @@ -0,0 +1 @@ +module.exports = require('../isError'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isFinite.js b/platforms/android/assets/www/node_modules/lodash/fp/isFinite.js new file mode 100644 index 0000000..a71e53d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isFinite.js @@ -0,0 +1 @@ +module.exports = require('../isFinite'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isFunction.js b/platforms/android/assets/www/node_modules/lodash/fp/isFunction.js new file mode 100644 index 0000000..1fc73f6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isFunction.js @@ -0,0 +1 @@ +module.exports = require('../isFunction'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isInteger.js b/platforms/android/assets/www/node_modules/lodash/fp/isInteger.js new file mode 100644 index 0000000..f990b01 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isInteger.js @@ -0,0 +1 @@ +module.exports = require('../isInteger'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isLength.js b/platforms/android/assets/www/node_modules/lodash/fp/isLength.js new file mode 100644 index 0000000..f40c362 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isLength.js @@ -0,0 +1 @@ +module.exports = require('../isLength'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isMap.js b/platforms/android/assets/www/node_modules/lodash/fp/isMap.js new file mode 100644 index 0000000..51fb7e2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isMap.js @@ -0,0 +1 @@ +module.exports = require('../isMap'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isMatch.js b/platforms/android/assets/www/node_modules/lodash/fp/isMatch.js new file mode 100644 index 0000000..749c903 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isMatch.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('isMatch', require('../isMatch')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isMatchWith.js b/platforms/android/assets/www/node_modules/lodash/fp/isMatchWith.js new file mode 100644 index 0000000..b1311fc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isMatchWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('isMatchWith', require('../isMatchWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isNaN.js b/platforms/android/assets/www/node_modules/lodash/fp/isNaN.js new file mode 100644 index 0000000..74daf0a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isNaN.js @@ -0,0 +1 @@ +module.exports = require('../isNaN'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isNative.js b/platforms/android/assets/www/node_modules/lodash/fp/isNative.js new file mode 100644 index 0000000..9eeded4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isNative.js @@ -0,0 +1 @@ +module.exports = require('../isNative'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isNil.js b/platforms/android/assets/www/node_modules/lodash/fp/isNil.js new file mode 100644 index 0000000..beace9d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isNil.js @@ -0,0 +1 @@ +module.exports = require('../isNil'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isNull.js b/platforms/android/assets/www/node_modules/lodash/fp/isNull.js new file mode 100644 index 0000000..44689a7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isNull.js @@ -0,0 +1 @@ +module.exports = require('../isNull'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isNumber.js b/platforms/android/assets/www/node_modules/lodash/fp/isNumber.js new file mode 100644 index 0000000..d7e8615 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isNumber.js @@ -0,0 +1 @@ +module.exports = require('../isNumber'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isObject.js b/platforms/android/assets/www/node_modules/lodash/fp/isObject.js new file mode 100644 index 0000000..bb48630 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isObject.js @@ -0,0 +1 @@ +module.exports = require('../isObject'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isObjectLike.js b/platforms/android/assets/www/node_modules/lodash/fp/isObjectLike.js new file mode 100644 index 0000000..5ef6f62 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isObjectLike.js @@ -0,0 +1 @@ +module.exports = require('../isObjectLike'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isPlainObject.js b/platforms/android/assets/www/node_modules/lodash/fp/isPlainObject.js new file mode 100644 index 0000000..2d34d86 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isPlainObject.js @@ -0,0 +1 @@ +module.exports = require('../isPlainObject'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isRegExp.js b/platforms/android/assets/www/node_modules/lodash/fp/isRegExp.js new file mode 100644 index 0000000..4d0727b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isRegExp.js @@ -0,0 +1 @@ +module.exports = require('../isRegExp'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isSafeInteger.js b/platforms/android/assets/www/node_modules/lodash/fp/isSafeInteger.js new file mode 100644 index 0000000..ed08cab --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isSafeInteger.js @@ -0,0 +1 @@ +module.exports = require('../isSafeInteger'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isSet.js b/platforms/android/assets/www/node_modules/lodash/fp/isSet.js new file mode 100644 index 0000000..f8a0a49 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isSet.js @@ -0,0 +1 @@ +module.exports = require('../isSet'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isString.js b/platforms/android/assets/www/node_modules/lodash/fp/isString.js new file mode 100644 index 0000000..2f22d0e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isString.js @@ -0,0 +1 @@ +module.exports = require('../isString'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isSymbol.js b/platforms/android/assets/www/node_modules/lodash/fp/isSymbol.js new file mode 100644 index 0000000..9ce6731 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isSymbol.js @@ -0,0 +1 @@ +module.exports = require('../isSymbol'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isTypedArray.js b/platforms/android/assets/www/node_modules/lodash/fp/isTypedArray.js new file mode 100644 index 0000000..72349c5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isTypedArray.js @@ -0,0 +1 @@ +module.exports = require('../isTypedArray'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isUndefined.js b/platforms/android/assets/www/node_modules/lodash/fp/isUndefined.js new file mode 100644 index 0000000..a65c5be --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isUndefined.js @@ -0,0 +1 @@ +module.exports = require('../isUndefined'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isWeakMap.js b/platforms/android/assets/www/node_modules/lodash/fp/isWeakMap.js new file mode 100644 index 0000000..dc62201 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isWeakMap.js @@ -0,0 +1 @@ +module.exports = require('../isWeakMap'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/isWeakSet.js b/platforms/android/assets/www/node_modules/lodash/fp/isWeakSet.js new file mode 100644 index 0000000..7646ca8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/isWeakSet.js @@ -0,0 +1 @@ +module.exports = require('../isWeakSet'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/iteratee.js b/platforms/android/assets/www/node_modules/lodash/fp/iteratee.js new file mode 100644 index 0000000..2884465 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/iteratee.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('iteratee', require('../iteratee')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/join.js b/platforms/android/assets/www/node_modules/lodash/fp/join.js new file mode 100644 index 0000000..fdaa488 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/join.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('join', require('../join')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/kebabCase.js b/platforms/android/assets/www/node_modules/lodash/fp/kebabCase.js new file mode 100644 index 0000000..f251a4d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/kebabCase.js @@ -0,0 +1 @@ +module.exports = require('../kebabCase'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/keyBy.js b/platforms/android/assets/www/node_modules/lodash/fp/keyBy.js new file mode 100644 index 0000000..ad9abac --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/keyBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('keyBy', require('../keyBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/keys.js b/platforms/android/assets/www/node_modules/lodash/fp/keys.js new file mode 100644 index 0000000..23dc6b7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/keys.js @@ -0,0 +1 @@ +module.exports = require('../keys'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/keysIn.js b/platforms/android/assets/www/node_modules/lodash/fp/keysIn.js new file mode 100644 index 0000000..2b738b9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/keysIn.js @@ -0,0 +1 @@ +module.exports = require('../keysIn'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/lang.js b/platforms/android/assets/www/node_modules/lodash/fp/lang.js new file mode 100644 index 0000000..08cc9c1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/lang.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../lang')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/last.js b/platforms/android/assets/www/node_modules/lodash/fp/last.js new file mode 100644 index 0000000..222be23 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/last.js @@ -0,0 +1 @@ +module.exports = require('../last'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/lastIndexOf.js b/platforms/android/assets/www/node_modules/lodash/fp/lastIndexOf.js new file mode 100644 index 0000000..e27480e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/lastIndexOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('lastIndexOf', require('../lastIndexOf')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/lowerCase.js b/platforms/android/assets/www/node_modules/lodash/fp/lowerCase.js new file mode 100644 index 0000000..4da15ce --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/lowerCase.js @@ -0,0 +1 @@ +module.exports = require('../lowerCase'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/lowerFirst.js b/platforms/android/assets/www/node_modules/lodash/fp/lowerFirst.js new file mode 100644 index 0000000..afd1ba5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/lowerFirst.js @@ -0,0 +1 @@ +module.exports = require('../lowerFirst'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/lt.js b/platforms/android/assets/www/node_modules/lodash/fp/lt.js new file mode 100644 index 0000000..dd4cba0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/lt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('lt', require('../lt')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/lte.js b/platforms/android/assets/www/node_modules/lodash/fp/lte.js new file mode 100644 index 0000000..f9bf725 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/lte.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('lte', require('../lte')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/map.js b/platforms/android/assets/www/node_modules/lodash/fp/map.js new file mode 100644 index 0000000..b74c1a1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/map.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('map', require('../map')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/mapKeys.js b/platforms/android/assets/www/node_modules/lodash/fp/mapKeys.js new file mode 100644 index 0000000..a8156c1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/mapKeys.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('mapKeys', require('../mapKeys')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/mapObj.js b/platforms/android/assets/www/node_modules/lodash/fp/mapObj.js new file mode 100644 index 0000000..9f1872d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/mapObj.js @@ -0,0 +1 @@ +module.exports = require('./mapValues'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/mapValues.js b/platforms/android/assets/www/node_modules/lodash/fp/mapValues.js new file mode 100644 index 0000000..9375d73 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/mapValues.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('mapValues', require('../mapValues')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/matches.js b/platforms/android/assets/www/node_modules/lodash/fp/matches.js new file mode 100644 index 0000000..eea5916 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/matches.js @@ -0,0 +1 @@ +module.exports = require('../matches'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/matchesProperty.js b/platforms/android/assets/www/node_modules/lodash/fp/matchesProperty.js new file mode 100644 index 0000000..c4343a1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/matchesProperty.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('matchesProperty', require('../matchesProperty')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/math.js b/platforms/android/assets/www/node_modules/lodash/fp/math.js new file mode 100644 index 0000000..e8f50f7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/math.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../math')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/max.js b/platforms/android/assets/www/node_modules/lodash/fp/max.js new file mode 100644 index 0000000..f7258c6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/max.js @@ -0,0 +1 @@ +module.exports = require('../max'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/maxBy.js b/platforms/android/assets/www/node_modules/lodash/fp/maxBy.js new file mode 100644 index 0000000..b81243f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/maxBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('maxBy', require('../maxBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/mean.js b/platforms/android/assets/www/node_modules/lodash/fp/mean.js new file mode 100644 index 0000000..b78e427 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/mean.js @@ -0,0 +1 @@ +module.exports = require('../mean'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/memoize.js b/platforms/android/assets/www/node_modules/lodash/fp/memoize.js new file mode 100644 index 0000000..1a45e09 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/memoize.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('memoize', require('../memoize')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/merge.js b/platforms/android/assets/www/node_modules/lodash/fp/merge.js new file mode 100644 index 0000000..3dca641 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/merge.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('merge', require('../merge')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/mergeWith.js b/platforms/android/assets/www/node_modules/lodash/fp/mergeWith.js new file mode 100644 index 0000000..ba45644 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/mergeWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('mergeWith', require('../mergeWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/method.js b/platforms/android/assets/www/node_modules/lodash/fp/method.js new file mode 100644 index 0000000..c2f95c3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/method.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('method', require('../method')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/methodOf.js b/platforms/android/assets/www/node_modules/lodash/fp/methodOf.js new file mode 100644 index 0000000..223f651 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/methodOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('methodOf', require('../methodOf')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/min.js b/platforms/android/assets/www/node_modules/lodash/fp/min.js new file mode 100644 index 0000000..10db02c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/min.js @@ -0,0 +1 @@ +module.exports = require('../min'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/minBy.js b/platforms/android/assets/www/node_modules/lodash/fp/minBy.js new file mode 100644 index 0000000..10edfd4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/minBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('minBy', require('../minBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/mixin.js b/platforms/android/assets/www/node_modules/lodash/fp/mixin.js new file mode 100644 index 0000000..965f180 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/mixin.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('mixin', require('../mixin')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/nAry.js b/platforms/android/assets/www/node_modules/lodash/fp/nAry.js new file mode 100644 index 0000000..f262a76 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/nAry.js @@ -0,0 +1 @@ +module.exports = require('./ary'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/negate.js b/platforms/android/assets/www/node_modules/lodash/fp/negate.js new file mode 100644 index 0000000..345b425 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/negate.js @@ -0,0 +1 @@ +module.exports = require('../negate'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/next.js b/platforms/android/assets/www/node_modules/lodash/fp/next.js new file mode 100644 index 0000000..5cad70e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/next.js @@ -0,0 +1 @@ +module.exports = require('../next'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/noop.js b/platforms/android/assets/www/node_modules/lodash/fp/noop.js new file mode 100644 index 0000000..ca10050 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/noop.js @@ -0,0 +1 @@ +module.exports = require('../noop'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/now.js b/platforms/android/assets/www/node_modules/lodash/fp/now.js new file mode 100644 index 0000000..aa5ed67 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/now.js @@ -0,0 +1 @@ +module.exports = require('../now'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/nthArg.js b/platforms/android/assets/www/node_modules/lodash/fp/nthArg.js new file mode 100644 index 0000000..dd47ac6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/nthArg.js @@ -0,0 +1 @@ +module.exports = require('../nthArg'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/number.js b/platforms/android/assets/www/node_modules/lodash/fp/number.js new file mode 100644 index 0000000..5c10b88 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/number.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../number')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/object.js b/platforms/android/assets/www/node_modules/lodash/fp/object.js new file mode 100644 index 0000000..ae39a13 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/object.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../object')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/omit.js b/platforms/android/assets/www/node_modules/lodash/fp/omit.js new file mode 100644 index 0000000..404b551 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/omit.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('omit', require('../omit')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/omitAll.js b/platforms/android/assets/www/node_modules/lodash/fp/omitAll.js new file mode 100644 index 0000000..144cf4b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/omitAll.js @@ -0,0 +1 @@ +module.exports = require('./omit'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/omitBy.js b/platforms/android/assets/www/node_modules/lodash/fp/omitBy.js new file mode 100644 index 0000000..745efa5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/omitBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('omitBy', require('../omitBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/once.js b/platforms/android/assets/www/node_modules/lodash/fp/once.js new file mode 100644 index 0000000..6bd0beb --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/once.js @@ -0,0 +1 @@ +module.exports = require('../once'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/orderBy.js b/platforms/android/assets/www/node_modules/lodash/fp/orderBy.js new file mode 100644 index 0000000..b32244f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/orderBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('orderBy', require('../orderBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/over.js b/platforms/android/assets/www/node_modules/lodash/fp/over.js new file mode 100644 index 0000000..0a5a797 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/over.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('over', require('../over')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/overArgs.js b/platforms/android/assets/www/node_modules/lodash/fp/overArgs.js new file mode 100644 index 0000000..8188387 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/overArgs.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('overArgs', require('../overArgs')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/overEvery.js b/platforms/android/assets/www/node_modules/lodash/fp/overEvery.js new file mode 100644 index 0000000..36dc552 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/overEvery.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('overEvery', require('../overEvery')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/overSome.js b/platforms/android/assets/www/node_modules/lodash/fp/overSome.js new file mode 100644 index 0000000..b02d464 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/overSome.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('overSome', require('../overSome')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pad.js b/platforms/android/assets/www/node_modules/lodash/fp/pad.js new file mode 100644 index 0000000..e59cfc9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pad.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pad', require('../pad')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/padEnd.js b/platforms/android/assets/www/node_modules/lodash/fp/padEnd.js new file mode 100644 index 0000000..0b6dbb7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/padEnd.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('padEnd', require('../padEnd')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/padStart.js b/platforms/android/assets/www/node_modules/lodash/fp/padStart.js new file mode 100644 index 0000000..c97f098 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/padStart.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('padStart', require('../padStart')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/parseInt.js b/platforms/android/assets/www/node_modules/lodash/fp/parseInt.js new file mode 100644 index 0000000..35be713 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/parseInt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('parseInt', require('../parseInt')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/partial.js b/platforms/android/assets/www/node_modules/lodash/fp/partial.js new file mode 100644 index 0000000..a687d0c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/partial.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('partial', require('../partial')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/partialRight.js b/platforms/android/assets/www/node_modules/lodash/fp/partialRight.js new file mode 100644 index 0000000..28428c0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/partialRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('partialRight', require('../partialRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/partition.js b/platforms/android/assets/www/node_modules/lodash/fp/partition.js new file mode 100644 index 0000000..b1495e6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/partition.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('partition', require('../partition')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/path.js b/platforms/android/assets/www/node_modules/lodash/fp/path.js new file mode 100644 index 0000000..b29cfb2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/path.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pathEq.js b/platforms/android/assets/www/node_modules/lodash/fp/pathEq.js new file mode 100644 index 0000000..36c027a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pathEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pathOr.js b/platforms/android/assets/www/node_modules/lodash/fp/pathOr.js new file mode 100644 index 0000000..4ab5820 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pathOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pick.js b/platforms/android/assets/www/node_modules/lodash/fp/pick.js new file mode 100644 index 0000000..e84b366 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pick.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pick', require('../pick')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pickAll.js b/platforms/android/assets/www/node_modules/lodash/fp/pickAll.js new file mode 100644 index 0000000..a8ecd46 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pickAll.js @@ -0,0 +1 @@ +module.exports = require('./pick'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pickBy.js b/platforms/android/assets/www/node_modules/lodash/fp/pickBy.js new file mode 100644 index 0000000..4d14a0b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pickBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pickBy', require('../pickBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pipe.js b/platforms/android/assets/www/node_modules/lodash/fp/pipe.js new file mode 100644 index 0000000..b2e1e2c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pipe.js @@ -0,0 +1 @@ +module.exports = require('./flow'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/plant.js b/platforms/android/assets/www/node_modules/lodash/fp/plant.js new file mode 100644 index 0000000..c85596a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/plant.js @@ -0,0 +1 @@ +module.exports = require('../plant'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/prop.js b/platforms/android/assets/www/node_modules/lodash/fp/prop.js new file mode 100644 index 0000000..b29cfb2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/prop.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/propOf.js b/platforms/android/assets/www/node_modules/lodash/fp/propOf.js new file mode 100644 index 0000000..cf0d197 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/propOf.js @@ -0,0 +1 @@ +module.exports = require('./propertyOf'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/propOr.js b/platforms/android/assets/www/node_modules/lodash/fp/propOr.js new file mode 100644 index 0000000..4ab5820 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/propOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/property.js b/platforms/android/assets/www/node_modules/lodash/fp/property.js new file mode 100644 index 0000000..fab6f23 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/property.js @@ -0,0 +1 @@ +module.exports = require('../property'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/propertyOf.js b/platforms/android/assets/www/node_modules/lodash/fp/propertyOf.js new file mode 100644 index 0000000..d941cdb --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/propertyOf.js @@ -0,0 +1 @@ +module.exports = require('../propertyOf'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pull.js b/platforms/android/assets/www/node_modules/lodash/fp/pull.js new file mode 100644 index 0000000..47f49ae --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pull.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pull', require('../pull')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pullAll.js b/platforms/android/assets/www/node_modules/lodash/fp/pullAll.js new file mode 100644 index 0000000..ffb663b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pullAll.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pullAll', require('../pullAll')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pullAllBy.js b/platforms/android/assets/www/node_modules/lodash/fp/pullAllBy.js new file mode 100644 index 0000000..23b11b7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pullAllBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pullAllBy', require('../pullAllBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pullAllWith.js b/platforms/android/assets/www/node_modules/lodash/fp/pullAllWith.js new file mode 100644 index 0000000..495d574 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pullAllWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pullAllWith', require('../pullAllWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/pullAt.js b/platforms/android/assets/www/node_modules/lodash/fp/pullAt.js new file mode 100644 index 0000000..5836d2d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/pullAt.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('pullAt', require('../pullAt')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/random.js b/platforms/android/assets/www/node_modules/lodash/fp/random.js new file mode 100644 index 0000000..607d63a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/random.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('random', require('../random')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/range.js b/platforms/android/assets/www/node_modules/lodash/fp/range.js new file mode 100644 index 0000000..1142304 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/range.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('range', require('../range')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/rangeRight.js b/platforms/android/assets/www/node_modules/lodash/fp/rangeRight.js new file mode 100644 index 0000000..2248287 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/rangeRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('rangeRight', require('../rangeRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/rearg.js b/platforms/android/assets/www/node_modules/lodash/fp/rearg.js new file mode 100644 index 0000000..b2753e9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/rearg.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('rearg', require('../rearg')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/reduce.js b/platforms/android/assets/www/node_modules/lodash/fp/reduce.js new file mode 100644 index 0000000..2f1b425 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/reduce.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('reduce', require('../reduce')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/reduceRight.js b/platforms/android/assets/www/node_modules/lodash/fp/reduceRight.js new file mode 100644 index 0000000..b110e9e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/reduceRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('reduceRight', require('../reduceRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/reject.js b/platforms/android/assets/www/node_modules/lodash/fp/reject.js new file mode 100644 index 0000000..30bd3bc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/reject.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('reject', require('../reject')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/remove.js b/platforms/android/assets/www/node_modules/lodash/fp/remove.js new file mode 100644 index 0000000..4b67a94 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/remove.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('remove', require('../remove')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/repeat.js b/platforms/android/assets/www/node_modules/lodash/fp/repeat.js new file mode 100644 index 0000000..bc0704b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/repeat.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('repeat', require('../repeat')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/replace.js b/platforms/android/assets/www/node_modules/lodash/fp/replace.js new file mode 100644 index 0000000..a4462e7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/replace.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('replace', require('../replace')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/rest.js b/platforms/android/assets/www/node_modules/lodash/fp/rest.js new file mode 100644 index 0000000..69dfc18 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/rest.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('rest', require('../rest')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/result.js b/platforms/android/assets/www/node_modules/lodash/fp/result.js new file mode 100644 index 0000000..1d3fb58 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/result.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('result', require('../result')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/reverse.js b/platforms/android/assets/www/node_modules/lodash/fp/reverse.js new file mode 100644 index 0000000..a6d960d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/reverse.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('reverse', require('../reverse')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/round.js b/platforms/android/assets/www/node_modules/lodash/fp/round.js new file mode 100644 index 0000000..9eb69b1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/round.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('round', require('../round')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sample.js b/platforms/android/assets/www/node_modules/lodash/fp/sample.js new file mode 100644 index 0000000..008cb06 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sample.js @@ -0,0 +1 @@ +module.exports = require('../sample'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sampleSize.js b/platforms/android/assets/www/node_modules/lodash/fp/sampleSize.js new file mode 100644 index 0000000..920c075 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sampleSize.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sampleSize', require('../sampleSize')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/seq.js b/platforms/android/assets/www/node_modules/lodash/fp/seq.js new file mode 100644 index 0000000..d8f42b0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/seq.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../seq')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/set.js b/platforms/android/assets/www/node_modules/lodash/fp/set.js new file mode 100644 index 0000000..fc2a75b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/set.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('set', require('../set')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/setWith.js b/platforms/android/assets/www/node_modules/lodash/fp/setWith.js new file mode 100644 index 0000000..fd836ea --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/setWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('setWith', require('../setWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/shuffle.js b/platforms/android/assets/www/node_modules/lodash/fp/shuffle.js new file mode 100644 index 0000000..85d5699 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/shuffle.js @@ -0,0 +1 @@ +module.exports = require('../shuffle'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/size.js b/platforms/android/assets/www/node_modules/lodash/fp/size.js new file mode 100644 index 0000000..efba2ca --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/size.js @@ -0,0 +1 @@ +module.exports = require('../size'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/slice.js b/platforms/android/assets/www/node_modules/lodash/fp/slice.js new file mode 100644 index 0000000..6fb1898 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/slice.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('slice', require('../slice')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/snakeCase.js b/platforms/android/assets/www/node_modules/lodash/fp/snakeCase.js new file mode 100644 index 0000000..2893f7b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/snakeCase.js @@ -0,0 +1 @@ +module.exports = require('../snakeCase'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/some.js b/platforms/android/assets/www/node_modules/lodash/fp/some.js new file mode 100644 index 0000000..64727fe --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/some.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('some', require('../some')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/somePass.js b/platforms/android/assets/www/node_modules/lodash/fp/somePass.js new file mode 100644 index 0000000..2774ab3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/somePass.js @@ -0,0 +1 @@ +module.exports = require('./overSome'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortBy.js b/platforms/android/assets/www/node_modules/lodash/fp/sortBy.js new file mode 100644 index 0000000..80fe4dd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortBy', require('../sortBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortedIndex.js b/platforms/android/assets/www/node_modules/lodash/fp/sortedIndex.js new file mode 100644 index 0000000..509dcb8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortedIndex.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedIndex', require('../sortedIndex')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortedIndexBy.js b/platforms/android/assets/www/node_modules/lodash/fp/sortedIndexBy.js new file mode 100644 index 0000000..aa2d219 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortedIndexBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedIndexBy', require('../sortedIndexBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortedIndexOf.js b/platforms/android/assets/www/node_modules/lodash/fp/sortedIndexOf.js new file mode 100644 index 0000000..c127420 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortedIndexOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedIndexOf', require('../sortedIndexOf')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndex.js b/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndex.js new file mode 100644 index 0000000..7ec9e33 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndex.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedLastIndex', require('../sortedLastIndex')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndexBy.js b/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndexBy.js new file mode 100644 index 0000000..e03f185 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndexBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndexOf.js b/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndexOf.js new file mode 100644 index 0000000..0130801 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortedLastIndexOf.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortedUniq.js b/platforms/android/assets/www/node_modules/lodash/fp/sortedUniq.js new file mode 100644 index 0000000..c0df750 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortedUniq.js @@ -0,0 +1 @@ +module.exports = require('../sortedUniq'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sortedUniqBy.js b/platforms/android/assets/www/node_modules/lodash/fp/sortedUniqBy.js new file mode 100644 index 0000000..f5c65ad --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sortedUniqBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sortedUniqBy', require('../sortedUniqBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/split.js b/platforms/android/assets/www/node_modules/lodash/fp/split.js new file mode 100644 index 0000000..79f2693 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/split.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('split', require('../split')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/spread.js b/platforms/android/assets/www/node_modules/lodash/fp/spread.js new file mode 100644 index 0000000..0348df2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/spread.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('spread', require('../spread')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/startCase.js b/platforms/android/assets/www/node_modules/lodash/fp/startCase.js new file mode 100644 index 0000000..2a6a66e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/startCase.js @@ -0,0 +1 @@ +module.exports = require('../startCase'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/startsWith.js b/platforms/android/assets/www/node_modules/lodash/fp/startsWith.js new file mode 100644 index 0000000..730a141 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/startsWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('startsWith', require('../startsWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/string.js b/platforms/android/assets/www/node_modules/lodash/fp/string.js new file mode 100644 index 0000000..773b037 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/string.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../string')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/subtract.js b/platforms/android/assets/www/node_modules/lodash/fp/subtract.js new file mode 100644 index 0000000..46b83db --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/subtract.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('subtract', require('../subtract')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sum.js b/platforms/android/assets/www/node_modules/lodash/fp/sum.js new file mode 100644 index 0000000..e8a59c5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sum.js @@ -0,0 +1 @@ +module.exports = require('../sum'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/sumBy.js b/platforms/android/assets/www/node_modules/lodash/fp/sumBy.js new file mode 100644 index 0000000..2692dc1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/sumBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('sumBy', require('../sumBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/tail.js b/platforms/android/assets/www/node_modules/lodash/fp/tail.js new file mode 100644 index 0000000..36c6494 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/tail.js @@ -0,0 +1 @@ +module.exports = require('../tail'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/take.js b/platforms/android/assets/www/node_modules/lodash/fp/take.js new file mode 100644 index 0000000..e0984a4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/take.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('take', require('../take')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/takeRight.js b/platforms/android/assets/www/node_modules/lodash/fp/takeRight.js new file mode 100644 index 0000000..7b7c3ce --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/takeRight.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('takeRight', require('../takeRight')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/takeRightWhile.js b/platforms/android/assets/www/node_modules/lodash/fp/takeRightWhile.js new file mode 100644 index 0000000..305b254 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/takeRightWhile.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('takeRightWhile', require('../takeRightWhile')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/takeWhile.js b/platforms/android/assets/www/node_modules/lodash/fp/takeWhile.js new file mode 100644 index 0000000..a90126d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/takeWhile.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('takeWhile', require('../takeWhile')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/tap.js b/platforms/android/assets/www/node_modules/lodash/fp/tap.js new file mode 100644 index 0000000..3bec2bd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/tap.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('tap', require('../tap')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/template.js b/platforms/android/assets/www/node_modules/lodash/fp/template.js new file mode 100644 index 0000000..0130d14 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/template.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('template', require('../template')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/templateSettings.js b/platforms/android/assets/www/node_modules/lodash/fp/templateSettings.js new file mode 100644 index 0000000..ddbbb58 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/templateSettings.js @@ -0,0 +1 @@ +module.exports = require('../templateSettings'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/throttle.js b/platforms/android/assets/www/node_modules/lodash/fp/throttle.js new file mode 100644 index 0000000..36f76d6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/throttle.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('throttle', require('../throttle')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/thru.js b/platforms/android/assets/www/node_modules/lodash/fp/thru.js new file mode 100644 index 0000000..05ddaef --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/thru.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('thru', require('../thru')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/times.js b/platforms/android/assets/www/node_modules/lodash/fp/times.js new file mode 100644 index 0000000..02fd3b7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/times.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('times', require('../times')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toArray.js b/platforms/android/assets/www/node_modules/lodash/fp/toArray.js new file mode 100644 index 0000000..1ea0b52 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toArray.js @@ -0,0 +1 @@ +module.exports = require('../toArray'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toInteger.js b/platforms/android/assets/www/node_modules/lodash/fp/toInteger.js new file mode 100644 index 0000000..17e59a3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toInteger.js @@ -0,0 +1 @@ +module.exports = require('../toInteger'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toIterator.js b/platforms/android/assets/www/node_modules/lodash/fp/toIterator.js new file mode 100644 index 0000000..13bf21c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toIterator.js @@ -0,0 +1 @@ +module.exports = require('../toIterator'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toJSON.js b/platforms/android/assets/www/node_modules/lodash/fp/toJSON.js new file mode 100644 index 0000000..5f6cb92 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toJSON.js @@ -0,0 +1 @@ +module.exports = require('../toJSON'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toLength.js b/platforms/android/assets/www/node_modules/lodash/fp/toLength.js new file mode 100644 index 0000000..38529fb --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toLength.js @@ -0,0 +1 @@ +module.exports = require('../toLength'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toLower.js b/platforms/android/assets/www/node_modules/lodash/fp/toLower.js new file mode 100644 index 0000000..01d3432 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toLower.js @@ -0,0 +1 @@ +module.exports = require('../toLower'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toNumber.js b/platforms/android/assets/www/node_modules/lodash/fp/toNumber.js new file mode 100644 index 0000000..071e320 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toNumber.js @@ -0,0 +1 @@ +module.exports = require('../toNumber'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toPairs.js b/platforms/android/assets/www/node_modules/lodash/fp/toPairs.js new file mode 100644 index 0000000..4b4dcb7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toPairs.js @@ -0,0 +1 @@ +module.exports = require('../toPairs'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toPairsIn.js b/platforms/android/assets/www/node_modules/lodash/fp/toPairsIn.js new file mode 100644 index 0000000..53076cc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toPairsIn.js @@ -0,0 +1 @@ +module.exports = require('../toPairsIn'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toPath.js b/platforms/android/assets/www/node_modules/lodash/fp/toPath.js new file mode 100644 index 0000000..62762ec --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toPath.js @@ -0,0 +1 @@ +module.exports = require('../toPath'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toPlainObject.js b/platforms/android/assets/www/node_modules/lodash/fp/toPlainObject.js new file mode 100644 index 0000000..6a6aebd --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toPlainObject.js @@ -0,0 +1 @@ +module.exports = require('../toPlainObject'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toSafeInteger.js b/platforms/android/assets/www/node_modules/lodash/fp/toSafeInteger.js new file mode 100644 index 0000000..3f5b817 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toSafeInteger.js @@ -0,0 +1 @@ +module.exports = require('../toSafeInteger'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toString.js b/platforms/android/assets/www/node_modules/lodash/fp/toString.js new file mode 100644 index 0000000..c309058 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toString.js @@ -0,0 +1 @@ +module.exports = require('../[object Object]'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/toUpper.js b/platforms/android/assets/www/node_modules/lodash/fp/toUpper.js new file mode 100644 index 0000000..428eb33 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/toUpper.js @@ -0,0 +1 @@ +module.exports = require('../toUpper'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/transform.js b/platforms/android/assets/www/node_modules/lodash/fp/transform.js new file mode 100644 index 0000000..30bed49 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/transform.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('transform', require('../transform')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/trim.js b/platforms/android/assets/www/node_modules/lodash/fp/trim.js new file mode 100644 index 0000000..b7cafe9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/trim.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trim', require('../trim')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/trimChars.js b/platforms/android/assets/www/node_modules/lodash/fp/trimChars.js new file mode 100644 index 0000000..051ea1e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/trimChars.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimChars', require('../trim')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/trimCharsEnd.js b/platforms/android/assets/www/node_modules/lodash/fp/trimCharsEnd.js new file mode 100644 index 0000000..54c5cff --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/trimCharsEnd.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimCharsEnd', require('../trimEnd')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/trimCharsStart.js b/platforms/android/assets/www/node_modules/lodash/fp/trimCharsStart.js new file mode 100644 index 0000000..44f9866 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/trimCharsStart.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimCharsStart', require('../trimStart')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/trimEnd.js b/platforms/android/assets/www/node_modules/lodash/fp/trimEnd.js new file mode 100644 index 0000000..1666596 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/trimEnd.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimEnd', require('../trimEnd')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/trimStart.js b/platforms/android/assets/www/node_modules/lodash/fp/trimStart.js new file mode 100644 index 0000000..4921b03 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/trimStart.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('trimStart', require('../trimStart')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/truncate.js b/platforms/android/assets/www/node_modules/lodash/fp/truncate.js new file mode 100644 index 0000000..0c4d158 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/truncate.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('truncate', require('../truncate')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unapply.js b/platforms/android/assets/www/node_modules/lodash/fp/unapply.js new file mode 100644 index 0000000..c5dfe77 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unapply.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unary.js b/platforms/android/assets/www/node_modules/lodash/fp/unary.js new file mode 100644 index 0000000..3bc6483 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unary.js @@ -0,0 +1 @@ +module.exports = require('../unary'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unescape.js b/platforms/android/assets/www/node_modules/lodash/fp/unescape.js new file mode 100644 index 0000000..4233b15 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unescape.js @@ -0,0 +1 @@ +module.exports = require('../unescape'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/union.js b/platforms/android/assets/www/node_modules/lodash/fp/union.js new file mode 100644 index 0000000..9deef12 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/union.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('union', require('../union')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unionBy.js b/platforms/android/assets/www/node_modules/lodash/fp/unionBy.js new file mode 100644 index 0000000..029b359 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unionBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('unionBy', require('../unionBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unionWith.js b/platforms/android/assets/www/node_modules/lodash/fp/unionWith.js new file mode 100644 index 0000000..631eda0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unionWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('unionWith', require('../unionWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/uniq.js b/platforms/android/assets/www/node_modules/lodash/fp/uniq.js new file mode 100644 index 0000000..c64510f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/uniq.js @@ -0,0 +1 @@ +module.exports = require('../uniq'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/uniqBy.js b/platforms/android/assets/www/node_modules/lodash/fp/uniqBy.js new file mode 100644 index 0000000..1b6c03f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/uniqBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('uniqBy', require('../uniqBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/uniqWith.js b/platforms/android/assets/www/node_modules/lodash/fp/uniqWith.js new file mode 100644 index 0000000..be4c48d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/uniqWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('uniqWith', require('../uniqWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/uniqueId.js b/platforms/android/assets/www/node_modules/lodash/fp/uniqueId.js new file mode 100644 index 0000000..daa41cb --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/uniqueId.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('uniqueId', require('../uniqueId')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unnest.js b/platforms/android/assets/www/node_modules/lodash/fp/unnest.js new file mode 100644 index 0000000..5d34060 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unnest.js @@ -0,0 +1 @@ +module.exports = require('./flatten'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unset.js b/platforms/android/assets/www/node_modules/lodash/fp/unset.js new file mode 100644 index 0000000..0c4c1a6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unset.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('unset', require('../unset')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unzip.js b/platforms/android/assets/www/node_modules/lodash/fp/unzip.js new file mode 100644 index 0000000..e0ac2db --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unzip.js @@ -0,0 +1 @@ +module.exports = require('../unzip'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/unzipWith.js b/platforms/android/assets/www/node_modules/lodash/fp/unzipWith.js new file mode 100644 index 0000000..de25cf7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/unzipWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('unzipWith', require('../unzipWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/update.js b/platforms/android/assets/www/node_modules/lodash/fp/update.js new file mode 100644 index 0000000..93e0d57 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/update.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('update', require('../update')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/updateWith.js b/platforms/android/assets/www/node_modules/lodash/fp/updateWith.js new file mode 100644 index 0000000..a6ed49e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/updateWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('updateWith', require('../updateWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/upperCase.js b/platforms/android/assets/www/node_modules/lodash/fp/upperCase.js new file mode 100644 index 0000000..ddcb369 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/upperCase.js @@ -0,0 +1 @@ +module.exports = require('../upperCase'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/upperFirst.js b/platforms/android/assets/www/node_modules/lodash/fp/upperFirst.js new file mode 100644 index 0000000..34f1e20 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/upperFirst.js @@ -0,0 +1 @@ +module.exports = require('../upperFirst'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/useWith.js b/platforms/android/assets/www/node_modules/lodash/fp/useWith.js new file mode 100644 index 0000000..d8b3df5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/useWith.js @@ -0,0 +1 @@ +module.exports = require('./overArgs'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/util.js b/platforms/android/assets/www/node_modules/lodash/fp/util.js new file mode 100644 index 0000000..18c00ba --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/util.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../util')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/value.js b/platforms/android/assets/www/node_modules/lodash/fp/value.js new file mode 100644 index 0000000..4dc0e7e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/value.js @@ -0,0 +1 @@ +module.exports = require('../value'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/valueOf.js b/platforms/android/assets/www/node_modules/lodash/fp/valueOf.js new file mode 100644 index 0000000..c309058 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/valueOf.js @@ -0,0 +1 @@ +module.exports = require('../[object Object]'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/values.js b/platforms/android/assets/www/node_modules/lodash/fp/values.js new file mode 100644 index 0000000..3843170 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/values.js @@ -0,0 +1 @@ +module.exports = require('../values'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/valuesIn.js b/platforms/android/assets/www/node_modules/lodash/fp/valuesIn.js new file mode 100644 index 0000000..f81c171 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/valuesIn.js @@ -0,0 +1 @@ +module.exports = require('../valuesIn'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/whereEq.js b/platforms/android/assets/www/node_modules/lodash/fp/whereEq.js new file mode 100644 index 0000000..ade80f6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/whereEq.js @@ -0,0 +1 @@ +module.exports = require('./filter'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/without.js b/platforms/android/assets/www/node_modules/lodash/fp/without.js new file mode 100644 index 0000000..5238e94 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/without.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('without', require('../without')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/words.js b/platforms/android/assets/www/node_modules/lodash/fp/words.js new file mode 100644 index 0000000..b58a485 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/words.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('words', require('../words')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/wrap.js b/platforms/android/assets/www/node_modules/lodash/fp/wrap.js new file mode 100644 index 0000000..56465a2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/wrap.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('wrap', require('../wrap')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/wrapperAt.js b/platforms/android/assets/www/node_modules/lodash/fp/wrapperAt.js new file mode 100644 index 0000000..f8d37a1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/wrapperAt.js @@ -0,0 +1 @@ +module.exports = require('../wrapperAt'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/wrapperChain.js b/platforms/android/assets/www/node_modules/lodash/fp/wrapperChain.js new file mode 100644 index 0000000..964a846 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/wrapperChain.js @@ -0,0 +1 @@ +module.exports = require('../wrapperChain'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/wrapperFlatMap.js b/platforms/android/assets/www/node_modules/lodash/fp/wrapperFlatMap.js new file mode 100644 index 0000000..fa030c0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/wrapperFlatMap.js @@ -0,0 +1 @@ +module.exports = require('../wrapperFlatMap'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/wrapperLodash.js b/platforms/android/assets/www/node_modules/lodash/fp/wrapperLodash.js new file mode 100644 index 0000000..d62a996 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/wrapperLodash.js @@ -0,0 +1 @@ +module.exports = require('../wrapperLodash'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/wrapperReverse.js b/platforms/android/assets/www/node_modules/lodash/fp/wrapperReverse.js new file mode 100644 index 0000000..cf70388 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/wrapperReverse.js @@ -0,0 +1 @@ +module.exports = require('../wrapperReverse'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/wrapperValue.js b/platforms/android/assets/www/node_modules/lodash/fp/wrapperValue.js new file mode 100644 index 0000000..494dfb1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/wrapperValue.js @@ -0,0 +1 @@ +module.exports = require('../wrapperValue'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/xor.js b/platforms/android/assets/www/node_modules/lodash/fp/xor.js new file mode 100644 index 0000000..0f3e025 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/xor.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('xor', require('../xor')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/xorBy.js b/platforms/android/assets/www/node_modules/lodash/fp/xorBy.js new file mode 100644 index 0000000..e48fc41 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/xorBy.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('xorBy', require('../xorBy')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/xorWith.js b/platforms/android/assets/www/node_modules/lodash/fp/xorWith.js new file mode 100644 index 0000000..5c2eebe --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/xorWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('xorWith', require('../xorWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/zip.js b/platforms/android/assets/www/node_modules/lodash/fp/zip.js new file mode 100644 index 0000000..0cae73b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/zip.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('zip', require('../zip')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/zipObj.js b/platforms/android/assets/www/node_modules/lodash/fp/zipObj.js new file mode 100644 index 0000000..f4a3453 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/zipObj.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/zipObject.js b/platforms/android/assets/www/node_modules/lodash/fp/zipObject.js new file mode 100644 index 0000000..8c2ff3b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/zipObject.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('zipObject', require('../zipObject')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/zipObjectDeep.js b/platforms/android/assets/www/node_modules/lodash/fp/zipObjectDeep.js new file mode 100644 index 0000000..a0ee4e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/zipObjectDeep.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('zipObjectDeep', require('../zipObjectDeep')); diff --git a/platforms/android/assets/www/node_modules/lodash/fp/zipWith.js b/platforms/android/assets/www/node_modules/lodash/fp/zipWith.js new file mode 100644 index 0000000..da75f3d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fp/zipWith.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert('zipWith', require('../zipWith')); diff --git a/platforms/android/assets/www/node_modules/lodash/fromPairs.js b/platforms/android/assets/www/node_modules/lodash/fromPairs.js new file mode 100644 index 0000000..c18c1e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/fromPairs.js @@ -0,0 +1,27 @@ +/** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + */ +function fromPairs(pairs) { + var index = -1, + length = pairs ? pairs.length : 0, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; +} + +module.exports = fromPairs; diff --git a/platforms/android/assets/www/node_modules/lodash/function.js b/platforms/android/assets/www/node_modules/lodash/function.js new file mode 100644 index 0000000..b0fc6d9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/function.js @@ -0,0 +1,25 @@ +module.exports = { + 'after': require('./after'), + 'ary': require('./ary'), + 'before': require('./before'), + 'bind': require('./bind'), + 'bindKey': require('./bindKey'), + 'curry': require('./curry'), + 'curryRight': require('./curryRight'), + 'debounce': require('./debounce'), + 'defer': require('./defer'), + 'delay': require('./delay'), + 'flip': require('./flip'), + 'memoize': require('./memoize'), + 'negate': require('./negate'), + 'once': require('./once'), + 'overArgs': require('./overArgs'), + 'partial': require('./partial'), + 'partialRight': require('./partialRight'), + 'rearg': require('./rearg'), + 'rest': require('./rest'), + 'spread': require('./spread'), + 'throttle': require('./throttle'), + 'unary': require('./unary'), + 'wrap': require('./wrap') +}; diff --git a/platforms/android/assets/www/node_modules/lodash/functions.js b/platforms/android/assets/www/node_modules/lodash/functions.js new file mode 100644 index 0000000..b50a197 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/functions.js @@ -0,0 +1,29 @@ +var baseFunctions = require('./_baseFunctions'), + keys = require('./keys'); + +/** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ +function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); +} + +module.exports = functions; diff --git a/platforms/android/assets/www/node_modules/lodash/functionsIn.js b/platforms/android/assets/www/node_modules/lodash/functionsIn.js new file mode 100644 index 0000000..b48e5a6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/functionsIn.js @@ -0,0 +1,29 @@ +var baseFunctions = require('./_baseFunctions'), + keysIn = require('./keysIn'); + +/** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ +function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); +} + +module.exports = functionsIn; diff --git a/platforms/android/assets/www/node_modules/lodash/get.js b/platforms/android/assets/www/node_modules/lodash/get.js new file mode 100644 index 0000000..755fa05 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/get.js @@ -0,0 +1,32 @@ +var baseGet = require('./_baseGet'); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined` the `defaultValue` is used in its place. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; diff --git a/platforms/android/assets/www/node_modules/lodash/groupBy.js b/platforms/android/assets/www/node_modules/lodash/groupBy.js new file mode 100644 index 0000000..728a6da --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/groupBy.js @@ -0,0 +1,38 @@ +var createAggregator = require('./_createAggregator'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of elements responsible for generating the key. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } +}); + +module.exports = groupBy; diff --git a/platforms/android/assets/www/node_modules/lodash/gt.js b/platforms/android/assets/www/node_modules/lodash/gt.js new file mode 100644 index 0000000..ddaf5ea --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/gt.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ +function gt(value, other) { + return value > other; +} + +module.exports = gt; diff --git a/platforms/android/assets/www/node_modules/lodash/gte.js b/platforms/android/assets/www/node_modules/lodash/gte.js new file mode 100644 index 0000000..4a5ffb5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/gte.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ +function gte(value, other) { + return value >= other; +} + +module.exports = gte; diff --git a/platforms/android/assets/www/node_modules/lodash/has.js b/platforms/android/assets/www/node_modules/lodash/has.js new file mode 100644 index 0000000..d66d2de --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/has.js @@ -0,0 +1,34 @@ +var baseHas = require('./_baseHas'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * var other = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return hasPath(object, path, baseHas); +} + +module.exports = has; diff --git a/platforms/android/assets/www/node_modules/lodash/hasIn.js b/platforms/android/assets/www/node_modules/lodash/hasIn.js new file mode 100644 index 0000000..7da6b7d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/hasIn.js @@ -0,0 +1,33 @@ +var baseHasIn = require('./_baseHasIn'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b.c'); + * // => true + * + * _.hasIn(object, ['a', 'b', 'c']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return hasPath(object, path, baseHasIn); +} + +module.exports = hasIn; diff --git a/platforms/android/assets/www/node_modules/lodash/head.js b/platforms/android/assets/www/node_modules/lodash/head.js new file mode 100644 index 0000000..30b47b0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/head.js @@ -0,0 +1,22 @@ +/** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ +function head(array) { + return array ? array[0] : undefined; +} + +module.exports = head; diff --git a/platforms/android/assets/www/node_modules/lodash/identity.js b/platforms/android/assets/www/node_modules/lodash/identity.js new file mode 100644 index 0000000..da7dea1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/identity.js @@ -0,0 +1,20 @@ +/** + * This method returns the first argument given to it. + * + * @static + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; diff --git a/platforms/android/assets/www/node_modules/lodash/inRange.js b/platforms/android/assets/www/node_modules/lodash/inRange.js new file mode 100644 index 0000000..69c6110 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/inRange.js @@ -0,0 +1,52 @@ +var baseInRange = require('./_baseInRange'), + toNumber = require('./toNumber'); + +/** + * Checks if `n` is between `start` and up to but not including, `end`. If + * `end` is not specified it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ +function inRange(number, start, end) { + start = toNumber(start) || 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = toNumber(end) || 0; + } + number = toNumber(number); + return baseInRange(number, start, end); +} + +module.exports = inRange; diff --git a/platforms/android/assets/www/node_modules/lodash/includes.js b/platforms/android/assets/www/node_modules/lodash/includes.js new file mode 100644 index 0000000..01d6844 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/includes.js @@ -0,0 +1,51 @@ +var baseIndexOf = require('./_baseIndexOf'), + isArrayLike = require('./isArrayLike'), + isString = require('./isString'), + toInteger = require('./toInteger'), + values = require('./values'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `value` is in `collection`. If `collection` is a string it's checked + * for a substring of `value`, otherwise [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +module.exports = includes; diff --git a/platforms/android/assets/www/node_modules/lodash/index.js b/platforms/android/assets/www/node_modules/lodash/index.js new file mode 100644 index 0000000..5d063e2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/index.js @@ -0,0 +1 @@ +module.exports = require('./lodash'); \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/lodash/indexOf.js b/platforms/android/assets/www/node_modules/lodash/indexOf.js new file mode 100644 index 0000000..4474d0c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/indexOf.js @@ -0,0 +1,41 @@ +var baseIndexOf = require('./_baseIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ +function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + fromIndex = toInteger(fromIndex); + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return baseIndexOf(array, value, fromIndex); +} + +module.exports = indexOf; diff --git a/platforms/android/assets/www/node_modules/lodash/initial.js b/platforms/android/assets/www/node_modules/lodash/initial.js new file mode 100644 index 0000000..59b7a7d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/initial.js @@ -0,0 +1,20 @@ +var dropRight = require('./dropRight'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + return dropRight(array, 1); +} + +module.exports = initial; diff --git a/platforms/android/assets/www/node_modules/lodash/intersection.js b/platforms/android/assets/www/node_modules/lodash/intersection.js new file mode 100644 index 0000000..25495fe --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/intersection.js @@ -0,0 +1,29 @@ +var arrayMap = require('./_arrayMap'), + baseCastArrayLikeObject = require('./_baseCastArrayLikeObject'), + baseIntersection = require('./_baseIntersection'), + rest = require('./rest'); + +/** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. The order of result values is determined by the + * order they occur in the first array. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [4, 2], [1, 2]); + * // => [2] + */ +var intersection = rest(function(arrays) { + var mapped = arrayMap(arrays, baseCastArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; +}); + +module.exports = intersection; diff --git a/platforms/android/assets/www/node_modules/lodash/intersectionBy.js b/platforms/android/assets/www/node_modules/lodash/intersectionBy.js new file mode 100644 index 0000000..41bcec5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/intersectionBy.js @@ -0,0 +1,43 @@ +var arrayMap = require('./_arrayMap'), + baseCastArrayLikeObject = require('./_baseCastArrayLikeObject'), + baseIntersection = require('./_baseIntersection'), + baseIteratee = require('./_baseIteratee'), + last = require('./last'), + rest = require('./rest'); + +/** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. Result values are chosen from the first array. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ +var intersectionBy = rest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, baseCastArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee)) + : []; +}); + +module.exports = intersectionBy; diff --git a/platforms/android/assets/www/node_modules/lodash/intersectionWith.js b/platforms/android/assets/www/node_modules/lodash/intersectionWith.js new file mode 100644 index 0000000..c24c25a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/intersectionWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('./_arrayMap'), + baseCastArrayLikeObject = require('./_baseCastArrayLikeObject'), + baseIntersection = require('./_baseIntersection'), + last = require('./last'), + rest = require('./rest'); + +/** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. Result values are chosen + * from the first array. The comparator is invoked with two arguments: + * (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ +var intersectionWith = rest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, baseCastArrayLikeObject); + + if (comparator === last(mapped)) { + comparator = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; +}); + +module.exports = intersectionWith; diff --git a/platforms/android/assets/www/node_modules/lodash/invert.js b/platforms/android/assets/www/node_modules/lodash/invert.js new file mode 100644 index 0000000..11628b1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/invert.js @@ -0,0 +1,26 @@ +var constant = require('./constant'), + createInverter = require('./_createInverter'), + identity = require('./identity'); + +/** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite property + * assignments of previous values. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ +var invert = createInverter(function(result, value, key) { + result[value] = key; +}, constant(identity)); + +module.exports = invert; diff --git a/platforms/android/assets/www/node_modules/lodash/invertBy.js b/platforms/android/assets/www/node_modules/lodash/invertBy.js new file mode 100644 index 0000000..513f62b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/invertBy.js @@ -0,0 +1,43 @@ +var baseIteratee = require('./_baseIteratee'), + createInverter = require('./_createInverter'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` through `iteratee`. + * The corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ +var invertBy = createInverter(function(result, value, key) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } +}, baseIteratee); + +module.exports = invertBy; diff --git a/platforms/android/assets/www/node_modules/lodash/invoke.js b/platforms/android/assets/www/node_modules/lodash/invoke.js new file mode 100644 index 0000000..f090a72 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/invoke.js @@ -0,0 +1,23 @@ +var baseInvoke = require('./_baseInvoke'), + rest = require('./rest'); + +/** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ +var invoke = rest(baseInvoke); + +module.exports = invoke; diff --git a/platforms/android/assets/www/node_modules/lodash/invokeMap.js b/platforms/android/assets/www/node_modules/lodash/invokeMap.js new file mode 100644 index 0000000..42c8fbe --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/invokeMap.js @@ -0,0 +1,43 @@ +var apply = require('./_apply'), + baseEach = require('./_baseEach'), + baseInvoke = require('./_baseInvoke'), + isArrayLike = require('./isArrayLike'), + isKey = require('./_isKey'), + rest = require('./rest'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it's + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invokeMap = rest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); + }); + return result; +}); + +module.exports = invokeMap; diff --git a/platforms/android/assets/www/node_modules/lodash/isArguments.js b/platforms/android/assets/www/node_modules/lodash/isArguments.js new file mode 100644 index 0000000..73fbafe --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isArguments.js @@ -0,0 +1,43 @@ +var isArrayLikeObject = require('./isArrayLikeObject'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +module.exports = isArguments; diff --git a/platforms/android/assets/www/node_modules/lodash/isArray.js b/platforms/android/assets/www/node_modules/lodash/isArray.js new file mode 100644 index 0000000..fa9b055 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isArray.js @@ -0,0 +1,26 @@ +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @type {Function} + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; diff --git a/platforms/android/assets/www/node_modules/lodash/isArrayBuffer.js b/platforms/android/assets/www/node_modules/lodash/isArrayBuffer.js new file mode 100644 index 0000000..a22a9ee --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isArrayBuffer.js @@ -0,0 +1,34 @@ +var isObjectLike = require('./isObjectLike'); + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ +function isArrayBuffer(value) { + return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; +} + +module.exports = isArrayBuffer; diff --git a/platforms/android/assets/www/node_modules/lodash/isArrayLike.js b/platforms/android/assets/www/node_modules/lodash/isArrayLike.js new file mode 100644 index 0000000..3e809f4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isArrayLike.js @@ -0,0 +1,33 @@ +var getLength = require('./_getLength'), + isFunction = require('./isFunction'), + isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)) && !isFunction(value); +} + +module.exports = isArrayLike; diff --git a/platforms/android/assets/www/node_modules/lodash/isArrayLikeObject.js b/platforms/android/assets/www/node_modules/lodash/isArrayLikeObject.js new file mode 100644 index 0000000..0b8b2ca --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isArrayLikeObject.js @@ -0,0 +1,31 @@ +var isArrayLike = require('./isArrayLike'), + isObjectLike = require('./isObjectLike'); + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +module.exports = isArrayLikeObject; diff --git a/platforms/android/assets/www/node_modules/lodash/isBoolean.js b/platforms/android/assets/www/node_modules/lodash/isBoolean.js new file mode 100644 index 0000000..53ec5d6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isBoolean.js @@ -0,0 +1,36 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && objectToString.call(value) == boolTag); +} + +module.exports = isBoolean; diff --git a/platforms/android/assets/www/node_modules/lodash/isBuffer.js b/platforms/android/assets/www/node_modules/lodash/isBuffer.js new file mode 100644 index 0000000..cee6b22 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isBuffer.js @@ -0,0 +1,48 @@ +var constant = require('./constant'), + root = require('./_root'); + +/** Used to determine if values are of the language type `Object`. */ +var objectTypes = { + 'function': true, + 'object': true +}; + +/** Detect free variable `exports`. */ +var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + +/** Detect free variable `module`. */ +var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = (freeModule && freeModule.exports === freeExports) + ? freeExports + : undefined; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = !Buffer ? constant(false) : function(value) { + return value instanceof Buffer; +}; + +module.exports = isBuffer; diff --git a/platforms/android/assets/www/node_modules/lodash/isDate.js b/platforms/android/assets/www/node_modules/lodash/isDate.js new file mode 100644 index 0000000..6e3611a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isDate.js @@ -0,0 +1,35 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var dateTag = '[object Date]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ +function isDate(value) { + return isObjectLike(value) && objectToString.call(value) == dateTag; +} + +module.exports = isDate; diff --git a/platforms/android/assets/www/node_modules/lodash/isElement.js b/platforms/android/assets/www/node_modules/lodash/isElement.js new file mode 100644 index 0000000..447d6bc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isElement.js @@ -0,0 +1,24 @@ +var isObjectLike = require('./isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ +function isElement(value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); +} + +module.exports = isElement; diff --git a/platforms/android/assets/www/node_modules/lodash/isEmpty.js b/platforms/android/assets/www/node_modules/lodash/isEmpty.js new file mode 100644 index 0000000..f81838d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isEmpty.js @@ -0,0 +1,54 @@ +var isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('./isArrayLike'), + isFunction = require('./isFunction'), + isString = require('./isString'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty collection or object. A value is considered + * empty if it's an `arguments` object, array, string, or jQuery-like collection + * with a length of `0` or has no own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; +} + +module.exports = isEmpty; diff --git a/platforms/android/assets/www/node_modules/lodash/isEqual.js b/platforms/android/assets/www/node_modules/lodash/isEqual.js new file mode 100644 index 0000000..43a3a2b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isEqual.js @@ -0,0 +1,34 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are **not** supported. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} + +module.exports = isEqual; diff --git a/platforms/android/assets/www/node_modules/lodash/isEqualWith.js b/platforms/android/assets/www/node_modules/lodash/isEqualWith.js new file mode 100644 index 0000000..4643a35 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isEqualWith.js @@ -0,0 +1,40 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined` comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ +function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; +} + +module.exports = isEqualWith; diff --git a/platforms/android/assets/www/node_modules/lodash/isError.js b/platforms/android/assets/www/node_modules/lodash/isError.js new file mode 100644 index 0000000..6065453 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isError.js @@ -0,0 +1,40 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var errorTag = '[object Error]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { + if (!isObjectLike(value)) { + return false; + } + return (objectToString.call(value) == errorTag) || + (typeof value.message == 'string' && typeof value.name == 'string'); +} + +module.exports = isError; diff --git a/platforms/android/assets/www/node_modules/lodash/isFinite.js b/platforms/android/assets/www/node_modules/lodash/isFinite.js new file mode 100644 index 0000000..44be4bc --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isFinite.js @@ -0,0 +1,34 @@ +var root = require('./_root'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = root.isFinite; + +/** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MAX_VALUE); + * // => true + * + * _.isFinite(3.14); + * // => true + * + * _.isFinite(Infinity); + * // => false + */ +function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); +} + +module.exports = isFinite; diff --git a/platforms/android/assets/www/node_modules/lodash/isFunction.js b/platforms/android/assets/www/node_modules/lodash/isFunction.js new file mode 100644 index 0000000..fd8c4ad --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isFunction.js @@ -0,0 +1,40 @@ +var isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8 which returns 'object' for typed array and weak map constructors, + // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +module.exports = isFunction; diff --git a/platforms/android/assets/www/node_modules/lodash/isInteger.js b/platforms/android/assets/www/node_modules/lodash/isInteger.js new file mode 100644 index 0000000..1bfcc65 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isInteger.js @@ -0,0 +1,31 @@ +var toInteger = require('./toInteger'); + +/** + * Checks if `value` is an integer. + * + * **Note:** This method is based on [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ +function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); +} + +module.exports = isInteger; diff --git a/platforms/android/assets/www/node_modules/lodash/isLength.js b/platforms/android/assets/www/node_modules/lodash/isLength.js new file mode 100644 index 0000000..b095123 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isLength.js @@ -0,0 +1,33 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; diff --git a/platforms/android/assets/www/node_modules/lodash/isMap.js b/platforms/android/assets/www/node_modules/lodash/isMap.js new file mode 100644 index 0000000..bc92def --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isMap.js @@ -0,0 +1,27 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]'; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +function isMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; +} + +module.exports = isMap; diff --git a/platforms/android/assets/www/node_modules/lodash/isMatch.js b/platforms/android/assets/www/node_modules/lodash/isMatch.js new file mode 100644 index 0000000..faf0898 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isMatch.js @@ -0,0 +1,31 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. This method is + * equivalent to a `_.matches` function when `source` is partially applied. + * + * **Note:** This method supports comparing the same values as `_.isEqual`. + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.isMatch(object, { 'age': 40 }); + * // => true + * + * _.isMatch(object, { 'age': 36 }); + * // => false + */ +function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); +} + +module.exports = isMatch; diff --git a/platforms/android/assets/www/node_modules/lodash/isMatchWith.js b/platforms/android/assets/www/node_modules/lodash/isMatchWith.js new file mode 100644 index 0000000..2460eb3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isMatchWith.js @@ -0,0 +1,40 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined` comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ +function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); +} + +module.exports = isMatchWith; diff --git a/platforms/android/assets/www/node_modules/lodash/isNaN.js b/platforms/android/assets/www/node_modules/lodash/isNaN.js new file mode 100644 index 0000000..5b757b1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isNaN.js @@ -0,0 +1,34 @@ +var isNumber = require('./isNumber'); + +/** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ +function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some ActiveX objects in IE. + return isNumber(value) && value != +value; +} + +module.exports = isNaN; diff --git a/platforms/android/assets/www/node_modules/lodash/isNative.js b/platforms/android/assets/www/node_modules/lodash/isNative.js new file mode 100644 index 0000000..616a832 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isNative.js @@ -0,0 +1,53 @@ +var isFunction = require('./isFunction'), + isHostObject = require('./_isHostObject'), + isObjectLike = require('./isObjectLike'); + +/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(funcToString.call(value)); + } + return isObjectLike(value) && + (isHostObject(value) ? reIsNative : reIsHostCtor).test(value); +} + +module.exports = isNative; diff --git a/platforms/android/assets/www/node_modules/lodash/isNil.js b/platforms/android/assets/www/node_modules/lodash/isNil.js new file mode 100644 index 0000000..c4197fb --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isNil.js @@ -0,0 +1,24 @@ +/** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ +function isNil(value) { + return value == null; +} + +module.exports = isNil; diff --git a/platforms/android/assets/www/node_modules/lodash/isNull.js b/platforms/android/assets/www/node_modules/lodash/isNull.js new file mode 100644 index 0000000..ec66c4d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isNull.js @@ -0,0 +1,21 @@ +/** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ +function isNull(value) { + return value === null; +} + +module.exports = isNull; diff --git a/platforms/android/assets/www/node_modules/lodash/isNumber.js b/platforms/android/assets/www/node_modules/lodash/isNumber.js new file mode 100644 index 0000000..0c8fb9a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isNumber.js @@ -0,0 +1,45 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var numberTag = '[object Number]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ +function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && objectToString.call(value) == numberTag); +} + +module.exports = isNumber; diff --git a/platforms/android/assets/www/node_modules/lodash/isObject.js b/platforms/android/assets/www/node_modules/lodash/isObject.js new file mode 100644 index 0000000..41993db --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isObject.js @@ -0,0 +1,29 @@ +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = isObject; diff --git a/platforms/android/assets/www/node_modules/lodash/isObjectLike.js b/platforms/android/assets/www/node_modules/lodash/isObjectLike.js new file mode 100644 index 0000000..240167a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isObjectLike.js @@ -0,0 +1,28 @@ +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +module.exports = isObjectLike; diff --git a/platforms/android/assets/www/node_modules/lodash/isPlainObject.js b/platforms/android/assets/www/node_modules/lodash/isPlainObject.js new file mode 100644 index 0000000..5491848 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isPlainObject.js @@ -0,0 +1,66 @@ +var isHostObject = require('./_isHostObject'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = Function.prototype.toString; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var getPrototypeOf = Object.getPrototypeOf; + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || + objectToString.call(value) != objectTag || isHostObject(value)) { + return false; + } + var proto = getPrototypeOf(value); + if (proto === null) { + return true; + } + var Ctor = proto.constructor; + return (typeof Ctor == 'function' && + Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); +} + +module.exports = isPlainObject; diff --git a/platforms/android/assets/www/node_modules/lodash/isRegExp.js b/platforms/android/assets/www/node_modules/lodash/isRegExp.js new file mode 100644 index 0000000..e127e5a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isRegExp.js @@ -0,0 +1,35 @@ +var isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +function isRegExp(value) { + return isObject(value) && objectToString.call(value) == regexpTag; +} + +module.exports = isRegExp; diff --git a/platforms/android/assets/www/node_modules/lodash/isSafeInteger.js b/platforms/android/assets/www/node_modules/lodash/isSafeInteger.js new file mode 100644 index 0000000..f601243 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isSafeInteger.js @@ -0,0 +1,35 @@ +var isInteger = require('./isInteger'); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ +function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +} + +module.exports = isSafeInteger; diff --git a/platforms/android/assets/www/node_modules/lodash/isSet.js b/platforms/android/assets/www/node_modules/lodash/isSet.js new file mode 100644 index 0000000..e1d50be --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isSet.js @@ -0,0 +1,27 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var setTag = '[object Set]'; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +function isSet(value) { + return isObjectLike(value) && getTag(value) == setTag; +} + +module.exports = isSet; diff --git a/platforms/android/assets/www/node_modules/lodash/isString.js b/platforms/android/assets/www/node_modules/lodash/isString.js new file mode 100644 index 0000000..5ed392e --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isString.js @@ -0,0 +1,37 @@ +var isArray = require('./isArray'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); +} + +module.exports = isString; diff --git a/platforms/android/assets/www/node_modules/lodash/isSymbol.js b/platforms/android/assets/www/node_modules/lodash/isSymbol.js new file mode 100644 index 0000000..5e11a00 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isSymbol.js @@ -0,0 +1,36 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +module.exports = isSymbol; diff --git a/platforms/android/assets/www/node_modules/lodash/isTypedArray.js b/platforms/android/assets/www/node_modules/lodash/isTypedArray.js new file mode 100644 index 0000000..1283322 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isTypedArray.js @@ -0,0 +1,75 @@ +var isLength = require('./isLength'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dateTag] = typedArrayTags[errorTag] = +typedArrayTags[funcTag] = typedArrayTags[mapTag] = +typedArrayTags[numberTag] = typedArrayTags[objectTag] = +typedArrayTags[regexpTag] = typedArrayTags[setTag] = +typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +function isTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; +} + +module.exports = isTypedArray; diff --git a/platforms/android/assets/www/node_modules/lodash/isUndefined.js b/platforms/android/assets/www/node_modules/lodash/isUndefined.js new file mode 100644 index 0000000..d64e560 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isUndefined.js @@ -0,0 +1,21 @@ +/** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +module.exports = isUndefined; diff --git a/platforms/android/assets/www/node_modules/lodash/isWeakMap.js b/platforms/android/assets/www/node_modules/lodash/isWeakMap.js new file mode 100644 index 0000000..d934a9f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isWeakMap.js @@ -0,0 +1,27 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakMapTag = '[object WeakMap]'; + +/** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ +function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; +} + +module.exports = isWeakMap; diff --git a/platforms/android/assets/www/node_modules/lodash/isWeakSet.js b/platforms/android/assets/www/node_modules/lodash/isWeakSet.js new file mode 100644 index 0000000..40674f4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/isWeakSet.js @@ -0,0 +1,35 @@ +var isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakSetTag = '[object WeakSet]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ +function isWeakSet(value) { + return isObjectLike(value) && objectToString.call(value) == weakSetTag; +} + +module.exports = isWeakSet; diff --git a/platforms/android/assets/www/node_modules/lodash/iteratee.js b/platforms/android/assets/www/node_modules/lodash/iteratee.js new file mode 100644 index 0000000..e9d2f8a --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/iteratee.js @@ -0,0 +1,38 @@ +var baseClone = require('./_baseClone'), + baseIteratee = require('./_baseIteratee'); + +/** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name the created callback returns the + * property value for a given element. If `func` is an object the created + * callback returns `true` for elements that contain the equivalent object + * properties, otherwise it returns `false`. + * + * @static + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(callback, func) { + * var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func); + * return !p ? callback(func) : function(object) { + * return (p[2] == '>' ? object[p[1]] > p[3] : object[p[1]] < p[3]); + * }; + * }); + * + * _.filter(users, 'age > 36'); + * // => [{ 'user': 'fred', 'age': 40 }] + */ +function iteratee(func) { + return baseIteratee(typeof func == 'function' ? func : baseClone(func, true)); +} + +module.exports = iteratee; diff --git a/platforms/android/assets/www/node_modules/lodash/join.js b/platforms/android/assets/www/node_modules/lodash/join.js new file mode 100644 index 0000000..79d308d --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/join.js @@ -0,0 +1,25 @@ +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeJoin = arrayProto.join; + +/** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ +function join(array, separator) { + return array ? nativeJoin.call(array, separator) : ''; +} + +module.exports = join; diff --git a/platforms/android/assets/www/node_modules/lodash/kebabCase.js b/platforms/android/assets/www/node_modules/lodash/kebabCase.js new file mode 100644 index 0000000..f29124f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/kebabCase.js @@ -0,0 +1,26 @@ +var createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ +var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); +}); + +module.exports = kebabCase; diff --git a/platforms/android/assets/www/node_modules/lodash/keyBy.js b/platforms/android/assets/www/node_modules/lodash/keyBy.js new file mode 100644 index 0000000..febc86b --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/keyBy.js @@ -0,0 +1,34 @@ +var createAggregator = require('./_createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ +var keyBy = createAggregator(function(result, value, key) { + result[key] = value; +}); + +module.exports = keyBy; diff --git a/platforms/android/assets/www/node_modules/lodash/keys.js b/platforms/android/assets/www/node_modules/lodash/keys.js new file mode 100644 index 0000000..eac239f --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/keys.js @@ -0,0 +1,55 @@ +var baseHas = require('./_baseHas'), + baseKeys = require('./_baseKeys'), + indexKeys = require('./_indexKeys'), + isArrayLike = require('./isArrayLike'), + isIndex = require('./_isIndex'), + isPrototype = require('./_isPrototype'); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + var isProto = isPrototype(object); + if (!(isProto || isArrayLike(object))) { + return baseKeys(object); + } + var indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + for (var key in object) { + if (baseHas(object, key) && + !(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(isProto && key == 'constructor')) { + result.push(key); + } + } + return result; +} + +module.exports = keys; diff --git a/platforms/android/assets/www/node_modules/lodash/keysIn.js b/platforms/android/assets/www/node_modules/lodash/keysIn.js new file mode 100644 index 0000000..e327b87 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/keysIn.js @@ -0,0 +1,54 @@ +var baseKeysIn = require('./_baseKeysIn'), + indexKeys = require('./_indexKeys'), + isIndex = require('./_isIndex'), + isPrototype = require('./_isPrototype'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + var index = -1, + isProto = isPrototype(object), + props = baseKeysIn(object), + propsLength = props.length, + indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + while (++index < propsLength) { + var key = props[index]; + if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = keysIn; diff --git a/platforms/android/assets/www/node_modules/lodash/lang.js b/platforms/android/assets/www/node_modules/lodash/lang.js new file mode 100644 index 0000000..665f5c6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/lang.js @@ -0,0 +1,56 @@ +module.exports = { + 'castArray': require('./castArray'), + 'clone': require('./clone'), + 'cloneDeep': require('./cloneDeep'), + 'cloneDeepWith': require('./cloneDeepWith'), + 'cloneWith': require('./cloneWith'), + 'eq': require('./eq'), + 'gt': require('./gt'), + 'gte': require('./gte'), + 'isArguments': require('./isArguments'), + 'isArray': require('./isArray'), + 'isArrayBuffer': require('./isArrayBuffer'), + 'isArrayLike': require('./isArrayLike'), + 'isArrayLikeObject': require('./isArrayLikeObject'), + 'isBoolean': require('./isBoolean'), + 'isBuffer': require('./isBuffer'), + 'isDate': require('./isDate'), + 'isElement': require('./isElement'), + 'isEmpty': require('./isEmpty'), + 'isEqual': require('./isEqual'), + 'isEqualWith': require('./isEqualWith'), + 'isError': require('./isError'), + 'isFinite': require('./isFinite'), + 'isFunction': require('./isFunction'), + 'isInteger': require('./isInteger'), + 'isLength': require('./isLength'), + 'isMap': require('./isMap'), + 'isMatch': require('./isMatch'), + 'isMatchWith': require('./isMatchWith'), + 'isNaN': require('./isNaN'), + 'isNative': require('./isNative'), + 'isNil': require('./isNil'), + 'isNull': require('./isNull'), + 'isNumber': require('./isNumber'), + 'isObject': require('./isObject'), + 'isObjectLike': require('./isObjectLike'), + 'isPlainObject': require('./isPlainObject'), + 'isRegExp': require('./isRegExp'), + 'isSafeInteger': require('./isSafeInteger'), + 'isSet': require('./isSet'), + 'isString': require('./isString'), + 'isSymbol': require('./isSymbol'), + 'isTypedArray': require('./isTypedArray'), + 'isUndefined': require('./isUndefined'), + 'isWeakMap': require('./isWeakMap'), + 'isWeakSet': require('./isWeakSet'), + 'lt': require('./lt'), + 'lte': require('./lte'), + 'toArray': require('./toArray'), + 'toInteger': require('./toInteger'), + 'toLength': require('./toLength'), + 'toNumber': require('./toNumber'), + 'toPlainObject': require('./toPlainObject'), + 'toSafeInteger': require('./toSafeInteger'), + 'toString': require('./toString') +}; diff --git a/platforms/android/assets/www/node_modules/lodash/last.js b/platforms/android/assets/www/node_modules/lodash/last.js new file mode 100644 index 0000000..299af31 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/last.js @@ -0,0 +1,19 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/platforms/android/assets/www/node_modules/lodash/lastIndexOf.js b/platforms/android/assets/www/node_modules/lodash/lastIndexOf.js new file mode 100644 index 0000000..1eb2f28 --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/lastIndexOf.js @@ -0,0 +1,49 @@ +var indexOfNaN = require('./_indexOfNaN'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = (index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1)) + 1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = lastIndexOf; diff --git a/platforms/android/assets/www/node_modules/lodash/lodash.js b/platforms/android/assets/www/node_modules/lodash/lodash.js new file mode 100644 index 0000000..0fc4b1c --- /dev/null +++ b/platforms/android/assets/www/node_modules/lodash/lodash.js @@ -0,0 +1,15073 @@ +/** + * @license + * lodash 4.6.1 (Custom Build) + * Build: `lodash -d -o ./foo/lodash.js` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.6.1'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for wrapper metadata. */ + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256, + FLIP_FLAG = 512; + + /** Used to compose bitmasks for comparison styles. */ + var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 150, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reUnescapedHtml = /[&<>"'`]/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g; + + /** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect hexadecimal string values. */ + var reHasHexPrefix = /^0x/i; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari > 5). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ + var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsQuoteRange = '\\u2018\\u2019\\u201c\\u201d', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsQuoteRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', + rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + + /** Used to match non-compound words composed of alphanumeric characters. */ + var reBasicWord = /[a-zA-Z0-9]+/g; + + /** Used to match complex or compound words. */ + var reComplexWord = RegExp([ + rsUpper + '?' + rsLower + '+(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsUpperMisc + '+(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', + rsUpper + '?' + rsLowerMisc + '+', + rsUpper + '+', + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasComplexWord = /[a-z][A-Z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Reflect', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', '_', + 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dateTag] = typedArrayTags[errorTag] = + typedArrayTags[funcTag] = typedArrayTags[mapTag] = + typedArrayTags[numberTag] = typedArrayTags[objectTag] = + typedArrayTags[regexpTag] = typedArrayTags[setTag] = + typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = + cloneableTags[dateTag] = cloneableTags[float32Tag] = + cloneableTags[float64Tag] = cloneableTags[int8Tag] = + cloneableTags[int16Tag] = cloneableTags[int32Tag] = + cloneableTags[mapTag] = cloneableTags[numberTag] = + cloneableTags[objectTag] = cloneableTags[regexpTag] = + cloneableTags[setTag] = cloneableTags[stringTag] = + cloneableTags[symbolTag] = cloneableTags[uint8Tag] = + cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = + cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map latin-1 supplementary letters to basic latin letters. */ + var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + }; + + /** Used to determine if values are of the language type `Object`. */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `exports`. */ + var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) + ? exports + : undefined; + + /** Detect free variable `module`. */ + var freeModule = (objectTypes[typeof module] && module && !module.nodeType) + ? module + : undefined; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = (freeModule && freeModule.exports === freeExports) + ? freeExports + : undefined; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global); + + /** Detect free variable `self`. */ + var freeSelf = checkGlobal(objectTypes[typeof self] && self); + + /** Detect free variable `window`. */ + var freeWindow = checkGlobal(objectTypes[typeof window] && window); + + /** Detect `this` as the global object. */ + var thisGlobal = checkGlobal(objectTypes[typeof this] && this); + + /** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ + var root = freeGlobal || + ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || + freeSelf || thisGlobal || Function('return this')(); + + /*--------------------------------------------------------------------------*/ + + /** + * Adds the key-value `pair` to `map`. + * + * @private + * @param {Object} map The map to modify. + * @param {Array} pair The key-value pair to add. + * @returns {Object} Returns `map`. + */ + function addMapEntry(map, pair) { + // Don't return `Map#set` because it doesn't return the map instance in IE 11. + map.set(pair[0], pair[1]); + return map; + } + + /** + * Adds `value` to `set`. + * + * @private + * @param {Object} set The set to modify. + * @param {*} value The value to add. + * @returns {Object} Returns `set`. + */ + function addSetEntry(set, value) { + set.add(value); + return set; + } + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + var length = args.length; + switch (length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * Creates a new array concatenating `array` with `other`. + * + * @private + * @param {Array} array The first array to concatenate. + * @param {Array} other The second array to concatenate. + * @returns {Array} Returns the new concatenated array. + */ + function arrayConcat(array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength); + + while (++index < length) { + result[index] = array[index]; + } + while (++othIndex < othLength) { + result[index++] = other[othIndex]; + } + return result; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} array The array to search. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + return !!array.length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to search. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? current === current + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of methods like `_.find` and `_.findKey`, without + * support for iteratee shorthands, which iterates over `collection` using + * `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to search. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the new array of key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing wrapper metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Checks if `value` is a global object. + * + * @private + * @param {*} value The value to check. + * @returns {null|Object} Returns `value` if it's a global object, else `null`. + */ + function checkGlobal(value) { + return (value && value.Object === Object) ? value : null; + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://code.google.com/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + result++; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + function deburrLetter(letter) { + return deburredLetters[letter]; + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(chr) { + return htmlEscapes[chr]; + } + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ + function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; + } + + /** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ + function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to an array. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the converted array. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the converted array. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + if (!(string && reHasComplexSymbol.test(string))) { + return string.length; + } + var result = reComplexSymbol.lastIndex = 0; + while (reComplexSymbol.test(string)) { + result++; + } + return result; + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return string.match(reComplexSymbol); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + function unescapeHtmlChar(chr) { + return htmlUnescapes[chr]; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Use `context` to mock `Date#getTime` use in `_.now`. + * var mock = _.runInContext({ + * 'Date': function() { + * return { 'getTime': getTimeMock }; + * } + * }); + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + function runInContext(context) { + context = context ? _.defaults({}, context, _.pick(root, contextProps)) : root; + + /** Built-in constructor references. */ + var Date = context.Date, + Error = context.Error, + Math = context.Math, + RegExp = context.RegExp, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = context.Array.prototype, + objectProto = context.Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = context.Function.prototype.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Reflect = context.Reflect, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + clearTimeout = context.clearTimeout, + enumerate = Reflect ? Reflect.enumerate : undefined, + getPrototypeOf = Object.getPrototypeOf, + getOwnPropertySymbols = Object.getOwnPropertySymbols, + iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined, + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + setTimeout = context.setTimeout, + splice = arrayProto.splice; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = Object.keys, + nativeMax = Math.max, + nativeMin = Math.min, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var Map = getNative(context, 'Map'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ + var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var mapCtorString = Map ? funcToString.call(Map) : '', + setCtorString = Set ? funcToString.call(Set) : '', + weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : ''; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chaining. Methods that operate on and return arrays, collections, and + * functions can be chained together. Methods that retrieve a single value or + * may return a primitive value will automatically end the chain sequence and + * return the unwrapped value. Otherwise, the value must be unwrapped with + * `_#value`. + * + * Explicit chaining, which must be unwrapped with `_#value` in all cases, + * may be enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization to merge iteratee calls; this avoids the creation + * of intermediate arrays and can greatly reduce the number of iteratee executions. + * Sections of a chain sequence qualify for shortcut fusion if the section is + * applied to an array of at least two hundred elements and any iteratees + * accept only one argument. The heuristic for whether a section qualifies + * for shortcut fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatten`, `flattenDeep`, `flattenDepth`, `flip`, `flow`, `flowRight`, + * `fromPairs`, `functions`, `functionsIn`, `groupBy`, `initial`, `intersection`, + * `intersectionBy`, `intersectionWith`, `invert`, `invertBy`, `invokeMap`, + * `iteratee`, `keyBy`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, + * `matches`, `matchesProperty`, `memoize`, `merge`, `mergeWith`, `method`, + * `methodOf`, `mixin`, `negate`, `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, + * `over`, `overArgs`, `overEvery`, `overSome`, `partial`, `partialRight`, + * `partition`, `pick`, `pickBy`, `plant`, `property`, `propertyOf`, `pull`, + * `pullAll`, `pullAllBy`, `pullAllWith`, `pullAt`, `push`, `range`, + * `rangeRight`, `rearg`, `reject`, `remove`, `rest`, `reverse`, `sampleSize`, + * `set`, `setWith`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`, `spread`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `tap`, `throttle`, + * `thru`, `toArray`, `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, + * `transform`, `unary`, `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, + * `uniqWith`, `unset`, `unshift`, `unzip`, `unzipWith`, `update`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, `zipObject`, + * `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `each`, `eachRight`, + * `endsWith`, `eq`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `first`, `floor`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `get`, `gt`, `gte`, `has`, `hasIn`, `head`, `identity`, `includes`, + * `indexOf`, `inRange`, `invoke`, `isArguments`, `isArray`, `isArrayBuffer`, + * `isArrayLike`, `isArrayLikeObject`, `isBoolean`, `isBuffer`, `isDate`, + * `isElement`, `isEmpty`, `isEqual`, `isEqualWith`, `isError`, `isFinite`, + * `isFunction`, `isInteger`, `isLength`, `isMap`, `isMatch`, `isMatchWith`, + * `isNaN`, `isNative`, `isNil`, `isNull`, `isNumber`, `isObject`, `isObjectLike`, + * `isPlainObject`, `isRegExp`, `isSafeInteger`, `isSet`, `isString`, + * `isUndefined`, `isTypedArray`, `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, + * `maxBy`, `mean`, `min`, `minBy`, `noConflict`, `noop`, `now`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toInteger`, `toJSON`, `toLength`, `toLower`, + * `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, `trimEnd`, + * `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, `upperFirst`, + * `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The function whose prototype all chaining wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB). Change the following template settings to use + * alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || + (arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an hash object. + * + * @private + * @constructor + * @returns {Object} Returns the new hash object. + */ + function Hash() {} + + /** + * Removes `key` and its value from the hash. + * + * @private + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(hash, key) { + return hashHas(hash, key) && delete hash[key]; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @param {Object} hash The hash to query. + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(hash, key) { + if (nativeCreate) { + var result = hash[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(hash, key) ? hash[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @param {Object} hash The hash to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(hash, key) { + return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + */ + function hashSet(hash, key, value) { + hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function MapCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.clear(); + while (++index < length) { + var entry = values[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapClear() { + this.__data__ = { + 'hash': new Hash, + 'map': Map ? new Map : [], + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapDelete(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashDelete(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map['delete'](key) : assocDelete(data.map, key); + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapGet(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashGet(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map.get(key) : assocGet(data.map, key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapHas(key) { + var data = this.__data__; + if (isKeyable(key)) { + return hashHas(typeof key == 'string' ? data.string : data.hash, key); + } + return Map ? data.map.has(key) : assocHas(data.map, key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache object. + */ + function mapSet(key, value) { + var data = this.__data__; + if (isKeyable(key)) { + hashSet(typeof key == 'string' ? data.string : data.hash, key, value); + } else if (Map) { + data.map.set(key, value); + } else { + assocSet(data.map, key, value); + } + return this; + } + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates a set cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.__data__ = new MapCache; + while (++index < length) { + this.push(values[index]); + } + } + + /** + * Checks if `value` is in `cache`. + * + * @private + * @param {Object} cache The set cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function cacheHas(cache, value) { + var map = cache.__data__; + if (isKeyable(value)) { + var data = map.__data__, + hash = typeof value == 'string' ? data.string : data.hash; + + return hash[value] === HASH_UNDEFINED; + } + return map.has(value); + } + + /** + * Adds `value` to the set cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ + function cachePush(value) { + var map = this.__data__; + if (isKeyable(value)) { + var data = map.__data__, + hash = typeof value == 'string' ? data.string : data.hash; + + hash[value] = HASH_UNDEFINED; + } + else { + map.set(value, HASH_UNDEFINED); + } + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function Stack(values) { + var index = -1, + length = values ? values.length : 0; + + this.clear(); + while (++index < length) { + var entry = values[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = { 'array': [], 'map': null }; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + array = data.array; + + return array ? assocDelete(array, key) : data.map['delete'](key); + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + var data = this.__data__, + array = data.array; + + return array ? assocGet(array, key) : data.map.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + var data = this.__data__, + array = data.array; + + return array ? assocHas(array, key) : data.map.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache object. + */ + function stackSet(key, value) { + var data = this.__data__, + array = data.array; + + if (array) { + if (array.length < (LARGE_ARRAY_SIZE - 1)) { + assocSet(array, key, value); + } else { + data.array = null; + data.map = new MapCache(array); + } + } + var map = data.map; + if (map) { + map.set(key, value); + } + return this; + } + + /*------------------------------------------------------------------------*/ + + /** + * Removes `key` and its value from the associative array. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function assocDelete(array, key) { + var index = assocIndexOf(array, key); + if (index < 0) { + return false; + } + var lastIndex = array.length - 1; + if (index == lastIndex) { + array.pop(); + } else { + splice.call(array, index, 1); + } + return true; + } + + /** + * Gets the associative array value for `key`. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function assocGet(array, key) { + var index = assocIndexOf(array, key); + return index < 0 ? undefined : array[index][1]; + } + + /** + * Checks if an associative array value for `key` exists. + * + * @private + * @param {Array} array The array to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function assocHas(array, key) { + return assocIndexOf(array, key) > -1; + } + + /** + * Gets the index at which the first occurrence of `key` is found in `array` + * of key-value pairs. + * + * @private + * @param {Array} array The array to search. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Sets the associative array `key` to `value`. + * + * @private + * @param {Array} array The array to modify. + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + */ + function assocSet(array, key, value) { + var index = assocIndexOf(array, key); + if (index < 0) { + array.push([key, value]); + } else { + array[index][1] = value; + } + } + + /*------------------------------------------------------------------------*/ + + /** + * Used by `_.defaults` to customize its `_.assignIn` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function assignInDefaults(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (typeof key == 'number' && value === undefined && !(key in object))) { + object[key] = value; + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths of elements to pick. + * @returns {Array} Returns the new array of picked elements. + */ + function baseAt(object, paths) { + var index = -1, + isNil = object == null, + length = paths.length, + result = Array(length); + + while (++index < length) { + result[index] = isNil ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ + function baseCastArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the array-like object. + */ + function baseCastFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ + function baseCastPath(value) { + return isArray(value) ? value : stringToPath(value); + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {boolean} [isFull] Specify a clone including symbols. + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, isFull, customizer, key, object, stack) { + var result; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + if (isHostObject(value)) { + return object ? value : {}; + } + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + result = baseAssign(result, value); + return isFull ? copySymbols(value, result) : result; + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); + }); + return (isFull && !isArr) ? copySymbols(value, result) : result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new function. + */ + function baseConforms(source) { + var props = keys(source), + length = props.length; + + return function(object) { + if (object == null) { + return !length; + } + var index = length; + while (index--) { + var key = props[index], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in Object(object))) || !predicate(value)) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + function baseCreate(proto) { + return isObject(proto) ? objectCreate(proto) : {}; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts an array + * of `func` arguments. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments to provide to `func`. + * @returns {number} Returns the timer id. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support for + * excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (depth > 0 && isArrayLikeObject(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forIn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForIn(object, iteratee) { + return object == null ? object : baseFor(object, iteratee, keysIn); + } + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`, + // that are composed entirely of index properties, return `false` for + // `hasOwnProperty` checks of them. + return hasOwnProperty.call(object, key) || + (typeof object == 'object' && key in object && getPrototypeOf(object) === null); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments to numbers. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + if (!isKey(path, object)) { + path = baseCastPath(path); + object = parent(object, path); + path = last(path); + } + var func = object == null ? object : object[path]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = getTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = getTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + stack || (stack = new Stack); + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, equalFunc, customizer, bitmask, stack); + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack, + result = customizer ? customizer(objValue, srcValue, key, object, source, stack) : undefined; + + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + var type = typeof value; + if (type == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (type == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + return nativeKeys(Object(object)); + } + + /** + * The base implementation of `_.keysIn` which doesn't skip the constructor + * property of prototypes or treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + object = object == null ? object : Object(object); + + var result = []; + for (var key in object) { + result.push(key); + } + return result; + } + + // Fallback for IE < 9 with es6-shim. + if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { + baseKeysIn = function(object) { + return iteratorToArray(enumerate(object)); + }; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && + (value !== undefined || (key in Object(object))); + }; + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new function. + */ + function baseMatchesProperty(path, srcValue) { + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + var props = (isArray(source) || isTypedArray(source)) + ? undefined + : keysIn(source); + + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(object[key], srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = object[key], + srcValue = source[key], + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + newValue = srcValue; + if (isArray(srcValue) || isTypedArray(srcValue)) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else { + isCommon = false; + newValue = baseClone(srcValue, !customizer); + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + isCommon = false; + newValue = baseClone(srcValue, !customizer); + } + else { + newValue = objValue; + } + } + else { + isCommon = false; + } + } + stack.set(srcValue, newValue); + + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + } + stack['delete'](srcValue); + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : Array(1), getIteratee()); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property names. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return arrayReduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, predicate) { + var result = {}; + baseForIn(object, function(value, key) { + if (predicate(value, key)) { + result[key] = value; + } + }); + return result; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (lastIndex == length || index != previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } + else if (!isKey(index, array)) { + var path = baseCastPath(index), + object = parent(array, path); + + if (object != null) { + delete object[last(path)]; + } + } + else { + delete array[index]; + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments to numbers. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the new array of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = path[index]; + if (isObject(nested)) { + var newValue = value; + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = objValue == null + ? (isIndex(path[index + 1]) ? [] : {}) + : objValue; + } + } + assignValue(nested, key, newValue); + } + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop detection. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq`. + * + * @private + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array) { + return baseSortedUniqBy(array); + } + + /** + * The base implementation of `_.sortedUniqBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniqBy(array, iteratee) { + var index = 0, + length = array.length, + value = array[0], + computed = iteratee ? iteratee(value) : value, + seen = computed, + resIndex = 1, + result = [value]; + + while (++index < length) { + value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!eq(computed, seen)) { + seen = computed; + result[resIndex++] = value; + } + } + return result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = isKey(path, object) ? [path + ''] : baseCastPath(path); + object = parent(object, path); + var key = last(path); + return (object != null && has(object, key)) ? delete object[key] : true; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var index = -1, + length = arrays.length; + + while (++index < length) { + var result = result + ? arrayPush( + baseDifference(result, arrays[index], iteratee, comparator), + baseDifference(arrays[index], result, iteratee, comparator) + ) + : arrays[index]; + } + return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property names. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + assignFunc(result, props[index], index < valsLength ? values[index] : undefined); + } + return result; + } + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var result = new buffer.constructor(buffer.length); + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `map`. + * + * @private + * @param {Object} map The map to clone. + * @returns {Object} Returns the cloned map. + */ + function cloneMap(map) { + return arrayReduce(mapToArray(map), addMapEntry, new map.constructor); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of `set`. + * + * @private + * @param {Object} set The set to clone. + * @returns {Object} Returns the cloned set. + */ + function cloneSet(set) { + return arrayReduce(setToArray(set), addSetEntry, new set.constructor); + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object) { + return copyObjectWith(source, props, object); + } + + /** + * This function is like `copyObject` except that it accepts a function to + * customize copied values. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObjectWith(source, props, object, customizer) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : source[key]; + + assignValue(object, key, newValue); + } + return object; + } + + /** + * Copies own symbol properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return rest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = typeof customizer == 'function' + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBaseWrapper(func, bitmask, thisArg) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = reHasComplexSymbol.test(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols ? strSymbols[0] : string.charAt(0), + trailing = strSymbols ? strSymbols.slice(1).join('') : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string)), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurryWrapper(func, bitmask, arity) { + var Ctor = createCtorWrapper(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getPlaceholder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurryWrapper( + func, bitmask, createHybridWrapper, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return rest(function(funcs) { + funcs = baseFlatten(funcs, 1); + + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && + isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), + isFlip = bitmask & FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func); + + function wrapper() { + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getPlaceholder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurryWrapper( + func, bitmask, createHybridWrapper, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new invoker function. + */ + function createOver(arrayFunc) { + return rest(function(iteratees) { + iteratees = arrayMap(baseFlatten(iteratees, 1), getIteratee()); + return rest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {string} string The string to create padding for. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(string, length, chars) { + length = toInteger(length); + + var strLength = stringSize(string); + if (!length || strLength >= length) { + return ''; + } + var padLength = length - strLength; + chars = chars === undefined ? ' ' : (chars + ''); + + var result = repeat(chars, nativeCeil(padLength / stringSize(chars))); + return reHasComplexSymbol.test(chars) + ? stringToArray(result).slice(0, padLength).join('') + : result.slice(0, padLength); + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toNumber(start); + start = start === start ? start : 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = toNumber(end) || 0; + } + step = step === undefined ? (start < end ? 1 : -1) : (toNumber(step) || 0); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & CURRY_FLAG, + newArgPos = argPos ? copyArray(argPos) : undefined, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!(bitmask & CURRY_BOUND_FLAG)) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, newArgPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = toInteger(precision); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && new Set([1, 2]).size === 2) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask of wrapper flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] == null + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { + bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == BIND_FLAG) { + var result = createBaseWrapper(func, bitmask, thisArg); + } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { + result = createCurryWrapper(func, bitmask, arity); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { + result = createPartialWrapper(func, bitmask, thisArg, partials); + } else { + result = createHybridWrapper.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setter(result, newData); + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var index = -1, + isPartial = bitmask & PARTIAL_COMPARE_FLAG, + isUnordered = bitmask & UNORDERED_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked) { + return stacked == other; + } + var result = true; + stack.set(array, other); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isUnordered) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack); + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + result = false; + break; + } + } + stack['delete'](array); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) ? other != +other : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + // Recursively compare objects (susceptible to call stack limits). + return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask | UNORDERED_COMPARE_FLAG, stack.set(object, other)); + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : baseHas(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + var result = true; + stack.set(object, other); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + return result; + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the appropriate "iteratee" function. If the `_.iteratee` method is + * customized this function returns the custom method, otherwise it returns + * `baseIteratee`. If arguments are provided the chosen function is invoked + * with them and its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ + var getLength = baseProperty('length'); + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = toPairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = object[key]; + return isNative(value) ? value : undefined; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getPlaceholder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Creates an array of the own symbol properties of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = getOwnPropertySymbols || function() { + return []; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function getTag(value) { + return objectToString.call(value); + } + + // Fallback for IE 11 providing `toStringTag` values for maps, sets, and weakmaps. + if ((Map && getTag(new Map) != mapTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = objectToString.call(value), + Ctor = result == objectTag ? value.constructor : null, + ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case mapCtorString: return mapTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + if (object == null) { + return false; + } + var result = hasFunc(object, path); + if (!result && !isKey(path)) { + path = baseCastPath(path); + object = parent(object, path); + if (object != null) { + path = last(path); + result = hasFunc(object, path); + } + } + var length = object ? object.length : undefined; + return result || ( + !!length && isLength(length) && isIndex(path, length) && + (isArray(object) || isString(object) || isArguments(object)) + ); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototypeOf(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return cloneMap(object); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return cloneSet(object); + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Creates an array of index keys for `object` values of arrays, + * `arguments` objects, and strings, otherwise `null` is returned. + * + * @private + * @param {Object} object The object to query. + * @returns {Array|null} Returns index keys, else `null`. + */ + function indexKeys(object) { + var length = object ? object.length : undefined; + if (isLength(length) && + (isArray(object) || isString(object) || isArguments(object))) { + return baseTimes(length, String); + } + return null; + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (typeof value == 'number') { + return true; + } + return !isArray(value) && + (reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object))); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return type == 'number' || type == 'boolean' || + (type == 'string' && value != '__proto__') || value == null; + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * modify function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * combined case where curried functions have `_.ary` and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); + + var isCombo = + ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || + ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : copyArray(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : copyArray(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : copyArray(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : copyArray(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = copyArray(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged counterparts. + * @returns {*} Returns the value to assign. + */ + function mergeDefaults(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + baseMerge(objValue, srcValue, undefined, mergeDefaults, stack.set(srcValue, objValue)); + } + return objValue; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length == 1 ? object : get(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = (function() { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); + }; + }()); + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + function stringToPath(string) { + var result = []; + toString(string).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=0] The length of each chunk. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size) { + size = nativeMax(toInteger(size), 0); + + var length = array ? array.length : 0; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + var concat = rest(function(array, values) { + if (!isArray(array)) { + array = array == null ? [] : [Object(array)]; + } + values = baseFlatten(values, 1); + return arrayConcat(array, values); + }); + + /** + * Creates an array of unique `array` values not included in the other + * given arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. The order of result values is determined by the + * order they occur in the first array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([3, 2, 1], [4, 2]); + * // => [3, 1] + */ + var difference = rest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. Result values are chosen from the first array. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); + * // => [3.1, 1.3] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = rest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true), getIteratee(iteratee)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. Result values + * are chosen from the first array. The comparator is invoked with two arguments: + * (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = rest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate) { + return (array && array.length) + ? baseFindIndex(array, getIteratee(predicate, 3)) + : -1; + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate) { + return (array && array.length) + ? baseFindIndex(array, getIteratee(predicate, 3), true) + : -1; + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs ? pairs.length : 0, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return array ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + fromIndex = toInteger(fromIndex); + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return baseIndexOf(array, value, fromIndex); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + return dropRight(array, 1); + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. The order of result values is determined by the + * order they occur in the first array. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [4, 2], [1, 2]); + * // => [2] + */ + var intersection = rest(function(arrays) { + var mapped = arrayMap(arrays, baseCastArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. Result values are chosen from the first array. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = rest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, baseCastArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. Result values are chosen + * from the first array. The comparator is invoked with two arguments: + * (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = rest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, baseCastArrayLikeObject); + + if (comparator === last(mapped)) { + comparator = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array ? nativeJoin.call(array, separator) : ''; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = (index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1)) + 1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ + var pull = rest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pullAll(array, [2, 3]); + * console.log(array); + * // => [1, 1] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove, + * specified individually or in arrays. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [5, 10, 15, 20]; + * var evens = _.pullAt(array, 1, 3); + * + * console.log(array); + * // => [5, 15] + * + * console.log(evens); + * // => [10, 20] + */ + var pullAt = rest(function(array, indexes) { + indexes = arrayMap(baseFlatten(indexes, 1), String); + + var result = baseAt(array, indexes); + basePullAt(array, indexes.sort(compareAscending)); + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @category Array + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array ? nativeReverse.call(array) : array; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of [`Array#slice`](https://mdn.io/Array/slice) + * to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` should + * be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + * + * _.sortedIndex([4, 5], 4); + * // => 0 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * var dict = { 'thirty': 30, 'forty': 40, 'fifty': 50 }; + * + * _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict)); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([1, 1, 2, 2], 2); + * // => 2 + */ + function sortedIndexOf(array, value) { + var length = array ? array.length : 0; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * _.sortedLastIndex([4, 5], 4); + * // => 1 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted into `array`. + * @example + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([1, 1, 2, 2], 2); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array ? array.length : 0; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniqBy(array, getIteratee(iteratee)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + return drop(array, 1); + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with three + * arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2, 1], [4, 2], [1, 2]); + * // => [2, 1, 4] + */ + var union = rest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by which + * uniqueness is computed. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor); + * // => [2.1, 1.2, 4.3] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = rest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, true), getIteratee(iteratee)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = rest(function(arrays) { + var comparator = last(arrays); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return baseUniq(baseFlatten(arrays, 1, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) + ? baseUniq(array) + : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) + ? baseUniq(array, getIteratee(iteratee)) + : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The comparator is invoked with + * two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + return (array && array.length) + ? baseUniq(array, undefined, comparator) + : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + * + * _.unzip(zipped); + * // => [['fred', 'barney'], [30, 40], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ + var without = rest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xor([2, 1], [4, 2]); + * // => [1, 4] + */ + var xor = rest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by which + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor); + * // => [1.2, 4.3] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = rest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The comparator is invoked with + * two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = rest(function(arrays) { + var comparator = last(arrays); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second elements + * of the given arrays, and so on. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ + var zip = rest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property names and one of corresponding values. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} [props=[]] The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} [props=[]] The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = rest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object that wraps `value` with explicit method chaining enabled. + * The result of such method chaining must be unwrapped with `_#value`. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain in order to modify intermediate results. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain. + * + * @static + * @memberOf _ + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @category Seq + * @param {...(string|string[])} [paths] The property paths of elements to pick, + * specified individually or in arrays. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + * + * _(['a', 'b', 'c']).at(0, 2).value(); + * // => ['a', 'c'] + */ + var wrapperAt = rest(function(paths) { + paths = baseFlatten(paths, 1); + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * This method is the wrapper version of `_.flatMap`. + * + * @name flatMap + * @memberOf _ + * @category Seq + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _([1, 2]).flatMap(duplicate).value(); + * // => [1, 1, 2, 2] + */ + function wrapperFlatMap(iteratee) { + return this.map(iteratee).flatten(); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the number of times the key was returned by `iteratee`. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three arguments: + * (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + function find(collection, predicate) { + predicate = getIteratee(predicate, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, baseEach); + } + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + function findLast(collection, predicate) { + predicate = getIteratee(predicate, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, true); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, baseEachRight); + } + + /** + * Creates an array of flattened values by running each element in `collection` + * through `iteratee` and concating its result to the other mapped values. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior use `_.forIn` or `_.forOwn` + * for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(value) { + * console.log(value); + * }); + * // => logs `1` then `2` + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ + function forEach(collection, iteratee) { + return (typeof iteratee == 'function' && isArray(collection)) + ? arrayEach(collection, iteratee) + : baseEach(collection, baseCastFunction(iteratee)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => logs `2` then `1` + */ + function forEachRight(collection, iteratee) { + return (typeof iteratee == 'function' && isArray(collection)) + ? arrayEachRight(collection, iteratee) + : baseEachRight(collection, baseCastFunction(iteratee)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of elements responsible for generating the key. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string it's checked + * for a substring of `value`, otherwise [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it's + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = rest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + result[key] = value; + }); + + /** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, `fill`, + * `invert`, `parseInt`, `random`, `range`, `rangeRight`, `slice`, `some`, + * `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimEnd`, `trimStart`, + * and `words` + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} [iteratees=[_.identity]] The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getIteratee(predicate, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var array = isArrayLike(collection) ? collection : values(collection), + length = array.length; + + return length > 0 ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=0] The number of elements to sample. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n) { + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1; + + n = baseClamp(toInteger(n), 0, length); + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand]; + + result[rand] = result[index]; + result[index] = value; + } + result.length = n; + return result; + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + return sampleSize(collection, MAX_ARRAY_LENGTH); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + var result = collection.length; + return (result && isString(collection)) ? stringSize(collection) : result; + } + return keys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} [iteratees=[_.identity]] + * The iteratees to sort by, specified individually or in arrays. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, function(o) { return o.user; }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.sortBy(users, 'user', function(o) { + * return Math.floor(o.age / 10); + * }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + var sortBy = rest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees.length = 1; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @type {Function} + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked + */ + var now = Date.now; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that accepts up to `n` arguments, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = rest(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getPlaceholder(bind)); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = rest(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getPlaceholder(bindKey)); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrapper(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrapper(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide an options object to indicate whether `func` should be invoked on + * the leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent calls + * to the debounced function return the result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it's invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + leading = false, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(toNumber(options.maxWait) || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + args = maxTimeoutId = thisArg = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function flush() { + if ((timeoutId && trailingCall) || (maxTimeoutId && trailing)) { + result = func.apply(thisArg, args); + } + cancel(); + return result; + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!lastCalled && !maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled); + + var isCalled = (remaining <= 0 || remaining > maxWait) && + (leading || maxTimeoutId); + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => logs 'deferred' after one or more milliseconds + */ + var defer = rest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ + var delay = rest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrapper(func, FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new memoize.Cache; + return memoized; + } + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with arguments transformed by + * corresponding `transforms`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms] The functions to transform + * arguments, specified individually or in arrays. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, square, doubled); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = rest(function(func, transforms) { + transforms = arrayMap(baseFlatten(transforms, 1), getIteratee()); + + var funcsLength = transforms.length; + return rest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partial` arguments prepended + * to those provided to the new function. This method is like `_.bind` except + * it does **not** alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = rest(function(func, partials) { + var holders = replaceHolders(partials, getPlaceholder(partial)); + return createWrapper(func, PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to those provided to the new function. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = rest(function(func, partials) { + var holders = replaceHolders(partials, getPlaceholder(partialRight)); + return createWrapper(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified indexes where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes, + * specified individually or in arrays. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, 2, 0, 1); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = rest(function(func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes, 1)); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, array); + case 1: return func.call(this, args[0], array); + case 2: return func.call(this, args[0], args[1], array); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = array; + return apply(func, this, otherArgs); + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of the created + * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). + * + * **Note:** This method is based on the [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? 0 : nativeMax(toInteger(start), 0); + return rest(function(args) { + var array = args[start], + otherArgs = args.slice(0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide an options object to indicate whether + * `func` should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Any additional arguments provided to the function are + * appended to those provided to the wrapper function. The wrapper is invoked + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

      ' + func(text) + '

      '; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

      fred, barney, & pebbles

      ' + */ + function wrap(value, wrapper) { + wrapper = wrapper == null ? identity : wrapper; + return partial(wrapper, value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, false, true); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + return baseClone(value, false, true, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, true, true); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + return baseClone(value, true, true, customizer); + } + + /** + * Performs a [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + function gt(value, other) { + return value > other; + } + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + function gte(value, other) { + return value >= other; + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @type {Function} + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + function isArrayBuffer(value) { + return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; + } + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(getLength(value)) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && objectToString.call(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = !Buffer ? constant(false) : function(value) { + return value instanceof Buffer; + }; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + function isDate(value) { + return isObjectLike(value) && objectToString.call(value) == dateTag; + } + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty collection or object. A value is considered + * empty if it's an `arguments` object, array, string, or jQuery-like collection + * with a length of `0` or has no own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are **not** supported. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined` comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + return (objectToString.call(value) == errorTag) || + (typeof value.message == 'string' && typeof value.name == 'string'); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MAX_VALUE); + * // => true + * + * _.isFinite(3.14); + * // => true + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8 which returns 'object' for typed array and weak map constructors, + // and PhantomJS 1.9 which returns 'function' for `NodeList` instances. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is loosely based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + function isMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. This method is + * equivalent to a `_.matches` function when `source` is partially applied. + * + * **Note:** This method supports comparing the same values as `_.isEqual`. + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.isMatch(object, { 'age': 40 }); + * // => true + * + * _.isMatch(object, { 'age': 36 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined` comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(funcToString.call(value)); + } + return isObjectLike(value) && + (isHostObject(value) ? reIsNative : reIsHostCtor).test(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && objectToString.call(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || + objectToString.call(value) != objectTag || isHostObject(value)) { + return false; + } + var proto = getPrototypeOf(value); + if (proto === null) { + return true; + } + var Ctor = proto.constructor; + return (typeof Ctor == 'function' && + Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + function isRegExp(value) { + return isObject(value) && objectToString.call(value) == regexpTag; + } + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + function isSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + function isTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && objectToString.call(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + function lt(value, other) { + return value < other; + } + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`. + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + function lte(value, other) { + return value <= other; + } + + /** + * Converts `value` to an array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (iteratorSymbol && value[iteratorSymbol]) { + return iteratorToArray(value[iteratorSymbol]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to an integer. + * + * **Note:** This function is loosely based on [`ToInteger`](http://www.ecma-international.org/ecma-262/6.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3'); + * // => 3 + */ + function toInteger(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + var remainder = value % 1; + return value === value ? (remainder ? value - remainder : value) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3); + * // => 3 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3'); + * // => 3 + */ + function toNumber(value) { + if (isObject(value)) { + var other = isFunction(value.valueOf) ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable + * properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3'); + * // => 3 + */ + function toSafeInteger(value) { + return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); + } + + /** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (value == null) { + return ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable properties of source objects to the destination + * object. Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.c = 3; + * } + * + * function Bar() { + * this.e = 5; + * } + * + * Foo.prototype.d = 4; + * Bar.prototype.f = 6; + * + * _.assign({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3, 'e': 5 } + */ + var assign = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * function Bar() { + * this.d = 4; + * } + * + * Foo.prototype.c = 3; + * Bar.prototype.e = 5; + * + * _.assignIn({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 } + */ + var assignIn = createAssigner(function(object, source) { + if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { + copyObject(source, keysIn(source), object); + return; + } + for (var key in source) { + assignValue(object, key, source[key]); + } + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObjectWith(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths of elements to pick, + * specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + * + * _.at(['a', 'b', 'c'], 0, 2); + * // => ['a', 'c'] + */ + var at = rest(function(object, paths) { + return baseAt(object, baseFlatten(paths, 1)); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a `properties` + * object is given its own enumerable properties are assigned to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties ? baseAssign(result, properties) : result; + } + + /** + * Assigns own and inherited enumerable properties of source objects to the + * destination object for all destination properties that resolve to `undefined`. + * Source objects are applied from left to right. Once a property is set, + * additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var defaults = rest(function(args) { + args.push(undefined, assignInDefaults); + return apply(assignInWith, undefined, args); + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); + * // => { 'user': { 'name': 'barney', 'age': 36 } } + * + */ + var defaultsDeep = rest(function(args) { + args.push(undefined, mergeDefaults); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFind(object, getIteratee(predicate, 3), baseForOwn, true); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFind(object, getIteratee(predicate, 3), baseForOwnRight, true); + } + + /** + * Iterates over own and inherited enumerable properties of an object invoking + * `iteratee` for each property. The iteratee is invoked with three arguments: + * (value, key, object). Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a', 'b', then 'c' (iteration order is not guaranteed) + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, baseCastFunction(iteratee), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c' + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, baseCastFunction(iteratee), keysIn); + } + + /** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The iteratee is invoked with three arguments: + * (value, key, object). Iteratee functions may exit iteration early by + * explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' then 'b' (iteration order is not guaranteed) + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, baseCastFunction(iteratee)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b' + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, baseCastFunction(iteratee)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined` the `defaultValue` is used in its place. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * var other = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b.c'); + * // => true + * + * _.hasIn(object, ['a', 'b', 'c']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite property + * assignments of previous values. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` through `iteratee`. + * The corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = rest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + var isProto = isPrototype(object); + if (!(isProto || isArrayLike(object))) { + return baseKeys(object); + } + var indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + for (var key in object) { + if (baseHas(object, key) && + !(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(isProto && key == 'constructor')) { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + var index = -1, + isProto = isPrototype(object), + props = baseKeysIn(object), + propsLength = props.length, + indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; + + while (++index < propsLength) { + var key = props[index]; + if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * property of `object` through `iteratee`. The iteratee is invoked with + * three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + result[iteratee(value, key, object)] = value; + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated by + * running each own enumerable property of `object` through `iteratee`. The + * iteratee is invoked with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + result[key] = iteratee(value, key, object); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable properties of source objects into the destination + * object. Source properties that resolve to `undefined` are skipped if a + * destination value exists. Array and plain object properties are merged + * recursively.Other objects and value types are overridden by assignment. + * Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var users = { + * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] + * }; + * + * var ages = { + * 'data': [{ 'age': 36 }, { 'age': 40 }] + * }; + * + * _.merge(users, ages); + * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined` merging is handled by the + * method instead. The `customizer` is invoked with seven arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var other = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.mergeWith(object, other, customizer); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable properties of `object` that are not omitted. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property names to omit, specified + * individually or in arrays. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = rest(function(object, props) { + if (object == null) { + return {}; + } + props = arrayMap(baseFlatten(props, 1), String); + return basePick(object, baseDifference(keysIn(object), props)); + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable properties of `object` that `predicate` + * doesn't return truthy for. The predicate is invoked with two arguments: + * (value, key). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + predicate = getIteratee(predicate); + return basePickBy(object, function(value, key) { + return !predicate(value, key); + }); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property names to pick, specified + * individually or in arrays. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = rest(function(object, props) { + return object == null ? {} : basePick(object, baseFlatten(props, 1)); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|Object|string} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + return object == null ? {} : basePickBy(object, getIteratee(predicate)); + } + + /** + * This method is like `_.get` except that if the resolved value is a function + * it's invoked with the `this` binding of its parent object and its result + * is returned. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + if (!isKey(path, object)) { + path = baseCastPath(path); + var result = get(object, path); + object = parent(object, path); + } else { + result = object == null ? undefined : object[path]; + } + if (result === undefined) { + result = defaultValue; + } + return isFunction(result) ? result.call(object) : result; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, 'x[0].y.z', 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable key-value pairs for `object` which + * can be consumed by `_.fromPairs`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + function toPairs(object) { + return baseToPairs(object, keys(object)); + } + + /** + * Creates an array of own and inherited enumerable key-value pairs for + * `object` which can be consumed by `_.fromPairs`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 1]] (iteration order is not guaranteed) + */ + function toPairsIn(object) { + return baseToPairs(object, keysIn(object)); + } + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own enumerable + * properties through `iteratee`, with each invocation potentially mutating + * the `accumulator` object. The iteratee is invoked with four arguments: + * (accumulator, value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Array|Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object) || isTypedArray(object); + iteratee = getIteratee(iteratee, 4); + + if (accumulator == null) { + if (isArr || isObject(object)) { + var Ctor = object.constructor; + if (isArr) { + accumulator = isArray(object) ? new Ctor : []; + } else { + accumulator = isFunction(Ctor) ? baseCreate(getPrototypeOf(object)) : {}; + } + } else { + accumulator = {}; + } + } + (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, baseCastFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, baseCastFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object ? baseValues(object, keys(object)) : []; + } + + /** + * Creates an array of the own and inherited enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to but not including, `end`. If + * `end` is not specified it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toNumber(start) || 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = toNumber(end) || 0; + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are floats, + * a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toNumber(lower) || 0; + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toNumber(upper) || 0; + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar'); + * // => 'fooBar' + * + * _.camelCase('__foo_bar__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search from. + * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = typeof target == 'string' ? target : (target + ''); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + position -= target.length; + return position >= 0 && string.indexOf(target, position) == position; + } + + /** + * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in IE < 9, they can break out of + * attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ + var upperFirst = createCaseFirst('toUpperCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = stringSize(string); + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2, + leftLength = nativeFloor(mid), + rightLength = nativeCeil(mid); + + return createPadding('', leftLength, chars) + string + createPadding('', rightLength, chars); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + return string + createPadding(string, length, chars); + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + return createPadding(string, length, chars) + string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal, + * in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#x15.1.2.2) + * of `parseInt`. + * + * @static + * @memberOf _ + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + // Chrome fails to trim leading whitespace characters. + // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + string = toString(string).replace(reTrim, ''); + return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=0] The number of times to repeat the string. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n) { + string = toString(string); + n = toInteger(n); + + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + string += string; + } while (n); + + return result; + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--foo-bar'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the new array of string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + return toString(string).split(separator, limit); + } + + /** + * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__foo_bar__'); + * // => 'Foo Bar' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + capitalize(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = baseClamp(toInteger(position), 0, string.length); + return string.lastIndexOf(target, position) == position; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as free variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. + * @param {string} [options.variable] The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for functions like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' +

      y?Q`wE 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≺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

      diff --git a/platforms/android/assets/www/node_modules/sax/README.md b/platforms/android/assets/www/node_modules/sax/README.md new file mode 100644 index 0000000..c965242 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/README.md @@ -0,0 +1,216 @@ +# sax js + +A sax-style parser for XML and HTML. + +Designed with [node](http://nodejs.org/) in mind, but should work fine in +the browser or other CommonJS implementations. + +## What This Is + +* A very simple tool to parse through an XML string. +* A stepping stone to a streaming HTML parser. +* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML + docs. + +## What This Is (probably) Not + +* An HTML Parser - That's a fine goal, but this isn't it. It's just + XML. +* A DOM Builder - You can use it to build an object model out of XML, + but it doesn't do that out of the box. +* XSLT - No DOM = no querying. +* 100% Compliant with (some other SAX implementation) - Most SAX + implementations are in Java and do a lot more than this does. +* An XML Validator - It does a little validation when in strict mode, but + not much. +* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic + masochism. +* A DTD-aware Thing - Fetching DTDs is a much bigger job. + +## Regarding `Hello, world!').close(); + + // stream usage + // takes the same options as the parser + var saxStream = require("sax").createStream(strict, options) + saxStream.on("error", function (e) { + // unhandled errors will throw, since this is a proper node + // event emitter. + console.error("error!", e) + // clear the error + this._parser.error = null + this._parser.resume() + }) + saxStream.on("opentag", function (node) { + // same object as above + }) + // pipe is supported, and it's readable/writable + // same chunks coming in also go out. + fs.createReadStream("file.xml") + .pipe(saxStream) + .pipe(fs.createWriteStream("file-copy.xml")) + + + +## Arguments + +Pass the following arguments to the parser function. All are optional. + +`strict` - Boolean. Whether or not to be a jerk. Default: `false`. + +`opt` - Object bag of settings regarding string formatting. All default to `false`. + +Settings supported: + +* `trim` - Boolean. Whether or not to trim text and comment nodes. +* `normalize` - Boolean. If true, then turn any whitespace into a single + space. +* `lowercase` - Boolean. If true, then lowercase tag names and attribute names + in loose mode, rather than uppercasing them. +* `xmlns` - Boolean. If true, then namespaces are supported. +* `position` - Boolean. If false, then don't track line/col/position. + +## Methods + +`write` - Write bytes onto the stream. You don't have to do this all at +once. You can keep writing as much as you want. + +`close` - Close the stream. Once closed, no more data may be written until +it is done processing the buffer, which is signaled by the `end` event. + +`resume` - To gracefully handle errors, assign a listener to the `error` +event. Then, when the error is taken care of, you can call `resume` to +continue parsing. Otherwise, the parser will not continue while in an error +state. + +## Members + +At all times, the parser object will have the following members: + +`line`, `column`, `position` - Indications of the position in the XML +document where the parser currently is looking. + +`startTagPosition` - Indicates the position where the current tag starts. + +`closed` - Boolean indicating whether or not the parser can be written to. +If it's `true`, then wait for the `ready` event to write again. + +`strict` - Boolean indicating whether or not the parser is a jerk. + +`opt` - Any options passed into the constructor. + +`tag` - The current tag being dealt with. + +And a bunch of other stuff that you probably shouldn't touch. + +## Events + +All events emit with a single argument. To listen to an event, assign a +function to `on`. Functions get executed in the this-context of +the parser object. The list of supported events are also in the exported +`EVENTS` array. + +When using the stream interface, assign handlers using the EventEmitter +`on` function in the normal fashion. + +`error` - Indication that something bad happened. The error will be hanging +out on `parser.error`, and must be deleted before parsing can continue. By +listening to this event, you can keep an eye on that kind of stuff. Note: +this happens *much* more in strict mode. Argument: instance of `Error`. + +`text` - Text node. Argument: string of text. + +`doctype` - The ``. Argument: +object with `name` and `body` members. Attributes are not parsed, as +processing instructions have implementation dependent semantics. + +`sgmldeclaration` - Random SGML declarations. Stuff like `` +would trigger this kind of event. This is a weird thing to support, so it +might go away at some point. SAX isn't intended to be used to parse SGML, +after all. + +`opentag` - An opening tag. Argument: object with `name` and `attributes`. +In non-strict mode, tag names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, then it will contain +namespace binding information on the `ns` member, and will have a +`local`, `prefix`, and `uri` member. + +`closetag` - A closing tag. In loose mode, tags are auto-closed if their +parent closes. In strict mode, well-formedness is enforced. Note that +self-closing tags will have `closeTag` emitted immediately after `openTag`. +Argument: tag name. + +`attribute` - An attribute node. Argument: object with `name` and `value`. +In non-strict mode, attribute names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, it will also contains namespace +information. + +`comment` - A comment node. Argument: the string of the comment. + +`opencdata` - The opening tag of a ``) of a `` tags trigger a `"script"` +event, and their contents are not checked for special xml characters. +If you pass `noscript: true`, then this behavior is suppressed. + +## Reporting Problems + +It's best to write a failing test if you find an issue. I will always +accept pull requests with failing tests if they demonstrate intended +behavior, but it is very hard to figure out what issue you're describing +without a test. Writing a test is also the best way for you yourself +to figure out if you really understand the issue you think you have with +sax-js. diff --git a/platforms/android/assets/www/node_modules/sax/examples/big-not-pretty.xml b/platforms/android/assets/www/node_modules/sax/examples/big-not-pretty.xml new file mode 100644 index 0000000..fb5265d --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/big-not-pretty.xml @@ -0,0 +1,8002 @@ + + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + diff --git a/platforms/android/assets/www/node_modules/sax/examples/example.js b/platforms/android/assets/www/node_modules/sax/examples/example.js new file mode 100644 index 0000000..7b0246e --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/example.js @@ -0,0 +1,29 @@ + +var fs = require("fs"), + util = require("util"), + path = require("path"), + xml = fs.readFileSync(path.join(__dirname, "test.xml"), "utf8"), + sax = require("../lib/sax"), + strict = sax.parser(true), + loose = sax.parser(false, {trim:true}), + inspector = function (ev) { return function (data) { + console.error("%s %s %j", this.line+":"+this.column, ev, data); + }}; + +sax.EVENTS.forEach(function (ev) { + loose["on"+ev] = inspector(ev); +}); +loose.onend = function () { + console.error("end"); + console.error(loose); +}; + +// do this in random bits at a time to verify that it works. +(function () { + if (xml) { + var c = Math.ceil(Math.random() * 1000) + loose.write(xml.substr(0,c)); + xml = xml.substr(c); + process.nextTick(arguments.callee); + } else loose.close(); +})(); diff --git a/platforms/android/assets/www/node_modules/sax/examples/get-products.js b/platforms/android/assets/www/node_modules/sax/examples/get-products.js new file mode 100644 index 0000000..9e8d74a --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/get-products.js @@ -0,0 +1,58 @@ +// pull out /GeneralSearchResponse/categories/category/items/product tags +// the rest we don't care about. + +var sax = require("../lib/sax.js") +var fs = require("fs") +var path = require("path") +var xmlFile = path.resolve(__dirname, "shopping.xml") +var util = require("util") +var http = require("http") + +fs.readFile(xmlFile, function (er, d) { + http.createServer(function (req, res) { + if (er) throw er + var xmlstr = d.toString("utf8") + + var parser = sax.parser(true) + var products = [] + var product = null + var currentTag = null + + parser.onclosetag = function (tagName) { + if (tagName === "product") { + products.push(product) + currentTag = product = null + return + } + if (currentTag && currentTag.parent) { + var p = currentTag.parent + delete currentTag.parent + currentTag = p + } + } + + parser.onopentag = function (tag) { + if (tag.name !== "product" && !product) return + if (tag.name === "product") { + product = tag + } + tag.parent = currentTag + tag.children = [] + tag.parent && tag.parent.children.push(tag) + currentTag = tag + } + + parser.ontext = function (text) { + if (currentTag) currentTag.children.push(text) + } + + parser.onend = function () { + var out = util.inspect(products, false, 3, true) + res.writeHead(200, {"content-type":"application/json"}) + res.end("{\"ok\":true}") + // res.end(JSON.stringify(products)) + } + + parser.write(xmlstr).end() + }).listen(1337) +}) diff --git a/platforms/android/assets/www/node_modules/sax/examples/hello-world.js b/platforms/android/assets/www/node_modules/sax/examples/hello-world.js new file mode 100644 index 0000000..cbfa518 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/hello-world.js @@ -0,0 +1,4 @@ +require("http").createServer(function (req, res) { + res.writeHead(200, {"content-type":"application/json"}) + res.end(JSON.stringify({ok: true})) +}).listen(1337) diff --git a/platforms/android/assets/www/node_modules/sax/examples/not-pretty.xml b/platforms/android/assets/www/node_modules/sax/examples/not-pretty.xml new file mode 100644 index 0000000..9592852 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/not-pretty.xml @@ -0,0 +1,8 @@ + + something blerm a bit down here diff --git a/platforms/android/assets/www/node_modules/sax/examples/pretty-print.js b/platforms/android/assets/www/node_modules/sax/examples/pretty-print.js new file mode 100644 index 0000000..cd6aca9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/pretty-print.js @@ -0,0 +1,74 @@ +var sax = require("../lib/sax") + , printer = sax.createStream(false, {lowercasetags:true, trim:true}) + , fs = require("fs") + +function entity (str) { + return str.replace('"', '"') +} + +printer.tabstop = 2 +printer.level = 0 +printer.indent = function () { + print("\n") + for (var i = this.level; i > 0; i --) { + for (var j = this.tabstop; j > 0; j --) { + print(" ") + } + } +} +printer.on("opentag", function (tag) { + this.indent() + this.level ++ + print("<"+tag.name) + for (var i in tag.attributes) { + print(" "+i+"=\""+entity(tag.attributes[i])+"\"") + } + print(">") +}) + +printer.on("text", ontext) +printer.on("doctype", ontext) +function ontext (text) { + this.indent() + print(text) +} + +printer.on("closetag", function (tag) { + this.level -- + this.indent() + print("") +}) + +printer.on("cdata", function (data) { + this.indent() + print("") +}) + +printer.on("comment", function (comment) { + this.indent() + print("") +}) + +printer.on("error", function (error) { + console.error(error) + throw error +}) + +if (!process.argv[2]) { + throw new Error("Please provide an xml file to prettify\n"+ + "TODO: read from stdin or take a file") +} +var xmlfile = require("path").join(process.cwd(), process.argv[2]) +var fstr = fs.createReadStream(xmlfile, { encoding: "utf8" }) + +function print (c) { + if (!process.stdout.write(c)) { + fstr.pause() + } +} + +process.stdout.on("drain", function () { + fstr.resume() +}) + +fstr.pipe(printer) diff --git a/platforms/android/assets/www/node_modules/sax/examples/shopping.xml b/platforms/android/assets/www/node_modules/sax/examples/shopping.xml new file mode 100644 index 0000000..223c6c6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/shopping.xml @@ -0,0 +1,2 @@ + +sandbox3.1 r31.Kadu4DC.phase357782011.10.06 15:37:23 PSTp2.a121bc2aaf029435dce62011-10-21T18:38:45.982-04:00P0Y0M0DT0H0M0.169S1112You are currently using the SDC API sandbox environment! No clicks to merchant URLs from this response will be paid. Please change the host of your API requests to 'publisher.api.shopping.com' when you have finished development and testinghttp://statTest.dealtime.com/pixel/noscript?PV_EvnTyp=APPV&APPV_APITSP=10%2F21%2F11_06%3A38%3A45_PM&APPV_DSPRQSID=p2.a121bc2aaf029435dce6&APPV_IMGURL=http://img.shopping.com/sc/glb/sdc_logo_106x19.gif&APPV_LI_LNKINID=7000610&APPV_LI_SBMKYW=nikon&APPV_MTCTYP=1000&APPV_PRTID=2002&APPV_BrnID=14804http://www.shopping.com/digital-cameras/productsDigital CamerasDigital CamerasElectronicshttp://www.shopping.com/xCH-electronics-nikon~linkin_id-7000610?oq=nikonCameras and Photographyhttp://www.shopping.com/xCH-cameras_and_photography-nikon~linkin_id-7000610?oq=nikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610nikonnikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610Nikon D3100 Digital Camera14.2 Megapixel, SLR Camera, 3 in. LCD Screen, With High Definition Video, Weight: 1 lb.The Nikon D3100 digital SLR camera speaks to the growing ranks of enthusiastic D-SLR users and aspiring photographers by providing an easy-to-use and affordable entrance to the world of Nikon D-SLR’s. The 14.2-megapixel D3100 has powerful features, such as the enhanced Guide Mode that makes it easy to unleash creative potential and capture memories with still images and full HD video. Like having a personal photo tutor at your fingertips, this unique feature provides a simple graphical interface on the camera’s LCD that guides users by suggesting and/or adjusting camera settings to achieve the desired end result images. The D3100 is also the world’s first D-SLR to introduce full time auto focus (AF) in Live View and D-Movie mode to effortlessly achieve the critical focus needed when shooting Full HD 1080p video.http://di1.shopping.com/images/pi/93/bc/04/101677489-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-606x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=194.56http://img.shopping.com/sc/pr/sdc_stars_sm_4.5.gifhttp://www.shopping.com/Nikon-D3100/reviews~linkin_id-7000610429.001360.00http://www.shopping.com/Nikon-D3100/prices~linkin_id-7000610http://www.shopping.com/Nikon-D3100/info~linkin_id-7000610Nikon D3100 Digital SLR Camera with 18-55mm NIKKOR VR LensThe Nikon D3100 Digital SLR Camera is an affordable compact and lightweight photographic power-house. It features the all-purpose 18-55mm VR lens a high-resolution 14.2 MP CMOS sensor along with a feature set that's comprehensive yet easy to navigate - the intuitive onboard learn-as-you grow guide mode allows the photographer to understand what the 3100 can do quickly and easily. Capture beautiful pictures and amazing Full HD 1080p movies with sound and full-time autofocus. Availabilty: In Stock!7185Nikonhttp://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFree Shipping with Any Purchase!529.000.00799.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=-ZW6BMZqz6fbS-aULwga_g%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F343.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+Digital+SLR+Camera+with+18-55mm+NIKKOR+VR+Lens&dlprc=529.0&crn=&istrsmrc=1&isathrsl=0&AR=1&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=1&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF343C5Nikon Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR, CamerasNikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR7185Nikonhttp://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-385x352-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock549.000.00549.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=779&BEFID=7185&aon=%5E1&MerchantID=305814&crawler_id=305814&dealId=md1e9lD8vdOu4FHQfJqKng%3D%3D&url=http%3A%2F%2Fwww.electronics-expo.com%2Findex.php%3Fpage%3Ditem%26id%3DNIKD3100%26source%3DSideCar%26scpid%3D8%26scid%3Dscsho318727%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Nikon+D3100+14.2MP+Digital+SLR+Camera+with+18-55mm+f%2F3.5-5.6+AF-S+DX+VR%2C+Cameras&dlprc=549.0&crn=&istrsmrc=1&isathrsl=0&AR=9&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=9&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=771&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Electronics Expohttp://img.shopping.com/cctool/merch_logos/305814.gif1-888-707-EXPO3713.90http://img.shopping.com/sc/mr/sdc_checks_4.gifhttp://www.shopping.com/xMR-store_electronics_expo~MRD-305814~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSNIKD3100Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, BlackSplit-second shutter response captures shots other cameras may have missed Helps eliminate the frustration of shutter delay! 14.2-megapixels for enlargements worth framing and hanging. Takes breathtaking 1080p HD movies. ISO sensitivity from 100-1600 for bright or dimly lit settings. 3.0in. color LCD for beautiful, wide-angle framing and viewing. In-camera image editing lets you retouch with no PC. Automatic scene modes include Child, Sports, Night Portrait and more. Accepts SDHC memory cards. Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black is one of many Digital SLR Cameras available through Office Depot. Made by Nikon.7185Nikonhttp://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-250x250-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock549.990.00699.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=698&BEFID=7185&aon=%5E1&MerchantID=467671&crawler_id=467671&dealId=yYuaXnDFtCY7rDUjkY2aaw%3D%3D&url=http%3A%2F%2Flink.mercent.com%2Fredirect.ashx%3Fmr%3AmerchantID%3DOfficeDepot%26mr%3AtrackingCode%3DCEC9669E-6ABC-E011-9F24-0019B9C043EB%26mr%3AtargetUrl%3Dhttp%3A%2F%2Fwww.officedepot.com%2Fa%2Fproducts%2F486292%2FNikon-D3100-142-Megapixel-Digital-SLR%2F%253fcm_mmc%253dMercent-_-Shopping-_-Cameras_and_Camcorders-_-486292&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+14.2-Megapixel+Digital+SLR+Camera+With+18-55mm+Zoom-Nikkor+Lens%2C+Black&dlprc=549.99&crn=&istrsmrc=1&isathrsl=0&AR=10&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=10&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=690&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Office Depothttp://img.shopping.com/cctool/merch_logos/467671.gif1-800-GO-DEPOT1352.37http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_office_depot_4158555~MRD-467671~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS486292Nikon® D3100™ 14.2MP Digital SLR with 18-55mm LensThe Nikon D3100 DSLR will surprise you with its simplicity and impress you with superb results.7185Nikonhttp://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock549.996.05549.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=Rl56U7CuiTYsH4MGZ02lxQ%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D903483107%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D3100%E2%84%A2+14.2MP+Digital+SLR+with+18-55mm+Lens&dlprc=549.99&crn=&istrsmrc=0&isathrsl=0&AR=11&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=11&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS9614867Nikon D3100 SLR w/Nikon 18-55mm VR & 55-200mm VR Lenses14.2 Megapixels3" LCDLive ViewHD 1080p Video w/ Sound & Autofocus11-point Autofocus3 Frames per Second ShootingISO 100 to 3200 (Expand to 12800-Hi2)Self Cleaning SensorEXPEED 2, Image Processing EngineScene Recognition System7185Nikonhttp://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-345x345-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stock695.000.00695.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=huS6xZKDKaKMTMP71eI6DA%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D32983%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+SLR+w%2FNikon+18-55mm+VR+%26+55-200mm+VR+Lenses&dlprc=695.0&crn=&istrsmrc=0&isathrsl=0&AR=15&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=15&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS32983Nikon COOLPIX S203 Digital Camera10 Megapixel, Ultra-Compact Camera, 2.5 in. LCD Screen, 3x Optical Zoom, With Video Capability, Weight: 0.23 lb.With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.http://di1.shopping.com/images/pi/c4/ef/1b/95397883-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-500x499-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=20139.00139.00http://www.shopping.com/Nikon-Coolpix-S203/prices~linkin_id-7000610http://www.shopping.com/Nikon-Coolpix-S203/info~linkin_id-7000610Nikon Coolpix S203 Digital Camera (Red)With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.7185Nikonhttp://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFantastic prices with ease & comfort of Amazon.com!139.009.50139.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=sBd2JnIEPM-A_lBAM1RZgQ%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB002T964IM%2Fref%3Dasc_df_B002T964IM1751618%3Fsmid%3DA22UHVNXG98FAT%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB002T964IM&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S203+Digital+Camera+%28Red%29&dlprc=139.0&crn=&istrsmrc=0&isathrsl=0&AR=63&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=95397883&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=63&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=518&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB002T964IMNikon S3100 Digital Camera14.5 Megapixel, Compact Camera, 2.7 in. LCD Screen, 5x Optical Zoom, With High Definition Video, Weight: 0.23 lb.This digital camera features a wide-angle optical Zoom-NIKKOR glass lens that allows you to capture anything from landscapes to portraits to action shots. The high-definition movie mode with one-touch recording makes it easy to capture video clips.http://di1.shopping.com/images/pi/66/2d/33/106834268-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-507x387-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=312.00http://img.shopping.com/sc/pr/sdc_stars_sm_2.gifhttp://www.shopping.com/nikon-s3100/reviews~linkin_id-700061099.95134.95http://www.shopping.com/nikon-s3100/prices~linkin_id-7000610http://www.shopping.com/nikon-s3100/info~linkin_id-7000610CoolPix S3100 14 Megapixel Compact Digital Camera- RedNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - red7185Nikonhttp://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=UUyGoqV8r0-xrkn-rnGNbg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJ3Yx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmDAJeU1oyGG0GcBdhGwUGCAVqYF9SO0xSN1sZdmA7dmMdBQAJB24qX1NbQxI6AjA2ME5dVFULPDsGPFcQTTdaLTA6SR0OFlQvPAwMDxYcYlxIVkcoLTcCDA%3D%3D%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=CoolPix+S3100+14+Megapixel+Compact+Digital+Camera-+Red&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=28&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=28&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337013000COOLPIX S3100 PinkNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - pink7185Nikonhttp://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=X87AwXlW1dXoMXk4QQDToQ%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJxYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGsPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Pink&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=31&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=31&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337015000Nikon Coolpix S3100 14.0 MP Digital Camera - SilverNikon Coolpix S3100 14.0 MP Digital Camera - Silver7185Nikonhttp://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-270x270-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock109.970.00109.97http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=803&BEFID=7185&aon=%5E&MerchantID=475774&crawler_id=475774&dealId=nvFwnpfA4rlA1Dbksdsa0w%3D%3D&url=http%3A%2F%2Fwww.thewiz.com%2Fcatalog%2Fproduct.jsp%3FmodelNo%3DS3100SILVER%26gdftrk%3DgdfV2677_a_7c996_a_7c4049_a_7c26262&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S3100+14.0+MP+Digital+Camera+-+Silver&dlprc=109.97&crn=&istrsmrc=0&isathrsl=0&AR=33&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=33&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=797&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=TheWiz.comhttp://img.shopping.com/cctool/merch_logos/475774.gif877-542-69880http://img.shopping.com/sc/glb/flag/US.gifUS26262Nikon� COOLPIX� S3100 14MP Digital Camera (Silver)The Nikon COOLPIX S3100 is the easy way to share your life and stay connected.7185Nikonhttp://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock119.996.05119.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=5GtaN2NeryKwps-Se2l-4g%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D848064082%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C3%AF%C2%BF%C2%BD+COOLPIX%C3%AF%C2%BF%C2%BD+S3100+14MP+Digital+Camera+%28Silver%29&dlprc=119.99&crn=&istrsmrc=0&isathrsl=0&AR=37&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=37&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=509&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10101095COOLPIX S3100 YellowNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - yellow7185Nikonhttp://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=a43m0RXulX38zCnQjU59jw%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJwYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGoPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Yellow&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=38&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=38&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337014000Nikon D90 Digital Camera12.3 Megapixel, Point and Shoot Camera, 3 in. LCD Screen, With Video Capability, Weight: 1.36 lb.Untitled Document Nikon D90 SLR Digital Camera With 28-80mm 75-300mm Lens Kit The Nikon D90 SLR Digital Camera, with its 12.3-megapixel DX-format CMOS, 3" High resolution LCD display, Scene Recognition System, Picture Control, Active D-Lighting, and one-button Live View, provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera.http://di1.shopping.com/images/pi/52/fb/d3/99671132-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-499x255-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=475.00http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-270mm-Lens/reviews~linkin_id-7000610689.002299.00http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/info~linkin_id-7000610Nikon® D90 12.3MP Digital SLR Camera (Body Only)The Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock1015.996.051015.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=GU5JJkpUAxe5HujB7fkwAA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D851830266%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=1015.99&crn=&istrsmrc=0&isathrsl=0&AR=14&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=14&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10148659Nikon D90 SLR Digital Camera (Camera Body)The Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CCD 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera. In addition the D90 introduces the D-Movie mode allowing for the first time an interchangeable lens SLR camera that is capable of recording 720p HD movie clips. Availabilty: In Stock7185Nikonhttp://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockFree Shipping with Any Purchase!689.000.00900.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=XhURuSC-spBbTIDfo4qfzQ%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F169.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+Digital+Camera+%28Camera+Body%29&dlprc=689.0&crn=&istrsmrc=1&isathrsl=0&AR=16&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=16&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF169C5Nikon D90 SLR w/Nikon 18-105mm VR & 55-200mm VR Lenses12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock1189.000.001189.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=o0Px_XLWDbrxAYRy3rCmyQ%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30619%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+%26+55-200mm+VR+Lenses&dlprc=1189.0&crn=&istrsmrc=0&isathrsl=0&AR=20&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=20&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS30619Nikon D90 12.3 Megapixel Digital SLR Camera (Body Only)Fusing 12.3 megapixel image quality and a cinematic 24fps D-Movie Mode, the Nikon D90 exceeds the demands of passionate photographers. Coupled with Nikon's EXPEED image processing technologies and NIKKOR optics, breathtaking image fidelity is assured. Combined with fast 0.15ms power-up and split-second 65ms shooting lag, dramatic action and decisive moments are captured easily. Effective 4-frequency, ultrasonic sensor cleaning frees image degrading dust particles from the sensor's optical low pass filter.7185Nikonhttp://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stockFREE FEDEX 2-3 DAY DELIVERY899.950.00899.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=269&BEFID=7185&aon=%5E&MerchantID=9296&crawler_id=811558&dealId=4HgbWJSJ8ssgIf8B0MXIwA%3D%3D&url=http%3A%2F%2Fwww.pcnation.com%2Foptics-gallery%2Fdetails.asp%3Faffid%3D305%26item%3D2N145P&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3+Megapixel+Digital+SLR+Camera+%28Body+Only%29&dlprc=899.95&crn=&istrsmrc=1&isathrsl=0&AR=21&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=21&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=257&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=PCNationhttp://img.shopping.com/cctool/merch_logos/9296.gif800-470-707916224.43http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_pcnation_9689~MRD-9296~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS2N145PNikon D90 12.3MP Digital SLR Camera (Body Only)Fusing 12.3-megapixel image quality inherited from the award-winning D300 with groundbreaking features, the D90's breathtaking, low-noise image quality is further advanced with EXPEED image processing. Split-second shutter response and continuous shooting at up to 4.5 frames-per-second provide the power to capture fast action and precise moments perfectly, while Nikon's exclusive Scene Recognition System contributes to faster 11-area autofocus performance, finer white balance detection and more. The D90 delivers the control passionate photographers demand, utilizing comprehensive exposure functions and the intelligence of 3D Color Matrix Metering II. Stunning results come to life on a 3-inch 920,000-dot color LCD monitor, providing accurate image review, Live View composition and brilliant playback of the D90's cinematic-quality 24-fps HD D-Movie mode.7185Nikonhttp://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockFantastic prices with ease & comfort of Amazon.com!780.000.00780.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=UNDa3uMDZXOnvD_7sTILYg%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB001ET5U92%2Fref%3Dasc_df_B001ET5U921751618%3Fsmid%3DAHF4SYKP09WBH%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB001ET5U92&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=780.0&crn=&istrsmrc=0&isathrsl=0&AR=29&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=29&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=520&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB001ET5U92Nikon D90 Digital Camera with 18-105mm lens12.9 Megapixel, SLR Camera, 3 in. LCD Screen, 5.8x Optical Zoom, With Video Capability, Weight: 2.3 lb.Its 12.3 megapixel DX-format CMOS image sensor and EXPEED image processing system offer outstanding image quality across a wide ISO light sensitivity range. Live View mode lets you compose and shoot via the high-resolution 3-inch LCD monitor, and an advanced Scene Recognition System and autofocus performance help capture images with astounding accuracy. Movies can be shot in Motion JPEG format using the D-Movie function. The camera’s large image sensor ensures exceptional movie image quality and you can create dramatic effects by shooting with a wide range of interchangeable NIKKOR lenses, from wide-angle to macro to fisheye, or by adjusting the lens aperture and experimenting with depth-of-field. The D90 – designed to fuel your passion for photography.http://di1.shopping.com/images/pi/57/6a/4f/70621646-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-490x489-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5324.81http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-105mm-lens/reviews~linkin_id-7000610849.951599.95http://www.shopping.com/Nikon-D90-with-18-105mm-lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-105mm-lens/info~linkin_id-7000610Nikon D90 18-105mm VR LensThe Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CMOS 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View prov7185Nikonhttp://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-260x260-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock849.950.00849.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=419&BEFID=7185&aon=%5E1&MerchantID=9390&crawler_id=1905054&dealId=3o5e1VghgJPfhLvT1JFKTA%3D%3D&url=http%3A%2F%2Fwww.ajrichard.com%2FNikon-D90-18-105mm-VR-Lens%2Fp-292%3Frefid%3DShopping%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+18-105mm+VR+Lens&dlprc=849.95&crn=&istrsmrc=0&isathrsl=0&AR=2&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=2&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=425&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=AJRichardhttp://img.shopping.com/cctool/merch_logos/9390.gif1-888-871-125631244.48http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_ajrichard~MRD-9390~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS292Nikon D90 SLR w/Nikon 18-105mm VR Lens12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock909.000.00909.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=_lYWj_jbwfsSkfcwUcDuww%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30971%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+Lens&dlprc=909.0&crn=&istrsmrc=0&isathrsl=0&AR=3&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=3&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS3097125448/D90 12.3 Megapixel Digital Camera 18-105mm Zoom Lens w/ 3" Screen - BlackNikon D90 - Digital camera - SLR - 12.3 Mpix - Nikon AF-S DX 18-105mm lens - optical zoom: 5.8 x - supported memory: SD, SDHC7185Nikonhttp://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stockGet 30 days FREE SHIPPING w/ ShipVantage1199.008.201199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=1KCclCGuWvty2XKU9skadg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBRtFXpzYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcVlhCGGkPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=25448%2FD90+12.3+Megapixel+Digital+Camera+18-105mm+Zoom+Lens+w%2F+3%22+Screen+-+Black&dlprc=1199.0&crn=&istrsmrc=1&isathrsl=0&AR=4&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=4&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=586&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00353197000Nikon® D90 12.3MP Digital SLR with 18-105mm LensThe Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock1350.996.051350.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=3-VOSfVV5Jo7HlA4kJtanA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D982673361%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+with+18-105mm+Lens&dlprc=1350.99&crn=&istrsmrc=0&isathrsl=0&AR=5&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=5&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS11148905Nikon D90 Kit 12.3-megapixel Digital SLR with 18-105mm VR LensPhotographers, take your passion further!Now is the time for new creativity, and to rethink what a digital SLR camera can achieve. It's time for the D90, a camera with everything you would expect from Nikon's next-generation D-SLRs, and some unexpected surprises, as well. The stunning image quality is inherited from the D300, Nikon's DX-format flagship. The D90 also has Nikon's unmatched ergonomics and high performance, and now takes high-quality movies with beautifully cinematic results. The world of photography has changed, and with the D90 in your hands, it's time to make your own rules.AF-S DX NIKKOR 18-105mm f/3.5-5.6G ED VR LensWide-ratio 5.8x zoom Compact, versatile and ideal for a broad range of shooting situations, ranging from interiors and landscapes to beautiful portraits� a perfect everyday zoom. Nikon VR (Vibration Reduction) image stabilization Vibration Reduction is engineered specifically for each VR NIKKOR lens and enables handheld shooting at up to 3 shutter speeds slower than would7185Nikonhttp://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x232-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockShipping Included!1050.000.001199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=135&BEFID=7185&aon=%5E1&MerchantID=313162&crawler_id=313162&dealId=kQnB6rS4AjN5dx5h2_631g%3D%3D&url=http%3A%2F%2Fonecall.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1pZSxNoWHFwLx8GTAICa2ZeH1sPXTZLNzRpAh1HR0BxPQEGCBJNMhFHUElsFCFCVkVTTHAcBggEHQ4aHXNpGERGH3RQODsbAgdechJtbBt8fx8JAwhtZFAzJj1oGgIWCxRlNyFOUV9UUGIxBgo0T0IyTSYqJ0RWHw4QPCIBAAQXRGMDICg6TllZVBhh%26nAID%3D13736960&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+Kit+12.3-megapixel+Digital+SLR+with+18-105mm+VR+Lens&dlprc=1050.0&crn=&istrsmrc=1&isathrsl=0&AR=6&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=6&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=1&code=&acode=143&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=OneCallhttp://img.shopping.com/cctool/merch_logos/313162.gif1.800.398.07661804.44http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_onecall_9689~MRD-313162~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS92826Price rangehttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610$24 - $4012http://www.shopping.com/digital-cameras/nikon/products?minPrice=24&maxPrice=4012&linkin_id=7000610$4012 - $7999http://www.shopping.com/digital-cameras/nikon/products?minPrice=4012&maxPrice=7999&linkin_id=7000610Brandhttp://www.shopping.com/digital-cameras/nikon/products~all-9688-brand~MS-1?oq=nikon&linkin_id=7000610Nikonhttp://www.shopping.com/digital-cameras/nikon+brand-nikon/products~linkin_id-7000610Cranehttp://www.shopping.com/digital-cameras/nikon+9688-brand-crane/products~linkin_id-7000610Ikelitehttp://www.shopping.com/digital-cameras/nikon+ikelite/products~linkin_id-7000610Bowerhttp://www.shopping.com/digital-cameras/nikon+bower/products~linkin_id-7000610FUJIFILMhttp://www.shopping.com/digital-cameras/nikon+brand-fuji/products~linkin_id-7000610Storehttp://www.shopping.com/digital-cameras/nikon/products~all-store~MS-1?oq=nikon&linkin_id=7000610Amazon Marketplacehttp://www.shopping.com/digital-cameras/nikon+store-amazon-marketplace-9689/products~linkin_id-7000610Amazonhttp://www.shopping.com/digital-cameras/nikon+store-amazon/products~linkin_id-7000610Adoramahttp://www.shopping.com/digital-cameras/nikon+store-adorama/products~linkin_id-7000610J&R Music and Computer Worldhttp://www.shopping.com/digital-cameras/nikon+store-j-r-music-and-computer-world/products~linkin_id-7000610RytherCamera.comhttp://www.shopping.com/digital-cameras/nikon+store-rythercamera-com/products~linkin_id-7000610Resolutionhttp://www.shopping.com/digital-cameras/nikon/products~all-21885-resolution~MS-1?oq=nikon&linkin_id=7000610Under 4 Megapixelhttp://www.shopping.com/digital-cameras/nikon+under-4-megapixel/products~linkin_id-7000610At least 5 Megapixelhttp://www.shopping.com/digital-cameras/nikon+5-megapixel-digital-cameras/products~linkin_id-7000610At least 6 Megapixelhttp://www.shopping.com/digital-cameras/nikon+6-megapixel-digital-cameras/products~linkin_id-7000610At least 7 Megapixelhttp://www.shopping.com/digital-cameras/nikon+7-megapixel-digital-cameras/products~linkin_id-7000610At least 8 Megapixelhttp://www.shopping.com/digital-cameras/nikon+8-megapixel-digital-cameras/products~linkin_id-7000610Featureshttp://www.shopping.com/digital-cameras/nikon/products~all-32804-features~MS-1?oq=nikon&linkin_id=7000610Shockproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-shockproof/products~linkin_id-7000610Waterproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-waterproof/products~linkin_id-7000610Freezeproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-freezeproof/products~linkin_id-7000610Dust proofhttp://www.shopping.com/digital-cameras/nikon+32804-features-dust-proof/products~linkin_id-7000610Image Stabilizationhttp://www.shopping.com/digital-cameras/nikon+32804-features-image-stabilization/products~linkin_id-7000610hybriddigital camerag1sonycameracanonnikonkodak digital camerakodaksony cybershotkodak easyshare digital cameranikon coolpixolympuspink digital cameracanon powershot \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/sax/examples/strict.dtd b/platforms/android/assets/www/node_modules/sax/examples/strict.dtd new file mode 100644 index 0000000..b274559 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/strict.dtd @@ -0,0 +1,870 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platforms/android/assets/www/node_modules/sax/examples/test.html b/platforms/android/assets/www/node_modules/sax/examples/test.html new file mode 100644 index 0000000..61f8f1a --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/test.html @@ -0,0 +1,15 @@ + + + + + testing the parser + + + +

      hello + + + + diff --git a/platforms/android/assets/www/node_modules/sax/examples/test.xml b/platforms/android/assets/www/node_modules/sax/examples/test.xml new file mode 100644 index 0000000..801292d --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/examples/test.xml @@ -0,0 +1,1254 @@ + + +]> + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/sax/lib/sax.js b/platforms/android/assets/www/node_modules/sax/lib/sax.js new file mode 100644 index 0000000..410a507 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/lib/sax.js @@ -0,0 +1,1410 @@ +// wrapper for non-node envs +;(function (sax) { + +sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } +sax.SAXParser = SAXParser +sax.SAXStream = SAXStream +sax.createStream = createStream + +// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. +// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), +// since that's the earliest that a buffer overrun could occur. This way, checks are +// as rare as required, but as often as necessary to ensure never crossing this bound. +// Furthermore, buffers are only tested at most once per write(), so passing a very +// large string into write() might have undesirable effects, but this is manageable by +// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme +// edge case, result in creating at most one complete copy of the string passed in. +// Set to Infinity to have unlimited buffers. +sax.MAX_BUFFER_LENGTH = 64 * 1024 + +var buffers = [ + "comment", "sgmlDecl", "textNode", "tagName", "doctype", + "procInstName", "procInstBody", "entity", "attribName", + "attribValue", "cdata", "script" +] + +sax.EVENTS = // for discoverability. + [ "text" + , "processinginstruction" + , "sgmldeclaration" + , "doctype" + , "comment" + , "attribute" + , "opentag" + , "closetag" + , "opencdata" + , "cdata" + , "closecdata" + , "error" + , "end" + , "ready" + , "script" + , "opennamespace" + , "closenamespace" + ] + +function SAXParser (strict, opt) { + if (!(this instanceof SAXParser)) return new SAXParser(strict, opt) + + var parser = this + clearBuffers(parser) + parser.q = parser.c = "" + parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH + parser.opt = opt || {} + parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags + parser.looseCase = parser.opt.lowercase ? "toLowerCase" : "toUpperCase" + parser.tags = [] + parser.closed = parser.closedRoot = parser.sawRoot = false + parser.tag = parser.error = null + parser.strict = !!strict + parser.noscript = !!(strict || parser.opt.noscript) + parser.state = S.BEGIN + parser.ENTITIES = Object.create(sax.ENTITIES) + parser.attribList = [] + + // namespaces form a prototype chain. + // it always points at the current tag, + // which protos to its parent tag. + if (parser.opt.xmlns) parser.ns = Object.create(rootNS) + + // mostly just for error reporting + parser.trackPosition = parser.opt.position !== false + if (parser.trackPosition) { + parser.position = parser.line = parser.column = 0 + } + emit(parser, "onready") +} + +if (!Object.create) Object.create = function (o) { + function f () { this.__proto__ = o } + f.prototype = o + return new f +} + +if (!Object.getPrototypeOf) Object.getPrototypeOf = function (o) { + return o.__proto__ +} + +if (!Object.keys) Object.keys = function (o) { + var a = [] + for (var i in o) if (o.hasOwnProperty(i)) a.push(i) + return a +} + +function checkBufferLength (parser) { + var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) + , maxActual = 0 + for (var i = 0, l = buffers.length; i < l; i ++) { + var len = parser[buffers[i]].length + if (len > maxAllowed) { + // Text/cdata nodes can get big, and since they're buffered, + // we can get here under normal conditions. + // Avoid issues by emitting the text node now, + // so at least it won't get any bigger. + switch (buffers[i]) { + case "textNode": + closeText(parser) + break + + case "cdata": + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + break + + case "script": + emitNode(parser, "onscript", parser.script) + parser.script = "" + break + + default: + error(parser, "Max buffer length exceeded: "+buffers[i]) + } + } + maxActual = Math.max(maxActual, len) + } + // schedule the next check for the earliest possible buffer overrun. + parser.bufferCheckPosition = (sax.MAX_BUFFER_LENGTH - maxActual) + + parser.position +} + +function clearBuffers (parser) { + for (var i = 0, l = buffers.length; i < l; i ++) { + parser[buffers[i]] = "" + } +} + +function flushBuffers (parser) { + closeText(parser) + if (parser.cdata !== "") { + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + } + if (parser.script !== "") { + emitNode(parser, "onscript", parser.script) + parser.script = "" + } +} + +SAXParser.prototype = + { end: function () { end(this) } + , write: write + , resume: function () { this.error = null; return this } + , close: function () { return this.write(null) } + , flush: function () { flushBuffers(this) } + } + +try { + var Stream = require("stream").Stream +} catch (ex) { + var Stream = function () {} +} + + +var streamWraps = sax.EVENTS.filter(function (ev) { + return ev !== "error" && ev !== "end" +}) + +function createStream (strict, opt) { + return new SAXStream(strict, opt) +} + +function SAXStream (strict, opt) { + if (!(this instanceof SAXStream)) return new SAXStream(strict, opt) + + Stream.apply(this) + + this._parser = new SAXParser(strict, opt) + this.writable = true + this.readable = true + + + var me = this + + this._parser.onend = function () { + me.emit("end") + } + + this._parser.onerror = function (er) { + me.emit("error", er) + + // if didn't throw, then means error was handled. + // go ahead and clear error, so we can write again. + me._parser.error = null + } + + this._decoder = null; + + streamWraps.forEach(function (ev) { + Object.defineProperty(me, "on" + ev, { + get: function () { return me._parser["on" + ev] }, + set: function (h) { + if (!h) { + me.removeAllListeners(ev) + return me._parser["on"+ev] = h + } + me.on(ev, h) + }, + enumerable: true, + configurable: false + }) + }) +} + +SAXStream.prototype = Object.create(Stream.prototype, + { constructor: { value: SAXStream } }) + +SAXStream.prototype.write = function (data) { + if (typeof Buffer === 'function' && + typeof Buffer.isBuffer === 'function' && + Buffer.isBuffer(data)) { + if (!this._decoder) { + var SD = require('string_decoder').StringDecoder + this._decoder = new SD('utf8') + } + data = this._decoder.write(data); + } + + this._parser.write(data.toString()) + this.emit("data", data) + return true +} + +SAXStream.prototype.end = function (chunk) { + if (chunk && chunk.length) this.write(chunk) + this._parser.end() + return true +} + +SAXStream.prototype.on = function (ev, handler) { + var me = this + if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) { + me._parser["on"+ev] = function () { + var args = arguments.length === 1 ? [arguments[0]] + : Array.apply(null, arguments) + args.splice(0, 0, ev) + me.emit.apply(me, args) + } + } + + return Stream.prototype.on.call(me, ev, handler) +} + + + +// character classes and tokens +var whitespace = "\r\n\t " + // this really needs to be replaced with character classes. + // XML allows all manner of ridiculous numbers and digits. + , number = "0124356789" + , letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + // (Letter | "_" | ":") + , quote = "'\"" + , entity = number+letter+"#" + , attribEnd = whitespace + ">" + , CDATA = "[CDATA[" + , DOCTYPE = "DOCTYPE" + , XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace" + , XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/" + , rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } + +// turn all the string character sets into character class objects. +whitespace = charClass(whitespace) +number = charClass(number) +letter = charClass(letter) + +// http://www.w3.org/TR/REC-xml/#NT-NameStartChar +// This implementation works on strings, a single character at a time +// as such, it cannot ever support astral-plane characters (10000-EFFFF) +// without a significant breaking change to either this parser, or the +// JavaScript language. Implementation of an emoji-capable xml parser +// is left as an exercise for the reader. +var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + +var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ + +quote = charClass(quote) +entity = charClass(entity) +attribEnd = charClass(attribEnd) + +function charClass (str) { + return str.split("").reduce(function (s, c) { + s[c] = true + return s + }, {}) +} + +function isRegExp (c) { + return Object.prototype.toString.call(c) === '[object RegExp]' +} + +function is (charclass, c) { + return isRegExp(charclass) ? !!c.match(charclass) : charclass[c] +} + +function not (charclass, c) { + return !is(charclass, c) +} + +var S = 0 +sax.STATE = +{ BEGIN : S++ +, TEXT : S++ // general stuff +, TEXT_ENTITY : S++ // & and such. +, OPEN_WAKA : S++ // < +, SGML_DECL : S++ // +, SCRIPT : S++ // " + , expect : + [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] + , [ "text", "hello world" ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + +require(__dirname).test + ( { xml : "" + , expect : + [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] + , [ "opencdata", undefined ] + , [ "cdata", "hello world" ] + , [ "closecdata", undefined ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + diff --git a/platforms/android/assets/www/node_modules/sax/test/issue-84.js b/platforms/android/assets/www/node_modules/sax/test/issue-84.js new file mode 100644 index 0000000..0e7ee69 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/issue-84.js @@ -0,0 +1,13 @@ +// https://github.com/isaacs/sax-js/issues/49 +require(__dirname).test + ( { xml : "body" + , expect : + [ [ "processinginstruction", { name: "has", body: "unbalanced \"quotes" } ], + [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "text", "body" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) diff --git a/platforms/android/assets/www/node_modules/sax/test/parser-position.js b/platforms/android/assets/www/node_modules/sax/test/parser-position.js new file mode 100644 index 0000000..e4a68b1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/parser-position.js @@ -0,0 +1,28 @@ +var sax = require("../lib/sax"), + assert = require("assert") + +function testPosition(chunks, expectedEvents) { + var parser = sax.parser(); + expectedEvents.forEach(function(expectation) { + parser['on' + expectation[0]] = function() { + for (var prop in expectation[1]) { + assert.equal(parser[prop], expectation[1][prop]); + } + } + }); + chunks.forEach(function(chunk) { + parser.write(chunk); + }); +}; + +testPosition(['

      abcdefgh
      '], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); + +testPosition(['
      abcde','fgh
      '], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); diff --git a/platforms/android/assets/www/node_modules/sax/test/script-close-better.js b/platforms/android/assets/www/node_modules/sax/test/script-close-better.js new file mode 100644 index 0000000..f4887b9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/script-close-better.js @@ -0,0 +1,12 @@ +require(__dirname).test({ + xml : "", + expect : [ + ["opentag", {"name": "HTML","attributes": {}, isSelfClosing: false}], + ["opentag", {"name": "HEAD","attributes": {}, isSelfClosing: false}], + ["opentag", {"name": "SCRIPT","attributes": {}, isSelfClosing: false}], + ["script", "'
      foo
      ", + expect : [ + ["opentag", {"name": "HTML","attributes": {}, "isSelfClosing": false}], + ["opentag", {"name": "HEAD","attributes": {}, "isSelfClosing": false}], + ["opentag", {"name": "SCRIPT","attributes": {}, "isSelfClosing": false}], + ["script", "if (1 < 0) { console.log('elo there'); }"], + ["closetag", "SCRIPT"], + ["closetag", "HEAD"], + ["closetag", "HTML"] + ] +}); diff --git a/platforms/android/assets/www/node_modules/sax/test/self-closing-child-strict.js b/platforms/android/assets/www/node_modules/sax/test/self-closing-child-strict.js new file mode 100644 index 0000000..3d6e985 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/self-closing-child-strict.js @@ -0,0 +1,44 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "root", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "child", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "haha", + "attributes": {}, + "isSelfClosing": true + }], + ["closetag", "haha"], + ["closetag", "child"], + ["opentag", { + "name": "monkey", + "attributes": {}, + "isSelfClosing": false + }], + ["text", "=(|)"], + ["closetag", "monkey"], + ["closetag", "root"], + ["end"], + ["ready"] + ], + strict : true, + opt : {} +}); + diff --git a/platforms/android/assets/www/node_modules/sax/test/self-closing-child.js b/platforms/android/assets/www/node_modules/sax/test/self-closing-child.js new file mode 100644 index 0000000..f31c366 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/self-closing-child.js @@ -0,0 +1,44 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "ROOT", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "CHILD", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "HAHA", + "attributes": {}, + "isSelfClosing": true + }], + ["closetag", "HAHA"], + ["closetag", "CHILD"], + ["opentag", { + "name": "MONKEY", + "attributes": {}, + "isSelfClosing": false + }], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); + diff --git a/platforms/android/assets/www/node_modules/sax/test/self-closing-tag.js b/platforms/android/assets/www/node_modules/sax/test/self-closing-tag.js new file mode 100644 index 0000000..d1d8b7c --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/self-closing-tag.js @@ -0,0 +1,25 @@ + +require(__dirname).test({ + xml : + " "+ + " "+ + " "+ + " "+ + "=(|) "+ + ""+ + " ", + expect : [ + ["opentag", {name:"ROOT", attributes:{}, isSelfClosing: false}], + ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], + ["closetag", "HAHA"], + ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], + ["closetag", "HAHA"], + // ["opentag", {name:"HAHA", attributes:{}}], + // ["closetag", "HAHA"], + ["opentag", {name:"MONKEY", attributes:{}, isSelfClosing: false}], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"] + ], + opt : { trim : true } +}); \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/sax/test/stray-ending.js b/platforms/android/assets/www/node_modules/sax/test/stray-ending.js new file mode 100644 index 0000000..bec467b --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/stray-ending.js @@ -0,0 +1,17 @@ +// stray ending tags should just be ignored in non-strict mode. +// https://github.com/isaacs/sax-js/issues/32 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "A", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "B", attributes: {}, isSelfClosing: false } ] + , [ "text", "" ] + , [ "closetag", "B" ] + , [ "closetag", "A" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/platforms/android/assets/www/node_modules/sax/test/trailing-attribute-no-value.js b/platforms/android/assets/www/node_modules/sax/test/trailing-attribute-no-value.js new file mode 100644 index 0000000..222837f --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/trailing-attribute-no-value.js @@ -0,0 +1,10 @@ + +require(__dirname).test({ + xml : + "", + expect : [ + ["attribute", {name:"ATTRIB", value:"attrib"}], + ["opentag", {name:"ROOT", attributes:{"ATTRIB":"attrib"}, isSelfClosing: false}] + ], + opt : { trim : true } +}); diff --git a/platforms/android/assets/www/node_modules/sax/test/trailing-non-whitespace.js b/platforms/android/assets/www/node_modules/sax/test/trailing-non-whitespace.js new file mode 100644 index 0000000..619578b --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/trailing-non-whitespace.js @@ -0,0 +1,18 @@ + +require(__dirname).test({ + xml : "Welcome, to monkey land", + expect : [ + ["opentag", { + "name": "SPAN", + "attributes": {}, + isSelfClosing: false + }], + ["text", "Welcome,"], + ["closetag", "SPAN"], + ["text", " to monkey land"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); diff --git a/platforms/android/assets/www/node_modules/sax/test/unclosed-root.js b/platforms/android/assets/www/node_modules/sax/test/unclosed-root.js new file mode 100644 index 0000000..f4eeac6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/unclosed-root.js @@ -0,0 +1,11 @@ +require(__dirname).test + ( { xml : "" + + , expect : + [ [ "opentag", { name: "root", attributes: {}, isSelfClosing: false } ] + , [ "error", "Unclosed root tag\nLine: 0\nColumn: 6\nChar: " ] + ] + , strict : true + , opt : {} + } + ) diff --git a/platforms/android/assets/www/node_modules/sax/test/unquoted.js b/platforms/android/assets/www/node_modules/sax/test/unquoted.js new file mode 100644 index 0000000..b3a9a81 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/unquoted.js @@ -0,0 +1,18 @@ +// unquoted attributes should be ok in non-strict mode +// https://github.com/isaacs/sax-js/issues/31 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "attribute", { name: "CLASS", value: "test" } ] + , [ "attribute", { name: "HELLO", value: "world" } ] + , [ "opentag", { name: "SPAN", + attributes: { CLASS: "test", HELLO: "world" }, + isSelfClosing: false } ] + , [ "closetag", "SPAN" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/platforms/android/assets/www/node_modules/sax/test/utf8-split.js b/platforms/android/assets/www/node_modules/sax/test/utf8-split.js new file mode 100644 index 0000000..e22bc10 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/utf8-split.js @@ -0,0 +1,32 @@ +var assert = require('assert') +var saxStream = require('../lib/sax').createStream() + +var b = new Buffer('误') + +saxStream.on('text', function(text) { + assert.equal(text, b.toString()) +}) + +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 1)) +saxStream.write(b.slice(1)) +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 2)) +saxStream.write(b.slice(2)) +saxStream.write(new Buffer('')) +saxStream.write(b) +saxStream.write(new Buffer('')) +saxStream.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) +saxStream.end(Buffer.concat([b.slice(1), new Buffer('')])) + +var saxStream2 = require('../lib/sax').createStream() + +saxStream2.on('text', function(text) { + assert.equal(text, '�') +}); + +saxStream2.write(new Buffer('')); +saxStream2.write(new Buffer([0xC0])); +saxStream2.write(new Buffer('')); +saxStream2.write(Buffer.concat([new Buffer(''), b.slice(0,1)])); +saxStream2.end(); diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-as-tag-name.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-as-tag-name.js new file mode 100644 index 0000000..99142ca --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-as-tag-name.js @@ -0,0 +1,15 @@ + +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "xmlns", uri: "", prefix: "", local: "xmlns", + attributes: {}, ns: {}, + isSelfClosing: true} + ], + ["closetag", "xmlns"] + ] + , strict : true + , opt : { xmlns: true } + } + ); diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-issue-41.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-issue-41.js new file mode 100644 index 0000000..17ab45a --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-issue-41.js @@ -0,0 +1,68 @@ +var t = require(__dirname) + + , xmls = // should be the same both ways. + [ "" + , "" ] + + , ex1 = + [ [ "opennamespace" + , { prefix: "a" + , uri: "http://ATTRIBUTE" + } + ] + , [ "attribute" + , { name: "xmlns:a" + , value: "http://ATTRIBUTE" + , prefix: "xmlns" + , local: "a" + , uri: "http://www.w3.org/2000/xmlns/" + } + ] + , [ "attribute" + , { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + ] + , [ "opentag" + , { name: "parent" + , uri: "" + , prefix: "" + , local: "parent" + , attributes: + { "a:attr": + { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + , "xmlns:a": + { name: "xmlns:a" + , local: "a" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "http://ATTRIBUTE" + } + } + , ns: {"a": "http://ATTRIBUTE"} + , isSelfClosing: true + } + ] + , ["closetag", "parent"] + , ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }] + ] + + // swap the order of elements 2 and 1 + , ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3)) + , expected = [ex1, ex2] + +xmls.forEach(function (x, i) { + t.test({ xml: x + , expect: expected[i] + , strict: true + , opt: { xmlns: true } + }) +}) diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-rebinding.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-rebinding.js new file mode 100644 index 0000000..07e0425 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-rebinding.js @@ -0,0 +1,63 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opennamespace", { prefix: "x", uri: "x1" } ] + , [ "opennamespace", { prefix: "y", uri: "y1" } ] + , [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ] + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } + , "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } + , "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' }, + isSelfClosing: false } ] + + , [ "opennamespace", { prefix: "x", uri: "x2" } ] + , [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } }, + ns: { x: 'x2' }, + isSelfClosing: false } ] + + , [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x2' }, + isSelfClosing: true } ] + + , [ "closetag", "check" ] + + , [ "closetag", "rebind" ] + , [ "closenamespace", { prefix: "x", uri: "x2" } ] + + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' }, + isSelfClosing: true } ] + , [ "closetag", "check" ] + + , [ "closetag", "root" ] + , [ "closenamespace", { prefix: "x", uri: "x1" } ] + , [ "closenamespace", { prefix: "y", uri: "y1" } ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-strict.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-strict.js new file mode 100644 index 0000000..b5e3e51 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-strict.js @@ -0,0 +1,74 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opentag", { name: "root", prefix: "", local: "root", uri: "", + attributes: {}, ns: {}, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } }, + ns: {}, isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "opennamespace", { prefix: "", uri: "uri:default" } ] + + , [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ] + , [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", + attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { "": "uri:default" }, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' }, + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "closetag", "ns1" ] + + , [ "closenamespace", { prefix: "", uri: "uri:default" } ] + + , [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ] + + , [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "", + attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { a: "uri:nsa" }, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ] + , [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", + attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true } ] + , [ "closetag", "a:ns" ] + + , [ "closetag", "ns2" ] + + , [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "closetag", "root" ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-unbound-element.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-unbound-element.js new file mode 100644 index 0000000..9d031a2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-unbound-element.js @@ -0,0 +1,33 @@ +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ [ "error", "Unbound namespace prefix: \"unbound:root\"\nLine: 0\nColumn: 15\nChar: >"] + , [ "opentag", { name: "unbound:root", uri: "unbound", prefix: "unbound", local: "root" + , attributes: {}, ns: {}, isSelfClosing: true } ] + , [ "closetag", "unbound:root" ] + ] + } +).write(""); + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ [ "opennamespace", { prefix: "unbound", uri: "someuri" } ] + , [ "attribute", { name: 'xmlns:unbound', value: 'someuri' + , prefix: 'xmlns', local: 'unbound' + , uri: 'http://www.w3.org/2000/xmlns/' } ] + , [ "opentag", { name: "unbound:root", uri: "someuri", prefix: "unbound", local: "root" + , attributes: { 'xmlns:unbound': { + name: 'xmlns:unbound' + , value: 'someuri' + , prefix: 'xmlns' + , local: 'unbound' + , uri: 'http://www.w3.org/2000/xmlns/' } } + , ns: { "unbound": "someuri" }, isSelfClosing: true } ] + , [ "closetag", "unbound:root" ] + , [ "closenamespace", { prefix: 'unbound', uri: 'someuri' }] + ] + } +).write(""); diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-unbound.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-unbound.js new file mode 100644 index 0000000..b740e26 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-unbound.js @@ -0,0 +1,15 @@ + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"] + + , [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } }, + ns: {}, isSelfClosing: true } ] + , [ "closetag", "root" ] + ] + } +).write("") diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-ns.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-ns.js new file mode 100644 index 0000000..b1984d2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-ns.js @@ -0,0 +1,31 @@ +var xmlns_attr = +{ + name: "xmlns", value: "http://foo", prefix: "xmlns", + local: "", uri : "http://www.w3.org/2000/xmlns/" +}; + +var attr_attr = +{ + name: "attr", value: "bar", prefix: "", + local : "attr", uri : "" +}; + + +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opennamespace", { prefix: "", uri: "http://foo" } ] + , [ "attribute", xmlns_attr ] + , [ "attribute", attr_attr ] + , [ "opentag", { name: "elm", prefix: "", local: "elm", uri : "http://foo", + ns : { "" : "http://foo" }, + attributes: { xmlns: xmlns_attr, attr: attr_attr }, + isSelfClosing: true } ] + , [ "closetag", "elm" ] + , [ "closenamespace", { prefix: "", uri: "http://foo"} ] + ] + , strict : true + , opt : {xmlns: true} + } + ) diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js new file mode 100644 index 0000000..e41f218 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js @@ -0,0 +1,36 @@ +require(__dirname).test( + { xml : "" + , expect : + [ [ "attribute" + , { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + ] + , [ "opentag" + , { name: "root" + , uri: "" + , prefix: "" + , local: "root" + , attributes: + { "xml:lang": + { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + } + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-prefix.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-prefix.js new file mode 100644 index 0000000..a85b478 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-prefix.js @@ -0,0 +1,21 @@ +require(__dirname).test( + { xml : "" + , expect : + [ + [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: {} + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-redefine.js b/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-redefine.js new file mode 100644 index 0000000..d35d5a0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sax/test/xmlns-xml-default-redefine.js @@ -0,0 +1,41 @@ +require(__dirname).test( + { xml : "" + , expect : + [ ["error" + , "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n" + + "Actual: ERROR\n" + + "Line: 0\nColumn: 27\nChar: '" + ] + , [ "attribute" + , { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + ] + , [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: + { "xmlns:xml": + { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + } + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/.npmignore b/platforms/android/assets/www/node_modules/selenium-webdriver/.npmignore new file mode 100644 index 0000000..d570088 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/.npmignore @@ -0,0 +1,2 @@ +node_modules/ + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/CHANGES.md b/platforms/android/assets/www/node_modules/selenium-webdriver/CHANGES.md new file mode 100644 index 0000000..5d40b1b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/CHANGES.md @@ -0,0 +1,490 @@ +## v2.52.0 + +### Notice + +Starting with v2.52.0, each release of selenium-webdriver will support the +latest _minor_ LTS and stable Node releases. All releases between the LTS and +stable release will have best effort support. Further details are available in +the selenium-webdriver package README. + +### Change Summary + +* Add support for Microsoft's Edge web browser +* Added `webdriver.Builder#buildAsync()`, which returns a promise that will be + fulfilled with the newly created WebDriver instance once the associated + browser has been full initialized. This is purely a convenient alternative + to the existing build() method as the WebDriver class will always defer + commands until it has a fully created browser. +* Added `firefox.Profile#setHost()` which may be used to set the host that + the FirefoxDriver's server listens for commands on. The server uses + "localhost" by default. +* Added `promise.Promise#catch()` for API compatibility with native Promises. + `promise.Promise#thenCatch()` is not yet deprecated, but it simply + delegates to `catch`. +* Changed some `io` operations to use native promises. +* Changed `command.Executor#execute()` and `HttpClient#send()` to return + promises instead of using callback passing. +* Replaced the `Serializable` class with an internal, Symbol-defined method. +* Changed the `Capabilities` class to extend the native `Map` type. +* Changed the `Capabilities.has(key)` to only test if a capability has been set + (Map semantics). To check whether the value is true, use `get(key)`. +* Deprecated `executors.DeferredExecutor` in favor of + `lib/command.DeferredExecutor`. +* API documentation is no longer distributed with the npm package, but remains + available at +* Rewrote the `error` module to export an Error subtype for each type of error + defined in the [W3C WebDriver spec](https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors). +* Changed the `http.Request` and `http.Response` classes to store headers in + maps instead of object literals. +* Updated `ws` dependency to version `1.0.1`. +* Removed fluent predicates "is" and "not" from the experimental + `testing/assert` module. +* Wait conditions that locate an element, or that wait on an element's state, + will return a WebElementPromise. +* Lots of internal clean-up to break selenium-webdriver's long standing + dependency on Google's Closure library. + +### Changes for W3C WebDriver Spec Compliance + +* Updated the `By` locators that are not in the W3C spec to delegated to using + CSS selectors: `By.className`, `By.id`, `By.name`, and `By.tagName`. + + +## v2.49-51 + +* _Releases skipped to stay in sync with the rest of the Selenium project_ + + +## v2.48.2 + +* Added `WebElement#takeScreenshot()`. +* More adjustments to promise callback tracking. + +## v2.48.1 + +* FIXED: Adjusted how the control flow tracks promise callbacks to avoid a + potential deadlock. + +## v2.48.0 + +* Node v0.12.x users must run with --harmony. _This is the last release that + will support v0.12.x_ +* FIXED: (Promise/A+ compliance) When a promise is rejected with a thenable, + the promise adopts the thenable as its rejection reason instead of waiting + for it to settle. The previous (incorrect) behavior was hidden by bugs in + the `promises-aplus-tests` compliance test suite that were fixed in version + `2.1.1`. +* FIXED: the `webdriver.promise.ControlFlow` now has a consistent execution + order for tasks/callbacks scheduled in different turns of the JS event loop. + Refer to the `webdriver.promise` documentation for more details. +* FIXED: do not drop user auth from the WebDriver server URL. +* FIXED: a single `firefox.Binary` instance may be used to configure and + launch multiple FirefoxDriver sessions. + + var binary = new firefox.Binary(); + var options = new firefox.Options().setBinary(binary); + var builder = new Builder().setFirefoxOptions(options); + + var driver1 = builder.build(); + var driver2 = builder.build(); + +* FIXED: zip files created for transfer to a remote WebDriver server are no + longer compressed. If the zip contained a file that was already compressed, + the server would return an "invalid code lengths set" error. +* FIXED: Surfaced the `loopback` option to `remote/SeleniumServer`. When set, + the server will be accessed using the current host's loopback address. + +## v2.47.0 + +### Notice + +This is the last release for `selenium-webdriver` that will support ES5. +Subsequent releases will depend on ES6 features that are enabled by +[default](https://nodejs.org/en/docs/es6/) in Node v4.0.0. Node v0.12.x will +continue to be supported, but will require setting the `--harmony` flag. + +### Change Summary + +* Add support for [Node v4.0.0](https://nodejs.org/en/blog/release/v4.0.0/) + * Updated `ws` dependency from `0.7.1` to `0.8.0` +* Bumped the minimum supported version of Node from `0.10.x` to `0.12.x`. This + is in accordance with the Node support policy established in `v2.45.0`. + +## v2.46.1 + +* Fixed internal module loading on Windows. +* Fixed error message format on timeouts for `until.elementLocated()` + and `until.elementsLocated()`. + +## v2.46.0 + +* Exposed a new logging API via the `webdriver.logging` module. For usage, see + `example/logging.js`. +* Added support for using a proxy server for WebDriver commands. + See `Builder#usingWebDriverProxy()` for more info. +* Removed deprecated functions: + * Capabilities#toJSON() + * UnhandledAlertError#getAlert() + * chrome.createDriver() + * phantomjs.createDriver() + * promise.ControlFlow#annotateError() + * promise.ControlFlow#await() + * promise.ControlFlow#clearHistory() + * promise.ControlFlow#getHistory() +* Removed deprecated enum values: `ErrorCode.NO_MODAL_DIALOG_OPEN` and + `ErrorCode.MODAL_DIALOG_OPENED`. Use `ErrorCode.NO_SUCH_ALERT` and + `ErrorCode.UNEXPECTED_ALERT_OPEN`, respectively. +* FIXED: The `promise.ControlFlow` will maintain state for promise chains + generated in a loop. +* FIXED: Correct serialize target elements used in an action sequence. +* FIXED: `promise.ControlFlow#wait()` now has consistent semantics for an + omitted or 0-timeout: it will wait indefinitely. +* FIXED: `remote.DriverService#start()` will now fail if the child process dies + while waiting for the server to start accepting requests. Previously, start + would continue to poll the server address until the timeout expired. +* FIXED: Skip launching Firefox with the `-silent` flag to preheat the profile. + Starting with Firefox 38, this would cause the browser to crash. This step, + which was first introduced for Selenium's java client back with Firefox 2, + no longer appears to be required. +* FIXED: 8564: `firefox.Driver#quit()` will wait for the Firefox process to + terminate before deleting the temporary webdriver profile. This eliminates a + race condition where Firefox would write profile data during shutdown, + causing the `rm -rf` operation on the profile directory to fail. + +## v2.45.1 + +* FIXED: 8548: Task callbacks are once again dropped if the task was cancelled + due to a previously uncaught error within the frame. +* FIXED: 8496: Extended the `chrome.Options` API to cover all configuration + options (e.g. mobile emulation and performance logging) documented on the + ChromeDriver [project site](https://sites.google.com/a/chromium.org/chromedriver/capabilities). + +## v2.45.0 + +### Important Policy Change + +Starting with the 2.45.0 release, selenium-webdriver will support the last +two stable minor releases for Node. For 2.45.0, this means Selenium will +support Node 0.10.x and 0.12.x. Support for the intermediate, un-stable release +(0.11.x) is "best-effort". This policy will be re-evaluated once Node has a +major version release (i.e. 1.0.0). + +### Change Summary + +* Added native browser support for Internet Explorer, Opera 26+, and Safari +* With the release of [Node 0.12.0](http://blog.nodejs.org/2015/02/06/node-v0-12-0-stable/) + (finally!), the minimum supported version of Node is now `0.10.x`. +* The `promise` module is now [Promises/A+](https://promisesaplus.com/) + compliant. The biggest compliance change is that promise callbacks are now + invoked in a future turn of the JS event loop. For example: + + var promise = require('selenium-webdriver').promise; + console.log('start'); + promise.fulfilled().then(function() { + console.log('middle'); + }); + console.log('end'); + + // Output in selenium-webdriver@2.44.0 + // start + // middle + // end + // + // Output in selenium-webdriver@2.45.0 + // start + // end + // middle + + The `promise.ControlFlow` class has been updated to track the asynchronous + breaks required by Promises/A+, so there are no changes to task execution + order. +* Updated how errors are annotated on failures. When a task fails, the + stacktrace from when that task was scheduled is appended to the rejection + reason with a `From: ` prefix (if it is an Error object). For example: + + var driver = new webdriver.Builder().forBrowser('chrome').build(); + driver.get('http://www.google.com/ncr'); + driver.call(function() { + driver.wait(function() { + return driver.isElementPresent(webdriver.By.id('not-there')); + }, 2000, 'element not found'); + }); + + This code will fail an error like: + + Error: element not found + Wait timed out after 2002ms + at + From: Task: element not found + at + From: Task: WebDriver.call(function) + at + +* Changed the format of strings returned by `promise.ControlFlow#getSchedule`. + This function now accepts a boolean to control whether the returned string + should include the stacktraces for when each task was scheduled. +* Deprecating `promise.ControlFlow#getHistory`, + `promise.ControlFlow#clearHistory`, and `promise.ControlFlow#annotateError`. + These functions were all intended for internal use and are no longer + necessary, so they have been made no-ops. +* `WebDriver.wait()` may now be used to wait for a promise to resolve, with + an optional timeout. Refer to the API documentation for more information. +* Added support for copying files to a remote Selenium via `sendKeys` to test + file uploads. Refer to the API documentation for more information. Sample + usage included in `test/upload_test.js` +* Expanded the interactions API to include touch actions. + See `WebDriver.touchActions()`. +* FIXED: 8380: `firefox.Driver` will delete its temporary profile on `quit`. +* FIXED: 8306: Stack overflow in promise callbacks eliminated. +* FIXED: 8221: Added support for defining custom command mappings. Includes + support for PhantomJS's `executePhantomJS` (requires PhantomJS 1.9.7 or + GhostDriver 1.1.0). +* FIXED: 8128: When the FirefoxDriver marshals an object to the page for + `executeScript`, it defines additional properties (required by the driver's + implementation). These properties will no longer be enumerable and should + be omitted (i.e. they won't show up in JSON.stringify output). +* FIXED: 8094: The control flow will no longer deadlock when a task returns + a promise that depends on the completion of sub-tasks. + +## v2.44.0 + +* Added the `until` module, which defines common explicit wait conditions. + Sample usage: + + var firefox = require('selenium-webdriver/firefox'), + until = require('selenium-webdriver/until'); + + var driver = new firefox.Driver(); + driver.get('http://www.google.com/ncr'); + driver.wait(until.titleIs('Google Search'), 1000); + +* FIXED: 8000: `Builder.forBrowser()` now accepts an empty string since some + WebDriver implementations ignore the value. A value must still be specified, + however, since it is a required field in WebDriver's wire protocol. +* FIXED: 7994: The `stacktrace` module will not modify stack traces if the + initial parse fails (e.g. the user defined `Error.prepareStackTrace`) +* FIXED: 5855: Added a module (`until`) that defines several common conditions + for use with explicit waits. See updated examples for usage. + +## v2.43.5 + +* FIXED: 7905: `Builder.usingServer(url)` once again returns `this` for + chaining. + +## v2.43.2-4 + +* No changes; version bumps while attempting to work around an issue with + publishing to npm (a version string may only be used once). + +## v2.43.1 + +* Fixed an issue with flakiness when setting up the Firefox profile that could + prevent the driver from initializing properly. + +## v2.43.0 + +* Added native support for Firefox - the Java Selenium server is no longer + required. +* Added support for generator functions to `ControlFlow#execute` and + `ControlFlow#wait`. For more information, see documentation on + `webdriver.promise.consume`. Requires harmony support (run with + `node --harmony-generators` in `v0.11.x`). +* Various improvements to the `Builder` API. Notably, the `build()` function + will no longer default to attempting to use a server at + `http://localhost:4444/wd/hub` if it cannot start a browser directly - + you must specify the WebDriver server with `usingServer(url)`. You can + also set the target browser and WebDriver server through a pair of + environment variables. See the documentation on the `Builder` constructor + for more information. +* For consistency with the other language bindings, added browser specific + classes that can be used to start a browser without the builder. + + var webdriver = require('selenium-webdriver') + chrome = require('selenium-webdriver/chrome'); + + // The following are equivalent. + var driver1 = new webdriver.Builder().forBrowser('chrome').build(); + var driver2 = new chrome.Driver(); + +* Promise A+ compliance: a promise may no longer resolve to itself. +* For consistency with other language bindings, deprecated + `UnhandledAlertError#getAlert` and added `#getAlertText`. + `getAlert` will be removed in `2.45.0`. +* FIXED: 7641: Deprecated `ErrorCode.NO_MODAL_DIALOG_OPEN` and + `ErrorCode.MODAL_DIALOG_OPENED` in favor of the new + `ErrorCode.NO_SUCH_ALERT` and `ErrorCode.UNEXPECTED_ALERT_OPEN`, + respectively. +* FIXED: 7563: Mocha integration no longer disables timeouts. Default Mocha + timeouts apply (2000 ms) and may be changed using `this.timeout(ms)`. +* FIXED: 7470: Make it easier to create WebDriver instances in custom flows for + parallel execution. + +## v2.42.1 + +* FIXED: 7465: Fixed `net.getLoopbackAddress` on Windows +* FIXED: 7277: Support `done` callback in Mocha's BDD interface +* FIXED: 7156: `Promise#thenFinally` should not suppress original error + +## v2.42.0 + +* Removed deprecated functions `Promise#addCallback()`, + `Promise#addCallbacks()`, `Promise#addErrback()`, and `Promise#addBoth()`. +* Fail with a more descriptive error if the server returns a malformed redirect +* FIXED: 7300: Connect to ChromeDriver using the loopback address since + ChromeDriver 2.10.267517 binds to localhost by default. +* FIXED: 7339: Preserve wrapped test function's string representation for + Mocha's BDD interface. + +## v2.41.0 + +* FIXED: 7138: export logging API from webdriver module. +* FIXED: 7105: beforeEach/it/afterEach properly bind `this` for Mocha tests. + +## v2.40.0 + +* API documentation is now included in the docs directory. +* Added utility functions for working with an array of promises: + `promise.all`, `promise.map`, and `promise.filter` +* Introduced `Promise#thenCatch()` and `Promise#thenFinally()`. +* Deprecated `Promise#addCallback()`, `Promise#addCallbacks()`, + `Promise#addErrback()`, and `Promise#addBoth()`. +* Removed deprecated function `webdriver.WebDriver#getCapability`. +* FIXED: 6826: Added support for custom locators. + +## v2.39.0 + +* Version bump to stay in sync with the Selenium project. + +## v2.38.1 + +* FIXED: 6686: Changed `webdriver.promise.Deferred#cancel()` to silently no-op + if the deferred has already been resolved. + +## v2.38.0 + +* When a promise is rejected, always annotate the stacktrace with the parent + flow state so users can identify the source of an error. +* Updated tests to reflect features not working correctly in the SafariDriver + (cookie management and proxy support; see issues 5051, 5212, and 5503) +* FIXED: 6284: For mouse moves, correctly omit the x/y offsets if not + specified as a function argument (instead of passing (0,0)). +* FIXED: 6471: Updated documentation on `webdriver.WebElement#getAttribute` +* FIXED: 6612: On Unix, use the default IANA ephemeral port range if unable to + retrieve the current system's port range. +* FIXED: 6617: Avoid triggering the node debugger when initializing the + stacktrace module. +* FIXED: 6627: Safely rebuild chrome.Options from a partial JSON spec. + +## v2.37.0 + +* FIXED: 6346: The remote.SeleniumServer class now accepts JVM arguments using + the `jvmArgs` option. + +## v2.36.0 + +* _Release skipped to stay in sync with main Selenium project._ + +## v2.35.2 + +* FIXED: 6200: Pass arguments to the Selenium server instead of to the JVM. + +## v2.35.1 + +* FIXED: 6090: Changed example scripts to use chromedriver. + +## v2.35.0 + +* Version bump to stay in sync with the Selenium project. + +## v2.34.1 + +* FIXED: 6079: The parent process should not wait for spawn driver service + processes (chromedriver, phantomjs, etc.) + +## v2.34.0 + +* Added the `selenium-webdriver/testing/assert` module. This module + simplifies writing assertions against promised values (see + example in module documentation). +* Added the `webdriver.Capabilities` class. +* Added native support for the ChromeDriver. When using the `Builder`, + requesting chrome without specifying a remote server URL will default to + the native ChromeDriver implementation. The + [ChromeDriver server](https://code.google.com/p/chromedriver/downloads/list) + must be downloaded separately. + + // Will start ChromeDriver locally. + var driver = new webdriver.Builder(). + withCapabilities(webdriver.Capabilities.chrome()). + build(); + + // Will start ChromeDriver using the remote server. + var driver = new webdriver.Builder(). + withCapabilities(webdriver.Capabilities.chrome()). + usingServer('http://server:1234/wd/hub'). + build(); + +* Added support for configuring proxies through the builder. For examples, see + `selenium-webdriver/test/proxy_test`. +* Added native support for PhantomJS. +* Changed signature of `SeleniumServer` to `SeleniumServer(jar, options)`. +* Tests are now included in the npm published package. See `README.md` for + execution instructions +* Removed the deprecated `webdriver.Deferred#resolve` and + `webdriver.promise.resolved` functions. +* Removed the ability to connect to an existing session from the Builder. This + feature is intended for use with the browser-based client. + +## v2.33.0 + +* Added support for WebDriver's logging API +* FIXED: 5511: Added webdriver.manage().timeouts().pageLoadTimeout(ms) + +## v2.32.1 + +* FIXED: 5541: Added missing return statement for windows in + `portprober.findFreePort()` + +## v2.32.0 + +* Added the `selenium-webdriver/testing` package, which provides a basic + framework for writing tests using Mocha. See + `selenium-webdriver/example/google_search_test.js` for usage. +* For Promises/A+ compatibility, backing out the change in 2.30.0 that ensured + rejections were always Error objects. Rejection reasons are now left as is. +* Removed deprecated functions originally scheduled for removal in 2.31.0 + * promise.Application.getInstance() + * promise.ControlFlow#schedule() + * promise.ControlFlow#scheduleTimeout() + * promise.ControlFlow#scheduleWait() +* Renamed some functions for consistency with Promises/A+ terminology. The + original functions have been deprecated and will be removed in 2.34.0: + * promise.resolved() -> promise.fulfilled() + * promise.Deferred#resolve() -> promise.Deferred#fulfill() +* FIXED: remote.SeleniumServer#stop now shuts down within the active control + flow, allowing scripts to finish. Use #kill to shutdown immediately. +* FIXED: 5321: cookie deletion commands + +## v2.31.0 + +* Added an example script. +* Added a class for controlling the standalone Selenium server (server +available separately) +* Added a portprober for finding free ports +* FIXED: WebElements now belong to the same flow as their parent driver. + +## v2.30.0 + +* Ensures promise rejections are always Error values. +* Version bump to keep in sync with the Selenium project. + +## v2.29.1 + +* Fixed a bug that could lead to an infinite loop. +* Added a README.md + +## v2.29.0 + +* Initial release for npm: + + npm install selenium-webdriver diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/LICENSE b/platforms/android/assets/www/node_modules/selenium-webdriver/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/NOTICE b/platforms/android/assets/www/node_modules/selenium-webdriver/NOTICE new file mode 100644 index 0000000..2744503 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/NOTICE @@ -0,0 +1,2 @@ +Copyright 2011-2016 Software Freedom Conservancy +Copyright 2004-2011 Selenium committers diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/README.md b/platforms/android/assets/www/node_modules/selenium-webdriver/README.md new file mode 100644 index 0000000..0b446ba --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/README.md @@ -0,0 +1,226 @@ +# selenium-webdriver + +Selenium is a browser automation library. Most often used for testing +web-applications, Selenium may be used for any task that requires automating +interaction with the browser. + +## Installation + +Selenium may be installed via npm with + + npm install selenium-webdriver + +Out of the box, Selenium includes everything you need to work with Firefox. You +will need to download additional components to work with the other major +browsers. The drivers for Chrome, PhantomJS, Opera, and Microsoft's IE and Edge +web browsers are all standalone executables that should be available on your +[PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). The SafariDriver +browser extension should be installed in your browser before using Selenium; we +recommend disabling the extension when using the browser without Selenium or +installing the extension in a profile only used for testing. + +| Browser | Component | +| ----------------- | ---------------------------------- | +| Chrome | [chromedriver(.exe)][chrome] | +| Internet Explorer | [IEDriverServer.exe][release] | +| Edge | [MicrosoftWebDriver.msi][edge] | +| PhantomJS | [phantomjs(.exe)][phantomjs] | +| Opera | [operadriver(.exe)][opera] | +| Safari | [SafariDriver.safariextz][release] | + +## Usage + +The sample below and others are included in the `example` directory. You may +also find the tests for selenium-webdriver informative. + + var webdriver = require('selenium-webdriver'), + By = require('selenium-webdriver').By, + until = require('selenium-webdriver').until; + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + + driver.get('http://www.google.com/ncr'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + driver.quit(); + +### Using the Builder API + +The `Builder` class is your one-stop shop for configuring new WebDriver +instances. Rather than clutter your code with branches for the various browsers, +the builder lets you set all options in one flow. When you call +`Builder#build()`, all options irrelevant to the selected browser are dropped: + + var webdriver = require('selenium-webdriver'), + chrome = require('selenium-webdriver/chrome'), + firefox = require('selenium-webdriver/firefox'); + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .setChromeOptions(/* ... */) + .setFirefoxOptions(/* ... */) + .build(); + +Why would you want to configure options irrelevant to the target browser? The +`Builder`'s API defines your _default_ configuration. You can change the target +browser at runtime through the `SELENIUM_BROWSER` environment variable. For +example, the `example/google_search.js` script is configured to run against +Firefox. You can run the example against other browsers just by changing the +runtime environment + + # cd node_modules/selenium-webdriver + node example/google_search + SELENIUM_BROWSER=chrome node example/google_search + SELENIUM_BROWSER=safari node example/google_search + +### The Standalone Selenium Server + +The standalone Selenium Server acts as a proxy between your script and the +browser-specific drivers. The server may be used when running locally, but it's +not recommend as it introduces an extra hop for each request and will slow +things down. The server is required, however, to use a browser on a remote host +(most browser drivers, like the IEDriverServer, do not accept remote +connections). + +To use the Selenium Server, you will need to install the +[JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html) and +download the latest server from [Selenium][release]. Once downloaded, run the +server with + + java -jar selenium-server-standalone-2.45.0.jar + +You may configure your tests to run against a remote server through the Builder +API: + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .usingServer('http://localhost:4444/wd/hub') + .build(); + +Or change the Builder's configuration at runtime with the `SELENIUM_REMOTE_URL` +environment variable: + + SELENIUM_REMOTE_URL="http://localhost:4444/wd/hub" node script.js + +You can experiment with these options using the `example/google_search.js` +script provided with `selenium-webdriver`. + +## Documentation + +API documentation is available online from the [Selenium project][api]. +Addition resources include + +- the #selenium channel on freenode IRC +- the [selenium-users@googlegroups.com][users] list +- [SeleniumHQ](http://www.seleniumhq.org/docs/) documentation + +## Contributing + +Contributions are accepted either through [GitHub][gh] pull requests or patches +via the [Selenium issue tracker][issues]. You must sign our +[Contributor License Agreement][cla] before your changes will be accepted. + +## Node Support Policy + +Each version of selenium-webdriver will support the latest _semver-minor_ +version of the [LTS] and stable Node releases. All _semver-major_ & +_semver-minor_ versions between the LTS and stable release will have "best +effort" support. Following a Selenium release, any _semver-minor_ Node releases +will also have "best effort" support. Releases older than the latest LTS, +_semver-major_ releases, and all unstable release branches (e.g. "v.Next") +are considered strictly unsupported. + +For example, suppose the current LTS and stable releases are v4.2.4 and v5.4.1, +respectively. Then a Selenium release would have the following support levels: + +| Version | Support | +| ------- | ------------- | +| <= 4.1 | _unsupported_ | +| 4.2 | supported | +| 5.0-3 | best effort | +| 5.4 | supported | +| >= 5.5 | best effort | +| v.Next | _unsupported_ | + +### Support Level Definitions + +- _supported:_ A selenium-webdriver release will be API compatible with the + platform API, without the use of runtime flags. + +- _best effort:_ Bugs will be investigated as time permits. API compatibility is + only guaranteed where required by a _supported_ release. This effectively + means the adoption of new JS features, such as ES2015 modules, will depend + on what is supported in Node's LTS. + +- _unsupported:_ Bug submissions will be closed as will-not-fix and API + compatibility is not guaranteed. + +### Projected Support Schedule + +If Node releases a new [LTS] each October and a new major version every 6 +months, the support window for selenium-webdriver will be roughly: + +| Date | LTS | Stable | +| --------- | ---: | -----: | +| (current) | 4.2 | 5.0 | +| 2016-04 | 4.2 | 6.0 | +| 2016-10 | 6.0 | 7.0 | +| 2017-04 | 6.0 | 8.0 | +| 2017-10 | 8.0 | 9.0 | + +## Issues + +Please report any issues using the [Selenium issue tracker][issues]. When using +the issue tracker + +- __Do__ include a detailed description of the problem. +- __Do__ include a link to a [gist](http://gist.github.com/) with any + interesting stack traces/logs (you may also attach these directly to the bug + report). +- __Do__ include a [reduced test case][reduction]. Reporting "unable to find + element on the page" is _not_ a valid report - there's nothing for us to + look into. Expect your bug report to be closed if you do not provide enough + information for us to investigate. +- __Do not__ use the issue tracker to submit basic help requests. All help + inquiries should be directed to the [user forum][users] or #selenium IRC + channel. +- __Do not__ post empty "I see this too" or "Any updates?" comments. These + provide no additional information and clutter the log. +- __Do not__ report regressions on closed bugs as they are not actively + monitored for upates (especially bugs that are >6 months old). Please open a + new issue and reference the original bug in your report. + +## License + +Licensed to the Software Freedom Conservancy (SFC) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The SFC licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +[LTS]: https://github.com/nodejs/LTS +[api]: http://seleniumhq.github.io/selenium/docs/api/javascript/ +[cla]: http://goo.gl/qC50R +[chrome]: http://chromedriver.storage.googleapis.com/index.html +[gh]: https://github.com/SeleniumHQ/selenium/ +[issues]: https://github.com/SeleniumHQ/selenium/issues +[opera]: https://github.com/operasoftware/operachromiumdriver/releases +[phantomjs]: http://phantomjs.org/ +[edge]: http://go.microsoft.com/fwlink/?LinkId=619687 +[reduction]: http://www.webkit.org/quality/reduction.html +[release]: http://selenium-release.storage.googleapis.com/index.html +[users]: https://groups.google.com/forum/#!forum/selenium-users diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/builder.js b/platforms/android/assets/www/node_modules/selenium-webdriver/builder.js new file mode 100644 index 0000000..64968e1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/builder.js @@ -0,0 +1,513 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const chrome = require('./chrome'); +const edge = require('./edge'); +const executors = require('./executors'); +const firefox = require('./firefox'); +const ie = require('./ie'); +const capabilities = require('./lib/capabilities'); +const webdriver = require('./lib/webdriver'); +const promise = require('./lib/promise'); +const opera = require('./opera'); +const phantomjs = require('./phantomjs'); +const safari = require('./safari'); + +const Browser = capabilities.Browser; +const Capabilities = capabilities.Capabilities; +const Capability = capabilities.Capability; +const WebDriver = webdriver.WebDriver; + + + +var seleniumServer; + +/** + * Starts an instance of the Selenium server if not yet running. + * @param {string} jar Path to the server jar to use. + * @return {!promise.Promise} A promise for the server's + * addrss once started. + */ +function startSeleniumServer(jar) { + if (!seleniumServer) { + // Requiring 'chrome' above would create a cycle: + // index -> builder -> chrome -> index + var remote = require('./remote'); + seleniumServer = new remote.SeleniumServer(jar); + } + return seleniumServer.start(); +} + + +/** + * Creates new {@link webdriver.WebDriver WebDriver} instances. The environment + * variables listed below may be used to override a builder's configuration, + * allowing quick runtime changes. + * + * - {@code SELENIUM_BROWSER}: defines the target browser in the form + * {@code browser[:version][:platform]}. + * + * - {@code SELENIUM_REMOTE_URL}: defines the remote URL for all builder + * instances. This environment variable should be set to a fully qualified + * URL for a WebDriver server (e.g. http://localhost:4444/wd/hub). This + * option always takes precedence over {@code SELENIUM_SERVER_JAR}. + * + * - {@code SELENIUM_SERVER_JAR}: defines the path to the + * + * standalone Selenium server jar to use. The server will be started the + * first time a WebDriver instance and be killed when the process exits. + * + * Suppose you had mytest.js that created WebDriver with + * + * var driver = new webdriver.Builder() + * .forBrowser('chrome') + * .build(); + * + * This test could be made to use Firefox on the local machine by running with + * `SELENIUM_BROWSER=firefox node mytest.js`. Rather than change the code to + * target Google Chrome on a remote machine, you can simply set the + * `SELENIUM_BROWSER` and `SELENIUM_REMOTE_URL` environment variables: + * + * SELENIUM_BROWSER=chrome:36:LINUX \ + * SELENIUM_REMOTE_URL=http://www.example.com:4444/wd/hub \ + * node mytest.js + * + * You could also use a local copy of the standalone Selenium server: + * + * SELENIUM_BROWSER=chrome:36:LINUX \ + * SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar \ + * node mytest.js + */ +class Builder { + constructor() { + /** @private {promise.ControlFlow} */ + this.flow_ = null; + + /** @private {string} */ + this.url_ = ''; + + /** @private {?string} */ + this.proxy_ = null; + + /** @private {!Capabilities} */ + this.capabilities_ = new Capabilities(); + + /** @private {chrome.Options} */ + this.chromeOptions_ = null; + + /** @private {firefox.Options} */ + this.firefoxOptions_ = null; + + /** @private {opera.Options} */ + this.operaOptions_ = null; + + /** @private {ie.Options} */ + this.ieOptions_ = null; + + /** @private {safari.Options} */ + this.safariOptions_ = null; + + /** @private {edge.Options} */ + this.edgeOptions_ = null; + + /** @private {boolean} */ + this.ignoreEnv_ = false; + } + + /** + * Configures this builder to ignore any environment variable overrides and to + * only use the configuration specified through this instance's API. + * + * @return {!Builder} A self reference. + */ + disableEnvironmentOverrides() { + this.ignoreEnv_ = true; + return this; + } + + /** + * Sets the URL of a remote WebDriver server to use. Once a remote URL has + * been specified, the builder direct all new clients to that server. If this + * method is never called, the Builder will attempt to create all clients + * locally. + * + * As an alternative to this method, you may also set the + * `SELENIUM_REMOTE_URL` environment variable. + * + * @param {string} url The URL of a remote server to use. + * @return {!Builder} A self reference. + */ + usingServer(url) { + this.url_ = url; + return this; + } + + /** + * @return {string} The URL of the WebDriver server this instance is + * configured to use. + */ + getServerUrl() { + return this.url_; + } + + /** + * Sets the URL of the proxy to use for the WebDriver's HTTP connections. + * If this method is never called, the Builder will create a connection + * without a proxy. + * + * @param {string} proxy The URL of a proxy to use. + * @return {!Builder} A self reference. + */ + usingWebDriverProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * @return {?string} The URL of the proxy server to use for the WebDriver's + * HTTP connections, or `null` if not set. + */ + getWebDriverProxy() { + return this.proxy_; + } + + /** + * Sets the desired capabilities when requesting a new session. This will + * overwrite any previously set capabilities. + * @param {!(Object|Capabilities)} capabilities The desired capabilities for + * a new session. + * @return {!Builder} A self reference. + */ + withCapabilities(capabilities) { + this.capabilities_ = new Capabilities(capabilities); + return this; + } + + /** + * Returns the base set of capabilities this instance is currently configured + * to use. + * @return {!Capabilities} The current capabilities for this builder. + */ + getCapabilities() { + return this.capabilities_; + } + + /** + * Configures the target browser for clients created by this instance. + * Any calls to {@link #withCapabilities} after this function will + * overwrite these settings. + * + * You may also define the target browser using the {@code SELENIUM_BROWSER} + * environment variable. If set, this environment variable should be of the + * form `browser[:[version][:platform]]`. + * + * @param {(string|Browser)} name The name of the target browser; + * common defaults are available on the {@link webdriver.Browser} enum. + * @param {string=} opt_version A desired version; may be omitted if any + * version should be used. + * @param {string=} opt_platform The desired platform; may be omitted if any + * version may be used. + * @return {!Builder} A self reference. + */ + forBrowser(name, opt_version, opt_platform) { + this.capabilities_.set(Capability.BROWSER_NAME, name); + this.capabilities_.set(Capability.VERSION, opt_version || null); + this.capabilities_.set(Capability.PLATFORM, opt_platform || null); + return this; + } + + /** + * Sets the proxy configuration to use for WebDriver clients created by this + * builder. Any calls to {@link #withCapabilities} after this function will + * overwrite these settings. + * @param {!capabilities.ProxyConfig} config The configuration to use. + * @return {!Builder} A self reference. + */ + setProxy(config) { + this.capabilities_.setProxy(config); + return this; + } + + /** + * Sets the logging preferences for the created session. Preferences may be + * changed by repeated calls, or by calling {@link #withCapabilities}. + * @param {!(./lib/logging.Preferences|Object)} prefs The + * desired logging preferences. + * @return {!Builder} A self reference. + */ + setLoggingPrefs(prefs) { + this.capabilities_.setLoggingPrefs(prefs); + return this; + } + + /** + * Sets whether native events should be used. + * @param {boolean} enabled Whether to enable native events. + * @return {!Builder} A self reference. + */ + setEnableNativeEvents(enabled) { + this.capabilities_.setEnableNativeEvents(enabled); + return this; + } + + /** + * Sets how elements should be scrolled into view for interaction. + * @param {number} behavior The desired scroll behavior: either 0 to align + * with the top of the viewport or 1 to align with the bottom. + * @return {!Builder} A self reference. + */ + setScrollBehavior(behavior) { + this.capabilities_.setScrollBehavior(behavior); + return this; + } + + /** + * Sets the default action to take with an unexpected alert before returning + * an error. + * @param {string} behavior The desired behavior; should be "accept", + * "dismiss", or "ignore". Defaults to "dismiss". + * @return {!Builder} A self reference. + */ + setAlertBehavior(behavior) { + this.capabilities_.setAlertBehavior(behavior); + return this; + } + + /** + * Sets Chrome specific {@linkplain chrome.Options options} for drivers + * created by this builder. Any logging or proxy settings defined on the given + * options will take precedence over those set through + * {@link #setLoggingPrefs} and {@link #setProxy}, respectively. + * + * @param {!chrome.Options} options The ChromeDriver options to use. + * @return {!Builder} A self reference. + */ + setChromeOptions(options) { + this.chromeOptions_ = options; + return this; + } + + /** + * Sets Firefox specific {@linkplain firefox.Options options} for drivers + * created by this builder. Any logging or proxy settings defined on the given + * options will take precedence over those set through + * {@link #setLoggingPrefs} and {@link #setProxy}, respectively. + * + * @param {!firefox.Options} options The FirefoxDriver options to use. + * @return {!Builder} A self reference. + */ + setFirefoxOptions(options) { + this.firefoxOptions_ = options; + return this; + } + + /** + * Sets Opera specific {@linkplain opera.Options options} for drivers created + * by this builder. Any logging or proxy settings defined on the given options + * will take precedence over those set through {@link #setLoggingPrefs} and + * {@link #setProxy}, respectively. + * + * @param {!opera.Options} options The OperaDriver options to use. + * @return {!Builder} A self reference. + */ + setOperaOptions(options) { + this.operaOptions_ = options; + return this; + } + + /** + * Set Internet Explorer specific {@linkplain ie.Options options} for drivers + * created by this builder. Any proxy settings defined on the given options + * will take precedence over those set through {@link #setProxy}. + * + * @param {!ie.Options} options The IEDriver options to use. + * @return {!Builder} A self reference. + */ + setIeOptions(options) { + this.ieOptions_ = options; + return this; + } + + /** + * Set {@linkplain edge.Options options} specific to Microsoft's Edge browser + * for drivers created by this builder. Any proxy settings defined on the + * given options will take precedence over those set through + * {@link #setProxy}. + * + * @param {!edge.Options} options The MicrosoftEdgeDriver options to use. + * @return {!Builder} A self reference. + */ + setEdgeOptions(options) { + this.edgeOptions_ = options; + return this; + } + + /** + * Sets Safari specific {@linkplain safari.Options options} for drivers + * created by this builder. Any logging settings defined on the given options + * will take precedence over those set through {@link #setLoggingPrefs}. + * + * @param {!safari.Options} options The Safari options to use. + * @return {!Builder} A self reference. + */ + setSafariOptions(options) { + this.safariOptions_ = options; + return this; + } + + /** + * Sets the control flow that created drivers should execute actions in. If + * the flow is never set, or is set to {@code null}, it will use the active + * flow at the time {@link #build()} is called. + * @param {promise.ControlFlow} flow The control flow to use, or + * {@code null} to + * @return {!Builder} A self reference. + */ + setControlFlow(flow) { + this.flow_ = flow; + return this; + } + + /** + * Creates a new WebDriver client based on this builder's current + * configuration. + * + * While this method will immediately return a new WebDriver instance, any + * commands issued against it will be deferred until the associated browser + * has been fully initialized. Users may call {@link #buildAsync()} to obtain + * a promise that will not be fulfilled until the browser has been created + * (the difference is purely in style). + * + * @return {!webdriver.WebDriver} A new WebDriver instance. + * @throws {Error} If the current configuration is invalid. + * @see #buildAsync() + */ + build() { + // Create a copy for any changes we may need to make based on the current + // environment. + var capabilities = new Capabilities(this.capabilities_); + + var browser; + if (!this.ignoreEnv_ && process.env.SELENIUM_BROWSER) { + browser = process.env.SELENIUM_BROWSER.split(/:/, 3); + capabilities.set(Capability.BROWSER_NAME, browser[0]); + capabilities.set(Capability.VERSION, browser[1] || null); + capabilities.set(Capability.PLATFORM, browser[2] || null); + } + + browser = capabilities.get(Capability.BROWSER_NAME); + + if (typeof browser !== 'string') { + throw TypeError( + `Target browser must be a string, but is <${typeof browser}>;` + + ' did you forget to call forBrowser()?'); + } + + if (browser === 'ie') { + browser = Browser.INTERNET_EXPLORER; + } + + // Apply browser specific overrides. + if (browser === Browser.CHROME && this.chromeOptions_) { + capabilities.merge(this.chromeOptions_.toCapabilities()); + + } else if (browser === Browser.FIREFOX && this.firefoxOptions_) { + capabilities.merge(this.firefoxOptions_.toCapabilities()); + + } else if (browser === Browser.INTERNET_EXPLORER && this.ieOptions_) { + capabilities.merge(this.ieOptions_.toCapabilities()); + + } else if (browser === Browser.OPERA && this.operaOptions_) { + capabilities.merge(this.operaOptions_.toCapabilities()); + + } else if (browser === Browser.SAFARI && this.safariOptions_) { + capabilities.merge(this.safariOptions_.toCapabilities()); + + } else if (browser === Browser.EDGE && this.edgeOptions_) { + capabilities.merge(this.edgeOptions_.toCapabilities()); + } + + // Check for a remote browser. + var url = this.url_; + if (!this.ignoreEnv_) { + if (process.env.SELENIUM_REMOTE_URL) { + url = process.env.SELENIUM_REMOTE_URL; + } else if (process.env.SELENIUM_SERVER_JAR) { + url = startSeleniumServer(process.env.SELENIUM_SERVER_JAR); + } + } + + if (url) { + var executor = executors.createExecutor(url, this.proxy_); + return WebDriver.createSession(executor, capabilities, this.flow_); + } + + // Check for a native browser. + switch (browser) { + case Browser.CHROME: + return new chrome.Driver(capabilities, null, this.flow_); + + case Browser.FIREFOX: + return new firefox.Driver(capabilities, this.flow_); + + case Browser.INTERNET_EXPLORER: + return new ie.Driver(capabilities, this.flow_); + + case Browser.EDGE: + return new edge.Driver(capabilities, null, this.flow_); + + case Browser.OPERA: + return new opera.Driver(capabilities, null, this.flow_); + + case Browser.PHANTOM_JS: + return new phantomjs.Driver(capabilities, this.flow_); + + case Browser.SAFARI: + return new safari.Driver(capabilities, this.flow_); + + default: + throw new Error('Do not know how to build driver: ' + browser + + '; did you forget to call usingServer(url)?'); + } + } + + /** + * Creates a new WebDriver client based on this builder's current + * configuration. This method returns a promise that will not be fulfilled + * until the new browser session has been fully initialized. + * + * __Note:__ this method is purely a convenience wrapper around + * {@link #build()}. + * + * @return {!promise.Promise} A promise that will be + * fulfilled with the newly created WebDriver instance once the browser + * has been fully initialized. + * @see #build() + */ + buildAsync() { + let driver = this.build(); + return driver.getSession().then(() => driver); + } +} + + +// PUBLIC API + + +exports.Builder = Builder; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/chrome.js b/platforms/android/assets/www/node_modules/selenium-webdriver/chrome.js new file mode 100644 index 0000000..2731d90 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/chrome.js @@ -0,0 +1,811 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for the Chrome + * web browser. Before using this module, you must download the latest + * [ChromeDriver release] and ensure it can be found on your system [PATH]. + * + * There are three primary classes exported by this module: + * + * 1. {@linkplain ServiceBuilder}: configures the + * {@link selenium-webdriver/remote.DriverService remote.DriverService} + * that manages the [ChromeDriver] child process. + * + * 2. {@linkplain Options}: defines configuration options for each new Chrome + * session, such as which {@linkplain Options#setProxy proxy} to use, + * what {@linkplain Options#addExtensions extensions} to install, or + * what {@linkplain Options#addArguments command-line switches} to use when + * starting the browser. + * + * 3. {@linkplain Driver}: the WebDriver client; each new instance will control + * a unique browser session with a clean user profile (unless otherwise + * configured through the {@link Options} class). + * + * __Customizing the ChromeDriver Server__ + * + * By default, every Chrome session will use a single driver service, which is + * started the first time a {@link Driver} instance is created and terminated + * when this process exits. The default service will inherit its environment + * from the current process and direct all output to /dev/null. You may obtain + * a handle to this default service using + * {@link #getDefaultService getDefaultService()} and change its configuration + * with {@link #setDefaultService setDefaultService()}. + * + * You may also create a {@link Driver} with its own driver service. This is + * useful if you need to capture the server's log output for a specific session: + * + * let chrome = require('selenium-webdriver/chrome'); + * + * let service = new chrome.ServiceBuilder() + * .loggingTo('/my/log/file.txt') + * .enableVerboseLogging() + * .build(); + * + * let options = new chrome.Options(); + * // configure browser options ... + * + * let driver = new chrome.Driver(options, service); + * + * Users should only instantiate the {@link Driver} class directly when they + * need a custom driver service configuration (as shown above). For normal + * operation, users should start Chrome using the + * {@link selenium-webdriver.Builder}. + * + * __Working with Android__ + * + * The [ChromeDriver][android] supports running tests on the Chrome browser as + * well as [WebView apps][webview] starting in Android 4.4 (KitKat). In order to + * work with Android, you must first start the adb + * + * adb start-server + * + * By default, adb will start on port 5037. You may change this port, but this + * will require configuring a [custom server](#custom-server) that will connect + * to adb on the {@linkplain ServiceBuilder#setAdbPort correct port}: + * + * let service = new chrome.ServiceBuilder() + * .setAdbPort(1234) + * build(); + * // etc. + * + * The ChromeDriver may be configured to launch Chrome on Android using + * {@link Options#androidChrome()}: + * + * let driver = new Builder() + * .forBrowser('chrome') + * .setChromeOptions(new chrome.Options().androidChrome()) + * .build(); + * + * Alternatively, you can configure the ChromeDriver to launch an app with a + * Chrome-WebView by setting the {@linkplain Options#androidActivity + * androidActivity} option: + * + * let driver = new Builder() + * .forBrowser('chrome') + * .setChromeOptions(new chrome.Options() + * .androidPackage('com.example') + * .androidActivity('com.example.Activity')) + * .build(); + * + * [Refer to the ChromeDriver site] for more information on using the + * [ChromeDriver with Android][android]. + * + * [ChromeDriver]: https://sites.google.com/a/chromium.org/chromedriver/ + * [ChromeDriver release]: http://chromedriver.storage.googleapis.com/index.html + * [PATH]: http://en.wikipedia.org/wiki/PATH_%28variable%29 + * [android]: https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android + * [webview]: https://developer.chrome.com/multidevice/webview/overview + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const executors = require('./executors'), + http = require('./http'), + io = require('./io'), + Capabilities = require('./lib/capabilities').Capabilities, + Capability = require('./lib/capabilities').Capability, + command = require('./lib/command'), + logging = require('./lib/logging'), + promise = require('./lib/promise'), + Symbols = require('./lib/symbols'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +/** + * Name of the ChromeDriver executable. + * @type {string} + * @const + */ +const CHROMEDRIVER_EXE = + process.platform === 'win32' ? 'chromedriver.exe' : 'chromedriver'; + + +/** + * Custom command names supported by ChromeDriver. + * @enum {string} + */ +const Command = { + LAUNCH_APP: 'launchApp' +}; + + +/** + * Creates a command executor with support for ChromeDriver's custom commands. + * @param {!promise.Promise} url The server's URL. + * @return {!command.Executor} The new command executor. + */ +function createExecutor(url) { + return new executors.DeferredExecutor(url.then(function(url) { + let client = new http.HttpClient(url); + let executor = new http.Executor(client); + executor.defineCommand( + Command.LAUNCH_APP, + 'POST', '/session/:sessionId/chromium/launch_app'); + return executor; + })); +} + + +/** + * Creates {@link selenium-webdriver/remote.DriverService} instances that manage + * a [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) + * server in a child process. + */ +class ServiceBuilder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the chromedriver on the current + * PATH. + * @throws {Error} If provided executable does not exist, or the chromedriver + * cannot be found on the PATH. + */ + constructor(opt_exe) { + let exe = opt_exe || io.findInPath(CHROMEDRIVER_EXE, true); + if (!exe) { + throw Error( + 'The ChromeDriver could not be found on the current PATH. Please ' + + 'download the latest version of the ChromeDriver from ' + + 'http://chromedriver.storage.googleapis.com/index.html and ensure ' + + 'it can be found on your PATH.'); + } + + if (!fs.existsSync(exe)) { + throw Error('File does not exist: ' + exe); + } + /** @private {string} */ + this.exe_ = exe; + + /** @private {!Array} */ + this.args_ = []; + + /** + * @private {(string|!Array)} + */ + this.stdio_ = 'ignore'; + + /** @private {?string} */ + this.path_ = null; + + /** @private {number} */ + this.port_ = 0; + + /** @private {Object} */ + this.env_ = null; + } + + /** + * Sets the port to start the ChromeDriver on. + * @param {number} port The port to use, or 0 for any free port. + * @return {!ServiceBuilder} A self reference. + * @throws {Error} If the port is invalid. + */ + usingPort(port) { + if (port < 0) { + throw Error('port must be >= 0: ' + port); + } + this.port_ = port; + return this; + } + + /** + * Sets which port adb is listening to. _The ChromeDriver will connect to adb + * if an {@linkplain Options#androidPackage Android session} is requested, but + * adb **must** be started beforehand._ + * + * @param {number} port Which port adb is running on. + * @return {!ServiceBuilder} A self reference. + */ + setAdbPort(port) { + this.args_.push('--adb-port=' + port); + return this; + } + + /** + * Sets the path of the log file the driver should log to. If a log file is + * not specified, the driver will log to stderr. + * @param {string} path Path of the log file to use. + * @return {!ServiceBuilder} A self reference. + */ + loggingTo(path) { + this.args_.push('--log-path=' + path); + return this; + } + + /** + * Enables verbose logging. + * @return {!ServiceBuilder} A self reference. + */ + enableVerboseLogging() { + this.args_.push('--verbose'); + return this; + } + + /** + * Sets the number of threads the driver should use to manage HTTP requests. + * By default, the driver will use 4 threads. + * @param {number} n The number of threads to use. + * @return {!ServiceBuilder} A self reference. + */ + setNumHttpThreads(n) { + this.args_.push('--http-threads=' + n); + return this; + } + + /** + * Sets the base path for WebDriver REST commands (e.g. "/wd/hub"). + * By default, the driver will accept commands relative to "/". + * @param {string} path The base path to use. + * @return {!ServiceBuilder} A self reference. + */ + setUrlBasePath(path) { + this.args_.push('--url-base=' + path); + this.path_ = path; + return this; + } + + /** + * Defines the stdio configuration for the driver service. See + * {@code child_process.spawn} for more information. + * @param {(string|!Array)} + * config The configuration to use. + * @return {!ServiceBuilder} A self reference. + */ + setStdio(config) { + this.stdio_ = config; + return this; + } + + /** + * Defines the environment to start the server under. This settings will be + * inherited by every browser session started by the server. + * @param {!Object} env The environment to use. + * @return {!ServiceBuilder} A self reference. + */ + withEnvironment(env) { + this.env_ = env; + return this; + } + + /** + * Creates a new DriverService using this instance's current configuration. + * @return {!remote.DriverService} A new driver service using this instance's + * current configuration. + * @throws {Error} If the driver exectuable was not specified and a default + * could not be found on the current PATH. + */ + build() { + let port = this.port_ || portprober.findFreePort(); + let args = this.args_.concat(); // Defensive copy. + + return new remote.DriverService(this.exe_, { + loopback: true, + path: this.path_, + port: port, + args: promise.when(port, function(port) { + return args.concat('--port=' + port); + }), + env: this.env_, + stdio: this.stdio_ + }); + } +} + + + +/** @type {remote.DriverService} */ +let defaultService = null; + + +/** + * Sets the default service to use for new ChromeDriver instances. + * @param {!remote.DriverService} service The service to use. + * @throws {Error} If the default service is currently running. + */ +function setDefaultService(service) { + if (defaultService && defaultService.isRunning()) { + throw Error( + 'The previously configured ChromeDriver service is still running. ' + + 'You must shut it down before you may adjust its configuration.'); + } + defaultService = service; +} + + +/** + * Returns the default ChromeDriver service. If such a service has not been + * configured, one will be constructed using the default configuration for + * a ChromeDriver executable found on the system PATH. + * @return {!remote.DriverService} The default ChromeDriver service. + */ +function getDefaultService() { + if (!defaultService) { + defaultService = new ServiceBuilder().build(); + } + return defaultService; +} + + +/** + * @type {string} + * @const + */ +let OPTIONS_CAPABILITY_KEY = 'chromeOptions'; + + +/** + * Class for managing ChromeDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object} */ + this.options_ = {}; + + /** @private {!Array<(string|!Buffer)>} */ + this.extensions_ = []; + + /** @private {?logging.Preferences} */ + this.logPrefs_ = null; + + /** @private {?./lib/capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Extracts the ChromeDriver specific options from the given capabilities + * object. + * @param {!Capabilities} caps The capabilities object. + * @return {!Options} The ChromeDriver options. + */ + static fromCapabilities(caps) { + let options = new Options(); + + let o = caps.get(OPTIONS_CAPABILITY_KEY); + if (o instanceof Options) { + options = o; + } else if (o) { + options. + addArguments(o.args || []). + addExtensions(o.extensions || []). + detachDriver(o.detach). + excludeSwitches(o.excludeSwitches || []). + setChromeBinaryPath(o.binary). + setChromeLogFile(o.logPath). + setChromeMinidumpPath(o.minidumpPath). + setLocalState(o.localState). + setMobileEmulation(o.mobileEmulation). + setUserPreferences(o.prefs). + setPerfLoggingPrefs(o.perfLoggingPrefs); + } + + if (caps.has(Capability.PROXY)) { + options.setProxy(caps.get(Capability.PROXY)); + } + + if (caps.has(Capability.LOGGING_PREFS)) { + options.setLoggingPrefs( + caps.get(Capability.LOGGING_PREFS)); + } + + return options; + } + + /** + * Add additional command line arguments to use when launching the Chrome + * browser. Each argument may be specified with or without the "--" prefix + * (e.g. "--foo" and "foo"). Arguments with an associated value should be + * delimited by an "=": "foo=bar". + * @param {...(string|!Array)} var_args The arguments to add. + * @return {!Options} A self reference. + */ + addArguments(var_args) { + let args = this.options_.args || []; + args = args.concat.apply(args, arguments); + if (args.length) { + this.options_.args = args; + } + return this; + } + + /** + * List of Chrome command line switches to exclude that ChromeDriver by default + * passes when starting Chrome. Do not prefix switches with "--". + * + * @param {...(string|!Array)} var_args The switches to exclude. + * @return {!Options} A self reference. + */ + excludeSwitches(var_args) { + let switches = this.options_.excludeSwitches || []; + switches = switches.concat.apply(switches, arguments); + if (switches.length) { + this.options_.excludeSwitches = switches; + } + return this; + } + + /** + * Add additional extensions to install when launching Chrome. Each extension + * should be specified as the path to the packed CRX file, or a Buffer for an + * extension. + * @param {...(string|!Buffer|!Array<(string|!Buffer)>)} var_args The + * extensions to add. + * @return {!Options} A self reference. + */ + addExtensions(var_args) { + this.extensions_ = + this.extensions_.concat.apply(this.extensions_, arguments); + return this; + } + + /** + * Sets the path to the Chrome binary to use. On Mac OS X, this path should + * reference the actual Chrome executable, not just the application binary + * (e.g. "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"). + * + * The binary path be absolute or relative to the chromedriver server + * executable, but it must exist on the machine that will launch Chrome. + * + * @param {string} path The path to the Chrome binary to use. + * @return {!Options} A self reference. + */ + setChromeBinaryPath(path) { + this.options_.binary = path; + return this; + } + + /** + * Sets whether to leave the started Chrome browser running if the controlling + * ChromeDriver service is killed before {@link webdriver.WebDriver#quit()} is + * called. + * @param {boolean} detach Whether to leave the browser running if the + * chromedriver service is killed before the session. + * @return {!Options} A self reference. + */ + detachDriver(detach) { + this.options_.detach = detach; + return this; + } + + /** + * Sets the user preferences for Chrome's user profile. See the "Preferences" + * file in Chrome's user data directory for examples. + * @param {!Object} prefs Dictionary of user preferences to use. + * @return {!Options} A self reference. + */ + setUserPreferences(prefs) { + this.options_.prefs = prefs; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {!logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPrefs(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Sets the performance logging preferences. Options include: + * + * - `enableNetwork`: Whether or not to collect events from Network domain. + * - `enablePage`: Whether or not to collect events from Page domain. + * - `enableTimeline`: Whether or not to collect events from Timeline domain. + * Note: when tracing is enabled, Timeline domain is implicitly disabled, + * unless `enableTimeline` is explicitly set to true. + * - `tracingCategories`: A comma-separated string of Chrome tracing + * categories for which trace events should be collected. An unspecified + * or empty string disables tracing. + * - `bufferUsageReportingInterval`: The requested number of milliseconds + * between DevTools trace buffer usage events. For example, if 1000, then + * once per second, DevTools will report how full the trace buffer is. If + * a report indicates the buffer usage is 100%, a warning will be issued. + * + * @param {{enableNetwork: boolean, + * enablePage: boolean, + * enableTimeline: boolean, + * tracingCategories: string, + * bufferUsageReportingInterval: number}} prefs The performance + * logging preferences. + * @return {!Options} A self reference. + */ + setPerfLoggingPrefs(prefs) { + this.options_.perfLoggingPrefs = prefs; + return this; + } + + /** + * Sets preferences for the "Local State" file in Chrome's user data + * directory. + * @param {!Object} state Dictionary of local state preferences. + * @return {!Options} A self reference. + */ + setLocalState(state) { + this.options_.localState = state; + return this; + } + + /** + * Sets the name of the activity hosting a Chrome-based Android WebView. This + * option must be set to connect to an [Android WebView]( + * https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android) + * + * @param {string} name The activity name. + * @return {!Options} A self reference. + */ + androidActivity(name) { + this.options_.androidActivity = name; + return this; + } + + /** + * Sets the device serial number to connect to via ADB. If not specified, the + * ChromeDriver will select an unused device at random. An error will be + * returned if all devices already have active sessions. + * + * @param {string} serial The device serial number to connect to. + * @return {!Options} A self reference. + */ + androidDeviceSerial(serial) { + this.options_.androidDeviceSerial = serial; + return this; + } + + /** + * Configures the ChromeDriver to launch Chrome on Android via adb. This + * function is shorthand for + * {@link #androidPackage options.androidPackage('com.android.chrome')}. + * @return {!Options} A self reference. + */ + androidChrome() { + return this.androidPackage('com.android.chrome'); + } + + /** + * Sets the package name of the Chrome or WebView app. + * + * @param {?string} pkg The package to connect to, or `null` to disable Android + * and switch back to using desktop Chrome. + * @return {!Options} A self reference. + */ + androidPackage(pkg) { + this.options_.androidPackage = pkg; + return this; + } + + /** + * Sets the process name of the Activity hosting the WebView (as given by + * `ps`). If not specified, the process name is assumed to be the same as + * {@link #androidPackage}. + * + * @param {string} processName The main activity name. + * @return {!Options} A self reference. + */ + androidProcess(processName) { + this.options_.androidProcess = processName; + return this; + } + + /** + * Sets whether to connect to an already-running instead of the specified + * {@linkplain #androidProcess app} instead of launching the app with a clean + * data directory. + * + * @param {boolean} useRunning Whether to connect to a running instance. + * @return {!Options} A self reference. + */ + androidUseRunningApp(useRunning) { + this.options_.androidUseRunningApp = useRunning; + return this; + } + + /** + * Sets the path to Chrome's log file. This path should exist on the machine + * that will launch Chrome. + * @param {string} path Path to the log file to use. + * @return {!Options} A self reference. + */ + setChromeLogFile(path) { + this.options_.logPath = path; + return this; + } + + /** + * Sets the directory to store Chrome minidumps in. This option is only + * supported when ChromeDriver is running on Linux. + * @param {string} path The directory path. + * @return {!Options} A self reference. + */ + setChromeMinidumpPath(path) { + this.options_.minidumpPath = path; + return this; + } + + /** + * Configures Chrome to emulate a mobile device. For more information, refer + * to the ChromeDriver project page on [mobile emulation][em]. Configuration + * options include: + * + * - `deviceName`: The name of a pre-configured [emulated device][devem] + * - `width`: screen width, in pixels + * - `height`: screen height, in pixels + * - `pixelRatio`: screen pixel ratio + * + * __Example 1: Using a Pre-configured Device__ + * + * let options = new chrome.Options().setMobileEmulation( + * {deviceName: 'Google Nexus 5'}); + * + * let driver = new chrome.Driver(options); + * + * __Example 2: Using Custom Screen Configuration__ + * + * let options = new chrome.Options().setMobileEmulation({ + * width: 360, + * height: 640, + * pixelRatio: 3.0 + * }); + * + * let driver = new chrome.Driver(options); + * + * + * [em]: https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation + * [devem]: https://developer.chrome.com/devtools/docs/device-mode + * + * @param {?({deviceName: string}| + * {width: number, height: number, pixelRatio: number})} config The + * mobile emulation configuration, or `null` to disable emulation. + * @return {!Options} A self reference. + */ + setMobileEmulation(config) { + this.options_.mobileEmulation = config; + return this; + } + + /** + * Sets the proxy settings for the new session. + * @param {./lib/capabilities.ProxyConfig} proxy The proxy configuration to + * use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts this options instance to a {@link Capabilities} object. + * @param {Capabilities=} opt_capabilities The capabilities to merge + * these options into, if any. + * @return {!Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + let caps = opt_capabilities || Capabilities.chrome(); + caps. + set(Capability.PROXY, this.proxy_). + set(Capability.LOGGING_PREFS, this.logPrefs_). + set(OPTIONS_CAPABILITY_KEY, this); + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation not intended for general use. + * @return {!Object} The JSON wire protocol representation of this instance. + */ + [Symbols.serialize]() { + let json = {}; + for (let key in this.options_) { + if (this.options_[key] != null) { + json[key] = this.options_[key]; + } + } + if (this.extensions_.length) { + json.extensions = this.extensions_.map(function(extension) { + if (Buffer.isBuffer(extension)) { + return extension.toString('base64'); + } + return promise.checkedNodeCall( + fs.readFile, extension, 'base64'); + }); + } + return json; + } +} + + +/** + * Creates a new WebDriver client for Chrome. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(Capabilities|Options)=} opt_config The configuration + * options. + * @param {remote.DriverService=} opt_service The session to use; will use + * the {@linkplain #getDefaultService default service} by default. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_service, opt_flow) { + let service = opt_service || getDefaultService(); + let executor = createExecutor(service.start()); + + let caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || Capabilities.chrome()); + + let driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, driver.controlFlow()); + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} + + /** + * Schedules a command to launch Chrome App with given ID. + * @param {string} id ID of the App to launch. + * @return {!promise.Promise} A promise that will be resolved + * when app is launched. + */ + launchApp(id) { + return this.schedule( + new command.Command(Command.LAUNCH_APP).setParameter('id', id), + 'Driver.launchApp()'); + } +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.ServiceBuilder = ServiceBuilder; +exports.getDefaultService = getDefaultService; +exports.setDefaultService = setDefaultService; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/edge.js b/platforms/android/assets/www/node_modules/selenium-webdriver/edge.js new file mode 100644 index 0000000..676637a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/edge.js @@ -0,0 +1,378 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for + * Microsoft's Edge web browser. Before using this module, + * you must download and install the latest + * [MicrosoftEdgeDriver](http://go.microsoft.com/fwlink/?LinkId=619687) server. + * Ensure that the MicrosoftEdgeDriver is on your + * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). + * + * There are three primary classes exported by this module: + * + * 1. {@linkplain ServiceBuilder}: configures the + * {@link ./remote.DriverService remote.DriverService} + * that manages the [MicrosoftEdgeDriver] child process. + * + * 2. {@linkplain Options}: defines configuration options for each new + * MicrosoftEdgeDriver session, such as which + * {@linkplain Options#setProxy proxy} to use when starting the browser. + * + * 3. {@linkplain Driver}: the WebDriver client; each new instance will control + * a unique browser session. + * + * __Customizing the MicrosoftEdgeDriver Server__ + * + * By default, every MicrosoftEdge session will use a single driver service, + * which is started the first time a {@link Driver} instance is created and + * terminated when this process exits. The default service will inherit its + * environment from the current process. + * You may obtain a handle to this default service using + * {@link #getDefaultService getDefaultService()} and change its configuration + * with {@link #setDefaultService setDefaultService()}. + * + * You may also create a {@link Driver} with its own driver service. This is + * useful if you need to capture the server's log output for a specific session: + * + * var edge = require('selenium-webdriver/edge'); + * + * var service = new edge.ServiceBuilder() + * .usingPort(55555) + * .build(); + * + * var options = new edge.Options(); + * // configure browser options ... + * + * var driver = new edge.Driver(options, service); + * + * Users should only instantiate the {@link Driver} class directly when they + * need a custom driver service configuration (as shown above). For normal + * operation, users should start MicrosoftEdge using the + * {@link ./builder.Builder selenium-webdriver.Builder}. + * + * [MicrosoftEdgeDriver]: https://msdn.microsoft.com/en-us/library/mt188085(v=vs.85).aspx + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const executors = require('./executors'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + promise = require('./lib/promise'), + Symbols = require('./lib/symbols'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + +const EDGEDRIVER_EXE = 'MicrosoftWebDriver.exe'; + + +/** + * Option keys. + * @enum {string} + */ +const CAPABILITY_KEY = { + PAGE_LOAD_STRATEGY: 'pageLoadStrategy' +}; + + +/** + * Class for managing MicrosoftEdgeDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object} */ + this.options_ = {}; + + /** @private {?capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Extracts the MicrosoftEdgeDriver specific options from the given + * capabilities object. + * @param {!capabilities.Capabilities} caps The capabilities object. + * @return {!Options} The MicrosoftEdgeDriver options. + */ + static fromCapabilities(caps) { + var options = new Options(); + var map = options.options_; + + Object.keys(CAPABILITY_KEY).forEach(function(key) { + key = CAPABILITY_KEY[key]; + if (caps.has(key)) { + map[key] = caps.get(key); + } + }); + + if (caps.has(capabilities.Capability.PROXY)) { + options.setProxy(caps.get(capabilities.Capability.PROXY)); + } + + return options; + } + + /** + * Sets the proxy settings for the new session. + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Sets the page load strategy for Edge. + * Supported values are "normal", "eager", and "none"; + * + * @param {string} pageLoadStrategy The page load strategy to use. + * @return {!Options} A self reference. + */ + setPageLoadStrategy(pageLoadStrategy) { + this.options_[CAPABILITY_KEY.PAGE_LOAD_STRATEGY] = + pageLoadStrategy.toLowerCase(); + return this; + } + + /** + * Converts this options instance to a {@link capabilities.Capabilities} + * object. + * @param {capabilities.Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!capabilities.Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || capabilities.Capabilities.edge(); + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + Object.keys(this.options_).forEach(function(key) { + caps.set(key, this.options_[key]); + }, this); + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation not intended for general use. + * @return {{pageLoadStrategy: (string|undefined)}} + * The JSON wire protocol representation of this instance. + */ + [Symbols.serialize]() { + var json = {}; + for (var key in this.options_) { + if (this.options_[key] != null) { + json[key] = this.options_[key]; + } + } + return json; + } +} + + +/** + * Creates {@link remote.DriverService} instances that manage a + * MicrosoftEdgeDriver server in a child process. + */ +class ServiceBuilder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the MicrosoftEdgeDriver on the current + * PATH. + * @throws {Error} If provided executable does not exist, or the + * MicrosoftEdgeDriver cannot be found on the PATH. + */ + constructor(opt_exe) { + let exe = opt_exe || io.findInPath(EDGEDRIVER_EXE, true); + if (!exe) { + throw Error( + 'The ' + EDGEDRIVER_EXE + ' could not be found on the current PATH. ' + + 'Please download the latest version of the MicrosoftEdgeDriver from ' + + 'https://www.microsoft.com/en-us/download/details.aspx?id=48212 and ' + + 'ensure it can be found on your PATH.'); + } else if (!fs.existsSync(exe)) { + throw Error('File does not exist: ' + exe); + } + + /** @private {string} */ + this.exe_ = /** @type {string} */(exe); + + /** @private {!Array.} */ + this.args_ = []; + + /** @private {number} */ + this.port_ = 0; + + /** + * @private {(string|!Array.)} + */ + this.stdio_ = 'ignore'; + + /** @private {Object.} */ + this.env_ = null; + } + + /** + * Defines the stdio configuration for the driver service. See + * {@code child_process.spawn} for more information. + * @param {(string|!Array.)} + * config The configuration to use. + * @return {!ServiceBuilder} A self reference. + */ + setStdio(config) { + this.stdio_ = config; + return this; + } + + /** + * Sets the port to start the MicrosoftEdgeDriver on. + * @param {number} port The port to use, or 0 for any free port. + * @return {!ServiceBuilder} A self reference. + * @throws {Error} If the port is invalid. + */ + usingPort(port) { + if (port < 0) { + throw Error('port must be >= 0: ' + port); + } + this.port_ = port; + return this; + } + + /** + * Defines the environment to start the server under. This settings will be + * inherited by every browser session started by the server. + * @param {!Object.} env The environment to use. + * @return {!ServiceBuilder} A self reference. + */ + withEnvironment(env) { + this.env_ = env; + return this; + } + + /** + * Creates a new DriverService using this instance's current configuration. + * @return {!remote.DriverService} A new driver service using this instance's + * current configuration. + * @throws {Error} If the driver exectuable was not specified and a default + * could not be found on the current PATH. + */ + build() { + var port = this.port_ || portprober.findFreePort(); + var args = this.args_.concat(); // Defensive copy. + + return new remote.DriverService(this.exe_, { + // Binding to the loopback address will fail if not running with + // administrator privileges. Since we cannot test for that in script + // (or can we?), force the DriverService to use "localhost". + hostname: 'localhost', + port: port, + args: promise.fulfilled(port).then(function(port) { + return args.concat('--port=' + port); + }), + env: this.env_, + stdio: this.stdio_ + }); + } +} + + +/** @type {remote.DriverService} */ +var defaultService = null; + + +/** + * Sets the default service to use for new MicrosoftEdgeDriver instances. + * @param {!remote.DriverService} service The service to use. + * @throws {Error} If the default service is currently running. + */ +function setDefaultService(service) { + if (defaultService && defaultService.isRunning()) { + throw Error( + 'The previously configured EdgeDriver service is still running. ' + + 'You must shut it down before you may adjust its configuration.'); + } + defaultService = service; +} + + +/** + * Returns the default MicrosoftEdgeDriver service. If such a service has + * not been configured, one will be constructed using the default configuration + * for an MicrosoftEdgeDriver executable found on the system PATH. + * @return {!remote.DriverService} The default MicrosoftEdgeDriver service. + */ +function getDefaultService() { + if (!defaultService) { + defaultService = new ServiceBuilder().build(); + } + return defaultService; +} + + +/** + * Creates a new WebDriver client for Microsoft's Edge. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(capabilities.Capabilities|Options)=} opt_config The configuration + * options. + * @param {remote.DriverService=} opt_service The session to use; will use + * the {@linkplain #getDefaultService default service} by default. + * @param {promise.ControlFlow=} opt_flow The control flow to use, or + * {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_service, opt_flow) { + var service = opt_service || getDefaultService(); + var executor = executors.createExecutor(service.start()); + + var caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || capabilities.Capabilities.edge()); + + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + super(driver.getSession(), executor, driver.controlFlow()); + + var boundQuit = this.quit.bind(this); + + /** @override */ + this.quit = function() { + return boundQuit().thenFinally(service.kill.bind(service)); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.ServiceBuilder = ServiceBuilder; +exports.getDefaultService = getDefaultService; +exports.setDefaultService = setDefaultService; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/error.js b/platforms/android/assets/www/node_modules/selenium-webdriver/error.js new file mode 100644 index 0000000..32af633 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/error.js @@ -0,0 +1,619 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * The base WebDriver error type. This error type is only used directly when a + * more appropriate category is not defined for the offending error. + */ +class WebDriverError extends Error { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + + /** @override */ + this.name = this.constructor.name; + } + + /** + * @return {number} the legacy numeric code for this class of error. + * @deprecated + */ + static get code() { + return ErrorCode.UNKNOWN_ERROR; + } + + /** + * @return {number} the legacy numeric code for this class of error. + * @deprecated + */ + get code() { + return this.constructor.code; + } +} + + +/** + * An attempt was made to select an element that cannot be selected. + */ +class ElementNotSelectableError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.ELEMENT_NOT_SELECTABLE; + } +} + + +/** + * An element command could not be completed because the element is not visible + * on the page. + */ +class ElementNotVisibleError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.ELEMENT_NOT_VISIBLE; + } +} + + +/** + * The arguments passed to a command are either invalid or malformed. + */ +class InvalidArgumentError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An illegal attempt was made to set a cookie under a different domain than + * the current page. + */ +class InvalidCookieDomainError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.INVALID_COOKIE_DOMAIN; + } +} + + +/** + * The coordinates provided to an interactions operation are invalid. + */ +class InvalidElementCoordinatesError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.INVALID_ELEMENT_COORDINATES; + } +} + + +/** + * An element command could not be completed because the element is in an + * invalid state, e.g. attempting to click an element that is no longer attached + * to the document. + */ +class InvalidElementStateError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.INVALID_ELEMENT_STATE; + } +} + + +/** + * Argument was an invalid selector. + */ +class InvalidSelectorError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.INVALID_SELECTOR_ERROR; + } +} + + +/** + * Occurs if the given session id is not in the list of active sessions, meaning + * the session either does not exist or that it’s not active. + */ +class InvalidSessionIdError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An error occurred while executing JavaScript supplied by the user. + */ +class JavascriptError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.JAVASCRIPT_ERROR; + } +} + + +/** + * The target for mouse interaction is not in the browser’s viewport and cannot + * be brought into that viewport. + */ +class MoveTargetOutOfBoundsError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS; + } +} + + +/** + * An attempt was made to operate on a modal dialog when one was not open. + */ +class NoSuchAlertError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.NO_SUCH_ALERT; + } +} + + +/** + * An element could not be located on the page using the given search + * parameters. + */ +class NoSuchElementError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.NO_SUCH_ELEMENT; + } +} + + +/** + * A request to switch to a frame could not be satisfied because the frame + * could not be found. + */ +class NoSuchFrameError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.NO_SUCH_FRAME; + } +} + + +/** + * A request to switch to a window could not be satisfied because the window + * could not be found. + */ +class NoSuchWindowError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.NO_SUCH_WINDOW; + } +} + + +/** + * A script did not complete before its timeout expired. + */ +class ScriptTimeoutError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.SCRIPT_TIMEOUT; + } +} + + +/** + * A new session could not be created. + */ +class SessionNotCreatedError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.SESSION_NOT_CREATED; + } +} + + + +/** + * An element command failed because the referenced element is no longer + * attached to the DOM. + */ +class StaleElementReferenceError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.STALE_ELEMENT_REFERENCE; + } +} + + +/** + * An operation did not complete before its timeout expired. + */ +class TimeoutError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.TIMEOUT; + } +} + + +/** + * A request to set a cookie’s value could not be satisfied. + */ +class UnableToSetCookieError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.UNABLE_TO_SET_COOKIE; + } +} + + +/** + * A screen capture operation was not possible. + */ +class UnableToCaptureScreenError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A modal dialog was open, blocking this operation. + */ +class UnexpectedAlertOpenError extends WebDriverError { + /** + * @param {string=} opt_error the error message, if any. + * @param {string=} opt_text the text of the open dialog, if available. + */ + constructor(opt_error, opt_text) { + super(opt_error); + + /** @private {(string|undefined)} */ + this.text_ = opt_text; + } + + /** @override */ + static get code() { + return ErrorCode.UNEXPECTED_ALERT_OPEN; + } + + /** + * @return {(string|undefined)} The text displayed with the unhandled alert, + * if available. + */ + getAlertText() { + return this.text_; + } +} + + +/** + * A command could not be executed because the remote end is not aware of it. + */ +class UnknownCommandError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.UNSUPPORTED_OPERATION; + } +} + + +/** + * The requested command matched a known URL but did not match an method for + * that URL. + */ +class UnknownMethodError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.UNSUPPORTED_OPERATION; + } +} + + +/** + * Reports an unsupport operation. + */ +class UnsupportedOperationError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } + + /** @override */ + static get code() { + return ErrorCode.UNSUPPORTED_OPERATION; + } +} + +// TODO(jleyba): Define UnknownError as an alias of WebDriverError? + + +/** + * Enum of legacy error codes. + * TODO: remove this when all code paths have been switched to the new error + * types. + * @deprecated + * @enum {number} + */ +const ErrorCode = { + SUCCESS: 0, + NO_SUCH_ELEMENT: 7, + NO_SUCH_FRAME: 8, + UNKNOWN_COMMAND: 9, + UNSUPPORTED_OPERATION: 9, + STALE_ELEMENT_REFERENCE: 10, + ELEMENT_NOT_VISIBLE: 11, + INVALID_ELEMENT_STATE: 12, + UNKNOWN_ERROR: 13, + ELEMENT_NOT_SELECTABLE: 15, + JAVASCRIPT_ERROR: 17, + XPATH_LOOKUP_ERROR: 19, + TIMEOUT: 21, + NO_SUCH_WINDOW: 23, + INVALID_COOKIE_DOMAIN: 24, + UNABLE_TO_SET_COOKIE: 25, + UNEXPECTED_ALERT_OPEN: 26, + NO_SUCH_ALERT: 27, + SCRIPT_TIMEOUT: 28, + INVALID_ELEMENT_COORDINATES: 29, + IME_NOT_AVAILABLE: 30, + IME_ENGINE_ACTIVATION_FAILED: 31, + INVALID_SELECTOR_ERROR: 32, + SESSION_NOT_CREATED: 33, + MOVE_TARGET_OUT_OF_BOUNDS: 34, + SQL_DATABASE_ERROR: 35, + INVALID_XPATH_SELECTOR: 51, + INVALID_XPATH_SELECTOR_RETURN_TYPE: 52, + METHOD_NOT_ALLOWED: 405 +}; + + +const LEGACY_ERROR_CODE_TO_TYPE = new Map([ + [ErrorCode.NO_SUCH_ELEMENT, NoSuchElementError], + [ErrorCode.NO_SUCH_FRAME, NoSuchFrameError], + [ErrorCode.UNSUPPORTED_OPERATION, UnsupportedOperationError], + [ErrorCode.STALE_ELEMENT_REFERENCE, StaleElementReferenceError], + [ErrorCode.ELEMENT_NOT_VISIBLE, ElementNotVisibleError], + [ErrorCode.INVALID_ELEMENT_STATE, InvalidElementStateError], + [ErrorCode.UNKNOWN_ERROR, WebDriverError], + [ErrorCode.ELEMENT_NOT_SELECTABLE, ElementNotSelectableError], + [ErrorCode.JAVASCRIPT_ERROR, JavascriptError], + [ErrorCode.XPATH_LOOKUP_ERROR, InvalidSelectorError], + [ErrorCode.TIMEOUT, TimeoutError], + [ErrorCode.NO_SUCH_WINDOW, NoSuchWindowError], + [ErrorCode.INVALID_COOKIE_DOMAIN, InvalidCookieDomainError], + [ErrorCode.UNABLE_TO_SET_COOKIE, UnableToSetCookieError], + [ErrorCode.UNEXPECTED_ALERT_OPEN, UnexpectedAlertOpenError], + [ErrorCode.NO_SUCH_ALERT, NoSuchAlertError], + [ErrorCode.SCRIPT_TIMEOUT, ScriptTimeoutError], + [ErrorCode.INVALID_ELEMENT_COORDINATES, InvalidElementCoordinatesError], + [ErrorCode.INVALID_SELECTOR_ERROR, InvalidSelectorError], + [ErrorCode.SESSION_NOT_CREATED, SessionNotCreatedError], + [ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsError], + [ErrorCode.INVALID_XPATH_SELECTOR, InvalidSelectorError], + [ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPE, InvalidSelectorError], + [ErrorCode.METHOD_NOT_ALLOWED, UnsupportedOperationError]]); + + +const ERROR_CODE_TO_TYPE = new Map([ + ['unknown error', WebDriverError], + ['element not selectable', ElementNotSelectableError], + ['element not visible', ElementNotVisibleError], + ['invalid argument', InvalidArgumentError], + ['invalid cookie domain', InvalidCookieDomainError], + ['invalid element coordinates', InvalidElementCoordinatesError], + ['invalid element state', InvalidElementStateError], + ['invalid selector', InvalidSelectorError], + ['invalid session id', InvalidSessionIdError], + ['javascript error', JavascriptError], + ['move target out of bounds', MoveTargetOutOfBoundsError], + ['no such alert', NoSuchAlertError], + ['no such element', NoSuchElementError], + ['no such frame', NoSuchFrameError], + ['no such window', NoSuchWindowError], + ['script timeout', ScriptTimeoutError], + ['session not created', SessionNotCreatedError], + ['stale element reference', StaleElementReferenceError], + ['timeout', TimeoutError], + ['unable to set cookie', UnableToSetCookieError], + ['unable to capture screen', UnableToCaptureScreenError], + ['unexpected alert open', UnexpectedAlertOpenError], + ['unknown command', UnknownCommandError], + ['unknown method', UnknownMethodError], + ['unsupported operation', UnsupportedOperationError]]); + + +/** + * Checks a response object from a server that adheres to the W3C WebDriver + * protocol. + * @param {*} data The response data to check. + * @return {*} The response data if it was not an encoded error. + * @throws {WebDriverError} the decoded error, if present in the data object. + * @see https://w3c.github.io/webdriver/webdriver-spec.html#protocol + */ +function checkResponse(data) { + if (data && typeof data.error === 'string') { + let ctor = ERROR_CODE_TO_TYPE.get(data.error) || WebDriverError; + throw new ctor(data.message); + } + return data; +} + + +/** + * Checks a legacy response from the Selenium 2.0 wire protocol for an error. + * @param {*} responseObj the response object to check. + * @return {*} responseObj the original response if it does not define an error. + * @throws {WebDriverError} if the response object defines an error. + */ +function checkLegacyResponse(responseObj) { + // Handle the legacy Selenium error response format. + if (responseObj + && typeof responseObj === 'object' + && typeof responseObj['status'] === 'number' + && responseObj['status'] !== 0) { + let status = responseObj['status']; + let ctor = LEGACY_ERROR_CODE_TO_TYPE.get(status) || WebDriverError; + + let value = responseObj['value']; + + if (!value || typeof value !== 'object') { + throw new ctor(value + ''); + } else { + throw new ctor(value['message'] + ''); + } + } + return responseObj; +} + + +// PUBLIC API + + +exports.ErrorCode = ErrorCode; + +exports.WebDriverError = WebDriverError; +exports.ElementNotSelectableError = ElementNotSelectableError; +exports.ElementNotVisibleError = ElementNotVisibleError; +exports.InvalidArgumentError = InvalidArgumentError; +exports.InvalidCookieDomainError = InvalidCookieDomainError; +exports.InvalidElementCoordinatesError = InvalidElementCoordinatesError; +exports.InvalidElementStateError = InvalidElementStateError; +exports.InvalidSelectorError = InvalidSelectorError; +exports.InvalidSessionIdError = InvalidSessionIdError; +exports.JavascriptError = JavascriptError; +exports.MoveTargetOutOfBoundsError = MoveTargetOutOfBoundsError; +exports.NoSuchAlertError = NoSuchAlertError; +exports.NoSuchElementError = NoSuchElementError; +exports.NoSuchFrameError = NoSuchFrameError; +exports.NoSuchWindowError = NoSuchWindowError; +exports.ScriptTimeoutError = ScriptTimeoutError; +exports.SessionNotCreatedError = SessionNotCreatedError; +exports.StaleElementReferenceError = StaleElementReferenceError; +exports.TimeoutError = TimeoutError; +exports.UnableToSetCookieError = UnableToSetCookieError; +exports.UnableToCaptureScreenError = UnableToCaptureScreenError; +exports.UnexpectedAlertOpenError = UnexpectedAlertOpenError; +exports.UnknownCommandError = UnknownCommandError; +exports.UnknownMethodError = UnknownMethodError; +exports.UnsupportedOperationError = UnsupportedOperationError; + +exports.checkResponse = checkResponse; +exports.checkLegacyResponse = checkLegacyResponse; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/example/chrome_android.js b/platforms/android/assets/www/node_modules/selenium-webdriver/example/chrome_android.js new file mode 100644 index 0000000..990a4c4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/example/chrome_android.js @@ -0,0 +1,38 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview A basic example of working with Chrome on Android. Before + * running this example, you must start adb and connect a device (or start an + * AVD). + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + chrome = require('../chrome'); + +var driver = new webdriver.Builder() + .forBrowser('chrome') + .setChromeOptions(new chrome.Options().androidChrome()) + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js b/platforms/android/assets/www/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js new file mode 100644 index 0000000..d308112 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js @@ -0,0 +1,39 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview This is an example of emulating a mobile device using the + * ChromeDriver. + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + chrome = require('../chrome'); + + +var driver = new webdriver.Builder() + .forBrowser('chrome') + .setChromeOptions(new chrome.Options() + .setMobileEmulation({deviceName: 'Google Nexus 5'})) + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search.js b/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search.js new file mode 100644 index 0000000..c624fa2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search.js @@ -0,0 +1,50 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example WebDriver script. This requires the chromedriver + * to be present on the system PATH. + * + * Usage: + * // Default behavior + * node selenium-webdriver/example/google_search.js + * + * // Target Chrome locally; the chromedriver must be on your PATH + * SELENIUM_BROWSER=chrome node selenium-webdriver/example/google_search.js + * + * // Use a local copy of the standalone Selenium server + * SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar \ + * node selenium-webdriver/example/google_search.js + * + * // Target a remove Selenium server + * SELENIUM_REMOTE_URL=http://www.example.com:4444/wd/hub \ + * node selenium-webdriver/example/google_search.js + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search_generator.js b/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search_generator.js new file mode 100644 index 0000000..983c8d8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search_generator.js @@ -0,0 +1,45 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example WebDriver script using generator functions. + * + * Usage: node selenium-webdriver/example/google_search_generator.js + */ + +var webdriver = require('..'), + By = webdriver.By; + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); +driver.call(function* () { + var query = yield driver.findElement(By.name('q')); + query.sendKeys('webdriver'); + + var submit = yield driver.findElement(By.name('btnG')); + submit.click(); +}); + +driver.wait(function* () { + var title = yield driver.getTitle(); + return 'webdriver - Google Search' === title; +}, 1000); + +driver.quit(); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search_test.js new file mode 100644 index 0000000..823e2c5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/example/google_search_test.js @@ -0,0 +1,47 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example test that may be run using Mocha. + * Usage: mocha -t 10000 selenium-webdriver/example/google_search_test.js + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + test = require('../testing'); + +test.describe('Google Search', function() { + var driver; + + test.before(function() { + driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + }); + + test.it('should append query to title', function() { + driver.get('http://www.google.com'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + }); + + test.after(function() { + driver.quit(); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/example/logging.js b/platforms/android/assets/www/node_modules/selenium-webdriver/example/logging.js new file mode 100644 index 0000000..ae1d4cc --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/example/logging.js @@ -0,0 +1,43 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Demonstrates how to use WebDriver's logging sysem. + */ + +'use strict'; + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +webdriver.logging.installConsoleHandler(); +webdriver.logging.getLogger('webdriver.http') + .setLevel(webdriver.logging.Level.ALL); + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); + +var searchBox = driver.wait(until.elementLocated(By.name('q')), 3000); +searchBox.sendKeys('webdriver'); + +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/example/parallel_flows.js b/platforms/android/assets/www/node_modules/selenium-webdriver/example/parallel_flows.js new file mode 100644 index 0000000..f416922 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/example/parallel_flows.js @@ -0,0 +1,51 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example of starting multiple WebDriver clients that run + * in parallel in separate control flows. + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +for (var i = 0; i < 3; i++) { + (function(n) { + var flow = new webdriver.promise.ControlFlow() + .on('uncaughtException', function(e) { + console.log('uncaughtException in flow %d: %s', n, e); + }); + + var driver = new webdriver.Builder(). + forBrowser('firefox'). + setControlFlow(flow). // Comment out this line to see the difference. + build(); + + // Position and resize window so it's easy to see them running together. + driver.manage().window().setSize(600, 400); + driver.manage().window().setPosition(300 * i, 400 * i); + + driver.get('http://www.google.com'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + + driver.quit(); + })(i); +} + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/executors.js b/platforms/android/assets/www/node_modules/selenium-webdriver/executors.js new file mode 100644 index 0000000..17f222a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/executors.js @@ -0,0 +1,50 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Various utilities for working with {@link ./command.Executor} + * implementations. + */ + + 'use strict'; + +const HttpClient = require('./http').HttpClient, + HttpExecutor = require('./http').Executor, + DeferredExecutor = require('./lib/command').DeferredExecutor, + promise = require('./lib/promise'); + + +// PUBLIC API + + +/** @deprecated Use {@link ./lib/command.DeferredExecutor} instead. */ +exports.DeferredExecutor = DeferredExecutor; + +/** + * Creates a command executor that uses WebDriver's JSON wire protocol. + * @param {(string|!promise.Promise)} url The server's URL, + * or a promise that will resolve to that URL. + * @param {?string=} opt_proxy (optional) The URL of the HTTP proxy for the + * client to use. + * @returns {!./lib/command.Executor} The new command executor. + */ +exports.createExecutor = function(url, opt_proxy) { + return new DeferredExecutor(promise.when(url, function(url) { + var client = new HttpClient(url, null, opt_proxy); + return new HttpExecutor(client); + })); +}; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/binary.js b/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/binary.js new file mode 100644 index 0000000..48a4a0b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/binary.js @@ -0,0 +1,221 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Manages Firefox binaries. This module is considered internal; + * users should use {@link ./firefox selenium-webdriver/firefox}. + */ + +'use strict'; + +const child = require('child_process'), + fs = require('fs'), + path = require('path'), + util = require('util'); + +const isDevMode = require('../lib/devmode'), + promise = require('../lib/promise'), + Symbols = require('../lib/symbols'), + io = require('../io'), + exec = require('../io/exec'); + + + +/** @const */ +const NO_FOCUS_LIB_X86 = isDevMode ? + path.join(__dirname, '../../../../cpp/prebuilt/i386/libnoblur.so') : + path.join(__dirname, '../lib/firefox/i386/libnoblur.so') ; + +/** @const */ +const NO_FOCUS_LIB_AMD64 = isDevMode ? + path.join(__dirname, '../../../../cpp/prebuilt/amd64/libnoblur64.so') : + path.join(__dirname, '../lib/firefox/amd64/libnoblur64.so') ; + +const X_IGNORE_NO_FOCUS_LIB = 'x_ignore_nofocus.so'; + +var foundBinary = null; + + +/** + * Checks the default Windows Firefox locations in Program Files. + * @return {!Promise} A promise for the located executable. + * The promise will resolve to {@code null} if Firefox was not found. + */ +function defaultWindowsLocation() { + var files = [ + process.env['PROGRAMFILES'] || 'C:\\Program Files', + process.env['PROGRAMFILES(X86)'] || 'C:\\Program Files (x86)' + ].map(function(prefix) { + return path.join(prefix, 'Mozilla Firefox\\firefox.exe'); + }); + return io.exists(files[0]).then(function(exists) { + return exists ? files[0] : io.exists(files[1]).then(function(exists) { + return exists ? files[1] : null; + }); + }); +} + + +/** + * Locates the Firefox binary for the current system. + * @return {!promise.Promise.} A promise for the located binary. The + * promise will be rejected if Firefox cannot be located. + */ +function findFirefox() { + if (foundBinary) { + return foundBinary; + } + + if (process.platform === 'darwin') { + var osxExe = '/Applications/Firefox.app/Contents/MacOS/firefox-bin'; + foundBinary = io.exists(osxExe).then(function(exists) { + return exists ? osxExe : null; + }); + } else if (process.platform === 'win32') { + foundBinary = defaultWindowsLocation(); + } else { + foundBinary = promise.fulfilled(io.findInPath('firefox')); + } + + return foundBinary = foundBinary.then(function(found) { + if (found) { + return found; + } + throw Error('Could not locate Firefox on the current system'); + }); +} + + +/** + * Copies the no focus libs into the given profile directory. + * @param {string} profileDir Path to the profile directory to install into. + * @return {!promise.Promise.} The LD_LIBRARY_PATH prefix string to use + * for the installed libs. + */ +function installNoFocusLibs(profileDir) { + var x86 = path.join(profileDir, 'x86'); + var amd64 = path.join(profileDir, 'amd64'); + + return mkdir(x86) + .then(copyLib.bind(null, NO_FOCUS_LIB_X86, x86)) + .then(mkdir.bind(null, amd64)) + .then(copyLib.bind(null, NO_FOCUS_LIB_AMD64, amd64)) + .then(function() { + return x86 + ':' + amd64; + }); + + function mkdir(dir) { + return io.exists(dir).then(function(exists) { + if (!exists) { + return promise.checkedNodeCall(fs.mkdir, dir); + } + }); + } + + function copyLib(src, dir) { + return io.copy(src, path.join(dir, X_IGNORE_NO_FOCUS_LIB)); + } +} + + +/** + * Provides a mechanism to configure and launch Firefox in a subprocess for + * use with WebDriver. + * + * @final + */ +class Binary { + /** + * @param {string=} opt_exe Path to the Firefox binary to use. If not + * specified, will attempt to locate Firefox on the current system. + */ + constructor(opt_exe) { + /** @private {(string|undefined)} */ + this.exe_ = opt_exe; + + /** @private {!Array.} */ + this.args_ = []; + + /** @private {!Object} */ + this.env_ = {}; + Object.assign(this.env_, process.env, { + MOZ_CRASHREPORTER_DISABLE: '1', + MOZ_NO_REMOTE: '1', + NO_EM_RESTART: '1' + }); + } + + /** + * Add arguments to the command line used to start Firefox. + * @param {...(string|!Array.)} var_args Either the arguments to add + * as varargs, or the arguments as an array. + */ + addArguments(var_args) { + for (var i = 0; i < arguments.length; i++) { + if (Array.isArray(arguments[i])) { + this.args_ = this.args_.concat(arguments[i]); + } else { + this.args_.push(arguments[i]); + } + } + } + + /** + * Launches Firefox and returns a promise that will be fulfilled when the + * process terminates. + * @param {string} profile Path to the profile directory to use. + * @return {!promise.Promise} A promise for the handle to the + * started subprocess. + */ + launch(profile) { + let env = {}; + Object.assign(env, this.env_, {XRE_PROFILE_PATH: profile}); + + let args = ['-foreground'].concat(this.args_); + + return promise.when(this.exe_ || findFirefox(), function(firefox) { + if (process.platform === 'win32' || process.platform === 'darwin') { + return exec(firefox, {args: args, env: env}); + } + return installNoFocusLibs(profile).then(function(ldLibraryPath) { + env['LD_LIBRARY_PATH'] = ldLibraryPath + ':' + env['LD_LIBRARY_PATH']; + env['LD_PRELOAD'] = X_IGNORE_NO_FOCUS_LIB; + return exec(firefox, {args: args, env: env}); + }); + }); + } + + /** + * Returns a promise for the wire representation of this binary. Note: the + * FirefoxDriver only supports passing the path to the binary executable over + * the wire; all command line arguments and environment variables will be + * discarded. + * + * @return {!promise.Promise} A promise for this binary's wire + * representation. + */ + [Symbols.serialize]() { + return promise.fulfilled(this.exe_ || findFirefox()); + } +} + + +// PUBLIC API + + +exports.Binary = Binary; + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/extension.js b/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/extension.js new file mode 100644 index 0000000..990481c --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/extension.js @@ -0,0 +1,177 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** @fileoverview Utilities for working with Firefox extensions. */ + +'use strict'; + +const AdmZip = require('adm-zip'), + fs = require('fs'), + path = require('path'), + xml = require('xml2js'); + +const promise = require('../lib/promise'), + checkedCall = promise.checkedNodeCall, + io = require('../io'); + + +/** + * Thrown when there an add-on is malformed. + */ +class AddonFormatError extends Error { + /** @param {string} msg The error message. */ + constructor(msg) { + super(msg); + /** @override */ + this.name = this.constructor.name; + } +} + + + +/** + * Installs an extension to the given directory. + * @param {string} extension Path to the extension to install, as either a xpi + * file or a directory. + * @param {string} dir Path to the directory to install the extension in. + * @return {!promise.Promise.} A promise for the add-on ID once + * installed. + */ +function install(extension, dir) { + return getDetails(extension).then(function(details) { + function returnId() { return details.id; } + + var dst = path.join(dir, details.id); + if (extension.slice(-4) === '.xpi') { + if (!details.unpack) { + return io.copy(extension, dst + '.xpi').then(returnId); + } else { + return checkedCall(fs.readFile, extension).then(function(buff) { + // TODO: find an async library for inflating a zip archive. + new AdmZip(buff).extractAllTo(dst, true); + }).then(returnId); + } + } else { + return io.copyDir(extension, dst).then(returnId); + } + }); +} + + +/** + * Describes a Firefox add-on. + * @typedef {{id: string, name: string, version: string, unpack: boolean}} + */ +var AddonDetails; + + +/** + * Extracts the details needed to install an add-on. + * @param {string} addonPath Path to the extension directory. + * @return {!promise.Promise.} A promise for the add-on details. + */ +function getDetails(addonPath) { + return readManifest(addonPath).then(function(doc) { + var em = getNamespaceId(doc, 'http://www.mozilla.org/2004/em-rdf#'); + var rdf = getNamespaceId( + doc, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); + + var description = doc[rdf + 'RDF'][rdf + 'Description'][0]; + var details = { + id: getNodeText(description, em + 'id'), + name: getNodeText(description, em + 'name'), + version: getNodeText(description, em + 'version'), + unpack: getNodeText(description, em + 'unpack') || false + }; + + if (typeof details.unpack === 'string') { + details.unpack = details.unpack.toLowerCase() === 'true'; + } + + if (!details.id) { + throw new AddonFormatError('Could not find add-on ID for ' + addonPath); + } + + return details; + }); + + function getNodeText(node, name) { + return node[name] && node[name][0] || ''; + } + + function getNamespaceId(doc, url) { + var keys = Object.keys(doc); + if (keys.length !== 1) { + throw new AddonFormatError('Malformed manifest for add-on ' + addonPath); + } + + var namespaces = doc[keys[0]].$; + var id = ''; + Object.keys(namespaces).some(function(ns) { + if (namespaces[ns] !== url) { + return false; + } + + if (ns.indexOf(':') != -1) { + id = ns.split(':')[1] + ':'; + } + return true; + }); + return id; + } +} + + +/** + * Reads the manifest for a Firefox add-on. + * @param {string} addonPath Path to a Firefox add-on as a xpi or an extension. + * @return {!promise.Promise} A promise for the parsed manifest. + */ +function readManifest(addonPath) { + var manifest; + + if (addonPath.slice(-4) === '.xpi') { + manifest = checkedCall(fs.readFile, addonPath).then(function(buff) { + var zip = new AdmZip(buff); + if (!zip.getEntry('install.rdf')) { + throw new AddonFormatError( + 'Could not find install.rdf in ' + addonPath); + } + var done = promise.defer(); + zip.readAsTextAsync('install.rdf', done.fulfill); + return done.promise; + }); + } else { + manifest = checkedCall(fs.stat, addonPath).then(function(stats) { + if (!stats.isDirectory()) { + throw Error( + 'Add-on path is niether a xpi nor a directory: ' + addonPath); + } + return checkedCall(fs.readFile, path.join(addonPath, 'install.rdf')); + }); + } + + return manifest.then(function(content) { + return checkedCall(xml.parseString, content); + }); +} + + +// PUBLIC API + + +exports.install = install; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/index.js b/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/index.js new file mode 100644 index 0000000..8d726ee --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/index.js @@ -0,0 +1,320 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines the {@linkplain Driver WebDriver} client for Firefox. + * Each FirefoxDriver instance will be created with an anonymous profile, + * ensuring browser historys do not share session data (cookies, history, cache, + * offline storage, etc.) + * + * __Customizing the Firefox Profile__ + * + * The {@link Profile} class may be used to configure the browser profile used + * with WebDriver, with functions to install additional + * {@linkplain Profile#addExtension extensions}, configure browser + * {@linkplain Profile#setPreference preferences}, and more. For example, you + * may wish to include Firebug: + * + * var firefox = require('selenium-webdriver/firefox'); + * + * var profile = new firefox.Profile(); + * profile.addExtension('/path/to/firebug.xpi'); + * profile.setPreference('extensions.firebug.showChromeErrors', true); + * + * var options = new firefox.Options().setProfile(profile); + * var driver = new firefox.Driver(options); + * + * The {@link Profile} class may also be used to configure WebDriver based on a + * pre-existing browser profile: + * + * var profile = new firefox.Profile( + * '/usr/local/home/bob/.mozilla/firefox/3fgog75h.testing'); + * var options = new firefox.Options().setProfile(profile); + * var driver = new firefox.Driver(options); + * + * The FirefoxDriver will _never_ modify a pre-existing profile; instead it will + * create a copy for it to modify. By extension, there are certain browser + * preferences that are required for WebDriver to function properly and they + * will always be overwritten. + * + * __Using a Custom Firefox Binary__ + * + * On Windows and OSX, the FirefoxDriver will search for Firefox in its + * default installation location: + * + * * Windows: C:\Program Files and C:\Program Files (x86). + * * Mac OS X: /Applications/Firefox.app + * + * For Linux, Firefox will be located on the PATH: `$(where firefox)`. + * + * You can configure WebDriver to start use a custom Firefox installation with + * the {@link Binary} class: + * + * var firefox = require('selenium-webdriver/firefox'); + * var binary = new firefox.Binary('/my/firefox/install/dir/firefox-bin'); + * var options = new firefox.Options().setBinary(binary); + * var driver = new firefox.Driver(options); + * + * __Remote Testing__ + * + * You may customize the Firefox binary and profile when running against a + * remote Selenium server. Your custom profile will be packaged as a zip and + * transfered to the remote host for use. The profile will be transferred + * _once for each new session_. The performance impact should be minimal if + * you've only configured a few extra browser preferences. If you have a large + * profile with several extensions, you should consider installing it on the + * remote host and defining its path via the {@link Options} class. Custom + * binaries are never copied to remote machines and must be referenced by + * installation path. + * + * var options = new firefox.Options() + * .setProfile('/profile/path/on/remote/host') + * .setBinary('/install/dir/on/remote/host/firefox-bin'); + * + * var driver = new (require('selenium-webdriver')).Builder() + * .forBrowser('firefox') + * .usingServer('http://127.0.0.1:4444/wd/hub') + * .setFirefoxOptions(options) + * .build(); + */ + +'use strict'; + +const url = require('url'); + +const Binary = require('./binary').Binary, + Profile = require('./profile').Profile, + decodeProfile = require('./profile').decode, + executors = require('../executors'), + httpUtil = require('../http/util'), + io = require('../io'), + capabilities = require('../lib/capabilities'), + logging = require('../lib/logging'), + promise = require('../lib/promise'), + webdriver = require('../lib/webdriver'), + net = require('../net'), + portprober = require('../net/portprober'); + + +/** + * Configuration options for the FirefoxDriver. + */ +class Options { + constructor() { + /** @private {Profile} */ + this.profile_ = null; + + /** @private {Binary} */ + this.binary_ = null; + + /** @private {logging.Preferences} */ + this.logPrefs_ = null; + + /** @private {?capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Sets the profile to use. The profile may be specified as a + * {@link Profile} object or as the path to an existing Firefox profile to use + * as a template. + * + * @param {(string|!Profile)} profile The profile to use. + * @return {!Options} A self reference. + */ + setProfile(profile) { + if (typeof profile === 'string') { + profile = new Profile(profile); + } + this.profile_ = profile; + return this; + } + + /** + * Sets the binary to use. The binary may be specified as the path to a Firefox + * executable, or as a {@link Binary} object. + * + * @param {(string|!Binary)} binary The binary to use. + * @return {!Options} A self reference. + */ + setBinary(binary) { + if (typeof binary === 'string') { + binary = new Binary(binary); + } + this.binary_ = binary; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPreferences(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Sets the proxy to use. + * + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts these options to a {@link capabilities.Capabilities} instance. + * + * @return {!capabilities.Capabilities} A new capabilities object. + */ + toCapabilities() { + var caps = capabilities.Capabilities.firefox(); + if (this.logPrefs_) { + caps.set(capabilities.Capability.LOGGING_PREFS, this.logPrefs_); + } + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + if (this.binary_) { + caps.set('firefox_binary', this.binary_); + } + if (this.profile_) { + caps.set('firefox_profile', this.profile_); + } + return caps; + } +} + + +/** + * A WebDriver client for Firefox. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(Options|capabilities.Capabilities|Object)=} opt_config The + * configuration options for this driver, specified as either an + * {@link Options} or {@link capabilities.Capabilities}, or as a raw hash + * object. + * @param {promise.ControlFlow=} opt_flow The flow to + * schedule commands through. Defaults to the active flow object. + */ + constructor(opt_config, opt_flow) { + let caps; + if (opt_config instanceof Options) { + caps = opt_config.toCapabilities(); + } else { + caps = new capabilities.Capabilities(opt_config); + } + + let binary = caps.get('firefox_binary') || new Binary(); + if (typeof binary === 'string') { + binary = new Binary(binary); + } + + let profile = caps.get('firefox_profile') || new Profile(); + + caps.set('firefox_binary', null); + caps.set('firefox_profile', null); + + let self; // Cannot assign to 'this' until after we call super. + let freePort = portprober.findFreePort(); + let command = freePort.then(function(port) { + if (typeof profile === 'string') { + return decodeProfile(profile).then(function(dir) { + var profile = new Profile(dir); + profile.setPreference('webdriver_firefox_port', port); + return profile.writeToDisk(); + }); + } else { + profile.setPreference('webdriver_firefox_port', port); + return profile.writeToDisk(); + } + }).then(function(profileDir) { + self.profilePath_ = profileDir; + return binary.launch(profileDir); + }); + + let serverUrl = command + .then(function() { return freePort; }) + .then(function(/** number */port) { + var serverUrl = url.format({ + protocol: 'http', + hostname: net.getLoopbackAddress(), + port: port + '', + pathname: '/hub' + }); + + return httpUtil.waitForServer(serverUrl, 45 * 1000).then(function() { + return serverUrl; + }); + }); + + var executor = executors.createExecutor(serverUrl); + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, opt_flow); + self = this; + + /** @private {?string} */ + this.profilePath_ = null; + + /** @private */ + this.command_ = command; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() { + } + + /** @override */ + quit() { + // TODO: use super.quit when closure compiler knows how to transpile it. + // let superQuit = super.quit; + return this.call(function() { + let self = this; + return webdriver.WebDriver.prototype.quit.call(this) + .thenFinally(function() { + return self.command_.then(function(command) { + command.kill(); + return command.result(); + }); + }) + .thenFinally(function() { + if (self.profilePath_) { + return io.rmDir(self.profilePath_); + } + }); + }, this); + } +} + + +// PUBLIC API + + +exports.Binary = Binary; +exports.Driver = Driver; +exports.Options = Options; +exports.Profile = Profile; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/profile.js b/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/profile.js new file mode 100644 index 0000000..13f1250 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/firefox/profile.js @@ -0,0 +1,413 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Profile management module. This module is considered internal; + * users should use {@link selenium-webdriver/firefox}. + */ + +'use strict'; + +const AdmZip = require('adm-zip'), + AdmConstants = require('adm-zip/util/constants'), + fs = require('fs'), + path = require('path'), + vm = require('vm'); + +const isDevMode = require('../lib/devmode'), + promise = require('../lib/promise'), + Symbols = require('../lib/symbols'), + io = require('../io'), + extension = require('./extension'); + + +/** @const */ +const WEBDRIVER_PREFERENCES_PATH = isDevMode + ? path.join(__dirname, '../../../firefox-driver/webdriver.json') + : path.join(__dirname, '../lib/firefox/webdriver.json'); + +/** @const */ +const WEBDRIVER_EXTENSION_PATH = isDevMode + ? path.join(__dirname, + '../../../../build/javascript/firefox-driver/webdriver.xpi') + : path.join(__dirname, '../lib/firefox/webdriver.xpi'); + +/** @const */ +const WEBDRIVER_EXTENSION_NAME = 'fxdriver@googlecode.com'; + + + +/** @type {Object} */ +var defaultPreferences = null; + +/** + * Synchronously loads the default preferences used for the FirefoxDriver. + * @return {!Object} The default preferences JSON object. + */ +function getDefaultPreferences() { + if (!defaultPreferences) { + var contents = /** @type {string} */( + fs.readFileSync(WEBDRIVER_PREFERENCES_PATH, 'utf8')); + defaultPreferences = /** @type {!Object} */(JSON.parse(contents)); + } + return defaultPreferences; +} + + +/** + * Parses a user.js file in a Firefox profile directory. + * @param {string} f Path to the file to parse. + * @return {!promise.Promise} A promise for the parsed preferences as + * a JSON object. If the file does not exist, an empty object will be + * returned. + */ +function loadUserPrefs(f) { + var done = promise.defer(); + fs.readFile(f, function(err, contents) { + if (err && err.code === 'ENOENT') { + done.fulfill({}); + return; + } + + if (err) { + done.reject(err); + return; + } + + var prefs = {}; + var context = vm.createContext({ + 'user_pref': function(key, value) { + prefs[key] = value; + } + }); + + vm.runInContext(/** @type {string} */(contents), context, f); + done.fulfill(prefs); + }); + return done.promise; +} + + + +/** + * @param {!Object} prefs The default preferences to write. Will be + * overridden by user.js preferences in the template directory and the + * frozen preferences required by WebDriver. + * @param {string} dir Path to the directory write the file to. + * @return {!promise.Promise} A promise for the profile directory, + * to be fulfilled when user preferences have been written. + */ +function writeUserPrefs(prefs, dir) { + var userPrefs = path.join(dir, 'user.js'); + return loadUserPrefs(userPrefs).then(function(overrides) { + Object.assign(prefs, overrides); + Object.assign(prefs, getDefaultPreferences()['frozen']); + + var contents = Object.keys(prefs).map(function(key) { + return 'user_pref(' + JSON.stringify(key) + ', ' + + JSON.stringify(prefs[key]) + ');'; + }).join('\n'); + + var done = promise.defer(); + fs.writeFile(userPrefs, contents, function(err) { + err && done.reject(err) || done.fulfill(dir); + }); + return done.promise; + }); +}; + + +/** + * Installs a group of extensions in the given profile directory. If the + * WebDriver extension is not included in this set, the default version + * bundled with this package will be installed. + * @param {!Array.} extensions The extensions to install, as a + * path to an unpacked extension directory or a path to a xpi file. + * @param {string} dir The profile directory to install to. + * @param {boolean=} opt_excludeWebDriverExt Whether to skip installation of + * the default WebDriver extension. + * @return {!Promise} A promise for the main profile directory + * once all extensions have been installed. + */ +function installExtensions(extensions, dir, opt_excludeWebDriverExt) { + var hasWebDriver = !!opt_excludeWebDriverExt; + var next = 0; + var extensionDir = path.join(dir, 'extensions'); + + return new Promise(function(fulfill, reject) { + io.exists(extensionDir).then(function(exists) { + if (!exists) { + return promise.checkedNodeCall(fs.mkdir, extensionDir); + } + }).then(installNext); + + function installNext() { + if (next >= extensions.length) { + if (hasWebDriver) { + fulfill(dir); + } else { + install(WEBDRIVER_EXTENSION_PATH); + } + } else { + install(extensions[next++]); + } + } + + function install(ext) { + extension.install(ext, extensionDir).then(function(id) { + hasWebDriver = hasWebDriver || (id === WEBDRIVER_EXTENSION_NAME); + installNext(); + }, reject); + } + }); +} + + +/** + * Decodes a base64 encoded profile. + * @param {string} data The base64 encoded string. + * @return {!Promise} A promise for the path to the decoded profile + * directory. + */ +function decode(data) { + return io.tmpFile().then(function(file) { + var buf = new Buffer(data, 'base64'); + return promise.checkedNodeCall(fs.writeFile, file, buf).then(function() { + return io.tmpDir(); + }).then(function(dir) { + var zip = new AdmZip(file); + zip.extractAllTo(dir); // Sync only? Why?? :-( + return dir; + }); + }); +} + + + +/** + * Models a Firefox proifle directory for use with the FirefoxDriver. The + * {@code Proifle} directory uses an in-memory model until {@link #writeToDisk} + * is called. + */ +class Profile { + /** + * @param {string=} opt_dir Path to an existing Firefox profile directory to + * use a template for this profile. If not specified, a blank profile will + * be used. + */ + constructor(opt_dir) { + /** @private {!Object} */ + this.preferences_ = {}; + + Object.assign(this.preferences_, getDefaultPreferences()['mutable']); + Object.assign(this.preferences_, getDefaultPreferences()['frozen']); + + /** @private {boolean} */ + this.nativeEventsEnabled_ = true; + + /** @private {(string|undefined)} */ + this.template_ = opt_dir; + + /** @private {number} */ + this.port_ = 0; + + /** @private {!Array} */ + this.extensions_ = []; + } + + /** + * Registers an extension to be included with this profile. + * @param {string} extension Path to the extension to include, as either an + * unpacked extension directory or the path to a xpi file. + */ + addExtension(extension) { + this.extensions_.push(extension); + } + + /** + * Sets a desired preference for this profile. + * @param {string} key The preference key. + * @param {(string|number|boolean)} value The preference value. + * @throws {Error} If attempting to set a frozen preference. + */ + setPreference(key, value) { + var frozen = getDefaultPreferences()['frozen']; + if (frozen.hasOwnProperty(key) && frozen[key] !== value) { + throw Error('You may not set ' + key + '=' + JSON.stringify(value) + + '; value is frozen for proper WebDriver functionality (' + + key + '=' + JSON.stringify(frozen[key]) + ')'); + } + this.preferences_[key] = value; + } + + /** + * Returns the currently configured value of a profile preference. This does + * not include any defaults defined in the profile's template directory user.js + * file (if a template were specified on construction). + * @param {string} key The desired preference. + * @return {(string|number|boolean|undefined)} The current value of the + * requested preference. + */ + getPreference(key) { + return this.preferences_[key]; + } + + /** + * Specifies which host the driver should listen for commands on. If not + * specified, the driver will default to "localhost". This option should be + * specified when "localhost" is not mapped to the loopback address + * (127.0.0.1) in `/etc/hosts`. + * + * @param {string} host the host the driver should listen for commands on + */ + setHost(host) { + this.preferences_['webdriver_firefox_allowed_hosts'] = host; + } + + /** + * @return {number} The port this profile is currently configured to use, or + * 0 if the port will be selected at random when the profile is written + * to disk. + */ + getPort() { + return this.port_; + } + + /** + * Sets the port to use for the WebDriver extension loaded by this profile. + * @param {number} port The desired port, or 0 to use any free port. + */ + setPort(port) { + this.port_ = port; + } + + /** + * @return {boolean} Whether the FirefoxDriver is configured to automatically + * accept untrusted SSL certificates. + */ + acceptUntrustedCerts() { + return !!this.preferences_['webdriver_accept_untrusted_certs']; + } + + /** + * Sets whether the FirefoxDriver should automatically accept untrusted SSL + * certificates. + * @param {boolean} value . + */ + setAcceptUntrustedCerts(value) { + this.preferences_['webdriver_accept_untrusted_certs'] = !!value; + } + + /** + * Sets whether to assume untrusted certificates come from untrusted issuers. + * @param {boolean} value . + */ + setAssumeUntrustedCertIssuer(value) { + this.preferences_['webdriver_assume_untrusted_issuer'] = !!value; + } + + /** + * @return {boolean} Whether to assume untrusted certs come from untrusted + * issuers. + */ + assumeUntrustedCertIssuer() { + return !!this.preferences_['webdriver_assume_untrusted_issuer']; + } + + /** + * Sets whether to use native events with this profile. + * @param {boolean} enabled . + */ + setNativeEventsEnabled(enabled) { + this.nativeEventsEnabled_ = enabled; + } + + /** + * Returns whether native events are enabled in this profile. + * @return {boolean} . + */ + nativeEventsEnabled() { + return this.nativeEventsEnabled_; + } + + /** + * Writes this profile to disk. + * @param {boolean=} opt_excludeWebDriverExt Whether to exclude the WebDriver + * extension from the generated profile. Used to reduce the size of an + * {@link #encode() encoded profile} since the server will always install + * the extension itself. + * @return {!Promise} A promise for the path to the new profile + * directory. + */ + writeToDisk(opt_excludeWebDriverExt) { + var profileDir = io.tmpDir(); + if (this.template_) { + profileDir = profileDir.then(function(dir) { + return io.copyDir( + /** @type {string} */(this.template_), + dir, /(parent\.lock|lock|\.parentlock)/); + }.bind(this)); + } + + // Freeze preferences for async operations. + var prefs = {}; + Object.assign(prefs, this.preferences_); + + // Freeze extensions for async operations. + var extensions = this.extensions_.concat(); + + return profileDir.then(function(dir) { + return writeUserPrefs(prefs, dir); + }).then(function(dir) { + return installExtensions(extensions, dir, !!opt_excludeWebDriverExt); + }); + } + + /** + * Encodes this profile as a zipped, base64 encoded directory. + * @return {!Promise} A promise for the encoded profile. + */ + encode() { + return this.writeToDisk(true).then(function(dir) { + var zip = new AdmZip(); + zip.addLocalFolder(dir, ''); + zip.getEntries()[0].header.method = AdmConstants.STORED; + return io.tmpFile().then(function(file) { + zip.writeZip(file); // Sync! Why oh why :-( + return promise.checkedNodeCall(fs.readFile, file); + }); + }).then(function(data) { + return new Buffer(data).toString('base64'); + }); + } + + /** + * Encodes this profile as a zipped, base64 encoded directory. + * @return {!Promise} A promise for the encoded profile. + */ + [Symbols.serialize]() { + return this.encode(); + } +} + + +// PUBLIC API + + +exports.Profile = Profile; +exports.decode = decode; +exports.loadUserPrefs = loadUserPrefs; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/http/index.js b/platforms/android/assets/www/node_modules/selenium-webdriver/http/index.js new file mode 100644 index 0000000..2ffbfb9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/http/index.js @@ -0,0 +1,514 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines an {@linkplain cmd.Executor command executor} that + * communicates with a remote end using HTTP + JSON. + */ + +'use strict'; + +const http = require('http'); +const url = require('url'); + +const error = require('../error'); +const cmd = require('../lib/command'); +const logging = require('../lib/logging'); +const promise = require('../lib/promise'); + + + +/** + * Converts a headers map to a HTTP header block string. + * @param {!Map} headers The map to convert. + * @return {string} The headers as a string. + */ +function headersToString(headers) { + let ret = []; + headers.forEach(function(value, name) { + ret.push(`${name.toLowerCase()}: ${value}`); + }); + return ret.join('\n'); +} + + +/** + * Represents a HTTP request message. This class is a "partial" request and only + * defines the path on the server to send a request to. It is each client's + * responsibility to build the full URL for the final request. + * @final + */ +class HttpRequest { + /** + * @param {string} method The HTTP method to use for the request. + * @param {string} path The path on the server to send the request to. + * @param {Object=} opt_data This request's non-serialized JSON payload data. + */ + constructor(method, path, opt_data) { + this.method = /** string */method; + this.path = /** string */path; + this.data = /** Object */opt_data; + this.headers = /** !Map */new Map( + [['Accept', 'application/json; charset=utf-8']]); + } + + /** @override */ + toString() { + let ret = `${this.method} ${this.path} HTTP/1.1\n`; + ret += headersToString(this.headers) + '\n\n'; + if (this.data) { + ret += JSON.stringify(this.data); + } + return ret; + } +} + + +/** + * Represents a HTTP response message. + * @final + */ +class HttpResponse { + /** + * @param {number} status The response code. + * @param {!Object} headers The response headers. All header names + * will be converted to lowercase strings for consistent lookups. + * @param {string} body The response body. + */ + constructor(status, headers, body) { + this.status = /** number */status; + this.body = /** string */body; + this.headers = /** !Map*/new Map; + for (let header in headers) { + this.headers.set(header.toLowerCase(), headers[header]); + } + } + + /** @override */ + toString() { + let ret = `HTTP/1.1 ${this.status}\n${headersToString(this.headers)}\n\n`; + if (this.body) { + ret += this.body; + } + return ret; + } +} + + +function post(path) { return resource('POST', path); } +function del(path) { return resource('DELETE', path); } +function get(path) { return resource('GET', path); } +function resource(method, path) { return {method: method, path: path}; } + + +/** @const {!Map} */ +const COMMAND_MAP = new Map([ + [cmd.Name.GET_SERVER_STATUS, get('/status')], + [cmd.Name.NEW_SESSION, post('/session')], + [cmd.Name.GET_SESSIONS, get('/sessions')], + [cmd.Name.DESCRIBE_SESSION, get('/session/:sessionId')], + [cmd.Name.QUIT, del('/session/:sessionId')], + [cmd.Name.CLOSE, del('/session/:sessionId/window')], + [cmd.Name.GET_CURRENT_WINDOW_HANDLE, get('/session/:sessionId/window_handle')], + [cmd.Name.GET_WINDOW_HANDLES, get('/session/:sessionId/window_handles')], + [cmd.Name.GET_CURRENT_URL, get('/session/:sessionId/url')], + [cmd.Name.GET, post('/session/:sessionId/url')], + [cmd.Name.GO_BACK, post('/session/:sessionId/back')], + [cmd.Name.GO_FORWARD, post('/session/:sessionId/forward')], + [cmd.Name.REFRESH, post('/session/:sessionId/refresh')], + [cmd.Name.ADD_COOKIE, post('/session/:sessionId/cookie')], + [cmd.Name.GET_ALL_COOKIES, get('/session/:sessionId/cookie')], + [cmd.Name.DELETE_ALL_COOKIES, del('/session/:sessionId/cookie')], + [cmd.Name.DELETE_COOKIE, del('/session/:sessionId/cookie/:name')], + [cmd.Name.FIND_ELEMENT, post('/session/:sessionId/element')], + [cmd.Name.FIND_ELEMENTS, post('/session/:sessionId/elements')], + [cmd.Name.GET_ACTIVE_ELEMENT, post('/session/:sessionId/element/active')], + [cmd.Name.FIND_CHILD_ELEMENT, post('/session/:sessionId/element/:id/element')], + [cmd.Name.FIND_CHILD_ELEMENTS, post('/session/:sessionId/element/:id/elements')], + [cmd.Name.CLEAR_ELEMENT, post('/session/:sessionId/element/:id/clear')], + [cmd.Name.CLICK_ELEMENT, post('/session/:sessionId/element/:id/click')], + [cmd.Name.SEND_KEYS_TO_ELEMENT, post('/session/:sessionId/element/:id/value')], + [cmd.Name.SUBMIT_ELEMENT, post('/session/:sessionId/element/:id/submit')], + [cmd.Name.GET_ELEMENT_TEXT, get('/session/:sessionId/element/:id/text')], + [cmd.Name.GET_ELEMENT_TAG_NAME, get('/session/:sessionId/element/:id/name')], + [cmd.Name.IS_ELEMENT_SELECTED, get('/session/:sessionId/element/:id/selected')], + [cmd.Name.IS_ELEMENT_ENABLED, get('/session/:sessionId/element/:id/enabled')], + [cmd.Name.IS_ELEMENT_DISPLAYED, get('/session/:sessionId/element/:id/displayed')], + [cmd.Name.GET_ELEMENT_LOCATION, get('/session/:sessionId/element/:id/location')], + [cmd.Name.GET_ELEMENT_SIZE, get('/session/:sessionId/element/:id/size')], + [cmd.Name.GET_ELEMENT_ATTRIBUTE, get('/session/:sessionId/element/:id/attribute/:name')], + [cmd.Name.GET_ELEMENT_VALUE_OF_CSS_PROPERTY, get('/session/:sessionId/element/:id/css/:propertyName')], + [cmd.Name.ELEMENT_EQUALS, get('/session/:sessionId/element/:id/equals/:other')], + [cmd.Name.TAKE_ELEMENT_SCREENSHOT, get('/session/:sessionId/element/:id/screenshot')], + [cmd.Name.SWITCH_TO_WINDOW, post('/session/:sessionId/window')], + [cmd.Name.MAXIMIZE_WINDOW, post('/session/:sessionId/window/:windowHandle/maximize')], + [cmd.Name.GET_WINDOW_POSITION, get('/session/:sessionId/window/:windowHandle/position')], + [cmd.Name.SET_WINDOW_POSITION, post('/session/:sessionId/window/:windowHandle/position')], + [cmd.Name.GET_WINDOW_SIZE, get('/session/:sessionId/window/:windowHandle/size')], + [cmd.Name.SET_WINDOW_SIZE, post('/session/:sessionId/window/:windowHandle/size')], + [cmd.Name.SWITCH_TO_FRAME, post('/session/:sessionId/frame')], + [cmd.Name.GET_PAGE_SOURCE, get('/session/:sessionId/source')], + [cmd.Name.GET_TITLE, get('/session/:sessionId/title')], + [cmd.Name.EXECUTE_SCRIPT, post('/session/:sessionId/execute')], + [cmd.Name.EXECUTE_ASYNC_SCRIPT, post('/session/:sessionId/execute_async')], + [cmd.Name.SCREENSHOT, get('/session/:sessionId/screenshot')], + [cmd.Name.SET_TIMEOUT, post('/session/:sessionId/timeouts')], + [cmd.Name.SET_SCRIPT_TIMEOUT, post('/session/:sessionId/timeouts/async_script')], + [cmd.Name.IMPLICITLY_WAIT, post('/session/:sessionId/timeouts/implicit_wait')], + [cmd.Name.MOVE_TO, post('/session/:sessionId/moveto')], + [cmd.Name.CLICK, post('/session/:sessionId/click')], + [cmd.Name.DOUBLE_CLICK, post('/session/:sessionId/doubleclick')], + [cmd.Name.MOUSE_DOWN, post('/session/:sessionId/buttondown')], + [cmd.Name.MOUSE_UP, post('/session/:sessionId/buttonup')], + [cmd.Name.MOVE_TO, post('/session/:sessionId/moveto')], + [cmd.Name.SEND_KEYS_TO_ACTIVE_ELEMENT, post('/session/:sessionId/keys')], + [cmd.Name.TOUCH_SINGLE_TAP, post('/session/:sessionId/touch/click')], + [cmd.Name.TOUCH_DOUBLE_TAP, post('/session/:sessionId/touch/doubleclick')], + [cmd.Name.TOUCH_DOWN, post('/session/:sessionId/touch/down')], + [cmd.Name.TOUCH_UP, post('/session/:sessionId/touch/up')], + [cmd.Name.TOUCH_MOVE, post('/session/:sessionId/touch/move')], + [cmd.Name.TOUCH_SCROLL, post('/session/:sessionId/touch/scroll')], + [cmd.Name.TOUCH_LONG_PRESS, post('/session/:sessionId/touch/longclick')], + [cmd.Name.TOUCH_FLICK, post('/session/:sessionId/touch/flick')], + [cmd.Name.ACCEPT_ALERT, post('/session/:sessionId/accept_alert')], + [cmd.Name.DISMISS_ALERT, post('/session/:sessionId/dismiss_alert')], + [cmd.Name.GET_ALERT_TEXT, get('/session/:sessionId/alert_text')], + [cmd.Name.SET_ALERT_TEXT, post('/session/:sessionId/alert_text')], + [cmd.Name.GET_LOG, post('/session/:sessionId/log')], + [cmd.Name.GET_AVAILABLE_LOG_TYPES, get('/session/:sessionId/log/types')], + [cmd.Name.GET_SESSION_LOGS, post('/logs')], + [cmd.Name.UPLOAD_FILE, post('/session/:sessionId/file')], +]); + + +/** + * A basic HTTP client used to send messages to a remote end. + */ +class HttpClient { + /** + * @param {string} serverUrl URL for the WebDriver server to send commands to. + * @param {http.Agent=} opt_agent The agent to use for each request. + * Defaults to `http.globalAgent`. + * @param {?string=} opt_proxy The proxy to use for the connection to the + * server. Default is to use no proxy. + */ + constructor(serverUrl, opt_agent, opt_proxy) { + let parsedUrl = url.parse(serverUrl); + if (!parsedUrl.hostname) { + throw new Error('Invalid server URL: ' + serverUrl); + } + + /** @private {http.Agent} */ + this.agent_ = opt_agent || null; + + /** @private {?string} */ + this.proxy_ = opt_proxy || null; + + /** + * Base options for each request. + * @private {{auth: (?string|undefined), + * host: string, + * path: (?string|undefined), + * port: (?string|undefined)}} + */ + this.options_ = { + auth: parsedUrl.auth, + host: parsedUrl.hostname, + path: parsedUrl.pathname, + port: parsedUrl.port + }; + } + + /** + * Sends a request to the server. The client will automatically follow any + * redirects returned by the server, fulfilling the returned promise with the + * final response. + * + * @param {!HttpRequest} httpRequest The request to send. + * @return {!promise.Promise} A promise that will be fulfilled + * with the server's response. + */ + send(httpRequest) { + var data; + + let headers = {}; + httpRequest.headers.forEach(function(value, name) { + headers[name] = value; + }); + + headers['Content-Length'] = 0; + if (httpRequest.method == 'POST' || httpRequest.method == 'PUT') { + data = JSON.stringify(httpRequest.data); + headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + headers['Content-Type'] = 'application/json;charset=UTF-8'; + } + + var path = this.options_.path; + if (path[path.length - 1] === '/' && httpRequest.path[0] === '/') { + path += httpRequest.path.substring(1); + } else { + path += httpRequest.path; + } + + var options = { + method: httpRequest.method, + auth: this.options_.auth, + host: this.options_.host, + port: this.options_.port, + path: path, + headers: headers + }; + + if (this.agent_) { + options.agent = this.agent_; + } + + var proxy = this.proxy_; + return new promise.Promise(function(fulfill, reject) { + sendRequest(options, fulfill, reject, data, proxy); + }); + } +} + + +/** + * Sends a single HTTP request. + * @param {!Object} options The request options. + * @param {function(!HttpResponse)} onOk The function to call if the + * request succeeds. + * @param {function(!Error)} onError The function to call if the request fails. + * @param {?string=} opt_data The data to send with the request. + * @param {?string=} opt_proxy The proxy server to use for the request. + */ +function sendRequest(options, onOk, onError, opt_data, opt_proxy) { + var host = options.host; + var port = options.port; + + if (opt_proxy) { + var proxy = url.parse(opt_proxy); + + options.headers['Host'] = options.host; + options.host = proxy.hostname; + options.port = proxy.port; + + if (proxy.auth) { + options.headers['Proxy-Authorization'] = + 'Basic ' + new Buffer(proxy.auth).toString('base64'); + } + } + + var request = http.request(options, function(response) { + if (response.statusCode == 302 || response.statusCode == 303) { + try { + var location = url.parse(response.headers['location']); + } catch (ex) { + onError(Error( + 'Failed to parse "Location" header for server redirect: ' + + ex.message + '\nResponse was: \n' + + new HttpResponse(response.statusCode, response.headers, ''))); + return; + } + + if (!location.hostname) { + location.hostname = host; + location.port = port; + } + + request.abort(); + sendRequest({ + method: 'GET', + host: location.hostname, + path: location.pathname + (location.search || ''), + port: location.port, + headers: { + 'Accept': 'application/json; charset=utf-8' + } + }, onOk, onError, undefined, opt_proxy); + return; + } + + var body = []; + response.on('data', body.push.bind(body)); + response.on('end', function() { + var resp = new HttpResponse( + /** @type {number} */(response.statusCode), + /** @type {!Object} */(response.headers), + body.join('').replace(/\0/g, '')); + onOk(resp); + }); + }); + + request.on('error', function(e) { + if (e.code === 'ECONNRESET') { + setTimeout(function() { + sendRequest(options, onOk, onError, opt_data, opt_proxy); + }, 15); + } else { + var message = e.message; + if (e.code) { + message = e.code + ' ' + message; + } + onError(new Error(message)); + } + }); + + if (opt_data) { + request.write(opt_data); + } + + request.end(); +} + + +/** + * A command executor that communicates with the server using HTTP + JSON. + * @implements {cmd.Executor} + */ +class Executor { + /** + * @param {!HttpClient} client The client to use for sending requests to the + * server. + */ + constructor(client) { + /** @private {!HttpClient} */ + this.client_ = client; + + /** @private {Map} */ + this.customCommands_ = null; + + /** @private {!logging.Logger} */ + this.log_ = logging.getLogger('webdriver.http.Executor'); + } + + /** + * Defines a new command for use with this executor. When a command is sent, + * the {@code path} will be preprocessed using the command's parameters; any + * path segments prefixed with ":" will be replaced by the parameter of the + * same name. For example, given "/person/:name" and the parameters + * "{name: 'Bob'}", the final command path will be "/person/Bob". + * + * @param {string} name The command name. + * @param {string} method The HTTP method to use when sending this command. + * @param {string} path The path to send the command to, relative to + * the WebDriver server's command root and of the form + * "/path/:variable/segment". + */ + defineCommand(name, method, path) { + if (!this.customCommands_) { + this.customCommands_ = new Map; + } + this.customCommands_.set(name, {method, path}); + } + + /** @override */ + execute(command) { + let resource = + (this.customCommands_ && this.customCommands_.get(command.getName())) + || COMMAND_MAP.get(command.getName()); + if (!resource) { + throw new error.UnknownCommandError( + 'Unrecognized command: ' + command.getName()); + } + + let parameters = command.getParameters(); + let path = buildPath(resource.path, parameters); + let request = new HttpRequest(resource.method, path, parameters); + + let log = this.log_; + log.finer(() => '>>>\n' + request); + return this.client_.send(request).then(function(response) { + log.finer(() => '<<<\n' + response); + return parseHttpResponse(/** @type {!HttpResponse} */ (response)); + }); + } +} + + +/** + * Callback used to parse {@link HttpResponse} objects from a + * {@link HttpClient}. + * @param {!HttpResponse} httpResponse The HTTP response to parse. + * @return {!Object} The parsed response. + */ +function parseHttpResponse(httpResponse) { + try { + return /** @type {!Object} */ (JSON.parse(httpResponse.body)); + } catch (ignored) { + // Whoops, looks like the server sent us a malformed response. We'll need + // to manually build a response object based on the response code. + } + + let response = { + 'status': error.ErrorCode.SUCCESS, + 'value': httpResponse.body.replace(/\r\n/g, '\n') + }; + + if (httpResponse.status >= 400) { + // 404 represents an unknown command; anything else is a generic unknown + // error. + response['status'] = httpResponse.status == 404 ? + error.ErrorCode.UNKNOWN_COMMAND : + error.ErrorCode.UNKNOWN_ERROR; + } + + return response; +} + + +/** + * Builds a fully qualified path using the given set of command parameters. Each + * path segment prefixed with ':' will be replaced by the value of the + * corresponding parameter. All parameters spliced into the path will be + * removed from the parameter map. + * @param {string} path The original resource path. + * @param {!Object<*>} parameters The parameters object to splice into the path. + * @return {string} The modified path. + */ +function buildPath(path, parameters) { + let pathParameters = path.match(/\/:(\w+)\b/g); + if (pathParameters) { + for (let i = 0; i < pathParameters.length; ++i) { + let key = pathParameters[i].substring(2); // Trim the /: + if (key in parameters) { + let value = parameters[key]; + // TODO: move webdriver.WebElement.ELEMENT definition to a + // common file so we can reference it here without pulling in all of + // webdriver.WebElement's dependencies. + if (value && value['ELEMENT']) { + // When inserting a WebElement into the URL, only use its ID value, + // not the full JSON. + value = value['ELEMENT']; + } + path = path.replace(pathParameters[i], '/' + value); + delete parameters[key]; + } else { + throw new error.InvalidArgumentError( + 'Missing required parameter: ' + key); + } + } + } + return path; +} + + +// PUBLIC API + +exports.Executor = Executor; +exports.HttpClient = HttpClient; +exports.Request = HttpRequest; +exports.Response = HttpResponse; +exports.buildPath = buildPath; // Exported for testing. diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/http/util.js b/platforms/android/assets/www/node_modules/selenium-webdriver/http/util.js new file mode 100644 index 0000000..88a06d6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/http/util.js @@ -0,0 +1,135 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Various HTTP utilities. + */ + +'use strict'; + +const error = require('../error'), + Executor = require('./index').Executor, + HttpClient = require('./index').HttpClient, + HttpRequest = require('./index').Request, + Command = require('../lib/command').Command, + CommandName = require('../lib/command').Name, + promise = require('../lib/promise'); + + + +/** + * Queries a WebDriver server for its current status. + * @param {string} url Base URL of the server to query. + * @return {!promise.Promise.} A promise that resolves with + * a hash of the server status. + */ +function getStatus(url) { + var client = new HttpClient(url); + var executor = new Executor(client); + var command = new Command(CommandName.GET_SERVER_STATUS); + return executor.execute(command).then(function(responseObj) { + error.checkLegacyResponse(responseObj); + return responseObj['value']; + }); +} + + +// PUBLIC API + + +/** + * Queries a WebDriver server for its current status. + * @param {string} url Base URL of the server to query. + * @return {!promise.Promise.} A promise that resolves with + * a hash of the server status. + */ +exports.getStatus = getStatus; + + +/** + * Waits for a WebDriver server to be healthy and accepting requests. + * @param {string} url Base URL of the server to query. + * @param {number} timeout How long to wait for the server. + * @return {!promise.Promise} A promise that will resolve when the + * server is ready. + */ +exports.waitForServer = function(url, timeout) { + var ready = promise.defer(), + start = Date.now(); + checkServerStatus(); + return ready.promise; + + function checkServerStatus() { + return getStatus(url).then(ready.fulfill, onError); + } + + function onError() { + if (Date.now() - start > timeout) { + ready.reject( + Error('Timed out waiting for the WebDriver server at ' + url)); + } else { + setTimeout(function() { + if (ready.isPending()) { + checkServerStatus(); + } + }, 50); + } + } +}; + + +/** + * Polls a URL with GET requests until it returns a 2xx response or the + * timeout expires. + * @param {string} url The URL to poll. + * @param {number} timeout How long to wait, in milliseconds. + * @return {!promise.Promise} A promise that will resolve when the + * URL responds with 2xx. + */ +exports.waitForUrl = function(url, timeout) { + var client = new HttpClient(url), + request = new HttpRequest('GET', ''), + ready = promise.defer(), + start = Date.now(); + testUrl(); + return ready.promise; + + function testUrl() { + client.send(request).then(onResponse, onError); + } + + function onError() { + if (Date.now() - start > timeout) { + ready.reject(Error( + 'Timed out waiting for the URL to return 2xx: ' + url)); + } else { + setTimeout(function() { + if (ready.isPending()) { + testUrl(); + } + }, 50); + } + } + + function onResponse(response) { + if (!ready.isPending()) return; + if (response.status > 199 && response.status < 300) { + return ready.fulfill(); + } + onError(); + } +}; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/ie.js b/platforms/android/assets/www/node_modules/selenium-webdriver/ie.js new file mode 100644 index 0000000..a892094 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/ie.js @@ -0,0 +1,444 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for Microsoft's + * Internet Explorer. Before using the IEDriver, you must download the latest + * [IEDriverServer](http://selenium-release.storage.googleapis.com/index.html) + * and place it on your + * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). You must also apply + * the system configuration outlined on the Selenium project + * [wiki](https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver) + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const executors = require('./executors'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + promise = require('./lib/promise'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +const IEDRIVER_EXE = 'IEDriverServer.exe'; + + + +/** + * IEDriverServer logging levels. + * @enum {string} + */ +const Level = { + FATAL: 'FATAL', + ERROR: 'ERROR', + WARN: 'WARN', + INFO: 'INFO', + DEBUG: 'DEBUG', + TRACE: 'TRACE' +}; + + + +/** + * Option keys: + * https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#ie-specific + * @enum {string} + */ +const Key = { + IGNORE_PROTECTED_MODE_SETTINGS: 'ignoreProtectedModeSettings', + IGNORE_ZOOM_SETTING: 'ignoreZoomSetting', + INITIAL_BROWSER_URL: 'initialBrowserUrl', + ENABLE_PERSISTENT_HOVER: 'enablePersistentHover', + ENABLE_ELEMENT_CACHE_CLEANUP: 'enableElementCacheCleanup', + REQUIRE_WINDOW_FOCUS: 'requireWindowFocus', + BROWSER_ATTACH_TIMEOUT: 'browserAttachTimeout', + FORCE_CREATE_PROCESS: 'ie.forceCreateProcessApi', + BROWSER_COMMAND_LINE_SWITCHES: 'ie.browserCommandLineSwitches', + USE_PER_PROCESS_PROXY: 'ie.usePerProcessProxy', + ENSURE_CLEAN_SESSION: 'ie.ensureCleanSession', + LOG_FILE: 'logFile', + LOG_LEVEL: 'logLevel', + HOST: 'host', + EXTRACT_PATH: 'extractPath', + SILENT: 'silent' +}; + + +/** + * Class for managing IEDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object<(boolean|number|string|!Array)>} */ + this.options_ = {}; + + /** @private {(capabilities.ProxyConfig|null)} */ + this.proxy_ = null; + } + + /** + * Extracts the IEDriver specific options from the given capabilities + * object. + * @param {!capabilities.Capabilities} caps The capabilities object. + * @return {!Options} The IEDriver options. + */ + static fromCapabilities(caps) { + var options = new Options(); + var map = options.options_; + + Object.keys(Key).forEach(function(key) { + key = Key[key]; + if (caps.has(key)) { + map[key] = caps.get(key); + } + }); + + if (caps.has(capabilities.Capability.PROXY)) { + options.setProxy(caps.get(capabilities.Capability.PROXY)); + } + + return options; + } + + /** + * Whether to disable the protected mode settings check when the session is + * created. Disbling this setting may lead to significant instability as the + * browser may become unresponsive/hang. Only "best effort" support is provided + * when using this capability. + * + * For more information, refer to the IEDriver's + * [required system configuration](http://goo.gl/eH0Yi3). + * + * @param {boolean} ignoreSettings Whether to ignore protected mode settings. + * @return {!Options} A self reference. + */ + introduceFlakinessByIgnoringProtectedModeSettings(ignoreSettings) { + this.options_[Key.IGNORE_PROTECTED_MODE_SETTINGS] = !!ignoreSettings; + return this; + } + + /** + * Indicates whether to skip the check that the browser's zoom level is set to + * 100%. + * + * @param {boolean} ignore Whether to ignore the browser's zoom level settings. + * @return {!Options} A self reference. + */ + ignoreZoomSetting(ignore) { + this.options_[Key.IGNORE_ZOOM_SETTING] = !!ignore; + return this; + } + + /** + * Sets the initial URL loaded when IE starts. This is intended to be used with + * {@link #ignoreProtectedModeSettings} to allow the user to initialize IE in + * the proper Protected Mode zone. Setting this option may cause browser + * instability or flaky and unresponsive code. Only "best effort" support is + * provided when using this option. + * + * @param {string} url The initial browser URL. + * @return {!Options} A self reference. + */ + initialBrowserUrl(url) { + this.options_[Key.INITIAL_BROWSER_URL] = url; + return this; + } + + /** + * Configures whether to enable persistent mouse hovering (true by default). + * Persistent hovering is achieved by continuously firing mouse over events at + * the last location the mouse cursor has been moved to. + * + * @param {boolean} enable Whether to enable persistent hovering. + * @return {!Options} A self reference. + */ + enablePersistentHover(enable) { + this.options_[Key.ENABLE_PERSISTENT_HOVER] = !!enable; + return this; + } + + /** + * Configures whether the driver should attempt to remove obsolete + * {@linkplain webdriver.WebElement WebElements} from its internal cache on + * page navigation (true by default). Disabling this option will cause the + * driver to run with a larger memory footprint. + * + * @param {boolean} enable Whether to enable element reference cleanup. + * @return {!Options} A self reference. + */ + enableElementCacheCleanup(enable) { + this.options_[Key.ENABLE_ELEMENT_CACHE_CLEANUP] = !!enable; + return this; + } + + /** + * Configures whether to require the IE window to have input focus before + * performing any user interactions (i.e. mouse or keyboard events). This + * option is disabled by default, but delivers much more accurate interaction + * events when enabled. + * + * @param {boolean} require Whether to require window focus. + * @return {!Options} A self reference. + */ + requireWindowFocus(require) { + this.options_[Key.REQUIRE_WINDOW_FOCUS] = !!require; + return this; + } + + /** + * Configures the timeout, in milliseconds, that the driver will attempt to + * located and attach to a newly opened instance of Internet Explorer. The + * default is zero, which indicates waiting indefinitely. + * + * @param {number} timeout How long to wait for IE. + * @return {!Options} A self reference. + */ + browserAttachTimeout(timeout) { + this.options_[Key.BROWSER_ATTACH_TIMEOUT] = Math.max(timeout, 0); + return this; + } + + /** + * Configures whether to launch Internet Explorer using the CreateProcess API. + * If this option is not specified, IE is launched using IELaunchURL, if + * available. For IE 8 and above, this option requires the TabProcGrowth + * registry value to be set to 0. + * + * @param {boolean} force Whether to use the CreateProcess API. + * @return {!Options} A self reference. + */ + forceCreateProcessApi(force) { + this.options_[Key.FORCE_CREATE_PROCESS] = !!force; + return this; + } + + /** + * Specifies command-line switches to use when launching Internet Explorer. + * This is only valid when used with {@link #forceCreateProcessApi}. + * + * @param {...(string|!Array.)} var_args The arguments to add. + * @return {!Options} A self reference. + */ + addArguments(var_args) { + var args = this.options_[Key.BROWSER_COMMAND_LINE_SWITCHES] || []; + args = args.concat.apply(args, arguments); + this.options_[Key.BROWSER_COMMAND_LINE_SWITCHES] = args; + return this; + } + + /** + * Configures whether proxies should be configured on a per-process basis. If + * not set, setting a {@linkplain #setProxy proxy} will configure the system + * proxy. The default behavior is to use the system proxy. + * + * @param {boolean} enable Whether to enable per-process proxy settings. + * @return {!Options} A self reference. + */ + usePerProcessProxy(enable) { + this.options_[Key.USE_PER_PROCESS_PROXY] = !!enable; + return this; + } + + /** + * Configures whether to clear the cache, cookies, history, and saved form data + * before starting the browser. _Using this capability will clear session data + * for all running instances of Internet Explorer, including those started + * manually._ + * + * @param {boolean} cleanSession Whether to clear all session data on startup. + * @return {!Options} A self reference. + */ + ensureCleanSession(cleanSession) { + this.options_[Key.ENSURE_CLEAN_SESSION] = !!cleanSession; + return this; + } + + /** + * Sets the path to the log file the driver should log to. + * @param {string} file The log file path. + * @return {!Options} A self reference. + */ + setLogFile(file) { + this.options_[Key.LOG_FILE] = file; + return this; + } + + /** + * Sets the IEDriverServer's logging {@linkplain Level level}. + * @param {Level} level The logging level. + * @return {!Options} A self reference. + */ + setLogLevel(level) { + this.options_[Key.LOG_LEVEL] = level; + return this; + } + + /** + * Sets the IP address of the driver's host adapter. + * @param {string} host The IP address to use. + * @return {!Options} A self reference. + */ + setHost(host) { + this.options_[Key.HOST] = host; + return this; + } + + /** + * Sets the path of the temporary data directory to use. + * @param {string} path The log file path. + * @return {!Options} A self reference. + */ + setExtractPath(path) { + this.options_[Key.EXTRACT_PATH] = path; + return this; + } + + /** + * Sets whether the driver should start in silent mode. + * @param {boolean} silent Whether to run in silent mode. + * @return {!Options} A self reference. + */ + silent(silent) { + this.options_[Key.SILENT] = silent; + return this; + } + + /** + * Sets the proxy settings for the new session. + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts this options instance to a {@link capabilities.Capabilities} + * object. + * @param {capabilities.Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!capabilities.Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || capabilities.Capabilities.ie(); + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + Object.keys(this.options_).forEach(function(key) { + caps.set(key, this.options_[key]); + }, this); + return caps; + } +} + + +function createServiceFromCapabilities(capabilities) { + if (process.platform !== 'win32') { + throw Error( + 'The IEDriver may only be used on Windows, but you appear to be on ' + + process.platform + '. Did you mean to run against a remote ' + + 'WebDriver server?'); + } + + let exe = io.findInPath(IEDRIVER_EXE, true); + if (!exe || !fs.existsSync(exe)) { + throw Error( + `${IEDRIVER_EXE} could not be found on the current PATH. Please ` + + `download the latest version of ${IEDRIVER_EXE} from ` + + 'http://selenium-release.storage.googleapis.com/index.html and ' + + 'ensure it can be found on your system PATH.'); + } + + var args = []; + if (capabilities.has(Key.HOST)) { + args.push('--host=' + capabilities.get(Key.HOST)); + } + if (capabilities.has(Key.LOG_FILE)) { + args.push('--log-file=' + capabilities.get(Key.LOG_FILE)); + } + if (capabilities.has(Key.LOG_LEVEL)) { + args.push('--log-level=' + capabilities.get(Key.LOG_LEVEL)); + } + if (capabilities.has(Key.EXTRACT_PATH)) { + args.push('--extract-path=' + capabilities.get(Key.EXTRACT_PATH)); + } + if (capabilities.get(Key.SILENT)) { + args.push('--silent'); + } + + var port = portprober.findFreePort(); + return new remote.DriverService(exe, { + loopback: true, + port: port, + args: port.then(function(port) { + return args.concat('--port=' + port); + }), + stdio: 'ignore' + }); +} + + +/** + * A WebDriver client for Microsoft's Internet Explorer. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(capabilities.Capabilities|Options)=} opt_config The configuration + * options. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_flow) { + var caps = opt_config instanceof Options ? + opt_config.toCapabilities() : + (opt_config || capabilities.Capabilities.ie()); + + var service = createServiceFromCapabilities(caps); + var executor = executors.createExecutor(service.start()); + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, driver.controlFlow()); + + let boundQuit = this.quit.bind(this); + + /** @override */ + this.quit = function() { + return boundQuit().thenFinally(service.kill.bind(service)); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.Level = Level; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/index.js b/platforms/android/assets/www/node_modules/selenium-webdriver/index.js new file mode 100644 index 0000000..38dfa6f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/index.js @@ -0,0 +1,57 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview The main user facing module. Exports WebDriver's primary + * public API and provides convenience assessors to certain sub-modules. + */ + +'use strict'; + +const builder = require('./builder'); +const error = require('./error'); +const actions = require('./lib/actions'); +const by = require('./lib/by'); +const capabilities = require('./lib/capabilities'); +const command = require('./lib/command'); +const events = require('./lib/events'); +const input = require('./lib/input'); +const logging = require('./lib/logging'); +const promise = require('./lib/promise'); +const session = require('./lib/session'); +const until = require('./lib/until'); +const webdriver = require('./lib/webdriver'); + + +exports.ActionSequence = actions.ActionSequence; +exports.Browser = capabilities.Browser; +exports.Builder = builder.Builder; +exports.Button = input.Button; +exports.By = by.By; +exports.Capabilities = capabilities.Capabilities; +exports.Capability = capabilities.Capability; +exports.EventEmitter = events.EventEmitter; +exports.FileDetector = input.FileDetector; +exports.Key = input.Key; +exports.Session = session.Session; +exports.WebDriver = webdriver.WebDriver; +exports.WebElement = webdriver.WebElement; +exports.WebElementPromise = webdriver.WebElementPromise; +exports.error = error; +exports.logging = logging; +exports.promise = promise; +exports.until = until; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/io/exec.js b/platforms/android/assets/www/node_modules/selenium-webdriver/io/exec.js new file mode 100644 index 0000000..90d4232 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/io/exec.js @@ -0,0 +1,159 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const childProcess = require('child_process'); +const promise = require('../lib/promise'); + + +/** + * A hash with configuration options for an executed command. + * + * - `args` - Command line arguments. + * - `env` - Command environment; will inherit from the current process if + * missing. + * - `stdio` - IO configuration for the spawned server process. For more + * information, refer to the documentation of `child_process.spawn`. + * + * @typedef {{ + * args: (!Array|undefined), + * env: (!Object|undefined), + * stdio: (string|!Array| + * undefined) + * }} + */ +var Options; + + +/** + * Describes a command's termination conditions. + */ +class Result { + /** + * @param {?number} code The exit code, or {@code null} if the command did not + * exit normally. + * @param {?string} signal The signal used to kill the command, or + * {@code null}. + */ + constructor(code, signal) { + /** @type {?number} */ + this.code = code; + + /** @type {?string} */ + this.signal = signal; + } + + /** @override */ + toString() { + return `Result(code=${this.code}, signal=${this.signal})`; + } +} + + +const COMMAND_RESULT = + /** !WeakMap> */new WeakMap; +const KILL_HOOK = /** !WeakMap */new WeakMap; + +/** + * Represents a command running in a sub-process. + */ +class Command { + /** + * @param {!promise.Promise} result The command result. + * @param {function(string)} onKill The function to call when {@link #kill()} + * is called. + */ + constructor(result, onKill) { + COMMAND_RESULT.set(this, result); + KILL_HOOK.set(this, onKill); + } + + /** @return {boolean} Whether this command is still running. */ + isRunning() { + return COMMAND_RESULT.get(this).isPending(); + } + + /** + * @return {!promise.Promise} A promise for the result of this + * command. + */ + result() { + return /** @type {!promise.Promise} */(COMMAND_RESULT.get(this)); + } + + /** + * Sends a signal to the underlying process. + * @param {string=} opt_signal The signal to send; defaults to `SIGTERM`. + */ + kill(opt_signal) { + KILL_HOOK.get(this)(opt_signal || 'SIGTERM'); + } +} + + +// PUBLIC API + + +/** + * Spawns a child process. The returned {@link Command} may be used to wait + * for the process result or to send signals to the process. + * + * @param {string} command The executable to spawn. + * @param {Options=} opt_options The command options. + * @return {!Command} The launched command. + */ +module.exports = function exec(command, opt_options) { + var options = opt_options || {}; + + var proc = childProcess.spawn(command, options.args || [], { + env: options.env || process.env, + stdio: options.stdio || 'ignore' + }).once('exit', onExit); + + // This process should not wait on the spawned child, however, we do + // want to ensure the child is killed when this process exits. + proc.unref(); + process.once('exit', killCommand); + + var result = promise.defer(); + var cmd = new Command(result.promise, function(signal) { + if (!result.isPending() || !proc) { + return; // No longer running. + } + proc.kill(signal); + }); + return cmd; + + function onExit(code, signal) { + proc = null; + process.removeListener('exit', killCommand); + result.fulfill(new Result(code, signal)); + } + + function killCommand() { + process.removeListener('exit', killCommand); + proc && proc.kill('SIGTERM'); + } +}; + +// Exported to improve generated API documentation. + +module.exports.Command = Command; +/** @typedef {!Options} */ +module.exports.Options = Options; +module.exports.Result = Result; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/io/index.js b/platforms/android/assets/www/node_modules/selenium-webdriver/io/index.js new file mode 100644 index 0000000..2da0670 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/io/index.js @@ -0,0 +1,227 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'), + path = require('path'), + rimraf = require('rimraf'), + tmp = require('tmp'); + + + +// PUBLIC API + + + +/** + * Recursively removes a directory and all of its contents. This is equivalent + * to {@code rm -rf} on a POSIX system. + * @param {string} dirPath Path to the directory to remove. + * @return {!Promise} A promise to be resolved when the operation has + * completed. + */ +exports.rmDir = function(dirPath) { + return new Promise(function(fulfill, reject) { + var numAttempts = 0; + attemptRm(); + function attemptRm() { + numAttempts += 1; + rimraf(dirPath, function(err) { + if (err) { + if (err.code === 'ENOTEMPTY' && numAttempts < 2) { + attemptRm(); + return; + } + reject(err); + } else { + fulfill(); + } + }); + } + }); +}; + + +/** + * Copies one file to another. + * @param {string} src The source file. + * @param {string} dst The destination file. + * @return {!Promise} A promise for the copied file's path. + */ +exports.copy = function(src, dst) { + return new Promise(function(fulfill, reject) { + var rs = fs.createReadStream(src); + rs.on('error', reject); + rs.on('end', () => fulfill(dst)); + + var ws = fs.createWriteStream(dst); + ws.on('error', reject); + + rs.pipe(ws); + }); +}; + + +/** + * Recursively copies the contents of one directory to another. + * @param {string} src The source directory to copy. + * @param {string} dst The directory to copy into. + * @param {(RegExp|function(string): boolean)=} opt_exclude An exclusion filter + * as either a regex or predicate function. All files matching this filter + * will not be copied. + * @return {!Promise} A promise for the destination + * directory's path once all files have been copied. + */ +exports.copyDir = function(src, dst, opt_exclude) { + var predicate = opt_exclude; + if (opt_exclude && typeof opt_exclude !== 'function') { + predicate = function(p) { + return !opt_exclude.test(p); + }; + } + + // TODO(jleyba): Make this function completely async. + if (!fs.existsSync(dst)) { + fs.mkdirSync(dst); + } + + var files = fs.readdirSync(src); + files = files.map(function(file) { + return path.join(src, file); + }); + + if (predicate) { + files = files.filter(/** @type {function(string): boolean} */(predicate)); + } + + var results = []; + files.forEach(function(file) { + var stats = fs.statSync(file); + var target = path.join(dst, path.basename(file)); + + if (stats.isDirectory()) { + if (!fs.existsSync(target)) { + fs.mkdirSync(target, stats.mode); + } + results.push(exports.copyDir(file, target, predicate)); + } else { + results.push(exports.copy(file, target)); + } + }); + + return Promise.all(results).then(() => dst); +}; + + +/** + * Tests if a file path exists. + * @param {string} aPath The path to test. + * @return {!Promise} A promise for whether the file exists. + */ +exports.exists = function(aPath) { + return new Promise(function(fulfill) { + fs.exists(aPath, fulfill); + }); +}; + + +/** + * Deletes a name from the filesystem and possibly the file it refers to. Has + * no effect if the file does not exist. + * @param {string} aPath The path to remove. + * @return {!Promise} A promise for when the file has been removed. + */ +exports.unlink = function(aPath) { + return new Promise(function(fulfill, reject) { + fs.exists(aPath, function(exists) { + if (exists) { + fs.unlink(aPath, function(err) { + err && reject(err) || fulfill(); + }); + } else { + fulfill(); + } + }); + }); +}; + + +/** + * @return {!Promise} A promise for the path to a temporary directory. + * @see https://www.npmjs.org/package/tmp + */ +exports.tmpDir = function() { + return new Promise(function(fulfill, reject) { + tmp.dir(function(error, value) { + error ? reject(error) : fulfill(value); + }); + }); +}; + + +/** + * @param {{postfix: string}=} opt_options Temporary file options. + * @return {!Promise} A promise for the path to a temporary file. + * @see https://www.npmjs.org/package/tmp + */ +exports.tmpFile = function(opt_options) { + return new Promise(function(fulfill, reject) { + let callback = function( + /** Error */err, + /** (string|undefined) */value) { + err ? reject(err) : fulfill(value); + }; + + // |tmp.file| checks arguments length to detect options rather than doing a + // truthy check, so we must only pass options if there are some to pass. + if (opt_options) { + tmp.file(opt_options, callback); + } else { + tmp.file(callback); + } + }); +}; + + +/** + * Searches the {@code PATH} environment variable for the given file. + * @param {string} file The file to locate on the PATH. + * @param {boolean=} opt_checkCwd Whether to always start with the search with + * the current working directory, regardless of whether it is explicitly + * listed on the PATH. + * @return {?string} Path to the located file, or {@code null} if it could + * not be found. + */ +exports.findInPath = function(file, opt_checkCwd) { + if (opt_checkCwd) { + var tmp = path.join(process.cwd(), file); + if (fs.existsSync(tmp)) { + return tmp; + } + } + + var dirs = process.env['PATH'].split(path.delimiter); + var found = null; + dirs.forEach(function(dir) { + var tmp = path.join(dir, file); + if (!found && fs.existsSync(tmp)) { + found = tmp; + } + }); + return found; +}; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/README b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/README new file mode 100644 index 0000000..bdf25b0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/README @@ -0,0 +1,2 @@ +This directory contains modules internal to selenium-webdriver that are not +intended for general consumption. They may change at any time. diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/actions.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/actions.js new file mode 100644 index 0000000..bb94c5e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/actions.js @@ -0,0 +1,594 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const command = require('./command'); +const input = require('./input'); +const error = require('../error'); + + +/** + * @param {!IArrayLike} args . + * @return {!Array} . + */ +function flatten(args) { + let result = []; + for (let i = 0; i < args.length; i++) { + let element = args[i]; + if (Array.isArray(element)) { + result.push.apply(result, flatten(element)); + } else { + result.push(element); + } + } + return result; +} + + +const MODIFIER_KEYS = new Set([ + input.Key.ALT, + input.Key.CONTROL, + input.Key.SHIFT, + input.Key.COMMAND +]); + + +/** + * Checks that a key is a modifier key. + * @param {!input.Key} key The key to check. + * @throws {error.InvalidArgumentError} If the key is not a modifier key. + * @private + */ +function checkModifierKey(key) { + if (!MODIFIER_KEYS.has(key)) { + throw new error.InvalidArgumentError('Not a modifier key'); + } +} + + +/** + * Class for defining sequences of complex user interactions. Each sequence + * will not be executed until {@link #perform} is called. + * + * Example: + * + * new ActionSequence(driver). + * keyDown(Key.SHIFT). + * click(element1). + * click(element2). + * dragAndDrop(element3, element4). + * keyUp(Key.SHIFT). + * perform(); + * + */ +class ActionSequence { + /** + * @param {!./webdriver.WebDriver} driver The driver that should be used to + * perform this action sequence. + */ + constructor(driver) { + /** @private {!./webdriver.WebDriver} */ + this.driver_ = driver; + + /** @private {!Array<{description: string, command: !command.Command}>} */ + this.actions_ = []; + } + + /** + * Schedules an action to be executed each time {@link #perform} is called on + * this instance. + * + * @param {string} description A description of the command. + * @param {!command.Command} command The command. + * @private + */ + schedule_(description, command) { + this.actions_.push({ + description: description, + command: command + }); + } + + /** + * Executes this action sequence. + * + * @return {!./promise.Promise} A promise that will be resolved once + * this sequence has completed. + */ + perform() { + // Make a protected copy of the scheduled actions. This will protect against + // users defining additional commands before this sequence is actually + // executed. + let actions = this.actions_.concat(); + let driver = this.driver_; + return driver.controlFlow().execute(function() { + actions.forEach(function(action) { + driver.schedule(action.command, action.description); + }); + }, 'ActionSequence.perform'); + } + + /** + * Moves the mouse. The location to move to may be specified in terms of the + * mouse's current location, an offset relative to the top-left corner of an + * element, or an element (in which case the middle of the element is used). + * + * @param {(!./webdriver.WebElement|{x: number, y: number})} location The + * location to drag to, as either another WebElement or an offset in + * pixels. + * @param {{x: number, y: number}=} opt_offset If the target {@code location} + * is defined as a {@link ./webdriver.WebElement}, this parameter defines + * an offset within that element. The offset should be specified in pixels + * relative to the top-left corner of the element's bounding box. If + * omitted, the element's center will be used as the target offset. + * @return {!ActionSequence} A self reference. + */ + mouseMove(location, opt_offset) { + let cmd = new command.Command(command.Name.MOVE_TO); + + if (typeof location.x === 'number') { + setOffset(/** @type {{x: number, y: number}} */(location)); + } else { + cmd.setParameter('element', location.getRawId()); + if (opt_offset) { + setOffset(opt_offset); + } + } + + this.schedule_('mouseMove', cmd); + return this; + + /** @param {{x: number, y: number}} offset The offset to use. */ + function setOffset(offset) { + cmd.setParameter('xoffset', offset.x || 0); + cmd.setParameter('yoffset', offset.y || 0); + } + } + + /** + * Schedules a mouse action. + * @param {string} description A simple descriptive label for the scheduled + * action. + * @param {!command.Name} commandName The name of the command. + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if the previous argument is + * provided as a button. + * @return {!ActionSequence} A self reference. + * @private + */ + scheduleMouseAction_( + description, commandName, opt_elementOrButton, opt_button) { + let button; + if (typeof opt_elementOrButton === 'number') { + button = opt_elementOrButton; + } else { + if (opt_elementOrButton) { + this.mouseMove( + /** @type {!./webdriver.WebElement} */ (opt_elementOrButton)); + } + button = opt_button !== void(0) ? opt_button : input.Button.LEFT; + } + + let cmd = new command.Command(commandName). + setParameter('button', button); + this.schedule_(description, cmd); + return this; + } + + /** + * Presses a mouse button. The mouse button will not be released until + * {@link #mouseUp} is called, regardless of whether that call is made in this + * sequence or another. The behavior for out-of-order events (e.g. mouseDown, + * click) is undefined. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).mouseDown() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + mouseDown(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('mouseDown', + command.Name.MOUSE_DOWN, opt_elementOrButton, opt_button); + } + + /** + * Releases a mouse button. Behavior is undefined for calling this function + * without a previous call to {@link #mouseDown}. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).mouseUp() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + mouseUp(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('mouseUp', + command.Name.MOUSE_UP, opt_elementOrButton, opt_button); + } + + /** + * Convenience function for performing a "drag and drop" manuever. The target + * element may be moved to the location of another element, or by an offset (in + * pixels). + * + * @param {!./webdriver.WebElement} element The element to drag. + * @param {(!./webdriver.WebElement|{x: number, y: number})} location The + * location to drag to, either as another WebElement or an offset in + * pixels. + * @return {!ActionSequence} A self reference. + */ + dragAndDrop(element, location) { + return this.mouseDown(element).mouseMove(location).mouseUp(); + } + + /** + * Clicks a mouse button. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).click() + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + click(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('click', + command.Name.CLICK, opt_elementOrButton, opt_button); + } + + /** + * Double-clicks a mouse button. + * + * If an element is provided, the mouse will first be moved to the center of + * that element. This is equivalent to: + * + * sequence.mouseMove(element).doubleClick() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + doubleClick(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('doubleClick', + command.Name.DOUBLE_CLICK, opt_elementOrButton, opt_button); + } + + /** + * Schedules a keyboard action. + * + * @param {string} description A simple descriptive label for the scheduled + * action. + * @param {!Array<(string|!input.Key)>} keys The keys to send. + * @return {!ActionSequence} A self reference. + * @private + */ + scheduleKeyboardAction_(description, keys) { + let cmd = new command.Command(command.Name.SEND_KEYS_TO_ACTIVE_ELEMENT) + .setParameter('value', keys); + this.schedule_(description, cmd); + return this; + } + + /** + * Performs a modifier key press. The modifier key is not released + * until {@link #keyUp} or {@link #sendKeys} is called. The key press will be + * targetted at the currently focused element. + * + * @param {!input.Key} key The modifier key to push. Must be one of + * {ALT, CONTROL, SHIFT, COMMAND, META}. + * @return {!ActionSequence} A self reference. + * @throws {error.InvalidArgumentError} If the key is not a valid modifier + * key. + */ + keyDown(key) { + checkModifierKey(key); + return this.scheduleKeyboardAction_('keyDown', [key]); + } + + /** + * Performs a modifier key release. The release is targetted at the currently + * focused element. + * @param {!input.Key} key The modifier key to release. Must be one of + * {ALT, CONTROL, SHIFT, COMMAND, META}. + * @return {!ActionSequence} A self reference. + * @throws {error.InvalidArgumentError} If the key is not a valid modifier + * key. + */ + keyUp(key) { + checkModifierKey(key); + return this.scheduleKeyboardAction_('keyUp', [key]); + } + + /** + * Simulates typing multiple keys. Each modifier key encountered in the + * sequence will not be released until it is encountered again. All key events + * will be targetted at the currently focused element. + * + * @param {...(string|!input.Key|!Array<(string|!input.Key)>)} var_args + * The keys to type. + * @return {!ActionSequence} A self reference. + * @throws {Error} If the key is not a valid modifier key. + */ + sendKeys(var_args) { + let keys = flatten(arguments); + return this.scheduleKeyboardAction_('sendKeys', keys); + } +} + + +/** + * Class for defining sequences of user touch interactions. Each sequence + * will not be executed until {@link #perform} is called. + * + * Example: + * + * new TouchSequence(driver). + * tapAndHold({x: 0, y: 0}). + * move({x: 3, y: 4}). + * release({x: 10, y: 10}). + * perform(); + * + */ +class TouchSequence { + /** + * @param {!./webdriver.WebDriver} driver The driver that should be used to + * perform this action sequence. + */ + constructor(driver) { + /** @private {!./webdriver.WebDriver} */ + this.driver_ = driver; + + /** @private {!Array<{description: string, command: !command.Command}>} */ + this.actions_ = []; + } + + /** + * Schedules an action to be executed each time {@link #perform} is called on + * this instance. + * @param {string} description A description of the command. + * @param {!command.Command} command The command. + * @private + */ + schedule_(description, command) { + this.actions_.push({ + description: description, + command: command + }); + } + + /** + * Executes this action sequence. + * @return {!./promise.Promise} A promise that will be resolved once + * this sequence has completed. + */ + perform() { + // Make a protected copy of the scheduled actions. This will protect against + // users defining additional commands before this sequence is actually + // executed. + let actions = this.actions_.concat(); + let driver = this.driver_; + return driver.controlFlow().execute(function() { + actions.forEach(function(action) { + driver.schedule(action.command, action.description); + }); + }, 'TouchSequence.perform'); + } + + /** + * Taps an element. + * + * @param {!./webdriver.WebElement} elem The element to tap. + * @return {!TouchSequence} A self reference. + */ + tap(elem) { + let cmd = new command.Command(command.Name.TOUCH_SINGLE_TAP). + setParameter('element', elem.getId()); + + this.schedule_('tap', cmd); + return this; + } + + /** + * Double taps an element. + * + * @param {!./webdriver.WebElement} elem The element to double tap. + * @return {!TouchSequence} A self reference. + */ + doubleTap(elem) { + let cmd = new command.Command(command.Name.TOUCH_DOUBLE_TAP). + setParameter('element', elem.getId()); + + this.schedule_('doubleTap', cmd); + return this; + } + + /** + * Long press on an element. + * + * @param {!./webdriver.WebElement} elem The element to long press. + * @return {!TouchSequence} A self reference. + */ + longPress(elem) { + let cmd = new command.Command(command.Name.TOUCH_LONG_PRESS). + setParameter('element', elem.getId()); + + this.schedule_('longPress', cmd); + return this; + } + + /** + * Touch down at the given location. + * + * @param {{x: number, y: number}} location The location to touch down at. + * @return {!TouchSequence} A self reference. + */ + tapAndHold(location) { + let cmd = new command.Command(command.Name.TOUCH_DOWN). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('tapAndHold', cmd); + return this; + } + + /** + * Move a held {@linkplain #tapAndHold touch} to the specified location. + * + * @param {{x: number, y: number}} location The location to move to. + * @return {!TouchSequence} A self reference. + */ + move(location) { + let cmd = new command.Command(command.Name.TOUCH_MOVE). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('move', cmd); + return this; + } + + /** + * Release a held {@linkplain #tapAndHold touch} at the specified location. + * + * @param {{x: number, y: number}} location The location to release at. + * @return {!TouchSequence} A self reference. + */ + release(location) { + let cmd = new command.Command(command.Name.TOUCH_UP). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('release', cmd); + return this; + } + + /** + * Scrolls the touch screen by the given offset. + * + * @param {{x: number, y: number}} offset The offset to scroll to. + * @return {!TouchSequence} A self reference. + */ + scroll(offset) { + let cmd = new command.Command(command.Name.TOUCH_SCROLL). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y); + + this.schedule_('scroll', cmd); + return this; + } + + /** + * Scrolls the touch screen, starting on `elem` and moving by the specified + * offset. + * + * @param {!./webdriver.WebElement} elem The element where scroll starts. + * @param {{x: number, y: number}} offset The offset to scroll to. + * @return {!TouchSequence} A self reference. + */ + scrollFromElement(elem, offset) { + let cmd = new command.Command(command.Name.TOUCH_SCROLL). + setParameter('element', elem.getId()). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y); + + this.schedule_('scrollFromElement', cmd); + return this; + } + + /** + * Flick, starting anywhere on the screen, at speed xspeed and yspeed. + * + * @param {{xspeed: number, yspeed: number}} speed The speed to flick in each + direction, in pixels per second. + * @return {!TouchSequence} A self reference. + */ + flick(speed) { + let cmd = new command.Command(command.Name.TOUCH_FLICK). + setParameter('xspeed', speed.xspeed). + setParameter('yspeed', speed.yspeed); + + this.schedule_('flick', cmd); + return this; + } + + /** + * Flick starting at elem and moving by x and y at specified speed. + * + * @param {!./webdriver.WebElement} elem The element where flick starts. + * @param {{x: number, y: number}} offset The offset to flick to. + * @param {number} speed The speed to flick at in pixels per second. + * @return {!TouchSequence} A self reference. + */ + flickElement(elem, offset, speed) { + let cmd = new command.Command(command.Name.TOUCH_FLICK). + setParameter('element', elem.getId()). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y). + setParameter('speed', speed); + + this.schedule_('flickElement', cmd); + return this; + } +} + + +// PUBLIC API + +exports.ActionSequence = ActionSequence; +exports.TouchSequence = TouchSequence; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/by.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/by.js new file mode 100644 index 0000000..4d77b99 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/by.js @@ -0,0 +1,276 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * @fileoverview Factory methods for the supported locator strategies. + */ + +/** + * Short-hand expressions for the primary element locator strategies. + * For example the following two statements are equivalent: + * + * var e1 = driver.findElement(By.id('foo')); + * var e2 = driver.findElement({id: 'foo'}); + * + * Care should be taken when using JavaScript minifiers (such as the + * Closure compiler), as locator hashes will always be parsed using + * the un-obfuscated properties listed. + * + * @typedef {( + * {className: string}| + * {css: string}| + * {id: string}| + * {js: string}| + * {linkText: string}| + * {name: string}| + * {partialLinkText: string}| + * {tagName: string}| + * {xpath: string})} + */ +var ByHash; + + +/** + * Error thrown if an invalid character is encountered while escaping a CSS + * identifier. + * @see https://drafts.csswg.org/cssom/#serialize-an-identifier + */ +class InvalidCharacterError extends Error { + constructor() { + super(); + this.name = this.constructor.name; + } +} + + +/** + * Escapes a CSS string. + * @param {string} css the string to escape. + * @return {string} the escaped string. + * @throws {TypeError} if the input value is not a string. + * @throws {InvalidCharacterError} if the string contains an invalid character. + * @see https://drafts.csswg.org/cssom/#serialize-an-identifier + */ +function escapeCss(css) { + if (typeof css !== 'string') { + throw new TypeError('input must be a string'); + } + let ret = ''; + const n = css.length; + for (let i = 0; i < n; i++) { + const c = css.charCodeAt(i); + if (c == 0x0) { + throw new InvalidCharacterError(); + } + + if ((c >= 0x0001 && c <= 0x001F) + || c == 0x007F + || (i == 0 && c >= 0x0030 && c <= 0x0039) + || (i == 1 && c >= 0x0030 && c <= 0x0039 + && css.charCodeAt(0) == 0x002D)) { + ret += '\\' + c.toString(16); + continue; + } + + if (i == 0 && c == 0x002D && n == 1) { + ret += '\\' + css.charAt(i); + continue; + } + + if (c >= 0x0080 + || c == 0x002D // - + || c == 0x005F // _ + || (c >= 0x0030 && c <= 0x0039) // [0-9] + || (c >= 0x0041 && c <= 0x005A) // [A-Z] + || (c >= 0x0061 && c <= 0x007A)) { // [a-z] + ret += css.charAt(i); + continue; + } + + ret += '\\' + css.charAt(i); + } + return ret; +} + + +/** + * Describes a mechanism for locating an element on the page. + * @final + */ +class By { + /** + * @param {string} using the name of the location strategy to use. + * @param {string} value the value to search for. + */ + constructor(using, value) { + /** @type {string} */ + this.using = using; + + /** @type {string} */ + this.value = value; + } + + /** + * Locates elements that have a specific class name. + * + * @param {string} name The class name to search for. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes + * @see http://www.w3.org/TR/CSS2/selector.html#class-html + */ + static className(name) { + let names = name.split(/\s+/g) + .filter(s => s.length > 0) + .map(s => escapeCss(s)); + return By.css('.' + names.join('.')); + } + + /** + * Locates elements using a CSS selector. + * + * @param {string} selector The CSS selector to use. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/CSS2/selector.html + */ + static css(selector) { + return new By('css selector', selector); + } + + /** + * Locates eleemnts by the ID attribute. This locator uses the CSS selector + * `*[id="$ID"]`, _not_ `document.getElementById`. + * + * @param {string} id The ID to search for. + * @return {!By} The new locator. + */ + static id(id) { + return By.css('*[id="' + escapeCss(id) + '"]'); + } + + /** + * Locates link elements whose + * {@linkplain webdriver.WebElement#getText visible text} matches the given + * string. + * + * @param {string} text The link text to search for. + * @return {!By} The new locator. + */ + static linkText(text) { + return new By('link text', text); + } + + /** + * Locates an elements by evaluating a + * {@linkplain webdriver.WebDriver#executeScript JavaScript expression}. + * The result of this expression must be an element or list of elements. + * + * @param {!(string|Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {function(!./webdriver.WebDriver): !./promise.Promise} + * A new JavaScript-based locator function. + */ + static js(script, var_args) { + let args = Array.prototype.slice.call(arguments, 0); + return function(driver) { + return driver.executeScript.apply(driver, args); + }; + } + + /** + * Locates elements whose `name` attribute has the given value. + * + * @param {string} name The name attribute to search for. + * @return {!By} The new locator. + */ + static name(name) { + return By.css('*[name="' + escapeCss(name) + '"]'); + } + + /** + * Locates link elements whose + * {@linkplain webdriver.WebElement#getText visible text} contains the given + * substring. + * + * @param {string} text The substring to check for in a link's visible text. + * @return {!By} The new locator. + */ + static partialLinkText(text) { + return new By('partial link text', text); + } + + /** + * Locates elements with a given tag name. + * + * @param {string} name The tag name to search for. + * @return {!By} The new locator. + * @deprecated Use {@link By.css() By.css(tagName)} instead. + */ + static tagName(name) { + return By.css(name); + } + + /** + * Locates elements matching a XPath selector. Care should be taken when + * using an XPath selector with a {@link webdriver.WebElement} as WebDriver + * will respect the context in the specified in the selector. For example, + * given the selector `//div`, WebDriver will search from the document root + * regardless of whether the locator was used with a WebElement. + * + * @param {string} xpath The XPath selector to use. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/xpath/ + */ + static xpath(xpath) { + return new By('xpath', xpath); + } + + /** @override */ + toString() { + // The static By.name() overrides this.constructor.name. Shame... + return `By(${this.using}, ${this.value})`; + } +} + + +/** + * Checks if a value is a valid locator. + * @param {!(By|Function|ByHash)} locator The value to check. + * @return {!(By|Function)} The valid locator. + * @throws {TypeError} If the given value does not define a valid locator + * strategy. + */ +function check(locator) { + if (locator instanceof By || typeof locator === 'function') { + return locator; + } + for (let key in locator) { + if (locator.hasOwnProperty(key) && By.hasOwnProperty(key)) { + return By[key](locator[key]); + } + } + throw new TypeError('Invalid locator'); +} + + + +// PUBLIC API + + +exports.By = By; +exports.checkedLocator = check; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/capabilities.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/capabilities.js new file mode 100644 index 0000000..d5333fe --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/capabilities.js @@ -0,0 +1,404 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * @fileoverview Defines types related to describing the capabilities of a + * WebDriver session. + */ + +const Symbols = require('./symbols'); + + +/** + * Recognized browser names. + * @enum {string} + */ +const Browser = { + ANDROID: 'android', + CHROME: 'chrome', + EDGE: 'MicrosoftEdge', + FIREFOX: 'firefox', + IE: 'internet explorer', + INTERNET_EXPLORER: 'internet explorer', + IPAD: 'iPad', + IPHONE: 'iPhone', + OPERA: 'opera', + PHANTOM_JS: 'phantomjs', + SAFARI: 'safari', + HTMLUNIT: 'htmlunit' +}; + + +/** + * Common Capability keys. + * @enum {string} + */ +const Capability = { + + /** + * Indicates whether a driver should accept all SSL certs by default. This + * capability only applies when requesting a new session. To query whether + * a driver can handle insecure SSL certs, see {@link #SECURE_SSL}. + */ + ACCEPT_SSL_CERTS: 'acceptSslCerts', + + + /** + * The browser name. Common browser names are defined in the {@link Browser} + * enum. + */ + BROWSER_NAME: 'browserName', + + /** + * Defines how elements should be scrolled into the viewport for interaction. + * This capability will be set to zero (0) if elements are aligned with the + * top of the viewport, or one (1) if aligned with the bottom. The default + * behavior is to align with the top of the viewport. + */ + ELEMENT_SCROLL_BEHAVIOR: 'elementScrollBehavior', + + /** + * Whether the driver is capable of handling modal alerts (e.g. alert, + * confirm, prompt). To define how a driver should handle alerts, + * use {@link #UNEXPECTED_ALERT_BEHAVIOR}. + */ + HANDLES_ALERTS: 'handlesAlerts', + + /** + * Key for the logging driver logging preferences. + */ + LOGGING_PREFS: 'loggingPrefs', + + /** + * Whether this session generates native events when simulating user input. + */ + NATIVE_EVENTS: 'nativeEvents', + + /** + * Describes the platform the browser is running on. Will be one of + * ANDROID, IOS, LINUX, MAC, UNIX, or WINDOWS. When requesting a + * session, ANY may be used to indicate no platform preference (this is + * semantically equivalent to omitting the platform capability). + */ + PLATFORM: 'platform', + + /** + * Describes the proxy configuration to use for a new WebDriver session. + */ + PROXY: 'proxy', + + /** Whether the driver supports changing the brower's orientation. */ + ROTATABLE: 'rotatable', + + /** + * Whether a driver is only capable of handling secure SSL certs. To request + * that a driver accept insecure SSL certs by default, use + * {@link #ACCEPT_SSL_CERTS}. + */ + SECURE_SSL: 'secureSsl', + + /** Whether the driver supports manipulating the app cache. */ + SUPPORTS_APPLICATION_CACHE: 'applicationCacheEnabled', + + /** Whether the driver supports locating elements with CSS selectors. */ + SUPPORTS_CSS_SELECTORS: 'cssSelectorsEnabled', + + /** Whether the browser supports JavaScript. */ + SUPPORTS_JAVASCRIPT: 'javascriptEnabled', + + /** Whether the driver supports controlling the browser's location info. */ + SUPPORTS_LOCATION_CONTEXT: 'locationContextEnabled', + + /** Whether the driver supports taking screenshots. */ + TAKES_SCREENSHOT: 'takesScreenshot', + + /** + * Defines how the driver should handle unexpected alerts. The value should + * be one of "accept", "dismiss", or "ignore. + */ + UNEXPECTED_ALERT_BEHAVIOR: 'unexpectedAlertBehavior', + + /** Defines the browser version. */ + VERSION: 'version' +}; + + +/** + * Describes how a proxy should be configured for a WebDriver session. + * Proxy configuration object, as defined by the WebDriver wire protocol. + * @typedef {( + * {proxyType: string}| + * {proxyType: string, + * proxyAutoconfigUrl: string}| + * {proxyType: string, + * ftpProxy: string, + * httpProxy: string, + * sslProxy: string, + * noProxy: string})} + */ +var ProxyConfig; + + +/** + * Converts a generic hash object to a map. + * @param {!Object} hash The hash object. + * @return {!Map} The converted map. + */ +function toMap(hash) { + let m = new Map; + for (let key in hash) { + if (hash.hasOwnProperty(key)) { + m.set(key, hash[key]); + } + } + return m; +} + + +/** + * Describes a set of capabilities for a WebDriver session. + */ +class Capabilities extends Map { + /** + * @param {(Capabilities|Map|Object)=} opt_other Another set of + * capabilities to initialize this instance from. + */ + constructor(opt_other) { + if (opt_other && !(opt_other instanceof Map)) { + opt_other = toMap(opt_other); + } + super(opt_other); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Android. + */ + static android() { + return new Capabilities() + .set(Capability.BROWSER_NAME, Browser.ANDROID) + .set(Capability.PLATFORM, 'ANDROID'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Chrome. + */ + static chrome() { + return new Capabilities().set(Capability.BROWSER_NAME, Browser.CHROME); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Microsoft Edge. + */ + static edge() { + return new Capabilities() + .set(Capability.BROWSER_NAME, Browser.EDGE) + .set(Capability.PLATFORM, 'WINDOWS'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Firefox. + */ + static firefox() { + return new Capabilities().set(Capability.BROWSER_NAME, Browser.FIREFOX); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Internet Explorer. + */ + static ie() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.INTERNET_EXPLORER). + set(Capability.PLATFORM, 'WINDOWS'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for iPad. + */ + static ipad() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.IPAD). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for iPhone. + */ + static iphone() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.IPHONE). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Opera. + */ + static opera() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.OPERA); + } + + /** + * @return {!Capabilities} A basic set of capabilities for PhantomJS. + */ + static phantomjs() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.PHANTOM_JS); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Safari. + */ + static safari() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.SAFARI). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for HTMLUnit. + */ + static htmlunit() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.HTMLUNIT); + } + + /** + * @return {!Capabilities} A basic set of capabilities for HTMLUnit + * with enabled Javascript. + */ + static htmlunitwithjs() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.HTMLUNIT). + set(Capability.SUPPORTS_JAVASCRIPT, true); + } + + /** + * @return {!Object} The JSON representation of this instance. + * Note, the returned object may contain nested promised values. + */ + [Symbols.serialize]() { + let ret = {}; + for (let key of this.keys()) { + let cap = this.get(key); + if (cap) { + ret[key] = cap; + } + } + return ret; + } + + /** + * Merges another set of capabilities into this instance. + * @param {!(Capabilities|Map|Object)} other The other + * set of capabilities to merge. + * @return {!Capabilities} A self reference. + */ + merge(other) { + if (!other) { + throw new TypeError('no capabilities provided for merge'); + } + + if (!(other instanceof Map)) { + other = toMap(other); + } + + for (let key of other.keys()) { + this.set(key, other.get(key)); + } + + return this; + } + + /** + * @param {string} key The capability key. + * @param {*} value The capability value. + * @return {!Capabilities} A self reference. + * @throws {TypeError} If the `key` is not a string. + * @override + */ + set(key, value) { + if (typeof key !== 'string') { + throw new TypeError('Capability keys must be strings: ' + typeof key); + } + super.set(key, value); + return this; + } + + /** + * Sets the logging preferences. Preferences may be specified as a + * {@link ./logging.Preferences} instance, or a as a map of log-type to + * log-level. + * @param {!(./logging.Preferences|Object)} prefs The logging + * preferences. + * @return {!Capabilities} A self reference. + */ + setLoggingPrefs(prefs) { + return this.set(Capability.LOGGING_PREFS, prefs); + } + + /** + * Sets the proxy configuration for this instance. + * @param {ProxyConfig} proxy The desired proxy configuration. + * @return {!Capabilities} A self reference. + */ + setProxy(proxy) { + return this.set(Capability.PROXY, proxy); + } + + /** + * Sets whether native events should be used. + * @param {boolean} enabled Whether to enable native events. + * @return {!Capabilities} A self reference. + */ + setEnableNativeEvents(enabled) { + return this.set(Capability.NATIVE_EVENTS, enabled); + } + + /** + * Sets how elements should be scrolled into view for interaction. + * @param {number} behavior The desired scroll behavior: either 0 to align + * with the top of the viewport or 1 to align with the bottom. + * @return {!Capabilities} A self reference. + */ + setScrollBehavior(behavior) { + return this.set(Capability.ELEMENT_SCROLL_BEHAVIOR, behavior); + } + + /** + * Sets the default action to take with an unexpected alert before returning + * an error. + * @param {string} behavior The desired behavior; should be "accept", + * "dismiss", or "ignore". Defaults to "dismiss". + * @return {!Capabilities} A self reference. + */ + setAlertBehavior(behavior) { + return this.set(Capability.UNEXPECTED_ALERT_BEHAVIOR, behavior); + } +} + + +// PUBLIC API + + +exports.Browser = Browser; +exports.Capabilities = Capabilities; +exports.Capability = Capability; + +/** @typedef {ProxyConfig} */ +exports.ProxyConfig = ProxyConfig; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/command.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/command.js new file mode 100644 index 0000000..188167f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/command.js @@ -0,0 +1,263 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Contains several classes for handling commands. + */ + +'use strict'; + +const promise = require('./promise'); + + +/** + * Describes a command to execute. + * @final + */ +class Command { + /** @param {string} name The name of this command. */ + constructor(name) { + /** @private {string} */ + this.name_ = name; + + /** @private {!Object<*>} */ + this.parameters_ = {}; + } + + /** @return {string} This command's name. */ + getName() { + return this.name_; + } + + /** + * Sets a parameter to send with this command. + * @param {string} name The parameter name. + * @param {*} value The parameter value. + * @return {!Command} A self reference. + */ + setParameter(name, value) { + this.parameters_[name] = value; + return this; + } + + /** + * Sets the parameters for this command. + * @param {!Object<*>} parameters The command parameters. + * @return {!Command} A self reference. + */ + setParameters(parameters) { + this.parameters_ = parameters; + return this; + } + + /** + * Returns a named command parameter. + * @param {string} key The parameter key to look up. + * @return {*} The parameter value, or undefined if it has not been set. + */ + getParameter(key) { + return this.parameters_[key]; + } + + /** + * @return {!Object<*>} The parameters to send with this command. + */ + getParameters() { + return this.parameters_; + } +} + + +/** + * Enumeration of predefined names command names that all command processors + * will support. + * @enum {string} + */ +// TODO: Delete obsolete command names. +const Name = { + GET_SERVER_STATUS: 'getStatus', + + NEW_SESSION: 'newSession', + GET_SESSIONS: 'getSessions', + DESCRIBE_SESSION: 'getSessionCapabilities', + + CLOSE: 'close', + QUIT: 'quit', + + GET_CURRENT_URL: 'getCurrentUrl', + GET: 'get', + GO_BACK: 'goBack', + GO_FORWARD: 'goForward', + REFRESH: 'refresh', + + ADD_COOKIE: 'addCookie', + GET_COOKIE: 'getCookie', + GET_ALL_COOKIES: 'getCookies', + DELETE_COOKIE: 'deleteCookie', + DELETE_ALL_COOKIES: 'deleteAllCookies', + + GET_ACTIVE_ELEMENT: 'getActiveElement', + FIND_ELEMENT: 'findElement', + FIND_ELEMENTS: 'findElements', + FIND_CHILD_ELEMENT: 'findChildElement', + FIND_CHILD_ELEMENTS: 'findChildElements', + + CLEAR_ELEMENT: 'clearElement', + CLICK_ELEMENT: 'clickElement', + SEND_KEYS_TO_ELEMENT: 'sendKeysToElement', + SUBMIT_ELEMENT: 'submitElement', + + GET_CURRENT_WINDOW_HANDLE: 'getCurrentWindowHandle', + GET_WINDOW_HANDLES: 'getWindowHandles', + GET_WINDOW_POSITION: 'getWindowPosition', + SET_WINDOW_POSITION: 'setWindowPosition', + GET_WINDOW_SIZE: 'getWindowSize', + SET_WINDOW_SIZE: 'setWindowSize', + MAXIMIZE_WINDOW: 'maximizeWindow', + + SWITCH_TO_WINDOW: 'switchToWindow', + SWITCH_TO_FRAME: 'switchToFrame', + GET_PAGE_SOURCE: 'getPageSource', + GET_TITLE: 'getTitle', + + EXECUTE_SCRIPT: 'executeScript', + EXECUTE_ASYNC_SCRIPT: 'executeAsyncScript', + + GET_ELEMENT_TEXT: 'getElementText', + GET_ELEMENT_TAG_NAME: 'getElementTagName', + IS_ELEMENT_SELECTED: 'isElementSelected', + IS_ELEMENT_ENABLED: 'isElementEnabled', + IS_ELEMENT_DISPLAYED: 'isElementDisplayed', + GET_ELEMENT_LOCATION: 'getElementLocation', + GET_ELEMENT_LOCATION_IN_VIEW: 'getElementLocationOnceScrolledIntoView', + GET_ELEMENT_SIZE: 'getElementSize', + GET_ELEMENT_ATTRIBUTE: 'getElementAttribute', + GET_ELEMENT_VALUE_OF_CSS_PROPERTY: 'getElementValueOfCssProperty', + ELEMENT_EQUALS: 'elementEquals', + + SCREENSHOT: 'screenshot', + TAKE_ELEMENT_SCREENSHOT: 'takeElementScreenshot', + IMPLICITLY_WAIT: 'implicitlyWait', + SET_SCRIPT_TIMEOUT: 'setScriptTimeout', + SET_TIMEOUT: 'setTimeout', + + ACCEPT_ALERT: 'acceptAlert', + DISMISS_ALERT: 'dismissAlert', + GET_ALERT_TEXT: 'getAlertText', + SET_ALERT_TEXT: 'setAlertValue', + + EXECUTE_SQL: 'executeSQL', + GET_LOCATION: 'getLocation', + SET_LOCATION: 'setLocation', + GET_APP_CACHE: 'getAppCache', + GET_APP_CACHE_STATUS: 'getStatus', + CLEAR_APP_CACHE: 'clearAppCache', + IS_BROWSER_ONLINE: 'isBrowserOnline', + SET_BROWSER_ONLINE: 'setBrowserOnline', + + GET_LOCAL_STORAGE_ITEM: 'getLocalStorageItem', + GET_LOCAL_STORAGE_KEYS: 'getLocalStorageKeys', + SET_LOCAL_STORAGE_ITEM: 'setLocalStorageItem', + REMOVE_LOCAL_STORAGE_ITEM: 'removeLocalStorageItem', + CLEAR_LOCAL_STORAGE: 'clearLocalStorage', + GET_LOCAL_STORAGE_SIZE: 'getLocalStorageSize', + + GET_SESSION_STORAGE_ITEM: 'getSessionStorageItem', + GET_SESSION_STORAGE_KEYS: 'getSessionStorageKey', + SET_SESSION_STORAGE_ITEM: 'setSessionStorageItem', + REMOVE_SESSION_STORAGE_ITEM: 'removeSessionStorageItem', + CLEAR_SESSION_STORAGE: 'clearSessionStorage', + GET_SESSION_STORAGE_SIZE: 'getSessionStorageSize', + + SET_SCREEN_ORIENTATION: 'setScreenOrientation', + GET_SCREEN_ORIENTATION: 'getScreenOrientation', + + // These belong to the Advanced user interactions - an element is + // optional for these commands. + CLICK: 'mouseClick', + DOUBLE_CLICK: 'mouseDoubleClick', + MOUSE_DOWN: 'mouseButtonDown', + MOUSE_UP: 'mouseButtonUp', + MOVE_TO: 'mouseMoveTo', + SEND_KEYS_TO_ACTIVE_ELEMENT: 'sendKeysToActiveElement', + + // These belong to the Advanced Touch API + TOUCH_SINGLE_TAP: 'touchSingleTap', + TOUCH_DOWN: 'touchDown', + TOUCH_UP: 'touchUp', + TOUCH_MOVE: 'touchMove', + TOUCH_SCROLL: 'touchScroll', + TOUCH_DOUBLE_TAP: 'touchDoubleTap', + TOUCH_LONG_PRESS: 'touchLongPress', + TOUCH_FLICK: 'touchFlick', + + GET_AVAILABLE_LOG_TYPES: 'getAvailableLogTypes', + GET_LOG: 'getLog', + GET_SESSION_LOGS: 'getSessionLogs', + + // Non-standard commands used by the standalone Selenium server. + UPLOAD_FILE: 'uploadFile' +}; + + + +/** + * Handles the execution of WebDriver {@link Command commands}. + * @interface + */ +class Executor { + /** + * Executes the given {@code command}. If there is an error executing the + * command, the provided callback will be invoked with the offending error. + * Otherwise, the callback will be invoked with a null Error and non-null + * response object. + * + * @param {!Command} command The command to execute. + * @return {!promise.Promise} A promise that will be fulfilled with + * the command result. + */ + execute(command) {} +} + + +/** + * Wraps a promised {@link Executor}, ensuring no commands are executed until + * the wrapped executor has been fully resolved. + * @implements {Executor} + */ +class DeferredExecutor { + /** + * @param {!promise.Promise} delegate The promised delegate, which + * may be provided by any promise-like thenable object. + */ + constructor(delegate) { + /** @override */ + this.execute = function(command) { + return delegate.then(executor => executor.execute(command)); + }; + } +} + + + +// PUBLIC API + + +exports.Command = Command; +exports.Name = Name; +exports.Executor = Executor; +exports.DeferredExecutor = DeferredExecutor; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/devmode.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/devmode.js new file mode 100644 index 0000000..4862c6a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/devmode.js @@ -0,0 +1,34 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Module used to detect if scripts are loaded from the Selenium + * project repo instead of from a deployed package. + */ + +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +/** + * @const {boolean} + */ +module.exports = (function() { + let buildDescFile = path.join(__dirname, '..', '..', 'build.desc'); + return fs.existsSync(buildDescFile); +})(); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/events.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/events.js new file mode 100644 index 0000000..fc5cfa6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/events.js @@ -0,0 +1,210 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * Describes an event listener registered on an {@linkplain EventEmitter}. + */ +class Listener { + /** + * @param {!Function} fn The acutal listener function. + * @param {(Object|undefined)} scope The object in whose scope to invoke the + * listener. + * @param {boolean} oneshot Whether this listener should only be used once. + */ + constructor(fn, scope, oneshot) { + Object.defineProperties(this, { + fn: {value: fn}, + scope: {value: scope}, + oneshot: {value: oneshot} + }); + } +} + + +/** @type {!WeakMap>>} */ +const EVENTS = new WeakMap; + + +/** + * Object that can emit events for others to listen for. + */ +class EventEmitter { + /** + * Fires an event and calls all listeners. + * @param {string} type The type of event to emit. + * @param {...*} var_args Any arguments to pass to each listener. + */ + emit(type, var_args) { + let events = EVENTS.get(this); + if (!events) { + return; + } + + let args = Array.prototype.slice.call(arguments, 1); + + let listeners = events.get(type); + if (listeners) { + for (let listener of listeners) { + listener.fn.apply(listener.scope, args); + if (listener.oneshot) { + listeners.delete(listener); + } + } + } + } + + /** + * Returns a mutable list of listeners for a specific type of event. + * @param {string} type The type of event to retrieve the listeners for. + * @return {!Set} The registered listeners for the given event + * type. + */ + listeners(type) { + let events = EVENTS.get(this); + if (!events) { + events = new Map; + EVENTS.set(this, events); + } + + let listeners = events.get(type); + if (!listeners) { + listeners = new Set; + events.set(type, listeners); + } + return listeners; + } + + /** + * Registers a listener. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @param {boolean=} opt_oneshot Whether the listener should b (e removed after + * the first event is fired. + * @return {!EventEmitter} A self reference. + * @private + */ + addListener_(type, fn, opt_self, opt_oneshot) { + let listeners = this.listeners(type); + for (let listener of listeners) { + if (listener.fn === fn) { + return this; + } + } + listeners.add(new Listener(fn, opt_self || undefined, !!opt_oneshot)); + return this; + } + + /** + * Registers a listener. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + addListener(type, fn, opt_self) { + return this.addListener_(type, fn, opt_self, false); + } + + /** + * Registers a one-time listener which will be called only the first time an + * event is emitted, after which it will be removed. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + once(type, fn, opt_self) { + return this.addListener_(type, fn, opt_self, true); + } + + /** + * An alias for {@link #addListener() addListener()}. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + on(type, fn, opt_self) { + return this.addListener(type, fn, opt_self); + } + + /** + * Removes a previously registered event listener. + * @param {string} type The type of event to unregister. + * @param {!Function} listenerFn The handler function to remove. + * @return {!EventEmitter} A self reference. + */ + removeListener(type, listenerFn) { + if (typeof type !== 'string' || typeof listenerFn !== 'function') { + throw TypeError('invalid args: expected (string, function), got (' + + (typeof type) + ', ' + (typeof listenerFn) + ')'); + } + + let events = EVENTS.get(this); + if (!events) { + return this; + } + + let listeners = events.get(type); + if (!listeners) { + return this; + } + + let match; + for (let listener of listeners) { + if (listener.fn === listenerFn) { + match = listener; + break; + } + } + if (match) { + listeners.delete(match); + if (!listeners.size) { + events.delete(type); + } + } + return this; + } + + /** + * Removes all listeners for a specific type of event. If no event is + * specified, all listeners across all types will be removed. + * @param {string=} opt_type The type of event to remove listeners from. + * @return {!EventEmitter} A self reference. + */ + removeAllListeners(opt_type) { + let events = EVENTS.get(this); + if (events) { + if (typeof opt_type === 'string') { + events.delete(opt_type); + } else { + EVENTS.delete(this); + } + } + return this; + } +} + + +// PUBLIC API + + +exports.EventEmitter = EventEmitter; +exports.Listener = Listener; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so new file mode 100644 index 0000000000000000000000000000000000000000..916e530f3e1b4a9891ce378204dc75d2ee342dfd GIT binary patch literal 41262 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 R)zuhLe6{Qn1Fk}F{U3r1%dY?c literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so new file mode 100644 index 0000000000000000000000000000000000000000..8e7db8de3f47e756bf6f0c20998a63df90eb5970 GIT binary patch literal 30887 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 a1Inq3y}K| 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 TU`Bk}DP=s>&OSyO<3dOp|Vo3=b3ey32! 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

      mfcxuHgp`a^~wytItMD!G5YHk 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

      %Ilg1ZSh(=OeJVRY13*(US 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

      SaB(zU{3;MZj?T>TLKR&^@&^+7&;(+mO>)p zEsIt!)C~*OkvuG9<+`<;rokvaSkW5Qkhzz{wvo?ZuzM^iHx9YQd`)~STNinjIMzMK zoy+V)O>;sDBvk0Yk>|*dk_=8l=yy8VJ*LG*YfD$TN>inPDZ{sVB`69 zW0F-0@MR%wkQ9hVF+$oaVVoEY#JqK|q_1wvV4KA^2(Gjhx zp^+iavYjLB4EYsvo$~gVFp@<-J^^?1jQa9ykFrVO%&DTat8L_IRRv=*K}}cq*-NK? zHU%?oDl&Lt+^T@#>-!h-3gBB~>lODXCG7BA-3YnVH%2H)v@u`og@E&EB98xvjfCp9P)pKP*ono_!~#*U5z{wRvS6&`@D}fyKc93D2mSU-5~3dizr|f=s5-kXHQqGP;xzHf2Z?hMo*w7j^imkPLkKezkVb@PNxQ>|`wo)yW3cyc}G zH_N<~sOkjTXq7|YnFe_U%lgws>s~0gvQKhFFT4SUYJ9{K2=_CVo1TB`7vQy=zF!1I zTk=}&M4R>4b;XLdBYE8}c4roHfz+7DG*Rwh1Qi2P%Yf;}Mv`D43niPR#?Zr)feA{f zzk%itw0rq{EI6Rd;=5G5XhiV-?_!B!muGUmtV6E5Z)`fMLV3*wN)|AgJY5BeWEtLv zj0)Tf8Qx2*b_ahq@jkrM>}KMa|1{0!4D8_yjN^6~#%X%8=uFaB*82q}3P=*d)fABJ z7o7p^G-hXI>+%N+QLGWou{P zjs|iy+j;$_|Eo58jRN6S9KNN;fqJ)x5j&-#1{PI{e2KP{PgmCaN0xqOM1G;%8&%slO&}vmc*2>j^HRY68{OfM&thxRh zlC)R@a233Zlyt+ZDx)mjVBHa2TN99gs%rzXieEgL)|;2b>O+2+iQYoJiIoSkx&7WITb4koj7xrqPp z%SN|EiNc$5irkgt*53Z@d}|PF{n6g~pVroom-5oXP;umHt|5wP3?`G=`xI7@$&IJg zC*Bp8Bbg50NO53$VrPWs&Wp+ohJ7V3ifiqU%#8W@%J6aTRxAxz%4gC$n#F9nrLK5X zs_EC|VRM7fKevz0I)h$kAOMMIaiiQ-kUkG4*p294%Ndj%U|BrH;*bQYe-`-g_hqsG zq=vk{_d5YlC>qt3Yk*g94;?yR)uuj-jpl{_;O~Qtzj@B_T&wj4ZmKuDjSFu{cmGr{XT}m8==F%*f*6VXjfgItC>?Zu_RU8+&?*6H)jd#=i9W_`u0T)Tj$ze)w)%r zY1x8*C!v-byCZGuc9b@ki;4Y)x59RU&lZ#7@lz{dqOHY*RT|XlI*{IxHcY(AB7Qe} zTiQ-p16pl&16mbZ9I{K)o@%XNsHobESRUnZW^;CnnX1|6eHdzQ2rppbl9fAs0Bcwr zUz4kMIiF+7rQu{Y^Z;`T=P)qW(I}MUT;ZXF4fr?)kin!0K2{Zu#f#DgRbj4ILPMu<&KF)uWSx_ECo}E@wHMTX-L16GPD6 z$BTmi=03SS{84a+N>}k6DkbmlP-&jtp;8*%q0(}Emr8db`At$@=_|7q3jlg#R?3rV z`dcLsAK^WdRBEuQ6cu|cQ)lb#01kfmc36)4W3$7E`Qtlc{ROA40*A9)Or-)3CAPxYlx>K4`1+KAs!dSuWx-n>b#)OlX&F#+THo#cpyNy<-@-Do*?d; zZwZJSK1ZPi)5U1{N@S$wW;3((({}i1qBf6T|1k; zR)!B)e#0jLyL|Ns};7k@K5wT{rdy`7}1Xr z{dhF|0sej5qGI3u*n)q5pdUM<(TH&={2S7%(Qqe(e`EF|{(gl2jw1X4|FhX?kxg=x z2>cGV@_jtQe@6lS_y=!gMBoWlG$O$NV6BWo8!)P-r*D&aFCLS7^2zyc&n_Q6`}EEE zZ+n-Ud)s5H22SJoE2!2T9mjDLM^?U0<8%b3SYO2RNf5@hlGYm@zpB7BB)tC|OSCoM zvGZYG^Uq~|SQoXxT)OmaVZ%qbBDkC%3cy_jX?uFp%O<6iDDD#51X)RE2D0v=4`9$^ z@N9V?u`9s)C@Y`o#kBi;ya8A*Hpk$%I}HNRvm&UK?2#zMEVGx)#znw{tEWkN#ClK} zCZkO`%;R{OErJ!eZWN)yW0mdiy!!>s0%9ON4{(dfMe*NOlKkOa2YB6Pb(qd(S29DI z1z>W}!L79?xPtHJ&lMV$e*7V`r?`e=Ne|Ya>i66OKwwo5popvMY&$nP5&~oUx2r6h z?_O+QY&Rcn7f%h|oGa0?3k!E|OfPjYW@5T3X<}`0TQKjWpe~+woexP?JPB4$t16T8 zYxmq+ziAzAl?m!=3{pOW{VM!~1)@3T+y^ivvrT8=+07oTpDPtAwtTZ7A5dl3vjy^4p6 zPyMSP_;mbsHv7~cO~>_mZGVH8ISR7rr-Pftq+a{_)7Ga!UHsin++8^ersHKWE^$tm z^`dNj9pb^0ID5Ga77>%n5Rgu%0ux-RUb9d0otDHJtORaP(4;~j*;ZNYRN zOuZ;sJOzqB`}&(F+xX%c)AH{M3g)#6$~9~{A&M6Oaj@(TlyEvPn!TgfwxP+t9ra!- zt4O8pbG~S>u%EBL5m8`vkK^fRwg_Xu(J}D4+5W_5m!sv^W~k%3{p8~P=5_;H69Y%X z$gMppc9OP$H(olEvw0m#>>#Nt56nS z&v}`@!~YyDT_?CNb8vcEOuoX&rI7-|`@i1tzW&zx`my)*Bfnl$i}wx6BTB{PLPv{p#B z4Mo+clP$YSZc0%xfa@%yjGqK5GQ4lJ%rH*6RwSZUOB~pxPU+Cw1_;kwt^fyD+>5t5 zBEUUzHn0{}-{`Q45qXWL7H4q;U3jE%)?qP+P^dkP+LL5lz|nzzy}Kd|aoYip#k159 zO^O?Xk^7JdXv1Qp*4pvFOyLo2ag;;!Q3JvypVt1B{eFIfD|?lZNZ%(}cxBE-dnAVP z;6NCpaRFcK@{wc@f9CNR{uzIo zPsg9KWHkEpJ|52NpWY==Jfo7=SmJvA?Wfszj32M-^{=IG&Z5S142>%ZWiP{$`{pRC zn)JH3BO94-X0?QWWjFj{I|UZn9h5cMCbc&8|T5+AFZt) zH!rp?H=jN%A>Sd?b_Z1ES0IDJAT$X#9&~(6P1&@X=)?1!%i`et^@&Ac0F_3_$-x#? zfe+#TaSJHj|8xy=Jez$QW%K&(r}N*w+1=j%+vP*}evS{HzOL8Z1Wto#l7Sg}Cox(S zJxZBoSFXwEW^$~$HRNLUTg{8$CWN}zR12Icii5acj{nyb_RiBoYok#zGwhIbfX6bP ztgAYfq&I2y7t0iumR`(KR;{nE+5k#4*M9HpwBI=#^g1jZ|DCm1yVW}?v<^Ub*G)@- z-J6=ag5r1YV0GPfRY$*!8e7`xYK_*ezFN6m#obOd*Ma9F5YBo|8m!^+(ok3NS0@dF`5jC@ z1W;uANg+!D!L#hZ;z=(yL;`JY*I0t!dp0SZ_8-wDx4iJ@TI*y^Qpy>tW z@qY)kkK^}~Wa_;A<}*gaHi-=cz9caf-d-ZQU0kd1lwrjyWs-+&=0a4vz84z(MyIb4T-}J~EZhmMfPJ)kTY;-S79h z&(HcDo?Dv`Wm&YLtMowrLVOrulto_PY7viEvg}}*jN+7K)1J>jA7iPu(?zHx$JX0E zKIsqIM@J{WbSU99?|~qJnV6l?S-EtzN!Mrc7!~zByEfAC0q<~hyk_?(IzF)E4z3TF zrO@$S-0$aJejSP2%xhIPstvDjvN`kmciB#zmjz=FQ+;|*;e&mZti- zBRTwpdg_BP!mgE5#Y%!~$EH^5*GJTSc72SK*bdVadxn=Kh}+Vbog}FwZgj@nOk8?v z_hYx%eI(9%NUG#nQtx)O6WrZpO^B@MI3?=l{)dpFPJGUsMI(rJ3&IGXENV}4o3vQo zgryl7Wsrv;n9KdZ6VG`un)s|d-7&-vrdv78ljtA6GVX4%dO;(|@UO`nlWG&Jk?r4R z)9r+B4k>_*OTr{qs#k&K$r!D!vCN4LRyt&*$H}{R+I&zK(I>YG8b${T#Hg{ zN<1=~(lSb~0vFq;XfT*oy|w$63ZyI&10Aw;JP#i^#&27MREo8M-M|o_|~! z8(iG@yJI?K5AP@sIkf`agT+r7!E=Cfq(;nGy8O0K>##Q;NR9SImzeQ8*>vet%j^+InhcT-kz z&92VbSiBOmT#lI2F>=(ep3^a+WV=-?PdXaoEG7xv;NBD6GHeuveTrCKmIgMUtP&fg zB`G=V##1G#6&2HZ)pV25{o2oAneT-SZUJ{yP&`RxRJxN+k}y^~v%|U_x>(MYAa@DP$p06)tOVdg?qLt2}fFe@3qcA)lU5am9s2#>5 zFav-X$I!ppSR69|;pBVr-1BM+0%x^n4d)CLY1iwq=V4ith+Ro&o8AE zvad`d$Ao4w>>G*BMf%r}TZEYNea4+0s_(%_0goACK`1maH!LFrJNa2FvI&`V36y(yLhokB25b90)ng8_$g+ea?P4s z8i;Cs^|icvl?b9-*&Rvo!8;c!oy%`ecXPqv$pNjGxJKTKbH#tM!C`s`2WL^Kv&GS( zJK5=-kXf(w({Pc@@08-5Dt_to?$pTVq;_WjJ~OTRT39%hEDqxHvy&?a?eYZW_8kGN zImT61-hcK{NuNtE?wAkUB=G&_0=Jp0LLP7vrHVPgsanPS-wx(4&i&2sxpUrcHbblA z{8mcdQ@-!DIDfrd->#v(Tb^%%v}TTPs^f}oxZ~_74zP3O^(K&?m($x4Y+o#&w^Ptp z$>psIp#siYTL>AKRY7Mkt4|!k%mCekG80$=*j1>R@&)w;h-4-newxnSPy4geAWPEG z4GJ-Fb7!HN=+Mo$x35HugQ7-PAi~(;ks$9s@FN)|pt=KmztF|0T^^C7o$GmabF%nF zZt$1JT$*i8XVa}1A-GzOPS994(oKJOMP9GJ7koz{*2-;Kx}PB~T@gUs4F{(r- zaZ7nui`SFT0=q}}k<{J7cu=K8DfX<4WgW>cH7(4|#NMjMQV{vRtCmU%Yd2s>o@}3b^PPClPVtXS{s4d><390r%j27DqRpLwX=fNpr4@ITFF($?s z5G}+8y*Ucv{<+f4ydW=DJQ}jdzVd_JIGO)uo}kr0Sh;=kjdFoyr3tTWv8osCd_6etc`cGzKt`rHZlTCB$TsFKR;(uWAJVu079P5eYJmm*%A&#wBOGdTF#O z4N0kp9UrA2ZSegWA-I(kb82omCOg6aw>JUe`S`NIZnTc*F)-xGty4IRk_lcsSvC?y z#HX5;WM;3G5hz}_$_TH@IZk~BSS7wVM-;gUDycmxr#AVE6~T?@#(5yG2((tl_KHU2 z3PxnSccm|-VmwCYSC=>{S2PrC5A_^>;w~0`RJW~F7NSNXzJgb7h~?!KO+{=;F`IGj znF*R)8$RobYyj0P9)NdWfB_KdfA{F;16;%hpEc$Y0CB+1hra4ir!(gPgOy{A^=vH_ zUVeemCa~sk|9Qfd1yGj=*L+yS)gdh>`SH>_lm0Q-w^pvhDg!_jtr4KNUtkCr+`o1V zHr5=39rqx#>_Iq~O(yPR;qpdB{!+g`RJ>$+bfqa5j7>=6$l#vcQ1eCm=(Hn9XE#;b z*r{7}`n|K#DlNOp@!8Q)NfqwKH$Ep(Jk3_6OATDTqV2df$fQP`$h*jGu()HmHq>I; zPiEm;ci&h>Fqk{7y$XZd4CeF6O$|588XnC)W%rK4Kp9Ibv7jw}14RL5)9mUFOeVme z2bYDAF)pV^<*f~TcP8AtY8wB(jHe+9=^{qbuGLWZ;rC@Q>CZ}AlV3ukUo1TuNX3u> zj&UzLEbL!6yPnUA;#h@Uu0|Nsk%U|sD55c4qPxdc1WLe5u}P7)8CsinY2COkFYZ_tFDGKOpo26@9kyz{DvUO2q^-Rvy*dGIRrH@0^11i+66#zO~Bw zwo@#(W_MT|H-ZwTaZhsR31)qc8?BK_ALeqITzB#pee_rYAd)QtrLd|%-_ee@gf6TP z+6S*XgI=e9);k{j+&-d3T*jm+y$iytxJX9p?1DM&!!qW`!@|q(u(Yb6rp?%)jGPYm z@eq+AUhQ!azpoHTtI$`1+y$2p1$V0XL`Vv$cssF);^Ay*Vx%hLp_J}abC^scED*Bs zRU`FXh|9H$DvNu)(J$6duH)GNGvW-wYq7XiJBI5ayDfL2S%dv;#xK* z1yC!>GW%@x9Vnn*w1B3pBNETk26JSbu4*O)uLDxbKB~W)3s|dW*WEIk;5C*TO=h6lzRs&a2OoN>tCYYkrwL}Z=uwe! zwcFeDOmMX!C>IvYa1vY>J9<oNW+h-B0THMRZ@MPgh%3)`l-td>cJ!O9+4P@H z$8nk+%&xCzQ@pguWy%<%LdVJV#vA$R8p-TWxxzpT0v&?V>g2K^uLEY7tfA%q$T!zV zih9o0J>8Xy=U{eJckY-ub7_@?$Me=DmHoqmG9W^uN-}y(x2ecez;P1x4>TINdoX zJ2_X#6*s8QBQ%OV+WfqPJ_UaY>kQ(&hl zK)DG80$To%wxr&(0ME_*94wNcqUXTaI(Y;{H7A|qPg`#BZWZ9WSEYOA7LkkC213NC z^Vxe^??Hk*V%l9D2}Ih&PSG-b7{5yb(`oF`@Y3H!vI+-T3wmp|nWUwfWRkwXvjF7R zr)lz(saiW07*>wu$EXZ%BT0{g*c;dRktAi=x%f8xcg7#zokFnb1)V%s6)$2+YT zs0urvATQB!p}O3LLdq<_YKz#S3Q({PU*(TZUhcFyx-p6aTAK%pG=|24tmf~;czOi5 z^jW?d)r~37(TDY^I~^fiZlDwp#F{Uo*zQ7E%%RNeaTt$qp+>hd^i#VzTQL$)DAdT} ze$?68`OabzMBpG!3NEnyoc2S2N)x1@`Gf@yd{looPqW#)3lCzB_}U9!CLv<>n}{Rf z)|_5>*ZX)KrzuE>T?0zPgXtK)#l&Q4+pK^-6zYDCR!DK-OpO~x8R^(|K|#;`FI*sEzQA4n@nX4bAN60iBoO?}Qm2NAlxLUgz>PNQ!R4EuyOxIRJy3%Z1*)$Cc zMnEbpdwcl{?gc_ERcK%8$CcwIirpIU^fS-8_P4ot>8c3t4Zo=yWuL9%SQRu1m%^l?P5~8|3bO2c^>@D4Y})g@hk8;?&tw`mN9|CtBok z@&}GCD@#IP@+tNIMNpQ=L{;6CN{$`F=?pgub^j98Sb#meI#UY2<27J*81vkak&6n1 zp{UAq7JUDTEqqMf02Ud!Hlh6-}-$pyPgM& znD!r&>_*k9^hL_u84MHISy)^|fGRn!KBziBGRSqRhp}WFzQgVgr(iG;& zJy)(wp~{B(IYJHl`C#B0_?DRZ<+J6ZDMZ4X z@Ge?UgXftP=W(mAraRTvj+|0#*;J;cOKVYeA!Jf6L)CRtNQ1Gd$BauPf*}>faYZwm zIv)bpNaiX;{+|8IgKaN`CHoZh=1t_hziZLE#g?tP*oD^dbw?Bnn&HX>mmc(eieTAc z?u6ojEOIpGL&v2iC2Ee!J78LVOwN?BV=-P*78yPn8O0rxt))R2F0YppGXQgqxlmya z6mz|hb4W5(r7s(7SkbF&Y_4)#3s23^SXDIrFqhWDhLa3jq?Y->-ACaf*CMF0jA@Pt zr>|Jp>~Ic4-zlFD>f&tYwr2BWHSt0R@nV~JVJY#V65?sGu{PjXp`v9cN-wY}J3W3- zK#0wuCaQ`|zqO4&hxw-pNQOnAG;8ueWDdS?VAvk-6&ohTG8(#hDYC@s^?VVh1*r!# zPBNu~wjb&8AQ#4uZ>Wa2r7yo+%$D=#H=>=g)Zt>^YlX82i@uF-UH}x2pA#}9sW>^M zpfbIR7fHqg-JFOu95bh0){~Vxn#|rNe8c5p0XY2>-_S-NzRFor+%;;XabD*yj=17_OI+(K? zM*8(%yNh7&cL>joxv?P6k0|SpxK~Vb=&Vv+vbai2s7u#U6jy##j?`TrHC&6XYR2OJ z7ubKrVwbsUZu!~XVii|oX~zz=x*#jdl;+$K>zTG!RlKfSAw*@t2*sAUhOUyA<(qH3 zQLbjW?B)$;MOj5EY%F|H)zb{;i8%%0DQH}a!oyG2>Iu4CO5$*EO7Iw;w)RqoJAfM+6hA_#d@AlCu7x#;q=Sj!Sc7YnrXVUH`+dfJX)Hl zB6&r&#@3cxXq-Mk6fyF$g%T~FRQ5vAd8bb30+AD`CjF(l=n3n2Lhls~v7#Yvg%9~1 zMFyi%FfE~y0q`}>N zMDAs7lzZ;1714ANsRaLp&i&6PK}d0Ee+KZ_U)IT@LeSr(q6)`#To>-uYX zQ$v6S9t_cnLFy^2k<>t)QfTprjF z#e@jic&er5HS6uDYl7|#Q&HqwB^k;!jq^l(qXikdrNU2{F8xR4DBplN1sWBVW zN;rp;*|hkIH)$^^m1`V!Iou3v!qm*tW>7+N)GJ^rYsw}1T0jG+>S1cS%c`n#He)xn ze}>{OMB!(4hsiayKX)?&gw0!S7wN|XTPsIf%(S~e-&qNL#i`4(p)d|CYO;<^JC=~_ zuFe4&LK#W01vYj6D)#Vr49IFPyh4XbBO;E2+wGsUSR-)#*_M`x);)wb@a&S0q?r>QF@(2J|zgc~$m93!K6ohtaC$TOH{Zydrt;Ma% z?KKW1SeSAFS2aAnGZ@ZJm&xNai%Nn;+?|Zvxv&gT%NBM}P-{HCUQW}(@YO(ZW zNzD9Wr&SYWE#>)?YosgTI(&RKvdUdrPwgQW7h}nVFG(rmR(3KfT>R9TD+-qkPf?R% z%fZCbP9c=L7B?ITFcj3N8{eTMm3b?j)D5(~V#l0h+MXSY;;NzFJVcnTBwY0bA&l9I zRpCi6)Kb*r@8&X%7ws|I+bj6eTxOIvrtCA0$}wg8ITP>M%>fRtmlhRO2e2zvmC?nR<1Fcv5W?q^jL*w%{86zcE$XjGF|UnjZ$|!oh{;nz*I2{&GHXX6V#3&R#t3e3;k#+Qr5DbNJ7@+^lcc z&VReONZ|?oeOTMyy|}2=nh*EkXT84fH#~prtEZM|`(+5t#~2on=jCH=!t>}HGxJ5~ zkLcgWm&l=PtKQm<3=2Cr1p74AvrD;4un{`}gD_Yz^H&dd%_lg1y>wDpb>8&+;*rwO z>~`(}$Nqw%$=Ag4^=Y?L70pgGj_(0c1XH!i7s(6F0Sg$S%N?tN~TU^dblJ+!Oz{L0K6~}`0 z^7Ds+;8dQIv-Fq$L*2W!wUH!=!r%QX3eB8nBwGmZ-Oz3y0kW-akXQ-Y-3M4bbraND zs5B~J%yj#|zZsGDTU80WclMp$?M7Ldk&%&+k&%%Rk!kcLOYi(WJEzmxb#@XaYp%@f zN0GzW_8JD^{R75Bem<#^MY(WgowXnwW-d~`T-QDkk+L6!7>|;Ym;0o zs9LqzimFEkwnX-6*$?1-vF57fP*zad)mi;as@AEB)T%F0stLtFdQ>gPOjUvF_v*kR zn{^c+nCd#9kR_^sF%s8-$9KyrkW^OGfyksv6+jdZb>LAsQaKSq_STvZDXA;*M8>X# zC>2Ci0QGfR2e7fSE2oMqh997W5GXZ7Fqp0AsljpM%6)!A=`(Ajo|v*1KzKF?k!m7D zWgkxKdghEZj!43Hu4MIEZf6x^?f2MdCoHJ67H+QN6-`kXa33m_Ci3B7+vk{2=6oBU z1%)&&+&W}9PA|gcDhp?H^v0Xj80~1g=2yz#cVrgN8*B)0lA{M4_=B8UF2#e*r4mlS zL503XBeAW}W^9KhoziXhQaEQsI~o8URcky8 z&MLoB>hgrOTD>Ts^p>~q?z<9$3)A^khW86TdkL*Tme0vDEmryW?==)o$!;ThWGwc- z)bt_HWZK+cYxNMl(eu*x_9rcr%?3Y#d52lOz3*Jj>TfM)2t z&zJP}n`{WexCX8$nvjyCr1|P%iAgBl5(@c#kH3_y=ls7eiaoh+#STY(uS_h_8Qf%Y z?9K97#Bwe&w&YORk{$6QVTs>fs6~rVsX@2e?Mr*?>cFcO?O&@NS?p1v9r@VF?fB(L zEyNES-blU(gJuZXq+Ts@LNTSMLbY7X!WBHTSF(HZD)K1!15GuRh{366k^g`$vy;4b zf7fOH3Ts<8y>hw)&vn~`wZ|6z5L(vmFZcVB)S3prHO&}R&5C(avLPxpkHa{dukyn2 z66d?oVxe*OMl5lp=vKM^@Y4sze$Cj(TkS9&%cj(@67$D<8;$$J zfxF)RX!vQ|8%=&03_lHokClrsd|Pu<#ru_##QRwvthZX#ccg?hI8|6uzpM47ym_*; zc}MkqThH|k#zS)j+fe!3me1F_GI~^+iJ6hw>RVpVt=%zcTGcCDA6Q+orS-5*v9Y^b z%Lw77MhcKR6`3S6b(&KRElXw8n2cI~6*fUac@km|Z?(ekD8 zKzh*TyS7ME$LJ&i;k_RqoHjN>A;wL2@DTEd@v|^WEpnqUx<==rYwQqS9J+4u9X!aCYHY&8 zx`F?!M|VQwWgRn|h&|J5GoIKS{TKAhtgm9}@}2RFy{UQ2gv{X}a;`ttW|Ur~ zUq@+iJ6o~lG7Jminj>bvX;{uI+5rHXxcfQGW6TA2oG0mo+Ms?8l()U9!GxZ-fXKUQ zh;$Xk>j)g03Z9qUO6@ zxG4W~`K5Kf8(cmBIjVD-kf~MUjIp?%!6I^fgC9H|2mA)fNX`;X)oIt}+TlEU|h57uMyiij6 zZA~kiH97dSW+|EM>9g=~G*%gIZQ30U4+!lBr{olO*uyu;-59E!xX^SVVS&**TWe|f z#I_+$&2ybCncq>vYqN1M9`E2AcQlzrNN14_@Ew)Nki6M9mphnj?L|vnmSSxsX>@zl zIU0WW&>wu5^akDiqn^+P4tx7&AGC_NrDE?Vf9S8A!71%Hdxsy;Y7I?_CbWuPH(MI8CCwfD%?K=><$sY(^)g->|n zOn=i@`8c@6{0fGZ8;Ss5UVrrBLOo01G;~$XkMqYzm%<&$KP!i??lHrgl zN_Wl`(9WZ%da;LZ&SwiB%qg(Jh2b zQ)L(Yi5^&R_Hzjk&E<-TH(R*T&Bgbku<^iByCUHX;~kb{9ugygUP6cC?vvJ{DYWPW z$aG3_FFHp$L~Iab$SowvWy3w1-q$!?Sh;uH-fYfx-QwfwW@f!6feo(7m(DnxrckAG zJHK1PGk6}l8W7$1NCEG_Y@RP~!ddpO6!j<}qLg7Mg3#x4X9Gs`~$C%b4vloJWDV(wT%AAlPjG+#A5vO4E zpfDOO-Q<)Ss@KEECmEmc6kKet@_=cNDgU$){GQ(iciFrh+`-ONq#dM3Y8?LkY~_#> zQYRtU4DuDzKk!6C?Nh=Gv$6GG*Q?c{c(;48b+NUTbyo0#xBHcHK?KrmXS&R94*1ij z>M<1y@pH3Lg!61gR!ai$h{ZDIw0@*S%V|(~13ep+tVafVoyMQjge(wdM=VGqZ2X>d zN%fFl=K0kJ4@<7uxWikK&Mc2H6J-aMshm-tqR40| zPDDiF&EYiEIGcY4deK8rgPx7(LfmZ-<_W?tVKxh+83d<^GZZ;b(Pe2=`KFyw+B_RQ z%}XUkD>`?pOP;VM{f&1FI!tYOiqi&wu<({-XH!(M>BlCTHH7bM z%6s;V$I2Whe2zIPHfZ~FJimsFV?FceZtV9!j|N?a+9??v?_gqSidWcJ@vjb%wS;gf z%I{N<-#`h^C-HosjS;Fg$a~brAcocCf4}wb7+#os<%!D*;}w_qyul_1#05D)OXc#( zlSC?!5CW^$B+Z45-e95Fq`ZdgIJ;RmpIsLcVthL4A5a_FcEUXbcr$+KjuxdcCcib63O z^CKy%+Gw_@xdF=5Q$E_nSkHUF9lJhcyr%#zWgm_wMH8N3A4ryfp;Q^b zard{$__TZQ%jB?ka{AHHb*Do%1=1t3GWl`o?TYTeU^qi-tUMPW5K@*8O$0fjNC#wukVx)h$galuoN5&1?hOs?)VtX~V3EMA!w&(V2{ zT}y&+w1LTbAJf?)T{2+a^?H7(<&lg^$IU=infEk>M?4j)B!)9`t|4p3*)qPJ5g5W8 zB-e>%FAy<#{5=CAU+OHzxKi+hc=Bkc`a*)&iv5<7O2~TzN5{>F+3Ay#aZp>whX}DRsZgQ3bu5RpU z)jWaXZ2RA>Q-$s5U%RuEB#z~T{;u&ny zGRJwYrS5F{-GOsWI7EmL7m+j<3psn$vLUXu+d2~oz}6R+?4S5#O@9^S$PR;2=gR?-Y zA31pIVT@Hi=ILaqJ&fvL^ld+o|G0ONQu!i^#zS~!YF+H3-Go z%I~xEOFEly8v{*DUSJ;ZNY=@(uF@qi(}W)y)W`hfgw@0XHa(s2x#ZF)7>3JAof`Pr3*F z)8Cn*FJAf59-c89LBck+AA81Sje%94NS8-{6~)`esN_+t96AmLVy!|vM|vV zh!*n$`^GzApm3Xd`?egjU^Cd+Ggw{r<(wf(C(*lq0&ITvF0pOhz~Z8yua|lcEwM3? zuhiF}w6m6TzBYIEYznJS;rcOSsV^NIrrR}DRK>-DlI}=*(oofy4V(%w6x;qY_)G6Q4pqo;F!}sr< z>tEDpHb|95JLu10<5}JNN81^H9G;z4LBmP}-p*Uuq{@B8dtIetwn%6D+Sg)I;w(1st_<`Ku$)z!ya^aI5{HBa|CDK^OD8U_H{dOn@_ z8kg#&H9Du6s;xKX_Y8ApIkSMJFErdQYa?+UQ6Z1kMn7@AjX{xnX?~!sy}3E*DX;3e52jJ|CQ~g|IR_v`^9YCVf#(@^=QUV364aZwfUUi zLOyvCnObT6wW22WjG2D((_7Ug-j&u{t3$KgEG8fx!3YOrVd)oFgR z%)v)$=`uoK6XrPvM(KQp7qd-AIoc}5tMF#Q1GIhLsjb>o0+&_4+V!A%3bHJUwD7H(`rf^Vri2z$Ai zy%MNvAk72l8 ze=TtQ2tEGlwQwZRtg#3xjsGRo)5+puW^s_HgGX;Vg*U9fq#lH1dhXH%S)n-~GV<1c zqnhTGfF;pY$O>%?2-YMxu4gn)vq=g_8~vYb>9$m(^$Y7?ox=W8NYaFV%DGp_fl_d~KxDZo_^e(Gwr zgd?d1n3;f_PJP@wM3uzC?fJ(mp{|P+eKu`g6Yk40j0LT-U%O!2*N+|yTo)pawPD_v zTBj$I3XW?L6UL>*><%1#{U}w$;k9CWa%z;8aj)X>3h#i+VdF8P<~+)oFR_0+=ul^L zm6G&9NQgl>Og8W+#YfXfi2ou~4DP!O11)^Ym~p&F}#mn0PL$GYg9qdV~z8 z%?8>)XiSj|_lVistfDMNPY^4Eh0`w1-?B}l?1gCCNJLUf0nh4wTZgqAvU!xwFm4SD z*ktejk|i$xI_6R>tBzOUawYOXGY8#j$Q>4A)A#$QxtdkO)wV$2-sc>EwGCFlw>+zr z4!~nf5~LnQw9|OGCDg{hRu7P0PbYgF30-UY%>Lg)`i0fX@1L|-rqk>zwPA`!nknsI zKx$_beZABin$3p-CsngqEYf+xQi|95 zKMpp7r@dz_Jz-BZfa83=g4d$ZmvPOuIF1%gUDa5(@yGmjS+Lf-Yqvhm=46#Vy#1J* zn&$~`-&v>qak#qfOlLV{*N}6_;RRceakQLK42XVpZD%|9nZ{LZ<1szhRRi`)dQdsN zA_`n*M8ZW8j-mIg&C->w^7q--G-*C-@n~wMUF{I$MCd+zdAjF3zVGd9!#HB)M4mo* z0y@;=w`7RAa{_IF;np!bH+RlQI%>jRiKfdTP4%P5yOQ>CTR5)zX(t@n zydW&y04DOU+!HnUb@oK9LH&(QCbz<=dyq7W{wiry2k?)VM$vamBO8KS8u7Fx_8Rg_ z4ou!;tz@;=3s_!S!UCH3?wyjdZ)q!dh;%QY$fogGXc0!HIRR*QUivRkx{LdqTh@O1YP{ z+kKg;M6h4eO=u#hL85@7hCOD%BP!K?%#Mk>|; zs2&|l;PF68zo#n&giN4Mv&+p^pWp_Lzrm9Al!V@3J!JyJ8Z@Q4q0E_F(!`D@Vwtte zS*kub7M@fM)j>uU@=@-yuRc(-A#>s=(JJgu(}mw-{iXgeL<7T%Qh4+2^gyxfLY8&- z)ZA|4U|90)MVQb$8m%U8q*!y?!P9kGQd=%>bXu zh4+%Gw8A&_lcEvhr@;1kq8qxutmW4hHbf5jOE*cD@W`=9k%_{P~x0zyn3Xgb}fa{E2t{so2i7XiV9{HNEdqQ z6nG}b)eL+Asss<68?sD1a9iM~p{R>xa?Lk?cnq7({J2n5Y7C(1>w;>WKW4PL_WFTo+U_>_EiB;y00Jw zOC3?HxziQV7C+C_>3Ws_#~5GD^t?p)$G0}UFTm@g2!etYeE2S`6m_n{Vt6+{S;9NC zt9u@Y5uQhv++~xECA!2t#dO69Jq)Fj-a9sP*u6RAdo4L;$%q~<{B&i@xl$;dL-sf= zPd+AclSQHo;$#bqqZPpE?hCoOX&M~q^&(qQeoVNZhc%fvD*DdJEH7@C>5(rMMcbr6 zL^}XAD>+JYt8O!eswkxNPnbr8K6Y7+-12GS~`n0rB z#oQHC|K{O7&PEQD_a05Z>b2SGH;ZA%E0J=xP#X>3_m7}x!92?wE~sV7iB(y;Ryq9-LpF-+_so%15rVE}N&kwh)|BzqgbJ;5 z$OdfHCp@%Dm!u{TBTEZ3l>4YkWDBRPe?(pW+6wF5u`BYOgkCKm)oDt0o_4J1TPJOY zS8Y8SL@kDCuORy|SH_Q5Un$X58Gu9oG%AVk=9b&LG>*1^)! z*u!4ku@SV$;@}FJo0JB@D)H#-5|7Za3aoGbI$VHx_(zg2;koL{NNlqfdO(zd^|FoG zH*=QJ9$?nRVS}evw_t&aPIuwc{189E!Z}i$%`2NRt$nRFwK^f%7>At|t8|_&_tSJf zO0VG8k_^5{pI&ouh0*Xd*P1ybhdit3*tO)jx^5f49Dx_B^ErLU1FnwK;=J*HZ}NW; zF(}ci#WJO_%q5K8-5r z2}5-LseJ`foL9|0=XIJ@683z`@w~j5cx0J>F_+x7{|~XUV2zn}W2SF6szEgo+cglG zU1ERg?NbevUt25RDlWKPHQkr#qNaI(Xvo(xTuw7;E9H~a|CRO;(1C8zyn{r#^KjO$ znq-fxGG$*c-O?z=izLF#DPJJOW<{J z;ew+EKBc>ncPpohxX8j zDW3MDs%#^}PCzfUX(8@c>G@yeCW+)#PtbykCTcS#pj_l( z*E#6oRD8--czm$LbiDz%JlN_F-|Jpeg8*fR^(x}1%;P@CdPu3#a-G%SJqEk_afS4V zm!|~h>KcrHOCQI}Y_Xz`dcqcp7htR_`Z6jRS|&8hj_l@Jt?wsI{MDp+&_SCAU0g)?XnhBc0sA^OMasI zV1TcL$Do1Ut%LNA??rXCFuEJlrl;x60ykweZcPYWc)zc+`nsZ9gQ4FP>*_a{v4ZdX zCm~$1YyO30rnK4vdZ6wV>dIHsK_scNw8TSR)stXIpz=X-Gu#>*h+z}u^nlY$m=L9y z2)i5dpJFk~R@9}FslRRbn;v`>gBA0hK;wQxoQud*)BIG55L3qAiV3pycmwE*(cK2Or@ABR!*;BNi=QH;dE!gn-iWRXPZ0vYwUSUhK zQL@=}ZCtiJxVWl=ir810GQMeb zHhI8WqD1vDG#s(nON0KcuJKm=AA0`N*fN$63c4BJE*AN6l_r7Im&nTU-9p*|bQE_ALLj=IiHuVzxI8HDXamyc>7}X$3+#+pfPW-?XUyr@WUs;iny|NyqxtH9O8WxqY*xRVzvs?6g-s(6XRs$&YHjxXU9-F+Y zIh)MmXck6=QknUoKnmTAY-;(}X3L9NR`eIwM63^&{Y74)Qn~tB%)%8|hXjzO^d&E= znkUUNkvvyj__Tz9GF0;e5_`J#&>+!wphXSGZRvT3_nHS}3FSe5( zLn;QYgza?_lu#>4iN1G}&C_4gWs%XhavlB~<-*UE-NLSnW|(EMB4?`J*TsireoHXh zVsh+at9ib?`KALestaG!lAfKrswT$$pK;45$NAUZXxtwTY9K<{_IoHmIeJ|JFdnGO zo!^5XV~w?^s7l=cF{x^~p?`s-U(=W(rQvfie$whZKF*_Tma?B)syW#*@P_9*mm=d) zc>eTKHR&qXpC!X$a?}FdEJ5E*S0-sMiYE$T!7niMFYWba$a?fhO>R>Uxc{VFHehwW zLOLd({B8vTO0yDM6jn2*2V$i74<%II-xpir{xMjhv2@d6mHcRLi^x)TCkP(O;gUly zeEi1n6j>;ud?jnKGn!ULkm=2@B;J0M^kz($PkO(d_6A6rcU3he{qdwX_|PBpCJfDq z^3s&5auZnV65w!nKsLL<>Ew8L2szswa0S_i%a7UBwRDFz335V-`9DJuzMGel#8mTY z&`0l@H59$LDP%FIn?m+TOCE=j%|7%Fei<5D%f=4h8#I~D-T{-QChjU@CC8Egq{)a@ zou19hB+;HTyHy#Tp$>?GE{@ZWDF}$*d#LACCQ!y~4mj6&DlY@o>L?1jik_qY~2w zU8E)~bM3CBbQ=nYM{{!RhkK7qeZ|y4E>L%%8?3%>Zwo6bS0$jtMfu)@NNzIOz1J?= zi_}RX^<2*@)EPw5T{l*6D0r92;JqMJv(DTCH*{+S>&UOicE;wsp=zz{S zkAR;*Vw~P+f7B~8eenGWdM)2on@>B>O8e^{^bSa8$753XsekbChjjYf>XM#}CNKTq z<=LqM_)81;r~cq@_=(6ew;hX4&*l!qP1RVCWW!;Z*84qrih+w`)jgUic(BM14xG-& z?ckuVe^7U^gOUDinHIOR6?{0;KisaeS)upcndPA?4Vl^Mypi3&rB&my*&y)q+hv^Y zZf#wWeeH&jbCwocznvTmkI$fT=f8^^)8!5NlAB(+f8xObdxI7vBz61%-&lFkMNZRq zG>KMIybp-J9YM_T4wS7#3ba`B+U}o6mku=lY5B5y!#M3rIMiZdOM5vObp~WN9*u^h z$zV9?4^Dfd_uT`_iz)7;|GW)n1wjs7sOVK;AuY4~%}T<;sqWa(R-K2ru8Sv4(l+97 zV-YD!y2UG1`v9#XMQL4z{x_R~xAVJYxNxwQR4|D+OQ&RK8sw|N?Tn{K2|JSshcuy3 z7HMMW4WVk72s^COe~jtntWjCR3m&;W<4`A#w%}f8l(`jE3L^(RXMP7!gDco~^Daf&`N3 zoNP}^h(X-l*l7nmhL09(w}ZQ7wh}*R3fGNo(=AxC&u@!(IG?%PRbc{5vVu%*(1s1T zC^o;lF3A~n{4-=+hP#~ed15VBoSHf)aOY}Jf(PJA2E7J3j1OLzL;^-`dyZrBD1z_v z<@377T*scOhAB#*B9vb3Gs^=bkUGopt**^3}6HKltyIY$u?aS+~cVuTapQ7a~2%tL=sq8?1%6nx+G7DU5@QydlCr5vy3;P*8^)(H`5{0Bb2C&eUWDbvvbsL9uv?1*t=7PUHb|2T zjTtX(QY!F6H!H#bH^hj^5B@hfWaou-$PlawCNxnsVI~;yo~c@hUj6sDO!gkh1Atv` z#`ZhgBhgKHWPA>qGd7ZFDBrgi1{C2e)&BFO-8fl7g694X1 z0zGbQJC+Ji51oab1`)%&zK~g`6xFa^h&DJ5?=Qo7eBDwOXmp#+)bLNaHhIh}wRC{z zad?#iDaNZMnVzfrric)3(Bw@>Zj-+pEHC;|&$r}EQ{btILcys_Nsmh}RKILd)$X+J za<(VBp~uPc6Htl=oI*G^F9?>wj5Z|#n-YhwpWLz(~!2g?qw$Z|<3jiO2=56GPIxSyP<%Bk3{CE=L0G z*j$#_$pHZe@COk(O+y2v z2vKQa;zUzHyT3K3f*M3{Y;#&j&L(836ie=NY8g6_AaNOPkwQp<2RAc-G$pb>$?stQ zq<@hL+@e4O4j6;#b(I@cSOxHraO)@h?$zoQ5aI^7aJ33uU526!JP^URx*C0ntxY;( z#Q7}OUP{IS%trwt{f}@)q;do{pvK>(+tb(6DI}zruQHnFdr zx2IEDkNmy~m+S@Il8|8=`$;Apid&91QE#q>oILqS&jllC}GpU2RK?1%AZ z1P%YA1!OBolW=yE&l6fTiqSknk%f8`I{E!2%gHuIN?(Uhqx311k_~T83c?pp!>1t> z+%9MLcXaMn;l4{ z8RyGzhRD5|zSyP(^XV+VOP37l%ja)ipj8RJ6xr-E)}FpbI>gKDrpN)!B;I-c42$l= zxk}=Qu)E zXjS}t9e&OLWD>o4$@{tqK`#MrcpWKdW6@u}jIT4m z_syGUPve-ClBLK1i;4v@0x3=3ym|R5B zPM?#1^be`^fvmBA-sV|BXCO|K9ri)++#5o^0&`n{y4~;=Wlpf@%dg%VZ^32 zyJ1+od;|aRqEs)+lPkeVJLwzB@Y8IWM#~J>OY{`}2Zb|WMX_S1({Ku;do(3-typm) zJ$?E*qSbHX>mm!WDqBZaVKy(Ke3>IV!aq=Wofj(s^)-_Zz-ZVsd4&_CGF}prC5MG{ ze6P3RANMh{32$BS1_RGz@#wn>`T79rxc=~ICoFC)0eNI%`E(q&XaTry!JAEISrLEG8M%& zZM{8xfgkSXd|1wHychn(s(AX_DREXj|UPmvMq)rr#7fjq^=Q zg@}v77cY>^w0v>9Bxf&}lV`8ClSq^+G<_CF&tC1wFN#!q6}^0&rt;GQZn@z=Dfuy5kd zxyFeml zD_T}ulch@+?h7PdLC&3XSb^d8i>FT$ESY^lDNKe={(%xrsH8v-bxFJoUr;%#2^lhc z6nL6^5ruOuK0@SWYZ(!}4vG~C^!(-Pr?}y)P&g;#2W}gy6eajJm*8+bTj3lK?PHn% z=dALZaFx?d>)CUlgtjor>?P1rC>DebpCWPYuG4UZYmR8H&#*x3^K@&#g5oCs%=K*C zogQfd5+|OP2&N8EB(l?ndR7p>!KOPW`c9JlD?MNpd^e1WXGEM6ftoQ-S_q8@DRQQVtqhAAJbMWyxsnKd?EN-59raI+dZ&|75762A8@eBc zo73**`^%R9$Ce7GglLZQEOqf+x(buRjKi1bxnqL3N=+uwJ{KTpX&&;I@l-!R>f z)qm|C^$#b|h)yqQ(jlvD1zB!P!ylUNrNtT(#`Nc;YNxo3iq*1-ujRCZotJ_lv9sPY zQIGnk*fm~gkQf5zA==s^QhsUhreheu4*&JH=DS@s@0Wi(`_}qnr~UNX-?uWg?dZdP z*Jwss!P;oOyJ$8q64Hn?ZC@1cN`7qrx%21tMdu=U+`4EPJ-C*)gR^Aro*OXTG<_)A z=^S^`Oc+cO^ekpPcND4f+%@*$)-S*Jm;;U19YE8i~rLXFCf_-{*9%vQW}fW zL@7-~DRTM_l-cfMY*G_~h8jin$Y8r~#*8^94Cib6&-0zlH(@;j!9}IegR=wX&cWe4;TQJ|K@J_lT2zu%r^)UE}ZQH*)fZOBnWsLaL z+yAA1N^~!Z?8npNqsgGxI~-5O2c*p*@6GO{9US#ObPs-?^m~(0ckqF*!T0&ht1MWM zV~T19=4GA!oB&#Nlm8}LEOKQ7a0iKF-)`jLRtR9;rrJ3Cv>n0KvJPWpnpTmRx&j>FD1?ar<#rqPXT zkI4RHyo`NRD3!8eibmqc0pOMB=~|MD)tH4SF8J14Emme&%$ z#^R2dM@ojEh8F1@gap2>M$dUMydb{1pQYqzpROACP!v567O+eU_TQ$5P3(cRgMXZj zj)EIf9zs`Wy~4@KXGbk`~zLdEtV=H8~WYyCbhBUi6kn)!=bTirFeNi zYE`WvxH5z!a0!ijp|6wr1QWWJABL;Y$8HJz_C5SYv(NsuEY19Q{{JAT@3fHh4S1n6+6Mc>7U2zLBX?l?l(M$WCw)7!o<4TSWQw%VKvx%jbT-Tk%MM0f0JVd}SU| z_sYQNtDeF|(%O*l0depc z6CEbxzlooB$nPt{$G3^guh0St7(7Nio?!Rz_k9WQ@L$=@Ekps7K46Qj!ui!KZEm-N zZP-n|wksePWQvw)a`>YNr;)2{qNdFIu9Q2xoUdRauqYel?ajmcc_RCHQqhmHqSI_< zFDfBRkQJZ~Tf;3)ju>C>Rl!KT(yI}e&hp&xMy-wkR`R2ue0~rPXh*KX0W0}&P(D8h zht)Ei<9&)}Pq#KLb5nT7JYK&-me5d&Tl(`JwidNQo9_bLz|)eh<=7@_J!BX~9L_3M zr`4|#B*+katU89@!_W9Z(+W<-qY#`JJkniUiJ*_TZ*_r`Virukm8Jaedz!q0E`_|n zP5z1(6xp1q3xb!L36TOZVId-TrsU6NiofsS_Z41=eASpstq?OxcxJIWJR^l*`X!q8ODxy~`5Z738E|r*Jnzz4a|f-?bsLzF-@sf8xf>`-5Wk zw_}UO&L5`kK+~oiY+D^>g~ns_x{j_xM+iA`ze*a*-~xo7C}Gjez@jEVJfIxr0i?~u_eA*oxc1MTqN(aN^lP*ntXCxT+biyxv zygewu(S!fyV>(+nCtG>*Lq1zbnu#_|71Ho-o-X-i4`#X8l}(a#8s5%iZxakGEBXA^ z)1^V>Ixz@#+yQIZo26z$$01v<%j za+i^#{93~>8r2$(yN!ET4y(Et+ny=Y+@uY8mJ4BFcdun`2rTs8O8A+^2BJ}1#ds}eaSofFaN6DxTa zz3dUTm>VBFgKfIn*~4tYvp!Aq+C&zLu`B-8I!o+DkJxUmRsD{9b(%c*Q}a{`*c;`0 z?3eOd&Reh=Pw9WI_TZ!(o=-3Lrca*8#z;8AVx4)Oq`0(T+{tlJEw*V(m=s<0PsN}HHILVF5vs2ltK)uO>cdq!mLnWKE@$68f zq=}1^XNTy8H47{U~Wt1=5Z387}qSh3`B1|A6dA9*SPUsJ^UBItm5ys-vnErrI zIeeLu;v7oBkqJFCs6X~@1Apw}4~R;`v&(LS{uhIYzEZB-ZIC~Y@K21hfVcqoH~zSz zU64Om7qC8d8}M)PB4`(_aBZ@yAAwL!;tB}X6YT| z0kCYIUVTb!K_swpV{C00T2;^KFzl!bQ>ZSstT-r&9n9H`o@*0!1uR-{ts72>QJ$z* zVh(#ItO!V6@QIq__|K1~k;^#KeB_pfl9x-IO(snrU5t7T%1Dn`sk+1{P#<|7wU3Yj zR7Z&GSScZnoGv>UdoWhN5+MY9d7n6`9I$`J;qqgWBP}jfFOepWn z(p^%JPp4$Te^mO`vOP$$>22u+hpRbk3n~{t->HZUh#gR34T{)ysj~btA`bsenSCfl zZ=RpzZ%Jh}+o{DNknCcNo!48G(i}inBz~hw2~?L3&K50|3u!;550F)1trb9rtsvNI(uEJf* zx0!lVi#dGIwm~!2St8RIlQ%bqVxn_%AL&RW6mh{UB@Cq8pYzTsqSR0aGTAr?Vrpd~ z3Tm52L<`Lpvb@5-3iF&PDpwc{$jO@RL+3j(QcJ+mgB>~*kq)?dP{kf&!O$Yn0o_NO z_weD?#!sM*v49I!6_S0@M>+oyK*8I_KiZmR2|94Eh{Hw7pp#?7KN|l~4sfh1xnFU3 zP+SfV8>;YRf+2YhRF45fmrv(OQ%MIzMv`J8xD=s@LV1Xx`!&O=@pFSUr1?{6JYqwf zZ`nH=IFG_~hhGzUiz^JF3AMeb$B2aM?^)4>!lUIQm2-u5Bx<600DFE)c1JZP zPc(oOzw?AXK#M&5R5M8GyvZt;*&#&Auv8vgW12UJwm!JdW{E+Am`V;xGB|7vh(MvP zjWSIa9(nf?GLV=JWG|7YU7n69CZ`fQIVuH@vd?LAs=RDRB^Y$WKfO~=zx=3Z)h$+5 z-BnH}X$t60(QTAyAS^r6H~o~GpwzI}y0!i*E!`q}p3Y~M)k-62ZE#`^*aU@UXacKd z=2WdA2Cb0mPDAic9y6OJ#@b?z;)d8Ce zSyFpfk_81K*R>EC5lAzHGy|UAo2jN7%=cFd%%K!w+QNo}V`LT~FaR1ZbP;+s&tfva zox%S2L;$$f=&{fYJ5%l3wOEx}B4*h+3vD^g%h}G;pzM~$s9C;AR+8_q|Eo;j=h!wY zqQ^vZg)@!`9)~MeAP_~i*@%`6^q2y38_Tdp=?;0am&FQy=+}h$a+=D+q`n67T9j z;{hw|Fg`WrSf=1F?lK7R4m&HlAjB+%MH*PErF#N77Ls5Ppt zb1*!rQ|b7a%tm#^-tm5~Mz!}Nazv`G_OS;3{o@ZcDh*D~YS6x46R-ZbKRE3DR$cLz z-tQlJgX(%m{lPEQwFX1PZ(OJ5_+ZpOsWIf^-f0bX8}9!{@1O>>lP*E9x>{Z2#>2DG zL5=wspZUuBoR;)#_q;Nuj1M ztRC%P$LL7ep4@U#Y){c1HQGCNp-|uD9A_{Zu0GBpuz2lb47_`A5i<&*28#z+`I|wZ z&6^Gn5UrQ)bmhymyIv=qInn4DP-llY?C#2YBnx$z5#G-T#o;`@LvFYg z<9Vn3)Mf_Fb+%6k%MoOCWLv)!zLOYy~O26;5qi2q`oav-7q@b8_8U^T)s$d)Ok= z<Cg zXYiH!;aNVG4FZ5)&LZ&qzzOH*;{-&YaY1Fz|$C~VA z`th$H_}G9HR=BWLttFf`IE(TRrm>0hTI5)FwmFBJ@kGFnz4k;}8Lu5Ilyy*%uEj&< z$`elkg^CBH=DFIqozq7^6ZEWQPLv^kx1Aq&c=j%D2m5(GOT&57+Y()Rcv?v*J1(IMWnqa37Ph8?#ts&(<{a|R0KPNb5 zEA&@J+C+HU9^q|!V z040&N00bVtrxPp|$ha>9-_(gObe<3b5ER?!bg;8`jf1;ZT?ud#1s+Y#uc4|M?!u@! z-D4%+RD%-?&EVdtr6Ox0#=!y9j-$t5g&2cH7ET<_=Q*YogmDLCTtd0(G*qckck5=U z%fe2sp{02q+BP4E9${{7KI04y}l}49d)2uytD9XY*vlL_TAAvLrN_B z#!@>( zpIGv`NTL|AC91o$n??tEHk7~D>Pr|T(8`C(&@wAC#&x>&M#djW8SuyNUygId~qSBVZGFn?(VQ6j+XXV z-qlWtFQ{x#=9~vJDCCB=fraKxM!2W%SrLyrWp1}{gP625Dd<8vX*o8yjcuJ1xou1} z6}ohu4MXWU?S2@8O4|Q07}9+Hf3W-FopwNPddVLjd)-6$FT1iQf3Z929TnEesCU?V z-yif2Cj{)|*Y437eW>IQa2seqKFa;kZsTI!(9K-$2^SaO6?qy)^f*w%Eh{X>L@;O5 zEKPVb9@ndY=AT3t6U(6#@-LSnAg?y@aI=ziAn8_9E7{y>3(+S73>&;g!`!))!IxR% zWS&(;2+TvslRUd0(-(OuBo?%=5kh)R082fzH>wGzvZ04?ntz^S-mr>o=Ii&=vm`-a zkk9{Ly3FywL>P5MHdq$#5E-s?E@T~q64A$k<|xsC?ir=KDU9&$qYH~|H6W{57*7k{ zojFf7LA-eI*|z&+X@G>CnLQct?CGnQuOSLd@6!tzp#1pQWzrRZ$}%S9x9BRor&_9?M)=czKu%ZDu3OY!hrGl6QTqnuzO^*YgQ zvpAe(|4Ikx9lZTiG}-F}(7I)*t6U>FS3?u*QSe<%Jm!pwofTg~mkobTX)Cz++C2=m zt{{DJqb19s7)u)>Y)@%*ar<<8dtdp!2CX2Wk%`0;jsOB9f6xF^kfuh}|GFq1Z?#26 z2=5)@D7-75VV$Z~G~Lm)HAz%ISGhDB<(`k7KyaC6%4TaQ32WJ)^@Bu=mOs>fcpwJ0 z$8_?_R5ve{7xOmU@D zL((9r$H(l!zf-SS5Uf_hzU3KS%FlH&ioN7&U6q{V-!~9b+f2mzYq?}d8Tq;%;z=Jj zAVqk&_sB5XZd0ouTG;5eBE#VljO9@mD!ZV_7fpDCu9>d4)ESI5tp?l%naTxQy2f3k zqpXkwPlSEZx7Z|x4_NhJ=YI0Gs>Qj4f2o*#JqW2;ZR~J{U^Cd+LnUy!H{IOSkpY_o ziXpY(`SemTTBrsTmkbaAgUml5=7&#mJPAQ92KzSnG^(@1P1F^~m*M_$yUkn# zp@F*VSl$slrqCAzfLh5MwO}=4PiRDV2vtXMZm_KS&fGslYgwf?m~n_MQTwC1)Rm5; z>bO={wNBYr_~a4ZDb&eHrx_dQQ(Y7lxQ=8BubhXr^&9UR*3*oe8{mSB)7|K-H_m^Qc6S6_XI~rE*=i6wzwcjpFA=4 zI;YE6H->Ym--&3oyf=MB@N6Bb?dXvrhIbo9R+_4gPqMG+%#$%1sOe7R(R3gFn~)LV zOBSaRDogiZl;ZUZJ}`NlCYhG50ZY?D)}1svuU_c36i1z%PIaB9l{KDW4Uo@O;2{#*b}p(=WFOYe56^b@{YX5Z_lI>`b+B_C zsnsTmh+n5?J)T=sRf=l?u-jG%5G!$oloR@=3P4t%x2UausajdiKyJB=?9b}}CvsBuCV!1>s$8W?4Y6MWfRf$&_;3nlNE30g3#d0Yi^lw$`-R0FU*Sz($ znm(q3xJn=GTMY@|cGT8{fTPNKfNfrIR;WHi>dp)5DN^}TgMNyCtVTOtUSmehwaLqB zHZ5FjtC-U5sHiM3>vJ_pOCh?x*T>O=TlM^Sruk~kX|{Y0G-<4TtPf1wl)He@kM)3c z{h+$_0BM(>49lO@f)8GT?g|ISye-xag%bTo#Fz_HN zg6njdM)$$hG9(<^DMi`SQn)EqW}p|0P?p*+D25{!A+iIQ}}O+BU{`O zU8uNj2T4{if7f zibv!yxSW$tQ*4yvglyO++|EM@)Sr@*XMP8xBl~=UfzZV+V~8*!3O){pPVqcn5o{?E zFbfMgx9n4K9TM!Llo5?|oXsBvp)#T+AOI2mtBgzl7#g8RbELpIryqO4c=-PGQ+L!0 z`s3haH2k%H*gFgw-7)#yXa}GAryqxBrva%k>JCnS4~Fl9?%?;}mp%k*_I^7V^~U31 zIC>QHk57*JJyO^o92}h;_6Hw=ebR6+Bplx-d{3aB4zWiDtKS;~wBz3B;3N6j-R~du zPk(Pe3f}im2LSc`a1?ZdlkVuWe{gox9R(+6qm$vdM-Vt9a0mUt`w{5|qn10QTT&ME zeue0;@yG7b5%l#a=$?@Qi~z;pV0iNTsQ=;PY4CA)bl4+>`#pjiBnqZ|k#QXyb^FKd z;IMn#{m{c!Ljr~j59(0_gHIoOPzF7A$^RXk_J;!)$-!^{+1*atWT2x{(e_h++-nEj z5hU#UKt?wjk`92Tq{$GWkcNXE1q1Zfr-f93-)G~VfEXP1x<>@q_z|>LYj++!-g*Rg zzIRt&7a{I1f8f^ib+zj@1)^DE&eF`t$5t0CVt>MY({{ush*^T-m=%Bfw)cp2*I|9x z8%y~;9QKbEky1cBjX*gtfqFGSIQW$V!@+8Rgady-6VF@aoqlg}I6Rn;r7?NKw}b~L zHmK;}^>=pgTIrzQgE)atORy4od^#}ec?sJ{Ul{sGuP8(}s(|@)apuwp{Mm+N|&P8&2|uOP`g zBNn46zd<&B^y3wzQhYPuITI(!m|vhBs9+Lt-{~FX7#=&bN2#&Czf1O58g|UyQEQto zsEKrZZX6t^YGw8+*0wd-bvt^95IRb~`kg6O`Ddb4=E*(bpfyUbdS4gK#>K_o-!RvhcI(nXC<%T} zpBgOTM+fvLPs)KtVf@(!ssPyBEN!3OELQimu;L!EKfP7KYrxrx`@<;er2o7PXQkpt z$`Ox%c7iv&h=0?UXPdL$Oj8D5<6Io}zIB=K=2rW2|>7%cq=2uUSz~s1ZNA76e z_cSF!Ow--rYsKfAoAITd(pV>p!(rcy8HfUH>>{$rg!su655bh zRWKcJVn;trJ8?*uhVErLCF;JEc|k~}R2X_{a#dpP?T&Jz$13>tkbMNN4} zQ^$oAbH=?>i($3gOrbJ89C_ff_sjg|l<2{tFC|WZy`@gW4``n*H$zNRLHaL8KzrHS z$mw*>(m8Eoy6@@vHRyM$X!J>erU7sz#ALv{K^B= zAqt}tCW+`s%Ql{x>z_^VD2;EIMMl#;Aoi1{$zMj?RLwO|!EDBy@kibh8fpb{hRPL( zsRR=LjU_>G0`+CIcOu2NdY9<)TGwQ!5nX9nK} zEE7@{zD|Yw7oz>cVlpLNo$0q}z?PTT8hopdFXd*ddeotLI<{6+sH`YD?2r$;l0y$f zDB{0sLy;Kx_Yzs>f6X>xqg_rvqz^yLti6>e@>~XwY8%Ye!*`1-0bON9`l7+q#fgsm zB)9_E4?{B>dyW@9Gzl{N4T>CO+weLh`XDAI z6uTcH3z}0-cWf!`=h8HXvq=X{{&OXRwnerHys=L9rZQ!U07~0Qun2(CZHk2)SSYv; zca~7$v@1mu3Z1MWE$uA#isvrKp&l}hW!qe+aU>o7p1wTZso(fGA!=A(HQIub3@^Ti z=8^)smJW@G?}rbI;i=xe>lnRLzHuVd9+jh{=AgLWxh;`+guO8n`hzndPj>wxLw8EB zvJpAl5-8dgzzXZ`!htd$nU)VAbeu6vJ0-k^+Ni)_ZW&s2J1b&9(RA+ss%IflUPE{K zamQ^XZ{KIFF!Be&*c=8{wVqpWi(R2e4F)1Q$&y8;)8Hb)!0EC;zlcaazBN(gl*W!D zL_JO94pxF(<^7>Hvm7;kVB*HqvUiL4t(Fr%=cx5T^T)ApxLj_EWNh<1v2{_;0BP(? z#SrGJY$Le~S-vzzplCVSrq91~r+X7RQ!_hTOf^ZegQt%7Pi7rLTG2VzG z(~-IPl=lhAXxo9*f$5?89oxE~Sl^;>pQkBln6Qhnf^e(SwiURrt;;Qk;VNVvHGlj% z>>uuKw}Zji@qTXvscH9z!=qkzu=^Ae*n;2O?lbavc-R~FPIsRxV0vE{{tObV3&ZP& zXxGfYYQS8A%<>b(pKL?=lKt~Gi$8-t?;H?df;Y=$VRwy-c|a3okRvk_PA!%_2a@Wx zSPC+%*0SO25r&e4WoaWg70RITV~0V2a>y=$e zq*_EMMLmIQ@diA?72c-yLYMd~4whr5`>Q;wc5KS+UCJ>tV{G1=r3hGDe zAzG)pKr}WH<&op60BZgL7g)PyUCejZrtfgT#Oy}jTKr_>Xl~NPY94=6^G#&)>vWl| zil)s0ZEc~nTuY3b11hiWP>&KTJ`suHVzW@Y3vhaXabbY|NdE6!Geieramr{iGcpQyhA=JY!a>&%syMp3KAw50)cyo=yUis^9U zs3a=7T~!mc6vjK2o^h9^VP!TSe!ol&GUj}so=;uZ;&o@JxXZx9Hd09xheaxKZ|*9T zQ$4+%?n6!8? z#Z=+DN?gxXv%sZwFjLw=to_2jPHXgZ$=$F0^AFQ=*#C96Y<`-JB>U262QS+Wy%Oy? zZO?f{+^X>dCOC6!fzO=$O>iS>#PRU30*9MC`EfY>A14lHN2e7?JpOSgJa(aQa&$JX zK;a2N;l++=sFu=`p#5Rg>z?*TH8B7A--P+k9?UtxCwOqKBKzBa7v0}h6Ta36e*Slj;Ah_m z>R=5>Kl?Wz{nkR7Jrx9q4~D0;NWSs!!hWL+`|hA>+X?5e?L2)j;vq9AvUeRK`IBNW z991BYFG>G9Kcs&&{%HLxYQcN-#&ek;r6v|>CQKf~rr44;{H75TLeH`Wb zM?Yl%2CfX3gK*}F2Bj;22bzMTU^eeAuZoG2wK+U?7YN2oh{kQmr;6FdF8$77VHJ^u zxQ(qN`QA$-xXQkybII^{o2>i2-GpBmS}1T>+n)pV%L5U<$;skm2s2pgA{_Ed@`7jQ zo*2)MIKu?QiBOS5>j@rXxLt-aBAg(mMA%GyM92zAc!No6z|b_HW1we7H3EgY`>u6S z1AXf9Cq%;5l042kRQ{9#rDu`fr0(bgu}6627tUIh6f-VEKhc~?lsh1vMX&>XpT@2& zt7>(>YYaS;n&I!4sLHzc%T%S(`qng@U}^1vw70W+7L}lkG0x{iFoD34OwjTRsr77Z zyrp7VL$vsfh3wLJ}{MXP1-JTscB(u87>wM5gU9x7Q2mBxy3JP>1No_ zPonp1X}Pa>+UQr=4zAn5OugI3MX#<$)qE${q{n?Bc2%&}g_e58w<6TUF{-g}DoVw+ z!Q4G*As5XeP6i&*xrSTDYj_)2c5F%Fw`2*Bt7pt?%zWf7B1|6( z2Ob`%$X@vUhNov>7&_|HZhtVYH*U;9{4kzyJ}trDQRdIvMJmp1eFzM5#QAJcZ=!DJ z&Uspob0YQlrJlDb>)`)wY!kfRcaO%s8hA~^S&=?~ih7!e9qb;Jco&K-@|mbSVrV&6ZT`)PO-q+sWiJ2*{)1 zLHB4f=pNUR&a*rYXPcM+qH2rZuH53O8^5uCuxJ{dn?|0C*$`-O0OG+TpJQKYCKh7T zhTKwoAF4UffBz8I91~5-4}vR%+ltUAC$;9zUUlI{hxtR2@H^c@>S$l6EJbMw(rSL+NLoChrcHFEOgadZj+n*EdK7$OZEY^HeD=|*-u<20U2IJpBi8h1~Z>{&0 zv`o-%12Z3=gbj!*s}ntdcDS0G@{c#+S1>wkxA<*fWSSSCe|0owk6}j;yP0a{IHh;Z zbx&&nuHW=xhuSZmsWUz4zCW$CBM5+-Aw1mn&{G zX}L0VT~-a$fK|9n556&vBuMwvpPc0r^~T$+A*ANPB{9uOr=#v*eAGRyGsCN8I4@@8 z_jk)N=j_I=+2!&faZNki7$}h!+j~jy6C7%&v`%C;a-PvF?!fyq-Ia(!n8M32m?^s% zo=-2)RwJskROv-!nbB9|=!>WJVn9%&yyYFe3$UAAdY7Y2OpFur3}@u5-elZ9D97Vc4J{C~fZm(ef6lR2THgXn4>Y!$U2T z{(vm3GklfB+Zmj21!(1~5ly3+I?m?QyaA~Om}!KC&3toBHJK_RS+c~8N;iVw`E*dR z3jr-iQTfwD7g+(vfQo!YCX2PFtumpktQ#fG~`_?jP*?`ko(%muv9r+@UvE8+E=cxFQQ&Nxm2^hIIqj zp86dvFlWnbBJ4e;vCQnS^YQeUT04co%#E3=BJkt&YPHzi+Pb^D>)bu-IdgbrwFqZ_%GXph2WniS0c##1lX~HRQ%ym8_(p@@vDN-rhK;$e==+#a>Rr zs816pCp1<%VS-4hdb8#2T?3hB{`SL)}YHIoh(BHrDqm-9Z`9ynpl~?GD z@_a>KKQ$R+-4(_BgiF?sr_*(jthd6%OFr%k-%!6A$D;Zd;}N?CMk@&Zso#>TYFp%7 zg8ng8FLh`d(6&mrcf;KeTO|MEb8PinJ>)KPq4ufTJ z%8f1MP`9<^IMNAdYtc-V<7UJP21S(S3-S1N()gkp(MXDmXQ+#0VH`4^VG?iS#lcVX zbptJ$YA@D}RG9DgJieq}DXA3Tgytif-B4z85oW_FJUu{n1fYR8>sym0DzDfU-VcwC zhM(Z1C47Q@1lW^N@1S?6fn_v9)@0VrHuIPgbE~cr)^YQStO?8`NjlP6n{PT@)q+L) zGI`83pn#_&i5YJjvTvxjMY#7HsE)rRzI#Lx-F%dy1*ftYs@m-J%N zuE_V`^&a$~IDhf+tup{4o3=+ptse>oP1W=ur7>YlCI~@Lu27YPHqbUdBDMioAL1Hl ziPwN)CCWGCqzGLrIppi1i&DE)(!g$PL>{;f30&2wewl$UO`?Req6NA1Q|#lsX%f7( z>Z9mGA!uc<(h})WZ+W!C(lPp0uv7M2sWJ!(YFf_&Mm%58ng^2P??Jh+txXym+x4&D~Hk2q$y*U(hBO}7N{EueKXb8h=Nnr8r4 zd3XELOq=IOw(Z2Gc9vGLc*6g$yf5!-<608^KcAw}WX6&aGT7M+aeOg|SaaDfOA-$d zrZ<7cLM=-ohU7Az{hg{hOP!@#jYwwR@4flmiBb3Iv(%|mr}jeJk1LK`Y;zV#=(H)9 zWO5yTdb&YWQamQxphs6#DlTV7(Q9=6mexsH9spIHuEP|uvite{&SlL@?kF}$$wgJ` znu1Hp%xm4rOAObSOZ~YKcL6C(1-c4$(7vaj7__Z~v2V20Emy^&&(AJQ&zaGI(4B{V z>ml5Cjw;F1)7$a5n9QdCFgbKlH4Lm4`591lN?y;ev^rMo>1|bvXFz)rTNyJu`tR~6 zTzx#fl~t*!O66eK?NW&snfOP^X_gm%8u0?fIA0t3Br8!9yIcs81F9pHkq-oJ0Qo~` zD50aT{^dA&na|-mAR5gQ;3)36E6|H6DHwbqJt5cbY*qoNLOj8)ReX> zI#TDZLQPf9O7X;^)h=cYgX$KSuzbHj8m#A~#F0?lTr{@=r4jUTsEc z{i@MdjXA%=MML+oGYSfaE(0O^*n(Wt<^q!kQ3iUh8IzC1VNNrp1ts)eXJ@C&ZMDo3c*L-#{+jFUzLd;ot|%OQ?Dn4)b-ebVa!Df)R5 zkHtBIIMQS2^q>#Sni!$DouqjW9IHV^o~lh&c8a8<7dln*%sC%jU8T9A2qi1S%Hp3b z#i2DlDJp;w1hs)@{fmu0*91oMrL`+GrlR{a;YlT+;3vW93Wyqr8T5s*6$Dw-=9Mz* z!2V{vS$+eK#(1g!l~Z(flTA0QL6aDdDJwvhslawDV$3{|73Xb=)2c8X(V3BMDta^= zQJ`Cgp%3<5gV>lc%E%4BuN2CcNF>%A7pao#ToPr%i&qkutzH}LDi+-@hQs1B1tKlF zR!v#;aYSR}hN)30%kMH-u@pZ2Abk1^K7E-4pay9Ab_rf3qDlHrAqQdlo|k~~^0@bI zw2Gs9SlQ3FeQ!3)Pj9 z)bw(3Z#o5-I(_I{J$PLvS_8iiM=gV>##Y_X)ed$ZUAWXp@zN1ZJYC z+@*3kvE1@$waN*}pkT^45fhjBpgVv|xXH~{ZXuv%+LAY(RRYQyB;%-TCX>YJN8_{O z4UbUV(0P}|7#UXDI7?Xc+=Vx+8LPZdl3W|nyEixyXJ{n)R^D&Ib<3}lX z1agtgMw9@((zXx@(;ON$gW6~{_Wbb#l5{`a#=~i7M7#32i&i?6Ee=hg@h;8;iTaq2 z+L3auV)<=I4YKM8ed6N<;zG%K(I$K?NebG8Q|9tTREtXOq5Np;kRD8GBoHC^L?0Ig5OYYqm z@NM+6S{h;&Xm5{0d@~#2K?7LnCmLrau+&0V_u^I`xl9x@ubP3)!%I7e#7a%A4-;MC zHLhg~a3v=&NE2+wDJ!>y%u+4MX!v00i(lUQ0*}K`tH%zgY3l?C(Qq&|jGers+*8PI z-bQ=Qt_7~$@X8*(D4FZ2I@XnwwU4ll;}(UEMWlSsuNqFR{W*MNUJRRa zy~y%(7*7;eXPD=hjogI1>}zGnVW#eRc9npaZm&`?)aslxM9V(B>x=}fQWaCDq&=yB z=RPFrQxlok3{Yh*Q;feAK5l&*)rj0)U?O?oeCFG?u+Akt-_l+Q3 zF=LezZzAQBs3sf&W7sx$bTYjA=sslAyfCM&uq-U+2et&azJ}yKU-n4Kw^_*_xOgC7 zWk5|V`l$t_W*Am>Yt6!1@r)jtKet7U`MuatDOj!| zGIYL(T3n+QCsq|M2^xd55(;K(3<77P@?>aV_mCmM4!(5Nc`;qDN!2h~gsL2;L=e94 zi&xZusUu&Ib%iW`G)KM8TN1+3%V%sSJFU+xLsrRs`(t5(3U%xyX`+8 zsgFZMLnMm@mi^O%j6|hcdMRYkZqWdz*)&`%vT3eXip}0uE_i030OO_s<%-%yRE=ye zfAaz^DAvejXNlt4qdfz=x1a_4CCM>ATzZ%#fOc5Ad3O?xLFYBbzGIN8K{5OY@y+AXc42&(b5 zOM!6?6X$&{@R%zZ%U@VE@*8q{DJ!urY!OFUw#y_4?ICPb>>`>)zj#oMpFuaEaP50Bp;$iw@M^R@l& zT`>}*ot5z*$}|DiJxENbqYM+QTGtsC#mC$6K07k7WXx?BAPAoE?m=n%(fh*IV*ocn zT8x&l8*>1ln!Or1gGZXK z#1u7(V1Y^C$4J~^n7F7Ajq}J{qQ-EikNZSVD3Y;>c)&NlC~-Kc11HOWgz%oC!az@2 zzCz4NB5hMt01qswYBya^kUD!{O@z)y?TJuxoXGOyCt+RYd=~Q9)SL!nc(M|UiP(d`(@}GuV;E#?Ik716sAE2Wx>_3NaCSl zxXIm1>2TqxDZxkejrgj=uz-|drQ$nf_iCHutg7~?Czvz64SbpN3~q_e5C&sW^rUHD zrZOl~0XQQiZqH`JD)lCAw``wTWqB1vCPc?#GCRJ%Ns3{!;p`eq=pdhnFOy=1g~$cN zHI?QD{-}fPLoXa1#vj!>w<^V&KVE0MyR&(^dvbZyJwDj|NznRoThbrX->%jJ`s0_Y z09in$zpJY+#Jk1=)4cYXcFWcRpCv325Z!alR&Z`rdEv~|vWRJBA)JU;eBe3rGtanD zqB;8lGMGS*JV%K>apvK8Qe?O3Oc18+Bh2#3^3=$EZ}OS_JQ!ugXH{}>Ho0fIFcK3y zgnb)$*bFRWJ*u;}8=9l?mj{{y=jmYjQ$B%nbuf89xVjc2f9w0|83i7Npk}x~F%pWj zjX<^7Al!;N&>c+GChiGdT~FaPn}U^`;}3Dy)bO9aema3ajAgqNbpR5dE@?(w}=0F6Ht67Fr zf&~{)ikdgJD@+5fbmZ6@ShV>DH!(1+|B-{&uCWp>&V#sdV_>5fIpb21dy0PSZvFiL zJ#+VuFS|!af~D;3?sk9N+`as1bN94M#(oD5G!|TbunrP&^j}+G0qgCHuY22&YN)#f zd@6R0(X$vDHY>=0pF_U$oZvzN5oitRR%4;YXrseGy(CX#F?$G5g_b(UOq9de>*phM z*|9uy!gmlg?DEGo2ml z7T{)+R^IRse2_vK0hLHm+I-D}X5$!p6>Hv&M_0G;6(j;`$f(73U{s9LF{OGRNb$rI zxls}NdB_N6DXUgD<-rYnb`y{8|2MX+Lj7U5g*0&GQf_Kn>8R50&_%q8>2h*$!CIvp z`lR?wE!B@-C&qA+0VRssG0aHwKZznT1rA~d>3%tG*hwAIc7O|>i!q4~@b>Wr2f2Z7 z-W7KNrr1v7IxEJJRV4)z1MnoSVluM=)NUq)>oD&_o6H|iw7wldW*&EJ#|cpdZCW2U zRY2bq>POtSBkT8_^V@qbqY&1x`ig!PD7%t?U>1+ElR~Cz-YSZTm^7x%&|Rh%uD4(k zSg(~_`R744ujB&3cg4VQUZ3xCxg!;w$}L*aTUyy^IxI%zNp$^PQJuEg3fg?&wpk4m zez&{tPJhJMpt6a~&yCYG^?n7OiYreHtRE35#ls1EC_y2fCT;G{+sBr}Rzpm%RRJ4S zL8`ixw*FGrn4+XQajO#YgmzVDQr;d1$$tqt0wXI2Qds{ARW7zR0unvPfjyz;-u_S@ zxKn~S* zj3r7-ph@Vpe1c~;SFlu2t+Uku3RAZ1inZL=Udi1fR>69$1o>TPp*i|ghj|f`SDz|q zFRg*GgHVNE~Cb4pL-)W0|95qa1 zRWhw#Dgl7Qs%gB%pDXI8oTZ+Vc}>69!E`xy{10=+zsK=mjc@VSiu|=s05Iz{uQdQd z<7Wff$7()#4$SC_wox0FFVAR`<&y9eO+QU$g5P{D23r=rJXZn6c4vdp3?f3(*&HmT z{rKKGABlb#^Fsrm``$h=iF&9YS2>fPg;0JNXPI*^TN>5Uc`cJOtv@&U!k?f1!kHty zsODnw!O&+MTv7_HG%YP5qoz&eMPQm~`X3;lrj@>`>fVq2p|~XGFA1B?TN7(kxhU4I zYE`V+qn9-SiD3S+u-Uw2u|}24V(qGy#hN{OS+hwznhr~ySL5)7!uS9a8q}9u+?~(Z zsYl5E!h`z&mv?V?Io+ApRoiGL(AkXA1vPo^KEs!^9tD$W8qd=!d6R&N?IKfW}QQp`jnz3nwj~g%-k<@KGfQdplEK5>~P-6K|z(EXHnF8w3wOM|b9_ z#8UD2+LwfJPETR%9mX8*dwEjcs2ws~fGq;3^YcdUV2HtWz^1tt*CD{p$Y)DHmMBRo zBVX`w@H|!z<$|=mI02qTYd)2w*&fi5NXa?F6ZG686w8OPL1?9E#q5;Kdd5{jl5{0) zPPnqRL$(B_ByERq#o}Sso>O(y*^1H)@aVnCmkBt6R#*H}lKET*bCp4}zBpjR#^t?j zSUL>2ynRH5!;M$mJL@j7oGXM56NCE)riwK2XWez}><&`W3jl15=Q?1)~sXO7HMG z*Ofj@sO*!}NFKgKtz+el(*TAYf*VB5;f8I#Rzs~1FUqeKP$1AIGA06e^r=mKB>fPGlnvlc#P@1J8a$+)wb#Gqwbl% zN)f9rpv1O-xIA=PZpuLDmBK7w%3tza1DOYxi58ZJ9bTkX|9)+SD(-%+`JhBD#Fe~d zaQ~hw2g7^L6o?j$*E{k((;kMm-zXRj0${K+YA4OGcypkFvScdQ;9h^E*}8lEjW>2R zB&UK8o#feeNSkM$44fF77l+~szFp^B0cbEw4v{!Al>V4<2;Qr1NjYh3CHT(j^j>%B zEmL=@G@j9ObmoY~zwtcsQ@VIh*N7uJK%>Cesu8a8nJafyNJ7xGxtQn)1?`IQE>V;^ zV=N)4 zBJZ>@+`CQeoo4J7s@CGv)SS*!W7bu#TB~A>DwoCDEwZjE)#*GvW?lWNwJz4Ea$T(5 zBJ27Kb*DyA8dQqT*MZK{c)Iu0U!wA)O{rFS${ndxd4i+UZ}})IRPG|@DNv@L@UMTL z9?G07RW(+OAL-BCcYp6eN|VOVdGc{EgF@XwS5whqulPOiy4QtwH`BnYgTwC8CcHgp z@Z2Y*lV5b|E1&1iedVTN@+;M|Un%BIpC+DX%EJtt(90Rx1bHg(xAx*CT!wb;K3jRP zQso_&3N+g-KIfCI7!uWi2(c_XqhNXQ{$wy4=J+0RqAp47-p>0nM@fnk1RqYh_*P9I zbj2f;9iW8YX*O#t485BhEliDWugA=QN(Qqtfe*mh?^wPGTRwGI#9&GqTb3{}&=1BM znXDr`+XO4&%Qv*Vo8&CJXiF)YxjKiMmrmcfK++csdiW*aAI(`7;*F`{S&GHJT>#R5 z;iIiMz0NOvfCdMsK`w*cpCuPYk>l!IZ6w_i9}RKS6DbJG5bocKK^Co|x4&9jc7aRH z>Kz+_R%PcQ6GO@Vm;C;563T(Ka*@igTrgNP1dAia9_3jBCoB`sq>{2ZomHMD(J>LF zz`VDLoAK=|&uYxS+;`b_AMeQ21V0UgK!K_;_P`%gZEtlmm=98O*sfH@=gC@Jba|nl zzPtn)4NR&MT5l{^rmS+kTF;%{P9P5&HGS(mfGM~ai;WE>CxUYY;cbwORk&Gr?xs;} zD$pye07_N5)$fWsAxgUrHWiaImp~&?-!=mCW9vAA;qWcLspMXloCw|pW*w9mgRFixSqtu?}jCyel+a)kfD zI`#{6|2uwI+4o6)H`^Qzt`^zmnfkVJgst1jbfIld@x$ubgOn-QtWe4jr97;@QE4Hn z8>`Ap*~CI*gF}UP=5cSqQ{{y+qZy@+h)l+vJ1Q2ENQpQj>o7c`qA8MODTRVP^+Um! z4{`oT-7g_>cWKS~j&uxjK1<|h-e%1wB&AxhxKs4|Q^;OKCJFj=Vrd5rQVa*;;((hC zLh@xGO<+(;oba~tu2mwRe68Pb{CHaQvTmz~xS;|XVs!D<)^xfCSRUhdm}c5b%8M*Y zQe^ib&QXHlFuuwU5NehBb?QZ_#hr0BYV1_fnWmFsI7Iy~U6}eehE3rwv2*-o$wt1D zwi((`(8iQj&p=g)ju)o21bdLRs8j%L>PXjrz|nxDssh#FAN2i!Kgi{0ef2?c>;9%A zPf&0KLU59Bg)_2V8bfCQ)SVP(ysIoe&=Gs4&Aa8Fo=8g%`|?C81N|5$4RS(}L(EAV zfb}C%1q9LkJ1>>EJjyg8S8XJ7xZt)cL6)%|WchBO-T~7}qGLcKPNv0B+#U1?M%LNP zc~ahum^3j<;1lS+P!j$coHeB?FY1y0?N>Dc2s4InrZP~yI0HsF+Ng0_4LTk9ue2@qG7acI!J~& z9BY$PIe@iuLJ`I3?u~@>H<;b?zgGD^1c);MKeev~3DrFC#@Pw-AF&!8BZTF9L8xL6 z3;6K_Nze-a51-6ctSRAcXIM|_Hh-`Eh0qZ&Yiab!^j|0oHGZS5Xy_RFDlWId_8qq6 z%4aI{ZH0io_8M$yQYeU;E-xjha_0`znAe><^W>hM+^Z*v<--u)HKkX~m5h_3Hg@>c zVAM=h>=lk-gOq*e1Y_ZcDiRCl;y{;uYI$McyvP)KC4;@}x+Hyevm*Io&rZOZqN+>f zp%aD#C1XkzekvXUjl%N7a`0rB1KQY>szK7n*1lzF)p)KUR({WYO?8()m?mmUKd5$O zdMOod(R(AG97s-*&R%acE2=s2NLIcKafQzLB{EQn*!`*opkwrp#yi1k z-IUJ;qy(UUIl4t;7F(9%^LzIE1P{a$Zu+%V(kdrtRZxyx^aCBzKtM6`>EnM*J2js^ z{`X4TF)5)BCuS>}hrr*8dChDRW?H@1UUq$KW*?%AJ(GtBEhc?57{XM@KOlqOIdqFY z0k9ZsVlceTP8ECy7fMThs9WW%750X$_&F$LwEJx<&`b)J8jCf8qh_!SrISaXvx02x zgQSNdD!}9dwBquoCzP6?6Ov#oQooSw$ob~j;)Q(~wT_rHPdSV49t?9(SBVQFL*YdKl}Tv}?-EMQ)d#rhd|S$#ry7>|{7MCu@a37vhDW^4IhH4{8ADh&Py7;L+Yvel>s-wNJvup8=k|n zF2F3f?p)ln$c<*0LW$|o;YBKuGqlD~$fivo!&8Uv)Yj6xbr@Ep0|h;Y8R$^^CqyjU zn3Z__Mph1#-f=3O6VI~#;6Vn31QRJ_za-g!oMJ+Zf@A6k6PQr79IfGN!j;SXD$&9a zqszni&ayhifnD$uL@`fF*-U$H)-cnohPK+vY~_!k97z`%BH)N#%4n&)b&#pzB)<{7 zZ9KW(9!$r>_+By{R;SQTy|&|VYV;RgGZjE8Misg(NI#WPCk;=*Ew2ggv6oN}N`WXp zRa!$-r45FtgCrH9Quq?nY~F)f`+AUN`KUp!#)e26h7ve1U`@`F zx68af`+*7M+)!Gw)qGbftxrsjZ%a2GF0`{dIi$K=Lbh>F+KBd znm+vlDRCU9baczlAvRXvYapd)6!cv~x%|dR$mCP-0NX2mKM1xlFQ8d}Fr2~dh)qaC z2#x5mOmY1p9*(c$^QP?mP4nzL>s&0i&RZ{(v#R(=dF4Xd>le}5>Z&FCHK>?2&SE{1 z9{D~*reTPbITU)JpbWN!?ji|*g4!@J$Yu-_sSLZNM+kLv%>*ctgB^lILj>F-#foKs zS)F+tivVzF_y>fMMlQhTj6Rlsgu_{Mh)^c^(oc{ZLDSA%SQ`xl&mCTpF&fe`+t zMSs@Wgcai3-6GCJFVji-hGj%g>|3 z2FPEg6_aNgAXx%Qa+)0F<2(jVN?iXd6a3+WIUVNlq$Z%5+X=%ah6RYN77n0ihrcxB zN4y=sED4OYVhVVKZVQB?q z#!AvDgxqSm;*vNExE_PH+tQPe%RDnU_VIO&)%8#x<-Y-gkRw##j6vB$351(^Xs=ws z<|x}53fbBy{N#(y`|jp;OGvdaanQeH3-s~sVEcpW1HPuI3jmc2*VgJbtcff(K*;>> za&ew>Fll5hZ5*%Y>GgKp-*Hx&XQ}ooT^pj zoMO`aV*yhvN*J3o>+pX$>o>RiRlTqx$*#Ju_70gLtrfzi>GhTGTiabFbNgE@T^cT~ zy3-BaI8+fjAlFJSj%rm{P>!~=B({bmbWN2H^{A*L-vntGs5IoMtT3{st;wUgYpWEV zlIg2+9*GV|XXZlHvXT^1>*^sS6NK8va$c^=&txeC1eNdjW88L(vs&62 zgUVDXTvcYTl_*y!O)~R`(w^k>m(z#V4C^Fc(2`P^WcpvNZ^?CfV8l_oGw|`uZN%JWx#GT&i&<T!If{d^;-|WZBi3Zumo!J#7i{21%@P zRBXOZs+Xf;T+cc9^{|r7#rAS?mTIJr6|N`d52G@a&V{K#?^vRBqW@*;L@#f@CI=M=`TsLLObILt z5X1$^g-vt*daAmtsOqw!s>_ zbhUt#ijvQ2&{A_(VL|n19(R}W=kBf>djnjeDTJJJN+yYvf6 z`lWmiO7m>zl%P_1#fGn8KS13q9li>9CI!EcD~C_~wTC~!g~JE_(!(F{b(gLhPv_3C zh`}ka9kHL8{j+cXOoJv-b1T%+C`jC-&?)*f7)!htPp$@|MS8u#Fa1sjIo(fq75zQG z2OZfIGpEe12cz|u?dT@Y2DdlsUtvb8^yB(BWfXuqn(w0EDT#b40K102JYR)X*HNKP zSCVVBNXx(iRS6j0&Tj)m()B^DOQwP(N^%Q<9e!$L<7>+Sv{VX^`zZ4}z~73Zl@dY! z6HU=dsi6OjKG-34z4WV^R4v0@Ftyf$VuMFN7yuX&)gXr)4D8DqWYGYFeHRL92!BW5 z@G-uU;$<#Pvwp_*&m>6kb_8?26W{=S)Ti5gaxcJr6OS@VD${_)g8ozc@u^sC zE_3MB7(c(%c0UfO$@?0Pjh5c}v@;zK2eW3QO(U+!Dp^oUQu|xRXR8;1oDk@B0soBu zaa#z^6g-<7=Z$AR`Jw(!M}yf>ew8Du^x{l#wHM1@zHqmDSGTRmE-V9v$zh^mAaa<1 z`IqH-*?f0=uzPyaz1%uJzTEBZ|9JBL@^rspGqvRqa-TZS@p$S97{U+;(YpiL;U}XR@>{uC~_2Kg4WHm^Uo{bzBPS*zTWICw_eEI z$+Rz5cD8n5@iXMlHW}PBv$K~MP;t35ms@O``&uAaQ*7)*C0w8qPfeguX=nVlz(_s= zmA1u^>pLo;8U^;8E$=+w3mWSUjxUejZ*Cv_ ze7SwFciG+F6gT}g90mm}@<){cEyve!R(w7xikayFyd_fbw5iUx#WB)qUmeTp^4^{u z5Scla$CJ&Lg`gRq3l0n8lNhF`D$&;xB?GF@Mm3ib@+h0hvpy?M#pzUzDQ|S5T{Dp$ z6f=nDdCZvh+JAG2GA^(sji3*VF~aBw`QkdB9u`_ zBHM+U5m&5qM}lL@r6sG`SnIs*yhO*Vr8VtMiZC-6*X{RnL?R=qk7>>;IZnFa!uPm_ zKaz(QO_fic)9r&pINdE(9k1R;z5T<}la`?$vL>LFiMx?r=jlhV#E}a-CQgd8K|#Nn z?~%K#JPRxejgBDzG>u$OfptJVpdkg=>A$u>bdXqmxqonSc`SZxodAgtlT{~YFpWmV zEaFa5T%QQHc4I1M*-+sJi`xeRAi5?ki9?gpL{+ygI8 zy1$&j;1?Vvb_DsH)^NNdHh)^&u#1V zng(fExv?RfJ^l;~sq|Nnk)kTwu>lhN z6Z>&U8mEnm<>uQr&A02~e`mioE}l19f4qEXJ;%SlY_WIGE}lPA@1B`=XTLUE7taOf zM*p_pHT?A@@Lg(FU>wV0!Fv4e$em@u>`Jy=U|HHl(vi~~;k8;;MWj3EH-$VVMN@%$ zOgudk6C4gwWTP^SoTi_U>uRkfB-fYZF>17iQvL(In@8SJ=tF@Q7MYEPdlJGTu09GhY?$^UQ%eK8o=$T&Te+8NUw5uW z`wI>p-K`#F!oKPZ{TjIvnG;`}G^ZyOt7o5JSw+S!F~?i@vQkQ!+Na|@9rOp{&W1=S zoFz|Krq;aOLrT2O4#M&2;o-s2iFg*gnjU@M2#WRN(ZT6qDKUHUT_kzY3W>ht266d* zI@ZQGQ3ptf=x?L4Ds8rkPIo%c7u1SsKG)r3d||w{cY7%7LQ0$TgR{1F^6Mwy19FaXY}&q z!(kU0PfV^ZnCf_vUPrTh7~M{WQGOE-hS4~lPQgwd$%GTijupYxVO9l{_ck6rRoYR< z`Y(`ost$GtEGk~k%s?_p-E5!)8#PN$P}&&`^WJEDTcOl^UWfw6Re_v2BYhI0;Q}dQ>)XLgfu^xc;59=kkL$LZLX1}IoHU%rYf=YW7_H@)S4Q4)3kR!a3oqXwBBP_u2j4pvV)b!NxT>TU!n*EPm&Q!Ua(f`> zni(Z0e4RpR6wah$t(0b}(}$K0Q4M9MWRIzhBSU{>1utGSF5@!sj_TSkEM&6!1&a<@ zSspYoT%wiR!@U*H))h3GX$`tq3U4g!7D9Kaf-QID*0enHxiLPTsZpT(WlSz)IdjWY#H6G>3k zJE9McOFzhl!#%@Qu2$9ZCcaPdoq@~)vKNn4{zCv+-v#JWzcavmA@Y#+I}jsoLfhCg zLt4B^$xc`%=f~}l{q8y~sT~o4Tvs4(M`EK7c6ZkslqS4k zvny_2HDMT%tyq@q>snd|o#waR7HrrXV7rgTli3vVu7Mx5NhA@dpyJednP&%8Wnz?C zOReHTvmoi*74Q;%8Ub0M7Z0}}aS@O)f~Da_uld+oGOEJ6n8Y$$XHyGVEwzg-m|Vq& z#cXxDmWf!vID{ZDuOY`0=wYZa#ExuaA6nm-l2doS7N4n>|kCw$DA+VKhj4e>GgWQ{9N+>mMuBQsVXSJ6+!#U{8&Q<^$O>MsMy%2QFk+47Ar^c+K@$E+ zqF9^3;o2(wwxW7fIK^7%S~}4G|N98z6rl@$2<)rH;6hLYI)9?)jPwTeJzpWEsdQTf zC)UUQXue$^-?iR`o}F_~42xV>SYK<2n4Sj!N{^412_doFJQ3W#Jlz&nRWklU7R|r{ zD1qF*;0YVf>&vY8@WVu_X`}w!dZKQLozn58KduRu475z;4VO|?wp6D>F)tF8@+37S zvV!ihRfS2b;r@R`mC|zjtbx?k*toZOXmYb8mMN(EL$rpv`^_?JYXM6dN&>xF5mLdK zp>>RTBdp6TrFOnjHLT8kly*iCEEE4 z*i{NyysUFuY)h1%n>qvniA5IxZC`-+m} zCY6zF*SFiLv?#erVx$ts$Ei#ZJ$d@ph`5d>*){F)2(MhC=g$+qeZ5g`aF1U zVlF@{-E{)H1yhoBSU|{{I+3*~eM~S}q;l-~iu=uZLOG_SrSRLei;X#Sm6FCls06?j z{(1#}*-FbsI+&zG=2`YCGy&#y2mJ-F5savn1FgxwUP3-@`Hwy9xES7>L0_^EW383q zMQZJp%M&WI^HN%pmm5$ylgBD=U;)CHhA*?Q8t2)+kf&Yac%~m)IE{eB0WM_X6jP>< zy$WbsN;f7W5argE)Vw7hf(*^o+!{}1)-{2(5Tx%jHm1a9u$qmm5s`R01*d4hn)sh0 z6{-ZQX`Bw@o3XsybvCLtyVNI~)W{O8{^u+W6=M++mH3Q4R%Kc%M%U@O!ow%3cx(9# z6kQ8Vg6(o@Z6w5YcJI>RE$~zO#poTR5r(u_kT`hjI))gSd@`*FHi-rMIUb7E%@@C( z{d#_UeiyG^EdSH|`Q?kNcGPhEHqv4wZn+%vKU>2*9_88YV3Y^P(Yz5E>cpjoIQGZ| zFsewNz2_s_xA&3#0siWR!$NVDk?)=&%VW!^#_G^k^%=zuvM&)hJCowZl-zPMNzDUn z)A8n*I|QVID1!EMD<@b@TjP<*T|q9{jX-`ol_#vGE8Mos4OLV5PpZMC+@zB!adzwN z@Ame)m)pJL!`;mfm+uaKL2tJ{FM+LHluG;?sp+-t%Mef_>e0%7FAIl!;SYy@uL#R$5TRZrzM$_e}=cah`t!vW|hqvS1dA1Rx?QB;o$dtKmQD?oH8|- zphT0Kc*uMOM+H?e;095ejJc>s=9)GIxUist>BrPVkU36R2WQcF|9p1-8%+P@clh7e zw21TD)zx@amL6bh4t=o9XVFOG@nD9_#1S)DvWfN5{Pmyb(^m8RxCI}E{o9zlw2VBU z6Tb0)SIjLuOyj9LlpQZ98V*68WDS*;%1!eDT~iXNaWQT(f)=D!siaoQ_sTcE$EJlG zZ+e@EX3e#h%(;M6DFuC%$7_{W)v63QvfMg!rHaSc_C5Q1m1{@nQm5)ewmsI$ZSdk( zw;I=Z_8d!bk<+JYRkOg;dGo;S2b5f@Ko{gbplV(M7qmZ5!0C=U5qz=$ryIHMzOP_^ z*V;9lAXLFGiF2xInVfS<_%Yw@p1yk?au?F;C|7-kGc;hI?w~*^dn0fuE~a_5jpAFm zBFA?6Mm_g-KAnMyT(s|DaUbyq<^q_q<5AfT;yPB{OlqXsh&ij^Ex660!>)q5>v^O+ zV|BZzaN{uw<&zD0CM6absNvleEI3-?-9<$^@K0R?o<_<;`0Ak!R>#V@KEx#daE*+4 z=en5AKr<*C0JoR(R^BAdM3owpI?<-MkT=b|AUqus0dBE1+v<=Ad%9e^ZqHU4303v_ z$Aon_K6N?y)a8%!scY9ja&I?F_@}nor8*V66&GtVFFcx+#Q{AjyhN&ZLI}gI?pp`@ zCjzn!%Pt+1rhse>rZPB}#Hwa6l^OltB0zQ^%W$VviPzz!5!G)v7Izu;$f>v8ARN=< zpE>2A7ChmI)Na2luBjMi`GjQyioHoJDAWE$8=$tK9fjv_HGBxd%iFm>;kL2Iuqp@f zy9E}?aJM&_6*TwiD^by}x`~V45@Ue!L_JbKH@g>(w4}oK=kpX4k1~g)P?nB*#4iZ* z@MRqHJIfBwVCfHalR4P?1dIjGS<*wne|c(%KShCIjX6)7Q4jB&$jSxQtcKP42=V{@ zyKExZok{0*HW)${T*y_XAKnzdQ|4eymer?9gXK|%`c29ittH=gdF!aNe|*_JIyyMI z+&{SNi7Vx3XLGB|`6)E9ck)lS@o?JQ>UBob-m#Ev3n50fw62U$XOd^PDROIpxv^o% zK>&4>vR|w>E`5?AV0_Kz@?t(Iir%T3J{fy$uy#J9r_5fS4Z!ZtVQ2^l(8;Z>v&P>9 z&h*B!|$ykHoHEJWz{bTkU2)=gEHj z+u#aGRx8}qc99+fyiO*0-kaq&tk(4!5)V~8Kh1}12IZ3^O3-5 zdwG?Q@(JP#XnxDzzKN{!%68DkrQ6#7ks?}S{zru#@x=;3rcUF`E=-dc0&~*mt8*$*Wo*7c=Pbxp) z)WstKv+Kb$Km|-klYDwR6#ojUuzz5a1Hk~@-VKI>cyhlkmV39JKzKk(WCG6pDI>i2 zcW3wD$4kDe!{X`+bZC%ZTl@({r}R7g0`w)P3e-KxURGP|+2k=*Yd(c?jFO^gg00N- zL72(FV>{ctGC|8+tZFjNOc_g*10R!C37kmJ#Zo(;;|Wv+ZW>^K*b$E)=^gdD9znTr z@Y!iZeR1UQCtPqKL7R=T7|81GPciQcgkko@>5UL1auj15IaOyE&Q~5F<8txdR)~WL z!w>TmXmDEGy!f0aw1F?wPU`ch(6G_!fQovYXa9bDfVq%2tVztv0U9b-pglH;OO35A zBsc0jU6-{#!R5eyMfvWL_q3fJHKVFotAvbK;*p;IUOX6W+pda1tsH$2XW2>d_mLPz zm2a(BF=f_fIE!THtTDI&z&0*G13WEmCxW=V(C~k8Q)IWpdZMjk&Fy}j-n zn&VGhke)&a3ZIAt7~#voO^(#2^d{89IS76jU*)?+oQca`Ea~dLoRO`^k&GvKKNq_t zhFzIb3rz+O#k+SC0W!M+jM!iC;(a`YirBJ{i6*9kzQ-9@oN#sx^65qHG@d|zRZTJP zEt(tokr@qUg6)Jgiz{PSNM^wIR3C3Bi#&xxfqv}bW)l-_N_W6iCG#OdEd33!*d$S8 z^(mwXj|a1zVxnN)Tp~AiIAH#i!0cvnhO+edc9%r{omt46IU~Jl)eMxcT|zb5tD91R z=ut*uh@AE|0zV{~oCtI~fTVei6M>&uRNT&@&!Sf-mI#M`3=#IYX^mEkOt8?qw0yR0 zu&a4MSE3^XKgVTEtWc()1wSCEtgw=~D?4b)ZNG^!4d<(?uNvH8Y-V13#a}efC+DMo z!v7{M)8w0mi75asWiaX&HjA=d04QM1f6woyoleITEeEeBz@()$a!P`Khxjj&PVJrE zm+7A-#ZVjvL7=jx^qK0T;zCeE_WW8t-yHI%L-}+spT+ty&Lm7znZqr50oitFatK=8 zm_*;BV5muNN9~ zbN3M=GK6a3?k_UpUiW14Q9~;9ZE2~&D`E=~cHmA2p2_0F8-;D~e}ouogcyQW-8>c- zHutx>yKp67M=uxd=zVwhPt2cS^f^^~Ty2o3a zhvw8}R!2a3UcJ;W^CwLD$L{5+p%ne6^|XEPvp!L4tBbFFe_QvmI4ymDu&3d-wm2o- z?e3iDZWgDc2xN{MYl{=oqu!72&72k|rPg*WPDy+F$K4|{pT#NZc6YaXV)pDQBvd7l zr)&D_*ZPF7J%Lnq|8csxdrVz^vu3({0yW$}-84e0u-?@ZUpQ@dWH>3+o^ zkUq7~mlCS0rq3r3Y3lQp?2~~te`=p!$v$72KKoDY^K04XE8XYI)u;CPjkWz>e`UH} zdurF;%ISV>`h5A+KEIQFeq;K4_0&FJ%Rav~eSYTvUD^W@;jKKyL=zkNdIr|(XVHX(aIcFMN@2~>5vyVcv<+?9Q@?SBGI z-R}L=+wRIP&F;Ti{NCSL)154S>+fjp>eb?R{?04i$>Nv&&Q}iO@M`f3f9GpGp~bKJ zoo{p}i(mCS-|9}jTfCF+bSJMD@8q@aBz^+Ut?FJD7a?}m4C>M)E%$w~&Jcy$ayAe< z@%>Yz#J#;uI;9^`BL=F|%~?~X0`9O;epq~z!|qY(jX{%RV5-HvUdAHE5c zN+0Y!pSah0(32Lq? z<-h*=Z_k^p%jG{F{<$u;`t380ma~@C1&dgy#!j|}8cRQ+E3@23m_+H9V=%VT_K*Be zH|7tGX14Ia|14jv>vs`Tv3~7wzzi5B?OBE)0FW_|S`6c46S*;sZa? zz)KzqeQ+dk+!Hd)pemkQ&IwoQDRWJ@R?oO&!m!1?KGe*j3eOLN2W2iG=yD${Vv&Sm zRG9CX=P2oVx=B}-rPcC+3pyg0`v<+QU>wwcf`FI!%Q`OyzsigMMF-_o&?O zdzDg5AePVfSGMvigz^nTZ_AVpWsF%tDSsuPNrju9ob-w;I-EuYO}qI^`$LOD3b1%| z8~;pQMC8#SlBvg(;1CK3yArs&2nfo@yElSnrm$V?bRhkWOOt`qhpg0&pN3mHirVuE zJZpLx9%7uh+bq__YwSfVaBv!%4O#YxQpmNKi*0Fj3Y{WaBk~>nx~E_FmKP(Opg>GT zRc>cFi(JSvVovI^&o=yr>MZBM1*#w#3XQxIv^b|6^6=va{IRSlDL%f(Huvhs5BOs_ zKwX0=Egrqp%+%<1vmskq#B+`qt72LyUq{9(Tl|0%*Yj6NFnOt+5Gg(oOc_-sp)lGS zXUE4%3x8`;dk>rG=1D(7fDy)52PoJ=*LqTMy|qn&P8nT|>4%#BWn96tu2QyW`(ln+ zfrbZ(*c_@Ub3Qj@EmP$(5|s}%211v~LK}%pahg6z7TCHp-E{cYvPN0+Obmc&a|M|K zHeAm5Mf4I&@mQ}U_P{$ajQDUBnyk{_iB2rN#-3t}#H5m53pTbITrjAnHcON#jwN1a ztPK(=1)7xTk70T=cz8V$iy*}td3k~gO7;>;Pw`+)An(Y)B8VbKRE4y~Dbo%B;bHYp z;d;T`VfJ_^QS(yWzNQB!pCT{9=9PL$Ehx`AP;@_Ig*y!WA995%Xxm?>0%=+!U5B1z zTyv7y|H33Qi@CSotAFLWk*Ft&RVog1jk(^d`Bw)^?gh1(HO_QM$Ne#kZ)=5?l@2axj(!c~gCIRlWiFKWnY z^y~O&gT0`Xdw~~8Q9w>D`Nqv~Ky3=VXLJ*G;_Wl&)M4Q0M%lG!cH+u-6RG*Dd}PR$ zj%Bss-n1*)<`b+Z-=G$D4j$}JE($4+?oXw8vW}g{AnLfxrvAdt2V(>fJaqm&>_1zl z(k1SBG%=oSL+Ryd$N&)?I+hAqSWnf(iDoR`hBMc2k;#6eiPqW0hOQf|Q`fhgJ0~Wa z0SY^mcClnC8O)>Q4#p?JA{OD>BMgZz*J4-^f;60rORhxvQrs>*4Rw%S&CzRQWi~MF z1(nGK>yc;f2j)2Zsi$d;gc_YA2!$;r;`rVCA+dbDEO=T#`XP8~H6ZMB2Jza(Xcns2 z2_O=uV!!DjheZb71jqnb8XiLj^qoTJ-L`a6Ar%zv14nCvnEGrz>Tsde%ifCsNc^#a zAYTNjH4 z(Ur>^x(to4N}}07#-?_F61ki6P;XPphwI@HmfeAl;LjNT58AjqafbJse{X z%s3&{a!Oqs%2vWBBsw3mS>28Xki{e|Mgnk<(O70J(G5w2xg#W0FvmWIU zjOHMX#L3)B42_J-GTsu;GHJ< z6%0GsFJ_=|wsnPR(};U&%l{}6z+{$N$;wR{MUAYup^Re)v&>`&PwdMoe%l2e`o*q`JcV>B{!eVU!0>g z5_Qmv9!rDT;{F!EN#5bUnO9fz1$~y|zk>IqtBP9=Y%*?Y#JaAhEo|j44!XE9mdcEe zT`vFc>r(4mfygm=cbI7V{xc2s4V(O5W>nz;hNn9cDl97|KioU^P7>`&gptkZiP*sk z-mkyRb*^KGzQXsc6Z-D89Z&aU*I0yx&2Gd(fSP~vvQl9IpzGb_t{jrBK;Sv zu-D)_=M|EOD-K(O(%)_GYzLO{_e4dg0a+@TH)m4H7DG8 z&CBSjfRrgIyB0W?qF9h$RaUXf;h_P$LxNTt|17Hw<+}%14=C+x=o{1LPI|~zFYvw> zaF@z9JJPRpO!cHap3UoF{B|JnPUMgkxO3Db3RT-)Ob))MSR_{4dxc9D`cCby%)%~L zm-$o}SZKcI*)H7|Jx+GT^R?O31_$rbrV=NYos^j~TpxQ(>aN**|DK`qSvIR{m$yyN z(sdVpON~FyuQ~gj9m=gfw{v>-7CN00@0Dl6DU5DQ3%uQjFLMcJl%4W@W0m98&cAIT z+T7G5{=tuTq174P?NoB;X_VGIn(7j4Qup;?#K;DlG5=jxBe=e!C}ZcMRRxlPdpWb= zpH!}A6&kCzay_VNPEIYC&;KN*$sZVtk25nKwVVB{mW-htTW_CoDAO-(-OM=w&V?>B zZ-kb^mz&)hyZoKsO|5l?r)x~u_<>2A<(t2X6rzPcDmzcqm*mWe2~8B0<*!uV)&_>; zCq_rKt~_x-9EqRu>~oH2vs1^`*G?N_9qIA!WgAv&j`X;#aV|M7fOLkF{die^W5 z!q^HAWo|QnH8XkKBJ4+FY|&;HAy$K+dt_j9si4DXB?oF8RGp%bv|DJ6ZM!pT>)Ia@*qla0N(z-RW~? z+HuSGwLdpEg|=iGvtmvr{Sb#MXUo9jvz}*L^CZ$kPkYHDS@myG$G#bvG=EbYt%|9P=c$Z7|fWbmK%Gi}71<;=s%4+e|{}Z7(iAwodG^ip$*M zw?55l0-Ev8o&LMydlMeVgw~5yFSx;^fZAdsz~fM;4!{A>Xf#02<%DK9CS;f!0H81h zz#13=;v*>Ns^dnV{mFgDF9Eu zpaOdWYsY&7U6usLl_C;=QoS*zW*!Bs=rRJ%1c0>EP!}Lqh@@gEOlJe4QIUW`18tte za)Y1X@*sdjkBoFdsEYmB$13qY6)8c9>zDj;sZr8Gcv1nz0Jso%%iHyNp->zj!ChGQ9);_kWlCb z8F^m&nky@Ua{zF?LDf@O{gi-%W|Av$h6*Z_3K5dpr~1D&T~`4>#vB7Zg^M;B>(*Wc zJtB`x$UyfG`c-BZ05D~c3dRr=_IjC+fJkzAHkj03g;PN1kTDofKs25sA~Yy2 zL2#*%0e>{DBFm=MBv6wL5x3wXTA;z-R5zP=5ww&76G>44j*y)kXyL9p0VzwM1&CL! zXs$kq`-jmv!#*dmQ(}DPCMU=#fXk5}usC2OYgicxg@NogI z{*=mS%@OuXou_WzFa?GE3?I=Mw@*vE(hYA_t)0GrhdNOrct@dI5Of`BM??>{*u!oG z#=)LWbc#*TpIeI)W`AsA%mlSe|Au$Et#BVk%!3FAo!kL9xI`B*I^kdg?Zq`CI9)6O zuq6-z*?$s-?+vMjiGhdq+=Hjs3KJmC7WOhzAVpQUKqg~iBJptMqtzV_Hk~JWxhYV} z1h`m%$v+f+v@qhKr|O1%&JGWcj7{+OWyn==!oQ?U)Y%$|#IfP?=ZP%1|xf3!J~?87mSrkYqRix^XYAu5F$6CxvA8ZdYA#YA|vR4aXV%+d`* z;si4F@U8ziv`5>R=#E~Y&c<-Csb$E>vP{=LxV;)CU}yndPAH3;h$I|`RUn)8y5Ei_ q5iku>5==a@mVw9+IlQ`) to detect when the entered key + * sequence defines the path to a file. + * + * By default, {@linkplain ./webelement.WebElement WebElement's} will enter all + * key sequences exactly as entered. You may set a + * {@linkplain ./webdriver.WebDriver#setFileDetector file detector} on the + * parent WebDriver instance to define custom behavior for handling file + * elements. Of particular note is the + * {@link selenium-webdriver/remote.FileDetector}, which should be used when + * running against a remote + * [Selenium Server](http://docs.seleniumhq.org/download/). + */ +class FileDetector { + + /** + * Handles the file specified by the given path, preparing it for use with + * the current browser. If the path does not refer to a valid file, it will + * be returned unchanged, otherwisee a path suitable for use with the current + * browser will be returned. + * + * This default implementation is a no-op. Subtypes may override this function + * for custom tailored file handling. + * + * @param {!./webdriver.WebDriver} driver The driver for the current browser. + * @param {string} path The path to process. + * @return {!./promise.Promise} A promise for the processed file + * path. + * @package + */ + handleFile(driver, path) { + return promise.fulfilled(path); + } +} + + +// PUBLIC API + + +exports.Button = Button; +exports.Key = Key; +exports.FileDetector = FileDetector; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/logging.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/logging.js new file mode 100644 index 0000000..6bdee3e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/logging.js @@ -0,0 +1,668 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * @fileoverview Defines WebDriver's logging system. The logging system is + * broken into major components: local and remote logging. + * + * The local logging API, which is anchored by the {@linkplain Logger} class is + * similar to Java's logging API. Loggers, retrieved by + * {@linkplain #getLogger getLogger(name)}, use hierarchical, dot-delimited + * namespaces (e.g. "" > "webdriver" > "webdriver.logging"). Recorded log + * messages are represented by the {@linkplain Entry} class. You can capture log + * records by {@linkplain Logger#addHandler attaching} a handler function to the + * desired logger. For convenience, you can quickly enable logging to the + * console by simply calling {@linkplain #installConsoleHandler + * installConsoleHandler}. + * + * The [remote logging API](https://github.com/SeleniumHQ/selenium/wiki/Logging) + * allows you to retrieve logs from a remote WebDriver server. This API uses the + * {@link Preferences} class to define desired log levels prior to creating + * a WebDriver session: + * + * var prefs = new logging.Preferences(); + * prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + * + * var caps = Capabilities.chrome(); + * caps.setLoggingPrefs(prefs); + * // ... + * + * Remote log entries, also represented by the {@link Entry} class, may be + * retrieved via {@link webdriver.WebDriver.Logs}: + * + * driver.manage().logs().get(logging.Type.BROWSER) + * .then(function(entries) { + * entries.forEach(function(entry) { + * console.log('[%s] %s', entry.level.name, entry.message); + * }); + * }); + * + * **NOTE:** Only a few browsers support the remote logging API (notably + * Firefox and Chrome). Firefox supports basic logging functionality, while + * Chrome exposes robust + * [performance logging](https://sites.google.com/a/chromium.org/chromedriver/logging) + * options. Remote logging is still considered a non-standard feature, and the + * APIs exposed by this module for it are non-frozen. This module will be + * updated, possibly breaking backwards-compatibility, once logging is + * officially defined by the + * [W3C WebDriver spec](http://www.w3.org/TR/webdriver/). + */ + +/** + * Defines a message level that may be used to control logging output. + * + * @final + */ +class Level { + /** + * @param {string} name the level's name. + * @param {number} level the level's numeric value. + */ + constructor(name, level) { + if (level < 0) { + throw new TypeError('Level must be >= 0'); + } + + /** @private {string} */ + this.name_ = name; + + /** @private {number} */ + this.value_ = level; + } + + /** This logger's name. */ + get name() { + return this.name_; + } + + /** The numeric log level. */ + get value() { + return this.value_; + } + + /** @override */ + toString() { + return this.name; + } +} + +/** + * Indicates no log messages should be recorded. + * @const + */ +Level.OFF = new Level('OFF', Infinity); + + +/** + * Log messages with a level of `1000` or higher. + * @const + */ +Level.SEVERE = new Level('SEVERE', 1000); + + +/** + * Log messages with a level of `900` or higher. + * @const + */ +Level.WARNING = new Level('WARNING', 900); + + +/** + * Log messages with a level of `800` or higher. + * @const + */ +Level.INFO = new Level('INFO', 800); + + +/** + * Log messages with a level of `700` or higher. + * @const + */ +Level.DEBUG = new Level('DEBUG', 700); + + +/** + * Log messages with a level of `500` or higher. + * @const + */ +Level.FINE = new Level('FINE', 500); + + +/** + * Log messages with a level of `400` or higher. + * @const + */ +Level.FINER = new Level('FINER', 400); + + +/** + * Log messages with a level of `300` or higher. + * @const + */ +Level.FINEST = new Level('FINEST', 300); + + +/** + * Indicates all log messages should be recorded. + * @const + */ +Level.ALL = new Level('ALL', 0); + + +const ALL_LEVELS = /** !Set */new Set([ + Level.OFF, + Level.SEVERE, + Level.WARNING, + Level.INFO, + Level.DEBUG, + Level.FINE, + Level.FINER, + Level.FINEST, + Level.ALL +]); + + +const LEVELS_BY_NAME = /** !Map */ new Map([ + [Level.OFF.name, Level.OFF], + [Level.SEVERE.name, Level.SEVERE], + [Level.WARNING.name, Level.WARNING], + [Level.INFO.name, Level.INFO], + [Level.DEBUG.name, Level.DEBUG], + [Level.FINE.name, Level.FINE], + [Level.FINER.name, Level.FINER], + [Level.FINEST.name, Level.FINEST], + [Level.ALL.name, Level.ALL] +]); + + +/** + * Converts a level name or value to a {@link Level} value. If the name/value + * is not recognized, {@link Level.ALL} will be returned. + * + * @param {(number|string)} nameOrValue The log level name, or value, to + * convert. + * @return {!Level} The converted level. + */ +function getLevel(nameOrValue) { + if (typeof nameOrValue === 'string') { + return LEVELS_BY_NAME.get(nameOrValue) || Level.ALL; + } + if (typeof nameOrValue !== 'number') { + throw new TypeError('not a string or number'); + } + for (let level of ALL_LEVELS) { + if (nameOrValue >= level.value) { + return level; + } + } + return Level.ALL; +} + + +/** + * Describes a single log entry. + * + * @final + */ +class Entry { + /** + * @param {(!Level|string|number)} level The entry level. + * @param {string} message The log message. + * @param {number=} opt_timestamp The time this entry was generated, in + * milliseconds since 0:00:00, January 1, 1970 UTC. If omitted, the + * current time will be used. + * @param {string=} opt_type The log type, if known. + */ + constructor(level, message, opt_timestamp, opt_type) { + this.level = level instanceof Level ? level : getLevel(level); + this.message = message; + this.timestamp = + typeof opt_timestamp === 'number' ? opt_timestamp : Date.now(); + this.type = opt_type || ''; + } + + /** + * @return {{level: string, message: string, timestamp: number, + * type: string}} The JSON representation of this entry. + */ + toJSON() { + return { + 'level': this.level.name, + 'message': this.message, + 'timestamp': this.timestamp, + 'type': this.type + }; + } +} + + +/** @typedef {(string|function(): string)} */ +let Loggable; + + +/** + * An object used to log debugging messages. Loggers use a hierarchical, + * dot-separated naming scheme. For instance, "foo" is considered the parent of + * the "foo.bar" and an ancestor of "foo.bar.baz". + * + * Each logger may be assigned a {@linkplain #setLevel log level}, which + * controls which level of messages will be reported to the + * {@linkplain #addHandler handlers} attached to this instance. If a log level + * is not explicitly set on a logger, it will inherit its parent. + * + * This class should never be directly instantiated. Instead, users should + * obtain logger references using the {@linkplain ./logging.getLogger() + * getLogger()} function. + * + * @final + */ +class Logger { + /** + * @param {string} name the name of this logger. + * @param {Level=} opt_level the initial level for this logger. + */ + constructor(name, opt_level) { + /** @private {string} */ + this.name_ = name; + + /** @private {Level} */ + this.level_ = opt_level || null; + + /** @private {Logger} */ + this.parent_ = null; + + /** @private {Set} */ + this.handlers_ = null; + } + + /** @return {string} the name of this logger. */ + getName() { + return this.name_; + } + + /** + * @param {Level} level the new level for this logger, or `null` if the logger + * should inherit its level from its parent logger. + */ + setLevel(level) { + this.level_ = level; + } + + /** @return {Level} the log level for this logger. */ + getLevel() { + return this.level_; + } + + /** + * @return {!Level} the effective level for this logger. + */ + getEffectiveLevel() { + let logger = this; + let level; + do { + level = logger.level_; + logger = logger.parent_; + } while (logger && !level); + return level || Level.OFF; + } + + /** + * @param {!Level} level the level to check. + * @return {boolean} whether messages recorded at the given level are loggable + * by this instance. + */ + isLoggable(level) { + return level.value !== Level.OFF.value + && level.value >= this.getEffectiveLevel().value; + } + + /** + * Adds a handler to this logger. The handler will be invoked for each message + * logged with this instance, or any of its descendants. + * + * @param {function(!Entry)} handler the handler to add. + */ + addHandler(handler) { + if (!this.handlers_) { + this.handlers_ = new Set; + } + this.handlers_.add(handler); + } + + /** + * Removes a handler from this logger. + * + * @param {function(!Entry)} handler the handler to remove. + * @return {boolean} whether a handler was successfully removed. + */ + removeHandler(handler) { + if (!this.handlers_) { + return false; + } + return this.handlers_.delete(handler); + } + + /** + * Logs a message at the given level. The message may be defined as a string + * or as a function that will return the message. If a function is provided, + * it will only be invoked if this logger's + * {@linkplain #getEffectiveLevel() effective log level} includes the given + * `level`. + * + * @param {!Level} level the level at which to log the message. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + log(level, loggable) { + if (!this.isLoggable(level)) { + return; + } + let message = '[' + this.name_ + '] ' + + (typeof loggable === 'function' ? loggable() : loggable); + let entry = new Entry(level, message, Date.now()); + for (let logger = this; !!logger; logger = logger.parent_) { + if (logger.handlers_) { + for (let handler of logger.handlers_) { + handler(entry); + } + } + } + } + + /** + * Logs a message at the {@link Level.SEVERE} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + severe(loggable) { + this.log(Level.SEVERE, loggable); + } + + /** + * Logs a message at the {@link Level.WARNING} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + warning(loggable) { + this.log(Level.WARNING, loggable); + } + + /** + * Logs a message at the {@link Level.INFO} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + info(loggable) { + this.log(Level.INFO, loggable); + } + + /** + * Logs a message at the {@link Level.DEBUG} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + debug(loggable) { + this.log(Level.DEBUG, loggable); + } + + /** + * Logs a message at the {@link Level.FINE} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + fine(loggable) { + this.log(Level.FINE, loggable); + } + + /** + * Logs a message at the {@link Level.FINER} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + finer(loggable) { + this.log(Level.FINER, loggable); + } + + /** + * Logs a message at the {@link Level.FINEST} log level. + * @param {(string|function(): string)} loggable the message to log, or a + * function that will return the message. + */ + finest(loggable) { + this.log(Level.FINEST, loggable); + } +} + + +/** + * Maintains a collection of loggers. + * + * @final + */ +class LogManager { + constructor() { + /** @private {!Map} */ + this.loggers_ = new Map; + this.root_ = new Logger('', Level.OFF); + } + + /** + * Retrieves a named logger, creating it in the process. This function will + * implicitly create the requested logger, and any of its parents, if they + * do not yet exist. + * + * @param {string} name the logger's name. + * @return {!Logger} the requested logger. + */ + getLogger(name) { + if (!name) { + return this.root_; + } + let parent = this.root_; + for (let i = name.indexOf('.'); i != -1; i = name.indexOf('.', i + 1)) { + let parentName = name.substr(0, i); + parent = this.createLogger_(parentName, parent); + } + return this.createLogger_(name, parent); + } + + /** + * Creates a new logger. + * + * @param {string} name the logger's name. + * @param {!Logger} parent the logger's parent. + * @return {!Logger} the new logger. + * @private + */ + createLogger_(name, parent) { + if (this.loggers_.has(name)) { + return /** @type {!Logger} */(this.loggers_.get(name)); + } + let logger = new Logger(name, null); + logger.parent_ = parent; + this.loggers_.set(name, logger); + return logger; + } +} + + +const logManager = new LogManager; + + +/** + * Retrieves a named logger, creating it in the process. This function will + * implicitly create the requested logger, and any of its parents, if they + * do not yet exist. + * + * The log level will be unspecified for newly created loggers. Use + * {@link Logger#setLevel(level)} to explicitly set a level. + * + * @param {string} name the logger's name. + * @return {!Logger} the requested logger. + */ +function getLogger(name) { + return logManager.getLogger(name); +} + + +function pad(n) { + if (n > 10) { + return '' + n; + } else { + return '0' + n; + } +} + + +/** + * Logs all messages to the Console API. + * @param {!Entry} entry the entry to log. + */ +function consoleHandler(entry) { + if (typeof console === 'undefined' || !console) { + return; + } + + var timestamp = new Date(entry.timestamp); + var msg = + '[' + timestamp.getUTCFullYear() + '-' + + pad(timestamp.getUTCMonth() + 1) + '-' + + pad(timestamp.getUTCDate()) + 'T' + + pad(timestamp.getUTCHours()) + ':' + + pad(timestamp.getUTCMinutes()) + ':' + + pad(timestamp.getUTCSeconds()) + 'Z] ' + + '[' + entry.level.name + '] ' + + entry.message; + + var level = entry.level.value; + if (level >= Level.SEVERE.value) { + console.error(msg); + } else if (level >= Level.WARNING.value) { + console.warn(msg); + } else { + console.log(msg); + } +} + + +/** + * Adds the console handler to the given logger. The console handler will log + * all messages using the JavaScript Console API. + * + * @param {Logger=} opt_logger The logger to add the handler to; defaults + * to the root logger. + */ +function addConsoleHandler(opt_logger) { + let logger = opt_logger || logManager.root_; + logger.addHandler(consoleHandler); +} + + +/** + * Removes the console log handler from the given logger. + * + * @param {Logger=} opt_logger The logger to remove the handler from; defaults + * to the root logger. + * @see exports.addConsoleHandler + */ +function removeConsoleHandler(opt_logger) { + let logger = opt_logger || logManager.root_; + logger.removeHandler(consoleHandler); +} + + +/** + * Installs the console log handler on the root logger. + */ +function installConsoleHandler() { + addConsoleHandler(logManager.root_); +} + + +/** + * Common log types. + * @enum {string} + */ +const Type = { + /** Logs originating from the browser. */ + BROWSER: 'browser', + /** Logs from a WebDriver client. */ + CLIENT: 'client', + /** Logs from a WebDriver implementation. */ + DRIVER: 'driver', + /** Logs related to performance. */ + PERFORMANCE: 'performance', + /** Logs from the remote server. */ + SERVER: 'server' +}; + + +/** + * Describes the log preferences for a WebDriver session. + * + * @final + */ +class Preferences { + constructor() { + /** @private {!Map} */ + this.prefs_ = new Map; + } + + /** + * Sets the desired logging level for a particular log type. + * @param {(string|Type)} type The log type. + * @param {(!Level|string|number)} level The desired log level. + * @throws {TypeError} if `type` is not a `string`. + */ + setLevel(type, level) { + if (typeof type !== 'string') { + throw TypeError('specified log type is not a string: ' + typeof type); + } + this.prefs_.set(type, level instanceof Level ? level : getLevel(level)); + } + + /** + * Converts this instance to its JSON representation. + * @return {!Object} The JSON representation of this set of + * preferences. + */ + toJSON() { + let json = {}; + for (let key of this.prefs_.keys()) { + json[key] = this.prefs_.get(key).name; + } + return json; + } +} + + +// PUBLIC API + + +exports.Entry = Entry; +exports.Level = Level; +exports.LogManager = LogManager; +exports.Logger = Logger; +exports.Preferences = Preferences; +exports.Type = Type; +exports.addConsoleHandler = addConsoleHandler; +exports.getLevel = getLevel; +exports.getLogger = getLogger; +exports.installConsoleHandler = installConsoleHandler; +exports.removeConsoleHandler = removeConsoleHandler; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/promise.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/promise.js new file mode 100644 index 0000000..905ec50 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/promise.js @@ -0,0 +1,3093 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview + * The promise module is centered around the {@linkplain ControlFlow}, a class + * that coordinates the execution of asynchronous tasks. The ControlFlow allows + * users to focus on the imperative commands for their script without worrying + * about chaining together every single asynchronous action, which can be + * tedious and verbose. APIs may be layered on top of the control flow to read + * as if they were synchronous. For instance, the core + * {@linkplain ./webdriver.WebDriver WebDriver} API is built on top of the + * control flow, allowing users to write + * + * driver.get('http://www.google.com/ncr'); + * driver.findElement({name: 'q'}).sendKeys('webdriver'); + * driver.findElement({name: 'btnGn'}).click(); + * + * instead of + * + * driver.get('http://www.google.com/ncr') + * .then(function() { + * return driver.findElement({name: 'q'}); + * }) + * .then(function(q) { + * return q.sendKeys('webdriver'); + * }) + * .then(function() { + * return driver.findElement({name: 'btnG'}); + * }) + * .then(function(btnG) { + * return btnG.click(); + * }); + * + * ## Tasks and Task Queues + * + * The control flow is based on the concept of tasks and task queues. Tasks are + * functions that define the basic unit of work for the control flow to execute. + * Each task is scheduled via {@link ControlFlow#execute()}, which will return + * a {@link ManagedPromise ManagedPromise} that will be resolved with the task's + * result. + * + * A task queue contains all of the tasks scheduled within a single turn of the + * [JavaScript event loop][JSEL]. The control flow will create a new task queue + * the first time a task is scheduled within an event loop. + * + * var flow = promise.controlFlow(); + * flow.execute(foo); // Creates a new task queue and inserts foo. + * flow.execute(bar); // Inserts bar into the same queue as foo. + * setTimeout(function() { + * flow.execute(baz); // Creates a new task queue and inserts baz. + * }, 0); + * + * Whenever the control flow creates a new task queue, it will automatically + * begin executing tasks in the next available turn of the event loop. This + * execution is scheduled using a "micro-task" timer, such as a (native) + * `ManagedPromise.then()` callback. + * + * setTimeout(() => console.log('a')); + * ManagedPromise.resolve().then(() => console.log('b')); // A native promise. + * flow.execute(() => console.log('c')); + * ManagedPromise.resolve().then(() => console.log('d')); + * setTimeout(() => console.log('fin')); + * // b + * // c + * // d + * // a + * // fin + * + * In the example above, b/c/d is logged before a/fin because native promises + * and this module use "micro-task" timers, which have a higher priority than + * "macro-tasks" like `setTimeout`. + * + * ## Task Execution + * + * Upon creating a task queue, and whenever an exisiting queue completes a task, + * the control flow will schedule a micro-task timer to process any scheduled + * tasks. This ensures no task is ever started within the same turn of the + * JavaScript event loop in which it was scheduled, nor is a task ever started + * within the same turn that another finishes. + * + * When the execution timer fires, a single task will be dequeued and executed. + * There are several important events that may occur while executing a task + * function: + * + * 1. A new task queue is created by a call to {@link ControlFlow#execute()}. + * Any tasks scheduled within this task queue are considered subtasks of the + * current task. + * 2. The task function throws an error. Any scheduled tasks are immediately + * discarded and the task's promised result (previously returned by + * {@link ControlFlow#execute()}) is immediately rejected with the thrown + * error. + * 3. The task function returns sucessfully. + * + * If a task function created a new task queue, the control flow will wait for + * that queue to complete before processing the task result. If the queue + * completes without error, the flow will settle the task's promise with the + * value originaly returned by the task function. On the other hand, if the task + * queue termintes with an error, the task's promise will be rejected with that + * error. + * + * flow.execute(function() { + * flow.execute(() => console.log('a')); + * flow.execute(() => console.log('b')); + * }); + * flow.execute(() => console.log('c')); + * // a + * // b + * // c + * + * ## ManagedPromise Integration + * + * In addition to the {@link ControlFlow} class, the promise module also exports + * a [ManagedPromise/A+] {@linkplain ManagedPromise implementation} that is deeply + * integrated with the ControlFlow. First and foremost, each promise + * {@linkplain ManagedPromise#then() callback} is scheduled with the + * control flow as a task. As a result, each callback is invoked in its own turn + * of the JavaScript event loop with its own task queue. If any tasks are + * scheduled within a callback, the callback's promised result will not be + * settled until the task queue has completed. + * + * promise.fulfilled().then(function() { + * flow.execute(function() { + * console.log('b'); + * }); + * }).then(() => console.log('a')); + * // b + * // a + * + * ### Scheduling ManagedPromise Callbacks + * + * How callbacks are scheduled in the control flow depends on when they are + * attached to the promise. Callbacks attached to a _previously_ resolved + * promise are immediately enqueued as subtasks of the currently running task. + * + * var p = promise.fulfilled(); + * flow.execute(function() { + * flow.execute(() => console.log('A')); + * p.then( () => console.log('B')); + * flow.execute(() => console.log('C')); + * p.then( () => console.log('D')); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // fin + * + * When a promise is resolved while a task function is on the call stack, any + * callbacks also registered in that stack frame are scheduled as if the promise + * were already resolved: + * + * var d = promise.defer(); + * flow.execute(function() { + * flow.execute( () => console.log('A')); + * d.promise.then(() => console.log('B')); + * flow.execute( () => console.log('C')); + * d.promise.then(() => console.log('D')); + * + * d.fulfill(); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // fin + * + * Callbacks attached to an _unresolved_ promise within a task function are + * only weakly scheduled as subtasks and will be dropped if they reach the + * front of the queue before the promise is resolved. In the example below, the + * callbacks for `B` & `D` are dropped as sub-tasks since they are attached to + * an unresolved promise when they reach the front of the task queue. + * + * var d = promise.defer(); + * flow.execute(function() { + * flow.execute( () => console.log('A')); + * d.promise.then(() => console.log('B')); + * flow.execute( () => console.log('C')); + * d.promise.then(() => console.log('D')); + * + * setTimeout(d.fulfill, 20); + * }).then(function() { + * console.log('fin') + * }); + * // A + * // C + * // fin + * // B + * // D + * + * If a promise is resolved while a task function is on the call stack, any + * previously registered and unqueued callbacks (i.e. either attached while no + * task was on the call stack, or previously dropped as described above) act as + * _interrupts_ and are inserted at the front of the task queue. If multiple + * promises are fulfilled, their interrupts are enqueued in the order the + * promises are resolved. + * + * var d1 = promise.defer(); + * d1.promise.then(() => console.log('A')); + * + * var d2 = promise.defer(); + * d2.promise.then(() => console.log('B')); + * + * flow.execute(function() { + * d1.promise.then(() => console.log('C')); + * flow.execute(() => console.log('D')); + * }); + * flow.execute(function() { + * flow.execute(() => console.log('E')); + * flow.execute(() => console.log('F')); + * d1.fulfill(); + * d2.fulfill(); + * }).then(function() { + * console.log('fin'); + * }); + * // D + * // A + * // C + * // B + * // E + * // F + * // fin + * + * Within a task function (or callback), each step of a promise chain acts as + * an interrupt on the task queue: + * + * var d = promise.defer(); + * flow.execute(function() { + * d.promise. + * then(() => console.log('A')). + * then(() => console.log('B')). + * then(() => console.log('C')). + * then(() => console.log('D')); + * + * flow.execute(() => console.log('E')); + * d.fulfill(); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // E + * // fin + * + * If there are multiple promise chains derived from a single promise, they are + * processed in the order created: + * + * var d = promise.defer(); + * flow.execute(function() { + * var chain = d.promise.then(() => console.log('A')); + * + * chain.then(() => console.log('B')). + * then(() => console.log('C')); + * + * chain.then(() => console.log('D')). + * then(() => console.log('E')); + * + * flow.execute(() => console.log('F')); + * + * d.fulfill(); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // E + * // F + * // fin + * + * Even though a subtask's promised result will never resolve while the task + * function is on the stack, it will be treated as a promise resolved within the + * task. In all other scenarios, a task's promise behaves just like a normal + * promise. In the sample below, `C/D` is loggged before `B` because the + * resolution of `subtask1` interrupts the flow of the enclosing task. Within + * the final subtask, `E/F` is logged in order because `subtask1` is a resolved + * promise when that task runs. + * + * flow.execute(function() { + * var subtask1 = flow.execute(() => console.log('A')); + * var subtask2 = flow.execute(() => console.log('B')); + * + * subtask1.then(() => console.log('C')); + * subtask1.then(() => console.log('D')); + * + * flow.execute(function() { + * flow.execute(() => console.log('E')); + * subtask1.then(() => console.log('F')); + * }); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // C + * // D + * // B + * // E + * // F + * // fin + * + * Finally, consider the following: + * + * var d = promise.defer(); + * d.promise.then(() => console.log('A')); + * d.promise.then(() => console.log('B')); + * + * flow.execute(function() { + * flow.execute( () => console.log('C')); + * d.promise.then(() => console.log('D')); + * + * flow.execute( () => console.log('E')); + * d.promise.then(() => console.log('F')); + * + * d.fulfill(); + * + * flow.execute( () => console.log('G')); + * d.promise.then(() => console.log('H')); + * }).then(function() { + * console.log('fin'); + * }); + * // A + * // B + * // C + * // D + * // E + * // F + * // G + * // H + * // fin + * + * In this example, callbacks are registered on `d.promise` both before and + * during the invocation of the task function. When `d.fulfill()` is called, + * the callbacks registered before the task (`A` & `B`) are registered as + * interrupts. The remaining callbacks were all attached within the task and + * are scheduled in the flow as standard tasks. + * + * ## Generator Support + * + * [Generators][GF] may be scheduled as tasks within a control flow or attached + * as callbacks to a promise. Each time the generator yields a promise, the + * control flow will wait for that promise to settle before executing the next + * iteration of the generator. The yielded promise's fulfilled value will be + * passed back into the generator: + * + * flow.execute(function* () { + * var d = promise.defer(); + * + * setTimeout(() => console.log('...waiting...'), 25); + * setTimeout(() => d.fulfill(123), 50); + * + * console.log('start: ' + Date.now()); + * + * var value = yield d.promise; + * console.log('mid: %d; value = %d', Date.now(), value); + * + * yield promise.delayed(10); + * console.log('end: ' + Date.now()); + * }).then(function() { + * console.log('fin'); + * }); + * // start: 0 + * // ...waiting... + * // mid: 50; value = 123 + * // end: 60 + * // fin + * + * Yielding the result of a promise chain will wait for the entire chain to + * complete: + * + * promise.fulfilled().then(function* () { + * console.log('start: ' + Date.now()); + * + * var value = yield flow. + * execute(() => console.log('A')). + * then( () => console.log('B')). + * then( () => 123); + * + * console.log('mid: %s; value = %d', Date.now(), value); + * + * yield flow.execute(() => console.log('C')); + * }).then(function() { + * console.log('fin'); + * }); + * // start: 0 + * // A + * // B + * // mid: 2; value = 123 + * // C + * // fin + * + * Yielding a _rejected_ promise will cause the rejected value to be thrown + * within the generator function: + * + * flow.execute(function* () { + * console.log('start: ' + Date.now()); + * try { + * yield promise.delayed(10).then(function() { + * throw Error('boom'); + * }); + * } catch (ex) { + * console.log('caught time: ' + Date.now()); + * console.log(ex.message); + * } + * }); + * // start: 0 + * // caught time: 10 + * // boom + * + * # Error Handling + * + * ES6 promises do not require users to handle a promise rejections. This can + * result in subtle bugs as the rejections are silently "swallowed" by the + * ManagedPromise class. + * + * ManagedPromise.reject(Error('boom')); + * // ... *crickets* ... + * + * Selenium's promise module, on the other hand, requires that every rejection + * be explicitly handled. When a {@linkplain ManagedPromise ManagedPromise} is + * rejected and no callbacks are defined on that promise, it is considered an + * _unhandled rejection_ and reproted to the active task queue. If the rejection + * remains unhandled after a single turn of the [event loop][JSEL] (scheduled + * with a micro-task), it will propagate up the stack. + * + * ## Error Propagation + * + * If an unhandled rejection occurs within a task function, that task's promised + * result is rejected and all remaining subtasks are discarded: + * + * flow.execute(function() { + * // No callbacks registered on promise -> unhandled rejection + * promise.rejected(Error('boom')); + * flow.execute(function() { console.log('this will never run'); }); + * }).catch(function(e) { + * console.log(e.message); + * }); + * // boom + * + * The promised results for discarded tasks are silently rejected with a + * cancellation error and existing callback chains will never fire. + * + * flow.execute(function() { + * promise.rejected(Error('boom')); + * flow.execute(function() { console.log('a'); }). + * then(function() { console.log('b'); }); + * }).catch(function(e) { + * console.log(e.message); + * }); + * // boom + * + * An unhandled rejection takes precedence over a task function's returned + * result, even if that value is another promise: + * + * flow.execute(function() { + * promise.rejected(Error('boom')); + * return flow.execute(someOtherTask); + * }).catch(function(e) { + * console.log(e.message); + * }); + * // boom + * + * If there are multiple unhandled rejections within a task, they are packaged + * in a {@link MultipleUnhandledRejectionError}, which has an `errors` property + * that is a `Set` of the recorded unhandled rejections: + * + * flow.execute(function() { + * promise.rejected(Error('boom1')); + * promise.rejected(Error('boom2')); + * }).catch(function(ex) { + * console.log(ex instanceof MultipleUnhandledRejectionError); + * for (var e of ex.errors) { + * console.log(e.message); + * } + * }); + * // boom1 + * // boom2 + * + * When a subtask is discarded due to an unreported rejection in its parent + * frame, the existing callbacks on that task will never settle and the + * callbacks will not be invoked. If a new callback is attached ot the subtask + * _after_ it has been discarded, it is handled the same as adding a callback + * to a cancelled promise: the error-callback path is invoked. This behavior is + * intended to handle cases where the user saves a reference to a task promise, + * as illustrated below. + * + * var subTask; + * flow.execute(function() { + * promise.rejected(Error('boom')); + * subTask = flow.execute(function() {}); + * }).catch(function(e) { + * console.log(e.message); + * }).then(function() { + * return subTask.then( + * () => console.log('subtask success!'), + * (e) => console.log('subtask failed:\n' + e)); + * }); + * // boom + * // subtask failed: + * // DiscardedTaskError: Task was discarded due to a previous failure: boom + * + * When a subtask fails, its promised result is treated the same as any other + * promise: it must be handled within one turn of the rejection or the unhandled + * rejection is propagated to the parent task. This means users can catch errors + * from complex flows from the top level task: + * + * flow.execute(function() { + * flow.execute(function() { + * flow.execute(function() { + * throw Error('fail!'); + * }); + * }); + * }).catch(function(e) { + * console.log(e.message); + * }); + * // fail! + * + * ## Unhandled Rejection Events + * + * When an unhandled rejection propagates to the root of the control flow, the + * flow will emit an __uncaughtException__ event. If no listeners are registered + * on the flow, the error will be rethrown to the global error handler: an + * __uncaughtException__ event from the + * [`process`](https://nodejs.org/api/process.html) object in node, or + * `window.onerror` when running in a browser. + * + * Bottom line: you __*must*__ handle rejected promises. + * + * # ManagedPromise/A+ Compatibility + * + * This `promise` module is compliant with the [ManagedPromise/A+][] specification + * except for sections `2.2.6.1` and `2.2.6.2`: + * + * > + * > - `then` may be called multiple times on the same promise. + * > - If/when `promise` is fulfilled, all respective `onFulfilled` callbacks + * > must execute in the order of their originating calls to `then`. + * > - If/when `promise` is rejected, all respective `onRejected` callbacks + * > must execute in the order of their originating calls to `then`. + * > + * + * Specifically, the conformance tests contains the following scenario (for + * brevity, only the fulfillment version is shown): + * + * var p1 = ManagedPromise.resolve(); + * p1.then(function() { + * console.log('A'); + * p1.then(() => console.log('B')); + * }); + * p1.then(() => console.log('C')); + * // A + * // C + * // B + * + * Since the [ControlFlow](#scheduling_callbacks) executes promise callbacks as + * tasks, with this module, the result would be + * + * var p2 = promise.fulfilled(); + * p2.then(function() { + * console.log('A'); + * p2.then(() => console.log('B'); + * }); + * p2.then(() => console.log('C')); + * // A + * // B + * // C + * + * [JSEL]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop + * [GF]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function* + * [ManagedPromise/A+]: https://promisesaplus.com/ + */ + +'use strict'; + +const events = require('./events'); +const logging = require('./logging'); + + +/** + * Alias to help with readability and differentiate types. + * @const + */ +const NativePromise = Promise; + + +/** + * Whether to append traces of `then` to rejection errors. + * @type {boolean} + */ +exports.LONG_STACK_TRACES = false; // TODO: this should not be CONSTANT_CASE + + +/** @const */ +const LOG = logging.getLogger('promise'); + + +const UNIQUE_IDS = new WeakMap; +let nextId = 1; + + +function getUid(obj) { + let id = UNIQUE_IDS.get(obj); + if (!id) { + id = nextId; + nextId += 1; + UNIQUE_IDS.set(obj, id); + } + return id; +} + + +/** + * Runs the given function after a micro-task yield. + * @param {function()} fn The function to run. + */ +function asyncRun(fn) { + NativePromise.resolve().then(function() { + try { + fn(); + } catch (ignored) { + // Do nothing. + } + }); +} + + +/** + * Throws an error asynchronously so it is reported to the global error handler. + * + * @param {!Error} error The error to throw. + */ +function asyncThrow(error) { + setTimeout(function() { + throw error; + }, 0); +} + + +/** + * @param {number} level What level of verbosity to log with. + * @param {(string|function(this: T): string)} loggable The message to log. + * @param {T=} opt_self The object in whose context to run the loggable + * function. + * @template T + */ +function vlog(level, loggable, opt_self) { + var logLevel = logging.Level.FINE; + if (level > 1) { + logLevel = logging.Level.FINEST; + } else if (level > 0) { + logLevel = logging.Level.FINER; + } + + if (typeof loggable === 'function') { + loggable = loggable.bind(opt_self); + } + + LOG.log(logLevel, loggable); +} + + +/** + * Generates an error to capture the current stack trace. + * @param {string} name Error name for this stack trace. + * @param {string} msg Message to record. + * @param {Function=} opt_topFn The function that should appear at the top of + * the stack; only applicable in V8. + * @return {!Error} The generated error. + */ +function captureStackTrace(name, msg, opt_topFn) { + var e = Error(msg); + e.name = name; + if (Error.captureStackTrace) { + Error.captureStackTrace(e, opt_topFn); + } else { + var stack = Error().stack; + if (stack) { + e.stack = e.toString(); + e.stack += '\n' + stack; + } + } + return e; +} + + +/** + * Error used when the computation of a promise is cancelled. + */ +class CancellationError extends Error { + /** + * @param {string=} opt_msg The cancellation message. + */ + constructor(opt_msg) { + super(opt_msg); + + /** @override */ + this.name = this.constructor.name; + + /** @private {boolean} */ + this.silent_ = false; + } + + /** + * Wraps the given error in a CancellationError. + * + * @param {*} error The error to wrap. + * @param {string=} opt_msg The prefix message to use. + * @return {!CancellationError} A cancellation error. + */ + static wrap(error, opt_msg) { + var message; + if (error instanceof CancellationError) { + return new CancellationError( + opt_msg ? (opt_msg + ': ' + error.message) : error.message); + } else if (opt_msg) { + message = opt_msg; + if (error) { + message += ': ' + error; + } + return new CancellationError(message); + } + if (error) { + message = error + ''; + } + return new CancellationError(message); + } +} + + +/** + * Error used to cancel tasks when a control flow is reset. + * @final + */ +class FlowResetError extends CancellationError { + constructor() { + super('ControlFlow was reset'); + this.silent_ = true; + } +} + + +/** + * Error used to cancel tasks that have been discarded due to an uncaught error + * reported earlier in the control flow. + * @final + */ +class DiscardedTaskError extends CancellationError { + /** @param {*} error The original error. */ + constructor(error) { + if (error instanceof DiscardedTaskError) { + return /** @type {!DiscardedTaskError} */(error); + } + + var msg = ''; + if (error) { + msg = ': ' + ( + typeof error.message === 'string' ? error.message : error); + } + + super('Task was discarded due to a previous failure' + msg); + this.silent_ = true; + } +} + + +/** + * Error used when there are multiple unhandled promise rejections detected + * within a task or callback. + * + * @final + */ +class MultipleUnhandledRejectionError extends Error { + /** + * @param {!(Set<*>)} errors The errors to report. + */ + constructor(errors) { + super('Multiple unhandled promise rejections reported'); + + /** @override */ + this.name = this.constructor.name; + + /** @type {!Set<*>} */ + this.errors = errors; + } +} + + +/** + * Property used to flag constructor's as implementing the Thenable interface + * for runtime type checking. + * @const + */ +const IMPLEMENTED_BY_SYMBOL = Symbol('promise.Thenable'); + + +/** + * Thenable is a promise-like object with a {@code then} method which may be + * used to schedule callbacks on a promised value. + * + * @interface + * @extends {IThenable} + * @template T + */ +class Thenable { + /** + * Adds a property to a class prototype to allow runtime checks of whether + * instances of that class implement the Thenable interface. This function + * will also ensure the prototype's {@code then} function is exported from + * compiled code. + * @param {function(new: Thenable, ...?)} ctor The + * constructor whose prototype to modify. + */ + static addImplementation(ctor) { + ctor.prototype['then'] = ctor.prototype.then; + try { + ctor.prototype[IMPLEMENTED_BY_SYMBOL] = true; + } catch (ignored) { + // Property access denied? + } + } + + /** + * Checks if an object has been tagged for implementing the Thenable + * interface as defined by {@link Thenable.addImplementation}. + * @param {*} object The object to test. + * @return {boolean} Whether the object is an implementation of the Thenable + * interface. + */ + static isImplementation(object) { + if (!object) { + return false; + } + try { + return !!object[IMPLEMENTED_BY_SYMBOL]; + } catch (e) { + return false; // Property access seems to be forbidden. + } + } + + /** + * Cancels the computation of this promise's value, rejecting the promise in + * the process. This method is a no-op if the promise has already been + * resolved. + * + * @param {(string|Error)=} opt_reason The reason this promise is being + * cancelled. This value will be wrapped in a {@link CancellationError}. + */ + cancel(opt_reason) {} + + /** @return {boolean} Whether this promise's value is still being computed. */ + isPending() {} + + /** + * Registers listeners for when this instance is resolved. + * + * @param {?(function(T): (R|IThenable))=} opt_callback The + * function to call if this promise is successfully resolved. The function + * should expect a single argument: the promise's resolved value. + * @param {?(function(*): (R|IThenable))=} opt_errback + * The function to call if this promise is rejected. The function should + * expect a single argument: the rejection reason. + * @return {!ManagedPromise} A new promise which will be + * resolved with the result of the invoked callback. + * @template R + */ + then(opt_callback, opt_errback) {} + + /** + * Registers a listener for when this promise is rejected. This is synonymous + * with the {@code catch} clause in a synchronous API: + * + * // Synchronous API: + * try { + * doSynchronousWork(); + * } catch (ex) { + * console.error(ex); + * } + * + * // Asynchronous promise API: + * doAsynchronousWork().catch(function(ex) { + * console.error(ex); + * }); + * + * @param {function(*): (R|IThenable)} errback The + * function to call if this promise is rejected. The function should + * expect a single argument: the rejection reason. + * @return {!ManagedPromise} A new promise which will be + * resolved with the result of the invoked callback. + * @template R + */ + catch(errback) {} + + /** + * An alias for {@link #catch()} + * + * @param {function(*): (R|IThenable)} errback The + * function to call if this promise is rejected. The function should + * expect a single argument: the rejection reason. + * @return {!ManagedPromise} A new promise which will be + * resolved wdith the result of the invoked callback. + * @template R + */ + thenCatch(errback) {} + + /** + * Registers a listener to invoke when this promise is resolved, regardless + * of whether the promise's value was successfully computed. This function + * is synonymous with the {@code finally} clause in a synchronous API: + * + * // Synchronous API: + * try { + * doSynchronousWork(); + * } finally { + * cleanUp(); + * } + * + * // Asynchronous promise API: + * doAsynchronousWork().thenFinally(cleanUp); + * + * __Note:__ similar to the {@code finally} clause, if the registered + * callback returns a rejected promise or throws an error, it will silently + * replace the rejection error (if any) from this promise: + * + * try { + * throw Error('one'); + * } finally { + * throw Error('two'); // Hides Error: one + * } + * + * promise.rejected(Error('one')) + * .thenFinally(function() { + * throw Error('two'); // Hides Error: one + * }); + * + * @param {function(): (R|IThenable)} callback The function + * to call when this promise is resolved. + * @return {!ManagedPromise} A promise that will be fulfilled + * with the callback result. + * @template R + */ + thenFinally(callback) {} +} + + +/** + * @enum {string} + */ +const PromiseState = { + PENDING: 'pending', + BLOCKED: 'blocked', + REJECTED: 'rejected', + FULFILLED: 'fulfilled' +}; + + +/** + * Internal symbol used to store a cancellation handler for + * {@link ManagedPromise} objects. This is an internal implementation detail + * used by the {@link TaskQueue} class to monitor for when a promise is + * cancelled without generating an extra promise via then(). + */ +const CANCEL_HANDLER_SYMBOL = Symbol('on cancel'); + + +/** + * Represents the eventual value of a completed operation. Each promise may be + * in one of three states: pending, fulfilled, or rejected. Each promise starts + * in the pending state and may make a single transition to either a + * fulfilled or rejected state, at which point the promise is considered + * resolved. + * + * @implements {Thenable} + * @unrestricted + * @template T + * @see http://promises-aplus.github.io/promises-spec/ + */ +const ManagedPromise = class Promise { + /** + * @param {function( + * function((T|IThenable|Thenable)=), + * function(*=))} resolver + * Function that is invoked immediately to begin computation of this + * promise's value. The function should accept a pair of callback + * functions, one for fulfilling the promise and another for rejecting it. + * @param {ControlFlow=} opt_flow The control flow + * this instance was created under. Defaults to the currently active flow. + */ + constructor(resolver, opt_flow) { + getUid(this); + + /** @private {!ControlFlow} */ + this.flow_ = opt_flow || controlFlow(); + + /** @private {Error} */ + this.stack_ = null; + if (exports.LONG_STACK_TRACES) { + this.stack_ = captureStackTrace('Promise', 'new', this.constructor); + } + + /** @private {ManagedPromise} */ + this.parent_ = null; + + /** @private {Array} */ + this.callbacks_ = null; + + /** @private {PromiseState} */ + this.state_ = PromiseState.PENDING; + + /** @private {boolean} */ + this.handled_ = false; + + /** @private {*} */ + this.value_ = undefined; + + /** @private {TaskQueue} */ + this.queue_ = null; + + /** @private {(function(CancellationError)|null)} */ + this[CANCEL_HANDLER_SYMBOL] = null; + + try { + var self = this; + resolver(function(value) { + self.resolve_(PromiseState.FULFILLED, value); + }, function(reason) { + self.resolve_(PromiseState.REJECTED, reason); + }); + } catch (ex) { + this.resolve_(PromiseState.REJECTED, ex); + } + } + + /** @override */ + toString() { + return 'ManagedPromise::' + getUid(this) + + ' {[[PromiseStatus]]: "' + this.state_ + '"}'; + } + + /** + * Resolves this promise. If the new value is itself a promise, this function + * will wait for it to be resolved before notifying the registered listeners. + * @param {PromiseState} newState The promise's new state. + * @param {*} newValue The promise's new value. + * @throws {TypeError} If {@code newValue === this}. + * @private + */ + resolve_(newState, newValue) { + if (PromiseState.PENDING !== this.state_) { + return; + } + + if (newValue === this) { + // See promise a+, 2.3.1 + // http://promises-aplus.github.io/promises-spec/#point-48 + newValue = new TypeError('A promise may not resolve to itself'); + newState = PromiseState.REJECTED; + } + + this.parent_ = null; + this.state_ = PromiseState.BLOCKED; + + if (newState !== PromiseState.REJECTED) { + if (Thenable.isImplementation(newValue)) { + // 2.3.2 + newValue = /** @type {!Thenable} */(newValue); + newValue.then( + this.unblockAndResolve_.bind(this, PromiseState.FULFILLED), + this.unblockAndResolve_.bind(this, PromiseState.REJECTED)); + return; + + } else if (newValue + && (typeof newValue === 'object' || typeof newValue === 'function')) { + // 2.3.3 + + try { + // 2.3.3.1 + var then = newValue['then']; + } catch (e) { + // 2.3.3.2 + this.state_ = PromiseState.REJECTED; + this.value_ = e; + this.scheduleNotifications_(); + return; + } + + if (typeof then === 'function') { + // 2.3.3.3 + this.invokeThen_(/** @type {!Object} */(newValue), then); + return; + } + } + } + + if (newState === PromiseState.REJECTED && + isError(newValue) && newValue.stack && this.stack_) { + newValue.stack += '\nFrom: ' + (this.stack_.stack || this.stack_); + } + + // 2.3.3.4 and 2.3.4 + this.state_ = newState; + this.value_ = newValue; + this.scheduleNotifications_(); + } + + /** + * Invokes a thenable's "then" method according to 2.3.3.3 of the promise + * A+ spec. + * @param {!Object} x The thenable object. + * @param {!Function} then The "then" function to invoke. + * @private + */ + invokeThen_(x, then) { + var called = false; + var self = this; + + var resolvePromise = function(value) { + if (!called) { // 2.3.3.3.3 + called = true; + // 2.3.3.3.1 + self.unblockAndResolve_(PromiseState.FULFILLED, value); + } + }; + + var rejectPromise = function(reason) { + if (!called) { // 2.3.3.3.3 + called = true; + // 2.3.3.3.2 + self.unblockAndResolve_(PromiseState.REJECTED, reason); + } + }; + + try { + // 2.3.3.3 + then.call(x, resolvePromise, rejectPromise); + } catch (e) { + // 2.3.3.3.4.2 + rejectPromise(e); + } + } + + /** + * @param {PromiseState} newState The promise's new state. + * @param {*} newValue The promise's new value. + * @private + */ + unblockAndResolve_(newState, newValue) { + if (this.state_ === PromiseState.BLOCKED) { + this.state_ = PromiseState.PENDING; + this.resolve_(newState, newValue); + } + } + + /** + * @private + */ + scheduleNotifications_() { + vlog(2, () => this + ' scheduling notifications', this); + + this[CANCEL_HANDLER_SYMBOL] = null; + if (this.value_ instanceof CancellationError + && this.value_.silent_) { + this.callbacks_ = null; + } + + if (!this.queue_) { + this.queue_ = this.flow_.getActiveQueue_(); + } + + if (!this.handled_ && + this.state_ === PromiseState.REJECTED && + !(this.value_ instanceof CancellationError)) { + this.queue_.addUnhandledRejection(this); + } + this.queue_.scheduleCallbacks(this); + } + + /** @override */ + cancel(opt_reason) { + if (!canCancel(this)) { + return; + } + + if (this.parent_ && canCancel(this.parent_)) { + this.parent_.cancel(opt_reason); + } else { + var reason = CancellationError.wrap(opt_reason); + if (this[CANCEL_HANDLER_SYMBOL]) { + this[CANCEL_HANDLER_SYMBOL](reason); + this[CANCEL_HANDLER_SYMBOL] = null; + } + + if (this.state_ === PromiseState.BLOCKED) { + this.unblockAndResolve_(PromiseState.REJECTED, reason); + } else { + this.resolve_(PromiseState.REJECTED, reason); + } + } + + function canCancel(promise) { + return promise.state_ === PromiseState.PENDING + || promise.state_ === PromiseState.BLOCKED; + } + } + + /** @override */ + isPending() { + return this.state_ === PromiseState.PENDING; + } + + /** @override */ + then(opt_callback, opt_errback) { + return this.addCallback_( + opt_callback, opt_errback, 'then', ManagedPromise.prototype.then); + } + + /** @override */ + catch(errback) { + return this.addCallback_( + null, errback, 'catch', ManagedPromise.prototype.catch); + } + + /** @override */ + thenCatch(errback) { + return this.catch(errback); + } + + /** @override */ + thenFinally(callback) { + var error; + var mustThrow = false; + return this.then(function() { + return callback(); + }, function(err) { + error = err; + mustThrow = true; + return callback(); + }).then(function() { + if (mustThrow) { + throw error; + } + }); + } + + /** + * Registers a new callback with this promise + * @param {(function(T): (R|IThenable)|null|undefined)} callback The + * fulfillment callback. + * @param {(function(*): (R|IThenable)|null|undefined)} errback The + * rejection callback. + * @param {string} name The callback name. + * @param {!Function} fn The function to use as the top of the stack when + * recording the callback's creation point. + * @return {!ManagedPromise} A new promise which will be resolved with the + * esult of the invoked callback. + * @template R + * @private + */ + addCallback_(callback, errback, name, fn) { + if (typeof callback !== 'function' && typeof errback !== 'function') { + return this; + } + + this.handled_ = true; + if (this.queue_) { + this.queue_.clearUnhandledRejection(this); + } + + var cb = new Task( + this.flow_, + this.invokeCallback_.bind(this, callback, errback), + name, + exports.LONG_STACK_TRACES ? {name: 'Promise', top: fn} : undefined); + cb.promise.parent_ = this; + + if (this.state_ !== PromiseState.PENDING && + this.state_ !== PromiseState.BLOCKED) { + this.flow_.getActiveQueue_().enqueue(cb); + } else { + if (!this.callbacks_) { + this.callbacks_ = []; + } + this.callbacks_.push(cb); + cb.blocked = true; + this.flow_.getActiveQueue_().enqueue(cb); + } + + return cb.promise; + } + + /** + * Invokes a callback function attached to this promise. + * @param {(function(T): (R|IThenable)|null|undefined)} callback The + * fulfillment callback. + * @param {(function(*): (R|IThenable)|null|undefined)} errback The + * rejection callback. + * @template R + * @private + */ + invokeCallback_(callback, errback) { + var callbackFn = callback; + if (this.state_ === PromiseState.REJECTED) { + callbackFn = errback; + } + + if (typeof callbackFn === 'function') { + if (isGenerator(callbackFn)) { + return consume(callbackFn, null, this.value_); + } + return callbackFn(this.value_); + } else if (this.state_ === PromiseState.REJECTED) { + throw this.value_; + } else { + return this.value_; + } + } +} +Thenable.addImplementation(ManagedPromise); + + +/** + * Represents a value that will be resolved at some point in the future. This + * class represents the protected "producer" half of a ManagedPromise - each Deferred + * has a {@code promise} property that may be returned to consumers for + * registering callbacks, reserving the ability to resolve the deferred to the + * producer. + * + * If this Deferred is rejected and there are no listeners registered before + * the next turn of the event loop, the rejection will be passed to the + * {@link ControlFlow} as an unhandled failure. + * + * @implements {Thenable} + * @template T + */ +class Deferred { + /** + * @param {ControlFlow=} opt_flow The control flow this instance was + * created under. This should only be provided during unit tests. + */ + constructor(opt_flow) { + var fulfill, reject; + + /** @type {!ManagedPromise} */ + this.promise = new ManagedPromise(function(f, r) { + fulfill = f; + reject = r; + }, opt_flow); + + var self = this; + var checkNotSelf = function(value) { + if (value === self) { + throw new TypeError('May not resolve a Deferred with itself'); + } + }; + + /** + * Resolves this deferred with the given value. It is safe to call this as a + * normal function (with no bound "this"). + * @param {(T|IThenable|Thenable)=} opt_value The fulfilled value. + */ + this.fulfill = function(opt_value) { + checkNotSelf(opt_value); + fulfill(opt_value); + }; + + /** + * Rejects this promise with the given reason. It is safe to call this as a + * normal function (with no bound "this"). + * @param {*=} opt_reason The rejection reason. + */ + this.reject = function(opt_reason) { + checkNotSelf(opt_reason); + reject(opt_reason); + }; + } + + /** @override */ + isPending() { + return this.promise.isPending(); + } + + /** @override */ + cancel(opt_reason) { + this.promise.cancel(opt_reason); + } + + /** + * @override + * @deprecated Use {@code then} from the promise property directly. + */ + then(opt_cb, opt_eb) { + return this.promise.then(opt_cb, opt_eb); + } + + /** + * @override + * @deprecated Use {@lcode catch} from the promise property directly. + */ + catch(opt_eb) { + return this.promise.catch(opt_eb); + } + + /** + * @override + * @deprecated Use {@code thenCatch} from the promise property directly. + */ + thenCatch(opt_eb) { + return this.promise.thenCatch(opt_eb); + } + + /** + * @override + * @deprecated Use {@code thenFinally} from the promise property directly. + */ + thenFinally(opt_cb) { + return this.promise.thenFinally(opt_cb); + } +} +Thenable.addImplementation(Deferred); + + +/** + * Tests if a value is an Error-like object. This is more than an straight + * instanceof check since the value may originate from another context. + * @param {*} value The value to test. + * @return {boolean} Whether the value is an error. + */ +function isError(value) { + return value instanceof Error || + (!!value && typeof value === 'object' + && typeof value.message === 'string'); +} + + +/** + * Determines whether a {@code value} should be treated as a promise. + * Any object whose "then" property is a function will be considered a promise. + * + * @param {?} value The value to test. + * @return {boolean} Whether the value is a promise. + */ +function isPromise(value) { + try { + // Use array notation so the Closure compiler does not obfuscate away our + // contract. + return value + && (typeof value === 'object' || typeof value === 'function') + && typeof value['then'] === 'function'; + } catch (ex) { + return false; + } +} + + +/** + * Creates a promise that will be resolved at a set time in the future. + * @param {number} ms The amount of time, in milliseconds, to wait before + * resolving the promise. + * @return {!ManagedPromise} The promise. + */ +function delayed(ms) { + var key; + return new ManagedPromise(function(fulfill) { + key = setTimeout(function() { + key = null; + fulfill(); + }, ms); + }).catch(function(e) { + clearTimeout(key); + key = null; + throw e; + }); +} + + +/** + * Creates a new deferred object. + * @return {!Deferred} The new deferred object. + * @template T + */ +function defer() { + return new Deferred(); +} + + +/** + * Creates a promise that has been resolved with the given value. + * @param {T=} opt_value The resolved value. + * @return {!ManagedPromise} The resolved promise. + * @template T + */ +function fulfilled(opt_value) { + if (opt_value instanceof ManagedPromise) { + return opt_value; + } + return new ManagedPromise(function(fulfill) { + fulfill(opt_value); + }); +} + + +/** + * Creates a promise that has been rejected with the given reason. + * @param {*=} opt_reason The rejection reason; may be any value, but is + * usually an Error or a string. + * @return {!ManagedPromise} The rejected promise. + * @template T + */ +function rejected(opt_reason) { + if (opt_reason instanceof ManagedPromise) { + return opt_reason; + } + return new ManagedPromise(function(_, reject) { + reject(opt_reason); + }); +} + + +/** + * Wraps a function that expects a node-style callback as its final + * argument. This callback expects two arguments: an error value (which will be + * null if the call succeeded), and the success value as the second argument. + * The callback will the resolve or reject the returned promise, based on its + * arguments. + * @param {!Function} fn The function to wrap. + * @param {...?} var_args The arguments to apply to the function, excluding the + * final callback. + * @return {!ManagedPromise} A promise that will be resolved with the + * result of the provided function's callback. + */ +function checkedNodeCall(fn, var_args) { + let args = Array.prototype.slice.call(arguments, 1); + return new ManagedPromise(function(fulfill, reject) { + try { + args.push(function(error, value) { + error ? reject(error) : fulfill(value); + }); + fn.apply(undefined, args); + } catch (ex) { + reject(ex); + } + }); +} + + +/** + * Registers an observer on a promised {@code value}, returning a new promise + * that will be resolved when the value is. If {@code value} is not a promise, + * then the return promise will be immediately resolved. + * @param {*} value The value to observe. + * @param {Function=} opt_callback The function to call when the value is + * resolved successfully. + * @param {Function=} opt_errback The function to call when the value is + * rejected. + * @return {!ManagedPromise} A new promise. + */ +function when(value, opt_callback, opt_errback) { + if (Thenable.isImplementation(value)) { + return value.then(opt_callback, opt_errback); + } + + return new ManagedPromise(function(fulfill) { + fulfill(value); + }).then(opt_callback, opt_errback); +} + + +/** + * Invokes the appropriate callback function as soon as a promised `value` is + * resolved. This function is similar to `when()`, except it does not return + * a new promise. + * @param {*} value The value to observe. + * @param {Function} callback The function to call when the value is + * resolved successfully. + * @param {Function=} opt_errback The function to call when the value is + * rejected. + */ +function asap(value, callback, opt_errback) { + if (isPromise(value)) { + value.then(callback, opt_errback); + + } else if (callback) { + callback(value); + } +} + + +/** + * Given an array of promises, will return a promise that will be fulfilled + * with the fulfillment values of the input array's values. If any of the + * input array's promises are rejected, the returned promise will be rejected + * with the same reason. + * + * @param {!Array<(T|!ManagedPromise)>} arr An array of + * promises to wait on. + * @return {!ManagedPromise>} A promise that is + * fulfilled with an array containing the fulfilled values of the + * input array, or rejected with the same reason as the first + * rejected value. + * @template T + */ +function all(arr) { + return new ManagedPromise(function(fulfill, reject) { + var n = arr.length; + var values = []; + + if (!n) { + fulfill(values); + return; + } + + var toFulfill = n; + var onFulfilled = function(index, value) { + values[index] = value; + toFulfill--; + if (toFulfill == 0) { + fulfill(values); + } + }; + + function processPromise(index) { + asap(arr[index], function(value) { + onFulfilled(index, value); + }, reject); + } + + for (var i = 0; i < n; ++i) { + processPromise(i); + } + }); +} + + +/** + * Calls a function for each element in an array and inserts the result into a + * new array, which is used as the fulfillment value of the promise returned + * by this function. + * + * If the return value of the mapping function is a promise, this function + * will wait for it to be fulfilled before inserting it into the new array. + * + * If the mapping function throws or returns a rejected promise, the + * promise returned by this function will be rejected with the same reason. + * Only the first failure will be reported; all subsequent errors will be + * silently ignored. + * + * @param {!(Array|ManagedPromise>)} arr The + * array to iterator over, or a promise that will resolve to said array. + * @param {function(this: SELF, TYPE, number, !Array): ?} fn The + * function to call for each element in the array. This function should + * expect three arguments (the element, the index, and the array itself. + * @param {SELF=} opt_self The object to be used as the value of 'this' within + * {@code fn}. + * @template TYPE, SELF + */ +function map(arr, fn, opt_self) { + return fulfilled(arr).then(function(v) { + if (!Array.isArray(v)) { + throw TypeError('not an array'); + } + var arr = /** @type {!Array} */(v); + return new ManagedPromise(function(fulfill, reject) { + var n = arr.length; + var values = new Array(n); + (function processNext(i) { + for (; i < n; i++) { + if (i in arr) { + break; + } + } + if (i >= n) { + fulfill(values); + return; + } + try { + asap( + fn.call(opt_self, arr[i], i, /** @type {!Array} */(arr)), + function(value) { + values[i] = value; + processNext(i + 1); + }, + reject); + } catch (ex) { + reject(ex); + } + })(0); + }); + }); +} + + +/** + * Calls a function for each element in an array, and if the function returns + * true adds the element to a new array. + * + * If the return value of the filter function is a promise, this function + * will wait for it to be fulfilled before determining whether to insert the + * element into the new array. + * + * If the filter function throws or returns a rejected promise, the promise + * returned by this function will be rejected with the same reason. Only the + * first failure will be reported; all subsequent errors will be silently + * ignored. + * + * @param {!(Array|ManagedPromise>)} arr The + * array to iterator over, or a promise that will resolve to said array. + * @param {function(this: SELF, TYPE, number, !Array): ( + * boolean|ManagedPromise)} fn The function + * to call for each element in the array. + * @param {SELF=} opt_self The object to be used as the value of 'this' within + * {@code fn}. + * @template TYPE, SELF + */ +function filter(arr, fn, opt_self) { + return fulfilled(arr).then(function(v) { + if (!Array.isArray(v)) { + throw TypeError('not an array'); + } + var arr = /** @type {!Array} */(v); + return new ManagedPromise(function(fulfill, reject) { + var n = arr.length; + var values = []; + var valuesLength = 0; + (function processNext(i) { + for (; i < n; i++) { + if (i in arr) { + break; + } + } + if (i >= n) { + fulfill(values); + return; + } + try { + var value = arr[i]; + var include = fn.call(opt_self, value, i, /** @type {!Array} */(arr)); + asap(include, function(include) { + if (include) { + values[valuesLength++] = value; + } + processNext(i + 1); + }, reject); + } catch (ex) { + reject(ex); + } + })(0); + }); + }); +} + + +/** + * Returns a promise that will be resolved with the input value in a + * fully-resolved state. If the value is an array, each element will be fully + * resolved. Likewise, if the value is an object, all keys will be fully + * resolved. In both cases, all nested arrays and objects will also be + * fully resolved. All fields are resolved in place; the returned promise will + * resolve on {@code value} and not a copy. + * + * Warning: This function makes no checks against objects that contain + * cyclical references: + * + * var value = {}; + * value['self'] = value; + * promise.fullyResolved(value); // Stack overflow. + * + * @param {*} value The value to fully resolve. + * @return {!ManagedPromise} A promise for a fully resolved version + * of the input value. + */ +function fullyResolved(value) { + if (isPromise(value)) { + return when(value, fullyResolveValue); + } + return fullyResolveValue(value); +} + + +/** + * @param {*} value The value to fully resolve. If a promise, assumed to + * already be resolved. + * @return {!ManagedPromise} A promise for a fully resolved version + * of the input value. + */ +function fullyResolveValue(value) { + if (Array.isArray(value)) { + return fullyResolveKeys(/** @type {!Array} */ (value)); + } + + if (isPromise(value)) { + if (isPromise(value)) { + // We get here when the original input value is a promise that + // resolves to itself. When the user provides us with such a promise, + // trust that it counts as a "fully resolved" value and return it. + // Of course, since it's already a promise, we can just return it + // to the user instead of wrapping it in another promise. + return /** @type {!ManagedPromise} */ (value); + } + } + + if (value && typeof value === 'object') { + return fullyResolveKeys(/** @type {!Object} */ (value)); + } + + if (typeof value === 'function') { + return fullyResolveKeys(/** @type {!Object} */ (value)); + } + + return fulfilled(value); +} + + +/** + * @param {!(Array|Object)} obj the object to resolve. + * @return {!ManagedPromise} A promise that will be resolved with the + * input object once all of its values have been fully resolved. + */ +function fullyResolveKeys(obj) { + var isArray = Array.isArray(obj); + var numKeys = isArray ? obj.length : (function() { + let n = 0; + for (let key in obj) { + n += 1; + } + return n; + })(); + if (!numKeys) { + return fulfilled(obj); + } + + function forEachProperty(obj, fn) { + for (let key in obj) { + fn.call(null, obj[key], key, obj); + } + } + + function forEachElement(arr, fn) { + arr.forEach(fn); + } + + var numResolved = 0; + return new ManagedPromise(function(fulfill, reject) { + var forEachKey = isArray ? forEachElement: forEachProperty; + + forEachKey(obj, function(partialValue, key) { + if (!Array.isArray(partialValue) + && (!partialValue || typeof partialValue !== 'object')) { + maybeResolveValue(); + return; + } + + fullyResolved(partialValue).then( + function(resolvedValue) { + obj[key] = resolvedValue; + maybeResolveValue(); + }, + reject); + }); + + function maybeResolveValue() { + if (++numResolved == numKeys) { + fulfill(obj); + } + } + }); +} + + +////////////////////////////////////////////////////////////////////////////// +// +// ControlFlow +// +////////////////////////////////////////////////////////////////////////////// + + + +/** + * Handles the execution of scheduled tasks, each of which may be an + * asynchronous operation. The control flow will ensure tasks are executed in + * the ordered scheduled, starting each task only once those before it have + * completed. + * + * Each task scheduled within this flow may return a {@link ManagedPromise} to + * indicate it is an asynchronous operation. The ControlFlow will wait for such + * promises to be resolved before marking the task as completed. + * + * Tasks and each callback registered on a {@link ManagedPromise} will be run + * in their own ControlFlow frame. Any tasks scheduled within a frame will take + * priority over previously scheduled tasks. Furthermore, if any of the tasks in + * the frame fail, the remainder of the tasks in that frame will be discarded + * and the failure will be propagated to the user through the callback/task's + * promised result. + * + * Each time a ControlFlow empties its task queue, it will fire an + * {@link ControlFlow.EventType.IDLE IDLE} event. Conversely, + * whenever the flow terminates due to an unhandled error, it will remove all + * remaining tasks in its queue and fire an + * {@link ControlFlow.EventType.UNCAUGHT_EXCEPTION UNCAUGHT_EXCEPTION} event. + * If there are no listeners registered with the flow, the error will be + * rethrown to the global error handler. + * + * Refer to the {@link ./promise} module documentation fora detailed + * explanation of how the ControlFlow coordinates task execution. + * + * @final + */ +class ControlFlow extends events.EventEmitter { + constructor() { + super(); + + /** @private {boolean} */ + this.propagateUnhandledRejections_ = true; + + /** @private {TaskQueue} */ + this.activeQueue_ = null; + + /** @private {Set} */ + this.taskQueues_ = null; + + /** + * Micro task that controls shutting down the control flow. Upon shut down, + * the flow will emit an + * {@link ControlFlow.EventType.IDLE} event. Idle events + * always follow a brief timeout in order to catch latent errors from the + * last completed task. If this task had a callback registered, but no + * errback, and the task fails, the unhandled failure would not be reported + * by the promise system until the next turn of the event loop: + * + * // Schedule 1 task that fails. + * var result = promise.controlFlow().schedule('example', + * function() { return promise.rejected('failed'); }); + * // Set a callback on the result. This delays reporting the unhandled + * // failure for 1 turn of the event loop. + * result.then(function() {}); + * + * @private {MicroTask} + */ + this.shutdownTask_ = null; + + /** + * ID for a long running interval used to keep a Node.js process running + * while a control flow's event loop is still working. This is a cheap hack + * required since JS events are only scheduled to run when there is + * _actually_ something to run. When a control flow is waiting on a task, + * there will be nothing in the JS event loop and the process would + * terminate without this. + * @private + */ + this.hold_ = null; + } + + /** + * Returns a string representation of this control flow, which is its current + * {@linkplain #getSchedule() schedule}, sans task stack traces. + * @return {string} The string representation of this contorl flow. + * @override + */ + toString() { + return this.getSchedule(); + } + + /** + * Sets whether any unhandled rejections should propagate up through the + * control flow stack and cause rejections within parent tasks. If error + * propagation is disabled, tasks will not be aborted when an unhandled + * promise rejection is detected, but the rejection _will_ trigger an + * {@link ControlFlow.EventType.UNCAUGHT_EXCEPTION} + * event. + * + * The default behavior is to propagate all unhandled rejections. _The use + * of this option is highly discouraged._ + * + * @param {boolean} propagate whether to propagate errors. + */ + setPropagateUnhandledRejections(propagate) { + this.propagateUnhandledRejections_ = propagate; + } + + /** + * @return {boolean} Whether this flow is currently idle. + */ + isIdle() { + return !this.shutdownTask_ && (!this.taskQueues_ || !this.taskQueues_.size); + } + + /** + * Resets this instance, clearing its queue and removing all event listeners. + */ + reset() { + this.cancelQueues_(new FlowResetError); + this.emit(ControlFlow.EventType.RESET); + this.removeAllListeners(); + this.cancelShutdown_(); + } + + /** + * Generates an annotated string describing the internal state of this control + * flow, including the currently executing as well as pending tasks. If + * {@code opt_includeStackTraces === true}, the string will include the + * stack trace from when each task was scheduled. + * @param {string=} opt_includeStackTraces Whether to include the stack traces + * from when each task was scheduled. Defaults to false. + * @return {string} String representation of this flow's internal state. + */ + getSchedule(opt_includeStackTraces) { + var ret = 'ControlFlow::' + getUid(this); + var activeQueue = this.activeQueue_; + if (!this.taskQueues_ || !this.taskQueues_.size) { + return ret; + } + var childIndent = '| '; + for (var q of this.taskQueues_) { + ret += '\n' + printQ(q, childIndent); + } + return ret; + + function printQ(q, indent) { + var ret = q.toString(); + if (q === activeQueue) { + ret = '(active) ' + ret; + } + var prefix = indent + childIndent; + if (q.pending_) { + if (q.pending_.q.state_ !== TaskQueueState.FINISHED) { + ret += '\n' + prefix + '(pending) ' + q.pending_.task; + ret += '\n' + printQ(q.pending_.q, prefix + childIndent); + } else { + ret += '\n' + prefix + '(blocked) ' + q.pending_.task; + } + } + if (q.interrupts_) { + q.interrupts_.forEach((task) => { + ret += '\n' + prefix + task; + }); + } + if (q.tasks_) { + q.tasks_.forEach((task) => ret += printTask(task, '\n' + prefix)); + } + return indent + ret; + } + + function printTask(task, prefix) { + var ret = prefix + task; + if (opt_includeStackTraces && task.promise.stack_) { + ret += prefix + childIndent + + (task.promise.stack_.stack || task.promise.stack_) + .replace(/\n/g, prefix); + } + return ret; + } + } + + /** + * Returns the currently actively task queue for this flow. If there is no + * active queue, one will be created. + * @return {!TaskQueue} the currently active task queue for this flow. + * @private + */ + getActiveQueue_() { + if (this.activeQueue_) { + return this.activeQueue_; + } + + this.activeQueue_ = new TaskQueue(this); + if (!this.taskQueues_) { + this.taskQueues_ = new Set(); + } + this.taskQueues_.add(this.activeQueue_); + this.activeQueue_ + .once('end', this.onQueueEnd_, this) + .once('error', this.onQueueError_, this); + + asyncRun(() => this.activeQueue_ = null); + this.activeQueue_.start(); + return this.activeQueue_; + } + + /** + * Schedules a task for execution. If there is nothing currently in the + * queue, the task will be executed in the next turn of the event loop. If + * the task function is a generator, the task will be executed using + * {@link ./promise.consume consume()}. + * + * @param {function(): (T|ManagedPromise)} fn The function to + * call to start the task. If the function returns a + * {@link ManagedPromise}, this instance will wait for it to be + * resolved before starting the next task. + * @param {string=} opt_description A description of the task. + * @return {!ManagedPromise} A promise that will be resolved + * with the result of the action. + * @template T + */ + execute(fn, opt_description) { + if (isGenerator(fn)) { + let original = fn; + fn = () => consume(original); + } + + if (!this.hold_) { + var holdIntervalMs = 2147483647; // 2^31-1; max timer length for Node.js + this.hold_ = setInterval(function() {}, holdIntervalMs); + } + + var task = new Task( + this, fn, opt_description || '', + {name: 'Task', top: ControlFlow.prototype.execute}); + + var q = this.getActiveQueue_(); + q.enqueue(task); + this.emit(ControlFlow.EventType.SCHEDULE_TASK, task.description); + return task.promise; + } + + /** + * Inserts a {@code setTimeout} into the command queue. This is equivalent to + * a thread sleep in a synchronous programming language. + * + * @param {number} ms The timeout delay, in milliseconds. + * @param {string=} opt_description A description to accompany the timeout. + * @return {!ManagedPromise} A promise that will be resolved with + * the result of the action. + */ + timeout(ms, opt_description) { + return this.execute(function() { + return delayed(ms); + }, opt_description); + } + + /** + * Schedules a task that shall wait for a condition to hold. Each condition + * function may return any value, but it will always be evaluated as a + * boolean. + * + * Condition functions may schedule sub-tasks with this instance, however, + * their execution time will be factored into whether a wait has timed out. + * + * In the event a condition returns a ManagedPromise, the polling loop will wait for + * it to be resolved before evaluating whether the condition has been + * satisfied. The resolution time for a promise is factored into whether a + * wait has timed out. + * + * If the condition function throws, or returns a rejected promise, the + * wait task will fail. + * + * If the condition is defined as a promise, the flow will wait for it to + * settle. If the timeout expires before the promise settles, the promise + * returned by this function will be rejected. + * + * If this function is invoked with `timeout === 0`, or the timeout is + * omitted, the flow will wait indefinitely for the condition to be satisfied. + * + * @param {(!ManagedPromise|function())} condition The condition to poll, + * or a promise to wait on. + * @param {number=} opt_timeout How long to wait, in milliseconds, for the + * condition to hold before timing out. If omitted, the flow will wait + * indefinitely. + * @param {string=} opt_message An optional error message to include if the + * wait times out; defaults to the empty string. + * @return {!ManagedPromise} A promise that will be fulfilled + * when the condition has been satisified. The promise shall be rejected + * if the wait times out waiting for the condition. + * @throws {TypeError} If condition is not a function or promise or if timeout + * is not a number >= 0. + * @template T + */ + wait(condition, opt_timeout, opt_message) { + var timeout = opt_timeout || 0; + if (typeof timeout !== 'number' || timeout < 0) { + throw TypeError('timeout must be a number >= 0: ' + timeout); + } + + if (isPromise(condition)) { + return this.execute(function() { + if (!timeout) { + return condition; + } + return new ManagedPromise(function(fulfill, reject) { + var start = Date.now(); + var timer = setTimeout(function() { + timer = null; + reject(Error((opt_message ? opt_message + '\n' : '') + + 'Timed out waiting for promise to resolve after ' + + (Date.now() - start) + 'ms')); + }, timeout); + + /** @type {Thenable} */(condition).then( + function(value) { + timer && clearTimeout(timer); + fulfill(value); + }, + function(error) { + timer && clearTimeout(timer); + reject(error); + }); + }); + }, opt_message || ''); + } + + if (typeof condition !== 'function') { + throw TypeError('Invalid condition; must be a function or promise: ' + + typeof condition); + } + + if (isGenerator(condition)) { + let original = condition; + condition = () => consume(original); + } + + var self = this; + return this.execute(function() { + var startTime = Date.now(); + return new ManagedPromise(function(fulfill, reject) { + pollCondition(); + + function pollCondition() { + var conditionFn = /** @type {function()} */(condition); + self.execute(conditionFn).then(function(value) { + var elapsed = Date.now() - startTime; + if (!!value) { + fulfill(value); + } else if (timeout && elapsed >= timeout) { + reject(new Error((opt_message ? opt_message + '\n' : '') + + 'Wait timed out after ' + elapsed + 'ms')); + } else { + // Do not use asyncRun here because we need a non-micro yield + // here so the UI thread is given a chance when running in a + // browser. + setTimeout(pollCondition, 0); + } + }, reject); + } + }); + }, opt_message || ''); + } + + /** + * Executes a function in the next available turn of the JavaScript event + * loop. This ensures the function runs with its own task queue and any + * scheduled tasks will run in "parallel" to those scheduled in the current + * function. + * + * flow.execute(() => console.log('a')); + * flow.execute(() => console.log('b')); + * flow.execute(() => console.log('c')); + * flow.async(() => { + * flow.execute(() => console.log('d')); + * flow.execute(() => console.log('e')); + * }); + * flow.async(() => { + * flow.execute(() => console.log('f')); + * flow.execute(() => console.log('g')); + * }); + * flow.once('idle', () => console.log('fin')); + * // a + * // d + * // f + * // b + * // e + * // g + * // c + * // fin + * + * If the function itself throws, the error will be treated the same as an + * unhandled rejection within the control flow. + * + * __NOTE__: This function is considered _unstable_. + * + * @param {!Function} fn The function to execute. + * @param {Object=} opt_self The object in whose context to run the function. + * @param {...*} var_args Any arguments to pass to the function. + */ + async(fn, opt_self, var_args) { + asyncRun(() => { + // Clear any lingering queues, forces getActiveQueue_ to create a new one. + this.activeQueue_ = null; + var q = this.getActiveQueue_(); + try { + q.execute_(fn.bind(opt_self, var_args)); + } catch (ex) { + var cancellationError = CancellationError.wrap(ex, + 'Function passed to ControlFlow.async() threw'); + cancellationError.silent_ = true; + q.abort_(cancellationError); + } finally { + this.activeQueue_ = null; + } + }); + } + + /** + * Event handler for when a task queue is exhausted. This starts the shutdown + * sequence for this instance if there are no remaining task queues: after + * one turn of the event loop, this object will emit the + * {@link ControlFlow.EventType.IDLE IDLE} event to signal + * listeners that it has completed. During this wait, if another task is + * scheduled, the shutdown will be aborted. + * + * @param {!TaskQueue} q the completed task queue. + * @private + */ + onQueueEnd_(q) { + if (!this.taskQueues_) { + return; + } + this.taskQueues_.delete(q); + + vlog(1, () => q + ' has finished'); + vlog(1, () => this.taskQueues_.size + ' queues remain\n' + this, this); + + if (!this.taskQueues_.size) { + if (this.shutdownTask_) { + throw Error('Already have a shutdown task??'); + } + vlog(1, () => 'Scheduling shutdown\n' + this); + this.shutdownTask_ = new MicroTask(() => this.shutdown_()); + } + } + + /** + * Event handler for when a task queue terminates with an error. This triggers + * the cancellation of all other task queues and a + * {@link ControlFlow.EventType.UNCAUGHT_EXCEPTION} event. + * If there are no error event listeners registered with this instance, the + * error will be rethrown to the global error handler. + * + * @param {*} error the error that caused the task queue to terminate. + * @param {!TaskQueue} q the task queue. + * @private + */ + onQueueError_(error, q) { + if (this.taskQueues_) { + this.taskQueues_.delete(q); + } + this.cancelQueues_(CancellationError.wrap( + error, 'There was an uncaught error in the control flow')); + this.cancelShutdown_(); + this.cancelHold_(); + + var listeners = this.listeners( + ControlFlow.EventType.UNCAUGHT_EXCEPTION); + if (!listeners.size) { + asyncThrow(/** @type {!Error} */(error)); + } else { + this.reportUncaughtException_(error); + } + } + + /** + * Cancels all remaining task queues. + * @param {!CancellationError} reason The cancellation reason. + * @private + */ + cancelQueues_(reason) { + reason.silent_ = true; + if (this.taskQueues_) { + for (var q of this.taskQueues_) { + q.removeAllListeners(); + q.abort_(reason); + } + this.taskQueues_.clear(); + this.taskQueues_ = null; + } + } + + /** + * Reports an uncaught exception using a + * {@link ControlFlow.EventType.UNCAUGHT_EXCEPTION} event. + * + * @param {*} e the error to report. + * @private + */ + reportUncaughtException_(e) { + this.emit(ControlFlow.EventType.UNCAUGHT_EXCEPTION, e); + } + + /** @private */ + cancelHold_() { + if (this.hold_) { + clearInterval(this.hold_); + this.hold_ = null; + } + } + + /** @private */ + shutdown_() { + vlog(1, () => 'Going idle: ' + this); + this.cancelHold_(); + this.shutdownTask_ = null; + this.emit(ControlFlow.EventType.IDLE); + } + + /** + * Cancels the shutdown sequence if it is currently scheduled. + * @private + */ + cancelShutdown_() { + if (this.shutdownTask_) { + this.shutdownTask_.cancel(); + this.shutdownTask_ = null; + } + } +} + + +/** + * Events that may be emitted by an {@link ControlFlow}. + * @enum {string} + */ +ControlFlow.EventType = { + + /** Emitted when all tasks have been successfully executed. */ + IDLE: 'idle', + + /** Emitted when a ControlFlow has been reset. */ + RESET: 'reset', + + /** Emitted whenever a new task has been scheduled. */ + SCHEDULE_TASK: 'scheduleTask', + + /** + * Emitted whenever a control flow aborts due to an unhandled promise + * rejection. This event will be emitted along with the offending rejection + * reason. Upon emitting this event, the control flow will empty its task + * queue and revert to its initial state. + */ + UNCAUGHT_EXCEPTION: 'uncaughtException' +}; + + +/** + * Wraps a function to execute as a cancellable micro task. + * @final + */ +class MicroTask { + /** + * @param {function()} fn The function to run as a micro task. + */ + constructor(fn) { + /** @private {boolean} */ + this.cancelled_ = false; + asyncRun(() => { + if (!this.cancelled_) { + fn(); + } + }); + } + + /** + * Runs the given function after a micro-task yield. + * @param {function()} fn The function to run. + */ + static run(fn) { + NativePromise.resolve().then(function() { + try { + fn(); + } catch (ignored) { + // Do nothing. + } + }); + } + + /** + * Cancels the execution of this task. Note: this will not prevent the task + * timer from firing, just the invocation of the wrapped function. + */ + cancel() { + this.cancelled_ = true; + } +} + + +/** + * A task to be executed by a {@link ControlFlow}. + * + * @template T + * @final + */ +class Task extends Deferred { + /** + * @param {!ControlFlow} flow The flow this instances belongs + * to. + * @param {function(): (T|!ManagedPromise)} fn The function to + * call when the task executes. If it returns a + * {@link ManagedPromise}, the flow will wait for it to be + * resolved before starting the next task. + * @param {string} description A description of the task for debugging. + * @param {{name: string, top: !Function}=} opt_stackOptions Options to use + * when capturing the stacktrace for when this task was created. + */ + constructor(flow, fn, description, opt_stackOptions) { + super(flow); + getUid(this); + + /** @type {function(): (T|!ManagedPromise)} */ + this.execute = fn; + + /** @type {string} */ + this.description = description; + + /** @type {TaskQueue} */ + this.queue = null; + + /** + * Whether this task is considered block. A blocked task may be registered + * in a task queue, but will be dropped if it is still blocked when it + * reaches the front of the queue. A dropped task may always be rescheduled. + * + * Blocked tasks are used when a callback is attached to an unsettled + * promise to reserve a spot in line (in a manner of speaking). If the + * promise is not settled before the callback reaches the front of the + * of the queue, it will be dropped. Once the promise is settled, the + * dropped task will be rescheduled as an interrupt on the currently task + * queue. + * + * @type {boolean} + */ + this.blocked = false; + + if (opt_stackOptions) { + this.promise.stack_ = captureStackTrace( + opt_stackOptions.name, this.description, opt_stackOptions.top); + } + } + + /** @override */ + toString() { + return 'Task::' + getUid(this) + '<' + this.description + '>'; + } +} + + +/** @enum {string} */ +const TaskQueueState = { + NEW: 'new', + STARTED: 'started', + FINISHED: 'finished' +}; + + +/** + * @final + */ +class TaskQueue extends events.EventEmitter { + /** @param {!ControlFlow} flow . */ + constructor(flow) { + super(); + + /** @private {string} */ + this.name_ = 'TaskQueue::' + getUid(this); + + /** @private {!ControlFlow} */ + this.flow_ = flow; + + /** @private {!Array} */ + this.tasks_ = []; + + /** @private {Array} */ + this.interrupts_ = null; + + /** @private {({task: !Task, q: !TaskQueue}|null)} */ + this.pending_ = null; + + /** @private {TaskQueueState} */ + this.state_ = TaskQueueState.NEW; + + /** @private {!Set} */ + this.unhandledRejections_ = new Set(); + } + + /** @override */ + toString() { + return 'TaskQueue::' + getUid(this); + } + + /** + * @param {!ManagedPromise} promise . + */ + addUnhandledRejection(promise) { + // TODO: node 4.0.0+ + vlog(2, () => this + ' registering unhandled rejection: ' + promise, this); + this.unhandledRejections_.add(promise); + } + + /** + * @param {!ManagedPromise} promise . + */ + clearUnhandledRejection(promise) { + var deleted = this.unhandledRejections_.delete(promise); + if (deleted) { + // TODO: node 4.0.0+ + vlog(2, () => this + ' clearing unhandled rejection: ' + promise, this); + } + } + + /** + * Enqueues a new task for execution. + * @param {!Task} task The task to enqueue. + * @throws {Error} If this instance has already started execution. + */ + enqueue(task) { + if (this.state_ !== TaskQueueState.NEW) { + throw Error('TaskQueue has started: ' + this); + } + + if (task.queue) { + throw Error('Task is already scheduled in another queue'); + } + + this.tasks_.push(task); + task.queue = this; + task.promise[CANCEL_HANDLER_SYMBOL] = + this.onTaskCancelled_.bind(this, task); + + vlog(1, () => this + '.enqueue(' + task + ')', this); + vlog(2, () => this.flow_.toString(), this); + } + + /** + * Schedules the callbacks registered on the given promise in this queue. + * + * @param {!ManagedPromise} promise the promise whose callbacks should be + * registered as interrupts in this task queue. + * @throws {Error} if this queue has already finished. + */ + scheduleCallbacks(promise) { + if (this.state_ === TaskQueueState.FINISHED) { + throw new Error('cannot interrupt a finished q(' + this + ')'); + } + + if (this.pending_ && this.pending_.task.promise === promise) { + this.pending_.task.promise.queue_ = null; + this.pending_ = null; + asyncRun(() => this.executeNext_()); + } + + if (!promise.callbacks_) { + return; + } + promise.callbacks_.forEach(function(cb) { + cb.blocked = false; + if (cb.queue) { + return; + } + + cb.promise[CANCEL_HANDLER_SYMBOL] = this.onTaskCancelled_.bind(this, cb); + + if (cb.queue === this && this.tasks_.indexOf(cb) !== -1) { + return; + } + + if (cb.queue) { + cb.queue.dropTask_(cb); + } + + cb.queue = this; + if (!this.interrupts_) { + this.interrupts_ = []; + } + this.interrupts_.push(cb); + }, this); + promise.callbacks_ = null; + vlog(2, () => this + ' interrupted\n' + this.flow_, this); + } + + /** + * Starts executing tasks in this queue. Once called, no further tasks may + * be {@linkplain #enqueue() enqueued} with this instance. + * + * @throws {Error} if this queue has already been started. + */ + start() { + if (this.state_ !== TaskQueueState.NEW) { + throw new Error('TaskQueue has already started'); + } + // Always asynchronously execute next, even if there doesn't look like + // there is anything in the queue. This will catch pending unhandled + // rejections that were registered before start was called. + asyncRun(() => this.executeNext_()); + } + + /** + * Aborts this task queue. If there are any scheduled tasks, they are silently + * cancelled and discarded (their callbacks will never fire). If this queue + * has a _pending_ task, the abortion error is used to cancel that task. + * Otherwise, this queue will emit an error event. + * + * @param {*} error The abortion reason. + * @private + */ + abort_(error) { + var cancellation; + + if (error instanceof FlowResetError) { + cancellation = error; + } else { + cancellation = new DiscardedTaskError(error); + } + + if (this.interrupts_ && this.interrupts_.length) { + this.interrupts_.forEach((t) => t.reject(cancellation)); + this.interrupts_ = []; + } + + if (this.tasks_ && this.tasks_.length) { + this.tasks_.forEach((t) => t.reject(cancellation)); + this.tasks_ = []; + } + + if (this.pending_) { + vlog(2, () => this + '.abort(); cancelling pending task', this); + this.pending_.task.cancel(/** @type {!CancellationError} */(error)); + + } else { + vlog(2, () => this + '.abort(); emitting error event', this); + this.emit('error', error, this); + } + } + + /** @private */ + executeNext_() { + if (this.state_ === TaskQueueState.FINISHED) { + return; + } + this.state_ = TaskQueueState.STARTED; + + if (this.pending_ != null || this.processUnhandledRejections_()) { + return; + } + + var task; + do { + task = this.getNextTask_(); + } while (task && !task.promise.isPending()); + + if (!task) { + this.state_ = TaskQueueState.FINISHED; + this.tasks_ = []; + this.interrupts_ = null; + vlog(2, () => this + '.emit(end)', this); + this.emit('end', this); + return; + } + + var self = this; + var subQ = new TaskQueue(this.flow_); + subQ.once('end', () => self.onTaskComplete_(result)) + .once('error', (e) => self.onTaskFailure_(result, e)); + vlog(2, () => self + ' created ' + subQ + ' for ' + task); + + var result = undefined; + try { + this.pending_ = {task: task, q: subQ}; + task.promise.queue_ = this; + result = subQ.execute_(task.execute); + subQ.start(); + } catch (ex) { + subQ.abort_(ex); + } + } + + /** + * @param {!Function} fn . + * @return {T} . + * @template T + * @private + */ + execute_(fn) { + try { + activeFlows.push(this.flow_); + this.flow_.activeQueue_ = this; + return fn(); + } finally { + this.flow_.activeQueue_ = null; + activeFlows.pop(); + } + } + + /** + * Process any unhandled rejections registered with this task queue. If there + * is a rejection, this queue will be aborted with the rejection error. If + * there are multiple rejections registered, this queue will be aborted with + * a {@link MultipleUnhandledRejectionError}. + * @return {boolean} whether there was an unhandled rejection. + * @private + */ + processUnhandledRejections_() { + if (!this.unhandledRejections_.size) { + return false; + } + + var errors = new Set(); + for (var rejection of this.unhandledRejections_) { + errors.add(rejection.value_); + } + this.unhandledRejections_.clear(); + + var errorToReport = errors.size === 1 + ? errors.values().next().value + : new MultipleUnhandledRejectionError(errors); + + vlog(1, () => this + ' aborting due to unhandled rejections', this); + if (this.flow_.propagateUnhandledRejections_) { + this.abort_(errorToReport); + return true; + } else { + vlog(1, 'error propagation disabled; reporting to control flow'); + this.flow_.reportUncaughtException_(errorToReport); + return false; + } + } + + /** + * @param {!Task} task The task to drop. + * @private + */ + dropTask_(task) { + var index; + if (this.interrupts_) { + index = this.interrupts_.indexOf(task); + if (index != -1) { + task.queue = null; + this.interrupts_.splice(index, 1); + return; + } + } + + index = this.tasks_.indexOf(task); + if (index != -1) { + task.queue = null; + this.tasks_.splice(index, 1); + } + } + + /** + * @param {!Task} task The task that was cancelled. + * @param {!CancellationError} reason The cancellation reason. + * @private + */ + onTaskCancelled_(task, reason) { + if (this.pending_ && this.pending_.task === task) { + this.pending_.q.abort_(reason); + } else { + this.dropTask_(task); + } + } + + /** + * @param {*} value the value originally returned by the task function. + * @private + */ + onTaskComplete_(value) { + if (this.pending_) { + this.pending_.task.fulfill(value); + } + } + + /** + * @param {*} taskFnResult the value originally returned by the task function. + * @param {*} error the error that caused the task function to terminate. + * @private + */ + onTaskFailure_(taskFnResult, error) { + if (Thenable.isImplementation(taskFnResult)) { + taskFnResult.cancel(CancellationError.wrap(error)); + } + this.pending_.task.reject(error); + } + + /** + * @return {(Task|undefined)} the next task scheduled within this queue, + * if any. + * @private + */ + getNextTask_() { + var task = undefined; + while (true) { + if (this.interrupts_) { + task = this.interrupts_.shift(); + } + if (!task && this.tasks_) { + task = this.tasks_.shift(); + } + if (task && task.blocked) { + vlog(2, () => this + ' skipping blocked task ' + task, this); + task.queue = null; + task = null; + // TODO: recurse when tail-call optimization is available in node. + } else { + break; + } + } + return task; + } +}; + + + +/** + * The default flow to use if no others are active. + * @type {!ControlFlow} + */ +var defaultFlow = new ControlFlow(); + + +/** + * A stack of active control flows, with the top of the stack used to schedule + * commands. When there are multiple flows on the stack, the flow at index N + * represents a callback triggered within a task owned by the flow at index + * N-1. + * @type {!Array} + */ +var activeFlows = []; + + +/** + * Changes the default flow to use when no others are active. + * @param {!ControlFlow} flow The new default flow. + * @throws {Error} If the default flow is not currently active. + */ +function setDefaultFlow(flow) { + if (activeFlows.length) { + throw Error('You may only change the default flow while it is active'); + } + defaultFlow = flow; +} + + +/** + * @return {!ControlFlow} The currently active control flow. + */ +function controlFlow() { + return /** @type {!ControlFlow} */ ( + activeFlows.length ? activeFlows[activeFlows.length - 1] : defaultFlow); +} + + +/** + * Creates a new control flow. The provided callback will be invoked as the + * first task within the new flow, with the flow as its sole argument. Returns + * a promise that resolves to the callback result. + * @param {function(!ControlFlow)} callback The entry point + * to the newly created flow. + * @return {!ManagedPromise} A promise that resolves to the callback + * result. + */ +function createFlow(callback) { + var flow = new ControlFlow; + return flow.execute(function() { + return callback(flow); + }); +} + + +/** + * Tests is a function is a generator. + * @param {!Function} fn The function to test. + * @return {boolean} Whether the function is a generator. + */ +function isGenerator(fn) { + return fn.constructor.name === 'GeneratorFunction'; +} + + +/** + * Consumes a {@code GeneratorFunction}. Each time the generator yields a + * promise, this function will wait for it to be fulfilled before feeding the + * fulfilled value back into {@code next}. Likewise, if a yielded promise is + * rejected, the rejection error will be passed to {@code throw}. + * + * __Example 1:__ the Fibonacci Sequence. + * + * promise.consume(function* fibonacci() { + * var n1 = 1, n2 = 1; + * for (var i = 0; i < 4; ++i) { + * var tmp = yield n1 + n2; + * n1 = n2; + * n2 = tmp; + * } + * return n1 + n2; + * }).then(function(result) { + * console.log(result); // 13 + * }); + * + * __Example 2:__ a generator that throws. + * + * promise.consume(function* () { + * yield promise.delayed(250).then(function() { + * throw Error('boom'); + * }); + * }).catch(function(e) { + * console.log(e.toString()); // Error: boom + * }); + * + * @param {!Function} generatorFn The generator function to execute. + * @param {Object=} opt_self The object to use as "this" when invoking the + * initial generator. + * @param {...*} var_args Any arguments to pass to the initial generator. + * @return {!ManagedPromise} A promise that will resolve to the + * generator's final result. + * @throws {TypeError} If the given function is not a generator. + */ +function consume(generatorFn, opt_self, var_args) { + if (!isGenerator(generatorFn)) { + throw new TypeError('Input is not a GeneratorFunction: ' + + generatorFn.constructor.name); + } + + var deferred = defer(); + var generator = generatorFn.apply( + opt_self, Array.prototype.slice.call(arguments, 2)); + callNext(); + return deferred.promise; + + /** @param {*=} opt_value . */ + function callNext(opt_value) { + pump(generator.next, opt_value); + } + + /** @param {*=} opt_error . */ + function callThrow(opt_error) { + // Dictionary lookup required because Closure compiler's built-in + // externs does not include GeneratorFunction.prototype.throw. + pump(generator['throw'], opt_error); + } + + function pump(fn, opt_arg) { + if (!deferred.isPending()) { + return; // Defererd was cancelled; silently abort. + } + + try { + var result = fn.call(generator, opt_arg); + } catch (ex) { + deferred.reject(ex); + return; + } + + if (result.done) { + deferred.fulfill(result.value); + return; + } + + asap(result.value, callNext, callThrow); + } +} + + +// PUBLIC API + + +exports.CancellationError = CancellationError; +exports.ControlFlow = ControlFlow; +exports.Deferred = Deferred; +exports.MultipleUnhandledRejectionError = MultipleUnhandledRejectionError; +exports.Thenable = Thenable; +exports.Promise = ManagedPromise; +exports.all = all; +exports.asap = asap; +exports.captureStackTrace = captureStackTrace; +exports.checkedNodeCall = checkedNodeCall; +exports.consume = consume; +exports.controlFlow = controlFlow; +exports.createFlow = createFlow; +exports.defer = defer; +exports.delayed = delayed; +exports.filter = filter; +exports.fulfilled = fulfilled; +exports.fullyResolved = fullyResolved; +exports.isGenerator = isGenerator; +exports.isPromise = isPromise; +exports.map = map; +exports.rejected = rejected; +exports.setDefaultFlow = setDefaultFlow; +exports.when = when; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/safari/client.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/safari/client.js new file mode 100644 index 0000000..b15dbd6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/safari/client.js @@ -0,0 +1,7203 @@ +'use strict';var COMPILED = !0, goog = goog || {}; +goog.global = this; +goog.isDef = function(a) { + return void 0 !== a; +}; +goog.exportPath_ = function(a, b, c) { + a = a.split("."); + c = c || goog.global; + a[0] in c || !c.execScript || c.execScript("var " + a[0]); + for (var d;a.length && (d = a.shift());) { + !a.length && goog.isDef(b) ? c[d] = b : c = c[d] ? c[d] : c[d] = {}; + } +}; +goog.define = function(a, b) { + var c = b; + COMPILED || (goog.global.CLOSURE_UNCOMPILED_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_UNCOMPILED_DEFINES, a) ? c = goog.global.CLOSURE_UNCOMPILED_DEFINES[a] : goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES, a) && (c = goog.global.CLOSURE_DEFINES[a])); + goog.exportPath_(a, c); +}; +goog.DEBUG = !0; +goog.LOCALE = "en"; +goog.TRUSTED_SITE = !0; +goog.STRICT_MODE_COMPATIBLE = !1; +goog.DISALLOW_TEST_ONLY_CODE = COMPILED && !goog.DEBUG; +goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1; +goog.provide = function(a) { + if (!COMPILED && goog.isProvided_(a)) { + throw Error('Namespace "' + a + '" already declared.'); + } + goog.constructNamespace_(a); +}; +goog.constructNamespace_ = function(a, b) { + if (!COMPILED) { + delete goog.implicitNamespaces_[a]; + for (var c = a;(c = c.substring(0, c.lastIndexOf("."))) && !goog.getObjectByName(c);) { + goog.implicitNamespaces_[c] = !0; + } + } + goog.exportPath_(a, b); +}; +goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/; +goog.module = function(a) { + if (!goog.isString(a) || !a || -1 == a.search(goog.VALID_MODULE_RE_)) { + throw Error("Invalid module identifier"); + } + if (!goog.isInModuleLoader_()) { + throw Error("Module " + a + " has been loaded incorrectly."); + } + if (goog.moduleLoaderState_.moduleName) { + throw Error("goog.module may only be called once per module."); + } + goog.moduleLoaderState_.moduleName = a; + if (!COMPILED) { + if (goog.isProvided_(a)) { + throw Error('Namespace "' + a + '" already declared.'); + } + delete goog.implicitNamespaces_[a]; + } +}; +goog.module.get = function(a) { + return goog.module.getInternal_(a); +}; +goog.module.getInternal_ = function(a) { + if (!COMPILED) { + return goog.isProvided_(a) ? a in goog.loadedModules_ ? goog.loadedModules_[a] : goog.getObjectByName(a) : null; + } +}; +goog.moduleLoaderState_ = null; +goog.isInModuleLoader_ = function() { + return null != goog.moduleLoaderState_; +}; +goog.module.declareLegacyNamespace = function() { + if (!COMPILED && !goog.isInModuleLoader_()) { + throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module"); + } + if (!COMPILED && !goog.moduleLoaderState_.moduleName) { + throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace."); + } + goog.moduleLoaderState_.declareLegacyNamespace = !0; +}; +goog.setTestOnly = function(a) { + if (goog.DISALLOW_TEST_ONLY_CODE) { + throw a = a || "", Error("Importing test-only code into non-debug environment" + (a ? ": " + a : ".")); + } +}; +goog.forwardDeclare = function(a) { +}; +COMPILED || (goog.isProvided_ = function(a) { + return a in goog.loadedModules_ || !goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a)); +}, goog.implicitNamespaces_ = {"goog.module":!0}); +goog.getObjectByName = function(a, b) { + for (var c = a.split("."), d = b || goog.global, e;e = c.shift();) { + if (goog.isDefAndNotNull(d[e])) { + d = d[e]; + } else { + return null; + } + } + return d; +}; +goog.globalize = function(a, b) { + var c = b || goog.global, d; + for (d in a) { + c[d] = a[d]; + } +}; +goog.addDependency = function(a, b, c, d) { + if (goog.DEPENDENCIES_ENABLED) { + var e; + a = a.replace(/\\/g, "/"); + for (var f = goog.dependencies_, g = 0;e = b[g];g++) { + f.nameToPath[e] = a, f.pathIsModule[a] = !!d; + } + for (d = 0;b = c[d];d++) { + a in f.requires || (f.requires[a] = {}), f.requires[a][b] = !0; + } + } +}; +goog.ENABLE_DEBUG_LOADER = !0; +goog.logToConsole_ = function(a) { + goog.global.console && goog.global.console.error(a); +}; +goog.require = function(a) { + if (!COMPILED) { + goog.ENABLE_DEBUG_LOADER && goog.IS_OLD_IE_ && goog.maybeProcessDeferredDep_(a); + if (goog.isProvided_(a)) { + return goog.isInModuleLoader_() ? goog.module.getInternal_(a) : null; + } + if (goog.ENABLE_DEBUG_LOADER) { + var b = goog.getPathFromDeps_(a); + if (b) { + return goog.writeScripts_(b), null; + } + } + a = "goog.require could not find: " + a; + goog.logToConsole_(a); + throw Error(a); + } +}; +goog.basePath = ""; +goog.nullFunction = function() { +}; +goog.abstractMethod = function() { + throw Error("unimplemented abstract method"); +}; +goog.addSingletonGetter = function(a) { + a.getInstance = function() { + if (a.instance_) { + return a.instance_; + } + goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = a); + return a.instance_ = new a; + }; +}; +goog.instantiatedSingletons_ = []; +goog.LOAD_MODULE_USING_EVAL = !0; +goog.SEAL_MODULE_EXPORTS = goog.DEBUG; +goog.loadedModules_ = {}; +goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER; +goog.DEPENDENCIES_ENABLED && (goog.dependencies_ = {pathIsModule:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() { + var a = goog.global.document; + return null != a && "write" in a; +}, goog.findBasePath_ = function() { + if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) { + goog.basePath = goog.global.CLOSURE_BASE_PATH; + } else { + if (goog.inHtmlDocument_()) { + for (var a = goog.global.document.getElementsByTagName("SCRIPT"), b = a.length - 1;0 <= b;--b) { + var c = a[b].src, d = c.lastIndexOf("?"), d = -1 == d ? c.length : d; + if ("base.js" == c.substr(d - 7, 7)) { + goog.basePath = c.substr(0, d - 7); + break; + } + } + } + } +}, goog.importScript_ = function(a, b) { + (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(a, b) && (goog.dependencies_.written[a] = !0); +}, goog.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.importModule_ = function(a) { + goog.importScript_("", 'goog.retrieveAndExecModule_("' + a + '");') && (goog.dependencies_.written[a] = !0); +}, goog.queuedModules_ = [], goog.wrapModule_ = function(a, b) { + return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(b + "\n//# sourceURL=" + a + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + b + "\n;return exports});\n//# sourceURL=" + a + "\n"; +}, goog.loadQueuedModules_ = function() { + var a = goog.queuedModules_.length; + if (0 < a) { + var b = goog.queuedModules_; + goog.queuedModules_ = []; + for (var c = 0;c < a;c++) { + goog.maybeProcessDeferredPath_(b[c]); + } + } +}, goog.maybeProcessDeferredDep_ = function(a) { + goog.isDeferredModule_(a) && goog.allDepsAreAvailable_(a) && (a = goog.getPathFromDeps_(a), goog.maybeProcessDeferredPath_(goog.basePath + a)); +}, goog.isDeferredModule_ = function(a) { + return (a = goog.getPathFromDeps_(a)) && goog.dependencies_.pathIsModule[a] ? goog.basePath + a in goog.dependencies_.deferred : !1; +}, goog.allDepsAreAvailable_ = function(a) { + if ((a = goog.getPathFromDeps_(a)) && a in goog.dependencies_.requires) { + for (var b in goog.dependencies_.requires[a]) { + if (!goog.isProvided_(b) && !goog.isDeferredModule_(b)) { + return !1; + } + } + } + return !0; +}, goog.maybeProcessDeferredPath_ = function(a) { + if (a in goog.dependencies_.deferred) { + var b = goog.dependencies_.deferred[a]; + delete goog.dependencies_.deferred[a]; + goog.globalEval(b); + } +}, goog.loadModuleFromUrl = function(a) { + goog.retrieveAndExecModule_(a); +}, goog.loadModule = function(a) { + var b = goog.moduleLoaderState_; + try { + goog.moduleLoaderState_ = {moduleName:void 0, declareLegacyNamespace:!1}; + var c; + if (goog.isFunction(a)) { + c = a.call(goog.global, {}); + } else { + if (goog.isString(a)) { + c = goog.loadModuleFromSource_.call(goog.global, a); + } else { + throw Error("Invalid module definition"); + } + } + var d = goog.moduleLoaderState_.moduleName; + if (!goog.isString(d) || !d) { + throw Error('Invalid module name "' + d + '"'); + } + goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(d, c) : goog.SEAL_MODULE_EXPORTS && Object.seal && Object.seal(c); + goog.loadedModules_[d] = c; + } finally { + goog.moduleLoaderState_ = b; + } +}, goog.loadModuleFromSource_ = function(a) { + eval(a); + return {}; +}, goog.writeScriptSrcNode_ = function(a) { + goog.global.document.write('")' + Response.Output.Write(""); + } +} diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx new file mode 100644 index 0000000..52d2e67 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx @@ -0,0 +1,11 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Redirect.aspx.cs" Inherits="Redirect" %> + + + + + + Untitled Page + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs new file mode 100644 index 0000000..9e0650b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs @@ -0,0 +1,9 @@ +using System; + +public partial class Redirect : Page +{ + protected new void Page_Load(object sender, EventArgs e) + { + Response.Redirect("resultPage.html"); + } +} diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop new file mode 100644 index 0000000..fc955f8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop @@ -0,0 +1,759 @@ + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + False + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Web.Config b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Web.Config new file mode 100644 index 0000000..68b648f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/Web.Config @@ -0,0 +1,59 @@ + + + + +

      + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml new file mode 100644 index 0000000..a0f5470 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml @@ -0,0 +1,14 @@ + + + + + + Title + + + +

      + Foo +

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html new file mode 100644 index 0000000..4b34031 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html @@ -0,0 +1,81 @@ + + + +
      + + +
      + + Red + Green +
      + +
      + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/alerts.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/alerts.html new file mode 100644 index 0000000..1add0db --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/alerts.html @@ -0,0 +1,85 @@ + + + + + Testing Alerts + + + + + +

      Testing Alerts and Stuff

      + +

      This tests alerts: click me

      + +

      This tests alerts: click me

      + +

      Let's make the prompt happen

      + +

      Let's make the prompt with default happen

      + +

      Let's make TWO prompts happen

      + +

      A SLOW alert

      + +

      This is a test of a confirm: + test confirm

      + +

      This is a test of showModalDialog: test dialog

      + +

      This is a test of an alert in an iframe: + +

      + +

      This is a test of an alert in a nested iframe: + +

      + +

      This is a test of an alert open from onload event handler: open new page

      + +

      This is a test of an alert open from onload event handler: open new window

      + +

      This is a test of an alert open from onunload event handler: open new page

      + +

      This is a test of an alert open from onclose event handler: open new window

      + +

      This is a test of an alert open from onclose event handler: open new window

      + +
      +
      +
      + +

      +

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/banner.gif b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/banner.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f3435401f878af30930bfb19ee1e340d823e706 GIT binary patch literal 2109 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 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html new file mode 100644 index 0000000..f2b1939 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html @@ -0,0 +1,41 @@ + + + + Testing Typing into body + + + + +

      Type Stuff

      + +
      +   +
      + +
      +   +
      + + + + +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html new file mode 100644 index 0000000..16fbbe9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html @@ -0,0 +1,19 @@ + + + Elements with boolean attributes + + +
      + + + + + +
      + + +
      + +
      Unwrappable text
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/child/childPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/child/childPage.html new file mode 100644 index 0000000..9192b54 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/child/childPage.html @@ -0,0 +1,8 @@ + + + Depth one child page + + +

      I'm a page in a child directory

      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html new file mode 100644 index 0000000..f52685e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html @@ -0,0 +1,8 @@ + + + Depth two child page + + +

      I'm a page in a grandchild directory! How cute!

      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/clickEventPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/clickEventPage.html new file mode 100644 index 0000000..8e0355d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/clickEventPage.html @@ -0,0 +1,26 @@ + + + + Testing click events + + + +
      + Click me to view my coordinates +
      + +
      +

       

      +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_frames.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_frames.html new file mode 100644 index 0000000..bd055c7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_frames.html @@ -0,0 +1,10 @@ + + + click frames + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_jacker.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_jacker.html new file mode 100644 index 0000000..0ff3900 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_jacker.html @@ -0,0 +1,38 @@ + + + + click-jacking + + + +
      +
      Click jacked!
      +
      Click Me
      + +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html new file mode 100644 index 0000000..8a51659 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html @@ -0,0 +1,23 @@ + + + + + + + + + + + +
      +
      +
      +
      +
      + +
      +
      +
      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html new file mode 100644 index 0000000..15ac17f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html @@ -0,0 +1,85 @@ + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      data
      click me
      +
      + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_rtl.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_rtl.html new file mode 100644 index 0000000..e84fffa --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_rtl.html @@ -0,0 +1,19 @@ + + +RTL test + + + +
      + +
      Ù…ÙØªØ§Ø­ معايير الويب
      + +
      פעילות הבינ×ו×
      + +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_source.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_source.html new file mode 100644 index 0000000..22e9319 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_source.html @@ -0,0 +1,18 @@ + + + Click Source + + + I go to a target + + + + + + Click Source + + + I go to a target + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html new file mode 100644 index 0000000..7b749bc --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html @@ -0,0 +1,6 @@ + + + click iframe + +Click me + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html new file mode 100644 index 0000000..60b1cca --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html @@ -0,0 +1,8 @@ + + + click in iframe + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html new file mode 100644 index 0000000..d6f4caf --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html @@ -0,0 +1 @@ +Continue \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html new file mode 100644 index 0000000..cbc16e8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html @@ -0,0 +1,10 @@ + + + + Target page for issue 5237 + + +

      Test passed

      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html new file mode 100644 index 0000000..0443436 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html @@ -0,0 +1,11 @@ + + + + Link that continues on next line + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html new file mode 100644 index 0000000..245f038 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html @@ -0,0 +1,9 @@ + + + + Target Page 1 + + +
      Target Page 1
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html new file mode 100644 index 0000000..6f9636c --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html @@ -0,0 +1,9 @@ + + + + Target Page 2 + + +
      Target Page 2
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html new file mode 100644 index 0000000..87a35f3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html @@ -0,0 +1,9 @@ + + + + Target Page 3 + + +
      Target Page 3
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html new file mode 100644 index 0000000..6cfa56a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html @@ -0,0 +1,70 @@ + + + + An element that disappears on click + + + +

      Hello

      +

      Hello

      +
      +
      +

      Log:

      +

      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html new file mode 100644 index 0000000..2af6252 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html @@ -0,0 +1,124 @@ + + + + An element that disappears on click + + + +

      Hello

      +

      Hello

      +
      +
      +
      +
      +
      +
      +

      Log:

      +

      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html new file mode 100644 index 0000000..77a9d6d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html @@ -0,0 +1,11 @@ + + + + Link that continues on next line + + +
      +
      placeholder
      Span that continues on next line +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html new file mode 100644 index 0000000..0ed2cba --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html @@ -0,0 +1,9 @@ + + + +Submitted Successfully! + + +

      Submitted Successfully!

      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html new file mode 100644 index 0000000..1c0c3d0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html @@ -0,0 +1,13 @@ + + + + A wrapped element with overlapped first part + + +
      +
      placeholder
      +
      Over
      + Link that continues on next line +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_too_big.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_too_big.html new file mode 100644 index 0000000..568ee77 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_too_big.html @@ -0,0 +1,10 @@ + + + + +
      +       +
      +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html new file mode 100644 index 0000000..cda990e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html @@ -0,0 +1,11 @@ + + + This page has iframes + + +

      This is the heading

      + + + + +
      +I'm a normal link +
      +I go to an anchor +
      +I open a window with javascript +
      +Click me +
      + +
      +I'm a green link +

      looooooooooong short looooooooooong +

      + +333333 +

      I have a span

      And another span

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/closeable_window.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/closeable_window.html new file mode 100644 index 0000000..e64c599 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/closeable_window.html @@ -0,0 +1,8 @@ + + +closeable window + + +This window can be closed by clicking on this. + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cn-test.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cn-test.html new file mode 100644 index 0000000..df846ad --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cn-test.html @@ -0,0 +1,156 @@ + + + + + + + + + + +
      +
      + + +

      Õ¹Íû2008ÊÀ½ç´óÊÆ£º·çÆðÔÆÓ¿ ¼¤µ´ÈËÐÄ


      +
      + 8ÔÂ8ÈÕÍí£¬±±¾©2008Äê°ÂÔ˻ᵹ¼ÆÊ±Ò»ÖÜÄêÇì×£»î¶¯ÔÚÌì°²ÃŹ㳡¾ÙÐС£Í¼ÎªÇì×£»î¶¯ÖеÄÎÄÒÕÑݳö¡£ лªÉç¼ÇÕßÁõÎÀ±øÉã + + £²£°£°£¸ÄêÊÀ½ç·çÆðÔÆÓ¿£¬¼¤µ´ÈËÐÄ¡£µ«Òª×÷³öÒ»¸öÔ¤²â£¬Ê×ÏÈÒª¶Ô½ñÌìËù´¦µÄÊÀ½çÓÐÒ»¸ö»ù±¾¹²Ê¶¡£
      +
      +ÖйúÖ®Éù
      +
      +
      + +
      + +
      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/colorPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/colorPage.html new file mode 100644 index 0000000..0d1bfc0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/colorPage.html @@ -0,0 +1,20 @@ + + + + Color Page + + +
      namedColor
      +
      rgb
      +
      rgbpct
      +
      hex
      +
      hex
      +
      hsl
      +
      rgba
      +
      rgba
      +
      hsla
      + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cookies.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cookies.html new file mode 100644 index 0000000..7db5b49 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cookies.html @@ -0,0 +1,30 @@ + + + Testing cookies + + + + +

      Cookie Mashing

      + .com Click
      + . Click
      + google.com Click
      + .google.com Click
      + 127.0.0.1 Click
      + localhost:3001 Click
      + .google:3001 Click
      + 172.16.12.225 Click
      + 172.16.12.225:port Click
      + Set on a different path + +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html new file mode 100644 index 0000000..7714a48 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html @@ -0,0 +1,9 @@ + + + + Welcome Page + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html new file mode 100644 index 0000000..b3143b0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html @@ -0,0 +1,9 @@ + + + + Welcome Page + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html new file mode 100644 index 0000000..6f2bcd4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html @@ -0,0 +1,11 @@ + + + + Page With Element Out Of View + + +
      Placeholder
      +
      Red box
      +
      Tex after box
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html new file mode 100644 index 0000000..b07972a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html @@ -0,0 +1,10 @@ + + + + Page With Empty Element + + +
      +
      Tex after box
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html new file mode 100644 index 0000000..6cbb273 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html @@ -0,0 +1,12 @@ + + + + Page With Fixed Element + + +
      fixed red box
      +
      Placeholder
      +
      Element at the bottom
      +
      Tex after box
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html new file mode 100644 index 0000000..286b04b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html @@ -0,0 +1,10 @@ + + + + Page With Hidden Element + + + +
      Tex after box
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html new file mode 100644 index 0000000..dc33c71 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html @@ -0,0 +1,10 @@ + + + + Page With Invisible Element + + + +
      Tex after box
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html new file mode 100644 index 0000000..d0090d9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html @@ -0,0 +1,10 @@ + + + + Page With Transparent Element + + +
      Hidden box
      +
      Tex after box
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html new file mode 100644 index 0000000..7b857b9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html @@ -0,0 +1,10 @@ + + + + Simple Page + + +
      Red box
      +
      Tex after box
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..954e22dbd99e8c6dd7091335599abf2d10bf8003 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEr#)R9Ln2z=UU%d=WFXS=@V?HT z#xG*`>Yvsgk=}99w^d^D^d*@m74oMo<%#FcopJf?u00-~YVKV2wzrI*_R6;UORMea zBFVSEnN~eiVA6V&z`E)YLz5Aok^D)In}Yn=OzDpgR5Wv0XfT8pOkmV{sKAJ-PO9#T zZK}IXj&Q-V!U)!LcB_3K0&C*{ literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..64ece5707d91a6edf9fad4bfcce0c4dbcafcf58d GIT binary patch literal 251 zcmVbvPcjKS|RKP(6sDcCAB(_QB%0978a<$Ah$!b|E zwn;|HO0i8cQj@~)s!ajF0S002ovPDHLkV1oEp BYH0uf literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..abdc01082bf3534eafecc5819d28c9574d44ea89 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQY-ImG zFPf9b{J;c_6SHRK%WcbN_hZpM=(Ry;4Rxv2@@2Y=$K57eF$X$=!PC{xWt~$(69B)$ BI)4BF literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f4d2eab09c0f2a739d6b232c32934bc620b GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour1U*q978O6-yYw{%b*}|_(02F z@qbE9)0CJMo;*v*PWv`Vh2h6EmG8IS-Cm{3U~` zFlmZ}YMcJY=eo?o%*@I?2`NblNeMudl#t?{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..39d5824d6af5456f1e89fc7847ea3599ea5fd815 GIT binary patch literal 3762 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..f1273672d253263b7564e9e21d69d7d9d0b337d9 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%l7LV~E7mxPQ=F85a&M@g_{ d|GeK{$Y5lo%PMu^>wln`44$rjF6*2UngE4^EGqy2 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..b273ff111d219c9b9a8b96d57683d0075fb7871a GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..a641a371afa0fbb08ba599dc7ddf14b9bfc3c84f GIT binary patch literal 4369 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 oBo%DI*Kv;w;*%(i9W@e{{5C=l}o! literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..85e63e9f604ce042d59eb06a8428eeb7cb7896c9 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..e117effa3dca24e7978cfc5f8b967f661e81044f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css new file mode 100644 index 0000000..1706e22 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css @@ -0,0 +1,573 @@ +/* + * jQuery UI CSS Framework 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Resizable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.10 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cssTransform.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cssTransform.html new file mode 100644 index 0000000..c3b9964 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cssTransform.html @@ -0,0 +1,61 @@ + + +
      +You shouldn't see anything other than this sentence on the page +
      +
      + I have a hidden child +
      + I am a hidden child +
      +
      +
      + I have a hidden child +
      + I am a hidden child +
      +
      +
      I am a hidden element
      +
      I am a hidden element
      diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cssTransform2.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cssTransform2.html new file mode 100644 index 0000000..602924b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/cssTransform2.html @@ -0,0 +1,20 @@ + + +
      +
      +
      +
      +
      +
      +
      I am not a hidden element
      diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html new file mode 100644 index 0000000..a15fc47 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html @@ -0,0 +1,13 @@ + + + Document Write In Onload + + + +

      hello world

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html new file mode 100644 index 0000000..0b2ee9a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html @@ -0,0 +1,67 @@ + + + + + + + +
      +
      +
      +
      +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html new file mode 100644 index 0000000..fdee16b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html @@ -0,0 +1,102 @@ + + + + + + + + +
      +
      +"Hi there +
      +
      +
      +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html new file mode 100644 index 0000000..ecb2562 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html @@ -0,0 +1,104 @@ + + + + + + +
      +
      +
      +
      +
      12am
      +
      1am
      +
      2am
      +
      3am
      +
      4am
      +
      5am
      +
      6am
      +
      7am
      +
      8am
      +
      9am
      +
      10am
      +
      11am
      +
      12pm
      +
      1pm
      +
      2pm
      +
      3pm
      +
      4pm
      +
      5pm
      +
      6pm
      +
      7pm
      +
      8pm
      +
      9pm
      +
      10pm
      +
      11pm
      +
      +
      +
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/draggableLists.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/draggableLists.html new file mode 100644 index 0000000..f7e0dca --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/draggableLists.html @@ -0,0 +1,67 @@ + + + + + jQuery UI Sortable - Connect lists + + + + + + + + + +
      +
        +
      • LeftItem 1
      • +
      • LeftItem 2
      • +
      • LeftItem 3
      • +
      • LeftItem 4
      • +
      • LeftItem 5
      • +
      + +
        +
      • RightItem 1
      • +
      • RightItem 2
      • +
      • RightItem 3
      • +
      • RightItem 4
      • +
      • RightItem 5
      • +
      + +
      + +
      +
      +

      Nothing happened.

      +
      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/droppableItems.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/droppableItems.html new file mode 100644 index 0000000..fc850ac --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/droppableItems.html @@ -0,0 +1,65 @@ + + + + + jQuery UI Droppable - Default Demo + + + + + + + +
      + +
      +

      Drag me to my target

      +
      + +
      +

      Drop here

      +
      + +
      +

      start

      +
      + +
      + +
      + +

      Taken from the JQuery demo.

      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dynamic.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dynamic.html new file mode 100644 index 0000000..b9e6067 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dynamic.html @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html new file mode 100644 index 0000000..ed7c7ed --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html @@ -0,0 +1,42 @@ + + + + Delayed remove of an element + + + + + +
      + +
      +

      element

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/errors.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/errors.html new file mode 100644 index 0000000..78fb902 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/errors.html @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/firefox/jetpack-sample.xpi b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/firefox/jetpack-sample.xpi new file mode 100644 index 0000000000000000000000000000000000000000..84d6493dd4f56572a488dc06cf841d9eb2b92d11 GIT binary patch literal 7289 zcmai31ymf%w#6a1yK5i;1`QJ2ZSdd_+Z-F(Ro9%gXVz{N1$YE}7#J877d67_^68YX?`5 zv7H^8ievL(tVb67 z6QwDlj{ED3!vn{fR_$qm);PDpt<%@Iy|8h~g(_FaFRhyJEjy*^Z>SM&w3(5Ylx!I~ zwbZfo$@IX}`spI^X0PE}XaylSDH8ws%l`J zOPEs8wcD=kO3|RivmUa4>>R0B@TxRzsX%M7js=c$N3YP!;~Gb*HAY+LqwNF1G?rrL zs;rP8q(2GaHww)U%O)cY#>K7sv^8_3%jI3>nJ&3Yh)Vi1 zH8^mzphp1zm=@q|Tb4&wRv200$dHw&w2w!O4mt2@#!m>Y)%vNzmG(V9l8fogb(B(X zeF3E>M7m^hu39HNiR@j56DRhZo=f@jB#TdV&~lbpnH6@W)sHYIGow{p-uC1-SOYbl zq$#d65aOP_i86d^O2|7!=LqJ4)9vqjhw;eQd%D|MEn|581>PH?f)>s~)z-wTKjs6Q z4|(29@BLW4UdEiSl;+akhI0r%#wCf38q-#<7gSuXbSUYZGNk&jlFcR_1C;B?#g@Ks zI<8=4msjZTwGgT@IvdOD^Osa1`8`=RxCpg$ac z1U;s6bnvGA=N+v8wVr`5>Mte=42PVvq~%4W(L4?eOa|Z&rir5?$Q9&b?DW9R(6x7+ zlTNs+FyeS+k7%YCq{h-Ppt{*S1M(^Dt_LOfEV4=w1$L;sMKq}-7R6ni^lvZnHUv
      #oosl2(WxjOP={cj3_b&vW4 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/firefox/sample.xpi b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/firefox/sample.xpi new file mode 100644 index 0000000000000000000000000000000000000000..062f9a1722450df325576503b0722dcdca842141 GIT binary patch literal 1551 zcmWIWW@Zs#U|`^2kSY*#Eoi*G+6lz$0pb~u38{RaY;OWhNCP@i2+4%}vecrS#7e!aVz^mY z{FB@7n9XD;(E9$b=uTB`(+%k_mxkRs)FuAk;f|!Q!a1FrD`KzwzvmgABW@*7!E=B1 z_aZ))nr(aul}@L8Ul2uS|q2=Xrb0qT(mM}rFiSK;2Z2kg^wpKS@k-!?5F#A^*!rZ z#V6+q@9Ozp<@P%&eE*X5xeSb@@A+bnNY;7IjpI5~c1CjYyhSQ|?afv%v$!`i(fWb> zq9wVKY})tTn_Bq=d)CVrng>3uWkv*27%-3=9oUa43~vk9FN% zZ@$9{JTBkoF#TjG+r7474y$XJ(_#M^W($|=cc01nGS4J=nzrlTr)mpRxczGmJes08 z*~R|Llt`U7d#{UMteiLFl>U(y8@KfG$({6m?l${@{k_0x z%elg<^Zx&@I``9gS6=1Ax~7mdBHH<8U-z08UYdS(^KDM2wR@Vcg*FvlHo2@eXIfEz zdZA3R{Q<{@CwlI$G)!_Q1_-}DqH;jDXL|e^jTMQ^_xlY#$jzxZQn*|HZo?^+)g|VQ z-rG~xhR5l;8YOTFdtF}SFo$be^CjlAfCrqn1zjsc4>UJ1v8?|2aB=?BN0T#Vw!3<6 zUw-lU?$ldzpDV6^mMI>^yQp01)un`qGg(%7d&VS7=TCE$*H&n}c=qDX*Q=X~B&uyA z_x2?14e0Jld+%~uswa7eb(yr*_XYB+S0zYpW#4;lkMzSlj!)8?mdgM7$&}jYA868F zB$8k2uz5n8Nn3@W-s1W8C*#bX`RwUc)Nh-jpS4}`R^P80yS?^?&u7_M-n-)?|9}4% z(MgZqy;nP@AK=Z%B*%=aRFME@YG8CRENKKWG0GTLNEw3`TM$EWl@Aa@85jf@-a2-J z4272#K+`~_1y<8=l@-WNJd0!+a>+s1T+Hl+Z0;vu2*6wkGZ&oMfChsy8y*K^rg>z8 gw*hkjN)7-Th$Zz0c(byBf}a%#mjc}q!UEy}0BE8O*Z=?k literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html new file mode 100644 index 0000000..ca65d1f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html @@ -0,0 +1,13 @@ + + + + Fixed footer with no scrollbar + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html new file mode 100644 index 0000000..2593bf3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html @@ -0,0 +1,12 @@ + + + Fixed footer with no scrollbar + + +
      +
      + Click me +
      +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/formPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/formPage.html new file mode 100644 index 0000000..7bcfea0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/formPage.html @@ -0,0 +1,174 @@ + + + We Leave From Here + + + + +There should be a form here: + +
      + + + +
      + +
      + +
      + +
      + Here's a checkbox: + + + + +
      + + + + + + + + + + + + + + + + + + + + +
      + + Cheese
      + Peas
      + Cheese and peas
      + Not a sausage
      + Not another sausage + + + +

      I like cheese

      + + + Cumberland sausage +
      + +
      + + + + + + + + +
      + +
      + + + + + + + +
      + +
      + + + + + + + +
      + + +
      +
      + +
      + +
      + + +
      +

      + + + +

      +
      + +
      + + + +
      +

      + +

      +
      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html new file mode 100644 index 0000000..4890c08 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html @@ -0,0 +1,46 @@ + + + + Testing Typing into body + + + + +

      Type Stuff

      + +
      +   +
      + +
      + +
      + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html new file mode 100644 index 0000000..3023143 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html @@ -0,0 +1,30 @@ + + + + + + Form with JS action + + +
      + +
      + +

      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framePage3.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framePage3.html new file mode 100644 index 0000000..3e62e45 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framePage3.html @@ -0,0 +1,7 @@ + + + inner + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html new file mode 100644 index 0000000..3eb3bf4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html @@ -0,0 +1,26 @@ + + + + Child frame + + +

      This is a scrolling frame test

      +
      + + + + + + + + + + + + + +
      First row
      Second row
      Third row
      Fourth row
      +
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html new file mode 100644 index 0000000..b7fb8f2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html @@ -0,0 +1,14 @@ + + + + Welcome Page + + +
      + +
      +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html new file mode 100644 index 0000000..8fccb6d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html new file mode 100644 index 0000000..1e0dc87 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html @@ -0,0 +1,11 @@ + + + This page has iframes + + +

      This is the heading

      + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html new file mode 100644 index 0000000..57d47d8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html @@ -0,0 +1,9 @@ + + + +
      + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html new file mode 100644 index 0000000..9c27e04 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html @@ -0,0 +1,29 @@ + + + Deleting frame: main page + + + + +
      + + +
      +
      + +
      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html new file mode 100644 index 0000000..e4b9723 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html @@ -0,0 +1,8 @@ + + + Deleting frame: iframe + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html new file mode 100644 index 0000000..47764eb --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html @@ -0,0 +1,7 @@ + + + Deleting frame: iframe 2 + + +
      Added back
      + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameset.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameset.html new file mode 100644 index 0000000..039c5f2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/frameset.html @@ -0,0 +1,14 @@ + + + Unique title + + + + + + + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framesetPage2.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framesetPage2.html new file mode 100644 index 0000000..4ea35ff --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framesetPage2.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framesetPage3.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framesetPage3.html new file mode 100644 index 0000000..42a9300 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/framesetPage3.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/globalscope.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/globalscope.html new file mode 100644 index 0000000..e4ca97a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/globalscope.html @@ -0,0 +1,15 @@ + + + + Global scope + + + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/hidden.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/hidden.html new file mode 100644 index 0000000..0e8097e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/hidden.html @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/blue.jpg b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/blue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ea27c42faa7b5e56c43d3db317d5e4ecf1cb613 GIT binary patch literal 92 zcmZ?wbhEHbG-5DfXkcJaWSGJLB!991Nd^WT5CM{5U@~s$UwQg1|Kd4YZgp?Ix92y1 s+ar%@&pMaAI<@T`_wi3Y*T3~X|8?&BKYkvr_9KfvcKB$ivocr%04xP0fB*mh literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/database.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/database.js new file mode 100644 index 0000000..c6333be --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/database.js @@ -0,0 +1,84 @@ +var database={}; +database.db={}; + +database.onError = function(tx, e) { + var log = document.createElement('div'); + log.setAttribute('name','error'); + log.setAttribute('style','background-color:red'); + log.innerText = e.message; + document.getElementById('logs').appendChild(log); +} + +database.onSuccess = function(tx, r) { + if (r.rows.length) { + var ol; + for (var i = 0; i < r.rows.length; i++) { + ol = document.createElement('ol'); + ol.innerHTML = r.rows.item(i).ID + ": " + r.rows.item(i).docname + " (" + r.rows.item(i).created + ")"; + document.getElementById('logs').appendChild(ol); + } + + } +} + +database.open=function(){ + database.db=openDatabase('HTML5', '1.0', 'Offline document storage', 100*1024); +} + +database.create=function(){ + database.db.transaction(function(tx) { + tx.executeSql("CREATE TABLE IF NOT EXISTS docs(ID INTEGER PRIMARY KEY ASC, docname TEXT, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP)", + [], + database.onSuccess, + database.onError); + });} + +database.add = function(message) { + database.db.transaction(function(tx){ + tx.executeSql("INSERT INTO docs(docname) VALUES (?)", + [message], database.onSuccess, database.onError); + }); +} + +database.selectAll = function() { + database.db.transaction(function(tx) { + tx.executeSql("SELECT * FROM docs", [], database.onSuccess, + database.onError); + }); +} + +database.onDeleteAllSuccess = function(tx, r) { + var doc = document.documentElement; + var db_completed = document.createElement("div"); + db_completed.setAttribute("id", "db_completed"); + db_completed.innerText = "db operation completed"; + doc.appendChild(db_completed); +} + +database.deleteAll = function() { + database.db.transaction(function(tx) { + tx.executeSql("delete from docs", [], database.onDeleteAllSuccess, + database.onError); + }); +} + +var log = document.createElement('div'); +log.setAttribute('name','notice'); +log.setAttribute('style','background-color:yellow'); +log.innerText = typeof window.openDatabase == "function" ? "Web Database is supported." : "Web Database is not supported."; +document.getElementById('logs').appendChild(log); + +try { + database.open(); + database.create(); + database.add('Doc 1'); + database.add('Doc 2'); + database.selectAll(); + database.deleteAll(); +} catch(error) { + var log = document.createElement('div'); + log.setAttribute('name','critical'); + log.setAttribute('style','background-color:pink'); + log.innerText = error; + document.getElementById('logs').appendChild(log); +} diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js new file mode 100644 index 0000000..f07af14 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js @@ -0,0 +1,18 @@ +function success(position) { + var message = document.getElementById("status"); + message.innerHTML =""; + message.innerHTML += "

      Longitude: " + position.coords.longitude + "

      "; + message.innerHTML += "

      Latitude: " + position.coords.latitude + "

      "; + message.innerHTML += "

      Altitude: " + position.coords.altitude + "

      "; +} + +function error(msg) { + var message = document.getElementById("status"); + message.innerHTML = "Failed to get geolocation."; +} + +if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(success, error); +} else { + error('Geolocation is not supported.'); +} \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/green.jpg b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/green.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a0d3bea4793a5fe3a3a36e29ba174540540513d GIT binary patch literal 92 zcmZ?wbhEHbG-5DfXkcJqT;s&Rz@Ye(1xPY5=zs{23bCU^SwR4 t`P&|OOncV3?A57l@3@bD^11%4_xZ1L-~aLRaJ3&<^s&Q7OP!U$8UQ`xB)R|q literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/red.jpg b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/red.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f296e271956d5d4e0939b9706e86b2c2bc0d65b7 GIT binary patch literal 92 zcmZ?wbhEHbG-5DfXkcLY$H2kBz@Ye(1xPY5=zs{23bCU^SwR4 t`P&|OOncV3?A57l@3@bD^11%4_xZ1L-~aLRaJ3&<^s&Q7OP!U$8URKdB+&o> literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/status.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/status.html new file mode 100644 index 0000000..394116a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/status.html @@ -0,0 +1 @@ +Online diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/test.appcache b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/test.appcache new file mode 100644 index 0000000..3bc4e00 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/test.appcache @@ -0,0 +1,11 @@ +CACHE MANIFEST + +CACHE: +# Additional items to cache. +yellow.jpg +red.jpg +blue.jpg +green.jpg + +FALLBACK: +status.html offline.html diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/yellow.jpg b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/html5/yellow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c609b371291aeb672feb6bc24497d5f64d20288 GIT binary patch literal 92 zcmZ?wbhEHbG-5DfXkcLYcZ>lD6o0aSC0GH&T#dHOB?;yGJxb#K16=Qn@b rBadm%I+wjVwe21E@lQV2zx6) + +HTML5 + + + +

      Geolocation Test

      +
      Location unknown
      + + +

      Web SQL Database Test

      +
      + + +

      Application Cache Test

      +
      +

      Current network status:

      + + + + + +
      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/icon.gif b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb994619275674a361f092333cbfa122209d6546 GIT binary patch literal 127 zcmZ?wbh9u|6k-r!Si}GX|AAob+W$d8|1~xLfB*iUgX2F?R0kvlQp3RPBO#^gd~AZ^ zsa&ybSCl~e@% literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html new file mode 100644 index 0000000..a686ba3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html @@ -0,0 +1,15 @@ + + + This page has iframes + + +

      This is the heading

      + +
      + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframes.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframes.html new file mode 100644 index 0000000..e00b482 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/iframes.html @@ -0,0 +1,11 @@ + + + This page has iframes + + +

      This is the heading

      + +':"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
      ', +o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&& +l)?" ":""));a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";if(d.browser.mozilla)k+='";else{k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
      ";return k},_adjustInstDate:function(a,b,c){var e= +a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a, +"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); +c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, +"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= +function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker, +[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.10";window["DP_jQuery_"+y]=d})(jQuery); +;/* + * jQuery UI Progressbar 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
      ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* +this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.10"})})(jQuery); +;/* + * jQuery UI Effects 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, +a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= +a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", +"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, +0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, +211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, +d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0]; +h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c, +a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.10",save:function(c,a){for(var b=0;b
      ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent", +border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c); +return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments); +else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c), +b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c, +a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c, +a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a== +e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h
      ").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ +e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +;/* + * jQuery UI Effects Fade 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Fold 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], +10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Highlight 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Pulsate 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c

      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�n(z( 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

      ').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); +b.dequeue()})})}})(jQuery); +; \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css new file mode 100644 index 0000000..9f194f6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css @@ -0,0 +1 @@ +.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0px}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css new file mode 100644 index 0000000..ea08c68 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css @@ -0,0 +1 @@ +body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0px}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md new file mode 100644 index 0000000..fa5d639 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md @@ -0,0 +1 @@ +Icons are generated and provided by the http://icomoon.io service. diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg new file mode 100644 index 0000000..578b869 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg @@ -0,0 +1,175 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot new file mode 100644 index 0000000000000000000000000000000000000000..60e2d2e5c747caf9d41310976af96c75c696b448 GIT binary patch literal 10316 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..afc6ec458b5c032f104c12318ff721d31d9dab8e GIT binary patch literal 10128 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 Kf?+iKUjGk9se#1+ literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff new file mode 100644 index 0000000000000000000000000000000000000000..fa72c74b45ba3725a6ff7d8d0901c538467c64e2 GIT binary patch literal 7848 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 U(RlV0x|+w9A&8D)G}nFp2i)urJpcdz literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg new file mode 100644 index 0000000..c87b8cd --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg @@ -0,0 +1,153 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.eot b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..c1085bfd295abcf940871c863165656df8b094c2 GIT binary patch literal 10024 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg new file mode 100644 index 0000000..feb9ba3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg @@ -0,0 +1,63 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..58103c2b6287fa209bf1e62c7ea107fd65a351f1 GIT binary patch literal 9860 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 J6}@lx{2vuDq_zM6 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.woff b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.woff new file mode 100644 index 0000000000000000000000000000000000000000..ad1ae396a88239278653cf63ac3630b6b8360102 GIT binary patch literal 7664 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 ZAIBpz*gbe?5xy=K8ILnYh3xXz{{ll7??M0o literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/anchor.gif b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..606348c7f53dba169a9aca7279a2a973f4b07bdb GIT binary patch literal 53 zcmZ?wbhEHbWM^P!XkcUjg8%>jEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/loader.gif b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/object.gif b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css new file mode 100644 index 0000000..284ac1d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:focus{border-color:#a1a1a1}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js new file mode 100644 index 0000000..e25849d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js @@ -0,0 +1 @@ +tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}var i=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||u.toolbar===!1||t(u.toolbar||f),i.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:i}:void 0}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;lr;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var a=this,s={},l,c,u,d,f;c=o+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,a.domLoaded=!1,a.events=s,a.bind=function(t,o,p,h){function m(e){i(n(e||_.event),g)}var g,v,y,b,C,x,w,_=window;if(t&&3!==t.nodeType&&8!==t.nodeType){for(t[c]?g=t[c]:(g=l++,t[c]=g,s[g]={}),h=h||t,o=o.split(" "),y=o.length;y--;)b=o[y],x=m,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),a.domLoaded&&"ready"===b&&"complete"==t.readyState?p.call(h,n({type:b})):(d||(C=f[b],C&&(x=function(e){var t,r;if(t=e.currentTarget,r=e.relatedTarget,r&&t.contains)r=t.contains(r);else for(;r&&r!==t;)r=r.parentNode;r||(e=n(e||_.event),e.type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,i(e,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(e){e=n(e||_.event),e.type="focus"===e.type?"focusin":"focusout",i(e,g)}),v=s[g][b],v?"ready"===b&&a.domLoaded?p({type:b}):v.push({func:p,scope:h}):(s[g][b]=v=[{func:p,scope:h}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?r(t,x,a):e(t,C||b,x,w)));return t=v=0,p}},a.unbind=function(e,n,r){var i,o,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return a;if(i=e[c]){if(f=s[i],n){for(n=n.split(" "),l=n.length;l--;)if(d=n[l],o=f[d]){if(r)for(u=o.length;u--;)if(o[u].func===r){var p=o.nativeHandler,h=o.fakeName,m=o.capture;o=o.slice(0,u).concat(o.slice(u+1)),o.nativeHandler=p,o.fakeName=h,o.capture=m,f[d]=o}r&&0!==o.length||(delete f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture))}}else{for(d in f)o=f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture);f={}}for(d in f)return a;delete s[i];try{delete e[c]}catch(g){e[c]=null}}return a},a.fire=function(e,t,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return a;r=n(null,r),r.type=t,r.target=e;do o=e[c],o&&i(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow;while(e&&!r.isPropagationStopped());return a},a.clean=function(e){var t,n,r=a.unbind;if(!e||3===e.nodeType||8===e.nodeType)return a;if(e[c]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return a},a.destroy=function(){s={}},a.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var o="mce-data-",a=/^(?:mouse|contextmenu)|click/,s={keyLocation:1,layerX:1,layerY:1,returnValue:1};return i.Event=new i,i.Event.bind(window,"ready",function(){}),i}),r(c,[],function(){function e(e){return mt.test(e+"")}function n(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>_.cacheLength&&delete e[t.shift()],e[n]=r,r}}function r(e){return e[I]=!0,e}function i(e){var t=B.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t=null}}function o(e,t,n,r){var i,o,a,s,l,c,f,p,h,m;if((t?t.ownerDocument||t:F)!==B&&A(t),t=t||B,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(L&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&z.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(z.qsa&&!M.test(e)){if(f=!0,p=I,h=t,m=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=u(e),(f=t.getAttribute("id"))?p=f.replace(bt,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+d(c[l]);h=ht.test(e)&&t.parentNode||t,m=c.join(",")}if(m)try{return Z.apply(n,h.querySelectorAll(m)),n}catch(g){}finally{f||t.removeAttribute("id")}}}return b(e.replace(lt,"$1"),t,n,r)}function a(e,t){var n=t&&e,r=n&&(~t.sourceIndex||Y)-(~e.sourceIndex||Y);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e,t){var n,r,i,a,s,l,c,u=q[e+" "];if(u)return t?0:u.slice(0);for(s=e,l=[],c=_.preFilter;s;){(!n||(r=ct.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=ut.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(lt," ")}),s=s.slice(n.length));for(a in _.filter)!(r=pt[a].exec(s))||c[a]&&!(r=c[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?o.error(e):q(e,l).slice(0)}function d(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function f(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=V++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c,u=W+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(c=t[I]||(t[I]={}),(l=c[r])&&l[0]===u){if((s=l[1])===!0||s===w)return s===!0}else if(l=c[r]=[u],l[1]=e(t,n,a)||w,l[1]===!0)return!0}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function h(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),c&&t.push(s));return a}function m(e,t,n,i,o,a){return i&&!i[I]&&(i=m(i)),o&&!o[I]&&(o=m(o,a)),r(function(r,a,s,l){var c,u,d,f=[],p=[],m=a.length,g=r||y(t||"*",s.nodeType?[s]:s,[]),v=!e||!r&&t?g:h(g,f,e,s,l),b=n?o||(r?e:m||i)?[]:a:v;if(n&&n(v,b,s,l),i)for(c=h(b,p),i(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(v[p[u]]=d));if(r){if(o||e){if(o){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(v[u]=d);o(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=o?tt.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=h(b===a?b.splice(m,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function g(e){for(var t,n,r,i=e.length,o=_.relative[e[0].type],a=o||_.relative[" "],s=o?1:0,l=f(function(e){return e===t},a,!0),c=f(function(e){return tt.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==k)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=_.relative[e[s].type])u=[f(p(u),n)];else{if(n=_.filter[e[s].type].apply(null,e[s].matches),n[I]){for(r=++s;i>r&&!_.relative[e[r].type];r++);return m(s>1&&p(u),s>1&&d(e.slice(0,s-1)).replace(lt,"$1"),n,r>s&&g(e.slice(s,r)),i>r&&g(e=e.slice(r)),i>r&&d(e))}u.push(n)}return p(u)}function v(e,t){var n=0,i=t.length>0,a=e.length>0,s=function(r,s,l,c,u){var d,f,p,m=[],g=0,v="0",y=r&&[],b=null!=u,C=k,x=r||a&&_.find.TAG("*",u&&s.parentNode||s),N=W+=null==C?1:Math.random()||.1;for(b&&(k=s!==B&&s,w=n);null!=(d=x[v]);v++){if(a&&d){for(f=0;p=e[f++];)if(p(d,s,l)){c.push(d);break}b&&(W=N,w=++n)}i&&((d=!p&&d)&&g--,r&&y.push(d))}if(g+=v,i&&v!==g){for(f=0;p=t[f++];)p(y,m,s,l);if(r){if(g>0)for(;v--;)y[v]||m[v]||(m[v]=J.call(c));m=h(m)}Z.apply(c,m),b&&!r&&m.length>0&&g+t.length>1&&o.uniqueSort(c)}return b&&(W=N,k=C),y};return i?r(s):s}function y(e,t,n){for(var r=0,i=t.length;i>r;r++)o(e,t[r],n);return n}function b(e,t,n,r){var i,o,a,s,l,c=u(e);if(!r&&1===c.length){if(o=c[0]=c[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&L&&_.relative[o[1].type]){if(t=(_.find.ID(a.matches[0].replace(xt,wt),t)||[])[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?0:o.length;i--&&(a=o[i],!_.relative[s=a.type]);)if((l=_.find[s])&&(r=l(a.matches[0].replace(xt,wt),ht.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Z.apply(n,r),n;break}}return S(e,c)(r,t,!L,n,ht.test(e)),n}function C(){}var x,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O,I="sizzle"+-new Date,F=window.document,z={},W=0,V=0,U=n(),q=n(),$=n(),j=!1,K=function(){return 0},G=typeof t,Y=1<<31,X=[],J=X.pop,Q=X.push,Z=X.push,et=X.slice,tt=X.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},nt="[\\x20\\t\\r\\n\\f]",rt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",it=rt.replace("w","w#"),ot="([*^$|!~]?=)",at="\\["+nt+"*("+rt+")"+nt+"*(?:"+ot+nt+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+it+")|)|)"+nt+"*\\]",st=":("+rt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+at.replace(3,8)+")*)|.*)\\)|)",lt=new RegExp("^"+nt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+nt+"+$","g"),ct=new RegExp("^"+nt+"*,"+nt+"*"),ut=new RegExp("^"+nt+"*([\\x20\\t\\r\\n\\f>+~])"+nt+"*"),dt=new RegExp(st),ft=new RegExp("^"+it+"$"),pt={ID:new RegExp("^#("+rt+")"),CLASS:new RegExp("^\\.("+rt+")"),NAME:new RegExp("^\\[name=['\"]?("+rt+")['\"]?\\]"),TAG:new RegExp("^("+rt.replace("w","w*")+")"),ATTR:new RegExp("^"+at),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},ht=/[\x20\t\r\n\f]*[+~]/,mt=/^[^{]+\{\s*\[native code/,gt=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,vt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,bt=/'|\\/g,Ct=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,wt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)};try{Z.apply(X=et.call(F.childNodes),F.childNodes),X[F.childNodes.length].nodeType}catch(_t){Z={apply:X.length?function(e,t){Q.apply(e,et.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}E=o.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},A=o.setDocument=function(n){var r=n?n.ownerDocument||n:F;return r!==B&&9===r.nodeType&&r.documentElement?(B=r,D=r.documentElement,L=!E(r),z.getElementsByTagName=i(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),z.attributes=i(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),z.getElementsByClassName=i(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),z.getByName=i(function(e){e.id=I+0,e.appendChild(B.createElement("a")).setAttribute("name",I),e.appendChild(B.createElement("i")).setAttribute("name",I),D.appendChild(e);var t=r.getElementsByName&&r.getElementsByName(I).length===2+r.getElementsByName(I+0).length;return D.removeChild(e),t}),z.sortDetached=i(function(e){return e.compareDocumentPosition&&1&e.compareDocumentPosition(B.createElement("div"))}),_.attrHandle=i(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==G&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},z.getByName?(_.find.ID=function(e,t){if(typeof t.getElementById!==G&&L){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){return e.getAttribute("id")===t}}):(_.find.ID=function(e,n){if(typeof n.getElementById!==G&&L){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==G&&r.getAttributeNode("id").value===e?[r]:t:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){var n=typeof e.getAttributeNode!==G&&e.getAttributeNode("id");return n&&n.value===t}}),_.find.TAG=z.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==G?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},_.find.NAME=z.getByName&&function(e,t){return typeof t.getElementsByName!==G?t.getElementsByName(name):void 0},_.find.CLASS=z.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==G&&L?t.getElementsByClassName(e):void 0},H=[],M=[":focus"],(z.qsa=e(r.querySelectorAll))&&(i(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||M.push("\\["+nt+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||M.push(":checked")}),i(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&M.push("[*^$]="+nt+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||M.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),M.push(",.*:")})),(z.matchesSelector=e(P=D.matchesSelector||D.mozMatchesSelector||D.webkitMatchesSelector||D.oMatchesSelector||D.msMatchesSelector))&&i(function(e){z.disconnectedMatch=P.call(e,"div"),P.call(e,"[s!='']:x"),H.push("!=",st)}),M=new RegExp(M.join("|")),H=H.length&&new RegExp(H.join("|")),O=e(D.contains)||D.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=D.compareDocumentPosition?function(e,t){if(e===t)return j=!0,0;var n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return n?1&n||T&&t.compareDocumentPosition(e)===n?e===r||O(F,e)?-1:t===r||O(F,t)?1:R?tt.call(R,e)-tt.call(R,t):0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(e===t)return j=!0,0;if(!o||!s)return e===r?-1:t===r?1:o?-1:s?1:0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===F?-1:c[i]===F?1:0},B):B},o.matches=function(e,t){return o(e,null,null,t)},o.matchesSelector=function(e,t){if((e.ownerDocument||e)!==B&&A(e),t=t.replace(Ct,"='$1']"),z.matchesSelector&&L&&(!H||!H.test(t))&&!M.test(t))try{var n=P.call(e,t);if(n||z.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return o(t,B,null,[e]).length>0},o.contains=function(e,t){return(e.ownerDocument||e)!==B&&A(e),O(e,t)},o.attr=function(e,t){var n;return(e.ownerDocument||e)!==B&&A(e),L&&(t=t.toLowerCase()),(n=_.attrHandle[t])?n(e):!L||z.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},o.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},o.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!z.detectDuplicates,T=!z.sortDetached,R=!z.sortStable&&e.slice(0),e.sort(K),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return e},N=o.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=N(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=N(t);return n},_=o.selectors={cacheLength:50,createPseudo:r,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,wt),e[3]=(e[4]||e[5]||"").replace(xt,wt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||o.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&o.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&dt.test(n)&&(t=u(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,wt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+nt+")"+e+"("+nt+"|$)"))&&U(e,function(e){return t.test(e.className||typeof e.getAttribute!==G&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=o.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(u=g[I]||(g[I]={}),c=u[e]||[],p=c[0]===W&&c[1],f=c[0]===W&&c[2],d=p&&g.childNodes[p];d=++p&&d&&d[m]||(f=p=0)||h.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[W,p,f];break}}else if(y&&(c=(t[I]||(t[I]={}))[e])&&c[0]===W)f=c[1];else for(;(d=++p&&d&&d[m]||(f=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[I]||(d[I]={}))[e]=[W,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(e,t){var n,i=_.pseudos[e]||_.setFilters[e.toLowerCase()]||o.error("unsupported pseudo: "+e);return i[I]?i(t):i.length>1?(n=[e,e,"",t],_.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,n){for(var r,o=i(e,t),a=o.length;a--;)r=tt.call(e,o[a]),e[r]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(lt,"$1"));return i[I]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(e){return function(t){return o(e,t).length>0}}),contains:r(function(e){return function(t){return(t.textContent||t.innerText||N(t)).indexOf(e)>-1}}),lang:r(function(e){return ft.test(e||"")||o.error("unsupported lang: "+e),e=e.replace(xt,wt).toLowerCase(),function(t){var n;do if(n=L?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===D},focus:function(e){return e===B.activeElement&&(!B.hasFocus||B.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!_.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return vt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++rn;n++)t[n]=e[n];return t}function f(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1}function p(e){return null===e||e===t?"":(""+e).replace(N,"")}function h(e,t){var n,r,i,o,a;if(e)if(n=e.length,n===o){for(r in e)if(e.hasOwnProperty(r)&&(a=e[r],t.call(a,a,r)===!1))break}else for(i=0;n>i&&(a=e[i],t.call(a,a,r)!==!1);i++);return e}function m(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!c(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i}function g(e,t,n,r){for(var i=[];e;e=e[n])r&&e.nodeType!==r||e===t||i.push(e);return i}var v=document,y=Array.prototype.push,b=Array.prototype.slice,C=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,x=e.Event,w=l("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"),_=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},N=/^\s*|\s*$/g;return c.fn=c.prototype={constructor:c,selector:"",length:0,init:function(e,t){var n=this,r,a;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(i(e)){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:C.exec(e),!r)return c(t||document).find(e);if(r[1])for(a=o(e).firstChild;a;)this.add(a),a=a.nextSibling;else{if(a=v.getElementById(r[2]),a.id!==r[2])return n.find(e);n.length=1,n[0]=a}}else this.add(e);return n},toArray:function(){return d(this)},add:function(e){var t=this;return _(e)?y.apply(t,e):e instanceof c?t.add(e.toArray()):y.call(t,e),t},attr:function(e,n){var i=this;if("object"==typeof e)h(e,function(e,t){i.attr(t,e)});else{if(!r(n))return i[0]&&1===i[0].nodeType?i[0].getAttribute(e):t;this.each(function(){1===this.nodeType&&this.setAttribute(e,n)})}return i},css:function(e,n){var i=this;if("object"==typeof e)h(e,function(e,t){i.css(t,e)});else{if(e=e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),!r(n))return i[0]?i[0].style[e]:t;"number"!=typeof n||w[e]||(n+="px"),i.each(function(){var t=this.style;"opacity"===e&&this.runtimeStyle&&"undefined"==typeof this.runtimeStyle.opacity&&(t.filter=""===n?"":"alpha(opacity="+100*n+")");try{t[e]=n}catch(r){}})}return i},remove:function(){for(var e=this,t,n=this.length;n--;)t=e[n],x.clean(t),t.parentNode&&t.parentNode.removeChild(t);return this},empty:function(){for(var e=this,t,n=this.length;n--;)for(t=e[n];t.firstChild;)t.removeChild(t.firstChild);return this},html:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerHTML=e;return t}return t[0]?t[0].innerHTML:""},text:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerText=t[0].textContent=e;return t}return t[0]?t[0].innerText||t[0].textContent:""},append:function(){return a(this,arguments,function(e){1===this.nodeType&&this.appendChild(e)})},prepend:function(){return a(this,arguments,function(e){1===this.nodeType&&this.insertBefore(e,this.firstChild)})},before:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)}):e},after:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this)}):e},appendTo:function(e){return c(e).append(this),this},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return-1!==e.indexOf(" ")?h(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(n){var r;s(n,e)!==t&&(r=n.className,t?n.className+=r?" "+e:e:n.className=p((" "+r+" ").replace(" "+e+" "," ")))}),n},hasClass:function(e){return s(this[0],e)},each:function(e){return h(this,e)},on:function(e,t){return this.each(function(){x.bind(this,e,t)})},off:function(e,t){return this.each(function(){x.unbind(this,e,t)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new c(b.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},replaceWith:function(e){var t=this;return t[0]&&t[0].parentNode.replaceChild(c(e)[0],t[0]),t},wrap:function(e){return e=c(e)[0],this.each(function(){var t=this,n=e.cloneNode(!1);t.parentNode.insertBefore(n,t),n.appendChild(t)})},unwrap:function(){return this.each(function(){for(var e=this,t=e.firstChild,n;t;)n=t,t=t.nextSibling,e.parentNode.insertBefore(n,e)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),c(e)},find:function(e){var t,n,r=[];for(t=0,n=this.length;n>t;t++)c.find(e,this[t],r);return c(r)},push:y,sort:[].sort,splice:[].splice},u(c,{extend:u,toArray:d,inArray:f,isArray:_,each:h,trim:p,makeMap:l,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,isXMLDoc:n.isXML,contains:n.contains,filter:function(e,t,n){return n&&(e=":not("+e+")"),t=1===t.length?c.find.matchesSelector(t[0],e)?[t[0]]:[]:c.find.matches(e,t)}}),h({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return m(e,"parentNode")},parentsUntil:function(e,t){return m(e,"parentNode",t)},next:function(e){return g(e,"nextSibling",1)},prev:function(e){return g(e,"previousSibling",1)},nextNodes:function(e){return g(e,"nextSibling")},prevNodes:function(e){return g(e,"previousSibling")},children:function(e){return g(e.firstChild,"nextSibling",1)},contents:function(e){return d(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){c.fn[e]=function(n){var r=this,i;if(r.length>1)throw new Error("DomQuery only supports traverse functions on a single node.");return r[0]&&(i=t(r[0],n)),i=c(i),n&&"parentsUntil"!==e?i.filter(n):i}}),c.fn.filter=function(e){return c.filter(e)},c.fn.is=function(e){return!!e&&this.filter(e).length>0},c.fn.init.prototype=c.fn,c}),r(d,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e +}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d="\ufeff";for(e=e||{},u=("\\\" \\' \\; \\: ; : "+d).split(" "),l=0;l-1&&n||(m[e+t]=-1==l?s[0]:s.join(" "),delete m[e+"-top"+t],delete m[e+"-right"+t],delete m[e+"-bottom"+t],delete m[e+"-left"+t])}}function u(e){var t=m[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return m[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(m[e]=m[t]+" "+m[n]+" "+m[r],delete m[t],delete m[n],delete m[r])}function f(e){return b=!0,c[e]}function p(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function h(t,n,r,i,o,a){if(o=o||a)return o=p(o),"'"+o.replace(/\'/g,"\\'")+"'";if(n=p(n||r||i),!e.allow_script_urls){var s=n.replace(/[\s\r\n]+/,"");if(/(java|vb)script:/i.test(s))return"";if(!e.allow_svg_data_urls&&/^data:image\/svg/i.test(s))return""}return C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"}var m={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),y=y.replace(/\\[0-9a-f]+/g,function(e){return String.fromCharCode(parseInt(e.substr(1),16))}),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(|\/\*|\*\//.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":("color"===v||"background-color"===v)&&(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,h),m[v]=b?p(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),d("border","border-width","border-style","border-color"),"medium none"===m.border&&delete m.border,"none"===m["border-image"]&&delete m["border-image"]}return m},serialize:function(e,n){function r(n){var r,o,a,l;if(r=t.styles[n])for(o=0,a=r.length;a>o;o++)n=r[o],l=e[n],l!==s&&l.length>0&&(i+=(i.length>0?" ":"")+n+": "+l+";")}var i="",o,a;if(n&&t&&t.styles)r("*"),r(n);else for(o in e)a=e[o],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(f,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(p,[],function(){function e(e){return null===e||e===t?"":(""+e).replace(m,"")}function n(e,n){return n?"array"==n&&g(e)?!0:typeof e==n:e!==t}function r(e){var t=[],n,r;for(n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function i(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function o(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function a(e,t){var n=[];return o(e,function(e){n.push(t(e))}),n}function s(e,t){var n=[];return o(e,function(e){(!t||t(e))&&n.push(e)}),n}function l(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],o[a]=c?function(){return i[s].apply(this,arguments)}:function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function c(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function u(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function d(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),o(e,function(e,i){return t.call(r,e,i,n)===!1?!1:void d(e,t,n,r)}))}function f(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;nn&&(t=t[e[n]],t);n++);return t}function h(t,r){return!t||n(t,"array")?t:a(t.split(r||","),e)}var m=/^\s*|\s*$/g,g=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{trim:e,isArray:g,is:n,toArray:r,makeMap:i,each:o,map:a,grep:s,inArray:c,extend:u,create:l,walk:d,createNS:f,resolve:p,explode:h}}),r(h,[p],function(e){function t(n){function r(){return H.createDocumentFragment()}function i(e,t){_(F,e,t)}function o(e,t){_(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[U]=M[V],M[q]=M[W]):(M[V]=M[U],M[W]=M[q]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function p(e,t){var n=M[V],r=M[W],i=M[U],o=M[q],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function h(){N(I)}function m(){return N(P)}function g(){return N(O)}function v(e){var t=this[V],r=this[W],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return $(new t(n),{startContainer:M[V],startOffset:M[W],endContainer:M[U],endOffset:M[q],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[V]==M[U]&&M[W]==M[q]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function _(e,t,r){var i,o;for(e?(M[V]=t,M[W]=r):(M[U]=t,M[q]=r),i=M[U];i.parentNode;)i=i.parentNode;for(o=M[V];o.parentNode;)o=o.parentNode;o==i?w(M[V],M[W],M[U],M[q])>0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[V],M[U])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[V]==M[U])return E(e);for(t=M[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return S(t,e);++n}for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[U])return k(t,e);++r}for(o=r-n,a=M[V];o>0;)a=a.parentNode,o--;for(s=M[U];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function E(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[W]==M[q])return t;if(3==M[V].nodeType){if(n=M[V].nodeValue,i=n.substring(M[W],M[q]),e!=O&&(o=M[V],c=M[W],u=M[q]-M[W],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(H.createTextNode(i)),t}for(o=C(M[V],M[W]),a=M[q]-M[W];o&&a>0;)s=o.nextSibling,l=D(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[W],0>=a)return t!=O&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=D(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[q]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=D(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=D(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=O&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[U],M[q]-1),r,i,o,a,s,l=n!=M[U];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[V],M[W]),r=n!=M[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return D(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[W],a=o.substring(l),s=o.substring(0,l)):(l=M[q],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function D(e,t){return t!=I?t==O?n.clone(e,F):e:void e.parentNode.removeChild(e)}function L(){return n.create("body",null,g()).outerText}var M=this,H=n.doc,P=0,O=1,I=2,F=!0,z=!1,W="startOffset",V="startContainer",U="endContainer",q="endOffset",$=e.extend,j=n.nodeIndex;return $(M,{startContainer:H,startOffset:0,endContainer:H,endOffset:0,collapsed:F,commonAncestorContainer:H,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:p,deleteContents:h,extractContents:m,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:L}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(m,[p],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&(#x|#)?([\w]+);/g,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n,r){return n?(r=parseInt(r,2===n.length?16:10),r>65535?(r-=65536,String.fromCharCode(55296+(r>>10),56320+(1023&r))):d[r]||String.fromCharCode(r)):a[e]||i[e]||t(e)})}};return f}),r(g,[],function(){var e=navigator,t=e.userAgent,n,r,i,o,a,s,l;n=window.opera&&window.opera.buildNumber,r=/WebKit/.test(t),i=!r&&!n&&/MSIE/gi.test(t)&&/Explorer/gi.test(e.appName),i=i&&/MSIE (\w+)\./.exec(t)[1],o=-1==t.indexOf("Trident/")||-1==t.indexOf("rv:")&&-1==e.appName.indexOf("Netscape")?!1:11,i=i||o,a=!r&&!o&&/Gecko/.test(t),s=-1!=t.indexOf("Mac"),l=/(iPad|iPhone)/.test(t);var c=!l||t.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:n,webkit:r,ie:i,gecko:a,mac:s,iOS:l,contentEditable:c,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=i,range:window.getSelection&&"Range"in window,documentMode:i?document.documentMode||7:10}}),r(v,[],function(){return function(e,t){function n(t){e.getElementsByTagName("head")[0].appendChild(t)}function r(t,r,s){function l(){for(var e=v.passed,t=e.length;t--;)e[t]();v.status=2,v.passed=[],v.failed=[]}function c(){for(var e=v.failed,t=e.length;t--;)e[t]();v.status=3,v.passed=[],v.failed=[]}function u(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function d(e,t){e()||((new Date).getTime()-g0)return m=e.createElement("style"),m.textContent='@import "'+t+'"',p(),void n(m);f()}n(h),h.href=t}}var i=0,o={},a;t=t||{},a=t.maxLoadTime||5e3,this.load=r}}),r(y,[c,d,l,f,h,m,g,p,v],function(e,n,r,i,o,a,s,l,c){function u(e,t){var i=this,o;i.doc=e,i.win=window,i.files={},i.counter=0,i.stdMode=!v||e.documentMode>=8,i.boxModel=!v||"CSS1Compat"==e.compatMode||i.stdMode,i.hasOuterHTML="outerHTML"in e.createElement("a"),i.styleSheetLoader=new c(e),this.boundEvents=[],i.settings=t=m({keep_values:!1,hex_colors:1},t),i.schema=t.schema,i.styles=new n({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),i.fixDoc(e),i.events=t.ownEvents?new r(t.proxy):r.Event,o=t.schema?t.schema.getBlockElements():{},i.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!o[e.nodeName]):!!o[e]}}var d=l.each,f=l.is,p=l.grep,h=l.trim,m=l.extend,g=s.webkit,v=s.ie,y=/^([a-z0-9],?)+$/i,b=/^[ \t\r\n]*$/,C=l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," ");return u.prototype={root:null,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},fixDoc:function(e){var t=this.settings,n;if(v&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!v||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.get(e.settings.root_element)||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),f(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.get(r.settings.root_element)||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(y.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=f(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return this.run(e,function(e){var n,r=e.parentNode;if(!r)return null;if(t)for(;n=e.firstChild;)!v||3!==n.nodeType||n.nodeValue?r.insertBefore(n,e):e.removeChild(n);return r.removeChild(e)})},setStyle:function(e,t,n){return this.run(e,function(e){var r=this,i,o;if(t)if("string"==typeof t){i=e.style,t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"number"!=typeof n||C[t]||(n+="px"),"opacity"===t&&e.runtimeStyle&&"undefined"==typeof e.runtimeStyle.opacity&&(i.filter=""===n?"":"alpha(opacity="+100*n+")"),"float"==t&&(t="cssFloat"in e.style?"cssFloat":"styleFloat");try{i[t]=n}catch(a){}r.settings.update_styles&&e.removeAttribute("data-mce-style")}else for(o in t)r.setStyle(e,o,t[o])})},getStyle:function(e,n,r){if(e=this.get(e)){if(this.doc.defaultView&&r){n=n.replace(/[A-Z]/g,function(e){return"-"+e});try{return this.doc.defaultView.getComputedStyle(e,null).getPropertyValue(n)}catch(i){return null}}return n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=v?"styleFloat":"cssFloat"),e.currentStyle&&r?e.currentStyle[n]:e.style?e.style[n]:t}},setStyles:function(e,t){this.setStyle(e,t)},css:function(e,t,n){this.setStyle(e,t,n)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this;if(e&&t)return this.run(e,function(e){var i=r.settings,o=e.getAttribute(t);if(null!==n)switch(t){case"style":if(!f(n,"string"))return void d(n,function(t,n){r.setStyle(e,n,t)});i.keep_values&&(n?e.setAttribute("data-mce-style",n,2):e.removeAttribute("data-mce-style",2)),e.style.cssText=n;break;case"class":e.className=n||"";break;case"src":case"href":i.keep_values&&(i.url_converter&&(n=i.url_converter.call(i.url_converter_scope||r,n,t,e)),r.setAttrib(e,"data-mce-"+t,n,2));break;case"shape":e.setAttribute("data-mce-style",n)}f(n)&&null!==n&&0!==n.length?e.setAttribute(t,""+n,2):e.removeAttribute(t,2),o!=n&&i.onSetAttrib&&i.onSetAttrib({attrElm:e,attrName:t,attrValue:n})})},setAttribs:function(e,t){var n=this;return this.run(e,function(e){d(t,function(t,r){n.setAttrib(e,r,t)})})},getAttrib:function(e,t,n){var r,i=this,o;if(e=i.get(e),!e||1!==e.nodeType)return n===o?!1:n;if(f(n)||(n=""),/^(src|href|style|coords|shape)$/.test(t)&&(r=e.getAttribute("data-mce-"+t)))return r;if(v&&i.props[t]&&(r=e[i.props[t]],r=r&&r.nodeValue?r.nodeValue:r),r||(r=e.getAttribute(t,2)),/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]]===!0&&""===r?t:r?t:"";if("FORM"===e.nodeName&&e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue;if("style"===t&&(r=r||e.style.cssText,r&&(r=i.serializeStyle(i.parseStyle(r),e.nodeName),i.settings.keep_values&&e.setAttribute("data-mce-style",r))),g&&"class"===t&&r&&(r=r.replace(/(apple|webkit)\-[a-z\-]+/gi,"")),v)switch(t){case"rowspan":case"colspan":1===r&&(r="");break;case"size":("+0"===r||20===r||0===r)&&(r="");break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":0===r&&(r="");break;case"hspace":-1===r&&(r="");break;case"maxlength":case"tabindex":(32768===r||2147483647===r||"32768"===r)&&(r="");break;case"multiple":case"compact":case"noshade":case"nowrap":return 65535===r?t:n;case"shape":r=r.toLowerCase();break;default:0===t.indexOf("on")&&r&&(r=(""+r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1"))}return r!==o&&null!==r&&""!==r?""+r:n},getPos:function(e,t){var n=this,r=0,i=0,o,a=n.doc,s;if(e=n.get(e),t=t||a.body,e){if(t===a.body&&e.getBoundingClientRect)return s=e.getBoundingClientRect(),t=n.boxModel?a.documentElement:a.body,r=s.left+(a.documentElement.scrollLeft||a.body.scrollLeft)-t.clientLeft,i=s.top+(a.documentElement.scrollTop||a.body.scrollTop)-t.clientTop,{x:r,y:i};for(o=e;o&&o!=t&&o.nodeType;)r+=o.offsetLeft||0,i+=o.offsetTop||0,o=o.offsetParent;for(o=e.parentNode;o&&o!=t&&o.nodeType;)r-=o.scrollLeft||0,i-=o.scrollTop||0,o=o.parentNode}return{x:r,y:i}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==u.DOM&&n===document){var o=u.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,u.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==u.DOM&&n===document?void u.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void d(e.split(","),function(e){var i;t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),v&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){return this.run(e,function(e){var n;return t?this.hasClass(e,t)?e.className:(n=this.removeClass(e,t),e.className=n=(""!==n?n+" ":"")+t,n):0})},removeClass:function(e,t){var n=this,r;return n.run(e,function(e){var i;return n.hasClass(e,t)?(r||(r=new RegExp("(^|\\s+)"+t+"(\\s+|$)","g")),i=e.className.replace(r," "),i=h(" "!=i?i:""),e.className=i,i||(e.removeAttribute("class"),e.removeAttribute("className")),i):e.className})},hasClass:function(e,t){return e=this.get(e),e&&t?-1!==(" "+e.className+" ").indexOf(" "+t+" "):!1},toggleClass:function(e,n,r){r=r===t?!this.hasClass(e,n):r,this.hasClass(e,n)!==r&&(r?this.addClass(e,n):this.removeClass(e,n))},show:function(e){return this.setStyle(e,"display","block")},hide:function(e){return this.setStyle(e,"display","none")},isHidden:function(e){return e=this.get(e),!e||"none"==e.style.display||"none"==this.getStyle(e,"display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){var n=this;return n.run(e,function(e){if(v){for(;e.firstChild;)e.removeChild(e.firstChild);try{e.innerHTML="
      "+t,e.removeChild(e.firstChild)}catch(r){var i=n.create("div");i.innerHTML="
      "+t,d(p(i.childNodes),function(t,n){n&&e.canHaveHTML&&e.appendChild(t)})}}else e.innerHTML=t;return t})},getOuterHTML:function(e){var t,n=this;return(e=n.get(e))?1===e.nodeType&&n.hasOuterHTML?e.outerHTML:(t=(e.ownerDocument||n.doc).createElement("body"),t.appendChild(e.cloneNode(!0)),t.innerHTML):null},setOuterHTML:function(e,t,n){var r=this;return r.run(e,function(e){function i(){var i,o;for(o=n.createElement("body"),o.innerHTML=t,i=o.lastChild;i;)r.insertAfter(i.cloneNode(!0),e),i=i.previousSibling;r.remove(e)}if(1==e.nodeType)if(n=n||e.ownerDocument||r.doc,v)try{1==e.nodeType&&r.hasOuterHTML?e.outerHTML=t:i()}catch(o){i()}else i()})},decode:a.decode,encode:a.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return f(t,"array")&&(e=e.cloneNode(!0)),n&&d(p(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(l.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],d(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(v){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,o,a,s,l,c=0;if(e=e.firstChild){s=new i(e,e.parentNode),t=t||n.schema?n.schema.getNonEmptyElements():null;do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(o=n.getAttribs(e),r=o.length;r--;)if(l=o[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!b.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new o(this)},nodeIndex:function(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n},split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=h(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.replaceChild(n,t):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){var i=this;if(l.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(l.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return e&&1==e.nodeType?(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null):null},getContentEditableParent:function(e){for(var t=this.getRoot(),n=null;e&&e!==t&&(n=this.getContentEditable(e),null===n);e=e.parentNode);return n},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n]; +this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},u.DOM=new u(document),u}),r(b,[y,p],function(e,t){function n(){function e(e,t){function n(){o.remove(s),a&&(a.onreadystatechange=a.onload=a=null),t()}function i(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var o=r,a,s;s=o.uniqueId(),a=document.createElement("script"),a.id=s,a.type="text/javascript",a.src=e,"onreadystatechange"in a?a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&n()}:a.onload=n,a.onerror=i,(document.getElementsByTagName("head")[0]||document.body).appendChild(a)}var t=0,n=1,a=2,s={},l=[],c={},u=[],d=0,f;this.isDone=function(e){return s[e]==a},this.markDone=function(e){s[e]=a},this.add=this.load=function(e,n,r){var i=s[e];i==f&&(l.push(e),s[e]=t),n&&(c[e]||(c[e]=[]),c[e].push({func:n,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(l,e,t)},this.loadScripts=function(t,r,l){function p(e){i(c[e],function(e){e.func.call(e.scope)}),c[e]=f}var h;u.push({func:r,scope:l||this}),(h=function(){var r=o(t);t.length=0,i(r,function(t){return s[t]==a?void p(t):void(s[t]!=n&&(s[t]=n,d++,e(t,function(){s[t]=a,d--,p(t),h()})))}),d||(i(u,function(e){e.func.call(e.scope)}),u.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(C,[b,p],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){var i=r.language;if(i&&r.languageLoad!==!1){if(n)if(n=","+n+",",-1!=n.indexOf(","+i.substr(0,2)+","))i=i.substr(0,2);else if(-1==n.indexOf(","+i+","))return;e.ScriptLoader.add(this.urls[t]+"/langs/"+i+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&a.call(s?s:e)}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(x,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(w,[p],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e){var t={},n,r;for(n=0,r=e.length;r>n;n++)t[e[n]]={};return t}var o,l,c,u=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),l=3;lo;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},s,l,c,u,d,f;return r[e]?r[e]:(s=t("id accesskey class dir lang style tabindex title"),l=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),c=t("a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment"),"html4"!=e&&(s.push.apply(s,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),l.push.apply(l,t("article aside details dialog figure header footer hgroup section nav")),c.push.apply(c,t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(s.push("xml:lang"),f=t("acronym applet basefont big font strike tt"),c.push.apply(c,f),o(f,function(e){n(e,"",c)}),d=t("center dir isindex noframes"),l.push.apply(l,d),u=[].concat(l,c),o(d,function(e){n(e,"",u)})),u=u||[].concat(l,c),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",u),n("address dt dd div caption","",u),n("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",c),n("blockquote","cite",u),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",u),n("dl","","dt dd"),n("a","href target rel media hreflang type",c),n("q","cite",c),n("ins del","cite datetime",u),n("img","src alt usemap ismap width height"),n("iframe","src name width height",u),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",u,"param"),n("param","name value"),n("map","name",u,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",u),n("th","colspan rowspan headers scope abbr",u),n("form","accept-charset action autocomplete enctype method name novalidate target",u),n("fieldset","disabled form name",u,"legend"),n("label","form for",c),n("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),n("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?u:c),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",u,"li"),n("noscript","",u),"html4"!=e&&(n("wbr"),n("ruby","",c,"rt rp"),n("figcaption","",u),n("mark rt rp summary bdi","",c),n("canvas","width height",u),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",u,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",u,"track source"),n("source","src type media"),n("track","kind src srclang label default"),n("datalist","",c,"option"),n("article section nav aside header footer","",u),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",u,"figcaption"),n("time","datetime",c),n("dialog","open",u),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",c),n("progress","value max",c),n("meter","value min max low high optimum",c),n("details","open",u,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(i("script","language xml:space"),i("style","xml:space"),i("object","declare classid codebase codetype archive standby align border hspace vspace"),i("param","valuetype type"),i("a","charset name rev shape coords"),i("br","clear"),i("applet","codebase archive code object alt name width height align hspace vspace"),i("img","name longdesc align border hspace vspace"),i("iframe","longdesc frameborder marginwidth marginheight scrolling align"),i("font basefont","size color face"),i("input","usemap align"),i("select","onchange"),i("textarea"),i("h1 h2 h3 h4 h5 h6 div p legend caption","align"),i("ul","type compact"),i("li","type"),i("ol dl menu dir","compact"),i("pre","width xml:space"),i("hr","align noshade size width"),i("isindex","prompt"),i("table","summary width frame rules cellspacing cellpadding align bgcolor"),i("col","width align char charoff valign"),i("colgroup","width align char charoff valign"),i("thead","align char charoff valign"),i("tr","align char charoff valign bgcolor"),i("th","axis align char charoff valign nowrap bgcolor width height"),i("form","accept"),i("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),i("tfoot","align char charoff valign"),i("tbody","align char charoff valign"),i("area","nohref"),i("body","background bgcolor text link vlink alink")),"html4"!=e&&(i("input button select textarea","autofocus"),i("input textarea","placeholder"),i("a","download"),i("link script img","crossorigin"),i("iframe","sandbox seamless allowfullscreen")),o(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,r[e]=a,a)}var r={},i=e.makeMap,o=e.each,a=e.extend,s=e.explode,l=e.inArray;return function(e){function c(t,n,o){var s=e[t];return s?s=i(s,/[, ]/,i(s.toUpperCase(),/[, ]/)):(s=r[t],s||(s=i(n," ",i(n.toUpperCase()," ")),s=a(s,o),r[t]=s)),s}function u(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function d(e){var n,r,o,a,s,c,d,f,p,h,m,g,y,C,x,w,_,N,E,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),v["@"]&&(w=v["@"].attributes,_=v["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=S.exec(e[n])){if(C=s[1],p=s[2],x=s[3],f=s[5],g={},y=[],c={attributes:g,attributesOrder:y},"#"===C&&(c.paddEmpty=!0),"-"===C&&(c.removeEmpty=!0),"!"===s[4]&&(c.removeEmptyAttrs=!0),w){for(N in w)g[N]=w[N];y.push.apply(y,_)}if(f)for(f=t(f,"|"),o=0,a=f.length;a>o;o++)if(s=k.exec(f[o])){if(d={},m=s[1],h=s[2].replace(/::/g,":"),C=s[3],E=s[4],"!"===m&&(c.attributesRequired=c.attributesRequired||[],c.attributesRequired.push(h),d.required=!0),"-"===m){delete g[h],y.splice(l(y,h),1);continue}C&&("="===C&&(c.attributesDefault=c.attributesDefault||[],c.attributesDefault.push({name:h,value:E}),d.defaultValue=E),":"===C&&(c.attributesForced=c.attributesForced||[],c.attributesForced.push({name:h,value:E}),d.forcedValue=E),"<"===C&&(d.validValues=i(E,"?"))),T.test(h)?(c.attributePatterns=c.attributePatterns||[],d.pattern=u(h),c.attributePatterns.push(d)):(g[h]||y.push(h),g[h]=d)}w||"@"!=p||(w=g,_=y),x&&(c.outputName=p,v[x]=c),T.test(p)?(c.pattern=u(p),b.push(c)):v[p]=c}}function f(e){v={},b=[],d(e),o(x,function(e,t){y[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(r.text_block_elements=r.block_elements=null,o(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",s=t[2];if(y[s]=y[i],R[s]=i,r||(S[s.toUpperCase()]={},S[s]={}),!v[s]){var l=v[i];l=a({},l),delete l.removeEmptyAttrs,delete l.removeEmpty,v[s]=l}o(y,function(e,t){e[i]&&(y[t]=e=a({},y[t]),e[s]=e[i])})}))}function h(e){var n=/^([+\-]?)(\w+)\[([^\]]+)\]$/;e&&o(t(e,","),function(e){var r=n.exec(e),i,s;r&&(s=r[1],i=s?y[r[2]]:y[r[2]]={"#comment":{}},i=y[r[2]],o(t(r[3],"|"),function(e){"-"===s?(y[r[2]]=i=a({},y[r[2]]),delete i[e]):i[e]={}}))})}function m(e){var t=v[e],n;if(t)return t;for(n=b.length;n--;)if(t=b[n],t.pattern.test(e))return t}var g=this,v={},y={},b=[],C,x,w,_,N,E,S,k,T,R={},A={};e=e||{},x=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),e.valid_styles&&(C={},o(e.valid_styles,function(e,t){C[t]=s(e)})),w=c("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=c("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),N=c("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),E=c("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),k=c("non_empty_elements","td th iframe video audio object script",N),T=c("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),S=c("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup",T),o((e.special||"script noscript style textarea").split(" "),function(e){A[e]=new RegExp("]*>","gi")}),e.valid_elements?f(e.valid_elements):(o(x,function(e,t){v[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},y[t]=e.children}),"html5"!=e.schema&&o(t("strong/b em/i"),function(e){e=t(e,"/"),v[e[1]].outputName=e[0]}),v.img.attributesDefault=[{name:"alt",value:""}],o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){v[e]&&(v[e].removeEmpty=!0)}),o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){v[e].paddEmpty=!0}),o(t("span"),function(e){v[e].removeEmptyAttrs=!0})),p(e.custom_elements),h(e.valid_children),d(e.extended_valid_elements),h("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&o(s(e.invalid_elements),function(e){v[e]&&delete v[e]}),m("span")||d("span[!data-mce-type|*]"),g.children=y,g.styles=C,g.getBoolAttrs=function(){return E},g.getBlockElements=function(){return S},g.getTextBlockElements=function(){return T},g.getShortEndedElements=function(){return N},g.getSelfClosingElements=function(){return _},g.getNonEmptyElements=function(){return k},g.getWhiteSpaceElements=function(){return w},g.getSpecialElements=function(){return A},g.isValidChild=function(e,t){var n=y[e];return!(!n||!n[t])},g.isValid=function(e,t){var n,r,i=m(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},g.getElementRule=m,g.getCustomElements=function(){return R},g.addValidElements=d,g.setValidElements=f,g.addCustomElements=p,g.addValidChildren=h,g.elements=v}}),r(_,[w,m,p],function(e,t,n){var r=n.each;return function(i,o){function a(){}var s=this;i=i||{},s.schema=o=o||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),r("comment cdata text start end pi doctype".split(" "),function(e){e&&(s[e]=i[e]||a)}),s.parse=function(e){function r(e){var t,n;for(t=f.length;t--&&f[t].name!==e;);if(t>=0){for(n=f.length-1;n>=t;n--)e=f[n],e.valid&&s.end(e.name);f.length=t}}function a(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in C?t:F(n||r||o||""),w&&!v&&0!==t.indexOf("data-")){if(a=k[t],!a&&T){for(s=T.length;s--&&(a=T[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(W[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{c=decodeURIComponent(c)}catch(u){c=unescape(c)}if(V.test(c))return;if(!i.allow_html_data_urls&&U.test(c)&&!/^data:image\//i.test(c))return}p.map[t]=n,p.push({name:t,value:n})}var s=this,l,c=0,u,d,f=[],p,h,m,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O,I=0,F=t.decode,z,W=n.makeMap("src,href,data,background,formaction,poster"),V=/((java|vb)script|mhtml):/i,U=/^data:/i;for(M=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),H=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,b=o.getShortEndedElements(),L=i.self_closing_elements||o.getSelfClosingElements(),C=o.getBoolAttrs(),w=i.validate,y=i.remove_internals,z=i.fix_self_closing,P=o.getSpecialElements();l=M.exec(e);){if(c0&&f[f.length-1].name===u&&r(u),!w||(_=o.getElementRule(u))){if(N=!0,w&&(k=_.attributes,T=_.attributePatterns),(S=l[8])?(v=-1!==S.indexOf("data-mce-type"),v&&y&&(N=!1),p=[],p.map={},S.replace(H,a)):(p=[],p.map={}),w&&!v){if(R=_.attributesRequired,A=_.attributesDefault,B=_.attributesForced,D=_.removeEmptyAttrs,D&&!p.length&&(N=!1),B)for(h=B.length;h--;)E=B[h],g=E.name,O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O});if(A)for(h=A.length;h--;)E=A[h],g=E.name,g in p.map||(O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O}));if(R){for(h=R.length;h--&&!(R[h]in p.map););-1===h&&(N=!1)}p.map["data-mce-bogus"]&&(N=!1)}N&&s.start(u,p,x)}else N=!1;if(d=P[u]){d.lastIndex=c=l.index+l[0].length,(l=d.exec(e))?(N&&(m=e.substr(c,l.index-c)),c=l.index+l[0].length):(m=e.substr(c),c=e.length),N&&(m.length>0&&s.text(m,!0),s.end(u)),M.lastIndex=c;continue}x||(S&&S.indexOf("/")==S.length-1?N&&s.end(u):f.push({name:u,valid:N}))}else(u=l[1])?(">"===u.charAt(0)&&(u=" "+u),i.allow_conditional_comments||"[if"!==u.substr(0,3)||(u=" "+u),s.comment(u)):(u=l[2])?s.cdata(u):(u=l[3])?s.doctype(u):(u=l[4])&&s.pi(u,l[5]);c=l.index+l[0].length}for(c=0;h--)u=f[h],u.valid&&s.end(u.name)}}}),r(N,[x,w,_,p],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,p,h,m,g,v,y;for(m=i("tr,td,th,tbody,thead,tfoot,table"),h=l.getNonEmptyElements(),g=l.getTextBlockElements(),n=0;n1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),p=0;p0?(t.value=n,t=t.prev):(r=t.prev,t.remove(),t=r)}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,_,N,E,S,k,T,R,A=[],B,D,L,M,H,P,O,I;if(o=o||{},p={},h={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),P=l.children,k=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,H=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,D=/[ \t\r\n]+$/,L=/[ \t\r\n]+/g,M=/^[ \t\r\n]+$/,v=new n({validate:k,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(L," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,m(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,m(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=P[b.name],s&&P[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(E=h[a],E?E.push(r):h[a]=[r]);T[e]&&m(r),n||(b=r),!B&&H[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(D,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o}if(B&&H[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,b.empty().remove(),void(b=a);b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in p){for(E=d[S],C=p[S],_=C.length;_--;)C[_].parent||C.splice(_,1);for(x=0,w=E.length;w>x;x++)E[x](C,S,o)}for(x=0,w=f.length;w>x;x++)if(E=f[x],E.name in h){for(C=h[E.name],_=C.length;_--;)C[_].parent||C.splice(_,1);for(_=0,N=E.callbacks.length;N>_;_++)E.callbacks[_](C,E.name,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,p,h;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(p=l.getElementRule(c.name),p&&(p.removeEmpty?c.remove():p.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(h=new e("#text",3),h.value="\xa0",i.replace(h))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}})}}),r(E,[m,p],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,u,d,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');r[r.length]=!n||l?">":" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push(""),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("")},comment:function(e){r.push("")},pi:function(e,t){t?r.push(""):r.push(""),i&&r.push("\n")},doctype:function(e){r.push("",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(S,[E,w],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,p,h,m;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1){for(f=[],f.map={},m=r.getElementRule(e.name),p=0,h=m.attributesOrder.length;h>p;p++)u=m.attributesOrder[p],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(p=0,h=c.length;h>p;p++)u=c[p].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(k,[y,N,m,S,x,w,g,p],function(e,t,n,r,i,o,a,s){var l=s.each,c=s.trim,u=e.DOM;return function(e,i){var s,d,f;return i&&(s=i.dom,d=i.schema),s=s||u,d=d||new o(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,f=new t(e,d),f.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n=e.length,r;n--;)r=e[n],r.attr("tabindex",r.attributes.map["data-mce-tabindex"]),r.attr(t,null)}),f.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-mce-"+n,l=e.url_converter,c=e.url_converter_scope,u;r--;)i=t[r],o=i.attributes.map[a],o!==u?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=s.serializeStyle(s.parseStyle(o),i.name):l&&(o=l.call(c,o,n,i.name)),i.attr(n,o.length>0?o:null))}),f.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null)}),f.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),f.addAttributeFilter("data-mce-expando",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),f.addNodeFilter("noscript",function(e){for(var t=e.length,r;t--;)r=e[t].firstChild,r&&(r.value=n.decode(r.value))}),f.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o;r--;)if(i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t){var a=(i.attr("type")||"text/javascript").replace(/^mce\-/,"");i.attr("type","text/javascript"===a?null:a),o.length>0&&(i.firstChild.value="// ")}else o.length>0&&(i.firstChild.value="")}),f.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),f.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&f.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:d,addNodeFilter:f.addNodeFilter,addAttributeFilter:f.addAttributeFilter,serialize:function(t,n){var i=this,o,u,p,h,m;return a.ie&&s.select("script,style,select,map").length>0?(m=t.innerHTML,t=t.cloneNode(!1),s.setHTML(t,m)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(u=o.createHTMLDocument(""),l("BODY"==t.nodeName?t.childNodes:[t],function(e){u.body.appendChild(u.importNode(e,!0))}),t="BODY"!=t.nodeName?u.body.firstChild:u.body,p=s.doc,s.doc=u),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,i.onPreProcess(n)),h=new r(e,d),n.content=h.serialize(f.parse(c(n.getInner?t.innerHTML:s.getOuterHTML(t)),n)),n.cleanup||(n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||i.onPostProcess(n),p&&(s.doc=p),n.node=null,n.content},addRules:function(e){d.addValidElements(e)},setRules:function(e){d.setValidElements(e)},onPreProcess:function(e){i&&i.fire("PreProcess",e)},onPostProcess:function(e){i&&i.fire("PostProcess",e)}}}}),r(T,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode; +if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:d,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r);if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l));for(;l;){if(u=l.nodeValue,s+=u.length,s>=i){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(s+=l.nodeValue.length,s>=i){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,h;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),(t==f||t==f.documentElement)&&(t=p,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a),d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(h=t.childNodes,h.length?(n>=h.length?i.insertAfter(a,h[h.length-1]):t.insertBefore(a,h[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,p=f.body,h,m;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=p.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="":d=null,s.innerHTML="",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",void(d&&(d.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(m=s.childNodes[l],a=p.createControlRange(),a.addElement(m),a.select(),h=e.getRng(),h.item&&m===h.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(R,[g],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey},metaKeyPressed:function(t){return(e.mac?t.metaKey:t.ctrlKey)&&!t.altKey}}}),r(A,[R,p,g],function(e,t,n){return function(r,i){function o(e){var t=i.settings.object_resizing;return t===!1||n.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:i.dom.is(e,t))}function a(t){var n,r;n=t.screenX-k,r=t.screenY-T,H=n*E[2]+B,P=r*E[3]+D,H=5>H?5:H,P=5>P?5:P,(e.modifierPressed(t)||"IMG"==w.nodeName&&E[2]*E[3]!==0)&&(H=Math.round(P/L),P=Math.round(H*L)),C.setStyles(_,{width:H,height:P}),E[2]<0&&_.clientWidth<=H&&C.setStyle(_,"left",R+(B-H)),E[3]<0&&_.clientHeight<=P&&C.setStyle(_,"top",A+(D-P)),M||(i.fire("ObjectResizeStart",{target:w,width:B,height:D}),M=!0)}function s(){function e(e,t){t&&(w.style[e]||!i.schema.isValid(w.nodeName.toLowerCase(),e)?C.setStyle(w,e,t):C.setAttrib(w,e,t))}M=!1,e("width",H),e("height",P),C.unbind(O,"mousemove",a),C.unbind(O,"mouseup",s),I!=O&&(C.unbind(I,"mousemove",a),C.unbind(I,"mouseup",s)),C.remove(_),F&&"TABLE"!=w.nodeName||l(w),i.fire("ObjectResized",{target:w,width:H,height:P}),i.nodeChanged()}function l(e,t,r){var l,u,d,f,p,h=i.getBody();g(),l=C.getPos(e,h),R=l.x,A=l.y,p=e.getBoundingClientRect(),u=p.width||p.right-p.left,d=p.height||p.bottom-p.top,w!=e&&(m(),w=e,H=P=0),f=i.fire("ObjectSelected",{target:e}),o(e)&&!f.isDefaultPrevented()?x(N,function(e,o){function l(t){k=t.screenX,T=t.screenY,B=w.clientWidth,D=w.clientHeight,L=D/B,E=e,_=w.cloneNode(!0),C.addClass(_,"mce-clonedresizable"),_.contentEditable=!1,_.unSelectabe=!0,C.setStyles(_,{left:R,top:A,margin:0}),_.removeAttribute("data-mce-selected"),i.getBody().appendChild(_),C.bind(O,"mousemove",a),C.bind(O,"mouseup",s),I!=O&&(C.bind(I,"mousemove",a),C.bind(I,"mouseup",s))}var c,f;return t?void(o==t&&l(r)):(c=C.get("mceResizeHandle"+o),c?C.show(c):(f=i.getBody(),c=C.add(f,"div",{id:"mceResizeHandle"+o,"data-mce-bogus":!0,"class":"mce-resizehandle",unselectable:!0,style:"cursor:"+o+"-resize; margin:0; padding:0"}),n.ie&&(c.contentEditable=!1)),e.elm||(C.bind(c,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),l(e)}),e.elm=c),void C.setStyles(c,{left:u*e[0]+R-c.offsetWidth/2,top:d*e[1]+A-c.offsetHeight/2}))}):c(),w.setAttribute("data-mce-selected","1")}function c(){var e,t;g(),w&&w.removeAttribute("data-mce-selected");for(e in N)t=C.get("mceResizeHandle"+e),t&&(C.unbind(t),C.remove(t))}function u(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n;return x(C.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),n="mousedown"==e.type?e.target:r.getNode(),n=C.getParent(n,F?"table":"table,img,hr"),t(n,i.getBody())&&(v(),t(r.getStart(),n)&&t(r.getEnd(),n)&&(!F||n!=r.getStart()&&"IMG"!==r.getStart().nodeName))?void l(n):void c()}function d(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function f(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function p(e){var t=e.srcElement,n,r,o,a,s,c,u;n=t.getBoundingClientRect(),c=S.clientX-n.left,u=S.clientY-n.top;for(r in N)if(o=N[r],a=t.offsetWidth*o[0],s=t.offsetHeight*o[1],Math.abs(a-c)<8&&Math.abs(s-u)<8){E=o;break}M=!0,i.getDoc().selection.empty(),l(t,r,S)}function h(e){var t=e.srcElement;if(t!=w){if(m(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(c(),w=t,d(t,"resizestart",p))}}function m(){f(w,"resizestart",p)}function g(){for(var e in N){var t=N[e];t.elm&&(C.unbind(t.elm),delete t.elm)}}function v(){try{i.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function y(e){var t;if(F){t=O.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function b(){w=_=null,F&&(m(),f(i.getBody(),"controlselect",h))}var C=i.dom,x=t.each,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O=i.getDoc(),I=document,F=n.ie&&n.ie<11;N={n:[.5,0,0,-1],e:[1,.5,1,0],s:[.5,1,0,1],w:[0,.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var z=".mce-content-body";return i.contentStyles.push(z+" div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}"+z+" .mce-resizehandle:hover {background: #000}"+z+" img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}"+z+" .mce-clonedresizable {position: absolute;"+(n.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"),i.on("init",function(){F?(i.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(c(),y(e.target))}),d(i.getBody(),"controlselect",h),i.on("mousedown",function(e){S=e})):(v(),n.ie>=11&&(i.on("mouseup",function(e){var t=e.target.nodeName;/^(TABLE|IMG|HR)$/.test(t)&&(i.selection.select(e.target,"TABLE"==t),i.nodeChanged())}),i.dom.bind(i.getBody(),"mscontrolselect",function(e){/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&window.setTimeout(function(){i.selection.select(e.target)},0))}))),i.on("nodechange mousedown mouseup ResizeEditor",u),i.on("keydown keyup",function(e){w&&"TABLE"==w.nodeName&&u(e)}),i.on("hide",c)}),i.on("remove",g),{isResizable:o,showResizeRect:l,hideResizeRect:c,updateResizeRect:u,controlSelect:y,destroy:b}}}),r(B,[p,f],function(e,t){function n(e){this.walk=function(t,n){function i(e){var t;return t=e[0],3===t.nodeType&&t===l&&c>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===d&&e.length>0&&t===u&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,r){var a=r?"nextSibling":"previousSibling";for(m=e,g=m.parentNode;m&&m!=t;m=g)g=m.parentNode,v=o(m==e?m:m[a],a),v.length&&(r||v.reverse(),n(i(v)))}var l=t.startContainer,c=t.startOffset,u=t.endContainer,d=t.endOffset,f,p,h,m,g,v,y;if(y=e.select("td.mce-item-selected,th.mce-item-selected"),y.length>0)return void r(y,function(e){n([e])});if(1==l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[c]),1==u.nodeType&&u.hasChildNodes()&&(u=u.childNodes[Math.min(d-1,u.childNodes.length-1)]),l==u)return n(i([l]));for(f=e.findCommonAncestor(l,u),m=l;m;m=m.parentNode){if(m===u)return s(l,f,!0);if(m===f)break}for(m=u;m;m=m.parentNode){if(m===l)return s(u,f);if(m===f)break}p=a(l,f)||l,h=a(u,f)||u,s(l,p,!0),v=o(p==l?p:p.nextSibling,"nextSibling",h==u?h.nextSibling:h),v.length&&n(i(v)),s(u,h)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return c=p,u=n?p.nodeValue.length:0,void(i=!0);if(e.isBlock(p)||h[p.nodeName.toLowerCase()])return;s=p}o&&s&&(c=s,i=!0,u=0)}var c,u,d,f=e.getRoot(),p,h,m,g;if(c=n[(r?"start":"end")+"Container"],u=n[(r?"start":"end")+"Offset"],g=1==c.nodeType&&u===c.childNodes.length,h=e.schema.getNonEmptyElements(),m=r,1==c.nodeType&&u>c.childNodes.length-1&&(m=!1),9===c.nodeType&&(c=e.getRoot(),u=0),c===f){if(m&&(p=c.childNodes[u>0?u-1:0],p&&(h[p.nodeName]||"TABLE"==p.nodeName)))return;if(c.hasChildNodes()&&(u=Math.min(!m&&u>0?u-1:u,c.childNodes.length-1),c=c.childNodes[u],u=0,c.hasChildNodes()&&!/TABLE/.test(c.nodeName))){p=c,d=new t(c,f);do{if(3===p.nodeType&&p.nodeValue.length>0){u=m?0:p.nodeValue.length,c=p,i=!0;break}if(h[p.nodeName.toLowerCase()]){u=e.nodeIndex(p),c=p.parentNode,"IMG"!=p.nodeName||m||u++,i=!0;break}}while(p=m?d.next():d.prev())}}o&&(3===c.nodeType&&0===u&&l(!0),1===c.nodeType&&(p=c.childNodes[u],p||(p=c.childNodes[u-1]),!p||"BR"!==p.nodeName||s(p,"A")||a(p)||a(p,!0)||l(!0,p))),m&&!o&&3===c.nodeType&&u===c.nodeValue.length&&l(!1),i&&n["set"+(r?"Start":"End")](c,u)}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}var r=e.each;return n.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},n}),r(D,[f,T,A,B,g,p],function(e,n,r,i,o,a){function s(e,t,i,o){var a=this;a.dom=e,a.win=t,a.serializer=i,a.editor=o,a.controlSelection=new r(a,o),a.win.getSelection||(a.tridentSel=new n(a))}var l=a.each,c=a.grep,u=a.trim,d=o.ie,f=o.opera;return s.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="
      "+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,e=t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='_',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('_'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(){var e=this,t=e.getRng(),n,r,i,o;if(t.duplicate||t.item){if(t.item)return t.item(0);for(i=t.duplicate(),i.collapse(1),n=i.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),r=o=t.parentElement();o=o.parentNode;)if(o==n){n=r;break}return n}return n=t.startContainer,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[Math.min(n.childNodes.length-1,t.startOffset)]),n&&3==n.nodeType?n.parentNode:n},getEnd:function(){var e=this,t=e.getRng(),n,r;return t.duplicate||t.item?t.item?t.item(0):(t=t.duplicate(),t.collapse(0),n=t.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),n&&"BODY"==n.nodeName?n.lastChild||n:n):(n=t.endContainer,r=t.endOffset,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[r>0?r-1:r]),n&&3==n.nodeType?n.parentNode:n)},getBookmark:function(e,t){function n(e,t){var n=0;return l(a.select(e),function(e,r){e==t&&(n=r)}),n}function r(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function i(){function e(e,n){var i=e[n?"startContainer":"endContainer"],a=e[n?"startOffset":"endOffset"],s=[],l,c,u=0;if(3==i.nodeType){if(t)for(l=i.previousSibling;l&&3==l.nodeType;l=l.previousSibling)a+=l.nodeValue.length;s.push(a)}else c=i.childNodes,a>=c.length&&c.length&&(u=1,a=Math.max(0,c.length-1)),s.push(o.dom.nodeIndex(c[a],t)+u);for(;i&&i!=r;i=i.parentNode)s.push(o.dom.nodeIndex(i,t));return s}var n=o.getRng(!0),r=a.getRoot(),i={};return i.start=e(n,!0),o.isCollapsed()||(i.end=e(n)),i}var o=this,a=o.dom,s,c,u,d,f,p,h="",m;if(2==e)return p=o.getNode(),f=p?p.nodeName:null,"IMG"==f?{name:f,index:n(f,p)}:o.tridentSel?o.tridentSel.getBookmark(e):i();if(e)return{rng:o.getRng()};if(s=o.getRng(),u=a.uniqueId(),d=o.isCollapsed(),m="overflow:hidden;line-height:0px",s.duplicate||s.item){if(s.item)return p=s.item(0),f=p.nodeName,{name:f,index:n(f,p)};c=s.duplicate();try{s.collapse(),s.pasteHTML(''+h+""),d||(c.collapse(!1),s.moveToElementText(c.parentElement()),0===s.compareEndPoints("StartToEnd",c)&&c.move("character",-1),c.pasteHTML(''+h+""))}catch(g){return null}}else{if(p=o.getNode(),f=p.nodeName,"IMG"==f)return{name:f,index:n(f,p)};c=r(s.cloneRange()),d||(c.collapse(!1),c.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_end",style:m},h))),s=r(s),s.collapse(!0),s.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_start",style:m},h))}return o.moveToBookmark({id:u,keep:1}),{id:u}},moveToBookmark:function(e){function t(t){var n=e[t?"start":"end"],r,i,o,l;if(n){for(o=n[0],i=s,r=n.length-1;r>=1;r--){if(l=i.childNodes,n[r]>l.length-1)return;i=l[n[r]]}3===i.nodeType&&(o=Math.min(n[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(n[0],i.childNodes.length)),t?a.setStart(i,o):a.setEnd(i,o)}return!0}function n(t){var n=o.get(e.id+"_"+t),r,i,a,s,d=e.keep;if(n&&(r=n.parentNode,"start"==t?(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),u=p=r,h=m=i):(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),p=r,m=i),!d)){for(s=n.previousSibling,a=n.nextSibling,l(c(n.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});n=o.get(e.id+"_"+t);)o.remove(n,1);s&&a&&s.nodeType==a.nodeType&&3==s.nodeType&&!f&&(i=s.nodeValue.length,s.appendData(a.nodeValue),o.remove(a),"start"==t?(u=p=s,h=m=i):(p=s,m=i))}}function r(e){return!o.isBlock(e)||e.innerHTML||d||(e.innerHTML='
      '),e}var i=this,o=i.dom,a,s,u,p,h,m;if(e)if(e.start){if(a=o.createRng(),s=o.getRoot(),i.tridentSel)return i.tridentSel.moveToBookmark(e);t(!0)&&t()&&i.setRng(a)}else e.id?(n("start"),n("end"),u&&(a=o.createRng(),a.setStart(r(u),h),a.setEnd(r(p),m),i.setRng(a))):e.name?i.select(o.select(e.name)[e.index]):e.rng&&i.setRng(e.rng)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}return e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a=n.win.document,s;if(!e&&n.lastFocusBookmark){var l=n.lastFocusBookmark;return l.startContainer?(i=a.createRange(),i.setStart(l.startContainer,l.startOffset),i.setEnd(l.endContainer,l.endOffset)):i=l,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(c){}if(d&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(c){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot(),i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r;if(e.select)try{e.select()}catch(i){}else if(n.tridentSel){if(e.cloneRange)try{return void n.tridentSel.addRange(e)}catch(i){}}else if(r=n.getSel()){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(i){}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,l=t.dom.getRoot();return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return!d&&new i(e.dom).normalize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};l(n.selectorChangedData,function(e,t){l(o,function(n){return i.is(n,t)?(r[t]||(l(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),l(r,function(e,n){a[n]||(delete r[n],l(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e){function t(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var n,r,i=this,o=i.dom,a=o.getRoot(),s,l;if("BODY"!=a.nodeName){var c=i.getScrollContainer();if(c)return n=t(e).y-t(c).y,l=c.clientHeight,s=c.scrollTop,void((s>n||n+25>s+l)&&(c.scrollTop=s>n?n:n-l+25))}r=o.getViewPort(i.editor.getWin()),n=o.getPos(e).y,s=r.y,l=r.h,(ns+l)&&i.editor.getWin().scrollTo(0,s>n?n:n-l+25)},_moveEndPoint:function(t,n,r){var i=n,a=new e(n,i),s=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==u(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(s[n.nodeName])return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(o.ie&&o.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?a.next():a.prev());"BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},s}),r(L,[p],function(e){function t(e,t){function r(e){return e.replace(/%(\w+)/g,"")}var i,o,a=e.dom,s="",l,c;if(c=e.settings.preview_styles,c===!1)return"";if(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),"string"==typeof t){if(t=e.formatter.get(t),!t)return;t=t[0]}return i=t.block||t.inline||"span",o=a.create(i),n(t.styles,function(e,t){e=r(e),e&&a.setStyle(o,t,e)}),n(t.attributes,function(e,t){e=r(e),e&&a.setAttrib(o,t,e)}),n(t.classes,function(e){e=r(e),a.hasClass(o,e)||a.addClass(o,e)}),e.fire("PreviewFormats"),a.setStyles(o,{position:"absolute",left:-65535}),e.getBody().appendChild(o),l=a.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,n(c.split(" "),function(t){var n=a.getStyle(o,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=a.getStyle(e.getBody(),t,!0),"#ffffff"==a.toHex(n).toLowerCase())||"color"==t&&"#000000"==a.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(s+="padding:0 2px;"),s+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),a.remove(o),s}var n=e.each;return{getCssText:t}}),r(M,[f,B,p,L],function(e,t,n,r){return function(i){function o(e){return e.nodeType&&(e=e.nodeName),!!i.schema.getTextBlockElements()[e.toLowerCase()]}function a(e,t){return z.getParents(e,t,z.getRoot())}function s(e){return 1===e.nodeType&&"_mce_caret"===e.id}function l(){d({valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:!1},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:!1},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(e,t,n){nt(n,function(t,n){z.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),nt("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){d(e,{block:e,remove:"all"})}),d(i.settings.formats)}function c(){i.addShortcut("ctrl+b","bold_desc","Bold"),i.addShortcut("ctrl+i","italic_desc","Italic"),i.addShortcut("ctrl+u","underline_desc","Underline");for(var e=1;6>=e;e++)i.addShortcut("ctrl+"+e,"",["FormatBlock",!1,"h"+e]);i.addShortcut("ctrl+7","",["FormatBlock",!1,"p"]),i.addShortcut("ctrl+8","",["FormatBlock",!1,"div"]),i.addShortcut("ctrl+9","",["FormatBlock",!1,"address"])}function u(e){return e?F[e]:F}function d(e,t){e&&("string"!=typeof e?nt(e,function(e,t){d(t,e)}):(t=t.length?t:[t],nt(t,function(e){e.deep===Q&&(e.deep=!e.selector),e.split===Q&&(e.split=!e.selector||e.inline),e.remove===Q&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),F[e]=t))}function f(e){var t;return i.dom.getParent(e,function(e){return t=i.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function p(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=f(e.parentNode),i.dom.getStyle(e,"color")&&t?i.dom.setStyle(e,"text-decoration",t):i.dom.getStyle(e,"textdecoration")===t&&i.dom.setStyle(e,"text-decoration",null))}function h(t,n,r){function a(e,t){if(t=t||m,e){if(t.onformat&&t.onformat(e,t,n,r),nt(t.styles,function(t,r){z.setStyle(e,r,k(t,n))}),t.styles){var i=z.getAttrib(e,"style");i&&e.setAttribute("data-mce-style",i)}nt(t.attributes,function(t,r){z.setAttrib(e,r,k(t,n))}),nt(t.classes,function(t){t=k(t,n),z.hasClass(e,t)||z.addClass(e,t)})}}function l(){function t(t,n){var i=new e(n);for(r=i.current();r;r=i.prev())if(r.childNodes.length>1||r==t||"BR"==r.tagName)return r}var n=i.selection.getRng(),o=n.startContainer,a=n.endContainer;if(o!=a&&0===n.endOffset){var s=t(o,a),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function c(e,t,n,r,i){var o=[],a=-1,s,l=-1,c=-1,u;return nt(e.childNodes,function(e,t){return"UL"===e.nodeName||"OL"===e.nodeName?(a=t,s=e,!1):void 0}),nt(e.childNodes,function(e,n){"SPAN"===e.nodeName&&"bookmark"==z.getAttrib(e,"data-mce-type")&&(e.id==t.id+"_start"?l=n:e.id==t.id+"_end"&&(c=n))}),0>=a||a>l&&c>a?(nt(rt(e.childNodes),i),0):(u=z.clone(n,Y),nt(rt(e.childNodes),function(e,t){(a>l&&a>t||l>a&&t>a)&&(o.push(e),e.parentNode.removeChild(e))}),a>l?e.insertBefore(u,s):l>a&&e.insertBefore(u,s.nextSibling),r.push(u),nt(o,function(e){u.appendChild(e)}),u)}function d(e,r,i){var l=[],u,d,p=!0;u=m.inline||m.block,d=z.create(u),a(d),V.walk(e,function(e){function h(e){var y,C,x,w,_;return _=p,y=e.nodeName.toLowerCase(),C=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&Z(e)&&(_=p,p="true"===Z(e),w=!0),N(y,"br")?(g=0,void(m.block&&z.remove(e))):m.wrapper&&v(e,t,n)?void(g=0):p&&!w&&m.block&&!m.wrapper&&o(y)&&U(C,u)?(e=z.rename(e,u),a(e),l.push(e),void(g=0)):m.selector&&(nt(f,function(t){"collapsed"in t&&t.collapsed!==b||z.is(e,t.selector)&&!s(e)&&(a(e,t),x=!0)}),!m.inline||x)?void(g=0):void(!p||w||!U(u,y)||!U(C,u)||!i&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||s(e)||m.inline&&q(e)?"li"==y&&r?g=c(e,r,d,l,h):(g=0,nt(rt(e.childNodes),h),w&&(p=_),g=0):(g||(g=z.clone(d,Y),e.parentNode.insertBefore(g,e),l.push(g)),g.appendChild(e)))}var g;nt(e,h)}),m.wrap_links===!1&&nt(l,function(e){function t(e){var n,r,i;if("A"===e.nodeName){for(r=z.clone(d,Y),l.push(r),i=rt(e.childNodes),n=0;n1||!q(e))&&0===o)return void z.remove(e,1);if(m.inline||m.wrapper){if(m.exact||1!==o||(e=i(e)),nt(f,function(t){nt(z.select(t.inline,e),function(e){var r;if(!M(e)){if(t.wrap_links===!1){r=e.parentNode;do if("A"===r.nodeName)return;while(r=r.parentNode)}B(t,n,e,t.exact?e:null)}})}),v(e.parentNode,t,n))return z.remove(e,1),e=0,X;m.merge_with_parents&&z.getParent(e.parentNode,function(r){return v(r,t,n)?(z.remove(e,1),e=0,X):void 0}),e&&m.merge_siblings!==!1&&(e=H(L(e),e),e=H(e,L(e,X)))}})}var f=u(t),m=f[0],g,y,b=!r&&W.isCollapsed();if(m)if(r)r.nodeType?(y=z.createRng(),y.setStartBefore(r),y.setEndAfter(r),d(A(y,f),null,!0)):d(r,null,!0);else if(b&&m.inline&&!z.select("td.mce-item-selected,th.mce-item-selected").length)O("apply",t,n);else{var C=i.selection.getNode();$||!f[0].defaultBlock||z.getParent(C,z.isBlock)||h(f[0].defaultBlock),i.selection.setRng(l()),g=W.getBookmark(),d(A(W.getRng(X),f),g),m.styles&&(m.styles.color||m.styles.textDecoration)&&(it(C,p,"childNodes"),p(C)),W.moveToBookmark(g),I(W.getRng(X)),i.nodeChanged()}}function m(e,t,n){function r(e){var n,i,o,a,s;if(1===e.nodeType&&Z(e)&&(a=b,b="true"===Z(e),s=!0),n=rt(e.childNodes),b&&!s)for(i=0,o=p.length;o>i&&!B(p[i],t,e,e);i++);if(h.deep&&n.length){for(i=0,o=n.length;o>i;i++)r(n[i]);s&&(b=a)}}function o(n){var r;return nt(a(n.parentNode).reverse(),function(n){var i;r||"_start"==n.id||"_end"==n.id||(i=v(n,e,t),i&&i.split!==!1&&(r=n))}),r}function s(e,n,r,i){var o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=z.clone(o,Y),c=0;c=0;o--){if(s=t[o].selector,!s||t[o].defaultBlock)return X;for(i=r.length-1;i>=0;i--)if(z.is(r[i],s))return X}return Y}function x(e,t,n){var r;return J||(J={},r={},i.on("NodeChange",function(e){var t=a(e.element),n={};nt(J,function(e,i){nt(t,function(o){return v(o,i,{},e.similar)?(r[i]||(nt(e,function(e){e(!0,{node:o,format:i,parents:t})}),r[i]=e),n[i]=e,!1):void 0})}),nt(r,function(i,o){n[o]||(delete r[o],nt(i,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),nt(e.split(","),function(e){J[e]||(J[e]=[],J[e].similar=n),J[e].push(t)}),this}function w(e){return r.getCssText(i,e)}function _(e,t){return N(e,t.inline)?X:N(e,t.block)?X:t.selector?1==e.nodeType&&z.is(e,t.selector):void 0}function N(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function E(e,t){return S(z.getStyle(e,t),t)}function S(e,t){return("color"==t||"backgroundColor"==t)&&(e=z.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function k(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function T(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function R(e,t,n){var r=z.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function A(t,n,r){function s(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=z.getRoot(),3==r.nodeType&&!T(r)&&(e?v>0:bi?n:i,-1===n||r||n++):(n=a.indexOf(" ",t),i=a.indexOf("\xa0",t),n=-1!==n&&(-1===i||i>n)?n:i),n}var s,l,c,u;if(3===t.nodeType){if(c=a(t,n),-1!==c)return{container:t,offset:c};u=t}for(s=new e(t,z.getParent(t,q)||i.getBody());l=s[o?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=a(l),-1!==c)return{container:l,offset:c}}else if(q(l))break;return u?(n=o?0:u.length,{container:u,offset:n}):void 0}function d(e,r){var i,o,s,l;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=a(e),o=0;op?p:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(p=y.childNodes.length-1,y=y.childNodes[b>p?p:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=c(g),y=c(y),(M(g.parentNode)||M(g))&&(g=M(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(M(y.parentNode)||M(y))&&(y=M(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(m=u(g,v,!0),m&&(g=m.container,v=m.offset),m=u(y,b),m&&(y=m.container,b=m.offset)),h=l(y,b),h.node)){for(;h.node&&0===h.offset&&h.node.previousSibling;)h=l(h.node.previousSibling);h.node&&h.offset>0&&3===h.node.nodeType&&" "===h.node.nodeValue.charAt(h.offset-1)&&h.offset>1&&(y=h.node,y.splitText(h.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=s(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=s())),n[0].selector&&n[0].expand!==Y&&!n[0].inline&&(g=d(g,"previousSibling"),y=d(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(q(g)||(g=s(!0)),q(y)||(y=s()))),1==g.nodeType&&(v=j(g),g=g.parentNode),1==y.nodeType&&(b=j(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function B(e,t,n,r){var i,o,a;if(!_(n,e))return Y;if("all"!=e.remove)for(nt(e.styles,function(e,i){e=S(k(e,t),i),"number"==typeof i&&(i=e,r=0),(!r||N(E(r,i),e))&&z.setStyle(n,i,""),a=1}),a&&""===z.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),nt(e.attributes,function(e,i){var o;if(e=k(e,t),"number"==typeof i&&(i=e,r=0),!r||N(z.getAttrib(r,i),e)){if("class"==i&&(e=z.getAttrib(n,i),e&&(o="",nt(e.split(/\s+/),function(e){/mce\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void z.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),G.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),nt(e.classes,function(e){e=k(e,t),(!r||z.hasClass(r,e))&&z.removeClass(n,e)}),o=z.getAttribs(n),i=0;ia?a:o]),3===r.nodeType&&n&&o>=r.nodeValue.length&&(r=new e(r,i.getBody()).next()||r),3!==r.nodeType||n||0!==o||(r=new e(r,i.getBody()).prev()||r),r}function O(t,n,r){function a(e){var t=z.create("span",{id:y,"data-mce-bogus":!0,style:b?"color:red":""});return e&&t.appendChild(i.getDoc().createTextNode(K)),t}function s(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==K||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function l(e){for(;e;){if(e.id===y)return e;e=e.parentNode}}function c(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=W.getRng(!0),s(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),z.remove(e)):(n=c(e),n.nodeValue.charAt(0)===K&&(n=n.deleteData(0,1)),z.remove(e,1)),W.setRng(r);else if(e=l(W.getStart()),!e)for(;e=z.get(y);)d(e,!1)}function f(){var e,t,i,o,s,d,f;e=W.getRng(!0),o=e.startOffset,d=e.startContainer,f=d.nodeValue,t=l(W.getStart()),t&&(i=c(t)),f&&o>0&&o=0;p--)c.appendChild(z.clone(f[p],!1)),c=c.firstChild;c.appendChild(z.doc.createTextNode(K)),c=c.firstChild;var g=z.getParent(d,o);g&&z.isEmpty(g)?d.parentNode.replaceChild(h,d):z.insertAfter(h,d),W.setCursorLocation(c,1),z.isEmpty(d)&&z.remove(d)}}function g(){var e;e=l(W.getStart()),e&&!z.isEmpty(e)&&it(e,function(e){1!=e.nodeType||e.id===y||z.isEmpty(e)||z.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var y="_mce_caret",b=i.settings.caret_debug;i._hasCaretEvents||(tt=function(){var e=[],t;if(s(l(W.getStart()),e))for(t=e.length;t--;)z.setAttrib(e[t],"data-mce-bogus","1")},et=function(e){var t=e.keyCode;d(),(8==t||37==t||39==t)&&d(l(W.getStart())),g()},i.on("SetContent",function(e){e.selection&&g()}),i._hasCaretEvents=!0),"apply"==t?f():p()}function I(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if(3==n.nodeType&&r>=n.nodeValue.length&&(r=j(n),n=n.parentNode,i=!0),1==n.nodeType)for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,z.getParent(n,z.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!T(a))return l=z.create("a",null,K),a.parentNode.insertBefore(l,a),t.setStart(a,0),W.setRng(t),void z.remove(l)}var F={},z=i.dom,W=i.selection,V=new t(z),U=i.schema.isValidChild,q=z.isBlock,$=i.settings.forced_root_block,j=z.nodeIndex,K="\ufeff",G=/^(src|href|style)$/,Y=!1,X=!0,J,Q,Z=z.getContentEditable,et,tt,nt=n.each,rt=n.grep,it=n.walk,ot=n.extend;ot(this,{get:u,register:d,apply:h,remove:m,toggle:g,match:y,matchAll:b,matchNode:v,canApply:C,formatChanged:x,getCssText:w}),l(),c(),i.on("BeforeGetContent",function(){tt&&tt()}),i.on("mouseup keydown",function(e){et&&et(e)})}}),r(H,[g,p],function(e,t){var n=t.trim,r;return r=new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","]+data-mce-bogus[^>]+><\\/div>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi"),function(t){function i(){return n(t.getContent({format:"raw",no_events:1}).replace(r,""))}function o(e){a.typing=!1,a.add({},e)}var a=this,s=0,l=[],c,u,d=0;return t.on("init",function(){a.add()}),t.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&a.beforeChange()}),t.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&o(e)}),t.on("ObjectResizeStart",function(){a.beforeChange()}),t.on("SaveContent ObjectResized blur",o),t.on("DragEnd",o),t.on("KeyUp",function(n){var r=n.keyCode;(r>=33&&36>=r||r>=37&&40>=r||45==r||13==r||n.ctrlKey)&&(o(),t.nodeChanged()),(46==r||8==r||e.mac&&(91==r||93==r))&&t.nodeChanged(),u&&a.typing&&(t.isDirty()||(t.isNotDirty=!l[0]||i()==l[0].content,t.isNotDirty||t.fire("change",{level:l[0],lastLevel:null})),t.fire("TypingUndo"),u=!1,t.nodeChanged())}),t.on("KeyDown",function(e){var t=e.keyCode;return t>=33&&36>=t||t>=37&&40>=t||45==t?void(a.typing&&o(e)):void((16>t||t>20)&&224!=t&&91!=t&&!a.typing&&(a.beforeChange(),a.typing=!0,a.add({},e),u=!0))}),t.on("MouseDown",function(e){a.typing&&o(e)}),t.addShortcut("ctrl+z","","Undo"),t.addShortcut("ctrl+y,ctrl+shift+z","","Redo"),t.on("AddUndo Undo Redo ClearUndos MouseUp",function(e){e.isDefaultPrevented()||t.nodeChanged()}),a={data:l,typing:!1,beforeChange:function(){d||(c=t.selection.getBookmark(2,!0))},add:function(e,n){var r,o=t.settings,a;if(e=e||{},e.content=i(),d||t.removed)return null;if(a=l[s],t.fire("BeforeAddUndo",{level:e,lastLevel:a,originalEvent:n}).isDefaultPrevented())return null;if(a&&a.content==e.content)return null;if(l[s]&&(l[s].beforeBookmark=c),o.custom_undo_redo_levels&&l.length>o.custom_undo_redo_levels){for(r=0;r0&&(t.isNotDirty=!1,t.fire("change",u)),e},undo:function(){var e;return a.typing&&(a.add(),a.typing=!1),s>0&&(e=l[--s],0===s&&(t.isNotDirty=!0),t.setContent(e.content,{format:"raw"}),t.selection.moveToBookmark(e.beforeBookmark),t.fire("undo",{level:e})),e},redo:function(){var e;return s0||a.typing&&l[0]&&i()!=l[0].content},hasRedo:function(){return sD)&&(u=a.create("br"),t.parentNode.insertBefore(u,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0),l.setEnd(t,0));s.setRng(l),a.remove(u),s.scrollIntoView(t)}function g(e){var t=l.forced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function v(e){var t=R,n,i,o;if(e||"TABLE"==O?(n=a.create(e||F),g(n)):n=B.cloneNode(!1),o=n,l.keep_styles!==!1)do if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(t.nodeName)){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while(t=t.parentNode);return r||(o.innerHTML='
      '),n}function y(t){var n,r,i;if(3==R.nodeType&&(t?A>0:A0)return!0}function w(){var e,t,n;R&&3==R.nodeType&&A>=R.nodeValue.length&&(r||x()||(e=a.create("br"),S.insertNode(e),S.setStartAfter(e),S.setEndAfter(e),t=!0)),e=a.create("br"),S.insertNode(e),r&&"PRE"==O&&(!D||8>D)&&e.parentNode.insertBefore(a.doc.createTextNode("\r"),e),n=a.create("span",{}," "),e.parentNode.insertBefore(n,e),s.scrollIntoView(n),a.remove(n),t?(S.setStartBefore(e),S.setEndBefore(e)):(S.setStartAfter(e),S.setEndAfter(e)),s.setRng(S),c.add()}function _(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;while(e)}function N(e){var t=a.getRoot(),n,r;for(n=e;n!==t&&"false"!==a.getContentEditable(n);)"true"===a.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function E(e){var t;r||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(a.getStyle(t,"float",!0)))&&a.add(e,"br"))}var S,k,T,R,A,B,D,L,M,H,P,O,I,F,z;if(S=s.getRng(!0),!o.isDefaultPrevented()){if(!S.collapsed)return void i.execCommand("Delete");if(new t(a).normalize(S),R=S.startContainer,A=S.startOffset,F=(l.force_p_newlines?"p":"")||l.forced_root_block,F=F?F.toUpperCase():"",D=a.doc.documentMode,L=o.shiftKey,1==R.nodeType&&R.hasChildNodes()&&(z=A>R.childNodes.length-1,R=R.childNodes[Math.min(A,R.childNodes.length-1)]||R,A=z&&3==R.nodeType?R.nodeValue.length:0),T=N(R)){if(c.beforeChange(),!a.isBlock(T)&&T!=a.getRoot())return void((!F||L)&&w());if((F&&!L||!F&&L)&&(R=b(R,A)),B=a.getParent(R,a.isBlock),P=B?a.getParent(B.parentNode,a.isBlock):null,O=B?B.nodeName.toUpperCase():"",I=P?P.nodeName.toUpperCase():"","LI"!=I||o.ctrlKey||(B=P,O=I),"LI"==O){if(!F&&L)return void w();if(a.isEmpty(B))return void C()}if("PRE"==O&&l.br_in_pre!==!1){if(!L)return void w()}else if(!F&&!L&&"LI"!=O||F&&L)return void w();F&&B===i.getBody()||(F=F||"P",y()?(M=/^(H[1-6]|PRE|FIGURE)$/.test(O)&&"HGROUP"!=I?v(F):v(),l.end_container_on_empty_block&&f(P)&&a.isEmpty(B)?M=a.split(P,B):a.insertAfter(M,B),m(M)):y(!0)?(M=B.parentNode.insertBefore(v(),B),p(M),m(B)):(k=S.cloneRange(),k.setEndAfter(B),H=k.extractContents(),_(H),M=H.firstChild,a.insertAfter(H,B),h(M),E(B),m(M)),a.setAttrib(M,"id",""),i.fire("NewBlock",{newBlock:M}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,u=i.schema,d=u.getNonEmptyElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(O,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,p,h,m=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",m),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",m)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){h=t,t=t.nextSibling,r.remove(h);continue}p||(p=r.create(C,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(p,t),g=!0),h=t,t=t.nextSibling,p.appendChild(h)}else p=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("NodeChange",t)}}),r(I,[S,g,p],function(e,n,r){var i=r.each,o=r.extend,a=r.map,s=r.inArray,l=r.explode,c=n.gecko,u=n.ie,d=!0,f=!1;return function(r){function p(e,t,n){var r;return e=e.toLowerCase(),(r=N.exec[e])?(r(e,t,n),d):f}function h(e){var t;return e=e.toLowerCase(),(t=N.state[e])?t(e):-1}function m(e){var t;return e=e.toLowerCase(),(t=N.value[e])?t(e):f}function g(e,t){t=t||"exec",i(e,function(e,n){i(n.toLowerCase().split(","),function(n){N[t][n]=e})})}function v(e,n,i){return n===t&&(n=f),i===t&&(i=null),r.getDoc().execCommand(e,n,i)}function y(e){return S.match(e)}function b(e,n){S.toggle(e,n?{value:n}:t),r.nodeChanged()}function C(e){k=_.getBookmark(e)}function x(){_.moveToBookmark(k)}var w=r.dom,_=r.selection,N={state:{},exec:{},value:{}},E=r.settings,S=r.formatter,k;o(this,{execCommand:p,queryCommandState:h,queryCommandValue:m,addCommands:g}),g({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){r.undoManager.add()},"Cut,Copy,Paste":function(e){var t=r.getDoc(),i;try{v(e)}catch(o){i=d}if(i||!t.queryCommandSupported(e)){var a=r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");n.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),r.windowManager.alert(a)}},unlink:function(){if(_.isCollapsed()){var e=_.getNode();return void("A"==e.tagName&&r.dom.remove(e,!0))}S.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t=e.substring(7);"full"==t&&(t="justify"),i("left,center,right,justify".split(","),function(e){t!=e&&S.remove("align"+e)}),b("align"+t),p("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;v(e),t=w.getParent(_.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(C(),w.split(n,t),x()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){b(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){b(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=l(E.font_size_style_values),r=l(E.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),b(e,n)},RemoveFormat:function(e){S.remove(e)},mceBlockQuote:function(){b("blockquote")},FormatBlock:function(e,t,n){return b(n||"p")},mceCleanup:function(){var e=_.getBookmark();r.setContent(r.getContent({cleanup:d}),{cleanup:d}),_.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var i=n||_.getNode();i!=r.getBody()&&(C(),r.dom.remove(i,d),x())},mceSelectNodeDepth:function(e,t,n){var i=0;w.getParent(_.getNode(),function(e){return 1==e.nodeType&&i++==n?(_.select(e),f):void 0},r.getBody())},mceSelectNode:function(e,t,n){_.select(n)},mceInsertContent:function(t,n,i){function o(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=_.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^ /," "):t("previousSibling")||(e=e.replace(/^ /," ")),i|)$/," "):t("nextSibling")||(e=e.replace(/( | )(
      |)$/," "))),e}var a,s,l,c,d,f,p,h,m,g,v;/^ | $/.test(i)&&(i=o(i)),a=r.parser,s=new e({},r.schema),v='ÈB;',f={content:i,format:"html",selection:!0},r.fire("BeforeSetContent",f),i=f.content,-1==i.indexOf("{$caret}")&&(i+="{$caret}"),i=i.replace(/\{\$caret\}/,v),h=_.getRng();var y=h.startContainer||(h.parentElement?h.parentElement():null),b=r.getBody();y===b&&_.isCollapsed()&&w.isBlock(b.firstChild)&&w.isEmpty(b.firstChild)&&(h=w.createRng(),h.setStart(b.firstChild,0),h.setEnd(b.firstChild,0),_.setRng(h)),_.isCollapsed()||r.getDoc().execCommand("Delete",!1,null),l=_.getNode();var C={context:l.nodeName.toLowerCase()};if(d=a.parse(i,C),m=d.lastChild,"mce_marker"==m.attr("id"))for(p=m,m=m.prev;m;m=m.walk(!0))if(3==m.type||!w.isBlock(m.name)){m.parent.insert(p,m,"br"===m.name);break}if(C.invalid){for(_.setContent(v),l=_.getNode(),c=r.getBody(),9==l.nodeType?l=m=c:m=l;m!==c;)l=m,m=m.parentNode;i=l==c?c.innerHTML:w.getOuterHTML(l),i=s.serialize(a.parse(i.replace(//i,function(){return s.serialize(d)}))),l==c?w.setHTML(c,i):w.setOuterHTML(l,i)}else i=s.serialize(d),m=l.firstChild,g=l.lastChild,!m||m===g&&"BR"===m.nodeName?w.setHTML(l,i):_.setContent(i);p=w.get("mce_marker"),_.scrollIntoView(p),h=w.createRng(),m=p.previousSibling,m&&3==m.nodeType?(h.setStart(m,m.nodeValue.length),u||(g=p.nextSibling,g&&3==g.nodeType&&(m.appendData(g.data),g.parentNode.removeChild(g)))):(h.setStartBefore(p),h.setEndBefore(p)),w.remove(p),_.setRng(h),r.fire("SetContent",f),r.addVisual()},mceInsertRawHTML:function(e,t,n){_.setContent("tiny_mce_marker"),r.setContent(r.getContent().replace(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){b(n)},mceSetContent:function(e,t,n){r.setContent(n)},"Indent,Outdent":function(e){var t,n,o;t=E.indentation,n=/[a-z%]+$/i.exec(t),t=parseInt(t,10),h("InsertUnorderedList")||h("InsertOrderedList")?v(e):(E.forced_root_block||w.getParent(_.getNode(),w.isBlock)||S.apply("div"),i(_.getSelectedBlocks(),function(i){if("LI"!=i.nodeName){var a=r.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==w.getStyle(i,"direction",!0)?"Right":"Left","outdent"==e?(o=Math.max(0,parseInt(i.style[a]||0,10)-t),w.setStyle(i,a,o?o+n:"")):(o=parseInt(i.style[a]||0,10)+t+n,w.setStyle(i,a,o))}}))},mceRepaint:function(){if(c)try{C(d),_.getSel()&&_.getSel().selectAllChildren(r.getBody()),_.collapse(d),x()}catch(e){}},InsertHorizontalRule:function(){r.execCommand("mceInsertContent",!1,"
      ")},mceToggleVisualAid:function(){r.hasVisual=!r.hasVisual,r.addVisual()},mceReplaceContent:function(e,t,n){r.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,_.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=w.getParent(_.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||S.remove("link"),n.href&&S.apply("link",n,r)},selectAll:function(){var e=w.getRoot(),t;_.getRng().setStart?(t=w.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),_.setRng(t)):(t=_.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){v("Delete");var e=r.getBody();w.isEmpty(e)&&(r.setContent(""),e.firstChild&&w.isBlock(e.firstChild)?r.selection.setCursorLocation(e.firstChild,0):r.selection.setCursorLocation(e,0))},mceNewDocument:function(){r.setContent("")}}),g({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=_.isCollapsed()?[w.getParent(_.getNode(),w.isBlock)]:_.getSelectedBlocks(),r=a(n,function(e){return!!S.matchNode(e,t)});return-1!==s(r,d)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return y(e)},mceBlockQuote:function(){return y("blockquote")},Outdent:function(){var e;if(E.inline_styles){if((e=w.getParent(_.getStart(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d;if((e=w.getParent(_.getEnd(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d +}return h("InsertUnorderedList")||h("InsertOrderedList")||!E.inline_styles&&!!w.getParent(_.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=w.getParent(_.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),g({"FontSize,FontName":function(e){var t=0,n;return(n=w.getParent(_.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),g({Undo:function(){r.undoManager.undo()},Redo:function(){r.undoManager.redo()}})}}),r(F,[p],function(e){function t(e,i){var o=this,a,s;if(e=r(e),i=o.settings=i||{},/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(o.source=e);var l=0===e.indexOf("//");0!==e.indexOf("/")||l||(e=(i.base_uri?i.base_uri.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(s=i.base_uri?i.base_uri.path:new t(location.href).directory,e=""===i.base_uri.protocol?"//mce_host"+o.toAbsPath(s,e):(i.base_uri&&i.base_uri.protocol||"http")+"://mce_host"+o.toAbsPath(s,e)),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),o[t]=r}),a=i.base_uri,a&&(o.protocol||(o.protocol=a.protocol),o.userInfo||(o.userInfo=a.userInfo),o.port||"mce_host"!==o.host||(o.port=a.port),o.host&&"mce_host"!==o.host||(o.host=a.host),o.source=""),l&&(o.protocol="")}var n=e.each,r=e.trim,i={ftp:21,http:80,https:443,mailto:25};return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(n&&this.isSameOrigin(e))},isSameOrigin:function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=i[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.lengtho;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o];return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t}),r(z,[p],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],u[d]="function"==typeof f&&c[d]?s(d,f):f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(W,[p],function(e){function t(e){function t(){return!1}function n(){return!0}function r(r,i){var o,a,s,u;if(r=r.toLowerCase(),i=i||{},i.type=r,i.target||(i.target=l),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),e.beforeFire&&e.beforeFire(i),o=c[r])for(a=0,s=o.length;s>a;a++){if(o[a]=u=o[a],i.isImmediatePropagationStopped())return i.stopPropagation(),i;if(u.call(l,i)===!1)return i.preventDefault(),i}return i}function i(e,n,r){var i,o,a;if(n===!1&&(n=t),n)for(o=e.toLowerCase().split(" "),a=o.length;a--;)e=o[a],i=c[e],i||(i=c[e]=[],u(e,!0)),r?i.unshift(n):i.push(n);return s}function o(e,t){var n,r,i,o,a;if(e)for(o=e.toLowerCase().split(" "),n=o.length;n--;){if(e=o[n],r=c[e],!e){for(i in c)u(i,!1),delete c[i];return s}if(r){if(t)for(a=r.length;a--;)r[a]===t&&r.splice(a,1);else r.length=0;r.length||(u(e,!1),delete c[e])}}else{for(e in c)u(e,!1);c={}}return s}function a(e){return e=e.toLowerCase(),!(!c[e]||0===c[e].length)}var s=this,l,c={},u;e=e||{},l=e.scope||s,u=e.toggleEvent||t,s.fire=r,s.on=i,s.off=o,s.has=a}var n=e.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit"," ");return t.isNative=function(e){return!!n[e.toLowerCase()]},t}),r(V,[z],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.hasClass(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function u(e){e&&r.push(e)}var d;return d=n.exec(e.replace(i,"")),u(t(d[1])),u(o(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),r.psuedo=!!d[7],r.direct=c,r}function u(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&u(i,t),e=[],a=0;a"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,u,d,f,p,h;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,h=e,p=0,i=o-1;i>=0;i--)for(c=a[i];h;){if(c.psuedo)for(f=h.parent().items(),u=d=f.length;u--&&f[u]!==h;);for(s=0,l=c.length;l>s;s++)if(!c[s](h,u,d)){s=l+1;break}if(s===l){p++;break}if(i===o-1)break;h=h.parent()}if(p===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,u=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(u.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(U,[p,V,z],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].hasClass(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this}},e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(q,[p,y],function(e,t){return{id:function(){return t.DOM.uniqueId()},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r($,[z,p,W,U,q],function(e,t,n,r,i){function o(e){return e._eventDispatcher||(e._eventDispatcher=new n({scope:e,toggleEvent:function(t,r){r&&n.isNative(t)&&(e._nativeEvents||(e._nativeEvents={}),e._nativeEvents[t]=!0,e._rendered&&e.bindPendingEvents())}})),e._eventDispatcher}var a={},s="onmousewheel"in document,l=!1,c="mce-",u=e.extend({Statics:{elementIdCache:a,classPrefix:c},isRtl:function(){return u.rtl},classPrefix:c,init:function(e){var n=this,r,o;if(n.settings=e=t.extend({},n.Defaults,e),n._id=e.id||i.id(),n._text=n._name="",n._width=n._height=0,n._aria={role:e.role},r=e.classes)for(r=r.split(" "),r.map={},o=r.length;o--;)r.map[r[o]]=!0;n._classes=r||[],n.visible(!0),t.each("title text width height name classes visible disabled active value".split(" "),function(t){var r=e[t],i;r!==i?n[t](r):n["_"+t]===i&&(n["_"+t]=!1)}),n.on("click",function(){return n.disabled()?!1:void 0}),e.classes&&t.each(e.classes.split(" "),function(e){n.addClass(e)}),n.settings=e,n._borderBox=n.parseBox(e.border),n._paddingBox=n.parseBox(e.padding),n._marginBox=n.parseBox(e.margin),e.hidden&&n.hide()},Properties:"parent,title,text,width,height,disabled,active,name,value",Methods:"renderHtml",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},borderBox:function(){return this._borderBox},paddingBox:function(){return this._paddingBox},marginBox:function(){return this._marginBox},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}},initLayoutRect:function(){var e=this,t=e.settings,n,r,o=e.getEl(),a,s,l,c,u,d,f,p;n=e._borderBox=e._borderBox||e.measureBox(o,"border"),e._paddingBox=e._paddingBox||e.measureBox(o,"padding"),e._marginBox=e._marginBox||e.measureBox(o,"margin"),p=i.getSize(o),d=t.minWidth,f=t.minHeight,l=d||p.width,c=f||p.height,a=t.width,s=t.height,u=t.autoResize,u="undefined"!=typeof u?u:!a&&!s,a=a||l,s=s||c;var h=n.left+n.right,m=n.top+n.bottom,g=t.maxWidth||65535,v=t.maxHeight||65535;return e._layoutRect=r={x:t.x||0,y:t.y||0,w:a,h:s,deltaW:h,deltaH:m,contentW:a-h,contentH:s-m,innerW:a-h,innerH:s-m,startMinWidth:d||0,startMinHeight:f||0,minW:Math.min(l,g),minH:Math.min(c,v),maxW:g,maxH:v,autoResize:u,scrollW:0},e._lastLayoutRect={},r},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,l;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=in.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=in.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=in.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=in.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(l=u.repaintControls,l&&l.map&&!l.map[t._id]&&(l.push(t),l.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o=0,a=0,s,l;l=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,r=e._layoutRect,s=e._lastRepaintRect||{},i=e._borderBox,o=i.left+i.right,a=i.top+i.bottom,r.x!==s.x&&(t.left=l(r.x)+"px",s.x=r.x),r.y!==s.y&&(t.top=l(r.y)+"px",s.y=r.y),r.w!==s.w&&(t.width=l(r.w-o)+"px",s.w=r.w),r.h!==s.h&&(t.height=l(r.h-a)+"px",s.h=r.h),e._hasBody&&r.innerW!==s.innerW&&(n=e.getEl("body").style,n.width=l(r.innerW)+"px",s.innerW=r.innerW),e._hasBody&&r.innerH!==s.innerH&&(n=n||e.getEl("body").style,n.height=l(r.innerH)+"px",s.innerH=r.innerH),e._lastRepaintRect=s,e.fire("repaint",{},!1)},on:function(e,t){function n(e){var t,n;return"string"!=typeof e?e:function(i){return t||r.parentsAndSelf().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t.call(n,i)}}var r=this;return o(r).on(e,n(t)),r},off:function(e,t){return o(this).off(e,t),this},fire:function(e,t,n){var r=this;if(t=t||{},t.control||(t.control=r),t=o(r).fire(e,t),n!==!1&&r.parent)for(var i=r.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return o(this).has(e)},parents:function(e){var t=this,n,i=new r;for(n=t.parent();n;n=n.parent())i.add(n);return e&&(i=i.filter(e)),i},parentsAndSelf:function(e){return new r(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},findCommonAncestor:function(e,t){for(var n;e;){for(n=t;n&&e!=n;)n=n.parent();if(e==n)break;e=e.parent()}return e},hasClass:function(e,t){var n=this._classes[t||"control"];return e=this.classPrefix+e,n&&!!n.map[e]},addClass:function(e,t){var n=this,r,i;return e=this.classPrefix+e,r=n._classes[t||"control"],r||(r=[],r.map={},n._classes[t||"control"]=r),r.map[e]||(r.map[e]=e,r.push(e),n._rendered&&(i=n.getEl(t),i&&(i.className=r.join(" ")))),n},removeClass:function(e,t){var n=this,r,i,o;if(e=this.classPrefix+e,r=n._classes[t||"control"],r&&r.map[e])for(delete r.map[e],i=r.length;i--;)r[i]===e&&r.splice(i,1);return n._rendered&&(o=n.getEl(t),o&&(o.className=r.join(" "))),n},toggleClass:function(e,t,n){var r=this;return t?r.addClass(e,n):r.removeClass(e,n),r},classes:function(e){var t=this._classes[e||"control"];return t?t.join(" "):""},innerHtml:function(e){return i.innerHtml(this.getEl(),e),this},getEl:function(e,t){var n,r=e?this._id+"-"+e:this._id;return n=a[r]=(t===!0?null:a[r])||i.get(r)},visible:function(e){var t=this,n;return"undefined"!=typeof e?(t._visible!==e&&(t._rendered&&(t.getEl().style.display=e?"":"none"),t._visible=e,n=t.parent(),n&&(n._lastRect=null),t.fire(e?"show":"hide")),t):t._visible},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n._rendered&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},translate:function(e){return u.translate?u.translate(e):e},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),r,o;if(e.items){var s=e.items().toArray();for(o=s.length;o--;)s[o].remove()}n&&n.items&&(r=[],n.items().each(function(t){t!==e&&r.push(t)}),n.items().set(r),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&i.off(t);var l=e.getRoot().controlIdLookup;if(l&&delete l[e._id],delete a[e._id],t&&t.parentNode){var c=t.getElementsByTagName("*");for(o=c.length;o--;)delete a[c[o].id];t.parentNode.removeChild(t)}return e._rendered=!1,e},renderBefore:function(e){var t=this;return e.parentNode.insertBefore(i.createFragment(t.renderHtml()),e),t.postRender(),t},renderTo:function(e){var t=this;return e=e||t.getContainerElm(),e.appendChild(i.createFragment(t.renderHtml())),t.postRender(),t},postRender:function(){var e=this,t=e.settings,n,r,o,a,s;for(a in t)0===a.indexOf("on")&&e.on(a.substr(2),t[a]);if(e._eventsRoot){for(o=e.parent();!s&&o;o=o.parent())s=o._eventsRoot;if(s)for(a in s._nativeEvents)e._nativeEvents[a]=!0}e.bindPendingEvents(),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e._visible||i.css(e.getEl(),"display","none"),e.settings.border&&(r=e.borderBox(),i.css(e.getEl(),{"border-top-width":r.top,"border-right-width":r.right,"border-bottom-width":r.bottom,"border-left-width":r.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var c in e._aria)e.aria(c,e._aria[c]);e.fire("postrender",{},!1)},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},bindPendingEvents:function(){function e(e){var t=o.getParentCtrl(e.target);t&&t.fire(e.type,e)}function t(){var e=d._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),d._lastHoverCtrl=null)}function n(e){var t=o.getParentCtrl(e.target),n=d._lastHoverCtrl,r=0,i,a,s;if(t!==n){if(d._lastHoverCtrl=t,a=t.parents().toArray().reverse(),a.push(t),n){for(s=n.parents().toArray().reverse(),s.push(n),r=0;r=r;i--)n=s[i],n.fire("mouseleave",{target:n.getEl()})}for(i=r;ia;a++)d=u[a]._eventsRoot;for(d||(d=u[u.length-1]||o),o._eventsRoot=d,c=a,a=0;c>a;a++)u[a]._eventsRoot=d;var h=d._delegates;h||(h=d._delegates={});for(p in f){if(!f)return!1;"wheel"!==p||l?("mouseenter"===p||"mouseleave"===p?d._hasMouseEnter||(i.on(d.getEl(),"mouseleave",t),i.on(d.getEl(),"mouseover",n),d._hasMouseEnter=1):h[p]||(i.on(d.getEl(),p,e),h[p]=!0),f[p]=!1):s?i.on(o.getEl(),"mousewheel",r):i.on(o.getEl(),"DOMMouseScroll",r)}}},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){return this.repaint(),this}});return u}),r(j,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r(K,[],function(){return function(e){function t(e){return e=e||b,e&&e.getAttribute("role")}function n(e){for(var n,r=e||b;r=r.parentNode;)if(n=t(r))return n}function r(e){var t=b;return t?t.getAttribute("aria-"+e):void 0}function i(e){var t=e.tagName.toUpperCase();return"INPUT"==t||"TEXTAREA"==t}function o(e){return i(e)&&!e.hidden?!0:/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(t(e))?!0:!1}function a(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){o(e)&&n.push(e);for(var r=0;re?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function u(e,t){var n=-1,r=s();t=t||a(r.getEl());for(var i=0;i=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r,i;t.parent(e),t._rendered||(r=e.getEl("body"),i=a.createFragment(t.renderHtml()),r.hasChildNodes()&&n<=r.childNodes.length-1?r.insertBefore(i,r.childNodes[n]):r.appendChild(i),t.postRender())}),e._layout.applyClasses(e),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t=0&&t
      '+(e.settings.html||"")+t.renderHtml(e)+"
      "},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e._rendered=!0,e.settings.style&&a.css(e.getEl(),e.settings.style),e.settings.border&&(t=e.borderBox(),a.css(e.getEl(),{"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(Y,[q],function(e){function t(){var e=document,t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}return function(n,r){function i(){return a.getElementById(r.handle||n)}var o,a=document,s,l,c,u,d,f;r=r||{},l=function(n){var l=t(),p,h;n.preventDefault(),s=n.button,p=i(),d=n.screenX,f=n.screenY,h=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,o=a.createElement("div"),e.css(o,{position:"absolute",top:0,left:0,width:l.width,height:l.height,zIndex:2147483647,opacity:1e-4,background:"red",cursor:h}),a.body.appendChild(o),e.on(a,"mousemove",u),e.on(a,"mouseup",c),r.start(n)},u=function(e){return e.button!==s?c(e):(e.deltaX=e.screenX-d,e.deltaY=e.screenY-f,e.preventDefault(),void r.drag(e))},c=function(t){e.off(a,"mousemove",u),e.off(a,"mouseup",c),o.parentNode.removeChild(o),r.stop&&r.stop(t)},this.destroy=function(){e.off(i())},e.on(i(),"mousedown",l)}}),r(X,[q,Y],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,p,h,m,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),i.getEl("absend")&&e.css(i.getEl("absend"),y,i.layoutRect()[l]-1),!c)return void e.css(f,"display","none");e.css(f,"display","block"),d=i.getEl("body"),p=i.getEl("scroll"+t+"t"),h=d["client"+s]-2*o,h-=n&&r?f["client"+u]:0,m=d["scroll"+s],g=h/m,v={},v[y]=d["offset"+a]+o,v[b]=h,e.css(f,v),v={},v[y]=d["scroll"+a]*g,v[b]=h*g,e.css(p,v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;i.getEl().appendChild(e.createFragment('
      ')),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e.addClass(e.get(u),d+"active")},drag:function(e){var t,u,d,f,p=i.layoutRect();u=p.contentW>p.innerW,d=p.contentH>p.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e.removeClass(e.get(u),d+"active")}})}i.addClass("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e.on(i.getEl("body"),"scroll",n)),n())}}}),r(J,[G,X],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
      '+t.renderHtml(e)+"
      ":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
      '+(e._preBodyHtml||"")+n+"
      "}})}),r(Q,[q],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,p;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t._fixed&&(a-=f.x,s-=f.y),i=t.getEl(),p=e.getSize(i),l=p.width,c=p.height,p=e.getSize(n),u=p.width,d=p.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i._rendered?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(Z,[q],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(et,[J,Q,Z,q],function(e,t,n,r){function i(e){var t;for(t=s.length;t--;)s[t]===e&&s.splice(t,1);for(t=l.length;t--;)l[t]===e&&l.splice(t,1)}var o,a,s=[],l=[],c,u=e.extend({Mixins:[t,n],init:function(e){function t(){var e,t=u.zIndex||65535,n;if(l.length)for(e=0;en&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY
      '),n=n.firstChild,d.getContainerElm().appendChild(n),setTimeout(function(){r.addClass(n,i+"in"),r.addClass(d.getEl(),i+"in")},0),c=!0),l.push(d),t()}}),d.on("close hide",function(e){if(e.control==d){for(var n=l.length;n--;)l[n]===d&&l.splice(n,1);t()}}),d.on("show",function(){d.parents().each(function(e){return e._fixed?(d.fixed(!0),!1):void 0})}),e.popover&&(d._preBodyHtml='
      ',d.addClass("popover").addClass("bottom").addClass(d.isRtl()?"end":"start"))},fixed:function(e){var t=this;if(t._fixed!=e){if(t._rendered){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.toggleClass("fixed",e),t._fixed=e}return t},show:function(){var e=this,t,n=e._super();for(t=s.length;t--&&s[t]!==e;);return-1===t&&s.push(e),n},hide:function(){return i(this),this._super()},hideAll:function(){u.hideAll()},close:function(){var e=this;return e.fire("close"),e.remove()},remove:function(){i(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return u.hideAll=function(){for(var e=s.length;e--;){var t=s[e];t&&t.settings.autohide&&(t.hide(),s.splice(e,1))}},u}),r(tt,[et,J,q,Y],function(e,t,n,r){var i=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.isRtl()&&n.addClass("rtl"),n.addClass("window"),n._fixed=!0,e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.addClass("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close()}),n.on("cancel",function(){n.close()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o,a;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=Math.max(0,a.w/2-t.w/2),t.y=Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
      '+e.encode(i.title)+'
      '),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
      '+o+'
      '+s+"
      "+a+"
      "},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.addClass("in")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new r(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t=e.classPrefix;e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),e._fullscreen&&(n.removeClass(document.documentElement,t+"fullscreen"),n.removeClass(document.body,t+"fullscreen"))},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});return i}),r(nt,[tt],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){i(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(rt,[tt,nt],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,i.open=function(t,r){var i;return n.editorManager.activeEditor=n,t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},n.nodeChanged(),i.renderTo().reflow()},i.alert=function(e,r,i){t.alert(e,function(){r?r.call(i||this):n.focus()})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)},i.getWindows=function(){return o}}}),r(it,[R,B,x,m,g,p],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function u(){function t(e){var t=new i(function(){});o.each(a.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&a.dom.setAttrib(e,"style",e.getAttribute("style"))}),t.observe(a.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null);var n=a.selection.getRng(),r=n.startContainer.parentNode;o.each(t.takeRecords(),function(e){if(q.isChildOf(e.target,a.getBody())){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}o.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),q.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),a.selection.setRng(n))}})}}),t.disconnect(),o.each(a.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")})}var n=a.getDoc(),r="data:text/mce-internal,",i=window.MutationObserver,s,l;i||(s=!0,i=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMSubtreeModified",e,!1),r.removeEventListener("DOMNodeInsertedIntoDocument",e,!1),r.removeEventListener("DOMNodeInserted",e,!1),r.removeEventListener("DOMAttrModified",t,!1)},this.takeRecords=function(){return n}}),a.on("keydown",function(n){var r=n.keyCode==U,i=e.metaKeyPressed(n);if(!c(n)&&(r||n.keyCode==V)){var o=a.selection.getRng(),s=o.startContainer,l=o.startOffset;if(!i&&o.collapsed&&3==s.nodeType&&(r?l0))return;n.preventDefault(),i&&a.selection.getSel().modify("extend",r?"forward":"backward","word"),t(r)}}),a.on("keypress",function(n){c(n)||$.isCollapsed()||!n.charCode||e.metaKeyPressed(n)||(n.preventDefault(),t(!0),a.selection.setContent(String.fromCharCode(n.charCode)))}),a.addCommand("Delete",function(){t()}),a.addCommand("ForwardDelete",function(){t(!0)}),s||(a.on("dragstart",function(e){var t;a.selection.isCollapsed()&&"IMG"==e.target.tagName&&$.select(e.target),l=$.getRng(),t=a.selection.getContent(),t.length>0&&e.dataTransfer.setData("URL","data:text/mce-internal,"+escape(t))}),a.on("drop",function(e){if(!c(e)){var i=e.dataTransfer.getData("URL");if(!i||-1==i.indexOf(r)||!n.caretRangeFromPoint)return;i=unescape(i.substr(r.length)),n.caretRangeFromPoint&&(e.preventDefault(),window.setTimeout(function(){var r=n.caretRangeFromPoint(e.x,e.y);l&&($.setRng(l),l=null),t(),$.setRng(r),a.insertContent(i)},0))}}),a.on("cut",function(e){!c(e)&&e.clipboardData&&(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",a.selection.getContent()),e.clipboardData.setData("text/plain",a.selection.getContent({format:"text"})),t(!0))}))}function d(){function e(e){var t=q.create("body"),n=e.cloneContents();return t.appendChild(n),$.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(a.getBody()),t.compareRanges(n,r)}var i=e(n),o=q.createRng();o.selectNode(a.getBody());var s=e(o);return i===s}a.on("keydown",function(e){var t=e.keyCode,r,i;if(!c(e)&&(t==U||t==V)){if(r=a.selection.isCollapsed(),i=a.getBody(),r&&!q.isEmpty(i))return;if(!r&&!n(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),i.firstChild&&q.isBlock(i.firstChild)?a.selection.setCursorLocation(i.firstChild,0):a.selection.setCursorLocation(i,0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(q.bind(a.getDoc(),"focusin",function(){$.setRng($.getRng())}),q.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getBody().focus(),$.setRng($.getRng()))}))}function h(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===V&&$.isCollapsed()&&0===$.getRng(!0).startOffset){var t=$.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return q.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(q.remove(n),e.preventDefault())}})}function m(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&$.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&q.hasClass(e,"mce-item-anchor")&&$.select(e),a.nodeChanged()})}function v(){function e(){var e=q.getAttribs($.getStart().cloneNode(!1));return function(){var t=$.getStart();t!==a.getBody()&&(q.setAttrib(t,"style",null),W(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!$.isCollapsed()&&q.getParent($.getStart(),q.isBlock)!=q.getParent($.getEnd(),q.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),q.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){if(!a.removed){var n=$.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)}},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===V&&$.isCollapsed()&&0===$.getRng(!0).startOffset){var t=$.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),q.addClass(a.getBody(),"mceHideBrInPre"),K.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),G.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){q.bind(a.getBody(),"mouseup",function(){var e,t=$.getNode();"IMG"==t.nodeName&&((e=q.getStyle(t,"width"))&&(q.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),q.setStyle(t,"width","")),(e=q.getStyle(t,"height"))&&(q.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),q.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=$.getRng(),r=n.startContainer,i=n.startOffset,o=q.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=q.createRng(),n.setStart(r,0),n.setEnd(r,0),$.setRng(n))}})}function N(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),j.object_resizing||s("enableObjectResizing",!1)}j.readonly||a.on("BeforeExecCommand MouseDown",e)}function E(){function e(){W(q.select("a"),function(e){var t=e.parentNode,n=q.getRoot();if(t.lastChild===e){for(;t&&!q.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}q.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function S(){j.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",j.forced_root_block)})}function k(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function T(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=V||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),q.remove(t.item(0)),a.undoManager.add()))})}function R(){var e;l()>=10&&(e="",W("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function A(){l()<9&&(K.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),G.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function B(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),q.unbind(r,"mouseup",n),q.unbind(r,"mousemove",t),a=o=0}var r=q.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,q.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(q.bind(r,"mouseup",n),q.bind(r,"mousemove",t),q.getRoot().focus(),a.select())}})}function D(){a.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||$.normalize()},!0)}function L(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function M(){a.inline||a.on("keydown",function(){document.activeElement==document.body&&a.getWin().focus()})}function H(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){"HTML"==e.target.nodeName&&(a.getBody().focus(),a.selection.normalize(),a.nodeChanged())}))}function P(){i.mac&&a.on("keydown",function(t){!e.metaKeyPressed(t)||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),a.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","word"))})}function O(){s("AutoUrlDetect",!1)}function I(){a.inline||a.on("focus blur beforegetcontent",function(){var e=a.dom.create("br");a.getBody().appendChild(e),e.parentNode.removeChild(e)},!0)}function F(){a.on("click",function(e){var t=e.target;do if("A"===t.tagName)return void e.preventDefault();while(t=t.parentNode)}),a.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function z(){a.on("init",function(){a.dom.bind(a.getBody(),"submit",function(e){e.preventDefault()})})}var W=o.each,V=e.BACKSPACE,U=e.DELETE,q=a.dom,$=a.selection,j=a.settings,K=a.parser,G=a.serializer,Y=i.gecko,X=i.ie,J=i.webkit;C(),_(),d(),D(),J&&(u(),p(),g(),S(),z(),i.iOS?(y(),M(),H(),F()):f()),X&&i.ie<11&&(h(),b(),x(),w(),T(),R(),A(),B()),i.ie>=11&&(H(),I()),i.ie&&(f(),O()),Y&&(h(),m(),v(),N(),E(),k(),L(),P())}}),r(ot,[W],function(e){function t(t){return t._eventDispatcher||(t._eventDispatcher=new e({scope:t,toggleEvent:function(n,r){e.isNative(n)&&t.toggleNativeEvent&&t.toggleNativeEvent(n,r)}})),t._eventDispatcher}return{fire:function(e,n,r){var i=this;if(i.removed&&"remove"!==e)return n;if(n=t(i).fire(e,n,r),r!==!1&&i.parent)for(var o=i.parent();o&&!n.isPropagationStopped();)o.fire(e,n,!1),o=o.parent();return n},on:function(e,n,r){return t(this).on(e,n,r)},off:function(e,n){return t(this).off(e,n)},hasEventListeners:function(e){return t(this).has(e)}}}),r(at,[ot,y,p],function(e,t,n){function r(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop/.test(t)?e.getDoc():e.getBody()}function i(e,t){var n=e.settings.event_root,i=e.editorManager,a=i.eventRootElm||r(e,t);if(n){if(i.rootEvents||(i.rootEvents={},i.on("RemoveEditor",function(){i.activeEditor||(o.unbind(a),delete i.rootEvents)})),i.rootEvents[t])return;a==e.getBody()&&(a=o.select(n)[0],i.eventRootElm=a),i.rootEvents[t]=!0,o.bind(a,t,function(e){for(var n=e.target,r=i.editors,a=r.length;a--;){var s=r[a].getBody();(s===n||o.isChildOf(n,s))&&(r[a].hidden||r[a].fire(t,e))}})}else e.dom.bind(a,t,function(n){e.hidden||e.fire(t,n)})}var o=t.DOM,a={bindPendingEventDelegates:function(){var e=this;n.each(e._pendingNativeEvents,function(t){i(e,t)})},toggleNativeEvent:function(e,t){var n=this;n.settings.readonly||"focus"!=e&&"blur"!=e&&(t?n.initialized?i(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&n.dom.unbind(r(n,e),e))}};return a=n.extend({},e,a)}),r(st,[p,g],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var u;return u=l,"string"==typeof l?l=function(){o.execCommand(u,!1,null)}:e.isArray(u)&&(l=function(){o.execCommand(u[0],u[1],u[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(lt,[y,C,x,k,S,D,M,H,P,O,I,F,b,l,rt,w,N,it,g,p,at,st],function(e,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v,y,b,C,x,w){function _(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=k({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.language=t.language||"en",n.languageLoad=t.language_load,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,r.fire("SetupEditor",i),i.execCallback("setup",i)}var N=e.DOM,E=n.ThemeManager,S=n.PluginManager,k=C.extend,T=C.each,R=C.explode,A=C.inArray,B=C.trim,D=C.resolve,L=h.Event,M=b.gecko,H=b.ie;return _.prototype={render:function(){function e(){N.unbind(window,"ready",e),n.render()}function t(){var e=p.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!E.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",E.load(r.theme,t)}C.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),T(r.external_plugins,function(e,t){S.load(t,e),r.plugins+=" "+t}),T(r.plugins.split(/[ ,]/),function(e){if(e=B(e),e&&!S.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=S.dependencies(e);T(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=S.createUrl(t,e),S.load(e.resource,e)})}else S.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!L.domLoaded)return void N.bind(window,"ready",e);if(n.getElement()&&b.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||N.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(N.insertAfter(N.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},N.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isNotDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new m(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=N.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=S.get(n),i,o;i=S.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=B(n),r&&-1===A(m,n)&&(T(S.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),m.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,p,h,m=[];if(t.rtl=this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||N.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=E.get(n.theme),t.theme=new c(t,E.urls[n.theme]),t.theme.init&&t.theme.init(t,E.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),T(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,p=/^[0-9\.]+(|px)$/i,p.test(""+i)&&(i=Math.max(parseInt(i,10),100)),p.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(N.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&T(R(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',h=0;h',t.loadedCSS[g]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),t.iframeHTML+='
      ";var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';if(document.domain!=location.hostname&&(u=v),s=N.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),H)try{t.getDoc()}catch(y){s.src=u=v}t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(N.get(l.editorContainer).style.display=t.orgDisplay),N.get(t.id).style.display="none",N.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,o=n.settings,f=N.get(n.id),p=n.getDoc(),h,m;o.inline||(n.getElement().style.visibility=n.orgVisibility),t||o.content_editable||(p.open(),p.write(n.iframeHTML),p.close()),o.content_editable&&(n.on("remove",function(){var e=this.getBody();N.removeClass(e,"mce-content-body"),N.removeClass(e,"mce-edit-focus"),N.setAttrib(e,"contentEditable",null)}),N.addClass(f,"mce-content-body"),n.contentDocument=p=o.content_document||document,n.contentWindow=o.content_window||window,n.bodyElement=f,o.content_document=o.content_window=null,o.root_name=f.nodeName.toLowerCase()),h=n.getBody(),h.disabled=!0,o.readonly||(n.inline&&"static"==N.getStyle(h,"position",!0)&&(h.style.position="relative"),h.contentEditable=n.getParam("content_editable_state",!0)),h.disabled=!1,n.schema=new g(o),n.dom=new e(p,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:o.force_hex_style_colors,class_filter:o.class_filter,update_styles:!0,root_element:o.content_editable?n.id:null,collect:o.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e) +}}),n.parser=new v(o,n.schema),n.parser.addAttributeFilter("src,href,style,tabindex",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)i=e[r],a=i.attr(t),s="data-mce-"+t,i.attributes.map[s]||("style"===t?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):"tabindex"===t?(i.attr(s,a),i.attr(t,null)):i.attr(s,n.convertURL(a,t,i.name)))}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,i,o=n.schema.getNonEmptyElements();t--;)i=e[t],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),n.serializer=new i(o,n),n.selection=new a(n.dom,n.getWin(),n.serializer,n),n.formatter=new s(n),n.undoManager=new l(n),n.forceBlocks=new u(n),n.enterKey=new c(n),n.editorCommands=new d(n),n.fire("PreInit"),o.browser_spellcheck||o.gecko_spellcheck||(p.body.spellcheck=!1,N.setAttrib(h,"spellcheck","false")),n.fire("PostRender"),n.quirks=y(n),o.directionality&&(h.dir=o.directionality),o.nowrap&&(h.style.whiteSpace="nowrap"),o.protect&&n.on("BeforeSetContent",function(e){T(o.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),o.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
      [\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,n.bindPendingEventDelegates(),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(m="",T(n.contentStyles,function(e){m+=e+"\r\n"}),n.dom.addStyle(m)),T(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),o.auto_focus&&setTimeout(function(){var e=n.editorManager.get(o.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),f=p=h=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;if(!e){if(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),M||i){if(l=n.getBody(),l.setActive)try{l.setActive()}catch(c){l.focus()}else l.focus();i&&r.normalize()}a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())}n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?D(r):0,n=D(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?T(r.split(r.indexOf("=")>0?/[;,](?![^=;,]*(?:[;,]|$))/:","),function(e){e=e.split("="),i[B(e[0])]=B(e.length>1?e[1]:e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;!e.initialized||e.settings.disable_nodechange||e.settings.readonly||(i=e.getBody(),n=t.getStart()||i,n=H&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:void r.push(e)}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=k({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(T(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),void i.fire("ExecCommand",{command:e,ui:t,value:n})))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=!0:(N.show(e.getContainer()),N.hide(e.id)),e.load(),e.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(e.hidden=!0,H&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e==e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(N.hide(e.getContainer()),N.setStyle(e.id,"display",e.orgDisplay)),e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=N.getParent(t.id,"form"))&&T(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=H&&11>H?"":'
      ',e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):H||(e='
      '),r.innerHTML=e,n.fire("SetContent",t)):("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=B(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?B(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=N.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return N.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=N.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),T(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;if(!e.removed){e.removed=1,e.save(),e.hasHiddenInput&&N.remove(e.getElement().nextSibling),e.inline||(H&&10>H&&e.getDoc().execCommand("SelectAll",!1,null),N.setStyle(e.id,"display",e.orgDisplay),e.getBody().onload=null,L.unbind(e.getWin()),L.unbind(e.getDoc()));var t=e.getContainer();L.unbind(e.getBody()),L.unbind(t),e.fire("remove"),e.editorManager.remove(e),N.remove(t),e.destroy()}},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e&&M&&(L.unbind(t.getDoc()),L.unbind(t.getWin()),L.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),N.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return M?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},k(_.prototype,x),_}),r(ct,[],function(){var e={};return{rtl:!1,add:function(t,n){for(var r in n)e[r]=n[r];this.rtl=this.rtl||"rtl"===e._dir},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(ut,[y,g],function(e,t){function n(e){function s(){try{return document.activeElement}catch(e){return document.body}}function l(e,t){if(t&&t.startContainer){if(!e.isChildOf(t.startContainer,e.getRoot())||!e.isChildOf(t.endContainer,e.getRoot()))return;return{startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset}}return t}function c(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function u(e){return!!a.getParent(e,n.isEditorUIElement)}function d(n){var d=n.editor;d.on("init",function(){(d.inline||t.ie)&&(d.on("nodechange keyup",function(){var e=document.activeElement;e&&e.id==d.id+"_ifr"&&(e=d.getBody()),d.dom.isChildOf(e,d.getBody())&&(d.lastRng=d.selection.getRng())}),t.webkit&&!r&&(r=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(d.lastRng=n)}},a.bind(document,"selectionchange",r)))}),d.on("setcontent",function(){d.lastRng=null}),d.on("mousedown",function(){d.selection.lastFocusBookmark=null}),d.on("focusin",function(){var t=e.focusedEditor;d.selection.lastFocusBookmark&&(d.selection.setRng(c(d,d.selection.lastFocusBookmark)),d.selection.lastFocusBookmark=null),t!=d&&(t&&t.fire("blur",{focusedEditor:d}),e.activeEditor=d,e.focusedEditor=d,d.fire("focus",{blurredEditor:t}),d.focus(!0)),d.lastRng=null}),d.on("focusout",function(){window.setTimeout(function(){var t=e.focusedEditor;u(s())||t!=d||(d.fire("blur",{focusedEditor:null}),e.focusedEditor=null,d.selection&&(d.selection.lastFocusBookmark=null))},0)}),i||(i=function(t){var n=e.activeEditor;n&&t.target.ownerDocument==document&&(n.selection&&(n.selection.lastFocusBookmark=l(n.dom,n.lastRng)),u(t.target)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},a.bind(document,"focusin",i)),d.inline&&!o&&(o=function(t){var n=e.activeEditor;if(n.inline&&!n.dom.isChildOf(t.target,n.getBody())){var r=n.selection.getRng();r.collapsed||(n.lastRng=r)}},a.bind(document,"mouseup",o))}function f(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(a.unbind(document,"selectionchange",r),a.unbind(document,"focusin",i),a.unbind(document,"mouseup",o),r=i=o=null)}e.on("AddEditor",d),e.on("RemoveEditor",f)}var r,i,o,a=e.DOM;return n.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},n}),r(dt,[lt,y,F,g,p,ot,ct,ut],function(e,t,n,r,i,o,a,s){function l(e){var t=g.editors,n;delete t[e.id];for(var r=0;r0&&f(d(c),function(n){u.get(n)?(m=new e(n,t,s),l.push(m),m.render()):f(document.forms,function(e){f(e.elements,function(e){e.name===n&&(n="mce_editor_"+h++,u.setAttrib(e,"id",n),r(n,t))})})});break;case"textareas":case"specific_textareas":f(u.select("textarea"),function(e){t.editor_deselector&&o(e,t.editor_deselector)||(!t.editor_selector||o(e,t.editor_selector))&&r(n(e),t)})}t.oninit&&(c=g=0,f(l,function(e){g++,e.initialized?c++:e.on("init",function(){c++,c==g&&i(t,"oninit")}),c==g&&i(t,"oninit")}))}var s=this,l=[],m;s.settings=t,u.bind(window,"ready",a)},get:function(e){return arguments.length?e in this.editors?this.editors[e]:null:this.editors},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),m||(m=function(){t.fire("BeforeUnload")},u.bind(window,"beforeunload",m)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i;{if(e)return"string"==typeof e?(e=e.selector||e,void f(u.select(e),function(e){t.remove(r[e.id])})):(i=e,r[i.id]?(l(i)&&t.fire("RemoveEditor",{editor:i}),r.length||u.unbind(window,"beforeunload",m),i.remove(),i):null);for(n=r.length-1;n>=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){f(this.editors,function(e){e.save()})},addI18n:function(e,t){a.add(e,t)},translate:function(e){return a.translate(e)}},p(g,o),g.setup(),window.tinymce=window.tinyMCE=g,g}),r(ft,[dt,p],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(pt,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(ht,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(mt,[ht,pt,p],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(gt,[y],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(vt,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),-1===r||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(u){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(yt,[y,l,b,C,p,g],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(bt,[z,p],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(Ct,[bt],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
      '+this._super(e)}})}),r(xt,[$,Q],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(wt,[$,xt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(_t,[wt],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},icon:function(e){var t=this,n=t.classPrefix;if("undefined"==typeof e)return t.settings.icon;if(t.settings.icon=e,e=e?n+"ico "+n+"i-"+t.settings.icon:"",t._rendered){var r=t.getEl().firstChild,i=r.getElementsByTagName("i")[0];e?(i&&i==r.firstChild||(i=document.createElement("i"),r.insertBefore(i,r.firstChild)),i.className=e):i&&r.removeChild(i),t.text(t._text)}return t},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},text:function(e){var t=this;if(t._rendered){var n=t.getEl().lastChild.lastChild;n&&(n.data=t.translate(e))}return t._super(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i;return i=e.settings.image,i?(r="none","string"!=typeof i&&(i=window.getSelection?i[0]:i[1]),i=" style=\"background-image: url('"+i+"')\""):i="",r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
      "}})}),r(Nt,[G],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
      '+(e.settings.html||"")+t.renderHtml(e)+"
      "}})}),r(Et,[wt],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
      '+e.encode(e._text)+"
      "}})}),r(St,[_t,et],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()}})}),r(kt,[St,y],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
      '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(Tt,[wt,j,q],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("combobox"),t.subinput=!0,t.ariaTarget="inp",e=t.settings,e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){for(var r=n.target,i=t.getEl();r&&r!=i;)r.id&&-1!=r.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),r=r.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){return e.preventDefault(),t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),e.placeholder&&(t.addClass("placeholder"),t.on("focusin",function(){t._hasOnChange||(n.on(t.getEl("inp"),"change",function(){t.fire("change")}),t._hasOnChange=!0),t.hasClass("placeholder")&&(t.getEl("inp").value="",t.removeClass("placeholder"))}),t.on("focusout",function(){0===t.value().length&&(t.getEl("inp").value=e.placeholder,t.addClass("placeholder"))}))},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName.toUpperCase()&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl("inp").disabled=e),t._super(e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-n.getSize(r).width-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),n.css(t.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return n.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},remove:function(){n.off(this.getEl("inp")),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e._text,(o||a)&&(s='
      ",e.addClass("has-open")),'
      "+s+"
      " +}})}),r(Rt,[wt],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.innerHtml(this._getPathHtml())},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
      '+e._getPathHtml()+"
      "},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
      '+t[n].name+"
      ";return i||(i='
      \xa0
      '),i}})}),r(At,[Rt,dt],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(Bt,[G],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
      '+(e.settings.title?'
      '+e.settings.title+"
      ":"")+'
      '+(e.settings.html||"")+t.renderHtml(e)+"
      "}})}),r(Dt,[G,Bt],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",id:n._id+"-l",text:i,flex:0,forId:n._id,disabled:n.disabled()}]}),r.type="formitem",n.aria("labelledby",n._id+"-l"),"undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(Lt,[Dt],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
      '+(e.settings.title?''+e.settings.title+"":"")+'
      '+(e.settings.html||"")+t.renderHtml(e)+"
      "}})}),r(Mt,[Tt],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(Ht,[Ct],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Pt,[Ct],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v=[],y,b,C,x,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",N="h",E="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",P="left",M="w",D="x",L="innerW",H="minW",O="right",I="deltaW",F="contentW"):(S="x",N="w",E="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",P="top",M="h",D="y",L="innerH",H="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],_=u=0,t=0,n=r.length;n>t;t++)p=r[t],h=p.layoutRect(),m=p.settings,g=m.flex,d-=n-1>t?c:0,g>0&&(u+=g,h[k]&&v.push(p),h.flex=g),d-=h[E],y=o[P]+h[H]+o[O],y>_&&(_=y);if(x={},x[E]=0>d?i[E]-d+i[A]:i[R]-d+i[A],x[H]=_+i[I],x[B]=i[R]-d,x[F]=_,x.minW=W(x.minW,i.maxW),x.minH=W(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;n>t;t++)p=v[t],h=p.layoutRect(),b=h[k],y=h[E]+h.flex*C,y>b?(d-=h[k]-h[E],u-=h.flex,h.flex=0,h.maxFlexSize=b):h.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[D]=o[P],t=0,n=r.length;n>t;t++)p=r[t],h=p.layoutRect(),y=h.maxFlexSize||h[E],"center"===s?x[D]=Math.round(i[L]/2-h[M]/2):"stretch"===s?(x[M]=z(h[H]||0,i[L]-o[P]-o[O]),x[D]=o[P]):"end"===s&&(x[D]=i[L]-h[M]-o.top),h.flex>0&&(y+=h.flex*C),x[N]=y,x[S]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(Ot,[bt],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(It,[$,wt,et,p,dt,g],function(e,t,n,r,i,o){function a(e){function t(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function r(e){e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function i(){function t(e){var n=[];if(e)return s(e,function(e){var o={text:e.title,icon:e.icon};if(e.items)o.menu=t(e.items);else{var a=e.format||"custom"+r++;e.format||(e.name=a,i.push(e)),o.format=a}n.push(o)}),n}function n(){var n;return n=t(e.settings.style_formats_merge?e.settings.style_formats?o.concat(e.settings.style_formats):o:e.settings.style_formats||o)}var r=0,i=[],o=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(i,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:n(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?e.formatter.getCssText(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&d(this.settings.format)}}}}function o(){return e.undoManager?e.undoManager.hasUndo():!1}function a(){return e.undoManager?e.undoManager.hasRedo():!1}function l(){var t=this;t.disabled(!o()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!o())})}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function u(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function d(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var f;f=i(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){d(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:l,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:c,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:l,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:c,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:u,cmd:"mceToggleVisualAid"}),s({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:f}),e.addButton("formatselect",function(){var n=[],i=r(e.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6");return s(i,function(t){n.push({text:t[0],value:t[1],textStyle:function(){return e.formatter.getCssText(t[1])}})}),{type:"listbox",text:i[0][0],values:n,fixedWidth:!0,onselect:d,onPostRender:t(n)}}),e.addButton("fontselect",function(){var n="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",i=[],o=r(e.settings.font_formats||n);return s(o,function(e){i.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:i,fixedWidth:!0,onPostRender:t(i,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var n=[],r="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||r;return s(i.split(" "),function(e){n.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:n,fixedWidth:!0,onPostRender:t(n,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:f})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Ft,[Ct],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v,y,b,C,x,w,_,N=[],E=[],S,k,T,R;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),d=0;r>d;d++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.minH,N[d]=S>N[d]?S:N[d],E[f]=k>E[f]?k:E[f];for(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=N[d]+(d>0?y:0),T-=(d>0?y:0)+N[d];for(R=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),R-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var A;A="start"==t.packV?0:R>0?Math.floor(R/n):0;var B=0,D=t.flexWidths;if(D)for(d=0;dd;d++)N[d]+=D?D[d]*L:L;for(h=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+A,d=0;r>d&&(u=i[f*r+d],u);d++)m=u.settings,c=u.layoutRect(),a=Math.max(N[d],c.startMinWidth),c.x=p,c.y=h,v=m.alignH||(C?C[d]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=m.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=h+s/2-c.h/2:"bottom"==v?c.y=h+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),p+=a+y,u.recalc&&u.recalc();h+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var M=e.parent();M&&(M._lastRect=null,M.recalc())}}})}),r(zt,[wt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(Wt,[wt,q],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.addClass("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(Vt,[G],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e._super()}})}),r(Ut,[Vt],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(qt,[_t,j,Ut],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
      '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n0&&(o=n[0].text,t._value=n[0].value),e.menu=n}e.text=e.text||o||n[0].text,t._super(e),t.addClass("listbox"),t.on("select",function(n){var r=n.control;a&&(n.lastControl=a),e.multiple?r.active(!r.active()):t.value(n.control.settings.value),a=r})},value:function(e){function t(e,n){e.items().each(function(e){r=e.value()===n,r&&(i=i||e.text()),e.active(r),e.menu&&t(e.menu,n)})}var n=this,r,i,o,a;if("undefined"!=typeof e){if(n.menu)t(n.menu,e);else for(o=n.settings.menu,a=0;a'+("-"!==o?'\xa0":"")+("-"!==o?''+o+"":"")+(l?'
      '+l+"
      ":"")+(r.menu?'
      ':"")+"
      "},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Kt,[et,jt,p],function(e,t,n){var r=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.addClass("menu")},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return r}),r(Gt,[Et],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(Yt,[wt,Y],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
      '},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(Xt,[wt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
      '}})}),r(Jt,[qt,q],function(e,t){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,n=e.getEl(),r=e.layoutRect(),i,o;return e._super(),i=n.firstChild,o=n.lastChild,t.css(i,{width:r.w-t.getSize(o).width,height:r.h-2}),t.css(o,{height:r.h-2}),e},activeMenu:function(e){var n=this;t.toggleClass(n.getEl().lastChild,n.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
      '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void t.call(this,e);n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Qt,[Ot],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Zt,[J,q],function(e,t){return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t.removeClass(n,this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t.addClass(n,this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
      '+n+'
      '+t.renderHtml(e)+"
      "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,n,r,i;r=t.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(t,n){r=Math.max(r,t.layoutRect().minW),i=Math.max(i,t.layoutRect().minH),e.settings.activeTab!=n&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=t.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,n=e._super(),n.deltaH+=o,n.innerH=n.h-n.deltaH,n}})}),r(en,[wt,q],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.hasEventListeners("submit")&&t.toJSON?(t.fire("submit",{data:t.toJSON()}),!1):void 0})})},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl().disabled=e),t._super(e)},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(tn,[q,$],function(e,t){return function(n,r){var i=this,o,a=t.classPrefix;i.show=function(t){return i.hide(),o=!0,window.setTimeout(function(){o&&n.appendChild(e.createFragment('
      '))},t||0),i},i.hide=function(){var e=n.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),o=!1,i}}}),a([l,c,u,d,f,p,h,m,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,D,L,M,H,P,O,I,F,z,W,V,U,q,$,j,K,G,Y,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,pt,ht,mt,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,St,kt,Tt,Rt,At,Bt,Dt,Lt,Mt,Ht,Pt,Ot,It,Ft,zt,Wt,Vt,Ut,qt,$t,jt,Kt,Gt,Yt,Xt,Jt,Qt,Zt,en,tn])}(this);tinymce.PluginManager.add("advlist",function(t){function e(t,e){var n=[];return tinymce.each(e.split(/[ ,]/),function(t){n.push({text:t.replace(/\-/g," ").replace(/\b\w/g,function(t){return t.toUpperCase()}),data:"default"==t?"":t})}),n}function n(e,n){var o,l=t.dom,a=t.selection;o=l.getParent(a.getNode(),"ol,ul"),o&&o.nodeName==e&&n!==!1||t.execCommand("UL"==e?"InsertUnorderedList":"InsertOrderedList"),n=n===!1?i[e]:n,i[e]=n,o=l.getParent(a.getNode(),"ol,ul"),o&&(l.setStyle(o,"listStyleType",n),o.removeAttribute("data-mce-style")),t.focus()}function o(e){var n=t.dom.getStyle(t.dom.getParent(t.selection.getNode(),"ol,ul"),"listStyleType")||"";e.control.items().each(function(t){t.active(t.settings.data===n)})}var l,a,i={};l=e("OL",t.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),a=e("UL",t.getParam("advlist_bullet_styles","default,circle,disc,square")),t.addButton("numlist",{type:"splitbutton",tooltip:"Numbered list",menu:l,onshow:o,onselect:function(t){n("OL",t.control.settings.data)},onclick:function(){n("OL",!1)}}),t.addButton("bullist",{type:"splitbutton",tooltip:"Bullet list",menu:a,onshow:o,onselect:function(t){n("UL",t.control.settings.data)},onclick:function(){n("UL",!1)}})});tinymce.PluginManager.add("anchor",function(n){function e(){var e=n.selection.getNode();n.windowManager.open({title:"Anchor",body:{type:"textbox",name:"name",size:40,label:"Name",value:e.name||e.id},onsubmit:function(e){n.execCommand("mceInsertContent",!1,n.dom.createHTML("a",{id:e.data.name}))}})}n.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:e,stateSelector:"a:not([href])"}),n.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:e})});tinymce.PluginManager.add("autolink",function(t){function n(t){o(t,-1,"(",!0)}function e(t){o(t,0,"",!0)}function i(t){o(t,-1,"",!1)}function o(t,n,e){function i(t,n){if(0>n&&(n=0),3==t.nodeType){var e=t.data.length;n>e&&(n=e)}return n}function o(t,n){f.setStart(t,i(t,n))}function r(t,n){f.setEnd(t,i(t,n))}var f,d,a,s,c,l,u,g,h;if(f=t.selection.getRng(!0).cloneRange(),f.startOffset<5){if(g=f.endContainer.previousSibling,!g){if(!f.endContainer.firstChild||!f.endContainer.firstChild.nextSibling)return;g=f.endContainer.firstChild.nextSibling}if(h=g.length,o(g,h),r(g,h),f.endOffset<5)return;d=f.endOffset,s=g}else{if(s=f.endContainer,3!=s.nodeType&&s.firstChild){for(;3!=s.nodeType&&s.firstChild;)s=s.firstChild;3==s.nodeType&&(o(s,0),r(s,s.nodeValue.length))}d=1==f.endOffset?2:f.endOffset-1-n}a=d;do o(s,d>=2?d-2:0),r(s,d>=1?d-1:0),d-=1;while(" "!=f.toString()&&""!==f.toString()&&160!=f.toString().charCodeAt(0)&&d-2>=0&&f.toString()!=e);f.toString()==e||160==f.toString().charCodeAt(0)?(o(s,d),r(s,a),d+=1):0===f.startOffset?(o(s,0),r(s,a)):(o(s,d),r(s,a)),l=f.toString(),"."==l.charAt(l.length-1)&&r(s,a-1),l=f.toString(),u=l.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i),u&&("www."==u[1]?u[1]="http://www.":/@$/.test(u[1])&&!/^mailto:/.test(u[1])&&(u[1]="mailto:"+u[1]),c=t.selection.getBookmark(),t.selection.setRng(f),t.execCommand("createlink",!1,u[1]+u[2]),t.selection.moveToBookmark(c),t.nodeChanged())}var r;return t.on("keydown",function(n){return 13==n.keyCode?i(t):void 0}),tinymce.Env.ie?void t.on("focus",function(){if(!r){r=!0;try{t.execCommand("AutoUrlDetect",!1,!0)}catch(n){}}}):(t.on("keypress",function(e){return 41==e.keyCode?n(t):void 0}),void t.on("keyup",function(n){return 32==n.keyCode?e(t):void 0}))});tinymce.PluginManager.add("autoresize",function(e){function t(){return e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()}function i(n){var s,r,g,u,l,m,h,d,f=tinymce.DOM;if(r=e.getDoc()){if(g=r.body,u=r.documentElement,l=o.autoresize_min_height,!g||n&&"setcontent"===n.type&&n.initial||t())return void(g&&u&&(g.style.overflowY="auto",u.style.overflowY="auto"));h=e.dom.getStyle(g,"margin-top",!0),d=e.dom.getStyle(g,"margin-bottom",!0),m=g.offsetHeight+parseInt(h,10)+parseInt(d,10),(isNaN(m)||0>=m)&&(m=tinymce.Env.ie?g.scrollHeight:tinymce.Env.webkit&&0===g.clientHeight?0:g.offsetHeight),m>o.autoresize_min_height&&(l=m),o.autoresize_max_height&&m>o.autoresize_max_height?(l=o.autoresize_max_height,g.style.overflowY="auto",u.style.overflowY="auto"):(g.style.overflowY="hidden",u.style.overflowY="hidden",g.scrollTop=0),l!==a&&(s=l-a,f.setStyle(f.get(e.id+"_ifr"),"height",l+"px"),a=l,tinymce.isWebKit&&0>s&&i(n))}}function n(e,t,o){setTimeout(function(){i({}),e--?n(e,t,o):o&&o()},t)}var o=e.settings,a=0;e.settings.inline||(o.autoresize_min_height=parseInt(e.getParam("autoresize_min_height",e.getElement().offsetHeight),10),o.autoresize_max_height=parseInt(e.getParam("autoresize_max_height",0),10),e.on("init",function(){var t=e.getParam("autoresize_overflow_padding",1);e.dom.setStyles(e.getBody(),{paddingBottom:e.getParam("autoresize_bottom_margin",50),paddingLeft:t,paddingRight:t})}),e.on("nodechange setcontent keyup FullscreenStateChanged",i),e.getParam("autoresize_on_init",!0)&&e.on("init",function(){n(20,100,function(){n(5,1e3)})}),e.addCommand("mceAutoResize",i))});tinymce.PluginManager.add("autosave",function(e){function t(e,t){var n={s:1e3,m:6e4};return e=/^(\d+)([ms]?)$/.exec(""+(e||t)),(e[2]?n[e[2]]:1)*parseInt(e,10)}function n(){var e=parseInt(l.getItem(d+"time"),10)||0;return(new Date).getTime()-e>v.autosave_retention?(a(!1),!1):!0}function a(t){l.removeItem(d+"draft"),l.removeItem(d+"time"),t!==!1&&e.fire("RemoveDraft")}function r(){!c()&&e.isDirty()&&(l.setItem(d+"draft",e.getContent({format:"raw",no_events:!0})),l.setItem(d+"time",(new Date).getTime()),e.fire("StoreDraft"))}function o(){n()&&(e.setContent(l.getItem(d+"draft"),{format:"raw"}),e.fire("RestoreDraft"))}function i(){m||(setInterval(function(){e.removed||r()},v.autosave_interval),m=!0)}function s(){var t=this;t.disabled(!n()),e.on("StoreDraft RestoreDraft RemoveDraft",function(){t.disabled(!n())}),i()}function u(){e.undoManager.beforeChange(),o(),a(),e.undoManager.add()}function f(){var e;return tinymce.each(tinymce.editors,function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e}function c(t){var n=e.settings.forced_root_block;return t=tinymce.trim("undefined"==typeof t?e.getBody().innerHTML:t),""===t||new RegExp("^<"+n+"[^>]*>(( | |[ ]|]*>)+?|)|
      $","i").test(t)}var d,m,v=e.settings,l=tinymce.util.LocalStorage;d=v.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",d=d.replace(/\{path\}/g,document.location.pathname),d=d.replace(/\{query\}/g,document.location.search),d=d.replace(/\{id\}/g,e.id),v.autosave_interval=t(v.autosave_interval,"30s"),v.autosave_retention=t(v.autosave_retention,"20m"),e.addButton("restoredraft",{title:"Restore last draft",onclick:u,onPostRender:s}),e.addMenuItem("restoredraft",{text:"Restore last draft",onclick:u,onPostRender:s,context:"file"}),e.settings.autosave_restore_when_empty!==!1&&(e.on("init",function(){n()&&c()&&o()}),e.on("saveContent",function(){a()})),window.onbeforeunload=f,this.hasDraft=n,this.storeDraft=r,this.restoreDraft=o,this.removeDraft=a,this.isEmpty=c});!function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(o){var e=this,t=o.getParam("bbcode_dialect","punbb").toLowerCase();o.on("beforeSetContent",function(o){o.content=e["_"+t+"_bbcode2html"](o.content)}),o.on("postProcess",function(o){o.set&&(o.content=e["_"+t+"_bbcode2html"](o.content)),o.get&&(o.content=e["_"+t+"_html2bbcode"](o.content))})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://www.tinymce.com",infourl:"http://www.tinymce.com/wiki.php/Plugin:bbcode"}},_punbb_html2bbcode:function(o){function e(e,t){o=o.replace(e,t)}return o=tinymce.trim(o),e(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),e(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),e(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),e(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),e(/(.*?)<\/font>/gi,"$1"),e(//gi,"[img]$1[/img]"),e(/(.*?)<\/span>/gi,"[code]$1[/code]"),e(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),e(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),e(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),e(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),e(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),e(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),e(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),e(/<\/(strong|b)>/gi,"[/b]"),e(/<(strong|b)>/gi,"[b]"),e(/<\/(em|i)>/gi,"[/i]"),e(/<(em|i)>/gi,"[i]"),e(/<\/u>/gi,"[/u]"),e(/(.*?)<\/span>/gi,"[u]$1[/u]"),e(//gi,"[u]"),e(/]*>/gi,"[quote]"),e(/<\/blockquote>/gi,"[/quote]"),e(/
      /gi,"\n"),e(//gi,"\n"),e(/
      /gi,"\n"),e(/

      /gi,""),e(/<\/p>/gi,"\n"),e(/ |\u00a0/gi," "),e(/"/gi,'"'),e(/</gi,"<"),e(/>/gi,">"),e(/&/gi,"&"),o},_punbb_bbcode2html:function(o){function e(e,t){o=o.replace(e,t)}return o=tinymce.trim(o),e(/\n/gi,"
      "),e(/\[b\]/gi,""),e(/\[\/b\]/gi,""),e(/\[i\]/gi,""),e(/\[\/i\]/gi,""),e(/\[u\]/gi,""),e(/\[\/u\]/gi,""),e(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),e(/\[url\](.*?)\[\/url\]/gi,'$1'),e(/\[img\](.*?)\[\/img\]/gi,''),e(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),e(/\[code\](.*?)\[\/code\]/gi,'$1 '),e(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),o}}),tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)}();tinymce.PluginManager.add("charmap",function(e){function a(){function a(e){for(;e;){if("TD"==e.nodeName)return e;e=e.parentNode}}var t,r,o,n;t='';var l=25;for(o=0;10>o;o++){for(t+="",r=0;l>r;r++){var s=i[o*l+r];t+='"}t+=""}t+="";var c={type:"container",html:t,onclick:function(a){var i=a.target;"TD"==i.tagName&&(i=i.firstChild),"DIV"==i.tagName&&(e.execCommand("mceInsertContent",!1,i.firstChild.data),a.ctrlKey||n.close())},onmouseover:function(e){var i=a(e.target);i&&n.find("#preview").text(i.firstChild.firstChild.data)}};n=e.windowManager.open({title:"Special character",spacing:10,padding:10,items:[c,{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:100,minHeight:80}],buttons:[{text:"Close",onclick:function(){n.close()}}]})}var i=[["160","no-break space"],["38","ampersand"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"],["173","soft hyphen"]];e.addButton("charmap",{icon:"charmap",tooltip:"Special character",onclick:a}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",onclick:a,context:"insert"})});tinymce.PluginManager.add("code",function(e){function o(){e.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:e.getParam("code_dialog_width",600),minHeight:e.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),value:e.getContent({source_view:!0}),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(o){e.focus(),e.undoManager.transact(function(){e.setContent(o.data.code)}),e.selection.setCursorLocation(),e.nodeChanged()}})}e.addCommand("mceCodeEditor",o),e.addButton("code",{icon:"code",tooltip:"Source code",onclick:o}),e.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:o})});tinymce.PluginManager.add("contextmenu",function(e){var n,t=e.settings.contextmenu_never_use_native;e.on("contextmenu",function(i){var o;if(!i.ctrlKey||t){if(i.preventDefault(),o=e.settings.contextmenu||"link image inserttable | cell row column deletetable",n)n.show();else{var c=[];tinymce.each(o.split(/[ ,]/),function(n){var t=e.menuItems[n];"|"==n&&(t={text:n}),t&&(t.shortcut="",c.push(t))});for(var a=0;a'}),t+=""}),t+=""}var i=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];t.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:a,onclick:function(e){var a=t.dom.getParent(e.target,"a");a&&(t.insertContent(''+a.getAttribute('),this.hide())}},tooltip:"Emoticons"})});tinymce.PluginManager.add("fullpage",function(e){function t(){var t=n();e.windowManager.open({title:"Document properties",data:t,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(e){l(tinymce.extend(t,e.data))}})}function n(){function t(e,t){var n=e.attr(t);return n||""}var n,l,a=i(),r={};return r.fontface=e.getParam("fullpage_default_fontface",""),r.fontsize=e.getParam("fullpage_default_fontsize",""),n=a.firstChild,7==n.type&&(r.xml_pi=!0,l=/encoding="([^"]+)"/.exec(n.value),l&&(r.docencoding=l[1])),n=a.getAll("#doctype")[0],n&&(r.doctype=""),n=a.getAll("title")[0],n&&n.firstChild&&(r.title=n.firstChild.value),s(a.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?r[n.toLowerCase()]=e.attr("content"):"Content-Type"==l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")),t&&(r.docencoding=t[1]))}),n=a.getAll("html")[0],n&&(r.langcode=t(n,"lang")||t(n,"xml:lang")),r.stylesheets=[],tinymce.each(a.getAll("link"),function(e){"stylesheet"==e.attr("rel")&&r.stylesheets.push(e.attr("href"))}),n=a.getAll("body")[0],n&&(r.langdir=t(n,"dir"),r.style=t(n,"style"),r.visited_color=t(n,"vlink"),r.link_color=t(n,"link"),r.active_color=t(n,"alink")),r}function l(t){function n(e,t,n){e.attr(t,n?n:void 0)}function l(e){r.firstChild?r.insert(e,r.firstChild):r.append(e)}var a,r,o,c,u,f=e.dom;a=i(),r=a.getAll("head")[0],r||(c=a.getAll("html")[0],r=new m("head",1),c.firstChild?c.insert(r,c.firstChild,!0):c.append(r)),c=a.firstChild,t.xml_pi?(u='version="1.0"',t.docencoding&&(u+=' encoding="'+t.docencoding+'"'),7!=c.type&&(c=new m("xml",7),a.insert(c,a.firstChild,!0)),c.value=u):c&&7==c.type&&c.remove(),c=a.getAll("#doctype")[0],t.doctype?(c||(c=new m("#doctype",10),t.xml_pi?a.insert(c,a.firstChild):l(c)),c.value=t.doctype.substring(9,t.doctype.length-1)):c&&c.remove(),c=null,s(a.getAll("meta"),function(e){"Content-Type"==e.attr("http-equiv")&&(c=e)}),t.docencoding?(c||(c=new m("meta",1),c.attr("http-equiv","Content-Type"),c.shortEnded=!0,l(c)),c.attr("content","text/html; charset="+t.docencoding)):c.remove(),c=a.getAll("title")[0],t.title?(c?c.empty():(c=new m("title",1),l(c)),c.append(new m("#text",3)).value=t.title):c&&c.remove(),s("keywords,description,author,copyright,robots".split(","),function(e){var n,i,r=a.getAll("meta"),o=t[e];for(n=0;n"))}function i(){return new tinymce.html.DomParser({validate:!1,root_name:"#document"}).parse(d)}function a(t){function n(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})}var l,a,o,m,u=t.content,f="",g=e.dom;if(!t.selection&&!("raw"==t.format&&d||t.source_view&&e.getParam("fullpage_hide_in_source_view"))){u=u.replace(/<(\/?)BODY/gi,"<$1body"),l=u.indexOf("",l),d=n(u.substring(0,l+1)),a=u.indexOf("\n"),o=i(),s(o.getAll("style"),function(e){e.firstChild&&(f+=e.firstChild.value)}),m=o.getAll("body")[0],m&&g.setAttribs(e.getBody(),{style:m.attr("style")||"",dir:m.attr("dir")||"",vLink:m.attr("vlink")||"",link:m.attr("link")||"",aLink:m.attr("alink")||""}),g.remove("fullpage_styles");var y=e.getDoc().getElementsByTagName("head")[0];f&&(g.add(y,"style",{id:"fullpage_styles"},f),m=g.get("fullpage_styles"),m.styleSheet&&(m.styleSheet.cssText=f));var h={};tinymce.each(y.getElementsByTagName("link"),function(e){"stylesheet"==e.rel&&e.getAttribute("data-mce-fullpage")&&(h[e.href]=e)}),tinymce.each(o.getAll("link"),function(e){var t=e.attr("href");h[t]||"stylesheet"!=e.attr("rel")||g.add(y,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete h[t]}),tinymce.each(h,function(e){e.parentNode.removeChild(e)})}}function r(){var t,n="",l="";return e.getParam("fullpage_default_xml_pi")&&(n+='\n'),n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=e.getParam("fullpage_default_encoding"))&&(n+='\n'),(t=e.getParam("fullpage_default_font_family"))&&(l+="font-family: "+t+";"),(t=e.getParam("fullpage_default_font_size"))&&(l+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(l+="color: "+t+";"),n+="\n\n"}function o(t){t.selection||t.source_view&&e.getParam("fullpage_hide_in_source_view")||(t.content=tinymce.trim(d)+"\n"+tinymce.trim(t.content)+"\n"+tinymce.trim(c))}var d,c,s=tinymce.each,m=tinymce.html.Node;e.addCommand("mceFullPageProperties",t),e.addButton("fullpage",{title:"Document properties",cmd:"mceFullPageProperties"}),e.addMenuItem("fullpage",{text:"Document properties",cmd:"mceFullPageProperties",context:"file"}),e.on("BeforeSetContent",a),e.on("GetContent",o)});tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,i=document,l=i.body;return l.offsetWidth&&(e=l.offsetWidth,t=l.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){function n(){d.setStyle(a,"height",t().h-(h.clientHeight-a.clientHeight))}var u,h,a,f,m=document.body,g=document.documentElement;s=!s,h=e.getContainer(),u=h.style,a=e.getContentAreaContainer().firstChild,f=a.style,s?(i=f.width,l=f.height,f.width=f.height="100%",c=u.width,o=u.height,u.width=u.height="",d.addClass(m,"mce-fullscreen"),d.addClass(g,"mce-fullscreen"),d.addClass(h,"mce-fullscreen"),d.bind(window,"resize",n),n(),r=n):(f.width=i,f.height=l,c&&(u.width=c),o&&(u.height=o),d.removeClass(m,"mce-fullscreen"),d.removeClass(g,"mce-fullscreen"),d.removeClass(h,"mce-fullscreen"),d.unbind(window,"resize",r)),e.fire("FullscreenStateChanged",{state:s})}var i,l,r,c,o,s=!1,d=tinymce.DOM;return e.settings.inline?void 0:(e.on("init",function(){e.addShortcut("Ctrl+Alt+F","",n)}),e.on("remove",function(){r&&d.unbind(window,"resize",r)}),e.addCommand("mceFullScreen",n),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return s}})});tinymce.PluginManager.add("hr",function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"


      ")}),n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})});tinymce.PluginManager.add("image",function(e){function t(e,t){function i(e,i){n.parentNode&&n.parentNode.removeChild(n),t({width:e,height:i})}var n=document.createElement("img");n.onload=function(){i(n.clientWidth,n.clientHeight)},n.onerror=function(){i()};var a=n.style;a.visibility="hidden",a.position="fixed",a.bottom=a.left=0,a.width=a.height="auto",document.body.appendChild(n),n.src=e}function i(t){return tinymce.each(t,function(t){t.textStyle=function(){return e.formatter.getCssText({inline:"img",classes:[t.value]})}}),t}function n(t){return function(){var i=e.settings.image_list;"string"==typeof i?tinymce.util.XHR.send({url:i,success:function(e){t(tinymce.util.JSON.parse(e))}}):"function"==typeof i?i(t):t(i)}}function a(n){function a(t,i,n){var a,l=[];return tinymce.each(e.settings[t]||n,function(e){var t={text:e.text||e.title,value:e.value};l.push(t),(f[i]===e.value||!a&&e.selected)&&(a=t)}),a&&!f[i]&&(f[i]=a.value,a.selected=!0),l}function l(){var t=[{text:"None",value:""}];return tinymce.each(n,function(i){t.push({text:i.text||i.title,value:e.convertURL(i.value||i.url,"src"),menu:i.menu})}),t}function o(){var e,t,i,n;e=u.find("#width")[0],t=u.find("#height")[0],i=e.value(),n=t.value(),u.find("#constrain")[0].checked()&&g&&h&&i&&n&&(g!=i?(n=Math.round(i/g*n),t.value(n)):(i=Math.round(n/h*i),e.value(i))),g=i,h=n}function s(){function t(t){function i(){t.onload=t.onerror=null,e.selection.select(t),e.nodeChanged()}t.onload=function(){f.width||f.height||y.setAttribs(t,{width:t.clientWidth,height:t.clientHeight}),i()},t.onerror=i}d(),o(),f=tinymce.extend(f,u.toJSON()),f.alt||(f.alt=""),""===f.width&&(f.width=null),""===f.height&&(f.height=null),f.style||(f.style=null),f={src:f.src,alt:f.alt,width:f.width,height:f.height,style:f.style,"class":f["class"]},f["class"]||delete f["class"],e.undoManager.transact(function(){return f.src?(v?y.setAttribs(v,f):(f.id="__mcenew",e.focus(),e.selection.setContent(y.createHTML("img",f)),v=y.get("__mcenew"),y.setAttrib(v,"id",null)),void t(v)):void(v&&(y.remove(v),e.focus(),e.nodeChanged()))})}function r(e){return e&&(e=e.replace(/px$/,"")),e}function c(){m&&m.value(e.convertURL(this.value(),"src")),t(this.value(),function(e){e.width&&e.height&&(g=e.width,h=e.height,u.find("#width").value(g),u.find("#height").value(h))})}function d(){function t(e){return e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e}if(e.settings.image_advtab){var i=u.toJSON(),n=y.parseStyle(i.style);delete n.margin,n["margin-top"]=n["margin-bottom"]=t(i.vspace),n["margin-left"]=n["margin-right"]=t(i.hspace),n["border-width"]=t(i.border),u.find("#style").value(y.serializeStyle(y.parseStyle(y.serializeStyle(n))))}}var u,g,h,m,p,f={},y=e.dom,v=e.selection.getNode();g=y.getAttrib(v,"width"),h=y.getAttrib(v,"height"),"IMG"!=v.nodeName||v.getAttribute("data-mce-object")||v.getAttribute("data-mce-placeholder")?v=null:f={src:y.getAttrib(v,"src"),alt:y.getAttrib(v,"alt"),"class":y.getAttrib(v,"class"),width:g,height:h},n&&(m={type:"listbox",label:"Image list",values:l(),value:f.src&&e.convertURL(f.src,"src"),onselect:function(e){var t=u.find("#alt");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),u.find("#src").value(e.control.value())},onPostRender:function(){m=this}}),e.settings.image_class_list&&(p={name:"class",type:"listbox",label:"Class",values:i(a("image_class_list","class"))});var b=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:c},m];e.settings.image_description!==!1&&b.push({name:"alt",type:"textbox",label:"Image description"}),e.settings.image_dimensions!==!1&&b.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:o,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:o,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),b.push(p),e.settings.image_advtab?(v&&(f.hspace=r(v.style.marginLeft||v.style.marginRight),f.vspace=r(v.style.marginTop||v.style.marginBottom),f.border=r(v.style.borderWidth),f.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(v,"style")))),u=e.windowManager.open({title:"Insert/edit image",data:f,bodyType:"tabpanel",body:[{title:"General",type:"form",items:b},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:d},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:s})):u=e.windowManager.open({title:"Insert/edit image",data:f,body:b,onSubmit:s})}e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:n(a),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),e.addMenuItem("image",{icon:"image",text:"Insert image",onclick:n(a),context:"insert",prependToContext:!0})});tinymce.PluginManager.add("importcss",function(t){function e(t){return"string"==typeof t?function(e){return-1!==e.indexOf(t)}:t instanceof RegExp?function(e){return t.test(e)}:t}function n(e,n){function i(t,e){var c,o=t.href;if(o&&n(o,e)){s(t.imports,function(t){i(t,!0)});try{c=t.cssRules||t.rules}catch(a){}s(c,function(t){t.styleSheet?i(t.styleSheet,!0):t.selectorText&&s(t.selectorText.split(","),function(t){r.push(tinymce.trim(t))})})}}var r=[],c={};s(t.contentCSS,function(t){c[t]=!0}),n||(n=function(t,e){return e||c[t]});try{s(e.styleSheets,function(t){i(t)})}catch(o){}return r}function i(e){var n,i=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(e);if(i){var r=i[1],s=i[2].substr(1).split(".").join(" "),c=tinymce.makeMap("a,img");return i[1]?(n={title:e},t.schema.getTextBlockElements()[r]?n.block=r:t.schema.getBlockElements()[r]||c[r.toLowerCase()]?n.selector=r:n.inline=r):i[2]&&(n={inline:"span",title:e.substr(1),classes:s}),t.settings.importcss_merge_classes!==!1?n.classes=s:n.attributes={"class":s},n}}var r=this,s=tinymce.each;t.on("renderFormatsMenu",function(c){var o=t.settings,a={},l=o.importcss_selector_converter||i,f=e(o.importcss_selector_filter),m=c.control;t.settings.importcss_append||m.items().remove();var u=[];tinymce.each(o.importcss_groups,function(t){t=tinymce.extend({},t),t.filter=e(t.filter),u.push(t)}),s(n(c.doc||t.getDoc(),e(o.importcss_file_filter)),function(e){if(-1===e.indexOf(".mce-")&&!a[e]&&(!f||f(e))){var n,i=l.call(r,e);if(i){var s=i.name||tinymce.DOM.uniqueId();if(u)for(var c=0;c'+n+"";var i=e.dom.getParent(e.selection.getStart(),"time");if(i)return void e.dom.setOuterHTML(i,n)}e.insertContent(n)}var n,r,i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),d="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),c="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),u=[];e.addCommand("mceInsertDate",function(){a(e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){a(e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S")))}),e.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){a(n||r)},menu:u}),tinymce.each(e.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){r||(r=e),u.push({text:t(e),onclick:function(){n=e,a(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:u,context:"insert"})});!function(e){e.on("AddEditor",function(e){e.editor.settings.inline_styles=!1}),e.PluginManager.add("legacyoutput",function(t){t.on("init",function(){var i="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",n=e.explode(t.settings.font_size_style_values),l=t.schema;t.formatter.register({alignleft:{selector:i,attributes:{align:"left"}},aligncenter:{selector:i,attributes:{align:"center"}},alignright:{selector:i,attributes:{align:"right"}},alignjustify:{selector:i,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(t){return e.inArray(n,t.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),e.each("b,i,u,strike".split(","),function(e){l.addValidElements(e+"[*]")}),l.getElementRule("font")||l.addValidElements("font[face|size|color|style]"),e.each(i.split(","),function(e){var t=l.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})})})}(tinymce);tinymce.PluginManager.add("link",function(t){function e(e){return function(){var n=t.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(t){e(tinymce.util.JSON.parse(t))}}):"function"==typeof n?n(e):e(n)}}function n(e){function n(t){var e=d.find("#text");(!e.value()||t.lastControl&&e.value()==t.lastControl.text())&&e.value(t.control.text()),d.find("#href").value(t.control.value())}function l(){var n=[{text:"None",value:""}];return tinymce.each(e,function(e){n.push({text:e.text||e.title,value:t.convertURL(e.value||e.url,"href"),menu:e.menu})}),n}function i(e){return tinymce.each(e,function(e){e.textStyle=function(){return t.formatter.getCssText({inline:"a",classes:[e.value]})}}),e}function a(e,n,l){var i,a=[];return tinymce.each(t.settings[e]||l,function(t){var e={text:t.text||t.title,value:t.value};a.push(e),(b[n]===t.value||!i&&t.selected)&&(i=e)}),i&&!b[n]&&(b[n]=i.value,i.selected=!0),a}function r(e){var l=[];return tinymce.each(t.dom.select("a:not([href])"),function(t){var n=t.name||t.id;n&&l.push({text:n,value:"#"+n,selected:-1!=e.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){h&&h.value(t.convertURL(this.value(),"href")),!f&&0===b.text.length&&x&&this.parent().parent().find("#text")[0].value(this.value())}function s(t){var e=k.getContent();if(/]+>[^<]+<\/a>$/.test(e)||-1==e.indexOf("href=")))return!1;if(t){var n,l=t.childNodes;if(0===l.length)return!1;for(n=l.length-1;n>=0;n--)if(3!=l[n].nodeType)return!1}return!0}var u,c,f,d,x,v,h,g,m,p,y,b={},k=t.selection,w=t.dom;u=k.getNode(),c=w.getParent(u,"a[href]"),x=s(),b.text=f=c?c.innerText||c.textContent:k.getContent({format:"text"}),b.href=c?w.getAttrib(c,"href"):"",b.target=c?w.getAttrib(c,"target"):t.settings.default_link_target||null,b.rel=c?w.getAttrib(c,"rel"):null,b["class"]=c?w.getAttrib(c,"class"):null,b.title=c?w.getAttrib(c,"title"):"",x&&(v={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){b.text=this.value()}}),e&&(h={type:"listbox",label:"Link list",values:l(),onselect:n,value:t.convertURL(b.href,"href"),onPostRender:function(){h=this}}),t.settings.target_list!==!1&&(m={name:"target",type:"listbox",label:"Target",values:a("target_list","target",[{text:"None",value:""},{text:"New window",value:"_blank"}])}),t.settings.rel_list&&(g={name:"rel",type:"listbox",label:"Rel",values:a("rel_list","rel",[{text:"None",value:""}])}),t.settings.link_class_list&&(p={name:"class",type:"listbox",label:"Class",values:i(a("link_class_list","class"))}),t.settings.link_title!==!1&&(y={name:"title",type:"textbox",label:"Title",value:b.title}),d=t.windowManager.open({title:"Insert link",data:b,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},v,y,r(b.href),h,g,m,p],onSubmit:function(e){function n(e,n){var l=t.selection.getRng();window.setTimeout(function(){t.windowManager.confirm(e,function(e){t.selection.setRng(l),n(e)})},0)}function l(){var e={href:i,target:b.target?b.target:null,rel:b.rel?b.rel:null,"class":b["class"]?b["class"]:null,title:b.title?b.title:null};c?(t.focus(),x&&b.text!=f&&("innerText"in c?c.innerText=b.text:c.textContent=b.text),w.setAttribs(c,e),k.select(c),t.undoManager.add()):x?t.insertContent(w.createHTML("a",e,w.encode(b.text))):t.execCommand("mceInsertLink",!1,e)}var i;return b=tinymce.extend(b,e.data),(i=b.href)?i.indexOf("@")>0&&-1==i.indexOf("//")&&-1==i.indexOf("mailto:")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(t){t&&(i="mailto:"+i),l()}):/^\s*www\./i.test(i)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){t&&(i="http://"+i),l()}):void l():void t.execCommand("unlink")}})}t.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:e(n),stateSelector:"a[href]"}),t.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),t.addShortcut("Ctrl+K","",e(n)),this.showDialog=n,t.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:e(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})});tinymce.PluginManager.add("lists",function(e){function t(e){return e&&/^(OL|UL)$/.test(e.nodeName)}function n(e){return e.parentNode.firstChild==e}function r(e){return e.parentNode.lastChild==e}function o(t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]}function i(e){return e&&"SPAN"===e.nodeName&&"bookmark"===e.getAttribute("data-mce-type")}var a=this;e.on("init",function(){function d(e){function t(t){var r,o,i;o=e[t?"startContainer":"endContainer"],i=e[t?"startOffset":"endOffset"],1==o.nodeType&&(r=b.create("span",{"data-mce-type":"bookmark"}),o.hasChildNodes()?(i=Math.min(i,o.childNodes.length-1),t?o.insertBefore(r,o.childNodes[i]):b.insertAfter(r,o.childNodes[i])):o.appendChild(r),o=r,i=0),n[t?"startContainer":"endContainer"]=o,n[t?"startOffset":"endOffset"]=i}var n={};return t(!0),e.collapsed||t(),n}function s(e){function t(t){function n(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t==e)return n;(1!=t.nodeType||"bookmark"!=t.getAttribute("data-mce-type"))&&n++,t=t.nextSibling}return-1}var r,o,i;r=i=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"],r&&(1==r.nodeType&&(o=n(r),r=r.parentNode,b.remove(i)),e[t?"startContainer":"endContainer"]=r,e[t?"startOffset":"endOffset"]=o)}t(!0),t();var n=b.createRng();n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),k.setRng(n)}function f(t,n){var r,o,i,a=b.createFragment(),d=e.schema.getBlockElements();if(e.settings.forced_root_block&&(n=n||e.settings.forced_root_block),n&&(o=b.create(n),o.tagName===e.settings.forced_root_block&&b.setAttribs(o,e.settings.forced_root_block_attrs),a.appendChild(o)),t)for(;r=t.firstChild;){var s=r.nodeName;i||"SPAN"==s&&"bookmark"==r.getAttribute("data-mce-type")||(i=!0),d[s]?(a.appendChild(r),o=null):n?(o||(o=b.create(n),a.appendChild(o)),o.appendChild(r)):a.appendChild(r)}return e.settings.forced_root_block?i||tinymce.Env.ie&&!(tinymce.Env.ie>10)||o.appendChild(b.create("br",{"data-mce-bogus":"1"})):a.appendChild(b.create("br")),a}function l(){return tinymce.grep(k.getSelectedBlocks(),function(e){return"LI"==e.nodeName})}function c(e,t,n){var r,o,i=b.select('span[data-mce-type="bookmark"]',e);n=n||f(t),r=b.createRng(),r.setStartAfter(t),r.setEndAfter(e),o=r.extractContents(),b.isEmpty(o)||b.insertAfter(o,e),b.insertAfter(n,e),b.isEmpty(t.parentNode)&&(tinymce.each(i,function(e){t.parentNode.parentNode.insertBefore(e,t.parentNode)}),b.remove(t.parentNode)),b.remove(t)}function p(e){var n,r;if(n=e.nextSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.appendChild(r);b.remove(n)}if(n=e.previousSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.insertBefore(r,e.firstChild);b.remove(n)}}function u(e){tinymce.each(tinymce.grep(b.select("ol,ul",e)),function(e){var n,r=e.parentNode;"LI"==r.nodeName&&r.firstChild==e&&(n=r.previousSibling,n&&"LI"==n.nodeName&&(n.appendChild(e),b.isEmpty(r)&&b.remove(r))),t(r)&&(n=r.previousSibling,n&&"LI"==n.nodeName&&n.appendChild(e))})}function m(e){function o(e){b.isEmpty(e)&&b.remove(e)}var i,a=e.parentNode,d=a.parentNode;return n(e)&&r(e)?("LI"==d.nodeName?(b.insertAfter(e,d),o(d),b.remove(a)):t(d)?b.remove(a,!0):(d.insertBefore(f(e),a),b.remove(a)),!0):n(e)?("LI"==d.nodeName?(b.insertAfter(e,d),e.appendChild(a),o(d)):t(d)?d.insertBefore(e,a):(d.insertBefore(f(e),a),b.remove(e)),!0):r(e)?("LI"==d.nodeName?b.insertAfter(e,d):t(d)?b.insertAfter(e,a):(b.insertAfter(f(e),a),b.remove(e)),!0):("LI"==d.nodeName?(a=d,i=f(e,"LI")):i=t(d)?f(e,"LI"):f(e),c(a,e,i),u(a.parentNode),!0)}function h(e){function n(n,r){var o;if(t(n)){for(;o=e.lastChild.firstChild;)r.appendChild(o);b.remove(n)}}var r,o;return r=e.previousSibling,r&&t(r)?(r.appendChild(e),!0):r&&"LI"==r.nodeName&&t(r.lastChild)?(r.lastChild.appendChild(e),n(e.lastChild,r.lastChild),!0):(r=e.nextSibling,r&&t(r)?(r.insertBefore(e,r.firstChild),!0):r&&"LI"==r.nodeName&&t(e.lastChild)?!1:(r=e.previousSibling,r&&"LI"==r.nodeName?(o=b.create(e.parentNode.nodeName),r.appendChild(o),o.appendChild(e),n(e.lastChild,o),!0):!1))}function v(){var t=l();if(t.length){for(var n=d(k.getRng(!0)),r=0;r0))return n;for(var o=new tinymce.dom.TreeWalker(e.startContainer);n=o[t?"next":"prev"]();)if(3==n.nodeType&&n.data.length>0)return n}function r(e,n){var r,o,i=e.parentNode;for(t(n.lastChild)&&(o=n.lastChild),r=n.lastChild,r&&"BR"==r.nodeName&&e.hasChildNodes()&&b.remove(r);r=e.firstChild;)n.appendChild(r);o&&n.appendChild(o),b.remove(e),b.isEmpty(i)&&b.remove(i)}if(k.isCollapsed()){var o=b.getParent(k.getStart(),"LI");if(o){var i=k.getRng(!0),a=b.getParent(n(i,e),"LI");if(a&&a!=o){var f=d(i);return e?r(a,o):r(o,a),s(f),!0}if(!a&&!e&&N(o.parentNode.nodeName))return!0}}},e.addCommand("Indent",function(){return v()?void 0:!0}),e.addCommand("Outdent",function(){return C()?void 0:!0}),e.addCommand("InsertUnorderedList",function(){y("UL")}),e.addCommand("InsertOrderedList",function(){y("OL")}),e.on("keydown",function(t){9==t.keyCode&&e.dom.getParent(e.selection.getStart(),"LI")&&(t.preventDefault(),t.shiftKey?C():v())})}),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(){var t=this;e.on("nodechange",function(){for(var r=e.selection.getSelectedBlocks(),o=!1,i=0,a=r.length;!o&&a>i;i++){var d=r[i].nodeName;o="LI"==d&&n(r[i])||"UL"==d||"OL"==d}t.disabled(o)})}}),e.on("keydown",function(e){e.keyCode==tinymce.util.VK.BACKSPACE?a.backspaceDelete()&&e.preventDefault():e.keyCode==tinymce.util.VK.DELETE&&a.backspaceDelete(!0)&&e.preventDefault()})});tinymce.PluginManager.add("media",function(e,t){function i(e){return-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var i=e.settings.media_scripts;if(i)for(var r=0;r':"application/x-shockwave-flash"==o.source1mime?(a+='',o.poster&&(a+=''),a+=""):-1!=o.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(o):a+='":"script"==o.type?a+='':a=e.settings.video_template_callback?e.settings.video_template_callback(o):'"}return a}function s(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var o=r(i.map.src);if(!o)return;t={type:"script",source1:i.map.src,width:o.width,height:o.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function n(t){return t.getAttribute("data-mce-object")?s(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,o,a;for(i in t)if(o=""+t[i],e.map[i])for(r=e.length;r--;)a=e[r],a.name==i&&(o?(e.map[i]=o,a.value=o):(delete e.map[i],e.splice(r,1)));else o&&(e.push({name:i,value:o}),e.map[i]=o)}var o,a=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,s,n){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(s,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(s,{poster:t.poster,src:""}),t.source2&&r(s,{src:""});break;case"iframe":r(s,{src:t.source1});break;case"source":if(c++,2>=c&&(r(s,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;o=!0}a.start(e,s,n)},end:function(e){if("video"==e&&i)for(var s=1;2>=s;s++)if(t["source"+s]){var n=[];n.map={},s>c&&(r(n,{src:t["source"+s],type:t["source"+s+"mime"]}),a.start("source",n,!0))}if(t.poster&&"object"==e&&i&&!o){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),a.start("img",m,!0)}a.end(e)}},new tinymce.html.Schema({})).parse(e),a.getContent()}var u=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"'}];e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("]*>","gi")});var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var o,a,c,s,n,m,u,d,l=t.length;l--;)if(a=t[l],a.parent&&("script"!=a.name||(d=r(a.attr("src"))))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,d&&(d.width&&a.attr("width",d.width.toString()),d.height&&a.attr("height",d.height.toString())),m=a.attributes,o=m.length;o--;)s=m[o].name,n=m[o].value,"width"!==s&&"height"!==s&&"style"!==s&&(("data"==s||"src"==s)&&(n=e.convertURL(n,s)),c.attr("data-mce-p-"+s,n));u=a.firstChild&&a.firstChild.value,u&&(c.attr("data-mce-html",escape(u)),c.firstChild=null),c.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==i?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),a.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,o,a,c,s,n,m=e.length;m--;)if(i=e[m],i.parent){for(n=i.attr(t),r=new tinymce.html.Node(n,1),"audio"!=n&&"script"!=n&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),a=i.attributes,o=a.length;o--;){var u=a[o].name;0===u.indexOf("data-mce-p-")&&r.attr(u.substr(11),a[o].value)}"script"==n&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(s=new tinymce.html.Node("#text",3),s.raw=!0,s.value=unescape(c),r.append(s)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:o,stateSelector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:o,context:"insert",prependToContext:!0})});tinymce.PluginManager.add("nonbreaking",function(n){var e=n.getParam("nonbreaking_force_tab");if(n.addCommand("mceNonBreaking",function(){n.insertContent(n.plugins.visualchars&&n.plugins.visualchars.state?' ':" "),n.dom.setAttrib(n.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),n.addButton("nonbreaking",{title:"Insert nonbreaking space",cmd:"mceNonBreaking"}),n.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),e){var a=+e>1?+e:3;n.on("keydown",function(e){if(9==e.keyCode){if(e.shiftKey)return;e.preventDefault();for(var t=0;a>t;t++)n.execCommand("mceNonBreaking")}})}});tinymce.PluginManager.add("noneditable",function(e){function t(e){var t;if(1===e.nodeType){if(t=e.getAttribute(u),t&&"inherit"!==t)return t;if(t=e.contentEditable,"inherit"!==t)return t}return null}function n(e){for(var n;e;){if(n=t(e))return"false"===n?e:null;e=e.parentNode}}function r(){function r(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function a(e){var t;if(e)for(t=new f(e,e),e=t.current();e;e=t.next())if(3===e.nodeType)return e}function i(n,r){var a,i;return"false"===t(n)&&u.isBlock(n)?void s.select(n):(i=u.createRng(),"true"===t(n)&&(n.firstChild||n.appendChild(e.getDoc().createTextNode(" ")),n=n.firstChild,r=!0),a=u.create("span",{id:g,"data-mce-bogus":!0},m),r?n.parentNode.insertBefore(a,n):u.insertAfter(a,n),i.setStart(a.firstChild,1),i.collapse(!0),s.setRng(i),a)}function o(e){var t,n,i,o;if(e)t=s.getRng(!0),t.setStartBefore(e),t.setEndBefore(e),n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0),s.setRng(t);else for(i=r(s.getStart());(e=u.get(g))&&e!==o;)i!==e&&(n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0)),o=e}function l(){function e(e,n){var r,a,i,o,l;if(r=d.startContainer,a=d.startOffset,3==r.nodeType){if(l=r.nodeValue.length,a>0&&l>a||(n?a==l:0===a))return}else{if(!(a0?a-1:a;r=r.childNodes[u],r.hasChildNodes()&&(r=r.firstChild)}for(i=new f(r,e);o=i[n?"prev":"next"]();){if(3===o.nodeType&&o.nodeValue.length>0)return;if("true"===t(o))return o}return e}var r,a,l,d,u;o(),l=s.isCollapsed(),r=n(s.getStart()),a=n(s.getEnd()),(r||a)&&(d=s.getRng(!0),l?(r=r||a,(u=e(r,!0))?i(u,!0):(u=e(r,!1))?i(u,!1):s.select(r)):(d=s.getRng(!0),r&&d.setStartBefore(r),a&&d.setEndAfter(a),s.setRng(d)))}function d(a){function i(e,t){for(;e=e[t?"previousSibling":"nextSibling"];)if(3!==e.nodeType||e.nodeValue.length>0)return e}function d(e,t){s.select(e),s.collapse(t)}function g(a){function i(e){for(var t=d;t;){if(t===e)return;t=t.parentNode}u.remove(e),l()}function o(){var r,o,l=e.schema.getNonEmptyElements();for(o=new tinymce.dom.TreeWalker(d,e.getBody());(r=a?o.prev():o.next())&&!l[r.nodeName.toLowerCase()]&&!(3===r.nodeType&&tinymce.trim(r.nodeValue).length>0);)if("false"===t(r))return i(r),!0;return n(r)?!0:!1}var f,d,c,g;if(s.isCollapsed()){if(f=s.getRng(!0),d=f.startContainer,c=f.startOffset,d=r(d)||d,g=n(d))return i(g),!1;if(3==d.nodeType&&(a?c>0:ch||h>124)&&h!=c.DELETE&&h!=c.BACKSPACE){if((tinymce.isMac?a.metaKey:a.ctrlKey)&&(67==h||88==h||86==h))return;if(a.preventDefault(),h==c.LEFT||h==c.RIGHT){var y=h==c.LEFT;if(e.dom.isBlock(m)){var T=y?m.previousSibling:m.nextSibling,C=new f(T,T),b=y?C.prev():C.next();d(b,!y)}else d(m,y)}}else if(h==c.LEFT||h==c.RIGHT||h==c.BACKSPACE||h==c.DELETE){if(p=r(v)){if(h==c.LEFT||h==c.BACKSPACE)if(m=i(p,!0),m&&"false"===t(m)){if(a.preventDefault(),h!=c.LEFT)return void u.remove(m);d(m,!0)}else o(p);if(h==c.RIGHT||h==c.DELETE)if(m=i(p),m&&"false"===t(m)){if(a.preventDefault(),h!=c.RIGHT)return void u.remove(m);d(m,!1)}else o(p)}if((h==c.BACKSPACE||h==c.DELETE)&&!g(h==c.BACKSPACE))return a.preventDefault(),!1}}var u=e.dom,s=e.selection,g="mce_noneditablecaret",m="";e.on("mousedown",function(n){var r=e.selection.getNode();"false"===t(r)&&r==n.target&&l()}),e.on("mouseup keyup",l),e.on("keydown",d)}function a(t){var n=l.length,r=t.content,a=tinymce.trim(o);if("raw"!=t.format){for(;n--;)r=r.replace(l[n],function(t){var n=arguments,i=n[n.length-2];return i>0&&'"'==r.charAt(i-1)?t:''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""});t.content=r}}var i,o,l,f=tinymce.dom.TreeWalker,d="contenteditable",u="data-mce-"+d,c=tinymce.util.VK;i=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",o=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ",l=e.getParam("noneditable_regexp"),l&&!l.length&&(l=[l]),e.on("PreInit",function(){r(),l&&e.on("BeforeSetContent",a),e.parser.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)n=e[r],t=" "+n.attr("class")+" ",-1!==t.indexOf(i)?n.attr(u,"true"):-1!==t.indexOf(o)&&n.attr(u,"false")}),e.serializer.addAttributeFilter(u,function(e){for(var t,n=e.length;n--;)t=e[n],l&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):(t.attr(d,null),t.attr(u,null))}),e.parser.addAttributeFilter(d,function(e){for(var t,n=e.length;n--;)t=e[n],t.attr(u,t.attr(d)),t.attr(d,null)})}),e.on("drop",function(e){n(e.target)&&e.preventDefault()})});tinymce.PluginManager.add("pagebreak",function(e){var a="mce-pagebreak",t=e.getParam("pagebreak_separator",""),n=new RegExp(t.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),r='';e.addCommand("mcePageBreak",function(){e.insertContent(e.settings.pagebreak_split_block?"

      "+r+"

      ":r)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(t){"IMG"==t.target.nodeName&&e.dom.hasClass(t.target,a)&&(t.name="pagebreak")}),e.on("click",function(t){t=t.target,"IMG"===t.nodeName&&e.dom.hasClass(t,a)&&e.selection.select(t)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(n,r)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(a){for(var n,r,c=a.length;c--;)if(n=a[c],r=n.attr("class"),r&&-1!==r.indexOf("mce-pagebreak")){var o=n.parent;if(e.schema.getBlockElements()[o.name]&&e.settings.pagebreak_split_block){o.type=3,o.value=t,o.raw=!0,n.remove();continue}n.type=3,n.value=t,n.raw=!0}})})});!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"
      "]]):(e=n.filter(e,[[/\n\n/g,"

      "+a],[/^(.*<\/p>)(

      )$/,a+"$1"],[/\n/g,"
      "]]),-1!=e.indexOf("

      ")&&(e=a+e)),r(e)}function a(){var t=i.dom,n=i.getBody(),r=i.dom.getViewPort(i.getWin()),o=r.y,a=20,s;if(v=i.selection.getRng(),i.inline&&(s=i.selection.getScrollContainer(),s&&s.scrollTop>0&&(o=s.scrollTop)),v.getClientRects){var l=v.getClientRects();if(l.length)a=o+(l[0].top-t.getPos(n).y);else{a=o;var c=v.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&(a=t.getPos(c,s||n).y))}}h=t.add(i.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"1",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},y),(e.ie||e.gecko)&&t.setStyle(h,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(h,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),h.focus(),i.selection.select(h,!0)}function s(){if(h){for(var e;e=i.dom.get("mcepastebin");)i.dom.remove(e),i.dom.unbind(e);v&&i.selection.setRng(v)}x=!1,h=v=null}function l(){var e=y,t,n;for(t=i.dom.select("div[id=mcepastebin]"),n=t.length;n--;){var r=t[n].innerHTML;e==y&&(e=""),r.length>e.length&&(e=r)}return e}function c(e){var t={};if(e&&e.types){var n=e.getData("Text");n&&n.length>0&&(t["text/plain"]=n);for(var i=0;i')},t.readAsDataURL(e.getAsFile()),!0}}if(!(!i.settings.paste_data_images||"text/html"in t||"text/plain"in t)&&e.clipboardData){var o=e.clipboardData.items;if(o)for(var a=0;a0}function p(){i.on("keydown",function(n){if(!n.isDefaultPrevented()&&(t.metaKeyPressed(n)&&86==n.keyCode||n.shiftKey&&45==n.keyCode)){if(x=n.shiftKey&&86==n.keyCode,n.stopImmediatePropagation(),b=(new Date).getTime(),e.ie&&x)return n.preventDefault(),void i.fire("paste",{ieFake:!0});s(),a()}}),i.on("paste",function(t){var c=d(t),f=(new Date).getTime()-b<1e3,p="text"==g.pasteFormat||x;return t.isDefaultPrevented()?void s():u(t,c)?void s():(f||t.preventDefault(),!e.ie||f&&!t.ieFake||(a(),i.dom.bind(h,"paste",function(e){e.stopPropagation()}),i.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e=l();return h&&h.firstChild&&"mcepastebin"===h.firstChild.id&&(p=!0),s(),!p&&f&&e&&e!=y&&(c["text/html"]=e),e!=y&&f||(e=c["text/html"]||c["text/plain"]||y,e!=y)?(!m(c,"text/html")&&m(c,"text/plain")&&(p=!0),void(p?o(c["text/plain"]||n.innerText(e)):r(e))):void(f||i.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."))},0))}),i.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",i.selection.getContent())}catch(t){}}),i.on("drop",function(e){var t=f(e);if(t&&!e.isDefaultPrevented()){var n=c(e.dataTransfer),a=n["mce-internal"]||n["text/html"]||n["text/plain"];a&&(e.preventDefault(),i.undoManager.transact(function(){n["mce-internal"]&&i.execCommand("Delete"),i.selection.setRng(t),n["text/html"]?r(a):o(a)}))}})}var g=this,h,v,b=0,y="%MCEPASTEBIN%",x;g.pasteHtml=r,g.pasteText=o,i.on("preInit",function(){p(),i.parser.addNodeFilter("img",function(t){if(!i.settings.paste_data_images)for(var n=t.length;n--;){var r=t[n].attributes.map.src;r&&0===r.indexOf("data:image")&&(t[n].attr("data-mce-object")||r===e.transparentSrc||t[n].remove())}})}),i.on("PreProcess",function(){i.dom.remove(i.dom.get("mcepastebin"))})}}),i(g,[c,d,u,h,v,l],function(e,t,n,i,r,o){function a(e){return/l?n&&(n=n.parent.parent):(i=n,n=null)),n&&n.name==a?n.append(e):(i=i||n,n=new r(a,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>o&&i&&i.lastChild.append(n),o=l}for(var n,i,o=1,a=e.getAll("p"),s=0;s/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var g=l.paste_word_valid_elements;g||(g="-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br,del");var h=new n({valid_elements:g,valid_children:"-li[p]"});e.each(h.elements,function(e){e.attributes["class"]||(e.attributes["class"]={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var v=new t({},h);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",u(n,n.attr("style"))),"span"==n.name&&n.parent&&!n.attributes.length&&n.unwrap()}),v.addAttributeFilter("class",function(e){for(var t=e.length,n,i;t--;)n=e[t],i=n.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(i)&&n.remove(),n.attr("class",null)}),v.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,i,r;t--;)if(n=e[t],i=n.attr("href"),r=n.attr("name"),i&&-1!=i.indexOf("#_msocom_"))n.remove();else if(i&&0===i.indexOf("file://")&&(i=i.split("#")[1],i&&(i="#"+i)),i||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){n.unwrap();continue}n.attr({href:i,name:r})}else n.unwrap()});var b=v.parse(f);d(b),c.content=new i({},h).serialize(b)}})}return s.isWordContent=a,s}),i(b,[m,c,g,l],function(e,t,n,i){return function(r){function o(e){r.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){return e=i.filter(e,[/^[\s\S]*]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/|/g,[/\u00a0<\/span>/g,"\xa0"],/
      $/i])}function s(e){if(!n.isWordContent(e))return e;var o=[];t.each(r.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
       [\\s\\r\\n]+|
      )*(<\\/?("+o.join("|")+")[^>]*>)(?:
       [\\s\\r\\n]+|
      )*","g");return e=i.filter(e,[[a,"$1"]]),e=i.filter(e,[[/

      /g,"

      "],[/
      /g," "],[/

      /g,"
      "]])}function l(e){if(n.isWordContent(e))return e;var t=r.settings.paste_webkit_styles;if(r.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&&(t=t.split(/[, ]/)),t){var i=r.dom,o=r.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,r,a){var s=i.parseStyle(r,"span"),l={};if("none"===t)return n+a;for(var c=0;c]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,i){return t+' style="'+n+'"'+i})}e.webkit&&(o(l),o(a)),e.ie&&o(s)}}),i(y,[x,f,g,b],function(e,t,n,i){var r;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),r||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),r=!0))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new i(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,f,g,b,y])}(this);tinymce.PluginManager.add("preview",function(e){var t=e.settings,i=!tinymce.Env.ie;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var n,a="";a+='',tinymce.each(e.contentCSS,function(t){a+=''});var r=t.body_id||"tinymce";-1!=r.indexOf("=")&&(r=e.getParam("body_id","","hash"),r=r[e.id]||r);var d=t.body_class||"";-1!=d.indexOf("=")&&(d=e.getParam("body_class","","hash"),d=d[e.id]||"");var o=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";if(n=""+a+'"+e.getContent()+"",i)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(n);else{var s=this.getEl("body").firstChild.contentWindow.document;s.open(),s.write(n),s.close()}}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})});tinymce.PluginManager.add("print",function(t){t.addCommand("mcePrint",function(){t.getWin().print()}),t.addButton("print",{title:"Print",cmd:"mcePrint"}),t.addShortcut("Ctrl+P","","mcePrint"),t.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Ctrl+P",context:"file"})});tinymce.PluginManager.add("save",function(e){function a(){var a;return a=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty()?(tinymce.triggerSave(),e.getParam("save_onsavecallback")?void(e.execCallback("save_onsavecallback",e)&&(e.startContent=tinymce.trim(e.getContent({format:"raw"})),e.nodeChanged())):void(a?(e.isNotDirty=!0,(!a.onsubmit||a.onsubmit())&&("function"==typeof a.submit?a.submit():e.windowManager.alert("Error: Form submit field collision.")),e.nodeChanged()):e.windowManager.alert("Error: No form element found."))):void 0}function n(){var a=tinymce.trim(e.startContent);return e.getParam("save_oncancelcallback")?void e.execCallback("save_oncancelcallback",e):(e.setContent(a),e.undoManager.clear(),void e.nodeChanged())}function t(){var a=this;e.on("nodeChange",function(){a.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",a),e.addCommand("mceCancel",n),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:t}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:t}),e.addShortcut("ctrl+s","","mceSave")});!function(){function e(e,t,n,a,r){function i(e,t){if(t=t||0,!e[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var n=e.index;if(t>0){var a=e[t];if(!a)throw"Invalid capture group";n+=e[0].indexOf(a),e[0]=a}return[n,n+e[0].length,[e[0]]]}function d(e){var t;if(3===e.nodeType)return e.data;if(h[e.nodeName]&&!u[e.nodeName])return"";if(t="",(u[e.nodeName]||m[e.nodeName])&&(t+="\n"),e=e.firstChild)do t+=d(e);while(e=e.nextSibling);return t}function o(e,t,n){var a,r,i,d,o=[],l=0,c=e,s=t.shift(),f=0;e:for(;;){if((u[c.nodeName]||m[c.nodeName])&&l++,3===c.nodeType&&(!r&&c.length+l>=s[1]?(r=c,d=s[1]-l):a&&o.push(c),!a&&c.length+l>s[0]&&(a=c,i=s[0]-l),l+=c.length),a&&r){if(c=n({startNode:a,startNodeIndex:i,endNode:r,endNodeIndex:d,innerNodes:o,match:s[2],matchIndex:f}),l-=r.length-d,a=null,r=null,o=[],s=t.shift(),f++,!s)break}else{if((!h[c.nodeName]||u[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function l(e){var t;if("function"!=typeof e){var n=e.nodeType?e:f.createElement(e);t=function(e,t){var a=n.cloneNode(!1);return a.setAttribute("data-mce-index",t),e&&a.appendChild(f.createTextNode(e)),a}}else t=e;return function(e){var n,a,r,i=e.startNode,d=e.endNode,o=e.matchIndex;if(i===d){var l=i;r=l.parentNode,e.startNodeIndex>0&&(n=f.createTextNode(l.data.substring(0,e.startNodeIndex)),r.insertBefore(n,l));var c=t(e.match[0],o);return r.insertBefore(c,l),e.endNodeIndexh;++h){var g=e.innerNodes[h],p=t(g.data,o);g.parentNode.replaceChild(p,g),u.push(p)}var x=t(d.data.substring(0,e.endNodeIndex),o);return r=i.parentNode,r.insertBefore(n,i),r.insertBefore(s,i),r.removeChild(i),r=d.parentNode,r.insertBefore(x,d),r.insertBefore(a,d),r.removeChild(d),x}}var c,s,f,u,h,m,g=[],p=0;if(f=t.ownerDocument,u=r.getBlockElements(),h=r.getWhiteSpaceElements(),m=r.getShortEndedElements(),s=d(t)){if(e.global)for(;c=e.exec(s);)g.push(i(c,a));else c=s.match(e),g.push(i(c,a));return g.length&&(p=g.length,o(t,g,l(n))),p}}function t(t){function n(){function e(){r.statusbar.find("#next").disabled(!d(s+1).length),r.statusbar.find("#prev").disabled(!d(s-1).length)}function n(){tinymce.ui.MessageBox.alert("Could not find the specified string.",function(){r.find("#find")[0].focus()})}var a={},r=tinymce.ui.Factory.create({type:"window",layout:"flex",pack:"center",align:"center",onClose:function(){t.focus(),c.done()},onSubmit:function(t){var i,o,l,f;return t.preventDefault(),o=r.find("#case").checked(),f=r.find("#words").checked(),l=r.find("#find").value(),l.length?a.text==l&&a.caseState==o&&a.wholeWord==f?0===d(s+1).length?void n():(c.next(),void e()):(i=c.find(l,o,f),i||n(),r.statusbar.items().slice(1).disabled(0===i),e(),void(a={text:l,caseState:o,wholeWord:f})):(c.done(!1),void r.statusbar.items().slice(1).disabled(!0))},buttons:[{text:"Find",onclick:function(){r.submit()}},{text:"Replace",disabled:!0,onclick:function(){c.replace(r.find("#replace").value())||(r.statusbar.items().slice(1).disabled(!0),s=-1,a={})}},{text:"Replace all",disabled:!0,onclick:function(){c.replace(r.find("#replace").value(),!0,!0),r.statusbar.items().slice(1).disabled(!0),a={}}},{type:"spacer",flex:1},{text:"Prev",name:"prev",disabled:!0,onclick:function(){c.prev(),e()}},{text:"Next",name:"next",disabled:!0,onclick:function(){c.next(),e()}}],title:"Find and replace",items:{type:"form",padding:20,labelGap:30,spacing:10,items:[{type:"textbox",name:"find",size:40,label:"Find",value:t.selection.getNode().src},{type:"textbox",name:"replace",size:40,label:"Replace with"},{type:"checkbox",name:"case",text:"Match case",label:" "},{type:"checkbox",name:"words",text:"Whole words",label:" "}]}}).renderTo().reflow()}function a(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function r(n){var a,r;return r=t.dom.create("span",{"data-mce-bogus":1}),r.className="mce-match-marker",a=t.getBody(),c.done(!1),e(n,a,r,!1,t.schema)}function i(e){var t=e.parentNode;e.firstChild&&t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function d(e){var n,r=[];if(n=tinymce.toArray(t.getBody().getElementsByTagName("span")),n.length)for(var i=0;is&&f[o].setAttribute("data-mce-index",m-1)}return t.undoManager.add(),s=p,n?(g=d(p+1).length>0,c.next()):(g=d(p-1).length>0,c.prev()),!r&&g},c.done=function(e){var n,r,d,o;for(r=tinymce.toArray(t.getBody().getElementsByTagName("span")),n=0;n=d.end?(r=c,a=d.end-s):o&&l.push(c),!o&&c.length+s>d.start&&(o=c,i=d.start-s),s+=c.length),o&&r){if(c=n({startNode:o,startNodeIndex:i,endNode:r,endNodeIndex:a,innerNodes:l,match:d.text,matchIndex:u}),s-=r.length-a,o=null,r=null,l=[],d=t.shift(),u++,!d)break}else{if((!P[c.nodeName]||S[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function i(e){function t(t,n){var o=w[n];o.stencil||(o.stencil=e(o));var r=o.stencil.cloneNode(!1);return r.setAttribute("data-mce-index",n),t&&r.appendChild(k.doc.createTextNode(t)),r}return function(e){var n,o,r,i=e.startNode,a=e.endNode,l=e.matchIndex,s=k.doc;if(i===a){var c=i;r=c.parentNode,e.startNodeIndex>0&&(n=s.createTextNode(c.data.substring(0,e.startNodeIndex)),r.insertBefore(n,c));var d=t(e.match,l);return r.insertBefore(d,c),e.endNodeIndexm;++m){var g=e.innerNodes[m],h=t(g.data,l);g.parentNode.replaceChild(h,g),f.push(h)}var v=t(a.data.substring(0,e.endNodeIndex),l);return r=i.parentNode,r.insertBefore(n,i),r.insertBefore(u,i),r.removeChild(i),r=a.parentNode,r.insertBefore(v,a),r.insertBefore(o,a),r.removeChild(a),v}}function a(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function l(t){var n=e.getElementsByTagName("*"),o=[];t="number"==typeof t?""+t:null;for(var r=0;rt&&e(w[t],t)!==!1;t++);return this}function u(t){return w.length&&r(e,w,i(t)),this}function f(e,t){if(C&&e.global)for(;x=e.exec(C);)w.push(n(x,t));return this}function m(e){var t,n=l(e?s(e):null);for(t=n.length;t--;)a(n[t]);return this}function p(e){return w[e.getAttribute("data-mce-index")]}function g(e){return l(s(e))[0]}function h(e,t,n){return w.push({start:e,end:e+t,text:C.substr(e,t),data:n}),this}function v(e){var n=l(s(e)),o=t.dom.createRng();return o.setStartBefore(n[0]),o.setEndAfter(n[n.length-1]),o}function b(e,n){var o=v(e);return o.deleteContents(),n.length>0&&o.insertNode(t.dom.doc.createTextNode(n)),o}function y(){return w.splice(0,w.length),m(),this}var x,w=[],C,k=t.dom,S,P,N;return S=t.schema.getBlockElements(),P=t.schema.getWhiteSpaceElements(),N=t.schema.getShortEndedElements(),C=o(e),{text:C,matches:w,each:d,filter:c,reset:y,matchFromElement:p,elementFromMatch:g,find:f,add:h,wrap:u,unwrap:m,replace:b,rangeFromMatch:v,indexOf:s}}}),o(c,[s,d,u,f,m,p,g,h],function(e,t,n,o,r,i,a,l){t.add("spellchecker",function(t,s){function c(){return C.textMatcher||(C.textMatcher=new e(t.getBody(),t)),C.textMatcher}function d(e,t){var o=[];return n.each(t,function(e){o.push({selectable:!0,text:e.name,data:e.value})}),o}function u(e){for(var t in e)return!1;return!0}function f(e,i){var a=[],l=k[e];n.each(l,function(e){a.push({text:e,onclick:function(){t.insertContent(t.dom.encode(e)),t.dom.remove(i),g()}})}),a.push.apply(a,[{text:"-"},{text:"Ignore",onclick:function(){h(e,i)}},{text:"Ignore all",onclick:function(){h(e,i,!0)}},{text:"Finish",onclick:v}]),P=new o({items:a,context:"contextmenu",onautohide:function(e){-1!=e.target.className.indexOf("spellchecker")&&e.preventDefault()},onhide:function(){P.remove(),P=null}}),P.renderTo(document.body);var s=r.DOM.getPos(t.getContentAreaContainer()),c=t.dom.getPos(i[0]),d=t.dom.getRoot();"BODY"==d.nodeName?(c.x-=d.ownerDocument.documentElement.scrollLeft||d.scrollLeft,c.y-=d.ownerDocument.documentElement.scrollTop||d.scrollTop):(c.x-=d.scrollLeft,c.y-=d.scrollTop),s.x+=c.x,s.y+=c.y,P.moveTo(s.x,s.y+i[0].offsetHeight)}function m(){return t.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e]+',"g")}function p(){function e(e){return t.setProgressState(!1),u(e)?(t.windowManager.alert("No misspellings found"),void(S=!1)):(k=e,c().find(m()).filter(function(t){return!!e[t.text]}).wrap(function(e){return t.dom.create("span",{"class":"mce-spellchecker-word","data-mce-bogus":1,"data-mce-word":e.text})}),void t.fire("SpellcheckStart"))}function n(e){t.windowManager.alert(e),t.setProgressState(!1),v()}function o(e,t,o){i.send({url:new a(s).toAbsolute(N.spellchecker_rpc_url),type:"post",content_type:"application/x-www-form-urlencoded",data:"text="+encodeURIComponent(t)+"&lang="+N.spellchecker_language,success:function(e){e=l.parse(e),e?e.error?n(e.error):o(e.words):n("Sever response wasn't proper JSON.")},error:function(e,t){n("Spellchecker request error: "+t.status)}})}if(S)return void v();v(),S=!0,t.setProgressState(!0);var r=N.spellchecker_callback||o;r.call(C,"spellcheck",c().text,e,n),t.focus()}function g(){t.dom.select("span.mce-spellchecker-word").length||v()}function h(e,o,r){t.selection.collapse(),r?n.each(t.dom.select("span.mce-spellchecker-word"),function(n){n.getAttribute("data-mce-word")==e&&t.dom.remove(n,!0)}):t.dom.remove(o,!0),g()}function v(){c().reset(),C.textMatcher=null,S&&(S=!1,t.fire("SpellcheckEnd"))}function b(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function y(e){var o,r=[];if(o=n.toArray(t.getBody().getElementsByTagName("span")),o.length)for(var i=0;i0){var r=t.dom.createRng();r.setStartBefore(o[0]),r.setEndAfter(o[o.length-1]),t.selection.setRng(r),f(n.getAttribute("data-mce-word"),o)}}}),t.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:p,selectable:!0,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(S)})}});var T={tooltip:"Spellcheck",onclick:p,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(S)})}};w.length>1&&(T.type="splitbutton",T.menu=w,T.onshow=x,T.onselect=function(e){N.spellchecker_language=e.control.settings.data}),t.addButton("spellchecker",T),t.addCommand("mceSpellCheck",p),t.on("remove",function(){P&&(P.remove(),P=null)}),t.on("change",g),this.getTextMatcher=c,this.getWordCharPattern=m,this.getLanguage=function(){return N.spellchecker_language},N.spellchecker_language=N.spellchecker_language||N.language||"en"})}),a([s,c])}(this);tinymce.PluginManager.add("tabfocus",function(e){function n(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function t(n){function t(n){function t(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&t(e.parentNode)}function r(e){return e.tabIndex||"INPUT"==e.nodeName||"TEXTAREA"==e.nodeName}function c(e){return!r(e)&&"-1"!=e.getAttribute("tabindex")&&t(e)}if(u=i.select(":input:enabled,*[tabindex]:not(iframe)"),o(u,function(n,t){return n.id==e.id?(a=t,!1):void 0}),n>0){for(d=a+1;d=0;d--)if(c(u[d]))return u[d];return null}var a,u,c,d;if(!(9!==n.keyCode||n.ctrlKey||n.altKey||n.metaKey)&&(c=r(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==c.length&&(c[1]=c[0],c[0]=":prev"),u=n.shiftKey?":prev"==c[0]?t(-1):i.get(c[0]):":next"==c[1]?t(1):i.get(c[1]))){var y=tinymce.get(u.id||u.name);u.id&&y?y.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),u.focus()},10),n.preventDefault()}}var i=tinymce.DOM,o=tinymce.each,r=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null)}),e.on("keyup",n),tinymce.Env.gecko?e.on("keypress keydown",t):e.on("keydown",t)});!function(e,t){"use strict";function n(e,t){for(var n,o=[],i=0;i "+t+" tr",a);i(n,function(n,r){r+=e,i(I.select("> td, > th",n),function(e,n){var i,a,l,s;if(A[r])for(;A[r][n];)n++;for(l=o(e,"rowspan"),s=o(e,"colspan"),a=r;r+l>a;a++)for(A[a]||(A[a]=[]),i=n;n+s>i;i++)A[a][i]={part:t,real:a==r&&i==n,elm:e,rowspan:l,colspan:s}})}),e+=n.length})}function s(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function c(e,t){var n;return n=A[t],n?n[e]:void 0}function d(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function u(e){return e&&(I.hasClass(e.elm,"mce-item-selected")||e==M)}function f(){var e=[];return i(a.rows,function(t){i(t.cells,function(n){return I.hasClass(n,"mce-item-selected")||M&&n==M.elm?(e.push(t),!1):void 0})}),e}function m(){var e=I.createRng();e.setStartAfter(a),e.setEndAfter(a),E.setRng(e),I.remove(a)}function p(t){var o,a={};return r.settings.table_clone_elements!==!1&&(a=e.makeMap((r.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(t,function(e){var r;return 3==e.nodeType?(i(I.getParents(e.parentNode,null,t).reverse(),function(e){a[e.nodeName]&&(e=s(e,!1),o?r&&r.appendChild(e):o=r=e,r=e)}),r&&(r.innerHTML=n.ie?" ":'
      '),!1):void 0},"childNodes"),t=s(t,!1),d(t,"rowSpan",1),d(t,"colSpan",1),o?t.appendChild(o):n.ie||(t.innerHTML='
      '),t}function g(){var e=I.createRng(),t;return i(I.select("tr",a),function(e){0===e.cells.length&&I.remove(e)}),0===I.select("tr",a).length?(e.setStartBefore(a),e.setEndBefore(a),E.setRng(e),void I.remove(a)):(i(I.select("thead,tbody,tfoot",a),function(e){0===e.rows.length&&I.remove(e)}),l(),void(B&&(t=A[Math.min(A.length-1,B.y)],t&&(E.select(t[Math.min(t.length-1,B.x)].elm,!0),E.collapse(!0)))))}function h(e,t,n,o){var i,r,a,l,s;for(i=A[t][e].elm.parentNode,a=1;n>=a;a++)if(i=I.getNext(i,"tr")){for(r=e;r>=0;r--)if(s=A[t+a][r].elm,s.parentNode==i){for(l=1;o>=l;l++)I.insertAfter(p(s),s);break}if(-1==r)for(l=1;o>=l;l++)i.insertBefore(p(i.cells[0]),i.cells[0])}}function v(){i(A,function(e,t){i(e,function(e,n){var i,r,a;if(u(e)&&(e=e.elm,i=o(e,"colspan"),r=o(e,"rowspan"),i>1||r>1)){for(d(e,"rowSpan",1),d(e,"colSpan",1),a=0;i-1>a;a++)I.insertAfter(p(e),e);h(n,t,r-1,i)}})})}function b(t,n,o){var r,a,s,f,m,p,h,b,y,w,x;if(t?(r=T(t),a=r.x,s=r.y,f=a+(n-1),m=s+(o-1)):(B=D=null,i(A,function(e,t){i(e,function(e,n){u(e)&&(B||(B={x:n,y:t}),D={x:n,y:t})})}),B&&(a=B.x,s=B.y,f=D.x,m=D.y)),b=c(a,s),y=c(f,m),b&&y&&b.part==y.part){for(v(),l(),b=c(a,s).elm,d(b,"colSpan",f-a+1),d(b,"rowSpan",m-s+1),h=s;m>=h;h++)for(p=a;f>=p;p++)A[h]&&A[h][p]&&(t=A[h][p].elm,t!=b&&(w=e.grep(t.childNodes),i(w,function(e){b.appendChild(e)}),w.length&&(w=e.grep(b.childNodes),x=0,i(w,function(e){"BR"==e.nodeName&&I.getAttrib(e,"data-mce-bogus")&&x++0&&A[n-1][l]&&(g=A[n-1][l].elm,h=o(g,"rowSpan"),h>1)){d(g,"rowSpan",h+1);continue}}else if(h=o(r,"rowspan"),h>1){d(r,"rowSpan",h+1);continue}m=p(r),d(m,"colSpan",r.colSpan),f.appendChild(m),a=r}f.hasChildNodes()&&(e?c.parentNode.insertBefore(f,c):I.insertAfter(f,c))}}function w(e){var t,n;i(A,function(n){return i(n,function(n,o){return u(n)&&(t=o,e)?!1:void 0}),e?!t:void 0}),i(A,function(i,r){var a,l,s;i[t]&&(a=i[t].elm,a!=n&&(s=o(a,"colspan"),l=o(a,"rowspan"),1==s?e?(a.parentNode.insertBefore(p(a),a),h(t,r,l-1,s)):(I.insertAfter(p(a),a),h(t,r,l-1,s)):d(a,"colSpan",a.colSpan+1),n=a))})}function x(){var t=[];i(A,function(n){i(n,function(n,r){u(n)&&-1===e.inArray(t,r)&&(i(A,function(e){var t=e[r].elm,n;n=o(t,"colSpan"),n>1?d(t,"colSpan",n-1):I.remove(t)}),t.push(r))})}),g()}function C(){function e(e){var t,n,r;t=I.getNext(e,"tr"),i(e.cells,function(e){var t=o(e,"rowSpan");t>1&&(d(e,"rowSpan",t-1),n=T(e),h(n.x,n.y,1,1))}),n=T(e.cells[0]),i(A[n.y],function(e){var t;e=e.elm,e!=r&&(t=o(e,"rowSpan"),1>=t?I.remove(e):d(e,"rowSpan",t-1),r=e)})}var t;t=f(),i(t.reverse(),function(t){e(t)}),g()}function P(){var e=f();return I.remove(e),g(),e}function S(){var e=f();return i(e,function(t,n){e[n]=s(t,!0)}),e}function R(e,t){var n=f(),o=n[t?0:n.length-1],r=o.cells.length;e&&(i(A,function(e){var t;return r=0,i(e,function(e){e.real&&(r+=e.colspan),e.elm.parentNode==o&&(t=1)}),t?!1:void 0}),t||e.reverse(),i(e,function(e){var n,i=e.cells.length,a;for(n=0;i>n;n++)a=e.cells[n],d(a,"colSpan",1),d(a,"rowSpan",1);for(n=i;r>n;n++)e.appendChild(p(e.cells[i-1]));for(n=r;i>n;n++)I.remove(e.cells[n]);t?o.parentNode.insertBefore(e,o):I.insertAfter(e,o)}),I.removeClass(I.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function T(e){var t;return i(A,function(n,o){return i(n,function(n,i){return n.elm==e?(t={x:i,y:o},!1):void 0}),!t}),t}function k(e){B=T(e)}function N(){var e,t;return e=t=0,i(A,function(n,o){i(n,function(n,i){var r,a;u(n)&&(n=A[o][i],i>e&&(e=i),o>t&&(t=o),n.real&&(r=n.colspan-1,a=n.rowspan-1,r&&i+r>e&&(e=i+r),a&&o+a>t&&(t=o+a)))})}),{x:e,y:t}}function _(e){var t,n,o,i,r,a,l,s,c,d;if(D=T(e),B&&D){for(t=Math.min(B.x,D.x),n=Math.min(B.y,D.y),o=Math.max(B.x,D.x),i=Math.max(B.y,D.y),r=o,a=i,d=n;a>=d;d++)e=A[d][t],e.real||t-(e.colspan-1)=c;c++)e=A[n][c],e.real||n-(e.rowspan-1)=d;d++)for(c=t;o>=c;c++)e=A[d][c],e.real&&(l=e.colspan-1,s=e.rowspan-1,l&&c+l>r&&(r=c+l),s&&d+s>a&&(a=d+s));for(I.removeClass(I.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;r>=c;c++)A[d][c]&&I.addClass(A[d][c].elm,"mce-item-selected")}}var A,B,D,M,E=r.selection,I=E.dom;a=a||I.getParent(E.getStart(),"table"),l(),M=I.getParent(E.getStart(),"th,td"),M&&(B=T(M),D=N(),M=c(B.x,B.y)),e.extend(this,{deleteTable:m,split:v,merge:b,insertRow:y,insertCol:w,deleteCols:x,deleteRows:C,cutRows:P,copyRows:S,pasteRows:R,getPos:T,setStartCell:k,setEndCell:_})}}),o(u,[f,d,c],function(e,t,n){function o(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=n.each;return function(n){function r(){function t(t){function r(e,o){var i=e?"previousSibling":"nextSibling",r=n.dom.getParent(o,"tr"),l=r[i];if(l)return h(n,o,l,e),t.preventDefault(),!0;var d=n.dom.getParent(r,"table"),u=r.parentNode,f=u.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var m=a(e,d,u,"tbody");if(null!==m)return s(e,m,o)}return c(e,r,i,d)}function a(e,t,o,i){var r=n.dom.select(">"+i,t),a=r.indexOf(o);if(e&&0===a||!e&&a===r.length-1)return l(e,t);if(-1===a){var s="thead"===o.tagName.toLowerCase()?0:r.length-1;return r[s]}return r[a+(e?-1:1)]}function l(e,t){var o=e?"thead":"tfoot",i=n.dom.select(">"+o,t);return 0!==i.length?i[0]:null}function s(e,o,i){var r=d(o,e);return r&&h(n,i,r,e),t.preventDefault(),!0}function c(e,o,i,a){var l=a[i];if(l)return u(l),!0;var s=n.dom.getParent(a,"td,th");if(s)return r(e,s,t);var c=d(o,!e);return u(c),t.preventDefault(),!1}function d(e,t){var o=e&&e[t?"lastChild":"firstChild"];return o&&"BR"===o.nodeName?n.dom.getParent(o,"td,th"):o}function u(e){n.selection.setCursorLocation(e,0)}function f(){return y==e.UP||y==e.DOWN}function m(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function p(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=o(n,"colspan");return t}function g(e,t){var n=0,r=0;return i(e.children,function(e,i){return n+=o(e,"colspan"),r=i,n>t?!1:void 0}),r}function h(e,t,o,i){var r=p(n.dom.getParent(t,"td,th")),a=g(o,r),l=o.childNodes[a],s=d(l,i);u(s||l)}function v(e){var t=n.selection.getNode(),o=n.dom.getParent(t,"td,th"),i=n.dom.getParent(e,"td,th");return o&&o!==i&&b(o,i)}function b(e,t){return n.dom.getParent(e,"TABLE")===n.dom.getParent(t,"TABLE")}var y=t.keyCode;if(f()&&m(n)){var w=n.selection.getNode();setTimeout(function(){v(w)&&r(!t.shiftKey&&y===e.UP,w,t)},0)}}n.on("KeyDown",function(e){t(e)})}function a(){function e(e,t){var n=t.ownerDocument,o=n.createRange(),i;return o.setStartBefore(t),o.setEnd(e.endContainer,e.endOffset),i=n.createElement("body"),i.appendChild(o.cloneContents()),0===i.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}n.on("KeyDown",function(t){var o,i,r=n.dom;(37==t.keyCode||38==t.keyCode)&&(o=n.selection.getRng(),i=r.getParent(o.startContainer,"table"),i&&n.getBody().firstChild==i&&e(o,i)&&(o=r.createRng(),o.setStartBefore(i),o.setEndBefore(i),n.selection.setRng(o),t.preventDefault()))})}function l(){n.on("KeyDown SetContent VisualAid",function(){var e;for(e=n.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&!e.getAttribute("data-mce-bogus"))break;e&&"TABLE"==e.nodeName&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,n.settings.forced_root_block_attrs,t.ie&&t.ie<11?" ":'
      '):n.dom.add(n.getBody(),"br",{"data-mce-bogus":"1"}))}),n.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&n.dom.remove(t)})}function s(){function e(e,t,n,o){var i=3,r=e.dom.getParent(t.startContainer,"TABLE"),a,l,s;return r&&(a=r.parentNode),l=t.startContainer.nodeType==i&&0===t.startOffset&&0===t.endOffset&&o&&("TR"==n.nodeName||n==a),s=("TD"==n.nodeName||"TH"==n.nodeName)&&!o,l||s}function t(){var t=n.selection.getRng(),o=n.selection.getNode(),i=n.dom.getParent(t.startContainer,"TD,TH");if(e(n,t,o,i)){i||(i=o);for(var r=i.lastChild;r.lastChild;)r=r.lastChild;t.setEnd(r,r.nodeValue.length),n.selection.setRng(t)}}n.on("KeyDown",function(){t()}),n.on("MouseDown",function(e){2!=e.button&&t()})}function c(){n.on("keydown",function(t){if((t.keyCode==e.DELETE||t.keyCode==e.BACKSPACE)&&!t.isDefaultPrevented()){var o=n.dom.getParent(n.selection.getStart(),"table");if(o){for(var i=n.dom.select("td,th",o),r=i.length;r--;)if(!n.dom.hasClass(i[r],"mce-item-selected"))return;t.preventDefault(),n.execCommand("mceTableDelete")}}})}c(),t.webkit&&(r(),s()),t.gecko&&(a(),l()),t.ie>10&&(a(),l())}}),o(m,[s,p,c],function(e,t,n){return function(o){function i(){o.getBody().style.webkitUserSelect="",d&&(o.dom.removeClass(o.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=!1)}function r(t){var n,i,r=t.target;if(s&&(l||r!=s)&&("TD"==r.nodeName||"TH"==r.nodeName)){i=a.getParent(r,"table"),i==c&&(l||(l=new e(o,i),l.setStartCell(s),o.getBody().style.webkitUserSelect="none"),l.setEndCell(r),d=!0),n=o.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}var a=o.dom,l,s,c,d=!0;return o.on("MouseDown",function(e){2!=e.button&&(i(),s=a.getParent(e.target,"td,th"),c=a.getParent(s,"table"))}),o.on("mouseover",r),o.on("remove",function(){a.unbind(o.getDoc(),"mouseover",r)}),o.on("MouseUp",function(){function e(e,o){var r=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return void(o?i.setStart(e,0):i.setEnd(e,e.nodeValue.length));if("BR"==e.nodeName)return void(o?i.setStartBefore(e):i.setEndBefore(e))}while(e=o?r.next():r.prev())}var i,r=o.selection,d,u,f,m,p;if(s){if(l&&(o.getBody().style.webkitUserSelect=""),d=a.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=a.createRng(),f=d[0],p=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,a.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!a.hasClass(f,"mce-item-selected"))break;m=f}while(f=u.next());e(m),r.setRng(i)}o.nodeChanged(),s=l=c=null}}),o.on("KeyUp Drop",function(){i(),s=l=c=null}),{clear:i}}}),o(g,[s,u,m,c,p,d,h],function(e,t,n,o,i,r,a){function l(o){function i(e){return e?e.replace(/px$/,""):""}function a(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function l(e){s("left center right".split(" "),function(t){o.formatter.remove("align"+t,{},e)})}function c(e){s("top middle bottom".split(" "),function(t){o.formatter.remove("valign"+t,{},e)})}function d(){var e=o.dom,t,n,c,d;t=e.getParent(o.selection.getStart(),"table"),d={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),cellspacing:t?e.getAttrib(t,"cellspacing"):"",cellpadding:t?e.getAttrib(t,"cellpadding"):"",border:t?e.getAttrib(t,"border"):"",caption:!!e.select("caption",t)[0]},s("left center right".split(" "),function(e){o.formatter.matchNode(t,"align"+e)&&(d.align=e)}),t||(n={label:"Cols",name:"cols"},c={label:"Rows",name:"rows"}),o.windowManager.open({title:"Table properties",items:{type:"form",layout:"grid",columns:2,data:d,defaults:{type:"textbox",maxWidth:50},items:[n,c,{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"},{label:"Alignment",minWidth:90,name:"align",type:"listbox",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var n=this.toJSON(),i;o.undoManager.transact(function(){t||(t=g(n.cols||1,n.rows||1)),o.dom.setAttribs(t,{cellspacing:n.cellspacing,cellpadding:n.cellpadding,border:n.border}),o.dom.setStyles(t,{width:a(n.width),height:a(n.height)}),i=e.select("caption",t)[0],i&&!n.caption&&e.remove(i),!i&&n.caption&&(i=e.create("caption"),i.innerHTML=r.ie?"\xa0":'
      ',t.insertBefore(i,t.firstChild)),l(t),n.align&&o.formatter.apply("align"+n.align,{},t),o.focus(),o.addVisual()})}})}function u(e,t){o.windowManager.open({title:"Merge cells",body:[{label:"Cols",name:"cols",type:"textbox",size:10},{label:"Rows",name:"rows",type:"textbox",size:10}],onsubmit:function(){var n=this.toJSON();o.undoManager.transact(function(){e.merge(t,n.cols,n.rows)})}})}function f(){var e=o.dom,t,n,r=[];r=o.dom.select("td.mce-item-selected,th.mce-item-selected"),t=o.dom.getParent(o.selection.getStart(),"td,th"),!r.length&&t&&r.push(t),t=t||r[0],t&&(n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),scope:e.getAttrib(t,"scope")},n.type=t.nodeName.toLowerCase(),s("left center right".split(" "),function(e){o.formatter.matchNode(t,"align"+e)&&(n.align=e)}),s("top middle bottom".split(" "),function(e){o.formatter.matchNode(t,"valign"+e)&&(n.valign=e)}),o.windowManager.open({title:"Cell properties",items:{type:"form",data:n,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"H Align",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"V Align",name:"valign",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}]}]},onsubmit:function(){var t=this.toJSON();o.undoManager.transact(function(){s(r,function(n){o.dom.setAttrib(n,"scope",t.scope),o.dom.setStyles(n,{width:a(t.width),height:a(t.height)}),t.type&&n.nodeName.toLowerCase()!=t.type&&(n=e.rename(n,t.type)),l(n),t.align&&o.formatter.apply("align"+t.align,{},n),c(n),t.valign&&o.formatter.apply("valign"+t.valign,{},n)}),o.focus()})}}))}function m(){var e=o.dom,t,n,r,c,d=[];t=o.dom.getParent(o.selection.getStart(),"table"),n=o.dom.getParent(o.selection.getStart(),"td,th"),s(t.rows,function(t){s(t.cells,function(o){return e.hasClass(o,"mce-item-selected")||o==n?(d.push(t),!1):void 0})}),r=d[0],r&&(c={height:i(e.getStyle(r,"height")||e.getAttrib(r,"height")),scope:e.getAttrib(r,"scope")},c.type=r.parentNode.nodeName.toLowerCase(),s("left center right".split(" "),function(e){o.formatter.matchNode(r,"align"+e)&&(c.align=e)}),o.windowManager.open({title:"Row properties",items:{type:"form",data:c,columns:2,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"None",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"}]},onsubmit:function(){var t=this.toJSON(),n,i,r;o.undoManager.transact(function(){var c=t.type;s(d,function(s){o.dom.setAttrib(s,"scope",t.scope),o.dom.setStyles(s,{height:a(t.height)}),c!=s.parentNode.nodeName.toLowerCase()&&(n=e.getParent(s,"table"),i=s.parentNode,r=e.select(c,n)[0],r||(r=e.create(c),n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r)),r.appendChild(s),i.hasChildNodes()||e.remove(i)),l(s),t.align&&o.formatter.apply("align"+t.align,{},s)}),o.focus()})}}))}function p(e){return function(){o.execCommand(e)}}function g(e,t){var n,i,a;for(a='',n=0;t>n;n++){for(a+="",i=0;e>i;i++)a+="";a+=""}a+="
      "+(r.ie?" ":"
      ")+"
      ",o.insertContent(a);var l=o.dom.get("__mce");return o.dom.setAttrib(l,"id",null),l}function h(e,t){function n(){e.disabled(!o.dom.getParent(o.selection.getStart(),t)),o.selection.selectorChanged(t,function(t){e.disabled(!t)})}o.initialized?n():o.on("init",n)}function v(){h(this,"table")}function b(){h(this,"td,th")}function y(){var e="";e='';for(var t=0;10>t;t++){e+="";for(var n=0;10>n;n++)e+='';e+=""}return e+="
      ",e+='

      '}function w(e,t,n){var i=n.getEl().getElementsByTagName("table")[0],r,a,l,s,c,d=n.isRtl()||"tl-tr"==n.parent().rel;for(i.nextSibling.innerHTML=e+1+" x "+(t+1),d&&(e=9-e),a=0;10>a;a++)for(r=0;10>r;r++)s=i.rows[a].childNodes[r].firstChild,c=(d?r>=e:e>=r)&&t>=a,o.dom.toggleClass(s,"mce-active",c),c&&(l=s);return l.parentNode}var x,C,P=this;o.settings.table_grid===!1?o.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onclick:d}):o.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(e){e.aria&&(this.parent().hideAll(),e.stopImmediatePropagation(),d())},onshow:function(){w(0,0,this.menu.items()[0])},onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");o.dom.removeClass(e,"mce-active"),o.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:y(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t=e.target,n,o;"A"==t.tagName.toUpperCase()&&(n=parseInt(t.getAttribute("data-mce-x"),10),o=parseInt(t.getAttribute("data-mce-y"),10),(this.isRtl()||"tl-tr"==this.parent().rel)&&(n=9-n),(n!==this.lastX||o!==this.lastY)&&(w(n,o,e.control),this.lastX=n,this.lastY=o))},onkeydown:function(e){var t=this.lastX,n=this.lastY,o;switch(e.keyCode){case 37:t>0&&(t--,o=!0);break;case 39:o=!0,9>t&&t++;break;case 38:o=!0,n>0&&n--;break;case 40:o=!0,9>n&&n++}o&&(e.preventDefault(),e.stopPropagation(),w(t,n,e.control).focus(),this.lastX=t,this.lastY=n)},onclick:function(e){"A"==e.target.tagName.toUpperCase()&&(e.preventDefault(),e.stopPropagation(),this.parent().cancel(),g(this.lastX+1,this.lastY+1))}}]}),o.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:v,onclick:d}),o.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:v,cmd:"mceTableDelete"}),o.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:p("mceTableCellProps"),onPostRender:b},{text:"Merge cells",onclick:p("mceTableMergeCells"),onPostRender:b},{text:"Split cell",onclick:p("mceTableSplitCells"),onPostRender:b}]}),o.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:p("mceTableInsertRowBefore"),onPostRender:b},{text:"Insert row after",onclick:p("mceTableInsertRowAfter"),onPostRender:b},{text:"Delete row",onclick:p("mceTableDeleteRow"),onPostRender:b},{text:"Row properties",onclick:p("mceTableRowProps"),onPostRender:b},{text:"-"},{text:"Cut row",onclick:p("mceTableCutRow"),onPostRender:b},{text:"Copy row",onclick:p("mceTableCopyRow"),onPostRender:b},{text:"Paste row before",onclick:p("mceTablePasteRowBefore"),onPostRender:b},{text:"Paste row after",onclick:p("mceTablePasteRowAfter"),onPostRender:b}]}),o.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:p("mceTableInsertColBefore"),onPostRender:b},{text:"Insert column after",onclick:p("mceTableInsertColAfter"),onPostRender:b},{text:"Delete column",onclick:p("mceTableDeleteCol"),onPostRender:b}]});var S=[];s("inserttable tableprops deletetable | cell row column".split(" "),function(e){S.push("|"==e?{text:"-"}:o.menuItems[e])}),o.addButton("table",{type:"menubutton",title:"Table",menu:S}),r.isIE||o.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(o.selection.select(e),o.nodeChanged())}),P.quirks=new t(o),o.on("Init",function(){x=o.windowManager,P.cellSelection=new n(o)}),s({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t,n,i;i=o.dom.getParent(o.selection.getStart(),"th,td"),i&&(t=i.rowSpan,n=i.colSpan),o.dom.select("td.mce-item-selected,th.mce-item-selected").length?e.merge():u(e,i)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){C=e.cutRows()},mceTableCopyRow:function(e){C=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(C,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(C)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){o.addCommand(n,function(){var n=new e(o);n&&(t(n),o.execCommand("mceRepaint"),P.cellSelection.clear())})}),s({mceInsertTable:function(){d()},mceTableRowProps:m,mceTableCellProps:f},function(e,t){o.addCommand(t,function(t,n){e(n)})})}var s=o.each;a.add("table",l)}),a([s,u,m,g])}(this);tinymce.PluginManager.add("template",function(e){function t(t){return function(){var a=e.settings.templates;"string"==typeof a?tinymce.util.XHR.send({url:a,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(a)}}function a(t){function a(t){function a(t){if(-1==t.indexOf("")){var a="";tinymce.each(e.contentCSS,function(t){a+=''}),t=""+a+""+t+""}t=r(t,"template_preview_replace_values");var l=n.find("iframe")[0].getEl().contentWindow.document;l.open(),l.write(t),l.close()}var c=t.control.value();c.url?tinymce.util.XHR.send({url:c.url,success:function(e){l=e,a(l)}}):(l=c.content,a(l)),n.find("#description")[0].text(t.control.value().description)}var n,l,i=[];return t&&0!==t.length?(tinymce.each(t,function(e){i.push({selected:!i.length,text:e.title,value:{url:e.url,content:e.content,description:e.description}})}),n=e.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:i,onselect:a}}]},{type:"label",name:"description",label:"Description",text:" "},{type:"iframe",flex:1,border:1}],onsubmit:function(){c(!1,l)},width:e.getParam("template_popup_width",600),height:e.getParam("template_popup_height",500)}),void n.find("listbox")[0].fire("select")):void e.windowManager.alert("No templates defined")}function n(t,a){function n(e,t){if(e=""+e,e.length0&&(o=p.create("div",null),o.appendChild(s[0].cloneNode(!0))),i(p.select("*",o),function(t){c(t,e.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_cdate_format",e.getLang("template.cdate_format")))),c(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format")))),c(t,e.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(t.innerHTML=m)}),l(o),e.execCommand("mceInsertContent",!1,o.innerHTML),e.addVisual()}var i=tinymce.each;e.addCommand("mceInsertTemplate",c),e.addButton("template",{title:"Insert template",onclick:t(a)}),e.addMenuItem("template",{text:"Insert template",onclick:t(a),context:"insert"}),e.on("PreProcess",function(t){var a=e.dom;i(a.select("div",t.node),function(t){a.hasClass(t,"mceTmpl")&&(i(a.select("*",t),function(t){a.hasClass(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format"))))}),l(t))})})});tinymce.PluginManager.add("textcolor",function(e){function t(){var t,o,l=[];for(o=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],t=0;t',a=o.length-1,c=e.settings.textcolor_rows||5,i=e.settings.textcolor_cols||8,F=0;c>F;F++){for(r+="",n=0;i>n;n++)d=F*i+n,d>a?r+="":(l=o[d],r+='
      ');r+=""}return r+=""}function l(t){var o,l=this.parent();(o=t.target.getAttribute("data-mce-color"))&&(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,l.hidePanel(),o="#"+o,l.color(o),e.execCommand(l.settings.selectcmd,!1,o))}function r(){var t=this;t._color&&e.execCommand(t.settings.selectcmd,!1,t._color)}e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:l},onclick:r}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",selectcmd:"HiliteColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:l},onclick:r})});tinymce.PluginManager.add("visualblocks",function(e,s){function o(){var s=this;s.active(a),e.on("VisualBlocks",function(){s.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var l,t,a;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var o,c=e.dom;l||(l=c.uniqueId(),o=c.create("link",{id:l,rel:"stylesheet",href:s+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(o)),e.on("PreviewFormats AfterPreviewFormats",function(s){a&&c.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==s.type)}),c.toggleClass(e.getBody(),"mce-visualblocks"),a=e.dom.hasClass(e.getBody(),"mce-visualblocks"),t&&t.active(c.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:o}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:o,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))});tinymce.PluginManager.add("visualchars",function(e){function a(a){var t,s,i,r,c,d,l=e.getBody(),m=e.selection;if(n=!n,o.state=n,e.fire("VisualChars",{state:n}),a&&(d=m.getBookmark()),n)for(s=[],tinymce.walk(l,function(e){3==e.nodeType&&e.nodeValue&&-1!=e.nodeValue.indexOf(" ")&&s.push(e)},"childNodes"),i=0;i$1
      '),c=e.dom.create("div",null,r);t=c.lastChild;)e.dom.insertAfter(t,s[i]);e.dom.remove(s[i])}else for(s=e.dom.select("span.mce-nbsp",l),i=s.length-1;i>=0;i--)e.dom.remove(s[i],1);m.moveToBookmark(d)}function t(){var a=this;e.on("VisualChars",function(e){a.active(e.state)})}var n,o=this;e.addCommand("mceVisualChars",a),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:t}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:t,selectable:!0,context:"view",prependToContext:!0}),e.on("beforegetcontent",function(e){n&&"raw"!=e.format&&!e.draft&&(n=!0,a(!1))})});tinymce.PluginManager.add("wordcount",function(e){function t(){e.theme.panel.find("#wordcount").text(["Words: {0}",a.getCount()])}var n,o,a=this;n=e.getParam("wordcount_countregex",/[\w\u2019\x27\-\u00C0-\u1FFF]+/g),o=e.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),e.on("init",function(){var n=e.theme.panel&&e.theme.panel.find("#statusbar")[0];n&&window.setTimeout(function(){n.insert({type:"label",name:"wordcount",text:["Words: {0}",a.getCount()],classes:"wordcount",disabled:e.settings.readonly},0),e.on("setcontent beforeaddundo",t),e.on("keyup",function(e){32==e.keyCode&&t()})},0)}),a.getCount=function(){var t=e.getContent({format:"raw"}),a=0;if(t){t=t.replace(/\.\.\./g," "),t=t.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),t=t.replace(/(\w+)(&#?[a-z0-9]+;)+(\w+)/i,"$1$3").replace(/&.+?;/g," "),t=t.replace(o,"");var r=t.match(n);r&&(a=r.length)}return a}});tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}var i=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||u.toolbar===!1||t(u.toolbar||f),i.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:i}:void 0}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l +
      Pressing "a" while this checkbox is + focused will remove it from the DOM.
      +
      +
      + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html new file mode 100644 index 0000000..741d7f4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html @@ -0,0 +1,36 @@ + + +
      CTRL + 1: red
      +
      SHIFT + 1: green
      +
      CTRL + SHIFT + 1: yellow
      +
      ALT + 1: lightblue
      +
      CTRL + ALT + 1: lightgreen
      +
      SHIFT + ALT + 1: silver
      +
      CTRL + SHIFT + ALT + 1: magenta
      + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/linked_image.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/linked_image.html new file mode 100644 index 0000000..7c8df00 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/linked_image.html @@ -0,0 +1,16 @@ + + + + +Linking with an image + + +banner
      +Click here for next page
      +
      +link to other link
      +Just another link.
      +

      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html new file mode 100644 index 0000000..42b0442 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html @@ -0,0 +1,13 @@ + + + Boolean Attribute Selected + + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html new file mode 100644 index 0000000..60cd033 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html @@ -0,0 +1,13 @@ + + + Boolean Attribute Selected + + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/longContentPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/longContentPage.html new file mode 100644 index 0000000..99a45e7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/longContentPage.html @@ -0,0 +1,55 @@ + + + TouchLongContent + + + +

      Touch API

      +

      Page with long content

      +
                         



      +

      Long text:                                                                                                                          This is a very long text to make the screen horizontally movable, to test the flick gesture at a long horizontal distance Normal link                                                                                                                                           at normal and fast speeds to see results of it Normal link end

      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      + Middle of the screen Normal link +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      +










      + Bottom of the screen Normal link


      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/macbeth.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/macbeth.html new file mode 100644 index 0000000..9fa39d5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/macbeth.html @@ -0,0 +1,5255 @@ + + + + Macbeth: Entire Play + + + + + + + +Quick link to last speech + +

      ACT I

      +

      SCENE I. A desert place.

      +

      +Thunder and lightning. Enter three Witches +
      + +First Witch +
      +When shall we three meet again
      +In thunder, lightning, or in rain?
      +
      + +Second Witch +
      +When the hurlyburly's done,
      +When the battle's lost and won.
      +
      + +Third Witch +
      +That will be ere the set of sun.
      +
      + +First Witch +
      +Where the place?
      +
      + +Second Witch +
      + Upon the heath.
      +
      + +Third Witch +
      +There to meet with Macbeth.
      +
      + +First Witch +
      +I come, Graymalkin!
      +
      + +Second Witch +
      +Paddock calls.
      +
      + +Third Witch +
      +Anon.
      +
      + +ALL +
      +Fair is foul, and foul is fair:
      +Hover through the fog and filthy air.
      +

      Exeunt

      +
      +

      SCENE II. A camp near Forres.

      +

      +Alarum within. Enter DUNCAN, MALCOLM, DONALBAIN, LENNOX, with Attendants, meeting a bleeding Sergeant +
      + +DUNCAN +
      +What bloody man is that? He can report,
      +As seemeth by his plight, of the revolt
      +The newest state.
      +
      + +MALCOLM +
      + This is the sergeant
      +Who like a good and hardy soldier fought
      +'Gainst my captivity. Hail, brave friend!
      +Say to the king the knowledge of the broil
      +As thou didst leave it.
      +
      + +Sergeant +
      +Doubtful it stood;
      +As two spent swimmers, that do cling together
      +And choke their art. The merciless Macdonwald--
      +Worthy to be a rebel, for to that
      +The multiplying villanies of nature
      +Do swarm upon him--from the western isles
      +Of kerns and gallowglasses is supplied;
      +And fortune, on his damned quarrel smiling,
      +Show'd like a rebel's whore: but all's too weak:
      +For brave Macbeth--well he deserves that name--
      +Disdaining fortune, with his brandish'd steel,
      +Which smoked with bloody execution,
      +Like valour's minion carved out his passage
      +Till he faced the slave;
      +Which ne'er shook hands, nor bade farewell to him,
      +Till he unseam'd him from the nave to the chaps,
      +And fix'd his head upon our battlements.
      +
      + +DUNCAN +
      +O valiant cousin! worthy gentleman!
      +
      + +Sergeant +
      +As whence the sun 'gins his reflection
      +Shipwrecking storms and direful thunders break,
      +So from that spring whence comfort seem'd to come
      +Discomfort swells. Mark, king of Scotland, mark:
      +No sooner justice had with valour arm'd
      +Compell'd these skipping kerns to trust their heels,
      +But the Norweyan lord surveying vantage,
      +With furbish'd arms and new supplies of men
      +Began a fresh assault.
      +
      + +DUNCAN +
      +Dismay'd not this
      +Our captains, Macbeth and Banquo?
      +
      + +Sergeant +
      +Yes;
      +As sparrows eagles, or the hare the lion.
      +If I say sooth, I must report they were
      +As cannons overcharged with double cracks, so they
      +Doubly redoubled strokes upon the foe:
      +Except they meant to bathe in reeking wounds,
      +Or memorise another Golgotha,
      +I cannot tell.
      +But I am faint, my gashes cry for help.
      +
      + +DUNCAN +
      +So well thy words become thee as thy wounds;
      +They smack of honour both. Go get him surgeons.
      +

      Exit Sergeant, attended

      +Who comes here?
      +

      Enter ROSS

      +
      + +MALCOLM +
      + The worthy thane of Ross.
      +
      + +LENNOX +
      +What a haste looks through his eyes! So should he look
      +That seems to speak things strange.
      +
      + +ROSS +
      +God save the king!
      +
      + +DUNCAN +
      +Whence camest thou, worthy thane?
      +
      + +ROSS +
      +From Fife, great king;
      +Where the Norweyan banners flout the sky
      +And fan our people cold. Norway himself,
      +With terrible numbers,
      +Assisted by that most disloyal traitor
      +The thane of Cawdor, began a dismal conflict;
      +Till that Bellona's bridegroom, lapp'd in proof,
      +Confronted him with self-comparisons,
      +Point against point rebellious, arm 'gainst arm.
      +Curbing his lavish spirit: and, to conclude,
      +The victory fell on us.
      +
      + +DUNCAN +
      +Great happiness!
      +
      + +ROSS +
      +That now
      +Sweno, the Norways' king, craves composition:
      +Nor would we deign him burial of his men
      +Till he disbursed at Saint Colme's inch
      +Ten thousand dollars to our general use.
      +
      + +DUNCAN +
      +No more that thane of Cawdor shall deceive
      +Our bosom interest: go pronounce his present death,
      +And with his former title greet Macbeth.
      +
      + +ROSS +
      +I'll see it done.
      +
      + +DUNCAN +
      +What he hath lost noble Macbeth hath won.
      +

      Exeunt

      +
      +

      SCENE III. A heath near Forres.

      +

      +Thunder. Enter the three Witches +
      + +First Witch +
      +Where hast thou been, sister?
      +
      + +Second Witch +
      +Killing swine.
      +
      + +Third Witch +
      +Sister, where thou?
      +
      + +First Witch +
      +A sailor's wife had chestnuts in her lap,
      +And munch'd, and munch'd, and munch'd:--
      +'Give me,' quoth I:
      +'Aroint thee, witch!' the rump-fed ronyon cries.
      +Her husband's to Aleppo gone, master o' the Tiger:
      +But in a sieve I'll thither sail,
      +And, like a rat without a tail,
      +I'll do, I'll do, and I'll do.
      +
      + +Second Witch +
      +I'll give thee a wind.
      +
      + +First Witch +
      +Thou'rt kind.
      +
      + +Third Witch +
      +And I another.
      +
      + +First Witch +
      +I myself have all the other,
      +And the very ports they blow,
      +All the quarters that they know
      +I' the shipman's card.
      +I will drain him dry as hay:
      +Sleep shall neither night nor day
      +Hang upon his pent-house lid;
      +He shall live a man forbid:
      +Weary se'nnights nine times nine
      +Shall he dwindle, peak and pine:
      +Though his bark cannot be lost,
      +Yet it shall be tempest-tost.
      +Look what I have.
      +
      + +Second Witch +
      +Show me, show me.
      +
      + +First Witch +
      +Here I have a pilot's thumb,
      +Wreck'd as homeward he did come.
      +

      Drum within

      +
      + +Third Witch +
      +A drum, a drum!
      +Macbeth doth come.
      +
      + +ALL +
      +The weird sisters, hand in hand,
      +Posters of the sea and land,
      +Thus do go about, about:
      +Thrice to thine and thrice to mine
      +And thrice again, to make up nine.
      +Peace! the charm's wound up.
      +

      Enter MACBETH and BANQUO

      +
      + +MACBETH +
      +So foul and fair a day I have not seen.
      +
      + +BANQUO +
      +How far is't call'd to Forres? What are these
      +So wither'd and so wild in their attire,
      +That look not like the inhabitants o' the earth,
      +And yet are on't? Live you? or are you aught
      +That man may question? You seem to understand me,
      +By each at once her chappy finger laying
      +Upon her skinny lips: you should be women,
      +And yet your beards forbid me to interpret
      +That you are so.
      +
      + +MACBETH +
      + Speak, if you can: what are you?
      +
      + +First Witch +
      +All hail, Macbeth! hail to thee, thane of Glamis!
      +
      + +Second Witch +
      +All hail, Macbeth, hail to thee, thane of Cawdor!
      +
      + +Third Witch +
      +All hail, Macbeth, thou shalt be king hereafter!
      +
      + +BANQUO +
      +Good sir, why do you start; and seem to fear
      +Things that do sound so fair? I' the name of truth,
      +Are ye fantastical, or that indeed
      +Which outwardly ye show? My noble partner
      +You greet with present grace and great prediction
      +Of noble having and of royal hope,
      +That he seems rapt withal: to me you speak not.
      +If you can look into the seeds of time,
      +And say which grain will grow and which will not,
      +Speak then to me, who neither beg nor fear
      +Your favours nor your hate.
      +
      + +First Witch +
      +Hail!
      +
      + +Second Witch +
      +Hail!
      +
      + +Third Witch +
      +Hail!
      +
      + +First Witch +
      +Lesser than Macbeth, and greater.
      +
      + +Second Witch +
      +Not so happy, yet much happier.
      +
      + +Third Witch +
      +Thou shalt get kings, though thou be none:
      +So all hail, Macbeth and Banquo!
      +
      + +First Witch +
      +Banquo and Macbeth, all hail!
      +
      + +MACBETH +
      +Stay, you imperfect speakers, tell me more:
      +By Sinel's death I know I am thane of Glamis;
      +But how of Cawdor? the thane of Cawdor lives,
      +A prosperous gentleman; and to be king
      +Stands not within the prospect of belief,
      +No more than to be Cawdor. Say from whence
      +You owe this strange intelligence? or why
      +Upon this blasted heath you stop our way
      +With such prophetic greeting? Speak, I charge you.
      +

      Witches vanish

      +
      + +BANQUO +
      +The earth hath bubbles, as the water has,
      +And these are of them. Whither are they vanish'd?
      +
      + +MACBETH +
      +Into the air; and what seem'd corporal melted
      +As breath into the wind. Would they had stay'd!
      +
      + +BANQUO +
      +Were such things here as we do speak about?
      +Or have we eaten on the insane root
      +That takes the reason prisoner?
      +
      + +MACBETH +
      +Your children shall be kings.
      +
      + +BANQUO +
      +You shall be king.
      +
      + +MACBETH +
      +And thane of Cawdor too: went it not so?
      +
      + +BANQUO +
      +To the selfsame tune and words. Who's here?
      +

      Enter ROSS and ANGUS

      +
      + +ROSS +
      +The king hath happily received, Macbeth,
      +The news of thy success; and when he reads
      +Thy personal venture in the rebels' fight,
      +His wonders and his praises do contend
      +Which should be thine or his: silenced with that,
      +In viewing o'er the rest o' the selfsame day,
      +He finds thee in the stout Norweyan ranks,
      +Nothing afeard of what thyself didst make,
      +Strange images of death. As thick as hail
      +Came post with post; and every one did bear
      +Thy praises in his kingdom's great defence,
      +And pour'd them down before him.
      +
      + +ANGUS +
      +We are sent
      +To give thee from our royal master thanks;
      +Only to herald thee into his sight,
      +Not pay thee.
      +
      + +ROSS +
      +And, for an earnest of a greater honour,
      +He bade me, from him, call thee thane of Cawdor:
      +In which addition, hail, most worthy thane!
      +For it is thine.
      +
      + +BANQUO +
      + What, can the devil speak true?
      +
      + +MACBETH +
      +The thane of Cawdor lives: why do you dress me
      +In borrow'd robes?
      +
      + +ANGUS +
      + Who was the thane lives yet;
      +But under heavy judgment bears that life
      +Which he deserves to lose. Whether he was combined
      +With those of Norway, or did line the rebel
      +With hidden help and vantage, or that with both
      +He labour'd in his country's wreck, I know not;
      +But treasons capital, confess'd and proved,
      +Have overthrown him.
      +
      + +MACBETH +
      +[Aside] Glamis, and thane of Cawdor!
      +The greatest is behind.
      +

      To ROSS and ANGUS

      +Thanks for your pains.
      +

      To BANQUO

      +Do you not hope your children shall be kings,
      +When those that gave the thane of Cawdor to me
      +Promised no less to them?
      +
      + +BANQUO +
      +That trusted home
      +Might yet enkindle you unto the crown,
      +Besides the thane of Cawdor. But 'tis strange:
      +And oftentimes, to win us to our harm,
      +The instruments of darkness tell us truths,
      +Win us with honest trifles, to betray's
      +In deepest consequence.
      +Cousins, a word, I pray you.
      +
      + +MACBETH +
      +[Aside] Two truths are told,
      +As happy prologues to the swelling act
      +Of the imperial theme.--I thank you, gentlemen.
      +

      Aside

      +Cannot be ill, cannot be good: if ill,
      +Why hath it given me earnest of success,
      +Commencing in a truth? I am thane of Cawdor:
      +If good, why do I yield to that suggestion
      +Whose horrid image doth unfix my hair
      +And make my seated heart knock at my ribs,
      +Against the use of nature? Present fears
      +Are less than horrible imaginings:
      +My thought, whose murder yet is but fantastical,
      +Shakes so my single state of man that function
      +Is smother'd in surmise, and nothing is
      +But what is not.
      +
      + +BANQUO +
      + Look, how our partner's rapt.
      +
      + +MACBETH +
      +[Aside] If chance will have me king, why, chance may crown me,
      +Without my stir.
      +
      + +BANQUO +
      + New horrors come upon him,
      +Like our strange garments, cleave not to their mould
      +But with the aid of use.
      +
      + +MACBETH +
      +[Aside] Come what come may,
      +Time and the hour runs through the roughest day.
      +
      + +BANQUO +
      +Worthy Macbeth, we stay upon your leisure.
      +
      + +MACBETH +
      +Give me your favour: my dull brain was wrought
      +With things forgotten. Kind gentlemen, your pains
      +Are register'd where every day I turn
      +The leaf to read them. Let us toward the king.
      +Think upon what hath chanced, and, at more time,
      +The interim having weigh'd it, let us speak
      +Our free hearts each to other.
      +
      + +BANQUO +
      +Very gladly.
      +
      + +MACBETH +
      +Till then, enough. Come, friends.
      +

      Exeunt

      +
      +

      SCENE IV. Forres. The palace.

      +

      +Flourish. Enter DUNCAN, MALCOLM, DONALBAIN, LENNOX, and Attendants +
      + +DUNCAN +
      +Is execution done on Cawdor? Are not
      +Those in commission yet return'd?
      +
      + +MALCOLM +
      +My liege,
      +They are not yet come back. But I have spoke
      +With one that saw him die: who did report
      +That very frankly he confess'd his treasons,
      +Implored your highness' pardon and set forth
      +A deep repentance: nothing in his life
      +Became him like the leaving it; he died
      +As one that had been studied in his death
      +To throw away the dearest thing he owed,
      +As 'twere a careless trifle.
      +
      + +DUNCAN +
      +There's no art
      +To find the mind's construction in the face:
      +He was a gentleman on whom I built
      +An absolute trust.
      +

      Enter MACBETH, BANQUO, ROSS, and ANGUS

      +O worthiest cousin!
      +The sin of my ingratitude even now
      +Was heavy on me: thou art so far before
      +That swiftest wing of recompense is slow
      +To overtake thee. Would thou hadst less deserved,
      +That the proportion both of thanks and payment
      +Might have been mine! only I have left to say,
      +More is thy due than more than all can pay.
      +
      + +MACBETH +
      +The service and the loyalty I owe,
      +In doing it, pays itself. Your highness' part
      +Is to receive our duties; and our duties
      +Are to your throne and state children and servants,
      +Which do but what they should, by doing every thing
      +Safe toward your love and honour.
      +
      + +DUNCAN +
      +Welcome hither:
      +I have begun to plant thee, and will labour
      +To make thee full of growing. Noble Banquo,
      +That hast no less deserved, nor must be known
      +No less to have done so, let me enfold thee
      +And hold thee to my heart.
      +
      + +BANQUO +
      +There if I grow,
      +The harvest is your own.
      +
      + +DUNCAN +
      +My plenteous joys,
      +Wanton in fulness, seek to hide themselves
      +In drops of sorrow. Sons, kinsmen, thanes,
      +And you whose places are the nearest, know
      +We will establish our estate upon
      +Our eldest, Malcolm, whom we name hereafter
      +The Prince of Cumberland; which honour must
      +Not unaccompanied invest him only,
      +But signs of nobleness, like stars, shall shine
      +On all deservers. From hence to Inverness,
      +And bind us further to you.
      +
      + +MACBETH +
      +The rest is labour, which is not used for you:
      +I'll be myself the harbinger and make joyful
      +The hearing of my wife with your approach;
      +So humbly take my leave.
      +
      + +DUNCAN +
      +My worthy Cawdor!
      +
      + +MACBETH +
      +[Aside] The Prince of Cumberland! that is a step
      +On which I must fall down, or else o'erleap,
      +For in my way it lies. Stars, hide your fires;
      +Let not light see my black and deep desires:
      +The eye wink at the hand; yet let that be,
      +Which the eye fears, when it is done, to see.
      +

      Exit

      +
      + +DUNCAN +
      +True, worthy Banquo; he is full so valiant,
      +And in his commendations I am fed;
      +It is a banquet to me. Let's after him,
      +Whose care is gone before to bid us welcome:
      +It is a peerless kinsman.
      +

      Flourish. Exeunt

      +
      +

      SCENE V. Inverness. Macbeth's castle.

      +

      +Enter LADY MACBETH, reading a letter +
      + +LADY MACBETH +
      +'They met me in the day of success: and I have
      +learned by the perfectest report, they have more in
      +them than mortal knowledge. When I burned in desire
      +to question them further, they made themselves air,
      +into which they vanished. Whiles I stood rapt in
      +the wonder of it, came missives from the king, who
      +all-hailed me 'Thane of Cawdor;' by which title,
      +before, these weird sisters saluted me, and referred
      +me to the coming on of time, with 'Hail, king that
      +shalt be!' This have I thought good to deliver
      +thee, my dearest partner of greatness, that thou
      +mightst not lose the dues of rejoicing, by being
      +ignorant of what greatness is promised thee. Lay it
      +to thy heart, and farewell.'
      +Glamis thou art, and Cawdor; and shalt be
      +What thou art promised: yet do I fear thy nature;
      +It is too full o' the milk of human kindness
      +To catch the nearest way: thou wouldst be great;
      +Art not without ambition, but without
      +The illness should attend it: what thou wouldst highly,
      +That wouldst thou holily; wouldst not play false,
      +And yet wouldst wrongly win: thou'ldst have, great Glamis,
      +That which cries 'Thus thou must do, if thou have it;
      +And that which rather thou dost fear to do
      +Than wishest should be undone.' Hie thee hither,
      +That I may pour my spirits in thine ear;
      +And chastise with the valour of my tongue
      +All that impedes thee from the golden round,
      +Which fate and metaphysical aid doth seem
      +To have thee crown'd withal.
      +

      Enter a Messenger

      +What is your tidings?
      +
      + +Messenger +
      +The king comes here to-night.
      +
      + +LADY MACBETH +
      +Thou'rt mad to say it:
      +Is not thy master with him? who, were't so,
      +Would have inform'd for preparation.
      +
      + +Messenger +
      +So please you, it is true: our thane is coming:
      +One of my fellows had the speed of him,
      +Who, almost dead for breath, had scarcely more
      +Than would make up his message.
      +
      + +LADY MACBETH +
      +Give him tending;
      +He brings great news.
      +

      Exit Messenger

      +The raven himself is hoarse
      +That croaks the fatal entrance of Duncan
      +Under my battlements. Come, you spirits
      +That tend on mortal thoughts, unsex me here,
      +And fill me from the crown to the toe top-full
      +Of direst cruelty! make thick my blood;
      +Stop up the access and passage to remorse,
      +That no compunctious visitings of nature
      +Shake my fell purpose, nor keep peace between
      +The effect and it! Come to my woman's breasts,
      +And take my milk for gall, you murdering ministers,
      +Wherever in your sightless substances
      +You wait on nature's mischief! Come, thick night,
      +And pall thee in the dunnest smoke of hell,
      +That my keen knife see not the wound it makes,
      +Nor heaven peep through the blanket of the dark,
      +To cry 'Hold, hold!'
      +

      Enter MACBETH

      +Great Glamis! worthy Cawdor!
      +Greater than both, by the all-hail hereafter!
      +Thy letters have transported me beyond
      +This ignorant present, and I feel now
      +The future in the instant.
      +
      + +MACBETH +
      +My dearest love,
      +Duncan comes here to-night.
      +
      + +LADY MACBETH +
      +And when goes hence?
      +
      + +MACBETH +
      +To-morrow, as he purposes.
      +
      + +LADY MACBETH +
      +O, never
      +Shall sun that morrow see!
      +Your face, my thane, is as a book where men
      +May read strange matters. To beguile the time,
      +Look like the time; bear welcome in your eye,
      +Your hand, your tongue: look like the innocent flower,
      +But be the serpent under't. He that's coming
      +Must be provided for: and you shall put
      +This night's great business into my dispatch;
      +Which shall to all our nights and days to come
      +Give solely sovereign sway and masterdom.
      +
      + +MACBETH +
      +We will speak further.
      +
      + +LADY MACBETH +
      +Only look up clear;
      +To alter favour ever is to fear:
      +Leave all the rest to me.
      +

      Exeunt

      +
      +

      SCENE VI. Before Macbeth's castle.

      +

      +Hautboys and torches. Enter DUNCAN, MALCOLM, DONALBAIN, BANQUO, LENNOX, MACDUFF, ROSS, ANGUS, and Attendants +
      + +DUNCAN +
      +This castle hath a pleasant seat; the air
      +Nimbly and sweetly recommends itself
      +Unto our gentle senses.
      +
      + +BANQUO +
      +This guest of summer,
      +The temple-haunting martlet, does approve,
      +By his loved mansionry, that the heaven's breath
      +Smells wooingly here: no jutty, frieze,
      +Buttress, nor coign of vantage, but this bird
      +Hath made his pendent bed and procreant cradle:
      +Where they most breed and haunt, I have observed,
      +The air is delicate.
      +

      Enter LADY MACBETH

      +
      + +DUNCAN +
      +See, see, our honour'd hostess!
      +The love that follows us sometime is our trouble,
      +Which still we thank as love. Herein I teach you
      +How you shall bid God 'ild us for your pains,
      +And thank us for your trouble.
      +
      + +LADY MACBETH +
      +All our service
      +In every point twice done and then done double
      +Were poor and single business to contend
      +Against those honours deep and broad wherewith
      +Your majesty loads our house: for those of old,
      +And the late dignities heap'd up to them,
      +We rest your hermits.
      +
      + +DUNCAN +
      +Where's the thane of Cawdor?
      +We coursed him at the heels, and had a purpose
      +To be his purveyor: but he rides well;
      +And his great love, sharp as his spur, hath holp him
      +To his home before us. Fair and noble hostess,
      +We are your guest to-night.
      +
      + +LADY MACBETH +
      +Your servants ever
      +Have theirs, themselves and what is theirs, in compt,
      +To make their audit at your highness' pleasure,
      +Still to return your own.
      +
      + +DUNCAN +
      +Give me your hand;
      +Conduct me to mine host: we love him highly,
      +And shall continue our graces towards him.
      +By your leave, hostess.
      +

      Exeunt

      +
      +

      SCENE VII. Macbeth's castle.

      +

      +Hautboys and torches. Enter a Sewer, and divers Servants with dishes and service, and pass over the stage. Then enter MACBETH +
      + +MACBETH +
      +If it were done when 'tis done, then 'twere well
      +It were done quickly: if the assassination
      +Could trammel up the consequence, and catch
      +With his surcease success; that but this blow
      +Might be the be-all and the end-all here,
      +But here, upon this bank and shoal of time,
      +We'ld jump the life to come. But in these cases
      +We still have judgment here; that we but teach
      +Bloody instructions, which, being taught, return
      +To plague the inventor: this even-handed justice
      +Commends the ingredients of our poison'd chalice
      +To our own lips. He's here in double trust;
      +First, as I am his kinsman and his subject,
      +Strong both against the deed; then, as his host,
      +Who should against his murderer shut the door,
      +Not bear the knife myself. Besides, this Duncan
      +Hath borne his faculties so meek, hath been
      +So clear in his great office, that his virtues
      +Will plead like angels, trumpet-tongued, against
      +The deep damnation of his taking-off;
      +And pity, like a naked new-born babe,
      +Striding the blast, or heaven's cherubim, horsed
      +Upon the sightless couriers of the air,
      +Shall blow the horrid deed in every eye,
      +That tears shall drown the wind. I have no spur
      +To prick the sides of my intent, but only
      +Vaulting ambition, which o'erleaps itself
      +And falls on the other.
      +

      Enter LADY MACBETH

      +How now! what news?
      +
      + +LADY MACBETH +
      +He has almost supp'd: why have you left the chamber?
      +
      + +MACBETH +
      +Hath he ask'd for me?
      +
      + +LADY MACBETH +
      +Know you not he has?
      +
      + +MACBETH +
      +We will proceed no further in this business:
      +He hath honour'd me of late; and I have bought
      +Golden opinions from all sorts of people,
      +Which would be worn now in their newest gloss,
      +Not cast aside so soon.
      +
      + +LADY MACBETH +
      +Was the hope drunk
      +Wherein you dress'd yourself? hath it slept since?
      +And wakes it now, to look so green and pale
      +At what it did so freely? From this time
      +Such I account thy love. Art thou afeard
      +To be the same in thine own act and valour
      +As thou art in desire? Wouldst thou have that
      +Which thou esteem'st the ornament of life,
      +And live a coward in thine own esteem,
      +Letting 'I dare not' wait upon 'I would,'
      +Like the poor cat i' the adage?
      +
      + +MACBETH +
      +Prithee, peace:
      +I dare do all that may become a man;
      +Who dares do more is none.
      +
      + +LADY MACBETH +
      +What beast was't, then,
      +That made you break this enterprise to me?
      +When you durst do it, then you were a man;
      +And, to be more than what you were, you would
      +Be so much more the man. Nor time nor place
      +Did then adhere, and yet you would make both:
      +They have made themselves, and that their fitness now
      +Does unmake you. I have given suck, and know
      +How tender 'tis to love the babe that milks me:
      +I would, while it was smiling in my face,
      +Have pluck'd my nipple from his boneless gums,
      +And dash'd the brains out, had I so sworn as you
      +Have done to this.
      +
      + +MACBETH +
      + If we should fail?
      +
      + +LADY MACBETH +
      +We fail!
      +But screw your courage to the sticking-place,
      +And we'll not fail. When Duncan is asleep--
      +Whereto the rather shall his day's hard journey
      +Soundly invite him--his two chamberlains
      +Will I with wine and wassail so convince
      +That memory, the warder of the brain,
      +Shall be a fume, and the receipt of reason
      +A limbeck only: when in swinish sleep
      +Their drenched natures lie as in a death,
      +What cannot you and I perform upon
      +The unguarded Duncan? what not put upon
      +His spongy officers, who shall bear the guilt
      +Of our great quell?
      +
      + +MACBETH +
      +Bring forth men-children only;
      +For thy undaunted mettle should compose
      +Nothing but males. Will it not be received,
      +When we have mark'd with blood those sleepy two
      +Of his own chamber and used their very daggers,
      +That they have done't?
      +
      + +LADY MACBETH +
      +Who dares receive it other,
      +As we shall make our griefs and clamour roar
      +Upon his death?
      +
      + +MACBETH +
      + I am settled, and bend up
      +Each corporal agent to this terrible feat.
      +Away, and mock the time with fairest show:
      +False face must hide what the false heart doth know.
      +

      Exeunt

      +

      +

      ACT II

      +

      SCENE I. Court of Macbeth's castle.

      +

      +Enter BANQUO, and FLEANCE bearing a torch before him +
      + +BANQUO +
      +How goes the night, boy?
      +
      + +FLEANCE +
      +The moon is down; I have not heard the clock.
      +
      + +BANQUO +
      +And she goes down at twelve.
      +
      + +FLEANCE +
      +I take't, 'tis later, sir.
      +
      + +BANQUO +
      +Hold, take my sword. There's husbandry in heaven;
      +Their candles are all out. Take thee that too.
      +A heavy summons lies like lead upon me,
      +And yet I would not sleep: merciful powers,
      +Restrain in me the cursed thoughts that nature
      +Gives way to in repose!
      +

      Enter MACBETH, and a Servant with a torch

      +Give me my sword.
      +Who's there?
      +
      + +MACBETH +
      +A friend.
      +
      + +BANQUO +
      +What, sir, not yet at rest? The king's a-bed:
      +He hath been in unusual pleasure, and
      +Sent forth great largess to your offices.
      +This diamond he greets your wife withal,
      +By the name of most kind hostess; and shut up
      +In measureless content.
      +
      + +MACBETH +
      +Being unprepared,
      +Our will became the servant to defect;
      +Which else should free have wrought.
      +
      + +BANQUO +
      +All's well.
      +I dreamt last night of the three weird sisters:
      +To you they have show'd some truth.
      +
      + +MACBETH +
      +I think not of them:
      +Yet, when we can entreat an hour to serve,
      +We would spend it in some words upon that business,
      +If you would grant the time.
      +
      + +BANQUO +
      +At your kind'st leisure.
      +
      + +MACBETH +
      +If you shall cleave to my consent, when 'tis,
      +It shall make honour for you.
      +
      + +BANQUO +
      +So I lose none
      +In seeking to augment it, but still keep
      +My bosom franchised and allegiance clear,
      +I shall be counsell'd.
      +
      + +MACBETH +
      +Good repose the while!
      +
      + +BANQUO +
      +Thanks, sir: the like to you!
      +

      Exeunt BANQUO and FLEANCE

      +
      + +MACBETH +
      +Go bid thy mistress, when my drink is ready,
      +She strike upon the bell. Get thee to bed.
      +

      Exit Servant

      +Is this a dagger which I see before me,
      +The handle toward my hand? Come, let me clutch thee.
      +I have thee not, and yet I see thee still.
      +Art thou not, fatal vision, sensible
      +To feeling as to sight? or art thou but
      +A dagger of the mind, a false creation,
      +Proceeding from the heat-oppressed brain?
      +I see thee yet, in form as palpable
      +As this which now I draw.
      +Thou marshall'st me the way that I was going;
      +And such an instrument I was to use.
      +Mine eyes are made the fools o' the other senses,
      +Or else worth all the rest; I see thee still,
      +And on thy blade and dudgeon gouts of blood,
      +Which was not so before. There's no such thing:
      +It is the bloody business which informs
      +Thus to mine eyes. Now o'er the one halfworld
      +Nature seems dead, and wicked dreams abuse
      +The curtain'd sleep; witchcraft celebrates
      +Pale Hecate's offerings, and wither'd murder,
      +Alarum'd by his sentinel, the wolf,
      +Whose howl's his watch, thus with his stealthy pace.
      +With Tarquin's ravishing strides, towards his design
      +Moves like a ghost. Thou sure and firm-set earth,
      +Hear not my steps, which way they walk, for fear
      +Thy very stones prate of my whereabout,
      +And take the present horror from the time,
      +Which now suits with it. Whiles I threat, he lives:
      +Words to the heat of deeds too cold breath gives.
      +

      A bell rings

      +I go, and it is done; the bell invites me.
      +Hear it not, Duncan; for it is a knell
      +That summons thee to heaven or to hell.
      +

      Exit

      +
      +

      SCENE II. The same.

      +

      +Enter LADY MACBETH +
      + +LADY MACBETH +
      +That which hath made them drunk hath made me bold;
      +What hath quench'd them hath given me fire.
      +Hark! Peace!
      +It was the owl that shriek'd, the fatal bellman,
      +Which gives the stern'st good-night. He is about it:
      +The doors are open; and the surfeited grooms
      +Do mock their charge with snores: I have drugg'd
      +their possets,
      +That death and nature do contend about them,
      +Whether they live or die.
      +
      + +MACBETH +
      +[Within] Who's there? what, ho!
      +
      + +LADY MACBETH +
      +Alack, I am afraid they have awaked,
      +And 'tis not done. The attempt and not the deed
      +Confounds us. Hark! I laid their daggers ready;
      +He could not miss 'em. Had he not resembled
      +My father as he slept, I had done't.
      +

      Enter MACBETH

      +My husband!
      +
      + +MACBETH +
      +I have done the deed. Didst thou not hear a noise?
      +
      + +LADY MACBETH +
      +I heard the owl scream and the crickets cry.
      +Did not you speak?
      +
      + +MACBETH +
      + When?
      +
      + +LADY MACBETH +
      +Now.
      +
      + +MACBETH +
      +As I descended?
      +
      + +LADY MACBETH +
      +Ay.
      +
      + +MACBETH +
      +Hark!
      +Who lies i' the second chamber?
      +
      + +LADY MACBETH +
      +Donalbain.
      +
      + +MACBETH +
      +This is a sorry sight.
      +

      Looking on his hands

      +
      + +LADY MACBETH +
      +A foolish thought, to say a sorry sight.
      +
      + +MACBETH +
      +There's one did laugh in's sleep, and one cried
      +'Murder!'
      +That they did wake each other: I stood and heard them:
      +But they did say their prayers, and address'd them
      +Again to sleep.
      +
      + +LADY MACBETH +
      + There are two lodged together.
      +
      + +MACBETH +
      +One cried 'God bless us!' and 'Amen' the other;
      +As they had seen me with these hangman's hands.
      +Listening their fear, I could not say 'Amen,'
      +When they did say 'God bless us!'
      +
      + +LADY MACBETH +
      +Consider it not so deeply.
      +
      + +MACBETH +
      +But wherefore could not I pronounce 'Amen'?
      +I had most need of blessing, and 'Amen'
      +Stuck in my throat.
      +
      + +LADY MACBETH +
      +These deeds must not be thought
      +After these ways; so, it will make us mad.
      +
      + +MACBETH +
      +Methought I heard a voice cry 'Sleep no more!
      +Macbeth does murder sleep', the innocent sleep,
      +Sleep that knits up the ravell'd sleeve of care,
      +The death of each day's life, sore labour's bath,
      +Balm of hurt minds, great nature's second course,
      +Chief nourisher in life's feast,--
      +
      + +LADY MACBETH +
      +What do you mean?
      +
      + +MACBETH +
      +Still it cried 'Sleep no more!' to all the house:
      +'Glamis hath murder'd sleep, and therefore Cawdor
      +Shall sleep no more; Macbeth shall sleep no more.'
      +
      + +LADY MACBETH +
      +Who was it that thus cried? Why, worthy thane,
      +You do unbend your noble strength, to think
      +So brainsickly of things. Go get some water,
      +And wash this filthy witness from your hand.
      +Why did you bring these daggers from the place?
      +They must lie there: go carry them; and smear
      +The sleepy grooms with blood.
      +
      + +MACBETH +
      +I'll go no more:
      +I am afraid to think what I have done;
      +Look on't again I dare not.
      +
      + +LADY MACBETH +
      +Infirm of purpose!
      +Give me the daggers: the sleeping and the dead
      +Are but as pictures: 'tis the eye of childhood
      +That fears a painted devil. If he do bleed,
      +I'll gild the faces of the grooms withal;
      +For it must seem their guilt.
      +

      Exit. Knocking within

      +
      + +MACBETH +
      +Whence is that knocking?
      +How is't with me, when every noise appals me?
      +What hands are here? ha! they pluck out mine eyes.
      +Will all great Neptune's ocean wash this blood
      +Clean from my hand? No, this my hand will rather
      +The multitudinous seas in incarnadine,
      +Making the green one red.
      +

      Re-enter LADY MACBETH

      +
      + +LADY MACBETH +
      +My hands are of your colour; but I shame
      +To wear a heart so white.
      +

      Knocking within

      +I hear a knocking
      +At the south entry: retire we to our chamber;
      +A little water clears us of this deed:
      +How easy is it, then! Your constancy
      +Hath left you unattended.
      +

      Knocking within

      +Hark! more knocking.
      +Get on your nightgown, lest occasion call us,
      +And show us to be watchers. Be not lost
      +So poorly in your thoughts.
      +
      + +MACBETH +
      +To know my deed, 'twere best not know myself.
      +

      Knocking within

      +Wake Duncan with thy knocking! I would thou couldst!
      +

      Exeunt

      +
      +

      SCENE III. The same.

      +

      +Knocking within. Enter a Porter +
      + +Porter +
      +Here's a knocking indeed! If a
      +man were porter of hell-gate, he should have
      +old turning the key.
      +

      Knocking within

      +Knock,
      +knock, knock! Who's there, i' the name of
      +Beelzebub? Here's a farmer, that hanged
      +himself on the expectation of plenty: come in
      +time; have napkins enow about you; here
      +you'll sweat for't.
      +

      Knocking within

      +Knock,
      +knock! Who's there, in the other devil's
      +name? Faith, here's an equivocator, that could
      +swear in both the scales against either scale;
      +who committed treason enough for God's sake,
      +yet could not equivocate to heaven: O, come
      +in, equivocator.
      +

      Knocking within

      +Knock,
      +knock, knock! Who's there? Faith, here's an
      +English tailor come hither, for stealing out of
      +a French hose: come in, tailor; here you may
      +roast your goose.
      +

      Knocking within

      +Knock,
      +knock; never at quiet! What are you? But
      +this place is too cold for hell. I'll devil-porter
      +it no further: I had thought to have let in
      +some of all professions that go the primrose
      +way to the everlasting bonfire.
      +

      Knocking within

      +Anon, anon! I pray you, remember the porter.
      +

      Opens the gate

      +

      Enter MACDUFF and LENNOX

      +
      + +MACDUFF +
      +Was it so late, friend, ere you went to bed,
      +That you do lie so late?
      +
      + +Porter +
      +'Faith sir, we were carousing till the
      +second cock: and drink, sir, is a great
      +provoker of three things.
      +
      + +MACDUFF +
      +What three things does drink especially provoke?
      +
      + +Porter +
      +Marry, sir, nose-painting, sleep, and
      +urine. Lechery, sir, it provokes, and unprovokes;
      +it provokes the desire, but it takes
      +away the performance: therefore, much drink
      +may be said to be an equivocator with lechery:
      +it makes him, and it mars him; it sets
      +him on, and it takes him off; it persuades him,
      +and disheartens him; makes him stand to, and
      +not stand to; in conclusion, equivocates him
      +in a sleep, and, giving him the lie, leaves him.
      +
      + +MACDUFF +
      +I believe drink gave thee the lie last night.
      +
      + +Porter +
      +That it did, sir, i' the very throat on
      +me: but I requited him for his lie; and, I
      +think, being too strong for him, though he took
      +up my legs sometime, yet I made a shift to cast
      +him.
      +
      + +MACDUFF +
      +Is thy master stirring?
      +

      Enter MACBETH

      +Our knocking has awaked him; here he comes.
      +
      + +LENNOX +
      +Good morrow, noble sir.
      +
      + +MACBETH +
      +Good morrow, both.
      +
      + +MACDUFF +
      +Is the king stirring, worthy thane?
      +
      + +MACBETH +
      +Not yet.
      +
      + +MACDUFF +
      +He did command me to call timely on him:
      +I have almost slipp'd the hour.
      +
      + +MACBETH +
      +I'll bring you to him.
      +
      + +MACDUFF +
      +I know this is a joyful trouble to you;
      +But yet 'tis one.
      +
      + +MACBETH +
      +The labour we delight in physics pain.
      +This is the door.
      +
      + +MACDUFF +
      + I'll make so bold to call,
      +For 'tis my limited service.
      +

      Exit

      +
      + +LENNOX +
      +Goes the king hence to-day?
      +
      + +MACBETH +
      +He does: he did appoint so.
      +
      + +LENNOX +
      +The night has been unruly: where we lay,
      +Our chimneys were blown down; and, as they say,
      +Lamentings heard i' the air; strange screams of death,
      +And prophesying with accents terrible
      +Of dire combustion and confused events
      +New hatch'd to the woeful time: the obscure bird
      +Clamour'd the livelong night: some say, the earth
      +Was feverous and did shake.
      +
      + +MACBETH +
      +'Twas a rough night.
      +
      + +LENNOX +
      +My young remembrance cannot parallel
      +A fellow to it.
      +

      Re-enter MACDUFF

      +
      + +MACDUFF +
      +O horror, horror, horror! Tongue nor heart
      +Cannot conceive nor name thee!
      +
      + +MACBETH + +LENNOX +
      +What's the matter.
      +
      + +MACDUFF +
      +Confusion now hath made his masterpiece!
      +Most sacrilegious murder hath broke ope
      +The Lord's anointed temple, and stole thence
      +The life o' the building!
      +
      + +MACBETH +
      +What is 't you say? the life?
      +
      + +LENNOX +
      +Mean you his majesty?
      +
      + +MACDUFF +
      +Approach the chamber, and destroy your sight
      +With a new Gorgon: do not bid me speak;
      +See, and then speak yourselves.
      +

      Exeunt MACBETH and LENNOX

      +Awake, awake!
      +Ring the alarum-bell. Murder and treason!
      +Banquo and Donalbain! Malcolm! awake!
      +Shake off this downy sleep, death's counterfeit,
      +And look on death itself! up, up, and see
      +The great doom's image! Malcolm! Banquo!
      +As from your graves rise up, and walk like sprites,
      +To countenance this horror! Ring the bell.
      +

      Bell rings

      +

      Enter LADY MACBETH

      +
      + +LADY MACBETH +
      +What's the business,
      +That such a hideous trumpet calls to parley
      +The sleepers of the house? speak, speak!
      +
      + +MACDUFF +
      +O gentle lady,
      +'Tis not for you to hear what I can speak:
      +The repetition, in a woman's ear,
      +Would murder as it fell.
      +

      Enter BANQUO

      +O Banquo, Banquo,
      +Our royal master 's murder'd!
      +
      + +LADY MACBETH +
      +Woe, alas!
      +What, in our house?
      +
      + +BANQUO +
      +Too cruel any where.
      +Dear Duff, I prithee, contradict thyself,
      +And say it is not so.
      +

      Re-enter MACBETH and LENNOX, with ROSS

      +
      + +MACBETH +
      +Had I but died an hour before this chance,
      +I had lived a blessed time; for, from this instant,
      +There 's nothing serious in mortality:
      +All is but toys: renown and grace is dead;
      +The wine of life is drawn, and the mere lees
      +Is left this vault to brag of.
      +

      Enter MALCOLM and DONALBAIN

      +
      + +DONALBAIN +
      +What is amiss?
      +
      + +MACBETH +
      + You are, and do not know't:
      +The spring, the head, the fountain of your blood
      +Is stopp'd; the very source of it is stopp'd.
      +
      + +MACDUFF +
      +Your royal father 's murder'd.
      +
      + +MALCOLM +
      +O, by whom?
      +
      + +LENNOX +
      +Those of his chamber, as it seem'd, had done 't:
      +Their hands and faces were an badged with blood;
      +So were their daggers, which unwiped we found
      +Upon their pillows:
      +They stared, and were distracted; no man's life
      +Was to be trusted with them.
      +
      + +MACBETH +
      +O, yet I do repent me of my fury,
      +That I did kill them.
      +
      + +MACDUFF +
      +Wherefore did you so?
      +
      + +MACBETH +
      +Who can be wise, amazed, temperate and furious,
      +Loyal and neutral, in a moment? No man:
      +The expedition my violent love
      +Outrun the pauser, reason. Here lay Duncan,
      +His silver skin laced with his golden blood;
      +And his gash'd stabs look'd like a breach in nature
      +For ruin's wasteful entrance: there, the murderers,
      +Steep'd in the colours of their trade, their daggers
      +Unmannerly breech'd with gore: who could refrain,
      +That had a heart to love, and in that heart
      +Courage to make 's love kno wn?
      +
      + +LADY MACBETH +
      +Help me hence, ho!
      +
      + +MACDUFF +
      +Look to the lady.
      +
      + +MALCOLM +
      +[Aside to DONALBAIN] Why do we hold our tongues,
      +That most may claim this argument for ours?
      +
      + +DONALBAIN +
      +[Aside to MALCOLM] What should be spoken here,
      +where our fate,
      +Hid in an auger-hole, may rush, and seize us?
      +Let 's away;
      +Our tears are not yet brew'd.
      +
      + +MALCOLM +
      +[Aside to DONALBAIN] Nor our strong sorrow
      +Upon the foot of motion.
      +
      + +BANQUO +
      +Look to the lady:
      +

      LADY MACBETH is carried out

      +And when we have our naked frailties hid,
      +That suffer in exposure, let us meet,
      +And question this most bloody piece of work,
      +To know it further. Fears and scruples shake us:
      +In the great hand of God I stand; and thence
      +Against the undivulged pretence I fight
      +Of treasonous malice.
      +
      + +MACDUFF +
      +And so do I.
      +
      + +ALL +
      +So all.
      +
      + +MACBETH +
      +Let's briefly put on manly readiness,
      +And meet i' the hall together.
      +
      + +ALL +
      +Well contented.
      +

      Exeunt all but Malcolm and Donalbain.

      +
      + +MALCOLM +
      +What will you do? Let's not consort with them:
      +To show an unfelt sorrow is an office
      +Which the false man does easy. I'll to England.
      +
      + +DONALBAIN +
      +To Ireland, I; our separated fortune
      +Shall keep us both the safer: where we are,
      +There's daggers in men's smiles: the near in blood,
      +The nearer bloody.
      +
      + +MALCOLM +
      + This murderous shaft that's shot
      +Hath not yet lighted, and our safest way
      +Is to avoid the aim. Therefore, to horse;
      +And let us not be dainty of leave-taking,
      +But shift away: there's warrant in that theft
      +Which steals itself, when there's no mercy left.
      +

      Exeunt

      +
      +

      SCENE IV. Outside Macbeth's castle.

      +

      +Enter ROSS and an old Man +
      + +Old Man +
      +Threescore and ten I can remember well:
      +Within the volume of which time I have seen
      +Hours dreadful and things strange; but this sore night
      +Hath trifled former knowings.
      +
      + +ROSS +
      +Ah, good father,
      +Thou seest, the heavens, as troubled with man's act,
      +Threaten his bloody stage: by the clock, 'tis day,
      +And yet dark night strangles the travelling lamp:
      +Is't night's predominance, or the day's shame,
      +That darkness does the face of earth entomb,
      +When living light should kiss it?
      +
      + +Old Man +
      +'Tis unnatural,
      +Even like the deed that's done. On Tuesday last,
      +A falcon, towering in her pride of place,
      +Was by a mousing owl hawk'd at and kill'd.
      +
      + +ROSS +
      +And Duncan's horses--a thing most strange and certain--
      +Beauteous and swift, the minions of their race,
      +Turn'd wild in nature, broke their stalls, flung out,
      +Contending 'gainst obedience, as they would make
      +War with mankind.
      +
      + +Old Man +
      +'Tis said they eat each other.
      +
      + +ROSS +
      +They did so, to the amazement of mine eyes
      +That look'd upon't. Here comes the good Macduff.
      +

      Enter MACDUFF

      +How goes the world, sir, now?
      +
      + +MACDUFF +
      +Why, see you not?
      +
      + +ROSS +
      +Is't known who did this more than bloody deed?
      +
      + +MACDUFF +
      +Those that Macbeth hath slain.
      +
      + +ROSS +
      +Alas, the day!
      +What good could they pretend?
      +
      + +MACDUFF +
      +They were suborn'd:
      +Malcolm and Donalbain, the king's two sons,
      +Are stol'n away and fled; which puts upon them
      +Suspicion of the deed.
      +
      + +ROSS +
      +'Gainst nature still!
      +Thriftless ambition, that wilt ravin up
      +Thine own life's means! Then 'tis most like
      +The sovereignty will fall upon Macbeth.
      +
      + +MACDUFF +
      +He is already named, and gone to Scone
      +To be invested.
      +
      + +ROSS +
      + Where is Duncan's body?
      +
      + +MACDUFF +
      +Carried to Colmekill,
      +The sacred storehouse of his predecessors,
      +And guardian of their bones.
      +
      + +ROSS +
      +Will you to Scone?
      +
      + +MACDUFF +
      +No, cousin, I'll to Fife.
      +
      + +ROSS +
      +Well, I will thither.
      +
      + +MACDUFF +
      +Well, may you see things well done there: adieu!
      +Lest our old robes sit easier than our new!
      +
      + +ROSS +
      +Farewell, father.
      +
      + +Old Man +
      +God's benison go with you; and with those
      +That would make good of bad, and friends of foes!
      +

      Exeunt

      +

      +

      ACT III

      +

      SCENE I. Forres. The palace.

      +

      +Enter BANQUO +
      + +BANQUO +
      +Thou hast it now: king, Cawdor, Glamis, all,
      +As the weird women promised, and, I fear,
      +Thou play'dst most foully for't: yet it was said
      +It should not stand in thy posterity,
      +But that myself should be the root and father
      +Of many kings. If there come truth from them--
      +As upon thee, Macbeth, their speeches shine--
      +Why, by the verities on thee made good,
      +May they not be my oracles as well,
      +And set me up in hope? But hush! no more.
      +

      Sennet sounded. Enter MACBETH, as king, LADY MACBETH, as queen, LENNOX, ROSS, Lords, Ladies, and Attendants

      +
      + +MACBETH +
      +Here's our chief guest.
      +
      + +LADY MACBETH +
      +If he had been forgotten,
      +It had been as a gap in our great feast,
      +And all-thing unbecoming.
      +
      + +MACBETH +
      +To-night we hold a solemn supper sir,
      +And I'll request your presence.
      +
      + +BANQUO +
      +Let your highness
      +Command upon me; to the which my duties
      +Are with a most indissoluble tie
      +For ever knit.
      +
      + +MACBETH +
      + Ride you this afternoon?
      +
      + +BANQUO +
      +Ay, my good lord.
      +
      + +MACBETH +
      +We should have else desired your good advice,
      +Which still hath been both grave and prosperous,
      +In this day's council; but we'll take to-morrow.
      +Is't far you ride?
      +
      + +BANQUO +
      +As far, my lord, as will fill up the time
      +'Twixt this and supper: go not my horse the better,
      +I must become a borrower of the night
      +For a dark hour or twain.
      +
      + +MACBETH +
      +Fail not our feast.
      +
      + +BANQUO +
      +My lord, I will not.
      +
      + +MACBETH +
      +We hear, our bloody cousins are bestow'd
      +In England and in Ireland, not confessing
      +Their cruel parricide, filling their hearers
      +With strange invention: but of that to-morrow,
      +When therewithal we shall have cause of state
      +Craving us jointly. Hie you to horse: adieu,
      +Till you return at night. Goes Fleance with you?
      +
      + +BANQUO +
      +Ay, my good lord: our time does call upon 's.
      +
      + +MACBETH +
      +I wish your horses swift and sure of foot;
      +And so I do commend you to their backs. Farewell.
      +

      Exit BANQUO

      +Let every man be master of his time
      +Till seven at night: to make society
      +The sweeter welcome, we will keep ourself
      +Till supper-time alone: while then, God be with you!
      +

      Exeunt all but MACBETH, and an attendant

      +Sirrah, a word with you: attend those men
      +Our pleasure?
      +
      + +ATTENDANT +
      +They are, my lord, without the palace gate.
      +
      + +MACBETH +
      +Bring them before us.
      +

      Exit Attendant

      +To be thus is nothing;
      +But to be safely thus.--Our fears in Banquo
      +Stick deep; and in his royalty of nature
      +Reigns that which would be fear'd: 'tis much he dares;
      +And, to that dauntless temper of his mind,
      +He hath a wisdom that doth guide his valour
      +To act in safety. There is none but he
      +Whose being I do fear: and, under him,
      +My Genius is rebuked; as, it is said,
      +Mark Antony's was by Caesar. He chid the sisters
      +When first they put the name of king upon me,
      +And bade them speak to him: then prophet-like
      +They hail'd him father to a line of kings:
      +Upon my head they placed a fruitless crown,
      +And put a barren sceptre in my gripe,
      +Thence to be wrench'd with an unlineal hand,
      +No son of mine succeeding. If 't be so,
      +For Banquo's issue have I filed my mind;
      +For them the gracious Duncan have I murder'd;
      +Put rancours in the vessel of my peace
      +Only for them; and mine eternal jewel
      +Given to the common enemy of man,
      +To make them kings, the seed of Banquo kings!
      +Rather than so, come fate into the list.
      +And champion me to the utterance! Who's there!
      +

      Re-enter Attendant, with two Murderers

      +Now go to the door, and stay there till we call.
      +

      Exit Attendant

      +Was it not yesterday we spoke together?
      +
      + +First Murderer +
      +It was, so please your highness.
      +
      + +MACBETH +
      +Well then, now
      +Have you consider'd of my speeches? Know
      +That it was he in the times past which held you
      +So under fortune, which you thought had been
      +Our innocent self: this I made good to you
      +In our last conference, pass'd in probation with you,
      +How you were borne in hand, how cross'd,
      +the instruments,
      +Who wrought with them, and all things else that might
      +To half a soul and to a notion crazed
      +Say 'Thus did Banquo.'
      +
      + +First Murderer +
      +You made it known to us.
      +
      + +MACBETH +
      +I did so, and went further, which is now
      +Our point of second meeting. Do you find
      +Your patience so predominant in your nature
      +That you can let this go? Are you so gospell'd
      +To pray for this good man and for his issue,
      +Whose heavy hand hath bow'd you to the grave
      +And beggar'd yours for ever?
      +
      + +First Murderer +
      +We are men, my liege.
      +
      + +MACBETH +
      +Ay, in the catalogue ye go for men;
      +As hounds and greyhounds, mongrels, spaniels, curs,
      +Shoughs, water-rugs and demi-wolves, are clept
      +All by the name of dogs: the valued file
      +Distinguishes the swift, the slow, the subtle,
      +The housekeeper, the hunter, every one
      +According to the gift which bounteous nature
      +Hath in him closed; whereby he does receive
      +Particular addition. from the bill
      +That writes them all alike: and so of men.
      +Now, if you have a station in the file,
      +Not i' the worst rank of manhood, say 't;
      +And I will put that business in your bosoms,
      +Whose execution takes your enemy off,
      +Grapples you to the heart and love of us,
      +Who wear our health but sickly in his life,
      +Which in his death were perfect.
      +
      + +Second Murderer +
      +I am one, my liege,
      +Whom the vile blows and buffets of the world
      +Have so incensed that I am reckless what
      +I do to spite the world.
      +
      + +First Murderer +
      +And I another
      +So weary with disasters, tugg'd with fortune,
      +That I would set my lie on any chance,
      +To mend it, or be rid on't.
      +
      + +MACBETH +
      +Both of you
      +Know Banquo was your enemy.
      +
      + +Both Murderers +
      +True, my lord.
      +
      + +MACBETH +
      +So is he mine; and in such bloody distance,
      +That every minute of his being thrusts
      +Against my near'st of life: and though I could
      +With barefaced power sweep him from my sight
      +And bid my will avouch it, yet I must not,
      +For certain friends that are both his and mine,
      +Whose loves I may not drop, but wail his fall
      +Who I myself struck down; and thence it is,
      +That I to your assistance do make love,
      +Masking the business from the common eye
      +For sundry weighty reasons.
      +
      + +Second Murderer +
      +We shall, my lord,
      +Perform what you command us.
      +
      + +First Murderer +
      +Though our lives--
      +
      + +MACBETH +
      +Your spirits shine through you. Within this hour at most
      +I will advise you where to plant yourselves;
      +Acquaint you with the perfect spy o' the time,
      +The moment on't; for't must be done to-night,
      +And something from the palace; always thought
      +That I require a clearness: and with him--
      +To leave no rubs nor botches in the work--
      +Fleance his son, that keeps him company,
      +Whose absence is no less material to me
      +Than is his father's, must embrace the fate
      +Of that dark hour. Resolve yourselves apart:
      +I'll come to you anon.
      +
      + +Both Murderers +
      +We are resolved, my lord.
      +
      + +MACBETH +
      +I'll call upon you straight: abide within.
      +

      Exeunt Murderers

      +It is concluded. Banquo, thy soul's flight,
      +If it find heaven, must find it out to-night.
      +

      Exit

      +
      +

      SCENE II. The palace.

      +

      +Enter LADY MACBETH and a Servant +
      + +LADY MACBETH +
      +Is Banquo gone from court?
      +
      + +Servant +
      +Ay, madam, but returns again to-night.
      +
      + +LADY MACBETH +
      +Say to the king, I would attend his leisure
      +For a few words.
      +
      + +Servant +
      + Madam, I will.
      +

      Exit

      +
      + +LADY MACBETH +
      +Nought's had, all's spent,
      +Where our desire is got without content:
      +'Tis safer to be that which we destroy
      +Than by destruction dwell in doubtful joy.
      +

      Enter MACBETH

      +How now, my lord! why do you keep alone,
      +Of sorriest fancies your companions making,
      +Using those thoughts which should indeed have died
      +With them they think on? Things without all remedy
      +Should be without regard: what's done is done.
      +
      + +MACBETH +
      +We have scotch'd the snake, not kill'd it:
      +She'll close and be herself, whilst our poor malice
      +Remains in danger of her former tooth.
      +But let the frame of things disjoint, both the
      +worlds suffer,
      +Ere we will eat our meal in fear and sleep
      +In the affliction of these terrible dreams
      +That shake us nightly: better be with the dead,
      +Whom we, to gain our peace, have sent to peace,
      +Than on the torture of the mind to lie
      +In restless ecstasy. Duncan is in his grave;
      +After life's fitful fever he sleeps well;
      +Treason has done his worst: nor steel, nor poison,
      +Malice domestic, foreign levy, nothing,
      +Can touch him further.
      +
      + +LADY MACBETH +
      +Come on;
      +Gentle my lord, sleek o'er your rugged looks;
      +Be bright and jovial among your guests to-night.
      +
      + +MACBETH +
      +So shall I, love; and so, I pray, be you:
      +Let your remembrance apply to Banquo;
      +Present him eminence, both with eye and tongue:
      +Unsafe the while, that we
      +Must lave our honours in these flattering streams,
      +And make our faces vizards to our hearts,
      +Disguising what they are.
      +
      + +LADY MACBETH +
      +You must leave this.
      +
      + +MACBETH +
      +O, full of scorpions is my mind, dear wife!
      +Thou know'st that Banquo, and his Fleance, lives.
      +
      + +LADY MACBETH +
      +But in them nature's copy's not eterne.
      +
      + +MACBETH +
      +There's comfort yet; they are assailable;
      +Then be thou jocund: ere the bat hath flown
      +His cloister'd flight, ere to black Hecate's summons
      +The shard-borne beetle with his drowsy hums
      +Hath rung night's yawning peal, there shall be done
      +A deed of dreadful note.
      +
      + +LADY MACBETH +
      +What's to be done?
      +
      + +MACBETH +
      +Be innocent of the knowledge, dearest chuck,
      +Till thou applaud the deed. Come, seeling night,
      +Scarf up the tender eye of pitiful day;
      +And with thy bloody and invisible hand
      +Cancel and tear to pieces that great bond
      +Which keeps me pale! Light thickens; and the crow
      +Makes wing to the rooky wood:
      +Good things of day begin to droop and drowse;
      +While night's black agents to their preys do rouse.
      +Thou marvell'st at my words: but hold thee still;
      +Things bad begun make strong themselves by ill.
      +So, prithee, go with me.
      +

      Exeunt

      +
      +

      SCENE III. A park near the palace.

      +

      +Enter three Murderers +
      + +First Murderer +
      +But who did bid thee join with us?
      +
      + +Third Murderer +
      +Macbeth.
      +
      + +Second Murderer +
      +He needs not our mistrust, since he delivers
      +Our offices and what we have to do
      +To the direction just.
      +
      + +First Murderer +
      +Then stand with us.
      +The west yet glimmers with some streaks of day:
      +Now spurs the lated traveller apace
      +To gain the timely inn; and near approaches
      +The subject of our watch.
      +
      + +Third Murderer +
      +Hark! I hear horses.
      +
      + +BANQUO +
      +[Within] Give us a light there, ho!
      +
      + +Second Murderer +
      +Then 'tis he: the rest
      +That are within the note of expectation
      +Already are i' the court.
      +
      + +First Murderer +
      +His horses go about.
      +
      + +Third Murderer +
      +Almost a mile: but he does usually,
      +So all men do, from hence to the palace gate
      +Make it their walk.
      +
      + +Second Murderer +
      +A light, a light!
      +

      Enter BANQUO, and FLEANCE with a torch

      +
      + +Third Murderer +
      +'Tis he.
      +
      + +First Murderer +
      +Stand to't.
      +
      + +BANQUO +
      +It will be rain to-night.
      +
      + +First Murderer +
      +Let it come down.
      +

      They set upon BANQUO

      +
      + +BANQUO +
      +O, treachery! Fly, good Fleance, fly, fly, fly!
      +Thou mayst revenge. O slave!
      +

      Dies. FLEANCE escapes

      +
      + +Third Murderer +
      +Who did strike out the light?
      +
      + +First Murderer +
      +Wast not the way?
      +
      + +Third Murderer +
      +There's but one down; the son is fled.
      +
      + +Second Murderer +
      +We have lost
      +Best half of our affair.
      +
      + +First Murderer +
      +Well, let's away, and say how much is done.
      +

      Exeunt

      +
      +

      SCENE IV. The same. Hall in the palace.

      +

      +A banquet prepared. Enter MACBETH, LADY MACBETH, ROSS, LENNOX, Lords, and Attendants +
      + +MACBETH +
      +You know your own degrees; sit down: at first
      +And last the hearty welcome.
      +
      + +Lords +
      +Thanks to your majesty.
      +
      + +MACBETH +
      +Ourself will mingle with society,
      +And play the humble host.
      +Our hostess keeps her state, but in best time
      +We will require her welcome.
      +
      + +LADY MACBETH +
      +Pronounce it for me, sir, to all our friends;
      +For my heart speaks they are welcome.
      +

      First Murderer appears at the door

      +
      + +MACBETH +
      +See, they encounter thee with their hearts' thanks.
      +Both sides are even: here I'll sit i' the midst:
      +Be large in mirth; anon we'll drink a measure
      +The table round.
      +

      Approaching the door

      +There's blood on thy face.
      +
      + +First Murderer +
      +'Tis Banquo's then.
      +
      + +MACBETH +
      +'Tis better thee without than he within.
      +Is he dispatch'd?
      +
      + +First Murderer +
      +My lord, his throat is cut; that I did for him.
      +
      + +MACBETH +
      +Thou art the best o' the cut-throats: yet he's good
      +That did the like for Fleance: if thou didst it,
      +Thou art the nonpareil.
      +
      + +First Murderer +
      +Most royal sir,
      +Fleance is 'scaped.
      +
      + +MACBETH +
      +Then comes my fit again: I had else been perfect,
      +Whole as the marble, founded as the rock,
      +As broad and general as the casing air:
      +But now I am cabin'd, cribb'd, confined, bound in
      +To saucy doubts and fears. But Banquo's safe?
      +
      + +First Murderer +
      +Ay, my good lord: safe in a ditch he bides,
      +With twenty trenched gashes on his head;
      +The least a death to nature.
      +
      + +MACBETH +
      +Thanks for that:
      +There the grown serpent lies; the worm that's fled
      +Hath nature that in time will venom breed,
      +No teeth for the present. Get thee gone: to-morrow
      +We'll hear, ourselves, again.
      +

      Exit Murderer

      +
      + +LADY MACBETH +
      +My royal lord,
      +You do not give the cheer: the feast is sold
      +That is not often vouch'd, while 'tis a-making,
      +'Tis given with welcome: to feed were best at home;
      +From thence the sauce to meat is ceremony;
      +Meeting were bare without it.
      +
      + +MACBETH +
      +Sweet remembrancer!
      +Now, good digestion wait on appetite,
      +And health on both!
      +
      + +LENNOX +
      +May't please your highness sit.
      +

      The GHOST OF BANQUO enters, and sits in MACBETH's place

      +
      + +MACBETH +
      +Here had we now our country's honour roof'd,
      +Were the graced person of our Banquo present;
      +Who may I rather challenge for unkindness
      +Than pity for mischance!
      +
      + +ROSS +
      +His absence, sir,
      +Lays blame upon his promise. Please't your highness
      +To grace us with your royal company.
      +
      + +MACBETH +
      +The table's full.
      +
      + +LENNOX +
      + Here is a place reserved, sir.
      +
      + +MACBETH +
      +Where?
      +
      + +LENNOX +
      +Here, my good lord. What is't that moves your highness?
      +
      + +MACBETH +
      +Which of you have done this?
      +
      + +Lords +
      +What, my good lord?
      +
      + +MACBETH +
      +Thou canst not say I did it: never shake
      +Thy gory locks at me.
      +
      + +ROSS +
      +Gentlemen, rise: his highness is not well.
      +
      + +LADY MACBETH +
      +Sit, worthy friends: my lord is often thus,
      +And hath been from his youth: pray you, keep seat;
      +The fit is momentary; upon a thought
      +He will again be well: if much you note him,
      +You shall offend him and extend his passion:
      +Feed, and regard him not. Are you a man?
      +
      + +MACBETH +
      +Ay, and a bold one, that dare look on that
      +Which might appal the devil.
      +
      + +LADY MACBETH +
      +O proper stuff!
      +This is the very painting of your fear:
      +This is the air-drawn dagger which, you said,
      +Led you to Duncan. O, these flaws and starts,
      +Impostors to true fear, would well become
      +A woman's story at a winter's fire,
      +Authorized by her grandam. Shame itself!
      +Why do you make such faces? When all's done,
      +You look but on a stool.
      +
      + +MACBETH +
      +Prithee, see there! behold! look! lo!
      +how say you?
      +Why, what care I? If thou canst nod, speak too.
      +If charnel-houses and our graves must send
      +Those that we bury back, our monuments
      +Shall be the maws of kites.
      +

      GHOST OF BANQUO vanishes

      +
      + +LADY MACBETH +
      +What, quite unmann'd in folly?
      +
      + +MACBETH +
      +If I stand here, I saw him.
      +
      + +LADY MACBETH +
      +Fie, for shame!
      +
      + +MACBETH +
      +Blood hath been shed ere now, i' the olden time,
      +Ere human statute purged the gentle weal;
      +Ay, and since too, murders have been perform'd
      +Too terrible for the ear: the times have been,
      +That, when the brains were out, the man would die,
      +And there an end; but now they rise again,
      +With twenty mortal murders on their crowns,
      +And push us from our stools: this is more strange
      +Than such a murder is.
      +
      + +LADY MACBETH +
      +My worthy lord,
      +Your noble friends do lack you.
      +
      + +MACBETH +
      +I do forget.
      +Do not muse at me, my most worthy friends,
      +I have a strange infirmity, which is nothing
      +To those that know me. Come, love and health to all;
      +Then I'll sit down. Give me some wine; fill full.
      +I drink to the general joy o' the whole table,
      +And to our dear friend Banquo, whom we miss;
      +Would he were here! to all, and him, we thirst,
      +And all to all.
      +
      + +Lords +
      + Our duties, and the pledge.
      +

      Re-enter GHOST OF BANQUO

      +
      + +MACBETH +
      +Avaunt! and quit my sight! let the earth hide thee!
      +Thy bones are marrowless, thy blood is cold;
      +Thou hast no speculation in those eyes
      +Which thou dost glare with!
      +
      + +LADY MACBETH +
      +Think of this, good peers,
      +But as a thing of custom: 'tis no other;
      +Only it spoils the pleasure of the time.
      +
      + +MACBETH +
      +What man dare, I dare:
      +Approach thou like the rugged Russian bear,
      +The arm'd rhinoceros, or the Hyrcan tiger;
      +Take any shape but that, and my firm nerves
      +Shall never tremble: or be alive again,
      +And dare me to the desert with thy sword;
      +If trembling I inhabit then, protest me
      +The baby of a girl. Hence, horrible shadow!
      +Unreal mockery, hence!
      +

      GHOST OF BANQUO vanishes

      +Why, so: being gone,
      +I am a man again. Pray you, sit still.
      +
      + +LADY MACBETH +
      +You have displaced the mirth, broke the good meeting,
      +With most admired disorder.
      +
      + +MACBETH +
      +Can such things be,
      +And overcome us like a summer's cloud,
      +Without our special wonder? You make me strange
      +Even to the disposition that I owe,
      +When now I think you can behold such sights,
      +And keep the natural ruby of your cheeks,
      +When mine is blanched with fear.
      +
      + +ROSS +
      +What sights, my lord?
      +
      + +LADY MACBETH +
      +I pray you, speak not; he grows worse and worse;
      +Question enrages him. At once, good night:
      +Stand not upon the order of your going,
      +But go at once.
      +
      + +LENNOX +
      + Good night; and better health
      +Attend his majesty!
      +
      + +LADY MACBETH +
      +A kind good night to all!
      +

      Exeunt all but MACBETH and LADY MACBETH

      +
      + +MACBETH +
      +It will have blood; they say, blood will have blood:
      +Stones have been known to move and trees to speak;
      +Augurs and understood relations have
      +By magot-pies and choughs and rooks brought forth
      +The secret'st man of blood. What is the night?
      +
      + +LADY MACBETH +
      +Almost at odds with morning, which is which.
      +
      + +MACBETH +
      +How say'st thou, that Macduff denies his person
      +At our great bidding?
      +
      + +LADY MACBETH +
      +Did you send to him, sir?
      +
      + +MACBETH +
      +I hear it by the way; but I will send:
      +There's not a one of them but in his house
      +I keep a servant fee'd. I will to-morrow,
      +And betimes I will, to the weird sisters:
      +More shall they speak; for now I am bent to know,
      +By the worst means, the worst. For mine own good,
      +All causes shall give way: I am in blood
      +Stepp'd in so far that, should I wade no more,
      +Returning were as tedious as go o'er:
      +Strange things I have in head, that will to hand;
      +Which must be acted ere they may be scann'd.
      +
      + +LADY MACBETH +
      +You lack the season of all natures, sleep.
      +
      + +MACBETH +
      +Come, we'll to sleep. My strange and self-abuse
      +Is the initiate fear that wants hard use:
      +We are yet but young in deed.
      +

      Exeunt

      +
      +

      SCENE V. A Heath.

      +

      +Thunder. Enter the three Witches meeting HECATE +
      + +First Witch +
      +Why, how now, Hecate! you look angerly.
      +
      + +HECATE +
      +Have I not reason, beldams as you are,
      +Saucy and overbold? How did you dare
      +To trade and traffic with Macbeth
      +In riddles and affairs of death;
      +And I, the mistress of your charms,
      +The close contriver of all harms,
      +Was never call'd to bear my part,
      +Or show the glory of our art?
      +And, which is worse, all you have done
      +Hath been but for a wayward son,
      +Spiteful and wrathful, who, as others do,
      +Loves for his own ends, not for you.
      +But make amends now: get you gone,
      +And at the pit of Acheron
      +Meet me i' the morning: thither he
      +Will come to know his destiny:
      +Your vessels and your spells provide,
      +Your charms and every thing beside.
      +I am for the air; this night I'll spend
      +Unto a dismal and a fatal end:
      +Great business must be wrought ere noon:
      +Upon the corner of the moon
      +There hangs a vaporous drop profound;
      +I'll catch it ere it come to ground:
      +And that distill'd by magic sleights
      +Shall raise such artificial sprites
      +As by the strength of their illusion
      +Shall draw him on to his confusion:
      +He shall spurn fate, scorn death, and bear
      +He hopes 'bove wisdom, grace and fear:
      +And you all know, security
      +Is mortals' chiefest enemy.
      +

      Music and a song within: 'Come away, come away,' & c

      +Hark! I am call'd; my little spirit, see,
      +Sits in a foggy cloud, and stays for me.
      +

      Exit

      +
      + +First Witch +
      +Come, let's make haste; she'll soon be back again.
      +

      Exeunt

      +
      +

      SCENE VI. Forres. The palace.

      +

      +Enter LENNOX and another Lord +
      + +LENNOX +
      +My former speeches have but hit your thoughts,
      +Which can interpret further: only, I say,
      +Things have been strangely borne. The
      +gracious Duncan
      +Was pitied of Macbeth: marry, he was dead:
      +And the right-valiant Banquo walk'd too late;
      +Whom, you may say, if't please you, Fleance kill'd,
      +For Fleance fled: men must not walk too late.
      +Who cannot want the thought how monstrous
      +It was for Malcolm and for Donalbain
      +To kill their gracious father? damned fact!
      +How it did grieve Macbeth! did he not straight
      +In pious rage the two delinquents tear,
      +That were the slaves of drink and thralls of sleep?
      +Was not that nobly done? Ay, and wisely too;
      +For 'twould have anger'd any heart alive
      +To hear the men deny't. So that, I say,
      +He has borne all things well: and I do think
      +That had he Duncan's sons under his key--
      +As, an't please heaven, he shall not--they
      +should find
      +What 'twere to kill a father; so should Fleance.
      +But, peace! for from broad words and 'cause he fail'd
      +His presence at the tyrant's feast, I hear
      +Macduff lives in disgrace: sir, can you tell
      +Where he bestows himself?
      +
      + +Lord +
      +The son of Duncan,
      +From whom this tyrant holds the due of birth
      +Lives in the English court, and is received
      +Of the most pious Edward with such grace
      +That the malevolence of fortune nothing
      +Takes from his high respect: thither Macduff
      +Is gone to pray the holy king, upon his aid
      +To wake Northumberland and warlike Siward:
      +That, by the help of these--with Him above
      +To ratify the work--we may again
      +Give to our tables meat, sleep to our nights,
      +Free from our feasts and banquets bloody knives,
      +Do faithful homage and receive free honours:
      +All which we pine for now: and this report
      +Hath so exasperate the king that he
      +Prepares for some attempt of war.
      +
      + +LENNOX +
      +Sent he to Macduff?
      +
      + +Lord +
      +He did: and with an absolute 'Sir, not I,'
      +The cloudy messenger turns me his back,
      +And hums, as who should say 'You'll rue the time
      +That clogs me with this answer.'
      +
      + +LENNOX +
      +And that well might
      +Advise him to a caution, to hold what distance
      +His wisdom can provide. Some holy angel
      +Fly to the court of England and unfold
      +His message ere he come, that a swift blessing
      +May soon return to this our suffering country
      +Under a hand accursed!
      +
      + +Lord +
      +I'll send my prayers with him.
      +

      Exeunt

      +

      +

      ACT IV

      +

      SCENE I. A cavern. In the middle, a boiling cauldron.

      +

      +Thunder. Enter the three Witches +
      + +First Witch +
      +Thrice the brinded cat hath mew'd.
      +
      + +Second Witch +
      +Thrice and once the hedge-pig whined.
      +
      + +Third Witch +
      +Harpier cries 'Tis time, 'tis time.
      +
      + +First Witch +
      +Round about the cauldron go;
      +In the poison'd entrails throw.
      +Toad, that under cold stone
      +Days and nights has thirty-one
      +Swelter'd venom sleeping got,
      +Boil thou first i' the charmed pot.
      +
      + +ALL +
      +Double, double toil and trouble;
      +Fire burn, and cauldron bubble.
      +
      + +Second Witch +
      +Fillet of a fenny snake,
      +In the cauldron boil and bake;
      +Eye of newt and toe of frog,
      +Wool of bat and tongue of dog,
      +Adder's fork and blind-worm's sting,
      +Lizard's leg and owlet's wing,
      +For a charm of powerful trouble,
      +Like a hell-broth boil and bubble.
      +
      + +ALL +
      +Double, double toil and trouble;
      +Fire burn and cauldron bubble.
      +
      + +Third Witch +
      +Scale of dragon, tooth of wolf,
      +Witches' mummy, maw and gulf
      +Of the ravin'd salt-sea shark,
      +Root of hemlock digg'd i' the dark,
      +Liver of blaspheming Jew,
      +Gall of goat, and slips of yew
      +Silver'd in the moon's eclipse,
      +Nose of Turk and Tartar's lips,
      +Finger of birth-strangled babe
      +Ditch-deliver'd by a drab,
      +Make the gruel thick and slab:
      +Add thereto a tiger's chaudron,
      +For the ingredients of our cauldron.
      +
      + +ALL +
      +Double, double toil and trouble;
      +Fire burn and cauldron bubble.
      +
      + +Second Witch +
      +Cool it with a baboon's blood,
      +Then the charm is firm and good.
      +

      Enter HECATE to the other three Witches

      +
      + +HECATE +
      +O well done! I commend your pains;
      +And every one shall share i' the gains;
      +And now about the cauldron sing,
      +Live elves and fairies in a ring,
      +Enchanting all that you put in.
      +

      Music and a song: 'Black spirits,' & c

      +

      HECATE retires

      +
      + +Second Witch +
      +By the pricking of my thumbs,
      +Something wicked this way comes.
      +Open, locks,
      +Whoever knocks!
      +

      Enter MACBETH

      +
      + +MACBETH +
      +How now, you secret, black, and midnight hags!
      +What is't you do?
      +
      + +ALL +
      + A deed without a name.
      +
      + +MACBETH +
      +I conjure you, by that which you profess,
      +Howe'er you come to know it, answer me:
      +Though you untie the winds and let them fight
      +Against the churches; though the yesty waves
      +Confound and swallow navigation up;
      +Though bladed corn be lodged and trees blown down;
      +Though castles topple on their warders' heads;
      +Though palaces and pyramids do slope
      +Their heads to their foundations; though the treasure
      +Of nature's germens tumble all together,
      +Even till destruction sicken; answer me
      +To what I ask you.
      +
      + +First Witch +
      + Speak.
      +
      + +Second Witch +
      +Demand.
      +
      + +Third Witch +
      +We'll answer.
      +
      + +First Witch +
      +Say, if thou'dst rather hear it from our mouths,
      +Or from our masters?
      +
      + +MACBETH +
      +Call 'em; let me see 'em.
      +
      + +First Witch +
      +Pour in sow's blood, that hath eaten
      +Her nine farrow; grease that's sweaten
      +From the murderer's gibbet throw
      +Into the flame.
      +
      + +ALL +
      + Come, high or low;
      +Thyself and office deftly show!
      +

      Thunder. First Apparition: an armed Head

      +
      + +MACBETH +
      +Tell me, thou unknown power,--
      +
      + +First Witch +
      +He knows thy thought:
      +Hear his speech, but say thou nought.
      +
      + +First Apparition +
      +Macbeth! Macbeth! Macbeth! beware Macduff;
      +Beware the thane of Fife. Dismiss me. Enough.
      +

      Descends

      +
      + +MACBETH +
      +Whate'er thou art, for thy good caution, thanks;
      +Thou hast harp'd my fear aright: but one
      +word more,--
      +
      + +First Witch +
      +He will not be commanded: here's another,
      +More potent than the first.
      +

      Thunder. Second Apparition: A bloody Child

      +
      + +Second Apparition +
      +Macbeth! Macbeth! Macbeth!
      +
      + +MACBETH +
      +Had I three ears, I'ld hear thee.
      +
      + +Second Apparition +
      +Be bloody, bold, and resolute; laugh to scorn
      +The power of man, for none of woman born
      +Shall harm Macbeth.
      +

      Descends

      +
      + +MACBETH +
      +Then live, Macduff: what need I fear of thee?
      +But yet I'll make assurance double sure,
      +And take a bond of fate: thou shalt not live;
      +That I may tell pale-hearted fear it lies,
      +And sleep in spite of thunder.
      +

      Thunder. Third Apparition: a Child crowned, with a tree in his hand

      +What is this
      +That rises like the issue of a king,
      +And wears upon his baby-brow the round
      +And top of sovereignty?
      +
      + +ALL +
      +Listen, but speak not to't.
      +
      + +Third Apparition +
      +Be lion-mettled, proud; and take no care
      +Who chafes, who frets, or where conspirers are:
      +Macbeth shall never vanquish'd be until
      +Great Birnam wood to high Dunsinane hill
      +Shall come against him.
      +

      Descends

      +
      + +MACBETH +
      +That will never be
      +Who can impress the forest, bid the tree
      +Unfix his earth-bound root? Sweet bodements! good!
      +Rebellion's head, rise never till the wood
      +Of Birnam rise, and our high-placed Macbeth
      +Shall live the lease of nature, pay his breath
      +To time and mortal custom. Yet my heart
      +Throbs to know one thing: tell me, if your art
      +Can tell so much: shall Banquo's issue ever
      +Reign in this kingdom?
      +
      + +ALL +
      +Seek to know no more.
      +
      + +MACBETH +
      +I will be satisfied: deny me this,
      +And an eternal curse fall on you! Let me know.
      +Why sinks that cauldron? and what noise is this?
      +

      Hautboys

      +
      + +First Witch +
      +Show!
      +
      + +Second Witch +
      +Show!
      +
      + +Third Witch +
      +Show!
      +
      + +ALL +
      +Show his eyes, and grieve his heart;
      +Come like shadows, so depart!
      +

      A show of Eight Kings, the last with a glass in his hand; GHOST OF BANQUO following

      +
      + +MACBETH +
      +Thou art too like the spirit of Banquo: down!
      +Thy crown does sear mine eye-balls. And thy hair,
      +Thou other gold-bound brow, is like the first.
      +A third is like the former. Filthy hags!
      +Why do you show me this? A fourth! Start, eyes!
      +What, will the line stretch out to the crack of doom?
      +Another yet! A seventh! I'll see no more:
      +And yet the eighth appears, who bears a glass
      +Which shows me many more; and some I see
      +That two-fold balls and treble scepters carry:
      +Horrible sight! Now, I see, 'tis true;
      +For the blood-bolter'd Banquo smiles upon me,
      +And points at them for his.
      +

      Apparitions vanish

      +What, is this so?
      +
      + +First Witch +
      +Ay, sir, all this is so: but why
      +Stands Macbeth thus amazedly?
      +Come, sisters, cheer we up his sprites,
      +And show the best of our delights:
      +I'll charm the air to give a sound,
      +While you perform your antic round:
      +That this great king may kindly say,
      +Our duties did his welcome pay.
      +

      Music. The witches dance and then vanish, with HECATE

      +
      + +MACBETH +
      +Where are they? Gone? Let this pernicious hour
      +Stand aye accursed in the calendar!
      +Come in, without there!
      +

      Enter LENNOX

      +
      + +LENNOX +
      +What's your grace's will?
      +
      + +MACBETH +
      +Saw you the weird sisters?
      +
      + +LENNOX +
      +No, my lord.
      +
      + +MACBETH +
      +Came they not by you?
      +
      + +LENNOX +
      +No, indeed, my lord.
      +
      + +MACBETH +
      +Infected be the air whereon they ride;
      +And damn'd all those that trust them! I did hear
      +The galloping of horse: who was't came by?
      +
      + +LENNOX +
      +'Tis two or three, my lord, that bring you word
      +Macduff is fled to England.
      +
      + +MACBETH +
      +Fled to England!
      +
      + +LENNOX +
      +Ay, my good lord.
      +
      + +MACBETH +
      +Time, thou anticipatest my dread exploits:
      +The flighty purpose never is o'ertook
      +Unless the deed go with it; from this moment
      +The very firstlings of my heart shall be
      +The firstlings of my hand. And even now,
      +To crown my thoughts with acts, be it thought and done:
      +The castle of Macduff I will surprise;
      +Seize upon Fife; give to the edge o' the sword
      +His wife, his babes, and all unfortunate souls
      +That trace him in his line. No boasting like a fool;
      +This deed I'll do before this purpose cool.
      +But no more sights!--Where are these gentlemen?
      +Come, bring me where they are.
      +

      Exeunt

      +
      +

      SCENE II. Fife. Macduff's castle.

      +

      +Enter LADY MACDUFF, her Son, and ROSS +
      + +LADY MACDUFF +
      +What had he done, to make him fly the land?
      +
      + +ROSS +
      +You must have patience, madam.
      +
      + +LADY MACDUFF +
      +He had none:
      +His flight was madness: when our actions do not,
      +Our fears do make us traitors.
      +
      + +ROSS +
      +You know not
      +Whether it was his wisdom or his fear.
      +
      + +LADY MACDUFF +
      +Wisdom! to leave his wife, to leave his babes,
      +His mansion and his titles in a place
      +From whence himself does fly? He loves us not;
      +He wants the natural touch: for the poor wren,
      +The most diminutive of birds, will fight,
      +Her young ones in her nest, against the owl.
      +All is the fear and nothing is the love;
      +As little is the wisdom, where the flight
      +So runs against all reason.
      +
      + +ROSS +
      +My dearest coz,
      +I pray you, school yourself: but for your husband,
      +He is noble, wise, judicious, and best knows
      +The fits o' the season. I dare not speak
      +much further;
      +But cruel are the times, when we are traitors
      +And do not know ourselves, when we hold rumour
      +From what we fear, yet know not what we fear,
      +But float upon a wild and violent sea
      +Each way and move. I take my leave of you:
      +Shall not be long but I'll be here again:
      +Things at the worst will cease, or else climb upward
      +To what they were before. My pretty cousin,
      +Blessing upon you!
      +
      + +LADY MACDUFF +
      +Father'd he is, and yet he's fatherless.
      +
      + +ROSS +
      +I am so much a fool, should I stay longer,
      +It would be my disgrace and your discomfort:
      +I take my leave at once.
      +

      Exit

      +
      + +LADY MACDUFF +
      +Sirrah, your father's dead;
      +And what will you do now? How will you live?
      +
      + +Son +
      +As birds do, mother.
      +
      + +LADY MACDUFF +
      +What, with worms and flies?
      +
      + +Son +
      +With what I get, I mean; and so do they.
      +
      + +LADY MACDUFF +
      +Poor bird! thou'ldst never fear the net nor lime,
      +The pitfall nor the gin.
      +
      + +Son +
      +Why should I, mother? Poor birds they are not set for.
      +My father is not dead, for all your saying.
      +
      + +LADY MACDUFF +
      +Yes, he is dead; how wilt thou do for a father?
      +
      + +Son +
      +Nay, how will you do for a husband?
      +
      + +LADY MACDUFF +
      +Why, I can buy me twenty at any market.
      +
      + +Son +
      +Then you'll buy 'em to sell again.
      +
      + +LADY MACDUFF +
      +Thou speak'st with all thy wit: and yet, i' faith,
      +With wit enough for thee.
      +
      + +Son +
      +Was my father a traitor, mother?
      +
      + +LADY MACDUFF +
      +Ay, that he was.
      +
      + +Son +
      +What is a traitor?
      +
      + +LADY MACDUFF +
      +Why, one that swears and lies.
      +
      + +Son +
      +And be all traitors that do so?
      +
      + +LADY MACDUFF +
      +Every one that does so is a traitor, and must be hanged.
      +
      + +Son +
      +And must they all be hanged that swear and lie?
      +
      + +LADY MACDUFF +
      +Every one.
      +
      + +Son +
      +Who must hang them?
      +
      + +LADY MACDUFF +
      +Why, the honest men.
      +
      + +Son +
      +Then the liars and swearers are fools,
      +for there are liars and swearers enow to beat
      +the honest men and hang up them.
      +
      + +LADY MACDUFF +
      +Now, God help thee, poor monkey!
      +But how wilt thou do for a father?
      +
      + +Son +
      +If he were dead, you'ld weep for
      +him: if you would not, it were a good sign
      +that I should quickly have a new father.
      +
      + +LADY MACDUFF +
      +Poor prattler, how thou talk'st!
      +

      Enter a Messenger

      +
      + +Messenger +
      +Bless you, fair dame! I am not to you known,
      +Though in your state of honour I am perfect.
      +I doubt some danger does approach you nearly:
      +If you will take a homely man's advice,
      +Be not found here; hence, with your little ones.
      +To fright you thus, methinks, I am too savage;
      +To do worse to you were fell cruelty,
      +Which is too nigh your person. Heaven preserve you!
      +I dare abide no longer.
      +

      Exit

      +
      + +LADY MACDUFF +
      +Whither should I fly?
      +I have done no harm. But I remember now
      +I am in this earthly world; where to do harm
      +Is often laudable, to do good sometime
      +Accounted dangerous folly: why then, alas,
      +Do I put up that womanly defence,
      +To say I have done no harm?
      +

      Enter Murderers

      +What are these faces?
      +
      + +First Murderer +
      +Where is your husband?
      +
      + +LADY MACDUFF +
      +I hope, in no place so unsanctified
      +Where such as thou mayst find him.
      +
      + +First Murderer +
      +He's a traitor.
      +
      + +Son +
      +Thou liest, thou shag-hair'd villain!
      +
      + +First Murderer +
      +What, you egg!
      +

      Stabbing him

      +Young fry of treachery!
      +
      + +Son +
      +He has kill'd me, mother:
      +Run away, I pray you!
      +

      Dies

      +

      Exit LADY MACDUFF, crying 'Murder!' Exeunt Murderers, following her

      +
      +

      SCENE III. England. Before the King's palace.

      +

      +Enter MALCOLM and MACDUFF +
      + +MALCOLM +
      +Let us seek out some desolate shade, and there
      +Weep our sad bosoms empty.
      +
      + +MACDUFF +
      +Let us rather
      +Hold fast the mortal sword, and like good men
      +Bestride our down-fall'n birthdom: each new morn
      +New widows howl, new orphans cry, new sorrows
      +Strike heaven on the face, that it resounds
      +As if it felt with Scotland and yell'd out
      +Like syllable of dolour.
      +
      + +MALCOLM +
      +What I believe I'll wail,
      +What know believe, and what I can redress,
      +As I shall find the time to friend, I will.
      +What you have spoke, it may be so perchance.
      +This tyrant, whose sole name blisters our tongues,
      +Was once thought honest: you have loved him well.
      +He hath not touch'd you yet. I am young;
      +but something
      +You may deserve of him through me, and wisdom
      +To offer up a weak poor innocent lamb
      +To appease an angry god.
      +
      + +MACDUFF +
      +I am not treacherous.
      +
      + +MALCOLM +
      +But Macbeth is.
      +A good and virtuous nature may recoil
      +In an imperial charge. But I shall crave
      +your pardon;
      +That which you are my thoughts cannot transpose:
      +Angels are bright still, though the brightest fell;
      +Though all things foul would wear the brows of grace,
      +Yet grace must still look so.
      +
      + +MACDUFF +
      +I have lost my hopes.
      +
      + +MALCOLM +
      +Perchance even there where I did find my doubts.
      +Why in that rawness left you wife and child,
      +Those precious motives, those strong knots of love,
      +Without leave-taking? I pray you,
      +Let not my jealousies be your dishonours,
      +But mine own safeties. You may be rightly just,
      +Whatever I shall think.
      +
      + +MACDUFF +
      +Bleed, bleed, poor country!
      +Great tyranny! lay thou thy basis sure,
      +For goodness dare not cheque thee: wear thou
      +thy wrongs;
      +The title is affeer'd! Fare thee well, lord:
      +I would not be the villain that thou think'st
      +For the whole space that's in the tyrant's grasp,
      +And the rich East to boot.
      +
      + +MALCOLM +
      +Be not offended:
      +I speak not as in absolute fear of you.
      +I think our country sinks beneath the yoke;
      +It weeps, it bleeds; and each new day a gash
      +Is added to her wounds: I think withal
      +There would be hands uplifted in my right;
      +And here from gracious England have I offer
      +Of goodly thousands: but, for all this,
      +When I shall tread upon the tyrant's head,
      +Or wear it on my sword, yet my poor country
      +Shall have more vices than it had before,
      +More suffer and more sundry ways than ever,
      +By him that shall succeed.
      +
      + +MACDUFF +
      +What should he be?
      +
      + +MALCOLM +
      +It is myself I mean: in whom I know
      +All the particulars of vice so grafted
      +That, when they shall be open'd, black Macbeth
      +Will seem as pure as snow, and the poor state
      +Esteem him as a lamb, being compared
      +With my confineless harms.
      +
      + +MACDUFF +
      +Not in the legions
      +Of horrid hell can come a devil more damn'd
      +In evils to top Macbeth.
      +
      + +MALCOLM +
      +I grant him bloody,
      +Luxurious, avaricious, false, deceitful,
      +Sudden, malicious, smacking of every sin
      +That has a name: but there's no bottom, none,
      +In my voluptuousness: your wives, your daughters,
      +Your matrons and your maids, could not fill up
      +The cistern of my lust, and my desire
      +All continent impediments would o'erbear
      +That did oppose my will: better Macbeth
      +Than such an one to reign.
      +
      + +MACDUFF +
      +Boundless intemperance
      +In nature is a tyranny; it hath been
      +The untimely emptying of the happy throne
      +And fall of many kings. But fear not yet
      +To take upon you what is yours: you may
      +Convey your pleasures in a spacious plenty,
      +And yet seem cold, the time you may so hoodwink.
      +We have willing dames enough: there cannot be
      +That vulture in you, to devour so many
      +As will to greatness dedicate themselves,
      +Finding it so inclined.
      +
      + +MALCOLM +
      +With this there grows
      +In my most ill-composed affection such
      +A stanchless avarice that, were I king,
      +I should cut off the nobles for their lands,
      +Desire his jewels and this other's house:
      +And my more-having would be as a sauce
      +To make me hunger more; that I should forge
      +Quarrels unjust against the good and loyal,
      +Destroying them for wealth.
      +
      + +MACDUFF +
      +This avarice
      +Sticks deeper, grows with more pernicious root
      +Than summer-seeming lust, and it hath been
      +The sword of our slain kings: yet do not fear;
      +Scotland hath foisons to fill up your will.
      +Of your mere own: all these are portable,
      +With other graces weigh'd.
      +
      + +MALCOLM +
      +But I have none: the king-becoming graces,
      +As justice, verity, temperance, stableness,
      +Bounty, perseverance, mercy, lowliness,
      +Devotion, patience, courage, fortitude,
      +I have no relish of them, but abound
      +In the division of each several crime,
      +Acting it many ways. Nay, had I power, I should
      +Pour the sweet milk of concord into hell,
      +Uproar the universal peace, confound
      +All unity on earth.
      +
      + +MACDUFF +
      +O Scotland, Scotland!
      +
      + +MALCOLM +
      +If such a one be fit to govern, speak:
      +I am as I have spoken.
      +
      + +MACDUFF +
      +Fit to govern!
      +No, not to live. O nation miserable,
      +With an untitled tyrant bloody-scepter'd,
      +When shalt thou see thy wholesome days again,
      +Since that the truest issue of thy throne
      +By his own interdiction stands accursed,
      +And does blaspheme his breed? Thy royal father
      +Was a most sainted king: the queen that bore thee,
      +Oftener upon her knees than on her feet,
      +Died every day she lived. Fare thee well!
      +These evils thou repeat'st upon thyself
      +Have banish'd me from Scotland. O my breast,
      +Thy hope ends here!
      +
      + +MALCOLM +
      +Macduff, this noble passion,
      +Child of integrity, hath from my soul
      +Wiped the black scruples, reconciled my thoughts
      +To thy good truth and honour. Devilish Macbeth
      +By many of these trains hath sought to win me
      +Into his power, and modest wisdom plucks me
      +From over-credulous haste: but God above
      +Deal between thee and me! for even now
      +I put myself to thy direction, and
      +Unspeak mine own detraction, here abjure
      +The taints and blames I laid upon myself,
      +For strangers to my nature. I am yet
      +Unknown to woman, never was forsworn,
      +Scarcely have coveted what was mine own,
      +At no time broke my faith, would not betray
      +The devil to his fellow and delight
      +No less in truth than life: my first false speaking
      +Was this upon myself: what I am truly,
      +Is thine and my poor country's to command:
      +Whither indeed, before thy here-approach,
      +Old Siward, with ten thousand warlike men,
      +Already at a point, was setting forth.
      +Now we'll together; and the chance of goodness
      +Be like our warranted quarrel! Why are you silent?
      +
      + +MACDUFF +
      +Such welcome and unwelcome things at once
      +'Tis hard to reconcile.
      +

      Enter a Doctor

      +
      + +MALCOLM +
      +Well; more anon.--Comes the king forth, I pray you?
      +
      + +Doctor +
      +Ay, sir; there are a crew of wretched souls
      +That stay his cure: their malady convinces
      +The great assay of art; but at his touch--
      +Such sanctity hath heaven given his hand--
      +They presently amend.
      +
      + +MALCOLM +
      +I thank you, doctor.
      +

      Exit Doctor

      +
      + +MACDUFF +
      +What's the disease he means?
      +
      + +MALCOLM +
      +'Tis call'd the evil:
      +A most miraculous work in this good king;
      +Which often, since my here-remain in England,
      +I have seen him do. How he solicits heaven,
      +Himself best knows: but strangely-visited people,
      +All swoln and ulcerous, pitiful to the eye,
      +The mere despair of surgery, he cures,
      +Hanging a golden stamp about their necks,
      +Put on with holy prayers: and 'tis spoken,
      +To the succeeding royalty he leaves
      +The healing benediction. With this strange virtue,
      +He hath a heavenly gift of prophecy,
      +And sundry blessings hang about his throne,
      +That speak him full of grace.
      +

      Enter ROSS

      +
      + +MACDUFF +
      +See, who comes here?
      +
      + +MALCOLM +
      +My countryman; but yet I know him not.
      +
      + +MACDUFF +
      +My ever-gentle cousin, welcome hither.
      +
      + +MALCOLM +
      +I know him now. Good God, betimes remove
      +The means that makes us strangers!
      +
      + +ROSS +
      +Sir, amen.
      +
      + +MACDUFF +
      +Stands Scotland where it did?
      +
      + +ROSS +
      +Alas, poor country!
      +Almost afraid to know itself. It cannot
      +Be call'd our mother, but our grave; where nothing,
      +But who knows nothing, is once seen to smile;
      +Where sighs and groans and shrieks that rend the air
      +Are made, not mark'd; where violent sorrow seems
      +A modern ecstasy; the dead man's knell
      +Is there scarce ask'd for who; and good men's lives
      +Expire before the flowers in their caps,
      +Dying or ere they sicken.
      +
      + +MACDUFF +
      +O, relation
      +Too nice, and yet too true!
      +
      + +MALCOLM +
      +What's the newest grief?
      +
      + +ROSS +
      +That of an hour's age doth hiss the speaker:
      +Each minute teems a new one.
      +
      + +MACDUFF +
      +How does my wife?
      +
      + +ROSS +
      +Why, well.
      +
      + +MACDUFF +
      + And all my children?
      +
      + +ROSS +
      +Well too.
      +
      + +MACDUFF +
      +The tyrant has not batter'd at their peace?
      +
      + +ROSS +
      +No; they were well at peace when I did leave 'em.
      +
      + +MACDUFF +
      +But not a niggard of your speech: how goes't?
      +
      + +ROSS +
      +When I came hither to transport the tidings,
      +Which I have heavily borne, there ran a rumour
      +Of many worthy fellows that were out;
      +Which was to my belief witness'd the rather,
      +For that I saw the tyrant's power a-foot:
      +Now is the time of help; your eye in Scotland
      +Would create soldiers, make our women fight,
      +To doff their dire distresses.
      +
      + +MALCOLM +
      +Be't their comfort
      +We are coming thither: gracious England hath
      +Lent us good Siward and ten thousand men;
      +An older and a better soldier none
      +That Christendom gives out.
      +
      + +ROSS +
      +Would I could answer
      +This comfort with the like! But I have words
      +That would be howl'd out in the desert air,
      +Where hearing should not latch them.
      +
      + +MACDUFF +
      +What concern they?
      +The general cause? or is it a fee-grief
      +Due to some single breast?
      +
      + +ROSS +
      +No mind that's honest
      +But in it shares some woe; though the main part
      +Pertains to you alone.
      +
      + +MACDUFF +
      +If it be mine,
      +Keep it not from me, quickly let me have it.
      +
      + +ROSS +
      +Let not your ears despise my tongue for ever,
      +Which shall possess them with the heaviest sound
      +That ever yet they heard.
      +
      + +MACDUFF +
      +Hum! I guess at it.
      +
      + +ROSS +
      +Your castle is surprised; your wife and babes
      +Savagely slaughter'd: to relate the manner,
      +Were, on the quarry of these murder'd deer,
      +To add the death of you.
      +
      + +MALCOLM +
      +Merciful heaven!
      +What, man! ne'er pull your hat upon your brows;
      +Give sorrow words: the grief that does not speak
      +Whispers the o'er-fraught heart and bids it break.
      +
      + +MACDUFF +
      +My children too?
      +
      + +ROSS +
      + Wife, children, servants, all
      +That could be found.
      +
      + +MACDUFF +
      +And I must be from thence!
      +My wife kill'd too?
      +
      + +ROSS +
      +I have said.
      +
      + +MALCOLM +
      +Be comforted:
      +Let's make us medicines of our great revenge,
      +To cure this deadly grief.
      +
      + +MACDUFF +
      +He has no children. All my pretty ones?
      +Did you say all? O hell-kite! All?
      +What, all my pretty chickens and their dam
      +At one fell swoop?
      +
      + +MALCOLM +
      +Dispute it like a man.
      +
      + +MACDUFF +
      +I shall do so;
      +But I must also feel it as a man:
      +I cannot but remember such things were,
      +That were most precious to me. Did heaven look on,
      +And would not take their part? Sinful Macduff,
      +They were all struck for thee! naught that I am,
      +Not for their own demerits, but for mine,
      +Fell slaughter on their souls. Heaven rest them now!
      +
      + +MALCOLM +
      +Be this the whetstone of your sword: let grief
      +Convert to anger; blunt not the heart, enrage it.
      +
      + +MACDUFF +
      +O, I could play the woman with mine eyes
      +And braggart with my tongue! But, gentle heavens,
      +Cut short all intermission; front to front
      +Bring thou this fiend of Scotland and myself;
      +Within my sword's length set him; if he 'scape,
      +Heaven forgive him too!
      +
      + +MALCOLM +
      +This tune goes manly.
      +Come, go we to the king; our power is ready;
      +Our lack is nothing but our leave; Macbeth
      +Is ripe for shaking, and the powers above
      +Put on their instruments. Receive what cheer you may:
      +The night is long that never finds the day.
      +

      Exeunt

      +

      +

      ACT V

      +

      SCENE I. Dunsinane. Ante-room in the castle.

      +

      +Enter a Doctor of Physic and a Waiting-Gentlewoman +
      + +Doctor +
      +I have two nights watched with you, but can perceive
      +no truth in your report. When was it she last walked?
      +
      + +Gentlewoman +
      +Since his majesty went into the field, I have seen
      +her rise from her bed, throw her night-gown upon
      +her, unlock her closet, take forth paper, fold it,
      +write upon't, read it, afterwards seal it, and again
      +return to bed; yet all this while in a most fast sleep.
      +
      + +Doctor +
      +A great perturbation in nature, to receive at once
      +the benefit of sleep, and do the effects of
      +watching! In this slumbery agitation, besides her
      +walking and other actual performances, what, at any
      +time, have you heard her say?
      +
      + +Gentlewoman +
      +That, sir, which I will not report after her.
      +
      + +Doctor +
      +You may to me: and 'tis most meet you should.
      +
      + +Gentlewoman +
      +Neither to you nor any one; having no witness to
      +confirm my speech.
      +

      Enter LADY MACBETH, with a taper

      +Lo you, here she comes! This is her very guise;
      +and, upon my life, fast asleep. Observe her; stand close.
      +
      + +Doctor +
      +How came she by that light?
      +
      + +Gentlewoman +
      +Why, it stood by her: she has light by her
      +continually; 'tis her command.
      +
      + +Doctor +
      +You see, her eyes are open.
      +
      + +Gentlewoman +
      +Ay, but their sense is shut.
      +
      + +Doctor +
      +What is it she does now? Look, how she rubs her hands.
      +
      + +Gentlewoman +
      +It is an accustomed action with her, to seem thus
      +washing her hands: I have known her continue in
      +this a quarter of an hour.
      +
      + +LADY MACBETH +
      +Yet here's a spot.
      +
      + +Doctor +
      +Hark! she speaks: I will set down what comes from
      +her, to satisfy my remembrance the more strongly.
      +
      + +LADY MACBETH +
      +Out, damned spot! out, I say!--One: two: why,
      +then, 'tis time to do't.--Hell is murky!--Fie, my
      +lord, fie! a soldier, and afeard? What need we
      +fear who knows it, when none can call our power to
      +account?--Yet who would have thought the old man
      +to have had so much blood in him.
      +
      + +Doctor +
      +Do you mark that?
      +
      + +LADY MACBETH +
      +The thane of Fife had a wife: where is she now?--
      +What, will these hands ne'er be clean?--No more o'
      +that, my lord, no more o' that: you mar all with
      +this starting.
      +
      + +Doctor +
      +Go to, go to; you have known what you should not.
      +
      + +Gentlewoman +
      +She has spoke what she should not, I am sure of
      +that: heaven knows what she has known.
      +
      + +LADY MACBETH +
      +Here's the smell of the blood still: all the
      +perfumes of Arabia will not sweeten this little
      +hand. Oh, oh, oh!
      +
      + +Doctor +
      +What a sigh is there! The heart is sorely charged.
      +
      + +Gentlewoman +
      +I would not have such a heart in my bosom for the
      +dignity of the whole body.
      +
      + +Doctor +
      +Well, well, well,--
      +
      + +Gentlewoman +
      +Pray God it be, sir.
      +
      + +Doctor +
      +This disease is beyond my practise: yet I have known
      +those which have walked in their sleep who have died
      +holily in their beds.
      +
      + +LADY MACBETH +
      +Wash your hands, put on your nightgown; look not so
      +pale.--I tell you yet again, Banquo's buried; he
      +cannot come out on's grave.
      +
      + +Doctor +
      +Even so?
      +
      + +LADY MACBETH +
      +To bed, to bed! there's knocking at the gate:
      +come, come, come, come, give me your hand. What's
      +done cannot be undone.--To bed, to bed, to bed!
      +

      Exit

      +
      + +Doctor +
      +Will she go now to bed?
      +
      + +Gentlewoman +
      +Directly.
      +
      + +Doctor +
      +Foul whisperings are abroad: unnatural deeds
      +Do breed unnatural troubles: infected minds
      +To their deaf pillows will discharge their secrets:
      +More needs she the divine than the physician.
      +God, God forgive us all! Look after her;
      +Remove from her the means of all annoyance,
      +And still keep eyes upon her. So, good night:
      +My mind she has mated, and amazed my sight.
      +I think, but dare not speak.
      +
      + +Gentlewoman +
      +Good night, good doctor.
      +

      Exeunt

      +
      +

      SCENE II. The country near Dunsinane.

      +

      +Drum and colours. Enter MENTEITH, CAITHNESS, ANGUS, LENNOX, and Soldiers +
      + +MENTEITH +
      +The English power is near, led on by Malcolm,
      +His uncle Siward and the good Macduff:
      +Revenges burn in them; for their dear causes
      +Would to the bleeding and the grim alarm
      +Excite the mortified man.
      +
      + +ANGUS +
      +Near Birnam wood
      +Shall we well meet them; that way are they coming.
      +
      + +CAITHNESS +
      +Who knows if Donalbain be with his brother?
      +
      + +LENNOX +
      +For certain, sir, he is not: I have a file
      +Of all the gentry: there is Siward's son,
      +And many unrough youths that even now
      +Protest their first of manhood.
      +
      + +MENTEITH +
      +What does the tyrant?
      +
      + +CAITHNESS +
      +Great Dunsinane he strongly fortifies:
      +Some say he's mad; others that lesser hate him
      +Do call it valiant fury: but, for certain,
      +He cannot buckle his distemper'd cause
      +Within the belt of rule.
      +
      + +ANGUS +
      +Now does he feel
      +His secret murders sticking on his hands;
      +Now minutely revolts upbraid his faith-breach;
      +Those he commands move only in command,
      +Nothing in love: now does he feel his title
      +Hang loose about him, like a giant's robe
      +Upon a dwarfish thief.
      +
      + +MENTEITH +
      +Who then shall blame
      +His pester'd senses to recoil and start,
      +When all that is within him does condemn
      +Itself for being there?
      +
      + +CAITHNESS +
      +Well, march we on,
      +To give obedience where 'tis truly owed:
      +Meet we the medicine of the sickly weal,
      +And with him pour we in our country's purge
      +Each drop of us.
      +
      + +LENNOX +
      + Or so much as it needs,
      +To dew the sovereign flower and drown the weeds.
      +Make we our march towards Birnam.
      +

      Exeunt, marching

      +
      +

      SCENE III. Dunsinane. A room in the castle.

      +

      +Enter MACBETH, Doctor, and Attendants +
      + +MACBETH +
      +Bring me no more reports; let them fly all:
      +Till Birnam wood remove to Dunsinane,
      +I cannot taint with fear. What's the boy Malcolm?
      +Was he not born of woman? The spirits that know
      +All mortal consequences have pronounced me thus:
      +'Fear not, Macbeth; no man that's born of woman
      +Shall e'er have power upon thee.' Then fly,
      +false thanes,
      +And mingle with the English epicures:
      +The mind I sway by and the heart I bear
      +Shall never sag with doubt nor shake with fear.
      +

      Enter a Servant

      +The devil damn thee black, thou cream-faced loon!
      +Where got'st thou that goose look?
      +
      + +Servant +
      +There is ten thousand--
      +
      + +MACBETH +
      +Geese, villain!
      +
      + +Servant +
      +Soldiers, sir.
      +
      + +MACBETH +
      +Go prick thy face, and over-red thy fear,
      +Thou lily-liver'd boy. What soldiers, patch?
      +Death of thy soul! those linen cheeks of thine
      +Are counsellors to fear. What soldiers, whey-face?
      +
      + +Servant +
      +The English force, so please you.
      +
      + +MACBETH +
      +Take thy face hence.
      +

      Exit Servant

      +Seyton!--I am sick at heart,
      +When I behold--Seyton, I say!--This push
      +Will cheer me ever, or disseat me now.
      +I have lived long enough: my way of life
      +Is fall'n into the sear, the yellow leaf;
      +And that which should accompany old age,
      +As honour, love, obedience, troops of friends,
      +I must not look to have; but, in their stead,
      +Curses, not loud but deep, mouth-honour, breath,
      +Which the poor heart would fain deny, and dare not. Seyton!
      +

      Enter SEYTON

      +
      + +SEYTON +
      +What is your gracious pleasure?
      +
      + +MACBETH +
      +What news more?
      +
      + +SEYTON +
      +All is confirm'd, my lord, which was reported.
      +
      + +MACBETH +
      +I'll fight till from my bones my flesh be hack'd.
      +Give me my armour.
      +
      + +SEYTON +
      +'Tis not needed yet.
      +
      + +MACBETH +
      +I'll put it on.
      +Send out more horses; skirr the country round;
      +Hang those that talk of fear. Give me mine armour.
      +How does your patient, doctor?
      +
      + +Doctor +
      +Not so sick, my lord,
      +As she is troubled with thick coming fancies,
      +That keep her from her rest.
      +
      + +MACBETH +
      +Cure her of that.
      +Canst thou not minister to a mind diseased,
      +Pluck from the memory a rooted sorrow,
      +Raze out the written troubles of the brain
      +And with some sweet oblivious antidote
      +Cleanse the stuff'd bosom of that perilous stuff
      +Which weighs upon the heart?
      +
      + +Doctor +
      +Therein the patient
      +Must minister to himself.
      +
      + +MACBETH +
      +Throw physic to the dogs; I'll none of it.
      +Come, put mine armour on; give me my staff.
      +Seyton, send out. Doctor, the thanes fly from me.
      +Come, sir, dispatch. If thou couldst, doctor, cast
      +The water of my land, find her disease,
      +And purge it to a sound and pristine health,
      +I would applaud thee to the very echo,
      +That should applaud again.--Pull't off, I say.--
      +What rhubarb, cyme, or what purgative drug,
      +Would scour these English hence? Hear'st thou of them?
      +
      + +Doctor +
      +Ay, my good lord; your royal preparation
      +Makes us hear something.
      +
      + +MACBETH +
      +Bring it after me.
      +I will not be afraid of death and bane,
      +Till Birnam forest come to Dunsinane.
      +
      + +Doctor +
      +[Aside] Were I from Dunsinane away and clear,
      +Profit again should hardly draw me here.
      +

      Exeunt

      +
      +

      SCENE IV. Country near Birnam wood.

      +

      +Drum and colours. Enter MALCOLM, SIWARD and YOUNG SIWARD, MACDUFF, MENTEITH, CAITHNESS, ANGUS, LENNOX, ROSS, and Soldiers, marching +
      + +MALCOLM +
      +Cousins, I hope the days are near at hand
      +That chambers will be safe.
      +
      + +MENTEITH +
      +We doubt it nothing.
      +
      + +SIWARD +
      +What wood is this before us?
      +
      + +MENTEITH +
      +The wood of Birnam.
      +
      + +MALCOLM +
      +Let every soldier hew him down a bough
      +And bear't before him: thereby shall we shadow
      +The numbers of our host and make discovery
      +Err in report of us.
      +
      + +Soldiers +
      +It shall be done.
      +
      + +SIWARD +
      +We learn no other but the confident tyrant
      +Keeps still in Dunsinane, and will endure
      +Our setting down before 't.
      +
      + +MALCOLM +
      +'Tis his main hope:
      +For where there is advantage to be given,
      +Both more and less have given him the revolt,
      +And none serve with him but constrained things
      +Whose hearts are absent too.
      +
      + +MACDUFF +
      +Let our just censures
      +Attend the true event, and put we on
      +Industrious soldiership.
      +
      + +SIWARD +
      +The time approaches
      +That will with due decision make us know
      +What we shall say we have and what we owe.
      +Thoughts speculative their unsure hopes relate,
      +But certain issue strokes must arbitrate:
      +Towards which advance the war.
      +

      Exeunt, marching

      +
      +

      SCENE V. Dunsinane. Within the castle.

      +

      +Enter MACBETH, SEYTON, and Soldiers, with drum and colours +
      + +MACBETH +
      +Hang out our banners on the outward walls;
      +The cry is still 'They come:' our castle's strength
      +Will laugh a siege to scorn: here let them lie
      +Till famine and the ague eat them up:
      +Were they not forced with those that should be ours,
      +We might have met them dareful, beard to beard,
      +And beat them backward home.
      +

      A cry of women within

      +What is that noise?
      +
      + +SEYTON +
      +It is the cry of women, my good lord.
      +

      Exit

      +
      + +MACBETH +
      +I have almost forgot the taste of fears;
      +The time has been, my senses would have cool'd
      +To hear a night-shriek; and my fell of hair
      +Would at a dismal treatise rouse and stir
      +As life were in't: I have supp'd full with horrors;
      +Direness, familiar to my slaughterous thoughts
      +Cannot once start me.
      +

      Re-enter SEYTON

      +Wherefore was that cry?
      +
      + +SEYTON +
      +The queen, my lord, is dead.
      +
      + +MACBETH +
      +She should have died hereafter;
      +There would have been a time for such a word.
      +To-morrow, and to-morrow, and to-morrow,
      +Creeps in this petty pace from day to day
      +To the last syllable of recorded time,
      +And all our yesterdays have lighted fools
      +The way to dusty death. Out, out, brief candle!
      +Life's but a walking shadow, a poor player
      +That struts and frets his hour upon the stage
      +And then is heard no more: it is a tale
      +Told by an idiot, full of sound and fury,
      +Signifying nothing.
      +

      Enter a Messenger

      +Thou comest to use thy tongue; thy story quickly.
      +
      + +Messenger +
      +Gracious my lord,
      +I should report that which I say I saw,
      +But know not how to do it.
      +
      + +MACBETH +
      +Well, say, sir.
      +
      + +Messenger +
      +As I did stand my watch upon the hill,
      +I look'd toward Birnam, and anon, methought,
      +The wood began to move.
      +
      + +MACBETH +
      +Liar and slave!
      +
      + +Messenger +
      +Let me endure your wrath, if't be not so:
      +Within this three mile may you see it coming;
      +I say, a moving grove.
      +
      + +MACBETH +
      +If thou speak'st false,
      +Upon the next tree shalt thou hang alive,
      +Till famine cling thee: if thy speech be sooth,
      +I care not if thou dost for me as much.
      +I pull in resolution, and begin
      +To doubt the equivocation of the fiend
      +That lies like truth: 'Fear not, till Birnam wood
      +Do come to Dunsinane:' and now a wood
      +Comes toward Dunsinane. Arm, arm, and out!
      +If this which he avouches does appear,
      +There is nor flying hence nor tarrying here.
      +I gin to be aweary of the sun,
      +And wish the estate o' the world were now undone.
      +Ring the alarum-bell! Blow, wind! come, wrack!
      +At least we'll die with harness on our back.
      +

      Exeunt

      +
      +

      SCENE VI. Dunsinane. Before the castle.

      +

      +Drum and colours. Enter MALCOLM, SIWARD, MACDUFF, and their Army, with boughs +
      + +MALCOLM +
      +Now near enough: your leafy screens throw down.
      +And show like those you are. You, worthy uncle,
      +Shall, with my cousin, your right-noble son,
      +Lead our first battle: worthy Macduff and we
      +Shall take upon 's what else remains to do,
      +According to our order.
      +
      + +SIWARD +
      +Fare you well.
      +Do we but find the tyrant's power to-night,
      +Let us be beaten, if we cannot fight.
      +
      + +MACDUFF +
      +Make all our trumpets speak; give them all breath,
      +Those clamorous harbingers of blood and death.
      +

      Exeunt

      +
      +

      SCENE VII. Another part of the field.

      +

      +Alarums. Enter MACBETH +
      + +MACBETH +
      +They have tied me to a stake; I cannot fly,
      +But, bear-like, I must fight the course. What's he
      +That was not born of woman? Such a one
      +Am I to fear, or none.
      +

      Enter YOUNG SIWARD

      +
      + +YOUNG SIWARD +
      +What is thy name?
      +
      + +MACBETH +
      + Thou'lt be afraid to hear it.
      +
      + +YOUNG SIWARD +
      +No; though thou call'st thyself a hotter name
      +Than any is in hell.
      +
      + +MACBETH +
      +My name's Macbeth.
      +
      + +YOUNG SIWARD +
      +The devil himself could not pronounce a title
      +More hateful to mine ear.
      +
      + +MACBETH +
      +No, nor more fearful.
      +
      + +YOUNG SIWARD +
      +Thou liest, abhorred tyrant; with my sword
      +I'll prove the lie thou speak'st.
      +

      They fight and YOUNG SIWARD is slain

      +
      + +MACBETH +
      +Thou wast born of woman
      +But swords I smile at, weapons laugh to scorn,
      +Brandish'd by man that's of a woman born.
      +

      Exit

      +

      Alarums. Enter MACDUFF

      +
      + +MACDUFF +
      +That way the noise is. Tyrant, show thy face!
      +If thou be'st slain and with no stroke of mine,
      +My wife and children's ghosts will haunt me still.
      +I cannot strike at wretched kerns, whose arms
      +Are hired to bear their staves: either thou, Macbeth,
      +Or else my sword with an unbatter'd edge
      +I sheathe again undeeded. There thou shouldst be;
      +By this great clatter, one of greatest note
      +Seems bruited. Let me find him, fortune!
      +And more I beg not.
      +

      Exit. Alarums

      +

      Enter MALCOLM and SIWARD

      +
      + +SIWARD +
      +This way, my lord; the castle's gently render'd:
      +The tyrant's people on both sides do fight;
      +The noble thanes do bravely in the war;
      +The day almost itself professes yours,
      +And little is to do.
      +
      + +MALCOLM +
      +We have met with foes
      +That strike beside us.
      +
      + +SIWARD +
      +Enter, sir, the castle.
      +

      Exeunt. Alarums

      +
      +

      SCENE VIII. Another part of the field.

      +

      +Enter MACBETH +
      + +MACBETH +
      +Why should I play the Roman fool, and die
      +On mine own sword? whiles I see lives, the gashes
      +Do better upon them.
      +

      Enter MACDUFF

      +
      + +MACDUFF +
      +Turn, hell-hound, turn!
      +
      + +MACBETH +
      +Of all men else I have avoided thee:
      +But get thee back; my soul is too much charged
      +With blood of thine already.
      +
      + +MACDUFF +
      +I have no words:
      +My voice is in my sword: thou bloodier villain
      +Than terms can give thee out!
      +

      They fight

      +
      + +MACBETH +
      +Thou losest labour:
      +As easy mayst thou the intrenchant air
      +With thy keen sword impress as make me bleed:
      +Let fall thy blade on vulnerable crests;
      +I bear a charmed life, which must not yield,
      +To one of woman born.
      +
      + +MACDUFF +
      +Despair thy charm;
      +And let the angel whom thou still hast served
      +Tell thee, Macduff was from his mother's womb
      +Untimely ripp'd.
      +
      + +MACBETH +
      +Accursed be that tongue that tells me so,
      +For it hath cow'd my better part of man!
      +And be these juggling fiends no more believed,
      +That palter with us in a double sense;
      +That keep the word of promise to our ear,
      +And break it to our hope. I'll not fight with thee.
      +
      + +MACDUFF +
      +Then yield thee, coward,
      +And live to be the show and gaze o' the time:
      +We'll have thee, as our rarer monsters are,
      +Painted on a pole, and underwrit,
      +'Here may you see the tyrant.'
      +
      + +MACBETH +
      +I will not yield,
      +To kiss the ground before young Malcolm's feet,
      +And to be baited with the rabble's curse.
      +Though Birnam wood be come to Dunsinane,
      +And thou opposed, being of no woman born,
      +Yet I will try the last. Before my body
      +I throw my warlike shield. Lay on, Macduff,
      +And damn'd be him that first cries, 'Hold, enough!'
      +

      Exeunt, fighting. Alarums

      +

      Retreat. Flourish. Enter, with drum and colours, MALCOLM, SIWARD, ROSS, the other Thanes, and Soldiers

      +
      + +MALCOLM +
      +I would the friends we miss were safe arrived.
      +
      + +SIWARD +
      +Some must go off: and yet, by these I see,
      +So great a day as this is cheaply bought.
      +
      + +MALCOLM +
      +Macduff is missing, and your noble son.
      +
      + +ROSS +
      +Your son, my lord, has paid a soldier's debt:
      +He only lived but till he was a man;
      +The which no sooner had his prowess confirm'd
      +In the unshrinking station where he fought,
      +But like a man he died.
      +
      + +SIWARD +
      +Then he is dead?
      +
      + +ROSS +
      +Ay, and brought off the field: your cause of sorrow
      +Must not be measured by his worth, for then
      +It hath no end.
      +
      + +SIWARD +
      + Had he his hurts before?
      +
      + +ROSS +
      +Ay, on the front.
      +
      + +SIWARD +
      + Why then, God's soldier be he!
      +Had I as many sons as I have hairs,
      +I would not wish them to a fairer death:
      +And so, his knell is knoll'd.
      +
      + +MALCOLM +
      +He's worth more sorrow,
      +And that I'll spend for him.
      +
      + +SIWARD +
      +He's worth no more
      +They say he parted well, and paid his score:
      +And so, God be with him! Here comes newer comfort.
      +

      Re-enter MACDUFF, with MACBETH's head

      +
      + +MACDUFF +
      +Hail, king! for so thou art: behold, where stands
      +The usurper's cursed head: the time is free:
      +I see thee compass'd with thy kingdom's pearl,
      +That speak my salutation in their minds;
      +Whose voices I desire aloud with mine:
      +Hail, King of Scotland!
      +
      + +ALL +
      +Hail, King of Scotland!
      +

      Flourish

      +
      + +MALCOLM +
      +We shall not spend a large expense of time
      +Before we reckon with your several loves,
      +And make us even with you. My thanes and kinsmen,
      +Henceforth be earls, the first that ever Scotland
      +In such an honour named. What's more to do,
      +Which would be planted newly with the time,
      +As calling home our exiled friends abroad
      +That fled the snares of watchful tyranny;
      +Producing forth the cruel ministers
      +Of this dead butcher and his fiend-like queen,
      +Who, as 'tis thought, by self and violent hands
      +Took off her life; this, and what needful else
      +That calls upon us, by the grace of Grace,
      +We will perform in measure, time and place:
      +So, thanks to all at once and to each one,
      +Whom we invite to see us crown'd at Scone.
      +

      Flourish. Exeunt

      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/map.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/map.png new file mode 100644 index 0000000000000000000000000000000000000000..763f5627995f6f178e8ea78e37f32c80b35f5e2b GIT binary patch literal 26209 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 + + Map test page + + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/markerTransparent.png b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/markerTransparent.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4e5e7f4d63fe103983cf3bfa53733a0089ba51 GIT binary patch literal 260 zcmV+f0sH=mP)6Xw+2uq_(M`6dHE24R1_~SA2W)sEi((o#t%gC<}F#-mygTf~{1syRj83 z$v~+4?^7VUur4s{YzK(ScPqf9AN{Mq%K}&hLakp1D8YW + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/meta-redirect.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/meta-redirect.html new file mode 100644 index 0000000..9d9c2f0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/meta-redirect.html @@ -0,0 +1,11 @@ + + + Some test page + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/missedJsReference.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/missedJsReference.html new file mode 100644 index 0000000..6167752 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/missedJsReference.html @@ -0,0 +1,11 @@ + + + + Example page + + +

      This page contains a nested iframe. Execute some JS to locate a reference to an element in this + frame and return it. You should need to switch to that frame in order to use that element.

      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html new file mode 100644 index 0000000..4eff01a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html @@ -0,0 +1,21 @@ + + +First Modal + + + + +

      Modal dialog sample

      + + + +lnk2 +
      + +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html new file mode 100644 index 0000000..cec3f3f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html @@ -0,0 +1,21 @@ + + +Second Modal + + + + +

      Modal dialog sample

      + + + +lnk3 +
      + +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html new file mode 100644 index 0000000..6c5eb72 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html @@ -0,0 +1,15 @@ + + +Third Modal + + + + +

      Modal dialog sample

      + + +
      + +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html new file mode 100644 index 0000000..0a1c4c9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html @@ -0,0 +1,21 @@ + + +Main window + + + + +

      Modal dialog sample

      + + + +lnk1 +
      + +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/mouseOver.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/mouseOver.html new file mode 100644 index 0000000..d4751bf --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/mouseOver.html @@ -0,0 +1,17 @@ + + +
      +
      +
      + +
      diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html new file mode 100644 index 0000000..39a31cd --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html @@ -0,0 +1,33 @@ + + + + + + + + + Div tracking mouse position. +
      +
      + Move mouse here. +
      +

      +0, 0 +

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/nestedElements.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/nestedElements.html new file mode 100644 index 0000000..cf00083 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/nestedElements.html @@ -0,0 +1,155 @@ + + +

      outside

      +

      outside

      +
      +

      inside

      +
      + + Here's a checkbox:
      + + + +
      + Here's a checkbox:
      + + +
      + +hello world + + + + + + +
      + Here's a checkbox:
      + +
      + +
      + Here's a checkbox:
      + + +
      + +hello world + + + + + + +
      + Here's a checkbox:
      + +
      + +
      + Here's a checkbox:
      + + +
      + +hello world + + + + + + +
      + Here's a checkbox:
      + +
      + +
      + Here's a checkbox:
      + + +
      + +hello world + + +Span with class of one +
      + Find me + Also me + But not me +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow-body.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow-body.html new file mode 100644 index 0000000..2d2264c --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow-body.html @@ -0,0 +1,15 @@ + + + + The Visibility of Everyday Things + + + +

      This image is copyright Simon Stewart and donated to the Selenium project for use in its test suites. +

      +a nice beach + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html new file mode 100644 index 0000000..cf8a647 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html new file mode 100644 index 0000000..96fd750 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html new file mode 100644 index 0000000..6f1d90b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html new file mode 100644 index 0000000..24dd192 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html new file mode 100644 index 0000000..cae5665 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html new file mode 100644 index 0000000..d4ffa39 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html new file mode 100644 index 0000000..d425a2a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html new file mode 100644 index 0000000..4a6ff59 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html new file mode 100644 index 0000000..efa8074 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html @@ -0,0 +1,30 @@ + + + + Page with overflow + + + +
      + +
      + Right clicked:
      + Bottom clicked:
      + Bottom-right clicked:
      +
      + + Click bottom +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html new file mode 100644 index 0000000..cb59707 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html @@ -0,0 +1,20 @@ + + + + + + Page with OnBeforeUnload handler + + +

      Page with onbeforeunload event handler. Click here to navigate to another page.

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html new file mode 100644 index 0000000..2c644ff --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html @@ -0,0 +1,6 @@ + + + +

      Page with onload event handler

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html new file mode 100644 index 0000000..6070341 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html @@ -0,0 +1,6 @@ + + + +

      Page with onunload event handler

      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html new file mode 100644 index 0000000..ea94f8e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html @@ -0,0 +1,6 @@ + + + +load a slow page + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/plain.txt b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/plain.txt new file mode 100644 index 0000000..8318c86 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/plain.txt @@ -0,0 +1 @@ +Test \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page1.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page1.html new file mode 100644 index 0000000..1810f1c --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page1.html @@ -0,0 +1,20 @@ + + + +Page 1 +

      The next query param must be the URL for the next page to +link to. + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page2.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page2.html new file mode 100644 index 0000000..d826f17 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page2.html @@ -0,0 +1,24 @@ + + + +Page 2 +This page is a middle man for referrer tests. +This page will include a link to a "next" page if the next query +parameter, or the document.referrer is set. +

      + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page3.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page3.html new file mode 100644 index 0000000..27048f7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/proxy/page3.html @@ -0,0 +1,5 @@ + + + +Page 3 +

      diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html new file mode 100644 index 0000000..8f257fd --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + +

      This

      is a

      contentEditable area

      + +
      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/rectangles.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/rectangles.html new file mode 100644 index 0000000..8ba2339 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/rectangles.html @@ -0,0 +1,40 @@ + + + + Rectangles + + + +
      r1
      +
      r2
      +
      r3
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/resultPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/resultPage.html new file mode 100644 index 0000000..94f3e24 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/resultPage.html @@ -0,0 +1,25 @@ + + + We Arrive Here + + + +

      Success!

      + +
      +

      List of stuff

      +
        +
      1. Item 1
      2. +
      3. Item 2
      4. +
      +
      +
      +

      Almost empty

      +
      + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/rich_text.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/rich_text.html new file mode 100644 index 0000000..a42e43a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/rich_text.html @@ -0,0 +1,161 @@ + + + + + + +
      +
      +
      + + + + + +
      +
      IFRAME
      + +
      +
      frame.contentWindow.document.designMode: on
      frame.contentWindow.document.body.contentEditable: false
      +
      +
      DIV
      +
      +
      +
      +
      div.ownerDocument.designMode: off
      div.ownerDocument.body.contentEditable: false
      div.contentEditable: true
      +
      +
      + +
      +
      + + + + + + + + + + + + + + + + + + +
      type:[]
      tagName:[]
      id:[]
      keyIdentifier:[]
      keyLocation:[]
      keyCode:[]
      charCode:[]
      which:[]
      isTrusted:[]
      ---------------------
      Modifiers
      alt:[]
      ctrl:[]
      shift:[]
      meta:[]
      +
      + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html new file mode 100644 index 0000000..8a05925 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html @@ -0,0 +1,31 @@ + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.css b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.css new file mode 100644 index 0000000..8152618 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.css @@ -0,0 +1,19 @@ +* { + margin: 0; +} +html, body, #output { + width: 100%; + height: 100%; +} +table { + border: 0px; + border-collapse: collapse; + border-spacing: 0px; + display: table; +} +table td { + padding: 0px; +} +.cell { + color: black; +} diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.html new file mode 100644 index 0000000..166665d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.js new file mode 100644 index 0000000..1d16859 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen.js @@ -0,0 +1,7 @@ +function toColor(num) { + num >>>= 0; + var b = num & 0xFF, + g = (num & 0xFF00) >>> 8, + r = (num & 0xFF0000) >>> 16; + return "rgb(" + [r, g, b].join(",") + ")"; +} \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html new file mode 100644 index 0000000..35b03ae --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html @@ -0,0 +1,72 @@ + + +screen frame1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html new file mode 100644 index 0000000..e6e17e6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html @@ -0,0 +1,72 @@ + + +screen frame2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html new file mode 100644 index 0000000..46852dc --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html @@ -0,0 +1,11 @@ + + + screen test + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html new file mode 100644 index 0000000..ae3ea1e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html @@ -0,0 +1,12 @@ + + +Screen test + + +
      + + + +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html new file mode 100644 index 0000000..4d00f02 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html @@ -0,0 +1,68 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html new file mode 100644 index 0000000..1a6a100 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html new file mode 100644 index 0000000..3fee005 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html new file mode 100644 index 0000000..31733e0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html new file mode 100644 index 0000000..dbef936 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html @@ -0,0 +1,72 @@ + + +screen test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
           
           
           
           
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll.html new file mode 100644 index 0000000..cd5214f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll.html @@ -0,0 +1,27 @@ + + + + + +
      +
        +
      • line1
      • +
      • line2
      • +
      • line3
      • +
      • line4
      • +
      • line5
      • +
      • line6
      • +
      • line7
      • +
      • line8
      • +
      • line9
      • +
      +
      +Clicked: +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll2.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll2.html new file mode 100644 index 0000000..0ea66d3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll2.html @@ -0,0 +1,21 @@ + + + + +
        +
      • +
      • +
      • Text
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll3.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll3.html new file mode 100644 index 0000000..1aa1709 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll3.html @@ -0,0 +1,8 @@ + + +



























































































































































      + +



      + +                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 +
























































































































































      \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll4.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll4.html new file mode 100644 index 0000000..652a778 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll4.html @@ -0,0 +1,7 @@ + + +


































































































      + +


































































































      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll5.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll5.html new file mode 100644 index 0000000..b345a8c --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scroll5.html @@ -0,0 +1,18 @@ + + + + + +
      +
      +
      +
      +
      +Clicked: +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html new file mode 100644 index 0000000..3eb3bf4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html @@ -0,0 +1,26 @@ + + + + Child frame + + +

      This is a scrolling frame test

      +
      + + + + + + + + + + + + + +
      First row
      Second row
      Third row
      Fourth row
      +
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html new file mode 100644 index 0000000..61ffe85 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html @@ -0,0 +1,26 @@ + + + + Child frame + + +

      This is a tall frame test

      +
      + + + + + + + + + + + + + +
      First row
      Second row
      Third row
      Fourth row
      +
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html new file mode 100644 index 0000000..1530138 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html new file mode 100644 index 0000000..5781aeb --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html @@ -0,0 +1,12 @@ + + + + Welcome Page + + +
      Placeholder
      +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html new file mode 100644 index 0000000..047de0f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html @@ -0,0 +1,10 @@ + + + + Child frame + + +

      This is a non-scrolling frame test

      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html new file mode 100644 index 0000000..01b7c30 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html @@ -0,0 +1,19 @@ + + + + Page with overflow: auto + + + +
      Placeholder
      +
      + Click me! +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html new file mode 100644 index 0000000..c536e41 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html @@ -0,0 +1,12 @@ + + + + Welcome Page + + +
      Placeholder
      +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html new file mode 100644 index 0000000..e5b7602 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html new file mode 100644 index 0000000..f79f7c8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html @@ -0,0 +1,12 @@ + + + + Welcome Page + + +
      Placeholder
      +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html new file mode 100644 index 0000000..0a493fa --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html new file mode 100644 index 0000000..cb5d53a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html new file mode 100644 index 0000000..5df1115 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html @@ -0,0 +1,12 @@ + + + + Welcome Page + + +
      Placeholder
      +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html new file mode 100644 index 0000000..b7cfaf5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html @@ -0,0 +1,11 @@ + + + + Welcome Page + + +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html new file mode 100644 index 0000000..b5716e7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html @@ -0,0 +1,14 @@ + + + + Page with overflow: auto + + +
      +
      Placeholder
      +
      + Click me! +
      +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html new file mode 100644 index 0000000..0457a82 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html @@ -0,0 +1,9 @@ + + + +Clicked Successfully! + + +

      Clicked Successfully!

      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/selectPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/selectPage.html new file mode 100644 index 0000000..4028414 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/selectPage.html @@ -0,0 +1,58 @@ + + + + +Multiple Selection test page + + + + + + + + + + + + + + + + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/selectableItems.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/selectableItems.html new file mode 100644 index 0000000..190b2ad --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/selectableItems.html @@ -0,0 +1,65 @@ + + + + + jQuery UI Selectable - Default functionality + + + + + + + + +
      + +
        +
      1. Item 1
      2. +
      3. Item 2
      4. +
      5. Item 3
      6. +
      7. Item 4
      8. +
      9. Item 5
      10. +
      11. Item 6
      12. +
      13. Item 7
      14. +
      + +
      + +
      + +

      Enable a DOM element (or group of elements) to be selectable. Draw a box with your cursor to select items. Hold down the Ctrl key to make multiple non-adjacent selections.

      + + + +
      +

      no info

      +
      + + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/sessionCookie.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/sessionCookie.html new file mode 100644 index 0000000..0ada24e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/sessionCookie.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html new file mode 100644 index 0000000..f5e2ef2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html @@ -0,0 +1,34 @@ + + + + + Session cookie destination + + + +This is the cookie destination page. + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/simple.xml b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/simple.xml new file mode 100644 index 0000000..01f4c87 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/simple.xml @@ -0,0 +1,5 @@ + + + baz + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/simpleTest.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/simpleTest.html new file mode 100644 index 0000000..38210b9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/simpleTest.html @@ -0,0 +1,98 @@ + + + Hello WebDriver + + +

      Heading

      + +

      A single line of text

      + + +
      +

      A div containing

      + More than one line of text
      + +
      and block level elements
      +
      + +An inline element + +

      This line has lots + + of spaces. +

      + +

      This line has a non-breaking space

      + +

      This line has a   non-breaking space and spaces

      + +

      These lines  
        have leading and trailing NBSPs  

      + +

      This line has text within elements that are meant to be displayed + inline

      + +
      +

      before pre

      +
         This section has a preformatted
      +    text block    
      +  split in four lines
      +         
      +

      after pre

      +
      + +

      Some text

      Some more text

      + +
      Cheese

      Some text

      Some more text

      and also

      Brie
      + +
      Hello, world
      + +
      + +
      + +
      +

      + + +

      +
      + + + + + +
      Top level
      +
      +
      Nested
      +
      + + + + + +
      beforeSpace afterSpace
      + + + + + +a link to an icon + +{a="b", c=1, d=true} +{a="\\b\\\"'\'"} + +  â€â€‚        ​‌â€â€¯âŸâ ã€€test  â€â€‚        ​‌â€â€¯âŸâ ã€€ + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html new file mode 100644 index 0000000..a6216e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html @@ -0,0 +1,10 @@ + + + +slowLoadingAlert + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html new file mode 100644 index 0000000..02796c3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html @@ -0,0 +1,12 @@ + + + This page loads something slowly + + +

      Simulate the situation where a web-bug or analytics script takes waaay + too long to respond. Normally these things are loaded in an iframe, which is + what we're doing here.

      + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html new file mode 100644 index 0000000..d007248 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html @@ -0,0 +1,14 @@ + + + + Page with slow loading iFrames + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/styledPage.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/styledPage.html new file mode 100644 index 0000000..30810f0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/styledPage.html @@ -0,0 +1,28 @@ + + + + Styled Page + + + + +
      + +
      + + +
      + +
      + +
      Content
      + + + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml new file mode 100644 index 0000000..bf060fd --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml @@ -0,0 +1,81 @@ + + + + + Pie Chart Test + + + +
      + Some text for the chart. +
      +
      Nothing.
      +
      + + + + + Test Chart + + + Apple + + Orange + + Banana + + Orange + + + + + + + + Example RotateScale - Rotate and scale transforms + + + + + + + + + + + + + + ABC (rotate) + + + + + + + + + + + + ABC (scale) + + + + +
      WOrange
      +
      +
      WOrange
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/svgTest.svg b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/svgTest.svg new file mode 100644 index 0000000..c6cc283 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/svgTest.svg @@ -0,0 +1,4 @@ + + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/tables.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/tables.html new file mode 100644 index 0000000..a2bc957 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/tables.html @@ -0,0 +1,36 @@ + + + + Here be tables + + + + + + + + + +
      HelloWorld(Cheese!)
      + + + + + +
      some text +
      some more text
      +
      + + + + + + + + + +
      Heading
      Data 1Data 2
      + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/tinymce.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/tinymce.html new file mode 100644 index 0000000..067b66c --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/tinymce.html @@ -0,0 +1,10 @@ + + + + TinyMCE + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transformable.xml b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transformable.xml new file mode 100644 index 0000000..0b7e7fd --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transformable.xml @@ -0,0 +1,11 @@ + + + ]> + + +

      Click the button.

      + + Go to another page + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transformable.xsl b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transformable.xsl new file mode 100644 index 0000000..53db9fd --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transformable.xsl @@ -0,0 +1,37 @@ + + + + + + + +
      + + + + + +
      + + + + + + + + + + + + + + + +
      \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transparentUpload.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transparentUpload.html new file mode 100644 index 0000000..87b02bf --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/transparentUpload.html @@ -0,0 +1,70 @@ + + + + Upload Form + + + + +
      +
      +
      + Upload + +
      +
      +
      + + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/underscore.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/underscore.html new file mode 100644 index 0000000..904a444 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/underscore.html @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html new file mode 100644 index 0000000..245acc7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html @@ -0,0 +1,8 @@ + + + + + +
      ‎Some notes‎
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/upload.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/upload.html new file mode 100644 index 0000000..aca398a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/upload.html @@ -0,0 +1,45 @@ + + + + Upload Form + + + +
      +
      + Enter a file to upload: +
      +
      +
      + + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html new file mode 100644 index 0000000..2453e69 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html @@ -0,0 +1,8 @@ + + +
      + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html new file mode 100644 index 0000000..54a2aba --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html @@ -0,0 +1,81 @@ + + + + Rectangles + + + + +
      +
      First Target
      +
      Second Target
      +
      Third Target
      +
      Fourth Target
      +
      Not a Target
      +
      Not a Target
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/visibility-css.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/visibility-css.html new file mode 100644 index 0000000..80cc649 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/visibility-css.html @@ -0,0 +1,21 @@ + + + + +Visibility test via CSS + +
      +

      Hello world. I like cheese.

      +
      + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/win32frameset.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/win32frameset.html new file mode 100644 index 0000000..108b80f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/win32frameset.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html new file mode 100644 index 0000000..b94733b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html @@ -0,0 +1,12 @@ + + + + Test page for WindowSwitchingTest.testShouldFocusOnTheTopMostFrameAfterSwitchingToAWindow + + +

      Open new window

      +
      + +
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html new file mode 100644 index 0000000..52c163c --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html @@ -0,0 +1,9 @@ + + + + Simple Page + + +
      Simple page with simple test.
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml new file mode 100644 index 0000000..aca53d3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml @@ -0,0 +1,17 @@ + + + + XHTML + + + +
      + + +
      + +

      Here is some content that should not be in the previous p tag + + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html new file mode 100644 index 0000000..d2f3a5d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html @@ -0,0 +1,76 @@ + + + + XHTML Test Page + + +

      + + + +
      +

      XHTML Might Be The Future

      + +

      If you'd like to go elsewhere then click me.

      + +

      Alternatively, this goes to the same place.

      + +
      + +
      + + This link has the same text as another link: click me. +
      + +
      Another div starts here.

      +

      An H2 title

      +

      Some more text

      +
      + +
      + Foo +
        + +
      + +
      +
      +
      + + +
      +
      +
      + + I have width +
      +
      +
      +
      + + +

      +

      +
      Link=equalssign + +

      Spaced out

      + + +
      first_div
      +
      second_div
      + first_span + second_span +
      + +
      I'm a parent +
      I'm a child
      +
      + +
      Woo woo
      + + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/fileserver.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/fileserver.js new file mode 100644 index 0000000..448b0c9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/fileserver.js @@ -0,0 +1,319 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'), + http = require('http'), + path = require('path'), + url = require('url'); + +var express = require('express'); +var multer = require('multer'); +var serveIndex = require('serve-index'); + +var Server = require('./httpserver').Server, + resources = require('./resources'), + isDevMode = require('../devmode'), + promise = require('../promise'); + +var WEB_ROOT = '/common'; +var JS_ROOT = '/javascript'; + +var baseDirectory = resources.locate(isDevMode ? 'common/src/web' : '.'); +var jsDirectory = resources.locate(isDevMode ? 'javascript' : '..'); + +var Pages = (function() { + var pages = {}; + function addPage(page, path) { + pages.__defineGetter__(page, function() { + return exports.whereIs(path); + }); + } + + addPage('ajaxyPage', 'ajaxy_page.html'); + addPage('alertsPage', 'alerts.html'); + addPage('bodyTypingPage', 'bodyTypingTest.html'); + addPage('booleanAttributes', 'booleanAttributes.html'); + addPage('childPage', 'child/childPage.html'); + addPage('chinesePage', 'cn-test.html'); + addPage('clickJacker', 'click_jacker.html'); + addPage('clickEventPage', 'clickEventPage.html'); + addPage('clicksPage', 'clicks.html'); + addPage('colorPage', 'colorPage.html'); + addPage('deletingFrame', 'deletingFrame.htm'); + addPage('draggableLists', 'draggableLists.html'); + addPage('dragAndDropPage', 'dragAndDropTest.html'); + addPage('droppableItems', 'droppableItems.html'); + addPage('documentWrite', 'document_write_in_onload.html'); + addPage('dynamicallyModifiedPage', 'dynamicallyModifiedPage.html'); + addPage('dynamicPage', 'dynamic.html'); + addPage('echoPage', 'echo'); + addPage('errorsPage', 'errors.html'); + addPage('xhtmlFormPage', 'xhtmlFormPage.xhtml'); + addPage('formPage', 'formPage.html'); + addPage('formSelectionPage', 'formSelectionPage.html'); + addPage('framesetPage', 'frameset.html'); + addPage('grandchildPage', 'child/grandchild/grandchildPage.html'); + addPage('html5Page', 'html5Page.html'); + addPage('html5OfflinePage', 'html5/offline.html'); + addPage('iframePage', 'iframes.html'); + addPage('javascriptEnhancedForm', 'javascriptEnhancedForm.html'); + addPage('javascriptPage', 'javascriptPage.html'); + addPage('linkedImage', 'linked_image.html'); + addPage('longContentPage', 'longContentPage.html'); + addPage('macbethPage', 'macbeth.html'); + addPage('mapVisibilityPage', 'map_visibility.html'); + addPage('metaRedirectPage', 'meta-redirect.html'); + addPage('missedJsReferencePage', 'missedJsReference.html'); + addPage('mouseTrackerPage', 'mousePositionTracker.html'); + addPage('nestedPage', 'nestedElements.html'); + addPage('readOnlyPage', 'readOnlyPage.html'); + addPage('rectanglesPage', 'rectangles.html'); + addPage('redirectPage', 'redirect'); + addPage('resultPage', 'resultPage.html'); + addPage('richTextPage', 'rich_text.html'); + addPage('selectableItemsPage', 'selectableItems.html'); + addPage('selectPage', 'selectPage.html'); + addPage('simpleTestPage', 'simpleTest.html'); + addPage('simpleXmlDocument', 'simple.xml'); + addPage('sleepingPage', 'sleep'); + addPage('slowIframes', 'slow_loading_iframes.html'); + addPage('slowLoadingAlertPage', 'slowLoadingAlert.html'); + addPage('svgPage', 'svgPiechart.xhtml'); + addPage('tables', 'tables.html'); + addPage('underscorePage', 'underscore.html'); + addPage('unicodeLtrPage', 'utf8/unicode_ltr.html'); + addPage('uploadPage', 'upload.html'); + addPage('veryLargeCanvas', 'veryLargeCanvas.html'); + addPage('xhtmlTestPage', 'xhtmlTest.html'); + + return pages; +})(); + + +var Path = { + BASIC_AUTH: WEB_ROOT + '/basicAuth', + ECHO: WEB_ROOT + '/echo', + GENERATED: WEB_ROOT + '/generated', + MANIFEST: WEB_ROOT + '/manifest', + REDIRECT: WEB_ROOT + '/redirect', + PAGE: WEB_ROOT + '/page', + SLEEP: WEB_ROOT + '/sleep', + UPLOAD: WEB_ROOT + '/upload' +}; + +var app = express(); + +app.get('/', sendIndex) +.get('/favicon.ico', function(req, res) { + res.writeHead(204); + res.end(); +}) +.use(JS_ROOT, serveIndex(jsDirectory), express.static(jsDirectory)) +.post(Path.UPLOAD, handleUpload) +.use(WEB_ROOT, serveIndex(baseDirectory), express.static(baseDirectory)) +.get(Path.ECHO, sendEcho) +.get(Path.PAGE, sendInifinitePage) +.get(Path.PAGE + '/*', sendInifinitePage) +.get(Path.REDIRECT, redirectToResultPage) +.get(Path.SLEEP, sendDelayedResponse) + +if (isDevMode) { + var closureDir = resources.locate('third_party/closure/goog'); + app.use('/third_party/closure/goog', + serveIndex(closureDir), express.static(closureDir)); +} +var server = new Server(app); + + +function redirectToResultPage(_, response) { + response.writeHead(303, { + Location: Pages.resultPage + }); + return response.end(); +} + + +function sendInifinitePage(request, response) { + var pathname = url.parse(request.url).pathname; + var lastIndex = pathname.lastIndexOf('/'); + var pageNumber = + (lastIndex == -1 ? 'Unknown' : pathname.substring(lastIndex + 1)); + var body = [ + '', + 'Page', pageNumber, '', + 'Page number ', pageNumber, '', + '

      top' + ].join(''); + response.writeHead(200, { + 'Content-Length': Buffer.byteLength(body, 'utf8'), + 'Content-Type': 'text/html; charset=utf-8' + }); + response.end(body); +} + + +function sendDelayedResponse(request, response) { + var duration = 0; + var query = url.parse(request.url).query || ''; + var match = query.match(/\btime=(\d+)/); + if (match) { + duration = parseInt(match[1], 10); + } + + setTimeout(function() { + var body = [ + '', + 'Done', + 'Slept for ', duration, 's' + ].join(''); + response.writeHead(200, { + 'Content-Length': Buffer.byteLength(body, 'utf8'), + 'Content-Type': 'text/html; charset=utf-8', + 'Cache-Control': 'no-cache', + 'Pragma': 'no-cache', + 'Expires': 0 + }); + response.end(body); + }, duration * 1000); +} + + +function handleUpload(request, response, next) { + multer({ + inMemory: true, + onFileUploadComplete: function(file) { + response.writeHead(200); + response.write(file.buffer); + response.end(''); + } + })(request, response, function() {}); +} + + +function sendEcho(request, response) { + var body = [ + '', + 'Echo', + '

      ', + request.method, ' ', request.url, ' ', 'HTTP/', request.httpVersion, + '
      ' + ]; + for (var name in request.headers) { + body.push('
      ', + name, ': ', request.headers[name], '
      '); + } + body = body.join(''); + response.writeHead(200, { + 'Content-Length': Buffer.byteLength(body, 'utf8'), + 'Content-Type': 'text/html; charset=utf-8' + }); + response.end(body); +} + + +/** + * Responds to a request for the file server's main index. + * @param {!http.ServerRequest} request The request object. + * @param {!http.ServerResponse} response The response object. + */ +function sendIndex(request, response) { + var pathname = url.parse(request.url).pathname; + + var host = request.headers.host; + if (!host) { + host = server.host(); + } + + var requestUrl = ['http://' + host + pathname].join(''); + + function createListEntry(path) { + var url = requestUrl + path; + return ['
    5. ', path, ''].join(''); + } + + var data = ['

      /


        ', + createListEntry('common')]; + if (isDevMode) { + data.push(createListEntry('javascript')); + } + data.push('
      '); + data = data.join(''); + + response.writeHead(200, { + 'Content-Type': 'text/html; charset=UTF-8', + 'Content-Length': Buffer.byteLength(data, 'utf8') + }); + response.end(data); +} + + +// PUBLIC application + + +/** + * Starts the server on the specified port. + * @param {number=} opt_port The port to use, or 0 for any free port. + * @return {!webdriver.promise.Promise.} A promise that will resolve + * with the server host when it has fully started. + */ +exports.start = server.start.bind(server); + + +/** + * Stops the server. + * @return {!webdriver.promise.Promise} A promise that will resolve when the + * server has closed all connections. + */ +exports.stop = server.stop.bind(server); + + +/** + * Formats a URL for this server. + * @param {string=} opt_pathname The desired pathname on the server. + * @return {string} The formatted URL. + * @throws {Error} If the server is not running. + */ +exports.url = server.url.bind(server); + + +/** + * Builds the URL for a file in the //common/src/web directory of the + * Selenium client. + * @param {string} filePath A path relative to //common/src/web to compute a + * URL for. + * @return {string} The formatted URL. + * @throws {Error} If the server is not running. + */ +exports.whereIs = function(filePath) { + filePath = filePath.replace(/\\/g, '/'); + if (!filePath.startsWith('/')) { + filePath = '/' + filePath; + } + return server.url(WEB_ROOT + filePath); +}; + + +exports.Pages = Pages; + + +if (require.main === module) { + server.start(2310).then(function() { + console.log('Server running at ' + server.url()); + }); +} diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/httpserver.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/httpserver.js new file mode 100644 index 0000000..55b1255 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/httpserver.js @@ -0,0 +1,122 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + http = require('http'), + url = require('url'); + +var net = require('../../net'), + portprober = require('../../net/portprober'), + promise = require('../..').promise; + + + +/** + * Encapsulates a simple HTTP server for testing. The {@code onrequest} + * function should be overridden to define request handling behavior. + * @param {function(!http.ServerRequest, !http.ServerResponse)} requestHandler + * The request handler for the server. + * @constructor + */ +var Server = function(requestHandler) { + var server = http.createServer(function(req, res) { + requestHandler(req, res); + }); + + server.on('connection', function(stream) { + stream.setTimeout(4000); + }); + + /** @typedef {{port: number, address: string, family: string}} */ + var Host; + + /** + * Starts the server on the given port. If no port, or 0, is provided, + * the server will be started on a random port. + * @param {number=} opt_port The port to start on. + * @return {!webdriver.promise.Promise.} A promise that will resolve + * with the server host when it has fully started. + */ + this.start = function(opt_port) { + assert(typeof opt_port !== 'function', + "start invoked with function, not port (mocha callback)?"); + var port = opt_port || portprober.findFreePort('localhost'); + return promise.when(port, function(port) { + return promise.checkedNodeCall( + server.listen.bind(server, port, 'localhost')); + }).then(function() { + return server.address(); + }); + }; + + /** + * Stops the server. + * @return {!webdriver.promise.Promise} A promise that will resolve when the + * server has closed all connections. + */ + this.stop = function() { + var d = promise.defer(); + server.close(d.fulfill); + return d.promise; + }; + + /** + * @return {Host} This server's host info. + * @throws {Error} If the server is not running. + */ + this.address = function() { + var addr = server.address(); + if (!addr) { + throw Error('There server is not running!'); + } + return addr; + }; + + /** + * return {string} The host:port of this server. + * @throws {Error} If the server is not running. + */ + this.host = function() { + return net.getLoopbackAddress() + ':' + + this.address().port; + }; + + /** + * Formats a URL for this server. + * @param {string=} opt_pathname The desired pathname on the server. + * @return {string} The formatted URL. + * @throws {Error} If the server is not running. + */ + this.url = function(opt_pathname) { + var addr = this.address(); + var pathname = opt_pathname || ''; + return url.format({ + protocol: 'http', + hostname: net.getLoopbackAddress(), + port: addr.port, + pathname: pathname + }); + }; +}; + + +// PUBLIC API + + +exports.Server = Server; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/index.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/index.js new file mode 100644 index 0000000..8f576a8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/index.js @@ -0,0 +1,262 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); + +var build = require('./build'), + isDevMode = require('../devmode'), + webdriver = require('../../'), + flow = webdriver.promise.controlFlow(), + remote = require('../../remote'), + testing = require('../../testing'), + fileserver = require('./fileserver'); + + +/** + * Browsers with native support. + * @type {!Array.} + */ +var NATIVE_BROWSERS = [ + webdriver.Browser.CHROME, + webdriver.Browser.EDGE, + webdriver.Browser.FIREFOX, + webdriver.Browser.IE, + webdriver.Browser.OPERA, + webdriver.Browser.PHANTOM_JS, + webdriver.Browser.SAFARI +]; + + +var serverJar = process.env['SELENIUM_SERVER_JAR']; +var remoteUrl = process.env['SELENIUM_REMOTE_URL']; +var useLoopback = process.env['SELENIUM_USE_LOOP_BACK'] == '1'; +var startServer = !!serverJar && !remoteUrl; +var nativeRun = !serverJar && !remoteUrl; + + +var browsersToTest = (function() { + var permitRemoteBrowsers = !!remoteUrl || !!serverJar; + var permitUnknownBrowsers = !nativeRun; + var browsers = process.env['SELENIUM_BROWSER'] || webdriver.Browser.FIREFOX; + + browsers = browsers.split(',').map(function(browser) { + var parts = browser.split(/:/); + if (parts[0] === 'ie') { + parts[0] = webdriver.Browser.IE; + } + if (parts[0] === 'edge') { + parts[0] = webdriver.Browser.EDGE; + } + return parts.join(':'); + }); + browsers.forEach(function(browser) { + var parts = browser.split(/:/, 3); + if (parts[0] === 'ie') { + parts[0] = webdriver.Browser.IE; + } + + if (NATIVE_BROWSERS.indexOf(parts[0]) == -1 && !permitRemoteBrowsers) { + throw Error('Browser ' + parts[0] + ' requires a WebDriver server and ' + + 'neither the SELENIUM_REMOTE_URL nor the SELENIUM_SERVER_JAR ' + + 'environment variables have been set.'); + } + + var recognized = false; + for (var prop in webdriver.Browser) { + if (webdriver.Browser.hasOwnProperty(prop) && + webdriver.Browser[prop] === parts[0]) { + recognized = true; + break; + } + } + + if (!recognized && !permitUnknownBrowsers) { + throw Error('Unrecognized browser: ' + browser); + } + }); + + console.log('Running tests against [' + browsers.join(',') + ']'); + if (remoteUrl) { + console.log('Using remote server ' + remoteUrl); + } else if (serverJar) { + console.log('Using standalone Selenium server ' + serverJar); + if (useLoopback) { + console.log('Running tests using loopback address') + } + } + + return browsers; +})(); + + +/** + * Creates a predicate function that ignores tests for specific browsers. + * @param {string} currentBrowser The name of the current browser. + * @param {!Array.} browsersToIgnore The browsers to ignore. + * @return {function(): boolean} The predicate function. + */ +function browsers(currentBrowser, browsersToIgnore) { + return function() { + return browsersToIgnore.indexOf(currentBrowser) != -1; + }; +} + + +/** + * @param {string} browserName The name to use. + * @param {remote.DriverService} server The server to use, if any. + * @constructor + */ +function TestEnvironment(browserName, server) { + var name = browserName; + + this.currentBrowser = function() { + return browserName; + }; + + this.isRemote = function() { + return server || remoteUrl; + }; + + this.browsers = function(var_args) { + var browsersToIgnore = Array.prototype.slice.apply(arguments, [0]); + return browsers(browserName, browsersToIgnore); + }; + + this.builder = function() { + var builder = new webdriver.Builder(); + var realBuild = builder.build; + + builder.build = function() { + var parts = browserName.split(/:/, 3); + builder.forBrowser(parts[0], parts[1], parts[2]); + if (server) { + builder.usingServer(server.address()); + } else if (remoteUrl) { + builder.usingServer(remoteUrl); + } + builder.disableEnvironmentOverrides(); + return realBuild.call(builder); + }; + + return builder; + }; +} + + +var seleniumServer; +var inSuite = false; + + +/** + * Expands a function to cover each of the target browsers. + * @param {function(!TestEnvironment)} fn The top level suite + * function. + * @param {{browsers: !Array.}=} opt_options Suite specific options. + */ +function suite(fn, opt_options) { + assert.ok(!inSuite, 'You may not nest suite calls'); + inSuite = true; + + var suiteOptions = opt_options || {}; + var browsers = suiteOptions.browsers; + if (browsers) { + // Filter out browser specific tests when that browser is not currently + // selected for testing. + browsers = browsers.filter(function(browser) { + return browsersToTest.indexOf(browser) != -1; + }); + } else { + browsers = browsersToTest; + } + + try { + + // Server is only started if required for a specific config. + testing.after(function() { + if (seleniumServer) { + return seleniumServer.stop(); + } + }); + + browsers.forEach(function(browser) { + testing.describe('[' + browser + ']', function() { + + if (isDevMode && nativeRun) { + if (browser === webdriver.Browser.FIREFOX) { + testing.before(function() { + return build.of('//javascript/firefox-driver:webdriver') + .onlyOnce().go(); + }); + } else if (browser === webdriver.Browser.SAFARI) { + testing.before(function() { + return build.of('//javascript/safari-driver:client') + .onlyOnce().go(); + }); + } + } + + var serverToUse = null; + + if (!!serverJar && !remoteUrl) { + if (!(serverToUse = seleniumServer)) { + serverToUse = seleniumServer = new remote.SeleniumServer( + serverJar, {loopback: useLoopback}); + } + + testing.before(function() { + this.timeout(0); + return seleniumServer.start(60 * 1000); + }); + } + fn(new TestEnvironment(browser, serverToUse)); + }); + }); + } finally { + inSuite = false; + } +} + + +// GLOBAL TEST SETUP + +testing.before(function() { + // Do not pass register fileserver.start directly with testing.before, + // as start takes an optional port, which before assumes is an async + // callback. + return fileserver.start(); +}); + +testing.after(function() { + return fileserver.stop(); +}); + +// PUBLIC API + + +exports.suite = suite; +exports.after = testing.after; +exports.afterEach = testing.afterEach; +exports.before = testing.before; +exports.beforeEach = testing.beforeEach; +exports.it = testing.it; +exports.ignore = testing.ignore; + +exports.Pages = fileserver.Pages; +exports.whereIs = fileserver.whereIs; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/resources.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/resources.js new file mode 100644 index 0000000..8e9cceb --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/test/resources.js @@ -0,0 +1,44 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'), + path = require('path'); + +var resourceRoot = require('../devmode') ? + require('./build').projectRoot() : + path.join(__dirname, 'data'); + + +// PUBLIC API + + +/** + * Locates a test resource. + * @param {string} resourcePath Path of the resource to locate. + * @param {string} filePath The file to locate from the root of the project. + * @return {string} The full path for the file, if it exists. + * @throws {Error} If the file does not exist. + */ +exports.locate = function(filePath) { + var fullPath = path.normalize(path.join(resourceRoot, filePath)); + if (!fs.existsSync(fullPath)) { + throw Error('File does not exist: ' + filePath); + } + return fullPath; +}; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/until.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/until.js new file mode 100644 index 0000000..8b6e83d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/until.js @@ -0,0 +1,428 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines common conditions for use with + * {@link webdriver.WebDriver#wait WebDriver wait}. + * + * Sample usage: + * + * driver.get('http://www.google.com/ncr'); + * + * var query = driver.wait(until.elementLocated(By.name('q'))); + * query.sendKeys('webdriver\n'); + * + * driver.wait(until.titleIs('webdriver - Google Search')); + * + * To define a custom condition, simply call WebDriver.wait with a function + * that will eventually return a truthy-value (neither null, undefined, false, + * 0, or the empty string): + * + * driver.wait(function() { + * return driver.getTitle().then(function(title) { + * return title === 'webdriver - Google Search'; + * }); + * }, 1000); + */ + +'use strict'; + +const by = require('./by'); +const By = require('./by').By; +const error = require('../error'); + + +/** + * Defines a condition for use with WebDriver's + * {@linkplain ./webdriver.WebDriver#wait wait command}. + * + * @template OUT + */ +class Condition { + /** + * @param {string} message A descriptive error message. Should complete the + * sentence "Waiting [...]" + * @param {function(!./webdriver.WebDriver): OUT} fn The condition function to + * evaluate on each iteration of the wait loop. + */ + constructor(message, fn) { + /** @private {string} */ + this.description_ = 'Waiting ' + message; + + /** @type {function(!./webdriver.WebDriver): OUT} */ + this.fn = fn; + } + + /** @return {string} A description of this condition. */ + description() { + return this.description_; + } +} + +/** + * @typedef {!(./webdriver.WebElement| + * ./promise.Promise)} + */ +var ElementConditionResult; + + +/** + * Defines a condition that will result in a + * {@link ./webdriver.WebElement WebElement}. + * + * @extends {Condition} + */ +class WebElementCondition extends Condition { + /** + * @param {string} message A descriptive error message. Should complete the + * sentence "Waiting [...]" + * @param {function(!./webdriver.WebDriver): ElementConditionResult} fn The + * condition function to evaluate on each iteration of the wait loop. + */ + constructor(message, fn) { + super(message, fn); + } +} + + +// PUBLIC API + + +exports.Condition = Condition; +exports.WebElementCondition = WebElementCondition; + + +/** + * Creates a condition that will wait until the input driver is able to switch + * to the designated frame. The target frame may be specified as + * + * 1. a numeric index into + * [window.frames](https://developer.mozilla.org/en-US/docs/Web/API/Window.frames) + * for the currently selected frame. + * 2. a {@link ./webdriver.WebElement}, which must reference a FRAME or IFRAME + * element on the current page. + * 3. a locator which may be used to first locate a FRAME or IFRAME on the + * current page before attempting to switch to it. + * + * Upon successful resolution of this condition, the driver will be left + * focused on the new frame. + * + * @param {!(number|./webdriver.WebElement|By| + * function(!./webdriver.WebDriver): !./webdriver.WebElement)} frame + * The frame identifier. + * @return {!Condition} A new condition. + */ +exports.ableToSwitchToFrame = function ableToSwitchToFrame(frame) { + // Not at top-level to avoid circular dependency. + const webdriver = require('./webdriver'); + + var condition; + if (typeof frame === 'number' || frame instanceof webdriver.WebElement) { + condition = attemptToSwitchFrames; + } else { + condition = function(driver) { + let locator = /** @type {!(By|Function)} */(frame); + return driver.findElements(locator).then(function(els) { + if (els.length) { + return attemptToSwitchFrames(driver, els[0]); + } + }); + }; + } + + return new Condition('to be able to switch to frame', condition); + + function attemptToSwitchFrames(driver, frame) { + return driver.switchTo().frame(frame).then( + function() { return true; }, + function(e) { + if (!(e instanceof error.NoSuchFrameError)) { + throw e; + } + }); + } +}; + + +/** + * Creates a condition that waits for an alert to be opened. Upon success, the + * returned promise will be fulfilled with the handle for the opened alert. + * + * @return {!Condition} The new condition. + */ +exports.alertIsPresent = function alertIsPresent() { + return new Condition('for alert to be present', function(driver) { + return driver.switchTo().alert().thenCatch(function(e) { + if (!(e instanceof error.NoSuchAlertError)) { + throw e; + } + }); + }); +}; + + +/** + * Creates a condition that will wait for the current page's title to match the + * given value. + * + * @param {string} title The expected page title. + * @return {!Condition} The new condition. + */ +exports.titleIs = function titleIs(title) { + return new Condition( + 'for title to be ' + JSON.stringify(title), + function(driver) { + return driver.getTitle().then(function(t) { + return t === title; + }); + }); +}; + + +/** + * Creates a condition that will wait for the current page's title to contain + * the given substring. + * + * @param {string} substr The substring that should be present in the page + * title. + * @return {!Condition} The new condition. + */ +exports.titleContains = function titleContains(substr) { + return new Condition( + 'for title to contain ' + JSON.stringify(substr), + function(driver) { + return driver.getTitle().then(function(title) { + return title.indexOf(substr) !== -1; + }); + }); +}; + + +/** + * Creates a condition that will wait for the current page's title to match the + * given regular expression. + * + * @param {!RegExp} regex The regular expression to test against. + * @return {!Condition} The new condition. + */ +exports.titleMatches = function titleMatches(regex) { + return new Condition('for title to match ' + regex, function(driver) { + return driver.getTitle().then(function(title) { + return regex.test(title); + }); + }); +}; + + +/** + * Creates a condition that will loop until an element is + * {@link ./webdriver.WebDriver#findElement found} with the given locator. + * + * @param {!(By|Function)} locator The locator to use. + * @return {!WebElementCondition} The new condition. + */ +exports.elementLocated = function elementLocated(locator) { + locator = by.checkedLocator(locator); + let locatorStr = + typeof locator === 'function' ? 'by function()' : locator + ''; + return new WebElementCondition('for element to be located ' + locatorStr, + function(driver) { + return driver.findElements(locator).then(function(elements) { + return elements[0]; + }); + }); +}; + + +/** + * Creates a condition that will loop until at least one element is + * {@link ./webdriver.WebDriver#findElement found} with the given locator. + * + * @param {!(By|Function)} locator The locator to use. + * @return {!Condition>} The new + * condition. + */ +exports.elementsLocated = function elementsLocated(locator) { + locator = by.checkedLocator(locator); + let locatorStr = + typeof locator === 'function' ? 'by function()' : locator + ''; + return new Condition( + 'for at least one element to be located ' + locatorStr, + function(driver) { + return driver.findElements(locator).then(function(elements) { + return elements.length > 0 ? elements : null; + }); + }); +}; + + +/** + * Creates a condition that will wait for the given element to become stale. An + * element is considered stale once it is removed from the DOM, or a new page + * has loaded. + * + * @param {!./webdriver.WebElement} element The element that should become stale. + * @return {!Condition} The new condition. + */ +exports.stalenessOf = function stalenessOf(element) { + return new Condition('element to become stale', function() { + return element.getTagName().then( + function() { return false; }, + function(e) { + if (e instanceof error.StaleElementReferenceError) { + return true; + } + throw e; + }); + }); +}; + + +/** + * Creates a condition that will wait for the given element to become visible. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see ./webdriver.WebDriver#isDisplayed + */ +exports.elementIsVisible = function elementIsVisible(element) { + return new WebElementCondition('until element is visible', function() { + return element.isDisplayed().then(v => v ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be in the DOM, + * yet not visible to the user. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see ./webdriver.WebDriver#isDisplayed + */ +exports.elementIsNotVisible = function elementIsNotVisible(element) { + return new WebElementCondition('until element is not visible', function() { + return element.isDisplayed().then(v => v ? null : element); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be enabled. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#isEnabled + */ +exports.elementIsEnabled = function elementIsEnabled(element) { + return new WebElementCondition('until element is enabled', function() { + return element.isEnabled().then(v => v ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be disabled. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#isEnabled + */ +exports.elementIsDisabled = function elementIsDisabled(element) { + return new WebElementCondition('until element is disabled', function() { + return element.isEnabled().then(v => v ? null : element); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be selected. + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#isSelected + */ +exports.elementIsSelected = function elementIsSelected(element) { + return new WebElementCondition('until element is selected', function() { + return element.isSelected().then(v => v ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element to be deselected. + * + * @param {!./webdriver.WebElement} element The element to test. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#isSelected + */ +exports.elementIsNotSelected = function elementIsNotSelected(element) { + return new WebElementCondition('until element is not selected', function() { + return element.isSelected().then(v => v ? null : element); + }); +}; + + +/** + * Creates a condition that will wait for the given element's + * {@link webdriver.WebDriver#getText visible text} to match the given + * {@code text} exactly. + * + * @param {!./webdriver.WebElement} element The element to test. + * @param {string} text The expected text. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#getText + */ +exports.elementTextIs = function elementTextIs(element, text) { + return new WebElementCondition('until element text is', function() { + return element.getText().then(t => t === text ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element's + * {@link webdriver.WebDriver#getText visible text} to contain the given + * substring. + * + * @param {!./webdriver.WebElement} element The element to test. + * @param {string} substr The substring to search for. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#getText + */ +exports.elementTextContains = function elementTextContains(element, substr) { + return new WebElementCondition('until element text contains', function() { + return element.getText() + .then(t => t.indexOf(substr) != -1 ? element : null); + }); +}; + + +/** + * Creates a condition that will wait for the given element's + * {@link webdriver.WebDriver#getText visible text} to match a regular + * expression. + * + * @param {!./webdriver.WebElement} element The element to test. + * @param {!RegExp} regex The regular expression to test against. + * @return {!WebElementCondition} The new condition. + * @see webdriver.WebDriver#getText + */ +exports.elementTextMatches = function elementTextMatches(element, regex) { + return new WebElementCondition('until element text matches', function() { + return element.getText().then(t => regex.test(t) ? element : null); + }); +}; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/lib/webdriver.js b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/webdriver.js new file mode 100644 index 0000000..0adcbb0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/lib/webdriver.js @@ -0,0 +1,2351 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview The heart of the WebDriver JavaScript API. + */ + +'use strict'; + +const error = require('../error'); +const actions = require('./actions'); +const by = require('./by'); +const Capabilities = require('./capabilities').Capabilities; +const command = require('./command'); +const input = require('./input'); +const logging = require('./logging'); +const Session = require('./session').Session; +const Symbols = require('./symbols'); +const promise = require('./promise'); +const until = require('./until'); + + + +////////////////////////////////////////////////////////////////////////////// +// +// WebDriver +// +////////////////////////////////////////////////////////////////////////////// + + +/** + * Sends a command to the server that is expected to return the details for a + * {@link Session}. This may either be an existing session, or a newly created + * one. + * + * @param {!command.Executor} executor Command executor to use when + * querying for session details. + * @param {!command.Command} command The command to send to fetch the session + * details. + * @param {string} description A descriptive debug label for this action. + * @param {promise.ControlFlow=} opt_flow The control flow all driver + * commands should execute under. Defaults to the + * {@link promise.controlFlow() currently active} control flow. + * @return {!WebDriver} A new WebDriver client for the session. + */ +function acquireSession(executor, command, description, opt_flow) { + let flow = opt_flow || promise.controlFlow(); + let session = flow.execute(function() { + return executeCommand(executor, command).then(function(response) { + error.checkLegacyResponse(response); + return new Session(response['sessionId'], response['value']); + }); + }, description); + return new WebDriver(session, executor, flow); +} + + +/** + * Translates a command to its wire-protocol representation before passing it + * to the given `executor` for execution. + * @param {!command.Executor} executor The executor to use. + * @param {!command.Command} command The command to execute. + * @return {!promise.Promise} A promise that will resolve with the + * command response. + */ +function executeCommand(executor, command) { + return toWireValue(command.getParameters()). + then(function(parameters) { + command.setParameters(parameters); + return executor.execute(command); + }); +} + + +/** + * Converts an object to its JSON representation in the WebDriver wire protocol. + * When converting values of type object, the following steps will be taken: + *
        + *
      1. if the object is a WebElement, the return value will be the element's + * server ID + *
      2. if the object defines a {@link Symbols.serialize} method, this algorithm + * will be recursively applied to the object's serialized representation + *
      3. if the object provides a "toJSON" function, this algorithm will + * recursively be applied to the result of that function + *
      4. otherwise, the value of each key will be recursively converted according + * to the rules above. + *
      + * + * @param {*} obj The object to convert. + * @return {!promise.Promise} A promise that will resolve to the + * input value's JSON representation. + */ +function toWireValue(obj) { + if (promise.isPromise(obj)) { + return obj.then(toWireValue); + } + return promise.fulfilled(convertValue(obj)); +} + + +function convertValue(value) { + if (value === void 0 || value === null) { + return value; + } + + if (typeof value === 'boolean' + || typeof value === 'number' + || typeof value === 'string') { + return value; + } + + if (Array.isArray(value)) { + return convertKeys(value); + } + + if (typeof value === 'function') { + return '' + value; + } + + if (typeof value[Symbols.serialize] === 'function') { + return toWireValue(value[Symbols.serialize]()); + } else if (typeof value.toJSON === 'function') { + return toWireValue(value.toJSON()); + } + return convertKeys(value); +} + + +function convertKeys(obj) { + const isArray = Array.isArray(obj); + const numKeys = isArray ? obj.length : Object.keys(obj).length; + const ret = isArray ? new Array(numKeys) : {}; + if (!numKeys) { + return promise.fulfilled(ret); + } + + let numResolved = 0; + + function forEachKey(obj, fn) { + if (Array.isArray(obj)) { + for (let i = 0, n = obj.length; i < n; i++) { + fn(obj[i], i); + } + } else { + for (let key in obj) { + fn(obj[key], key); + } + } + } + + return new promise.Promise(function(done, reject) { + forEachKey(obj, function(value, key) { + if (promise.isPromise(value)) { + value.then(toWireValue).then(setValue, reject); + } else { + value = convertValue(value); + if (promise.isPromise(value)) { + value.then(toWireValue).then(setValue, reject); + } else { + setValue(value); + } + } + + function setValue(value) { + ret[key] = value; + maybeFulfill(); + } + }); + + function maybeFulfill() { + if (++numResolved === numKeys) { + done(ret); + } + } + }); +} + + +/** + * Converts a value from its JSON representation according to the WebDriver wire + * protocol. Any JSON object that defines a WebElement ID will be decoded to a + * {@link WebElement} object. All other values will be passed through as is. + * + * @param {!WebDriver} driver The driver to use as the parent of any unwrapped + * {@link WebElement} values. + * @param {*} value The value to convert. + * @return {*} The converted value. + */ +function fromWireValue(driver, value) { + if (Array.isArray(value)) { + value = value.map(v => fromWireValue(driver, v)); + } else if (WebElement.isId(value)) { + let id = WebElement.extractId(value); + value = new WebElement(driver, id); + } else if (value && typeof value === 'object') { + let result = {}; + for (let key in value) { + if (value.hasOwnProperty(key)) { + result[key] = fromWireValue(driver, value[key]); + } + } + value = result; + } + return value; +} + + +/** + * Creates a new WebDriver client, which provides control over a browser. + * + * Every command.Command returns a {@link promise.Promise} that + * represents the result of that command. Callbacks may be registered on this + * object to manipulate the command result or catch an expected error. Any + * commands scheduled with a callback are considered sub-commands and will + * execute before the next command in the current frame. For example: + * + * var message = []; + * driver.call(message.push, message, 'a').then(function() { + * driver.call(message.push, message, 'b'); + * }); + * driver.call(message.push, message, 'c'); + * driver.call(function() { + * alert('message is abc? ' + (message.join('') == 'abc')); + * }); + * + */ +class WebDriver { + /** + * @param {!(Session|promise.Promise)} session Either a + * known session or a promise that will be resolved to a session. + * @param {!command.Executor} executor The executor to use when sending + * commands to the browser. + * @param {promise.ControlFlow=} opt_flow The flow to + * schedule commands through. Defaults to the active flow object. + */ + constructor(session, executor, opt_flow) { + /** @private {!promise.Promise} */ + this.session_ = promise.fulfilled(session);; + + /** @private {!command.Executor} */ + this.executor_ = executor; + + /** @private {!promise.ControlFlow} */ + this.flow_ = opt_flow || promise.controlFlow(); + + /** @private {input.FileDetector} */ + this.fileDetector_ = null; + } + + /** + * Creates a new WebDriver client for an existing session. + * @param {!command.Executor} executor Command executor to use when querying + * for session details. + * @param {string} sessionId ID of the session to attach to. + * @param {promise.ControlFlow=} opt_flow The control flow all + * driver commands should execute under. Defaults to the + * {@link promise.controlFlow() currently active} control flow. + * @return {!WebDriver} A new client for the specified session. + */ + static attachToSession(executor, sessionId, opt_flow) { + return acquireSession(executor, + new command.Command(command.Name.DESCRIBE_SESSION). + setParameter('sessionId', sessionId), + 'WebDriver.attachToSession()', + opt_flow); + } + + /** + * Creates a new WebDriver session. + * @param {!command.Executor} executor The executor to create the new session + * with. + * @param {!./capabilities.Capabilities} desiredCapabilities The desired + * capabilities for the new session. + * @param {promise.ControlFlow=} opt_flow The control flow all driver + * commands should execute under, including the initial session creation. + * Defaults to the {@link promise.controlFlow() currently active} + * control flow. + * @return {!WebDriver} The driver for the newly created session. + */ + static createSession(executor, desiredCapabilities, opt_flow) { + return acquireSession(executor, + new command.Command(command.Name.NEW_SESSION). + setParameter('desiredCapabilities', desiredCapabilities), + 'WebDriver.createSession()', + opt_flow); + } + + /** + * @return {!promise.ControlFlow} The control flow used by this + * instance. + */ + controlFlow() { + return this.flow_; + } + + /** + * Schedules a {@link command.Command} to be executed by this driver's + * {@link command.Executor}. + * + * @param {!command.Command} command The command to schedule. + * @param {string} description A description of the command for debugging. + * @return {!promise.Promise} A promise that will be resolved + * with the command result. + * @template T + */ + schedule(command, description) { + var self = this; + + checkHasNotQuit(); + command.setParameter('sessionId', this.session_); + + // If any of the command parameters are rejected promises, those + // rejections may be reported as unhandled before the control flow + // attempts to execute the command. To ensure parameters errors + // propagate through the command itself, we resolve all of the + // command parameters now, but suppress any errors until the ControlFlow + // actually executes the command. This addresses scenarios like catching + // an element not found error in: + // + // driver.findElement(By.id('foo')).click().thenCatch(function(e) { + // if (e instanceof NoSuchElementError) { + // // Do something. + // } + // }); + var prepCommand = toWireValue(command.getParameters()); + prepCommand.thenCatch(function() {}); + + var flow = this.flow_; + var executor = this.executor_; + return flow.execute(function() { + // A call to WebDriver.quit() may have been scheduled in the same event + // loop as this |command|, which would prevent us from detecting that the + // driver has quit above. Therefore, we need to make another quick check. + // We still check above so we can fail as early as possible. + checkHasNotQuit(); + + // Retrieve resolved command parameters; any previously suppressed errors + // will now propagate up through the control flow as part of the command + // execution. + return prepCommand.then(function(parameters) { + command.setParameters(parameters); + return executor.execute(command); + }); + }, description).then(function(response) { + try { + error.checkLegacyResponse(response); + } catch (ex) { + if (ex instanceof error.UnexpectedAlertOpenError) { + let text = ''; + if (response['value'] + && response['value']['alert'] + && typeof response['value']['alert']['text'] === 'string') { + text = response['value']['alert']['text']; + } + throw new error.UnexpectedAlertOpenError(ex.message, text); + } + throw ex; + } + return fromWireValue(self, response['value']); + }); + + function checkHasNotQuit() { + if (!self.session_) { + throw new error.UnsupportedOperationError( + 'This driver instance does not have a valid session ID ' + + '(did you call WebDriver.quit()?) and may no longer be ' + + 'used.'); + } + } + } + + /** + * Sets the {@linkplain input.FileDetector file detector} that should be + * used with this instance. + * @param {input.FileDetector} detector The detector to use or {@code null}. + */ + setFileDetector(detector) { + this.fileDetector_ = detector; + } + + /** + * @return {!promise.Promise} A promise for this client's + * session. + */ + getSession() { + return this.session_; + } + + /** + * @return {!promise.Promise} A promise + * that will resolve with the this instance's capabilities. + */ + getCapabilities() { + return this.session_.then(session => session.getCapabilities()); + } + + /** + * Schedules a command to quit the current session. After calling quit, this + * instance will be invalidated and may no longer be used to issue commands + * against the browser. + * @return {!promise.Promise} A promise that will be resolved + * when the command has completed. + */ + quit() { + var result = this.schedule( + new command.Command(command.Name.QUIT), + 'WebDriver.quit()'); + // Delete our session ID when the quit command finishes; this will allow us to + // throw an error when attemnpting to use a driver post-quit. + return result.thenFinally(() => delete this.session_); + } + + /** + * Creates a new action sequence using this driver. The sequence will not be + * scheduled for execution until {@link actions.ActionSequence#perform} is + * called. Example: + * + * driver.actions(). + * mouseDown(element1). + * mouseMove(element2). + * mouseUp(). + * perform(); + * + * @return {!actions.ActionSequence} A new action sequence for this instance. + */ + actions() { + return new actions.ActionSequence(this); + } + + /** + * Creates a new touch sequence using this driver. The sequence will not be + * scheduled for execution until {@link actions.TouchSequence#perform} is + * called. Example: + * + * driver.touchActions(). + * tap(element1). + * doubleTap(element2). + * perform(); + * + * @return {!actions.TouchSequence} A new touch sequence for this instance. + */ + touchActions() { + return new actions.TouchSequence(this); + } + + /** + * Schedules a command to execute JavaScript in the context of the currently + * selected frame or window. The script fragment will be executed as the body + * of an anonymous function. If the script is provided as a function object, + * that function will be converted to a string for injection into the target + * window. + * + * Any arguments provided in addition to the script will be included as script + * arguments and may be referenced using the {@code arguments} object. + * Arguments may be a boolean, number, string, or {@linkplain WebElement}. + * Arrays and objects may also be used as script arguments as long as each item + * adheres to the types previously mentioned. + * + * The script may refer to any variables accessible from the current window. + * Furthermore, the script will execute in the window's context, thus + * {@code document} may be used to refer to the current document. Any local + * variables will not be available once the script has finished executing, + * though global variables will persist. + * + * If the script has a return value (i.e. if the script contains a return + * statement), then the following steps will be taken for resolving this + * functions return value: + * + * - For a HTML element, the value will resolve to a {@linkplain WebElement} + * - Null and undefined return values will resolve to null
    6. + * - Booleans, numbers, and strings will resolve as is + * - Functions will resolve to their string representation + * - For arrays and objects, each member item will be converted according to + * the rules above + * + * @param {!(string|Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {!promise.Promise} A promise that will resolve to the + * scripts return value. + * @template T + */ + executeScript(script, var_args) { + if (typeof script === 'function') { + script = 'return (' + script + ').apply(null, arguments);'; + } + let args = + arguments.length > 1 ? Array.prototype.slice.call(arguments, 1) : []; + return this.schedule( + new command.Command(command.Name.EXECUTE_SCRIPT). + setParameter('script', script). + setParameter('args', args), + 'WebDriver.executeScript()'); + } + + /** + * Schedules a command to execute asynchronous JavaScript in the context of the + * currently selected frame or window. The script fragment will be executed as + * the body of an anonymous function. If the script is provided as a function + * object, that function will be converted to a string for injection into the + * target window. + * + * Any arguments provided in addition to the script will be included as script + * arguments and may be referenced using the {@code arguments} object. + * Arguments may be a boolean, number, string, or {@code WebElement}. + * Arrays and objects may also be used as script arguments as long as each item + * adheres to the types previously mentioned. + * + * Unlike executing synchronous JavaScript with {@link #executeScript}, + * scripts executed with this function must explicitly signal they are finished + * by invoking the provided callback. This callback will always be injected + * into the executed function as the last argument, and thus may be referenced + * with {@code arguments[arguments.length - 1]}. The following steps will be + * taken for resolving this functions return value against the first argument + * to the script's callback function: + * + * - For a HTML element, the value will resolve to a + * {@link WebElement} + * - Null and undefined return values will resolve to null + * - Booleans, numbers, and strings will resolve as is + * - Functions will resolve to their string representation + * - For arrays and objects, each member item will be converted according to + * the rules above + * + * __Example #1:__ Performing a sleep that is synchronized with the currently + * selected window: + * + * var start = new Date().getTime(); + * driver.executeAsyncScript( + * 'window.setTimeout(arguments[arguments.length - 1], 500);'). + * then(function() { + * console.log( + * 'Elapsed time: ' + (new Date().getTime() - start) + ' ms'); + * }); + * + * __Example #2:__ Synchronizing a test with an AJAX application: + * + * var button = driver.findElement(By.id('compose-button')); + * button.click(); + * driver.executeAsyncScript( + * 'var callback = arguments[arguments.length - 1];' + + * 'mailClient.getComposeWindowWidget().onload(callback);'); + * driver.switchTo().frame('composeWidget'); + * driver.findElement(By.id('to')).sendKeys('dog@example.com'); + * + * __Example #3:__ Injecting a XMLHttpRequest and waiting for the result. In + * this example, the inject script is specified with a function literal. When + * using this format, the function is converted to a string for injection, so it + * should not reference any symbols not defined in the scope of the page under + * test. + * + * driver.executeAsyncScript(function() { + * var callback = arguments[arguments.length - 1]; + * var xhr = new XMLHttpRequest(); + * xhr.open("GET", "/resource/data.json", true); + * xhr.onreadystatechange = function() { + * if (xhr.readyState == 4) { + * callback(xhr.responseText); + * } + * }; + * xhr.send(''); + * }).then(function(str) { + * console.log(JSON.parse(str)['food']); + * }); + * + * @param {!(string|Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {!promise.Promise} A promise that will resolve to the + * scripts return value. + * @template T + */ + executeAsyncScript(script, var_args) { + if (typeof script === 'function') { + script = 'return (' + script + ').apply(null, arguments);'; + } + let args = Array.prototype.slice.call(arguments, 1); + return this.schedule( + new command.Command(command.Name.EXECUTE_ASYNC_SCRIPT). + setParameter('script', script). + setParameter('args', args), + 'WebDriver.executeScript()'); + } + + /** + * Schedules a command to execute a custom function. + * @param {function(...): (T|promise.Promise)} fn The function to + * execute. + * @param {Object=} opt_scope The object in whose scope to execute the function. + * @param {...*} var_args Any arguments to pass to the function. + * @return {!promise.Promise} A promise that will be resolved' + * with the function's result. + * @template T + */ + call(fn, opt_scope, var_args) { + let args = Array.prototype.slice.call(arguments, 2); + let flow = this.flow_; + return flow.execute(function() { + return promise.fullyResolved(args).then(function(args) { + if (promise.isGenerator(fn)) { + args.unshift(fn, opt_scope); + return promise.consume.apply(null, args); + } + return fn.apply(opt_scope, args); + }); + }, 'WebDriver.call(' + (fn.name || 'function') + ')'); + } + + /** + * Schedules a command to wait for a condition to hold. The condition may be + * specified by a {@link until.Condition}, as a custom function, or as any + * promise-like thenable. + * + * For a {@link until.Condition} or function, the wait will repeatedly + * evaluate the condition until it returns a truthy value. If any errors occur + * while evaluating the condition, they will be allowed to propagate. In the + * event a condition returns a {@link promise.Promise promise}, the polling + * loop will wait for it to be resolved and use the resolved value for whether + * the condition has been satisified. Note the resolution time for a promise + * is factored into whether a wait has timed out. + * + * Note, if the provided condition is a {@link until.WebElementCondition}, then + * the wait will return a {@link WebElementPromise} that will resolve to the + * element that satisified the condition. + * + * *Example:* waiting up to 10 seconds for an element to be present on the + * page. + * + * var button = driver.wait(until.elementLocated(By.id('foo')), 10000); + * button.click(); + * + * This function may also be used to block the command flow on the resolution + * of any thenable promise object. When given a promise, the command will + * simply wait for its resolution before completing. A timeout may be provided + * to fail the command if the promise does not resolve before the timeout + * expires. + * + * *Example:* Suppose you have a function, `startTestServer`, that returns a + * promise for when a server is ready for requests. You can block a WebDriver + * client on this promise with: + * + * var started = startTestServer(); + * driver.wait(started, 5 * 1000, 'Server should start within 5 seconds'); + * driver.get(getServerUrl()); + * + * @param {!(promise.Promise| + * until.Condition| + * function(!WebDriver): T)} condition The condition to + * wait on, defined as a promise, condition object, or a function to + * evaluate as a condition. + * @param {number=} opt_timeout How long to wait for the condition to be true. + * @param {string=} opt_message An optional message to use if the wait times + * out. + * @return {!(promise.Promise|WebElementPromise)} A promise that will be + * resolved with the first truthy value returned by the condition + * function, or rejected if the condition times out. If the input + * input condition is an instance of a {@link until.WebElementCondition}, + * the returned value will be a {@link WebElementPromise}. + * @template T + */ + wait(condition, opt_timeout, opt_message) { + if (promise.isPromise(condition)) { + return this.flow_.wait( + /** @type {!promise.Promise} */(condition), + opt_timeout, opt_message); + } + + var message = opt_message; + var fn = /** @type {!Function} */(condition); + if (condition instanceof until.Condition) { + message = message || condition.description(); + fn = condition.fn; + } + + var driver = this; + var result = this.flow_.wait(function() { + if (promise.isGenerator(fn)) { + return promise.consume(fn, null, [driver]); + } + return fn(driver); + }, opt_timeout, message); + + if (condition instanceof until.WebElementCondition) { + result = new WebElementPromise(this, result.then(function(value) { + if (!(value instanceof WebElement)) { + throw TypeError( + 'WebElementCondition did not resolve to a WebElement: ' + + Object.prototype.toString.call(value)); + } + return value; + })); + } + return result; + } + + /** + * Schedules a command to make the driver sleep for the given amount of time. + * @param {number} ms The amount of time, in milliseconds, to sleep. + * @return {!promise.Promise} A promise that will be resolved + * when the sleep has finished. + */ + sleep(ms) { + return this.flow_.timeout(ms, 'WebDriver.sleep(' + ms + ')'); + } + + /** + * Schedules a command to retrieve they current window handle. + * @return {!promise.Promise} A promise that will be + * resolved with the current window handle. + */ + getWindowHandle() { + return this.schedule( + new command.Command(command.Name.GET_CURRENT_WINDOW_HANDLE), + 'WebDriver.getWindowHandle()'); + } + + /** + * Schedules a command to retrieve the current list of available window handles. + * @return {!promise.Promise.>} A promise that will + * be resolved with an array of window handles. + */ + getAllWindowHandles() { + return this.schedule( + new command.Command(command.Name.GET_WINDOW_HANDLES), + 'WebDriver.getAllWindowHandles()'); + } + + /** + * Schedules a command to retrieve the current page's source. The page source + * returned is a representation of the underlying DOM: do not expect it to be + * formatted or escaped in the same way as the response sent from the web + * server. + * @return {!promise.Promise} A promise that will be + * resolved with the current page source. + */ + getPageSource() { + return this.schedule( + new command.Command(command.Name.GET_PAGE_SOURCE), + 'WebDriver.getPageSource()'); + } + + /** + * Schedules a command to close the current window. + * @return {!promise.Promise} A promise that will be resolved + * when this command has completed. + */ + close() { + return this.schedule(new command.Command(command.Name.CLOSE), + 'WebDriver.close()'); + } + + /** + * Schedules a command to navigate to the given URL. + * @param {string} url The fully qualified URL to open. + * @return {!promise.Promise} A promise that will be resolved + * when the document has finished loading. + */ + get(url) { + return this.navigate().to(url); + } + + /** + * Schedules a command to retrieve the URL of the current page. + * @return {!promise.Promise} A promise that will be + * resolved with the current URL. + */ + getCurrentUrl() { + return this.schedule( + new command.Command(command.Name.GET_CURRENT_URL), + 'WebDriver.getCurrentUrl()'); + } + + /** + * Schedules a command to retrieve the current page's title. + * @return {!promise.Promise} A promise that will be + * resolved with the current page's title. + */ + getTitle() { + return this.schedule(new command.Command(command.Name.GET_TITLE), + 'WebDriver.getTitle()'); + } + + /** + * Schedule a command to find an element on the page. If the element cannot be + * found, a {@link bot.ErrorCode.NO_SUCH_ELEMENT} result will be returned + * by the driver. Unlike other commands, this error cannot be suppressed. In + * other words, scheduling a command to find an element doubles as an assert + * that the element is present on the page. To test whether an element is + * present on the page, use {@link #isElementPresent} instead. + * + * The search criteria for an element may be defined using one of the + * factories in the {@link webdriver.By} namespace, or as a short-hand + * {@link webdriver.By.Hash} object. For example, the following two statements + * are equivalent: + * + * var e1 = driver.findElement(By.id('foo')); + * var e2 = driver.findElement({id:'foo'}); + * + * You may also provide a custom locator function, which takes as input this + * instance and returns a {@link WebElement}, or a promise that will resolve + * to a WebElement. If the returned promise resolves to an array of + * WebElements, WebDriver will use the first element. For example, to find the + * first visible link on a page, you could write: + * + * var link = driver.findElement(firstVisibleLink); + * + * function firstVisibleLink(driver) { + * var links = driver.findElements(By.tagName('a')); + * return promise.filter(links, function(link) { + * return link.isDisplayed(); + * }); + * } + * + * @param {!(by.By|Function)} locator The locator to use. + * @return {!WebElementPromise} A WebElement that can be used to issue + * commands against the located element. If the element is not found, the + * element will be invalidated and all scheduled commands aborted. + */ + findElement(locator) { + let id; + locator = by.checkedLocator(locator); + if (typeof locator === 'function') { + id = this.findElementInternal_(locator, this); + } else { + let cmd = new command.Command(command.Name.FIND_ELEMENT). + setParameter('using', locator.using). + setParameter('value', locator.value); + id = this.schedule(cmd, 'WebDriver.findElement(' + locator + ')'); + } + return new WebElementPromise(this, id); + } + + /** + * @param {!Function} locatorFn The locator function to use. + * @param {!(WebDriver|WebElement)} context The search + * context. + * @return {!promise.Promise.} A + * promise that will resolve to a list of WebElements. + * @private + */ + findElementInternal_(locatorFn, context) { + return this.call(() => locatorFn(context)).then(function(result) { + if (Array.isArray(result)) { + result = result[0]; + } + if (!(result instanceof WebElement)) { + throw new TypeError('Custom locator did not return a WebElement'); + } + return result; + }); + } + + /** + * Schedules a command to test if an element is present on the page. + * + * If given a DOM element, this function will check if it belongs to the + * document the driver is currently focused on. Otherwise, the function will + * test if at least one element can be found with the given search criteria. + * + * @param {!(by.By|Function)} locator The locator to use. + * @return {!promise.Promise} A promise that will resolve + * with whether the element is present on the page. + */ + isElementPresent(locator) { + return this.findElements.apply(this, arguments).then(function(result) { + return !!result.length; + }); + } + + /** + * Schedule a command to search for multiple elements on the page. + * + * @param {!(by.By|Function)} locator The locator to use. + * @return {!promise.Promise.>} A + * promise that will resolve to an array of WebElements. + */ + findElements(locator) { + locator = by.checkedLocator(locator); + if (typeof locator === 'function') { + return this.findElementsInternal_(locator, this); + } else { + let cmd = new command.Command(command.Name.FIND_ELEMENTS). + setParameter('using', locator.using). + setParameter('value', locator.value); + let res = this.schedule(cmd, 'WebDriver.findElements(' + locator + ')'); + return res.thenCatch(function(e) { + if (e instanceof error.NoSuchElementError) { + return []; + } + throw e; + }); + } + } + + /** + * @param {!Function} locatorFn The locator function to use. + * @param {!(WebDriver|WebElement)} context The search context. + * @return {!promise.Promise>} A promise that + * will resolve to an array of WebElements. + * @private + */ + findElementsInternal_(locatorFn, context) { + return this.call(() => locatorFn(context)).then(function(result) { + if (result instanceof WebElement) { + return [result]; + } + + if (!Array.isArray(result)) { + return []; + } + + return result.filter(function(item) { + return item instanceof WebElement; + }); + }); + } + + /** + * Schedule a command to take a screenshot. The driver makes a best effort to + * return a screenshot of the following, in order of preference: + * + * 1. Entire page + * 2. Current window + * 3. Visible portion of the current frame + * 4. The entire display containing the browser + * + * @return {!promise.Promise} A promise that will be + * resolved to the screenshot as a base-64 encoded PNG. + */ + takeScreenshot() { + return this.schedule(new command.Command(command.Name.SCREENSHOT), + 'WebDriver.takeScreenshot()'); + } + + /** + * @return {!Options} The options interface for this instance. + */ + manage() { + return new Options(this); + } + + /** + * @return {!Navigation} The navigation interface for this instance. + */ + navigate() { + return new Navigation(this); + } + + /** + * @return {!TargetLocator} The target locator interface for this + * instance. + */ + switchTo() { + return new TargetLocator(this); + } +} + + +/** + * Interface for navigating back and forth in the browser history. + * + * This class should never be instantiated directly. Insead, obtain an instance + * with + * + * webdriver.navigate() + * + * @see WebDriver#navigate() + */ +class Navigation { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Schedules a command to navigate to a new URL. + * @param {string} url The URL to navigate to. + * @return {!promise.Promise} A promise that will be resolved + * when the URL has been loaded. + */ + to(url) { + return this.driver_.schedule( + new command.Command(command.Name.GET). + setParameter('url', url), + 'WebDriver.navigate().to(' + url + ')'); + } + + /** + * Schedules a command to move backwards in the browser history. + * @return {!promise.Promise} A promise that will be resolved + * when the navigation event has completed. + */ + back() { + return this.driver_.schedule( + new command.Command(command.Name.GO_BACK), + 'WebDriver.navigate().back()'); + } + + /** + * Schedules a command to move forwards in the browser history. + * @return {!promise.Promise} A promise that will be resolved + * when the navigation event has completed. + */ + forward() { + return this.driver_.schedule( + new command.Command(command.Name.GO_FORWARD), + 'WebDriver.navigate().forward()'); + } + + /** + * Schedules a command to refresh the current page. + * @return {!promise.Promise} A promise that will be resolved + * when the navigation event has completed. + */ + refresh() { + return this.driver_.schedule( + new command.Command(command.Name.REFRESH), + 'WebDriver.navigate().refresh()'); + } +} + + +/** + * Provides methods for managing browser and driver state. + * + * This class should never be instantiated directly. Insead, obtain an instance + * with + * + * webdriver.manage() + * + * @see WebDriver#manage() + */ +class Options { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Schedules a command to add a cookie. + * @param {string} name The cookie name. + * @param {string} value The cookie value. + * @param {string=} opt_path The cookie path. + * @param {string=} opt_domain The cookie domain. + * @param {boolean=} opt_isSecure Whether the cookie is secure. + * @param {(number|!Date)=} opt_expiry When the cookie expires. If specified + * as a number, should be in milliseconds since midnight, + * January 1, 1970 UTC. + * @return {!promise.Promise} A promise that will be resolved + * when the cookie has been added to the page. + */ + addCookie(name, value, opt_path, opt_domain, opt_isSecure, opt_expiry) { + // We do not allow '=' or ';' in the name. + if (/[;=]/.test(name)) { + throw new error.InvalidArgumentError( + 'Invalid cookie name "' + name + '"'); + } + + // We do not allow ';' in value. + if (/;/.test(value)) { + throw new error.InvalidArgumentError( + 'Invalid cookie value "' + value + '"'); + } + + var cookieString = name + '=' + value + + (opt_domain ? ';domain=' + opt_domain : '') + + (opt_path ? ';path=' + opt_path : '') + + (opt_isSecure ? ';secure' : ''); + + var expiry; + if (opt_expiry !== void(0)) { + var expiryDate; + if (typeof opt_expiry === 'number') { + expiryDate = new Date(opt_expiry); + } else { + expiryDate = /** @type {!Date} */ (opt_expiry); + opt_expiry = expiryDate.getTime(); + } + cookieString += ';expires=' + expiryDate.toUTCString(); + // Convert from milliseconds to seconds. + expiry = Math.floor(/** @type {number} */ (opt_expiry) / 1000); + } + + return this.driver_.schedule( + new command.Command(command.Name.ADD_COOKIE). + setParameter('cookie', { + 'name': name, + 'value': value, + 'path': opt_path, + 'domain': opt_domain, + 'secure': !!opt_isSecure, + 'expiry': expiry + }), + 'WebDriver.manage().addCookie(' + cookieString + ')'); + } + + /** + * Schedules a command to delete all cookies visible to the current page. + * @return {!promise.Promise} A promise that will be resolved + * when all cookies have been deleted. + */ + deleteAllCookies() { + return this.driver_.schedule( + new command.Command(command.Name.DELETE_ALL_COOKIES), + 'WebDriver.manage().deleteAllCookies()'); + } + + /** + * Schedules a command to delete the cookie with the given name. This command is + * a no-op if there is no cookie with the given name visible to the current + * page. + * @param {string} name The name of the cookie to delete. + * @return {!promise.Promise} A promise that will be resolved + * when the cookie has been deleted. + */ + deleteCookie(name) { + return this.driver_.schedule( + new command.Command(command.Name.DELETE_COOKIE). + setParameter('name', name), + 'WebDriver.manage().deleteCookie(' + name + ')'); + } + + /** + * Schedules a command to retrieve all cookies visible to the current page. + * Each cookie will be returned as a JSON object as described by the WebDriver + * wire protocol. + * @return {!promise.Promise>} A + * promise that will be resolved with the cookies visible to the current page. + */ + getCookies() { + return this.driver_.schedule( + new command.Command(command.Name.GET_ALL_COOKIES), + 'WebDriver.manage().getCookies()'); + } + + /** + * Schedules a command to retrieve the cookie with the given name. Returns null + * if there is no such cookie. The cookie will be returned as a JSON object as + * described by the WebDriver wire protocol. + * + * @param {string} name The name of the cookie to retrieve. + * @return {!promise.Promise} A promise + * that will be resolved with the named cookie, or `null` if there is no + * such cookie. + */ + getCookie(name) { + return this.getCookies().then(function(cookies) { + for (let cookie of cookies) { + if (cookie && cookie['name'] === name) { + return cookie; + } + } + return null; + }); + } + + /** + * @return {!Logs} The interface for managing driver + * logs. + */ + logs() { + return new Logs(this.driver_); + } + + /** + * @return {!Timeouts} The interface for managing driver timeouts. + */ + timeouts() { + return new Timeouts(this.driver_); + } + + /** + * @return {!Window} The interface for managing the current window. + */ + window() { + return new Window(this.driver_); + } +} + + +/** + * A JSON description of a browser cookie. + * @typedef {{ + * name: string, + * value: string, + * path: (string|undefined), + * domain: (string|undefined), + * secure: (boolean|undefined), + * expiry: (number|undefined) + * }} + */ +Options.Cookie; + + +/** + * An interface for managing timeout behavior for WebDriver instances. + * + * This class should never be instantiated directly. Insead, obtain an instance + * with + * + * webdriver.manage().timeouts() + * + * @see WebDriver#manage() + * @see Options#timeouts() + */ +class Timeouts { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Specifies the amount of time the driver should wait when searching for an + * element if it is not immediately present. + * + * When searching for a single element, the driver should poll the page + * until the element has been found, or this timeout expires before failing + * with a {@link bot.ErrorCode.NO_SUCH_ELEMENT} error. When searching + * for multiple elements, the driver should poll the page until at least one + * element has been found or this timeout has expired. + * + * Setting the wait timeout to 0 (its default value), disables implicit + * waiting. + * + * Increasing the implicit wait timeout should be used judiciously as it + * will have an adverse effect on test run time, especially when used with + * slower location strategies like XPath. + * + * @param {number} ms The amount of time to wait, in milliseconds. + * @return {!promise.Promise} A promise that will be resolved + * when the implicit wait timeout has been set. + */ + implicitlyWait(ms) { + return this.driver_.schedule( + new command.Command(command.Name.IMPLICITLY_WAIT). + setParameter('ms', ms < 0 ? 0 : ms), + 'WebDriver.manage().timeouts().implicitlyWait(' + ms + ')'); + } + + /** + * Sets the amount of time to wait, in milliseconds, for an asynchronous + * script to finish execution before returning an error. If the timeout is + * less than or equal to 0, the script will be allowed to run indefinitely. + * + * @param {number} ms The amount of time to wait, in milliseconds. + * @return {!promise.Promise} A promise that will be resolved + * when the script timeout has been set. + */ + setScriptTimeout(ms) { + return this.driver_.schedule( + new command.Command(command.Name.SET_SCRIPT_TIMEOUT). + setParameter('ms', ms < 0 ? 0 : ms), + 'WebDriver.manage().timeouts().setScriptTimeout(' + ms + ')'); + } + + /** + * Sets the amount of time to wait for a page load to complete before + * returning an error. If the timeout is negative, page loads may be + * indefinite. + * + * @param {number} ms The amount of time to wait, in milliseconds. + * @return {!promise.Promise} A promise that will be resolved + * when the timeout has been set. + */ + pageLoadTimeout(ms) { + return this.driver_.schedule( + new command.Command(command.Name.SET_TIMEOUT). + setParameter('type', 'page load'). + setParameter('ms', ms), + 'WebDriver.manage().timeouts().pageLoadTimeout(' + ms + ')'); + } +} + + +/** + * An interface for managing the current window. + * + * This class should never be instantiated directly. Insead, obtain an instance + * with + * + * webdriver.manage().window() + * + * @see WebDriver#manage() + * @see Options#window() + */ +class Window { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Retrieves the window's current position, relative to the top left corner of + * the screen. + * @return {!promise.Promise.<{x: number, y: number}>} A promise + * that will be resolved with the window's position in the form of a + * {x:number, y:number} object literal. + */ + getPosition() { + return this.driver_.schedule( + new command.Command(command.Name.GET_WINDOW_POSITION). + setParameter('windowHandle', 'current'), + 'WebDriver.manage().window().getPosition()'); + } + + /** + * Repositions the current window. + * @param {number} x The desired horizontal position, relative to the left + * side of the screen. + * @param {number} y The desired vertical position, relative to the top of the + * of the screen. + * @return {!promise.Promise} A promise that will be resolved + * when the command has completed. + */ + setPosition(x, y) { + return this.driver_.schedule( + new command.Command(command.Name.SET_WINDOW_POSITION). + setParameter('windowHandle', 'current'). + setParameter('x', x). + setParameter('y', y), + 'WebDriver.manage().window().setPosition(' + x + ', ' + y + ')'); + } + + /** + * Retrieves the window's current size. + * @return {!promise.Promise<{width: number, height: number}>} A + * promise that will be resolved with the window's size in the form of a + * {width:number, height:number} object literal. + */ + getSize() { + return this.driver_.schedule( + new command.Command(command.Name.GET_WINDOW_SIZE). + setParameter('windowHandle', 'current'), + 'WebDriver.manage().window().getSize()'); + } + + /** + * Resizes the current window. + * @param {number} width The desired window width. + * @param {number} height The desired window height. + * @return {!promise.Promise} A promise that will be resolved + * when the command has completed. + */ + setSize(width, height) { + return this.driver_.schedule( + new command.Command(command.Name.SET_WINDOW_SIZE). + setParameter('windowHandle', 'current'). + setParameter('width', width). + setParameter('height', height), + 'WebDriver.manage().window().setSize(' + width + ', ' + height + ')'); + } + + /** + * Maximizes the current window. + * @return {!promise.Promise} A promise that will be resolved + * when the command has completed. + */ + maximize() { + return this.driver_.schedule( + new command.Command(command.Name.MAXIMIZE_WINDOW). + setParameter('windowHandle', 'current'), + 'WebDriver.manage().window().maximize()'); + } +} + + +/** + * Interface for managing WebDriver log records. + * + * This class should never be instantiated directly. Instead, obtain an + * instance with + * + * webdriver.manage().logs() + * + * @see WebDriver#manage() + * @see Options#logs() + */ +class Logs { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Fetches available log entries for the given type. + * + * Note that log buffers are reset after each call, meaning that available + * log entries correspond to those entries not yet returned for a given log + * type. In practice, this means that this call will return the available log + * entries since the last call, or from the start of the session. + * + * @param {!logging.Type} type The desired log type. + * @return {!promise.Promise.>} A + * promise that will resolve to a list of log entries for the specified + * type. + */ + get(type) { + let cmd = new command.Command(command.Name.GET_LOG). + setParameter('type', type); + return this.driver_.schedule( + cmd, 'WebDriver.manage().logs().get(' + type + ')'). + then(function(entries) { + return entries.map(function(entry) { + if (!(entry instanceof logging.Entry)) { + return new logging.Entry( + entry['level'], entry['message'], entry['timestamp'], + entry['type']); + } + return entry; + }); + }); + } + + /** + * Retrieves the log types available to this driver. + * @return {!promise.Promise>} A + * promise that will resolve to a list of available log types. + */ + getAvailableLogTypes() { + return this.driver_.schedule( + new command.Command(command.Name.GET_AVAILABLE_LOG_TYPES), + 'WebDriver.manage().logs().getAvailableLogTypes()'); + } +} + + +/** + * An interface for changing the focus of the driver to another frame or window. + * + * This class should never be instantiated directly. Instead, obtain an + * instance with + * + * webdriver.switchTo() + * + * @see WebDriver#switchTo() + */ +class TargetLocator { + /** + * @param {!WebDriver} driver The parent driver. + * @private + */ + constructor(driver) { + /** @private {!WebDriver} */ + this.driver_ = driver; + } + + /** + * Schedules a command retrieve the {@code document.activeElement} element on + * the current document, or {@code document.body} if activeElement is not + * available. + * @return {!WebElementPromise} The active element. + */ + activeElement() { + var id = this.driver_.schedule( + new command.Command(command.Name.GET_ACTIVE_ELEMENT), + 'WebDriver.switchTo().activeElement()'); + return new WebElementPromise(this.driver_, id); + } + + /** + * Schedules a command to switch focus of all future commands to the topmost + * frame on the page. + * @return {!promise.Promise} A promise that will be resolved + * when the driver has changed focus to the default content. + */ + defaultContent() { + return this.driver_.schedule( + new command.Command(command.Name.SWITCH_TO_FRAME). + setParameter('id', null), + 'WebDriver.switchTo().defaultContent()'); + } + + /** + * Schedules a command to switch the focus of all future commands to another + * frame on the page. The target frame may be specified as one of the + * following: + * + * - A number that specifies a (zero-based) index into [window.frames]( + * https://developer.mozilla.org/en-US/docs/Web/API/Window.frames). + * - A {@link WebElement} reference, which correspond to a `frame` or `iframe` + * DOM element. + * - The `null` value, to select the topmost frame on the page. Passing `null` + * is the same as calling {@link #defaultContent defaultContent()}. + * + * If the specified frame can not be found, the returned promise will be + * rejected with a {@linkplain error.NoSuchFrameError}. + * + * @param {(number|WebElement|null)} id The frame locator. + * @return {!promise.Promise} A promise that will be resolved + * when the driver has changed focus to the specified frame. + */ + frame(id) { + return this.driver_.schedule( + new command.Command(command.Name.SWITCH_TO_FRAME). + setParameter('id', id), + 'WebDriver.switchTo().frame(' + id + ')'); + } + + /** + * Schedules a command to switch the focus of all future commands to another + * window. Windows may be specified by their {@code window.name} attribute or + * by its handle (as returned by {@link WebDriver#getWindowHandles}). + * + * If the specified window cannot be found, the returned promise will be + * rejected with a {@linkplain error.NoSuchWindowError}. + * + * @param {string} nameOrHandle The name or window handle of the window to + * switch focus to. + * @return {!promise.Promise} A promise that will be resolved + * when the driver has changed focus to the specified window. + */ + window(nameOrHandle) { + return this.driver_.schedule( + new command.Command(command.Name.SWITCH_TO_WINDOW). + setParameter('name', nameOrHandle), + 'WebDriver.switchTo().window(' + nameOrHandle + ')'); + } + + /** + * Schedules a command to change focus to the active modal dialog, such as + * those opened by `window.alert()`, `window.confirm()`, and + * `window.prompt()`. The returned promise will be rejected with a + * {@linkplain error.NoSuchAlertError} if there are no open alerts. + * + * @return {!AlertPromise} The open alert. + */ + alert() { + var text = this.driver_.schedule( + new command.Command(command.Name.GET_ALERT_TEXT), + 'WebDriver.switchTo().alert()'); + var driver = this.driver_; + return new AlertPromise(driver, text.then(function(text) { + return new Alert(driver, text); + })); + } +} + + +////////////////////////////////////////////////////////////////////////////// +// +// WebElement +// +////////////////////////////////////////////////////////////////////////////// + + +const LEGACY_ELEMENT_ID_KEY = 'ELEMENT'; +const ELEMENT_ID_KEY = 'element-6066-11e4-a52e-4f735466cecf'; + + +/** + * Represents a DOM element. WebElements can be found by searching from the + * document root using a {@link WebDriver} instance, or by searching + * under another WebElement: + * + * driver.get('http://www.google.com'); + * var searchForm = driver.findElement(By.tagName('form')); + * var searchBox = searchForm.findElement(By.name('q')); + * searchBox.sendKeys('webdriver'); + */ +class WebElement { + /** + * @param {!WebDriver} driver the parent WebDriver instance for this element. + * @param {(!IThenable|string)} id The server-assigned opaque ID for + * the underlying DOM element. + */ + constructor(driver, id) { + /** @private {!WebDriver} */ + this.driver_ = driver; + + /** @private {!promise.Promise} */ + this.id_ = promise.fulfilled(id); + } + + /** + * @param {string} id The raw ID. + * @return {!Object} The element ID for use with WebDriver's wire protocol. + */ + static buildId(id) { + return {[ELEMENT_ID_KEY]: id, [LEGACY_ELEMENT_ID_KEY]: id}; + } + + /** + * Extracts the encoded WebElement ID from the object. + * + * @param {?} obj The object to extract the ID from. + * @return {string} the extracted ID. + * @throws {TypeError} if the object is not a valid encoded ID. + */ + static extractId(obj) { + if (obj && typeof obj === 'object') { + if (typeof obj[ELEMENT_ID_KEY] === 'string') { + return obj[ELEMENT_ID_KEY]; + } else if (typeof obj[LEGACY_ELEMENT_ID_KEY] === 'string') { + return obj[LEGACY_ELEMENT_ID_KEY]; + } + } + throw new TypeError('object is not a WebElement ID'); + } + + /** + * @param {?} obj the object to test. + * @return {boolean} whether the object is a valid encoded WebElement ID. + */ + static isId(obj) { + return obj && typeof obj === 'object' + && (typeof obj[ELEMENT_ID_KEY] === 'string' + || typeof obj[LEGACY_ELEMENT_ID_KEY] === 'string'); + } + + /** + * Compares two WebElements for equality. + * + * @param {!WebElement} a A WebElement. + * @param {!WebElement} b A WebElement. + * @return {!promise.Promise} A promise that will be + * resolved to whether the two WebElements are equal. + */ + static equals(a, b) { + if (a === b) { + return promise.fulfilled(true); + } + let ids = [a.getId(), b.getId()]; + return promise.all(ids).then(function(ids) { + // If the two element's have the same ID, they should be considered + // equal. Otherwise, they may still be equivalent, but we'll need to + // ask the server to check for us. + if (ids[0] === ids[1]) { + return true; + } + + let cmd = new command.Command(command.Name.ELEMENT_EQUALS); + cmd.setParameter('id', ids[0]); + cmd.setParameter('other', ids[1]); + return a.driver_.schedule(cmd, 'WebElement.equals()'); + }); + } + + /** @return {!WebDriver} The parent driver for this instance. */ + getDriver() { + return this.driver_; + } + + /** + * @return {!promise.Promise} A promise that resolves to + * the server-assigned opaque ID assigned to this element. + */ + getId() { + return this.id_; + } + + /** + * @deprecated Use {@link #getId()} instead. + */ + getRawId() { + return this.getId(); + } + + /** + * @return {!Object} Returns the serialized representation of this WebElement. + */ + [Symbols.serialize]() { + return this.getId().then(WebElement.buildId); + } + + /** + * Schedules a command that targets this element with the parent WebDriver + * instance. Will ensure this element's ID is included in the command + * parameters under the "id" key. + * + * @param {!command.Command} command The command to schedule. + * @param {string} description A description of the command for debugging. + * @return {!promise.Promise} A promise that will be resolved + * with the command result. + * @template T + * @see WebDriver#schedule + * @private + */ + schedule_(command, description) { + command.setParameter('id', this.getId()); + return this.driver_.schedule(command, description); + } + + /** + * Schedule a command to find a descendant of this element. If the element + * cannot be found, the returned promise will be rejected with a + * {@linkplain error.NoSuchElementError NoSuchElementError}. + * + * The search criteria for an element may be defined using one of the static + * factories on the {@link by.By} class, or as a short-hand + * {@link ./by.ByHash} object. For example, the following two statements + * are equivalent: + * + * var e1 = element.findElement(By.id('foo')); + * var e2 = element.findElement({id:'foo'}); + * + * You may also provide a custom locator function, which takes as input this + * instance and returns a {@link WebElement}, or a promise that will resolve + * to a WebElement. If the returned promise resolves to an array of + * WebElements, WebDriver will use the first element. For example, to find the + * first visible link on a page, you could write: + * + * var link = element.findElement(firstVisibleLink); + * + * function firstVisibleLink(element) { + * var links = element.findElements(By.tagName('a')); + * return promise.filter(links, function(link) { + * return link.isDisplayed(); + * }); + * } + * + * @param {!(by.By|Function)} locator The locator strategy to use when + * searching for the element. + * @return {!WebElementPromise} A WebElement that can be used to issue + * commands against the located element. If the element is not found, the + * element will be invalidated and all scheduled commands aborted. + */ + findElement(locator) { + locator = by.checkedLocator(locator); + let id; + if (typeof locator === 'function') { + id = this.driver_.findElementInternal_(locator, this); + } else { + let cmd = new command.Command( + command.Name.FIND_CHILD_ELEMENT). + setParameter('using', locator.using). + setParameter('value', locator.value); + id = this.schedule_(cmd, 'WebElement.findElement(' + locator + ')'); + } + return new WebElementPromise(this.driver_, id); + } + + /** + * Schedules a command to test if there is at least one descendant of this + * element that matches the given search criteria. + * + * @param {!(by.By|Function)} locator The locator strategy to use when + * searching for the element. + * @return {!promise.Promise} A promise that will be + * resolved with whether an element could be located on the page. + */ + isElementPresent(locator) { + return this.findElements(locator).then(function(result) { + return !!result.length; + }); + } + + /** + * Schedules a command to find all of the descendants of this element that + * match the given search criteria. + * + * @param {!(by.By|Function)} locator The locator strategy to use when + * searching for the element. + * @return {!promise.Promise>} A + * promise that will resolve to an array of WebElements. + */ + findElements(locator) { + locator = by.checkedLocator(locator); + let id; + if (typeof locator === 'function') { + return this.driver_.findElementsInternal_(locator, this); + } else { + var cmd = new command.Command( + command.Name.FIND_CHILD_ELEMENTS). + setParameter('using', locator.using). + setParameter('value', locator.value); + return this.schedule_(cmd, 'WebElement.findElements(' + locator + ')'); + } + } + + /** + * Schedules a command to click on this element. + * @return {!promise.Promise} A promise that will be resolved + * when the click command has completed. + */ + click() { + return this.schedule_( + new command.Command(command.Name.CLICK_ELEMENT), + 'WebElement.click()'); + } + + /** + * Schedules a command to type a sequence on the DOM element represented by + * this instance. + * + * Modifier keys (SHIFT, CONTROL, ALT, META) are stateful; once a modifier is + * processed in the keysequence, that key state is toggled until one of the + * following occurs: + * + * - The modifier key is encountered again in the sequence. At this point the + * state of the key is toggled (along with the appropriate keyup/down + * events). + * - The {@link input.Key.NULL} key is encountered in the sequence. When + * this key is encountered, all modifier keys current in the down state are + * released (with accompanying keyup events). The NULL key can be used to + * simulate common keyboard shortcuts: + * + * element.sendKeys("text was", + * Key.CONTROL, "a", Key.NULL, + * "now text is"); + * // Alternatively: + * element.sendKeys("text was", + * Key.chord(Key.CONTROL, "a"), + * "now text is"); + * + * - The end of the keysequence is encountered. When there are no more keys + * to type, all depressed modifier keys are released (with accompanying + * keyup events). + * + * If this element is a file input ({@code }), the + * specified key sequence should specify the path to the file to attach to + * the element. This is analgous to the user clicking "Browse..." and entering + * the path into the file select dialog. + * + * var form = driver.findElement(By.css('form')); + * var element = form.findElement(By.css('input[type=file]')); + * element.sendKeys('/path/to/file.txt'); + * form.submit(); + * + * For uploads to function correctly, the entered path must reference a file + * on the _browser's_ machine, not the local machine running this script. When + * running against a remote Selenium server, a {@link input.FileDetector} + * may be used to transparently copy files to the remote machine before + * attempting to upload them in the browser. + * + * __Note:__ On browsers where native keyboard events are not supported + * (e.g. Firefox on OS X), key events will be synthesized. Special + * punctionation keys will be synthesized according to a standard QWERTY en-us + * keyboard layout. + * + * @param {...(string|!promise.Promise)} var_args The + * sequence of keys to type. All arguments will be joined into a single + * sequence. + * @return {!promise.Promise} A promise that will be resolved + * when all keys have been typed. + */ + sendKeys(var_args) { + // Coerce every argument to a string. This protects us from users that + // ignore the jsdoc and give us a number (which ends up causing problems on + // the server, which requires strings). + let keys = promise.all(Array.prototype.slice.call(arguments, 0)). + then(keys => keys.map(String)); + if (!this.driver_.fileDetector_) { + return this.schedule_( + new command.Command(command.Name.SEND_KEYS_TO_ELEMENT). + setParameter('value', keys), + 'WebElement.sendKeys()'); + } + + // Suppress unhandled rejection errors until the flow executes the command. + keys.thenCatch(function() {}); + + var element = this; + return this.driver_.flow_.execute(function() { + return keys.then(function(keys) { + return element.driver_.fileDetector_ + .handleFile(element.driver_, keys.join('')); + }).then(function(keys) { + return element.schedule_( + new command.Command(command.Name.SEND_KEYS_TO_ELEMENT). + setParameter('value', [keys]), + 'WebElement.sendKeys()'); + }); + }, 'WebElement.sendKeys()'); + } + + /** + * Schedules a command to query for the tag/node name of this element. + * @return {!promise.Promise} A promise that will be + * resolved with the element's tag name. + */ + getTagName() { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_TAG_NAME), + 'WebElement.getTagName()'); + } + + /** + * Schedules a command to query for the computed style of the element + * represented by this instance. If the element inherits the named style from + * its parent, the parent will be queried for its value. Where possible, color + * values will be converted to their hex representation (e.g. #00ff00 instead of + * rgb(0, 255, 0)). + * + * _Warning:_ the value returned will be as the browser interprets it, so + * it may be tricky to form a proper assertion. + * + * @param {string} cssStyleProperty The name of the CSS style property to look + * up. + * @return {!promise.Promise} A promise that will be + * resolved with the requested CSS value. + */ + getCssValue(cssStyleProperty) { + var name = command.Name.GET_ELEMENT_VALUE_OF_CSS_PROPERTY; + return this.schedule_( + new command.Command(name). + setParameter('propertyName', cssStyleProperty), + 'WebElement.getCssValue(' + cssStyleProperty + ')'); + } + + /** + * Schedules a command to query for the value of the given attribute of the + * element. Will return the current value, even if it has been modified after + * the page has been loaded. More exactly, this method will return the value of + * the given attribute, unless that attribute is not present, in which case the + * value of the property with the same name is returned. If neither value is + * set, null is returned (for example, the "value" property of a textarea + * element). The "style" attribute is converted as best can be to a + * text representation with a trailing semi-colon. The following are deemed to + * be "boolean" attributes and will return either "true" or null: + * + * async, autofocus, autoplay, checked, compact, complete, controls, declare, + * defaultchecked, defaultselected, defer, disabled, draggable, ended, + * formnovalidate, hidden, indeterminate, iscontenteditable, ismap, itemscope, + * loop, multiple, muted, nohref, noresize, noshade, novalidate, nowrap, open, + * paused, pubdate, readonly, required, reversed, scoped, seamless, seeking, + * selected, spellcheck, truespeed, willvalidate + * + * Finally, the following commonly mis-capitalized attribute/property names + * are evaluated as expected: + * + * - "class" + * - "readonly" + * + * @param {string} attributeName The name of the attribute to query. + * @return {!promise.Promise} A promise that will be + * resolved with the attribute's value. The returned value will always be + * either a string or null. + */ + getAttribute(attributeName) { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_ATTRIBUTE). + setParameter('name', attributeName), + 'WebElement.getAttribute(' + attributeName + ')'); + } + + /** + * Get the visible (i.e. not hidden by CSS) innerText of this element, including + * sub-elements, without any leading or trailing whitespace. + * @return {!promise.Promise} A promise that will be + * resolved with the element's visible text. + */ + getText() { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_TEXT), + 'WebElement.getText()'); + } + + /** + * Schedules a command to compute the size of this element's bounding box, in + * pixels. + * @return {!promise.Promise.<{width: number, height: number}>} A + * promise that will be resolved with the element's size as a + * {@code {width:number, height:number}} object. + */ + getSize() { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_SIZE), + 'WebElement.getSize()'); + } + + /** + * Schedules a command to compute the location of this element in page space. + * @return {!promise.Promise.<{x: number, y: number}>} A promise that + * will be resolved to the element's location as a + * {@code {x:number, y:number}} object. + */ + getLocation() { + return this.schedule_( + new command.Command(command.Name.GET_ELEMENT_LOCATION), + 'WebElement.getLocation()'); + } + + /** + * Schedules a command to query whether the DOM element represented by this + * instance is enabled, as dicted by the {@code disabled} attribute. + * @return {!promise.Promise} A promise that will be + * resolved with whether this element is currently enabled. + */ + isEnabled() { + return this.schedule_( + new command.Command(command.Name.IS_ELEMENT_ENABLED), + 'WebElement.isEnabled()'); + } + + /** + * Schedules a command to query whether this element is selected. + * @return {!promise.Promise} A promise that will be + * resolved with whether this element is currently selected. + */ + isSelected() { + return this.schedule_( + new command.Command(command.Name.IS_ELEMENT_SELECTED), + 'WebElement.isSelected()'); + } + + /** + * Schedules a command to submit the form containing this element (or this + * element if it is a FORM element). This command is a no-op if the element is + * not contained in a form. + * @return {!promise.Promise} A promise that will be resolved + * when the form has been submitted. + */ + submit() { + return this.schedule_( + new command.Command(command.Name.SUBMIT_ELEMENT), + 'WebElement.submit()'); + } + + /** + * Schedules a command to clear the `value` of this element. This command has + * no effect if the underlying DOM element is neither a text INPUT element + * nor a TEXTAREA element. + * @return {!promise.Promise} A promise that will be resolved + * when the element has been cleared. + */ + clear() { + return this.schedule_( + new command.Command(command.Name.CLEAR_ELEMENT), + 'WebElement.clear()'); + } + + /** + * Schedules a command to test whether this element is currently displayed. + * @return {!promise.Promise} A promise that will be + * resolved with whether this element is currently visible on the page. + */ + isDisplayed() { + return this.schedule_( + new command.Command(command.Name.IS_ELEMENT_DISPLAYED), + 'WebElement.isDisplayed()'); + } + + /** + * Take a screenshot of the visible region encompassed by this element's + * bounding rectangle. + * + * @param {boolean=} opt_scroll Optional argument that indicates whether the + * element should be scrolled into view before taking a screenshot. + * Defaults to false. + * @return {!promise.Promise} A promise that will be + * resolved to the screenshot as a base-64 encoded PNG. + */ + takeScreenshot(opt_scroll) { + var scroll = !!opt_scroll; + return this.schedule_( + new command.Command(command.Name.TAKE_ELEMENT_SCREENSHOT) + .setParameter('scroll', scroll), + 'WebElement.takeScreenshot(' + scroll + ')'); + } + + /** + * Schedules a command to retrieve the outer HTML of this element. + * @return {!promise.Promise} A promise that will be + * resolved with the element's outer HTML. + */ + getOuterHtml() { + return this.driver_.executeScript(function() { + var element = arguments[0]; + if ('outerHTML' in element) { + return element.outerHTML; + } else { + var div = element.ownerDocument.createElement('div'); + div.appendChild(element.cloneNode(true)); + return div.innerHTML; + } + }, this); + } + + /** + * Schedules a command to retrieve the inner HTML of this element. + * @return {!promise.Promise} A promise that will be + * resolved with the element's inner HTML. + */ + getInnerHtml() { + return this.driver_.executeScript('return arguments[0].innerHTML', this); + } +} + + +/** + * WebElementPromise is a promise that will be fulfilled with a WebElement. + * This serves as a forward proxy on WebElement, allowing calls to be + * scheduled without directly on this instance before the underlying + * WebElement has been fulfilled. In other words, the following two statements + * are equivalent: + * + * driver.findElement({id: 'my-button'}).click(); + * driver.findElement({id: 'my-button'}).then(function(el) { + * return el.click(); + * }); + * + * @implements {promise.Thenable} + * @final + */ +class WebElementPromise extends WebElement { + /** + * @param {!WebDriver} driver The parent WebDriver instance for this + * element. + * @param {!promise.Promise} el A promise + * that will resolve to the promised element. + */ + constructor(driver, el) { + super(driver, 'unused'); + + /** @override */ + this.cancel = el.cancel.bind(el); + + /** @override */ + this.isPending = el.isPending.bind(el); + + /** @override */ + this.then = el.then.bind(el); + + /** @override */ + this.catch = el.catch.bind(el); + + /** @override */ + this.thenCatch = el.thenCatch.bind(el); + + /** @override */ + this.thenFinally = el.thenFinally.bind(el); + + /** + * Defers returning the element ID until the wrapped WebElement has been + * resolved. + * @override + */ + this.getId = function() { + return el.then(function(el) { + return el.getId(); + }); + }; + } +} +promise.Thenable.addImplementation(WebElementPromise); + + +////////////////////////////////////////////////////////////////////////////// +// +// Alert +// +////////////////////////////////////////////////////////////////////////////// + + +/** + * Represents a modal dialog such as {@code alert}, {@code confirm}, or + * {@code prompt}. Provides functions to retrieve the message displayed with + * the alert, accept or dismiss the alert, and set the response text (in the + * case of {@code prompt}). + */ +class Alert { + /** + * @param {!WebDriver} driver The driver controlling the browser this alert + * is attached to. + * @param {string} text The message text displayed with this alert. + */ + constructor(driver, text) { + /** @private {!WebDriver} */ + this.driver_ = driver; + + /** @private {!promise.Promise} */ + this.text_ = promise.fulfilled(text); + } + + /** + * Retrieves the message text displayed with this alert. For instance, if the + * alert were opened with alert("hello"), then this would return "hello". + * + * @return {!promise.Promise} A promise that will be + * resolved to the text displayed with this alert. + */ + getText() { + return this.text_; + } + + /** + * Accepts this alert. + * + * @return {!promise.Promise} A promise that will be resolved + * when this command has completed. + */ + accept() { + return this.driver_.schedule( + new command.Command(command.Name.ACCEPT_ALERT), + 'WebDriver.switchTo().alert().accept()'); + } + + /** + * Dismisses this alert. + * + * @return {!promise.Promise} A promise that will be resolved + * when this command has completed. + */ + dismiss() { + return this.driver_.schedule( + new command.Command(command.Name.DISMISS_ALERT), + 'WebDriver.switchTo().alert().dismiss()'); + } + + /** + * Sets the response text on this alert. This command will return an error if + * the underlying alert does not support response text (e.g. window.alert and + * window.confirm). + * + * @param {string} text The text to set. + * @return {!promise.Promise} A promise that will be resolved + * when this command has completed. + */ + sendKeys(text) { + return this.driver_.schedule( + new command.Command(command.Name.SET_ALERT_TEXT). + setParameter('text', text), + 'WebDriver.switchTo().alert().sendKeys(' + text + ')'); + } +} + + +/** + * AlertPromise is a promise that will be fulfilled with an Alert. This promise + * serves as a forward proxy on an Alert, allowing calls to be scheduled + * directly on this instance before the underlying Alert has been fulfilled. In + * other words, the following two statements are equivalent: + * + * driver.switchTo().alert().dismiss(); + * driver.switchTo().alert().then(function(alert) { + * return alert.dismiss(); + * }); + * + * @implements {promise.Thenable.} + * @final + */ +class AlertPromise extends Alert { + /** + * @param {!WebDriver} driver The driver controlling the browser this + * alert is attached to. + * @param {!promise.Thenable} alert A thenable + * that will be fulfilled with the promised alert. + */ + constructor(driver, alert) { + super(driver, 'unused'); + + /** @override */ + this.cancel = alert.cancel.bind(alert); + + /** @override */ + this.isPending = alert.isPending.bind(alert); + + /** @override */ + this.then = alert.then.bind(alert); + + /** @override */ + this.catch = alert.catch.bind(alert); + + /** @override */ + this.thenCatch = alert.thenCatch.bind(alert); + + /** @override */ + this.thenFinally = alert.thenFinally.bind(alert); + + /** + * Defer returning text until the promised alert has been resolved. + * @override + */ + this.getText = function() { + return alert.then(function(alert) { + return alert.getText(); + }); + }; + + /** + * Defers action until the alert has been located. + * @override + */ + this.accept = function() { + return alert.then(function(alert) { + return alert.accept(); + }); + }; + + /** + * Defers action until the alert has been located. + * @override + */ + this.dismiss = function() { + return alert.then(function(alert) { + return alert.dismiss(); + }); + }; + + /** + * Defers action until the alert has been located. + * @override + */ + this.sendKeys = function(text) { + return alert.then(function(alert) { + return alert.sendKeys(text); + }); + }; + } +} +promise.Thenable.addImplementation(AlertPromise); + + +// PUBLIC API + + +exports.Alert = Alert; +exports.AlertPromise = AlertPromise; +exports.Logs = Logs; +exports.Navigation = Navigation; +exports.Options = Options; +exports.TargetLocator = TargetLocator; +exports.Timeouts = Timeouts; +/** @deprecated Use {@link error.UnexpectedAlertOpenError} instead. */ +exports.UnhandledAlertError = error.UnexpectedAlertOpenError; +exports.WebDriver = WebDriver; +exports.WebElement = WebElement; +exports.WebElementPromise = WebElementPromise; +exports.Window = Window; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/net/index.js b/platforms/android/assets/www/node_modules/selenium-webdriver/net/index.js new file mode 100644 index 0000000..4142ebc --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/net/index.js @@ -0,0 +1,82 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var os = require('os'); + + +function getLoInterface() { + var name; + if (process.platform === 'darwin') { + name = 'lo0'; + } else if (process.platform === 'linux') { + name = 'lo'; + } + return name ? os.networkInterfaces()[name] : null; +} + + +/** + * Queries the system network interfaces for an IP address. + * @param {boolean} loopback Whether to find a loopback address. + * @param {string=} opt_family The IP family (IPv4 or IPv6). Defaults to IPv4. + * @return {string} The located IP address or undefined. + */ +function getAddress(loopback, opt_family) { + var family = opt_family || 'IPv4'; + var addresses = []; + + var interfaces; + if (loopback) { + var lo = getLoInterface(); + interfaces = lo ? [lo] : null; + } + interfaces = interfaces || os.networkInterfaces(); + for (var key in interfaces) { + interfaces[key].forEach(function(ipAddress) { + if (ipAddress.family === family && + ipAddress.internal === loopback) { + addresses.push(ipAddress.address); + } + }); + } + return addresses[0]; +} + + +// PUBLIC API + + +/** + * Retrieves the external IP address for this host. + * @param {string=} opt_family The IP family to retrieve. Defaults to "IPv4". + * @return {string} The IP address or undefined if not available. + */ +exports.getAddress = function(opt_family) { + return getAddress(false, opt_family); +}; + + +/** + * Retrieves a loopback address for this machine. + * @param {string=} opt_family The IP family to retrieve. Defaults to "IPv4". + * @return {string} The IP address or undefined if not available. + */ +exports.getLoopbackAddress = function(opt_family) { + return getAddress(true, opt_family); +}; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/net/portprober.js b/platforms/android/assets/www/node_modules/selenium-webdriver/net/portprober.js new file mode 100644 index 0000000..f455ede --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/net/portprober.js @@ -0,0 +1,219 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var exec = require('child_process').exec, + fs = require('fs'), + net = require('net'); + +var promise = require('../lib/promise'); + + +/** + * The IANA suggested ephemeral port range. + * @type {{min: number, max: number}} + * @const + * @see http://en.wikipedia.org/wiki/Ephemeral_ports + */ +var DEFAULT_IANA_RANGE = {min: 49152, max: 65535}; + + +/** + * The epheremal port range for the current system. Lazily computed on first + * access. + * @type {promise.Promise.<{min: number, max: number}>} + */ +var systemRange = null; + + +/** + * Computes the ephemeral port range for the current system. This is based on + * http://stackoverflow.com/a/924337. + * @return {promise.Promise.<{min: number, max: number}>} A promise + * that will resolve to the ephemeral port range of the current system. + */ +function findSystemPortRange() { + if (systemRange) { + return systemRange; + } + var range = process.platform === 'win32' ? + findWindowsPortRange() : findUnixPortRange(); + return systemRange = range.thenCatch(function() { + return DEFAULT_IANA_RANGE; + }); +} + + +/** + * Executes a command and returns its output if it succeeds. + * @param {string} cmd The command to execute. + * @return {!promise.Promise.} A promise that will resolve + * with the command's stdout data. + */ +function execute(cmd) { + var result = promise.defer(); + exec(cmd, function(err, stdout) { + if (err) { + result.reject(err); + } else { + result.fulfill(stdout); + } + }); + return result.promise; +} + + +/** + * Computes the ephemeral port range for a Unix-like system. + * @return {!promise.Promise.<{min: number, max: number}>} A promise + * that will resolve with the ephemeral port range on the current system. + */ +function findUnixPortRange() { + var cmd; + if (process.platform === 'sunos') { + cmd = + '/usr/sbin/ndd /dev/tcp tcp_smallest_anon_port tcp_largest_anon_port'; + } else if (fs.existsSync('/proc/sys/net/ipv4/ip_local_port_range')) { + // Linux + cmd = 'cat /proc/sys/net/ipv4/ip_local_port_range'; + } else { + cmd = 'sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last' + + ' | sed -e "s/.*:\\s*//"'; + } + + return execute(cmd).then(function(stdout) { + if (!stdout || !stdout.length) return DEFAULT_IANA_RANGE; + var range = stdout.trim().split(/\s+/).map(Number); + if (range.some(isNaN)) return DEFAULT_IANA_RANGE; + return {min: range[0], max: range[1]}; + }); +} + + +/** + * Computes the ephemeral port range for a Windows system. + * @return {!promise.Promise.<{min: number, max: number}>} A promise + * that will resolve with the ephemeral port range on the current system. + */ +function findWindowsPortRange() { + var deferredRange = promise.defer(); + // First, check if we're running on XP. If this initial command fails, + // we just fallback on the default IANA range. + return execute('cmd.exe /c ver').then(function(stdout) { + if (/Windows XP/.test(stdout)) { + // TODO: Try to read these values from the registry. + return {min: 1025, max: 5000}; + } else { + return execute('netsh int ipv4 show dynamicport tcp'). + then(function(stdout) { + /* > netsh int ipv4 show dynamicport tcp + Protocol tcp Dynamic Port Range + --------------------------------- + Start Port : 49152 + Number of Ports : 16384 + */ + var range = stdout.split(/\n/).filter(function(line) { + return /.*:\s*\d+/.test(line); + }).map(function(line) { + return Number(line.split(/:\s*/)[1]); + }); + + return { + min: range[0], + max: range[0] + range[1] + }; + }); + } + }); +} + + +/** + * Tests if a port is free. + * @param {number} port The port to test. + * @param {string=} opt_host The bound host to test the {@code port} against. + * Defaults to {@code INADDR_ANY}. + * @return {!promise.Promise.} A promise that will resolve + * with whether the port is free. + */ +function isFree(port, opt_host) { + var result = promise.defer(); + + result.promise.thenCatch(function(e) { + if (e instanceof promise.CancellationError) { + server.close(); + } + }); + + var server = net.createServer().on('error', function(e) { + if (e.code === 'EADDRINUSE') { + result.fulfill(false); + } else { + result.reject(e); + } + }); + + server.listen(port, opt_host, function() { + server.close(function() { + result.fulfill(true); + }); + }); + + return result.promise; +} + + +/** + * @param {string=} opt_host The bound host to test the {@code port} against. + * Defaults to {@code INADDR_ANY}. + * @return {!promise.Promise.} A promise that will resolve + * to a free port. If a port cannot be found, the promise will be + * rejected. + */ +function findFreePort(opt_host) { + return findSystemPortRange().then(function(range) { + var attempts = 0; + var deferredPort = promise.defer(); + findPort(); + return deferredPort.promise; + + function findPort() { + attempts += 1; + if (attempts > 10) { + deferredPort.reject(Error('Unable to find a free port')); + } + + var port = Math.floor( + Math.random() * (range.max - range.min) + range.min); + isFree(port, opt_host).then(function(isFree) { + if (isFree) { + deferredPort.fulfill(port); + } else { + findPort(); + } + }); + } + }); +} + + +// PUBLIC API + + +exports.findFreePort = findFreePort; +exports.isFree = isFree; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/opera.js b/platforms/android/assets/www/node_modules/selenium-webdriver/opera.js new file mode 100644 index 0000000..33f1e5b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/opera.js @@ -0,0 +1,480 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for the + * Opera web browser (v26+). Before using this module, you must download the + * latest OperaDriver + * [release](https://github.com/operasoftware/operachromiumdriver/releases) and + * ensure it can be found on your system + * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). + * + * There are three primary classes exported by this module: + * + * 1. {@linkplain ServiceBuilder}: configures the + * {@link selenium-webdriver/remote.DriverService remote.DriverService} + * that manages the + * [OperaDriver](https://github.com/operasoftware/operachromiumdriver) + * child process. + * + * 2. {@linkplain Options}: defines configuration options for each new Opera + * session, such as which {@linkplain Options#setProxy proxy} to use, + * what {@linkplain Options#addExtensions extensions} to install, or + * what {@linkplain Options#addArguments command-line switches} to use when + * starting the browser. + * + * 3. {@linkplain Driver}: the WebDriver client; each new instance will control + * a unique browser session with a clean user profile (unless otherwise + * configured through the {@link Options} class). + * + * By default, every Opera session will use a single driver service, which is + * started the first time a {@link Driver} instance is created and terminated + * when this process exits. The default service will inherit its environment + * from the current process and direct all output to /dev/null. You may obtain + * a handle to this default service using + * {@link #getDefaultService getDefaultService()} and change its configuration + * with {@link #setDefaultService setDefaultService()}. + * + * You may also create a {@link Driver} with its own driver service. This is + * useful if you need to capture the server's log output for a specific session: + * + * var opera = require('selenium-webdriver/opera'); + * + * var service = new opera.ServiceBuilder() + * .loggingTo('/my/log/file.txt') + * .enableVerboseLogging() + * .build(); + * + * var options = new opera.Options(); + * // configure browser options ... + * + * var driver = new opera.Driver(options, service); + * + * Users should only instantiate the {@link Driver} class directly when they + * need a custom driver service configuration (as shown above). For normal + * operation, users should start Opera using the + * {@link selenium-webdriver.Builder}. + */ + +'use strict'; + +const fs = require('fs'); + +const executors = require('./executors'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + promise = require('./lib/promise'), + Symbols = require('./lib/symbols'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +/** + * Name of the OperaDriver executable. + * @type {string} + * @const + */ +const OPERADRIVER_EXE = + process.platform === 'win32' ? 'operadriver.exe' : 'operadriver'; + + +/** + * Creates {@link remote.DriverService} instances that manages an + * [OperaDriver](https://github.com/operasoftware/operachromiumdriver) + * server in a child process. + */ +class ServiceBuilder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the operadriver on the current + * PATH. + * @throws {Error} If provided executable does not exist, or the operadriver + * cannot be found on the PATH. + */ + constructor(opt_exe) { + let exe = opt_exe || io.findInPath(OPERADRIVER_EXE, true); + if (!exe) { + throw Error( + 'The OperaDriver could not be found on the current PATH. Please ' + + 'download the latest version of the OperaDriver from ' + + 'https://github.com/operasoftware/operachromiumdriver/releases and ' + + 'ensure it can be found on your PATH.'); + } + + /** @private {string} */ + this.exe_ = /** @type {string} */(exe); + if (!fs.existsSync(this.exe_)) { + throw Error('File does not exist: ' + this.exe_); + } + + /** @private {!Array.} */ + this.args_ = []; + + /** @private {number} */ + this.port_ = 0; + + /** + * @private {(string|!Array)} + */ + this.stdio_ = 'ignore'; + + /** @private {Object.} */ + this.env_ = null; + } + + /** + * Sets the port to start the OperaDriver on. + * @param {number} port The port to use, or 0 for any free port. + * @return {!ServiceBuilder} A self reference. + * @throws {Error} If the port is invalid. + */ + usingPort(port) { + if (port < 0) { + throw Error('port must be >= 0: ' + port); + } + this.port_ = port; + return this; + } + + /** + * Sets the path of the log file the driver should log to. If a log file is + * not specified, the driver will log to stderr. + * @param {string} path Path of the log file to use. + * @return {!ServiceBuilder} A self reference. + */ + loggingTo(path) { + this.args_.push('--log-path=' + path); + return this; + } + + /** + * Enables verbose logging. + * @return {!ServiceBuilder} A self reference. + */ + enableVerboseLogging() { + this.args_.push('--verbose'); + return this; + } + + /** + * Silence sthe drivers output. + * @return {!ServiceBuilder} A self reference. + */ + silent() { + this.args_.push('--silent'); + return this; + } + + /** + * Defines the stdio configuration for the driver service. See + * {@code child_process.spawn} for more information. + * @param {(string|!Array)} + * config The configuration to use. + * @return {!ServiceBuilder} A self reference. + */ + setStdio(config) { + this.stdio_ = config; + return this; + } + + /** + * Defines the environment to start the server under. This settings will be + * inherited by every browser session started by the server. + * @param {!Object.} env The environment to use. + * @return {!ServiceBuilder} A self reference. + */ + withEnvironment(env) { + this.env_ = env; + return this; + } + + /** + * Creates a new DriverService using this instance's current configuration. + * @return {!remote.DriverService} A new driver service using this instance's + * current configuration. + * @throws {Error} If the driver exectuable was not specified and a default + * could not be found on the current PATH. + */ + build() { + var port = this.port_ || portprober.findFreePort(); + var args = this.args_.concat(); // Defensive copy. + + return new remote.DriverService(this.exe_, { + loopback: true, + port: port, + args: promise.when(port, function(port) { + return args.concat('--port=' + port); + }), + env: this.env_, + stdio: this.stdio_ + }); + }; +} + + + +/** @type {remote.DriverService} */ +var defaultService = null; + + +/** + * Sets the default service to use for new OperaDriver instances. + * @param {!remote.DriverService} service The service to use. + * @throws {Error} If the default service is currently running. + */ +function setDefaultService(service) { + if (defaultService && defaultService.isRunning()) { + throw Error( + 'The previously configured OperaDriver service is still running. ' + + 'You must shut it down before you may adjust its configuration.'); + } + defaultService = service; +} + + +/** + * Returns the default OperaDriver service. If such a service has not been + * configured, one will be constructed using the default configuration for + * a OperaDriver executable found on the system PATH. + * @return {!remote.DriverService} The default OperaDriver service. + */ +function getDefaultService() { + if (!defaultService) { + defaultService = new ServiceBuilder().build(); + } + return defaultService; +} + + +/** + * @type {string} + * @const + */ +var OPTIONS_CAPABILITY_KEY = 'chromeOptions'; + + +/** + * Class for managing {@linkplain Driver OperaDriver} specific options. + */ +class Options { + constructor() { + /** @private {!Array.} */ + this.args_ = []; + + /** @private {?string} */ + this.binary_ = null; + + /** @private {!Array.<(string|!Buffer)>} */ + this.extensions_ = []; + + /** @private {./lib/logging.Preferences} */ + this.logPrefs_ = null; + + /** @private {?capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Extracts the OperaDriver specific options from the given capabilities + * object. + * @param {!capabilities.Capabilities} caps The capabilities object. + * @return {!Options} The OperaDriver options. + */ + static fromCapabilities(caps) { + var options; + var o = caps.get(OPTIONS_CAPABILITY_KEY); + if (o instanceof Options) { + options = o; + } else if (o) { + options = new Options() + .addArguments(o.args || []) + .addExtensions(o.extensions || []) + .setOperaBinaryPath(o.binary); + } else { + options = new Options; + } + + if (caps.has(capabilities.Capability.PROXY)) { + options.setProxy(caps.get(capabilities.Capability.PROXY)); + } + + if (caps.has(capabilities.Capability.LOGGING_PREFS)) { + options.setLoggingPrefs( + caps.get(capabilities.Capability.LOGGING_PREFS)); + } + + return options; + } + + /** + * Add additional command line arguments to use when launching the Opera + * browser. Each argument may be specified with or without the "--" prefix + * (e.g. "--foo" and "foo"). Arguments with an associated value should be + * delimited by an "=": "foo=bar". + * @param {...(string|!Array.)} var_args The arguments to add. + * @return {!Options} A self reference. + */ + addArguments(var_args) { + this.args_ = this.args_.concat.apply(this.args_, arguments); + return this; + } + + /** + * Add additional extensions to install when launching Opera. Each extension + * should be specified as the path to the packed CRX file, or a Buffer for an + * extension. + * @param {...(string|!Buffer|!Array.<(string|!Buffer)>)} var_args The + * extensions to add. + * @return {!Options} A self reference. + */ + addExtensions(var_args) { + this.extensions_ = this.extensions_.concat.apply( + this.extensions_, arguments); + return this; + } + + /** + * Sets the path to the Opera binary to use. On Mac OS X, this path should + * reference the actual Opera executable, not just the application binary. The + * binary path be absolute or relative to the operadriver server executable, but + * it must exist on the machine that will launch Opera. + * + * @param {string} path The path to the Opera binary to use. + * @return {!Options} A self reference. + */ + setOperaBinaryPath(path) { + this.binary_ = path; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {!./lib/logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPrefs(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Sets the proxy settings for the new session. + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts this options instance to a {@link capabilities.Capabilities} + * object. + * @param {capabilities.Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!capabilities.Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || capabilities.Capabilities.opera(); + caps. + set(capabilities.Capability.PROXY, this.proxy_). + set(capabilities.Capability.LOGGING_PREFS, this.logPrefs_). + set(OPTIONS_CAPABILITY_KEY, this); + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation not intended for general use. + * @return {!Object} The JSON wire protocol representation of this instance. + */ + [Symbols.serialize]() { + var json = { + args: this.args_, + extensions: this.extensions_.map(function(extension) { + if (Buffer.isBuffer(extension)) { + return extension.toString('base64'); + } + return promise.checkedNodeCall( + fs.readFile, extension, 'base64'); + }) + }; + if (this.binary_) { + json.binary = this.binary_; + } + return json; + } +} + + +/** + * Creates a new WebDriver client for Opera. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(capabilities.Capabilities|Options)=} opt_config The configuration + * options. + * @param {remote.DriverService=} opt_service The session to use; will use + * the {@link getDefaultService default service} by default. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_service, opt_flow) { + var service = opt_service || getDefaultService(); + var executor = executors.createExecutor(service.start()); + + var caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || capabilities.Capabilities.opera()); + + // On Linux, the OperaDriver does not look for Opera on the PATH, so we + // must explicitly find it. See: operachromiumdriver #9. + if (process.platform === 'linux') { + var options = Options.fromCapabilities(caps); + if (!options.binary_) { + let exe = io.findInPath('opera', true); + if (!exe) { + throw Error( + 'The opera executable could not be found on the current PATH'); + } + options.setOperaBinaryPath(exe); + } + caps = options.toCapabilities(caps); + } + + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + super(driver.getSession(), executor, driver.controlFlow()); + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.ServiceBuilder = ServiceBuilder; +exports.getDefaultService = getDefaultService; +exports.setDefaultService = setDefaultService; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/package.json b/platforms/android/assets/www/node_modules/selenium-webdriver/package.json new file mode 100644 index 0000000..6c227ff --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/package.json @@ -0,0 +1,94 @@ +{ + "_args": [ + [ + "selenium-webdriver", + "/Users/adamdon/Desktop/studywell/studywell/sw/www" + ] + ], + "_from": "selenium-webdriver@latest", + "_id": "selenium-webdriver@2.52.0", + "_inCache": true, + "_installable": true, + "_location": "/selenium-webdriver", + "_nodeVersion": "0.12.0", + "_npmOperationalInternal": { + "host": "packages-9-west.internal.npmjs.com", + "tmp": "tmp/selenium-webdriver-2.52.0.tgz_1455259913894_0.6562679694034159" + }, + "_npmUser": { + "email": "jmleyba@gmail.com", + "name": "jmleyba" + }, + "_npmVersion": "2.5.1", + "_phantomChildren": {}, + "_requested": { + "name": "selenium-webdriver", + "raw": "selenium-webdriver", + "rawSpec": "", + "scope": null, + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.52.0.tgz", + "_shasum": "d2dcb2f51b48733d6c42829e52767ecee2bf4b6b", + "_shrinkwrap": null, + "_spec": "selenium-webdriver", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www", + "bugs": { + "url": "https://github.com/SeleniumHQ/selenium/issues" + }, + "dependencies": { + "adm-zip": "0.4.4", + "rimraf": "^2.2.8", + "tmp": "0.0.24", + "ws": "^1.0.1", + "xml2js": "0.4.4" + }, + "description": "The official WebDriver JavaScript bindings from the Selenium project", + "devDependencies": { + "express": "^4.11.2", + "mocha": ">= 1.21.x", + "multer": "^0.1.7", + "promises-aplus-tests": "^2.1.0", + "serve-index": "^1.6.1", + "sinon": "^1.17.2" + }, + "directories": {}, + "dist": { + "shasum": "d2dcb2f51b48733d6c42829e52767ecee2bf4b6b", + "tarball": "http://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.52.0.tgz" + }, + "engines": { + "node": ">= 4.2.x" + }, + "homepage": "https://github.com/SeleniumHQ/selenium", + "keywords": [ + "automation", + "selenium", + "testing", + "webdriver", + "webdriverjs" + ], + "license": "Apache-2.0", + "main": "./index", + "maintainers": [ + { + "email": "jmleyba@gmail.com", + "name": "jmleyba" + } + ], + "name": "selenium-webdriver", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/SeleniumHQ/selenium.git" + }, + "scripts": { + "test": "mocha --harmony -t 600000 --recursive test" + }, + "version": "2.52.0" +} diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/phantomjs.js b/platforms/android/assets/www/node_modules/selenium-webdriver/phantomjs.js new file mode 100644 index 0000000..7853149 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/phantomjs.js @@ -0,0 +1,260 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const fs = require('fs'); + +const executors = require('./executors'), + http = require('./http'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + command = require('./lib/command'), + logging = require('./lib/logging'), + promise = require('./lib/promise'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +/** + * Name of the PhantomJS executable. + * @type {string} + * @const + */ +const PHANTOMJS_EXE = + process.platform === 'win32' ? 'phantomjs.exe' : 'phantomjs'; + + +/** + * Capability that designates the location of the PhantomJS executable to use. + * @type {string} + * @const + */ +const BINARY_PATH_CAPABILITY = 'phantomjs.binary.path'; + + +/** + * Capability that designates the CLI arguments to pass to PhantomJS. + * @type {string} + * @const + */ +const CLI_ARGS_CAPABILITY = 'phantomjs.cli.args'; + + +/** + * Default log file to use if one is not specified through CLI args. + * @type {string} + * @const + */ +const DEFAULT_LOG_FILE = 'phantomjsdriver.log'; + + +/** + * Custom command names supported by PhantomJS. + * @enum {string} + */ +const Command = { + EXECUTE_PHANTOM_SCRIPT: 'executePhantomScript' +}; + + +/** + * Finds the PhantomJS executable. + * @param {string=} opt_exe Path to the executable to use. + * @return {string} The located executable. + * @throws {Error} If the executable cannot be found on the PATH, or if the + * provided executable path does not exist. + */ +function findExecutable(opt_exe) { + var exe = opt_exe || io.findInPath(PHANTOMJS_EXE, true); + if (!exe) { + throw Error( + 'The PhantomJS executable could not be found on the current PATH. ' + + 'Please download the latest version from ' + + 'http://phantomjs.org/download.html and ensure it can be found on ' + + 'your PATH. For more information, see ' + + 'https://github.com/ariya/phantomjs/wiki'); + } + if (!fs.existsSync(exe)) { + throw Error('File does not exist: ' + exe); + } + return exe; +} + + +/** + * Maps WebDriver logging level name to those recognised by PhantomJS. + * @const {!Map} + */ +const WEBDRIVER_TO_PHANTOMJS_LEVEL = new Map([ + [logging.Level.ALL.name, 'DEBUG'], + [logging.Level.DEBUG.name, 'DEBUG'], + [logging.Level.INFO.name, 'INFO'], + [logging.Level.WARNING.name, 'WARN'], + [logging.Level.SEVERE.name, 'ERROR']]); + + +/** + * Creates a command executor with support for PhantomJS' custom commands. + * @param {!promise.Promise} url The server's URL. + * @return {!command.Executor} The new command executor. + */ +function createExecutor(url) { + return new executors.DeferredExecutor(url.then(function(url) { + var client = new http.HttpClient(url); + var executor = new http.Executor(client); + + executor.defineCommand( + Command.EXECUTE_PHANTOM_SCRIPT, + 'POST', '/session/:sessionId/phantom/execute'); + + return executor; + })); +} + +/** + * Creates a new WebDriver client for PhantomJS. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {capabilities.Capabilities=} opt_capabilities The desired + * capabilities. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_capabilities, opt_flow) { + var caps = opt_capabilities || capabilities.Capabilities.phantomjs(); + var exe = findExecutable(caps.get(BINARY_PATH_CAPABILITY)); + var args = ['--webdriver-logfile=' + DEFAULT_LOG_FILE]; + + var logPrefs = caps.get(capabilities.Capability.LOGGING_PREFS); + if (logPrefs instanceof logging.Preferences) { + logPrefs = logPrefs.toJSON(); + } + + if (logPrefs && logPrefs[logging.Type.DRIVER]) { + let level = WEBDRIVER_TO_PHANTOMJS_LEVEL.get( + logPrefs[logging.Type.DRIVER]); + if (level) { + args.push('--webdriver-loglevel=' + level); + } + } + + var proxy = caps.get(capabilities.Capability.PROXY); + if (proxy) { + switch (proxy.proxyType) { + case 'manual': + if (proxy.httpProxy) { + args.push( + '--proxy-type=http', + '--proxy=http://' + proxy.httpProxy); + } + break; + case 'pac': + throw Error('PhantomJS does not support Proxy PAC files'); + case 'system': + args.push('--proxy-type=system'); + break; + case 'direct': + args.push('--proxy-type=none'); + break; + } + } + args = args.concat(caps.get(CLI_ARGS_CAPABILITY) || []); + + var port = portprober.findFreePort(); + var service = new remote.DriverService(exe, { + port: port, + args: promise.when(port, function(port) { + args.push('--webdriver=' + port); + return args; + }) + }); + + var executor = createExecutor(service.start()); + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, driver.controlFlow()); + + var boundQuit = this.quit.bind(this); + + /** @override */ + this.quit = function() { + return boundQuit().thenFinally(service.kill.bind(service)); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} + + /** + * Executes a PhantomJS fragment. This method is similar to + * {@link #executeScript}, except it exposes the + * PhantomJS API to the injected + * script. + * + *

      The injected script will execute in the context of PhantomJS's + * {@code page} variable. If a page has not been loaded before calling this + * method, one will be created.

      + * + *

      Be sure to wrap callback definitions in a try/catch block, as failures + * may cause future WebDriver calls to fail.

      + * + *

      Certain callbacks are used by GhostDriver (the PhantomJS WebDriver + * implementation) and overriding these may cause the script to fail. It is + * recommended that you check for existing callbacks before defining your own. + *

      + * + * As with {@link #executeScript}, the injected script may be defined as + * a string for an anonymous function body (e.g. "return 123;"), or as a + * function. If a function is provided, it will be decompiled to its original + * source. Note that injecting functions is provided as a convenience to + * simplify defining complex scripts. Care must be taken that the function + * only references variables that will be defined in the page's scope and + * that the function does not override {@code Function.prototype.toString} + * (overriding toString() will interfere with how the function is + * decompiled. + * + * @param {(string|!Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {!promise.Promise} A promise that resolve to the + * script's return value. + * @template T + */ + executePhantomJS(script, var_args) { + if (typeof script === 'function') { + script = 'return (' + script + ').apply(this, arguments);'; + } + var args = arguments.length > 1 + ? Array.prototype.slice.call(arguments, 1) : []; + return this.schedule( + new command.Command(Command.EXECUTE_PHANTOM_SCRIPT) + .setParameter('script', script) + .setParameter('args', args), + 'Driver.executePhantomJS()'); + } +} + + +// PUBLIC API + +exports.Driver = Driver; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/proxy.js b/platforms/android/assets/www/node_modules/selenium-webdriver/proxy.js new file mode 100644 index 0000000..e238cb1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/proxy.js @@ -0,0 +1,103 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines functions for configuring a webdriver proxy: + * + * var webdriver = require('selenium-webdriver'), + * proxy = require('selenium-webdriver/proxy'); + * + * var driver = new webdriver.Builder() + * .withCapabilities(webdriver.Capabilities.chrome()) + * .setProxy(proxy.manual({http: 'host:1234'})) + * .build(); + */ + +'use strict'; + +var util = require('util'); + +var ProxyConfig = require('./lib/capabilities').ProxyConfig; + + + +// PUBLIC API + + +/** + * Configures WebDriver to bypass all browser proxies. + * @return {!ProxyConfig} A new proxy configuration object. + */ +exports.direct = function() { + return {proxyType: 'direct'}; +}; + + +/** + * Manually configures the browser proxy. The following options are + * supported: + * + * - `ftp`: Proxy host to use for FTP requests + * - `http`: Proxy host to use for HTTP requests + * - `https`: Proxy host to use for HTTPS requests + * - `bypass`: A list of hosts requests should directly connect to, + * bypassing any other proxies for that request. May be specified as a + * comma separated string, or a list of strings. + * + * Behavior is undefined for FTP, HTTP, and HTTPS requests if the + * corresponding key is omitted from the configuration options. + * + * @param {{ftp: (string|undefined), + * http: (string|undefined), + * https: (string|undefined), + * bypass: (string|!Array.|undefined)}} options Proxy + * configuration options. + * @return {!ProxyConfig} A new proxy configuration object. + */ +exports.manual = function(options) { + return { + proxyType: 'manual', + ftpProxy: options.ftp, + httpProxy: options.http, + sslProxy: options.https, + noProxy: util.isArray(options.bypass) ? + options.bypass.join(',') : options.bypass + }; +}; + + +/** + * Configures WebDriver to configure the browser proxy using the PAC file at + * the given URL. + * @param {string} url URL for the PAC proxy to use. + * @return {!ProxyConfig} A new proxy configuration object. + */ +exports.pac = function(url) { + return { + proxyType: 'pac', + proxyAutoconfigUrl: url + }; +}; + + +/** + * Configures WebDriver to use the current system's proxy. + * @return {!ProxyConfig} A new proxy configuration object. + */ +exports.system = function() { + return {proxyType: 'system'}; +}; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/remote/index.js b/platforms/android/assets/www/node_modules/selenium-webdriver/remote/index.js new file mode 100644 index 0000000..7b5eeeb --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/remote/index.js @@ -0,0 +1,381 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const AdmZip = require('adm-zip'), + AdmConstants = require('adm-zip/util/constants'), + fs = require('fs'), + path = require('path'), + url = require('url'), + util = require('util'); + +const httpUtil = require('../http/util'), + exec = require('../io/exec'), + cmd = require('../lib/command'), + input = require('../lib/input'), + promise = require('../lib/promise'), + webdriver = require('../lib/webdriver'), + net = require('../net'), + portprober = require('../net/portprober'); + + + +/** + * Configuration options for a DriverService instance. + * + * - `loopback` - Whether the service should only be accessed on this host's + * loopback address. + * - `hostname` - The host name to access the server on. If this option is + * specified, the `loopback` option will be ignored. + * - `port` - The port to start the server on (must be > 0). If the port is + * provided as a promise, the service will wait for the promise to resolve + * before starting. + * - `args` - The arguments to pass to the service. If a promise is provided, + * the service will wait for it to resolve before starting. + * - `path` - The base path on the server for the WebDriver wire protocol + * (e.g. '/wd/hub'). Defaults to '/'. + * - `env` - The environment variables that should be visible to the server + * process. Defaults to inheriting the current process's environment. + * - `stdio` - IO configuration for the spawned server process. For more + * information, refer to the documentation of `child_process.spawn`. + * + * @typedef {{ + * loopback: (boolean|undefined), + * hostname: (string|undefined), + * port: (number|!promise.Promise), + * args: !(Array|promise.Promise>), + * path: (string|undefined|null), + * env: (Object|undefined), + * stdio: (string|!Array| + * undefined) + * }} + */ +var ServiceOptions; + + +/** + * Manages the life and death of a native executable WebDriver server. + * + * It is expected that the driver server implements the + * https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol. + * Furthermore, the managed server should support multiple concurrent sessions, + * so that this class may be reused for multiple clients. + */ +class DriverService { + /** + * @param {string} executable Path to the executable to run. + * @param {!ServiceOptions} options Configuration options for the service. + */ + constructor(executable, options) { + /** @private {string} */ + this.executable_ = executable; + + /** @private {boolean} */ + this.loopbackOnly_ = !!options.loopback; + + /** @private {(string|undefined)} */ + this.hostname_ = options.hostname; + + /** @private {(number|!promise.Promise)} */ + this.port_ = options.port; + + /** + * @private {!(Array|promise.Promise>)} + */ + this.args_ = options.args; + + /** @private {string} */ + this.path_ = options.path || '/'; + + /** @private {!Object} */ + this.env_ = options.env || process.env; + + /** + * @private {(string|!Array)} + */ + this.stdio_ = options.stdio || 'ignore'; + + /** + * A promise for the managed subprocess, or null if the server has not been + * started yet. This promise will never be rejected. + * @private {promise.Deferred} + */ + this.command_ = null; + + /** + * Promise that resolves to the server's address or null if the server has + * not been started. This promise will be rejected if the server terminates + * before it starts accepting WebDriver requests. + * @private {promise.Deferred} + */ + this.address_ = null; + } + + /** + * @return {!promise.Promise} A promise that resolves to + * the server's address. + * @throws {Error} If the server has not been started. + */ + address() { + if (this.address_) { + return this.address_.promise; + } + throw Error('Server has not been started.'); + } + + /** + * Returns whether the underlying process is still running. This does not take + * into account whether the process is in the process of shutting down. + * @return {boolean} Whether the underlying service process is running. + */ + isRunning() { + return !!this.address_; + } + + /** + * Starts the server if it is not already running. + * @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the + * server to start accepting requests. Defaults to 30 seconds. + * @return {!promise.Promise} A promise that will resolve + * to the server's base URL when it has started accepting requests. If the + * timeout expires before the server has started, the promise will be + * rejected. + */ + start(opt_timeoutMs) { + if (this.address_) { + return this.address_.promise; + } + + var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS; + + var self = this; + this.command_ = promise.defer(); + this.address_ = promise.defer(); + this.address_.fulfill(promise.when(this.port_, function(port) { + if (port <= 0) { + throw Error('Port must be > 0: ' + port); + } + return promise.when(self.args_, function(args) { + var command = exec(self.executable_, { + args: args, + env: self.env_, + stdio: self.stdio_ + }); + + self.command_.fulfill(command); + + var earlyTermination = command.result().then(function(result) { + var error = result.code == null ? + Error('Server was killed with ' + result.signal) : + Error('Server terminated early with status ' + result.code); + self.address_.reject(error); + self.address_ = null; + self.command_ = null; + throw error; + }); + + var hostname = self.hostname_; + if (!hostname) { + hostname = !self.loopbackOnly_ && net.getAddress() + || net.getLoopbackAddress(); + } + + var serverUrl = url.format({ + protocol: 'http', + hostname: hostname, + port: port, + pathname: self.path_ + }); + + return new promise.Promise(function(fulfill, reject) { + var ready = httpUtil.waitForServer(serverUrl, timeout) + .then(fulfill, reject); + earlyTermination.thenCatch(function(e) { + ready.cancel(/** @type {Error} */(e)); + reject(Error(e.message)); + }); + }).then(function() { + return serverUrl; + }); + }); + })); + + return this.address_.promise; + } + + /** + * Stops the service if it is not currently running. This function will kill + * the server immediately. To synchronize with the active control flow, use + * {@link #stop()}. + * @return {!promise.Promise} A promise that will be resolved when + * the server has been stopped. + */ + kill() { + if (!this.address_ || !this.command_) { + return promise.fulfilled(); // Not currently running. + } + return this.command_.promise.then(function(command) { + command.kill('SIGTERM'); + }); + } + + /** + * Schedules a task in the current control flow to stop the server if it is + * currently running. + * @return {!promise.Promise} A promise that will be resolved when + * the server has been stopped. + */ + stop() { + return promise.controlFlow().execute(this.kill.bind(this)); + } +} + + +/** + * The default amount of time, in milliseconds, to wait for the server to + * start. + * @const {number} + */ +DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000; + + +/** + * Manages the life and death of the + * + * standalone Selenium server. + */ +class SeleniumServer extends DriverService { + /** + * @param {string} jar Path to the Selenium server jar. + * @param {SeleniumServer.Options=} opt_options Configuration options for the + * server. + * @throws {Error} If the path to the Selenium jar is not specified or if an + * invalid port is specified. + */ + constructor(jar, opt_options) { + if (!jar) { + throw Error('Path to the Selenium jar not specified'); + } + + var options = opt_options || {}; + + if (options.port < 0) { + throw Error('Port must be >= 0: ' + options.port); + } + + var port = options.port || portprober.findFreePort(); + var args = promise.when(options.jvmArgs || [], function(jvmArgs) { + return promise.when(options.args || [], function(args) { + return promise.when(port, function(port) { + return jvmArgs.concat(['-jar', jar, '-port', port]).concat(args); + }); + }); + }); + + super('java', { + loopback: options.loopback, + port: port, + args: args, + path: '/wd/hub', + env: options.env, + stdio: options.stdio + }); + } +} + + +/** + * Options for the Selenium server: + * + * - `loopback` - Whether the server should only be accessed on this host's + * loopback address. + * - `port` - The port to start the server on (must be > 0). If the port is + * provided as a promise, the service will wait for the promise to resolve + * before starting. + * - `args` - The arguments to pass to the service. If a promise is provided, + * the service will wait for it to resolve before starting. + * - `jvmArgs` - The arguments to pass to the JVM. If a promise is provided, + * the service will wait for it to resolve before starting. + * - `env` - The environment variables that should be visible to the server + * process. Defaults to inheriting the current process's environment. + * - `stdio` - IO configuration for the spawned server process. For more + * information, refer to the documentation of `child_process.spawn`. + * + * @typedef {{ + * loopback: (boolean|undefined), + * port: (number|!promise.Promise), + * args: !(Array|promise.Promise>), + * jvmArgs: (!Array| + * !promise.Promise>| + * undefined), + * env: (!Object|undefined), + * stdio: (string|!Array| + * undefined) + * }} + */ +SeleniumServer.Options; + + + +/** + * A {@link webdriver.FileDetector} that may be used when running + * against a remote + * [Selenium server](http://selenium-release.storage.googleapis.com/index.html). + * + * When a file path on the local machine running this script is entered with + * {@link webdriver.WebElement#sendKeys WebElement#sendKeys}, this file detector + * will transfer the specified file to the Selenium server's host; the sendKeys + * command will be updated to use the transfered file's path. + * + * __Note:__ This class depends on a non-standard command supported on the + * Java Selenium server. The file detector will fail if used with a server that + * only supports standard WebDriver commands (such as the ChromeDriver). + * + * @final + */ +class FileDetector extends input.FileDetector { + /** @override */ + handleFile(driver, filePath) { + return promise.checkedNodeCall(fs.stat, filePath).then(function(stats) { + if (stats.isDirectory()) { + throw TypeError('Uploading directories is not supported: ' + filePath); + } + + var zip = new AdmZip(); + zip.addLocalFile(filePath); + zip.getEntries()[0].header.method = AdmConstants.STORED; + + var command = new cmd.Command(cmd.Name.UPLOAD_FILE) + .setParameter('file', zip.toBuffer().toString('base64')); + return driver.schedule(command, + 'remote.FileDetector.handleFile(' + filePath + ')'); + }, function(err) { + if (err.code === 'ENOENT') { + return filePath; // Not a file; return original input. + } + throw err; + }); + } +} + + +// PUBLIC API + +exports.DriverService = DriverService; +exports.FileDetector = FileDetector; +exports.SeleniumServer = SeleniumServer; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/safari.js b/platforms/android/assets/www/node_modules/selenium-webdriver/safari.js new file mode 100644 index 0000000..e4b56d6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/safari.js @@ -0,0 +1,547 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a WebDriver client for Safari. Before using this + * module, you must install the + * [latest version](http://selenium-release.storage.googleapis.com/index.html) + * of the SafariDriver browser extension; using Safari for normal browsing is + * not recommended once the extension has been installed. You can, and should, + * disable the extension when the browser is not being used with WebDriver. + */ + +'use strict'; + +const events = require('events'); +const fs = require('fs'); +const http = require('http'); +const path = require('path'); +const url = require('url'); +const util = require('util'); +const ws = require('ws'); + +const io = require('./io'); +const exec = require('./io/exec'); +const isDevMode = require('./lib/devmode'); +const Capabilities = require('./lib/capabilities').Capabilities; +const Capability = require('./lib/capabilities').Capability; +const command = require('./lib/command'); +const promise = require('./lib/promise'); +const Symbols = require('./lib/symbols'); +const webdriver = require('./lib/webdriver'); +const portprober = require('./net/portprober'); + + +/** @const */ +const CLIENT_PATH = isDevMode + ? path.join(__dirname, + '../../../build/javascript/safari-driver/client.js') + : path.join(__dirname, 'lib/safari/client.js'); + + +/** @const */ +const LIBRARY_DIR = (function() { + if (process.platform === 'darwin') { + return path.join('/Users', process.env['USER'], 'Library/Safari'); + } else if (process.platform === 'win32') { + return path.join(process.env['APPDATA'], 'Apple Computer', 'Safari'); + } else { + return '/dev/null'; + } +})(); + + +/** @const */ +const SESSION_DATA_FILES = (function() { + if (process.platform === 'darwin') { + var libraryDir = path.join('/Users', process.env['USER'], 'Library'); + return [ + path.join(libraryDir, 'Caches/com.apple.Safari/Cache.db'), + path.join(libraryDir, 'Cookies/Cookies.binarycookies'), + path.join(libraryDir, 'Cookies/Cookies.plist'), + path.join(libraryDir, 'Safari/History.plist'), + path.join(libraryDir, 'Safari/LastSession.plist'), + path.join(libraryDir, 'Safari/LocalStorage'), + path.join(libraryDir, 'Safari/Databases') + ]; + } else if (process.platform === 'win32') { + var appDataDir = path.join(process.env['APPDATA'], + 'Apple Computer', 'Safari'); + var localDataDir = path.join(process.env['LOCALAPPDATA'], + 'Apple Computer', 'Safari'); + return [ + path.join(appDataDir, 'History.plist'), + path.join(appDataDir, 'LastSession.plist'), + path.join(appDataDir, 'Cookies/Cookies.plist'), + path.join(appDataDir, 'Cookies/Cookies.binarycookies'), + path.join(localDataDir, 'Cache.db'), + path.join(localDataDir, 'Databases'), + path.join(localDataDir, 'LocalStorage') + ]; + } else { + return []; + } +})(); + + +/** @typedef {{port: number, address: string, family: string}} */ +var Host; + + +/** + * A basic HTTP/WebSocket server used to communicate with the SafariDriver + * browser extension. + */ +class Server extends events.EventEmitter { + constructor() { + super(); + var server = http.createServer(function(req, res) { + if (req.url === '/favicon.ico') { + res.writeHead(204); + res.end(); + return; + } + + var query = url.parse(/** @type {string} */(req.url)).query || ''; + if (query.indexOf('url=') == -1) { + var address = server.address() + var host = address.address + ':' + address.port; + res.writeHead( + 302, {'Location': 'http://' + host + '?url=ws://' + host}); + res.end(); + } + + fs.readFile(CLIENT_PATH, 'utf8', function(err, data) { + if (err) { + res.writeHead(500, {'Content-Type': 'text/plain'}); + res.end(err.stack); + return; + } + var content = ''; + res.writeHead(200, { + 'Content-Type': 'text/html; charset=utf-8', + 'Content-Length': Buffer.byteLength(content, 'utf8'), + }); + res.end(content); + }); + }); + + var wss = new ws.Server({server: server}); + wss.on('connection', this.emit.bind(this, 'connection')); + + /** + * Starts the server on a random port. + * @return {!promise.Promise} A promise that will resolve + * with the server host when it has fully started. + */ + this.start = function() { + if (server.address()) { + return promise.fulfilled(server.address()); + } + return portprober.findFreePort('localhost').then(function(port) { + return promise.checkedNodeCall( + server.listen.bind(server, port, 'localhost')); + }).then(function() { + return server.address(); + }); + }; + + /** + * Stops the server. + * @return {!promise.Promise} A promise that will resolve when + * the server has closed all connections. + */ + this.stop = function() { + return new promise.Promise(function(fulfill) { + server.close(fulfill); + }); + }; + + /** + * @return {Host} This server's host info. + * @throws {Error} If the server is not running. + */ + this.address = function() { + var addr = server.address(); + if (!addr) { + throw Error('There server is not running!'); + } + return addr; + }; + } +} + + +/** + * @return {!Promise} A promise that will resolve with the path + * to Safari on the current system. + */ +function findSafariExecutable() { + switch (process.platform) { + case 'darwin': + return Promise.resolve('/Applications/Safari.app/Contents/MacOS/Safari'); + + case 'win32': + var files = [ + process.env['PROGRAMFILES'] || '\\Program Files', + process.env['PROGRAMFILES(X86)'] || '\\Program Files (x86)' + ].map(function(prefix) { + return path.join(prefix, 'Safari\\Safari.exe'); + }); + return io.exists(files[0]).then(function(exists) { + return exists ? files[0] : io.exists(files[1]).then(function(exists) { + if (exists) { + return files[1]; + } + throw Error('Unable to find Safari on the current system'); + }); + }); + + default: + return Promise.reject( + Error('Safari is not supported on the current platform: ' + + process.platform)); + } +} + + +/** + * @param {string} serverUrl The URL to connect to. + * @return {!Promise} A promise for the path to a file that Safari can + * open on start-up to trigger a new connection to the WebSocket server. + */ +function createConnectFile(serverUrl) { + return io.tmpFile({postfix: '.html'}).then(function(f) { + var writeFile = promise.checkedNodeCall(fs.writeFile, + f, + '', + {encoding: 'utf8'}); + return writeFile.then(function() { + return f; + }); + }); +} + + +/** + * Deletes all session data files if so desired. + * @param {!Object} desiredCapabilities . + * @return {!Array} A list of promises for the deleted files. + */ +function cleanSession(desiredCapabilities) { + if (!desiredCapabilities) { + return []; + } + var options = desiredCapabilities[OPTIONS_CAPABILITY_KEY]; + if (!options) { + return []; + } + if (!options['cleanSession']) { + return []; + } + return SESSION_DATA_FILES.map(function(file) { + return io.unlink(file); + }); +} + + +/** @return {string} . */ +function getRandomString() { + let seed = Date.now(); + return Math.floor(Math.random() * seed).toString(36) + + Math.abs(Math.floor(Math.random() * seed) ^ Date.now()).toString(36); +} + + +/** + * @implements {command.Executor} + */ +class CommandExecutor { + constructor() { + this.server_ = null; + + /** @private {ws.WebSocket} */ + this.socket_ = null; + + /** @private {promise.Promise.} */ + this.safari_ = null; + } + + /** @override */ + execute(cmd) { + var self = this; + return new promise.Promise(function(fulfill, reject) { + var safariCommand = JSON.stringify({ + 'origin': 'webdriver', + 'type': 'command', + 'command': { + 'id': getRandomString(), + 'name': cmd.getName(), + 'parameters': cmd.getParameters() + } + }); + + switch (cmd.getName()) { + case command.Name.NEW_SESSION: + self.startSafari_(cmd) + .then(() => self.sendCommand_(safariCommand)) + .then(fulfill, reject); + break; + + case command.Name.QUIT: + self.destroySession_() + .then(() => fulfill({status: 0, value: null}), reject); + break; + + default: + self.sendCommand_(safariCommand).then(fulfill, reject); + break; + } + }); + } + + /** + * @param {string} data . + * @return {!promise.Promise} . + * @private + */ + sendCommand_(data) { + let self = this; + return new promise.Promise(function(fulfill, reject) { + // TODO: support reconnecting with the extension. + if (!self.socket_) { + self.destroySession_().thenFinally(function() { + reject(Error('The connection to the SafariDriver was closed')); + }); + return; + } + + self.socket_.send(data, function(err) { + if (err) { + reject(err); + return; + } + }); + + self.socket_.once('message', function(data) { + try { + data = JSON.parse(data); + } catch (ex) { + reject(Error('Failed to parse driver message: ' + data)); + return; + } + fulfill(data['response']); + }); + }); + } + + /** + * @param {!command.Command} command . + * @private + */ + startSafari_(command) { + this.server_ = new Server(); + + this.safari_ = this.server_.start().then(function(address) { + var tasks = cleanSession( + /** @type {!Object} */( + command.getParameters()['desiredCapabilities'])); + tasks.push( + findSafariExecutable(), + createConnectFile( + 'http://' + address.address + ':' + address.port)); + return promise.all(tasks).then(function(tasks) { + var exe = tasks[tasks.length - 2]; + var html = tasks[tasks.length - 1]; + return exec(exe, {args: [html]}); + }); + }); + + var connected = promise.defer(); + var self = this; + var start = Date.now(); + var timer = setTimeout(function() { + connected.reject(Error( + 'Failed to connect to the SafariDriver after ' + (Date.now() - start) + + ' ms; Have you installed the latest extension from ' + + 'http://selenium-release.storage.googleapis.com/index.html?')); + }, 10 * 1000); + this.server_.once('connection', function(socket) { + clearTimeout(timer); + self.socket_ = socket; + socket.once('close', function() { + self.socket_ = null; + }); + connected.fulfill(); + }); + return connected.promise; + } + + /** + * Destroys the active session by stopping the WebSocket server and killing the + * Safari subprocess. + * @private + */ + destroySession_() { + var tasks = []; + if (this.server_) { + tasks.push(this.server_.stop()); + } + if (this.safari_) { + tasks.push(this.safari_.then(function(safari) { + safari.kill(); + return safari.result(); + })); + } + var self = this; + return promise.all(tasks).thenFinally(function() { + self.server_ = null; + self.socket_ = null; + self.safari_ = null; + }); + } +} + + + +/** @const */ +const OPTIONS_CAPABILITY_KEY = 'safari.options'; + + + +/** + * Configuration options specific to the {@link Driver SafariDriver}. + */ +class Options { + constructor() { + /** @private {Object} */ + this.options_ = null; + + /** @private {./lib/logging.Preferences} */ + this.logPrefs_ = null; + } + + /** + * Extracts the SafariDriver specific options from the given capabilities + * object. + * @param {!Capabilities} capabilities The capabilities object. + * @return {!Options} The ChromeDriver options. + */ + static fromCapabilities(capabilities) { + var options = new Options(); + + var o = capabilities.get(OPTIONS_CAPABILITY_KEY); + if (o instanceof Options) { + options = o; + } else if (o) { + options.setCleanSession(o.cleanSession); + } + + if (capabilities.has(Capability.LOGGING_PREFS)) { + options.setLoggingPrefs(capabilities.get(Capability.LOGGING_PREFS)); + } + + return options; + } + + /** + * Sets whether to force Safari to start with a clean session. Enabling this + * option will cause all global browser data to be deleted. + * @param {boolean} clean Whether to make sure the session has no cookies, + * cache entries, local storage, or databases. + * @return {!Options} A self reference. + */ + setCleanSession(clean) { + if (!this.options_) { + this.options_ = {}; + } + this.options_['cleanSession'] = clean; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {!./lib/logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPrefs(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Converts this options instance to a {@link Capabilities} object. + * @param {Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || Capabilities.safari(); + if (this.logPrefs_) { + caps.set(Capability.LOGGING_PREFS, this.logPrefs_); + } + if (this.options_) { + caps.set(OPTIONS_CAPABILITY_KEY, this); + } + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation detail not intended for general use. + * @return {!Object} The JSON wire protocol representation of this + * instance. + */ + [Symbols.serialize]() { + return this.options_ || {}; + } +} + + +/** + * A WebDriver client for Safari. This class should never be instantiated + * directly; instead, use the {@linkplain ./builder.Builder Builder}: + * + * var driver = new Builder() + * .forBrowser('safari') + * .build(); + * + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(Options|Capabilities)=} opt_config The configuration + * options for the new session. + * @param {promise.ControlFlow=} opt_flow The control flow to create + * the driver under. + */ + constructor(opt_config, opt_flow) { + var executor = new CommandExecutor(); + var caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || Capabilities.safari()); + + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + super(driver.getSession(), executor, driver.controlFlow()); + } +} + + +// Public API + + +exports.Driver = Driver; +exports.Options = Options; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/actions_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/actions_test.js new file mode 100644 index 0000000..8d6794a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/actions_test.js @@ -0,0 +1,53 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var Browser = require('..').Browser, + By = require('..').By, + until = require('..').until, + test = require('../lib/test'), + fileServer = require('../lib/test/fileserver'); + + +test.suite(function(env) { + var driver; + test.beforeEach(function() { driver = env.builder().build(); }); + test.afterEach(function() { driver.quit(); }); + + test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.SAFARI)). + describe('WebDriver.actions()', function() { + + test.it('can move to and click element in an iframe', function() { + driver.get(fileServer.whereIs('click_tests/click_in_iframe.html')); + + driver.wait(until.elementLocated(By.id('ifr')), 5000) + .then(function(frame) { + driver.switchTo().frame(frame); + }); + + var link = driver.findElement(By.id('link')); + driver.actions() + .mouseMove(link) + .click() + .perform(); + + driver.wait(until.titleIs('Submitted Successfully!'), 5000); + }); + + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/chrome/options_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/chrome/options_test.js new file mode 100644 index 0000000..28c4faa --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/chrome/options_test.js @@ -0,0 +1,227 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'); + +var webdriver = require('../..'), + chrome = require('../../chrome'), + symbols = require('../../lib/symbols'), + proxy = require('../../proxy'), + assert = require('../../testing/assert'); + +var test = require('../../lib/test'); + + +describe('chrome.Options', function() { + describe('fromCapabilities', function() { + + it('should return a new Options instance if none were defined', + function() { + var options = chrome.Options.fromCapabilities( + new webdriver.Capabilities()); + assert(options).instanceOf(chrome.Options); + }); + + it('should return options instance if present', function() { + var options = new chrome.Options(); + var caps = options.toCapabilities(); + assert(caps).instanceOf(webdriver.Capabilities); + assert(chrome.Options.fromCapabilities(caps)).equalTo(options); + }); + + it('should rebuild options from wire representation', function() { + var expectedExtension = fs.readFileSync(__filename, 'base64'); + var caps = webdriver.Capabilities.chrome().set('chromeOptions', { + args: ['a', 'b'], + extensions: [__filename], + binary: 'binaryPath', + logPath: 'logFilePath', + detach: true, + localState: 'localStateValue', + prefs: 'prefsValue' + }); + + var options = chrome.Options.fromCapabilities(caps); + var json = options[symbols.serialize](); + + assert(json.args.length).equalTo(2); + assert(json.args[0]).equalTo('a'); + assert(json.args[1]).equalTo('b'); + assert(json.extensions.length).equalTo(1); + assert(json.extensions[0]).equalTo(expectedExtension); + assert(json.binary).equalTo('binaryPath'); + assert(json.logPath).equalTo('logFilePath'); + assert(json.detach).equalTo(true); + assert(json.localState).equalTo('localStateValue'); + assert(json.prefs).equalTo('prefsValue'); + }); + + it('should rebuild options from incomplete wire representation', + function() { + var caps = webdriver.Capabilities.chrome().set('chromeOptions', { + logPath: 'logFilePath' + }); + + var options = chrome.Options.fromCapabilities(caps); + var json = options[symbols.serialize](); + assert(json.args).isUndefined(); + assert(json.binary).isUndefined(); + assert(json.detach).isUndefined(); + assert(json.excludeSwitches).isUndefined(); + assert(json.extensions).isUndefined(); + assert(json.localState).isUndefined(); + assert(json.logPath).equalTo('logFilePath'); + assert(json.prefs).isUndefined(); + assert(json.minidumpPath).isUndefined(); + assert(json.mobileEmulation).isUndefined(); + assert(json.perfLoggingPrefs).isUndefined(); + }); + + it('should extract supported WebDriver capabilities', function() { + var proxyPrefs = proxy.direct(); + var logPrefs = {}; + var caps = webdriver.Capabilities.chrome(). + set(webdriver.Capability.PROXY, proxyPrefs). + set(webdriver.Capability.LOGGING_PREFS, logPrefs); + + var options = chrome.Options.fromCapabilities(caps); + assert(options.proxy_).equalTo(proxyPrefs); + assert(options.logPrefs_).equalTo(logPrefs); + }); + }); + + describe('addArguments', function() { + it('takes var_args', function() { + var options = new chrome.Options(); + assert(options[symbols.serialize]().args).isUndefined(); + + options.addArguments('a', 'b'); + var json = options[symbols.serialize](); + assert(json.args.length).equalTo(2); + assert(json.args[0]).equalTo('a'); + assert(json.args[1]).equalTo('b'); + }); + + it('flattens input arrays', function() { + var options = new chrome.Options(); + assert(options[symbols.serialize]().args).isUndefined(); + + options.addArguments(['a', 'b'], 'c', [1, 2], 3); + var json = options[symbols.serialize](); + assert(json.args.length).equalTo(6); + assert(json.args[0]).equalTo('a'); + assert(json.args[1]).equalTo('b'); + assert(json.args[2]).equalTo('c'); + assert(json.args[3]).equalTo(1); + assert(json.args[4]).equalTo(2); + assert(json.args[5]).equalTo(3); + }); + }); + + describe('addExtensions', function() { + it('takes var_args', function() { + var options = new chrome.Options(); + assert(options.extensions_.length).equalTo(0); + + options.addExtensions('a', 'b'); + assert(options.extensions_.length).equalTo(2); + assert(options.extensions_[0]).equalTo('a'); + assert(options.extensions_[1]).equalTo('b'); + }); + + it('flattens input arrays', function() { + var options = new chrome.Options(); + assert(options.extensions_.length).equalTo(0); + + options.addExtensions(['a', 'b'], 'c', [1, 2], 3); + assert(options.extensions_.length).equalTo(6); + assert(options.extensions_[0]).equalTo('a'); + assert(options.extensions_[1]).equalTo('b'); + assert(options.extensions_[2]).equalTo('c'); + assert(options.extensions_[3]).equalTo(1); + assert(options.extensions_[4]).equalTo(2); + assert(options.extensions_[5]).equalTo(3); + }); + }); + + describe('serialize', function() { + it('base64 encodes extensions', function() { + var expected = fs.readFileSync(__filename, 'base64'); + var wire = new chrome.Options() + .addExtensions(__filename) + [symbols.serialize](); + assert(wire.extensions.length).equalTo(1); + assert(wire.extensions[0]).equalTo(expected); + }); + }); + + describe('toCapabilities', function() { + it('returns a new capabilities object if one is not provided', function() { + var options = new chrome.Options(); + var caps = options.toCapabilities(); + assert(caps.get('browserName')).equalTo('chrome'); + assert(caps.get('chromeOptions')).equalTo(options); + }); + + it('adds to input capabilities object', function() { + var caps = webdriver.Capabilities.firefox(); + var options = new chrome.Options(); + assert(options.toCapabilities(caps)).equalTo(caps); + assert(caps.get('browserName')).equalTo('firefox'); + assert(caps.get('chromeOptions')).equalTo(options); + }); + + it('sets generic driver capabilities', function() { + var proxyPrefs = {}; + var loggingPrefs = {}; + var options = new chrome.Options(). + setLoggingPrefs(loggingPrefs). + setProxy(proxyPrefs); + + var caps = options.toCapabilities(); + assert(caps.get('proxy')).equalTo(proxyPrefs); + assert(caps.get('loggingPrefs')).equalTo(loggingPrefs); + }); + }); +}); + +test.suite(function(env) { + var driver; + + test.afterEach(function() { + driver.quit(); + }); + + describe('Chrome options', function() { + test.it('can start Chrome with custom args', function() { + var options = new chrome.Options(). + addArguments('user-agent=foo;bar'); + + driver = env.builder(). + setChromeOptions(options). + build(); + + driver.get(test.Pages.ajaxyPage); + + var userAgent = driver.executeScript( + 'return window.navigator.userAgent'); + assert(userAgent).equalTo('foo;bar'); + }); + }); +}, {browsers: ['chrome']}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/chrome/service_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/chrome/service_test.js new file mode 100644 index 0000000..0e0209e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/chrome/service_test.js @@ -0,0 +1,45 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var webdriver = require('../..'), + chrome = require('../../chrome'), + assert = require('../../testing/assert'); + +var test = require('../../lib/test'); + + +test.suite(function(env) { + describe('chromedriver', function() { + var service; + test.afterEach(function() { + if (service) { + return service.kill(); + } + }); + + test.it('can be started on a custom path', function() { + service = new chrome.ServiceBuilder() + .setUrlBasePath('/foo/bar/baz') + .build(); + return service.start().then(function(url) { + assert(url).endsWith('/foo/bar/baz'); + }); + }); + }); +}, {browsers: ['chrome']}); \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/cookie_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/cookie_test.js new file mode 100644 index 0000000..fe4c839 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/cookie_test.js @@ -0,0 +1,206 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + url = require('url'); + +var test = require('../lib/test'), + fileserver = require('../lib/test/fileserver'), + Browser = require('..').Browser, + Pages = test.Pages; + + +test.suite(function(env) { + var driver; + + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + test.ignore(env.browsers(Browser.SAFARI)). // Cookie handling is broken. + describe('Cookie Management;', function() { + + test.beforeEach(function() { + driver.get(fileserver.Pages.ajaxyPage); + driver.manage().deleteAllCookies(); + assertHasCookies(); + }); + + test.it('can add new cookies', function() { + var cookie = createCookieSpec(); + + driver.manage().addCookie(cookie.name, cookie.value); + driver.manage().getCookie(cookie.name).then(function(actual) { + assert.equal(actual.value, cookie.value); + }); + }); + + test.it('can get all cookies', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + + driver.manage().addCookie(cookie1.name, cookie1.value); + driver.manage().addCookie(cookie2.name, cookie2.value); + + assertHasCookies(cookie1, cookie2); + }); + + test.ignore(env.browsers(Browser.IE)). + it('only returns cookies visible to the current page', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + + driver.manage().addCookie(cookie1.name, cookie1.value); + + var pageUrl = fileserver.whereIs('page/1'); + driver.get(pageUrl); + driver.manage().addCookie( + cookie2.name, cookie2.value, url.parse(pageUrl).pathname); + assertHasCookies(cookie1, cookie2); + + driver.get(fileserver.Pages.ajaxyPage); + assertHasCookies(cookie1); + + driver.get(pageUrl); + assertHasCookies(cookie1, cookie2); + }); + + test.it('can delete all cookies', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + + driver.executeScript( + 'document.cookie = arguments[0] + "=" + arguments[1];' + + 'document.cookie = arguments[2] + "=" + arguments[3];', + cookie1.name, cookie1.value, cookie2.name, cookie2.value); + assertHasCookies(cookie1, cookie2); + + driver.manage().deleteAllCookies(); + assertHasCookies(); + }); + + test.it('can delete cookies by name', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + + driver.executeScript( + 'document.cookie = arguments[0] + "=" + arguments[1];' + + 'document.cookie = arguments[2] + "=" + arguments[3];', + cookie1.name, cookie1.value, cookie2.name, cookie2.value); + assertHasCookies(cookie1, cookie2); + + driver.manage().deleteCookie(cookie1.name); + assertHasCookies(cookie2); + }); + + test.it('should only delete cookie with exact name', function() { + var cookie1 = createCookieSpec(); + var cookie2 = createCookieSpec(); + var cookie3 = {name: cookie1.name + 'xx', value: cookie1.value}; + + driver.executeScript( + 'document.cookie = arguments[0] + "=" + arguments[1];' + + 'document.cookie = arguments[2] + "=" + arguments[3];' + + 'document.cookie = arguments[4] + "=" + arguments[5];', + cookie1.name, cookie1.value, cookie2.name, cookie2.value, + cookie3.name, cookie3.value); + assertHasCookies(cookie1, cookie2, cookie3); + + driver.manage().deleteCookie(cookie1.name); + assertHasCookies(cookie2, cookie3); + }); + + test.it('can delete cookies set higher in the path', function() { + var cookie = createCookieSpec(); + var childUrl = fileserver.whereIs('child/childPage.html'); + var grandchildUrl = fileserver.whereIs( + 'child/grandchild/grandchildPage.html'); + + driver.get(childUrl); + driver.manage().addCookie(cookie.name, cookie.value); + assertHasCookies(cookie); + + driver.get(grandchildUrl); + assertHasCookies(cookie); + + driver.manage().deleteCookie(cookie.name); + assertHasCookies(); + + driver.get(childUrl); + assertHasCookies(); + }); + + test.ignore(env.browsers(Browser.ANDROID, Browser.FIREFOX, Browser.IE)). + it('should retain cookie expiry', function() { + var cookie = createCookieSpec(); + var expirationDelay = 5 * 1000; + var futureTime = Date.now() + expirationDelay; + + driver.manage().addCookie( + cookie.name, cookie.value, null, null, false, futureTime); + driver.manage().getCookie(cookie.name).then(function(actual) { + assert.equal(actual.value, cookie.value); + // expiry times are exchanged in seconds since January 1, 1970 UTC. + assert.equal(actual.expiry, Math.floor(futureTime / 1000)); + }); + + driver.sleep(expirationDelay); + assertHasCookies(); + }); + }); + + function createCookieSpec() { + return { + name: getRandomString(), + value: getRandomString() + }; + } + + function buildCookieMap(cookies) { + var map = {}; + cookies.forEach(function(cookie) { + map[cookie.name] = cookie; + }); + return map; + } + + function assertHasCookies(var_args) { + var expected = Array.prototype.slice.call(arguments, 0); + driver.manage().getCookies().then(function(cookies) { + assert.equal(cookies.length, expected.length, + 'Wrong # of cookies.' + + '\n Expected: ' + JSON.stringify(expected) + + '\n Was : ' + JSON.stringify(cookies)); + + var map = buildCookieMap(cookies); + for (var i = 0; i < expected.length; ++i) { + assert.equal(expected[i].value, map[expected[i].name].value); + } + }); + } + + function getRandomString() { + var x = 1234567890; + return Math.floor(Math.random() * x).toString(36); + } +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/element_finding_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/element_finding_test.js new file mode 100644 index 0000000..3d56b54 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/element_finding_test.js @@ -0,0 +1,392 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fail = require('assert').fail; + +var Browser = require('..').Browser, + By = require('..').By, + error = require('..').error, + until = require('..').until, + promise = require('../lib/promise'), + test = require('../lib/test'), + assert = require('../testing/assert'), + Pages = test.Pages; + + +test.suite(function(env) { + var browsers = env.browsers; + + var driver; + + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + describe('finding elements', function() { + test.it( + 'should work after loading multiple pages in a row', + function() { + driver.get(Pages.formPage); + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.linkText('click me')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + describe('By.id()', function() { + test.it('should work', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.id('linkId')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + test.it('should fail if ID not present on page', function() { + driver.get(Pages.formPage); + driver.findElement(By.id('nonExistantButton')). + then(fail, function(e) { + assert(e).instanceOf(error.NoSuchElementError); + }); + }); + + test.it( + 'should find multiple elements by ID even though that is ' + + 'malformed HTML', + function() { + driver.get(Pages.nestedPage); + driver.findElements(By.id('2')).then(function(elements) { + assert(elements.length).equalTo(8); + }); + }); + }); + + describe('By.linkText()', function() { + test.it('should be able to click on link identified by text', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.linkText('click me')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + test.it( + 'should be able to find elements by partial link text', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.partialLinkText('ick me')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + test.it('should work when link text contains equals sign', function() { + driver.get(Pages.xhtmlTestPage); + var id = driver.findElement(By.linkText('Link=equalssign')). + getAttribute('id'); + assert(id).equalTo('linkWithEqualsSign'); + }); + + test.it('matches by partial text when containing equals sign', + function() { + driver.get(Pages.xhtmlTestPage); + var id = driver.findElement(By.partialLinkText('Link=')). + getAttribute('id'); + assert(id).equalTo('linkWithEqualsSign'); + }); + + test.it('works when searching for multiple and text contains =', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.linkText('Link=equalssign')). + then(function(elements) { + assert(elements.length).equalTo(1); + return elements[0].getAttribute('id'); + }). + then(function(id) { + assert(id).equalTo('linkWithEqualsSign'); + }); + }); + + test.it( + 'works when searching for multiple with partial text containing =', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.partialLinkText('Link=')). + then(function(elements) { + assert(elements.length).equalTo(1); + return elements[0].getAttribute('id'); + }). + then(function(id) { + assert(id).equalTo('linkWithEqualsSign'); + }); + }); + + test.it('should be able to find multiple exact matches', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.linkText('click me')). + then(function(elements) { + assert(elements.length).equalTo(2); + }); + }); + + test.it('should be able to find multiple partial matches', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.partialLinkText('ick me')). + then(function(elements) { + assert(elements.length).equalTo(2); + }); + }); + + test.it('works on XHTML pages', function() { + driver.get(test.whereIs('actualXhtmlPage.xhtml')); + + var el = driver.findElement(By.linkText('Foo')); + assert(el.getText()).equalTo('Foo'); + }); + }); + + describe('By.name()', function() { + test.it('should work', function() { + driver.get(Pages.formPage); + + var el = driver.findElement(By.name('checky')); + assert(el.getAttribute('value')).equalTo('furrfu'); + }); + + test.it('should find multiple elements with same name', function() { + driver.get(Pages.nestedPage); + driver.findElements(By.name('checky')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + }); + + test.it( + 'should be able to find elements that do not support name property', + function() { + driver.get(Pages.nestedPage); + driver.findElement(By.name('div1')); + // Pass if this does not return an error. + }); + + test.it('shoudl be able to find hidden elements by name', function() { + driver.get(Pages.formPage); + driver.findElement(By.name('hidden')); + // Pass if this does not return an error. + }); + }); + + describe('By.className()', function() { + test.it('should work', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('extraDiv')); + assert(el.getText()).startsWith('Another div starts here.'); + }); + + test.it('should work when name is first name among many', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('nameA')); + assert(el.getText()).equalTo('An H2 title'); + }); + + test.it('should work when name is last name among many', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('nameC')); + assert(el.getText()).equalTo('An H2 title'); + }); + + test.it('should work when name is middle of many', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('nameBnoise')); + assert(el.getText()).equalTo('An H2 title'); + }); + + test.it('should work when name surrounded by whitespace', function() { + driver.get(Pages.xhtmlTestPage); + + var el = driver.findElement(By.className('spaceAround')); + assert(el.getText()).equalTo('Spaced out'); + }); + + test.it('should fail if queried name only partially matches', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.className('nameB')). + then(fail, function(e) { + assert(e).instanceOf(error.NoSuchElementError); + }); + }); + + test.it('should be able to find multiple matches', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.className('nameC')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + }); + + test.it('permits compound class names', function() { + return driver.get(Pages.xhtmlTestPage) + .then(() => driver.findElement(By.className('nameA nameC'))) + .then(el => el.getText()) + .then(text => assert(text).equalTo('An H2 title')); + }); + }); + + describe('By.xpath()', function() { + test.it('should work with multiple matches', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.xpath('//div')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + }); + + test.it('should work for selectors using contains keyword', function() { + driver.get(Pages.nestedPage); + driver.findElement(By.xpath('//a[contains(., "hello world")]')); + // Pass if no error. + }); + }); + + describe('By.tagName()', function() { + test.it('works', function() { + driver.get(Pages.formPage); + + var el = driver.findElement(By.tagName('input')); + assert(el.getTagName()).equalTo('input'); + }); + + test.it('can find multiple elements', function() { + driver.get(Pages.formPage); + driver.findElements(By.tagName('input')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + }); + }); + + describe('By.css()', function() { + test.it('works', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElement(By.css('div.content')); + // Pass if no error. + }); + + test.it('can find multiple elements', function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.css('p')).then(function(elements) { + assert(elements.length).greaterThan(1); + }); + // Pass if no error. + }); + + test.it( + 'should find first matching element when searching by ' + + 'compound CSS selector', + function() { + driver.get(Pages.xhtmlTestPage); + var el = driver.findElement(By.css('div.extraDiv, div.content')); + assert(el.getAttribute('class')).equalTo('content'); + }); + + test.it('should be able to find multiple elements by compound selector', + function() { + driver.get(Pages.xhtmlTestPage); + driver.findElements(By.css('div.extraDiv, div.content')). + then(function(elements) { + assertClassIs(elements[0], 'content'); + assertClassIs(elements[1], 'extraDiv'); + + function assertClassIs(el, expected) { + assert(el.getAttribute('class')).equalTo(expected); + } + }); + }); + + // IE only supports short version option[selected]. + test.ignore(browsers(Browser.IE)). + it('should be able to find element by boolean attribute', function() { + driver.get(test.whereIs( + 'locators_tests/boolean_attribute_selected.html')); + + var el = driver.findElement(By.css('option[selected="selected"]')); + assert(el.getAttribute('value')).equalTo('two'); + }); + + test.it( + 'should be able to find element with short ' + + 'boolean attribute selector', + function() { + driver.get(test.whereIs( + 'locators_tests/boolean_attribute_selected.html')); + + var el = driver.findElement(By.css('option[selected]')); + assert(el.getAttribute('value')).equalTo('two'); + }); + + test.it( + 'should be able to find element with short boolean attribute ' + + 'selector on HTML4 page', + function() { + driver.get(test.whereIs( + 'locators_tests/boolean_attribute_selected_html4.html')); + + var el = driver.findElement(By.css('option[selected]')); + assert(el.getAttribute('value')).equalTo('two'); + }); + }); + + describe('by custom locator', function() { + test.it('handles single element result', function() { + driver.get(Pages.javascriptPage); + + let link = driver.findElement(function(driver) { + let links = driver.findElements(By.tagName('a')); + return promise.filter(links, function(link) { + return link.getAttribute('id').then(id => id === 'updatediv'); + }).then(links => links[0]); + }); + + assert(link.getText()).isEqualTo('Update a div'); + }); + + test.it('uses first element if locator resolves to list', function() { + driver.get(Pages.javascriptPage); + + let link = driver.findElement(function() { + return driver.findElements(By.tagName('a')); + }); + + assert(link.getText()).isEqualTo('Change the page title!'); + }); + + test.it('fails if locator returns non-webelement value', function() { + driver.get(Pages.javascriptPage); + + let link = driver.findElement(function() { + return driver.getTitle(); + }); + + return link.then( + () => fail('Should have failed'), + (e) => assert(e).instanceOf(TypeError)); + }); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/error_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/error_test.js new file mode 100644 index 0000000..c80423e --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/error_test.js @@ -0,0 +1,163 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +describe('error', function() { + let assert = require('assert'); + let error = require('../error'); + + describe('checkResponse', function() { + it('defaults to WebDriverError if type is unrecognized', function() { + assert.throws( + () => error.checkResponse({error: 'foo', message: 'hi there'}), + (e) => { + assert.equal(e.constructor, error.WebDriverError); + assert.equal(e.code, error.ErrorCode.UNKNOWN_ERROR); + return true; + }); + }); + + it('does not throw if error property is not a string', function() { + let resp = {error: 123, message: 'abc123'}; + let out = error.checkResponse(resp); + assert.strictEqual(out, resp); + }); + + test('unknown error', error.WebDriverError); + test('element not selectable', error.ElementNotSelectableError); + test('element not visible', error.ElementNotVisibleError); + test('invalid argument', error.InvalidArgumentError); + test('invalid cookie domain', error.InvalidCookieDomainError); + test('invalid element coordinates', error.InvalidElementCoordinatesError); + test('invalid element state', error.InvalidElementStateError); + test('invalid selector', error.InvalidSelectorError); + test('invalid session id', error.InvalidSessionIdError); + test('javascript error', error.JavascriptError); + test('move target out of bounds', error.MoveTargetOutOfBoundsError); + test('no such alert', error.NoSuchAlertError); + test('no such element', error.NoSuchElementError); + test('no such frame', error.NoSuchFrameError); + test('no such window', error.NoSuchWindowError); + test('script timeout', error.ScriptTimeoutError); + test('session not created', error.SessionNotCreatedError); + test('stale element reference', error.StaleElementReferenceError); + test('timeout', error.TimeoutError); + test('unable to set cookie', error.UnableToSetCookieError); + test('unable to capture screen', error.UnableToCaptureScreenError); + test('unexpected alert open', error.UnexpectedAlertOpenError); + test('unknown command', error.UnknownCommandError); + test('unknown method', error.UnknownMethodError); + test('unsupported operation', error.UnsupportedOperationError); + + function test(status, expectedType) { + it(`"${status}" => ${expectedType.name}`, function() { + assert.throws( + () => error.checkResponse({error: status, message: 'oops'}), + (e) => { + assert.equal(expectedType, e.constructor); + assert.equal(e.message, 'oops'); + return true; + }); + }); + } + }); + + describe('checkLegacyResponse', function() { + it('does not throw for success', function() { + let resp = {status: error.ErrorCode.SUCCESS}; + assert.strictEqual(resp, error.checkLegacyResponse(resp)); + }); + + test('NO_SUCH_ELEMENT', error.NoSuchElementError); + test('NO_SUCH_FRAME', error.NoSuchFrameError); + test('UNKNOWN_COMMAND', error.UnsupportedOperationError); + test('UNSUPPORTED_OPERATION', error.UnsupportedOperationError); + test('STALE_ELEMENT_REFERENCE', error.StaleElementReferenceError); + test('ELEMENT_NOT_VISIBLE', error.ElementNotVisibleError); + test('INVALID_ELEMENT_STATE', error.InvalidElementStateError); + test('UNKNOWN_ERROR', error.WebDriverError); + test('ELEMENT_NOT_SELECTABLE', error.ElementNotSelectableError); + test('JAVASCRIPT_ERROR', error.JavascriptError); + test('XPATH_LOOKUP_ERROR', error.InvalidSelectorError); + test('TIMEOUT', error.TimeoutError); + test('NO_SUCH_WINDOW', error.NoSuchWindowError); + test('INVALID_COOKIE_DOMAIN', error.InvalidCookieDomainError); + test('UNABLE_TO_SET_COOKIE', error.UnableToSetCookieError); + test('UNEXPECTED_ALERT_OPEN', error.UnexpectedAlertOpenError); + test('NO_SUCH_ALERT', error.NoSuchAlertError); + test('SCRIPT_TIMEOUT', error.ScriptTimeoutError); + test('INVALID_ELEMENT_COORDINATES', error.InvalidElementCoordinatesError); + test('INVALID_SELECTOR_ERROR', error.InvalidSelectorError); + test('SESSION_NOT_CREATED', error.SessionNotCreatedError); + test('MOVE_TARGET_OUT_OF_BOUNDS', error.MoveTargetOutOfBoundsError); + test('INVALID_XPATH_SELECTOR', error.InvalidSelectorError); + test('INVALID_XPATH_SELECTOR_RETURN_TYPE', error.InvalidSelectorError); + test('METHOD_NOT_ALLOWED', error.UnsupportedOperationError); + + function test(codeKey, expectedType) { + it(`${codeKey} => ${expectedType.name}`, function() { + let code = error.ErrorCode[codeKey]; + let resp = {status: code, value: {message: 'hi'}}; + assert.throws( + () => error.checkLegacyResponse(resp), + (e) => { + assert.equal(expectedType, e.constructor); + assert.equal(e.message, 'hi'); + return true; + }); + }); + } + }); + + describe('WebDriverError types provide a legacy error code', function() { + check(error.WebDriverError, 'UNKNOWN_ERROR'); + check(error.ElementNotSelectableError, 'ELEMENT_NOT_SELECTABLE'); + check(error.ElementNotVisibleError, 'ELEMENT_NOT_VISIBLE'); + check(error.InvalidArgumentError, 'UNKNOWN_ERROR'); + check(error.InvalidCookieDomainError, 'INVALID_COOKIE_DOMAIN'); + check(error.InvalidElementCoordinatesError, 'INVALID_ELEMENT_COORDINATES'); + check(error.InvalidElementStateError, 'INVALID_ELEMENT_STATE'); + check(error.InvalidSelectorError, 'INVALID_SELECTOR_ERROR'); + check(error.InvalidSessionIdError, 'UNKNOWN_ERROR'); + check(error.JavascriptError, 'JAVASCRIPT_ERROR'); + check(error.MoveTargetOutOfBoundsError, 'MOVE_TARGET_OUT_OF_BOUNDS'); + check(error.NoSuchAlertError, 'NO_SUCH_ALERT'); + check(error.NoSuchElementError, 'NO_SUCH_ELEMENT'); + check(error.NoSuchFrameError, 'NO_SUCH_FRAME'); + check(error.NoSuchWindowError, 'NO_SUCH_WINDOW'); + check(error.ScriptTimeoutError, 'SCRIPT_TIMEOUT'); + check(error.SessionNotCreatedError, 'SESSION_NOT_CREATED'); + check(error.StaleElementReferenceError, 'STALE_ELEMENT_REFERENCE'); + check(error.TimeoutError, 'TIMEOUT'); + check(error.UnableToSetCookieError, 'UNABLE_TO_SET_COOKIE'); + check(error.UnableToCaptureScreenError, 'UNKNOWN_ERROR'); + check(error.UnexpectedAlertOpenError, 'UNEXPECTED_ALERT_OPEN'); + check(error.UnknownCommandError, 'UNKNOWN_COMMAND'); + check(error.UnknownMethodError, 'UNSUPPORTED_OPERATION'); + check(error.UnsupportedOperationError, 'UNSUPPORTED_OPERATION'); + + function check(ctor, codeKey) { + it(`${ctor.name} => ${codeKey}`, function() { + let code = error.ErrorCode[codeKey]; + let e = new ctor(); + assert.equal(typeof e.code, 'number'); + assert.equal(e.code, code); + }); + } + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/execute_script_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/execute_script_test.js new file mode 100644 index 0000000..8d3b099 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/execute_script_test.js @@ -0,0 +1,322 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var path = require('path'); + +var webdriver = require('..'), + Browser = webdriver.Browser, + By = webdriver.By, + assert = require('../testing/assert'), + test = require('../lib/test'); + + +test.suite(function(env) { + var driver; + + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + test.beforeEach(function() { + driver.get(test.Pages.echoPage); + }); + + describe('executeScript;', function() { + var shouldHaveFailed = new Error('Should have failed'); + + test.it('fails if script throws', function() { + execute('throw new Error("boom")') + .then(function() { throw shoudlHaveFailed; }) + .thenCatch(function(e) { + // The java WebDriver server adds a bunch of crap to error messages. + // Error message will just be "JavaScript error" for IE. + assert(e.message).matches(/.*(JavaScript error|boom).*/); + }); + }); + + test.it('fails if script does not parse', function() { + execute('throw function\\*') + .then(function() { throw shoudlHaveFailed; }) + .thenCatch(function(e) { + assert(e).notEqualTo(shouldHaveFailed); + }); + }); + + describe('scripts;', function() { + test.it('do not pollute the global scope', function() { + execute('var x = 1;'); + assert(execute('return typeof x;')).equalTo('undefined'); + }); + + test.it('can set global variables', function() { + execute('window.x = 1234;'); + assert(execute('return x;')).equalTo(1234); + }); + + test.it('may be defined as a function expression', function() { + assert(execute(function() { + return 1234 + 'abc'; + })).equalTo('1234abc'); + }); + }); + + describe('return values;', function() { + + test.it('returns undefined as null', function() { + assert(execute('var x; return x;')).isNull(); + }); + + test.it('can return null', function() { + assert(execute('return null;')).isNull(); + }); + + test.it('can return numbers', function() { + assert(execute('return 1234')).equalTo(1234); + assert(execute('return 3.1456')).equalTo(3.1456); + }); + + test.it('can return strings', function() { + assert(execute('return "hello"')).equalTo('hello'); + }); + + test.it('can return booleans', function() { + assert(execute('return true')).equalTo(true); + assert(execute('return false')).equalTo(false); + }); + + test.it('can return an array of primitives', function() { + execute('var x; return [1, false, null, 3.14, x]') + .then(verifyJson([1, false, null, 3.14, null])); + }); + + test.it('can return nested arrays', function() { + execute('return [[1, 2, [3]]]') + .then(verifyJson([[1, 2, [3]]])); + }); + + test.ignore(env.browsers(Browser.IE, Browser.SAFARI)). + it('can return empty object literal', function() { + execute('return {}').then(verifyJson({})); + }); + + test.it('can return object literals', function() { + execute('return {a: 1, b: false, c: null}').then(function(result) { + verifyJson(['a', 'b', 'c'])(Object.keys(result).sort()); + assert(result.a).equalTo(1); + assert(result.b).equalTo(false); + assert(result.c).isNull(); + }); + }); + + test.it('can return complex object literals', function() { + execute('return {a:{b: "hello"}}').then(verifyJson({a:{b: 'hello'}})); + }); + + test.it('can return dom elements as web elements', function() { + execute('return document.querySelector(".header.host")') + .then(function(result) { + assert(result).instanceOf(webdriver.WebElement); + assert(result.getText()).startsWith('host: '); + }); + }); + + test.it('can return array of dom elements', function() { + execute('var nodes = document.querySelectorAll(".request,.host");' + + 'return [nodes[0], nodes[1]];') + .then(function(result) { + assert(result.length).equalTo(2); + + assert(result[0]).instanceOf(webdriver.WebElement); + assert(result[0].getText()).startsWith('GET '); + + assert(result[1]).instanceOf(webdriver.WebElement); + assert(result[1].getText()).startsWith('host: '); + }); + }); + + test.it('can return a NodeList as an array of web elements', function() { + execute('return document.querySelectorAll(".request,.host");') + .then(function(result) { + assert(result.length).equalTo(2); + + assert(result[0]).instanceOf(webdriver.WebElement); + assert(result[0].getText()).startsWith('GET '); + + assert(result[1]).instanceOf(webdriver.WebElement); + assert(result[1].getText()).startsWith('host: '); + }); + }); + + test.it('can return object literal with element property', function() { + execute('return {a: document.body}').then(function(result) { + assert(result.a).instanceOf(webdriver.WebElement); + assert(result.a.getTagName()).equalTo('body'); + }); + }); + }); + + describe('parameters;', function() { + test.it('can pass numeric arguments', function() { + assert(execute('return arguments[0]', 12)).equalTo(12); + assert(execute('return arguments[0]', 3.14)).equalTo(3.14); + }); + + test.it('can pass boolean arguments', function() { + assert(execute('return arguments[0]', true)).equalTo(true); + assert(execute('return arguments[0]', false)).equalTo(false); + }); + + test.it('can pass string arguments', function() { + assert(execute('return arguments[0]', 'hi')).equalTo('hi'); + }); + + test.it('can pass null arguments', function() { + assert(execute('return arguments[0] === null', null)).equalTo(true); + assert(execute('return arguments[0]', null)).equalTo(null); + }); + + test.it('passes undefined as a null argument', function() { + var x; + assert(execute('return arguments[0] === null', x)).equalTo(true); + assert(execute('return arguments[0]', x)).equalTo(null); + }); + + test.it('can pass multiple arguments', function() { + assert(execute('return arguments.length')).equalTo(0); + assert(execute('return arguments.length', 1, 'a', false)).equalTo(3); + }); + + test.it('can return arguments object as array', function() { + execute('return arguments', 1, 'a', false).then(function(val) { + assert(val.length).equalTo(3); + assert(val[0]).equalTo(1); + assert(val[1]).equalTo('a'); + assert(val[2]).equalTo(false); + }); + }); + + test.it('can pass object literal', function() { + execute( + 'return [typeof arguments[0], arguments[0].a]', {a: 'hello'}) + .then(function(result) { + assert(result[0]).equalTo('object'); + assert(result[1]).equalTo('hello'); + }); + }); + + test.it('WebElement arguments are passed as DOM elements', function() { + var el = driver.findElement(By.tagName('div')); + assert(execute('return arguments[0].tagName.toLowerCase();', el)) + .equalTo('div'); + }); + + test.it('can pass array containing object literals', function() { + execute('return arguments[0]', [{color: "red"}]).then(function(result) { + assert(result.length).equalTo(1); + assert(result[0].color).equalTo('red'); + }); + }); + + test.it('does not modify object literal parameters', function() { + var input = {color: 'red'}; + execute('return arguments[0];', input).then(verifyJson(input)); + }); + }); + + // See https://code.google.com/p/selenium/issues/detail?id=8223. + describe('issue 8223;', function() { + describe('using for..in loops;', function() { + test.it('can return array built from for-loop index', function() { + execute(function() { + var ret = []; + for (var i = 0; i < 3; i++) { + ret.push(i); + } + return ret; + }).then(verifyJson[0, 1, 2]); + }); + + test.it('can copy input array contents', function() { + execute(function(input) { + var ret = []; + for (var i in input) { + ret.push(input[i]); + } + return ret; + }, ['fa', 'fe', 'fi']).then(verifyJson(['fa', 'fe', 'fi'])); + }); + + test.it('can iterate over input object keys', function() { + execute(function(thing) { + var ret = []; + for (var w in thing.words) { + ret.push(thing.words[w].word); + } + return ret; + }, {words: [{word: 'fa'}, {word: 'fe'}, {word: 'fi'}]}) + .then(verifyJson(['fa', 'fe', 'fi'])); + }); + + describe('recursive functions;', function() { + test.it('can build array from input', function() { + var input = ['fa', 'fe', 'fi']; + execute(function(thearray) { + var ret = []; + function build_response(thearray, ret) { + ret.push(thearray.shift()); + return (!thearray.length && ret + || build_response(thearray, ret)); + } + return build_response(thearray, ret); + }, input).then(verifyJson(input)); + }); + + test.it('can build array from elements in object', function() { + var input = {words: [{word: 'fa'}, {word: 'fe'}, {word: 'fi'}]}; + execute(function(thing) { + var ret = []; + function build_response(thing, ret) { + var item = thing.words.shift(); + ret.push(item.word); + return (!thing.words.length && ret + || build_response(thing, ret)); + } + return build_response(thing, ret); + }, input).then(verifyJson(['fa', 'fe', 'fi'])); + }); + }); + }); + }); + + }); + + function verifyJson(expected) { + return function(actual) { + assert(JSON.stringify(actual)).equalTo(JSON.stringify(expected)); + }; + } + + function execute() { + return driver.executeScript.apply(driver, arguments); + } +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/fingerprint_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/fingerprint_test.js new file mode 100644 index 0000000..5a64494 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/fingerprint_test.js @@ -0,0 +1,57 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('../testing/assert'), + test = require('../lib/test'), + Pages = test.Pages; + + +test.suite(function(env) { + var browsers = env.browsers; + + var driver; + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + describe('fingerprinting', function() { + test.it('it should fingerprint the navigator object', function() { + driver.get(Pages.simpleTestPage); + assert(driver.executeScript('return navigator.webdriver')).equalTo(true); + }); + + test.it('fingerprint must not be writable', function() { + driver.get(Pages.simpleTestPage); + assert(driver.executeScript( + 'navigator.webdriver = "ohai"; return navigator.webdriver')) + .equalTo(true); + }); + + test.it('leaves fingerprint on svg pages', function() { + driver.get(Pages.svgPage); + assert(driver.executeScript('return navigator.webdriver')).equalTo(true); + }); + }); + +// Currently only implemented in firefox. +}, {browsers: ['firefox']}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/extension_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/extension_test.js new file mode 100644 index 0000000..50936f7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/extension_test.js @@ -0,0 +1,96 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var AdmZip = require('adm-zip'), + assert = require('assert'), + crypto = require('crypto'), + fs = require('fs'), + path = require('path'); + +var extension = require('../../firefox/extension'), + io = require('../../io'), + it = require('../../testing').it; + + +var JETPACK_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/jetpack-sample.xpi'); +var NORMAL_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/sample.xpi'); + +var JETPACK_EXTENSION_ID = 'jid1-EaXX7k0wwiZR7w@jetpack'; +var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org'; + + +describe('extension', function() { + it('can install a jetpack xpi file', function() { + return io.tmpDir().then(function(dir) { + return extension.install(JETPACK_EXTENSION, dir).then(function(id) { + assert.equal(JETPACK_EXTENSION_ID, id); + var file = path.join(dir, id + '.xpi'); + assert.ok(fs.existsSync(file), 'no such file: ' + file); + assert.ok(!fs.statSync(file).isDirectory()); + + var copiedSha1 = crypto.createHash('sha1') + .update(fs.readFileSync(file)) + .digest('hex'); + + var goldenSha1 = crypto.createHash('sha1') + .update(fs.readFileSync(JETPACK_EXTENSION)) + .digest('hex'); + + assert.equal(copiedSha1, goldenSha1); + }); + }); + }); + + it('can install a normal xpi file', function() { + return io.tmpDir().then(function(dir) { + return extension.install(NORMAL_EXTENSION, dir).then(function(id) { + assert.equal(NORMAL_EXTENSION_ID, id); + + var file = path.join(dir, NORMAL_EXTENSION_ID); + assert.ok(fs.statSync(file).isDirectory()); + + assert.ok(fs.existsSync(path.join(file, 'chrome.manifest'))); + assert.ok(fs.existsSync(path.join(file, 'content/overlay.xul'))); + assert.ok(fs.existsSync(path.join(file, 'content/overlay.js'))); + assert.ok(fs.existsSync(path.join(file, 'install.rdf'))); + }); + }); + }); + + it('can install an extension from a directory', function() { + return io.tmpDir().then(function(srcDir) { + var buf = fs.readFileSync(NORMAL_EXTENSION); + new AdmZip(buf).extractAllTo(srcDir, true); + return io.tmpDir().then(function(dstDir) { + return extension.install(srcDir, dstDir).then(function(id) { + assert.equal(NORMAL_EXTENSION_ID, id); + + var dir = path.join(dstDir, NORMAL_EXTENSION_ID); + + assert.ok(fs.existsSync(path.join(dir, 'chrome.manifest'))); + assert.ok(fs.existsSync(path.join(dir, 'content/overlay.xul'))); + assert.ok(fs.existsSync(path.join(dir, 'content/overlay.js'))); + assert.ok(fs.existsSync(path.join(dir, 'install.rdf'))); + }); + }); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/firefox_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/firefox_test.js new file mode 100644 index 0000000..0a32940 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/firefox_test.js @@ -0,0 +1,183 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var path = require('path'); + +var firefox = require('../../firefox'), + io = require('../../io'), + test = require('../../lib/test'), + assert = require('../../testing/assert'); + + +var JETPACK_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/jetpack-sample.xpi'); +var NORMAL_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/sample.xpi'); + + +test.suite(function(env) { + describe('firefox', function() { + describe('Options', function() { + var driver; + + test.beforeEach(function() { + driver = null; + }); + + test.afterEach(function() { + if (driver) { + driver.quit(); + } + }); + + test.it('can start Firefox with custom preferences', function() { + var profile = new firefox.Profile(); + profile.setPreference('general.useragent.override', 'foo;bar'); + + var options = new firefox.Options().setProfile(profile); + + driver = env.builder(). + setFirefoxOptions(options). + build(); + + driver.get('data:text/html,
      content
      '); + + var userAgent = driver.executeScript( + 'return window.navigator.userAgent'); + assert(userAgent).equalTo('foo;bar'); + }); + + test.it('can start Firefox with a jetpack extension', function() { + var profile = new firefox.Profile(); + profile.addExtension(JETPACK_EXTENSION); + + var options = new firefox.Options().setProfile(profile); + + driver = env.builder(). + setFirefoxOptions(options). + build(); + + loadJetpackPage(driver, + 'data:text/html;charset=UTF-8,
      content
      '); + assert(driver.findElement({id: 'jetpack-sample-banner'}).getText()) + .equalTo('Hello, world!'); + }); + + test.it('can start Firefox with a normal extension', function() { + var profile = new firefox.Profile(); + profile.addExtension(NORMAL_EXTENSION); + + var options = new firefox.Options().setProfile(profile); + + driver = env.builder(). + setFirefoxOptions(options). + build(); + + driver.get('data:text/html,
      content
      '); + assert(driver.findElement({id: 'sample-extension-footer'}).getText()) + .equalTo('Goodbye'); + }); + + test.it('can start Firefox with multiple extensions', function() { + var profile = new firefox.Profile(); + profile.addExtension(JETPACK_EXTENSION); + profile.addExtension(NORMAL_EXTENSION); + + var options = new firefox.Options().setProfile(profile); + + driver = env.builder(). + setFirefoxOptions(options). + build(); + + loadJetpackPage(driver, + 'data:text/html;charset=UTF-8,
      content
      '); + assert(driver.findElement({id: 'jetpack-sample-banner'}).getText()) + .equalTo('Hello, world!'); + assert(driver.findElement({id: 'sample-extension-footer'}).getText()) + .equalTo('Goodbye'); + }); + + function loadJetpackPage(driver, url) { + // On linux the jetpack extension does not always run the first time + // we load a page. If this happens, just reload the page (a simple + // refresh doesn't appear to work). + driver.wait(function() { + driver.get(url); + return driver.isElementPresent({id: 'jetpack-sample-banner'}); + }, 3000); + } + }); + + describe('profile management', function() { + var driver; + + test.beforeEach(function() { + driver = null; + }); + + test.afterEach(function() { + if (driver) { + driver.quit(); + } + }); + + test.ignore(env.isRemote). + it('deletes the temp profile on quit', function() { + driver = env.builder().build(); + + var profilePath = driver.call(function() { + var path = driver.profilePath_; + assert(io.exists(path)).isTrue(); + return path; + }); + + return driver.quit().then(function() { + driver = null; + return profilePath; + }).then(function(path) { + assert(io.exists(path)).isFalse(); + }); + }); + }); + + describe('binary management', function() { + var driver1, driver2; + + test.ignore(env.isRemote). + it('can start multiple sessions with single binary instance', function() { + var options = new firefox.Options().setBinary(new firefox.Binary); + env.builder().setFirefoxOptions(options); + driver1 = env.builder().build(); + driver2 = env.builder().build(); + // Ok if this doesn't fail. + }); + + test.afterEach(function() { + if (driver1) { + driver1.quit(); + } + + if (driver2) { + driver2.quit(); + } + }); + }); + + }); +}, {browsers: ['firefox']}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/profile_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/profile_test.js new file mode 100644 index 0000000..feaa42f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/firefox/profile_test.js @@ -0,0 +1,187 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var AdmZip = require('adm-zip'), + assert = require('assert'), + fs = require('fs'), + path = require('path'); + +var promise = require('../..').promise, + Profile = require('../../firefox/profile').Profile, + decode = require('../../firefox/profile').decode, + loadUserPrefs = require('../../firefox/profile').loadUserPrefs, + io = require('../../io'), + it = require('../../testing').it; + + +var JETPACK_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/jetpack-sample.xpi'); +var NORMAL_EXTENSION = path.join(__dirname, + '../../lib/test/data/firefox/sample.xpi'); + +var JETPACK_EXTENSION_ID = 'jid1-EaXX7k0wwiZR7w@jetpack.xpi'; +var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org'; +var WEBDRIVER_EXTENSION_ID = 'fxdriver@googlecode.com'; + + + +describe('Profile', function() { + describe('setPreference', function() { + it('allows setting custom properties', function() { + var profile = new Profile(); + assert.equal(undefined, profile.getPreference('foo')); + + profile.setPreference('foo', 'bar'); + assert.equal('bar', profile.getPreference('foo')); + }); + + it('allows overriding mutable properties', function() { + var profile = new Profile(); + assert.equal('about:blank', profile.getPreference('browser.newtab.url')); + + profile.setPreference('browser.newtab.url', 'http://www.example.com'); + assert.equal('http://www.example.com', + profile.getPreference('browser.newtab.url')); + }); + + it('throws if setting a frozen preference', function() { + var profile = new Profile(); + assert.throws(function() { + profile.setPreference('app.update.auto', true); + }); + }); + }); + + describe('writeToDisk', function() { + it('copies template directory recursively', function() { + var templateDir; + return io.tmpDir().then(function(td) { + templateDir = td; + var foo = path.join(templateDir, 'foo'); + fs.writeFileSync(foo, 'Hello, world'); + + var bar = path.join(templateDir, 'subfolder/bar'); + fs.mkdirSync(path.dirname(bar)); + fs.writeFileSync(bar, 'Goodbye, world!'); + + return new Profile(templateDir).writeToDisk(); + }).then(function(profileDir) { + assert.notEqual(profileDir, templateDir); + + assert.equal('Hello, world', + fs.readFileSync(path.join(profileDir, 'foo'))); + assert.equal('Goodbye, world!', + fs.readFileSync(path.join(profileDir, 'subfolder/bar'))); + }); + }); + + it('does not copy lock files', function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'parent.lock'), 'lock'); + fs.writeFileSync(path.join(dir, 'lock'), 'lock'); + fs.writeFileSync(path.join(dir, '.parentlock'), 'lock'); + return new Profile(dir).writeToDisk(); + }).then(function(dir) { + assert.ok(fs.existsSync(dir)); + assert.ok(!fs.existsSync(path.join(dir, 'parent.lock'))); + assert.ok(!fs.existsSync(path.join(dir, 'lock'))); + assert.ok(!fs.existsSync(path.join(dir, '.parentlock'))); + }); + }); + + describe('user.js', function() { + + it('writes defaults', function() { + return new Profile().writeToDisk().then(function(dir) { + return loadUserPrefs(path.join(dir, 'user.js')); + }).then(function(prefs) { + // Just check a few. + assert.equal(false, prefs['app.update.auto']); + assert.equal(true, prefs['browser.EULA.override']); + assert.equal(false, prefs['extensions.update.enabled']); + assert.equal('about:blank', prefs['browser.newtab.url']); + assert.equal(30, prefs['dom.max_script_run_time']); + }); + }); + + it('merges template user.js into preferences', function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'user.js'), [ + 'user_pref("browser.newtab.url", "http://www.example.com")', + 'user_pref("dom.max_script_run_time", 1234)' + ].join('\n')); + + return new Profile(dir).writeToDisk(); + }).then(function(profile) { + return loadUserPrefs(path.join(profile, 'user.js')); + }).then(function(prefs) { + assert.equal('http://www.example.com', prefs['browser.newtab.url']); + assert.equal(1234, prefs['dom.max_script_run_time']); + }); + }); + + it('ignores frozen preferences when merging template user.js', + function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'user.js'), + 'user_pref("app.update.auto", true)'); + return new Profile(dir).writeToDisk(); + }).then(function(profile) { + return loadUserPrefs(path.join(profile, 'user.js')); + }).then(function(prefs) { + assert.equal(false, prefs['app.update.auto']); + }); + }); + }); + + describe('extensions', function() { + it('are copied into new profile directory', function() { + var profile = new Profile(); + profile.addExtension(JETPACK_EXTENSION); + profile.addExtension(NORMAL_EXTENSION); + + return profile.writeToDisk().then(function(dir) { + dir = path.join(dir, 'extensions'); + assert.ok(fs.existsSync(path.join(dir, JETPACK_EXTENSION_ID))); + assert.ok(fs.existsSync(path.join(dir, NORMAL_EXTENSION_ID))); + assert.ok(fs.existsSync(path.join(dir, WEBDRIVER_EXTENSION_ID))); + }); + }); + }); + }); + + describe('encode', function() { + it('excludes the bundled WebDriver extension', function() { + return new Profile().encode().then(function(data) { + return decode(data); + }).then(function(dir) { + assert.ok(fs.existsSync(path.join(dir, 'user.js'))); + assert.ok(fs.existsSync(path.join(dir, 'extensions'))); + return loadUserPrefs(path.join(dir, 'user.js')); + }).then(function(prefs) { + // Just check a few. + assert.equal(false, prefs['app.update.auto']); + assert.equal(true, prefs['browser.EULA.override']); + assert.equal(false, prefs['extensions.update.enabled']); + assert.equal('about:blank', prefs['browser.newtab.url']); + assert.equal(30, prefs['dom.max_script_run_time']); + }); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/http/http_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/http/http_test.js new file mode 100644 index 0000000..b121f85 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/http/http_test.js @@ -0,0 +1,443 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); +var http = require('http'); +var sinon = require('sinon'); +var url = require('url'); + +var error = require('../../error'); +var Executor = require('../../http').Executor; +var HttpClient = require('../../http').HttpClient; +var HttpRequest = require('../../http').Request; +var HttpResponse = require('../../http').Response; +var buildPath = require('../../http').buildPath; +var Command = require('../../lib/command').Command; +var CommandName = require('../../lib/command').Name; +var Server = require('../../lib/test/httpserver').Server; +var promise = require('../..').promise; + +describe('buildPath', function() { + it('properly replaces path segments with command parameters', function() { + var parameters = {'sessionId':'foo', 'url':'http://www.google.com'}; + var finalPath = buildPath('/session/:sessionId/url', parameters); + assert.equal(finalPath, '/session/foo/url'); + assert.deepEqual(parameters, {'url':'http://www.google.com'}); + }); + + it('handles web element references', function() { + var parameters = {'sessionId':'foo', 'id': {}}; + parameters['id']['ELEMENT'] = 'bar'; + + var finalPath = buildPath( + '/session/:sessionId/element/:id/click', parameters); + assert.equal(finalPath, '/session/foo/element/bar/click'); + assert.deepEqual(parameters, {}); + }); + + it('throws if missing a parameter', function() { + assert.throws( + () => buildPath('/session/:sessionId', {}), + function(err) { + return err instanceof error.InvalidArgumentError + && 'Missing required parameter: sessionId' === err.message; + }); + + assert.throws( + () => buildPath('/session/:sessionId/element/:id', {'sessionId': 'foo'}), + function(err) { + return err instanceof error.InvalidArgumentError + && 'Missing required parameter: id' === err.message; + }); + }); + + it('does not match on segments that do not start with a colon', function() { + assert.equal(buildPath('/session/foo:bar/baz', {}), '/session/foo:bar/baz'); + }); +}); + +describe('Executor', function() { + let executor; + let send; + + beforeEach(function setUp() { + let client = new HttpClient('http://www.example.com'); + send = sinon.stub(client, 'send'); + executor = new Executor(client); + }); + + it('rejects unrecognized commands', function() { + assert.throws( + () => executor.execute(new Command('fake-name')), + function (err) { + return err instanceof error.UnknownCommandError + && 'Unrecognized command: fake-name' === err.message; + }); + }); + + it('rejects promise if client fails to send request', function() { + let error = new Error('boom'); + send.returns(Promise.reject(error)); + return assertFailsToSend(new Command(CommandName.NEW_SESSION)) + .then(function(e) { + assert.strictEqual(error, e); + assertSent( + 'POST', '/session', {}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + it('can execute commands with no URL parameters', function() { + send.returns(Promise.resolve(new HttpResponse(200, {}, ''))); + + let command = new Command(CommandName.NEW_SESSION); + return assertSendsSuccessfully(command).then(function(response) { + assertSent( + 'POST', '/session', {}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + it('rejects commands missing URL parameters', function() { + let command = + new Command(CommandName.FIND_CHILD_ELEMENT). + setParameter('sessionId', 's123'). + // Let this be missing: setParameter('id', {'ELEMENT': 'e456'}). + setParameter('using', 'id'). + setParameter('value', 'foo'); + + assert.throws( + () => executor.execute(command), + function(err) { + return err instanceof error.InvalidArgumentError + && 'Missing required parameter: id' === err.message; + }); + assert.ok(!send.called); + }); + + it('replaces URL parameters with command parameters', function() { + var command = new Command(CommandName.GET). + setParameter('sessionId', 's123'). + setParameter('url', 'http://www.google.com'); + + send.returns(Promise.resolve(new HttpResponse(200, {}, ''))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent( + 'POST', '/session/s123/url', {'url': 'http://www.google.com'}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + it('returns parsed JSON response', function() { + var responseObj = { + 'status': error.ErrorCode.SUCCESS, + 'value': 'http://www.google.com' + }; + + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + + send.returns(Promise.resolve( + new HttpResponse(200, {}, JSON.stringify(responseObj)))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, responseObj); + }); + }); + + it('returns success for 2xx with body as value when not json', function() { + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + send.returns(Promise.resolve( + new HttpResponse(200, {}, 'hello, world\r\ngoodbye, world!'))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, { + 'status': error.ErrorCode.SUCCESS, + 'value': 'hello, world\ngoodbye, world!' + }); + }); + }); + + it('returns success for 2xx with invalid JSON body', function() { + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + send.returns(Promise.resolve( + new HttpResponse(200, {}, '['))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, { + 'status': error.ErrorCode.SUCCESS, + 'value': '[' + }); + }); + }); + + it('returns unknown command for 404 with body as value when not json', + function() { + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + send.returns(Promise.resolve( + new HttpResponse(404, {}, 'hello, world\r\ngoodbye, world!'))); + + return assertSendsSuccessfully(command, function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, { + 'status': error.ErrorCode.UNKNOWN_COMMAND, + 'value': 'hello, world\ngoodbye, world!' + }); + }); + }); + + it('returnsUnknownErrorForGenericErrorCodeWithBodyAsValueWhenNotJSON', + function() { + var command = new Command(CommandName.GET_CURRENT_URL). + setParameter('sessionId', 's123'); + + send.returns(Promise.resolve( + new HttpResponse(500, {}, 'hello, world\r\ngoodbye, world!'))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/session/s123/url', {}, + [['Accept', 'application/json; charset=utf-8']]); + assert.deepEqual(response, { + 'status': error.ErrorCode.UNKNOWN_ERROR, + 'value': 'hello, world\ngoodbye, world!' + }); + }); + }); + + it('canDefineNewCommands', function() { + executor.defineCommand('greet', 'GET', '/person/:name'); + + var command = new Command('greet'). + setParameter('name', 'Bob'); + + send.returns(Promise.resolve(new HttpResponse(200, {}, ''))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('GET', '/person/Bob', {}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + it('canRedefineStandardCommands', function() { + executor.defineCommand(CommandName.GO_BACK, 'POST', '/custom/back'); + + var command = new Command(CommandName.GO_BACK). + setParameter('times', 3); + + send.returns(Promise.resolve(new HttpResponse(200, {}, ''))); + + return assertSendsSuccessfully(command).then(function(response) { + assertSent('POST', '/custom/back', {'times': 3}, + [['Accept', 'application/json; charset=utf-8']]); + }); + }); + + function entries(map) { + let entries = []; + for (let e of map.entries()) { + entries.push(e); + } + return entries; + } + + function assertSent(method, path, data, headers) { + assert.ok(send.calledWith(sinon.match(function(value) { + assert.equal(value.method, method); + assert.equal(value.path, path); + assert.deepEqual(value.data, data); + assert.deepEqual(entries(value.headers), headers); + return true; + }))); + } + + function assertSendsSuccessfully(command) { + return executor.execute(command).then(function(response) { + return response; + }); + } + + function assertFailsToSend(command, opt_onError) { + return executor.execute(command).then( + () => {throw Error('should have failed')}, + (e) => {return e}); + } +}); + +describe('HttpClient', function() { + this.timeout(4 * 1000); + + var server = new Server(function(req, res) { + if (req.method == 'GET' && req.url == '/echo') { + res.writeHead(200, req.headers); + res.end(); + + } else if (req.method == 'GET' && req.url == '/redirect') { + res.writeHead(303, {'Location': server.url('/hello')}); + res.end(); + + } else if (req.method == 'GET' && req.url == '/hello') { + res.writeHead(200, {'content-type': 'text/plain'}); + res.end('hello, world!'); + + } else if (req.method == 'GET' && req.url == '/badredirect') { + res.writeHead(303, {}); + res.end(); + + } else if (req.method == 'GET' && req.url == '/protected') { + var denyAccess = function() { + res.writeHead(401, {'WWW-Authenticate': 'Basic realm="test"'}); + res.end('Access denied'); + }; + + var basicAuthRegExp = /^\s*basic\s+([a-z0-9\-\._~\+\/]+)=*\s*$/i + var auth = req.headers.authorization; + var match = basicAuthRegExp.exec(auth || ''); + if (!match) { + denyAccess(); + return; + } + + var userNameAndPass = new Buffer(match[1], 'base64').toString(); + var parts = userNameAndPass.split(':', 2); + if (parts[0] !== 'genie' && parts[1] !== 'bottle') { + denyAccess(); + return; + } + + res.writeHead(200, {'content-type': 'text/plain'}); + res.end('Access granted!'); + + } else if (req.method == 'GET' && req.url == '/proxy') { + res.writeHead(200, req.headers); + res.end(); + + } else if (req.method == 'GET' && req.url == '/proxy/redirect') { + res.writeHead(303, {'Location': '/proxy'}); + res.end(); + + } else { + res.writeHead(404, {}); + res.end(); + } + }); + + before(function() { + return server.start(); + }); + + after(function() { + return server.stop(); + }); + + it('can send a basic HTTP request', function() { + var request = new HttpRequest('GET', '/echo'); + request.headers.set('Foo', 'Bar'); + + var agent = new http.Agent(); + agent.maxSockets = 1; // Only making 1 request. + + var client = new HttpClient(server.url(), agent); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('content-length'), '0'); + assert.equal(response.headers.get('connection'), 'keep-alive'); + assert.equal(response.headers.get('host'), server.host()); + + assert.equal(request.headers.get('Foo'), 'Bar'); + assert.equal( + request.headers.get('Accept'), 'application/json; charset=utf-8'); + }); + }); + + it('can use basic auth', function() { + var parsed = url.parse(server.url()); + parsed.auth = 'genie:bottle'; + + var client = new HttpClient(url.format(parsed)); + var request = new HttpRequest('GET', '/protected'); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('content-type'), 'text/plain'); + assert.equal(response.body, 'Access granted!'); + }); + }); + + it('fails requests missing required basic auth', function() { + var client = new HttpClient(server.url()); + var request = new HttpRequest('GET', '/protected'); + return client.send(request).then(function(response) { + assert.equal(401, response.status); + assert.equal(response.body, 'Access denied'); + }); + }); + + it('automatically follows redirects', function() { + var request = new HttpRequest('GET', '/redirect'); + var client = new HttpClient(server.url()); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('content-type'), 'text/plain'); + assert.equal(response.body, 'hello, world!'); + }); + }); + + it('handles malformed redirect responses', function() { + var request = new HttpRequest('GET', '/badredirect'); + var client = new HttpClient(server.url()); + return client.send(request).then(assert.fail, function(err) { + assert.ok(/Failed to parse "Location"/.test(err.message), + 'Not the expected error: ' + err.message); + }); + }); + + it('proxies requests through the webdriver proxy', function() { + var request = new HttpRequest('GET', '/proxy'); + var client = new HttpClient( + 'http://another.server.com', undefined, server.url()); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('host'), 'another.server.com'); + }); + }); + + it('proxies requests through the webdriver proxy on redirect', function() { + var request = new HttpRequest('GET', '/proxy/redirect'); + var client = new HttpClient( + 'http://another.server.com', undefined, server.url()); + return client.send(request).then(function(response) { + assert.equal(200, response.status); + assert.equal(response.headers.get('host'), 'another.server.com'); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/http/util_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/http/util_test.js new file mode 100644 index 0000000..ca250c6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/http/util_test.js @@ -0,0 +1,184 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + http = require('http'); + +var error = require('../../error'); +var util = require('../../http/util'); + +describe('selenium-webdriver/http/util', function() { + + var server, baseUrl; + + var status, value, responseCode; + + function startServer(done) { + if (server) return done(); + + server = http.createServer(function(req, res) { + var data = JSON.stringify({status: status, value: value}); + res.writeHead(responseCode, { + 'Content-Type': 'application/json; charset=utf-8', + 'Content-Length': Buffer.byteLength(data, 'utf8') + }); + res.end(data); + }); + + server.listen(0, '127.0.0.1', function(e) { + if (e) return done(e); + + var addr = server.address(); + baseUrl = 'http://' + addr.address + ':' + addr.port; + done(); + }); + } + + function killServer(done) { + if (!server) return done(); + server.close(done); + server = null; + } + + after(killServer); + + beforeEach(function(done) { + status = 0; + value = 'abc123'; + responseCode = 200; + startServer(done); + }); + + describe('#getStatus', function() { + it('should return value field on success', function() { + return util.getStatus(baseUrl).then(function(response) { + assert.equal('abc123', response); + }); + }); + + it('should fail if response object is not success', function() { + status = 1; + return util.getStatus(baseUrl).then(function() { + throw Error('expected a failure'); + }, function(err) { + assert.ok(err instanceof error.WebDriverError); + assert.equal(err.code, error.WebDriverError.code); + assert.equal(err.message, value); + }); + }); + + it('should fail if the server is not listening', function(done) { + killServer(function(e) { + if(e) return done(e); + + util.getStatus(baseUrl).then(function() { + done(Error('expected a failure')); + }, function() { + // Expected. + done(); + }); + }); + }); + + it('should fail if HTTP status is not 200', function() { + status = 1; + responseCode = 404; + return util.getStatus(baseUrl).then(function() { + throw Error('expected a failure'); + }, function(err) { + assert.ok(err instanceof error.WebDriverError); + assert.equal(err.code, error.WebDriverError.code); + assert.equal(err.message, value); + }); + }); + }); + + describe('#waitForServer', function() { + it('resolves when server is ready', function() { + status = 1; + setTimeout(function() { status = 0; }, 50); + return util.waitForServer(baseUrl, 100); + }); + + it('should fail if server does not become ready', function() { + status = 1; + return util.waitForServer(baseUrl, 50). + then(function() {throw Error('Expected to time out')}, + function() {}); + }); + + it('can cancel wait', function(done) { + status = 1; + var err = Error('cancelled!'); + var isReady = util.waitForServer(baseUrl, 200). + then(function() { done('Did not expect to succeed'); }). + then(null, function(e) { + assert.equal('cancelled!', e.message); + }). + then(function() { done(); }, done); + + setTimeout(function() { + isReady.cancel('cancelled!'); + }, 50); + }); + }); + + describe('#waitForUrl', function() { + it('succeeds when URL returns 2xx', function(done) { + responseCode = 404; + setTimeout(function() { responseCode = 200; }, 50); + + util.waitForUrl(baseUrl, 200). + then(function() {}). // done needs no argument to pass. + thenFinally(done); + }); + + it('fails if URL always returns 4xx', function(done) { + responseCode = 404; + + util.waitForUrl(baseUrl, 50). + then(function() { done('Expected to time out'); }, + function() { done(); }); + }); + + it('fails if cannot connect to server', function(done) { + killServer(function(e) { + if (e) return done(e); + + util.waitForUrl(baseUrl, 50). + then(function() { done('Expected to time out'); }, + function() { done(); }); + }); + }); + + it('can cancel wait', function(done) { + responseCode = 404; + var isReady = util.waitForUrl(baseUrl, 200). + then(function() { done('Did not expect to succeed'); }). + then(null, function(e) { + assert.equal('cancelled!', e.message); + }). + then(function() { done(); }, done); + + setTimeout(function() { + isReady.cancel('cancelled!'); + }, 50); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/io_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/io_test.js new file mode 100644 index 0000000..bc2b457 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/io_test.js @@ -0,0 +1,232 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + tmp = require('tmp'); + +var io = require('../io'), + before = require('../testing').before, + beforeEach = require('../testing').beforeEach, + it = require('../testing').it; + + +describe('io', function() { + describe('copy', function() { + var tmpDir; + + before(function() { + return io.tmpDir().then(function(d) { + tmpDir = d; + + fs.writeFileSync(path.join(d, 'foo'), 'Hello, world'); + }); + }); + + it('can copy one file to another', function() { + return io.tmpFile().then(function(f) { + return io.copy(path.join(tmpDir, 'foo'), f).then(function(p) { + assert.equal(p, f); + assert.equal('Hello, world', fs.readFileSync(p)); + }); + }); + }); + + it('can copy symlink to destination', function() { + if (process.platform === 'win32') { + return; // No symlinks on windows. + } + fs.symlinkSync( + path.join(tmpDir, 'foo'), + path.join(tmpDir, 'symlinked-foo')); + return io.tmpFile().then(function(f) { + return io.copy(path.join(tmpDir, 'symlinked-foo'), f).then(function(p) { + assert.equal(p, f); + assert.equal('Hello, world', fs.readFileSync(p)); + }); + }); + }); + + it('fails if given a directory as a source', function() { + return io.tmpFile().then(function(f) { + return io.copy(tmpDir, f); + }).then(function() { + throw Error('Should have failed with a type error'); + }, function() { + // Do nothing; expected. + }); + }); + }); + + describe('copyDir', function() { + it('copies recursively', function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'file1'), 'hello'); + fs.mkdirSync(path.join(dir, 'sub')); + fs.mkdirSync(path.join(dir, 'sub/folder')); + fs.writeFileSync(path.join(dir, 'sub/folder/file2'), 'goodbye'); + + return io.tmpDir().then(function(dst) { + return io.copyDir(dir, dst).then(function(ret) { + assert.equal(dst, ret); + + assert.equal('hello', + fs.readFileSync(path.join(dst, 'file1'))); + assert.equal('goodbye', + fs.readFileSync(path.join(dst, 'sub/folder/file2'))); + }); + }); + }); + }); + + it('creates destination dir if necessary', function() { + return io.tmpDir().then(function(srcDir) { + fs.writeFileSync(path.join(srcDir, 'foo'), 'hi'); + return io.tmpDir().then(function(dstDir) { + return io.copyDir(srcDir, path.join(dstDir, 'sub')); + }); + }).then(function(p) { + assert.equal('sub', path.basename(p)); + assert.equal('hi', fs.readFileSync(path.join(p, 'foo'))); + }); + }); + + it('supports regex exclusion filter', function() { + return io.tmpDir().then(function(src) { + fs.writeFileSync(path.join(src, 'foo'), 'a'); + fs.writeFileSync(path.join(src, 'bar'), 'b'); + fs.writeFileSync(path.join(src, 'baz'), 'c'); + fs.mkdirSync(path.join(src, 'sub')); + fs.writeFileSync(path.join(src, 'sub/quux'), 'd'); + fs.writeFileSync(path.join(src, 'sub/quot'), 'e'); + + return io.tmpDir().then(function(dst) { + return io.copyDir(src, dst, /(bar|quux)/); + }); + }).then(function(dir) { + assert.equal('a', fs.readFileSync(path.join(dir, 'foo'))); + assert.equal('c', fs.readFileSync(path.join(dir, 'baz'))); + assert.equal('e', fs.readFileSync(path.join(dir, 'sub/quot'))); + + assert.ok(!fs.existsSync(path.join(dir, 'bar'))); + assert.ok(!fs.existsSync(path.join(dir, 'sub/quux'))); + }); + }); + + it('supports exclusion filter function', function() { + return io.tmpDir().then(function(src) { + fs.writeFileSync(path.join(src, 'foo'), 'a'); + fs.writeFileSync(path.join(src, 'bar'), 'b'); + fs.writeFileSync(path.join(src, 'baz'), 'c'); + fs.mkdirSync(path.join(src, 'sub')); + fs.writeFileSync(path.join(src, 'sub/quux'), 'd'); + fs.writeFileSync(path.join(src, 'sub/quot'), 'e'); + + return io.tmpDir().then(function(dst) { + return io.copyDir(src, dst, function(f) { + return f !== path.join(src, 'foo') + && f !== path.join(src, 'sub/quot'); + }); + }); + }).then(function(dir) { + assert.equal('b', fs.readFileSync(path.join(dir, 'bar'))); + assert.equal('c', fs.readFileSync(path.join(dir, 'baz'))); + assert.equal('d', fs.readFileSync(path.join(dir, 'sub/quux'))); + + assert.ok(!fs.existsSync(path.join(dir, 'foo'))); + assert.ok(!fs.existsSync(path.join(dir, 'sub/quot'))); + }); + }); + }); + + describe('exists', function() { + var dir; + + before(function() { + return io.tmpDir().then(function(d) { + dir = d; + }); + }); + + it('works for directories', function() { + return io.exists(dir).then(assert.ok); + }); + + it('works for files', function() { + var file = path.join(dir, 'foo'); + fs.writeFileSync(file, ''); + return io.exists(file).then(assert.ok); + }); + + it('does not return a rejected promise if file does not exist', function() { + return io.exists(path.join(dir, 'not-there')).then(function(exists) { + assert.ok(!exists); + }); + }); + }); + + describe('unlink', function() { + var dir; + + before(function() { + return io.tmpDir().then(function(d) { + dir = d; + }); + }); + + it('silently succeeds if the path does not exist', function() { + return io.unlink(path.join(dir, 'not-there')); + }); + + it('deletes files', function() { + var file = path.join(dir, 'foo'); + fs.writeFileSync(file, ''); + return io.exists(file).then(assert.ok).then(function() { + return io.unlink(file); + }).then(function() { + return io.exists(file); + }).then(function(exists) { + return assert.ok(!exists); + }); + }); + }); + + describe('rmDir', function() { + it('succeeds if the designated directory does not exist', function() { + return io.tmpDir().then(function(d) { + return io.rmDir(path.join(d, 'i/do/not/exist')); + }); + }); + + it('deletes recursively', function() { + return io.tmpDir().then(function(dir) { + fs.writeFileSync(path.join(dir, 'file1'), 'hello'); + fs.mkdirSync(path.join(dir, 'sub')); + fs.mkdirSync(path.join(dir, 'sub/folder')); + fs.writeFileSync(path.join(dir, 'sub/folder/file2'), 'goodbye'); + + return io.rmDir(dir).then(function() { + assert.ok(!fs.existsSync(dir)); + assert.ok(!fs.existsSync(path.join(dir, 'sub/folder/file2'))); + }); + }); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/by_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/by_test.js new file mode 100644 index 0000000..c4bd2f4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/by_test.js @@ -0,0 +1,127 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); +var by = require('../../lib/by'); + +describe('by', function() { + describe('By', function() { + describe('className', function() { + it('delegates to By.css', function() { + let locator = by.By.className('foo'); + assert.equal('css selector', locator.using); + assert.equal('.foo', locator.value); + }); + + it('escapes class name', function() { + let locator = by.By.className('foo#bar'); + assert.equal('css selector', locator.using); + assert.equal('.foo\\#bar', locator.value); + }); + + it('translates compound class names', function() { + let locator = by.By.className('a b'); + assert.equal('css selector', locator.using); + assert.equal('.a.b', locator.value); + + locator = by.By.className(' x y z-1 "g" '); + assert.equal('css selector', locator.using); + assert.equal('.x.y.z-1.\\"g\\"', locator.value); + }); + }); + + describe('id', function() { + it('delegates to By.css', function() { + let locator = by.By.id('foo'); + assert.equal('css selector', locator.using); + assert.equal('*[id="foo"]', locator.value); + }); + + it('escapes the ID', function() { + let locator = by.By.id('foo#bar'); + assert.equal('css selector', locator.using); + assert.equal('*[id="foo\\#bar"]', locator.value); + }); + }); + + describe('name', function() { + it('delegates to By.css', function() { + let locator = by.By.name('foo') + assert.equal('css selector', locator.using); + assert.equal('*[name="foo"]', locator.value); + }); + + it('escapes the name', function() { + let locator = by.By.name('foo"bar"') + assert.equal('css selector', locator.using); + assert.equal('*[name="foo\\"bar\\""]', locator.value); + }); + }); + }); + + describe('checkedLocator', function() { + it('accepts class name', function() { + let locator = by.checkedLocator({className: 'foo'}); + assert.equal('css selector', locator.using); + assert.equal('.foo', locator.value); + }); + + it('accepts css', function() { + let locator = by.checkedLocator({css: 'a > b'}); + assert.equal('css selector', locator.using); + assert.equal('a > b', locator.value); + }); + + it('accepts id', function() { + let locator = by.checkedLocator({id: 'foobar'}); + assert.equal('css selector', locator.using); + assert.equal('*[id="foobar"]', locator.value); + }); + + it('accepts linkText', function() { + let locator = by.checkedLocator({linkText: 'hello'}); + assert.equal('link text', locator.using); + assert.equal('hello', locator.value); + }); + + it('accepts name', function() { + let locator = by.checkedLocator({name: 'foobar'}); + assert.equal('css selector', locator.using); + assert.equal('*[name="foobar"]', locator.value); + }); + + it('accepts partialLinkText', function() { + let locator = by.checkedLocator({partialLinkText: 'hello'}); + assert.equal('partial link text', locator.using); + assert.equal('hello', locator.value); + }); + + it('accepts tagName', function() { + let locator = by.checkedLocator({tagName: 'div'}); + assert.equal('css selector', locator.using); + assert.equal('div', locator.value); + }); + + it('accepts xpath', function() { + let locator = by.checkedLocator({xpath: '//div[1]'}); + assert.equal('xpath', locator.using); + assert.equal('//div[1]', locator.value); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/capabilities_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/capabilities_test.js new file mode 100644 index 0000000..78823d7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/capabilities_test.js @@ -0,0 +1,84 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const Capabilities = require('../../lib/capabilities').Capabilities; +const Symbols = require('../../lib/symbols'); + +const assert = require('assert'); + +describe('Capabilities', function() { + it('can set and unset a capability', function() { + let caps = new Capabilities(); + assert.equal(undefined, caps.get('foo')); + assert.ok(!caps.has('foo')); + + caps.set('foo', 'bar'); + assert.equal('bar', caps.get('foo')); + assert.ok(caps.has('foo')); + + caps.set('foo', null); + assert.equal(null, caps.get('foo')); + assert.ok(caps.has('foo')); + }); + + it('requires string capability keys', function() { + let caps = new Capabilities(); + assert.throws(() => caps.set({}, 'hi')); + }); + + it('can merge capabilities', function() { + let caps1 = new Capabilities() + .set('foo', 'bar') + .set('color', 'red'); + + let caps2 = new Capabilities() + .set('color', 'green'); + + assert.equal('bar', caps1.get('foo')); + assert.equal('red', caps1.get('color')); + assert.equal('green', caps2.get('color')); + assert.equal(undefined, caps2.get('foo')); + + caps2.merge(caps1); + assert.equal('bar', caps1.get('foo')); + assert.equal('red', caps1.get('color')); + assert.equal('red', caps2.get('color')); + assert.equal('bar', caps2.get('foo')); + }); + + it('can be initialized from a hash object', function() { + let caps = new Capabilities({'one': 123, 'abc': 'def'}); + assert.equal(123, caps.get('one')); + assert.equal('def', caps.get('abc')); + }); + + it('can be initialized from a map', function() { + let m = new Map([['one', 123], ['abc', 'def']]); + + let caps = new Capabilities(m); + assert.equal(123, caps.get('one')); + assert.equal('def', caps.get('abc')); + }); + + it('can be serialized', function() { + let m = new Map([['one', 123], ['abc', 'def']]); + let caps = new Capabilities(m); + assert.deepEqual({one: 123, abc: 'def'}, caps[Symbols.serialize]()); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/events_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/events_test.js new file mode 100644 index 0000000..a02da97 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/events_test.js @@ -0,0 +1,177 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const EventEmitter = require('../../lib/events').EventEmitter; + +const assert = require('assert'); +const sinon = require('sinon'); + +describe('EventEmitter', function() { + describe('#emit()', function() { + it('can emit events when nothing is registered', function() { + let emitter = new EventEmitter; + emitter.emit('foo'); + // Ok if no errors are thrown. + }); + + it('can pass args to listeners on emit', function() { + let emitter = new EventEmitter; + let now = Date.now(); + + let messages = []; + emitter.on('foo', (arg) => messages.push(arg)); + + emitter.emit('foo', now); + assert.deepEqual([now], messages); + + emitter.emit('foo', now + 15); + assert.deepEqual([now, now + 15], messages); + }); + }); + + describe('#addListener()', function() { + it('can add multiple listeners for one event', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + emitter.emit('foo'); + assert.equal(3, count); + }); + + it('only registers each listener function once', function() { + let emitter = new EventEmitter; + let count = 0; + let onFoo = () => count++; + emitter.addListener('foo', onFoo); + emitter.addListener('foo', onFoo); + emitter.addListener('foo', onFoo); + + emitter.emit('foo'); + assert.equal(1, count); + + emitter.emit('foo'); + assert.equal(2, count); + }); + + it('allows users to specify a custom scope', function() { + let obj = { + count: 0, + inc: function() { + this.count++; + } + }; + let emitter = new EventEmitter; + emitter.addListener('foo', obj.inc, obj); + + emitter.emit('foo'); + assert.equal(1, obj.count); + + emitter.emit('foo'); + assert.equal(2, obj.count); + }); + }); + + describe('#once()', function() { + it('only calls registered callback once', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.once('foo', () => count++); + emitter.once('foo', () => count++); + emitter.once('foo', () => count++); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.emit('foo'); + assert.equal(3, count); + }); + }); + + describe('#removeListeners()', function() { + it('only removes the given listener function', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + + let toRemove = () => count++; + emitter.addListener('foo', toRemove); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.removeListener('foo', toRemove); + emitter.emit('foo'); + assert.equal(5, count); + }); + }); + + describe('#removeAllListeners()', function() { + it('only removes listeners for type if specified', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + emitter.addListener('foo', () => count++); + emitter.addListener('bar', () => count++); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.removeAllListeners('foo'); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.emit('bar'); + assert.equal(4, count); + }); + + it('removes absolutely all listeners if no type specified', function() { + let emitter = new EventEmitter; + let count = 0; + emitter.addListener('foo', () => count++); + emitter.addListener('bar', () => count++); + emitter.addListener('baz', () => count++); + emitter.addListener('baz', () => count++); + + emitter.emit('foo'); + assert.equal(1, count); + + emitter.emit('baz'); + assert.equal(3, count); + + emitter.removeAllListeners(); + + emitter.emit('foo'); + assert.equal(3, count); + + emitter.emit('bar'); + assert.equal(3, count); + + emitter.emit('baz'); + assert.equal(3, count); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/logging_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/logging_test.js new file mode 100644 index 0000000..29d2af4 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/logging_test.js @@ -0,0 +1,272 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); +const sinon = require('sinon'); +const logging = require('../../lib/logging'); + +describe('logging', function() { + let mgr, root, clock; + + beforeEach(function setUp() { + mgr = new logging.LogManager; + root = mgr.getLogger(''); + + clock = sinon.useFakeTimers(); + }); + + afterEach(function tearDown() { + clock.restore(); + }); + + describe('LogManager', function() { + describe('getLogger()', function() { + it('handles falsey input', function() { + assert.strictEqual(root, mgr.getLogger()); + assert.strictEqual(root, mgr.getLogger('')); + assert.strictEqual(root, mgr.getLogger(null)); + assert.strictEqual(root, mgr.getLogger(0)); + }); + + it('creates parent loggers', function() { + let logger = mgr.getLogger('foo.bar.baz'); + assert.strictEqual(logger.parent_, mgr.getLogger('foo.bar')); + + logger = logger.parent_; + assert.strictEqual(logger.parent_, mgr.getLogger('foo')); + + logger = logger.parent_; + assert.strictEqual(logger.parent_, mgr.getLogger('')); + + assert.strictEqual(logger.parent_.parent_, null); + }); + }); + }); + + describe('Logger', function() { + describe('getEffectiveLevel()', function() { + it('defaults to OFF', function() { + assert.strictEqual(root.getLevel(), logging.Level.OFF); + assert.strictEqual(root.getEffectiveLevel(), logging.Level.OFF); + + root.setLevel(null); + assert.strictEqual(root.getLevel(), null); + assert.strictEqual(root.getEffectiveLevel(), logging.Level.OFF); + }); + + it('uses own level if set', function() { + let logger = mgr.getLogger('foo.bar.baz'); + assert.strictEqual(logger.getLevel(), null); + assert.strictEqual(logger.getEffectiveLevel(), logging.Level.OFF); + + logger.setLevel(logging.Level.INFO); + assert.strictEqual(logger.getLevel(), logging.Level.INFO); + assert.strictEqual(logger.getEffectiveLevel(), logging.Level.INFO); + }); + + it('uses level from set on nearest parent', function() { + let ancestor = mgr.getLogger('foo'); + ancestor.setLevel(logging.Level.SEVERE); + + let logger = mgr.getLogger('foo.bar.baz'); + assert.strictEqual(logger.getLevel(), null); + assert.strictEqual(logger.getEffectiveLevel(), logging.Level.SEVERE); + }); + }); + + describe('isLoggable()', function() { + it('compares level against logger\'s effective level', function() { + const log1 = mgr.getLogger('foo'); + log1.setLevel(logging.Level.WARNING); + + const log2 = mgr.getLogger('foo.bar.baz'); + + assert(!log2.isLoggable(logging.Level.FINEST)); + assert(!log2.isLoggable(logging.Level.INFO)); + assert(log2.isLoggable(logging.Level.WARNING)); + assert(log2.isLoggable(logging.Level.SEVERE)); + + log2.setLevel(logging.Level.INFO); + + assert(!log2.isLoggable(logging.Level.FINEST)); + assert(log2.isLoggable(logging.Level.INFO)); + assert(log2.isLoggable(logging.Level.WARNING)); + assert(log2.isLoggable(logging.Level.SEVERE)); + + log2.setLevel(logging.Level.ALL); + + assert(log2.isLoggable(logging.Level.FINEST)); + assert(log2.isLoggable(logging.Level.INFO)); + assert(log2.isLoggable(logging.Level.WARNING)); + assert(log2.isLoggable(logging.Level.SEVERE)); + }); + + it('Level.OFF is never loggable', function() { + function test(level) { + root.setLevel(level); + assert(!root.isLoggable(logging.Level.OFF), + 'OFF should not be loggable at ' + level); + } + + test(logging.Level.ALL); + test(logging.Level.INFO); + test(logging.Level.OFF); + }); + }); + + describe('log()', function() { + it('does not invoke loggable if message is not loggable', function() { + const log = mgr.getLogger('foo'); + log.setLevel(logging.Level.OFF); + + let callback = sinon.spy(); + log.addHandler(callback); + root.addHandler(callback); + + assert(!callback.called); + }); + + it('invokes handlers for each parent logger', function() { + const cb1 = sinon.spy(); + const cb2 = sinon.spy(); + const cb3 = sinon.spy(); + const cb4 = sinon.spy(); + + const log1 = mgr.getLogger('foo'); + const log2 = mgr.getLogger('foo.bar'); + const log3 = mgr.getLogger('foo.bar.baz'); + const log4 = mgr.getLogger('foo.bar.baz.quot'); + + log1.addHandler(cb1); + log1.setLevel(logging.Level.INFO); + + log2.addHandler(cb2); + log2.setLevel(logging.Level.WARNING); + + log3.addHandler(cb3); + log3.setLevel(logging.Level.FINER); + + clock.tick(123456); + + log4.finest('this is the finest message'); + log4.finer('this is a finer message'); + log4.info('this is an info message'); + log4.warning('this is a warning message'); + log4.severe('this is a severe message'); + + assert.equal(4, cb1.callCount); + assert.equal(4, cb2.callCount); + assert.equal(4, cb3.callCount); + + const entry1 = new logging.Entry( + logging.Level.FINER, + '[foo.bar.baz.quot] this is a finer message', + 123456); + const entry2 = new logging.Entry( + logging.Level.INFO, + '[foo.bar.baz.quot] this is an info message', + 123456); + const entry3 = new logging.Entry( + logging.Level.WARNING, + '[foo.bar.baz.quot] this is a warning message', + 123456); + const entry4 = new logging.Entry( + logging.Level.SEVERE, + '[foo.bar.baz.quot] this is a severe message', + 123456); + + check(cb1.getCall(0).args[0], entry1); + check(cb1.getCall(1).args[0], entry2); + check(cb1.getCall(2).args[0], entry3); + check(cb1.getCall(3).args[0], entry4); + + check(cb2.getCall(0).args[0], entry1); + check(cb2.getCall(1).args[0], entry2); + check(cb2.getCall(2).args[0], entry3); + check(cb2.getCall(3).args[0], entry4); + + check(cb3.getCall(0).args[0], entry1); + check(cb3.getCall(1).args[0], entry2); + check(cb3.getCall(2).args[0], entry3); + check(cb3.getCall(3).args[0], entry4); + + function check(entry, expected) { + assert.equal(entry.level, expected.level, 'wrong level'); + assert.equal(entry.message, expected.message, 'wrong message'); + assert.equal(entry.timestamp, expected.timestamp, 'wrong time'); + } + }); + + it('does not invoke removed handler', function() { + root.setLevel(logging.Level.INFO); + const cb = sinon.spy(); + + root.addHandler(cb); + root.info('hi'); + assert.equal(1, cb.callCount); + + assert(root.removeHandler(cb)); + root.info('bye'); + assert.equal(1, cb.callCount); + + assert(!root.removeHandler(cb)); + }); + }); + }); + + describe('getLevel()', function() { + it('converts named levels', function() { + assert.strictEqual(logging.Level.DEBUG, logging.getLevel('DEBUG')); + assert.strictEqual(logging.Level.ALL, logging.getLevel('FAKE')); + }); + + it('converts numeric levels', function() { + assert.strictEqual( + logging.Level.DEBUG, + logging.getLevel(logging.Level.DEBUG.value)); + }); + + it('normalizes numeric levels', function() { + assert.strictEqual( + logging.Level.OFF, + logging.getLevel(logging.Level.OFF.value * 2)); + + let diff = logging.Level.SEVERE.value - logging.Level.WARNING.value; + assert.strictEqual( + logging.Level.WARNING, + logging.getLevel(logging.Level.WARNING.value + (diff * .5))); + + assert.strictEqual(logging.Level.ALL, logging.getLevel(0)); + assert.strictEqual(logging.Level.ALL, logging.getLevel(-1)); + }); + }); + + describe('Preferences', function() { + it('can be converted to JSON', function() { + let prefs = new logging.Preferences; + assert.equal('{}', JSON.stringify(prefs)); + + prefs.setLevel('foo', logging.Level.DEBUG); + assert.equal('{"foo":"DEBUG"}', JSON.stringify(prefs)); + + prefs.setLevel(logging.Type.BROWSER, logging.Level.FINE); + assert.equal('{"foo":"DEBUG","browser":"FINE"}', JSON.stringify(prefs)); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_aplus_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_aplus_test.js new file mode 100644 index 0000000..a893915 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_aplus_test.js @@ -0,0 +1,74 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const promise = require('../../lib/promise'); + +describe('Promises/A+ Compliance Tests', function() { + // The promise spec does not define behavior for unhandled rejections and + // assumes they are effectively swallowed. This is not the case with our + // implementation, so we have to disable error propagation to test that the + // rest of our behavior is compliant. + // We run the tests with a separate instance of the control flow to ensure + // disablign error propagation does not impact other tests. + var flow = new promise.ControlFlow(); + flow.setPropagateUnhandledRejections(false); + + // Skip the tests in 2.2.6.1/2. We are not compliant in these scenarios. + var realDescribe = global.describe; + global.describe = function(name, fn) { + realDescribe(name, function() { + var prefix = 'Promises/A+ Compliance Tests 2.2.6: ' + + '`then` may be called multiple times on the same promise.'; + var suffix = 'even when one handler is added inside another handler'; + if (this.fullTitle().startsWith(prefix) + && this.fullTitle().endsWith(suffix)) { + var realSpecify = global.specify; + try { + global.specify = function(name) { + realSpecify(name); + }; + fn(); + } finally { + global.specify = realSpecify; + } + } else { + fn(); + } + }); + }; + + require('promises-aplus-tests').mocha({ + resolved: function(value) { + return new promise.Promise((fulfill) => fulfill(value), flow); + }, + rejected: function(error) { + return new promise.Promise((_, reject) => reject(error), flow); + }, + deferred: function() { + var d = new promise.Deferred(flow); + return { + resolve: d.fulfill, + reject: d.reject, + promise: d.promise + }; + } + }); + + global.describe = realDescribe; +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_error_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_error_test.js new file mode 100644 index 0000000..114189c --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_error_test.js @@ -0,0 +1,808 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Contains tests against promise error handling. Many tests use + * NativePromise to control test termination independent of promise + * (and notably promise.ControlFlow). + */ + +'use strict'; + +const testutil = require('./testutil'); + +const assert = require('assert'); +const promise = require('../../lib/promise'); + +const NativePromise = Promise; +const StubError = testutil.StubError; +const throwStubError = testutil.throwStubError; +const assertIsStubError = testutil.assertIsStubError; + +describe('promise error handling', function() { + var flow, uncaughtExceptions; + + beforeEach(function setUp() { + flow = promise.controlFlow(); + uncaughtExceptions = []; + flow.on('uncaughtException', onUncaughtException); + }); + + afterEach(function tearDown() { + return waitForIdle(flow).then(function() { + assert.deepEqual( + [], uncaughtExceptions, 'There were uncaught exceptions'); + flow.reset(); + }); + }); + + function onUncaughtException(e) { + uncaughtExceptions.push(e); + } + + function waitForAbort(opt_flow, opt_n) { + var n = opt_n || 1; + var theFlow = opt_flow || flow; + theFlow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + return new NativePromise(function(fulfill, reject) { + theFlow.once('idle', function() { + reject(Error('expected flow to report an unhandled error')); + }); + + var errors = []; + theFlow.on('uncaughtException', onError); + function onError(e) { + errors.push(e); + if (errors.length === n) { + theFlow.removeListener('uncaughtException', onError); + fulfill(n === 1 ? errors[0] : errors); + } + } + }); + } + + function waitForIdle(opt_flow) { + var theFlow = opt_flow || flow; + return new NativePromise(function(fulfill, reject) { + if (theFlow.isIdle()) { + fulfill(); + return; + } + theFlow.once('idle', fulfill); + theFlow.once('uncaughtException', reject); + }); + } + + it('testRejectedPromiseTriggersErrorCallback', function() { + return promise.rejected(new StubError). + then(assert.fail, assertIsStubError); + }); + + describe('callback throws trigger subsequent error callback', function() { + it('fulfilled promise', function() { + return promise.fulfilled(). + then(throwStubError). + then(assert.fail, assertIsStubError); + }); + + it('rejected promise', function() { + var e = Error('not the droids you are looking for'); + return promise.rejected(e). + then(assert.fail, throwStubError). + then(assert.fail, assertIsStubError); + }); + }); + + describe('callback returns rejected promise triggers subsequent errback', function() { + it('from fulfilled callback', function() { + return promise.fulfilled().then(function() { + return promise.rejected(new StubError); + }).then(assert.fail, assertIsStubError); + }); + + it('from rejected callback', function() { + var e = Error('not the droids you are looking for'); + return promise.rejected(e). + then(assert.fail, function() { + return promise.rejected(new StubError); + }). + then(assert.fail, assertIsStubError); + }); + }); + + it('testReportsUnhandledRejectionsThroughTheControlFlow', function() { + promise.rejected(new StubError); + return waitForAbort().then(assertIsStubError); + }); + + describe('multiple unhandled rejections outside a task', function() { + it('are reported in order they occurred', function() { + var e1 = Error('error 1'); + var e2 = Error('error 2'); + + promise.rejected(e1); + promise.rejected(e2); + + return waitForAbort(flow).then(function(error) { + assert.ok( + error instanceof promise.MultipleUnhandledRejectionError); + // TODO: switch to Array.from when we drop node 0.12.x + var errors = []; + for (var e of error.errors) { + errors.push(e); + } + assert.deepEqual([e1, e2], errors); + }); + }); + }); + + describe('does not report unhandled rejection when', function() { + it('handler added before next tick', function() { + promise.rejected(new StubError).then(assert.fail, assertIsStubError); + return waitForIdle(); + }); + + it('added async but before next tick', function() { + var called = false; + return new NativePromise(function(fulfill, reject) { + var aPromise; + NativePromise.resolve().then(function() { + aPromise.then(assert.fail, function(e) { + called = true; + assertIsStubError(e); + }); + waitForIdle().then(fulfill, reject); + }); + aPromise = promise.rejected(new StubError); + }).then(function() { + assert.ok(called); + }) + }); + }); + + it('testTaskThrows', function() { + return flow.execute(throwStubError).then(assert.fail, assertIsStubError); + }); + + it('testTaskReturnsRejectedPromise', function() { + return flow.execute(function() { + return promise.rejected(new StubError) + }).then(assert.fail, assertIsStubError); + }); + + it('testTaskHasUnhandledRejection', function() { + return flow.execute(function() { + promise.rejected(new StubError) + }).then(assert.fail, assertIsStubError); + }); + + it('testTaskfails_returnedPromiseIsUnhandled', function() { + flow.execute(throwStubError); + return waitForAbort().then(assertIsStubError); + }); + + it('testTaskHasUnhandledRejection_cancelsRemainingSubTasks', function() { + var seen = []; + flow.execute(function() { + promise.rejected(new StubError); + + flow.execute(() => seen.push('a')) + .then(() => seen.push('b'), (e) => seen.push(e)); + flow.execute(() => seen.push('c')) + .then(() => seen.push('b'), (e) => seen.push(e)); + }); + + return waitForAbort() + .then(assertIsStubError) + .then(() => assert.deepEqual([], seen)); + }); + + describe('nested task failures', function() { + it('returns up to paren', function() { + return flow.execute(function() { + return flow.execute(function() { + return flow.execute(throwStubError); + }); + }).then(assert.fail, assertIsStubError); + }); + + it('task throws; uncaught error bubbles up', function() { + flow.execute(function() { + flow.execute(function() { + flow.execute(throwStubError); + }); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('task throws; uncaught error bubbles up; is caught at root', function() { + flow.execute(function() { + flow.execute(function() { + flow.execute(throwStubError); + }); + }).then(assert.fail, assertIsStubError); + return waitForIdle(); + }); + + it('unhandled rejection bubbles up', function() { + flow.execute(function() { + flow.execute(function() { + flow.execute(function() { + promise.rejected(new StubError); + }); + }); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('unhandled rejection bubbles up; caught at root', function() { + flow.execute(function() { + flow.execute(function() { + promise.rejected(new StubError); + }); + }).then(assert.fail, assertIsStubError); + return waitForIdle(); + }); + + it('mixtureof hanging and free subtasks', function() { + flow.execute(function() { + return flow.execute(function() { + flow.execute(throwStubError); + }); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('cancels remaining tasks', function() { + var seen = []; + flow.execute(function() { + flow.execute(() => promise.rejected(new StubError)); + flow.execute(() => seen.push('a')) + .then(() => seen.push('b'), (e) => seen.push(e)); + flow.execute(() => seen.push('c')) + .then(() => seen.push('b'), (e) => seen.push(e)); + }); + + return waitForAbort() + .then(assertIsStubError) + .then(() => assert.deepEqual([], seen)); + }); + }); + + it('testTaskReturnsPromiseLikeObjectThatInvokesErrback', function() { + return flow.execute(function() { + return { + 'then': function(_, errback) { + errback('abc123'); + } + }; + }).then(assert.fail, function(value) { + assert.equal('abc123', value); + }); + }); + + describe('ControlFlow#wait();', function() { + describe('condition throws;', function() { + it('failure is caught', function() { + return flow.wait(throwStubError, 50).then(assert.fail, assertIsStubError); + }); + + it('failure is not caught', function() { + flow.wait(throwStubError, 50); + return waitForAbort().then(assertIsStubError); + }); + }); + + describe('condition returns promise', function() { + it('failure is caught', function() { + return flow.wait(function() { + return promise.rejected(new StubError); + }, 50).then(assert.fail, assertIsStubError); + }); + + it('failure is not caught', function() { + flow.wait(function() { + return promise.rejected(new StubError); + }, 50); + return waitForAbort().then(assertIsStubError); + }); + }); + + describe('condition has unhandled promise rejection', function() { + it('failure is caught', function() { + return flow.wait(function() { + promise.rejected(new StubError); + }, 50).then(assert.fail, assertIsStubError); + }); + + it('failure is not caught', function() { + flow.wait(function() { + promise.rejected(new StubError); + }, 50); + return waitForAbort().then(assertIsStubError); + }); + }); + + describe('condition has subtask failure', function() { + it('failure is caught', function() { + return flow.wait(function() { + flow.execute(function() { + flow.execute(throwStubError); + }); + }, 50).then(assert.fail, assertIsStubError); + }); + + it('failure is not caught', function() { + flow.wait(function() { + flow.execute(function() { + flow.execute(throwStubError); + }); + }, 50); + return waitForAbort().then(assertIsStubError); + }); + }); + }); + + describe('errback throws a new error', function() { + it('start with normal promise', function() { + var error = Error('an error'); + return promise.rejected(error). + thenCatch(function(e) { + assert.equal(e, error); + throw new StubError; + }). + thenCatch(assertIsStubError); + }); + + it('start with task result', function() { + var error = Error('an error'); + return flow.execute(function() { + throw error; + }). + thenCatch(function(e) { + assert.equal(e, error); + throw new StubError; + }). + thenCatch(assertIsStubError); + }); + + it('start with normal promise; uncaught error', function() { + var error = Error('an error'); + promise.rejected(error). + thenCatch(function(e) { + assert.equal(e, error); + throw new StubError; + }); + return waitForAbort().then(assertIsStubError); + }); + + it('start with task result; uncaught error', function() { + var error = Error('an error'); + flow.execute(function() { + throw error; + }). + thenCatch(function(e) { + assert.equal(e, error); + throw new StubError; + }); + return waitForAbort().then(assertIsStubError); + }); + }); + + it('thrownPromiseCausesCallbackRejection', function() { + let p = promise.fulfilled(1234); + return promise.fulfilled().then(function() { + throw p; + }).then(assert.fail, function(value) { + assert.strictEqual(p, value); + }); + }); + + describe('task throws promise', function() { + it('promise was fulfilled', function() { + var toThrow = promise.fulfilled(1234); + flow.execute(function() { + throw toThrow; + }).then(assert.fail, function(value) { + assert.equal(toThrow, value); + return toThrow; + }).then(function(value) { + assert.equal(1234, value); + }); + return waitForIdle(); + }); + + it('promise was rejected', function() { + var toThrow = promise.rejected(new StubError); + toThrow.thenCatch(function() {}); // For tearDown. + flow.execute(function() { + throw toThrow; + }).then(assert.fail, function(e) { + assert.equal(toThrow, e); + return e; + }).then(assert.fail, assertIsStubError); + return waitForIdle(); + }); + }); + + it('testFailsTaskIfThereIsAnUnhandledErrorWhileWaitingOnTaskResult', function() { + var d = promise.defer(); + flow.execute(function() { + promise.rejected(new StubError); + return d.promise; + }).then(assert.fail, assertIsStubError); + + return waitForIdle().then(function() { + return d.promise; + }).then(assert.fail, function(e) { + assert.equal('CancellationError: StubError', e.toString()); + }); + }); + + it('testFailsParentTaskIfAsyncScheduledTaskFails', function() { + var d = promise.defer(); + flow.execute(function() { + flow.execute(throwStubError); + return d.promise; + }).then(assert.fail, assertIsStubError); + + return waitForIdle().then(function() { + return d.promise; + }).then(assert.fail, function(e) { + assert.equal('CancellationError: StubError', e.toString()); + }); + }); + + describe('long stack traces', function() { + afterEach(() => promise.LONG_STACK_TRACES = false); + + it('always includes task stacks in failures', function() { + promise.LONG_STACK_TRACES = false; + flow.execute(function() { + flow.execute(function() { + flow.execute(throwStubError, 'throw error'); + }, 'two'); + }, 'three'). + then(assert.fail, function(e) { + assertIsStubError(e); + if (typeof e.stack !== 'string') { + return; + } + var messages = e.stack.split(/\n/).filter(function(line, index) { + return /^From: /.test(line); + }); + assert.deepEqual([ + 'From: Task: throw error', + 'From: Task: two', + 'From: Task: three' + ], messages); + }); + return waitForIdle(); + }); + + it('does not include completed tasks', function () { + flow.execute(function() {}, 'succeeds'); + flow.execute(throwStubError, 'kaboom').then(assert.fail, function(e) { + assertIsStubError(e); + if (typeof e.stack !== 'string') { + return; + } + var messages = e.stack.split(/\n/).filter(function(line, index) { + return /^From: /.test(line); + }); + assert.deepEqual(['From: Task: kaboom'], messages); + }); + return waitForIdle(); + }); + + it('does not include promise chain when disabled', function() { + promise.LONG_STACK_TRACES = false; + flow.execute(function() { + flow.execute(function() { + return promise.fulfilled(). + then(function() {}). + then(function() {}). + then(throwStubError); + }, 'eventually assert.fails'); + }, 'start'). + then(assert.fail, function(e) { + assertIsStubError(e); + if (typeof e.stack !== 'string') { + return; + } + var messages = e.stack.split(/\n/).filter(function(line, index) { + return /^From: /.test(line); + }); + assert.deepEqual([ + 'From: Task: eventually assert.fails', + 'From: Task: start' + ], messages); + }); + return waitForIdle(); + }); + + it('includes promise chain when enabled', function() { + promise.LONG_STACK_TRACES = true; + flow.execute(function() { + flow.execute(function() { + return promise.fulfilled(). + then(function() {}). + then(function() {}). + then(throwStubError); + }, 'eventually assert.fails'); + }, 'start'). + then(assert.fail, function(e) { + assertIsStubError(e); + if (typeof e.stack !== 'string') { + return; + } + var messages = e.stack.split(/\n/).filter(function(line, index) { + return /^From: /.test(line); + }); + assert.deepEqual([ + 'From: Promise: then', + 'From: Task: eventually assert.fails', + 'From: Task: start' + ], messages); + }); + return waitForIdle(); + }); + }); + + it('testFrameCancelsRemainingTasks_onUnhandledTaskFailure', function() { + var run = false; + return flow.execute(function() { + flow.execute(throwStubError); + flow.execute(function() { run = true; }); + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.ok(!run); + }); + }); + + it('testFrameCancelsRemainingTasks_onUnhandledPromiseRejection', function() { + var run = false; + return flow.execute(function() { + promise.rejected(new StubError); + flow.execute(function() { run = true; }); + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.ok(!run); + }); + }); + + it('testRegisteredTaskCallbacksAreDroppedWhenTaskIsCancelled_return', function() { + var seen = []; + return flow.execute(function() { + flow.execute(throwStubError); + + flow.execute(function() { + seen.push(1); + }).then(function() { + seen.push(2); + }, function() { + seen.push(3); + }); + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.deepEqual([], seen); + }); + }); + + it('testRegisteredTaskCallbacksAreDroppedWhenTaskIsCancelled_withReturn', function() { + var seen = []; + return flow.execute(function() { + flow.execute(throwStubError); + + return flow.execute(function() { + seen.push(1); + }).then(function() { + seen.push(2); + }, function() { + seen.push(3); + }); + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.deepEqual([], seen); + }); + }); + + it('testTasksWithinACallbackAreDroppedIfContainingTaskIsAborted', function() { + var seen = []; + return flow.execute(function() { + flow.execute(throwStubError); + + // None of the callbacks on this promise should execute because the + // task assert.failure above is never handled, causing the containing task to + // abort. + promise.fulfilled().then(function() { + seen.push(1); + return flow.execute(function() { + seen.push(2); + }); + }).thenFinally(function() { + seen.push(3); + }); + + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.deepEqual([], seen); + }); + }); + + it('testTaskIsCancelledAfterWaitTimeout', function() { + var seen = []; + return flow.execute(function() { + flow.wait(function() { + return promise.delayed(50); + }, 5); + + return flow.execute(function() { + seen.push(1); + }).then(function() { + seen.push(2); + }, function() { + seen.push(3); + }); + }).then(assert.fail, function() { + assert.deepEqual([], seen); + }); + }); + + describe('task callbacks get cancellation error if registered after task was cancelled', function() { + it('(a)', function() { + var task; + flow.execute(function() { + flow.execute(throwStubError); + task = flow.execute(function() {}); + }).then(assert.fail, assertIsStubError); + return waitForIdle().then(function() { + return task.then(assert.fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + }); + }); + }); + + it('(b)', function() { + var seen = []; + + var task; + flow.execute(function() { + flow.execute(throwStubError); + task = flow.execute(function() {}); + + task.then(() => seen.push(1)) + .then(() => seen.push(2)); + task.then(() => seen.push(3)) + .then(() => seen.push(4)); + + }).then(assert.fail, assertIsStubError); + + return waitForIdle().then(function() { + return task.then(assert.fail, function(e) { + seen.push(5); + assert.ok(e instanceof promise.CancellationError); + }); + }).then(() => assert.deepEqual([5], seen)); + }); + }); + + it('unhandledRejectionInParallelTaskQueue', function() { + var seen = []; + function schedule(name) { + return flow.execute(() => seen.push(name), name); + } + + flow.async(function() { + schedule('a.1'); + flow.execute(throwStubError, 'a.2 (throws)'); + }); + + var b3; + flow.async(function() { + schedule('b.1'); + schedule('b.2'); + b3 = schedule('b.3'); + }); + + var c3; + flow.async(function() { + schedule('c.1'); + schedule('c.2'); + c3 = schedule('c.3'); + }); + + function assertWasCancelled(p) { + return p.then(assert.fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + }); + } + + return waitForAbort() + .then(function() { + assert.deepEqual(['a.1', 'b.1', 'c.1', 'b.2', 'c.2'], seen); + assert.ok(!b3.isPending()); + assert.ok(!c3.isPending()); + }) + .then(() => assertWasCancelled(b3)) + .then(() => assertWasCancelled(c3)); + }); + + it('errorsInAsyncFunctionsAreReportedAsUnhandledRejection', function() { + flow.removeAllListeners(); // For tearDown. + + var task; + return new Promise(function(fulfill) { + flow.once('uncaughtException', fulfill); + flow.async(function() { + task = flow.execute(function() {}); + throw Error('boom'); + }); + }).then(function(error) { + assert.ok(error instanceof promise.CancellationError); + assert.ok(!task.isPending()); + return task.thenCatch(function(error) { + assert.ok(error instanceof promise.CancellationError); + }); + }); + }); + + describe('does not wait for values thrown from callbacks to be resolved', function() { + it('(a)', function() { + var p1 = promise.fulfilled(); + var reason = promise.fulfilled('should not see me'); + return p1.then(function() { + throw reason; + }).then(assert.fail, function(e) { + assert.equal(reason, e); + }); + }); + + it('(b)', function() { + var p1 = promise.fulfilled(); + var reason = promise.rejected('should not see me'); + reason.thenCatch(function() {}); // For tearDown. + return p1.then(function() { + throw reason; + }).then(assert.fail, function(e) { + assert.equal(reason, e); + }); + }); + + it('(c)', function() { + var p1 = promise.fulfilled(); + var reason = promise.defer(); + setTimeout(() => reason.fulfill('should not see me'), 100); + return p1.then(function() { + throw reason.promise; + }).then(assert.fail, function(e) { + assert.equal(reason.promise, e); + }); + }); + + it('(d)', function() { + var p1 = promise.fulfilled(); + var reason = {then: function() {}}; // A thenable like object. + return p1.then(function() { + throw reason; + }).then(assert.fail, function(e) { + assert.equal(reason, e); + }); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_flow_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_flow_test.js new file mode 100644 index 0000000..fd4469d --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_flow_test.js @@ -0,0 +1,2282 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); +const fail = assert.fail; +const sinon = require('sinon'); + +const testutil = require('./testutil'); +const promise = require('../../lib/promise'); + +const NativePromise = Promise; + +// Aliases for readability. +const StubError = testutil.StubError; +const assertIsStubError = testutil.assertIsStubError; +const callbackPair = testutil.callbackPair; +const throwStubError = testutil.throwStubError; + +describe('promise control flow', function() { + let flow, flowHistory, messages, uncaughtExceptions; + + beforeEach(function setUp() { + promise.LONG_STACK_TRACES = false; + flow = new promise.ControlFlow(); + promise.setDefaultFlow(flow); + messages = []; + flowHistory = []; + + uncaughtExceptions = []; + flow.on(promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, + onUncaughtException); + }); + + afterEach(function tearDown() { + flow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + assert.deepEqual([], uncaughtExceptions, + 'There were uncaught exceptions'); + flow.reset(); + promise.LONG_STACK_TRACES = false; + }); + + function onUncaughtException(e) { + uncaughtExceptions.push(e); + } + + function waitForAbort(opt_flow) { + var theFlow = opt_flow || flow; + theFlow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + return new NativePromise(function(fulfill, reject) { + theFlow.once(promise.ControlFlow.EventType.IDLE, function() { + reject(Error('expected flow to report an unhandled error')); + }); + theFlow.once( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, + fulfill); + }); + } + + function waitForIdle(opt_flow) { + var theFlow = opt_flow || flow; + return new NativePromise(function(fulfill, reject) { + theFlow.once(promise.ControlFlow.EventType.IDLE, fulfill); + theFlow.once( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, reject); + }); + } + + function timeout(ms) { + return new NativePromise(function(fulfill) { + setTimeout(fulfill, ms); + }); + } + + + function schedule(msg, opt_return) { + return scheduleAction(msg, function() { + return opt_return; + }); + } + + /** + * @param {string} value The value to push. + * @param {promise.Promise=} opt_taskPromise Promise to return from + * the task. + * @return {!promise.Promise} The result. + */ + function schedulePush(value, opt_taskPromise) { + return scheduleAction(value, function() { + messages.push(value); + return opt_taskPromise; + }); + } + + /** + * @param {string} msg Debug message. + * @param {!Function} actionFn The function. + * @return {!promise.Promise} The function result. + */ + function scheduleAction(msg, actionFn) { + return promise.controlFlow().execute(function() { + flowHistory.push(msg); + return actionFn(); + }, msg); + } + + /** + * @param {!Function} condition The condition function. + * @param {number=} opt_timeout The timeout. + * @param {string=} opt_message Optional message. + * @return {!promise.Promise} The wait result. + */ + function scheduleWait(condition, opt_timeout, opt_message) { + var msg = opt_message || ''; + // It's not possible to hook into when the wait itself is scheduled, so + // we record each iteration of the wait loop. + var count = 0; + return promise.controlFlow().wait(function() { + flowHistory.push((count++) + ': ' + msg); + return condition(); + }, opt_timeout, msg); + } + + function asyncRun(fn, opt_self) { + NativePromise.resolve().then(() => fn.call(opt_self)); + } + + function assertFlowHistory(var_args) { + var expected = Array.prototype.slice.call(arguments, 0); + assert.deepEqual(expected, flowHistory); + } + + function assertMessages(var_args) { + var expected = Array.prototype.slice.call(arguments, 0); + assert.deepEqual(expected, messages); + } + + function assertingMessages(var_args) { + var args = Array.prototype.slice.call(arguments, 0); + return () => assertMessages.apply(null, args); + } + + function assertFlowIs(flow) { + assert.equal(flow, promise.controlFlow()); + } + + describe('testScheduling', function() { + it('aSimpleFunction', function() { + schedule('go'); + return waitForIdle().then(function() { + assertFlowHistory('go'); + }); + }); + + it('aSimpleFunctionWithANonPromiseReturnValue', function() { + schedule('go', 123).then(function(value) { + assert.equal(123, value); + }); + return waitForIdle().then(function() { + assertFlowHistory('go'); + }); + }); + + it('aSimpleSequence', function() { + schedule('a'); + schedule('b'); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('invokesCallbacksWhenTaskIsDone', function() { + var d = new promise.Deferred(); + var called = false; + var done = schedule('a', d.promise).then(function(value) { + called = true; + assert.equal(123, value); + }); + return timeout(5).then(function() { + assert.ok(!called); + d.fulfill(123); + return done; + }). + then(function() { + assertFlowHistory('a'); + }); + }); + + it('blocksUntilPromiseReturnedByTaskIsResolved', function() { + var done = promise.defer(); + schedulePush('a', done.promise); + schedulePush('b'); + setTimeout(function() { + done.fulfill(); + messages.push('c'); + }, 25); + return waitForIdle().then(assertingMessages('a', 'c', 'b')); + }); + + it('waitsForReturnedPromisesToResolve', function() { + var d1 = new promise.Deferred(); + var d2 = new promise.Deferred(); + + var callback = sinon.spy(); + schedule('a', d1.promise).then(callback); + + return timeout(5).then(function() { + assert(!callback.called); + d1.fulfill(d2); + return timeout(5); + }).then(function() { + assert(!callback.called); + d2.fulfill('fluffy bunny'); + return waitForIdle(); + }).then(function() { + assert(callback.called); + assert.equal('fluffy bunny', callback.getCall(0).args[0]); + assertFlowHistory('a'); + }); + }); + + it('executesTasksInAFutureTurnAfterTheyAreScheduled', function() { + var count = 0; + function incr() { count++; } + + scheduleAction('', incr); + assert.equal(0, count); + return waitForIdle().then(function() { + assert.equal(1, count); + }); + }); + + it('executesOneTaskPerTurnOfTheEventLoop', function() { + var order = []; + function go() { + order.push(order.length / 2); + asyncRun(function() { + order.push('-'); + }); + } + + scheduleAction('', go); + scheduleAction('', go); + return waitForIdle().then(function() { + assert.deepEqual([0, '-', 1, '-'], order); + }) + }); + + it('firstScheduledTaskIsWithinACallback', function() { + promise.fulfilled().then(function() { + schedule('a'); + schedule('b'); + schedule('c'); + }).then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + return waitForIdle(); + }); + + it('newTasksAddedWhileWaitingOnTaskReturnedPromise1', function() { + scheduleAction('a', function() { + var d = promise.defer(); + setTimeout(function() { + schedule('c'); + d.fulfill(); + }, 10); + return d.promise; + }); + schedule('b'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('newTasksAddedWhileWaitingOnTaskReturnedPromise2', function() { + scheduleAction('a', function() { + var d = promise.defer(); + setTimeout(function() { + schedule('c'); + asyncRun(d.fulfill); + }, 10); + return d.promise; + }); + schedule('b'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'b'); + }); + }); + }); + + describe('testFraming', function() { + it('callbacksRunInANewFrame', function() { + schedule('a').then(function() { + schedule('c'); + }); + schedule('b'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'b'); + }); + }); + + it('lotsOfNesting', function() { + schedule('a').then(function() { + schedule('c').then(function() { + schedule('e').then(function() { + schedule('g'); + }); + schedule('f'); + }); + schedule('d'); + }); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'e', 'g', 'f', 'd', 'b'); + }); + }); + + it('callbackReturnsPromiseThatDependsOnATask_1', function() { + schedule('a').then(function() { + schedule('b'); + return promise.delayed(5).then(function() { + return schedule('c'); + }); + }); + schedule('d'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd'); + }); + }); + + it('callbackReturnsPromiseThatDependsOnATask_2', function() { + schedule('a').then(function() { + schedule('b'); + return promise.delayed(5). + then(function() { return promise.delayed(5) }). + then(function() { return promise.delayed(5) }). + then(function() { return promise.delayed(5) }). + then(function() { return schedule('c'); }); + }); + schedule('d'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd'); + }); + }); + + it('eachCallbackWaitsForAllScheduledTasksToComplete', function() { + schedule('a'). + then(function() { + schedule('b'); + schedule('c'); + }). + then(function() { + schedule('d'); + }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('eachCallbackWaitsForReturnTasksToComplete', function() { + schedule('a'). + then(function() { + schedule('b'); + return schedule('c'); + }). + then(function() { + schedule('d'); + }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('callbacksOnAResolvedPromiseInsertIntoTheCurrentFlow', function() { + promise.fulfilled().then(function() { + schedule('b'); + }); + schedule('a'); + + return waitForIdle().then(function() { + assertFlowHistory('b', 'a'); + }); + }); + + it('callbacksInterruptTheFlowWhenPromiseIsResolved', function() { + schedule('a').then(function() { + schedule('c'); + }); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'b'); + }); + }); + + it('allCallbacksInAFrameAreScheduledWhenPromiseIsResolved', function() { + var a = schedule('a'); + a.then(function() { schedule('b'); }); + schedule('c'); + a.then(function() { schedule('d'); }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('tasksScheduledInInActiveFrameDoNotGetPrecedence', function() { + var d = promise.fulfilled(); + schedule('a'); + schedule('b'); + d.then(function() { schedule('c'); }); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('tasksScheduledInAFrameGetPrecedence_1', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { + schedule('c'); + schedule('d'); + }); + var e = schedule('e'); + a.then(function() { + schedule('f'); + e.then(function() { + schedule('g'); + }); + schedule('h'); + }); + schedule('i'); + }); + schedule('j'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + }); + }); + }); + + describe('testErrorHandling', function() { + it('thrownErrorsArePassedToTaskErrback', function() { + scheduleAction('function that throws', throwStubError). + then(fail, assertIsStubError); + return waitForIdle(); + }); + + it('thrownErrorsPropagateThroughPromiseChain', function() { + scheduleAction('function that throws', throwStubError). + then(fail). + then(fail, assertIsStubError); + return waitForIdle(); + }); + + it('catchesErrorsFromFailedTasksInAFrame', function() { + schedule('a').then(function() { + schedule('b'); + scheduleAction('function that throws', throwStubError); + }). + then(fail, assertIsStubError); + return waitForIdle(); + }); + + it('abortsIfOnlyTaskReturnsAnUnhandledRejection', function() { + scheduleAction('function that returns rejected promise', function() { + return promise.rejected(new StubError); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('abortsIfThereIsAnUnhandledRejection', function() { + promise.rejected(new StubError); + schedule('this should not run'); + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory(/* none */); + }); + }); + + it('abortsSequenceIfATaskFails', function() { + schedule('a'); + schedule('b'); + scheduleAction('c', throwStubError); + schedule('d'); // Should never execute. + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('abortsFromUnhandledFramedTaskFailures_1', function() { + schedule('outer task').then(function() { + scheduleAction('inner task', throwStubError); + }); + schedule('this should not run'); + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('outer task', 'inner task'); + }); + }); + + it('abortsFromUnhandledFramedTaskFailures_2', function() { + schedule('a').then(function() { + schedule('b').then(function() { + scheduleAction('c', throwStubError); + // This should not execute. + schedule('d'); + }); + }); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('abortsWhenErrorBubblesUpFromFullyResolvingAnObject', function() { + var callback = sinon.spy(); + + scheduleAction('', function() { + var obj = {'foo': promise.rejected(new StubError)}; + return promise.fullyResolved(obj).then(callback); + }); + + return waitForAbort(). + then(assertIsStubError). + then(() => assert(!callback.called)); + }); + + it('abortsWhenErrorBubblesUpFromFullyResolvingAnObject_withCallback', function() { + var callback1 = sinon.spy(); + var callback2 = sinon.spy(); + + scheduleAction('', function() { + var obj = {'foo': promise.rejected(new StubError)}; + return promise.fullyResolved(obj).then(callback1); + }).then(callback2); + + return waitForAbort(). + then(assertIsStubError). + then(() => assert(!callback1.called)). + then(() => assert(!callback2.called)); + }); + + it('canCatchErrorsFromNestedTasks', function() { + var errback = sinon.spy(); + schedule('a'). + then(function() { + return scheduleAction('b', throwStubError); + }). + thenCatch(errback); + return waitForIdle().then(function() { + assert(errback.called); + assertIsStubError(errback.getCall(0).args[0]); + }); + }); + + it('nestedCommandFailuresCanBeCaughtAndSuppressed', function() { + var errback = sinon.spy(); + schedule('a').then(function() { + return schedule('b').then(function() { + return schedule('c').then(function() { + throw new StubError; + }); + }); + }).thenCatch(errback); + schedule('d'); + return waitForIdle(). + then(function() { + assert(errback.called); + assertIsStubError(errback.getCall(0).args[0]); + assertFlowHistory('a', 'b', 'c', 'd'); + }); + }); + + it('aTaskWithAnUnhandledPromiseRejection', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + promise.rejected(new StubError); + }); + schedule('should never run'); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'sub-tasks'); + }); + }); + + it('aTaskThatReutrnsARejectedPromise', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + return promise.rejected(new StubError); + }); + schedule('should never run'); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'sub-tasks'); + }); + }); + + it('discardsSubtasksIfTaskThrows', function() { + var pair = callbackPair(null, assertIsStubError); + scheduleAction('a', function() { + schedule('b'); + schedule('c'); + throwStubError(); + }).then(pair.callback, pair.errback); + schedule('d'); + + return waitForIdle(). + then(pair.assertErrback). + then(function() { + assertFlowHistory('a', 'd'); + }); + }); + + it('discardsRemainingSubtasksIfASubtaskFails', function() { + var pair = callbackPair(null, assertIsStubError); + scheduleAction('a', function() { + schedule('b'); + scheduleAction('c', throwStubError); + schedule('d'); + }).then(pair.callback, pair.errback); + schedule('e'); + + return waitForIdle(). + then(pair.assertErrback). + then(function() { + assertFlowHistory('a', 'b', 'c', 'e'); + }); + }); + }); + + describe('testTryModelingFinally', function() { + it('happyPath', function() { + /* Model: + try { + doFoo(); + doBar(); + } finally { + doBaz(); + } + */ + schedulePush('foo'). + then(() => schedulePush('bar')). + thenFinally(() => schedulePush('baz')); + return waitForIdle().then(assertingMessages('foo', 'bar', 'baz')); + }); + + it('firstTryFails', function() { + /* Model: + try { + doFoo(); + doBar(); + } finally { + doBaz(); + } + */ + + scheduleAction('doFoo and throw', function() { + messages.push('foo'); + throw new StubError; + }). + then(function() { schedulePush('bar'); }). + thenFinally(function() { schedulePush('baz'); }); + + return waitForAbort(). + then(assertIsStubError). + then(assertingMessages('foo', 'baz')); + }); + + it('secondTryFails', function() { + /* Model: + try { + doFoo(); + doBar(); + } finally { + doBaz(); + } + */ + + schedulePush('foo'). + then(function() { + return scheduleAction('doBar and throw', function() { + messages.push('bar'); + throw new StubError; + }); + }). + thenFinally(function() { + return schedulePush('baz'); + }); + return waitForAbort(). + then(assertIsStubError). + then(assertingMessages('foo', 'bar', 'baz')); + }); + }); + + describe('testTaskCallbacksInterruptFlow', function() { + it('(base case)', function() { + schedule('a').then(function() { + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskDependsOnImmediatelyFulfilledPromise', function() { + scheduleAction('a', function() { + return promise.fulfilled(); + }).then(function() { + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskDependsOnPreviouslyFulfilledPromise', function() { + var aPromise = promise.fulfilled(123); + scheduleAction('a', function() { + return aPromise; + }).then(function(value) { + assert.equal(123, value); + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskDependsOnAsyncPromise', function() { + scheduleAction('a', function() { + return promise.delayed(25); + }).then(function() { + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('promiseChainedToTaskInterruptFlow', function() { + schedule('a').then(function() { + return promise.fulfilled(); + }).then(function() { + return promise.fulfilled(); + }).then(function() { + schedule('b'); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('nestedTaskCallbacksInterruptFlowWhenResolved', function() { + schedule('a').then(function() { + schedule('b').then(function() { + schedule('c'); + }); + }); + schedule('d'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd'); + }); + }); + }); + + describe('testDelayedNesting', function() { + + it('1', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { schedule('c'); }); + schedule('d'); + }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('2', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { schedule('c'); }); + schedule('d'); + a.then(function() { schedule('e'); }); + }); + schedule('f'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e', 'f'); + }); + }); + + it('3', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { schedule('c'); }); + a.then(function() { schedule('d'); }); + }); + schedule('e'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('4', function() { + var a = schedule('a'); + schedule('b').then(function() { + a.then(function() { schedule('c'); }).then(function() { + schedule('d'); + }); + a.then(function() { schedule('e'); }); + }); + schedule('f'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e', 'f'); + }); + }); + + it('5', function() { + var a = schedule('a'); + schedule('b').then(function() { + var c; + a.then(function() { c = schedule('c'); }).then(function() { + schedule('d'); + a.then(function() { schedule('e'); }); + c.then(function() { schedule('f'); }); + schedule('g'); + }); + a.then(function() { schedule('h'); }); + }); + schedule('i'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'); + }); + }); + }); + + describe('testWaiting', function() { + it('onAConditionThatIsAlwaysTrue', function() { + scheduleWait(function() { return true;}, 0, 'waiting on true'); + return waitForIdle().then(function() { + assertFlowHistory('0: waiting on true'); + }); + }); + + it('aSimpleCountingCondition', function() { + var count = 0; + scheduleWait(function() { + return ++count == 3; + }, 100, 'counting to 3'); + + return waitForIdle().then(function() { + assert.equal(3, count); + }); + }); + + it('aConditionThatReturnsAPromise', function() { + var d = new promise.Deferred(); + var count = 0; + + scheduleWait(function() { + count += 1; + return d.promise; + }, 0, 'waiting for promise'); + + return timeout(50).then(function() { + assert.equal(1, count); + d.fulfill(123); + return waitForIdle(); + }); + }); + + it('aConditionThatReturnsAPromise_2', function() { + var count = 0; + scheduleWait(function() { + return promise.fulfilled(++count == 3); + }, 100, 'waiting for promise'); + + return waitForIdle().then(function() { + assert.equal(3, count); + }); + }); + + it('aConditionThatReturnsATaskResult', function() { + var count = 0; + scheduleWait(function() { + return scheduleAction('increment count', function() { + return ++count == 3; + }); + }, 100, 'counting to 3'); + schedule('post wait'); + + return waitForIdle().then(function() { + assert.equal(3, count); + assertFlowHistory( + '0: counting to 3', 'increment count', + '1: counting to 3', 'increment count', + '2: counting to 3', 'increment count', + 'post wait'); + }); + }); + + it('conditionContainsASubtask', function() { + var count = 0; + scheduleWait(function() { + schedule('sub task'); + return ++count == 3; + }, 100, 'counting to 3'); + schedule('post wait'); + + return waitForIdle().then(function() { + assert.equal(3, count); + assertFlowHistory( + '0: counting to 3', 'sub task', + '1: counting to 3', 'sub task', + '2: counting to 3', 'sub task', + 'post wait'); + }); + }); + + it('cancelsWaitIfScheduledTaskFails', function() { + var pair = callbackPair(null, assertIsStubError); + scheduleWait(function() { + scheduleAction('boom', throwStubError); + schedule('this should not run'); + return true; + }, 100, 'waiting to go boom').then(pair.callback, pair.errback); + schedule('post wait'); + + return waitForIdle(). + then(pair.assertErrback). + then(function() { + assertFlowHistory( + '0: waiting to go boom', 'boom', + 'post wait'); + }); + }); + + it('failsIfConditionThrows', function() { + var callbacks = callbackPair(null, assertIsStubError); + scheduleWait(throwStubError, 0, 'goes boom'). + then(callbacks.callback, callbacks.errback); + schedule('post wait'); + + return waitForIdle(). + then(callbacks.assertErrback). + then(function() { + assertFlowHistory('0: goes boom', 'post wait'); + }); + }); + + it('failsIfConditionReturnsARejectedPromise', function() { + var callbacks = callbackPair(null, assertIsStubError); + scheduleWait(function() { + return promise.rejected(new StubError); + }, 0, 'goes boom').then(callbacks.callback, callbacks.errback); + schedule('post wait'); + + return waitForIdle(). + then(callbacks.assertErrback). + then(function() { + assertFlowHistory('0: goes boom', 'post wait'); + }); + }); + + it('failsIfConditionHasUnhandledRejection', function() { + var callbacks = callbackPair(null, assertIsStubError); + scheduleWait(function() { + promise.controlFlow().execute(throwStubError); + }, 0, 'goes boom').then(callbacks.callback, callbacks.errback); + schedule('post wait'); + + return waitForIdle(). + then(callbacks.assertErrback). + then(function() { + assertFlowHistory('0: goes boom', 'post wait'); + }); + }); + + it('failsIfConditionHasAFailedSubtask', function() { + var callbacks = callbackPair(null, assertIsStubError); + var count = 0; + scheduleWait(function() { + scheduleAction('maybe throw', function() { + if (++count == 2) { + throw new StubError; + } + }); + }, 100, 'waiting').then(callbacks.callback, callbacks.errback); + schedule('post wait'); + + return waitForIdle().then(function() { + assert.equal(2, count); + assertFlowHistory( + '0: waiting', 'maybe throw', + '1: waiting', 'maybe throw', + 'post wait'); + }); + }); + + it('pollingLoopWaitsForAllScheduledTasksInCondition', function() { + var count = 0; + scheduleWait(function() { + scheduleAction('increment count', function() { ++count; }); + return count >= 3; + }, 100, 'counting to 3'); + schedule('post wait'); + + return waitForIdle().then(function() { + assert.equal(4, count); + assertFlowHistory( + '0: counting to 3', 'increment count', + '1: counting to 3', 'increment count', + '2: counting to 3', 'increment count', + '3: counting to 3', 'increment count', + 'post wait'); + }); + }); + + it('waitsForeverOnAZeroTimeout', function() { + var done = false; + setTimeout(function() { + done = true; + }, 150); + var waitResult = scheduleWait(function() { + return done; + }, 0); + + return timeout(75).then(function() { + assert.ok(!done); + return timeout(100); + }).then(function() { + assert.ok(done); + return waitResult; + }); + }); + + it('waitsForeverIfTimeoutOmitted', function() { + var done = false; + setTimeout(function() { + done = true; + }, 150); + var waitResult = scheduleWait(function() { + return done; + }); + + return timeout(75).then(function() { + assert.ok(!done); + return timeout(100); + }).then(function() { + assert.ok(done); + return waitResult; + }); + }); + + it('timesOut_nonZeroTimeout', function() { + var count = 0; + scheduleWait(function() { + count += 1; + var ms = count === 2 ? 65 : 5; + return promise.delayed(ms).then(function() { + return false; + }); + }, 60, 'counting to 3'); + return waitForAbort().then(function(e) { + switch (count) { + case 1: + assertFlowHistory('0: counting to 3'); + break; + case 2: + assertFlowHistory('0: counting to 3', '1: counting to 3'); + break; + default: + fail('unexpected polling count: ' + count); + } + assert.ok( + /^counting to 3\nWait timed out after \d+ms$/.test(e.message)); + }); + }); + + it('shouldFailIfConditionReturnsARejectedPromise', function() { + scheduleWait(function() { + return promise.rejected(new StubError); + }, 100, 'returns rejected promise on first pass'); + return waitForAbort().then(assertIsStubError); + }); + + it('scheduleWithIntermittentWaits', function() { + schedule('a'); + scheduleWait(function() { return true; }, 0, 'wait 1'); + schedule('b'); + scheduleWait(function() { return true; }, 0, 'wait 2'); + schedule('c'); + scheduleWait(function() { return true; }, 0, 'wait 3'); + + return waitForIdle().then(function() { + assertFlowHistory('a', '0: wait 1', 'b', '0: wait 2', 'c', '0: wait 3'); + }); + }); + + it('scheduleWithIntermittentAndNestedWaits', function() { + schedule('a'); + scheduleWait(function() { return true; }, 0, 'wait 1'). + then(function() { + schedule('d'); + scheduleWait(function() { return true; }, 0, 'wait 2'); + schedule('e'); + }); + schedule('b'); + scheduleWait(function() { return true; }, 0, 'wait 3'); + schedule('c'); + scheduleWait(function() { return true; }, 0, 'wait 4'); + + return waitForIdle().then(function() { + assertFlowHistory( + 'a', '0: wait 1', 'd', '0: wait 2', 'e', 'b', '0: wait 3', 'c', + '0: wait 4'); + }); + }); + + it('requiresConditionToBeAPromiseOrFunction', function() { + assert.throws(function() { + flow.wait(1234, 0); + }); + flow.wait(function() { return true;}, 0); + flow.wait(promise.fulfilled(), 0); + return waitForIdle(); + }); + + it('promiseThatDoesNotResolveBeforeTimeout', function() { + var d = promise.defer(); + flow.wait(d.promise, 5).then(fail, function(e) { + assert.ok( + /Timed out waiting for promise to resolve after \d+ms/ + .test(e.message), + 'unexpected error message: ' + e.message); + }); + return waitForIdle().then(function() { + assert.ok('Promise should not be cancelled', d.promise.isPending()); + }); + }); + + it('unboundedWaitOnPromiseResolution', function() { + var messages = []; + var d = promise.defer(); + var waitResult = flow.wait(d.promise).then(function(value) { + messages.push('b'); + assert.equal(1234, value); + }); + setTimeout(function() { + messages.push('a'); + }, 5); + + timeout(10).then(function() { + assert.deepEqual(['a'], messages); + assert.ok(waitResult.isPending()); + d.fulfill(1234); + return waitResult; + }).then(function() { + assert.deepEqual(['a', 'b'], messages); + }); + + return waitForIdle(); + }); + }); + + describe('testSubtasks', function() { + it('(base case)', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + schedule('c'); + schedule('d'); + }); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'sub-tasks', 'c', 'd', 'b'); + }); + }); + + it('nesting', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + schedule('b'); + scheduleAction('sub-sub-tasks', function() { + schedule('c'); + schedule('d'); + }); + schedule('e'); + }); + schedule('f'); + + return waitForIdle().then(function() { + assertFlowHistory( + 'a', 'sub-tasks', 'b', 'sub-sub-tasks', 'c', 'd', 'e', 'f'); + }); + }); + + it('taskReturnsSubTaskResult_1', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + return schedule('c'); + }); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'sub-tasks', 'c', 'b'); + }); + }); + + it('taskReturnsSubTaskResult_2', function() { + let pair = callbackPair((value) => assert.equal(123, value)); + schedule('a'); + schedule('sub-tasks', promise.fulfilled(123)).then(pair.callback); + schedule('b'); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'sub-tasks','b'); + pair.assertCallback(); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_1', function() { + scheduleAction('a', function() { + return promise.delayed(10).then(function() { + schedule('b'); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_2', function() { + scheduleAction('a', function() { + return promise.fulfilled().then(function() { + schedule('b'); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_3', function() { + scheduleAction('a', function() { + return promise.delayed(10).then(function() { + return schedule('b'); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_4', function() { + scheduleAction('a', function() { + return promise.delayed(5).then(function() { + return promise.delayed(5).then(function() { + return schedule('b'); + }); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_5', function() { + scheduleAction('a', function() { + return promise.delayed(5).then(function() { + return promise.delayed(5).then(function() { + return promise.delayed(5).then(function() { + return promise.delayed(5).then(function() { + return schedule('b'); + }); + }); + }); + }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('taskReturnsPromiseThatDependsOnSubtask_6', function() { + scheduleAction('a', function() { + return promise.delayed(5). + then(function() { return promise.delayed(5) }). + then(function() { return promise.delayed(5) }). + then(function() { return promise.delayed(5) }). + then(function() { return schedule('b'); }); + }); + schedule('c'); + return waitForIdle().then(function() { + assertFlowHistory('a', 'b', 'c'); + }); + }); + + it('subTaskFails_1', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + scheduleAction('sub-task that fails', throwStubError); + }); + schedule('should never execute'); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'sub-tasks', 'sub-task that fails'); + }); + }); + + it('subTaskFails_2', function() { + schedule('a'); + scheduleAction('sub-tasks', function() { + return promise.rejected(new StubError); + }); + schedule('should never execute'); + + return waitForAbort(). + then(assertIsStubError). + then(function() { + assertFlowHistory('a', 'sub-tasks'); + }); + }); + + it('subTaskFails_3', function() { + var callbacks = callbackPair(null, assertIsStubError); + + schedule('a'); + scheduleAction('sub-tasks', function() { + return promise.rejected(new StubError); + }).then(callbacks.callback, callbacks.errback); + schedule('b'); + + return waitForIdle(). + then(function() { + assertFlowHistory('a', 'sub-tasks', 'b'); + callbacks.assertErrback(); + }); + }); + }); + + describe('testEventLoopWaitsOnPendingPromiseRejections', function() { + it('oneRejection', function() { + var d = new promise.Deferred; + scheduleAction('one', function() { + return d.promise; + }); + scheduleAction('two', function() {}); + + return timeout(50).then(function() { + assertFlowHistory('one'); + d.reject(new StubError); + return waitForAbort(); + }). + then(assertIsStubError). + then(function() { + assertFlowHistory('one'); + }); + }); + + it('multipleRejections', function() { + var once = Error('once'); + var twice = Error('twice'); + + scheduleAction('one', function() { + promise.rejected(once); + promise.rejected(twice); + }); + var twoResult = scheduleAction('two', function() {}); + + flow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + return new NativePromise(function(fulfill, reject) { + setTimeout(function() { + reject(Error('Should have reported the two errors by now')); + }, 50); + flow.on( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, + fulfill); + }).then(function(e) { + assert.ok(e instanceof promise.MultipleUnhandledRejectionError, + 'Not a MultipleUnhandledRejectionError'); + let errors = Array.from(e.errors); + assert.deepEqual([once, twice], errors); + assertFlowHistory('one'); + assert.ok(!twoResult.isPending(), 'Did not cancel the second task'); + }); + }); + }); + + describe('testCancelsPromiseReturnedByCallbackIfFrameFails', function() { + it('promiseCallback', function() { + var chainPair = callbackPair(null, assertIsStubError); + var deferredPair = callbackPair(null, function(e) { + assert.equal('CancellationError: StubError', e.toString(), + 'callback result should be cancelled'); + }); + + var d = new promise.Deferred(); + d.then(deferredPair.callback, deferredPair.errback); + + promise.fulfilled(). + then(function() { + scheduleAction('boom', throwStubError); + schedule('this should not run'); + return d.promise; + }). + then(chainPair.callback, chainPair.errback); + + return waitForIdle().then(function() { + assertFlowHistory('boom'); + chainPair.assertErrback('chain errback not invoked'); + deferredPair.assertErrback('deferred errback not invoked'); + }); + }); + + it('taskCallback', function() { + var chainPair = callbackPair(null, assertIsStubError); + var deferredPair = callbackPair(null, function(e) { + assert.equal('CancellationError: StubError', e.toString(), + 'callback result should be cancelled'); + }); + + var d = new promise.Deferred(); + d.then(deferredPair.callback, deferredPair.errback); + + schedule('a'). + then(function() { + scheduleAction('boom', throwStubError); + schedule('this should not run'); + return d.promise; + }). + then(chainPair.callback, chainPair.errback); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'boom'); + chainPair.assertErrback('chain errback not invoked'); + deferredPair.assertErrback('deferred errback not invoked'); + }); + }); + }); + + it('testMaintainsOrderInCallbacksWhenATaskReturnsAPromise', function() { + schedule('__start__', promise.fulfilled()). + then(function() { + messages.push('a'); + schedulePush('b'); + messages.push('c'); + }). + then(function() { + messages.push('d'); + }); + schedulePush('e'); + + return waitForIdle().then(function() { + assertFlowHistory('__start__', 'b', 'e'); + assertMessages('a', 'c', 'b', 'd', 'e'); + }); + }); + + it('testOwningFlowIsActivatedForExecutingTasks', function() { + var defaultFlow = promise.controlFlow(); + var order = []; + + promise.createFlow(function(flow) { + assertFlowIs(flow); + order.push(0); + + defaultFlow.execute(function() { + assertFlowIs(defaultFlow); + order.push(1); + }); + }); + + return waitForIdle().then(function() { + assertFlowIs(defaultFlow); + assert.deepEqual([0, 1], order); + }); + }); + + it('testCreateFlowReturnsPromisePairedWithCreatedFlow', function() { + return new NativePromise(function(fulfill, reject) { + var newFlow; + promise.createFlow(function(flow) { + newFlow = flow; + assertFlowIs(newFlow); + }).then(function() { + assertFlowIs(newFlow); + waitForIdle(newFlow).then(fulfill, reject); + }); + }); + }); + + it('testDeferredFactoriesCreateForActiveFlow_defaultFlow', function() { + var e = Error(); + var defaultFlow = promise.controlFlow(); + promise.fulfilled().then(function() { + assertFlowIs(defaultFlow); + }); + promise.rejected(e).then(null, function(err) { + assert.equal(e, err); + assertFlowIs(defaultFlow); + }); + promise.defer().then(function() { + assertFlowIs(defaultFlow); + }); + + return waitForIdle(); + }); + + it('testDeferredFactoriesCreateForActiveFlow_newFlow', function() { + var e = Error(); + var newFlow = new promise.ControlFlow; + newFlow.execute(function() { + promise.fulfilled().then(function() { + assertFlowIs(newFlow); + }); + + promise.rejected(e).then(null, function(err) { + assert.equal(e, err); + assertFlowIs(newFlow); + }); + + promise.defer().then(function() { + assertFlowIs(newFlow); + }); + }).then(function() { + assertFlowIs(newFlow); + }); + + return waitForIdle(newFlow); + }); + + it('testFlowsSynchronizeWithThemselvesNotEachOther', function() { + var defaultFlow = promise.controlFlow(); + schedulePush('a', 'a'); + promise.controlFlow().timeout(250); + schedulePush('b', 'b'); + + promise.createFlow(function() { + schedulePush('c', 'c'); + schedulePush('d', 'd'); + }); + + return waitForIdle().then(function() { + assertMessages('a', 'c', 'd', 'b'); + }); + }); + + it('testUnhandledErrorsAreReportedToTheOwningFlow', function() { + var error1 = Error('e1'); + var error2 = Error('e2'); + + var defaultFlow = promise.controlFlow(); + defaultFlow.removeAllListeners('uncaughtException'); + + var flow1Error = NativePromise.defer(); + flow1Error.promise.then(function(value) { + assert.equal(error2, value); + }); + + var flow2Error = NativePromise.defer(); + flow2Error.promise.then(function(value) { + assert.equal(error1, value); + }); + + promise.createFlow(function(flow) { + flow.once('uncaughtException', flow2Error.resolve); + promise.rejected(error1); + + defaultFlow.once('uncaughtException', flow1Error.resolve); + defaultFlow.execute(function() { + promise.rejected(error2); + }); + }); + + return NativePromise.all([flow1Error.promise, flow2Error.promise]); + }); + + it('testCanSynchronizeFlowsByReturningPromiseFromOneToAnother', function() { + var flow1 = new promise.ControlFlow; + var flow1Done = NativePromise.defer(); + flow1.once('idle', flow1Done.resolve); + flow1.once('uncaughtException', flow1Done.reject); + + var flow2 = new promise.ControlFlow; + var flow2Done = NativePromise.defer(); + flow2.once('idle', flow2Done.resolve); + flow2.once('uncaughtException', flow2Done.reject); + + flow1.execute(function() { + schedulePush('a', 'a'); + return promise.delayed(25); + }, 'start flow 1'); + + flow2.execute(function() { + schedulePush('b', 'b'); + schedulePush('c', 'c'); + flow2.execute(function() { + return flow1.execute(function() { + schedulePush('d', 'd'); + }, 'flow 1 task'); + }, 'inject flow1 result into flow2'); + schedulePush('e', 'e'); + }, 'start flow 2'); + + return NativePromise.all([flow1Done.promise, flow2Done.promise]). + then(function() { + assertMessages('a', 'b', 'c', 'd', 'e'); + }); + }); + + it('testFramesWaitToCompleteForPendingRejections', function() { + return new NativePromise(function(fulfill, reject) { + + promise.controlFlow().execute(function() { + promise.rejected(new StubError); + }).then(fulfill, reject); + + }). + then(() => fail('expected to fail'), assertIsStubError); + }); + + it('testSynchronizeErrorsPropagateToOuterFlow', function() { + var outerFlow = new promise.ControlFlow; + var innerFlow = new promise.ControlFlow; + + var block = NativePromise.defer(); + innerFlow.execute(function() { + return block.promise; + }, 'block inner flow'); + + outerFlow.execute(function() { + block.resolve(); + return innerFlow.execute(function() { + promise.rejected(new StubError); + }, 'trigger unhandled rejection error'); + }, 'run test'); + + return NativePromise.all([ + waitForIdle(innerFlow), + waitForAbort(outerFlow).then(assertIsStubError) + ]); + }); + + it('testFailsIfErrbackThrows', function() { + promise.rejected('').then(null, throwStubError); + return waitForAbort().then(assertIsStubError); + }); + + it('testFailsIfCallbackReturnsRejectedPromise', function() { + promise.fulfilled().then(function() { + return promise.rejected(new StubError); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('testAbortsFrameIfTaskFails', function() { + promise.fulfilled().then(function() { + promise.controlFlow().execute(throwStubError); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('testAbortsFramePromisedChainedFromTaskIsNotHandled', function() { + promise.fulfilled().then(function() { + promise.controlFlow().execute(function() {}). + then(throwStubError); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('testTrapsChainedUnhandledRejectionsWithinAFrame', function() { + var pair = callbackPair(null, assertIsStubError); + promise.fulfilled().then(function() { + promise.controlFlow().execute(function() {}). + then(throwStubError); + }).then(pair.callback, pair.errback); + + return waitForIdle().then(pair.assertErrback); + }); + + it('testCancelsRemainingTasksIfFrameThrowsDuringScheduling', function() { + var task1, task2; + var pair = callbackPair(null, assertIsStubError); + var flow = promise.controlFlow(); + flow.execute(function() { + task1 = flow.execute(function() {}); + task2 = flow.execute(function() {}); + throw new StubError; + }).then(pair.callback, pair.errback); + + return waitForIdle(). + then(pair.assertErrback). + then(function() { + assert.ok(!task1.isPending()); + pair = callbackPair(); + return task1.then(pair.callback, pair.errback); + }). + then(function() { + pair.assertErrback(); + assert.ok(!task2.isPending()); + pair = callbackPair(); + return task2.then(pair.callback, pair.errback); + }). + then(function() { + pair.assertErrback(); + }); + }); + + it('testCancelsRemainingTasksInFrameIfATaskFails', function() { + var task; + var pair = callbackPair(null, assertIsStubError); + var flow = promise.controlFlow(); + flow.execute(function() { + flow.execute(throwStubError); + task = flow.execute(function() {}); + }).then(pair.callback, pair.errback); + + return waitForIdle().then(pair.assertErrback).then(function() { + assert.ok(!task.isPending()); + pair = callbackPair(); + task.then(pair.callback, pair.errback); + }).then(function() { + pair.assertErrback(); + }); + }); + + it('testDoesNotModifyRejectionErrorIfPromiseNotInsideAFlow', function() { + var error = Error('original message'); + var originalStack = error.stack; + var originalStr = error.toString(); + + var pair = callbackPair(null, function(e) { + assert.equal(error, e); + assert.equal('original message', e.message); + assert.equal(originalStack, e.stack); + assert.equal(originalStr, e.toString()); + }); + + promise.rejected(error).then(pair.callback, pair.errback); + return waitForIdle().then(pair.assertErrback); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/444 */ + it('testMaintainsOrderWithPromiseChainsCreatedWithinAForeach_1', function() { + var messages = []; + flow.execute(function() { + return promise.fulfilled(['a', 'b', 'c', 'd']); + }, 'start').then(function(steps) { + steps.forEach(function(step) { + promise.fulfilled(step) + .then(function() { + messages.push(step + '.1'); + }).then(function() { + messages.push(step + '.2'); + }); + }) + }); + return waitForIdle().then(function() { + assert.deepEqual( + ['a.1', 'a.2', 'b.1', 'b.2', 'c.1', 'c.2', 'd.1', 'd.2'], + messages); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/444 */ + it('testMaintainsOrderWithPromiseChainsCreatedWithinAForeach_2', function() { + var messages = []; + flow.execute(function() { + return promise.fulfilled(['a', 'b', 'c', 'd']); + }, 'start').then(function(steps) { + steps.forEach(function(step) { + promise.fulfilled(step) + .then(function() { + messages.push(step + '.1'); + }).then(function() { + flow.execute(function() {}, step + '.2').then(function() { + messages.push(step + '.2'); + }); + }); + }) + }); + return waitForIdle().then(function() { + assert.deepEqual( + ['a.1', 'a.2', 'b.1', 'b.2', 'c.1', 'c.2', 'd.1', 'd.2'], + messages); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/444 */ + it('testMaintainsOrderWithPromiseChainsCreatedWithinAForeach_3', function() { + var messages = []; + flow.execute(function() { + return promise.fulfilled(['a', 'b', 'c', 'd']); + }, 'start').then(function(steps) { + steps.forEach(function(step) { + promise.fulfilled(step) + .then(function(){}) + .then(function() { + messages.push(step + '.1'); + return flow.execute(function() {}, step + '.1'); + }).then(function() { + flow.execute(function() {}, step + '.2').then(function(text) { + messages.push(step + '.2'); + }); + }); + }) + }); + return waitForIdle().then(function() { + assert.deepEqual( + ['a.1', 'a.2', 'b.1', 'b.2', 'c.1', 'c.2', 'd.1', 'd.2'], + messages); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/363 */ + it('testTasksScheduledInASeparateTurnOfTheEventLoopGetASeparateTaskQueue_2', function() { + scheduleAction('a', () => promise.delayed(10)); + schedule('b'); + setTimeout(() => schedule('c'), 0); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'b'); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/363 */ + it('testTasksScheduledInASeparateTurnOfTheEventLoopGetASeparateTaskQueue_2', function() { + scheduleAction('a', () => promise.delayed(10)); + schedule('b'); + schedule('c'); + setTimeout(function() { + schedule('d'); + scheduleAction('e', () => promise.delayed(10)); + schedule('f'); + }, 0); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'd', 'e', 'b', 'c', 'f'); + }); + }); + + /** See https://github.com/SeleniumHQ/selenium/issues/363 */ + it('testCanSynchronizeTasksFromAdjacentTaskQueues', function() { + var task1 = scheduleAction('a', () => promise.delayed(10)); + schedule('b'); + setTimeout(function() { + scheduleAction('c', () => task1); + schedule('d'); + }, 0); + + return waitForIdle().then(function() { + assertFlowHistory('a', 'c', 'd', 'b'); + }); + }); + + describe('testCancellingAScheduledTask', function() { + it('1', function() { + var called = false; + var task1 = scheduleAction('a', () => called = true); + task1.cancel('no soup for you'); + + return waitForIdle().then(function() { + assert.ok(!called); + assertFlowHistory(); + return task1.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + }); + }); + + it('2', function() { + schedule('a'); + var called = false; + var task2 = scheduleAction('b', () => called = true); + schedule('c'); + + task2.cancel('no soup for you'); + + return waitForIdle().then(function() { + assert.ok(!called); + assertFlowHistory('a', 'c'); + return task2.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + }); + }); + + it('3', function() { + var called = false; + var task = scheduleAction('a', () => called = true); + task.cancel(new StubError); + + return waitForIdle().then(function() { + assert.ok(!called); + assertFlowHistory(); + return task.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + }); + }); + }); + + it('4', function() { + var seen = []; + var task = scheduleAction('a', () => seen.push(1)) + .then(() => seen.push(2)) + .then(() => seen.push(3)) + .then(() => seen.push(4)) + .then(() => seen.push(5)); + task.cancel(new StubError); + + return waitForIdle().then(function() { + assert.deepEqual([], seen); + assertFlowHistory(); + return task.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + }); + }); + }); + + it('fromWithinAnExecutingTask', function() { + var called = false; + var task; + scheduleAction('a', function() { + task.cancel('no soup for you'); + }); + task = scheduleAction('b', () => called = true); + schedule('c'); + + return waitForIdle().then(function() { + assert.ok(!called); + assertFlowHistory('a', 'c'); + return task.thenCatch(function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + }); + }); + }); + + it('testCancellingAPendingTask', function() { + var order = []; + var unresolved = promise.defer(); + + var innerTask; + var outerTask = scheduleAction('a', function() { + order.push(1); + + // Schedule a task that will never finish. + innerTask = scheduleAction('a.1', function() { + return unresolved.promise; + }); + + // Since the outerTask is cancelled below, innerTask should be cancelled + // with a DiscardedTaskError, which means its callbacks are silently + // dropped - so this should never execute. + innerTask.thenCatch(function(e) { + order.push(2); + }); + }); + schedule('b'); + + outerTask.thenCatch(function(e) { + order.push(3); + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + + unresolved.promise.thenCatch(function(e) { + order.push(4); + assert.ok(e instanceof promise.CancellationError); + }); + + return timeout(10).then(function() { + assert.deepEqual([1], order); + assert.ok(unresolved.promise.isPending()); + + outerTask.cancel('no soup for you'); + return waitForIdle(); + }).then(function() { + assertFlowHistory('a', 'a.1', 'b'); + assert.deepEqual([1, 3, 4], order); + }); + }); + + it('testCancellingAPendingPromiseCallback', function() { + var called = false; + + var root = promise.fulfilled(); + root.then(function() { + cb2.cancel('no soup for you'); + }); + + var cb2 = root.then(fail, fail); // These callbacks should never be called. + cb2.then(fail, function(e) { + called = true; + assert.ok(e instanceof promise.CancellationError); + assert.equal('no soup for you', e.message); + }); + + return waitForIdle().then(function() { + assert.ok(called); + }); + }); + + describe('testResetFlow', function() { + it('1', function() { + var called = 0; + var task = flow.execute(() => called++); + task.thenFinally(() => called++); + + return new Promise(function(fulfill) { + flow.once('reset', fulfill); + flow.reset(); + + }).then(function() { + assert.equal(0, called); + assert.ok(!task.isPending()); + return task; + + }).then(fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('ControlFlow was reset', e.message); + }); + }); + + it('2', function() { + var called = 0; + var task1 = flow.execute(() => called++); + task1.thenFinally(() => called++); + + var task2 = flow.execute(() => called++); + task2.thenFinally(() => called++); + + var task3 = flow.execute(() => called++); + task3.thenFinally(() => called++); + + return new Promise(function(fulfill) { + flow.once('reset', fulfill); + flow.reset(); + + }).then(function() { + assert.equal(0, called); + assert.ok(!task1.isPending()); + assert.ok(!task2.isPending()); + assert.ok(!task3.isPending()); + }); + }); + }); + + describe('testPromiseFulfilledInsideTask', function() { + it('1', function() { + var order = []; + + flow.execute(function() { + var d = promise.defer(); + + d.promise.then(() => order.push('a')); + d.promise.then(() => order.push('b')); + d.promise.then(() => order.push('c')); + d.fulfill(); + + flow.execute(() => order.push('d')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'fin'], order); + }); + }); + + it('2', function() { + var order = []; + + flow.execute(function() { + flow.execute(() => order.push('a')); + flow.execute(() => order.push('b')); + + var d = promise.defer(); + d.promise.then(() => order.push('c')); + d.promise.then(() => order.push('d')); + d.fulfill(); + + flow.execute(() => order.push('e')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'e', 'fin'], order); + }); + }); + + it('3', function() { + var order = []; + var d = promise.defer(); + d.promise.then(() => order.push('c')); + d.promise.then(() => order.push('d')); + + flow.execute(function() { + flow.execute(() => order.push('a')); + flow.execute(() => order.push('b')); + + d.promise.then(() => order.push('e')); + d.fulfill(); + + flow.execute(() => order.push('f')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['c', 'd', 'a', 'b', 'e', 'f', 'fin'], order); + }); + }); + + it('4', function() { + var order = []; + var d = promise.defer(); + d.promise.then(() => order.push('a')); + d.promise.then(() => order.push('b')); + + flow.execute(function() { + flow.execute(function() { + order.push('c'); + flow.execute(() => order.push('d')); + d.promise.then(() => order.push('e')); + }); + flow.execute(() => order.push('f')); + + d.promise.then(() => order.push('g')); + d.fulfill(); + + flow.execute(() => order.push('h')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'fin'], order); + }); + }); + }); + + describe('testSettledPromiseCallbacksInsideATask', function() { + it('1', function() { + var order = []; + var p = promise.fulfilled(); + + flow.execute(function() { + flow.execute(() => order.push('a')); + p.then(() => order.push('b')); + flow.execute(() => order.push('c')); + p.then(() => order.push('d')); + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'fin'], order); + }); + }); + + it('2', function() { + var order = []; + + flow.execute(function() { + flow.execute(() => order.push('a')) + .then( () => order.push('c')); + flow.execute(() => order.push('b')); + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'c', 'b', 'fin'], order); + }); + }); + }); + + it('testTasksDoNotWaitForNewlyCreatedPromises', function() { + var order = []; + + flow.execute(function() { + var d = promise.defer(); + + // This is a normal promise, not a task, so the task for this callback is + // considered volatile. Volatile tasks should be skipped when they reach + // the front of the task queue. + d.promise.then(() => order.push('a')); + + flow.execute(() => order.push('b')); + flow.execute(function() { + flow.execute(() => order.push('c')); + d.promise.then(() => order.push('d')); + d.fulfill(); + }); + flow.execute(() => order.push('e')); + + }).then(() => order.push('fin')); + + return waitForIdle().then(function() { + assert.deepEqual(['b', 'a', 'c', 'd', 'e', 'fin'], order); + }); + }); + + it('testCallbackDependenciesDoNotDeadlock', function() { + var order = []; + var root = promise.defer(); + var dep = promise.fulfilled().then(function() { + order.push('a'); + return root.promise.then(function() { + order.push('b'); + }); + }); + // This callback depends on |dep|, which depends on another callback + // attached to |root| via a chain. + root.promise.then(function() { + order.push('c'); + return dep.then(() => order.push('d')); + }).then(() => order.push('fin')); + + setTimeout(() => root.fulfill(), 20); + + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c', 'd', 'fin'], order); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_generator_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_generator_test.js new file mode 100644 index 0000000..44568c9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_generator_test.js @@ -0,0 +1,308 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); +const promise = require('../../lib/promise'); + +describe('promise.consume()', function() { + it('requires inputs to be generator functions', function() { + assert.throws(function() { + promise.consume(function() {}); + }); + }); + + it('handles a basic generator with no yielded promises', function() { + var values = []; + return promise.consume(function* () { + var i = 0; + while (i < 4) { + i = yield i + 1; + values.push(i); + } + }).then(function() { + assert.deepEqual([1, 2, 3, 4], values); + }); + }); + + it('handles a promise yielding generator', function() { + var values = []; + return promise.consume(function* () { + var i = 0; + while (i < 4) { + // Test that things are actually async here. + setTimeout(function() { + values.push(i * 2); + }, 10); + + yield promise.delayed(10).then(function() { + values.push(i++); + }); + } + }).then(function() { + assert.deepEqual([0, 0, 2, 1, 4, 2, 6, 3], values); + }); + }); + + it('assignemnts to yielded promises get fulfilled value', function() { + return promise.consume(function* () { + var p = promise.fulfilled(2); + var x = yield p; + assert.equal(2, x); + }); + }); + + it('is possible to cancel promise generators', function() { + var values = []; + var p = promise.consume(function* () { + var i = 0; + while (i < 3) { + yield promise.delayed(100).then(function() { + values.push(i++); + }); + } + }); + return promise.delayed(75).then(function() { + p.cancel(); + return p.thenCatch(function() { + return promise.delayed(300); + }); + }).then(function() { + assert.deepEqual([0], values); + }); + }); + + it('uses final return value as fulfillment value', function() { + return promise.consume(function* () { + yield 1; + yield 2; + return 3; + }).then(function(value) { + assert.equal(3, value); + }); + }); + + it('throws rejected promise errors within the generator', function() { + var values = []; + return promise.consume(function* () { + values.push('a'); + var e = Error('stub error'); + try { + yield promise.rejected(e); + values.push('b'); + } catch (ex) { + assert.equal(e, ex); + values.push('c'); + } + values.push('d'); + }).then(function() { + assert.deepEqual(['a', 'c', 'd'], values); + }); + }); + + it('aborts the generator if there is an unhandled rejection', function() { + var values = []; + var e = Error('stub error'); + return promise.consume(function* () { + values.push(1); + yield promise.rejected(e); + values.push(2); + }).thenCatch(function() { + assert.deepEqual([1], values); + }); + }); + + it('yield waits for promises', function() { + var values = []; + var d = promise.defer(); + + setTimeout(function() { + assert.deepEqual([1], values); + d.fulfill(2); + }, 100); + + return promise.consume(function* () { + values.push(1); + values.push((yield d.promise), 3); + }).then(function() { + assert.deepEqual([1, 2, 3], values); + }); + }); + + it('accepts custom scopes', function() { + return promise.consume(function* () { + return this.name; + }, {name: 'Bob'}).then(function(value) { + assert.equal('Bob', value); + }); + }); + + it('accepts initial generator arguments', function() { + return promise.consume(function* (a, b) { + assert.equal('red', a); + assert.equal('apples', b); + }, null, 'red', 'apples'); + }); + + it('executes generator within the control flow', function() { + var promises = [ + promise.defer(), + promise.defer() + ]; + var values = []; + + setTimeout(function() { + assert.deepEqual([], values); + promises[0].fulfill(1); + }, 100); + + setTimeout(function() { + assert.deepEqual([1], values); + promises[1].fulfill(2); + }, 200); + + return promise.controlFlow().execute(function* () { + values.push(yield promises[0].promise); + values.push(yield promises[1].promise); + values.push('fin'); + }).then(function() { + assert.deepEqual([1, 2, 'fin'], values); + }); + }); + + it('handles tasks scheduled in generator', function() { + var flow = promise.controlFlow(); + return flow.execute(function* () { + var x = yield flow.execute(function() { + return promise.delayed(10).then(function() { + return 1; + }); + }); + + var y = yield flow.execute(function() { + return 2; + }); + + return x + y; + }).then(function(value) { + assert.equal(3, value); + }); + }); + + it('blocks the control flow while processing generator', function() { + var values = []; + return promise.controlFlow().wait(function* () { + yield values.push(1); + values.push(yield promise.delayed(10).then(function() { + return 2; + })); + yield values.push(3); + return values.length === 6; + }, 250).then(function() { + assert.deepEqual([1, 2, 3, 1, 2, 3], values); + }); + }); + + it('ControlFlow.wait() will timeout on long generator', function() { + var values = []; + return promise.controlFlow().wait(function* () { + var i = 0; + while (i < 3) { + yield promise.delayed(100).then(function() { + values.push(i++); + }); + } + }, 75).thenCatch(function() { + assert.deepEqual( + [0, 1, 2], values, 'Should complete one loop of wait condition'); + }); + }); + + describe('generators in promise callbacks', function() { + it('works with no initial value', function() { + var promises = [ + promise.defer(), + promise.defer() + ]; + var values = []; + + setTimeout(function() { + promises[0].fulfill(1); + }, 50); + + setTimeout(function() { + promises[1].fulfill(2); + }, 100); + + return promise.fulfilled().then(function*() { + values.push(yield promises[0].promise); + values.push(yield promises[1].promise); + values.push('fin'); + }).then(function() { + assert.deepEqual([1, 2, 'fin'], values); + }); + }); + + it('starts the generator with promised value', function() { + var promises = [ + promise.defer(), + promise.defer() + ]; + var values = []; + + setTimeout(function() { + promises[0].fulfill(1); + }, 50); + + setTimeout(function() { + promises[1].fulfill(2); + }, 100); + + return promise.fulfilled(3).then(function*(value) { + var p1 = yield promises[0].promise; + var p2 = yield promises[1].promise; + values.push(value + p1); + values.push(value + p2); + values.push('fin'); + }).then(function() { + assert.deepEqual([4, 5, 'fin'], values); + }); + }); + + it('throws yielded rejections within the generator callback', function() { + var d = promise.defer(); + var e = Error('stub'); + + setTimeout(function() { + d.reject(e); + }, 50); + + return promise.fulfilled().then(function*() { + var threw = false; + try { + yield d.promise; + } catch (ex) { + threw = true; + assert.equal(e, ex); + } + assert.ok(threw); + }); + }); + }); +}); + diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_test.js new file mode 100644 index 0000000..ed6d965 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/promise_test.js @@ -0,0 +1,996 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); + +const testutil = require('./testutil'); +const promise = require('../../lib/promise'); + +// Aliases for readability. +const NativePromise = Promise; +const StubError = testutil.StubError; +const assertIsStubError = testutil.assertIsStubError; +const callbackHelper = testutil.callbackHelper; +const callbackPair = testutil.callbackPair; +const throwStubError = testutil.throwStubError; +const fail = () => assert.fail(); + +// Refer to promise_aplus_test for promise compliance with standard behavior. +describe('promise', function() { + var app, uncaughtExceptions; + + beforeEach(function setUp() { + promise.LONG_STACK_TRACES = false; + uncaughtExceptions = []; + + app = promise.controlFlow(); + app.on(promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, + (e) => uncaughtExceptions.push(e)); + }); + + afterEach(function tearDown() { + app.reset(); + promise.setDefaultFlow(new promise.ControlFlow); + assert.deepEqual([], uncaughtExceptions, + 'Did not expect any uncaught exceptions'); + promise.LONG_STACK_TRACES = false; + }); + + const assertIsPromise = (p) => assert.ok(promise.isPromise(p)); + const assertNotPromise = (v) => assert.ok(!promise.isPromise(v)); + + function createRejectedPromise(reason) { + var p = promise.rejected(reason); + p.thenCatch(function() {}); + return p; + } + + it('testCanDetectPromiseLikeObjects', function() { + assertIsPromise(new promise.Promise(function(fulfill) { + fulfill(); + })); + assertIsPromise(new promise.Deferred()); + assertIsPromise(new promise.Deferred().promise); + assertIsPromise({then:function() {}}); + + assertNotPromise(undefined); + assertNotPromise(null); + assertNotPromise(''); + assertNotPromise(true); + assertNotPromise(false); + assertNotPromise(1); + assertNotPromise({}); + assertNotPromise({then:1}); + assertNotPromise({then:true}); + assertNotPromise({then:''}); + }); + + describe('then', function() { + it('returnsOwnPromiseIfNoCallbacksWereGiven', function() { + var deferred = new promise.Deferred(); + assert.equal(deferred.promise, deferred.promise.then()); + assert.equal(deferred.promise, deferred.promise.thenCatch()); + assert.equal(deferred.promise, promise.when(deferred.promise)); + }); + + it('stillConsideredUnHandledIfNoCallbacksWereGivenOnCallsToThen', function() { + promise.rejected(new StubError).then(); + var handler = callbackHelper(assertIsStubError); + + // so tearDown() doesn't throw + app.removeAllListeners(); + app.on(promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, handler); + return NativePromise.resolve().then(() => handler.assertCalled()); + }); + }); + + describe('thenFinally', function() { + it('nonFailingCallbackDoesNotSuppressOriginalError', function() { + var done = callbackHelper(assertIsStubError); + return promise.rejected(new StubError). + thenFinally(function() {}). + thenCatch(done). + thenFinally(done.assertCalled); + }); + + it('failingCallbackSuppressesOriginalError', function() { + var done = callbackHelper(assertIsStubError); + return promise.rejected(new Error('original')). + thenFinally(throwStubError). + thenCatch(done). + thenFinally(done.assertCalled); + }); + + it('callbackThrowsAfterFulfilledPromise', function() { + var done = callbackHelper(assertIsStubError); + return promise.fulfilled(). + thenFinally(throwStubError). + thenCatch(done). + thenFinally(done.assertCalled); + }); + + it('callbackReturnsRejectedPromise', function() { + var done = callbackHelper(assertIsStubError); + return promise.fulfilled(). + thenFinally(function() { + return promise.rejected(new StubError); + }). + thenCatch(done). + thenFinally(done.assertCalled); + }); + }); + + describe('cancel', function() { + it('passesTheCancellationReasonToReject', function() { + var d = new promise.Deferred(); + var res = d.then(assert.fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('because i said so', e.message); + }); + d.cancel('because i said so'); + return res; + }); + + it('canCancelADeferredFromAChainedPromise', function() { + var d = new promise.Deferred(); + var p = d.then(assert.fail, function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('because i said so', e.message); + }); + var p2 = p.then(function() {}, assert.fail); + + p.cancel('because i said so'); + return p2; + }); + + it('canCancelATimeout', function() { + var p = promise.delayed(25) + .then(assert.fail, (e) => e instanceof promise.CancellationError); + setTimeout(() => p.cancel(), 20); + p.cancel(); + return p; + }); + + it('cancelIsANoopOnceAPromiseHasBeenFulfilled', function() { + var p = promise.fulfilled(123); + p.cancel(); + return p.then((v) => assert.equal(123, v)); + }); + + it('cancelIsANoopOnceAPromiseHasBeenRejected', function() { + var p = promise.rejected(new StubError); + p.cancel(); + + var pair = callbackPair(null, assertIsStubError); + return p.then(assert.fail, assertIsStubError); + }); + + it('noopCancelTriggeredOnCallbackOfResolvedPromise', function() { + var d = promise.defer(); + var p = d.promise.then(); + + d.fulfill(); + p.cancel(); // This should not throw. + return p; // This should not trigger a failure. + }); + }); + + describe('when', function() { + it('ReturnsAResolvedPromiseIfGivenANonPromiseValue', function() { + var ret = promise.when('abc'); + assertIsPromise(ret); + return ret.then((value) => assert.equal('abc', value)); + }); + + it('PassesRawErrorsToCallbacks', function() { + var error = new Error('boo!'); + return promise.when(error, function(value) { + assert.equal(error, value); + }); + }); + + it('WaitsForValueToBeResolvedBeforeInvokingCallback', function() { + var d = new promise.Deferred(), callback; + let result = promise.when(d, callback = callbackHelper(function(value) { + assert.equal('hi', value); + })); + callback.assertNotCalled(); + d.fulfill('hi'); + return result.then(callback.assertCalled); + }); + + it('canCancelReturnedPromise', function() { + var callbacks = callbackPair(null, function(e) { + assert.ok(e instanceof promise.CancellationError); + assert.equal('just because', e.message); + }); + + var promiseLike = { + then: function(cb, eb) { + this.callback = cb; + this.errback = eb; + } + }; + + var aPromise = promise.when(promiseLike, + callbacks.callback, callbacks.errback); + + assert.ok(aPromise.isPending()); + aPromise.cancel('just because'); + + return aPromise.thenFinally(callbacks.assertErrback); + }); + }); + + it('firesUncaughtExceptionEventIfRejectionNeverHandled', function() { + promise.rejected(new StubError); + var handler = callbackHelper(assertIsStubError); + + // so tearDown() doesn't throw + app.removeAllListeners(); + app.on(promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION, handler); + + return NativePromise.resolve().then(handler.assertCalled); + }); + + it('cannotResolveADeferredWithItself', function() { + var deferred = new promise.Deferred(); + assert.throws(() => deferred.fulfill(deferred)); + assert.throws(() => deferred.reject(deferred)); + }); + + describe('fullyResolved', function() { + it('primitives', function() { + function runTest(value) { + var callback, errback; + return promise.fullyResolved(value) + .then((resolved) => assert.equal(value, resolved)); + } + return runTest(true) + .then(() => runTest(function() {})) + .then(() => runTest(null)) + .then(() => runTest(123)) + .then(() => runTest('foo bar')) + .then(() => runTest(undefined)); + }); + + it('arrayOfPrimitives', function() { + var fn = function() {}; + var array = [true, fn, null, 123, '', undefined, 1]; + return promise.fullyResolved(array).then(function(resolved) { + assert.equal(array, resolved); + assert.deepEqual([true, fn, null, 123, '', undefined, 1], + resolved); + }); + }); + + it('nestedArrayOfPrimitives', function() { + var fn = function() {}; + var array = [true, [fn, null, 123], '', undefined]; + return promise.fullyResolved(array) + .then(function(resolved) { + assert.equal(array, resolved); + assert.deepEqual([true, [fn, null, 123], '', undefined], resolved); + assert.deepEqual([fn, null, 123], resolved[1]); + }); + }); + + it('arrayWithPromisedPrimitive', function() { + return promise.fullyResolved([promise.fulfilled(123)]) + .then(function(resolved) { + assert.deepEqual([123], resolved); + }); + }); + + it('promiseResolvesToPrimitive', function() { + return promise.fullyResolved(promise.fulfilled(123)) + .then((resolved) => assert.equal(123, resolved)); + }); + + it('promiseResolvesToArray', function() { + var fn = function() {}; + var array = [true, [fn, null, 123], '', undefined]; + var aPromise = promise.fulfilled(array); + + var result = promise.fullyResolved(aPromise); + return result.then(function(resolved) { + assert.equal(array, resolved); + assert.deepEqual([true, [fn, null, 123], '', undefined], + resolved); + assert.deepEqual([fn, null, 123], resolved[1]); + }); + }); + + it('promiseResolvesToArrayWithPromises', function() { + var nestedPromise = promise.fulfilled(123); + var aPromise = promise.fulfilled([true, nestedPromise]); + return promise.fullyResolved(aPromise) + .then(function(resolved) { + assert.deepEqual([true, 123], resolved); + }); + }); + + it('rejectsIfArrayPromiseRejects', function() { + var nestedPromise = createRejectedPromise(new StubError); + var aPromise = promise.fulfilled([true, nestedPromise]); + + var pair = callbackPair(null, assertIsStubError); + return promise.fullyResolved(aPromise) + .then(assert.fail, assertIsStubError); + }); + + it('rejectsOnFirstArrayRejection', function() { + var e1 = new Error('foo'); + var e2 = new Error('bar'); + var aPromise = promise.fulfilled([ + createRejectedPromise(e1), + createRejectedPromise(e2) + ]); + + return promise.fullyResolved(aPromise) + .then(assert.fail, function(error) { + assert.strictEqual(e1, error); + }); + }); + + it('rejectsIfNestedArrayPromiseRejects', function() { + var aPromise = promise.fulfilled([ + promise.fulfilled([ + createRejectedPromise(new StubError) + ]) + ]); + + return promise.fullyResolved(aPromise) + .then(assert.fail, assertIsStubError); + }); + + it('simpleHash', function() { + var hash = {'a': 123}; + return promise.fullyResolved(hash) + .then(function(resolved) { + assert.strictEqual(hash, resolved); + assert.deepEqual(hash, {'a': 123}); + }); + }); + + it('nestedHash', function() { + var nestedHash = {'foo':'bar'}; + var hash = {'a': 123, 'b': nestedHash}; + + return promise.fullyResolved(hash) + .then(function(resolved) { + assert.strictEqual(hash, resolved); + assert.deepEqual({'a': 123, 'b': {'foo': 'bar'}}, resolved); + assert.strictEqual(nestedHash, resolved['b']); + }); + }); + + it('promiseResolvesToSimpleHash', function() { + var hash = {'a': 123}; + var aPromise = promise.fulfilled(hash); + + return promise.fullyResolved(aPromise) + .then((resolved) => assert.strictEqual(hash, resolved)); + }); + + it('promiseResolvesToNestedHash', function() { + var nestedHash = {'foo':'bar'}; + var hash = {'a': 123, 'b': nestedHash}; + var aPromise = promise.fulfilled(hash); + + return promise.fullyResolved(aPromise) + .then(function(resolved) { + assert.strictEqual(hash, resolved); + assert.strictEqual(nestedHash, resolved['b']); + assert.deepEqual(hash, {'a': 123, 'b': {'foo': 'bar'}}); + }); + }); + + it('promiseResolvesToHashWithPromises', function() { + var aPromise = promise.fulfilled({ + 'a': promise.fulfilled(123) + }); + + return promise.fullyResolved(aPromise) + .then(function(resolved) { + assert.deepEqual({'a': 123}, resolved); + }); + }); + + it('rejectsIfHashPromiseRejects', function() { + var aPromise = promise.fulfilled({ + 'a': createRejectedPromise(new StubError) + }); + + return promise.fullyResolved(aPromise) + .then(assert.fail, assertIsStubError); + }); + + it('rejectsIfNestedHashPromiseRejects', function() { + var aPromise = promise.fulfilled({ + 'a': {'b': createRejectedPromise(new StubError)} + }); + + return promise.fullyResolved(aPromise) + .then(assert.fail, assertIsStubError); + }); + + it('instantiatedObject', function() { + function Foo() { + this.bar = 'baz'; + } + var foo = new Foo; + + return promise.fullyResolved(foo).then(function(resolvedFoo) { + assert.equal(foo, resolvedFoo); + assert.ok(resolvedFoo instanceof Foo); + assert.deepEqual(new Foo, resolvedFoo); + }); + }); + + it('withEmptyArray', function() { + return promise.fullyResolved([]).then(function(resolved) { + assert.deepEqual([], resolved); + }); + }); + + it('withEmptyHash', function() { + return promise.fullyResolved({}).then(function(resolved) { + assert.deepEqual({}, resolved); + }); + }); + + it('arrayWithPromisedHash', function() { + var obj = {'foo': 'bar'}; + var array = [promise.fulfilled(obj)]; + + return promise.fullyResolved(array).then(function(resolved) { + assert.deepEqual(resolved, [obj]); + }); + }); + }); + + describe('checkedNodeCall', function() { + it('functionThrows', function() { + return promise.checkedNodeCall(throwStubError) + .then(assert.fail, assertIsStubError); + }); + + it('functionReturnsAnError', function() { + return promise.checkedNodeCall(function(callback) { + callback(new StubError); + }).then(assert.fail, assertIsStubError); + }); + + it('functionReturnsSuccess', function() { + var success = 'success!'; + return promise.checkedNodeCall(function(callback) { + callback(null, success); + }).then((value) => assert.equal(success, value)); + }); + + it('functionReturnsAndThrows', function() { + var error = new Error('boom'); + var error2 = new Error('boom again'); + return promise.checkedNodeCall(function(callback) { + callback(error); + throw error2; + }).then(assert.fail, (e) => assert.equal(error, e)); + }); + + it('functionThrowsAndReturns', function() { + var error = new Error('boom'); + var error2 = new Error('boom again'); + return promise.checkedNodeCall(function(callback) { + setTimeout(() => callback(error), 10); + throw error2; + }).then(assert.fail, (e) => assert.equal(error2, e)); + }); + }); + + describe('all', function() { + it('(base case)', function() { + var a = [ + 0, 1, + promise.defer(), + promise.defer(), + 4, 5, 6 + ]; + delete a[5]; + + var pair = callbackPair(function(value) { + assert.deepEqual([0, 1, 2, 3, 4, undefined, 6], value); + }); + + var result = promise.all(a).then(pair.callback, pair.errback); + pair.assertNeither(); + + a[2].fulfill(2); + pair.assertNeither(); + + a[3].fulfill(3); + return result.then(() => pair.assertCallback()); + }); + + it('empty array', function() { + return promise.all([]).then((a) => assert.deepEqual([], a)); + }); + + it('usesFirstRejection', function() { + var a = [ + promise.defer(), + promise.defer() + ]; + + var result = promise.all(a).then(assert.fail, assertIsStubError); + a[1].reject(new StubError); + setTimeout(() => a[0].reject(Error('ignored')), 0); + return result; + }); + }); + + describe('map', function() { + it('(base case)', function() { + var a = [1, 2, 3]; + return promise.map(a, function(value, index, a2) { + assert.equal(a, a2); + assert.equal('number', typeof index, 'not a number'); + return value + 1; + }).then(function(value) { + assert.deepEqual([2, 3, 4], value); + }); + }); + + it('omitsDeleted', function() { + var a = [0, 1, 2, 3, 4, 5, 6]; + delete a[1]; + delete a[3]; + delete a[4]; + delete a[6]; + + var expected = [0, 1, 4, 9, 16, 25, 36]; + delete expected[1]; + delete expected[3]; + delete expected[4]; + delete expected[6]; + + return promise.map(a, function(value) { + return value * value; + }).then(function(value) { + assert.deepEqual(expected, value); + }); + }); + + it('emptyArray', function() { + return promise.map([], function(value) { + return value + 1; + }).then(function(value) { + assert.deepEqual([], value); + }); + }); + + it('inputIsPromise', function() { + var input = promise.defer(); + var result = promise.map(input, function(value) { + return value + 1; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([2, 3, 4], value); + }); + result = result.then(pair.callback, pair.errback); + + setTimeout(function() { + pair.assertNeither(); + input.fulfill([1, 2, 3]); + }, 10); + + return result; + }); + + it('waitsForFunctionResultToResolve', function() { + var innerResults = [ + promise.defer(), + promise.defer() + ]; + + var result = promise.map([1, 2], function(value, index) { + return innerResults[index].promise; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual(['a', 'b'], value); + }); + result = result.then(pair.callback, pair.errback); + + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + innerResults[0].fulfill('a'); + }) + .then(function() { + pair.assertNeither(); + innerResults[1].fulfill('b'); + return result; + }) + .then(pair.assertCallback); + }); + + it('rejectsPromiseIfFunctionThrows', function() { + return promise.map([1], throwStubError) + .then(assert.fail, assertIsStubError); + }); + + it('rejectsPromiseIfFunctionReturnsRejectedPromise', function() { + return promise.map([1], function() { + return promise.rejected(new StubError); + }).then(assert.fail, assertIsStubError); + }); + + it('stopsCallingFunctionIfPreviousIterationFailed', function() { + var count = 0; + return promise.map([1, 2, 3, 4], function() { + count++; + if (count == 3) { + throw new StubError; + } + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.equal(3, count); + }); + }); + + it('rejectsWithFirstRejectedPromise', function() { + var innerResult = [ + promise.fulfilled(), + createRejectedPromise(new StubError), + createRejectedPromise(Error('should be ignored')) + ]; + var count = 0; + return promise.map([1, 2, 3, 4], function(value, index) { + count += 1; + return innerResult[index]; + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.equal(2, count); + }); + }); + + it('preservesOrderWhenMapReturnsPromise', function() { + var deferreds = [ + promise.defer(), + promise.defer(), + promise.defer(), + promise.defer() + ]; + var result = promise.map(deferreds, function(value) { + return value.promise; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([0, 1, 2, 3], value); + }); + result = result.then(pair.callback, pair.errback); + + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + for (let i = deferreds.length; i > 0; i -= 1) { + deferreds[i - 1].fulfill(i - 1); + } + return result; + }).then(pair.assertCallback); + }); + }); + + describe('filter', function() { + it('basicFiltering', function() { + var a = [0, 1, 2, 3]; + return promise.filter(a, function(val, index, a2) { + assert.equal(a, a2); + assert.equal('number', typeof index, 'not a number'); + return val > 1; + }).then(function(val) { + assert.deepEqual([2, 3], val); + }); + }); + + it('omitsDeleted', function() { + var a = [0, 1, 2, 3, 4, 5, 6]; + delete a[3]; + delete a[4]; + + return promise.filter(a, function(value) { + return value > 1 && value < 6; + }).then(function(val) { + assert.deepEqual([2, 5], val); + }); + }); + + it('preservesInputs', function() { + var a = [0, 1, 2, 3]; + + return promise.filter(a, function(value, i, a2) { + assert.equal(a, a2); + // Even if a function modifies the input array, the original value + // should be inserted into the new array. + a2[i] = a2[i] - 1; + return a2[i] >= 1; + }).then(function(val) { + assert.deepEqual([2, 3], val); + }); + }); + + it('inputIsPromise', function() { + var input = promise.defer(); + var result = promise.filter(input, function(value) { + return value > 1 && value < 3; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([2], value); + }); + result = result.then(pair.callback, pair.errback); + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + input.fulfill([1, 2, 3]); + return result; + }) + .then(pair.assertCallback); + }); + + it('waitsForFunctionResultToResolve', function() { + var innerResults = [ + promise.defer(), + promise.defer() + ]; + + var result = promise.filter([1, 2], function(value, index) { + return innerResults[index].promise; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([2], value); + }); + result = result.then(pair.callback, pair.errback); + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + innerResults[0].fulfill(false); + }) + .then(function() { + pair.assertNeither(); + innerResults[1].fulfill(true); + return result; + }) + .then(pair.assertCallback); + }); + + it('rejectsPromiseIfFunctionReturnsRejectedPromise', function() { + return promise.filter([1], function() { + return promise.rejected(new StubError); + }).then(assert.fail, assertIsStubError); + }); + + it('stopsCallingFunctionIfPreviousIterationFailed', function() { + var count = 0; + return promise.filter([1, 2, 3, 4], function() { + count++; + if (count == 3) { + throw new StubError; + } + }).then(assert.fail, function(e) { + assertIsStubError(e); + assert.equal(3, count); + }); + }); + + it('rejectsWithFirstRejectedPromise', function() { + var innerResult = [ + promise.fulfilled(), + createRejectedPromise(new StubError), + createRejectedPromise(Error('should be ignored')) + ]; + + return promise.filter([1, 2, 3, 4], function(value, index) { + assert.ok(index < innerResult.length); + return innerResult[index]; + }).then(assert.fail, assertIsStubError); + }); + + it('preservesOrderWhenFilterReturnsPromise', function() { + var deferreds = [ + promise.defer(), + promise.defer(), + promise.defer(), + promise.defer() + ]; + var result = promise.filter([0, 1, 2, 3], function(value, index) { + return deferreds[index].promise; + }); + + var pair = callbackPair(function(value) { + assert.deepEqual([1, 2], value); + }); + result = result.then(pair.callback, pair.errback); + + return NativePromise.resolve() + .then(function() { + pair.assertNeither(); + for (let i = deferreds.length - 1; i >= 0; i -= 1) { + deferreds[i].fulfill(i > 0 && i < 3); + } + return result; + }).then(pair.assertCallback); + }); + }); + + it('testAddThenableImplementation', function() { + function tmp() {} + assert.ok(!promise.Thenable.isImplementation(new tmp())); + promise.Thenable.addImplementation(tmp); + assert.ok(promise.Thenable.isImplementation(new tmp())); + + class tmpClass {} + assert.ok(!promise.Thenable.isImplementation(new tmpClass())); + promise.Thenable.addImplementation(tmpClass); + assert.ok(promise.Thenable.isImplementation(new tmpClass())); + }); + + describe('testLongStackTraces', function() { + beforeEach(() => promise.LONG_STACK_TRACES = false); + afterEach(() => promise.LONG_STACK_TRACES = false); + + it('doesNotAppendStackIfFeatureDisabled', function() { + promise.LONG_STACK_TRACES = false; + + var error = Error('hello'); + var originalStack = error.stack; + return promise.rejected(error). + then(fail). + then(fail). + then(fail). + then(fail, function(e) { + assert.equal(error, e); + assert.equal(originalStack, e.stack); + }); + }); + + function getStackMessages(error) { + return error.stack.split(/\n/).filter(function(line) { + return /^From: /.test(line); + }); + } + + it('appendsInitialPromiseCreation_resolverThrows', function() { + promise.LONG_STACK_TRACES = true; + + var error = Error('hello'); + var originalStack = '(placeholder; will be overwritten later)'; + + return new promise.Promise(function() { + try { + throw error; + } catch (e) { + originalStack = e.stack; + throw e; + } + }).then(fail, function(e) { + assert.strictEqual(error, e); + if (typeof originalStack !== 'string') { + return; + } + assert.notEqual(originalStack, e.stack); + assert.equal(e.stack.indexOf(originalStack), 0, + 'should start with original stack'); + assert.deepEqual(['From: Promise: new'], getStackMessages(e)); + }); + }); + + it('appendsInitialPromiseCreation_rejectCalled', function() { + promise.LONG_STACK_TRACES = true; + + var error = Error('hello'); + var originalStack = error.stack; + + return new promise.Promise(function(_, reject) { + reject(error); + }).then(fail, function(e) { + assert.equal(error, e); + if (typeof originalStack !== 'string') { + return; + } + assert.notEqual(originalStack, e.stack); + assert.equal(e.stack.indexOf(originalStack), 0, + 'should start with original stack'); + assert.deepEqual(['From: Promise: new'], getStackMessages(e)); + }); + }); + + it('appendsEachStepToRejectionError', function() { + promise.LONG_STACK_TRACES = true; + + var error = Error('hello'); + var originalStack = '(placeholder; will be overwritten later)'; + + return new promise.Promise(function() { + try { + throw error; + } catch (e) { + originalStack = e.stack; + throw e; + } + }). + then(fail). + thenCatch(function(e) { throw e; }). + then(fail). + thenCatch(function(e) { throw e; }). + then(fail, function(e) { + assert.equal(error, e); + if (typeof originalStack !== 'string') { + return; + } + assert.notEqual(originalStack, e.stack); + assert.equal(e.stack.indexOf(originalStack), 0, + 'should start with original stack'); + assert.deepEqual([ + 'From: Promise: new', + 'From: Promise: then', + 'From: Promise: catch', + 'From: Promise: then', + 'From: Promise: catch', + ], getStackMessages(e)); + }); + }); + + it('errorOccursInCallbackChain', function() { + promise.LONG_STACK_TRACES = true; + + var error = Error('hello'); + var originalStack = '(placeholder; will be overwritten later)'; + + return promise.fulfilled(). + then(function() {}). + then(function() {}). + then(function() { + try { + throw error; + } catch (e) { + originalStack = e.stack; + throw e; + } + }). + thenCatch(function(e) { throw e; }). + then(fail, function(e) { + assert.equal(error, e); + if (typeof originalStack !== 'string') { + return; + } + assert.notEqual(originalStack, e.stack); + assert.equal(e.stack.indexOf(originalStack), 0, + 'should start with original stack'); + assert.deepEqual([ + 'From: Promise: then', + 'From: Promise: catch', + ], getStackMessages(e)); + }); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/testutil.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/testutil.js new file mode 100644 index 0000000..e68ca28 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/testutil.js @@ -0,0 +1,90 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); +const sinon = require('sinon'); + + +class StubError extends Error { + constructor(opt_msg) { + super(opt_msg); + this.name = this.constructor.name; + } +} +exports.StubError = StubError; + +exports.throwStubError = function() { + throw new StubError; +}; + +exports.assertIsStubError = function(value) { + assert.ok(value instanceof StubError, value + ' is not a ' + StubError.name); +}; + +exports.assertIsInstance = function(ctor, value) { + assert.ok(value instanceof ctor, 'Not a ' + ctor.name + ': ' + value); +}; + +function callbackPair(cb, eb) { + if (cb && eb) { + throw new TypeError('can only specify one of callback or errback'); + } + + let callback = cb ? sinon.spy(cb) : sinon.spy(); + let errback = eb ? sinon.spy(eb) : sinon.spy(); + + function assertCallback() { + assert.ok(callback.called, 'callback not called'); + assert.ok(!errback.called, 'errback called'); + if (callback.threw()) { + throw callback.exceptions[0]; + } + } + + function assertErrback() { + assert.ok(!callback.called, 'callback called'); + assert.ok(errback.called, 'errback not called'); + if (errback.threw()) { + throw errback.exceptions[0]; + } + } + + function assertNeither() { + assert.ok(!callback.called, 'callback called'); + assert.ok(!errback.called, 'errback called'); + } + + return { + callback, + errback, + assertCallback, + assertErrback, + assertNeither + }; +} +exports.callbackPair = callbackPair; + + +exports.callbackHelper = function(cb) { + let pair = callbackPair(cb); + let wrapped = pair.callback.bind(null); + wrapped.assertCalled = () => pair.assertCallback(); + wrapped.assertNotCalled = () => pair.assertNeither(); + return wrapped; +}; diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/until_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/until_test.js new file mode 100644 index 0000000..3a25b76 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/until_test.js @@ -0,0 +1,436 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('assert'); + +const error = require('../../error'); +const By = require('../../lib/by').By; +const CommandName = require('../../lib/command').Name; +const promise = require('../../lib/promise'); +const until = require('../../lib/until'); +const webdriver = require('../../lib/webdriver'); + +describe('until', function() { + let driver, executor; + + function createResponse(value) { + return {status: 0, value}; + } + + class TestExecutor { + constructor() { + this.handlers_ = {}; + } + + on(cmd, handler) { + this.handlers_[cmd] = handler; + return this; + } + + execute(cmd) { + let self = this; + return new Promise(function(fulfill) { + if (!self.handlers_[cmd.getName()]) { + throw new error.UnknownCommandError(cmd.getName()); + } + fulfill(self.handlers_[cmd.getName()](cmd)); + }); + } + } + + function fail(opt_msg) { + throw new assert.AssertionError({message: opt_msg}); + } + + beforeEach(function setUp() { + executor = new TestExecutor(); + driver = new webdriver.WebDriver('session-id', executor); + }); + + describe('ableToSwitchToFrame', function() { + it('failsFastForNonSwitchErrors', function() { + let e = Error('boom'); + executor.on(CommandName.SWITCH_TO_FRAME, function() { + throw e; + }); + return driver.wait(until.ableToSwitchToFrame(0), 100) + .then(fail, (e2) => assert.strictEqual(e2, e)); + }); + + it('byIndex', function() { + executor.on(CommandName.SWITCH_TO_FRAME, function() { + return {status: error.ErrorCode.SUCCESS}; + }); + return driver.wait(until.ableToSwitchToFrame(0), 100); + }); + + it('byWebElement', function() { + executor.on(CommandName.SWITCH_TO_FRAME, function(cmd, callback) { + return {status: error.ErrorCode.SUCCESS}; + }); + var el = new webdriver.WebElement(driver, {ELEMENT: 1234}); + return driver.wait(until.ableToSwitchToFrame(el), 100); + }); + + it('byWebElementPromise', function() { + executor.on(CommandName.SWITCH_TO_FRAME, function(cmd, callback) { + return {status: error.ErrorCode.SUCCESS}; + }); + var el = new webdriver.WebElementPromise(driver, + promise.fulfilled(new webdriver.WebElement(driver, {ELEMENT: 1234}))); + return driver.wait(until.ableToSwitchToFrame(el), 100); + }); + + it('byLocator', function() { + executor.on(CommandName.FIND_ELEMENTS, function() { + return { + status: error.ErrorCode.SUCCESS, + value: [{ELEMENT: 1234}] + }; + }).on(CommandName.SWITCH_TO_FRAME, function() { + return {status: error.ErrorCode.SUCCESS}; + }); + + return driver.wait(until.ableToSwitchToFrame(By.id('foo')), 100); + }); + + it('byLocator_elementNotInitiallyFound', function() { + var foundResponses = [[], [], [{ELEMENT: 1234}]]; + executor.on(CommandName.FIND_ELEMENTS, function() { + return { + status: error.ErrorCode.SUCCESS, + value: foundResponses.shift() + }; + }).on(CommandName.SWITCH_TO_FRAME, function(cmd, callback) { + return {status: error.ErrorCode.SUCCESS}; + }); + + return driver.wait(until.ableToSwitchToFrame(By.id('foo')), 2000) + .then(function() { + assert.equal(foundResponses.length, 0); + }); + }); + + it('timesOutIfNeverAbletoSwitchFrames', function() { + var count = 0; + executor.on(CommandName.SWITCH_TO_FRAME, function() { + count += 1; + return {status: error.ErrorCode.NO_SUCH_FRAME}; + }); + + return driver.wait(until.ableToSwitchToFrame(0), 100) + .then(fail, function(e) { + assert.ok(count > 0); + assert.ok( + e.message.startsWith('Waiting to be able to switch to frame'), + 'Wrong message: ' + e.message); + }); + }); + }); + + describe('alertIsPresent', function() { + it('failsFastForNonAlertSwitchErrors', function() { + return driver.wait(until.alertIsPresent(), 100).then(fail, function(e) { + assert.ok(e instanceof error.UnknownCommandError); + assert.equal(e.message, CommandName.GET_ALERT_TEXT); + }); + }); + + it('waitsForAlert', function() { + var count = 0; + executor.on(CommandName.GET_ALERT_TEXT, function() { + if (count++ < 3) { + return {status: error.ErrorCode.NO_SUCH_ALERT}; + } else { + return {status: error.ErrorCode.SUCCESS}; + } + }).on(CommandName.DISMISS_ALERT, function(cmd, callback) { + return {status: error.ErrorCode.SUCCESS}; + }); + + return driver.wait(until.alertIsPresent(), 1000).then(function(alert) { + assert.equal(count, 4); + return alert.dismiss(); + }); + }); + }); + + it('testUntilTitleIs', function() { + var titles = ['foo', 'bar', 'baz']; + executor.on(CommandName.GET_TITLE, function() { + return createResponse(titles.shift()); + }); + + return driver.wait(until.titleIs('bar'), 3000).then(function() { + assert.deepStrictEqual(titles, ['baz']); + }); + }); + + it('testUntilTitleContains', function() { + var titles = ['foo', 'froogle', 'google']; + executor.on(CommandName.GET_TITLE, function() { + return createResponse(titles.shift()); + }); + + return driver.wait(until.titleContains('oogle'), 3000).then(function() { + assert.deepStrictEqual(titles, ['google']); + }); + }); + + it('testUntilTitleMatches', function() { + var titles = ['foo', 'froogle', 'aaaabc', 'aabbbc', 'google']; + executor.on(CommandName.GET_TITLE, function() { + return createResponse(titles.shift()); + }); + + return driver.wait(until.titleMatches(/^a{2,3}b+c$/), 3000) + .then(function() { + assert.deepStrictEqual(titles, ['google']); + }); + }); + + it('testUntilElementLocated', function() { + var responses = [[], [{ELEMENT: 'abc123'}, {ELEMENT: 'foo'}], ['end']]; + executor.on(CommandName.FIND_ELEMENTS, function(cmd, callback) { + return createResponse(responses.shift()); + }); + + let element = driver.wait(until.elementLocated(By.id('quux')), 2000); + assert.ok(element instanceof webdriver.WebElementPromise); + return element.getId().then(function(id) { + assert.deepStrictEqual(responses, [['end']]); + assert.equal(id, 'abc123'); + }); + }); + + describe('untilElementLocated, elementNeverFound', function() { + function runNoElementFoundTest(locator, locatorStr) { + executor.on(CommandName.FIND_ELEMENTS, function() { + return createResponse([]); + }); + + function expectedFailure() { + fail('expected condition to timeout'); + } + + return driver.wait(until.elementLocated(locator), 100) + .then(expectedFailure, function(error) { + var expected = 'Waiting for element to be located ' + locatorStr; + var lines = error.message.split(/\n/, 2); + assert.equal(lines[0], expected); + + let regex = /^Wait timed out after \d+ms$/; + assert.ok(regex.test(lines[1]), + `Lines <${lines[1]}> does not match ${regex}`); + }); + } + + it('byLocator', function() { + return runNoElementFoundTest( + By.id('quux'), 'By(css selector, *[id="quux"])'); + }); + + it('byHash', function() { + return runNoElementFoundTest( + {id: 'quux'}, 'By(css selector, *[id="quux"])'); + }); + + it('byFunction', function() { + return runNoElementFoundTest(function() {}, 'by function()'); + }); + }); + + it('testUntilElementsLocated', function() { + var responses = [[], [{ELEMENT: 'abc123'}, {ELEMENT: 'foo'}], ['end']]; + executor.on(CommandName.FIND_ELEMENTS, function() { + return createResponse(responses.shift()); + }); + + return driver.wait(until.elementsLocated(By.id('quux')), 2000) + .then(function(els) { + return Promise.all(els.map(e => e.getId())); + }).then(function(ids) { + assert.deepStrictEqual(responses, [['end']]); + assert.equal(ids.length, 2); + assert.equal(ids[0], 'abc123'); + assert.equal(ids[1], 'foo'); + }); + }); + + describe('untilElementsLocated, noElementsFound', function() { + function runNoElementsFoundTest(locator, locatorStr) { + executor.on(CommandName.FIND_ELEMENTS, function() { + return createResponse([]); + }); + + function expectedFailure() { + fail('expected condition to timeout'); + } + + return driver.wait(until.elementsLocated(locator), 100) + .then(expectedFailure, function(error) { + var expected = + 'Waiting for at least one element to be located ' + locatorStr; + var lines = error.message.split(/\n/, 2); + assert.equal(lines[0], expected); + + let regex = /^Wait timed out after \d+ms$/; + assert.ok(regex.test(lines[1]), + `Lines <${lines[1]}> does not match ${regex}`); + }); + } + + it('byLocator', function() { + return runNoElementsFoundTest( + By.id('quux'), 'By(css selector, *[id="quux"])'); + }); + + it('byHash', function() { + return runNoElementsFoundTest( + {id: 'quux'}, 'By(css selector, *[id="quux"])'); + }); + + it('byFunction', function() { + return runNoElementsFoundTest(function() {}, 'by function()'); + }); + }); + + it('testUntilStalenessOf', function() { + var responses = [ + createResponse('body'), + createResponse('body'), + createResponse('body'), + {status: error.ErrorCode.STALE_ELEMENT_REFERENCE, + value: {message: 'now stale'}}, + ['end'] + ]; + executor.on(CommandName.GET_ELEMENT_TAG_NAME, function() { + return responses.shift(); + }); + + var el = new webdriver.WebElement(driver, {ELEMENT: 'foo'}); + return driver.wait(until.stalenessOf(el), 2000).then(function() { + assert.deepStrictEqual(responses, [['end']]); + }); + }); + + describe('element state conditions', function() { + function runElementStateTest(predicate, command, responses, var_args) { + let original = new webdriver.WebElement(driver, 'foo'); + let predicateArgs = [original]; + if (arguments.length > 3) { + predicateArgs = predicateArgs.concat(arguments[1]); + command = arguments[2]; + responses = arguments[3]; + } + + assert.ok(responses.length > 1); + + responses = responses.concat(['end']); + executor.on(command, function() { + return createResponse(responses.shift()); + }); + + let result = driver.wait(predicate.apply(null, predicateArgs), 2000); + assert.ok(result instanceof webdriver.WebElementPromise); + return result.then(function(value) { + assert.ok(value instanceof webdriver.WebElement); + assert.ok(!(value instanceof webdriver.WebElementPromise)); + return value.getId(); + }).then(function(id) { + assert.equal('foo', id); + assert.deepStrictEqual(responses, ['end']); + }); + } + + it('elementIsVisible', function() { + return runElementStateTest( + until.elementIsVisible, + CommandName.IS_ELEMENT_DISPLAYED, [false, false, true]); + }); + + it('elementIsNotVisible', function() { + return runElementStateTest( + until.elementIsNotVisible, + CommandName.IS_ELEMENT_DISPLAYED, [true, true, false]); + }); + + it('elementIsEnabled', function() { + return runElementStateTest( + until.elementIsEnabled, + CommandName.IS_ELEMENT_ENABLED, [false, false, true]); + }); + + it('elementIsDisabled', function() { + return runElementStateTest( + until.elementIsDisabled, + CommandName.IS_ELEMENT_ENABLED, [true, true, false]); + }); + + it('elementIsSelected', function() { + return runElementStateTest( + until.elementIsSelected, + CommandName.IS_ELEMENT_SELECTED, [false, false, true]); + }); + + it('elementIsNotSelected', function() { + return runElementStateTest( + until.elementIsNotSelected, + CommandName.IS_ELEMENT_SELECTED, [true, true, false]); + }); + + it('elementTextIs', function() { + return runElementStateTest( + until.elementTextIs, 'foobar', + CommandName.GET_ELEMENT_TEXT, + ['foo', 'fooba', 'foobar']); + }); + + it('elementTextContains', function() { + return runElementStateTest( + until.elementTextContains, 'bar', + CommandName.GET_ELEMENT_TEXT, + ['foo', 'foobaz', 'foobarbaz']); + }); + + it('elementTextMatches', function() { + return runElementStateTest( + until.elementTextMatches, /fo+bar{3}/, + CommandName.GET_ELEMENT_TEXT, + ['foo', 'foobar', 'fooobarrr']); + }); + }); + + describe('WebElementCondition', function() { + it('fails if wait completes with a non-WebElement value', function() { + let result = driver.wait( + new until.WebElementCondition('testing', () => 123), 1000); + + return result.then( + () => assert.fail('expected to fail'), + function(e) { + assert.ok(e instanceof TypeError); + assert.equal( + 'WebElementCondition did not resolve to a WebElement: ' + + '[object Number]', + e.message); + }); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/webdriver_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/webdriver_test.js new file mode 100644 index 0000000..eb68625 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/lib/webdriver_test.js @@ -0,0 +1,2207 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const testutil = require('./testutil'); + +const error = require('../../error'); + +const By = require('../../lib/by').By; +const Capabilities = require('../../lib/capabilities').Capabilities; +const Executor = require('../../lib/command').Executor; +const CName = require('../../lib/command').Name; +const Button = require('../../lib/input').Button; +const Key = require('../../lib/input').Key; +const logging = require('../../lib/logging'); +const Session = require('../../lib/session').Session; +const promise = require('../../lib/promise'); +const Alert = require('../../lib/webdriver').Alert; +const AlertPromise = require('../../lib/webdriver').AlertPromise; +const UnhandledAlertError = require('../../lib/webdriver').UnhandledAlertError; +const WebDriver = require('../../lib/webdriver').WebDriver; +const WebElement = require('../../lib/webdriver').WebElement; +const WebElementPromise = require('../../lib/webdriver').WebElementPromise; + +const assert = require('assert'); +const sinon = require('sinon'); + +const SESSION_ID = 'test_session_id'; + +// Aliases for readability. +const NativePromise = Promise; +const ECode = error.ErrorCode; +const StubError = testutil.StubError; +const assertIsInstance = testutil.assertIsInstance; +const assertIsStubError = testutil.assertIsStubError; +const throwStubError = testutil.throwStubError; +const fail = (msg) => assert.fail(msg); + +describe('WebDriver', function() { + const LOG = logging.getLogger('webdriver.test'); + + // before(function() { + // logging.getLogger('webdriver').setLevel(logging.Level.ALL); + // logging.installConsoleHandler(); + // }); + + // after(function() { + // logging.getLogger('webdriver').setLevel(null); + // logging.removeConsoleHandler(); + // }); + + var driver; + var flow; + var uncaughtExceptions; + + beforeEach(function setUp() { + flow = promise.controlFlow(); + uncaughtExceptions = []; + flow.on('uncaughtException', onUncaughtException); + }); + + afterEach(function tearDown() { + return waitForIdle(flow).then(function() { + assert.deepEqual([], uncaughtExceptions); + flow.reset(); + }); + }); + + function onUncaughtException(e) { + uncaughtExceptions.push(e); + } + + function waitForIdle(opt_flow) { + var theFlow = opt_flow || flow; + return new Promise(function(fulfill, reject) { + if (theFlow.isIdle()) { + fulfill(); + return; + } + theFlow.once('idle', fulfill); + theFlow.once('uncaughtException', reject); + }); + } + + function waitForAbort(opt_flow, opt_n) { + var n = opt_n || 1; + var theFlow = opt_flow || flow; + theFlow.removeAllListeners( + promise.ControlFlow.EventType.UNCAUGHT_EXCEPTION); + return new Promise(function(fulfill, reject) { + theFlow.once('idle', function() { + reject(Error('expected flow to report an unhandled error')); + }); + + var errors = []; + theFlow.on('uncaughtException', onError); + function onError(e) { + errors.push(e); + if (errors.length === n) { + theFlow.removeListener('uncaughtException', onError); + fulfill(n === 1 ? errors[0] : errors); + } + } + }); + } + + function expectedError(ctor, message) { + return function(e) { + assertIsInstance(ctor, e); + assert.equal(message, e.message); + }; + } + + class Expectation { + constructor(executor, name, opt_parameters) { + this.executor_ = executor; + this.name_ = name; + this.times_ = 1; + this.sessionId_ = SESSION_ID; + this.check_ = null; + this.toDo_ = null; + this.withParameters(opt_parameters || {}); + } + + anyTimes() { + this.times_ = Infinity; + return this; + } + + times(n) { + this.times_ = n; + return this; + } + + withParameters(parameters) { + this.parameters_ = parameters; + if (this.name_ !== CName.NEW_SESSION) { + this.parameters_['sessionId'] = this.sessionId_; + } + return this; + } + + andReturn(code, opt_value) { + this.toDo_ = function(command) { + LOG.info('executing ' + command.getName() + '; returning ' + code); + return Promise.resolve({ + 'status': code, + 'sessionId': { + 'value': SESSION_ID + }, + 'value': opt_value !== void(0) ? opt_value : null + }); + }; + return this; + } + + andReturnSuccess(opt_value) { + return this.andReturn(0, opt_value); + } + + andReturnError(code, opt_value) { + return this.andReturn(code, opt_value); + } + + expect(name, opt_parameters) { + this.end(); + return this.executor_.expect(name, opt_parameters); + } + + end() { + if (!this.toDo_) { + this.andReturnSuccess(null); + } + return this.executor_; + } + + execute(command) { + assert.deepEqual(this.parameters_, command.getParameters()); + return this.toDo_(command); + } + } + + class FakeExecutor { + constructor() { + this.commands_ = new Map; + } + + execute(command) { + let expectations = this.commands_.get(command.getName()); + if (!expectations || !expectations.length) { + assert.fail('unexpected command: ' + command.getName()); + return; + } + + let next = expectations[0]; + let result = next.execute(command); + if (next.times_ != Infinity) { + next.times_ -= 1; + if (!next.times_) { + expectations.shift(); + } + } + return result; + } + + expect(commandName, opt_parameters) { + if (!this.commands_.has(commandName)) { + this.commands_.set(commandName, []); + } + let e = new Expectation(this, commandName, opt_parameters); + this.commands_.get(commandName).push(e); + return e; + } + + createDriver(opt_session) { + let session = opt_session || new Session(SESSION_ID, {}); + return new WebDriver(session, this); + } + } + + + ///////////////////////////////////////////////////////////////////////////// + // + // Tests + // + ///////////////////////////////////////////////////////////////////////////// + + + describe('testAttachToSession', function() { + it('sessionIsAvailable', function() { + let executor = new FakeExecutor(). + expect(CName.DESCRIBE_SESSION). + withParameters({'sessionId': SESSION_ID}). + andReturnSuccess({'browserName': 'firefox'}). + end(); + + let driver = WebDriver.attachToSession(executor, SESSION_ID); + return driver.getSession().then(function(session) { + assert.deepEqual({'value': 'test_session_id'}, session.getId()); + assert.equal('firefox', session.getCapability('browserName')); + }); + }); + + it('failsToGetSessionInfo', function() { + let executor = new FakeExecutor(). + expect(CName.DESCRIBE_SESSION). + withParameters({'sessionId': SESSION_ID}). + andReturnError(ECode.UNKNOWN_ERROR, {'message': 'boom'}). + end(); + + let driver = WebDriver.attachToSession(executor, SESSION_ID); + return driver.getSession() + .then(() => assert.fail('should have failed!'), function(e) { + assertIsInstance(error.WebDriverError, e); + assert.equal('boom', e.message); + }); + }); + + it('usesActiveFlowByDefault', function() { + let executor = new FakeExecutor(). + expect(CName.DESCRIBE_SESSION). + withParameters({'sessionId': SESSION_ID}). + andReturnSuccess({}). + end(); + + var driver = WebDriver.attachToSession(executor, SESSION_ID); + assert.equal(driver.controlFlow(), promise.controlFlow()); + + return waitForIdle(driver.controlFlow()); + }); + + it('canAttachInCustomFlow', function() { + let executor = new FakeExecutor(). + expect(CName.DESCRIBE_SESSION). + withParameters({'sessionId': SESSION_ID}). + andReturnSuccess({}). + end(); + + var otherFlow = new promise.ControlFlow(); + var driver = WebDriver.attachToSession(executor, SESSION_ID, otherFlow); + assert.equal(otherFlow, driver.controlFlow()); + assert.notEqual(otherFlow, promise.controlFlow()); + + return waitForIdle(otherFlow); + }); + }); + + describe('testCreateSession', function() { + it('happyPathWithCapabilitiesHashObject', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({ + 'desiredCapabilities': {'browserName': 'firefox'} + }). + andReturnSuccess({'browserName': 'firefox'}). + end(); + + var driver = WebDriver.createSession(executor, { + 'browserName': 'firefox' + }); + return driver.getSession().then(function(session) { + assert.deepEqual({ + 'value':'test_session_id' + }, session.getId()); + assert.equal('firefox', session.getCapability('browserName')); + }); + }); + + it('happyPathWithCapabilitiesInstance', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': {'browserName': 'firefox'}}). + andReturnSuccess({'browserName': 'firefox'}). + end(); + + var driver = WebDriver.createSession(executor, Capabilities.firefox()); + return driver.getSession().then(function(session) { + assert.deepEqual({'value':'test_session_id' }, session.getId()); + assert.equal('firefox', session.getCapability('browserName')); + }); + }); + + it('failsToCreateSession', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': {'browserName': 'firefox'}}). + andReturnError(ECode.UNKNOWN_ERROR, {'message': 'boom'}). + end(); + + var driver = + WebDriver.createSession(executor, {'browserName': 'firefox'}); + return driver.getSession().then(fail, function(e) { + assertIsInstance(error.WebDriverError, e); + assert.equal('boom', e.message); + }); + }); + + it('usesActiveFlowByDefault', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': {}}). + andReturnSuccess({}). + end(); + + var driver = WebDriver.createSession(executor, {}); + assert.equal(promise.controlFlow(), driver.controlFlow()); + + return waitForIdle(driver.controlFlow()); + }); + + it('canCreateInCustomFlow', function() { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': {}}). + andReturnSuccess({}). + end(); + + var otherFlow = new promise.ControlFlow(); + var driver = WebDriver.createSession(executor, {}, otherFlow); + assert.equal(otherFlow, driver.controlFlow()); + assert.notEqual(otherFlow, promise.controlFlow()); + + return waitForIdle(otherFlow); + }); + }); + + it('testDoesNotExecuteCommandIfSessionDoesNotResolve', function() { + var session = Promise.reject(new StubError); + new FakeExecutor().createDriver(session).getTitle(); + return waitForAbort().then(assertIsStubError); + }); + + it('testCommandReturnValuesArePassedToFirstCallback', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE).andReturnSuccess('Google Search'). + end(); + + var driver = executor.createDriver(); + return driver.getTitle().then(function(title) { + assert.equal('Google Search', title); + }); + }); + + it('testStopsCommandExecutionWhenAnErrorOccurs', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW). + withParameters({'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message': 'window not found'}). + end(); + + var driver = executor.createDriver(); + driver.switchTo().window('foo'); + driver.getTitle(); // mock should blow if this gets executed + + return waitForAbort(). + then(expectedError(error.NoSuchWindowError, 'window not found')); + }); + + it('testCanSuppressCommandFailures', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW). + withParameters({'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message': 'window not found'}). + expect(CName.GET_TITLE). + andReturnSuccess('Google Search'). + end(); + + var driver = executor.createDriver(); + driver.switchTo().window('foo') + .thenCatch(expectedError(error.NoSuchWindowError, 'window not found')); + driver.getTitle(); + return waitForIdle(); + }); + + it('testErrorsPropagateUpToTheRunningApplication', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW). + withParameters({'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message': 'window not found'}). + end(); + + executor.createDriver().switchTo().window('foo'); + return waitForAbort(). + then(expectedError(error.NoSuchWindowError, 'window not found')); + }); + + it('testErrbacksThatReturnErrorsStillSwitchToCallbackChain', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW). + withParameters({'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + return driver.switchTo().window('foo'). + thenCatch(function() { return new StubError; }); + then(assertIsStubError); + }); + + it('testErrbacksThrownCanOverrideOriginalError', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW, {'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + driver.switchTo().window('foo').thenCatch(throwStubError); + + return waitForAbort().then(assertIsStubError); + }); + + it('testCannotScheduleCommandsIfTheSessionIdHasBeenDeleted', function() { + var driver = new FakeExecutor().createDriver(); + delete driver.session_; + assert.throws(() => driver.get('http://www.google.com')); + }); + + it('testDeletesSessionIdAfterQuitting', function() { + var driver; + let executor = new FakeExecutor(). + expect(CName.QUIT). + end(); + + driver = executor.createDriver(); + return driver.quit().then(function() { + assert.equal(void 0, driver.session_); + }); + }); + + it('testReportsErrorWhenExecutingCommandsAfterExecutingAQuit', function() { + let executor = new FakeExecutor(). + expect(CName.QUIT). + end(); + + var driver = executor.createDriver(); + driver.quit(); + driver.get('http://www.google.com'); + return waitForAbort(). + then(expectedError( + error.UnsupportedOperationError, + 'This driver instance does not have a valid session ID ' + + '(did you call WebDriver.quit()?) and may no longer be used.')); + }); + + it('testCallbackCommandsExecuteBeforeNextCommand', function() { + let executor = new FakeExecutor(). + expect(CName.GET_CURRENT_URL). + expect(CName.GET, {'url': 'http://www.google.com'}). + expect(CName.CLOSE). + expect(CName.GET_TITLE). + end(); + + var driver = executor.createDriver(); + driver.getCurrentUrl().then(function() { + driver.get('http://www.google.com').then(function() { + driver.close(); + }); + }); + driver.getTitle(); + + return waitForIdle(); + }); + + it('testEachCallbackFrameRunsToCompletionBeforeTheNext', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.GET_CURRENT_URL). + expect(CName.GET_CURRENT_WINDOW_HANDLE). + expect(CName.CLOSE). + expect(CName.QUIT). + end(); + + var driver = executor.createDriver(); + driver.getTitle(). + // Everything in this callback... + then(function() { + driver.getCurrentUrl(); + driver.getWindowHandle(); + }). + // ...should execute before everything in this callback. + then(function() { + driver.close(); + }); + // This should execute after everything above + driver.quit(); + + return waitForIdle(); + }); + + describe('nestedCommandFailures', function() { + it('bubbleUpToGlobalHandlerIfUnsuppressed', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.SWITCH_TO_WINDOW, {'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + driver.getTitle().then(function() { + driver.switchTo().window('foo'); + }); + + return waitForAbort(). + then(expectedError(error.NoSuchWindowError, 'window not found')); + }); + + it('canBeSuppressWhenTheyOccur', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.SWITCH_TO_WINDOW, {'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + expect(CName.CLOSE). + end(); + + var driver = executor.createDriver(); + driver.getTitle().then(function() { + driver.switchTo().window('foo').thenCatch(function() {}); + }); + driver.close(); + + return waitForIdle(); + }); + + it('bubbleUpThroughTheFrameStack', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.SWITCH_TO_WINDOW, {'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + driver.getTitle(). + then(function() { + return driver.switchTo().window('foo'); + }). + thenCatch(function(e) { + assertIsInstance(error.NoSuchWindowError, e); + assert.equal('window not found', e.message); + }); + + return waitForIdle(); + }); + + it('canBeCaughtAndSuppressed', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.GET_CURRENT_URL). + expect(CName.SWITCH_TO_WINDOW, {'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + expect(CName.CLOSE). + end(); + + var driver = executor.createDriver(); + driver.getTitle().then(function() { + driver.getCurrentUrl(). + then(function() { + return driver.switchTo().window('foo'); + }). + thenCatch(function() {}); + driver.close(); + }); + + return waitForIdle(); + }); + }); + + describe('returningAPromise', function() { + it('fromACallback', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.GET_CURRENT_URL). + andReturnSuccess('http://www.google.com'). + end(); + + var driver = executor.createDriver(); + driver.getTitle(). + then(function() { + return driver.getCurrentUrl(); + }). + then(function(value) { + assert.equal('http://www.google.com', value); + }); + return waitForIdle(); + }); + + it('fromAnErrbackSuppressesTheError', function() { + var count = 0; + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW, {'name':'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + expect(CName.GET_CURRENT_URL). + andReturnSuccess('http://www.google.com'). + end(); + + var driver = executor.createDriver(); + driver.switchTo().window('foo'). + thenCatch(function(e) { + assertIsInstance(error.NoSuchWindowError, e); + assert.equal('window not found', e.message); + count += 1; + return driver.getCurrentUrl(); + }). + then(function(url) { + count += 1; + assert.equal('http://www.google.com', url); + }); + return waitForIdle().then(function() { + assert.equal(2, count); + }); + }); + }); + + describe('customFunctions', function() { + it('returnsANonPromiseValue', function() { + var driver = new FakeExecutor().createDriver(); + return driver.call(() => 'abc123').then(function(value) { + assert.equal('abc123', value); + }); + }); + + it('executionOrderWithCustomFunctions', function() { + var msg = []; + let executor = new FakeExecutor(). + expect(CName.GET_TITLE).andReturnSuccess('cheese '). + expect(CName.GET_CURRENT_URL).andReturnSuccess('tasty'). + end(); + + var driver = executor.createDriver(); + + var pushMsg = msg.push.bind(msg); + driver.getTitle().then(pushMsg); + driver.call(() => 'is ').then(pushMsg); + driver.getCurrentUrl().then(pushMsg); + driver.call(() => '!').then(pushMsg); + + return waitForIdle().then(function() { + assert.equal('cheese is tasty!', msg.join('')); + }); + }); + + it('passingArgumentsToACustomFunction', function() { + var add = function(a, b) { + return a + b; + }; + var driver = new FakeExecutor().createDriver(); + return driver.call(add, null, 1, 2).then(function(value) { + assert.equal(3, value); + }); + }); + + it('passingPromisedArgumentsToACustomFunction', function() { + var promisedArg = promise.fulfilled(2); + var add = function(a, b) { + return a + b; + }; + var driver = new FakeExecutor().createDriver(); + return driver.call(add, null, 1, promisedArg).then(function(value) { + assert.equal(3, value); + }); + }); + + it('passingArgumentsAndScopeToACustomFunction', function() { + function Foo(name) { + this.name = name; + } + Foo.prototype.getName = function() { + return this.name; + }; + var foo = new Foo('foo'); + + var driver = new FakeExecutor().createDriver(); + return driver.call(foo.getName, foo).then(function(value) { + assert.equal('foo', value); + }); + }); + + it('customFunctionThrowsAnError', function() { + var driver = new FakeExecutor().createDriver(); + return driver.call(throwStubError).then(fail, assertIsStubError); + }); + + it('customFunctionSchedulesCommands', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.CLOSE). + expect(CName.QUIT). + end(); + + var driver = executor.createDriver(); + driver.call(function() { + driver.getTitle(); + driver.close(); + }); + driver.quit(); + return waitForIdle(); + }); + + it('returnsATaskResultAfterSchedulingAnother', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + andReturnSuccess('Google Search'). + expect(CName.CLOSE). + end(); + + var driver = executor.createDriver(); + return driver.call(function() { + var title = driver.getTitle(); + driver.close(); + return title; + }).then(function(title) { + assert.equal('Google Search', title); + }); + }); + + it('hasANestedCommandThatFails', function() { + let executor = new FakeExecutor(). + expect(CName.SWITCH_TO_WINDOW, {'name': 'foo'}). + andReturnError(ECode.NO_SUCH_WINDOW, {'message':'window not found'}). + end(); + + var driver = executor.createDriver(); + return driver.call(function() { + return driver.switchTo().window('foo'); + }).then(fail, function(e) { + assertIsInstance(error.NoSuchWindowError, e); + assert.equal('window not found', e.message); + }); + }); + + it('doesNotCompleteUntilReturnedPromiseIsResolved', function() { + var order = []; + var driver = new FakeExecutor().createDriver(); + + var d = promise.defer(); + d.promise.then(function() { + order.push('b'); + }); + + driver.call(function() { + order.push('a'); + return d.promise; + }); + driver.call(function() { + order.push('c'); + }); + + // timeout to ensure the first function starts its execution before we + // trigger d's callbacks. + return new Promise(f => setTimeout(f, 0)).then(function() { + assert.deepEqual(['a'], order); + d.fulfill(); + return waitForIdle().then(function() { + assert.deepEqual(['a', 'b', 'c'], order); + }); + }); + }); + + it('returnsADeferredAction', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE).andReturnSuccess('Google'). + end(); + + var driver = executor.createDriver(); + driver.call(function() { + return driver.getTitle(); + }).then(function(title) { + assert.equal('Google', title); + }); + return waitForIdle(); + }); + }); + + describe('nestedCommands', function() { + it('commandExecutionOrder', function() { + var msg = []; + var driver = new FakeExecutor().createDriver(); + driver.call(msg.push, msg, 'a'); + driver.call(function() { + driver.call(msg.push, msg, 'c'); + driver.call(function() { + driver.call(msg.push, msg, 'e'); + driver.call(msg.push, msg, 'f'); + }); + driver.call(msg.push, msg, 'd'); + }); + driver.call(msg.push, msg, 'b'); + return waitForIdle().then(function() { + assert.equal('acefdb', msg.join('')); + }); + }); + + it('basicUsage', function() { + var msg = []; + var driver = new FakeExecutor().createDriver(); + var pushMsg = msg.push.bind(msg); + driver.call(() => 'cheese ').then(pushMsg); + driver.call(function() { + driver.call(() => 'is ').then(pushMsg); + driver.call(() => 'tasty').then(pushMsg); + }); + driver.call(() => '!').then(pushMsg); + return waitForIdle().then(function() { + assert.equal('cheese is tasty!', msg.join('')); + }); + }); + + it('canReturnValueFromNestedFunction', function() { + var driver = new FakeExecutor().createDriver(); + return driver.call(function() { + return driver.call(function() { + return driver.call(() => 'foobar'); + }); + }).then(function(value) { + assert.equal('foobar', value); + }); + }); + + it('normalCommandAfterNestedCommandThatReturnsAnAction', function() { + var msg = []; + let executor = new FakeExecutor(). + expect(CName.CLOSE). + end(); + var driver = executor.createDriver(); + driver.call(function() { + return driver.call(function() { + msg.push('a'); + return driver.call(() => 'foobar'); + }); + }); + driver.close().then(function() { + msg.push('b'); + }); + return waitForIdle().then(function() { + assert.equal('ab', msg.join('')); + }); + }); + + it('errorsBubbleUp_caught', function() { + var driver = new FakeExecutor().createDriver(); + var result = driver.call(function() { + return driver.call(function() { + return driver.call(throwStubError); + }); + }).then(fail, assertIsStubError); + return Promise.all([waitForIdle(), result]); + }); + + it('errorsBubbleUp_uncaught', function() { + var driver = new FakeExecutor().createDriver(); + driver.call(function() { + return driver.call(function() { + return driver.call(throwStubError); + }); + }); + return waitForAbort().then(assertIsStubError); + }); + + it('canScheduleCommands', function() { + let executor = new FakeExecutor(). + expect(CName.GET_TITLE). + expect(CName.CLOSE). + end(); + + var driver = executor.createDriver(); + driver.call(function() { + driver.call(function() { + driver.getTitle(); + }); + driver.close(); + }); + return waitForIdle(); + }); + }); + + describe('WebElementPromise', function() { + it('resolvesWhenUnderlyingElementDoes', function() { + var el = new WebElement({}, {'ELEMENT': 'foo'}); + return new WebElementPromise({}, promise.fulfilled(el)).then(function(e) { + assert.strictEqual(e, el); + }); + }); + + it('resolvesBeforeCallbacksOnWireValueTrigger', function() { + var el = new promise.Deferred(); + + var element = new WebElementPromise({}, el.promise); + var messages = []; + + element.then(function() { + messages.push('element resolved'); + }); + element.getId().then(function() { + messages.push('wire value resolved'); + }); + + assert.deepEqual([], messages); + el.fulfill(new WebElement({}, {'ELEMENT': 'foo'})); + return waitForIdle().then(function() { + assert.deepEqual([ + 'element resolved', + 'wire value resolved' + ], messages); + }); + }); + + it('isRejectedIfUnderlyingIdIsRejected', function() { + var element = new WebElementPromise({}, promise.rejected(new StubError)); + return element.then(fail, assertIsStubError); + }); + }); + + describe('executeScript', function() { + it('nullReturnValue', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return document.body;') + .then((result) => assert.equal(null, result)); + }); + + it('primitiveReturnValue', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(123). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return document.body;') + .then((result) => assert.equal(123, result)); + }); + + it('webElementReturnValue', function() { + var json = WebElement.buildId('foo'); + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(json). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return document.body;') + .then((element) => element.getId()) + .then((id) => assert.equal(id, 'foo')); + }); + + it('arrayReturnValue', function() { + var json = [WebElement.buildId('foo')]; + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(json). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return document.body;') + .then(function(array) { + assert.equal(1, array.length); + return array[0].getId(); + }) + .then((id) => assert.equal('foo', id)); + }); + + it('objectReturnValue', function() { + var json = {'foo': WebElement.buildId('foo')}; + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return document.body;', + 'args': [] + }). + andReturnSuccess(json). + end(); + + var driver = executor.createDriver(); + var callback; + return driver.executeScript('return document.body;') + .then((obj) => obj['foo'].getId()) + .then((id) => assert.equal(id, 'foo')); + }); + + it('scriptAsFunction', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return (' + function() {} + + ').apply(null, arguments);', + 'args': [] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + return driver.executeScript(function() {}); + }); + + it('simpleArgumentConversion', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return 1;', + 'args': ['abc', 123, true, [123, {'foo': 'bar'}]] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + return driver.executeScript( + 'return 1;', 'abc', 123, true, [123, {'foo': 'bar'}]); + }); + + it('webElementArgumentConversion', function() { + var elementJson = WebElement.buildId('fefifofum'); + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return 1;', + 'args': [elementJson] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + return driver.executeScript('return 1;', + new WebElement(driver, 'fefifofum')); + }); + + it('webElementPromiseArgumentConversion', function() { + var elementJson = WebElement.buildId('bar'); + + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {'using': 'css selector', 'value': '*[id="foo"]'}). + andReturnSuccess(elementJson). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return 1;', + 'args': [elementJson] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + return driver.executeScript('return 1;', element); + }); + + it('argumentConversion', function() { + var elementJson = WebElement.buildId('fefifofum'); + + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'return 1;', + 'args': ['abc', 123, true, elementJson, [123, {'foo': 'bar'}]] + }). + andReturnSuccess(null). + end(); + + var driver = executor.createDriver(); + var element = new WebElement(driver, 'fefifofum'); + return driver.executeScript('return 1;', + 'abc', 123, true, element, [123, {'foo': 'bar'}]); + }); + + it('scriptReturnsAnError', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT). + withParameters({ + 'script': 'throw Error(arguments[0]);', + 'args': ['bam'] + }). + andReturnError(ECode.UNKNOWN_ERROR, {'message':'bam'}). + end(); + var driver = executor.createDriver(); + return driver.executeScript('throw Error(arguments[0]);', 'bam'). + then(fail, function(e) { + assertIsInstance(error.WebDriverError, e); + assert.equal('bam', e.message); + }); + }); + + it('failsIfArgumentIsARejectedPromise', function() { + let executor = new FakeExecutor(); + + var arg = promise.rejected(new StubError); + arg.thenCatch(function() {}); // Suppress default handler. + + var driver = executor.createDriver(); + return driver.executeScript(function() {}, arg). + then(fail, assertIsStubError); + }); + }); + + describe('executeAsyncScript', function() { + it('failsIfArgumentIsARejectedPromise', function() { + var arg = promise.rejected(new StubError); + arg.thenCatch(function() {}); // Suppress default handler. + + var driver = new FakeExecutor().createDriver(); + return driver.executeAsyncScript(function() {}, arg). + then(fail, assertIsStubError); + }); + }); + + describe('findElement', function() { + it('elementNotFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.NO_SUCH_ELEMENT, { + 'message':'Unable to find element' + }). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + element.click(); // This should never execute. + return waitForAbort().then(function(e) { + assertIsInstance(error.NoSuchElementError, e); + assert.equal('Unable to find element', e.message); + }); + }); + + it('elementNotFoundInACallback', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError( + ECode.NO_SUCH_ELEMENT, {'message':'Unable to find element'}). + end(); + + var driver = executor.createDriver(); + promise.fulfilled().then(function() { + var element = driver.findElement(By.id('foo')); + return element.click(); // Should not execute. + }); + return waitForAbort().then(function(e) { + assertIsInstance(error.NoSuchElementError, e); + assert.equal('Unable to find element', e.message); + }); + }); + + it('elementFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess(WebElement.buildId('bar')). + expect(CName.CLICK_ELEMENT, {'id': 'bar'}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + element.click(); + return waitForIdle(); + }); + + it('canUseElementInCallback', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess(WebElement.buildId('bar')). + expect(CName.CLICK_ELEMENT, {'id': 'bar'}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + driver.findElement(By.id('foo')).then(function(element) { + element.click(); + }); + return waitForIdle(); + }); + + it('byJs', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': 'return document.body', + 'args': [] + }). + andReturnSuccess(WebElement.buildId('bar')). + expect(CName.CLICK_ELEMENT, {'id': 'bar'}). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.js('return document.body')); + element.click(); // just to make sure + return waitForIdle(); + }); + + it('byJs_returnsNonWebElementValue', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, {'script': 'return 123', 'args': []}). + andReturnSuccess(123). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.js('return 123')); + element.click(); // Should not execute. + return waitForAbort().then(function(e) { + assertIsInstance(TypeError, e); + assert.equal('Custom locator did not return a WebElement', e.message); + }); + }); + + it('byJs_canPassArguments', function() { + var script = 'return document.getElementsByTagName(arguments[0]);'; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': script, + 'args': ['div'] + }). + andReturnSuccess({'ELEMENT':'one'}). + end(); + var driver = executor.createDriver(); + driver.findElement(By.js(script, 'div')); + return waitForIdle(); + }); + + it('customLocator', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, {'using': 'css selector', 'value': 'a'}). + andReturnSuccess([ + WebElement.buildId('foo'), + WebElement.buildId('bar')]). + expect(CName.CLICK_ELEMENT, {'id': 'foo'}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(function(d) { + assert.equal(driver, d); + return d.findElements(By.tagName('a')); + }); + element.click(); + return waitForIdle(); + }); + + it('customLocatorThrowsIfresultIsNotAWebElement', function() { + var driver = new FakeExecutor().createDriver(); + driver.findElement(function() { + return 1; + }); + return waitForAbort().then(function(e) { + assertIsInstance(TypeError, e); + assert.equal('Custom locator did not return a WebElement', e.message); + }); + }); + }); + + describe('isElementPresent', function() { + it('elementNotFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([]). + end(); + + var driver = executor.createDriver(); + return driver.isElementPresent(By.id('foo')) + .then((found) => assert.ok(!found)); + }); + + it('elementFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([WebElement.buildId('bar')]). + end(); + + var driver = executor.createDriver(); + return driver.isElementPresent(By.id('foo')).then(assert.ok); + }); + + it('letsErrorsPropagate', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.UNKNOWN_ERROR, {'message':'There is no spoon'}). + end(); + + var driver = executor.createDriver(); + driver.isElementPresent(By.id('foo')); + return waitForAbort().then(function(e) { + assertIsInstance(error.WebDriverError, e); + assert.equal(e.message, 'There is no spoon'); + }); + }); + + it('byJs', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, {'script': 'return 123', 'args': []}). + andReturnSuccess([WebElement.buildId('bar')]). + end(); + + var driver = executor.createDriver(); + return driver.isElementPresent(By.js('return 123')).then(assert.ok); + }); + + it('byJs_canPassScriptArguments', function() { + var script = 'return document.getElementsByTagName(arguments[0]);'; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': script, + 'args': ['div'] + }). + andReturnSuccess([WebElement.buildId('one')]). + end(); + + var driver = executor.createDriver(); + driver.isElementPresent(By.js(script, 'div')).then(assert.ok); + return waitForIdle(); + }); + }); + + describe('findElements', function() { + it('returnsMultipleElements', function() { + var ids = ['foo', 'bar', 'baz']; + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, {'using':'css selector', 'value':'a'}). + andReturnSuccess(ids.map(WebElement.buildId)). + end(); + + var driver = executor.createDriver(); + return driver.findElements(By.tagName('a')) + .then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }) + .then((actual) => assert.deepEqual(ids, actual)); + }); + + it('byJs', function() { + var ids = ['foo', 'bar', 'baz']; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': 'return document.getElementsByTagName("div");', + 'args': [] + }). + andReturnSuccess(ids.map(WebElement.buildId)). + end(); + + var driver = executor.createDriver(); + + return driver. + findElements(By.js('return document.getElementsByTagName("div");')). + then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }). + then((actual) => assert.deepEqual(ids, actual)); + }); + + it('byJs_filtersOutNonWebElementResponses', function() { + var ids = ['foo', 'bar', 'baz']; + var json = [ + WebElement.buildId(ids[0]), + 123, + 'a', + false, + WebElement.buildId(ids[1]), + {'not a web element': 1}, + WebElement.buildId(ids[2]) + ]; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': 'return document.getElementsByTagName("div");', + 'args': [] + }). + andReturnSuccess(json). + end(); + + var driver = executor.createDriver(); + driver.findElements(By.js('return document.getElementsByTagName("div");')). + then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }). + then((actual) => assert.deepEqual(ids, actual)); + return waitForIdle(); + }); + + it('byJs_convertsSingleWebElementResponseToArray', function() { + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': 'return document.getElementsByTagName("div");', + 'args': [] + }). + andReturnSuccess(WebElement.buildId('foo')). + end(); + + var driver = executor.createDriver(); + return driver. + findElements(By.js('return document.getElementsByTagName("div");')). + then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }). + then((actual) => assert.deepEqual(['foo'], actual)); + }); + + it('byJs_canPassScriptArguments', function() { + var script = 'return document.getElementsByTagName(arguments[0]);'; + let executor = new FakeExecutor(). + expect(CName.EXECUTE_SCRIPT, { + 'script': script, + 'args': ['div'] + }). + andReturnSuccess([ + WebElement.buildId('one'), + WebElement.buildId('two') + ]). + end(); + + var driver = executor.createDriver(); + return driver.findElements(By.js(script, 'div')) + then(function(elements) { + return promise.all(elements.map(function(e) { + assert.ok(e instanceof WebElement); + return e.getId(); + })); + }). + then((actual) => assert.deepEqual(['one', 'two'], actual)); + }); + }); + + describe('sendKeys', function() { + it('convertsVarArgsIntoStrings_simpleArgs', function() { + let executor = new FakeExecutor(). + expect(CName.SEND_KEYS_TO_ELEMENT, {'id': 'one', + 'value':['1','2','abc','3']}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + var element = new WebElement(driver, 'one'); + element.sendKeys(1, 2, 'abc', 3); + return waitForIdle(); + }); + + it('convertsVarArgsIntoStrings_promisedArgs', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {'using':'css selector', 'value':'*[id="foo"]'}). + andReturnSuccess(WebElement.buildId('one')). + expect(CName.SEND_KEYS_TO_ELEMENT, {'id':'one', + 'value':['abc', '123', 'def']}). + andReturnSuccess(). + end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + element.sendKeys( + promise.fulfilled('abc'), 123, + promise.fulfilled('def')); + return waitForIdle(); + }); + + it('sendKeysWithAFileDetector', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {'using':'css selector', 'value':'*[id="foo"]'}). + andReturnSuccess(WebElement.buildId('one')). + expect(CName.SEND_KEYS_TO_ELEMENT, {'id': 'one', + 'value':['modified/path']}). + andReturnSuccess(). + end(); + + let driver = executor.createDriver(); + let handleFile = function(d, path) { + assert.strictEqual(driver, d); + assert.equal(path, 'original/path'); + return promise.fulfilled('modified/path'); + }; + driver.setFileDetector({handleFile}); + + var element = driver.findElement(By.id('foo')); + element.sendKeys('original/', 'path'); + return waitForIdle(); + }); + }); + + describe('elementEquality', function() { + it('isReflexive', function() { + var a = new WebElement({}, 'foo'); + return WebElement.equals(a, a).then(assert.ok); + }); + + it('failsIfAnInputElementCouldNotBeFound', function() { + var id = promise.rejected(new StubError); + id.thenCatch(function() {}); // Suppress default handler. + + var driver = new FakeExecutor().createDriver(); + var a = new WebElement(driver, 'foo'); + var b = new WebElementPromise(driver, id); + + return WebElement.equals(a, b).then(fail, assertIsStubError); + }); + }); + + describe('waiting', function() { + it('waitSucceeds', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([]). + times(2). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([WebElement.buildId('bar')]). + end(); + + var driver = executor.createDriver(); + driver.wait(function() { + return driver.isElementPresent(By.id('foo')); + }, 200); + return waitForIdle(); + }); + + it('waitTimesout_timeoutCaught', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([]). + anyTimes(). + end(); + + var driver = executor.createDriver(); + return driver.wait(function() { + return driver.isElementPresent(By.id('foo')); + }, 25).then(fail, function(e) { + assert.equal('Wait timed out after ', + e.message.substring(0, 'Wait timed out after '.length)); + }); + }); + + it('waitTimesout_timeoutNotCaught', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENTS, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnSuccess([]). + anyTimes(). + end(); + + var driver = executor.createDriver(); + driver.wait(function() { + return driver.isElementPresent(By.id('foo')); + }, 25); + return waitForAbort().then(function(e) { + assert.equal('Wait timed out after ', + e.message.substring(0, 'Wait timed out after '.length)); + }); + }); + }); + + describe('alert handling', function() { + it('interceptsAndTransformsUnhandledAlertErrors', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.UNEXPECTED_ALERT_OPEN, { + 'message': 'boom', + 'alert': {'text': 'hello'} + }). + end(); + + var driver = executor.createDriver(); + return driver.findElement(By.id('foo')).then(fail, function(e) { + assertIsInstance(UnhandledAlertError, e); + assert.equal('hello', e.getAlertText()); + }); + }); + + it('usesEmptyStringIfAlertTextOmittedFromResponse', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.UNEXPECTED_ALERT_OPEN, {'message': 'boom'}). + end(); + + var driver = executor.createDriver(); + return driver.findElement(By.id('foo')).then(fail, function(e) { + assertIsInstance(UnhandledAlertError, e); + assert.equal('', e.getAlertText()); + }); + }); + + it('alertResolvesWhenPromisedTextResolves', function() { + var textPromise = new promise.Deferred(); + + var alert = new AlertPromise({}, textPromise); + assert.ok(alert.isPending()); + + textPromise.fulfill(new Alert({}, 'foo')); + return alert.getText().then(function(text) { + assert.equal('foo', text); + }); + }); + + it('cannotSwitchToAlertThatIsNotPresent', function() { + let executor = new FakeExecutor() + .expect(CName.GET_ALERT_TEXT) + .andReturnError(ECode.NO_SUCH_ALERT, {'message': 'no alert'}) + .end(); + + var driver = executor.createDriver(); + var alert = driver.switchTo().alert(); + alert.dismiss(); // Should never execute. + return waitForAbort().then(function(e) { + assertIsInstance(error.NoSuchAlertError, e); + assert.equal('no alert', e.message); + }); + }); + + it('alertsBelongToSameFlowAsParentDriver', function() { + let executor = new FakeExecutor() + .expect(CName.GET_ALERT_TEXT).andReturnSuccess('hello') + .end(); + + var driver = executor.createDriver(); + var otherFlow = new promise.ControlFlow(); + otherFlow.execute(function() { + driver.switchTo().alert().then(function() { + assert.strictEqual( + driver.controlFlow(), promise.controlFlow(), + 'Alert should belong to the same flow as its parent driver'); + }); + }); + + assert.notEqual(otherFlow, driver.controlFlow); + return Promise.all([ + waitForIdle(otherFlow), + waitForIdle(driver.controlFlow()) + ]); + }); + + it('commandsFailIfAlertNotPresent', function() { + let executor = new FakeExecutor() + .expect(CName.GET_ALERT_TEXT) + .andReturnError(ECode.NO_SUCH_ALERT, {'message': 'no alert'}) + .end(); + + var driver = executor.createDriver(); + var alert = driver.switchTo().alert(); + + var expectError = expectedError(error.NoSuchAlertError, 'no alert'); + + return alert.getText() + .then(fail, expectedError) + .then(() => alert.accept()) + .then(fail, expectedError) + .then(() => alert.dismiss()) + .then(fail, expectError) + .then(() => alert.sendKeys('hi')) + .then(fail, expectError); + }); + }); + + it('testWebElementsBelongToSameFlowAsParentDriver', function() { + let executor = new FakeExecutor() + .expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}) + .andReturnSuccess(WebElement.buildId('abc123')) + .end(); + + var driver = executor.createDriver(); + var otherFlow = new promise.ControlFlow(); + otherFlow.execute(function() { + driver.findElement({id: 'foo'}).then(function() { + assert.equal(driver.controlFlow(), promise.controlFlow()); + }); + }); + + assert.notEqual(otherFlow, driver.controlFlow); + return Promise.all([ + waitForIdle(otherFlow), + waitForIdle(driver.controlFlow()) + ]); + }); + + it('testFetchingLogs', function() { + let executor = new FakeExecutor(). + expect(CName.GET_LOG, {'type': 'browser'}). + andReturnSuccess([ + {'level': 'INFO', 'message': 'hello', 'timestamp': 1234}, + {'level': 'DEBUG', 'message': 'abc123', 'timestamp': 5678} + ]). + end(); + + var driver = executor.createDriver(); + return driver.manage().logs().get('browser').then(function(entries) { + assert.equal(2, entries.length); + + assert.ok(entries[0] instanceof logging.Entry); + assert.equal(logging.Level.INFO.value, entries[0].level.value); + assert.equal('hello', entries[0].message); + assert.equal(1234, entries[0].timestamp); + + assert.ok(entries[1] instanceof logging.Entry); + assert.equal(logging.Level.DEBUG.value, entries[1].level.value); + assert.equal('abc123', entries[1].message); + assert.equal(5678, entries[1].timestamp); + }); + }); + + it('testCommandsFailIfInitialSessionCreationFailed', function() { + var session = promise.rejected(new StubError); + + var driver = new FakeExecutor().createDriver(session); + var navigateResult = driver.get('some-url').then(fail, assertIsStubError); + var quitResult = driver.quit().then(fail, assertIsStubError); + + return waitForIdle().then(function() { + return promise.all(navigateResult, quitResult); + }); + }); + + it('testWebElementCommandsFailIfInitialDriverCreationFailed', function() { + var session = Promise.reject(new StubError); + var driver = new FakeExecutor().createDriver(session); + return driver.findElement(By.id('foo')).click(). + then(fail, assertIsStubError); + }); + + it('testWebElementCommansFailIfElementCouldNotBeFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.NO_SUCH_ELEMENT, + {'message':'Unable to find element'}). + end(); + + var driver = executor.createDriver(); + return driver.findElement(By.id('foo')).click() + .then(fail, function(e) { + assertIsInstance(error.NoSuchElementError, e); + assert.equal('Unable to find element', e.message); + }); + }); + + it('testCannotFindChildElementsIfParentCouldNotBeFound', function() { + let executor = new FakeExecutor(). + expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}). + andReturnError(ECode.NO_SUCH_ELEMENT, + {'message':'Unable to find element'}). + end(); + + var driver = executor.createDriver(); + return driver.findElement(By.id('foo')) + .findElement(By.id('bar')) + .findElement(By.id('baz')) + .then(fail, function(e) { + assertIsInstance(error.NoSuchElementError, e); + assert.equal('Unable to find element', e.message); + }); + }); + + describe('actions()', function() { + it('failsIfInitialDriverCreationFailed', function() { + let session = promise.rejected(new StubError); + session.catch(function() {}); + return new FakeExecutor(). + createDriver(session). + actions(). + mouseDown(). + mouseUp(). + perform(). + thenCatch(assertIsStubError); + }); + + describe('mouseMove', function() { + it('noElement', function() { + let executor = new FakeExecutor() + .expect(CName.MOVE_TO, {'xoffset': 0, 'yoffset': 125}) + .andReturnSuccess() + .end(); + + return executor.createDriver(). + actions(). + mouseMove({x: 0, y: 125}). + perform(); + }); + + it('element', function() { + let executor = new FakeExecutor() + .expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="foo"]'}) + .andReturnSuccess(WebElement.buildId('abc123')) + .expect(CName.MOVE_TO, + {'element': 'abc123', 'xoffset': 0, 'yoffset': 125}) + .andReturnSuccess() + .end(); + + var driver = executor.createDriver(); + var element = driver.findElement(By.id('foo')); + return driver.actions() + .mouseMove(element, {x: 0, y: 125}) + .perform(); + }); + }); + + it('supportsMouseDown', function() { + let executor = new FakeExecutor() + .expect(CName.MOUSE_DOWN, {'button': Button.LEFT}) + .andReturnSuccess() + .end(); + + return executor.createDriver(). + actions(). + mouseDown(). + perform(); + }); + + it('testActionSequence', function() { + let executor = new FakeExecutor() + .expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="a"]'}) + .andReturnSuccess(WebElement.buildId('id1')) + .expect(CName.FIND_ELEMENT, + {using: 'css selector', value: '*[id="b"]'}) + .andReturnSuccess(WebElement.buildId('id2')) + .expect(CName.SEND_KEYS_TO_ACTIVE_ELEMENT, + {'value': [Key.SHIFT]}) + .andReturnSuccess() + .expect(CName.MOVE_TO, {'element': 'id1'}) + .andReturnSuccess() + .expect(CName.CLICK, {'button': Button.LEFT}) + .andReturnSuccess() + .expect(CName.MOVE_TO, {'element': 'id2'}) + .andReturnSuccess() + .expect(CName.CLICK, {'button': Button.LEFT}) + .andReturnSuccess() + .end(); + + var driver = executor.createDriver(); + var element1 = driver.findElement(By.id('a')); + var element2 = driver.findElement(By.id('b')); + + return driver.actions() + .keyDown(Key.SHIFT) + .click(element1) + .click(element2) + .perform(); + }); + }); + + describe('touchActions()', function() { + it('failsIfInitialDriverCreationFailed', function() { + let session = promise.rejected(new StubError); + session.catch(function() {}); + return new FakeExecutor(). + createDriver(session). + touchActions(). + scroll({x: 3, y: 4}). + perform(). + thenCatch(assertIsStubError); + }); + + it('testTouchActionSequence', function() { + let executor = new FakeExecutor() + .expect(CName.TOUCH_DOWN, {x: 1, y: 2}).andReturnSuccess() + .expect(CName.TOUCH_MOVE, {x: 3, y: 4}).andReturnSuccess() + .expect(CName.TOUCH_UP, {x: 5, y: 6}).andReturnSuccess() + .end(); + + var driver = executor.createDriver(); + return driver.touchActions() + .tapAndHold({x: 1, y: 2}) + .move({x: 3, y: 4}) + .release({x: 5, y: 6}) + .perform(); + }); + }); + + describe('generator support', function() { + var driver; + + beforeEach(function() { + driver = new WebDriver( + new Session('test-session', {}), + new ExplodingExecutor()); + }); + + it('canUseGeneratorsWithWebDriverCall', function() { + return driver.call(function* () { + var x = yield promise.fulfilled(1); + var y = yield promise.fulfilled(2); + return x + y; + }).then(function(value) { + assert.deepEqual(3, value); + }); + }); + + it('canDefineScopeOnGeneratorCall', function() { + return driver.call(function* () { + var x = yield promise.fulfilled(1); + return this.name + x; + }, {name: 'Bob'}).then(function(value) { + assert.deepEqual('Bob1', value); + }); + }); + + it('canSpecifyArgsOnGeneratorCall', function() { + return driver.call(function* (a, b) { + var x = yield promise.fulfilled(1); + var y = yield promise.fulfilled(2); + return [x + y, a, b]; + }, null, 'abc', 123).then(function(value) { + assert.deepEqual([3, 'abc', 123], value); + }); + }); + + it('canUseGeneratorWithWebDriverWait', function() { + var values = []; + return driver.wait(function* () { + yield values.push(1); + values.push(yield promise.delayed(10).then(function() { + return 2; + })); + yield values.push(3); + return values.length === 6; + }, 250).then(function() { + assert.deepEqual([1, 2, 3, 1, 2, 3], values); + }); + }); + + /** + * @constructor + * @implements {CommandExecutor} + */ + function ExplodingExecutor() {} + + + /** @override */ + ExplodingExecutor.prototype.execute = function(command, cb) { + cb(Error('Unsupported operation')); + }; + }); + + describe('wire format', function() { + describe('can serialize', function() { + function runSerializeTest(input, want) { + let executor = new FakeExecutor(). + expect(CName.NEW_SESSION). + withParameters({'desiredCapabilities': want}). + andReturnSuccess({'browserName': 'firefox'}). + end(); + return WebDriver.createSession(executor, input) + .getSession(); + } + + it('function as a string', function() { + function foo() { return 'foo'; } + return runSerializeTest(foo, '' + foo); + }); + + it('object with toJSON()', function() { + return runSerializeTest( + new Date(605728511546), + '1989-03-12T17:55:11.546Z'); + }); + + it('Session', function() { + return runSerializeTest(new Session('foo', {}), 'foo'); + }); + + it('Capabilities', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + + var caps = Capabilities.chrome(); + caps.setLoggingPrefs(prefs); + + return runSerializeTest( + caps, + { + 'browserName': 'chrome', + 'loggingPrefs': {'browser': 'DEBUG'} + }); + }); + + it('WebElement', function() { + return runSerializeTest( + new WebElement({}, 'fefifofum'), + WebElement.buildId('fefifofum')); + }); + + it('WebElementPromise', function() { + return runSerializeTest( + new WebElementPromise( + {}, promise.fulfilled(new WebElement({}, 'fefifofum'))), + WebElement.buildId('fefifofum')); + }); + + describe('an array', function() { + it('with Serializable', function() { + return runSerializeTest([new Session('foo', {})], ['foo']); + }); + + it('with WebElement', function() { + return runSerializeTest( + [new WebElement({}, 'fefifofum')], + [WebElement.buildId('fefifofum')]); + }); + + it('with WebElementPromise', function() { + return runSerializeTest( + [new WebElementPromise( + {}, promise.fulfilled(new WebElement({}, 'fefifofum')))], + [WebElement.buildId('fefifofum')]); + }); + + it('complex array', function() { + var expected = [ + 'abc', 123, true, WebElement.buildId('fefifofum'), + [123, {'foo': 'bar'}] + ]; + + var element = new WebElement({}, 'fefifofum'); + var input = ['abc', 123, true, element, [123, {'foo': 'bar'}]]; + return runSerializeTest(input, expected); + }); + + it('nested promises', function() { + return runSerializeTest( + ['abc', Promise.resolve([123, Promise.resolve(true)])], + ['abc', [123, true]]); + }); + }); + + describe('an object', function() { + it('literal', function() { + var expected = {sessionId: 'foo'}; + return runSerializeTest({sessionId: 'foo'}, expected); + }); + + it('with sub-objects', function() { + var expected = {sessionId: {value: 'foo'}}; + return runSerializeTest( + {sessionId: {value: 'foo'}}, expected); + }); + + it('with values that have toJSON', function() { + return runSerializeTest( + {a: {b: new Date(605728511546)}}, + {a: {b: '1989-03-12T17:55:11.546Z'}}); + }); + + it('with a Session', function() { + return runSerializeTest( + {a: new Session('foo', {})}, + {a: 'foo'}); + }); + + it('nested', function() { + var elementJson = WebElement.buildId('fefifofum'); + var expected = { + 'script': 'return 1', + 'args': ['abc', 123, true, elementJson, [123, {'foo': 'bar'}]], + 'sessionId': 'foo' + }; + + var element = new WebElement({}, 'fefifofum'); + var parameters = { + 'script': 'return 1', + 'args':['abc', 123, true, element, [123, {'foo': 'bar'}]], + 'sessionId': new Session('foo', {}) + }; + + return runSerializeTest(parameters, expected); + }); + }); + }); + + describe('can deserialize', function() { + function runDeserializeTest(original, want) { + let executor = new FakeExecutor() + .expect(CName.GET_CURRENT_URL) + .andReturnSuccess(original) + .end(); + let driver = executor.createDriver(); + return driver.getCurrentUrl().then(function(got) { + assert.deepEqual(got, want); + }); + } + + it('primitives', function() { + return Promise.all([ + runDeserializeTest(1, 1), + runDeserializeTest('', ''), + runDeserializeTest(true, true), + runDeserializeTest(undefined, undefined), + runDeserializeTest(null, null) + ]); + }); + + it('simple object', function() { + return runDeserializeTest( + {sessionId: 'foo'}, + {sessionId: 'foo'}); + }); + + it('nested object', function() { + return runDeserializeTest( + {'foo': {'bar': 123}}, + {'foo': {'bar': 123}}); + }); + + it('array', function() { + return runDeserializeTest( + [{'foo': {'bar': 123}}], + [{'foo': {'bar': 123}}]); + }); + + it('passes through function properties', function() { + function bar() {} + return runDeserializeTest( + [{foo: {'bar': 123}, func: bar}], + [{foo: {'bar': 123}, func: bar}]); + }); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/logging_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/logging_test.js new file mode 100644 index 0000000..fb8cdb2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/logging_test.js @@ -0,0 +1,167 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var Browser = require('..').Browser, + By = require('..').By, + logging = require('..').logging, + assert = require('../testing/assert'), + test = require('../lib/test'); + +test.suite(function(env) { + // Logging API has numerous issues with PhantomJS: + // - does not support adjusting log levels for type "browser". + // - does not return proper log level for "browser" messages. + // - does not delete logs after retrieval + // Logging API is not supported in IE. + // Tests depend on opening data URLs, which is broken in Safari (issue 7586) + test.ignore(env.browsers(Browser.PHANTOM_JS, Browser.IE, Browser.SAFARI)). + describe('logging', function() { + var driver; + + test.beforeEach(function() { + driver = null; + }); + + test.afterEach(function() { + if (driver) { + driver.quit(); + } + }); + + test.it('can be disabled', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.OFF); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(0); + }); + }); + + // Firefox does not capture JS error console log messages. + test.ignore(env.browsers(Browser.FIREFOX)). + it('can be turned down', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.SEVERE); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(1); + assert(entries[0].level.name).equalTo('SEVERE'); + assert(entries[0].message).endsWith('and this is an error'); + }); + }); + + // Firefox does not capture JS error console log messages. + test.ignore(env.browsers(Browser.FIREFOX)). + it('can be made verbose', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(3); + assert(entries[0].level.name).equalTo('DEBUG'); + assert(entries[0].message).endsWith('hello'); + + assert(entries[1].level.name).equalTo('WARNING'); + assert(entries[1].message).endsWith('this is a warning'); + + assert(entries[2].level.name).equalTo('SEVERE'); + assert(entries[2].message).endsWith('and this is an error'); + }); + }); + + // Firefox does not capture JS error console log messages. + test.ignore(env.browsers(Browser.FIREFOX)). + it('clears records after retrieval', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(3); + }); + driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) { + assert(entries.length).equalTo(0); + }); + }); + + test.it('does not mix log types', function() { + var prefs = new logging.Preferences(); + prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG); + prefs.setLevel(logging.Type.DRIVER, logging.Level.SEVERE); + + driver = env.builder() + .setLoggingPrefs(prefs) + .build(); + + driver.get(dataUrl( + '')); + driver.manage().logs().get(logging.Type.DRIVER).then(function(entries) { + assert(entries.length).equalTo(0); + }); + }); + }); + + function dataUrl(var_args) { + return 'data:text/html,' + + Array.prototype.slice.call(arguments, 0).join(''); + } +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/net/portprober_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/net/portprober_test.js new file mode 100644 index 0000000..03a2f7a --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/net/portprober_test.js @@ -0,0 +1,129 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'), + net = require('net'); + +var promise = require('../..').promise, + portprober = require('../../net/portprober'); + +describe('isFree', function() { + + var server; + + beforeEach(function() { + server = net.createServer(function(){}); + }) + + afterEach(function(done) { + if (!server) return done(); + server.close(function() { + done(); + }); + }); + + it('should work for INADDR_ANY', function(done) { + server.listen(0, function() { + var port = server.address().port; + assertPortNotfree(port).then(function() { + var done = promise.defer(); + server.close(function() { + server = null; + done.fulfill(assertPortIsFree(port)); + }); + return done.promise; + }).then(function() { done(); }, done); + }); + }); + + it('should work for a specific host', function(done) { + var host = '127.0.0.1'; + server.listen(0, host, function() { + var port = server.address().port; + assertPortNotfree(port, host).then(function() { + var done = promise.defer(); + server.close(function() { + server = null; + done.fulfill(assertPortIsFree(port, host)); + }); + return done.promise; + }).then(function() { done(); }, done); + }); + }); +}); + +describe('findFreePort', function() { + var server; + + beforeEach(function() { + server = net.createServer(function(){}); + }) + + afterEach(function(done) { + if (!server) return done(); + server.close(function() { + done(); + }); + }); + + it('should work for INADDR_ANY', function(done) { + portprober.findFreePort().then(function(port) { + server.listen(port, function() { + assertPortNotfree(port).then(function() { + var done = promise.defer(); + server.close(function() { + server = null; + done.fulfill(assertPortIsFree(port)); + }); + return done.promise; + }).then(function() { done(); }, done); + }); + }); + }); + + it('should work for a specific host', function(done) { + var host = '127.0.0.1'; + portprober.findFreePort(host).then(function(port) { + server.listen(port, host, function() { + assertPortNotfree(port, host).then(function() { + var done = promise.defer(); + server.close(function() { + server = null; + done.fulfill(assertPortIsFree(port, host)); + }); + return done.promise; + }).then(function() { done(); }, done); + }); + }); + }); +}); + + +function assertPortIsFree(port, opt_host) { + return portprober.isFree(port, opt_host).then(function(free) { + assert.ok(free, 'port should be free'); + }); +} + + +function assertPortNotfree(port, opt_host) { + return portprober.isFree(port, opt_host).then(function(free) { + assert.ok(!free, 'port should is not free'); + }); +} diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/page_loading_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/page_loading_test.js new file mode 100644 index 0000000..d59ca36 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/page_loading_test.js @@ -0,0 +1,164 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var Browser = require('..').Browser, + By = require('..').By, + error = require('../error'), + until = require('..').until, + assert = require('../testing/assert'), + test = require('../lib/test'), + Pages = test.Pages; + + +test.suite(function(env) { + var browsers = env.browsers; + + var driver; + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + test.it('should wait for document to be loaded', function() { + driver.get(Pages.simpleTestPage); + assert(driver.getTitle()).equalTo('Hello WebDriver'); + }); + + test.it('should follow redirects sent in the http response headers', + function() { + driver.get(Pages.redirectPage); + assert(driver.getTitle()).equalTo('We Arrive Here'); + }); + + test.it('should follow meta redirects', function() { + driver.get(Pages.metaRedirectPage); + assert(driver.getTitle()).equalTo('We Arrive Here'); + }); + + test.it('should be able to get a fragment on the current page', function() { + driver.get(Pages.xhtmlTestPage); + driver.get(Pages.xhtmlTestPage + '#text'); + driver.findElement(By.id('id1')); + }); + + test.ignore(browsers(Browser.IPAD, Browser.IPHONE)). + it('should wait for all frames to load in a frameset', function() { + driver.get(Pages.framesetPage); + driver.switchTo().frame(0); + + driver.findElement(By.css('span#pageNumber')).getText().then(function(txt) { + assert(txt.trim()).equalTo('1'); + }); + + driver.switchTo().defaultContent(); + driver.switchTo().frame(1); + driver.findElement(By.css('span#pageNumber')).getText().then(function(txt) { + assert(txt.trim()).equalTo('2'); + }); + }); + + test.ignore(browsers(Browser.SAFARI)). + it('should be able to navigate back in browser history', function() { + driver.get(Pages.formPage); + + driver.findElement(By.id('imageButton')).click(); + driver.wait(until.titleIs('We Arrive Here'), 2500); + + driver.navigate().back(); + driver.wait(until.titleIs('We Leave From Here'), 2500); + }); + + test.ignore(browsers(Browser.SAFARI)). + it('should be able to navigate back in presence of iframes', function() { + driver.get(Pages.xhtmlTestPage); + + driver.findElement(By.name('sameWindow')).click(); + driver.wait(until.titleIs('This page has iframes'), 2500); + + driver.navigate().back(); + driver.wait(until.titleIs('XHTML Test Page'), 2500); + }); + + test.ignore(browsers(Browser.SAFARI)). + it('should be able to navigate forwards in browser history', function() { + driver.get(Pages.formPage); + + driver.findElement(By.id('imageButton')).click(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + + driver.navigate().back(); + driver.wait(until.titleIs('We Leave From Here'), 5000); + + driver.navigate().forward(); + driver.wait(until.titleIs('We Arrive Here'), 5000); + }); + + // PhantomJS 2.0 does not properly reload pages on refresh. + test.ignore(browsers(Browser.PHANTOM_JS)). + it('should be able to refresh a page', function() { + driver.get(Pages.xhtmlTestPage); + + driver.navigate().refresh(); + + assert(driver.getTitle()).equalTo('XHTML Test Page'); + }); + + test.it('should return title of page if set', function() { + driver.get(Pages.xhtmlTestPage); + assert(driver.getTitle()).equalTo('XHTML Test Page'); + + driver.get(Pages.simpleTestPage); + assert(driver.getTitle()).equalTo('Hello WebDriver'); + }); + + // Only implemented in Firefox. + test.ignore(browsers( + Browser.CHROME, + Browser.IE, + Browser.IPAD, + Browser.IPHONE, + Browser.OPERA, + Browser.PHANTOM_JS, + Browser.SAFARI)). + it('should timeout if page load timeout is set', function() { + driver.call(function() { + driver.manage().timeouts().pageLoadTimeout(1); + driver.get(Pages.sleepingPage + '?time=3'). + then(function() { + throw Error('Should have timed out on page load'); + }, function(e) { + if (!(e instanceof error.ScriptTimeoutError) + && !(e instanceof error.TimeoutError)) { + throw Error('Unexpected error response: ' + e); + } + }); + }).then(resetPageLoad, function(err) { + resetPageLoad().thenFinally(function() { + throw err; + }); + }); + + function resetPageLoad() { + return driver.manage().timeouts().pageLoadTimeout(-1); + } + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js new file mode 100644 index 0000000..22a9a22 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js @@ -0,0 +1,73 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); +var path = require('path'); +var test = require('../../lib/test'); + +test.suite(function(env) { + var driver; + + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + driver.quit(); + }); + + var testPageUrl = + 'data:text/html,

      ' + path.basename(__filename) + '

      '; + + test.beforeEach(function() { + driver.get(testPageUrl); + }); + + describe('phantomjs.Driver', function() { + describe('#executePhantomJS()', function() { + + test.it('can execute scripts using PhantomJS API', function() { + return driver.executePhantomJS('return this.url;').then(function(url) { + assert.equal(testPageUrl, decodeURIComponent(url)); + }); + }); + + test.it('can execute scripts as functions', function() { + driver.executePhantomJS(function(a, b) { + return a + b; + }, 1, 2).then(function(result) { + assert.equal(3, result); + }); + }); + + test.it('can manipulate the current page', function() { + driver.manage().addCookie('foo', 'bar'); + driver.manage().getCookie('foo').then(function(cookie) { + assert.equal('bar', cookie.value); + }); + driver.executePhantomJS(function() { + this.clearCookies(); + }); + driver.manage().getCookie('foo').then(function(cookie) { + assert.equal(null, cookie); + }); + }); + }); + }); +}, {browsers: ['phantomjs']}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/proxy_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/proxy_test.js new file mode 100644 index 0000000..b7a894f --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/proxy_test.js @@ -0,0 +1,170 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var http = require('http'), + url = require('url'); + +var Browser = require('..').Browser, + promise = require('..').promise, + proxy = require('../proxy'), + assert = require('../testing/assert'), + test = require('../lib/test'), + Server = require('../lib/test/httpserver').Server, + Pages = test.Pages; + + +test.suite(function(env) { + function writeResponse(res, body, encoding, contentType) { + res.writeHead(200, { + 'Content-Length': Buffer.byteLength(body, encoding), + 'Content-Type': contentType + }); + res.end(body); + } + + function writePacFile(res) { + writeResponse(res, [ + 'function FindProxyForURL(url, host) {', + ' if (shExpMatch(url, "' + goodbyeServer.url('*') + '")) {', + ' return "DIRECT";', + ' }', + ' return "PROXY ' + proxyServer.host() + '";', + '}' + ].join('\n'), 'ascii', 'application/x-javascript-config'); + } + + var proxyServer = new Server(function(req, res) { + var pathname = url.parse(req.url).pathname; + if (pathname === '/proxy.pac') { + return writePacFile(res); + } + + writeResponse(res, [ + '', + 'Proxy page', + '

      This is the proxy landing page

      ' + ].join(''), 'utf8', 'text/html; charset=UTF-8'); + }); + + var helloServer = new Server(function(req, res) { + writeResponse(res, [ + '', + 'Hello', + '

      Hello, world!

      ' + ].join(''), 'utf8', 'text/html; charset=UTF-8'); + }); + + var goodbyeServer = new Server(function(req, res) { + writeResponse(res, [ + '', + 'Goodbye', + '

      Goodbye, world!

      ' + ].join(''), 'utf8', 'text/html; charset=UTF-8'); + }); + + // Cannot pass start directly to mocha's before, as mocha will interpret the optional + // port parameter as an async callback parameter. + function mkStartFunc(server) { + return function() { + return server.start(); + }; + } + + + test.before(mkStartFunc(proxyServer)); + test.before(mkStartFunc(helloServer)); + test.before(mkStartFunc(goodbyeServer)); + + test.after(proxyServer.stop.bind(proxyServer)); + test.after(helloServer.stop.bind(helloServer)); + test.after(goodbyeServer.stop.bind(goodbyeServer)); + + var driver; + test.beforeEach(function() { driver = null; }); + test.afterEach(function() { driver && driver.quit(); }); + + // Proxy support not implemented. + test.ignore(env.browsers(Browser.IE, Browser.OPERA, Browser.SAFARI)). + describe('manual proxy settings', function() { + // phantomjs 1.9.1 in webdriver mode does not appear to respect proxy + // settings. + test.ignore(env.browsers(Browser.PHANTOM_JS)). + it('can configure HTTP proxy host', function() { + driver = env.builder(). + setProxy(proxy.manual({ + http: proxyServer.host() + })). + build(); + + driver.get(helloServer.url()); + assert(driver.getTitle()).equalTo('Proxy page'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('This is the proxy landing page'); + }); + + // PhantomJS does not support bypassing the proxy for individual hosts. + test.ignore(env.browsers(Browser.PHANTOM_JS)). + it('can bypass proxy for specific hosts', function() { + driver = env.builder(). + setProxy(proxy.manual({ + http: proxyServer.host(), + bypass: helloServer.host() + })). + build(); + + driver.get(helloServer.url()); + assert(driver.getTitle()).equalTo('Hello'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('Hello, world!'); + + driver.get(goodbyeServer.url()); + assert(driver.getTitle()).equalTo('Proxy page'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('This is the proxy landing page'); + }); + + // TODO: test ftp and https proxies. + }); + + // PhantomJS does not support PAC file proxy configuration. + // Safari does not support proxies. + test.ignore(env.browsers( + Browser.IE, Browser.OPERA, Browser.PHANTOM_JS, Browser.SAFARI)). + describe('pac proxy settings', function() { + test.it('can configure proxy through PAC file', function() { + driver = env.builder(). + setProxy(proxy.pac(proxyServer.url('/proxy.pac'))). + build(); + + driver.get(helloServer.url()); + assert(driver.getTitle()).equalTo('Proxy page'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('This is the proxy landing page'); + + driver.get(goodbyeServer.url()); + assert(driver.getTitle()).equalTo('Goodbye'); + assert(driver.findElement({tagName: 'h3'}).getText()). + equalTo('Goodbye, world!'); + }); + }); + + // TODO: figure out how to test direct and system proxy settings. + describe.skip('direct proxy settings', function() {}); + describe.skip('system proxy settings', function() {}); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/remote_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/remote_test.js new file mode 100644 index 0000000..c103d81 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/remote_test.js @@ -0,0 +1,72 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +var assert = require('assert'); + +var promise = require('../').promise; +var remote = require('../remote'); + +describe('DriverService', function() { + describe('start()', function() { + var service; + + beforeEach(function() { + service = new remote.DriverService(process.execPath, { + port: 1234, + args: ['-e', 'process.exit(1)'] + }); + }); + + afterEach(function(done) { + service.kill().thenFinally(function() { + done(); + }); + }); + + it('fails if child-process dies', function(done) { + this.timeout(1000); + service.start(500) + .then(expectFailure.bind(null, done), verifyFailure.bind(null, done)); + }); + + it('failures propagate through control flow if child-process dies', + function(done) { + this.timeout(1000); + + promise.controlFlow().execute(function() { + promise.controlFlow().execute(function() { + return service.start(500); + }); + }) + .then(expectFailure.bind(null, done), verifyFailure.bind(null, done)); + }); + + function verifyFailure(done, e) { + try { + assert.ok(!(e instanceof promise.CancellationError)); + assert.equal('Server terminated early with status 1', e.message); + done(); + } catch (ex) { + done(ex); + } + } + + function expectFailure(done) { + done(Error('expected to fail')); + } + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/stale_element_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/stale_element_test.js new file mode 100644 index 0000000..72833d8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/stale_element_test.js @@ -0,0 +1,58 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fail = require('assert').fail; + +var Browser = require('..').Browser, + By = require('..').By, + error = require('..').error, + until = require('..').until, + assert = require('../testing/assert'), + test = require('../lib/test'), + Pages = test.Pages; + + +test.suite(function(env) { + var driver; + test.before(function() { driver = env.builder().build(); }); + test.after(function() { driver.quit(); }); + + test.it( + 'dynamically removing elements from the DOM trigger a ' + + 'StaleElementReferenceError', + function() { + driver.get(Pages.javascriptPage); + + var toBeDeleted = driver.findElement(By.id('deleted')); + assert(toBeDeleted.isDisplayed()).isTrue(); + + driver.findElement(By.id('delete')).click(); + driver.wait(until.stalenessOf(toBeDeleted), 5000); + }); + + test.it('an element found in a different frame is stale', function() { + driver.get(Pages.missedJsReferencePage); + driver.switchTo().frame('inner'); + var el = driver.findElement(By.id('oneline')); + driver.switchTo().defaultContent(); + el.getText().then(fail, function(e) { + assert(e).instanceOf(error.StaleElementReferenceError); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/tag_name_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/tag_name_test.js new file mode 100644 index 0000000..d5e18a9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/tag_name_test.js @@ -0,0 +1,34 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var By = require('..').By, + assert = require('../testing/assert'), + test = require('../lib/test'); + + +test.suite(function(env) { + var driver; + test.after(function() { driver.quit(); }); + + test.it('should return lower case tag name', function() { + driver = env.builder().build(); + driver.get(test.Pages.formPage); + assert(driver.findElement(By.id('cheese')).getTagName()).equalTo('input'); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/testing/assert_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/testing/assert_test.js new file mode 100644 index 0000000..8c88482 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/testing/assert_test.js @@ -0,0 +1,374 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const assert = require('../../testing/assert'); + +const AssertionError = require('assert').AssertionError; +const assertTrue = require('assert').ok; +const assertEqual = require('assert').equal; +const assertThrows = require('assert').throws; +const fail = require('assert').fail; + + +describe('assert', function() { + describe('atLeast', function() { + it('compares subject >= value', function() { + assert(1).atLeast(0); + assert(1).atLeast(1); + assertThrows(() => assert(1).atLeast(2)); + }); + + it('accepts failure message', function() { + assertThrows( + () => assert(1).atLeast(2, 'hi there!'), + (error) => error.message.indexOf('hi there') != -1); + }); + + it('fails if given a non-numeric subject', function() { + assertThrows(() => assert('a').atLeast(1)); + }); + + it('fails if given a non-numeric bound', function() { + assertThrows(() => assert(1).atLeast('a')); + }); + + it('waits for promised subject', function() { + return assert(Promise.resolve(123)).atLeast(100); + }); + + it('waits for promised subject (with failure)', function() { + return assert(Promise.resolve(100)) + .atLeast(123) + .then(() => fail('should have failed'), function(e) { + assertInstanceOf(AssertionError, e); + assertEqual('100 >= 123', e.message); + }); + }); + }); + + describe('atMost', function() { + it('compares subject <= value', function() { + assertThrows(() => assert(1).atMost(0)); + assert(1).atMost(1); + assert(1).atMost(2); + }); + + it('accepts failure message', function() { + assertThrows( + () => assert(1).atMost(0, 'hi there!'), + (error) => error.message.indexOf('hi there!') != -1); + }); + + it('fails if given a non-numeric subject', function() { + assertThrows(() => assert(1).atMost('a')); + }); + + it('fails if given a non-numeric bound', function() { + assertThrows(() => assert('a').atMost(1)); + }); + + it('waits for promised subject', function() { + return assert(Promise.resolve(100)).atMost(123); + }); + + it('waits for promised subject (with failure)', function() { + return assert(Promise.resolve(123)) + .atMost(100) + .then(() => fail('should have failed'), function(e) { + assertInstanceOf(AssertionError, e); + assertEqual('123 <= 100', e.message); + }); + }); + }); + + describe('greaterThan', function() { + it('compares subject > value', function() { + assertThrows(() => assert(1).greaterThan(1)); + assertThrows(() => assert(1).greaterThan(2)); + assert(2).greaterThan(1); + }); + + it('accepts failure message', function() { + assertThrows( + () => assert(0).greaterThan(1, 'hi there!'), + (error) => error.message.indexOf('hi there!') != -1); + }); + + it('fails if given a non-numeric subject', function() { + assertThrows(() => assert('a').atMost(1)); + }); + + it('fails if given a non-numeric bound', function() { + assertThrows(() => assert(1).atMost('a')); + }); + + it('waits for promised subject', function() { + return assert(Promise.resolve(123)).greaterThan(100); + }); + + it('waits for promised subject (with failure)', function() { + return assert(Promise.resolve(100)) + .greaterThan(123) + .then(() => fail('should have failed'), function(e) { + assertInstanceOf(AssertionError, e); + assertEqual('100 > 123', e.message); + }); + }); + }); + + describe('lessThan', function() { + it('compares subject < value', function() { + assertThrows(() => assert(1).lessThan(0)); + assertThrows(() => assert(1).lessThan(1)); + assert(1).lessThan(2); + }); + + it('accepts failure message', function() { + assertThrows( + () => assert(1).lessThan(0, 'hi there!'), + (error) => error.message.indexOf('hi there!') != -1); + }); + + it('fails if given a non-numeric subject', function() { + assertThrows(() => assert('a').lessThan(1)); + }); + + it('fails if given a non-numeric bound', function() { + assertThrows(() => assert(1).lessThan('a')); + }); + + it('waits for promised subject', function() { + return assert(Promise.resolve(100)).lessThan(123); + }); + + it('waits for promised subject (with failure)', function() { + return assert(Promise.resolve(123)) + .lessThan(100) + .then(() => fail('should have failed'), function(e) { + assertInstanceOf(AssertionError, e); + assertEqual('123 < 100', e.message); + }); + }); + }); + + describe('closeTo', function() { + it('accepts values within epislon of target', function() { + assert(123).closeTo(123, 0); + assert(123).closeTo(124, 1); + assert(125).closeTo(124, 1); + + assertThrows(() => assert(123).closeTo(125, .1)); + assertThrows(() => assert(1./3).closeTo(.8, .01)); + }); + + it('waits for promised values', function() { + let d = Promise.defer(); + setTimeout(() => d.resolve(123), 10); + return assert(d.promise).closeTo(124, 1); + }); + }); + + describe('instanceOf', function() { + it('works with direct instances', function() { + assert(Error('foo')).instanceOf(Error); + }); + + it('works with sub-types', function() { + assert(TypeError('foo')).instanceOf(Error); + }); + + it('parent types are not instances of sub-types', function() { + assertThrows(() => assert(Error('foo')).instanceOf(TypeError)); + }); + }); + + describe('isNull', function() { + it('normal case', function() { + assert(null).isNull(); + assertThrows(() => assert(1).isNull()); + }); + + it('handles promised values', function() { + let p = new Promise(function(f) { + setTimeout(() => f(null), 10); + }); + return assert(p).isNull(); + }); + + it('does not match on undefined', function() { + assertThrows(() => assert(void(0)).isNull()); + }) + }); + + describe('isUndefined', function() { + it('normal case', function() { + assert(void(0)).isUndefined(); + assertThrows(() => assert(1).isUndefined()); + }); + + it('handles promised values', function() { + let p = new Promise(function(f) { + setTimeout(() => f(void(0)), 10); + }); + return assert(p).isUndefined(); + }); + + it('does not match on null', function() { + assertThrows(() => assert(null).isUndefined()); + }) + }); + + describe('contains', function() { + it('works with strings', function() { + assert('abc').contains('a'); + assert('abc').contains('ab'); + assert('abc').contains('abc'); + assert('abc').contains('bc'); + assert('abc').contains('c'); + assertThrows(() => assert('abc').contains('d')); + }); + + it('works with arrays', function() { + assert([1, 2, 3]).contains(1); + assert([1, 2, 3]).contains(2); + assert([1, 2, 3]).contains(3); + assertThrows(() => assert([1, 2]).contains(3)); + }); + + it('works with maps', function() { + let m = new Map; + m.set(1, 2); + assert(m).contains(1); + assertThrows(() => assert(m).contains(2)); + }); + + it('works with sets', function() { + let s = new Set; + s.add(1); + assert(s).contains(1); + assertThrows(() => assert(s).contains(2)); + }); + + it('requires an array, string, map, or set subject', function() { + assertThrows(() => assert(123).contains('a')); + }); + }); + + describe('endsWith', function() { + it('works', function() { + assert('abc').endsWith('abc'); + assert('abc').endsWith('bc'); + assert('abc').endsWith('c'); + assertThrows(() => assert('abc').endsWith('d')); + }) + }); + + describe('startsWith', function() { + it('works', function() { + assert('abc').startsWith('abc'); + assert('abc').startsWith('ab'); + assert('abc').startsWith('a'); + assertThrows(() => assert('abc').startsWith('d')); + }) + }); + + describe('matches', function() { + it('requires a regex value', function() { + assertThrows(() => assert('abc').matches(1234)); + }); + + it('requires a string value', function() { + assertThrows(() => assert(1234).matches(/abc/)); + }); + + it('requires a string value (promise case)', function() { + return assert(Promise.resolve(1234)) + .matches(/abc/) + .then(fail, function(error) { + assertEqual( + 'Expected a string matching /abc/, got <1234> (number)', + error.message); + }); + }); + + it('applies regex', function() { + assert('abc').matches(/abc/); + assertThrows(() => assert('def').matches(/abc/)); + }); + }); + + describe('isTrue', function() { + it('only accepts booleans', function() { + assertThrows(() => assert(123).isTrue()); + }); + + it('accepts true values', function() { + assert(true).isTrue(); + assert(Boolean('abc')).isTrue(); + return assert(Promise.resolve(true)).isTrue(); + }); + + it('rejects false values', function() { + assertThrows(() => assert(false).isTrue()); + assertThrows(() => assert(Boolean(0)).isTrue()); + return assert(Promise.resolve(false)).isTrue() + .then(fail, function() {/*no-op, ok*/}); + }); + }); + + describe('isFalse', function() { + it('only accepts booleans', function() { + assertThrows(() => assert(123).isFalse()); + }) + + it('accepts false values', function() { + assert(false).isFalse(); + assert(Boolean('')).isFalse(); + return assert(Promise.resolve(false)).isFalse(); + }); + + it('rejects true values', function() { + assertThrows(() => assert(true).isFalse()); + assertThrows(() => assert(Boolean(1)).isFalse()); + return assert(Promise.resolve(true)).isFalse() + .then(fail, function() {/*no-op, ok*/}); + }); + }); + + describe('isEqualTo', function() { + it('is strict equality', function() { + assert('abc').isEqualTo('abc'); + assert('abc').equals('abc'); + assert('abc').equalTo('abc'); + assertThrows(() => assert('1').isEqualTo(1)); + }); + }); + + describe('notEqualTo', function() { + it('tests strict equality', function() { + assert('1').notEqualTo(1); + assert(1).notEqualTo('1'); + assertThrows(() => assert('abc').notEqualTo('abc')); + }); + }); + + function assertInstanceOf(ctor, value) { + assertTrue(value instanceof ctor); + } +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/testing/index_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/testing/index_test.js new file mode 100644 index 0000000..31acff2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/testing/index_test.js @@ -0,0 +1,178 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var assert = require('assert'); +var promise = require('../..').promise; + +var test = require('../../testing'); + +describe('Mocha Integration', function() { + + describe('beforeEach properly binds "this"', function() { + beforeEach(function() { this.x = 1; }); + test.beforeEach(function() { this.x = 2; }); + it('', function() { assert.equal(this.x, 2); }); + }); + + describe('afterEach properly binds "this"', function() { + it('', function() { this.x = 1; }); + test.afterEach(function() { this.x = 2; }); + afterEach(function() { assert.equal(this.x, 2); }); + }); + + describe('it properly binds "this"', function() { + beforeEach(function() { this.x = 1; }); + test.it('', function() { this.x = 2; }); + afterEach(function() { assert.equal(this.x, 2); }); + }); + + describe('timeout handling', function() { + describe('it does not reset the control flow on a non-timeout', function() { + var flowReset = false; + + beforeEach(function() { + flowReset = false; + test.controlFlow().once(promise.ControlFlow.EventType.RESET, onreset); + }); + + test.it('', function() { + this.timeout(100); + return promise.delayed(50); + }); + + afterEach(function() { + assert.ok(!flowReset); + test.controlFlow().removeListener( + promise.ControlFlow.EventType.RESET, onreset); + }); + + function onreset() { + flowReset = true; + } + }); + + describe('it resets the control flow after a timeout' ,function() { + var timeoutErr, flowReset; + + beforeEach(function() { + flowReset = false; + test.controlFlow().once(promise.ControlFlow.EventType.RESET, onreset); + }); + + test.it('', function() { + var callback = this.runnable().callback; + var test = this; + this.runnable().callback = function(err) { + timeoutErr = err; + // Reset our timeout to 0 so Mocha does not fail the test. + test.timeout(0); + // When we invoke the real callback, do not pass along the error so + // Mocha does not fail the test. + return callback.call(this); + }; + + test.timeout(50); + return promise.defer().promise; + }); + + afterEach(function() { + return Promise.resolve().then(function() { + test.controlFlow().removeListener( + promise.ControlFlow.EventType.RESET, onreset); + assert.ok(flowReset, 'control flow was not reset after a timeout'); + }); + }); + + function onreset() { + flowReset = true; + } + }); + }); +}); + +describe('Mocha async "done" support', function() { + this.timeout(2*1000); + + var waited = false; + var DELAY = 100; // ms enough to notice + + // Each test asynchronously sets waited to true, so clear/check waited + // before/after: + beforeEach(function() { + waited = false; + }); + + afterEach(function() { + assert.strictEqual(waited, true); + }); + + // --- First, vanilla mocha "it" should support the "done" callback correctly. + + // This 'it' should block until 'done' is invoked + it('vanilla delayed', function(done) { + setTimeout(function delayedVanillaTimeout() { + waited = true; + done(); + }, DELAY); + }); + + // --- Now with the webdriver wrappers for 'it' should support the "done" callback: + + test.it('delayed', function(done) { + assert(done); + assert.strictEqual(typeof done, 'function'); + setTimeout(function delayedTimeoutCallback() { + waited = true; + done(); + }, DELAY); + }); + + // --- And test that the webdriver wrapper for 'it' works with a returned promise, too: + + test.it('delayed by promise', function() { + var defer = promise.defer(); + setTimeout(function delayedPromiseCallback() { + waited = true; + defer.fulfill('ignored'); + }); + return defer.promise; + }); + +}); + +describe('ControlFlow and "done" work together', function() { + var flow, order; + before(function() { + order = []; + flow = test.controlFlow(); + flow.execute(function() { order.push(1); }); + }); + + test.it('control flow updates and async done', function(done) { + flow.execute(function() { order.push(2); }); + flow.execute(function() { order.push(3); }).then(function() { + order.push(4); + }); + done(); + }) + + after(function() { + assert.deepEqual([1, 2, 3, 4], order); + }) +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/upload_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/upload_test.js new file mode 100644 index 0000000..f7fd907 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/upload_test.js @@ -0,0 +1,85 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'); + +var Browser = require('..').Browser, + By = require('..').By, + until = require('..').until, + io = require('../io'), + remote = require('../remote'), + assert = require('../testing/assert'), + test = require('../lib/test'), + Pages = test.Pages; + +test.suite(function(env) { + var LOREM_IPSUM_TEXT = 'lorem ipsum dolor sit amet'; + var FILE_HTML = '
      ' + LOREM_IPSUM_TEXT + '
      '; + + var fp; + test.before(function() { + return fp = io.tmpFile().then(function(fp) { + fs.writeFileSync(fp, FILE_HTML); + return fp; + }); + }) + + var driver; + test.before(function() { + driver = env.builder().build(); + }); + + test.after(function() { + if (driver) { + driver.quit(); + } + }); + + test.ignore(env.browsers( + Browser.IPAD, + Browser.IPHONE, + // Uploads broken in PhantomJS 2.0. + // See https://github.com/ariya/phantomjs/issues/12506 + Browser.PHANTOM_JS, + Browser.SAFARI)). + it('can upload files', function() { + driver.setFileDetector(new remote.FileDetector); + + driver.get(Pages.uploadPage); + + var fp = driver.call(function() { + return io.tmpFile().then(function(fp) { + fs.writeFileSync(fp, FILE_HTML); + return fp; + }); + }); + + driver.findElement(By.id('upload')).sendKeys(fp); + driver.findElement(By.id('go')).submit(); + + // Uploading files across a network may take a while, even if they're small. + var label = driver.findElement(By.id('upload_label')); + driver.wait(until.elementIsNotVisible(label), + 10 * 1000, 'File took longer than 10 seconds to upload!'); + + driver.switchTo().frame('upload_target'); + assert(driver.findElement(By.css('body')).getText()) + .equalTo(LOREM_IPSUM_TEXT); + }); +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/test/window_test.js b/platforms/android/assets/www/node_modules/selenium-webdriver/test/window_test.js new file mode 100644 index 0000000..959c9dc --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/test/window_test.js @@ -0,0 +1,128 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var Browser = require('..').Browser, + assert = require('../testing/assert'), + test = require('../lib/test'); + + +test.suite(function(env) { + var driver; + + test.before(function() { driver = env.builder().build(); }); + test.after(function() { driver.quit(); }); + + test.beforeEach(function() { + driver.switchTo().defaultContent(); + }); + + test.it('can set size of the current window', function() { + changeSizeBy(-20, -20); + }); + + test.it('can set size of the current window from frame', function() { + driver.get(test.Pages.framesetPage); + driver.switchTo().frame('fourth'); + changeSizeBy(-20, -20); + }); + + test.it('can set size of the current window from iframe', function() { + driver.get(test.Pages.iframePage); + driver.switchTo().frame('iframe1-name'); + changeSizeBy(-20, -20); + }); + + test.it('can set the window position of the current window', function() { + driver.manage().window().getPosition().then(function(position) { + driver.manage().window().setSize(640, 480); + driver.manage().window().setPosition(position.x + 10, position.y + 10); + + // For phantomjs, setPosition is a no-op and the "window" stays at (0, 0) + if (env.currentBrowser() === Browser.PHANTOM_JS) { + driver.manage().window().getPosition().then(function(position) { + assert(position.x).equalTo(0); + assert(position.y).equalTo(0); + }); + } else { + var dx = position.x + 10; + var dy = position.y + 10; + // On OSX, Safari position's the window relative to below the menubar + // at the top of the screen, which is 23 pixels tall. + if (env.currentBrowser() === Browser.SAFARI && + process.platform === 'darwin') { + dy += 23; + } + } + }); + }); + + test.it('can set the window position from a frame', function() { + driver.get(test.Pages.iframePage); + driver.switchTo().frame('iframe1-name'); + driver.manage().window().getPosition().then(function(position) { + driver.manage().window().setSize(640, 480); + driver.manage().window().setPosition(position.x + 10, position.y + 10); + + // For phantomjs, setPosition is a no-op and the "window" stays at (0, 0) + if (env.currentBrowser() === Browser.PHANTOM_JS) { + driver.manage().window().getPosition().then(function(position) { + assert(position.x).equalTo(0); + assert(position.y).equalTo(0); + }); + } else { + var dx = position.x + 10; + var dy = position.y + 10; + // On OSX, Safari position's the window relative to below the menubar + // at the top of the screen, which is 23 pixels tall. + if (env.currentBrowser() === Browser.SAFARI && + process.platform === 'darwin') { + dy += 23; + } + driver.wait(forPositionToBe(dx, dy), 1000); + } + }); + }); + + function changeSizeBy(dx, dy) { + driver.manage().window().getSize().then(function(size) { + driver.manage().window().setSize(size.width + dx, size.height + dy); + driver.wait(forSizeToBe(size.width + dx, size.height + dy), 1000); + }); + } + + function forSizeToBe(w, h) { + return function() { + return driver.manage().window().getSize().then(function(size) { + return size.width === w && size.height === h; + }); + }; + } + + function forPositionToBe(x, y) { + return function() { + return driver.manage().window().getPosition().then(function(position) { + return position.x === x && + // On OSX, the window height may be bumped down 22px for the top + // status bar. + // On Linux, Opera's window position will be off by 28px. + (position.y >= y && position.y <= (y + 28)); + }); + }; + } +}); diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/testing/assert.js b/platforms/android/assets/www/node_modules/selenium-webdriver/testing/assert.js new file mode 100644 index 0000000..0d8eb62 --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/testing/assert.js @@ -0,0 +1,378 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a library that simplifies writing assertions against + * promised values. + * + * >
      + * > __NOTE:__ This module is considered experimental and is subject to + * > change, or removal, at any time! + * >
      + * + * Sample usage: + * + * var driver = new webdriver.Builder().build(); + * driver.get('http://www.google.com'); + * + * assert(driver.getTitle()).equalTo('Google'); + */ + +'use strict'; + +const assert = require('assert'); + +function trueType(v) { + if (v === null) { + return 'null'; + } + + let type = typeof v; + if (type === 'object') { + if (Array.isArray(v)) { + type = 'array'; + } + } + return type; +} + + +function checkType(v, want) { + let got = trueType(v); + if (got !== want) { + throw new TypeError('require ' + want + ', but got ' + got); + } + return v; +} + +const checkNumber = v => checkType(v, 'number'); +const checkFunction = v => checkType(v, 'function'); +const checkString = v => checkType(v, 'string'); + +const isFunction = v => trueType(v) === 'function'; +const isNumber = v => trueType(v) === 'number'; +const isObject = v => trueType(v) === 'object'; +const isString = v => trueType(v) === 'string'; + + +function describe(value) { + let ret; + try { + ret = `<${String(value)}>`; + } catch (e) { + ret = ``; + } + + if (null !== value && void(0) !== value) { + ret += ` (${trueType(value)})`; + } + + return ret; +} + + +function evaluate(value, predicate) { + if (isObject(value) && isFunction(value.then)) { + return value.then(predicate); + } + predicate(value); +} + + +/** + * @private + */ +class Assertion { + /** + * @param {?} subject The subject of this assertion. + * @param {boolean=} opt_invert Whether to invert any assertions performed by + * this instance. + */ + constructor(subject, opt_invert) { + /** @private {?} */ + this.subject_ = subject; + /** @private {boolean} */ + this.invert_ = !!opt_invert; + } + + /** + * @param {number} expected The minimum permissible value (inclusive). + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + atLeast(expected, opt_message) { + checkNumber(expected); + return evaluate(this.subject_, function(actual) { + if (!isNumber(actual) || actual < expected) { + assert.fail(actual, expected, opt_message, '>='); + } + }); + } + + /** + * @param {number} expected The maximum permissible value (inclusive). + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + atMost(expected, opt_message) { + checkNumber(expected); + return evaluate(this.subject_, function (actual) { + if (!isNumber(actual) || actual > expected) { + assert.fail(actual, expected, opt_message, '<='); + } + }); + } + + /** + * @param {number} expected The maximum permissible value (exclusive). + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + greaterThan(expected, opt_message) { + checkNumber(expected); + return evaluate(this.subject_, function(actual) { + if (!isNumber(actual) || actual <= expected) { + assert.fail(actual, expected, opt_message, '>'); + } + }); + } + + /** + * @param {number} expected The minimum permissible value (exclusive). + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + lessThan(expected, opt_message) { + checkNumber(expected); + return evaluate(this.subject_, function (actual) { + if (!isNumber(actual) || actual >= expected) { + assert.fail(actual, expected, opt_message, '<'); + } + }); + } + + /** + * @param {number} expected The desired value. + * @param {number} epsilon The maximum distance from the desired value. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + closeTo(expected, episolon, opt_message) { + checkNumber(expected); + checkNumber(episolon); + return evaluate(this.subject_, function(actual) { + checkNumber(actual); + if (Math.abs(expected - actual) > episolon) { + assert.fail(opt_message || `${actual} === ${expected} (± ${episolon})`); + } + }); + } + + /** + * @param {function(new: ?)} ctor The exptected type's constructor. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + instanceOf(ctor, opt_message) { + checkFunction(ctor); + return evaluate(this.subject_, function(actual) { + if (!(actual instanceof ctor)) { + assert.fail( + opt_message + || `${describe(actual)} instanceof ${ctor.name || ctor}`); + } + }); + } + + /** + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isNull(opt_message) { + return this.isEqualTo(null); + } + + /** + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isUndefined(opt_message) { + return this.isEqualTo(void(0)); + } + + /** + * Ensures the subject of this assertion is either a string or array + * containing the given `value`. + * + * @param {?} value The value expected to be contained within the subject. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + contains(value, opt_message) { + return evaluate(this.subject_, function(actual) { + if (actual instanceof Map || actual instanceof Set) { + assert.ok(actual.has(value), opt_message || `${actual}.has(${value})`); + } else if (Array.isArray(actual) || isString(actual)) { + assert.ok( + actual.indexOf(value) !== -1, + opt_message || `${actual}.indexOf(${value}) !== -1`); + } else { + assert.fail( + `Expected an array, map, set, or string: got ${describe(actual)}`); + } + }); + } + + /** + * @param {string} str The expected suffix. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + endsWith(str, opt_message) { + checkString(str); + return evaluate(this.subject_, function(actual) { + if (!isString(actual) || !actual.endsWith(str)) { + assert.fail(actual, str, 'ends with'); + } + }); + } + + /** + * @param {string} str The expected prefix. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + startsWith(str, opt_message) { + checkString(str); + return evaluate(this.subject_, function(actual) { + if (!isString(actual) || !actual.startsWith(str)) { + assert.fail(actual, str, 'starts with'); + } + }); + } + + /** + * @param {!RegExp} regex The regex the subject is expected to match. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + matches(regex, opt_message) { + if (!(regex instanceof RegExp)) { + throw TypeError(`Not a RegExp: ${describe(regex)}`); + } + return evaluate(this.subject_, function(actual) { + if (!isString(actual) || !regex.test(actual)) { + let message = opt_message + || `Expected a string matching ${regex}, got ${describe(actual)}`; + assert.fail(actual, regex, message); + } + }); + } + + /** + * @param {?} value The unexpected value. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + notEqualTo(value, opt_message) { + return evaluate(this.subject_, function(actual) { + assert.notStrictEqual(actual, value, opt_message); + }); + } + + /** An alias for {@link #isEqualTo}. */ + equalTo(value, opt_message) { + return this.isEqualTo(value, opt_message); + } + + /** An alias for {@link #isEqualTo}. */ + equals(value, opt_message) { + return this.isEqualTo(value, opt_message); + } + + /** + * @param {?} value The expected value. + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isEqualTo(value, opt_message) { + return evaluate(this.subject_, function(actual) { + assert.strictEqual(actual, value, opt_message); + }); + } + + /** + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isTrue(opt_message) { + return this.isEqualTo(true, opt_message); + } + + /** + * @param {string=} opt_message An optional failure message. + * @return {(Promise|undefined)} The result of this assertion, if the subject + * is a promised-value. Otherwise, the assertion is performed immediately + * and nothing is returned. + */ + isFalse(opt_message) { + return this.isEqualTo(false, opt_message); + } +} + + +// PUBLIC API + + +/** + * Creates an assertion about the given `value`. + * @return {!Assertion} the new assertion. + */ +module.exports = function assertThat(value) { + return new Assertion(value); +}; +module.exports.Assertion = Assertion; // Exported to help generated docs diff --git a/platforms/android/assets/www/node_modules/selenium-webdriver/testing/index.js b/platforms/android/assets/www/node_modules/selenium-webdriver/testing/index.js new file mode 100644 index 0000000..1ad1f8b --- /dev/null +++ b/platforms/android/assets/www/node_modules/selenium-webdriver/testing/index.js @@ -0,0 +1,268 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Provides wrappers around the following global functions from + * [Mocha's BDD interface](https://github.com/mochajs/mocha): + * + * - after + * - afterEach + * - before + * - beforeEach + * - it + * - it.only + * - it.skip + * - xit + * + * The provided wrappers leverage the {@link webdriver.promise.ControlFlow} + * to simplify writing asynchronous tests: + * + * var By = require('selenium-webdriver').By, + * until = require('selenium-webdriver').until, + * firefox = require('selenium-webdriver/firefox'), + * test = require('selenium-webdriver/testing'); + * + * test.describe('Google Search', function() { + * var driver; + * + * test.before(function() { + * driver = new firefox.Driver(); + * }); + * + * test.after(function() { + * driver.quit(); + * }); + * + * test.it('should append query to title', function() { + * driver.get('http://www.google.com/ncr'); + * driver.findElement(By.name('q')).sendKeys('webdriver'); + * driver.findElement(By.name('btnG')).click(); + * driver.wait(until.titleIs('webdriver - Google Search'), 1000); + * }); + * }); + * + * You may conditionally suppress a test function using the exported + * "ignore" function. If the provided predicate returns true, the attached + * test case will be skipped: + * + * test.ignore(maybe()).it('is flaky', function() { + * if (Math.random() < 0.5) throw Error(); + * }); + * + * function maybe() { return Math.random() < 0.5; } + */ + +var promise = require('..').promise; +var flow = promise.controlFlow(); + + +/** + * Wraps a function so that all passed arguments are ignored. + * @param {!Function} fn The function to wrap. + * @return {!Function} The wrapped function. + */ +function seal(fn) { + return function() { + fn(); + }; +} + + +/** + * Wraps a function on Mocha's BDD interface so it runs inside a + * webdriver.promise.ControlFlow and waits for the flow to complete before + * continuing. + * @param {!Function} globalFn The function to wrap. + * @return {!Function} The new function. + */ +function wrapped(globalFn) { + return function() { + if (arguments.length === 1) { + return globalFn(makeAsyncTestFn(arguments[0])); + } + else if (arguments.length === 2) { + return globalFn(arguments[0], makeAsyncTestFn(arguments[1])); + } + else { + throw Error('Invalid # arguments: ' + arguments.length); + } + }; +} + +/** + * Make a wrapper to invoke caller's test function, fn. Run the test function + * within a ControlFlow. + * + * Should preserve the semantics of Mocha's Runnable.prototype.run (See + * https://github.com/mochajs/mocha/blob/master/lib/runnable.js#L192) + * + * @param {Function} fn + * @return {Function} + */ +function makeAsyncTestFn(fn) { + var async = fn.length > 0; // if test function expects a callback, its "async" + + var ret = function(done) { + var runnable = this.runnable(); + var mochaCallback = runnable.callback; + runnable.callback = function() { + flow.reset(); + return mochaCallback.apply(this, arguments); + }; + + var testFn = fn.bind(this); + flow.execute(function controlFlowExecute() { + return new promise.Promise(function(fulfill, reject) { + if (async) { + // If testFn is async (it expects a done callback), resolve the promise of this + // test whenever that callback says to. Any promises returned from testFn are + // ignored. + testFn(function testFnDoneCallback(err) { + if (err) { + reject(err); + } else { + fulfill(); + } + }); + } else { + // Without a callback, testFn can return a promise, or it will + // be assumed to have completed synchronously + fulfill(testFn()); + } + }, flow); + }, runnable.fullTitle()).then(seal(done), done); + }; + + ret.toString = function() { + return fn.toString(); + }; + + return ret; +} + + +/** + * Ignores the test chained to this function if the provided predicate returns + * true. + * @param {function(): boolean} predicateFn A predicate to call to determine + * if the test should be suppressed. This function MUST be synchronous. + * @return {!Object} An object with wrapped versions of {@link #it()} and + * {@link #describe()} that ignore tests as indicated by the predicate. + */ +function ignore(predicateFn) { + var describe = wrap(exports.xdescribe, exports.describe); + describe.only = wrap(exports.xdescribe, exports.describe.only); + + var it = wrap(exports.xit, exports.it); + it.only = wrap(exports.xit, exports.it.only); + + return { + describe: describe, + it: it + }; + + function wrap(onSkip, onRun) { + return function(title, fn) { + if (predicateFn()) { + onSkip(title, fn); + } else { + onRun(title, fn); + } + }; + } +} + + +// PUBLIC API + + +/** + * @return {!promise.ControlFlow} the control flow instance used by this module + * to coordinate test actions. + */ +exports.controlFlow = function(){ + return flow; +}; + + +/** + * Registers a new test suite. + * @param {string} name The suite name. + * @param {function()=} fn The suite function, or {@code undefined} to define + * a pending test suite. + */ +exports.describe = global.describe; + +/** + * Defines a suppressed test suite. + * @param {string} name The suite name. + * @param {function()=} fn The suite function, or {@code undefined} to define + * a pending test suite. + */ +exports.xdescribe = global.xdescribe; +exports.describe.skip = global.describe.skip; + +/** + * Register a function to call after the current suite finishes. + * @param {function()} fn . + */ +exports.after = wrapped(global.after); + +/** + * Register a function to call after each test in a suite. + * @param {function()} fn . + */ +exports.afterEach = wrapped(global.afterEach); + +/** + * Register a function to call before the current suite starts. + * @param {function()} fn . + */ +exports.before = wrapped(global.before); + +/** + * Register a function to call before each test in a suite. + * @param {function()} fn . + */ +exports.beforeEach = wrapped(global.beforeEach); + +/** + * Add a test to the current suite. + * @param {string} name The test name. + * @param {function()=} fn The test function, or {@code undefined} to define + * a pending test case. + */ +exports.it = wrapped(global.it); + +/** + * An alias for {@link #it()} that flags the test as the only one that should + * be run within the current suite. + * @param {string} name The test name. + * @param {function()=} fn The test function, or {@code undefined} to define + * a pending test case. + */ +exports.iit = exports.it.only = wrapped(global.it.only); + +/** + * Adds a test to the current suite while suppressing it so it is not run. + * @param {string} name The test name. + * @param {function()=} fn The test function, or {@code undefined} to define + * a pending test case. + */ +exports.xit = exports.it.skip = wrapped(global.xit); + +exports.ignore = ignore; diff --git a/platforms/android/assets/www/node_modules/sigmund/LICENSE b/platforms/android/assets/www/node_modules/sigmund/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sigmund/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/sigmund/README.md b/platforms/android/assets/www/node_modules/sigmund/README.md new file mode 100644 index 0000000..25a38a5 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sigmund/README.md @@ -0,0 +1,53 @@ +# sigmund + +Quick and dirty signatures for Objects. + +This is like a much faster `deepEquals` comparison, which returns a +string key suitable for caches and the like. + +## Usage + +```javascript +function doSomething (someObj) { + var key = sigmund(someObj, maxDepth) // max depth defaults to 10 + var cached = cache.get(key) + if (cached) return cached + + var result = expensiveCalculation(someObj) + cache.set(key, result) + return result +} +``` + +The resulting key will be as unique and reproducible as calling +`JSON.stringify` or `util.inspect` on the object, but is much faster. +In order to achieve this speed, some differences are glossed over. +For example, the object `{0:'foo'}` will be treated identically to the +array `['foo']`. + +Also, just as there is no way to summon the soul from the scribblings +of a cocaine-addled psychoanalyst, there is no way to revive the object +from the signature string that sigmund gives you. In fact, it's +barely even readable. + +As with `util.inspect` and `JSON.stringify`, larger objects will +produce larger signature strings. + +Because sigmund is a bit less strict than the more thorough +alternatives, the strings will be shorter, and also there is a +slightly higher chance for collisions. For example, these objects +have the same signature: + + var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} + var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} + +Like a good Freudian, sigmund is most effective when you already have +some understanding of what you're looking for. It can help you help +yourself, but you must be willing to do some work as well. + +Cycles are handled, and cyclical objects are silently omitted (though +the key is included in the signature output.) + +The second argument is the maximum depth, which defaults to 10, +because that is the maximum object traversal depth covered by most +insurance carriers. diff --git a/platforms/android/assets/www/node_modules/sigmund/bench.js b/platforms/android/assets/www/node_modules/sigmund/bench.js new file mode 100644 index 0000000..5acfd6d --- /dev/null +++ b/platforms/android/assets/www/node_modules/sigmund/bench.js @@ -0,0 +1,283 @@ +// different ways to id objects +// use a req/res pair, since it's crazy deep and cyclical + +// sparseFE10 and sigmund are usually pretty close, which is to be expected, +// since they are essentially the same algorithm, except that sigmund handles +// regular expression objects properly. + + +var http = require('http') +var util = require('util') +var sigmund = require('./sigmund.js') +var sreq, sres, creq, cres, test + +http.createServer(function (q, s) { + sreq = q + sres = s + sres.end('ok') + this.close(function () { setTimeout(function () { + start() + }, 200) }) +}).listen(1337, function () { + creq = http.get({ port: 1337 }) + creq.on('response', function (s) { cres = s }) +}) + +function start () { + test = [sreq, sres, creq, cres] + // test = sreq + // sreq.sres = sres + // sreq.creq = creq + // sreq.cres = cres + + for (var i in exports.compare) { + console.log(i) + var hash = exports.compare[i]() + console.log(hash) + console.log(hash.length) + console.log('') + } + + require('bench').runMain() +} + +function customWs (obj, md, d) { + d = d || 0 + var to = typeof obj + if (to === 'undefined' || to === 'function' || to === null) return '' + if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '') + + if (Array.isArray(obj)) { + return obj.map(function (i, _, __) { + return customWs(i, md, d + 1) + }).reduce(function (a, b) { return a + b }, '') + } + + var keys = Object.keys(obj) + return keys.map(function (k, _, __) { + return k + ':' + customWs(obj[k], md, d + 1) + }).reduce(function (a, b) { return a + b }, '') +} + +function custom (obj, md, d) { + d = d || 0 + var to = typeof obj + if (to === 'undefined' || to === 'function' || to === null) return '' + if (d > md || !obj || to !== 'object') return '' + obj + + if (Array.isArray(obj)) { + return obj.map(function (i, _, __) { + return custom(i, md, d + 1) + }).reduce(function (a, b) { return a + b }, '') + } + + var keys = Object.keys(obj) + return keys.map(function (k, _, __) { + return k + ':' + custom(obj[k], md, d + 1) + }).reduce(function (a, b) { return a + b }, '') +} + +function sparseFE2 (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + Object.keys(v).forEach(function (k, _, __) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') return + var to = typeof v[k] + if (to === 'function' || to === 'undefined') return + soFar += k + ':' + ch(v[k], depth + 1) + }) + soFar += '}' + } + ch(obj, 0) + return soFar +} + +function sparseFE (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + Object.keys(v).forEach(function (k, _, __) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') return + var to = typeof v[k] + if (to === 'function' || to === 'undefined') return + soFar += k + ch(v[k], depth + 1) + }) + } + ch(obj, 0) + return soFar +} + +function sparse (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + for (var k in v) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') continue + var to = typeof v[k] + if (to === 'function' || to === 'undefined') continue + soFar += k + ch(v[k], depth + 1) + } + } + ch(obj, 0) + return soFar +} + +function noCommas (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + for (var k in v) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') continue + var to = typeof v[k] + if (to === 'function' || to === 'undefined') continue + soFar += k + ':' + ch(v[k], depth + 1) + } + soFar += '}' + } + ch(obj, 0) + return soFar +} + + +function flatten (obj, maxDepth) { + var seen = [] + var soFar = '' + function ch (v, depth) { + if (depth > maxDepth) return + if (typeof v === 'function' || typeof v === 'undefined') return + if (typeof v !== 'object' || !v) { + soFar += v + return + } + if (seen.indexOf(v) !== -1 || depth === maxDepth) return + seen.push(v) + soFar += '{' + for (var k in v) { + // pseudo-private values. skip those. + if (k.charAt(0) === '_') continue + var to = typeof v[k] + if (to === 'function' || to === 'undefined') continue + soFar += k + ':' + ch(v[k], depth + 1) + soFar += ',' + } + soFar += '}' + } + ch(obj, 0) + return soFar +} + +exports.compare = +{ + // 'custom 2': function () { + // return custom(test, 2, 0) + // }, + // 'customWs 2': function () { + // return customWs(test, 2, 0) + // }, + 'JSON.stringify (guarded)': function () { + var seen = [] + return JSON.stringify(test, function (k, v) { + if (typeof v !== 'object' || !v) return v + if (seen.indexOf(v) !== -1) return undefined + seen.push(v) + return v + }) + }, + + 'flatten 10': function () { + return flatten(test, 10) + }, + + // 'flattenFE 10': function () { + // return flattenFE(test, 10) + // }, + + 'noCommas 10': function () { + return noCommas(test, 10) + }, + + 'sparse 10': function () { + return sparse(test, 10) + }, + + 'sparseFE 10': function () { + return sparseFE(test, 10) + }, + + 'sparseFE2 10': function () { + return sparseFE2(test, 10) + }, + + sigmund: function() { + return sigmund(test, 10) + }, + + + // 'util.inspect 1': function () { + // return util.inspect(test, false, 1, false) + // }, + // 'util.inspect undefined': function () { + // util.inspect(test) + // }, + // 'util.inspect 2': function () { + // util.inspect(test, false, 2, false) + // }, + // 'util.inspect 3': function () { + // util.inspect(test, false, 3, false) + // }, + // 'util.inspect 4': function () { + // util.inspect(test, false, 4, false) + // }, + // 'util.inspect Infinity': function () { + // util.inspect(test, false, Infinity, false) + // } +} + +/** results +**/ diff --git a/platforms/android/assets/www/node_modules/sigmund/package.json b/platforms/android/assets/www/node_modules/sigmund/package.json new file mode 100644 index 0000000..f4862fc --- /dev/null +++ b/platforms/android/assets/www/node_modules/sigmund/package.json @@ -0,0 +1,85 @@ +{ + "_args": [ + [ + "sigmund@~1.0.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine/node_modules/minimatch" + ] + ], + "_from": "sigmund@>=1.0.0 <1.1.0", + "_id": "sigmund@1.0.1", + "_inCache": true, + "_installable": true, + "_location": "/sigmund", + "_nodeVersion": "2.0.1", + "_npmUser": { + "email": "isaacs@npmjs.com", + "name": "isaacs" + }, + "_npmVersion": "2.10.0", + "_phantomChildren": {}, + "_requested": { + "name": "sigmund", + "raw": "sigmund@~1.0.0", + "rawSpec": "~1.0.0", + "scope": null, + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/jasmine/minimatch" + ], + "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "_shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", + "_shrinkwrap": null, + "_spec": "sigmund@~1.0.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/jasmine/node_modules/minimatch", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/sigmund/issues" + }, + "dependencies": {}, + "description": "Quick and dirty signatures for Objects.", + "devDependencies": { + "tap": "~0.3.0" + }, + "directories": { + "test": "test" + }, + "dist": { + "shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", + "tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + }, + "gitHead": "527f97aa5bb253d927348698c0cd3bb267d098c6", + "homepage": "https://github.com/isaacs/sigmund#readme", + "keywords": [ + "object", + "signature", + "key", + "data", + "psychoanalysis" + ], + "license": "ISC", + "main": "sigmund.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "sigmund", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/sigmund.git" + }, + "scripts": { + "bench": "node bench.js", + "test": "tap test/*.js" + }, + "version": "1.0.1" +} diff --git a/platforms/android/assets/www/node_modules/sigmund/sigmund.js b/platforms/android/assets/www/node_modules/sigmund/sigmund.js new file mode 100644 index 0000000..82c7ab8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sigmund/sigmund.js @@ -0,0 +1,39 @@ +module.exports = sigmund +function sigmund (subject, maxSessions) { + maxSessions = maxSessions || 10; + var notes = []; + var analysis = ''; + var RE = RegExp; + + function psychoAnalyze (subject, session) { + if (session > maxSessions) return; + + if (typeof subject === 'function' || + typeof subject === 'undefined') { + return; + } + + if (typeof subject !== 'object' || !subject || + (subject instanceof RE)) { + analysis += subject; + return; + } + + if (notes.indexOf(subject) !== -1 || session === maxSessions) return; + + notes.push(subject); + analysis += '{'; + Object.keys(subject).forEach(function (issue, _, __) { + // pseudo-private values. skip those. + if (issue.charAt(0) === '_') return; + var to = typeof subject[issue]; + if (to === 'function' || to === 'undefined') return; + analysis += issue; + psychoAnalyze(subject[issue], session + 1); + }); + } + psychoAnalyze(subject, 0); + return analysis; +} + +// vim: set softtabstop=4 shiftwidth=4: diff --git a/platforms/android/assets/www/node_modules/sigmund/test/basic.js b/platforms/android/assets/www/node_modules/sigmund/test/basic.js new file mode 100644 index 0000000..50c53a1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/sigmund/test/basic.js @@ -0,0 +1,24 @@ +var test = require('tap').test +var sigmund = require('../sigmund.js') + + +// occasionally there are duplicates +// that's an acceptable edge-case. JSON.stringify and util.inspect +// have some collision potential as well, though less, and collision +// detection is expensive. +var hash = '{abc/def/g{0h1i2{jkl' +var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} +var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} + +var obj3 = JSON.parse(JSON.stringify(obj1)) +obj3.c = /def/ +obj3.g[2].cycle = obj3 +var cycleHash = '{abc/def/g{0h1i2{jklcycle' + +test('basic', function (t) { + t.equal(sigmund(obj1), hash) + t.equal(sigmund(obj2), hash) + t.equal(sigmund(obj3), cycleHash) + t.end() +}) + diff --git a/platforms/android/assets/www/node_modules/tmp/.npmignore b/platforms/android/assets/www/node_modules/tmp/.npmignore new file mode 100644 index 0000000..78f2710 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/.npmignore @@ -0,0 +1,2 @@ +node_modules/ +.idea/ diff --git a/platforms/android/assets/www/node_modules/tmp/.travis.yml b/platforms/android/assets/www/node_modules/tmp/.travis.yml new file mode 100644 index 0000000..0175d82 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.6" + - "0.8" + - "0.10" diff --git a/platforms/android/assets/www/node_modules/tmp/README.md b/platforms/android/assets/www/node_modules/tmp/README.md new file mode 100644 index 0000000..3a1a509 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/README.md @@ -0,0 +1,162 @@ +# Tmp + +A simple temporary file and directory creator for [node.js.][1] + +[![Build Status](https://secure.travis-ci.org/raszi/node-tmp.png?branch=master)](http://travis-ci.org/raszi/node-tmp) + +## About + +The main difference between bruce's [node-temp][2] is that mine more +aggressively checks for the existence of the newly created temporary file and +creates the new file with `O_EXCL` instead of simple `O_CREAT | O_RDRW`, so it +is safer. + +The API is slightly different as well, Tmp does not yet provide synchronous +calls and all the parameters are optional. + +You can set whether you want to remove the temporary file on process exit or +not, and the destination directory can also be set. + +## How to install + +```bash +npm install tmp +``` + +## Usage + +### File creation + +Simple temporary file creation, the file will be unlinked on process exit. + +```javascript +var tmp = require('tmp'); + +tmp.file(function _tempFileCreated(err, path, fd) { + if (err) throw err; + + console.log("File: ", path); + console.log("Filedescriptor: ", fd); +}); +``` + +### Directory creation + +Simple temporary directory creation, it will be removed on process exit. + +If the directory still contains items on process exit, then it won't be removed. + +```javascript +var tmp = require('tmp'); + +tmp.dir(function _tempDirCreated(err, path) { + if (err) throw err; + + console.log("Dir: ", path); +}); +``` + +If you want to cleanup the directory even when there are entries in it, then +you can pass the `unsafeCleanup` option when creating it. + +### Filename generation + +It is possible with this library to generate a unique filename in the specified +directory. + +```javascript +var tmp = require('tmp'); + +tmp.tmpName(function _tempNameGenerated(err, path) { + if (err) throw err; + + console.log("Created temporary filename: ", path); +}); +``` + +## Advanced usage + +### File creation + +Creates a file with mode `0644`, prefix will be `prefix-` and postfix will be `.txt`. + +```javascript +var tmp = require('tmp'); + +tmp.file({ mode: 0644, prefix: 'prefix-', postfix: '.txt' }, function _tempFileCreated(err, path, fd) { + if (err) throw err; + + console.log("File: ", path); + console.log("Filedescriptor: ", fd); +}); +``` + +### Directory creation + +Creates a directory with mode `0755`, prefix will be `myTmpDir_`. + +```javascript +var tmp = require('tmp'); + +tmp.dir({ mode: 0750, prefix: 'myTmpDir_' }, function _tempDirCreated(err, path) { + if (err) throw err; + + console.log("Dir: ", path); +}); +``` + +### mkstemps like + +Creates a new temporary directory with mode `0700` and filename like `/tmp/tmp-nk2J1u`. + +```javascript +var tmp = require('tmp'); + +tmp.dir({ template: '/tmp/tmp-XXXXXX' }, function _tempDirCreated(err, path) { + if (err) throw err; + + console.log("Dir: ", path); +}); +``` + +### Filename generation + +The `tmpName()` function accepts the `prefix`, `postfix`, `dir`, etc. parameters also: + +```javascript +var tmp = require('tmp'); + +tmp.tmpName({ template: '/tmp/tmp-XXXXXX' }, function _tempNameGenerated(err, path) { + if (err) throw err; + + console.log("Created temporary filename: ", path); +}); +``` + +## Graceful cleanup + +One may want to cleanup the temporary files even when an uncaught exception +occurs. To enforce this, you can call the `setGracefulCleanup()` method: + +```javascript +var tmp = require('tmp'); + +tmp.setGracefulCleanup(); +``` + +## Options + +All options are optional :) + + * `mode`: the file mode to create with, it fallbacks to `0600` on file creation and `0700` on directory creation + * `prefix`: the optional prefix, fallbacks to `tmp-` if not provided + * `postfix`: the optional postfix, fallbacks to `.tmp` on file creation + * `template`: [`mkstemps`][3] like filename template, no default + * `dir`: the optional temporary directory, fallbacks to system default (guesses from environment) + * `tries`: how many times should the function try to get a unique filename before giving up, default `3` + * `keep`: signals that the temporary file or directory should not be deleted on exit, default is `false`, means delete + * `unsafeCleanup`: recursively removes the created temporary directory, even when it's not empty. default is `false` + +[1]: http://nodejs.org/ +[2]: https://github.com/bruce/node-temp +[3]: http://www.kernel.org/doc/man-pages/online/pages/man3/mkstemp.3.html diff --git a/platforms/android/assets/www/node_modules/tmp/domain-test.js b/platforms/android/assets/www/node_modules/tmp/domain-test.js new file mode 100644 index 0000000..47221bc --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/domain-test.js @@ -0,0 +1,13 @@ +var domain = require('domain'); + +//throw new Error('bazz'); + +var d = domain.create(); +d.on('error', function ( e ) { + console.log('error!!!', e); +}); + +d.run(function () { + console.log('hey'); + throw new Error('bazz'); +}); diff --git a/platforms/android/assets/www/node_modules/tmp/lib/tmp.js b/platforms/android/assets/www/node_modules/tmp/lib/tmp.js new file mode 100644 index 0000000..ea84faa --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/lib/tmp.js @@ -0,0 +1,307 @@ +/*! + * Tmp + * + * Copyright (c) 2011-2013 KARASZI Istvan + * + * MIT Licensed + */ + +/** + * Module dependencies. + */ +var + fs = require('fs'), + path = require('path'), + os = require('os'), + exists = fs.exists || path.exists, + tmpDir = os.tmpDir || _getTMPDir, + _c = require('constants'); + +/** + * The working inner variables. + */ +var + // store the actual TMP directory + _TMP = tmpDir(), + + // the random characters to choose from + randomChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz", + randomCharsLength = randomChars.length, + + // this will hold the objects need to be removed on exit + _removeObjects = [], + + _gracefulCleanup = false, + _uncaughtException = false; + +/** + * Gets the temp directory. + * + * @return {String} + * @api private + */ +function _getTMPDir() { + var tmpNames = [ 'TMPDIR', 'TMP', 'TEMP' ]; + + for (var i = 0, length = tmpNames.length; i < length; i++) { + if (_isUndefined(process.env[tmpNames[i]])) continue; + + return process.env[tmpNames[i]]; + } + + // fallback to the default + return '/tmp'; +} + +/** + * Checks whether the `obj` parameter is defined or not. + * + * @param {Object} obj + * @return {Boolean} + * @api private + */ +function _isUndefined(obj) { + return typeof obj === 'undefined'; +} + +/** + * Parses the function arguments. + * + * This function helps to have optional arguments. + * + * @param {Object} options + * @param {Function} callback + * @api private + */ +function _parseArguments(options, callback) { + if (!callback || typeof callback != "function") { + callback = options; + options = {}; + } + + return [ options, callback ]; +} + +/** + * Gets a temporary file name. + * + * @param {Object} opts + * @param {Function} cb + * @api private + */ +function _getTmpName(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1], + template = opts.template, + templateDefined = !_isUndefined(template), + tries = opts.tries || 3; + + if (isNaN(tries) || tries < 0) + return cb(new Error('Invalid tries')); + + if (templateDefined && !template.match(/XXXXXX/)) + return cb(new Error('Invalid template provided')); + + function _getName() { + + // prefix and postfix + if (!templateDefined) { + var name = [ + (_isUndefined(opts.prefix)) ? 'tmp-' : opts.prefix, + process.pid, + (Math.random() * 0x1000000000).toString(36), + opts.postfix + ].join(''); + + return path.join(opts.dir || _TMP, name); + } + + // mkstemps like template + var chars = []; + + for (var i = 0; i < 6; i++) { + chars.push(randomChars.substr(Math.floor(Math.random() * randomCharsLength), 1)); + } + + return template.replace(/XXXXXX/, chars.join('')); + } + + (function _getUniqueName() { + var name = _getName(); + + // check whether the path exists then retry if needed + exists(name, function _pathExists(pathExists) { + if (pathExists) { + if (tries-- > 0) return _getUniqueName(); + + return cb(new Error('Could not get a unique tmp filename, max tries reached')); + } + + cb(null, name); + }); + }()); +} + +/** + * Creates and opens a temporary file. + * + * @param {Object} options + * @param {Function} callback + * @api public + */ +function _createTmpFile(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1]; + + opts.postfix = (_isUndefined(opts.postfix)) ? '.tmp' : opts.postfix; + + // gets a temporary filename + _getTmpName(opts, function _tmpNameCreated(err, name) { + if (err) return cb(err); + + // create and open the file + fs.open(name, _c.O_CREAT | _c.O_EXCL | _c.O_RDWR, opts.mode || 0600, function _fileCreated(err, fd) { + if (err) return cb(err); + + var removeCallback = _prepareRemoveCallback(fs.unlinkSync.bind(fs), name); + + if (!opts.keep) { + _removeObjects.unshift(removeCallback); + } + + cb(null, name, fd, removeCallback); + }); + }); +} + +/** + * Removes files and folders in a directory recursively. + * + * @param {String} dir + */ +function _rmdirRecursiveSync(dir) { + var files = fs.readdirSync(dir); + + for (var i = 0, length = files.length; i < length; i++) { + var file = path.join(dir, files[i]); + // lstat so we don't recurse into symlinked directories. + var stat = fs.lstatSync(file); + + if (stat.isDirectory()) { + _rmdirRecursiveSync(file); + } else { + fs.unlinkSync(file); + } + } + + fs.rmdirSync(dir); +} + +/** + * + * @param {Function} removeFunction + * @param {String} path + * @returns {Function} + * @private + */ +function _prepareRemoveCallback(removeFunction, path) { + var called = false; + return function() { + if (called) { + return; + } + + removeFunction(path); + + called = true; + }; +} + +/** + * Creates a temporary directory. + * + * @param {Object} options + * @param {Function} callback + * @api public + */ +function _createTmpDir(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1]; + + // gets a temporary filename + _getTmpName(opts, function _tmpNameCreated(err, name) { + if (err) return cb(err); + + // create the directory + fs.mkdir(name, opts.mode || 0700, function _dirCreated(err) { + if (err) return cb(err); + + var removeCallback = _prepareRemoveCallback( + opts.unsafeCleanup + ? _rmdirRecursiveSync + : fs.rmdirSync.bind(fs), + name + ); + + if (!opts.keep) { + _removeObjects.unshift(removeCallback); + } + + cb(null, name, removeCallback); + }); + }); +} + +/** + * The garbage collector. + * + * @api private + */ +function _garbageCollector() { + if (_uncaughtException && !_gracefulCleanup) { + return; + } + + for (var i = 0, length = _removeObjects.length; i < length; i++) { + try { + _removeObjects[i].call(null); + } catch (e) { + // already removed? + } + } +} + +function _setGracefulCleanup() { + _gracefulCleanup = true; +} + +var version = process.versions.node.split('.').map(function (value) { + return parseInt(value, 10); +}); + +if (version[0] === 0 && (version[1] < 9 || version[1] === 9 && version[2] < 5)) { + process.addListener('uncaughtException', function _uncaughtExceptionThrown( err ) { + _uncaughtException = true; + _garbageCollector(); + + throw err; + }); +} + +process.addListener('exit', function _exit(code) { + if (code) _uncaughtException = true; + _garbageCollector(); +}); + +// exporting all the needed methods +module.exports.tmpdir = _TMP; +module.exports.dir = _createTmpDir; +module.exports.file = _createTmpFile; +module.exports.tmpName = _getTmpName; +module.exports.setGracefulCleanup = _setGracefulCleanup; diff --git a/platforms/android/assets/www/node_modules/tmp/package.json b/platforms/android/assets/www/node_modules/tmp/package.json new file mode 100644 index 0000000..ede4cfa --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/package.json @@ -0,0 +1,91 @@ +{ + "_args": [ + [ + "tmp@0.0.24", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver" + ] + ], + "_from": "tmp@0.0.24", + "_id": "tmp@0.0.24", + "_inCache": true, + "_installable": true, + "_location": "/tmp", + "_npmUser": { + "email": "npm@spam.raszi.hu", + "name": "raszi" + }, + "_npmVersion": "1.4.16", + "_phantomChildren": {}, + "_requested": { + "name": "tmp", + "raw": "tmp@0.0.24", + "rawSpec": "0.0.24", + "scope": null, + "spec": "0.0.24", + "type": "version" + }, + "_requiredBy": [ + "/selenium-webdriver" + ], + "_resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", + "_shasum": "d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12", + "_shrinkwrap": null, + "_spec": "tmp@0.0.24", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver", + "author": { + "email": "github@spam.raszi.hu", + "name": "KARASZI István", + "url": "http://raszi.hu/" + }, + "bugs": { + "url": "http://github.com/raszi/node-tmp/issues" + }, + "dependencies": {}, + "description": "Temporary file and directory creator", + "devDependencies": { + "vows": "~0.7.0" + }, + "directories": {}, + "dist": { + "shasum": "d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12", + "tarball": "http://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz" + }, + "engines": { + "node": ">=0.4.0" + }, + "gitHead": "6864655f13a11c6043c119a0cb60385f072bcecf", + "homepage": "http://github.com/raszi/node-tmp", + "keywords": [ + "temporary", + "tmp", + "temp", + "tempdir", + "tempfile", + "tmpdir", + "tmpfile" + ], + "licenses": [ + { + "type": "MIT", + "url": "http://opensource.org/licenses/MIT" + } + ], + "main": "lib/tmp.js", + "maintainers": [ + { + "email": "npm@spam.raszi.hu", + "name": "raszi" + } + ], + "name": "tmp", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/raszi/node-tmp.git" + }, + "scripts": { + "test": "vows test/*-test.js" + }, + "version": "0.0.24" +} diff --git a/platforms/android/assets/www/node_modules/tmp/test-all.sh b/platforms/android/assets/www/node_modules/tmp/test-all.sh new file mode 100755 index 0000000..4734d60 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test-all.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +#node06 +for node in node08 node; do + command -v ${node} > /dev/null 2>&1 || continue + + echo "Testing with $(${node} --version)..." + ${node} node_modules/vows/bin/vows test/*test.js +done diff --git a/platforms/android/assets/www/node_modules/tmp/test.js b/platforms/android/assets/www/node_modules/tmp/test.js new file mode 100644 index 0000000..8058221 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test.js @@ -0,0 +1,6 @@ +process.on('uncaughtException', function ( err ) { + console.log('blah'); + throw err; +}); + +throw "on purpose" diff --git a/platforms/android/assets/www/node_modules/tmp/test/base.js b/platforms/android/assets/www/node_modules/tmp/test/base.js new file mode 100644 index 0000000..498d8fb --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test/base.js @@ -0,0 +1,74 @@ +var + assert = require('assert'), + path = require('path'), + exec = require('child_process').exec; + +function _spawnTestWithError(testFile, params, cb) { + _spawnTest(true, testFile, params, cb); +} + +function _spawnTestWithoutError(testFile, params, cb) { + _spawnTest(false, testFile, params, cb); +} + +function _spawnTest(passError, testFile, params, cb) { + var + filename, + node_path = process.argv[0], + command = [ node_path, path.join(__dirname, testFile) ].concat(params).join(' '); + + exec(command, function _execDone(err, stdout, stderr) { + if (passError) { + if (err) { + return cb(err); + } else if (stderr.length > 0) { + return cb(stderr.toString()); + } + } + + return cb(null, stdout.toString()); + }); +} + +function _testStat(stat, mode) { + assert.equal(stat.uid, process.getuid(), 'should have the same UID'); + assert.equal(stat.gid, process.getgid(), 'should have the same GUID'); + assert.equal(stat.mode, mode); +} + +function _testPrefix(prefix) { + return function _testPrefixGenerated(err, name, fd) { + assert.equal(path.basename(name).slice(0, prefix.length), prefix, 'should have the provided prefix'); + }; +} + +function _testPostfix(postfix) { + return function _testPostfixGenerated(err, name, fd) { + assert.equal(name.slice(name.length - postfix.length, name.length), postfix, 'should have the provided postfix'); + }; +} + +function _testKeep(type, keep, cb) { + _spawnTestWithError('keep.js', [ type, keep ], cb); +} + +function _testGraceful(type, graceful, cb) { + _spawnTestWithoutError('graceful.js', [ type, graceful ], cb); +} + +function _assertName(err, name) { + assert.isString(name); + assert.isNotZero(name.length); +} + +function _testUnsafeCleanup(unsafe, cb) { + _spawnTestWithoutError('unsafe.js', [ 'dir', unsafe ], cb); +} + +module.exports.testStat = _testStat; +module.exports.testPrefix = _testPrefix; +module.exports.testPostfix = _testPostfix; +module.exports.testKeep = _testKeep; +module.exports.testGraceful = _testGraceful; +module.exports.assertName = _assertName; +module.exports.testUnsafeCleanup = _testUnsafeCleanup; diff --git a/platforms/android/assets/www/node_modules/tmp/test/dir-test.js b/platforms/android/assets/www/node_modules/tmp/test/dir-test.js new file mode 100644 index 0000000..2e4e529 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test/dir-test.js @@ -0,0 +1,196 @@ +var + vows = require('vows'), + assert = require('assert'), + + path = require('path'), + fs = require('fs'), + existsSync = fs.existsSync || path.existsSync, + + tmp = require('../lib/tmp.js'), + Test = require('./base.js'); + + +function _testDir(mode) { + return function _testDirGenerated(err, name) { + assert.ok(existsSync(name), 'should exist'); + + var stat = fs.statSync(name); + assert.ok(stat.isDirectory(), 'should be a directory'); + + Test.testStat(stat, mode); + }; +} + +vows.describe('Directory creation').addBatch({ + 'when using without parameters': { + topic: function () { + tmp.dir(this.callback); + }, + + 'should be a directory': _testDir(040700), + 'should have the default prefix': Test.testPrefix('tmp-') + }, + + 'when using with prefix': { + topic: function () { + tmp.dir({ prefix: 'something' }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040700), + 'should have the provided prefix': Test.testPrefix('something') + }, + + 'when using with postfix': { + topic: function () { + tmp.dir({ postfix: '.txt' }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040700), + 'should have the provided postfix': Test.testPostfix('.txt') + }, + + 'when using template': { + topic: function () { + tmp.dir({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testDir(040700), + 'should have the provided prefix': Test.testPrefix('clike-'), + 'should have the provided postfix': Test.testPostfix('-postfix') + }, + + 'when using multiple options': { + topic: function () { + tmp.dir({ prefix: 'foo', postfix: 'bar', mode: 0750 }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040750), + 'should have the provided prefix': Test.testPrefix('foo'), + 'should have the provided postfix': Test.testPostfix('bar') + }, + + 'when using multiple options and mode': { + topic: function () { + tmp.dir({ prefix: 'complicated', postfix: 'options', mode: 0755 }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040755), + 'should have the provided prefix': Test.testPrefix('complicated'), + 'should have the provided postfix': Test.testPostfix('options') + }, + + 'no tries': { + topic: function () { + tmp.dir({ tries: -1 }, this.callback); + }, + + 'should return with an error': assert.isObject + }, + + 'keep testing': { + topic: function () { + Test.testKeep('dir', '1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a dir': function (err, name) { + _testDir(040700)(err, name); + fs.rmdirSync(name); + } + }, + + 'unlink testing': { + topic: function () { + Test.testKeep('dir', '0', this.callback); + }, + + 'should not return with error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "Directory should be removed"); + } + }, + + 'non graceful testing': { + topic: function () { + Test.testGraceful('dir', '0', this.callback); + }, + + 'should not return with error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a dir': function (err, name) { + _testDir(040700)(err, name); + fs.rmdirSync(name); + } + }, + + 'graceful testing': { + topic: function () { + Test.testGraceful('dir', '1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "Directory should be removed"); + } + }, + + 'unsafeCleanup === true': { + topic: function () { + Test.testUnsafeCleanup('1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "Directory should be removed"); + }, + 'should remove symlinked dir': function(err, name) { + assert.ok( + !existsSync(name + '/symlinkme-target'), + 'should remove target' + ); + }, + 'should not remove contents of symlink dir': function(err, name) { + assert.ok( + existsSync(__dirname + '/symlinkme/file.js'), + 'should not remove symlinked directory\'s content' + ); + } + }, + + 'unsafeCleanup === false': { + topic: function () { + Test.testUnsafeCleanup('0', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a directory': _testDir(040700) + }, + + 'remove callback': { + topic: function () { + tmp.dir(this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'removeCallback should remove directory': function (_err, name, removeCallback) { + removeCallback(); + assert.ok(!existsSync(name), "Directory should be removed"); + } + } +}).exportTo(module); diff --git a/platforms/android/assets/www/node_modules/tmp/test/file-test.js b/platforms/android/assets/www/node_modules/tmp/test/file-test.js new file mode 100644 index 0000000..d9605b3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test/file-test.js @@ -0,0 +1,177 @@ +var + vows = require('vows'), + assert = require('assert'), + + path = require('path'), + fs = require('fs'), + existsSync = fs.existsSync || path.existsSync, + + tmp = require('../lib/tmp.js'), + Test = require('./base.js'); + + +function _testFile(mode, fdTest) { + return function _testFileGenerated(err, name, fd) { + assert.ok(existsSync(name), 'should exist'); + + var stat = fs.statSync(name); + assert.equal(stat.size, 0, 'should have zero size'); + assert.ok(stat.isFile(), 'should be a file'); + + Test.testStat(stat, mode); + + // check with fstat as well (fd checking) + if (fdTest) { + var fstat = fs.fstatSync(fd); + assert.deepEqual(fstat, stat, 'fstat results should be the same'); + + var data = new Buffer('something'); + assert.equal(fs.writeSync(fd, data, 0, data.length, 0), data.length, 'should be writable'); + assert.ok(!fs.closeSync(fd), 'should not return with error'); + } + }; +} + +vows.describe('File creation').addBatch({ + 'when using without parameters': { + topic: function () { + tmp.file(this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100600, true), + 'should have the default prefix': Test.testPrefix('tmp-'), + 'should have the default postfix': Test.testPostfix('.tmp') + }, + + 'when using with prefix': { + topic: function () { + tmp.file({ prefix: 'something' }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100600, true), + 'should have the provided prefix': Test.testPrefix('something') + }, + + 'when using with postfix': { + topic: function () { + tmp.file({ postfix: '.txt' }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100600, true), + 'should have the provided postfix': Test.testPostfix('.txt') + }, + + 'when using template': { + topic: function () { + tmp.file({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100600, true), + 'should have the provided prefix': Test.testPrefix('clike-'), + 'should have the provided postfix': Test.testPostfix('-postfix') + }, + + 'when using multiple options': { + topic: function () { + tmp.file({ prefix: 'foo', postfix: 'bar', mode: 0640 }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100640, true), + 'should have the provided prefix': Test.testPrefix('foo'), + 'should have the provided postfix': Test.testPostfix('bar') + }, + + 'when using multiple options and mode': { + topic: function () { + tmp.file({ prefix: 'complicated', postfix: 'options', mode: 0644 }, this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': _testFile(0100644, true), + 'should have the provided prefix': Test.testPrefix('complicated'), + 'should have the provided postfix': Test.testPostfix('options') + }, + + 'no tries': { + topic: function () { + tmp.file({ tries: -1 }, this.callback); + }, + + 'should not be created': assert.isObject + }, + + 'keep testing': { + topic: function () { + Test.testKeep('file', '1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': function (err, name) { + _testFile(0100600, false)(err, name, null); + fs.unlinkSync(name); + } + }, + + 'unlink testing': { + topic: function () { + Test.testKeep('file', '0', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "File should be removed"); + } + }, + + 'non graceful testing': { + topic: function () { + Test.testGraceful('file', '0', this.callback); + }, + + 'should not return with error': assert.isNull, + 'should return with a name': Test.assertName, + 'should be a file': function (err, name) { + _testFile(0100600, false)(err, name, null); + fs.unlinkSync(name); + } + }, + + 'graceful testing': { + topic: function () { + Test.testGraceful('file', '1', this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'should not exist': function (err, name) { + assert.ok(!existsSync(name), "File should be removed"); + } + }, + + 'remove callback': { + topic: function () { + tmp.file(this.callback); + }, + + 'should not return with an error': assert.isNull, + 'should return with a name': Test.assertName, + 'removeCallback should remove file': function (_err, name, _fd, removeCallback) { + removeCallback(); + assert.ok(!existsSync(name), "File should be removed"); + } + } + +}).exportTo(module); diff --git a/platforms/android/assets/www/node_modules/tmp/test/graceful.js b/platforms/android/assets/www/node_modules/tmp/test/graceful.js new file mode 100644 index 0000000..c898656 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test/graceful.js @@ -0,0 +1,15 @@ +var + tmp = require('../lib/tmp'), + spawn = require('./spawn'); + +var graceful = spawn.arg; + +if (graceful) { + tmp.setGracefulCleanup(); +} + +spawn.tmpFunction(function (err, name) { + spawn.out(name, function () { + throw new Error("Thrown on purpose"); + }); +}); diff --git a/platforms/android/assets/www/node_modules/tmp/test/keep.js b/platforms/android/assets/www/node_modules/tmp/test/keep.js new file mode 100644 index 0000000..9538605 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test/keep.js @@ -0,0 +1,11 @@ +var spawn = require('./spawn'); + +var keep = spawn.arg; + +spawn.tmpFunction({ keep: keep }, function (err, name) { + if (err) { + spawn.err(err, spawn.exit); + } else { + spawn.out(name, spawn.exit); + } +}); diff --git a/platforms/android/assets/www/node_modules/tmp/test/name-test.js b/platforms/android/assets/www/node_modules/tmp/test/name-test.js new file mode 100644 index 0000000..a242c21 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test/name-test.js @@ -0,0 +1,82 @@ +var + vows = require('vows'), + assert = require('assert'), + + path = require('path'), + + tmp = require('../lib/tmp.js'), + Test = require('./base.js'); + +vows.describe('Name creation').addBatch({ + 'when using without parameters': { + topic: function () { + tmp.tmpName(this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the default prefix': Test.testPrefix('tmp-') + }, + + 'when using with prefix': { + topic: function () { + tmp.tmpName({ prefix: 'something' }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the provided prefix': Test.testPrefix('something') + }, + + 'when using with postfix': { + topic: function () { + tmp.tmpName({ postfix: '.txt' }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the provided postfix': Test.testPostfix('.txt') + + }, + + 'when using template': { + topic: function () { + tmp.tmpName({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the provided prefix': Test.testPrefix('clike-'), + 'should have the provided postfix': Test.testPostfix('-postfix'), + 'should have template filled': function (err, name) { + assert.isTrue(/[a-zA-Z0-9]{6}/.test(name)); + } + }, + + 'when using multiple options': { + topic: function () { + tmp.tmpName({ prefix: 'foo', postfix: 'bar', tries: 5 }, this.callback); + }, + + 'should not return with error': assert.isNull, + 'should have the provided prefix': Test.testPrefix('foo'), + 'should have the provided postfix': Test.testPostfix('bar') + }, + + 'no tries': { + topic: function () { + tmp.tmpName({ tries: -1 }, this.callback); + }, + + 'should fail': function (err, name) { + assert.isObject(err); + } + }, + + 'tries not numeric': { + topic: function () { + tmp.tmpName({ tries: 'hello'}, this.callback); + }, + + 'should fail': function (err, name) { + assert.isObject(err); + } + } + +}).exportTo(module); diff --git a/platforms/android/assets/www/node_modules/tmp/test/spawn.js b/platforms/android/assets/www/node_modules/tmp/test/spawn.js new file mode 100644 index 0000000..6468eb3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test/spawn.js @@ -0,0 +1,32 @@ +var + fs = require('fs'), + tmp = require('../lib/tmp'); + +function _writeSync(stream, str, cb) { + var flushed = stream.write(str); + if (flushed) { + return cb(null); + } + + stream.once('drain', function _flushed() { + cb(null); + }); +} + +module.exports.out = function (str, cb) { + _writeSync(process.stdout, str, cb); +}; + +module.exports.err = function (str, cb) { + _writeSync(process.stderr, str, cb); +}; + +module.exports.exit = function () { + process.exit(0); +}; + +var type = process.argv[2]; +module.exports.tmpFunction = (type == 'file') ? tmp.file : tmp.dir; + +var arg = (process.argv[3] && parseInt(process.argv[3], 10) === 1) ? true : false; +module.exports.arg = arg; diff --git a/platforms/android/assets/www/node_modules/tmp/test/symlinkme/file.js b/platforms/android/assets/www/node_modules/tmp/test/symlinkme/file.js new file mode 100644 index 0000000..e69de29 diff --git a/platforms/android/assets/www/node_modules/tmp/test/unsafe.js b/platforms/android/assets/www/node_modules/tmp/test/unsafe.js new file mode 100644 index 0000000..73e4fb3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/tmp/test/unsafe.js @@ -0,0 +1,30 @@ +var + fs = require('fs'), + join = require('path').join, + spawn = require('./spawn'); + +var unsafe = spawn.arg; +spawn.tmpFunction({ unsafeCleanup: unsafe }, function (err, name) { + if (err) { + spawn.err(err, spawn.exit); + return; + } + + try { + // file that should be removed + var fd = fs.openSync(join(name, 'should-be-removed.file'), 'w'); + fs.closeSync(fd); + + // in tree source + var symlinkSource = join(__dirname, 'symlinkme'); + // testing target + var symlinkTarget = join(name, 'symlinkme-target'); + + // symlink that should be removed but the contents should be preserved. + fs.symlinkSync(symlinkSource, symlinkTarget, 'dir'); + + spawn.out(name, spawn.exit); + } catch (e) { + spawn.err(e.toString(), spawn.exit); + } +}); diff --git a/platforms/android/assets/www/node_modules/ultron/.npmignore b/platforms/android/assets/www/node_modules/ultron/.npmignore new file mode 100644 index 0000000..66210a2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ultron/.npmignore @@ -0,0 +1,3 @@ +node_modules +coverage +.tern-port diff --git a/platforms/android/assets/www/node_modules/ultron/.travis.yml b/platforms/android/assets/www/node_modules/ultron/.travis.yml new file mode 100644 index 0000000..a505004 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ultron/.travis.yml @@ -0,0 +1,21 @@ +sudo: false +language: node_js +node_js: + - "0.12" + - "0.10" + - "0.8" + - "iojs" +before_install: + - 'if [ "${TRAVIS_NODE_VERSION}" == "0.8" ]; then npm install -g npm@2.11.1; fi' +script: + - "npm run test-travis" +after_script: + - "npm install coveralls@2.11.x && cat coverage/lcov.info | coveralls" +matrix: + fast_finish: true +notifications: + irc: + channels: + - "irc.freenode.org#unshift" + on_success: change + on_failure: change diff --git a/platforms/android/assets/www/node_modules/ultron/LICENSE b/platforms/android/assets/www/node_modules/ultron/LICENSE new file mode 100644 index 0000000..6dc9316 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ultron/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/platforms/android/assets/www/node_modules/ultron/README.md b/platforms/android/assets/www/node_modules/ultron/README.md new file mode 100644 index 0000000..84fa3f2 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ultron/README.md @@ -0,0 +1,97 @@ +# Ultron + +[![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](http://img.shields.io/npm/v/ultron.svg?style=flat-square)](http://browsenpm.org/package/ultron)[![Build Status](http://img.shields.io/travis/unshiftio/ultron/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/ultron)[![Dependencies](https://img.shields.io/david/unshiftio/ultron.svg?style=flat-square)](https://david-dm.org/unshiftio/ultron)[![Coverage Status](http://img.shields.io/coveralls/unshiftio/ultron/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/ultron?branch=master)[![IRC channel](http://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](http://webchat.freenode.net/?channels=unshift) + +Ultron is a high-intelligence robot. It gathers intelligence so it can start +improving upon his rudimentary design. It will learn your event emitting +patterns and find ways to exterminate them. Allowing you to remove only the +event emitters that **you** assigned and not the ones that your users or +developers assigned. This can prevent race conditions, memory leaks and even file +descriptor leaks from ever happening as you won't remove clean up processes. + +## Installation + +The module is designed to be used in browsers using browserify and in Node.js. +You can install the module through the public npm registry by running the +following command in CLI: + +``` +npm install --save ultron +``` + +## Usage + +In all examples we assume that you've required the library as following: + +```js +'use strict'; + +var Ultron = require('ultron'); +``` + +Now that we've required the library we can construct our first `Ultron` instance. +The constructor requires one argument which should be the `EventEmitter` +instance that we need to operate upon. This can be the `EventEmitter` module +that ships with Node.js or `EventEmitter3` or anything else as long as it +follow the same API and internal structure as these 2. So with that in mind we +can create the instance: + +```js +// +// For the sake of this example we're going to construct an empty EventEmitter +// +var EventEmitter = require('events').EventEmitter; // or require('eventmitter3'); +var events = new EventEmitter(); + +var ultron = new Ultron(events); +``` + +You can now use the following API's from the Ultron instance: + +### Ultron.on + +Register a new event listener for the given event. It follows the exact same API +as `EventEmitter.on` but it will return itself instead of returning the +EventEmitter instance. If you are using EventEmitter3 it also supports the +context param: + +```js +ultron.on('event-name', handler, { custom: 'function context' }); +``` + +### Ultron.once + +Exactly the same as the [Ultron.on](#ultronon) but it only allows the execution +once. + +### Ultron.remove + +This is where all the magic happens and the safe removal starts. This function +accepts different argument styles: + +- No arguments, assume that all events need to be removed so it will work as + `removeAllListeners()` API. +- 1 argument, when it's a string it will be split on ` ` and `,` to create a + list of events that need to be cleared. +- Multiple arguments, we assume that they are all names of events that need to + be cleared. + +```js +ultron.remove('foo, bar baz'); // Removes foo, bar and baz. +ultron.remove('foo', 'bar', 'baz'); // Removes foo, bar and baz. +ultron.remove(); // Removes everything. +``` + +If you just want to remove a single event listener using a function reference +you can still use the EventEmitter's `removeListener(event, fn)` API: + +```js +function foo() {} + +ulton.on('foo', foo); +events.removeListener('foo', foo); +``` + +## License + +MIT diff --git a/platforms/android/assets/www/node_modules/ultron/index.js b/platforms/android/assets/www/node_modules/ultron/index.js new file mode 100644 index 0000000..af17ab7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ultron/index.js @@ -0,0 +1,129 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +/** + * An auto incrementing id which we can use to create "unique" Ultron instances + * so we can track the event emitters that are added through the Ultron + * interface. + * + * @type {Number} + * @private + */ +var id = 0; + +/** + * Ultron is high-intelligence robot. It gathers intelligence so it can start improving + * upon his rudimentary design. It will learn from your EventEmitting patterns + * and exterminate them. + * + * @constructor + * @param {EventEmitter} ee EventEmitter instance we need to wrap. + * @api public + */ +function Ultron(ee) { + if (!(this instanceof Ultron)) return new Ultron(ee); + + this.id = id++; + this.ee = ee; +} + +/** + * Register a new EventListener for the given event. + * + * @param {String} event Name of the event. + * @param {Functon} fn Callback function. + * @param {Mixed} context The context of the function. + * @returns {Ultron} + * @api public + */ +Ultron.prototype.on = function on(event, fn, context) { + fn.__ultron = this.id; + this.ee.on(event, fn, context); + + return this; +}; +/** + * Add an EventListener that's only called once. + * + * @param {String} event Name of the event. + * @param {Function} fn Callback function. + * @param {Mixed} context The context of the function. + * @returns {Ultron} + * @api public + */ +Ultron.prototype.once = function once(event, fn, context) { + fn.__ultron = this.id; + this.ee.once(event, fn, context); + + return this; +}; + +/** + * Remove the listeners we assigned for the given event. + * + * @returns {Ultron} + * @api public + */ +Ultron.prototype.remove = function remove() { + var args = arguments + , event; + + // + // When no event names are provided we assume that we need to clear all the + // events that were assigned through us. + // + if (args.length === 1 && 'string' === typeof args[0]) { + args = args[0].split(/[, ]+/); + } else if (!args.length) { + args = []; + + for (event in this.ee._events) { + if (has.call(this.ee._events, event)) args.push(event); + } + } + + for (var i = 0; i < args.length; i++) { + var listeners = this.ee.listeners(args[i]); + + for (var j = 0; j < listeners.length; j++) { + event = listeners[j]; + + // + // Once listeners have a `listener` property that stores the real listener + // in the EventEmitter that ships with Node.js. + // + if (event.listener) { + if (event.listener.__ultron !== this.id) continue; + delete event.listener.__ultron; + } else { + if (event.__ultron !== this.id) continue; + delete event.__ultron; + } + + this.ee.removeListener(args[i], event); + } + } + + return this; +}; + +/** + * Destroy the Ultron instance, remove all listeners and release all references. + * + * @returns {Boolean} + * @api public + */ +Ultron.prototype.destroy = function destroy() { + if (!this.ee) return false; + + this.remove(); + this.ee = null; + + return true; +}; + +// +// Expose the module. +// +module.exports = Ultron; diff --git a/platforms/android/assets/www/node_modules/ultron/package.json b/platforms/android/assets/www/node_modules/ultron/package.json new file mode 100644 index 0000000..28ad834 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ultron/package.json @@ -0,0 +1,100 @@ +{ + "_args": [ + [ + "ultron@1.0.x", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/ws" + ] + ], + "_from": "ultron@>=1.0.0 <1.1.0", + "_id": "ultron@1.0.2", + "_inCache": true, + "_installable": true, + "_location": "/ultron", + "_nodeVersion": "0.12.3", + "_npmUser": { + "email": "npm@3rd-Eden.com", + "name": "3rdeden" + }, + "_npmVersion": "2.9.1", + "_phantomChildren": {}, + "_requested": { + "name": "ultron", + "raw": "ultron@1.0.x", + "rawSpec": "1.0.x", + "scope": null, + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/ws" + ], + "_resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "_shasum": "ace116ab557cd197386a4e88f4685378c8b2e4fa", + "_shrinkwrap": null, + "_spec": "ultron@1.0.x", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/ws", + "author": { + "name": "Arnout Kazemier" + }, + "bugs": { + "url": "https://github.com/unshiftio/ultron/issues" + }, + "dependencies": {}, + "description": "Ultron is high-intelligence robot. It gathers intel so it can start improving upon his rudimentary design", + "devDependencies": { + "assume": "1.2.x", + "eventemitter3": "1.1.x", + "istanbul": "0.3.x", + "mocha": "2.2.x", + "pre-commit": "1.0.x" + }, + "directories": {}, + "dist": { + "shasum": "ace116ab557cd197386a4e88f4685378c8b2e4fa", + "tarball": "http://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz" + }, + "gitHead": "a10482ae98a09120821545456c90c6d60d540f7c", + "homepage": "https://github.com/unshiftio/ultron", + "keywords": [ + "Ultron", + "robot", + "gather", + "intelligence", + "event", + "events", + "eventemitter", + "emitter", + "cleanup" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "email": "npm@unshift.io", + "name": "unshift" + }, + { + "email": "info@3rd-Eden.com", + "name": "v1" + }, + { + "email": "npm@3rd-Eden.com", + "name": "3rdeden" + } + ], + "name": "ultron", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/unshiftio/ultron.git" + }, + "scripts": { + "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100", + "coverage": "istanbul cover ./node_modules/.bin/_mocha -- test.js", + "test": "mocha test.js", + "test-travis": "istanbul cover node_modules/.bin/_mocha --report lcovonly -- test.js", + "watch": "mocha --watch test.js" + }, + "version": "1.0.2" +} diff --git a/platforms/android/assets/www/node_modules/ultron/test.js b/platforms/android/assets/www/node_modules/ultron/test.js new file mode 100644 index 0000000..1fd4f1b --- /dev/null +++ b/platforms/android/assets/www/node_modules/ultron/test.js @@ -0,0 +1,327 @@ +/* istanbul ignore next */ +describe('Ultron', function () { + 'use strict'; + + var EventEmitter = require('eventemitter3') + , EE = require('events').EventEmitter + , assume = require('assume') + , Ultron = require('./') + , ultron + , ee; + + beforeEach(function () { + ee = new EventEmitter(); + ultron = new Ultron(ee); + }); + + afterEach(function () { + ultron.destroy(); + ee.removeAllListeners(); + }); + + it('is exposed as a function', function () { + assume(Ultron).is.a('function'); + }); + + it('can be initialized without the new keyword', function () { + assume(Ultron(ee)).is.instanceOf(Ultron); + }); + + it('assigns a unique id to every instance', function () { + for (var i = 0; i < 100; i++) { + assume(ultron.id).does.not.equal((new Ultron()).id); + } + }); + + it('allows removal through the event emitter', function () { + function foo() {} + function bar() {} + + ultron.on('foo', foo); + ultron.once('foo', bar); + + assume(foo.__ultron).equals(ultron.id); + assume(bar.__ultron).equals(ultron.id); + assume(ee.listeners('foo').length).equals(2); + + ee.removeListener('foo', foo); + assume(ee.listeners('foo').length).equals(1); + + ee.removeListener('foo', bar); + assume(ee.listeners('foo').length).equals(0); + }); + + describe('#on', function () { + it('assigns a listener', function () { + assume(ee.listeners('foo').length).equals(0); + + function foo() {} + + ultron.on('foo', foo); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('tags the assigned function', function () { + assume(ee.listeners('foo').length).equals(0); + + ultron.on('foo', function () {}); + assume(ee.listeners('foo')[0].__ultron).equals(ultron.id); + }); + + it('also passes in the context', function (next) { + var context = 1313; + + ultron.on('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + assume(this).equals(context); + + next(); + }, context); + + ee.emit('foo', 'a', 'b', 'c'); + }); + + it('works with regular eventemitters as well', function (next) { + var ee = new EE() + , ultron = new Ultron(ee); + + ultron.on('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + next(); + }); + + ee.emit('foo', 'a', 'b', 'c'); + }); + }); + + describe('#once', function () { + it('assigns a listener', function () { + assume(ee.listeners('foo').length).equals(0); + + function foo() {} + ultron.once('foo', foo); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('tags the assigned function', function () { + assume(ee.listeners('foo').length).equals(0); + + ultron.once('foo', function () {}); + assume(ee.listeners('foo')[0].__ultron).equals(ultron.id); + }); + + it('also passes in the context', function (next) { + var context = 1313; + + ultron.once('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + assume(this).equals(context); + + next(); + }, context); + + ee.emit('foo', 'a', 'b', 'c'); + ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute + }); + + it('works with regular eventemitters as well', function (next) { + var ee = new EE() + , ultron = new Ultron(ee); + + ultron.once('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + next(); + }); + + ee.emit('foo', 'a', 'b', 'c'); + ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute + }); + }); + + describe('#remove', function () { + it('removes only our assigned `on` listeners', function () { + function foo() {} + function bar() {} + + ee.on('foo', foo); + ultron.on('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('removes our private __ultron references', function () { + function once() {} + function on() {} + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.on('foo', on); + ultron.once('bar', once); + + assume('__ultron' in once).is.true(); + assume('__ultron' in on).is.true(); + + ultron.remove('foo, bar'); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.destroy(); + + ee = new EE(); + ultron = new Ultron(ee); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.on('foo', on); + ultron.once('bar', once); + + assume('__ultron' in once).is.true(); + assume('__ultron' in on).is.true(); + + ultron.remove('foo, bar'); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + }); + + it('removes only our assigned `once` listeners', function () { + function foo() {} + function bar() {} + + ee.once('foo', foo); + ultron.once('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('removes only our assigned `once` listeners from regular EE', function () { + var ee = new EE() + , ultron = new Ultron(ee); + + function foo() {} + function bar() {} + + ee.once('foo', foo); + ultron.once('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0].listener).equals(foo); + }); + + it('removes all assigned events if called without args', function () { + function foo() {} + function bar() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + + ultron.remove(); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + }); + + it('removes multiple listeners based on args', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.remove('foo', 'bar'); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(1); + }); + + it('removes multiple listeners if first arg is seperated string', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.remove('foo, bar'); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(1); + }); + }); + + describe('#destroy', function () { + it('removes all listeners', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.destroy(); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(0); + }); + + it('removes the .ee reference', function () { + assume(ultron.ee).equals(ee); + ultron.destroy(); + assume(ultron.ee).equals(null); + }); + + it('returns booleans for state indication', function () { + assume(ultron.destroy()).is.true(); + assume(ultron.destroy()).is.false(); + assume(ultron.destroy()).is.false(); + assume(ultron.destroy()).is.false(); + }); + }); +}); diff --git a/platforms/android/assets/www/node_modules/wrappy/LICENSE b/platforms/android/assets/www/node_modules/wrappy/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/wrappy/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/wrappy/README.md b/platforms/android/assets/www/node_modules/wrappy/README.md new file mode 100644 index 0000000..98eab25 --- /dev/null +++ b/platforms/android/assets/www/node_modules/wrappy/README.md @@ -0,0 +1,36 @@ +# wrappy + +Callback wrapping utility + +## USAGE + +```javascript +var wrappy = require("wrappy") + +// var wrapper = wrappy(wrapperFunction) + +// make sure a cb is called only once +// See also: http://npm.im/once for this specific use case +var once = wrappy(function (cb) { + var called = false + return function () { + if (called) return + called = true + return cb.apply(this, arguments) + } +}) + +function printBoo () { + console.log('boo') +} +// has some rando property +printBoo.iAmBooPrinter = true + +var onlyPrintOnce = once(printBoo) + +onlyPrintOnce() // prints 'boo' +onlyPrintOnce() // does nothing + +// random property is retained! +assert.equal(onlyPrintOnce.iAmBooPrinter, true) +``` diff --git a/platforms/android/assets/www/node_modules/wrappy/package.json b/platforms/android/assets/www/node_modules/wrappy/package.json new file mode 100644 index 0000000..7069c85 --- /dev/null +++ b/platforms/android/assets/www/node_modules/wrappy/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + "wrappy@1", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/inflight" + ] + ], + "_from": "wrappy@>=1.0.0 <2.0.0", + "_id": "wrappy@1.0.1", + "_inCache": true, + "_installable": true, + "_location": "/wrappy", + "_nodeVersion": "0.10.31", + "_npmUser": { + "email": "i@izs.me", + "name": "isaacs" + }, + "_npmVersion": "2.0.0", + "_phantomChildren": {}, + "_requested": { + "name": "wrappy", + "raw": "wrappy@1", + "rawSpec": "1", + "scope": null, + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/inflight", + "/once" + ], + "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz", + "_shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739", + "_shrinkwrap": null, + "_spec": "wrappy@1", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/inflight", + "author": { + "email": "i@izs.me", + "name": "Isaac Z. Schlueter", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/npm/wrappy/issues" + }, + "dependencies": {}, + "description": "Callback wrapping utility", + "devDependencies": { + "tap": "^0.4.12" + }, + "directories": { + "test": "test" + }, + "dist": { + "shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739", + "tarball": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + }, + "gitHead": "006a8cbac6b99988315834c207896eed71fd069a", + "homepage": "https://github.com/npm/wrappy", + "license": "ISC", + "main": "wrappy.js", + "maintainers": [ + { + "email": "i@izs.me", + "name": "isaacs" + } + ], + "name": "wrappy", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/wrappy.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "1.0.1" +} diff --git a/platforms/android/assets/www/node_modules/wrappy/test/basic.js b/platforms/android/assets/www/node_modules/wrappy/test/basic.js new file mode 100644 index 0000000..5ed0fcd --- /dev/null +++ b/platforms/android/assets/www/node_modules/wrappy/test/basic.js @@ -0,0 +1,51 @@ +var test = require('tap').test +var wrappy = require('../wrappy.js') + +test('basic', function (t) { + function onceifier (cb) { + var called = false + return function () { + if (called) return + called = true + return cb.apply(this, arguments) + } + } + onceifier.iAmOnce = {} + var once = wrappy(onceifier) + t.equal(once.iAmOnce, onceifier.iAmOnce) + + var called = 0 + function boo () { + t.equal(called, 0) + called++ + } + // has some rando property + boo.iAmBoo = true + + var onlyPrintOnce = once(boo) + + onlyPrintOnce() // prints 'boo' + onlyPrintOnce() // does nothing + t.equal(called, 1) + + // random property is retained! + t.equal(onlyPrintOnce.iAmBoo, true) + + var logs = [] + var logwrap = wrappy(function (msg, cb) { + logs.push(msg + ' wrapping cb') + return function () { + logs.push(msg + ' before cb') + var ret = cb.apply(this, arguments) + logs.push(msg + ' after cb') + } + }) + + var c = logwrap('foo', function () { + t.same(logs, [ 'foo wrapping cb', 'foo before cb' ]) + }) + c() + t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ]) + + t.end() +}) diff --git a/platforms/android/assets/www/node_modules/wrappy/wrappy.js b/platforms/android/assets/www/node_modules/wrappy/wrappy.js new file mode 100644 index 0000000..bb7e7d6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/wrappy/wrappy.js @@ -0,0 +1,33 @@ +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} diff --git a/platforms/android/assets/www/node_modules/ws/.npmignore b/platforms/android/assets/www/node_modules/ws/.npmignore new file mode 100644 index 0000000..1eba800 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/.npmignore @@ -0,0 +1,11 @@ +npm-debug.log +node_modules +.*.swp +.lock-* +build + +bench +doc +examples +test + diff --git a/platforms/android/assets/www/node_modules/ws/.travis.yml b/platforms/android/assets/www/node_modules/ws/.travis.yml new file mode 100644 index 0000000..5002b49 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/.travis.yml @@ -0,0 +1,15 @@ +language: node_js +sudo: false +node_js: + - "5" + - "4" + - "0.12" +addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - gcc-4.9 + - g++-4.9 +before_install: + - export CC="gcc-4.9" CXX="g++-4.9" diff --git a/platforms/android/assets/www/node_modules/ws/Makefile b/platforms/android/assets/www/node_modules/ws/Makefile new file mode 100644 index 0000000..00f19fa --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/Makefile @@ -0,0 +1,40 @@ +ALL_TESTS = $(shell find test/ -name '*.test.js') +ALL_INTEGRATION = $(shell find test/ -name '*.integration.js') + +all: + node-gyp configure build + +clean: + node-gyp clean + +run-tests: + @./node_modules/.bin/mocha \ + -t 5000 \ + -s 2400 \ + $(TESTFLAGS) \ + $(TESTS) + +run-integrationtests: + @./node_modules/.bin/mocha \ + -t 5000 \ + -s 6000 \ + $(TESTFLAGS) \ + $(TESTS) + +test: + @$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_PATH=lib TESTS="$(ALL_TESTS)" run-tests + +integrationtest: + @$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_PATH=lib TESTS="$(ALL_INTEGRATION)" run-integrationtests + +benchmark: + @node bench/sender.benchmark.js + @node bench/parser.benchmark.js + +autobahn: + @NODE_PATH=lib node test/autobahn.js + +autobahn-server: + @NODE_PATH=lib node test/autobahn-server.js + +.PHONY: test diff --git a/platforms/android/assets/www/node_modules/ws/README.md b/platforms/android/assets/www/node_modules/ws/README.md new file mode 100644 index 0000000..9be2e51 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/README.md @@ -0,0 +1,242 @@ +# ws: a node.js websocket library + +[![Build Status](https://travis-ci.org/websockets/ws.svg?branch=master)](https://travis-ci.org/websockets/ws) + +`ws` is a simple to use WebSocket implementation, up-to-date against RFC-6455, +and [probably the fastest WebSocket library for node.js][archive]. + +Passes the quite extensive Autobahn test suite. See http://websockets.github.com/ws +for the full reports. + +## Protocol support + +* **Hixie draft 76** (Old and deprecated, but still in use by Safari and Opera. + Added to ws version 0.4.2, but server only. Can be disabled by setting the + `disableHixie` option to true.) +* **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) +* **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`) + +### Installing + +``` +npm install --save ws +``` + +### Opt-in for performance + +There are 2 optional modules that can be installed along side with the `ws` +module. These modules are binary addons which improve certain operations, but as +they are binary addons they require compilation which can fail if no c++ +compiler is installed on the host system. + +- `npm install --save bufferutil`: Improves internal buffer operations which + allows for faster processing of masked WebSocket frames and general buffer + operations. +- `npm install --save utf-8-validate`: The specification requires validation of + invalid UTF-8 chars, some of these validations could not be done in JavaScript + hence the need for a binary addon. In most cases you will already be + validating the input that you receive for security purposes leading to double + validation. But if you want to be 100% spec conform and fast validation of UTF-8 + then this module is a must. + +### Sending and receiving text data + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://www.host.com/path'); + +ws.on('open', function open() { + ws.send('something'); +}); + +ws.on('message', function(data, flags) { + // flags.binary will be set if a binary data is received. + // flags.masked will be set if the data was masked. +}); +``` + +### Sending binary data + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://www.host.com/path'); + +ws.on('open', function open() { + var array = new Float32Array(5); + + for (var i = 0; i < array.length; ++i) { + array[i] = i / 2; + } + + ws.send(array, { binary: true, mask: true }); +}); +``` + +Setting `mask`, as done for the send options above, will cause the data to be +masked according to the WebSocket protocol. The same option applies for text +data. + +### Server example + +```js +var WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('message', function incoming(message) { + console.log('received: %s', message); + }); + + ws.send('something'); +}); +``` + +### ExpressJS example + +```js +var server = require('http').createServer() + , url = require('url') + , WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ server: server }) + , express = require('express') + , app = express() + , port = 4080; + +app.use(function (req, res) { + res.send({ msg: "hello" }); +}); + +wss.on('connection', function connection(ws) { + var location = url.parse(ws.upgradeReq.url, true); + // you might use location.query.access_token to authenticate or share sessions + // or ws.upgradeReq.headers.cookie (see http://stackoverflow.com/a/16395220/151312) + + ws.on('message', function incoming(message) { + console.log('received: %s', message); + }); + + ws.send('something'); +}); + +server.on('request', app); +server.listen(port, function () { console.log('Listening on ' + server.address().port) }); +``` + +### Server sending broadcast data + +```js +var WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ port: 8080 }); + +wss.broadcast = function broadcast(data) { + wss.clients.forEach(function each(client) { + client.send(data); + }); +}; +``` + +### Error handling best practices + +```js +// If the WebSocket is closed before the following send is attempted +ws.send('something'); + +// Errors (both immediate and async write errors) can be detected in an optional +// callback. The callback is also the only way of being notified that data has +// actually been sent. +ws.send('something', function ack(error) { + // if error is not defined, the send has been completed, + // otherwise the error object will indicate what failed. +}); + +// Immediate errors can also be handled with try/catch-blocks, but **note** that +// since sends are inherently asynchronous, socket write failures will *not* be +// captured when this technique is used. +try { ws.send('something'); } +catch (e) { /* handle error */ } +``` + +### echo.websocket.org demo + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://echo.websocket.org/', { + protocolVersion: 8, + origin: 'http://websocket.org' +}); + +ws.on('open', function open() { + console.log('connected'); + ws.send(Date.now().toString(), {mask: true}); +}); + +ws.on('close', function close() { + console.log('disconnected'); +}); + +ws.on('message', function message(data, flags) { + console.log('Roundtrip time: ' + (Date.now() - parseInt(data)) + 'ms', flags); + + setTimeout(function timeout() { + ws.send(Date.now().toString(), {mask: true}); + }, 500); +}); +``` + +### Browserify users +When including ws via a browserify bundle, ws returns global.WebSocket which has slightly different API. +You should use the standard WebSockets API instead. + +https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_client_applications#Availability_of_WebSockets + + +### Other examples + +For a full example with a browser client communicating with a ws server, see the +examples folder. + +Note that the usage together with Express 3.0 is quite different from Express +2.x. The difference is expressed in the two different serverstats-examples. + +Otherwise, see the test cases. + +### Running the tests + +``` +make test +``` + +## API Docs + +See [`/doc/ws.md`](https://github.com/websockets/ws/blob/master/doc/ws.md) for Node.js-like docs for the ws classes. + +## Changelog + +We're using the GitHub [`releases`](https://github.com/websockets/ws/releases) for changelog entries. + +## License + +(The MIT License) + +Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +[archive]: http://web.archive.org/web/20130314230536/http://hobbycoding.posterous.com/the-fastest-websocket-module-for-nodejs diff --git a/platforms/android/assets/www/node_modules/ws/index.js b/platforms/android/assets/www/node_modules/ws/index.js new file mode 100644 index 0000000..a7e8644 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/index.js @@ -0,0 +1,49 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var WS = module.exports = require('./lib/WebSocket'); + +WS.Server = require('./lib/WebSocketServer'); +WS.Sender = require('./lib/Sender'); +WS.Receiver = require('./lib/Receiver'); + +/** + * Create a new WebSocket server. + * + * @param {Object} options Server options + * @param {Function} fn Optional connection listener. + * @returns {WS.Server} + * @api public + */ +WS.createServer = function createServer(options, fn) { + var server = new WS.Server(options); + + if (typeof fn === 'function') { + server.on('connection', fn); + } + + return server; +}; + +/** + * Create a new WebSocket connection. + * + * @param {String} address The URL/address we need to connect to. + * @param {Function} fn Open listener. + * @returns {WS} + * @api public + */ +WS.connect = WS.createConnection = function connect(address, fn) { + var client = new WS(address); + + if (typeof fn === 'function') { + client.on('open', fn); + } + + return client; +}; diff --git a/platforms/android/assets/www/node_modules/ws/lib/BufferPool.js b/platforms/android/assets/www/node_modules/ws/lib/BufferPool.js new file mode 100644 index 0000000..8ee5990 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/BufferPool.js @@ -0,0 +1,63 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util'); + +function BufferPool(initialSize, growStrategy, shrinkStrategy) { + if (this instanceof BufferPool === false) { + throw new TypeError("Classes can't be function-called"); + } + + if (typeof initialSize === 'function') { + shrinkStrategy = growStrategy; + growStrategy = initialSize; + initialSize = 0; + } + else if (typeof initialSize === 'undefined') { + initialSize = 0; + } + this._growStrategy = (growStrategy || function(db, size) { + return db.used + size; + }).bind(null, this); + this._shrinkStrategy = (shrinkStrategy || function(db) { + return initialSize; + }).bind(null, this); + this._buffer = initialSize ? new Buffer(initialSize) : null; + this._offset = 0; + this._used = 0; + this._changeFactor = 0; + this.__defineGetter__('size', function(){ + return this._buffer == null ? 0 : this._buffer.length; + }); + this.__defineGetter__('used', function(){ + return this._used; + }); +} + +BufferPool.prototype.get = function(length) { + if (this._buffer == null || this._offset + length > this._buffer.length) { + var newBuf = new Buffer(this._growStrategy(length)); + this._buffer = newBuf; + this._offset = 0; + } + this._used += length; + var buf = this._buffer.slice(this._offset, this._offset + length); + this._offset += length; + return buf; +} + +BufferPool.prototype.reset = function(forceNewBuffer) { + var len = this._shrinkStrategy(); + if (len < this.size) this._changeFactor -= 1; + if (forceNewBuffer || this._changeFactor < -2) { + this._changeFactor = 0; + this._buffer = len ? new Buffer(len) : null; + } + this._offset = 0; + this._used = 0; +} + +module.exports = BufferPool; diff --git a/platforms/android/assets/www/node_modules/ws/lib/BufferUtil.fallback.js b/platforms/android/assets/www/node_modules/ws/lib/BufferUtil.fallback.js new file mode 100644 index 0000000..508542c --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/BufferUtil.fallback.js @@ -0,0 +1,47 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +module.exports.BufferUtil = { + merge: function(mergedBuffer, buffers) { + var offset = 0; + for (var i = 0, l = buffers.length; i < l; ++i) { + var buf = buffers[i]; + buf.copy(mergedBuffer, offset); + offset += buf.length; + } + }, + mask: function(source, mask, output, offset, length) { + var maskNum = mask.readUInt32LE(0, true); + var i = 0; + for (; i < length - 3; i += 4) { + var num = maskNum ^ source.readUInt32LE(i, true); + if (num < 0) num = 4294967296 + num; + output.writeUInt32LE(num, offset + i, true); + } + switch (length % 4) { + case 3: output[offset + i + 2] = source[i + 2] ^ mask[2]; + case 2: output[offset + i + 1] = source[i + 1] ^ mask[1]; + case 1: output[offset + i] = source[i] ^ mask[0]; + case 0:; + } + }, + unmask: function(data, mask) { + var maskNum = mask.readUInt32LE(0, true); + var length = data.length; + var i = 0; + for (; i < length - 3; i += 4) { + var num = maskNum ^ data.readUInt32LE(i, true); + if (num < 0) num = 4294967296 + num; + data.writeUInt32LE(num, i, true); + } + switch (length % 4) { + case 3: data[i + 2] = data[i + 2] ^ mask[2]; + case 2: data[i + 1] = data[i + 1] ^ mask[1]; + case 1: data[i] = data[i] ^ mask[0]; + case 0:; + } + } +} diff --git a/platforms/android/assets/www/node_modules/ws/lib/BufferUtil.js b/platforms/android/assets/www/node_modules/ws/lib/BufferUtil.js new file mode 100644 index 0000000..18c6998 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/BufferUtil.js @@ -0,0 +1,13 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +try { + module.exports = require('bufferutil'); +} catch (e) { + module.exports = require('./BufferUtil.fallback'); +} diff --git a/platforms/android/assets/www/node_modules/ws/lib/ErrorCodes.js b/platforms/android/assets/www/node_modules/ws/lib/ErrorCodes.js new file mode 100644 index 0000000..55ebd52 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/ErrorCodes.js @@ -0,0 +1,24 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +module.exports = { + isValidErrorCode: function(code) { + return (code >= 1000 && code <= 1011 && code != 1004 && code != 1005 && code != 1006) || + (code >= 3000 && code <= 4999); + }, + 1000: 'normal', + 1001: 'going away', + 1002: 'protocol error', + 1003: 'unsupported data', + 1004: 'reserved', + 1005: 'reserved for extensions', + 1006: 'reserved for extensions', + 1007: 'inconsistent or invalid data', + 1008: 'policy violation', + 1009: 'message too big', + 1010: 'extension handshake missing', + 1011: 'an unexpected condition prevented the request from being fulfilled', +}; \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/ws/lib/Extensions.js b/platforms/android/assets/www/node_modules/ws/lib/Extensions.js new file mode 100644 index 0000000..a465ace --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/Extensions.js @@ -0,0 +1,70 @@ + +var util = require('util'); + +/** + * Module exports. + */ + +exports.parse = parse; +exports.format = format; + +/** + * Parse extensions header value + */ + +function parse(value) { + value = value || ''; + + var extensions = {}; + + value.split(',').forEach(function(v) { + var params = v.split(';'); + var token = params.shift().trim(); + var paramsList = extensions[token] = extensions[token] || []; + var parsedParams = {}; + + params.forEach(function(param) { + var parts = param.trim().split('='); + var key = parts[0]; + var value = parts[1]; + if (typeof value === 'undefined') { + value = true; + } else { + // unquote value + if (value[0] === '"') { + value = value.slice(1); + } + if (value[value.length - 1] === '"') { + value = value.slice(0, value.length - 1); + } + } + (parsedParams[key] = parsedParams[key] || []).push(value); + }); + + paramsList.push(parsedParams); + }); + + return extensions; +} + +/** + * Format extensions header value + */ + +function format(value) { + return Object.keys(value).map(function(token) { + var paramsList = value[token]; + if (!util.isArray(paramsList)) { + paramsList = [paramsList]; + } + return paramsList.map(function(params) { + return [token].concat(Object.keys(params).map(function(k) { + var p = params[k]; + if (!util.isArray(p)) p = [p]; + return p.map(function(v) { + return v === true ? k : k + '=' + v; + }).join('; '); + })).join('; '); + }).join(', '); + }).join(', '); +} diff --git a/platforms/android/assets/www/node_modules/ws/lib/PerMessageDeflate.js b/platforms/android/assets/www/node_modules/ws/lib/PerMessageDeflate.js new file mode 100644 index 0000000..5324bd8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/PerMessageDeflate.js @@ -0,0 +1,325 @@ + +var zlib = require('zlib'); + +var AVAILABLE_WINDOW_BITS = [8, 9, 10, 11, 12, 13, 14, 15]; +var DEFAULT_WINDOW_BITS = 15; +var DEFAULT_MEM_LEVEL = 8; + +PerMessageDeflate.extensionName = 'permessage-deflate'; + +/** + * Per-message Compression Extensions implementation + */ + +function PerMessageDeflate(options, isServer) { + if (this instanceof PerMessageDeflate === false) { + throw new TypeError("Classes can't be function-called"); + } + + this._options = options || {}; + this._isServer = !!isServer; + this._inflate = null; + this._deflate = null; + this.params = null; +} + +/** + * Create extension parameters offer + * + * @api public + */ + +PerMessageDeflate.prototype.offer = function() { + var params = {}; + if (this._options.serverNoContextTakeover) { + params.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + params.client_no_context_takeover = true; + } + if (this._options.serverMaxWindowBits) { + params.server_max_window_bits = this._options.serverMaxWindowBits; + } + if (this._options.clientMaxWindowBits) { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits == null) { + params.client_max_window_bits = true; + } + return params; +}; + +/** + * Accept extension offer + * + * @api public + */ + +PerMessageDeflate.prototype.accept = function(paramsList) { + paramsList = this.normalizeParams(paramsList); + + var params; + if (this._isServer) { + params = this.acceptAsServer(paramsList); + } else { + params = this.acceptAsClient(paramsList); + } + + this.params = params; + return params; +}; + +/** + * Releases all resources used by the extension + * + * @api public + */ + +PerMessageDeflate.prototype.cleanup = function() { + if (this._inflate) { + if (this._inflate.writeInProgress) { + this._inflate.pendingClose = true; + } else { + if (this._inflate.close) this._inflate.close(); + this._inflate = null; + } + } + if (this._deflate) { + if (this._deflate.writeInProgress) { + this._deflate.pendingClose = true; + } else { + if (this._deflate.close) this._deflate.close(); + this._deflate = null; + } + } +}; + +/** + * Accept extension offer from client + * + * @api private + */ + +PerMessageDeflate.prototype.acceptAsServer = function(paramsList) { + var accepted = {}; + var result = paramsList.some(function(params) { + accepted = {}; + if (this._options.serverNoContextTakeover === false && params.server_no_context_takeover) { + return; + } + if (this._options.serverMaxWindowBits === false && params.server_max_window_bits) { + return; + } + if (typeof this._options.serverMaxWindowBits === 'number' && + typeof params.server_max_window_bits === 'number' && + this._options.serverMaxWindowBits > params.server_max_window_bits) { + return; + } + if (typeof this._options.clientMaxWindowBits === 'number' && !params.client_max_window_bits) { + return; + } + + if (this._options.serverNoContextTakeover || params.server_no_context_takeover) { + accepted.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + accepted.client_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover !== false && params.client_no_context_takeover) { + accepted.client_no_context_takeover = true; + } + if (typeof this._options.serverMaxWindowBits === 'number') { + accepted.server_max_window_bits = this._options.serverMaxWindowBits; + } else if (typeof params.server_max_window_bits === 'number') { + accepted.server_max_window_bits = params.server_max_window_bits; + } + if (typeof this._options.clientMaxWindowBits === 'number') { + accepted.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits !== false && typeof params.client_max_window_bits === 'number') { + accepted.client_max_window_bits = params.client_max_window_bits; + } + return true; + }, this); + + if (!result) { + throw new Error('Doesn\'t support the offered configuration'); + } + + return accepted; +}; + +/** + * Accept extension response from server + * + * @api privaye + */ + +PerMessageDeflate.prototype.acceptAsClient = function(paramsList) { + var params = paramsList[0]; + if (this._options.clientNoContextTakeover != null) { + if (this._options.clientNoContextTakeover === false && params.client_no_context_takeover) { + throw new Error('Invalid value for "client_no_context_takeover"'); + } + } + if (this._options.clientMaxWindowBits != null) { + if (this._options.clientMaxWindowBits === false && params.client_max_window_bits) { + throw new Error('Invalid value for "client_max_window_bits"'); + } + if (typeof this._options.clientMaxWindowBits === 'number' && + (!params.client_max_window_bits || params.client_max_window_bits > this._options.clientMaxWindowBits)) { + throw new Error('Invalid value for "client_max_window_bits"'); + } + } + return params; +}; + +/** + * Normalize extensions parameters + * + * @api private + */ + +PerMessageDeflate.prototype.normalizeParams = function(paramsList) { + return paramsList.map(function(params) { + Object.keys(params).forEach(function(key) { + var value = params[key]; + if (value.length > 1) { + throw new Error('Multiple extension parameters for ' + key); + } + + value = value[0]; + + switch (key) { + case 'server_no_context_takeover': + case 'client_no_context_takeover': + if (value !== true) { + throw new Error('invalid extension parameter value for ' + key + ' (' + value + ')'); + } + params[key] = true; + break; + case 'server_max_window_bits': + case 'client_max_window_bits': + if (typeof value === 'string') { + value = parseInt(value, 10); + if (!~AVAILABLE_WINDOW_BITS.indexOf(value)) { + throw new Error('invalid extension parameter value for ' + key + ' (' + value + ')'); + } + } + if (!this._isServer && value === true) { + throw new Error('Missing extension parameter value for ' + key); + } + params[key] = value; + break; + default: + throw new Error('Not defined extension parameter (' + key + ')'); + } + }, this); + return params; + }, this); +}; + +/** + * Decompress message + * + * @api public + */ + +PerMessageDeflate.prototype.decompress = function (data, fin, callback) { + var endpoint = this._isServer ? 'client' : 'server'; + + if (!this._inflate) { + var maxWindowBits = this.params[endpoint + '_max_window_bits']; + this._inflate = zlib.createInflateRaw({ + windowBits: 'number' === typeof maxWindowBits ? maxWindowBits : DEFAULT_WINDOW_BITS + }); + } + this._inflate.writeInProgress = true; + + var self = this; + var buffers = []; + + this._inflate.on('error', onError).on('data', onData); + this._inflate.write(data); + if (fin) { + this._inflate.write(new Buffer([0x00, 0x00, 0xff, 0xff])); + } + this._inflate.flush(function() { + cleanup(); + callback(null, Buffer.concat(buffers)); + }); + + function onError(err) { + cleanup(); + callback(err); + } + + function onData(data) { + buffers.push(data); + } + + function cleanup() { + if (!self._inflate) return; + self._inflate.removeListener('error', onError); + self._inflate.removeListener('data', onData); + self._inflate.writeInProgress = false; + if ((fin && self.params[endpoint + '_no_context_takeover']) || self._inflate.pendingClose) { + if (self._inflate.close) self._inflate.close(); + self._inflate = null; + } + } +}; + +/** + * Compress message + * + * @api public + */ + +PerMessageDeflate.prototype.compress = function (data, fin, callback) { + var endpoint = this._isServer ? 'server' : 'client'; + + if (!this._deflate) { + var maxWindowBits = this.params[endpoint + '_max_window_bits']; + this._deflate = zlib.createDeflateRaw({ + flush: zlib.Z_SYNC_FLUSH, + windowBits: 'number' === typeof maxWindowBits ? maxWindowBits : DEFAULT_WINDOW_BITS, + memLevel: this._options.memLevel || DEFAULT_MEM_LEVEL + }); + } + this._deflate.writeInProgress = true; + + var self = this; + var buffers = []; + + this._deflate.on('error', onError).on('data', onData); + this._deflate.write(data); + this._deflate.flush(function() { + cleanup(); + var data = Buffer.concat(buffers); + if (fin) { + data = data.slice(0, data.length - 4); + } + callback(null, data); + }); + + function onError(err) { + cleanup(); + callback(err); + } + + function onData(data) { + buffers.push(data); + } + + function cleanup() { + if (!self._deflate) return; + self._deflate.removeListener('error', onError); + self._deflate.removeListener('data', onData); + self._deflate.writeInProgress = false; + if ((fin && self.params[endpoint + '_no_context_takeover']) || self._deflate.pendingClose) { + if (self._deflate.close) self._deflate.close(); + self._deflate = null; + } + } +}; + +module.exports = PerMessageDeflate; diff --git a/platforms/android/assets/www/node_modules/ws/lib/Receiver.hixie.js b/platforms/android/assets/www/node_modules/ws/lib/Receiver.hixie.js new file mode 100644 index 0000000..66bc561 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/Receiver.hixie.js @@ -0,0 +1,184 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util'); + +/** + * State constants + */ + +var EMPTY = 0 + , BODY = 1; +var BINARYLENGTH = 2 + , BINARYBODY = 3; + +/** + * Hixie Receiver implementation + */ + +function Receiver () { + if (this instanceof Receiver === false) { + throw new TypeError("Classes can't be function-called"); + } + + this.state = EMPTY; + this.buffers = []; + this.messageEnd = -1; + this.spanLength = 0; + this.dead = false; + + this.onerror = function() {}; + this.ontext = function() {}; + this.onbinary = function() {}; + this.onclose = function() {}; + this.onping = function() {}; + this.onpong = function() {}; +} + +module.exports = Receiver; + +/** + * Add new data to the parser. + * + * @api public + */ + +Receiver.prototype.add = function(data) { + var self = this; + function doAdd() { + if (self.state === EMPTY) { + if (data.length == 2 && data[0] == 0xFF && data[1] == 0x00) { + self.reset(); + self.onclose(); + return; + } + if (data[0] === 0x80) { + self.messageEnd = 0; + self.state = BINARYLENGTH; + data = data.slice(1); + } else { + + if (data[0] !== 0x00) { + self.error('payload must start with 0x00 byte', true); + return; + } + data = data.slice(1); + self.state = BODY; + + } + } + if (self.state === BINARYLENGTH) { + var i = 0; + while ((i < data.length) && (data[i] & 0x80)) { + self.messageEnd = 128 * self.messageEnd + (data[i] & 0x7f); + ++i; + } + if (i < data.length) { + self.messageEnd = 128 * self.messageEnd + (data[i] & 0x7f); + self.state = BINARYBODY; + ++i; + } + if (i > 0) + data = data.slice(i); + } + if (self.state === BINARYBODY) { + var dataleft = self.messageEnd - self.spanLength; + if (data.length >= dataleft) { + // consume the whole buffer to finish the frame + self.buffers.push(data); + self.spanLength += dataleft; + self.messageEnd = dataleft; + return self.parse(); + } + // frame's not done even if we consume it all + self.buffers.push(data); + self.spanLength += data.length; + return; + } + self.buffers.push(data); + if ((self.messageEnd = bufferIndex(data, 0xFF)) != -1) { + self.spanLength += self.messageEnd; + return self.parse(); + } + else self.spanLength += data.length; + } + while(data) data = doAdd(); +}; + +/** + * Releases all resources used by the receiver. + * + * @api public + */ + +Receiver.prototype.cleanup = function() { + this.dead = true; + this.state = EMPTY; + this.buffers = []; +}; + +/** + * Process buffered data. + * + * @api public + */ + +Receiver.prototype.parse = function() { + var output = new Buffer(this.spanLength); + var outputIndex = 0; + for (var bi = 0, bl = this.buffers.length; bi < bl - 1; ++bi) { + var buffer = this.buffers[bi]; + buffer.copy(output, outputIndex); + outputIndex += buffer.length; + } + var lastBuffer = this.buffers[this.buffers.length - 1]; + if (this.messageEnd > 0) lastBuffer.copy(output, outputIndex, 0, this.messageEnd); + if (this.state !== BODY) --this.messageEnd; + var tail = null; + if (this.messageEnd < lastBuffer.length - 1) { + tail = lastBuffer.slice(this.messageEnd + 1); + } + this.reset(); + this.ontext(output.toString('utf8')); + return tail; +}; + +/** + * Handles an error + * + * @api private + */ + +Receiver.prototype.error = function (reason, terminate) { + this.reset(); + this.onerror(reason, terminate); + return this; +}; + +/** + * Reset parser state + * + * @api private + */ + +Receiver.prototype.reset = function (reason) { + if (this.dead) return; + this.state = EMPTY; + this.buffers = []; + this.messageEnd = -1; + this.spanLength = 0; +}; + +/** + * Internal api + */ + +function bufferIndex(buffer, byte) { + for (var i = 0, l = buffer.length; i < l; ++i) { + if (buffer[i] === byte) return i; + } + return -1; +} diff --git a/platforms/android/assets/www/node_modules/ws/lib/Receiver.js b/platforms/android/assets/www/node_modules/ws/lib/Receiver.js new file mode 100644 index 0000000..b3183bf --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/Receiver.js @@ -0,0 +1,702 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util') + , Validation = require('./Validation').Validation + , ErrorCodes = require('./ErrorCodes') + , BufferPool = require('./BufferPool') + , bufferUtil = require('./BufferUtil').BufferUtil + , PerMessageDeflate = require('./PerMessageDeflate'); + +/** + * HyBi Receiver implementation + */ + +function Receiver (extensions) { + if (this instanceof Receiver === false) { + throw new TypeError("Classes can't be function-called"); + } + + // memory pool for fragmented messages + var fragmentedPoolPrevUsed = -1; + this.fragmentedBufferPool = new BufferPool(1024, function(db, length) { + return db.used + length; + }, function(db) { + return fragmentedPoolPrevUsed = fragmentedPoolPrevUsed >= 0 ? + Math.ceil((fragmentedPoolPrevUsed + db.used) / 2) : + db.used; + }); + + // memory pool for unfragmented messages + var unfragmentedPoolPrevUsed = -1; + this.unfragmentedBufferPool = new BufferPool(1024, function(db, length) { + return db.used + length; + }, function(db) { + return unfragmentedPoolPrevUsed = unfragmentedPoolPrevUsed >= 0 ? + Math.ceil((unfragmentedPoolPrevUsed + db.used) / 2) : + db.used; + }); + + this.extensions = extensions || {}; + this.state = { + activeFragmentedOperation: null, + lastFragment: false, + masked: false, + opcode: 0, + fragmentedOperation: false + }; + this.overflow = []; + this.headerBuffer = new Buffer(10); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + this.currentMessage = []; + this.messageHandlers = []; + this.expectHeader(2, this.processPacket); + this.dead = false; + this.processing = false; + + this.onerror = function() {}; + this.ontext = function() {}; + this.onbinary = function() {}; + this.onclose = function() {}; + this.onping = function() {}; + this.onpong = function() {}; +} + +module.exports = Receiver; + +/** + * Add new data to the parser. + * + * @api public + */ + +Receiver.prototype.add = function(data) { + var dataLength = data.length; + if (dataLength == 0) return; + if (this.expectBuffer == null) { + this.overflow.push(data); + return; + } + var toRead = Math.min(dataLength, this.expectBuffer.length - this.expectOffset); + fastCopy(toRead, data, this.expectBuffer, this.expectOffset); + this.expectOffset += toRead; + if (toRead < dataLength) { + this.overflow.push(data.slice(toRead)); + } + while (this.expectBuffer && this.expectOffset == this.expectBuffer.length) { + var bufferForHandler = this.expectBuffer; + this.expectBuffer = null; + this.expectOffset = 0; + this.expectHandler.call(this, bufferForHandler); + } +}; + +/** + * Releases all resources used by the receiver. + * + * @api public + */ + +Receiver.prototype.cleanup = function() { + this.dead = true; + this.overflow = null; + this.headerBuffer = null; + this.expectBuffer = null; + this.expectHandler = null; + this.unfragmentedBufferPool = null; + this.fragmentedBufferPool = null; + this.state = null; + this.currentMessage = null; + this.onerror = null; + this.ontext = null; + this.onbinary = null; + this.onclose = null; + this.onping = null; + this.onpong = null; +}; + +/** + * Waits for a certain amount of header bytes to be available, then fires a callback. + * + * @api private + */ + +Receiver.prototype.expectHeader = function(length, handler) { + if (length == 0) { + handler(null); + return; + } + this.expectBuffer = this.headerBuffer.slice(this.expectOffset, this.expectOffset + length); + this.expectHandler = handler; + var toRead = length; + while (toRead > 0 && this.overflow.length > 0) { + var fromOverflow = this.overflow.pop(); + if (toRead < fromOverflow.length) this.overflow.push(fromOverflow.slice(toRead)); + var read = Math.min(fromOverflow.length, toRead); + fastCopy(read, fromOverflow, this.expectBuffer, this.expectOffset); + this.expectOffset += read; + toRead -= read; + } +}; + +/** + * Waits for a certain amount of data bytes to be available, then fires a callback. + * + * @api private + */ + +Receiver.prototype.expectData = function(length, handler) { + if (length == 0) { + handler(null); + return; + } + this.expectBuffer = this.allocateFromPool(length, this.state.fragmentedOperation); + this.expectHandler = handler; + var toRead = length; + while (toRead > 0 && this.overflow.length > 0) { + var fromOverflow = this.overflow.pop(); + if (toRead < fromOverflow.length) this.overflow.push(fromOverflow.slice(toRead)); + var read = Math.min(fromOverflow.length, toRead); + fastCopy(read, fromOverflow, this.expectBuffer, this.expectOffset); + this.expectOffset += read; + toRead -= read; + } +}; + +/** + * Allocates memory from the buffer pool. + * + * @api private + */ + +Receiver.prototype.allocateFromPool = function(length, isFragmented) { + return (isFragmented ? this.fragmentedBufferPool : this.unfragmentedBufferPool).get(length); +}; + +/** + * Start processing a new packet. + * + * @api private + */ + +Receiver.prototype.processPacket = function (data) { + if (this.extensions[PerMessageDeflate.extensionName]) { + if ((data[0] & 0x30) != 0) { + this.error('reserved fields (2, 3) must be empty', 1002); + return; + } + } else { + if ((data[0] & 0x70) != 0) { + this.error('reserved fields must be empty', 1002); + return; + } + } + this.state.lastFragment = (data[0] & 0x80) == 0x80; + this.state.masked = (data[1] & 0x80) == 0x80; + var compressed = (data[0] & 0x40) == 0x40; + var opcode = data[0] & 0xf; + if (opcode === 0) { + if (compressed) { + this.error('continuation frame cannot have the Per-message Compressed bits', 1002); + return; + } + // continuation frame + this.state.fragmentedOperation = true; + this.state.opcode = this.state.activeFragmentedOperation; + if (!(this.state.opcode == 1 || this.state.opcode == 2)) { + this.error('continuation frame cannot follow current opcode', 1002); + return; + } + } + else { + if (opcode < 3 && this.state.activeFragmentedOperation != null) { + this.error('data frames after the initial data frame must have opcode 0', 1002); + return; + } + if (opcode >= 8 && compressed) { + this.error('control frames cannot have the Per-message Compressed bits', 1002); + return; + } + this.state.compressed = compressed; + this.state.opcode = opcode; + if (this.state.lastFragment === false) { + this.state.fragmentedOperation = true; + this.state.activeFragmentedOperation = opcode; + } + else this.state.fragmentedOperation = false; + } + var handler = opcodes[this.state.opcode]; + if (typeof handler == 'undefined') this.error('no handler for opcode ' + this.state.opcode, 1002); + else { + handler.start.call(this, data); + } +}; + +/** + * Endprocessing a packet. + * + * @api private + */ + +Receiver.prototype.endPacket = function() { + if (!this.state.fragmentedOperation) this.unfragmentedBufferPool.reset(true); + else if (this.state.lastFragment) this.fragmentedBufferPool.reset(true); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + if (this.state.lastFragment && this.state.opcode === this.state.activeFragmentedOperation) { + // end current fragmented operation + this.state.activeFragmentedOperation = null; + } + this.state.lastFragment = false; + this.state.opcode = this.state.activeFragmentedOperation != null ? this.state.activeFragmentedOperation : 0; + this.state.masked = false; + this.expectHeader(2, this.processPacket); +}; + +/** + * Reset the parser state. + * + * @api private + */ + +Receiver.prototype.reset = function() { + if (this.dead) return; + this.state = { + activeFragmentedOperation: null, + lastFragment: false, + masked: false, + opcode: 0, + fragmentedOperation: false + }; + this.fragmentedBufferPool.reset(true); + this.unfragmentedBufferPool.reset(true); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + this.overflow = []; + this.currentMessage = []; + this.messageHandlers = []; +}; + +/** + * Unmask received data. + * + * @api private + */ + +Receiver.prototype.unmask = function (mask, buf, binary) { + if (mask != null && buf != null) bufferUtil.unmask(buf, mask); + if (binary) return buf; + return buf != null ? buf.toString('utf8') : ''; +}; + +/** + * Concatenates a list of buffers. + * + * @api private + */ + +Receiver.prototype.concatBuffers = function(buffers) { + var length = 0; + for (var i = 0, l = buffers.length; i < l; ++i) length += buffers[i].length; + var mergedBuffer = new Buffer(length); + bufferUtil.merge(mergedBuffer, buffers); + return mergedBuffer; +}; + +/** + * Handles an error + * + * @api private + */ + +Receiver.prototype.error = function (reason, protocolErrorCode) { + this.reset(); + this.onerror(reason, protocolErrorCode); + return this; +}; + +/** + * Execute message handler buffers + * + * @api private + */ + +Receiver.prototype.flush = function() { + if (this.processing || this.dead) return; + + var handler = this.messageHandlers.shift(); + if (!handler) return; + + this.processing = true; + var self = this; + + handler(function() { + self.processing = false; + self.flush(); + }); +}; + +/** + * Apply extensions to message + * + * @api private + */ + +Receiver.prototype.applyExtensions = function(messageBuffer, fin, compressed, callback) { + var self = this; + if (compressed) { + this.extensions[PerMessageDeflate.extensionName].decompress(messageBuffer, fin, function(err, buffer) { + if (self.dead) return; + if (err) { + callback(new Error('invalid compressed data')); + return; + } + callback(null, buffer); + }); + } else { + callback(null, messageBuffer); + } +}; + +/** + * Buffer utilities + */ + +function readUInt16BE(start) { + return (this[start]<<8) + + this[start+1]; +} + +function readUInt32BE(start) { + return (this[start]<<24) + + (this[start+1]<<16) + + (this[start+2]<<8) + + this[start+3]; +} + +function fastCopy(length, srcBuffer, dstBuffer, dstOffset) { + switch (length) { + default: srcBuffer.copy(dstBuffer, dstOffset, 0, length); break; + case 16: dstBuffer[dstOffset+15] = srcBuffer[15]; + case 15: dstBuffer[dstOffset+14] = srcBuffer[14]; + case 14: dstBuffer[dstOffset+13] = srcBuffer[13]; + case 13: dstBuffer[dstOffset+12] = srcBuffer[12]; + case 12: dstBuffer[dstOffset+11] = srcBuffer[11]; + case 11: dstBuffer[dstOffset+10] = srcBuffer[10]; + case 10: dstBuffer[dstOffset+9] = srcBuffer[9]; + case 9: dstBuffer[dstOffset+8] = srcBuffer[8]; + case 8: dstBuffer[dstOffset+7] = srcBuffer[7]; + case 7: dstBuffer[dstOffset+6] = srcBuffer[6]; + case 6: dstBuffer[dstOffset+5] = srcBuffer[5]; + case 5: dstBuffer[dstOffset+4] = srcBuffer[4]; + case 4: dstBuffer[dstOffset+3] = srcBuffer[3]; + case 3: dstBuffer[dstOffset+2] = srcBuffer[2]; + case 2: dstBuffer[dstOffset+1] = srcBuffer[1]; + case 1: dstBuffer[dstOffset] = srcBuffer[0]; + } +} + +function clone(obj) { + var cloned = {}; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + cloned[k] = obj[k]; + } + } + return cloned; +} + +/** + * Opcode handlers + */ + +var opcodes = { + // text + '1': { + start: function(data) { + var self = this; + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['1'].getData.call(self, firstLength); + } + else if (firstLength == 126) { + self.expectHeader(2, function(data) { + opcodes['1'].getData.call(self, readUInt16BE.call(data, 0)); + }); + } + else if (firstLength == 127) { + self.expectHeader(8, function(data) { + if (readUInt32BE.call(data, 0) != 0) { + self.error('packets with length spanning more than 32 bit is currently not supported', 1008); + return; + } + opcodes['1'].getData.call(self, readUInt32BE.call(data, 4)); + }); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['1'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['1'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + var packet = this.unmask(mask, data, true) || new Buffer(0); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.applyExtensions(packet, state.lastFragment, state.compressed, function(err, buffer) { + if (err) return self.error(err.message, 1007); + if (buffer != null) self.currentMessage.push(buffer); + + if (state.lastFragment) { + var messageBuffer = self.concatBuffers(self.currentMessage); + self.currentMessage = []; + if (!Validation.isValidUTF8(messageBuffer)) { + self.error('invalid utf8 sequence', 1007); + return; + } + self.ontext(messageBuffer.toString('utf8'), {masked: state.masked, buffer: messageBuffer}); + } + callback(); + }); + }); + this.flush(); + this.endPacket(); + } + }, + // binary + '2': { + start: function(data) { + var self = this; + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['2'].getData.call(self, firstLength); + } + else if (firstLength == 126) { + self.expectHeader(2, function(data) { + opcodes['2'].getData.call(self, readUInt16BE.call(data, 0)); + }); + } + else if (firstLength == 127) { + self.expectHeader(8, function(data) { + if (readUInt32BE.call(data, 0) != 0) { + self.error('packets with length spanning more than 32 bit is currently not supported', 1008); + return; + } + opcodes['2'].getData.call(self, readUInt32BE.call(data, 4, true)); + }); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['2'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['2'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + var packet = this.unmask(mask, data, true) || new Buffer(0); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.applyExtensions(packet, state.lastFragment, state.compressed, function(err, buffer) { + if (err) return self.error(err.message, 1007); + if (buffer != null) self.currentMessage.push(buffer); + if (state.lastFragment) { + var messageBuffer = self.concatBuffers(self.currentMessage); + self.currentMessage = []; + self.onbinary(messageBuffer, {masked: state.masked, buffer: messageBuffer}); + } + callback(); + }); + }); + this.flush(); + this.endPacket(); + } + }, + // close + '8': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented close is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['8'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['8'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['8'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = self.unmask(mask, data, true); + + var state = clone(this.state); + this.messageHandlers.push(function() { + if (data && data.length == 1) { + self.error('close packets with data must be at least two bytes long', 1002); + return; + } + var code = data && data.length > 1 ? readUInt16BE.call(data, 0) : 1000; + if (!ErrorCodes.isValidErrorCode(code)) { + self.error('invalid error code', 1002); + return; + } + var message = ''; + if (data && data.length > 2) { + var messageBuffer = data.slice(2); + if (!Validation.isValidUTF8(messageBuffer)) { + self.error('invalid utf8 sequence', 1007); + return; + } + message = messageBuffer.toString('utf8'); + } + self.onclose(code, message, {masked: state.masked}); + self.reset(); + }); + this.flush(); + }, + }, + // ping + '9': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented ping is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['9'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['9'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['9'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = this.unmask(mask, data, true); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.onping(data, {masked: state.masked, binary: true}); + callback(); + }); + this.flush(); + this.endPacket(); + } + }, + // pong + '10': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented pong is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['10'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (this.state.masked) { + this.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['10'].finish.call(self, mask, data); + }); + }); + } + else { + this.expectData(length, function(data) { + opcodes['10'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = self.unmask(mask, data, true); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.onpong(data, {masked: state.masked, binary: true}); + callback(); + }); + this.flush(); + this.endPacket(); + } + } +} diff --git a/platforms/android/assets/www/node_modules/ws/lib/Sender.hixie.js b/platforms/android/assets/www/node_modules/ws/lib/Sender.hixie.js new file mode 100644 index 0000000..b87d9dd --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/Sender.hixie.js @@ -0,0 +1,124 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var events = require('events') + , util = require('util') + , EventEmitter = events.EventEmitter; + +/** + * Hixie Sender implementation + */ + +function Sender(socket) { + if (this instanceof Sender === false) { + throw new TypeError("Classes can't be function-called"); + } + + events.EventEmitter.call(this); + + this.socket = socket; + this.continuationFrame = false; + this.isClosed = false; +} + +module.exports = Sender; + +/** + * Inherits from EventEmitter. + */ + +util.inherits(Sender, events.EventEmitter); + +/** + * Frames and writes data. + * + * @api public + */ + +Sender.prototype.send = function(data, options, cb) { + if (this.isClosed) return; + + var isString = typeof data == 'string' + , length = isString ? Buffer.byteLength(data) : data.length + , lengthbytes = (length > 127) ? 2 : 1 // assume less than 2**14 bytes + , writeStartMarker = this.continuationFrame == false + , writeEndMarker = !options || !(typeof options.fin != 'undefined' && !options.fin) + , buffer = new Buffer((writeStartMarker ? ((options && options.binary) ? (1 + lengthbytes) : 1) : 0) + length + ((writeEndMarker && !(options && options.binary)) ? 1 : 0)) + , offset = writeStartMarker ? 1 : 0; + + if (writeStartMarker) { + if (options && options.binary) { + buffer.write('\x80', 'binary'); + // assume length less than 2**14 bytes + if (lengthbytes > 1) + buffer.write(String.fromCharCode(128+length/128), offset++, 'binary'); + buffer.write(String.fromCharCode(length&0x7f), offset++, 'binary'); + } else + buffer.write('\x00', 'binary'); + } + + if (isString) buffer.write(data, offset, 'utf8'); + else data.copy(buffer, offset, 0); + + if (writeEndMarker) { + if (options && options.binary) { + // sending binary, not writing end marker + } else + buffer.write('\xff', offset + length, 'binary'); + this.continuationFrame = false; + } + else this.continuationFrame = true; + + try { + this.socket.write(buffer, 'binary', cb); + } catch (e) { + this.error(e.toString()); + } +}; + +/** + * Sends a close instruction to the remote party. + * + * @api public + */ + +Sender.prototype.close = function(code, data, mask, cb) { + if (this.isClosed) return; + this.isClosed = true; + try { + if (this.continuationFrame) this.socket.write(new Buffer([0xff], 'binary')); + this.socket.write(new Buffer([0xff, 0x00]), 'binary', cb); + } catch (e) { + this.error(e.toString()); + } +}; + +/** + * Sends a ping message to the remote party. Not available for hixie. + * + * @api public + */ + +Sender.prototype.ping = function(data, options) {}; + +/** + * Sends a pong message to the remote party. Not available for hixie. + * + * @api public + */ + +Sender.prototype.pong = function(data, options) {}; + +/** + * Handles an error + * + * @api private + */ + +Sender.prototype.error = function (reason) { + this.emit('error', reason); + return this; +}; diff --git a/platforms/android/assets/www/node_modules/ws/lib/Sender.js b/platforms/android/assets/www/node_modules/ws/lib/Sender.js new file mode 100644 index 0000000..d34061e --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/Sender.js @@ -0,0 +1,324 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var events = require('events') + , util = require('util') + , EventEmitter = events.EventEmitter + , ErrorCodes = require('./ErrorCodes') + , bufferUtil = require('./BufferUtil').BufferUtil + , PerMessageDeflate = require('./PerMessageDeflate'); + +/** + * HyBi Sender implementation + */ + +function Sender(socket, extensions) { + if (this instanceof Sender === false) { + throw new TypeError("Classes can't be function-called"); + } + + events.EventEmitter.call(this); + + this._socket = socket; + this.extensions = extensions || {}; + this.firstFragment = true; + this.compress = false; + this.messageHandlers = []; + this.processing = false; +} + +/** + * Inherits from EventEmitter. + */ + +util.inherits(Sender, events.EventEmitter); + +/** + * Sends a close instruction to the remote party. + * + * @api public + */ + +Sender.prototype.close = function(code, data, mask, cb) { + if (typeof code !== 'undefined') { + if (typeof code !== 'number' || + !ErrorCodes.isValidErrorCode(code)) throw new Error('first argument must be a valid error code number'); + } + code = code || 1000; + var dataBuffer = new Buffer(2 + (data ? Buffer.byteLength(data) : 0)); + writeUInt16BE.call(dataBuffer, code, 0); + if (dataBuffer.length > 2) dataBuffer.write(data, 2); + + var self = this; + this.messageHandlers.push(function(callback) { + self.frameAndSend(0x8, dataBuffer, true, mask); + callback(); + if (typeof cb == 'function') cb(); + }); + this.flush(); +}; + +/** + * Sends a ping message to the remote party. + * + * @api public + */ + +Sender.prototype.ping = function(data, options) { + var mask = options && options.mask; + var self = this; + this.messageHandlers.push(function(callback) { + self.frameAndSend(0x9, data || '', true, mask); + callback(); + }); + this.flush(); +}; + +/** + * Sends a pong message to the remote party. + * + * @api public + */ + +Sender.prototype.pong = function(data, options) { + var mask = options && options.mask; + var self = this; + this.messageHandlers.push(function(callback) { + self.frameAndSend(0xa, data || '', true, mask); + callback(); + }); + this.flush(); +}; + +/** + * Sends text or binary data to the remote party. + * + * @api public + */ + +Sender.prototype.send = function(data, options, cb) { + var finalFragment = options && options.fin === false ? false : true; + var mask = options && options.mask; + var compress = options && options.compress; + var opcode = options && options.binary ? 2 : 1; + if (this.firstFragment === false) { + opcode = 0; + compress = false; + } else { + this.firstFragment = false; + this.compress = compress; + } + if (finalFragment) this.firstFragment = true + + var compressFragment = this.compress; + + var self = this; + this.messageHandlers.push(function(callback) { + self.applyExtensions(data, finalFragment, compressFragment, function(err, data) { + if (err) { + if (typeof cb == 'function') cb(err); + else self.emit('error', err); + return; + } + self.frameAndSend(opcode, data, finalFragment, mask, compress, cb); + callback(); + }); + }); + this.flush(); +}; + +/** + * Frames and sends a piece of data according to the HyBi WebSocket protocol. + * + * @api private + */ + +Sender.prototype.frameAndSend = function(opcode, data, finalFragment, maskData, compressed, cb) { + var canModifyData = false; + + if (!data) { + try { + this._socket.write(new Buffer([opcode | (finalFragment ? 0x80 : 0), 0 | (maskData ? 0x80 : 0)].concat(maskData ? [0, 0, 0, 0] : [])), 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + return; + } + + if (!Buffer.isBuffer(data)) { + canModifyData = true; + if (data && (typeof data.byteLength !== 'undefined' || typeof data.buffer !== 'undefined')) { + data = getArrayBuffer(data); + } else { + // + // If people want to send a number, this would allocate the number in + // bytes as memory size instead of storing the number as buffer value. So + // we need to transform it to string in order to prevent possible + // vulnerabilities / memory attacks. + // + if (typeof data === 'number') data = data.toString(); + + data = new Buffer(data); + } + } + + var dataLength = data.length + , dataOffset = maskData ? 6 : 2 + , secondByte = dataLength; + + if (dataLength >= 65536) { + dataOffset += 8; + secondByte = 127; + } + else if (dataLength > 125) { + dataOffset += 2; + secondByte = 126; + } + + var mergeBuffers = dataLength < 32768 || (maskData && !canModifyData); + var totalLength = mergeBuffers ? dataLength + dataOffset : dataOffset; + var outputBuffer = new Buffer(totalLength); + outputBuffer[0] = finalFragment ? opcode | 0x80 : opcode; + if (compressed) outputBuffer[0] |= 0x40; + + switch (secondByte) { + case 126: + writeUInt16BE.call(outputBuffer, dataLength, 2); + break; + case 127: + writeUInt32BE.call(outputBuffer, 0, 2); + writeUInt32BE.call(outputBuffer, dataLength, 6); + } + + if (maskData) { + outputBuffer[1] = secondByte | 0x80; + var mask = this._randomMask || (this._randomMask = getRandomMask()); + outputBuffer[dataOffset - 4] = mask[0]; + outputBuffer[dataOffset - 3] = mask[1]; + outputBuffer[dataOffset - 2] = mask[2]; + outputBuffer[dataOffset - 1] = mask[3]; + if (mergeBuffers) { + bufferUtil.mask(data, mask, outputBuffer, dataOffset, dataLength); + try { + this._socket.write(outputBuffer, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + else { + bufferUtil.mask(data, mask, data, 0, dataLength); + try { + this._socket.write(outputBuffer, 'binary'); + this._socket.write(data, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + } + else { + outputBuffer[1] = secondByte; + if (mergeBuffers) { + data.copy(outputBuffer, dataOffset); + try { + this._socket.write(outputBuffer, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + else { + try { + this._socket.write(outputBuffer, 'binary'); + this._socket.write(data, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + } +}; + +/** + * Execute message handler buffers + * + * @api private + */ + +Sender.prototype.flush = function() { + if (this.processing) return; + + var handler = this.messageHandlers.shift(); + if (!handler) return; + + this.processing = true; + + var self = this; + + handler(function() { + self.processing = false; + self.flush(); + }); +}; + +/** + * Apply extensions to message + * + * @api private + */ + +Sender.prototype.applyExtensions = function(data, fin, compress, callback) { + if (compress && data) { + if ((data.buffer || data) instanceof ArrayBuffer) { + data = getArrayBuffer(data); + } + this.extensions[PerMessageDeflate.extensionName].compress(data, fin, callback); + } else { + callback(null, data); + } +}; + +module.exports = Sender; + +function writeUInt16BE(value, offset) { + this[offset] = (value & 0xff00)>>8; + this[offset+1] = value & 0xff; +} + +function writeUInt32BE(value, offset) { + this[offset] = (value & 0xff000000)>>24; + this[offset+1] = (value & 0xff0000)>>16; + this[offset+2] = (value & 0xff00)>>8; + this[offset+3] = value & 0xff; +} + +function getArrayBuffer(data) { + // data is either an ArrayBuffer or ArrayBufferView. + var array = new Uint8Array(data.buffer || data) + , l = data.byteLength || data.length + , o = data.byteOffset || 0 + , buffer = new Buffer(l); + for (var i = 0; i < l; ++i) { + buffer[i] = array[o+i]; + } + return buffer; +} + +function getRandomMask() { + return new Buffer([ + ~~(Math.random() * 255), + ~~(Math.random() * 255), + ~~(Math.random() * 255), + ~~(Math.random() * 255) + ]); +} diff --git a/platforms/android/assets/www/node_modules/ws/lib/Validation.fallback.js b/platforms/android/assets/www/node_modules/ws/lib/Validation.fallback.js new file mode 100644 index 0000000..2c7c4fd --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/Validation.fallback.js @@ -0,0 +1,12 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +module.exports.Validation = { + isValidUTF8: function(buffer) { + return true; + } +}; + diff --git a/platforms/android/assets/www/node_modules/ws/lib/Validation.js b/platforms/android/assets/www/node_modules/ws/lib/Validation.js new file mode 100644 index 0000000..0795fb7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/Validation.js @@ -0,0 +1,13 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +try { + module.exports = require('utf-8-validate'); +} catch (e) { + module.exports = require('./Validation.fallback'); +} diff --git a/platforms/android/assets/www/node_modules/ws/lib/WebSocket.js b/platforms/android/assets/www/node_modules/ws/lib/WebSocket.js new file mode 100644 index 0000000..4e06c80 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/WebSocket.js @@ -0,0 +1,965 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var url = require('url') + , util = require('util') + , http = require('http') + , https = require('https') + , crypto = require('crypto') + , stream = require('stream') + , Ultron = require('ultron') + , Options = require('options') + , Sender = require('./Sender') + , Receiver = require('./Receiver') + , SenderHixie = require('./Sender.hixie') + , ReceiverHixie = require('./Receiver.hixie') + , Extensions = require('./Extensions') + , PerMessageDeflate = require('./PerMessageDeflate') + , EventEmitter = require('events').EventEmitter; + +/** + * Constants + */ + +// Default protocol version + +var protocolVersion = 13; + +// Close timeout + +var closeTimeout = 30 * 1000; // Allow 30 seconds to terminate the connection cleanly + +/** + * WebSocket implementation + * + * @constructor + * @param {String} address Connection address. + * @param {String|Array} protocols WebSocket protocols. + * @param {Object} options Additional connection options. + * @api public + */ +function WebSocket(address, protocols, options) { + if (this instanceof WebSocket === false) { + return new WebSocket(address, protocols, options); + } + + EventEmitter.call(this); + + if (protocols && !Array.isArray(protocols) && 'object' === typeof protocols) { + // accept the "options" Object as the 2nd argument + options = protocols; + protocols = null; + } + + if ('string' === typeof protocols) { + protocols = [ protocols ]; + } + + if (!Array.isArray(protocols)) { + protocols = []; + } + + this._socket = null; + this._ultron = null; + this._closeReceived = false; + this.bytesReceived = 0; + this.readyState = null; + this.supports = {}; + this.extensions = {}; + + if (Array.isArray(address)) { + initAsServerClient.apply(this, address.concat(options)); + } else { + initAsClient.apply(this, [address, protocols, options]); + } +} + +/** + * Inherits from EventEmitter. + */ +util.inherits(WebSocket, EventEmitter); + +/** + * Ready States + */ +["CONNECTING", "OPEN", "CLOSING", "CLOSED"].forEach(function each(state, index) { + WebSocket.prototype[state] = WebSocket[state] = index; +}); + +/** + * Gracefully closes the connection, after sending a description message to the server + * + * @param {Object} data to be sent to the server + * @api public + */ +WebSocket.prototype.close = function close(code, data) { + if (this.readyState === WebSocket.CLOSED) return; + + if (this.readyState === WebSocket.CONNECTING) { + this.readyState = WebSocket.CLOSED; + return; + } + + if (this.readyState === WebSocket.CLOSING) { + if (this._closeReceived && this._isServer) { + this.terminate(); + } + return; + } + + var self = this; + try { + this.readyState = WebSocket.CLOSING; + this._closeCode = code; + this._closeMessage = data; + var mask = !this._isServer; + this._sender.close(code, data, mask, function(err) { + if (err) self.emit('error', err); + + if (self._closeReceived && self._isServer) { + self.terminate(); + } else { + // ensure that the connection is cleaned up even when no response of closing handshake. + clearTimeout(self._closeTimer); + self._closeTimer = setTimeout(cleanupWebsocketResources.bind(self, true), closeTimeout); + } + }); + } catch (e) { + this.emit('error', e); + } +}; + +/** + * Pause the client stream + * + * @api public + */ +WebSocket.prototype.pause = function pauser() { + if (this.readyState !== WebSocket.OPEN) throw new Error('not opened'); + + return this._socket.pause(); +}; + +/** + * Sends a ping + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean + * @param {boolean} dontFailWhenClosed indicates whether or not to throw if the connection isnt open + * @api public + */ +WebSocket.prototype.ping = function ping(data, options, dontFailWhenClosed) { + if (this.readyState !== WebSocket.OPEN) { + if (dontFailWhenClosed === true) return; + throw new Error('not opened'); + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + + this._sender.ping(data, options); +}; + +/** + * Sends a pong + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean + * @param {boolean} dontFailWhenClosed indicates whether or not to throw if the connection isnt open + * @api public + */ +WebSocket.prototype.pong = function(data, options, dontFailWhenClosed) { + if (this.readyState !== WebSocket.OPEN) { + if (dontFailWhenClosed === true) return; + throw new Error('not opened'); + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + + this._sender.pong(data, options); +}; + +/** + * Resume the client stream + * + * @api public + */ +WebSocket.prototype.resume = function resume() { + if (this.readyState !== WebSocket.OPEN) throw new Error('not opened'); + + return this._socket.resume(); +}; + +/** + * Sends a piece of data + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean, compress: boolean + * @param {function} Optional callback which is executed after the send completes + * @api public + */ + +WebSocket.prototype.send = function send(data, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + if (this.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else throw new Error('not opened'); + return; + } + + if (!data) data = ''; + if (this._queue) { + var self = this; + this._queue.push(function() { self.send(data, options, cb); }); + return; + } + + options = options || {}; + options.fin = true; + + if (typeof options.binary === 'undefined') { + options.binary = (data instanceof ArrayBuffer || data instanceof Buffer || + data instanceof Uint8Array || + data instanceof Uint16Array || + data instanceof Uint32Array || + data instanceof Int8Array || + data instanceof Int16Array || + data instanceof Int32Array || + data instanceof Float32Array || + data instanceof Float64Array); + } + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + if (typeof options.compress === 'undefined') options.compress = true; + if (!this.extensions[PerMessageDeflate.extensionName]) { + options.compress = false; + } + + var readable = typeof stream.Readable === 'function' + ? stream.Readable + : stream.Stream; + + if (data instanceof readable) { + startQueue(this); + var self = this; + + sendStream(this, data, options, function send(error) { + process.nextTick(function tock() { + executeQueueSends(self); + }); + + if (typeof cb === 'function') cb(error); + }); + } else { + this._sender.send(data, options, cb); + } +}; + +/** + * Streams data through calls to a user supplied function + * + * @param {Object} Members - mask: boolean, binary: boolean, compress: boolean + * @param {function} 'function (error, send)' which is executed on successive ticks of which send is 'function (data, final)'. + * @api public + */ +WebSocket.prototype.stream = function stream(options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + var self = this; + + if (typeof cb !== 'function') throw new Error('callback must be provided'); + + if (this.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else throw new Error('not opened'); + return; + } + + if (this._queue) { + this._queue.push(function () { self.stream(options, cb); }); + return; + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + if (typeof options.compress === 'undefined') options.compress = true; + if (!this.extensions[PerMessageDeflate.extensionName]) { + options.compress = false; + } + + startQueue(this); + + function send(data, final) { + try { + if (self.readyState !== WebSocket.OPEN) throw new Error('not opened'); + options.fin = final === true; + self._sender.send(data, options); + if (!final) process.nextTick(cb.bind(null, null, send)); + else executeQueueSends(self); + } catch (e) { + if (typeof cb === 'function') cb(e); + else { + delete self._queue; + self.emit('error', e); + } + } + } + + process.nextTick(cb.bind(null, null, send)); +}; + +/** + * Immediately shuts down the connection + * + * @api public + */ +WebSocket.prototype.terminate = function terminate() { + if (this.readyState === WebSocket.CLOSED) return; + + if (this._socket) { + this.readyState = WebSocket.CLOSING; + + // End the connection + try { this._socket.end(); } + catch (e) { + // Socket error during end() call, so just destroy it right now + cleanupWebsocketResources.call(this, true); + return; + } + + // Add a timeout to ensure that the connection is completely + // cleaned up within 30 seconds, even if the clean close procedure + // fails for whatever reason + // First cleanup any pre-existing timeout from an earlier "terminate" call, + // if one exists. Otherwise terminate calls in quick succession will leak timeouts + // and hold the program open for `closeTimout` time. + if (this._closeTimer) { clearTimeout(this._closeTimer); } + this._closeTimer = setTimeout(cleanupWebsocketResources.bind(this, true), closeTimeout); + } else if (this.readyState === WebSocket.CONNECTING) { + cleanupWebsocketResources.call(this, true); + } +}; + +/** + * Expose bufferedAmount + * + * @api public + */ +Object.defineProperty(WebSocket.prototype, 'bufferedAmount', { + get: function get() { + var amount = 0; + if (this._socket) { + amount = this._socket.bufferSize || 0; + } + return amount; + } +}); + +/** + * Emulates the W3C Browser based WebSocket interface using function members. + * + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +['open', 'error', 'close', 'message'].forEach(function(method) { + Object.defineProperty(WebSocket.prototype, 'on' + method, { + /** + * Returns the current listener + * + * @returns {Mixed} the set function or undefined + * @api public + */ + get: function get() { + var listener = this.listeners(method)[0]; + return listener ? (listener._listener ? listener._listener : listener) : undefined; + }, + + /** + * Start listening for events + * + * @param {Function} listener the listener + * @returns {Mixed} the set function or undefined + * @api public + */ + set: function set(listener) { + this.removeAllListeners(method); + this.addEventListener(method, listener); + } + }); +}); + +/** + * Emulates the W3C Browser based WebSocket interface using addEventListener. + * + * @see https://developer.mozilla.org/en/DOM/element.addEventListener + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +WebSocket.prototype.addEventListener = function(method, listener) { + var target = this; + + function onMessage (data, flags) { + listener.call(target, new MessageEvent(data, !!flags.binary, target)); + } + + function onClose (code, message) { + listener.call(target, new CloseEvent(code, message, target)); + } + + function onError (event) { + event.type = 'error'; + event.target = target; + listener.call(target, event); + } + + function onOpen () { + listener.call(target, new OpenEvent(target)); + } + + if (typeof listener === 'function') { + if (method === 'message') { + // store a reference so we can return the original function from the + // addEventListener hook + onMessage._listener = listener; + this.on(method, onMessage); + } else if (method === 'close') { + // store a reference so we can return the original function from the + // addEventListener hook + onClose._listener = listener; + this.on(method, onClose); + } else if (method === 'error') { + // store a reference so we can return the original function from the + // addEventListener hook + onError._listener = listener; + this.on(method, onError); + } else if (method === 'open') { + // store a reference so we can return the original function from the + // addEventListener hook + onOpen._listener = listener; + this.on(method, onOpen); + } else { + this.on(method, listener); + } + } +}; + +module.exports = WebSocket; +module.exports.buildHostHeader = buildHostHeader + +/** + * W3C MessageEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function MessageEvent(dataArg, isBinary, target) { + this.type = 'message'; + this.data = dataArg; + this.target = target; + this.binary = isBinary; // non-standard. +} + +/** + * W3C CloseEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function CloseEvent(code, reason, target) { + this.type = 'close'; + this.wasClean = (typeof code === 'undefined' || code === 1000); + this.code = code; + this.reason = reason; + this.target = target; +} + +/** + * W3C OpenEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function OpenEvent(target) { + this.type = 'open'; + this.target = target; +} + +// Append port number to Host header, only if specified in the url +// and non-default +function buildHostHeader(isSecure, hostname, port) { + var headerHost = hostname; + if (hostname) { + if ((isSecure && (port != 443)) || (!isSecure && (port != 80))){ + headerHost = headerHost + ':' + port; + } + } + return headerHost; +} + +/** + * Entirely private apis, + * which may or may not be bound to a sepcific WebSocket instance. + */ +function initAsServerClient(req, socket, upgradeHead, options) { + options = new Options({ + protocolVersion: protocolVersion, + protocol: null, + extensions: {} + }).merge(options); + + // expose state properties + this.protocol = options.value.protocol; + this.protocolVersion = options.value.protocolVersion; + this.extensions = options.value.extensions; + this.supports.binary = (this.protocolVersion !== 'hixie-76'); + this.upgradeReq = req; + this.readyState = WebSocket.CONNECTING; + this._isServer = true; + + // establish connection + if (options.value.protocolVersion === 'hixie-76') { + establishConnection.call(this, ReceiverHixie, SenderHixie, socket, upgradeHead); + } else { + establishConnection.call(this, Receiver, Sender, socket, upgradeHead); + } +} + +function initAsClient(address, protocols, options) { + options = new Options({ + origin: null, + protocolVersion: protocolVersion, + host: null, + headers: null, + protocol: protocols.join(','), + agent: null, + + // ssl-related options + pfx: null, + key: null, + passphrase: null, + cert: null, + ca: null, + ciphers: null, + rejectUnauthorized: null, + perMessageDeflate: true, + localAddress: null + }).merge(options); + + if (options.value.protocolVersion !== 8 && options.value.protocolVersion !== 13) { + throw new Error('unsupported protocol version'); + } + + // verify URL and establish http class + var serverUrl = url.parse(address); + var isUnixSocket = serverUrl.protocol === 'ws+unix:'; + if (!serverUrl.host && !isUnixSocket) throw new Error('invalid url'); + var isSecure = serverUrl.protocol === 'wss:' || serverUrl.protocol === 'https:'; + var httpObj = isSecure ? https : http; + var port = serverUrl.port || (isSecure ? 443 : 80); + var auth = serverUrl.auth; + + // prepare extensions + var extensionsOffer = {}; + var perMessageDeflate; + if (options.value.perMessageDeflate) { + perMessageDeflate = new PerMessageDeflate(typeof options.value.perMessageDeflate !== true ? options.value.perMessageDeflate : {}, false); + extensionsOffer[PerMessageDeflate.extensionName] = perMessageDeflate.offer(); + } + + // expose state properties + this._isServer = false; + this.url = address; + this.protocolVersion = options.value.protocolVersion; + this.supports.binary = (this.protocolVersion !== 'hixie-76'); + + // begin handshake + var key = new Buffer(options.value.protocolVersion + '-' + Date.now()).toString('base64'); + var shasum = crypto.createHash('sha1'); + shasum.update(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'); + var expectedServerKey = shasum.digest('base64'); + + var agent = options.value.agent; + + var headerHost = buildHostHeader(isSecure, serverUrl.hostname, port) + + var requestOptions = { + port: port, + host: serverUrl.hostname, + headers: { + 'Connection': 'Upgrade', + 'Upgrade': 'websocket', + 'Host': headerHost, + 'Sec-WebSocket-Version': options.value.protocolVersion, + 'Sec-WebSocket-Key': key + } + }; + + // If we have basic auth. + if (auth) { + requestOptions.headers.Authorization = 'Basic ' + new Buffer(auth).toString('base64'); + } + + if (options.value.protocol) { + requestOptions.headers['Sec-WebSocket-Protocol'] = options.value.protocol; + } + + if (options.value.host) { + requestOptions.headers.Host = options.value.host; + } + + if (options.value.headers) { + for (var header in options.value.headers) { + if (options.value.headers.hasOwnProperty(header)) { + requestOptions.headers[header] = options.value.headers[header]; + } + } + } + + if (Object.keys(extensionsOffer).length) { + requestOptions.headers['Sec-WebSocket-Extensions'] = Extensions.format(extensionsOffer); + } + + if (options.isDefinedAndNonNull('pfx') + || options.isDefinedAndNonNull('key') + || options.isDefinedAndNonNull('passphrase') + || options.isDefinedAndNonNull('cert') + || options.isDefinedAndNonNull('ca') + || options.isDefinedAndNonNull('ciphers') + || options.isDefinedAndNonNull('rejectUnauthorized')) { + + if (options.isDefinedAndNonNull('pfx')) requestOptions.pfx = options.value.pfx; + if (options.isDefinedAndNonNull('key')) requestOptions.key = options.value.key; + if (options.isDefinedAndNonNull('passphrase')) requestOptions.passphrase = options.value.passphrase; + if (options.isDefinedAndNonNull('cert')) requestOptions.cert = options.value.cert; + if (options.isDefinedAndNonNull('ca')) requestOptions.ca = options.value.ca; + if (options.isDefinedAndNonNull('ciphers')) requestOptions.ciphers = options.value.ciphers; + if (options.isDefinedAndNonNull('rejectUnauthorized')) requestOptions.rejectUnauthorized = options.value.rejectUnauthorized; + + if (!agent) { + // global agent ignores client side certificates + agent = new httpObj.Agent(requestOptions); + } + } + + requestOptions.path = serverUrl.path || '/'; + + if (agent) { + requestOptions.agent = agent; + } + + if (isUnixSocket) { + requestOptions.socketPath = serverUrl.pathname; + } + + if (options.value.localAddress) { + requestOptions.localAddress = options.value.localAddress; + } + + if (options.value.origin) { + if (options.value.protocolVersion < 13) requestOptions.headers['Sec-WebSocket-Origin'] = options.value.origin; + else requestOptions.headers.Origin = options.value.origin; + } + + var self = this; + var req = httpObj.request(requestOptions); + + req.on('error', function onerror(error) { + self.emit('error', error); + cleanupWebsocketResources.call(self, error); + }); + + req.once('response', function response(res) { + var error; + + if (!self.emit('unexpected-response', req, res)) { + error = new Error('unexpected server response (' + res.statusCode + ')'); + req.abort(); + self.emit('error', error); + } + + cleanupWebsocketResources.call(self, error); + }); + + req.once('upgrade', function upgrade(res, socket, upgradeHead) { + if (self.readyState === WebSocket.CLOSED) { + // client closed before server accepted connection + self.emit('close'); + self.removeAllListeners(); + socket.end(); + return; + } + + var serverKey = res.headers['sec-websocket-accept']; + if (typeof serverKey === 'undefined' || serverKey !== expectedServerKey) { + self.emit('error', 'invalid server key'); + self.removeAllListeners(); + socket.end(); + return; + } + + var serverProt = res.headers['sec-websocket-protocol']; + var protList = (options.value.protocol || "").split(/, */); + var protError = null; + + if (!options.value.protocol && serverProt) { + protError = 'server sent a subprotocol even though none requested'; + } else if (options.value.protocol && !serverProt) { + protError = 'server sent no subprotocol even though requested'; + } else if (serverProt && protList.indexOf(serverProt) === -1) { + protError = 'server responded with an invalid protocol'; + } + + if (protError) { + self.emit('error', protError); + self.removeAllListeners(); + socket.end(); + return; + } else if (serverProt) { + self.protocol = serverProt; + } + + var serverExtensions = Extensions.parse(res.headers['sec-websocket-extensions']); + if (perMessageDeflate && serverExtensions[PerMessageDeflate.extensionName]) { + try { + perMessageDeflate.accept(serverExtensions[PerMessageDeflate.extensionName]); + } catch (err) { + self.emit('error', 'invalid extension parameter'); + self.removeAllListeners(); + socket.end(); + return; + } + self.extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + + establishConnection.call(self, Receiver, Sender, socket, upgradeHead); + + // perform cleanup on http resources + req.removeAllListeners(); + req = null; + agent = null; + }); + + req.end(); + this.readyState = WebSocket.CONNECTING; +} + +function establishConnection(ReceiverClass, SenderClass, socket, upgradeHead) { + var ultron = this._ultron = new Ultron(socket) + , called = false + , self = this; + + socket.setTimeout(0); + socket.setNoDelay(true); + + this._receiver = new ReceiverClass(this.extensions); + this._socket = socket; + + // socket cleanup handlers + ultron.on('end', cleanupWebsocketResources.bind(this)); + ultron.on('close', cleanupWebsocketResources.bind(this)); + ultron.on('error', cleanupWebsocketResources.bind(this)); + + // ensure that the upgradeHead is added to the receiver + function firstHandler(data) { + if (called || self.readyState === WebSocket.CLOSED) return; + + called = true; + socket.removeListener('data', firstHandler); + ultron.on('data', realHandler); + + if (upgradeHead && upgradeHead.length > 0) { + realHandler(upgradeHead); + upgradeHead = null; + } + + if (data) realHandler(data); + } + + // subsequent packets are pushed straight to the receiver + function realHandler(data) { + self.bytesReceived += data.length; + self._receiver.add(data); + } + + ultron.on('data', firstHandler); + + // if data was passed along with the http upgrade, + // this will schedule a push of that on to the receiver. + // this has to be done on next tick, since the caller + // hasn't had a chance to set event handlers on this client + // object yet. + process.nextTick(firstHandler); + + // receiver event handlers + self._receiver.ontext = function ontext(data, flags) { + flags = flags || {}; + + self.emit('message', data, flags); + }; + + self._receiver.onbinary = function onbinary(data, flags) { + flags = flags || {}; + + flags.binary = true; + self.emit('message', data, flags); + }; + + self._receiver.onping = function onping(data, flags) { + flags = flags || {}; + + self.pong(data, { + mask: !self._isServer, + binary: flags.binary === true + }, true); + + self.emit('ping', data, flags); + }; + + self._receiver.onpong = function onpong(data, flags) { + self.emit('pong', data, flags || {}); + }; + + self._receiver.onclose = function onclose(code, data, flags) { + flags = flags || {}; + + self._closeReceived = true; + self.close(code, data); + }; + + self._receiver.onerror = function onerror(reason, errorCode) { + // close the connection when the receiver reports a HyBi error code + self.close(typeof errorCode !== 'undefined' ? errorCode : 1002, ''); + self.emit('error', reason, errorCode); + }; + + // finalize the client + this._sender = new SenderClass(socket, this.extensions); + this._sender.on('error', function onerror(error) { + self.close(1002, ''); + self.emit('error', error); + }); + + this.readyState = WebSocket.OPEN; + this.emit('open'); +} + +function startQueue(instance) { + instance._queue = instance._queue || []; +} + +function executeQueueSends(instance) { + var queue = instance._queue; + if (typeof queue === 'undefined') return; + + delete instance._queue; + for (var i = 0, l = queue.length; i < l; ++i) { + queue[i](); + } +} + +function sendStream(instance, stream, options, cb) { + stream.on('data', function incoming(data) { + if (instance.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else { + delete instance._queue; + instance.emit('error', new Error('not opened')); + } + return; + } + + options.fin = false; + instance._sender.send(data, options); + }); + + stream.on('end', function end() { + if (instance.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else { + delete instance._queue; + instance.emit('error', new Error('not opened')); + } + return; + } + + options.fin = true; + instance._sender.send(null, options); + + if (typeof cb === 'function') cb(null); + }); +} + +function cleanupWebsocketResources(error) { + if (this.readyState === WebSocket.CLOSED) return; + + var emitClose = this.readyState !== WebSocket.CONNECTING; + this.readyState = WebSocket.CLOSED; + + clearTimeout(this._closeTimer); + this._closeTimer = null; + + if (emitClose) { + // If the connection was closed abnormally (with an error), or if + // the close control frame was not received then the close code + // must default to 1006. + if (error || !this._closeReceived) { + this._closeCode = 1006; + } + this.emit('close', this._closeCode || 1000, this._closeMessage || ''); + } + + if (this._socket) { + if (this._ultron) this._ultron.destroy(); + this._socket.on('error', function onerror() { + try { this.destroy(); } + catch (e) {} + }); + + try { + if (!error) this._socket.end(); + else this._socket.destroy(); + } catch (e) { /* Ignore termination errors */ } + + this._socket = null; + this._ultron = null; + } + + if (this._sender) { + this._sender.removeAllListeners(); + this._sender = null; + } + + if (this._receiver) { + this._receiver.cleanup(); + this._receiver = null; + } + + if (this.extensions[PerMessageDeflate.extensionName]) { + this.extensions[PerMessageDeflate.extensionName].cleanup(); + } + + this.extensions = null; + + this.removeAllListeners(); + this.on('error', function onerror() {}); // catch all errors after this + delete this._queue; +} diff --git a/platforms/android/assets/www/node_modules/ws/lib/WebSocketServer.js b/platforms/android/assets/www/node_modules/ws/lib/WebSocketServer.js new file mode 100644 index 0000000..ba0e4c0 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/lib/WebSocketServer.js @@ -0,0 +1,513 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util') + , events = require('events') + , http = require('http') + , crypto = require('crypto') + , Options = require('options') + , WebSocket = require('./WebSocket') + , Extensions = require('./Extensions') + , PerMessageDeflate = require('./PerMessageDeflate') + , tls = require('tls') + , url = require('url'); + +/** + * WebSocket Server implementation + */ + +function WebSocketServer(options, callback) { + if (this instanceof WebSocketServer === false) { + return new WebSocketServer(options, callback); + } + + events.EventEmitter.call(this); + + options = new Options({ + host: '0.0.0.0', + port: null, + server: null, + verifyClient: null, + handleProtocols: null, + path: null, + noServer: false, + disableHixie: false, + clientTracking: true, + perMessageDeflate: true + }).merge(options); + + if (!options.isDefinedAndNonNull('port') && !options.isDefinedAndNonNull('server') && !options.value.noServer) { + throw new TypeError('`port` or a `server` must be provided'); + } + + var self = this; + + if (options.isDefinedAndNonNull('port')) { + this._server = http.createServer(function (req, res) { + var body = http.STATUS_CODES[426]; + res.writeHead(426, { + 'Content-Length': body.length, + 'Content-Type': 'text/plain' + }); + res.end(body); + }); + this._server.allowHalfOpen = false; + this._server.listen(options.value.port, options.value.host, callback); + this._closeServer = function() { if (self._server) self._server.close(); }; + } + else if (options.value.server) { + this._server = options.value.server; + if (options.value.path) { + // take note of the path, to avoid collisions when multiple websocket servers are + // listening on the same http server + if (this._server._webSocketPaths && options.value.server._webSocketPaths[options.value.path]) { + throw new Error('two instances of WebSocketServer cannot listen on the same http server path'); + } + if (typeof this._server._webSocketPaths !== 'object') { + this._server._webSocketPaths = {}; + } + this._server._webSocketPaths[options.value.path] = 1; + } + } + if (this._server) this._server.once('listening', function() { self.emit('listening'); }); + + if (typeof this._server != 'undefined') { + this._server.on('error', function(error) { + self.emit('error', error) + }); + this._server.on('upgrade', function(req, socket, upgradeHead) { + //copy upgradeHead to avoid retention of large slab buffers used in node core + var head = new Buffer(upgradeHead.length); + upgradeHead.copy(head); + + self.handleUpgrade(req, socket, head, function(client) { + self.emit('connection'+req.url, client); + self.emit('connection', client); + }); + }); + } + + this.options = options.value; + this.path = options.value.path; + this.clients = []; +} + +/** + * Inherits from EventEmitter. + */ + +util.inherits(WebSocketServer, events.EventEmitter); + +/** + * Immediately shuts down the connection. + * + * @api public + */ + +WebSocketServer.prototype.close = function(callback) { + // terminate all associated clients + var error = null; + try { + for (var i = 0, l = this.clients.length; i < l; ++i) { + this.clients[i].terminate(); + } + } + catch (e) { + error = e; + } + + // remove path descriptor, if any + if (this.path && this._server._webSocketPaths) { + delete this._server._webSocketPaths[this.path]; + if (Object.keys(this._server._webSocketPaths).length == 0) { + delete this._server._webSocketPaths; + } + } + + // close the http server if it was internally created + try { + if (typeof this._closeServer !== 'undefined') { + this._closeServer(); + } + } + finally { + delete this._server; + } + if(callback) + callback(error); + else if(error) + throw error; +} + +/** + * Handle a HTTP Upgrade request. + * + * @api public + */ + +WebSocketServer.prototype.handleUpgrade = function(req, socket, upgradeHead, cb) { + // check for wrong path + if (this.options.path) { + var u = url.parse(req.url); + if (u && u.pathname !== this.options.path) return; + } + + if (typeof req.headers.upgrade === 'undefined' || req.headers.upgrade.toLowerCase() !== 'websocket') { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + if (req.headers['sec-websocket-key1']) handleHixieUpgrade.apply(this, arguments); + else handleHybiUpgrade.apply(this, arguments); +} + +module.exports = WebSocketServer; + +/** + * Entirely private apis, + * which may or may not be bound to a sepcific WebSocket instance. + */ + +function handleHybiUpgrade(req, socket, upgradeHead, cb) { + // handle premature socket errors + var errorHandler = function() { + try { socket.destroy(); } catch (e) {} + } + socket.on('error', errorHandler); + + // verify key presence + if (!req.headers['sec-websocket-key']) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + // verify version + var version = parseInt(req.headers['sec-websocket-version']); + if ([8, 13].indexOf(version) === -1) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + // verify protocol + var protocols = req.headers['sec-websocket-protocol']; + + // verify client + var origin = version < 13 ? + req.headers['sec-websocket-origin'] : + req.headers['origin']; + + // handle extensions offer + var extensionsOffer = Extensions.parse(req.headers['sec-websocket-extensions']); + + // handler to call when the connection sequence completes + var self = this; + var completeHybiUpgrade2 = function(protocol) { + + // calc key + var key = req.headers['sec-websocket-key']; + var shasum = crypto.createHash('sha1'); + shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); + key = shasum.digest('base64'); + + var headers = [ + 'HTTP/1.1 101 Switching Protocols' + , 'Upgrade: websocket' + , 'Connection: Upgrade' + , 'Sec-WebSocket-Accept: ' + key + ]; + + if (typeof protocol != 'undefined') { + headers.push('Sec-WebSocket-Protocol: ' + protocol); + } + + var extensions = {}; + try { + extensions = acceptExtensions.call(self, extensionsOffer); + } catch (err) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + if (Object.keys(extensions).length) { + var serverExtensions = {}; + Object.keys(extensions).forEach(function(token) { + serverExtensions[token] = [extensions[token].params] + }); + headers.push('Sec-WebSocket-Extensions: ' + Extensions.format(serverExtensions)); + } + + // allows external modification/inspection of handshake headers + self.emit('headers', headers); + + socket.setTimeout(0); + socket.setNoDelay(true); + try { + socket.write(headers.concat('', '').join('\r\n')); + } + catch (e) { + // if the upgrade write fails, shut the connection down hard + try { socket.destroy(); } catch (e) {} + return; + } + + var client = new WebSocket([req, socket, upgradeHead], { + protocolVersion: version, + protocol: protocol, + extensions: extensions + }); + + if (self.options.clientTracking) { + self.clients.push(client); + client.on('close', function() { + var index = self.clients.indexOf(client); + if (index != -1) { + self.clients.splice(index, 1); + } + }); + } + + // signal upgrade complete + socket.removeListener('error', errorHandler); + cb(client); + } + + // optionally call external protocol selection handler before + // calling completeHybiUpgrade2 + var completeHybiUpgrade1 = function() { + // choose from the sub-protocols + if (typeof self.options.handleProtocols == 'function') { + var protList = (protocols || "").split(/, */); + var callbackCalled = false; + var res = self.options.handleProtocols(protList, function(result, protocol) { + callbackCalled = true; + if (!result) abortConnection(socket, 401, 'Unauthorized'); + else completeHybiUpgrade2(protocol); + }); + if (!callbackCalled) { + // the handleProtocols handler never called our callback + abortConnection(socket, 501, 'Could not process protocols'); + } + return; + } else { + if (typeof protocols !== 'undefined') { + completeHybiUpgrade2(protocols.split(/, */)[0]); + } + else { + completeHybiUpgrade2(); + } + } + } + + // optionally call external client verification handler + if (typeof this.options.verifyClient == 'function') { + var info = { + origin: origin, + secure: typeof req.connection.authorized !== 'undefined' || typeof req.connection.encrypted !== 'undefined', + req: req + }; + if (this.options.verifyClient.length == 2) { + this.options.verifyClient(info, function(result, code, name) { + if (typeof code === 'undefined') code = 401; + if (typeof name === 'undefined') name = http.STATUS_CODES[code]; + + if (!result) abortConnection(socket, code, name); + else completeHybiUpgrade1(); + }); + return; + } + else if (!this.options.verifyClient(info)) { + abortConnection(socket, 401, 'Unauthorized'); + return; + } + } + + completeHybiUpgrade1(); +} + +function handleHixieUpgrade(req, socket, upgradeHead, cb) { + // handle premature socket errors + var errorHandler = function() { + try { socket.destroy(); } catch (e) {} + } + socket.on('error', errorHandler); + + // bail if options prevent hixie + if (this.options.disableHixie) { + abortConnection(socket, 401, 'Hixie support disabled'); + return; + } + + // verify key presence + if (!req.headers['sec-websocket-key2']) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + var origin = req.headers['origin'] + , self = this; + + // setup handshake completion to run after client has been verified + var onClientVerified = function() { + var wshost; + if (!req.headers['x-forwarded-host']) + wshost = req.headers.host; + else + wshost = req.headers['x-forwarded-host']; + var location = ((req.headers['x-forwarded-proto'] === 'https' || socket.encrypted) ? 'wss' : 'ws') + '://' + wshost + req.url + , protocol = req.headers['sec-websocket-protocol']; + + // handshake completion code to run once nonce has been successfully retrieved + var completeHandshake = function(nonce, rest) { + // calculate key + var k1 = req.headers['sec-websocket-key1'] + , k2 = req.headers['sec-websocket-key2'] + , md5 = crypto.createHash('md5'); + + [k1, k2].forEach(function (k) { + var n = parseInt(k.replace(/[^\d]/g, '')) + , spaces = k.replace(/[^ ]/g, '').length; + if (spaces === 0 || n % spaces !== 0){ + abortConnection(socket, 400, 'Bad Request'); + return; + } + n /= spaces; + md5.update(String.fromCharCode( + n >> 24 & 0xFF, + n >> 16 & 0xFF, + n >> 8 & 0xFF, + n & 0xFF)); + }); + md5.update(nonce.toString('binary')); + + var headers = [ + 'HTTP/1.1 101 Switching Protocols' + , 'Upgrade: WebSocket' + , 'Connection: Upgrade' + , 'Sec-WebSocket-Location: ' + location + ]; + if (typeof protocol != 'undefined') headers.push('Sec-WebSocket-Protocol: ' + protocol); + if (typeof origin != 'undefined') headers.push('Sec-WebSocket-Origin: ' + origin); + + socket.setTimeout(0); + socket.setNoDelay(true); + try { + // merge header and hash buffer + var headerBuffer = new Buffer(headers.concat('', '').join('\r\n')); + var hashBuffer = new Buffer(md5.digest('binary'), 'binary'); + var handshakeBuffer = new Buffer(headerBuffer.length + hashBuffer.length); + headerBuffer.copy(handshakeBuffer, 0); + hashBuffer.copy(handshakeBuffer, headerBuffer.length); + + // do a single write, which - upon success - causes a new client websocket to be setup + socket.write(handshakeBuffer, 'binary', function(err) { + if (err) return; // do not create client if an error happens + var client = new WebSocket([req, socket, rest], { + protocolVersion: 'hixie-76', + protocol: protocol + }); + if (self.options.clientTracking) { + self.clients.push(client); + client.on('close', function() { + var index = self.clients.indexOf(client); + if (index != -1) { + self.clients.splice(index, 1); + } + }); + } + + // signal upgrade complete + socket.removeListener('error', errorHandler); + cb(client); + }); + } + catch (e) { + try { socket.destroy(); } catch (e) {} + return; + } + } + + // retrieve nonce + var nonceLength = 8; + if (upgradeHead && upgradeHead.length >= nonceLength) { + var nonce = upgradeHead.slice(0, nonceLength); + var rest = upgradeHead.length > nonceLength ? upgradeHead.slice(nonceLength) : null; + completeHandshake.call(self, nonce, rest); + } + else { + // nonce not present in upgradeHead, so we must wait for enough data + // data to arrive before continuing + var nonce = new Buffer(nonceLength); + upgradeHead.copy(nonce, 0); + var received = upgradeHead.length; + var rest = null; + var handler = function (data) { + var toRead = Math.min(data.length, nonceLength - received); + if (toRead === 0) return; + data.copy(nonce, received, 0, toRead); + received += toRead; + if (received == nonceLength) { + socket.removeListener('data', handler); + if (toRead < data.length) rest = data.slice(toRead); + completeHandshake.call(self, nonce, rest); + } + } + socket.on('data', handler); + } + } + + // verify client + if (typeof this.options.verifyClient == 'function') { + var info = { + origin: origin, + secure: typeof req.connection.authorized !== 'undefined' || typeof req.connection.encrypted !== 'undefined', + req: req + }; + if (this.options.verifyClient.length == 2) { + var self = this; + this.options.verifyClient(info, function(result, code, name) { + if (typeof code === 'undefined') code = 401; + if (typeof name === 'undefined') name = http.STATUS_CODES[code]; + + if (!result) abortConnection(socket, code, name); + else onClientVerified.apply(self); + }); + return; + } + else if (!this.options.verifyClient(info)) { + abortConnection(socket, 401, 'Unauthorized'); + return; + } + } + + // no client verification required + onClientVerified(); +} + +function acceptExtensions(offer) { + var extensions = {}; + var options = this.options.perMessageDeflate; + if (options && offer[PerMessageDeflate.extensionName]) { + var perMessageDeflate = new PerMessageDeflate(options !== true ? options : {}, true); + perMessageDeflate.accept(offer[PerMessageDeflate.extensionName]); + extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + return extensions; +} + +function abortConnection(socket, code, name) { + try { + var response = [ + 'HTTP/1.1 ' + code + ' ' + name, + 'Content-type: text/html' + ]; + socket.write(response.concat('', '').join('\r\n')); + } + catch (e) { /* ignore errors - we've aborted this connection */ } + finally { + // ensure that an early aborted connection is shut down completely + try { socket.destroy(); } catch (e) {} + } +} diff --git a/platforms/android/assets/www/node_modules/ws/package.json b/platforms/android/assets/www/node_modules/ws/package.json new file mode 100644 index 0000000..b597874 --- /dev/null +++ b/platforms/android/assets/www/node_modules/ws/package.json @@ -0,0 +1,102 @@ +{ + "_args": [ + [ + "ws@^1.0.1", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver" + ] + ], + "_from": "ws@>=1.0.1 <2.0.0", + "_id": "ws@1.0.1", + "_inCache": true, + "_installable": true, + "_location": "/ws", + "_nodeVersion": "4.2.3", + "_npmUser": { + "email": "npm@3rd-Eden.com", + "name": "3rdeden" + }, + "_npmVersion": "3.5.1", + "_phantomChildren": {}, + "_requested": { + "name": "ws", + "raw": "ws@^1.0.1", + "rawSpec": "^1.0.1", + "scope": null, + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/selenium-webdriver" + ], + "_resolved": "https://registry.npmjs.org/ws/-/ws-1.0.1.tgz", + "_shasum": "7d0b2a2e58cddd819039c29c9de65045e1b310e9", + "_shrinkwrap": null, + "_spec": "ws@^1.0.1", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver", + "author": { + "email": "einaros@gmail.com", + "name": "Einar Otto Stangvik", + "url": "http://2x.io" + }, + "bugs": { + "url": "https://github.com/websockets/ws/issues" + }, + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + }, + "description": "simple to use, blazing fast and thoroughly tested websocket client, server and console for node.js, up-to-date against RFC-6455", + "devDependencies": { + "ansi": "0.3.x", + "benchmark": "0.3.x", + "bufferutil": "1.2.x", + "expect.js": "0.3.x", + "mocha": "2.3.x", + "should": "8.0.x", + "tinycolor": "0.0.x", + "utf-8-validate": "1.2.x" + }, + "directories": {}, + "dist": { + "shasum": "7d0b2a2e58cddd819039c29c9de65045e1b310e9", + "tarball": "http://registry.npmjs.org/ws/-/ws-1.0.1.tgz" + }, + "gitHead": "40a9d686288b5d0be13f2bf2f3f5da07afc8cda2", + "gypfile": true, + "homepage": "https://github.com/websockets/ws#readme", + "keywords": [ + "Hixie", + "HyBi", + "Push", + "RFC-6455", + "WebSocket", + "WebSockets", + "real-time" + ], + "license": "MIT", + "maintainers": [ + { + "email": "einaros@gmail.com", + "name": "einaros" + }, + { + "email": "info@3rd-Eden.com", + "name": "v1" + }, + { + "email": "npm@3rd-Eden.com", + "name": "3rdeden" + } + ], + "name": "ws", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/websockets/ws.git" + }, + "scripts": { + "test": "make test" + }, + "version": "1.0.1" +} diff --git a/platforms/android/assets/www/node_modules/xml2js/.npmignore b/platforms/android/assets/www/node_modules/xml2js/.npmignore new file mode 100644 index 0000000..ef7b9b9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/.npmignore @@ -0,0 +1,6 @@ +*.swp +.idea +node_modules +src +test +Cakefile \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/xml2js/.travis.yml b/platforms/android/assets/www/node_modules/xml2js/.travis.yml new file mode 100644 index 0000000..755a6b7 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/.travis.yml @@ -0,0 +1,5 @@ +language: node_js + +node_js: + - "0.8" + - "0.10" diff --git a/platforms/android/assets/www/node_modules/xml2js/83.coffee b/platforms/android/assets/www/node_modules/xml2js/83.coffee new file mode 100644 index 0000000..3443540 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/83.coffee @@ -0,0 +1,6 @@ +xml2js = require 'xml2js' +util = require 'util' + +body = 'Character data here!' +xml2js.parseString body, (err, result) -> + console.log util.inspect result, false, null diff --git a/platforms/android/assets/www/node_modules/xml2js/CONTRIBUTING.md b/platforms/android/assets/www/node_modules/xml2js/CONTRIBUTING.md new file mode 100644 index 0000000..2209adf --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/CONTRIBUTING.md @@ -0,0 +1,19 @@ +# How to contribute + +We're always happy about useful new pull requests. Keep in mind that the better +your pull request is, the easier it can be added to `xml2js`. As such please +make sure your patch is ok: + + * `xml2js` is written in CoffeeScript. Please don't send patches to + the JavaScript source, as it get's overwritten by the CoffeeScript + compiler. The reason we have the JS code in the repository is for easier + use with eg. `git submodule` + * Make sure that the unit tests still all pass. Failing unit tests mean that + someone *will* run into a bug, if we accept your pull request. + * Please, add a unit test with your pull request, to show what was broken and + is now fixed or what was impossible and now works due to your new code. + * If you add a new feature, please add some documentation that it exists. + +If you like, you can add yourself in the `package.json` as contributor if you +deem your contribution significant enough. Otherwise, we will decide and maybe +add you. diff --git a/platforms/android/assets/www/node_modules/xml2js/LICENSE b/platforms/android/assets/www/node_modules/xml2js/LICENSE new file mode 100644 index 0000000..e3b4222 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/LICENSE @@ -0,0 +1,19 @@ +Copyright 2010, 2011, 2012, 2013. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/xml2js/README.md b/platforms/android/assets/www/node_modules/xml2js/README.md new file mode 100644 index 0000000..4e01478 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/README.md @@ -0,0 +1,343 @@ +node-xml2js +=========== + +Ever had the urge to parse XML? And wanted to access the data in some sane, +easy way? Don't want to compile a C parser, for whatever reason? Then xml2js is +what you're looking for! + +Description +=========== + +Simple XML to JavaScript object converter. It supports bi-directional conversion. +Uses [sax-js](https://github.com/isaacs/sax-js/) and +[xmlbuilder-js](https://github.com/oozcitak/xmlbuilder-js/). + +Note: If you're looking for a full DOM parser, you probably want +[JSDom](https://github.com/tmpvar/jsdom). + +Installation +============ + +Simplest way to install `xml2js` is to use [npm](http://npmjs.org), just `npm +install xml2js` which will download xml2js and all dependencies. + +Usage +===== + +No extensive tutorials required because you are a smart developer! The task of +parsing XML should be an easy one, so let's make it so! Here's some examples. + +Shoot-and-forget usage +---------------------- + +You want to parse XML as simple and easy as possible? It's dangerous to go +alone, take this: + +```javascript +var parseString = require('xml2js').parseString; +var xml = "Hello xml2js!" +parseString(xml, function (err, result) { + console.dir(result); +}); +``` + +Can't get easier than this, right? This works starting with `xml2js` 0.2.3. +With CoffeeScript it looks like this: + +```coffeescript +{parseString} = require 'xml2js' +xml = "Hello xml2js!" +parseString xml, (err, result) -> + console.dir result +``` + +If you need some special options, fear not, `xml2js` supports a number of +options (see below), you can specify these as second argument: + +```javascript +parseString(xml, {trim: true}, function (err, result) { +}); +``` + +Simple as pie usage +------------------- + +That's right, if you have been using xml-simple or a home-grown +wrapper, this was added in 0.1.11 just for you: + +```javascript +var fs = require('fs'), + xml2js = require('xml2js'); + +var parser = new xml2js.Parser(); +fs.readFile(__dirname + '/foo.xml', function(err, data) { + parser.parseString(data, function (err, result) { + console.dir(result); + console.log('Done'); + }); +}); +``` + +Look ma, no event listeners! + +You can also use `xml2js` from +[CoffeeScript](http://jashkenas.github.com/coffee-script/), further reducing +the clutter: + +```coffeescript +fs = require 'fs', +xml2js = require 'xml2js' + +parser = new xml2js.Parser() +fs.readFile __dirname + '/foo.xml', (err, data) -> + parser.parseString data, (err, result) -> + console.dir result + console.log 'Done.' +``` + +But what happens if you forget the `new` keyword to create a new `Parser`? In +the middle of a nightly coding session, it might get lost, after all. Worry +not, we got you covered! Starting with 0.2.8 you can also leave it out, in +which case `xml2js` will helpfully add it for you, no bad surprises and +inexplicable bugs! + +"Traditional" usage +------------------- + +Alternatively you can still use the traditional `addListener` variant that was +supported since forever: + +```javascript +var fs = require('fs'), + xml2js = require('xml2js'); + +var parser = new xml2js.Parser(); +parser.addListener('end', function(result) { + console.dir(result); + console.log('Done.'); +}); +fs.readFile(__dirname + '/foo.xml', function(err, data) { + parser.parseString(data); +}); +``` + +If you want to parse multiple files, you have multiple possibilites: + + * You can create one `xml2js.Parser` per file. That's the recommended one + and is promised to always *just work*. + * You can call `reset()` on your parser object. + * You can hope everything goes well anyway. This behaviour is not + guaranteed work always, if ever. Use option #1 if possible. Thanks! + +So you wanna some JSON? +----------------------- + +Just wrap the `result` object in a call to `JSON.stringify` like this +`JSON.stringify(result)`. You get a string containing the JSON representation +of the parsed object that you can feed to JSON-hungry consumers. + +Displaying results +------------------ + +You might wonder why, using `console.dir` or `console.log` the output at some +level is only `[Object]`. Don't worry, this is not because xml2js got lazy. +That's because Node uses `util.inspect` to convert the object into strings and +that function stops after `depth=2` which is a bit low for most XML. + +To display the whole deal, you can use `console.log(util.inspect(result, false, +null))`, which displays the whole result. + +So much for that, but what if you use +[eyes](https://github.com/cloudhead/eyes.js) for nice colored output and it +truncates the output with `…`? Don't fear, there's also a solution for that, +you just need to increase the `maxLength` limit by creating a custom inspector +`var inspect = require('eyes').inspector({maxLength: false})` and then you can +easily `inspect(result)`. + +XML builder usage +----------------- + +Since 0.4.0, objects can be also be used to build XML: + +```javascript +var fs = require('fs'), + xml2js = require('xml2js'); + +var obj = {name: "Super", Surname: "Man", age: 23}; + +var builder = new xml2js.Builder(); +var xml = builder.buildObject(obj); +``` + +At the moment, a one to one bi-directional conversion is guaranteed only for +default configuration, except for `attrkey`, `charkey` and `explicitArray` options +you can redefine to your taste. Writing CDATA is not currently supported. + +Processing attribute and tag names +---------------------------------- + +Since 0.4.1 you can optionally provide the parser with attribute and tag name processors: + +```javascript + +function nameToUpperCase(name){ + return name.toUpperCase(); +} + +//transform all attribute and tag names to uppercase +parseString(xml, {tagNameProcessors: [nameToUpperCase], attrNameProcessors: [nameToUpperCase]}, function (err, result) { +}); +``` + +The `tagNameProcessors` and `attrNameProcessors` options both accept an `Array` of functions with the following signature: +```javascript +function (name){ + //do something with `name` + return name +} +``` + +Some processors are provided out-of-the-box and can be found in `lib/processors.js`: + +- `normalize`: transforms the name to lowercase. +(Automatically used when `options.normalize` is set to `true`) + +- `firstCharLowerCase`: transforms the first character to lower case. +E.g. 'MyTagName' becomes 'myTagName' + +- `stripPrefix`: strips the xml namespace prefix. E.g `` will become 'Bar'. +(N.B.: the `xmlns` prefix is NOT stripped.) + +Options +======= + +Apart from the default settings, there are a number of options that can be +specified for the parser. Options are specified by ``new Parser({optionName: +value})``. Possible options are: + + * `attrkey` (default: `$`): Prefix that is used to access the attributes. + Version 0.1 default was `@`. + * `charkey` (default: `_`): Prefix that is used to access the character + content. Version 0.1 default was `#`. + * `explicitCharkey` (default: `false`) + * `trim` (default: `false`): Trim the whitespace at the beginning and end of + text nodes. + * `normalizeTags` (default: `false`): Normalize all tag names to lowercase. + * `normalize` (default: `false`): Trim whitespaces inside text nodes. + * `explicitRoot` (default: `true`): Set this if you want to get the root + node in the resulting object. + * `emptyTag` (default: `undefined`): what will the value of empty nodes be. + Default is `{}`. + * `explicitArray` (default: `true`): Always put child nodes in an array if + true; otherwise an array is created only if there is more than one. + * `ignoreAttrs` (default: `false`): Ignore all XML attributes and only create + text nodes. + * `mergeAttrs` (default: `false`): Merge attributes and child elements as + properties of the parent, instead of keying attributes off a child + attribute object. This option is ignored if `ignoreAttrs` is `false`. + * `validator` (default `null`): You can specify a callable that validates + the resulting structure somehow, however you want. See unit tests + for an example. + * `xmlns` (default `false`): Give each element a field usually called '$ns' + (the first character is the same as attrkey) that contains its local name + and namespace URI. + * `explicitChildren` (default `false`): Put child elements to separate + property. Doesn't work with `mergeAttrs = true`. If element has no children + then "children" won't be created. Added in 0.2.5. + * `childkey` (default `$$`): Prefix that is used to access child elements if + `explicitChildren` is set to `true`. Added in 0.2.5. + * `charsAsChildren` (default `false`): Determines whether chars should be + considered children if `explicitChildren` is on. Added in 0.2.5. + * `async` (default `false`): Should the callbacks be async? This *might* be + an incompatible change if your code depends on sync execution of callbacks. + xml2js 0.3 might change this default, so the recommendation is to not + depend on sync execution anyway. Added in 0.2.6. + * `strict` (default `true`): Set sax-js to strict or non-strict parsing mode. + Defaults to `true` which is *highly* recommended, since parsing HTML which + is not well-formed XML might yield just about anything. Added in 0.2.7. + * `attrNameProcessors` (default: `null`): Allows the addition of attribute name processing functions. + Accepts an `Array` of functions with following signature: + ```javascript + function (name){ + //do something with `name` + return name + } + ``` + Added in 0.4.1 + * `tagNameProcessors` (default: `null`):Allows the addition of tag name processing functions. + Accepts an `Array` of functions with following signature: + ```javascript + function (name){ + //do something with `name` + return name + } + ``` + Added in 0.4.1 + +Options for the `Builder` class +------------------------------- + + * `rootName` (default `root`): root element name to be used in case + `explicitRoot` is `false` or to override the root element name. + * `renderOpts` (default `{ 'pretty': true, 'indent': ' ', 'newline': '\n' }`): + Rendering options for xmlbuilder-js. + * pretty: prettify generated XML + * indent: whitespace for indentation (only when pretty) + * newline: newline char (only when pretty) + * `xmldec` (default `{ 'version': '1.0', 'encoding': 'UTF-8', 'standalone': true }`: + XML declaration attributes. + * `xmldec.version` A version number string, e.g. 1.0 + * `xmldec.encoding` Encoding declaration, e.g. UTF-8 + * `xmldec.standalone` standalone document declaration: true or false + * `doctype` (default `null`): optional DTD. Eg. `{'ext': 'hello.dtd'}` + * `headless` (default: `false`): omit the XML header. Added in 0.4.3. + +`renderOpts`, `xmldec`,`doctype` and `headless` pass through to +[xmlbuilder-js](https://github.com/oozcitak/xmlbuilder-js). + +Updating to new version +======================= + +Version 0.2 changed the default parsing settings, but version 0.1.14 introduced +the default settings for version 0.2, so these settings can be tried before the +migration. + +```javascript +var xml2js = require('xml2js'); +var parser = new xml2js.Parser(xml2js.defaults["0.2"]); +``` + +To get the 0.1 defaults in version 0.2 you can just use +`xml2js.defaults["0.1"]` in the same place. This provides you with enough time +to migrate to the saner way of parsing in xml2js 0.2. We try to make the +migration as simple and gentle as possible, but some breakage cannot be +avoided. + +So, what exactly did change and why? In 0.2 we changed some defaults to parse +the XML in a more universal and sane way. So we disabled `normalize` and `trim` +so xml2js does not cut out any text content. You can reenable this at will of +course. A more important change is that we return the root tag in the resulting +JavaScript structure via the `explicitRoot` setting, so you need to access the +first element. This is useful for anybody who wants to know what the root node +is and preserves more information. The last major change was to enable +`explicitArray`, so everytime it is possible that one might embed more than one +sub-tag into a tag, xml2js >= 0.2 returns an array even if the array just +includes one element. This is useful when dealing with APIs that return +variable amounts of subtags. + +Running tests, development +========================== + +[![Build Status](https://secure.travis-ci.org/Leonidas-from-XIV/node-xml2js.png?branch=master)](https://travis-ci.org/Leonidas-from-XIV/node-xml2js) +[![Dependency Status](https://david-dm.org/Leonidas-from-XIV/node-xml2js.png)](https://david-dm.org/Leonidas-from-XIV/node-xml2js) + +The development requirements are handled by npm, you just need to install them. +We also have a number of unit tests, they can be run using `npm test` directly +from the project root. This runs zap to discover all the tests and execute +them. + +If you like to contribute, keep in mind that xml2js is written in CoffeeScript, +so don't develop on the JavaScript files that are checked into the repository +for convenience reasons. Also, please write some unit test to check your +behaviour and if it is some user-facing thing, add some documentation to this +README, so people will know it exists. Thanks in advance! diff --git a/platforms/android/assets/www/node_modules/xml2js/canon.xml b/platforms/android/assets/www/node_modules/xml2js/canon.xml new file mode 100644 index 0000000..f24ddd1 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/canon.xml @@ -0,0 +1,482 @@ + + + AF485783 + 14758 + double + DNA + circular + SYN + 15-MAY-2003 + 21-MAR-2002 + Binary vector pBI121, complete sequence + AF485783 + AF485783.1 + + gb|AF485783.1| + gi|19569229 + + Binary vector pBI121 + Binary vector pBI121 + other sequences; artificial sequences; vectors + + + 1 + 1..14758 + + Chen,P.Y. + Wang,C.K. + Soong,S.C. + To,K.Y. + + Complete sequence of the binary vector pBI121 and its application in cloning T-DNA insertion from transgenic plants + Mol. Breed. 11, 287-293 (2003) + + + 2 + 1..14758 + + To,K.Y. + + Direct Submission + Submitted (20-FEB-2002) Institute of BioAgricultural Sciences, Academia Sinica, Taipei 11529, Taiwan + + + + + source + 1..14758 + + + 1 + 14758 + AF485783.1 + + + + + organism + Binary vector pBI121 + + + mol_type + genomic DNA + + + db_xref + taxon:189807 + + + note + constructed using pB221 from Clontech Laboratories and Bin19 described in GenBank Accession Number U09365 + + + + + misc_feature + complement(13..796) + + + 796 + 13 + + AF485783.1 + + + + + note + similar to traF in GenBank Accession Number X54459 + + + + + rep_origin + complement(790..1168) + + + 1168 + 790 + + AF485783.1 + + + + + note + ColE1 ori; similar to sequence in GenBank Accession Number V00268 + + + + + misc_feature + complement(1161..2344) + + + 2344 + 1161 + + AF485783.1 + + + + + note + similar to tetA in GenBank Accession Number X75761 + + + + + misc_feature + complement(2454..2478) + + + 2478 + 2454 + + AF485783.1 + + + + + note + T-DNA right border + + + + + promoter + 2519..2825 + + + 2519 + 2825 + AF485783.1 + + + + + note + NOS + + + + + gene + 2838..3632 + + + 2838 + 3632 + AF485783.1 + + + + + gene + nptII + + + + + CDS + 2838..3632 + + + 2838 + 3632 + AF485783.1 + + + + + gene + nptII + + + codon_start + 1 + + + transl_table + 1 + + + product + neomycin phosphotransferase II + + + protein_id + AAL92039.1 + + + db_xref + GI:19569230 + + + translation + MIEQDGLHAGSPAAWVERLFGYDWAQQTIGCSDAAVFRLSAQGRPVLFVKTDLSGALNELQDEAARLSWLATTGVPCAAVLDVVTEAGRDWLLLGEVPGQDLLSSHLAPAEKVSIMADAMRRLHTLDPATCPFDHQAKHRIERARTRMEAGLVDQDDLDEEHQGLAPAELFARLKARMPDGDDLVVTHGDACLPNIMVENGRFSGFIDCGRLGVADRYQDIALATRDIAEELGGEWADRFLVLYGIAAPDSQRIAFYRLLDEFF + + + + + terminator + 4022..4277 + + + 4022 + 4277 + AF485783.1 + + + + + note + NOS + + + + + promoter + 4974..5808 + + + 4974 + 5808 + AF485783.1 + + + + + note + CaMV 35S + + + + + gene + 5845..7656 + + + 5845 + 7656 + AF485783.1 + + + + + gene + gusA + + + + + CDS + 5845..7656 + + + 5845 + 7656 + AF485783.1 + + + + + gene + gusA + + + note + GUS + + + codon_start + 1 + + + transl_table + 1 + + + product + beta-glucuronidase + + + protein_id + AAL92040.1 + + + db_xref + GI:19569231 + + + translation + MLRPVETPTREIKKLDGLWAFSLDRENCGIDQRWWESALQESRAIAVPGSFNDQFADADIRNYAGNVWYQREVFIPKGWAGQRIVLRFDAVTHYGKVWVNNQEVMEHQGGYTPFEADVTPYVIAGKSVRITVCVNNELNWQTIPPGMVITDENGKKKQSYFHDFFNYAGIHRSVMLYTTPNTWVDDITVVTHVAQDCNHASVDWQVVANGDVSVELRDADQQVVATGQGTSGTLQVVNPHLWQPGEGYLYELCVTAKSQTECDIYPLRVGIRSVAVKGEQFLINHKPFYFTGFGRHEDADLRGKGFDNVLMVHDHALMDWIGANSYRTSHYPYAEEMLDWADEHGIVVIDETAAVGFNLSLGIGFEAGNKPKELYSEEAVNGETQQAHLQAIKELIARDKNHPSVVMWSIANEPDTRPQGAREYFAPLAEATRKLDPTRPITCVNVMFCDAHTDTISDLFDVLCLNRYYGWYVQSGDLETAEKVLEKELLAWQEKLHQPIIITEYGVDTLAGLHSMYTDMWSEEYQCAWLDMYHRVFDRVSAVVGEQVWNFADFATSQGILRVGGNKKGIFTRDRKPKSAAFLLQKRWTGMNFGEKPQQGGKQ + + + + + terminator + 7727..7979 + + + 7727 + 7979 + AF485783.1 + + + + + note + NOS + + + + + misc_feature + complement(8621..8646) + + + 8646 + 8621 + + AF485783.1 + + + + + note + T-DNA left border + + + + + misc_feature + complement(9156..10198) + + + 10198 + 9156 + + AF485783.1 + + + + + note + similar to tetA in GenBank Accession Number L13842 + + + + + misc_feature + complement(10199..11680) + + + 11680 + 10199 + + AF485783.1 + + + + + note + similar to trfA in GenBank Accession Number X00713 + + + + + misc_feature + complement(11681..12673) + + + 12673 + 11681 + + AF485783.1 + + + + + note + similar to NPTIII gene in GenBank Accession Number V01547 + + + + + misc_feature + complement(12674..13443) + + + 13443 + 12674 + + AF485783.1 + + + + + note + similar to transposable element IS1 in GenBank Accession Number X58999 + + + + + misc_feature + complement(13444..13794) + + + 13794 + 13444 + + AF485783.1 + + + + + note + similarity to NPT III gene in GenBank Accession Number V01547 + + + + + misc_feature + complement(13795..14066) + + + 14066 + 13795 + + AF485783.1 + + + + + note + similar to kilA in GenBank Accession Number M62846 + + + + + rep_origin + complement(14141..14758) + + + 14758 + 14141 + + AF485783.1 + + + + + note + ori V; similar to sequence in GenBank Accession Number M20134 + + + + + tgagcgtcgcaaaggcgctcggtcttgccttgctcgtcggtgatgtacttcaccagctccgcgaagtcgctcttcttgatggagcgcatggggacgtgcttggcaatcacgcgcaccccccggccgttttagcggctaaaaaagtcatggctctgccctcgggcggaccacgcccatcatgaccttgccaagctcgtcctgcttctcttcgatcttcgccagcagggcgaggatcgtggcatcaccgaaccgcgccgtgcgcgggtcgtcggtgagccagagtttcagcaggccgcccaggcggcccaggtcgccattgatgcgggccagctcgcggacgtgctcatagtccacgacgcccgtgattttgtagccctggccgacggccagcaggtaggccgacaggctcatgccggccgccgccgccttttcctcaatcgctcttcgttcgtctggaaggcagtacaccttgataggtgggctgcccttcctggttggcttggtttcatcagccatccgcttgccctcatctgttacgccggcggtagccggccagcctcgcagagcaggattcccgttgagcaccgccaggtgcgaataagggacagtgaagaaggaacacccgctcgcgggtgggcctacttcacctatcctgcccggctgacgccgttggatacaccaaggaaagtctacacgaaccctttggcaaaatcctgtatatcgtgcgaaaaaggatggatataccgaaaaaatcgctataatgaccccgaagcagggttatgcagcggaaaagcgccacgcttcccgaagggagaaaggcggacaggtatccggtaagcggcagggtcggaacaggagagcgcacgagggagcttccagggggaaacgcctggtatctttatagtcctgtcgggtttcgccacctctgacttgagcgtcgatttttgtgatgctcgtcaggggggcggagcctatggaaaaacgccagcaacgcggcctttttacggttcctggccttttgctggccttttgctcacatgttctttcctgcgttatcccctgattctgtggataaccgtattaccgcctttgagtgagctgataccgctcgccgcagccgaacgaccgagcgcagcgagtcagtgagcgaggaagcggaagagcgccagaaggccgccagagaggccgagcgcggccgtgaggcttggacgctagggcagggcatgaaaaagcccgtagcgggctgctacgggcgtctgacgcggtggaaagggggaggggatgttgtctacatggctctgctgtagtgagtgggttgcgctccggcagcggtcctgatcaatcgtcaccctttctcggtccttcaacgttcctgacaacgagcctccttttcgccaatccatcgacaatcaccgcgagtccctgctcgaacgctgcgtccggaccggcttcgtcgaaggcgtctatcgcggcccgcaacagcggcgagagcggagcctgttcaacggtgccgccgcgctcgccggcatcgctgtcgccggcctgctcctcaagcacggccccaacagtgaagtagctgattgtcatcagcgcattgacggcgtccccggccgaaaaacccgcctcgcagaggaagcgaagctgcgcgtcggccgtttccatctgcggtgcgcccggtcgcgtgccggcatggatgcgcgcgccatcgcggtaggcgagcagcgcctgcctgaagctgcgggcattcccgatcagaaatgagcgccagtcgtcgtcggctctcggcaccgaatgcgtatgattctccgccagcatggcttcggccagtgcgtcgagcagcgcccgcttgttcctgaagtgccagtaaagcgccggctgctgaacccccaaccgttccgccagtttgcgtgtcgtcagaccgtctacgccgacctcgttcaacaggtccagggcggcacggatcactgtattcggctgcaactttgtcatgcttgacactttatcactgataaacataatatgtccaccaacttatcagtgataaagaatccgcgcgttcaatcggaccagcggaggctggtccggaggccagacgtgaaacccaacatacccctgatcgtaattctgagcactgtcgcgctcgacgctgtcggcatcggcctgattatgccggtgctgccgggcctcctgcgcgatctggttcactcgaacgacgtcaccgcccactatggcattctgctggcgctgtatgcgttggtgcaatttgcctgcgcacctgtgctgggcgcgctgtcggatcgtttcgggcggcggccaatcttgctcgtctcgctggccggcgccagatctggggaaccctgtggttggcatgcacatacaaatggacgaacggataaaccttttcacgcccttttaaatatccgattattctaataaacgctcttttctcttaggtttacccgccaatatatcctgtcaaacactgatagtttaaactgaaggcgggaaacgacaatctgatcatgagcggagaattaagggagtcacgttatgacccccgccgatgacgcgggacaagccgttttacgtttggaactgacagaaccgcaacgttgaaggagccactcagccgcgggtttctggagtttaatgagctaagcacatacgtcagaaaccattattgcgcgttcaaaagtcgcctaaggtcactatcagctagcaaatatttcttgtcaaaaatgctccactgacgttccataaattcccctcggtatccaattagagtctcatattcactctcaatccaaataatctgcaccggatctggatcgtttcgcatgattgaacaagatggattgcacgcaggttctccggccgcttgggtggagaggctattcggctatgactgggcacaacagacaatcggctgctctgatgccgccgtgttccggctgtcagcgcaggggcgcccggttctttttgtcaagaccgacctgtccggtgccctgaatgaactgcaggacgaggcagcgcggctatcgtggctggccacgacgggcgttccttgcgcagctgtgctcgacgttgtcactgaagcgggaagggactggctgctattgggcgaagtgccggggcaggatctcctgtcatctcaccttgctcctgccgagaaagtatccatcatggctgatgcaatgcggcggctgcatacgcttgatccggctacctgcccattcgaccaccaagcgaaacatcgcatcgagcgagcacgtactcggatggaagccggtcttgtcgatcaggatgatctggacgaagagcatcaggggctcgcgccagccgaactgttcgccaggctcaaggcgcgcatgcccgacggcgatgatctcgtcgtgacccatggcgatgcctgcttgccgaatatcatggtggaaaatggccgcttttctggattcatcgactgtggccggctgggtgtggcggaccgctatcaggacatagcgttggctacccgtgatattgctgaagagcttggcggcgaatgggctgaccgcttcctcgtgctttacggtatcgccgctcccgattcgcagcgcatcgccttctatcgccttcttgacgagttcttctgagcgggactctggggttcgaaatgaccgaccaagcgacgcccaacctgccatcacgagatttcgattccaccgccgccttctatgaaaggttgggcttcggaatcgttttccgggacgccggctggatgatcctccagcgcggggatctcatgctggagttcttcgcccacgggatctctgcggaacaggcggtcgaaggtgccgatatcattacgacagcaacggccgacaagcacaacgccacgatcctgagcgacaatatgatcgggcccggcgtccacatcaacggcgtcggcggcgactgcccaggcaagaccgagatgcaccgcgatatcttgctgcgttcggatattttcgtggagttcccgccacagacccggatgatccccgatcgttcaaacatttggcaataaagtttcttaagattgaatcctgttgccggtcttgcgatgattatcatataatttctgttgaattacgttaagcatgtaataattaacatgtaatgcatgacgttatttatgagatgggtttttatgattagagtcccgcaattatacatttaatacgcgatagaaaacaaaatatagcgcgcaaactaggataaattatcgcgcgcggtgtcatctatgttactagatcgggcctcctgtcaatgctggcggcggctctggtggtggttctggtggcggctctgagggtggtggctctgagggtggcggttctgagggtggcggctctgagggaggcggttccggtggtggctctggttccggtgattttgattatgaaaagatggcaaacgctaataagggggctatgaccgaaaatgccgatgaaaacgcgctacagtctgacgctaaaggcaaacttgattctgtcgctactgattacggtgctgctatcgatggtttcattggtgacgtttccggccttgctaatggtaatggtgctactggtgattttgctggctctaattcccaaatggctcaagtcggtgacggtgataattcacctttaatgaataatttccgtcaatatttaccttccctccctcaatcggttgaatgtcgcccttttgtctttggcccaatacgcaaaccgcctctccccgcgcgttggccgattcattaatgcagctggcacgacaggtttcccgactggaaagcgggcagtgagcgcaacgcaattaatgtgagttagctcactcattaggcaccccaggctttacactttatgcttccggctcgtatgttgtgtggaattgtgagcggataacaatttcacacaggaaacagctatgaccatgattacgccaagcttgcatgcctgcaggtccccagattagccttttcaatttcagaaagaatgctaacccacagatggttagagaggcttacgcagcaggtctcatcaagacgatctacccgagcaataatctccaggaaatcaaataccttcccaagaaggttaaagatgcagtcaaaagattcaggactaactgcatcaagaacacagagaaagatatatttctcaagatcagaagtactattccagtatggacgattcaaggcttgcttcacaaaccaaggcaagtaatagagattggagtctctaaaaaggtagttcccactgaatcaaaggccatggagtcaaagattcaaatagaggacctaacagaactcgccgtaaagactggcgaacagttcatacagagtctcttacgactcaatgacaagaagaaaatcttcgtcaacatggtggagcacgacacacttgtctactccaaaaatatcaaagatacagtctcagaagaccaaagggcaattgagacttttcaacaaagggtaatatccggaaacctcctcggattccattgcccagctatctgtcactttattgtgaagatagtggaaaaggaaggtggctcctacaaatgccatcattgcgataaaggaaaggccatcgttgaagatgcctctgccgacagtggtcccaaagatggacccccacccacgaggagcatcgtggaaaaagaagacgttccaaccacgtcttcaaagcaagtggattgatgtgatatctccactgacgtaagggatgacgcacaatcccactatccttcgcaagacccttcctctatataaggaagttcatttcatttggagagaacacgggggactctagaggatccccgggtggtcagtcccttatgttacgtcctgtagaaaccccaacccgtgaaatcaaaaaactcgacggcctgtgggcattcagtctggatcgcgaaaactgtggaattgatcagcgttggtgggaaagcgcgttacaagaaagccgggcaattgctgtgccaggcagttttaacgatcagttcgccgatgcagatattcgtaattatgcgggcaacgtctggtatcagcgcgaagtctttataccgaaaggttgggcaggccagcgtatcgtgctgcgtttcgatgcggtcactcattacggcaaagtgtgggtcaataatcaggaagtgatggagcatcagggcggctatacgccatttgaagccgatgtcacgccgtatgttattgccgggaaaagtgtacgtatcaccgtttgtgtgaacaacgaactgaactggcagactatcccgccgggaatggtgattaccgacgaaaacggcaagaaaaagcagtcttacttccatgatttctttaactatgccggaatccatcgcagcgtaatgctctacaccacgccgaacacctgggtggacgatatcaccgtggtgacgcatgtcgcgcaagactgtaaccacgcgtctgttgactggcaggtggtggccaatggtgatgtcagcgttgaactgcgtgatgcggatcaacaggtggttgcaactggacaaggcactagcgggactttgcaagtggtgaatccgcacctctggcaaccgggtgaaggttatctctatgaactgtgcgtcacagccaaaagccagacagagtgtgatatctacccgcttcgcgtcggcatccggtcagtggcagtgaagggcgaacagttcctgattaaccacaaaccgttctactttactggctttggtcgtcatgaagatgcggacttgcgtggcaaaggattcgataacgtgctgatggtgcacgaccacgcattaatggactggattggggccaactcctaccgtacctcgcattacccttacgctgaagagatgctcgactgggcagatgaacatggcatcgtggtgattgatgaaactgctgctgtcggctttaacctctctttaggcattggtttcgaagcgggcaacaagccgaaagaactgtacagcgaagaggcagtcaacggggaaactcagcaagcgcacttacaggcgattaaagagctgatagcgcgtgacaaaaaccacccaagcgtggtgatgtggagtattgccaacgaaccggatacccgtccgcaaggtgcacgggaatatttcgcgccactggcggaagcaacgcgtaaactcgacccgacgcgtccgatcacctgcgtcaatgtaatgttctgcgacgctcacaccgataccatcagcgatctctttgatgtgctgtgcctgaaccgttattacggatggtatgtccaaagcggcgatttggaaacggcagagaaggtactggaaaaagaacttctggcctggcaggagaaactgcatcagccgattatcatcaccgaatacggcgtggatacgttagccgggctgcactcaatgtacaccgacatgtggagtgaagagtatcagtgtgcatggctggatatgtatcaccgcgtctttgatcgcgtcagcgccgtcgtcggtgaacaggtatggaatttcgccgattttgcgacctcgcaaggcatattgcgcgttggcggtaacaagaaagggatcttcactcgcgaccgcaaaccgaagtcggcggcttttctgctgcaaaaacgctggactggcatgaacttcggtgaaaaaccgcagcagggaggcaaacaatgaatcaacaactctcctggcgcaccatcgtcggctacagcctcgggaattgctaccgagctcgaatttccccgatcgttcaaacatttggcaataaagtttcttaagattgaatcctgttgccggtcttgcgatgattatcatataatttctgttgaattacgttaagcatgtaataattaacatgtaatgcatgacgttatttatgagatgggtttttatgattagagtcccgcaattatacatttaatacgcgatagaaaacaaaatatagcgcgcaaactaggataaattatcgcgcgcggtgtcatctatgttactagatcgggaattcactggccgtcgttttacaacgtcgtgactgggaaaaccctggcgttacccaacttaatcgccttgcagcacatccccctttcgccagctggcgtaatagcgaagaggcccgcaccgatcgcccttcccaacagttgcgcagcctgaatggcgcccgctcctttcgctttcttcccttcctttctcgccacgttcgccggctttccccgtcaagctctaaatcgggggctccctttagggttccgatttagtgctttacggcacctcgaccccaaaaaacttgatttgggtgatggttcacgtagtgggccatcgccctgatagacggtttttcgccctttgacgttggagtccacgttctttaatagtggactcttgttccaaactggaacaacactcaaccctatctcgggctattcttttgatttataagggattttgccgatttcggaaccaccatcaaacaggattttcgcctgctggggcaaaccagcgtggaccgcttgctgcaactctctcagggccaggcggtgaagggcaatcagctgttgcccgtctcactggtgaaaagaaaaaccaccccagtacattaaaaacgtccgcaatgtgttattaagttgtctaagcgtcaatttgtttacaccacaatatatcctgccaccagccagccaacagctccccgaccggcagctcggcacaaaatcaccactcgatacaggcagcccatcagtccgggacggcgtcagcgggagagccgttgtaaggcggcagactttgctcatgttaccgatgctattcggaagaacggcaactaagctgccgggtttgaaacacggatgatctcgcggagggtagcatgttgattgtaacgatgacagagcgttgctgcctgtgatcaaatatcatctccctcgcagagatccgaattatcagccttcttattcatttctcgcttaaccgtgacaggctgtcgatcttgagaactatgccgacataataggaaatcgctggataaagccgctgaggaagctgagtggcgctatttctttagaagtgaacgttgacgatatcaactcccctatccattgctcaccgaatggtacaggtcggggacccgaagttccgactgtcggcctgatgcatccccggctgatcgaccccagatctggggctgagaaagcccagtaaggaaacaactgtaggttcgagtcgcgagatcccccggaaccaaaggaagtaggttaaacccgctccgatcaggccgagccacgccaggccgagaacattggttcctgtaggcatcgggattggcggatcaaacactaaagctactggaacgagcagaagtcctccggccgccagttgccaggcggtaaaggtgagcagaggcacgggaggttgccacttgcgggtcagcacggttccgaacgccatggaaaccgcccccgccaggcccgctgcgacgccgacaggatctagcgctgcgtttggtgtcaacaccaacagcgccacgcccgcagttccgcaaatagcccccaggaccgccatcaatcgtatcgggctacctagcagagcggcagagatgaacacgaccatcagcggctgcacagcgcctaccgtcgccgcgaccccgcccggcaggcggtagaccgaaataaacaacaagctccagaatagcgaaatattaagtgcgccgaggatgaagatgcgcatccaccagattcccgttggaatctgtcggacgatcatcacgagcaataaacccgccggcaacgcccgcagcagcataccggcgacccctcggcctcgctgttcgggctccacgaaaacgccggacagatgcgccttgtgagcgtccttggggccgtcctcctgtttgaagaccgacagcccaatgatctcgccgtcgatgtaggcgccgaatgccacggcatctcgcaaccgttcagcgaacgcctccatgggctttttctcctcgtgctcgtaaacggacccgaacatctctggagctttcttcagggccgacaatcggatctcgcggaaatcctgcacgtcggccgctccaagccgtcgaatctgagccttaatcacaattgtcaattttaatcctctgtttatcggcagttcgtagagcgcgccgtgcgtcccgagcgatactgagcgaagcaagtgcgtcgagcagtgcccgcttgttcctgaaatgccagtaaagcgctggctgctgaacccccagccggaactgaccccacaaggccctagcgtttgcaatgcaccaggtcatcattgacccaggcgtgttccaccaggccgctgcctcgcaactcttcgcaggcttcgccgacctgctcgcgccacttcttcacgcgggtggaatccgatccgcacatgaggcggaaggtttccagcttgagcgggtacggctcccggtgcgagctgaaatagtcgaacatccgtcgggccgtcggcgacagcttgcggtacttctcccatatgaatttcgtgtagtggtcgccagcaaacagcacgacgatttcctcgtcgatcaggacctggcaacgggacgttttcttgccacggtccaggacgcggaagcggtgcagcagcgacaccgattccaggtgcccaacgcggtcggacgtgaagcccatcgccgtcgcctgtaggcgcgacaggcattcctcggccttcgtgtaataccggccattgatcgaccagcccaggtcctggcaaagctcgtagaacgtgaaggtgatcggctcgccgataggggtgcgcttcgcgtactccaacacctgctgccacaccagttcgtcatcgtcggcccgcagctcgacgccggtgtaggtgatcttcacgtccttgttgacgtggaaaatgaccttgttttgcagcgcctcgcgcgggattttcttgttgcgcgtggtgaacagggcagagcgggccgtgtcgtttggcatcgctcgcatcgtgtccggccacggcgcaatatcgaacaaggaaagctgcatttccttgatctgctgcttcgtgtgtttcagcaacgcggcctgcttggcctcgctgacctgttttgccaggtcctcgccggcggtttttcgcttcttggtcgtcatagttcctcgcgtgtcgatggtcatcgacttcgccaaacctgccgcctcctgttcgagacgacgcgaacgctccacggcggccgatggcgcgggcagggcagggggagccagttgcacgctgtcgcgctcgatcttggccgtagcttgctggaccatcgagccgacggactggaaggtttcgcggggcgcacgcatgacggtgcggcttgcgatggtttcggcatcctcggcggaaaaccccgcgtcgatcagttcttgcctgtatgccttccggtcaaacgtccgattcattcaccctccttgcgggattgccccgactcacgccggggcaatgtgcccttattcctgatttgacccgcctggtgccttggtgtccagataatccaccttatcggcaatgaagtcggtcccgtagaccgtctggccgtccttctcgtacttggtattccgaatcttgccctgcacgaataccagcgaccccttgcccaaatacttgccgtgggcctcggcctgagagccaaaacacttgatgcggaagaagtcggtgcgctcctgcttgtcgccggcatcgttgcgccacatctaggtactaaaacaattcatccagtaaaatataatattttattttctcccaatcaggcttgatccccagtaagtcaaaaaatagctcgacatactgttcttccccgatatcctccctgatcgaccggacgcagaaggcaatgtcataccacttgtccgccctgccgcttctcccaagatcaataaagccacttactttgccatctttcacaaagatgttgctgtctcccaggtcgccgtgggaaaagacaagttcctcttcgggcttttccgtctttaaaaaatcatacagctcgcgcggatctttaaatggagtgtcttcttcccagttttcgcaatccacatcggccagatcgttattcagtaagtaatccaattcggctaagcggctgtctaagctattcgtatagggacaatccgatatgtcgatggagtgaaagagcctgatgcactccgcatacagctcgataatcttttcagggctttgttcatcttcatactcttccgagcaaaggacgccatcggcctcactcatgagcagattgctccagccatcatgccgttcaaagtgcaggacctttggaacaggcagctttccttccagccatagcatcatgtccttttcccgttccacatcataggtggtccctttataccggctgtccgtcatttttaaatataggttttcattttctcccaccagcttatataccttagcaggagacattccttccgtatcttttacgcagcggtatttttcgatcagttttttcaattccggtgatattctcattttagccatttattatttccttcctcttttctacagtatttaaagataccccaagaagctaattataacaagacgaactccaattcactgttccttgcattctaaaaccttaaataccagaaaacagctttttcaaagttgttttcaaagttggcgtataacatagtatcgacggagccgattttgaaaccacaattatgggtgatgctgccaacttactgatttagtgtatgatggtgtttttgaggtgctccagtggcttctgtgtctatcagctgtccctcctgttcagctactgacggggtggtgcgtaacggcaaaagcaccgccggacatcagcgctatctctgctctcactgccgtaaaacatggcaactgcagttcacttacaccgcttctcaacccggtacgcaccagaaaatcattgatatggccatgaatggcgttggatgccgggcaacagcccgcattatgggcgttggcctcaacacgattttacgtcacttaaaaaactcaggccgcagtcggtaacctcgcgcatacagccgggcagtgacgtcatcgtctgcgcggaaatggacgaacagtggggctatgtcggggctaaatcgcgccagcgctggctgttttacgcgtatgacagtctccggaagacggttgttgcgcacgtattcggtgaacgcactatggcgacgctggggcgtcttatgagcctgctgtcaccctttgacgtggtgatatggatgacggatggctggccgctgtatgaatcccgcctgaagggaaagctgcacgtaatcagcaagcgatatacgcagcgaattgagcggcataacctgaatctgaggcagcacctggcacggctgggacggaagtcgctgtcgttctcaaaatcggtggagctgcatgacaaagtcatcgggcattatctgaacataaaacactatcaataagttggagtcattacccaattatgatagaatttacaagctataaggttattgtcctgggtttcaagcattagtccatgcaagtttttatgctttgcccattctatagatatattgataagcgcgctgcctatgccttgccccctgaaatccttacatacggcgatatcttctatataaaagatatattatcttatcagtattgtcaatatattcaaggcaatctgcctcctcatcctcttcatcctcttcgtcttggtagctttttaaatatggcgcttcatagagtaattctgtaaaggtccaattctcgttttcatacctcggtataatcttacctatcacctcaaatggttcgctgggtttatcgcacccccgaacacgagcacggcacccgcgaccactatgccaagaatgcccaaggtaaaaattgccggccccgccatgaagtccgtgaatgccccgacggccgaagtgaagggcaggccgccacccaggccgccgccctcactgcccggcacctggtcgctgaatgtcgatgccagcacctgcggcacgtcaatgcttccgggcgtcgcgctcgggctgatcgcccatcccgttactgccccgatcccggcaatggcaaggactgccagcgctgccatttttggggtgaggccgttcgcggccgaggggcgcagcccctggggggatgggaggcccgcgttagcgggccgggagggttcgagaagggggggcaccccccttcggcgtgcgcggtcacgcgcacagggcgcagccctggttaaaaacaaggtttataaatattggtttaaaagcaggttaaaagacaggttagcggtggccgaaaaacgggcggaaacccttgcaaatgctggattttctgcctgtggacagcccctcaaatgtcaataggtgcgcccctcatctgtcagcactctgcccctcaagtgtcaaggatcgcgcccctcatctgtcagtagtcgcgcccctcaagtgtcaataccgcagggcacttatccccaggcttgtccacatcatctgtgggaaactcgcgtaaaatcaggcgttttcgccgatttgcgaggctggccagctccacgtcgccggccgaaatcgagcctgcccctcatctgtcaacgccgcgccgggtgagtcggcccctcaagtgtcaacgtccgcccctcatctgtcagtgagggccaagttttccgcgaggtatccacaacgccggcggccgcggtgtctcgcacacggcttcgacggcgtttctggcgcgtttgcagggccatagacggccgccagcccagcggcgagggcaaccagcccgg + + + \ No newline at end of file diff --git a/platforms/android/assets/www/node_modules/xml2js/incompat.coffee b/platforms/android/assets/www/node_modules/xml2js/incompat.coffee new file mode 100644 index 0000000..5533965 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/incompat.coffee @@ -0,0 +1,5 @@ +{parseString} = require './lib/xml2js' +xml = '' +parseString xml, (err, result) -> + console.dir result + diff --git a/platforms/android/assets/www/node_modules/xml2js/incompat2.js b/platforms/android/assets/www/node_modules/xml2js/incompat2.js new file mode 100644 index 0000000..31cfbc8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/incompat2.js @@ -0,0 +1,7 @@ +var xml2js = require('xml2js'); +var parser = new xml2js.Parser({ + mergeAttrs: true +}); +parser.parseString('', function (err, result) { + console.dir(result); +}); diff --git a/platforms/android/assets/www/node_modules/xml2js/lib/bom.js b/platforms/android/assets/www/node_modules/xml2js/lib/bom.js new file mode 100644 index 0000000..d7f226e --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/lib/bom.js @@ -0,0 +1,15 @@ +// Generated by CoffeeScript 1.7.1 +(function() { + var xml2js; + + xml2js = require('../lib/xml2js'); + + exports.stripBOM = function(str) { + if (str[0] === '\uFEFF') { + return str.substring(1); + } else { + return str; + } + }; + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xml2js/lib/processors.js b/platforms/android/assets/www/node_modules/xml2js/lib/processors.js new file mode 100644 index 0000000..aeadaef --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/lib/processors.js @@ -0,0 +1,19 @@ +// Generated by CoffeeScript 1.7.1 +(function() { + var prefixMatch; + + prefixMatch = new RegExp(/(?!xmlns)^.*:/); + + exports.normalize = function(str) { + return str.toLowerCase(); + }; + + exports.firstCharLowerCase = function(str) { + return str.charAt(0).toLowerCase() + str.slice(1); + }; + + exports.stripPrefix = function(str) { + return str.replace(prefixMatch, ''); + }; + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xml2js/lib/xml2js.js b/platforms/android/assets/www/node_modules/xml2js/lib/xml2js.js new file mode 100644 index 0000000..7c1cad3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/lib/xml2js.js @@ -0,0 +1,436 @@ +// Generated by CoffeeScript 1.7.1 +(function() { + var bom, builder, events, isEmpty, processName, processors, sax, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + sax = require('sax'); + + events = require('events'); + + builder = require('xmlbuilder'); + + bom = require('./bom'); + + processors = require('./processors'); + + isEmpty = function(thing) { + return typeof thing === "object" && (thing != null) && Object.keys(thing).length === 0; + }; + + processName = function(processors, processedName) { + var process, _i, _len; + for (_i = 0, _len = processors.length; _i < _len; _i++) { + process = processors[_i]; + processedName = process(processedName); + } + return processedName; + }; + + exports.processors = processors; + + exports.defaults = { + "0.1": { + explicitCharkey: false, + trim: true, + normalize: true, + normalizeTags: false, + attrkey: "@", + charkey: "#", + explicitArray: false, + ignoreAttrs: false, + mergeAttrs: false, + explicitRoot: false, + validator: null, + xmlns: false, + explicitChildren: false, + childkey: '@@', + charsAsChildren: false, + async: false, + strict: true, + attrNameProcessors: null, + tagNameProcessors: null + }, + "0.2": { + explicitCharkey: false, + trim: false, + normalize: false, + normalizeTags: false, + attrkey: "$", + charkey: "_", + explicitArray: true, + ignoreAttrs: false, + mergeAttrs: false, + explicitRoot: true, + validator: null, + xmlns: false, + explicitChildren: false, + childkey: '$$', + charsAsChildren: false, + async: false, + strict: true, + attrNameProcessors: null, + tagNameProcessors: null, + rootName: 'root', + xmldec: { + 'version': '1.0', + 'encoding': 'UTF-8', + 'standalone': true + }, + doctype: null, + renderOpts: { + 'pretty': true, + 'indent': ' ', + 'newline': '\n' + }, + headless: false + } + }; + + exports.ValidationError = (function(_super) { + __extends(ValidationError, _super); + + function ValidationError(message) { + this.message = message; + } + + return ValidationError; + + })(Error); + + exports.Builder = (function() { + function Builder(opts) { + var key, value, _ref; + this.options = {}; + _ref = exports.defaults["0.2"]; + for (key in _ref) { + if (!__hasProp.call(_ref, key)) continue; + value = _ref[key]; + this.options[key] = value; + } + for (key in opts) { + if (!__hasProp.call(opts, key)) continue; + value = opts[key]; + this.options[key] = value; + } + } + + Builder.prototype.buildObject = function(rootObj) { + var attrkey, charkey, render, rootElement, rootName; + attrkey = this.options.attrkey; + charkey = this.options.charkey; + if ((Object.keys(rootObj).length === 1) && (this.options.rootName === exports.defaults['0.2'].rootName)) { + rootName = Object.keys(rootObj)[0]; + rootObj = rootObj[rootName]; + } else { + rootName = this.options.rootName; + } + render = function(element, obj) { + var attr, child, entry, index, key, value, _ref, _ref1; + if (typeof obj !== 'object') { + element.txt(obj); + } else { + for (key in obj) { + if (!__hasProp.call(obj, key)) continue; + child = obj[key]; + if (key === attrkey) { + if (typeof child === "object") { + for (attr in child) { + value = child[attr]; + element = element.att(attr, value); + } + } + } else if (key === charkey) { + element = element.txt(child); + } else if (typeof child === 'object' && ((child != null ? child.constructor : void 0) != null) && ((child != null ? (_ref = child.constructor) != null ? _ref.name : void 0 : void 0) != null) && (child != null ? (_ref1 = child.constructor) != null ? _ref1.name : void 0 : void 0) === 'Array') { + for (index in child) { + if (!__hasProp.call(child, index)) continue; + entry = child[index]; + if (typeof entry === 'string') { + element = element.ele(key, entry).up(); + } else { + element = arguments.callee(element.ele(key), entry).up(); + } + } + } else if (typeof child === "object") { + element = arguments.callee(element.ele(key), child).up(); + } else { + element = element.ele(key, child.toString()).up(); + } + } + } + return element; + }; + rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, { + headless: this.options.headless + }); + return render(rootElement, rootObj).end(this.options.renderOpts); + }; + + return Builder; + + })(); + + exports.Parser = (function(_super) { + __extends(Parser, _super); + + function Parser(opts) { + this.parseString = __bind(this.parseString, this); + this.reset = __bind(this.reset, this); + this.assignOrPush = __bind(this.assignOrPush, this); + var key, value, _ref; + if (!(this instanceof exports.Parser)) { + return new exports.Parser(opts); + } + this.options = {}; + _ref = exports.defaults["0.2"]; + for (key in _ref) { + if (!__hasProp.call(_ref, key)) continue; + value = _ref[key]; + this.options[key] = value; + } + for (key in opts) { + if (!__hasProp.call(opts, key)) continue; + value = opts[key]; + this.options[key] = value; + } + if (this.options.xmlns) { + this.options.xmlnskey = this.options.attrkey + "ns"; + } + if (this.options.normalizeTags) { + if (!this.options.tagNameProcessors) { + this.options.tagNameProcessors = []; + } + this.options.tagNameProcessors.unshift(processors.normalize); + } + this.reset(); + } + + Parser.prototype.assignOrPush = function(obj, key, newValue) { + if (!(key in obj)) { + if (!this.options.explicitArray) { + return obj[key] = newValue; + } else { + return obj[key] = [newValue]; + } + } else { + if (!(obj[key] instanceof Array)) { + obj[key] = [obj[key]]; + } + return obj[key].push(newValue); + } + }; + + Parser.prototype.reset = function() { + var attrkey, charkey, ontext, stack; + this.removeAllListeners(); + this.saxParser = sax.parser(this.options.strict, { + trim: false, + normalize: false, + xmlns: this.options.xmlns + }); + this.saxParser.errThrown = false; + this.saxParser.onerror = (function(_this) { + return function(error) { + _this.saxParser.resume(); + if (!_this.saxParser.errThrown) { + _this.saxParser.errThrown = true; + return _this.emit("error", error); + } + }; + })(this); + this.saxParser.ended = false; + this.EXPLICIT_CHARKEY = this.options.explicitCharkey; + this.resultObject = null; + stack = []; + attrkey = this.options.attrkey; + charkey = this.options.charkey; + this.saxParser.onopentag = (function(_this) { + return function(node) { + var key, newValue, obj, processedKey, _ref; + obj = {}; + obj[charkey] = ""; + if (!_this.options.ignoreAttrs) { + _ref = node.attributes; + for (key in _ref) { + if (!__hasProp.call(_ref, key)) continue; + if (!(attrkey in obj) && !_this.options.mergeAttrs) { + obj[attrkey] = {}; + } + newValue = node.attributes[key]; + processedKey = _this.options.attrNameProcessors ? processName(_this.options.attrNameProcessors, key) : key; + if (_this.options.mergeAttrs) { + _this.assignOrPush(obj, processedKey, newValue); + } else { + obj[attrkey][processedKey] = newValue; + } + } + } + obj["#name"] = _this.options.tagNameProcessors ? processName(_this.options.tagNameProcessors, node.name) : node.name; + if (_this.options.xmlns) { + obj[_this.options.xmlnskey] = { + uri: node.uri, + local: node.local + }; + } + return stack.push(obj); + }; + })(this); + this.saxParser.onclosetag = (function(_this) { + return function() { + var cdata, emptyStr, err, node, nodeName, obj, old, s, xpath; + obj = stack.pop(); + nodeName = obj["#name"]; + delete obj["#name"]; + cdata = obj.cdata; + delete obj.cdata; + s = stack[stack.length - 1]; + if (obj[charkey].match(/^\s*$/) && !cdata) { + emptyStr = obj[charkey]; + delete obj[charkey]; + } else { + if (_this.options.trim) { + obj[charkey] = obj[charkey].trim(); + } + if (_this.options.normalize) { + obj[charkey] = obj[charkey].replace(/\s{2,}/g, " ").trim(); + } + if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) { + obj = obj[charkey]; + } + } + if (isEmpty(obj)) { + obj = _this.options.emptyTag !== void 0 ? _this.options.emptyTag : emptyStr; + } + if (_this.options.validator != null) { + xpath = "/" + ((function() { + var _i, _len, _results; + _results = []; + for (_i = 0, _len = stack.length; _i < _len; _i++) { + node = stack[_i]; + _results.push(node["#name"]); + } + return _results; + })()).concat(nodeName).join("/"); + try { + obj = _this.options.validator(xpath, s && s[nodeName], obj); + } catch (_error) { + err = _error; + _this.emit("error", err); + } + } + if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') { + node = {}; + if (_this.options.attrkey in obj) { + node[_this.options.attrkey] = obj[_this.options.attrkey]; + delete obj[_this.options.attrkey]; + } + if (!_this.options.charsAsChildren && _this.options.charkey in obj) { + node[_this.options.charkey] = obj[_this.options.charkey]; + delete obj[_this.options.charkey]; + } + if (Object.getOwnPropertyNames(obj).length > 0) { + node[_this.options.childkey] = obj; + } + obj = node; + } + if (stack.length > 0) { + return _this.assignOrPush(s, nodeName, obj); + } else { + if (_this.options.explicitRoot) { + old = obj; + obj = {}; + obj[nodeName] = old; + } + _this.resultObject = obj; + _this.saxParser.ended = true; + return _this.emit("end", _this.resultObject); + } + }; + })(this); + ontext = (function(_this) { + return function(text) { + var s; + s = stack[stack.length - 1]; + if (s) { + s[charkey] += text; + return s; + } + }; + })(this); + this.saxParser.ontext = ontext; + return this.saxParser.oncdata = (function(_this) { + return function(text) { + var s; + s = ontext(text); + if (s) { + return s.cdata = true; + } + }; + })(this); + }; + + Parser.prototype.parseString = function(str, cb) { + var err; + if ((cb != null) && typeof cb === "function") { + this.on("end", function(result) { + this.reset(); + if (this.options.async) { + return process.nextTick(function() { + return cb(null, result); + }); + } else { + return cb(null, result); + } + }); + this.on("error", function(err) { + this.reset(); + if (this.options.async) { + return process.nextTick(function() { + return cb(err); + }); + } else { + return cb(err); + } + }); + } + if (str.toString().trim() === '') { + this.emit("end", null); + return true; + } + try { + return this.saxParser.write(bom.stripBOM(str.toString())).close(); + } catch (_error) { + err = _error; + if (!(this.saxParser.errThrown || this.saxParser.ended)) { + this.emit('error', err); + return this.saxParser.errThrown = true; + } + } + }; + + return Parser; + + })(events.EventEmitter); + + exports.parseString = function(str, a, b) { + var cb, options, parser; + if (b != null) { + if (typeof b === 'function') { + cb = b; + } + if (typeof a === 'object') { + options = a; + } + } else { + if (typeof a === 'function') { + cb = a; + } + options = {}; + } + parser = new exports.Parser(options); + return parser.parseString(str, cb); + }; + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xml2js/package.json b/platforms/android/assets/www/node_modules/xml2js/package.json new file mode 100644 index 0000000..a4c768f --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/package.json @@ -0,0 +1,211 @@ +{ + "_args": [ + [ + "xml2js@0.4.4", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver" + ] + ], + "_from": "xml2js@0.4.4", + "_id": "xml2js@0.4.4", + "_inCache": true, + "_installable": true, + "_location": "/xml2js", + "_npmUser": { + "email": "marek@xivilization.net", + "name": "leonidas" + }, + "_npmVersion": "1.4.9", + "_phantomChildren": {}, + "_requested": { + "name": "xml2js", + "raw": "xml2js@0.4.4", + "rawSpec": "0.4.4", + "scope": null, + "spec": "0.4.4", + "type": "version" + }, + "_requiredBy": [ + "/selenium-webdriver" + ], + "_resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", + "_shasum": "3111010003008ae19240eba17497b57c729c555d", + "_shrinkwrap": null, + "_spec": "xml2js@0.4.4", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/selenium-webdriver", + "author": { + "email": "marek@xivilization.net", + "name": "Marek Kubica", + "url": "http://xivilization.net" + }, + "bugs": { + "url": "https://github.com/Leonidas-from-XIV/node-xml2js/issues" + }, + "contributors": [ + { + "email": "maqr.lollerskates@gmail.com", + "name": "maqr", + "url": "https://github.com/maqr" + }, + { + "name": "Ben Weaver", + "url": "http://benweaver.com/" + }, + { + "name": "Jae Kwon", + "url": "https://github.com/jaekwon" + }, + { + "name": "Jim Robert" + }, + { + "name": "Ștefan Rusu", + "url": "http://www.saltwaterc.eu/" + }, + { + "email": "carter.cole@cartercole.com", + "name": "Carter Cole", + "url": "http://cartercole.com/" + }, + { + "email": "kurt@kurtraschke.com", + "name": "Kurt Raschke", + "url": "http://www.kurtraschke.com/" + }, + { + "email": "contra@australia.edu", + "name": "Contra", + "url": "https://github.com/Contra" + }, + { + "email": "marudiniz@gmail.com", + "name": "Marcelo Diniz", + "url": "https://github.com/mdiniz" + }, + { + "name": "Michael Hart", + "url": "https://github.com/mhart" + }, + { + "email": "zachary@zacharyscott.net", + "name": "Zachary Scott", + "url": "http://zacharyscott.net/" + }, + { + "name": "Raoul Millais", + "url": "https://github.com/raoulmillais" + }, + { + "name": "Salsita Software", + "url": "http://www.salsitasoft.com/" + }, + { + "email": "mike@emotive.com", + "name": "Mike Schilling", + "url": "http://www.emotive.com/" + }, + { + "email": "shyvo1987@gmail.com", + "name": "Jackson Tian", + "url": "http://weibo.com/shyvo" + }, + { + "email": "mikhail.zyatin@gmail.com", + "name": "Mikhail Zyatin", + "url": "https://github.com/Sitin" + }, + { + "email": "ctavares@microsoft.com", + "name": "Chris Tavares", + "url": "https://github.com/christav" + }, + { + "email": "yyfrankyy@gmail.com", + "name": "Frank Xu", + "url": "http://f2e.us/" + }, + { + "email": "guido@bitstorm.it", + "name": "Guido D'Albore", + "url": "http://www.bitstorm.it/" + }, + { + "name": "Jack Senechal", + "url": "http://jacksenechal.com/" + }, + { + "email": "tc@xantira.com", + "name": "Matthias Hölzl", + "url": "https://github.com/hoelzl" + }, + { + "email": "info@creynders.be", + "name": "Camille Reynders", + "url": "http://www.creynders.be/" + }, + { + "name": "Taylor Gautier", + "url": "https://github.com/tsgautier" + }, + { + "name": "Todd Bryan", + "url": "https://github.com/toddrbryan" + }, + { + "email": "leore.avidar@gmail.com", + "name": "Leore Avidar", + "url": "http://leoreavidar.com/" + }, + { + "email": "dave.aitken@gmail.com", + "name": "Dave Aitken", + "url": "http://www.actionshrimp.com/" + } + ], + "dependencies": { + "sax": "0.6.x", + "xmlbuilder": ">=1.0.0" + }, + "description": "Simple XML to JavaScript object converter.", + "devDependencies": { + "coffee-script": ">=1.7.1", + "diff": ">=1.0.8", + "docco": ">=0.6.2", + "zap": ">=0.2.6" + }, + "directories": { + "lib": "./lib" + }, + "dist": { + "shasum": "3111010003008ae19240eba17497b57c729c555d", + "tarball": "http://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz" + }, + "homepage": "https://github.com/Leonidas-from-XIV/node-xml2js", + "keywords": [ + "xml", + "json" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/Leonidas-from-XIV/node-xml2js/master/LICENSE" + } + ], + "main": "./lib/xml2js", + "maintainers": [ + { + "email": "marek@xivilization.net", + "name": "leonidas" + } + ], + "name": "xml2js", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/Leonidas-from-XIV/node-xml2js.git" + }, + "scripts": { + "test": "zap" + }, + "version": "0.4.4" +} diff --git a/platforms/android/assets/www/node_modules/xml2js/text.coffee b/platforms/android/assets/www/node_modules/xml2js/text.coffee new file mode 100644 index 0000000..c5d8c66 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/text.coffee @@ -0,0 +1,11 @@ +fs = require 'fs' +xml2js = require 'xml2js' + +parser = new xml2js.Parser + +fs.readFile 'canon.xml', (err, data) -> + console.log err + parser.parseString (err, result) -> + console.log err + console.dir result + diff --git a/platforms/android/assets/www/node_modules/xml2js/text.xml b/platforms/android/assets/www/node_modules/xml2js/text.xml new file mode 100644 index 0000000..bd3b482 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/text.xml @@ -0,0 +1,485 @@ + + + + + AF485783 + 14758 + double + DNA + circular + SYN + 15-MAY-2003 + 21-MAR-2002 + Binary vector pBI121, complete sequence + AF485783 + AF485783.1 + + gb|AF485783.1| + gi|19569229 + + Binary vector pBI121 + Binary vector pBI121 + other sequences; artificial sequences; vectors + + + 1 + 1..14758 + + Chen,P.Y. + Wang,C.K. + Soong,S.C. + To,K.Y. + + Complete sequence of the binary vector pBI121 and its application in cloning T-DNA insertion from transgenic plants + Mol. Breed. 11, 287-293 (2003) + + + 2 + 1..14758 + + To,K.Y. + + Direct Submission + Submitted (20-FEB-2002) Institute of BioAgricultural Sciences, Academia Sinica, Taipei 11529, Taiwan + + + + + source + 1..14758 + + + 1 + 14758 + AF485783.1 + + + + + organism + Binary vector pBI121 + + + mol_type + genomic DNA + + + db_xref + taxon:189807 + + + note + constructed using pB221 from Clontech Laboratories and Bin19 described in GenBank Accession Number U09365 + + + + + misc_feature + complement(13..796) + + + 796 + 13 + + AF485783.1 + + + + + note + similar to traF in GenBank Accession Number X54459 + + + + + rep_origin + complement(790..1168) + + + 1168 + 790 + + AF485783.1 + + + + + note + ColE1 ori; similar to sequence in GenBank Accession Number V00268 + + + + + misc_feature + complement(1161..2344) + + + 2344 + 1161 + + AF485783.1 + + + + + note + similar to tetA in GenBank Accession Number X75761 + + + + + misc_feature + complement(2454..2478) + + + 2478 + 2454 + + AF485783.1 + + + + + note + T-DNA right border + + + + + promoter + 2519..2825 + + + 2519 + 2825 + AF485783.1 + + + + + note + NOS + + + + + gene + 2838..3632 + + + 2838 + 3632 + AF485783.1 + + + + + gene + nptII + + + + + CDS + 2838..3632 + + + 2838 + 3632 + AF485783.1 + + + + + gene + nptII + + + codon_start + 1 + + + transl_table + 1 + + + product + neomycin phosphotransferase II + + + protein_id + AAL92039.1 + + + db_xref + GI:19569230 + + + translation + MIEQDGLHAGSPAAWVERLFGYDWAQQTIGCSDAAVFRLSAQGRPVLFVKTDLSGALNELQDEAARLSWLATTGVPCAAVLDVVTEAGRDWLLLGEVPGQDLLSSHLAPAEKVSIMADAMRRLHTLDPATCPFDHQAKHRIERARTRMEAGLVDQDDLDEEHQGLAPAELFARLKARMPDGDDLVVTHGDACLPNIMVENGRFSGFIDCGRLGVADRYQDIALATRDIAEELGGEWADRFLVLYGIAAPDSQRIAFYRLLDEFF + + + + + terminator + 4022..4277 + + + 4022 + 4277 + AF485783.1 + + + + + note + NOS + + + + + promoter + 4974..5808 + + + 4974 + 5808 + AF485783.1 + + + + + note + CaMV 35S + + + + + gene + 5845..7656 + + + 5845 + 7656 + AF485783.1 + + + + + gene + gusA + + + + + CDS + 5845..7656 + + + 5845 + 7656 + AF485783.1 + + + + + gene + gusA + + + note + GUS + + + codon_start + 1 + + + transl_table + 1 + + + product + beta-glucuronidase + + + protein_id + AAL92040.1 + + + db_xref + GI:19569231 + + + translation + MLRPVETPTREIKKLDGLWAFSLDRENCGIDQRWWESALQESRAIAVPGSFNDQFADADIRNYAGNVWYQREVFIPKGWAGQRIVLRFDAVTHYGKVWVNNQEVMEHQGGYTPFEADVTPYVIAGKSVRITVCVNNELNWQTIPPGMVITDENGKKKQSYFHDFFNYAGIHRSVMLYTTPNTWVDDITVVTHVAQDCNHASVDWQVVANGDVSVELRDADQQVVATGQGTSGTLQVVNPHLWQPGEGYLYELCVTAKSQTECDIYPLRVGIRSVAVKGEQFLINHKPFYFTGFGRHEDADLRGKGFDNVLMVHDHALMDWIGANSYRTSHYPYAEEMLDWADEHGIVVIDETAAVGFNLSLGIGFEAGNKPKELYSEEAVNGETQQAHLQAIKELIARDKNHPSVVMWSIANEPDTRPQGAREYFAPLAEATRKLDPTRPITCVNVMFCDAHTDTISDLFDVLCLNRYYGWYVQSGDLETAEKVLEKELLAWQEKLHQPIIITEYGVDTLAGLHSMYTDMWSEEYQCAWLDMYHRVFDRVSAVVGEQVWNFADFATSQGILRVGGNKKGIFTRDRKPKSAAFLLQKRWTGMNFGEKPQQGGKQ + + + + + terminator + 7727..7979 + + + 7727 + 7979 + AF485783.1 + + + + + note + NOS + + + + + misc_feature + complement(8621..8646) + + + 8646 + 8621 + + AF485783.1 + + + + + note + T-DNA left border + + + + + misc_feature + complement(9156..10198) + + + 10198 + 9156 + + AF485783.1 + + + + + note + similar to tetA in GenBank Accession Number L13842 + + + + + misc_feature + complement(10199..11680) + + + 11680 + 10199 + + AF485783.1 + + + + + note + similar to trfA in GenBank Accession Number X00713 + + + + + misc_feature + complement(11681..12673) + + + 12673 + 11681 + + AF485783.1 + + + + + note + similar to NPTIII gene in GenBank Accession Number V01547 + + + + + misc_feature + complement(12674..13443) + + + 13443 + 12674 + + AF485783.1 + + + + + note + similar to transposable element IS1 in GenBank Accession Number X58999 + + + + + misc_feature + complement(13444..13794) + + + 13794 + 13444 + + AF485783.1 + + + + + note + similarity to NPT III gene in GenBank Accession Number V01547 + + + + + misc_feature + complement(13795..14066) + + + 14066 + 13795 + + AF485783.1 + + + + + note + similar to kilA in GenBank Accession Number M62846 + + + + + rep_origin + complement(14141..14758) + + + 14758 + 14141 + + AF485783.1 + + + + + note + ori V; similar to sequence in GenBank Accession Number M20134 + + + + + tgagcgtcgcaaaggcgctcggtcttgccttgctcgtcggtgatgtacttcaccagctccgcgaagtcgctcttcttgatggagcgcatggggacgtgcttggcaatcacgcgcaccccccggccgttttagcggctaaaaaagtcatggctctgccctcgggcggaccacgcccatcatgaccttgccaagctcgtcctgcttctcttcgatcttcgccagcagggcgaggatcgtggcatcaccgaaccgcgccgtgcgcgggtcgtcggtgagccagagtttcagcaggccgcccaggcggcccaggtcgccattgatgcgggccagctcgcggacgtgctcatagtccacgacgcccgtgattttgtagccctggccgacggccagcaggtaggccgacaggctcatgccggccgccgccgccttttcctcaatcgctcttcgttcgtctggaaggcagtacaccttgataggtgggctgcccttcctggttggcttggtttcatcagccatccgcttgccctcatctgttacgccggcggtagccggccagcctcgcagagcaggattcccgttgagcaccgccaggtgcgaataagggacagtgaagaaggaacacccgctcgcgggtgggcctacttcacctatcctgcccggctgacgccgttggatacaccaaggaaagtctacacgaaccctttggcaaaatcctgtatatcgtgcgaaaaaggatggatataccgaaaaaatcgctataatgaccccgaagcagggttatgcagcggaaaagcgccacgcttcccgaagggagaaaggcggacaggtatccggtaagcggcagggtcggaacaggagagcgcacgagggagcttccagggggaaacgcctggtatctttatagtcctgtcgggtttcgccacctctgacttgagcgtcgatttttgtgatgctcgtcaggggggcggagcctatggaaaaacgccagcaacgcggcctttttacggttcctggccttttgctggccttttgctcacatgttctttcctgcgttatcccctgattctgtggataaccgtattaccgcctttgagtgagctgataccgctcgccgcagccgaacgaccgagcgcagcgagtcagtgagcgaggaagcggaagagcgccagaaggccgccagagaggccgagcgcggccgtgaggcttggacgctagggcagggcatgaaaaagcccgtagcgggctgctacgggcgtctgacgcggtggaaagggggaggggatgttgtctacatggctctgctgtagtgagtgggttgcgctccggcagcggtcctgatcaatcgtcaccctttctcggtccttcaacgttcctgacaacgagcctccttttcgccaatccatcgacaatcaccgcgagtccctgctcgaacgctgcgtccggaccggcttcgtcgaaggcgtctatcgcggcccgcaacagcggcgagagcggagcctgttcaacggtgccgccgcgctcgccggcatcgctgtcgccggcctgctcctcaagcacggccccaacagtgaagtagctgattgtcatcagcgcattgacggcgtccccggccgaaaaacccgcctcgcagaggaagcgaagctgcgcgtcggccgtttccatctgcggtgcgcccggtcgcgtgccggcatggatgcgcgcgccatcgcggtaggcgagcagcgcctgcctgaagctgcgggcattcccgatcagaaatgagcgccagtcgtcgtcggctctcggcaccgaatgcgtatgattctccgccagcatggcttcggccagtgcgtcgagcagcgcccgcttgttcctgaagtgccagtaaagcgccggctgctgaacccccaaccgttccgccagtttgcgtgtcgtcagaccgtctacgccgacctcgttcaacaggtccagggcggcacggatcactgtattcggctgcaactttgtcatgcttgacactttatcactgataaacataatatgtccaccaacttatcagtgataaagaatccgcgcgttcaatcggaccagcggaggctggtccggaggccagacgtgaaacccaacatacccctgatcgtaattctgagcactgtcgcgctcgacgctgtcggcatcggcctgattatgccggtgctgccgggcctcctgcgcgatctggttcactcgaacgacgtcaccgcccactatggcattctgctggcgctgtatgcgttggtgcaatttgcctgcgcacctgtgctgggcgcgctgtcggatcgtttcgggcggcggccaatcttgctcgtctcgctggccggcgccagatctggggaaccctgtggttggcatgcacatacaaatggacgaacggataaaccttttcacgcccttttaaatatccgattattctaataaacgctcttttctcttaggtttacccgccaatatatcctgtcaaacactgatagtttaaactgaaggcgggaaacgacaatctgatcatgagcggagaattaagggagtcacgttatgacccccgccgatgacgcgggacaagccgttttacgtttggaactgacagaaccgcaacgttgaaggagccactcagccgcgggtttctggagtttaatgagctaagcacatacgtcagaaaccattattgcgcgttcaaaagtcgcctaaggtcactatcagctagcaaatatttcttgtcaaaaatgctccactgacgttccataaattcccctcggtatccaattagagtctcatattcactctcaatccaaataatctgcaccggatctggatcgtttcgcatgattgaacaagatggattgcacgcaggttctccggccgcttgggtggagaggctattcggctatgactgggcacaacagacaatcggctgctctgatgccgccgtgttccggctgtcagcgcaggggcgcccggttctttttgtcaagaccgacctgtccggtgccctgaatgaactgcaggacgaggcagcgcggctatcgtggctggccacgacgggcgttccttgcgcagctgtgctcgacgttgtcactgaagcgggaagggactggctgctattgggcgaagtgccggggcaggatctcctgtcatctcaccttgctcctgccgagaaagtatccatcatggctgatgcaatgcggcggctgcatacgcttgatccggctacctgcccattcgaccaccaagcgaaacatcgcatcgagcgagcacgtactcggatggaagccggtcttgtcgatcaggatgatctggacgaagagcatcaggggctcgcgccagccgaactgttcgccaggctcaaggcgcgcatgcccgacggcgatgatctcgtcgtgacccatggcgatgcctgcttgccgaatatcatggtggaaaatggccgcttttctggattcatcgactgtggccggctgggtgtggcggaccgctatcaggacatagcgttggctacccgtgatattgctgaagagcttggcggcgaatgggctgaccgcttcctcgtgctttacggtatcgccgctcccgattcgcagcgcatcgccttctatcgccttcttgacgagttcttctgagcgggactctggggttcgaaatgaccgaccaagcgacgcccaacctgccatcacgagatttcgattccaccgccgccttctatgaaaggttgggcttcggaatcgttttccgggacgccggctggatgatcctccagcgcggggatctcatgctggagttcttcgcccacgggatctctgcggaacaggcggtcgaaggtgccgatatcattacgacagcaacggccgacaagcacaacgccacgatcctgagcgacaatatgatcgggcccggcgtccacatcaacggcgtcggcggcgactgcccaggcaagaccgagatgcaccgcgatatcttgctgcgttcggatattttcgtggagttcccgccacagacccggatgatccccgatcgttcaaacatttggcaataaagtttcttaagattgaatcctgttgccggtcttgcgatgattatcatataatttctgttgaattacgttaagcatgtaataattaacatgtaatgcatgacgttatttatgagatgggtttttatgattagagtcccgcaattatacatttaatacgcgatagaaaacaaaatatagcgcgcaaactaggataaattatcgcgcgcggtgtcatctatgttactagatcgggcctcctgtcaatgctggcggcggctctggtggtggttctggtggcggctctgagggtggtggctctgagggtggcggttctgagggtggcggctctgagggaggcggttccggtggtggctctggttccggtgattttgattatgaaaagatggcaaacgctaataagggggctatgaccgaaaatgccgatgaaaacgcgctacagtctgacgctaaaggcaaacttgattctgtcgctactgattacggtgctgctatcgatggtttcattggtgacgtttccggccttgctaatggtaatggtgctactggtgattttgctggctctaattcccaaatggctcaagtcggtgacggtgataattcacctttaatgaataatttccgtcaatatttaccttccctccctcaatcggttgaatgtcgcccttttgtctttggcccaatacgcaaaccgcctctccccgcgcgttggccgattcattaatgcagctggcacgacaggtttcccgactggaaagcgggcagtgagcgcaacgcaattaatgtgagttagctcactcattaggcaccccaggctttacactttatgcttccggctcgtatgttgtgtggaattgtgagcggataacaatttcacacaggaaacagctatgaccatgattacgccaagcttgcatgcctgcaggtccccagattagccttttcaatttcagaaagaatgctaacccacagatggttagagaggcttacgcagcaggtctcatcaagacgatctacccgagcaataatctccaggaaatcaaataccttcccaagaaggttaaagatgcagtcaaaagattcaggactaactgcatcaagaacacagagaaagatatatttctcaagatcagaagtactattccagtatggacgattcaaggcttgcttcacaaaccaaggcaagtaatagagattggagtctctaaaaaggtagttcccactgaatcaaaggccatggagtcaaagattcaaatagaggacctaacagaactcgccgtaaagactggcgaacagttcatacagagtctcttacgactcaatgacaagaagaaaatcttcgtcaacatggtggagcacgacacacttgtctactccaaaaatatcaaagatacagtctcagaagaccaaagggcaattgagacttttcaacaaagggtaatatccggaaacctcctcggattccattgcccagctatctgtcactttattgtgaagatagtggaaaaggaaggtggctcctacaaatgccatcattgcgataaaggaaaggccatcgttgaagatgcctctgccgacagtggtcccaaagatggacccccacccacgaggagcatcgtggaaaaagaagacgttccaaccacgtcttcaaagcaagtggattgatgtgatatctccactgacgtaagggatgacgcacaatcccactatccttcgcaagacccttcctctatataaggaagttcatttcatttggagagaacacgggggactctagaggatccccgggtggtcagtcccttatgttacgtcctgtagaaaccccaacccgtgaaatcaaaaaactcgacggcctgtgggcattcagtctggatcgcgaaaactgtggaattgatcagcgttggtgggaaagcgcgttacaagaaagccgggcaattgctgtgccaggcagttttaacgatcagttcgccgatgcagatattcgtaattatgcgggcaacgtctggtatcagcgcgaagtctttataccgaaaggttgggcaggccagcgtatcgtgctgcgtttcgatgcggtcactcattacggcaaagtgtgggtcaataatcaggaagtgatggagcatcagggcggctatacgccatttgaagccgatgtcacgccgtatgttattgccgggaaaagtgtacgtatcaccgtttgtgtgaacaacgaactgaactggcagactatcccgccgggaatggtgattaccgacgaaaacggcaagaaaaagcagtcttacttccatgatttctttaactatgccggaatccatcgcagcgtaatgctctacaccacgccgaacacctgggtggacgatatcaccgtggtgacgcatgtcgcgcaagactgtaaccacgcgtctgttgactggcaggtggtggccaatggtgatgtcagcgttgaactgcgtgatgcggatcaacaggtggttgcaactggacaaggcactagcgggactttgcaagtggtgaatccgcacctctggcaaccgggtgaaggttatctctatgaactgtgcgtcacagccaaaagccagacagagtgtgatatctacccgcttcgcgtcggcatccggtcagtggcagtgaagggcgaacagttcctgattaaccacaaaccgttctactttactggctttggtcgtcatgaagatgcggacttgcgtggcaaaggattcgataacgtgctgatggtgcacgaccacgcattaatggactggattggggccaactcctaccgtacctcgcattacccttacgctgaagagatgctcgactgggcagatgaacatggcatcgtggtgattgatgaaactgctgctgtcggctttaacctctctttaggcattggtttcgaagcgggcaacaagccgaaagaactgtacagcgaagaggcagtcaacggggaaactcagcaagcgcacttacaggcgattaaagagctgatagcgcgtgacaaaaaccacccaagcgtggtgatgtggagtattgccaacgaaccggatacccgtccgcaaggtgcacgggaatatttcgcgccactggcggaagcaacgcgtaaactcgacccgacgcgtccgatcacctgcgtcaatgtaatgttctgcgacgctcacaccgataccatcagcgatctctttgatgtgctgtgcctgaaccgttattacggatggtatgtccaaagcggcgatttggaaacggcagagaaggtactggaaaaagaacttctggcctggcaggagaaactgcatcagccgattatcatcaccgaatacggcgtggatacgttagccgggctgcactcaatgtacaccgacatgtggagtgaagagtatcagtgtgcatggctggatatgtatcaccgcgtctttgatcgcgtcagcgccgtcgtcggtgaacaggtatggaatttcgccgattttgcgacctcgcaaggcatattgcgcgttggcggtaacaagaaagggatcttcactcgcgaccgcaaaccgaagtcggcggcttttctgctgcaaaaacgctggactggcatgaacttcggtgaaaaaccgcagcagggaggcaaacaatgaatcaacaactctcctggcgcaccatcgtcggctacagcctcgggaattgctaccgagctcgaatttccccgatcgttcaaacatttggcaataaagtttcttaagattgaatcctgttgccggtcttgcgatgattatcatataatttctgttgaattacgttaagcatgtaataattaacatgtaatgcatgacgttatttatgagatgggtttttatgattagagtcccgcaattatacatttaatacgcgatagaaaacaaaatatagcgcgcaaactaggataaattatcgcgcgcggtgtcatctatgttactagatcgggaattcactggccgtcgttttacaacgtcgtgactgggaaaaccctggcgttacccaacttaatcgccttgcagcacatccccctttcgccagctggcgtaatagcgaagaggcccgcaccgatcgcccttcccaacagttgcgcagcctgaatggcgcccgctcctttcgctttcttcccttcctttctcgccacgttcgccggctttccccgtcaagctctaaatcgggggctccctttagggttccgatttagtgctttacggcacctcgaccccaaaaaacttgatttgggtgatggttcacgtagtgggccatcgccctgatagacggtttttcgccctttgacgttggagtccacgttctttaatagtggactcttgttccaaactggaacaacactcaaccctatctcgggctattcttttgatttataagggattttgccgatttcggaaccaccatcaaacaggattttcgcctgctggggcaaaccagcgtggaccgcttgctgcaactctctcagggccaggcggtgaagggcaatcagctgttgcccgtctcactggtgaaaagaaaaaccaccccagtacattaaaaacgtccgcaatgtgttattaagttgtctaagcgtcaatttgtttacaccacaatatatcctgccaccagccagccaacagctccccgaccggcagctcggcacaaaatcaccactcgatacaggcagcccatcagtccgggacggcgtcagcgggagagccgttgtaaggcggcagactttgctcatgttaccgatgctattcggaagaacggcaactaagctgccgggtttgaaacacggatgatctcgcggagggtagcatgttgattgtaacgatgacagagcgttgctgcctgtgatcaaatatcatctccctcgcagagatccgaattatcagccttcttattcatttctcgcttaaccgtgacaggctgtcgatcttgagaactatgccgacataataggaaatcgctggataaagccgctgaggaagctgagtggcgctatttctttagaagtgaacgttgacgatatcaactcccctatccattgctcaccgaatggtacaggtcggggacccgaagttccgactgtcggcctgatgcatccccggctgatcgaccccagatctggggctgagaaagcccagtaaggaaacaactgtaggttcgagtcgcgagatcccccggaaccaaaggaagtaggttaaacccgctccgatcaggccgagccacgccaggccgagaacattggttcctgtaggcatcgggattggcggatcaaacactaaagctactggaacgagcagaagtcctccggccgccagttgccaggcggtaaaggtgagcagaggcacgggaggttgccacttgcgggtcagcacggttccgaacgccatggaaaccgcccccgccaggcccgctgcgacgccgacaggatctagcgctgcgtttggtgtcaacaccaacagcgccacgcccgcagttccgcaaatagcccccaggaccgccatcaatcgtatcgggctacctagcagagcggcagagatgaacacgaccatcagcggctgcacagcgcctaccgtcgccgcgaccccgcccggcaggcggtagaccgaaataaacaacaagctccagaatagcgaaatattaagtgcgccgaggatgaagatgcgcatccaccagattcccgttggaatctgtcggacgatcatcacgagcaataaacccgccggcaacgcccgcagcagcataccggcgacccctcggcctcgctgttcgggctccacgaaaacgccggacagatgcgccttgtgagcgtccttggggccgtcctcctgtttgaagaccgacagcccaatgatctcgccgtcgatgtaggcgccgaatgccacggcatctcgcaaccgttcagcgaacgcctccatgggctttttctcctcgtgctcgtaaacggacccgaacatctctggagctttcttcagggccgacaatcggatctcgcggaaatcctgcacgtcggccgctccaagccgtcgaatctgagccttaatcacaattgtcaattttaatcctctgtttatcggcagttcgtagagcgcgccgtgcgtcccgagcgatactgagcgaagcaagtgcgtcgagcagtgcccgcttgttcctgaaatgccagtaaagcgctggctgctgaacccccagccggaactgaccccacaaggccctagcgtttgcaatgcaccaggtcatcattgacccaggcgtgttccaccaggccgctgcctcgcaactcttcgcaggcttcgccgacctgctcgcgccacttcttcacgcgggtggaatccgatccgcacatgaggcggaaggtttccagcttgagcgggtacggctcccggtgcgagctgaaatagtcgaacatccgtcgggccgtcggcgacagcttgcggtacttctcccatatgaatttcgtgtagtggtcgccagcaaacagcacgacgatttcctcgtcgatcaggacctggcaacgggacgttttcttgccacggtccaggacgcggaagcggtgcagcagcgacaccgattccaggtgcccaacgcggtcggacgtgaagcccatcgccgtcgcctgtaggcgcgacaggcattcctcggccttcgtgtaataccggccattgatcgaccagcccaggtcctggcaaagctcgtagaacgtgaaggtgatcggctcgccgataggggtgcgcttcgcgtactccaacacctgctgccacaccagttcgtcatcgtcggcccgcagctcgacgccggtgtaggtgatcttcacgtccttgttgacgtggaaaatgaccttgttttgcagcgcctcgcgcgggattttcttgttgcgcgtggtgaacagggcagagcgggccgtgtcgtttggcatcgctcgcatcgtgtccggccacggcgcaatatcgaacaaggaaagctgcatttccttgatctgctgcttcgtgtgtttcagcaacgcggcctgcttggcctcgctgacctgttttgccaggtcctcgccggcggtttttcgcttcttggtcgtcatagttcctcgcgtgtcgatggtcatcgacttcgccaaacctgccgcctcctgttcgagacgacgcgaacgctccacggcggccgatggcgcgggcagggcagggggagccagttgcacgctgtcgcgctcgatcttggccgtagcttgctggaccatcgagccgacggactggaaggtttcgcggggcgcacgcatgacggtgcggcttgcgatggtttcggcatcctcggcggaaaaccccgcgtcgatcagttcttgcctgtatgccttccggtcaaacgtccgattcattcaccctccttgcgggattgccccgactcacgccggggcaatgtgcccttattcctgatttgacccgcctggtgccttggtgtccagataatccaccttatcggcaatgaagtcggtcccgtagaccgtctggccgtccttctcgtacttggtattccgaatcttgccctgcacgaataccagcgaccccttgcccaaatacttgccgtgggcctcggcctgagagccaaaacacttgatgcggaagaagtcggtgcgctcctgcttgtcgccggcatcgttgcgccacatctaggtactaaaacaattcatccagtaaaatataatattttattttctcccaatcaggcttgatccccagtaagtcaaaaaatagctcgacatactgttcttccccgatatcctccctgatcgaccggacgcagaaggcaatgtcataccacttgtccgccctgccgcttctcccaagatcaataaagccacttactttgccatctttcacaaagatgttgctgtctcccaggtcgccgtgggaaaagacaagttcctcttcgggcttttccgtctttaaaaaatcatacagctcgcgcggatctttaaatggagtgtcttcttcccagttttcgcaatccacatcggccagatcgttattcagtaagtaatccaattcggctaagcggctgtctaagctattcgtatagggacaatccgatatgtcgatggagtgaaagagcctgatgcactccgcatacagctcgataatcttttcagggctttgttcatcttcatactcttccgagcaaaggacgccatcggcctcactcatgagcagattgctccagccatcatgccgttcaaagtgcaggacctttggaacaggcagctttccttccagccatagcatcatgtccttttcccgttccacatcataggtggtccctttataccggctgtccgtcatttttaaatataggttttcattttctcccaccagcttatataccttagcaggagacattccttccgtatcttttacgcagcggtatttttcgatcagttttttcaattccggtgatattctcattttagccatttattatttccttcctcttttctacagtatttaaagataccccaagaagctaattataacaagacgaactccaattcactgttccttgcattctaaaaccttaaataccagaaaacagctttttcaaagttgttttcaaagttggcgtataacatagtatcgacggagccgattttgaaaccacaattatgggtgatgctgccaacttactgatttagtgtatgatggtgtttttgaggtgctccagtggcttctgtgtctatcagctgtccctcctgttcagctactgacggggtggtgcgtaacggcaaaagcaccgccggacatcagcgctatctctgctctcactgccgtaaaacatggcaactgcagttcacttacaccgcttctcaacccggtacgcaccagaaaatcattgatatggccatgaatggcgttggatgccgggcaacagcccgcattatgggcgttggcctcaacacgattttacgtcacttaaaaaactcaggccgcagtcggtaacctcgcgcatacagccgggcagtgacgtcatcgtctgcgcggaaatggacgaacagtggggctatgtcggggctaaatcgcgccagcgctggctgttttacgcgtatgacagtctccggaagacggttgttgcgcacgtattcggtgaacgcactatggcgacgctggggcgtcttatgagcctgctgtcaccctttgacgtggtgatatggatgacggatggctggccgctgtatgaatcccgcctgaagggaaagctgcacgtaatcagcaagcgatatacgcagcgaattgagcggcataacctgaatctgaggcagcacctggcacggctgggacggaagtcgctgtcgttctcaaaatcggtggagctgcatgacaaagtcatcgggcattatctgaacataaaacactatcaataagttggagtcattacccaattatgatagaatttacaagctataaggttattgtcctgggtttcaagcattagtccatgcaagtttttatgctttgcccattctatagatatattgataagcgcgctgcctatgccttgccccctgaaatccttacatacggcgatatcttctatataaaagatatattatcttatcagtattgtcaatatattcaaggcaatctgcctcctcatcctcttcatcctcttcgtcttggtagctttttaaatatggcgcttcatagagtaattctgtaaaggtccaattctcgttttcatacctcggtataatcttacctatcacctcaaatggttcgctgggtttatcgcacccccgaacacgagcacggcacccgcgaccactatgccaagaatgcccaaggtaaaaattgccggccccgccatgaagtccgtgaatgccccgacggccgaagtgaagggcaggccgccacccaggccgccgccctcactgcccggcacctggtcgctgaatgtcgatgccagcacctgcggcacgtcaatgcttccgggcgtcgcgctcgggctgatcgcccatcccgttactgccccgatcccggcaatggcaaggactgccagcgctgccatttttggggtgaggccgttcgcggccgaggggcgcagcccctggggggatgggaggcccgcgttagcgggccgggagggttcgagaagggggggcaccccccttcggcgtgcgcggtcacgcgcacagggcgcagccctggttaaaaacaaggtttataaatattggtttaaaagcaggttaaaagacaggttagcggtggccgaaaaacgggcggaaacccttgcaaatgctggattttctgcctgtggacagcccctcaaatgtcaataggtgcgcccctcatctgtcagcactctgcccctcaagtgtcaaggatcgcgcccctcatctgtcagtagtcgcgcccctcaagtgtcaataccgcagggcacttatccccaggcttgtccacatcatctgtgggaaactcgcgtaaaatcaggcgttttcgccgatttgcgaggctggccagctccacgtcgccggccgaaatcgagcctgcccctcatctgtcaacgccgcgccgggtgagtcggcccctcaagtgtcaacgtccgcccctcatctgtcagtgagggccaagttttccgcgaggtatccacaacgccggcggccgcggtgtctcgcacacggcttcgacggcgtttctggcgcgtttgcagggccatagacggccgccagcccagcggcgagggcaaccagcccgg + + + + diff --git a/platforms/android/assets/www/node_modules/xml2js/x.js b/platforms/android/assets/www/node_modules/xml2js/x.js new file mode 100644 index 0000000..b51ce57 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xml2js/x.js @@ -0,0 +1,24 @@ +var util = require('util'); +var xml2js = require('xml2js'); + +var myxml = " \ + \ + \ + 1 \ + green \ + \ + \ + 2 \ + red \ + \ + \ + 3 \ + yellow \ + \ +" + +xml2js.parseString(myxml, function (e, r) { + console.log(util.inspect(r, false, null)); + console.log(new xml2js.Builder().buildObject(r)); +}); + diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/.npmignore b/platforms/android/assets/www/node_modules/xmlbuilder/.npmignore new file mode 100644 index 0000000..b6ad1f6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/.npmignore @@ -0,0 +1,5 @@ +.travis.yml +src +test +perf +coverage diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/CHANGELOG.md b/platforms/android/assets/www/node_modules/xmlbuilder/CHANGELOG.md new file mode 100644 index 0000000..86f1e94 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/CHANGELOG.md @@ -0,0 +1,329 @@ +# Change Log + +## [5.0.0] - 2016-03-05 +- Added text case option for element names and attribute names. Valid cases are `lower`, `upper`, `camel`, `kebab` and `snake`. +- Attribute and element values are escaped according to the [Canonical XML 1.0 specification](http://www.w3.org/TR/2000/WD-xml-c14n-20000119.html#charescaping). See [#54](https://github.com/oozcitak/xmlbuilder-js/issues/54) and [#86](https://github.com/oozcitak/xmlbuilder-js/issues/86). +- Added the `allowEmpty` option to `end()`. When this option is set, empty elements are not self-closed. +- Added support for [nested CDATA](https://en.wikipedia.org/wiki/CDATA#Nesting). The triad `]]>` in CDATA is now automatically replaced with `]]]]>`. + +## [4.2.1] - 2016-01-15 +- Updated lodash dependency to 4.0.0. + +## [4.2.0] - 2015-12-16 +- Added the `noDoubleEncoding` option to `create()` to control whether existing html entities are encoded. + +## [4.1.0] - 2015-11-11 +- Added the `separateArrayItems` option to `create()` to control how arrays are handled when converting from objects. e.g. + +```js +root.ele({ number: [ "one", "two" ]}); +// with separateArrayItems: true + + + + +// with separateArrayItems: false +one +two +``` + +## [4.0.0] - 2015-11-01 +- Removed the `#list` decorator. Array items are now created as child nodes by default. +- Fixed a bug where the XML encoding string was checked partially. + +## [3.1.0] - 2015-09-19 +- `#list` decorator ignores empty arrays. + +## [3.0.0] - 2015-09-10 +- Allow `\r`, `\n` and `\t` in attribute values without escaping. See [#86](https://github.com/oozcitak/xmlbuilder-js/issues/86). + +## [2.6.5] - 2015-09-09 +- Use native `isArray` instead of lodash. +- Indentation of processing intructions are set to the parent element's. + +## [2.6.4] - 2015-05-27 +- Updated lodash dependency to 3.5.0. + +## [2.6.3] - 2015-05-27 +- Bumped version because previous release was not published on npm. + +## [2.6.2] - 2015-03-10 +- Updated lodash dependency to 3.5.0. + +## [2.6.1] - 2015-02-20 +- Updated lodash dependency to 3.3.0. + +## [2.6.0] - 2015-02-20 +- Fixed a bug where the `XMLNode` constructor overwrote the super class parent. +- Removed document property from cloned nodes. +- Switched to mocha.js for testing. + +## [2.5.2] - 2015-02-16 +- Updated lodash dependency to 3.2.0. + +## [2.5.1] - 2015-02-09 +- Updated lodash dependency to 3.1.0. +- Support all node >= 0.8. + +## [2.5.0] - 2015-00-03 +- Updated lodash dependency to 3.0.0. + +## [2.4.6] - 2015-01-26 +- Show more information from attribute creation with null values. +- Added iojs as an engine. +- Self close elements with empty text. + +## [2.4.5] - 2014-11-15 +- Fixed prepublish script to run on windows. +- Fixed bug in XMLStringifier where an undefined value was used while reporting an invalid encoding value. +- Moved require statements to the top of files to reduce CPU usage from lazy requires. See [#62](https://github.com/oozcitak/xmlbuilder-js/issues/62). + +## [2.4.4] - 2014-09-08 +- Added the `offset` option to `toSTring()` for use in XML fragments. + +## [2.4.3] - 2014-08-13 +- Corrected license in package description. + +## [2.4.2] - 2014-08-13 +- Dropped performance test and memwatch dependency. + +## [2.4.1] - 2014-08-12 +- Fixed a bug where empty indent string was omitted when pretty printing. See [#59](https://github.com/oozcitak/xmlbuilder-js/issues/59). + +## [2.4.0] - 2014-08-04 +- Correct cases of pubID and sysID. +- Use single lodash instead of seperate npm modules. See [#53](https://github.com/oozcitak/xmlbuilder-js/issues/53). +- Escape according to Canonical XML 1.0. See [#54](https://github.com/oozcitak/xmlbuilder-js/issues/54). + +## [2.3.0] - 2014-07-17 +- Convert objects to JS primitives while sanitizing user input. +- Object builder preserves items with null values. See [#44](https://github.com/oozcitak/xmlbuilder-js/issues/44). +- Use modularized lodash functions to cut down dependencies. +- Process empty objects when converting from objects so that we don't throw on empty child objects. + +## [2.2.1] - 2014-04-04 +- Bumped version because previous release was not published on npm. + +## [2.2.0] - 2014-04-04 +- Switch to lodash from underscore. +- Removed legacy `ext` option from `create()`. +- Drop old node versions: 0.4, 0.5, 0.6. 0.8 is the minimum requirement from now on. + +## [2.1.0] - 2013-12-30 +- Removed duplicate null checks from constructors. +- Fixed node count in performance test. +- Added option for skipping null attribute values. See [#26](https://github.com/oozcitak/xmlbuilder-js/issues/26). +- Allow multiple values in `att()` and `ins()`. +- Added ability to run individual performance tests. +- Added flag for ignoring decorator strings. + +## [2.0.1] - 2013-12-24 +- Removed performance tests from npm package. + +## [2.0.0] - 2013-12-24 +- Combined loops for speed up. +- Added support for the DTD and XML declaration. +- `clone` includes attributes. +- Added performance tests. +- Evaluate attribute value if function. +- Evaluate instruction value if function. + +## [1.1.2] - 2013-12-11 +- Changed processing instruction decorator to `?`. + +## [1.1.1] - 2013-12-11 +- Added processing instructions to JS object conversion. + +## [1.1.0] - 2013-12-10 +- Added license to package. +- `create()` and `element()` accept JS object to fully build the document. +- Added `nod()` and `n()` aliases for `node()`. +- Renamed `convertAttChar` decorator to `convertAttKey`. +- Ignore empty decorator strings when converting JS objects. + +## [1.0.2] - 2013-11-27 +- Removed temp file which was accidentally included in the package. + +## [1.0.1] - 2013-11-27 +- Custom stringify functions affect current instance only. + +## [1.0.0] - 2013-11-27 +- Added processing instructions. +- Added stringify functions to sanitize and convert input values. +- Added option for headless XML documents. +- Added vows tests. +- Removed Makefile. Using npm publish scripts instead. +- Removed the `begin()` function. `create()` begins the document by creating the root node. + +## [0.4.3] - 2013-11-08 +- Added option to include surrogate pairs in XML content. See [#29](https://github.com/oozcitak/xmlbuilder-js/issues/29). +- Fixed empty value string representation in pretty mode. +- Added pre and postpublish scripts to package.json. +- Filtered out prototype properties when appending attributes. See [#31](https://github.com/oozcitak/xmlbuilder-js/issues/31). + +## [0.4.2] - 2012-09-14 +- Removed README.md from `.npmignore`. + +## [0.4.1] - 2012-08-31 +- Removed `begin()` calls in favor of `XMLBuilder` constructor. +- Added the `end()` function. `end()` is a convenience over `doc().toString()`. + +## [0.4.0] - 2012-08-31 +- Added arguments to `XMLBuilder` constructor to allow the name of the root element and XML prolog to be defined in one line. +- Soft deprecated `begin()`. + +## [0.3.11] - 2012-08-13 +- Package keywords are fixed to be an array of values. + +## [0.3.10] - 2012-08-13 +- Brought back npm package contents which were lost due to incorrect configuration of `package.json` in previous releases. + +## [0.3.3] - 2012-07-27 +- Implemented `importXMLBuilder()`. + +## [0.3.2] - 2012-07-20 +- Fixed a duplicated escaping problem on `element()`. +- Fixed a problem with text node creation from empty string. +- Calling `root()` on the document element returns the root element. +- `XMLBuilder` no longer extends `XMLFragment`. + +## [0.3.1] - 2011-11-28 +- Added guards for document element so that nodes cannot be inserted at document level. + +## [0.3.0] - 2011-11-28 +- Added `doc()` to return the document element. + +## [0.2.2] - 2011-11-28 +- Prevent code relying on `up()`'s older behavior to break. + +## [0.2.1] - 2011-11-28 +- Added the `root()` function. + +## [0.2.0] - 2011-11-21 +- Added Travis-CI integration. +- Added coffee-script dependency. +- Added insert, traversal and delete functions. + +## [0.1.7] - 2011-10-25 +- No changes. Accidental release. + +## [0.1.6] - 2011-10-25 +- Corrected `package.json` bugs link to `url` from `web`. + +## [0.1.5] - 2011-08-08 +- Added missing npm package contents. + +## [0.1.4] - 2011-07-29 +- Text-only nodes are no longer indented. +- Added documentation for multiple instances. + +## [0.1.3] - 2011-07-27 +- Exported the `create()` function to return a new instance. This allows multiple builder instances to be constructed. +- Fixed `u()` function so that it now correctly calls `up()`. +- Fixed typo in `element()` so that `attributes` and `text` van be passes interchangeably. + +## [0.1.2] - 2011-06-03 +- `ele()` accepts element text. +- `attributes()` now overrides existing attributes if passed the same attribute name. + +## [0.1.1] - 2011-05-19 +- Added the raw output option. +- Removed most validity checks. + +## [0.1.0] - 2011-04-27 +- `text()` and `cdata()` now return parent element. +- Attribute values are escaped. + +## [0.0.7] - 2011-04-23 +- Coerced text values to string. + +## [0.0.6] - 2011-02-23 +- Added support for XML comments. +- Text nodes are checked against CharData. + +## [0.0.5] - 2010-12-31 +- Corrected the name of the main npm module in `package.json`. + +## [0.0.4] - 2010-12-28 +- Added `.npmignore`. + +## [0.0.3] - 2010-12-27 +- root element is now constructed in `begin()`. +- moved prolog to `begin()`. +- Added the ability to have CDATA in element text. +- Removed unused prolog aliases. +- Removed `builder()` function from main module. +- Added the name of the main npm module in `package.json`. + +## [0.0.2] - 2010-11-03 +- `element()` expands nested arrays. +- Added pretty printing. +- Added the `up()`, `build()` and `prolog()` functions. +- Added readme. + +## 0.0.1 - 2010-11-02 +- Initial release + +[5.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.2.1...v5.0.0 +[4.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.2.0...v4.2.1 +[4.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.1.0...v4.2.0 +[4.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.0.0...v4.1.0 +[4.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v3.1.0...v4.0.0 +[3.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v3.0.0...v3.1.0 +[3.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.5...v3.0.0 +[2.6.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.4...v2.6.5 +[2.6.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.3...v2.6.4 +[2.6.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.2...v2.6.3 +[2.6.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.1...v2.6.2 +[2.6.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.0...v2.6.1 +[2.6.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.2...v2.6.0 +[2.5.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.1...v2.5.2 +[2.5.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.0...v2.5.1 +[2.5.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.6...v2.5.0 +[2.4.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.5...v2.4.6 +[2.4.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.4...v2.4.5 +[2.4.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.3...v2.4.4 +[2.4.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.2...v2.4.3 +[2.4.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.1...v2.4.2 +[2.4.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.0...v2.4.1 +[2.4.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.3.0...v2.4.0 +[2.3.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.2.1...v2.3.0 +[2.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.2.0...v2.2.1 +[2.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.1.0...v2.2.0 +[2.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.0.1...v2.1.0 +[2.0.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.0.0...v2.0.1 +[2.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.2...v2.0.0 +[1.1.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.1...v1.1.2 +[1.1.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.0...v1.1.1 +[1.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.2...v1.1.0 +[1.0.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.1...v1.0.2 +[1.0.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.0...v1.0.1 +[1.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.3...v1.0.0 +[0.4.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.2...v0.4.3 +[0.4.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.1...v0.4.2 +[0.4.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.0...v0.4.1 +[0.4.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.11...v0.4.0 +[0.3.11]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.10...v0.3.11 +[0.3.10]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.3...v0.3.10 +[0.3.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.2...v0.3.3 +[0.3.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.1...v0.3.2 +[0.3.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.0...v0.3.1 +[0.3.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.2...v0.3.0 +[0.2.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.1...v0.2.2 +[0.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.0...v0.2.1 +[0.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.7...v0.2.0 +[0.1.7]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.6...v0.1.7 +[0.1.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.5...v0.1.6 +[0.1.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.4...v0.1.5 +[0.1.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.3...v0.1.4 +[0.1.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.2...v0.1.3 +[0.1.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.1...v0.1.2 +[0.1.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.0...v0.1.1 +[0.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.7...v0.1.0 +[0.0.7]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.6...v0.0.7 +[0.0.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.5...v0.0.6 +[0.0.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.4...v0.0.5 +[0.0.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.3...v0.0.4 +[0.0.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.2...v0.0.3 +[0.0.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.1...v0.0.2 + diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/LICENSE b/platforms/android/assets/www/node_modules/xmlbuilder/LICENSE new file mode 100644 index 0000000..e7cbac9 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Ozgur Ozcitak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/README.md b/platforms/android/assets/www/node_modules/xmlbuilder/README.md new file mode 100644 index 0000000..13a5b12 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/README.md @@ -0,0 +1,86 @@ +# xmlbuilder-js + +An XML builder for [node.js](https://nodejs.org/) similar to +[java-xmlbuilder](https://github.com/jmurty/java-xmlbuilder). + +[![License](http://img.shields.io/npm/l/xmlbuilder.svg?style=flat-square)](http://opensource.org/licenses/MIT) +[![NPM Version](http://img.shields.io/npm/v/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder) +[![NPM Downloads](https://img.shields.io/npm/dm/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder) + +[![Build Status](http://img.shields.io/travis/oozcitak/xmlbuilder-js.svg?style=flat-square)](http://travis-ci.org/oozcitak/xmlbuilder-js) +[![Dependency Status](http://img.shields.io/david/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js) +[![Dev Dependency Status](http://img.shields.io/david/dev/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js) +[![Code Coverage](https://img.shields.io/coveralls/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://coveralls.io/github/oozcitak/xmlbuilder-js) + +### Installation: + +``` sh +npm install xmlbuilder +``` + +### Usage: + +``` js +var builder = require('xmlbuilder'); +var xml = builder.create('root') + .ele('xmlbuilder') + .ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git') + .end({ pretty: true}); + +console.log(xml); +``` + +will result in: + +``` xml + + + + git://github.com/oozcitak/xmlbuilder-js.git + + +``` + +It is also possible to convert objects into nodes: + +``` js +builder.create({ + root: { + xmlbuilder: { + repo: { + '@type': 'git', // attributes start with @ + '#text': 'git://github.com/oozcitak/xmlbuilder-js.git' // text node + } + } + } +}); +``` + +If you need to do some processing: + +``` js +var root = builder.create('squares'); +root.com('f(x) = x^2'); +for(var i = 1; i <= 5; i++) +{ + var item = root.ele('data'); + item.att('x', i); + item.att('y', i * i); +} +``` + +This will result in: + +``` xml + + + + + + + + + +``` + +See the [wiki](https://github.com/oozcitak/xmlbuilder-js/wiki) for details. diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLAttribute.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLAttribute.js new file mode 100644 index 0000000..f6c6bd8 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLAttribute.js @@ -0,0 +1,32 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, create; + + create = require('lodash/create'); + + module.exports = XMLAttribute = (function() { + function XMLAttribute(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing attribute name of element " + parent.name); + } + if (value == null) { + throw new Error("Missing attribute value for attribute " + name + " of element " + parent.name); + } + this.name = this.stringify.attName(name); + this.value = this.stringify.attValue(value); + } + + XMLAttribute.prototype.clone = function() { + return create(XMLAttribute.prototype, this); + }; + + XMLAttribute.prototype.toString = function(options, level) { + return ' ' + this.name + '="' + this.value + '"'; + }; + + return XMLAttribute; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLBuilder.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLBuilder.js new file mode 100644 index 0000000..4282833 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLBuilder.js @@ -0,0 +1,69 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLBuilder, XMLDeclaration, XMLDocType, XMLElement, XMLStringifier; + + XMLStringifier = require('./XMLStringifier'); + + XMLDeclaration = require('./XMLDeclaration'); + + XMLDocType = require('./XMLDocType'); + + XMLElement = require('./XMLElement'); + + module.exports = XMLBuilder = (function() { + function XMLBuilder(name, options) { + var root, temp; + if (name == null) { + throw new Error("Root element needs a name"); + } + if (options == null) { + options = {}; + } + this.options = options; + this.stringify = new XMLStringifier(options); + temp = new XMLElement(this, 'doc'); + root = temp.element(name); + root.isRoot = true; + root.documentObject = this; + this.rootObject = root; + if (!options.headless) { + root.declaration(options); + if ((options.pubID != null) || (options.sysID != null)) { + root.doctype(options); + } + } + } + + XMLBuilder.prototype.root = function() { + return this.rootObject; + }; + + XMLBuilder.prototype.end = function(options) { + return this.toString(options); + }; + + XMLBuilder.prototype.toString = function(options) { + var indent, newline, offset, pretty, r, ref, ref1, ref2; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + r = ''; + if (this.xmldec != null) { + r += this.xmldec.toString(options); + } + if (this.doctype != null) { + r += this.doctype.toString(options); + } + r += this.rootObject.toString(options); + if (pretty && r.slice(-newline.length) === newline) { + r = r.slice(0, -newline.length); + } + return r; + }; + + return XMLBuilder; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLCData.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLCData.js new file mode 100644 index 0000000..c171a28 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLCData.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLCData = (function(superClass) { + extend(XMLCData, superClass); + + function XMLCData(parent, text) { + XMLCData.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing CDATA text"); + } + this.text = this.stringify.cdata(text); + } + + XMLCData.prototype.clone = function() { + return create(XMLCData.prototype, this); + }; + + XMLCData.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLCData; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLComment.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLComment.js new file mode 100644 index 0000000..ca801f6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLComment.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLComment, XMLNode, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLComment = (function(superClass) { + extend(XMLComment, superClass); + + function XMLComment(parent, text) { + XMLComment.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing comment text"); + } + this.text = this.stringify.comment(text); + } + + XMLComment.prototype.clone = function() { + return create(XMLComment.prototype, this); + }; + + XMLComment.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLComment; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDAttList.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDAttList.js new file mode 100644 index 0000000..4a71866 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDAttList.js @@ -0,0 +1,68 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDAttList, create; + + create = require('lodash/create'); + + module.exports = XMLDTDAttList = (function() { + function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) { + this.stringify = parent.stringify; + if (elementName == null) { + throw new Error("Missing DTD element name"); + } + if (attributeName == null) { + throw new Error("Missing DTD attribute name"); + } + if (!attributeType) { + throw new Error("Missing DTD attribute type"); + } + if (!defaultValueType) { + throw new Error("Missing DTD attribute default"); + } + if (defaultValueType.indexOf('#') !== 0) { + defaultValueType = '#' + defaultValueType; + } + if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) { + throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT"); + } + if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) { + throw new Error("Default value only applies to #FIXED or #DEFAULT"); + } + this.elementName = this.stringify.eleName(elementName); + this.attributeName = this.stringify.attName(attributeName); + this.attributeType = this.stringify.dtdAttType(attributeType); + this.defaultValue = this.stringify.dtdAttDefault(defaultValue); + this.defaultValueType = defaultValueType; + } + + XMLDTDAttList.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDAttList; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDElement.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDElement.js new file mode 100644 index 0000000..0002c1b --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDElement.js @@ -0,0 +1,46 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDElement, create; + + create = require('lodash/create'); + + module.exports = XMLDTDElement = (function() { + function XMLDTDElement(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing DTD element name"); + } + if (!value) { + value = '(#PCDATA)'; + } + if (Array.isArray(value)) { + value = '(' + value.join(',') + ')'; + } + this.name = this.stringify.eleName(name); + this.value = this.stringify.dtdElementValue(value); + } + + XMLDTDElement.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDElement; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDEntity.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDEntity.js new file mode 100644 index 0000000..f27d567 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDEntity.js @@ -0,0 +1,84 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDEntity, create, isObject; + + create = require('lodash/create'); + + isObject = require('lodash/isObject'); + + module.exports = XMLDTDEntity = (function() { + function XMLDTDEntity(parent, pe, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing entity name"); + } + if (value == null) { + throw new Error("Missing entity value"); + } + this.pe = !!pe; + this.name = this.stringify.eleName(name); + if (!isObject(value)) { + this.value = this.stringify.dtdEntityValue(value); + } else { + if (!value.pubID && !value.sysID) { + throw new Error("Public and/or system identifiers are required for an external entity"); + } + if (value.pubID && !value.sysID) { + throw new Error("System identifier is required for a public external entity"); + } + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + if (value.nData != null) { + this.nData = this.stringify.dtdNData(value.nData); + } + if (this.pe && this.nData) { + throw new Error("Notation declaration is not allowed in a parameter entity"); + } + } + } + + XMLDTDEntity.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDEntity; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDNotation.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDNotation.js new file mode 100644 index 0000000..edd3501 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDTDNotation.js @@ -0,0 +1,56 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDTDNotation, create; + + create = require('lodash/create'); + + module.exports = XMLDTDNotation = (function() { + function XMLDTDNotation(parent, name, value) { + this.stringify = parent.stringify; + if (name == null) { + throw new Error("Missing notation name"); + } + if (!value.pubID && !value.sysID) { + throw new Error("Public or system identifiers are required for an external entity"); + } + this.name = this.stringify.eleName(name); + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + } + + XMLDTDNotation.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDTDNotation; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDeclaration.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDeclaration.js new file mode 100644 index 0000000..b502892 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDeclaration.js @@ -0,0 +1,65 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLDeclaration, XMLNode, create, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + isObject = require('lodash/isObject'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLDeclaration = (function(superClass) { + extend(XMLDeclaration, superClass); + + function XMLDeclaration(parent, version, encoding, standalone) { + var ref; + XMLDeclaration.__super__.constructor.call(this, parent); + if (isObject(version)) { + ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone; + } + if (!version) { + version = '1.0'; + } + this.version = this.stringify.xmlVersion(version); + if (encoding != null) { + this.encoding = this.stringify.xmlEncoding(encoding); + } + if (standalone != null) { + this.standalone = this.stringify.xmlStandalone(standalone); + } + } + + XMLDeclaration.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLDeclaration; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDocType.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDocType.js new file mode 100644 index 0000000..cbc61b3 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLDocType.js @@ -0,0 +1,188 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLProcessingInstruction, create, isObject; + + create = require('lodash/create'); + + isObject = require('lodash/isObject'); + + XMLCData = require('./XMLCData'); + + XMLComment = require('./XMLComment'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLDocType = (function() { + function XMLDocType(parent, pubID, sysID) { + var ref, ref1; + this.documentObject = parent; + this.stringify = this.documentObject.stringify; + this.children = []; + if (isObject(pubID)) { + ref = pubID, pubID = ref.pubID, sysID = ref.sysID; + } + if (sysID == null) { + ref1 = [pubID, sysID], sysID = ref1[0], pubID = ref1[1]; + } + if (pubID != null) { + this.pubID = this.stringify.dtdPubID(pubID); + } + if (sysID != null) { + this.sysID = this.stringify.dtdSysID(sysID); + } + } + + XMLDocType.prototype.element = function(name, value) { + var child; + child = new XMLDTDElement(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + var child; + child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.entity = function(name, value) { + var child; + child = new XMLDTDEntity(this, false, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.pEntity = function(name, value) { + var child; + child = new XMLDTDEntity(this, true, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.notation = function(name, value) { + var child; + child = new XMLDTDNotation(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.instruction = function(target, value) { + var child; + child = new XMLProcessingInstruction(this, target, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.root = function() { + return this.documentObject.root(); + }; + + XMLDocType.prototype.document = function() { + return this.documentObject; + }; + + XMLDocType.prototype.toString = function(options, level) { + var child, i, indent, len, newline, offset, pretty, r, ref, ref1, ref2, ref3, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ' 0) { + r += ' ['; + if (pretty) { + r += newline; + } + ref3 = this.children; + for (i = 0, len = ref3.length; i < len; i++) { + child = ref3[i]; + r += child.toString(options, level + 1); + } + r += ']'; + } + r += '>'; + if (pretty) { + r += newline; + } + return r; + }; + + XMLDocType.prototype.ele = function(name, value) { + return this.element(name, value); + }; + + XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue); + }; + + XMLDocType.prototype.ent = function(name, value) { + return this.entity(name, value); + }; + + XMLDocType.prototype.pent = function(name, value) { + return this.pEntity(name, value); + }; + + XMLDocType.prototype.not = function(name, value) { + return this.notation(name, value); + }; + + XMLDocType.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLDocType.prototype.com = function(value) { + return this.comment(value); + }; + + XMLDocType.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLDocType.prototype.up = function() { + return this.root(); + }; + + XMLDocType.prototype.doc = function() { + return this.document(); + }; + + return XMLDocType; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLElement.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLElement.js new file mode 100644 index 0000000..3e5e1eb --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLElement.js @@ -0,0 +1,217 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, create, every, isFunction, isObject, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + isObject = require('lodash/isObject'); + + isFunction = require('lodash/isFunction'); + + every = require('lodash/every'); + + XMLNode = require('./XMLNode'); + + XMLAttribute = require('./XMLAttribute'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + module.exports = XMLElement = (function(superClass) { + extend(XMLElement, superClass); + + function XMLElement(parent, name, attributes) { + XMLElement.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing element name"); + } + this.name = this.stringify.eleName(name); + this.children = []; + this.instructions = []; + this.attributes = {}; + if (attributes != null) { + this.attribute(attributes); + } + } + + XMLElement.prototype.clone = function() { + var att, attName, clonedSelf, i, len, pi, ref, ref1; + clonedSelf = create(XMLElement.prototype, this); + if (clonedSelf.isRoot) { + clonedSelf.documentObject = null; + } + clonedSelf.attributes = {}; + ref = this.attributes; + for (attName in ref) { + if (!hasProp.call(ref, attName)) continue; + att = ref[attName]; + clonedSelf.attributes[attName] = att.clone(); + } + clonedSelf.instructions = []; + ref1 = this.instructions; + for (i = 0, len = ref1.length; i < len; i++) { + pi = ref1[i]; + clonedSelf.instructions.push(pi.clone()); + } + clonedSelf.children = []; + this.children.forEach(function(child) { + var clonedChild; + clonedChild = child.clone(); + clonedChild.parent = clonedSelf; + return clonedSelf.children.push(clonedChild); + }); + return clonedSelf; + }; + + XMLElement.prototype.attribute = function(name, value) { + var attName, attValue; + if (name != null) { + name = name.valueOf(); + } + if (isObject(name)) { + for (attName in name) { + if (!hasProp.call(name, attName)) continue; + attValue = name[attName]; + this.attribute(attName, attValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + if (!this.options.skipNullAttributes || (value != null)) { + this.attributes[name] = new XMLAttribute(this, name, value); + } + } + return this; + }; + + XMLElement.prototype.removeAttribute = function(name) { + var attName, i, len; + if (name == null) { + throw new Error("Missing attribute name"); + } + name = name.valueOf(); + if (Array.isArray(name)) { + for (i = 0, len = name.length; i < len; i++) { + attName = name[i]; + delete this.attributes[attName]; + } + } else { + delete this.attributes[name]; + } + return this; + }; + + XMLElement.prototype.instruction = function(target, value) { + var i, insTarget, insValue, instruction, len; + if (target != null) { + target = target.valueOf(); + } + if (value != null) { + value = value.valueOf(); + } + if (Array.isArray(target)) { + for (i = 0, len = target.length; i < len; i++) { + insTarget = target[i]; + this.instruction(insTarget); + } + } else if (isObject(target)) { + for (insTarget in target) { + if (!hasProp.call(target, insTarget)) continue; + insValue = target[insTarget]; + this.instruction(insTarget, insValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + instruction = new XMLProcessingInstruction(this, target, value); + this.instructions.push(instruction); + } + return this; + }; + + XMLElement.prototype.toString = function(options, level) { + var allowEmpty, att, child, i, indent, instruction, j, len, len1, name, newline, offset, pretty, r, ref, ref1, ref2, ref3, ref4, ref5, ref6, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + allowEmpty = (ref3 = options != null ? options.allowEmpty : void 0) != null ? ref3 : false; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + ref4 = this.instructions; + for (i = 0, len = ref4.length; i < len; i++) { + instruction = ref4[i]; + r += instruction.toString(options, level); + } + if (pretty) { + r += space; + } + r += '<' + this.name; + ref5 = this.attributes; + for (name in ref5) { + if (!hasProp.call(ref5, name)) continue; + att = ref5[name]; + r += att.toString(options); + } + if (this.children.length === 0 || every(this.children, function(e) { + return e.value === ''; + })) { + if (allowEmpty) { + r += '>'; + } else { + r += '/>'; + } + if (pretty) { + r += newline; + } + } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) { + r += '>'; + r += this.children[0].value; + r += ''; + r += newline; + } else { + r += '>'; + if (pretty) { + r += newline; + } + ref6 = this.children; + for (j = 0, len1 = ref6.length; j < len1; j++) { + child = ref6[j]; + r += child.toString(options, level + 1); + } + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + } + return r; + }; + + XMLElement.prototype.att = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLElement.prototype.a = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.i = function(target, value) { + return this.instruction(target, value); + }; + + return XMLElement; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLNode.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLNode.js new file mode 100644 index 0000000..0a6340b --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLNode.js @@ -0,0 +1,331 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLElement, XMLNode, XMLRaw, XMLText, isEmpty, isFunction, isObject, + hasProp = {}.hasOwnProperty; + + isObject = require('lodash/isObject'); + + isFunction = require('lodash/isFunction'); + + isEmpty = require('lodash/isEmpty'); + + XMLElement = null; + + XMLCData = null; + + XMLComment = null; + + XMLDeclaration = null; + + XMLDocType = null; + + XMLRaw = null; + + XMLText = null; + + module.exports = XMLNode = (function() { + function XMLNode(parent) { + this.parent = parent; + this.options = this.parent.options; + this.stringify = this.parent.stringify; + if (XMLElement === null) { + XMLElement = require('./XMLElement'); + XMLCData = require('./XMLCData'); + XMLComment = require('./XMLComment'); + XMLDeclaration = require('./XMLDeclaration'); + XMLDocType = require('./XMLDocType'); + XMLRaw = require('./XMLRaw'); + XMLText = require('./XMLText'); + } + } + + XMLNode.prototype.element = function(name, attributes, text) { + var childNode, item, j, k, key, lastChild, len, len1, ref, val; + lastChild = null; + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + if (name != null) { + name = name.valueOf(); + } + if (Array.isArray(name)) { + for (j = 0, len = name.length; j < len; j++) { + item = name[j]; + lastChild = this.element(item); + } + } else if (isFunction(name)) { + lastChild = this.element(name.apply()); + } else if (isObject(name)) { + for (key in name) { + if (!hasProp.call(name, key)) continue; + val = name[key]; + if (isFunction(val)) { + val = val.apply(); + } + if ((isObject(val)) && (isEmpty(val))) { + val = null; + } + if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) { + lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val); + } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) { + lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val); + } else if (!this.options.separateArrayItems && Array.isArray(val)) { + for (k = 0, len1 = val.length; k < len1; k++) { + item = val[k]; + childNode = {}; + childNode[key] = item; + lastChild = this.element(childNode); + } + } else if (isObject(val)) { + lastChild = this.element(key); + lastChild.element(val); + } else { + lastChild = this.element(key, val); + } + } + } else { + if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) { + lastChild = this.text(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) { + lastChild = this.cdata(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) { + lastChild = this.comment(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) { + lastChild = this.raw(text); + } else { + lastChild = this.node(name, attributes, text); + } + } + if (lastChild == null) { + throw new Error("Could not create any elements with: " + name); + } + return lastChild; + }; + + XMLNode.prototype.insertBefore = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.insertAfter = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level"); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i + 1); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.remove = function() { + var i, ref; + if (this.isRoot) { + throw new Error("Cannot remove the root element"); + } + i = this.parent.children.indexOf(this); + [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref = [])), ref; + return this.parent; + }; + + XMLNode.prototype.node = function(name, attributes, text) { + var child, ref; + if (name != null) { + name = name.valueOf(); + } + if (attributes == null) { + attributes = {}; + } + attributes = attributes.valueOf(); + if (!isObject(attributes)) { + ref = [attributes, text], text = ref[0], attributes = ref[1]; + } + child = new XMLElement(this, name, attributes); + if (text != null) { + child.text(text); + } + this.children.push(child); + return child; + }; + + XMLNode.prototype.text = function(value) { + var child; + child = new XMLText(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.raw = function(value) { + var child; + child = new XMLRaw(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.declaration = function(version, encoding, standalone) { + var doc, xmldec; + doc = this.document(); + xmldec = new XMLDeclaration(doc, version, encoding, standalone); + doc.xmldec = xmldec; + return doc.root(); + }; + + XMLNode.prototype.doctype = function(pubID, sysID) { + var doc, doctype; + doc = this.document(); + doctype = new XMLDocType(doc, pubID, sysID); + doc.doctype = doctype; + return doctype; + }; + + XMLNode.prototype.up = function() { + if (this.isRoot) { + throw new Error("The root node has no parent. Use doc() if you need to get the document object."); + } + return this.parent; + }; + + XMLNode.prototype.root = function() { + var child; + if (this.isRoot) { + return this; + } + child = this.parent; + while (!child.isRoot) { + child = child.parent; + } + return child; + }; + + XMLNode.prototype.document = function() { + return this.root().documentObject; + }; + + XMLNode.prototype.end = function(options) { + return this.document().toString(options); + }; + + XMLNode.prototype.prev = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i < 1) { + throw new Error("Already at the first node"); + } + return this.parent.children[i - 1]; + }; + + XMLNode.prototype.next = function() { + var i; + if (this.isRoot) { + throw new Error("Root node has no siblings"); + } + i = this.parent.children.indexOf(this); + if (i === -1 || i === this.parent.children.length - 1) { + throw new Error("Already at the last node"); + } + return this.parent.children[i + 1]; + }; + + XMLNode.prototype.importXMLBuilder = function(xmlbuilder) { + var clonedRoot; + clonedRoot = xmlbuilder.root().clone(); + clonedRoot.parent = this; + clonedRoot.isRoot = false; + this.children.push(clonedRoot); + return this; + }; + + XMLNode.prototype.ele = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.nod = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.txt = function(value) { + return this.text(value); + }; + + XMLNode.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.com = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.doc = function() { + return this.document(); + }; + + XMLNode.prototype.dec = function(version, encoding, standalone) { + return this.declaration(version, encoding, standalone); + }; + + XMLNode.prototype.dtd = function(pubID, sysID) { + return this.doctype(pubID, sysID); + }; + + XMLNode.prototype.e = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.n = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.t = function(value) { + return this.text(value); + }; + + XMLNode.prototype.d = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.c = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.r = function(value) { + return this.raw(value); + }; + + XMLNode.prototype.u = function() { + return this.up(); + }; + + return XMLNode; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js new file mode 100644 index 0000000..596f5a6 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js @@ -0,0 +1,51 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLProcessingInstruction, create; + + create = require('lodash/create'); + + module.exports = XMLProcessingInstruction = (function() { + function XMLProcessingInstruction(parent, target, value) { + this.stringify = parent.stringify; + if (target == null) { + throw new Error("Missing instruction target"); + } + this.target = this.stringify.insTarget(target); + if (value) { + this.value = this.stringify.insValue(value); + } + } + + XMLProcessingInstruction.prototype.clone = function() { + return create(XMLProcessingInstruction.prototype, this); + }; + + XMLProcessingInstruction.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += ''; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLProcessingInstruction; + + })(); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLRaw.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLRaw.js new file mode 100644 index 0000000..9f48962 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLRaw.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLNode, XMLRaw, create, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + create = require('lodash/create'); + + XMLNode = require('./XMLNode'); + + module.exports = XMLRaw = (function(superClass) { + extend(XMLRaw, superClass); + + function XMLRaw(parent, text) { + XMLRaw.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing raw text"); + } + this.value = this.stringify.raw(text); + } + + XMLRaw.prototype.clone = function() { + return create(XMLRaw.prototype, this); + }; + + XMLRaw.prototype.toString = function(options, level) { + var indent, newline, offset, pretty, r, ref, ref1, ref2, space; + pretty = (options != null ? options.pretty : void 0) || false; + indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' '; + offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0; + newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\n'; + level || (level = 0); + space = new Array(level + offset + 1).join(indent); + r = ''; + if (pretty) { + r += space; + } + r += this.value; + if (pretty) { + r += newline; + } + return r; + }; + + return XMLRaw; + + })(XMLNode); + +}).call(this); diff --git a/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLStringifier.js b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLStringifier.js new file mode 100644 index 0000000..bee8587 --- /dev/null +++ b/platforms/android/assets/www/node_modules/xmlbuilder/lib/XMLStringifier.js @@ -0,0 +1,193 @@ +// Generated by CoffeeScript 1.9.1 +(function() { + var XMLStringifier, camelCase, kebabCase, snakeCase, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + hasProp = {}.hasOwnProperty; + + camelCase = require('lodash/camelCase'); + + kebabCase = require('lodash/kebabCase'); + + snakeCase = require('lodash/snakeCase'); + + module.exports = XMLStringifier = (function() { + function XMLStringifier(options) { + this.assertLegalChar = bind(this.assertLegalChar, this); + var key, ref, value; + this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0; + this.noDoubleEncoding = options != null ? options.noDoubleEncoding : void 0; + this.textCase = options != null ? options.textCase : void 0; + ref = (options != null ? options.stringify : void 0) || {}; + for (key in ref) { + if (!hasProp.call(ref, key)) continue; + value = ref[key]; + this[key] = value; + } + } + + XMLStringifier.prototype.eleName = function(val) { + val = '' + val || ''; + val = this.applyCase(val); + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.eleText = function(val) { + val = '' + val || ''; + return this.assertLegalChar(this.elEscape(val)); + }; + + XMLStringifier.prototype.cdata = function(val) { + val = '' + val || ''; + val = val.replace(']]>', ']]]]>'); + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.comment = function(val) { + val = '' + val || ''; + if (val.match(/--/)) { + throw new Error("Comment text cannot contain double-hypen: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.raw = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attName = function(val) { + val = '' + val || ''; + return val = this.applyCase(val); + }; + + XMLStringifier.prototype.attValue = function(val) { + val = '' + val || ''; + return this.attEscape(val); + }; + + XMLStringifier.prototype.insTarget = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.insValue = function(val) { + val = '' + val || ''; + if (val.match(/\?>/)) { + throw new Error("Invalid processing instruction value: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlVersion = function(val) { + val = '' + val || ''; + if (!val.match(/1\.[0-9]+/)) { + throw new Error("Invalid version number: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlEncoding = function(val) { + val = '' + val || ''; + if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-]|-)*$/)) { + throw new Error("Invalid encoding: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlStandalone = function(val) { + if (val) { + return "yes"; + } else { + return "no"; + } + }; + + XMLStringifier.prototype.dtdPubID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdSysID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdElementValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttType = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttDefault = function(val) { + if (val != null) { + return '' + val || ''; + } else { + return val; + } + }; + + XMLStringifier.prototype.dtdEntityValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdNData = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.convertAttKey = '@'; + + XMLStringifier.prototype.convertPIKey = '?'; + + XMLStringifier.prototype.convertTextKey = '#text'; + + XMLStringifier.prototype.convertCDataKey = '#cdata'; + + XMLStringifier.prototype.convertCommentKey = '#comment'; + + XMLStringifier.prototype.convertRawKey = '#raw'; + + XMLStringifier.prototype.assertLegalChar = function(str) { + var chars, chr; + if (this.allowSurrogateChars) { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/; + } else { + chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/; + } + chr = str.match(chars); + if (chr) { + throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index); + } + return str; + }; + + XMLStringifier.prototype.applyCase = function(str) { + switch (this.textCase) { + case "camel": + return camelCase(str); + case "kebab": + case "lower": + return kebabCase(str); + case "snake": + return snakeCase(str); + case "upper": + return kebabCase(str).toUpperCase(); + default: + return str; + } + }; + + XMLStringifier.prototype.elEscape = function(str) { + var ampregex; + ampregex = this.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g; + return str.replace(ampregex, '&').replace(//g, '>').replace(/\r/g, ' '); + }; + + XMLStringifier.prototype.attEscape = function(str) { + var ampregex; + ampregex = this.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g; + return str.replace(ampregex, '&').replace(/=1.0.0", + "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/xml2js" + ] + ], + "_from": "xmlbuilder@>=1.0.0", + "_id": "xmlbuilder@5.0.1", + "_inCache": true, + "_installable": true, + "_location": "/xmlbuilder", + "_npmOperationalInternal": { + "host": "packages-13-west.internal.npmjs.com", + "tmp": "tmp/xmlbuilder-5.0.1.tgz_1457392734733_0.19968478404916823" + }, + "_npmUser": { + "email": "oozcitak@gmail.com", + "name": "oozcitak" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "name": "xmlbuilder", + "raw": "xmlbuilder@>=1.0.0", + "rawSpec": ">=1.0.0", + "scope": null, + "spec": ">=1.0.0", + "type": "range" + }, + "_requiredBy": [ + "/xml2js" + ], + "_resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-5.0.1.tgz", + "_shasum": "155f1fb6e860137047443db54a9b263761b1f5c3", + "_shrinkwrap": null, + "_spec": "xmlbuilder@>=1.0.0", + "_where": "/Users/adamdon/Desktop/studywell/studywell/sw/www/node_modules/xml2js", + "author": { + "email": "oozcitak@gmail.com", + "name": "Ozgur Ozcitak" + }, + "bugs": { + "url": "http://github.com/oozcitak/xmlbuilder-js/issues" + }, + "contributors": [], + "dependencies": { + "lodash": "^4.0.0" + }, + "description": "An XML builder for node.js", + "devDependencies": { + "coffee-coverage": "*", + "coffee-script": "*", + "coveralls": "*", + "istanbul": "*", + "mocha": "*" + }, + "directories": {}, + "dist": { + "shasum": "155f1fb6e860137047443db54a9b263761b1f5c3", + "tarball": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-5.0.1.tgz" + }, + "engines": { + "node": ">=0.10" + }, + "gitHead": "328bfb90488b9823361e329598c5b2c8b9d3c1a8", + "homepage": "http://github.com/oozcitak/xmlbuilder-js", + "keywords": [ + "xml", + "xmlbuilder" + ], + "license": "MIT", + "main": "./lib/index", + "maintainers": [ + { + "email": "oozcitak@gmail.com", + "name": "oozcitak" + } + ], + "name": "xmlbuilder", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/oozcitak/xmlbuilder-js.git" + }, + "scripts": { + "postpublish": "rm -rf lib", + "prepublish": "coffee -co lib src", + "test": "mocha && istanbul report text lcov" + }, + "version": "5.0.1" +} diff --git a/platforms/android/assets/www/package.json b/platforms/android/assets/www/package.json new file mode 100644 index 0000000..70a9554 --- /dev/null +++ b/platforms/android/assets/www/package.json @@ -0,0 +1,15 @@ +{ + "name": "studywelltests", + "version": "1.0.0", + "description": "gui tests for studywell", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Adam Don", + "license": "ISC", + "dependencies": { + "jasmine": "^2.4.1", + "selenium-webdriver": "^2.52.0" + } +} diff --git a/platforms/android/assets/www/resources/js/alerts.js b/platforms/android/assets/www/resources/js/alerts.js index 7371a60..0475c84 100644 --- a/platforms/android/assets/www/resources/js/alerts.js +++ b/platforms/android/assets/www/resources/js/alerts.js @@ -49,15 +49,15 @@ function stillRecordingNoiseLevelWarning() { //for some reason this nicer looking prompt broke (text input colour became white on white) //Ask the user for notes on their session. ---------------------------------------------------------------- -function askUserNotes() { - navigator.notification.prompt( - 'This is an opportunity to enter any notes you wish to remember about this session', // message - onPrompt, // callback to invoke - 'User Notes', // title - ['Ok'] // buttonLabels - - ); -} +// function askUserNotes() { +// navigator.notification.prompt( +// 'This is an opportunity to enter any notes you wish to remember about this session', // message +// onPrompt, // callback to invoke +// 'User Notes', // title +// ['Ok'] // buttonLabels + +// ); +// } function onPrompt(results) { userNotes = results.input1; diff --git a/platforms/android/assets/www/resources/js/mic.js b/platforms/android/assets/www/resources/js/mic.js index 2f67b54..addd671 100644 --- a/platforms/android/assets/www/resources/js/mic.js +++ b/platforms/android/assets/www/resources/js/mic.js @@ -64,7 +64,7 @@ function readMic(reading) { if (firstRunMic != true) { micVolume.read(function(reading) { - console.log("micPulseCount: " + micPulseCount + " vol: " + reading.volume); + // console.log("micPulseCount: " + micPulseCount + " vol: " + reading.volume); vol = reading.volume; totalVol = totalVol + vol; }, errorCallback); diff --git a/platforms/android/assets/www/resources/js/motion.js b/platforms/android/assets/www/resources/js/motion.js index 750ae00..81dfdf7 100644 --- a/platforms/android/assets/www/resources/js/motion.js +++ b/platforms/android/assets/www/resources/js/motion.js @@ -1,9 +1,9 @@ // function onSuccessAcc(acceleration) { - console.log('Acceleration X: ' + acceleration.x + '\n' + - 'Acceleration Y: ' + acceleration.y + '\n' + - 'Acceleration Z: ' + acceleration.z + '\n' + - 'Timestamp: ' + acceleration.timestamp + '\n'); + // console.log('Acceleration X: ' + acceleration.x + '\n' + + // 'Acceleration Y: ' + acceleration.y + '\n' + + // 'Acceleration Z: ' + acceleration.z + '\n' + + // 'Timestamp: ' + acceleration.timestamp + '\n'); // var currentAccelValues = new accelValues(acceleration.x, acceleration.y, acceleration.z, acceleration.timestamp); //boolean for if the device is moving or not @@ -11,6 +11,11 @@ function onSuccessAcc(acceleration) { accelPulseCount++; //this is a count of how many pulses the accelerometer sensor has read (how many pulses within this interval) + + + + + //check how fast the phone can pulse accelerometer (some phones limited) if (localStorage.getItem("accelPulseCount") == null) { localStorage.setItem("accelPulseCount", accelPulseCount); @@ -20,30 +25,33 @@ function onSuccessAcc(acceleration) { //safety precausion to make sure accelPulseCount does not go above 9 if (localStorage.getItem("accelPulseCount") > 9) { localStorage.setItem("accelPulseCount", 9); -} + } //if this is the first interval run then skip (we want to count the number of pulses per interval first) if (firstRunAccel != true) { - //check if phone is in motion - if (acceleration.x > 1 || acceleration.x < -1) { - moving = true; - } - if (acceleration.y > 1 || acceleration.y < -1) { - moving = true; - } - if (acceleration.z > 10.2 || acceleration.z < 8.2) { - moving = true; - } - if (moving) { - motionCount++; + if (localStorage.getItem("accelX") != null) { + //check if phone was in motion + if (Math.abs(localStorage.getItem("accelX")) - Math.abs(acceleration.x) > 0.5 || Math.abs(localStorage.getItem("accelX")) - Math.abs(acceleration.x) < -0.5) { + hasMoved = true; + } + if (Math.abs(localStorage.getItem("accelY")) - Math.abs(acceleration.y) > 0.5 || Math.abs(localStorage.getItem("accelY")) - Math.abs(acceleration.y) < -0.5) { + hasMoved = true; + } + if (Math.abs(localStorage.getItem("accelZ")) - Math.abs(acceleration.z) > 0.5 || Math.abs(localStorage.getItem("accelZ")) - Math.abs(acceleration.z) < -0.5) { + hasMoved = true; + } else + hasMoved = false; + console.log("X difference: " + (Math.abs(localStorage.getItem("accelX")) - Math.abs(acceleration.x))); + console.log("Y difference: " + (Math.abs(localStorage.getItem("accelY")) - Math.abs(acceleration.y))); + console.log("Z difference: " + (Math.abs(localStorage.getItem("accelZ")) - Math.abs(acceleration.z))); } - //if total count of moving is greater than the total number of pulses per interval divided by 3 then device is said to be moving in this interval - if (motionCount > (localStorage.getItem("accelPulseCount") / 3)) { - accelNotStudying++; - accelIntervalNSBool = "true"; - //console.log("Hit the interval move loop"); + + if (hasMoved) { + console.log("accel not studying count went up"); + accelNotStudying++; + accelIntervalNSBool = "true"; stopAccelInterval(); } else if (accelPulseCount > (localStorage.getItem("accelPulseCount") - 1)) { //once the interval is nearly finished, device is not moving this interval @@ -51,12 +59,14 @@ function onSuccessAcc(acceleration) { //console.log("accelIntervalNSBool: " +accelIntervalNSBool ); accelPulseCount = 0; //console.log("Hit the interval not moving loop"); + console.log("accel not studying REMAINS the same"); + } //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldAccelIntervalNSBool") != null) { //console.log('running updateSampleR'); - //updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); + updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); } //This is so we can compare the values from this interval and the previous interval if (typeof(Storage) !== "undefined") { @@ -66,8 +76,15 @@ function onSuccessAcc(acceleration) { // Sorry! No Web Storage support.. console.log("No web storage support - oh dear."); } - console.log('Device moving: ' + moving); + // console.log('Device moving: ' + moving); + console.log('Device moving: ' + hasMoved); + } + + //Store the values to compare next interval + localStorage.setItem("accelX", acceleration.x); + localStorage.setItem("accelY", acceleration.y); + localStorage.setItem("accelZ", acceleration.z); } @@ -85,7 +102,7 @@ function readAccel() { function accelInterval() { //localStorage.setItem("oldAccelIntervalNotStudyingBool", "initial"); accelPulseCount = 0; //this is a count of how many pulses the accelerometer sensor has read (how many pulses within this interval) - + hasMoved = false; //console.log("Accelerometer sampling rate: " + accelSampleRate); accelIntervalNSBool = false; //boolean to determine if the user is not studying during the current interval diff --git a/platforms/android/assets/www/resources/js/motionOldAlgo.js b/platforms/android/assets/www/resources/js/motionOldAlgo.js new file mode 100644 index 0000000..750ae00 --- /dev/null +++ b/platforms/android/assets/www/resources/js/motionOldAlgo.js @@ -0,0 +1,104 @@ +// +function onSuccessAcc(acceleration) { + console.log('Acceleration X: ' + acceleration.x + '\n' + + 'Acceleration Y: ' + acceleration.y + '\n' + + 'Acceleration Z: ' + acceleration.z + '\n' + + 'Timestamp: ' + acceleration.timestamp + '\n'); + // var currentAccelValues = new accelValues(acceleration.x, acceleration.y, acceleration.z, acceleration.timestamp); + + //boolean for if the device is moving or not + var moving = false; + + accelPulseCount++; //this is a count of how many pulses the accelerometer sensor has read (how many pulses within this interval) + + //check how fast the phone can pulse accelerometer (some phones limited) + if (localStorage.getItem("accelPulseCount") == null) { + localStorage.setItem("accelPulseCount", accelPulseCount); + } else if (accelPulseCount > localStorage.getItem("accelPulseCount")) { + localStorage.setItem("accelPulseCount", accelPulseCount); + } + //safety precausion to make sure accelPulseCount does not go above 9 + if (localStorage.getItem("accelPulseCount") > 9) { + localStorage.setItem("accelPulseCount", 9); +} + //if this is the first interval run then skip (we want to count the number of pulses per interval first) + if (firstRunAccel != true) { + + //check if phone is in motion + if (acceleration.x > 1 || acceleration.x < -1) { + moving = true; + } + if (acceleration.y > 1 || acceleration.y < -1) { + moving = true; + } + if (acceleration.z > 10.2 || acceleration.z < 8.2) { + moving = true; + } + if (moving) { + motionCount++; + } + //if total count of moving is greater than the total number of pulses per interval divided by 3 then device is said to be moving in this interval + if (motionCount > (localStorage.getItem("accelPulseCount") / 3)) { + accelNotStudying++; + accelIntervalNSBool = "true"; + //console.log("Hit the interval move loop"); + + + stopAccelInterval(); + + } else if (accelPulseCount > (localStorage.getItem("accelPulseCount") - 1)) { //once the interval is nearly finished, device is not moving this interval + accelIntervalNSBool = "false"; + //console.log("accelIntervalNSBool: " +accelIntervalNSBool ); + accelPulseCount = 0; + //console.log("Hit the interval not moving loop"); + + } + //As long as this isn't the first time this method is running, check if the sample rate needs updated. + if (localStorage.getItem("oldAccelIntervalNSBool") != null) { + //console.log('running updateSampleR'); + //updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); + } + //This is so we can compare the values from this interval and the previous interval + if (typeof(Storage) !== "undefined") { + localStorage.setItem("oldAccelIntervalNSBool", accelIntervalNSBool); + + } else { + // Sorry! No Web Storage support.. + console.log("No web storage support - oh dear."); + } + console.log('Device moving: ' + moving); + } +} + + +function onErrorAcc() { + alert('Error: ' + error); +} + + +function readAccel() { + navigator.accelerometer.getCurrentAcceleration(onSuccessAcc, onErrorAcc); +} + + +//Loop the accelerometer sensor reading to pulse every one second for 10 seconds. +function accelInterval() { + //localStorage.setItem("oldAccelIntervalNotStudyingBool", "initial"); + accelPulseCount = 0; //this is a count of how many pulses the accelerometer sensor has read (how many pulses within this interval) + + //console.log("Accelerometer sampling rate: " + accelSampleRate); + accelIntervalNSBool = false; //boolean to determine if the user is not studying during the current interval + + accelIntervalCount++; //how many intervals the accelerometer has been monitored for during this session + motionCount = 0; //how many times the accelerometer has pulsed during this session + accelSensor = setInterval(readAccel, 1000); //measure values every x milliseconds + setTimeout(stopAccelInterval, 10000); //stop reading after x milliseconds +} + +//finish the interval +function stopAccelInterval() { + firstRunAccel = false; + clearInterval(accelSensor); + clearTimeout(accelSensor); + clearTimeout(stopAccelInterval); +} \ No newline at end of file diff --git a/platforms/android/assets/www/resources/js/study.js b/platforms/android/assets/www/resources/js/study.js index cbc8f9a..b07b7c5 100644 --- a/platforms/android/assets/www/resources/js/study.js +++ b/platforms/android/assets/www/resources/js/study.js @@ -309,12 +309,12 @@ function disableWakeLock() { //for some reason the nicer looking prompt broke (text input colour became white on white) -// function askUserNotes() { -// userNotes = prompt("This is an opportunity to enter any notes you wish to remember about this session. If you have nothing to add then just click OK."); -// localStorage.setItem("userNotes", userNotes); +function askUserNotes() { + userNotes = prompt("This is an opportunity to enter any notes you wish to remember about this session. If you have nothing to add then just click OK."); + localStorage.setItem("userNotes", userNotes); -// pushData(); -// } + pushData(); +} // function getUserNotes() { // if (localStorage.getItem("userNotes") != null) { diff --git a/platforms/android/assets/www/spec/UI-help-test.js b/platforms/android/assets/www/spec/UI-help-test.js new file mode 100644 index 0000000..441e50c --- /dev/null +++ b/platforms/android/assets/www/spec/UI-help-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Help Page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/help.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('help'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/platforms/android/assets/www/spec/UI-home-test.js b/platforms/android/assets/www/spec/UI-home-test.js new file mode 100644 index 0000000..b76e64f --- /dev/null +++ b/platforms/android/assets/www/spec/UI-home-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Home Page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/index.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('home'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/platforms/android/assets/www/spec/UI-reports-test.js b/platforms/android/assets/www/spec/UI-reports-test.js new file mode 100644 index 0000000..d8643e9 --- /dev/null +++ b/platforms/android/assets/www/spec/UI-reports-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Report Page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/reports.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('reports'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/platforms/android/assets/www/spec/UI-schedule-test.js b/platforms/android/assets/www/spec/UI-schedule-test.js new file mode 100644 index 0000000..19e0895 --- /dev/null +++ b/platforms/android/assets/www/spec/UI-schedule-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Schedule page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/schedule.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('schedule'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/platforms/android/assets/www/spec/UI-settings-test.js b/platforms/android/assets/www/spec/UI-settings-test.js new file mode 100644 index 0000000..df8240b --- /dev/null +++ b/platforms/android/assets/www/spec/UI-settings-test.js @@ -0,0 +1,133 @@ +// + +var selenium = require('selenium-webdriver'); + +describe('StudyWell Settings Page UI Tests', function() { + + // Open the web app in the browser before each test is run + beforeEach(function(done) { + this.driver = new selenium.Builder(). + withCapabilities(selenium.Capabilities.chrome()). + build(); + + this.driver.get('http://localhost:8000/settings.html').then(done); + }); + + // Close the website after each test is run (so that it is opened fresh each time) + afterEach(function(done) { + this.driver.quit().then(done); + }); + + // Test to ensure we are on the home page by checking the tag id attribute + it('Should be on the home page', function(done) { + var element = this.driver.findElement(selenium.By.tagName('body')); + + element.getAttribute('id').then(function(id) { + expect(id).toBe('settings'); + done(); + }); + }); + + // Test the navigation bar and home button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('ST')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/index'); + done(); + }); + + }); + + // Test the navigation bar and schedule button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('sched')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/schedule'); + done(); + }); + + }); + + // Test the navigation bar and reports button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('reps')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/reports'); + done(); + }); + + }); + + // Test the navigation bar and settings button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('set')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/settings'); + done(); + }); + + }); + + // Test the navigation bar and help button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('help')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/help'); + done(); + }); + + }); + + // Test the navigation bar and survey button page + it('Has a working nav', function(done) { + var element = this.driver.findElement(selenium.By.id('hamburger')); + + element.click(); + + var menuElement = this.driver.findElement(selenium.By.id('survey')); + + menuElement.click(); + + this.driver.getCurrentUrl().then(function(value) { + expect(value).toContain('/viewform'); + done(); + }); + + }); + + }); \ No newline at end of file diff --git a/platforms/android/assets/www/spec/support/jasmine.json b/platforms/android/assets/www/spec/support/jasmine.json new file mode 100644 index 0000000..3ea3166 --- /dev/null +++ b/platforms/android/assets/www/spec/support/jasmine.json @@ -0,0 +1,11 @@ +{ + "spec_dir": "spec", + "spec_files": [ + "**/*[sS]pec.js" + ], + "helpers": [ + "helpers/**/*.js" + ], + "stopSpecOnExpectationFailure": false, + "random": false +} diff --git a/platforms/android/platform_www/cordova_plugins.js b/platforms/android/platform_www/cordova_plugins.js index 330a466..25c72bb 100644 --- a/platforms/android/platform_www/cordova_plugins.js +++ b/platforms/android/platform_www/cordova_plugins.js @@ -14,13 +14,6 @@ module.exports = [ "navigator.startApp" ] }, - { - "file": "plugins/com.shukriadams.micVolume/www/micVolume.js", - "id": "com.shukriadams.micVolume.MicVolume", - "clobbers": [ - "window.micVolume" - ] - }, { "file": "plugins/cordova-plugin-device/www/device.js", "id": "cordova-plugin-device.device", @@ -116,6 +109,13 @@ module.exports = [ { "file": "plugins/cordova-plugin-test-framework/www/main.js", "id": "cordova-plugin-test-framework.main" + }, + { + "file": "plugins/com.shukriadams.micVolume/www/micVolume.js", + "id": "com.shukriadams.micVolume.MicVolume", + "clobbers": [ + "window.micVolume" + ] } ]; module.exports.metadata = @@ -123,7 +123,6 @@ module.exports.metadata = { "at.gofg.sportscomputer.powermanagement": "1.1.0", "com.lampa.startapp": "0.0.5", - "com.shukriadams.micVolume": "0.1.0", "cordova-plugin-app-event": "1.2.0", "cordova-plugin-device": "1.1.1", "cordova-plugin-background-mode": "0.6.5", @@ -133,7 +132,8 @@ module.exports.metadata = "de.appplant.cordova.plugin.local-notification": "0.8.4", "cordova-plugin-device-tests": "1.1.2-dev", "cordova-plugin-device-motion-tests": "1.2.1-dev", - "cordova-plugin-test-framework": "1.1.2-dev" + "cordova-plugin-test-framework": "1.1.2-dev", + "com.shukriadams.micVolume": "0.1.0" }; // BOTTOM OF METADATA }); \ No newline at end of file diff --git a/platforms/android/res/xml/config.xml b/platforms/android/res/xml/config.xml index efa31cd..1009481 100644 --- a/platforms/android/res/xml/config.xml +++ b/platforms/android/res/xml/config.xml @@ -7,9 +7,6 @@ - - - @@ -30,6 +27,9 @@ + + + StudyWell diff --git a/platforms/android/src/com/shukriadams/micVolume/MicVolumePlugin.java b/platforms/android/src/com/shukriadams/micVolume/MicVolumePlugin.java index e54c3eb..aac3302 100644 --- a/platforms/android/src/com/shukriadams/micVolume/MicVolumePlugin.java +++ b/platforms/android/src/com/shukriadams/micVolume/MicVolumePlugin.java @@ -89,4 +89,9 @@ private void stop(CallbackContext callbackContext) { callbackContext.success(); } -} \ No newline at end of file +} + + + + + diff --git a/plugins/android.json b/plugins/android.json index 02ff33c..5f1904f 100644 --- a/plugins/android.json +++ b/plugins/android.json @@ -13,9 +13,6 @@ "com.lampa.startapp": { "PACKAGE_NAME": "com.adamdon.sw" }, - "com.shukriadams.micVolume": { - "PACKAGE_NAME": "com.adamdon.sw" - }, "cordova-plugin-app-event": { "PACKAGE_NAME": "com.adamdon.sw" }, @@ -45,6 +42,9 @@ }, "cordova-plugin-test-framework": { "PACKAGE_NAME": "com.adamdon.sw" + }, + "com.shukriadams.micVolume": { + "PACKAGE_NAME": "com.adamdon.sw" } }, "dependent_plugins": {} diff --git a/plugins/com.shukriadams.micVolume/src/android/MicVolumePlugin.java b/plugins/com.shukriadams.micVolume/src/android/MicVolumePlugin.java index e54c3eb..aac3302 100644 --- a/plugins/com.shukriadams.micVolume/src/android/MicVolumePlugin.java +++ b/plugins/com.shukriadams.micVolume/src/android/MicVolumePlugin.java @@ -89,4 +89,9 @@ private void stop(CallbackContext callbackContext) { callbackContext.success(); } -} \ No newline at end of file +} + + + + + diff --git a/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginAlgorithmOne.js b/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginAlgorithmOne.js deleted file mode 100644 index 8c95d6e..0000000 --- a/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginAlgorithmOne.js +++ /dev/null @@ -1,99 +0,0 @@ -package com.shukriadams.micVolume; - -import org.apache.cordova.CallbackContext; -import org.apache.cordova.CordovaPlugin; -import org.json.JSONObject; -import org.json.JSONArray; -import org.json.JSONException; -import android.app.Activity; -import android.content.Intent; - -// used by audio -import android.os.Bundle; -import android.media.AudioFormat; -import android.media.AudioRecord; -import android.media.MediaRecorder; - -public class MicVolumePlugin extends CordovaPlugin -{ - @Override - public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { - try - { - if (action.equals("start")){ - start(callbackContext); - } else if (action.equals("read")){ - read(callbackContext); - } else if (action.equals("stop")){ - stop(callbackContext); - } else { - callbackContext.error("Unsupported action"); - } - - /* - JSONObject returnObj = new JSONObject(); - returnObj.put("title", "you should still be seeing this"); - callbackContext.success(returnObj); // pass return object back here - */ - return true; - } - catch(Exception e) - { - System.err.println("Exception: " + e.getMessage()); - callbackContext.error(e.getMessage()); - return false; - } - } - - private short[] buffer = null; - private AudioRecord audioRecord = null; - private int bufferSize= 1024; - private float volume = 0; - private int buflen; - - private void start(CallbackContext callbackContext) { - int freq =44100; - int chan = AudioFormat.CHANNEL_IN_MONO; - int enc = AudioFormat.ENCODING_PCM_16BIT; - int src = MediaRecorder.AudioSource.MIC; - buflen = AudioRecord.getMinBufferSize(freq, chan, enc); - audioRecord = new AudioRecord(src,freq,chan,enc,buflen); - - audioRecord.startRecording(); - - callbackContext.success(); - } - - private void read(CallbackContext callbackContext) throws JSONException - { - - JSONObject returnObj = new JSONObject(); - - double amplitude = 0; - buffer = new short[buflen]; - int bufferReadResult = audioRecord.read(buffer, 0, buflen); - double sumLevel = 0; - for (int i = 0; i < bufferReadResult; i++) { - sumLevel += buffer[i]; - } - amplitude = Math.abs((sumLevel / bufferReadResult)); - - returnObj.put("volume", Math.sqrt(amplitude)); - callbackContext.success(returnObj); - } - - private void stop(CallbackContext callbackContext) { - if (audioRecord != null) { - audioRecord.stop(); - audioRecord.release(); - audioRecord = null; - } - - callbackContext.success(); - } -} - - - - - diff --git a/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginMessy.java b/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginMessy.java deleted file mode 100644 index bfc7aa1..0000000 --- a/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginMessy.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.shukriadams.micVolume; - -import org.apache.cordova.CallbackContext; -import org.apache.cordova.CordovaPlugin; -import org.json.JSONObject; -import org.json.JSONArray; -import org.json.JSONException; -import android.app.Activity; -import android.content.Intent; - -// used by audio -import android.os.Bundle; -import android.media.AudioFormat; -import android.media.AudioRecord; -import android.media.MediaRecorder; -import android.util.Log; - -public class MicVolumePlugin extends CordovaPlugin -{ - @Override - public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { - try - { - if (action.equals("start")){ - start(callbackContext); - } else if (action.equals("read")){ - read(callbackContext); - } else if (action.equals("stop")){ - stop(callbackContext); - } else { - callbackContext.error("Unsupported action"); - } - - /* - JSONObject returnObj = new JSONObject(); - returnObj.put("title", "you should still be seeing this"); - callbackContext.success(returnObj); // pass return object back here - */ - return true; - } - catch(Exception e) - { - System.err.println("Exception: " + e.getMessage()); - callbackContext.error(e.getMessage()); - return false; - } - } - - private short[] buffer = null; - private AudioRecord audioRecord = null; - private int bufferSize= 1024; - private float volume = 0; - private int buflen; - private boolean isRecording; - private boolean isPausing; - private double baseValue; - - - private void start(CallbackContext callbackContext) { - int freq =8000; - int chan = AudioFormat.CHANNEL_IN_MONO; - int enc = AudioFormat.ENCODING_PCM_16BIT; - int src = MediaRecorder.AudioSource.MIC; - buflen = AudioRecord.getMinBufferSize(freq, chan, enc); - audioRecord = new AudioRecord(src,freq,chan,enc,buflen); - - audioRecord.startRecording(); - isRecording = true; - isPausing = false; - baseValue = 12.0; - callbackContext.success(); - } - - private void read(CallbackContext callbackContext) throws JSONException - { - resume(); - - if (!isPausing) { - JSONObject returnObj = new JSONObject(); - - double amplitude = 0; - buffer = new short[buflen]; - int bufferReadResult = audioRecord.read(buffer, 0, buflen); - double max = 0; - for (short s : buffer) - { - if(Math.abs(s) > max) - { - max = Math.abs(s); - } - } - - returnObj.put("volum", max); - callbackContext.success(returnObj); - } - } - - private void stop(CallbackContext callbackContext) { - if (isRecording = true) { - audioRecord.stop(); - audioRecord.release(); - audioRecord = null; - isPaused = true; - } - - callbackContext.success(); - } - - public void stopRec() { - isRecording = false; - } - - public void pause() { - if (!isPausing) - audioRecord.stop(); - isPausing = true; - } - - public void resume() { - if (audioRecord = null) { - start(); - } - if (isPausing) - audioRecord.startRecording(); - isPausing = false; - } -} - - - - - diff --git a/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginWorking.java b/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginWorking.java deleted file mode 100644 index 7685255..0000000 --- a/plugins/com.shukriadams.micVolume/src/android/MicVolumePluginWorking.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.shukriadams.micVolume; - -import org.apache.cordova.CallbackContext; -import org.apache.cordova.CordovaPlugin; -import org.json.JSONObject; -import org.json.JSONArray; -import org.json.JSONException; -import android.app.Activity; - -// used by audio -import android.os.Bundle; -import android.media.AudioFormat; -import android.media.AudioRecord; -import android.media.MediaRecorder; - -public class MicVolumePlugin extends CordovaPlugin -{ - @Override - public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { - try - { - if (action.equals("start")){ - start(callbackContext); - } else if (action.equals("read")){ - read(callbackContext); - } else if (action.equals("stop")){ - stop(callbackContext); - } else { - callbackContext.error("Unsupported action"); - } - - /* - JSONObject returnObj = new JSONObject(); - returnObj.put("title", "you should still be seeing this"); - callbackContext.success(returnObj); // pass return object back here - */ - return true; - } - catch(Exception e) - { - System.err.println("Exception: " + e.getMessage()); - callbackContext.error(e.getMessage()); - return false; - } - } - - private short[] buffer = null; - private AudioRecord audioRecord = null; - private int bufferSize= 1024; - private float volum = 0; - private int buflen; - - int freq =8000; - int chan = AudioFormat.CHANNEL_IN_MONO; - int enc = AudioFormat.ENCODING_PCM_16BIT; - int src = MediaRecorder.AudioSource.MIC; - - private void start(CallbackContext callbackContext) { - - buflen = AudioRecord.getMinBufferSize(freq, chan, enc); - audioRecord = new AudioRecord(src,freq,chan,enc,buflen); - - audioRecord.startRecording(); - callbackContext.success(); - } - - private void stop(CallbackContext callbackContext) { - - audioRecord.stop(); - audioRecord.release(); - audioRecord = null; - - callbackContext.success(); - } - - private void read(CallbackContext callbackContext) throws JSONException { - - - - returnObj.put("volum", max); - callbackContext.success(returnObj); - } - - - -} - - - - - diff --git a/plugins/fetch.json b/plugins/fetch.json index a945a47..4c1a12c 100644 --- a/plugins/fetch.json +++ b/plugins/fetch.json @@ -15,15 +15,6 @@ "is_top_level": true, "variables": {} }, - "com.shukriadams.micVolume": { - "source": { - "type": "git", - "url": "https://github.com/shukriadams/micVolume.git", - "subdir": "." - }, - "is_top_level": true, - "variables": {} - }, "cordova-plugin-device-motion": { "source": { "type": "registry", @@ -109,5 +100,14 @@ }, "is_top_level": true, "variables": {} + }, + "com.shukriadams.micVolume": { + "source": { + "type": "git", + "url": "https://github.com/shukriadams/micVolume", + "subdir": "." + }, + "is_top_level": true, + "variables": {} } } \ No newline at end of file diff --git a/www/resources/js/mic.js b/www/resources/js/mic.js index 2f67b54..5961b87 100644 --- a/www/resources/js/mic.js +++ b/www/resources/js/mic.js @@ -51,7 +51,7 @@ function readMic(reading) { micPulseCount++; - //check how fast the phone can pulse mic (some phones limited) + //check how fast the phone can pulse mic (some phones may be limited) if (localStorage.getItem("micPulseCount") == null) { localStorage.setItem("micPulseCount", micPulseCount); } else if (micPulseCount > localStorage.getItem("micPulseCount")) { @@ -64,7 +64,7 @@ function readMic(reading) { if (firstRunMic != true) { micVolume.read(function(reading) { - console.log("micPulseCount: " + micPulseCount + " vol: " + reading.volume); + // console.log("micPulseCount: " + micPulseCount + " vol: " + reading.volume); vol = reading.volume; totalVol = totalVol + vol; }, errorCallback); diff --git a/www/resources/js/motion.js b/www/resources/js/motion.js index 750ae00..81dfdf7 100644 --- a/www/resources/js/motion.js +++ b/www/resources/js/motion.js @@ -1,9 +1,9 @@ // function onSuccessAcc(acceleration) { - console.log('Acceleration X: ' + acceleration.x + '\n' + - 'Acceleration Y: ' + acceleration.y + '\n' + - 'Acceleration Z: ' + acceleration.z + '\n' + - 'Timestamp: ' + acceleration.timestamp + '\n'); + // console.log('Acceleration X: ' + acceleration.x + '\n' + + // 'Acceleration Y: ' + acceleration.y + '\n' + + // 'Acceleration Z: ' + acceleration.z + '\n' + + // 'Timestamp: ' + acceleration.timestamp + '\n'); // var currentAccelValues = new accelValues(acceleration.x, acceleration.y, acceleration.z, acceleration.timestamp); //boolean for if the device is moving or not @@ -11,6 +11,11 @@ function onSuccessAcc(acceleration) { accelPulseCount++; //this is a count of how many pulses the accelerometer sensor has read (how many pulses within this interval) + + + + + //check how fast the phone can pulse accelerometer (some phones limited) if (localStorage.getItem("accelPulseCount") == null) { localStorage.setItem("accelPulseCount", accelPulseCount); @@ -20,30 +25,33 @@ function onSuccessAcc(acceleration) { //safety precausion to make sure accelPulseCount does not go above 9 if (localStorage.getItem("accelPulseCount") > 9) { localStorage.setItem("accelPulseCount", 9); -} + } //if this is the first interval run then skip (we want to count the number of pulses per interval first) if (firstRunAccel != true) { - //check if phone is in motion - if (acceleration.x > 1 || acceleration.x < -1) { - moving = true; - } - if (acceleration.y > 1 || acceleration.y < -1) { - moving = true; - } - if (acceleration.z > 10.2 || acceleration.z < 8.2) { - moving = true; - } - if (moving) { - motionCount++; + if (localStorage.getItem("accelX") != null) { + //check if phone was in motion + if (Math.abs(localStorage.getItem("accelX")) - Math.abs(acceleration.x) > 0.5 || Math.abs(localStorage.getItem("accelX")) - Math.abs(acceleration.x) < -0.5) { + hasMoved = true; + } + if (Math.abs(localStorage.getItem("accelY")) - Math.abs(acceleration.y) > 0.5 || Math.abs(localStorage.getItem("accelY")) - Math.abs(acceleration.y) < -0.5) { + hasMoved = true; + } + if (Math.abs(localStorage.getItem("accelZ")) - Math.abs(acceleration.z) > 0.5 || Math.abs(localStorage.getItem("accelZ")) - Math.abs(acceleration.z) < -0.5) { + hasMoved = true; + } else + hasMoved = false; + console.log("X difference: " + (Math.abs(localStorage.getItem("accelX")) - Math.abs(acceleration.x))); + console.log("Y difference: " + (Math.abs(localStorage.getItem("accelY")) - Math.abs(acceleration.y))); + console.log("Z difference: " + (Math.abs(localStorage.getItem("accelZ")) - Math.abs(acceleration.z))); } - //if total count of moving is greater than the total number of pulses per interval divided by 3 then device is said to be moving in this interval - if (motionCount > (localStorage.getItem("accelPulseCount") / 3)) { - accelNotStudying++; - accelIntervalNSBool = "true"; - //console.log("Hit the interval move loop"); + + if (hasMoved) { + console.log("accel not studying count went up"); + accelNotStudying++; + accelIntervalNSBool = "true"; stopAccelInterval(); } else if (accelPulseCount > (localStorage.getItem("accelPulseCount") - 1)) { //once the interval is nearly finished, device is not moving this interval @@ -51,12 +59,14 @@ function onSuccessAcc(acceleration) { //console.log("accelIntervalNSBool: " +accelIntervalNSBool ); accelPulseCount = 0; //console.log("Hit the interval not moving loop"); + console.log("accel not studying REMAINS the same"); + } //As long as this isn't the first time this method is running, check if the sample rate needs updated. if (localStorage.getItem("oldAccelIntervalNSBool") != null) { //console.log('running updateSampleR'); - //updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); + updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); } //This is so we can compare the values from this interval and the previous interval if (typeof(Storage) !== "undefined") { @@ -66,8 +76,15 @@ function onSuccessAcc(acceleration) { // Sorry! No Web Storage support.. console.log("No web storage support - oh dear."); } - console.log('Device moving: ' + moving); + // console.log('Device moving: ' + moving); + console.log('Device moving: ' + hasMoved); + } + + //Store the values to compare next interval + localStorage.setItem("accelX", acceleration.x); + localStorage.setItem("accelY", acceleration.y); + localStorage.setItem("accelZ", acceleration.z); } @@ -85,7 +102,7 @@ function readAccel() { function accelInterval() { //localStorage.setItem("oldAccelIntervalNotStudyingBool", "initial"); accelPulseCount = 0; //this is a count of how many pulses the accelerometer sensor has read (how many pulses within this interval) - + hasMoved = false; //console.log("Accelerometer sampling rate: " + accelSampleRate); accelIntervalNSBool = false; //boolean to determine if the user is not studying during the current interval diff --git a/www/resources/js/motionOldAlgo.js b/www/resources/js/motionOldAlgo.js new file mode 100644 index 0000000..750ae00 --- /dev/null +++ b/www/resources/js/motionOldAlgo.js @@ -0,0 +1,104 @@ +// +function onSuccessAcc(acceleration) { + console.log('Acceleration X: ' + acceleration.x + '\n' + + 'Acceleration Y: ' + acceleration.y + '\n' + + 'Acceleration Z: ' + acceleration.z + '\n' + + 'Timestamp: ' + acceleration.timestamp + '\n'); + // var currentAccelValues = new accelValues(acceleration.x, acceleration.y, acceleration.z, acceleration.timestamp); + + //boolean for if the device is moving or not + var moving = false; + + accelPulseCount++; //this is a count of how many pulses the accelerometer sensor has read (how many pulses within this interval) + + //check how fast the phone can pulse accelerometer (some phones limited) + if (localStorage.getItem("accelPulseCount") == null) { + localStorage.setItem("accelPulseCount", accelPulseCount); + } else if (accelPulseCount > localStorage.getItem("accelPulseCount")) { + localStorage.setItem("accelPulseCount", accelPulseCount); + } + //safety precausion to make sure accelPulseCount does not go above 9 + if (localStorage.getItem("accelPulseCount") > 9) { + localStorage.setItem("accelPulseCount", 9); +} + //if this is the first interval run then skip (we want to count the number of pulses per interval first) + if (firstRunAccel != true) { + + //check if phone is in motion + if (acceleration.x > 1 || acceleration.x < -1) { + moving = true; + } + if (acceleration.y > 1 || acceleration.y < -1) { + moving = true; + } + if (acceleration.z > 10.2 || acceleration.z < 8.2) { + moving = true; + } + if (moving) { + motionCount++; + } + //if total count of moving is greater than the total number of pulses per interval divided by 3 then device is said to be moving in this interval + if (motionCount > (localStorage.getItem("accelPulseCount") / 3)) { + accelNotStudying++; + accelIntervalNSBool = "true"; + //console.log("Hit the interval move loop"); + + + stopAccelInterval(); + + } else if (accelPulseCount > (localStorage.getItem("accelPulseCount") - 1)) { //once the interval is nearly finished, device is not moving this interval + accelIntervalNSBool = "false"; + //console.log("accelIntervalNSBool: " +accelIntervalNSBool ); + accelPulseCount = 0; + //console.log("Hit the interval not moving loop"); + + } + //As long as this isn't the first time this method is running, check if the sample rate needs updated. + if (localStorage.getItem("oldAccelIntervalNSBool") != null) { + //console.log('running updateSampleR'); + //updateSampleRate(accelIntervalNSBool, accelSampleRate, localStorage.getItem("oldAccelIntervalNSBool"), "accelerometer"); + } + //This is so we can compare the values from this interval and the previous interval + if (typeof(Storage) !== "undefined") { + localStorage.setItem("oldAccelIntervalNSBool", accelIntervalNSBool); + + } else { + // Sorry! No Web Storage support.. + console.log("No web storage support - oh dear."); + } + console.log('Device moving: ' + moving); + } +} + + +function onErrorAcc() { + alert('Error: ' + error); +} + + +function readAccel() { + navigator.accelerometer.getCurrentAcceleration(onSuccessAcc, onErrorAcc); +} + + +//Loop the accelerometer sensor reading to pulse every one second for 10 seconds. +function accelInterval() { + //localStorage.setItem("oldAccelIntervalNotStudyingBool", "initial"); + accelPulseCount = 0; //this is a count of how many pulses the accelerometer sensor has read (how many pulses within this interval) + + //console.log("Accelerometer sampling rate: " + accelSampleRate); + accelIntervalNSBool = false; //boolean to determine if the user is not studying during the current interval + + accelIntervalCount++; //how many intervals the accelerometer has been monitored for during this session + motionCount = 0; //how many times the accelerometer has pulsed during this session + accelSensor = setInterval(readAccel, 1000); //measure values every x milliseconds + setTimeout(stopAccelInterval, 10000); //stop reading after x milliseconds +} + +//finish the interval +function stopAccelInterval() { + firstRunAccel = false; + clearInterval(accelSensor); + clearTimeout(accelSensor); + clearTimeout(stopAccelInterval); +} \ No newline at end of file diff --git a/www/resources/js/study.js b/www/resources/js/study.js index b07b7c5..3242b5b 100644 --- a/www/resources/js/study.js +++ b/www/resources/js/study.js @@ -240,6 +240,9 @@ function initialiseMonitoring() { localStorage.removeItem("oldScore"); localStorage.removeItem("score"); + localStorage.removeItem("accelX"); + localStorage.removeItem("accelY"); + localStorage.removeItem("accelZ"); breakReminderCount = 0; distractedReminderCount = 0;

      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%0A!(<_lKk*O*KybdF;H5a3nmCpKqsQh% z+llWZxS$wU2w8s=6s1&Dg+u_aT)D~)9XvqAsqHYt(f06z&sa&(bi4Xv*E!`Sost(ys&fmRfH`=*cka)MdR;p^@9%*8t(4-0<2&YNN8X{wXv`s(-8qZjm zSki~(7Fli{ggvjA-QLgqyO?7w1mU=wqlmlKGlAz2gt3=3M0;J#sxljlk#AFhRQj#} zw1oH+Tnfkq?9fpn^z+Is znSIlN+1QUZdP;ttw``92n~Yzy7bd@i1B5d@0w+SE&w^!r*10;zGw+FE(;DjIcZ|Qe6ov)_z)UTTNn`n#}NcAs5e8B}5I8&s||B6;FE-rTciO`AoNn5PG zbzcRC=$Hb;L=a_m6ca09O~-X#(J#Gg4!WntDWWJsse9_P?kh%DoU!7b^))ahmHqZ#FvQ<7(K5dK8`%Oi6$EImwMD;drjgu!)DF`PprsV2T6G1!%2XUo zPEWQ`w8gQ$6npuFV|L_VD-2tVEj_o$HgDX7b~M|XYubRPQOhLoD-xkH5x1XltTJ*V zO2(}!5rI_&zb>AJ_PQ+9a*~E@dRC-m;y;^3fr4n(IUHa4KJY_FYo7)2IUWQj)Ku0% z|KhBlY!IQ{XTRy7WdNwi4XTlL}h;s2okiV+S*a8sSE z$w>Pu22&^NnAeerW+aGTh)BOllNx~rMXb*t#7YELhUvf%5xfu_0qM@|Y(9`z9$KKy z8#Y;feW6{77DddfnjhfO;{Ca%`>S~it@AbMXztCenar4NWwVA;Iir`z@r~Pd+Kf3f zZ4HR71Y&<~!UdMdCXd2AtVL9+oH`Jhq!LNvP59W9PoHLyXm9_^E^~Jd{hR#IwSXVg zCZFT&*Hh1B`?yQtMc&tR-utdUHP~qKE&1&A^S(~r_r<#)bSCT?zv>k-BgowXoySR2 z5yCH>Lc};GP3)MotUN2hjUUp~>Y0QOP^}4RJr;yFxw&~T7iq?WthY2%QiMs< zFP9VzVe&jDU#rjm-QP~_=fl2>sS*+nLNK(af)JVs5SmKZcJvL{f9_sKPnnnxnWvs|P8RhxbzOTX}(0UEXouGBtGS8jqOwof7 zVShNjlrS-4Fh_%j+ARw0L0l$T4)Wel2*QCm5z;KQfmdGnFT_c;JBtKpy3`b;n!42t<={_w@`AB;j|Osf7zqcSxkCm-I6Ev&duG0_U`#IC&JB5NUALuTrflaF`pTW>hu+VbgTc6$6=$CM6$ zkHoC(-?!b?t_zi?O-s#i2sIzZQ~_`ygz5vqQ;|pb47@iAftO}h>*9xyCMQK>_FwEQ zJ%hcWQj5}RR8^t%j%{@~Bn~Z@5N-@+-EmBXnr&Clpkw}}{SXWZX9*F@-J=(#I+g4L zwbfNlzz{>9o0n%_`pQ=b+}a~<23#6#Rrven6lB`1U%J8m`Jcawxj)wypK%F(t_yGp zdCsjUop|LGKxn}wx zqTs=r-W@Cew;nzgW9rca&ks#&rl#Y%M)Q-IP{CkwJCJr%{pck+Atq3`TE5FN6Kc<% z+SHF;4ySOP?yr}aN4*Q5$fS7NZMWI2x8CXk8pW7uEYh^fH9-4a=WE}}#YSV-Z(=?* z77=sZLyWM3xHKQlU)Skf=ZJY#UwYT?9`kzYc)j&G_4wrPy07PVD2IHq<# z>!rOmeddgl#94i6d};%Xf98_&?MNlCjlXnBLAlL5ZH84J*~nhZw(!^_tJz;?a|qf@ z!7`FPwGho|ruoqJ1qe2BKHsrCCm5)3ByN91T!LBqIxT6)Z|e^pvEJr3OONr{Ig4l6P?s5T zTGmS@hg94u3bRXX0-xV_6c8hdpg->vKb`re9fEAM-D6f8b_?C94jt(&o zW(dJt_(1_YzJ@)!>=-YsGkgmnbX#Tfm&{Ak?c)B(Dip7KwAvQhzR zeA1F?xx_51jq-3_eC-vB!0eEfl4bWl_84vo#a0VK&BZ}|kYJqE&%SJ*{nE|sAgRVl z1`m>bl>mlyZ>^*3;(0c>B;y|-b=3PeI|^H8o*%&9(PMgjVi?81 zLipgg+&xZR7uPxeblh7b@7+7sd-u-$;P=qFfADW1Aeewb8rNQBO~lX*Q|+dGsN43z z^wif=O-Fazzpj1E5~#E_j@hlg4j;|f08B`LJU+|^|EUO&-w^vL9;t9742@__ zD*)!R?j2P&kqsdy-=H)KLqxPj?WM#Xsc^)c#YDyfXJFY$t&e-;<>uonDlJEpEkAE1 zsgw5MhquSBz4ltGg=vb0FbT+8TAG|D&W|=x$U<|FNmRakirT;HuDhJ1D$}Q)*TWA# zY{kWeP9mQ%V-}3k4oAGjT*MNnH1D*zwqVgr80}aBxej64xyA{1l6GHz{WV-CLa9r# zvSaOv{S`zRTN?g5i<$3mR|MqJ)4*7`A#&1!9 zLjeTeiX)XSwN?$9Lm@F~oV!5$XP+G^b|6iUw7&r~8e&L(^phVTt)FFEcWyd*uTr+k`#hm#KaeuPIbsr z+G#P4ESFoeajZHD;OZX=A^UKDq7{{Ug!?_u#`;RyxhD`^>fWxzB&u4j#oX^6fWZP;hraxT&eDvizcQTXJr>?T4Uu3c+OUBx)==xo*;u2%bDMp9qVZG@N2y z#q4R{>37XreTvXX`y%40H4y{3dGlu1m-eHylQItqzV%)29;|!sI!C{0ouon1^VKue zo|bQ_m|6)F8ngC@#;xyKXTgMydribq&q`y`xHVQ0S239yqZeqV`-#qIp6X9)qW8b1 zY5X3et}$pVT2C>?S{D&^(IBnkWPGOUbbcHr?egW9+Qe_}x44`$EWfzSYWLSzMI9Cz zgoKd+%K8FpooM%F%`9`4(TNxs6%+*%Fr!hrC%7#FUs7U9@xR1MiU0VBQfk4JEk)3~ zd+lmFXU0Nn=%eZs>l@Kb$}Xx$r6N=Yz;_1Tm(~$|1;U$(2hb0$1QJd~Gyd;dh-k&c zu>YV>AW18qIo%1C(FtgPAvGfug`qqm+GX4WW8-b~04c)oZ7rRdY5ux;inriaG1O|A zxayoXb-ERlrPxNXq2w?VA%WJgD>?jq2D`4u%NLBcJ-T@#v{1VamV{{{Cy1U7(Q0+4?Xap)BgO!cfZ313%L%+Pfr6F>>t4IjEx8XAi%%l?z^1S ztqM2;XfIT;Aq7Nq^zachq_f@NG{}!?@@W$UDPT)ubPO%`7Mt=C3A%6p{ts-`Im@tS zqvjv%C7N00I++#GRw4TA-mnFxDQKU)^(Gr9ba3zf19ta++-n(_;C}ne({>FK@^CwT zkH=drZ~m;4!wD_p$*&*z!CQEps6}US-8Js>q^rI2KIr)5W73nU=@>eS|MFQ+%j?Vi zc*;LmEO)JP~=Kaz1sn2KgjQ6RgcEp4`?zQ#U&=>_)72YzSYefCis>q6TP((LE_jQROk z94IG<#((HYy+xLmTCg7^(N3OM)*=@3S9lRVYw-{)vefyDvaE+{RS9Kf+-iRG^Q{A=~aAQ^X-buuR{B{-yV7BF}vWx3((q4BZI((5TZeFmA357 zH{ZmxE#JkU^CR5&)_^nVJp1IIESo@xGhj}I-1hGxA^s&-k`RBu{`mZ(m@&KUZ4#(U zqt*b-Jo?xJq=-qzcddtc;a1SpKtJ=H$uu!B-u12Mbfsp}GZ&I8DJ^l5w|p3->Hql0 zKW?%3t#;zt(?vd15qmKjg5h7@d52?AKKJ=s9M1T=uYG0Gs4YMJ9(7G@fFzrk2ak6;}*4fwDK~{@b^2atw|3c}7~66%>~^jjpmb#3x9T z6-sv|fBRt^-iC3F@`a)K%BK8nRxZ}6fXijt5B^hsO+!s+VpJQvgta9@0j>hVS#hyM z-7{7qNf7cQ@L4T&^JwH6!56o8LWukXq7cvz9zN>)8_zlSa;vIsu;u5U=jOM0$0l2F z`eNot?#~_s`KUh2&MUP~f95v(>es$xe{;iPtEkz9J3_m+8UF)xP6r&}-}Srt)HSNI zCFV{q-Al*xyRH#&62bC5duBul8G4?|G$5_01hjSQ*169mB_&QfuX}3_r_vMMM}mp^ z5Cf}wC^w}7zcer1Ph<7QD9eWCs(I_4VtD0aJGp%nF4FHBhx+m6<6W;~X(t$W-B6H=l+(i2w3Hl_f99BEN0AwKb8&1S?TSdaNbD z2V^G^sEhBfFA|^p>_qD$N2|Xe$9$KmKEB6zC;=C`habCX^)+KCfPS~QcTG#Tt(2hrPJu!I@(f4S$w|3q> z(jHLrzU#AhOrJlh={oP)$=7L5X>SPzPi?23CxK3|As82|>RL5@_WC}x5AVCTe}&hj zBoKT}W=y?4^e(tie}a9z3kC$!f<+0bf>jS^s9%j!*Xgs~Jveor!$G3bxdBtoWk7sx=W1a><1kSzS%7J@LRp_UY?B!*vj97}Ovd+E^y&rXleOGs`uM?Ym@_oQ}uIXHE z=N`8A9{M44t@61_GsQP|jv}_zCO`mc`birih-OS(I-gej{8U~3iAlS*MOj6bHehE*m5fXqDB&AyOB82ii977xKo};@X9e+p*%_jtu-g@X% z9ru3wkW2rf!-`0kTSGL+c!*r7YzyjwV@gM3b+E0;o_cE+rYOH1$ImlBHLaZN4CJ3A zg1ShSo|kA5Fsq5vWs(A3!1UcsxZC$g+;xX;@*Ec{wNU+^q zPw+u0Rd8_Jz}%FC$$4^%A%N_U4?RNp&_nj~JMVV>xr3zL%7&<}TCoy;^0(b{uB{Kb zz+86m6)=%!IVS3{N1kxn&(_v}J^0Z5E*+9*E`8z;k2z*jS}-AyoUBoZGm-ExXt`(_ zWYP{1e)&N9iSQ=REhhc0P9pNTM&(LViPZOp4cel4q&H zZ+_!;+kar6DJlJ#OXicXe}?VYy}{OwY9N>q^r&K5Ubd>;s048@K8x*+K@%gUlxS+&w_;vIDALjsY!9vtdw1`2LVW>2 zR;9R~h*9e78g%FPkv1iP?AU>Q7uj=9NNHu9e!BP1~uulxC~fzioSuR=6M{*ZGNm8k2*2-bElp95hCK z7UL)XIi=2$#!zGP7(T(I)=Pv(`H59HLF+bu{(Q$IYHdZ#q?r}tC}O5`SGrz>4D`Ik z{OWf-7aiA2eMkc%MpOGycth_x$0Mxzu0G}as{Jj^skHCE`qi(TZ)|8EV=8A1O1&i^ zMnNL$*ROZk7Uc4v@rZ6nI1(Y%p3&aXyyZfm`)Vzu?G;g-jDxgvr+%Njrrz&bN8Km1 zM?&URt+yk@%t33QHPpSmCakP`C!keS-sA+B)L2}GqO;!q^1`-t_Tjf0P1?15 z>unz-Xs_FH$Tl!41{KE7H-H8UZL0+IF{~E~xSBwVsQ@ems&bM=;Fd5!;{J-Z4lBa1 zpthmQiZb%h=x?>7O~-BR@we^ozJ9Bfmtv7b10nnXq&I{-An^f}sz zUpmxhd>jiCdpmpxUwd%!L?5mmiD`_b)p{DS`V5a-Gx&9CS`Li#u#i|L)!zIF@wt>~hM9_lP$q;S)POTa$mHOQ zr^GG}vSZ*we(sxl6%G_^s}CI$TxneTuFtww?}B~ZUroc2|m&L>fT|? zPJZ|1qXVb*rSBis@5v5MeDKaa_1!zq^?hRFdgp|Glja>l%x^*bo0LH!!XF}DQ3UhSbmA=qJ#rg9=Ps`^qapC@1(>oAq>J62&0?1OUl zYj1I+b=MNK)J<^#koXYM{ZXXO^5aJ}HW*8mfqsiACgn^mX?TdfpFoO_ZzsT!sMhg= z1J*v;in)qJ*hQGEwk|e%I2{DKIve6Tx3%jJkU}U0{=ABoI`@(1_ulS~lG=XJQnZNfB0EU2QwIg@W0% zFVe`_DE5(!j_Aw^YoF4|YLtV#r*m0slN(-6MN@t7b} zI3_m=G3`pvH$=`ze;Aq=_HA4|8hBt$(aY7gPqJ$KnPSAWvZU4EAR z`rrT4zJfpP(k18d-0Q9S*ikDhDYQxoNnE&S!O5i)o>vpRd4$D-F%b)CQbbs^cl4Ze zo(G#EPIB=OldET{h-2+L?W4C5v|i?!Njs|)UDE!F5Xsj~&qtbnt?}2s_BGe9f=skF z9+C3Kq%nA!A&pD>UgMN@RC`7QQ_oN5ef{fScRr?H{Nfi~U-Ffe8Pf|w6che0|MD*` z2dq+XX`g8is(bJ6N+q4?x z)LU)#=p&zIJW+bD7T`0y%w36YJ;7PmRT|zE{HOv zWoTLnobAQ`J0>{+4J-bWaR`D41tW13iAm2x0l}L4(6$Z}MNg&>!*@N17Bv#Ve1hT- zzGwo5xSv0U(!HexmQ+~*Ge2SPZ0xr4R|Rd)f&zQ~gjZw!XlnOR94((aNo)}-R4~=8;OMUp)Z9mR}_v5@w z>WE0xD!u_E*`L|fAHTw$eC#n>ws?s>{@9<$d0B`gyTkcANn`PcmtJ(v`+xV3-*!^) zrRSe-5B}zN77fC0Iap;!YO0+dU4sxGL}<%9n@Mue6vz6bX`HEHUM1Xv1hoqj9iTZe1T5#PJDyawHyy7RNF9;V_ybNQ^=> zk+^-t!Ep8A%alNU=dLKm2{YuwiG6?@1j8|54Ip9ijF<)zD_YVapY5q1wmPT!a&;)j_F2g?GamVUwHr!2=-fCWVW@3lej##%5s7k z)>RX26;(u6_Y=uXL6HE8Ge2om(&pw`8;oTdNPIMEzy|SsjOfA-3`V4Pd%Z<>VFnoh z@W?LE&z|$Oz_egyPCqzieV<9Putrj69S%_G1@lZAzEmW(?+FJm@rfM;UruhBg$33z zI*56_z~;uxvmF~Y+kHQ|!xpbR*Jdo5kA{50&cF|}E~m-%0FTAR`S_S0MvIt@_BGjN z%`SCFAbo-y&_n55!Z-}u76$kMK5V9d_R8EpN7dJv%xr}Sr4mJE1ID3v7ER706+jqL_t*R zPA=O?VxhIsvyxWOF+8l7G?F4H9zoJ){jR3ZB6MPE_1v|-(uhi{DIz8UChfb-?>bM6 ztJXn8NlfD({_qEPjkKF9R;+N(Nd!*UiJ++oR&~CPiIA$F;^JcWUH8yE^_(?!57spv zF`goxdbUcdC8k>bveLrp`Kv!M)|#*8Az?~PwwP2gwYt{B8xn*xKb`y6G>u2&Qd3`= zhxgfAUzIP`n&^HyrY0qka24*BxWi$w81viF$TFLsS8SQ!n8w}UOU`M+;+0iSz*QK& z~k={g0T~ug&HEH(feQPZbSE8T(3*Fft{VysUw+F^Zcl@WMHUV5i(4Oe9Oa$**%j$(fml2rN zSxMXldo_@36!5k%80!e76^p@QSYB*F@YQ%PxmdB5X;g{1$u^FqFvwo;5i?-KA4Gc2N zj%>H*p5AYlTza8B@#I5jS9aT`Z5zq!nPKmMEIZmd?0yJ_%tZp`=A)!0LG!7OD(V_- z{H^sQ=I*yH9{!hazS;it_FHxU;@1JP2x9=szgks?33ba(YK2!2^fA|^&KZGm48t@% z3Q?9e|HB@h2JI$+Mo_6Wd^|W2avw}$7inr1E+?U5}OH^`>NpRXqYU?r_iDjN61RC@GL_n9gt-+N_`y?u<-HHgAtIMGMu5)jba zY@@xTfI^EjhE_EUv!zT`K@vYl#f7xQa`Bkl&^ekvKHKWhUeyO-!Y7if8S~fXK#iSE z06`3ZJu#kwJ3>5udhM1%biA*hMD~S`?mb66qF)&xQW z@!c=)FRSTZ0up`Jx5!~~0g_#y2SGE7V#Yd(yLZkS3i{-$1=XhyOxEGDv_;sNwK zgg;2>j`@!I~O27R)QvyTW03C%2;FQmbsJa|mY@ ziPM|NL3-MZS@zrC{?@)z`lAy}T9QjzF75929h))VPa``4mWaK3@BvM8R+5~wYyzx8 z#C->T>$7LgbqtB_CBVP-(?t$x2!V{UZqknG9%n5?YcZ|Ny)LrzDL`->4c9RT_dP`W zMnxxDL17}Ptcu;RXU>r}FSM#7Ae{lUie*#Cz5wFVOHBw({p&e(bx<=rE01wz*~0l` z0!S{zhqe)oS2pkxu#)0(n>};Bz4*e*_N#yUsm-2SjM*^DuK)B`U|y%#Z|=JrO~+x9 z*`Mk9_WphC>$f@o%euNco}GMJ-?hQ@A-_!tg88|j%20A!C_wWk#!2`~zHSmUhuc+h zmuMH73Pgyh5xxr|OiDA?+1(1B+yi3fnX!K98L2K`tq`?*Ty@?qtV-+GuXPNZD`88< z03mN_hZB;^SS9?v@Gp-dBD$fy$9zfYcI)lmLbDWv$j8~4XD`8ZVV|{O*|__j`>hdE z@l9X&GFc(E*y-~YAUw3XifU(^xzK8HwNOC{;gc-fTSg<2oe+|dUv4{(*4wu7W$ zN5r(B^jy@Jm}|X@(CK-21X{;5578-U&c)3B?sva)>%mAH9p&mw=<^q-(WT z)t5(Hb?*?2g!YEFZvR{FnxC3S7rgbCLsmk2oedB`lmKmuCRN%H!qIqXx($*kAfkt0 z(3F{$(U)rnGOBTXI%fHY%#!Co(|RzGqhtxVj*yTWFyxYh>K3&=k_#nx=uXRQ?oUbU^Z>SOcm2S2-xJ&N@x0^dXw3enI# zFl&fOW#4;y$_MSzbhKW>q*jy`Gd>z7@uN&`T7VNxdFRy+!-mV#x}c4NH}La3RZ`o~ zi1r@uu@QXaqta6u#;7I70$FJU9kB-^vkPJB(fV<&Xrd2a^Dwlf6KH0Ai5b*kfB}xc zJrc!Ikn~sbDc1coAHlHP+hjE*yv8x(J{Wx|wSs7O^zsL(a#mOg9>*6KMbWx9n{3r} zQ*F`wa@;GsZK7u`G;iF>@>;EG*BjP5?^>IWLc*6fmkvXMnK#$J=3Q{6J?Sxcf-^O( zwVIBrIX($^(0839Mpy8lrhTpN>c`vb`mR0%LsBs4dI_G&_#)x$lb`&gbKO#ayZY35 z+N(spDSXnzMe>m^}E|7XvYK=)zOB3T)&H=_G6}sM8X{&@5O8ta&V8O z(o8R^{I}oPYR$(REUV~Ev_a|i_V#TAAw-k#JePp2!xryS<}}+Ezj%x7!z8AtR^_Ve zBe)@!Xh2rmE%Jx`Qw1C`!Wz7^Yy$%Xc@R1M;&abhI{6b@ab?I%#T1DqXb`Q3k7&j1 zTejM)(lWc|vMX(0#eV5Ft*~^8^{;ye7h3XaqMhu4*!9B%Pnk96q;x)c4B-$QcW-Tc zU#zuvkrF9VWehPP4|j1YCFEFWExv*>6rrj5=iwwU4r9YBALIu$Exy{An0Gb>ox3F% z*26-QRWKTv`(QTF2*OB4&~FfbR1rWQ43a+c(1| zg61y*zbBy>`Dq6O1oNR$mY*;F4-RmYtN7H-uJL*6K9Z4O{yv}GwfZ&Nd8ElM$eC)L z1r!PhZ?`6L2_~#6b=vM>_SFPFsJW>**0}SCjl{DqFuh|i89t=`*y1ewr(woB@FDG> zI#B>-r~oOSHH(9>7~BsN1vQFI$70Y&b^@$F=S#Q1KAzmTR95ljWW=jjp(VUV}2Mw^_ z{g%Y~v=Fd@i#L9A8h>eNkz=xij5R+Yc@;rW$}#yH$}*Kr-c2Q6uc$s^`w#Cup`nb$ z-*XW(5)Ba&YYRB!>F1uea?IFCFoIgc08!;N4NYum_DM8BfC#WnZC&^gH`pZ?U2K~- zZD0(3?vX+|!VKH?&PL!K-|LQ6>*tw@(MlqKZLBlI&>eWE*3OrO|H^hCUs*A!`Ys<=xgE&;Km=1U5@L$Au9}O8ub!jEq-UkE=r>sk^jUrA9R03) z=~^}IH+}bB+6Q8CrF|9CtNZACadENR*B+77G2Ku1)|}O^7mmNaJ?KAAoQ!5G`RWt}Y} z0|CU`3CE%#B-KI#NB|mw{RDzk@{D;lfRAWj{T|%A+H45|-CUFyfs9<+ba>D{`>_ix zB0tGiKe^Y&5{K<)Kl?jyKB*EZ)Pb=9iypx?;Nchos}%U@t%Am_b&{|cBp^JDVAcry z`$xy{8^u@tFKsSkjZPM?hcbp9o$sxxa|N)vMV7#C)Z;#tkdJ>Vzv2cqf^{+hVNL;O z(FCYPV|@!l`wZ94fZ4my&aern7Ye0O^0iL*5&YZ>rv3!;s=cI_Zmae8p09gO@Ea2d zu0iHEK2Bi}%*?ZAMp?t5IFxklwtq*ZO)o9Aj;bCzR6`(P>G`DY>a_mGA`5msYJFe0 z#;Q68tRNYj!xQ=MG>u1lTWhSBK6`st--VO(E~Zgq_83ONftt=29vAHB95sE`aqW4X zCmg3H*U=}Qc*4PUF>s=C&Z>P*9p$mhhWgH7r*KLY8sR7t9uHMNV}`1 zYjtno46VBd_rfo_hkp0wtk3FC-@X35aroca@)i+%@y^$+zCpkEe=i9@NKLPO|w;qck(?AT2V-jXY zAuqk0_SD@a^lv;C(*x4y&=6)nv~V#|JTw+_fIy8n=8IaE@nag}{{(=dO(7_rz?2gN zQ7CoPd@e#NGIVG4J5} zH@y_|4Fn_-0j7{-*2C2}^rxqgdlu;#bC0Wp1Y<9Ef>E*q41maDT|QqS*!PeT3qcFH z6+{n(+Y`IrwKsR{g;~nAw|eTW2SPti&cBq{bPG^%E4et+63RZE+_p>6^ZbBYR_JB*O5Dr$B1^;jl-bRlT& zeQlpz|G66o0P4cGl5)2_eKw8sF;71ElpQ&I#9Eq~(ORB`CNL5I#5Hy^mJ%@!@>`S{ zRw>c+IsM#KXjoG1VFHB2$b9!Z-*Z7c@@-#?JJCZA{}#jS69?k=yh<81%#T z*5)VCHZHXVbC-iqV<>@JX>YE52{0bBxu?yu1)p0+wJexqQcPuMDVQqM>S1hzB=wR& zSq4FwgGpO(?wA=|P{hErV?vk4;8^7`Yic9~PIHqTJ6dU5$>N|U1R51Z6g)yhQE?Hb z?GQ62pGYyQs&b~_zZ6_!axk+N78X00*F7{x-LJb3Uup1wkgnEPCi87u9xD# zV$i(yk&dUWxr2UEtqWHPRV;kw>1W80Q0|`H!UYShthm7T@7|94(10C2un*ygUDI^j zDi7=>#a5#w17Eplp}HyhVC~h!CTzoPBHN8Y_ZBWo=XZ^5Frf&612-V%JGn_SE&)U4 zcEPuZjNWxz#70_5U9Wj*Z5Qc5y|mV1Y~>3p-&V~> z_f$}zh^qt??Y+}ZJIw_SYF#`AK=V@nBHoU!aUb=mduSc>o8JGon@8ikcimG>?>ZKX z|K~^$B~5;^l|%O$US4YlpI=LvQnSN-Ep|4-Z&^{E#RA*8_+=|bWPbW=+xXnecIM(U zpa-M21)=R-;G`d1uc8~xT}`$a1<&>W@2kKaZa_>c0Xh~-0h)u2n0nK*iS%!!baOcs zs0MBBtYy}EoPs6kbD;}pyFz6yEf)A!%z#vt8mr22OC9Sn6EF?A&|%4U%9e;E7?QtY z@#KyNRpI%o9%Kl{c#sNL6}6o_kqsn(o5Lu~ zb2RQ!LDq0Q5~h@XCXfjH(D5LdQXm?kF=@@gD?Dx9^;ya!o&j`M3^QbyhJ^)JHXn3V zlzt3_l79fpBb_oLiy|1T_UI4_pB^$CK=+eJZ0U?Sw(sZ~YY(ikk6pToYK?Jr_H{4W zcfT^nzIFMWzhX7sf2#JV_J{Vq)?M%3OUL!ne%3J$X0?CCTdW(0*E|G&-Z(uN)p_1L^{(b0B028_8bwu;X{f2z^Rh%FGWmju5eqEA+76LF&8m#zpvUW`9N}4PJuT(h61aGtfM6pqk)M3uHnP_Nkz4aC@ z9J5*oNpEKxNrLfvJ24<{kgn57|2!lTz`rpXO=sjpyzL;EW&K-dmRR@z%+#9A>q#+! zDUHC4D8`tdu;l)sg*7;WtG>;K(a$;ZtHsEzGM*ywDVAfPSXA~FW-#U1VTwbx)eYGE4D)=HBd z#Mg5ivr2obe0q_R@c)^JWYhJr$rvkEQW$LrhtLUg3P+;#p&5`fy=LOg#+ztXJ{z^a z%_@e;bIEzRNbW6+EhfrmS0u)oqrB|5h@BQ3XtqHui9HC;pl_mW$tKG`_H5ASb1S3kP`$FeYGF)C4SQ+CSRA z9stCXq9`>g69yui>;ozx*k16l#%7}7Xo+Gy*%NRHtV2GC zHP+%rLpeX)Ao+LU$36yw3!`32p4SGno)C(<#wN#59A<3%6$CltE{*rpGs31 zWG_f{2&M)f-??+=piON9wte=6FWl_Rt&ctah;7`o-dfQ(Uw+x;Ryw8F)@^v(F1zAV z2vjIt*5b1lIUhzLz(yFhPZV5DACZosxag7#frn)K^{;>Jd<@T9fxrpe_n>XBI?`aP z&RVwY1mR@9+POO9OTG(j{o>V{wTfYf0pw-TANIbIkSw zzkShLHXDbC`+*^8-i7>xQ2R+KCWI-RqGvCpSza~;-`$xOydbnUdU5Fx12&8cMm3C6 zEhVp;TRQk$XJ7m3?KXAV414OSr(oRgcYWS;wZN_~B2-(gI z%4BGHd1aW#r?~xhsN$IIJy3zKxl;H<;mdrw6NHPWP6c@q)MHm#N$FHHl2s7HWGh}g z2O)VC*&w>@@(WhDy{jCS()NZ@pMe_yOt~6`0q@PM{j<+L>$II(gS`A4H-^U_e;n7A zt=6P6p(lur`+wEQSL2bn$`E+ci-(w!zy!t7=LL`_3UIN&^^_U zXEhLv>$95N094FFeaLrD%(2p?X-r3s9B~4g(uIiu&_2+f5QDCBG*{h2`$ezGgwxYV zX{_F7cf_^B? zfk`HnR5A?Q$h^y-BYF7Swv&;k9bqTM&YX>&YvgDbsvaK?joY-S<>3+w$tPA?IEtMv3NI-8&r6N2QD51UR2)M z71ZH(tvQs;y^BfZBMdBi0tJ-loLmm1RPk|c81zY2Tv&64l?q*>(iFb1k>MTI)-Yn_ zXGXEUK`UFCY?%an-E`4xB;slIu*{`um_J zL@fqN$h)(ZvT$e}@C$Ga(#^ z8CDdl6WduUxi6@Cl}{nDC))7ppL-uUUPLoPq33Lg&Sv*3aDpHn%5{h z+`^jSUtE-zO7dvxP4hhC(JWSuVlw1DZPMhc000Oiyl>EE<`r9SOQ*FWT}Qw`$hWr$ zVm~!E3zr9&cw7*q2^e#xq0pumAZWeyY_*pKwCQn)_O<6;wLJ~^W)e`<6&0{UTaVdr z4N>HjA&f7Nr~Wko5d=ZB*4BXldFDj54wEo@f(YKsTzvNM^BUv+QIsbfJX~wR<}RXO zsq%t_AX>@6LHJ=a5w;)#!!>&?ed)zk($!~UMHB%k#b*i)U^vg}*u(dpTsNg}YDK$t z&hllpb1RYY%&`}tr~@;&0^a0febH4{BmHA4V!o01;yy)+tiqyv{34HA2~~FDnVU+n zcC>cbnP)7<{JhCAlY;Lu2zf$c9Ebx%Pv6q8DZpivpgNiS>uM{VnfLO`F9#R&IwYku zL@CMmeBwJQe_36V#{QF!)C{C@5iT($Vkm|XXoaX+TiP6B)Q5>rNbQ9e{^Wu^C&vA@ zYv*?I!EWK$vqbZ!J9AY8IOOW9uZE!ukbr+DOv`c1zSEp<=)uEB@b#Xs!$;8w)O5I1 zO>#k+GvnNo>vsI`W_KSUH}84Nav+2$=1FB;71*X=KercvFRh1y9CZ#d9KOpGTj3mS zbJ$`0+LHl6QXN4Mhw*tAf>p4bnAUDwJ%rq~r^En8AjIgt?*0g(I?jz8Zq$9ku@nrC zz)XV`3+M+E3a>n;4N-<-e} zf&V|*9~?u=bJerR#vS7BU)}AV=i+$_T%nc(aPO|&drz+0H@@)=yZ-v?-CQ&uXVMFT_^WPa3oKltE-j!>#k5mT*!_KhNy#Z<~AMZ{0P z>s}&aVmynBi|wL|E^>3zz4g+yy1$rC%}Y2|=1h%2bV$timMvSHYl*ULNaL#O!mSj{d8XuNKY%P_0(K+KRr*680%iLT6j(0|0m7sSNGN&G+s5`SFbQ= za!(4!x4eW~2(B#`EVe)0{!dH$7_U7l_`4(+p}RTN)A zYdQc^mz-H*8*3UY#ZS3Z==jVjY4)*mPPavuo>%*IiUF{iw!CQXd}!F zOlS{dh@hXO%<_{) zNu52_0tkJ|3mXW_$Gwi=HTapa0Rr||N9C{$2e!hofQYfxGgi|xbkD(k;~z8_0D@^p zDF-vGy{(t%YEZ6#1WbbEg?N5zG45;?In&47%&>qrp?Q741qCG5asTfoJ zrff8_K*)+Ac=DK41yc%^r2NoJeaT%wZUe$G`uy5!uesEBvS`Q!NU)#=3^c{2!9X+x94az{7(M6>Qs+I@cIMf!i3>ZWD|sCQ0<9yPhWqw!XAFR-Z7pr$@sG|O+P>v0I}?BW}$J+{}W_b2!mnuqy1Lm=rJ_%VFY=NVRoK?0ruwi-rUTV z-~WcqgjmkRFL^KmA3f5$Tw6BJ!tj@Vs(Y`ML>F7+NTkh9@mupivo&-cXUsfbkVp_8 z$uuM^XNeH17;H

    K582_2woUo>TNH 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/breadcrumb.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/breadcrumb.png new file mode 100755 index 0000000000000000000000000000000000000000..b2cf4f3bd51f42de7341d38f9842e34b447adcc1 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g!3HF2ETDSr z1<%~X^wgl##FWaylc_d9MLC`>jv*Ddl5+C%d6L?qYY? zkNkDmBi3;6%?g5mW7!Rq`Y!HGb789ZJ6T-G@yGywppk3on4 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_checked.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_checked.png new file mode 100755 index 0000000000000000000000000000000000000000..daaa1a866aeacb9721a8b8e1d06a83c5b1fca97c GIT binary patch literal 1424 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~q!3HGX7W?Z1DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*W8C$v-nz@-+xEh&T7#g}7I=NZ8Ih#2eySX?T zn;97!!t}c2Czs}?=9R$orXciM;?xUD47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!Go0o@ z^`_u1HaTU(=a7iqY-b{=D&mb$lF zM@Q$pQoV(>^U9DWfkXFi@t;ss%9UK#UH{d8E}z!aQ!RJif4}ct?!_c`ELGp;y`N1% z`4CV{&W`5>86g_!HW?k#YTMfCled1!H51)Id=eBs_ z4zURbz8z(an>%MggvNtYn<~y1=18Em6^oOR zU3mL#P}RlPUymI~5ZJlbR!2{F>zvh4vbk zb-lmupdi-$@a99sM;~v0nE&+lvu9%O@^e1OCH}8szBReE{yiclx#gL}WMX zBMWWc$TKx1zuPo__U_J}b)P#|t$MU^S!36^xmn47ZZvJO{xw6h`DTKAFGu+00!`y$jv$i_e@NH1{-XGW| o@%jHpX?B-sg+DyHDSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC z!8&|>tvvIJOA_;vQ$1a5m4IgGWoD*W8C$v-nz@;nxEh&T7#g}7I=NZ8Ih#2eySX?T zn;97!!t}c2Czs}?=9R$orXcj1;?xUD47mkBn_W_iGRsm^+=}vZ6~Lah%Eav!Bb??z z^`_uIwGE7fKYUD@&a2kaI0W+QrG=L2B}`{Q-Ll7JR%>waI}$RR8I#tMLvyIy@J0u01mO zqFaDYu^c*@|$zw5oq7JbGeSqK?1WauyuRbD4SxzsuP#fN_{HX? zaAKI{_HAYU0xcg(tmaNFWNNgl->|94X`#ZSWhc^?si;Oy%Q@YYd%K`R;<&!eRG*~e zV&O$69v4;=7%W?|erKAY`te5Rlu58Zq(;Y5KchpWBomwg+;;LA3 z;K?tkvuVP!%8a!yuK!U{E4wg&W2R5rLFY+Tb-T8<{_bSCqa-F(T`ke;w&&?i7BSup zJNKV|xbgkDM@m||cb`~xInO&}-`%{$_un`3-d6m@d+_>4iK|(n%?A(M-K%isT4hlc zS7_+n#NW3$)jsszR~NpLWm>ZP?##o>KNr_n*v*Un7%yzV?t49O{q;)Mwq;kdK8n3{ z*f76gVY2?mre(92nR@=?Hs)dObxVH7(4_yVJ#m9#Pc6%PtGVX_u9pfo9)I%3F>Oiq ztjcAp#C7~Q?wsX*FZKT4anra>30~jYH0@a>7;dt=zR`_(x(HNYdb;|#taD0e0suFL B8m|BV literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked.png new file mode 100755 index 0000000000000000000000000000000000000000..4ef08dde1e4aa9d0a43cceb925600af637d8a845 GIT binary patch literal 1216 zcmeAS@N?(olHy`uVBq!ia0vp^{2c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFjeGsTY(OatnYqyQCInmZhe+73JqDfIV%MiN!6JrUpi) zrY;7qM#fIq-2%~@g4-?5INhQTbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3bU9$WV zI|Bowk*AAeNX4z5$p`%o8}PI}=39GP?@n1Oa})bR#R?gfdkZ{7{T(XQcf7IbT<8~d z+sCW!jf$)%OVYGEDt-313x$Im^CH(rh`*{gTqDi!e$$T3SN6r2`x!zjjT3hy6bw`rCo#-&>4yLg^W+jYp+UVW34+WM~27yRvO|FGY; zNMFiXc#cc*Vd$Gh?#Wiq`k3S;7M<-mYbl#z{=CDCc*56+`GOFue l&Dv`BIJEa;Xl)I*0mB;U2ZejpS7w6B6i-(_mvv4FO#mr=rE>rP literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked_dark.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkbox_unchecked_dark.png new file mode 100755 index 0000000000000000000000000000000000000000..3f5e6c934a9088b27509668ebdec19c0d5f504b8 GIT binary patch literal 1199 zcmeAS@N?(olHy`uVBq!ia0vp^{2c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFhHZsTY(OatnYqyQCInmZhe+73JqDfIV%MiQ6s4IL(9V zO~LIJ6P$YWfsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;u&clPQ)ggcRP=Ol45_%) zGuhkkumexq+dWHKWScl%w6T6+icwf3wAbm|ng?t#EGx|)@Vu2gwd)asf=bI2S2?Y- z66aH*-10KAPi_+b_ov#%m}9Q(hUagVZ@9njMtsK$%Lh;XRaw;RlI}l0S%ou2b>rgR zTd#J-on3a>+vQ71;k?wFk_v30p^oxA+ZsD#%B`hh_vni4Y-3LpX}z*ddTQ(`tEvvW z_GIH_L0R4>O;x27N@q4kv$HMKn;Of=Jh@@&<(4Cn0f&lmrgVKdzFW9tL#)^ro#VM0 zZ|}FB)DGIPc3b9%K!-(lu^TN&%8ot}1hd!44>Ve`yc zazFRI|2p^f)@7Mt>p%Z=4-}dF^+*4=@VPPy|1#^ZJ_&DNWZ3?#qPOs;s3)ih@pScb JS?83{1OQ`Zqgns} literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkmark_bw.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkmark_bw.svg new file mode 100755 index 0000000..f737096 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/checkmark_bw.svg @@ -0,0 +1,15 @@ + + + + + + +]> + + + diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dark-combo-box-bg.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dark-combo-box-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..9a4e92d0bc8409bd1bb8431f802e5c65b18ae3b4 GIT binary patch literal 1023 zcmaJ=PiWIn91c#qGS+Pu!FhUQV@z0+rd``Lv~F3GZpCJluCNM%rpfCXw&Z2WtIc++ zAhcJ(i#vK6sEAhwP8^~aLGhx9hq1fvHt?V?UE6uEh9vL3AK&-={=QazWhpRpb%>&< zKz3Oykad`RgMJ_RCtp07B+EFKN_Z7ja9yz>C1|J&LDo>#VF4=I_SSotq^N;Oy;#B} zImfHWU=$C-xQ0d8L}uQ#6mdBf;r%a?^tgBco z$Ar9;xDaK~*kGJg&E;;l@ADU#|Z8F$<^sQgyQfy^Kq3C`sC+*{R0iVxT^Bo<; zr@%-5A=~=={L!W5nZYA=VSl7~^XK&U(Zesf{D%r)4j!KljV%qFtW8b6-dp(AkWL&h za{tqCuKM8N!v0w6_jvP7X2T1c zip~c`L7YB#VS=y+eHBDhx`$2i)dwHM8ww&`2I730Cv%-XSi>RbKZpPO{@Zs3n;Lgk zl-HCK1W_S22pPPu^y~#b{NK^>eIMScQK|(so9!qk+mPT@vkd}Kmpfnv%4%=-IE)d* z+*&Q$f?A~AoMP&f?D*|i zY}nk_m{t0^l&DH>-v(kXhY56uWZ>$D42N^$D=WAuh~v!3dc7NF2>p+qsO8o{5D|ak3L3i=*jW zE=T3+DAVqsnP@cXaRh^Y?BREM4J5mM!&z5g5TK*jnuRpe03M^si8K9Of^N;y z8qQ3caKmU~v1Y_A3B40OyMTfu{CU+0CgxTFnb zWZGHNJXGjnQ>Tecr_;1RvY7=NC0Wr7?_$$5LXtSqaFA>$P!!@M=Abl9)pn}-gmPxj~~TzQQ))g zi?*2kZjAT&d|Q1V2c{B7hRPaR)f?Lm%zN_`eiUwjN4 zGVwmhmmVwWt{mIEyyi&t!Np@S-}>6Y^NCNTqd&$&lS{KxJBNs6R|hsEKKVxPilJ4v zURIA>FS-00So6;u?VntI!FT+`$ioxVzgK>`bw&1Ce`}t{( zJaZG%Q-e|yQz{EjrrH1%)p@!&hE&{oGi@VRg8`4r?56rhLE;zp7k}ygBO`9VRN(Qn zuIoo%m9QTd++lM0Y>yL%GM` z5SXZIcAfY}Sg$dT(cAe}jncw-ckW$Cd3UzGa{b47RiAG9{|;Nuz|5c>tsb0z^V4yl POBg&|{an^LB{Ts5BF|Sf literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dark-sprites2x.png b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/img/dark-sprites2x.png new file mode 100755 index 0000000000000000000000000000000000000000..f9a875bca7dac286350844c8fb20240779b864fc GIT binary patch literal 5066 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�)nj9bT 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 z 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

  • +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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-regular-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..e1662862ad90f40280557d27588b9a580c62cf6e GIT binary patch literal 52456 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 literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..ddf5d1161fe34430599417adaff8b81e0d389fee GIT binary patch literal 23974 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 az1cE(_pEhtM`Eix*%hwY$Pr;>Pu6HLI=^QC literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg new file mode 100755 index 0000000..317e536 --- /dev/null +++ b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.svg @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..6d97e7b25735500915d68a9f6b59091f2e8ea85e GIT binary patch literal 51960 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 BzAOL$ literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff b/platforms/android/assets/www/cdvtests/topcoat-0.7.5/demo/fonts/sourcesanspro-semibold-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..d8443157822bdeb5eaf31bdb9de6e5b569044f7e GIT binary patch literal 27048 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 + + + + + Topcoat + + + + + + + +

    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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class new file mode 100644 index 0000000000000000000000000000000000000000..8511795f9630335ceac358120f7b6c550fc4579c GIT binary patch literal 1433 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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class new file mode 100644 index 0000000000000000000000000000000000000000..e2c77de94c13f248768a482f165017202c39b506 GIT binary patch literal 1782 zcmb7E>2ecC5dOwmYi)Uhgn|hs#)w1-lJI)X;T#qT#|9E50$g?wmGEn{8l=JN9cOnW z7tfHVNmVc;smcTJP$_zJI9L`?R!P${J$-yV{k2~G_xHa5u3*DPWfoanGRtxXIk*|D zz?;FUjmsI>aA$DE$g5_#W|p-KzQC7r_zGX!ShrDSnD6nh_(XP>^Du1kV4Gp7 z&ZAbWWXszV&26c@1`oSpbWe_H-H}OgmEm$-#chx8@}MKUK*cT9VznduP>M(!=j$?(`dfz0(y_hY4XoT?uzb}L4B0wCxZmAriuh;V3`vu(tAK|M z9!ql`DlJn8gHwwl5&I!e5<$nS$Hi4#qq=e`x)o^Ills}FNV=hBI9ICG4j>0A()0pe ztuLwu>|88<>xx7VFtZv%Chofq6lvKvWjOP;AoQ982deM!fl(y1_b`@(DYK=zaUkwe zj~UKR?8wSf-sALOccLIviHzF!gzl)8gX^FkdB^OpgAZ}a!AayD%;ScQTMll+C$3FQ z&hU{*?}a>Sds{lD^tZb*Y>AlQZi+z2o+ucG7J`maiHHjiH|y&K2jAh2S?)Uc9zWQq zIrtGj*{D0Xhx^3KW5O=3F%%~F_ybCBgk7RE!$}owb=01DPJe)hbZ?wCc+7W*K-;B* zUJNIQ#-Jg^UUgi5c(TTC$A+hPBvrNiD?_SOZrFIhusSxj?{y~z?(#ShBfh$&x6^eJ zz0!PlS41raw^SeRW3_xlHEb>M@{s+5=2H>qciPWrHDCwBsnXHFX8K08ceM|YR}-;6vefo6JXEY4UHP@uo;9Q}(=<#J|B z0FpE_Mnk`OoCXaA?R+|?NMCRnrUt)UQ%BTN<{mTo?*}@}$d>G@ljR#5dOLYf)_KIRF3v literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class new file mode 100644 index 0000000000000000000000000000000000000000..5efe5047783437b5379d4c4eaf38e02bbbe3b8ff GIT binary patch literal 10527 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 Q;UQMz38MZG-^LTK0OH}4x&QzG literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class new file mode 100644 index 0000000000000000000000000000000000000000..3e52d6cd76c8076821b8f7183eec7de77450a41a GIT binary patch literal 9561 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 literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class new file mode 100644 index 0000000000000000000000000000000000000000..4cb98c491017fc9dcd2db3c34b7c5d8e79e71aa8 GIT binary patch literal 1050 zcmb7D&2G~`5dJnvW9%9d+5%}QkV2qI3K%MGK}Zl4sUq}1AU$vFm9voUB72*b$3mhY zao_=X41U0NdDdv4HFLxZ$CUx`z$iba2Z-gTbHh zaU&JRNEN3H>piZbM9U~R62o`W1p8vx&u=>nWiyg#;{ij^(@7lg_dFblAk;~uCp-`; zmP!Qu52+Cc1RO|lw3FE^^s!XZJYm>t&WZhBO05AysjDNwQ0Y@ z9rE#jC(`P zW-fNK`;JZB$()Z3!|IIN6i=;_8G@lULY|tuT?xaz zxmX#N?egR+HQh&sV$(KpZ5nTOWoZXuVcw)7c^cD9`X-^m8CIIDo^3}k<|+a#L9{`fn6ljbQQ_XLIZ7Zg8cju+@GlOym06*@0x z;0mf(B8@;9B_oeztmK3*NLoU-{RxH7DDD5H@-p~O%H~%_S3h+;qjPbILfCLFuAr7> Zwn|z7Yq(0XgmqlQMf&o{Yk?#^e*g)x6Sn{W literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class b/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class new file mode 100644 index 0000000000000000000000000000000000000000..62662fc490eedc7a4a6368270df5b7d256b5df39 GIT binary patch literal 11394 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 Bx>x`J literal 0 HcmV?d00001 diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/aidl/release/dependency.store b/platforms/android/CordovaLib/build/intermediates/incremental/aidl/release/dependency.store new file mode 100644 index 0000000000000000000000000000000000000000..8b8400dcf9e65fb815794fe016943dc09d0e8a05 GIT binary patch literal 5 Mcmb + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/release/merger.xml b/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/release/merger.xml new file mode 100644 index 0000000..031c9ac --- /dev/null +++ b/platforms/android/CordovaLib/build/intermediates/incremental/packageResources/release/merger.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar b/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..44b446ee146f031442e8b572288e7c9ad549cc8c GIT binary patch literal 109885 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